diff --git a/firmware/modularkbd/.cproject b/firmware/67percent/.cproject similarity index 100% rename from firmware/modularkbd/.cproject rename to firmware/67percent/.cproject diff --git a/firmware/modularkbd/.mxproject b/firmware/67percent/.mxproject similarity index 100% rename from firmware/modularkbd/.mxproject rename to firmware/67percent/.mxproject diff --git a/firmware/modularkbd/.project b/firmware/67percent/.project similarity index 100% rename from firmware/modularkbd/.project rename to firmware/67percent/.project diff --git a/firmware/modularkbd/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs b/firmware/67percent/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs similarity index 100% rename from firmware/modularkbd/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs rename to firmware/67percent/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs diff --git a/firmware/67percent/.settings/language.settings.xml b/firmware/67percent/.settings/language.settings.xml new file mode 100644 index 00000000..500b64f7 --- /dev/null +++ b/firmware/67percent/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/firmware/modularkbd/.settings/org.eclipse.core.resources.prefs b/firmware/67percent/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from firmware/modularkbd/.settings/org.eclipse.core.resources.prefs rename to firmware/67percent/.settings/org.eclipse.core.resources.prefs diff --git a/firmware/modularkbd/.settings/stm32cubeide.project.prefs b/firmware/67percent/.settings/stm32cubeide.project.prefs similarity index 100% rename from firmware/modularkbd/.settings/stm32cubeide.project.prefs rename to firmware/67percent/.settings/stm32cubeide.project.prefs diff --git a/firmware/modularkbd/Core/Inc/Backup/dma.h.bak b/firmware/67percent/Core/Inc/Backup/dma.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/dma.h.bak rename to firmware/67percent/Core/Inc/Backup/dma.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/gpio.h.bak b/firmware/67percent/Core/Inc/Backup/gpio.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/gpio.h.bak rename to firmware/67percent/Core/Inc/Backup/gpio.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/i2c.h.bak b/firmware/67percent/Core/Inc/Backup/i2c.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/i2c.h.bak rename to firmware/67percent/Core/Inc/Backup/i2c.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/main.h.bak b/firmware/67percent/Core/Inc/Backup/main.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/main.h.bak rename to firmware/67percent/Core/Inc/Backup/main.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak b/firmware/67percent/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak rename to firmware/67percent/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/stm32f4xx_it.h.bak b/firmware/67percent/Core/Inc/Backup/stm32f4xx_it.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/stm32f4xx_it.h.bak rename to firmware/67percent/Core/Inc/Backup/stm32f4xx_it.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/tim.h.bak b/firmware/67percent/Core/Inc/Backup/tim.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/tim.h.bak rename to firmware/67percent/Core/Inc/Backup/tim.h.bak diff --git a/firmware/modularkbd/Core/Inc/Backup/usart.h.bak b/firmware/67percent/Core/Inc/Backup/usart.h.bak similarity index 100% rename from firmware/modularkbd/Core/Inc/Backup/usart.h.bak rename to firmware/67percent/Core/Inc/Backup/usart.h.bak diff --git a/firmware/modularkbd/Core/Inc/dma.h b/firmware/67percent/Core/Inc/dma.h similarity index 100% rename from firmware/modularkbd/Core/Inc/dma.h rename to firmware/67percent/Core/Inc/dma.h diff --git a/firmware/modularkbd/Core/Inc/gpio.h b/firmware/67percent/Core/Inc/gpio.h similarity index 100% rename from firmware/modularkbd/Core/Inc/gpio.h rename to firmware/67percent/Core/Inc/gpio.h diff --git a/firmware/modularkbd/Core/Inc/hid_queue.h b/firmware/67percent/Core/Inc/hid_queue.h similarity index 100% rename from firmware/modularkbd/Core/Inc/hid_queue.h rename to firmware/67percent/Core/Inc/hid_queue.h diff --git a/firmware/modularkbd/Core/Inc/i2c.h b/firmware/67percent/Core/Inc/i2c.h similarity index 100% rename from firmware/modularkbd/Core/Inc/i2c.h rename to firmware/67percent/Core/Inc/i2c.h diff --git a/firmware/modularkbd/Core/Inc/main.h b/firmware/67percent/Core/Inc/main.h similarity index 100% rename from firmware/modularkbd/Core/Inc/main.h rename to firmware/67percent/Core/Inc/main.h diff --git a/firmware/67percent/Core/Inc/pwm.h b/firmware/67percent/Core/Inc/pwm.h new file mode 100644 index 00000000..cfa730df --- /dev/null +++ b/firmware/67percent/Core/Inc/pwm.h @@ -0,0 +1,24 @@ +#ifndef __PWM_H__ +#define __PWM_H__ + +#include "main.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Initialize PWM on TIM2 Channel 1 (PA5) +void MX_PWM_Init(void); +// Start/stop PWM output +void PWM_Start(void); +void PWM_Stop(void); +// Set duty as raw timer compare value (0..Period) +void PWM_SetDuty(uint32_t duty); +// Helper: set duty as percent (0..100) +void PWM_SetPercent(uint8_t percent); + +#ifdef __cplusplus +} +#endif + +#endif // __PWM_H__ diff --git a/firmware/modularkbd/Core/Inc/stm32f4xx_hal_conf.h b/firmware/67percent/Core/Inc/stm32f4xx_hal_conf.h similarity index 100% rename from firmware/modularkbd/Core/Inc/stm32f4xx_hal_conf.h rename to firmware/67percent/Core/Inc/stm32f4xx_hal_conf.h diff --git a/firmware/modularkbd/Core/Inc/stm32f4xx_it.h b/firmware/67percent/Core/Inc/stm32f4xx_it.h similarity index 100% rename from firmware/modularkbd/Core/Inc/stm32f4xx_it.h rename to firmware/67percent/Core/Inc/stm32f4xx_it.h diff --git a/firmware/modularkbd/Core/Inc/tim.h b/firmware/67percent/Core/Inc/tim.h similarity index 100% rename from firmware/modularkbd/Core/Inc/tim.h rename to firmware/67percent/Core/Inc/tim.h diff --git a/firmware/modularkbd/Core/Inc/usart.h b/firmware/67percent/Core/Inc/usart.h similarity index 100% rename from firmware/modularkbd/Core/Inc/usart.h rename to firmware/67percent/Core/Inc/usart.h diff --git a/firmware/modularkbd/Core/Src/Backup/dma.c.bak b/firmware/67percent/Core/Src/Backup/dma.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/dma.c.bak rename to firmware/67percent/Core/Src/Backup/dma.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/gpio.c.bak b/firmware/67percent/Core/Src/Backup/gpio.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/gpio.c.bak rename to firmware/67percent/Core/Src/Backup/gpio.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/i2c.c.bak b/firmware/67percent/Core/Src/Backup/i2c.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/i2c.c.bak rename to firmware/67percent/Core/Src/Backup/i2c.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/main.c.bak b/firmware/67percent/Core/Src/Backup/main.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/main.c.bak rename to firmware/67percent/Core/Src/Backup/main.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/stm32f4xx_hal_msp.c.bak b/firmware/67percent/Core/Src/Backup/stm32f4xx_hal_msp.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/stm32f4xx_hal_msp.c.bak rename to firmware/67percent/Core/Src/Backup/stm32f4xx_hal_msp.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/stm32f4xx_it.c.bak b/firmware/67percent/Core/Src/Backup/stm32f4xx_it.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/stm32f4xx_it.c.bak rename to firmware/67percent/Core/Src/Backup/stm32f4xx_it.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/syscalls.c.bak b/firmware/67percent/Core/Src/Backup/syscalls.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/syscalls.c.bak rename to firmware/67percent/Core/Src/Backup/syscalls.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/sysmem.c.bak b/firmware/67percent/Core/Src/Backup/sysmem.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/sysmem.c.bak rename to firmware/67percent/Core/Src/Backup/sysmem.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/system_stm32f4xx.c.bak b/firmware/67percent/Core/Src/Backup/system_stm32f4xx.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/system_stm32f4xx.c.bak rename to firmware/67percent/Core/Src/Backup/system_stm32f4xx.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/tim.c.bak b/firmware/67percent/Core/Src/Backup/tim.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/tim.c.bak rename to firmware/67percent/Core/Src/Backup/tim.c.bak diff --git a/firmware/modularkbd/Core/Src/Backup/usart.c.bak b/firmware/67percent/Core/Src/Backup/usart.c.bak similarity index 100% rename from firmware/modularkbd/Core/Src/Backup/usart.c.bak rename to firmware/67percent/Core/Src/Backup/usart.c.bak diff --git a/firmware/modularkbd/Core/Src/dma.c b/firmware/67percent/Core/Src/dma.c similarity index 100% rename from firmware/modularkbd/Core/Src/dma.c rename to firmware/67percent/Core/Src/dma.c diff --git a/firmware/modularkbd/Core/Src/gpio.c b/firmware/67percent/Core/Src/gpio.c similarity index 100% rename from firmware/modularkbd/Core/Src/gpio.c rename to firmware/67percent/Core/Src/gpio.c diff --git a/firmware/modularkbd/Core/Src/hid_queue.c b/firmware/67percent/Core/Src/hid_queue.c similarity index 100% rename from firmware/modularkbd/Core/Src/hid_queue.c rename to firmware/67percent/Core/Src/hid_queue.c diff --git a/firmware/modularkbd/Core/Src/i2c.c b/firmware/67percent/Core/Src/i2c.c similarity index 100% rename from firmware/modularkbd/Core/Src/i2c.c rename to firmware/67percent/Core/Src/i2c.c diff --git a/firmware/67percent/Core/Src/main.c b/firmware/67percent/Core/Src/main.c new file mode 100644 index 00000000..fd75f93f --- /dev/null +++ b/firmware/67percent/Core/Src/main.c @@ -0,0 +1,610 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "dma.h" +#include "i2c.h" +#include "tim.h" +#include "usart.h" +#include "usb_device.h" +#include "gpio.h" +#include +#include "pwm.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "usbd_hid.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +typedef struct { + uint8_t MODIFIER; // Modifier keys (Ctrl, Shift, Alt, Win) + uint8_t RESERVED; // Always 0 + uint8_t KEYPRESS[12]; // Up to 12 keycodes +} __attribute__((packed)) HIDReport; + + +// Switch pin mapping structure +typedef struct { + GPIO_TypeDef* GPIOx; // Pointer to GPIO port (e.g., GPIOA, GPIOB) + uint16_t PIN; // Pin number on the GPIO port +} SwitchPins; + + +// UART message structure for sending/receiving key events +typedef struct { + uint16_t DEPTH; // Custom field: could represent queue depth, layer, or message size + uint16_t TYPE; // Message type identifier (defines what kind of message this is) + uint8_t KEYPRESS[12]; // Keypress data (similar to HIDReport, but for UART transmission) +} __attribute__((packed)) UARTMessage; + +#define PACKET_SIZE 12 +#define QUEUE_CAPACITY 32 + +typedef struct { + uint8_t data[QUEUE_CAPACITY][PACKET_SIZE]; + volatile uint8_t head; // accessed in main + volatile uint8_t tail; // accessed in ISR + volatile uint8_t count; // optional, only if needed +} PacketQueue; + +// Initialize +void pq_init(PacketQueue *q){ + q->head = 0; + q->tail = 0; + q->count = 0; +} + +// Called from ISR +bool pq_push(PacketQueue *q, const uint8_t packet[PACKET_SIZE]){ + uint8_t nextTail = (q->tail + 1) % QUEUE_CAPACITY; + if(nextTail == q->head) return false; // queue full + + memcpy(q->data[q->tail], packet, PACKET_SIZE); + q->tail = nextTail; + return true; +} + +// Called from main +bool pq_pop(PacketQueue *q, uint8_t out_packet[PACKET_SIZE]){ + if(q->head == q->tail) return false; // queue empty + + memcpy(out_packet, q->data[q->head], PACKET_SIZE); + q->head = (q->head + 1) % QUEUE_CAPACITY; + return true; +} + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ +#define ROW 6 +#define COL 5 +#define MAXQUEUE 256 +#define MODE_INACTIVE 0 +#define MODE_MAINBOARD 1 +#define MODE_ACTIVE 2 +#define MODE_DEBUG 3 +#define UART_RX_BUFF_SIZE 64 +#define QUEUE_SIZ 8 +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +// Initialize HID report properly +HIDReport REPORT = {0, 0, {0}}; +UARTMessage RX5Msg; //Buffer for messages on uart5 +UARTMessage RX1Msg; //Buffer for messages on uart5 +UARTMessage RX2Msg; //Buffer for messages on uart5 +UARTMessage RX4Msg; //Buffer for messages on uart5 + + +SwitchPins ROW_PINS[ROW] = { + {GPIOB, GPIO_PIN_10}, + {GPIOB, GPIO_PIN_2}, + {GPIOB, GPIO_PIN_1}, + {GPIOB, GPIO_PIN_0}, + {GPIOC, GPIO_PIN_5}, + {GPIOC, GPIO_PIN_4}, +}; + +SwitchPins COLUMN_PINS[COL] = { + {GPIOA, GPIO_PIN_8}, + {GPIOC, GPIO_PIN_9}, + {GPIOC, GPIO_PIN_8}, + {GPIOC, GPIO_PIN_7}, + {GPIOC, GPIO_PIN_6} +}; + +// Initialize keycodes array +uint8_t KEYCODES[ROW][COL] = { + {0x00, KEY_F13, KEY_F14, KEY_F15, KEY_F16}, + {KEY_F17, NUM_LOCK, KEYPAD_SLASH, KEYPAD_ASTERISK, KEYPAD_MINUS}, + {KEY_F18, KEYPAD_7, KEYPAD_8, KEYPAD_9, KEYPAD_PLUS}, + {KEY_F19, KEYPAD_4, KEYPAD_5, KEYPAD_6, 0x00}, + {KEY_F20, KEYPAD_1, KEYPAD_2, KEYPAD_3, KEYPAD_ENTER}, + {KEY_F21, KEYPAD_0, 0x00, KEYPAD_DOT, 0x00} +}; + +uint16_t DEPTH = 0; +uint16_t PORT_DEPTH[] = {0xFF, 0xFF, 0xFF, 0xFF}; +UART_HandleTypeDef* PARENT; +UART_HandleTypeDef* PORTS[] = {&huart5, &huart1, &huart2, &huart4}; +uint8_t KEYSTATE_CHANGED_FLAG = 0; +uint8_t KEYSTATE[ROW][COL]; + //North East South West +UARTMessage reportBuff; + +extern USBD_HandleTypeDef hUsbDeviceFS; +volatile uint8_t MODE = MODE_INACTIVE; + +UARTMessage uartBuffer; +volatile int uartUpdateFlag = 0; +// Encoder state (TIM3 in encoder mode on PA6/PA7) +volatile int32_t LAST_ENCODER_COUNT = 0; + +uint8_t UART_KEYSTATE[4][12]; + + +PacketQueue huart1q; +PacketQueue huart2q; +PacketQueue huart4q; +PacketQueue huart5q; + + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +/* USER CODE BEGIN PFP */ +void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *huart); +void UART_DMA_SendReport(UART_HandleTypeDef *huart); +void addUSBReport(uint8_t usageID); +void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *sender); +void matrixScan(void); +void encoderProcess(void); +void resetReport(void); +void sendMessage(void); +void findBestParent(); +void mergeChild(); +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_DMA_Init();MX_PWM_Init(); + MX_TIM2_Init(); + MX_TIM3_Init(); + MX_UART4_Init(); + MX_UART5_Init(); + MX_USART1_UART_Init(); + MX_USART2_UART_Init(); + MX_I2C1_Init(); + MX_USB_DEVICE_Init(); + MX_PWM_Init(); + /* USER CODE BEGIN 2 */ + + //Enable UART RX DMA for all ports + HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage)); + HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage)); + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + + // Start TIM3 encoder (PA6/PA7) so we can read encoder delta + HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL); + LAST_ENCODER_COUNT = __HAL_TIM_GET_COUNTER(&htim3); + + //Prealloc Kestate matrix + memset(KEYSTATE, 0, sizeof(KEYSTATE)); + pq_init(&huart1q); + pq_init(&huart2q); + pq_init(&huart4q); + pq_init(&huart5q); + + PWM_Start(); + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 67); + switch (MODE){ + case MODE_ACTIVE: + KEYSTATE_CHANGED_FLAG = 1; + resetReport(); + matrixScan(); + mergeChild(); + encoderProcess(); + if(KEYSTATE_CHANGED_FLAG == 1){ + UARTMessage UARTREPORT; + UARTREPORT.DEPTH = DEPTH; + UARTREPORT.TYPE = 0xEE; + memcpy(UARTREPORT.KEYPRESS, REPORT.KEYPRESS, sizeof(UARTREPORT.KEYPRESS)); + HAL_UART_Transmit_DMA(PARENT, (uint8_t*)&UARTREPORT, sizeof(UARTREPORT)); + } + break; + + case MODE_INACTIVE: + //If the module is connected through the USB then mode is mainboard + if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED){ + MODE = MODE_MAINBOARD; + DEPTH = 0; + }else{ + //TODO: Look for a parent module... + + + + UARTMessage REQ; + REQ.DEPTH = 0; + REQ.TYPE = 0xFF; //Message code for request is 0xFF + memset(REQ.KEYPRESS, 0, sizeof(REQ.KEYPRESS)); + + //Send query' for parent module + HAL_UART_Transmit_DMA(&huart1, (uint8_t*)&REQ, sizeof(REQ)); + HAL_UART_Transmit_DMA(&huart2, (uint8_t*)&REQ, sizeof(REQ)); + HAL_UART_Transmit_DMA(&huart4, (uint8_t*)&REQ, sizeof(REQ)); + HAL_UART_Transmit_DMA(&huart5, (uint8_t*)&REQ, sizeof(REQ)); + HAL_Delay(500); + findBestParent(); //So true... + } + break; + + case MODE_MAINBOARD: + resetReport(); + matrixScan();//Something related to this making the key stick. Likely due to race conditions + mergeChild(); + encoderProcess(); + USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT)); + break; + + default: + break; + } + + HAL_Delay(20); + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +void mergeChild(){ + uint8_t packet[12]; + if (pq_pop(&huart1q, packet)) { + memcpy(UART_KEYSTATE[1], packet, 12); + KEYSTATE_CHANGED_FLAG = 1; + } + if (pq_pop(&huart2q, packet)) { + memcpy(UART_KEYSTATE[2], packet, 12); + KEYSTATE_CHANGED_FLAG = 1; + } + if (pq_pop(&huart4q, packet)) { + memcpy(UART_KEYSTATE[3], packet, 12); + KEYSTATE_CHANGED_FLAG = 1; + } + if (pq_pop(&huart5q, packet)) { + memcpy(UART_KEYSTATE[0], packet, 12); + KEYSTATE_CHANGED_FLAG = 1; + } + for(int i = 0; i < 4; i++){ + for(int j = 0; j < 12; j++){ + REPORT.KEYPRESS[j] |= UART_KEYSTATE[i][j]; + } + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator out put voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 4; + RCC_OscInitStruct.PLL.PLLN = 96; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + RCC_OscInitStruct.PLL.PLLR = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } +} + +/* USER CODE BEGIN 4 */ +// UART Message Requests Goes Here +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { + if (huart->Instance == USART1) { + handleUARTMessages((uint8_t*)&RX1Msg, &huart1); + HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == USART2) { + handleUARTMessages((uint8_t*)&RX2Msg, &huart2); + HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == UART4) { + handleUARTMessages((uint8_t*)&RX4Msg, &huart4); + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == UART5) { + handleUARTMessages((uint8_t*)&RX5Msg, &huart5); + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + } +} + +void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { + // Restart DMA on error + if (huart->Instance == USART1) { + HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == USART2) { + HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == UART4) { + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == UART5) { + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + } +} + + + +void findBestParent(){ + //Find least depth parent + uint16_t least_val = 0xFF; + UART_HandleTypeDef* least_port = NULL; + for(uint8_t i = 0; i < 4; i++){ + if(PORT_DEPTH[i] 0x73) return; //Usage ID is out of bounds + uint16_t bit_index = usageID - 0x04; //Offset, UsageID starts with 0x04. Gives us the actual value of the bit + uint8_t byte_index = bit_index/8; //Calculates which byte in the REPORT array + uint8_t bit_offset = bit_index%8; //Calculates which bits in the REPORT[byte_index] should be set/unset + REPORT.KEYPRESS[byte_index] |= (1 << bit_offset); +} + +void matrixScan(void){ + + for (uint8_t col = 0; col < COL; col++){ + HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_SET); + HAL_Delay(1); + for(uint8_t row = 0; row < ROW; row++){ + uint8_t new_key = HAL_GPIO_ReadPin(ROW_PINS[row].GPIOx, ROW_PINS[row].PIN); + if(new_key != KEYSTATE[row][col]){ + KEYSTATE_CHANGED_FLAG = 1; + KEYSTATE[row][col] = new_key; + } + if(new_key){ + addUSBReport(KEYCODES[row][col]); + } + } + HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_RESET); + } + +} + + +// Read TIM3 encoder counter, calculate delta and add corresponding keycodes +void encoderProcess(void){ + int32_t cnt = (int32_t)__HAL_TIM_GET_COUNTER(&htim3); + int32_t diff = cnt - LAST_ENCODER_COUNT; + // TIM3 configured as 16-bit counter (period 65535). Fix wrap-around. + if(diff > 32767) diff -= 65536; + if(diff < -32768) diff += 65536; + if(diff > 0){ + int steps = diff; + if(steps > 10) steps = 10; // cap bursts + for(int i = 0; i < steps; i++){ + // CW -> KEYCODES[0][0] + addUSBReport(KEYCODES[3][3]); + } + }else if(diff < 0){ + int steps = -diff; + if(steps > 10) steps = 10; + for(int i = 0; i < steps; i++){ + // CCW -> KEYCODES[0][1] + addUSBReport(KEYCODES[2][1]); + } + } + LAST_ENCODER_COUNT = cnt; +} + +void resetReport(void){ + memset(REPORT.KEYPRESS, 0, sizeof(REPORT.KEYPRESS)); +} + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + diff --git a/firmware/67percent/Core/Src/pwm.c b/firmware/67percent/Core/Src/pwm.c new file mode 100644 index 00000000..2dfe6255 --- /dev/null +++ b/firmware/67percent/Core/Src/pwm.c @@ -0,0 +1,41 @@ +#include "pwm.h" +#include "tim.h" + +void MX_PWM_Init(void){ + TIM_OC_InitTypeDef sConfigOC = {0}; + + // Initialize TIM2 for PWM (safe to call even if TIM2 was previously initialized for OC) + if (HAL_TIM_PWM_Init(&htim2) != HAL_OK){ + Error_Handler(); + } + + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){ + Error_Handler(); + } +} + +void PWM_Start(void){ + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); +} + +void PWM_Stop(void){ + HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); +} + +void PWM_SetDuty(uint32_t duty){ + // Clamp duty to timer period + uint32_t period = htim2.Init.Period; + if(duty > period) duty = period; + __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, duty); +} + +void PWM_SetPercent(uint8_t percent){ + if(percent > 100) percent = 100; + uint32_t period = htim2.Init.Period; + uint32_t duty = (period * percent) / 100; + PWM_SetDuty(duty); +} diff --git a/firmware/modularkbd/Core/Src/stm32f4xx_hal_msp.c b/firmware/67percent/Core/Src/stm32f4xx_hal_msp.c similarity index 100% rename from firmware/modularkbd/Core/Src/stm32f4xx_hal_msp.c rename to firmware/67percent/Core/Src/stm32f4xx_hal_msp.c diff --git a/firmware/modularkbd/Core/Src/stm32f4xx_it.c b/firmware/67percent/Core/Src/stm32f4xx_it.c similarity index 100% rename from firmware/modularkbd/Core/Src/stm32f4xx_it.c rename to firmware/67percent/Core/Src/stm32f4xx_it.c diff --git a/firmware/modularkbd/Core/Src/syscalls.c b/firmware/67percent/Core/Src/syscalls.c similarity index 100% rename from firmware/modularkbd/Core/Src/syscalls.c rename to firmware/67percent/Core/Src/syscalls.c diff --git a/firmware/modularkbd/Core/Src/sysmem.c b/firmware/67percent/Core/Src/sysmem.c similarity index 100% rename from firmware/modularkbd/Core/Src/sysmem.c rename to firmware/67percent/Core/Src/sysmem.c diff --git a/firmware/modularkbd/Core/Src/system_stm32f4xx.c b/firmware/67percent/Core/Src/system_stm32f4xx.c similarity index 100% rename from firmware/modularkbd/Core/Src/system_stm32f4xx.c rename to firmware/67percent/Core/Src/system_stm32f4xx.c diff --git a/firmware/modularkbd/Core/Src/tim.c b/firmware/67percent/Core/Src/tim.c similarity index 100% rename from firmware/modularkbd/Core/Src/tim.c rename to firmware/67percent/Core/Src/tim.c diff --git a/firmware/modularkbd/Core/Src/usart.c b/firmware/67percent/Core/Src/usart.c similarity index 100% rename from firmware/modularkbd/Core/Src/usart.c rename to firmware/67percent/Core/Src/usart.c diff --git a/firmware/modularkbd/Core/Startup/startup_stm32f446retx.s b/firmware/67percent/Core/Startup/startup_stm32f446retx.s similarity index 100% rename from firmware/modularkbd/Core/Startup/startup_stm32f446retx.s rename to firmware/67percent/Core/Startup/startup_stm32f446retx.s diff --git a/firmware/modularkbd/Debug/Core/Src/dma.cyclo b/firmware/67percent/Debug/Core/Src/dma.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/dma.cyclo rename to firmware/67percent/Debug/Core/Src/dma.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/dma.d b/firmware/67percent/Debug/Core/Src/dma.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/dma.d rename to firmware/67percent/Debug/Core/Src/dma.d diff --git a/firmware/67percent/Debug/Core/Src/dma.o b/firmware/67percent/Debug/Core/Src/dma.o new file mode 100644 index 00000000..56de0de8 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/dma.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/dma.su b/firmware/67percent/Debug/Core/Src/dma.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/dma.su rename to firmware/67percent/Debug/Core/Src/dma.su diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.cyclo b/firmware/67percent/Debug/Core/Src/gpio.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/gpio.cyclo rename to firmware/67percent/Debug/Core/Src/gpio.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.d b/firmware/67percent/Debug/Core/Src/gpio.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/gpio.d rename to firmware/67percent/Debug/Core/Src/gpio.d diff --git a/firmware/67percent/Debug/Core/Src/gpio.o b/firmware/67percent/Debug/Core/Src/gpio.o new file mode 100644 index 00000000..b50eacfc Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/gpio.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.su b/firmware/67percent/Debug/Core/Src/gpio.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/gpio.su rename to firmware/67percent/Debug/Core/Src/gpio.su diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo b/firmware/67percent/Debug/Core/Src/hid_queue.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo rename to firmware/67percent/Debug/Core/Src/hid_queue.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.d b/firmware/67percent/Debug/Core/Src/hid_queue.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/hid_queue.d rename to firmware/67percent/Debug/Core/Src/hid_queue.d diff --git a/firmware/67percent/Debug/Core/Src/hid_queue.o b/firmware/67percent/Debug/Core/Src/hid_queue.o new file mode 100644 index 00000000..dce98adc Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/hid_queue.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.su b/firmware/67percent/Debug/Core/Src/hid_queue.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/hid_queue.su rename to firmware/67percent/Debug/Core/Src/hid_queue.su diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.cyclo b/firmware/67percent/Debug/Core/Src/i2c.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/i2c.cyclo rename to firmware/67percent/Debug/Core/Src/i2c.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.d b/firmware/67percent/Debug/Core/Src/i2c.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/i2c.d rename to firmware/67percent/Debug/Core/Src/i2c.d diff --git a/firmware/67percent/Debug/Core/Src/i2c.o b/firmware/67percent/Debug/Core/Src/i2c.o new file mode 100644 index 00000000..db118f05 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/i2c.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.su b/firmware/67percent/Debug/Core/Src/i2c.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/i2c.su rename to firmware/67percent/Debug/Core/Src/i2c.su diff --git a/firmware/67percent/Debug/Core/Src/main.cyclo b/firmware/67percent/Debug/Core/Src/main.cyclo new file mode 100644 index 00000000..6281ec52 --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/main.cyclo @@ -0,0 +1,15 @@ +../Core/Src/main.c:70:6:pq_init 1 +../Core/Src/main.c:77:6:pq_push 2 +../Core/Src/main.c:87:6:pq_pop 2 +../Core/Src/main.c:206:5:main 7 +../Core/Src/main.c:330:6:mergeChild 7 +../Core/Src/main.c:359:6:SystemClock_Config 3 +../Core/Src/main.c:403:6:HAL_UART_RxCpltCallback 5 +../Core/Src/main.c:422:6:HAL_UART_ErrorCallback 5 +../Core/Src/main.c:440:6:findBestParent 4 +../Core/Src/main.c:461:6:handleUARTMessages 14 +../Core/Src/main.c:520:6:addUSBReport 3 +../Core/Src/main.c:528:6:matrixScan 5 +../Core/Src/main.c:550:6:encoderProcess 9 +../Core/Src/main.c:574:6:resetReport 1 +../Core/Src/main.c:584:6:Error_Handler 1 diff --git a/firmware/67percent/Debug/Core/Src/main.d b/firmware/67percent/Debug/Core/Src/main.d new file mode 100644 index 00000000..454119d6 --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/main.d @@ -0,0 +1,94 @@ +Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Core/Inc/dma.h ../Core/Inc/main.h ../Core/Inc/i2c.h ../Core/Inc/tim.h \ + ../Core/Inc/usart.h ../USB_DEVICE/App/usb_device.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/gpio.h ../Core/Inc/pwm.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Core/Inc/dma.h: +../Core/Inc/main.h: +../Core/Inc/i2c.h: +../Core/Inc/tim.h: +../Core/Inc/usart.h: +../USB_DEVICE/App/usb_device.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/gpio.h: +../Core/Inc/pwm.h: +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/67percent/Debug/Core/Src/main.o b/firmware/67percent/Debug/Core/Src/main.o new file mode 100644 index 00000000..5e91d85b Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/main.o differ diff --git a/firmware/67percent/Debug/Core/Src/main.su b/firmware/67percent/Debug/Core/Src/main.su new file mode 100644 index 00000000..6c1dccd3 --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/main.su @@ -0,0 +1,15 @@ +../Core/Src/main.c:70:6:pq_init 16 static +../Core/Src/main.c:77:6:pq_push 24 static +../Core/Src/main.c:87:6:pq_pop 16 static +../Core/Src/main.c:206:5:main 40 static +../Core/Src/main.c:330:6:mergeChild 40 static +../Core/Src/main.c:359:6:SystemClock_Config 88 static +../Core/Src/main.c:403:6:HAL_UART_RxCpltCallback 16 static +../Core/Src/main.c:422:6:HAL_UART_ErrorCallback 16 static +../Core/Src/main.c:440:6:findBestParent 24 static +../Core/Src/main.c:461:6:handleUARTMessages 56 static +../Core/Src/main.c:520:6:addUSBReport 24 static +../Core/Src/main.c:528:6:matrixScan 16 static +../Core/Src/main.c:550:6:encoderProcess 32 static +../Core/Src/main.c:574:6:resetReport 8 static +../Core/Src/main.c:584:6:Error_Handler 4 static,ignoring_inline_asm diff --git a/firmware/67percent/Debug/Core/Src/pwm.cyclo b/firmware/67percent/Debug/Core/Src/pwm.cyclo new file mode 100644 index 00000000..ea82f127 --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/pwm.cyclo @@ -0,0 +1,5 @@ +../Core/Src/pwm.c:4:6:MX_PWM_Init 3 +../Core/Src/pwm.c:21:6:PWM_Start 1 +../Core/Src/pwm.c:25:6:PWM_Stop 1 +../Core/Src/pwm.c:29:6:PWM_SetDuty 2 +../Core/Src/pwm.c:36:6:PWM_SetPercent 2 diff --git a/firmware/67percent/Debug/Core/Src/pwm.d b/firmware/67percent/Debug/Core/Src/pwm.d new file mode 100644 index 00000000..997f695f --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/pwm.d @@ -0,0 +1,71 @@ +Core/Src/pwm.o: ../Core/Src/pwm.c ../Core/Inc/pwm.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Core/Inc/tim.h +../Core/Inc/pwm.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Core/Inc/tim.h: diff --git a/firmware/67percent/Debug/Core/Src/pwm.o b/firmware/67percent/Debug/Core/Src/pwm.o new file mode 100644 index 00000000..2311e384 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/pwm.o differ diff --git a/firmware/67percent/Debug/Core/Src/pwm.su b/firmware/67percent/Debug/Core/Src/pwm.su new file mode 100644 index 00000000..8f1e7001 --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/pwm.su @@ -0,0 +1,5 @@ +../Core/Src/pwm.c:4:6:MX_PWM_Init 40 static +../Core/Src/pwm.c:21:6:PWM_Start 8 static +../Core/Src/pwm.c:25:6:PWM_Stop 8 static +../Core/Src/pwm.c:29:6:PWM_SetDuty 24 static +../Core/Src/pwm.c:36:6:PWM_SetPercent 24 static diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.cyclo b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.cyclo rename to firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.d b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.d rename to firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.d diff --git a/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.o b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.o new file mode 100644 index 00000000..edeced39 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.su b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.su rename to firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.su diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.cyclo b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.cyclo rename to firmware/67percent/Debug/Core/Src/stm32f4xx_it.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.d b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.d rename to firmware/67percent/Debug/Core/Src/stm32f4xx_it.d diff --git a/firmware/67percent/Debug/Core/Src/stm32f4xx_it.o b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.o new file mode 100644 index 00000000..e19568c1 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.su b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.su rename to firmware/67percent/Debug/Core/Src/stm32f4xx_it.su diff --git a/firmware/67percent/Debug/Core/Src/subdir.mk b/firmware/67percent/Debug/Core/Src/subdir.mk new file mode 100644 index 00000000..e7a142ba --- /dev/null +++ b/firmware/67percent/Debug/Core/Src/subdir.mk @@ -0,0 +1,63 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Core/Src/dma.c \ +../Core/Src/gpio.c \ +../Core/Src/hid_queue.c \ +../Core/Src/i2c.c \ +../Core/Src/main.c \ +../Core/Src/pwm.c \ +../Core/Src/stm32f4xx_hal_msp.c \ +../Core/Src/stm32f4xx_it.c \ +../Core/Src/syscalls.c \ +../Core/Src/sysmem.c \ +../Core/Src/system_stm32f4xx.c \ +../Core/Src/tim.c \ +../Core/Src/usart.c + +OBJS += \ +./Core/Src/dma.o \ +./Core/Src/gpio.o \ +./Core/Src/hid_queue.o \ +./Core/Src/i2c.o \ +./Core/Src/main.o \ +./Core/Src/pwm.o \ +./Core/Src/stm32f4xx_hal_msp.o \ +./Core/Src/stm32f4xx_it.o \ +./Core/Src/syscalls.o \ +./Core/Src/sysmem.o \ +./Core/Src/system_stm32f4xx.o \ +./Core/Src/tim.o \ +./Core/Src/usart.o + +C_DEPS += \ +./Core/Src/dma.d \ +./Core/Src/gpio.d \ +./Core/Src/hid_queue.d \ +./Core/Src/i2c.d \ +./Core/Src/main.d \ +./Core/Src/pwm.d \ +./Core/Src/stm32f4xx_hal_msp.d \ +./Core/Src/stm32f4xx_it.d \ +./Core/Src/syscalls.d \ +./Core/Src/sysmem.d \ +./Core/Src/system_stm32f4xx.d \ +./Core/Src/tim.d \ +./Core/Src/usart.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/Src/%.o Core/Src/%.su Core/Src/%.cyclo: ../Core/Src/%.c Core/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Core-2f-Src + +clean-Core-2f-Src: + -$(RM) ./Core/Src/dma.cyclo ./Core/Src/dma.d ./Core/Src/dma.o ./Core/Src/dma.su ./Core/Src/gpio.cyclo ./Core/Src/gpio.d ./Core/Src/gpio.o ./Core/Src/gpio.su ./Core/Src/hid_queue.cyclo ./Core/Src/hid_queue.d ./Core/Src/hid_queue.o ./Core/Src/hid_queue.su ./Core/Src/i2c.cyclo ./Core/Src/i2c.d ./Core/Src/i2c.o ./Core/Src/i2c.su ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/pwm.cyclo ./Core/Src/pwm.d ./Core/Src/pwm.o ./Core/Src/pwm.su ./Core/Src/stm32f4xx_hal_msp.cyclo ./Core/Src/stm32f4xx_hal_msp.d ./Core/Src/stm32f4xx_hal_msp.o ./Core/Src/stm32f4xx_hal_msp.su ./Core/Src/stm32f4xx_it.cyclo ./Core/Src/stm32f4xx_it.d ./Core/Src/stm32f4xx_it.o ./Core/Src/stm32f4xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f4xx.cyclo ./Core/Src/system_stm32f4xx.d ./Core/Src/system_stm32f4xx.o ./Core/Src/system_stm32f4xx.su ./Core/Src/tim.cyclo ./Core/Src/tim.d ./Core/Src/tim.o ./Core/Src/tim.su ./Core/Src/usart.cyclo ./Core/Src/usart.d ./Core/Src/usart.o ./Core/Src/usart.su + +.PHONY: clean-Core-2f-Src + diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.cyclo b/firmware/67percent/Debug/Core/Src/syscalls.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/syscalls.cyclo rename to firmware/67percent/Debug/Core/Src/syscalls.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.d b/firmware/67percent/Debug/Core/Src/syscalls.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/syscalls.d rename to firmware/67percent/Debug/Core/Src/syscalls.d diff --git a/firmware/67percent/Debug/Core/Src/syscalls.o b/firmware/67percent/Debug/Core/Src/syscalls.o new file mode 100644 index 00000000..026d6a62 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/syscalls.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.su b/firmware/67percent/Debug/Core/Src/syscalls.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/syscalls.su rename to firmware/67percent/Debug/Core/Src/syscalls.su diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.cyclo b/firmware/67percent/Debug/Core/Src/sysmem.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/sysmem.cyclo rename to firmware/67percent/Debug/Core/Src/sysmem.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.d b/firmware/67percent/Debug/Core/Src/sysmem.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/sysmem.d rename to firmware/67percent/Debug/Core/Src/sysmem.d diff --git a/firmware/67percent/Debug/Core/Src/sysmem.o b/firmware/67percent/Debug/Core/Src/sysmem.o new file mode 100644 index 00000000..92127518 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/sysmem.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.su b/firmware/67percent/Debug/Core/Src/sysmem.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/sysmem.su rename to firmware/67percent/Debug/Core/Src/sysmem.su diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.cyclo b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.cyclo rename to firmware/67percent/Debug/Core/Src/system_stm32f4xx.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.d b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.d rename to firmware/67percent/Debug/Core/Src/system_stm32f4xx.d diff --git a/firmware/67percent/Debug/Core/Src/system_stm32f4xx.o b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.o new file mode 100644 index 00000000..ab5551a5 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.su b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.su rename to firmware/67percent/Debug/Core/Src/system_stm32f4xx.su diff --git a/firmware/modularkbd/Debug/Core/Src/tim.cyclo b/firmware/67percent/Debug/Core/Src/tim.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/tim.cyclo rename to firmware/67percent/Debug/Core/Src/tim.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/tim.d b/firmware/67percent/Debug/Core/Src/tim.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/tim.d rename to firmware/67percent/Debug/Core/Src/tim.d diff --git a/firmware/67percent/Debug/Core/Src/tim.o b/firmware/67percent/Debug/Core/Src/tim.o new file mode 100644 index 00000000..df9bf7f9 Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/tim.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/tim.su b/firmware/67percent/Debug/Core/Src/tim.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/tim.su rename to firmware/67percent/Debug/Core/Src/tim.su diff --git a/firmware/modularkbd/Debug/Core/Src/usart.cyclo b/firmware/67percent/Debug/Core/Src/usart.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/usart.cyclo rename to firmware/67percent/Debug/Core/Src/usart.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/usart.d b/firmware/67percent/Debug/Core/Src/usart.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/usart.d rename to firmware/67percent/Debug/Core/Src/usart.d diff --git a/firmware/67percent/Debug/Core/Src/usart.o b/firmware/67percent/Debug/Core/Src/usart.o new file mode 100644 index 00000000..d76960bd Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/usart.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/usart.su b/firmware/67percent/Debug/Core/Src/usart.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/usart.su rename to firmware/67percent/Debug/Core/Src/usart.su diff --git a/firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.d b/firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.d rename to firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.d diff --git a/firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.o b/firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.o rename to firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.o diff --git a/firmware/modularkbd/Debug/Core/Startup/subdir.mk b/firmware/67percent/Debug/Core/Startup/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/Core/Startup/subdir.mk rename to firmware/67percent/Debug/Core/Startup/subdir.mk diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su similarity index 100% rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/subdir.mk b/firmware/67percent/Debug/USB_DEVICE/App/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/subdir.mk rename to firmware/67percent/Debug/USB_DEVICE/App/subdir.mk diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.cyclo b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.cyclo similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.cyclo rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.cyclo diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.d b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.d similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.d rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.d diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.o b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.o similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.o rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.o diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.su b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.su similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.su rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.su diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.cyclo b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.cyclo similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.cyclo rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.cyclo diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.d b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.d similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.d rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.d diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.o b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.o similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.o rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.o diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.su b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.su similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.su rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.su diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/subdir.mk b/firmware/67percent/Debug/USB_DEVICE/Target/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/Target/subdir.mk rename to firmware/67percent/Debug/USB_DEVICE/Target/subdir.mk diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.cyclo b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.cyclo similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.cyclo rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.cyclo diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.d b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.d similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.d rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.d diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.o b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.o similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.o rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.o diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.su b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.su similarity index 100% rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.su rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.su diff --git a/firmware/67percent/Debug/makefile b/firmware/67percent/Debug/makefile new file mode 100644 index 00000000..4176ad2b --- /dev/null +++ b/firmware/67percent/Debug/makefile @@ -0,0 +1,98 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include USB_DEVICE/Target/subdir.mk +-include USB_DEVICE/App/subdir.mk +-include Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk +-include Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk +-include Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk +-include Core/Startup/subdir.mk +-include Core/Src/subdir.mk +-include objects.mk + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(S_DEPS)),) +-include $(S_DEPS) +endif +ifneq ($(strip $(S_UPPER_DEPS)),) +-include $(S_UPPER_DEPS) +endif +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +-include ../makefile.defs + +OPTIONAL_TOOL_DEPS := \ +$(wildcard ../makefile.defs) \ +$(wildcard ../makefile.init) \ +$(wildcard ../makefile.targets) \ + + +BUILD_ARTIFACT_NAME := modularkbd +BUILD_ARTIFACT_EXTENSION := elf +BUILD_ARTIFACT_PREFIX := +BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),) + +# Add inputs and outputs from these tool invocations to the build variables +EXECUTABLES += \ +modularkbd.elf \ + +MAP_FILES += \ +modularkbd.map \ + +SIZE_OUTPUT += \ +default.size.stdout \ + +OBJDUMP_LIST += \ +modularkbd.list \ + + +# All Target +all: main-build + +# Main-build Target +main-build: modularkbd.elf secondary-outputs + +# Tool invocations +modularkbd.elf modularkbd.map: $(OBJS) $(USER_OBJS) /home/ukim/Projects/modular-kbd/firmware/67percent/STM32F446RETX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-gcc -o "modularkbd.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"/home/ukim/Projects/modular-kbd/firmware/67percent/STM32F446RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="modularkbd.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group + @echo 'Finished building target: $@' + @echo ' ' + +default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-size $(EXECUTABLES) + @echo 'Finished building: $@' + @echo ' ' + +modularkbd.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-objdump -h -S $(EXECUTABLES) > "modularkbd.list" + @echo 'Finished building: $@' + @echo ' ' + +# Other Targets +clean: + -$(RM) default.size.stdout modularkbd.elf modularkbd.list modularkbd.map + -@echo ' ' + +secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) + +fail-specified-linker-script-missing: + @echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.' + @exit 2 + +warn-no-linker-script-specified: + @echo 'Warning: No linker script specified. Check the linker settings in the build configuration.' + +.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified + +-include ../makefile.targets diff --git a/firmware/67percent/Debug/modularkbd.elf b/firmware/67percent/Debug/modularkbd.elf new file mode 100755 index 00000000..4b7f5800 Binary files /dev/null and b/firmware/67percent/Debug/modularkbd.elf differ diff --git a/firmware/67percent/Debug/modularkbd.list b/firmware/67percent/Debug/modularkbd.list new file mode 100644 index 00000000..c1ab3d34 --- /dev/null +++ b/firmware/67percent/Debug/modularkbd.list @@ -0,0 +1,21363 @@ + +modularkbd.elf: file format elf32-littlearm + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .isr_vector 000001c4 08000000 08000000 00001000 2**0 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 1 .text 0000b218 080001c4 080001c4 000011c4 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .rodata 0000005c 0800b3dc 0800b3dc 0000c3dc 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .ARM.extab 00000000 0800b438 0800b438 0000d1a0 2**0 + CONTENTS, READONLY + 4 .ARM 00000008 0800b438 0800b438 0000c438 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 5 .preinit_array 00000000 0800b440 0800b440 0000d1a0 2**0 + CONTENTS, ALLOC, LOAD, DATA + 6 .init_array 00000004 0800b440 0800b440 0000c440 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 7 .fini_array 00000004 0800b444 0800b444 0000c444 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 8 .data 000001a0 20000000 0800b448 0000d000 2**2 + CONTENTS, ALLOC, LOAD, DATA + 9 .bss 000015bc 200001a0 0800b5e8 0000d1a0 2**2 + ALLOC + 10 ._user_heap_stack 00000604 2000175c 0800b5e8 0000d75c 2**0 + ALLOC + 11 .ARM.attributes 00000030 00000000 00000000 0000d1a0 2**0 + CONTENTS, READONLY + 12 .debug_info 0001be15 00000000 00000000 0000d1d0 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 13 .debug_abbrev 00004285 00000000 00000000 00028fe5 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 14 .debug_aranges 000017f0 00000000 00000000 0002d270 2**3 + CONTENTS, READONLY, DEBUGGING, OCTETS + 15 .debug_rnglists 00001291 00000000 00000000 0002ea60 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 16 .debug_macro 000262b3 00000000 00000000 0002fcf1 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 17 .debug_line 0001f083 00000000 00000000 00055fa4 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 18 .debug_str 000d80a4 00000000 00000000 00075027 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 19 .comment 00000043 00000000 00000000 0014d0cb 2**0 + CONTENTS, READONLY + 20 .debug_frame 0000645c 00000000 00000000 0014d110 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + 21 .debug_line_str 00000062 00000000 00000000 0015356c 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + +Disassembly of section .text: + +080001c4 <__do_global_dtors_aux>: + 80001c4: b510 push {r4, lr} + 80001c6: 4c05 ldr r4, [pc, #20] @ (80001dc <__do_global_dtors_aux+0x18>) + 80001c8: 7823 ldrb r3, [r4, #0] + 80001ca: b933 cbnz r3, 80001da <__do_global_dtors_aux+0x16> + 80001cc: 4b04 ldr r3, [pc, #16] @ (80001e0 <__do_global_dtors_aux+0x1c>) + 80001ce: b113 cbz r3, 80001d6 <__do_global_dtors_aux+0x12> + 80001d0: 4804 ldr r0, [pc, #16] @ (80001e4 <__do_global_dtors_aux+0x20>) + 80001d2: f3af 8000 nop.w + 80001d6: 2301 movs r3, #1 + 80001d8: 7023 strb r3, [r4, #0] + 80001da: bd10 pop {r4, pc} + 80001dc: 200001a0 .word 0x200001a0 + 80001e0: 00000000 .word 0x00000000 + 80001e4: 0800b3c4 .word 0x0800b3c4 + +080001e8 : + 80001e8: b508 push {r3, lr} + 80001ea: 4b03 ldr r3, [pc, #12] @ (80001f8 ) + 80001ec: b11b cbz r3, 80001f6 + 80001ee: 4903 ldr r1, [pc, #12] @ (80001fc ) + 80001f0: 4803 ldr r0, [pc, #12] @ (8000200 ) + 80001f2: f3af 8000 nop.w + 80001f6: bd08 pop {r3, pc} + 80001f8: 00000000 .word 0x00000000 + 80001fc: 200001a4 .word 0x200001a4 + 8000200: 0800b3c4 .word 0x0800b3c4 + +08000204 <__aeabi_uldivmod>: + 8000204: b953 cbnz r3, 800021c <__aeabi_uldivmod+0x18> + 8000206: b94a cbnz r2, 800021c <__aeabi_uldivmod+0x18> + 8000208: 2900 cmp r1, #0 + 800020a: bf08 it eq + 800020c: 2800 cmpeq r0, #0 + 800020e: bf1c itt ne + 8000210: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff + 8000214: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff + 8000218: f000 b988 b.w 800052c <__aeabi_idiv0> + 800021c: f1ad 0c08 sub.w ip, sp, #8 + 8000220: e96d ce04 strd ip, lr, [sp, #-16]! + 8000224: f000 f806 bl 8000234 <__udivmoddi4> + 8000228: f8dd e004 ldr.w lr, [sp, #4] + 800022c: e9dd 2302 ldrd r2, r3, [sp, #8] + 8000230: b004 add sp, #16 + 8000232: 4770 bx lr + +08000234 <__udivmoddi4>: + 8000234: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8000238: 9d08 ldr r5, [sp, #32] + 800023a: 468e mov lr, r1 + 800023c: 4604 mov r4, r0 + 800023e: 4688 mov r8, r1 + 8000240: 2b00 cmp r3, #0 + 8000242: d14a bne.n 80002da <__udivmoddi4+0xa6> + 8000244: 428a cmp r2, r1 + 8000246: 4617 mov r7, r2 + 8000248: d962 bls.n 8000310 <__udivmoddi4+0xdc> + 800024a: fab2 f682 clz r6, r2 + 800024e: b14e cbz r6, 8000264 <__udivmoddi4+0x30> + 8000250: f1c6 0320 rsb r3, r6, #32 + 8000254: fa01 f806 lsl.w r8, r1, r6 + 8000258: fa20 f303 lsr.w r3, r0, r3 + 800025c: 40b7 lsls r7, r6 + 800025e: ea43 0808 orr.w r8, r3, r8 + 8000262: 40b4 lsls r4, r6 + 8000264: ea4f 4e17 mov.w lr, r7, lsr #16 + 8000268: fa1f fc87 uxth.w ip, r7 + 800026c: fbb8 f1fe udiv r1, r8, lr + 8000270: 0c23 lsrs r3, r4, #16 + 8000272: fb0e 8811 mls r8, lr, r1, r8 + 8000276: ea43 4308 orr.w r3, r3, r8, lsl #16 + 800027a: fb01 f20c mul.w r2, r1, ip + 800027e: 429a cmp r2, r3 + 8000280: d909 bls.n 8000296 <__udivmoddi4+0x62> + 8000282: 18fb adds r3, r7, r3 + 8000284: f101 30ff add.w r0, r1, #4294967295 @ 0xffffffff + 8000288: f080 80ea bcs.w 8000460 <__udivmoddi4+0x22c> + 800028c: 429a cmp r2, r3 + 800028e: f240 80e7 bls.w 8000460 <__udivmoddi4+0x22c> + 8000292: 3902 subs r1, #2 + 8000294: 443b add r3, r7 + 8000296: 1a9a subs r2, r3, r2 + 8000298: b2a3 uxth r3, r4 + 800029a: fbb2 f0fe udiv r0, r2, lr + 800029e: fb0e 2210 mls r2, lr, r0, r2 + 80002a2: ea43 4302 orr.w r3, r3, r2, lsl #16 + 80002a6: fb00 fc0c mul.w ip, r0, ip + 80002aa: 459c cmp ip, r3 + 80002ac: d909 bls.n 80002c2 <__udivmoddi4+0x8e> + 80002ae: 18fb adds r3, r7, r3 + 80002b0: f100 32ff add.w r2, r0, #4294967295 @ 0xffffffff + 80002b4: f080 80d6 bcs.w 8000464 <__udivmoddi4+0x230> + 80002b8: 459c cmp ip, r3 + 80002ba: f240 80d3 bls.w 8000464 <__udivmoddi4+0x230> + 80002be: 443b add r3, r7 + 80002c0: 3802 subs r0, #2 + 80002c2: ea40 4001 orr.w r0, r0, r1, lsl #16 + 80002c6: eba3 030c sub.w r3, r3, ip + 80002ca: 2100 movs r1, #0 + 80002cc: b11d cbz r5, 80002d6 <__udivmoddi4+0xa2> + 80002ce: 40f3 lsrs r3, r6 + 80002d0: 2200 movs r2, #0 + 80002d2: e9c5 3200 strd r3, r2, [r5] + 80002d6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80002da: 428b cmp r3, r1 + 80002dc: d905 bls.n 80002ea <__udivmoddi4+0xb6> + 80002de: b10d cbz r5, 80002e4 <__udivmoddi4+0xb0> + 80002e0: e9c5 0100 strd r0, r1, [r5] + 80002e4: 2100 movs r1, #0 + 80002e6: 4608 mov r0, r1 + 80002e8: e7f5 b.n 80002d6 <__udivmoddi4+0xa2> + 80002ea: fab3 f183 clz r1, r3 + 80002ee: 2900 cmp r1, #0 + 80002f0: d146 bne.n 8000380 <__udivmoddi4+0x14c> + 80002f2: 4573 cmp r3, lr + 80002f4: d302 bcc.n 80002fc <__udivmoddi4+0xc8> + 80002f6: 4282 cmp r2, r0 + 80002f8: f200 8105 bhi.w 8000506 <__udivmoddi4+0x2d2> + 80002fc: 1a84 subs r4, r0, r2 + 80002fe: eb6e 0203 sbc.w r2, lr, r3 + 8000302: 2001 movs r0, #1 + 8000304: 4690 mov r8, r2 + 8000306: 2d00 cmp r5, #0 + 8000308: d0e5 beq.n 80002d6 <__udivmoddi4+0xa2> + 800030a: e9c5 4800 strd r4, r8, [r5] + 800030e: e7e2 b.n 80002d6 <__udivmoddi4+0xa2> + 8000310: 2a00 cmp r2, #0 + 8000312: f000 8090 beq.w 8000436 <__udivmoddi4+0x202> + 8000316: fab2 f682 clz r6, r2 + 800031a: 2e00 cmp r6, #0 + 800031c: f040 80a4 bne.w 8000468 <__udivmoddi4+0x234> + 8000320: 1a8a subs r2, r1, r2 + 8000322: 0c03 lsrs r3, r0, #16 + 8000324: ea4f 4e17 mov.w lr, r7, lsr #16 + 8000328: b280 uxth r0, r0 + 800032a: b2bc uxth r4, r7 + 800032c: 2101 movs r1, #1 + 800032e: fbb2 fcfe udiv ip, r2, lr + 8000332: fb0e 221c mls r2, lr, ip, r2 + 8000336: ea43 4302 orr.w r3, r3, r2, lsl #16 + 800033a: fb04 f20c mul.w r2, r4, ip + 800033e: 429a cmp r2, r3 + 8000340: d907 bls.n 8000352 <__udivmoddi4+0x11e> + 8000342: 18fb adds r3, r7, r3 + 8000344: f10c 38ff add.w r8, ip, #4294967295 @ 0xffffffff + 8000348: d202 bcs.n 8000350 <__udivmoddi4+0x11c> + 800034a: 429a cmp r2, r3 + 800034c: f200 80e0 bhi.w 8000510 <__udivmoddi4+0x2dc> + 8000350: 46c4 mov ip, r8 + 8000352: 1a9b subs r3, r3, r2 + 8000354: fbb3 f2fe udiv r2, r3, lr + 8000358: fb0e 3312 mls r3, lr, r2, r3 + 800035c: ea40 4303 orr.w r3, r0, r3, lsl #16 + 8000360: fb02 f404 mul.w r4, r2, r4 + 8000364: 429c cmp r4, r3 + 8000366: d907 bls.n 8000378 <__udivmoddi4+0x144> + 8000368: 18fb adds r3, r7, r3 + 800036a: f102 30ff add.w r0, r2, #4294967295 @ 0xffffffff + 800036e: d202 bcs.n 8000376 <__udivmoddi4+0x142> + 8000370: 429c cmp r4, r3 + 8000372: f200 80ca bhi.w 800050a <__udivmoddi4+0x2d6> + 8000376: 4602 mov r2, r0 + 8000378: 1b1b subs r3, r3, r4 + 800037a: ea42 400c orr.w r0, r2, ip, lsl #16 + 800037e: e7a5 b.n 80002cc <__udivmoddi4+0x98> + 8000380: f1c1 0620 rsb r6, r1, #32 + 8000384: 408b lsls r3, r1 + 8000386: fa22 f706 lsr.w r7, r2, r6 + 800038a: 431f orrs r7, r3 + 800038c: fa0e f401 lsl.w r4, lr, r1 + 8000390: fa20 f306 lsr.w r3, r0, r6 + 8000394: fa2e fe06 lsr.w lr, lr, r6 + 8000398: ea4f 4917 mov.w r9, r7, lsr #16 + 800039c: 4323 orrs r3, r4 + 800039e: fa00 f801 lsl.w r8, r0, r1 + 80003a2: fa1f fc87 uxth.w ip, r7 + 80003a6: fbbe f0f9 udiv r0, lr, r9 + 80003aa: 0c1c lsrs r4, r3, #16 + 80003ac: fb09 ee10 mls lr, r9, r0, lr + 80003b0: ea44 440e orr.w r4, r4, lr, lsl #16 + 80003b4: fb00 fe0c mul.w lr, r0, ip + 80003b8: 45a6 cmp lr, r4 + 80003ba: fa02 f201 lsl.w r2, r2, r1 + 80003be: d909 bls.n 80003d4 <__udivmoddi4+0x1a0> + 80003c0: 193c adds r4, r7, r4 + 80003c2: f100 3aff add.w sl, r0, #4294967295 @ 0xffffffff + 80003c6: f080 809c bcs.w 8000502 <__udivmoddi4+0x2ce> + 80003ca: 45a6 cmp lr, r4 + 80003cc: f240 8099 bls.w 8000502 <__udivmoddi4+0x2ce> + 80003d0: 3802 subs r0, #2 + 80003d2: 443c add r4, r7 + 80003d4: eba4 040e sub.w r4, r4, lr + 80003d8: fa1f fe83 uxth.w lr, r3 + 80003dc: fbb4 f3f9 udiv r3, r4, r9 + 80003e0: fb09 4413 mls r4, r9, r3, r4 + 80003e4: ea4e 4404 orr.w r4, lr, r4, lsl #16 + 80003e8: fb03 fc0c mul.w ip, r3, ip + 80003ec: 45a4 cmp ip, r4 + 80003ee: d908 bls.n 8000402 <__udivmoddi4+0x1ce> + 80003f0: 193c adds r4, r7, r4 + 80003f2: f103 3eff add.w lr, r3, #4294967295 @ 0xffffffff + 80003f6: f080 8082 bcs.w 80004fe <__udivmoddi4+0x2ca> + 80003fa: 45a4 cmp ip, r4 + 80003fc: d97f bls.n 80004fe <__udivmoddi4+0x2ca> + 80003fe: 3b02 subs r3, #2 + 8000400: 443c add r4, r7 + 8000402: ea43 4000 orr.w r0, r3, r0, lsl #16 + 8000406: eba4 040c sub.w r4, r4, ip + 800040a: fba0 ec02 umull lr, ip, r0, r2 + 800040e: 4564 cmp r4, ip + 8000410: 4673 mov r3, lr + 8000412: 46e1 mov r9, ip + 8000414: d362 bcc.n 80004dc <__udivmoddi4+0x2a8> + 8000416: d05f beq.n 80004d8 <__udivmoddi4+0x2a4> + 8000418: b15d cbz r5, 8000432 <__udivmoddi4+0x1fe> + 800041a: ebb8 0203 subs.w r2, r8, r3 + 800041e: eb64 0409 sbc.w r4, r4, r9 + 8000422: fa04 f606 lsl.w r6, r4, r6 + 8000426: fa22 f301 lsr.w r3, r2, r1 + 800042a: 431e orrs r6, r3 + 800042c: 40cc lsrs r4, r1 + 800042e: e9c5 6400 strd r6, r4, [r5] + 8000432: 2100 movs r1, #0 + 8000434: e74f b.n 80002d6 <__udivmoddi4+0xa2> + 8000436: fbb1 fcf2 udiv ip, r1, r2 + 800043a: 0c01 lsrs r1, r0, #16 + 800043c: ea41 410e orr.w r1, r1, lr, lsl #16 + 8000440: b280 uxth r0, r0 + 8000442: ea40 4201 orr.w r2, r0, r1, lsl #16 + 8000446: 463b mov r3, r7 + 8000448: 4638 mov r0, r7 + 800044a: 463c mov r4, r7 + 800044c: 46b8 mov r8, r7 + 800044e: 46be mov lr, r7 + 8000450: 2620 movs r6, #32 + 8000452: fbb1 f1f7 udiv r1, r1, r7 + 8000456: eba2 0208 sub.w r2, r2, r8 + 800045a: ea41 410c orr.w r1, r1, ip, lsl #16 + 800045e: e766 b.n 800032e <__udivmoddi4+0xfa> + 8000460: 4601 mov r1, r0 + 8000462: e718 b.n 8000296 <__udivmoddi4+0x62> + 8000464: 4610 mov r0, r2 + 8000466: e72c b.n 80002c2 <__udivmoddi4+0x8e> + 8000468: f1c6 0220 rsb r2, r6, #32 + 800046c: fa2e f302 lsr.w r3, lr, r2 + 8000470: 40b7 lsls r7, r6 + 8000472: 40b1 lsls r1, r6 + 8000474: fa20 f202 lsr.w r2, r0, r2 + 8000478: ea4f 4e17 mov.w lr, r7, lsr #16 + 800047c: 430a orrs r2, r1 + 800047e: fbb3 f8fe udiv r8, r3, lr + 8000482: b2bc uxth r4, r7 + 8000484: fb0e 3318 mls r3, lr, r8, r3 + 8000488: 0c11 lsrs r1, r2, #16 + 800048a: ea41 4103 orr.w r1, r1, r3, lsl #16 + 800048e: fb08 f904 mul.w r9, r8, r4 + 8000492: 40b0 lsls r0, r6 + 8000494: 4589 cmp r9, r1 + 8000496: ea4f 4310 mov.w r3, r0, lsr #16 + 800049a: b280 uxth r0, r0 + 800049c: d93e bls.n 800051c <__udivmoddi4+0x2e8> + 800049e: 1879 adds r1, r7, r1 + 80004a0: f108 3cff add.w ip, r8, #4294967295 @ 0xffffffff + 80004a4: d201 bcs.n 80004aa <__udivmoddi4+0x276> + 80004a6: 4589 cmp r9, r1 + 80004a8: d81f bhi.n 80004ea <__udivmoddi4+0x2b6> + 80004aa: eba1 0109 sub.w r1, r1, r9 + 80004ae: fbb1 f9fe udiv r9, r1, lr + 80004b2: fb09 f804 mul.w r8, r9, r4 + 80004b6: fb0e 1119 mls r1, lr, r9, r1 + 80004ba: b292 uxth r2, r2 + 80004bc: ea42 4201 orr.w r2, r2, r1, lsl #16 + 80004c0: 4542 cmp r2, r8 + 80004c2: d229 bcs.n 8000518 <__udivmoddi4+0x2e4> + 80004c4: 18ba adds r2, r7, r2 + 80004c6: f109 31ff add.w r1, r9, #4294967295 @ 0xffffffff + 80004ca: d2c4 bcs.n 8000456 <__udivmoddi4+0x222> + 80004cc: 4542 cmp r2, r8 + 80004ce: d2c2 bcs.n 8000456 <__udivmoddi4+0x222> + 80004d0: f1a9 0102 sub.w r1, r9, #2 + 80004d4: 443a add r2, r7 + 80004d6: e7be b.n 8000456 <__udivmoddi4+0x222> + 80004d8: 45f0 cmp r8, lr + 80004da: d29d bcs.n 8000418 <__udivmoddi4+0x1e4> + 80004dc: ebbe 0302 subs.w r3, lr, r2 + 80004e0: eb6c 0c07 sbc.w ip, ip, r7 + 80004e4: 3801 subs r0, #1 + 80004e6: 46e1 mov r9, ip + 80004e8: e796 b.n 8000418 <__udivmoddi4+0x1e4> + 80004ea: eba7 0909 sub.w r9, r7, r9 + 80004ee: 4449 add r1, r9 + 80004f0: f1a8 0c02 sub.w ip, r8, #2 + 80004f4: fbb1 f9fe udiv r9, r1, lr + 80004f8: fb09 f804 mul.w r8, r9, r4 + 80004fc: e7db b.n 80004b6 <__udivmoddi4+0x282> + 80004fe: 4673 mov r3, lr + 8000500: e77f b.n 8000402 <__udivmoddi4+0x1ce> + 8000502: 4650 mov r0, sl + 8000504: e766 b.n 80003d4 <__udivmoddi4+0x1a0> + 8000506: 4608 mov r0, r1 + 8000508: e6fd b.n 8000306 <__udivmoddi4+0xd2> + 800050a: 443b add r3, r7 + 800050c: 3a02 subs r2, #2 + 800050e: e733 b.n 8000378 <__udivmoddi4+0x144> + 8000510: f1ac 0c02 sub.w ip, ip, #2 + 8000514: 443b add r3, r7 + 8000516: e71c b.n 8000352 <__udivmoddi4+0x11e> + 8000518: 4649 mov r1, r9 + 800051a: e79c b.n 8000456 <__udivmoddi4+0x222> + 800051c: eba1 0109 sub.w r1, r1, r9 + 8000520: 46c4 mov ip, r8 + 8000522: fbb1 f9fe udiv r9, r1, lr + 8000526: fb09 f804 mul.w r8, r9, r4 + 800052a: e7c4 b.n 80004b6 <__udivmoddi4+0x282> + +0800052c <__aeabi_idiv0>: + 800052c: 4770 bx lr + 800052e: bf00 nop + +08000530 : + +/** + * Enable DMA controller clock + */ +void MX_DMA_Init(void) +{ + 8000530: b580 push {r7, lr} + 8000532: b082 sub sp, #8 + 8000534: af00 add r7, sp, #0 + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + 8000536: 2300 movs r3, #0 + 8000538: 607b str r3, [r7, #4] + 800053a: 4b2f ldr r3, [pc, #188] @ (80005f8 ) + 800053c: 6b1b ldr r3, [r3, #48] @ 0x30 + 800053e: 4a2e ldr r2, [pc, #184] @ (80005f8 ) + 8000540: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 8000544: 6313 str r3, [r2, #48] @ 0x30 + 8000546: 4b2c ldr r3, [pc, #176] @ (80005f8 ) + 8000548: 6b1b ldr r3, [r3, #48] @ 0x30 + 800054a: f403 1300 and.w r3, r3, #2097152 @ 0x200000 + 800054e: 607b str r3, [r7, #4] + 8000550: 687b ldr r3, [r7, #4] + __HAL_RCC_DMA2_CLK_ENABLE(); + 8000552: 2300 movs r3, #0 + 8000554: 603b str r3, [r7, #0] + 8000556: 4b28 ldr r3, [pc, #160] @ (80005f8 ) + 8000558: 6b1b ldr r3, [r3, #48] @ 0x30 + 800055a: 4a27 ldr r2, [pc, #156] @ (80005f8 ) + 800055c: f443 0380 orr.w r3, r3, #4194304 @ 0x400000 + 8000560: 6313 str r3, [r2, #48] @ 0x30 + 8000562: 4b25 ldr r3, [pc, #148] @ (80005f8 ) + 8000564: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000566: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 800056a: 603b str r3, [r7, #0] + 800056c: 683b ldr r3, [r7, #0] + + /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); + 800056e: 2200 movs r2, #0 + 8000570: 2100 movs r1, #0 + 8000572: 200b movs r0, #11 + 8000574: f001 fde3 bl 800213e + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); + 8000578: 200b movs r0, #11 + 800057a: f001 fdfc bl 8002176 + /* DMA1_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0); + 800057e: 2200 movs r2, #0 + 8000580: 2100 movs r1, #0 + 8000582: 200d movs r0, #13 + 8000584: f001 fddb bl 800213e + HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn); + 8000588: 200d movs r0, #13 + 800058a: f001 fdf4 bl 8002176 + /* DMA1_Stream4_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 0, 0); + 800058e: 2200 movs r2, #0 + 8000590: 2100 movs r1, #0 + 8000592: 200f movs r0, #15 + 8000594: f001 fdd3 bl 800213e + HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn); + 8000598: 200f movs r0, #15 + 800059a: f001 fdec bl 8002176 + /* DMA1_Stream5_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0); + 800059e: 2200 movs r2, #0 + 80005a0: 2100 movs r1, #0 + 80005a2: 2010 movs r0, #16 + 80005a4: f001 fdcb bl 800213e + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); + 80005a8: 2010 movs r0, #16 + 80005aa: f001 fde4 bl 8002176 + /* DMA1_Stream6_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0); + 80005ae: 2200 movs r2, #0 + 80005b0: 2100 movs r1, #0 + 80005b2: 2011 movs r0, #17 + 80005b4: f001 fdc3 bl 800213e + HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); + 80005b8: 2011 movs r0, #17 + 80005ba: f001 fddc bl 8002176 + /* DMA1_Stream7_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 0, 0); + 80005be: 2200 movs r2, #0 + 80005c0: 2100 movs r1, #0 + 80005c2: 202f movs r0, #47 @ 0x2f + 80005c4: f001 fdbb bl 800213e + HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); + 80005c8: 202f movs r0, #47 @ 0x2f + 80005ca: f001 fdd4 bl 8002176 + /* DMA2_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0); + 80005ce: 2200 movs r2, #0 + 80005d0: 2100 movs r1, #0 + 80005d2: 203a movs r0, #58 @ 0x3a + 80005d4: f001 fdb3 bl 800213e + HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); + 80005d8: 203a movs r0, #58 @ 0x3a + 80005da: f001 fdcc bl 8002176 + /* DMA2_Stream7_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 0, 0); + 80005de: 2200 movs r2, #0 + 80005e0: 2100 movs r1, #0 + 80005e2: 2046 movs r0, #70 @ 0x46 + 80005e4: f001 fdab bl 800213e + HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); + 80005e8: 2046 movs r0, #70 @ 0x46 + 80005ea: f001 fdc4 bl 8002176 + +} + 80005ee: bf00 nop + 80005f0: 3708 adds r7, #8 + 80005f2: 46bd mov sp, r7 + 80005f4: bd80 pop {r7, pc} + 80005f6: bf00 nop + 80005f8: 40023800 .word 0x40023800 + +080005fc : + * Output + * EVENT_OUT + * EXTI +*/ +void MX_GPIO_Init(void) +{ + 80005fc: b580 push {r7, lr} + 80005fe: b08a sub sp, #40 @ 0x28 + 8000600: af00 add r7, sp, #0 + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8000602: f107 0314 add.w r3, r7, #20 + 8000606: 2200 movs r2, #0 + 8000608: 601a str r2, [r3, #0] + 800060a: 605a str r2, [r3, #4] + 800060c: 609a str r2, [r3, #8] + 800060e: 60da str r2, [r3, #12] + 8000610: 611a str r2, [r3, #16] + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOH_CLK_ENABLE(); + 8000612: 2300 movs r3, #0 + 8000614: 613b str r3, [r7, #16] + 8000616: 4b45 ldr r3, [pc, #276] @ (800072c ) + 8000618: 6b1b ldr r3, [r3, #48] @ 0x30 + 800061a: 4a44 ldr r2, [pc, #272] @ (800072c ) + 800061c: f043 0380 orr.w r3, r3, #128 @ 0x80 + 8000620: 6313 str r3, [r2, #48] @ 0x30 + 8000622: 4b42 ldr r3, [pc, #264] @ (800072c ) + 8000624: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000626: f003 0380 and.w r3, r3, #128 @ 0x80 + 800062a: 613b str r3, [r7, #16] + 800062c: 693b ldr r3, [r7, #16] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 800062e: 2300 movs r3, #0 + 8000630: 60fb str r3, [r7, #12] + 8000632: 4b3e ldr r3, [pc, #248] @ (800072c ) + 8000634: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000636: 4a3d ldr r2, [pc, #244] @ (800072c ) + 8000638: f043 0301 orr.w r3, r3, #1 + 800063c: 6313 str r3, [r2, #48] @ 0x30 + 800063e: 4b3b ldr r3, [pc, #236] @ (800072c ) + 8000640: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000642: f003 0301 and.w r3, r3, #1 + 8000646: 60fb str r3, [r7, #12] + 8000648: 68fb ldr r3, [r7, #12] + __HAL_RCC_GPIOC_CLK_ENABLE(); + 800064a: 2300 movs r3, #0 + 800064c: 60bb str r3, [r7, #8] + 800064e: 4b37 ldr r3, [pc, #220] @ (800072c ) + 8000650: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000652: 4a36 ldr r2, [pc, #216] @ (800072c ) + 8000654: f043 0304 orr.w r3, r3, #4 + 8000658: 6313 str r3, [r2, #48] @ 0x30 + 800065a: 4b34 ldr r3, [pc, #208] @ (800072c ) + 800065c: 6b1b ldr r3, [r3, #48] @ 0x30 + 800065e: f003 0304 and.w r3, r3, #4 + 8000662: 60bb str r3, [r7, #8] + 8000664: 68bb ldr r3, [r7, #8] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8000666: 2300 movs r3, #0 + 8000668: 607b str r3, [r7, #4] + 800066a: 4b30 ldr r3, [pc, #192] @ (800072c ) + 800066c: 6b1b ldr r3, [r3, #48] @ 0x30 + 800066e: 4a2f ldr r2, [pc, #188] @ (800072c ) + 8000670: f043 0302 orr.w r3, r3, #2 + 8000674: 6313 str r3, [r2, #48] @ 0x30 + 8000676: 4b2d ldr r3, [pc, #180] @ (800072c ) + 8000678: 6b1b ldr r3, [r3, #48] @ 0x30 + 800067a: f003 0302 and.w r3, r3, #2 + 800067e: 607b str r3, [r7, #4] + 8000680: 687b ldr r3, [r7, #4] + __HAL_RCC_GPIOD_CLK_ENABLE(); + 8000682: 2300 movs r3, #0 + 8000684: 603b str r3, [r7, #0] + 8000686: 4b29 ldr r3, [pc, #164] @ (800072c ) + 8000688: 6b1b ldr r3, [r3, #48] @ 0x30 + 800068a: 4a28 ldr r2, [pc, #160] @ (800072c ) + 800068c: f043 0308 orr.w r3, r3, #8 + 8000690: 6313 str r3, [r2, #48] @ 0x30 + 8000692: 4b26 ldr r3, [pc, #152] @ (800072c ) + 8000694: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000696: f003 0308 and.w r3, r3, #8 + 800069a: 603b str r3, [r7, #0] + 800069c: 683b ldr r3, [r7, #0] + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET); + 800069e: 2200 movs r2, #0 + 80006a0: f44f 7170 mov.w r1, #960 @ 0x3c0 + 80006a4: 4822 ldr r0, [pc, #136] @ (8000730 ) + 80006a6: f002 fb2f bl 8002d08 + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + 80006aa: 2200 movs r2, #0 + 80006ac: f44f 7180 mov.w r1, #256 @ 0x100 + 80006b0: 4820 ldr r0, [pc, #128] @ (8000734 ) + 80006b2: f002 fb29 bl 8002d08 + + /*Configure GPIO pins : PC4 PC5 */ + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; + 80006b6: 2330 movs r3, #48 @ 0x30 + 80006b8: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 80006ba: 2300 movs r3, #0 + 80006bc: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + 80006be: 2302 movs r3, #2 + 80006c0: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 80006c2: f107 0314 add.w r3, r7, #20 + 80006c6: 4619 mov r1, r3 + 80006c8: 4819 ldr r0, [pc, #100] @ (8000730 ) + 80006ca: f002 f971 bl 80029b0 + + /*Configure GPIO pins : PB0 PB1 PB2 PB10 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10; + 80006ce: f240 4307 movw r3, #1031 @ 0x407 + 80006d2: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 80006d4: 2300 movs r3, #0 + 80006d6: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + 80006d8: 2302 movs r3, #2 + 80006da: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80006dc: f107 0314 add.w r3, r7, #20 + 80006e0: 4619 mov r1, r3 + 80006e2: 4815 ldr r0, [pc, #84] @ (8000738 ) + 80006e4: f002 f964 bl 80029b0 + + /*Configure GPIO pins : PC6 PC7 PC8 PC9 */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; + 80006e8: f44f 7370 mov.w r3, #960 @ 0x3c0 + 80006ec: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 80006ee: 2301 movs r3, #1 + 80006f0: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 80006f2: 2300 movs r3, #0 + 80006f4: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 80006f6: 2300 movs r3, #0 + 80006f8: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 80006fa: f107 0314 add.w r3, r7, #20 + 80006fe: 4619 mov r1, r3 + 8000700: 480b ldr r0, [pc, #44] @ (8000730 ) + 8000702: f002 f955 bl 80029b0 + + /*Configure GPIO pin : PA8 */ + GPIO_InitStruct.Pin = GPIO_PIN_8; + 8000706: f44f 7380 mov.w r3, #256 @ 0x100 + 800070a: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800070c: 2301 movs r3, #1 + 800070e: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8000710: 2300 movs r3, #0 + 8000712: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8000714: 2300 movs r3, #0 + 8000716: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 8000718: f107 0314 add.w r3, r7, #20 + 800071c: 4619 mov r1, r3 + 800071e: 4805 ldr r0, [pc, #20] @ (8000734 ) + 8000720: f002 f946 bl 80029b0 + +} + 8000724: bf00 nop + 8000726: 3728 adds r7, #40 @ 0x28 + 8000728: 46bd mov sp, r7 + 800072a: bd80 pop {r7, pc} + 800072c: 40023800 .word 0x40023800 + 8000730: 40020800 .word 0x40020800 + 8000734: 40020000 .word 0x40020000 + 8000738: 40020400 .word 0x40020400 + +0800073c : + +I2C_HandleTypeDef hi2c1; + +/* I2C1 init function */ +void MX_I2C1_Init(void) +{ + 800073c: b580 push {r7, lr} + 800073e: af00 add r7, sp, #0 + /* USER CODE END I2C1_Init 0 */ + + /* USER CODE BEGIN I2C1_Init 1 */ + + /* USER CODE END I2C1_Init 1 */ + hi2c1.Instance = I2C1; + 8000740: 4b12 ldr r3, [pc, #72] @ (800078c ) + 8000742: 4a13 ldr r2, [pc, #76] @ (8000790 ) + 8000744: 601a str r2, [r3, #0] + hi2c1.Init.ClockSpeed = 100000; + 8000746: 4b11 ldr r3, [pc, #68] @ (800078c ) + 8000748: 4a12 ldr r2, [pc, #72] @ (8000794 ) + 800074a: 605a str r2, [r3, #4] + hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; + 800074c: 4b0f ldr r3, [pc, #60] @ (800078c ) + 800074e: 2200 movs r2, #0 + 8000750: 609a str r2, [r3, #8] + hi2c1.Init.OwnAddress1 = 0; + 8000752: 4b0e ldr r3, [pc, #56] @ (800078c ) + 8000754: 2200 movs r2, #0 + 8000756: 60da str r2, [r3, #12] + hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + 8000758: 4b0c ldr r3, [pc, #48] @ (800078c ) + 800075a: f44f 4280 mov.w r2, #16384 @ 0x4000 + 800075e: 611a str r2, [r3, #16] + hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; + 8000760: 4b0a ldr r3, [pc, #40] @ (800078c ) + 8000762: 2200 movs r2, #0 + 8000764: 615a str r2, [r3, #20] + hi2c1.Init.OwnAddress2 = 0; + 8000766: 4b09 ldr r3, [pc, #36] @ (800078c ) + 8000768: 2200 movs r2, #0 + 800076a: 619a str r2, [r3, #24] + hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + 800076c: 4b07 ldr r3, [pc, #28] @ (800078c ) + 800076e: 2200 movs r2, #0 + 8000770: 61da str r2, [r3, #28] + hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + 8000772: 4b06 ldr r3, [pc, #24] @ (800078c ) + 8000774: 2200 movs r2, #0 + 8000776: 621a str r2, [r3, #32] + if (HAL_I2C_Init(&hi2c1) != HAL_OK) + 8000778: 4804 ldr r0, [pc, #16] @ (800078c ) + 800077a: f002 fadf bl 8002d3c + 800077e: 4603 mov r3, r0 + 8000780: 2b00 cmp r3, #0 + 8000782: d001 beq.n 8000788 + { + Error_Handler(); + 8000784: f000 fd60 bl 8001248 + } + /* USER CODE BEGIN I2C1_Init 2 */ + + /* USER CODE END I2C1_Init 2 */ + +} + 8000788: bf00 nop + 800078a: bd80 pop {r7, pc} + 800078c: 200001bc .word 0x200001bc + 8000790: 40005400 .word 0x40005400 + 8000794: 000186a0 .word 0x000186a0 + +08000798 : + +void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) +{ + 8000798: b580 push {r7, lr} + 800079a: b08a sub sp, #40 @ 0x28 + 800079c: af00 add r7, sp, #0 + 800079e: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 80007a0: f107 0314 add.w r3, r7, #20 + 80007a4: 2200 movs r2, #0 + 80007a6: 601a str r2, [r3, #0] + 80007a8: 605a str r2, [r3, #4] + 80007aa: 609a str r2, [r3, #8] + 80007ac: 60da str r2, [r3, #12] + 80007ae: 611a str r2, [r3, #16] + if(i2cHandle->Instance==I2C1) + 80007b0: 687b ldr r3, [r7, #4] + 80007b2: 681b ldr r3, [r3, #0] + 80007b4: 4a19 ldr r2, [pc, #100] @ (800081c ) + 80007b6: 4293 cmp r3, r2 + 80007b8: d12b bne.n 8000812 + { + /* USER CODE BEGIN I2C1_MspInit 0 */ + + /* USER CODE END I2C1_MspInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + 80007ba: 2300 movs r3, #0 + 80007bc: 613b str r3, [r7, #16] + 80007be: 4b18 ldr r3, [pc, #96] @ (8000820 ) + 80007c0: 6b1b ldr r3, [r3, #48] @ 0x30 + 80007c2: 4a17 ldr r2, [pc, #92] @ (8000820 ) + 80007c4: f043 0302 orr.w r3, r3, #2 + 80007c8: 6313 str r3, [r2, #48] @ 0x30 + 80007ca: 4b15 ldr r3, [pc, #84] @ (8000820 ) + 80007cc: 6b1b ldr r3, [r3, #48] @ 0x30 + 80007ce: f003 0302 and.w r3, r3, #2 + 80007d2: 613b str r3, [r7, #16] + 80007d4: 693b ldr r3, [r7, #16] + /**I2C1 GPIO Configuration + PB6 ------> I2C1_SCL + PB7 ------> I2C1_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + 80007d6: 23c0 movs r3, #192 @ 0xc0 + 80007d8: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + 80007da: 2312 movs r3, #18 + 80007dc: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 80007de: 2300 movs r3, #0 + 80007e0: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 80007e2: 2303 movs r3, #3 + 80007e4: 623b str r3, [r7, #32] + GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; + 80007e6: 2304 movs r3, #4 + 80007e8: 627b str r3, [r7, #36] @ 0x24 + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80007ea: f107 0314 add.w r3, r7, #20 + 80007ee: 4619 mov r1, r3 + 80007f0: 480c ldr r0, [pc, #48] @ (8000824 ) + 80007f2: f002 f8dd bl 80029b0 + + /* I2C1 clock enable */ + __HAL_RCC_I2C1_CLK_ENABLE(); + 80007f6: 2300 movs r3, #0 + 80007f8: 60fb str r3, [r7, #12] + 80007fa: 4b09 ldr r3, [pc, #36] @ (8000820 ) + 80007fc: 6c1b ldr r3, [r3, #64] @ 0x40 + 80007fe: 4a08 ldr r2, [pc, #32] @ (8000820 ) + 8000800: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 8000804: 6413 str r3, [r2, #64] @ 0x40 + 8000806: 4b06 ldr r3, [pc, #24] @ (8000820 ) + 8000808: 6c1b ldr r3, [r3, #64] @ 0x40 + 800080a: f403 1300 and.w r3, r3, #2097152 @ 0x200000 + 800080e: 60fb str r3, [r7, #12] + 8000810: 68fb ldr r3, [r7, #12] + /* USER CODE BEGIN I2C1_MspInit 1 */ + + /* USER CODE END I2C1_MspInit 1 */ + } +} + 8000812: bf00 nop + 8000814: 3728 adds r7, #40 @ 0x28 + 8000816: 46bd mov sp, r7 + 8000818: bd80 pop {r7, pc} + 800081a: bf00 nop + 800081c: 40005400 .word 0x40005400 + 8000820: 40023800 .word 0x40023800 + 8000824: 40020400 .word 0x40020400 + +08000828 : + volatile uint8_t tail; // accessed in ISR + volatile uint8_t count; // optional, only if needed +} PacketQueue; + +// Initialize +void pq_init(PacketQueue *q){ + 8000828: b480 push {r7} + 800082a: b083 sub sp, #12 + 800082c: af00 add r7, sp, #0 + 800082e: 6078 str r0, [r7, #4] + q->head = 0; + 8000830: 687b ldr r3, [r7, #4] + 8000832: 2200 movs r2, #0 + 8000834: f883 2180 strb.w r2, [r3, #384] @ 0x180 + q->tail = 0; + 8000838: 687b ldr r3, [r7, #4] + 800083a: 2200 movs r2, #0 + 800083c: f883 2181 strb.w r2, [r3, #385] @ 0x181 + q->count = 0; + 8000840: 687b ldr r3, [r7, #4] + 8000842: 2200 movs r2, #0 + 8000844: f883 2182 strb.w r2, [r3, #386] @ 0x182 +} + 8000848: bf00 nop + 800084a: 370c adds r7, #12 + 800084c: 46bd mov sp, r7 + 800084e: f85d 7b04 ldr.w r7, [sp], #4 + 8000852: 4770 bx lr + +08000854 : + +// Called from ISR +bool pq_push(PacketQueue *q, const uint8_t packet[PACKET_SIZE]){ + 8000854: b580 push {r7, lr} + 8000856: b084 sub sp, #16 + 8000858: af00 add r7, sp, #0 + 800085a: 6078 str r0, [r7, #4] + 800085c: 6039 str r1, [r7, #0] + uint8_t nextTail = (q->tail + 1) % QUEUE_CAPACITY; + 800085e: 687b ldr r3, [r7, #4] + 8000860: f893 3181 ldrb.w r3, [r3, #385] @ 0x181 + 8000864: b2db uxtb r3, r3 + 8000866: 3301 adds r3, #1 + 8000868: 425a negs r2, r3 + 800086a: f003 031f and.w r3, r3, #31 + 800086e: f002 021f and.w r2, r2, #31 + 8000872: bf58 it pl + 8000874: 4253 negpl r3, r2 + 8000876: 73fb strb r3, [r7, #15] + if(nextTail == q->head) return false; // queue full + 8000878: 687b ldr r3, [r7, #4] + 800087a: f893 3180 ldrb.w r3, [r3, #384] @ 0x180 + 800087e: b2db uxtb r3, r3 + 8000880: 7bfa ldrb r2, [r7, #15] + 8000882: 429a cmp r2, r3 + 8000884: d101 bne.n 800088a + 8000886: 2300 movs r3, #0 + 8000888: e014 b.n 80008b4 + + memcpy(q->data[q->tail], packet, PACKET_SIZE); + 800088a: 687b ldr r3, [r7, #4] + 800088c: f893 3181 ldrb.w r3, [r3, #385] @ 0x181 + 8000890: b2db uxtb r3, r3 + 8000892: 461a mov r2, r3 + 8000894: 4613 mov r3, r2 + 8000896: 005b lsls r3, r3, #1 + 8000898: 4413 add r3, r2 + 800089a: 009b lsls r3, r3, #2 + 800089c: 687a ldr r2, [r7, #4] + 800089e: 4413 add r3, r2 + 80008a0: 220c movs r2, #12 + 80008a2: 6839 ldr r1, [r7, #0] + 80008a4: 4618 mov r0, r3 + 80008a6: f00a fd7f bl 800b3a8 + q->tail = nextTail; + 80008aa: 687b ldr r3, [r7, #4] + 80008ac: 7bfa ldrb r2, [r7, #15] + 80008ae: f883 2181 strb.w r2, [r3, #385] @ 0x181 + return true; + 80008b2: 2301 movs r3, #1 +} + 80008b4: 4618 mov r0, r3 + 80008b6: 3710 adds r7, #16 + 80008b8: 46bd mov sp, r7 + 80008ba: bd80 pop {r7, pc} + +080008bc : + +// Called from main +bool pq_pop(PacketQueue *q, uint8_t out_packet[PACKET_SIZE]){ + 80008bc: b580 push {r7, lr} + 80008be: b082 sub sp, #8 + 80008c0: af00 add r7, sp, #0 + 80008c2: 6078 str r0, [r7, #4] + 80008c4: 6039 str r1, [r7, #0] + if(q->head == q->tail) return false; // queue empty + 80008c6: 687b ldr r3, [r7, #4] + 80008c8: f893 3180 ldrb.w r3, [r3, #384] @ 0x180 + 80008cc: b2da uxtb r2, r3 + 80008ce: 687b ldr r3, [r7, #4] + 80008d0: f893 3181 ldrb.w r3, [r3, #385] @ 0x181 + 80008d4: b2db uxtb r3, r3 + 80008d6: 429a cmp r2, r3 + 80008d8: d101 bne.n 80008de + 80008da: 2300 movs r3, #0 + 80008dc: e020 b.n 8000920 + + memcpy(out_packet, q->data[q->head], PACKET_SIZE); + 80008de: 687b ldr r3, [r7, #4] + 80008e0: f893 3180 ldrb.w r3, [r3, #384] @ 0x180 + 80008e4: b2db uxtb r3, r3 + 80008e6: 461a mov r2, r3 + 80008e8: 4613 mov r3, r2 + 80008ea: 005b lsls r3, r3, #1 + 80008ec: 4413 add r3, r2 + 80008ee: 009b lsls r3, r3, #2 + 80008f0: 687a ldr r2, [r7, #4] + 80008f2: 4413 add r3, r2 + 80008f4: 220c movs r2, #12 + 80008f6: 4619 mov r1, r3 + 80008f8: 6838 ldr r0, [r7, #0] + 80008fa: f00a fd55 bl 800b3a8 + q->head = (q->head + 1) % QUEUE_CAPACITY; + 80008fe: 687b ldr r3, [r7, #4] + 8000900: f893 3180 ldrb.w r3, [r3, #384] @ 0x180 + 8000904: b2db uxtb r3, r3 + 8000906: 3301 adds r3, #1 + 8000908: 425a negs r2, r3 + 800090a: f003 031f and.w r3, r3, #31 + 800090e: f002 021f and.w r2, r2, #31 + 8000912: bf58 it pl + 8000914: 4253 negpl r3, r2 + 8000916: b2da uxtb r2, r3 + 8000918: 687b ldr r3, [r7, #4] + 800091a: f883 2180 strb.w r2, [r3, #384] @ 0x180 + return true; + 800091e: 2301 movs r3, #1 +} + 8000920: 4618 mov r0, r3 + 8000922: 3708 adds r7, #8 + 8000924: 46bd mov sp, r7 + 8000926: bd80 pop {r7, pc} + +08000928
: +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + 8000928: b580 push {r7, lr} + 800092a: b088 sub sp, #32 + 800092c: af00 add r7, sp, #0 + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + 800092e: f001 fa95 bl 8001e5c + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + 8000932: f000 f97b bl 8000c2c + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + 8000936: f7ff fe61 bl 80005fc + MX_DMA_Init();MX_PWM_Init(); + 800093a: f7ff fdf9 bl 8000530 + 800093e: f000 fc89 bl 8001254 + MX_TIM2_Init(); + 8000942: f000 fdab bl 800149c + MX_TIM3_Init(); + 8000946: f000 fe01 bl 800154c + MX_UART4_Init(); + 800094a: f000 fef3 bl 8001734 + MX_UART5_Init(); + 800094e: f000 ff1b bl 8001788 + MX_USART1_UART_Init(); + 8000952: f000 ff43 bl 80017dc + MX_USART2_UART_Init(); + 8000956: f000 ff6b bl 8001830 + MX_I2C1_Init(); + 800095a: f7ff feef bl 800073c + MX_USB_DEVICE_Init(); + 800095e: f00a f849 bl 800a9f4 + MX_PWM_Init(); + 8000962: f000 fc77 bl 8001254 + /* USER CODE BEGIN 2 */ + + //Enable UART RX DMA for all ports + HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage)); + 8000966: 2210 movs r2, #16 + 8000968: 4958 ldr r1, [pc, #352] @ (8000acc ) + 800096a: 4859 ldr r0, [pc, #356] @ (8000ad0 ) + 800096c: f005 fe48 bl 8006600 + HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage)); + 8000970: 2210 movs r2, #16 + 8000972: 4958 ldr r1, [pc, #352] @ (8000ad4 ) + 8000974: 4858 ldr r0, [pc, #352] @ (8000ad8 ) + 8000976: f005 fe43 bl 8006600 + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + 800097a: 2210 movs r2, #16 + 800097c: 4957 ldr r1, [pc, #348] @ (8000adc ) + 800097e: 4858 ldr r0, [pc, #352] @ (8000ae0 ) + 8000980: f005 fe3e bl 8006600 + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + 8000984: 2210 movs r2, #16 + 8000986: 4957 ldr r1, [pc, #348] @ (8000ae4 ) + 8000988: 4857 ldr r0, [pc, #348] @ (8000ae8 ) + 800098a: f005 fe39 bl 8006600 + + // Start TIM3 encoder (PA6/PA7) so we can read encoder delta + HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL); + 800098e: 213c movs r1, #60 @ 0x3c + 8000990: 4856 ldr r0, [pc, #344] @ (8000aec ) + 8000992: f005 f8c5 bl 8005b20 + LAST_ENCODER_COUNT = __HAL_TIM_GET_COUNTER(&htim3); + 8000996: 4b55 ldr r3, [pc, #340] @ (8000aec ) + 8000998: 681b ldr r3, [r3, #0] + 800099a: 6a5b ldr r3, [r3, #36] @ 0x24 + 800099c: 461a mov r2, r3 + 800099e: 4b54 ldr r3, [pc, #336] @ (8000af0 ) + 80009a0: 601a str r2, [r3, #0] + + //Prealloc Kestate matrix + memset(KEYSTATE, 0, sizeof(KEYSTATE)); + 80009a2: 221e movs r2, #30 + 80009a4: 2100 movs r1, #0 + 80009a6: 4853 ldr r0, [pc, #332] @ (8000af4 ) + 80009a8: f00a fcd2 bl 800b350 + pq_init(&huart1q); + 80009ac: 4852 ldr r0, [pc, #328] @ (8000af8 ) + 80009ae: f7ff ff3b bl 8000828 + pq_init(&huart2q); + 80009b2: 4852 ldr r0, [pc, #328] @ (8000afc ) + 80009b4: f7ff ff38 bl 8000828 + pq_init(&huart4q); + 80009b8: 4851 ldr r0, [pc, #324] @ (8000b00 ) + 80009ba: f7ff ff35 bl 8000828 + pq_init(&huart5q); + 80009be: 4851 ldr r0, [pc, #324] @ (8000b04 ) + 80009c0: f7ff ff32 bl 8000828 + + PWM_Start(); + 80009c4: f000 fc74 bl 80012b0 + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 67); + 80009c8: 4b4f ldr r3, [pc, #316] @ (8000b08 ) + 80009ca: 681b ldr r3, [r3, #0] + 80009cc: 2243 movs r2, #67 @ 0x43 + 80009ce: 635a str r2, [r3, #52] @ 0x34 + switch (MODE){ + 80009d0: 4b4e ldr r3, [pc, #312] @ (8000b0c ) + 80009d2: 781b ldrb r3, [r3, #0] + 80009d4: b2db uxtb r3, r3 + 80009d6: 2b02 cmp r3, #2 + 80009d8: d006 beq.n 80009e8 + 80009da: 2b02 cmp r3, #2 + 80009dc: dc6e bgt.n 8000abc + 80009de: 2b00 cmp r3, #0 + 80009e0: d027 beq.n 8000a32 + 80009e2: 2b01 cmp r3, #1 + 80009e4: d05c beq.n 8000aa0 + encoderProcess(); + USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT)); + break; + + default: + break; + 80009e6: e069 b.n 8000abc + KEYSTATE_CHANGED_FLAG = 1; + 80009e8: 4b49 ldr r3, [pc, #292] @ (8000b10 ) + 80009ea: 2201 movs r2, #1 + 80009ec: 701a strb r2, [r3, #0] + resetReport(); + 80009ee: f000 fc1f bl 8001230 + matrixScan(); + 80009f2: f000 fb47 bl 8001084 + mergeChild(); + 80009f6: f000 f895 bl 8000b24 + encoderProcess(); + 80009fa: f000 fbbb bl 8001174 + if(KEYSTATE_CHANGED_FLAG == 1){ + 80009fe: 4b44 ldr r3, [pc, #272] @ (8000b10 ) + 8000a00: 781b ldrb r3, [r3, #0] + 8000a02: 2b01 cmp r3, #1 + 8000a04: d15c bne.n 8000ac0 + UARTREPORT.DEPTH = DEPTH; + 8000a06: 4b43 ldr r3, [pc, #268] @ (8000b14 ) + 8000a08: 881b ldrh r3, [r3, #0] + 8000a0a: 823b strh r3, [r7, #16] + UARTREPORT.TYPE = 0xEE; + 8000a0c: 23ee movs r3, #238 @ 0xee + 8000a0e: 827b strh r3, [r7, #18] + memcpy(UARTREPORT.KEYPRESS, REPORT.KEYPRESS, sizeof(UARTREPORT.KEYPRESS)); + 8000a10: 4a41 ldr r2, [pc, #260] @ (8000b18 ) + 8000a12: f107 0314 add.w r3, r7, #20 + 8000a16: 3202 adds r2, #2 + 8000a18: 6810 ldr r0, [r2, #0] + 8000a1a: 6851 ldr r1, [r2, #4] + 8000a1c: 6892 ldr r2, [r2, #8] + 8000a1e: c307 stmia r3!, {r0, r1, r2} + HAL_UART_Transmit_DMA(PARENT, (uint8_t*)&UARTREPORT, sizeof(UARTREPORT)); + 8000a20: 4b3e ldr r3, [pc, #248] @ (8000b1c ) + 8000a22: 681b ldr r3, [r3, #0] + 8000a24: f107 0110 add.w r1, r7, #16 + 8000a28: 2210 movs r2, #16 + 8000a2a: 4618 mov r0, r3 + 8000a2c: f005 fd6c bl 8006508 + break; + 8000a30: e046 b.n 8000ac0 + if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED){ + 8000a32: 4b3b ldr r3, [pc, #236] @ (8000b20 ) + 8000a34: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8000a38: b2db uxtb r3, r3 + 8000a3a: 2b03 cmp r3, #3 + 8000a3c: d106 bne.n 8000a4c + MODE = MODE_MAINBOARD; + 8000a3e: 4b33 ldr r3, [pc, #204] @ (8000b0c ) + 8000a40: 2201 movs r2, #1 + 8000a42: 701a strb r2, [r3, #0] + DEPTH = 0; + 8000a44: 4b33 ldr r3, [pc, #204] @ (8000b14 ) + 8000a46: 2200 movs r2, #0 + 8000a48: 801a strh r2, [r3, #0] + break; + 8000a4a: e03a b.n 8000ac2 + REQ.DEPTH = 0; + 8000a4c: 2300 movs r3, #0 + 8000a4e: 803b strh r3, [r7, #0] + REQ.TYPE = 0xFF; //Message code for request is 0xFF + 8000a50: 23ff movs r3, #255 @ 0xff + 8000a52: 807b strh r3, [r7, #2] + memset(REQ.KEYPRESS, 0, sizeof(REQ.KEYPRESS)); + 8000a54: 463b mov r3, r7 + 8000a56: 3304 adds r3, #4 + 8000a58: 220c movs r2, #12 + 8000a5a: 2100 movs r1, #0 + 8000a5c: 4618 mov r0, r3 + 8000a5e: f00a fc77 bl 800b350 + HAL_UART_Transmit_DMA(&huart1, (uint8_t*)&REQ, sizeof(REQ)); + 8000a62: 463b mov r3, r7 + 8000a64: 2210 movs r2, #16 + 8000a66: 4619 mov r1, r3 + 8000a68: 4819 ldr r0, [pc, #100] @ (8000ad0 ) + 8000a6a: f005 fd4d bl 8006508 + HAL_UART_Transmit_DMA(&huart2, (uint8_t*)&REQ, sizeof(REQ)); + 8000a6e: 463b mov r3, r7 + 8000a70: 2210 movs r2, #16 + 8000a72: 4619 mov r1, r3 + 8000a74: 4818 ldr r0, [pc, #96] @ (8000ad8 ) + 8000a76: f005 fd47 bl 8006508 + HAL_UART_Transmit_DMA(&huart4, (uint8_t*)&REQ, sizeof(REQ)); + 8000a7a: 463b mov r3, r7 + 8000a7c: 2210 movs r2, #16 + 8000a7e: 4619 mov r1, r3 + 8000a80: 4817 ldr r0, [pc, #92] @ (8000ae0 ) + 8000a82: f005 fd41 bl 8006508 + HAL_UART_Transmit_DMA(&huart5, (uint8_t*)&REQ, sizeof(REQ)); + 8000a86: 463b mov r3, r7 + 8000a88: 2210 movs r2, #16 + 8000a8a: 4619 mov r1, r3 + 8000a8c: 4816 ldr r0, [pc, #88] @ (8000ae8 ) + 8000a8e: f005 fd3b bl 8006508 + HAL_Delay(500); + 8000a92: f44f 70fa mov.w r0, #500 @ 0x1f4 + 8000a96: f001 fa53 bl 8001f40 + findBestParent(); //So true... + 8000a9a: f000 f9db bl 8000e54 + break; + 8000a9e: e010 b.n 8000ac2 + resetReport(); + 8000aa0: f000 fbc6 bl 8001230 + matrixScan();//Something related to this making the key stick. Likely due to race conditions + 8000aa4: f000 faee bl 8001084 + mergeChild(); + 8000aa8: f000 f83c bl 8000b24 + encoderProcess(); + 8000aac: f000 fb62 bl 8001174 + USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT)); + 8000ab0: 220e movs r2, #14 + 8000ab2: 4919 ldr r1, [pc, #100] @ (8000b18 ) + 8000ab4: 481a ldr r0, [pc, #104] @ (8000b20 ) + 8000ab6: f008 fbd1 bl 800925c + break; + 8000aba: e002 b.n 8000ac2 + break; + 8000abc: bf00 nop + 8000abe: e000 b.n 8000ac2 + break; + 8000ac0: bf00 nop + } + + HAL_Delay(20); + 8000ac2: 2014 movs r0, #20 + 8000ac4: f001 fa3c bl 8001f40 + __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 67); + 8000ac8: e77e b.n 80009c8 + 8000aca: bf00 nop + 8000acc: 20000230 .word 0x20000230 + 8000ad0: 200009f0 .word 0x200009f0 + 8000ad4: 20000240 .word 0x20000240 + 8000ad8: 20000a38 .word 0x20000a38 + 8000adc: 20000250 .word 0x20000250 + 8000ae0: 20000960 .word 0x20000960 + 8000ae4: 20000220 .word 0x20000220 + 8000ae8: 200009a8 .word 0x200009a8 + 8000aec: 20000918 .word 0x20000918 + 8000af0: 2000028c .word 0x2000028c + 8000af4: 2000026c .word 0x2000026c + 8000af8: 200002c0 .word 0x200002c0 + 8000afc: 20000444 .word 0x20000444 + 8000b00: 200005c8 .word 0x200005c8 + 8000b04: 2000074c .word 0x2000074c + 8000b08: 200008d0 .word 0x200008d0 + 8000b0c: 2000028a .word 0x2000028a + 8000b10: 20000268 .word 0x20000268 + 8000b14: 20000260 .word 0x20000260 + 8000b18: 20000210 .word 0x20000210 + 8000b1c: 20000264 .word 0x20000264 + 8000b20: 20000d88 .word 0x20000d88 + +08000b24 : + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +void mergeChild(){ + 8000b24: b590 push {r4, r7, lr} + 8000b26: b087 sub sp, #28 + 8000b28: af00 add r7, sp, #0 + uint8_t packet[12]; + if (pq_pop(&huart1q, packet)) { + 8000b2a: 1d3b adds r3, r7, #4 + 8000b2c: 4619 mov r1, r3 + 8000b2e: 4838 ldr r0, [pc, #224] @ (8000c10 ) + 8000b30: f7ff fec4 bl 80008bc + 8000b34: 4603 mov r3, r0 + 8000b36: 2b00 cmp r3, #0 + 8000b38: d008 beq.n 8000b4c + memcpy(UART_KEYSTATE[1], packet, 12); + 8000b3a: 4b36 ldr r3, [pc, #216] @ (8000c14 ) + 8000b3c: 330c adds r3, #12 + 8000b3e: 1d3a adds r2, r7, #4 + 8000b40: ca07 ldmia r2, {r0, r1, r2} + 8000b42: e883 0007 stmia.w r3, {r0, r1, r2} + KEYSTATE_CHANGED_FLAG = 1; + 8000b46: 4b34 ldr r3, [pc, #208] @ (8000c18 ) + 8000b48: 2201 movs r2, #1 + 8000b4a: 701a strb r2, [r3, #0] + } + if (pq_pop(&huart2q, packet)) { + 8000b4c: 1d3b adds r3, r7, #4 + 8000b4e: 4619 mov r1, r3 + 8000b50: 4832 ldr r0, [pc, #200] @ (8000c1c ) + 8000b52: f7ff feb3 bl 80008bc + 8000b56: 4603 mov r3, r0 + 8000b58: 2b00 cmp r3, #0 + 8000b5a: d008 beq.n 8000b6e + memcpy(UART_KEYSTATE[2], packet, 12); + 8000b5c: 4b2d ldr r3, [pc, #180] @ (8000c14 ) + 8000b5e: 3318 adds r3, #24 + 8000b60: 1d3a adds r2, r7, #4 + 8000b62: ca07 ldmia r2, {r0, r1, r2} + 8000b64: e883 0007 stmia.w r3, {r0, r1, r2} + KEYSTATE_CHANGED_FLAG = 1; + 8000b68: 4b2b ldr r3, [pc, #172] @ (8000c18 ) + 8000b6a: 2201 movs r2, #1 + 8000b6c: 701a strb r2, [r3, #0] + } + if (pq_pop(&huart4q, packet)) { + 8000b6e: 1d3b adds r3, r7, #4 + 8000b70: 4619 mov r1, r3 + 8000b72: 482b ldr r0, [pc, #172] @ (8000c20 ) + 8000b74: f7ff fea2 bl 80008bc + 8000b78: 4603 mov r3, r0 + 8000b7a: 2b00 cmp r3, #0 + 8000b7c: d008 beq.n 8000b90 + memcpy(UART_KEYSTATE[3], packet, 12); + 8000b7e: 4b25 ldr r3, [pc, #148] @ (8000c14 ) + 8000b80: 3324 adds r3, #36 @ 0x24 + 8000b82: 1d3a adds r2, r7, #4 + 8000b84: ca07 ldmia r2, {r0, r1, r2} + 8000b86: e883 0007 stmia.w r3, {r0, r1, r2} + KEYSTATE_CHANGED_FLAG = 1; + 8000b8a: 4b23 ldr r3, [pc, #140] @ (8000c18 ) + 8000b8c: 2201 movs r2, #1 + 8000b8e: 701a strb r2, [r3, #0] + } + if (pq_pop(&huart5q, packet)) { + 8000b90: 1d3b adds r3, r7, #4 + 8000b92: 4619 mov r1, r3 + 8000b94: 4823 ldr r0, [pc, #140] @ (8000c24 ) + 8000b96: f7ff fe91 bl 80008bc + 8000b9a: 4603 mov r3, r0 + 8000b9c: 2b00 cmp r3, #0 + 8000b9e: d009 beq.n 8000bb4 + memcpy(UART_KEYSTATE[0], packet, 12); + 8000ba0: 4b1c ldr r3, [pc, #112] @ (8000c14 ) + 8000ba2: 461c mov r4, r3 + 8000ba4: 1d3b adds r3, r7, #4 + 8000ba6: e893 0007 ldmia.w r3, {r0, r1, r2} + 8000baa: e884 0007 stmia.w r4, {r0, r1, r2} + KEYSTATE_CHANGED_FLAG = 1; + 8000bae: 4b1a ldr r3, [pc, #104] @ (8000c18 ) + 8000bb0: 2201 movs r2, #1 + 8000bb2: 701a strb r2, [r3, #0] + } + for(int i = 0; i < 4; i++){ + 8000bb4: 2300 movs r3, #0 + 8000bb6: 617b str r3, [r7, #20] + 8000bb8: e022 b.n 8000c00 + for(int j = 0; j < 12; j++){ + 8000bba: 2300 movs r3, #0 + 8000bbc: 613b str r3, [r7, #16] + 8000bbe: e019 b.n 8000bf4 + REPORT.KEYPRESS[j] |= UART_KEYSTATE[i][j]; + 8000bc0: 4a19 ldr r2, [pc, #100] @ (8000c28 ) + 8000bc2: 693b ldr r3, [r7, #16] + 8000bc4: 4413 add r3, r2 + 8000bc6: 3302 adds r3, #2 + 8000bc8: 7819 ldrb r1, [r3, #0] + 8000bca: 4812 ldr r0, [pc, #72] @ (8000c14 ) + 8000bcc: 697a ldr r2, [r7, #20] + 8000bce: 4613 mov r3, r2 + 8000bd0: 005b lsls r3, r3, #1 + 8000bd2: 4413 add r3, r2 + 8000bd4: 009b lsls r3, r3, #2 + 8000bd6: 18c2 adds r2, r0, r3 + 8000bd8: 693b ldr r3, [r7, #16] + 8000bda: 4413 add r3, r2 + 8000bdc: 781b ldrb r3, [r3, #0] + 8000bde: 430b orrs r3, r1 + 8000be0: b2d9 uxtb r1, r3 + 8000be2: 4a11 ldr r2, [pc, #68] @ (8000c28 ) + 8000be4: 693b ldr r3, [r7, #16] + 8000be6: 4413 add r3, r2 + 8000be8: 3302 adds r3, #2 + 8000bea: 460a mov r2, r1 + 8000bec: 701a strb r2, [r3, #0] + for(int j = 0; j < 12; j++){ + 8000bee: 693b ldr r3, [r7, #16] + 8000bf0: 3301 adds r3, #1 + 8000bf2: 613b str r3, [r7, #16] + 8000bf4: 693b ldr r3, [r7, #16] + 8000bf6: 2b0b cmp r3, #11 + 8000bf8: dde2 ble.n 8000bc0 + for(int i = 0; i < 4; i++){ + 8000bfa: 697b ldr r3, [r7, #20] + 8000bfc: 3301 adds r3, #1 + 8000bfe: 617b str r3, [r7, #20] + 8000c00: 697b ldr r3, [r7, #20] + 8000c02: 2b03 cmp r3, #3 + 8000c04: ddd9 ble.n 8000bba + } + } +} + 8000c06: bf00 nop + 8000c08: bf00 nop + 8000c0a: 371c adds r7, #28 + 8000c0c: 46bd mov sp, r7 + 8000c0e: bd90 pop {r4, r7, pc} + 8000c10: 200002c0 .word 0x200002c0 + 8000c14: 20000290 .word 0x20000290 + 8000c18: 20000268 .word 0x20000268 + 8000c1c: 20000444 .word 0x20000444 + 8000c20: 200005c8 .word 0x200005c8 + 8000c24: 2000074c .word 0x2000074c + 8000c28: 20000210 .word 0x20000210 + +08000c2c : +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + 8000c2c: b580 push {r7, lr} + 8000c2e: b094 sub sp, #80 @ 0x50 + 8000c30: af00 add r7, sp, #0 + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + 8000c32: f107 031c add.w r3, r7, #28 + 8000c36: 2234 movs r2, #52 @ 0x34 + 8000c38: 2100 movs r1, #0 + 8000c3a: 4618 mov r0, r3 + 8000c3c: f00a fb88 bl 800b350 + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + 8000c40: f107 0308 add.w r3, r7, #8 + 8000c44: 2200 movs r2, #0 + 8000c46: 601a str r2, [r3, #0] + 8000c48: 605a str r2, [r3, #4] + 8000c4a: 609a str r2, [r3, #8] + 8000c4c: 60da str r2, [r3, #12] + 8000c4e: 611a str r2, [r3, #16] + + /** Configure the main internal regulator out put voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + 8000c50: 2300 movs r3, #0 + 8000c52: 607b str r3, [r7, #4] + 8000c54: 4b29 ldr r3, [pc, #164] @ (8000cfc ) + 8000c56: 6c1b ldr r3, [r3, #64] @ 0x40 + 8000c58: 4a28 ldr r2, [pc, #160] @ (8000cfc ) + 8000c5a: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8000c5e: 6413 str r3, [r2, #64] @ 0x40 + 8000c60: 4b26 ldr r3, [pc, #152] @ (8000cfc ) + 8000c62: 6c1b ldr r3, [r3, #64] @ 0x40 + 8000c64: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 8000c68: 607b str r3, [r7, #4] + 8000c6a: 687b ldr r3, [r7, #4] + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); + 8000c6c: 2300 movs r3, #0 + 8000c6e: 603b str r3, [r7, #0] + 8000c70: 4b23 ldr r3, [pc, #140] @ (8000d00 ) + 8000c72: 681b ldr r3, [r3, #0] + 8000c74: f423 4340 bic.w r3, r3, #49152 @ 0xc000 + 8000c78: 4a21 ldr r2, [pc, #132] @ (8000d00 ) + 8000c7a: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 8000c7e: 6013 str r3, [r2, #0] + 8000c80: 4b1f ldr r3, [pc, #124] @ (8000d00 ) + 8000c82: 681b ldr r3, [r3, #0] + 8000c84: f403 4340 and.w r3, r3, #49152 @ 0xc000 + 8000c88: 603b str r3, [r7, #0] + 8000c8a: 683b ldr r3, [r7, #0] + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + 8000c8c: 2301 movs r3, #1 + 8000c8e: 61fb str r3, [r7, #28] + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + 8000c90: f44f 3380 mov.w r3, #65536 @ 0x10000 + 8000c94: 623b str r3, [r7, #32] + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + 8000c96: 2302 movs r3, #2 + 8000c98: 637b str r3, [r7, #52] @ 0x34 + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + 8000c9a: f44f 0380 mov.w r3, #4194304 @ 0x400000 + 8000c9e: 63bb str r3, [r7, #56] @ 0x38 + RCC_OscInitStruct.PLL.PLLM = 4; + 8000ca0: 2304 movs r3, #4 + 8000ca2: 63fb str r3, [r7, #60] @ 0x3c + RCC_OscInitStruct.PLL.PLLN = 96; + 8000ca4: 2360 movs r3, #96 @ 0x60 + 8000ca6: 643b str r3, [r7, #64] @ 0x40 + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + 8000ca8: 2302 movs r3, #2 + 8000caa: 647b str r3, [r7, #68] @ 0x44 + RCC_OscInitStruct.PLL.PLLQ = 4; + 8000cac: 2304 movs r3, #4 + 8000cae: 64bb str r3, [r7, #72] @ 0x48 + RCC_OscInitStruct.PLL.PLLR = 2; + 8000cb0: 2302 movs r3, #2 + 8000cb2: 64fb str r3, [r7, #76] @ 0x4c + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + 8000cb4: f107 031c add.w r3, r7, #28 + 8000cb8: 4618 mov r0, r3 + 8000cba: f004 fa7d bl 80051b8 + 8000cbe: 4603 mov r3, r0 + 8000cc0: 2b00 cmp r3, #0 + 8000cc2: d001 beq.n 8000cc8 + { + Error_Handler(); + 8000cc4: f000 fac0 bl 8001248 + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + 8000cc8: 230f movs r3, #15 + 8000cca: 60bb str r3, [r7, #8] + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + 8000ccc: 2302 movs r3, #2 + 8000cce: 60fb str r3, [r7, #12] + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2; + 8000cd0: 2380 movs r3, #128 @ 0x80 + 8000cd2: 613b str r3, [r7, #16] + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + 8000cd4: f44f 5380 mov.w r3, #4096 @ 0x1000 + 8000cd8: 617b str r3, [r7, #20] + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + 8000cda: 2300 movs r3, #0 + 8000cdc: 61bb str r3, [r7, #24] + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + 8000cde: f107 0308 add.w r3, r7, #8 + 8000ce2: 2101 movs r1, #1 + 8000ce4: 4618 mov r0, r3 + 8000ce6: f003 fbf3 bl 80044d0 + 8000cea: 4603 mov r3, r0 + 8000cec: 2b00 cmp r3, #0 + 8000cee: d001 beq.n 8000cf4 + { + Error_Handler(); + 8000cf0: f000 faaa bl 8001248 + } +} + 8000cf4: bf00 nop + 8000cf6: 3750 adds r7, #80 @ 0x50 + 8000cf8: 46bd mov sp, r7 + 8000cfa: bd80 pop {r7, pc} + 8000cfc: 40023800 .word 0x40023800 + 8000d00: 40007000 .word 0x40007000 + +08000d04 : + +/* USER CODE BEGIN 4 */ +// UART Message Requests Goes Here +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { + 8000d04: b580 push {r7, lr} + 8000d06: b082 sub sp, #8 + 8000d08: af00 add r7, sp, #0 + 8000d0a: 6078 str r0, [r7, #4] + if (huart->Instance == USART1) { + 8000d0c: 687b ldr r3, [r7, #4] + 8000d0e: 681b ldr r3, [r3, #0] + 8000d10: 4a1e ldr r2, [pc, #120] @ (8000d8c ) + 8000d12: 4293 cmp r3, r2 + 8000d14: d109 bne.n 8000d2a + handleUARTMessages((uint8_t*)&RX1Msg, &huart1); + 8000d16: 491e ldr r1, [pc, #120] @ (8000d90 ) + 8000d18: 481e ldr r0, [pc, #120] @ (8000d94 ) + 8000d1a: f000 f8dd bl 8000ed8 + HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage)); + 8000d1e: 2210 movs r2, #16 + 8000d20: 491c ldr r1, [pc, #112] @ (8000d94 ) + 8000d22: 481b ldr r0, [pc, #108] @ (8000d90 ) + 8000d24: f005 fc6c bl 8006600 + } + else if (huart->Instance == UART5) { + handleUARTMessages((uint8_t*)&RX5Msg, &huart5); + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + } +} + 8000d28: e02b b.n 8000d82 + else if (huart->Instance == USART2) { + 8000d2a: 687b ldr r3, [r7, #4] + 8000d2c: 681b ldr r3, [r3, #0] + 8000d2e: 4a1a ldr r2, [pc, #104] @ (8000d98 ) + 8000d30: 4293 cmp r3, r2 + 8000d32: d109 bne.n 8000d48 + handleUARTMessages((uint8_t*)&RX2Msg, &huart2); + 8000d34: 4919 ldr r1, [pc, #100] @ (8000d9c ) + 8000d36: 481a ldr r0, [pc, #104] @ (8000da0 ) + 8000d38: f000 f8ce bl 8000ed8 + HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage)); + 8000d3c: 2210 movs r2, #16 + 8000d3e: 4918 ldr r1, [pc, #96] @ (8000da0 ) + 8000d40: 4816 ldr r0, [pc, #88] @ (8000d9c ) + 8000d42: f005 fc5d bl 8006600 +} + 8000d46: e01c b.n 8000d82 + else if (huart->Instance == UART4) { + 8000d48: 687b ldr r3, [r7, #4] + 8000d4a: 681b ldr r3, [r3, #0] + 8000d4c: 4a15 ldr r2, [pc, #84] @ (8000da4 ) + 8000d4e: 4293 cmp r3, r2 + 8000d50: d109 bne.n 8000d66 + handleUARTMessages((uint8_t*)&RX4Msg, &huart4); + 8000d52: 4915 ldr r1, [pc, #84] @ (8000da8 ) + 8000d54: 4815 ldr r0, [pc, #84] @ (8000dac ) + 8000d56: f000 f8bf bl 8000ed8 + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + 8000d5a: 2210 movs r2, #16 + 8000d5c: 4913 ldr r1, [pc, #76] @ (8000dac ) + 8000d5e: 4812 ldr r0, [pc, #72] @ (8000da8 ) + 8000d60: f005 fc4e bl 8006600 +} + 8000d64: e00d b.n 8000d82 + else if (huart->Instance == UART5) { + 8000d66: 687b ldr r3, [r7, #4] + 8000d68: 681b ldr r3, [r3, #0] + 8000d6a: 4a11 ldr r2, [pc, #68] @ (8000db0 ) + 8000d6c: 4293 cmp r3, r2 + 8000d6e: d108 bne.n 8000d82 + handleUARTMessages((uint8_t*)&RX5Msg, &huart5); + 8000d70: 4910 ldr r1, [pc, #64] @ (8000db4 ) + 8000d72: 4811 ldr r0, [pc, #68] @ (8000db8 ) + 8000d74: f000 f8b0 bl 8000ed8 + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + 8000d78: 2210 movs r2, #16 + 8000d7a: 490f ldr r1, [pc, #60] @ (8000db8 ) + 8000d7c: 480d ldr r0, [pc, #52] @ (8000db4 ) + 8000d7e: f005 fc3f bl 8006600 +} + 8000d82: bf00 nop + 8000d84: 3708 adds r7, #8 + 8000d86: 46bd mov sp, r7 + 8000d88: bd80 pop {r7, pc} + 8000d8a: bf00 nop + 8000d8c: 40011000 .word 0x40011000 + 8000d90: 200009f0 .word 0x200009f0 + 8000d94: 20000230 .word 0x20000230 + 8000d98: 40004400 .word 0x40004400 + 8000d9c: 20000a38 .word 0x20000a38 + 8000da0: 20000240 .word 0x20000240 + 8000da4: 40004c00 .word 0x40004c00 + 8000da8: 20000960 .word 0x20000960 + 8000dac: 20000250 .word 0x20000250 + 8000db0: 40005000 .word 0x40005000 + 8000db4: 200009a8 .word 0x200009a8 + 8000db8: 20000220 .word 0x20000220 + +08000dbc : + +void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { + 8000dbc: b580 push {r7, lr} + 8000dbe: b082 sub sp, #8 + 8000dc0: af00 add r7, sp, #0 + 8000dc2: 6078 str r0, [r7, #4] + // Restart DMA on error + if (huart->Instance == USART1) { + 8000dc4: 687b ldr r3, [r7, #4] + 8000dc6: 681b ldr r3, [r3, #0] + 8000dc8: 4a16 ldr r2, [pc, #88] @ (8000e24 ) + 8000dca: 4293 cmp r3, r2 + 8000dcc: d105 bne.n 8000dda + HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage)); + 8000dce: 2210 movs r2, #16 + 8000dd0: 4915 ldr r1, [pc, #84] @ (8000e28 ) + 8000dd2: 4816 ldr r0, [pc, #88] @ (8000e2c ) + 8000dd4: f005 fc14 bl 8006600 + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + } + else if (huart->Instance == UART5) { + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + } +} + 8000dd8: e01f b.n 8000e1a + else if (huart->Instance == USART2) { + 8000dda: 687b ldr r3, [r7, #4] + 8000ddc: 681b ldr r3, [r3, #0] + 8000dde: 4a14 ldr r2, [pc, #80] @ (8000e30 ) + 8000de0: 4293 cmp r3, r2 + 8000de2: d105 bne.n 8000df0 + HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage)); + 8000de4: 2210 movs r2, #16 + 8000de6: 4913 ldr r1, [pc, #76] @ (8000e34 ) + 8000de8: 4813 ldr r0, [pc, #76] @ (8000e38 ) + 8000dea: f005 fc09 bl 8006600 +} + 8000dee: e014 b.n 8000e1a + else if (huart->Instance == UART4) { + 8000df0: 687b ldr r3, [r7, #4] + 8000df2: 681b ldr r3, [r3, #0] + 8000df4: 4a11 ldr r2, [pc, #68] @ (8000e3c ) + 8000df6: 4293 cmp r3, r2 + 8000df8: d105 bne.n 8000e06 + HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage)); + 8000dfa: 2210 movs r2, #16 + 8000dfc: 4910 ldr r1, [pc, #64] @ (8000e40 ) + 8000dfe: 4811 ldr r0, [pc, #68] @ (8000e44 ) + 8000e00: f005 fbfe bl 8006600 +} + 8000e04: e009 b.n 8000e1a + else if (huart->Instance == UART5) { + 8000e06: 687b ldr r3, [r7, #4] + 8000e08: 681b ldr r3, [r3, #0] + 8000e0a: 4a0f ldr r2, [pc, #60] @ (8000e48 ) + 8000e0c: 4293 cmp r3, r2 + 8000e0e: d104 bne.n 8000e1a + HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage)); + 8000e10: 2210 movs r2, #16 + 8000e12: 490e ldr r1, [pc, #56] @ (8000e4c ) + 8000e14: 480e ldr r0, [pc, #56] @ (8000e50 ) + 8000e16: f005 fbf3 bl 8006600 +} + 8000e1a: bf00 nop + 8000e1c: 3708 adds r7, #8 + 8000e1e: 46bd mov sp, r7 + 8000e20: bd80 pop {r7, pc} + 8000e22: bf00 nop + 8000e24: 40011000 .word 0x40011000 + 8000e28: 20000230 .word 0x20000230 + 8000e2c: 200009f0 .word 0x200009f0 + 8000e30: 40004400 .word 0x40004400 + 8000e34: 20000240 .word 0x20000240 + 8000e38: 20000a38 .word 0x20000a38 + 8000e3c: 40004c00 .word 0x40004c00 + 8000e40: 20000250 .word 0x20000250 + 8000e44: 20000960 .word 0x20000960 + 8000e48: 40005000 .word 0x40005000 + 8000e4c: 20000220 .word 0x20000220 + 8000e50: 200009a8 .word 0x200009a8 + +08000e54 : + + + +void findBestParent(){ + 8000e54: b580 push {r7, lr} + 8000e56: b084 sub sp, #16 + 8000e58: af00 add r7, sp, #0 + //Find least depth parent + uint16_t least_val = 0xFF; + 8000e5a: 23ff movs r3, #255 @ 0xff + 8000e5c: 81fb strh r3, [r7, #14] + UART_HandleTypeDef* least_port = NULL; + 8000e5e: 2300 movs r3, #0 + 8000e60: 60bb str r3, [r7, #8] + for(uint8_t i = 0; i < 4; i++){ + 8000e62: 2300 movs r3, #0 + 8000e64: 71fb strb r3, [r7, #7] + 8000e66: e013 b.n 8000e90 + if(PORT_DEPTH[i]) + 8000e6c: f832 3013 ldrh.w r3, [r2, r3, lsl #1] + 8000e70: 89fa ldrh r2, [r7, #14] + 8000e72: 429a cmp r2, r3 + 8000e74: d909 bls.n 8000e8a + least_port = PORTS[i]; + 8000e76: 79fb ldrb r3, [r7, #7] + 8000e78: 4a13 ldr r2, [pc, #76] @ (8000ec8 ) + 8000e7a: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8000e7e: 60bb str r3, [r7, #8] + least_val = PORT_DEPTH[i]; + 8000e80: 79fb ldrb r3, [r7, #7] + 8000e82: 4a10 ldr r2, [pc, #64] @ (8000ec4 ) + 8000e84: f832 3013 ldrh.w r3, [r2, r3, lsl #1] + 8000e88: 81fb strh r3, [r7, #14] + for(uint8_t i = 0; i < 4; i++){ + 8000e8a: 79fb ldrb r3, [r7, #7] + 8000e8c: 3301 adds r3, #1 + 8000e8e: 71fb strb r3, [r7, #7] + 8000e90: 79fb ldrb r3, [r7, #7] + 8000e92: 2b03 cmp r3, #3 + 8000e94: d9e8 bls.n 8000e68 + } + } + + //Assign if valid + if(least_val < 0xFF){ + 8000e96: 89fb ldrh r3, [r7, #14] + 8000e98: 2bfe cmp r3, #254 @ 0xfe + 8000e9a: d80e bhi.n 8000eba + PARENT = least_port; + 8000e9c: 4a0b ldr r2, [pc, #44] @ (8000ecc ) + 8000e9e: 68bb ldr r3, [r7, #8] + 8000ea0: 6013 str r3, [r2, #0] + DEPTH = least_val + 1; + 8000ea2: 89fb ldrh r3, [r7, #14] + 8000ea4: 3301 adds r3, #1 + 8000ea6: b29a uxth r2, r3 + 8000ea8: 4b09 ldr r3, [pc, #36] @ (8000ed0 ) + 8000eaa: 801a strh r2, [r3, #0] + MODE = MODE_ACTIVE; + 8000eac: 4b09 ldr r3, [pc, #36] @ (8000ed4 ) + 8000eae: 2202 movs r2, #2 + 8000eb0: 701a strb r2, [r3, #0] + HAL_Delay(500); + 8000eb2: f44f 70fa mov.w r0, #500 @ 0x1f4 + 8000eb6: f001 f843 bl 8001f40 + } +} + 8000eba: bf00 nop + 8000ebc: 3710 adds r7, #16 + 8000ebe: 46bd mov sp, r7 + 8000ec0: bd80 pop {r7, pc} + 8000ec2: bf00 nop + 8000ec4: 20000078 .word 0x20000078 + 8000ec8: 20000080 .word 0x20000080 + 8000ecc: 20000264 .word 0x20000264 + 8000ed0: 20000260 .word 0x20000260 + 8000ed4: 2000028a .word 0x2000028a + +08000ed8 : + +// Called when UART RX interrupt completes +void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *sender) { + 8000ed8: b590 push {r4, r7, lr} + 8000eda: b08b sub sp, #44 @ 0x2c + 8000edc: af00 add r7, sp, #0 + 8000ede: 6078 str r0, [r7, #4] + 8000ee0: 6039 str r1, [r7, #0] + UARTMessage msg; + UARTMessage reply; + + // Parse incoming message into struct + memcpy(&msg, data, sizeof(UARTMessage)); + 8000ee2: 687b ldr r3, [r7, #4] + 8000ee4: f107 0418 add.w r4, r7, #24 + 8000ee8: 6818 ldr r0, [r3, #0] + 8000eea: 6859 ldr r1, [r3, #4] + 8000eec: 689a ldr r2, [r3, #8] + 8000eee: 68db ldr r3, [r3, #12] + 8000ef0: c40f stmia r4!, {r0, r1, r2, r3} + + switch(msg.TYPE) { + 8000ef2: 8b7b ldrh r3, [r7, #26] + 8000ef4: 2bff cmp r3, #255 @ 0xff + 8000ef6: d026 beq.n 8000f46 + 8000ef8: 2bff cmp r3, #255 @ 0xff + 8000efa: dc6e bgt.n 8000fda + 8000efc: 2baa cmp r3, #170 @ 0xaa + 8000efe: d002 beq.n 8000f06 + 8000f00: 2bee cmp r3, #238 @ 0xee + 8000f02: d03a beq.n 8000f7a + } + + break; + + default: + break; + 8000f04: e069 b.n 8000fda + if(sender == &huart5) { + 8000f06: 683b ldr r3, [r7, #0] + 8000f08: 4a39 ldr r2, [pc, #228] @ (8000ff0 ) + 8000f0a: 4293 cmp r3, r2 + 8000f0c: d103 bne.n 8000f16 + PORT_DEPTH[0] = msg.DEPTH; + 8000f0e: 8b3a ldrh r2, [r7, #24] + 8000f10: 4b38 ldr r3, [pc, #224] @ (8000ff4 ) + 8000f12: 801a strh r2, [r3, #0] + break; + 8000f14: e063 b.n 8000fde + } else if(sender == &huart1) { + 8000f16: 683b ldr r3, [r7, #0] + 8000f18: 4a37 ldr r2, [pc, #220] @ (8000ff8 ) + 8000f1a: 4293 cmp r3, r2 + 8000f1c: d103 bne.n 8000f26 + PORT_DEPTH[1] = msg.DEPTH; + 8000f1e: 8b3a ldrh r2, [r7, #24] + 8000f20: 4b34 ldr r3, [pc, #208] @ (8000ff4 ) + 8000f22: 805a strh r2, [r3, #2] + break; + 8000f24: e05b b.n 8000fde + } else if(sender == &huart2) { + 8000f26: 683b ldr r3, [r7, #0] + 8000f28: 4a34 ldr r2, [pc, #208] @ (8000ffc ) + 8000f2a: 4293 cmp r3, r2 + 8000f2c: d103 bne.n 8000f36 + PORT_DEPTH[2] = msg.DEPTH; + 8000f2e: 8b3a ldrh r2, [r7, #24] + 8000f30: 4b30 ldr r3, [pc, #192] @ (8000ff4 ) + 8000f32: 809a strh r2, [r3, #4] + break; + 8000f34: e053 b.n 8000fde + } else if(sender == &huart4) { + 8000f36: 683b ldr r3, [r7, #0] + 8000f38: 4a31 ldr r2, [pc, #196] @ (8001000 ) + 8000f3a: 4293 cmp r3, r2 + 8000f3c: d14f bne.n 8000fde + PORT_DEPTH[3] = msg.DEPTH; + 8000f3e: 8b3a ldrh r2, [r7, #24] + 8000f40: 4b2c ldr r3, [pc, #176] @ (8000ff4 ) + 8000f42: 80da strh r2, [r3, #6] + break; + 8000f44: e04b b.n 8000fde + if(MODE!=MODE_INACTIVE){ + 8000f46: 4b2f ldr r3, [pc, #188] @ (8001004 ) + 8000f48: 781b ldrb r3, [r3, #0] + 8000f4a: b2db uxtb r3, r3 + 8000f4c: 2b00 cmp r3, #0 + 8000f4e: d048 beq.n 8000fe2 + reply.TYPE = 0xAA; + 8000f50: 23aa movs r3, #170 @ 0xaa + 8000f52: 817b strh r3, [r7, #10] + reply.DEPTH = DEPTH; // use your local DEPTH + 8000f54: 4b2c ldr r3, [pc, #176] @ (8001008 ) + 8000f56: 881b ldrh r3, [r3, #0] + 8000f58: 813b strh r3, [r7, #8] + memset(reply.KEYPRESS, 0, sizeof(reply.KEYPRESS)); + 8000f5a: f107 0308 add.w r3, r7, #8 + 8000f5e: 3304 adds r3, #4 + 8000f60: 220c movs r2, #12 + 8000f62: 2100 movs r1, #0 + 8000f64: 4618 mov r0, r3 + 8000f66: f00a f9f3 bl 800b350 + HAL_UART_Transmit_DMA(sender, (uint8_t*)&reply, sizeof(reply)); + 8000f6a: f107 0308 add.w r3, r7, #8 + 8000f6e: 2210 movs r2, #16 + 8000f70: 4619 mov r1, r3 + 8000f72: 6838 ldr r0, [r7, #0] + 8000f74: f005 fac8 bl 8006508 + break; + 8000f78: e033 b.n 8000fe2 + if(sender == &huart5) { + 8000f7a: 683b ldr r3, [r7, #0] + 8000f7c: 4a1c ldr r2, [pc, #112] @ (8000ff0 ) + 8000f7e: 4293 cmp r3, r2 + 8000f80: d107 bne.n 8000f92 + pq_push(&huart5q, msg.KEYPRESS); + 8000f82: f107 0318 add.w r3, r7, #24 + 8000f86: 3304 adds r3, #4 + 8000f88: 4619 mov r1, r3 + 8000f8a: 4820 ldr r0, [pc, #128] @ (800100c ) + 8000f8c: f7ff fc62 bl 8000854 + break; + 8000f90: e029 b.n 8000fe6 + } else if(sender == &huart1) { + 8000f92: 683b ldr r3, [r7, #0] + 8000f94: 4a18 ldr r2, [pc, #96] @ (8000ff8 ) + 8000f96: 4293 cmp r3, r2 + 8000f98: d107 bne.n 8000faa + pq_push(&huart1q, msg.KEYPRESS); + 8000f9a: f107 0318 add.w r3, r7, #24 + 8000f9e: 3304 adds r3, #4 + 8000fa0: 4619 mov r1, r3 + 8000fa2: 481b ldr r0, [pc, #108] @ (8001010 ) + 8000fa4: f7ff fc56 bl 8000854 + break; + 8000fa8: e01d b.n 8000fe6 + } else if(sender == &huart2) { + 8000faa: 683b ldr r3, [r7, #0] + 8000fac: 4a13 ldr r2, [pc, #76] @ (8000ffc ) + 8000fae: 4293 cmp r3, r2 + 8000fb0: d107 bne.n 8000fc2 + pq_push(&huart2q, msg.KEYPRESS); + 8000fb2: f107 0318 add.w r3, r7, #24 + 8000fb6: 3304 adds r3, #4 + 8000fb8: 4619 mov r1, r3 + 8000fba: 4816 ldr r0, [pc, #88] @ (8001014 ) + 8000fbc: f7ff fc4a bl 8000854 + break; + 8000fc0: e011 b.n 8000fe6 + } else if(sender == &huart4) { + 8000fc2: 683b ldr r3, [r7, #0] + 8000fc4: 4a0e ldr r2, [pc, #56] @ (8001000 ) + 8000fc6: 4293 cmp r3, r2 + 8000fc8: d10d bne.n 8000fe6 + pq_push(&huart4q, msg.KEYPRESS); + 8000fca: f107 0318 add.w r3, r7, #24 + 8000fce: 3304 adds r3, #4 + 8000fd0: 4619 mov r1, r3 + 8000fd2: 4811 ldr r0, [pc, #68] @ (8001018 ) + 8000fd4: f7ff fc3e bl 8000854 + break; + 8000fd8: e005 b.n 8000fe6 + break; + 8000fda: bf00 nop + 8000fdc: e004 b.n 8000fe8 + break; + 8000fde: bf00 nop + 8000fe0: e002 b.n 8000fe8 + break; + 8000fe2: bf00 nop + 8000fe4: e000 b.n 8000fe8 + break; + 8000fe6: bf00 nop + + } +} + 8000fe8: bf00 nop + 8000fea: 372c adds r7, #44 @ 0x2c + 8000fec: 46bd mov sp, r7 + 8000fee: bd90 pop {r4, r7, pc} + 8000ff0: 200009a8 .word 0x200009a8 + 8000ff4: 20000078 .word 0x20000078 + 8000ff8: 200009f0 .word 0x200009f0 + 8000ffc: 20000a38 .word 0x20000a38 + 8001000: 20000960 .word 0x20000960 + 8001004: 2000028a .word 0x2000028a + 8001008: 20000260 .word 0x20000260 + 800100c: 2000074c .word 0x2000074c + 8001010: 200002c0 .word 0x200002c0 + 8001014: 20000444 .word 0x20000444 + 8001018: 200005c8 .word 0x200005c8 + +0800101c : + + +void addUSBReport(uint8_t usageID){ + 800101c: b480 push {r7} + 800101e: b085 sub sp, #20 + 8001020: af00 add r7, sp, #0 + 8001022: 4603 mov r3, r0 + 8001024: 71fb strb r3, [r7, #7] + if(usageID < 0x04 || usageID > 0x73) return; //Usage ID is out of bounds + 8001026: 79fb ldrb r3, [r7, #7] + 8001028: 2b03 cmp r3, #3 + 800102a: d922 bls.n 8001072 + 800102c: 79fb ldrb r3, [r7, #7] + 800102e: 2b73 cmp r3, #115 @ 0x73 + 8001030: d81f bhi.n 8001072 + uint16_t bit_index = usageID - 0x04; //Offset, UsageID starts with 0x04. Gives us the actual value of the bit + 8001032: 79fb ldrb r3, [r7, #7] + 8001034: b29b uxth r3, r3 + 8001036: 3b04 subs r3, #4 + 8001038: 81fb strh r3, [r7, #14] + uint8_t byte_index = bit_index/8; //Calculates which byte in the REPORT array + 800103a: 89fb ldrh r3, [r7, #14] + 800103c: 08db lsrs r3, r3, #3 + 800103e: b29b uxth r3, r3 + 8001040: 737b strb r3, [r7, #13] + uint8_t bit_offset = bit_index%8; //Calculates which bits in the REPORT[byte_index] should be set/unset + 8001042: 89fb ldrh r3, [r7, #14] + 8001044: b2db uxtb r3, r3 + 8001046: f003 0307 and.w r3, r3, #7 + 800104a: 733b strb r3, [r7, #12] + REPORT.KEYPRESS[byte_index] |= (1 << bit_offset); + 800104c: 7b7b ldrb r3, [r7, #13] + 800104e: 4a0c ldr r2, [pc, #48] @ (8001080 ) + 8001050: 4413 add r3, r2 + 8001052: 789b ldrb r3, [r3, #2] + 8001054: b25a sxtb r2, r3 + 8001056: 7b3b ldrb r3, [r7, #12] + 8001058: 2101 movs r1, #1 + 800105a: fa01 f303 lsl.w r3, r1, r3 + 800105e: b25b sxtb r3, r3 + 8001060: 4313 orrs r3, r2 + 8001062: b25a sxtb r2, r3 + 8001064: 7b7b ldrb r3, [r7, #13] + 8001066: b2d1 uxtb r1, r2 + 8001068: 4a05 ldr r2, [pc, #20] @ (8001080 ) + 800106a: 4413 add r3, r2 + 800106c: 460a mov r2, r1 + 800106e: 709a strb r2, [r3, #2] + 8001070: e000 b.n 8001074 + if(usageID < 0x04 || usageID > 0x73) return; //Usage ID is out of bounds + 8001072: bf00 nop +} + 8001074: 3714 adds r7, #20 + 8001076: 46bd mov sp, r7 + 8001078: f85d 7b04 ldr.w r7, [sp], #4 + 800107c: 4770 bx lr + 800107e: bf00 nop + 8001080: 20000210 .word 0x20000210 + +08001084 : + +void matrixScan(void){ + 8001084: b580 push {r7, lr} + 8001086: b082 sub sp, #8 + 8001088: af00 add r7, sp, #0 + + for (uint8_t col = 0; col < COL; col++){ + 800108a: 2300 movs r3, #0 + 800108c: 71fb strb r3, [r7, #7] + 800108e: e05f b.n 8001150 + HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_SET); + 8001090: 79fb ldrb r3, [r7, #7] + 8001092: 4a33 ldr r2, [pc, #204] @ (8001160 ) + 8001094: f852 0033 ldr.w r0, [r2, r3, lsl #3] + 8001098: 79fb ldrb r3, [r7, #7] + 800109a: 4a31 ldr r2, [pc, #196] @ (8001160 ) + 800109c: 00db lsls r3, r3, #3 + 800109e: 4413 add r3, r2 + 80010a0: 889b ldrh r3, [r3, #4] + 80010a2: 2201 movs r2, #1 + 80010a4: 4619 mov r1, r3 + 80010a6: f001 fe2f bl 8002d08 + HAL_Delay(1); + 80010aa: 2001 movs r0, #1 + 80010ac: f000 ff48 bl 8001f40 + for(uint8_t row = 0; row < ROW; row++){ + 80010b0: 2300 movs r3, #0 + 80010b2: 71bb strb r3, [r7, #6] + 80010b4: e039 b.n 800112a + uint8_t new_key = HAL_GPIO_ReadPin(ROW_PINS[row].GPIOx, ROW_PINS[row].PIN); + 80010b6: 79bb ldrb r3, [r7, #6] + 80010b8: 4a2a ldr r2, [pc, #168] @ (8001164 ) + 80010ba: f852 2033 ldr.w r2, [r2, r3, lsl #3] + 80010be: 79bb ldrb r3, [r7, #6] + 80010c0: 4928 ldr r1, [pc, #160] @ (8001164 ) + 80010c2: 00db lsls r3, r3, #3 + 80010c4: 440b add r3, r1 + 80010c6: 889b ldrh r3, [r3, #4] + 80010c8: 4619 mov r1, r3 + 80010ca: 4610 mov r0, r2 + 80010cc: f001 fe04 bl 8002cd8 + 80010d0: 4603 mov r3, r0 + 80010d2: 717b strb r3, [r7, #5] + if(new_key != KEYSTATE[row][col]){ + 80010d4: 79ba ldrb r2, [r7, #6] + 80010d6: 79f9 ldrb r1, [r7, #7] + 80010d8: 4823 ldr r0, [pc, #140] @ (8001168 ) + 80010da: 4613 mov r3, r2 + 80010dc: 009b lsls r3, r3, #2 + 80010de: 4413 add r3, r2 + 80010e0: 4403 add r3, r0 + 80010e2: 440b add r3, r1 + 80010e4: 781b ldrb r3, [r3, #0] + 80010e6: 797a ldrb r2, [r7, #5] + 80010e8: 429a cmp r2, r3 + 80010ea: d00c beq.n 8001106 + KEYSTATE_CHANGED_FLAG = 1; + 80010ec: 4b1f ldr r3, [pc, #124] @ (800116c ) + 80010ee: 2201 movs r2, #1 + 80010f0: 701a strb r2, [r3, #0] + KEYSTATE[row][col] = new_key; + 80010f2: 79ba ldrb r2, [r7, #6] + 80010f4: 79f9 ldrb r1, [r7, #7] + 80010f6: 481c ldr r0, [pc, #112] @ (8001168 ) + 80010f8: 4613 mov r3, r2 + 80010fa: 009b lsls r3, r3, #2 + 80010fc: 4413 add r3, r2 + 80010fe: 4403 add r3, r0 + 8001100: 440b add r3, r1 + 8001102: 797a ldrb r2, [r7, #5] + 8001104: 701a strb r2, [r3, #0] + } + if(new_key){ + 8001106: 797b ldrb r3, [r7, #5] + 8001108: 2b00 cmp r3, #0 + 800110a: d00b beq.n 8001124 + addUSBReport(KEYCODES[row][col]); + 800110c: 79ba ldrb r2, [r7, #6] + 800110e: 79f9 ldrb r1, [r7, #7] + 8001110: 4817 ldr r0, [pc, #92] @ (8001170 ) + 8001112: 4613 mov r3, r2 + 8001114: 009b lsls r3, r3, #2 + 8001116: 4413 add r3, r2 + 8001118: 4403 add r3, r0 + 800111a: 440b add r3, r1 + 800111c: 781b ldrb r3, [r3, #0] + 800111e: 4618 mov r0, r3 + 8001120: f7ff ff7c bl 800101c + for(uint8_t row = 0; row < ROW; row++){ + 8001124: 79bb ldrb r3, [r7, #6] + 8001126: 3301 adds r3, #1 + 8001128: 71bb strb r3, [r7, #6] + 800112a: 79bb ldrb r3, [r7, #6] + 800112c: 2b05 cmp r3, #5 + 800112e: d9c2 bls.n 80010b6 + } + } + HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_RESET); + 8001130: 79fb ldrb r3, [r7, #7] + 8001132: 4a0b ldr r2, [pc, #44] @ (8001160 ) + 8001134: f852 0033 ldr.w r0, [r2, r3, lsl #3] + 8001138: 79fb ldrb r3, [r7, #7] + 800113a: 4a09 ldr r2, [pc, #36] @ (8001160 ) + 800113c: 00db lsls r3, r3, #3 + 800113e: 4413 add r3, r2 + 8001140: 889b ldrh r3, [r3, #4] + 8001142: 2200 movs r2, #0 + 8001144: 4619 mov r1, r3 + 8001146: f001 fddf bl 8002d08 + for (uint8_t col = 0; col < COL; col++){ + 800114a: 79fb ldrb r3, [r7, #7] + 800114c: 3301 adds r3, #1 + 800114e: 71fb strb r3, [r7, #7] + 8001150: 79fb ldrb r3, [r7, #7] + 8001152: 2b04 cmp r3, #4 + 8001154: d99c bls.n 8001090 + } + +} + 8001156: bf00 nop + 8001158: bf00 nop + 800115a: 3708 adds r7, #8 + 800115c: 46bd mov sp, r7 + 800115e: bd80 pop {r7, pc} + 8001160: 20000030 .word 0x20000030 + 8001164: 20000000 .word 0x20000000 + 8001168: 2000026c .word 0x2000026c + 800116c: 20000268 .word 0x20000268 + 8001170: 20000058 .word 0x20000058 + +08001174 : + + +// Read TIM3 encoder counter, calculate delta and add corresponding keycodes +void encoderProcess(void){ + 8001174: b580 push {r7, lr} + 8001176: b086 sub sp, #24 + 8001178: af00 add r7, sp, #0 + int32_t cnt = (int32_t)__HAL_TIM_GET_COUNTER(&htim3); + 800117a: 4b2a ldr r3, [pc, #168] @ (8001224 ) + 800117c: 681b ldr r3, [r3, #0] + 800117e: 6a5b ldr r3, [r3, #36] @ 0x24 + 8001180: 603b str r3, [r7, #0] + int32_t diff = cnt - LAST_ENCODER_COUNT; + 8001182: 4b29 ldr r3, [pc, #164] @ (8001228 ) + 8001184: 681b ldr r3, [r3, #0] + 8001186: 683a ldr r2, [r7, #0] + 8001188: 1ad3 subs r3, r2, r3 + 800118a: 617b str r3, [r7, #20] + // TIM3 configured as 16-bit counter (period 65535). Fix wrap-around. + if(diff > 32767) diff -= 65536; + 800118c: 697b ldr r3, [r7, #20] + 800118e: f5b3 4f00 cmp.w r3, #32768 @ 0x8000 + 8001192: db03 blt.n 800119c + 8001194: 697b ldr r3, [r7, #20] + 8001196: f5a3 3380 sub.w r3, r3, #65536 @ 0x10000 + 800119a: 617b str r3, [r7, #20] + if(diff < -32768) diff += 65536; + 800119c: 697b ldr r3, [r7, #20] + 800119e: f513 4f00 cmn.w r3, #32768 @ 0x8000 + 80011a2: da03 bge.n 80011ac + 80011a4: 697b ldr r3, [r7, #20] + 80011a6: f503 3380 add.w r3, r3, #65536 @ 0x10000 + 80011aa: 617b str r3, [r7, #20] + if(diff > 0){ + 80011ac: 697b ldr r3, [r7, #20] + 80011ae: 2b00 cmp r3, #0 + 80011b0: dd16 ble.n 80011e0 + int steps = diff; + 80011b2: 697b ldr r3, [r7, #20] + 80011b4: 613b str r3, [r7, #16] + if(steps > 10) steps = 10; // cap bursts + 80011b6: 693b ldr r3, [r7, #16] + 80011b8: 2b0a cmp r3, #10 + 80011ba: dd01 ble.n 80011c0 + 80011bc: 230a movs r3, #10 + 80011be: 613b str r3, [r7, #16] + for(int i = 0; i < steps; i++){ + 80011c0: 2300 movs r3, #0 + 80011c2: 60fb str r3, [r7, #12] + 80011c4: e007 b.n 80011d6 + // CW -> KEYCODES[0][0] + addUSBReport(KEYCODES[3][3]); + 80011c6: 4b19 ldr r3, [pc, #100] @ (800122c ) + 80011c8: 7c9b ldrb r3, [r3, #18] + 80011ca: 4618 mov r0, r3 + 80011cc: f7ff ff26 bl 800101c + for(int i = 0; i < steps; i++){ + 80011d0: 68fb ldr r3, [r7, #12] + 80011d2: 3301 adds r3, #1 + 80011d4: 60fb str r3, [r7, #12] + 80011d6: 68fa ldr r2, [r7, #12] + 80011d8: 693b ldr r3, [r7, #16] + 80011da: 429a cmp r2, r3 + 80011dc: dbf3 blt.n 80011c6 + 80011de: e019 b.n 8001214 + } + }else if(diff < 0){ + 80011e0: 697b ldr r3, [r7, #20] + 80011e2: 2b00 cmp r3, #0 + 80011e4: da16 bge.n 8001214 + int steps = -diff; + 80011e6: 697b ldr r3, [r7, #20] + 80011e8: 425b negs r3, r3 + 80011ea: 60bb str r3, [r7, #8] + if(steps > 10) steps = 10; + 80011ec: 68bb ldr r3, [r7, #8] + 80011ee: 2b0a cmp r3, #10 + 80011f0: dd01 ble.n 80011f6 + 80011f2: 230a movs r3, #10 + 80011f4: 60bb str r3, [r7, #8] + for(int i = 0; i < steps; i++){ + 80011f6: 2300 movs r3, #0 + 80011f8: 607b str r3, [r7, #4] + 80011fa: e007 b.n 800120c + // CCW -> KEYCODES[0][1] + addUSBReport(KEYCODES[2][1]); + 80011fc: 4b0b ldr r3, [pc, #44] @ (800122c ) + 80011fe: 7adb ldrb r3, [r3, #11] + 8001200: 4618 mov r0, r3 + 8001202: f7ff ff0b bl 800101c + for(int i = 0; i < steps; i++){ + 8001206: 687b ldr r3, [r7, #4] + 8001208: 3301 adds r3, #1 + 800120a: 607b str r3, [r7, #4] + 800120c: 687a ldr r2, [r7, #4] + 800120e: 68bb ldr r3, [r7, #8] + 8001210: 429a cmp r2, r3 + 8001212: dbf3 blt.n 80011fc + } + } + LAST_ENCODER_COUNT = cnt; + 8001214: 4a04 ldr r2, [pc, #16] @ (8001228 ) + 8001216: 683b ldr r3, [r7, #0] + 8001218: 6013 str r3, [r2, #0] +} + 800121a: bf00 nop + 800121c: 3718 adds r7, #24 + 800121e: 46bd mov sp, r7 + 8001220: bd80 pop {r7, pc} + 8001222: bf00 nop + 8001224: 20000918 .word 0x20000918 + 8001228: 2000028c .word 0x2000028c + 800122c: 20000058 .word 0x20000058 + +08001230 : + +void resetReport(void){ + 8001230: b580 push {r7, lr} + 8001232: af00 add r7, sp, #0 + memset(REPORT.KEYPRESS, 0, sizeof(REPORT.KEYPRESS)); + 8001234: 220c movs r2, #12 + 8001236: 2100 movs r1, #0 + 8001238: 4802 ldr r0, [pc, #8] @ (8001244 ) + 800123a: f00a f889 bl 800b350 +} + 800123e: bf00 nop + 8001240: bd80 pop {r7, pc} + 8001242: bf00 nop + 8001244: 20000212 .word 0x20000212 + +08001248 : +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + 8001248: b480 push {r7} + 800124a: af00 add r7, sp, #0 + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); + 800124c: b672 cpsid i +} + 800124e: bf00 nop + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + 8001250: bf00 nop + 8001252: e7fd b.n 8001250 + +08001254 : +#include "pwm.h" +#include "tim.h" + +void MX_PWM_Init(void){ + 8001254: b580 push {r7, lr} + 8001256: b088 sub sp, #32 + 8001258: af00 add r7, sp, #0 + TIM_OC_InitTypeDef sConfigOC = {0}; + 800125a: 1d3b adds r3, r7, #4 + 800125c: 2200 movs r2, #0 + 800125e: 601a str r2, [r3, #0] + 8001260: 605a str r2, [r3, #4] + 8001262: 609a str r2, [r3, #8] + 8001264: 60da str r2, [r3, #12] + 8001266: 611a str r2, [r3, #16] + 8001268: 615a str r2, [r3, #20] + 800126a: 619a str r2, [r3, #24] + + // Initialize TIM2 for PWM (safe to call even if TIM2 was previously initialized for OC) + if (HAL_TIM_PWM_Init(&htim2) != HAL_OK){ + 800126c: 480f ldr r0, [pc, #60] @ (80012ac ) + 800126e: f004 fa90 bl 8005792 + 8001272: 4603 mov r3, r0 + 8001274: 2b00 cmp r3, #0 + 8001276: d001 beq.n 800127c + Error_Handler(); + 8001278: f7ff ffe6 bl 8001248 + } + + sConfigOC.OCMode = TIM_OCMODE_PWM1; + 800127c: 2360 movs r3, #96 @ 0x60 + 800127e: 607b str r3, [r7, #4] + sConfigOC.Pulse = 0; + 8001280: 2300 movs r3, #0 + 8001282: 60bb str r3, [r7, #8] + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 8001284: 2300 movs r3, #0 + 8001286: 60fb str r3, [r7, #12] + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 8001288: 2300 movs r3, #0 + 800128a: 617b str r3, [r7, #20] + if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){ + 800128c: 1d3b adds r3, r7, #4 + 800128e: 2200 movs r2, #0 + 8001290: 4619 mov r1, r3 + 8001292: 4806 ldr r0, [pc, #24] @ (80012ac ) + 8001294: f004 fd2e bl 8005cf4 + 8001298: 4603 mov r3, r0 + 800129a: 2b00 cmp r3, #0 + 800129c: d001 beq.n 80012a2 + Error_Handler(); + 800129e: f7ff ffd3 bl 8001248 + } +} + 80012a2: bf00 nop + 80012a4: 3720 adds r7, #32 + 80012a6: 46bd mov sp, r7 + 80012a8: bd80 pop {r7, pc} + 80012aa: bf00 nop + 80012ac: 200008d0 .word 0x200008d0 + +080012b0 : + +void PWM_Start(void){ + 80012b0: b580 push {r7, lr} + 80012b2: af00 add r7, sp, #0 + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); + 80012b4: 2100 movs r1, #0 + 80012b6: 4802 ldr r0, [pc, #8] @ (80012c0 ) + 80012b8: f004 fac4 bl 8005844 +} + 80012bc: bf00 nop + 80012be: bd80 pop {r7, pc} + 80012c0: 200008d0 .word 0x200008d0 + +080012c4 : +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + 80012c4: b480 push {r7} + 80012c6: b083 sub sp, #12 + 80012c8: af00 add r7, sp, #0 + + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 80012ca: 2300 movs r3, #0 + 80012cc: 607b str r3, [r7, #4] + 80012ce: 4b10 ldr r3, [pc, #64] @ (8001310 ) + 80012d0: 6c5b ldr r3, [r3, #68] @ 0x44 + 80012d2: 4a0f ldr r2, [pc, #60] @ (8001310 ) + 80012d4: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 80012d8: 6453 str r3, [r2, #68] @ 0x44 + 80012da: 4b0d ldr r3, [pc, #52] @ (8001310 ) + 80012dc: 6c5b ldr r3, [r3, #68] @ 0x44 + 80012de: f403 4380 and.w r3, r3, #16384 @ 0x4000 + 80012e2: 607b str r3, [r7, #4] + 80012e4: 687b ldr r3, [r7, #4] + __HAL_RCC_PWR_CLK_ENABLE(); + 80012e6: 2300 movs r3, #0 + 80012e8: 603b str r3, [r7, #0] + 80012ea: 4b09 ldr r3, [pc, #36] @ (8001310 ) + 80012ec: 6c1b ldr r3, [r3, #64] @ 0x40 + 80012ee: 4a08 ldr r2, [pc, #32] @ (8001310 ) + 80012f0: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 80012f4: 6413 str r3, [r2, #64] @ 0x40 + 80012f6: 4b06 ldr r3, [pc, #24] @ (8001310 ) + 80012f8: 6c1b ldr r3, [r3, #64] @ 0x40 + 80012fa: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 80012fe: 603b str r3, [r7, #0] + 8001300: 683b ldr r3, [r7, #0] + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + 8001302: bf00 nop + 8001304: 370c adds r7, #12 + 8001306: 46bd mov sp, r7 + 8001308: f85d 7b04 ldr.w r7, [sp], #4 + 800130c: 4770 bx lr + 800130e: bf00 nop + 8001310: 40023800 .word 0x40023800 + +08001314 : +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + 8001314: b480 push {r7} + 8001316: af00 add r7, sp, #0 + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + 8001318: bf00 nop + 800131a: e7fd b.n 8001318 + +0800131c : + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + 800131c: b480 push {r7} + 800131e: af00 add r7, sp, #0 + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + 8001320: bf00 nop + 8001322: e7fd b.n 8001320 + +08001324 : + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + 8001324: b480 push {r7} + 8001326: af00 add r7, sp, #0 + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + 8001328: bf00 nop + 800132a: e7fd b.n 8001328 + +0800132c : + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + 800132c: b480 push {r7} + 800132e: af00 add r7, sp, #0 + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + 8001330: bf00 nop + 8001332: e7fd b.n 8001330 + +08001334 : + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + 8001334: b480 push {r7} + 8001336: af00 add r7, sp, #0 + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + 8001338: bf00 nop + 800133a: e7fd b.n 8001338 + +0800133c : + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + 800133c: b480 push {r7} + 800133e: af00 add r7, sp, #0 + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + 8001340: bf00 nop + 8001342: 46bd mov sp, r7 + 8001344: f85d 7b04 ldr.w r7, [sp], #4 + 8001348: 4770 bx lr + +0800134a : + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + 800134a: b480 push {r7} + 800134c: af00 add r7, sp, #0 + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + 800134e: bf00 nop + 8001350: 46bd mov sp, r7 + 8001352: f85d 7b04 ldr.w r7, [sp], #4 + 8001356: 4770 bx lr + +08001358 : + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + 8001358: b480 push {r7} + 800135a: af00 add r7, sp, #0 + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + 800135c: bf00 nop + 800135e: 46bd mov sp, r7 + 8001360: f85d 7b04 ldr.w r7, [sp], #4 + 8001364: 4770 bx lr + +08001366 : + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + 8001366: b580 push {r7, lr} + 8001368: af00 add r7, sp, #0 + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + 800136a: f000 fdc9 bl 8001f00 + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + 800136e: bf00 nop + 8001370: bd80 pop {r7, pc} + ... + +08001374 : + +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + 8001374: b580 push {r7, lr} + 8001376: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_rx); + 8001378: 4802 ldr r0, [pc, #8] @ (8001384 ) + 800137a: f001 f8af bl 80024dc + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + 800137e: bf00 nop + 8001380: bd80 pop {r7, pc} + 8001382: bf00 nop + 8001384: 20000b40 .word 0x20000b40 + +08001388 : + +/** + * @brief This function handles DMA1 stream2 global interrupt. + */ +void DMA1_Stream2_IRQHandler(void) +{ + 8001388: b580 push {r7, lr} + 800138a: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ + + /* USER CODE END DMA1_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_rx); + 800138c: 4802 ldr r0, [pc, #8] @ (8001398 ) + 800138e: f001 f8a5 bl 80024dc + /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ + + /* USER CODE END DMA1_Stream2_IRQn 1 */ +} + 8001392: bf00 nop + 8001394: bd80 pop {r7, pc} + 8001396: bf00 nop + 8001398: 20000a80 .word 0x20000a80 + +0800139c : + +/** + * @brief This function handles DMA1 stream4 global interrupt. + */ +void DMA1_Stream4_IRQHandler(void) +{ + 800139c: b580 push {r7, lr} + 800139e: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ + + /* USER CODE END DMA1_Stream4_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_tx); + 80013a0: 4802 ldr r0, [pc, #8] @ (80013ac ) + 80013a2: f001 f89b bl 80024dc + /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ + + /* USER CODE END DMA1_Stream4_IRQn 1 */ +} + 80013a6: bf00 nop + 80013a8: bd80 pop {r7, pc} + 80013aa: bf00 nop + 80013ac: 20000ae0 .word 0x20000ae0 + +080013b0 : + +/** + * @brief This function handles DMA1 stream5 global interrupt. + */ +void DMA1_Stream5_IRQHandler(void) +{ + 80013b0: b580 push {r7, lr} + 80013b2: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ + + /* USER CODE END DMA1_Stream5_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_rx); + 80013b4: 4802 ldr r0, [pc, #8] @ (80013c0 ) + 80013b6: f001 f891 bl 80024dc + /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ + + /* USER CODE END DMA1_Stream5_IRQn 1 */ +} + 80013ba: bf00 nop + 80013bc: bd80 pop {r7, pc} + 80013be: bf00 nop + 80013c0: 20000cc0 .word 0x20000cc0 + +080013c4 : + +/** + * @brief This function handles DMA1 stream6 global interrupt. + */ +void DMA1_Stream6_IRQHandler(void) +{ + 80013c4: b580 push {r7, lr} + 80013c6: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ + + /* USER CODE END DMA1_Stream6_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_tx); + 80013c8: 4802 ldr r0, [pc, #8] @ (80013d4 ) + 80013ca: f001 f887 bl 80024dc + /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ + + /* USER CODE END DMA1_Stream6_IRQn 1 */ +} + 80013ce: bf00 nop + 80013d0: bd80 pop {r7, pc} + 80013d2: bf00 nop + 80013d4: 20000d20 .word 0x20000d20 + +080013d8 : + +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + 80013d8: b580 push {r7, lr} + 80013da: af00 add r7, sp, #0 + /* USER CODE BEGIN USART1_IRQn 0 */ + + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + 80013dc: 4802 ldr r0, [pc, #8] @ (80013e8 ) + 80013de: f005 f935 bl 800664c + /* USER CODE BEGIN USART1_IRQn 1 */ + + /* USER CODE END USART1_IRQn 1 */ +} + 80013e2: bf00 nop + 80013e4: bd80 pop {r7, pc} + 80013e6: bf00 nop + 80013e8: 200009f0 .word 0x200009f0 + +080013ec : + +/** + * @brief This function handles USART2 global interrupt. + */ +void USART2_IRQHandler(void) +{ + 80013ec: b580 push {r7, lr} + 80013ee: af00 add r7, sp, #0 + /* USER CODE BEGIN USART2_IRQn 0 */ + + /* USER CODE END USART2_IRQn 0 */ + HAL_UART_IRQHandler(&huart2); + 80013f0: 4802 ldr r0, [pc, #8] @ (80013fc ) + 80013f2: f005 f92b bl 800664c + /* USER CODE BEGIN USART2_IRQn 1 */ + + /* USER CODE END USART2_IRQn 1 */ +} + 80013f6: bf00 nop + 80013f8: bd80 pop {r7, pc} + 80013fa: bf00 nop + 80013fc: 20000a38 .word 0x20000a38 + +08001400 : + +/** + * @brief This function handles DMA1 stream7 global interrupt. + */ +void DMA1_Stream7_IRQHandler(void) +{ + 8001400: b580 push {r7, lr} + 8001402: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA1_Stream7_IRQn 0 */ + + /* USER CODE END DMA1_Stream7_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_tx); + 8001404: 4802 ldr r0, [pc, #8] @ (8001410 ) + 8001406: f001 f869 bl 80024dc + /* USER CODE BEGIN DMA1_Stream7_IRQn 1 */ + + /* USER CODE END DMA1_Stream7_IRQn 1 */ +} + 800140a: bf00 nop + 800140c: bd80 pop {r7, pc} + 800140e: bf00 nop + 8001410: 20000ba0 .word 0x20000ba0 + +08001414 : + +/** + * @brief This function handles UART4 global interrupt. + */ +void UART4_IRQHandler(void) +{ + 8001414: b580 push {r7, lr} + 8001416: af00 add r7, sp, #0 + /* USER CODE BEGIN UART4_IRQn 0 */ + + /* USER CODE END UART4_IRQn 0 */ + HAL_UART_IRQHandler(&huart4); + 8001418: 4802 ldr r0, [pc, #8] @ (8001424 ) + 800141a: f005 f917 bl 800664c + /* USER CODE BEGIN UART4_IRQn 1 */ + + /* USER CODE END UART4_IRQn 1 */ +} + 800141e: bf00 nop + 8001420: bd80 pop {r7, pc} + 8001422: bf00 nop + 8001424: 20000960 .word 0x20000960 + +08001428 : + +/** + * @brief This function handles UART5 global interrupt. + */ +void UART5_IRQHandler(void) +{ + 8001428: b580 push {r7, lr} + 800142a: af00 add r7, sp, #0 + /* USER CODE BEGIN UART5_IRQn 0 */ + + /* USER CODE END UART5_IRQn 0 */ + HAL_UART_IRQHandler(&huart5); + 800142c: 4802 ldr r0, [pc, #8] @ (8001438 ) + 800142e: f005 f90d bl 800664c + /* USER CODE BEGIN UART5_IRQn 1 */ + + /* USER CODE END UART5_IRQn 1 */ +} + 8001432: bf00 nop + 8001434: bd80 pop {r7, pc} + 8001436: bf00 nop + 8001438: 200009a8 .word 0x200009a8 + +0800143c : + +/** + * @brief This function handles DMA2 stream2 global interrupt. + */ +void DMA2_Stream2_IRQHandler(void) +{ + 800143c: b580 push {r7, lr} + 800143e: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */ + + /* USER CODE END DMA2_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_rx); + 8001440: 4802 ldr r0, [pc, #8] @ (800144c ) + 8001442: f001 f84b bl 80024dc + /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */ + + /* USER CODE END DMA2_Stream2_IRQn 1 */ +} + 8001446: bf00 nop + 8001448: bd80 pop {r7, pc} + 800144a: bf00 nop + 800144c: 20000c00 .word 0x20000c00 + +08001450 : + +/** + * @brief This function handles USB On The Go FS global interrupt. + */ +void OTG_FS_IRQHandler(void) +{ + 8001450: b580 push {r7, lr} + 8001452: af00 add r7, sp, #0 + /* USER CODE BEGIN OTG_FS_IRQn 0 */ + + /* USER CODE END OTG_FS_IRQn 0 */ + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + 8001454: 4802 ldr r0, [pc, #8] @ (8001460 ) + 8001456: f001 ff00 bl 800325a + /* USER CODE BEGIN OTG_FS_IRQn 1 */ + + /* USER CODE END OTG_FS_IRQn 1 */ +} + 800145a: bf00 nop + 800145c: bd80 pop {r7, pc} + 800145e: bf00 nop + 8001460: 20001264 .word 0x20001264 + +08001464 : + +/** + * @brief This function handles DMA2 stream7 global interrupt. + */ +void DMA2_Stream7_IRQHandler(void) +{ + 8001464: b580 push {r7, lr} + 8001466: af00 add r7, sp, #0 + /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */ + + /* USER CODE END DMA2_Stream7_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_tx); + 8001468: 4802 ldr r0, [pc, #8] @ (8001474 ) + 800146a: f001 f837 bl 80024dc + /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */ + + /* USER CODE END DMA2_Stream7_IRQn 1 */ +} + 800146e: bf00 nop + 8001470: bd80 pop {r7, pc} + 8001472: bf00 nop + 8001474: 20000c60 .word 0x20000c60 + +08001478 : + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + 8001478: b480 push {r7} + 800147a: af00 add r7, sp, #0 + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + 800147c: 4b06 ldr r3, [pc, #24] @ (8001498 ) + 800147e: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88 + 8001482: 4a05 ldr r2, [pc, #20] @ (8001498 ) + 8001484: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000 + 8001488: f8c2 3088 str.w r3, [r2, #136] @ 0x88 + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + 800148c: bf00 nop + 800148e: 46bd mov sp, r7 + 8001490: f85d 7b04 ldr.w r7, [sp], #4 + 8001494: 4770 bx lr + 8001496: bf00 nop + 8001498: e000ed00 .word 0xe000ed00 + +0800149c : +TIM_HandleTypeDef htim2; +TIM_HandleTypeDef htim3; + +/* TIM2 init function */ +void MX_TIM2_Init(void) +{ + 800149c: b580 push {r7, lr} + 800149e: b08a sub sp, #40 @ 0x28 + 80014a0: af00 add r7, sp, #0 + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 80014a2: f107 0320 add.w r3, r7, #32 + 80014a6: 2200 movs r2, #0 + 80014a8: 601a str r2, [r3, #0] + 80014aa: 605a str r2, [r3, #4] + TIM_OC_InitTypeDef sConfigOC = {0}; + 80014ac: 1d3b adds r3, r7, #4 + 80014ae: 2200 movs r2, #0 + 80014b0: 601a str r2, [r3, #0] + 80014b2: 605a str r2, [r3, #4] + 80014b4: 609a str r2, [r3, #8] + 80014b6: 60da str r2, [r3, #12] + 80014b8: 611a str r2, [r3, #16] + 80014ba: 615a str r2, [r3, #20] + 80014bc: 619a str r2, [r3, #24] + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + 80014be: 4b22 ldr r3, [pc, #136] @ (8001548 ) + 80014c0: f04f 4280 mov.w r2, #1073741824 @ 0x40000000 + 80014c4: 601a str r2, [r3, #0] + htim2.Init.Prescaler = 0; + 80014c6: 4b20 ldr r3, [pc, #128] @ (8001548 ) + 80014c8: 2200 movs r2, #0 + 80014ca: 605a str r2, [r3, #4] + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + 80014cc: 4b1e ldr r3, [pc, #120] @ (8001548 ) + 80014ce: 2200 movs r2, #0 + 80014d0: 609a str r2, [r3, #8] + htim2.Init.Period = 4294967295; + 80014d2: 4b1d ldr r3, [pc, #116] @ (8001548 ) + 80014d4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 80014d8: 60da str r2, [r3, #12] + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 80014da: 4b1b ldr r3, [pc, #108] @ (8001548 ) + 80014dc: 2200 movs r2, #0 + 80014de: 611a str r2, [r3, #16] + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 80014e0: 4b19 ldr r3, [pc, #100] @ (8001548 ) + 80014e2: 2200 movs r2, #0 + 80014e4: 619a str r2, [r3, #24] + if (HAL_TIM_OC_Init(&htim2) != HAL_OK) + 80014e6: 4818 ldr r0, [pc, #96] @ (8001548 ) + 80014e8: f004 f904 bl 80056f4 + 80014ec: 4603 mov r3, r0 + 80014ee: 2b00 cmp r3, #0 + 80014f0: d001 beq.n 80014f6 + { + Error_Handler(); + 80014f2: f7ff fea9 bl 8001248 + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + 80014f6: 2300 movs r3, #0 + 80014f8: 623b str r3, [r7, #32] + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 80014fa: 2300 movs r3, #0 + 80014fc: 627b str r3, [r7, #36] @ 0x24 + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + 80014fe: f107 0320 add.w r3, r7, #32 + 8001502: 4619 mov r1, r3 + 8001504: 4810 ldr r0, [pc, #64] @ (8001548 ) + 8001506: f004 ff33 bl 8006370 + 800150a: 4603 mov r3, r0 + 800150c: 2b00 cmp r3, #0 + 800150e: d001 beq.n 8001514 + { + Error_Handler(); + 8001510: f7ff fe9a bl 8001248 + } + sConfigOC.OCMode = TIM_OCMODE_FORCED_ACTIVE; + 8001514: 2350 movs r3, #80 @ 0x50 + 8001516: 607b str r3, [r7, #4] + sConfigOC.Pulse = 0; + 8001518: 2300 movs r3, #0 + 800151a: 60bb str r3, [r7, #8] + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 800151c: 2300 movs r3, #0 + 800151e: 60fb str r3, [r7, #12] + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 8001520: 2300 movs r3, #0 + 8001522: 617b str r3, [r7, #20] + if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 8001524: 1d3b adds r3, r7, #4 + 8001526: 2200 movs r2, #0 + 8001528: 4619 mov r1, r3 + 800152a: 4807 ldr r0, [pc, #28] @ (8001548 ) + 800152c: f004 fb86 bl 8005c3c + 8001530: 4603 mov r3, r0 + 8001532: 2b00 cmp r3, #0 + 8001534: d001 beq.n 800153a + { + Error_Handler(); + 8001536: f7ff fe87 bl 8001248 + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + HAL_TIM_MspPostInit(&htim2); + 800153a: 4803 ldr r0, [pc, #12] @ (8001548 ) + 800153c: f000 f8c2 bl 80016c4 + +} + 8001540: bf00 nop + 8001542: 3728 adds r7, #40 @ 0x28 + 8001544: 46bd mov sp, r7 + 8001546: bd80 pop {r7, pc} + 8001548: 200008d0 .word 0x200008d0 + +0800154c : +/* TIM3 init function */ +void MX_TIM3_Init(void) +{ + 800154c: b580 push {r7, lr} + 800154e: b08c sub sp, #48 @ 0x30 + 8001550: af00 add r7, sp, #0 + + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_Encoder_InitTypeDef sConfig = {0}; + 8001552: f107 030c add.w r3, r7, #12 + 8001556: 2224 movs r2, #36 @ 0x24 + 8001558: 2100 movs r1, #0 + 800155a: 4618 mov r0, r3 + 800155c: f009 fef8 bl 800b350 + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 8001560: 1d3b adds r3, r7, #4 + 8001562: 2200 movs r2, #0 + 8001564: 601a str r2, [r3, #0] + 8001566: 605a str r2, [r3, #4] + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + 8001568: 4b20 ldr r3, [pc, #128] @ (80015ec ) + 800156a: 4a21 ldr r2, [pc, #132] @ (80015f0 ) + 800156c: 601a str r2, [r3, #0] + htim3.Init.Prescaler = 0; + 800156e: 4b1f ldr r3, [pc, #124] @ (80015ec ) + 8001570: 2200 movs r2, #0 + 8001572: 605a str r2, [r3, #4] + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + 8001574: 4b1d ldr r3, [pc, #116] @ (80015ec ) + 8001576: 2200 movs r2, #0 + 8001578: 609a str r2, [r3, #8] + htim3.Init.Period = 65535; + 800157a: 4b1c ldr r3, [pc, #112] @ (80015ec ) + 800157c: f64f 72ff movw r2, #65535 @ 0xffff + 8001580: 60da str r2, [r3, #12] + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 8001582: 4b1a ldr r3, [pc, #104] @ (80015ec ) + 8001584: 2200 movs r2, #0 + 8001586: 611a str r2, [r3, #16] + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 8001588: 4b18 ldr r3, [pc, #96] @ (80015ec ) + 800158a: 2200 movs r2, #0 + 800158c: 619a str r2, [r3, #24] + sConfig.EncoderMode = TIM_ENCODERMODE_TI1; + 800158e: 2301 movs r3, #1 + 8001590: 60fb str r3, [r7, #12] + sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; + 8001592: 2300 movs r3, #0 + 8001594: 613b str r3, [r7, #16] + sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; + 8001596: 2301 movs r3, #1 + 8001598: 617b str r3, [r7, #20] + sConfig.IC1Prescaler = TIM_ICPSC_DIV1; + 800159a: 2300 movs r3, #0 + 800159c: 61bb str r3, [r7, #24] + sConfig.IC1Filter = 0; + 800159e: 2300 movs r3, #0 + 80015a0: 61fb str r3, [r7, #28] + sConfig.IC2Polarity = TIM_ICPOLARITY_RISING; + 80015a2: 2300 movs r3, #0 + 80015a4: 623b str r3, [r7, #32] + sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; + 80015a6: 2301 movs r3, #1 + 80015a8: 627b str r3, [r7, #36] @ 0x24 + sConfig.IC2Prescaler = TIM_ICPSC_DIV1; + 80015aa: 2300 movs r3, #0 + 80015ac: 62bb str r3, [r7, #40] @ 0x28 + sConfig.IC2Filter = 0; + 80015ae: 2300 movs r3, #0 + 80015b0: 62fb str r3, [r7, #44] @ 0x2c + if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK) + 80015b2: f107 030c add.w r3, r7, #12 + 80015b6: 4619 mov r1, r3 + 80015b8: 480c ldr r0, [pc, #48] @ (80015ec ) + 80015ba: f004 fa0b bl 80059d4 + 80015be: 4603 mov r3, r0 + 80015c0: 2b00 cmp r3, #0 + 80015c2: d001 beq.n 80015c8 + { + Error_Handler(); + 80015c4: f7ff fe40 bl 8001248 + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + 80015c8: 2300 movs r3, #0 + 80015ca: 607b str r3, [r7, #4] + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 80015cc: 2300 movs r3, #0 + 80015ce: 60bb str r3, [r7, #8] + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + 80015d0: 1d3b adds r3, r7, #4 + 80015d2: 4619 mov r1, r3 + 80015d4: 4805 ldr r0, [pc, #20] @ (80015ec ) + 80015d6: f004 fecb bl 8006370 + 80015da: 4603 mov r3, r0 + 80015dc: 2b00 cmp r3, #0 + 80015de: d001 beq.n 80015e4 + { + Error_Handler(); + 80015e0: f7ff fe32 bl 8001248 + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + +} + 80015e4: bf00 nop + 80015e6: 3730 adds r7, #48 @ 0x30 + 80015e8: 46bd mov sp, r7 + 80015ea: bd80 pop {r7, pc} + 80015ec: 20000918 .word 0x20000918 + 80015f0: 40000400 .word 0x40000400 + +080015f4 : + +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* tim_ocHandle) +{ + 80015f4: b480 push {r7} + 80015f6: b085 sub sp, #20 + 80015f8: af00 add r7, sp, #0 + 80015fa: 6078 str r0, [r7, #4] + + if(tim_ocHandle->Instance==TIM2) + 80015fc: 687b ldr r3, [r7, #4] + 80015fe: 681b ldr r3, [r3, #0] + 8001600: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8001604: d10d bne.n 8001622 + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* TIM2 clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + 8001606: 2300 movs r3, #0 + 8001608: 60fb str r3, [r7, #12] + 800160a: 4b09 ldr r3, [pc, #36] @ (8001630 ) + 800160c: 6c1b ldr r3, [r3, #64] @ 0x40 + 800160e: 4a08 ldr r2, [pc, #32] @ (8001630 ) + 8001610: f043 0301 orr.w r3, r3, #1 + 8001614: 6413 str r3, [r2, #64] @ 0x40 + 8001616: 4b06 ldr r3, [pc, #24] @ (8001630 ) + 8001618: 6c1b ldr r3, [r3, #64] @ 0x40 + 800161a: f003 0301 and.w r3, r3, #1 + 800161e: 60fb str r3, [r7, #12] + 8001620: 68fb ldr r3, [r7, #12] + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } +} + 8001622: bf00 nop + 8001624: 3714 adds r7, #20 + 8001626: 46bd mov sp, r7 + 8001628: f85d 7b04 ldr.w r7, [sp], #4 + 800162c: 4770 bx lr + 800162e: bf00 nop + 8001630: 40023800 .word 0x40023800 + +08001634 : + +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) +{ + 8001634: b580 push {r7, lr} + 8001636: b08a sub sp, #40 @ 0x28 + 8001638: af00 add r7, sp, #0 + 800163a: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800163c: f107 0314 add.w r3, r7, #20 + 8001640: 2200 movs r2, #0 + 8001642: 601a str r2, [r3, #0] + 8001644: 605a str r2, [r3, #4] + 8001646: 609a str r2, [r3, #8] + 8001648: 60da str r2, [r3, #12] + 800164a: 611a str r2, [r3, #16] + if(tim_encoderHandle->Instance==TIM3) + 800164c: 687b ldr r3, [r7, #4] + 800164e: 681b ldr r3, [r3, #0] + 8001650: 4a19 ldr r2, [pc, #100] @ (80016b8 ) + 8001652: 4293 cmp r3, r2 + 8001654: d12b bne.n 80016ae + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* TIM3 clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + 8001656: 2300 movs r3, #0 + 8001658: 613b str r3, [r7, #16] + 800165a: 4b18 ldr r3, [pc, #96] @ (80016bc ) + 800165c: 6c1b ldr r3, [r3, #64] @ 0x40 + 800165e: 4a17 ldr r2, [pc, #92] @ (80016bc ) + 8001660: f043 0302 orr.w r3, r3, #2 + 8001664: 6413 str r3, [r2, #64] @ 0x40 + 8001666: 4b15 ldr r3, [pc, #84] @ (80016bc ) + 8001668: 6c1b ldr r3, [r3, #64] @ 0x40 + 800166a: f003 0302 and.w r3, r3, #2 + 800166e: 613b str r3, [r7, #16] + 8001670: 693b ldr r3, [r7, #16] + + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001672: 2300 movs r3, #0 + 8001674: 60fb str r3, [r7, #12] + 8001676: 4b11 ldr r3, [pc, #68] @ (80016bc ) + 8001678: 6b1b ldr r3, [r3, #48] @ 0x30 + 800167a: 4a10 ldr r2, [pc, #64] @ (80016bc ) + 800167c: f043 0301 orr.w r3, r3, #1 + 8001680: 6313 str r3, [r2, #48] @ 0x30 + 8001682: 4b0e ldr r3, [pc, #56] @ (80016bc ) + 8001684: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001686: f003 0301 and.w r3, r3, #1 + 800168a: 60fb str r3, [r7, #12] + 800168c: 68fb ldr r3, [r7, #12] + /**TIM3 GPIO Configuration + PA6 ------> TIM3_CH1 + PA7 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + 800168e: 23c0 movs r3, #192 @ 0xc0 + 8001690: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001692: 2302 movs r3, #2 + 8001694: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001696: 2300 movs r3, #0 + 8001698: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800169a: 2300 movs r3, #0 + 800169c: 623b str r3, [r7, #32] + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + 800169e: 2302 movs r3, #2 + 80016a0: 627b str r3, [r7, #36] @ 0x24 + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 80016a2: f107 0314 add.w r3, r7, #20 + 80016a6: 4619 mov r1, r3 + 80016a8: 4805 ldr r0, [pc, #20] @ (80016c0 ) + 80016aa: f001 f981 bl 80029b0 + + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } +} + 80016ae: bf00 nop + 80016b0: 3728 adds r7, #40 @ 0x28 + 80016b2: 46bd mov sp, r7 + 80016b4: bd80 pop {r7, pc} + 80016b6: bf00 nop + 80016b8: 40000400 .word 0x40000400 + 80016bc: 40023800 .word 0x40023800 + 80016c0: 40020000 .word 0x40020000 + +080016c4 : +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) +{ + 80016c4: b580 push {r7, lr} + 80016c6: b088 sub sp, #32 + 80016c8: af00 add r7, sp, #0 + 80016ca: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 80016cc: f107 030c add.w r3, r7, #12 + 80016d0: 2200 movs r2, #0 + 80016d2: 601a str r2, [r3, #0] + 80016d4: 605a str r2, [r3, #4] + 80016d6: 609a str r2, [r3, #8] + 80016d8: 60da str r2, [r3, #12] + 80016da: 611a str r2, [r3, #16] + if(timHandle->Instance==TIM2) + 80016dc: 687b ldr r3, [r7, #4] + 80016de: 681b ldr r3, [r3, #0] + 80016e0: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 80016e4: d11d bne.n 8001722 + { + /* USER CODE BEGIN TIM2_MspPostInit 0 */ + + /* USER CODE END TIM2_MspPostInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + 80016e6: 2300 movs r3, #0 + 80016e8: 60bb str r3, [r7, #8] + 80016ea: 4b10 ldr r3, [pc, #64] @ (800172c ) + 80016ec: 6b1b ldr r3, [r3, #48] @ 0x30 + 80016ee: 4a0f ldr r2, [pc, #60] @ (800172c ) + 80016f0: f043 0301 orr.w r3, r3, #1 + 80016f4: 6313 str r3, [r2, #48] @ 0x30 + 80016f6: 4b0d ldr r3, [pc, #52] @ (800172c ) + 80016f8: 6b1b ldr r3, [r3, #48] @ 0x30 + 80016fa: f003 0301 and.w r3, r3, #1 + 80016fe: 60bb str r3, [r7, #8] + 8001700: 68bb ldr r3, [r7, #8] + /**TIM2 GPIO Configuration + PA5 ------> TIM2_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_5; + 8001702: 2320 movs r3, #32 + 8001704: 60fb str r3, [r7, #12] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001706: 2302 movs r3, #2 + 8001708: 613b str r3, [r7, #16] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800170a: 2300 movs r3, #0 + 800170c: 617b str r3, [r7, #20] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800170e: 2300 movs r3, #0 + 8001710: 61bb str r3, [r7, #24] + GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; + 8001712: 2301 movs r3, #1 + 8001714: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 8001716: f107 030c add.w r3, r7, #12 + 800171a: 4619 mov r1, r3 + 800171c: 4804 ldr r0, [pc, #16] @ (8001730 ) + 800171e: f001 f947 bl 80029b0 + /* USER CODE BEGIN TIM2_MspPostInit 1 */ + + /* USER CODE END TIM2_MspPostInit 1 */ + } + +} + 8001722: bf00 nop + 8001724: 3720 adds r7, #32 + 8001726: 46bd mov sp, r7 + 8001728: bd80 pop {r7, pc} + 800172a: bf00 nop + 800172c: 40023800 .word 0x40023800 + 8001730: 40020000 .word 0x40020000 + +08001734 : +DMA_HandleTypeDef hdma_usart2_rx; +DMA_HandleTypeDef hdma_usart2_tx; + +/* UART4 init function */ +void MX_UART4_Init(void) +{ + 8001734: b580 push {r7, lr} + 8001736: af00 add r7, sp, #0 + /* USER CODE END UART4_Init 0 */ + + /* USER CODE BEGIN UART4_Init 1 */ + + /* USER CODE END UART4_Init 1 */ + huart4.Instance = UART4; + 8001738: 4b11 ldr r3, [pc, #68] @ (8001780 ) + 800173a: 4a12 ldr r2, [pc, #72] @ (8001784 ) + 800173c: 601a str r2, [r3, #0] + huart4.Init.BaudRate = 115200; + 800173e: 4b10 ldr r3, [pc, #64] @ (8001780 ) + 8001740: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 8001744: 605a str r2, [r3, #4] + huart4.Init.WordLength = UART_WORDLENGTH_8B; + 8001746: 4b0e ldr r3, [pc, #56] @ (8001780 ) + 8001748: 2200 movs r2, #0 + 800174a: 609a str r2, [r3, #8] + huart4.Init.StopBits = UART_STOPBITS_1; + 800174c: 4b0c ldr r3, [pc, #48] @ (8001780 ) + 800174e: 2200 movs r2, #0 + 8001750: 60da str r2, [r3, #12] + huart4.Init.Parity = UART_PARITY_NONE; + 8001752: 4b0b ldr r3, [pc, #44] @ (8001780 ) + 8001754: 2200 movs r2, #0 + 8001756: 611a str r2, [r3, #16] + huart4.Init.Mode = UART_MODE_TX_RX; + 8001758: 4b09 ldr r3, [pc, #36] @ (8001780 ) + 800175a: 220c movs r2, #12 + 800175c: 615a str r2, [r3, #20] + huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800175e: 4b08 ldr r3, [pc, #32] @ (8001780 ) + 8001760: 2200 movs r2, #0 + 8001762: 619a str r2, [r3, #24] + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + 8001764: 4b06 ldr r3, [pc, #24] @ (8001780 ) + 8001766: 2200 movs r2, #0 + 8001768: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart4) != HAL_OK) + 800176a: 4805 ldr r0, [pc, #20] @ (8001780 ) + 800176c: f004 fe7c bl 8006468 + 8001770: 4603 mov r3, r0 + 8001772: 2b00 cmp r3, #0 + 8001774: d001 beq.n 800177a + { + Error_Handler(); + 8001776: f7ff fd67 bl 8001248 + } + /* USER CODE BEGIN UART4_Init 2 */ + + /* USER CODE END UART4_Init 2 */ + +} + 800177a: bf00 nop + 800177c: bd80 pop {r7, pc} + 800177e: bf00 nop + 8001780: 20000960 .word 0x20000960 + 8001784: 40004c00 .word 0x40004c00 + +08001788 : +/* UART5 init function */ +void MX_UART5_Init(void) +{ + 8001788: b580 push {r7, lr} + 800178a: af00 add r7, sp, #0 + /* USER CODE END UART5_Init 0 */ + + /* USER CODE BEGIN UART5_Init 1 */ + + /* USER CODE END UART5_Init 1 */ + huart5.Instance = UART5; + 800178c: 4b11 ldr r3, [pc, #68] @ (80017d4 ) + 800178e: 4a12 ldr r2, [pc, #72] @ (80017d8 ) + 8001790: 601a str r2, [r3, #0] + huart5.Init.BaudRate = 115200; + 8001792: 4b10 ldr r3, [pc, #64] @ (80017d4 ) + 8001794: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 8001798: 605a str r2, [r3, #4] + huart5.Init.WordLength = UART_WORDLENGTH_8B; + 800179a: 4b0e ldr r3, [pc, #56] @ (80017d4 ) + 800179c: 2200 movs r2, #0 + 800179e: 609a str r2, [r3, #8] + huart5.Init.StopBits = UART_STOPBITS_1; + 80017a0: 4b0c ldr r3, [pc, #48] @ (80017d4 ) + 80017a2: 2200 movs r2, #0 + 80017a4: 60da str r2, [r3, #12] + huart5.Init.Parity = UART_PARITY_NONE; + 80017a6: 4b0b ldr r3, [pc, #44] @ (80017d4 ) + 80017a8: 2200 movs r2, #0 + 80017aa: 611a str r2, [r3, #16] + huart5.Init.Mode = UART_MODE_TX_RX; + 80017ac: 4b09 ldr r3, [pc, #36] @ (80017d4 ) + 80017ae: 220c movs r2, #12 + 80017b0: 615a str r2, [r3, #20] + huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 80017b2: 4b08 ldr r3, [pc, #32] @ (80017d4 ) + 80017b4: 2200 movs r2, #0 + 80017b6: 619a str r2, [r3, #24] + huart5.Init.OverSampling = UART_OVERSAMPLING_16; + 80017b8: 4b06 ldr r3, [pc, #24] @ (80017d4 ) + 80017ba: 2200 movs r2, #0 + 80017bc: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart5) != HAL_OK) + 80017be: 4805 ldr r0, [pc, #20] @ (80017d4 ) + 80017c0: f004 fe52 bl 8006468 + 80017c4: 4603 mov r3, r0 + 80017c6: 2b00 cmp r3, #0 + 80017c8: d001 beq.n 80017ce + { + Error_Handler(); + 80017ca: f7ff fd3d bl 8001248 + } + /* USER CODE BEGIN UART5_Init 2 */ + + /* USER CODE END UART5_Init 2 */ + +} + 80017ce: bf00 nop + 80017d0: bd80 pop {r7, pc} + 80017d2: bf00 nop + 80017d4: 200009a8 .word 0x200009a8 + 80017d8: 40005000 .word 0x40005000 + +080017dc : +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + 80017dc: b580 push {r7, lr} + 80017de: af00 add r7, sp, #0 + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + 80017e0: 4b11 ldr r3, [pc, #68] @ (8001828 ) + 80017e2: 4a12 ldr r2, [pc, #72] @ (800182c ) + 80017e4: 601a str r2, [r3, #0] + huart1.Init.BaudRate = 115200; + 80017e6: 4b10 ldr r3, [pc, #64] @ (8001828 ) + 80017e8: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 80017ec: 605a str r2, [r3, #4] + huart1.Init.WordLength = UART_WORDLENGTH_8B; + 80017ee: 4b0e ldr r3, [pc, #56] @ (8001828 ) + 80017f0: 2200 movs r2, #0 + 80017f2: 609a str r2, [r3, #8] + huart1.Init.StopBits = UART_STOPBITS_1; + 80017f4: 4b0c ldr r3, [pc, #48] @ (8001828 ) + 80017f6: 2200 movs r2, #0 + 80017f8: 60da str r2, [r3, #12] + huart1.Init.Parity = UART_PARITY_NONE; + 80017fa: 4b0b ldr r3, [pc, #44] @ (8001828 ) + 80017fc: 2200 movs r2, #0 + 80017fe: 611a str r2, [r3, #16] + huart1.Init.Mode = UART_MODE_TX_RX; + 8001800: 4b09 ldr r3, [pc, #36] @ (8001828 ) + 8001802: 220c movs r2, #12 + 8001804: 615a str r2, [r3, #20] + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 8001806: 4b08 ldr r3, [pc, #32] @ (8001828 ) + 8001808: 2200 movs r2, #0 + 800180a: 619a str r2, [r3, #24] + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + 800180c: 4b06 ldr r3, [pc, #24] @ (8001828 ) + 800180e: 2200 movs r2, #0 + 8001810: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart1) != HAL_OK) + 8001812: 4805 ldr r0, [pc, #20] @ (8001828 ) + 8001814: f004 fe28 bl 8006468 + 8001818: 4603 mov r3, r0 + 800181a: 2b00 cmp r3, #0 + 800181c: d001 beq.n 8001822 + { + Error_Handler(); + 800181e: f7ff fd13 bl 8001248 + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + 8001822: bf00 nop + 8001824: bd80 pop {r7, pc} + 8001826: bf00 nop + 8001828: 200009f0 .word 0x200009f0 + 800182c: 40011000 .word 0x40011000 + +08001830 : +/* USART2 init function */ + +void MX_USART2_UART_Init(void) +{ + 8001830: b580 push {r7, lr} + 8001832: af00 add r7, sp, #0 + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + 8001834: 4b11 ldr r3, [pc, #68] @ (800187c ) + 8001836: 4a12 ldr r2, [pc, #72] @ (8001880 ) + 8001838: 601a str r2, [r3, #0] + huart2.Init.BaudRate = 115200; + 800183a: 4b10 ldr r3, [pc, #64] @ (800187c ) + 800183c: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 8001840: 605a str r2, [r3, #4] + huart2.Init.WordLength = UART_WORDLENGTH_8B; + 8001842: 4b0e ldr r3, [pc, #56] @ (800187c ) + 8001844: 2200 movs r2, #0 + 8001846: 609a str r2, [r3, #8] + huart2.Init.StopBits = UART_STOPBITS_1; + 8001848: 4b0c ldr r3, [pc, #48] @ (800187c ) + 800184a: 2200 movs r2, #0 + 800184c: 60da str r2, [r3, #12] + huart2.Init.Parity = UART_PARITY_NONE; + 800184e: 4b0b ldr r3, [pc, #44] @ (800187c ) + 8001850: 2200 movs r2, #0 + 8001852: 611a str r2, [r3, #16] + huart2.Init.Mode = UART_MODE_TX_RX; + 8001854: 4b09 ldr r3, [pc, #36] @ (800187c ) + 8001856: 220c movs r2, #12 + 8001858: 615a str r2, [r3, #20] + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800185a: 4b08 ldr r3, [pc, #32] @ (800187c ) + 800185c: 2200 movs r2, #0 + 800185e: 619a str r2, [r3, #24] + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + 8001860: 4b06 ldr r3, [pc, #24] @ (800187c ) + 8001862: 2200 movs r2, #0 + 8001864: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart2) != HAL_OK) + 8001866: 4805 ldr r0, [pc, #20] @ (800187c ) + 8001868: f004 fdfe bl 8006468 + 800186c: 4603 mov r3, r0 + 800186e: 2b00 cmp r3, #0 + 8001870: d001 beq.n 8001876 + { + Error_Handler(); + 8001872: f7ff fce9 bl 8001248 + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + 8001876: bf00 nop + 8001878: bd80 pop {r7, pc} + 800187a: bf00 nop + 800187c: 20000a38 .word 0x20000a38 + 8001880: 40004400 .word 0x40004400 + +08001884 : + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + 8001884: b580 push {r7, lr} + 8001886: b090 sub sp, #64 @ 0x40 + 8001888: af00 add r7, sp, #0 + 800188a: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800188c: f107 032c add.w r3, r7, #44 @ 0x2c + 8001890: 2200 movs r2, #0 + 8001892: 601a str r2, [r3, #0] + 8001894: 605a str r2, [r3, #4] + 8001896: 609a str r2, [r3, #8] + 8001898: 60da str r2, [r3, #12] + 800189a: 611a str r2, [r3, #16] + if(uartHandle->Instance==UART4) + 800189c: 687b ldr r3, [r7, #4] + 800189e: 681b ldr r3, [r3, #0] + 80018a0: 4a4a ldr r2, [pc, #296] @ (80019cc ) + 80018a2: 4293 cmp r3, r2 + 80018a4: f040 80a0 bne.w 80019e8 + { + /* USER CODE BEGIN UART4_MspInit 0 */ + + /* USER CODE END UART4_MspInit 0 */ + /* UART4 clock enable */ + __HAL_RCC_UART4_CLK_ENABLE(); + 80018a8: 2300 movs r3, #0 + 80018aa: 62bb str r3, [r7, #40] @ 0x28 + 80018ac: 4b48 ldr r3, [pc, #288] @ (80019d0 ) + 80018ae: 6c1b ldr r3, [r3, #64] @ 0x40 + 80018b0: 4a47 ldr r2, [pc, #284] @ (80019d0 ) + 80018b2: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 80018b6: 6413 str r3, [r2, #64] @ 0x40 + 80018b8: 4b45 ldr r3, [pc, #276] @ (80019d0 ) + 80018ba: 6c1b ldr r3, [r3, #64] @ 0x40 + 80018bc: f403 2300 and.w r3, r3, #524288 @ 0x80000 + 80018c0: 62bb str r3, [r7, #40] @ 0x28 + 80018c2: 6abb ldr r3, [r7, #40] @ 0x28 + + __HAL_RCC_GPIOA_CLK_ENABLE(); + 80018c4: 2300 movs r3, #0 + 80018c6: 627b str r3, [r7, #36] @ 0x24 + 80018c8: 4b41 ldr r3, [pc, #260] @ (80019d0 ) + 80018ca: 6b1b ldr r3, [r3, #48] @ 0x30 + 80018cc: 4a40 ldr r2, [pc, #256] @ (80019d0 ) + 80018ce: f043 0301 orr.w r3, r3, #1 + 80018d2: 6313 str r3, [r2, #48] @ 0x30 + 80018d4: 4b3e ldr r3, [pc, #248] @ (80019d0 ) + 80018d6: 6b1b ldr r3, [r3, #48] @ 0x30 + 80018d8: f003 0301 and.w r3, r3, #1 + 80018dc: 627b str r3, [r7, #36] @ 0x24 + 80018de: 6a7b ldr r3, [r7, #36] @ 0x24 + /**UART4 GPIO Configuration + PA0-WKUP ------> UART4_TX + PA1 ------> UART4_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + 80018e0: 2303 movs r3, #3 + 80018e2: 62fb str r3, [r7, #44] @ 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80018e4: 2302 movs r3, #2 + 80018e6: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 80018e8: 2300 movs r3, #0 + 80018ea: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 80018ec: 2303 movs r3, #3 + 80018ee: 63bb str r3, [r7, #56] @ 0x38 + GPIO_InitStruct.Alternate = GPIO_AF8_UART4; + 80018f0: 2308 movs r3, #8 + 80018f2: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 80018f4: f107 032c add.w r3, r7, #44 @ 0x2c + 80018f8: 4619 mov r1, r3 + 80018fa: 4836 ldr r0, [pc, #216] @ (80019d4 ) + 80018fc: f001 f858 bl 80029b0 + + /* UART4 DMA Init */ + /* UART4_RX Init */ + hdma_uart4_rx.Instance = DMA1_Stream2; + 8001900: 4b35 ldr r3, [pc, #212] @ (80019d8 ) + 8001902: 4a36 ldr r2, [pc, #216] @ (80019dc ) + 8001904: 601a str r2, [r3, #0] + hdma_uart4_rx.Init.Channel = DMA_CHANNEL_4; + 8001906: 4b34 ldr r3, [pc, #208] @ (80019d8 ) + 8001908: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 800190c: 605a str r2, [r3, #4] + hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + 800190e: 4b32 ldr r3, [pc, #200] @ (80019d8 ) + 8001910: 2200 movs r2, #0 + 8001912: 609a str r2, [r3, #8] + hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001914: 4b30 ldr r3, [pc, #192] @ (80019d8 ) + 8001916: 2200 movs r2, #0 + 8001918: 60da str r2, [r3, #12] + hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE; + 800191a: 4b2f ldr r3, [pc, #188] @ (80019d8 ) + 800191c: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001920: 611a str r2, [r3, #16] + hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001922: 4b2d ldr r3, [pc, #180] @ (80019d8 ) + 8001924: 2200 movs r2, #0 + 8001926: 615a str r2, [r3, #20] + hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001928: 4b2b ldr r3, [pc, #172] @ (80019d8 ) + 800192a: 2200 movs r2, #0 + 800192c: 619a str r2, [r3, #24] + hdma_uart4_rx.Init.Mode = DMA_NORMAL; + 800192e: 4b2a ldr r3, [pc, #168] @ (80019d8 ) + 8001930: 2200 movs r2, #0 + 8001932: 61da str r2, [r3, #28] + hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW; + 8001934: 4b28 ldr r3, [pc, #160] @ (80019d8 ) + 8001936: 2200 movs r2, #0 + 8001938: 621a str r2, [r3, #32] + hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 800193a: 4b27 ldr r3, [pc, #156] @ (80019d8 ) + 800193c: 2200 movs r2, #0 + 800193e: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK) + 8001940: 4825 ldr r0, [pc, #148] @ (80019d8 ) + 8001942: f000 fc33 bl 80021ac + 8001946: 4603 mov r3, r0 + 8001948: 2b00 cmp r3, #0 + 800194a: d001 beq.n 8001950 + { + Error_Handler(); + 800194c: f7ff fc7c bl 8001248 + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx); + 8001950: 687b ldr r3, [r7, #4] + 8001952: 4a21 ldr r2, [pc, #132] @ (80019d8 ) + 8001954: 63da str r2, [r3, #60] @ 0x3c + 8001956: 4a20 ldr r2, [pc, #128] @ (80019d8 ) + 8001958: 687b ldr r3, [r7, #4] + 800195a: 6393 str r3, [r2, #56] @ 0x38 + + /* UART4_TX Init */ + hdma_uart4_tx.Instance = DMA1_Stream4; + 800195c: 4b20 ldr r3, [pc, #128] @ (80019e0 ) + 800195e: 4a21 ldr r2, [pc, #132] @ (80019e4 ) + 8001960: 601a str r2, [r3, #0] + hdma_uart4_tx.Init.Channel = DMA_CHANNEL_4; + 8001962: 4b1f ldr r3, [pc, #124] @ (80019e0 ) + 8001964: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001968: 605a str r2, [r3, #4] + hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + 800196a: 4b1d ldr r3, [pc, #116] @ (80019e0 ) + 800196c: 2240 movs r2, #64 @ 0x40 + 800196e: 609a str r2, [r3, #8] + hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001970: 4b1b ldr r3, [pc, #108] @ (80019e0 ) + 8001972: 2200 movs r2, #0 + 8001974: 60da str r2, [r3, #12] + hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE; + 8001976: 4b1a ldr r3, [pc, #104] @ (80019e0 ) + 8001978: f44f 6280 mov.w r2, #1024 @ 0x400 + 800197c: 611a str r2, [r3, #16] + hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 800197e: 4b18 ldr r3, [pc, #96] @ (80019e0 ) + 8001980: 2200 movs r2, #0 + 8001982: 615a str r2, [r3, #20] + hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001984: 4b16 ldr r3, [pc, #88] @ (80019e0 ) + 8001986: 2200 movs r2, #0 + 8001988: 619a str r2, [r3, #24] + hdma_uart4_tx.Init.Mode = DMA_NORMAL; + 800198a: 4b15 ldr r3, [pc, #84] @ (80019e0 ) + 800198c: 2200 movs r2, #0 + 800198e: 61da str r2, [r3, #28] + hdma_uart4_tx.Init.Priority = DMA_PRIORITY_LOW; + 8001990: 4b13 ldr r3, [pc, #76] @ (80019e0 ) + 8001992: 2200 movs r2, #0 + 8001994: 621a str r2, [r3, #32] + hdma_uart4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001996: 4b12 ldr r3, [pc, #72] @ (80019e0 ) + 8001998: 2200 movs r2, #0 + 800199a: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK) + 800199c: 4810 ldr r0, [pc, #64] @ (80019e0 ) + 800199e: f000 fc05 bl 80021ac + 80019a2: 4603 mov r3, r0 + 80019a4: 2b00 cmp r3, #0 + 80019a6: d001 beq.n 80019ac + { + Error_Handler(); + 80019a8: f7ff fc4e bl 8001248 + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx); + 80019ac: 687b ldr r3, [r7, #4] + 80019ae: 4a0c ldr r2, [pc, #48] @ (80019e0 ) + 80019b0: 639a str r2, [r3, #56] @ 0x38 + 80019b2: 4a0b ldr r2, [pc, #44] @ (80019e0 ) + 80019b4: 687b ldr r3, [r7, #4] + 80019b6: 6393 str r3, [r2, #56] @ 0x38 + + /* UART4 interrupt Init */ + HAL_NVIC_SetPriority(UART4_IRQn, 5, 0); + 80019b8: 2200 movs r2, #0 + 80019ba: 2105 movs r1, #5 + 80019bc: 2034 movs r0, #52 @ 0x34 + 80019be: f000 fbbe bl 800213e + HAL_NVIC_EnableIRQ(UART4_IRQn); + 80019c2: 2034 movs r0, #52 @ 0x34 + 80019c4: f000 fbd7 bl 8002176 + HAL_NVIC_EnableIRQ(USART2_IRQn); + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } +} + 80019c8: e202 b.n 8001dd0 + 80019ca: bf00 nop + 80019cc: 40004c00 .word 0x40004c00 + 80019d0: 40023800 .word 0x40023800 + 80019d4: 40020000 .word 0x40020000 + 80019d8: 20000a80 .word 0x20000a80 + 80019dc: 40026040 .word 0x40026040 + 80019e0: 20000ae0 .word 0x20000ae0 + 80019e4: 40026070 .word 0x40026070 + else if(uartHandle->Instance==UART5) + 80019e8: 687b ldr r3, [r7, #4] + 80019ea: 681b ldr r3, [r3, #0] + 80019ec: 4a59 ldr r2, [pc, #356] @ (8001b54 ) + 80019ee: 4293 cmp r3, r2 + 80019f0: f040 80c0 bne.w 8001b74 + __HAL_RCC_UART5_CLK_ENABLE(); + 80019f4: 2300 movs r3, #0 + 80019f6: 623b str r3, [r7, #32] + 80019f8: 4b57 ldr r3, [pc, #348] @ (8001b58 ) + 80019fa: 6c1b ldr r3, [r3, #64] @ 0x40 + 80019fc: 4a56 ldr r2, [pc, #344] @ (8001b58 ) + 80019fe: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 + 8001a02: 6413 str r3, [r2, #64] @ 0x40 + 8001a04: 4b54 ldr r3, [pc, #336] @ (8001b58 ) + 8001a06: 6c1b ldr r3, [r3, #64] @ 0x40 + 8001a08: f403 1380 and.w r3, r3, #1048576 @ 0x100000 + 8001a0c: 623b str r3, [r7, #32] + 8001a0e: 6a3b ldr r3, [r7, #32] + __HAL_RCC_GPIOC_CLK_ENABLE(); + 8001a10: 2300 movs r3, #0 + 8001a12: 61fb str r3, [r7, #28] + 8001a14: 4b50 ldr r3, [pc, #320] @ (8001b58 ) + 8001a16: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001a18: 4a4f ldr r2, [pc, #316] @ (8001b58 ) + 8001a1a: f043 0304 orr.w r3, r3, #4 + 8001a1e: 6313 str r3, [r2, #48] @ 0x30 + 8001a20: 4b4d ldr r3, [pc, #308] @ (8001b58 ) + 8001a22: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001a24: f003 0304 and.w r3, r3, #4 + 8001a28: 61fb str r3, [r7, #28] + 8001a2a: 69fb ldr r3, [r7, #28] + __HAL_RCC_GPIOD_CLK_ENABLE(); + 8001a2c: 2300 movs r3, #0 + 8001a2e: 61bb str r3, [r7, #24] + 8001a30: 4b49 ldr r3, [pc, #292] @ (8001b58 ) + 8001a32: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001a34: 4a48 ldr r2, [pc, #288] @ (8001b58 ) + 8001a36: f043 0308 orr.w r3, r3, #8 + 8001a3a: 6313 str r3, [r2, #48] @ 0x30 + 8001a3c: 4b46 ldr r3, [pc, #280] @ (8001b58 ) + 8001a3e: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001a40: f003 0308 and.w r3, r3, #8 + 8001a44: 61bb str r3, [r7, #24] + 8001a46: 69bb ldr r3, [r7, #24] + GPIO_InitStruct.Pin = GPIO_PIN_12; + 8001a48: f44f 5380 mov.w r3, #4096 @ 0x1000 + 8001a4c: 62fb str r3, [r7, #44] @ 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001a4e: 2302 movs r3, #2 + 8001a50: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001a52: 2300 movs r3, #0 + 8001a54: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001a56: 2303 movs r3, #3 + 8001a58: 63bb str r3, [r7, #56] @ 0x38 + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + 8001a5a: 2308 movs r3, #8 + 8001a5c: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 8001a5e: f107 032c add.w r3, r7, #44 @ 0x2c + 8001a62: 4619 mov r1, r3 + 8001a64: 483d ldr r0, [pc, #244] @ (8001b5c ) + 8001a66: f000 ffa3 bl 80029b0 + GPIO_InitStruct.Pin = GPIO_PIN_2; + 8001a6a: 2304 movs r3, #4 + 8001a6c: 62fb str r3, [r7, #44] @ 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001a6e: 2302 movs r3, #2 + 8001a70: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001a72: 2300 movs r3, #0 + 8001a74: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001a76: 2303 movs r3, #3 + 8001a78: 63bb str r3, [r7, #56] @ 0x38 + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + 8001a7a: 2308 movs r3, #8 + 8001a7c: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 8001a7e: f107 032c add.w r3, r7, #44 @ 0x2c + 8001a82: 4619 mov r1, r3 + 8001a84: 4836 ldr r0, [pc, #216] @ (8001b60 ) + 8001a86: f000 ff93 bl 80029b0 + hdma_uart5_rx.Instance = DMA1_Stream0; + 8001a8a: 4b36 ldr r3, [pc, #216] @ (8001b64 ) + 8001a8c: 4a36 ldr r2, [pc, #216] @ (8001b68 ) + 8001a8e: 601a str r2, [r3, #0] + hdma_uart5_rx.Init.Channel = DMA_CHANNEL_4; + 8001a90: 4b34 ldr r3, [pc, #208] @ (8001b64 ) + 8001a92: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001a96: 605a str r2, [r3, #4] + hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + 8001a98: 4b32 ldr r3, [pc, #200] @ (8001b64 ) + 8001a9a: 2200 movs r2, #0 + 8001a9c: 609a str r2, [r3, #8] + hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001a9e: 4b31 ldr r3, [pc, #196] @ (8001b64 ) + 8001aa0: 2200 movs r2, #0 + 8001aa2: 60da str r2, [r3, #12] + hdma_uart5_rx.Init.MemInc = DMA_MINC_ENABLE; + 8001aa4: 4b2f ldr r3, [pc, #188] @ (8001b64 ) + 8001aa6: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001aaa: 611a str r2, [r3, #16] + hdma_uart5_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001aac: 4b2d ldr r3, [pc, #180] @ (8001b64 ) + 8001aae: 2200 movs r2, #0 + 8001ab0: 615a str r2, [r3, #20] + hdma_uart5_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001ab2: 4b2c ldr r3, [pc, #176] @ (8001b64 ) + 8001ab4: 2200 movs r2, #0 + 8001ab6: 619a str r2, [r3, #24] + hdma_uart5_rx.Init.Mode = DMA_NORMAL; + 8001ab8: 4b2a ldr r3, [pc, #168] @ (8001b64 ) + 8001aba: 2200 movs r2, #0 + 8001abc: 61da str r2, [r3, #28] + hdma_uart5_rx.Init.Priority = DMA_PRIORITY_LOW; + 8001abe: 4b29 ldr r3, [pc, #164] @ (8001b64 ) + 8001ac0: 2200 movs r2, #0 + 8001ac2: 621a str r2, [r3, #32] + hdma_uart5_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001ac4: 4b27 ldr r3, [pc, #156] @ (8001b64 ) + 8001ac6: 2200 movs r2, #0 + 8001ac8: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_uart5_rx) != HAL_OK) + 8001aca: 4826 ldr r0, [pc, #152] @ (8001b64 ) + 8001acc: f000 fb6e bl 80021ac + 8001ad0: 4603 mov r3, r0 + 8001ad2: 2b00 cmp r3, #0 + 8001ad4: d001 beq.n 8001ada + Error_Handler(); + 8001ad6: f7ff fbb7 bl 8001248 + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart5_rx); + 8001ada: 687b ldr r3, [r7, #4] + 8001adc: 4a21 ldr r2, [pc, #132] @ (8001b64 ) + 8001ade: 63da str r2, [r3, #60] @ 0x3c + 8001ae0: 4a20 ldr r2, [pc, #128] @ (8001b64 ) + 8001ae2: 687b ldr r3, [r7, #4] + 8001ae4: 6393 str r3, [r2, #56] @ 0x38 + hdma_uart5_tx.Instance = DMA1_Stream7; + 8001ae6: 4b21 ldr r3, [pc, #132] @ (8001b6c ) + 8001ae8: 4a21 ldr r2, [pc, #132] @ (8001b70 ) + 8001aea: 601a str r2, [r3, #0] + hdma_uart5_tx.Init.Channel = DMA_CHANNEL_4; + 8001aec: 4b1f ldr r3, [pc, #124] @ (8001b6c ) + 8001aee: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001af2: 605a str r2, [r3, #4] + hdma_uart5_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + 8001af4: 4b1d ldr r3, [pc, #116] @ (8001b6c ) + 8001af6: 2240 movs r2, #64 @ 0x40 + 8001af8: 609a str r2, [r3, #8] + hdma_uart5_tx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001afa: 4b1c ldr r3, [pc, #112] @ (8001b6c ) + 8001afc: 2200 movs r2, #0 + 8001afe: 60da str r2, [r3, #12] + hdma_uart5_tx.Init.MemInc = DMA_MINC_ENABLE; + 8001b00: 4b1a ldr r3, [pc, #104] @ (8001b6c ) + 8001b02: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001b06: 611a str r2, [r3, #16] + hdma_uart5_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001b08: 4b18 ldr r3, [pc, #96] @ (8001b6c ) + 8001b0a: 2200 movs r2, #0 + 8001b0c: 615a str r2, [r3, #20] + hdma_uart5_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001b0e: 4b17 ldr r3, [pc, #92] @ (8001b6c ) + 8001b10: 2200 movs r2, #0 + 8001b12: 619a str r2, [r3, #24] + hdma_uart5_tx.Init.Mode = DMA_NORMAL; + 8001b14: 4b15 ldr r3, [pc, #84] @ (8001b6c ) + 8001b16: 2200 movs r2, #0 + 8001b18: 61da str r2, [r3, #28] + hdma_uart5_tx.Init.Priority = DMA_PRIORITY_LOW; + 8001b1a: 4b14 ldr r3, [pc, #80] @ (8001b6c ) + 8001b1c: 2200 movs r2, #0 + 8001b1e: 621a str r2, [r3, #32] + hdma_uart5_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001b20: 4b12 ldr r3, [pc, #72] @ (8001b6c ) + 8001b22: 2200 movs r2, #0 + 8001b24: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_uart5_tx) != HAL_OK) + 8001b26: 4811 ldr r0, [pc, #68] @ (8001b6c ) + 8001b28: f000 fb40 bl 80021ac + 8001b2c: 4603 mov r3, r0 + 8001b2e: 2b00 cmp r3, #0 + 8001b30: d001 beq.n 8001b36 + Error_Handler(); + 8001b32: f7ff fb89 bl 8001248 + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart5_tx); + 8001b36: 687b ldr r3, [r7, #4] + 8001b38: 4a0c ldr r2, [pc, #48] @ (8001b6c ) + 8001b3a: 639a str r2, [r3, #56] @ 0x38 + 8001b3c: 4a0b ldr r2, [pc, #44] @ (8001b6c ) + 8001b3e: 687b ldr r3, [r7, #4] + 8001b40: 6393 str r3, [r2, #56] @ 0x38 + HAL_NVIC_SetPriority(UART5_IRQn, 5, 0); + 8001b42: 2200 movs r2, #0 + 8001b44: 2105 movs r1, #5 + 8001b46: 2035 movs r0, #53 @ 0x35 + 8001b48: f000 faf9 bl 800213e + HAL_NVIC_EnableIRQ(UART5_IRQn); + 8001b4c: 2035 movs r0, #53 @ 0x35 + 8001b4e: f000 fb12 bl 8002176 +} + 8001b52: e13d b.n 8001dd0 + 8001b54: 40005000 .word 0x40005000 + 8001b58: 40023800 .word 0x40023800 + 8001b5c: 40020800 .word 0x40020800 + 8001b60: 40020c00 .word 0x40020c00 + 8001b64: 20000b40 .word 0x20000b40 + 8001b68: 40026010 .word 0x40026010 + 8001b6c: 20000ba0 .word 0x20000ba0 + 8001b70: 400260b8 .word 0x400260b8 + else if(uartHandle->Instance==USART1) + 8001b74: 687b ldr r3, [r7, #4] + 8001b76: 681b ldr r3, [r3, #0] + 8001b78: 4a97 ldr r2, [pc, #604] @ (8001dd8 ) + 8001b7a: 4293 cmp r3, r2 + 8001b7c: f040 8092 bne.w 8001ca4 + __HAL_RCC_USART1_CLK_ENABLE(); + 8001b80: 2300 movs r3, #0 + 8001b82: 617b str r3, [r7, #20] + 8001b84: 4b95 ldr r3, [pc, #596] @ (8001ddc ) + 8001b86: 6c5b ldr r3, [r3, #68] @ 0x44 + 8001b88: 4a94 ldr r2, [pc, #592] @ (8001ddc ) + 8001b8a: f043 0310 orr.w r3, r3, #16 + 8001b8e: 6453 str r3, [r2, #68] @ 0x44 + 8001b90: 4b92 ldr r3, [pc, #584] @ (8001ddc ) + 8001b92: 6c5b ldr r3, [r3, #68] @ 0x44 + 8001b94: f003 0310 and.w r3, r3, #16 + 8001b98: 617b str r3, [r7, #20] + 8001b9a: 697b ldr r3, [r7, #20] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001b9c: 2300 movs r3, #0 + 8001b9e: 613b str r3, [r7, #16] + 8001ba0: 4b8e ldr r3, [pc, #568] @ (8001ddc ) + 8001ba2: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001ba4: 4a8d ldr r2, [pc, #564] @ (8001ddc ) + 8001ba6: f043 0301 orr.w r3, r3, #1 + 8001baa: 6313 str r3, [r2, #48] @ 0x30 + 8001bac: 4b8b ldr r3, [pc, #556] @ (8001ddc ) + 8001bae: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001bb0: f003 0301 and.w r3, r3, #1 + 8001bb4: 613b str r3, [r7, #16] + 8001bb6: 693b ldr r3, [r7, #16] + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + 8001bb8: f44f 63c0 mov.w r3, #1536 @ 0x600 + 8001bbc: 62fb str r3, [r7, #44] @ 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001bbe: 2302 movs r3, #2 + 8001bc0: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001bc2: 2300 movs r3, #0 + 8001bc4: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001bc6: 2303 movs r3, #3 + 8001bc8: 63bb str r3, [r7, #56] @ 0x38 + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + 8001bca: 2307 movs r3, #7 + 8001bcc: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 8001bce: f107 032c add.w r3, r7, #44 @ 0x2c + 8001bd2: 4619 mov r1, r3 + 8001bd4: 4882 ldr r0, [pc, #520] @ (8001de0 ) + 8001bd6: f000 feeb bl 80029b0 + hdma_usart1_rx.Instance = DMA2_Stream2; + 8001bda: 4b82 ldr r3, [pc, #520] @ (8001de4 ) + 8001bdc: 4a82 ldr r2, [pc, #520] @ (8001de8 ) + 8001bde: 601a str r2, [r3, #0] + hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; + 8001be0: 4b80 ldr r3, [pc, #512] @ (8001de4 ) + 8001be2: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001be6: 605a str r2, [r3, #4] + hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + 8001be8: 4b7e ldr r3, [pc, #504] @ (8001de4 ) + 8001bea: 2200 movs r2, #0 + 8001bec: 609a str r2, [r3, #8] + hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001bee: 4b7d ldr r3, [pc, #500] @ (8001de4 ) + 8001bf0: 2200 movs r2, #0 + 8001bf2: 60da str r2, [r3, #12] + hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; + 8001bf4: 4b7b ldr r3, [pc, #492] @ (8001de4 ) + 8001bf6: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001bfa: 611a str r2, [r3, #16] + hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001bfc: 4b79 ldr r3, [pc, #484] @ (8001de4 ) + 8001bfe: 2200 movs r2, #0 + 8001c00: 615a str r2, [r3, #20] + hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001c02: 4b78 ldr r3, [pc, #480] @ (8001de4 ) + 8001c04: 2200 movs r2, #0 + 8001c06: 619a str r2, [r3, #24] + hdma_usart1_rx.Init.Mode = DMA_NORMAL; + 8001c08: 4b76 ldr r3, [pc, #472] @ (8001de4 ) + 8001c0a: 2200 movs r2, #0 + 8001c0c: 61da str r2, [r3, #28] + hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; + 8001c0e: 4b75 ldr r3, [pc, #468] @ (8001de4 ) + 8001c10: 2200 movs r2, #0 + 8001c12: 621a str r2, [r3, #32] + hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001c14: 4b73 ldr r3, [pc, #460] @ (8001de4 ) + 8001c16: 2200 movs r2, #0 + 8001c18: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) + 8001c1a: 4872 ldr r0, [pc, #456] @ (8001de4 ) + 8001c1c: f000 fac6 bl 80021ac + 8001c20: 4603 mov r3, r0 + 8001c22: 2b00 cmp r3, #0 + 8001c24: d001 beq.n 8001c2a + Error_Handler(); + 8001c26: f7ff fb0f bl 8001248 + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx); + 8001c2a: 687b ldr r3, [r7, #4] + 8001c2c: 4a6d ldr r2, [pc, #436] @ (8001de4 ) + 8001c2e: 63da str r2, [r3, #60] @ 0x3c + 8001c30: 4a6c ldr r2, [pc, #432] @ (8001de4 ) + 8001c32: 687b ldr r3, [r7, #4] + 8001c34: 6393 str r3, [r2, #56] @ 0x38 + hdma_usart1_tx.Instance = DMA2_Stream7; + 8001c36: 4b6d ldr r3, [pc, #436] @ (8001dec ) + 8001c38: 4a6d ldr r2, [pc, #436] @ (8001df0 ) + 8001c3a: 601a str r2, [r3, #0] + hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; + 8001c3c: 4b6b ldr r3, [pc, #428] @ (8001dec ) + 8001c3e: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001c42: 605a str r2, [r3, #4] + hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + 8001c44: 4b69 ldr r3, [pc, #420] @ (8001dec ) + 8001c46: 2240 movs r2, #64 @ 0x40 + 8001c48: 609a str r2, [r3, #8] + hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001c4a: 4b68 ldr r3, [pc, #416] @ (8001dec ) + 8001c4c: 2200 movs r2, #0 + 8001c4e: 60da str r2, [r3, #12] + hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; + 8001c50: 4b66 ldr r3, [pc, #408] @ (8001dec ) + 8001c52: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001c56: 611a str r2, [r3, #16] + hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001c58: 4b64 ldr r3, [pc, #400] @ (8001dec ) + 8001c5a: 2200 movs r2, #0 + 8001c5c: 615a str r2, [r3, #20] + hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001c5e: 4b63 ldr r3, [pc, #396] @ (8001dec ) + 8001c60: 2200 movs r2, #0 + 8001c62: 619a str r2, [r3, #24] + hdma_usart1_tx.Init.Mode = DMA_NORMAL; + 8001c64: 4b61 ldr r3, [pc, #388] @ (8001dec ) + 8001c66: 2200 movs r2, #0 + 8001c68: 61da str r2, [r3, #28] + hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; + 8001c6a: 4b60 ldr r3, [pc, #384] @ (8001dec ) + 8001c6c: 2200 movs r2, #0 + 8001c6e: 621a str r2, [r3, #32] + hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001c70: 4b5e ldr r3, [pc, #376] @ (8001dec ) + 8001c72: 2200 movs r2, #0 + 8001c74: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) + 8001c76: 485d ldr r0, [pc, #372] @ (8001dec ) + 8001c78: f000 fa98 bl 80021ac + 8001c7c: 4603 mov r3, r0 + 8001c7e: 2b00 cmp r3, #0 + 8001c80: d001 beq.n 8001c86 + Error_Handler(); + 8001c82: f7ff fae1 bl 8001248 + __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx); + 8001c86: 687b ldr r3, [r7, #4] + 8001c88: 4a58 ldr r2, [pc, #352] @ (8001dec ) + 8001c8a: 639a str r2, [r3, #56] @ 0x38 + 8001c8c: 4a57 ldr r2, [pc, #348] @ (8001dec ) + 8001c8e: 687b ldr r3, [r7, #4] + 8001c90: 6393 str r3, [r2, #56] @ 0x38 + HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); + 8001c92: 2200 movs r2, #0 + 8001c94: 2105 movs r1, #5 + 8001c96: 2025 movs r0, #37 @ 0x25 + 8001c98: f000 fa51 bl 800213e + HAL_NVIC_EnableIRQ(USART1_IRQn); + 8001c9c: 2025 movs r0, #37 @ 0x25 + 8001c9e: f000 fa6a bl 8002176 +} + 8001ca2: e095 b.n 8001dd0 + else if(uartHandle->Instance==USART2) + 8001ca4: 687b ldr r3, [r7, #4] + 8001ca6: 681b ldr r3, [r3, #0] + 8001ca8: 4a52 ldr r2, [pc, #328] @ (8001df4 ) + 8001caa: 4293 cmp r3, r2 + 8001cac: f040 8090 bne.w 8001dd0 + __HAL_RCC_USART2_CLK_ENABLE(); + 8001cb0: 2300 movs r3, #0 + 8001cb2: 60fb str r3, [r7, #12] + 8001cb4: 4b49 ldr r3, [pc, #292] @ (8001ddc ) + 8001cb6: 6c1b ldr r3, [r3, #64] @ 0x40 + 8001cb8: 4a48 ldr r2, [pc, #288] @ (8001ddc ) + 8001cba: f443 3300 orr.w r3, r3, #131072 @ 0x20000 + 8001cbe: 6413 str r3, [r2, #64] @ 0x40 + 8001cc0: 4b46 ldr r3, [pc, #280] @ (8001ddc ) + 8001cc2: 6c1b ldr r3, [r3, #64] @ 0x40 + 8001cc4: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 8001cc8: 60fb str r3, [r7, #12] + 8001cca: 68fb ldr r3, [r7, #12] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001ccc: 2300 movs r3, #0 + 8001cce: 60bb str r3, [r7, #8] + 8001cd0: 4b42 ldr r3, [pc, #264] @ (8001ddc ) + 8001cd2: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001cd4: 4a41 ldr r2, [pc, #260] @ (8001ddc ) + 8001cd6: f043 0301 orr.w r3, r3, #1 + 8001cda: 6313 str r3, [r2, #48] @ 0x30 + 8001cdc: 4b3f ldr r3, [pc, #252] @ (8001ddc ) + 8001cde: 6b1b ldr r3, [r3, #48] @ 0x30 + 8001ce0: f003 0301 and.w r3, r3, #1 + 8001ce4: 60bb str r3, [r7, #8] + 8001ce6: 68bb ldr r3, [r7, #8] + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + 8001ce8: 230c movs r3, #12 + 8001cea: 62fb str r3, [r7, #44] @ 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001cec: 2302 movs r3, #2 + 8001cee: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001cf0: 2300 movs r3, #0 + 8001cf2: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001cf4: 2303 movs r3, #3 + 8001cf6: 63bb str r3, [r7, #56] @ 0x38 + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + 8001cf8: 2307 movs r3, #7 + 8001cfa: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 8001cfc: f107 032c add.w r3, r7, #44 @ 0x2c + 8001d00: 4619 mov r1, r3 + 8001d02: 4837 ldr r0, [pc, #220] @ (8001de0 ) + 8001d04: f000 fe54 bl 80029b0 + hdma_usart2_rx.Instance = DMA1_Stream5; + 8001d08: 4b3b ldr r3, [pc, #236] @ (8001df8 ) + 8001d0a: 4a3c ldr r2, [pc, #240] @ (8001dfc ) + 8001d0c: 601a str r2, [r3, #0] + hdma_usart2_rx.Init.Channel = DMA_CHANNEL_4; + 8001d0e: 4b3a ldr r3, [pc, #232] @ (8001df8 ) + 8001d10: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001d14: 605a str r2, [r3, #4] + hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + 8001d16: 4b38 ldr r3, [pc, #224] @ (8001df8 ) + 8001d18: 2200 movs r2, #0 + 8001d1a: 609a str r2, [r3, #8] + hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001d1c: 4b36 ldr r3, [pc, #216] @ (8001df8 ) + 8001d1e: 2200 movs r2, #0 + 8001d20: 60da str r2, [r3, #12] + hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; + 8001d22: 4b35 ldr r3, [pc, #212] @ (8001df8 ) + 8001d24: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001d28: 611a str r2, [r3, #16] + hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001d2a: 4b33 ldr r3, [pc, #204] @ (8001df8 ) + 8001d2c: 2200 movs r2, #0 + 8001d2e: 615a str r2, [r3, #20] + hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001d30: 4b31 ldr r3, [pc, #196] @ (8001df8 ) + 8001d32: 2200 movs r2, #0 + 8001d34: 619a str r2, [r3, #24] + hdma_usart2_rx.Init.Mode = DMA_NORMAL; + 8001d36: 4b30 ldr r3, [pc, #192] @ (8001df8 ) + 8001d38: 2200 movs r2, #0 + 8001d3a: 61da str r2, [r3, #28] + hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW; + 8001d3c: 4b2e ldr r3, [pc, #184] @ (8001df8 ) + 8001d3e: 2200 movs r2, #0 + 8001d40: 621a str r2, [r3, #32] + hdma_usart2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001d42: 4b2d ldr r3, [pc, #180] @ (8001df8 ) + 8001d44: 2200 movs r2, #0 + 8001d46: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) + 8001d48: 482b ldr r0, [pc, #172] @ (8001df8 ) + 8001d4a: f000 fa2f bl 80021ac + 8001d4e: 4603 mov r3, r0 + 8001d50: 2b00 cmp r3, #0 + 8001d52: d001 beq.n 8001d58 + Error_Handler(); + 8001d54: f7ff fa78 bl 8001248 + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); + 8001d58: 687b ldr r3, [r7, #4] + 8001d5a: 4a27 ldr r2, [pc, #156] @ (8001df8 ) + 8001d5c: 63da str r2, [r3, #60] @ 0x3c + 8001d5e: 4a26 ldr r2, [pc, #152] @ (8001df8 ) + 8001d60: 687b ldr r3, [r7, #4] + 8001d62: 6393 str r3, [r2, #56] @ 0x38 + hdma_usart2_tx.Instance = DMA1_Stream6; + 8001d64: 4b26 ldr r3, [pc, #152] @ (8001e00 ) + 8001d66: 4a27 ldr r2, [pc, #156] @ (8001e04 ) + 8001d68: 601a str r2, [r3, #0] + hdma_usart2_tx.Init.Channel = DMA_CHANNEL_4; + 8001d6a: 4b25 ldr r3, [pc, #148] @ (8001e00 ) + 8001d6c: f04f 6200 mov.w r2, #134217728 @ 0x8000000 + 8001d70: 605a str r2, [r3, #4] + hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + 8001d72: 4b23 ldr r3, [pc, #140] @ (8001e00 ) + 8001d74: 2240 movs r2, #64 @ 0x40 + 8001d76: 609a str r2, [r3, #8] + hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; + 8001d78: 4b21 ldr r3, [pc, #132] @ (8001e00 ) + 8001d7a: 2200 movs r2, #0 + 8001d7c: 60da str r2, [r3, #12] + hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; + 8001d7e: 4b20 ldr r3, [pc, #128] @ (8001e00 ) + 8001d80: f44f 6280 mov.w r2, #1024 @ 0x400 + 8001d84: 611a str r2, [r3, #16] + hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + 8001d86: 4b1e ldr r3, [pc, #120] @ (8001e00 ) + 8001d88: 2200 movs r2, #0 + 8001d8a: 615a str r2, [r3, #20] + hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + 8001d8c: 4b1c ldr r3, [pc, #112] @ (8001e00 ) + 8001d8e: 2200 movs r2, #0 + 8001d90: 619a str r2, [r3, #24] + hdma_usart2_tx.Init.Mode = DMA_NORMAL; + 8001d92: 4b1b ldr r3, [pc, #108] @ (8001e00 ) + 8001d94: 2200 movs r2, #0 + 8001d96: 61da str r2, [r3, #28] + hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW; + 8001d98: 4b19 ldr r3, [pc, #100] @ (8001e00 ) + 8001d9a: 2200 movs r2, #0 + 8001d9c: 621a str r2, [r3, #32] + hdma_usart2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + 8001d9e: 4b18 ldr r3, [pc, #96] @ (8001e00 ) + 8001da0: 2200 movs r2, #0 + 8001da2: 625a str r2, [r3, #36] @ 0x24 + if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK) + 8001da4: 4816 ldr r0, [pc, #88] @ (8001e00 ) + 8001da6: f000 fa01 bl 80021ac + 8001daa: 4603 mov r3, r0 + 8001dac: 2b00 cmp r3, #0 + 8001dae: d001 beq.n 8001db4 + Error_Handler(); + 8001db0: f7ff fa4a bl 8001248 + __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); + 8001db4: 687b ldr r3, [r7, #4] + 8001db6: 4a12 ldr r2, [pc, #72] @ (8001e00 ) + 8001db8: 639a str r2, [r3, #56] @ 0x38 + 8001dba: 4a11 ldr r2, [pc, #68] @ (8001e00 ) + 8001dbc: 687b ldr r3, [r7, #4] + 8001dbe: 6393 str r3, [r2, #56] @ 0x38 + HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); + 8001dc0: 2200 movs r2, #0 + 8001dc2: 2105 movs r1, #5 + 8001dc4: 2026 movs r0, #38 @ 0x26 + 8001dc6: f000 f9ba bl 800213e + HAL_NVIC_EnableIRQ(USART2_IRQn); + 8001dca: 2026 movs r0, #38 @ 0x26 + 8001dcc: f000 f9d3 bl 8002176 +} + 8001dd0: bf00 nop + 8001dd2: 3740 adds r7, #64 @ 0x40 + 8001dd4: 46bd mov sp, r7 + 8001dd6: bd80 pop {r7, pc} + 8001dd8: 40011000 .word 0x40011000 + 8001ddc: 40023800 .word 0x40023800 + 8001de0: 40020000 .word 0x40020000 + 8001de4: 20000c00 .word 0x20000c00 + 8001de8: 40026440 .word 0x40026440 + 8001dec: 20000c60 .word 0x20000c60 + 8001df0: 400264b8 .word 0x400264b8 + 8001df4: 40004400 .word 0x40004400 + 8001df8: 20000cc0 .word 0x20000cc0 + 8001dfc: 40026088 .word 0x40026088 + 8001e00: 20000d20 .word 0x20000d20 + 8001e04: 400260a0 .word 0x400260a0 + +08001e08 : + 8001e08: f8df d034 ldr.w sp, [pc, #52] @ 8001e40 + 8001e0c: f7ff fb34 bl 8001478 + 8001e10: 480c ldr r0, [pc, #48] @ (8001e44 ) + 8001e12: 490d ldr r1, [pc, #52] @ (8001e48 ) + 8001e14: 4a0d ldr r2, [pc, #52] @ (8001e4c ) + 8001e16: 2300 movs r3, #0 + 8001e18: e002 b.n 8001e20 + +08001e1a : + 8001e1a: 58d4 ldr r4, [r2, r3] + 8001e1c: 50c4 str r4, [r0, r3] + 8001e1e: 3304 adds r3, #4 + +08001e20 : + 8001e20: 18c4 adds r4, r0, r3 + 8001e22: 428c cmp r4, r1 + 8001e24: d3f9 bcc.n 8001e1a + 8001e26: 4a0a ldr r2, [pc, #40] @ (8001e50 ) + 8001e28: 4c0a ldr r4, [pc, #40] @ (8001e54 ) + 8001e2a: 2300 movs r3, #0 + 8001e2c: e001 b.n 8001e32 + +08001e2e : + 8001e2e: 6013 str r3, [r2, #0] + 8001e30: 3204 adds r2, #4 + +08001e32 : + 8001e32: 42a2 cmp r2, r4 + 8001e34: d3fb bcc.n 8001e2e + 8001e36: f009 fa93 bl 800b360 <__libc_init_array> + 8001e3a: f7fe fd75 bl 8000928
+ 8001e3e: 4770 bx lr + 8001e40: 20020000 .word 0x20020000 + 8001e44: 20000000 .word 0x20000000 + 8001e48: 200001a0 .word 0x200001a0 + 8001e4c: 0800b448 .word 0x0800b448 + 8001e50: 200001a0 .word 0x200001a0 + 8001e54: 2000175c .word 0x2000175c + +08001e58 : + 8001e58: e7fe b.n 8001e58 + ... + +08001e5c : + 8001e5c: b580 push {r7, lr} + 8001e5e: af00 add r7, sp, #0 + 8001e60: 4b0e ldr r3, [pc, #56] @ (8001e9c ) + 8001e62: 681b ldr r3, [r3, #0] + 8001e64: 4a0d ldr r2, [pc, #52] @ (8001e9c ) + 8001e66: f443 7300 orr.w r3, r3, #512 @ 0x200 + 8001e6a: 6013 str r3, [r2, #0] + 8001e6c: 4b0b ldr r3, [pc, #44] @ (8001e9c ) + 8001e6e: 681b ldr r3, [r3, #0] + 8001e70: 4a0a ldr r2, [pc, #40] @ (8001e9c ) + 8001e72: f443 6380 orr.w r3, r3, #1024 @ 0x400 + 8001e76: 6013 str r3, [r2, #0] + 8001e78: 4b08 ldr r3, [pc, #32] @ (8001e9c ) + 8001e7a: 681b ldr r3, [r3, #0] + 8001e7c: 4a07 ldr r2, [pc, #28] @ (8001e9c ) + 8001e7e: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8001e82: 6013 str r3, [r2, #0] + 8001e84: 2003 movs r0, #3 + 8001e86: f000 f94f bl 8002128 + 8001e8a: 200f movs r0, #15 + 8001e8c: f000 f808 bl 8001ea0 + 8001e90: f7ff fa18 bl 80012c4 + 8001e94: 2300 movs r3, #0 + 8001e96: 4618 mov r0, r3 + 8001e98: bd80 pop {r7, pc} + 8001e9a: bf00 nop + 8001e9c: 40023c00 .word 0x40023c00 + +08001ea0 : + 8001ea0: b580 push {r7, lr} + 8001ea2: b082 sub sp, #8 + 8001ea4: af00 add r7, sp, #0 + 8001ea6: 6078 str r0, [r7, #4] + 8001ea8: 4b12 ldr r3, [pc, #72] @ (8001ef4 ) + 8001eaa: 681a ldr r2, [r3, #0] + 8001eac: 4b12 ldr r3, [pc, #72] @ (8001ef8 ) + 8001eae: 781b ldrb r3, [r3, #0] + 8001eb0: 4619 mov r1, r3 + 8001eb2: f44f 737a mov.w r3, #1000 @ 0x3e8 + 8001eb6: fbb3 f3f1 udiv r3, r3, r1 + 8001eba: fbb2 f3f3 udiv r3, r2, r3 + 8001ebe: 4618 mov r0, r3 + 8001ec0: f000 f967 bl 8002192 + 8001ec4: 4603 mov r3, r0 + 8001ec6: 2b00 cmp r3, #0 + 8001ec8: d001 beq.n 8001ece + 8001eca: 2301 movs r3, #1 + 8001ecc: e00e b.n 8001eec + 8001ece: 687b ldr r3, [r7, #4] + 8001ed0: 2b0f cmp r3, #15 + 8001ed2: d80a bhi.n 8001eea + 8001ed4: 2200 movs r2, #0 + 8001ed6: 6879 ldr r1, [r7, #4] + 8001ed8: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8001edc: f000 f92f bl 800213e + 8001ee0: 4a06 ldr r2, [pc, #24] @ (8001efc ) + 8001ee2: 687b ldr r3, [r7, #4] + 8001ee4: 6013 str r3, [r2, #0] + 8001ee6: 2300 movs r3, #0 + 8001ee8: e000 b.n 8001eec + 8001eea: 2301 movs r3, #1 + 8001eec: 4618 mov r0, r3 + 8001eee: 3708 adds r7, #8 + 8001ef0: 46bd mov sp, r7 + 8001ef2: bd80 pop {r7, pc} + 8001ef4: 20000090 .word 0x20000090 + 8001ef8: 20000098 .word 0x20000098 + 8001efc: 20000094 .word 0x20000094 + +08001f00 : + 8001f00: b480 push {r7} + 8001f02: af00 add r7, sp, #0 + 8001f04: 4b06 ldr r3, [pc, #24] @ (8001f20 ) + 8001f06: 781b ldrb r3, [r3, #0] + 8001f08: 461a mov r2, r3 + 8001f0a: 4b06 ldr r3, [pc, #24] @ (8001f24 ) + 8001f0c: 681b ldr r3, [r3, #0] + 8001f0e: 4413 add r3, r2 + 8001f10: 4a04 ldr r2, [pc, #16] @ (8001f24 ) + 8001f12: 6013 str r3, [r2, #0] + 8001f14: bf00 nop + 8001f16: 46bd mov sp, r7 + 8001f18: f85d 7b04 ldr.w r7, [sp], #4 + 8001f1c: 4770 bx lr + 8001f1e: bf00 nop + 8001f20: 20000098 .word 0x20000098 + 8001f24: 20000d80 .word 0x20000d80 + +08001f28 : + 8001f28: b480 push {r7} + 8001f2a: af00 add r7, sp, #0 + 8001f2c: 4b03 ldr r3, [pc, #12] @ (8001f3c ) + 8001f2e: 681b ldr r3, [r3, #0] + 8001f30: 4618 mov r0, r3 + 8001f32: 46bd mov sp, r7 + 8001f34: f85d 7b04 ldr.w r7, [sp], #4 + 8001f38: 4770 bx lr + 8001f3a: bf00 nop + 8001f3c: 20000d80 .word 0x20000d80 + +08001f40 : + 8001f40: b580 push {r7, lr} + 8001f42: b084 sub sp, #16 + 8001f44: af00 add r7, sp, #0 + 8001f46: 6078 str r0, [r7, #4] + 8001f48: f7ff ffee bl 8001f28 + 8001f4c: 60b8 str r0, [r7, #8] + 8001f4e: 687b ldr r3, [r7, #4] + 8001f50: 60fb str r3, [r7, #12] + 8001f52: 68fb ldr r3, [r7, #12] + 8001f54: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 8001f58: d005 beq.n 8001f66 + 8001f5a: 4b0a ldr r3, [pc, #40] @ (8001f84 ) + 8001f5c: 781b ldrb r3, [r3, #0] + 8001f5e: 461a mov r2, r3 + 8001f60: 68fb ldr r3, [r7, #12] + 8001f62: 4413 add r3, r2 + 8001f64: 60fb str r3, [r7, #12] + 8001f66: bf00 nop + 8001f68: f7ff ffde bl 8001f28 + 8001f6c: 4602 mov r2, r0 + 8001f6e: 68bb ldr r3, [r7, #8] + 8001f70: 1ad3 subs r3, r2, r3 + 8001f72: 68fa ldr r2, [r7, #12] + 8001f74: 429a cmp r2, r3 + 8001f76: d8f7 bhi.n 8001f68 + 8001f78: bf00 nop + 8001f7a: bf00 nop + 8001f7c: 3710 adds r7, #16 + 8001f7e: 46bd mov sp, r7 + 8001f80: bd80 pop {r7, pc} + 8001f82: bf00 nop + 8001f84: 20000098 .word 0x20000098 + +08001f88 <__NVIC_SetPriorityGrouping>: + 8001f88: b480 push {r7} + 8001f8a: b085 sub sp, #20 + 8001f8c: af00 add r7, sp, #0 + 8001f8e: 6078 str r0, [r7, #4] + 8001f90: 687b ldr r3, [r7, #4] + 8001f92: f003 0307 and.w r3, r3, #7 + 8001f96: 60fb str r3, [r7, #12] + 8001f98: 4b0c ldr r3, [pc, #48] @ (8001fcc <__NVIC_SetPriorityGrouping+0x44>) + 8001f9a: 68db ldr r3, [r3, #12] + 8001f9c: 60bb str r3, [r7, #8] + 8001f9e: 68ba ldr r2, [r7, #8] + 8001fa0: f64f 03ff movw r3, #63743 @ 0xf8ff + 8001fa4: 4013 ands r3, r2 + 8001fa6: 60bb str r3, [r7, #8] + 8001fa8: 68fb ldr r3, [r7, #12] + 8001faa: 021a lsls r2, r3, #8 + 8001fac: 68bb ldr r3, [r7, #8] + 8001fae: 4313 orrs r3, r2 + 8001fb0: f043 63bf orr.w r3, r3, #100139008 @ 0x5f80000 + 8001fb4: f443 3300 orr.w r3, r3, #131072 @ 0x20000 + 8001fb8: 60bb str r3, [r7, #8] + 8001fba: 4a04 ldr r2, [pc, #16] @ (8001fcc <__NVIC_SetPriorityGrouping+0x44>) + 8001fbc: 68bb ldr r3, [r7, #8] + 8001fbe: 60d3 str r3, [r2, #12] + 8001fc0: bf00 nop + 8001fc2: 3714 adds r7, #20 + 8001fc4: 46bd mov sp, r7 + 8001fc6: f85d 7b04 ldr.w r7, [sp], #4 + 8001fca: 4770 bx lr + 8001fcc: e000ed00 .word 0xe000ed00 + +08001fd0 <__NVIC_GetPriorityGrouping>: + 8001fd0: b480 push {r7} + 8001fd2: af00 add r7, sp, #0 + 8001fd4: 4b04 ldr r3, [pc, #16] @ (8001fe8 <__NVIC_GetPriorityGrouping+0x18>) + 8001fd6: 68db ldr r3, [r3, #12] + 8001fd8: 0a1b lsrs r3, r3, #8 + 8001fda: f003 0307 and.w r3, r3, #7 + 8001fde: 4618 mov r0, r3 + 8001fe0: 46bd mov sp, r7 + 8001fe2: f85d 7b04 ldr.w r7, [sp], #4 + 8001fe6: 4770 bx lr + 8001fe8: e000ed00 .word 0xe000ed00 + +08001fec <__NVIC_EnableIRQ>: + 8001fec: b480 push {r7} + 8001fee: b083 sub sp, #12 + 8001ff0: af00 add r7, sp, #0 + 8001ff2: 4603 mov r3, r0 + 8001ff4: 71fb strb r3, [r7, #7] + 8001ff6: f997 3007 ldrsb.w r3, [r7, #7] + 8001ffa: 2b00 cmp r3, #0 + 8001ffc: db0b blt.n 8002016 <__NVIC_EnableIRQ+0x2a> + 8001ffe: 79fb ldrb r3, [r7, #7] + 8002000: f003 021f and.w r2, r3, #31 + 8002004: 4907 ldr r1, [pc, #28] @ (8002024 <__NVIC_EnableIRQ+0x38>) + 8002006: f997 3007 ldrsb.w r3, [r7, #7] + 800200a: 095b lsrs r3, r3, #5 + 800200c: 2001 movs r0, #1 + 800200e: fa00 f202 lsl.w r2, r0, r2 + 8002012: f841 2023 str.w r2, [r1, r3, lsl #2] + 8002016: bf00 nop + 8002018: 370c adds r7, #12 + 800201a: 46bd mov sp, r7 + 800201c: f85d 7b04 ldr.w r7, [sp], #4 + 8002020: 4770 bx lr + 8002022: bf00 nop + 8002024: e000e100 .word 0xe000e100 + +08002028 <__NVIC_SetPriority>: + 8002028: b480 push {r7} + 800202a: b083 sub sp, #12 + 800202c: af00 add r7, sp, #0 + 800202e: 4603 mov r3, r0 + 8002030: 6039 str r1, [r7, #0] + 8002032: 71fb strb r3, [r7, #7] + 8002034: f997 3007 ldrsb.w r3, [r7, #7] + 8002038: 2b00 cmp r3, #0 + 800203a: db0a blt.n 8002052 <__NVIC_SetPriority+0x2a> + 800203c: 683b ldr r3, [r7, #0] + 800203e: b2da uxtb r2, r3 + 8002040: 490c ldr r1, [pc, #48] @ (8002074 <__NVIC_SetPriority+0x4c>) + 8002042: f997 3007 ldrsb.w r3, [r7, #7] + 8002046: 0112 lsls r2, r2, #4 + 8002048: b2d2 uxtb r2, r2 + 800204a: 440b add r3, r1 + 800204c: f883 2300 strb.w r2, [r3, #768] @ 0x300 + 8002050: e00a b.n 8002068 <__NVIC_SetPriority+0x40> + 8002052: 683b ldr r3, [r7, #0] + 8002054: b2da uxtb r2, r3 + 8002056: 4908 ldr r1, [pc, #32] @ (8002078 <__NVIC_SetPriority+0x50>) + 8002058: 79fb ldrb r3, [r7, #7] + 800205a: f003 030f and.w r3, r3, #15 + 800205e: 3b04 subs r3, #4 + 8002060: 0112 lsls r2, r2, #4 + 8002062: b2d2 uxtb r2, r2 + 8002064: 440b add r3, r1 + 8002066: 761a strb r2, [r3, #24] + 8002068: bf00 nop + 800206a: 370c adds r7, #12 + 800206c: 46bd mov sp, r7 + 800206e: f85d 7b04 ldr.w r7, [sp], #4 + 8002072: 4770 bx lr + 8002074: e000e100 .word 0xe000e100 + 8002078: e000ed00 .word 0xe000ed00 + +0800207c : + 800207c: b480 push {r7} + 800207e: b089 sub sp, #36 @ 0x24 + 8002080: af00 add r7, sp, #0 + 8002082: 60f8 str r0, [r7, #12] + 8002084: 60b9 str r1, [r7, #8] + 8002086: 607a str r2, [r7, #4] + 8002088: 68fb ldr r3, [r7, #12] + 800208a: f003 0307 and.w r3, r3, #7 + 800208e: 61fb str r3, [r7, #28] + 8002090: 69fb ldr r3, [r7, #28] + 8002092: f1c3 0307 rsb r3, r3, #7 + 8002096: 2b04 cmp r3, #4 + 8002098: bf28 it cs + 800209a: 2304 movcs r3, #4 + 800209c: 61bb str r3, [r7, #24] + 800209e: 69fb ldr r3, [r7, #28] + 80020a0: 3304 adds r3, #4 + 80020a2: 2b06 cmp r3, #6 + 80020a4: d902 bls.n 80020ac + 80020a6: 69fb ldr r3, [r7, #28] + 80020a8: 3b03 subs r3, #3 + 80020aa: e000 b.n 80020ae + 80020ac: 2300 movs r3, #0 + 80020ae: 617b str r3, [r7, #20] + 80020b0: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 80020b4: 69bb ldr r3, [r7, #24] + 80020b6: fa02 f303 lsl.w r3, r2, r3 + 80020ba: 43da mvns r2, r3 + 80020bc: 68bb ldr r3, [r7, #8] + 80020be: 401a ands r2, r3 + 80020c0: 697b ldr r3, [r7, #20] + 80020c2: 409a lsls r2, r3 + 80020c4: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 80020c8: 697b ldr r3, [r7, #20] + 80020ca: fa01 f303 lsl.w r3, r1, r3 + 80020ce: 43d9 mvns r1, r3 + 80020d0: 687b ldr r3, [r7, #4] + 80020d2: 400b ands r3, r1 + 80020d4: 4313 orrs r3, r2 + 80020d6: 4618 mov r0, r3 + 80020d8: 3724 adds r7, #36 @ 0x24 + 80020da: 46bd mov sp, r7 + 80020dc: f85d 7b04 ldr.w r7, [sp], #4 + 80020e0: 4770 bx lr + ... + +080020e4 : + 80020e4: b580 push {r7, lr} + 80020e6: b082 sub sp, #8 + 80020e8: af00 add r7, sp, #0 + 80020ea: 6078 str r0, [r7, #4] + 80020ec: 687b ldr r3, [r7, #4] + 80020ee: 3b01 subs r3, #1 + 80020f0: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 + 80020f4: d301 bcc.n 80020fa + 80020f6: 2301 movs r3, #1 + 80020f8: e00f b.n 800211a + 80020fa: 4a0a ldr r2, [pc, #40] @ (8002124 ) + 80020fc: 687b ldr r3, [r7, #4] + 80020fe: 3b01 subs r3, #1 + 8002100: 6053 str r3, [r2, #4] + 8002102: 210f movs r1, #15 + 8002104: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8002108: f7ff ff8e bl 8002028 <__NVIC_SetPriority> + 800210c: 4b05 ldr r3, [pc, #20] @ (8002124 ) + 800210e: 2200 movs r2, #0 + 8002110: 609a str r2, [r3, #8] + 8002112: 4b04 ldr r3, [pc, #16] @ (8002124 ) + 8002114: 2207 movs r2, #7 + 8002116: 601a str r2, [r3, #0] + 8002118: 2300 movs r3, #0 + 800211a: 4618 mov r0, r3 + 800211c: 3708 adds r7, #8 + 800211e: 46bd mov sp, r7 + 8002120: bd80 pop {r7, pc} + 8002122: bf00 nop + 8002124: e000e010 .word 0xe000e010 + +08002128 : + 8002128: b580 push {r7, lr} + 800212a: b082 sub sp, #8 + 800212c: af00 add r7, sp, #0 + 800212e: 6078 str r0, [r7, #4] + 8002130: 6878 ldr r0, [r7, #4] + 8002132: f7ff ff29 bl 8001f88 <__NVIC_SetPriorityGrouping> + 8002136: bf00 nop + 8002138: 3708 adds r7, #8 + 800213a: 46bd mov sp, r7 + 800213c: bd80 pop {r7, pc} + +0800213e : + 800213e: b580 push {r7, lr} + 8002140: b086 sub sp, #24 + 8002142: af00 add r7, sp, #0 + 8002144: 4603 mov r3, r0 + 8002146: 60b9 str r1, [r7, #8] + 8002148: 607a str r2, [r7, #4] + 800214a: 73fb strb r3, [r7, #15] + 800214c: 2300 movs r3, #0 + 800214e: 617b str r3, [r7, #20] + 8002150: f7ff ff3e bl 8001fd0 <__NVIC_GetPriorityGrouping> + 8002154: 6178 str r0, [r7, #20] + 8002156: 687a ldr r2, [r7, #4] + 8002158: 68b9 ldr r1, [r7, #8] + 800215a: 6978 ldr r0, [r7, #20] + 800215c: f7ff ff8e bl 800207c + 8002160: 4602 mov r2, r0 + 8002162: f997 300f ldrsb.w r3, [r7, #15] + 8002166: 4611 mov r1, r2 + 8002168: 4618 mov r0, r3 + 800216a: f7ff ff5d bl 8002028 <__NVIC_SetPriority> + 800216e: bf00 nop + 8002170: 3718 adds r7, #24 + 8002172: 46bd mov sp, r7 + 8002174: bd80 pop {r7, pc} + +08002176 : + 8002176: b580 push {r7, lr} + 8002178: b082 sub sp, #8 + 800217a: af00 add r7, sp, #0 + 800217c: 4603 mov r3, r0 + 800217e: 71fb strb r3, [r7, #7] + 8002180: f997 3007 ldrsb.w r3, [r7, #7] + 8002184: 4618 mov r0, r3 + 8002186: f7ff ff31 bl 8001fec <__NVIC_EnableIRQ> + 800218a: bf00 nop + 800218c: 3708 adds r7, #8 + 800218e: 46bd mov sp, r7 + 8002190: bd80 pop {r7, pc} + +08002192 : + 8002192: b580 push {r7, lr} + 8002194: b082 sub sp, #8 + 8002196: af00 add r7, sp, #0 + 8002198: 6078 str r0, [r7, #4] + 800219a: 6878 ldr r0, [r7, #4] + 800219c: f7ff ffa2 bl 80020e4 + 80021a0: 4603 mov r3, r0 + 80021a2: 4618 mov r0, r3 + 80021a4: 3708 adds r7, #8 + 80021a6: 46bd mov sp, r7 + 80021a8: bd80 pop {r7, pc} + ... + +080021ac : + 80021ac: b580 push {r7, lr} + 80021ae: b086 sub sp, #24 + 80021b0: af00 add r7, sp, #0 + 80021b2: 6078 str r0, [r7, #4] + 80021b4: 2300 movs r3, #0 + 80021b6: 617b str r3, [r7, #20] + 80021b8: f7ff feb6 bl 8001f28 + 80021bc: 6138 str r0, [r7, #16] + 80021be: 687b ldr r3, [r7, #4] + 80021c0: 2b00 cmp r3, #0 + 80021c2: d101 bne.n 80021c8 + 80021c4: 2301 movs r3, #1 + 80021c6: e099 b.n 80022fc + 80021c8: 687b ldr r3, [r7, #4] + 80021ca: 2202 movs r2, #2 + 80021cc: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 80021d0: 687b ldr r3, [r7, #4] + 80021d2: 2200 movs r2, #0 + 80021d4: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 80021d8: 687b ldr r3, [r7, #4] + 80021da: 681b ldr r3, [r3, #0] + 80021dc: 681a ldr r2, [r3, #0] + 80021de: 687b ldr r3, [r7, #4] + 80021e0: 681b ldr r3, [r3, #0] + 80021e2: f022 0201 bic.w r2, r2, #1 + 80021e6: 601a str r2, [r3, #0] + 80021e8: e00f b.n 800220a + 80021ea: f7ff fe9d bl 8001f28 + 80021ee: 4602 mov r2, r0 + 80021f0: 693b ldr r3, [r7, #16] + 80021f2: 1ad3 subs r3, r2, r3 + 80021f4: 2b05 cmp r3, #5 + 80021f6: d908 bls.n 800220a + 80021f8: 687b ldr r3, [r7, #4] + 80021fa: 2220 movs r2, #32 + 80021fc: 655a str r2, [r3, #84] @ 0x54 + 80021fe: 687b ldr r3, [r7, #4] + 8002200: 2203 movs r2, #3 + 8002202: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 8002206: 2303 movs r3, #3 + 8002208: e078 b.n 80022fc + 800220a: 687b ldr r3, [r7, #4] + 800220c: 681b ldr r3, [r3, #0] + 800220e: 681b ldr r3, [r3, #0] + 8002210: f003 0301 and.w r3, r3, #1 + 8002214: 2b00 cmp r3, #0 + 8002216: d1e8 bne.n 80021ea + 8002218: 687b ldr r3, [r7, #4] + 800221a: 681b ldr r3, [r3, #0] + 800221c: 681b ldr r3, [r3, #0] + 800221e: 617b str r3, [r7, #20] + 8002220: 697a ldr r2, [r7, #20] + 8002222: 4b38 ldr r3, [pc, #224] @ (8002304 ) + 8002224: 4013 ands r3, r2 + 8002226: 617b str r3, [r7, #20] + 8002228: 687b ldr r3, [r7, #4] + 800222a: 685a ldr r2, [r3, #4] + 800222c: 687b ldr r3, [r7, #4] + 800222e: 689b ldr r3, [r3, #8] + 8002230: 431a orrs r2, r3 + 8002232: 687b ldr r3, [r7, #4] + 8002234: 68db ldr r3, [r3, #12] + 8002236: 431a orrs r2, r3 + 8002238: 687b ldr r3, [r7, #4] + 800223a: 691b ldr r3, [r3, #16] + 800223c: 431a orrs r2, r3 + 800223e: 687b ldr r3, [r7, #4] + 8002240: 695b ldr r3, [r3, #20] + 8002242: 431a orrs r2, r3 + 8002244: 687b ldr r3, [r7, #4] + 8002246: 699b ldr r3, [r3, #24] + 8002248: 431a orrs r2, r3 + 800224a: 687b ldr r3, [r7, #4] + 800224c: 69db ldr r3, [r3, #28] + 800224e: 431a orrs r2, r3 + 8002250: 687b ldr r3, [r7, #4] + 8002252: 6a1b ldr r3, [r3, #32] + 8002254: 4313 orrs r3, r2 + 8002256: 697a ldr r2, [r7, #20] + 8002258: 4313 orrs r3, r2 + 800225a: 617b str r3, [r7, #20] + 800225c: 687b ldr r3, [r7, #4] + 800225e: 6a5b ldr r3, [r3, #36] @ 0x24 + 8002260: 2b04 cmp r3, #4 + 8002262: d107 bne.n 8002274 + 8002264: 687b ldr r3, [r7, #4] + 8002266: 6ada ldr r2, [r3, #44] @ 0x2c + 8002268: 687b ldr r3, [r7, #4] + 800226a: 6b1b ldr r3, [r3, #48] @ 0x30 + 800226c: 4313 orrs r3, r2 + 800226e: 697a ldr r2, [r7, #20] + 8002270: 4313 orrs r3, r2 + 8002272: 617b str r3, [r7, #20] + 8002274: 687b ldr r3, [r7, #4] + 8002276: 681b ldr r3, [r3, #0] + 8002278: 697a ldr r2, [r7, #20] + 800227a: 601a str r2, [r3, #0] + 800227c: 687b ldr r3, [r7, #4] + 800227e: 681b ldr r3, [r3, #0] + 8002280: 695b ldr r3, [r3, #20] + 8002282: 617b str r3, [r7, #20] + 8002284: 697b ldr r3, [r7, #20] + 8002286: f023 0307 bic.w r3, r3, #7 + 800228a: 617b str r3, [r7, #20] + 800228c: 687b ldr r3, [r7, #4] + 800228e: 6a5b ldr r3, [r3, #36] @ 0x24 + 8002290: 697a ldr r2, [r7, #20] + 8002292: 4313 orrs r3, r2 + 8002294: 617b str r3, [r7, #20] + 8002296: 687b ldr r3, [r7, #4] + 8002298: 6a5b ldr r3, [r3, #36] @ 0x24 + 800229a: 2b04 cmp r3, #4 + 800229c: d117 bne.n 80022ce + 800229e: 687b ldr r3, [r7, #4] + 80022a0: 6a9b ldr r3, [r3, #40] @ 0x28 + 80022a2: 697a ldr r2, [r7, #20] + 80022a4: 4313 orrs r3, r2 + 80022a6: 617b str r3, [r7, #20] + 80022a8: 687b ldr r3, [r7, #4] + 80022aa: 6adb ldr r3, [r3, #44] @ 0x2c + 80022ac: 2b00 cmp r3, #0 + 80022ae: d00e beq.n 80022ce + 80022b0: 6878 ldr r0, [r7, #4] + 80022b2: f000 fb01 bl 80028b8 + 80022b6: 4603 mov r3, r0 + 80022b8: 2b00 cmp r3, #0 + 80022ba: d008 beq.n 80022ce + 80022bc: 687b ldr r3, [r7, #4] + 80022be: 2240 movs r2, #64 @ 0x40 + 80022c0: 655a str r2, [r3, #84] @ 0x54 + 80022c2: 687b ldr r3, [r7, #4] + 80022c4: 2201 movs r2, #1 + 80022c6: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 80022ca: 2301 movs r3, #1 + 80022cc: e016 b.n 80022fc + 80022ce: 687b ldr r3, [r7, #4] + 80022d0: 681b ldr r3, [r3, #0] + 80022d2: 697a ldr r2, [r7, #20] + 80022d4: 615a str r2, [r3, #20] + 80022d6: 6878 ldr r0, [r7, #4] + 80022d8: f000 fab8 bl 800284c + 80022dc: 4603 mov r3, r0 + 80022de: 60fb str r3, [r7, #12] + 80022e0: 687b ldr r3, [r7, #4] + 80022e2: 6ddb ldr r3, [r3, #92] @ 0x5c + 80022e4: 223f movs r2, #63 @ 0x3f + 80022e6: 409a lsls r2, r3 + 80022e8: 68fb ldr r3, [r7, #12] + 80022ea: 609a str r2, [r3, #8] + 80022ec: 687b ldr r3, [r7, #4] + 80022ee: 2200 movs r2, #0 + 80022f0: 655a str r2, [r3, #84] @ 0x54 + 80022f2: 687b ldr r3, [r7, #4] + 80022f4: 2201 movs r2, #1 + 80022f6: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 80022fa: 2300 movs r3, #0 + 80022fc: 4618 mov r0, r3 + 80022fe: 3718 adds r7, #24 + 8002300: 46bd mov sp, r7 + 8002302: bd80 pop {r7, pc} + 8002304: f010803f .word 0xf010803f + +08002308 : + 8002308: b580 push {r7, lr} + 800230a: b086 sub sp, #24 + 800230c: af00 add r7, sp, #0 + 800230e: 60f8 str r0, [r7, #12] + 8002310: 60b9 str r1, [r7, #8] + 8002312: 607a str r2, [r7, #4] + 8002314: 603b str r3, [r7, #0] + 8002316: 2300 movs r3, #0 + 8002318: 75fb strb r3, [r7, #23] + 800231a: 68fb ldr r3, [r7, #12] + 800231c: 6d9b ldr r3, [r3, #88] @ 0x58 + 800231e: 613b str r3, [r7, #16] + 8002320: 68fb ldr r3, [r7, #12] + 8002322: f893 3034 ldrb.w r3, [r3, #52] @ 0x34 + 8002326: 2b01 cmp r3, #1 + 8002328: d101 bne.n 800232e + 800232a: 2302 movs r3, #2 + 800232c: e040 b.n 80023b0 + 800232e: 68fb ldr r3, [r7, #12] + 8002330: 2201 movs r2, #1 + 8002332: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 8002336: 68fb ldr r3, [r7, #12] + 8002338: f893 3035 ldrb.w r3, [r3, #53] @ 0x35 + 800233c: b2db uxtb r3, r3 + 800233e: 2b01 cmp r3, #1 + 8002340: d12f bne.n 80023a2 + 8002342: 68fb ldr r3, [r7, #12] + 8002344: 2202 movs r2, #2 + 8002346: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 800234a: 68fb ldr r3, [r7, #12] + 800234c: 2200 movs r2, #0 + 800234e: 655a str r2, [r3, #84] @ 0x54 + 8002350: 683b ldr r3, [r7, #0] + 8002352: 687a ldr r2, [r7, #4] + 8002354: 68b9 ldr r1, [r7, #8] + 8002356: 68f8 ldr r0, [r7, #12] + 8002358: f000 fa4a bl 80027f0 + 800235c: 68fb ldr r3, [r7, #12] + 800235e: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002360: 223f movs r2, #63 @ 0x3f + 8002362: 409a lsls r2, r3 + 8002364: 693b ldr r3, [r7, #16] + 8002366: 609a str r2, [r3, #8] + 8002368: 68fb ldr r3, [r7, #12] + 800236a: 681b ldr r3, [r3, #0] + 800236c: 681a ldr r2, [r3, #0] + 800236e: 68fb ldr r3, [r7, #12] + 8002370: 681b ldr r3, [r3, #0] + 8002372: f042 0216 orr.w r2, r2, #22 + 8002376: 601a str r2, [r3, #0] + 8002378: 68fb ldr r3, [r7, #12] + 800237a: 6c1b ldr r3, [r3, #64] @ 0x40 + 800237c: 2b00 cmp r3, #0 + 800237e: d007 beq.n 8002390 + 8002380: 68fb ldr r3, [r7, #12] + 8002382: 681b ldr r3, [r3, #0] + 8002384: 681a ldr r2, [r3, #0] + 8002386: 68fb ldr r3, [r7, #12] + 8002388: 681b ldr r3, [r3, #0] + 800238a: f042 0208 orr.w r2, r2, #8 + 800238e: 601a str r2, [r3, #0] + 8002390: 68fb ldr r3, [r7, #12] + 8002392: 681b ldr r3, [r3, #0] + 8002394: 681a ldr r2, [r3, #0] + 8002396: 68fb ldr r3, [r7, #12] + 8002398: 681b ldr r3, [r3, #0] + 800239a: f042 0201 orr.w r2, r2, #1 + 800239e: 601a str r2, [r3, #0] + 80023a0: e005 b.n 80023ae + 80023a2: 68fb ldr r3, [r7, #12] + 80023a4: 2200 movs r2, #0 + 80023a6: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 80023aa: 2302 movs r3, #2 + 80023ac: 75fb strb r3, [r7, #23] + 80023ae: 7dfb ldrb r3, [r7, #23] + 80023b0: 4618 mov r0, r3 + 80023b2: 3718 adds r7, #24 + 80023b4: 46bd mov sp, r7 + 80023b6: bd80 pop {r7, pc} + +080023b8 : + 80023b8: b580 push {r7, lr} + 80023ba: b084 sub sp, #16 + 80023bc: af00 add r7, sp, #0 + 80023be: 6078 str r0, [r7, #4] + 80023c0: 687b ldr r3, [r7, #4] + 80023c2: 6d9b ldr r3, [r3, #88] @ 0x58 + 80023c4: 60fb str r3, [r7, #12] + 80023c6: f7ff fdaf bl 8001f28 + 80023ca: 60b8 str r0, [r7, #8] + 80023cc: 687b ldr r3, [r7, #4] + 80023ce: f893 3035 ldrb.w r3, [r3, #53] @ 0x35 + 80023d2: b2db uxtb r3, r3 + 80023d4: 2b02 cmp r3, #2 + 80023d6: d008 beq.n 80023ea + 80023d8: 687b ldr r3, [r7, #4] + 80023da: 2280 movs r2, #128 @ 0x80 + 80023dc: 655a str r2, [r3, #84] @ 0x54 + 80023de: 687b ldr r3, [r7, #4] + 80023e0: 2200 movs r2, #0 + 80023e2: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 80023e6: 2301 movs r3, #1 + 80023e8: e052 b.n 8002490 + 80023ea: 687b ldr r3, [r7, #4] + 80023ec: 681b ldr r3, [r3, #0] + 80023ee: 681a ldr r2, [r3, #0] + 80023f0: 687b ldr r3, [r7, #4] + 80023f2: 681b ldr r3, [r3, #0] + 80023f4: f022 0216 bic.w r2, r2, #22 + 80023f8: 601a str r2, [r3, #0] + 80023fa: 687b ldr r3, [r7, #4] + 80023fc: 681b ldr r3, [r3, #0] + 80023fe: 695a ldr r2, [r3, #20] + 8002400: 687b ldr r3, [r7, #4] + 8002402: 681b ldr r3, [r3, #0] + 8002404: f022 0280 bic.w r2, r2, #128 @ 0x80 + 8002408: 615a str r2, [r3, #20] + 800240a: 687b ldr r3, [r7, #4] + 800240c: 6c1b ldr r3, [r3, #64] @ 0x40 + 800240e: 2b00 cmp r3, #0 + 8002410: d103 bne.n 800241a + 8002412: 687b ldr r3, [r7, #4] + 8002414: 6c9b ldr r3, [r3, #72] @ 0x48 + 8002416: 2b00 cmp r3, #0 + 8002418: d007 beq.n 800242a + 800241a: 687b ldr r3, [r7, #4] + 800241c: 681b ldr r3, [r3, #0] + 800241e: 681a ldr r2, [r3, #0] + 8002420: 687b ldr r3, [r7, #4] + 8002422: 681b ldr r3, [r3, #0] + 8002424: f022 0208 bic.w r2, r2, #8 + 8002428: 601a str r2, [r3, #0] + 800242a: 687b ldr r3, [r7, #4] + 800242c: 681b ldr r3, [r3, #0] + 800242e: 681a ldr r2, [r3, #0] + 8002430: 687b ldr r3, [r7, #4] + 8002432: 681b ldr r3, [r3, #0] + 8002434: f022 0201 bic.w r2, r2, #1 + 8002438: 601a str r2, [r3, #0] + 800243a: e013 b.n 8002464 + 800243c: f7ff fd74 bl 8001f28 + 8002440: 4602 mov r2, r0 + 8002442: 68bb ldr r3, [r7, #8] + 8002444: 1ad3 subs r3, r2, r3 + 8002446: 2b05 cmp r3, #5 + 8002448: d90c bls.n 8002464 + 800244a: 687b ldr r3, [r7, #4] + 800244c: 2220 movs r2, #32 + 800244e: 655a str r2, [r3, #84] @ 0x54 + 8002450: 687b ldr r3, [r7, #4] + 8002452: 2203 movs r2, #3 + 8002454: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 8002458: 687b ldr r3, [r7, #4] + 800245a: 2200 movs r2, #0 + 800245c: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 8002460: 2303 movs r3, #3 + 8002462: e015 b.n 8002490 + 8002464: 687b ldr r3, [r7, #4] + 8002466: 681b ldr r3, [r3, #0] + 8002468: 681b ldr r3, [r3, #0] + 800246a: f003 0301 and.w r3, r3, #1 + 800246e: 2b00 cmp r3, #0 + 8002470: d1e4 bne.n 800243c + 8002472: 687b ldr r3, [r7, #4] + 8002474: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002476: 223f movs r2, #63 @ 0x3f + 8002478: 409a lsls r2, r3 + 800247a: 68fb ldr r3, [r7, #12] + 800247c: 609a str r2, [r3, #8] + 800247e: 687b ldr r3, [r7, #4] + 8002480: 2201 movs r2, #1 + 8002482: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 8002486: 687b ldr r3, [r7, #4] + 8002488: 2200 movs r2, #0 + 800248a: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 800248e: 2300 movs r3, #0 + 8002490: 4618 mov r0, r3 + 8002492: 3710 adds r7, #16 + 8002494: 46bd mov sp, r7 + 8002496: bd80 pop {r7, pc} + +08002498 : + 8002498: b480 push {r7} + 800249a: b083 sub sp, #12 + 800249c: af00 add r7, sp, #0 + 800249e: 6078 str r0, [r7, #4] + 80024a0: 687b ldr r3, [r7, #4] + 80024a2: f893 3035 ldrb.w r3, [r3, #53] @ 0x35 + 80024a6: b2db uxtb r3, r3 + 80024a8: 2b02 cmp r3, #2 + 80024aa: d004 beq.n 80024b6 + 80024ac: 687b ldr r3, [r7, #4] + 80024ae: 2280 movs r2, #128 @ 0x80 + 80024b0: 655a str r2, [r3, #84] @ 0x54 + 80024b2: 2301 movs r3, #1 + 80024b4: e00c b.n 80024d0 + 80024b6: 687b ldr r3, [r7, #4] + 80024b8: 2205 movs r2, #5 + 80024ba: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 80024be: 687b ldr r3, [r7, #4] + 80024c0: 681b ldr r3, [r3, #0] + 80024c2: 681a ldr r2, [r3, #0] + 80024c4: 687b ldr r3, [r7, #4] + 80024c6: 681b ldr r3, [r3, #0] + 80024c8: f022 0201 bic.w r2, r2, #1 + 80024cc: 601a str r2, [r3, #0] + 80024ce: 2300 movs r3, #0 + 80024d0: 4618 mov r0, r3 + 80024d2: 370c adds r7, #12 + 80024d4: 46bd mov sp, r7 + 80024d6: f85d 7b04 ldr.w r7, [sp], #4 + 80024da: 4770 bx lr + +080024dc : + 80024dc: b580 push {r7, lr} + 80024de: b086 sub sp, #24 + 80024e0: af00 add r7, sp, #0 + 80024e2: 6078 str r0, [r7, #4] + 80024e4: 2300 movs r3, #0 + 80024e6: 60bb str r3, [r7, #8] + 80024e8: 4b8e ldr r3, [pc, #568] @ (8002724 ) + 80024ea: 681b ldr r3, [r3, #0] + 80024ec: 4a8e ldr r2, [pc, #568] @ (8002728 ) + 80024ee: fba2 2303 umull r2, r3, r2, r3 + 80024f2: 0a9b lsrs r3, r3, #10 + 80024f4: 617b str r3, [r7, #20] + 80024f6: 687b ldr r3, [r7, #4] + 80024f8: 6d9b ldr r3, [r3, #88] @ 0x58 + 80024fa: 613b str r3, [r7, #16] + 80024fc: 693b ldr r3, [r7, #16] + 80024fe: 681b ldr r3, [r3, #0] + 8002500: 60fb str r3, [r7, #12] + 8002502: 687b ldr r3, [r7, #4] + 8002504: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002506: 2208 movs r2, #8 + 8002508: 409a lsls r2, r3 + 800250a: 68fb ldr r3, [r7, #12] + 800250c: 4013 ands r3, r2 + 800250e: 2b00 cmp r3, #0 + 8002510: d01a beq.n 8002548 + 8002512: 687b ldr r3, [r7, #4] + 8002514: 681b ldr r3, [r3, #0] + 8002516: 681b ldr r3, [r3, #0] + 8002518: f003 0304 and.w r3, r3, #4 + 800251c: 2b00 cmp r3, #0 + 800251e: d013 beq.n 8002548 + 8002520: 687b ldr r3, [r7, #4] + 8002522: 681b ldr r3, [r3, #0] + 8002524: 681a ldr r2, [r3, #0] + 8002526: 687b ldr r3, [r7, #4] + 8002528: 681b ldr r3, [r3, #0] + 800252a: f022 0204 bic.w r2, r2, #4 + 800252e: 601a str r2, [r3, #0] + 8002530: 687b ldr r3, [r7, #4] + 8002532: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002534: 2208 movs r2, #8 + 8002536: 409a lsls r2, r3 + 8002538: 693b ldr r3, [r7, #16] + 800253a: 609a str r2, [r3, #8] + 800253c: 687b ldr r3, [r7, #4] + 800253e: 6d5b ldr r3, [r3, #84] @ 0x54 + 8002540: f043 0201 orr.w r2, r3, #1 + 8002544: 687b ldr r3, [r7, #4] + 8002546: 655a str r2, [r3, #84] @ 0x54 + 8002548: 687b ldr r3, [r7, #4] + 800254a: 6ddb ldr r3, [r3, #92] @ 0x5c + 800254c: 2201 movs r2, #1 + 800254e: 409a lsls r2, r3 + 8002550: 68fb ldr r3, [r7, #12] + 8002552: 4013 ands r3, r2 + 8002554: 2b00 cmp r3, #0 + 8002556: d012 beq.n 800257e + 8002558: 687b ldr r3, [r7, #4] + 800255a: 681b ldr r3, [r3, #0] + 800255c: 695b ldr r3, [r3, #20] + 800255e: f003 0380 and.w r3, r3, #128 @ 0x80 + 8002562: 2b00 cmp r3, #0 + 8002564: d00b beq.n 800257e + 8002566: 687b ldr r3, [r7, #4] + 8002568: 6ddb ldr r3, [r3, #92] @ 0x5c + 800256a: 2201 movs r2, #1 + 800256c: 409a lsls r2, r3 + 800256e: 693b ldr r3, [r7, #16] + 8002570: 609a str r2, [r3, #8] + 8002572: 687b ldr r3, [r7, #4] + 8002574: 6d5b ldr r3, [r3, #84] @ 0x54 + 8002576: f043 0202 orr.w r2, r3, #2 + 800257a: 687b ldr r3, [r7, #4] + 800257c: 655a str r2, [r3, #84] @ 0x54 + 800257e: 687b ldr r3, [r7, #4] + 8002580: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002582: 2204 movs r2, #4 + 8002584: 409a lsls r2, r3 + 8002586: 68fb ldr r3, [r7, #12] + 8002588: 4013 ands r3, r2 + 800258a: 2b00 cmp r3, #0 + 800258c: d012 beq.n 80025b4 + 800258e: 687b ldr r3, [r7, #4] + 8002590: 681b ldr r3, [r3, #0] + 8002592: 681b ldr r3, [r3, #0] + 8002594: f003 0302 and.w r3, r3, #2 + 8002598: 2b00 cmp r3, #0 + 800259a: d00b beq.n 80025b4 + 800259c: 687b ldr r3, [r7, #4] + 800259e: 6ddb ldr r3, [r3, #92] @ 0x5c + 80025a0: 2204 movs r2, #4 + 80025a2: 409a lsls r2, r3 + 80025a4: 693b ldr r3, [r7, #16] + 80025a6: 609a str r2, [r3, #8] + 80025a8: 687b ldr r3, [r7, #4] + 80025aa: 6d5b ldr r3, [r3, #84] @ 0x54 + 80025ac: f043 0204 orr.w r2, r3, #4 + 80025b0: 687b ldr r3, [r7, #4] + 80025b2: 655a str r2, [r3, #84] @ 0x54 + 80025b4: 687b ldr r3, [r7, #4] + 80025b6: 6ddb ldr r3, [r3, #92] @ 0x5c + 80025b8: 2210 movs r2, #16 + 80025ba: 409a lsls r2, r3 + 80025bc: 68fb ldr r3, [r7, #12] + 80025be: 4013 ands r3, r2 + 80025c0: 2b00 cmp r3, #0 + 80025c2: d043 beq.n 800264c + 80025c4: 687b ldr r3, [r7, #4] + 80025c6: 681b ldr r3, [r3, #0] + 80025c8: 681b ldr r3, [r3, #0] + 80025ca: f003 0308 and.w r3, r3, #8 + 80025ce: 2b00 cmp r3, #0 + 80025d0: d03c beq.n 800264c + 80025d2: 687b ldr r3, [r7, #4] + 80025d4: 6ddb ldr r3, [r3, #92] @ 0x5c + 80025d6: 2210 movs r2, #16 + 80025d8: 409a lsls r2, r3 + 80025da: 693b ldr r3, [r7, #16] + 80025dc: 609a str r2, [r3, #8] + 80025de: 687b ldr r3, [r7, #4] + 80025e0: 681b ldr r3, [r3, #0] + 80025e2: 681b ldr r3, [r3, #0] + 80025e4: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 80025e8: 2b00 cmp r3, #0 + 80025ea: d018 beq.n 800261e + 80025ec: 687b ldr r3, [r7, #4] + 80025ee: 681b ldr r3, [r3, #0] + 80025f0: 681b ldr r3, [r3, #0] + 80025f2: f403 2300 and.w r3, r3, #524288 @ 0x80000 + 80025f6: 2b00 cmp r3, #0 + 80025f8: d108 bne.n 800260c + 80025fa: 687b ldr r3, [r7, #4] + 80025fc: 6c1b ldr r3, [r3, #64] @ 0x40 + 80025fe: 2b00 cmp r3, #0 + 8002600: d024 beq.n 800264c + 8002602: 687b ldr r3, [r7, #4] + 8002604: 6c1b ldr r3, [r3, #64] @ 0x40 + 8002606: 6878 ldr r0, [r7, #4] + 8002608: 4798 blx r3 + 800260a: e01f b.n 800264c + 800260c: 687b ldr r3, [r7, #4] + 800260e: 6c9b ldr r3, [r3, #72] @ 0x48 + 8002610: 2b00 cmp r3, #0 + 8002612: d01b beq.n 800264c + 8002614: 687b ldr r3, [r7, #4] + 8002616: 6c9b ldr r3, [r3, #72] @ 0x48 + 8002618: 6878 ldr r0, [r7, #4] + 800261a: 4798 blx r3 + 800261c: e016 b.n 800264c + 800261e: 687b ldr r3, [r7, #4] + 8002620: 681b ldr r3, [r3, #0] + 8002622: 681b ldr r3, [r3, #0] + 8002624: f403 7380 and.w r3, r3, #256 @ 0x100 + 8002628: 2b00 cmp r3, #0 + 800262a: d107 bne.n 800263c + 800262c: 687b ldr r3, [r7, #4] + 800262e: 681b ldr r3, [r3, #0] + 8002630: 681a ldr r2, [r3, #0] + 8002632: 687b ldr r3, [r7, #4] + 8002634: 681b ldr r3, [r3, #0] + 8002636: f022 0208 bic.w r2, r2, #8 + 800263a: 601a str r2, [r3, #0] + 800263c: 687b ldr r3, [r7, #4] + 800263e: 6c1b ldr r3, [r3, #64] @ 0x40 + 8002640: 2b00 cmp r3, #0 + 8002642: d003 beq.n 800264c + 8002644: 687b ldr r3, [r7, #4] + 8002646: 6c1b ldr r3, [r3, #64] @ 0x40 + 8002648: 6878 ldr r0, [r7, #4] + 800264a: 4798 blx r3 + 800264c: 687b ldr r3, [r7, #4] + 800264e: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002650: 2220 movs r2, #32 + 8002652: 409a lsls r2, r3 + 8002654: 68fb ldr r3, [r7, #12] + 8002656: 4013 ands r3, r2 + 8002658: 2b00 cmp r3, #0 + 800265a: f000 808f beq.w 800277c + 800265e: 687b ldr r3, [r7, #4] + 8002660: 681b ldr r3, [r3, #0] + 8002662: 681b ldr r3, [r3, #0] + 8002664: f003 0310 and.w r3, r3, #16 + 8002668: 2b00 cmp r3, #0 + 800266a: f000 8087 beq.w 800277c + 800266e: 687b ldr r3, [r7, #4] + 8002670: 6ddb ldr r3, [r3, #92] @ 0x5c + 8002672: 2220 movs r2, #32 + 8002674: 409a lsls r2, r3 + 8002676: 693b ldr r3, [r7, #16] + 8002678: 609a str r2, [r3, #8] + 800267a: 687b ldr r3, [r7, #4] + 800267c: f893 3035 ldrb.w r3, [r3, #53] @ 0x35 + 8002680: b2db uxtb r3, r3 + 8002682: 2b05 cmp r3, #5 + 8002684: d136 bne.n 80026f4 + 8002686: 687b ldr r3, [r7, #4] + 8002688: 681b ldr r3, [r3, #0] + 800268a: 681a ldr r2, [r3, #0] + 800268c: 687b ldr r3, [r7, #4] + 800268e: 681b ldr r3, [r3, #0] + 8002690: f022 0216 bic.w r2, r2, #22 + 8002694: 601a str r2, [r3, #0] + 8002696: 687b ldr r3, [r7, #4] + 8002698: 681b ldr r3, [r3, #0] + 800269a: 695a ldr r2, [r3, #20] + 800269c: 687b ldr r3, [r7, #4] + 800269e: 681b ldr r3, [r3, #0] + 80026a0: f022 0280 bic.w r2, r2, #128 @ 0x80 + 80026a4: 615a str r2, [r3, #20] + 80026a6: 687b ldr r3, [r7, #4] + 80026a8: 6c1b ldr r3, [r3, #64] @ 0x40 + 80026aa: 2b00 cmp r3, #0 + 80026ac: d103 bne.n 80026b6 + 80026ae: 687b ldr r3, [r7, #4] + 80026b0: 6c9b ldr r3, [r3, #72] @ 0x48 + 80026b2: 2b00 cmp r3, #0 + 80026b4: d007 beq.n 80026c6 + 80026b6: 687b ldr r3, [r7, #4] + 80026b8: 681b ldr r3, [r3, #0] + 80026ba: 681a ldr r2, [r3, #0] + 80026bc: 687b ldr r3, [r7, #4] + 80026be: 681b ldr r3, [r3, #0] + 80026c0: f022 0208 bic.w r2, r2, #8 + 80026c4: 601a str r2, [r3, #0] + 80026c6: 687b ldr r3, [r7, #4] + 80026c8: 6ddb ldr r3, [r3, #92] @ 0x5c + 80026ca: 223f movs r2, #63 @ 0x3f + 80026cc: 409a lsls r2, r3 + 80026ce: 693b ldr r3, [r7, #16] + 80026d0: 609a str r2, [r3, #8] + 80026d2: 687b ldr r3, [r7, #4] + 80026d4: 2201 movs r2, #1 + 80026d6: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 80026da: 687b ldr r3, [r7, #4] + 80026dc: 2200 movs r2, #0 + 80026de: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 80026e2: 687b ldr r3, [r7, #4] + 80026e4: 6d1b ldr r3, [r3, #80] @ 0x50 + 80026e6: 2b00 cmp r3, #0 + 80026e8: d07e beq.n 80027e8 + 80026ea: 687b ldr r3, [r7, #4] + 80026ec: 6d1b ldr r3, [r3, #80] @ 0x50 + 80026ee: 6878 ldr r0, [r7, #4] + 80026f0: 4798 blx r3 + 80026f2: e079 b.n 80027e8 + 80026f4: 687b ldr r3, [r7, #4] + 80026f6: 681b ldr r3, [r3, #0] + 80026f8: 681b ldr r3, [r3, #0] + 80026fa: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 80026fe: 2b00 cmp r3, #0 + 8002700: d01d beq.n 800273e + 8002702: 687b ldr r3, [r7, #4] + 8002704: 681b ldr r3, [r3, #0] + 8002706: 681b ldr r3, [r3, #0] + 8002708: f403 2300 and.w r3, r3, #524288 @ 0x80000 + 800270c: 2b00 cmp r3, #0 + 800270e: d10d bne.n 800272c + 8002710: 687b ldr r3, [r7, #4] + 8002712: 6c5b ldr r3, [r3, #68] @ 0x44 + 8002714: 2b00 cmp r3, #0 + 8002716: d031 beq.n 800277c + 8002718: 687b ldr r3, [r7, #4] + 800271a: 6c5b ldr r3, [r3, #68] @ 0x44 + 800271c: 6878 ldr r0, [r7, #4] + 800271e: 4798 blx r3 + 8002720: e02c b.n 800277c + 8002722: bf00 nop + 8002724: 20000090 .word 0x20000090 + 8002728: 1b4e81b5 .word 0x1b4e81b5 + 800272c: 687b ldr r3, [r7, #4] + 800272e: 6bdb ldr r3, [r3, #60] @ 0x3c + 8002730: 2b00 cmp r3, #0 + 8002732: d023 beq.n 800277c + 8002734: 687b ldr r3, [r7, #4] + 8002736: 6bdb ldr r3, [r3, #60] @ 0x3c + 8002738: 6878 ldr r0, [r7, #4] + 800273a: 4798 blx r3 + 800273c: e01e b.n 800277c + 800273e: 687b ldr r3, [r7, #4] + 8002740: 681b ldr r3, [r3, #0] + 8002742: 681b ldr r3, [r3, #0] + 8002744: f403 7380 and.w r3, r3, #256 @ 0x100 + 8002748: 2b00 cmp r3, #0 + 800274a: d10f bne.n 800276c + 800274c: 687b ldr r3, [r7, #4] + 800274e: 681b ldr r3, [r3, #0] + 8002750: 681a ldr r2, [r3, #0] + 8002752: 687b ldr r3, [r7, #4] + 8002754: 681b ldr r3, [r3, #0] + 8002756: f022 0210 bic.w r2, r2, #16 + 800275a: 601a str r2, [r3, #0] + 800275c: 687b ldr r3, [r7, #4] + 800275e: 2201 movs r2, #1 + 8002760: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 8002764: 687b ldr r3, [r7, #4] + 8002766: 2200 movs r2, #0 + 8002768: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 800276c: 687b ldr r3, [r7, #4] + 800276e: 6bdb ldr r3, [r3, #60] @ 0x3c + 8002770: 2b00 cmp r3, #0 + 8002772: d003 beq.n 800277c + 8002774: 687b ldr r3, [r7, #4] + 8002776: 6bdb ldr r3, [r3, #60] @ 0x3c + 8002778: 6878 ldr r0, [r7, #4] + 800277a: 4798 blx r3 + 800277c: 687b ldr r3, [r7, #4] + 800277e: 6d5b ldr r3, [r3, #84] @ 0x54 + 8002780: 2b00 cmp r3, #0 + 8002782: d032 beq.n 80027ea + 8002784: 687b ldr r3, [r7, #4] + 8002786: 6d5b ldr r3, [r3, #84] @ 0x54 + 8002788: f003 0301 and.w r3, r3, #1 + 800278c: 2b00 cmp r3, #0 + 800278e: d022 beq.n 80027d6 + 8002790: 687b ldr r3, [r7, #4] + 8002792: 2205 movs r2, #5 + 8002794: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 8002798: 687b ldr r3, [r7, #4] + 800279a: 681b ldr r3, [r3, #0] + 800279c: 681a ldr r2, [r3, #0] + 800279e: 687b ldr r3, [r7, #4] + 80027a0: 681b ldr r3, [r3, #0] + 80027a2: f022 0201 bic.w r2, r2, #1 + 80027a6: 601a str r2, [r3, #0] + 80027a8: 68bb ldr r3, [r7, #8] + 80027aa: 3301 adds r3, #1 + 80027ac: 60bb str r3, [r7, #8] + 80027ae: 697a ldr r2, [r7, #20] + 80027b0: 429a cmp r2, r3 + 80027b2: d307 bcc.n 80027c4 + 80027b4: 687b ldr r3, [r7, #4] + 80027b6: 681b ldr r3, [r3, #0] + 80027b8: 681b ldr r3, [r3, #0] + 80027ba: f003 0301 and.w r3, r3, #1 + 80027be: 2b00 cmp r3, #0 + 80027c0: d1f2 bne.n 80027a8 + 80027c2: e000 b.n 80027c6 + 80027c4: bf00 nop + 80027c6: 687b ldr r3, [r7, #4] + 80027c8: 2201 movs r2, #1 + 80027ca: f883 2035 strb.w r2, [r3, #53] @ 0x35 + 80027ce: 687b ldr r3, [r7, #4] + 80027d0: 2200 movs r2, #0 + 80027d2: f883 2034 strb.w r2, [r3, #52] @ 0x34 + 80027d6: 687b ldr r3, [r7, #4] + 80027d8: 6cdb ldr r3, [r3, #76] @ 0x4c + 80027da: 2b00 cmp r3, #0 + 80027dc: d005 beq.n 80027ea + 80027de: 687b ldr r3, [r7, #4] + 80027e0: 6cdb ldr r3, [r3, #76] @ 0x4c + 80027e2: 6878 ldr r0, [r7, #4] + 80027e4: 4798 blx r3 + 80027e6: e000 b.n 80027ea + 80027e8: bf00 nop + 80027ea: 3718 adds r7, #24 + 80027ec: 46bd mov sp, r7 + 80027ee: bd80 pop {r7, pc} + +080027f0 : + 80027f0: b480 push {r7} + 80027f2: b085 sub sp, #20 + 80027f4: af00 add r7, sp, #0 + 80027f6: 60f8 str r0, [r7, #12] + 80027f8: 60b9 str r1, [r7, #8] + 80027fa: 607a str r2, [r7, #4] + 80027fc: 603b str r3, [r7, #0] + 80027fe: 68fb ldr r3, [r7, #12] + 8002800: 681b ldr r3, [r3, #0] + 8002802: 681a ldr r2, [r3, #0] + 8002804: 68fb ldr r3, [r7, #12] + 8002806: 681b ldr r3, [r3, #0] + 8002808: f422 2280 bic.w r2, r2, #262144 @ 0x40000 + 800280c: 601a str r2, [r3, #0] + 800280e: 68fb ldr r3, [r7, #12] + 8002810: 681b ldr r3, [r3, #0] + 8002812: 683a ldr r2, [r7, #0] + 8002814: 605a str r2, [r3, #4] + 8002816: 68fb ldr r3, [r7, #12] + 8002818: 689b ldr r3, [r3, #8] + 800281a: 2b40 cmp r3, #64 @ 0x40 + 800281c: d108 bne.n 8002830 + 800281e: 68fb ldr r3, [r7, #12] + 8002820: 681b ldr r3, [r3, #0] + 8002822: 687a ldr r2, [r7, #4] + 8002824: 609a str r2, [r3, #8] + 8002826: 68fb ldr r3, [r7, #12] + 8002828: 681b ldr r3, [r3, #0] + 800282a: 68ba ldr r2, [r7, #8] + 800282c: 60da str r2, [r3, #12] + 800282e: e007 b.n 8002840 + 8002830: 68fb ldr r3, [r7, #12] + 8002832: 681b ldr r3, [r3, #0] + 8002834: 68ba ldr r2, [r7, #8] + 8002836: 609a str r2, [r3, #8] + 8002838: 68fb ldr r3, [r7, #12] + 800283a: 681b ldr r3, [r3, #0] + 800283c: 687a ldr r2, [r7, #4] + 800283e: 60da str r2, [r3, #12] + 8002840: bf00 nop + 8002842: 3714 adds r7, #20 + 8002844: 46bd mov sp, r7 + 8002846: f85d 7b04 ldr.w r7, [sp], #4 + 800284a: 4770 bx lr + +0800284c : + 800284c: b480 push {r7} + 800284e: b085 sub sp, #20 + 8002850: af00 add r7, sp, #0 + 8002852: 6078 str r0, [r7, #4] + 8002854: 687b ldr r3, [r7, #4] + 8002856: 681b ldr r3, [r3, #0] + 8002858: b2db uxtb r3, r3 + 800285a: 3b10 subs r3, #16 + 800285c: 4a14 ldr r2, [pc, #80] @ (80028b0 ) + 800285e: fba2 2303 umull r2, r3, r2, r3 + 8002862: 091b lsrs r3, r3, #4 + 8002864: 60fb str r3, [r7, #12] + 8002866: 4a13 ldr r2, [pc, #76] @ (80028b4 ) + 8002868: 68fb ldr r3, [r7, #12] + 800286a: 4413 add r3, r2 + 800286c: 781b ldrb r3, [r3, #0] + 800286e: 461a mov r2, r3 + 8002870: 687b ldr r3, [r7, #4] + 8002872: 65da str r2, [r3, #92] @ 0x5c + 8002874: 68fb ldr r3, [r7, #12] + 8002876: 2b03 cmp r3, #3 + 8002878: d909 bls.n 800288e + 800287a: 687b ldr r3, [r7, #4] + 800287c: 681b ldr r3, [r3, #0] + 800287e: f423 737f bic.w r3, r3, #1020 @ 0x3fc + 8002882: f023 0303 bic.w r3, r3, #3 + 8002886: 1d1a adds r2, r3, #4 + 8002888: 687b ldr r3, [r7, #4] + 800288a: 659a str r2, [r3, #88] @ 0x58 + 800288c: e007 b.n 800289e + 800288e: 687b ldr r3, [r7, #4] + 8002890: 681b ldr r3, [r3, #0] + 8002892: f423 737f bic.w r3, r3, #1020 @ 0x3fc + 8002896: f023 0303 bic.w r3, r3, #3 + 800289a: 687a ldr r2, [r7, #4] + 800289c: 6593 str r3, [r2, #88] @ 0x58 + 800289e: 687b ldr r3, [r7, #4] + 80028a0: 6d9b ldr r3, [r3, #88] @ 0x58 + 80028a2: 4618 mov r0, r3 + 80028a4: 3714 adds r7, #20 + 80028a6: 46bd mov sp, r7 + 80028a8: f85d 7b04 ldr.w r7, [sp], #4 + 80028ac: 4770 bx lr + 80028ae: bf00 nop + 80028b0: aaaaaaab .word 0xaaaaaaab + 80028b4: 0800b430 .word 0x0800b430 + +080028b8 : + 80028b8: b480 push {r7} + 80028ba: b085 sub sp, #20 + 80028bc: af00 add r7, sp, #0 + 80028be: 6078 str r0, [r7, #4] + 80028c0: 2300 movs r3, #0 + 80028c2: 73fb strb r3, [r7, #15] + 80028c4: 687b ldr r3, [r7, #4] + 80028c6: 6a9b ldr r3, [r3, #40] @ 0x28 + 80028c8: 60bb str r3, [r7, #8] + 80028ca: 687b ldr r3, [r7, #4] + 80028cc: 699b ldr r3, [r3, #24] + 80028ce: 2b00 cmp r3, #0 + 80028d0: d11f bne.n 8002912 + 80028d2: 68bb ldr r3, [r7, #8] + 80028d4: 2b03 cmp r3, #3 + 80028d6: d856 bhi.n 8002986 + 80028d8: a201 add r2, pc, #4 @ (adr r2, 80028e0 ) + 80028da: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 80028de: bf00 nop + 80028e0: 080028f1 .word 0x080028f1 + 80028e4: 08002903 .word 0x08002903 + 80028e8: 080028f1 .word 0x080028f1 + 80028ec: 08002987 .word 0x08002987 + 80028f0: 687b ldr r3, [r7, #4] + 80028f2: 6adb ldr r3, [r3, #44] @ 0x2c + 80028f4: f003 7380 and.w r3, r3, #16777216 @ 0x1000000 + 80028f8: 2b00 cmp r3, #0 + 80028fa: d046 beq.n 800298a + 80028fc: 2301 movs r3, #1 + 80028fe: 73fb strb r3, [r7, #15] + 8002900: e043 b.n 800298a + 8002902: 687b ldr r3, [r7, #4] + 8002904: 6adb ldr r3, [r3, #44] @ 0x2c + 8002906: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000 + 800290a: d140 bne.n 800298e + 800290c: 2301 movs r3, #1 + 800290e: 73fb strb r3, [r7, #15] + 8002910: e03d b.n 800298e + 8002912: 687b ldr r3, [r7, #4] + 8002914: 699b ldr r3, [r3, #24] + 8002916: f5b3 5f00 cmp.w r3, #8192 @ 0x2000 + 800291a: d121 bne.n 8002960 + 800291c: 68bb ldr r3, [r7, #8] + 800291e: 2b03 cmp r3, #3 + 8002920: d837 bhi.n 8002992 + 8002922: a201 add r2, pc, #4 @ (adr r2, 8002928 ) + 8002924: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8002928: 08002939 .word 0x08002939 + 800292c: 0800293f .word 0x0800293f + 8002930: 08002939 .word 0x08002939 + 8002934: 08002951 .word 0x08002951 + 8002938: 2301 movs r3, #1 + 800293a: 73fb strb r3, [r7, #15] + 800293c: e030 b.n 80029a0 + 800293e: 687b ldr r3, [r7, #4] + 8002940: 6adb ldr r3, [r3, #44] @ 0x2c + 8002942: f003 7380 and.w r3, r3, #16777216 @ 0x1000000 + 8002946: 2b00 cmp r3, #0 + 8002948: d025 beq.n 8002996 + 800294a: 2301 movs r3, #1 + 800294c: 73fb strb r3, [r7, #15] + 800294e: e022 b.n 8002996 + 8002950: 687b ldr r3, [r7, #4] + 8002952: 6adb ldr r3, [r3, #44] @ 0x2c + 8002954: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000 + 8002958: d11f bne.n 800299a + 800295a: 2301 movs r3, #1 + 800295c: 73fb strb r3, [r7, #15] + 800295e: e01c b.n 800299a + 8002960: 68bb ldr r3, [r7, #8] + 8002962: 2b02 cmp r3, #2 + 8002964: d903 bls.n 800296e + 8002966: 68bb ldr r3, [r7, #8] + 8002968: 2b03 cmp r3, #3 + 800296a: d003 beq.n 8002974 + 800296c: e018 b.n 80029a0 + 800296e: 2301 movs r3, #1 + 8002970: 73fb strb r3, [r7, #15] + 8002972: e015 b.n 80029a0 + 8002974: 687b ldr r3, [r7, #4] + 8002976: 6adb ldr r3, [r3, #44] @ 0x2c + 8002978: f003 7380 and.w r3, r3, #16777216 @ 0x1000000 + 800297c: 2b00 cmp r3, #0 + 800297e: d00e beq.n 800299e + 8002980: 2301 movs r3, #1 + 8002982: 73fb strb r3, [r7, #15] + 8002984: e00b b.n 800299e + 8002986: bf00 nop + 8002988: e00a b.n 80029a0 + 800298a: bf00 nop + 800298c: e008 b.n 80029a0 + 800298e: bf00 nop + 8002990: e006 b.n 80029a0 + 8002992: bf00 nop + 8002994: e004 b.n 80029a0 + 8002996: bf00 nop + 8002998: e002 b.n 80029a0 + 800299a: bf00 nop + 800299c: e000 b.n 80029a0 + 800299e: bf00 nop + 80029a0: 7bfb ldrb r3, [r7, #15] + 80029a2: 4618 mov r0, r3 + 80029a4: 3714 adds r7, #20 + 80029a6: 46bd mov sp, r7 + 80029a8: f85d 7b04 ldr.w r7, [sp], #4 + 80029ac: 4770 bx lr + 80029ae: bf00 nop + +080029b0 : + 80029b0: b480 push {r7} + 80029b2: b089 sub sp, #36 @ 0x24 + 80029b4: af00 add r7, sp, #0 + 80029b6: 6078 str r0, [r7, #4] + 80029b8: 6039 str r1, [r7, #0] + 80029ba: 2300 movs r3, #0 + 80029bc: 617b str r3, [r7, #20] + 80029be: 2300 movs r3, #0 + 80029c0: 613b str r3, [r7, #16] + 80029c2: 2300 movs r3, #0 + 80029c4: 61bb str r3, [r7, #24] + 80029c6: 2300 movs r3, #0 + 80029c8: 61fb str r3, [r7, #28] + 80029ca: e165 b.n 8002c98 + 80029cc: 2201 movs r2, #1 + 80029ce: 69fb ldr r3, [r7, #28] + 80029d0: fa02 f303 lsl.w r3, r2, r3 + 80029d4: 617b str r3, [r7, #20] + 80029d6: 683b ldr r3, [r7, #0] + 80029d8: 681b ldr r3, [r3, #0] + 80029da: 697a ldr r2, [r7, #20] + 80029dc: 4013 ands r3, r2 + 80029de: 613b str r3, [r7, #16] + 80029e0: 693a ldr r2, [r7, #16] + 80029e2: 697b ldr r3, [r7, #20] + 80029e4: 429a cmp r2, r3 + 80029e6: f040 8154 bne.w 8002c92 + 80029ea: 683b ldr r3, [r7, #0] + 80029ec: 685b ldr r3, [r3, #4] + 80029ee: f003 0303 and.w r3, r3, #3 + 80029f2: 2b01 cmp r3, #1 + 80029f4: d005 beq.n 8002a02 + 80029f6: 683b ldr r3, [r7, #0] + 80029f8: 685b ldr r3, [r3, #4] + 80029fa: f003 0303 and.w r3, r3, #3 + 80029fe: 2b02 cmp r3, #2 + 8002a00: d130 bne.n 8002a64 + 8002a02: 687b ldr r3, [r7, #4] + 8002a04: 689b ldr r3, [r3, #8] + 8002a06: 61bb str r3, [r7, #24] + 8002a08: 69fb ldr r3, [r7, #28] + 8002a0a: 005b lsls r3, r3, #1 + 8002a0c: 2203 movs r2, #3 + 8002a0e: fa02 f303 lsl.w r3, r2, r3 + 8002a12: 43db mvns r3, r3 + 8002a14: 69ba ldr r2, [r7, #24] + 8002a16: 4013 ands r3, r2 + 8002a18: 61bb str r3, [r7, #24] + 8002a1a: 683b ldr r3, [r7, #0] + 8002a1c: 68da ldr r2, [r3, #12] + 8002a1e: 69fb ldr r3, [r7, #28] + 8002a20: 005b lsls r3, r3, #1 + 8002a22: fa02 f303 lsl.w r3, r2, r3 + 8002a26: 69ba ldr r2, [r7, #24] + 8002a28: 4313 orrs r3, r2 + 8002a2a: 61bb str r3, [r7, #24] + 8002a2c: 687b ldr r3, [r7, #4] + 8002a2e: 69ba ldr r2, [r7, #24] + 8002a30: 609a str r2, [r3, #8] + 8002a32: 687b ldr r3, [r7, #4] + 8002a34: 685b ldr r3, [r3, #4] + 8002a36: 61bb str r3, [r7, #24] + 8002a38: 2201 movs r2, #1 + 8002a3a: 69fb ldr r3, [r7, #28] + 8002a3c: fa02 f303 lsl.w r3, r2, r3 + 8002a40: 43db mvns r3, r3 + 8002a42: 69ba ldr r2, [r7, #24] + 8002a44: 4013 ands r3, r2 + 8002a46: 61bb str r3, [r7, #24] + 8002a48: 683b ldr r3, [r7, #0] + 8002a4a: 685b ldr r3, [r3, #4] + 8002a4c: 091b lsrs r3, r3, #4 + 8002a4e: f003 0201 and.w r2, r3, #1 + 8002a52: 69fb ldr r3, [r7, #28] + 8002a54: fa02 f303 lsl.w r3, r2, r3 + 8002a58: 69ba ldr r2, [r7, #24] + 8002a5a: 4313 orrs r3, r2 + 8002a5c: 61bb str r3, [r7, #24] + 8002a5e: 687b ldr r3, [r7, #4] + 8002a60: 69ba ldr r2, [r7, #24] + 8002a62: 605a str r2, [r3, #4] + 8002a64: 683b ldr r3, [r7, #0] + 8002a66: 685b ldr r3, [r3, #4] + 8002a68: f003 0303 and.w r3, r3, #3 + 8002a6c: 2b03 cmp r3, #3 + 8002a6e: d017 beq.n 8002aa0 + 8002a70: 687b ldr r3, [r7, #4] + 8002a72: 68db ldr r3, [r3, #12] + 8002a74: 61bb str r3, [r7, #24] + 8002a76: 69fb ldr r3, [r7, #28] + 8002a78: 005b lsls r3, r3, #1 + 8002a7a: 2203 movs r2, #3 + 8002a7c: fa02 f303 lsl.w r3, r2, r3 + 8002a80: 43db mvns r3, r3 + 8002a82: 69ba ldr r2, [r7, #24] + 8002a84: 4013 ands r3, r2 + 8002a86: 61bb str r3, [r7, #24] + 8002a88: 683b ldr r3, [r7, #0] + 8002a8a: 689a ldr r2, [r3, #8] + 8002a8c: 69fb ldr r3, [r7, #28] + 8002a8e: 005b lsls r3, r3, #1 + 8002a90: fa02 f303 lsl.w r3, r2, r3 + 8002a94: 69ba ldr r2, [r7, #24] + 8002a96: 4313 orrs r3, r2 + 8002a98: 61bb str r3, [r7, #24] + 8002a9a: 687b ldr r3, [r7, #4] + 8002a9c: 69ba ldr r2, [r7, #24] + 8002a9e: 60da str r2, [r3, #12] + 8002aa0: 683b ldr r3, [r7, #0] + 8002aa2: 685b ldr r3, [r3, #4] + 8002aa4: f003 0303 and.w r3, r3, #3 + 8002aa8: 2b02 cmp r3, #2 + 8002aaa: d123 bne.n 8002af4 + 8002aac: 69fb ldr r3, [r7, #28] + 8002aae: 08da lsrs r2, r3, #3 + 8002ab0: 687b ldr r3, [r7, #4] + 8002ab2: 3208 adds r2, #8 + 8002ab4: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8002ab8: 61bb str r3, [r7, #24] + 8002aba: 69fb ldr r3, [r7, #28] + 8002abc: f003 0307 and.w r3, r3, #7 + 8002ac0: 009b lsls r3, r3, #2 + 8002ac2: 220f movs r2, #15 + 8002ac4: fa02 f303 lsl.w r3, r2, r3 + 8002ac8: 43db mvns r3, r3 + 8002aca: 69ba ldr r2, [r7, #24] + 8002acc: 4013 ands r3, r2 + 8002ace: 61bb str r3, [r7, #24] + 8002ad0: 683b ldr r3, [r7, #0] + 8002ad2: 691a ldr r2, [r3, #16] + 8002ad4: 69fb ldr r3, [r7, #28] + 8002ad6: f003 0307 and.w r3, r3, #7 + 8002ada: 009b lsls r3, r3, #2 + 8002adc: fa02 f303 lsl.w r3, r2, r3 + 8002ae0: 69ba ldr r2, [r7, #24] + 8002ae2: 4313 orrs r3, r2 + 8002ae4: 61bb str r3, [r7, #24] + 8002ae6: 69fb ldr r3, [r7, #28] + 8002ae8: 08da lsrs r2, r3, #3 + 8002aea: 687b ldr r3, [r7, #4] + 8002aec: 3208 adds r2, #8 + 8002aee: 69b9 ldr r1, [r7, #24] + 8002af0: f843 1022 str.w r1, [r3, r2, lsl #2] + 8002af4: 687b ldr r3, [r7, #4] + 8002af6: 681b ldr r3, [r3, #0] + 8002af8: 61bb str r3, [r7, #24] + 8002afa: 69fb ldr r3, [r7, #28] + 8002afc: 005b lsls r3, r3, #1 + 8002afe: 2203 movs r2, #3 + 8002b00: fa02 f303 lsl.w r3, r2, r3 + 8002b04: 43db mvns r3, r3 + 8002b06: 69ba ldr r2, [r7, #24] + 8002b08: 4013 ands r3, r2 + 8002b0a: 61bb str r3, [r7, #24] + 8002b0c: 683b ldr r3, [r7, #0] + 8002b0e: 685b ldr r3, [r3, #4] + 8002b10: f003 0203 and.w r2, r3, #3 + 8002b14: 69fb ldr r3, [r7, #28] + 8002b16: 005b lsls r3, r3, #1 + 8002b18: fa02 f303 lsl.w r3, r2, r3 + 8002b1c: 69ba ldr r2, [r7, #24] + 8002b1e: 4313 orrs r3, r2 + 8002b20: 61bb str r3, [r7, #24] + 8002b22: 687b ldr r3, [r7, #4] + 8002b24: 69ba ldr r2, [r7, #24] + 8002b26: 601a str r2, [r3, #0] + 8002b28: 683b ldr r3, [r7, #0] + 8002b2a: 685b ldr r3, [r3, #4] + 8002b2c: f403 3340 and.w r3, r3, #196608 @ 0x30000 + 8002b30: 2b00 cmp r3, #0 + 8002b32: f000 80ae beq.w 8002c92 + 8002b36: 2300 movs r3, #0 + 8002b38: 60fb str r3, [r7, #12] + 8002b3a: 4b5d ldr r3, [pc, #372] @ (8002cb0 ) + 8002b3c: 6c5b ldr r3, [r3, #68] @ 0x44 + 8002b3e: 4a5c ldr r2, [pc, #368] @ (8002cb0 ) + 8002b40: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 8002b44: 6453 str r3, [r2, #68] @ 0x44 + 8002b46: 4b5a ldr r3, [pc, #360] @ (8002cb0 ) + 8002b48: 6c5b ldr r3, [r3, #68] @ 0x44 + 8002b4a: f403 4380 and.w r3, r3, #16384 @ 0x4000 + 8002b4e: 60fb str r3, [r7, #12] + 8002b50: 68fb ldr r3, [r7, #12] + 8002b52: 4a58 ldr r2, [pc, #352] @ (8002cb4 ) + 8002b54: 69fb ldr r3, [r7, #28] + 8002b56: 089b lsrs r3, r3, #2 + 8002b58: 3302 adds r3, #2 + 8002b5a: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8002b5e: 61bb str r3, [r7, #24] + 8002b60: 69fb ldr r3, [r7, #28] + 8002b62: f003 0303 and.w r3, r3, #3 + 8002b66: 009b lsls r3, r3, #2 + 8002b68: 220f movs r2, #15 + 8002b6a: fa02 f303 lsl.w r3, r2, r3 + 8002b6e: 43db mvns r3, r3 + 8002b70: 69ba ldr r2, [r7, #24] + 8002b72: 4013 ands r3, r2 + 8002b74: 61bb str r3, [r7, #24] + 8002b76: 687b ldr r3, [r7, #4] + 8002b78: 4a4f ldr r2, [pc, #316] @ (8002cb8 ) + 8002b7a: 4293 cmp r3, r2 + 8002b7c: d025 beq.n 8002bca + 8002b7e: 687b ldr r3, [r7, #4] + 8002b80: 4a4e ldr r2, [pc, #312] @ (8002cbc ) + 8002b82: 4293 cmp r3, r2 + 8002b84: d01f beq.n 8002bc6 + 8002b86: 687b ldr r3, [r7, #4] + 8002b88: 4a4d ldr r2, [pc, #308] @ (8002cc0 ) + 8002b8a: 4293 cmp r3, r2 + 8002b8c: d019 beq.n 8002bc2 + 8002b8e: 687b ldr r3, [r7, #4] + 8002b90: 4a4c ldr r2, [pc, #304] @ (8002cc4 ) + 8002b92: 4293 cmp r3, r2 + 8002b94: d013 beq.n 8002bbe + 8002b96: 687b ldr r3, [r7, #4] + 8002b98: 4a4b ldr r2, [pc, #300] @ (8002cc8 ) + 8002b9a: 4293 cmp r3, r2 + 8002b9c: d00d beq.n 8002bba + 8002b9e: 687b ldr r3, [r7, #4] + 8002ba0: 4a4a ldr r2, [pc, #296] @ (8002ccc ) + 8002ba2: 4293 cmp r3, r2 + 8002ba4: d007 beq.n 8002bb6 + 8002ba6: 687b ldr r3, [r7, #4] + 8002ba8: 4a49 ldr r2, [pc, #292] @ (8002cd0 ) + 8002baa: 4293 cmp r3, r2 + 8002bac: d101 bne.n 8002bb2 + 8002bae: 2306 movs r3, #6 + 8002bb0: e00c b.n 8002bcc + 8002bb2: 2307 movs r3, #7 + 8002bb4: e00a b.n 8002bcc + 8002bb6: 2305 movs r3, #5 + 8002bb8: e008 b.n 8002bcc + 8002bba: 2304 movs r3, #4 + 8002bbc: e006 b.n 8002bcc + 8002bbe: 2303 movs r3, #3 + 8002bc0: e004 b.n 8002bcc + 8002bc2: 2302 movs r3, #2 + 8002bc4: e002 b.n 8002bcc + 8002bc6: 2301 movs r3, #1 + 8002bc8: e000 b.n 8002bcc + 8002bca: 2300 movs r3, #0 + 8002bcc: 69fa ldr r2, [r7, #28] + 8002bce: f002 0203 and.w r2, r2, #3 + 8002bd2: 0092 lsls r2, r2, #2 + 8002bd4: 4093 lsls r3, r2 + 8002bd6: 69ba ldr r2, [r7, #24] + 8002bd8: 4313 orrs r3, r2 + 8002bda: 61bb str r3, [r7, #24] + 8002bdc: 4935 ldr r1, [pc, #212] @ (8002cb4 ) + 8002bde: 69fb ldr r3, [r7, #28] + 8002be0: 089b lsrs r3, r3, #2 + 8002be2: 3302 adds r3, #2 + 8002be4: 69ba ldr r2, [r7, #24] + 8002be6: f841 2023 str.w r2, [r1, r3, lsl #2] + 8002bea: 4b3a ldr r3, [pc, #232] @ (8002cd4 ) + 8002bec: 689b ldr r3, [r3, #8] + 8002bee: 61bb str r3, [r7, #24] + 8002bf0: 693b ldr r3, [r7, #16] + 8002bf2: 43db mvns r3, r3 + 8002bf4: 69ba ldr r2, [r7, #24] + 8002bf6: 4013 ands r3, r2 + 8002bf8: 61bb str r3, [r7, #24] + 8002bfa: 683b ldr r3, [r7, #0] + 8002bfc: 685b ldr r3, [r3, #4] + 8002bfe: f403 1380 and.w r3, r3, #1048576 @ 0x100000 + 8002c02: 2b00 cmp r3, #0 + 8002c04: d003 beq.n 8002c0e + 8002c06: 69ba ldr r2, [r7, #24] + 8002c08: 693b ldr r3, [r7, #16] + 8002c0a: 4313 orrs r3, r2 + 8002c0c: 61bb str r3, [r7, #24] + 8002c0e: 4a31 ldr r2, [pc, #196] @ (8002cd4 ) + 8002c10: 69bb ldr r3, [r7, #24] + 8002c12: 6093 str r3, [r2, #8] + 8002c14: 4b2f ldr r3, [pc, #188] @ (8002cd4 ) + 8002c16: 68db ldr r3, [r3, #12] + 8002c18: 61bb str r3, [r7, #24] + 8002c1a: 693b ldr r3, [r7, #16] + 8002c1c: 43db mvns r3, r3 + 8002c1e: 69ba ldr r2, [r7, #24] + 8002c20: 4013 ands r3, r2 + 8002c22: 61bb str r3, [r7, #24] + 8002c24: 683b ldr r3, [r7, #0] + 8002c26: 685b ldr r3, [r3, #4] + 8002c28: f403 1300 and.w r3, r3, #2097152 @ 0x200000 + 8002c2c: 2b00 cmp r3, #0 + 8002c2e: d003 beq.n 8002c38 + 8002c30: 69ba ldr r2, [r7, #24] + 8002c32: 693b ldr r3, [r7, #16] + 8002c34: 4313 orrs r3, r2 + 8002c36: 61bb str r3, [r7, #24] + 8002c38: 4a26 ldr r2, [pc, #152] @ (8002cd4 ) + 8002c3a: 69bb ldr r3, [r7, #24] + 8002c3c: 60d3 str r3, [r2, #12] + 8002c3e: 4b25 ldr r3, [pc, #148] @ (8002cd4 ) + 8002c40: 685b ldr r3, [r3, #4] + 8002c42: 61bb str r3, [r7, #24] + 8002c44: 693b ldr r3, [r7, #16] + 8002c46: 43db mvns r3, r3 + 8002c48: 69ba ldr r2, [r7, #24] + 8002c4a: 4013 ands r3, r2 + 8002c4c: 61bb str r3, [r7, #24] + 8002c4e: 683b ldr r3, [r7, #0] + 8002c50: 685b ldr r3, [r3, #4] + 8002c52: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 8002c56: 2b00 cmp r3, #0 + 8002c58: d003 beq.n 8002c62 + 8002c5a: 69ba ldr r2, [r7, #24] + 8002c5c: 693b ldr r3, [r7, #16] + 8002c5e: 4313 orrs r3, r2 + 8002c60: 61bb str r3, [r7, #24] + 8002c62: 4a1c ldr r2, [pc, #112] @ (8002cd4 ) + 8002c64: 69bb ldr r3, [r7, #24] + 8002c66: 6053 str r3, [r2, #4] + 8002c68: 4b1a ldr r3, [pc, #104] @ (8002cd4 ) + 8002c6a: 681b ldr r3, [r3, #0] + 8002c6c: 61bb str r3, [r7, #24] + 8002c6e: 693b ldr r3, [r7, #16] + 8002c70: 43db mvns r3, r3 + 8002c72: 69ba ldr r2, [r7, #24] + 8002c74: 4013 ands r3, r2 + 8002c76: 61bb str r3, [r7, #24] + 8002c78: 683b ldr r3, [r7, #0] + 8002c7a: 685b ldr r3, [r3, #4] + 8002c7c: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 8002c80: 2b00 cmp r3, #0 + 8002c82: d003 beq.n 8002c8c + 8002c84: 69ba ldr r2, [r7, #24] + 8002c86: 693b ldr r3, [r7, #16] + 8002c88: 4313 orrs r3, r2 + 8002c8a: 61bb str r3, [r7, #24] + 8002c8c: 4a11 ldr r2, [pc, #68] @ (8002cd4 ) + 8002c8e: 69bb ldr r3, [r7, #24] + 8002c90: 6013 str r3, [r2, #0] + 8002c92: 69fb ldr r3, [r7, #28] + 8002c94: 3301 adds r3, #1 + 8002c96: 61fb str r3, [r7, #28] + 8002c98: 69fb ldr r3, [r7, #28] + 8002c9a: 2b0f cmp r3, #15 + 8002c9c: f67f ae96 bls.w 80029cc + 8002ca0: bf00 nop + 8002ca2: bf00 nop + 8002ca4: 3724 adds r7, #36 @ 0x24 + 8002ca6: 46bd mov sp, r7 + 8002ca8: f85d 7b04 ldr.w r7, [sp], #4 + 8002cac: 4770 bx lr + 8002cae: bf00 nop + 8002cb0: 40023800 .word 0x40023800 + 8002cb4: 40013800 .word 0x40013800 + 8002cb8: 40020000 .word 0x40020000 + 8002cbc: 40020400 .word 0x40020400 + 8002cc0: 40020800 .word 0x40020800 + 8002cc4: 40020c00 .word 0x40020c00 + 8002cc8: 40021000 .word 0x40021000 + 8002ccc: 40021400 .word 0x40021400 + 8002cd0: 40021800 .word 0x40021800 + 8002cd4: 40013c00 .word 0x40013c00 + +08002cd8 : + 8002cd8: b480 push {r7} + 8002cda: b085 sub sp, #20 + 8002cdc: af00 add r7, sp, #0 + 8002cde: 6078 str r0, [r7, #4] + 8002ce0: 460b mov r3, r1 + 8002ce2: 807b strh r3, [r7, #2] + 8002ce4: 687b ldr r3, [r7, #4] + 8002ce6: 691a ldr r2, [r3, #16] + 8002ce8: 887b ldrh r3, [r7, #2] + 8002cea: 4013 ands r3, r2 + 8002cec: 2b00 cmp r3, #0 + 8002cee: d002 beq.n 8002cf6 + 8002cf0: 2301 movs r3, #1 + 8002cf2: 73fb strb r3, [r7, #15] + 8002cf4: e001 b.n 8002cfa + 8002cf6: 2300 movs r3, #0 + 8002cf8: 73fb strb r3, [r7, #15] + 8002cfa: 7bfb ldrb r3, [r7, #15] + 8002cfc: 4618 mov r0, r3 + 8002cfe: 3714 adds r7, #20 + 8002d00: 46bd mov sp, r7 + 8002d02: f85d 7b04 ldr.w r7, [sp], #4 + 8002d06: 4770 bx lr + +08002d08 : + 8002d08: b480 push {r7} + 8002d0a: b083 sub sp, #12 + 8002d0c: af00 add r7, sp, #0 + 8002d0e: 6078 str r0, [r7, #4] + 8002d10: 460b mov r3, r1 + 8002d12: 807b strh r3, [r7, #2] + 8002d14: 4613 mov r3, r2 + 8002d16: 707b strb r3, [r7, #1] + 8002d18: 787b ldrb r3, [r7, #1] + 8002d1a: 2b00 cmp r3, #0 + 8002d1c: d003 beq.n 8002d26 + 8002d1e: 887a ldrh r2, [r7, #2] + 8002d20: 687b ldr r3, [r7, #4] + 8002d22: 619a str r2, [r3, #24] + 8002d24: e003 b.n 8002d2e + 8002d26: 887b ldrh r3, [r7, #2] + 8002d28: 041a lsls r2, r3, #16 + 8002d2a: 687b ldr r3, [r7, #4] + 8002d2c: 619a str r2, [r3, #24] + 8002d2e: bf00 nop + 8002d30: 370c adds r7, #12 + 8002d32: 46bd mov sp, r7 + 8002d34: f85d 7b04 ldr.w r7, [sp], #4 + 8002d38: 4770 bx lr + ... + +08002d3c : + 8002d3c: b580 push {r7, lr} + 8002d3e: b084 sub sp, #16 + 8002d40: af00 add r7, sp, #0 + 8002d42: 6078 str r0, [r7, #4] + 8002d44: 687b ldr r3, [r7, #4] + 8002d46: 2b00 cmp r3, #0 + 8002d48: d101 bne.n 8002d4e + 8002d4a: 2301 movs r3, #1 + 8002d4c: e12b b.n 8002fa6 + 8002d4e: 687b ldr r3, [r7, #4] + 8002d50: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 8002d54: b2db uxtb r3, r3 + 8002d56: 2b00 cmp r3, #0 + 8002d58: d106 bne.n 8002d68 + 8002d5a: 687b ldr r3, [r7, #4] + 8002d5c: 2200 movs r2, #0 + 8002d5e: f883 203c strb.w r2, [r3, #60] @ 0x3c + 8002d62: 6878 ldr r0, [r7, #4] + 8002d64: f7fd fd18 bl 8000798 + 8002d68: 687b ldr r3, [r7, #4] + 8002d6a: 2224 movs r2, #36 @ 0x24 + 8002d6c: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8002d70: 687b ldr r3, [r7, #4] + 8002d72: 681b ldr r3, [r3, #0] + 8002d74: 681a ldr r2, [r3, #0] + 8002d76: 687b ldr r3, [r7, #4] + 8002d78: 681b ldr r3, [r3, #0] + 8002d7a: f022 0201 bic.w r2, r2, #1 + 8002d7e: 601a str r2, [r3, #0] + 8002d80: 687b ldr r3, [r7, #4] + 8002d82: 681b ldr r3, [r3, #0] + 8002d84: 681a ldr r2, [r3, #0] + 8002d86: 687b ldr r3, [r7, #4] + 8002d88: 681b ldr r3, [r3, #0] + 8002d8a: f442 4200 orr.w r2, r2, #32768 @ 0x8000 + 8002d8e: 601a str r2, [r3, #0] + 8002d90: 687b ldr r3, [r7, #4] + 8002d92: 681b ldr r3, [r3, #0] + 8002d94: 681a ldr r2, [r3, #0] + 8002d96: 687b ldr r3, [r7, #4] + 8002d98: 681b ldr r3, [r3, #0] + 8002d9a: f422 4200 bic.w r2, r2, #32768 @ 0x8000 + 8002d9e: 601a str r2, [r3, #0] + 8002da0: f001 fc88 bl 80046b4 + 8002da4: 60f8 str r0, [r7, #12] + 8002da6: 687b ldr r3, [r7, #4] + 8002da8: 685b ldr r3, [r3, #4] + 8002daa: 4a81 ldr r2, [pc, #516] @ (8002fb0 ) + 8002dac: 4293 cmp r3, r2 + 8002dae: d807 bhi.n 8002dc0 + 8002db0: 68fb ldr r3, [r7, #12] + 8002db2: 4a80 ldr r2, [pc, #512] @ (8002fb4 ) + 8002db4: 4293 cmp r3, r2 + 8002db6: bf94 ite ls + 8002db8: 2301 movls r3, #1 + 8002dba: 2300 movhi r3, #0 + 8002dbc: b2db uxtb r3, r3 + 8002dbe: e006 b.n 8002dce + 8002dc0: 68fb ldr r3, [r7, #12] + 8002dc2: 4a7d ldr r2, [pc, #500] @ (8002fb8 ) + 8002dc4: 4293 cmp r3, r2 + 8002dc6: bf94 ite ls + 8002dc8: 2301 movls r3, #1 + 8002dca: 2300 movhi r3, #0 + 8002dcc: b2db uxtb r3, r3 + 8002dce: 2b00 cmp r3, #0 + 8002dd0: d001 beq.n 8002dd6 + 8002dd2: 2301 movs r3, #1 + 8002dd4: e0e7 b.n 8002fa6 + 8002dd6: 68fb ldr r3, [r7, #12] + 8002dd8: 4a78 ldr r2, [pc, #480] @ (8002fbc ) + 8002dda: fba2 2303 umull r2, r3, r2, r3 + 8002dde: 0c9b lsrs r3, r3, #18 + 8002de0: 60bb str r3, [r7, #8] + 8002de2: 687b ldr r3, [r7, #4] + 8002de4: 681b ldr r3, [r3, #0] + 8002de6: 685b ldr r3, [r3, #4] + 8002de8: f023 013f bic.w r1, r3, #63 @ 0x3f + 8002dec: 687b ldr r3, [r7, #4] + 8002dee: 681b ldr r3, [r3, #0] + 8002df0: 68ba ldr r2, [r7, #8] + 8002df2: 430a orrs r2, r1 + 8002df4: 605a str r2, [r3, #4] + 8002df6: 687b ldr r3, [r7, #4] + 8002df8: 681b ldr r3, [r3, #0] + 8002dfa: 6a1b ldr r3, [r3, #32] + 8002dfc: f023 013f bic.w r1, r3, #63 @ 0x3f + 8002e00: 687b ldr r3, [r7, #4] + 8002e02: 685b ldr r3, [r3, #4] + 8002e04: 4a6a ldr r2, [pc, #424] @ (8002fb0 ) + 8002e06: 4293 cmp r3, r2 + 8002e08: d802 bhi.n 8002e10 + 8002e0a: 68bb ldr r3, [r7, #8] + 8002e0c: 3301 adds r3, #1 + 8002e0e: e009 b.n 8002e24 + 8002e10: 68bb ldr r3, [r7, #8] + 8002e12: f44f 7296 mov.w r2, #300 @ 0x12c + 8002e16: fb02 f303 mul.w r3, r2, r3 + 8002e1a: 4a69 ldr r2, [pc, #420] @ (8002fc0 ) + 8002e1c: fba2 2303 umull r2, r3, r2, r3 + 8002e20: 099b lsrs r3, r3, #6 + 8002e22: 3301 adds r3, #1 + 8002e24: 687a ldr r2, [r7, #4] + 8002e26: 6812 ldr r2, [r2, #0] + 8002e28: 430b orrs r3, r1 + 8002e2a: 6213 str r3, [r2, #32] + 8002e2c: 687b ldr r3, [r7, #4] + 8002e2e: 681b ldr r3, [r3, #0] + 8002e30: 69db ldr r3, [r3, #28] + 8002e32: f423 424f bic.w r2, r3, #52992 @ 0xcf00 + 8002e36: f022 02ff bic.w r2, r2, #255 @ 0xff + 8002e3a: 687b ldr r3, [r7, #4] + 8002e3c: 685b ldr r3, [r3, #4] + 8002e3e: 495c ldr r1, [pc, #368] @ (8002fb0 ) + 8002e40: 428b cmp r3, r1 + 8002e42: d819 bhi.n 8002e78 + 8002e44: 68fb ldr r3, [r7, #12] + 8002e46: 1e59 subs r1, r3, #1 + 8002e48: 687b ldr r3, [r7, #4] + 8002e4a: 685b ldr r3, [r3, #4] + 8002e4c: 005b lsls r3, r3, #1 + 8002e4e: fbb1 f3f3 udiv r3, r1, r3 + 8002e52: 1c59 adds r1, r3, #1 + 8002e54: f640 73fc movw r3, #4092 @ 0xffc + 8002e58: 400b ands r3, r1 + 8002e5a: 2b00 cmp r3, #0 + 8002e5c: d00a beq.n 8002e74 + 8002e5e: 68fb ldr r3, [r7, #12] + 8002e60: 1e59 subs r1, r3, #1 + 8002e62: 687b ldr r3, [r7, #4] + 8002e64: 685b ldr r3, [r3, #4] + 8002e66: 005b lsls r3, r3, #1 + 8002e68: fbb1 f3f3 udiv r3, r1, r3 + 8002e6c: 3301 adds r3, #1 + 8002e6e: f3c3 030b ubfx r3, r3, #0, #12 + 8002e72: e051 b.n 8002f18 + 8002e74: 2304 movs r3, #4 + 8002e76: e04f b.n 8002f18 + 8002e78: 687b ldr r3, [r7, #4] + 8002e7a: 689b ldr r3, [r3, #8] + 8002e7c: 2b00 cmp r3, #0 + 8002e7e: d111 bne.n 8002ea4 + 8002e80: 68fb ldr r3, [r7, #12] + 8002e82: 1e58 subs r0, r3, #1 + 8002e84: 687b ldr r3, [r7, #4] + 8002e86: 6859 ldr r1, [r3, #4] + 8002e88: 460b mov r3, r1 + 8002e8a: 005b lsls r3, r3, #1 + 8002e8c: 440b add r3, r1 + 8002e8e: fbb0 f3f3 udiv r3, r0, r3 + 8002e92: 3301 adds r3, #1 + 8002e94: f3c3 030b ubfx r3, r3, #0, #12 + 8002e98: 2b00 cmp r3, #0 + 8002e9a: bf0c ite eq + 8002e9c: 2301 moveq r3, #1 + 8002e9e: 2300 movne r3, #0 + 8002ea0: b2db uxtb r3, r3 + 8002ea2: e012 b.n 8002eca + 8002ea4: 68fb ldr r3, [r7, #12] + 8002ea6: 1e58 subs r0, r3, #1 + 8002ea8: 687b ldr r3, [r7, #4] + 8002eaa: 6859 ldr r1, [r3, #4] + 8002eac: 460b mov r3, r1 + 8002eae: 009b lsls r3, r3, #2 + 8002eb0: 440b add r3, r1 + 8002eb2: 0099 lsls r1, r3, #2 + 8002eb4: 440b add r3, r1 + 8002eb6: fbb0 f3f3 udiv r3, r0, r3 + 8002eba: 3301 adds r3, #1 + 8002ebc: f3c3 030b ubfx r3, r3, #0, #12 + 8002ec0: 2b00 cmp r3, #0 + 8002ec2: bf0c ite eq + 8002ec4: 2301 moveq r3, #1 + 8002ec6: 2300 movne r3, #0 + 8002ec8: b2db uxtb r3, r3 + 8002eca: 2b00 cmp r3, #0 + 8002ecc: d001 beq.n 8002ed2 + 8002ece: 2301 movs r3, #1 + 8002ed0: e022 b.n 8002f18 + 8002ed2: 687b ldr r3, [r7, #4] + 8002ed4: 689b ldr r3, [r3, #8] + 8002ed6: 2b00 cmp r3, #0 + 8002ed8: d10e bne.n 8002ef8 + 8002eda: 68fb ldr r3, [r7, #12] + 8002edc: 1e58 subs r0, r3, #1 + 8002ede: 687b ldr r3, [r7, #4] + 8002ee0: 6859 ldr r1, [r3, #4] + 8002ee2: 460b mov r3, r1 + 8002ee4: 005b lsls r3, r3, #1 + 8002ee6: 440b add r3, r1 + 8002ee8: fbb0 f3f3 udiv r3, r0, r3 + 8002eec: 3301 adds r3, #1 + 8002eee: f3c3 030b ubfx r3, r3, #0, #12 + 8002ef2: f443 4300 orr.w r3, r3, #32768 @ 0x8000 + 8002ef6: e00f b.n 8002f18 + 8002ef8: 68fb ldr r3, [r7, #12] + 8002efa: 1e58 subs r0, r3, #1 + 8002efc: 687b ldr r3, [r7, #4] + 8002efe: 6859 ldr r1, [r3, #4] + 8002f00: 460b mov r3, r1 + 8002f02: 009b lsls r3, r3, #2 + 8002f04: 440b add r3, r1 + 8002f06: 0099 lsls r1, r3, #2 + 8002f08: 440b add r3, r1 + 8002f0a: fbb0 f3f3 udiv r3, r0, r3 + 8002f0e: 3301 adds r3, #1 + 8002f10: f3c3 030b ubfx r3, r3, #0, #12 + 8002f14: f443 4340 orr.w r3, r3, #49152 @ 0xc000 + 8002f18: 6879 ldr r1, [r7, #4] + 8002f1a: 6809 ldr r1, [r1, #0] + 8002f1c: 4313 orrs r3, r2 + 8002f1e: 61cb str r3, [r1, #28] + 8002f20: 687b ldr r3, [r7, #4] + 8002f22: 681b ldr r3, [r3, #0] + 8002f24: 681b ldr r3, [r3, #0] + 8002f26: f023 01c0 bic.w r1, r3, #192 @ 0xc0 + 8002f2a: 687b ldr r3, [r7, #4] + 8002f2c: 69da ldr r2, [r3, #28] + 8002f2e: 687b ldr r3, [r7, #4] + 8002f30: 6a1b ldr r3, [r3, #32] + 8002f32: 431a orrs r2, r3 + 8002f34: 687b ldr r3, [r7, #4] + 8002f36: 681b ldr r3, [r3, #0] + 8002f38: 430a orrs r2, r1 + 8002f3a: 601a str r2, [r3, #0] + 8002f3c: 687b ldr r3, [r7, #4] + 8002f3e: 681b ldr r3, [r3, #0] + 8002f40: 689b ldr r3, [r3, #8] + 8002f42: f423 4303 bic.w r3, r3, #33536 @ 0x8300 + 8002f46: f023 03ff bic.w r3, r3, #255 @ 0xff + 8002f4a: 687a ldr r2, [r7, #4] + 8002f4c: 6911 ldr r1, [r2, #16] + 8002f4e: 687a ldr r2, [r7, #4] + 8002f50: 68d2 ldr r2, [r2, #12] + 8002f52: 4311 orrs r1, r2 + 8002f54: 687a ldr r2, [r7, #4] + 8002f56: 6812 ldr r2, [r2, #0] + 8002f58: 430b orrs r3, r1 + 8002f5a: 6093 str r3, [r2, #8] + 8002f5c: 687b ldr r3, [r7, #4] + 8002f5e: 681b ldr r3, [r3, #0] + 8002f60: 68db ldr r3, [r3, #12] + 8002f62: f023 01ff bic.w r1, r3, #255 @ 0xff + 8002f66: 687b ldr r3, [r7, #4] + 8002f68: 695a ldr r2, [r3, #20] + 8002f6a: 687b ldr r3, [r7, #4] + 8002f6c: 699b ldr r3, [r3, #24] + 8002f6e: 431a orrs r2, r3 + 8002f70: 687b ldr r3, [r7, #4] + 8002f72: 681b ldr r3, [r3, #0] + 8002f74: 430a orrs r2, r1 + 8002f76: 60da str r2, [r3, #12] + 8002f78: 687b ldr r3, [r7, #4] + 8002f7a: 681b ldr r3, [r3, #0] + 8002f7c: 681a ldr r2, [r3, #0] + 8002f7e: 687b ldr r3, [r7, #4] + 8002f80: 681b ldr r3, [r3, #0] + 8002f82: f042 0201 orr.w r2, r2, #1 + 8002f86: 601a str r2, [r3, #0] + 8002f88: 687b ldr r3, [r7, #4] + 8002f8a: 2200 movs r2, #0 + 8002f8c: 641a str r2, [r3, #64] @ 0x40 + 8002f8e: 687b ldr r3, [r7, #4] + 8002f90: 2220 movs r2, #32 + 8002f92: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8002f96: 687b ldr r3, [r7, #4] + 8002f98: 2200 movs r2, #0 + 8002f9a: 631a str r2, [r3, #48] @ 0x30 + 8002f9c: 687b ldr r3, [r7, #4] + 8002f9e: 2200 movs r2, #0 + 8002fa0: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8002fa4: 2300 movs r3, #0 + 8002fa6: 4618 mov r0, r3 + 8002fa8: 3710 adds r7, #16 + 8002faa: 46bd mov sp, r7 + 8002fac: bd80 pop {r7, pc} + 8002fae: bf00 nop + 8002fb0: 000186a0 .word 0x000186a0 + 8002fb4: 001e847f .word 0x001e847f + 8002fb8: 003d08ff .word 0x003d08ff + 8002fbc: 431bde83 .word 0x431bde83 + 8002fc0: 10624dd3 .word 0x10624dd3 + +08002fc4 : + 8002fc4: b580 push {r7, lr} + 8002fc6: b086 sub sp, #24 + 8002fc8: af02 add r7, sp, #8 + 8002fca: 6078 str r0, [r7, #4] + 8002fcc: 687b ldr r3, [r7, #4] + 8002fce: 2b00 cmp r3, #0 + 8002fd0: d101 bne.n 8002fd6 + 8002fd2: 2301 movs r3, #1 + 8002fd4: e108 b.n 80031e8 + 8002fd6: 687b ldr r3, [r7, #4] + 8002fd8: 681b ldr r3, [r3, #0] + 8002fda: 60bb str r3, [r7, #8] + 8002fdc: 687b ldr r3, [r7, #4] + 8002fde: f893 3495 ldrb.w r3, [r3, #1173] @ 0x495 + 8002fe2: b2db uxtb r3, r3 + 8002fe4: 2b00 cmp r3, #0 + 8002fe6: d106 bne.n 8002ff6 + 8002fe8: 687b ldr r3, [r7, #4] + 8002fea: 2200 movs r2, #0 + 8002fec: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8002ff0: 6878 ldr r0, [r7, #4] + 8002ff2: f007 fe47 bl 800ac84 + 8002ff6: 687b ldr r3, [r7, #4] + 8002ff8: 2203 movs r2, #3 + 8002ffa: f883 2495 strb.w r2, [r3, #1173] @ 0x495 + 8002ffe: 68bb ldr r3, [r7, #8] + 8003000: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000 + 8003004: d102 bne.n 800300c + 8003006: 687b ldr r3, [r7, #4] + 8003008: 2200 movs r2, #0 + 800300a: 719a strb r2, [r3, #6] + 800300c: 687b ldr r3, [r7, #4] + 800300e: 681b ldr r3, [r3, #0] + 8003010: 4618 mov r0, r3 + 8003012: f004 fd3c bl 8007a8e + 8003016: 687b ldr r3, [r7, #4] + 8003018: 6818 ldr r0, [r3, #0] + 800301a: 687b ldr r3, [r7, #4] + 800301c: 7c1a ldrb r2, [r3, #16] + 800301e: f88d 2000 strb.w r2, [sp] + 8003022: 3304 adds r3, #4 + 8003024: cb0e ldmia r3, {r1, r2, r3} + 8003026: f004 fc1b bl 8007860 + 800302a: 4603 mov r3, r0 + 800302c: 2b00 cmp r3, #0 + 800302e: d005 beq.n 800303c + 8003030: 687b ldr r3, [r7, #4] + 8003032: 2202 movs r2, #2 + 8003034: f883 2495 strb.w r2, [r3, #1173] @ 0x495 + 8003038: 2301 movs r3, #1 + 800303a: e0d5 b.n 80031e8 + 800303c: 687b ldr r3, [r7, #4] + 800303e: 681b ldr r3, [r3, #0] + 8003040: 2100 movs r1, #0 + 8003042: 4618 mov r0, r3 + 8003044: f004 fd34 bl 8007ab0 + 8003048: 4603 mov r3, r0 + 800304a: 2b00 cmp r3, #0 + 800304c: d005 beq.n 800305a + 800304e: 687b ldr r3, [r7, #4] + 8003050: 2202 movs r2, #2 + 8003052: f883 2495 strb.w r2, [r3, #1173] @ 0x495 + 8003056: 2301 movs r3, #1 + 8003058: e0c6 b.n 80031e8 + 800305a: 2300 movs r3, #0 + 800305c: 73fb strb r3, [r7, #15] + 800305e: e04a b.n 80030f6 + 8003060: 7bfa ldrb r2, [r7, #15] + 8003062: 6879 ldr r1, [r7, #4] + 8003064: 4613 mov r3, r2 + 8003066: 00db lsls r3, r3, #3 + 8003068: 4413 add r3, r2 + 800306a: 009b lsls r3, r3, #2 + 800306c: 440b add r3, r1 + 800306e: 3315 adds r3, #21 + 8003070: 2201 movs r2, #1 + 8003072: 701a strb r2, [r3, #0] + 8003074: 7bfa ldrb r2, [r7, #15] + 8003076: 6879 ldr r1, [r7, #4] + 8003078: 4613 mov r3, r2 + 800307a: 00db lsls r3, r3, #3 + 800307c: 4413 add r3, r2 + 800307e: 009b lsls r3, r3, #2 + 8003080: 440b add r3, r1 + 8003082: 3314 adds r3, #20 + 8003084: 7bfa ldrb r2, [r7, #15] + 8003086: 701a strb r2, [r3, #0] + 8003088: 7bfa ldrb r2, [r7, #15] + 800308a: 7bfb ldrb r3, [r7, #15] + 800308c: b298 uxth r0, r3 + 800308e: 6879 ldr r1, [r7, #4] + 8003090: 4613 mov r3, r2 + 8003092: 00db lsls r3, r3, #3 + 8003094: 4413 add r3, r2 + 8003096: 009b lsls r3, r3, #2 + 8003098: 440b add r3, r1 + 800309a: 332e adds r3, #46 @ 0x2e + 800309c: 4602 mov r2, r0 + 800309e: 801a strh r2, [r3, #0] + 80030a0: 7bfa ldrb r2, [r7, #15] + 80030a2: 6879 ldr r1, [r7, #4] + 80030a4: 4613 mov r3, r2 + 80030a6: 00db lsls r3, r3, #3 + 80030a8: 4413 add r3, r2 + 80030aa: 009b lsls r3, r3, #2 + 80030ac: 440b add r3, r1 + 80030ae: 3318 adds r3, #24 + 80030b0: 2200 movs r2, #0 + 80030b2: 701a strb r2, [r3, #0] + 80030b4: 7bfa ldrb r2, [r7, #15] + 80030b6: 6879 ldr r1, [r7, #4] + 80030b8: 4613 mov r3, r2 + 80030ba: 00db lsls r3, r3, #3 + 80030bc: 4413 add r3, r2 + 80030be: 009b lsls r3, r3, #2 + 80030c0: 440b add r3, r1 + 80030c2: 331c adds r3, #28 + 80030c4: 2200 movs r2, #0 + 80030c6: 601a str r2, [r3, #0] + 80030c8: 7bfa ldrb r2, [r7, #15] + 80030ca: 6879 ldr r1, [r7, #4] + 80030cc: 4613 mov r3, r2 + 80030ce: 00db lsls r3, r3, #3 + 80030d0: 4413 add r3, r2 + 80030d2: 009b lsls r3, r3, #2 + 80030d4: 440b add r3, r1 + 80030d6: 3320 adds r3, #32 + 80030d8: 2200 movs r2, #0 + 80030da: 601a str r2, [r3, #0] + 80030dc: 7bfa ldrb r2, [r7, #15] + 80030de: 6879 ldr r1, [r7, #4] + 80030e0: 4613 mov r3, r2 + 80030e2: 00db lsls r3, r3, #3 + 80030e4: 4413 add r3, r2 + 80030e6: 009b lsls r3, r3, #2 + 80030e8: 440b add r3, r1 + 80030ea: 3324 adds r3, #36 @ 0x24 + 80030ec: 2200 movs r2, #0 + 80030ee: 601a str r2, [r3, #0] + 80030f0: 7bfb ldrb r3, [r7, #15] + 80030f2: 3301 adds r3, #1 + 80030f4: 73fb strb r3, [r7, #15] + 80030f6: 687b ldr r3, [r7, #4] + 80030f8: 791b ldrb r3, [r3, #4] + 80030fa: 7bfa ldrb r2, [r7, #15] + 80030fc: 429a cmp r2, r3 + 80030fe: d3af bcc.n 8003060 + 8003100: 2300 movs r3, #0 + 8003102: 73fb strb r3, [r7, #15] + 8003104: e044 b.n 8003190 + 8003106: 7bfa ldrb r2, [r7, #15] + 8003108: 6879 ldr r1, [r7, #4] + 800310a: 4613 mov r3, r2 + 800310c: 00db lsls r3, r3, #3 + 800310e: 4413 add r3, r2 + 8003110: 009b lsls r3, r3, #2 + 8003112: 440b add r3, r1 + 8003114: f203 2355 addw r3, r3, #597 @ 0x255 + 8003118: 2200 movs r2, #0 + 800311a: 701a strb r2, [r3, #0] + 800311c: 7bfa ldrb r2, [r7, #15] + 800311e: 6879 ldr r1, [r7, #4] + 8003120: 4613 mov r3, r2 + 8003122: 00db lsls r3, r3, #3 + 8003124: 4413 add r3, r2 + 8003126: 009b lsls r3, r3, #2 + 8003128: 440b add r3, r1 + 800312a: f503 7315 add.w r3, r3, #596 @ 0x254 + 800312e: 7bfa ldrb r2, [r7, #15] + 8003130: 701a strb r2, [r3, #0] + 8003132: 7bfa ldrb r2, [r7, #15] + 8003134: 6879 ldr r1, [r7, #4] + 8003136: 4613 mov r3, r2 + 8003138: 00db lsls r3, r3, #3 + 800313a: 4413 add r3, r2 + 800313c: 009b lsls r3, r3, #2 + 800313e: 440b add r3, r1 + 8003140: f503 7316 add.w r3, r3, #600 @ 0x258 + 8003144: 2200 movs r2, #0 + 8003146: 701a strb r2, [r3, #0] + 8003148: 7bfa ldrb r2, [r7, #15] + 800314a: 6879 ldr r1, [r7, #4] + 800314c: 4613 mov r3, r2 + 800314e: 00db lsls r3, r3, #3 + 8003150: 4413 add r3, r2 + 8003152: 009b lsls r3, r3, #2 + 8003154: 440b add r3, r1 + 8003156: f503 7317 add.w r3, r3, #604 @ 0x25c + 800315a: 2200 movs r2, #0 + 800315c: 601a str r2, [r3, #0] + 800315e: 7bfa ldrb r2, [r7, #15] + 8003160: 6879 ldr r1, [r7, #4] + 8003162: 4613 mov r3, r2 + 8003164: 00db lsls r3, r3, #3 + 8003166: 4413 add r3, r2 + 8003168: 009b lsls r3, r3, #2 + 800316a: 440b add r3, r1 + 800316c: f503 7318 add.w r3, r3, #608 @ 0x260 + 8003170: 2200 movs r2, #0 + 8003172: 601a str r2, [r3, #0] + 8003174: 7bfa ldrb r2, [r7, #15] + 8003176: 6879 ldr r1, [r7, #4] + 8003178: 4613 mov r3, r2 + 800317a: 00db lsls r3, r3, #3 + 800317c: 4413 add r3, r2 + 800317e: 009b lsls r3, r3, #2 + 8003180: 440b add r3, r1 + 8003182: f503 7319 add.w r3, r3, #612 @ 0x264 + 8003186: 2200 movs r2, #0 + 8003188: 601a str r2, [r3, #0] + 800318a: 7bfb ldrb r3, [r7, #15] + 800318c: 3301 adds r3, #1 + 800318e: 73fb strb r3, [r7, #15] + 8003190: 687b ldr r3, [r7, #4] + 8003192: 791b ldrb r3, [r3, #4] + 8003194: 7bfa ldrb r2, [r7, #15] + 8003196: 429a cmp r2, r3 + 8003198: d3b5 bcc.n 8003106 + 800319a: 687b ldr r3, [r7, #4] + 800319c: 6818 ldr r0, [r3, #0] + 800319e: 687b ldr r3, [r7, #4] + 80031a0: 7c1a ldrb r2, [r3, #16] + 80031a2: f88d 2000 strb.w r2, [sp] + 80031a6: 3304 adds r3, #4 + 80031a8: cb0e ldmia r3, {r1, r2, r3} + 80031aa: f004 fccd bl 8007b48 + 80031ae: 4603 mov r3, r0 + 80031b0: 2b00 cmp r3, #0 + 80031b2: d005 beq.n 80031c0 + 80031b4: 687b ldr r3, [r7, #4] + 80031b6: 2202 movs r2, #2 + 80031b8: f883 2495 strb.w r2, [r3, #1173] @ 0x495 + 80031bc: 2301 movs r3, #1 + 80031be: e013 b.n 80031e8 + 80031c0: 687b ldr r3, [r7, #4] + 80031c2: 2200 movs r2, #0 + 80031c4: 745a strb r2, [r3, #17] + 80031c6: 687b ldr r3, [r7, #4] + 80031c8: 2201 movs r2, #1 + 80031ca: f883 2495 strb.w r2, [r3, #1173] @ 0x495 + 80031ce: 687b ldr r3, [r7, #4] + 80031d0: 7b1b ldrb r3, [r3, #12] + 80031d2: 2b01 cmp r3, #1 + 80031d4: d102 bne.n 80031dc + 80031d6: 6878 ldr r0, [r7, #4] + 80031d8: f001 f956 bl 8004488 + 80031dc: 687b ldr r3, [r7, #4] + 80031de: 681b ldr r3, [r3, #0] + 80031e0: 4618 mov r0, r3 + 80031e2: f005 fd0a bl 8008bfa + 80031e6: 2300 movs r3, #0 + 80031e8: 4618 mov r0, r3 + 80031ea: 3710 adds r7, #16 + 80031ec: 46bd mov sp, r7 + 80031ee: bd80 pop {r7, pc} + +080031f0 : + 80031f0: b580 push {r7, lr} + 80031f2: b084 sub sp, #16 + 80031f4: af00 add r7, sp, #0 + 80031f6: 6078 str r0, [r7, #4] + 80031f8: 687b ldr r3, [r7, #4] + 80031fa: 681b ldr r3, [r3, #0] + 80031fc: 60fb str r3, [r7, #12] + 80031fe: 687b ldr r3, [r7, #4] + 8003200: f893 3494 ldrb.w r3, [r3, #1172] @ 0x494 + 8003204: 2b01 cmp r3, #1 + 8003206: d101 bne.n 800320c + 8003208: 2302 movs r3, #2 + 800320a: e022 b.n 8003252 + 800320c: 687b ldr r3, [r7, #4] + 800320e: 2201 movs r2, #1 + 8003210: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003214: 68fb ldr r3, [r7, #12] + 8003216: 68db ldr r3, [r3, #12] + 8003218: f003 0340 and.w r3, r3, #64 @ 0x40 + 800321c: 2b00 cmp r3, #0 + 800321e: d009 beq.n 8003234 + 8003220: 687b ldr r3, [r7, #4] + 8003222: 7b5b ldrb r3, [r3, #13] + 8003224: 2b01 cmp r3, #1 + 8003226: d105 bne.n 8003234 + 8003228: 68fb ldr r3, [r7, #12] + 800322a: 6b9b ldr r3, [r3, #56] @ 0x38 + 800322c: f443 3280 orr.w r2, r3, #65536 @ 0x10000 + 8003230: 68fb ldr r3, [r7, #12] + 8003232: 639a str r2, [r3, #56] @ 0x38 + 8003234: 687b ldr r3, [r7, #4] + 8003236: 681b ldr r3, [r3, #0] + 8003238: 4618 mov r0, r3 + 800323a: f004 fc17 bl 8007a6c + 800323e: 687b ldr r3, [r7, #4] + 8003240: 681b ldr r3, [r3, #0] + 8003242: 4618 mov r0, r3 + 8003244: f005 fcb8 bl 8008bb8 + 8003248: 687b ldr r3, [r7, #4] + 800324a: 2200 movs r2, #0 + 800324c: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003250: 2300 movs r3, #0 + 8003252: 4618 mov r0, r3 + 8003254: 3710 adds r7, #16 + 8003256: 46bd mov sp, r7 + 8003258: bd80 pop {r7, pc} + +0800325a : + 800325a: b590 push {r4, r7, lr} + 800325c: b08d sub sp, #52 @ 0x34 + 800325e: af00 add r7, sp, #0 + 8003260: 6078 str r0, [r7, #4] + 8003262: 687b ldr r3, [r7, #4] + 8003264: 681b ldr r3, [r3, #0] + 8003266: 623b str r3, [r7, #32] + 8003268: 6a3b ldr r3, [r7, #32] + 800326a: 61fb str r3, [r7, #28] + 800326c: 687b ldr r3, [r7, #4] + 800326e: 681b ldr r3, [r3, #0] + 8003270: 4618 mov r0, r3 + 8003272: f005 fd76 bl 8008d62 + 8003276: 4603 mov r3, r0 + 8003278: 2b00 cmp r3, #0 + 800327a: f040 84b9 bne.w 8003bf0 + 800327e: 687b ldr r3, [r7, #4] + 8003280: 681b ldr r3, [r3, #0] + 8003282: 4618 mov r0, r3 + 8003284: f005 fcda bl 8008c3c + 8003288: 4603 mov r3, r0 + 800328a: 2b00 cmp r3, #0 + 800328c: f000 84af beq.w 8003bee + 8003290: 69fb ldr r3, [r7, #28] + 8003292: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8003296: 689b ldr r3, [r3, #8] + 8003298: 0a1b lsrs r3, r3, #8 + 800329a: f3c3 020d ubfx r2, r3, #0, #14 + 800329e: 687b ldr r3, [r7, #4] + 80032a0: f8c3 24d4 str.w r2, [r3, #1236] @ 0x4d4 + 80032a4: 687b ldr r3, [r7, #4] + 80032a6: 681b ldr r3, [r3, #0] + 80032a8: 4618 mov r0, r3 + 80032aa: f005 fcc7 bl 8008c3c + 80032ae: 4603 mov r3, r0 + 80032b0: f003 0302 and.w r3, r3, #2 + 80032b4: 2b02 cmp r3, #2 + 80032b6: d107 bne.n 80032c8 + 80032b8: 687b ldr r3, [r7, #4] + 80032ba: 681b ldr r3, [r3, #0] + 80032bc: 695a ldr r2, [r3, #20] + 80032be: 687b ldr r3, [r7, #4] + 80032c0: 681b ldr r3, [r3, #0] + 80032c2: f002 0202 and.w r2, r2, #2 + 80032c6: 615a str r2, [r3, #20] + 80032c8: 687b ldr r3, [r7, #4] + 80032ca: 681b ldr r3, [r3, #0] + 80032cc: 4618 mov r0, r3 + 80032ce: f005 fcb5 bl 8008c3c + 80032d2: 4603 mov r3, r0 + 80032d4: f003 0310 and.w r3, r3, #16 + 80032d8: 2b10 cmp r3, #16 + 80032da: d161 bne.n 80033a0 + 80032dc: 687b ldr r3, [r7, #4] + 80032de: 681b ldr r3, [r3, #0] + 80032e0: 699a ldr r2, [r3, #24] + 80032e2: 687b ldr r3, [r7, #4] + 80032e4: 681b ldr r3, [r3, #0] + 80032e6: f022 0210 bic.w r2, r2, #16 + 80032ea: 619a str r2, [r3, #24] + 80032ec: 6a3b ldr r3, [r7, #32] + 80032ee: 6a1b ldr r3, [r3, #32] + 80032f0: 61bb str r3, [r7, #24] + 80032f2: 69bb ldr r3, [r7, #24] + 80032f4: f003 020f and.w r2, r3, #15 + 80032f8: 4613 mov r3, r2 + 80032fa: 00db lsls r3, r3, #3 + 80032fc: 4413 add r3, r2 + 80032fe: 009b lsls r3, r3, #2 + 8003300: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003304: 687a ldr r2, [r7, #4] + 8003306: 4413 add r3, r2 + 8003308: 3304 adds r3, #4 + 800330a: 617b str r3, [r7, #20] + 800330c: 69bb ldr r3, [r7, #24] + 800330e: f403 13f0 and.w r3, r3, #1966080 @ 0x1e0000 + 8003312: f5b3 2f80 cmp.w r3, #262144 @ 0x40000 + 8003316: d124 bne.n 8003362 + 8003318: 69ba ldr r2, [r7, #24] + 800331a: f647 73f0 movw r3, #32752 @ 0x7ff0 + 800331e: 4013 ands r3, r2 + 8003320: 2b00 cmp r3, #0 + 8003322: d035 beq.n 8003390 + 8003324: 697b ldr r3, [r7, #20] + 8003326: 68d9 ldr r1, [r3, #12] + 8003328: 69bb ldr r3, [r7, #24] + 800332a: 091b lsrs r3, r3, #4 + 800332c: b29b uxth r3, r3 + 800332e: f3c3 030a ubfx r3, r3, #0, #11 + 8003332: b29b uxth r3, r3 + 8003334: 461a mov r2, r3 + 8003336: 6a38 ldr r0, [r7, #32] + 8003338: f005 faec bl 8008914 + 800333c: 697b ldr r3, [r7, #20] + 800333e: 68da ldr r2, [r3, #12] + 8003340: 69bb ldr r3, [r7, #24] + 8003342: 091b lsrs r3, r3, #4 + 8003344: f3c3 030a ubfx r3, r3, #0, #11 + 8003348: 441a add r2, r3 + 800334a: 697b ldr r3, [r7, #20] + 800334c: 60da str r2, [r3, #12] + 800334e: 697b ldr r3, [r7, #20] + 8003350: 695a ldr r2, [r3, #20] + 8003352: 69bb ldr r3, [r7, #24] + 8003354: 091b lsrs r3, r3, #4 + 8003356: f3c3 030a ubfx r3, r3, #0, #11 + 800335a: 441a add r2, r3 + 800335c: 697b ldr r3, [r7, #20] + 800335e: 615a str r2, [r3, #20] + 8003360: e016 b.n 8003390 + 8003362: 69bb ldr r3, [r7, #24] + 8003364: f403 13f0 and.w r3, r3, #1966080 @ 0x1e0000 + 8003368: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000 + 800336c: d110 bne.n 8003390 + 800336e: 687b ldr r3, [r7, #4] + 8003370: f203 439c addw r3, r3, #1180 @ 0x49c + 8003374: 2208 movs r2, #8 + 8003376: 4619 mov r1, r3 + 8003378: 6a38 ldr r0, [r7, #32] + 800337a: f005 facb bl 8008914 + 800337e: 697b ldr r3, [r7, #20] + 8003380: 695a ldr r2, [r3, #20] + 8003382: 69bb ldr r3, [r7, #24] + 8003384: 091b lsrs r3, r3, #4 + 8003386: f3c3 030a ubfx r3, r3, #0, #11 + 800338a: 441a add r2, r3 + 800338c: 697b ldr r3, [r7, #20] + 800338e: 615a str r2, [r3, #20] + 8003390: 687b ldr r3, [r7, #4] + 8003392: 681b ldr r3, [r3, #0] + 8003394: 699a ldr r2, [r3, #24] + 8003396: 687b ldr r3, [r7, #4] + 8003398: 681b ldr r3, [r3, #0] + 800339a: f042 0210 orr.w r2, r2, #16 + 800339e: 619a str r2, [r3, #24] + 80033a0: 687b ldr r3, [r7, #4] + 80033a2: 681b ldr r3, [r3, #0] + 80033a4: 4618 mov r0, r3 + 80033a6: f005 fc49 bl 8008c3c + 80033aa: 4603 mov r3, r0 + 80033ac: f403 2300 and.w r3, r3, #524288 @ 0x80000 + 80033b0: f5b3 2f00 cmp.w r3, #524288 @ 0x80000 + 80033b4: f040 80a7 bne.w 8003506 + 80033b8: 2300 movs r3, #0 + 80033ba: 627b str r3, [r7, #36] @ 0x24 + 80033bc: 687b ldr r3, [r7, #4] + 80033be: 681b ldr r3, [r3, #0] + 80033c0: 4618 mov r0, r3 + 80033c2: f005 fc4e bl 8008c62 + 80033c6: 62b8 str r0, [r7, #40] @ 0x28 + 80033c8: e099 b.n 80034fe + 80033ca: 6abb ldr r3, [r7, #40] @ 0x28 + 80033cc: f003 0301 and.w r3, r3, #1 + 80033d0: 2b00 cmp r3, #0 + 80033d2: f000 808e beq.w 80034f2 + 80033d6: 687b ldr r3, [r7, #4] + 80033d8: 681b ldr r3, [r3, #0] + 80033da: 6a7a ldr r2, [r7, #36] @ 0x24 + 80033dc: b2d2 uxtb r2, r2 + 80033de: 4611 mov r1, r2 + 80033e0: 4618 mov r0, r3 + 80033e2: f005 fc72 bl 8008cca + 80033e6: 6138 str r0, [r7, #16] + 80033e8: 693b ldr r3, [r7, #16] + 80033ea: f003 0301 and.w r3, r3, #1 + 80033ee: 2b00 cmp r3, #0 + 80033f0: d00c beq.n 800340c + 80033f2: 6a7b ldr r3, [r7, #36] @ 0x24 + 80033f4: 015a lsls r2, r3, #5 + 80033f6: 69fb ldr r3, [r7, #28] + 80033f8: 4413 add r3, r2 + 80033fa: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80033fe: 461a mov r2, r3 + 8003400: 2301 movs r3, #1 + 8003402: 6093 str r3, [r2, #8] + 8003404: 6a79 ldr r1, [r7, #36] @ 0x24 + 8003406: 6878 ldr r0, [r7, #4] + 8003408: f000 feb8 bl 800417c + 800340c: 693b ldr r3, [r7, #16] + 800340e: f003 0308 and.w r3, r3, #8 + 8003412: 2b00 cmp r3, #0 + 8003414: d00c beq.n 8003430 + 8003416: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003418: 015a lsls r2, r3, #5 + 800341a: 69fb ldr r3, [r7, #28] + 800341c: 4413 add r3, r2 + 800341e: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8003422: 461a mov r2, r3 + 8003424: 2308 movs r3, #8 + 8003426: 6093 str r3, [r2, #8] + 8003428: 6a79 ldr r1, [r7, #36] @ 0x24 + 800342a: 6878 ldr r0, [r7, #4] + 800342c: f000 ff8e bl 800434c + 8003430: 693b ldr r3, [r7, #16] + 8003432: f003 0310 and.w r3, r3, #16 + 8003436: 2b00 cmp r3, #0 + 8003438: d008 beq.n 800344c + 800343a: 6a7b ldr r3, [r7, #36] @ 0x24 + 800343c: 015a lsls r2, r3, #5 + 800343e: 69fb ldr r3, [r7, #28] + 8003440: 4413 add r3, r2 + 8003442: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8003446: 461a mov r2, r3 + 8003448: 2310 movs r3, #16 + 800344a: 6093 str r3, [r2, #8] + 800344c: 693b ldr r3, [r7, #16] + 800344e: f003 0302 and.w r3, r3, #2 + 8003452: 2b00 cmp r3, #0 + 8003454: d030 beq.n 80034b8 + 8003456: 6a3b ldr r3, [r7, #32] + 8003458: 695b ldr r3, [r3, #20] + 800345a: f003 0380 and.w r3, r3, #128 @ 0x80 + 800345e: 2b80 cmp r3, #128 @ 0x80 + 8003460: d109 bne.n 8003476 + 8003462: 69fb ldr r3, [r7, #28] + 8003464: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8003468: 685b ldr r3, [r3, #4] + 800346a: 69fa ldr r2, [r7, #28] + 800346c: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8003470: f443 6380 orr.w r3, r3, #1024 @ 0x400 + 8003474: 6053 str r3, [r2, #4] + 8003476: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003478: 4613 mov r3, r2 + 800347a: 00db lsls r3, r3, #3 + 800347c: 4413 add r3, r2 + 800347e: 009b lsls r3, r3, #2 + 8003480: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003484: 687a ldr r2, [r7, #4] + 8003486: 4413 add r3, r2 + 8003488: 3304 adds r3, #4 + 800348a: 617b str r3, [r7, #20] + 800348c: 697b ldr r3, [r7, #20] + 800348e: 78db ldrb r3, [r3, #3] + 8003490: 2b01 cmp r3, #1 + 8003492: d108 bne.n 80034a6 + 8003494: 697b ldr r3, [r7, #20] + 8003496: 2200 movs r2, #0 + 8003498: 70da strb r2, [r3, #3] + 800349a: 6a7b ldr r3, [r7, #36] @ 0x24 + 800349c: b2db uxtb r3, r3 + 800349e: 4619 mov r1, r3 + 80034a0: 6878 ldr r0, [r7, #4] + 80034a2: f007 fd0b bl 800aebc + 80034a6: 6a7b ldr r3, [r7, #36] @ 0x24 + 80034a8: 015a lsls r2, r3, #5 + 80034aa: 69fb ldr r3, [r7, #28] + 80034ac: 4413 add r3, r2 + 80034ae: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80034b2: 461a mov r2, r3 + 80034b4: 2302 movs r3, #2 + 80034b6: 6093 str r3, [r2, #8] + 80034b8: 693b ldr r3, [r7, #16] + 80034ba: f003 0320 and.w r3, r3, #32 + 80034be: 2b00 cmp r3, #0 + 80034c0: d008 beq.n 80034d4 + 80034c2: 6a7b ldr r3, [r7, #36] @ 0x24 + 80034c4: 015a lsls r2, r3, #5 + 80034c6: 69fb ldr r3, [r7, #28] + 80034c8: 4413 add r3, r2 + 80034ca: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80034ce: 461a mov r2, r3 + 80034d0: 2320 movs r3, #32 + 80034d2: 6093 str r3, [r2, #8] + 80034d4: 693b ldr r3, [r7, #16] + 80034d6: f403 5300 and.w r3, r3, #8192 @ 0x2000 + 80034da: 2b00 cmp r3, #0 + 80034dc: d009 beq.n 80034f2 + 80034de: 6a7b ldr r3, [r7, #36] @ 0x24 + 80034e0: 015a lsls r2, r3, #5 + 80034e2: 69fb ldr r3, [r7, #28] + 80034e4: 4413 add r3, r2 + 80034e6: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80034ea: 461a mov r2, r3 + 80034ec: f44f 5300 mov.w r3, #8192 @ 0x2000 + 80034f0: 6093 str r3, [r2, #8] + 80034f2: 6a7b ldr r3, [r7, #36] @ 0x24 + 80034f4: 3301 adds r3, #1 + 80034f6: 627b str r3, [r7, #36] @ 0x24 + 80034f8: 6abb ldr r3, [r7, #40] @ 0x28 + 80034fa: 085b lsrs r3, r3, #1 + 80034fc: 62bb str r3, [r7, #40] @ 0x28 + 80034fe: 6abb ldr r3, [r7, #40] @ 0x28 + 8003500: 2b00 cmp r3, #0 + 8003502: f47f af62 bne.w 80033ca + 8003506: 687b ldr r3, [r7, #4] + 8003508: 681b ldr r3, [r3, #0] + 800350a: 4618 mov r0, r3 + 800350c: f005 fb96 bl 8008c3c + 8003510: 4603 mov r3, r0 + 8003512: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 8003516: f5b3 2f80 cmp.w r3, #262144 @ 0x40000 + 800351a: f040 80db bne.w 80036d4 + 800351e: 687b ldr r3, [r7, #4] + 8003520: 681b ldr r3, [r3, #0] + 8003522: 4618 mov r0, r3 + 8003524: f005 fbb7 bl 8008c96 + 8003528: 62b8 str r0, [r7, #40] @ 0x28 + 800352a: 2300 movs r3, #0 + 800352c: 627b str r3, [r7, #36] @ 0x24 + 800352e: e0cd b.n 80036cc + 8003530: 6abb ldr r3, [r7, #40] @ 0x28 + 8003532: f003 0301 and.w r3, r3, #1 + 8003536: 2b00 cmp r3, #0 + 8003538: f000 80c2 beq.w 80036c0 + 800353c: 687b ldr r3, [r7, #4] + 800353e: 681b ldr r3, [r3, #0] + 8003540: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003542: b2d2 uxtb r2, r2 + 8003544: 4611 mov r1, r2 + 8003546: 4618 mov r0, r3 + 8003548: f005 fbdd bl 8008d06 + 800354c: 6138 str r0, [r7, #16] + 800354e: 693b ldr r3, [r7, #16] + 8003550: f003 0301 and.w r3, r3, #1 + 8003554: 2b00 cmp r3, #0 + 8003556: d057 beq.n 8003608 + 8003558: 6a7b ldr r3, [r7, #36] @ 0x24 + 800355a: f003 030f and.w r3, r3, #15 + 800355e: 2201 movs r2, #1 + 8003560: fa02 f303 lsl.w r3, r2, r3 + 8003564: 60fb str r3, [r7, #12] + 8003566: 69fb ldr r3, [r7, #28] + 8003568: f503 6300 add.w r3, r3, #2048 @ 0x800 + 800356c: 6b5a ldr r2, [r3, #52] @ 0x34 + 800356e: 68fb ldr r3, [r7, #12] + 8003570: 43db mvns r3, r3 + 8003572: 69f9 ldr r1, [r7, #28] + 8003574: f501 6100 add.w r1, r1, #2048 @ 0x800 + 8003578: 4013 ands r3, r2 + 800357a: 634b str r3, [r1, #52] @ 0x34 + 800357c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800357e: 015a lsls r2, r3, #5 + 8003580: 69fb ldr r3, [r7, #28] + 8003582: 4413 add r3, r2 + 8003584: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8003588: 461a mov r2, r3 + 800358a: 2301 movs r3, #1 + 800358c: 6093 str r3, [r2, #8] + 800358e: 687b ldr r3, [r7, #4] + 8003590: 799b ldrb r3, [r3, #6] + 8003592: 2b01 cmp r3, #1 + 8003594: d132 bne.n 80035fc + 8003596: 6879 ldr r1, [r7, #4] + 8003598: 6a7a ldr r2, [r7, #36] @ 0x24 + 800359a: 4613 mov r3, r2 + 800359c: 00db lsls r3, r3, #3 + 800359e: 4413 add r3, r2 + 80035a0: 009b lsls r3, r3, #2 + 80035a2: 440b add r3, r1 + 80035a4: 3320 adds r3, #32 + 80035a6: 6819 ldr r1, [r3, #0] + 80035a8: 6878 ldr r0, [r7, #4] + 80035aa: 6a7a ldr r2, [r7, #36] @ 0x24 + 80035ac: 4613 mov r3, r2 + 80035ae: 00db lsls r3, r3, #3 + 80035b0: 4413 add r3, r2 + 80035b2: 009b lsls r3, r3, #2 + 80035b4: 4403 add r3, r0 + 80035b6: 331c adds r3, #28 + 80035b8: 681b ldr r3, [r3, #0] + 80035ba: 4419 add r1, r3 + 80035bc: 6878 ldr r0, [r7, #4] + 80035be: 6a7a ldr r2, [r7, #36] @ 0x24 + 80035c0: 4613 mov r3, r2 + 80035c2: 00db lsls r3, r3, #3 + 80035c4: 4413 add r3, r2 + 80035c6: 009b lsls r3, r3, #2 + 80035c8: 4403 add r3, r0 + 80035ca: 3320 adds r3, #32 + 80035cc: 6019 str r1, [r3, #0] + 80035ce: 6a7b ldr r3, [r7, #36] @ 0x24 + 80035d0: 2b00 cmp r3, #0 + 80035d2: d113 bne.n 80035fc + 80035d4: 6879 ldr r1, [r7, #4] + 80035d6: 6a7a ldr r2, [r7, #36] @ 0x24 + 80035d8: 4613 mov r3, r2 + 80035da: 00db lsls r3, r3, #3 + 80035dc: 4413 add r3, r2 + 80035de: 009b lsls r3, r3, #2 + 80035e0: 440b add r3, r1 + 80035e2: 3324 adds r3, #36 @ 0x24 + 80035e4: 681b ldr r3, [r3, #0] + 80035e6: 2b00 cmp r3, #0 + 80035e8: d108 bne.n 80035fc + 80035ea: 687b ldr r3, [r7, #4] + 80035ec: 6818 ldr r0, [r3, #0] + 80035ee: 687b ldr r3, [r7, #4] + 80035f0: f203 439c addw r3, r3, #1180 @ 0x49c + 80035f4: 461a mov r2, r3 + 80035f6: 2101 movs r1, #1 + 80035f8: f005 fbe4 bl 8008dc4 + 80035fc: 6a7b ldr r3, [r7, #36] @ 0x24 + 80035fe: b2db uxtb r3, r3 + 8003600: 4619 mov r1, r3 + 8003602: 6878 ldr r0, [r7, #4] + 8003604: f007 fbd5 bl 800adb2 + 8003608: 693b ldr r3, [r7, #16] + 800360a: f003 0308 and.w r3, r3, #8 + 800360e: 2b00 cmp r3, #0 + 8003610: d008 beq.n 8003624 + 8003612: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003614: 015a lsls r2, r3, #5 + 8003616: 69fb ldr r3, [r7, #28] + 8003618: 4413 add r3, r2 + 800361a: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800361e: 461a mov r2, r3 + 8003620: 2308 movs r3, #8 + 8003622: 6093 str r3, [r2, #8] + 8003624: 693b ldr r3, [r7, #16] + 8003626: f003 0310 and.w r3, r3, #16 + 800362a: 2b00 cmp r3, #0 + 800362c: d008 beq.n 8003640 + 800362e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003630: 015a lsls r2, r3, #5 + 8003632: 69fb ldr r3, [r7, #28] + 8003634: 4413 add r3, r2 + 8003636: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800363a: 461a mov r2, r3 + 800363c: 2310 movs r3, #16 + 800363e: 6093 str r3, [r2, #8] + 8003640: 693b ldr r3, [r7, #16] + 8003642: f003 0340 and.w r3, r3, #64 @ 0x40 + 8003646: 2b00 cmp r3, #0 + 8003648: d008 beq.n 800365c + 800364a: 6a7b ldr r3, [r7, #36] @ 0x24 + 800364c: 015a lsls r2, r3, #5 + 800364e: 69fb ldr r3, [r7, #28] + 8003650: 4413 add r3, r2 + 8003652: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8003656: 461a mov r2, r3 + 8003658: 2340 movs r3, #64 @ 0x40 + 800365a: 6093 str r3, [r2, #8] + 800365c: 693b ldr r3, [r7, #16] + 800365e: f003 0302 and.w r3, r3, #2 + 8003662: 2b00 cmp r3, #0 + 8003664: d023 beq.n 80036ae + 8003666: 6a79 ldr r1, [r7, #36] @ 0x24 + 8003668: 6a38 ldr r0, [r7, #32] + 800366a: f004 fbcb bl 8007e04 + 800366e: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003670: 4613 mov r3, r2 + 8003672: 00db lsls r3, r3, #3 + 8003674: 4413 add r3, r2 + 8003676: 009b lsls r3, r3, #2 + 8003678: 3310 adds r3, #16 + 800367a: 687a ldr r2, [r7, #4] + 800367c: 4413 add r3, r2 + 800367e: 3304 adds r3, #4 + 8003680: 617b str r3, [r7, #20] + 8003682: 697b ldr r3, [r7, #20] + 8003684: 78db ldrb r3, [r3, #3] + 8003686: 2b01 cmp r3, #1 + 8003688: d108 bne.n 800369c + 800368a: 697b ldr r3, [r7, #20] + 800368c: 2200 movs r2, #0 + 800368e: 70da strb r2, [r3, #3] + 8003690: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003692: b2db uxtb r3, r3 + 8003694: 4619 mov r1, r3 + 8003696: 6878 ldr r0, [r7, #4] + 8003698: f007 fc22 bl 800aee0 + 800369c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800369e: 015a lsls r2, r3, #5 + 80036a0: 69fb ldr r3, [r7, #28] + 80036a2: 4413 add r3, r2 + 80036a4: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80036a8: 461a mov r2, r3 + 80036aa: 2302 movs r3, #2 + 80036ac: 6093 str r3, [r2, #8] + 80036ae: 693b ldr r3, [r7, #16] + 80036b0: f003 0380 and.w r3, r3, #128 @ 0x80 + 80036b4: 2b00 cmp r3, #0 + 80036b6: d003 beq.n 80036c0 + 80036b8: 6a79 ldr r1, [r7, #36] @ 0x24 + 80036ba: 6878 ldr r0, [r7, #4] + 80036bc: f000 fcd2 bl 8004064 + 80036c0: 6a7b ldr r3, [r7, #36] @ 0x24 + 80036c2: 3301 adds r3, #1 + 80036c4: 627b str r3, [r7, #36] @ 0x24 + 80036c6: 6abb ldr r3, [r7, #40] @ 0x28 + 80036c8: 085b lsrs r3, r3, #1 + 80036ca: 62bb str r3, [r7, #40] @ 0x28 + 80036cc: 6abb ldr r3, [r7, #40] @ 0x28 + 80036ce: 2b00 cmp r3, #0 + 80036d0: f47f af2e bne.w 8003530 + 80036d4: 687b ldr r3, [r7, #4] + 80036d6: 681b ldr r3, [r3, #0] + 80036d8: 4618 mov r0, r3 + 80036da: f005 faaf bl 8008c3c + 80036de: 4603 mov r3, r0 + 80036e0: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 80036e4: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 80036e8: d122 bne.n 8003730 + 80036ea: 69fb ldr r3, [r7, #28] + 80036ec: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80036f0: 685b ldr r3, [r3, #4] + 80036f2: 69fa ldr r2, [r7, #28] + 80036f4: f502 6200 add.w r2, r2, #2048 @ 0x800 + 80036f8: f023 0301 bic.w r3, r3, #1 + 80036fc: 6053 str r3, [r2, #4] + 80036fe: 687b ldr r3, [r7, #4] + 8003700: f893 34cc ldrb.w r3, [r3, #1228] @ 0x4cc + 8003704: 2b01 cmp r3, #1 + 8003706: d108 bne.n 800371a + 8003708: 687b ldr r3, [r7, #4] + 800370a: 2200 movs r2, #0 + 800370c: f883 24cc strb.w r2, [r3, #1228] @ 0x4cc + 8003710: 2100 movs r1, #0 + 8003712: 6878 ldr r0, [r7, #4] + 8003714: f007 fd8a bl 800b22c + 8003718: e002 b.n 8003720 + 800371a: 6878 ldr r0, [r7, #4] + 800371c: f007 fbc0 bl 800aea0 + 8003720: 687b ldr r3, [r7, #4] + 8003722: 681b ldr r3, [r3, #0] + 8003724: 695a ldr r2, [r3, #20] + 8003726: 687b ldr r3, [r7, #4] + 8003728: 681b ldr r3, [r3, #0] + 800372a: f002 4200 and.w r2, r2, #2147483648 @ 0x80000000 + 800372e: 615a str r2, [r3, #20] + 8003730: 687b ldr r3, [r7, #4] + 8003732: 681b ldr r3, [r3, #0] + 8003734: 4618 mov r0, r3 + 8003736: f005 fa81 bl 8008c3c + 800373a: 4603 mov r3, r0 + 800373c: f403 6300 and.w r3, r3, #2048 @ 0x800 + 8003740: f5b3 6f00 cmp.w r3, #2048 @ 0x800 + 8003744: d112 bne.n 800376c + 8003746: 69fb ldr r3, [r7, #28] + 8003748: f503 6300 add.w r3, r3, #2048 @ 0x800 + 800374c: 689b ldr r3, [r3, #8] + 800374e: f003 0301 and.w r3, r3, #1 + 8003752: 2b01 cmp r3, #1 + 8003754: d102 bne.n 800375c + 8003756: 6878 ldr r0, [r7, #4] + 8003758: f007 fb7c bl 800ae54 + 800375c: 687b ldr r3, [r7, #4] + 800375e: 681b ldr r3, [r3, #0] + 8003760: 695a ldr r2, [r3, #20] + 8003762: 687b ldr r3, [r7, #4] + 8003764: 681b ldr r3, [r3, #0] + 8003766: f402 6200 and.w r2, r2, #2048 @ 0x800 + 800376a: 615a str r2, [r3, #20] + 800376c: 687b ldr r3, [r7, #4] + 800376e: 681b ldr r3, [r3, #0] + 8003770: 4618 mov r0, r3 + 8003772: f005 fa63 bl 8008c3c + 8003776: 4603 mov r3, r0 + 8003778: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800377c: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000 + 8003780: d121 bne.n 80037c6 + 8003782: 687b ldr r3, [r7, #4] + 8003784: 681b ldr r3, [r3, #0] + 8003786: 695a ldr r2, [r3, #20] + 8003788: 687b ldr r3, [r7, #4] + 800378a: 681b ldr r3, [r3, #0] + 800378c: f002 6200 and.w r2, r2, #134217728 @ 0x8000000 + 8003790: 615a str r2, [r3, #20] + 8003792: 687b ldr r3, [r7, #4] + 8003794: f893 34cc ldrb.w r3, [r3, #1228] @ 0x4cc + 8003798: 2b00 cmp r3, #0 + 800379a: d111 bne.n 80037c0 + 800379c: 687b ldr r3, [r7, #4] + 800379e: 2201 movs r2, #1 + 80037a0: f883 24cc strb.w r2, [r3, #1228] @ 0x4cc + 80037a4: 687b ldr r3, [r7, #4] + 80037a6: 681b ldr r3, [r3, #0] + 80037a8: 6d5b ldr r3, [r3, #84] @ 0x54 + 80037aa: 089b lsrs r3, r3, #2 + 80037ac: f003 020f and.w r2, r3, #15 + 80037b0: 687b ldr r3, [r7, #4] + 80037b2: f8c3 24d0 str.w r2, [r3, #1232] @ 0x4d0 + 80037b6: 2101 movs r1, #1 + 80037b8: 6878 ldr r0, [r7, #4] + 80037ba: f007 fd37 bl 800b22c + 80037be: e002 b.n 80037c6 + 80037c0: 6878 ldr r0, [r7, #4] + 80037c2: f007 fb47 bl 800ae54 + 80037c6: 687b ldr r3, [r7, #4] + 80037c8: 681b ldr r3, [r3, #0] + 80037ca: 4618 mov r0, r3 + 80037cc: f005 fa36 bl 8008c3c + 80037d0: 4603 mov r3, r0 + 80037d2: f403 5380 and.w r3, r3, #4096 @ 0x1000 + 80037d6: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 80037da: f040 80b7 bne.w 800394c + 80037de: 69fb ldr r3, [r7, #28] + 80037e0: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80037e4: 685b ldr r3, [r3, #4] + 80037e6: 69fa ldr r2, [r7, #28] + 80037e8: f502 6200 add.w r2, r2, #2048 @ 0x800 + 80037ec: f023 0301 bic.w r3, r3, #1 + 80037f0: 6053 str r3, [r2, #4] + 80037f2: 687b ldr r3, [r7, #4] + 80037f4: 681b ldr r3, [r3, #0] + 80037f6: 2110 movs r1, #16 + 80037f8: 4618 mov r0, r3 + 80037fa: f004 fb03 bl 8007e04 + 80037fe: 2300 movs r3, #0 + 8003800: 62fb str r3, [r7, #44] @ 0x2c + 8003802: e046 b.n 8003892 + 8003804: 6afb ldr r3, [r7, #44] @ 0x2c + 8003806: 015a lsls r2, r3, #5 + 8003808: 69fb ldr r3, [r7, #28] + 800380a: 4413 add r3, r2 + 800380c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8003810: 461a mov r2, r3 + 8003812: f64f 337f movw r3, #64383 @ 0xfb7f + 8003816: 6093 str r3, [r2, #8] + 8003818: 6afb ldr r3, [r7, #44] @ 0x2c + 800381a: 015a lsls r2, r3, #5 + 800381c: 69fb ldr r3, [r7, #28] + 800381e: 4413 add r3, r2 + 8003820: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8003824: 681b ldr r3, [r3, #0] + 8003826: 6afa ldr r2, [r7, #44] @ 0x2c + 8003828: 0151 lsls r1, r2, #5 + 800382a: 69fa ldr r2, [r7, #28] + 800382c: 440a add r2, r1 + 800382e: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8003832: f423 1300 bic.w r3, r3, #2097152 @ 0x200000 + 8003836: 6013 str r3, [r2, #0] + 8003838: 6afb ldr r3, [r7, #44] @ 0x2c + 800383a: 015a lsls r2, r3, #5 + 800383c: 69fb ldr r3, [r7, #28] + 800383e: 4413 add r3, r2 + 8003840: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8003844: 461a mov r2, r3 + 8003846: f64f 337f movw r3, #64383 @ 0xfb7f + 800384a: 6093 str r3, [r2, #8] + 800384c: 6afb ldr r3, [r7, #44] @ 0x2c + 800384e: 015a lsls r2, r3, #5 + 8003850: 69fb ldr r3, [r7, #28] + 8003852: 4413 add r3, r2 + 8003854: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8003858: 681b ldr r3, [r3, #0] + 800385a: 6afa ldr r2, [r7, #44] @ 0x2c + 800385c: 0151 lsls r1, r2, #5 + 800385e: 69fa ldr r2, [r7, #28] + 8003860: 440a add r2, r1 + 8003862: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8003866: f423 1300 bic.w r3, r3, #2097152 @ 0x200000 + 800386a: 6013 str r3, [r2, #0] + 800386c: 6afb ldr r3, [r7, #44] @ 0x2c + 800386e: 015a lsls r2, r3, #5 + 8003870: 69fb ldr r3, [r7, #28] + 8003872: 4413 add r3, r2 + 8003874: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8003878: 681b ldr r3, [r3, #0] + 800387a: 6afa ldr r2, [r7, #44] @ 0x2c + 800387c: 0151 lsls r1, r2, #5 + 800387e: 69fa ldr r2, [r7, #28] + 8003880: 440a add r2, r1 + 8003882: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8003886: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 800388a: 6013 str r3, [r2, #0] + 800388c: 6afb ldr r3, [r7, #44] @ 0x2c + 800388e: 3301 adds r3, #1 + 8003890: 62fb str r3, [r7, #44] @ 0x2c + 8003892: 687b ldr r3, [r7, #4] + 8003894: 791b ldrb r3, [r3, #4] + 8003896: 461a mov r2, r3 + 8003898: 6afb ldr r3, [r7, #44] @ 0x2c + 800389a: 4293 cmp r3, r2 + 800389c: d3b2 bcc.n 8003804 + 800389e: 69fb ldr r3, [r7, #28] + 80038a0: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80038a4: 69db ldr r3, [r3, #28] + 80038a6: 69fa ldr r2, [r7, #28] + 80038a8: f502 6200 add.w r2, r2, #2048 @ 0x800 + 80038ac: f043 1301 orr.w r3, r3, #65537 @ 0x10001 + 80038b0: 61d3 str r3, [r2, #28] + 80038b2: 687b ldr r3, [r7, #4] + 80038b4: 7bdb ldrb r3, [r3, #15] + 80038b6: 2b00 cmp r3, #0 + 80038b8: d016 beq.n 80038e8 + 80038ba: 69fb ldr r3, [r7, #28] + 80038bc: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80038c0: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 80038c4: 69fa ldr r2, [r7, #28] + 80038c6: f502 6200 add.w r2, r2, #2048 @ 0x800 + 80038ca: f043 030b orr.w r3, r3, #11 + 80038ce: f8c2 3084 str.w r3, [r2, #132] @ 0x84 + 80038d2: 69fb ldr r3, [r7, #28] + 80038d4: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80038d8: 6c5b ldr r3, [r3, #68] @ 0x44 + 80038da: 69fa ldr r2, [r7, #28] + 80038dc: f502 6200 add.w r2, r2, #2048 @ 0x800 + 80038e0: f043 030b orr.w r3, r3, #11 + 80038e4: 6453 str r3, [r2, #68] @ 0x44 + 80038e6: e015 b.n 8003914 + 80038e8: 69fb ldr r3, [r7, #28] + 80038ea: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80038ee: 695b ldr r3, [r3, #20] + 80038f0: 69fa ldr r2, [r7, #28] + 80038f2: f502 6200 add.w r2, r2, #2048 @ 0x800 + 80038f6: f443 5300 orr.w r3, r3, #8192 @ 0x2000 + 80038fa: f043 032b orr.w r3, r3, #43 @ 0x2b + 80038fe: 6153 str r3, [r2, #20] + 8003900: 69fb ldr r3, [r7, #28] + 8003902: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8003906: 691b ldr r3, [r3, #16] + 8003908: 69fa ldr r2, [r7, #28] + 800390a: f502 6200 add.w r2, r2, #2048 @ 0x800 + 800390e: f043 030b orr.w r3, r3, #11 + 8003912: 6113 str r3, [r2, #16] + 8003914: 69fb ldr r3, [r7, #28] + 8003916: f503 6300 add.w r3, r3, #2048 @ 0x800 + 800391a: 681b ldr r3, [r3, #0] + 800391c: 69fa ldr r2, [r7, #28] + 800391e: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8003922: f423 63fe bic.w r3, r3, #2032 @ 0x7f0 + 8003926: 6013 str r3, [r2, #0] + 8003928: 687b ldr r3, [r7, #4] + 800392a: 6818 ldr r0, [r3, #0] + 800392c: 687b ldr r3, [r7, #4] + 800392e: 7999 ldrb r1, [r3, #6] + 8003930: 687b ldr r3, [r7, #4] + 8003932: f203 439c addw r3, r3, #1180 @ 0x49c + 8003936: 461a mov r2, r3 + 8003938: f005 fa44 bl 8008dc4 + 800393c: 687b ldr r3, [r7, #4] + 800393e: 681b ldr r3, [r3, #0] + 8003940: 695a ldr r2, [r3, #20] + 8003942: 687b ldr r3, [r7, #4] + 8003944: 681b ldr r3, [r3, #0] + 8003946: f402 5280 and.w r2, r2, #4096 @ 0x1000 + 800394a: 615a str r2, [r3, #20] + 800394c: 687b ldr r3, [r7, #4] + 800394e: 681b ldr r3, [r3, #0] + 8003950: 4618 mov r0, r3 + 8003952: f005 f973 bl 8008c3c + 8003956: 4603 mov r3, r0 + 8003958: f403 5300 and.w r3, r3, #8192 @ 0x2000 + 800395c: f5b3 5f00 cmp.w r3, #8192 @ 0x2000 + 8003960: d123 bne.n 80039aa + 8003962: 687b ldr r3, [r7, #4] + 8003964: 681b ldr r3, [r3, #0] + 8003966: 4618 mov r0, r3 + 8003968: f005 fa09 bl 8008d7e + 800396c: 687b ldr r3, [r7, #4] + 800396e: 681b ldr r3, [r3, #0] + 8003970: 4618 mov r0, r3 + 8003972: f004 fac0 bl 8007ef6 + 8003976: 4603 mov r3, r0 + 8003978: 461a mov r2, r3 + 800397a: 687b ldr r3, [r7, #4] + 800397c: 71da strb r2, [r3, #7] + 800397e: 687b ldr r3, [r7, #4] + 8003980: 681c ldr r4, [r3, #0] + 8003982: f000 fe8b bl 800469c + 8003986: 4601 mov r1, r0 + 8003988: 687b ldr r3, [r7, #4] + 800398a: 79db ldrb r3, [r3, #7] + 800398c: 461a mov r2, r3 + 800398e: 4620 mov r0, r4 + 8003990: f003 ffca bl 8007928 + 8003994: 6878 ldr r0, [r7, #4] + 8003996: f007 fa34 bl 800ae02 + 800399a: 687b ldr r3, [r7, #4] + 800399c: 681b ldr r3, [r3, #0] + 800399e: 695a ldr r2, [r3, #20] + 80039a0: 687b ldr r3, [r7, #4] + 80039a2: 681b ldr r3, [r3, #0] + 80039a4: f402 5200 and.w r2, r2, #8192 @ 0x2000 + 80039a8: 615a str r2, [r3, #20] + 80039aa: 687b ldr r3, [r7, #4] + 80039ac: 681b ldr r3, [r3, #0] + 80039ae: 4618 mov r0, r3 + 80039b0: f005 f944 bl 8008c3c + 80039b4: 4603 mov r3, r0 + 80039b6: f003 0308 and.w r3, r3, #8 + 80039ba: 2b08 cmp r3, #8 + 80039bc: d10a bne.n 80039d4 + 80039be: 6878 ldr r0, [r7, #4] + 80039c0: f007 fa11 bl 800ade6 + 80039c4: 687b ldr r3, [r7, #4] + 80039c6: 681b ldr r3, [r3, #0] + 80039c8: 695a ldr r2, [r3, #20] + 80039ca: 687b ldr r3, [r7, #4] + 80039cc: 681b ldr r3, [r3, #0] + 80039ce: f002 0208 and.w r2, r2, #8 + 80039d2: 615a str r2, [r3, #20] + 80039d4: 687b ldr r3, [r7, #4] + 80039d6: 681b ldr r3, [r3, #0] + 80039d8: 4618 mov r0, r3 + 80039da: f005 f92f bl 8008c3c + 80039de: 4603 mov r3, r0 + 80039e0: f003 0380 and.w r3, r3, #128 @ 0x80 + 80039e4: 2b80 cmp r3, #128 @ 0x80 + 80039e6: d123 bne.n 8003a30 + 80039e8: 6a3b ldr r3, [r7, #32] + 80039ea: 699b ldr r3, [r3, #24] + 80039ec: f023 0280 bic.w r2, r3, #128 @ 0x80 + 80039f0: 6a3b ldr r3, [r7, #32] + 80039f2: 619a str r2, [r3, #24] + 80039f4: 2301 movs r3, #1 + 80039f6: 627b str r3, [r7, #36] @ 0x24 + 80039f8: e014 b.n 8003a24 + 80039fa: 6879 ldr r1, [r7, #4] + 80039fc: 6a7a ldr r2, [r7, #36] @ 0x24 + 80039fe: 4613 mov r3, r2 + 8003a00: 00db lsls r3, r3, #3 + 8003a02: 4413 add r3, r2 + 8003a04: 009b lsls r3, r3, #2 + 8003a06: 440b add r3, r1 + 8003a08: f203 2357 addw r3, r3, #599 @ 0x257 + 8003a0c: 781b ldrb r3, [r3, #0] + 8003a0e: 2b01 cmp r3, #1 + 8003a10: d105 bne.n 8003a1e + 8003a12: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003a14: b2db uxtb r3, r3 + 8003a16: 4619 mov r1, r3 + 8003a18: 6878 ldr r0, [r7, #4] + 8003a1a: f000 faf2 bl 8004002 + 8003a1e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003a20: 3301 adds r3, #1 + 8003a22: 627b str r3, [r7, #36] @ 0x24 + 8003a24: 687b ldr r3, [r7, #4] + 8003a26: 791b ldrb r3, [r3, #4] + 8003a28: 461a mov r2, r3 + 8003a2a: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003a2c: 4293 cmp r3, r2 + 8003a2e: d3e4 bcc.n 80039fa + 8003a30: 687b ldr r3, [r7, #4] + 8003a32: 681b ldr r3, [r3, #0] + 8003a34: 4618 mov r0, r3 + 8003a36: f005 f901 bl 8008c3c + 8003a3a: 4603 mov r3, r0 + 8003a3c: f403 1380 and.w r3, r3, #1048576 @ 0x100000 + 8003a40: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000 + 8003a44: d13c bne.n 8003ac0 + 8003a46: 2301 movs r3, #1 + 8003a48: 627b str r3, [r7, #36] @ 0x24 + 8003a4a: e02b b.n 8003aa4 + 8003a4c: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003a4e: 015a lsls r2, r3, #5 + 8003a50: 69fb ldr r3, [r7, #28] + 8003a52: 4413 add r3, r2 + 8003a54: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8003a58: 681b ldr r3, [r3, #0] + 8003a5a: 61bb str r3, [r7, #24] + 8003a5c: 6879 ldr r1, [r7, #4] + 8003a5e: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003a60: 4613 mov r3, r2 + 8003a62: 00db lsls r3, r3, #3 + 8003a64: 4413 add r3, r2 + 8003a66: 009b lsls r3, r3, #2 + 8003a68: 440b add r3, r1 + 8003a6a: 3318 adds r3, #24 + 8003a6c: 781b ldrb r3, [r3, #0] + 8003a6e: 2b01 cmp r3, #1 + 8003a70: d115 bne.n 8003a9e + 8003a72: 69bb ldr r3, [r7, #24] + 8003a74: 2b00 cmp r3, #0 + 8003a76: da12 bge.n 8003a9e + 8003a78: 6879 ldr r1, [r7, #4] + 8003a7a: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003a7c: 4613 mov r3, r2 + 8003a7e: 00db lsls r3, r3, #3 + 8003a80: 4413 add r3, r2 + 8003a82: 009b lsls r3, r3, #2 + 8003a84: 440b add r3, r1 + 8003a86: 3317 adds r3, #23 + 8003a88: 2201 movs r2, #1 + 8003a8a: 701a strb r2, [r3, #0] + 8003a8c: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003a8e: b2db uxtb r3, r3 + 8003a90: f063 037f orn r3, r3, #127 @ 0x7f + 8003a94: b2db uxtb r3, r3 + 8003a96: 4619 mov r1, r3 + 8003a98: 6878 ldr r0, [r7, #4] + 8003a9a: f000 fab2 bl 8004002 + 8003a9e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003aa0: 3301 adds r3, #1 + 8003aa2: 627b str r3, [r7, #36] @ 0x24 + 8003aa4: 687b ldr r3, [r7, #4] + 8003aa6: 791b ldrb r3, [r3, #4] + 8003aa8: 461a mov r2, r3 + 8003aaa: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003aac: 4293 cmp r3, r2 + 8003aae: d3cd bcc.n 8003a4c + 8003ab0: 687b ldr r3, [r7, #4] + 8003ab2: 681b ldr r3, [r3, #0] + 8003ab4: 695a ldr r2, [r3, #20] + 8003ab6: 687b ldr r3, [r7, #4] + 8003ab8: 681b ldr r3, [r3, #0] + 8003aba: f402 1280 and.w r2, r2, #1048576 @ 0x100000 + 8003abe: 615a str r2, [r3, #20] + 8003ac0: 687b ldr r3, [r7, #4] + 8003ac2: 681b ldr r3, [r3, #0] + 8003ac4: 4618 mov r0, r3 + 8003ac6: f005 f8b9 bl 8008c3c + 8003aca: 4603 mov r3, r0 + 8003acc: f403 1300 and.w r3, r3, #2097152 @ 0x200000 + 8003ad0: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000 + 8003ad4: d156 bne.n 8003b84 + 8003ad6: 2301 movs r3, #1 + 8003ad8: 627b str r3, [r7, #36] @ 0x24 + 8003ada: e045 b.n 8003b68 + 8003adc: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003ade: 015a lsls r2, r3, #5 + 8003ae0: 69fb ldr r3, [r7, #28] + 8003ae2: 4413 add r3, r2 + 8003ae4: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8003ae8: 681b ldr r3, [r3, #0] + 8003aea: 61bb str r3, [r7, #24] + 8003aec: 6879 ldr r1, [r7, #4] + 8003aee: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003af0: 4613 mov r3, r2 + 8003af2: 00db lsls r3, r3, #3 + 8003af4: 4413 add r3, r2 + 8003af6: 009b lsls r3, r3, #2 + 8003af8: 440b add r3, r1 + 8003afa: f503 7316 add.w r3, r3, #600 @ 0x258 + 8003afe: 781b ldrb r3, [r3, #0] + 8003b00: 2b01 cmp r3, #1 + 8003b02: d12e bne.n 8003b62 + 8003b04: 69bb ldr r3, [r7, #24] + 8003b06: 2b00 cmp r3, #0 + 8003b08: da2b bge.n 8003b62 + 8003b0a: 69bb ldr r3, [r7, #24] + 8003b0c: 0c1a lsrs r2, r3, #16 + 8003b0e: 687b ldr r3, [r7, #4] + 8003b10: f8d3 34d4 ldr.w r3, [r3, #1236] @ 0x4d4 + 8003b14: 4053 eors r3, r2 + 8003b16: f003 0301 and.w r3, r3, #1 + 8003b1a: 2b00 cmp r3, #0 + 8003b1c: d121 bne.n 8003b62 + 8003b1e: 6879 ldr r1, [r7, #4] + 8003b20: 6a7a ldr r2, [r7, #36] @ 0x24 + 8003b22: 4613 mov r3, r2 + 8003b24: 00db lsls r3, r3, #3 + 8003b26: 4413 add r3, r2 + 8003b28: 009b lsls r3, r3, #2 + 8003b2a: 440b add r3, r1 + 8003b2c: f203 2357 addw r3, r3, #599 @ 0x257 + 8003b30: 2201 movs r2, #1 + 8003b32: 701a strb r2, [r3, #0] + 8003b34: 6a3b ldr r3, [r7, #32] + 8003b36: 699b ldr r3, [r3, #24] + 8003b38: f043 0280 orr.w r2, r3, #128 @ 0x80 + 8003b3c: 6a3b ldr r3, [r7, #32] + 8003b3e: 619a str r2, [r3, #24] + 8003b40: 6a3b ldr r3, [r7, #32] + 8003b42: 695b ldr r3, [r3, #20] + 8003b44: f003 0380 and.w r3, r3, #128 @ 0x80 + 8003b48: 2b00 cmp r3, #0 + 8003b4a: d10a bne.n 8003b62 + 8003b4c: 69fb ldr r3, [r7, #28] + 8003b4e: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8003b52: 685b ldr r3, [r3, #4] + 8003b54: 69fa ldr r2, [r7, #28] + 8003b56: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8003b5a: f443 7300 orr.w r3, r3, #512 @ 0x200 + 8003b5e: 6053 str r3, [r2, #4] + 8003b60: e008 b.n 8003b74 + 8003b62: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003b64: 3301 adds r3, #1 + 8003b66: 627b str r3, [r7, #36] @ 0x24 + 8003b68: 687b ldr r3, [r7, #4] + 8003b6a: 791b ldrb r3, [r3, #4] + 8003b6c: 461a mov r2, r3 + 8003b6e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8003b70: 4293 cmp r3, r2 + 8003b72: d3b3 bcc.n 8003adc + 8003b74: 687b ldr r3, [r7, #4] + 8003b76: 681b ldr r3, [r3, #0] + 8003b78: 695a ldr r2, [r3, #20] + 8003b7a: 687b ldr r3, [r7, #4] + 8003b7c: 681b ldr r3, [r3, #0] + 8003b7e: f402 1200 and.w r2, r2, #2097152 @ 0x200000 + 8003b82: 615a str r2, [r3, #20] + 8003b84: 687b ldr r3, [r7, #4] + 8003b86: 681b ldr r3, [r3, #0] + 8003b88: 4618 mov r0, r3 + 8003b8a: f005 f857 bl 8008c3c + 8003b8e: 4603 mov r3, r0 + 8003b90: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000 + 8003b94: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8003b98: d10a bne.n 8003bb0 + 8003b9a: 6878 ldr r0, [r7, #4] + 8003b9c: f007 f9b2 bl 800af04 + 8003ba0: 687b ldr r3, [r7, #4] + 8003ba2: 681b ldr r3, [r3, #0] + 8003ba4: 695a ldr r2, [r3, #20] + 8003ba6: 687b ldr r3, [r7, #4] + 8003ba8: 681b ldr r3, [r3, #0] + 8003baa: f002 4280 and.w r2, r2, #1073741824 @ 0x40000000 + 8003bae: 615a str r2, [r3, #20] + 8003bb0: 687b ldr r3, [r7, #4] + 8003bb2: 681b ldr r3, [r3, #0] + 8003bb4: 4618 mov r0, r3 + 8003bb6: f005 f841 bl 8008c3c + 8003bba: 4603 mov r3, r0 + 8003bbc: f003 0304 and.w r3, r3, #4 + 8003bc0: 2b04 cmp r3, #4 + 8003bc2: d115 bne.n 8003bf0 + 8003bc4: 687b ldr r3, [r7, #4] + 8003bc6: 681b ldr r3, [r3, #0] + 8003bc8: 685b ldr r3, [r3, #4] + 8003bca: 61bb str r3, [r7, #24] + 8003bcc: 69bb ldr r3, [r7, #24] + 8003bce: f003 0304 and.w r3, r3, #4 + 8003bd2: 2b00 cmp r3, #0 + 8003bd4: d002 beq.n 8003bdc + 8003bd6: 6878 ldr r0, [r7, #4] + 8003bd8: f007 f9a2 bl 800af20 + 8003bdc: 687b ldr r3, [r7, #4] + 8003bde: 681b ldr r3, [r3, #0] + 8003be0: 6859 ldr r1, [r3, #4] + 8003be2: 687b ldr r3, [r7, #4] + 8003be4: 681b ldr r3, [r3, #0] + 8003be6: 69ba ldr r2, [r7, #24] + 8003be8: 430a orrs r2, r1 + 8003bea: 605a str r2, [r3, #4] + 8003bec: e000 b.n 8003bf0 + 8003bee: bf00 nop + 8003bf0: 3734 adds r7, #52 @ 0x34 + 8003bf2: 46bd mov sp, r7 + 8003bf4: bd90 pop {r4, r7, pc} + +08003bf6 : + 8003bf6: b580 push {r7, lr} + 8003bf8: b082 sub sp, #8 + 8003bfa: af00 add r7, sp, #0 + 8003bfc: 6078 str r0, [r7, #4] + 8003bfe: 460b mov r3, r1 + 8003c00: 70fb strb r3, [r7, #3] + 8003c02: 687b ldr r3, [r7, #4] + 8003c04: f893 3494 ldrb.w r3, [r3, #1172] @ 0x494 + 8003c08: 2b01 cmp r3, #1 + 8003c0a: d101 bne.n 8003c10 + 8003c0c: 2302 movs r3, #2 + 8003c0e: e012 b.n 8003c36 + 8003c10: 687b ldr r3, [r7, #4] + 8003c12: 2201 movs r2, #1 + 8003c14: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003c18: 687b ldr r3, [r7, #4] + 8003c1a: 78fa ldrb r2, [r7, #3] + 8003c1c: 745a strb r2, [r3, #17] + 8003c1e: 687b ldr r3, [r7, #4] + 8003c20: 681b ldr r3, [r3, #0] + 8003c22: 78fa ldrb r2, [r7, #3] + 8003c24: 4611 mov r1, r2 + 8003c26: 4618 mov r0, r3 + 8003c28: f004 ffa0 bl 8008b6c + 8003c2c: 687b ldr r3, [r7, #4] + 8003c2e: 2200 movs r2, #0 + 8003c30: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003c34: 2300 movs r3, #0 + 8003c36: 4618 mov r0, r3 + 8003c38: 3708 adds r7, #8 + 8003c3a: 46bd mov sp, r7 + 8003c3c: bd80 pop {r7, pc} + +08003c3e : + 8003c3e: b580 push {r7, lr} + 8003c40: b084 sub sp, #16 + 8003c42: af00 add r7, sp, #0 + 8003c44: 6078 str r0, [r7, #4] + 8003c46: 4608 mov r0, r1 + 8003c48: 4611 mov r1, r2 + 8003c4a: 461a mov r2, r3 + 8003c4c: 4603 mov r3, r0 + 8003c4e: 70fb strb r3, [r7, #3] + 8003c50: 460b mov r3, r1 + 8003c52: 803b strh r3, [r7, #0] + 8003c54: 4613 mov r3, r2 + 8003c56: 70bb strb r3, [r7, #2] + 8003c58: 2300 movs r3, #0 + 8003c5a: 72fb strb r3, [r7, #11] + 8003c5c: f997 3003 ldrsb.w r3, [r7, #3] + 8003c60: 2b00 cmp r3, #0 + 8003c62: da0f bge.n 8003c84 + 8003c64: 78fb ldrb r3, [r7, #3] + 8003c66: f003 020f and.w r2, r3, #15 + 8003c6a: 4613 mov r3, r2 + 8003c6c: 00db lsls r3, r3, #3 + 8003c6e: 4413 add r3, r2 + 8003c70: 009b lsls r3, r3, #2 + 8003c72: 3310 adds r3, #16 + 8003c74: 687a ldr r2, [r7, #4] + 8003c76: 4413 add r3, r2 + 8003c78: 3304 adds r3, #4 + 8003c7a: 60fb str r3, [r7, #12] + 8003c7c: 68fb ldr r3, [r7, #12] + 8003c7e: 2201 movs r2, #1 + 8003c80: 705a strb r2, [r3, #1] + 8003c82: e00f b.n 8003ca4 + 8003c84: 78fb ldrb r3, [r7, #3] + 8003c86: f003 020f and.w r2, r3, #15 + 8003c8a: 4613 mov r3, r2 + 8003c8c: 00db lsls r3, r3, #3 + 8003c8e: 4413 add r3, r2 + 8003c90: 009b lsls r3, r3, #2 + 8003c92: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003c96: 687a ldr r2, [r7, #4] + 8003c98: 4413 add r3, r2 + 8003c9a: 3304 adds r3, #4 + 8003c9c: 60fb str r3, [r7, #12] + 8003c9e: 68fb ldr r3, [r7, #12] + 8003ca0: 2200 movs r2, #0 + 8003ca2: 705a strb r2, [r3, #1] + 8003ca4: 78fb ldrb r3, [r7, #3] + 8003ca6: f003 030f and.w r3, r3, #15 + 8003caa: b2da uxtb r2, r3 + 8003cac: 68fb ldr r3, [r7, #12] + 8003cae: 701a strb r2, [r3, #0] + 8003cb0: 883b ldrh r3, [r7, #0] + 8003cb2: f3c3 020a ubfx r2, r3, #0, #11 + 8003cb6: 68fb ldr r3, [r7, #12] + 8003cb8: 609a str r2, [r3, #8] + 8003cba: 68fb ldr r3, [r7, #12] + 8003cbc: 78ba ldrb r2, [r7, #2] + 8003cbe: 711a strb r2, [r3, #4] + 8003cc0: 68fb ldr r3, [r7, #12] + 8003cc2: 785b ldrb r3, [r3, #1] + 8003cc4: 2b00 cmp r3, #0 + 8003cc6: d004 beq.n 8003cd2 + 8003cc8: 68fb ldr r3, [r7, #12] + 8003cca: 781b ldrb r3, [r3, #0] + 8003ccc: 461a mov r2, r3 + 8003cce: 68fb ldr r3, [r7, #12] + 8003cd0: 835a strh r2, [r3, #26] + 8003cd2: 78bb ldrb r3, [r7, #2] + 8003cd4: 2b02 cmp r3, #2 + 8003cd6: d102 bne.n 8003cde + 8003cd8: 68fb ldr r3, [r7, #12] + 8003cda: 2200 movs r2, #0 + 8003cdc: 715a strb r2, [r3, #5] + 8003cde: 687b ldr r3, [r7, #4] + 8003ce0: f893 3494 ldrb.w r3, [r3, #1172] @ 0x494 + 8003ce4: 2b01 cmp r3, #1 + 8003ce6: d101 bne.n 8003cec + 8003ce8: 2302 movs r3, #2 + 8003cea: e00e b.n 8003d0a + 8003cec: 687b ldr r3, [r7, #4] + 8003cee: 2201 movs r2, #1 + 8003cf0: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003cf4: 687b ldr r3, [r7, #4] + 8003cf6: 681b ldr r3, [r3, #0] + 8003cf8: 68f9 ldr r1, [r7, #12] + 8003cfa: 4618 mov r0, r3 + 8003cfc: f004 f920 bl 8007f40 + 8003d00: 687b ldr r3, [r7, #4] + 8003d02: 2200 movs r2, #0 + 8003d04: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003d08: 7afb ldrb r3, [r7, #11] + 8003d0a: 4618 mov r0, r3 + 8003d0c: 3710 adds r7, #16 + 8003d0e: 46bd mov sp, r7 + 8003d10: bd80 pop {r7, pc} + +08003d12 : + 8003d12: b580 push {r7, lr} + 8003d14: b084 sub sp, #16 + 8003d16: af00 add r7, sp, #0 + 8003d18: 6078 str r0, [r7, #4] + 8003d1a: 460b mov r3, r1 + 8003d1c: 70fb strb r3, [r7, #3] + 8003d1e: f997 3003 ldrsb.w r3, [r7, #3] + 8003d22: 2b00 cmp r3, #0 + 8003d24: da0f bge.n 8003d46 + 8003d26: 78fb ldrb r3, [r7, #3] + 8003d28: f003 020f and.w r2, r3, #15 + 8003d2c: 4613 mov r3, r2 + 8003d2e: 00db lsls r3, r3, #3 + 8003d30: 4413 add r3, r2 + 8003d32: 009b lsls r3, r3, #2 + 8003d34: 3310 adds r3, #16 + 8003d36: 687a ldr r2, [r7, #4] + 8003d38: 4413 add r3, r2 + 8003d3a: 3304 adds r3, #4 + 8003d3c: 60fb str r3, [r7, #12] + 8003d3e: 68fb ldr r3, [r7, #12] + 8003d40: 2201 movs r2, #1 + 8003d42: 705a strb r2, [r3, #1] + 8003d44: e00f b.n 8003d66 + 8003d46: 78fb ldrb r3, [r7, #3] + 8003d48: f003 020f and.w r2, r3, #15 + 8003d4c: 4613 mov r3, r2 + 8003d4e: 00db lsls r3, r3, #3 + 8003d50: 4413 add r3, r2 + 8003d52: 009b lsls r3, r3, #2 + 8003d54: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003d58: 687a ldr r2, [r7, #4] + 8003d5a: 4413 add r3, r2 + 8003d5c: 3304 adds r3, #4 + 8003d5e: 60fb str r3, [r7, #12] + 8003d60: 68fb ldr r3, [r7, #12] + 8003d62: 2200 movs r2, #0 + 8003d64: 705a strb r2, [r3, #1] + 8003d66: 78fb ldrb r3, [r7, #3] + 8003d68: f003 030f and.w r3, r3, #15 + 8003d6c: b2da uxtb r2, r3 + 8003d6e: 68fb ldr r3, [r7, #12] + 8003d70: 701a strb r2, [r3, #0] + 8003d72: 687b ldr r3, [r7, #4] + 8003d74: f893 3494 ldrb.w r3, [r3, #1172] @ 0x494 + 8003d78: 2b01 cmp r3, #1 + 8003d7a: d101 bne.n 8003d80 + 8003d7c: 2302 movs r3, #2 + 8003d7e: e00e b.n 8003d9e + 8003d80: 687b ldr r3, [r7, #4] + 8003d82: 2201 movs r2, #1 + 8003d84: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003d88: 687b ldr r3, [r7, #4] + 8003d8a: 681b ldr r3, [r3, #0] + 8003d8c: 68f9 ldr r1, [r7, #12] + 8003d8e: 4618 mov r0, r3 + 8003d90: f004 f95e bl 8008050 + 8003d94: 687b ldr r3, [r7, #4] + 8003d96: 2200 movs r2, #0 + 8003d98: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003d9c: 2300 movs r3, #0 + 8003d9e: 4618 mov r0, r3 + 8003da0: 3710 adds r7, #16 + 8003da2: 46bd mov sp, r7 + 8003da4: bd80 pop {r7, pc} + +08003da6 : + 8003da6: b580 push {r7, lr} + 8003da8: b086 sub sp, #24 + 8003daa: af00 add r7, sp, #0 + 8003dac: 60f8 str r0, [r7, #12] + 8003dae: 607a str r2, [r7, #4] + 8003db0: 603b str r3, [r7, #0] + 8003db2: 460b mov r3, r1 + 8003db4: 72fb strb r3, [r7, #11] + 8003db6: 7afb ldrb r3, [r7, #11] + 8003db8: f003 020f and.w r2, r3, #15 + 8003dbc: 4613 mov r3, r2 + 8003dbe: 00db lsls r3, r3, #3 + 8003dc0: 4413 add r3, r2 + 8003dc2: 009b lsls r3, r3, #2 + 8003dc4: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003dc8: 68fa ldr r2, [r7, #12] + 8003dca: 4413 add r3, r2 + 8003dcc: 3304 adds r3, #4 + 8003dce: 617b str r3, [r7, #20] + 8003dd0: 697b ldr r3, [r7, #20] + 8003dd2: 687a ldr r2, [r7, #4] + 8003dd4: 60da str r2, [r3, #12] + 8003dd6: 697b ldr r3, [r7, #20] + 8003dd8: 683a ldr r2, [r7, #0] + 8003dda: 611a str r2, [r3, #16] + 8003ddc: 697b ldr r3, [r7, #20] + 8003dde: 2200 movs r2, #0 + 8003de0: 615a str r2, [r3, #20] + 8003de2: 697b ldr r3, [r7, #20] + 8003de4: 2200 movs r2, #0 + 8003de6: 705a strb r2, [r3, #1] + 8003de8: 7afb ldrb r3, [r7, #11] + 8003dea: f003 030f and.w r3, r3, #15 + 8003dee: b2da uxtb r2, r3 + 8003df0: 697b ldr r3, [r7, #20] + 8003df2: 701a strb r2, [r3, #0] + 8003df4: 68fb ldr r3, [r7, #12] + 8003df6: 799b ldrb r3, [r3, #6] + 8003df8: 2b01 cmp r3, #1 + 8003dfa: d102 bne.n 8003e02 + 8003dfc: 687a ldr r2, [r7, #4] + 8003dfe: 697b ldr r3, [r7, #20] + 8003e00: 61da str r2, [r3, #28] + 8003e02: 68fb ldr r3, [r7, #12] + 8003e04: 6818 ldr r0, [r3, #0] + 8003e06: 68fb ldr r3, [r7, #12] + 8003e08: 799b ldrb r3, [r3, #6] + 8003e0a: 461a mov r2, r3 + 8003e0c: 6979 ldr r1, [r7, #20] + 8003e0e: f004 f9fb bl 8008208 + 8003e12: 2300 movs r3, #0 + 8003e14: 4618 mov r0, r3 + 8003e16: 3718 adds r7, #24 + 8003e18: 46bd mov sp, r7 + 8003e1a: bd80 pop {r7, pc} + +08003e1c : + 8003e1c: b580 push {r7, lr} + 8003e1e: b086 sub sp, #24 + 8003e20: af00 add r7, sp, #0 + 8003e22: 60f8 str r0, [r7, #12] + 8003e24: 607a str r2, [r7, #4] + 8003e26: 603b str r3, [r7, #0] + 8003e28: 460b mov r3, r1 + 8003e2a: 72fb strb r3, [r7, #11] + 8003e2c: 7afb ldrb r3, [r7, #11] + 8003e2e: f003 020f and.w r2, r3, #15 + 8003e32: 4613 mov r3, r2 + 8003e34: 00db lsls r3, r3, #3 + 8003e36: 4413 add r3, r2 + 8003e38: 009b lsls r3, r3, #2 + 8003e3a: 3310 adds r3, #16 + 8003e3c: 68fa ldr r2, [r7, #12] + 8003e3e: 4413 add r3, r2 + 8003e40: 3304 adds r3, #4 + 8003e42: 617b str r3, [r7, #20] + 8003e44: 697b ldr r3, [r7, #20] + 8003e46: 687a ldr r2, [r7, #4] + 8003e48: 60da str r2, [r3, #12] + 8003e4a: 697b ldr r3, [r7, #20] + 8003e4c: 683a ldr r2, [r7, #0] + 8003e4e: 611a str r2, [r3, #16] + 8003e50: 697b ldr r3, [r7, #20] + 8003e52: 2200 movs r2, #0 + 8003e54: 615a str r2, [r3, #20] + 8003e56: 697b ldr r3, [r7, #20] + 8003e58: 2201 movs r2, #1 + 8003e5a: 705a strb r2, [r3, #1] + 8003e5c: 7afb ldrb r3, [r7, #11] + 8003e5e: f003 030f and.w r3, r3, #15 + 8003e62: b2da uxtb r2, r3 + 8003e64: 697b ldr r3, [r7, #20] + 8003e66: 701a strb r2, [r3, #0] + 8003e68: 68fb ldr r3, [r7, #12] + 8003e6a: 799b ldrb r3, [r3, #6] + 8003e6c: 2b01 cmp r3, #1 + 8003e6e: d102 bne.n 8003e76 + 8003e70: 687a ldr r2, [r7, #4] + 8003e72: 697b ldr r3, [r7, #20] + 8003e74: 61da str r2, [r3, #28] + 8003e76: 68fb ldr r3, [r7, #12] + 8003e78: 6818 ldr r0, [r3, #0] + 8003e7a: 68fb ldr r3, [r7, #12] + 8003e7c: 799b ldrb r3, [r3, #6] + 8003e7e: 461a mov r2, r3 + 8003e80: 6979 ldr r1, [r7, #20] + 8003e82: f004 f9c1 bl 8008208 + 8003e86: 2300 movs r3, #0 + 8003e88: 4618 mov r0, r3 + 8003e8a: 3718 adds r7, #24 + 8003e8c: 46bd mov sp, r7 + 8003e8e: bd80 pop {r7, pc} + +08003e90 : + 8003e90: b580 push {r7, lr} + 8003e92: b084 sub sp, #16 + 8003e94: af00 add r7, sp, #0 + 8003e96: 6078 str r0, [r7, #4] + 8003e98: 460b mov r3, r1 + 8003e9a: 70fb strb r3, [r7, #3] + 8003e9c: 78fb ldrb r3, [r7, #3] + 8003e9e: f003 030f and.w r3, r3, #15 + 8003ea2: 687a ldr r2, [r7, #4] + 8003ea4: 7912 ldrb r2, [r2, #4] + 8003ea6: 4293 cmp r3, r2 + 8003ea8: d901 bls.n 8003eae + 8003eaa: 2301 movs r3, #1 + 8003eac: e04f b.n 8003f4e + 8003eae: f997 3003 ldrsb.w r3, [r7, #3] + 8003eb2: 2b00 cmp r3, #0 + 8003eb4: da0f bge.n 8003ed6 + 8003eb6: 78fb ldrb r3, [r7, #3] + 8003eb8: f003 020f and.w r2, r3, #15 + 8003ebc: 4613 mov r3, r2 + 8003ebe: 00db lsls r3, r3, #3 + 8003ec0: 4413 add r3, r2 + 8003ec2: 009b lsls r3, r3, #2 + 8003ec4: 3310 adds r3, #16 + 8003ec6: 687a ldr r2, [r7, #4] + 8003ec8: 4413 add r3, r2 + 8003eca: 3304 adds r3, #4 + 8003ecc: 60fb str r3, [r7, #12] + 8003ece: 68fb ldr r3, [r7, #12] + 8003ed0: 2201 movs r2, #1 + 8003ed2: 705a strb r2, [r3, #1] + 8003ed4: e00d b.n 8003ef2 + 8003ed6: 78fa ldrb r2, [r7, #3] + 8003ed8: 4613 mov r3, r2 + 8003eda: 00db lsls r3, r3, #3 + 8003edc: 4413 add r3, r2 + 8003ede: 009b lsls r3, r3, #2 + 8003ee0: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003ee4: 687a ldr r2, [r7, #4] + 8003ee6: 4413 add r3, r2 + 8003ee8: 3304 adds r3, #4 + 8003eea: 60fb str r3, [r7, #12] + 8003eec: 68fb ldr r3, [r7, #12] + 8003eee: 2200 movs r2, #0 + 8003ef0: 705a strb r2, [r3, #1] + 8003ef2: 68fb ldr r3, [r7, #12] + 8003ef4: 2201 movs r2, #1 + 8003ef6: 709a strb r2, [r3, #2] + 8003ef8: 78fb ldrb r3, [r7, #3] + 8003efa: f003 030f and.w r3, r3, #15 + 8003efe: b2da uxtb r2, r3 + 8003f00: 68fb ldr r3, [r7, #12] + 8003f02: 701a strb r2, [r3, #0] + 8003f04: 687b ldr r3, [r7, #4] + 8003f06: f893 3494 ldrb.w r3, [r3, #1172] @ 0x494 + 8003f0a: 2b01 cmp r3, #1 + 8003f0c: d101 bne.n 8003f12 + 8003f0e: 2302 movs r3, #2 + 8003f10: e01d b.n 8003f4e + 8003f12: 687b ldr r3, [r7, #4] + 8003f14: 2201 movs r2, #1 + 8003f16: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003f1a: 687b ldr r3, [r7, #4] + 8003f1c: 681b ldr r3, [r3, #0] + 8003f1e: 68f9 ldr r1, [r7, #12] + 8003f20: 4618 mov r0, r3 + 8003f22: f004 fd4f bl 80089c4 + 8003f26: 78fb ldrb r3, [r7, #3] + 8003f28: f003 030f and.w r3, r3, #15 + 8003f2c: 2b00 cmp r3, #0 + 8003f2e: d109 bne.n 8003f44 + 8003f30: 687b ldr r3, [r7, #4] + 8003f32: 6818 ldr r0, [r3, #0] + 8003f34: 687b ldr r3, [r7, #4] + 8003f36: 7999 ldrb r1, [r3, #6] + 8003f38: 687b ldr r3, [r7, #4] + 8003f3a: f203 439c addw r3, r3, #1180 @ 0x49c + 8003f3e: 461a mov r2, r3 + 8003f40: f004 ff40 bl 8008dc4 + 8003f44: 687b ldr r3, [r7, #4] + 8003f46: 2200 movs r2, #0 + 8003f48: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003f4c: 2300 movs r3, #0 + 8003f4e: 4618 mov r0, r3 + 8003f50: 3710 adds r7, #16 + 8003f52: 46bd mov sp, r7 + 8003f54: bd80 pop {r7, pc} + +08003f56 : + 8003f56: b580 push {r7, lr} + 8003f58: b084 sub sp, #16 + 8003f5a: af00 add r7, sp, #0 + 8003f5c: 6078 str r0, [r7, #4] + 8003f5e: 460b mov r3, r1 + 8003f60: 70fb strb r3, [r7, #3] + 8003f62: 78fb ldrb r3, [r7, #3] + 8003f64: f003 030f and.w r3, r3, #15 + 8003f68: 687a ldr r2, [r7, #4] + 8003f6a: 7912 ldrb r2, [r2, #4] + 8003f6c: 4293 cmp r3, r2 + 8003f6e: d901 bls.n 8003f74 + 8003f70: 2301 movs r3, #1 + 8003f72: e042 b.n 8003ffa + 8003f74: f997 3003 ldrsb.w r3, [r7, #3] + 8003f78: 2b00 cmp r3, #0 + 8003f7a: da0f bge.n 8003f9c + 8003f7c: 78fb ldrb r3, [r7, #3] + 8003f7e: f003 020f and.w r2, r3, #15 + 8003f82: 4613 mov r3, r2 + 8003f84: 00db lsls r3, r3, #3 + 8003f86: 4413 add r3, r2 + 8003f88: 009b lsls r3, r3, #2 + 8003f8a: 3310 adds r3, #16 + 8003f8c: 687a ldr r2, [r7, #4] + 8003f8e: 4413 add r3, r2 + 8003f90: 3304 adds r3, #4 + 8003f92: 60fb str r3, [r7, #12] + 8003f94: 68fb ldr r3, [r7, #12] + 8003f96: 2201 movs r2, #1 + 8003f98: 705a strb r2, [r3, #1] + 8003f9a: e00f b.n 8003fbc + 8003f9c: 78fb ldrb r3, [r7, #3] + 8003f9e: f003 020f and.w r2, r3, #15 + 8003fa2: 4613 mov r3, r2 + 8003fa4: 00db lsls r3, r3, #3 + 8003fa6: 4413 add r3, r2 + 8003fa8: 009b lsls r3, r3, #2 + 8003faa: f503 7314 add.w r3, r3, #592 @ 0x250 + 8003fae: 687a ldr r2, [r7, #4] + 8003fb0: 4413 add r3, r2 + 8003fb2: 3304 adds r3, #4 + 8003fb4: 60fb str r3, [r7, #12] + 8003fb6: 68fb ldr r3, [r7, #12] + 8003fb8: 2200 movs r2, #0 + 8003fba: 705a strb r2, [r3, #1] + 8003fbc: 68fb ldr r3, [r7, #12] + 8003fbe: 2200 movs r2, #0 + 8003fc0: 709a strb r2, [r3, #2] + 8003fc2: 78fb ldrb r3, [r7, #3] + 8003fc4: f003 030f and.w r3, r3, #15 + 8003fc8: b2da uxtb r2, r3 + 8003fca: 68fb ldr r3, [r7, #12] + 8003fcc: 701a strb r2, [r3, #0] + 8003fce: 687b ldr r3, [r7, #4] + 8003fd0: f893 3494 ldrb.w r3, [r3, #1172] @ 0x494 + 8003fd4: 2b01 cmp r3, #1 + 8003fd6: d101 bne.n 8003fdc + 8003fd8: 2302 movs r3, #2 + 8003fda: e00e b.n 8003ffa + 8003fdc: 687b ldr r3, [r7, #4] + 8003fde: 2201 movs r2, #1 + 8003fe0: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003fe4: 687b ldr r3, [r7, #4] + 8003fe6: 681b ldr r3, [r3, #0] + 8003fe8: 68f9 ldr r1, [r7, #12] + 8003fea: 4618 mov r0, r3 + 8003fec: f004 fd58 bl 8008aa0 + 8003ff0: 687b ldr r3, [r7, #4] + 8003ff2: 2200 movs r2, #0 + 8003ff4: f883 2494 strb.w r2, [r3, #1172] @ 0x494 + 8003ff8: 2300 movs r3, #0 + 8003ffa: 4618 mov r0, r3 + 8003ffc: 3710 adds r7, #16 + 8003ffe: 46bd mov sp, r7 + 8004000: bd80 pop {r7, pc} + +08004002 : + 8004002: b580 push {r7, lr} + 8004004: b084 sub sp, #16 + 8004006: af00 add r7, sp, #0 + 8004008: 6078 str r0, [r7, #4] + 800400a: 460b mov r3, r1 + 800400c: 70fb strb r3, [r7, #3] + 800400e: f997 3003 ldrsb.w r3, [r7, #3] + 8004012: 2b00 cmp r3, #0 + 8004014: da0c bge.n 8004030 + 8004016: 78fb ldrb r3, [r7, #3] + 8004018: f003 020f and.w r2, r3, #15 + 800401c: 4613 mov r3, r2 + 800401e: 00db lsls r3, r3, #3 + 8004020: 4413 add r3, r2 + 8004022: 009b lsls r3, r3, #2 + 8004024: 3310 adds r3, #16 + 8004026: 687a ldr r2, [r7, #4] + 8004028: 4413 add r3, r2 + 800402a: 3304 adds r3, #4 + 800402c: 60fb str r3, [r7, #12] + 800402e: e00c b.n 800404a + 8004030: 78fb ldrb r3, [r7, #3] + 8004032: f003 020f and.w r2, r3, #15 + 8004036: 4613 mov r3, r2 + 8004038: 00db lsls r3, r3, #3 + 800403a: 4413 add r3, r2 + 800403c: 009b lsls r3, r3, #2 + 800403e: f503 7314 add.w r3, r3, #592 @ 0x250 + 8004042: 687a ldr r2, [r7, #4] + 8004044: 4413 add r3, r2 + 8004046: 3304 adds r3, #4 + 8004048: 60fb str r3, [r7, #12] + 800404a: 687b ldr r3, [r7, #4] + 800404c: 681b ldr r3, [r3, #0] + 800404e: 68f9 ldr r1, [r7, #12] + 8004050: 4618 mov r0, r3 + 8004052: f004 fb77 bl 8008744 + 8004056: 4603 mov r3, r0 + 8004058: 72fb strb r3, [r7, #11] + 800405a: 7afb ldrb r3, [r7, #11] + 800405c: 4618 mov r0, r3 + 800405e: 3710 adds r7, #16 + 8004060: 46bd mov sp, r7 + 8004062: bd80 pop {r7, pc} + +08004064 : + 8004064: b580 push {r7, lr} + 8004066: b08a sub sp, #40 @ 0x28 + 8004068: af02 add r7, sp, #8 + 800406a: 6078 str r0, [r7, #4] + 800406c: 6039 str r1, [r7, #0] + 800406e: 687b ldr r3, [r7, #4] + 8004070: 681b ldr r3, [r3, #0] + 8004072: 617b str r3, [r7, #20] + 8004074: 697b ldr r3, [r7, #20] + 8004076: 613b str r3, [r7, #16] + 8004078: 683a ldr r2, [r7, #0] + 800407a: 4613 mov r3, r2 + 800407c: 00db lsls r3, r3, #3 + 800407e: 4413 add r3, r2 + 8004080: 009b lsls r3, r3, #2 + 8004082: 3310 adds r3, #16 + 8004084: 687a ldr r2, [r7, #4] + 8004086: 4413 add r3, r2 + 8004088: 3304 adds r3, #4 + 800408a: 60fb str r3, [r7, #12] + 800408c: 68fb ldr r3, [r7, #12] + 800408e: 695a ldr r2, [r3, #20] + 8004090: 68fb ldr r3, [r7, #12] + 8004092: 691b ldr r3, [r3, #16] + 8004094: 429a cmp r2, r3 + 8004096: d901 bls.n 800409c + 8004098: 2301 movs r3, #1 + 800409a: e06b b.n 8004174 + 800409c: 68fb ldr r3, [r7, #12] + 800409e: 691a ldr r2, [r3, #16] + 80040a0: 68fb ldr r3, [r7, #12] + 80040a2: 695b ldr r3, [r3, #20] + 80040a4: 1ad3 subs r3, r2, r3 + 80040a6: 61fb str r3, [r7, #28] + 80040a8: 68fb ldr r3, [r7, #12] + 80040aa: 689b ldr r3, [r3, #8] + 80040ac: 69fa ldr r2, [r7, #28] + 80040ae: 429a cmp r2, r3 + 80040b0: d902 bls.n 80040b8 + 80040b2: 68fb ldr r3, [r7, #12] + 80040b4: 689b ldr r3, [r3, #8] + 80040b6: 61fb str r3, [r7, #28] + 80040b8: 69fb ldr r3, [r7, #28] + 80040ba: 3303 adds r3, #3 + 80040bc: 089b lsrs r3, r3, #2 + 80040be: 61bb str r3, [r7, #24] + 80040c0: e02a b.n 8004118 + 80040c2: 68fb ldr r3, [r7, #12] + 80040c4: 691a ldr r2, [r3, #16] + 80040c6: 68fb ldr r3, [r7, #12] + 80040c8: 695b ldr r3, [r3, #20] + 80040ca: 1ad3 subs r3, r2, r3 + 80040cc: 61fb str r3, [r7, #28] + 80040ce: 68fb ldr r3, [r7, #12] + 80040d0: 689b ldr r3, [r3, #8] + 80040d2: 69fa ldr r2, [r7, #28] + 80040d4: 429a cmp r2, r3 + 80040d6: d902 bls.n 80040de + 80040d8: 68fb ldr r3, [r7, #12] + 80040da: 689b ldr r3, [r3, #8] + 80040dc: 61fb str r3, [r7, #28] + 80040de: 69fb ldr r3, [r7, #28] + 80040e0: 3303 adds r3, #3 + 80040e2: 089b lsrs r3, r3, #2 + 80040e4: 61bb str r3, [r7, #24] + 80040e6: 68fb ldr r3, [r7, #12] + 80040e8: 68d9 ldr r1, [r3, #12] + 80040ea: 683b ldr r3, [r7, #0] + 80040ec: b2da uxtb r2, r3 + 80040ee: 69fb ldr r3, [r7, #28] + 80040f0: b298 uxth r0, r3 + 80040f2: 687b ldr r3, [r7, #4] + 80040f4: 799b ldrb r3, [r3, #6] + 80040f6: 9300 str r3, [sp, #0] + 80040f8: 4603 mov r3, r0 + 80040fa: 6978 ldr r0, [r7, #20] + 80040fc: f004 fbcc bl 8008898 + 8004100: 68fb ldr r3, [r7, #12] + 8004102: 68da ldr r2, [r3, #12] + 8004104: 69fb ldr r3, [r7, #28] + 8004106: 441a add r2, r3 + 8004108: 68fb ldr r3, [r7, #12] + 800410a: 60da str r2, [r3, #12] + 800410c: 68fb ldr r3, [r7, #12] + 800410e: 695a ldr r2, [r3, #20] + 8004110: 69fb ldr r3, [r7, #28] + 8004112: 441a add r2, r3 + 8004114: 68fb ldr r3, [r7, #12] + 8004116: 615a str r2, [r3, #20] + 8004118: 683b ldr r3, [r7, #0] + 800411a: 015a lsls r2, r3, #5 + 800411c: 693b ldr r3, [r7, #16] + 800411e: 4413 add r3, r2 + 8004120: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8004124: 699b ldr r3, [r3, #24] + 8004126: b29b uxth r3, r3 + 8004128: 69ba ldr r2, [r7, #24] + 800412a: 429a cmp r2, r3 + 800412c: d809 bhi.n 8004142 + 800412e: 68fb ldr r3, [r7, #12] + 8004130: 695a ldr r2, [r3, #20] + 8004132: 68fb ldr r3, [r7, #12] + 8004134: 691b ldr r3, [r3, #16] + 8004136: 429a cmp r2, r3 + 8004138: d203 bcs.n 8004142 + 800413a: 68fb ldr r3, [r7, #12] + 800413c: 691b ldr r3, [r3, #16] + 800413e: 2b00 cmp r3, #0 + 8004140: d1bf bne.n 80040c2 + 8004142: 68fb ldr r3, [r7, #12] + 8004144: 691a ldr r2, [r3, #16] + 8004146: 68fb ldr r3, [r7, #12] + 8004148: 695b ldr r3, [r3, #20] + 800414a: 429a cmp r2, r3 + 800414c: d811 bhi.n 8004172 + 800414e: 683b ldr r3, [r7, #0] + 8004150: f003 030f and.w r3, r3, #15 + 8004154: 2201 movs r2, #1 + 8004156: fa02 f303 lsl.w r3, r2, r3 + 800415a: 60bb str r3, [r7, #8] + 800415c: 693b ldr r3, [r7, #16] + 800415e: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8004162: 6b5a ldr r2, [r3, #52] @ 0x34 + 8004164: 68bb ldr r3, [r7, #8] + 8004166: 43db mvns r3, r3 + 8004168: 6939 ldr r1, [r7, #16] + 800416a: f501 6100 add.w r1, r1, #2048 @ 0x800 + 800416e: 4013 ands r3, r2 + 8004170: 634b str r3, [r1, #52] @ 0x34 + 8004172: 2300 movs r3, #0 + 8004174: 4618 mov r0, r3 + 8004176: 3720 adds r7, #32 + 8004178: 46bd mov sp, r7 + 800417a: bd80 pop {r7, pc} + +0800417c : + 800417c: b580 push {r7, lr} + 800417e: b088 sub sp, #32 + 8004180: af00 add r7, sp, #0 + 8004182: 6078 str r0, [r7, #4] + 8004184: 6039 str r1, [r7, #0] + 8004186: 687b ldr r3, [r7, #4] + 8004188: 681b ldr r3, [r3, #0] + 800418a: 61fb str r3, [r7, #28] + 800418c: 69fb ldr r3, [r7, #28] + 800418e: 61bb str r3, [r7, #24] + 8004190: 69fb ldr r3, [r7, #28] + 8004192: 333c adds r3, #60 @ 0x3c + 8004194: 3304 adds r3, #4 + 8004196: 681b ldr r3, [r3, #0] + 8004198: 617b str r3, [r7, #20] + 800419a: 683b ldr r3, [r7, #0] + 800419c: 015a lsls r2, r3, #5 + 800419e: 69bb ldr r3, [r7, #24] + 80041a0: 4413 add r3, r2 + 80041a2: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80041a6: 689b ldr r3, [r3, #8] + 80041a8: 613b str r3, [r7, #16] + 80041aa: 687b ldr r3, [r7, #4] + 80041ac: 799b ldrb r3, [r3, #6] + 80041ae: 2b01 cmp r3, #1 + 80041b0: d17b bne.n 80042aa + 80041b2: 693b ldr r3, [r7, #16] + 80041b4: f003 0308 and.w r3, r3, #8 + 80041b8: 2b00 cmp r3, #0 + 80041ba: d015 beq.n 80041e8 + 80041bc: 697b ldr r3, [r7, #20] + 80041be: 4a61 ldr r2, [pc, #388] @ (8004344 ) + 80041c0: 4293 cmp r3, r2 + 80041c2: f240 80b9 bls.w 8004338 + 80041c6: 693b ldr r3, [r7, #16] + 80041c8: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 80041cc: 2b00 cmp r3, #0 + 80041ce: f000 80b3 beq.w 8004338 + 80041d2: 683b ldr r3, [r7, #0] + 80041d4: 015a lsls r2, r3, #5 + 80041d6: 69bb ldr r3, [r7, #24] + 80041d8: 4413 add r3, r2 + 80041da: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80041de: 461a mov r2, r3 + 80041e0: f44f 4300 mov.w r3, #32768 @ 0x8000 + 80041e4: 6093 str r3, [r2, #8] + 80041e6: e0a7 b.n 8004338 + 80041e8: 693b ldr r3, [r7, #16] + 80041ea: f003 0320 and.w r3, r3, #32 + 80041ee: 2b00 cmp r3, #0 + 80041f0: d009 beq.n 8004206 + 80041f2: 683b ldr r3, [r7, #0] + 80041f4: 015a lsls r2, r3, #5 + 80041f6: 69bb ldr r3, [r7, #24] + 80041f8: 4413 add r3, r2 + 80041fa: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80041fe: 461a mov r2, r3 + 8004200: 2320 movs r3, #32 + 8004202: 6093 str r3, [r2, #8] + 8004204: e098 b.n 8004338 + 8004206: 693b ldr r3, [r7, #16] + 8004208: f003 0328 and.w r3, r3, #40 @ 0x28 + 800420c: 2b00 cmp r3, #0 + 800420e: f040 8093 bne.w 8004338 + 8004212: 697b ldr r3, [r7, #20] + 8004214: 4a4b ldr r2, [pc, #300] @ (8004344 ) + 8004216: 4293 cmp r3, r2 + 8004218: d90f bls.n 800423a + 800421a: 693b ldr r3, [r7, #16] + 800421c: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 8004220: 2b00 cmp r3, #0 + 8004222: d00a beq.n 800423a + 8004224: 683b ldr r3, [r7, #0] + 8004226: 015a lsls r2, r3, #5 + 8004228: 69bb ldr r3, [r7, #24] + 800422a: 4413 add r3, r2 + 800422c: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8004230: 461a mov r2, r3 + 8004232: f44f 4300 mov.w r3, #32768 @ 0x8000 + 8004236: 6093 str r3, [r2, #8] + 8004238: e07e b.n 8004338 + 800423a: 683a ldr r2, [r7, #0] + 800423c: 4613 mov r3, r2 + 800423e: 00db lsls r3, r3, #3 + 8004240: 4413 add r3, r2 + 8004242: 009b lsls r3, r3, #2 + 8004244: f503 7314 add.w r3, r3, #592 @ 0x250 + 8004248: 687a ldr r2, [r7, #4] + 800424a: 4413 add r3, r2 + 800424c: 3304 adds r3, #4 + 800424e: 60fb str r3, [r7, #12] + 8004250: 68fb ldr r3, [r7, #12] + 8004252: 6a1a ldr r2, [r3, #32] + 8004254: 683b ldr r3, [r7, #0] + 8004256: 0159 lsls r1, r3, #5 + 8004258: 69bb ldr r3, [r7, #24] + 800425a: 440b add r3, r1 + 800425c: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8004260: 691b ldr r3, [r3, #16] + 8004262: f3c3 0312 ubfx r3, r3, #0, #19 + 8004266: 1ad2 subs r2, r2, r3 + 8004268: 68fb ldr r3, [r7, #12] + 800426a: 615a str r2, [r3, #20] + 800426c: 683b ldr r3, [r7, #0] + 800426e: 2b00 cmp r3, #0 + 8004270: d114 bne.n 800429c + 8004272: 68fb ldr r3, [r7, #12] + 8004274: 691b ldr r3, [r3, #16] + 8004276: 2b00 cmp r3, #0 + 8004278: d109 bne.n 800428e + 800427a: 687b ldr r3, [r7, #4] + 800427c: 6818 ldr r0, [r3, #0] + 800427e: 687b ldr r3, [r7, #4] + 8004280: f203 439c addw r3, r3, #1180 @ 0x49c + 8004284: 461a mov r2, r3 + 8004286: 2101 movs r1, #1 + 8004288: f004 fd9c bl 8008dc4 + 800428c: e006 b.n 800429c + 800428e: 68fb ldr r3, [r7, #12] + 8004290: 68da ldr r2, [r3, #12] + 8004292: 68fb ldr r3, [r7, #12] + 8004294: 695b ldr r3, [r3, #20] + 8004296: 441a add r2, r3 + 8004298: 68fb ldr r3, [r7, #12] + 800429a: 60da str r2, [r3, #12] + 800429c: 683b ldr r3, [r7, #0] + 800429e: b2db uxtb r3, r3 + 80042a0: 4619 mov r1, r3 + 80042a2: 6878 ldr r0, [r7, #4] + 80042a4: f006 fd6a bl 800ad7c + 80042a8: e046 b.n 8004338 + 80042aa: 697b ldr r3, [r7, #20] + 80042ac: 4a26 ldr r2, [pc, #152] @ (8004348 ) + 80042ae: 4293 cmp r3, r2 + 80042b0: d124 bne.n 80042fc + 80042b2: 693b ldr r3, [r7, #16] + 80042b4: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 80042b8: 2b00 cmp r3, #0 + 80042ba: d00a beq.n 80042d2 + 80042bc: 683b ldr r3, [r7, #0] + 80042be: 015a lsls r2, r3, #5 + 80042c0: 69bb ldr r3, [r7, #24] + 80042c2: 4413 add r3, r2 + 80042c4: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80042c8: 461a mov r2, r3 + 80042ca: f44f 4300 mov.w r3, #32768 @ 0x8000 + 80042ce: 6093 str r3, [r2, #8] + 80042d0: e032 b.n 8004338 + 80042d2: 693b ldr r3, [r7, #16] + 80042d4: f003 0320 and.w r3, r3, #32 + 80042d8: 2b00 cmp r3, #0 + 80042da: d008 beq.n 80042ee + 80042dc: 683b ldr r3, [r7, #0] + 80042de: 015a lsls r2, r3, #5 + 80042e0: 69bb ldr r3, [r7, #24] + 80042e2: 4413 add r3, r2 + 80042e4: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80042e8: 461a mov r2, r3 + 80042ea: 2320 movs r3, #32 + 80042ec: 6093 str r3, [r2, #8] + 80042ee: 683b ldr r3, [r7, #0] + 80042f0: b2db uxtb r3, r3 + 80042f2: 4619 mov r1, r3 + 80042f4: 6878 ldr r0, [r7, #4] + 80042f6: f006 fd41 bl 800ad7c + 80042fa: e01d b.n 8004338 + 80042fc: 683b ldr r3, [r7, #0] + 80042fe: 2b00 cmp r3, #0 + 8004300: d114 bne.n 800432c + 8004302: 6879 ldr r1, [r7, #4] + 8004304: 683a ldr r2, [r7, #0] + 8004306: 4613 mov r3, r2 + 8004308: 00db lsls r3, r3, #3 + 800430a: 4413 add r3, r2 + 800430c: 009b lsls r3, r3, #2 + 800430e: 440b add r3, r1 + 8004310: f503 7319 add.w r3, r3, #612 @ 0x264 + 8004314: 681b ldr r3, [r3, #0] + 8004316: 2b00 cmp r3, #0 + 8004318: d108 bne.n 800432c + 800431a: 687b ldr r3, [r7, #4] + 800431c: 6818 ldr r0, [r3, #0] + 800431e: 687b ldr r3, [r7, #4] + 8004320: f203 439c addw r3, r3, #1180 @ 0x49c + 8004324: 461a mov r2, r3 + 8004326: 2100 movs r1, #0 + 8004328: f004 fd4c bl 8008dc4 + 800432c: 683b ldr r3, [r7, #0] + 800432e: b2db uxtb r3, r3 + 8004330: 4619 mov r1, r3 + 8004332: 6878 ldr r0, [r7, #4] + 8004334: f006 fd22 bl 800ad7c + 8004338: 2300 movs r3, #0 + 800433a: 4618 mov r0, r3 + 800433c: 3720 adds r7, #32 + 800433e: 46bd mov sp, r7 + 8004340: bd80 pop {r7, pc} + 8004342: bf00 nop + 8004344: 4f54300a .word 0x4f54300a + 8004348: 4f54310a .word 0x4f54310a + +0800434c : + 800434c: b580 push {r7, lr} + 800434e: b086 sub sp, #24 + 8004350: af00 add r7, sp, #0 + 8004352: 6078 str r0, [r7, #4] + 8004354: 6039 str r1, [r7, #0] + 8004356: 687b ldr r3, [r7, #4] + 8004358: 681b ldr r3, [r3, #0] + 800435a: 617b str r3, [r7, #20] + 800435c: 697b ldr r3, [r7, #20] + 800435e: 613b str r3, [r7, #16] + 8004360: 697b ldr r3, [r7, #20] + 8004362: 333c adds r3, #60 @ 0x3c + 8004364: 3304 adds r3, #4 + 8004366: 681b ldr r3, [r3, #0] + 8004368: 60fb str r3, [r7, #12] + 800436a: 683b ldr r3, [r7, #0] + 800436c: 015a lsls r2, r3, #5 + 800436e: 693b ldr r3, [r7, #16] + 8004370: 4413 add r3, r2 + 8004372: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8004376: 689b ldr r3, [r3, #8] + 8004378: 60bb str r3, [r7, #8] + 800437a: 68fb ldr r3, [r7, #12] + 800437c: 4a15 ldr r2, [pc, #84] @ (80043d4 ) + 800437e: 4293 cmp r3, r2 + 8004380: d90e bls.n 80043a0 + 8004382: 68bb ldr r3, [r7, #8] + 8004384: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 8004388: 2b00 cmp r3, #0 + 800438a: d009 beq.n 80043a0 + 800438c: 683b ldr r3, [r7, #0] + 800438e: 015a lsls r2, r3, #5 + 8004390: 693b ldr r3, [r7, #16] + 8004392: 4413 add r3, r2 + 8004394: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8004398: 461a mov r2, r3 + 800439a: f44f 4300 mov.w r3, #32768 @ 0x8000 + 800439e: 6093 str r3, [r2, #8] + 80043a0: 6878 ldr r0, [r7, #4] + 80043a2: f006 fcd9 bl 800ad58 + 80043a6: 68fb ldr r3, [r7, #12] + 80043a8: 4a0a ldr r2, [pc, #40] @ (80043d4 ) + 80043aa: 4293 cmp r3, r2 + 80043ac: d90c bls.n 80043c8 + 80043ae: 687b ldr r3, [r7, #4] + 80043b0: 799b ldrb r3, [r3, #6] + 80043b2: 2b01 cmp r3, #1 + 80043b4: d108 bne.n 80043c8 + 80043b6: 687b ldr r3, [r7, #4] + 80043b8: 6818 ldr r0, [r3, #0] + 80043ba: 687b ldr r3, [r7, #4] + 80043bc: f203 439c addw r3, r3, #1180 @ 0x49c + 80043c0: 461a mov r2, r3 + 80043c2: 2101 movs r1, #1 + 80043c4: f004 fcfe bl 8008dc4 + 80043c8: 2300 movs r3, #0 + 80043ca: 4618 mov r0, r3 + 80043cc: 3718 adds r7, #24 + 80043ce: 46bd mov sp, r7 + 80043d0: bd80 pop {r7, pc} + 80043d2: bf00 nop + 80043d4: 4f54300a .word 0x4f54300a + +080043d8 : + 80043d8: b480 push {r7} + 80043da: b085 sub sp, #20 + 80043dc: af00 add r7, sp, #0 + 80043de: 6078 str r0, [r7, #4] + 80043e0: 460b mov r3, r1 + 80043e2: 70fb strb r3, [r7, #3] + 80043e4: 4613 mov r3, r2 + 80043e6: 803b strh r3, [r7, #0] + 80043e8: 687b ldr r3, [r7, #4] + 80043ea: 681b ldr r3, [r3, #0] + 80043ec: 6a5b ldr r3, [r3, #36] @ 0x24 + 80043ee: 60bb str r3, [r7, #8] + 80043f0: 78fb ldrb r3, [r7, #3] + 80043f2: 2b00 cmp r3, #0 + 80043f4: d107 bne.n 8004406 + 80043f6: 883b ldrh r3, [r7, #0] + 80043f8: 0419 lsls r1, r3, #16 + 80043fa: 687b ldr r3, [r7, #4] + 80043fc: 681b ldr r3, [r3, #0] + 80043fe: 68ba ldr r2, [r7, #8] + 8004400: 430a orrs r2, r1 + 8004402: 629a str r2, [r3, #40] @ 0x28 + 8004404: e028 b.n 8004458 + 8004406: 687b ldr r3, [r7, #4] + 8004408: 681b ldr r3, [r3, #0] + 800440a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800440c: 0c1b lsrs r3, r3, #16 + 800440e: 68ba ldr r2, [r7, #8] + 8004410: 4413 add r3, r2 + 8004412: 60bb str r3, [r7, #8] + 8004414: 2300 movs r3, #0 + 8004416: 73fb strb r3, [r7, #15] + 8004418: e00d b.n 8004436 + 800441a: 687b ldr r3, [r7, #4] + 800441c: 681a ldr r2, [r3, #0] + 800441e: 7bfb ldrb r3, [r7, #15] + 8004420: 3340 adds r3, #64 @ 0x40 + 8004422: 009b lsls r3, r3, #2 + 8004424: 4413 add r3, r2 + 8004426: 685b ldr r3, [r3, #4] + 8004428: 0c1b lsrs r3, r3, #16 + 800442a: 68ba ldr r2, [r7, #8] + 800442c: 4413 add r3, r2 + 800442e: 60bb str r3, [r7, #8] + 8004430: 7bfb ldrb r3, [r7, #15] + 8004432: 3301 adds r3, #1 + 8004434: 73fb strb r3, [r7, #15] + 8004436: 7bfa ldrb r2, [r7, #15] + 8004438: 78fb ldrb r3, [r7, #3] + 800443a: 3b01 subs r3, #1 + 800443c: 429a cmp r2, r3 + 800443e: d3ec bcc.n 800441a + 8004440: 883b ldrh r3, [r7, #0] + 8004442: 0418 lsls r0, r3, #16 + 8004444: 687b ldr r3, [r7, #4] + 8004446: 6819 ldr r1, [r3, #0] + 8004448: 78fb ldrb r3, [r7, #3] + 800444a: 3b01 subs r3, #1 + 800444c: 68ba ldr r2, [r7, #8] + 800444e: 4302 orrs r2, r0 + 8004450: 3340 adds r3, #64 @ 0x40 + 8004452: 009b lsls r3, r3, #2 + 8004454: 440b add r3, r1 + 8004456: 605a str r2, [r3, #4] + 8004458: 2300 movs r3, #0 + 800445a: 4618 mov r0, r3 + 800445c: 3714 adds r7, #20 + 800445e: 46bd mov sp, r7 + 8004460: f85d 7b04 ldr.w r7, [sp], #4 + 8004464: 4770 bx lr + +08004466 : + 8004466: b480 push {r7} + 8004468: b083 sub sp, #12 + 800446a: af00 add r7, sp, #0 + 800446c: 6078 str r0, [r7, #4] + 800446e: 460b mov r3, r1 + 8004470: 807b strh r3, [r7, #2] + 8004472: 687b ldr r3, [r7, #4] + 8004474: 681b ldr r3, [r3, #0] + 8004476: 887a ldrh r2, [r7, #2] + 8004478: 625a str r2, [r3, #36] @ 0x24 + 800447a: 2300 movs r3, #0 + 800447c: 4618 mov r0, r3 + 800447e: 370c adds r7, #12 + 8004480: 46bd mov sp, r7 + 8004482: f85d 7b04 ldr.w r7, [sp], #4 + 8004486: 4770 bx lr + +08004488 : + 8004488: b480 push {r7} + 800448a: b085 sub sp, #20 + 800448c: af00 add r7, sp, #0 + 800448e: 6078 str r0, [r7, #4] + 8004490: 687b ldr r3, [r7, #4] + 8004492: 681b ldr r3, [r3, #0] + 8004494: 60fb str r3, [r7, #12] + 8004496: 687b ldr r3, [r7, #4] + 8004498: 2201 movs r2, #1 + 800449a: f8c3 24d8 str.w r2, [r3, #1240] @ 0x4d8 + 800449e: 687b ldr r3, [r7, #4] + 80044a0: 2200 movs r2, #0 + 80044a2: f883 24cc strb.w r2, [r3, #1228] @ 0x4cc + 80044a6: 68fb ldr r3, [r7, #12] + 80044a8: 699b ldr r3, [r3, #24] + 80044aa: f043 6200 orr.w r2, r3, #134217728 @ 0x8000000 + 80044ae: 68fb ldr r3, [r7, #12] + 80044b0: 619a str r2, [r3, #24] + 80044b2: 68fb ldr r3, [r7, #12] + 80044b4: 6d5b ldr r3, [r3, #84] @ 0x54 + 80044b6: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 80044ba: f043 0303 orr.w r3, r3, #3 + 80044be: 68fa ldr r2, [r7, #12] + 80044c0: 6553 str r3, [r2, #84] @ 0x54 + 80044c2: 2300 movs r3, #0 + 80044c4: 4618 mov r0, r3 + 80044c6: 3714 adds r7, #20 + 80044c8: 46bd mov sp, r7 + 80044ca: f85d 7b04 ldr.w r7, [sp], #4 + 80044ce: 4770 bx lr + +080044d0 : + 80044d0: b580 push {r7, lr} + 80044d2: b084 sub sp, #16 + 80044d4: af00 add r7, sp, #0 + 80044d6: 6078 str r0, [r7, #4] + 80044d8: 6039 str r1, [r7, #0] + 80044da: 687b ldr r3, [r7, #4] + 80044dc: 2b00 cmp r3, #0 + 80044de: d101 bne.n 80044e4 + 80044e0: 2301 movs r3, #1 + 80044e2: e0cc b.n 800467e + 80044e4: 4b68 ldr r3, [pc, #416] @ (8004688 ) + 80044e6: 681b ldr r3, [r3, #0] + 80044e8: f003 030f and.w r3, r3, #15 + 80044ec: 683a ldr r2, [r7, #0] + 80044ee: 429a cmp r2, r3 + 80044f0: d90c bls.n 800450c + 80044f2: 4b65 ldr r3, [pc, #404] @ (8004688 ) + 80044f4: 683a ldr r2, [r7, #0] + 80044f6: b2d2 uxtb r2, r2 + 80044f8: 701a strb r2, [r3, #0] + 80044fa: 4b63 ldr r3, [pc, #396] @ (8004688 ) + 80044fc: 681b ldr r3, [r3, #0] + 80044fe: f003 030f and.w r3, r3, #15 + 8004502: 683a ldr r2, [r7, #0] + 8004504: 429a cmp r2, r3 + 8004506: d001 beq.n 800450c + 8004508: 2301 movs r3, #1 + 800450a: e0b8 b.n 800467e + 800450c: 687b ldr r3, [r7, #4] + 800450e: 681b ldr r3, [r3, #0] + 8004510: f003 0302 and.w r3, r3, #2 + 8004514: 2b00 cmp r3, #0 + 8004516: d020 beq.n 800455a + 8004518: 687b ldr r3, [r7, #4] + 800451a: 681b ldr r3, [r3, #0] + 800451c: f003 0304 and.w r3, r3, #4 + 8004520: 2b00 cmp r3, #0 + 8004522: d005 beq.n 8004530 + 8004524: 4b59 ldr r3, [pc, #356] @ (800468c ) + 8004526: 689b ldr r3, [r3, #8] + 8004528: 4a58 ldr r2, [pc, #352] @ (800468c ) + 800452a: f443 53e0 orr.w r3, r3, #7168 @ 0x1c00 + 800452e: 6093 str r3, [r2, #8] + 8004530: 687b ldr r3, [r7, #4] + 8004532: 681b ldr r3, [r3, #0] + 8004534: f003 0308 and.w r3, r3, #8 + 8004538: 2b00 cmp r3, #0 + 800453a: d005 beq.n 8004548 + 800453c: 4b53 ldr r3, [pc, #332] @ (800468c ) + 800453e: 689b ldr r3, [r3, #8] + 8004540: 4a52 ldr r2, [pc, #328] @ (800468c ) + 8004542: f443 4360 orr.w r3, r3, #57344 @ 0xe000 + 8004546: 6093 str r3, [r2, #8] + 8004548: 4b50 ldr r3, [pc, #320] @ (800468c ) + 800454a: 689b ldr r3, [r3, #8] + 800454c: f023 02f0 bic.w r2, r3, #240 @ 0xf0 + 8004550: 687b ldr r3, [r7, #4] + 8004552: 689b ldr r3, [r3, #8] + 8004554: 494d ldr r1, [pc, #308] @ (800468c ) + 8004556: 4313 orrs r3, r2 + 8004558: 608b str r3, [r1, #8] + 800455a: 687b ldr r3, [r7, #4] + 800455c: 681b ldr r3, [r3, #0] + 800455e: f003 0301 and.w r3, r3, #1 + 8004562: 2b00 cmp r3, #0 + 8004564: d044 beq.n 80045f0 + 8004566: 687b ldr r3, [r7, #4] + 8004568: 685b ldr r3, [r3, #4] + 800456a: 2b01 cmp r3, #1 + 800456c: d107 bne.n 800457e + 800456e: 4b47 ldr r3, [pc, #284] @ (800468c ) + 8004570: 681b ldr r3, [r3, #0] + 8004572: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 8004576: 2b00 cmp r3, #0 + 8004578: d119 bne.n 80045ae + 800457a: 2301 movs r3, #1 + 800457c: e07f b.n 800467e + 800457e: 687b ldr r3, [r7, #4] + 8004580: 685b ldr r3, [r3, #4] + 8004582: 2b02 cmp r3, #2 + 8004584: d003 beq.n 800458e + 8004586: 687b ldr r3, [r7, #4] + 8004588: 685b ldr r3, [r3, #4] + 800458a: 2b03 cmp r3, #3 + 800458c: d107 bne.n 800459e + 800458e: 4b3f ldr r3, [pc, #252] @ (800468c ) + 8004590: 681b ldr r3, [r3, #0] + 8004592: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 8004596: 2b00 cmp r3, #0 + 8004598: d109 bne.n 80045ae + 800459a: 2301 movs r3, #1 + 800459c: e06f b.n 800467e + 800459e: 4b3b ldr r3, [pc, #236] @ (800468c ) + 80045a0: 681b ldr r3, [r3, #0] + 80045a2: f003 0302 and.w r3, r3, #2 + 80045a6: 2b00 cmp r3, #0 + 80045a8: d101 bne.n 80045ae + 80045aa: 2301 movs r3, #1 + 80045ac: e067 b.n 800467e + 80045ae: 4b37 ldr r3, [pc, #220] @ (800468c ) + 80045b0: 689b ldr r3, [r3, #8] + 80045b2: f023 0203 bic.w r2, r3, #3 + 80045b6: 687b ldr r3, [r7, #4] + 80045b8: 685b ldr r3, [r3, #4] + 80045ba: 4934 ldr r1, [pc, #208] @ (800468c ) + 80045bc: 4313 orrs r3, r2 + 80045be: 608b str r3, [r1, #8] + 80045c0: f7fd fcb2 bl 8001f28 + 80045c4: 60f8 str r0, [r7, #12] + 80045c6: e00a b.n 80045de + 80045c8: f7fd fcae bl 8001f28 + 80045cc: 4602 mov r2, r0 + 80045ce: 68fb ldr r3, [r7, #12] + 80045d0: 1ad3 subs r3, r2, r3 + 80045d2: f241 3288 movw r2, #5000 @ 0x1388 + 80045d6: 4293 cmp r3, r2 + 80045d8: d901 bls.n 80045de + 80045da: 2303 movs r3, #3 + 80045dc: e04f b.n 800467e + 80045de: 4b2b ldr r3, [pc, #172] @ (800468c ) + 80045e0: 689b ldr r3, [r3, #8] + 80045e2: f003 020c and.w r2, r3, #12 + 80045e6: 687b ldr r3, [r7, #4] + 80045e8: 685b ldr r3, [r3, #4] + 80045ea: 009b lsls r3, r3, #2 + 80045ec: 429a cmp r2, r3 + 80045ee: d1eb bne.n 80045c8 + 80045f0: 4b25 ldr r3, [pc, #148] @ (8004688 ) + 80045f2: 681b ldr r3, [r3, #0] + 80045f4: f003 030f and.w r3, r3, #15 + 80045f8: 683a ldr r2, [r7, #0] + 80045fa: 429a cmp r2, r3 + 80045fc: d20c bcs.n 8004618 + 80045fe: 4b22 ldr r3, [pc, #136] @ (8004688 ) + 8004600: 683a ldr r2, [r7, #0] + 8004602: b2d2 uxtb r2, r2 + 8004604: 701a strb r2, [r3, #0] + 8004606: 4b20 ldr r3, [pc, #128] @ (8004688 ) + 8004608: 681b ldr r3, [r3, #0] + 800460a: f003 030f and.w r3, r3, #15 + 800460e: 683a ldr r2, [r7, #0] + 8004610: 429a cmp r2, r3 + 8004612: d001 beq.n 8004618 + 8004614: 2301 movs r3, #1 + 8004616: e032 b.n 800467e + 8004618: 687b ldr r3, [r7, #4] + 800461a: 681b ldr r3, [r3, #0] + 800461c: f003 0304 and.w r3, r3, #4 + 8004620: 2b00 cmp r3, #0 + 8004622: d008 beq.n 8004636 + 8004624: 4b19 ldr r3, [pc, #100] @ (800468c ) + 8004626: 689b ldr r3, [r3, #8] + 8004628: f423 52e0 bic.w r2, r3, #7168 @ 0x1c00 + 800462c: 687b ldr r3, [r7, #4] + 800462e: 68db ldr r3, [r3, #12] + 8004630: 4916 ldr r1, [pc, #88] @ (800468c ) + 8004632: 4313 orrs r3, r2 + 8004634: 608b str r3, [r1, #8] + 8004636: 687b ldr r3, [r7, #4] + 8004638: 681b ldr r3, [r3, #0] + 800463a: f003 0308 and.w r3, r3, #8 + 800463e: 2b00 cmp r3, #0 + 8004640: d009 beq.n 8004656 + 8004642: 4b12 ldr r3, [pc, #72] @ (800468c ) + 8004644: 689b ldr r3, [r3, #8] + 8004646: f423 4260 bic.w r2, r3, #57344 @ 0xe000 + 800464a: 687b ldr r3, [r7, #4] + 800464c: 691b ldr r3, [r3, #16] + 800464e: 00db lsls r3, r3, #3 + 8004650: 490e ldr r1, [pc, #56] @ (800468c ) + 8004652: 4313 orrs r3, r2 + 8004654: 608b str r3, [r1, #8] + 8004656: f000 fb7f bl 8004d58 + 800465a: 4602 mov r2, r0 + 800465c: 4b0b ldr r3, [pc, #44] @ (800468c ) + 800465e: 689b ldr r3, [r3, #8] + 8004660: 091b lsrs r3, r3, #4 + 8004662: f003 030f and.w r3, r3, #15 + 8004666: 490a ldr r1, [pc, #40] @ (8004690 ) + 8004668: 5ccb ldrb r3, [r1, r3] + 800466a: fa22 f303 lsr.w r3, r2, r3 + 800466e: 4a09 ldr r2, [pc, #36] @ (8004694 ) + 8004670: 6013 str r3, [r2, #0] + 8004672: 4b09 ldr r3, [pc, #36] @ (8004698 ) + 8004674: 681b ldr r3, [r3, #0] + 8004676: 4618 mov r0, r3 + 8004678: f7fd fc12 bl 8001ea0 + 800467c: 2300 movs r3, #0 + 800467e: 4618 mov r0, r3 + 8004680: 3710 adds r7, #16 + 8004682: 46bd mov sp, r7 + 8004684: bd80 pop {r7, pc} + 8004686: bf00 nop + 8004688: 40023c00 .word 0x40023c00 + 800468c: 40023800 .word 0x40023800 + 8004690: 0800b418 .word 0x0800b418 + 8004694: 20000090 .word 0x20000090 + 8004698: 20000094 .word 0x20000094 + +0800469c : + 800469c: b480 push {r7} + 800469e: af00 add r7, sp, #0 + 80046a0: 4b03 ldr r3, [pc, #12] @ (80046b0 ) + 80046a2: 681b ldr r3, [r3, #0] + 80046a4: 4618 mov r0, r3 + 80046a6: 46bd mov sp, r7 + 80046a8: f85d 7b04 ldr.w r7, [sp], #4 + 80046ac: 4770 bx lr + 80046ae: bf00 nop + 80046b0: 20000090 .word 0x20000090 + +080046b4 : + 80046b4: b580 push {r7, lr} + 80046b6: af00 add r7, sp, #0 + 80046b8: f7ff fff0 bl 800469c + 80046bc: 4602 mov r2, r0 + 80046be: 4b05 ldr r3, [pc, #20] @ (80046d4 ) + 80046c0: 689b ldr r3, [r3, #8] + 80046c2: 0a9b lsrs r3, r3, #10 + 80046c4: f003 0307 and.w r3, r3, #7 + 80046c8: 4903 ldr r1, [pc, #12] @ (80046d8 ) + 80046ca: 5ccb ldrb r3, [r1, r3] + 80046cc: fa22 f303 lsr.w r3, r2, r3 + 80046d0: 4618 mov r0, r3 + 80046d2: bd80 pop {r7, pc} + 80046d4: 40023800 .word 0x40023800 + 80046d8: 0800b428 .word 0x0800b428 + +080046dc : + 80046dc: b580 push {r7, lr} + 80046de: af00 add r7, sp, #0 + 80046e0: f7ff ffdc bl 800469c + 80046e4: 4602 mov r2, r0 + 80046e6: 4b05 ldr r3, [pc, #20] @ (80046fc ) + 80046e8: 689b ldr r3, [r3, #8] + 80046ea: 0b5b lsrs r3, r3, #13 + 80046ec: f003 0307 and.w r3, r3, #7 + 80046f0: 4903 ldr r1, [pc, #12] @ (8004700 ) + 80046f2: 5ccb ldrb r3, [r1, r3] + 80046f4: fa22 f303 lsr.w r3, r2, r3 + 80046f8: 4618 mov r0, r3 + 80046fa: bd80 pop {r7, pc} + 80046fc: 40023800 .word 0x40023800 + 8004700: 0800b428 .word 0x0800b428 + +08004704 : + 8004704: b580 push {r7, lr} + 8004706: b08c sub sp, #48 @ 0x30 + 8004708: af00 add r7, sp, #0 + 800470a: 6078 str r0, [r7, #4] + 800470c: 2300 movs r3, #0 + 800470e: 627b str r3, [r7, #36] @ 0x24 + 8004710: 2300 movs r3, #0 + 8004712: 623b str r3, [r7, #32] + 8004714: 2300 movs r3, #0 + 8004716: 61fb str r3, [r7, #28] + 8004718: 2300 movs r3, #0 + 800471a: 61bb str r3, [r7, #24] + 800471c: 2300 movs r3, #0 + 800471e: 617b str r3, [r7, #20] + 8004720: 2300 movs r3, #0 + 8004722: 613b str r3, [r7, #16] + 8004724: 2300 movs r3, #0 + 8004726: 60fb str r3, [r7, #12] + 8004728: 2300 movs r3, #0 + 800472a: 62fb str r3, [r7, #44] @ 0x2c + 800472c: 2300 movs r3, #0 + 800472e: 62bb str r3, [r7, #40] @ 0x28 + 8004730: 687b ldr r3, [r7, #4] + 8004732: 681b ldr r3, [r3, #0] + 8004734: f003 0301 and.w r3, r3, #1 + 8004738: 2b00 cmp r3, #0 + 800473a: d010 beq.n 800475e + 800473c: 4b6f ldr r3, [pc, #444] @ (80048fc ) + 800473e: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c + 8004742: f023 62c0 bic.w r2, r3, #100663296 @ 0x6000000 + 8004746: 687b ldr r3, [r7, #4] + 8004748: 6b9b ldr r3, [r3, #56] @ 0x38 + 800474a: 496c ldr r1, [pc, #432] @ (80048fc ) + 800474c: 4313 orrs r3, r2 + 800474e: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 8004752: 687b ldr r3, [r7, #4] + 8004754: 6b9b ldr r3, [r3, #56] @ 0x38 + 8004756: 2b00 cmp r3, #0 + 8004758: d101 bne.n 800475e + 800475a: 2301 movs r3, #1 + 800475c: 62fb str r3, [r7, #44] @ 0x2c + 800475e: 687b ldr r3, [r7, #4] + 8004760: 681b ldr r3, [r3, #0] + 8004762: f003 0302 and.w r3, r3, #2 + 8004766: 2b00 cmp r3, #0 + 8004768: d010 beq.n 800478c + 800476a: 4b64 ldr r3, [pc, #400] @ (80048fc ) + 800476c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c + 8004770: f023 52c0 bic.w r2, r3, #402653184 @ 0x18000000 + 8004774: 687b ldr r3, [r7, #4] + 8004776: 6bdb ldr r3, [r3, #60] @ 0x3c + 8004778: 4960 ldr r1, [pc, #384] @ (80048fc ) + 800477a: 4313 orrs r3, r2 + 800477c: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 8004780: 687b ldr r3, [r7, #4] + 8004782: 6bdb ldr r3, [r3, #60] @ 0x3c + 8004784: 2b00 cmp r3, #0 + 8004786: d101 bne.n 800478c + 8004788: 2301 movs r3, #1 + 800478a: 62fb str r3, [r7, #44] @ 0x2c + 800478c: 687b ldr r3, [r7, #4] + 800478e: 681b ldr r3, [r3, #0] + 8004790: f003 0304 and.w r3, r3, #4 + 8004794: 2b00 cmp r3, #0 + 8004796: d017 beq.n 80047c8 + 8004798: 4b58 ldr r3, [pc, #352] @ (80048fc ) + 800479a: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c + 800479e: f423 1240 bic.w r2, r3, #3145728 @ 0x300000 + 80047a2: 687b ldr r3, [r7, #4] + 80047a4: 6b1b ldr r3, [r3, #48] @ 0x30 + 80047a6: 4955 ldr r1, [pc, #340] @ (80048fc ) + 80047a8: 4313 orrs r3, r2 + 80047aa: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 80047ae: 687b ldr r3, [r7, #4] + 80047b0: 6b1b ldr r3, [r3, #48] @ 0x30 + 80047b2: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000 + 80047b6: d101 bne.n 80047bc + 80047b8: 2301 movs r3, #1 + 80047ba: 62fb str r3, [r7, #44] @ 0x2c + 80047bc: 687b ldr r3, [r7, #4] + 80047be: 6b1b ldr r3, [r3, #48] @ 0x30 + 80047c0: 2b00 cmp r3, #0 + 80047c2: d101 bne.n 80047c8 + 80047c4: 2301 movs r3, #1 + 80047c6: 62bb str r3, [r7, #40] @ 0x28 + 80047c8: 687b ldr r3, [r7, #4] + 80047ca: 681b ldr r3, [r3, #0] + 80047cc: f003 0308 and.w r3, r3, #8 + 80047d0: 2b00 cmp r3, #0 + 80047d2: d017 beq.n 8004804 + 80047d4: 4b49 ldr r3, [pc, #292] @ (80048fc ) + 80047d6: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c + 80047da: f423 0240 bic.w r2, r3, #12582912 @ 0xc00000 + 80047de: 687b ldr r3, [r7, #4] + 80047e0: 6b5b ldr r3, [r3, #52] @ 0x34 + 80047e2: 4946 ldr r1, [pc, #280] @ (80048fc ) + 80047e4: 4313 orrs r3, r2 + 80047e6: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 80047ea: 687b ldr r3, [r7, #4] + 80047ec: 6b5b ldr r3, [r3, #52] @ 0x34 + 80047ee: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 + 80047f2: d101 bne.n 80047f8 + 80047f4: 2301 movs r3, #1 + 80047f6: 62fb str r3, [r7, #44] @ 0x2c + 80047f8: 687b ldr r3, [r7, #4] + 80047fa: 6b5b ldr r3, [r3, #52] @ 0x34 + 80047fc: 2b00 cmp r3, #0 + 80047fe: d101 bne.n 8004804 + 8004800: 2301 movs r3, #1 + 8004802: 62bb str r3, [r7, #40] @ 0x28 + 8004804: 687b ldr r3, [r7, #4] + 8004806: 681b ldr r3, [r3, #0] + 8004808: f003 0320 and.w r3, r3, #32 + 800480c: 2b00 cmp r3, #0 + 800480e: f000 808a beq.w 8004926 + 8004812: 2300 movs r3, #0 + 8004814: 60bb str r3, [r7, #8] + 8004816: 4b39 ldr r3, [pc, #228] @ (80048fc ) + 8004818: 6c1b ldr r3, [r3, #64] @ 0x40 + 800481a: 4a38 ldr r2, [pc, #224] @ (80048fc ) + 800481c: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8004820: 6413 str r3, [r2, #64] @ 0x40 + 8004822: 4b36 ldr r3, [pc, #216] @ (80048fc ) + 8004824: 6c1b ldr r3, [r3, #64] @ 0x40 + 8004826: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800482a: 60bb str r3, [r7, #8] + 800482c: 68bb ldr r3, [r7, #8] + 800482e: 4b34 ldr r3, [pc, #208] @ (8004900 ) + 8004830: 681b ldr r3, [r3, #0] + 8004832: 4a33 ldr r2, [pc, #204] @ (8004900 ) + 8004834: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8004838: 6013 str r3, [r2, #0] + 800483a: f7fd fb75 bl 8001f28 + 800483e: 6278 str r0, [r7, #36] @ 0x24 + 8004840: e008 b.n 8004854 + 8004842: f7fd fb71 bl 8001f28 + 8004846: 4602 mov r2, r0 + 8004848: 6a7b ldr r3, [r7, #36] @ 0x24 + 800484a: 1ad3 subs r3, r2, r3 + 800484c: 2b02 cmp r3, #2 + 800484e: d901 bls.n 8004854 + 8004850: 2303 movs r3, #3 + 8004852: e278 b.n 8004d46 + 8004854: 4b2a ldr r3, [pc, #168] @ (8004900 ) + 8004856: 681b ldr r3, [r3, #0] + 8004858: f403 7380 and.w r3, r3, #256 @ 0x100 + 800485c: 2b00 cmp r3, #0 + 800485e: d0f0 beq.n 8004842 + 8004860: 4b26 ldr r3, [pc, #152] @ (80048fc ) + 8004862: 6f1b ldr r3, [r3, #112] @ 0x70 + 8004864: f403 7340 and.w r3, r3, #768 @ 0x300 + 8004868: 623b str r3, [r7, #32] + 800486a: 6a3b ldr r3, [r7, #32] + 800486c: 2b00 cmp r3, #0 + 800486e: d02f beq.n 80048d0 + 8004870: 687b ldr r3, [r7, #4] + 8004872: 6c1b ldr r3, [r3, #64] @ 0x40 + 8004874: f403 7340 and.w r3, r3, #768 @ 0x300 + 8004878: 6a3a ldr r2, [r7, #32] + 800487a: 429a cmp r2, r3 + 800487c: d028 beq.n 80048d0 + 800487e: 4b1f ldr r3, [pc, #124] @ (80048fc ) + 8004880: 6f1b ldr r3, [r3, #112] @ 0x70 + 8004882: f423 7340 bic.w r3, r3, #768 @ 0x300 + 8004886: 623b str r3, [r7, #32] + 8004888: 4b1e ldr r3, [pc, #120] @ (8004904 ) + 800488a: 2201 movs r2, #1 + 800488c: 601a str r2, [r3, #0] + 800488e: 4b1d ldr r3, [pc, #116] @ (8004904 ) + 8004890: 2200 movs r2, #0 + 8004892: 601a str r2, [r3, #0] + 8004894: 4a19 ldr r2, [pc, #100] @ (80048fc ) + 8004896: 6a3b ldr r3, [r7, #32] + 8004898: 6713 str r3, [r2, #112] @ 0x70 + 800489a: 4b18 ldr r3, [pc, #96] @ (80048fc ) + 800489c: 6f1b ldr r3, [r3, #112] @ 0x70 + 800489e: f003 0301 and.w r3, r3, #1 + 80048a2: 2b01 cmp r3, #1 + 80048a4: d114 bne.n 80048d0 + 80048a6: f7fd fb3f bl 8001f28 + 80048aa: 6278 str r0, [r7, #36] @ 0x24 + 80048ac: e00a b.n 80048c4 + 80048ae: f7fd fb3b bl 8001f28 + 80048b2: 4602 mov r2, r0 + 80048b4: 6a7b ldr r3, [r7, #36] @ 0x24 + 80048b6: 1ad3 subs r3, r2, r3 + 80048b8: f241 3288 movw r2, #5000 @ 0x1388 + 80048bc: 4293 cmp r3, r2 + 80048be: d901 bls.n 80048c4 + 80048c0: 2303 movs r3, #3 + 80048c2: e240 b.n 8004d46 + 80048c4: 4b0d ldr r3, [pc, #52] @ (80048fc ) + 80048c6: 6f1b ldr r3, [r3, #112] @ 0x70 + 80048c8: f003 0302 and.w r3, r3, #2 + 80048cc: 2b00 cmp r3, #0 + 80048ce: d0ee beq.n 80048ae + 80048d0: 687b ldr r3, [r7, #4] + 80048d2: 6c1b ldr r3, [r3, #64] @ 0x40 + 80048d4: f403 7340 and.w r3, r3, #768 @ 0x300 + 80048d8: f5b3 7f40 cmp.w r3, #768 @ 0x300 + 80048dc: d114 bne.n 8004908 + 80048de: 4b07 ldr r3, [pc, #28] @ (80048fc ) + 80048e0: 689b ldr r3, [r3, #8] + 80048e2: f423 12f8 bic.w r2, r3, #2031616 @ 0x1f0000 + 80048e6: 687b ldr r3, [r7, #4] + 80048e8: 6c1b ldr r3, [r3, #64] @ 0x40 + 80048ea: f023 4370 bic.w r3, r3, #4026531840 @ 0xf0000000 + 80048ee: f423 7340 bic.w r3, r3, #768 @ 0x300 + 80048f2: 4902 ldr r1, [pc, #8] @ (80048fc ) + 80048f4: 4313 orrs r3, r2 + 80048f6: 608b str r3, [r1, #8] + 80048f8: e00c b.n 8004914 + 80048fa: bf00 nop + 80048fc: 40023800 .word 0x40023800 + 8004900: 40007000 .word 0x40007000 + 8004904: 42470e40 .word 0x42470e40 + 8004908: 4b4a ldr r3, [pc, #296] @ (8004a34 ) + 800490a: 689b ldr r3, [r3, #8] + 800490c: 4a49 ldr r2, [pc, #292] @ (8004a34 ) + 800490e: f423 13f8 bic.w r3, r3, #2031616 @ 0x1f0000 + 8004912: 6093 str r3, [r2, #8] + 8004914: 4b47 ldr r3, [pc, #284] @ (8004a34 ) + 8004916: 6f1a ldr r2, [r3, #112] @ 0x70 + 8004918: 687b ldr r3, [r7, #4] + 800491a: 6c1b ldr r3, [r3, #64] @ 0x40 + 800491c: f3c3 030b ubfx r3, r3, #0, #12 + 8004920: 4944 ldr r1, [pc, #272] @ (8004a34 ) + 8004922: 4313 orrs r3, r2 + 8004924: 670b str r3, [r1, #112] @ 0x70 + 8004926: 687b ldr r3, [r7, #4] + 8004928: 681b ldr r3, [r3, #0] + 800492a: f003 0310 and.w r3, r3, #16 + 800492e: 2b00 cmp r3, #0 + 8004930: d004 beq.n 800493c + 8004932: 687b ldr r3, [r7, #4] + 8004934: f893 2058 ldrb.w r2, [r3, #88] @ 0x58 + 8004938: 4b3f ldr r3, [pc, #252] @ (8004a38 ) + 800493a: 601a str r2, [r3, #0] + 800493c: 687b ldr r3, [r7, #4] + 800493e: 681b ldr r3, [r3, #0] + 8004940: f003 0380 and.w r3, r3, #128 @ 0x80 + 8004944: 2b00 cmp r3, #0 + 8004946: d00a beq.n 800495e + 8004948: 4b3a ldr r3, [pc, #232] @ (8004a34 ) + 800494a: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94 + 800494e: f423 0240 bic.w r2, r3, #12582912 @ 0xc00000 + 8004952: 687b ldr r3, [r7, #4] + 8004954: 6cdb ldr r3, [r3, #76] @ 0x4c + 8004956: 4937 ldr r1, [pc, #220] @ (8004a34 ) + 8004958: 4313 orrs r3, r2 + 800495a: f8c1 3094 str.w r3, [r1, #148] @ 0x94 + 800495e: 687b ldr r3, [r7, #4] + 8004960: 681b ldr r3, [r3, #0] + 8004962: f003 0340 and.w r3, r3, #64 @ 0x40 + 8004966: 2b00 cmp r3, #0 + 8004968: d00a beq.n 8004980 + 800496a: 4b32 ldr r3, [pc, #200] @ (8004a34 ) + 800496c: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94 + 8004970: f023 6280 bic.w r2, r3, #67108864 @ 0x4000000 + 8004974: 687b ldr r3, [r7, #4] + 8004976: 6c9b ldr r3, [r3, #72] @ 0x48 + 8004978: 492e ldr r1, [pc, #184] @ (8004a34 ) + 800497a: 4313 orrs r3, r2 + 800497c: f8c1 3094 str.w r3, [r1, #148] @ 0x94 + 8004980: 687b ldr r3, [r7, #4] + 8004982: 681b ldr r3, [r3, #0] + 8004984: f403 7380 and.w r3, r3, #256 @ 0x100 + 8004988: 2b00 cmp r3, #0 + 800498a: d011 beq.n 80049b0 + 800498c: 4b29 ldr r3, [pc, #164] @ (8004a34 ) + 800498e: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94 + 8004992: f023 6200 bic.w r2, r3, #134217728 @ 0x8000000 + 8004996: 687b ldr r3, [r7, #4] + 8004998: 6d5b ldr r3, [r3, #84] @ 0x54 + 800499a: 4926 ldr r1, [pc, #152] @ (8004a34 ) + 800499c: 4313 orrs r3, r2 + 800499e: f8c1 3094 str.w r3, [r1, #148] @ 0x94 + 80049a2: 687b ldr r3, [r7, #4] + 80049a4: 6d5b ldr r3, [r3, #84] @ 0x54 + 80049a6: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000 + 80049aa: d101 bne.n 80049b0 + 80049ac: 2301 movs r3, #1 + 80049ae: 62bb str r3, [r7, #40] @ 0x28 + 80049b0: 687b ldr r3, [r7, #4] + 80049b2: 681b ldr r3, [r3, #0] + 80049b4: f403 7300 and.w r3, r3, #512 @ 0x200 + 80049b8: 2b00 cmp r3, #0 + 80049ba: d00a beq.n 80049d2 + 80049bc: 4b1d ldr r3, [pc, #116] @ (8004a34 ) + 80049be: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94 + 80049c2: f023 5280 bic.w r2, r3, #268435456 @ 0x10000000 + 80049c6: 687b ldr r3, [r7, #4] + 80049c8: 6c5b ldr r3, [r3, #68] @ 0x44 + 80049ca: 491a ldr r1, [pc, #104] @ (8004a34 ) + 80049cc: 4313 orrs r3, r2 + 80049ce: f8c1 3094 str.w r3, [r1, #148] @ 0x94 + 80049d2: 687b ldr r3, [r7, #4] + 80049d4: 681b ldr r3, [r3, #0] + 80049d6: f403 6380 and.w r3, r3, #1024 @ 0x400 + 80049da: 2b00 cmp r3, #0 + 80049dc: d011 beq.n 8004a02 + 80049de: 4b15 ldr r3, [pc, #84] @ (8004a34 ) + 80049e0: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94 + 80049e4: f023 5200 bic.w r2, r3, #536870912 @ 0x20000000 + 80049e8: 687b ldr r3, [r7, #4] + 80049ea: 6d1b ldr r3, [r3, #80] @ 0x50 + 80049ec: 4911 ldr r1, [pc, #68] @ (8004a34 ) + 80049ee: 4313 orrs r3, r2 + 80049f0: f8c1 3094 str.w r3, [r1, #148] @ 0x94 + 80049f4: 687b ldr r3, [r7, #4] + 80049f6: 6d1b ldr r3, [r3, #80] @ 0x50 + 80049f8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000 + 80049fc: d101 bne.n 8004a02 + 80049fe: 2301 movs r3, #1 + 8004a00: 62fb str r3, [r7, #44] @ 0x2c + 8004a02: 6afb ldr r3, [r7, #44] @ 0x2c + 8004a04: 2b01 cmp r3, #1 + 8004a06: d005 beq.n 8004a14 + 8004a08: 687b ldr r3, [r7, #4] + 8004a0a: 681b ldr r3, [r3, #0] + 8004a0c: f5b3 6f00 cmp.w r3, #2048 @ 0x800 + 8004a10: f040 80ff bne.w 8004c12 + 8004a14: 4b09 ldr r3, [pc, #36] @ (8004a3c ) + 8004a16: 2200 movs r2, #0 + 8004a18: 601a str r2, [r3, #0] + 8004a1a: f7fd fa85 bl 8001f28 + 8004a1e: 6278 str r0, [r7, #36] @ 0x24 + 8004a20: e00e b.n 8004a40 + 8004a22: f7fd fa81 bl 8001f28 + 8004a26: 4602 mov r2, r0 + 8004a28: 6a7b ldr r3, [r7, #36] @ 0x24 + 8004a2a: 1ad3 subs r3, r2, r3 + 8004a2c: 2b02 cmp r3, #2 + 8004a2e: d907 bls.n 8004a40 + 8004a30: 2303 movs r3, #3 + 8004a32: e188 b.n 8004d46 + 8004a34: 40023800 .word 0x40023800 + 8004a38: 424711e0 .word 0x424711e0 + 8004a3c: 42470068 .word 0x42470068 + 8004a40: 4b7e ldr r3, [pc, #504] @ (8004c3c ) + 8004a42: 681b ldr r3, [r3, #0] + 8004a44: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 8004a48: 2b00 cmp r3, #0 + 8004a4a: d1ea bne.n 8004a22 + 8004a4c: 687b ldr r3, [r7, #4] + 8004a4e: 681b ldr r3, [r3, #0] + 8004a50: f003 0301 and.w r3, r3, #1 + 8004a54: 2b00 cmp r3, #0 + 8004a56: d003 beq.n 8004a60 + 8004a58: 687b ldr r3, [r7, #4] + 8004a5a: 6b9b ldr r3, [r3, #56] @ 0x38 + 8004a5c: 2b00 cmp r3, #0 + 8004a5e: d009 beq.n 8004a74 + 8004a60: 687b ldr r3, [r7, #4] + 8004a62: 681b ldr r3, [r3, #0] + 8004a64: f003 0302 and.w r3, r3, #2 + 8004a68: 2b00 cmp r3, #0 + 8004a6a: d028 beq.n 8004abe + 8004a6c: 687b ldr r3, [r7, #4] + 8004a6e: 6bdb ldr r3, [r3, #60] @ 0x3c + 8004a70: 2b00 cmp r3, #0 + 8004a72: d124 bne.n 8004abe + 8004a74: 4b71 ldr r3, [pc, #452] @ (8004c3c ) + 8004a76: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 8004a7a: 0c1b lsrs r3, r3, #16 + 8004a7c: f003 0303 and.w r3, r3, #3 + 8004a80: 3301 adds r3, #1 + 8004a82: 005b lsls r3, r3, #1 + 8004a84: 61fb str r3, [r7, #28] + 8004a86: 4b6d ldr r3, [pc, #436] @ (8004c3c ) + 8004a88: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 8004a8c: 0e1b lsrs r3, r3, #24 + 8004a8e: f003 030f and.w r3, r3, #15 + 8004a92: 61bb str r3, [r7, #24] + 8004a94: 687b ldr r3, [r7, #4] + 8004a96: 685a ldr r2, [r3, #4] + 8004a98: 687b ldr r3, [r7, #4] + 8004a9a: 689b ldr r3, [r3, #8] + 8004a9c: 019b lsls r3, r3, #6 + 8004a9e: 431a orrs r2, r3 + 8004aa0: 69fb ldr r3, [r7, #28] + 8004aa2: 085b lsrs r3, r3, #1 + 8004aa4: 3b01 subs r3, #1 + 8004aa6: 041b lsls r3, r3, #16 + 8004aa8: 431a orrs r2, r3 + 8004aaa: 69bb ldr r3, [r7, #24] + 8004aac: 061b lsls r3, r3, #24 + 8004aae: 431a orrs r2, r3 + 8004ab0: 687b ldr r3, [r7, #4] + 8004ab2: 695b ldr r3, [r3, #20] + 8004ab4: 071b lsls r3, r3, #28 + 8004ab6: 4961 ldr r1, [pc, #388] @ (8004c3c ) + 8004ab8: 4313 orrs r3, r2 + 8004aba: f8c1 3084 str.w r3, [r1, #132] @ 0x84 + 8004abe: 687b ldr r3, [r7, #4] + 8004ac0: 681b ldr r3, [r3, #0] + 8004ac2: f003 0304 and.w r3, r3, #4 + 8004ac6: 2b00 cmp r3, #0 + 8004ac8: d004 beq.n 8004ad4 + 8004aca: 687b ldr r3, [r7, #4] + 8004acc: 6b1b ldr r3, [r3, #48] @ 0x30 + 8004ace: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000 + 8004ad2: d00a beq.n 8004aea + 8004ad4: 687b ldr r3, [r7, #4] + 8004ad6: 681b ldr r3, [r3, #0] + 8004ad8: f003 0308 and.w r3, r3, #8 + 8004adc: 2b00 cmp r3, #0 + 8004ade: d035 beq.n 8004b4c + 8004ae0: 687b ldr r3, [r7, #4] + 8004ae2: 6b5b ldr r3, [r3, #52] @ 0x34 + 8004ae4: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 + 8004ae8: d130 bne.n 8004b4c + 8004aea: 4b54 ldr r3, [pc, #336] @ (8004c3c ) + 8004aec: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 8004af0: 0c1b lsrs r3, r3, #16 + 8004af2: f003 0303 and.w r3, r3, #3 + 8004af6: 3301 adds r3, #1 + 8004af8: 005b lsls r3, r3, #1 + 8004afa: 61fb str r3, [r7, #28] + 8004afc: 4b4f ldr r3, [pc, #316] @ (8004c3c ) + 8004afe: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 8004b02: 0f1b lsrs r3, r3, #28 + 8004b04: f003 0307 and.w r3, r3, #7 + 8004b08: 617b str r3, [r7, #20] + 8004b0a: 687b ldr r3, [r7, #4] + 8004b0c: 685a ldr r2, [r3, #4] + 8004b0e: 687b ldr r3, [r7, #4] + 8004b10: 689b ldr r3, [r3, #8] + 8004b12: 019b lsls r3, r3, #6 + 8004b14: 431a orrs r2, r3 + 8004b16: 69fb ldr r3, [r7, #28] + 8004b18: 085b lsrs r3, r3, #1 + 8004b1a: 3b01 subs r3, #1 + 8004b1c: 041b lsls r3, r3, #16 + 8004b1e: 431a orrs r2, r3 + 8004b20: 687b ldr r3, [r7, #4] + 8004b22: 691b ldr r3, [r3, #16] + 8004b24: 061b lsls r3, r3, #24 + 8004b26: 431a orrs r2, r3 + 8004b28: 697b ldr r3, [r7, #20] + 8004b2a: 071b lsls r3, r3, #28 + 8004b2c: 4943 ldr r1, [pc, #268] @ (8004c3c ) + 8004b2e: 4313 orrs r3, r2 + 8004b30: f8c1 3084 str.w r3, [r1, #132] @ 0x84 + 8004b34: 4b41 ldr r3, [pc, #260] @ (8004c3c ) + 8004b36: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c + 8004b3a: f023 021f bic.w r2, r3, #31 + 8004b3e: 687b ldr r3, [r7, #4] + 8004b40: 6a9b ldr r3, [r3, #40] @ 0x28 + 8004b42: 3b01 subs r3, #1 + 8004b44: 493d ldr r1, [pc, #244] @ (8004c3c ) + 8004b46: 4313 orrs r3, r2 + 8004b48: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 8004b4c: 687b ldr r3, [r7, #4] + 8004b4e: 681b ldr r3, [r3, #0] + 8004b50: f403 6380 and.w r3, r3, #1024 @ 0x400 + 8004b54: 2b00 cmp r3, #0 + 8004b56: d029 beq.n 8004bac + 8004b58: 687b ldr r3, [r7, #4] + 8004b5a: 6d1b ldr r3, [r3, #80] @ 0x50 + 8004b5c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000 + 8004b60: d124 bne.n 8004bac + 8004b62: 4b36 ldr r3, [pc, #216] @ (8004c3c ) + 8004b64: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 8004b68: 0c1b lsrs r3, r3, #16 + 8004b6a: f003 0303 and.w r3, r3, #3 + 8004b6e: 3301 adds r3, #1 + 8004b70: 005b lsls r3, r3, #1 + 8004b72: 61bb str r3, [r7, #24] + 8004b74: 4b31 ldr r3, [pc, #196] @ (8004c3c ) + 8004b76: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84 + 8004b7a: 0f1b lsrs r3, r3, #28 + 8004b7c: f003 0307 and.w r3, r3, #7 + 8004b80: 617b str r3, [r7, #20] + 8004b82: 687b ldr r3, [r7, #4] + 8004b84: 685a ldr r2, [r3, #4] + 8004b86: 687b ldr r3, [r7, #4] + 8004b88: 689b ldr r3, [r3, #8] + 8004b8a: 019b lsls r3, r3, #6 + 8004b8c: 431a orrs r2, r3 + 8004b8e: 687b ldr r3, [r7, #4] + 8004b90: 68db ldr r3, [r3, #12] + 8004b92: 085b lsrs r3, r3, #1 + 8004b94: 3b01 subs r3, #1 + 8004b96: 041b lsls r3, r3, #16 + 8004b98: 431a orrs r2, r3 + 8004b9a: 69bb ldr r3, [r7, #24] + 8004b9c: 061b lsls r3, r3, #24 + 8004b9e: 431a orrs r2, r3 + 8004ba0: 697b ldr r3, [r7, #20] + 8004ba2: 071b lsls r3, r3, #28 + 8004ba4: 4925 ldr r1, [pc, #148] @ (8004c3c ) + 8004ba6: 4313 orrs r3, r2 + 8004ba8: f8c1 3084 str.w r3, [r1, #132] @ 0x84 + 8004bac: 687b ldr r3, [r7, #4] + 8004bae: 681b ldr r3, [r3, #0] + 8004bb0: f403 6300 and.w r3, r3, #2048 @ 0x800 + 8004bb4: 2b00 cmp r3, #0 + 8004bb6: d016 beq.n 8004be6 + 8004bb8: 687b ldr r3, [r7, #4] + 8004bba: 685a ldr r2, [r3, #4] + 8004bbc: 687b ldr r3, [r7, #4] + 8004bbe: 689b ldr r3, [r3, #8] + 8004bc0: 019b lsls r3, r3, #6 + 8004bc2: 431a orrs r2, r3 + 8004bc4: 687b ldr r3, [r7, #4] + 8004bc6: 68db ldr r3, [r3, #12] + 8004bc8: 085b lsrs r3, r3, #1 + 8004bca: 3b01 subs r3, #1 + 8004bcc: 041b lsls r3, r3, #16 + 8004bce: 431a orrs r2, r3 + 8004bd0: 687b ldr r3, [r7, #4] + 8004bd2: 691b ldr r3, [r3, #16] + 8004bd4: 061b lsls r3, r3, #24 + 8004bd6: 431a orrs r2, r3 + 8004bd8: 687b ldr r3, [r7, #4] + 8004bda: 695b ldr r3, [r3, #20] + 8004bdc: 071b lsls r3, r3, #28 + 8004bde: 4917 ldr r1, [pc, #92] @ (8004c3c ) + 8004be0: 4313 orrs r3, r2 + 8004be2: f8c1 3084 str.w r3, [r1, #132] @ 0x84 + 8004be6: 4b16 ldr r3, [pc, #88] @ (8004c40 ) + 8004be8: 2201 movs r2, #1 + 8004bea: 601a str r2, [r3, #0] + 8004bec: f7fd f99c bl 8001f28 + 8004bf0: 6278 str r0, [r7, #36] @ 0x24 + 8004bf2: e008 b.n 8004c06 + 8004bf4: f7fd f998 bl 8001f28 + 8004bf8: 4602 mov r2, r0 + 8004bfa: 6a7b ldr r3, [r7, #36] @ 0x24 + 8004bfc: 1ad3 subs r3, r2, r3 + 8004bfe: 2b02 cmp r3, #2 + 8004c00: d901 bls.n 8004c06 + 8004c02: 2303 movs r3, #3 + 8004c04: e09f b.n 8004d46 + 8004c06: 4b0d ldr r3, [pc, #52] @ (8004c3c ) + 8004c08: 681b ldr r3, [r3, #0] + 8004c0a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 8004c0e: 2b00 cmp r3, #0 + 8004c10: d0f0 beq.n 8004bf4 + 8004c12: 6abb ldr r3, [r7, #40] @ 0x28 + 8004c14: 2b01 cmp r3, #1 + 8004c16: f040 8095 bne.w 8004d44 + 8004c1a: 4b0a ldr r3, [pc, #40] @ (8004c44 ) + 8004c1c: 2200 movs r2, #0 + 8004c1e: 601a str r2, [r3, #0] + 8004c20: f7fd f982 bl 8001f28 + 8004c24: 6278 str r0, [r7, #36] @ 0x24 + 8004c26: e00f b.n 8004c48 + 8004c28: f7fd f97e bl 8001f28 + 8004c2c: 4602 mov r2, r0 + 8004c2e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8004c30: 1ad3 subs r3, r2, r3 + 8004c32: 2b02 cmp r3, #2 + 8004c34: d908 bls.n 8004c48 + 8004c36: 2303 movs r3, #3 + 8004c38: e085 b.n 8004d46 + 8004c3a: bf00 nop + 8004c3c: 40023800 .word 0x40023800 + 8004c40: 42470068 .word 0x42470068 + 8004c44: 42470070 .word 0x42470070 + 8004c48: 4b41 ldr r3, [pc, #260] @ (8004d50 ) + 8004c4a: 681b ldr r3, [r3, #0] + 8004c4c: f003 5300 and.w r3, r3, #536870912 @ 0x20000000 + 8004c50: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000 + 8004c54: d0e8 beq.n 8004c28 + 8004c56: 687b ldr r3, [r7, #4] + 8004c58: 681b ldr r3, [r3, #0] + 8004c5a: f003 0304 and.w r3, r3, #4 + 8004c5e: 2b00 cmp r3, #0 + 8004c60: d003 beq.n 8004c6a + 8004c62: 687b ldr r3, [r7, #4] + 8004c64: 6b1b ldr r3, [r3, #48] @ 0x30 + 8004c66: 2b00 cmp r3, #0 + 8004c68: d009 beq.n 8004c7e + 8004c6a: 687b ldr r3, [r7, #4] + 8004c6c: 681b ldr r3, [r3, #0] + 8004c6e: f003 0308 and.w r3, r3, #8 + 8004c72: 2b00 cmp r3, #0 + 8004c74: d02b beq.n 8004cce + 8004c76: 687b ldr r3, [r7, #4] + 8004c78: 6b5b ldr r3, [r3, #52] @ 0x34 + 8004c7a: 2b00 cmp r3, #0 + 8004c7c: d127 bne.n 8004cce + 8004c7e: 4b34 ldr r3, [pc, #208] @ (8004d50 ) + 8004c80: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88 + 8004c84: 0c1b lsrs r3, r3, #16 + 8004c86: f003 0303 and.w r3, r3, #3 + 8004c8a: 3301 adds r3, #1 + 8004c8c: 005b lsls r3, r3, #1 + 8004c8e: 613b str r3, [r7, #16] + 8004c90: 687b ldr r3, [r7, #4] + 8004c92: 699a ldr r2, [r3, #24] + 8004c94: 687b ldr r3, [r7, #4] + 8004c96: 69db ldr r3, [r3, #28] + 8004c98: 019b lsls r3, r3, #6 + 8004c9a: 431a orrs r2, r3 + 8004c9c: 693b ldr r3, [r7, #16] + 8004c9e: 085b lsrs r3, r3, #1 + 8004ca0: 3b01 subs r3, #1 + 8004ca2: 041b lsls r3, r3, #16 + 8004ca4: 431a orrs r2, r3 + 8004ca6: 687b ldr r3, [r7, #4] + 8004ca8: 6a5b ldr r3, [r3, #36] @ 0x24 + 8004caa: 061b lsls r3, r3, #24 + 8004cac: 4928 ldr r1, [pc, #160] @ (8004d50 ) + 8004cae: 4313 orrs r3, r2 + 8004cb0: f8c1 3088 str.w r3, [r1, #136] @ 0x88 + 8004cb4: 4b26 ldr r3, [pc, #152] @ (8004d50 ) + 8004cb6: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c + 8004cba: f423 52f8 bic.w r2, r3, #7936 @ 0x1f00 + 8004cbe: 687b ldr r3, [r7, #4] + 8004cc0: 6adb ldr r3, [r3, #44] @ 0x2c + 8004cc2: 3b01 subs r3, #1 + 8004cc4: 021b lsls r3, r3, #8 + 8004cc6: 4922 ldr r1, [pc, #136] @ (8004d50 ) + 8004cc8: 4313 orrs r3, r2 + 8004cca: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 8004cce: 687b ldr r3, [r7, #4] + 8004cd0: 681b ldr r3, [r3, #0] + 8004cd2: f403 7380 and.w r3, r3, #256 @ 0x100 + 8004cd6: 2b00 cmp r3, #0 + 8004cd8: d01d beq.n 8004d16 + 8004cda: 687b ldr r3, [r7, #4] + 8004cdc: 6d5b ldr r3, [r3, #84] @ 0x54 + 8004cde: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000 + 8004ce2: d118 bne.n 8004d16 + 8004ce4: 4b1a ldr r3, [pc, #104] @ (8004d50 ) + 8004ce6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88 + 8004cea: 0e1b lsrs r3, r3, #24 + 8004cec: f003 030f and.w r3, r3, #15 + 8004cf0: 60fb str r3, [r7, #12] + 8004cf2: 687b ldr r3, [r7, #4] + 8004cf4: 699a ldr r2, [r3, #24] + 8004cf6: 687b ldr r3, [r7, #4] + 8004cf8: 69db ldr r3, [r3, #28] + 8004cfa: 019b lsls r3, r3, #6 + 8004cfc: 431a orrs r2, r3 + 8004cfe: 687b ldr r3, [r7, #4] + 8004d00: 6a1b ldr r3, [r3, #32] + 8004d02: 085b lsrs r3, r3, #1 + 8004d04: 3b01 subs r3, #1 + 8004d06: 041b lsls r3, r3, #16 + 8004d08: 431a orrs r2, r3 + 8004d0a: 68fb ldr r3, [r7, #12] + 8004d0c: 061b lsls r3, r3, #24 + 8004d0e: 4910 ldr r1, [pc, #64] @ (8004d50 ) + 8004d10: 4313 orrs r3, r2 + 8004d12: f8c1 3088 str.w r3, [r1, #136] @ 0x88 + 8004d16: 4b0f ldr r3, [pc, #60] @ (8004d54 ) + 8004d18: 2201 movs r2, #1 + 8004d1a: 601a str r2, [r3, #0] + 8004d1c: f7fd f904 bl 8001f28 + 8004d20: 6278 str r0, [r7, #36] @ 0x24 + 8004d22: e008 b.n 8004d36 + 8004d24: f7fd f900 bl 8001f28 + 8004d28: 4602 mov r2, r0 + 8004d2a: 6a7b ldr r3, [r7, #36] @ 0x24 + 8004d2c: 1ad3 subs r3, r2, r3 + 8004d2e: 2b02 cmp r3, #2 + 8004d30: d901 bls.n 8004d36 + 8004d32: 2303 movs r3, #3 + 8004d34: e007 b.n 8004d46 + 8004d36: 4b06 ldr r3, [pc, #24] @ (8004d50 ) + 8004d38: 681b ldr r3, [r3, #0] + 8004d3a: f003 5300 and.w r3, r3, #536870912 @ 0x20000000 + 8004d3e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000 + 8004d42: d1ef bne.n 8004d24 + 8004d44: 2300 movs r3, #0 + 8004d46: 4618 mov r0, r3 + 8004d48: 3730 adds r7, #48 @ 0x30 + 8004d4a: 46bd mov sp, r7 + 8004d4c: bd80 pop {r7, pc} + 8004d4e: bf00 nop + 8004d50: 40023800 .word 0x40023800 + 8004d54: 42470070 .word 0x42470070 + +08004d58 : + 8004d58: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} + 8004d5c: b0ae sub sp, #184 @ 0xb8 + 8004d5e: af00 add r7, sp, #0 + 8004d60: 2300 movs r3, #0 + 8004d62: f8c7 30ac str.w r3, [r7, #172] @ 0xac + 8004d66: 2300 movs r3, #0 + 8004d68: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 8004d6c: 2300 movs r3, #0 + 8004d6e: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8 + 8004d72: 2300 movs r3, #0 + 8004d74: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4 + 8004d78: 2300 movs r3, #0 + 8004d7a: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 8004d7e: 4bcb ldr r3, [pc, #812] @ (80050ac ) + 8004d80: 689b ldr r3, [r3, #8] + 8004d82: f003 030c and.w r3, r3, #12 + 8004d86: 2b0c cmp r3, #12 + 8004d88: f200 8206 bhi.w 8005198 + 8004d8c: a201 add r2, pc, #4 @ (adr r2, 8004d94 ) + 8004d8e: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8004d92: bf00 nop + 8004d94: 08004dc9 .word 0x08004dc9 + 8004d98: 08005199 .word 0x08005199 + 8004d9c: 08005199 .word 0x08005199 + 8004da0: 08005199 .word 0x08005199 + 8004da4: 08004dd1 .word 0x08004dd1 + 8004da8: 08005199 .word 0x08005199 + 8004dac: 08005199 .word 0x08005199 + 8004db0: 08005199 .word 0x08005199 + 8004db4: 08004dd9 .word 0x08004dd9 + 8004db8: 08005199 .word 0x08005199 + 8004dbc: 08005199 .word 0x08005199 + 8004dc0: 08005199 .word 0x08005199 + 8004dc4: 08004fc9 .word 0x08004fc9 + 8004dc8: 4bb9 ldr r3, [pc, #740] @ (80050b0 ) + 8004dca: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 8004dce: e1e7 b.n 80051a0 + 8004dd0: 4bb8 ldr r3, [pc, #736] @ (80050b4 ) + 8004dd2: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 8004dd6: e1e3 b.n 80051a0 + 8004dd8: 4bb4 ldr r3, [pc, #720] @ (80050ac ) + 8004dda: 685b ldr r3, [r3, #4] + 8004ddc: f003 033f and.w r3, r3, #63 @ 0x3f + 8004de0: f8c7 30ac str.w r3, [r7, #172] @ 0xac + 8004de4: 4bb1 ldr r3, [pc, #708] @ (80050ac ) + 8004de6: 685b ldr r3, [r3, #4] + 8004de8: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 8004dec: 2b00 cmp r3, #0 + 8004dee: d071 beq.n 8004ed4 + 8004df0: 4bae ldr r3, [pc, #696] @ (80050ac ) + 8004df2: 685b ldr r3, [r3, #4] + 8004df4: 099b lsrs r3, r3, #6 + 8004df6: 2200 movs r2, #0 + 8004df8: f8c7 3098 str.w r3, [r7, #152] @ 0x98 + 8004dfc: f8c7 209c str.w r2, [r7, #156] @ 0x9c + 8004e00: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98 + 8004e04: f3c3 0308 ubfx r3, r3, #0, #9 + 8004e08: f8c7 3090 str.w r3, [r7, #144] @ 0x90 + 8004e0c: 2300 movs r3, #0 + 8004e0e: f8c7 3094 str.w r3, [r7, #148] @ 0x94 + 8004e12: e9d7 4524 ldrd r4, r5, [r7, #144] @ 0x90 + 8004e16: 4622 mov r2, r4 + 8004e18: 462b mov r3, r5 + 8004e1a: f04f 0000 mov.w r0, #0 + 8004e1e: f04f 0100 mov.w r1, #0 + 8004e22: 0159 lsls r1, r3, #5 + 8004e24: ea41 61d2 orr.w r1, r1, r2, lsr #27 + 8004e28: 0150 lsls r0, r2, #5 + 8004e2a: 4602 mov r2, r0 + 8004e2c: 460b mov r3, r1 + 8004e2e: 4621 mov r1, r4 + 8004e30: 1a51 subs r1, r2, r1 + 8004e32: 6439 str r1, [r7, #64] @ 0x40 + 8004e34: 4629 mov r1, r5 + 8004e36: eb63 0301 sbc.w r3, r3, r1 + 8004e3a: 647b str r3, [r7, #68] @ 0x44 + 8004e3c: f04f 0200 mov.w r2, #0 + 8004e40: f04f 0300 mov.w r3, #0 + 8004e44: e9d7 8910 ldrd r8, r9, [r7, #64] @ 0x40 + 8004e48: 4649 mov r1, r9 + 8004e4a: 018b lsls r3, r1, #6 + 8004e4c: 4641 mov r1, r8 + 8004e4e: ea43 6391 orr.w r3, r3, r1, lsr #26 + 8004e52: 4641 mov r1, r8 + 8004e54: 018a lsls r2, r1, #6 + 8004e56: 4641 mov r1, r8 + 8004e58: 1a51 subs r1, r2, r1 + 8004e5a: 63b9 str r1, [r7, #56] @ 0x38 + 8004e5c: 4649 mov r1, r9 + 8004e5e: eb63 0301 sbc.w r3, r3, r1 + 8004e62: 63fb str r3, [r7, #60] @ 0x3c + 8004e64: f04f 0200 mov.w r2, #0 + 8004e68: f04f 0300 mov.w r3, #0 + 8004e6c: e9d7 890e ldrd r8, r9, [r7, #56] @ 0x38 + 8004e70: 4649 mov r1, r9 + 8004e72: 00cb lsls r3, r1, #3 + 8004e74: 4641 mov r1, r8 + 8004e76: ea43 7351 orr.w r3, r3, r1, lsr #29 + 8004e7a: 4641 mov r1, r8 + 8004e7c: 00ca lsls r2, r1, #3 + 8004e7e: 4610 mov r0, r2 + 8004e80: 4619 mov r1, r3 + 8004e82: 4603 mov r3, r0 + 8004e84: 4622 mov r2, r4 + 8004e86: 189b adds r3, r3, r2 + 8004e88: 633b str r3, [r7, #48] @ 0x30 + 8004e8a: 462b mov r3, r5 + 8004e8c: 460a mov r2, r1 + 8004e8e: eb42 0303 adc.w r3, r2, r3 + 8004e92: 637b str r3, [r7, #52] @ 0x34 + 8004e94: f04f 0200 mov.w r2, #0 + 8004e98: f04f 0300 mov.w r3, #0 + 8004e9c: e9d7 450c ldrd r4, r5, [r7, #48] @ 0x30 + 8004ea0: 4629 mov r1, r5 + 8004ea2: 024b lsls r3, r1, #9 + 8004ea4: 4621 mov r1, r4 + 8004ea6: ea43 53d1 orr.w r3, r3, r1, lsr #23 + 8004eaa: 4621 mov r1, r4 + 8004eac: 024a lsls r2, r1, #9 + 8004eae: 4610 mov r0, r2 + 8004eb0: 4619 mov r1, r3 + 8004eb2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac + 8004eb6: 2200 movs r2, #0 + 8004eb8: f8c7 3088 str.w r3, [r7, #136] @ 0x88 + 8004ebc: f8c7 208c str.w r2, [r7, #140] @ 0x8c + 8004ec0: e9d7 2322 ldrd r2, r3, [r7, #136] @ 0x88 + 8004ec4: f7fb f99e bl 8000204 <__aeabi_uldivmod> + 8004ec8: 4602 mov r2, r0 + 8004eca: 460b mov r3, r1 + 8004ecc: 4613 mov r3, r2 + 8004ece: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 8004ed2: e067 b.n 8004fa4 + 8004ed4: 4b75 ldr r3, [pc, #468] @ (80050ac ) + 8004ed6: 685b ldr r3, [r3, #4] + 8004ed8: 099b lsrs r3, r3, #6 + 8004eda: 2200 movs r2, #0 + 8004edc: f8c7 3080 str.w r3, [r7, #128] @ 0x80 + 8004ee0: f8c7 2084 str.w r2, [r7, #132] @ 0x84 + 8004ee4: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80 + 8004ee8: f3c3 0308 ubfx r3, r3, #0, #9 + 8004eec: 67bb str r3, [r7, #120] @ 0x78 + 8004eee: 2300 movs r3, #0 + 8004ef0: 67fb str r3, [r7, #124] @ 0x7c + 8004ef2: e9d7 451e ldrd r4, r5, [r7, #120] @ 0x78 + 8004ef6: 4622 mov r2, r4 + 8004ef8: 462b mov r3, r5 + 8004efa: f04f 0000 mov.w r0, #0 + 8004efe: f04f 0100 mov.w r1, #0 + 8004f02: 0159 lsls r1, r3, #5 + 8004f04: ea41 61d2 orr.w r1, r1, r2, lsr #27 + 8004f08: 0150 lsls r0, r2, #5 + 8004f0a: 4602 mov r2, r0 + 8004f0c: 460b mov r3, r1 + 8004f0e: 4621 mov r1, r4 + 8004f10: 1a51 subs r1, r2, r1 + 8004f12: 62b9 str r1, [r7, #40] @ 0x28 + 8004f14: 4629 mov r1, r5 + 8004f16: eb63 0301 sbc.w r3, r3, r1 + 8004f1a: 62fb str r3, [r7, #44] @ 0x2c + 8004f1c: f04f 0200 mov.w r2, #0 + 8004f20: f04f 0300 mov.w r3, #0 + 8004f24: e9d7 890a ldrd r8, r9, [r7, #40] @ 0x28 + 8004f28: 4649 mov r1, r9 + 8004f2a: 018b lsls r3, r1, #6 + 8004f2c: 4641 mov r1, r8 + 8004f2e: ea43 6391 orr.w r3, r3, r1, lsr #26 + 8004f32: 4641 mov r1, r8 + 8004f34: 018a lsls r2, r1, #6 + 8004f36: 4641 mov r1, r8 + 8004f38: ebb2 0a01 subs.w sl, r2, r1 + 8004f3c: 4649 mov r1, r9 + 8004f3e: eb63 0b01 sbc.w fp, r3, r1 + 8004f42: f04f 0200 mov.w r2, #0 + 8004f46: f04f 0300 mov.w r3, #0 + 8004f4a: ea4f 03cb mov.w r3, fp, lsl #3 + 8004f4e: ea43 735a orr.w r3, r3, sl, lsr #29 + 8004f52: ea4f 02ca mov.w r2, sl, lsl #3 + 8004f56: 4692 mov sl, r2 + 8004f58: 469b mov fp, r3 + 8004f5a: 4623 mov r3, r4 + 8004f5c: eb1a 0303 adds.w r3, sl, r3 + 8004f60: 623b str r3, [r7, #32] + 8004f62: 462b mov r3, r5 + 8004f64: eb4b 0303 adc.w r3, fp, r3 + 8004f68: 627b str r3, [r7, #36] @ 0x24 + 8004f6a: f04f 0200 mov.w r2, #0 + 8004f6e: f04f 0300 mov.w r3, #0 + 8004f72: e9d7 4508 ldrd r4, r5, [r7, #32] + 8004f76: 4629 mov r1, r5 + 8004f78: 028b lsls r3, r1, #10 + 8004f7a: 4621 mov r1, r4 + 8004f7c: ea43 5391 orr.w r3, r3, r1, lsr #22 + 8004f80: 4621 mov r1, r4 + 8004f82: 028a lsls r2, r1, #10 + 8004f84: 4610 mov r0, r2 + 8004f86: 4619 mov r1, r3 + 8004f88: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac + 8004f8c: 2200 movs r2, #0 + 8004f8e: 673b str r3, [r7, #112] @ 0x70 + 8004f90: 677a str r2, [r7, #116] @ 0x74 + 8004f92: e9d7 231c ldrd r2, r3, [r7, #112] @ 0x70 + 8004f96: f7fb f935 bl 8000204 <__aeabi_uldivmod> + 8004f9a: 4602 mov r2, r0 + 8004f9c: 460b mov r3, r1 + 8004f9e: 4613 mov r3, r2 + 8004fa0: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 8004fa4: 4b41 ldr r3, [pc, #260] @ (80050ac ) + 8004fa6: 685b ldr r3, [r3, #4] + 8004fa8: 0c1b lsrs r3, r3, #16 + 8004faa: f003 0303 and.w r3, r3, #3 + 8004fae: 3301 adds r3, #1 + 8004fb0: 005b lsls r3, r3, #1 + 8004fb2: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8 + 8004fb6: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4 + 8004fba: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8 + 8004fbe: fbb2 f3f3 udiv r3, r2, r3 + 8004fc2: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 8004fc6: e0eb b.n 80051a0 + 8004fc8: 4b38 ldr r3, [pc, #224] @ (80050ac ) + 8004fca: 685b ldr r3, [r3, #4] + 8004fcc: f003 033f and.w r3, r3, #63 @ 0x3f + 8004fd0: f8c7 30ac str.w r3, [r7, #172] @ 0xac + 8004fd4: 4b35 ldr r3, [pc, #212] @ (80050ac ) + 8004fd6: 685b ldr r3, [r3, #4] + 8004fd8: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 8004fdc: 2b00 cmp r3, #0 + 8004fde: d06b beq.n 80050b8 + 8004fe0: 4b32 ldr r3, [pc, #200] @ (80050ac ) + 8004fe2: 685b ldr r3, [r3, #4] + 8004fe4: 099b lsrs r3, r3, #6 + 8004fe6: 2200 movs r2, #0 + 8004fe8: 66bb str r3, [r7, #104] @ 0x68 + 8004fea: 66fa str r2, [r7, #108] @ 0x6c + 8004fec: 6ebb ldr r3, [r7, #104] @ 0x68 + 8004fee: f3c3 0308 ubfx r3, r3, #0, #9 + 8004ff2: 663b str r3, [r7, #96] @ 0x60 + 8004ff4: 2300 movs r3, #0 + 8004ff6: 667b str r3, [r7, #100] @ 0x64 + 8004ff8: e9d7 4518 ldrd r4, r5, [r7, #96] @ 0x60 + 8004ffc: 4622 mov r2, r4 + 8004ffe: 462b mov r3, r5 + 8005000: f04f 0000 mov.w r0, #0 + 8005004: f04f 0100 mov.w r1, #0 + 8005008: 0159 lsls r1, r3, #5 + 800500a: ea41 61d2 orr.w r1, r1, r2, lsr #27 + 800500e: 0150 lsls r0, r2, #5 + 8005010: 4602 mov r2, r0 + 8005012: 460b mov r3, r1 + 8005014: 4621 mov r1, r4 + 8005016: 1a51 subs r1, r2, r1 + 8005018: 61b9 str r1, [r7, #24] + 800501a: 4629 mov r1, r5 + 800501c: eb63 0301 sbc.w r3, r3, r1 + 8005020: 61fb str r3, [r7, #28] + 8005022: f04f 0200 mov.w r2, #0 + 8005026: f04f 0300 mov.w r3, #0 + 800502a: e9d7 ab06 ldrd sl, fp, [r7, #24] + 800502e: 4659 mov r1, fp + 8005030: 018b lsls r3, r1, #6 + 8005032: 4651 mov r1, sl + 8005034: ea43 6391 orr.w r3, r3, r1, lsr #26 + 8005038: 4651 mov r1, sl + 800503a: 018a lsls r2, r1, #6 + 800503c: 4651 mov r1, sl + 800503e: ebb2 0801 subs.w r8, r2, r1 + 8005042: 4659 mov r1, fp + 8005044: eb63 0901 sbc.w r9, r3, r1 + 8005048: f04f 0200 mov.w r2, #0 + 800504c: f04f 0300 mov.w r3, #0 + 8005050: ea4f 03c9 mov.w r3, r9, lsl #3 + 8005054: ea43 7358 orr.w r3, r3, r8, lsr #29 + 8005058: ea4f 02c8 mov.w r2, r8, lsl #3 + 800505c: 4690 mov r8, r2 + 800505e: 4699 mov r9, r3 + 8005060: 4623 mov r3, r4 + 8005062: eb18 0303 adds.w r3, r8, r3 + 8005066: 613b str r3, [r7, #16] + 8005068: 462b mov r3, r5 + 800506a: eb49 0303 adc.w r3, r9, r3 + 800506e: 617b str r3, [r7, #20] + 8005070: f04f 0200 mov.w r2, #0 + 8005074: f04f 0300 mov.w r3, #0 + 8005078: e9d7 4504 ldrd r4, r5, [r7, #16] + 800507c: 4629 mov r1, r5 + 800507e: 024b lsls r3, r1, #9 + 8005080: 4621 mov r1, r4 + 8005082: ea43 53d1 orr.w r3, r3, r1, lsr #23 + 8005086: 4621 mov r1, r4 + 8005088: 024a lsls r2, r1, #9 + 800508a: 4610 mov r0, r2 + 800508c: 4619 mov r1, r3 + 800508e: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac + 8005092: 2200 movs r2, #0 + 8005094: 65bb str r3, [r7, #88] @ 0x58 + 8005096: 65fa str r2, [r7, #92] @ 0x5c + 8005098: e9d7 2316 ldrd r2, r3, [r7, #88] @ 0x58 + 800509c: f7fb f8b2 bl 8000204 <__aeabi_uldivmod> + 80050a0: 4602 mov r2, r0 + 80050a2: 460b mov r3, r1 + 80050a4: 4613 mov r3, r2 + 80050a6: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 80050aa: e065 b.n 8005178 + 80050ac: 40023800 .word 0x40023800 + 80050b0: 00f42400 .word 0x00f42400 + 80050b4: 007a1200 .word 0x007a1200 + 80050b8: 4b3d ldr r3, [pc, #244] @ (80051b0 ) + 80050ba: 685b ldr r3, [r3, #4] + 80050bc: 099b lsrs r3, r3, #6 + 80050be: 2200 movs r2, #0 + 80050c0: 4618 mov r0, r3 + 80050c2: 4611 mov r1, r2 + 80050c4: f3c0 0308 ubfx r3, r0, #0, #9 + 80050c8: 653b str r3, [r7, #80] @ 0x50 + 80050ca: 2300 movs r3, #0 + 80050cc: 657b str r3, [r7, #84] @ 0x54 + 80050ce: e9d7 8914 ldrd r8, r9, [r7, #80] @ 0x50 + 80050d2: 4642 mov r2, r8 + 80050d4: 464b mov r3, r9 + 80050d6: f04f 0000 mov.w r0, #0 + 80050da: f04f 0100 mov.w r1, #0 + 80050de: 0159 lsls r1, r3, #5 + 80050e0: ea41 61d2 orr.w r1, r1, r2, lsr #27 + 80050e4: 0150 lsls r0, r2, #5 + 80050e6: 4602 mov r2, r0 + 80050e8: 460b mov r3, r1 + 80050ea: 4641 mov r1, r8 + 80050ec: 1a51 subs r1, r2, r1 + 80050ee: 60b9 str r1, [r7, #8] + 80050f0: 4649 mov r1, r9 + 80050f2: eb63 0301 sbc.w r3, r3, r1 + 80050f6: 60fb str r3, [r7, #12] + 80050f8: f04f 0200 mov.w r2, #0 + 80050fc: f04f 0300 mov.w r3, #0 + 8005100: e9d7 ab02 ldrd sl, fp, [r7, #8] + 8005104: 4659 mov r1, fp + 8005106: 018b lsls r3, r1, #6 + 8005108: 4651 mov r1, sl + 800510a: ea43 6391 orr.w r3, r3, r1, lsr #26 + 800510e: 4651 mov r1, sl + 8005110: 018a lsls r2, r1, #6 + 8005112: 4651 mov r1, sl + 8005114: 1a54 subs r4, r2, r1 + 8005116: 4659 mov r1, fp + 8005118: eb63 0501 sbc.w r5, r3, r1 + 800511c: f04f 0200 mov.w r2, #0 + 8005120: f04f 0300 mov.w r3, #0 + 8005124: 00eb lsls r3, r5, #3 + 8005126: ea43 7354 orr.w r3, r3, r4, lsr #29 + 800512a: 00e2 lsls r2, r4, #3 + 800512c: 4614 mov r4, r2 + 800512e: 461d mov r5, r3 + 8005130: 4643 mov r3, r8 + 8005132: 18e3 adds r3, r4, r3 + 8005134: 603b str r3, [r7, #0] + 8005136: 464b mov r3, r9 + 8005138: eb45 0303 adc.w r3, r5, r3 + 800513c: 607b str r3, [r7, #4] + 800513e: f04f 0200 mov.w r2, #0 + 8005142: f04f 0300 mov.w r3, #0 + 8005146: e9d7 4500 ldrd r4, r5, [r7] + 800514a: 4629 mov r1, r5 + 800514c: 028b lsls r3, r1, #10 + 800514e: 4621 mov r1, r4 + 8005150: ea43 5391 orr.w r3, r3, r1, lsr #22 + 8005154: 4621 mov r1, r4 + 8005156: 028a lsls r2, r1, #10 + 8005158: 4610 mov r0, r2 + 800515a: 4619 mov r1, r3 + 800515c: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac + 8005160: 2200 movs r2, #0 + 8005162: 64bb str r3, [r7, #72] @ 0x48 + 8005164: 64fa str r2, [r7, #76] @ 0x4c + 8005166: e9d7 2312 ldrd r2, r3, [r7, #72] @ 0x48 + 800516a: f7fb f84b bl 8000204 <__aeabi_uldivmod> + 800516e: 4602 mov r2, r0 + 8005170: 460b mov r3, r1 + 8005172: 4613 mov r3, r2 + 8005174: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 8005178: 4b0d ldr r3, [pc, #52] @ (80051b0 ) + 800517a: 685b ldr r3, [r3, #4] + 800517c: 0f1b lsrs r3, r3, #28 + 800517e: f003 0307 and.w r3, r3, #7 + 8005182: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4 + 8005186: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4 + 800518a: f8d7 30a4 ldr.w r3, [r7, #164] @ 0xa4 + 800518e: fbb2 f3f3 udiv r3, r2, r3 + 8005192: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 8005196: e003 b.n 80051a0 + 8005198: 4b06 ldr r3, [pc, #24] @ (80051b4 ) + 800519a: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 800519e: bf00 nop + 80051a0: f8d7 30b0 ldr.w r3, [r7, #176] @ 0xb0 + 80051a4: 4618 mov r0, r3 + 80051a6: 37b8 adds r7, #184 @ 0xb8 + 80051a8: 46bd mov sp, r7 + 80051aa: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} + 80051ae: bf00 nop + 80051b0: 40023800 .word 0x40023800 + 80051b4: 00f42400 .word 0x00f42400 + +080051b8 : + 80051b8: b580 push {r7, lr} + 80051ba: b086 sub sp, #24 + 80051bc: af00 add r7, sp, #0 + 80051be: 6078 str r0, [r7, #4] + 80051c0: 687b ldr r3, [r7, #4] + 80051c2: 2b00 cmp r3, #0 + 80051c4: d101 bne.n 80051ca + 80051c6: 2301 movs r3, #1 + 80051c8: e28d b.n 80056e6 + 80051ca: 687b ldr r3, [r7, #4] + 80051cc: 681b ldr r3, [r3, #0] + 80051ce: f003 0301 and.w r3, r3, #1 + 80051d2: 2b00 cmp r3, #0 + 80051d4: f000 8083 beq.w 80052de + 80051d8: 4b94 ldr r3, [pc, #592] @ (800542c ) + 80051da: 689b ldr r3, [r3, #8] + 80051dc: f003 030c and.w r3, r3, #12 + 80051e0: 2b04 cmp r3, #4 + 80051e2: d019 beq.n 8005218 + 80051e4: 4b91 ldr r3, [pc, #580] @ (800542c ) + 80051e6: 689b ldr r3, [r3, #8] + 80051e8: f003 030c and.w r3, r3, #12 + 80051ec: 2b08 cmp r3, #8 + 80051ee: d106 bne.n 80051fe + 80051f0: 4b8e ldr r3, [pc, #568] @ (800542c ) + 80051f2: 685b ldr r3, [r3, #4] + 80051f4: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 80051f8: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 + 80051fc: d00c beq.n 8005218 + 80051fe: 4b8b ldr r3, [pc, #556] @ (800542c ) + 8005200: 689b ldr r3, [r3, #8] + 8005202: f003 030c and.w r3, r3, #12 + 8005206: 2b0c cmp r3, #12 + 8005208: d112 bne.n 8005230 + 800520a: 4b88 ldr r3, [pc, #544] @ (800542c ) + 800520c: 685b ldr r3, [r3, #4] + 800520e: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 8005212: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 + 8005216: d10b bne.n 8005230 + 8005218: 4b84 ldr r3, [pc, #528] @ (800542c ) + 800521a: 681b ldr r3, [r3, #0] + 800521c: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 8005220: 2b00 cmp r3, #0 + 8005222: d05b beq.n 80052dc + 8005224: 687b ldr r3, [r7, #4] + 8005226: 685b ldr r3, [r3, #4] + 8005228: 2b00 cmp r3, #0 + 800522a: d157 bne.n 80052dc + 800522c: 2301 movs r3, #1 + 800522e: e25a b.n 80056e6 + 8005230: 687b ldr r3, [r7, #4] + 8005232: 685b ldr r3, [r3, #4] + 8005234: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 8005238: d106 bne.n 8005248 + 800523a: 4b7c ldr r3, [pc, #496] @ (800542c ) + 800523c: 681b ldr r3, [r3, #0] + 800523e: 4a7b ldr r2, [pc, #492] @ (800542c ) + 8005240: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 8005244: 6013 str r3, [r2, #0] + 8005246: e01d b.n 8005284 + 8005248: 687b ldr r3, [r7, #4] + 800524a: 685b ldr r3, [r3, #4] + 800524c: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000 + 8005250: d10c bne.n 800526c + 8005252: 4b76 ldr r3, [pc, #472] @ (800542c ) + 8005254: 681b ldr r3, [r3, #0] + 8005256: 4a75 ldr r2, [pc, #468] @ (800542c ) + 8005258: f443 2380 orr.w r3, r3, #262144 @ 0x40000 + 800525c: 6013 str r3, [r2, #0] + 800525e: 4b73 ldr r3, [pc, #460] @ (800542c ) + 8005260: 681b ldr r3, [r3, #0] + 8005262: 4a72 ldr r2, [pc, #456] @ (800542c ) + 8005264: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 8005268: 6013 str r3, [r2, #0] + 800526a: e00b b.n 8005284 + 800526c: 4b6f ldr r3, [pc, #444] @ (800542c ) + 800526e: 681b ldr r3, [r3, #0] + 8005270: 4a6e ldr r2, [pc, #440] @ (800542c ) + 8005272: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 8005276: 6013 str r3, [r2, #0] + 8005278: 4b6c ldr r3, [pc, #432] @ (800542c ) + 800527a: 681b ldr r3, [r3, #0] + 800527c: 4a6b ldr r2, [pc, #428] @ (800542c ) + 800527e: f423 2380 bic.w r3, r3, #262144 @ 0x40000 + 8005282: 6013 str r3, [r2, #0] + 8005284: 687b ldr r3, [r7, #4] + 8005286: 685b ldr r3, [r3, #4] + 8005288: 2b00 cmp r3, #0 + 800528a: d013 beq.n 80052b4 + 800528c: f7fc fe4c bl 8001f28 + 8005290: 6138 str r0, [r7, #16] + 8005292: e008 b.n 80052a6 + 8005294: f7fc fe48 bl 8001f28 + 8005298: 4602 mov r2, r0 + 800529a: 693b ldr r3, [r7, #16] + 800529c: 1ad3 subs r3, r2, r3 + 800529e: 2b64 cmp r3, #100 @ 0x64 + 80052a0: d901 bls.n 80052a6 + 80052a2: 2303 movs r3, #3 + 80052a4: e21f b.n 80056e6 + 80052a6: 4b61 ldr r3, [pc, #388] @ (800542c ) + 80052a8: 681b ldr r3, [r3, #0] + 80052aa: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 80052ae: 2b00 cmp r3, #0 + 80052b0: d0f0 beq.n 8005294 + 80052b2: e014 b.n 80052de + 80052b4: f7fc fe38 bl 8001f28 + 80052b8: 6138 str r0, [r7, #16] + 80052ba: e008 b.n 80052ce + 80052bc: f7fc fe34 bl 8001f28 + 80052c0: 4602 mov r2, r0 + 80052c2: 693b ldr r3, [r7, #16] + 80052c4: 1ad3 subs r3, r2, r3 + 80052c6: 2b64 cmp r3, #100 @ 0x64 + 80052c8: d901 bls.n 80052ce + 80052ca: 2303 movs r3, #3 + 80052cc: e20b b.n 80056e6 + 80052ce: 4b57 ldr r3, [pc, #348] @ (800542c ) + 80052d0: 681b ldr r3, [r3, #0] + 80052d2: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 80052d6: 2b00 cmp r3, #0 + 80052d8: d1f0 bne.n 80052bc + 80052da: e000 b.n 80052de + 80052dc: bf00 nop + 80052de: 687b ldr r3, [r7, #4] + 80052e0: 681b ldr r3, [r3, #0] + 80052e2: f003 0302 and.w r3, r3, #2 + 80052e6: 2b00 cmp r3, #0 + 80052e8: d06f beq.n 80053ca + 80052ea: 4b50 ldr r3, [pc, #320] @ (800542c ) + 80052ec: 689b ldr r3, [r3, #8] + 80052ee: f003 030c and.w r3, r3, #12 + 80052f2: 2b00 cmp r3, #0 + 80052f4: d017 beq.n 8005326 + 80052f6: 4b4d ldr r3, [pc, #308] @ (800542c ) + 80052f8: 689b ldr r3, [r3, #8] + 80052fa: f003 030c and.w r3, r3, #12 + 80052fe: 2b08 cmp r3, #8 + 8005300: d105 bne.n 800530e + 8005302: 4b4a ldr r3, [pc, #296] @ (800542c ) + 8005304: 685b ldr r3, [r3, #4] + 8005306: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 800530a: 2b00 cmp r3, #0 + 800530c: d00b beq.n 8005326 + 800530e: 4b47 ldr r3, [pc, #284] @ (800542c ) + 8005310: 689b ldr r3, [r3, #8] + 8005312: f003 030c and.w r3, r3, #12 + 8005316: 2b0c cmp r3, #12 + 8005318: d11c bne.n 8005354 + 800531a: 4b44 ldr r3, [pc, #272] @ (800542c ) + 800531c: 685b ldr r3, [r3, #4] + 800531e: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 8005322: 2b00 cmp r3, #0 + 8005324: d116 bne.n 8005354 + 8005326: 4b41 ldr r3, [pc, #260] @ (800542c ) + 8005328: 681b ldr r3, [r3, #0] + 800532a: f003 0302 and.w r3, r3, #2 + 800532e: 2b00 cmp r3, #0 + 8005330: d005 beq.n 800533e + 8005332: 687b ldr r3, [r7, #4] + 8005334: 68db ldr r3, [r3, #12] + 8005336: 2b01 cmp r3, #1 + 8005338: d001 beq.n 800533e + 800533a: 2301 movs r3, #1 + 800533c: e1d3 b.n 80056e6 + 800533e: 4b3b ldr r3, [pc, #236] @ (800542c ) + 8005340: 681b ldr r3, [r3, #0] + 8005342: f023 02f8 bic.w r2, r3, #248 @ 0xf8 + 8005346: 687b ldr r3, [r7, #4] + 8005348: 691b ldr r3, [r3, #16] + 800534a: 00db lsls r3, r3, #3 + 800534c: 4937 ldr r1, [pc, #220] @ (800542c ) + 800534e: 4313 orrs r3, r2 + 8005350: 600b str r3, [r1, #0] + 8005352: e03a b.n 80053ca + 8005354: 687b ldr r3, [r7, #4] + 8005356: 68db ldr r3, [r3, #12] + 8005358: 2b00 cmp r3, #0 + 800535a: d020 beq.n 800539e + 800535c: 4b34 ldr r3, [pc, #208] @ (8005430 ) + 800535e: 2201 movs r2, #1 + 8005360: 601a str r2, [r3, #0] + 8005362: f7fc fde1 bl 8001f28 + 8005366: 6138 str r0, [r7, #16] + 8005368: e008 b.n 800537c + 800536a: f7fc fddd bl 8001f28 + 800536e: 4602 mov r2, r0 + 8005370: 693b ldr r3, [r7, #16] + 8005372: 1ad3 subs r3, r2, r3 + 8005374: 2b02 cmp r3, #2 + 8005376: d901 bls.n 800537c + 8005378: 2303 movs r3, #3 + 800537a: e1b4 b.n 80056e6 + 800537c: 4b2b ldr r3, [pc, #172] @ (800542c ) + 800537e: 681b ldr r3, [r3, #0] + 8005380: f003 0302 and.w r3, r3, #2 + 8005384: 2b00 cmp r3, #0 + 8005386: d0f0 beq.n 800536a + 8005388: 4b28 ldr r3, [pc, #160] @ (800542c ) + 800538a: 681b ldr r3, [r3, #0] + 800538c: f023 02f8 bic.w r2, r3, #248 @ 0xf8 + 8005390: 687b ldr r3, [r7, #4] + 8005392: 691b ldr r3, [r3, #16] + 8005394: 00db lsls r3, r3, #3 + 8005396: 4925 ldr r1, [pc, #148] @ (800542c ) + 8005398: 4313 orrs r3, r2 + 800539a: 600b str r3, [r1, #0] + 800539c: e015 b.n 80053ca + 800539e: 4b24 ldr r3, [pc, #144] @ (8005430 ) + 80053a0: 2200 movs r2, #0 + 80053a2: 601a str r2, [r3, #0] + 80053a4: f7fc fdc0 bl 8001f28 + 80053a8: 6138 str r0, [r7, #16] + 80053aa: e008 b.n 80053be + 80053ac: f7fc fdbc bl 8001f28 + 80053b0: 4602 mov r2, r0 + 80053b2: 693b ldr r3, [r7, #16] + 80053b4: 1ad3 subs r3, r2, r3 + 80053b6: 2b02 cmp r3, #2 + 80053b8: d901 bls.n 80053be + 80053ba: 2303 movs r3, #3 + 80053bc: e193 b.n 80056e6 + 80053be: 4b1b ldr r3, [pc, #108] @ (800542c ) + 80053c0: 681b ldr r3, [r3, #0] + 80053c2: f003 0302 and.w r3, r3, #2 + 80053c6: 2b00 cmp r3, #0 + 80053c8: d1f0 bne.n 80053ac + 80053ca: 687b ldr r3, [r7, #4] + 80053cc: 681b ldr r3, [r3, #0] + 80053ce: f003 0308 and.w r3, r3, #8 + 80053d2: 2b00 cmp r3, #0 + 80053d4: d036 beq.n 8005444 + 80053d6: 687b ldr r3, [r7, #4] + 80053d8: 695b ldr r3, [r3, #20] + 80053da: 2b00 cmp r3, #0 + 80053dc: d016 beq.n 800540c + 80053de: 4b15 ldr r3, [pc, #84] @ (8005434 ) + 80053e0: 2201 movs r2, #1 + 80053e2: 601a str r2, [r3, #0] + 80053e4: f7fc fda0 bl 8001f28 + 80053e8: 6138 str r0, [r7, #16] + 80053ea: e008 b.n 80053fe + 80053ec: f7fc fd9c bl 8001f28 + 80053f0: 4602 mov r2, r0 + 80053f2: 693b ldr r3, [r7, #16] + 80053f4: 1ad3 subs r3, r2, r3 + 80053f6: 2b02 cmp r3, #2 + 80053f8: d901 bls.n 80053fe + 80053fa: 2303 movs r3, #3 + 80053fc: e173 b.n 80056e6 + 80053fe: 4b0b ldr r3, [pc, #44] @ (800542c ) + 8005400: 6f5b ldr r3, [r3, #116] @ 0x74 + 8005402: f003 0302 and.w r3, r3, #2 + 8005406: 2b00 cmp r3, #0 + 8005408: d0f0 beq.n 80053ec + 800540a: e01b b.n 8005444 + 800540c: 4b09 ldr r3, [pc, #36] @ (8005434 ) + 800540e: 2200 movs r2, #0 + 8005410: 601a str r2, [r3, #0] + 8005412: f7fc fd89 bl 8001f28 + 8005416: 6138 str r0, [r7, #16] + 8005418: e00e b.n 8005438 + 800541a: f7fc fd85 bl 8001f28 + 800541e: 4602 mov r2, r0 + 8005420: 693b ldr r3, [r7, #16] + 8005422: 1ad3 subs r3, r2, r3 + 8005424: 2b02 cmp r3, #2 + 8005426: d907 bls.n 8005438 + 8005428: 2303 movs r3, #3 + 800542a: e15c b.n 80056e6 + 800542c: 40023800 .word 0x40023800 + 8005430: 42470000 .word 0x42470000 + 8005434: 42470e80 .word 0x42470e80 + 8005438: 4b8a ldr r3, [pc, #552] @ (8005664 ) + 800543a: 6f5b ldr r3, [r3, #116] @ 0x74 + 800543c: f003 0302 and.w r3, r3, #2 + 8005440: 2b00 cmp r3, #0 + 8005442: d1ea bne.n 800541a + 8005444: 687b ldr r3, [r7, #4] + 8005446: 681b ldr r3, [r3, #0] + 8005448: f003 0304 and.w r3, r3, #4 + 800544c: 2b00 cmp r3, #0 + 800544e: f000 8097 beq.w 8005580 + 8005452: 2300 movs r3, #0 + 8005454: 75fb strb r3, [r7, #23] + 8005456: 4b83 ldr r3, [pc, #524] @ (8005664 ) + 8005458: 6c1b ldr r3, [r3, #64] @ 0x40 + 800545a: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800545e: 2b00 cmp r3, #0 + 8005460: d10f bne.n 8005482 + 8005462: 2300 movs r3, #0 + 8005464: 60bb str r3, [r7, #8] + 8005466: 4b7f ldr r3, [pc, #508] @ (8005664 ) + 8005468: 6c1b ldr r3, [r3, #64] @ 0x40 + 800546a: 4a7e ldr r2, [pc, #504] @ (8005664 ) + 800546c: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8005470: 6413 str r3, [r2, #64] @ 0x40 + 8005472: 4b7c ldr r3, [pc, #496] @ (8005664 ) + 8005474: 6c1b ldr r3, [r3, #64] @ 0x40 + 8005476: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800547a: 60bb str r3, [r7, #8] + 800547c: 68bb ldr r3, [r7, #8] + 800547e: 2301 movs r3, #1 + 8005480: 75fb strb r3, [r7, #23] + 8005482: 4b79 ldr r3, [pc, #484] @ (8005668 ) + 8005484: 681b ldr r3, [r3, #0] + 8005486: f403 7380 and.w r3, r3, #256 @ 0x100 + 800548a: 2b00 cmp r3, #0 + 800548c: d118 bne.n 80054c0 + 800548e: 4b76 ldr r3, [pc, #472] @ (8005668 ) + 8005490: 681b ldr r3, [r3, #0] + 8005492: 4a75 ldr r2, [pc, #468] @ (8005668 ) + 8005494: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8005498: 6013 str r3, [r2, #0] + 800549a: f7fc fd45 bl 8001f28 + 800549e: 6138 str r0, [r7, #16] + 80054a0: e008 b.n 80054b4 + 80054a2: f7fc fd41 bl 8001f28 + 80054a6: 4602 mov r2, r0 + 80054a8: 693b ldr r3, [r7, #16] + 80054aa: 1ad3 subs r3, r2, r3 + 80054ac: 2b02 cmp r3, #2 + 80054ae: d901 bls.n 80054b4 + 80054b0: 2303 movs r3, #3 + 80054b2: e118 b.n 80056e6 + 80054b4: 4b6c ldr r3, [pc, #432] @ (8005668 ) + 80054b6: 681b ldr r3, [r3, #0] + 80054b8: f403 7380 and.w r3, r3, #256 @ 0x100 + 80054bc: 2b00 cmp r3, #0 + 80054be: d0f0 beq.n 80054a2 + 80054c0: 687b ldr r3, [r7, #4] + 80054c2: 689b ldr r3, [r3, #8] + 80054c4: 2b01 cmp r3, #1 + 80054c6: d106 bne.n 80054d6 + 80054c8: 4b66 ldr r3, [pc, #408] @ (8005664 ) + 80054ca: 6f1b ldr r3, [r3, #112] @ 0x70 + 80054cc: 4a65 ldr r2, [pc, #404] @ (8005664 ) + 80054ce: f043 0301 orr.w r3, r3, #1 + 80054d2: 6713 str r3, [r2, #112] @ 0x70 + 80054d4: e01c b.n 8005510 + 80054d6: 687b ldr r3, [r7, #4] + 80054d8: 689b ldr r3, [r3, #8] + 80054da: 2b05 cmp r3, #5 + 80054dc: d10c bne.n 80054f8 + 80054de: 4b61 ldr r3, [pc, #388] @ (8005664 ) + 80054e0: 6f1b ldr r3, [r3, #112] @ 0x70 + 80054e2: 4a60 ldr r2, [pc, #384] @ (8005664 ) + 80054e4: f043 0304 orr.w r3, r3, #4 + 80054e8: 6713 str r3, [r2, #112] @ 0x70 + 80054ea: 4b5e ldr r3, [pc, #376] @ (8005664 ) + 80054ec: 6f1b ldr r3, [r3, #112] @ 0x70 + 80054ee: 4a5d ldr r2, [pc, #372] @ (8005664 ) + 80054f0: f043 0301 orr.w r3, r3, #1 + 80054f4: 6713 str r3, [r2, #112] @ 0x70 + 80054f6: e00b b.n 8005510 + 80054f8: 4b5a ldr r3, [pc, #360] @ (8005664 ) + 80054fa: 6f1b ldr r3, [r3, #112] @ 0x70 + 80054fc: 4a59 ldr r2, [pc, #356] @ (8005664 ) + 80054fe: f023 0301 bic.w r3, r3, #1 + 8005502: 6713 str r3, [r2, #112] @ 0x70 + 8005504: 4b57 ldr r3, [pc, #348] @ (8005664 ) + 8005506: 6f1b ldr r3, [r3, #112] @ 0x70 + 8005508: 4a56 ldr r2, [pc, #344] @ (8005664 ) + 800550a: f023 0304 bic.w r3, r3, #4 + 800550e: 6713 str r3, [r2, #112] @ 0x70 + 8005510: 687b ldr r3, [r7, #4] + 8005512: 689b ldr r3, [r3, #8] + 8005514: 2b00 cmp r3, #0 + 8005516: d015 beq.n 8005544 + 8005518: f7fc fd06 bl 8001f28 + 800551c: 6138 str r0, [r7, #16] + 800551e: e00a b.n 8005536 + 8005520: f7fc fd02 bl 8001f28 + 8005524: 4602 mov r2, r0 + 8005526: 693b ldr r3, [r7, #16] + 8005528: 1ad3 subs r3, r2, r3 + 800552a: f241 3288 movw r2, #5000 @ 0x1388 + 800552e: 4293 cmp r3, r2 + 8005530: d901 bls.n 8005536 + 8005532: 2303 movs r3, #3 + 8005534: e0d7 b.n 80056e6 + 8005536: 4b4b ldr r3, [pc, #300] @ (8005664 ) + 8005538: 6f1b ldr r3, [r3, #112] @ 0x70 + 800553a: f003 0302 and.w r3, r3, #2 + 800553e: 2b00 cmp r3, #0 + 8005540: d0ee beq.n 8005520 + 8005542: e014 b.n 800556e + 8005544: f7fc fcf0 bl 8001f28 + 8005548: 6138 str r0, [r7, #16] + 800554a: e00a b.n 8005562 + 800554c: f7fc fcec bl 8001f28 + 8005550: 4602 mov r2, r0 + 8005552: 693b ldr r3, [r7, #16] + 8005554: 1ad3 subs r3, r2, r3 + 8005556: f241 3288 movw r2, #5000 @ 0x1388 + 800555a: 4293 cmp r3, r2 + 800555c: d901 bls.n 8005562 + 800555e: 2303 movs r3, #3 + 8005560: e0c1 b.n 80056e6 + 8005562: 4b40 ldr r3, [pc, #256] @ (8005664 ) + 8005564: 6f1b ldr r3, [r3, #112] @ 0x70 + 8005566: f003 0302 and.w r3, r3, #2 + 800556a: 2b00 cmp r3, #0 + 800556c: d1ee bne.n 800554c + 800556e: 7dfb ldrb r3, [r7, #23] + 8005570: 2b01 cmp r3, #1 + 8005572: d105 bne.n 8005580 + 8005574: 4b3b ldr r3, [pc, #236] @ (8005664 ) + 8005576: 6c1b ldr r3, [r3, #64] @ 0x40 + 8005578: 4a3a ldr r2, [pc, #232] @ (8005664 ) + 800557a: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 + 800557e: 6413 str r3, [r2, #64] @ 0x40 + 8005580: 687b ldr r3, [r7, #4] + 8005582: 699b ldr r3, [r3, #24] + 8005584: 2b00 cmp r3, #0 + 8005586: f000 80ad beq.w 80056e4 + 800558a: 4b36 ldr r3, [pc, #216] @ (8005664 ) + 800558c: 689b ldr r3, [r3, #8] + 800558e: f003 030c and.w r3, r3, #12 + 8005592: 2b08 cmp r3, #8 + 8005594: d060 beq.n 8005658 + 8005596: 687b ldr r3, [r7, #4] + 8005598: 699b ldr r3, [r3, #24] + 800559a: 2b02 cmp r3, #2 + 800559c: d145 bne.n 800562a + 800559e: 4b33 ldr r3, [pc, #204] @ (800566c ) + 80055a0: 2200 movs r2, #0 + 80055a2: 601a str r2, [r3, #0] + 80055a4: f7fc fcc0 bl 8001f28 + 80055a8: 6138 str r0, [r7, #16] + 80055aa: e008 b.n 80055be + 80055ac: f7fc fcbc bl 8001f28 + 80055b0: 4602 mov r2, r0 + 80055b2: 693b ldr r3, [r7, #16] + 80055b4: 1ad3 subs r3, r2, r3 + 80055b6: 2b02 cmp r3, #2 + 80055b8: d901 bls.n 80055be + 80055ba: 2303 movs r3, #3 + 80055bc: e093 b.n 80056e6 + 80055be: 4b29 ldr r3, [pc, #164] @ (8005664 ) + 80055c0: 681b ldr r3, [r3, #0] + 80055c2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 80055c6: 2b00 cmp r3, #0 + 80055c8: d1f0 bne.n 80055ac + 80055ca: 687b ldr r3, [r7, #4] + 80055cc: 69da ldr r2, [r3, #28] + 80055ce: 687b ldr r3, [r7, #4] + 80055d0: 6a1b ldr r3, [r3, #32] + 80055d2: 431a orrs r2, r3 + 80055d4: 687b ldr r3, [r7, #4] + 80055d6: 6a5b ldr r3, [r3, #36] @ 0x24 + 80055d8: 019b lsls r3, r3, #6 + 80055da: 431a orrs r2, r3 + 80055dc: 687b ldr r3, [r7, #4] + 80055de: 6a9b ldr r3, [r3, #40] @ 0x28 + 80055e0: 085b lsrs r3, r3, #1 + 80055e2: 3b01 subs r3, #1 + 80055e4: 041b lsls r3, r3, #16 + 80055e6: 431a orrs r2, r3 + 80055e8: 687b ldr r3, [r7, #4] + 80055ea: 6adb ldr r3, [r3, #44] @ 0x2c + 80055ec: 061b lsls r3, r3, #24 + 80055ee: 431a orrs r2, r3 + 80055f0: 687b ldr r3, [r7, #4] + 80055f2: 6b1b ldr r3, [r3, #48] @ 0x30 + 80055f4: 071b lsls r3, r3, #28 + 80055f6: 491b ldr r1, [pc, #108] @ (8005664 ) + 80055f8: 4313 orrs r3, r2 + 80055fa: 604b str r3, [r1, #4] + 80055fc: 4b1b ldr r3, [pc, #108] @ (800566c ) + 80055fe: 2201 movs r2, #1 + 8005600: 601a str r2, [r3, #0] + 8005602: f7fc fc91 bl 8001f28 + 8005606: 6138 str r0, [r7, #16] + 8005608: e008 b.n 800561c + 800560a: f7fc fc8d bl 8001f28 + 800560e: 4602 mov r2, r0 + 8005610: 693b ldr r3, [r7, #16] + 8005612: 1ad3 subs r3, r2, r3 + 8005614: 2b02 cmp r3, #2 + 8005616: d901 bls.n 800561c + 8005618: 2303 movs r3, #3 + 800561a: e064 b.n 80056e6 + 800561c: 4b11 ldr r3, [pc, #68] @ (8005664 ) + 800561e: 681b ldr r3, [r3, #0] + 8005620: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 8005624: 2b00 cmp r3, #0 + 8005626: d0f0 beq.n 800560a + 8005628: e05c b.n 80056e4 + 800562a: 4b10 ldr r3, [pc, #64] @ (800566c ) + 800562c: 2200 movs r2, #0 + 800562e: 601a str r2, [r3, #0] + 8005630: f7fc fc7a bl 8001f28 + 8005634: 6138 str r0, [r7, #16] + 8005636: e008 b.n 800564a + 8005638: f7fc fc76 bl 8001f28 + 800563c: 4602 mov r2, r0 + 800563e: 693b ldr r3, [r7, #16] + 8005640: 1ad3 subs r3, r2, r3 + 8005642: 2b02 cmp r3, #2 + 8005644: d901 bls.n 800564a + 8005646: 2303 movs r3, #3 + 8005648: e04d b.n 80056e6 + 800564a: 4b06 ldr r3, [pc, #24] @ (8005664 ) + 800564c: 681b ldr r3, [r3, #0] + 800564e: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 8005652: 2b00 cmp r3, #0 + 8005654: d1f0 bne.n 8005638 + 8005656: e045 b.n 80056e4 + 8005658: 687b ldr r3, [r7, #4] + 800565a: 699b ldr r3, [r3, #24] + 800565c: 2b01 cmp r3, #1 + 800565e: d107 bne.n 8005670 + 8005660: 2301 movs r3, #1 + 8005662: e040 b.n 80056e6 + 8005664: 40023800 .word 0x40023800 + 8005668: 40007000 .word 0x40007000 + 800566c: 42470060 .word 0x42470060 + 8005670: 4b1f ldr r3, [pc, #124] @ (80056f0 ) + 8005672: 685b ldr r3, [r3, #4] + 8005674: 60fb str r3, [r7, #12] + 8005676: 687b ldr r3, [r7, #4] + 8005678: 699b ldr r3, [r3, #24] + 800567a: 2b01 cmp r3, #1 + 800567c: d030 beq.n 80056e0 + 800567e: 68fb ldr r3, [r7, #12] + 8005680: f403 0280 and.w r2, r3, #4194304 @ 0x400000 + 8005684: 687b ldr r3, [r7, #4] + 8005686: 69db ldr r3, [r3, #28] + 8005688: 429a cmp r2, r3 + 800568a: d129 bne.n 80056e0 + 800568c: 68fb ldr r3, [r7, #12] + 800568e: f003 023f and.w r2, r3, #63 @ 0x3f + 8005692: 687b ldr r3, [r7, #4] + 8005694: 6a1b ldr r3, [r3, #32] + 8005696: 429a cmp r2, r3 + 8005698: d122 bne.n 80056e0 + 800569a: 68fa ldr r2, [r7, #12] + 800569c: f647 73c0 movw r3, #32704 @ 0x7fc0 + 80056a0: 4013 ands r3, r2 + 80056a2: 687a ldr r2, [r7, #4] + 80056a4: 6a52 ldr r2, [r2, #36] @ 0x24 + 80056a6: 0192 lsls r2, r2, #6 + 80056a8: 4293 cmp r3, r2 + 80056aa: d119 bne.n 80056e0 + 80056ac: 68fb ldr r3, [r7, #12] + 80056ae: f403 3240 and.w r2, r3, #196608 @ 0x30000 + 80056b2: 687b ldr r3, [r7, #4] + 80056b4: 6a9b ldr r3, [r3, #40] @ 0x28 + 80056b6: 085b lsrs r3, r3, #1 + 80056b8: 3b01 subs r3, #1 + 80056ba: 041b lsls r3, r3, #16 + 80056bc: 429a cmp r2, r3 + 80056be: d10f bne.n 80056e0 + 80056c0: 68fb ldr r3, [r7, #12] + 80056c2: f003 6270 and.w r2, r3, #251658240 @ 0xf000000 + 80056c6: 687b ldr r3, [r7, #4] + 80056c8: 6adb ldr r3, [r3, #44] @ 0x2c + 80056ca: 061b lsls r3, r3, #24 + 80056cc: 429a cmp r2, r3 + 80056ce: d107 bne.n 80056e0 + 80056d0: 68fb ldr r3, [r7, #12] + 80056d2: f003 42e0 and.w r2, r3, #1879048192 @ 0x70000000 + 80056d6: 687b ldr r3, [r7, #4] + 80056d8: 6b1b ldr r3, [r3, #48] @ 0x30 + 80056da: 071b lsls r3, r3, #28 + 80056dc: 429a cmp r2, r3 + 80056de: d001 beq.n 80056e4 + 80056e0: 2301 movs r3, #1 + 80056e2: e000 b.n 80056e6 + 80056e4: 2300 movs r3, #0 + 80056e6: 4618 mov r0, r3 + 80056e8: 3718 adds r7, #24 + 80056ea: 46bd mov sp, r7 + 80056ec: bd80 pop {r7, pc} + 80056ee: bf00 nop + 80056f0: 40023800 .word 0x40023800 + +080056f4 : + 80056f4: b580 push {r7, lr} + 80056f6: b082 sub sp, #8 + 80056f8: af00 add r7, sp, #0 + 80056fa: 6078 str r0, [r7, #4] + 80056fc: 687b ldr r3, [r7, #4] + 80056fe: 2b00 cmp r3, #0 + 8005700: d101 bne.n 8005706 + 8005702: 2301 movs r3, #1 + 8005704: e041 b.n 800578a + 8005706: 687b ldr r3, [r7, #4] + 8005708: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 800570c: b2db uxtb r3, r3 + 800570e: 2b00 cmp r3, #0 + 8005710: d106 bne.n 8005720 + 8005712: 687b ldr r3, [r7, #4] + 8005714: 2200 movs r2, #0 + 8005716: f883 203c strb.w r2, [r3, #60] @ 0x3c + 800571a: 6878 ldr r0, [r7, #4] + 800571c: f7fb ff6a bl 80015f4 + 8005720: 687b ldr r3, [r7, #4] + 8005722: 2202 movs r2, #2 + 8005724: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8005728: 687b ldr r3, [r7, #4] + 800572a: 681a ldr r2, [r3, #0] + 800572c: 687b ldr r3, [r7, #4] + 800572e: 3304 adds r3, #4 + 8005730: 4619 mov r1, r3 + 8005732: 4610 mov r0, r2 + 8005734: f000 fba0 bl 8005e78 + 8005738: 687b ldr r3, [r7, #4] + 800573a: 2201 movs r2, #1 + 800573c: f883 2046 strb.w r2, [r3, #70] @ 0x46 + 8005740: 687b ldr r3, [r7, #4] + 8005742: 2201 movs r2, #1 + 8005744: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8005748: 687b ldr r3, [r7, #4] + 800574a: 2201 movs r2, #1 + 800574c: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8005750: 687b ldr r3, [r7, #4] + 8005752: 2201 movs r2, #1 + 8005754: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 8005758: 687b ldr r3, [r7, #4] + 800575a: 2201 movs r2, #1 + 800575c: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 8005760: 687b ldr r3, [r7, #4] + 8005762: 2201 movs r2, #1 + 8005764: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8005768: 687b ldr r3, [r7, #4] + 800576a: 2201 movs r2, #1 + 800576c: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8005770: 687b ldr r3, [r7, #4] + 8005772: 2201 movs r2, #1 + 8005774: f883 2044 strb.w r2, [r3, #68] @ 0x44 + 8005778: 687b ldr r3, [r7, #4] + 800577a: 2201 movs r2, #1 + 800577c: f883 2045 strb.w r2, [r3, #69] @ 0x45 + 8005780: 687b ldr r3, [r7, #4] + 8005782: 2201 movs r2, #1 + 8005784: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8005788: 2300 movs r3, #0 + 800578a: 4618 mov r0, r3 + 800578c: 3708 adds r7, #8 + 800578e: 46bd mov sp, r7 + 8005790: bd80 pop {r7, pc} + +08005792 : + 8005792: b580 push {r7, lr} + 8005794: b082 sub sp, #8 + 8005796: af00 add r7, sp, #0 + 8005798: 6078 str r0, [r7, #4] + 800579a: 687b ldr r3, [r7, #4] + 800579c: 2b00 cmp r3, #0 + 800579e: d101 bne.n 80057a4 + 80057a0: 2301 movs r3, #1 + 80057a2: e041 b.n 8005828 + 80057a4: 687b ldr r3, [r7, #4] + 80057a6: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 80057aa: b2db uxtb r3, r3 + 80057ac: 2b00 cmp r3, #0 + 80057ae: d106 bne.n 80057be + 80057b0: 687b ldr r3, [r7, #4] + 80057b2: 2200 movs r2, #0 + 80057b4: f883 203c strb.w r2, [r3, #60] @ 0x3c + 80057b8: 6878 ldr r0, [r7, #4] + 80057ba: f000 f839 bl 8005830 + 80057be: 687b ldr r3, [r7, #4] + 80057c0: 2202 movs r2, #2 + 80057c2: f883 203d strb.w r2, [r3, #61] @ 0x3d + 80057c6: 687b ldr r3, [r7, #4] + 80057c8: 681a ldr r2, [r3, #0] + 80057ca: 687b ldr r3, [r7, #4] + 80057cc: 3304 adds r3, #4 + 80057ce: 4619 mov r1, r3 + 80057d0: 4610 mov r0, r2 + 80057d2: f000 fb51 bl 8005e78 + 80057d6: 687b ldr r3, [r7, #4] + 80057d8: 2201 movs r2, #1 + 80057da: f883 2046 strb.w r2, [r3, #70] @ 0x46 + 80057de: 687b ldr r3, [r7, #4] + 80057e0: 2201 movs r2, #1 + 80057e2: f883 203e strb.w r2, [r3, #62] @ 0x3e + 80057e6: 687b ldr r3, [r7, #4] + 80057e8: 2201 movs r2, #1 + 80057ea: f883 203f strb.w r2, [r3, #63] @ 0x3f + 80057ee: 687b ldr r3, [r7, #4] + 80057f0: 2201 movs r2, #1 + 80057f2: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 80057f6: 687b ldr r3, [r7, #4] + 80057f8: 2201 movs r2, #1 + 80057fa: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 80057fe: 687b ldr r3, [r7, #4] + 8005800: 2201 movs r2, #1 + 8005802: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8005806: 687b ldr r3, [r7, #4] + 8005808: 2201 movs r2, #1 + 800580a: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 800580e: 687b ldr r3, [r7, #4] + 8005810: 2201 movs r2, #1 + 8005812: f883 2044 strb.w r2, [r3, #68] @ 0x44 + 8005816: 687b ldr r3, [r7, #4] + 8005818: 2201 movs r2, #1 + 800581a: f883 2045 strb.w r2, [r3, #69] @ 0x45 + 800581e: 687b ldr r3, [r7, #4] + 8005820: 2201 movs r2, #1 + 8005822: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8005826: 2300 movs r3, #0 + 8005828: 4618 mov r0, r3 + 800582a: 3708 adds r7, #8 + 800582c: 46bd mov sp, r7 + 800582e: bd80 pop {r7, pc} + +08005830 : + 8005830: b480 push {r7} + 8005832: b083 sub sp, #12 + 8005834: af00 add r7, sp, #0 + 8005836: 6078 str r0, [r7, #4] + 8005838: bf00 nop + 800583a: 370c adds r7, #12 + 800583c: 46bd mov sp, r7 + 800583e: f85d 7b04 ldr.w r7, [sp], #4 + 8005842: 4770 bx lr + +08005844 : + 8005844: b580 push {r7, lr} + 8005846: b084 sub sp, #16 + 8005848: af00 add r7, sp, #0 + 800584a: 6078 str r0, [r7, #4] + 800584c: 6039 str r1, [r7, #0] + 800584e: 683b ldr r3, [r7, #0] + 8005850: 2b00 cmp r3, #0 + 8005852: d109 bne.n 8005868 + 8005854: 687b ldr r3, [r7, #4] + 8005856: f893 303e ldrb.w r3, [r3, #62] @ 0x3e + 800585a: b2db uxtb r3, r3 + 800585c: 2b01 cmp r3, #1 + 800585e: bf14 ite ne + 8005860: 2301 movne r3, #1 + 8005862: 2300 moveq r3, #0 + 8005864: b2db uxtb r3, r3 + 8005866: e022 b.n 80058ae + 8005868: 683b ldr r3, [r7, #0] + 800586a: 2b04 cmp r3, #4 + 800586c: d109 bne.n 8005882 + 800586e: 687b ldr r3, [r7, #4] + 8005870: f893 303f ldrb.w r3, [r3, #63] @ 0x3f + 8005874: b2db uxtb r3, r3 + 8005876: 2b01 cmp r3, #1 + 8005878: bf14 ite ne + 800587a: 2301 movne r3, #1 + 800587c: 2300 moveq r3, #0 + 800587e: b2db uxtb r3, r3 + 8005880: e015 b.n 80058ae + 8005882: 683b ldr r3, [r7, #0] + 8005884: 2b08 cmp r3, #8 + 8005886: d109 bne.n 800589c + 8005888: 687b ldr r3, [r7, #4] + 800588a: f893 3040 ldrb.w r3, [r3, #64] @ 0x40 + 800588e: b2db uxtb r3, r3 + 8005890: 2b01 cmp r3, #1 + 8005892: bf14 ite ne + 8005894: 2301 movne r3, #1 + 8005896: 2300 moveq r3, #0 + 8005898: b2db uxtb r3, r3 + 800589a: e008 b.n 80058ae + 800589c: 687b ldr r3, [r7, #4] + 800589e: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 80058a2: b2db uxtb r3, r3 + 80058a4: 2b01 cmp r3, #1 + 80058a6: bf14 ite ne + 80058a8: 2301 movne r3, #1 + 80058aa: 2300 moveq r3, #0 + 80058ac: b2db uxtb r3, r3 + 80058ae: 2b00 cmp r3, #0 + 80058b0: d001 beq.n 80058b6 + 80058b2: 2301 movs r3, #1 + 80058b4: e07c b.n 80059b0 + 80058b6: 683b ldr r3, [r7, #0] + 80058b8: 2b00 cmp r3, #0 + 80058ba: d104 bne.n 80058c6 + 80058bc: 687b ldr r3, [r7, #4] + 80058be: 2202 movs r2, #2 + 80058c0: f883 203e strb.w r2, [r3, #62] @ 0x3e + 80058c4: e013 b.n 80058ee + 80058c6: 683b ldr r3, [r7, #0] + 80058c8: 2b04 cmp r3, #4 + 80058ca: d104 bne.n 80058d6 + 80058cc: 687b ldr r3, [r7, #4] + 80058ce: 2202 movs r2, #2 + 80058d0: f883 203f strb.w r2, [r3, #63] @ 0x3f + 80058d4: e00b b.n 80058ee + 80058d6: 683b ldr r3, [r7, #0] + 80058d8: 2b08 cmp r3, #8 + 80058da: d104 bne.n 80058e6 + 80058dc: 687b ldr r3, [r7, #4] + 80058de: 2202 movs r2, #2 + 80058e0: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 80058e4: e003 b.n 80058ee + 80058e6: 687b ldr r3, [r7, #4] + 80058e8: 2202 movs r2, #2 + 80058ea: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 80058ee: 687b ldr r3, [r7, #4] + 80058f0: 681b ldr r3, [r3, #0] + 80058f2: 2201 movs r2, #1 + 80058f4: 6839 ldr r1, [r7, #0] + 80058f6: 4618 mov r0, r3 + 80058f8: f000 fd14 bl 8006324 + 80058fc: 687b ldr r3, [r7, #4] + 80058fe: 681b ldr r3, [r3, #0] + 8005900: 4a2d ldr r2, [pc, #180] @ (80059b8 ) + 8005902: 4293 cmp r3, r2 + 8005904: d004 beq.n 8005910 + 8005906: 687b ldr r3, [r7, #4] + 8005908: 681b ldr r3, [r3, #0] + 800590a: 4a2c ldr r2, [pc, #176] @ (80059bc ) + 800590c: 4293 cmp r3, r2 + 800590e: d101 bne.n 8005914 + 8005910: 2301 movs r3, #1 + 8005912: e000 b.n 8005916 + 8005914: 2300 movs r3, #0 + 8005916: 2b00 cmp r3, #0 + 8005918: d007 beq.n 800592a + 800591a: 687b ldr r3, [r7, #4] + 800591c: 681b ldr r3, [r3, #0] + 800591e: 6c5a ldr r2, [r3, #68] @ 0x44 + 8005920: 687b ldr r3, [r7, #4] + 8005922: 681b ldr r3, [r3, #0] + 8005924: f442 4200 orr.w r2, r2, #32768 @ 0x8000 + 8005928: 645a str r2, [r3, #68] @ 0x44 + 800592a: 687b ldr r3, [r7, #4] + 800592c: 681b ldr r3, [r3, #0] + 800592e: 4a22 ldr r2, [pc, #136] @ (80059b8 ) + 8005930: 4293 cmp r3, r2 + 8005932: d022 beq.n 800597a + 8005934: 687b ldr r3, [r7, #4] + 8005936: 681b ldr r3, [r3, #0] + 8005938: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 800593c: d01d beq.n 800597a + 800593e: 687b ldr r3, [r7, #4] + 8005940: 681b ldr r3, [r3, #0] + 8005942: 4a1f ldr r2, [pc, #124] @ (80059c0 ) + 8005944: 4293 cmp r3, r2 + 8005946: d018 beq.n 800597a + 8005948: 687b ldr r3, [r7, #4] + 800594a: 681b ldr r3, [r3, #0] + 800594c: 4a1d ldr r2, [pc, #116] @ (80059c4 ) + 800594e: 4293 cmp r3, r2 + 8005950: d013 beq.n 800597a + 8005952: 687b ldr r3, [r7, #4] + 8005954: 681b ldr r3, [r3, #0] + 8005956: 4a1c ldr r2, [pc, #112] @ (80059c8 ) + 8005958: 4293 cmp r3, r2 + 800595a: d00e beq.n 800597a + 800595c: 687b ldr r3, [r7, #4] + 800595e: 681b ldr r3, [r3, #0] + 8005960: 4a16 ldr r2, [pc, #88] @ (80059bc ) + 8005962: 4293 cmp r3, r2 + 8005964: d009 beq.n 800597a + 8005966: 687b ldr r3, [r7, #4] + 8005968: 681b ldr r3, [r3, #0] + 800596a: 4a18 ldr r2, [pc, #96] @ (80059cc ) + 800596c: 4293 cmp r3, r2 + 800596e: d004 beq.n 800597a + 8005970: 687b ldr r3, [r7, #4] + 8005972: 681b ldr r3, [r3, #0] + 8005974: 4a16 ldr r2, [pc, #88] @ (80059d0 ) + 8005976: 4293 cmp r3, r2 + 8005978: d111 bne.n 800599e + 800597a: 687b ldr r3, [r7, #4] + 800597c: 681b ldr r3, [r3, #0] + 800597e: 689b ldr r3, [r3, #8] + 8005980: f003 0307 and.w r3, r3, #7 + 8005984: 60fb str r3, [r7, #12] + 8005986: 68fb ldr r3, [r7, #12] + 8005988: 2b06 cmp r3, #6 + 800598a: d010 beq.n 80059ae + 800598c: 687b ldr r3, [r7, #4] + 800598e: 681b ldr r3, [r3, #0] + 8005990: 681a ldr r2, [r3, #0] + 8005992: 687b ldr r3, [r7, #4] + 8005994: 681b ldr r3, [r3, #0] + 8005996: f042 0201 orr.w r2, r2, #1 + 800599a: 601a str r2, [r3, #0] + 800599c: e007 b.n 80059ae + 800599e: 687b ldr r3, [r7, #4] + 80059a0: 681b ldr r3, [r3, #0] + 80059a2: 681a ldr r2, [r3, #0] + 80059a4: 687b ldr r3, [r7, #4] + 80059a6: 681b ldr r3, [r3, #0] + 80059a8: f042 0201 orr.w r2, r2, #1 + 80059ac: 601a str r2, [r3, #0] + 80059ae: 2300 movs r3, #0 + 80059b0: 4618 mov r0, r3 + 80059b2: 3710 adds r7, #16 + 80059b4: 46bd mov sp, r7 + 80059b6: bd80 pop {r7, pc} + 80059b8: 40010000 .word 0x40010000 + 80059bc: 40010400 .word 0x40010400 + 80059c0: 40000400 .word 0x40000400 + 80059c4: 40000800 .word 0x40000800 + 80059c8: 40000c00 .word 0x40000c00 + 80059cc: 40014000 .word 0x40014000 + 80059d0: 40001800 .word 0x40001800 + +080059d4 : + 80059d4: b580 push {r7, lr} + 80059d6: b086 sub sp, #24 + 80059d8: af00 add r7, sp, #0 + 80059da: 6078 str r0, [r7, #4] + 80059dc: 6039 str r1, [r7, #0] + 80059de: 687b ldr r3, [r7, #4] + 80059e0: 2b00 cmp r3, #0 + 80059e2: d101 bne.n 80059e8 + 80059e4: 2301 movs r3, #1 + 80059e6: e097 b.n 8005b18 + 80059e8: 687b ldr r3, [r7, #4] + 80059ea: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 80059ee: b2db uxtb r3, r3 + 80059f0: 2b00 cmp r3, #0 + 80059f2: d106 bne.n 8005a02 + 80059f4: 687b ldr r3, [r7, #4] + 80059f6: 2200 movs r2, #0 + 80059f8: f883 203c strb.w r2, [r3, #60] @ 0x3c + 80059fc: 6878 ldr r0, [r7, #4] + 80059fe: f7fb fe19 bl 8001634 + 8005a02: 687b ldr r3, [r7, #4] + 8005a04: 2202 movs r2, #2 + 8005a06: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8005a0a: 687b ldr r3, [r7, #4] + 8005a0c: 681b ldr r3, [r3, #0] + 8005a0e: 689b ldr r3, [r3, #8] + 8005a10: 687a ldr r2, [r7, #4] + 8005a12: 6812 ldr r2, [r2, #0] + 8005a14: f423 4380 bic.w r3, r3, #16384 @ 0x4000 + 8005a18: f023 0307 bic.w r3, r3, #7 + 8005a1c: 6093 str r3, [r2, #8] + 8005a1e: 687b ldr r3, [r7, #4] + 8005a20: 681a ldr r2, [r3, #0] + 8005a22: 687b ldr r3, [r7, #4] + 8005a24: 3304 adds r3, #4 + 8005a26: 4619 mov r1, r3 + 8005a28: 4610 mov r0, r2 + 8005a2a: f000 fa25 bl 8005e78 + 8005a2e: 687b ldr r3, [r7, #4] + 8005a30: 681b ldr r3, [r3, #0] + 8005a32: 689b ldr r3, [r3, #8] + 8005a34: 617b str r3, [r7, #20] + 8005a36: 687b ldr r3, [r7, #4] + 8005a38: 681b ldr r3, [r3, #0] + 8005a3a: 699b ldr r3, [r3, #24] + 8005a3c: 613b str r3, [r7, #16] + 8005a3e: 687b ldr r3, [r7, #4] + 8005a40: 681b ldr r3, [r3, #0] + 8005a42: 6a1b ldr r3, [r3, #32] + 8005a44: 60fb str r3, [r7, #12] + 8005a46: 683b ldr r3, [r7, #0] + 8005a48: 681b ldr r3, [r3, #0] + 8005a4a: 697a ldr r2, [r7, #20] + 8005a4c: 4313 orrs r3, r2 + 8005a4e: 617b str r3, [r7, #20] + 8005a50: 693b ldr r3, [r7, #16] + 8005a52: f423 7340 bic.w r3, r3, #768 @ 0x300 + 8005a56: f023 0303 bic.w r3, r3, #3 + 8005a5a: 613b str r3, [r7, #16] + 8005a5c: 683b ldr r3, [r7, #0] + 8005a5e: 689a ldr r2, [r3, #8] + 8005a60: 683b ldr r3, [r7, #0] + 8005a62: 699b ldr r3, [r3, #24] + 8005a64: 021b lsls r3, r3, #8 + 8005a66: 4313 orrs r3, r2 + 8005a68: 693a ldr r2, [r7, #16] + 8005a6a: 4313 orrs r3, r2 + 8005a6c: 613b str r3, [r7, #16] + 8005a6e: 693b ldr r3, [r7, #16] + 8005a70: f423 6340 bic.w r3, r3, #3072 @ 0xc00 + 8005a74: f023 030c bic.w r3, r3, #12 + 8005a78: 613b str r3, [r7, #16] + 8005a7a: 693b ldr r3, [r7, #16] + 8005a7c: f423 4370 bic.w r3, r3, #61440 @ 0xf000 + 8005a80: f023 03f0 bic.w r3, r3, #240 @ 0xf0 + 8005a84: 613b str r3, [r7, #16] + 8005a86: 683b ldr r3, [r7, #0] + 8005a88: 68da ldr r2, [r3, #12] + 8005a8a: 683b ldr r3, [r7, #0] + 8005a8c: 69db ldr r3, [r3, #28] + 8005a8e: 021b lsls r3, r3, #8 + 8005a90: 4313 orrs r3, r2 + 8005a92: 693a ldr r2, [r7, #16] + 8005a94: 4313 orrs r3, r2 + 8005a96: 613b str r3, [r7, #16] + 8005a98: 683b ldr r3, [r7, #0] + 8005a9a: 691b ldr r3, [r3, #16] + 8005a9c: 011a lsls r2, r3, #4 + 8005a9e: 683b ldr r3, [r7, #0] + 8005aa0: 6a1b ldr r3, [r3, #32] + 8005aa2: 031b lsls r3, r3, #12 + 8005aa4: 4313 orrs r3, r2 + 8005aa6: 693a ldr r2, [r7, #16] + 8005aa8: 4313 orrs r3, r2 + 8005aaa: 613b str r3, [r7, #16] + 8005aac: 68fb ldr r3, [r7, #12] + 8005aae: f023 0322 bic.w r3, r3, #34 @ 0x22 + 8005ab2: 60fb str r3, [r7, #12] + 8005ab4: 68fb ldr r3, [r7, #12] + 8005ab6: f023 0388 bic.w r3, r3, #136 @ 0x88 + 8005aba: 60fb str r3, [r7, #12] + 8005abc: 683b ldr r3, [r7, #0] + 8005abe: 685a ldr r2, [r3, #4] + 8005ac0: 683b ldr r3, [r7, #0] + 8005ac2: 695b ldr r3, [r3, #20] + 8005ac4: 011b lsls r3, r3, #4 + 8005ac6: 4313 orrs r3, r2 + 8005ac8: 68fa ldr r2, [r7, #12] + 8005aca: 4313 orrs r3, r2 + 8005acc: 60fb str r3, [r7, #12] + 8005ace: 687b ldr r3, [r7, #4] + 8005ad0: 681b ldr r3, [r3, #0] + 8005ad2: 697a ldr r2, [r7, #20] + 8005ad4: 609a str r2, [r3, #8] + 8005ad6: 687b ldr r3, [r7, #4] + 8005ad8: 681b ldr r3, [r3, #0] + 8005ada: 693a ldr r2, [r7, #16] + 8005adc: 619a str r2, [r3, #24] + 8005ade: 687b ldr r3, [r7, #4] + 8005ae0: 681b ldr r3, [r3, #0] + 8005ae2: 68fa ldr r2, [r7, #12] + 8005ae4: 621a str r2, [r3, #32] + 8005ae6: 687b ldr r3, [r7, #4] + 8005ae8: 2201 movs r2, #1 + 8005aea: f883 2046 strb.w r2, [r3, #70] @ 0x46 + 8005aee: 687b ldr r3, [r7, #4] + 8005af0: 2201 movs r2, #1 + 8005af2: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8005af6: 687b ldr r3, [r7, #4] + 8005af8: 2201 movs r2, #1 + 8005afa: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8005afe: 687b ldr r3, [r7, #4] + 8005b00: 2201 movs r2, #1 + 8005b02: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8005b06: 687b ldr r3, [r7, #4] + 8005b08: 2201 movs r2, #1 + 8005b0a: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8005b0e: 687b ldr r3, [r7, #4] + 8005b10: 2201 movs r2, #1 + 8005b12: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8005b16: 2300 movs r3, #0 + 8005b18: 4618 mov r0, r3 + 8005b1a: 3718 adds r7, #24 + 8005b1c: 46bd mov sp, r7 + 8005b1e: bd80 pop {r7, pc} + +08005b20 : + 8005b20: b580 push {r7, lr} + 8005b22: b084 sub sp, #16 + 8005b24: af00 add r7, sp, #0 + 8005b26: 6078 str r0, [r7, #4] + 8005b28: 6039 str r1, [r7, #0] + 8005b2a: 687b ldr r3, [r7, #4] + 8005b2c: f893 303e ldrb.w r3, [r3, #62] @ 0x3e + 8005b30: 73fb strb r3, [r7, #15] + 8005b32: 687b ldr r3, [r7, #4] + 8005b34: f893 303f ldrb.w r3, [r3, #63] @ 0x3f + 8005b38: 73bb strb r3, [r7, #14] + 8005b3a: 687b ldr r3, [r7, #4] + 8005b3c: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 8005b40: 737b strb r3, [r7, #13] + 8005b42: 687b ldr r3, [r7, #4] + 8005b44: f893 3043 ldrb.w r3, [r3, #67] @ 0x43 + 8005b48: 733b strb r3, [r7, #12] + 8005b4a: 683b ldr r3, [r7, #0] + 8005b4c: 2b00 cmp r3, #0 + 8005b4e: d110 bne.n 8005b72 + 8005b50: 7bfb ldrb r3, [r7, #15] + 8005b52: 2b01 cmp r3, #1 + 8005b54: d102 bne.n 8005b5c + 8005b56: 7b7b ldrb r3, [r7, #13] + 8005b58: 2b01 cmp r3, #1 + 8005b5a: d001 beq.n 8005b60 + 8005b5c: 2301 movs r3, #1 + 8005b5e: e069 b.n 8005c34 + 8005b60: 687b ldr r3, [r7, #4] + 8005b62: 2202 movs r2, #2 + 8005b64: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8005b68: 687b ldr r3, [r7, #4] + 8005b6a: 2202 movs r2, #2 + 8005b6c: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8005b70: e031 b.n 8005bd6 + 8005b72: 683b ldr r3, [r7, #0] + 8005b74: 2b04 cmp r3, #4 + 8005b76: d110 bne.n 8005b9a + 8005b78: 7bbb ldrb r3, [r7, #14] + 8005b7a: 2b01 cmp r3, #1 + 8005b7c: d102 bne.n 8005b84 + 8005b7e: 7b3b ldrb r3, [r7, #12] + 8005b80: 2b01 cmp r3, #1 + 8005b82: d001 beq.n 8005b88 + 8005b84: 2301 movs r3, #1 + 8005b86: e055 b.n 8005c34 + 8005b88: 687b ldr r3, [r7, #4] + 8005b8a: 2202 movs r2, #2 + 8005b8c: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8005b90: 687b ldr r3, [r7, #4] + 8005b92: 2202 movs r2, #2 + 8005b94: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8005b98: e01d b.n 8005bd6 + 8005b9a: 7bfb ldrb r3, [r7, #15] + 8005b9c: 2b01 cmp r3, #1 + 8005b9e: d108 bne.n 8005bb2 + 8005ba0: 7bbb ldrb r3, [r7, #14] + 8005ba2: 2b01 cmp r3, #1 + 8005ba4: d105 bne.n 8005bb2 + 8005ba6: 7b7b ldrb r3, [r7, #13] + 8005ba8: 2b01 cmp r3, #1 + 8005baa: d102 bne.n 8005bb2 + 8005bac: 7b3b ldrb r3, [r7, #12] + 8005bae: 2b01 cmp r3, #1 + 8005bb0: d001 beq.n 8005bb6 + 8005bb2: 2301 movs r3, #1 + 8005bb4: e03e b.n 8005c34 + 8005bb6: 687b ldr r3, [r7, #4] + 8005bb8: 2202 movs r2, #2 + 8005bba: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8005bbe: 687b ldr r3, [r7, #4] + 8005bc0: 2202 movs r2, #2 + 8005bc2: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8005bc6: 687b ldr r3, [r7, #4] + 8005bc8: 2202 movs r2, #2 + 8005bca: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8005bce: 687b ldr r3, [r7, #4] + 8005bd0: 2202 movs r2, #2 + 8005bd2: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8005bd6: 683b ldr r3, [r7, #0] + 8005bd8: 2b00 cmp r3, #0 + 8005bda: d003 beq.n 8005be4 + 8005bdc: 683b ldr r3, [r7, #0] + 8005bde: 2b04 cmp r3, #4 + 8005be0: d008 beq.n 8005bf4 + 8005be2: e00f b.n 8005c04 + 8005be4: 687b ldr r3, [r7, #4] + 8005be6: 681b ldr r3, [r3, #0] + 8005be8: 2201 movs r2, #1 + 8005bea: 2100 movs r1, #0 + 8005bec: 4618 mov r0, r3 + 8005bee: f000 fb99 bl 8006324 + 8005bf2: e016 b.n 8005c22 + 8005bf4: 687b ldr r3, [r7, #4] + 8005bf6: 681b ldr r3, [r3, #0] + 8005bf8: 2201 movs r2, #1 + 8005bfa: 2104 movs r1, #4 + 8005bfc: 4618 mov r0, r3 + 8005bfe: f000 fb91 bl 8006324 + 8005c02: e00e b.n 8005c22 + 8005c04: 687b ldr r3, [r7, #4] + 8005c06: 681b ldr r3, [r3, #0] + 8005c08: 2201 movs r2, #1 + 8005c0a: 2100 movs r1, #0 + 8005c0c: 4618 mov r0, r3 + 8005c0e: f000 fb89 bl 8006324 + 8005c12: 687b ldr r3, [r7, #4] + 8005c14: 681b ldr r3, [r3, #0] + 8005c16: 2201 movs r2, #1 + 8005c18: 2104 movs r1, #4 + 8005c1a: 4618 mov r0, r3 + 8005c1c: f000 fb82 bl 8006324 + 8005c20: bf00 nop + 8005c22: 687b ldr r3, [r7, #4] + 8005c24: 681b ldr r3, [r3, #0] + 8005c26: 681a ldr r2, [r3, #0] + 8005c28: 687b ldr r3, [r7, #4] + 8005c2a: 681b ldr r3, [r3, #0] + 8005c2c: f042 0201 orr.w r2, r2, #1 + 8005c30: 601a str r2, [r3, #0] + 8005c32: 2300 movs r3, #0 + 8005c34: 4618 mov r0, r3 + 8005c36: 3710 adds r7, #16 + 8005c38: 46bd mov sp, r7 + 8005c3a: bd80 pop {r7, pc} + +08005c3c : + 8005c3c: b580 push {r7, lr} + 8005c3e: b086 sub sp, #24 + 8005c40: af00 add r7, sp, #0 + 8005c42: 60f8 str r0, [r7, #12] + 8005c44: 60b9 str r1, [r7, #8] + 8005c46: 607a str r2, [r7, #4] + 8005c48: 2300 movs r3, #0 + 8005c4a: 75fb strb r3, [r7, #23] + 8005c4c: 68fb ldr r3, [r7, #12] + 8005c4e: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 8005c52: 2b01 cmp r3, #1 + 8005c54: d101 bne.n 8005c5a + 8005c56: 2302 movs r3, #2 + 8005c58: e048 b.n 8005cec + 8005c5a: 68fb ldr r3, [r7, #12] + 8005c5c: 2201 movs r2, #1 + 8005c5e: f883 203c strb.w r2, [r3, #60] @ 0x3c + 8005c62: 687b ldr r3, [r7, #4] + 8005c64: 2b0c cmp r3, #12 + 8005c66: d839 bhi.n 8005cdc + 8005c68: a201 add r2, pc, #4 @ (adr r2, 8005c70 ) + 8005c6a: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8005c6e: bf00 nop + 8005c70: 08005ca5 .word 0x08005ca5 + 8005c74: 08005cdd .word 0x08005cdd + 8005c78: 08005cdd .word 0x08005cdd + 8005c7c: 08005cdd .word 0x08005cdd + 8005c80: 08005cb3 .word 0x08005cb3 + 8005c84: 08005cdd .word 0x08005cdd + 8005c88: 08005cdd .word 0x08005cdd + 8005c8c: 08005cdd .word 0x08005cdd + 8005c90: 08005cc1 .word 0x08005cc1 + 8005c94: 08005cdd .word 0x08005cdd + 8005c98: 08005cdd .word 0x08005cdd + 8005c9c: 08005cdd .word 0x08005cdd + 8005ca0: 08005ccf .word 0x08005ccf + 8005ca4: 68fb ldr r3, [r7, #12] + 8005ca6: 681b ldr r3, [r3, #0] + 8005ca8: 68b9 ldr r1, [r7, #8] + 8005caa: 4618 mov r0, r3 + 8005cac: f000 f98a bl 8005fc4 + 8005cb0: e017 b.n 8005ce2 + 8005cb2: 68fb ldr r3, [r7, #12] + 8005cb4: 681b ldr r3, [r3, #0] + 8005cb6: 68b9 ldr r1, [r7, #8] + 8005cb8: 4618 mov r0, r3 + 8005cba: f000 f9f3 bl 80060a4 + 8005cbe: e010 b.n 8005ce2 + 8005cc0: 68fb ldr r3, [r7, #12] + 8005cc2: 681b ldr r3, [r3, #0] + 8005cc4: 68b9 ldr r1, [r7, #8] + 8005cc6: 4618 mov r0, r3 + 8005cc8: f000 fa62 bl 8006190 + 8005ccc: e009 b.n 8005ce2 + 8005cce: 68fb ldr r3, [r7, #12] + 8005cd0: 681b ldr r3, [r3, #0] + 8005cd2: 68b9 ldr r1, [r7, #8] + 8005cd4: 4618 mov r0, r3 + 8005cd6: f000 facf bl 8006278 + 8005cda: e002 b.n 8005ce2 + 8005cdc: 2301 movs r3, #1 + 8005cde: 75fb strb r3, [r7, #23] + 8005ce0: bf00 nop + 8005ce2: 68fb ldr r3, [r7, #12] + 8005ce4: 2200 movs r2, #0 + 8005ce6: f883 203c strb.w r2, [r3, #60] @ 0x3c + 8005cea: 7dfb ldrb r3, [r7, #23] + 8005cec: 4618 mov r0, r3 + 8005cee: 3718 adds r7, #24 + 8005cf0: 46bd mov sp, r7 + 8005cf2: bd80 pop {r7, pc} + +08005cf4 : + 8005cf4: b580 push {r7, lr} + 8005cf6: b086 sub sp, #24 + 8005cf8: af00 add r7, sp, #0 + 8005cfa: 60f8 str r0, [r7, #12] + 8005cfc: 60b9 str r1, [r7, #8] + 8005cfe: 607a str r2, [r7, #4] + 8005d00: 2300 movs r3, #0 + 8005d02: 75fb strb r3, [r7, #23] + 8005d04: 68fb ldr r3, [r7, #12] + 8005d06: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 8005d0a: 2b01 cmp r3, #1 + 8005d0c: d101 bne.n 8005d12 + 8005d0e: 2302 movs r3, #2 + 8005d10: e0ae b.n 8005e70 + 8005d12: 68fb ldr r3, [r7, #12] + 8005d14: 2201 movs r2, #1 + 8005d16: f883 203c strb.w r2, [r3, #60] @ 0x3c + 8005d1a: 687b ldr r3, [r7, #4] + 8005d1c: 2b0c cmp r3, #12 + 8005d1e: f200 809f bhi.w 8005e60 + 8005d22: a201 add r2, pc, #4 @ (adr r2, 8005d28 ) + 8005d24: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8005d28: 08005d5d .word 0x08005d5d + 8005d2c: 08005e61 .word 0x08005e61 + 8005d30: 08005e61 .word 0x08005e61 + 8005d34: 08005e61 .word 0x08005e61 + 8005d38: 08005d9d .word 0x08005d9d + 8005d3c: 08005e61 .word 0x08005e61 + 8005d40: 08005e61 .word 0x08005e61 + 8005d44: 08005e61 .word 0x08005e61 + 8005d48: 08005ddf .word 0x08005ddf + 8005d4c: 08005e61 .word 0x08005e61 + 8005d50: 08005e61 .word 0x08005e61 + 8005d54: 08005e61 .word 0x08005e61 + 8005d58: 08005e1f .word 0x08005e1f + 8005d5c: 68fb ldr r3, [r7, #12] + 8005d5e: 681b ldr r3, [r3, #0] + 8005d60: 68b9 ldr r1, [r7, #8] + 8005d62: 4618 mov r0, r3 + 8005d64: f000 f92e bl 8005fc4 + 8005d68: 68fb ldr r3, [r7, #12] + 8005d6a: 681b ldr r3, [r3, #0] + 8005d6c: 699a ldr r2, [r3, #24] + 8005d6e: 68fb ldr r3, [r7, #12] + 8005d70: 681b ldr r3, [r3, #0] + 8005d72: f042 0208 orr.w r2, r2, #8 + 8005d76: 619a str r2, [r3, #24] + 8005d78: 68fb ldr r3, [r7, #12] + 8005d7a: 681b ldr r3, [r3, #0] + 8005d7c: 699a ldr r2, [r3, #24] + 8005d7e: 68fb ldr r3, [r7, #12] + 8005d80: 681b ldr r3, [r3, #0] + 8005d82: f022 0204 bic.w r2, r2, #4 + 8005d86: 619a str r2, [r3, #24] + 8005d88: 68fb ldr r3, [r7, #12] + 8005d8a: 681b ldr r3, [r3, #0] + 8005d8c: 6999 ldr r1, [r3, #24] + 8005d8e: 68bb ldr r3, [r7, #8] + 8005d90: 691a ldr r2, [r3, #16] + 8005d92: 68fb ldr r3, [r7, #12] + 8005d94: 681b ldr r3, [r3, #0] + 8005d96: 430a orrs r2, r1 + 8005d98: 619a str r2, [r3, #24] + 8005d9a: e064 b.n 8005e66 + 8005d9c: 68fb ldr r3, [r7, #12] + 8005d9e: 681b ldr r3, [r3, #0] + 8005da0: 68b9 ldr r1, [r7, #8] + 8005da2: 4618 mov r0, r3 + 8005da4: f000 f97e bl 80060a4 + 8005da8: 68fb ldr r3, [r7, #12] + 8005daa: 681b ldr r3, [r3, #0] + 8005dac: 699a ldr r2, [r3, #24] + 8005dae: 68fb ldr r3, [r7, #12] + 8005db0: 681b ldr r3, [r3, #0] + 8005db2: f442 6200 orr.w r2, r2, #2048 @ 0x800 + 8005db6: 619a str r2, [r3, #24] + 8005db8: 68fb ldr r3, [r7, #12] + 8005dba: 681b ldr r3, [r3, #0] + 8005dbc: 699a ldr r2, [r3, #24] + 8005dbe: 68fb ldr r3, [r7, #12] + 8005dc0: 681b ldr r3, [r3, #0] + 8005dc2: f422 6280 bic.w r2, r2, #1024 @ 0x400 + 8005dc6: 619a str r2, [r3, #24] + 8005dc8: 68fb ldr r3, [r7, #12] + 8005dca: 681b ldr r3, [r3, #0] + 8005dcc: 6999 ldr r1, [r3, #24] + 8005dce: 68bb ldr r3, [r7, #8] + 8005dd0: 691b ldr r3, [r3, #16] + 8005dd2: 021a lsls r2, r3, #8 + 8005dd4: 68fb ldr r3, [r7, #12] + 8005dd6: 681b ldr r3, [r3, #0] + 8005dd8: 430a orrs r2, r1 + 8005dda: 619a str r2, [r3, #24] + 8005ddc: e043 b.n 8005e66 + 8005dde: 68fb ldr r3, [r7, #12] + 8005de0: 681b ldr r3, [r3, #0] + 8005de2: 68b9 ldr r1, [r7, #8] + 8005de4: 4618 mov r0, r3 + 8005de6: f000 f9d3 bl 8006190 + 8005dea: 68fb ldr r3, [r7, #12] + 8005dec: 681b ldr r3, [r3, #0] + 8005dee: 69da ldr r2, [r3, #28] + 8005df0: 68fb ldr r3, [r7, #12] + 8005df2: 681b ldr r3, [r3, #0] + 8005df4: f042 0208 orr.w r2, r2, #8 + 8005df8: 61da str r2, [r3, #28] + 8005dfa: 68fb ldr r3, [r7, #12] + 8005dfc: 681b ldr r3, [r3, #0] + 8005dfe: 69da ldr r2, [r3, #28] + 8005e00: 68fb ldr r3, [r7, #12] + 8005e02: 681b ldr r3, [r3, #0] + 8005e04: f022 0204 bic.w r2, r2, #4 + 8005e08: 61da str r2, [r3, #28] + 8005e0a: 68fb ldr r3, [r7, #12] + 8005e0c: 681b ldr r3, [r3, #0] + 8005e0e: 69d9 ldr r1, [r3, #28] + 8005e10: 68bb ldr r3, [r7, #8] + 8005e12: 691a ldr r2, [r3, #16] + 8005e14: 68fb ldr r3, [r7, #12] + 8005e16: 681b ldr r3, [r3, #0] + 8005e18: 430a orrs r2, r1 + 8005e1a: 61da str r2, [r3, #28] + 8005e1c: e023 b.n 8005e66 + 8005e1e: 68fb ldr r3, [r7, #12] + 8005e20: 681b ldr r3, [r3, #0] + 8005e22: 68b9 ldr r1, [r7, #8] + 8005e24: 4618 mov r0, r3 + 8005e26: f000 fa27 bl 8006278 + 8005e2a: 68fb ldr r3, [r7, #12] + 8005e2c: 681b ldr r3, [r3, #0] + 8005e2e: 69da ldr r2, [r3, #28] + 8005e30: 68fb ldr r3, [r7, #12] + 8005e32: 681b ldr r3, [r3, #0] + 8005e34: f442 6200 orr.w r2, r2, #2048 @ 0x800 + 8005e38: 61da str r2, [r3, #28] + 8005e3a: 68fb ldr r3, [r7, #12] + 8005e3c: 681b ldr r3, [r3, #0] + 8005e3e: 69da ldr r2, [r3, #28] + 8005e40: 68fb ldr r3, [r7, #12] + 8005e42: 681b ldr r3, [r3, #0] + 8005e44: f422 6280 bic.w r2, r2, #1024 @ 0x400 + 8005e48: 61da str r2, [r3, #28] + 8005e4a: 68fb ldr r3, [r7, #12] + 8005e4c: 681b ldr r3, [r3, #0] + 8005e4e: 69d9 ldr r1, [r3, #28] + 8005e50: 68bb ldr r3, [r7, #8] + 8005e52: 691b ldr r3, [r3, #16] + 8005e54: 021a lsls r2, r3, #8 + 8005e56: 68fb ldr r3, [r7, #12] + 8005e58: 681b ldr r3, [r3, #0] + 8005e5a: 430a orrs r2, r1 + 8005e5c: 61da str r2, [r3, #28] + 8005e5e: e002 b.n 8005e66 + 8005e60: 2301 movs r3, #1 + 8005e62: 75fb strb r3, [r7, #23] + 8005e64: bf00 nop + 8005e66: 68fb ldr r3, [r7, #12] + 8005e68: 2200 movs r2, #0 + 8005e6a: f883 203c strb.w r2, [r3, #60] @ 0x3c + 8005e6e: 7dfb ldrb r3, [r7, #23] + 8005e70: 4618 mov r0, r3 + 8005e72: 3718 adds r7, #24 + 8005e74: 46bd mov sp, r7 + 8005e76: bd80 pop {r7, pc} + +08005e78 : + 8005e78: b480 push {r7} + 8005e7a: b085 sub sp, #20 + 8005e7c: af00 add r7, sp, #0 + 8005e7e: 6078 str r0, [r7, #4] + 8005e80: 6039 str r1, [r7, #0] + 8005e82: 687b ldr r3, [r7, #4] + 8005e84: 681b ldr r3, [r3, #0] + 8005e86: 60fb str r3, [r7, #12] + 8005e88: 687b ldr r3, [r7, #4] + 8005e8a: 4a43 ldr r2, [pc, #268] @ (8005f98 ) + 8005e8c: 4293 cmp r3, r2 + 8005e8e: d013 beq.n 8005eb8 + 8005e90: 687b ldr r3, [r7, #4] + 8005e92: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8005e96: d00f beq.n 8005eb8 + 8005e98: 687b ldr r3, [r7, #4] + 8005e9a: 4a40 ldr r2, [pc, #256] @ (8005f9c ) + 8005e9c: 4293 cmp r3, r2 + 8005e9e: d00b beq.n 8005eb8 + 8005ea0: 687b ldr r3, [r7, #4] + 8005ea2: 4a3f ldr r2, [pc, #252] @ (8005fa0 ) + 8005ea4: 4293 cmp r3, r2 + 8005ea6: d007 beq.n 8005eb8 + 8005ea8: 687b ldr r3, [r7, #4] + 8005eaa: 4a3e ldr r2, [pc, #248] @ (8005fa4 ) + 8005eac: 4293 cmp r3, r2 + 8005eae: d003 beq.n 8005eb8 + 8005eb0: 687b ldr r3, [r7, #4] + 8005eb2: 4a3d ldr r2, [pc, #244] @ (8005fa8 ) + 8005eb4: 4293 cmp r3, r2 + 8005eb6: d108 bne.n 8005eca + 8005eb8: 68fb ldr r3, [r7, #12] + 8005eba: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8005ebe: 60fb str r3, [r7, #12] + 8005ec0: 683b ldr r3, [r7, #0] + 8005ec2: 685b ldr r3, [r3, #4] + 8005ec4: 68fa ldr r2, [r7, #12] + 8005ec6: 4313 orrs r3, r2 + 8005ec8: 60fb str r3, [r7, #12] + 8005eca: 687b ldr r3, [r7, #4] + 8005ecc: 4a32 ldr r2, [pc, #200] @ (8005f98 ) + 8005ece: 4293 cmp r3, r2 + 8005ed0: d02b beq.n 8005f2a + 8005ed2: 687b ldr r3, [r7, #4] + 8005ed4: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8005ed8: d027 beq.n 8005f2a + 8005eda: 687b ldr r3, [r7, #4] + 8005edc: 4a2f ldr r2, [pc, #188] @ (8005f9c ) + 8005ede: 4293 cmp r3, r2 + 8005ee0: d023 beq.n 8005f2a + 8005ee2: 687b ldr r3, [r7, #4] + 8005ee4: 4a2e ldr r2, [pc, #184] @ (8005fa0 ) + 8005ee6: 4293 cmp r3, r2 + 8005ee8: d01f beq.n 8005f2a + 8005eea: 687b ldr r3, [r7, #4] + 8005eec: 4a2d ldr r2, [pc, #180] @ (8005fa4 ) + 8005eee: 4293 cmp r3, r2 + 8005ef0: d01b beq.n 8005f2a + 8005ef2: 687b ldr r3, [r7, #4] + 8005ef4: 4a2c ldr r2, [pc, #176] @ (8005fa8 ) + 8005ef6: 4293 cmp r3, r2 + 8005ef8: d017 beq.n 8005f2a + 8005efa: 687b ldr r3, [r7, #4] + 8005efc: 4a2b ldr r2, [pc, #172] @ (8005fac ) + 8005efe: 4293 cmp r3, r2 + 8005f00: d013 beq.n 8005f2a + 8005f02: 687b ldr r3, [r7, #4] + 8005f04: 4a2a ldr r2, [pc, #168] @ (8005fb0 ) + 8005f06: 4293 cmp r3, r2 + 8005f08: d00f beq.n 8005f2a + 8005f0a: 687b ldr r3, [r7, #4] + 8005f0c: 4a29 ldr r2, [pc, #164] @ (8005fb4 ) + 8005f0e: 4293 cmp r3, r2 + 8005f10: d00b beq.n 8005f2a + 8005f12: 687b ldr r3, [r7, #4] + 8005f14: 4a28 ldr r2, [pc, #160] @ (8005fb8 ) + 8005f16: 4293 cmp r3, r2 + 8005f18: d007 beq.n 8005f2a + 8005f1a: 687b ldr r3, [r7, #4] + 8005f1c: 4a27 ldr r2, [pc, #156] @ (8005fbc ) + 8005f1e: 4293 cmp r3, r2 + 8005f20: d003 beq.n 8005f2a + 8005f22: 687b ldr r3, [r7, #4] + 8005f24: 4a26 ldr r2, [pc, #152] @ (8005fc0 ) + 8005f26: 4293 cmp r3, r2 + 8005f28: d108 bne.n 8005f3c + 8005f2a: 68fb ldr r3, [r7, #12] + 8005f2c: f423 7340 bic.w r3, r3, #768 @ 0x300 + 8005f30: 60fb str r3, [r7, #12] + 8005f32: 683b ldr r3, [r7, #0] + 8005f34: 68db ldr r3, [r3, #12] + 8005f36: 68fa ldr r2, [r7, #12] + 8005f38: 4313 orrs r3, r2 + 8005f3a: 60fb str r3, [r7, #12] + 8005f3c: 68fb ldr r3, [r7, #12] + 8005f3e: f023 0280 bic.w r2, r3, #128 @ 0x80 + 8005f42: 683b ldr r3, [r7, #0] + 8005f44: 695b ldr r3, [r3, #20] + 8005f46: 4313 orrs r3, r2 + 8005f48: 60fb str r3, [r7, #12] + 8005f4a: 683b ldr r3, [r7, #0] + 8005f4c: 689a ldr r2, [r3, #8] + 8005f4e: 687b ldr r3, [r7, #4] + 8005f50: 62da str r2, [r3, #44] @ 0x2c + 8005f52: 683b ldr r3, [r7, #0] + 8005f54: 681a ldr r2, [r3, #0] + 8005f56: 687b ldr r3, [r7, #4] + 8005f58: 629a str r2, [r3, #40] @ 0x28 + 8005f5a: 687b ldr r3, [r7, #4] + 8005f5c: 4a0e ldr r2, [pc, #56] @ (8005f98 ) + 8005f5e: 4293 cmp r3, r2 + 8005f60: d003 beq.n 8005f6a + 8005f62: 687b ldr r3, [r7, #4] + 8005f64: 4a10 ldr r2, [pc, #64] @ (8005fa8 ) + 8005f66: 4293 cmp r3, r2 + 8005f68: d103 bne.n 8005f72 + 8005f6a: 683b ldr r3, [r7, #0] + 8005f6c: 691a ldr r2, [r3, #16] + 8005f6e: 687b ldr r3, [r7, #4] + 8005f70: 631a str r2, [r3, #48] @ 0x30 + 8005f72: 687b ldr r3, [r7, #4] + 8005f74: 681b ldr r3, [r3, #0] + 8005f76: f043 0204 orr.w r2, r3, #4 + 8005f7a: 687b ldr r3, [r7, #4] + 8005f7c: 601a str r2, [r3, #0] + 8005f7e: 687b ldr r3, [r7, #4] + 8005f80: 2201 movs r2, #1 + 8005f82: 615a str r2, [r3, #20] + 8005f84: 687b ldr r3, [r7, #4] + 8005f86: 68fa ldr r2, [r7, #12] + 8005f88: 601a str r2, [r3, #0] + 8005f8a: bf00 nop + 8005f8c: 3714 adds r7, #20 + 8005f8e: 46bd mov sp, r7 + 8005f90: f85d 7b04 ldr.w r7, [sp], #4 + 8005f94: 4770 bx lr + 8005f96: bf00 nop + 8005f98: 40010000 .word 0x40010000 + 8005f9c: 40000400 .word 0x40000400 + 8005fa0: 40000800 .word 0x40000800 + 8005fa4: 40000c00 .word 0x40000c00 + 8005fa8: 40010400 .word 0x40010400 + 8005fac: 40014000 .word 0x40014000 + 8005fb0: 40014400 .word 0x40014400 + 8005fb4: 40014800 .word 0x40014800 + 8005fb8: 40001800 .word 0x40001800 + 8005fbc: 40001c00 .word 0x40001c00 + 8005fc0: 40002000 .word 0x40002000 + +08005fc4 : + 8005fc4: b480 push {r7} + 8005fc6: b087 sub sp, #28 + 8005fc8: af00 add r7, sp, #0 + 8005fca: 6078 str r0, [r7, #4] + 8005fcc: 6039 str r1, [r7, #0] + 8005fce: 687b ldr r3, [r7, #4] + 8005fd0: 6a1b ldr r3, [r3, #32] + 8005fd2: 617b str r3, [r7, #20] + 8005fd4: 687b ldr r3, [r7, #4] + 8005fd6: 6a1b ldr r3, [r3, #32] + 8005fd8: f023 0201 bic.w r2, r3, #1 + 8005fdc: 687b ldr r3, [r7, #4] + 8005fde: 621a str r2, [r3, #32] + 8005fe0: 687b ldr r3, [r7, #4] + 8005fe2: 685b ldr r3, [r3, #4] + 8005fe4: 613b str r3, [r7, #16] + 8005fe6: 687b ldr r3, [r7, #4] + 8005fe8: 699b ldr r3, [r3, #24] + 8005fea: 60fb str r3, [r7, #12] + 8005fec: 68fb ldr r3, [r7, #12] + 8005fee: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8005ff2: 60fb str r3, [r7, #12] + 8005ff4: 68fb ldr r3, [r7, #12] + 8005ff6: f023 0303 bic.w r3, r3, #3 + 8005ffa: 60fb str r3, [r7, #12] + 8005ffc: 683b ldr r3, [r7, #0] + 8005ffe: 681b ldr r3, [r3, #0] + 8006000: 68fa ldr r2, [r7, #12] + 8006002: 4313 orrs r3, r2 + 8006004: 60fb str r3, [r7, #12] + 8006006: 697b ldr r3, [r7, #20] + 8006008: f023 0302 bic.w r3, r3, #2 + 800600c: 617b str r3, [r7, #20] + 800600e: 683b ldr r3, [r7, #0] + 8006010: 689b ldr r3, [r3, #8] + 8006012: 697a ldr r2, [r7, #20] + 8006014: 4313 orrs r3, r2 + 8006016: 617b str r3, [r7, #20] + 8006018: 687b ldr r3, [r7, #4] + 800601a: 4a20 ldr r2, [pc, #128] @ (800609c ) + 800601c: 4293 cmp r3, r2 + 800601e: d003 beq.n 8006028 + 8006020: 687b ldr r3, [r7, #4] + 8006022: 4a1f ldr r2, [pc, #124] @ (80060a0 ) + 8006024: 4293 cmp r3, r2 + 8006026: d10c bne.n 8006042 + 8006028: 697b ldr r3, [r7, #20] + 800602a: f023 0308 bic.w r3, r3, #8 + 800602e: 617b str r3, [r7, #20] + 8006030: 683b ldr r3, [r7, #0] + 8006032: 68db ldr r3, [r3, #12] + 8006034: 697a ldr r2, [r7, #20] + 8006036: 4313 orrs r3, r2 + 8006038: 617b str r3, [r7, #20] + 800603a: 697b ldr r3, [r7, #20] + 800603c: f023 0304 bic.w r3, r3, #4 + 8006040: 617b str r3, [r7, #20] + 8006042: 687b ldr r3, [r7, #4] + 8006044: 4a15 ldr r2, [pc, #84] @ (800609c ) + 8006046: 4293 cmp r3, r2 + 8006048: d003 beq.n 8006052 + 800604a: 687b ldr r3, [r7, #4] + 800604c: 4a14 ldr r2, [pc, #80] @ (80060a0 ) + 800604e: 4293 cmp r3, r2 + 8006050: d111 bne.n 8006076 + 8006052: 693b ldr r3, [r7, #16] + 8006054: f423 7380 bic.w r3, r3, #256 @ 0x100 + 8006058: 613b str r3, [r7, #16] + 800605a: 693b ldr r3, [r7, #16] + 800605c: f423 7300 bic.w r3, r3, #512 @ 0x200 + 8006060: 613b str r3, [r7, #16] + 8006062: 683b ldr r3, [r7, #0] + 8006064: 695b ldr r3, [r3, #20] + 8006066: 693a ldr r2, [r7, #16] + 8006068: 4313 orrs r3, r2 + 800606a: 613b str r3, [r7, #16] + 800606c: 683b ldr r3, [r7, #0] + 800606e: 699b ldr r3, [r3, #24] + 8006070: 693a ldr r2, [r7, #16] + 8006072: 4313 orrs r3, r2 + 8006074: 613b str r3, [r7, #16] + 8006076: 687b ldr r3, [r7, #4] + 8006078: 693a ldr r2, [r7, #16] + 800607a: 605a str r2, [r3, #4] + 800607c: 687b ldr r3, [r7, #4] + 800607e: 68fa ldr r2, [r7, #12] + 8006080: 619a str r2, [r3, #24] + 8006082: 683b ldr r3, [r7, #0] + 8006084: 685a ldr r2, [r3, #4] + 8006086: 687b ldr r3, [r7, #4] + 8006088: 635a str r2, [r3, #52] @ 0x34 + 800608a: 687b ldr r3, [r7, #4] + 800608c: 697a ldr r2, [r7, #20] + 800608e: 621a str r2, [r3, #32] + 8006090: bf00 nop + 8006092: 371c adds r7, #28 + 8006094: 46bd mov sp, r7 + 8006096: f85d 7b04 ldr.w r7, [sp], #4 + 800609a: 4770 bx lr + 800609c: 40010000 .word 0x40010000 + 80060a0: 40010400 .word 0x40010400 + +080060a4 : + 80060a4: b480 push {r7} + 80060a6: b087 sub sp, #28 + 80060a8: af00 add r7, sp, #0 + 80060aa: 6078 str r0, [r7, #4] + 80060ac: 6039 str r1, [r7, #0] + 80060ae: 687b ldr r3, [r7, #4] + 80060b0: 6a1b ldr r3, [r3, #32] + 80060b2: 617b str r3, [r7, #20] + 80060b4: 687b ldr r3, [r7, #4] + 80060b6: 6a1b ldr r3, [r3, #32] + 80060b8: f023 0210 bic.w r2, r3, #16 + 80060bc: 687b ldr r3, [r7, #4] + 80060be: 621a str r2, [r3, #32] + 80060c0: 687b ldr r3, [r7, #4] + 80060c2: 685b ldr r3, [r3, #4] + 80060c4: 613b str r3, [r7, #16] + 80060c6: 687b ldr r3, [r7, #4] + 80060c8: 699b ldr r3, [r3, #24] + 80060ca: 60fb str r3, [r7, #12] + 80060cc: 68fb ldr r3, [r7, #12] + 80060ce: f423 43e0 bic.w r3, r3, #28672 @ 0x7000 + 80060d2: 60fb str r3, [r7, #12] + 80060d4: 68fb ldr r3, [r7, #12] + 80060d6: f423 7340 bic.w r3, r3, #768 @ 0x300 + 80060da: 60fb str r3, [r7, #12] + 80060dc: 683b ldr r3, [r7, #0] + 80060de: 681b ldr r3, [r3, #0] + 80060e0: 021b lsls r3, r3, #8 + 80060e2: 68fa ldr r2, [r7, #12] + 80060e4: 4313 orrs r3, r2 + 80060e6: 60fb str r3, [r7, #12] + 80060e8: 697b ldr r3, [r7, #20] + 80060ea: f023 0320 bic.w r3, r3, #32 + 80060ee: 617b str r3, [r7, #20] + 80060f0: 683b ldr r3, [r7, #0] + 80060f2: 689b ldr r3, [r3, #8] + 80060f4: 011b lsls r3, r3, #4 + 80060f6: 697a ldr r2, [r7, #20] + 80060f8: 4313 orrs r3, r2 + 80060fa: 617b str r3, [r7, #20] + 80060fc: 687b ldr r3, [r7, #4] + 80060fe: 4a22 ldr r2, [pc, #136] @ (8006188 ) + 8006100: 4293 cmp r3, r2 + 8006102: d003 beq.n 800610c + 8006104: 687b ldr r3, [r7, #4] + 8006106: 4a21 ldr r2, [pc, #132] @ (800618c ) + 8006108: 4293 cmp r3, r2 + 800610a: d10d bne.n 8006128 + 800610c: 697b ldr r3, [r7, #20] + 800610e: f023 0380 bic.w r3, r3, #128 @ 0x80 + 8006112: 617b str r3, [r7, #20] + 8006114: 683b ldr r3, [r7, #0] + 8006116: 68db ldr r3, [r3, #12] + 8006118: 011b lsls r3, r3, #4 + 800611a: 697a ldr r2, [r7, #20] + 800611c: 4313 orrs r3, r2 + 800611e: 617b str r3, [r7, #20] + 8006120: 697b ldr r3, [r7, #20] + 8006122: f023 0340 bic.w r3, r3, #64 @ 0x40 + 8006126: 617b str r3, [r7, #20] + 8006128: 687b ldr r3, [r7, #4] + 800612a: 4a17 ldr r2, [pc, #92] @ (8006188 ) + 800612c: 4293 cmp r3, r2 + 800612e: d003 beq.n 8006138 + 8006130: 687b ldr r3, [r7, #4] + 8006132: 4a16 ldr r2, [pc, #88] @ (800618c ) + 8006134: 4293 cmp r3, r2 + 8006136: d113 bne.n 8006160 + 8006138: 693b ldr r3, [r7, #16] + 800613a: f423 6380 bic.w r3, r3, #1024 @ 0x400 + 800613e: 613b str r3, [r7, #16] + 8006140: 693b ldr r3, [r7, #16] + 8006142: f423 6300 bic.w r3, r3, #2048 @ 0x800 + 8006146: 613b str r3, [r7, #16] + 8006148: 683b ldr r3, [r7, #0] + 800614a: 695b ldr r3, [r3, #20] + 800614c: 009b lsls r3, r3, #2 + 800614e: 693a ldr r2, [r7, #16] + 8006150: 4313 orrs r3, r2 + 8006152: 613b str r3, [r7, #16] + 8006154: 683b ldr r3, [r7, #0] + 8006156: 699b ldr r3, [r3, #24] + 8006158: 009b lsls r3, r3, #2 + 800615a: 693a ldr r2, [r7, #16] + 800615c: 4313 orrs r3, r2 + 800615e: 613b str r3, [r7, #16] + 8006160: 687b ldr r3, [r7, #4] + 8006162: 693a ldr r2, [r7, #16] + 8006164: 605a str r2, [r3, #4] + 8006166: 687b ldr r3, [r7, #4] + 8006168: 68fa ldr r2, [r7, #12] + 800616a: 619a str r2, [r3, #24] + 800616c: 683b ldr r3, [r7, #0] + 800616e: 685a ldr r2, [r3, #4] + 8006170: 687b ldr r3, [r7, #4] + 8006172: 639a str r2, [r3, #56] @ 0x38 + 8006174: 687b ldr r3, [r7, #4] + 8006176: 697a ldr r2, [r7, #20] + 8006178: 621a str r2, [r3, #32] + 800617a: bf00 nop + 800617c: 371c adds r7, #28 + 800617e: 46bd mov sp, r7 + 8006180: f85d 7b04 ldr.w r7, [sp], #4 + 8006184: 4770 bx lr + 8006186: bf00 nop + 8006188: 40010000 .word 0x40010000 + 800618c: 40010400 .word 0x40010400 + +08006190 : + 8006190: b480 push {r7} + 8006192: b087 sub sp, #28 + 8006194: af00 add r7, sp, #0 + 8006196: 6078 str r0, [r7, #4] + 8006198: 6039 str r1, [r7, #0] + 800619a: 687b ldr r3, [r7, #4] + 800619c: 6a1b ldr r3, [r3, #32] + 800619e: 617b str r3, [r7, #20] + 80061a0: 687b ldr r3, [r7, #4] + 80061a2: 6a1b ldr r3, [r3, #32] + 80061a4: f423 7280 bic.w r2, r3, #256 @ 0x100 + 80061a8: 687b ldr r3, [r7, #4] + 80061aa: 621a str r2, [r3, #32] + 80061ac: 687b ldr r3, [r7, #4] + 80061ae: 685b ldr r3, [r3, #4] + 80061b0: 613b str r3, [r7, #16] + 80061b2: 687b ldr r3, [r7, #4] + 80061b4: 69db ldr r3, [r3, #28] + 80061b6: 60fb str r3, [r7, #12] + 80061b8: 68fb ldr r3, [r7, #12] + 80061ba: f023 0370 bic.w r3, r3, #112 @ 0x70 + 80061be: 60fb str r3, [r7, #12] + 80061c0: 68fb ldr r3, [r7, #12] + 80061c2: f023 0303 bic.w r3, r3, #3 + 80061c6: 60fb str r3, [r7, #12] + 80061c8: 683b ldr r3, [r7, #0] + 80061ca: 681b ldr r3, [r3, #0] + 80061cc: 68fa ldr r2, [r7, #12] + 80061ce: 4313 orrs r3, r2 + 80061d0: 60fb str r3, [r7, #12] + 80061d2: 697b ldr r3, [r7, #20] + 80061d4: f423 7300 bic.w r3, r3, #512 @ 0x200 + 80061d8: 617b str r3, [r7, #20] + 80061da: 683b ldr r3, [r7, #0] + 80061dc: 689b ldr r3, [r3, #8] + 80061de: 021b lsls r3, r3, #8 + 80061e0: 697a ldr r2, [r7, #20] + 80061e2: 4313 orrs r3, r2 + 80061e4: 617b str r3, [r7, #20] + 80061e6: 687b ldr r3, [r7, #4] + 80061e8: 4a21 ldr r2, [pc, #132] @ (8006270 ) + 80061ea: 4293 cmp r3, r2 + 80061ec: d003 beq.n 80061f6 + 80061ee: 687b ldr r3, [r7, #4] + 80061f0: 4a20 ldr r2, [pc, #128] @ (8006274 ) + 80061f2: 4293 cmp r3, r2 + 80061f4: d10d bne.n 8006212 + 80061f6: 697b ldr r3, [r7, #20] + 80061f8: f423 6300 bic.w r3, r3, #2048 @ 0x800 + 80061fc: 617b str r3, [r7, #20] + 80061fe: 683b ldr r3, [r7, #0] + 8006200: 68db ldr r3, [r3, #12] + 8006202: 021b lsls r3, r3, #8 + 8006204: 697a ldr r2, [r7, #20] + 8006206: 4313 orrs r3, r2 + 8006208: 617b str r3, [r7, #20] + 800620a: 697b ldr r3, [r7, #20] + 800620c: f423 6380 bic.w r3, r3, #1024 @ 0x400 + 8006210: 617b str r3, [r7, #20] + 8006212: 687b ldr r3, [r7, #4] + 8006214: 4a16 ldr r2, [pc, #88] @ (8006270 ) + 8006216: 4293 cmp r3, r2 + 8006218: d003 beq.n 8006222 + 800621a: 687b ldr r3, [r7, #4] + 800621c: 4a15 ldr r2, [pc, #84] @ (8006274 ) + 800621e: 4293 cmp r3, r2 + 8006220: d113 bne.n 800624a + 8006222: 693b ldr r3, [r7, #16] + 8006224: f423 5380 bic.w r3, r3, #4096 @ 0x1000 + 8006228: 613b str r3, [r7, #16] + 800622a: 693b ldr r3, [r7, #16] + 800622c: f423 5300 bic.w r3, r3, #8192 @ 0x2000 + 8006230: 613b str r3, [r7, #16] + 8006232: 683b ldr r3, [r7, #0] + 8006234: 695b ldr r3, [r3, #20] + 8006236: 011b lsls r3, r3, #4 + 8006238: 693a ldr r2, [r7, #16] + 800623a: 4313 orrs r3, r2 + 800623c: 613b str r3, [r7, #16] + 800623e: 683b ldr r3, [r7, #0] + 8006240: 699b ldr r3, [r3, #24] + 8006242: 011b lsls r3, r3, #4 + 8006244: 693a ldr r2, [r7, #16] + 8006246: 4313 orrs r3, r2 + 8006248: 613b str r3, [r7, #16] + 800624a: 687b ldr r3, [r7, #4] + 800624c: 693a ldr r2, [r7, #16] + 800624e: 605a str r2, [r3, #4] + 8006250: 687b ldr r3, [r7, #4] + 8006252: 68fa ldr r2, [r7, #12] + 8006254: 61da str r2, [r3, #28] + 8006256: 683b ldr r3, [r7, #0] + 8006258: 685a ldr r2, [r3, #4] + 800625a: 687b ldr r3, [r7, #4] + 800625c: 63da str r2, [r3, #60] @ 0x3c + 800625e: 687b ldr r3, [r7, #4] + 8006260: 697a ldr r2, [r7, #20] + 8006262: 621a str r2, [r3, #32] + 8006264: bf00 nop + 8006266: 371c adds r7, #28 + 8006268: 46bd mov sp, r7 + 800626a: f85d 7b04 ldr.w r7, [sp], #4 + 800626e: 4770 bx lr + 8006270: 40010000 .word 0x40010000 + 8006274: 40010400 .word 0x40010400 + +08006278 : + 8006278: b480 push {r7} + 800627a: b087 sub sp, #28 + 800627c: af00 add r7, sp, #0 + 800627e: 6078 str r0, [r7, #4] + 8006280: 6039 str r1, [r7, #0] + 8006282: 687b ldr r3, [r7, #4] + 8006284: 6a1b ldr r3, [r3, #32] + 8006286: 613b str r3, [r7, #16] + 8006288: 687b ldr r3, [r7, #4] + 800628a: 6a1b ldr r3, [r3, #32] + 800628c: f423 5280 bic.w r2, r3, #4096 @ 0x1000 + 8006290: 687b ldr r3, [r7, #4] + 8006292: 621a str r2, [r3, #32] + 8006294: 687b ldr r3, [r7, #4] + 8006296: 685b ldr r3, [r3, #4] + 8006298: 617b str r3, [r7, #20] + 800629a: 687b ldr r3, [r7, #4] + 800629c: 69db ldr r3, [r3, #28] + 800629e: 60fb str r3, [r7, #12] + 80062a0: 68fb ldr r3, [r7, #12] + 80062a2: f423 43e0 bic.w r3, r3, #28672 @ 0x7000 + 80062a6: 60fb str r3, [r7, #12] + 80062a8: 68fb ldr r3, [r7, #12] + 80062aa: f423 7340 bic.w r3, r3, #768 @ 0x300 + 80062ae: 60fb str r3, [r7, #12] + 80062b0: 683b ldr r3, [r7, #0] + 80062b2: 681b ldr r3, [r3, #0] + 80062b4: 021b lsls r3, r3, #8 + 80062b6: 68fa ldr r2, [r7, #12] + 80062b8: 4313 orrs r3, r2 + 80062ba: 60fb str r3, [r7, #12] + 80062bc: 693b ldr r3, [r7, #16] + 80062be: f423 5300 bic.w r3, r3, #8192 @ 0x2000 + 80062c2: 613b str r3, [r7, #16] + 80062c4: 683b ldr r3, [r7, #0] + 80062c6: 689b ldr r3, [r3, #8] + 80062c8: 031b lsls r3, r3, #12 + 80062ca: 693a ldr r2, [r7, #16] + 80062cc: 4313 orrs r3, r2 + 80062ce: 613b str r3, [r7, #16] + 80062d0: 687b ldr r3, [r7, #4] + 80062d2: 4a12 ldr r2, [pc, #72] @ (800631c ) + 80062d4: 4293 cmp r3, r2 + 80062d6: d003 beq.n 80062e0 + 80062d8: 687b ldr r3, [r7, #4] + 80062da: 4a11 ldr r2, [pc, #68] @ (8006320 ) + 80062dc: 4293 cmp r3, r2 + 80062de: d109 bne.n 80062f4 + 80062e0: 697b ldr r3, [r7, #20] + 80062e2: f423 4380 bic.w r3, r3, #16384 @ 0x4000 + 80062e6: 617b str r3, [r7, #20] + 80062e8: 683b ldr r3, [r7, #0] + 80062ea: 695b ldr r3, [r3, #20] + 80062ec: 019b lsls r3, r3, #6 + 80062ee: 697a ldr r2, [r7, #20] + 80062f0: 4313 orrs r3, r2 + 80062f2: 617b str r3, [r7, #20] + 80062f4: 687b ldr r3, [r7, #4] + 80062f6: 697a ldr r2, [r7, #20] + 80062f8: 605a str r2, [r3, #4] + 80062fa: 687b ldr r3, [r7, #4] + 80062fc: 68fa ldr r2, [r7, #12] + 80062fe: 61da str r2, [r3, #28] + 8006300: 683b ldr r3, [r7, #0] + 8006302: 685a ldr r2, [r3, #4] + 8006304: 687b ldr r3, [r7, #4] + 8006306: 641a str r2, [r3, #64] @ 0x40 + 8006308: 687b ldr r3, [r7, #4] + 800630a: 693a ldr r2, [r7, #16] + 800630c: 621a str r2, [r3, #32] + 800630e: bf00 nop + 8006310: 371c adds r7, #28 + 8006312: 46bd mov sp, r7 + 8006314: f85d 7b04 ldr.w r7, [sp], #4 + 8006318: 4770 bx lr + 800631a: bf00 nop + 800631c: 40010000 .word 0x40010000 + 8006320: 40010400 .word 0x40010400 + +08006324 : + 8006324: b480 push {r7} + 8006326: b087 sub sp, #28 + 8006328: af00 add r7, sp, #0 + 800632a: 60f8 str r0, [r7, #12] + 800632c: 60b9 str r1, [r7, #8] + 800632e: 607a str r2, [r7, #4] + 8006330: 68bb ldr r3, [r7, #8] + 8006332: f003 031f and.w r3, r3, #31 + 8006336: 2201 movs r2, #1 + 8006338: fa02 f303 lsl.w r3, r2, r3 + 800633c: 617b str r3, [r7, #20] + 800633e: 68fb ldr r3, [r7, #12] + 8006340: 6a1a ldr r2, [r3, #32] + 8006342: 697b ldr r3, [r7, #20] + 8006344: 43db mvns r3, r3 + 8006346: 401a ands r2, r3 + 8006348: 68fb ldr r3, [r7, #12] + 800634a: 621a str r2, [r3, #32] + 800634c: 68fb ldr r3, [r7, #12] + 800634e: 6a1a ldr r2, [r3, #32] + 8006350: 68bb ldr r3, [r7, #8] + 8006352: f003 031f and.w r3, r3, #31 + 8006356: 6879 ldr r1, [r7, #4] + 8006358: fa01 f303 lsl.w r3, r1, r3 + 800635c: 431a orrs r2, r3 + 800635e: 68fb ldr r3, [r7, #12] + 8006360: 621a str r2, [r3, #32] + 8006362: bf00 nop + 8006364: 371c adds r7, #28 + 8006366: 46bd mov sp, r7 + 8006368: f85d 7b04 ldr.w r7, [sp], #4 + 800636c: 4770 bx lr + ... + +08006370 : + 8006370: b480 push {r7} + 8006372: b085 sub sp, #20 + 8006374: af00 add r7, sp, #0 + 8006376: 6078 str r0, [r7, #4] + 8006378: 6039 str r1, [r7, #0] + 800637a: 687b ldr r3, [r7, #4] + 800637c: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 8006380: 2b01 cmp r3, #1 + 8006382: d101 bne.n 8006388 + 8006384: 2302 movs r3, #2 + 8006386: e05a b.n 800643e + 8006388: 687b ldr r3, [r7, #4] + 800638a: 2201 movs r2, #1 + 800638c: f883 203c strb.w r2, [r3, #60] @ 0x3c + 8006390: 687b ldr r3, [r7, #4] + 8006392: 2202 movs r2, #2 + 8006394: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8006398: 687b ldr r3, [r7, #4] + 800639a: 681b ldr r3, [r3, #0] + 800639c: 685b ldr r3, [r3, #4] + 800639e: 60fb str r3, [r7, #12] + 80063a0: 687b ldr r3, [r7, #4] + 80063a2: 681b ldr r3, [r3, #0] + 80063a4: 689b ldr r3, [r3, #8] + 80063a6: 60bb str r3, [r7, #8] + 80063a8: 68fb ldr r3, [r7, #12] + 80063aa: f023 0370 bic.w r3, r3, #112 @ 0x70 + 80063ae: 60fb str r3, [r7, #12] + 80063b0: 683b ldr r3, [r7, #0] + 80063b2: 681b ldr r3, [r3, #0] + 80063b4: 68fa ldr r2, [r7, #12] + 80063b6: 4313 orrs r3, r2 + 80063b8: 60fb str r3, [r7, #12] + 80063ba: 687b ldr r3, [r7, #4] + 80063bc: 681b ldr r3, [r3, #0] + 80063be: 68fa ldr r2, [r7, #12] + 80063c0: 605a str r2, [r3, #4] + 80063c2: 687b ldr r3, [r7, #4] + 80063c4: 681b ldr r3, [r3, #0] + 80063c6: 4a21 ldr r2, [pc, #132] @ (800644c ) + 80063c8: 4293 cmp r3, r2 + 80063ca: d022 beq.n 8006412 + 80063cc: 687b ldr r3, [r7, #4] + 80063ce: 681b ldr r3, [r3, #0] + 80063d0: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 80063d4: d01d beq.n 8006412 + 80063d6: 687b ldr r3, [r7, #4] + 80063d8: 681b ldr r3, [r3, #0] + 80063da: 4a1d ldr r2, [pc, #116] @ (8006450 ) + 80063dc: 4293 cmp r3, r2 + 80063de: d018 beq.n 8006412 + 80063e0: 687b ldr r3, [r7, #4] + 80063e2: 681b ldr r3, [r3, #0] + 80063e4: 4a1b ldr r2, [pc, #108] @ (8006454 ) + 80063e6: 4293 cmp r3, r2 + 80063e8: d013 beq.n 8006412 + 80063ea: 687b ldr r3, [r7, #4] + 80063ec: 681b ldr r3, [r3, #0] + 80063ee: 4a1a ldr r2, [pc, #104] @ (8006458 ) + 80063f0: 4293 cmp r3, r2 + 80063f2: d00e beq.n 8006412 + 80063f4: 687b ldr r3, [r7, #4] + 80063f6: 681b ldr r3, [r3, #0] + 80063f8: 4a18 ldr r2, [pc, #96] @ (800645c ) + 80063fa: 4293 cmp r3, r2 + 80063fc: d009 beq.n 8006412 + 80063fe: 687b ldr r3, [r7, #4] + 8006400: 681b ldr r3, [r3, #0] + 8006402: 4a17 ldr r2, [pc, #92] @ (8006460 ) + 8006404: 4293 cmp r3, r2 + 8006406: d004 beq.n 8006412 + 8006408: 687b ldr r3, [r7, #4] + 800640a: 681b ldr r3, [r3, #0] + 800640c: 4a15 ldr r2, [pc, #84] @ (8006464 ) + 800640e: 4293 cmp r3, r2 + 8006410: d10c bne.n 800642c + 8006412: 68bb ldr r3, [r7, #8] + 8006414: f023 0380 bic.w r3, r3, #128 @ 0x80 + 8006418: 60bb str r3, [r7, #8] + 800641a: 683b ldr r3, [r7, #0] + 800641c: 685b ldr r3, [r3, #4] + 800641e: 68ba ldr r2, [r7, #8] + 8006420: 4313 orrs r3, r2 + 8006422: 60bb str r3, [r7, #8] + 8006424: 687b ldr r3, [r7, #4] + 8006426: 681b ldr r3, [r3, #0] + 8006428: 68ba ldr r2, [r7, #8] + 800642a: 609a str r2, [r3, #8] + 800642c: 687b ldr r3, [r7, #4] + 800642e: 2201 movs r2, #1 + 8006430: f883 203d strb.w r2, [r3, #61] @ 0x3d + 8006434: 687b ldr r3, [r7, #4] + 8006436: 2200 movs r2, #0 + 8006438: f883 203c strb.w r2, [r3, #60] @ 0x3c + 800643c: 2300 movs r3, #0 + 800643e: 4618 mov r0, r3 + 8006440: 3714 adds r7, #20 + 8006442: 46bd mov sp, r7 + 8006444: f85d 7b04 ldr.w r7, [sp], #4 + 8006448: 4770 bx lr + 800644a: bf00 nop + 800644c: 40010000 .word 0x40010000 + 8006450: 40000400 .word 0x40000400 + 8006454: 40000800 .word 0x40000800 + 8006458: 40000c00 .word 0x40000c00 + 800645c: 40010400 .word 0x40010400 + 8006460: 40014000 .word 0x40014000 + 8006464: 40001800 .word 0x40001800 + +08006468 : + 8006468: b580 push {r7, lr} + 800646a: b082 sub sp, #8 + 800646c: af00 add r7, sp, #0 + 800646e: 6078 str r0, [r7, #4] + 8006470: 687b ldr r3, [r7, #4] + 8006472: 2b00 cmp r3, #0 + 8006474: d101 bne.n 800647a + 8006476: 2301 movs r3, #1 + 8006478: e042 b.n 8006500 + 800647a: 687b ldr r3, [r7, #4] + 800647c: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8006480: b2db uxtb r3, r3 + 8006482: 2b00 cmp r3, #0 + 8006484: d106 bne.n 8006494 + 8006486: 687b ldr r3, [r7, #4] + 8006488: 2200 movs r2, #0 + 800648a: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 800648e: 6878 ldr r0, [r7, #4] + 8006490: f7fb f9f8 bl 8001884 + 8006494: 687b ldr r3, [r7, #4] + 8006496: 2224 movs r2, #36 @ 0x24 + 8006498: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 800649c: 687b ldr r3, [r7, #4] + 800649e: 681b ldr r3, [r3, #0] + 80064a0: 68da ldr r2, [r3, #12] + 80064a2: 687b ldr r3, [r7, #4] + 80064a4: 681b ldr r3, [r3, #0] + 80064a6: f422 5200 bic.w r2, r2, #8192 @ 0x2000 + 80064aa: 60da str r2, [r3, #12] + 80064ac: 6878 ldr r0, [r7, #4] + 80064ae: f000 ff63 bl 8007378 + 80064b2: 687b ldr r3, [r7, #4] + 80064b4: 681b ldr r3, [r3, #0] + 80064b6: 691a ldr r2, [r3, #16] + 80064b8: 687b ldr r3, [r7, #4] + 80064ba: 681b ldr r3, [r3, #0] + 80064bc: f422 4290 bic.w r2, r2, #18432 @ 0x4800 + 80064c0: 611a str r2, [r3, #16] + 80064c2: 687b ldr r3, [r7, #4] + 80064c4: 681b ldr r3, [r3, #0] + 80064c6: 695a ldr r2, [r3, #20] + 80064c8: 687b ldr r3, [r7, #4] + 80064ca: 681b ldr r3, [r3, #0] + 80064cc: f022 022a bic.w r2, r2, #42 @ 0x2a + 80064d0: 615a str r2, [r3, #20] + 80064d2: 687b ldr r3, [r7, #4] + 80064d4: 681b ldr r3, [r3, #0] + 80064d6: 68da ldr r2, [r3, #12] + 80064d8: 687b ldr r3, [r7, #4] + 80064da: 681b ldr r3, [r3, #0] + 80064dc: f442 5200 orr.w r2, r2, #8192 @ 0x2000 + 80064e0: 60da str r2, [r3, #12] + 80064e2: 687b ldr r3, [r7, #4] + 80064e4: 2200 movs r2, #0 + 80064e6: 645a str r2, [r3, #68] @ 0x44 + 80064e8: 687b ldr r3, [r7, #4] + 80064ea: 2220 movs r2, #32 + 80064ec: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 80064f0: 687b ldr r3, [r7, #4] + 80064f2: 2220 movs r2, #32 + 80064f4: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 80064f8: 687b ldr r3, [r7, #4] + 80064fa: 2200 movs r2, #0 + 80064fc: 635a str r2, [r3, #52] @ 0x34 + 80064fe: 2300 movs r3, #0 + 8006500: 4618 mov r0, r3 + 8006502: 3708 adds r7, #8 + 8006504: 46bd mov sp, r7 + 8006506: bd80 pop {r7, pc} + +08006508 : + 8006508: b580 push {r7, lr} + 800650a: b08c sub sp, #48 @ 0x30 + 800650c: af00 add r7, sp, #0 + 800650e: 60f8 str r0, [r7, #12] + 8006510: 60b9 str r1, [r7, #8] + 8006512: 4613 mov r3, r2 + 8006514: 80fb strh r3, [r7, #6] + 8006516: 68fb ldr r3, [r7, #12] + 8006518: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 800651c: b2db uxtb r3, r3 + 800651e: 2b20 cmp r3, #32 + 8006520: d162 bne.n 80065e8 + 8006522: 68bb ldr r3, [r7, #8] + 8006524: 2b00 cmp r3, #0 + 8006526: d002 beq.n 800652e + 8006528: 88fb ldrh r3, [r7, #6] + 800652a: 2b00 cmp r3, #0 + 800652c: d101 bne.n 8006532 + 800652e: 2301 movs r3, #1 + 8006530: e05b b.n 80065ea + 8006532: 68ba ldr r2, [r7, #8] + 8006534: 68fb ldr r3, [r7, #12] + 8006536: 621a str r2, [r3, #32] + 8006538: 68fb ldr r3, [r7, #12] + 800653a: 88fa ldrh r2, [r7, #6] + 800653c: 849a strh r2, [r3, #36] @ 0x24 + 800653e: 68fb ldr r3, [r7, #12] + 8006540: 88fa ldrh r2, [r7, #6] + 8006542: 84da strh r2, [r3, #38] @ 0x26 + 8006544: 68fb ldr r3, [r7, #12] + 8006546: 2200 movs r2, #0 + 8006548: 645a str r2, [r3, #68] @ 0x44 + 800654a: 68fb ldr r3, [r7, #12] + 800654c: 2221 movs r2, #33 @ 0x21 + 800654e: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 8006552: 68fb ldr r3, [r7, #12] + 8006554: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006556: 4a27 ldr r2, [pc, #156] @ (80065f4 ) + 8006558: 63da str r2, [r3, #60] @ 0x3c + 800655a: 68fb ldr r3, [r7, #12] + 800655c: 6b9b ldr r3, [r3, #56] @ 0x38 + 800655e: 4a26 ldr r2, [pc, #152] @ (80065f8 ) + 8006560: 641a str r2, [r3, #64] @ 0x40 + 8006562: 68fb ldr r3, [r7, #12] + 8006564: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006566: 4a25 ldr r2, [pc, #148] @ (80065fc ) + 8006568: 64da str r2, [r3, #76] @ 0x4c + 800656a: 68fb ldr r3, [r7, #12] + 800656c: 6b9b ldr r3, [r3, #56] @ 0x38 + 800656e: 2200 movs r2, #0 + 8006570: 651a str r2, [r3, #80] @ 0x50 + 8006572: f107 0308 add.w r3, r7, #8 + 8006576: 62fb str r3, [r7, #44] @ 0x2c + 8006578: 68fb ldr r3, [r7, #12] + 800657a: 6b98 ldr r0, [r3, #56] @ 0x38 + 800657c: 6afb ldr r3, [r7, #44] @ 0x2c + 800657e: 6819 ldr r1, [r3, #0] + 8006580: 68fb ldr r3, [r7, #12] + 8006582: 681b ldr r3, [r3, #0] + 8006584: 3304 adds r3, #4 + 8006586: 461a mov r2, r3 + 8006588: 88fb ldrh r3, [r7, #6] + 800658a: f7fb febd bl 8002308 + 800658e: 4603 mov r3, r0 + 8006590: 2b00 cmp r3, #0 + 8006592: d008 beq.n 80065a6 + 8006594: 68fb ldr r3, [r7, #12] + 8006596: 2210 movs r2, #16 + 8006598: 645a str r2, [r3, #68] @ 0x44 + 800659a: 68fb ldr r3, [r7, #12] + 800659c: 2220 movs r2, #32 + 800659e: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 80065a2: 2301 movs r3, #1 + 80065a4: e021 b.n 80065ea + 80065a6: 68fb ldr r3, [r7, #12] + 80065a8: 681b ldr r3, [r3, #0] + 80065aa: f06f 0240 mvn.w r2, #64 @ 0x40 + 80065ae: 601a str r2, [r3, #0] + 80065b0: 68fb ldr r3, [r7, #12] + 80065b2: 681b ldr r3, [r3, #0] + 80065b4: 3314 adds r3, #20 + 80065b6: 61bb str r3, [r7, #24] + 80065b8: 69bb ldr r3, [r7, #24] + 80065ba: e853 3f00 ldrex r3, [r3] + 80065be: 617b str r3, [r7, #20] + 80065c0: 697b ldr r3, [r7, #20] + 80065c2: f043 0380 orr.w r3, r3, #128 @ 0x80 + 80065c6: 62bb str r3, [r7, #40] @ 0x28 + 80065c8: 68fb ldr r3, [r7, #12] + 80065ca: 681b ldr r3, [r3, #0] + 80065cc: 3314 adds r3, #20 + 80065ce: 6aba ldr r2, [r7, #40] @ 0x28 + 80065d0: 627a str r2, [r7, #36] @ 0x24 + 80065d2: 623b str r3, [r7, #32] + 80065d4: 6a39 ldr r1, [r7, #32] + 80065d6: 6a7a ldr r2, [r7, #36] @ 0x24 + 80065d8: e841 2300 strex r3, r2, [r1] + 80065dc: 61fb str r3, [r7, #28] + 80065de: 69fb ldr r3, [r7, #28] + 80065e0: 2b00 cmp r3, #0 + 80065e2: d1e5 bne.n 80065b0 + 80065e4: 2300 movs r3, #0 + 80065e6: e000 b.n 80065ea + 80065e8: 2302 movs r3, #2 + 80065ea: 4618 mov r0, r3 + 80065ec: 3730 adds r7, #48 @ 0x30 + 80065ee: 46bd mov sp, r7 + 80065f0: bd80 pop {r7, pc} + 80065f2: bf00 nop + 80065f4: 08006bf5 .word 0x08006bf5 + 80065f8: 08006c8f .word 0x08006c8f + 80065fc: 08006e13 .word 0x08006e13 + +08006600 : + 8006600: b580 push {r7, lr} + 8006602: b084 sub sp, #16 + 8006604: af00 add r7, sp, #0 + 8006606: 60f8 str r0, [r7, #12] + 8006608: 60b9 str r1, [r7, #8] + 800660a: 4613 mov r3, r2 + 800660c: 80fb strh r3, [r7, #6] + 800660e: 68fb ldr r3, [r7, #12] + 8006610: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 8006614: b2db uxtb r3, r3 + 8006616: 2b20 cmp r3, #32 + 8006618: d112 bne.n 8006640 + 800661a: 68bb ldr r3, [r7, #8] + 800661c: 2b00 cmp r3, #0 + 800661e: d002 beq.n 8006626 + 8006620: 88fb ldrh r3, [r7, #6] + 8006622: 2b00 cmp r3, #0 + 8006624: d101 bne.n 800662a + 8006626: 2301 movs r3, #1 + 8006628: e00b b.n 8006642 + 800662a: 68fb ldr r3, [r7, #12] + 800662c: 2200 movs r2, #0 + 800662e: 631a str r2, [r3, #48] @ 0x30 + 8006630: 88fb ldrh r3, [r7, #6] + 8006632: 461a mov r2, r3 + 8006634: 68b9 ldr r1, [r7, #8] + 8006636: 68f8 ldr r0, [r7, #12] + 8006638: f000 fc36 bl 8006ea8 + 800663c: 4603 mov r3, r0 + 800663e: e000 b.n 8006642 + 8006640: 2302 movs r3, #2 + 8006642: 4618 mov r0, r3 + 8006644: 3710 adds r7, #16 + 8006646: 46bd mov sp, r7 + 8006648: bd80 pop {r7, pc} + ... + +0800664c : + 800664c: b580 push {r7, lr} + 800664e: b0ba sub sp, #232 @ 0xe8 + 8006650: af00 add r7, sp, #0 + 8006652: 6078 str r0, [r7, #4] + 8006654: 687b ldr r3, [r7, #4] + 8006656: 681b ldr r3, [r3, #0] + 8006658: 681b ldr r3, [r3, #0] + 800665a: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4 + 800665e: 687b ldr r3, [r7, #4] + 8006660: 681b ldr r3, [r3, #0] + 8006662: 68db ldr r3, [r3, #12] + 8006664: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0 + 8006668: 687b ldr r3, [r7, #4] + 800666a: 681b ldr r3, [r3, #0] + 800666c: 695b ldr r3, [r3, #20] + 800666e: f8c7 30dc str.w r3, [r7, #220] @ 0xdc + 8006672: 2300 movs r3, #0 + 8006674: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 + 8006678: 2300 movs r3, #0 + 800667a: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4 + 800667e: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006682: f003 030f and.w r3, r3, #15 + 8006686: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 + 800668a: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8 + 800668e: 2b00 cmp r3, #0 + 8006690: d10f bne.n 80066b2 + 8006692: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006696: f003 0320 and.w r3, r3, #32 + 800669a: 2b00 cmp r3, #0 + 800669c: d009 beq.n 80066b2 + 800669e: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80066a2: f003 0320 and.w r3, r3, #32 + 80066a6: 2b00 cmp r3, #0 + 80066a8: d003 beq.n 80066b2 + 80066aa: 6878 ldr r0, [r7, #4] + 80066ac: f000 fda6 bl 80071fc + 80066b0: e273 b.n 8006b9a + 80066b2: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8 + 80066b6: 2b00 cmp r3, #0 + 80066b8: f000 80de beq.w 8006878 + 80066bc: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 80066c0: f003 0301 and.w r3, r3, #1 + 80066c4: 2b00 cmp r3, #0 + 80066c6: d106 bne.n 80066d6 + 80066c8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80066cc: f403 7390 and.w r3, r3, #288 @ 0x120 + 80066d0: 2b00 cmp r3, #0 + 80066d2: f000 80d1 beq.w 8006878 + 80066d6: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80066da: f003 0301 and.w r3, r3, #1 + 80066de: 2b00 cmp r3, #0 + 80066e0: d00b beq.n 80066fa + 80066e2: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80066e6: f403 7380 and.w r3, r3, #256 @ 0x100 + 80066ea: 2b00 cmp r3, #0 + 80066ec: d005 beq.n 80066fa + 80066ee: 687b ldr r3, [r7, #4] + 80066f0: 6c5b ldr r3, [r3, #68] @ 0x44 + 80066f2: f043 0201 orr.w r2, r3, #1 + 80066f6: 687b ldr r3, [r7, #4] + 80066f8: 645a str r2, [r3, #68] @ 0x44 + 80066fa: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80066fe: f003 0304 and.w r3, r3, #4 + 8006702: 2b00 cmp r3, #0 + 8006704: d00b beq.n 800671e + 8006706: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 800670a: f003 0301 and.w r3, r3, #1 + 800670e: 2b00 cmp r3, #0 + 8006710: d005 beq.n 800671e + 8006712: 687b ldr r3, [r7, #4] + 8006714: 6c5b ldr r3, [r3, #68] @ 0x44 + 8006716: f043 0202 orr.w r2, r3, #2 + 800671a: 687b ldr r3, [r7, #4] + 800671c: 645a str r2, [r3, #68] @ 0x44 + 800671e: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006722: f003 0302 and.w r3, r3, #2 + 8006726: 2b00 cmp r3, #0 + 8006728: d00b beq.n 8006742 + 800672a: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 800672e: f003 0301 and.w r3, r3, #1 + 8006732: 2b00 cmp r3, #0 + 8006734: d005 beq.n 8006742 + 8006736: 687b ldr r3, [r7, #4] + 8006738: 6c5b ldr r3, [r3, #68] @ 0x44 + 800673a: f043 0204 orr.w r2, r3, #4 + 800673e: 687b ldr r3, [r7, #4] + 8006740: 645a str r2, [r3, #68] @ 0x44 + 8006742: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006746: f003 0308 and.w r3, r3, #8 + 800674a: 2b00 cmp r3, #0 + 800674c: d011 beq.n 8006772 + 800674e: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8006752: f003 0320 and.w r3, r3, #32 + 8006756: 2b00 cmp r3, #0 + 8006758: d105 bne.n 8006766 + 800675a: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 800675e: f003 0301 and.w r3, r3, #1 + 8006762: 2b00 cmp r3, #0 + 8006764: d005 beq.n 8006772 + 8006766: 687b ldr r3, [r7, #4] + 8006768: 6c5b ldr r3, [r3, #68] @ 0x44 + 800676a: f043 0208 orr.w r2, r3, #8 + 800676e: 687b ldr r3, [r7, #4] + 8006770: 645a str r2, [r3, #68] @ 0x44 + 8006772: 687b ldr r3, [r7, #4] + 8006774: 6c5b ldr r3, [r3, #68] @ 0x44 + 8006776: 2b00 cmp r3, #0 + 8006778: f000 820a beq.w 8006b90 + 800677c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006780: f003 0320 and.w r3, r3, #32 + 8006784: 2b00 cmp r3, #0 + 8006786: d008 beq.n 800679a + 8006788: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 800678c: f003 0320 and.w r3, r3, #32 + 8006790: 2b00 cmp r3, #0 + 8006792: d002 beq.n 800679a + 8006794: 6878 ldr r0, [r7, #4] + 8006796: f000 fd31 bl 80071fc + 800679a: 687b ldr r3, [r7, #4] + 800679c: 681b ldr r3, [r3, #0] + 800679e: 695b ldr r3, [r3, #20] + 80067a0: f003 0340 and.w r3, r3, #64 @ 0x40 + 80067a4: 2b40 cmp r3, #64 @ 0x40 + 80067a6: bf0c ite eq + 80067a8: 2301 moveq r3, #1 + 80067aa: 2300 movne r3, #0 + 80067ac: b2db uxtb r3, r3 + 80067ae: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4 + 80067b2: 687b ldr r3, [r7, #4] + 80067b4: 6c5b ldr r3, [r3, #68] @ 0x44 + 80067b6: f003 0308 and.w r3, r3, #8 + 80067ba: 2b00 cmp r3, #0 + 80067bc: d103 bne.n 80067c6 + 80067be: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4 + 80067c2: 2b00 cmp r3, #0 + 80067c4: d04f beq.n 8006866 + 80067c6: 6878 ldr r0, [r7, #4] + 80067c8: f000 fc3c bl 8007044 + 80067cc: 687b ldr r3, [r7, #4] + 80067ce: 681b ldr r3, [r3, #0] + 80067d0: 695b ldr r3, [r3, #20] + 80067d2: f003 0340 and.w r3, r3, #64 @ 0x40 + 80067d6: 2b40 cmp r3, #64 @ 0x40 + 80067d8: d141 bne.n 800685e + 80067da: 687b ldr r3, [r7, #4] + 80067dc: 681b ldr r3, [r3, #0] + 80067de: 3314 adds r3, #20 + 80067e0: f8c7 309c str.w r3, [r7, #156] @ 0x9c + 80067e4: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c + 80067e8: e853 3f00 ldrex r3, [r3] + 80067ec: f8c7 3098 str.w r3, [r7, #152] @ 0x98 + 80067f0: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98 + 80067f4: f023 0340 bic.w r3, r3, #64 @ 0x40 + 80067f8: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0 + 80067fc: 687b ldr r3, [r7, #4] + 80067fe: 681b ldr r3, [r3, #0] + 8006800: 3314 adds r3, #20 + 8006802: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0 + 8006806: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8 + 800680a: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4 + 800680e: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4 + 8006812: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8 + 8006816: e841 2300 strex r3, r2, [r1] + 800681a: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0 + 800681e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0 + 8006822: 2b00 cmp r3, #0 + 8006824: d1d9 bne.n 80067da + 8006826: 687b ldr r3, [r7, #4] + 8006828: 6bdb ldr r3, [r3, #60] @ 0x3c + 800682a: 2b00 cmp r3, #0 + 800682c: d013 beq.n 8006856 + 800682e: 687b ldr r3, [r7, #4] + 8006830: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006832: 4a8a ldr r2, [pc, #552] @ (8006a5c ) + 8006834: 651a str r2, [r3, #80] @ 0x50 + 8006836: 687b ldr r3, [r7, #4] + 8006838: 6bdb ldr r3, [r3, #60] @ 0x3c + 800683a: 4618 mov r0, r3 + 800683c: f7fb fe2c bl 8002498 + 8006840: 4603 mov r3, r0 + 8006842: 2b00 cmp r3, #0 + 8006844: d016 beq.n 8006874 + 8006846: 687b ldr r3, [r7, #4] + 8006848: 6bdb ldr r3, [r3, #60] @ 0x3c + 800684a: 6d1b ldr r3, [r3, #80] @ 0x50 + 800684c: 687a ldr r2, [r7, #4] + 800684e: 6bd2 ldr r2, [r2, #60] @ 0x3c + 8006850: 4610 mov r0, r2 + 8006852: 4798 blx r3 + 8006854: e00e b.n 8006874 + 8006856: 6878 ldr r0, [r7, #4] + 8006858: f7fa fab0 bl 8000dbc + 800685c: e00a b.n 8006874 + 800685e: 6878 ldr r0, [r7, #4] + 8006860: f7fa faac bl 8000dbc + 8006864: e006 b.n 8006874 + 8006866: 6878 ldr r0, [r7, #4] + 8006868: f7fa faa8 bl 8000dbc + 800686c: 687b ldr r3, [r7, #4] + 800686e: 2200 movs r2, #0 + 8006870: 645a str r2, [r3, #68] @ 0x44 + 8006872: e18d b.n 8006b90 + 8006874: bf00 nop + 8006876: e18b b.n 8006b90 + 8006878: 687b ldr r3, [r7, #4] + 800687a: 6b1b ldr r3, [r3, #48] @ 0x30 + 800687c: 2b01 cmp r3, #1 + 800687e: f040 8167 bne.w 8006b50 + 8006882: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006886: f003 0310 and.w r3, r3, #16 + 800688a: 2b00 cmp r3, #0 + 800688c: f000 8160 beq.w 8006b50 + 8006890: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8006894: f003 0310 and.w r3, r3, #16 + 8006898: 2b00 cmp r3, #0 + 800689a: f000 8159 beq.w 8006b50 + 800689e: 2300 movs r3, #0 + 80068a0: 60bb str r3, [r7, #8] + 80068a2: 687b ldr r3, [r7, #4] + 80068a4: 681b ldr r3, [r3, #0] + 80068a6: 681b ldr r3, [r3, #0] + 80068a8: 60bb str r3, [r7, #8] + 80068aa: 687b ldr r3, [r7, #4] + 80068ac: 681b ldr r3, [r3, #0] + 80068ae: 685b ldr r3, [r3, #4] + 80068b0: 60bb str r3, [r7, #8] + 80068b2: 68bb ldr r3, [r7, #8] + 80068b4: 687b ldr r3, [r7, #4] + 80068b6: 681b ldr r3, [r3, #0] + 80068b8: 695b ldr r3, [r3, #20] + 80068ba: f003 0340 and.w r3, r3, #64 @ 0x40 + 80068be: 2b40 cmp r3, #64 @ 0x40 + 80068c0: f040 80ce bne.w 8006a60 + 80068c4: 687b ldr r3, [r7, #4] + 80068c6: 6bdb ldr r3, [r3, #60] @ 0x3c + 80068c8: 681b ldr r3, [r3, #0] + 80068ca: 685b ldr r3, [r3, #4] + 80068cc: f8a7 30be strh.w r3, [r7, #190] @ 0xbe + 80068d0: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe + 80068d4: 2b00 cmp r3, #0 + 80068d6: f000 80a9 beq.w 8006a2c + 80068da: 687b ldr r3, [r7, #4] + 80068dc: 8d9b ldrh r3, [r3, #44] @ 0x2c + 80068de: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe + 80068e2: 429a cmp r2, r3 + 80068e4: f080 80a2 bcs.w 8006a2c + 80068e8: 687b ldr r3, [r7, #4] + 80068ea: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe + 80068ee: 85da strh r2, [r3, #46] @ 0x2e + 80068f0: 687b ldr r3, [r7, #4] + 80068f2: 6bdb ldr r3, [r3, #60] @ 0x3c + 80068f4: 69db ldr r3, [r3, #28] + 80068f6: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 80068fa: f000 8088 beq.w 8006a0e + 80068fe: 687b ldr r3, [r7, #4] + 8006900: 681b ldr r3, [r3, #0] + 8006902: 330c adds r3, #12 + 8006904: f8c7 3088 str.w r3, [r7, #136] @ 0x88 + 8006908: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88 + 800690c: e853 3f00 ldrex r3, [r3] + 8006910: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + 8006914: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84 + 8006918: f423 7380 bic.w r3, r3, #256 @ 0x100 + 800691c: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8 + 8006920: 687b ldr r3, [r7, #4] + 8006922: 681b ldr r3, [r3, #0] + 8006924: 330c adds r3, #12 + 8006926: f8d7 20b8 ldr.w r2, [r7, #184] @ 0xb8 + 800692a: f8c7 2094 str.w r2, [r7, #148] @ 0x94 + 800692e: f8c7 3090 str.w r3, [r7, #144] @ 0x90 + 8006932: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90 + 8006936: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94 + 800693a: e841 2300 strex r3, r2, [r1] + 800693e: f8c7 308c str.w r3, [r7, #140] @ 0x8c + 8006942: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c + 8006946: 2b00 cmp r3, #0 + 8006948: d1d9 bne.n 80068fe + 800694a: 687b ldr r3, [r7, #4] + 800694c: 681b ldr r3, [r3, #0] + 800694e: 3314 adds r3, #20 + 8006950: 677b str r3, [r7, #116] @ 0x74 + 8006952: 6f7b ldr r3, [r7, #116] @ 0x74 + 8006954: e853 3f00 ldrex r3, [r3] + 8006958: 673b str r3, [r7, #112] @ 0x70 + 800695a: 6f3b ldr r3, [r7, #112] @ 0x70 + 800695c: f023 0301 bic.w r3, r3, #1 + 8006960: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 8006964: 687b ldr r3, [r7, #4] + 8006966: 681b ldr r3, [r3, #0] + 8006968: 3314 adds r3, #20 + 800696a: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4 + 800696e: f8c7 2080 str.w r2, [r7, #128] @ 0x80 + 8006972: 67fb str r3, [r7, #124] @ 0x7c + 8006974: 6ff9 ldr r1, [r7, #124] @ 0x7c + 8006976: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80 + 800697a: e841 2300 strex r3, r2, [r1] + 800697e: 67bb str r3, [r7, #120] @ 0x78 + 8006980: 6fbb ldr r3, [r7, #120] @ 0x78 + 8006982: 2b00 cmp r3, #0 + 8006984: d1e1 bne.n 800694a + 8006986: 687b ldr r3, [r7, #4] + 8006988: 681b ldr r3, [r3, #0] + 800698a: 3314 adds r3, #20 + 800698c: 663b str r3, [r7, #96] @ 0x60 + 800698e: 6e3b ldr r3, [r7, #96] @ 0x60 + 8006990: e853 3f00 ldrex r3, [r3] + 8006994: 65fb str r3, [r7, #92] @ 0x5c + 8006996: 6dfb ldr r3, [r7, #92] @ 0x5c + 8006998: f023 0340 bic.w r3, r3, #64 @ 0x40 + 800699c: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 80069a0: 687b ldr r3, [r7, #4] + 80069a2: 681b ldr r3, [r3, #0] + 80069a4: 3314 adds r3, #20 + 80069a6: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0 + 80069aa: 66fa str r2, [r7, #108] @ 0x6c + 80069ac: 66bb str r3, [r7, #104] @ 0x68 + 80069ae: 6eb9 ldr r1, [r7, #104] @ 0x68 + 80069b0: 6efa ldr r2, [r7, #108] @ 0x6c + 80069b2: e841 2300 strex r3, r2, [r1] + 80069b6: 667b str r3, [r7, #100] @ 0x64 + 80069b8: 6e7b ldr r3, [r7, #100] @ 0x64 + 80069ba: 2b00 cmp r3, #0 + 80069bc: d1e3 bne.n 8006986 + 80069be: 687b ldr r3, [r7, #4] + 80069c0: 2220 movs r2, #32 + 80069c2: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 80069c6: 687b ldr r3, [r7, #4] + 80069c8: 2200 movs r2, #0 + 80069ca: 631a str r2, [r3, #48] @ 0x30 + 80069cc: 687b ldr r3, [r7, #4] + 80069ce: 681b ldr r3, [r3, #0] + 80069d0: 330c adds r3, #12 + 80069d2: 64fb str r3, [r7, #76] @ 0x4c + 80069d4: 6cfb ldr r3, [r7, #76] @ 0x4c + 80069d6: e853 3f00 ldrex r3, [r3] + 80069da: 64bb str r3, [r7, #72] @ 0x48 + 80069dc: 6cbb ldr r3, [r7, #72] @ 0x48 + 80069de: f023 0310 bic.w r3, r3, #16 + 80069e2: f8c7 30ac str.w r3, [r7, #172] @ 0xac + 80069e6: 687b ldr r3, [r7, #4] + 80069e8: 681b ldr r3, [r3, #0] + 80069ea: 330c adds r3, #12 + 80069ec: f8d7 20ac ldr.w r2, [r7, #172] @ 0xac + 80069f0: 65ba str r2, [r7, #88] @ 0x58 + 80069f2: 657b str r3, [r7, #84] @ 0x54 + 80069f4: 6d79 ldr r1, [r7, #84] @ 0x54 + 80069f6: 6dba ldr r2, [r7, #88] @ 0x58 + 80069f8: e841 2300 strex r3, r2, [r1] + 80069fc: 653b str r3, [r7, #80] @ 0x50 + 80069fe: 6d3b ldr r3, [r7, #80] @ 0x50 + 8006a00: 2b00 cmp r3, #0 + 8006a02: d1e3 bne.n 80069cc + 8006a04: 687b ldr r3, [r7, #4] + 8006a06: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006a08: 4618 mov r0, r3 + 8006a0a: f7fb fcd5 bl 80023b8 + 8006a0e: 687b ldr r3, [r7, #4] + 8006a10: 2202 movs r2, #2 + 8006a12: 635a str r2, [r3, #52] @ 0x34 + 8006a14: 687b ldr r3, [r7, #4] + 8006a16: 8d9a ldrh r2, [r3, #44] @ 0x2c + 8006a18: 687b ldr r3, [r7, #4] + 8006a1a: 8ddb ldrh r3, [r3, #46] @ 0x2e + 8006a1c: b29b uxth r3, r3 + 8006a1e: 1ad3 subs r3, r2, r3 + 8006a20: b29b uxth r3, r3 + 8006a22: 4619 mov r1, r3 + 8006a24: 6878 ldr r0, [r7, #4] + 8006a26: f000 f8d9 bl 8006bdc + 8006a2a: e0b3 b.n 8006b94 + 8006a2c: 687b ldr r3, [r7, #4] + 8006a2e: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8006a30: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe + 8006a34: 429a cmp r2, r3 + 8006a36: f040 80ad bne.w 8006b94 + 8006a3a: 687b ldr r3, [r7, #4] + 8006a3c: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006a3e: 69db ldr r3, [r3, #28] + 8006a40: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 8006a44: f040 80a6 bne.w 8006b94 + 8006a48: 687b ldr r3, [r7, #4] + 8006a4a: 2202 movs r2, #2 + 8006a4c: 635a str r2, [r3, #52] @ 0x34 + 8006a4e: 687b ldr r3, [r7, #4] + 8006a50: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8006a52: 4619 mov r1, r3 + 8006a54: 6878 ldr r0, [r7, #4] + 8006a56: f000 f8c1 bl 8006bdc + 8006a5a: e09b b.n 8006b94 + 8006a5c: 0800710b .word 0x0800710b + 8006a60: 687b ldr r3, [r7, #4] + 8006a62: 8d9a ldrh r2, [r3, #44] @ 0x2c + 8006a64: 687b ldr r3, [r7, #4] + 8006a66: 8ddb ldrh r3, [r3, #46] @ 0x2e + 8006a68: b29b uxth r3, r3 + 8006a6a: 1ad3 subs r3, r2, r3 + 8006a6c: f8a7 30ce strh.w r3, [r7, #206] @ 0xce + 8006a70: 687b ldr r3, [r7, #4] + 8006a72: 8ddb ldrh r3, [r3, #46] @ 0x2e + 8006a74: b29b uxth r3, r3 + 8006a76: 2b00 cmp r3, #0 + 8006a78: f000 808e beq.w 8006b98 + 8006a7c: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce + 8006a80: 2b00 cmp r3, #0 + 8006a82: f000 8089 beq.w 8006b98 + 8006a86: 687b ldr r3, [r7, #4] + 8006a88: 681b ldr r3, [r3, #0] + 8006a8a: 330c adds r3, #12 + 8006a8c: 63bb str r3, [r7, #56] @ 0x38 + 8006a8e: 6bbb ldr r3, [r7, #56] @ 0x38 + 8006a90: e853 3f00 ldrex r3, [r3] + 8006a94: 637b str r3, [r7, #52] @ 0x34 + 8006a96: 6b7b ldr r3, [r7, #52] @ 0x34 + 8006a98: f423 7390 bic.w r3, r3, #288 @ 0x120 + 8006a9c: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8 + 8006aa0: 687b ldr r3, [r7, #4] + 8006aa2: 681b ldr r3, [r3, #0] + 8006aa4: 330c adds r3, #12 + 8006aa6: f8d7 20c8 ldr.w r2, [r7, #200] @ 0xc8 + 8006aaa: 647a str r2, [r7, #68] @ 0x44 + 8006aac: 643b str r3, [r7, #64] @ 0x40 + 8006aae: 6c39 ldr r1, [r7, #64] @ 0x40 + 8006ab0: 6c7a ldr r2, [r7, #68] @ 0x44 + 8006ab2: e841 2300 strex r3, r2, [r1] + 8006ab6: 63fb str r3, [r7, #60] @ 0x3c + 8006ab8: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006aba: 2b00 cmp r3, #0 + 8006abc: d1e3 bne.n 8006a86 + 8006abe: 687b ldr r3, [r7, #4] + 8006ac0: 681b ldr r3, [r3, #0] + 8006ac2: 3314 adds r3, #20 + 8006ac4: 627b str r3, [r7, #36] @ 0x24 + 8006ac6: 6a7b ldr r3, [r7, #36] @ 0x24 + 8006ac8: e853 3f00 ldrex r3, [r3] + 8006acc: 623b str r3, [r7, #32] + 8006ace: 6a3b ldr r3, [r7, #32] + 8006ad0: f023 0301 bic.w r3, r3, #1 + 8006ad4: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4 + 8006ad8: 687b ldr r3, [r7, #4] + 8006ada: 681b ldr r3, [r3, #0] + 8006adc: 3314 adds r3, #20 + 8006ade: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4 + 8006ae2: 633a str r2, [r7, #48] @ 0x30 + 8006ae4: 62fb str r3, [r7, #44] @ 0x2c + 8006ae6: 6af9 ldr r1, [r7, #44] @ 0x2c + 8006ae8: 6b3a ldr r2, [r7, #48] @ 0x30 + 8006aea: e841 2300 strex r3, r2, [r1] + 8006aee: 62bb str r3, [r7, #40] @ 0x28 + 8006af0: 6abb ldr r3, [r7, #40] @ 0x28 + 8006af2: 2b00 cmp r3, #0 + 8006af4: d1e3 bne.n 8006abe + 8006af6: 687b ldr r3, [r7, #4] + 8006af8: 2220 movs r2, #32 + 8006afa: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8006afe: 687b ldr r3, [r7, #4] + 8006b00: 2200 movs r2, #0 + 8006b02: 631a str r2, [r3, #48] @ 0x30 + 8006b04: 687b ldr r3, [r7, #4] + 8006b06: 681b ldr r3, [r3, #0] + 8006b08: 330c adds r3, #12 + 8006b0a: 613b str r3, [r7, #16] + 8006b0c: 693b ldr r3, [r7, #16] + 8006b0e: e853 3f00 ldrex r3, [r3] + 8006b12: 60fb str r3, [r7, #12] + 8006b14: 68fb ldr r3, [r7, #12] + 8006b16: f023 0310 bic.w r3, r3, #16 + 8006b1a: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0 + 8006b1e: 687b ldr r3, [r7, #4] + 8006b20: 681b ldr r3, [r3, #0] + 8006b22: 330c adds r3, #12 + 8006b24: f8d7 20c0 ldr.w r2, [r7, #192] @ 0xc0 + 8006b28: 61fa str r2, [r7, #28] + 8006b2a: 61bb str r3, [r7, #24] + 8006b2c: 69b9 ldr r1, [r7, #24] + 8006b2e: 69fa ldr r2, [r7, #28] + 8006b30: e841 2300 strex r3, r2, [r1] + 8006b34: 617b str r3, [r7, #20] + 8006b36: 697b ldr r3, [r7, #20] + 8006b38: 2b00 cmp r3, #0 + 8006b3a: d1e3 bne.n 8006b04 + 8006b3c: 687b ldr r3, [r7, #4] + 8006b3e: 2202 movs r2, #2 + 8006b40: 635a str r2, [r3, #52] @ 0x34 + 8006b42: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce + 8006b46: 4619 mov r1, r3 + 8006b48: 6878 ldr r0, [r7, #4] + 8006b4a: f000 f847 bl 8006bdc + 8006b4e: e023 b.n 8006b98 + 8006b50: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006b54: f003 0380 and.w r3, r3, #128 @ 0x80 + 8006b58: 2b00 cmp r3, #0 + 8006b5a: d009 beq.n 8006b70 + 8006b5c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8006b60: f003 0380 and.w r3, r3, #128 @ 0x80 + 8006b64: 2b00 cmp r3, #0 + 8006b66: d003 beq.n 8006b70 + 8006b68: 6878 ldr r0, [r7, #4] + 8006b6a: f000 fadf bl 800712c + 8006b6e: e014 b.n 8006b9a + 8006b70: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8006b74: f003 0340 and.w r3, r3, #64 @ 0x40 + 8006b78: 2b00 cmp r3, #0 + 8006b7a: d00e beq.n 8006b9a + 8006b7c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8006b80: f003 0340 and.w r3, r3, #64 @ 0x40 + 8006b84: 2b00 cmp r3, #0 + 8006b86: d008 beq.n 8006b9a + 8006b88: 6878 ldr r0, [r7, #4] + 8006b8a: f000 fb1f bl 80071cc + 8006b8e: e004 b.n 8006b9a + 8006b90: bf00 nop + 8006b92: e002 b.n 8006b9a + 8006b94: bf00 nop + 8006b96: e000 b.n 8006b9a + 8006b98: bf00 nop + 8006b9a: 37e8 adds r7, #232 @ 0xe8 + 8006b9c: 46bd mov sp, r7 + 8006b9e: bd80 pop {r7, pc} + +08006ba0 : + 8006ba0: b480 push {r7} + 8006ba2: b083 sub sp, #12 + 8006ba4: af00 add r7, sp, #0 + 8006ba6: 6078 str r0, [r7, #4] + 8006ba8: bf00 nop + 8006baa: 370c adds r7, #12 + 8006bac: 46bd mov sp, r7 + 8006bae: f85d 7b04 ldr.w r7, [sp], #4 + 8006bb2: 4770 bx lr + +08006bb4 : + 8006bb4: b480 push {r7} + 8006bb6: b083 sub sp, #12 + 8006bb8: af00 add r7, sp, #0 + 8006bba: 6078 str r0, [r7, #4] + 8006bbc: bf00 nop + 8006bbe: 370c adds r7, #12 + 8006bc0: 46bd mov sp, r7 + 8006bc2: f85d 7b04 ldr.w r7, [sp], #4 + 8006bc6: 4770 bx lr + +08006bc8 : + 8006bc8: b480 push {r7} + 8006bca: b083 sub sp, #12 + 8006bcc: af00 add r7, sp, #0 + 8006bce: 6078 str r0, [r7, #4] + 8006bd0: bf00 nop + 8006bd2: 370c adds r7, #12 + 8006bd4: 46bd mov sp, r7 + 8006bd6: f85d 7b04 ldr.w r7, [sp], #4 + 8006bda: 4770 bx lr + +08006bdc : + 8006bdc: b480 push {r7} + 8006bde: b083 sub sp, #12 + 8006be0: af00 add r7, sp, #0 + 8006be2: 6078 str r0, [r7, #4] + 8006be4: 460b mov r3, r1 + 8006be6: 807b strh r3, [r7, #2] + 8006be8: bf00 nop + 8006bea: 370c adds r7, #12 + 8006bec: 46bd mov sp, r7 + 8006bee: f85d 7b04 ldr.w r7, [sp], #4 + 8006bf2: 4770 bx lr + +08006bf4 : + 8006bf4: b580 push {r7, lr} + 8006bf6: b090 sub sp, #64 @ 0x40 + 8006bf8: af00 add r7, sp, #0 + 8006bfa: 6078 str r0, [r7, #4] + 8006bfc: 687b ldr r3, [r7, #4] + 8006bfe: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006c00: 63fb str r3, [r7, #60] @ 0x3c + 8006c02: 687b ldr r3, [r7, #4] + 8006c04: 681b ldr r3, [r3, #0] + 8006c06: 681b ldr r3, [r3, #0] + 8006c08: f403 7380 and.w r3, r3, #256 @ 0x100 + 8006c0c: 2b00 cmp r3, #0 + 8006c0e: d137 bne.n 8006c80 + 8006c10: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006c12: 2200 movs r2, #0 + 8006c14: 84da strh r2, [r3, #38] @ 0x26 + 8006c16: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006c18: 681b ldr r3, [r3, #0] + 8006c1a: 3314 adds r3, #20 + 8006c1c: 627b str r3, [r7, #36] @ 0x24 + 8006c1e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8006c20: e853 3f00 ldrex r3, [r3] + 8006c24: 623b str r3, [r7, #32] + 8006c26: 6a3b ldr r3, [r7, #32] + 8006c28: f023 0380 bic.w r3, r3, #128 @ 0x80 + 8006c2c: 63bb str r3, [r7, #56] @ 0x38 + 8006c2e: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006c30: 681b ldr r3, [r3, #0] + 8006c32: 3314 adds r3, #20 + 8006c34: 6bba ldr r2, [r7, #56] @ 0x38 + 8006c36: 633a str r2, [r7, #48] @ 0x30 + 8006c38: 62fb str r3, [r7, #44] @ 0x2c + 8006c3a: 6af9 ldr r1, [r7, #44] @ 0x2c + 8006c3c: 6b3a ldr r2, [r7, #48] @ 0x30 + 8006c3e: e841 2300 strex r3, r2, [r1] + 8006c42: 62bb str r3, [r7, #40] @ 0x28 + 8006c44: 6abb ldr r3, [r7, #40] @ 0x28 + 8006c46: 2b00 cmp r3, #0 + 8006c48: d1e5 bne.n 8006c16 + 8006c4a: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006c4c: 681b ldr r3, [r3, #0] + 8006c4e: 330c adds r3, #12 + 8006c50: 613b str r3, [r7, #16] + 8006c52: 693b ldr r3, [r7, #16] + 8006c54: e853 3f00 ldrex r3, [r3] + 8006c58: 60fb str r3, [r7, #12] + 8006c5a: 68fb ldr r3, [r7, #12] + 8006c5c: f043 0340 orr.w r3, r3, #64 @ 0x40 + 8006c60: 637b str r3, [r7, #52] @ 0x34 + 8006c62: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006c64: 681b ldr r3, [r3, #0] + 8006c66: 330c adds r3, #12 + 8006c68: 6b7a ldr r2, [r7, #52] @ 0x34 + 8006c6a: 61fa str r2, [r7, #28] + 8006c6c: 61bb str r3, [r7, #24] + 8006c6e: 69b9 ldr r1, [r7, #24] + 8006c70: 69fa ldr r2, [r7, #28] + 8006c72: e841 2300 strex r3, r2, [r1] + 8006c76: 617b str r3, [r7, #20] + 8006c78: 697b ldr r3, [r7, #20] + 8006c7a: 2b00 cmp r3, #0 + 8006c7c: d1e5 bne.n 8006c4a + 8006c7e: e002 b.n 8006c86 + 8006c80: 6bf8 ldr r0, [r7, #60] @ 0x3c + 8006c82: f7ff ff8d bl 8006ba0 + 8006c86: bf00 nop + 8006c88: 3740 adds r7, #64 @ 0x40 + 8006c8a: 46bd mov sp, r7 + 8006c8c: bd80 pop {r7, pc} + +08006c8e : + 8006c8e: b580 push {r7, lr} + 8006c90: b084 sub sp, #16 + 8006c92: af00 add r7, sp, #0 + 8006c94: 6078 str r0, [r7, #4] + 8006c96: 687b ldr r3, [r7, #4] + 8006c98: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006c9a: 60fb str r3, [r7, #12] + 8006c9c: 68f8 ldr r0, [r7, #12] + 8006c9e: f7ff ff89 bl 8006bb4 + 8006ca2: bf00 nop + 8006ca4: 3710 adds r7, #16 + 8006ca6: 46bd mov sp, r7 + 8006ca8: bd80 pop {r7, pc} + +08006caa : + 8006caa: b580 push {r7, lr} + 8006cac: b09c sub sp, #112 @ 0x70 + 8006cae: af00 add r7, sp, #0 + 8006cb0: 6078 str r0, [r7, #4] + 8006cb2: 687b ldr r3, [r7, #4] + 8006cb4: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006cb6: 66fb str r3, [r7, #108] @ 0x6c + 8006cb8: 687b ldr r3, [r7, #4] + 8006cba: 681b ldr r3, [r3, #0] + 8006cbc: 681b ldr r3, [r3, #0] + 8006cbe: f403 7380 and.w r3, r3, #256 @ 0x100 + 8006cc2: 2b00 cmp r3, #0 + 8006cc4: d172 bne.n 8006dac + 8006cc6: 6efb ldr r3, [r7, #108] @ 0x6c + 8006cc8: 2200 movs r2, #0 + 8006cca: 85da strh r2, [r3, #46] @ 0x2e + 8006ccc: 6efb ldr r3, [r7, #108] @ 0x6c + 8006cce: 681b ldr r3, [r3, #0] + 8006cd0: 330c adds r3, #12 + 8006cd2: 64fb str r3, [r7, #76] @ 0x4c + 8006cd4: 6cfb ldr r3, [r7, #76] @ 0x4c + 8006cd6: e853 3f00 ldrex r3, [r3] + 8006cda: 64bb str r3, [r7, #72] @ 0x48 + 8006cdc: 6cbb ldr r3, [r7, #72] @ 0x48 + 8006cde: f423 7380 bic.w r3, r3, #256 @ 0x100 + 8006ce2: 66bb str r3, [r7, #104] @ 0x68 + 8006ce4: 6efb ldr r3, [r7, #108] @ 0x6c + 8006ce6: 681b ldr r3, [r3, #0] + 8006ce8: 330c adds r3, #12 + 8006cea: 6eba ldr r2, [r7, #104] @ 0x68 + 8006cec: 65ba str r2, [r7, #88] @ 0x58 + 8006cee: 657b str r3, [r7, #84] @ 0x54 + 8006cf0: 6d79 ldr r1, [r7, #84] @ 0x54 + 8006cf2: 6dba ldr r2, [r7, #88] @ 0x58 + 8006cf4: e841 2300 strex r3, r2, [r1] + 8006cf8: 653b str r3, [r7, #80] @ 0x50 + 8006cfa: 6d3b ldr r3, [r7, #80] @ 0x50 + 8006cfc: 2b00 cmp r3, #0 + 8006cfe: d1e5 bne.n 8006ccc + 8006d00: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d02: 681b ldr r3, [r3, #0] + 8006d04: 3314 adds r3, #20 + 8006d06: 63bb str r3, [r7, #56] @ 0x38 + 8006d08: 6bbb ldr r3, [r7, #56] @ 0x38 + 8006d0a: e853 3f00 ldrex r3, [r3] + 8006d0e: 637b str r3, [r7, #52] @ 0x34 + 8006d10: 6b7b ldr r3, [r7, #52] @ 0x34 + 8006d12: f023 0301 bic.w r3, r3, #1 + 8006d16: 667b str r3, [r7, #100] @ 0x64 + 8006d18: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d1a: 681b ldr r3, [r3, #0] + 8006d1c: 3314 adds r3, #20 + 8006d1e: 6e7a ldr r2, [r7, #100] @ 0x64 + 8006d20: 647a str r2, [r7, #68] @ 0x44 + 8006d22: 643b str r3, [r7, #64] @ 0x40 + 8006d24: 6c39 ldr r1, [r7, #64] @ 0x40 + 8006d26: 6c7a ldr r2, [r7, #68] @ 0x44 + 8006d28: e841 2300 strex r3, r2, [r1] + 8006d2c: 63fb str r3, [r7, #60] @ 0x3c + 8006d2e: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006d30: 2b00 cmp r3, #0 + 8006d32: d1e5 bne.n 8006d00 + 8006d34: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d36: 681b ldr r3, [r3, #0] + 8006d38: 3314 adds r3, #20 + 8006d3a: 627b str r3, [r7, #36] @ 0x24 + 8006d3c: 6a7b ldr r3, [r7, #36] @ 0x24 + 8006d3e: e853 3f00 ldrex r3, [r3] + 8006d42: 623b str r3, [r7, #32] + 8006d44: 6a3b ldr r3, [r7, #32] + 8006d46: f023 0340 bic.w r3, r3, #64 @ 0x40 + 8006d4a: 663b str r3, [r7, #96] @ 0x60 + 8006d4c: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d4e: 681b ldr r3, [r3, #0] + 8006d50: 3314 adds r3, #20 + 8006d52: 6e3a ldr r2, [r7, #96] @ 0x60 + 8006d54: 633a str r2, [r7, #48] @ 0x30 + 8006d56: 62fb str r3, [r7, #44] @ 0x2c + 8006d58: 6af9 ldr r1, [r7, #44] @ 0x2c + 8006d5a: 6b3a ldr r2, [r7, #48] @ 0x30 + 8006d5c: e841 2300 strex r3, r2, [r1] + 8006d60: 62bb str r3, [r7, #40] @ 0x28 + 8006d62: 6abb ldr r3, [r7, #40] @ 0x28 + 8006d64: 2b00 cmp r3, #0 + 8006d66: d1e5 bne.n 8006d34 + 8006d68: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d6a: 2220 movs r2, #32 + 8006d6c: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8006d70: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d72: 6b1b ldr r3, [r3, #48] @ 0x30 + 8006d74: 2b01 cmp r3, #1 + 8006d76: d119 bne.n 8006dac + 8006d78: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d7a: 681b ldr r3, [r3, #0] + 8006d7c: 330c adds r3, #12 + 8006d7e: 613b str r3, [r7, #16] + 8006d80: 693b ldr r3, [r7, #16] + 8006d82: e853 3f00 ldrex r3, [r3] + 8006d86: 60fb str r3, [r7, #12] + 8006d88: 68fb ldr r3, [r7, #12] + 8006d8a: f023 0310 bic.w r3, r3, #16 + 8006d8e: 65fb str r3, [r7, #92] @ 0x5c + 8006d90: 6efb ldr r3, [r7, #108] @ 0x6c + 8006d92: 681b ldr r3, [r3, #0] + 8006d94: 330c adds r3, #12 + 8006d96: 6dfa ldr r2, [r7, #92] @ 0x5c + 8006d98: 61fa str r2, [r7, #28] + 8006d9a: 61bb str r3, [r7, #24] + 8006d9c: 69b9 ldr r1, [r7, #24] + 8006d9e: 69fa ldr r2, [r7, #28] + 8006da0: e841 2300 strex r3, r2, [r1] + 8006da4: 617b str r3, [r7, #20] + 8006da6: 697b ldr r3, [r7, #20] + 8006da8: 2b00 cmp r3, #0 + 8006daa: d1e5 bne.n 8006d78 + 8006dac: 6efb ldr r3, [r7, #108] @ 0x6c + 8006dae: 2200 movs r2, #0 + 8006db0: 635a str r2, [r3, #52] @ 0x34 + 8006db2: 6efb ldr r3, [r7, #108] @ 0x6c + 8006db4: 6b1b ldr r3, [r3, #48] @ 0x30 + 8006db6: 2b01 cmp r3, #1 + 8006db8: d106 bne.n 8006dc8 + 8006dba: 6efb ldr r3, [r7, #108] @ 0x6c + 8006dbc: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8006dbe: 4619 mov r1, r3 + 8006dc0: 6ef8 ldr r0, [r7, #108] @ 0x6c + 8006dc2: f7ff ff0b bl 8006bdc + 8006dc6: e002 b.n 8006dce + 8006dc8: 6ef8 ldr r0, [r7, #108] @ 0x6c + 8006dca: f7f9 ff9b bl 8000d04 + 8006dce: bf00 nop + 8006dd0: 3770 adds r7, #112 @ 0x70 + 8006dd2: 46bd mov sp, r7 + 8006dd4: bd80 pop {r7, pc} + +08006dd6 : + 8006dd6: b580 push {r7, lr} + 8006dd8: b084 sub sp, #16 + 8006dda: af00 add r7, sp, #0 + 8006ddc: 6078 str r0, [r7, #4] + 8006dde: 687b ldr r3, [r7, #4] + 8006de0: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006de2: 60fb str r3, [r7, #12] + 8006de4: 68fb ldr r3, [r7, #12] + 8006de6: 2201 movs r2, #1 + 8006de8: 635a str r2, [r3, #52] @ 0x34 + 8006dea: 68fb ldr r3, [r7, #12] + 8006dec: 6b1b ldr r3, [r3, #48] @ 0x30 + 8006dee: 2b01 cmp r3, #1 + 8006df0: d108 bne.n 8006e04 + 8006df2: 68fb ldr r3, [r7, #12] + 8006df4: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8006df6: 085b lsrs r3, r3, #1 + 8006df8: b29b uxth r3, r3 + 8006dfa: 4619 mov r1, r3 + 8006dfc: 68f8 ldr r0, [r7, #12] + 8006dfe: f7ff feed bl 8006bdc + 8006e02: e002 b.n 8006e0a + 8006e04: 68f8 ldr r0, [r7, #12] + 8006e06: f7ff fedf bl 8006bc8 + 8006e0a: bf00 nop + 8006e0c: 3710 adds r7, #16 + 8006e0e: 46bd mov sp, r7 + 8006e10: bd80 pop {r7, pc} + +08006e12 : + 8006e12: b580 push {r7, lr} + 8006e14: b084 sub sp, #16 + 8006e16: af00 add r7, sp, #0 + 8006e18: 6078 str r0, [r7, #4] + 8006e1a: 2300 movs r3, #0 + 8006e1c: 60fb str r3, [r7, #12] + 8006e1e: 687b ldr r3, [r7, #4] + 8006e20: 6b9b ldr r3, [r3, #56] @ 0x38 + 8006e22: 60bb str r3, [r7, #8] + 8006e24: 68bb ldr r3, [r7, #8] + 8006e26: 681b ldr r3, [r3, #0] + 8006e28: 695b ldr r3, [r3, #20] + 8006e2a: f003 0380 and.w r3, r3, #128 @ 0x80 + 8006e2e: 2b80 cmp r3, #128 @ 0x80 + 8006e30: bf0c ite eq + 8006e32: 2301 moveq r3, #1 + 8006e34: 2300 movne r3, #0 + 8006e36: b2db uxtb r3, r3 + 8006e38: 60fb str r3, [r7, #12] + 8006e3a: 68bb ldr r3, [r7, #8] + 8006e3c: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8006e40: b2db uxtb r3, r3 + 8006e42: 2b21 cmp r3, #33 @ 0x21 + 8006e44: d108 bne.n 8006e58 + 8006e46: 68fb ldr r3, [r7, #12] + 8006e48: 2b00 cmp r3, #0 + 8006e4a: d005 beq.n 8006e58 + 8006e4c: 68bb ldr r3, [r7, #8] + 8006e4e: 2200 movs r2, #0 + 8006e50: 84da strh r2, [r3, #38] @ 0x26 + 8006e52: 68b8 ldr r0, [r7, #8] + 8006e54: f000 f8ce bl 8006ff4 + 8006e58: 68bb ldr r3, [r7, #8] + 8006e5a: 681b ldr r3, [r3, #0] + 8006e5c: 695b ldr r3, [r3, #20] + 8006e5e: f003 0340 and.w r3, r3, #64 @ 0x40 + 8006e62: 2b40 cmp r3, #64 @ 0x40 + 8006e64: bf0c ite eq + 8006e66: 2301 moveq r3, #1 + 8006e68: 2300 movne r3, #0 + 8006e6a: b2db uxtb r3, r3 + 8006e6c: 60fb str r3, [r7, #12] + 8006e6e: 68bb ldr r3, [r7, #8] + 8006e70: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 8006e74: b2db uxtb r3, r3 + 8006e76: 2b22 cmp r3, #34 @ 0x22 + 8006e78: d108 bne.n 8006e8c + 8006e7a: 68fb ldr r3, [r7, #12] + 8006e7c: 2b00 cmp r3, #0 + 8006e7e: d005 beq.n 8006e8c + 8006e80: 68bb ldr r3, [r7, #8] + 8006e82: 2200 movs r2, #0 + 8006e84: 85da strh r2, [r3, #46] @ 0x2e + 8006e86: 68b8 ldr r0, [r7, #8] + 8006e88: f000 f8dc bl 8007044 + 8006e8c: 68bb ldr r3, [r7, #8] + 8006e8e: 6c5b ldr r3, [r3, #68] @ 0x44 + 8006e90: f043 0210 orr.w r2, r3, #16 + 8006e94: 68bb ldr r3, [r7, #8] + 8006e96: 645a str r2, [r3, #68] @ 0x44 + 8006e98: 68b8 ldr r0, [r7, #8] + 8006e9a: f7f9 ff8f bl 8000dbc + 8006e9e: bf00 nop + 8006ea0: 3710 adds r7, #16 + 8006ea2: 46bd mov sp, r7 + 8006ea4: bd80 pop {r7, pc} + ... + +08006ea8 : + 8006ea8: b580 push {r7, lr} + 8006eaa: b098 sub sp, #96 @ 0x60 + 8006eac: af00 add r7, sp, #0 + 8006eae: 60f8 str r0, [r7, #12] + 8006eb0: 60b9 str r1, [r7, #8] + 8006eb2: 4613 mov r3, r2 + 8006eb4: 80fb strh r3, [r7, #6] + 8006eb6: 68ba ldr r2, [r7, #8] + 8006eb8: 68fb ldr r3, [r7, #12] + 8006eba: 629a str r2, [r3, #40] @ 0x28 + 8006ebc: 68fb ldr r3, [r7, #12] + 8006ebe: 88fa ldrh r2, [r7, #6] + 8006ec0: 859a strh r2, [r3, #44] @ 0x2c + 8006ec2: 68fb ldr r3, [r7, #12] + 8006ec4: 2200 movs r2, #0 + 8006ec6: 645a str r2, [r3, #68] @ 0x44 + 8006ec8: 68fb ldr r3, [r7, #12] + 8006eca: 2222 movs r2, #34 @ 0x22 + 8006ecc: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8006ed0: 68fb ldr r3, [r7, #12] + 8006ed2: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006ed4: 4a44 ldr r2, [pc, #272] @ (8006fe8 ) + 8006ed6: 63da str r2, [r3, #60] @ 0x3c + 8006ed8: 68fb ldr r3, [r7, #12] + 8006eda: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006edc: 4a43 ldr r2, [pc, #268] @ (8006fec ) + 8006ede: 641a str r2, [r3, #64] @ 0x40 + 8006ee0: 68fb ldr r3, [r7, #12] + 8006ee2: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006ee4: 4a42 ldr r2, [pc, #264] @ (8006ff0 ) + 8006ee6: 64da str r2, [r3, #76] @ 0x4c + 8006ee8: 68fb ldr r3, [r7, #12] + 8006eea: 6bdb ldr r3, [r3, #60] @ 0x3c + 8006eec: 2200 movs r2, #0 + 8006eee: 651a str r2, [r3, #80] @ 0x50 + 8006ef0: f107 0308 add.w r3, r7, #8 + 8006ef4: 65fb str r3, [r7, #92] @ 0x5c + 8006ef6: 68fb ldr r3, [r7, #12] + 8006ef8: 6bd8 ldr r0, [r3, #60] @ 0x3c + 8006efa: 68fb ldr r3, [r7, #12] + 8006efc: 681b ldr r3, [r3, #0] + 8006efe: 3304 adds r3, #4 + 8006f00: 4619 mov r1, r3 + 8006f02: 6dfb ldr r3, [r7, #92] @ 0x5c + 8006f04: 681a ldr r2, [r3, #0] + 8006f06: 88fb ldrh r3, [r7, #6] + 8006f08: f7fb f9fe bl 8002308 + 8006f0c: 4603 mov r3, r0 + 8006f0e: 2b00 cmp r3, #0 + 8006f10: d008 beq.n 8006f24 + 8006f12: 68fb ldr r3, [r7, #12] + 8006f14: 2210 movs r2, #16 + 8006f16: 645a str r2, [r3, #68] @ 0x44 + 8006f18: 68fb ldr r3, [r7, #12] + 8006f1a: 2220 movs r2, #32 + 8006f1c: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8006f20: 2301 movs r3, #1 + 8006f22: e05d b.n 8006fe0 + 8006f24: 2300 movs r3, #0 + 8006f26: 613b str r3, [r7, #16] + 8006f28: 68fb ldr r3, [r7, #12] + 8006f2a: 681b ldr r3, [r3, #0] + 8006f2c: 681b ldr r3, [r3, #0] + 8006f2e: 613b str r3, [r7, #16] + 8006f30: 68fb ldr r3, [r7, #12] + 8006f32: 681b ldr r3, [r3, #0] + 8006f34: 685b ldr r3, [r3, #4] + 8006f36: 613b str r3, [r7, #16] + 8006f38: 693b ldr r3, [r7, #16] + 8006f3a: 68fb ldr r3, [r7, #12] + 8006f3c: 691b ldr r3, [r3, #16] + 8006f3e: 2b00 cmp r3, #0 + 8006f40: d019 beq.n 8006f76 + 8006f42: 68fb ldr r3, [r7, #12] + 8006f44: 681b ldr r3, [r3, #0] + 8006f46: 330c adds r3, #12 + 8006f48: 643b str r3, [r7, #64] @ 0x40 + 8006f4a: 6c3b ldr r3, [r7, #64] @ 0x40 + 8006f4c: e853 3f00 ldrex r3, [r3] + 8006f50: 63fb str r3, [r7, #60] @ 0x3c + 8006f52: 6bfb ldr r3, [r7, #60] @ 0x3c + 8006f54: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8006f58: 65bb str r3, [r7, #88] @ 0x58 + 8006f5a: 68fb ldr r3, [r7, #12] + 8006f5c: 681b ldr r3, [r3, #0] + 8006f5e: 330c adds r3, #12 + 8006f60: 6dba ldr r2, [r7, #88] @ 0x58 + 8006f62: 64fa str r2, [r7, #76] @ 0x4c + 8006f64: 64bb str r3, [r7, #72] @ 0x48 + 8006f66: 6cb9 ldr r1, [r7, #72] @ 0x48 + 8006f68: 6cfa ldr r2, [r7, #76] @ 0x4c + 8006f6a: e841 2300 strex r3, r2, [r1] + 8006f6e: 647b str r3, [r7, #68] @ 0x44 + 8006f70: 6c7b ldr r3, [r7, #68] @ 0x44 + 8006f72: 2b00 cmp r3, #0 + 8006f74: d1e5 bne.n 8006f42 + 8006f76: 68fb ldr r3, [r7, #12] + 8006f78: 681b ldr r3, [r3, #0] + 8006f7a: 3314 adds r3, #20 + 8006f7c: 62fb str r3, [r7, #44] @ 0x2c + 8006f7e: 6afb ldr r3, [r7, #44] @ 0x2c + 8006f80: e853 3f00 ldrex r3, [r3] + 8006f84: 62bb str r3, [r7, #40] @ 0x28 + 8006f86: 6abb ldr r3, [r7, #40] @ 0x28 + 8006f88: f043 0301 orr.w r3, r3, #1 + 8006f8c: 657b str r3, [r7, #84] @ 0x54 + 8006f8e: 68fb ldr r3, [r7, #12] + 8006f90: 681b ldr r3, [r3, #0] + 8006f92: 3314 adds r3, #20 + 8006f94: 6d7a ldr r2, [r7, #84] @ 0x54 + 8006f96: 63ba str r2, [r7, #56] @ 0x38 + 8006f98: 637b str r3, [r7, #52] @ 0x34 + 8006f9a: 6b79 ldr r1, [r7, #52] @ 0x34 + 8006f9c: 6bba ldr r2, [r7, #56] @ 0x38 + 8006f9e: e841 2300 strex r3, r2, [r1] + 8006fa2: 633b str r3, [r7, #48] @ 0x30 + 8006fa4: 6b3b ldr r3, [r7, #48] @ 0x30 + 8006fa6: 2b00 cmp r3, #0 + 8006fa8: d1e5 bne.n 8006f76 + 8006faa: 68fb ldr r3, [r7, #12] + 8006fac: 681b ldr r3, [r3, #0] + 8006fae: 3314 adds r3, #20 + 8006fb0: 61bb str r3, [r7, #24] + 8006fb2: 69bb ldr r3, [r7, #24] + 8006fb4: e853 3f00 ldrex r3, [r3] + 8006fb8: 617b str r3, [r7, #20] + 8006fba: 697b ldr r3, [r7, #20] + 8006fbc: f043 0340 orr.w r3, r3, #64 @ 0x40 + 8006fc0: 653b str r3, [r7, #80] @ 0x50 + 8006fc2: 68fb ldr r3, [r7, #12] + 8006fc4: 681b ldr r3, [r3, #0] + 8006fc6: 3314 adds r3, #20 + 8006fc8: 6d3a ldr r2, [r7, #80] @ 0x50 + 8006fca: 627a str r2, [r7, #36] @ 0x24 + 8006fcc: 623b str r3, [r7, #32] + 8006fce: 6a39 ldr r1, [r7, #32] + 8006fd0: 6a7a ldr r2, [r7, #36] @ 0x24 + 8006fd2: e841 2300 strex r3, r2, [r1] + 8006fd6: 61fb str r3, [r7, #28] + 8006fd8: 69fb ldr r3, [r7, #28] + 8006fda: 2b00 cmp r3, #0 + 8006fdc: d1e5 bne.n 8006faa + 8006fde: 2300 movs r3, #0 + 8006fe0: 4618 mov r0, r3 + 8006fe2: 3760 adds r7, #96 @ 0x60 + 8006fe4: 46bd mov sp, r7 + 8006fe6: bd80 pop {r7, pc} + 8006fe8: 08006cab .word 0x08006cab + 8006fec: 08006dd7 .word 0x08006dd7 + 8006ff0: 08006e13 .word 0x08006e13 + +08006ff4 : + 8006ff4: b480 push {r7} + 8006ff6: b089 sub sp, #36 @ 0x24 + 8006ff8: af00 add r7, sp, #0 + 8006ffa: 6078 str r0, [r7, #4] + 8006ffc: 687b ldr r3, [r7, #4] + 8006ffe: 681b ldr r3, [r3, #0] + 8007000: 330c adds r3, #12 + 8007002: 60fb str r3, [r7, #12] + 8007004: 68fb ldr r3, [r7, #12] + 8007006: e853 3f00 ldrex r3, [r3] + 800700a: 60bb str r3, [r7, #8] + 800700c: 68bb ldr r3, [r7, #8] + 800700e: f023 03c0 bic.w r3, r3, #192 @ 0xc0 + 8007012: 61fb str r3, [r7, #28] + 8007014: 687b ldr r3, [r7, #4] + 8007016: 681b ldr r3, [r3, #0] + 8007018: 330c adds r3, #12 + 800701a: 69fa ldr r2, [r7, #28] + 800701c: 61ba str r2, [r7, #24] + 800701e: 617b str r3, [r7, #20] + 8007020: 6979 ldr r1, [r7, #20] + 8007022: 69ba ldr r2, [r7, #24] + 8007024: e841 2300 strex r3, r2, [r1] + 8007028: 613b str r3, [r7, #16] + 800702a: 693b ldr r3, [r7, #16] + 800702c: 2b00 cmp r3, #0 + 800702e: d1e5 bne.n 8006ffc + 8007030: 687b ldr r3, [r7, #4] + 8007032: 2220 movs r2, #32 + 8007034: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 8007038: bf00 nop + 800703a: 3724 adds r7, #36 @ 0x24 + 800703c: 46bd mov sp, r7 + 800703e: f85d 7b04 ldr.w r7, [sp], #4 + 8007042: 4770 bx lr + +08007044 : + 8007044: b480 push {r7} + 8007046: b095 sub sp, #84 @ 0x54 + 8007048: af00 add r7, sp, #0 + 800704a: 6078 str r0, [r7, #4] + 800704c: 687b ldr r3, [r7, #4] + 800704e: 681b ldr r3, [r3, #0] + 8007050: 330c adds r3, #12 + 8007052: 637b str r3, [r7, #52] @ 0x34 + 8007054: 6b7b ldr r3, [r7, #52] @ 0x34 + 8007056: e853 3f00 ldrex r3, [r3] + 800705a: 633b str r3, [r7, #48] @ 0x30 + 800705c: 6b3b ldr r3, [r7, #48] @ 0x30 + 800705e: f423 7390 bic.w r3, r3, #288 @ 0x120 + 8007062: 64fb str r3, [r7, #76] @ 0x4c + 8007064: 687b ldr r3, [r7, #4] + 8007066: 681b ldr r3, [r3, #0] + 8007068: 330c adds r3, #12 + 800706a: 6cfa ldr r2, [r7, #76] @ 0x4c + 800706c: 643a str r2, [r7, #64] @ 0x40 + 800706e: 63fb str r3, [r7, #60] @ 0x3c + 8007070: 6bf9 ldr r1, [r7, #60] @ 0x3c + 8007072: 6c3a ldr r2, [r7, #64] @ 0x40 + 8007074: e841 2300 strex r3, r2, [r1] + 8007078: 63bb str r3, [r7, #56] @ 0x38 + 800707a: 6bbb ldr r3, [r7, #56] @ 0x38 + 800707c: 2b00 cmp r3, #0 + 800707e: d1e5 bne.n 800704c + 8007080: 687b ldr r3, [r7, #4] + 8007082: 681b ldr r3, [r3, #0] + 8007084: 3314 adds r3, #20 + 8007086: 623b str r3, [r7, #32] + 8007088: 6a3b ldr r3, [r7, #32] + 800708a: e853 3f00 ldrex r3, [r3] + 800708e: 61fb str r3, [r7, #28] + 8007090: 69fb ldr r3, [r7, #28] + 8007092: f023 0301 bic.w r3, r3, #1 + 8007096: 64bb str r3, [r7, #72] @ 0x48 + 8007098: 687b ldr r3, [r7, #4] + 800709a: 681b ldr r3, [r3, #0] + 800709c: 3314 adds r3, #20 + 800709e: 6cba ldr r2, [r7, #72] @ 0x48 + 80070a0: 62fa str r2, [r7, #44] @ 0x2c + 80070a2: 62bb str r3, [r7, #40] @ 0x28 + 80070a4: 6ab9 ldr r1, [r7, #40] @ 0x28 + 80070a6: 6afa ldr r2, [r7, #44] @ 0x2c + 80070a8: e841 2300 strex r3, r2, [r1] + 80070ac: 627b str r3, [r7, #36] @ 0x24 + 80070ae: 6a7b ldr r3, [r7, #36] @ 0x24 + 80070b0: 2b00 cmp r3, #0 + 80070b2: d1e5 bne.n 8007080 + 80070b4: 687b ldr r3, [r7, #4] + 80070b6: 6b1b ldr r3, [r3, #48] @ 0x30 + 80070b8: 2b01 cmp r3, #1 + 80070ba: d119 bne.n 80070f0 + 80070bc: 687b ldr r3, [r7, #4] + 80070be: 681b ldr r3, [r3, #0] + 80070c0: 330c adds r3, #12 + 80070c2: 60fb str r3, [r7, #12] + 80070c4: 68fb ldr r3, [r7, #12] + 80070c6: e853 3f00 ldrex r3, [r3] + 80070ca: 60bb str r3, [r7, #8] + 80070cc: 68bb ldr r3, [r7, #8] + 80070ce: f023 0310 bic.w r3, r3, #16 + 80070d2: 647b str r3, [r7, #68] @ 0x44 + 80070d4: 687b ldr r3, [r7, #4] + 80070d6: 681b ldr r3, [r3, #0] + 80070d8: 330c adds r3, #12 + 80070da: 6c7a ldr r2, [r7, #68] @ 0x44 + 80070dc: 61ba str r2, [r7, #24] + 80070de: 617b str r3, [r7, #20] + 80070e0: 6979 ldr r1, [r7, #20] + 80070e2: 69ba ldr r2, [r7, #24] + 80070e4: e841 2300 strex r3, r2, [r1] + 80070e8: 613b str r3, [r7, #16] + 80070ea: 693b ldr r3, [r7, #16] + 80070ec: 2b00 cmp r3, #0 + 80070ee: d1e5 bne.n 80070bc + 80070f0: 687b ldr r3, [r7, #4] + 80070f2: 2220 movs r2, #32 + 80070f4: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 80070f8: 687b ldr r3, [r7, #4] + 80070fa: 2200 movs r2, #0 + 80070fc: 631a str r2, [r3, #48] @ 0x30 + 80070fe: bf00 nop + 8007100: 3754 adds r7, #84 @ 0x54 + 8007102: 46bd mov sp, r7 + 8007104: f85d 7b04 ldr.w r7, [sp], #4 + 8007108: 4770 bx lr + +0800710a : + 800710a: b580 push {r7, lr} + 800710c: b084 sub sp, #16 + 800710e: af00 add r7, sp, #0 + 8007110: 6078 str r0, [r7, #4] + 8007112: 687b ldr r3, [r7, #4] + 8007114: 6b9b ldr r3, [r3, #56] @ 0x38 + 8007116: 60fb str r3, [r7, #12] + 8007118: 68fb ldr r3, [r7, #12] + 800711a: 2200 movs r2, #0 + 800711c: 85da strh r2, [r3, #46] @ 0x2e + 800711e: 68f8 ldr r0, [r7, #12] + 8007120: f7f9 fe4c bl 8000dbc + 8007124: bf00 nop + 8007126: 3710 adds r7, #16 + 8007128: 46bd mov sp, r7 + 800712a: bd80 pop {r7, pc} + +0800712c : + 800712c: b480 push {r7} + 800712e: b085 sub sp, #20 + 8007130: af00 add r7, sp, #0 + 8007132: 6078 str r0, [r7, #4] + 8007134: 687b ldr r3, [r7, #4] + 8007136: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 800713a: b2db uxtb r3, r3 + 800713c: 2b21 cmp r3, #33 @ 0x21 + 800713e: d13e bne.n 80071be + 8007140: 687b ldr r3, [r7, #4] + 8007142: 689b ldr r3, [r3, #8] + 8007144: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 8007148: d114 bne.n 8007174 + 800714a: 687b ldr r3, [r7, #4] + 800714c: 691b ldr r3, [r3, #16] + 800714e: 2b00 cmp r3, #0 + 8007150: d110 bne.n 8007174 + 8007152: 687b ldr r3, [r7, #4] + 8007154: 6a1b ldr r3, [r3, #32] + 8007156: 60fb str r3, [r7, #12] + 8007158: 68fb ldr r3, [r7, #12] + 800715a: 881b ldrh r3, [r3, #0] + 800715c: 461a mov r2, r3 + 800715e: 687b ldr r3, [r7, #4] + 8007160: 681b ldr r3, [r3, #0] + 8007162: f3c2 0208 ubfx r2, r2, #0, #9 + 8007166: 605a str r2, [r3, #4] + 8007168: 687b ldr r3, [r7, #4] + 800716a: 6a1b ldr r3, [r3, #32] + 800716c: 1c9a adds r2, r3, #2 + 800716e: 687b ldr r3, [r7, #4] + 8007170: 621a str r2, [r3, #32] + 8007172: e008 b.n 8007186 + 8007174: 687b ldr r3, [r7, #4] + 8007176: 6a1b ldr r3, [r3, #32] + 8007178: 1c59 adds r1, r3, #1 + 800717a: 687a ldr r2, [r7, #4] + 800717c: 6211 str r1, [r2, #32] + 800717e: 781a ldrb r2, [r3, #0] + 8007180: 687b ldr r3, [r7, #4] + 8007182: 681b ldr r3, [r3, #0] + 8007184: 605a str r2, [r3, #4] + 8007186: 687b ldr r3, [r7, #4] + 8007188: 8cdb ldrh r3, [r3, #38] @ 0x26 + 800718a: b29b uxth r3, r3 + 800718c: 3b01 subs r3, #1 + 800718e: b29b uxth r3, r3 + 8007190: 687a ldr r2, [r7, #4] + 8007192: 4619 mov r1, r3 + 8007194: 84d1 strh r1, [r2, #38] @ 0x26 + 8007196: 2b00 cmp r3, #0 + 8007198: d10f bne.n 80071ba + 800719a: 687b ldr r3, [r7, #4] + 800719c: 681b ldr r3, [r3, #0] + 800719e: 68da ldr r2, [r3, #12] + 80071a0: 687b ldr r3, [r7, #4] + 80071a2: 681b ldr r3, [r3, #0] + 80071a4: f022 0280 bic.w r2, r2, #128 @ 0x80 + 80071a8: 60da str r2, [r3, #12] + 80071aa: 687b ldr r3, [r7, #4] + 80071ac: 681b ldr r3, [r3, #0] + 80071ae: 68da ldr r2, [r3, #12] + 80071b0: 687b ldr r3, [r7, #4] + 80071b2: 681b ldr r3, [r3, #0] + 80071b4: f042 0240 orr.w r2, r2, #64 @ 0x40 + 80071b8: 60da str r2, [r3, #12] + 80071ba: 2300 movs r3, #0 + 80071bc: e000 b.n 80071c0 + 80071be: 2302 movs r3, #2 + 80071c0: 4618 mov r0, r3 + 80071c2: 3714 adds r7, #20 + 80071c4: 46bd mov sp, r7 + 80071c6: f85d 7b04 ldr.w r7, [sp], #4 + 80071ca: 4770 bx lr + +080071cc : + 80071cc: b580 push {r7, lr} + 80071ce: b082 sub sp, #8 + 80071d0: af00 add r7, sp, #0 + 80071d2: 6078 str r0, [r7, #4] + 80071d4: 687b ldr r3, [r7, #4] + 80071d6: 681b ldr r3, [r3, #0] + 80071d8: 68da ldr r2, [r3, #12] + 80071da: 687b ldr r3, [r7, #4] + 80071dc: 681b ldr r3, [r3, #0] + 80071de: f022 0240 bic.w r2, r2, #64 @ 0x40 + 80071e2: 60da str r2, [r3, #12] + 80071e4: 687b ldr r3, [r7, #4] + 80071e6: 2220 movs r2, #32 + 80071e8: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 80071ec: 6878 ldr r0, [r7, #4] + 80071ee: f7ff fcd7 bl 8006ba0 + 80071f2: 2300 movs r3, #0 + 80071f4: 4618 mov r0, r3 + 80071f6: 3708 adds r7, #8 + 80071f8: 46bd mov sp, r7 + 80071fa: bd80 pop {r7, pc} + +080071fc : + 80071fc: b580 push {r7, lr} + 80071fe: b08c sub sp, #48 @ 0x30 + 8007200: af00 add r7, sp, #0 + 8007202: 6078 str r0, [r7, #4] + 8007204: 2300 movs r3, #0 + 8007206: 62fb str r3, [r7, #44] @ 0x2c + 8007208: 2300 movs r3, #0 + 800720a: 62bb str r3, [r7, #40] @ 0x28 + 800720c: 687b ldr r3, [r7, #4] + 800720e: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 8007212: b2db uxtb r3, r3 + 8007214: 2b22 cmp r3, #34 @ 0x22 + 8007216: f040 80aa bne.w 800736e + 800721a: 687b ldr r3, [r7, #4] + 800721c: 689b ldr r3, [r3, #8] + 800721e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 8007222: d115 bne.n 8007250 + 8007224: 687b ldr r3, [r7, #4] + 8007226: 691b ldr r3, [r3, #16] + 8007228: 2b00 cmp r3, #0 + 800722a: d111 bne.n 8007250 + 800722c: 687b ldr r3, [r7, #4] + 800722e: 6a9b ldr r3, [r3, #40] @ 0x28 + 8007230: 62bb str r3, [r7, #40] @ 0x28 + 8007232: 687b ldr r3, [r7, #4] + 8007234: 681b ldr r3, [r3, #0] + 8007236: 685b ldr r3, [r3, #4] + 8007238: b29b uxth r3, r3 + 800723a: f3c3 0308 ubfx r3, r3, #0, #9 + 800723e: b29a uxth r2, r3 + 8007240: 6abb ldr r3, [r7, #40] @ 0x28 + 8007242: 801a strh r2, [r3, #0] + 8007244: 687b ldr r3, [r7, #4] + 8007246: 6a9b ldr r3, [r3, #40] @ 0x28 + 8007248: 1c9a adds r2, r3, #2 + 800724a: 687b ldr r3, [r7, #4] + 800724c: 629a str r2, [r3, #40] @ 0x28 + 800724e: e024 b.n 800729a + 8007250: 687b ldr r3, [r7, #4] + 8007252: 6a9b ldr r3, [r3, #40] @ 0x28 + 8007254: 62fb str r3, [r7, #44] @ 0x2c + 8007256: 687b ldr r3, [r7, #4] + 8007258: 689b ldr r3, [r3, #8] + 800725a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 800725e: d007 beq.n 8007270 + 8007260: 687b ldr r3, [r7, #4] + 8007262: 689b ldr r3, [r3, #8] + 8007264: 2b00 cmp r3, #0 + 8007266: d10a bne.n 800727e + 8007268: 687b ldr r3, [r7, #4] + 800726a: 691b ldr r3, [r3, #16] + 800726c: 2b00 cmp r3, #0 + 800726e: d106 bne.n 800727e + 8007270: 687b ldr r3, [r7, #4] + 8007272: 681b ldr r3, [r3, #0] + 8007274: 685b ldr r3, [r3, #4] + 8007276: b2da uxtb r2, r3 + 8007278: 6afb ldr r3, [r7, #44] @ 0x2c + 800727a: 701a strb r2, [r3, #0] + 800727c: e008 b.n 8007290 + 800727e: 687b ldr r3, [r7, #4] + 8007280: 681b ldr r3, [r3, #0] + 8007282: 685b ldr r3, [r3, #4] + 8007284: b2db uxtb r3, r3 + 8007286: f003 037f and.w r3, r3, #127 @ 0x7f + 800728a: b2da uxtb r2, r3 + 800728c: 6afb ldr r3, [r7, #44] @ 0x2c + 800728e: 701a strb r2, [r3, #0] + 8007290: 687b ldr r3, [r7, #4] + 8007292: 6a9b ldr r3, [r3, #40] @ 0x28 + 8007294: 1c5a adds r2, r3, #1 + 8007296: 687b ldr r3, [r7, #4] + 8007298: 629a str r2, [r3, #40] @ 0x28 + 800729a: 687b ldr r3, [r7, #4] + 800729c: 8ddb ldrh r3, [r3, #46] @ 0x2e + 800729e: b29b uxth r3, r3 + 80072a0: 3b01 subs r3, #1 + 80072a2: b29b uxth r3, r3 + 80072a4: 687a ldr r2, [r7, #4] + 80072a6: 4619 mov r1, r3 + 80072a8: 85d1 strh r1, [r2, #46] @ 0x2e + 80072aa: 2b00 cmp r3, #0 + 80072ac: d15d bne.n 800736a + 80072ae: 687b ldr r3, [r7, #4] + 80072b0: 681b ldr r3, [r3, #0] + 80072b2: 68da ldr r2, [r3, #12] + 80072b4: 687b ldr r3, [r7, #4] + 80072b6: 681b ldr r3, [r3, #0] + 80072b8: f022 0220 bic.w r2, r2, #32 + 80072bc: 60da str r2, [r3, #12] + 80072be: 687b ldr r3, [r7, #4] + 80072c0: 681b ldr r3, [r3, #0] + 80072c2: 68da ldr r2, [r3, #12] + 80072c4: 687b ldr r3, [r7, #4] + 80072c6: 681b ldr r3, [r3, #0] + 80072c8: f422 7280 bic.w r2, r2, #256 @ 0x100 + 80072cc: 60da str r2, [r3, #12] + 80072ce: 687b ldr r3, [r7, #4] + 80072d0: 681b ldr r3, [r3, #0] + 80072d2: 695a ldr r2, [r3, #20] + 80072d4: 687b ldr r3, [r7, #4] + 80072d6: 681b ldr r3, [r3, #0] + 80072d8: f022 0201 bic.w r2, r2, #1 + 80072dc: 615a str r2, [r3, #20] + 80072de: 687b ldr r3, [r7, #4] + 80072e0: 2220 movs r2, #32 + 80072e2: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 80072e6: 687b ldr r3, [r7, #4] + 80072e8: 2200 movs r2, #0 + 80072ea: 635a str r2, [r3, #52] @ 0x34 + 80072ec: 687b ldr r3, [r7, #4] + 80072ee: 6b1b ldr r3, [r3, #48] @ 0x30 + 80072f0: 2b01 cmp r3, #1 + 80072f2: d135 bne.n 8007360 + 80072f4: 687b ldr r3, [r7, #4] + 80072f6: 2200 movs r2, #0 + 80072f8: 631a str r2, [r3, #48] @ 0x30 + 80072fa: 687b ldr r3, [r7, #4] + 80072fc: 681b ldr r3, [r3, #0] + 80072fe: 330c adds r3, #12 + 8007300: 617b str r3, [r7, #20] + 8007302: 697b ldr r3, [r7, #20] + 8007304: e853 3f00 ldrex r3, [r3] + 8007308: 613b str r3, [r7, #16] + 800730a: 693b ldr r3, [r7, #16] + 800730c: f023 0310 bic.w r3, r3, #16 + 8007310: 627b str r3, [r7, #36] @ 0x24 + 8007312: 687b ldr r3, [r7, #4] + 8007314: 681b ldr r3, [r3, #0] + 8007316: 330c adds r3, #12 + 8007318: 6a7a ldr r2, [r7, #36] @ 0x24 + 800731a: 623a str r2, [r7, #32] + 800731c: 61fb str r3, [r7, #28] + 800731e: 69f9 ldr r1, [r7, #28] + 8007320: 6a3a ldr r2, [r7, #32] + 8007322: e841 2300 strex r3, r2, [r1] + 8007326: 61bb str r3, [r7, #24] + 8007328: 69bb ldr r3, [r7, #24] + 800732a: 2b00 cmp r3, #0 + 800732c: d1e5 bne.n 80072fa + 800732e: 687b ldr r3, [r7, #4] + 8007330: 681b ldr r3, [r3, #0] + 8007332: 681b ldr r3, [r3, #0] + 8007334: f003 0310 and.w r3, r3, #16 + 8007338: 2b10 cmp r3, #16 + 800733a: d10a bne.n 8007352 + 800733c: 2300 movs r3, #0 + 800733e: 60fb str r3, [r7, #12] + 8007340: 687b ldr r3, [r7, #4] + 8007342: 681b ldr r3, [r3, #0] + 8007344: 681b ldr r3, [r3, #0] + 8007346: 60fb str r3, [r7, #12] + 8007348: 687b ldr r3, [r7, #4] + 800734a: 681b ldr r3, [r3, #0] + 800734c: 685b ldr r3, [r3, #4] + 800734e: 60fb str r3, [r7, #12] + 8007350: 68fb ldr r3, [r7, #12] + 8007352: 687b ldr r3, [r7, #4] + 8007354: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8007356: 4619 mov r1, r3 + 8007358: 6878 ldr r0, [r7, #4] + 800735a: f7ff fc3f bl 8006bdc + 800735e: e002 b.n 8007366 + 8007360: 6878 ldr r0, [r7, #4] + 8007362: f7f9 fccf bl 8000d04 + 8007366: 2300 movs r3, #0 + 8007368: e002 b.n 8007370 + 800736a: 2300 movs r3, #0 + 800736c: e000 b.n 8007370 + 800736e: 2302 movs r3, #2 + 8007370: 4618 mov r0, r3 + 8007372: 3730 adds r7, #48 @ 0x30 + 8007374: 46bd mov sp, r7 + 8007376: bd80 pop {r7, pc} + +08007378 : + 8007378: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} + 800737c: b0c0 sub sp, #256 @ 0x100 + 800737e: af00 add r7, sp, #0 + 8007380: f8c7 00f4 str.w r0, [r7, #244] @ 0xf4 + 8007384: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 8007388: 681b ldr r3, [r3, #0] + 800738a: 691b ldr r3, [r3, #16] + 800738c: f423 5040 bic.w r0, r3, #12288 @ 0x3000 + 8007390: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 8007394: 68d9 ldr r1, [r3, #12] + 8007396: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 800739a: 681a ldr r2, [r3, #0] + 800739c: ea40 0301 orr.w r3, r0, r1 + 80073a0: 6113 str r3, [r2, #16] + 80073a2: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073a6: 689a ldr r2, [r3, #8] + 80073a8: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073ac: 691b ldr r3, [r3, #16] + 80073ae: 431a orrs r2, r3 + 80073b0: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073b4: 695b ldr r3, [r3, #20] + 80073b6: 431a orrs r2, r3 + 80073b8: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073bc: 69db ldr r3, [r3, #28] + 80073be: 4313 orrs r3, r2 + 80073c0: f8c7 30f8 str.w r3, [r7, #248] @ 0xf8 + 80073c4: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073c8: 681b ldr r3, [r3, #0] + 80073ca: 68db ldr r3, [r3, #12] + 80073cc: f423 4116 bic.w r1, r3, #38400 @ 0x9600 + 80073d0: f021 010c bic.w r1, r1, #12 + 80073d4: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073d8: 681a ldr r2, [r3, #0] + 80073da: f8d7 30f8 ldr.w r3, [r7, #248] @ 0xf8 + 80073de: 430b orrs r3, r1 + 80073e0: 60d3 str r3, [r2, #12] + 80073e2: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073e6: 681b ldr r3, [r3, #0] + 80073e8: 695b ldr r3, [r3, #20] + 80073ea: f423 7040 bic.w r0, r3, #768 @ 0x300 + 80073ee: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073f2: 6999 ldr r1, [r3, #24] + 80073f4: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80073f8: 681a ldr r2, [r3, #0] + 80073fa: ea40 0301 orr.w r3, r0, r1 + 80073fe: 6153 str r3, [r2, #20] + 8007400: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 8007404: 681a ldr r2, [r3, #0] + 8007406: 4b8f ldr r3, [pc, #572] @ (8007644 ) + 8007408: 429a cmp r2, r3 + 800740a: d005 beq.n 8007418 + 800740c: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 8007410: 681a ldr r2, [r3, #0] + 8007412: 4b8d ldr r3, [pc, #564] @ (8007648 ) + 8007414: 429a cmp r2, r3 + 8007416: d104 bne.n 8007422 + 8007418: f7fd f960 bl 80046dc + 800741c: f8c7 00fc str.w r0, [r7, #252] @ 0xfc + 8007420: e003 b.n 800742a + 8007422: f7fd f947 bl 80046b4 + 8007426: f8c7 00fc str.w r0, [r7, #252] @ 0xfc + 800742a: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 800742e: 69db ldr r3, [r3, #28] + 8007430: f5b3 4f00 cmp.w r3, #32768 @ 0x8000 + 8007434: f040 810c bne.w 8007650 + 8007438: f8d7 30fc ldr.w r3, [r7, #252] @ 0xfc + 800743c: 2200 movs r2, #0 + 800743e: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8 + 8007442: f8c7 20ec str.w r2, [r7, #236] @ 0xec + 8007446: e9d7 453a ldrd r4, r5, [r7, #232] @ 0xe8 + 800744a: 4622 mov r2, r4 + 800744c: 462b mov r3, r5 + 800744e: 1891 adds r1, r2, r2 + 8007450: 65b9 str r1, [r7, #88] @ 0x58 + 8007452: 415b adcs r3, r3 + 8007454: 65fb str r3, [r7, #92] @ 0x5c + 8007456: e9d7 2316 ldrd r2, r3, [r7, #88] @ 0x58 + 800745a: 4621 mov r1, r4 + 800745c: eb12 0801 adds.w r8, r2, r1 + 8007460: 4629 mov r1, r5 + 8007462: eb43 0901 adc.w r9, r3, r1 + 8007466: f04f 0200 mov.w r2, #0 + 800746a: f04f 0300 mov.w r3, #0 + 800746e: ea4f 03c9 mov.w r3, r9, lsl #3 + 8007472: ea43 7358 orr.w r3, r3, r8, lsr #29 + 8007476: ea4f 02c8 mov.w r2, r8, lsl #3 + 800747a: 4690 mov r8, r2 + 800747c: 4699 mov r9, r3 + 800747e: 4623 mov r3, r4 + 8007480: eb18 0303 adds.w r3, r8, r3 + 8007484: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0 + 8007488: 462b mov r3, r5 + 800748a: eb49 0303 adc.w r3, r9, r3 + 800748e: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4 + 8007492: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 8007496: 685b ldr r3, [r3, #4] + 8007498: 2200 movs r2, #0 + 800749a: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 + 800749e: f8c7 20dc str.w r2, [r7, #220] @ 0xdc + 80074a2: e9d7 1236 ldrd r1, r2, [r7, #216] @ 0xd8 + 80074a6: 460b mov r3, r1 + 80074a8: 18db adds r3, r3, r3 + 80074aa: 653b str r3, [r7, #80] @ 0x50 + 80074ac: 4613 mov r3, r2 + 80074ae: eb42 0303 adc.w r3, r2, r3 + 80074b2: 657b str r3, [r7, #84] @ 0x54 + 80074b4: e9d7 2314 ldrd r2, r3, [r7, #80] @ 0x50 + 80074b8: e9d7 0138 ldrd r0, r1, [r7, #224] @ 0xe0 + 80074bc: f7f8 fea2 bl 8000204 <__aeabi_uldivmod> + 80074c0: 4602 mov r2, r0 + 80074c2: 460b mov r3, r1 + 80074c4: 4b61 ldr r3, [pc, #388] @ (800764c ) + 80074c6: fba3 2302 umull r2, r3, r3, r2 + 80074ca: 095b lsrs r3, r3, #5 + 80074cc: 011c lsls r4, r3, #4 + 80074ce: f8d7 30fc ldr.w r3, [r7, #252] @ 0xfc + 80074d2: 2200 movs r2, #0 + 80074d4: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0 + 80074d8: f8c7 20d4 str.w r2, [r7, #212] @ 0xd4 + 80074dc: e9d7 8934 ldrd r8, r9, [r7, #208] @ 0xd0 + 80074e0: 4642 mov r2, r8 + 80074e2: 464b mov r3, r9 + 80074e4: 1891 adds r1, r2, r2 + 80074e6: 64b9 str r1, [r7, #72] @ 0x48 + 80074e8: 415b adcs r3, r3 + 80074ea: 64fb str r3, [r7, #76] @ 0x4c + 80074ec: e9d7 2312 ldrd r2, r3, [r7, #72] @ 0x48 + 80074f0: 4641 mov r1, r8 + 80074f2: eb12 0a01 adds.w sl, r2, r1 + 80074f6: 4649 mov r1, r9 + 80074f8: eb43 0b01 adc.w fp, r3, r1 + 80074fc: f04f 0200 mov.w r2, #0 + 8007500: f04f 0300 mov.w r3, #0 + 8007504: ea4f 03cb mov.w r3, fp, lsl #3 + 8007508: ea43 735a orr.w r3, r3, sl, lsr #29 + 800750c: ea4f 02ca mov.w r2, sl, lsl #3 + 8007510: 4692 mov sl, r2 + 8007512: 469b mov fp, r3 + 8007514: 4643 mov r3, r8 + 8007516: eb1a 0303 adds.w r3, sl, r3 + 800751a: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8 + 800751e: 464b mov r3, r9 + 8007520: eb4b 0303 adc.w r3, fp, r3 + 8007524: f8c7 30cc str.w r3, [r7, #204] @ 0xcc + 8007528: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 800752c: 685b ldr r3, [r3, #4] + 800752e: 2200 movs r2, #0 + 8007530: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0 + 8007534: f8c7 20c4 str.w r2, [r7, #196] @ 0xc4 + 8007538: e9d7 1230 ldrd r1, r2, [r7, #192] @ 0xc0 + 800753c: 460b mov r3, r1 + 800753e: 18db adds r3, r3, r3 + 8007540: 643b str r3, [r7, #64] @ 0x40 + 8007542: 4613 mov r3, r2 + 8007544: eb42 0303 adc.w r3, r2, r3 + 8007548: 647b str r3, [r7, #68] @ 0x44 + 800754a: e9d7 2310 ldrd r2, r3, [r7, #64] @ 0x40 + 800754e: e9d7 0132 ldrd r0, r1, [r7, #200] @ 0xc8 + 8007552: f7f8 fe57 bl 8000204 <__aeabi_uldivmod> + 8007556: 4602 mov r2, r0 + 8007558: 460b mov r3, r1 + 800755a: 4611 mov r1, r2 + 800755c: 4b3b ldr r3, [pc, #236] @ (800764c ) + 800755e: fba3 2301 umull r2, r3, r3, r1 + 8007562: 095b lsrs r3, r3, #5 + 8007564: 2264 movs r2, #100 @ 0x64 + 8007566: fb02 f303 mul.w r3, r2, r3 + 800756a: 1acb subs r3, r1, r3 + 800756c: 00db lsls r3, r3, #3 + 800756e: f103 0232 add.w r2, r3, #50 @ 0x32 + 8007572: 4b36 ldr r3, [pc, #216] @ (800764c ) + 8007574: fba3 2302 umull r2, r3, r3, r2 + 8007578: 095b lsrs r3, r3, #5 + 800757a: 005b lsls r3, r3, #1 + 800757c: f403 73f8 and.w r3, r3, #496 @ 0x1f0 + 8007580: 441c add r4, r3 + 8007582: f8d7 30fc ldr.w r3, [r7, #252] @ 0xfc + 8007586: 2200 movs r2, #0 + 8007588: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8 + 800758c: f8c7 20bc str.w r2, [r7, #188] @ 0xbc + 8007590: e9d7 892e ldrd r8, r9, [r7, #184] @ 0xb8 + 8007594: 4642 mov r2, r8 + 8007596: 464b mov r3, r9 + 8007598: 1891 adds r1, r2, r2 + 800759a: 63b9 str r1, [r7, #56] @ 0x38 + 800759c: 415b adcs r3, r3 + 800759e: 63fb str r3, [r7, #60] @ 0x3c + 80075a0: e9d7 230e ldrd r2, r3, [r7, #56] @ 0x38 + 80075a4: 4641 mov r1, r8 + 80075a6: 1851 adds r1, r2, r1 + 80075a8: 6339 str r1, [r7, #48] @ 0x30 + 80075aa: 4649 mov r1, r9 + 80075ac: 414b adcs r3, r1 + 80075ae: 637b str r3, [r7, #52] @ 0x34 + 80075b0: f04f 0200 mov.w r2, #0 + 80075b4: f04f 0300 mov.w r3, #0 + 80075b8: e9d7 ab0c ldrd sl, fp, [r7, #48] @ 0x30 + 80075bc: 4659 mov r1, fp + 80075be: 00cb lsls r3, r1, #3 + 80075c0: 4651 mov r1, sl + 80075c2: ea43 7351 orr.w r3, r3, r1, lsr #29 + 80075c6: 4651 mov r1, sl + 80075c8: 00ca lsls r2, r1, #3 + 80075ca: 4610 mov r0, r2 + 80075cc: 4619 mov r1, r3 + 80075ce: 4603 mov r3, r0 + 80075d0: 4642 mov r2, r8 + 80075d2: 189b adds r3, r3, r2 + 80075d4: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 80075d8: 464b mov r3, r9 + 80075da: 460a mov r2, r1 + 80075dc: eb42 0303 adc.w r3, r2, r3 + 80075e0: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 80075e4: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80075e8: 685b ldr r3, [r3, #4] + 80075ea: 2200 movs r2, #0 + 80075ec: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8 + 80075f0: f8c7 20ac str.w r2, [r7, #172] @ 0xac + 80075f4: e9d7 122a ldrd r1, r2, [r7, #168] @ 0xa8 + 80075f8: 460b mov r3, r1 + 80075fa: 18db adds r3, r3, r3 + 80075fc: 62bb str r3, [r7, #40] @ 0x28 + 80075fe: 4613 mov r3, r2 + 8007600: eb42 0303 adc.w r3, r2, r3 + 8007604: 62fb str r3, [r7, #44] @ 0x2c + 8007606: e9d7 230a ldrd r2, r3, [r7, #40] @ 0x28 + 800760a: e9d7 012c ldrd r0, r1, [r7, #176] @ 0xb0 + 800760e: f7f8 fdf9 bl 8000204 <__aeabi_uldivmod> + 8007612: 4602 mov r2, r0 + 8007614: 460b mov r3, r1 + 8007616: 4b0d ldr r3, [pc, #52] @ (800764c ) + 8007618: fba3 1302 umull r1, r3, r3, r2 + 800761c: 095b lsrs r3, r3, #5 + 800761e: 2164 movs r1, #100 @ 0x64 + 8007620: fb01 f303 mul.w r3, r1, r3 + 8007624: 1ad3 subs r3, r2, r3 + 8007626: 00db lsls r3, r3, #3 + 8007628: 3332 adds r3, #50 @ 0x32 + 800762a: 4a08 ldr r2, [pc, #32] @ (800764c ) + 800762c: fba2 2303 umull r2, r3, r2, r3 + 8007630: 095b lsrs r3, r3, #5 + 8007632: f003 0207 and.w r2, r3, #7 + 8007636: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 800763a: 681b ldr r3, [r3, #0] + 800763c: 4422 add r2, r4 + 800763e: 609a str r2, [r3, #8] + 8007640: e106 b.n 8007850 + 8007642: bf00 nop + 8007644: 40011000 .word 0x40011000 + 8007648: 40011400 .word 0x40011400 + 800764c: 51eb851f .word 0x51eb851f + 8007650: f8d7 30fc ldr.w r3, [r7, #252] @ 0xfc + 8007654: 2200 movs r2, #0 + 8007656: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0 + 800765a: f8c7 20a4 str.w r2, [r7, #164] @ 0xa4 + 800765e: e9d7 8928 ldrd r8, r9, [r7, #160] @ 0xa0 + 8007662: 4642 mov r2, r8 + 8007664: 464b mov r3, r9 + 8007666: 1891 adds r1, r2, r2 + 8007668: 6239 str r1, [r7, #32] + 800766a: 415b adcs r3, r3 + 800766c: 627b str r3, [r7, #36] @ 0x24 + 800766e: e9d7 2308 ldrd r2, r3, [r7, #32] + 8007672: 4641 mov r1, r8 + 8007674: 1854 adds r4, r2, r1 + 8007676: 4649 mov r1, r9 + 8007678: eb43 0501 adc.w r5, r3, r1 + 800767c: f04f 0200 mov.w r2, #0 + 8007680: f04f 0300 mov.w r3, #0 + 8007684: 00eb lsls r3, r5, #3 + 8007686: ea43 7354 orr.w r3, r3, r4, lsr #29 + 800768a: 00e2 lsls r2, r4, #3 + 800768c: 4614 mov r4, r2 + 800768e: 461d mov r5, r3 + 8007690: 4643 mov r3, r8 + 8007692: 18e3 adds r3, r4, r3 + 8007694: f8c7 3098 str.w r3, [r7, #152] @ 0x98 + 8007698: 464b mov r3, r9 + 800769a: eb45 0303 adc.w r3, r5, r3 + 800769e: f8c7 309c str.w r3, [r7, #156] @ 0x9c + 80076a2: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80076a6: 685b ldr r3, [r3, #4] + 80076a8: 2200 movs r2, #0 + 80076aa: f8c7 3090 str.w r3, [r7, #144] @ 0x90 + 80076ae: f8c7 2094 str.w r2, [r7, #148] @ 0x94 + 80076b2: f04f 0200 mov.w r2, #0 + 80076b6: f04f 0300 mov.w r3, #0 + 80076ba: e9d7 4524 ldrd r4, r5, [r7, #144] @ 0x90 + 80076be: 4629 mov r1, r5 + 80076c0: 008b lsls r3, r1, #2 + 80076c2: 4621 mov r1, r4 + 80076c4: ea43 7391 orr.w r3, r3, r1, lsr #30 + 80076c8: 4621 mov r1, r4 + 80076ca: 008a lsls r2, r1, #2 + 80076cc: e9d7 0126 ldrd r0, r1, [r7, #152] @ 0x98 + 80076d0: f7f8 fd98 bl 8000204 <__aeabi_uldivmod> + 80076d4: 4602 mov r2, r0 + 80076d6: 460b mov r3, r1 + 80076d8: 4b60 ldr r3, [pc, #384] @ (800785c ) + 80076da: fba3 2302 umull r2, r3, r3, r2 + 80076de: 095b lsrs r3, r3, #5 + 80076e0: 011c lsls r4, r3, #4 + 80076e2: f8d7 30fc ldr.w r3, [r7, #252] @ 0xfc + 80076e6: 2200 movs r2, #0 + 80076e8: f8c7 3088 str.w r3, [r7, #136] @ 0x88 + 80076ec: f8c7 208c str.w r2, [r7, #140] @ 0x8c + 80076f0: e9d7 8922 ldrd r8, r9, [r7, #136] @ 0x88 + 80076f4: 4642 mov r2, r8 + 80076f6: 464b mov r3, r9 + 80076f8: 1891 adds r1, r2, r2 + 80076fa: 61b9 str r1, [r7, #24] + 80076fc: 415b adcs r3, r3 + 80076fe: 61fb str r3, [r7, #28] + 8007700: e9d7 2306 ldrd r2, r3, [r7, #24] + 8007704: 4641 mov r1, r8 + 8007706: 1851 adds r1, r2, r1 + 8007708: 6139 str r1, [r7, #16] + 800770a: 4649 mov r1, r9 + 800770c: 414b adcs r3, r1 + 800770e: 617b str r3, [r7, #20] + 8007710: f04f 0200 mov.w r2, #0 + 8007714: f04f 0300 mov.w r3, #0 + 8007718: e9d7 ab04 ldrd sl, fp, [r7, #16] + 800771c: 4659 mov r1, fp + 800771e: 00cb lsls r3, r1, #3 + 8007720: 4651 mov r1, sl + 8007722: ea43 7351 orr.w r3, r3, r1, lsr #29 + 8007726: 4651 mov r1, sl + 8007728: 00ca lsls r2, r1, #3 + 800772a: 4610 mov r0, r2 + 800772c: 4619 mov r1, r3 + 800772e: 4603 mov r3, r0 + 8007730: 4642 mov r2, r8 + 8007732: 189b adds r3, r3, r2 + 8007734: f8c7 3080 str.w r3, [r7, #128] @ 0x80 + 8007738: 464b mov r3, r9 + 800773a: 460a mov r2, r1 + 800773c: eb42 0303 adc.w r3, r2, r3 + 8007740: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + 8007744: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 8007748: 685b ldr r3, [r3, #4] + 800774a: 2200 movs r2, #0 + 800774c: 67bb str r3, [r7, #120] @ 0x78 + 800774e: 67fa str r2, [r7, #124] @ 0x7c + 8007750: f04f 0200 mov.w r2, #0 + 8007754: f04f 0300 mov.w r3, #0 + 8007758: e9d7 891e ldrd r8, r9, [r7, #120] @ 0x78 + 800775c: 4649 mov r1, r9 + 800775e: 008b lsls r3, r1, #2 + 8007760: 4641 mov r1, r8 + 8007762: ea43 7391 orr.w r3, r3, r1, lsr #30 + 8007766: 4641 mov r1, r8 + 8007768: 008a lsls r2, r1, #2 + 800776a: e9d7 0120 ldrd r0, r1, [r7, #128] @ 0x80 + 800776e: f7f8 fd49 bl 8000204 <__aeabi_uldivmod> + 8007772: 4602 mov r2, r0 + 8007774: 460b mov r3, r1 + 8007776: 4611 mov r1, r2 + 8007778: 4b38 ldr r3, [pc, #224] @ (800785c ) + 800777a: fba3 2301 umull r2, r3, r3, r1 + 800777e: 095b lsrs r3, r3, #5 + 8007780: 2264 movs r2, #100 @ 0x64 + 8007782: fb02 f303 mul.w r3, r2, r3 + 8007786: 1acb subs r3, r1, r3 + 8007788: 011b lsls r3, r3, #4 + 800778a: 3332 adds r3, #50 @ 0x32 + 800778c: 4a33 ldr r2, [pc, #204] @ (800785c ) + 800778e: fba2 2303 umull r2, r3, r2, r3 + 8007792: 095b lsrs r3, r3, #5 + 8007794: f003 03f0 and.w r3, r3, #240 @ 0xf0 + 8007798: 441c add r4, r3 + 800779a: f8d7 30fc ldr.w r3, [r7, #252] @ 0xfc + 800779e: 2200 movs r2, #0 + 80077a0: 673b str r3, [r7, #112] @ 0x70 + 80077a2: 677a str r2, [r7, #116] @ 0x74 + 80077a4: e9d7 891c ldrd r8, r9, [r7, #112] @ 0x70 + 80077a8: 4642 mov r2, r8 + 80077aa: 464b mov r3, r9 + 80077ac: 1891 adds r1, r2, r2 + 80077ae: 60b9 str r1, [r7, #8] + 80077b0: 415b adcs r3, r3 + 80077b2: 60fb str r3, [r7, #12] + 80077b4: e9d7 2302 ldrd r2, r3, [r7, #8] + 80077b8: 4641 mov r1, r8 + 80077ba: 1851 adds r1, r2, r1 + 80077bc: 6039 str r1, [r7, #0] + 80077be: 4649 mov r1, r9 + 80077c0: 414b adcs r3, r1 + 80077c2: 607b str r3, [r7, #4] + 80077c4: f04f 0200 mov.w r2, #0 + 80077c8: f04f 0300 mov.w r3, #0 + 80077cc: e9d7 ab00 ldrd sl, fp, [r7] + 80077d0: 4659 mov r1, fp + 80077d2: 00cb lsls r3, r1, #3 + 80077d4: 4651 mov r1, sl + 80077d6: ea43 7351 orr.w r3, r3, r1, lsr #29 + 80077da: 4651 mov r1, sl + 80077dc: 00ca lsls r2, r1, #3 + 80077de: 4610 mov r0, r2 + 80077e0: 4619 mov r1, r3 + 80077e2: 4603 mov r3, r0 + 80077e4: 4642 mov r2, r8 + 80077e6: 189b adds r3, r3, r2 + 80077e8: 66bb str r3, [r7, #104] @ 0x68 + 80077ea: 464b mov r3, r9 + 80077ec: 460a mov r2, r1 + 80077ee: eb42 0303 adc.w r3, r2, r3 + 80077f2: 66fb str r3, [r7, #108] @ 0x6c + 80077f4: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 80077f8: 685b ldr r3, [r3, #4] + 80077fa: 2200 movs r2, #0 + 80077fc: 663b str r3, [r7, #96] @ 0x60 + 80077fe: 667a str r2, [r7, #100] @ 0x64 + 8007800: f04f 0200 mov.w r2, #0 + 8007804: f04f 0300 mov.w r3, #0 + 8007808: e9d7 8918 ldrd r8, r9, [r7, #96] @ 0x60 + 800780c: 4649 mov r1, r9 + 800780e: 008b lsls r3, r1, #2 + 8007810: 4641 mov r1, r8 + 8007812: ea43 7391 orr.w r3, r3, r1, lsr #30 + 8007816: 4641 mov r1, r8 + 8007818: 008a lsls r2, r1, #2 + 800781a: e9d7 011a ldrd r0, r1, [r7, #104] @ 0x68 + 800781e: f7f8 fcf1 bl 8000204 <__aeabi_uldivmod> + 8007822: 4602 mov r2, r0 + 8007824: 460b mov r3, r1 + 8007826: 4b0d ldr r3, [pc, #52] @ (800785c ) + 8007828: fba3 1302 umull r1, r3, r3, r2 + 800782c: 095b lsrs r3, r3, #5 + 800782e: 2164 movs r1, #100 @ 0x64 + 8007830: fb01 f303 mul.w r3, r1, r3 + 8007834: 1ad3 subs r3, r2, r3 + 8007836: 011b lsls r3, r3, #4 + 8007838: 3332 adds r3, #50 @ 0x32 + 800783a: 4a08 ldr r2, [pc, #32] @ (800785c ) + 800783c: fba2 2303 umull r2, r3, r2, r3 + 8007840: 095b lsrs r3, r3, #5 + 8007842: f003 020f and.w r2, r3, #15 + 8007846: f8d7 30f4 ldr.w r3, [r7, #244] @ 0xf4 + 800784a: 681b ldr r3, [r3, #0] + 800784c: 4422 add r2, r4 + 800784e: 609a str r2, [r3, #8] + 8007850: bf00 nop + 8007852: f507 7780 add.w r7, r7, #256 @ 0x100 + 8007856: 46bd mov sp, r7 + 8007858: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} + 800785c: 51eb851f .word 0x51eb851f + +08007860 : + 8007860: b084 sub sp, #16 + 8007862: b580 push {r7, lr} + 8007864: b084 sub sp, #16 + 8007866: af00 add r7, sp, #0 + 8007868: 6078 str r0, [r7, #4] + 800786a: f107 001c add.w r0, r7, #28 + 800786e: e880 000e stmia.w r0, {r1, r2, r3} + 8007872: f897 3021 ldrb.w r3, [r7, #33] @ 0x21 + 8007876: 2b01 cmp r3, #1 + 8007878: d123 bne.n 80078c2 + 800787a: 687b ldr r3, [r7, #4] + 800787c: 6b9b ldr r3, [r3, #56] @ 0x38 + 800787e: f423 3280 bic.w r2, r3, #65536 @ 0x10000 + 8007882: 687b ldr r3, [r7, #4] + 8007884: 639a str r2, [r3, #56] @ 0x38 + 8007886: 687b ldr r3, [r7, #4] + 8007888: 68db ldr r3, [r3, #12] + 800788a: f423 0384 bic.w r3, r3, #4325376 @ 0x420000 + 800788e: f023 0340 bic.w r3, r3, #64 @ 0x40 + 8007892: 687a ldr r2, [r7, #4] + 8007894: 60d3 str r3, [r2, #12] + 8007896: 687b ldr r3, [r7, #4] + 8007898: 68db ldr r3, [r3, #12] + 800789a: f423 1240 bic.w r2, r3, #3145728 @ 0x300000 + 800789e: 687b ldr r3, [r7, #4] + 80078a0: 60da str r2, [r3, #12] + 80078a2: f897 3028 ldrb.w r3, [r7, #40] @ 0x28 + 80078a6: 2b01 cmp r3, #1 + 80078a8: d105 bne.n 80078b6 + 80078aa: 687b ldr r3, [r7, #4] + 80078ac: 68db ldr r3, [r3, #12] + 80078ae: f443 1280 orr.w r2, r3, #1048576 @ 0x100000 + 80078b2: 687b ldr r3, [r7, #4] + 80078b4: 60da str r2, [r3, #12] + 80078b6: 6878 ldr r0, [r7, #4] + 80078b8: f001 fae2 bl 8008e80 + 80078bc: 4603 mov r3, r0 + 80078be: 73fb strb r3, [r7, #15] + 80078c0: e01b b.n 80078fa + 80078c2: 687b ldr r3, [r7, #4] + 80078c4: 68db ldr r3, [r3, #12] + 80078c6: f043 0240 orr.w r2, r3, #64 @ 0x40 + 80078ca: 687b ldr r3, [r7, #4] + 80078cc: 60da str r2, [r3, #12] + 80078ce: 6878 ldr r0, [r7, #4] + 80078d0: f001 fad6 bl 8008e80 + 80078d4: 4603 mov r3, r0 + 80078d6: 73fb strb r3, [r7, #15] + 80078d8: f897 3025 ldrb.w r3, [r7, #37] @ 0x25 + 80078dc: 2b00 cmp r3, #0 + 80078de: d106 bne.n 80078ee + 80078e0: 687b ldr r3, [r7, #4] + 80078e2: 6b9b ldr r3, [r3, #56] @ 0x38 + 80078e4: f443 3280 orr.w r2, r3, #65536 @ 0x10000 + 80078e8: 687b ldr r3, [r7, #4] + 80078ea: 639a str r2, [r3, #56] @ 0x38 + 80078ec: e005 b.n 80078fa + 80078ee: 687b ldr r3, [r7, #4] + 80078f0: 6b9b ldr r3, [r3, #56] @ 0x38 + 80078f2: f423 3280 bic.w r2, r3, #65536 @ 0x10000 + 80078f6: 687b ldr r3, [r7, #4] + 80078f8: 639a str r2, [r3, #56] @ 0x38 + 80078fa: 7fbb ldrb r3, [r7, #30] + 80078fc: 2b01 cmp r3, #1 + 80078fe: d10b bne.n 8007918 + 8007900: 687b ldr r3, [r7, #4] + 8007902: 689b ldr r3, [r3, #8] + 8007904: f043 0206 orr.w r2, r3, #6 + 8007908: 687b ldr r3, [r7, #4] + 800790a: 609a str r2, [r3, #8] + 800790c: 687b ldr r3, [r7, #4] + 800790e: 689b ldr r3, [r3, #8] + 8007910: f043 0220 orr.w r2, r3, #32 + 8007914: 687b ldr r3, [r7, #4] + 8007916: 609a str r2, [r3, #8] + 8007918: 7bfb ldrb r3, [r7, #15] + 800791a: 4618 mov r0, r3 + 800791c: 3710 adds r7, #16 + 800791e: 46bd mov sp, r7 + 8007920: e8bd 4080 ldmia.w sp!, {r7, lr} + 8007924: b004 add sp, #16 + 8007926: 4770 bx lr + +08007928 : + 8007928: b480 push {r7} + 800792a: b087 sub sp, #28 + 800792c: af00 add r7, sp, #0 + 800792e: 60f8 str r0, [r7, #12] + 8007930: 60b9 str r1, [r7, #8] + 8007932: 4613 mov r3, r2 + 8007934: 71fb strb r3, [r7, #7] + 8007936: 79fb ldrb r3, [r7, #7] + 8007938: 2b02 cmp r3, #2 + 800793a: d165 bne.n 8007a08 + 800793c: 68bb ldr r3, [r7, #8] + 800793e: 4a41 ldr r2, [pc, #260] @ (8007a44 ) + 8007940: 4293 cmp r3, r2 + 8007942: d906 bls.n 8007952 + 8007944: 68bb ldr r3, [r7, #8] + 8007946: 4a40 ldr r2, [pc, #256] @ (8007a48 ) + 8007948: 4293 cmp r3, r2 + 800794a: d202 bcs.n 8007952 + 800794c: 230f movs r3, #15 + 800794e: 617b str r3, [r7, #20] + 8007950: e062 b.n 8007a18 + 8007952: 68bb ldr r3, [r7, #8] + 8007954: 4a3c ldr r2, [pc, #240] @ (8007a48 ) + 8007956: 4293 cmp r3, r2 + 8007958: d306 bcc.n 8007968 + 800795a: 68bb ldr r3, [r7, #8] + 800795c: 4a3b ldr r2, [pc, #236] @ (8007a4c ) + 800795e: 4293 cmp r3, r2 + 8007960: d202 bcs.n 8007968 + 8007962: 230e movs r3, #14 + 8007964: 617b str r3, [r7, #20] + 8007966: e057 b.n 8007a18 + 8007968: 68bb ldr r3, [r7, #8] + 800796a: 4a38 ldr r2, [pc, #224] @ (8007a4c ) + 800796c: 4293 cmp r3, r2 + 800796e: d306 bcc.n 800797e + 8007970: 68bb ldr r3, [r7, #8] + 8007972: 4a37 ldr r2, [pc, #220] @ (8007a50 ) + 8007974: 4293 cmp r3, r2 + 8007976: d202 bcs.n 800797e + 8007978: 230d movs r3, #13 + 800797a: 617b str r3, [r7, #20] + 800797c: e04c b.n 8007a18 + 800797e: 68bb ldr r3, [r7, #8] + 8007980: 4a33 ldr r2, [pc, #204] @ (8007a50 ) + 8007982: 4293 cmp r3, r2 + 8007984: d306 bcc.n 8007994 + 8007986: 68bb ldr r3, [r7, #8] + 8007988: 4a32 ldr r2, [pc, #200] @ (8007a54 ) + 800798a: 4293 cmp r3, r2 + 800798c: d802 bhi.n 8007994 + 800798e: 230c movs r3, #12 + 8007990: 617b str r3, [r7, #20] + 8007992: e041 b.n 8007a18 + 8007994: 68bb ldr r3, [r7, #8] + 8007996: 4a2f ldr r2, [pc, #188] @ (8007a54 ) + 8007998: 4293 cmp r3, r2 + 800799a: d906 bls.n 80079aa + 800799c: 68bb ldr r3, [r7, #8] + 800799e: 4a2e ldr r2, [pc, #184] @ (8007a58 ) + 80079a0: 4293 cmp r3, r2 + 80079a2: d802 bhi.n 80079aa + 80079a4: 230b movs r3, #11 + 80079a6: 617b str r3, [r7, #20] + 80079a8: e036 b.n 8007a18 + 80079aa: 68bb ldr r3, [r7, #8] + 80079ac: 4a2a ldr r2, [pc, #168] @ (8007a58 ) + 80079ae: 4293 cmp r3, r2 + 80079b0: d906 bls.n 80079c0 + 80079b2: 68bb ldr r3, [r7, #8] + 80079b4: 4a29 ldr r2, [pc, #164] @ (8007a5c ) + 80079b6: 4293 cmp r3, r2 + 80079b8: d802 bhi.n 80079c0 + 80079ba: 230a movs r3, #10 + 80079bc: 617b str r3, [r7, #20] + 80079be: e02b b.n 8007a18 + 80079c0: 68bb ldr r3, [r7, #8] + 80079c2: 4a26 ldr r2, [pc, #152] @ (8007a5c ) + 80079c4: 4293 cmp r3, r2 + 80079c6: d906 bls.n 80079d6 + 80079c8: 68bb ldr r3, [r7, #8] + 80079ca: 4a25 ldr r2, [pc, #148] @ (8007a60 ) + 80079cc: 4293 cmp r3, r2 + 80079ce: d202 bcs.n 80079d6 + 80079d0: 2309 movs r3, #9 + 80079d2: 617b str r3, [r7, #20] + 80079d4: e020 b.n 8007a18 + 80079d6: 68bb ldr r3, [r7, #8] + 80079d8: 4a21 ldr r2, [pc, #132] @ (8007a60 ) + 80079da: 4293 cmp r3, r2 + 80079dc: d306 bcc.n 80079ec + 80079de: 68bb ldr r3, [r7, #8] + 80079e0: 4a20 ldr r2, [pc, #128] @ (8007a64 ) + 80079e2: 4293 cmp r3, r2 + 80079e4: d802 bhi.n 80079ec + 80079e6: 2308 movs r3, #8 + 80079e8: 617b str r3, [r7, #20] + 80079ea: e015 b.n 8007a18 + 80079ec: 68bb ldr r3, [r7, #8] + 80079ee: 4a1d ldr r2, [pc, #116] @ (8007a64 ) + 80079f0: 4293 cmp r3, r2 + 80079f2: d906 bls.n 8007a02 + 80079f4: 68bb ldr r3, [r7, #8] + 80079f6: 4a1c ldr r2, [pc, #112] @ (8007a68 ) + 80079f8: 4293 cmp r3, r2 + 80079fa: d202 bcs.n 8007a02 + 80079fc: 2307 movs r3, #7 + 80079fe: 617b str r3, [r7, #20] + 8007a00: e00a b.n 8007a18 + 8007a02: 2306 movs r3, #6 + 8007a04: 617b str r3, [r7, #20] + 8007a06: e007 b.n 8007a18 + 8007a08: 79fb ldrb r3, [r7, #7] + 8007a0a: 2b00 cmp r3, #0 + 8007a0c: d102 bne.n 8007a14 + 8007a0e: 2309 movs r3, #9 + 8007a10: 617b str r3, [r7, #20] + 8007a12: e001 b.n 8007a18 + 8007a14: 2309 movs r3, #9 + 8007a16: 617b str r3, [r7, #20] + 8007a18: 68fb ldr r3, [r7, #12] + 8007a1a: 68db ldr r3, [r3, #12] + 8007a1c: f423 5270 bic.w r2, r3, #15360 @ 0x3c00 + 8007a20: 68fb ldr r3, [r7, #12] + 8007a22: 60da str r2, [r3, #12] + 8007a24: 68fb ldr r3, [r7, #12] + 8007a26: 68da ldr r2, [r3, #12] + 8007a28: 697b ldr r3, [r7, #20] + 8007a2a: 029b lsls r3, r3, #10 + 8007a2c: f403 5370 and.w r3, r3, #15360 @ 0x3c00 + 8007a30: 431a orrs r2, r3 + 8007a32: 68fb ldr r3, [r7, #12] + 8007a34: 60da str r2, [r3, #12] + 8007a36: 2300 movs r3, #0 + 8007a38: 4618 mov r0, r3 + 8007a3a: 371c adds r7, #28 + 8007a3c: 46bd mov sp, r7 + 8007a3e: f85d 7b04 ldr.w r7, [sp], #4 + 8007a42: 4770 bx lr + 8007a44: 00d8acbf .word 0x00d8acbf + 8007a48: 00e4e1c0 .word 0x00e4e1c0 + 8007a4c: 00f42400 .word 0x00f42400 + 8007a50: 01067380 .word 0x01067380 + 8007a54: 011a499f .word 0x011a499f + 8007a58: 01312cff .word 0x01312cff + 8007a5c: 014ca43f .word 0x014ca43f + 8007a60: 016e3600 .word 0x016e3600 + 8007a64: 01a6ab1f .word 0x01a6ab1f + 8007a68: 01e84800 .word 0x01e84800 + +08007a6c : + 8007a6c: b480 push {r7} + 8007a6e: b083 sub sp, #12 + 8007a70: af00 add r7, sp, #0 + 8007a72: 6078 str r0, [r7, #4] + 8007a74: 687b ldr r3, [r7, #4] + 8007a76: 689b ldr r3, [r3, #8] + 8007a78: f043 0201 orr.w r2, r3, #1 + 8007a7c: 687b ldr r3, [r7, #4] + 8007a7e: 609a str r2, [r3, #8] + 8007a80: 2300 movs r3, #0 + 8007a82: 4618 mov r0, r3 + 8007a84: 370c adds r7, #12 + 8007a86: 46bd mov sp, r7 + 8007a88: f85d 7b04 ldr.w r7, [sp], #4 + 8007a8c: 4770 bx lr + +08007a8e : + 8007a8e: b480 push {r7} + 8007a90: b083 sub sp, #12 + 8007a92: af00 add r7, sp, #0 + 8007a94: 6078 str r0, [r7, #4] + 8007a96: 687b ldr r3, [r7, #4] + 8007a98: 689b ldr r3, [r3, #8] + 8007a9a: f023 0201 bic.w r2, r3, #1 + 8007a9e: 687b ldr r3, [r7, #4] + 8007aa0: 609a str r2, [r3, #8] + 8007aa2: 2300 movs r3, #0 + 8007aa4: 4618 mov r0, r3 + 8007aa6: 370c adds r7, #12 + 8007aa8: 46bd mov sp, r7 + 8007aaa: f85d 7b04 ldr.w r7, [sp], #4 + 8007aae: 4770 bx lr + +08007ab0 : + 8007ab0: b580 push {r7, lr} + 8007ab2: b084 sub sp, #16 + 8007ab4: af00 add r7, sp, #0 + 8007ab6: 6078 str r0, [r7, #4] + 8007ab8: 460b mov r3, r1 + 8007aba: 70fb strb r3, [r7, #3] + 8007abc: 2300 movs r3, #0 + 8007abe: 60fb str r3, [r7, #12] + 8007ac0: 687b ldr r3, [r7, #4] + 8007ac2: 68db ldr r3, [r3, #12] + 8007ac4: f023 42c0 bic.w r2, r3, #1610612736 @ 0x60000000 + 8007ac8: 687b ldr r3, [r7, #4] + 8007aca: 60da str r2, [r3, #12] + 8007acc: 78fb ldrb r3, [r7, #3] + 8007ace: 2b01 cmp r3, #1 + 8007ad0: d115 bne.n 8007afe + 8007ad2: 687b ldr r3, [r7, #4] + 8007ad4: 68db ldr r3, [r3, #12] + 8007ad6: f043 5200 orr.w r2, r3, #536870912 @ 0x20000000 + 8007ada: 687b ldr r3, [r7, #4] + 8007adc: 60da str r2, [r3, #12] + 8007ade: 200a movs r0, #10 + 8007ae0: f7fa fa2e bl 8001f40 + 8007ae4: 68fb ldr r3, [r7, #12] + 8007ae6: 330a adds r3, #10 + 8007ae8: 60fb str r3, [r7, #12] + 8007aea: 6878 ldr r0, [r7, #4] + 8007aec: f001 f939 bl 8008d62 + 8007af0: 4603 mov r3, r0 + 8007af2: 2b01 cmp r3, #1 + 8007af4: d01e beq.n 8007b34 + 8007af6: 68fb ldr r3, [r7, #12] + 8007af8: 2bc7 cmp r3, #199 @ 0xc7 + 8007afa: d9f0 bls.n 8007ade + 8007afc: e01a b.n 8007b34 + 8007afe: 78fb ldrb r3, [r7, #3] + 8007b00: 2b00 cmp r3, #0 + 8007b02: d115 bne.n 8007b30 + 8007b04: 687b ldr r3, [r7, #4] + 8007b06: 68db ldr r3, [r3, #12] + 8007b08: f043 4280 orr.w r2, r3, #1073741824 @ 0x40000000 + 8007b0c: 687b ldr r3, [r7, #4] + 8007b0e: 60da str r2, [r3, #12] + 8007b10: 200a movs r0, #10 + 8007b12: f7fa fa15 bl 8001f40 + 8007b16: 68fb ldr r3, [r7, #12] + 8007b18: 330a adds r3, #10 + 8007b1a: 60fb str r3, [r7, #12] + 8007b1c: 6878 ldr r0, [r7, #4] + 8007b1e: f001 f920 bl 8008d62 + 8007b22: 4603 mov r3, r0 + 8007b24: 2b00 cmp r3, #0 + 8007b26: d005 beq.n 8007b34 + 8007b28: 68fb ldr r3, [r7, #12] + 8007b2a: 2bc7 cmp r3, #199 @ 0xc7 + 8007b2c: d9f0 bls.n 8007b10 + 8007b2e: e001 b.n 8007b34 + 8007b30: 2301 movs r3, #1 + 8007b32: e005 b.n 8007b40 + 8007b34: 68fb ldr r3, [r7, #12] + 8007b36: 2bc8 cmp r3, #200 @ 0xc8 + 8007b38: d101 bne.n 8007b3e + 8007b3a: 2301 movs r3, #1 + 8007b3c: e000 b.n 8007b40 + 8007b3e: 2300 movs r3, #0 + 8007b40: 4618 mov r0, r3 + 8007b42: 3710 adds r7, #16 + 8007b44: 46bd mov sp, r7 + 8007b46: bd80 pop {r7, pc} + +08007b48 : + 8007b48: b084 sub sp, #16 + 8007b4a: b580 push {r7, lr} + 8007b4c: b086 sub sp, #24 + 8007b4e: af00 add r7, sp, #0 + 8007b50: 6078 str r0, [r7, #4] + 8007b52: f107 0024 add.w r0, r7, #36 @ 0x24 + 8007b56: e880 000e stmia.w r0, {r1, r2, r3} + 8007b5a: 2300 movs r3, #0 + 8007b5c: 75fb strb r3, [r7, #23] + 8007b5e: 687b ldr r3, [r7, #4] + 8007b60: 60fb str r3, [r7, #12] + 8007b62: 2300 movs r3, #0 + 8007b64: 613b str r3, [r7, #16] + 8007b66: e009 b.n 8007b7c + 8007b68: 687a ldr r2, [r7, #4] + 8007b6a: 693b ldr r3, [r7, #16] + 8007b6c: 3340 adds r3, #64 @ 0x40 + 8007b6e: 009b lsls r3, r3, #2 + 8007b70: 4413 add r3, r2 + 8007b72: 2200 movs r2, #0 + 8007b74: 605a str r2, [r3, #4] + 8007b76: 693b ldr r3, [r7, #16] + 8007b78: 3301 adds r3, #1 + 8007b7a: 613b str r3, [r7, #16] + 8007b7c: 693b ldr r3, [r7, #16] + 8007b7e: 2b0e cmp r3, #14 + 8007b80: d9f2 bls.n 8007b68 + 8007b82: f897 302e ldrb.w r3, [r7, #46] @ 0x2e + 8007b86: 2b00 cmp r3, #0 + 8007b88: d11c bne.n 8007bc4 + 8007b8a: 68fb ldr r3, [r7, #12] + 8007b8c: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007b90: 685b ldr r3, [r3, #4] + 8007b92: 68fa ldr r2, [r7, #12] + 8007b94: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8007b98: f043 0302 orr.w r3, r3, #2 + 8007b9c: 6053 str r3, [r2, #4] + 8007b9e: 687b ldr r3, [r7, #4] + 8007ba0: 6b9b ldr r3, [r3, #56] @ 0x38 + 8007ba2: f423 1200 bic.w r2, r3, #2097152 @ 0x200000 + 8007ba6: 687b ldr r3, [r7, #4] + 8007ba8: 639a str r2, [r3, #56] @ 0x38 + 8007baa: 687b ldr r3, [r7, #4] + 8007bac: 681b ldr r3, [r3, #0] + 8007bae: f043 0240 orr.w r2, r3, #64 @ 0x40 + 8007bb2: 687b ldr r3, [r7, #4] + 8007bb4: 601a str r2, [r3, #0] + 8007bb6: 687b ldr r3, [r7, #4] + 8007bb8: 681b ldr r3, [r3, #0] + 8007bba: f043 0280 orr.w r2, r3, #128 @ 0x80 + 8007bbe: 687b ldr r3, [r7, #4] + 8007bc0: 601a str r2, [r3, #0] + 8007bc2: e005 b.n 8007bd0 + 8007bc4: 687b ldr r3, [r7, #4] + 8007bc6: 6b9b ldr r3, [r3, #56] @ 0x38 + 8007bc8: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 + 8007bcc: 687b ldr r3, [r7, #4] + 8007bce: 639a str r2, [r3, #56] @ 0x38 + 8007bd0: 68fb ldr r3, [r7, #12] + 8007bd2: f503 6360 add.w r3, r3, #3584 @ 0xe00 + 8007bd6: 461a mov r2, r3 + 8007bd8: 2300 movs r3, #0 + 8007bda: 6013 str r3, [r2, #0] + 8007bdc: f897 3029 ldrb.w r3, [r7, #41] @ 0x29 + 8007be0: 2b01 cmp r3, #1 + 8007be2: d10d bne.n 8007c00 + 8007be4: f897 3027 ldrb.w r3, [r7, #39] @ 0x27 + 8007be8: 2b00 cmp r3, #0 + 8007bea: d104 bne.n 8007bf6 + 8007bec: 2100 movs r1, #0 + 8007bee: 6878 ldr r0, [r7, #4] + 8007bf0: f000 f968 bl 8007ec4 + 8007bf4: e008 b.n 8007c08 + 8007bf6: 2101 movs r1, #1 + 8007bf8: 6878 ldr r0, [r7, #4] + 8007bfa: f000 f963 bl 8007ec4 + 8007bfe: e003 b.n 8007c08 + 8007c00: 2103 movs r1, #3 + 8007c02: 6878 ldr r0, [r7, #4] + 8007c04: f000 f95e bl 8007ec4 + 8007c08: 2110 movs r1, #16 + 8007c0a: 6878 ldr r0, [r7, #4] + 8007c0c: f000 f8fa bl 8007e04 + 8007c10: 4603 mov r3, r0 + 8007c12: 2b00 cmp r3, #0 + 8007c14: d001 beq.n 8007c1a + 8007c16: 2301 movs r3, #1 + 8007c18: 75fb strb r3, [r7, #23] + 8007c1a: 6878 ldr r0, [r7, #4] + 8007c1c: f000 f924 bl 8007e68 + 8007c20: 4603 mov r3, r0 + 8007c22: 2b00 cmp r3, #0 + 8007c24: d001 beq.n 8007c2a + 8007c26: 2301 movs r3, #1 + 8007c28: 75fb strb r3, [r7, #23] + 8007c2a: 68fb ldr r3, [r7, #12] + 8007c2c: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007c30: 461a mov r2, r3 + 8007c32: 2300 movs r3, #0 + 8007c34: 6113 str r3, [r2, #16] + 8007c36: 68fb ldr r3, [r7, #12] + 8007c38: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007c3c: 461a mov r2, r3 + 8007c3e: 2300 movs r3, #0 + 8007c40: 6153 str r3, [r2, #20] + 8007c42: 68fb ldr r3, [r7, #12] + 8007c44: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007c48: 461a mov r2, r3 + 8007c4a: 2300 movs r3, #0 + 8007c4c: 61d3 str r3, [r2, #28] + 8007c4e: 2300 movs r3, #0 + 8007c50: 613b str r3, [r7, #16] + 8007c52: e043 b.n 8007cdc + 8007c54: 693b ldr r3, [r7, #16] + 8007c56: 015a lsls r2, r3, #5 + 8007c58: 68fb ldr r3, [r7, #12] + 8007c5a: 4413 add r3, r2 + 8007c5c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007c60: 681b ldr r3, [r3, #0] + 8007c62: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8007c66: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8007c6a: d118 bne.n 8007c9e + 8007c6c: 693b ldr r3, [r7, #16] + 8007c6e: 2b00 cmp r3, #0 + 8007c70: d10a bne.n 8007c88 + 8007c72: 693b ldr r3, [r7, #16] + 8007c74: 015a lsls r2, r3, #5 + 8007c76: 68fb ldr r3, [r7, #12] + 8007c78: 4413 add r3, r2 + 8007c7a: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007c7e: 461a mov r2, r3 + 8007c80: f04f 6300 mov.w r3, #134217728 @ 0x8000000 + 8007c84: 6013 str r3, [r2, #0] + 8007c86: e013 b.n 8007cb0 + 8007c88: 693b ldr r3, [r7, #16] + 8007c8a: 015a lsls r2, r3, #5 + 8007c8c: 68fb ldr r3, [r7, #12] + 8007c8e: 4413 add r3, r2 + 8007c90: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007c94: 461a mov r2, r3 + 8007c96: f04f 4390 mov.w r3, #1207959552 @ 0x48000000 + 8007c9a: 6013 str r3, [r2, #0] + 8007c9c: e008 b.n 8007cb0 + 8007c9e: 693b ldr r3, [r7, #16] + 8007ca0: 015a lsls r2, r3, #5 + 8007ca2: 68fb ldr r3, [r7, #12] + 8007ca4: 4413 add r3, r2 + 8007ca6: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007caa: 461a mov r2, r3 + 8007cac: 2300 movs r3, #0 + 8007cae: 6013 str r3, [r2, #0] + 8007cb0: 693b ldr r3, [r7, #16] + 8007cb2: 015a lsls r2, r3, #5 + 8007cb4: 68fb ldr r3, [r7, #12] + 8007cb6: 4413 add r3, r2 + 8007cb8: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007cbc: 461a mov r2, r3 + 8007cbe: 2300 movs r3, #0 + 8007cc0: 6113 str r3, [r2, #16] + 8007cc2: 693b ldr r3, [r7, #16] + 8007cc4: 015a lsls r2, r3, #5 + 8007cc6: 68fb ldr r3, [r7, #12] + 8007cc8: 4413 add r3, r2 + 8007cca: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007cce: 461a mov r2, r3 + 8007cd0: f64f 337f movw r3, #64383 @ 0xfb7f + 8007cd4: 6093 str r3, [r2, #8] + 8007cd6: 693b ldr r3, [r7, #16] + 8007cd8: 3301 adds r3, #1 + 8007cda: 613b str r3, [r7, #16] + 8007cdc: f897 3024 ldrb.w r3, [r7, #36] @ 0x24 + 8007ce0: 461a mov r2, r3 + 8007ce2: 693b ldr r3, [r7, #16] + 8007ce4: 4293 cmp r3, r2 + 8007ce6: d3b5 bcc.n 8007c54 + 8007ce8: 2300 movs r3, #0 + 8007cea: 613b str r3, [r7, #16] + 8007cec: e043 b.n 8007d76 + 8007cee: 693b ldr r3, [r7, #16] + 8007cf0: 015a lsls r2, r3, #5 + 8007cf2: 68fb ldr r3, [r7, #12] + 8007cf4: 4413 add r3, r2 + 8007cf6: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8007cfa: 681b ldr r3, [r3, #0] + 8007cfc: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8007d00: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8007d04: d118 bne.n 8007d38 + 8007d06: 693b ldr r3, [r7, #16] + 8007d08: 2b00 cmp r3, #0 + 8007d0a: d10a bne.n 8007d22 + 8007d0c: 693b ldr r3, [r7, #16] + 8007d0e: 015a lsls r2, r3, #5 + 8007d10: 68fb ldr r3, [r7, #12] + 8007d12: 4413 add r3, r2 + 8007d14: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8007d18: 461a mov r2, r3 + 8007d1a: f04f 6300 mov.w r3, #134217728 @ 0x8000000 + 8007d1e: 6013 str r3, [r2, #0] + 8007d20: e013 b.n 8007d4a + 8007d22: 693b ldr r3, [r7, #16] + 8007d24: 015a lsls r2, r3, #5 + 8007d26: 68fb ldr r3, [r7, #12] + 8007d28: 4413 add r3, r2 + 8007d2a: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8007d2e: 461a mov r2, r3 + 8007d30: f04f 4390 mov.w r3, #1207959552 @ 0x48000000 + 8007d34: 6013 str r3, [r2, #0] + 8007d36: e008 b.n 8007d4a + 8007d38: 693b ldr r3, [r7, #16] + 8007d3a: 015a lsls r2, r3, #5 + 8007d3c: 68fb ldr r3, [r7, #12] + 8007d3e: 4413 add r3, r2 + 8007d40: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8007d44: 461a mov r2, r3 + 8007d46: 2300 movs r3, #0 + 8007d48: 6013 str r3, [r2, #0] + 8007d4a: 693b ldr r3, [r7, #16] + 8007d4c: 015a lsls r2, r3, #5 + 8007d4e: 68fb ldr r3, [r7, #12] + 8007d50: 4413 add r3, r2 + 8007d52: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8007d56: 461a mov r2, r3 + 8007d58: 2300 movs r3, #0 + 8007d5a: 6113 str r3, [r2, #16] + 8007d5c: 693b ldr r3, [r7, #16] + 8007d5e: 015a lsls r2, r3, #5 + 8007d60: 68fb ldr r3, [r7, #12] + 8007d62: 4413 add r3, r2 + 8007d64: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8007d68: 461a mov r2, r3 + 8007d6a: f64f 337f movw r3, #64383 @ 0xfb7f + 8007d6e: 6093 str r3, [r2, #8] + 8007d70: 693b ldr r3, [r7, #16] + 8007d72: 3301 adds r3, #1 + 8007d74: 613b str r3, [r7, #16] + 8007d76: f897 3024 ldrb.w r3, [r7, #36] @ 0x24 + 8007d7a: 461a mov r2, r3 + 8007d7c: 693b ldr r3, [r7, #16] + 8007d7e: 4293 cmp r3, r2 + 8007d80: d3b5 bcc.n 8007cee + 8007d82: 68fb ldr r3, [r7, #12] + 8007d84: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007d88: 691b ldr r3, [r3, #16] + 8007d8a: 68fa ldr r2, [r7, #12] + 8007d8c: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8007d90: f423 7380 bic.w r3, r3, #256 @ 0x100 + 8007d94: 6113 str r3, [r2, #16] + 8007d96: 687b ldr r3, [r7, #4] + 8007d98: 2200 movs r2, #0 + 8007d9a: 619a str r2, [r3, #24] + 8007d9c: 687b ldr r3, [r7, #4] + 8007d9e: f06f 4280 mvn.w r2, #1073741824 @ 0x40000000 + 8007da2: 615a str r2, [r3, #20] + 8007da4: f897 3026 ldrb.w r3, [r7, #38] @ 0x26 + 8007da8: 2b00 cmp r3, #0 + 8007daa: d105 bne.n 8007db8 + 8007dac: 687b ldr r3, [r7, #4] + 8007dae: 699b ldr r3, [r3, #24] + 8007db0: f043 0210 orr.w r2, r3, #16 + 8007db4: 687b ldr r3, [r7, #4] + 8007db6: 619a str r2, [r3, #24] + 8007db8: 687b ldr r3, [r7, #4] + 8007dba: 699a ldr r2, [r3, #24] + 8007dbc: 4b10 ldr r3, [pc, #64] @ (8007e00 ) + 8007dbe: 4313 orrs r3, r2 + 8007dc0: 687a ldr r2, [r7, #4] + 8007dc2: 6193 str r3, [r2, #24] + 8007dc4: f897 302a ldrb.w r3, [r7, #42] @ 0x2a + 8007dc8: 2b00 cmp r3, #0 + 8007dca: d005 beq.n 8007dd8 + 8007dcc: 687b ldr r3, [r7, #4] + 8007dce: 699b ldr r3, [r3, #24] + 8007dd0: f043 0208 orr.w r2, r3, #8 + 8007dd4: 687b ldr r3, [r7, #4] + 8007dd6: 619a str r2, [r3, #24] + 8007dd8: f897 302e ldrb.w r3, [r7, #46] @ 0x2e + 8007ddc: 2b01 cmp r3, #1 + 8007dde: d107 bne.n 8007df0 + 8007de0: 687b ldr r3, [r7, #4] + 8007de2: 699b ldr r3, [r3, #24] + 8007de4: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000 + 8007de8: f043 0304 orr.w r3, r3, #4 + 8007dec: 687a ldr r2, [r7, #4] + 8007dee: 6193 str r3, [r2, #24] + 8007df0: 7dfb ldrb r3, [r7, #23] + 8007df2: 4618 mov r0, r3 + 8007df4: 3718 adds r7, #24 + 8007df6: 46bd mov sp, r7 + 8007df8: e8bd 4080 ldmia.w sp!, {r7, lr} + 8007dfc: b004 add sp, #16 + 8007dfe: 4770 bx lr + 8007e00: 803c3800 .word 0x803c3800 + +08007e04 : + 8007e04: b480 push {r7} + 8007e06: b085 sub sp, #20 + 8007e08: af00 add r7, sp, #0 + 8007e0a: 6078 str r0, [r7, #4] + 8007e0c: 6039 str r1, [r7, #0] + 8007e0e: 2300 movs r3, #0 + 8007e10: 60fb str r3, [r7, #12] + 8007e12: 68fb ldr r3, [r7, #12] + 8007e14: 3301 adds r3, #1 + 8007e16: 60fb str r3, [r7, #12] + 8007e18: 68fb ldr r3, [r7, #12] + 8007e1a: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8007e1e: d901 bls.n 8007e24 + 8007e20: 2303 movs r3, #3 + 8007e22: e01b b.n 8007e5c + 8007e24: 687b ldr r3, [r7, #4] + 8007e26: 691b ldr r3, [r3, #16] + 8007e28: 2b00 cmp r3, #0 + 8007e2a: daf2 bge.n 8007e12 + 8007e2c: 2300 movs r3, #0 + 8007e2e: 60fb str r3, [r7, #12] + 8007e30: 683b ldr r3, [r7, #0] + 8007e32: 019b lsls r3, r3, #6 + 8007e34: f043 0220 orr.w r2, r3, #32 + 8007e38: 687b ldr r3, [r7, #4] + 8007e3a: 611a str r2, [r3, #16] + 8007e3c: 68fb ldr r3, [r7, #12] + 8007e3e: 3301 adds r3, #1 + 8007e40: 60fb str r3, [r7, #12] + 8007e42: 68fb ldr r3, [r7, #12] + 8007e44: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8007e48: d901 bls.n 8007e4e + 8007e4a: 2303 movs r3, #3 + 8007e4c: e006 b.n 8007e5c + 8007e4e: 687b ldr r3, [r7, #4] + 8007e50: 691b ldr r3, [r3, #16] + 8007e52: f003 0320 and.w r3, r3, #32 + 8007e56: 2b20 cmp r3, #32 + 8007e58: d0f0 beq.n 8007e3c + 8007e5a: 2300 movs r3, #0 + 8007e5c: 4618 mov r0, r3 + 8007e5e: 3714 adds r7, #20 + 8007e60: 46bd mov sp, r7 + 8007e62: f85d 7b04 ldr.w r7, [sp], #4 + 8007e66: 4770 bx lr + +08007e68 : + 8007e68: b480 push {r7} + 8007e6a: b085 sub sp, #20 + 8007e6c: af00 add r7, sp, #0 + 8007e6e: 6078 str r0, [r7, #4] + 8007e70: 2300 movs r3, #0 + 8007e72: 60fb str r3, [r7, #12] + 8007e74: 68fb ldr r3, [r7, #12] + 8007e76: 3301 adds r3, #1 + 8007e78: 60fb str r3, [r7, #12] + 8007e7a: 68fb ldr r3, [r7, #12] + 8007e7c: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8007e80: d901 bls.n 8007e86 + 8007e82: 2303 movs r3, #3 + 8007e84: e018 b.n 8007eb8 + 8007e86: 687b ldr r3, [r7, #4] + 8007e88: 691b ldr r3, [r3, #16] + 8007e8a: 2b00 cmp r3, #0 + 8007e8c: daf2 bge.n 8007e74 + 8007e8e: 2300 movs r3, #0 + 8007e90: 60fb str r3, [r7, #12] + 8007e92: 687b ldr r3, [r7, #4] + 8007e94: 2210 movs r2, #16 + 8007e96: 611a str r2, [r3, #16] + 8007e98: 68fb ldr r3, [r7, #12] + 8007e9a: 3301 adds r3, #1 + 8007e9c: 60fb str r3, [r7, #12] + 8007e9e: 68fb ldr r3, [r7, #12] + 8007ea0: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8007ea4: d901 bls.n 8007eaa + 8007ea6: 2303 movs r3, #3 + 8007ea8: e006 b.n 8007eb8 + 8007eaa: 687b ldr r3, [r7, #4] + 8007eac: 691b ldr r3, [r3, #16] + 8007eae: f003 0310 and.w r3, r3, #16 + 8007eb2: 2b10 cmp r3, #16 + 8007eb4: d0f0 beq.n 8007e98 + 8007eb6: 2300 movs r3, #0 + 8007eb8: 4618 mov r0, r3 + 8007eba: 3714 adds r7, #20 + 8007ebc: 46bd mov sp, r7 + 8007ebe: f85d 7b04 ldr.w r7, [sp], #4 + 8007ec2: 4770 bx lr + +08007ec4 : + 8007ec4: b480 push {r7} + 8007ec6: b085 sub sp, #20 + 8007ec8: af00 add r7, sp, #0 + 8007eca: 6078 str r0, [r7, #4] + 8007ecc: 460b mov r3, r1 + 8007ece: 70fb strb r3, [r7, #3] + 8007ed0: 687b ldr r3, [r7, #4] + 8007ed2: 60fb str r3, [r7, #12] + 8007ed4: 68fb ldr r3, [r7, #12] + 8007ed6: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007eda: 681a ldr r2, [r3, #0] + 8007edc: 78fb ldrb r3, [r7, #3] + 8007ede: 68f9 ldr r1, [r7, #12] + 8007ee0: f501 6100 add.w r1, r1, #2048 @ 0x800 + 8007ee4: 4313 orrs r3, r2 + 8007ee6: 600b str r3, [r1, #0] + 8007ee8: 2300 movs r3, #0 + 8007eea: 4618 mov r0, r3 + 8007eec: 3714 adds r7, #20 + 8007eee: 46bd mov sp, r7 + 8007ef0: f85d 7b04 ldr.w r7, [sp], #4 + 8007ef4: 4770 bx lr + +08007ef6 : + 8007ef6: b480 push {r7} + 8007ef8: b087 sub sp, #28 + 8007efa: af00 add r7, sp, #0 + 8007efc: 6078 str r0, [r7, #4] + 8007efe: 687b ldr r3, [r7, #4] + 8007f00: 613b str r3, [r7, #16] + 8007f02: 693b ldr r3, [r7, #16] + 8007f04: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007f08: 689b ldr r3, [r3, #8] + 8007f0a: f003 0306 and.w r3, r3, #6 + 8007f0e: 60fb str r3, [r7, #12] + 8007f10: 68fb ldr r3, [r7, #12] + 8007f12: 2b00 cmp r3, #0 + 8007f14: d102 bne.n 8007f1c + 8007f16: 2300 movs r3, #0 + 8007f18: 75fb strb r3, [r7, #23] + 8007f1a: e00a b.n 8007f32 + 8007f1c: 68fb ldr r3, [r7, #12] + 8007f1e: 2b02 cmp r3, #2 + 8007f20: d002 beq.n 8007f28 + 8007f22: 68fb ldr r3, [r7, #12] + 8007f24: 2b06 cmp r3, #6 + 8007f26: d102 bne.n 8007f2e + 8007f28: 2302 movs r3, #2 + 8007f2a: 75fb strb r3, [r7, #23] + 8007f2c: e001 b.n 8007f32 + 8007f2e: 230f movs r3, #15 + 8007f30: 75fb strb r3, [r7, #23] + 8007f32: 7dfb ldrb r3, [r7, #23] + 8007f34: 4618 mov r0, r3 + 8007f36: 371c adds r7, #28 + 8007f38: 46bd mov sp, r7 + 8007f3a: f85d 7b04 ldr.w r7, [sp], #4 + 8007f3e: 4770 bx lr + +08007f40 : + 8007f40: b480 push {r7} + 8007f42: b085 sub sp, #20 + 8007f44: af00 add r7, sp, #0 + 8007f46: 6078 str r0, [r7, #4] + 8007f48: 6039 str r1, [r7, #0] + 8007f4a: 687b ldr r3, [r7, #4] + 8007f4c: 60fb str r3, [r7, #12] + 8007f4e: 683b ldr r3, [r7, #0] + 8007f50: 781b ldrb r3, [r3, #0] + 8007f52: 60bb str r3, [r7, #8] + 8007f54: 683b ldr r3, [r7, #0] + 8007f56: 785b ldrb r3, [r3, #1] + 8007f58: 2b01 cmp r3, #1 + 8007f5a: d13a bne.n 8007fd2 + 8007f5c: 68fb ldr r3, [r7, #12] + 8007f5e: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007f62: 69da ldr r2, [r3, #28] + 8007f64: 683b ldr r3, [r7, #0] + 8007f66: 781b ldrb r3, [r3, #0] + 8007f68: f003 030f and.w r3, r3, #15 + 8007f6c: 2101 movs r1, #1 + 8007f6e: fa01 f303 lsl.w r3, r1, r3 + 8007f72: b29b uxth r3, r3 + 8007f74: 68f9 ldr r1, [r7, #12] + 8007f76: f501 6100 add.w r1, r1, #2048 @ 0x800 + 8007f7a: 4313 orrs r3, r2 + 8007f7c: 61cb str r3, [r1, #28] + 8007f7e: 68bb ldr r3, [r7, #8] + 8007f80: 015a lsls r2, r3, #5 + 8007f82: 68fb ldr r3, [r7, #12] + 8007f84: 4413 add r3, r2 + 8007f86: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007f8a: 681b ldr r3, [r3, #0] + 8007f8c: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 8007f90: 2b00 cmp r3, #0 + 8007f92: d155 bne.n 8008040 + 8007f94: 68bb ldr r3, [r7, #8] + 8007f96: 015a lsls r2, r3, #5 + 8007f98: 68fb ldr r3, [r7, #12] + 8007f9a: 4413 add r3, r2 + 8007f9c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8007fa0: 681a ldr r2, [r3, #0] + 8007fa2: 683b ldr r3, [r7, #0] + 8007fa4: 689b ldr r3, [r3, #8] + 8007fa6: f3c3 010a ubfx r1, r3, #0, #11 + 8007faa: 683b ldr r3, [r7, #0] + 8007fac: 791b ldrb r3, [r3, #4] + 8007fae: 049b lsls r3, r3, #18 + 8007fb0: 4319 orrs r1, r3 + 8007fb2: 68bb ldr r3, [r7, #8] + 8007fb4: 059b lsls r3, r3, #22 + 8007fb6: 430b orrs r3, r1 + 8007fb8: 4313 orrs r3, r2 + 8007fba: 68ba ldr r2, [r7, #8] + 8007fbc: 0151 lsls r1, r2, #5 + 8007fbe: 68fa ldr r2, [r7, #12] + 8007fc0: 440a add r2, r1 + 8007fc2: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8007fc6: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8007fca: f443 4300 orr.w r3, r3, #32768 @ 0x8000 + 8007fce: 6013 str r3, [r2, #0] + 8007fd0: e036 b.n 8008040 + 8007fd2: 68fb ldr r3, [r7, #12] + 8007fd4: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8007fd8: 69da ldr r2, [r3, #28] + 8007fda: 683b ldr r3, [r7, #0] + 8007fdc: 781b ldrb r3, [r3, #0] + 8007fde: f003 030f and.w r3, r3, #15 + 8007fe2: 2101 movs r1, #1 + 8007fe4: fa01 f303 lsl.w r3, r1, r3 + 8007fe8: 041b lsls r3, r3, #16 + 8007fea: 68f9 ldr r1, [r7, #12] + 8007fec: f501 6100 add.w r1, r1, #2048 @ 0x800 + 8007ff0: 4313 orrs r3, r2 + 8007ff2: 61cb str r3, [r1, #28] + 8007ff4: 68bb ldr r3, [r7, #8] + 8007ff6: 015a lsls r2, r3, #5 + 8007ff8: 68fb ldr r3, [r7, #12] + 8007ffa: 4413 add r3, r2 + 8007ffc: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008000: 681b ldr r3, [r3, #0] + 8008002: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 8008006: 2b00 cmp r3, #0 + 8008008: d11a bne.n 8008040 + 800800a: 68bb ldr r3, [r7, #8] + 800800c: 015a lsls r2, r3, #5 + 800800e: 68fb ldr r3, [r7, #12] + 8008010: 4413 add r3, r2 + 8008012: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008016: 681a ldr r2, [r3, #0] + 8008018: 683b ldr r3, [r7, #0] + 800801a: 689b ldr r3, [r3, #8] + 800801c: f3c3 010a ubfx r1, r3, #0, #11 + 8008020: 683b ldr r3, [r7, #0] + 8008022: 791b ldrb r3, [r3, #4] + 8008024: 049b lsls r3, r3, #18 + 8008026: 430b orrs r3, r1 + 8008028: 4313 orrs r3, r2 + 800802a: 68ba ldr r2, [r7, #8] + 800802c: 0151 lsls r1, r2, #5 + 800802e: 68fa ldr r2, [r7, #12] + 8008030: 440a add r2, r1 + 8008032: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008036: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 800803a: f443 4300 orr.w r3, r3, #32768 @ 0x8000 + 800803e: 6013 str r3, [r2, #0] + 8008040: 2300 movs r3, #0 + 8008042: 4618 mov r0, r3 + 8008044: 3714 adds r7, #20 + 8008046: 46bd mov sp, r7 + 8008048: f85d 7b04 ldr.w r7, [sp], #4 + 800804c: 4770 bx lr + ... + +08008050 : + 8008050: b480 push {r7} + 8008052: b085 sub sp, #20 + 8008054: af00 add r7, sp, #0 + 8008056: 6078 str r0, [r7, #4] + 8008058: 6039 str r1, [r7, #0] + 800805a: 687b ldr r3, [r7, #4] + 800805c: 60fb str r3, [r7, #12] + 800805e: 683b ldr r3, [r7, #0] + 8008060: 781b ldrb r3, [r3, #0] + 8008062: 60bb str r3, [r7, #8] + 8008064: 683b ldr r3, [r7, #0] + 8008066: 785b ldrb r3, [r3, #1] + 8008068: 2b01 cmp r3, #1 + 800806a: d161 bne.n 8008130 + 800806c: 68bb ldr r3, [r7, #8] + 800806e: 015a lsls r2, r3, #5 + 8008070: 68fb ldr r3, [r7, #12] + 8008072: 4413 add r3, r2 + 8008074: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008078: 681b ldr r3, [r3, #0] + 800807a: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 800807e: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8008082: d11f bne.n 80080c4 + 8008084: 68bb ldr r3, [r7, #8] + 8008086: 015a lsls r2, r3, #5 + 8008088: 68fb ldr r3, [r7, #12] + 800808a: 4413 add r3, r2 + 800808c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008090: 681b ldr r3, [r3, #0] + 8008092: 68ba ldr r2, [r7, #8] + 8008094: 0151 lsls r1, r2, #5 + 8008096: 68fa ldr r2, [r7, #12] + 8008098: 440a add r2, r1 + 800809a: f502 6210 add.w r2, r2, #2304 @ 0x900 + 800809e: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 80080a2: 6013 str r3, [r2, #0] + 80080a4: 68bb ldr r3, [r7, #8] + 80080a6: 015a lsls r2, r3, #5 + 80080a8: 68fb ldr r3, [r7, #12] + 80080aa: 4413 add r3, r2 + 80080ac: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80080b0: 681b ldr r3, [r3, #0] + 80080b2: 68ba ldr r2, [r7, #8] + 80080b4: 0151 lsls r1, r2, #5 + 80080b6: 68fa ldr r2, [r7, #12] + 80080b8: 440a add r2, r1 + 80080ba: f502 6210 add.w r2, r2, #2304 @ 0x900 + 80080be: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000 + 80080c2: 6013 str r3, [r2, #0] + 80080c4: 68fb ldr r3, [r7, #12] + 80080c6: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80080ca: 6bda ldr r2, [r3, #60] @ 0x3c + 80080cc: 683b ldr r3, [r7, #0] + 80080ce: 781b ldrb r3, [r3, #0] + 80080d0: f003 030f and.w r3, r3, #15 + 80080d4: 2101 movs r1, #1 + 80080d6: fa01 f303 lsl.w r3, r1, r3 + 80080da: b29b uxth r3, r3 + 80080dc: 43db mvns r3, r3 + 80080de: 68f9 ldr r1, [r7, #12] + 80080e0: f501 6100 add.w r1, r1, #2048 @ 0x800 + 80080e4: 4013 ands r3, r2 + 80080e6: 63cb str r3, [r1, #60] @ 0x3c + 80080e8: 68fb ldr r3, [r7, #12] + 80080ea: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80080ee: 69da ldr r2, [r3, #28] + 80080f0: 683b ldr r3, [r7, #0] + 80080f2: 781b ldrb r3, [r3, #0] + 80080f4: f003 030f and.w r3, r3, #15 + 80080f8: 2101 movs r1, #1 + 80080fa: fa01 f303 lsl.w r3, r1, r3 + 80080fe: b29b uxth r3, r3 + 8008100: 43db mvns r3, r3 + 8008102: 68f9 ldr r1, [r7, #12] + 8008104: f501 6100 add.w r1, r1, #2048 @ 0x800 + 8008108: 4013 ands r3, r2 + 800810a: 61cb str r3, [r1, #28] + 800810c: 68bb ldr r3, [r7, #8] + 800810e: 015a lsls r2, r3, #5 + 8008110: 68fb ldr r3, [r7, #12] + 8008112: 4413 add r3, r2 + 8008114: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008118: 681a ldr r2, [r3, #0] + 800811a: 68bb ldr r3, [r7, #8] + 800811c: 0159 lsls r1, r3, #5 + 800811e: 68fb ldr r3, [r7, #12] + 8008120: 440b add r3, r1 + 8008122: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008126: 4619 mov r1, r3 + 8008128: 4b35 ldr r3, [pc, #212] @ (8008200 ) + 800812a: 4013 ands r3, r2 + 800812c: 600b str r3, [r1, #0] + 800812e: e060 b.n 80081f2 + 8008130: 68bb ldr r3, [r7, #8] + 8008132: 015a lsls r2, r3, #5 + 8008134: 68fb ldr r3, [r7, #12] + 8008136: 4413 add r3, r2 + 8008138: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 800813c: 681b ldr r3, [r3, #0] + 800813e: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8008142: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8008146: d11f bne.n 8008188 + 8008148: 68bb ldr r3, [r7, #8] + 800814a: 015a lsls r2, r3, #5 + 800814c: 68fb ldr r3, [r7, #12] + 800814e: 4413 add r3, r2 + 8008150: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008154: 681b ldr r3, [r3, #0] + 8008156: 68ba ldr r2, [r7, #8] + 8008158: 0151 lsls r1, r2, #5 + 800815a: 68fa ldr r2, [r7, #12] + 800815c: 440a add r2, r1 + 800815e: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008162: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 8008166: 6013 str r3, [r2, #0] + 8008168: 68bb ldr r3, [r7, #8] + 800816a: 015a lsls r2, r3, #5 + 800816c: 68fb ldr r3, [r7, #12] + 800816e: 4413 add r3, r2 + 8008170: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008174: 681b ldr r3, [r3, #0] + 8008176: 68ba ldr r2, [r7, #8] + 8008178: 0151 lsls r1, r2, #5 + 800817a: 68fa ldr r2, [r7, #12] + 800817c: 440a add r2, r1 + 800817e: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008182: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000 + 8008186: 6013 str r3, [r2, #0] + 8008188: 68fb ldr r3, [r7, #12] + 800818a: f503 6300 add.w r3, r3, #2048 @ 0x800 + 800818e: 6bda ldr r2, [r3, #60] @ 0x3c + 8008190: 683b ldr r3, [r7, #0] + 8008192: 781b ldrb r3, [r3, #0] + 8008194: f003 030f and.w r3, r3, #15 + 8008198: 2101 movs r1, #1 + 800819a: fa01 f303 lsl.w r3, r1, r3 + 800819e: 041b lsls r3, r3, #16 + 80081a0: 43db mvns r3, r3 + 80081a2: 68f9 ldr r1, [r7, #12] + 80081a4: f501 6100 add.w r1, r1, #2048 @ 0x800 + 80081a8: 4013 ands r3, r2 + 80081aa: 63cb str r3, [r1, #60] @ 0x3c + 80081ac: 68fb ldr r3, [r7, #12] + 80081ae: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80081b2: 69da ldr r2, [r3, #28] + 80081b4: 683b ldr r3, [r7, #0] + 80081b6: 781b ldrb r3, [r3, #0] + 80081b8: f003 030f and.w r3, r3, #15 + 80081bc: 2101 movs r1, #1 + 80081be: fa01 f303 lsl.w r3, r1, r3 + 80081c2: 041b lsls r3, r3, #16 + 80081c4: 43db mvns r3, r3 + 80081c6: 68f9 ldr r1, [r7, #12] + 80081c8: f501 6100 add.w r1, r1, #2048 @ 0x800 + 80081cc: 4013 ands r3, r2 + 80081ce: 61cb str r3, [r1, #28] + 80081d0: 68bb ldr r3, [r7, #8] + 80081d2: 015a lsls r2, r3, #5 + 80081d4: 68fb ldr r3, [r7, #12] + 80081d6: 4413 add r3, r2 + 80081d8: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80081dc: 681a ldr r2, [r3, #0] + 80081de: 68bb ldr r3, [r7, #8] + 80081e0: 0159 lsls r1, r3, #5 + 80081e2: 68fb ldr r3, [r7, #12] + 80081e4: 440b add r3, r1 + 80081e6: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80081ea: 4619 mov r1, r3 + 80081ec: 4b05 ldr r3, [pc, #20] @ (8008204 ) + 80081ee: 4013 ands r3, r2 + 80081f0: 600b str r3, [r1, #0] + 80081f2: 2300 movs r3, #0 + 80081f4: 4618 mov r0, r3 + 80081f6: 3714 adds r7, #20 + 80081f8: 46bd mov sp, r7 + 80081fa: f85d 7b04 ldr.w r7, [sp], #4 + 80081fe: 4770 bx lr + 8008200: ec337800 .word 0xec337800 + 8008204: eff37800 .word 0xeff37800 + +08008208 : + 8008208: b580 push {r7, lr} + 800820a: b08a sub sp, #40 @ 0x28 + 800820c: af02 add r7, sp, #8 + 800820e: 60f8 str r0, [r7, #12] + 8008210: 60b9 str r1, [r7, #8] + 8008212: 4613 mov r3, r2 + 8008214: 71fb strb r3, [r7, #7] + 8008216: 68fb ldr r3, [r7, #12] + 8008218: 61fb str r3, [r7, #28] + 800821a: 68bb ldr r3, [r7, #8] + 800821c: 781b ldrb r3, [r3, #0] + 800821e: 61bb str r3, [r7, #24] + 8008220: 68bb ldr r3, [r7, #8] + 8008222: 785b ldrb r3, [r3, #1] + 8008224: 2b01 cmp r3, #1 + 8008226: f040 817f bne.w 8008528 + 800822a: 68bb ldr r3, [r7, #8] + 800822c: 691b ldr r3, [r3, #16] + 800822e: 2b00 cmp r3, #0 + 8008230: d132 bne.n 8008298 + 8008232: 69bb ldr r3, [r7, #24] + 8008234: 015a lsls r2, r3, #5 + 8008236: 69fb ldr r3, [r7, #28] + 8008238: 4413 add r3, r2 + 800823a: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800823e: 691b ldr r3, [r3, #16] + 8008240: 69ba ldr r2, [r7, #24] + 8008242: 0151 lsls r1, r2, #5 + 8008244: 69fa ldr r2, [r7, #28] + 8008246: 440a add r2, r1 + 8008248: f502 6210 add.w r2, r2, #2304 @ 0x900 + 800824c: f023 53ff bic.w r3, r3, #534773760 @ 0x1fe00000 + 8008250: f423 13c0 bic.w r3, r3, #1572864 @ 0x180000 + 8008254: 6113 str r3, [r2, #16] + 8008256: 69bb ldr r3, [r7, #24] + 8008258: 015a lsls r2, r3, #5 + 800825a: 69fb ldr r3, [r7, #28] + 800825c: 4413 add r3, r2 + 800825e: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008262: 691b ldr r3, [r3, #16] + 8008264: 69ba ldr r2, [r7, #24] + 8008266: 0151 lsls r1, r2, #5 + 8008268: 69fa ldr r2, [r7, #28] + 800826a: 440a add r2, r1 + 800826c: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008270: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 8008274: 6113 str r3, [r2, #16] + 8008276: 69bb ldr r3, [r7, #24] + 8008278: 015a lsls r2, r3, #5 + 800827a: 69fb ldr r3, [r7, #28] + 800827c: 4413 add r3, r2 + 800827e: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008282: 691b ldr r3, [r3, #16] + 8008284: 69ba ldr r2, [r7, #24] + 8008286: 0151 lsls r1, r2, #5 + 8008288: 69fa ldr r2, [r7, #28] + 800828a: 440a add r2, r1 + 800828c: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008290: 0cdb lsrs r3, r3, #19 + 8008292: 04db lsls r3, r3, #19 + 8008294: 6113 str r3, [r2, #16] + 8008296: e097 b.n 80083c8 + 8008298: 69bb ldr r3, [r7, #24] + 800829a: 015a lsls r2, r3, #5 + 800829c: 69fb ldr r3, [r7, #28] + 800829e: 4413 add r3, r2 + 80082a0: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80082a4: 691b ldr r3, [r3, #16] + 80082a6: 69ba ldr r2, [r7, #24] + 80082a8: 0151 lsls r1, r2, #5 + 80082aa: 69fa ldr r2, [r7, #28] + 80082ac: 440a add r2, r1 + 80082ae: f502 6210 add.w r2, r2, #2304 @ 0x900 + 80082b2: 0cdb lsrs r3, r3, #19 + 80082b4: 04db lsls r3, r3, #19 + 80082b6: 6113 str r3, [r2, #16] + 80082b8: 69bb ldr r3, [r7, #24] + 80082ba: 015a lsls r2, r3, #5 + 80082bc: 69fb ldr r3, [r7, #28] + 80082be: 4413 add r3, r2 + 80082c0: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80082c4: 691b ldr r3, [r3, #16] + 80082c6: 69ba ldr r2, [r7, #24] + 80082c8: 0151 lsls r1, r2, #5 + 80082ca: 69fa ldr r2, [r7, #28] + 80082cc: 440a add r2, r1 + 80082ce: f502 6210 add.w r2, r2, #2304 @ 0x900 + 80082d2: f023 53ff bic.w r3, r3, #534773760 @ 0x1fe00000 + 80082d6: f423 13c0 bic.w r3, r3, #1572864 @ 0x180000 + 80082da: 6113 str r3, [r2, #16] + 80082dc: 69bb ldr r3, [r7, #24] + 80082de: 2b00 cmp r3, #0 + 80082e0: d11a bne.n 8008318 + 80082e2: 68bb ldr r3, [r7, #8] + 80082e4: 691a ldr r2, [r3, #16] + 80082e6: 68bb ldr r3, [r7, #8] + 80082e8: 689b ldr r3, [r3, #8] + 80082ea: 429a cmp r2, r3 + 80082ec: d903 bls.n 80082f6 + 80082ee: 68bb ldr r3, [r7, #8] + 80082f0: 689a ldr r2, [r3, #8] + 80082f2: 68bb ldr r3, [r7, #8] + 80082f4: 611a str r2, [r3, #16] + 80082f6: 69bb ldr r3, [r7, #24] + 80082f8: 015a lsls r2, r3, #5 + 80082fa: 69fb ldr r3, [r7, #28] + 80082fc: 4413 add r3, r2 + 80082fe: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008302: 691b ldr r3, [r3, #16] + 8008304: 69ba ldr r2, [r7, #24] + 8008306: 0151 lsls r1, r2, #5 + 8008308: 69fa ldr r2, [r7, #28] + 800830a: 440a add r2, r1 + 800830c: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008310: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 8008314: 6113 str r3, [r2, #16] + 8008316: e044 b.n 80083a2 + 8008318: 68bb ldr r3, [r7, #8] + 800831a: 691a ldr r2, [r3, #16] + 800831c: 68bb ldr r3, [r7, #8] + 800831e: 689b ldr r3, [r3, #8] + 8008320: 4413 add r3, r2 + 8008322: 1e5a subs r2, r3, #1 + 8008324: 68bb ldr r3, [r7, #8] + 8008326: 689b ldr r3, [r3, #8] + 8008328: fbb2 f3f3 udiv r3, r2, r3 + 800832c: 82fb strh r3, [r7, #22] + 800832e: 69bb ldr r3, [r7, #24] + 8008330: 015a lsls r2, r3, #5 + 8008332: 69fb ldr r3, [r7, #28] + 8008334: 4413 add r3, r2 + 8008336: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800833a: 691a ldr r2, [r3, #16] + 800833c: 8afb ldrh r3, [r7, #22] + 800833e: 04d9 lsls r1, r3, #19 + 8008340: 4ba4 ldr r3, [pc, #656] @ (80085d4 ) + 8008342: 400b ands r3, r1 + 8008344: 69b9 ldr r1, [r7, #24] + 8008346: 0148 lsls r0, r1, #5 + 8008348: 69f9 ldr r1, [r7, #28] + 800834a: 4401 add r1, r0 + 800834c: f501 6110 add.w r1, r1, #2304 @ 0x900 + 8008350: 4313 orrs r3, r2 + 8008352: 610b str r3, [r1, #16] + 8008354: 68bb ldr r3, [r7, #8] + 8008356: 791b ldrb r3, [r3, #4] + 8008358: 2b01 cmp r3, #1 + 800835a: d122 bne.n 80083a2 + 800835c: 69bb ldr r3, [r7, #24] + 800835e: 015a lsls r2, r3, #5 + 8008360: 69fb ldr r3, [r7, #28] + 8008362: 4413 add r3, r2 + 8008364: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008368: 691b ldr r3, [r3, #16] + 800836a: 69ba ldr r2, [r7, #24] + 800836c: 0151 lsls r1, r2, #5 + 800836e: 69fa ldr r2, [r7, #28] + 8008370: 440a add r2, r1 + 8008372: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008376: f023 43c0 bic.w r3, r3, #1610612736 @ 0x60000000 + 800837a: 6113 str r3, [r2, #16] + 800837c: 69bb ldr r3, [r7, #24] + 800837e: 015a lsls r2, r3, #5 + 8008380: 69fb ldr r3, [r7, #28] + 8008382: 4413 add r3, r2 + 8008384: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008388: 691a ldr r2, [r3, #16] + 800838a: 8afb ldrh r3, [r7, #22] + 800838c: 075b lsls r3, r3, #29 + 800838e: f003 43c0 and.w r3, r3, #1610612736 @ 0x60000000 + 8008392: 69b9 ldr r1, [r7, #24] + 8008394: 0148 lsls r0, r1, #5 + 8008396: 69f9 ldr r1, [r7, #28] + 8008398: 4401 add r1, r0 + 800839a: f501 6110 add.w r1, r1, #2304 @ 0x900 + 800839e: 4313 orrs r3, r2 + 80083a0: 610b str r3, [r1, #16] + 80083a2: 69bb ldr r3, [r7, #24] + 80083a4: 015a lsls r2, r3, #5 + 80083a6: 69fb ldr r3, [r7, #28] + 80083a8: 4413 add r3, r2 + 80083aa: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80083ae: 691a ldr r2, [r3, #16] + 80083b0: 68bb ldr r3, [r7, #8] + 80083b2: 691b ldr r3, [r3, #16] + 80083b4: f3c3 0312 ubfx r3, r3, #0, #19 + 80083b8: 69b9 ldr r1, [r7, #24] + 80083ba: 0148 lsls r0, r1, #5 + 80083bc: 69f9 ldr r1, [r7, #28] + 80083be: 4401 add r1, r0 + 80083c0: f501 6110 add.w r1, r1, #2304 @ 0x900 + 80083c4: 4313 orrs r3, r2 + 80083c6: 610b str r3, [r1, #16] + 80083c8: 79fb ldrb r3, [r7, #7] + 80083ca: 2b01 cmp r3, #1 + 80083cc: d14b bne.n 8008466 + 80083ce: 68bb ldr r3, [r7, #8] + 80083d0: 69db ldr r3, [r3, #28] + 80083d2: 2b00 cmp r3, #0 + 80083d4: d009 beq.n 80083ea + 80083d6: 69bb ldr r3, [r7, #24] + 80083d8: 015a lsls r2, r3, #5 + 80083da: 69fb ldr r3, [r7, #28] + 80083dc: 4413 add r3, r2 + 80083de: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80083e2: 461a mov r2, r3 + 80083e4: 68bb ldr r3, [r7, #8] + 80083e6: 69db ldr r3, [r3, #28] + 80083e8: 6153 str r3, [r2, #20] + 80083ea: 68bb ldr r3, [r7, #8] + 80083ec: 791b ldrb r3, [r3, #4] + 80083ee: 2b01 cmp r3, #1 + 80083f0: d128 bne.n 8008444 + 80083f2: 69fb ldr r3, [r7, #28] + 80083f4: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80083f8: 689b ldr r3, [r3, #8] + 80083fa: f403 7380 and.w r3, r3, #256 @ 0x100 + 80083fe: 2b00 cmp r3, #0 + 8008400: d110 bne.n 8008424 + 8008402: 69bb ldr r3, [r7, #24] + 8008404: 015a lsls r2, r3, #5 + 8008406: 69fb ldr r3, [r7, #28] + 8008408: 4413 add r3, r2 + 800840a: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800840e: 681b ldr r3, [r3, #0] + 8008410: 69ba ldr r2, [r7, #24] + 8008412: 0151 lsls r1, r2, #5 + 8008414: 69fa ldr r2, [r7, #28] + 8008416: 440a add r2, r1 + 8008418: f502 6210 add.w r2, r2, #2304 @ 0x900 + 800841c: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000 + 8008420: 6013 str r3, [r2, #0] + 8008422: e00f b.n 8008444 + 8008424: 69bb ldr r3, [r7, #24] + 8008426: 015a lsls r2, r3, #5 + 8008428: 69fb ldr r3, [r7, #28] + 800842a: 4413 add r3, r2 + 800842c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008430: 681b ldr r3, [r3, #0] + 8008432: 69ba ldr r2, [r7, #24] + 8008434: 0151 lsls r1, r2, #5 + 8008436: 69fa ldr r2, [r7, #28] + 8008438: 440a add r2, r1 + 800843a: f502 6210 add.w r2, r2, #2304 @ 0x900 + 800843e: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8008442: 6013 str r3, [r2, #0] + 8008444: 69bb ldr r3, [r7, #24] + 8008446: 015a lsls r2, r3, #5 + 8008448: 69fb ldr r3, [r7, #28] + 800844a: 4413 add r3, r2 + 800844c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008450: 681b ldr r3, [r3, #0] + 8008452: 69ba ldr r2, [r7, #24] + 8008454: 0151 lsls r1, r2, #5 + 8008456: 69fa ldr r2, [r7, #28] + 8008458: 440a add r2, r1 + 800845a: f502 6210 add.w r2, r2, #2304 @ 0x900 + 800845e: f043 4304 orr.w r3, r3, #2214592512 @ 0x84000000 + 8008462: 6013 str r3, [r2, #0] + 8008464: e166 b.n 8008734 + 8008466: 69bb ldr r3, [r7, #24] + 8008468: 015a lsls r2, r3, #5 + 800846a: 69fb ldr r3, [r7, #28] + 800846c: 4413 add r3, r2 + 800846e: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008472: 681b ldr r3, [r3, #0] + 8008474: 69ba ldr r2, [r7, #24] + 8008476: 0151 lsls r1, r2, #5 + 8008478: 69fa ldr r2, [r7, #28] + 800847a: 440a add r2, r1 + 800847c: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008480: f043 4304 orr.w r3, r3, #2214592512 @ 0x84000000 + 8008484: 6013 str r3, [r2, #0] + 8008486: 68bb ldr r3, [r7, #8] + 8008488: 791b ldrb r3, [r3, #4] + 800848a: 2b01 cmp r3, #1 + 800848c: d015 beq.n 80084ba + 800848e: 68bb ldr r3, [r7, #8] + 8008490: 691b ldr r3, [r3, #16] + 8008492: 2b00 cmp r3, #0 + 8008494: f000 814e beq.w 8008734 + 8008498: 69fb ldr r3, [r7, #28] + 800849a: f503 6300 add.w r3, r3, #2048 @ 0x800 + 800849e: 6b5a ldr r2, [r3, #52] @ 0x34 + 80084a0: 68bb ldr r3, [r7, #8] + 80084a2: 781b ldrb r3, [r3, #0] + 80084a4: f003 030f and.w r3, r3, #15 + 80084a8: 2101 movs r1, #1 + 80084aa: fa01 f303 lsl.w r3, r1, r3 + 80084ae: 69f9 ldr r1, [r7, #28] + 80084b0: f501 6100 add.w r1, r1, #2048 @ 0x800 + 80084b4: 4313 orrs r3, r2 + 80084b6: 634b str r3, [r1, #52] @ 0x34 + 80084b8: e13c b.n 8008734 + 80084ba: 69fb ldr r3, [r7, #28] + 80084bc: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80084c0: 689b ldr r3, [r3, #8] + 80084c2: f403 7380 and.w r3, r3, #256 @ 0x100 + 80084c6: 2b00 cmp r3, #0 + 80084c8: d110 bne.n 80084ec + 80084ca: 69bb ldr r3, [r7, #24] + 80084cc: 015a lsls r2, r3, #5 + 80084ce: 69fb ldr r3, [r7, #28] + 80084d0: 4413 add r3, r2 + 80084d2: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80084d6: 681b ldr r3, [r3, #0] + 80084d8: 69ba ldr r2, [r7, #24] + 80084da: 0151 lsls r1, r2, #5 + 80084dc: 69fa ldr r2, [r7, #28] + 80084de: 440a add r2, r1 + 80084e0: f502 6210 add.w r2, r2, #2304 @ 0x900 + 80084e4: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000 + 80084e8: 6013 str r3, [r2, #0] + 80084ea: e00f b.n 800850c + 80084ec: 69bb ldr r3, [r7, #24] + 80084ee: 015a lsls r2, r3, #5 + 80084f0: 69fb ldr r3, [r7, #28] + 80084f2: 4413 add r3, r2 + 80084f4: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80084f8: 681b ldr r3, [r3, #0] + 80084fa: 69ba ldr r2, [r7, #24] + 80084fc: 0151 lsls r1, r2, #5 + 80084fe: 69fa ldr r2, [r7, #28] + 8008500: 440a add r2, r1 + 8008502: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008506: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 800850a: 6013 str r3, [r2, #0] + 800850c: 68bb ldr r3, [r7, #8] + 800850e: 68d9 ldr r1, [r3, #12] + 8008510: 68bb ldr r3, [r7, #8] + 8008512: 781a ldrb r2, [r3, #0] + 8008514: 68bb ldr r3, [r7, #8] + 8008516: 691b ldr r3, [r3, #16] + 8008518: b298 uxth r0, r3 + 800851a: 79fb ldrb r3, [r7, #7] + 800851c: 9300 str r3, [sp, #0] + 800851e: 4603 mov r3, r0 + 8008520: 68f8 ldr r0, [r7, #12] + 8008522: f000 f9b9 bl 8008898 + 8008526: e105 b.n 8008734 + 8008528: 69bb ldr r3, [r7, #24] + 800852a: 015a lsls r2, r3, #5 + 800852c: 69fb ldr r3, [r7, #28] + 800852e: 4413 add r3, r2 + 8008530: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008534: 691b ldr r3, [r3, #16] + 8008536: 69ba ldr r2, [r7, #24] + 8008538: 0151 lsls r1, r2, #5 + 800853a: 69fa ldr r2, [r7, #28] + 800853c: 440a add r2, r1 + 800853e: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008542: 0cdb lsrs r3, r3, #19 + 8008544: 04db lsls r3, r3, #19 + 8008546: 6113 str r3, [r2, #16] + 8008548: 69bb ldr r3, [r7, #24] + 800854a: 015a lsls r2, r3, #5 + 800854c: 69fb ldr r3, [r7, #28] + 800854e: 4413 add r3, r2 + 8008550: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008554: 691b ldr r3, [r3, #16] + 8008556: 69ba ldr r2, [r7, #24] + 8008558: 0151 lsls r1, r2, #5 + 800855a: 69fa ldr r2, [r7, #28] + 800855c: 440a add r2, r1 + 800855e: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008562: f023 53ff bic.w r3, r3, #534773760 @ 0x1fe00000 + 8008566: f423 13c0 bic.w r3, r3, #1572864 @ 0x180000 + 800856a: 6113 str r3, [r2, #16] + 800856c: 69bb ldr r3, [r7, #24] + 800856e: 2b00 cmp r3, #0 + 8008570: d132 bne.n 80085d8 + 8008572: 68bb ldr r3, [r7, #8] + 8008574: 691b ldr r3, [r3, #16] + 8008576: 2b00 cmp r3, #0 + 8008578: d003 beq.n 8008582 + 800857a: 68bb ldr r3, [r7, #8] + 800857c: 689a ldr r2, [r3, #8] + 800857e: 68bb ldr r3, [r7, #8] + 8008580: 611a str r2, [r3, #16] + 8008582: 68bb ldr r3, [r7, #8] + 8008584: 689a ldr r2, [r3, #8] + 8008586: 68bb ldr r3, [r7, #8] + 8008588: 621a str r2, [r3, #32] + 800858a: 69bb ldr r3, [r7, #24] + 800858c: 015a lsls r2, r3, #5 + 800858e: 69fb ldr r3, [r7, #28] + 8008590: 4413 add r3, r2 + 8008592: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008596: 691a ldr r2, [r3, #16] + 8008598: 68bb ldr r3, [r7, #8] + 800859a: 6a1b ldr r3, [r3, #32] + 800859c: f3c3 0312 ubfx r3, r3, #0, #19 + 80085a0: 69b9 ldr r1, [r7, #24] + 80085a2: 0148 lsls r0, r1, #5 + 80085a4: 69f9 ldr r1, [r7, #28] + 80085a6: 4401 add r1, r0 + 80085a8: f501 6130 add.w r1, r1, #2816 @ 0xb00 + 80085ac: 4313 orrs r3, r2 + 80085ae: 610b str r3, [r1, #16] + 80085b0: 69bb ldr r3, [r7, #24] + 80085b2: 015a lsls r2, r3, #5 + 80085b4: 69fb ldr r3, [r7, #28] + 80085b6: 4413 add r3, r2 + 80085b8: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80085bc: 691b ldr r3, [r3, #16] + 80085be: 69ba ldr r2, [r7, #24] + 80085c0: 0151 lsls r1, r2, #5 + 80085c2: 69fa ldr r2, [r7, #28] + 80085c4: 440a add r2, r1 + 80085c6: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 80085ca: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 80085ce: 6113 str r3, [r2, #16] + 80085d0: e062 b.n 8008698 + 80085d2: bf00 nop + 80085d4: 1ff80000 .word 0x1ff80000 + 80085d8: 68bb ldr r3, [r7, #8] + 80085da: 691b ldr r3, [r3, #16] + 80085dc: 2b00 cmp r3, #0 + 80085de: d123 bne.n 8008628 + 80085e0: 69bb ldr r3, [r7, #24] + 80085e2: 015a lsls r2, r3, #5 + 80085e4: 69fb ldr r3, [r7, #28] + 80085e6: 4413 add r3, r2 + 80085e8: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80085ec: 691a ldr r2, [r3, #16] + 80085ee: 68bb ldr r3, [r7, #8] + 80085f0: 689b ldr r3, [r3, #8] + 80085f2: f3c3 0312 ubfx r3, r3, #0, #19 + 80085f6: 69b9 ldr r1, [r7, #24] + 80085f8: 0148 lsls r0, r1, #5 + 80085fa: 69f9 ldr r1, [r7, #28] + 80085fc: 4401 add r1, r0 + 80085fe: f501 6130 add.w r1, r1, #2816 @ 0xb00 + 8008602: 4313 orrs r3, r2 + 8008604: 610b str r3, [r1, #16] + 8008606: 69bb ldr r3, [r7, #24] + 8008608: 015a lsls r2, r3, #5 + 800860a: 69fb ldr r3, [r7, #28] + 800860c: 4413 add r3, r2 + 800860e: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008612: 691b ldr r3, [r3, #16] + 8008614: 69ba ldr r2, [r7, #24] + 8008616: 0151 lsls r1, r2, #5 + 8008618: 69fa ldr r2, [r7, #28] + 800861a: 440a add r2, r1 + 800861c: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008620: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 8008624: 6113 str r3, [r2, #16] + 8008626: e037 b.n 8008698 + 8008628: 68bb ldr r3, [r7, #8] + 800862a: 691a ldr r2, [r3, #16] + 800862c: 68bb ldr r3, [r7, #8] + 800862e: 689b ldr r3, [r3, #8] + 8008630: 4413 add r3, r2 + 8008632: 1e5a subs r2, r3, #1 + 8008634: 68bb ldr r3, [r7, #8] + 8008636: 689b ldr r3, [r3, #8] + 8008638: fbb2 f3f3 udiv r3, r2, r3 + 800863c: 82fb strh r3, [r7, #22] + 800863e: 68bb ldr r3, [r7, #8] + 8008640: 689b ldr r3, [r3, #8] + 8008642: 8afa ldrh r2, [r7, #22] + 8008644: fb03 f202 mul.w r2, r3, r2 + 8008648: 68bb ldr r3, [r7, #8] + 800864a: 621a str r2, [r3, #32] + 800864c: 69bb ldr r3, [r7, #24] + 800864e: 015a lsls r2, r3, #5 + 8008650: 69fb ldr r3, [r7, #28] + 8008652: 4413 add r3, r2 + 8008654: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008658: 691a ldr r2, [r3, #16] + 800865a: 8afb ldrh r3, [r7, #22] + 800865c: 04d9 lsls r1, r3, #19 + 800865e: 4b38 ldr r3, [pc, #224] @ (8008740 ) + 8008660: 400b ands r3, r1 + 8008662: 69b9 ldr r1, [r7, #24] + 8008664: 0148 lsls r0, r1, #5 + 8008666: 69f9 ldr r1, [r7, #28] + 8008668: 4401 add r1, r0 + 800866a: f501 6130 add.w r1, r1, #2816 @ 0xb00 + 800866e: 4313 orrs r3, r2 + 8008670: 610b str r3, [r1, #16] + 8008672: 69bb ldr r3, [r7, #24] + 8008674: 015a lsls r2, r3, #5 + 8008676: 69fb ldr r3, [r7, #28] + 8008678: 4413 add r3, r2 + 800867a: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 800867e: 691a ldr r2, [r3, #16] + 8008680: 68bb ldr r3, [r7, #8] + 8008682: 6a1b ldr r3, [r3, #32] + 8008684: f3c3 0312 ubfx r3, r3, #0, #19 + 8008688: 69b9 ldr r1, [r7, #24] + 800868a: 0148 lsls r0, r1, #5 + 800868c: 69f9 ldr r1, [r7, #28] + 800868e: 4401 add r1, r0 + 8008690: f501 6130 add.w r1, r1, #2816 @ 0xb00 + 8008694: 4313 orrs r3, r2 + 8008696: 610b str r3, [r1, #16] + 8008698: 79fb ldrb r3, [r7, #7] + 800869a: 2b01 cmp r3, #1 + 800869c: d10d bne.n 80086ba + 800869e: 68bb ldr r3, [r7, #8] + 80086a0: 68db ldr r3, [r3, #12] + 80086a2: 2b00 cmp r3, #0 + 80086a4: d009 beq.n 80086ba + 80086a6: 68bb ldr r3, [r7, #8] + 80086a8: 68d9 ldr r1, [r3, #12] + 80086aa: 69bb ldr r3, [r7, #24] + 80086ac: 015a lsls r2, r3, #5 + 80086ae: 69fb ldr r3, [r7, #28] + 80086b0: 4413 add r3, r2 + 80086b2: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80086b6: 460a mov r2, r1 + 80086b8: 615a str r2, [r3, #20] + 80086ba: 68bb ldr r3, [r7, #8] + 80086bc: 791b ldrb r3, [r3, #4] + 80086be: 2b01 cmp r3, #1 + 80086c0: d128 bne.n 8008714 + 80086c2: 69fb ldr r3, [r7, #28] + 80086c4: f503 6300 add.w r3, r3, #2048 @ 0x800 + 80086c8: 689b ldr r3, [r3, #8] + 80086ca: f403 7380 and.w r3, r3, #256 @ 0x100 + 80086ce: 2b00 cmp r3, #0 + 80086d0: d110 bne.n 80086f4 + 80086d2: 69bb ldr r3, [r7, #24] + 80086d4: 015a lsls r2, r3, #5 + 80086d6: 69fb ldr r3, [r7, #28] + 80086d8: 4413 add r3, r2 + 80086da: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 80086de: 681b ldr r3, [r3, #0] + 80086e0: 69ba ldr r2, [r7, #24] + 80086e2: 0151 lsls r1, r2, #5 + 80086e4: 69fa ldr r2, [r7, #28] + 80086e6: 440a add r2, r1 + 80086e8: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 80086ec: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000 + 80086f0: 6013 str r3, [r2, #0] + 80086f2: e00f b.n 8008714 + 80086f4: 69bb ldr r3, [r7, #24] + 80086f6: 015a lsls r2, r3, #5 + 80086f8: 69fb ldr r3, [r7, #28] + 80086fa: 4413 add r3, r2 + 80086fc: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008700: 681b ldr r3, [r3, #0] + 8008702: 69ba ldr r2, [r7, #24] + 8008704: 0151 lsls r1, r2, #5 + 8008706: 69fa ldr r2, [r7, #28] + 8008708: 440a add r2, r1 + 800870a: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 800870e: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8008712: 6013 str r3, [r2, #0] + 8008714: 69bb ldr r3, [r7, #24] + 8008716: 015a lsls r2, r3, #5 + 8008718: 69fb ldr r3, [r7, #28] + 800871a: 4413 add r3, r2 + 800871c: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008720: 681b ldr r3, [r3, #0] + 8008722: 69ba ldr r2, [r7, #24] + 8008724: 0151 lsls r1, r2, #5 + 8008726: 69fa ldr r2, [r7, #28] + 8008728: 440a add r2, r1 + 800872a: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 800872e: f043 4304 orr.w r3, r3, #2214592512 @ 0x84000000 + 8008732: 6013 str r3, [r2, #0] + 8008734: 2300 movs r3, #0 + 8008736: 4618 mov r0, r3 + 8008738: 3720 adds r7, #32 + 800873a: 46bd mov sp, r7 + 800873c: bd80 pop {r7, pc} + 800873e: bf00 nop + 8008740: 1ff80000 .word 0x1ff80000 + +08008744 : + 8008744: b480 push {r7} + 8008746: b087 sub sp, #28 + 8008748: af00 add r7, sp, #0 + 800874a: 6078 str r0, [r7, #4] + 800874c: 6039 str r1, [r7, #0] + 800874e: 2300 movs r3, #0 + 8008750: 60fb str r3, [r7, #12] + 8008752: 2300 movs r3, #0 + 8008754: 75fb strb r3, [r7, #23] + 8008756: 687b ldr r3, [r7, #4] + 8008758: 613b str r3, [r7, #16] + 800875a: 683b ldr r3, [r7, #0] + 800875c: 785b ldrb r3, [r3, #1] + 800875e: 2b01 cmp r3, #1 + 8008760: d14a bne.n 80087f8 + 8008762: 683b ldr r3, [r7, #0] + 8008764: 781b ldrb r3, [r3, #0] + 8008766: 015a lsls r2, r3, #5 + 8008768: 693b ldr r3, [r7, #16] + 800876a: 4413 add r3, r2 + 800876c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008770: 681b ldr r3, [r3, #0] + 8008772: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8008776: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 800877a: f040 8086 bne.w 800888a + 800877e: 683b ldr r3, [r7, #0] + 8008780: 781b ldrb r3, [r3, #0] + 8008782: 015a lsls r2, r3, #5 + 8008784: 693b ldr r3, [r7, #16] + 8008786: 4413 add r3, r2 + 8008788: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800878c: 681b ldr r3, [r3, #0] + 800878e: 683a ldr r2, [r7, #0] + 8008790: 7812 ldrb r2, [r2, #0] + 8008792: 0151 lsls r1, r2, #5 + 8008794: 693a ldr r2, [r7, #16] + 8008796: 440a add r2, r1 + 8008798: f502 6210 add.w r2, r2, #2304 @ 0x900 + 800879c: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 80087a0: 6013 str r3, [r2, #0] + 80087a2: 683b ldr r3, [r7, #0] + 80087a4: 781b ldrb r3, [r3, #0] + 80087a6: 015a lsls r2, r3, #5 + 80087a8: 693b ldr r3, [r7, #16] + 80087aa: 4413 add r3, r2 + 80087ac: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80087b0: 681b ldr r3, [r3, #0] + 80087b2: 683a ldr r2, [r7, #0] + 80087b4: 7812 ldrb r2, [r2, #0] + 80087b6: 0151 lsls r1, r2, #5 + 80087b8: 693a ldr r2, [r7, #16] + 80087ba: 440a add r2, r1 + 80087bc: f502 6210 add.w r2, r2, #2304 @ 0x900 + 80087c0: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000 + 80087c4: 6013 str r3, [r2, #0] + 80087c6: 68fb ldr r3, [r7, #12] + 80087c8: 3301 adds r3, #1 + 80087ca: 60fb str r3, [r7, #12] + 80087cc: 68fb ldr r3, [r7, #12] + 80087ce: f242 7210 movw r2, #10000 @ 0x2710 + 80087d2: 4293 cmp r3, r2 + 80087d4: d902 bls.n 80087dc + 80087d6: 2301 movs r3, #1 + 80087d8: 75fb strb r3, [r7, #23] + 80087da: e056 b.n 800888a + 80087dc: 683b ldr r3, [r7, #0] + 80087de: 781b ldrb r3, [r3, #0] + 80087e0: 015a lsls r2, r3, #5 + 80087e2: 693b ldr r3, [r7, #16] + 80087e4: 4413 add r3, r2 + 80087e6: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80087ea: 681b ldr r3, [r3, #0] + 80087ec: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 80087f0: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 80087f4: d0e7 beq.n 80087c6 + 80087f6: e048 b.n 800888a + 80087f8: 683b ldr r3, [r7, #0] + 80087fa: 781b ldrb r3, [r3, #0] + 80087fc: 015a lsls r2, r3, #5 + 80087fe: 693b ldr r3, [r7, #16] + 8008800: 4413 add r3, r2 + 8008802: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008806: 681b ldr r3, [r3, #0] + 8008808: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 800880c: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8008810: d13b bne.n 800888a + 8008812: 683b ldr r3, [r7, #0] + 8008814: 781b ldrb r3, [r3, #0] + 8008816: 015a lsls r2, r3, #5 + 8008818: 693b ldr r3, [r7, #16] + 800881a: 4413 add r3, r2 + 800881c: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008820: 681b ldr r3, [r3, #0] + 8008822: 683a ldr r2, [r7, #0] + 8008824: 7812 ldrb r2, [r2, #0] + 8008826: 0151 lsls r1, r2, #5 + 8008828: 693a ldr r2, [r7, #16] + 800882a: 440a add r2, r1 + 800882c: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008830: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 8008834: 6013 str r3, [r2, #0] + 8008836: 683b ldr r3, [r7, #0] + 8008838: 781b ldrb r3, [r3, #0] + 800883a: 015a lsls r2, r3, #5 + 800883c: 693b ldr r3, [r7, #16] + 800883e: 4413 add r3, r2 + 8008840: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008844: 681b ldr r3, [r3, #0] + 8008846: 683a ldr r2, [r7, #0] + 8008848: 7812 ldrb r2, [r2, #0] + 800884a: 0151 lsls r1, r2, #5 + 800884c: 693a ldr r2, [r7, #16] + 800884e: 440a add r2, r1 + 8008850: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008854: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000 + 8008858: 6013 str r3, [r2, #0] + 800885a: 68fb ldr r3, [r7, #12] + 800885c: 3301 adds r3, #1 + 800885e: 60fb str r3, [r7, #12] + 8008860: 68fb ldr r3, [r7, #12] + 8008862: f242 7210 movw r2, #10000 @ 0x2710 + 8008866: 4293 cmp r3, r2 + 8008868: d902 bls.n 8008870 + 800886a: 2301 movs r3, #1 + 800886c: 75fb strb r3, [r7, #23] + 800886e: e00c b.n 800888a + 8008870: 683b ldr r3, [r7, #0] + 8008872: 781b ldrb r3, [r3, #0] + 8008874: 015a lsls r2, r3, #5 + 8008876: 693b ldr r3, [r7, #16] + 8008878: 4413 add r3, r2 + 800887a: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 800887e: 681b ldr r3, [r3, #0] + 8008880: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8008884: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8008888: d0e7 beq.n 800885a + 800888a: 7dfb ldrb r3, [r7, #23] + 800888c: 4618 mov r0, r3 + 800888e: 371c adds r7, #28 + 8008890: 46bd mov sp, r7 + 8008892: f85d 7b04 ldr.w r7, [sp], #4 + 8008896: 4770 bx lr + +08008898 : + 8008898: b480 push {r7} + 800889a: b089 sub sp, #36 @ 0x24 + 800889c: af00 add r7, sp, #0 + 800889e: 60f8 str r0, [r7, #12] + 80088a0: 60b9 str r1, [r7, #8] + 80088a2: 4611 mov r1, r2 + 80088a4: 461a mov r2, r3 + 80088a6: 460b mov r3, r1 + 80088a8: 71fb strb r3, [r7, #7] + 80088aa: 4613 mov r3, r2 + 80088ac: 80bb strh r3, [r7, #4] + 80088ae: 68fb ldr r3, [r7, #12] + 80088b0: 617b str r3, [r7, #20] + 80088b2: 68bb ldr r3, [r7, #8] + 80088b4: 61fb str r3, [r7, #28] + 80088b6: f897 3028 ldrb.w r3, [r7, #40] @ 0x28 + 80088ba: 2b00 cmp r3, #0 + 80088bc: d123 bne.n 8008906 + 80088be: 88bb ldrh r3, [r7, #4] + 80088c0: 3303 adds r3, #3 + 80088c2: 089b lsrs r3, r3, #2 + 80088c4: 613b str r3, [r7, #16] + 80088c6: 2300 movs r3, #0 + 80088c8: 61bb str r3, [r7, #24] + 80088ca: e018 b.n 80088fe + 80088cc: 79fb ldrb r3, [r7, #7] + 80088ce: 031a lsls r2, r3, #12 + 80088d0: 697b ldr r3, [r7, #20] + 80088d2: 4413 add r3, r2 + 80088d4: f503 5380 add.w r3, r3, #4096 @ 0x1000 + 80088d8: 461a mov r2, r3 + 80088da: 69fb ldr r3, [r7, #28] + 80088dc: 681b ldr r3, [r3, #0] + 80088de: 6013 str r3, [r2, #0] + 80088e0: 69fb ldr r3, [r7, #28] + 80088e2: 3301 adds r3, #1 + 80088e4: 61fb str r3, [r7, #28] + 80088e6: 69fb ldr r3, [r7, #28] + 80088e8: 3301 adds r3, #1 + 80088ea: 61fb str r3, [r7, #28] + 80088ec: 69fb ldr r3, [r7, #28] + 80088ee: 3301 adds r3, #1 + 80088f0: 61fb str r3, [r7, #28] + 80088f2: 69fb ldr r3, [r7, #28] + 80088f4: 3301 adds r3, #1 + 80088f6: 61fb str r3, [r7, #28] + 80088f8: 69bb ldr r3, [r7, #24] + 80088fa: 3301 adds r3, #1 + 80088fc: 61bb str r3, [r7, #24] + 80088fe: 69ba ldr r2, [r7, #24] + 8008900: 693b ldr r3, [r7, #16] + 8008902: 429a cmp r2, r3 + 8008904: d3e2 bcc.n 80088cc + 8008906: 2300 movs r3, #0 + 8008908: 4618 mov r0, r3 + 800890a: 3724 adds r7, #36 @ 0x24 + 800890c: 46bd mov sp, r7 + 800890e: f85d 7b04 ldr.w r7, [sp], #4 + 8008912: 4770 bx lr + +08008914 : + 8008914: b480 push {r7} + 8008916: b08b sub sp, #44 @ 0x2c + 8008918: af00 add r7, sp, #0 + 800891a: 60f8 str r0, [r7, #12] + 800891c: 60b9 str r1, [r7, #8] + 800891e: 4613 mov r3, r2 + 8008920: 80fb strh r3, [r7, #6] + 8008922: 68fb ldr r3, [r7, #12] + 8008924: 61bb str r3, [r7, #24] + 8008926: 68bb ldr r3, [r7, #8] + 8008928: 627b str r3, [r7, #36] @ 0x24 + 800892a: 88fb ldrh r3, [r7, #6] + 800892c: 089b lsrs r3, r3, #2 + 800892e: b29b uxth r3, r3 + 8008930: 617b str r3, [r7, #20] + 8008932: 88fb ldrh r3, [r7, #6] + 8008934: f003 0303 and.w r3, r3, #3 + 8008938: 83fb strh r3, [r7, #30] + 800893a: 2300 movs r3, #0 + 800893c: 623b str r3, [r7, #32] + 800893e: e014 b.n 800896a + 8008940: 69bb ldr r3, [r7, #24] + 8008942: f503 5380 add.w r3, r3, #4096 @ 0x1000 + 8008946: 681a ldr r2, [r3, #0] + 8008948: 6a7b ldr r3, [r7, #36] @ 0x24 + 800894a: 601a str r2, [r3, #0] + 800894c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800894e: 3301 adds r3, #1 + 8008950: 627b str r3, [r7, #36] @ 0x24 + 8008952: 6a7b ldr r3, [r7, #36] @ 0x24 + 8008954: 3301 adds r3, #1 + 8008956: 627b str r3, [r7, #36] @ 0x24 + 8008958: 6a7b ldr r3, [r7, #36] @ 0x24 + 800895a: 3301 adds r3, #1 + 800895c: 627b str r3, [r7, #36] @ 0x24 + 800895e: 6a7b ldr r3, [r7, #36] @ 0x24 + 8008960: 3301 adds r3, #1 + 8008962: 627b str r3, [r7, #36] @ 0x24 + 8008964: 6a3b ldr r3, [r7, #32] + 8008966: 3301 adds r3, #1 + 8008968: 623b str r3, [r7, #32] + 800896a: 6a3a ldr r2, [r7, #32] + 800896c: 697b ldr r3, [r7, #20] + 800896e: 429a cmp r2, r3 + 8008970: d3e6 bcc.n 8008940 + 8008972: 8bfb ldrh r3, [r7, #30] + 8008974: 2b00 cmp r3, #0 + 8008976: d01e beq.n 80089b6 + 8008978: 2300 movs r3, #0 + 800897a: 623b str r3, [r7, #32] + 800897c: 69bb ldr r3, [r7, #24] + 800897e: f503 5380 add.w r3, r3, #4096 @ 0x1000 + 8008982: 461a mov r2, r3 + 8008984: f107 0310 add.w r3, r7, #16 + 8008988: 6812 ldr r2, [r2, #0] + 800898a: 601a str r2, [r3, #0] + 800898c: 693a ldr r2, [r7, #16] + 800898e: 6a3b ldr r3, [r7, #32] + 8008990: b2db uxtb r3, r3 + 8008992: 00db lsls r3, r3, #3 + 8008994: fa22 f303 lsr.w r3, r2, r3 + 8008998: b2da uxtb r2, r3 + 800899a: 6a7b ldr r3, [r7, #36] @ 0x24 + 800899c: 701a strb r2, [r3, #0] + 800899e: 6a3b ldr r3, [r7, #32] + 80089a0: 3301 adds r3, #1 + 80089a2: 623b str r3, [r7, #32] + 80089a4: 6a7b ldr r3, [r7, #36] @ 0x24 + 80089a6: 3301 adds r3, #1 + 80089a8: 627b str r3, [r7, #36] @ 0x24 + 80089aa: 8bfb ldrh r3, [r7, #30] + 80089ac: 3b01 subs r3, #1 + 80089ae: 83fb strh r3, [r7, #30] + 80089b0: 8bfb ldrh r3, [r7, #30] + 80089b2: 2b00 cmp r3, #0 + 80089b4: d1ea bne.n 800898c + 80089b6: 6a7b ldr r3, [r7, #36] @ 0x24 + 80089b8: 4618 mov r0, r3 + 80089ba: 372c adds r7, #44 @ 0x2c + 80089bc: 46bd mov sp, r7 + 80089be: f85d 7b04 ldr.w r7, [sp], #4 + 80089c2: 4770 bx lr + +080089c4 : + 80089c4: b480 push {r7} + 80089c6: b085 sub sp, #20 + 80089c8: af00 add r7, sp, #0 + 80089ca: 6078 str r0, [r7, #4] + 80089cc: 6039 str r1, [r7, #0] + 80089ce: 687b ldr r3, [r7, #4] + 80089d0: 60fb str r3, [r7, #12] + 80089d2: 683b ldr r3, [r7, #0] + 80089d4: 781b ldrb r3, [r3, #0] + 80089d6: 60bb str r3, [r7, #8] + 80089d8: 683b ldr r3, [r7, #0] + 80089da: 785b ldrb r3, [r3, #1] + 80089dc: 2b01 cmp r3, #1 + 80089de: d12c bne.n 8008a3a + 80089e0: 68bb ldr r3, [r7, #8] + 80089e2: 015a lsls r2, r3, #5 + 80089e4: 68fb ldr r3, [r7, #12] + 80089e6: 4413 add r3, r2 + 80089e8: f503 6310 add.w r3, r3, #2304 @ 0x900 + 80089ec: 681b ldr r3, [r3, #0] + 80089ee: 2b00 cmp r3, #0 + 80089f0: db12 blt.n 8008a18 + 80089f2: 68bb ldr r3, [r7, #8] + 80089f4: 2b00 cmp r3, #0 + 80089f6: d00f beq.n 8008a18 + 80089f8: 68bb ldr r3, [r7, #8] + 80089fa: 015a lsls r2, r3, #5 + 80089fc: 68fb ldr r3, [r7, #12] + 80089fe: 4413 add r3, r2 + 8008a00: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008a04: 681b ldr r3, [r3, #0] + 8008a06: 68ba ldr r2, [r7, #8] + 8008a08: 0151 lsls r1, r2, #5 + 8008a0a: 68fa ldr r2, [r7, #12] + 8008a0c: 440a add r2, r1 + 8008a0e: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008a12: f023 4380 bic.w r3, r3, #1073741824 @ 0x40000000 + 8008a16: 6013 str r3, [r2, #0] + 8008a18: 68bb ldr r3, [r7, #8] + 8008a1a: 015a lsls r2, r3, #5 + 8008a1c: 68fb ldr r3, [r7, #12] + 8008a1e: 4413 add r3, r2 + 8008a20: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008a24: 681b ldr r3, [r3, #0] + 8008a26: 68ba ldr r2, [r7, #8] + 8008a28: 0151 lsls r1, r2, #5 + 8008a2a: 68fa ldr r2, [r7, #12] + 8008a2c: 440a add r2, r1 + 8008a2e: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008a32: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 8008a36: 6013 str r3, [r2, #0] + 8008a38: e02b b.n 8008a92 + 8008a3a: 68bb ldr r3, [r7, #8] + 8008a3c: 015a lsls r2, r3, #5 + 8008a3e: 68fb ldr r3, [r7, #12] + 8008a40: 4413 add r3, r2 + 8008a42: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008a46: 681b ldr r3, [r3, #0] + 8008a48: 2b00 cmp r3, #0 + 8008a4a: db12 blt.n 8008a72 + 8008a4c: 68bb ldr r3, [r7, #8] + 8008a4e: 2b00 cmp r3, #0 + 8008a50: d00f beq.n 8008a72 + 8008a52: 68bb ldr r3, [r7, #8] + 8008a54: 015a lsls r2, r3, #5 + 8008a56: 68fb ldr r3, [r7, #12] + 8008a58: 4413 add r3, r2 + 8008a5a: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008a5e: 681b ldr r3, [r3, #0] + 8008a60: 68ba ldr r2, [r7, #8] + 8008a62: 0151 lsls r1, r2, #5 + 8008a64: 68fa ldr r2, [r7, #12] + 8008a66: 440a add r2, r1 + 8008a68: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008a6c: f023 4380 bic.w r3, r3, #1073741824 @ 0x40000000 + 8008a70: 6013 str r3, [r2, #0] + 8008a72: 68bb ldr r3, [r7, #8] + 8008a74: 015a lsls r2, r3, #5 + 8008a76: 68fb ldr r3, [r7, #12] + 8008a78: 4413 add r3, r2 + 8008a7a: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008a7e: 681b ldr r3, [r3, #0] + 8008a80: 68ba ldr r2, [r7, #8] + 8008a82: 0151 lsls r1, r2, #5 + 8008a84: 68fa ldr r2, [r7, #12] + 8008a86: 440a add r2, r1 + 8008a88: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008a8c: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 8008a90: 6013 str r3, [r2, #0] + 8008a92: 2300 movs r3, #0 + 8008a94: 4618 mov r0, r3 + 8008a96: 3714 adds r7, #20 + 8008a98: 46bd mov sp, r7 + 8008a9a: f85d 7b04 ldr.w r7, [sp], #4 + 8008a9e: 4770 bx lr + +08008aa0 : + 8008aa0: b480 push {r7} + 8008aa2: b085 sub sp, #20 + 8008aa4: af00 add r7, sp, #0 + 8008aa6: 6078 str r0, [r7, #4] + 8008aa8: 6039 str r1, [r7, #0] + 8008aaa: 687b ldr r3, [r7, #4] + 8008aac: 60fb str r3, [r7, #12] + 8008aae: 683b ldr r3, [r7, #0] + 8008ab0: 781b ldrb r3, [r3, #0] + 8008ab2: 60bb str r3, [r7, #8] + 8008ab4: 683b ldr r3, [r7, #0] + 8008ab6: 785b ldrb r3, [r3, #1] + 8008ab8: 2b01 cmp r3, #1 + 8008aba: d128 bne.n 8008b0e + 8008abc: 68bb ldr r3, [r7, #8] + 8008abe: 015a lsls r2, r3, #5 + 8008ac0: 68fb ldr r3, [r7, #12] + 8008ac2: 4413 add r3, r2 + 8008ac4: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008ac8: 681b ldr r3, [r3, #0] + 8008aca: 68ba ldr r2, [r7, #8] + 8008acc: 0151 lsls r1, r2, #5 + 8008ace: 68fa ldr r2, [r7, #12] + 8008ad0: 440a add r2, r1 + 8008ad2: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008ad6: f423 1300 bic.w r3, r3, #2097152 @ 0x200000 + 8008ada: 6013 str r3, [r2, #0] + 8008adc: 683b ldr r3, [r7, #0] + 8008ade: 791b ldrb r3, [r3, #4] + 8008ae0: 2b03 cmp r3, #3 + 8008ae2: d003 beq.n 8008aec + 8008ae4: 683b ldr r3, [r7, #0] + 8008ae6: 791b ldrb r3, [r3, #4] + 8008ae8: 2b02 cmp r3, #2 + 8008aea: d138 bne.n 8008b5e + 8008aec: 68bb ldr r3, [r7, #8] + 8008aee: 015a lsls r2, r3, #5 + 8008af0: 68fb ldr r3, [r7, #12] + 8008af2: 4413 add r3, r2 + 8008af4: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008af8: 681b ldr r3, [r3, #0] + 8008afa: 68ba ldr r2, [r7, #8] + 8008afc: 0151 lsls r1, r2, #5 + 8008afe: 68fa ldr r2, [r7, #12] + 8008b00: 440a add r2, r1 + 8008b02: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008b06: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8008b0a: 6013 str r3, [r2, #0] + 8008b0c: e027 b.n 8008b5e + 8008b0e: 68bb ldr r3, [r7, #8] + 8008b10: 015a lsls r2, r3, #5 + 8008b12: 68fb ldr r3, [r7, #12] + 8008b14: 4413 add r3, r2 + 8008b16: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008b1a: 681b ldr r3, [r3, #0] + 8008b1c: 68ba ldr r2, [r7, #8] + 8008b1e: 0151 lsls r1, r2, #5 + 8008b20: 68fa ldr r2, [r7, #12] + 8008b22: 440a add r2, r1 + 8008b24: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008b28: f423 1300 bic.w r3, r3, #2097152 @ 0x200000 + 8008b2c: 6013 str r3, [r2, #0] + 8008b2e: 683b ldr r3, [r7, #0] + 8008b30: 791b ldrb r3, [r3, #4] + 8008b32: 2b03 cmp r3, #3 + 8008b34: d003 beq.n 8008b3e + 8008b36: 683b ldr r3, [r7, #0] + 8008b38: 791b ldrb r3, [r3, #4] + 8008b3a: 2b02 cmp r3, #2 + 8008b3c: d10f bne.n 8008b5e + 8008b3e: 68bb ldr r3, [r7, #8] + 8008b40: 015a lsls r2, r3, #5 + 8008b42: 68fb ldr r3, [r7, #12] + 8008b44: 4413 add r3, r2 + 8008b46: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008b4a: 681b ldr r3, [r3, #0] + 8008b4c: 68ba ldr r2, [r7, #8] + 8008b4e: 0151 lsls r1, r2, #5 + 8008b50: 68fa ldr r2, [r7, #12] + 8008b52: 440a add r2, r1 + 8008b54: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008b58: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8008b5c: 6013 str r3, [r2, #0] + 8008b5e: 2300 movs r3, #0 + 8008b60: 4618 mov r0, r3 + 8008b62: 3714 adds r7, #20 + 8008b64: 46bd mov sp, r7 + 8008b66: f85d 7b04 ldr.w r7, [sp], #4 + 8008b6a: 4770 bx lr + +08008b6c : + 8008b6c: b480 push {r7} + 8008b6e: b085 sub sp, #20 + 8008b70: af00 add r7, sp, #0 + 8008b72: 6078 str r0, [r7, #4] + 8008b74: 460b mov r3, r1 + 8008b76: 70fb strb r3, [r7, #3] + 8008b78: 687b ldr r3, [r7, #4] + 8008b7a: 60fb str r3, [r7, #12] + 8008b7c: 68fb ldr r3, [r7, #12] + 8008b7e: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008b82: 681b ldr r3, [r3, #0] + 8008b84: 68fa ldr r2, [r7, #12] + 8008b86: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8008b8a: f423 63fe bic.w r3, r3, #2032 @ 0x7f0 + 8008b8e: 6013 str r3, [r2, #0] + 8008b90: 68fb ldr r3, [r7, #12] + 8008b92: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008b96: 681a ldr r2, [r3, #0] + 8008b98: 78fb ldrb r3, [r7, #3] + 8008b9a: 011b lsls r3, r3, #4 + 8008b9c: f403 63fe and.w r3, r3, #2032 @ 0x7f0 + 8008ba0: 68f9 ldr r1, [r7, #12] + 8008ba2: f501 6100 add.w r1, r1, #2048 @ 0x800 + 8008ba6: 4313 orrs r3, r2 + 8008ba8: 600b str r3, [r1, #0] + 8008baa: 2300 movs r3, #0 + 8008bac: 4618 mov r0, r3 + 8008bae: 3714 adds r7, #20 + 8008bb0: 46bd mov sp, r7 + 8008bb2: f85d 7b04 ldr.w r7, [sp], #4 + 8008bb6: 4770 bx lr + +08008bb8 : + 8008bb8: b480 push {r7} + 8008bba: b085 sub sp, #20 + 8008bbc: af00 add r7, sp, #0 + 8008bbe: 6078 str r0, [r7, #4] + 8008bc0: 687b ldr r3, [r7, #4] + 8008bc2: 60fb str r3, [r7, #12] + 8008bc4: 68fb ldr r3, [r7, #12] + 8008bc6: f503 6360 add.w r3, r3, #3584 @ 0xe00 + 8008bca: 681b ldr r3, [r3, #0] + 8008bcc: 68fa ldr r2, [r7, #12] + 8008bce: f502 6260 add.w r2, r2, #3584 @ 0xe00 + 8008bd2: f023 0303 bic.w r3, r3, #3 + 8008bd6: 6013 str r3, [r2, #0] + 8008bd8: 68fb ldr r3, [r7, #12] + 8008bda: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008bde: 685b ldr r3, [r3, #4] + 8008be0: 68fa ldr r2, [r7, #12] + 8008be2: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8008be6: f023 0302 bic.w r3, r3, #2 + 8008bea: 6053 str r3, [r2, #4] + 8008bec: 2300 movs r3, #0 + 8008bee: 4618 mov r0, r3 + 8008bf0: 3714 adds r7, #20 + 8008bf2: 46bd mov sp, r7 + 8008bf4: f85d 7b04 ldr.w r7, [sp], #4 + 8008bf8: 4770 bx lr + +08008bfa : + 8008bfa: b480 push {r7} + 8008bfc: b085 sub sp, #20 + 8008bfe: af00 add r7, sp, #0 + 8008c00: 6078 str r0, [r7, #4] + 8008c02: 687b ldr r3, [r7, #4] + 8008c04: 60fb str r3, [r7, #12] + 8008c06: 68fb ldr r3, [r7, #12] + 8008c08: f503 6360 add.w r3, r3, #3584 @ 0xe00 + 8008c0c: 681b ldr r3, [r3, #0] + 8008c0e: 68fa ldr r2, [r7, #12] + 8008c10: f502 6260 add.w r2, r2, #3584 @ 0xe00 + 8008c14: f023 0303 bic.w r3, r3, #3 + 8008c18: 6013 str r3, [r2, #0] + 8008c1a: 68fb ldr r3, [r7, #12] + 8008c1c: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008c20: 685b ldr r3, [r3, #4] + 8008c22: 68fa ldr r2, [r7, #12] + 8008c24: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8008c28: f043 0302 orr.w r3, r3, #2 + 8008c2c: 6053 str r3, [r2, #4] + 8008c2e: 2300 movs r3, #0 + 8008c30: 4618 mov r0, r3 + 8008c32: 3714 adds r7, #20 + 8008c34: 46bd mov sp, r7 + 8008c36: f85d 7b04 ldr.w r7, [sp], #4 + 8008c3a: 4770 bx lr + +08008c3c : + 8008c3c: b480 push {r7} + 8008c3e: b085 sub sp, #20 + 8008c40: af00 add r7, sp, #0 + 8008c42: 6078 str r0, [r7, #4] + 8008c44: 687b ldr r3, [r7, #4] + 8008c46: 695b ldr r3, [r3, #20] + 8008c48: 60fb str r3, [r7, #12] + 8008c4a: 687b ldr r3, [r7, #4] + 8008c4c: 699b ldr r3, [r3, #24] + 8008c4e: 68fa ldr r2, [r7, #12] + 8008c50: 4013 ands r3, r2 + 8008c52: 60fb str r3, [r7, #12] + 8008c54: 68fb ldr r3, [r7, #12] + 8008c56: 4618 mov r0, r3 + 8008c58: 3714 adds r7, #20 + 8008c5a: 46bd mov sp, r7 + 8008c5c: f85d 7b04 ldr.w r7, [sp], #4 + 8008c60: 4770 bx lr + +08008c62 : + 8008c62: b480 push {r7} + 8008c64: b085 sub sp, #20 + 8008c66: af00 add r7, sp, #0 + 8008c68: 6078 str r0, [r7, #4] + 8008c6a: 687b ldr r3, [r7, #4] + 8008c6c: 60fb str r3, [r7, #12] + 8008c6e: 68fb ldr r3, [r7, #12] + 8008c70: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008c74: 699b ldr r3, [r3, #24] + 8008c76: 60bb str r3, [r7, #8] + 8008c78: 68fb ldr r3, [r7, #12] + 8008c7a: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008c7e: 69db ldr r3, [r3, #28] + 8008c80: 68ba ldr r2, [r7, #8] + 8008c82: 4013 ands r3, r2 + 8008c84: 60bb str r3, [r7, #8] + 8008c86: 68bb ldr r3, [r7, #8] + 8008c88: 0c1b lsrs r3, r3, #16 + 8008c8a: 4618 mov r0, r3 + 8008c8c: 3714 adds r7, #20 + 8008c8e: 46bd mov sp, r7 + 8008c90: f85d 7b04 ldr.w r7, [sp], #4 + 8008c94: 4770 bx lr + +08008c96 : + 8008c96: b480 push {r7} + 8008c98: b085 sub sp, #20 + 8008c9a: af00 add r7, sp, #0 + 8008c9c: 6078 str r0, [r7, #4] + 8008c9e: 687b ldr r3, [r7, #4] + 8008ca0: 60fb str r3, [r7, #12] + 8008ca2: 68fb ldr r3, [r7, #12] + 8008ca4: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008ca8: 699b ldr r3, [r3, #24] + 8008caa: 60bb str r3, [r7, #8] + 8008cac: 68fb ldr r3, [r7, #12] + 8008cae: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008cb2: 69db ldr r3, [r3, #28] + 8008cb4: 68ba ldr r2, [r7, #8] + 8008cb6: 4013 ands r3, r2 + 8008cb8: 60bb str r3, [r7, #8] + 8008cba: 68bb ldr r3, [r7, #8] + 8008cbc: b29b uxth r3, r3 + 8008cbe: 4618 mov r0, r3 + 8008cc0: 3714 adds r7, #20 + 8008cc2: 46bd mov sp, r7 + 8008cc4: f85d 7b04 ldr.w r7, [sp], #4 + 8008cc8: 4770 bx lr + +08008cca : + 8008cca: b480 push {r7} + 8008ccc: b085 sub sp, #20 + 8008cce: af00 add r7, sp, #0 + 8008cd0: 6078 str r0, [r7, #4] + 8008cd2: 460b mov r3, r1 + 8008cd4: 70fb strb r3, [r7, #3] + 8008cd6: 687b ldr r3, [r7, #4] + 8008cd8: 60fb str r3, [r7, #12] + 8008cda: 78fb ldrb r3, [r7, #3] + 8008cdc: 015a lsls r2, r3, #5 + 8008cde: 68fb ldr r3, [r7, #12] + 8008ce0: 4413 add r3, r2 + 8008ce2: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008ce6: 689b ldr r3, [r3, #8] + 8008ce8: 60bb str r3, [r7, #8] + 8008cea: 68fb ldr r3, [r7, #12] + 8008cec: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008cf0: 695b ldr r3, [r3, #20] + 8008cf2: 68ba ldr r2, [r7, #8] + 8008cf4: 4013 ands r3, r2 + 8008cf6: 60bb str r3, [r7, #8] + 8008cf8: 68bb ldr r3, [r7, #8] + 8008cfa: 4618 mov r0, r3 + 8008cfc: 3714 adds r7, #20 + 8008cfe: 46bd mov sp, r7 + 8008d00: f85d 7b04 ldr.w r7, [sp], #4 + 8008d04: 4770 bx lr + +08008d06 : + 8008d06: b480 push {r7} + 8008d08: b087 sub sp, #28 + 8008d0a: af00 add r7, sp, #0 + 8008d0c: 6078 str r0, [r7, #4] + 8008d0e: 460b mov r3, r1 + 8008d10: 70fb strb r3, [r7, #3] + 8008d12: 687b ldr r3, [r7, #4] + 8008d14: 617b str r3, [r7, #20] + 8008d16: 697b ldr r3, [r7, #20] + 8008d18: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008d1c: 691b ldr r3, [r3, #16] + 8008d1e: 613b str r3, [r7, #16] + 8008d20: 697b ldr r3, [r7, #20] + 8008d22: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008d26: 6b5b ldr r3, [r3, #52] @ 0x34 + 8008d28: 60fb str r3, [r7, #12] + 8008d2a: 78fb ldrb r3, [r7, #3] + 8008d2c: f003 030f and.w r3, r3, #15 + 8008d30: 68fa ldr r2, [r7, #12] + 8008d32: fa22 f303 lsr.w r3, r2, r3 + 8008d36: 01db lsls r3, r3, #7 + 8008d38: b2db uxtb r3, r3 + 8008d3a: 693a ldr r2, [r7, #16] + 8008d3c: 4313 orrs r3, r2 + 8008d3e: 613b str r3, [r7, #16] + 8008d40: 78fb ldrb r3, [r7, #3] + 8008d42: 015a lsls r2, r3, #5 + 8008d44: 697b ldr r3, [r7, #20] + 8008d46: 4413 add r3, r2 + 8008d48: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008d4c: 689b ldr r3, [r3, #8] + 8008d4e: 693a ldr r2, [r7, #16] + 8008d50: 4013 ands r3, r2 + 8008d52: 60bb str r3, [r7, #8] + 8008d54: 68bb ldr r3, [r7, #8] + 8008d56: 4618 mov r0, r3 + 8008d58: 371c adds r7, #28 + 8008d5a: 46bd mov sp, r7 + 8008d5c: f85d 7b04 ldr.w r7, [sp], #4 + 8008d60: 4770 bx lr + +08008d62 : + 8008d62: b480 push {r7} + 8008d64: b083 sub sp, #12 + 8008d66: af00 add r7, sp, #0 + 8008d68: 6078 str r0, [r7, #4] + 8008d6a: 687b ldr r3, [r7, #4] + 8008d6c: 695b ldr r3, [r3, #20] + 8008d6e: f003 0301 and.w r3, r3, #1 + 8008d72: 4618 mov r0, r3 + 8008d74: 370c adds r7, #12 + 8008d76: 46bd mov sp, r7 + 8008d78: f85d 7b04 ldr.w r7, [sp], #4 + 8008d7c: 4770 bx lr + +08008d7e : + 8008d7e: b480 push {r7} + 8008d80: b085 sub sp, #20 + 8008d82: af00 add r7, sp, #0 + 8008d84: 6078 str r0, [r7, #4] + 8008d86: 687b ldr r3, [r7, #4] + 8008d88: 60fb str r3, [r7, #12] + 8008d8a: 68fb ldr r3, [r7, #12] + 8008d8c: f503 6310 add.w r3, r3, #2304 @ 0x900 + 8008d90: 681b ldr r3, [r3, #0] + 8008d92: 68fa ldr r2, [r7, #12] + 8008d94: f502 6210 add.w r2, r2, #2304 @ 0x900 + 8008d98: f423 63ff bic.w r3, r3, #2040 @ 0x7f8 + 8008d9c: f023 0307 bic.w r3, r3, #7 + 8008da0: 6013 str r3, [r2, #0] + 8008da2: 68fb ldr r3, [r7, #12] + 8008da4: f503 6300 add.w r3, r3, #2048 @ 0x800 + 8008da8: 685b ldr r3, [r3, #4] + 8008daa: 68fa ldr r2, [r7, #12] + 8008dac: f502 6200 add.w r2, r2, #2048 @ 0x800 + 8008db0: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8008db4: 6053 str r3, [r2, #4] + 8008db6: 2300 movs r3, #0 + 8008db8: 4618 mov r0, r3 + 8008dba: 3714 adds r7, #20 + 8008dbc: 46bd mov sp, r7 + 8008dbe: f85d 7b04 ldr.w r7, [sp], #4 + 8008dc2: 4770 bx lr + +08008dc4 : + 8008dc4: b480 push {r7} + 8008dc6: b087 sub sp, #28 + 8008dc8: af00 add r7, sp, #0 + 8008dca: 60f8 str r0, [r7, #12] + 8008dcc: 460b mov r3, r1 + 8008dce: 607a str r2, [r7, #4] + 8008dd0: 72fb strb r3, [r7, #11] + 8008dd2: 68fb ldr r3, [r7, #12] + 8008dd4: 617b str r3, [r7, #20] + 8008dd6: 68fb ldr r3, [r7, #12] + 8008dd8: 333c adds r3, #60 @ 0x3c + 8008dda: 3304 adds r3, #4 + 8008ddc: 681b ldr r3, [r3, #0] + 8008dde: 613b str r3, [r7, #16] + 8008de0: 693b ldr r3, [r7, #16] + 8008de2: 4a26 ldr r2, [pc, #152] @ (8008e7c ) + 8008de4: 4293 cmp r3, r2 + 8008de6: d90a bls.n 8008dfe + 8008de8: 697b ldr r3, [r7, #20] + 8008dea: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008dee: 681b ldr r3, [r3, #0] + 8008df0: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8008df4: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8008df8: d101 bne.n 8008dfe + 8008dfa: 2300 movs r3, #0 + 8008dfc: e037 b.n 8008e6e + 8008dfe: 697b ldr r3, [r7, #20] + 8008e00: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008e04: 461a mov r2, r3 + 8008e06: 2300 movs r3, #0 + 8008e08: 6113 str r3, [r2, #16] + 8008e0a: 697b ldr r3, [r7, #20] + 8008e0c: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008e10: 691b ldr r3, [r3, #16] + 8008e12: 697a ldr r2, [r7, #20] + 8008e14: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008e18: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 8008e1c: 6113 str r3, [r2, #16] + 8008e1e: 697b ldr r3, [r7, #20] + 8008e20: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008e24: 691b ldr r3, [r3, #16] + 8008e26: 697a ldr r2, [r7, #20] + 8008e28: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008e2c: f043 0318 orr.w r3, r3, #24 + 8008e30: 6113 str r3, [r2, #16] + 8008e32: 697b ldr r3, [r7, #20] + 8008e34: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008e38: 691b ldr r3, [r3, #16] + 8008e3a: 697a ldr r2, [r7, #20] + 8008e3c: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008e40: f043 43c0 orr.w r3, r3, #1610612736 @ 0x60000000 + 8008e44: 6113 str r3, [r2, #16] + 8008e46: 7afb ldrb r3, [r7, #11] + 8008e48: 2b01 cmp r3, #1 + 8008e4a: d10f bne.n 8008e6c + 8008e4c: 697b ldr r3, [r7, #20] + 8008e4e: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008e52: 461a mov r2, r3 + 8008e54: 687b ldr r3, [r7, #4] + 8008e56: 6153 str r3, [r2, #20] + 8008e58: 697b ldr r3, [r7, #20] + 8008e5a: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8008e5e: 681b ldr r3, [r3, #0] + 8008e60: 697a ldr r2, [r7, #20] + 8008e62: f502 6230 add.w r2, r2, #2816 @ 0xb00 + 8008e66: f043 2380 orr.w r3, r3, #2147516416 @ 0x80008000 + 8008e6a: 6013 str r3, [r2, #0] + 8008e6c: 2300 movs r3, #0 + 8008e6e: 4618 mov r0, r3 + 8008e70: 371c adds r7, #28 + 8008e72: 46bd mov sp, r7 + 8008e74: f85d 7b04 ldr.w r7, [sp], #4 + 8008e78: 4770 bx lr + 8008e7a: bf00 nop + 8008e7c: 4f54300a .word 0x4f54300a + +08008e80 : + 8008e80: b480 push {r7} + 8008e82: b085 sub sp, #20 + 8008e84: af00 add r7, sp, #0 + 8008e86: 6078 str r0, [r7, #4] + 8008e88: 2300 movs r3, #0 + 8008e8a: 60fb str r3, [r7, #12] + 8008e8c: 68fb ldr r3, [r7, #12] + 8008e8e: 3301 adds r3, #1 + 8008e90: 60fb str r3, [r7, #12] + 8008e92: 68fb ldr r3, [r7, #12] + 8008e94: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8008e98: d901 bls.n 8008e9e + 8008e9a: 2303 movs r3, #3 + 8008e9c: e022 b.n 8008ee4 + 8008e9e: 687b ldr r3, [r7, #4] + 8008ea0: 691b ldr r3, [r3, #16] + 8008ea2: 2b00 cmp r3, #0 + 8008ea4: daf2 bge.n 8008e8c + 8008ea6: 230a movs r3, #10 + 8008ea8: 60fb str r3, [r7, #12] + 8008eaa: e002 b.n 8008eb2 + 8008eac: 68fb ldr r3, [r7, #12] + 8008eae: 3b01 subs r3, #1 + 8008eb0: 60fb str r3, [r7, #12] + 8008eb2: 68fb ldr r3, [r7, #12] + 8008eb4: 2b00 cmp r3, #0 + 8008eb6: d1f9 bne.n 8008eac + 8008eb8: 687b ldr r3, [r7, #4] + 8008eba: 691b ldr r3, [r3, #16] + 8008ebc: f043 0201 orr.w r2, r3, #1 + 8008ec0: 687b ldr r3, [r7, #4] + 8008ec2: 611a str r2, [r3, #16] + 8008ec4: 68fb ldr r3, [r7, #12] + 8008ec6: 3301 adds r3, #1 + 8008ec8: 60fb str r3, [r7, #12] + 8008eca: 68fb ldr r3, [r7, #12] + 8008ecc: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8008ed0: d901 bls.n 8008ed6 + 8008ed2: 2303 movs r3, #3 + 8008ed4: e006 b.n 8008ee4 + 8008ed6: 687b ldr r3, [r7, #4] + 8008ed8: 691b ldr r3, [r3, #16] + 8008eda: f003 0301 and.w r3, r3, #1 + 8008ede: 2b01 cmp r3, #1 + 8008ee0: d0f0 beq.n 8008ec4 + 8008ee2: 2300 movs r3, #0 + 8008ee4: 4618 mov r0, r3 + 8008ee6: 3714 adds r7, #20 + 8008ee8: 46bd mov sp, r7 + 8008eea: f85d 7b04 ldr.w r7, [sp], #4 + 8008eee: 4770 bx lr + +08008ef0 : + 8008ef0: b580 push {r7, lr} + 8008ef2: b084 sub sp, #16 + 8008ef4: af00 add r7, sp, #0 + 8008ef6: 6078 str r0, [r7, #4] + 8008ef8: 460b mov r3, r1 + 8008efa: 70fb strb r3, [r7, #3] + 8008efc: 2010 movs r0, #16 + 8008efe: f002 f9e3 bl 800b2c8 + 8008f02: 60f8 str r0, [r7, #12] + 8008f04: 68fb ldr r3, [r7, #12] + 8008f06: 2b00 cmp r3, #0 + 8008f08: d109 bne.n 8008f1e + 8008f0a: 687b ldr r3, [r7, #4] + 8008f0c: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8008f10: 687b ldr r3, [r7, #4] + 8008f12: 32b0 adds r2, #176 @ 0xb0 + 8008f14: 2100 movs r1, #0 + 8008f16: f843 1022 str.w r1, [r3, r2, lsl #2] + 8008f1a: 2302 movs r3, #2 + 8008f1c: e048 b.n 8008fb0 + 8008f1e: 687b ldr r3, [r7, #4] + 8008f20: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8008f24: 687b ldr r3, [r7, #4] + 8008f26: 32b0 adds r2, #176 @ 0xb0 + 8008f28: 68f9 ldr r1, [r7, #12] + 8008f2a: f843 1022 str.w r1, [r3, r2, lsl #2] + 8008f2e: 687b ldr r3, [r7, #4] + 8008f30: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8008f34: 687b ldr r3, [r7, #4] + 8008f36: 32b0 adds r2, #176 @ 0xb0 + 8008f38: f853 2022 ldr.w r2, [r3, r2, lsl #2] + 8008f3c: 687b ldr r3, [r7, #4] + 8008f3e: f8c3 22bc str.w r2, [r3, #700] @ 0x2bc + 8008f42: 687b ldr r3, [r7, #4] + 8008f44: 7c1b ldrb r3, [r3, #16] + 8008f46: 2b00 cmp r3, #0 + 8008f48: d10d bne.n 8008f66 + 8008f4a: 4b1b ldr r3, [pc, #108] @ (8008fb8 ) + 8008f4c: 781b ldrb r3, [r3, #0] + 8008f4e: f003 020f and.w r2, r3, #15 + 8008f52: 6879 ldr r1, [r7, #4] + 8008f54: 4613 mov r3, r2 + 8008f56: 009b lsls r3, r3, #2 + 8008f58: 4413 add r3, r2 + 8008f5a: 009b lsls r3, r3, #2 + 8008f5c: 440b add r3, r1 + 8008f5e: 331c adds r3, #28 + 8008f60: 2207 movs r2, #7 + 8008f62: 601a str r2, [r3, #0] + 8008f64: e00c b.n 8008f80 + 8008f66: 4b14 ldr r3, [pc, #80] @ (8008fb8 ) + 8008f68: 781b ldrb r3, [r3, #0] + 8008f6a: f003 020f and.w r2, r3, #15 + 8008f6e: 6879 ldr r1, [r7, #4] + 8008f70: 4613 mov r3, r2 + 8008f72: 009b lsls r3, r3, #2 + 8008f74: 4413 add r3, r2 + 8008f76: 009b lsls r3, r3, #2 + 8008f78: 440b add r3, r1 + 8008f7a: 331c adds r3, #28 + 8008f7c: 220a movs r2, #10 + 8008f7e: 601a str r2, [r3, #0] + 8008f80: 4b0d ldr r3, [pc, #52] @ (8008fb8 ) + 8008f82: 7819 ldrb r1, [r3, #0] + 8008f84: 230e movs r3, #14 + 8008f86: 2203 movs r2, #3 + 8008f88: 6878 ldr r0, [r7, #4] + 8008f8a: f002 f83e bl 800b00a + 8008f8e: 4b0a ldr r3, [pc, #40] @ (8008fb8 ) + 8008f90: 781b ldrb r3, [r3, #0] + 8008f92: f003 020f and.w r2, r3, #15 + 8008f96: 6879 ldr r1, [r7, #4] + 8008f98: 4613 mov r3, r2 + 8008f9a: 009b lsls r3, r3, #2 + 8008f9c: 4413 add r3, r2 + 8008f9e: 009b lsls r3, r3, #2 + 8008fa0: 440b add r3, r1 + 8008fa2: 3323 adds r3, #35 @ 0x23 + 8008fa4: 2201 movs r2, #1 + 8008fa6: 701a strb r2, [r3, #0] + 8008fa8: 68fb ldr r3, [r7, #12] + 8008faa: 2200 movs r2, #0 + 8008fac: 731a strb r2, [r3, #12] + 8008fae: 2300 movs r3, #0 + 8008fb0: 4618 mov r0, r3 + 8008fb2: 3710 adds r7, #16 + 8008fb4: 46bd mov sp, r7 + 8008fb6: bd80 pop {r7, pc} + 8008fb8: 2000013d .word 0x2000013d + +08008fbc : + 8008fbc: b580 push {r7, lr} + 8008fbe: b082 sub sp, #8 + 8008fc0: af00 add r7, sp, #0 + 8008fc2: 6078 str r0, [r7, #4] + 8008fc4: 460b mov r3, r1 + 8008fc6: 70fb strb r3, [r7, #3] + 8008fc8: 4b1f ldr r3, [pc, #124] @ (8009048 ) + 8008fca: 781b ldrb r3, [r3, #0] + 8008fcc: 4619 mov r1, r3 + 8008fce: 6878 ldr r0, [r7, #4] + 8008fd0: f002 f841 bl 800b056 + 8008fd4: 4b1c ldr r3, [pc, #112] @ (8009048 ) + 8008fd6: 781b ldrb r3, [r3, #0] + 8008fd8: f003 020f and.w r2, r3, #15 + 8008fdc: 6879 ldr r1, [r7, #4] + 8008fde: 4613 mov r3, r2 + 8008fe0: 009b lsls r3, r3, #2 + 8008fe2: 4413 add r3, r2 + 8008fe4: 009b lsls r3, r3, #2 + 8008fe6: 440b add r3, r1 + 8008fe8: 3323 adds r3, #35 @ 0x23 + 8008fea: 2200 movs r2, #0 + 8008fec: 701a strb r2, [r3, #0] + 8008fee: 4b16 ldr r3, [pc, #88] @ (8009048 ) + 8008ff0: 781b ldrb r3, [r3, #0] + 8008ff2: f003 020f and.w r2, r3, #15 + 8008ff6: 6879 ldr r1, [r7, #4] + 8008ff8: 4613 mov r3, r2 + 8008ffa: 009b lsls r3, r3, #2 + 8008ffc: 4413 add r3, r2 + 8008ffe: 009b lsls r3, r3, #2 + 8009000: 440b add r3, r1 + 8009002: 331c adds r3, #28 + 8009004: 2200 movs r2, #0 + 8009006: 601a str r2, [r3, #0] + 8009008: 687b ldr r3, [r7, #4] + 800900a: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 800900e: 687b ldr r3, [r7, #4] + 8009010: 32b0 adds r2, #176 @ 0xb0 + 8009012: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009016: 2b00 cmp r3, #0 + 8009018: d011 beq.n 800903e + 800901a: 687b ldr r3, [r7, #4] + 800901c: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009020: 687b ldr r3, [r7, #4] + 8009022: 32b0 adds r2, #176 @ 0xb0 + 8009024: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009028: 4618 mov r0, r3 + 800902a: f002 f95b bl 800b2e4 + 800902e: 687b ldr r3, [r7, #4] + 8009030: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009034: 687b ldr r3, [r7, #4] + 8009036: 32b0 adds r2, #176 @ 0xb0 + 8009038: 2100 movs r1, #0 + 800903a: f843 1022 str.w r1, [r3, r2, lsl #2] + 800903e: 2300 movs r3, #0 + 8009040: 4618 mov r0, r3 + 8009042: 3708 adds r7, #8 + 8009044: 46bd mov sp, r7 + 8009046: bd80 pop {r7, pc} + 8009048: 2000013d .word 0x2000013d + +0800904c : + 800904c: b580 push {r7, lr} + 800904e: b086 sub sp, #24 + 8009050: af00 add r7, sp, #0 + 8009052: 6078 str r0, [r7, #4] + 8009054: 6039 str r1, [r7, #0] + 8009056: 687b ldr r3, [r7, #4] + 8009058: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 800905c: 687b ldr r3, [r7, #4] + 800905e: 32b0 adds r2, #176 @ 0xb0 + 8009060: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009064: 60fb str r3, [r7, #12] + 8009066: 2300 movs r3, #0 + 8009068: 75fb strb r3, [r7, #23] + 800906a: 2300 movs r3, #0 + 800906c: 817b strh r3, [r7, #10] + 800906e: 68fb ldr r3, [r7, #12] + 8009070: 2b00 cmp r3, #0 + 8009072: d101 bne.n 8009078 + 8009074: 2303 movs r3, #3 + 8009076: e0e8 b.n 800924a + 8009078: 683b ldr r3, [r7, #0] + 800907a: 781b ldrb r3, [r3, #0] + 800907c: f003 0360 and.w r3, r3, #96 @ 0x60 + 8009080: 2b00 cmp r3, #0 + 8009082: d046 beq.n 8009112 + 8009084: 2b20 cmp r3, #32 + 8009086: f040 80d8 bne.w 800923a + 800908a: 683b ldr r3, [r7, #0] + 800908c: 785b ldrb r3, [r3, #1] + 800908e: 3b02 subs r3, #2 + 8009090: 2b09 cmp r3, #9 + 8009092: d836 bhi.n 8009102 + 8009094: a201 add r2, pc, #4 @ (adr r2, 800909c ) + 8009096: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800909a: bf00 nop + 800909c: 080090f3 .word 0x080090f3 + 80090a0: 080090d3 .word 0x080090d3 + 80090a4: 08009103 .word 0x08009103 + 80090a8: 08009103 .word 0x08009103 + 80090ac: 08009103 .word 0x08009103 + 80090b0: 08009103 .word 0x08009103 + 80090b4: 08009103 .word 0x08009103 + 80090b8: 08009103 .word 0x08009103 + 80090bc: 080090e1 .word 0x080090e1 + 80090c0: 080090c5 .word 0x080090c5 + 80090c4: 683b ldr r3, [r7, #0] + 80090c6: 885b ldrh r3, [r3, #2] + 80090c8: b2db uxtb r3, r3 + 80090ca: 461a mov r2, r3 + 80090cc: 68fb ldr r3, [r7, #12] + 80090ce: 601a str r2, [r3, #0] + 80090d0: e01e b.n 8009110 + 80090d2: 68fb ldr r3, [r7, #12] + 80090d4: 2201 movs r2, #1 + 80090d6: 4619 mov r1, r3 + 80090d8: 6878 ldr r0, [r7, #4] + 80090da: f001 fc25 bl 800a928 + 80090de: e017 b.n 8009110 + 80090e0: 683b ldr r3, [r7, #0] + 80090e2: 885b ldrh r3, [r3, #2] + 80090e4: 0a1b lsrs r3, r3, #8 + 80090e6: b29b uxth r3, r3 + 80090e8: b2db uxtb r3, r3 + 80090ea: 461a mov r2, r3 + 80090ec: 68fb ldr r3, [r7, #12] + 80090ee: 605a str r2, [r3, #4] + 80090f0: e00e b.n 8009110 + 80090f2: 68fb ldr r3, [r7, #12] + 80090f4: 3304 adds r3, #4 + 80090f6: 2201 movs r2, #1 + 80090f8: 4619 mov r1, r3 + 80090fa: 6878 ldr r0, [r7, #4] + 80090fc: f001 fc14 bl 800a928 + 8009100: e006 b.n 8009110 + 8009102: 6839 ldr r1, [r7, #0] + 8009104: 6878 ldr r0, [r7, #4] + 8009106: f001 fb92 bl 800a82e + 800910a: 2303 movs r3, #3 + 800910c: 75fb strb r3, [r7, #23] + 800910e: bf00 nop + 8009110: e09a b.n 8009248 + 8009112: 683b ldr r3, [r7, #0] + 8009114: 785b ldrb r3, [r3, #1] + 8009116: 2b0b cmp r3, #11 + 8009118: f200 8086 bhi.w 8009228 + 800911c: a201 add r2, pc, #4 @ (adr r2, 8009124 ) + 800911e: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8009122: bf00 nop + 8009124: 08009155 .word 0x08009155 + 8009128: 08009237 .word 0x08009237 + 800912c: 08009229 .word 0x08009229 + 8009130: 08009229 .word 0x08009229 + 8009134: 08009229 .word 0x08009229 + 8009138: 08009229 .word 0x08009229 + 800913c: 0800917f .word 0x0800917f + 8009140: 08009229 .word 0x08009229 + 8009144: 08009229 .word 0x08009229 + 8009148: 08009229 .word 0x08009229 + 800914c: 080091d7 .word 0x080091d7 + 8009150: 08009201 .word 0x08009201 + 8009154: 687b ldr r3, [r7, #4] + 8009156: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800915a: b2db uxtb r3, r3 + 800915c: 2b03 cmp r3, #3 + 800915e: d107 bne.n 8009170 + 8009160: f107 030a add.w r3, r7, #10 + 8009164: 2202 movs r2, #2 + 8009166: 4619 mov r1, r3 + 8009168: 6878 ldr r0, [r7, #4] + 800916a: f001 fbdd bl 800a928 + 800916e: e063 b.n 8009238 + 8009170: 6839 ldr r1, [r7, #0] + 8009172: 6878 ldr r0, [r7, #4] + 8009174: f001 fb5b bl 800a82e + 8009178: 2303 movs r3, #3 + 800917a: 75fb strb r3, [r7, #23] + 800917c: e05c b.n 8009238 + 800917e: 683b ldr r3, [r7, #0] + 8009180: 885b ldrh r3, [r3, #2] + 8009182: 0a1b lsrs r3, r3, #8 + 8009184: b29b uxth r3, r3 + 8009186: 2b22 cmp r3, #34 @ 0x22 + 8009188: d108 bne.n 800919c + 800918a: 683b ldr r3, [r7, #0] + 800918c: 88db ldrh r3, [r3, #6] + 800918e: 2b2d cmp r3, #45 @ 0x2d + 8009190: bf28 it cs + 8009192: 232d movcs r3, #45 @ 0x2d + 8009194: 82bb strh r3, [r7, #20] + 8009196: 4b2f ldr r3, [pc, #188] @ (8009254 ) + 8009198: 613b str r3, [r7, #16] + 800919a: e015 b.n 80091c8 + 800919c: 683b ldr r3, [r7, #0] + 800919e: 885b ldrh r3, [r3, #2] + 80091a0: 0a1b lsrs r3, r3, #8 + 80091a2: b29b uxth r3, r3 + 80091a4: 2b21 cmp r3, #33 @ 0x21 + 80091a6: d108 bne.n 80091ba + 80091a8: 4b2b ldr r3, [pc, #172] @ (8009258 ) + 80091aa: 613b str r3, [r7, #16] + 80091ac: 683b ldr r3, [r7, #0] + 80091ae: 88db ldrh r3, [r3, #6] + 80091b0: 2b09 cmp r3, #9 + 80091b2: bf28 it cs + 80091b4: 2309 movcs r3, #9 + 80091b6: 82bb strh r3, [r7, #20] + 80091b8: e006 b.n 80091c8 + 80091ba: 6839 ldr r1, [r7, #0] + 80091bc: 6878 ldr r0, [r7, #4] + 80091be: f001 fb36 bl 800a82e + 80091c2: 2303 movs r3, #3 + 80091c4: 75fb strb r3, [r7, #23] + 80091c6: e037 b.n 8009238 + 80091c8: 8abb ldrh r3, [r7, #20] + 80091ca: 461a mov r2, r3 + 80091cc: 6939 ldr r1, [r7, #16] + 80091ce: 6878 ldr r0, [r7, #4] + 80091d0: f001 fbaa bl 800a928 + 80091d4: e030 b.n 8009238 + 80091d6: 687b ldr r3, [r7, #4] + 80091d8: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 80091dc: b2db uxtb r3, r3 + 80091de: 2b03 cmp r3, #3 + 80091e0: d107 bne.n 80091f2 + 80091e2: 68fb ldr r3, [r7, #12] + 80091e4: 3308 adds r3, #8 + 80091e6: 2201 movs r2, #1 + 80091e8: 4619 mov r1, r3 + 80091ea: 6878 ldr r0, [r7, #4] + 80091ec: f001 fb9c bl 800a928 + 80091f0: e022 b.n 8009238 + 80091f2: 6839 ldr r1, [r7, #0] + 80091f4: 6878 ldr r0, [r7, #4] + 80091f6: f001 fb1a bl 800a82e + 80091fa: 2303 movs r3, #3 + 80091fc: 75fb strb r3, [r7, #23] + 80091fe: e01b b.n 8009238 + 8009200: 687b ldr r3, [r7, #4] + 8009202: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009206: b2db uxtb r3, r3 + 8009208: 2b03 cmp r3, #3 + 800920a: d106 bne.n 800921a + 800920c: 683b ldr r3, [r7, #0] + 800920e: 885b ldrh r3, [r3, #2] + 8009210: b2db uxtb r3, r3 + 8009212: 461a mov r2, r3 + 8009214: 68fb ldr r3, [r7, #12] + 8009216: 609a str r2, [r3, #8] + 8009218: e00e b.n 8009238 + 800921a: 6839 ldr r1, [r7, #0] + 800921c: 6878 ldr r0, [r7, #4] + 800921e: f001 fb06 bl 800a82e + 8009222: 2303 movs r3, #3 + 8009224: 75fb strb r3, [r7, #23] + 8009226: e007 b.n 8009238 + 8009228: 6839 ldr r1, [r7, #0] + 800922a: 6878 ldr r0, [r7, #4] + 800922c: f001 faff bl 800a82e + 8009230: 2303 movs r3, #3 + 8009232: 75fb strb r3, [r7, #23] + 8009234: e000 b.n 8009238 + 8009236: bf00 nop + 8009238: e006 b.n 8009248 + 800923a: 6839 ldr r1, [r7, #0] + 800923c: 6878 ldr r0, [r7, #4] + 800923e: f001 faf6 bl 800a82e + 8009242: 2303 movs r3, #3 + 8009244: 75fb strb r3, [r7, #23] + 8009246: bf00 nop + 8009248: 7dfb ldrb r3, [r7, #23] + 800924a: 4618 mov r0, r3 + 800924c: 3718 adds r7, #24 + 800924e: 46bd mov sp, r7 + 8009250: bd80 pop {r7, pc} + 8009252: bf00 nop + 8009254: 20000110 .word 0x20000110 + 8009258: 200000f8 .word 0x200000f8 + +0800925c : + 800925c: b580 push {r7, lr} + 800925e: b086 sub sp, #24 + 8009260: af00 add r7, sp, #0 + 8009262: 60f8 str r0, [r7, #12] + 8009264: 60b9 str r1, [r7, #8] + 8009266: 4613 mov r3, r2 + 8009268: 80fb strh r3, [r7, #6] + 800926a: 68fb ldr r3, [r7, #12] + 800926c: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009270: 68fb ldr r3, [r7, #12] + 8009272: 32b0 adds r2, #176 @ 0xb0 + 8009274: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009278: 617b str r3, [r7, #20] + 800927a: 697b ldr r3, [r7, #20] + 800927c: 2b00 cmp r3, #0 + 800927e: d101 bne.n 8009284 + 8009280: 2303 movs r3, #3 + 8009282: e014 b.n 80092ae + 8009284: 68fb ldr r3, [r7, #12] + 8009286: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800928a: b2db uxtb r3, r3 + 800928c: 2b03 cmp r3, #3 + 800928e: d10d bne.n 80092ac + 8009290: 697b ldr r3, [r7, #20] + 8009292: 7b1b ldrb r3, [r3, #12] + 8009294: 2b00 cmp r3, #0 + 8009296: d109 bne.n 80092ac + 8009298: 697b ldr r3, [r7, #20] + 800929a: 2201 movs r2, #1 + 800929c: 731a strb r2, [r3, #12] + 800929e: 4b06 ldr r3, [pc, #24] @ (80092b8 ) + 80092a0: 7819 ldrb r1, [r3, #0] + 80092a2: 88fb ldrh r3, [r7, #6] + 80092a4: 68ba ldr r2, [r7, #8] + 80092a6: 68f8 ldr r0, [r7, #12] + 80092a8: f001 ff7d bl 800b1a6 + 80092ac: 2300 movs r3, #0 + 80092ae: 4618 mov r0, r3 + 80092b0: 3718 adds r7, #24 + 80092b2: 46bd mov sp, r7 + 80092b4: bd80 pop {r7, pc} + 80092b6: bf00 nop + 80092b8: 2000013d .word 0x2000013d + +080092bc : + 80092bc: b580 push {r7, lr} + 80092be: b084 sub sp, #16 + 80092c0: af00 add r7, sp, #0 + 80092c2: 6078 str r0, [r7, #4] + 80092c4: 2181 movs r1, #129 @ 0x81 + 80092c6: 4809 ldr r0, [pc, #36] @ (80092ec ) + 80092c8: f000 fc4e bl 8009b68 + 80092cc: 60f8 str r0, [r7, #12] + 80092ce: 68fb ldr r3, [r7, #12] + 80092d0: 2b00 cmp r3, #0 + 80092d2: d002 beq.n 80092da + 80092d4: 68fb ldr r3, [r7, #12] + 80092d6: 220a movs r2, #10 + 80092d8: 719a strb r2, [r3, #6] + 80092da: 687b ldr r3, [r7, #4] + 80092dc: 2222 movs r2, #34 @ 0x22 + 80092de: 801a strh r2, [r3, #0] + 80092e0: 4b02 ldr r3, [pc, #8] @ (80092ec ) + 80092e2: 4618 mov r0, r3 + 80092e4: 3710 adds r7, #16 + 80092e6: 46bd mov sp, r7 + 80092e8: bd80 pop {r7, pc} + 80092ea: bf00 nop + 80092ec: 200000d4 .word 0x200000d4 + +080092f0 : + 80092f0: b580 push {r7, lr} + 80092f2: b084 sub sp, #16 + 80092f4: af00 add r7, sp, #0 + 80092f6: 6078 str r0, [r7, #4] + 80092f8: 2181 movs r1, #129 @ 0x81 + 80092fa: 4809 ldr r0, [pc, #36] @ (8009320 ) + 80092fc: f000 fc34 bl 8009b68 + 8009300: 60f8 str r0, [r7, #12] + 8009302: 68fb ldr r3, [r7, #12] + 8009304: 2b00 cmp r3, #0 + 8009306: d002 beq.n 800930e + 8009308: 68fb ldr r3, [r7, #12] + 800930a: 2207 movs r2, #7 + 800930c: 719a strb r2, [r3, #6] + 800930e: 687b ldr r3, [r7, #4] + 8009310: 2222 movs r2, #34 @ 0x22 + 8009312: 801a strh r2, [r3, #0] + 8009314: 4b02 ldr r3, [pc, #8] @ (8009320 ) + 8009316: 4618 mov r0, r3 + 8009318: 3710 adds r7, #16 + 800931a: 46bd mov sp, r7 + 800931c: bd80 pop {r7, pc} + 800931e: bf00 nop + 8009320: 200000d4 .word 0x200000d4 + +08009324 : + 8009324: b580 push {r7, lr} + 8009326: b084 sub sp, #16 + 8009328: af00 add r7, sp, #0 + 800932a: 6078 str r0, [r7, #4] + 800932c: 2181 movs r1, #129 @ 0x81 + 800932e: 4809 ldr r0, [pc, #36] @ (8009354 ) + 8009330: f000 fc1a bl 8009b68 + 8009334: 60f8 str r0, [r7, #12] + 8009336: 68fb ldr r3, [r7, #12] + 8009338: 2b00 cmp r3, #0 + 800933a: d002 beq.n 8009342 + 800933c: 68fb ldr r3, [r7, #12] + 800933e: 220a movs r2, #10 + 8009340: 719a strb r2, [r3, #6] + 8009342: 687b ldr r3, [r7, #4] + 8009344: 2222 movs r2, #34 @ 0x22 + 8009346: 801a strh r2, [r3, #0] + 8009348: 4b02 ldr r3, [pc, #8] @ (8009354 ) + 800934a: 4618 mov r0, r3 + 800934c: 3710 adds r7, #16 + 800934e: 46bd mov sp, r7 + 8009350: bd80 pop {r7, pc} + 8009352: bf00 nop + 8009354: 200000d4 .word 0x200000d4 + +08009358 : + 8009358: b480 push {r7} + 800935a: b083 sub sp, #12 + 800935c: af00 add r7, sp, #0 + 800935e: 6078 str r0, [r7, #4] + 8009360: 460b mov r3, r1 + 8009362: 70fb strb r3, [r7, #3] + 8009364: 687b ldr r3, [r7, #4] + 8009366: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 800936a: 687b ldr r3, [r7, #4] + 800936c: 32b0 adds r2, #176 @ 0xb0 + 800936e: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009372: 2200 movs r2, #0 + 8009374: 731a strb r2, [r3, #12] + 8009376: 2300 movs r3, #0 + 8009378: 4618 mov r0, r3 + 800937a: 370c adds r7, #12 + 800937c: 46bd mov sp, r7 + 800937e: f85d 7b04 ldr.w r7, [sp], #4 + 8009382: 4770 bx lr + +08009384 : + 8009384: b480 push {r7} + 8009386: b083 sub sp, #12 + 8009388: af00 add r7, sp, #0 + 800938a: 6078 str r0, [r7, #4] + 800938c: 687b ldr r3, [r7, #4] + 800938e: 220a movs r2, #10 + 8009390: 801a strh r2, [r3, #0] + 8009392: 4b03 ldr r3, [pc, #12] @ (80093a0 ) + 8009394: 4618 mov r0, r3 + 8009396: 370c adds r7, #12 + 8009398: 46bd mov sp, r7 + 800939a: f85d 7b04 ldr.w r7, [sp], #4 + 800939e: 4770 bx lr + 80093a0: 20000104 .word 0x20000104 + +080093a4 : + 80093a4: b580 push {r7, lr} + 80093a6: b086 sub sp, #24 + 80093a8: af00 add r7, sp, #0 + 80093aa: 60f8 str r0, [r7, #12] + 80093ac: 60b9 str r1, [r7, #8] + 80093ae: 4613 mov r3, r2 + 80093b0: 71fb strb r3, [r7, #7] + 80093b2: 68fb ldr r3, [r7, #12] + 80093b4: 2b00 cmp r3, #0 + 80093b6: d101 bne.n 80093bc + 80093b8: 2303 movs r3, #3 + 80093ba: e01f b.n 80093fc + 80093bc: 68fb ldr r3, [r7, #12] + 80093be: 2200 movs r2, #0 + 80093c0: f8c3 22b8 str.w r2, [r3, #696] @ 0x2b8 + 80093c4: 68fb ldr r3, [r7, #12] + 80093c6: 2200 movs r2, #0 + 80093c8: f8c3 22c4 str.w r2, [r3, #708] @ 0x2c4 + 80093cc: 68fb ldr r3, [r7, #12] + 80093ce: 2200 movs r2, #0 + 80093d0: f8c3 22d0 str.w r2, [r3, #720] @ 0x2d0 + 80093d4: 68bb ldr r3, [r7, #8] + 80093d6: 2b00 cmp r3, #0 + 80093d8: d003 beq.n 80093e2 + 80093da: 68fb ldr r3, [r7, #12] + 80093dc: 68ba ldr r2, [r7, #8] + 80093de: f8c3 22b4 str.w r2, [r3, #692] @ 0x2b4 + 80093e2: 68fb ldr r3, [r7, #12] + 80093e4: 2201 movs r2, #1 + 80093e6: f883 229c strb.w r2, [r3, #668] @ 0x29c + 80093ea: 68fb ldr r3, [r7, #12] + 80093ec: 79fa ldrb r2, [r7, #7] + 80093ee: 701a strb r2, [r3, #0] + 80093f0: 68f8 ldr r0, [r7, #12] + 80093f2: f001 fda3 bl 800af3c + 80093f6: 4603 mov r3, r0 + 80093f8: 75fb strb r3, [r7, #23] + 80093fa: 7dfb ldrb r3, [r7, #23] + 80093fc: 4618 mov r0, r3 + 80093fe: 3718 adds r7, #24 + 8009400: 46bd mov sp, r7 + 8009402: bd80 pop {r7, pc} + +08009404 : + 8009404: b580 push {r7, lr} + 8009406: b084 sub sp, #16 + 8009408: af00 add r7, sp, #0 + 800940a: 6078 str r0, [r7, #4] + 800940c: 6039 str r1, [r7, #0] + 800940e: 2300 movs r3, #0 + 8009410: 81fb strh r3, [r7, #14] + 8009412: 683b ldr r3, [r7, #0] + 8009414: 2b00 cmp r3, #0 + 8009416: d101 bne.n 800941c + 8009418: 2303 movs r3, #3 + 800941a: e025 b.n 8009468 + 800941c: 687b ldr r3, [r7, #4] + 800941e: 683a ldr r2, [r7, #0] + 8009420: f8c3 22b8 str.w r2, [r3, #696] @ 0x2b8 + 8009424: 687b ldr r3, [r7, #4] + 8009426: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 800942a: 687b ldr r3, [r7, #4] + 800942c: 32ae adds r2, #174 @ 0xae + 800942e: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009432: 6adb ldr r3, [r3, #44] @ 0x2c + 8009434: 2b00 cmp r3, #0 + 8009436: d00f beq.n 8009458 + 8009438: 687b ldr r3, [r7, #4] + 800943a: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 800943e: 687b ldr r3, [r7, #4] + 8009440: 32ae adds r2, #174 @ 0xae + 8009442: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009446: 6adb ldr r3, [r3, #44] @ 0x2c + 8009448: f107 020e add.w r2, r7, #14 + 800944c: 4610 mov r0, r2 + 800944e: 4798 blx r3 + 8009450: 4602 mov r2, r0 + 8009452: 687b ldr r3, [r7, #4] + 8009454: f8c3 22d0 str.w r2, [r3, #720] @ 0x2d0 + 8009458: 687b ldr r3, [r7, #4] + 800945a: f8d3 32d8 ldr.w r3, [r3, #728] @ 0x2d8 + 800945e: 1c5a adds r2, r3, #1 + 8009460: 687b ldr r3, [r7, #4] + 8009462: f8c3 22d8 str.w r2, [r3, #728] @ 0x2d8 + 8009466: 2300 movs r3, #0 + 8009468: 4618 mov r0, r3 + 800946a: 3710 adds r7, #16 + 800946c: 46bd mov sp, r7 + 800946e: bd80 pop {r7, pc} + +08009470 : + 8009470: b580 push {r7, lr} + 8009472: b082 sub sp, #8 + 8009474: af00 add r7, sp, #0 + 8009476: 6078 str r0, [r7, #4] + 8009478: 6878 ldr r0, [r7, #4] + 800947a: f001 fdab bl 800afd4 + 800947e: 4603 mov r3, r0 + 8009480: 4618 mov r0, r3 + 8009482: 3708 adds r7, #8 + 8009484: 46bd mov sp, r7 + 8009486: bd80 pop {r7, pc} + +08009488 : + 8009488: b480 push {r7} + 800948a: b083 sub sp, #12 + 800948c: af00 add r7, sp, #0 + 800948e: 6078 str r0, [r7, #4] + 8009490: 2300 movs r3, #0 + 8009492: 4618 mov r0, r3 + 8009494: 370c adds r7, #12 + 8009496: 46bd mov sp, r7 + 8009498: f85d 7b04 ldr.w r7, [sp], #4 + 800949c: 4770 bx lr + +0800949e : + 800949e: b580 push {r7, lr} + 80094a0: b084 sub sp, #16 + 80094a2: af00 add r7, sp, #0 + 80094a4: 6078 str r0, [r7, #4] + 80094a6: 460b mov r3, r1 + 80094a8: 70fb strb r3, [r7, #3] + 80094aa: 2300 movs r3, #0 + 80094ac: 73fb strb r3, [r7, #15] + 80094ae: 687b ldr r3, [r7, #4] + 80094b0: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80094b4: 2b00 cmp r3, #0 + 80094b6: d009 beq.n 80094cc + 80094b8: 687b ldr r3, [r7, #4] + 80094ba: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80094be: 681b ldr r3, [r3, #0] + 80094c0: 78fa ldrb r2, [r7, #3] + 80094c2: 4611 mov r1, r2 + 80094c4: 6878 ldr r0, [r7, #4] + 80094c6: 4798 blx r3 + 80094c8: 4603 mov r3, r0 + 80094ca: 73fb strb r3, [r7, #15] + 80094cc: 7bfb ldrb r3, [r7, #15] + 80094ce: 4618 mov r0, r3 + 80094d0: 3710 adds r7, #16 + 80094d2: 46bd mov sp, r7 + 80094d4: bd80 pop {r7, pc} + +080094d6 : + 80094d6: b580 push {r7, lr} + 80094d8: b084 sub sp, #16 + 80094da: af00 add r7, sp, #0 + 80094dc: 6078 str r0, [r7, #4] + 80094de: 460b mov r3, r1 + 80094e0: 70fb strb r3, [r7, #3] + 80094e2: 2300 movs r3, #0 + 80094e4: 73fb strb r3, [r7, #15] + 80094e6: 687b ldr r3, [r7, #4] + 80094e8: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80094ec: 685b ldr r3, [r3, #4] + 80094ee: 78fa ldrb r2, [r7, #3] + 80094f0: 4611 mov r1, r2 + 80094f2: 6878 ldr r0, [r7, #4] + 80094f4: 4798 blx r3 + 80094f6: 4603 mov r3, r0 + 80094f8: 2b00 cmp r3, #0 + 80094fa: d001 beq.n 8009500 + 80094fc: 2303 movs r3, #3 + 80094fe: 73fb strb r3, [r7, #15] + 8009500: 7bfb ldrb r3, [r7, #15] + 8009502: 4618 mov r0, r3 + 8009504: 3710 adds r7, #16 + 8009506: 46bd mov sp, r7 + 8009508: bd80 pop {r7, pc} + +0800950a : + 800950a: b580 push {r7, lr} + 800950c: b084 sub sp, #16 + 800950e: af00 add r7, sp, #0 + 8009510: 6078 str r0, [r7, #4] + 8009512: 6039 str r1, [r7, #0] + 8009514: 687b ldr r3, [r7, #4] + 8009516: f203 23aa addw r3, r3, #682 @ 0x2aa + 800951a: 6839 ldr r1, [r7, #0] + 800951c: 4618 mov r0, r3 + 800951e: f001 f94c bl 800a7ba + 8009522: 687b ldr r3, [r7, #4] + 8009524: 2201 movs r2, #1 + 8009526: f8c3 2294 str.w r2, [r3, #660] @ 0x294 + 800952a: 687b ldr r3, [r7, #4] + 800952c: f8b3 32b0 ldrh.w r3, [r3, #688] @ 0x2b0 + 8009530: 461a mov r2, r3 + 8009532: 687b ldr r3, [r7, #4] + 8009534: f8c3 2298 str.w r2, [r3, #664] @ 0x298 + 8009538: 687b ldr r3, [r7, #4] + 800953a: f893 32aa ldrb.w r3, [r3, #682] @ 0x2aa + 800953e: f003 031f and.w r3, r3, #31 + 8009542: 2b02 cmp r3, #2 + 8009544: d01a beq.n 800957c + 8009546: 2b02 cmp r3, #2 + 8009548: d822 bhi.n 8009590 + 800954a: 2b00 cmp r3, #0 + 800954c: d002 beq.n 8009554 + 800954e: 2b01 cmp r3, #1 + 8009550: d00a beq.n 8009568 + 8009552: e01d b.n 8009590 + 8009554: 687b ldr r3, [r7, #4] + 8009556: f203 23aa addw r3, r3, #682 @ 0x2aa + 800955a: 4619 mov r1, r3 + 800955c: 6878 ldr r0, [r7, #4] + 800955e: f000 fb77 bl 8009c50 + 8009562: 4603 mov r3, r0 + 8009564: 73fb strb r3, [r7, #15] + 8009566: e020 b.n 80095aa + 8009568: 687b ldr r3, [r7, #4] + 800956a: f203 23aa addw r3, r3, #682 @ 0x2aa + 800956e: 4619 mov r1, r3 + 8009570: 6878 ldr r0, [r7, #4] + 8009572: f000 fbdf bl 8009d34 + 8009576: 4603 mov r3, r0 + 8009578: 73fb strb r3, [r7, #15] + 800957a: e016 b.n 80095aa + 800957c: 687b ldr r3, [r7, #4] + 800957e: f203 23aa addw r3, r3, #682 @ 0x2aa + 8009582: 4619 mov r1, r3 + 8009584: 6878 ldr r0, [r7, #4] + 8009586: f000 fc41 bl 8009e0c + 800958a: 4603 mov r3, r0 + 800958c: 73fb strb r3, [r7, #15] + 800958e: e00c b.n 80095aa + 8009590: 687b ldr r3, [r7, #4] + 8009592: f893 32aa ldrb.w r3, [r3, #682] @ 0x2aa + 8009596: f023 037f bic.w r3, r3, #127 @ 0x7f + 800959a: b2db uxtb r3, r3 + 800959c: 4619 mov r1, r3 + 800959e: 6878 ldr r0, [r7, #4] + 80095a0: f001 fd78 bl 800b094 + 80095a4: 4603 mov r3, r0 + 80095a6: 73fb strb r3, [r7, #15] + 80095a8: bf00 nop + 80095aa: 7bfb ldrb r3, [r7, #15] + 80095ac: 4618 mov r0, r3 + 80095ae: 3710 adds r7, #16 + 80095b0: 46bd mov sp, r7 + 80095b2: bd80 pop {r7, pc} + +080095b4 : + 80095b4: b580 push {r7, lr} + 80095b6: b086 sub sp, #24 + 80095b8: af00 add r7, sp, #0 + 80095ba: 60f8 str r0, [r7, #12] + 80095bc: 460b mov r3, r1 + 80095be: 607a str r2, [r7, #4] + 80095c0: 72fb strb r3, [r7, #11] + 80095c2: 2300 movs r3, #0 + 80095c4: 75fb strb r3, [r7, #23] + 80095c6: 7afb ldrb r3, [r7, #11] + 80095c8: 2b00 cmp r3, #0 + 80095ca: d177 bne.n 80096bc + 80095cc: 68fb ldr r3, [r7, #12] + 80095ce: f503 73aa add.w r3, r3, #340 @ 0x154 + 80095d2: 613b str r3, [r7, #16] + 80095d4: 68fb ldr r3, [r7, #12] + 80095d6: f8d3 3294 ldr.w r3, [r3, #660] @ 0x294 + 80095da: 2b03 cmp r3, #3 + 80095dc: f040 80a1 bne.w 8009722 + 80095e0: 693b ldr r3, [r7, #16] + 80095e2: 685b ldr r3, [r3, #4] + 80095e4: 693a ldr r2, [r7, #16] + 80095e6: 8992 ldrh r2, [r2, #12] + 80095e8: 4293 cmp r3, r2 + 80095ea: d91c bls.n 8009626 + 80095ec: 693b ldr r3, [r7, #16] + 80095ee: 685b ldr r3, [r3, #4] + 80095f0: 693a ldr r2, [r7, #16] + 80095f2: 8992 ldrh r2, [r2, #12] + 80095f4: 1a9a subs r2, r3, r2 + 80095f6: 693b ldr r3, [r7, #16] + 80095f8: 605a str r2, [r3, #4] + 80095fa: 693b ldr r3, [r7, #16] + 80095fc: 691b ldr r3, [r3, #16] + 80095fe: 693a ldr r2, [r7, #16] + 8009600: 8992 ldrh r2, [r2, #12] + 8009602: 441a add r2, r3 + 8009604: 693b ldr r3, [r7, #16] + 8009606: 611a str r2, [r3, #16] + 8009608: 693b ldr r3, [r7, #16] + 800960a: 6919 ldr r1, [r3, #16] + 800960c: 693b ldr r3, [r7, #16] + 800960e: 899b ldrh r3, [r3, #12] + 8009610: 461a mov r2, r3 + 8009612: 693b ldr r3, [r7, #16] + 8009614: 685b ldr r3, [r3, #4] + 8009616: 4293 cmp r3, r2 + 8009618: bf38 it cc + 800961a: 4613 movcc r3, r2 + 800961c: 461a mov r2, r3 + 800961e: 68f8 ldr r0, [r7, #12] + 8009620: f001 f9b1 bl 800a986 + 8009624: e07d b.n 8009722 + 8009626: 68fb ldr r3, [r7, #12] + 8009628: f893 32aa ldrb.w r3, [r3, #682] @ 0x2aa + 800962c: f003 031f and.w r3, r3, #31 + 8009630: 2b02 cmp r3, #2 + 8009632: d014 beq.n 800965e + 8009634: 2b02 cmp r3, #2 + 8009636: d81d bhi.n 8009674 + 8009638: 2b00 cmp r3, #0 + 800963a: d002 beq.n 8009642 + 800963c: 2b01 cmp r3, #1 + 800963e: d003 beq.n 8009648 + 8009640: e018 b.n 8009674 + 8009642: 2300 movs r3, #0 + 8009644: 75bb strb r3, [r7, #22] + 8009646: e018 b.n 800967a + 8009648: 68fb ldr r3, [r7, #12] + 800964a: f8b3 32ae ldrh.w r3, [r3, #686] @ 0x2ae + 800964e: b2db uxtb r3, r3 + 8009650: 4619 mov r1, r3 + 8009652: 68f8 ldr r0, [r7, #12] + 8009654: f000 fa6e bl 8009b34 + 8009658: 4603 mov r3, r0 + 800965a: 75bb strb r3, [r7, #22] + 800965c: e00d b.n 800967a + 800965e: 68fb ldr r3, [r7, #12] + 8009660: f8b3 32ae ldrh.w r3, [r3, #686] @ 0x2ae + 8009664: b2db uxtb r3, r3 + 8009666: 4619 mov r1, r3 + 8009668: 68f8 ldr r0, [r7, #12] + 800966a: f000 fa70 bl 8009b4e + 800966e: 4603 mov r3, r0 + 8009670: 75bb strb r3, [r7, #22] + 8009672: e002 b.n 800967a + 8009674: 2300 movs r3, #0 + 8009676: 75bb strb r3, [r7, #22] + 8009678: bf00 nop + 800967a: 7dbb ldrb r3, [r7, #22] + 800967c: 2b00 cmp r3, #0 + 800967e: d119 bne.n 80096b4 + 8009680: 68fb ldr r3, [r7, #12] + 8009682: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009686: b2db uxtb r3, r3 + 8009688: 2b03 cmp r3, #3 + 800968a: d113 bne.n 80096b4 + 800968c: 7dba ldrb r2, [r7, #22] + 800968e: 68fb ldr r3, [r7, #12] + 8009690: 32ae adds r2, #174 @ 0xae + 8009692: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009696: 691b ldr r3, [r3, #16] + 8009698: 2b00 cmp r3, #0 + 800969a: d00b beq.n 80096b4 + 800969c: 7dba ldrb r2, [r7, #22] + 800969e: 68fb ldr r3, [r7, #12] + 80096a0: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 80096a4: 7dba ldrb r2, [r7, #22] + 80096a6: 68fb ldr r3, [r7, #12] + 80096a8: 32ae adds r2, #174 @ 0xae + 80096aa: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 80096ae: 691b ldr r3, [r3, #16] + 80096b0: 68f8 ldr r0, [r7, #12] + 80096b2: 4798 blx r3 + 80096b4: 68f8 ldr r0, [r7, #12] + 80096b6: f001 f977 bl 800a9a8 + 80096ba: e032 b.n 8009722 + 80096bc: 7afb ldrb r3, [r7, #11] + 80096be: f003 037f and.w r3, r3, #127 @ 0x7f + 80096c2: b2db uxtb r3, r3 + 80096c4: 4619 mov r1, r3 + 80096c6: 68f8 ldr r0, [r7, #12] + 80096c8: f000 fa41 bl 8009b4e + 80096cc: 4603 mov r3, r0 + 80096ce: 75bb strb r3, [r7, #22] + 80096d0: 7dbb ldrb r3, [r7, #22] + 80096d2: 2bff cmp r3, #255 @ 0xff + 80096d4: d025 beq.n 8009722 + 80096d6: 7dbb ldrb r3, [r7, #22] + 80096d8: 2b00 cmp r3, #0 + 80096da: d122 bne.n 8009722 + 80096dc: 68fb ldr r3, [r7, #12] + 80096de: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 80096e2: b2db uxtb r3, r3 + 80096e4: 2b03 cmp r3, #3 + 80096e6: d117 bne.n 8009718 + 80096e8: 7dba ldrb r2, [r7, #22] + 80096ea: 68fb ldr r3, [r7, #12] + 80096ec: 32ae adds r2, #174 @ 0xae + 80096ee: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 80096f2: 699b ldr r3, [r3, #24] + 80096f4: 2b00 cmp r3, #0 + 80096f6: d00f beq.n 8009718 + 80096f8: 7dba ldrb r2, [r7, #22] + 80096fa: 68fb ldr r3, [r7, #12] + 80096fc: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 8009700: 7dba ldrb r2, [r7, #22] + 8009702: 68fb ldr r3, [r7, #12] + 8009704: 32ae adds r2, #174 @ 0xae + 8009706: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 800970a: 699b ldr r3, [r3, #24] + 800970c: 7afa ldrb r2, [r7, #11] + 800970e: 4611 mov r1, r2 + 8009710: 68f8 ldr r0, [r7, #12] + 8009712: 4798 blx r3 + 8009714: 4603 mov r3, r0 + 8009716: 75fb strb r3, [r7, #23] + 8009718: 7dfb ldrb r3, [r7, #23] + 800971a: 2b00 cmp r3, #0 + 800971c: d001 beq.n 8009722 + 800971e: 7dfb ldrb r3, [r7, #23] + 8009720: e000 b.n 8009724 + 8009722: 2300 movs r3, #0 + 8009724: 4618 mov r0, r3 + 8009726: 3718 adds r7, #24 + 8009728: 46bd mov sp, r7 + 800972a: bd80 pop {r7, pc} + +0800972c : + 800972c: b580 push {r7, lr} + 800972e: b086 sub sp, #24 + 8009730: af00 add r7, sp, #0 + 8009732: 60f8 str r0, [r7, #12] + 8009734: 460b mov r3, r1 + 8009736: 607a str r2, [r7, #4] + 8009738: 72fb strb r3, [r7, #11] + 800973a: 7afb ldrb r3, [r7, #11] + 800973c: 2b00 cmp r3, #0 + 800973e: d178 bne.n 8009832 + 8009740: 68fb ldr r3, [r7, #12] + 8009742: 3314 adds r3, #20 + 8009744: 613b str r3, [r7, #16] + 8009746: 68fb ldr r3, [r7, #12] + 8009748: f8d3 3294 ldr.w r3, [r3, #660] @ 0x294 + 800974c: 2b02 cmp r3, #2 + 800974e: d163 bne.n 8009818 + 8009750: 693b ldr r3, [r7, #16] + 8009752: 685b ldr r3, [r3, #4] + 8009754: 693a ldr r2, [r7, #16] + 8009756: 8992 ldrh r2, [r2, #12] + 8009758: 4293 cmp r3, r2 + 800975a: d91c bls.n 8009796 + 800975c: 693b ldr r3, [r7, #16] + 800975e: 685b ldr r3, [r3, #4] + 8009760: 693a ldr r2, [r7, #16] + 8009762: 8992 ldrh r2, [r2, #12] + 8009764: 1a9a subs r2, r3, r2 + 8009766: 693b ldr r3, [r7, #16] + 8009768: 605a str r2, [r3, #4] + 800976a: 693b ldr r3, [r7, #16] + 800976c: 691b ldr r3, [r3, #16] + 800976e: 693a ldr r2, [r7, #16] + 8009770: 8992 ldrh r2, [r2, #12] + 8009772: 441a add r2, r3 + 8009774: 693b ldr r3, [r7, #16] + 8009776: 611a str r2, [r3, #16] + 8009778: 693b ldr r3, [r7, #16] + 800977a: 6919 ldr r1, [r3, #16] + 800977c: 693b ldr r3, [r7, #16] + 800977e: 685b ldr r3, [r3, #4] + 8009780: 461a mov r2, r3 + 8009782: 68f8 ldr r0, [r7, #12] + 8009784: f001 f8ee bl 800a964 + 8009788: 2300 movs r3, #0 + 800978a: 2200 movs r2, #0 + 800978c: 2100 movs r1, #0 + 800978e: 68f8 ldr r0, [r7, #12] + 8009790: f001 fd2a bl 800b1e8 + 8009794: e040 b.n 8009818 + 8009796: 693b ldr r3, [r7, #16] + 8009798: 899b ldrh r3, [r3, #12] + 800979a: 461a mov r2, r3 + 800979c: 693b ldr r3, [r7, #16] + 800979e: 685b ldr r3, [r3, #4] + 80097a0: 429a cmp r2, r3 + 80097a2: d11c bne.n 80097de + 80097a4: 693b ldr r3, [r7, #16] + 80097a6: 681b ldr r3, [r3, #0] + 80097a8: 693a ldr r2, [r7, #16] + 80097aa: 8992 ldrh r2, [r2, #12] + 80097ac: 4293 cmp r3, r2 + 80097ae: d316 bcc.n 80097de + 80097b0: 693b ldr r3, [r7, #16] + 80097b2: 681a ldr r2, [r3, #0] + 80097b4: 68fb ldr r3, [r7, #12] + 80097b6: f8d3 3298 ldr.w r3, [r3, #664] @ 0x298 + 80097ba: 429a cmp r2, r3 + 80097bc: d20f bcs.n 80097de + 80097be: 2200 movs r2, #0 + 80097c0: 2100 movs r1, #0 + 80097c2: 68f8 ldr r0, [r7, #12] + 80097c4: f001 f8ce bl 800a964 + 80097c8: 68fb ldr r3, [r7, #12] + 80097ca: 2200 movs r2, #0 + 80097cc: f8c3 2298 str.w r2, [r3, #664] @ 0x298 + 80097d0: 2300 movs r3, #0 + 80097d2: 2200 movs r2, #0 + 80097d4: 2100 movs r1, #0 + 80097d6: 68f8 ldr r0, [r7, #12] + 80097d8: f001 fd06 bl 800b1e8 + 80097dc: e01c b.n 8009818 + 80097de: 68fb ldr r3, [r7, #12] + 80097e0: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 80097e4: b2db uxtb r3, r3 + 80097e6: 2b03 cmp r3, #3 + 80097e8: d10f bne.n 800980a + 80097ea: 68fb ldr r3, [r7, #12] + 80097ec: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80097f0: 68db ldr r3, [r3, #12] + 80097f2: 2b00 cmp r3, #0 + 80097f4: d009 beq.n 800980a + 80097f6: 68fb ldr r3, [r7, #12] + 80097f8: 2200 movs r2, #0 + 80097fa: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 80097fe: 68fb ldr r3, [r7, #12] + 8009800: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 8009804: 68db ldr r3, [r3, #12] + 8009806: 68f8 ldr r0, [r7, #12] + 8009808: 4798 blx r3 + 800980a: 2180 movs r1, #128 @ 0x80 + 800980c: 68f8 ldr r0, [r7, #12] + 800980e: f001 fc41 bl 800b094 + 8009812: 68f8 ldr r0, [r7, #12] + 8009814: f001 f8db bl 800a9ce + 8009818: 68fb ldr r3, [r7, #12] + 800981a: f893 32a0 ldrb.w r3, [r3, #672] @ 0x2a0 + 800981e: 2b00 cmp r3, #0 + 8009820: d03a beq.n 8009898 + 8009822: 68f8 ldr r0, [r7, #12] + 8009824: f7ff fe30 bl 8009488 + 8009828: 68fb ldr r3, [r7, #12] + 800982a: 2200 movs r2, #0 + 800982c: f883 22a0 strb.w r2, [r3, #672] @ 0x2a0 + 8009830: e032 b.n 8009898 + 8009832: 7afb ldrb r3, [r7, #11] + 8009834: f063 037f orn r3, r3, #127 @ 0x7f + 8009838: b2db uxtb r3, r3 + 800983a: 4619 mov r1, r3 + 800983c: 68f8 ldr r0, [r7, #12] + 800983e: f000 f986 bl 8009b4e + 8009842: 4603 mov r3, r0 + 8009844: 75fb strb r3, [r7, #23] + 8009846: 7dfb ldrb r3, [r7, #23] + 8009848: 2bff cmp r3, #255 @ 0xff + 800984a: d025 beq.n 8009898 + 800984c: 7dfb ldrb r3, [r7, #23] + 800984e: 2b00 cmp r3, #0 + 8009850: d122 bne.n 8009898 + 8009852: 68fb ldr r3, [r7, #12] + 8009854: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009858: b2db uxtb r3, r3 + 800985a: 2b03 cmp r3, #3 + 800985c: d11c bne.n 8009898 + 800985e: 7dfa ldrb r2, [r7, #23] + 8009860: 68fb ldr r3, [r7, #12] + 8009862: 32ae adds r2, #174 @ 0xae + 8009864: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009868: 695b ldr r3, [r3, #20] + 800986a: 2b00 cmp r3, #0 + 800986c: d014 beq.n 8009898 + 800986e: 7dfa ldrb r2, [r7, #23] + 8009870: 68fb ldr r3, [r7, #12] + 8009872: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 8009876: 7dfa ldrb r2, [r7, #23] + 8009878: 68fb ldr r3, [r7, #12] + 800987a: 32ae adds r2, #174 @ 0xae + 800987c: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009880: 695b ldr r3, [r3, #20] + 8009882: 7afa ldrb r2, [r7, #11] + 8009884: 4611 mov r1, r2 + 8009886: 68f8 ldr r0, [r7, #12] + 8009888: 4798 blx r3 + 800988a: 4603 mov r3, r0 + 800988c: 75bb strb r3, [r7, #22] + 800988e: 7dbb ldrb r3, [r7, #22] + 8009890: 2b00 cmp r3, #0 + 8009892: d001 beq.n 8009898 + 8009894: 7dbb ldrb r3, [r7, #22] + 8009896: e000 b.n 800989a + 8009898: 2300 movs r3, #0 + 800989a: 4618 mov r0, r3 + 800989c: 3718 adds r7, #24 + 800989e: 46bd mov sp, r7 + 80098a0: bd80 pop {r7, pc} + +080098a2 : + 80098a2: b580 push {r7, lr} + 80098a4: b084 sub sp, #16 + 80098a6: af00 add r7, sp, #0 + 80098a8: 6078 str r0, [r7, #4] + 80098aa: 2300 movs r3, #0 + 80098ac: 73fb strb r3, [r7, #15] + 80098ae: 687b ldr r3, [r7, #4] + 80098b0: 2201 movs r2, #1 + 80098b2: f883 229c strb.w r2, [r3, #668] @ 0x29c + 80098b6: 687b ldr r3, [r7, #4] + 80098b8: 2200 movs r2, #0 + 80098ba: f8c3 2294 str.w r2, [r3, #660] @ 0x294 + 80098be: 687b ldr r3, [r7, #4] + 80098c0: 2200 movs r2, #0 + 80098c2: 605a str r2, [r3, #4] + 80098c4: 687b ldr r3, [r7, #4] + 80098c6: 2200 movs r2, #0 + 80098c8: f8c3 22a4 str.w r2, [r3, #676] @ 0x2a4 + 80098cc: 687b ldr r3, [r7, #4] + 80098ce: 2200 movs r2, #0 + 80098d0: f883 22a0 strb.w r2, [r3, #672] @ 0x2a0 + 80098d4: 687b ldr r3, [r7, #4] + 80098d6: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80098da: 2b00 cmp r3, #0 + 80098dc: d014 beq.n 8009908 + 80098de: 687b ldr r3, [r7, #4] + 80098e0: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80098e4: 685b ldr r3, [r3, #4] + 80098e6: 2b00 cmp r3, #0 + 80098e8: d00e beq.n 8009908 + 80098ea: 687b ldr r3, [r7, #4] + 80098ec: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80098f0: 685b ldr r3, [r3, #4] + 80098f2: 687a ldr r2, [r7, #4] + 80098f4: 6852 ldr r2, [r2, #4] + 80098f6: b2d2 uxtb r2, r2 + 80098f8: 4611 mov r1, r2 + 80098fa: 6878 ldr r0, [r7, #4] + 80098fc: 4798 blx r3 + 80098fe: 4603 mov r3, r0 + 8009900: 2b00 cmp r3, #0 + 8009902: d001 beq.n 8009908 + 8009904: 2303 movs r3, #3 + 8009906: 73fb strb r3, [r7, #15] + 8009908: 2340 movs r3, #64 @ 0x40 + 800990a: 2200 movs r2, #0 + 800990c: 2100 movs r1, #0 + 800990e: 6878 ldr r0, [r7, #4] + 8009910: f001 fb7b bl 800b00a + 8009914: 687b ldr r3, [r7, #4] + 8009916: 2201 movs r2, #1 + 8009918: f883 2163 strb.w r2, [r3, #355] @ 0x163 + 800991c: 687b ldr r3, [r7, #4] + 800991e: 2240 movs r2, #64 @ 0x40 + 8009920: f8a3 2160 strh.w r2, [r3, #352] @ 0x160 + 8009924: 2340 movs r3, #64 @ 0x40 + 8009926: 2200 movs r2, #0 + 8009928: 2180 movs r1, #128 @ 0x80 + 800992a: 6878 ldr r0, [r7, #4] + 800992c: f001 fb6d bl 800b00a + 8009930: 687b ldr r3, [r7, #4] + 8009932: 2201 movs r2, #1 + 8009934: f883 2023 strb.w r2, [r3, #35] @ 0x23 + 8009938: 687b ldr r3, [r7, #4] + 800993a: 2240 movs r2, #64 @ 0x40 + 800993c: 841a strh r2, [r3, #32] + 800993e: 7bfb ldrb r3, [r7, #15] + 8009940: 4618 mov r0, r3 + 8009942: 3710 adds r7, #16 + 8009944: 46bd mov sp, r7 + 8009946: bd80 pop {r7, pc} + +08009948 : + 8009948: b480 push {r7} + 800994a: b083 sub sp, #12 + 800994c: af00 add r7, sp, #0 + 800994e: 6078 str r0, [r7, #4] + 8009950: 460b mov r3, r1 + 8009952: 70fb strb r3, [r7, #3] + 8009954: 687b ldr r3, [r7, #4] + 8009956: 78fa ldrb r2, [r7, #3] + 8009958: 741a strb r2, [r3, #16] + 800995a: 2300 movs r3, #0 + 800995c: 4618 mov r0, r3 + 800995e: 370c adds r7, #12 + 8009960: 46bd mov sp, r7 + 8009962: f85d 7b04 ldr.w r7, [sp], #4 + 8009966: 4770 bx lr + +08009968 : + 8009968: b480 push {r7} + 800996a: b083 sub sp, #12 + 800996c: af00 add r7, sp, #0 + 800996e: 6078 str r0, [r7, #4] + 8009970: 687b ldr r3, [r7, #4] + 8009972: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009976: b2db uxtb r3, r3 + 8009978: 2b04 cmp r3, #4 + 800997a: d006 beq.n 800998a + 800997c: 687b ldr r3, [r7, #4] + 800997e: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009982: b2da uxtb r2, r3 + 8009984: 687b ldr r3, [r7, #4] + 8009986: f883 229d strb.w r2, [r3, #669] @ 0x29d + 800998a: 687b ldr r3, [r7, #4] + 800998c: 2204 movs r2, #4 + 800998e: f883 229c strb.w r2, [r3, #668] @ 0x29c + 8009992: 2300 movs r3, #0 + 8009994: 4618 mov r0, r3 + 8009996: 370c adds r7, #12 + 8009998: 46bd mov sp, r7 + 800999a: f85d 7b04 ldr.w r7, [sp], #4 + 800999e: 4770 bx lr + +080099a0 : + 80099a0: b480 push {r7} + 80099a2: b083 sub sp, #12 + 80099a4: af00 add r7, sp, #0 + 80099a6: 6078 str r0, [r7, #4] + 80099a8: 687b ldr r3, [r7, #4] + 80099aa: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 80099ae: b2db uxtb r3, r3 + 80099b0: 2b04 cmp r3, #4 + 80099b2: d106 bne.n 80099c2 + 80099b4: 687b ldr r3, [r7, #4] + 80099b6: f893 329d ldrb.w r3, [r3, #669] @ 0x29d + 80099ba: b2da uxtb r2, r3 + 80099bc: 687b ldr r3, [r7, #4] + 80099be: f883 229c strb.w r2, [r3, #668] @ 0x29c + 80099c2: 2300 movs r3, #0 + 80099c4: 4618 mov r0, r3 + 80099c6: 370c adds r7, #12 + 80099c8: 46bd mov sp, r7 + 80099ca: f85d 7b04 ldr.w r7, [sp], #4 + 80099ce: 4770 bx lr + +080099d0 : + 80099d0: b580 push {r7, lr} + 80099d2: b082 sub sp, #8 + 80099d4: af00 add r7, sp, #0 + 80099d6: 6078 str r0, [r7, #4] + 80099d8: 687b ldr r3, [r7, #4] + 80099da: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 80099de: b2db uxtb r3, r3 + 80099e0: 2b03 cmp r3, #3 + 80099e2: d110 bne.n 8009a06 + 80099e4: 687b ldr r3, [r7, #4] + 80099e6: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80099ea: 2b00 cmp r3, #0 + 80099ec: d00b beq.n 8009a06 + 80099ee: 687b ldr r3, [r7, #4] + 80099f0: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 80099f4: 69db ldr r3, [r3, #28] + 80099f6: 2b00 cmp r3, #0 + 80099f8: d005 beq.n 8009a06 + 80099fa: 687b ldr r3, [r7, #4] + 80099fc: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 8009a00: 69db ldr r3, [r3, #28] + 8009a02: 6878 ldr r0, [r7, #4] + 8009a04: 4798 blx r3 + 8009a06: 2300 movs r3, #0 + 8009a08: 4618 mov r0, r3 + 8009a0a: 3708 adds r7, #8 + 8009a0c: 46bd mov sp, r7 + 8009a0e: bd80 pop {r7, pc} + +08009a10 : + 8009a10: b580 push {r7, lr} + 8009a12: b082 sub sp, #8 + 8009a14: af00 add r7, sp, #0 + 8009a16: 6078 str r0, [r7, #4] + 8009a18: 460b mov r3, r1 + 8009a1a: 70fb strb r3, [r7, #3] + 8009a1c: 687b ldr r3, [r7, #4] + 8009a1e: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009a22: 687b ldr r3, [r7, #4] + 8009a24: 32ae adds r2, #174 @ 0xae + 8009a26: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009a2a: 2b00 cmp r3, #0 + 8009a2c: d101 bne.n 8009a32 + 8009a2e: 2303 movs r3, #3 + 8009a30: e01c b.n 8009a6c + 8009a32: 687b ldr r3, [r7, #4] + 8009a34: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009a38: b2db uxtb r3, r3 + 8009a3a: 2b03 cmp r3, #3 + 8009a3c: d115 bne.n 8009a6a + 8009a3e: 687b ldr r3, [r7, #4] + 8009a40: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009a44: 687b ldr r3, [r7, #4] + 8009a46: 32ae adds r2, #174 @ 0xae + 8009a48: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009a4c: 6a1b ldr r3, [r3, #32] + 8009a4e: 2b00 cmp r3, #0 + 8009a50: d00b beq.n 8009a6a + 8009a52: 687b ldr r3, [r7, #4] + 8009a54: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009a58: 687b ldr r3, [r7, #4] + 8009a5a: 32ae adds r2, #174 @ 0xae + 8009a5c: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009a60: 6a1b ldr r3, [r3, #32] + 8009a62: 78fa ldrb r2, [r7, #3] + 8009a64: 4611 mov r1, r2 + 8009a66: 6878 ldr r0, [r7, #4] + 8009a68: 4798 blx r3 + 8009a6a: 2300 movs r3, #0 + 8009a6c: 4618 mov r0, r3 + 8009a6e: 3708 adds r7, #8 + 8009a70: 46bd mov sp, r7 + 8009a72: bd80 pop {r7, pc} + +08009a74 : + 8009a74: b580 push {r7, lr} + 8009a76: b082 sub sp, #8 + 8009a78: af00 add r7, sp, #0 + 8009a7a: 6078 str r0, [r7, #4] + 8009a7c: 460b mov r3, r1 + 8009a7e: 70fb strb r3, [r7, #3] + 8009a80: 687b ldr r3, [r7, #4] + 8009a82: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009a86: 687b ldr r3, [r7, #4] + 8009a88: 32ae adds r2, #174 @ 0xae + 8009a8a: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009a8e: 2b00 cmp r3, #0 + 8009a90: d101 bne.n 8009a96 + 8009a92: 2303 movs r3, #3 + 8009a94: e01c b.n 8009ad0 + 8009a96: 687b ldr r3, [r7, #4] + 8009a98: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009a9c: b2db uxtb r3, r3 + 8009a9e: 2b03 cmp r3, #3 + 8009aa0: d115 bne.n 8009ace + 8009aa2: 687b ldr r3, [r7, #4] + 8009aa4: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009aa8: 687b ldr r3, [r7, #4] + 8009aaa: 32ae adds r2, #174 @ 0xae + 8009aac: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009ab0: 6a5b ldr r3, [r3, #36] @ 0x24 + 8009ab2: 2b00 cmp r3, #0 + 8009ab4: d00b beq.n 8009ace + 8009ab6: 687b ldr r3, [r7, #4] + 8009ab8: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009abc: 687b ldr r3, [r7, #4] + 8009abe: 32ae adds r2, #174 @ 0xae + 8009ac0: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009ac4: 6a5b ldr r3, [r3, #36] @ 0x24 + 8009ac6: 78fa ldrb r2, [r7, #3] + 8009ac8: 4611 mov r1, r2 + 8009aca: 6878 ldr r0, [r7, #4] + 8009acc: 4798 blx r3 + 8009ace: 2300 movs r3, #0 + 8009ad0: 4618 mov r0, r3 + 8009ad2: 3708 adds r7, #8 + 8009ad4: 46bd mov sp, r7 + 8009ad6: bd80 pop {r7, pc} + +08009ad8 : + 8009ad8: b480 push {r7} + 8009ada: b083 sub sp, #12 + 8009adc: af00 add r7, sp, #0 + 8009ade: 6078 str r0, [r7, #4] + 8009ae0: 2300 movs r3, #0 + 8009ae2: 4618 mov r0, r3 + 8009ae4: 370c adds r7, #12 + 8009ae6: 46bd mov sp, r7 + 8009ae8: f85d 7b04 ldr.w r7, [sp], #4 + 8009aec: 4770 bx lr + +08009aee : + 8009aee: b580 push {r7, lr} + 8009af0: b084 sub sp, #16 + 8009af2: af00 add r7, sp, #0 + 8009af4: 6078 str r0, [r7, #4] + 8009af6: 2300 movs r3, #0 + 8009af8: 73fb strb r3, [r7, #15] + 8009afa: 687b ldr r3, [r7, #4] + 8009afc: 2201 movs r2, #1 + 8009afe: f883 229c strb.w r2, [r3, #668] @ 0x29c + 8009b02: 687b ldr r3, [r7, #4] + 8009b04: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 8009b08: 2b00 cmp r3, #0 + 8009b0a: d00e beq.n 8009b2a + 8009b0c: 687b ldr r3, [r7, #4] + 8009b0e: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 8009b12: 685b ldr r3, [r3, #4] + 8009b14: 687a ldr r2, [r7, #4] + 8009b16: 6852 ldr r2, [r2, #4] + 8009b18: b2d2 uxtb r2, r2 + 8009b1a: 4611 mov r1, r2 + 8009b1c: 6878 ldr r0, [r7, #4] + 8009b1e: 4798 blx r3 + 8009b20: 4603 mov r3, r0 + 8009b22: 2b00 cmp r3, #0 + 8009b24: d001 beq.n 8009b2a + 8009b26: 2303 movs r3, #3 + 8009b28: 73fb strb r3, [r7, #15] + 8009b2a: 7bfb ldrb r3, [r7, #15] + 8009b2c: 4618 mov r0, r3 + 8009b2e: 3710 adds r7, #16 + 8009b30: 46bd mov sp, r7 + 8009b32: bd80 pop {r7, pc} + +08009b34 : + 8009b34: b480 push {r7} + 8009b36: b083 sub sp, #12 + 8009b38: af00 add r7, sp, #0 + 8009b3a: 6078 str r0, [r7, #4] + 8009b3c: 460b mov r3, r1 + 8009b3e: 70fb strb r3, [r7, #3] + 8009b40: 2300 movs r3, #0 + 8009b42: 4618 mov r0, r3 + 8009b44: 370c adds r7, #12 + 8009b46: 46bd mov sp, r7 + 8009b48: f85d 7b04 ldr.w r7, [sp], #4 + 8009b4c: 4770 bx lr + +08009b4e : + 8009b4e: b480 push {r7} + 8009b50: b083 sub sp, #12 + 8009b52: af00 add r7, sp, #0 + 8009b54: 6078 str r0, [r7, #4] + 8009b56: 460b mov r3, r1 + 8009b58: 70fb strb r3, [r7, #3] + 8009b5a: 2300 movs r3, #0 + 8009b5c: 4618 mov r0, r3 + 8009b5e: 370c adds r7, #12 + 8009b60: 46bd mov sp, r7 + 8009b62: f85d 7b04 ldr.w r7, [sp], #4 + 8009b66: 4770 bx lr + +08009b68 : + 8009b68: b580 push {r7, lr} + 8009b6a: b086 sub sp, #24 + 8009b6c: af00 add r7, sp, #0 + 8009b6e: 6078 str r0, [r7, #4] + 8009b70: 460b mov r3, r1 + 8009b72: 70fb strb r3, [r7, #3] + 8009b74: 687b ldr r3, [r7, #4] + 8009b76: 617b str r3, [r7, #20] + 8009b78: 687b ldr r3, [r7, #4] + 8009b7a: 60fb str r3, [r7, #12] + 8009b7c: 2300 movs r3, #0 + 8009b7e: 613b str r3, [r7, #16] + 8009b80: 68fb ldr r3, [r7, #12] + 8009b82: 885b ldrh r3, [r3, #2] + 8009b84: b29b uxth r3, r3 + 8009b86: 68fa ldr r2, [r7, #12] + 8009b88: 7812 ldrb r2, [r2, #0] + 8009b8a: 4293 cmp r3, r2 + 8009b8c: d91f bls.n 8009bce + 8009b8e: 68fb ldr r3, [r7, #12] + 8009b90: 781b ldrb r3, [r3, #0] + 8009b92: 817b strh r3, [r7, #10] + 8009b94: e013 b.n 8009bbe + 8009b96: f107 030a add.w r3, r7, #10 + 8009b9a: 4619 mov r1, r3 + 8009b9c: 6978 ldr r0, [r7, #20] + 8009b9e: f000 f81b bl 8009bd8 + 8009ba2: 6178 str r0, [r7, #20] + 8009ba4: 697b ldr r3, [r7, #20] + 8009ba6: 785b ldrb r3, [r3, #1] + 8009ba8: 2b05 cmp r3, #5 + 8009baa: d108 bne.n 8009bbe + 8009bac: 697b ldr r3, [r7, #20] + 8009bae: 613b str r3, [r7, #16] + 8009bb0: 693b ldr r3, [r7, #16] + 8009bb2: 789b ldrb r3, [r3, #2] + 8009bb4: 78fa ldrb r2, [r7, #3] + 8009bb6: 429a cmp r2, r3 + 8009bb8: d008 beq.n 8009bcc + 8009bba: 2300 movs r3, #0 + 8009bbc: 613b str r3, [r7, #16] + 8009bbe: 68fb ldr r3, [r7, #12] + 8009bc0: 885b ldrh r3, [r3, #2] + 8009bc2: b29a uxth r2, r3 + 8009bc4: 897b ldrh r3, [r7, #10] + 8009bc6: 429a cmp r2, r3 + 8009bc8: d8e5 bhi.n 8009b96 + 8009bca: e000 b.n 8009bce + 8009bcc: bf00 nop + 8009bce: 693b ldr r3, [r7, #16] + 8009bd0: 4618 mov r0, r3 + 8009bd2: 3718 adds r7, #24 + 8009bd4: 46bd mov sp, r7 + 8009bd6: bd80 pop {r7, pc} + +08009bd8 : + 8009bd8: b480 push {r7} + 8009bda: b085 sub sp, #20 + 8009bdc: af00 add r7, sp, #0 + 8009bde: 6078 str r0, [r7, #4] + 8009be0: 6039 str r1, [r7, #0] + 8009be2: 687b ldr r3, [r7, #4] + 8009be4: 60fb str r3, [r7, #12] + 8009be6: 683b ldr r3, [r7, #0] + 8009be8: 881b ldrh r3, [r3, #0] + 8009bea: 68fa ldr r2, [r7, #12] + 8009bec: 7812 ldrb r2, [r2, #0] + 8009bee: 4413 add r3, r2 + 8009bf0: b29a uxth r2, r3 + 8009bf2: 683b ldr r3, [r7, #0] + 8009bf4: 801a strh r2, [r3, #0] + 8009bf6: 68fb ldr r3, [r7, #12] + 8009bf8: 781b ldrb r3, [r3, #0] + 8009bfa: 461a mov r2, r3 + 8009bfc: 687b ldr r3, [r7, #4] + 8009bfe: 4413 add r3, r2 + 8009c00: 60fb str r3, [r7, #12] + 8009c02: 68fb ldr r3, [r7, #12] + 8009c04: 4618 mov r0, r3 + 8009c06: 3714 adds r7, #20 + 8009c08: 46bd mov sp, r7 + 8009c0a: f85d 7b04 ldr.w r7, [sp], #4 + 8009c0e: 4770 bx lr + +08009c10 : + 8009c10: b480 push {r7} + 8009c12: b087 sub sp, #28 + 8009c14: af00 add r7, sp, #0 + 8009c16: 6078 str r0, [r7, #4] + 8009c18: 687b ldr r3, [r7, #4] + 8009c1a: 617b str r3, [r7, #20] + 8009c1c: 697b ldr r3, [r7, #20] + 8009c1e: 781b ldrb r3, [r3, #0] + 8009c20: 827b strh r3, [r7, #18] + 8009c22: 697b ldr r3, [r7, #20] + 8009c24: 3301 adds r3, #1 + 8009c26: 617b str r3, [r7, #20] + 8009c28: 697b ldr r3, [r7, #20] + 8009c2a: 781b ldrb r3, [r3, #0] + 8009c2c: 823b strh r3, [r7, #16] + 8009c2e: f9b7 3010 ldrsh.w r3, [r7, #16] + 8009c32: 021b lsls r3, r3, #8 + 8009c34: b21a sxth r2, r3 + 8009c36: f9b7 3012 ldrsh.w r3, [r7, #18] + 8009c3a: 4313 orrs r3, r2 + 8009c3c: b21b sxth r3, r3 + 8009c3e: 81fb strh r3, [r7, #14] + 8009c40: 89fb ldrh r3, [r7, #14] + 8009c42: 4618 mov r0, r3 + 8009c44: 371c adds r7, #28 + 8009c46: 46bd mov sp, r7 + 8009c48: f85d 7b04 ldr.w r7, [sp], #4 + 8009c4c: 4770 bx lr + ... + +08009c50 : + 8009c50: b580 push {r7, lr} + 8009c52: b084 sub sp, #16 + 8009c54: af00 add r7, sp, #0 + 8009c56: 6078 str r0, [r7, #4] + 8009c58: 6039 str r1, [r7, #0] + 8009c5a: 2300 movs r3, #0 + 8009c5c: 73fb strb r3, [r7, #15] + 8009c5e: 683b ldr r3, [r7, #0] + 8009c60: 781b ldrb r3, [r3, #0] + 8009c62: f003 0360 and.w r3, r3, #96 @ 0x60 + 8009c66: 2b40 cmp r3, #64 @ 0x40 + 8009c68: d005 beq.n 8009c76 + 8009c6a: 2b40 cmp r3, #64 @ 0x40 + 8009c6c: d857 bhi.n 8009d1e + 8009c6e: 2b00 cmp r3, #0 + 8009c70: d00f beq.n 8009c92 + 8009c72: 2b20 cmp r3, #32 + 8009c74: d153 bne.n 8009d1e + 8009c76: 687b ldr r3, [r7, #4] + 8009c78: f8d3 22d4 ldr.w r2, [r3, #724] @ 0x2d4 + 8009c7c: 687b ldr r3, [r7, #4] + 8009c7e: 32ae adds r2, #174 @ 0xae + 8009c80: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009c84: 689b ldr r3, [r3, #8] + 8009c86: 6839 ldr r1, [r7, #0] + 8009c88: 6878 ldr r0, [r7, #4] + 8009c8a: 4798 blx r3 + 8009c8c: 4603 mov r3, r0 + 8009c8e: 73fb strb r3, [r7, #15] + 8009c90: e04a b.n 8009d28 + 8009c92: 683b ldr r3, [r7, #0] + 8009c94: 785b ldrb r3, [r3, #1] + 8009c96: 2b09 cmp r3, #9 + 8009c98: d83b bhi.n 8009d12 + 8009c9a: a201 add r2, pc, #4 @ (adr r2, 8009ca0 ) + 8009c9c: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8009ca0: 08009cf5 .word 0x08009cf5 + 8009ca4: 08009d09 .word 0x08009d09 + 8009ca8: 08009d13 .word 0x08009d13 + 8009cac: 08009cff .word 0x08009cff + 8009cb0: 08009d13 .word 0x08009d13 + 8009cb4: 08009cd3 .word 0x08009cd3 + 8009cb8: 08009cc9 .word 0x08009cc9 + 8009cbc: 08009d13 .word 0x08009d13 + 8009cc0: 08009ceb .word 0x08009ceb + 8009cc4: 08009cdd .word 0x08009cdd + 8009cc8: 6839 ldr r1, [r7, #0] + 8009cca: 6878 ldr r0, [r7, #4] + 8009ccc: f000 fa3e bl 800a14c + 8009cd0: e024 b.n 8009d1c + 8009cd2: 6839 ldr r1, [r7, #0] + 8009cd4: 6878 ldr r0, [r7, #4] + 8009cd6: f000 fbcd bl 800a474 + 8009cda: e01f b.n 8009d1c + 8009cdc: 6839 ldr r1, [r7, #0] + 8009cde: 6878 ldr r0, [r7, #4] + 8009ce0: f000 fc0c bl 800a4fc + 8009ce4: 4603 mov r3, r0 + 8009ce6: 73fb strb r3, [r7, #15] + 8009ce8: e018 b.n 8009d1c + 8009cea: 6839 ldr r1, [r7, #0] + 8009cec: 6878 ldr r0, [r7, #4] + 8009cee: f000 fcaf bl 800a650 + 8009cf2: e013 b.n 8009d1c + 8009cf4: 6839 ldr r1, [r7, #0] + 8009cf6: 6878 ldr r0, [r7, #4] + 8009cf8: f000 fce0 bl 800a6bc + 8009cfc: e00e b.n 8009d1c + 8009cfe: 6839 ldr r1, [r7, #0] + 8009d00: 6878 ldr r0, [r7, #4] + 8009d02: f000 fd0f bl 800a724 + 8009d06: e009 b.n 8009d1c + 8009d08: 6839 ldr r1, [r7, #0] + 8009d0a: 6878 ldr r0, [r7, #4] + 8009d0c: f000 fd33 bl 800a776 + 8009d10: e004 b.n 8009d1c + 8009d12: 6839 ldr r1, [r7, #0] + 8009d14: 6878 ldr r0, [r7, #4] + 8009d16: f000 fd8a bl 800a82e + 8009d1a: bf00 nop + 8009d1c: e004 b.n 8009d28 + 8009d1e: 6839 ldr r1, [r7, #0] + 8009d20: 6878 ldr r0, [r7, #4] + 8009d22: f000 fd84 bl 800a82e + 8009d26: bf00 nop + 8009d28: 7bfb ldrb r3, [r7, #15] + 8009d2a: 4618 mov r0, r3 + 8009d2c: 3710 adds r7, #16 + 8009d2e: 46bd mov sp, r7 + 8009d30: bd80 pop {r7, pc} + 8009d32: bf00 nop + +08009d34 : + 8009d34: b580 push {r7, lr} + 8009d36: b084 sub sp, #16 + 8009d38: af00 add r7, sp, #0 + 8009d3a: 6078 str r0, [r7, #4] + 8009d3c: 6039 str r1, [r7, #0] + 8009d3e: 2300 movs r3, #0 + 8009d40: 73fb strb r3, [r7, #15] + 8009d42: 683b ldr r3, [r7, #0] + 8009d44: 781b ldrb r3, [r3, #0] + 8009d46: f003 0360 and.w r3, r3, #96 @ 0x60 + 8009d4a: 2b40 cmp r3, #64 @ 0x40 + 8009d4c: d005 beq.n 8009d5a + 8009d4e: 2b40 cmp r3, #64 @ 0x40 + 8009d50: d852 bhi.n 8009df8 + 8009d52: 2b00 cmp r3, #0 + 8009d54: d001 beq.n 8009d5a + 8009d56: 2b20 cmp r3, #32 + 8009d58: d14e bne.n 8009df8 + 8009d5a: 687b ldr r3, [r7, #4] + 8009d5c: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009d60: b2db uxtb r3, r3 + 8009d62: 3b01 subs r3, #1 + 8009d64: 2b02 cmp r3, #2 + 8009d66: d840 bhi.n 8009dea + 8009d68: 683b ldr r3, [r7, #0] + 8009d6a: 889b ldrh r3, [r3, #4] + 8009d6c: b2db uxtb r3, r3 + 8009d6e: 2b01 cmp r3, #1 + 8009d70: d836 bhi.n 8009de0 + 8009d72: 683b ldr r3, [r7, #0] + 8009d74: 889b ldrh r3, [r3, #4] + 8009d76: b2db uxtb r3, r3 + 8009d78: 4619 mov r1, r3 + 8009d7a: 6878 ldr r0, [r7, #4] + 8009d7c: f7ff feda bl 8009b34 + 8009d80: 4603 mov r3, r0 + 8009d82: 73bb strb r3, [r7, #14] + 8009d84: 7bbb ldrb r3, [r7, #14] + 8009d86: 2bff cmp r3, #255 @ 0xff + 8009d88: d01d beq.n 8009dc6 + 8009d8a: 7bbb ldrb r3, [r7, #14] + 8009d8c: 2b00 cmp r3, #0 + 8009d8e: d11a bne.n 8009dc6 + 8009d90: 7bba ldrb r2, [r7, #14] + 8009d92: 687b ldr r3, [r7, #4] + 8009d94: 32ae adds r2, #174 @ 0xae + 8009d96: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009d9a: 689b ldr r3, [r3, #8] + 8009d9c: 2b00 cmp r3, #0 + 8009d9e: d00f beq.n 8009dc0 + 8009da0: 7bba ldrb r2, [r7, #14] + 8009da2: 687b ldr r3, [r7, #4] + 8009da4: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 8009da8: 7bba ldrb r2, [r7, #14] + 8009daa: 687b ldr r3, [r7, #4] + 8009dac: 32ae adds r2, #174 @ 0xae + 8009dae: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009db2: 689b ldr r3, [r3, #8] + 8009db4: 6839 ldr r1, [r7, #0] + 8009db6: 6878 ldr r0, [r7, #4] + 8009db8: 4798 blx r3 + 8009dba: 4603 mov r3, r0 + 8009dbc: 73fb strb r3, [r7, #15] + 8009dbe: e004 b.n 8009dca + 8009dc0: 2303 movs r3, #3 + 8009dc2: 73fb strb r3, [r7, #15] + 8009dc4: e001 b.n 8009dca + 8009dc6: 2303 movs r3, #3 + 8009dc8: 73fb strb r3, [r7, #15] + 8009dca: 683b ldr r3, [r7, #0] + 8009dcc: 88db ldrh r3, [r3, #6] + 8009dce: 2b00 cmp r3, #0 + 8009dd0: d110 bne.n 8009df4 + 8009dd2: 7bfb ldrb r3, [r7, #15] + 8009dd4: 2b00 cmp r3, #0 + 8009dd6: d10d bne.n 8009df4 + 8009dd8: 6878 ldr r0, [r7, #4] + 8009dda: f000 fde5 bl 800a9a8 + 8009dde: e009 b.n 8009df4 + 8009de0: 6839 ldr r1, [r7, #0] + 8009de2: 6878 ldr r0, [r7, #4] + 8009de4: f000 fd23 bl 800a82e + 8009de8: e004 b.n 8009df4 + 8009dea: 6839 ldr r1, [r7, #0] + 8009dec: 6878 ldr r0, [r7, #4] + 8009dee: f000 fd1e bl 800a82e + 8009df2: e000 b.n 8009df6 + 8009df4: bf00 nop + 8009df6: e004 b.n 8009e02 + 8009df8: 6839 ldr r1, [r7, #0] + 8009dfa: 6878 ldr r0, [r7, #4] + 8009dfc: f000 fd17 bl 800a82e + 8009e00: bf00 nop + 8009e02: 7bfb ldrb r3, [r7, #15] + 8009e04: 4618 mov r0, r3 + 8009e06: 3710 adds r7, #16 + 8009e08: 46bd mov sp, r7 + 8009e0a: bd80 pop {r7, pc} + +08009e0c : + 8009e0c: b580 push {r7, lr} + 8009e0e: b084 sub sp, #16 + 8009e10: af00 add r7, sp, #0 + 8009e12: 6078 str r0, [r7, #4] + 8009e14: 6039 str r1, [r7, #0] + 8009e16: 2300 movs r3, #0 + 8009e18: 73fb strb r3, [r7, #15] + 8009e1a: 683b ldr r3, [r7, #0] + 8009e1c: 889b ldrh r3, [r3, #4] + 8009e1e: 73bb strb r3, [r7, #14] + 8009e20: 683b ldr r3, [r7, #0] + 8009e22: 781b ldrb r3, [r3, #0] + 8009e24: f003 0360 and.w r3, r3, #96 @ 0x60 + 8009e28: 2b40 cmp r3, #64 @ 0x40 + 8009e2a: d007 beq.n 8009e3c + 8009e2c: 2b40 cmp r3, #64 @ 0x40 + 8009e2e: f200 8181 bhi.w 800a134 + 8009e32: 2b00 cmp r3, #0 + 8009e34: d02a beq.n 8009e8c + 8009e36: 2b20 cmp r3, #32 + 8009e38: f040 817c bne.w 800a134 + 8009e3c: 7bbb ldrb r3, [r7, #14] + 8009e3e: 4619 mov r1, r3 + 8009e40: 6878 ldr r0, [r7, #4] + 8009e42: f7ff fe84 bl 8009b4e + 8009e46: 4603 mov r3, r0 + 8009e48: 737b strb r3, [r7, #13] + 8009e4a: 7b7b ldrb r3, [r7, #13] + 8009e4c: 2bff cmp r3, #255 @ 0xff + 8009e4e: f000 8176 beq.w 800a13e + 8009e52: 7b7b ldrb r3, [r7, #13] + 8009e54: 2b00 cmp r3, #0 + 8009e56: f040 8172 bne.w 800a13e + 8009e5a: 7b7a ldrb r2, [r7, #13] + 8009e5c: 687b ldr r3, [r7, #4] + 8009e5e: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 8009e62: 7b7a ldrb r2, [r7, #13] + 8009e64: 687b ldr r3, [r7, #4] + 8009e66: 32ae adds r2, #174 @ 0xae + 8009e68: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009e6c: 689b ldr r3, [r3, #8] + 8009e6e: 2b00 cmp r3, #0 + 8009e70: f000 8165 beq.w 800a13e + 8009e74: 7b7a ldrb r2, [r7, #13] + 8009e76: 687b ldr r3, [r7, #4] + 8009e78: 32ae adds r2, #174 @ 0xae + 8009e7a: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009e7e: 689b ldr r3, [r3, #8] + 8009e80: 6839 ldr r1, [r7, #0] + 8009e82: 6878 ldr r0, [r7, #4] + 8009e84: 4798 blx r3 + 8009e86: 4603 mov r3, r0 + 8009e88: 73fb strb r3, [r7, #15] + 8009e8a: e158 b.n 800a13e + 8009e8c: 683b ldr r3, [r7, #0] + 8009e8e: 785b ldrb r3, [r3, #1] + 8009e90: 2b03 cmp r3, #3 + 8009e92: d008 beq.n 8009ea6 + 8009e94: 2b03 cmp r3, #3 + 8009e96: f300 8147 bgt.w 800a128 + 8009e9a: 2b00 cmp r3, #0 + 8009e9c: f000 809b beq.w 8009fd6 + 8009ea0: 2b01 cmp r3, #1 + 8009ea2: d03c beq.n 8009f1e + 8009ea4: e140 b.n 800a128 + 8009ea6: 687b ldr r3, [r7, #4] + 8009ea8: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009eac: b2db uxtb r3, r3 + 8009eae: 2b02 cmp r3, #2 + 8009eb0: d002 beq.n 8009eb8 + 8009eb2: 2b03 cmp r3, #3 + 8009eb4: d016 beq.n 8009ee4 + 8009eb6: e02c b.n 8009f12 + 8009eb8: 7bbb ldrb r3, [r7, #14] + 8009eba: 2b00 cmp r3, #0 + 8009ebc: d00d beq.n 8009eda + 8009ebe: 7bbb ldrb r3, [r7, #14] + 8009ec0: 2b80 cmp r3, #128 @ 0x80 + 8009ec2: d00a beq.n 8009eda + 8009ec4: 7bbb ldrb r3, [r7, #14] + 8009ec6: 4619 mov r1, r3 + 8009ec8: 6878 ldr r0, [r7, #4] + 8009eca: f001 f8e3 bl 800b094 + 8009ece: 2180 movs r1, #128 @ 0x80 + 8009ed0: 6878 ldr r0, [r7, #4] + 8009ed2: f001 f8df bl 800b094 + 8009ed6: bf00 nop + 8009ed8: e020 b.n 8009f1c + 8009eda: 6839 ldr r1, [r7, #0] + 8009edc: 6878 ldr r0, [r7, #4] + 8009ede: f000 fca6 bl 800a82e + 8009ee2: e01b b.n 8009f1c + 8009ee4: 683b ldr r3, [r7, #0] + 8009ee6: 885b ldrh r3, [r3, #2] + 8009ee8: 2b00 cmp r3, #0 + 8009eea: d10e bne.n 8009f0a + 8009eec: 7bbb ldrb r3, [r7, #14] + 8009eee: 2b00 cmp r3, #0 + 8009ef0: d00b beq.n 8009f0a + 8009ef2: 7bbb ldrb r3, [r7, #14] + 8009ef4: 2b80 cmp r3, #128 @ 0x80 + 8009ef6: d008 beq.n 8009f0a + 8009ef8: 683b ldr r3, [r7, #0] + 8009efa: 88db ldrh r3, [r3, #6] + 8009efc: 2b00 cmp r3, #0 + 8009efe: d104 bne.n 8009f0a + 8009f00: 7bbb ldrb r3, [r7, #14] + 8009f02: 4619 mov r1, r3 + 8009f04: 6878 ldr r0, [r7, #4] + 8009f06: f001 f8c5 bl 800b094 + 8009f0a: 6878 ldr r0, [r7, #4] + 8009f0c: f000 fd4c bl 800a9a8 + 8009f10: e004 b.n 8009f1c + 8009f12: 6839 ldr r1, [r7, #0] + 8009f14: 6878 ldr r0, [r7, #4] + 8009f16: f000 fc8a bl 800a82e + 8009f1a: bf00 nop + 8009f1c: e109 b.n 800a132 + 8009f1e: 687b ldr r3, [r7, #4] + 8009f20: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009f24: b2db uxtb r3, r3 + 8009f26: 2b02 cmp r3, #2 + 8009f28: d002 beq.n 8009f30 + 8009f2a: 2b03 cmp r3, #3 + 8009f2c: d016 beq.n 8009f5c + 8009f2e: e04b b.n 8009fc8 + 8009f30: 7bbb ldrb r3, [r7, #14] + 8009f32: 2b00 cmp r3, #0 + 8009f34: d00d beq.n 8009f52 + 8009f36: 7bbb ldrb r3, [r7, #14] + 8009f38: 2b80 cmp r3, #128 @ 0x80 + 8009f3a: d00a beq.n 8009f52 + 8009f3c: 7bbb ldrb r3, [r7, #14] + 8009f3e: 4619 mov r1, r3 + 8009f40: 6878 ldr r0, [r7, #4] + 8009f42: f001 f8a7 bl 800b094 + 8009f46: 2180 movs r1, #128 @ 0x80 + 8009f48: 6878 ldr r0, [r7, #4] + 8009f4a: f001 f8a3 bl 800b094 + 8009f4e: bf00 nop + 8009f50: e040 b.n 8009fd4 + 8009f52: 6839 ldr r1, [r7, #0] + 8009f54: 6878 ldr r0, [r7, #4] + 8009f56: f000 fc6a bl 800a82e + 8009f5a: e03b b.n 8009fd4 + 8009f5c: 683b ldr r3, [r7, #0] + 8009f5e: 885b ldrh r3, [r3, #2] + 8009f60: 2b00 cmp r3, #0 + 8009f62: d136 bne.n 8009fd2 + 8009f64: 7bbb ldrb r3, [r7, #14] + 8009f66: f003 037f and.w r3, r3, #127 @ 0x7f + 8009f6a: 2b00 cmp r3, #0 + 8009f6c: d004 beq.n 8009f78 + 8009f6e: 7bbb ldrb r3, [r7, #14] + 8009f70: 4619 mov r1, r3 + 8009f72: 6878 ldr r0, [r7, #4] + 8009f74: f001 f8ad bl 800b0d2 + 8009f78: 6878 ldr r0, [r7, #4] + 8009f7a: f000 fd15 bl 800a9a8 + 8009f7e: 7bbb ldrb r3, [r7, #14] + 8009f80: 4619 mov r1, r3 + 8009f82: 6878 ldr r0, [r7, #4] + 8009f84: f7ff fde3 bl 8009b4e + 8009f88: 4603 mov r3, r0 + 8009f8a: 737b strb r3, [r7, #13] + 8009f8c: 7b7b ldrb r3, [r7, #13] + 8009f8e: 2bff cmp r3, #255 @ 0xff + 8009f90: d01f beq.n 8009fd2 + 8009f92: 7b7b ldrb r3, [r7, #13] + 8009f94: 2b00 cmp r3, #0 + 8009f96: d11c bne.n 8009fd2 + 8009f98: 7b7a ldrb r2, [r7, #13] + 8009f9a: 687b ldr r3, [r7, #4] + 8009f9c: f8c3 22d4 str.w r2, [r3, #724] @ 0x2d4 + 8009fa0: 7b7a ldrb r2, [r7, #13] + 8009fa2: 687b ldr r3, [r7, #4] + 8009fa4: 32ae adds r2, #174 @ 0xae + 8009fa6: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009faa: 689b ldr r3, [r3, #8] + 8009fac: 2b00 cmp r3, #0 + 8009fae: d010 beq.n 8009fd2 + 8009fb0: 7b7a ldrb r2, [r7, #13] + 8009fb2: 687b ldr r3, [r7, #4] + 8009fb4: 32ae adds r2, #174 @ 0xae + 8009fb6: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8009fba: 689b ldr r3, [r3, #8] + 8009fbc: 6839 ldr r1, [r7, #0] + 8009fbe: 6878 ldr r0, [r7, #4] + 8009fc0: 4798 blx r3 + 8009fc2: 4603 mov r3, r0 + 8009fc4: 73fb strb r3, [r7, #15] + 8009fc6: e004 b.n 8009fd2 + 8009fc8: 6839 ldr r1, [r7, #0] + 8009fca: 6878 ldr r0, [r7, #4] + 8009fcc: f000 fc2f bl 800a82e + 8009fd0: e000 b.n 8009fd4 + 8009fd2: bf00 nop + 8009fd4: e0ad b.n 800a132 + 8009fd6: 687b ldr r3, [r7, #4] + 8009fd8: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 8009fdc: b2db uxtb r3, r3 + 8009fde: 2b02 cmp r3, #2 + 8009fe0: d002 beq.n 8009fe8 + 8009fe2: 2b03 cmp r3, #3 + 8009fe4: d033 beq.n 800a04e + 8009fe6: e099 b.n 800a11c + 8009fe8: 7bbb ldrb r3, [r7, #14] + 8009fea: 2b00 cmp r3, #0 + 8009fec: d007 beq.n 8009ffe + 8009fee: 7bbb ldrb r3, [r7, #14] + 8009ff0: 2b80 cmp r3, #128 @ 0x80 + 8009ff2: d004 beq.n 8009ffe + 8009ff4: 6839 ldr r1, [r7, #0] + 8009ff6: 6878 ldr r0, [r7, #4] + 8009ff8: f000 fc19 bl 800a82e + 8009ffc: e093 b.n 800a126 + 8009ffe: f997 300e ldrsb.w r3, [r7, #14] + 800a002: 2b00 cmp r3, #0 + 800a004: da0b bge.n 800a01e + 800a006: 7bbb ldrb r3, [r7, #14] + 800a008: f003 027f and.w r2, r3, #127 @ 0x7f + 800a00c: 4613 mov r3, r2 + 800a00e: 009b lsls r3, r3, #2 + 800a010: 4413 add r3, r2 + 800a012: 009b lsls r3, r3, #2 + 800a014: 3310 adds r3, #16 + 800a016: 687a ldr r2, [r7, #4] + 800a018: 4413 add r3, r2 + 800a01a: 3304 adds r3, #4 + 800a01c: e00b b.n 800a036 + 800a01e: 7bbb ldrb r3, [r7, #14] + 800a020: f003 027f and.w r2, r3, #127 @ 0x7f + 800a024: 4613 mov r3, r2 + 800a026: 009b lsls r3, r3, #2 + 800a028: 4413 add r3, r2 + 800a02a: 009b lsls r3, r3, #2 + 800a02c: f503 73a8 add.w r3, r3, #336 @ 0x150 + 800a030: 687a ldr r2, [r7, #4] + 800a032: 4413 add r3, r2 + 800a034: 3304 adds r3, #4 + 800a036: 60bb str r3, [r7, #8] + 800a038: 68bb ldr r3, [r7, #8] + 800a03a: 2200 movs r2, #0 + 800a03c: 739a strb r2, [r3, #14] + 800a03e: 68bb ldr r3, [r7, #8] + 800a040: 330e adds r3, #14 + 800a042: 2202 movs r2, #2 + 800a044: 4619 mov r1, r3 + 800a046: 6878 ldr r0, [r7, #4] + 800a048: f000 fc6e bl 800a928 + 800a04c: e06b b.n 800a126 + 800a04e: f997 300e ldrsb.w r3, [r7, #14] + 800a052: 2b00 cmp r3, #0 + 800a054: da11 bge.n 800a07a + 800a056: 7bbb ldrb r3, [r7, #14] + 800a058: f003 020f and.w r2, r3, #15 + 800a05c: 6879 ldr r1, [r7, #4] + 800a05e: 4613 mov r3, r2 + 800a060: 009b lsls r3, r3, #2 + 800a062: 4413 add r3, r2 + 800a064: 009b lsls r3, r3, #2 + 800a066: 440b add r3, r1 + 800a068: 3323 adds r3, #35 @ 0x23 + 800a06a: 781b ldrb r3, [r3, #0] + 800a06c: 2b00 cmp r3, #0 + 800a06e: d117 bne.n 800a0a0 + 800a070: 6839 ldr r1, [r7, #0] + 800a072: 6878 ldr r0, [r7, #4] + 800a074: f000 fbdb bl 800a82e + 800a078: e055 b.n 800a126 + 800a07a: 7bbb ldrb r3, [r7, #14] + 800a07c: f003 020f and.w r2, r3, #15 + 800a080: 6879 ldr r1, [r7, #4] + 800a082: 4613 mov r3, r2 + 800a084: 009b lsls r3, r3, #2 + 800a086: 4413 add r3, r2 + 800a088: 009b lsls r3, r3, #2 + 800a08a: 440b add r3, r1 + 800a08c: f203 1363 addw r3, r3, #355 @ 0x163 + 800a090: 781b ldrb r3, [r3, #0] + 800a092: 2b00 cmp r3, #0 + 800a094: d104 bne.n 800a0a0 + 800a096: 6839 ldr r1, [r7, #0] + 800a098: 6878 ldr r0, [r7, #4] + 800a09a: f000 fbc8 bl 800a82e + 800a09e: e042 b.n 800a126 + 800a0a0: f997 300e ldrsb.w r3, [r7, #14] + 800a0a4: 2b00 cmp r3, #0 + 800a0a6: da0b bge.n 800a0c0 + 800a0a8: 7bbb ldrb r3, [r7, #14] + 800a0aa: f003 027f and.w r2, r3, #127 @ 0x7f + 800a0ae: 4613 mov r3, r2 + 800a0b0: 009b lsls r3, r3, #2 + 800a0b2: 4413 add r3, r2 + 800a0b4: 009b lsls r3, r3, #2 + 800a0b6: 3310 adds r3, #16 + 800a0b8: 687a ldr r2, [r7, #4] + 800a0ba: 4413 add r3, r2 + 800a0bc: 3304 adds r3, #4 + 800a0be: e00b b.n 800a0d8 + 800a0c0: 7bbb ldrb r3, [r7, #14] + 800a0c2: f003 027f and.w r2, r3, #127 @ 0x7f + 800a0c6: 4613 mov r3, r2 + 800a0c8: 009b lsls r3, r3, #2 + 800a0ca: 4413 add r3, r2 + 800a0cc: 009b lsls r3, r3, #2 + 800a0ce: f503 73a8 add.w r3, r3, #336 @ 0x150 + 800a0d2: 687a ldr r2, [r7, #4] + 800a0d4: 4413 add r3, r2 + 800a0d6: 3304 adds r3, #4 + 800a0d8: 60bb str r3, [r7, #8] + 800a0da: 7bbb ldrb r3, [r7, #14] + 800a0dc: 2b00 cmp r3, #0 + 800a0de: d002 beq.n 800a0e6 + 800a0e0: 7bbb ldrb r3, [r7, #14] + 800a0e2: 2b80 cmp r3, #128 @ 0x80 + 800a0e4: d103 bne.n 800a0ee + 800a0e6: 68bb ldr r3, [r7, #8] + 800a0e8: 2200 movs r2, #0 + 800a0ea: 739a strb r2, [r3, #14] + 800a0ec: e00e b.n 800a10c + 800a0ee: 7bbb ldrb r3, [r7, #14] + 800a0f0: 4619 mov r1, r3 + 800a0f2: 6878 ldr r0, [r7, #4] + 800a0f4: f001 f80c bl 800b110 + 800a0f8: 4603 mov r3, r0 + 800a0fa: 2b00 cmp r3, #0 + 800a0fc: d003 beq.n 800a106 + 800a0fe: 68bb ldr r3, [r7, #8] + 800a100: 2201 movs r2, #1 + 800a102: 739a strb r2, [r3, #14] + 800a104: e002 b.n 800a10c + 800a106: 68bb ldr r3, [r7, #8] + 800a108: 2200 movs r2, #0 + 800a10a: 739a strb r2, [r3, #14] + 800a10c: 68bb ldr r3, [r7, #8] + 800a10e: 330e adds r3, #14 + 800a110: 2202 movs r2, #2 + 800a112: 4619 mov r1, r3 + 800a114: 6878 ldr r0, [r7, #4] + 800a116: f000 fc07 bl 800a928 + 800a11a: e004 b.n 800a126 + 800a11c: 6839 ldr r1, [r7, #0] + 800a11e: 6878 ldr r0, [r7, #4] + 800a120: f000 fb85 bl 800a82e + 800a124: bf00 nop + 800a126: e004 b.n 800a132 + 800a128: 6839 ldr r1, [r7, #0] + 800a12a: 6878 ldr r0, [r7, #4] + 800a12c: f000 fb7f bl 800a82e + 800a130: bf00 nop + 800a132: e005 b.n 800a140 + 800a134: 6839 ldr r1, [r7, #0] + 800a136: 6878 ldr r0, [r7, #4] + 800a138: f000 fb79 bl 800a82e + 800a13c: e000 b.n 800a140 + 800a13e: bf00 nop + 800a140: 7bfb ldrb r3, [r7, #15] + 800a142: 4618 mov r0, r3 + 800a144: 3710 adds r7, #16 + 800a146: 46bd mov sp, r7 + 800a148: bd80 pop {r7, pc} + ... + +0800a14c : + 800a14c: b580 push {r7, lr} + 800a14e: b084 sub sp, #16 + 800a150: af00 add r7, sp, #0 + 800a152: 6078 str r0, [r7, #4] + 800a154: 6039 str r1, [r7, #0] + 800a156: 2300 movs r3, #0 + 800a158: 813b strh r3, [r7, #8] + 800a15a: 2300 movs r3, #0 + 800a15c: 60fb str r3, [r7, #12] + 800a15e: 2300 movs r3, #0 + 800a160: 72fb strb r3, [r7, #11] + 800a162: 683b ldr r3, [r7, #0] + 800a164: 885b ldrh r3, [r3, #2] + 800a166: 0a1b lsrs r3, r3, #8 + 800a168: b29b uxth r3, r3 + 800a16a: 3b01 subs r3, #1 + 800a16c: 2b0e cmp r3, #14 + 800a16e: f200 8152 bhi.w 800a416 + 800a172: a201 add r2, pc, #4 @ (adr r2, 800a178 ) + 800a174: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800a178: 0800a1e9 .word 0x0800a1e9 + 800a17c: 0800a201 .word 0x0800a201 + 800a180: 0800a241 .word 0x0800a241 + 800a184: 0800a417 .word 0x0800a417 + 800a188: 0800a417 .word 0x0800a417 + 800a18c: 0800a3b7 .word 0x0800a3b7 + 800a190: 0800a3e3 .word 0x0800a3e3 + 800a194: 0800a417 .word 0x0800a417 + 800a198: 0800a417 .word 0x0800a417 + 800a19c: 0800a417 .word 0x0800a417 + 800a1a0: 0800a417 .word 0x0800a417 + 800a1a4: 0800a417 .word 0x0800a417 + 800a1a8: 0800a417 .word 0x0800a417 + 800a1ac: 0800a417 .word 0x0800a417 + 800a1b0: 0800a1b5 .word 0x0800a1b5 + 800a1b4: 687b ldr r3, [r7, #4] + 800a1b6: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a1ba: 69db ldr r3, [r3, #28] + 800a1bc: 2b00 cmp r3, #0 + 800a1be: d00b beq.n 800a1d8 + 800a1c0: 687b ldr r3, [r7, #4] + 800a1c2: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a1c6: 69db ldr r3, [r3, #28] + 800a1c8: 687a ldr r2, [r7, #4] + 800a1ca: 7c12 ldrb r2, [r2, #16] + 800a1cc: f107 0108 add.w r1, r7, #8 + 800a1d0: 4610 mov r0, r2 + 800a1d2: 4798 blx r3 + 800a1d4: 60f8 str r0, [r7, #12] + 800a1d6: e126 b.n 800a426 + 800a1d8: 6839 ldr r1, [r7, #0] + 800a1da: 6878 ldr r0, [r7, #4] + 800a1dc: f000 fb27 bl 800a82e + 800a1e0: 7afb ldrb r3, [r7, #11] + 800a1e2: 3301 adds r3, #1 + 800a1e4: 72fb strb r3, [r7, #11] + 800a1e6: e11e b.n 800a426 + 800a1e8: 687b ldr r3, [r7, #4] + 800a1ea: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a1ee: 681b ldr r3, [r3, #0] + 800a1f0: 687a ldr r2, [r7, #4] + 800a1f2: 7c12 ldrb r2, [r2, #16] + 800a1f4: f107 0108 add.w r1, r7, #8 + 800a1f8: 4610 mov r0, r2 + 800a1fa: 4798 blx r3 + 800a1fc: 60f8 str r0, [r7, #12] + 800a1fe: e112 b.n 800a426 + 800a200: 687b ldr r3, [r7, #4] + 800a202: 7c1b ldrb r3, [r3, #16] + 800a204: 2b00 cmp r3, #0 + 800a206: d10d bne.n 800a224 + 800a208: 687b ldr r3, [r7, #4] + 800a20a: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 800a20e: 6a9b ldr r3, [r3, #40] @ 0x28 + 800a210: f107 0208 add.w r2, r7, #8 + 800a214: 4610 mov r0, r2 + 800a216: 4798 blx r3 + 800a218: 60f8 str r0, [r7, #12] + 800a21a: 68fb ldr r3, [r7, #12] + 800a21c: 3301 adds r3, #1 + 800a21e: 2202 movs r2, #2 + 800a220: 701a strb r2, [r3, #0] + 800a222: e100 b.n 800a426 + 800a224: 687b ldr r3, [r7, #4] + 800a226: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 800a22a: 6adb ldr r3, [r3, #44] @ 0x2c + 800a22c: f107 0208 add.w r2, r7, #8 + 800a230: 4610 mov r0, r2 + 800a232: 4798 blx r3 + 800a234: 60f8 str r0, [r7, #12] + 800a236: 68fb ldr r3, [r7, #12] + 800a238: 3301 adds r3, #1 + 800a23a: 2202 movs r2, #2 + 800a23c: 701a strb r2, [r3, #0] + 800a23e: e0f2 b.n 800a426 + 800a240: 683b ldr r3, [r7, #0] + 800a242: 885b ldrh r3, [r3, #2] + 800a244: b2db uxtb r3, r3 + 800a246: 2b05 cmp r3, #5 + 800a248: f200 80ac bhi.w 800a3a4 + 800a24c: a201 add r2, pc, #4 @ (adr r2, 800a254 ) + 800a24e: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800a252: bf00 nop + 800a254: 0800a26d .word 0x0800a26d + 800a258: 0800a2a1 .word 0x0800a2a1 + 800a25c: 0800a2d5 .word 0x0800a2d5 + 800a260: 0800a309 .word 0x0800a309 + 800a264: 0800a33d .word 0x0800a33d + 800a268: 0800a371 .word 0x0800a371 + 800a26c: 687b ldr r3, [r7, #4] + 800a26e: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a272: 685b ldr r3, [r3, #4] + 800a274: 2b00 cmp r3, #0 + 800a276: d00b beq.n 800a290 + 800a278: 687b ldr r3, [r7, #4] + 800a27a: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a27e: 685b ldr r3, [r3, #4] + 800a280: 687a ldr r2, [r7, #4] + 800a282: 7c12 ldrb r2, [r2, #16] + 800a284: f107 0108 add.w r1, r7, #8 + 800a288: 4610 mov r0, r2 + 800a28a: 4798 blx r3 + 800a28c: 60f8 str r0, [r7, #12] + 800a28e: e091 b.n 800a3b4 + 800a290: 6839 ldr r1, [r7, #0] + 800a292: 6878 ldr r0, [r7, #4] + 800a294: f000 facb bl 800a82e + 800a298: 7afb ldrb r3, [r7, #11] + 800a29a: 3301 adds r3, #1 + 800a29c: 72fb strb r3, [r7, #11] + 800a29e: e089 b.n 800a3b4 + 800a2a0: 687b ldr r3, [r7, #4] + 800a2a2: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a2a6: 689b ldr r3, [r3, #8] + 800a2a8: 2b00 cmp r3, #0 + 800a2aa: d00b beq.n 800a2c4 + 800a2ac: 687b ldr r3, [r7, #4] + 800a2ae: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a2b2: 689b ldr r3, [r3, #8] + 800a2b4: 687a ldr r2, [r7, #4] + 800a2b6: 7c12 ldrb r2, [r2, #16] + 800a2b8: f107 0108 add.w r1, r7, #8 + 800a2bc: 4610 mov r0, r2 + 800a2be: 4798 blx r3 + 800a2c0: 60f8 str r0, [r7, #12] + 800a2c2: e077 b.n 800a3b4 + 800a2c4: 6839 ldr r1, [r7, #0] + 800a2c6: 6878 ldr r0, [r7, #4] + 800a2c8: f000 fab1 bl 800a82e + 800a2cc: 7afb ldrb r3, [r7, #11] + 800a2ce: 3301 adds r3, #1 + 800a2d0: 72fb strb r3, [r7, #11] + 800a2d2: e06f b.n 800a3b4 + 800a2d4: 687b ldr r3, [r7, #4] + 800a2d6: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a2da: 68db ldr r3, [r3, #12] + 800a2dc: 2b00 cmp r3, #0 + 800a2de: d00b beq.n 800a2f8 + 800a2e0: 687b ldr r3, [r7, #4] + 800a2e2: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a2e6: 68db ldr r3, [r3, #12] + 800a2e8: 687a ldr r2, [r7, #4] + 800a2ea: 7c12 ldrb r2, [r2, #16] + 800a2ec: f107 0108 add.w r1, r7, #8 + 800a2f0: 4610 mov r0, r2 + 800a2f2: 4798 blx r3 + 800a2f4: 60f8 str r0, [r7, #12] + 800a2f6: e05d b.n 800a3b4 + 800a2f8: 6839 ldr r1, [r7, #0] + 800a2fa: 6878 ldr r0, [r7, #4] + 800a2fc: f000 fa97 bl 800a82e + 800a300: 7afb ldrb r3, [r7, #11] + 800a302: 3301 adds r3, #1 + 800a304: 72fb strb r3, [r7, #11] + 800a306: e055 b.n 800a3b4 + 800a308: 687b ldr r3, [r7, #4] + 800a30a: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a30e: 691b ldr r3, [r3, #16] + 800a310: 2b00 cmp r3, #0 + 800a312: d00b beq.n 800a32c + 800a314: 687b ldr r3, [r7, #4] + 800a316: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a31a: 691b ldr r3, [r3, #16] + 800a31c: 687a ldr r2, [r7, #4] + 800a31e: 7c12 ldrb r2, [r2, #16] + 800a320: f107 0108 add.w r1, r7, #8 + 800a324: 4610 mov r0, r2 + 800a326: 4798 blx r3 + 800a328: 60f8 str r0, [r7, #12] + 800a32a: e043 b.n 800a3b4 + 800a32c: 6839 ldr r1, [r7, #0] + 800a32e: 6878 ldr r0, [r7, #4] + 800a330: f000 fa7d bl 800a82e + 800a334: 7afb ldrb r3, [r7, #11] + 800a336: 3301 adds r3, #1 + 800a338: 72fb strb r3, [r7, #11] + 800a33a: e03b b.n 800a3b4 + 800a33c: 687b ldr r3, [r7, #4] + 800a33e: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a342: 695b ldr r3, [r3, #20] + 800a344: 2b00 cmp r3, #0 + 800a346: d00b beq.n 800a360 + 800a348: 687b ldr r3, [r7, #4] + 800a34a: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a34e: 695b ldr r3, [r3, #20] + 800a350: 687a ldr r2, [r7, #4] + 800a352: 7c12 ldrb r2, [r2, #16] + 800a354: f107 0108 add.w r1, r7, #8 + 800a358: 4610 mov r0, r2 + 800a35a: 4798 blx r3 + 800a35c: 60f8 str r0, [r7, #12] + 800a35e: e029 b.n 800a3b4 + 800a360: 6839 ldr r1, [r7, #0] + 800a362: 6878 ldr r0, [r7, #4] + 800a364: f000 fa63 bl 800a82e + 800a368: 7afb ldrb r3, [r7, #11] + 800a36a: 3301 adds r3, #1 + 800a36c: 72fb strb r3, [r7, #11] + 800a36e: e021 b.n 800a3b4 + 800a370: 687b ldr r3, [r7, #4] + 800a372: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a376: 699b ldr r3, [r3, #24] + 800a378: 2b00 cmp r3, #0 + 800a37a: d00b beq.n 800a394 + 800a37c: 687b ldr r3, [r7, #4] + 800a37e: f8d3 32b4 ldr.w r3, [r3, #692] @ 0x2b4 + 800a382: 699b ldr r3, [r3, #24] + 800a384: 687a ldr r2, [r7, #4] + 800a386: 7c12 ldrb r2, [r2, #16] + 800a388: f107 0108 add.w r1, r7, #8 + 800a38c: 4610 mov r0, r2 + 800a38e: 4798 blx r3 + 800a390: 60f8 str r0, [r7, #12] + 800a392: e00f b.n 800a3b4 + 800a394: 6839 ldr r1, [r7, #0] + 800a396: 6878 ldr r0, [r7, #4] + 800a398: f000 fa49 bl 800a82e + 800a39c: 7afb ldrb r3, [r7, #11] + 800a39e: 3301 adds r3, #1 + 800a3a0: 72fb strb r3, [r7, #11] + 800a3a2: e007 b.n 800a3b4 + 800a3a4: 6839 ldr r1, [r7, #0] + 800a3a6: 6878 ldr r0, [r7, #4] + 800a3a8: f000 fa41 bl 800a82e + 800a3ac: 7afb ldrb r3, [r7, #11] + 800a3ae: 3301 adds r3, #1 + 800a3b0: 72fb strb r3, [r7, #11] + 800a3b2: bf00 nop + 800a3b4: e037 b.n 800a426 + 800a3b6: 687b ldr r3, [r7, #4] + 800a3b8: 7c1b ldrb r3, [r3, #16] + 800a3ba: 2b00 cmp r3, #0 + 800a3bc: d109 bne.n 800a3d2 + 800a3be: 687b ldr r3, [r7, #4] + 800a3c0: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 800a3c4: 6b5b ldr r3, [r3, #52] @ 0x34 + 800a3c6: f107 0208 add.w r2, r7, #8 + 800a3ca: 4610 mov r0, r2 + 800a3cc: 4798 blx r3 + 800a3ce: 60f8 str r0, [r7, #12] + 800a3d0: e029 b.n 800a426 + 800a3d2: 6839 ldr r1, [r7, #0] + 800a3d4: 6878 ldr r0, [r7, #4] + 800a3d6: f000 fa2a bl 800a82e + 800a3da: 7afb ldrb r3, [r7, #11] + 800a3dc: 3301 adds r3, #1 + 800a3de: 72fb strb r3, [r7, #11] + 800a3e0: e021 b.n 800a426 + 800a3e2: 687b ldr r3, [r7, #4] + 800a3e4: 7c1b ldrb r3, [r3, #16] + 800a3e6: 2b00 cmp r3, #0 + 800a3e8: d10d bne.n 800a406 + 800a3ea: 687b ldr r3, [r7, #4] + 800a3ec: f8d3 32b8 ldr.w r3, [r3, #696] @ 0x2b8 + 800a3f0: 6b1b ldr r3, [r3, #48] @ 0x30 + 800a3f2: f107 0208 add.w r2, r7, #8 + 800a3f6: 4610 mov r0, r2 + 800a3f8: 4798 blx r3 + 800a3fa: 60f8 str r0, [r7, #12] + 800a3fc: 68fb ldr r3, [r7, #12] + 800a3fe: 3301 adds r3, #1 + 800a400: 2207 movs r2, #7 + 800a402: 701a strb r2, [r3, #0] + 800a404: e00f b.n 800a426 + 800a406: 6839 ldr r1, [r7, #0] + 800a408: 6878 ldr r0, [r7, #4] + 800a40a: f000 fa10 bl 800a82e + 800a40e: 7afb ldrb r3, [r7, #11] + 800a410: 3301 adds r3, #1 + 800a412: 72fb strb r3, [r7, #11] + 800a414: e007 b.n 800a426 + 800a416: 6839 ldr r1, [r7, #0] + 800a418: 6878 ldr r0, [r7, #4] + 800a41a: f000 fa08 bl 800a82e + 800a41e: 7afb ldrb r3, [r7, #11] + 800a420: 3301 adds r3, #1 + 800a422: 72fb strb r3, [r7, #11] + 800a424: bf00 nop + 800a426: 7afb ldrb r3, [r7, #11] + 800a428: 2b00 cmp r3, #0 + 800a42a: d11e bne.n 800a46a + 800a42c: 683b ldr r3, [r7, #0] + 800a42e: 88db ldrh r3, [r3, #6] + 800a430: 2b00 cmp r3, #0 + 800a432: d016 beq.n 800a462 + 800a434: 893b ldrh r3, [r7, #8] + 800a436: 2b00 cmp r3, #0 + 800a438: d00e beq.n 800a458 + 800a43a: 683b ldr r3, [r7, #0] + 800a43c: 88da ldrh r2, [r3, #6] + 800a43e: 893b ldrh r3, [r7, #8] + 800a440: 4293 cmp r3, r2 + 800a442: bf28 it cs + 800a444: 4613 movcs r3, r2 + 800a446: b29b uxth r3, r3 + 800a448: 813b strh r3, [r7, #8] + 800a44a: 893b ldrh r3, [r7, #8] + 800a44c: 461a mov r2, r3 + 800a44e: 68f9 ldr r1, [r7, #12] + 800a450: 6878 ldr r0, [r7, #4] + 800a452: f000 fa69 bl 800a928 + 800a456: e009 b.n 800a46c + 800a458: 6839 ldr r1, [r7, #0] + 800a45a: 6878 ldr r0, [r7, #4] + 800a45c: f000 f9e7 bl 800a82e + 800a460: e004 b.n 800a46c + 800a462: 6878 ldr r0, [r7, #4] + 800a464: f000 faa0 bl 800a9a8 + 800a468: e000 b.n 800a46c + 800a46a: bf00 nop + 800a46c: 3710 adds r7, #16 + 800a46e: 46bd mov sp, r7 + 800a470: bd80 pop {r7, pc} + 800a472: bf00 nop + +0800a474 : + 800a474: b580 push {r7, lr} + 800a476: b084 sub sp, #16 + 800a478: af00 add r7, sp, #0 + 800a47a: 6078 str r0, [r7, #4] + 800a47c: 6039 str r1, [r7, #0] + 800a47e: 683b ldr r3, [r7, #0] + 800a480: 889b ldrh r3, [r3, #4] + 800a482: 2b00 cmp r3, #0 + 800a484: d131 bne.n 800a4ea + 800a486: 683b ldr r3, [r7, #0] + 800a488: 88db ldrh r3, [r3, #6] + 800a48a: 2b00 cmp r3, #0 + 800a48c: d12d bne.n 800a4ea + 800a48e: 683b ldr r3, [r7, #0] + 800a490: 885b ldrh r3, [r3, #2] + 800a492: 2b7f cmp r3, #127 @ 0x7f + 800a494: d829 bhi.n 800a4ea + 800a496: 683b ldr r3, [r7, #0] + 800a498: 885b ldrh r3, [r3, #2] + 800a49a: b2db uxtb r3, r3 + 800a49c: f003 037f and.w r3, r3, #127 @ 0x7f + 800a4a0: 73fb strb r3, [r7, #15] + 800a4a2: 687b ldr r3, [r7, #4] + 800a4a4: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800a4a8: b2db uxtb r3, r3 + 800a4aa: 2b03 cmp r3, #3 + 800a4ac: d104 bne.n 800a4b8 + 800a4ae: 6839 ldr r1, [r7, #0] + 800a4b0: 6878 ldr r0, [r7, #4] + 800a4b2: f000 f9bc bl 800a82e + 800a4b6: e01d b.n 800a4f4 + 800a4b8: 687b ldr r3, [r7, #4] + 800a4ba: 7bfa ldrb r2, [r7, #15] + 800a4bc: f883 229e strb.w r2, [r3, #670] @ 0x29e + 800a4c0: 7bfb ldrb r3, [r7, #15] + 800a4c2: 4619 mov r1, r3 + 800a4c4: 6878 ldr r0, [r7, #4] + 800a4c6: f000 fe4f bl 800b168 + 800a4ca: 6878 ldr r0, [r7, #4] + 800a4cc: f000 fa6c bl 800a9a8 + 800a4d0: 7bfb ldrb r3, [r7, #15] + 800a4d2: 2b00 cmp r3, #0 + 800a4d4: d004 beq.n 800a4e0 + 800a4d6: 687b ldr r3, [r7, #4] + 800a4d8: 2202 movs r2, #2 + 800a4da: f883 229c strb.w r2, [r3, #668] @ 0x29c + 800a4de: e009 b.n 800a4f4 + 800a4e0: 687b ldr r3, [r7, #4] + 800a4e2: 2201 movs r2, #1 + 800a4e4: f883 229c strb.w r2, [r3, #668] @ 0x29c + 800a4e8: e004 b.n 800a4f4 + 800a4ea: 6839 ldr r1, [r7, #0] + 800a4ec: 6878 ldr r0, [r7, #4] + 800a4ee: f000 f99e bl 800a82e + 800a4f2: bf00 nop + 800a4f4: bf00 nop + 800a4f6: 3710 adds r7, #16 + 800a4f8: 46bd mov sp, r7 + 800a4fa: bd80 pop {r7, pc} + +0800a4fc : + 800a4fc: b580 push {r7, lr} + 800a4fe: b084 sub sp, #16 + 800a500: af00 add r7, sp, #0 + 800a502: 6078 str r0, [r7, #4] + 800a504: 6039 str r1, [r7, #0] + 800a506: 2300 movs r3, #0 + 800a508: 73fb strb r3, [r7, #15] + 800a50a: 683b ldr r3, [r7, #0] + 800a50c: 885b ldrh r3, [r3, #2] + 800a50e: b2da uxtb r2, r3 + 800a510: 4b4e ldr r3, [pc, #312] @ (800a64c ) + 800a512: 701a strb r2, [r3, #0] + 800a514: 4b4d ldr r3, [pc, #308] @ (800a64c ) + 800a516: 781b ldrb r3, [r3, #0] + 800a518: 2b01 cmp r3, #1 + 800a51a: d905 bls.n 800a528 + 800a51c: 6839 ldr r1, [r7, #0] + 800a51e: 6878 ldr r0, [r7, #4] + 800a520: f000 f985 bl 800a82e + 800a524: 2303 movs r3, #3 + 800a526: e08c b.n 800a642 + 800a528: 687b ldr r3, [r7, #4] + 800a52a: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800a52e: b2db uxtb r3, r3 + 800a530: 2b02 cmp r3, #2 + 800a532: d002 beq.n 800a53a + 800a534: 2b03 cmp r3, #3 + 800a536: d029 beq.n 800a58c + 800a538: e075 b.n 800a626 + 800a53a: 4b44 ldr r3, [pc, #272] @ (800a64c ) + 800a53c: 781b ldrb r3, [r3, #0] + 800a53e: 2b00 cmp r3, #0 + 800a540: d020 beq.n 800a584 + 800a542: 4b42 ldr r3, [pc, #264] @ (800a64c ) + 800a544: 781b ldrb r3, [r3, #0] + 800a546: 461a mov r2, r3 + 800a548: 687b ldr r3, [r7, #4] + 800a54a: 605a str r2, [r3, #4] + 800a54c: 4b3f ldr r3, [pc, #252] @ (800a64c ) + 800a54e: 781b ldrb r3, [r3, #0] + 800a550: 4619 mov r1, r3 + 800a552: 6878 ldr r0, [r7, #4] + 800a554: f7fe ffa3 bl 800949e + 800a558: 4603 mov r3, r0 + 800a55a: 73fb strb r3, [r7, #15] + 800a55c: 7bfb ldrb r3, [r7, #15] + 800a55e: 2b00 cmp r3, #0 + 800a560: d008 beq.n 800a574 + 800a562: 6839 ldr r1, [r7, #0] + 800a564: 6878 ldr r0, [r7, #4] + 800a566: f000 f962 bl 800a82e + 800a56a: 687b ldr r3, [r7, #4] + 800a56c: 2202 movs r2, #2 + 800a56e: f883 229c strb.w r2, [r3, #668] @ 0x29c + 800a572: e065 b.n 800a640 + 800a574: 6878 ldr r0, [r7, #4] + 800a576: f000 fa17 bl 800a9a8 + 800a57a: 687b ldr r3, [r7, #4] + 800a57c: 2203 movs r2, #3 + 800a57e: f883 229c strb.w r2, [r3, #668] @ 0x29c + 800a582: e05d b.n 800a640 + 800a584: 6878 ldr r0, [r7, #4] + 800a586: f000 fa0f bl 800a9a8 + 800a58a: e059 b.n 800a640 + 800a58c: 4b2f ldr r3, [pc, #188] @ (800a64c ) + 800a58e: 781b ldrb r3, [r3, #0] + 800a590: 2b00 cmp r3, #0 + 800a592: d112 bne.n 800a5ba + 800a594: 687b ldr r3, [r7, #4] + 800a596: 2202 movs r2, #2 + 800a598: f883 229c strb.w r2, [r3, #668] @ 0x29c + 800a59c: 4b2b ldr r3, [pc, #172] @ (800a64c ) + 800a59e: 781b ldrb r3, [r3, #0] + 800a5a0: 461a mov r2, r3 + 800a5a2: 687b ldr r3, [r7, #4] + 800a5a4: 605a str r2, [r3, #4] + 800a5a6: 4b29 ldr r3, [pc, #164] @ (800a64c ) + 800a5a8: 781b ldrb r3, [r3, #0] + 800a5aa: 4619 mov r1, r3 + 800a5ac: 6878 ldr r0, [r7, #4] + 800a5ae: f7fe ff92 bl 80094d6 + 800a5b2: 6878 ldr r0, [r7, #4] + 800a5b4: f000 f9f8 bl 800a9a8 + 800a5b8: e042 b.n 800a640 + 800a5ba: 4b24 ldr r3, [pc, #144] @ (800a64c ) + 800a5bc: 781b ldrb r3, [r3, #0] + 800a5be: 461a mov r2, r3 + 800a5c0: 687b ldr r3, [r7, #4] + 800a5c2: 685b ldr r3, [r3, #4] + 800a5c4: 429a cmp r2, r3 + 800a5c6: d02a beq.n 800a61e + 800a5c8: 687b ldr r3, [r7, #4] + 800a5ca: 685b ldr r3, [r3, #4] + 800a5cc: b2db uxtb r3, r3 + 800a5ce: 4619 mov r1, r3 + 800a5d0: 6878 ldr r0, [r7, #4] + 800a5d2: f7fe ff80 bl 80094d6 + 800a5d6: 4b1d ldr r3, [pc, #116] @ (800a64c ) + 800a5d8: 781b ldrb r3, [r3, #0] + 800a5da: 461a mov r2, r3 + 800a5dc: 687b ldr r3, [r7, #4] + 800a5de: 605a str r2, [r3, #4] + 800a5e0: 4b1a ldr r3, [pc, #104] @ (800a64c ) + 800a5e2: 781b ldrb r3, [r3, #0] + 800a5e4: 4619 mov r1, r3 + 800a5e6: 6878 ldr r0, [r7, #4] + 800a5e8: f7fe ff59 bl 800949e + 800a5ec: 4603 mov r3, r0 + 800a5ee: 73fb strb r3, [r7, #15] + 800a5f0: 7bfb ldrb r3, [r7, #15] + 800a5f2: 2b00 cmp r3, #0 + 800a5f4: d00f beq.n 800a616 + 800a5f6: 6839 ldr r1, [r7, #0] + 800a5f8: 6878 ldr r0, [r7, #4] + 800a5fa: f000 f918 bl 800a82e + 800a5fe: 687b ldr r3, [r7, #4] + 800a600: 685b ldr r3, [r3, #4] + 800a602: b2db uxtb r3, r3 + 800a604: 4619 mov r1, r3 + 800a606: 6878 ldr r0, [r7, #4] + 800a608: f7fe ff65 bl 80094d6 + 800a60c: 687b ldr r3, [r7, #4] + 800a60e: 2202 movs r2, #2 + 800a610: f883 229c strb.w r2, [r3, #668] @ 0x29c + 800a614: e014 b.n 800a640 + 800a616: 6878 ldr r0, [r7, #4] + 800a618: f000 f9c6 bl 800a9a8 + 800a61c: e010 b.n 800a640 + 800a61e: 6878 ldr r0, [r7, #4] + 800a620: f000 f9c2 bl 800a9a8 + 800a624: e00c b.n 800a640 + 800a626: 6839 ldr r1, [r7, #0] + 800a628: 6878 ldr r0, [r7, #4] + 800a62a: f000 f900 bl 800a82e + 800a62e: 4b07 ldr r3, [pc, #28] @ (800a64c ) + 800a630: 781b ldrb r3, [r3, #0] + 800a632: 4619 mov r1, r3 + 800a634: 6878 ldr r0, [r7, #4] + 800a636: f7fe ff4e bl 80094d6 + 800a63a: 2303 movs r3, #3 + 800a63c: 73fb strb r3, [r7, #15] + 800a63e: bf00 nop + 800a640: 7bfb ldrb r3, [r7, #15] + 800a642: 4618 mov r0, r3 + 800a644: 3710 adds r7, #16 + 800a646: 46bd mov sp, r7 + 800a648: bd80 pop {r7, pc} + 800a64a: bf00 nop + 800a64c: 20000d84 .word 0x20000d84 + +0800a650 : + 800a650: b580 push {r7, lr} + 800a652: b082 sub sp, #8 + 800a654: af00 add r7, sp, #0 + 800a656: 6078 str r0, [r7, #4] + 800a658: 6039 str r1, [r7, #0] + 800a65a: 683b ldr r3, [r7, #0] + 800a65c: 88db ldrh r3, [r3, #6] + 800a65e: 2b01 cmp r3, #1 + 800a660: d004 beq.n 800a66c + 800a662: 6839 ldr r1, [r7, #0] + 800a664: 6878 ldr r0, [r7, #4] + 800a666: f000 f8e2 bl 800a82e + 800a66a: e023 b.n 800a6b4 + 800a66c: 687b ldr r3, [r7, #4] + 800a66e: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800a672: b2db uxtb r3, r3 + 800a674: 2b02 cmp r3, #2 + 800a676: dc02 bgt.n 800a67e + 800a678: 2b00 cmp r3, #0 + 800a67a: dc03 bgt.n 800a684 + 800a67c: e015 b.n 800a6aa + 800a67e: 2b03 cmp r3, #3 + 800a680: d00b beq.n 800a69a + 800a682: e012 b.n 800a6aa + 800a684: 687b ldr r3, [r7, #4] + 800a686: 2200 movs r2, #0 + 800a688: 609a str r2, [r3, #8] + 800a68a: 687b ldr r3, [r7, #4] + 800a68c: 3308 adds r3, #8 + 800a68e: 2201 movs r2, #1 + 800a690: 4619 mov r1, r3 + 800a692: 6878 ldr r0, [r7, #4] + 800a694: f000 f948 bl 800a928 + 800a698: e00c b.n 800a6b4 + 800a69a: 687b ldr r3, [r7, #4] + 800a69c: 3304 adds r3, #4 + 800a69e: 2201 movs r2, #1 + 800a6a0: 4619 mov r1, r3 + 800a6a2: 6878 ldr r0, [r7, #4] + 800a6a4: f000 f940 bl 800a928 + 800a6a8: e004 b.n 800a6b4 + 800a6aa: 6839 ldr r1, [r7, #0] + 800a6ac: 6878 ldr r0, [r7, #4] + 800a6ae: f000 f8be bl 800a82e + 800a6b2: bf00 nop + 800a6b4: bf00 nop + 800a6b6: 3708 adds r7, #8 + 800a6b8: 46bd mov sp, r7 + 800a6ba: bd80 pop {r7, pc} + +0800a6bc : + 800a6bc: b580 push {r7, lr} + 800a6be: b082 sub sp, #8 + 800a6c0: af00 add r7, sp, #0 + 800a6c2: 6078 str r0, [r7, #4] + 800a6c4: 6039 str r1, [r7, #0] + 800a6c6: 687b ldr r3, [r7, #4] + 800a6c8: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800a6cc: b2db uxtb r3, r3 + 800a6ce: 3b01 subs r3, #1 + 800a6d0: 2b02 cmp r3, #2 + 800a6d2: d81e bhi.n 800a712 + 800a6d4: 683b ldr r3, [r7, #0] + 800a6d6: 88db ldrh r3, [r3, #6] + 800a6d8: 2b02 cmp r3, #2 + 800a6da: d004 beq.n 800a6e6 + 800a6dc: 6839 ldr r1, [r7, #0] + 800a6de: 6878 ldr r0, [r7, #4] + 800a6e0: f000 f8a5 bl 800a82e + 800a6e4: e01a b.n 800a71c + 800a6e6: 687b ldr r3, [r7, #4] + 800a6e8: 2201 movs r2, #1 + 800a6ea: 60da str r2, [r3, #12] + 800a6ec: 687b ldr r3, [r7, #4] + 800a6ee: f8d3 32a4 ldr.w r3, [r3, #676] @ 0x2a4 + 800a6f2: 2b00 cmp r3, #0 + 800a6f4: d005 beq.n 800a702 + 800a6f6: 687b ldr r3, [r7, #4] + 800a6f8: 68db ldr r3, [r3, #12] + 800a6fa: f043 0202 orr.w r2, r3, #2 + 800a6fe: 687b ldr r3, [r7, #4] + 800a700: 60da str r2, [r3, #12] + 800a702: 687b ldr r3, [r7, #4] + 800a704: 330c adds r3, #12 + 800a706: 2202 movs r2, #2 + 800a708: 4619 mov r1, r3 + 800a70a: 6878 ldr r0, [r7, #4] + 800a70c: f000 f90c bl 800a928 + 800a710: e004 b.n 800a71c + 800a712: 6839 ldr r1, [r7, #0] + 800a714: 6878 ldr r0, [r7, #4] + 800a716: f000 f88a bl 800a82e + 800a71a: bf00 nop + 800a71c: bf00 nop + 800a71e: 3708 adds r7, #8 + 800a720: 46bd mov sp, r7 + 800a722: bd80 pop {r7, pc} + +0800a724 : + 800a724: b580 push {r7, lr} + 800a726: b082 sub sp, #8 + 800a728: af00 add r7, sp, #0 + 800a72a: 6078 str r0, [r7, #4] + 800a72c: 6039 str r1, [r7, #0] + 800a72e: 683b ldr r3, [r7, #0] + 800a730: 885b ldrh r3, [r3, #2] + 800a732: 2b01 cmp r3, #1 + 800a734: d107 bne.n 800a746 + 800a736: 687b ldr r3, [r7, #4] + 800a738: 2201 movs r2, #1 + 800a73a: f8c3 22a4 str.w r2, [r3, #676] @ 0x2a4 + 800a73e: 6878 ldr r0, [r7, #4] + 800a740: f000 f932 bl 800a9a8 + 800a744: e013 b.n 800a76e + 800a746: 683b ldr r3, [r7, #0] + 800a748: 885b ldrh r3, [r3, #2] + 800a74a: 2b02 cmp r3, #2 + 800a74c: d10b bne.n 800a766 + 800a74e: 683b ldr r3, [r7, #0] + 800a750: 889b ldrh r3, [r3, #4] + 800a752: 0a1b lsrs r3, r3, #8 + 800a754: b29b uxth r3, r3 + 800a756: b2da uxtb r2, r3 + 800a758: 687b ldr r3, [r7, #4] + 800a75a: f883 22a0 strb.w r2, [r3, #672] @ 0x2a0 + 800a75e: 6878 ldr r0, [r7, #4] + 800a760: f000 f922 bl 800a9a8 + 800a764: e003 b.n 800a76e + 800a766: 6839 ldr r1, [r7, #0] + 800a768: 6878 ldr r0, [r7, #4] + 800a76a: f000 f860 bl 800a82e + 800a76e: bf00 nop + 800a770: 3708 adds r7, #8 + 800a772: 46bd mov sp, r7 + 800a774: bd80 pop {r7, pc} + +0800a776 : + 800a776: b580 push {r7, lr} + 800a778: b082 sub sp, #8 + 800a77a: af00 add r7, sp, #0 + 800a77c: 6078 str r0, [r7, #4] + 800a77e: 6039 str r1, [r7, #0] + 800a780: 687b ldr r3, [r7, #4] + 800a782: f893 329c ldrb.w r3, [r3, #668] @ 0x29c + 800a786: b2db uxtb r3, r3 + 800a788: 3b01 subs r3, #1 + 800a78a: 2b02 cmp r3, #2 + 800a78c: d80b bhi.n 800a7a6 + 800a78e: 683b ldr r3, [r7, #0] + 800a790: 885b ldrh r3, [r3, #2] + 800a792: 2b01 cmp r3, #1 + 800a794: d10c bne.n 800a7b0 + 800a796: 687b ldr r3, [r7, #4] + 800a798: 2200 movs r2, #0 + 800a79a: f8c3 22a4 str.w r2, [r3, #676] @ 0x2a4 + 800a79e: 6878 ldr r0, [r7, #4] + 800a7a0: f000 f902 bl 800a9a8 + 800a7a4: e004 b.n 800a7b0 + 800a7a6: 6839 ldr r1, [r7, #0] + 800a7a8: 6878 ldr r0, [r7, #4] + 800a7aa: f000 f840 bl 800a82e + 800a7ae: e000 b.n 800a7b2 + 800a7b0: bf00 nop + 800a7b2: bf00 nop + 800a7b4: 3708 adds r7, #8 + 800a7b6: 46bd mov sp, r7 + 800a7b8: bd80 pop {r7, pc} + +0800a7ba : + 800a7ba: b580 push {r7, lr} + 800a7bc: b084 sub sp, #16 + 800a7be: af00 add r7, sp, #0 + 800a7c0: 6078 str r0, [r7, #4] + 800a7c2: 6039 str r1, [r7, #0] + 800a7c4: 683b ldr r3, [r7, #0] + 800a7c6: 60fb str r3, [r7, #12] + 800a7c8: 68fb ldr r3, [r7, #12] + 800a7ca: 781a ldrb r2, [r3, #0] + 800a7cc: 687b ldr r3, [r7, #4] + 800a7ce: 701a strb r2, [r3, #0] + 800a7d0: 68fb ldr r3, [r7, #12] + 800a7d2: 3301 adds r3, #1 + 800a7d4: 60fb str r3, [r7, #12] + 800a7d6: 68fb ldr r3, [r7, #12] + 800a7d8: 781a ldrb r2, [r3, #0] + 800a7da: 687b ldr r3, [r7, #4] + 800a7dc: 705a strb r2, [r3, #1] + 800a7de: 68fb ldr r3, [r7, #12] + 800a7e0: 3301 adds r3, #1 + 800a7e2: 60fb str r3, [r7, #12] + 800a7e4: 68f8 ldr r0, [r7, #12] + 800a7e6: f7ff fa13 bl 8009c10 + 800a7ea: 4603 mov r3, r0 + 800a7ec: 461a mov r2, r3 + 800a7ee: 687b ldr r3, [r7, #4] + 800a7f0: 805a strh r2, [r3, #2] + 800a7f2: 68fb ldr r3, [r7, #12] + 800a7f4: 3301 adds r3, #1 + 800a7f6: 60fb str r3, [r7, #12] + 800a7f8: 68fb ldr r3, [r7, #12] + 800a7fa: 3301 adds r3, #1 + 800a7fc: 60fb str r3, [r7, #12] + 800a7fe: 68f8 ldr r0, [r7, #12] + 800a800: f7ff fa06 bl 8009c10 + 800a804: 4603 mov r3, r0 + 800a806: 461a mov r2, r3 + 800a808: 687b ldr r3, [r7, #4] + 800a80a: 809a strh r2, [r3, #4] + 800a80c: 68fb ldr r3, [r7, #12] + 800a80e: 3301 adds r3, #1 + 800a810: 60fb str r3, [r7, #12] + 800a812: 68fb ldr r3, [r7, #12] + 800a814: 3301 adds r3, #1 + 800a816: 60fb str r3, [r7, #12] + 800a818: 68f8 ldr r0, [r7, #12] + 800a81a: f7ff f9f9 bl 8009c10 + 800a81e: 4603 mov r3, r0 + 800a820: 461a mov r2, r3 + 800a822: 687b ldr r3, [r7, #4] + 800a824: 80da strh r2, [r3, #6] + 800a826: bf00 nop + 800a828: 3710 adds r7, #16 + 800a82a: 46bd mov sp, r7 + 800a82c: bd80 pop {r7, pc} + +0800a82e : + 800a82e: b580 push {r7, lr} + 800a830: b082 sub sp, #8 + 800a832: af00 add r7, sp, #0 + 800a834: 6078 str r0, [r7, #4] + 800a836: 6039 str r1, [r7, #0] + 800a838: 2180 movs r1, #128 @ 0x80 + 800a83a: 6878 ldr r0, [r7, #4] + 800a83c: f000 fc2a bl 800b094 + 800a840: 2100 movs r1, #0 + 800a842: 6878 ldr r0, [r7, #4] + 800a844: f000 fc26 bl 800b094 + 800a848: bf00 nop + 800a84a: 3708 adds r7, #8 + 800a84c: 46bd mov sp, r7 + 800a84e: bd80 pop {r7, pc} + +0800a850 : + 800a850: b580 push {r7, lr} + 800a852: b086 sub sp, #24 + 800a854: af00 add r7, sp, #0 + 800a856: 60f8 str r0, [r7, #12] + 800a858: 60b9 str r1, [r7, #8] + 800a85a: 607a str r2, [r7, #4] + 800a85c: 2300 movs r3, #0 + 800a85e: 75fb strb r3, [r7, #23] + 800a860: 68fb ldr r3, [r7, #12] + 800a862: 2b00 cmp r3, #0 + 800a864: d042 beq.n 800a8ec + 800a866: 68fb ldr r3, [r7, #12] + 800a868: 613b str r3, [r7, #16] + 800a86a: 6938 ldr r0, [r7, #16] + 800a86c: f000 f842 bl 800a8f4 + 800a870: 4603 mov r3, r0 + 800a872: 3301 adds r3, #1 + 800a874: 005b lsls r3, r3, #1 + 800a876: f5b3 7f00 cmp.w r3, #512 @ 0x200 + 800a87a: d808 bhi.n 800a88e + 800a87c: 6938 ldr r0, [r7, #16] + 800a87e: f000 f839 bl 800a8f4 + 800a882: 4603 mov r3, r0 + 800a884: 3301 adds r3, #1 + 800a886: b29b uxth r3, r3 + 800a888: 005b lsls r3, r3, #1 + 800a88a: b29a uxth r2, r3 + 800a88c: e001 b.n 800a892 + 800a88e: f44f 7200 mov.w r2, #512 @ 0x200 + 800a892: 687b ldr r3, [r7, #4] + 800a894: 801a strh r2, [r3, #0] + 800a896: 7dfb ldrb r3, [r7, #23] + 800a898: 68ba ldr r2, [r7, #8] + 800a89a: 4413 add r3, r2 + 800a89c: 687a ldr r2, [r7, #4] + 800a89e: 7812 ldrb r2, [r2, #0] + 800a8a0: 701a strb r2, [r3, #0] + 800a8a2: 7dfb ldrb r3, [r7, #23] + 800a8a4: 3301 adds r3, #1 + 800a8a6: 75fb strb r3, [r7, #23] + 800a8a8: 7dfb ldrb r3, [r7, #23] + 800a8aa: 68ba ldr r2, [r7, #8] + 800a8ac: 4413 add r3, r2 + 800a8ae: 2203 movs r2, #3 + 800a8b0: 701a strb r2, [r3, #0] + 800a8b2: 7dfb ldrb r3, [r7, #23] + 800a8b4: 3301 adds r3, #1 + 800a8b6: 75fb strb r3, [r7, #23] + 800a8b8: e013 b.n 800a8e2 + 800a8ba: 7dfb ldrb r3, [r7, #23] + 800a8bc: 68ba ldr r2, [r7, #8] + 800a8be: 4413 add r3, r2 + 800a8c0: 693a ldr r2, [r7, #16] + 800a8c2: 7812 ldrb r2, [r2, #0] + 800a8c4: 701a strb r2, [r3, #0] + 800a8c6: 693b ldr r3, [r7, #16] + 800a8c8: 3301 adds r3, #1 + 800a8ca: 613b str r3, [r7, #16] + 800a8cc: 7dfb ldrb r3, [r7, #23] + 800a8ce: 3301 adds r3, #1 + 800a8d0: 75fb strb r3, [r7, #23] + 800a8d2: 7dfb ldrb r3, [r7, #23] + 800a8d4: 68ba ldr r2, [r7, #8] + 800a8d6: 4413 add r3, r2 + 800a8d8: 2200 movs r2, #0 + 800a8da: 701a strb r2, [r3, #0] + 800a8dc: 7dfb ldrb r3, [r7, #23] + 800a8de: 3301 adds r3, #1 + 800a8e0: 75fb strb r3, [r7, #23] + 800a8e2: 693b ldr r3, [r7, #16] + 800a8e4: 781b ldrb r3, [r3, #0] + 800a8e6: 2b00 cmp r3, #0 + 800a8e8: d1e7 bne.n 800a8ba + 800a8ea: e000 b.n 800a8ee + 800a8ec: bf00 nop + 800a8ee: 3718 adds r7, #24 + 800a8f0: 46bd mov sp, r7 + 800a8f2: bd80 pop {r7, pc} + +0800a8f4 : + 800a8f4: b480 push {r7} + 800a8f6: b085 sub sp, #20 + 800a8f8: af00 add r7, sp, #0 + 800a8fa: 6078 str r0, [r7, #4] + 800a8fc: 2300 movs r3, #0 + 800a8fe: 73fb strb r3, [r7, #15] + 800a900: 687b ldr r3, [r7, #4] + 800a902: 60bb str r3, [r7, #8] + 800a904: e005 b.n 800a912 + 800a906: 7bfb ldrb r3, [r7, #15] + 800a908: 3301 adds r3, #1 + 800a90a: 73fb strb r3, [r7, #15] + 800a90c: 68bb ldr r3, [r7, #8] + 800a90e: 3301 adds r3, #1 + 800a910: 60bb str r3, [r7, #8] + 800a912: 68bb ldr r3, [r7, #8] + 800a914: 781b ldrb r3, [r3, #0] + 800a916: 2b00 cmp r3, #0 + 800a918: d1f5 bne.n 800a906 + 800a91a: 7bfb ldrb r3, [r7, #15] + 800a91c: 4618 mov r0, r3 + 800a91e: 3714 adds r7, #20 + 800a920: 46bd mov sp, r7 + 800a922: f85d 7b04 ldr.w r7, [sp], #4 + 800a926: 4770 bx lr + +0800a928 : + 800a928: b580 push {r7, lr} + 800a92a: b084 sub sp, #16 + 800a92c: af00 add r7, sp, #0 + 800a92e: 60f8 str r0, [r7, #12] + 800a930: 60b9 str r1, [r7, #8] + 800a932: 607a str r2, [r7, #4] + 800a934: 68fb ldr r3, [r7, #12] + 800a936: 2202 movs r2, #2 + 800a938: f8c3 2294 str.w r2, [r3, #660] @ 0x294 + 800a93c: 68fb ldr r3, [r7, #12] + 800a93e: 687a ldr r2, [r7, #4] + 800a940: 615a str r2, [r3, #20] + 800a942: 68fb ldr r3, [r7, #12] + 800a944: 68ba ldr r2, [r7, #8] + 800a946: 625a str r2, [r3, #36] @ 0x24 + 800a948: 68fb ldr r3, [r7, #12] + 800a94a: 687a ldr r2, [r7, #4] + 800a94c: 619a str r2, [r3, #24] + 800a94e: 687b ldr r3, [r7, #4] + 800a950: 68ba ldr r2, [r7, #8] + 800a952: 2100 movs r1, #0 + 800a954: 68f8 ldr r0, [r7, #12] + 800a956: f000 fc26 bl 800b1a6 + 800a95a: 2300 movs r3, #0 + 800a95c: 4618 mov r0, r3 + 800a95e: 3710 adds r7, #16 + 800a960: 46bd mov sp, r7 + 800a962: bd80 pop {r7, pc} + +0800a964 : + 800a964: b580 push {r7, lr} + 800a966: b084 sub sp, #16 + 800a968: af00 add r7, sp, #0 + 800a96a: 60f8 str r0, [r7, #12] + 800a96c: 60b9 str r1, [r7, #8] + 800a96e: 607a str r2, [r7, #4] + 800a970: 687b ldr r3, [r7, #4] + 800a972: 68ba ldr r2, [r7, #8] + 800a974: 2100 movs r1, #0 + 800a976: 68f8 ldr r0, [r7, #12] + 800a978: f000 fc15 bl 800b1a6 + 800a97c: 2300 movs r3, #0 + 800a97e: 4618 mov r0, r3 + 800a980: 3710 adds r7, #16 + 800a982: 46bd mov sp, r7 + 800a984: bd80 pop {r7, pc} + +0800a986 : + 800a986: b580 push {r7, lr} + 800a988: b084 sub sp, #16 + 800a98a: af00 add r7, sp, #0 + 800a98c: 60f8 str r0, [r7, #12] + 800a98e: 60b9 str r1, [r7, #8] + 800a990: 607a str r2, [r7, #4] + 800a992: 687b ldr r3, [r7, #4] + 800a994: 68ba ldr r2, [r7, #8] + 800a996: 2100 movs r1, #0 + 800a998: 68f8 ldr r0, [r7, #12] + 800a99a: f000 fc25 bl 800b1e8 + 800a99e: 2300 movs r3, #0 + 800a9a0: 4618 mov r0, r3 + 800a9a2: 3710 adds r7, #16 + 800a9a4: 46bd mov sp, r7 + 800a9a6: bd80 pop {r7, pc} + +0800a9a8 : + 800a9a8: b580 push {r7, lr} + 800a9aa: b082 sub sp, #8 + 800a9ac: af00 add r7, sp, #0 + 800a9ae: 6078 str r0, [r7, #4] + 800a9b0: 687b ldr r3, [r7, #4] + 800a9b2: 2204 movs r2, #4 + 800a9b4: f8c3 2294 str.w r2, [r3, #660] @ 0x294 + 800a9b8: 2300 movs r3, #0 + 800a9ba: 2200 movs r2, #0 + 800a9bc: 2100 movs r1, #0 + 800a9be: 6878 ldr r0, [r7, #4] + 800a9c0: f000 fbf1 bl 800b1a6 + 800a9c4: 2300 movs r3, #0 + 800a9c6: 4618 mov r0, r3 + 800a9c8: 3708 adds r7, #8 + 800a9ca: 46bd mov sp, r7 + 800a9cc: bd80 pop {r7, pc} + +0800a9ce : + 800a9ce: b580 push {r7, lr} + 800a9d0: b082 sub sp, #8 + 800a9d2: af00 add r7, sp, #0 + 800a9d4: 6078 str r0, [r7, #4] + 800a9d6: 687b ldr r3, [r7, #4] + 800a9d8: 2205 movs r2, #5 + 800a9da: f8c3 2294 str.w r2, [r3, #660] @ 0x294 + 800a9de: 2300 movs r3, #0 + 800a9e0: 2200 movs r2, #0 + 800a9e2: 2100 movs r1, #0 + 800a9e4: 6878 ldr r0, [r7, #4] + 800a9e6: f000 fbff bl 800b1e8 + 800a9ea: 2300 movs r3, #0 + 800a9ec: 4618 mov r0, r3 + 800a9ee: 3708 adds r7, #8 + 800a9f0: 46bd mov sp, r7 + 800a9f2: bd80 pop {r7, pc} + +0800a9f4 : + 800a9f4: b580 push {r7, lr} + 800a9f6: af00 add r7, sp, #0 + 800a9f8: 2200 movs r2, #0 + 800a9fa: 490e ldr r1, [pc, #56] @ (800aa34 ) + 800a9fc: 480e ldr r0, [pc, #56] @ (800aa38 ) + 800a9fe: f7fe fcd1 bl 80093a4 + 800aa02: 4603 mov r3, r0 + 800aa04: 2b00 cmp r3, #0 + 800aa06: d001 beq.n 800aa0c + 800aa08: f7f6 fc1e bl 8001248 + 800aa0c: 490b ldr r1, [pc, #44] @ (800aa3c ) + 800aa0e: 480a ldr r0, [pc, #40] @ (800aa38 ) + 800aa10: f7fe fcf8 bl 8009404 + 800aa14: 4603 mov r3, r0 + 800aa16: 2b00 cmp r3, #0 + 800aa18: d001 beq.n 800aa1e + 800aa1a: f7f6 fc15 bl 8001248 + 800aa1e: 4806 ldr r0, [pc, #24] @ (800aa38 ) + 800aa20: f7fe fd26 bl 8009470 + 800aa24: 4603 mov r3, r0 + 800aa26: 2b00 cmp r3, #0 + 800aa28: d001 beq.n 800aa2e + 800aa2a: f7f6 fc0d bl 8001248 + 800aa2e: bf00 nop + 800aa30: bd80 pop {r7, pc} + 800aa32: bf00 nop + 800aa34: 20000140 .word 0x20000140 + 800aa38: 20000d88 .word 0x20000d88 + 800aa3c: 2000009c .word 0x2000009c + +0800aa40 : + 800aa40: b480 push {r7} + 800aa42: b083 sub sp, #12 + 800aa44: af00 add r7, sp, #0 + 800aa46: 4603 mov r3, r0 + 800aa48: 6039 str r1, [r7, #0] + 800aa4a: 71fb strb r3, [r7, #7] + 800aa4c: 683b ldr r3, [r7, #0] + 800aa4e: 2212 movs r2, #18 + 800aa50: 801a strh r2, [r3, #0] + 800aa52: 4b03 ldr r3, [pc, #12] @ (800aa60 ) + 800aa54: 4618 mov r0, r3 + 800aa56: 370c adds r7, #12 + 800aa58: 46bd mov sp, r7 + 800aa5a: f85d 7b04 ldr.w r7, [sp], #4 + 800aa5e: 4770 bx lr + 800aa60: 20000160 .word 0x20000160 + +0800aa64 : + 800aa64: b480 push {r7} + 800aa66: b083 sub sp, #12 + 800aa68: af00 add r7, sp, #0 + 800aa6a: 4603 mov r3, r0 + 800aa6c: 6039 str r1, [r7, #0] + 800aa6e: 71fb strb r3, [r7, #7] + 800aa70: 683b ldr r3, [r7, #0] + 800aa72: 2204 movs r2, #4 + 800aa74: 801a strh r2, [r3, #0] + 800aa76: 4b03 ldr r3, [pc, #12] @ (800aa84 ) + 800aa78: 4618 mov r0, r3 + 800aa7a: 370c adds r7, #12 + 800aa7c: 46bd mov sp, r7 + 800aa7e: f85d 7b04 ldr.w r7, [sp], #4 + 800aa82: 4770 bx lr + 800aa84: 20000180 .word 0x20000180 + +0800aa88 : + 800aa88: b580 push {r7, lr} + 800aa8a: b082 sub sp, #8 + 800aa8c: af00 add r7, sp, #0 + 800aa8e: 4603 mov r3, r0 + 800aa90: 6039 str r1, [r7, #0] + 800aa92: 71fb strb r3, [r7, #7] + 800aa94: 79fb ldrb r3, [r7, #7] + 800aa96: 2b00 cmp r3, #0 + 800aa98: d105 bne.n 800aaa6 + 800aa9a: 683a ldr r2, [r7, #0] + 800aa9c: 4907 ldr r1, [pc, #28] @ (800aabc ) + 800aa9e: 4808 ldr r0, [pc, #32] @ (800aac0 ) + 800aaa0: f7ff fed6 bl 800a850 + 800aaa4: e004 b.n 800aab0 + 800aaa6: 683a ldr r2, [r7, #0] + 800aaa8: 4904 ldr r1, [pc, #16] @ (800aabc ) + 800aaaa: 4805 ldr r0, [pc, #20] @ (800aac0 ) + 800aaac: f7ff fed0 bl 800a850 + 800aab0: 4b02 ldr r3, [pc, #8] @ (800aabc ) + 800aab2: 4618 mov r0, r3 + 800aab4: 3708 adds r7, #8 + 800aab6: 46bd mov sp, r7 + 800aab8: bd80 pop {r7, pc} + 800aaba: bf00 nop + 800aabc: 20001064 .word 0x20001064 + 800aac0: 0800b3dc .word 0x0800b3dc + +0800aac4 : + 800aac4: b580 push {r7, lr} + 800aac6: b082 sub sp, #8 + 800aac8: af00 add r7, sp, #0 + 800aaca: 4603 mov r3, r0 + 800aacc: 6039 str r1, [r7, #0] + 800aace: 71fb strb r3, [r7, #7] + 800aad0: 683a ldr r2, [r7, #0] + 800aad2: 4904 ldr r1, [pc, #16] @ (800aae4 ) + 800aad4: 4804 ldr r0, [pc, #16] @ (800aae8 ) + 800aad6: f7ff febb bl 800a850 + 800aada: 4b02 ldr r3, [pc, #8] @ (800aae4 ) + 800aadc: 4618 mov r0, r3 + 800aade: 3708 adds r7, #8 + 800aae0: 46bd mov sp, r7 + 800aae2: bd80 pop {r7, pc} + 800aae4: 20001064 .word 0x20001064 + 800aae8: 0800b3f0 .word 0x0800b3f0 + +0800aaec : + 800aaec: b580 push {r7, lr} + 800aaee: b082 sub sp, #8 + 800aaf0: af00 add r7, sp, #0 + 800aaf2: 4603 mov r3, r0 + 800aaf4: 6039 str r1, [r7, #0] + 800aaf6: 71fb strb r3, [r7, #7] + 800aaf8: 683b ldr r3, [r7, #0] + 800aafa: 221a movs r2, #26 + 800aafc: 801a strh r2, [r3, #0] + 800aafe: f000 f855 bl 800abac + 800ab02: 4b02 ldr r3, [pc, #8] @ (800ab0c ) + 800ab04: 4618 mov r0, r3 + 800ab06: 3708 adds r7, #8 + 800ab08: 46bd mov sp, r7 + 800ab0a: bd80 pop {r7, pc} + 800ab0c: 20000184 .word 0x20000184 + +0800ab10 : + 800ab10: b580 push {r7, lr} + 800ab12: b082 sub sp, #8 + 800ab14: af00 add r7, sp, #0 + 800ab16: 4603 mov r3, r0 + 800ab18: 6039 str r1, [r7, #0] + 800ab1a: 71fb strb r3, [r7, #7] + 800ab1c: 79fb ldrb r3, [r7, #7] + 800ab1e: 2b00 cmp r3, #0 + 800ab20: d105 bne.n 800ab2e + 800ab22: 683a ldr r2, [r7, #0] + 800ab24: 4907 ldr r1, [pc, #28] @ (800ab44 ) + 800ab26: 4808 ldr r0, [pc, #32] @ (800ab48 ) + 800ab28: f7ff fe92 bl 800a850 + 800ab2c: e004 b.n 800ab38 + 800ab2e: 683a ldr r2, [r7, #0] + 800ab30: 4904 ldr r1, [pc, #16] @ (800ab44 ) + 800ab32: 4805 ldr r0, [pc, #20] @ (800ab48 ) + 800ab34: f7ff fe8c bl 800a850 + 800ab38: 4b02 ldr r3, [pc, #8] @ (800ab44 ) + 800ab3a: 4618 mov r0, r3 + 800ab3c: 3708 adds r7, #8 + 800ab3e: 46bd mov sp, r7 + 800ab40: bd80 pop {r7, pc} + 800ab42: bf00 nop + 800ab44: 20001064 .word 0x20001064 + 800ab48: 0800b3fc .word 0x0800b3fc + +0800ab4c : + 800ab4c: b580 push {r7, lr} + 800ab4e: b082 sub sp, #8 + 800ab50: af00 add r7, sp, #0 + 800ab52: 4603 mov r3, r0 + 800ab54: 6039 str r1, [r7, #0] + 800ab56: 71fb strb r3, [r7, #7] + 800ab58: 79fb ldrb r3, [r7, #7] + 800ab5a: 2b00 cmp r3, #0 + 800ab5c: d105 bne.n 800ab6a + 800ab5e: 683a ldr r2, [r7, #0] + 800ab60: 4907 ldr r1, [pc, #28] @ (800ab80 ) + 800ab62: 4808 ldr r0, [pc, #32] @ (800ab84 ) + 800ab64: f7ff fe74 bl 800a850 + 800ab68: e004 b.n 800ab74 + 800ab6a: 683a ldr r2, [r7, #0] + 800ab6c: 4904 ldr r1, [pc, #16] @ (800ab80 ) + 800ab6e: 4805 ldr r0, [pc, #20] @ (800ab84 ) + 800ab70: f7ff fe6e bl 800a850 + 800ab74: 4b02 ldr r3, [pc, #8] @ (800ab80 ) + 800ab76: 4618 mov r0, r3 + 800ab78: 3708 adds r7, #8 + 800ab7a: 46bd mov sp, r7 + 800ab7c: bd80 pop {r7, pc} + 800ab7e: bf00 nop + 800ab80: 20001064 .word 0x20001064 + 800ab84: 0800b408 .word 0x0800b408 + +0800ab88 : + 800ab88: b480 push {r7} + 800ab8a: b083 sub sp, #12 + 800ab8c: af00 add r7, sp, #0 + 800ab8e: 4603 mov r3, r0 + 800ab90: 6039 str r1, [r7, #0] + 800ab92: 71fb strb r3, [r7, #7] + 800ab94: 683b ldr r3, [r7, #0] + 800ab96: 220c movs r2, #12 + 800ab98: 801a strh r2, [r3, #0] + 800ab9a: 4b03 ldr r3, [pc, #12] @ (800aba8 ) + 800ab9c: 4618 mov r0, r3 + 800ab9e: 370c adds r7, #12 + 800aba0: 46bd mov sp, r7 + 800aba2: f85d 7b04 ldr.w r7, [sp], #4 + 800aba6: 4770 bx lr + 800aba8: 20000174 .word 0x20000174 + +0800abac : + 800abac: b580 push {r7, lr} + 800abae: b084 sub sp, #16 + 800abb0: af00 add r7, sp, #0 + 800abb2: 4b0f ldr r3, [pc, #60] @ (800abf0 ) + 800abb4: 681b ldr r3, [r3, #0] + 800abb6: 60fb str r3, [r7, #12] + 800abb8: 4b0e ldr r3, [pc, #56] @ (800abf4 ) + 800abba: 681b ldr r3, [r3, #0] + 800abbc: 60bb str r3, [r7, #8] + 800abbe: 4b0e ldr r3, [pc, #56] @ (800abf8 ) + 800abc0: 681b ldr r3, [r3, #0] + 800abc2: 607b str r3, [r7, #4] + 800abc4: 68fa ldr r2, [r7, #12] + 800abc6: 687b ldr r3, [r7, #4] + 800abc8: 4413 add r3, r2 + 800abca: 60fb str r3, [r7, #12] + 800abcc: 68fb ldr r3, [r7, #12] + 800abce: 2b00 cmp r3, #0 + 800abd0: d009 beq.n 800abe6 + 800abd2: 2208 movs r2, #8 + 800abd4: 4909 ldr r1, [pc, #36] @ (800abfc ) + 800abd6: 68f8 ldr r0, [r7, #12] + 800abd8: f000 f814 bl 800ac04 + 800abdc: 2204 movs r2, #4 + 800abde: 4908 ldr r1, [pc, #32] @ (800ac00 ) + 800abe0: 68b8 ldr r0, [r7, #8] + 800abe2: f000 f80f bl 800ac04 + 800abe6: bf00 nop + 800abe8: 3710 adds r7, #16 + 800abea: 46bd mov sp, r7 + 800abec: bd80 pop {r7, pc} + 800abee: bf00 nop + 800abf0: 1fff7a10 .word 0x1fff7a10 + 800abf4: 1fff7a14 .word 0x1fff7a14 + 800abf8: 1fff7a18 .word 0x1fff7a18 + 800abfc: 20000186 .word 0x20000186 + 800ac00: 20000196 .word 0x20000196 + +0800ac04 : + 800ac04: b480 push {r7} + 800ac06: b087 sub sp, #28 + 800ac08: af00 add r7, sp, #0 + 800ac0a: 60f8 str r0, [r7, #12] + 800ac0c: 60b9 str r1, [r7, #8] + 800ac0e: 4613 mov r3, r2 + 800ac10: 71fb strb r3, [r7, #7] + 800ac12: 2300 movs r3, #0 + 800ac14: 75fb strb r3, [r7, #23] + 800ac16: 2300 movs r3, #0 + 800ac18: 75fb strb r3, [r7, #23] + 800ac1a: e027 b.n 800ac6c + 800ac1c: 68fb ldr r3, [r7, #12] + 800ac1e: 0f1b lsrs r3, r3, #28 + 800ac20: 2b09 cmp r3, #9 + 800ac22: d80b bhi.n 800ac3c + 800ac24: 68fb ldr r3, [r7, #12] + 800ac26: 0f1b lsrs r3, r3, #28 + 800ac28: b2da uxtb r2, r3 + 800ac2a: 7dfb ldrb r3, [r7, #23] + 800ac2c: 005b lsls r3, r3, #1 + 800ac2e: 4619 mov r1, r3 + 800ac30: 68bb ldr r3, [r7, #8] + 800ac32: 440b add r3, r1 + 800ac34: 3230 adds r2, #48 @ 0x30 + 800ac36: b2d2 uxtb r2, r2 + 800ac38: 701a strb r2, [r3, #0] + 800ac3a: e00a b.n 800ac52 + 800ac3c: 68fb ldr r3, [r7, #12] + 800ac3e: 0f1b lsrs r3, r3, #28 + 800ac40: b2da uxtb r2, r3 + 800ac42: 7dfb ldrb r3, [r7, #23] + 800ac44: 005b lsls r3, r3, #1 + 800ac46: 4619 mov r1, r3 + 800ac48: 68bb ldr r3, [r7, #8] + 800ac4a: 440b add r3, r1 + 800ac4c: 3237 adds r2, #55 @ 0x37 + 800ac4e: b2d2 uxtb r2, r2 + 800ac50: 701a strb r2, [r3, #0] + 800ac52: 68fb ldr r3, [r7, #12] + 800ac54: 011b lsls r3, r3, #4 + 800ac56: 60fb str r3, [r7, #12] + 800ac58: 7dfb ldrb r3, [r7, #23] + 800ac5a: 005b lsls r3, r3, #1 + 800ac5c: 3301 adds r3, #1 + 800ac5e: 68ba ldr r2, [r7, #8] + 800ac60: 4413 add r3, r2 + 800ac62: 2200 movs r2, #0 + 800ac64: 701a strb r2, [r3, #0] + 800ac66: 7dfb ldrb r3, [r7, #23] + 800ac68: 3301 adds r3, #1 + 800ac6a: 75fb strb r3, [r7, #23] + 800ac6c: 7dfa ldrb r2, [r7, #23] + 800ac6e: 79fb ldrb r3, [r7, #7] + 800ac70: 429a cmp r2, r3 + 800ac72: d3d3 bcc.n 800ac1c + 800ac74: bf00 nop + 800ac76: bf00 nop + 800ac78: 371c adds r7, #28 + 800ac7a: 46bd mov sp, r7 + 800ac7c: f85d 7b04 ldr.w r7, [sp], #4 + 800ac80: 4770 bx lr + ... + +0800ac84 : + 800ac84: b580 push {r7, lr} + 800ac86: b0a0 sub sp, #128 @ 0x80 + 800ac88: af00 add r7, sp, #0 + 800ac8a: 6078 str r0, [r7, #4] + 800ac8c: f107 036c add.w r3, r7, #108 @ 0x6c + 800ac90: 2200 movs r2, #0 + 800ac92: 601a str r2, [r3, #0] + 800ac94: 605a str r2, [r3, #4] + 800ac96: 609a str r2, [r3, #8] + 800ac98: 60da str r2, [r3, #12] + 800ac9a: 611a str r2, [r3, #16] + 800ac9c: f107 0310 add.w r3, r7, #16 + 800aca0: 225c movs r2, #92 @ 0x5c + 800aca2: 2100 movs r1, #0 + 800aca4: 4618 mov r0, r3 + 800aca6: f000 fb53 bl 800b350 + 800acaa: 687b ldr r3, [r7, #4] + 800acac: 681b ldr r3, [r3, #0] + 800acae: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000 + 800acb2: d149 bne.n 800ad48 + 800acb4: f44f 7380 mov.w r3, #256 @ 0x100 + 800acb8: 613b str r3, [r7, #16] + 800acba: 2300 movs r3, #0 + 800acbc: 667b str r3, [r7, #100] @ 0x64 + 800acbe: f107 0310 add.w r3, r7, #16 + 800acc2: 4618 mov r0, r3 + 800acc4: f7f9 fd1e bl 8004704 + 800acc8: 4603 mov r3, r0 + 800acca: 2b00 cmp r3, #0 + 800accc: d001 beq.n 800acd2 + 800acce: f7f6 fabb bl 8001248 + 800acd2: 2300 movs r3, #0 + 800acd4: 60fb str r3, [r7, #12] + 800acd6: 4b1e ldr r3, [pc, #120] @ (800ad50 ) + 800acd8: 6b1b ldr r3, [r3, #48] @ 0x30 + 800acda: 4a1d ldr r2, [pc, #116] @ (800ad50 ) + 800acdc: f043 0301 orr.w r3, r3, #1 + 800ace0: 6313 str r3, [r2, #48] @ 0x30 + 800ace2: 4b1b ldr r3, [pc, #108] @ (800ad50 ) + 800ace4: 6b1b ldr r3, [r3, #48] @ 0x30 + 800ace6: f003 0301 and.w r3, r3, #1 + 800acea: 60fb str r3, [r7, #12] + 800acec: 68fb ldr r3, [r7, #12] + 800acee: f44f 53c0 mov.w r3, #6144 @ 0x1800 + 800acf2: 66fb str r3, [r7, #108] @ 0x6c + 800acf4: 2302 movs r3, #2 + 800acf6: 673b str r3, [r7, #112] @ 0x70 + 800acf8: 2300 movs r3, #0 + 800acfa: 677b str r3, [r7, #116] @ 0x74 + 800acfc: 2303 movs r3, #3 + 800acfe: 67bb str r3, [r7, #120] @ 0x78 + 800ad00: 230a movs r3, #10 + 800ad02: 67fb str r3, [r7, #124] @ 0x7c + 800ad04: f107 036c add.w r3, r7, #108 @ 0x6c + 800ad08: 4619 mov r1, r3 + 800ad0a: 4812 ldr r0, [pc, #72] @ (800ad54 ) + 800ad0c: f7f7 fe50 bl 80029b0 + 800ad10: 4b0f ldr r3, [pc, #60] @ (800ad50 ) + 800ad12: 6b5b ldr r3, [r3, #52] @ 0x34 + 800ad14: 4a0e ldr r2, [pc, #56] @ (800ad50 ) + 800ad16: f043 0380 orr.w r3, r3, #128 @ 0x80 + 800ad1a: 6353 str r3, [r2, #52] @ 0x34 + 800ad1c: 2300 movs r3, #0 + 800ad1e: 60bb str r3, [r7, #8] + 800ad20: 4b0b ldr r3, [pc, #44] @ (800ad50 ) + 800ad22: 6c5b ldr r3, [r3, #68] @ 0x44 + 800ad24: 4a0a ldr r2, [pc, #40] @ (800ad50 ) + 800ad26: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 800ad2a: 6453 str r3, [r2, #68] @ 0x44 + 800ad2c: 4b08 ldr r3, [pc, #32] @ (800ad50 ) + 800ad2e: 6c5b ldr r3, [r3, #68] @ 0x44 + 800ad30: f403 4380 and.w r3, r3, #16384 @ 0x4000 + 800ad34: 60bb str r3, [r7, #8] + 800ad36: 68bb ldr r3, [r7, #8] + 800ad38: 2200 movs r2, #0 + 800ad3a: 2100 movs r1, #0 + 800ad3c: 2043 movs r0, #67 @ 0x43 + 800ad3e: f7f7 f9fe bl 800213e + 800ad42: 2043 movs r0, #67 @ 0x43 + 800ad44: f7f7 fa17 bl 8002176 + 800ad48: bf00 nop + 800ad4a: 3780 adds r7, #128 @ 0x80 + 800ad4c: 46bd mov sp, r7 + 800ad4e: bd80 pop {r7, pc} + 800ad50: 40023800 .word 0x40023800 + 800ad54: 40020000 .word 0x40020000 + +0800ad58 : + 800ad58: b580 push {r7, lr} + 800ad5a: b082 sub sp, #8 + 800ad5c: af00 add r7, sp, #0 + 800ad5e: 6078 str r0, [r7, #4] + 800ad60: 687b ldr r3, [r7, #4] + 800ad62: f8d3 24e0 ldr.w r2, [r3, #1248] @ 0x4e0 + 800ad66: 687b ldr r3, [r7, #4] + 800ad68: f203 439c addw r3, r3, #1180 @ 0x49c + 800ad6c: 4619 mov r1, r3 + 800ad6e: 4610 mov r0, r2 + 800ad70: f7fe fbcb bl 800950a + 800ad74: bf00 nop + 800ad76: 3708 adds r7, #8 + 800ad78: 46bd mov sp, r7 + 800ad7a: bd80 pop {r7, pc} + +0800ad7c : + 800ad7c: b580 push {r7, lr} + 800ad7e: b082 sub sp, #8 + 800ad80: af00 add r7, sp, #0 + 800ad82: 6078 str r0, [r7, #4] + 800ad84: 460b mov r3, r1 + 800ad86: 70fb strb r3, [r7, #3] + 800ad88: 687b ldr r3, [r7, #4] + 800ad8a: f8d3 04e0 ldr.w r0, [r3, #1248] @ 0x4e0 + 800ad8e: 78fa ldrb r2, [r7, #3] + 800ad90: 6879 ldr r1, [r7, #4] + 800ad92: 4613 mov r3, r2 + 800ad94: 00db lsls r3, r3, #3 + 800ad96: 4413 add r3, r2 + 800ad98: 009b lsls r3, r3, #2 + 800ad9a: 440b add r3, r1 + 800ad9c: f503 7318 add.w r3, r3, #608 @ 0x260 + 800ada0: 681a ldr r2, [r3, #0] + 800ada2: 78fb ldrb r3, [r7, #3] + 800ada4: 4619 mov r1, r3 + 800ada6: f7fe fc05 bl 80095b4 + 800adaa: bf00 nop + 800adac: 3708 adds r7, #8 + 800adae: 46bd mov sp, r7 + 800adb0: bd80 pop {r7, pc} + +0800adb2 : + 800adb2: b580 push {r7, lr} + 800adb4: b082 sub sp, #8 + 800adb6: af00 add r7, sp, #0 + 800adb8: 6078 str r0, [r7, #4] + 800adba: 460b mov r3, r1 + 800adbc: 70fb strb r3, [r7, #3] + 800adbe: 687b ldr r3, [r7, #4] + 800adc0: f8d3 04e0 ldr.w r0, [r3, #1248] @ 0x4e0 + 800adc4: 78fa ldrb r2, [r7, #3] + 800adc6: 6879 ldr r1, [r7, #4] + 800adc8: 4613 mov r3, r2 + 800adca: 00db lsls r3, r3, #3 + 800adcc: 4413 add r3, r2 + 800adce: 009b lsls r3, r3, #2 + 800add0: 440b add r3, r1 + 800add2: 3320 adds r3, #32 + 800add4: 681a ldr r2, [r3, #0] + 800add6: 78fb ldrb r3, [r7, #3] + 800add8: 4619 mov r1, r3 + 800adda: f7fe fca7 bl 800972c + 800adde: bf00 nop + 800ade0: 3708 adds r7, #8 + 800ade2: 46bd mov sp, r7 + 800ade4: bd80 pop {r7, pc} + +0800ade6 : + 800ade6: b580 push {r7, lr} + 800ade8: b082 sub sp, #8 + 800adea: af00 add r7, sp, #0 + 800adec: 6078 str r0, [r7, #4] + 800adee: 687b ldr r3, [r7, #4] + 800adf0: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800adf4: 4618 mov r0, r3 + 800adf6: f7fe fdeb bl 80099d0 + 800adfa: bf00 nop + 800adfc: 3708 adds r7, #8 + 800adfe: 46bd mov sp, r7 + 800ae00: bd80 pop {r7, pc} + +0800ae02 : + 800ae02: b580 push {r7, lr} + 800ae04: b084 sub sp, #16 + 800ae06: af00 add r7, sp, #0 + 800ae08: 6078 str r0, [r7, #4] + 800ae0a: 2301 movs r3, #1 + 800ae0c: 73fb strb r3, [r7, #15] + 800ae0e: 687b ldr r3, [r7, #4] + 800ae10: 79db ldrb r3, [r3, #7] + 800ae12: 2b00 cmp r3, #0 + 800ae14: d102 bne.n 800ae1c + 800ae16: 2300 movs r3, #0 + 800ae18: 73fb strb r3, [r7, #15] + 800ae1a: e008 b.n 800ae2e + 800ae1c: 687b ldr r3, [r7, #4] + 800ae1e: 79db ldrb r3, [r3, #7] + 800ae20: 2b02 cmp r3, #2 + 800ae22: d102 bne.n 800ae2a + 800ae24: 2301 movs r3, #1 + 800ae26: 73fb strb r3, [r7, #15] + 800ae28: e001 b.n 800ae2e + 800ae2a: f7f6 fa0d bl 8001248 + 800ae2e: 687b ldr r3, [r7, #4] + 800ae30: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800ae34: 7bfa ldrb r2, [r7, #15] + 800ae36: 4611 mov r1, r2 + 800ae38: 4618 mov r0, r3 + 800ae3a: f7fe fd85 bl 8009948 + 800ae3e: 687b ldr r3, [r7, #4] + 800ae40: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800ae44: 4618 mov r0, r3 + 800ae46: f7fe fd2c bl 80098a2 + 800ae4a: bf00 nop + 800ae4c: 3710 adds r7, #16 + 800ae4e: 46bd mov sp, r7 + 800ae50: bd80 pop {r7, pc} + ... + +0800ae54 : + 800ae54: b580 push {r7, lr} + 800ae56: b082 sub sp, #8 + 800ae58: af00 add r7, sp, #0 + 800ae5a: 6078 str r0, [r7, #4] + 800ae5c: 687b ldr r3, [r7, #4] + 800ae5e: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800ae62: 4618 mov r0, r3 + 800ae64: f7fe fd80 bl 8009968 + 800ae68: 687b ldr r3, [r7, #4] + 800ae6a: 681b ldr r3, [r3, #0] + 800ae6c: f503 6360 add.w r3, r3, #3584 @ 0xe00 + 800ae70: 681b ldr r3, [r3, #0] + 800ae72: 687a ldr r2, [r7, #4] + 800ae74: 6812 ldr r2, [r2, #0] + 800ae76: f502 6260 add.w r2, r2, #3584 @ 0xe00 + 800ae7a: f043 0301 orr.w r3, r3, #1 + 800ae7e: 6013 str r3, [r2, #0] + 800ae80: 687b ldr r3, [r7, #4] + 800ae82: 7adb ldrb r3, [r3, #11] + 800ae84: 2b00 cmp r3, #0 + 800ae86: d005 beq.n 800ae94 + 800ae88: 4b04 ldr r3, [pc, #16] @ (800ae9c ) + 800ae8a: 691b ldr r3, [r3, #16] + 800ae8c: 4a03 ldr r2, [pc, #12] @ (800ae9c ) + 800ae8e: f043 0306 orr.w r3, r3, #6 + 800ae92: 6113 str r3, [r2, #16] + 800ae94: bf00 nop + 800ae96: 3708 adds r7, #8 + 800ae98: 46bd mov sp, r7 + 800ae9a: bd80 pop {r7, pc} + 800ae9c: e000ed00 .word 0xe000ed00 + +0800aea0 : + 800aea0: b580 push {r7, lr} + 800aea2: b082 sub sp, #8 + 800aea4: af00 add r7, sp, #0 + 800aea6: 6078 str r0, [r7, #4] + 800aea8: 687b ldr r3, [r7, #4] + 800aeaa: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800aeae: 4618 mov r0, r3 + 800aeb0: f7fe fd76 bl 80099a0 + 800aeb4: bf00 nop + 800aeb6: 3708 adds r7, #8 + 800aeb8: 46bd mov sp, r7 + 800aeba: bd80 pop {r7, pc} + +0800aebc : + 800aebc: b580 push {r7, lr} + 800aebe: b082 sub sp, #8 + 800aec0: af00 add r7, sp, #0 + 800aec2: 6078 str r0, [r7, #4] + 800aec4: 460b mov r3, r1 + 800aec6: 70fb strb r3, [r7, #3] + 800aec8: 687b ldr r3, [r7, #4] + 800aeca: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800aece: 78fa ldrb r2, [r7, #3] + 800aed0: 4611 mov r1, r2 + 800aed2: 4618 mov r0, r3 + 800aed4: f7fe fdce bl 8009a74 + 800aed8: bf00 nop + 800aeda: 3708 adds r7, #8 + 800aedc: 46bd mov sp, r7 + 800aede: bd80 pop {r7, pc} + +0800aee0 : + 800aee0: b580 push {r7, lr} + 800aee2: b082 sub sp, #8 + 800aee4: af00 add r7, sp, #0 + 800aee6: 6078 str r0, [r7, #4] + 800aee8: 460b mov r3, r1 + 800aeea: 70fb strb r3, [r7, #3] + 800aeec: 687b ldr r3, [r7, #4] + 800aeee: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800aef2: 78fa ldrb r2, [r7, #3] + 800aef4: 4611 mov r1, r2 + 800aef6: 4618 mov r0, r3 + 800aef8: f7fe fd8a bl 8009a10 + 800aefc: bf00 nop + 800aefe: 3708 adds r7, #8 + 800af00: 46bd mov sp, r7 + 800af02: bd80 pop {r7, pc} + +0800af04 : + 800af04: b580 push {r7, lr} + 800af06: b082 sub sp, #8 + 800af08: af00 add r7, sp, #0 + 800af0a: 6078 str r0, [r7, #4] + 800af0c: 687b ldr r3, [r7, #4] + 800af0e: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800af12: 4618 mov r0, r3 + 800af14: f7fe fde0 bl 8009ad8 + 800af18: bf00 nop + 800af1a: 3708 adds r7, #8 + 800af1c: 46bd mov sp, r7 + 800af1e: bd80 pop {r7, pc} + +0800af20 : + 800af20: b580 push {r7, lr} + 800af22: b082 sub sp, #8 + 800af24: af00 add r7, sp, #0 + 800af26: 6078 str r0, [r7, #4] + 800af28: 687b ldr r3, [r7, #4] + 800af2a: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800af2e: 4618 mov r0, r3 + 800af30: f7fe fddd bl 8009aee + 800af34: bf00 nop + 800af36: 3708 adds r7, #8 + 800af38: 46bd mov sp, r7 + 800af3a: bd80 pop {r7, pc} + +0800af3c : + 800af3c: b580 push {r7, lr} + 800af3e: b082 sub sp, #8 + 800af40: af00 add r7, sp, #0 + 800af42: 6078 str r0, [r7, #4] + 800af44: 687b ldr r3, [r7, #4] + 800af46: 781b ldrb r3, [r3, #0] + 800af48: 2b00 cmp r3, #0 + 800af4a: d13c bne.n 800afc6 + 800af4c: 4a20 ldr r2, [pc, #128] @ (800afd0 ) + 800af4e: 687b ldr r3, [r7, #4] + 800af50: f8c2 34e0 str.w r3, [r2, #1248] @ 0x4e0 + 800af54: 687b ldr r3, [r7, #4] + 800af56: 4a1e ldr r2, [pc, #120] @ (800afd0 ) + 800af58: f8c3 22c8 str.w r2, [r3, #712] @ 0x2c8 + 800af5c: 4b1c ldr r3, [pc, #112] @ (800afd0 ) + 800af5e: f04f 42a0 mov.w r2, #1342177280 @ 0x50000000 + 800af62: 601a str r2, [r3, #0] + 800af64: 4b1a ldr r3, [pc, #104] @ (800afd0 ) + 800af66: 2206 movs r2, #6 + 800af68: 711a strb r2, [r3, #4] + 800af6a: 4b19 ldr r3, [pc, #100] @ (800afd0 ) + 800af6c: 2202 movs r2, #2 + 800af6e: 71da strb r2, [r3, #7] + 800af70: 4b17 ldr r3, [pc, #92] @ (800afd0 ) + 800af72: 2200 movs r2, #0 + 800af74: 719a strb r2, [r3, #6] + 800af76: 4b16 ldr r3, [pc, #88] @ (800afd0 ) + 800af78: 2202 movs r2, #2 + 800af7a: 725a strb r2, [r3, #9] + 800af7c: 4b14 ldr r3, [pc, #80] @ (800afd0 ) + 800af7e: 2200 movs r2, #0 + 800af80: 729a strb r2, [r3, #10] + 800af82: 4b13 ldr r3, [pc, #76] @ (800afd0 ) + 800af84: 2200 movs r2, #0 + 800af86: 72da strb r2, [r3, #11] + 800af88: 4b11 ldr r3, [pc, #68] @ (800afd0 ) + 800af8a: 2200 movs r2, #0 + 800af8c: 731a strb r2, [r3, #12] + 800af8e: 4b10 ldr r3, [pc, #64] @ (800afd0 ) + 800af90: 2200 movs r2, #0 + 800af92: 739a strb r2, [r3, #14] + 800af94: 4b0e ldr r3, [pc, #56] @ (800afd0 ) + 800af96: 2200 movs r2, #0 + 800af98: 73da strb r2, [r3, #15] + 800af9a: 480d ldr r0, [pc, #52] @ (800afd0 ) + 800af9c: f7f8 f812 bl 8002fc4 + 800afa0: 4603 mov r3, r0 + 800afa2: 2b00 cmp r3, #0 + 800afa4: d001 beq.n 800afaa + 800afa6: f7f6 f94f bl 8001248 + 800afaa: 2180 movs r1, #128 @ 0x80 + 800afac: 4808 ldr r0, [pc, #32] @ (800afd0 ) + 800afae: f7f9 fa5a bl 8004466 + 800afb2: 2240 movs r2, #64 @ 0x40 + 800afb4: 2100 movs r1, #0 + 800afb6: 4806 ldr r0, [pc, #24] @ (800afd0 ) + 800afb8: f7f9 fa0e bl 80043d8 + 800afbc: 2280 movs r2, #128 @ 0x80 + 800afbe: 2101 movs r1, #1 + 800afc0: 4803 ldr r0, [pc, #12] @ (800afd0 ) + 800afc2: f7f9 fa09 bl 80043d8 + 800afc6: 2300 movs r3, #0 + 800afc8: 4618 mov r0, r3 + 800afca: 3708 adds r7, #8 + 800afcc: 46bd mov sp, r7 + 800afce: bd80 pop {r7, pc} + 800afd0: 20001264 .word 0x20001264 + +0800afd4 : + 800afd4: b580 push {r7, lr} + 800afd6: b084 sub sp, #16 + 800afd8: af00 add r7, sp, #0 + 800afda: 6078 str r0, [r7, #4] + 800afdc: 2300 movs r3, #0 + 800afde: 73fb strb r3, [r7, #15] + 800afe0: 2300 movs r3, #0 + 800afe2: 73bb strb r3, [r7, #14] + 800afe4: 687b ldr r3, [r7, #4] + 800afe6: f8d3 32c8 ldr.w r3, [r3, #712] @ 0x2c8 + 800afea: 4618 mov r0, r3 + 800afec: f7f8 f900 bl 80031f0 + 800aff0: 4603 mov r3, r0 + 800aff2: 73fb strb r3, [r7, #15] + 800aff4: 7bfb ldrb r3, [r7, #15] + 800aff6: 4618 mov r0, r3 + 800aff8: f000 f97e bl 800b2f8 + 800affc: 4603 mov r3, r0 + 800affe: 73bb strb r3, [r7, #14] + 800b000: 7bbb ldrb r3, [r7, #14] + 800b002: 4618 mov r0, r3 + 800b004: 3710 adds r7, #16 + 800b006: 46bd mov sp, r7 + 800b008: bd80 pop {r7, pc} + +0800b00a : + 800b00a: b580 push {r7, lr} + 800b00c: b084 sub sp, #16 + 800b00e: af00 add r7, sp, #0 + 800b010: 6078 str r0, [r7, #4] + 800b012: 4608 mov r0, r1 + 800b014: 4611 mov r1, r2 + 800b016: 461a mov r2, r3 + 800b018: 4603 mov r3, r0 + 800b01a: 70fb strb r3, [r7, #3] + 800b01c: 460b mov r3, r1 + 800b01e: 70bb strb r3, [r7, #2] + 800b020: 4613 mov r3, r2 + 800b022: 803b strh r3, [r7, #0] + 800b024: 2300 movs r3, #0 + 800b026: 73fb strb r3, [r7, #15] + 800b028: 2300 movs r3, #0 + 800b02a: 73bb strb r3, [r7, #14] + 800b02c: 687b ldr r3, [r7, #4] + 800b02e: f8d3 02c8 ldr.w r0, [r3, #712] @ 0x2c8 + 800b032: 78bb ldrb r3, [r7, #2] + 800b034: 883a ldrh r2, [r7, #0] + 800b036: 78f9 ldrb r1, [r7, #3] + 800b038: f7f8 fe01 bl 8003c3e + 800b03c: 4603 mov r3, r0 + 800b03e: 73fb strb r3, [r7, #15] + 800b040: 7bfb ldrb r3, [r7, #15] + 800b042: 4618 mov r0, r3 + 800b044: f000 f958 bl 800b2f8 + 800b048: 4603 mov r3, r0 + 800b04a: 73bb strb r3, [r7, #14] + 800b04c: 7bbb ldrb r3, [r7, #14] + 800b04e: 4618 mov r0, r3 + 800b050: 3710 adds r7, #16 + 800b052: 46bd mov sp, r7 + 800b054: bd80 pop {r7, pc} + +0800b056 : + 800b056: b580 push {r7, lr} + 800b058: b084 sub sp, #16 + 800b05a: af00 add r7, sp, #0 + 800b05c: 6078 str r0, [r7, #4] + 800b05e: 460b mov r3, r1 + 800b060: 70fb strb r3, [r7, #3] + 800b062: 2300 movs r3, #0 + 800b064: 73fb strb r3, [r7, #15] + 800b066: 2300 movs r3, #0 + 800b068: 73bb strb r3, [r7, #14] + 800b06a: 687b ldr r3, [r7, #4] + 800b06c: f8d3 32c8 ldr.w r3, [r3, #712] @ 0x2c8 + 800b070: 78fa ldrb r2, [r7, #3] + 800b072: 4611 mov r1, r2 + 800b074: 4618 mov r0, r3 + 800b076: f7f8 fe4c bl 8003d12 + 800b07a: 4603 mov r3, r0 + 800b07c: 73fb strb r3, [r7, #15] + 800b07e: 7bfb ldrb r3, [r7, #15] + 800b080: 4618 mov r0, r3 + 800b082: f000 f939 bl 800b2f8 + 800b086: 4603 mov r3, r0 + 800b088: 73bb strb r3, [r7, #14] + 800b08a: 7bbb ldrb r3, [r7, #14] + 800b08c: 4618 mov r0, r3 + 800b08e: 3710 adds r7, #16 + 800b090: 46bd mov sp, r7 + 800b092: bd80 pop {r7, pc} + +0800b094 : + 800b094: b580 push {r7, lr} + 800b096: b084 sub sp, #16 + 800b098: af00 add r7, sp, #0 + 800b09a: 6078 str r0, [r7, #4] + 800b09c: 460b mov r3, r1 + 800b09e: 70fb strb r3, [r7, #3] + 800b0a0: 2300 movs r3, #0 + 800b0a2: 73fb strb r3, [r7, #15] + 800b0a4: 2300 movs r3, #0 + 800b0a6: 73bb strb r3, [r7, #14] + 800b0a8: 687b ldr r3, [r7, #4] + 800b0aa: f8d3 32c8 ldr.w r3, [r3, #712] @ 0x2c8 + 800b0ae: 78fa ldrb r2, [r7, #3] + 800b0b0: 4611 mov r1, r2 + 800b0b2: 4618 mov r0, r3 + 800b0b4: f7f8 feec bl 8003e90 + 800b0b8: 4603 mov r3, r0 + 800b0ba: 73fb strb r3, [r7, #15] + 800b0bc: 7bfb ldrb r3, [r7, #15] + 800b0be: 4618 mov r0, r3 + 800b0c0: f000 f91a bl 800b2f8 + 800b0c4: 4603 mov r3, r0 + 800b0c6: 73bb strb r3, [r7, #14] + 800b0c8: 7bbb ldrb r3, [r7, #14] + 800b0ca: 4618 mov r0, r3 + 800b0cc: 3710 adds r7, #16 + 800b0ce: 46bd mov sp, r7 + 800b0d0: bd80 pop {r7, pc} + +0800b0d2 : + 800b0d2: b580 push {r7, lr} + 800b0d4: b084 sub sp, #16 + 800b0d6: af00 add r7, sp, #0 + 800b0d8: 6078 str r0, [r7, #4] + 800b0da: 460b mov r3, r1 + 800b0dc: 70fb strb r3, [r7, #3] + 800b0de: 2300 movs r3, #0 + 800b0e0: 73fb strb r3, [r7, #15] + 800b0e2: 2300 movs r3, #0 + 800b0e4: 73bb strb r3, [r7, #14] + 800b0e6: 687b ldr r3, [r7, #4] + 800b0e8: f8d3 32c8 ldr.w r3, [r3, #712] @ 0x2c8 + 800b0ec: 78fa ldrb r2, [r7, #3] + 800b0ee: 4611 mov r1, r2 + 800b0f0: 4618 mov r0, r3 + 800b0f2: f7f8 ff30 bl 8003f56 + 800b0f6: 4603 mov r3, r0 + 800b0f8: 73fb strb r3, [r7, #15] + 800b0fa: 7bfb ldrb r3, [r7, #15] + 800b0fc: 4618 mov r0, r3 + 800b0fe: f000 f8fb bl 800b2f8 + 800b102: 4603 mov r3, r0 + 800b104: 73bb strb r3, [r7, #14] + 800b106: 7bbb ldrb r3, [r7, #14] + 800b108: 4618 mov r0, r3 + 800b10a: 3710 adds r7, #16 + 800b10c: 46bd mov sp, r7 + 800b10e: bd80 pop {r7, pc} + +0800b110 : + 800b110: b480 push {r7} + 800b112: b085 sub sp, #20 + 800b114: af00 add r7, sp, #0 + 800b116: 6078 str r0, [r7, #4] + 800b118: 460b mov r3, r1 + 800b11a: 70fb strb r3, [r7, #3] + 800b11c: 687b ldr r3, [r7, #4] + 800b11e: f8d3 32c8 ldr.w r3, [r3, #712] @ 0x2c8 + 800b122: 60fb str r3, [r7, #12] + 800b124: f997 3003 ldrsb.w r3, [r7, #3] + 800b128: 2b00 cmp r3, #0 + 800b12a: da0b bge.n 800b144 + 800b12c: 78fb ldrb r3, [r7, #3] + 800b12e: f003 027f and.w r2, r3, #127 @ 0x7f + 800b132: 68f9 ldr r1, [r7, #12] + 800b134: 4613 mov r3, r2 + 800b136: 00db lsls r3, r3, #3 + 800b138: 4413 add r3, r2 + 800b13a: 009b lsls r3, r3, #2 + 800b13c: 440b add r3, r1 + 800b13e: 3316 adds r3, #22 + 800b140: 781b ldrb r3, [r3, #0] + 800b142: e00b b.n 800b15c + 800b144: 78fb ldrb r3, [r7, #3] + 800b146: f003 027f and.w r2, r3, #127 @ 0x7f + 800b14a: 68f9 ldr r1, [r7, #12] + 800b14c: 4613 mov r3, r2 + 800b14e: 00db lsls r3, r3, #3 + 800b150: 4413 add r3, r2 + 800b152: 009b lsls r3, r3, #2 + 800b154: 440b add r3, r1 + 800b156: f203 2356 addw r3, r3, #598 @ 0x256 + 800b15a: 781b ldrb r3, [r3, #0] + 800b15c: 4618 mov r0, r3 + 800b15e: 3714 adds r7, #20 + 800b160: 46bd mov sp, r7 + 800b162: f85d 7b04 ldr.w r7, [sp], #4 + 800b166: 4770 bx lr + +0800b168 : + 800b168: b580 push {r7, lr} + 800b16a: b084 sub sp, #16 + 800b16c: af00 add r7, sp, #0 + 800b16e: 6078 str r0, [r7, #4] + 800b170: 460b mov r3, r1 + 800b172: 70fb strb r3, [r7, #3] + 800b174: 2300 movs r3, #0 + 800b176: 73fb strb r3, [r7, #15] + 800b178: 2300 movs r3, #0 + 800b17a: 73bb strb r3, [r7, #14] + 800b17c: 687b ldr r3, [r7, #4] + 800b17e: f8d3 32c8 ldr.w r3, [r3, #712] @ 0x2c8 + 800b182: 78fa ldrb r2, [r7, #3] + 800b184: 4611 mov r1, r2 + 800b186: 4618 mov r0, r3 + 800b188: f7f8 fd35 bl 8003bf6 + 800b18c: 4603 mov r3, r0 + 800b18e: 73fb strb r3, [r7, #15] + 800b190: 7bfb ldrb r3, [r7, #15] + 800b192: 4618 mov r0, r3 + 800b194: f000 f8b0 bl 800b2f8 + 800b198: 4603 mov r3, r0 + 800b19a: 73bb strb r3, [r7, #14] + 800b19c: 7bbb ldrb r3, [r7, #14] + 800b19e: 4618 mov r0, r3 + 800b1a0: 3710 adds r7, #16 + 800b1a2: 46bd mov sp, r7 + 800b1a4: bd80 pop {r7, pc} + +0800b1a6 : + 800b1a6: b580 push {r7, lr} + 800b1a8: b086 sub sp, #24 + 800b1aa: af00 add r7, sp, #0 + 800b1ac: 60f8 str r0, [r7, #12] + 800b1ae: 607a str r2, [r7, #4] + 800b1b0: 603b str r3, [r7, #0] + 800b1b2: 460b mov r3, r1 + 800b1b4: 72fb strb r3, [r7, #11] + 800b1b6: 2300 movs r3, #0 + 800b1b8: 75fb strb r3, [r7, #23] + 800b1ba: 2300 movs r3, #0 + 800b1bc: 75bb strb r3, [r7, #22] + 800b1be: 68fb ldr r3, [r7, #12] + 800b1c0: f8d3 02c8 ldr.w r0, [r3, #712] @ 0x2c8 + 800b1c4: 7af9 ldrb r1, [r7, #11] + 800b1c6: 683b ldr r3, [r7, #0] + 800b1c8: 687a ldr r2, [r7, #4] + 800b1ca: f7f8 fe27 bl 8003e1c + 800b1ce: 4603 mov r3, r0 + 800b1d0: 75fb strb r3, [r7, #23] + 800b1d2: 7dfb ldrb r3, [r7, #23] + 800b1d4: 4618 mov r0, r3 + 800b1d6: f000 f88f bl 800b2f8 + 800b1da: 4603 mov r3, r0 + 800b1dc: 75bb strb r3, [r7, #22] + 800b1de: 7dbb ldrb r3, [r7, #22] + 800b1e0: 4618 mov r0, r3 + 800b1e2: 3718 adds r7, #24 + 800b1e4: 46bd mov sp, r7 + 800b1e6: bd80 pop {r7, pc} + +0800b1e8 : + 800b1e8: b580 push {r7, lr} + 800b1ea: b086 sub sp, #24 + 800b1ec: af00 add r7, sp, #0 + 800b1ee: 60f8 str r0, [r7, #12] + 800b1f0: 607a str r2, [r7, #4] + 800b1f2: 603b str r3, [r7, #0] + 800b1f4: 460b mov r3, r1 + 800b1f6: 72fb strb r3, [r7, #11] + 800b1f8: 2300 movs r3, #0 + 800b1fa: 75fb strb r3, [r7, #23] + 800b1fc: 2300 movs r3, #0 + 800b1fe: 75bb strb r3, [r7, #22] + 800b200: 68fb ldr r3, [r7, #12] + 800b202: f8d3 02c8 ldr.w r0, [r3, #712] @ 0x2c8 + 800b206: 7af9 ldrb r1, [r7, #11] + 800b208: 683b ldr r3, [r7, #0] + 800b20a: 687a ldr r2, [r7, #4] + 800b20c: f7f8 fdcb bl 8003da6 + 800b210: 4603 mov r3, r0 + 800b212: 75fb strb r3, [r7, #23] + 800b214: 7dfb ldrb r3, [r7, #23] + 800b216: 4618 mov r0, r3 + 800b218: f000 f86e bl 800b2f8 + 800b21c: 4603 mov r3, r0 + 800b21e: 75bb strb r3, [r7, #22] + 800b220: 7dbb ldrb r3, [r7, #22] + 800b222: 4618 mov r0, r3 + 800b224: 3718 adds r7, #24 + 800b226: 46bd mov sp, r7 + 800b228: bd80 pop {r7, pc} + ... + +0800b22c : + 800b22c: b580 push {r7, lr} + 800b22e: b082 sub sp, #8 + 800b230: af00 add r7, sp, #0 + 800b232: 6078 str r0, [r7, #4] + 800b234: 460b mov r3, r1 + 800b236: 70fb strb r3, [r7, #3] + 800b238: 78fb ldrb r3, [r7, #3] + 800b23a: 2b00 cmp r3, #0 + 800b23c: d002 beq.n 800b244 + 800b23e: 2b01 cmp r3, #1 + 800b240: d01f beq.n 800b282 + 800b242: e03b b.n 800b2bc + 800b244: 687b ldr r3, [r7, #4] + 800b246: 7adb ldrb r3, [r3, #11] + 800b248: 2b00 cmp r3, #0 + 800b24a: d007 beq.n 800b25c + 800b24c: f7f5 fcee bl 8000c2c + 800b250: 4b1c ldr r3, [pc, #112] @ (800b2c4 ) + 800b252: 691b ldr r3, [r3, #16] + 800b254: 4a1b ldr r2, [pc, #108] @ (800b2c4 ) + 800b256: f023 0306 bic.w r3, r3, #6 + 800b25a: 6113 str r3, [r2, #16] + 800b25c: 687b ldr r3, [r7, #4] + 800b25e: 681b ldr r3, [r3, #0] + 800b260: f503 6360 add.w r3, r3, #3584 @ 0xe00 + 800b264: 681b ldr r3, [r3, #0] + 800b266: 687a ldr r2, [r7, #4] + 800b268: 6812 ldr r2, [r2, #0] + 800b26a: f502 6260 add.w r2, r2, #3584 @ 0xe00 + 800b26e: f023 0301 bic.w r3, r3, #1 + 800b272: 6013 str r3, [r2, #0] + 800b274: 687b ldr r3, [r7, #4] + 800b276: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800b27a: 4618 mov r0, r3 + 800b27c: f7fe fb90 bl 80099a0 + 800b280: e01c b.n 800b2bc + 800b282: 687b ldr r3, [r7, #4] + 800b284: 681b ldr r3, [r3, #0] + 800b286: f503 6360 add.w r3, r3, #3584 @ 0xe00 + 800b28a: 681b ldr r3, [r3, #0] + 800b28c: 687a ldr r2, [r7, #4] + 800b28e: 6812 ldr r2, [r2, #0] + 800b290: f502 6260 add.w r2, r2, #3584 @ 0xe00 + 800b294: f043 0301 orr.w r3, r3, #1 + 800b298: 6013 str r3, [r2, #0] + 800b29a: 687b ldr r3, [r7, #4] + 800b29c: f8d3 34e0 ldr.w r3, [r3, #1248] @ 0x4e0 + 800b2a0: 4618 mov r0, r3 + 800b2a2: f7fe fb61 bl 8009968 + 800b2a6: 687b ldr r3, [r7, #4] + 800b2a8: 7adb ldrb r3, [r3, #11] + 800b2aa: 2b00 cmp r3, #0 + 800b2ac: d005 beq.n 800b2ba + 800b2ae: 4b05 ldr r3, [pc, #20] @ (800b2c4 ) + 800b2b0: 691b ldr r3, [r3, #16] + 800b2b2: 4a04 ldr r2, [pc, #16] @ (800b2c4 ) + 800b2b4: f043 0306 orr.w r3, r3, #6 + 800b2b8: 6113 str r3, [r2, #16] + 800b2ba: bf00 nop + 800b2bc: bf00 nop + 800b2be: 3708 adds r7, #8 + 800b2c0: 46bd mov sp, r7 + 800b2c2: bd80 pop {r7, pc} + 800b2c4: e000ed00 .word 0xe000ed00 + +0800b2c8 : + 800b2c8: b480 push {r7} + 800b2ca: b083 sub sp, #12 + 800b2cc: af00 add r7, sp, #0 + 800b2ce: 6078 str r0, [r7, #4] + 800b2d0: 4b03 ldr r3, [pc, #12] @ (800b2e0 ) + 800b2d2: 4618 mov r0, r3 + 800b2d4: 370c adds r7, #12 + 800b2d6: 46bd mov sp, r7 + 800b2d8: f85d 7b04 ldr.w r7, [sp], #4 + 800b2dc: 4770 bx lr + 800b2de: bf00 nop + 800b2e0: 20001748 .word 0x20001748 + +0800b2e4 : + 800b2e4: b480 push {r7} + 800b2e6: b083 sub sp, #12 + 800b2e8: af00 add r7, sp, #0 + 800b2ea: 6078 str r0, [r7, #4] + 800b2ec: bf00 nop + 800b2ee: 370c adds r7, #12 + 800b2f0: 46bd mov sp, r7 + 800b2f2: f85d 7b04 ldr.w r7, [sp], #4 + 800b2f6: 4770 bx lr + +0800b2f8 : + 800b2f8: b480 push {r7} + 800b2fa: b085 sub sp, #20 + 800b2fc: af00 add r7, sp, #0 + 800b2fe: 4603 mov r3, r0 + 800b300: 71fb strb r3, [r7, #7] + 800b302: 2300 movs r3, #0 + 800b304: 73fb strb r3, [r7, #15] + 800b306: 79fb ldrb r3, [r7, #7] + 800b308: 2b03 cmp r3, #3 + 800b30a: d817 bhi.n 800b33c + 800b30c: a201 add r2, pc, #4 @ (adr r2, 800b314 ) + 800b30e: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800b312: bf00 nop + 800b314: 0800b325 .word 0x0800b325 + 800b318: 0800b32b .word 0x0800b32b + 800b31c: 0800b331 .word 0x0800b331 + 800b320: 0800b337 .word 0x0800b337 + 800b324: 2300 movs r3, #0 + 800b326: 73fb strb r3, [r7, #15] + 800b328: e00b b.n 800b342 + 800b32a: 2303 movs r3, #3 + 800b32c: 73fb strb r3, [r7, #15] + 800b32e: e008 b.n 800b342 + 800b330: 2301 movs r3, #1 + 800b332: 73fb strb r3, [r7, #15] + 800b334: e005 b.n 800b342 + 800b336: 2303 movs r3, #3 + 800b338: 73fb strb r3, [r7, #15] + 800b33a: e002 b.n 800b342 + 800b33c: 2303 movs r3, #3 + 800b33e: 73fb strb r3, [r7, #15] + 800b340: bf00 nop + 800b342: 7bfb ldrb r3, [r7, #15] + 800b344: 4618 mov r0, r3 + 800b346: 3714 adds r7, #20 + 800b348: 46bd mov sp, r7 + 800b34a: f85d 7b04 ldr.w r7, [sp], #4 + 800b34e: 4770 bx lr + +0800b350 : + 800b350: 4402 add r2, r0 + 800b352: 4603 mov r3, r0 + 800b354: 4293 cmp r3, r2 + 800b356: d100 bne.n 800b35a + 800b358: 4770 bx lr + 800b35a: f803 1b01 strb.w r1, [r3], #1 + 800b35e: e7f9 b.n 800b354 + +0800b360 <__libc_init_array>: + 800b360: b570 push {r4, r5, r6, lr} + 800b362: 4d0d ldr r5, [pc, #52] @ (800b398 <__libc_init_array+0x38>) + 800b364: 4c0d ldr r4, [pc, #52] @ (800b39c <__libc_init_array+0x3c>) + 800b366: 1b64 subs r4, r4, r5 + 800b368: 10a4 asrs r4, r4, #2 + 800b36a: 2600 movs r6, #0 + 800b36c: 42a6 cmp r6, r4 + 800b36e: d109 bne.n 800b384 <__libc_init_array+0x24> + 800b370: 4d0b ldr r5, [pc, #44] @ (800b3a0 <__libc_init_array+0x40>) + 800b372: 4c0c ldr r4, [pc, #48] @ (800b3a4 <__libc_init_array+0x44>) + 800b374: f000 f826 bl 800b3c4 <_init> + 800b378: 1b64 subs r4, r4, r5 + 800b37a: 10a4 asrs r4, r4, #2 + 800b37c: 2600 movs r6, #0 + 800b37e: 42a6 cmp r6, r4 + 800b380: d105 bne.n 800b38e <__libc_init_array+0x2e> + 800b382: bd70 pop {r4, r5, r6, pc} + 800b384: f855 3b04 ldr.w r3, [r5], #4 + 800b388: 4798 blx r3 + 800b38a: 3601 adds r6, #1 + 800b38c: e7ee b.n 800b36c <__libc_init_array+0xc> + 800b38e: f855 3b04 ldr.w r3, [r5], #4 + 800b392: 4798 blx r3 + 800b394: 3601 adds r6, #1 + 800b396: e7f2 b.n 800b37e <__libc_init_array+0x1e> + 800b398: 0800b440 .word 0x0800b440 + 800b39c: 0800b440 .word 0x0800b440 + 800b3a0: 0800b440 .word 0x0800b440 + 800b3a4: 0800b444 .word 0x0800b444 + +0800b3a8 : + 800b3a8: 440a add r2, r1 + 800b3aa: 4291 cmp r1, r2 + 800b3ac: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff + 800b3b0: d100 bne.n 800b3b4 + 800b3b2: 4770 bx lr + 800b3b4: b510 push {r4, lr} + 800b3b6: f811 4b01 ldrb.w r4, [r1], #1 + 800b3ba: f803 4f01 strb.w r4, [r3, #1]! + 800b3be: 4291 cmp r1, r2 + 800b3c0: d1f9 bne.n 800b3b6 + 800b3c2: bd10 pop {r4, pc} + +0800b3c4 <_init>: + 800b3c4: b5f8 push {r3, r4, r5, r6, r7, lr} + 800b3c6: bf00 nop + 800b3c8: bcf8 pop {r3, r4, r5, r6, r7} + 800b3ca: bc08 pop {r3} + 800b3cc: 469e mov lr, r3 + 800b3ce: 4770 bx lr + +0800b3d0 <_fini>: + 800b3d0: b5f8 push {r3, r4, r5, r6, r7, lr} + 800b3d2: bf00 nop + 800b3d4: bcf8 pop {r3, r4, r5, r6, r7} + 800b3d6: bc08 pop {r3} + 800b3d8: 469e mov lr, r3 + 800b3da: 4770 bx lr diff --git a/firmware/67percent/Debug/modularkbd.map b/firmware/67percent/Debug/modularkbd.map new file mode 100644 index 00000000..289ae007 --- /dev/null +++ b/firmware/67percent/Debug/modularkbd.map @@ -0,0 +1,7230 @@ +Archive member included to satisfy reference by file (symbol) + +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (exit) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) (__stdio_exit_handler) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (_fwalk_sglue) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (__sread) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (memset) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_close_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) (errno) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) (_impure_ptr) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_lseek_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_read_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_write_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + ./Core/Src/syscalls.o (__errno) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (__libc_init_array) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (__retarget_lock_init_recursive) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + ./Core/Src/main.o (memcpy) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) (_free_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (_malloc_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) (__malloc_lock) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (_fflush_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) (_sbrk_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o (__aeabi_uldivmod) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) (__udivmoddi4) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) (__aeabi_ldiv0) + +Discarded input sections + + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .rodata 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x00000000 0x7c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.extab 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.exidx 0x00000000 0x10 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.attributes + 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/dma.o + .text 0x00000000 0x0 ./Core/Src/dma.o + .data 0x00000000 0x0 ./Core/Src/dma.o + .bss 0x00000000 0x0 ./Core/Src/dma.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/gpio.o + .text 0x00000000 0x0 ./Core/Src/gpio.o + .data 0x00000000 0x0 ./Core/Src/gpio.o + .bss 0x00000000 0x0 ./Core/Src/gpio.o + .debug_macro 0x00000000 0xad8 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x2e ./Core/Src/gpio.o + .debug_macro 0x00000000 0x28 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x22 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x8e ./Core/Src/gpio.o + .debug_macro 0x00000000 0x51 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x103 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x6a ./Core/Src/gpio.o + .debug_macro 0x00000000 0x1df ./Core/Src/gpio.o + .debug_macro 0x00000000 0x1c ./Core/Src/gpio.o + .debug_macro 0x00000000 0x22 ./Core/Src/gpio.o + .debug_macro 0x00000000 0xfb ./Core/Src/gpio.o + .debug_macro 0x00000000 0x1011 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x11f ./Core/Src/gpio.o + .debug_macro 0x00000000 0x1675e ./Core/Src/gpio.o + .debug_macro 0x00000000 0x6d ./Core/Src/gpio.o + .debug_macro 0x00000000 0x3693 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x190 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x5c ./Core/Src/gpio.o + .debug_macro 0x00000000 0xca5 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x115 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/gpio.o + .debug_macro 0x00000000 0xa5 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x16d ./Core/Src/gpio.o + .debug_macro 0x00000000 0x287 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x5f ./Core/Src/gpio.o + .debug_macro 0x00000000 0x236 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x132 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x29c ./Core/Src/gpio.o + .debug_macro 0x00000000 0x2e ./Core/Src/gpio.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x22 ./Core/Src/gpio.o + .debug_macro 0x00000000 0xd6 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x127 ./Core/Src/gpio.o + .debug_macro 0x00000000 0xe8 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x89 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x8ed ./Core/Src/gpio.o + .debug_macro 0x00000000 0x53 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x2aa ./Core/Src/gpio.o + .debug_macro 0x00000000 0x293 ./Core/Src/gpio.o + .debug_macro 0x00000000 0xba ./Core/Src/gpio.o + .debug_macro 0x00000000 0x126 ./Core/Src/gpio.o + .debug_macro 0x00000000 0x304 ./Core/Src/gpio.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/hid_queue.o + .text 0x00000000 0x0 ./Core/Src/hid_queue.o + .data 0x00000000 0x0 ./Core/Src/hid_queue.o + .bss 0x00000000 0x0 ./Core/Src/hid_queue.o + .text.hid_queue_init + 0x00000000 0x50 ./Core/Src/hid_queue.o + .text.hid_queue_reset + 0x00000000 0x2e ./Core/Src/hid_queue.o + .text.hid_queue_is_empty + 0x00000000 0x22 ./Core/Src/hid_queue.o + .text.hid_queue_is_full + 0x00000000 0x26 ./Core/Src/hid_queue.o + .text.hid_queue_push + 0x00000000 0x7e ./Core/Src/hid_queue.o + .text.hid_queue_pop + 0x00000000 0x76 ./Core/Src/hid_queue.o + .debug_info 0x00000000 0x25c ./Core/Src/hid_queue.o + .debug_abbrev 0x00000000 0x112 ./Core/Src/hid_queue.o + .debug_aranges + 0x00000000 0x48 ./Core/Src/hid_queue.o + .debug_rnglists + 0x00000000 0x31 ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x76 ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0xad8 ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x22 ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x8e ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x51 ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x103 ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x6a ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x1df ./Core/Src/hid_queue.o + .debug_macro 0x00000000 0x22 ./Core/Src/hid_queue.o + .debug_line 0x00000000 0x498 ./Core/Src/hid_queue.o + .debug_str 0x00000000 0x3ec2 ./Core/Src/hid_queue.o + .comment 0x00000000 0x44 ./Core/Src/hid_queue.o + .debug_frame 0x00000000 0x10c ./Core/Src/hid_queue.o + .ARM.attributes + 0x00000000 0x34 ./Core/Src/hid_queue.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/i2c.o + .text 0x00000000 0x0 ./Core/Src/i2c.o + .data 0x00000000 0x0 ./Core/Src/i2c.o + .bss 0x00000000 0x0 ./Core/Src/i2c.o + .text.HAL_I2C_MspDeInit + 0x00000000 0x44 ./Core/Src/i2c.o + .debug_macro 0x00000000 0xad8 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x2e ./Core/Src/i2c.o + .debug_macro 0x00000000 0x28 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x22 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x8e ./Core/Src/i2c.o + .debug_macro 0x00000000 0x51 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x103 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x6a ./Core/Src/i2c.o + .debug_macro 0x00000000 0x1df ./Core/Src/i2c.o + .debug_macro 0x00000000 0x1c ./Core/Src/i2c.o + .debug_macro 0x00000000 0x22 ./Core/Src/i2c.o + .debug_macro 0x00000000 0xfb ./Core/Src/i2c.o + .debug_macro 0x00000000 0x1011 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x11f ./Core/Src/i2c.o + .debug_macro 0x00000000 0x1675e ./Core/Src/i2c.o + .debug_macro 0x00000000 0x6d ./Core/Src/i2c.o + .debug_macro 0x00000000 0x3693 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x190 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x5c ./Core/Src/i2c.o + .debug_macro 0x00000000 0xca5 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x115 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/i2c.o + .debug_macro 0x00000000 0xa5 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x16d ./Core/Src/i2c.o + .debug_macro 0x00000000 0x287 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x5f ./Core/Src/i2c.o + .debug_macro 0x00000000 0x236 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x132 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x29c ./Core/Src/i2c.o + .debug_macro 0x00000000 0x2e ./Core/Src/i2c.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x22 ./Core/Src/i2c.o + .debug_macro 0x00000000 0xd6 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x127 ./Core/Src/i2c.o + .debug_macro 0x00000000 0xe8 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x89 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x8ed ./Core/Src/i2c.o + .debug_macro 0x00000000 0x53 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x2aa ./Core/Src/i2c.o + .debug_macro 0x00000000 0x293 ./Core/Src/i2c.o + .debug_macro 0x00000000 0xba ./Core/Src/i2c.o + .debug_macro 0x00000000 0x126 ./Core/Src/i2c.o + .debug_macro 0x00000000 0x304 ./Core/Src/i2c.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/main.o + .text 0x00000000 0x0 ./Core/Src/main.o + .data 0x00000000 0x0 ./Core/Src/main.o + .bss 0x00000000 0x0 ./Core/Src/main.o + .bss.reportBuff + 0x00000000 0x10 ./Core/Src/main.o + .bss.uartBuffer + 0x00000000 0x10 ./Core/Src/main.o + .bss.uartUpdateFlag + 0x00000000 0x4 ./Core/Src/main.o + .debug_macro 0x00000000 0xad8 ./Core/Src/main.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/main.o + .debug_macro 0x00000000 0x2e ./Core/Src/main.o + .debug_macro 0x00000000 0x28 ./Core/Src/main.o + .debug_macro 0x00000000 0x22 ./Core/Src/main.o + .debug_macro 0x00000000 0x8e ./Core/Src/main.o + .debug_macro 0x00000000 0x51 ./Core/Src/main.o + .debug_macro 0x00000000 0x103 ./Core/Src/main.o + .debug_macro 0x00000000 0x6a ./Core/Src/main.o + .debug_macro 0x00000000 0x1df ./Core/Src/main.o + .debug_macro 0x00000000 0x1c ./Core/Src/main.o + .debug_macro 0x00000000 0x22 ./Core/Src/main.o + .debug_macro 0x00000000 0xfb ./Core/Src/main.o + .debug_macro 0x00000000 0x1011 ./Core/Src/main.o + .debug_macro 0x00000000 0x11f ./Core/Src/main.o + .debug_macro 0x00000000 0x1675e ./Core/Src/main.o + .debug_macro 0x00000000 0x6d ./Core/Src/main.o + .debug_macro 0x00000000 0x3693 ./Core/Src/main.o + .debug_macro 0x00000000 0x190 ./Core/Src/main.o + .debug_macro 0x00000000 0x5c ./Core/Src/main.o + .debug_macro 0x00000000 0xca5 ./Core/Src/main.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/main.o + .debug_macro 0x00000000 0x115 ./Core/Src/main.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/main.o + .debug_macro 0x00000000 0xa5 ./Core/Src/main.o + .debug_macro 0x00000000 0x16d ./Core/Src/main.o + .debug_macro 0x00000000 0x287 ./Core/Src/main.o + .debug_macro 0x00000000 0x5f ./Core/Src/main.o + .debug_macro 0x00000000 0x236 ./Core/Src/main.o + .debug_macro 0x00000000 0x132 ./Core/Src/main.o + .debug_macro 0x00000000 0x29c ./Core/Src/main.o + .debug_macro 0x00000000 0x2e ./Core/Src/main.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/main.o + .debug_macro 0x00000000 0x22 ./Core/Src/main.o + .debug_macro 0x00000000 0xd6 ./Core/Src/main.o + .debug_macro 0x00000000 0x127 ./Core/Src/main.o + .debug_macro 0x00000000 0xe8 ./Core/Src/main.o + .debug_macro 0x00000000 0x89 ./Core/Src/main.o + .debug_macro 0x00000000 0x8ed ./Core/Src/main.o + .debug_macro 0x00000000 0x53 ./Core/Src/main.o + .debug_macro 0x00000000 0x2aa ./Core/Src/main.o + .debug_macro 0x00000000 0x293 ./Core/Src/main.o + .debug_macro 0x00000000 0xba ./Core/Src/main.o + .debug_macro 0x00000000 0x126 ./Core/Src/main.o + .debug_macro 0x00000000 0x304 ./Core/Src/main.o + .debug_macro 0x00000000 0x22 ./Core/Src/main.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/pwm.o + .text 0x00000000 0x0 ./Core/Src/pwm.o + .data 0x00000000 0x0 ./Core/Src/pwm.o + .bss 0x00000000 0x0 ./Core/Src/pwm.o + .text.PWM_Stop + 0x00000000 0x14 ./Core/Src/pwm.o + .text.PWM_SetDuty + 0x00000000 0x34 ./Core/Src/pwm.o + .text.PWM_SetPercent + 0x00000000 0x44 ./Core/Src/pwm.o + .debug_macro 0x00000000 0xad8 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x2e ./Core/Src/pwm.o + .debug_macro 0x00000000 0x28 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x22 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x8e ./Core/Src/pwm.o + .debug_macro 0x00000000 0x51 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x103 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x6a ./Core/Src/pwm.o + .debug_macro 0x00000000 0x1df ./Core/Src/pwm.o + .debug_macro 0x00000000 0x1c ./Core/Src/pwm.o + .debug_macro 0x00000000 0x22 ./Core/Src/pwm.o + .debug_macro 0x00000000 0xfb ./Core/Src/pwm.o + .debug_macro 0x00000000 0x1011 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x11f ./Core/Src/pwm.o + .debug_macro 0x00000000 0x1675e ./Core/Src/pwm.o + .debug_macro 0x00000000 0x6d ./Core/Src/pwm.o + .debug_macro 0x00000000 0x3693 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x190 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x5c ./Core/Src/pwm.o + .debug_macro 0x00000000 0xca5 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x115 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/pwm.o + .debug_macro 0x00000000 0xa5 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x16d ./Core/Src/pwm.o + .debug_macro 0x00000000 0x287 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x5f ./Core/Src/pwm.o + .debug_macro 0x00000000 0x236 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x132 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x29c ./Core/Src/pwm.o + .debug_macro 0x00000000 0x2e ./Core/Src/pwm.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x22 ./Core/Src/pwm.o + .debug_macro 0x00000000 0xd6 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x127 ./Core/Src/pwm.o + .debug_macro 0x00000000 0xe8 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x89 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x8ed ./Core/Src/pwm.o + .debug_macro 0x00000000 0x53 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x2aa ./Core/Src/pwm.o + .debug_macro 0x00000000 0x293 ./Core/Src/pwm.o + .debug_macro 0x00000000 0xba ./Core/Src/pwm.o + .debug_macro 0x00000000 0x126 ./Core/Src/pwm.o + .debug_macro 0x00000000 0x304 ./Core/Src/pwm.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .text 0x00000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .data 0x00000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .bss 0x00000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xad8 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x2e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x28 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x22 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x8e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x51 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x103 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x6a ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x1df ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x1c ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x22 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xfb ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x1011 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x11f ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x1675e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x6d ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x3693 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x190 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x5c ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xca5 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x115 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xa5 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x16d ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x287 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x5f ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x236 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x132 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x29c ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x2e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x22 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xd6 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x127 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xe8 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x89 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x8ed ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x53 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x2aa ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x293 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0xba ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x126 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00000000 0x304 ./Core/Src/stm32f4xx_hal_msp.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/stm32f4xx_it.o + .text 0x00000000 0x0 ./Core/Src/stm32f4xx_it.o + .data 0x00000000 0x0 ./Core/Src/stm32f4xx_it.o + .bss 0x00000000 0x0 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xad8 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x2e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x28 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x22 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x8e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x51 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x103 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x6a ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x1df ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x1c ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x22 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xfb ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x1011 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x11f ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x1675e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x6d ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x3693 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x190 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x5c ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xca5 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x115 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xa5 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x16d ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x287 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x5f ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x236 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x132 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x29c ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x2e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x22 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xd6 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x127 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xe8 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x89 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x8ed ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x53 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x2aa ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x293 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0xba ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x126 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000 0x304 ./Core/Src/stm32f4xx_it.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/syscalls.o + .text 0x00000000 0x0 ./Core/Src/syscalls.o + .data 0x00000000 0x0 ./Core/Src/syscalls.o + .bss 0x00000000 0x0 ./Core/Src/syscalls.o + .bss.__env 0x00000000 0x4 ./Core/Src/syscalls.o + .data.environ 0x00000000 0x4 ./Core/Src/syscalls.o + .text.initialise_monitor_handles + 0x00000000 0xe ./Core/Src/syscalls.o + .text._getpid 0x00000000 0x10 ./Core/Src/syscalls.o + .text._kill 0x00000000 0x20 ./Core/Src/syscalls.o + .text._exit 0x00000000 0x16 ./Core/Src/syscalls.o + .text._read 0x00000000 0x3a ./Core/Src/syscalls.o + .text._write 0x00000000 0x38 ./Core/Src/syscalls.o + .text._close 0x00000000 0x18 ./Core/Src/syscalls.o + .text._fstat 0x00000000 0x20 ./Core/Src/syscalls.o + .text._isatty 0x00000000 0x16 ./Core/Src/syscalls.o + .text._lseek 0x00000000 0x1a ./Core/Src/syscalls.o + .text._open 0x00000000 0x1c ./Core/Src/syscalls.o + .text._wait 0x00000000 0x1e ./Core/Src/syscalls.o + .text._unlink 0x00000000 0x1e ./Core/Src/syscalls.o + .text._times 0x00000000 0x18 ./Core/Src/syscalls.o + .text._stat 0x00000000 0x20 ./Core/Src/syscalls.o + .text._link 0x00000000 0x20 ./Core/Src/syscalls.o + .text._fork 0x00000000 0x16 ./Core/Src/syscalls.o + .text._execve 0x00000000 0x22 ./Core/Src/syscalls.o + .debug_info 0x00000000 0x6a3 ./Core/Src/syscalls.o + .debug_abbrev 0x00000000 0x1b6 ./Core/Src/syscalls.o + .debug_aranges + 0x00000000 0xa8 ./Core/Src/syscalls.o + .debug_rnglists + 0x00000000 0x79 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x274 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0xad8 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x22 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x5b ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x2a ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x94 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x43 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x34 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x57 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x190 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x370 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x4a ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x34 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x58 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x8e ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x185 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x3c ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x6a ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x52 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x22 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x52 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0xcf ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x3d ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x35 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x12c ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x29 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x242 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x146 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x103 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x1df ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x18a ./Core/Src/syscalls.o + .debug_macro 0x00000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x00000000 0xce ./Core/Src/syscalls.o + .debug_line 0x00000000 0x7ff ./Core/Src/syscalls.o + .debug_str 0x00000000 0x99dd ./Core/Src/syscalls.o + .comment 0x00000000 0x44 ./Core/Src/syscalls.o + .debug_frame 0x00000000 0x2ac ./Core/Src/syscalls.o + .ARM.attributes + 0x00000000 0x34 ./Core/Src/syscalls.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/sysmem.o + .text 0x00000000 0x0 ./Core/Src/sysmem.o + .data 0x00000000 0x0 ./Core/Src/sysmem.o + .bss 0x00000000 0x0 ./Core/Src/sysmem.o + .bss.__sbrk_heap_end + 0x00000000 0x4 ./Core/Src/sysmem.o + .text._sbrk 0x00000000 0x6c ./Core/Src/sysmem.o + .debug_info 0x00000000 0x168 ./Core/Src/sysmem.o + .debug_abbrev 0x00000000 0xbc ./Core/Src/sysmem.o + .debug_aranges + 0x00000000 0x20 ./Core/Src/sysmem.o + .debug_rnglists + 0x00000000 0x13 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x112 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0xad8 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x10 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x22 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x5b ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x2a ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x94 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x43 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x34 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x190 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x57 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x370 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x16 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x4a ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x34 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x10 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x58 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x8e ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x1c ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x185 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x23c ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x103 ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x6a ./Core/Src/sysmem.o + .debug_macro 0x00000000 0x1df ./Core/Src/sysmem.o + .debug_line 0x00000000 0x4db ./Core/Src/sysmem.o + .debug_str 0x00000000 0x777b ./Core/Src/sysmem.o + .comment 0x00000000 0x44 ./Core/Src/sysmem.o + .debug_frame 0x00000000 0x34 ./Core/Src/sysmem.o + .ARM.attributes + 0x00000000 0x34 ./Core/Src/sysmem.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/system_stm32f4xx.o + .text 0x00000000 0x0 ./Core/Src/system_stm32f4xx.o + .data 0x00000000 0x0 ./Core/Src/system_stm32f4xx.o + .bss 0x00000000 0x0 ./Core/Src/system_stm32f4xx.o + .text.SystemCoreClockUpdate + 0x00000000 0xec ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xad8 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x2e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x28 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x22 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x8e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x51 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x103 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x6a ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x1df ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x1c ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x22 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xfb ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x1011 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x11f ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x1675e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x6d ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x3693 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x190 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x5c ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xca5 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x115 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xa5 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x16d ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x287 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x5f ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x236 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x132 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x29c ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x2e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x22 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xd6 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x127 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xe8 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x89 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x8ed ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x53 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x2aa ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x293 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0xba ./Core/Src/system_stm32f4xx.o + .debug_macro 0x00000000 0x126 ./Core/Src/system_stm32f4xx.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/tim.o + .text 0x00000000 0x0 ./Core/Src/tim.o + .data 0x00000000 0x0 ./Core/Src/tim.o + .bss 0x00000000 0x0 ./Core/Src/tim.o + .text.HAL_TIM_OC_MspDeInit + 0x00000000 0x30 ./Core/Src/tim.o + .text.HAL_TIM_Encoder_MspDeInit + 0x00000000 0x3c ./Core/Src/tim.o + .debug_macro 0x00000000 0xad8 ./Core/Src/tim.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/tim.o + .debug_macro 0x00000000 0x2e ./Core/Src/tim.o + .debug_macro 0x00000000 0x28 ./Core/Src/tim.o + .debug_macro 0x00000000 0x22 ./Core/Src/tim.o + .debug_macro 0x00000000 0x8e ./Core/Src/tim.o + .debug_macro 0x00000000 0x51 ./Core/Src/tim.o + .debug_macro 0x00000000 0x103 ./Core/Src/tim.o + .debug_macro 0x00000000 0x6a ./Core/Src/tim.o + .debug_macro 0x00000000 0x1df ./Core/Src/tim.o + .debug_macro 0x00000000 0x1c ./Core/Src/tim.o + .debug_macro 0x00000000 0x22 ./Core/Src/tim.o + .debug_macro 0x00000000 0xfb ./Core/Src/tim.o + .debug_macro 0x00000000 0x1011 ./Core/Src/tim.o + .debug_macro 0x00000000 0x11f ./Core/Src/tim.o + .debug_macro 0x00000000 0x1675e ./Core/Src/tim.o + .debug_macro 0x00000000 0x6d ./Core/Src/tim.o + .debug_macro 0x00000000 0x3693 ./Core/Src/tim.o + .debug_macro 0x00000000 0x190 ./Core/Src/tim.o + .debug_macro 0x00000000 0x5c ./Core/Src/tim.o + .debug_macro 0x00000000 0xca5 ./Core/Src/tim.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/tim.o + .debug_macro 0x00000000 0x115 ./Core/Src/tim.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/tim.o + .debug_macro 0x00000000 0xa5 ./Core/Src/tim.o + .debug_macro 0x00000000 0x16d ./Core/Src/tim.o + .debug_macro 0x00000000 0x287 ./Core/Src/tim.o + .debug_macro 0x00000000 0x5f ./Core/Src/tim.o + .debug_macro 0x00000000 0x236 ./Core/Src/tim.o + .debug_macro 0x00000000 0x132 ./Core/Src/tim.o + .debug_macro 0x00000000 0x29c ./Core/Src/tim.o + .debug_macro 0x00000000 0x2e ./Core/Src/tim.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/tim.o + .debug_macro 0x00000000 0x22 ./Core/Src/tim.o + .debug_macro 0x00000000 0xd6 ./Core/Src/tim.o + .debug_macro 0x00000000 0x127 ./Core/Src/tim.o + .debug_macro 0x00000000 0xe8 ./Core/Src/tim.o + .debug_macro 0x00000000 0x89 ./Core/Src/tim.o + .debug_macro 0x00000000 0x8ed ./Core/Src/tim.o + .debug_macro 0x00000000 0x53 ./Core/Src/tim.o + .debug_macro 0x00000000 0x2aa ./Core/Src/tim.o + .debug_macro 0x00000000 0x293 ./Core/Src/tim.o + .debug_macro 0x00000000 0xba ./Core/Src/tim.o + .debug_macro 0x00000000 0x126 ./Core/Src/tim.o + .debug_macro 0x00000000 0x304 ./Core/Src/tim.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .group 0x00000000 0xc ./Core/Src/usart.o + .text 0x00000000 0x0 ./Core/Src/usart.o + .data 0x00000000 0x0 ./Core/Src/usart.o + .bss 0x00000000 0x0 ./Core/Src/usart.o + .text.HAL_UART_MspDeInit + 0x00000000 0x124 ./Core/Src/usart.o + .debug_macro 0x00000000 0xad8 ./Core/Src/usart.o + .debug_macro 0x00000000 0x2a7 ./Core/Src/usart.o + .debug_macro 0x00000000 0x2e ./Core/Src/usart.o + .debug_macro 0x00000000 0x28 ./Core/Src/usart.o + .debug_macro 0x00000000 0x22 ./Core/Src/usart.o + .debug_macro 0x00000000 0x8e ./Core/Src/usart.o + .debug_macro 0x00000000 0x51 ./Core/Src/usart.o + .debug_macro 0x00000000 0x103 ./Core/Src/usart.o + .debug_macro 0x00000000 0x6a ./Core/Src/usart.o + .debug_macro 0x00000000 0x1df ./Core/Src/usart.o + .debug_macro 0x00000000 0x1c ./Core/Src/usart.o + .debug_macro 0x00000000 0x22 ./Core/Src/usart.o + .debug_macro 0x00000000 0xfb ./Core/Src/usart.o + .debug_macro 0x00000000 0x1011 ./Core/Src/usart.o + .debug_macro 0x00000000 0x11f ./Core/Src/usart.o + .debug_macro 0x00000000 0x1675e ./Core/Src/usart.o + .debug_macro 0x00000000 0x6d ./Core/Src/usart.o + .debug_macro 0x00000000 0x3693 ./Core/Src/usart.o + .debug_macro 0x00000000 0x190 ./Core/Src/usart.o + .debug_macro 0x00000000 0x5c ./Core/Src/usart.o + .debug_macro 0x00000000 0xca5 ./Core/Src/usart.o + .debug_macro 0x00000000 0x9e9 ./Core/Src/usart.o + .debug_macro 0x00000000 0x115 ./Core/Src/usart.o + .debug_macro 0x00000000 0x1a0 ./Core/Src/usart.o + .debug_macro 0x00000000 0xa5 ./Core/Src/usart.o + .debug_macro 0x00000000 0x16d ./Core/Src/usart.o + .debug_macro 0x00000000 0x287 ./Core/Src/usart.o + .debug_macro 0x00000000 0x5f ./Core/Src/usart.o + .debug_macro 0x00000000 0x236 ./Core/Src/usart.o + .debug_macro 0x00000000 0x132 ./Core/Src/usart.o + .debug_macro 0x00000000 0x29c ./Core/Src/usart.o + .debug_macro 0x00000000 0x2e ./Core/Src/usart.o + .debug_macro 0x00000000 0x1b5 ./Core/Src/usart.o + .debug_macro 0x00000000 0x22 ./Core/Src/usart.o + .debug_macro 0x00000000 0xd6 ./Core/Src/usart.o + .debug_macro 0x00000000 0x127 ./Core/Src/usart.o + .debug_macro 0x00000000 0xe8 ./Core/Src/usart.o + .debug_macro 0x00000000 0x89 ./Core/Src/usart.o + .debug_macro 0x00000000 0x8ed ./Core/Src/usart.o + .debug_macro 0x00000000 0x53 ./Core/Src/usart.o + .debug_macro 0x00000000 0x2aa ./Core/Src/usart.o + .debug_macro 0x00000000 0x293 ./Core/Src/usart.o + .debug_macro 0x00000000 0xba ./Core/Src/usart.o + .debug_macro 0x00000000 0x126 ./Core/Src/usart.o + .debug_macro 0x00000000 0x304 ./Core/Src/usart.o + .text 0x00000000 0x14 ./Core/Startup/startup_stm32f446retx.o + .data 0x00000000 0x0 ./Core/Startup/startup_stm32f446retx.o + .bss 0x00000000 0x0 ./Core/Startup/startup_stm32f446retx.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DeInit + 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_MspInit + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_MspDeInit + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetTickPrio + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_SetTickFreq + 0x00000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetTickFreq + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_SuspendTick + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_ResumeTick + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetHalVersion + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetREVID + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetDEVID + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGSleepMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGSleepMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGStopMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGStopMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGStandbyMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGStandbyMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_EnableCompensationCell + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DisableCompensationCell + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw0 + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw1 + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw2 + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_DisableIRQ + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetPendingIRQ + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_SetPendingIRQ + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_ClearPendingIRQ + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetActive + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetPriority + 0x00000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.NVIC_DecodePriority + 0x00000000 0x6e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_SystemReset + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_DisableIRQ + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SystemReset + 0x00000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_Disable + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_Enable + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_EnableRegion + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_DisableRegion + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_ConfigRegion + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_CORTEX_ClearEvent + 0x00000000 0x12 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPriorityGrouping + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPriority + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SetPendingIRQ + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPendingIRQ + 0x00000000 0x1e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_ClearPendingIRQ + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetActive + 0x00000000 0x1e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_CLKSourceConfig + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_IRQHandler + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_Callback + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_DeInit + 0x00000000 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Start + 0x00000000 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_PollForTransfer + 0x00000000 0x1be ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_RegisterCallback + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_UnRegisterCallback + 0x00000000 0xd4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_GetError + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart + 0x00000000 0x96 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart_IT + 0x00000000 0x1290 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_ChangeMemory + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.DMA_MultiBufferSetConfig + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_info 0x00000000 0x4df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_abbrev 0x00000000 0x1a3 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_aranges + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_rnglists + 0x00000000 0x27 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_line 0x00000000 0x1388 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_str 0x00000000 0xcc7ce ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_frame 0x00000000 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_SetConfigLine + 0x00000000 0x150 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetConfigLine + 0x00000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_ClearConfigLine + 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_RegisterCallback + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetHandle + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_IRQHandler + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetPending + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_ClearPending + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GenerateSWI + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_info 0x00000000 0x50c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_abbrev 0x00000000 0x1c6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_aranges + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_rnglists + 0x00000000 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_line 0x00000000 0xa15 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_str 0x00000000 0xcc675 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_frame 0x00000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .data.pFlash 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Program + 0x00000000 0xa4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Program_IT + 0x00000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_IRQHandler + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_EndOfOperationCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OperationErrorCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Unlock + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Lock + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Unlock + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Lock + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Launch + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_GetError + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_WaitForLastOperation + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_DoubleWord + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_Word + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_HalfWord + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_Byte + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_SetErrorCode + 0x00000000 0xcc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_info 0x00000000 0x57d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_abbrev 0x00000000 0x28c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_aranges + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_rnglists + 0x00000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x211 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_line 0x00000000 0xac0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_str 0x00000000 0xcc7ea ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_frame 0x00000000 0x274 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase + 0x00000000 0xdc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase_IT + 0x00000000 0x98 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBProgram + 0x00000000 0xdc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetConfig + 0x00000000 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_AdvOBProgram + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_AdvOBGetConfig + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OB_SelectPCROP + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OB_DeSelectPCROP + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_MassErase + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_Erase_Sector + 0x00000000 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_EnableWRP + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_DisableWRP + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_EnablePCROP + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_DisablePCROP + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_RDP_LevelConfig + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_UserConfig + 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_BOR_LevelConfig + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetUser + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetWRP + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetRDP + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetBOR + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_FlushCaches + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_info 0x00000000 0x7db ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_abbrev 0x00000000 0x26c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_aranges + 0x00000000 0xc8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_rnglists + 0x00000000 0x96 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x211 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_line 0x00000000 0xbc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_str 0x00000000 0xcc90d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_frame 0x00000000 0x334 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .RamFunc 0x00000000 0x110 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_info 0x00000000 0x36c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_abbrev 0x00000000 0x10e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_aranges + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_rnglists + 0x00000000 0x25 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_line 0x00000000 0x75e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_str 0x00000000 0xcc647 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_frame 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_DeInit + 0x00000000 0x1e8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_TogglePin + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_LockPin + 0x00000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_EXTI_IRQHandler + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_EXTI_Callback + 0x00000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_DeInit + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Flush_DR + 0x00000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit + 0x00000000 0x1fc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Receive + 0x00000000 0x464 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit + 0x00000000 0x22c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive + 0x00000000 0x214 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_IT + 0x00000000 0x144 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_IT + 0x00000000 0x154 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_IT + 0x00000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_IT + 0x00000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_DMA + 0x00000000 0x258 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_DMA + 0x00000000 0x258 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_DMA + 0x00000000 0x1a4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_DMA + 0x00000000 0x1a4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Write + 0x00000000 0x1f4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Read + 0x00000000 0x464 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_IT + 0x00000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_IT + 0x00000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_DMA + 0x00000000 0x2bc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_DMA + 0x00000000 0x320 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_IsDeviceReady + 0x00000000 0x25c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_IT + 0x00000000 0x184 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_DMA + 0x00000000 0x2bc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_IT + 0x00000000 0x1f4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_DMA + 0x00000000 0x364 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_IT + 0x00000000 0xe6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_DMA + 0x00000000 0x274 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_IT + 0x00000000 0xe6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_DMA + 0x00000000 0x274 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_EnableListen_IT + 0x00000000 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_DisableListen_IT + 0x00000000 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Abort_IT + 0x00000000 0xa4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_EV_IRQHandler + 0x00000000 0x2e2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_ER_IRQHandler + 0x00000000 0x14e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MasterTxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MasterRxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_SlaveTxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_SlaveRxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_AddrCallback + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_ListenCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MemTxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MemRxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_ErrorCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_AbortCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_GetMode + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_GetError + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MasterTransmit_TXE + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MasterTransmit_BTF + 0x00000000 0xec ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MemoryTransmit_TXE_BTF + 0x00000000 0x130 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MasterReceive_RXNE + 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MasterReceive_BTF + 0x00000000 0x1e2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Master_SB + 0x00000000 0x10c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Master_ADD10 + 0x00000000 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Master_ADDR + 0x00000000 0x322 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_SlaveTransmit_TXE + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_SlaveTransmit_BTF + 0x00000000 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_SlaveReceive_RXNE + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_SlaveReceive_BTF + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Slave_ADDR + 0x00000000 0x94 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Slave_STOPF + 0x00000000 0x260 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_Slave_AF + 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_ITError + 0x00000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MasterRequestWrite + 0x00000000 0x104 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MasterRequestRead + 0x00000000 0x19c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_RequestMemoryWrite + 0x00000000 0x12c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_RequestMemoryRead + 0x00000000 0x1d0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_DMAXferCplt + 0x00000000 0x1be ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_DMAError + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_DMAAbort + 0x00000000 0x150 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnFlagUntilTimeout + 0x00000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnMasterAddressFlagUntilTimeout + 0x00000000 0x140 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnTXEFlagUntilTimeout + 0x00000000 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnBTFFlagUntilTimeout + 0x00000000 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnSTOPFlagUntilTimeout + 0x00000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnSTOPRequestThroughIT + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnRXNEFlagUntilTimeout + 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_IsAcknowledgeFailed + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_ConvertOtherXferOptions + 0x00000000 0x36 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .text.HAL_I2CEx_ConfigAnalogFilter + 0x00000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .text.HAL_I2CEx_ConfigDigitalFilter + 0x00000000 0x7e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_info 0x00000000 0x672 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_abbrev 0x00000000 0x157 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_aranges + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_rnglists + 0x00000000 0x19 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_line 0x00000000 0x796 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_str 0x00000000 0xcc9dc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .debug_frame 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DeInit + 0x00000000 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_Stop + 0x00000000 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_WKUP_IRQHandler + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DataOutStageCallback + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DataInStageCallback + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SetupStageCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SOFCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ResetCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SuspendCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ResumeCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ISOOUTIncompleteCallback + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ISOINIncompleteCallback + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ConnectCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DisconnectCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DevConnect + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DevDisconnect + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_EP_GetRxCount + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_EP_Flush + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ActivateRemoteWakeup + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DeActivateRemoteWakeup + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SetTestMode + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text.HAL_PCDEx_DeActivateLPM + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text.HAL_PCDEx_LPM_Callback + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text.HAL_PCDEx_BCD_Callback + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DeInit + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableBkUpAccess + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableBkUpAccess + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_ConfigPVD + 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnablePVD + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisablePVD + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableWakeUpPin + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableWakeUpPin + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSLEEPMode + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSTOPMode + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSTANDBYMode + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_PVD_IRQHandler + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_PVDCallback + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableSleepOnExit + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableSleepOnExit + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableSEVOnPend + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableSEVOnPend + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_info 0x00000000 0x731 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_abbrev 0x00000000 0x19c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_aranges + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_rnglists + 0x00000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x223 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_line 0x00000000 0x91b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_str 0x00000000 0xcc855 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_frame 0x00000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableBkUpReg + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableBkUpReg + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableFlashPowerDown + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableFlashPowerDown + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_GetVoltageRange + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_ControlVoltageScaling + 0x00000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableOverDrive + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableOverDrive + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnterUnderDriveSTOPMode + 0x00000000 0xa4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_info 0x00000000 0x6da ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_abbrev 0x00000000 0x1cf ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_aranges + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_rnglists + 0x00000000 0x47 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x223 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_line 0x00000000 0x97a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_str 0x00000000 0xcc7f7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_frame 0x00000000 0x14c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_DeInit + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_OscConfig + 0x00000000 0x500 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_MCOConfig + 0x00000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_EnableCSS + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_DisableCSS + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetSysClockFreq + 0x00000000 0x20c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetOscConfig + 0x00000000 0x128 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetClockConfig + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_NMI_IRQHandler + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_CSSCallback + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKConfig + 0x00000000 0x18c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKFreq + 0x00000000 0x494 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_SelectLSEMode + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLI2S + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLI2S + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLSAI + 0x00000000 0x9c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLSAI + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCC_DeInit + 0x00000000 0x1f0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCC_GetOscConfig + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Init + 0x00000000 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_DeInit + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Start + 0x00000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Stop + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Start_IT + 0x00000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Stop_IT + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Start_DMA + 0x00000000 0x144 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Stop_DMA + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_DeInit + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Start + 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Stop + 0x00000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Start_IT + 0x00000000 0x22c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Stop_IT + 0x00000000 0x17c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Start_DMA + 0x00000000 0x390 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Stop_DMA + 0x00000000 0x1a4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_DeInit + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Stop + 0x00000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Start_IT + 0x00000000 0x22c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Stop_IT + 0x00000000 0x17c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Start_DMA + 0x00000000 0x390 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Stop_DMA + 0x00000000 0x1a4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Init + 0x00000000 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_DeInit + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Start + 0x00000000 0x1b8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Stop + 0x00000000 0xc2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Start_IT + 0x00000000 0x250 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Stop_IT + 0x00000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Start_DMA + 0x00000000 0x354 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Stop_DMA + 0x00000000 0x184 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Init + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_DeInit + 0x00000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Start + 0x00000000 0xc4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Stop + 0x00000000 0xd8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Start_IT + 0x00000000 0xe4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Stop_IT + 0x00000000 0xf8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_DeInit + 0x00000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop + 0x00000000 0x12e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Start_IT + 0x00000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop_IT + 0x00000000 0x16a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Start_DMA + 0x00000000 0x2d8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop_DMA + 0x00000000 0x192 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IRQHandler + 0x00000000 0x1e0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_ConfigChannel + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_ConfigChannel + 0x00000000 0x1a4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_WriteStart + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_MultiWriteStart + 0x00000000 0x2a8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_WriteStop + 0x00000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_ReadStart + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_MultiReadStart + 0x00000000 0x2a8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_ReadStop + 0x00000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_GenerateEvent + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ConfigOCrefClear + 0x00000000 0x198 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ConfigClockSource + 0x00000000 0x18e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ConfigTI1Input + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_SlaveConfigSynchro + 0x00000000 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_SlaveConfigSynchro_IT + 0x00000000 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ReadCapturedValue + 0x00000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PeriodElapsedCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PeriodElapsedHalfCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_DelayElapsedCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_CaptureCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_CaptureHalfCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_PulseFinishedCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_PulseFinishedHalfCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_TriggerCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_TriggerHalfCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ErrorCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_GetActiveChannel + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_GetChannelState + 0x00000000 0x52 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurstState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMAError + 0x00000000 0x92 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMADelayPulseCplt + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMADelayPulseHalfCplt + 0x00000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMACaptureCplt + 0x00000000 0xc8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMACaptureHalfCplt + 0x00000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMAPeriodElapsedCplt + 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMAPeriodElapsedHalfCplt + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMATriggerCplt + 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMATriggerHalfCplt + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_SlaveTimer_SetConfig + 0x00000000 0x122 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI1_SetConfig + 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI1_ConfigInputStage + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI2_SetConfig + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI2_ConfigInputStage + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI3_SetConfig + 0x00000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI4_SetConfig + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_ITRx_SetConfig + 0x00000000 0x36 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_ETR_SetConfig + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Init + 0x00000000 0x152 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_DeInit + 0x00000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start + 0x00000000 0x11c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start_IT + 0x00000000 0x12c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop_IT + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start_DMA + 0x00000000 0x16c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop_DMA + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start + 0x00000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop + 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start_IT + 0x00000000 0x1e4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop_IT + 0x00000000 0x13e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start_DMA + 0x00000000 0x300 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop_DMA + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start + 0x00000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop + 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start_IT + 0x00000000 0x1e4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop_IT + 0x00000000 0x13e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start_DMA + 0x00000000 0x300 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop_DMA + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Start + 0x00000000 0xaa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Stop + 0x00000000 0xbe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Start_IT + 0x00000000 0xca ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Stop_IT + 0x00000000 0xde ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent + 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent_IT + 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent_DMA + 0x00000000 0xe4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigBreakDeadTime + 0x00000000 0xa4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_RemapConfig + 0x00000000 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_CommutCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_CommutHalfCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_BreakCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_GetState + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_GetChannelNState + 0x00000000 0x52 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIMEx_DMACommutationCplt + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIMEx_DMACommutationHalfCplt + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIM_DMADelayPulseNCplt + 0x00000000 0x86 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIM_DMAErrorCCxN + 0x00000000 0x6e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIM_CCxNChannelCmd + 0x00000000 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_Init + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_LIN_Init + 0x00000000 0xd2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_Init + 0x00000000 0xe6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DeInit + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_MspInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_MspDeInit + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit + 0x00000000 0x116 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive + 0x00000000 0x12e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit_IT + 0x00000000 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive_IT + 0x00000000 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAPause + 0x00000000 0x13a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAResume + 0x00000000 0x11c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAStop + 0x00000000 0xfe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle + 0x00000000 0x1a8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle_IT + 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle_DMA + 0x00000000 0xb2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_GetRxEventType + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Abort + 0x00000000 0x1d6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmit + 0x00000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceive + 0x00000000 0x146 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Abort_IT + 0x00000000 0x228 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmit_IT + 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceive_IT + 0x00000000 0x164 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_RxCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_ErrorCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmitCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceiveCpltCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_LIN_SendBreak + 0x00000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_EnterMuteMode + 0x00000000 0x7e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_ExitMuteMode + 0x00000000 0x7e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_EnableTransmitter + 0x00000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_EnableReceiver + 0x00000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_GetState + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_GetError + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_WaitOnFlagUntilTimeout + 0x00000000 0xb2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Start_Receive_IT + 0x00000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxAbortCallback + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxAbortCallback + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxOnlyAbortCallback + 0x00000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxOnlyAbortCallback + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ActivateDedicatedEndpoint + 0x00000000 0x110 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DeactivateDedicatedEndpoint + 0x00000000 0x164 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_StopDevice + 0x00000000 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ReadChInterrupts + 0x00000000 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ClearInterrupts + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HostInit + 0x00000000 0x170 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_InitFSLSPClkSel + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ResetPort + 0x00000000 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DriveVbus + 0x00000000 0x72 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_GetHostSpeed + 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_GetCurrentFrame + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_Init + 0x00000000 0x258 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_StartXfer + 0x00000000 0x4f4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_ReadInterrupt + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_Halt + 0x00000000 0x240 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DoPing + 0x00000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_StopHost + 0x00000000 0x124 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ActivateRemoteWakeup + 0x00000000 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DeActivateRemoteWakeup + 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xad8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x2a7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x1011 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x1675e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x3693 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x9e9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x16d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x29c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x1b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xd6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x127 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x8ed ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x2aa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x293 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0xba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x00000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetPollingInterval + 0x00000000 0x28 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xad8 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x5b ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x2a ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x94 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x43 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x57 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x370 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x4a ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x58 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x8e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x185 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x146 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x3c ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x29 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x2a7 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x28 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x103 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x6a ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1df ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xfb ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1011 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x11f ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1675e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x6d ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x3693 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xca5 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x9e9 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x115 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1a0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xa5 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x16d ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x287 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x5f ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x236 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x132 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x29c ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x1b5 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xd6 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x127 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xe8 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x89 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x8ed ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x53 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x2aa ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x293 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0xba ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x126 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x304 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x6b ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x20f ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00000000 0x5f ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text.USBD_DeInit + 0x00000000 0x60 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text.USBD_Stop + 0x00000000 0x36 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xad8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x5b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x2a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x94 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x43 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x57 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x9e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x370 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x112 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x4a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x58 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x8e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x185 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x146 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x3c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x29 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x2a7 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x28 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x103 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x6a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1df ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xfb ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1011 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x11f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1675e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x6d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x3693 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x56 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xca5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x9e9 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x115 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1a0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xa5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x16d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x287 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x5f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x236 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x132 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x29c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x1b5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xd6 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x127 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xe8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x89 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x8ed ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x53 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x2aa ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x293 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0xba ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x126 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x304 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00000000 0x6b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xad8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x5b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x2a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x94 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x43 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x57 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x9e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x370 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x112 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x4a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x58 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x8e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x185 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x146 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x3c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x29 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x2a7 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x28 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x103 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x6a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1df ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xfb ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1011 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x11f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1675e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x6d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x3693 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x56 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xca5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x9e9 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x115 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1a0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xa5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x16d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x287 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x5f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x236 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x132 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x29c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x1b5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xd6 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x127 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xe8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x89 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x8ed ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x53 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x2aa ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x293 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0xba ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x126 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x304 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x6b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00000000 0x20f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .text.USBD_CtlPrepareRx + 0x00000000 0x42 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .text.USBD_GetRxCount + 0x00000000 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xad8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x5b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x2a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x94 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x43 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x57 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x9e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x370 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x112 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x4a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x58 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x8e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x185 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x146 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x3c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x29 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x2a7 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x28 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x103 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x6a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1df ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xfb ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1011 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x11f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1675e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x6d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x3693 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x56 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xca5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x9e9 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x115 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1a0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xa5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x16d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x287 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x5f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x236 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x132 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x29c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x2e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x1b5 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xd6 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x127 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xe8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x89 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x8ed ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x53 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x2aa ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x293 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0xba ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x126 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x304 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x6b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x00000000 0x20f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usb_device.o + .text 0x00000000 0x0 ./USB_DEVICE/App/usb_device.o + .data 0x00000000 0x0 ./USB_DEVICE/App/usb_device.o + .bss 0x00000000 0x0 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xad8 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x2e ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x28 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x8e ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x51 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x103 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x6a ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1df ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1c ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xfb ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1011 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x11f ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1675e ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x6d ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x2a7 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x3693 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x190 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x5c ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xca5 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x9e9 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x115 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1a0 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xa5 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16d ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x287 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x5f ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x236 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x132 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x29c ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x2e ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1b5 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xd6 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x127 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xe8 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x89 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x8ed ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x53 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x2aa ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x293 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0xba ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x126 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x61 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x2a ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x43 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x34 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x3c ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x370 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x10 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x4a ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x34 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x10 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x58 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x8e ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x1c ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x185 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x146 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x29 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x20 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x6b ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x20f ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00000000 0x5f ./USB_DEVICE/App/usb_device.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/App/usbd_desc.o + .text 0x00000000 0x0 ./USB_DEVICE/App/usbd_desc.o + .data 0x00000000 0x0 ./USB_DEVICE/App/usbd_desc.o + .bss 0x00000000 0x0 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xad8 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x5b ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x2a ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x94 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x43 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x34 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x57 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x9e ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x370 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x112 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x10 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x4a ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x34 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x10 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x58 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x8e ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1c ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x185 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x146 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x3c ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x29 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x20 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x2a7 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x2e ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x28 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x103 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x6a ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1df ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1c ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xfb ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1011 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x11f ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1675e ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x6d ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x3693 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x56 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xca5 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x9e9 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x115 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1a0 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xa5 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x16d ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x287 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x5f ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x236 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x132 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x29c ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x2e ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x1b5 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xd6 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x127 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xe8 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x89 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x8ed ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x53 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x2aa ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x293 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0xba ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x126 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x304 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x6b ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00000000 0x215 ./USB_DEVICE/App/usbd_desc.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .group 0x00000000 0xc ./USB_DEVICE/Target/usbd_conf.o + .text 0x00000000 0x0 ./USB_DEVICE/Target/usbd_conf.o + .data 0x00000000 0x0 ./USB_DEVICE/Target/usbd_conf.o + .bss 0x00000000 0x0 ./USB_DEVICE/Target/usbd_conf.o + .text.HAL_PCD_MspDeInit + 0x00000000 0x40 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_DeInit + 0x00000000 0x36 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_Stop + 0x00000000 0x36 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_FlushEP + 0x00000000 0x3e ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_GetRxDataSize + 0x00000000 0x26 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_Delay + 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xad8 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x2e ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x28 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x8e ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x51 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x103 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x6a ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1df ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1c ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xfb ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1011 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x11f ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1675e ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x6d ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x2a7 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x3693 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x190 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x5c ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xca5 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x9e9 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x115 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1a0 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xa5 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16d ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x287 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x5f ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x236 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x132 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x29c ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x2e ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1b5 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x22 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xd6 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x127 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xe8 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x89 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x8ed ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x53 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x2aa ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x293 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0xba ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x126 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x61 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x2a ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x43 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x34 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x3c ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x370 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x10 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x4a ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x34 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x10 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x58 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x8e ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x1c ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x185 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x146 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x29 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x16 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x20 ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x30a ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x6b ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x20f ./USB_DEVICE/Target/usbd_conf.o + .debug_macro 0x00000000 0x5f ./USB_DEVICE/Target/usbd_conf.o + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .text.exit 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .debug_frame 0x00000000 0x28 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.std 0x00000000 0x6c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.stdio_exit_handler + 0x00000000 0x18 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.cleanup_stdio + 0x00000000 0x40 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock + 0x00000000 0x18 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock + 0x00000000 0x18 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.global_stdio_init.part.0 + 0x00000000 0x3c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_acquire + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_release + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp 0x00000000 0xa4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sinit 0x00000000 0x30 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock_all + 0x00000000 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock_all + 0x00000000 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .data.__sglue 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .bss.__sf 0x00000000 0x138 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .bss.__stdio_exit_handler + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .debug_frame 0x00000000 0x144 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .text._fwalk_sglue + 0x00000000 0x3c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_frame 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sread 0x00000000 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__seofread + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__swrite + 0x00000000 0x38 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sseek 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sclose + 0x00000000 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .debug_frame 0x00000000 0x88 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .text._close_r + 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .text._reclaim_reent + 0x00000000 0xbc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .bss.errno 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .debug_frame 0x00000000 0x38 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .data._impure_ptr + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .data._impure_data + 0x00000000 0x4c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .text._lseek_r + 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .text._read_r 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .text._write_r + 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .text.__errno 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .debug_frame 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___arc4random_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___dd_hash_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___tz_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___env_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___malloc_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___at_quick_exit_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___atexit_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___sfp_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .debug_frame 0x00000000 0xb0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .text._free_r 0x00000000 0x94 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .debug_frame 0x00000000 0x38 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .text.sbrk_aligned + 0x00000000 0x44 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .text._malloc_r + 0x00000000 0x100 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_sbrk_start + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_free_list + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x00000000 0x50 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .text.__malloc_lock + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .text.__malloc_unlock + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .debug_frame 0x00000000 0x30 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text.__sflush_r + 0x00000000 0x108 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text._fflush_r + 0x00000000 0x50 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text.fflush 0x00000000 0x28 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .debug_frame 0x00000000 0x5c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .text._sbrk_r 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .ARM.extab 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .rodata 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .eh_frame 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + +Memory Configuration + +Name Origin Length Attributes +RAM 0x20000000 0x00020000 xrw +FLASH 0x08000000 0x00080000 xr +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o +LOAD ./Core/Src/dma.o +LOAD ./Core/Src/gpio.o +LOAD ./Core/Src/hid_queue.o +LOAD ./Core/Src/i2c.o +LOAD ./Core/Src/main.o +LOAD ./Core/Src/pwm.o +LOAD ./Core/Src/stm32f4xx_hal_msp.o +LOAD ./Core/Src/stm32f4xx_it.o +LOAD ./Core/Src/syscalls.o +LOAD ./Core/Src/sysmem.o +LOAD ./Core/Src/system_stm32f4xx.o +LOAD ./Core/Src/tim.o +LOAD ./Core/Src/usart.o +LOAD ./Core/Startup/startup_stm32f446retx.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o +LOAD ./USB_DEVICE/App/usb_device.o +LOAD ./USB_DEVICE/App/usbd_desc.o +LOAD ./USB_DEVICE/Target/usbd_conf.o +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libm.a +END GROUP +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +END GROUP +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libnosys.a +END GROUP +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libnosys.a +END GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x20020000 _estack = (ORIGIN (RAM) + LENGTH (RAM)) + 0x00000200 _Min_Heap_Size = 0x200 + 0x00000400 _Min_Stack_Size = 0x400 + +.isr_vector 0x08000000 0x1c4 + 0x08000000 . = ALIGN (0x4) + *(.isr_vector) + .isr_vector 0x08000000 0x1c4 ./Core/Startup/startup_stm32f446retx.o + 0x08000000 g_pfnVectors + 0x080001c4 . = ALIGN (0x4) + +.text 0x080001c4 0xb218 + 0x080001c4 . = ALIGN (0x4) + *(.text) + .text 0x080001c4 0x40 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x08000204 0x30 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + 0x08000204 __aeabi_uldivmod + .text 0x08000234 0x2f8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + 0x08000234 __udivmoddi4 + .text 0x0800052c 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + 0x0800052c __aeabi_ldiv0 + 0x0800052c __aeabi_idiv0 + *(.text*) + .text.MX_DMA_Init + 0x08000530 0xcc ./Core/Src/dma.o + 0x08000530 MX_DMA_Init + .text.MX_GPIO_Init + 0x080005fc 0x140 ./Core/Src/gpio.o + 0x080005fc MX_GPIO_Init + .text.MX_I2C1_Init + 0x0800073c 0x5c ./Core/Src/i2c.o + 0x0800073c MX_I2C1_Init + .text.HAL_I2C_MspInit + 0x08000798 0x90 ./Core/Src/i2c.o + 0x08000798 HAL_I2C_MspInit + .text.pq_init 0x08000828 0x2c ./Core/Src/main.o + 0x08000828 pq_init + .text.pq_push 0x08000854 0x68 ./Core/Src/main.o + 0x08000854 pq_push + .text.pq_pop 0x080008bc 0x6c ./Core/Src/main.o + 0x080008bc pq_pop + .text.main 0x08000928 0x1fc ./Core/Src/main.o + 0x08000928 main + .text.mergeChild + 0x08000b24 0x108 ./Core/Src/main.o + 0x08000b24 mergeChild + .text.SystemClock_Config + 0x08000c2c 0xd8 ./Core/Src/main.o + 0x08000c2c SystemClock_Config + .text.HAL_UART_RxCpltCallback + 0x08000d04 0xb8 ./Core/Src/main.o + 0x08000d04 HAL_UART_RxCpltCallback + .text.HAL_UART_ErrorCallback + 0x08000dbc 0x98 ./Core/Src/main.o + 0x08000dbc HAL_UART_ErrorCallback + .text.findBestParent + 0x08000e54 0x84 ./Core/Src/main.o + 0x08000e54 findBestParent + .text.handleUARTMessages + 0x08000ed8 0x144 ./Core/Src/main.o + 0x08000ed8 handleUARTMessages + .text.addUSBReport + 0x0800101c 0x68 ./Core/Src/main.o + 0x0800101c addUSBReport + .text.matrixScan + 0x08001084 0xf0 ./Core/Src/main.o + 0x08001084 matrixScan + .text.encoderProcess + 0x08001174 0xbc ./Core/Src/main.o + 0x08001174 encoderProcess + .text.resetReport + 0x08001230 0x18 ./Core/Src/main.o + 0x08001230 resetReport + .text.Error_Handler + 0x08001248 0xc ./Core/Src/main.o + 0x08001248 Error_Handler + .text.MX_PWM_Init + 0x08001254 0x5c ./Core/Src/pwm.o + 0x08001254 MX_PWM_Init + .text.PWM_Start + 0x080012b0 0x14 ./Core/Src/pwm.o + 0x080012b0 PWM_Start + .text.HAL_MspInit + 0x080012c4 0x50 ./Core/Src/stm32f4xx_hal_msp.o + 0x080012c4 HAL_MspInit + .text.NMI_Handler + 0x08001314 0x8 ./Core/Src/stm32f4xx_it.o + 0x08001314 NMI_Handler + .text.HardFault_Handler + 0x0800131c 0x8 ./Core/Src/stm32f4xx_it.o + 0x0800131c HardFault_Handler + .text.MemManage_Handler + 0x08001324 0x8 ./Core/Src/stm32f4xx_it.o + 0x08001324 MemManage_Handler + .text.BusFault_Handler + 0x0800132c 0x8 ./Core/Src/stm32f4xx_it.o + 0x0800132c BusFault_Handler + .text.UsageFault_Handler + 0x08001334 0x8 ./Core/Src/stm32f4xx_it.o + 0x08001334 UsageFault_Handler + .text.SVC_Handler + 0x0800133c 0xe ./Core/Src/stm32f4xx_it.o + 0x0800133c SVC_Handler + .text.DebugMon_Handler + 0x0800134a 0xe ./Core/Src/stm32f4xx_it.o + 0x0800134a DebugMon_Handler + .text.PendSV_Handler + 0x08001358 0xe ./Core/Src/stm32f4xx_it.o + 0x08001358 PendSV_Handler + .text.SysTick_Handler + 0x08001366 0xc ./Core/Src/stm32f4xx_it.o + 0x08001366 SysTick_Handler + *fill* 0x08001372 0x2 + .text.DMA1_Stream0_IRQHandler + 0x08001374 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001374 DMA1_Stream0_IRQHandler + .text.DMA1_Stream2_IRQHandler + 0x08001388 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001388 DMA1_Stream2_IRQHandler + .text.DMA1_Stream4_IRQHandler + 0x0800139c 0x14 ./Core/Src/stm32f4xx_it.o + 0x0800139c DMA1_Stream4_IRQHandler + .text.DMA1_Stream5_IRQHandler + 0x080013b0 0x14 ./Core/Src/stm32f4xx_it.o + 0x080013b0 DMA1_Stream5_IRQHandler + .text.DMA1_Stream6_IRQHandler + 0x080013c4 0x14 ./Core/Src/stm32f4xx_it.o + 0x080013c4 DMA1_Stream6_IRQHandler + .text.USART1_IRQHandler + 0x080013d8 0x14 ./Core/Src/stm32f4xx_it.o + 0x080013d8 USART1_IRQHandler + .text.USART2_IRQHandler + 0x080013ec 0x14 ./Core/Src/stm32f4xx_it.o + 0x080013ec USART2_IRQHandler + .text.DMA1_Stream7_IRQHandler + 0x08001400 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001400 DMA1_Stream7_IRQHandler + .text.UART4_IRQHandler + 0x08001414 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001414 UART4_IRQHandler + .text.UART5_IRQHandler + 0x08001428 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001428 UART5_IRQHandler + .text.DMA2_Stream2_IRQHandler + 0x0800143c 0x14 ./Core/Src/stm32f4xx_it.o + 0x0800143c DMA2_Stream2_IRQHandler + .text.OTG_FS_IRQHandler + 0x08001450 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001450 OTG_FS_IRQHandler + .text.DMA2_Stream7_IRQHandler + 0x08001464 0x14 ./Core/Src/stm32f4xx_it.o + 0x08001464 DMA2_Stream7_IRQHandler + .text.SystemInit + 0x08001478 0x24 ./Core/Src/system_stm32f4xx.o + 0x08001478 SystemInit + .text.MX_TIM2_Init + 0x0800149c 0xb0 ./Core/Src/tim.o + 0x0800149c MX_TIM2_Init + .text.MX_TIM3_Init + 0x0800154c 0xa8 ./Core/Src/tim.o + 0x0800154c MX_TIM3_Init + .text.HAL_TIM_OC_MspInit + 0x080015f4 0x40 ./Core/Src/tim.o + 0x080015f4 HAL_TIM_OC_MspInit + .text.HAL_TIM_Encoder_MspInit + 0x08001634 0x90 ./Core/Src/tim.o + 0x08001634 HAL_TIM_Encoder_MspInit + .text.HAL_TIM_MspPostInit + 0x080016c4 0x70 ./Core/Src/tim.o + 0x080016c4 HAL_TIM_MspPostInit + .text.MX_UART4_Init + 0x08001734 0x54 ./Core/Src/usart.o + 0x08001734 MX_UART4_Init + .text.MX_UART5_Init + 0x08001788 0x54 ./Core/Src/usart.o + 0x08001788 MX_UART5_Init + .text.MX_USART1_UART_Init + 0x080017dc 0x54 ./Core/Src/usart.o + 0x080017dc MX_USART1_UART_Init + .text.MX_USART2_UART_Init + 0x08001830 0x54 ./Core/Src/usart.o + 0x08001830 MX_USART2_UART_Init + .text.HAL_UART_MspInit + 0x08001884 0x584 ./Core/Src/usart.o + 0x08001884 HAL_UART_MspInit + .text.Reset_Handler + 0x08001e08 0x50 ./Core/Startup/startup_stm32f446retx.o + 0x08001e08 Reset_Handler + .text.Default_Handler + 0x08001e58 0x2 ./Core/Startup/startup_stm32f446retx.o + 0x08001e58 RTC_Alarm_IRQHandler + 0x08001e58 EXTI2_IRQHandler + 0x08001e58 TIM8_CC_IRQHandler + 0x08001e58 FMPI2C1_EV_IRQHandler + 0x08001e58 SPI4_IRQHandler + 0x08001e58 TIM1_CC_IRQHandler + 0x08001e58 DMA2_Stream5_IRQHandler + 0x08001e58 PVD_IRQHandler + 0x08001e58 SDIO_IRQHandler + 0x08001e58 TAMP_STAMP_IRQHandler + 0x08001e58 CAN2_RX1_IRQHandler + 0x08001e58 EXTI3_IRQHandler + 0x08001e58 TIM8_TRG_COM_TIM14_IRQHandler + 0x08001e58 TIM1_UP_TIM10_IRQHandler + 0x08001e58 TIM8_UP_TIM13_IRQHandler + 0x08001e58 I2C3_ER_IRQHandler + 0x08001e58 EXTI0_IRQHandler + 0x08001e58 I2C2_EV_IRQHandler + 0x08001e58 CAN1_RX0_IRQHandler + 0x08001e58 FPU_IRQHandler + 0x08001e58 OTG_HS_WKUP_IRQHandler + 0x08001e58 CAN2_SCE_IRQHandler + 0x08001e58 SPI1_IRQHandler + 0x08001e58 TIM6_DAC_IRQHandler + 0x08001e58 TIM1_BRK_TIM9_IRQHandler + 0x08001e58 DCMI_IRQHandler + 0x08001e58 CAN2_RX0_IRQHandler + 0x08001e58 DMA2_Stream3_IRQHandler + 0x08001e58 SAI2_IRQHandler + 0x08001e58 USART6_IRQHandler + 0x08001e58 USART3_IRQHandler + 0x08001e58 CAN1_RX1_IRQHandler + 0x08001e58 DMA2_Stream0_IRQHandler + 0x08001e58 TIM4_IRQHandler + 0x08001e58 QUADSPI_IRQHandler + 0x08001e58 I2C1_EV_IRQHandler + 0x08001e58 DMA1_Stream1_IRQHandler + 0x08001e58 TIM3_IRQHandler + 0x08001e58 RCC_IRQHandler + 0x08001e58 TIM8_BRK_TIM12_IRQHandler + 0x08001e58 Default_Handler + 0x08001e58 CEC_IRQHandler + 0x08001e58 EXTI15_10_IRQHandler + 0x08001e58 ADC_IRQHandler + 0x08001e58 TIM7_IRQHandler + 0x08001e58 CAN2_TX_IRQHandler + 0x08001e58 TIM5_IRQHandler + 0x08001e58 I2C3_EV_IRQHandler + 0x08001e58 EXTI9_5_IRQHandler + 0x08001e58 RTC_WKUP_IRQHandler + 0x08001e58 SPDIF_RX_IRQHandler + 0x08001e58 SPI2_IRQHandler + 0x08001e58 OTG_HS_EP1_IN_IRQHandler + 0x08001e58 CAN1_TX_IRQHandler + 0x08001e58 FMPI2C1_ER_IRQHandler + 0x08001e58 EXTI4_IRQHandler + 0x08001e58 OTG_HS_EP1_OUT_IRQHandler + 0x08001e58 WWDG_IRQHandler + 0x08001e58 TIM2_IRQHandler + 0x08001e58 OTG_FS_WKUP_IRQHandler + 0x08001e58 TIM1_TRG_COM_TIM11_IRQHandler + 0x08001e58 OTG_HS_IRQHandler + 0x08001e58 EXTI1_IRQHandler + 0x08001e58 I2C2_ER_IRQHandler + 0x08001e58 DMA2_Stream1_IRQHandler + 0x08001e58 CAN1_SCE_IRQHandler + 0x08001e58 FLASH_IRQHandler + 0x08001e58 DMA2_Stream4_IRQHandler + 0x08001e58 SPI3_IRQHandler + 0x08001e58 I2C1_ER_IRQHandler + 0x08001e58 FMC_IRQHandler + 0x08001e58 DMA2_Stream6_IRQHandler + 0x08001e58 SAI1_IRQHandler + 0x08001e58 DMA1_Stream3_IRQHandler + *fill* 0x08001e5a 0x2 + .text.HAL_Init + 0x08001e5c 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08001e5c HAL_Init + .text.HAL_InitTick + 0x08001ea0 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08001ea0 HAL_InitTick + .text.HAL_IncTick + 0x08001f00 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08001f00 HAL_IncTick + .text.HAL_GetTick + 0x08001f28 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08001f28 HAL_GetTick + .text.HAL_Delay + 0x08001f40 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08001f40 HAL_Delay + .text.__NVIC_SetPriorityGrouping + 0x08001f88 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetPriorityGrouping + 0x08001fd0 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_EnableIRQ + 0x08001fec 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_SetPriority + 0x08002028 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.NVIC_EncodePriority + 0x0800207c 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + *fill* 0x080020e2 0x2 + .text.SysTick_Config + 0x080020e4 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SetPriorityGrouping + 0x08002128 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x08002128 HAL_NVIC_SetPriorityGrouping + .text.HAL_NVIC_SetPriority + 0x0800213e 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x0800213e HAL_NVIC_SetPriority + .text.HAL_NVIC_EnableIRQ + 0x08002176 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x08002176 HAL_NVIC_EnableIRQ + .text.HAL_SYSTICK_Config + 0x08002192 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x08002192 HAL_SYSTICK_Config + *fill* 0x080021aa 0x2 + .text.HAL_DMA_Init + 0x080021ac 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + 0x080021ac HAL_DMA_Init + .text.HAL_DMA_Start_IT + 0x08002308 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + 0x08002308 HAL_DMA_Start_IT + .text.HAL_DMA_Abort + 0x080023b8 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + 0x080023b8 HAL_DMA_Abort + .text.HAL_DMA_Abort_IT + 0x08002498 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + 0x08002498 HAL_DMA_Abort_IT + .text.HAL_DMA_IRQHandler + 0x080024dc 0x314 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + 0x080024dc HAL_DMA_IRQHandler + .text.DMA_SetConfig + 0x080027f0 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.DMA_CalcBaseAndBitshift + 0x0800284c 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.DMA_CheckFifoParam + 0x080028b8 0xf8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_GPIO_Init + 0x080029b0 0x328 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x080029b0 HAL_GPIO_Init + .text.HAL_GPIO_ReadPin + 0x08002cd8 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x08002cd8 HAL_GPIO_ReadPin + .text.HAL_GPIO_WritePin + 0x08002d08 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x08002d08 HAL_GPIO_WritePin + *fill* 0x08002d3a 0x2 + .text.HAL_I2C_Init + 0x08002d3c 0x288 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + 0x08002d3c HAL_I2C_Init + .text.HAL_PCD_Init + 0x08002fc4 0x22c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08002fc4 HAL_PCD_Init + .text.HAL_PCD_Start + 0x080031f0 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x080031f0 HAL_PCD_Start + .text.HAL_PCD_IRQHandler + 0x0800325a 0x99c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x0800325a HAL_PCD_IRQHandler + .text.HAL_PCD_SetAddress + 0x08003bf6 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003bf6 HAL_PCD_SetAddress + .text.HAL_PCD_EP_Open + 0x08003c3e 0xd4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003c3e HAL_PCD_EP_Open + .text.HAL_PCD_EP_Close + 0x08003d12 0x94 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003d12 HAL_PCD_EP_Close + .text.HAL_PCD_EP_Receive + 0x08003da6 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003da6 HAL_PCD_EP_Receive + .text.HAL_PCD_EP_Transmit + 0x08003e1c 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003e1c HAL_PCD_EP_Transmit + .text.HAL_PCD_EP_SetStall + 0x08003e90 0xc6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003e90 HAL_PCD_EP_SetStall + .text.HAL_PCD_EP_ClrStall + 0x08003f56 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08003f56 HAL_PCD_EP_ClrStall + .text.HAL_PCD_EP_Abort + 0x08004002 0x62 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08004002 HAL_PCD_EP_Abort + .text.PCD_WriteEmptyTxFifo + 0x08004064 0x118 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.PCD_EP_OutXfrComplete_int + 0x0800417c 0x1d0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.PCD_EP_OutSetupPacket_int + 0x0800434c 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCDEx_SetTxFiFo + 0x080043d8 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + 0x080043d8 HAL_PCDEx_SetTxFiFo + .text.HAL_PCDEx_SetRxFiFo + 0x08004466 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + 0x08004466 HAL_PCDEx_SetRxFiFo + .text.HAL_PCDEx_ActivateLPM + 0x08004488 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + 0x08004488 HAL_PCDEx_ActivateLPM + .text.HAL_RCC_ClockConfig + 0x080044d0 0x1cc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x080044d0 HAL_RCC_ClockConfig + .text.HAL_RCC_GetHCLKFreq + 0x0800469c 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x0800469c HAL_RCC_GetHCLKFreq + .text.HAL_RCC_GetPCLK1Freq + 0x080046b4 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x080046b4 HAL_RCC_GetPCLK1Freq + .text.HAL_RCC_GetPCLK2Freq + 0x080046dc 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x080046dc HAL_RCC_GetPCLK2Freq + .text.HAL_RCCEx_PeriphCLKConfig + 0x08004704 0x654 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + 0x08004704 HAL_RCCEx_PeriphCLKConfig + .text.HAL_RCC_GetSysClockFreq + 0x08004d58 0x460 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + 0x08004d58 HAL_RCC_GetSysClockFreq + .text.HAL_RCC_OscConfig + 0x080051b8 0x53c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + 0x080051b8 HAL_RCC_OscConfig + .text.HAL_TIM_OC_Init + 0x080056f4 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x080056f4 HAL_TIM_OC_Init + .text.HAL_TIM_PWM_Init + 0x08005792 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005792 HAL_TIM_PWM_Init + .text.HAL_TIM_PWM_MspInit + 0x08005830 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005830 HAL_TIM_PWM_MspInit + .text.HAL_TIM_PWM_Start + 0x08005844 0x190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005844 HAL_TIM_PWM_Start + .text.HAL_TIM_Encoder_Init + 0x080059d4 0x14c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x080059d4 HAL_TIM_Encoder_Init + .text.HAL_TIM_Encoder_Start + 0x08005b20 0x11c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005b20 HAL_TIM_Encoder_Start + .text.HAL_TIM_OC_ConfigChannel + 0x08005c3c 0xb8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005c3c HAL_TIM_OC_ConfigChannel + .text.HAL_TIM_PWM_ConfigChannel + 0x08005cf4 0x184 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005cf4 HAL_TIM_PWM_ConfigChannel + .text.TIM_Base_SetConfig + 0x08005e78 0x14c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08005e78 TIM_Base_SetConfig + .text.TIM_OC1_SetConfig + 0x08005fc4 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_OC2_SetConfig + 0x080060a4 0xec ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x080060a4 TIM_OC2_SetConfig + .text.TIM_OC3_SetConfig + 0x08006190 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_OC4_SetConfig + 0x08006278 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_CCxChannelCmd + 0x08006324 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + 0x08006324 TIM_CCxChannelCmd + *fill* 0x0800636e 0x2 + .text.HAL_TIMEx_MasterConfigSynchronization + 0x08006370 0xf8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + 0x08006370 HAL_TIMEx_MasterConfigSynchronization + .text.HAL_UART_Init + 0x08006468 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006468 HAL_UART_Init + .text.HAL_UART_Transmit_DMA + 0x08006508 0xf8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006508 HAL_UART_Transmit_DMA + .text.HAL_UART_Receive_DMA + 0x08006600 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006600 HAL_UART_Receive_DMA + *fill* 0x0800664a 0x2 + .text.HAL_UART_IRQHandler + 0x0800664c 0x554 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x0800664c HAL_UART_IRQHandler + .text.HAL_UART_TxCpltCallback + 0x08006ba0 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006ba0 HAL_UART_TxCpltCallback + .text.HAL_UART_TxHalfCpltCallback + 0x08006bb4 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006bb4 HAL_UART_TxHalfCpltCallback + .text.HAL_UART_RxHalfCpltCallback + 0x08006bc8 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006bc8 HAL_UART_RxHalfCpltCallback + .text.HAL_UARTEx_RxEventCallback + 0x08006bdc 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006bdc HAL_UARTEx_RxEventCallback + .text.UART_DMATransmitCplt + 0x08006bf4 0x9a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxHalfCplt + 0x08006c8e 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAReceiveCplt + 0x08006caa 0x12c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxHalfCplt + 0x08006dd6 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAError + 0x08006e12 0x94 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + *fill* 0x08006ea6 0x2 + .text.UART_Start_Receive_DMA + 0x08006ea8 0x14c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x08006ea8 UART_Start_Receive_DMA + .text.UART_EndTxTransfer + 0x08006ff4 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_EndRxTransfer + 0x08007044 0xc6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAAbortOnError + 0x0800710a 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Transmit_IT + 0x0800712c 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_EndTransmit_IT + 0x080071cc 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Receive_IT + 0x080071fc 0x17c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_SetConfig + 0x08007378 0x4e8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.USB_CoreInit + 0x08007860 0xc8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007860 USB_CoreInit + .text.USB_SetTurnaroundTime + 0x08007928 0x144 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007928 USB_SetTurnaroundTime + .text.USB_EnableGlobalInt + 0x08007a6c 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007a6c USB_EnableGlobalInt + .text.USB_DisableGlobalInt + 0x08007a8e 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007a8e USB_DisableGlobalInt + .text.USB_SetCurrentMode + 0x08007ab0 0x98 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007ab0 USB_SetCurrentMode + .text.USB_DevInit + 0x08007b48 0x2bc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007b48 USB_DevInit + .text.USB_FlushTxFifo + 0x08007e04 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007e04 USB_FlushTxFifo + .text.USB_FlushRxFifo + 0x08007e68 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007e68 USB_FlushRxFifo + .text.USB_SetDevSpeed + 0x08007ec4 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007ec4 USB_SetDevSpeed + .text.USB_GetDevSpeed + 0x08007ef6 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007ef6 USB_GetDevSpeed + .text.USB_ActivateEndpoint + 0x08007f40 0x10e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08007f40 USB_ActivateEndpoint + *fill* 0x0800804e 0x2 + .text.USB_DeactivateEndpoint + 0x08008050 0x1b8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008050 USB_DeactivateEndpoint + .text.USB_EPStartXfer + 0x08008208 0x53c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008208 USB_EPStartXfer + .text.USB_EPStopXfer + 0x08008744 0x154 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008744 USB_EPStopXfer + .text.USB_WritePacket + 0x08008898 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008898 USB_WritePacket + .text.USB_ReadPacket + 0x08008914 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008914 USB_ReadPacket + .text.USB_EPSetStall + 0x080089c4 0xdc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080089c4 USB_EPSetStall + .text.USB_EPClearStall + 0x08008aa0 0xcc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008aa0 USB_EPClearStall + .text.USB_SetDevAddress + 0x08008b6c 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008b6c USB_SetDevAddress + .text.USB_DevConnect + 0x08008bb8 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008bb8 USB_DevConnect + .text.USB_DevDisconnect + 0x08008bfa 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008bfa USB_DevDisconnect + .text.USB_ReadInterrupts + 0x08008c3c 0x26 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008c3c USB_ReadInterrupts + .text.USB_ReadDevAllOutEpInterrupt + 0x08008c62 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008c62 USB_ReadDevAllOutEpInterrupt + .text.USB_ReadDevAllInEpInterrupt + 0x08008c96 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008c96 USB_ReadDevAllInEpInterrupt + .text.USB_ReadDevOutEPInterrupt + 0x08008cca 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008cca USB_ReadDevOutEPInterrupt + .text.USB_ReadDevInEPInterrupt + 0x08008d06 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008d06 USB_ReadDevInEPInterrupt + .text.USB_GetMode + 0x08008d62 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008d62 USB_GetMode + .text.USB_ActivateSetup + 0x08008d7e 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008d7e USB_ActivateSetup + .text.USB_EP0_OutStart + 0x08008dc4 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08008dc4 USB_EP0_OutStart + .text.USB_CoreReset + 0x08008e80 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USBD_HID_Init + 0x08008ef0 0xcc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_DeInit + 0x08008fbc 0x90 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_Setup + 0x0800904c 0x210 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_SendReport + 0x0800925c 0x60 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + 0x0800925c USBD_HID_SendReport + .text.USBD_HID_GetFSCfgDesc + 0x080092bc 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetHSCfgDesc + 0x080092f0 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetOtherSpeedCfgDesc + 0x08009324 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_DataIn + 0x08009358 0x2c ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetDeviceQualifierDesc + 0x08009384 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_Init + 0x080093a4 0x60 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x080093a4 USBD_Init + .text.USBD_RegisterClass + 0x08009404 0x6c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009404 USBD_RegisterClass + .text.USBD_Start + 0x08009470 0x18 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009470 USBD_Start + .text.USBD_RunTestMode + 0x08009488 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009488 USBD_RunTestMode + .text.USBD_SetClassConfig + 0x0800949e 0x38 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x0800949e USBD_SetClassConfig + .text.USBD_ClrClassConfig + 0x080094d6 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x080094d6 USBD_ClrClassConfig + .text.USBD_LL_SetupStage + 0x0800950a 0xaa ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x0800950a USBD_LL_SetupStage + .text.USBD_LL_DataOutStage + 0x080095b4 0x178 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x080095b4 USBD_LL_DataOutStage + .text.USBD_LL_DataInStage + 0x0800972c 0x176 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x0800972c USBD_LL_DataInStage + .text.USBD_LL_Reset + 0x080098a2 0xa6 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x080098a2 USBD_LL_Reset + .text.USBD_LL_SetSpeed + 0x08009948 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009948 USBD_LL_SetSpeed + .text.USBD_LL_Suspend + 0x08009968 0x38 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009968 USBD_LL_Suspend + .text.USBD_LL_Resume + 0x080099a0 0x30 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x080099a0 USBD_LL_Resume + .text.USBD_LL_SOF + 0x080099d0 0x40 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x080099d0 USBD_LL_SOF + .text.USBD_LL_IsoINIncomplete + 0x08009a10 0x64 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009a10 USBD_LL_IsoINIncomplete + .text.USBD_LL_IsoOUTIncomplete + 0x08009a74 0x64 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009a74 USBD_LL_IsoOUTIncomplete + .text.USBD_LL_DevConnected + 0x08009ad8 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009ad8 USBD_LL_DevConnected + .text.USBD_LL_DevDisconnected + 0x08009aee 0x46 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009aee USBD_LL_DevDisconnected + .text.USBD_CoreFindIF + 0x08009b34 0x1a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009b34 USBD_CoreFindIF + .text.USBD_CoreFindEP + 0x08009b4e 0x1a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009b4e USBD_CoreFindEP + .text.USBD_GetEpDesc + 0x08009b68 0x70 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009b68 USBD_GetEpDesc + .text.USBD_GetNextDesc + 0x08009bd8 0x38 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08009bd8 USBD_GetNextDesc + .text.SWAPBYTE + 0x08009c10 0x3e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + *fill* 0x08009c4e 0x2 + .text.USBD_StdDevReq + 0x08009c50 0xe4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x08009c50 USBD_StdDevReq + .text.USBD_StdItfReq + 0x08009d34 0xd8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x08009d34 USBD_StdItfReq + .text.USBD_StdEPReq + 0x08009e0c 0x33e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x08009e0c USBD_StdEPReq + *fill* 0x0800a14a 0x2 + .text.USBD_GetDescriptor + 0x0800a14c 0x328 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_SetAddress + 0x0800a474 0x88 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_SetConfig + 0x0800a4fc 0x154 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_GetConfig + 0x0800a650 0x6c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_GetStatus + 0x0800a6bc 0x68 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_SetFeature + 0x0800a724 0x52 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_ClrFeature + 0x0800a776 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_ParseSetupRequest + 0x0800a7ba 0x74 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x0800a7ba USBD_ParseSetupRequest + .text.USBD_CtlError + 0x0800a82e 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x0800a82e USBD_CtlError + .text.USBD_GetString + 0x0800a850 0xa4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x0800a850 USBD_GetString + .text.USBD_GetLen + 0x0800a8f4 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text.USBD_CtlSendData + 0x0800a928 0x3c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800a928 USBD_CtlSendData + .text.USBD_CtlContinueSendData + 0x0800a964 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800a964 USBD_CtlContinueSendData + .text.USBD_CtlContinueRx + 0x0800a986 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800a986 USBD_CtlContinueRx + .text.USBD_CtlSendStatus + 0x0800a9a8 0x26 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800a9a8 USBD_CtlSendStatus + .text.USBD_CtlReceiveStatus + 0x0800a9ce 0x26 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800a9ce USBD_CtlReceiveStatus + .text.MX_USB_DEVICE_Init + 0x0800a9f4 0x4c ./USB_DEVICE/App/usb_device.o + 0x0800a9f4 MX_USB_DEVICE_Init + .text.USBD_FS_DeviceDescriptor + 0x0800aa40 0x24 ./USB_DEVICE/App/usbd_desc.o + 0x0800aa40 USBD_FS_DeviceDescriptor + .text.USBD_FS_LangIDStrDescriptor + 0x0800aa64 0x24 ./USB_DEVICE/App/usbd_desc.o + 0x0800aa64 USBD_FS_LangIDStrDescriptor + .text.USBD_FS_ProductStrDescriptor + 0x0800aa88 0x3c ./USB_DEVICE/App/usbd_desc.o + 0x0800aa88 USBD_FS_ProductStrDescriptor + .text.USBD_FS_ManufacturerStrDescriptor + 0x0800aac4 0x28 ./USB_DEVICE/App/usbd_desc.o + 0x0800aac4 USBD_FS_ManufacturerStrDescriptor + .text.USBD_FS_SerialStrDescriptor + 0x0800aaec 0x24 ./USB_DEVICE/App/usbd_desc.o + 0x0800aaec USBD_FS_SerialStrDescriptor + .text.USBD_FS_ConfigStrDescriptor + 0x0800ab10 0x3c ./USB_DEVICE/App/usbd_desc.o + 0x0800ab10 USBD_FS_ConfigStrDescriptor + .text.USBD_FS_InterfaceStrDescriptor + 0x0800ab4c 0x3c ./USB_DEVICE/App/usbd_desc.o + 0x0800ab4c USBD_FS_InterfaceStrDescriptor + .text.USBD_FS_USR_BOSDescriptor + 0x0800ab88 0x24 ./USB_DEVICE/App/usbd_desc.o + 0x0800ab88 USBD_FS_USR_BOSDescriptor + .text.Get_SerialNum + 0x0800abac 0x58 ./USB_DEVICE/App/usbd_desc.o + .text.IntToUnicode + 0x0800ac04 0x7e ./USB_DEVICE/App/usbd_desc.o + *fill* 0x0800ac82 0x2 + .text.HAL_PCD_MspInit + 0x0800ac84 0xd4 ./USB_DEVICE/Target/usbd_conf.o + 0x0800ac84 HAL_PCD_MspInit + .text.HAL_PCD_SetupStageCallback + 0x0800ad58 0x24 ./USB_DEVICE/Target/usbd_conf.o + 0x0800ad58 HAL_PCD_SetupStageCallback + .text.HAL_PCD_DataOutStageCallback + 0x0800ad7c 0x36 ./USB_DEVICE/Target/usbd_conf.o + 0x0800ad7c HAL_PCD_DataOutStageCallback + .text.HAL_PCD_DataInStageCallback + 0x0800adb2 0x34 ./USB_DEVICE/Target/usbd_conf.o + 0x0800adb2 HAL_PCD_DataInStageCallback + .text.HAL_PCD_SOFCallback + 0x0800ade6 0x1c ./USB_DEVICE/Target/usbd_conf.o + 0x0800ade6 HAL_PCD_SOFCallback + .text.HAL_PCD_ResetCallback + 0x0800ae02 0x50 ./USB_DEVICE/Target/usbd_conf.o + 0x0800ae02 HAL_PCD_ResetCallback + *fill* 0x0800ae52 0x2 + .text.HAL_PCD_SuspendCallback + 0x0800ae54 0x4c ./USB_DEVICE/Target/usbd_conf.o + 0x0800ae54 HAL_PCD_SuspendCallback + .text.HAL_PCD_ResumeCallback + 0x0800aea0 0x1c ./USB_DEVICE/Target/usbd_conf.o + 0x0800aea0 HAL_PCD_ResumeCallback + .text.HAL_PCD_ISOOUTIncompleteCallback + 0x0800aebc 0x24 ./USB_DEVICE/Target/usbd_conf.o + 0x0800aebc HAL_PCD_ISOOUTIncompleteCallback + .text.HAL_PCD_ISOINIncompleteCallback + 0x0800aee0 0x24 ./USB_DEVICE/Target/usbd_conf.o + 0x0800aee0 HAL_PCD_ISOINIncompleteCallback + .text.HAL_PCD_ConnectCallback + 0x0800af04 0x1c ./USB_DEVICE/Target/usbd_conf.o + 0x0800af04 HAL_PCD_ConnectCallback + .text.HAL_PCD_DisconnectCallback + 0x0800af20 0x1c ./USB_DEVICE/Target/usbd_conf.o + 0x0800af20 HAL_PCD_DisconnectCallback + .text.USBD_LL_Init + 0x0800af3c 0x98 ./USB_DEVICE/Target/usbd_conf.o + 0x0800af3c USBD_LL_Init + .text.USBD_LL_Start + 0x0800afd4 0x36 ./USB_DEVICE/Target/usbd_conf.o + 0x0800afd4 USBD_LL_Start + .text.USBD_LL_OpenEP + 0x0800b00a 0x4c ./USB_DEVICE/Target/usbd_conf.o + 0x0800b00a USBD_LL_OpenEP + .text.USBD_LL_CloseEP + 0x0800b056 0x3e ./USB_DEVICE/Target/usbd_conf.o + 0x0800b056 USBD_LL_CloseEP + .text.USBD_LL_StallEP + 0x0800b094 0x3e ./USB_DEVICE/Target/usbd_conf.o + 0x0800b094 USBD_LL_StallEP + .text.USBD_LL_ClearStallEP + 0x0800b0d2 0x3e ./USB_DEVICE/Target/usbd_conf.o + 0x0800b0d2 USBD_LL_ClearStallEP + .text.USBD_LL_IsStallEP + 0x0800b110 0x58 ./USB_DEVICE/Target/usbd_conf.o + 0x0800b110 USBD_LL_IsStallEP + .text.USBD_LL_SetUSBAddress + 0x0800b168 0x3e ./USB_DEVICE/Target/usbd_conf.o + 0x0800b168 USBD_LL_SetUSBAddress + .text.USBD_LL_Transmit + 0x0800b1a6 0x42 ./USB_DEVICE/Target/usbd_conf.o + 0x0800b1a6 USBD_LL_Transmit + .text.USBD_LL_PrepareReceive + 0x0800b1e8 0x42 ./USB_DEVICE/Target/usbd_conf.o + 0x0800b1e8 USBD_LL_PrepareReceive + *fill* 0x0800b22a 0x2 + .text.HAL_PCDEx_LPM_Callback + 0x0800b22c 0x9c ./USB_DEVICE/Target/usbd_conf.o + 0x0800b22c HAL_PCDEx_LPM_Callback + .text.USBD_static_malloc + 0x0800b2c8 0x1c ./USB_DEVICE/Target/usbd_conf.o + 0x0800b2c8 USBD_static_malloc + .text.USBD_static_free + 0x0800b2e4 0x14 ./USB_DEVICE/Target/usbd_conf.o + 0x0800b2e4 USBD_static_free + .text.USBD_Get_USB_Status + 0x0800b2f8 0x58 ./USB_DEVICE/Target/usbd_conf.o + 0x0800b2f8 USBD_Get_USB_Status + .text.memset 0x0800b350 0x10 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + 0x0800b350 memset + .text.__libc_init_array + 0x0800b360 0x48 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + 0x0800b360 __libc_init_array + .text.memcpy 0x0800b3a8 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + 0x0800b3a8 memcpy + *(.glue_7) + .glue_7 0x0800b3c4 0x0 linker stubs + *(.glue_7t) + .glue_7t 0x0800b3c4 0x0 linker stubs + *(.eh_frame) + .eh_frame 0x0800b3c4 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.init) + .init 0x0800b3c4 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + 0x0800b3c4 _init + .init 0x0800b3c8 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + *(.fini) + .fini 0x0800b3d0 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + 0x0800b3d0 _fini + .fini 0x0800b3d4 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x0800b3dc . = ALIGN (0x4) + 0x0800b3dc _etext = . + +.vfp11_veneer 0x0800b3dc 0x0 + .vfp11_veneer 0x0800b3dc 0x0 linker stubs + +.v4_bx 0x0800b3dc 0x0 + .v4_bx 0x0800b3dc 0x0 linker stubs + +.iplt 0x0800b3dc 0x0 + .iplt 0x0800b3dc 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.rodata 0x0800b3dc 0x5c + 0x0800b3dc . = ALIGN (0x4) + *(.rodata) + .rodata 0x0800b3dc 0x3a ./USB_DEVICE/App/usbd_desc.o + *(.rodata*) + *fill* 0x0800b416 0x2 + .rodata.AHBPrescTable + 0x0800b418 0x10 ./Core/Src/system_stm32f4xx.o + 0x0800b418 AHBPrescTable + .rodata.APBPrescTable + 0x0800b428 0x8 ./Core/Src/system_stm32f4xx.o + 0x0800b428 APBPrescTable + .rodata.flagBitshiftOffset.0 + 0x0800b430 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + 0x0800b438 . = ALIGN (0x4) + +.ARM.extab 0x0800b438 0x0 + 0x0800b438 . = ALIGN (0x4) + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x0800b438 . = ALIGN (0x4) + +.ARM 0x0800b438 0x8 + 0x0800b438 . = ALIGN (0x4) + 0x0800b438 __exidx_start = . + *(.ARM.exidx*) + .ARM.exidx 0x0800b438 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + 0x0800b440 __exidx_end = . + 0x0800b440 . = ALIGN (0x4) + +.preinit_array 0x0800b440 0x0 + 0x0800b440 . = ALIGN (0x4) + 0x0800b440 PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x0800b440 PROVIDE (__preinit_array_end = .) + 0x0800b440 . = ALIGN (0x4) + +.init_array 0x0800b440 0x4 + 0x0800b440 . = ALIGN (0x4) + 0x0800b440 PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + .init_array 0x0800b440 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x0800b444 PROVIDE (__init_array_end = .) + 0x0800b444 . = ALIGN (0x4) + +.fini_array 0x0800b444 0x4 + 0x0800b444 . = ALIGN (0x4) + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + .fini_array 0x0800b444 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + [!provide] PROVIDE (__fini_array_end = .) + 0x0800b448 . = ALIGN (0x4) + 0x0800b448 _sidata = LOADADDR (.data) + +.rel.dyn 0x0800b448 0x0 + .rel.iplt 0x0800b448 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.data 0x20000000 0x1a0 load address 0x0800b448 + 0x20000000 . = ALIGN (0x4) + 0x20000000 _sdata = . + *(.data) + *(.data*) + .data.ROW_PINS + 0x20000000 0x30 ./Core/Src/main.o + 0x20000000 ROW_PINS + .data.COLUMN_PINS + 0x20000030 0x28 ./Core/Src/main.o + 0x20000030 COLUMN_PINS + .data.KEYCODES + 0x20000058 0x1e ./Core/Src/main.o + 0x20000058 KEYCODES + *fill* 0x20000076 0x2 + .data.PORT_DEPTH + 0x20000078 0x8 ./Core/Src/main.o + 0x20000078 PORT_DEPTH + .data.PORTS 0x20000080 0x10 ./Core/Src/main.o + 0x20000080 PORTS + .data.SystemCoreClock + 0x20000090 0x4 ./Core/Src/system_stm32f4xx.o + 0x20000090 SystemCoreClock + .data.uwTickPrio + 0x20000094 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x20000094 uwTickPrio + .data.uwTickFreq + 0x20000098 0x1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x20000098 uwTickFreq + *fill* 0x20000099 0x3 + .data.USBD_HID + 0x2000009c 0x38 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + 0x2000009c USBD_HID + .data.USBD_HID_CfgDesc + 0x200000d4 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x200000f6 0x2 + .data.USBD_HID_Desc + 0x200000f8 0x9 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x20000101 0x3 + .data.USBD_HID_DeviceQualifierDesc + 0x20000104 0xa ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x2000010e 0x2 + .data.HID_MOUSE_ReportDesc + 0x20000110 0x2d ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .data.HIDInEpAdd + 0x2000013d 0x1 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x2000013e 0x2 + .data.FS_Desc 0x20000140 0x20 ./USB_DEVICE/App/usbd_desc.o + 0x20000140 FS_Desc + .data.USBD_FS_DeviceDesc + 0x20000160 0x12 ./USB_DEVICE/App/usbd_desc.o + 0x20000160 USBD_FS_DeviceDesc + *fill* 0x20000172 0x2 + .data.USBD_FS_BOSDesc + 0x20000174 0xc ./USB_DEVICE/App/usbd_desc.o + 0x20000174 USBD_FS_BOSDesc + .data.USBD_LangIDDesc + 0x20000180 0x4 ./USB_DEVICE/App/usbd_desc.o + 0x20000180 USBD_LangIDDesc + .data.USBD_StringSerial + 0x20000184 0x1a ./USB_DEVICE/App/usbd_desc.o + 0x20000184 USBD_StringSerial + *(.RamFunc) + *(.RamFunc*) + 0x200001a0 . = ALIGN (0x4) + *fill* 0x2000019e 0x2 + 0x200001a0 _edata = . + +.igot.plt 0x200001a0 0x0 load address 0x0800b5e8 + .igot.plt 0x200001a0 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x200001a0 . = ALIGN (0x4) + +.bss 0x200001a0 0x15bc load address 0x0800b5e8 + 0x200001a0 _sbss = . + 0x200001a0 __bss_start__ = _sbss + *(.bss) + .bss 0x200001a0 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.bss*) + .bss.hi2c1 0x200001bc 0x54 ./Core/Src/i2c.o + 0x200001bc hi2c1 + .bss.REPORT 0x20000210 0xe ./Core/Src/main.o + 0x20000210 REPORT + *fill* 0x2000021e 0x2 + .bss.RX5Msg 0x20000220 0x10 ./Core/Src/main.o + 0x20000220 RX5Msg + .bss.RX1Msg 0x20000230 0x10 ./Core/Src/main.o + 0x20000230 RX1Msg + .bss.RX2Msg 0x20000240 0x10 ./Core/Src/main.o + 0x20000240 RX2Msg + .bss.RX4Msg 0x20000250 0x10 ./Core/Src/main.o + 0x20000250 RX4Msg + .bss.DEPTH 0x20000260 0x2 ./Core/Src/main.o + 0x20000260 DEPTH + *fill* 0x20000262 0x2 + .bss.PARENT 0x20000264 0x4 ./Core/Src/main.o + 0x20000264 PARENT + .bss.KEYSTATE_CHANGED_FLAG + 0x20000268 0x1 ./Core/Src/main.o + 0x20000268 KEYSTATE_CHANGED_FLAG + *fill* 0x20000269 0x3 + .bss.KEYSTATE 0x2000026c 0x1e ./Core/Src/main.o + 0x2000026c KEYSTATE + .bss.MODE 0x2000028a 0x1 ./Core/Src/main.o + 0x2000028a MODE + *fill* 0x2000028b 0x1 + .bss.LAST_ENCODER_COUNT + 0x2000028c 0x4 ./Core/Src/main.o + 0x2000028c LAST_ENCODER_COUNT + .bss.UART_KEYSTATE + 0x20000290 0x30 ./Core/Src/main.o + 0x20000290 UART_KEYSTATE + .bss.huart1q 0x200002c0 0x183 ./Core/Src/main.o + 0x200002c0 huart1q + *fill* 0x20000443 0x1 + .bss.huart2q 0x20000444 0x183 ./Core/Src/main.o + 0x20000444 huart2q + *fill* 0x200005c7 0x1 + .bss.huart4q 0x200005c8 0x183 ./Core/Src/main.o + 0x200005c8 huart4q + *fill* 0x2000074b 0x1 + .bss.huart5q 0x2000074c 0x183 ./Core/Src/main.o + 0x2000074c huart5q + *fill* 0x200008cf 0x1 + .bss.htim2 0x200008d0 0x48 ./Core/Src/tim.o + 0x200008d0 htim2 + .bss.htim3 0x20000918 0x48 ./Core/Src/tim.o + 0x20000918 htim3 + .bss.huart4 0x20000960 0x48 ./Core/Src/usart.o + 0x20000960 huart4 + .bss.huart5 0x200009a8 0x48 ./Core/Src/usart.o + 0x200009a8 huart5 + .bss.huart1 0x200009f0 0x48 ./Core/Src/usart.o + 0x200009f0 huart1 + .bss.huart2 0x20000a38 0x48 ./Core/Src/usart.o + 0x20000a38 huart2 + .bss.hdma_uart4_rx + 0x20000a80 0x60 ./Core/Src/usart.o + 0x20000a80 hdma_uart4_rx + .bss.hdma_uart4_tx + 0x20000ae0 0x60 ./Core/Src/usart.o + 0x20000ae0 hdma_uart4_tx + .bss.hdma_uart5_rx + 0x20000b40 0x60 ./Core/Src/usart.o + 0x20000b40 hdma_uart5_rx + .bss.hdma_uart5_tx + 0x20000ba0 0x60 ./Core/Src/usart.o + 0x20000ba0 hdma_uart5_tx + .bss.hdma_usart1_rx + 0x20000c00 0x60 ./Core/Src/usart.o + 0x20000c00 hdma_usart1_rx + .bss.hdma_usart1_tx + 0x20000c60 0x60 ./Core/Src/usart.o + 0x20000c60 hdma_usart1_tx + .bss.hdma_usart2_rx + 0x20000cc0 0x60 ./Core/Src/usart.o + 0x20000cc0 hdma_usart2_rx + .bss.hdma_usart2_tx + 0x20000d20 0x60 ./Core/Src/usart.o + 0x20000d20 hdma_usart2_tx + .bss.uwTick 0x20000d80 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x20000d80 uwTick + .bss.cfgidx.0 0x20000d84 0x1 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + *fill* 0x20000d85 0x3 + .bss.hUsbDeviceFS + 0x20000d88 0x2dc ./USB_DEVICE/App/usb_device.o + 0x20000d88 hUsbDeviceFS + .bss.USBD_StrDesc + 0x20001064 0x200 ./USB_DEVICE/App/usbd_desc.o + 0x20001064 USBD_StrDesc + .bss.hpcd_USB_OTG_FS + 0x20001264 0x4e4 ./USB_DEVICE/Target/usbd_conf.o + 0x20001264 hpcd_USB_OTG_FS + .bss.mem.0 0x20001748 0x14 ./USB_DEVICE/Target/usbd_conf.o + *(COMMON) + 0x2000175c . = ALIGN (0x4) + 0x2000175c _ebss = . + 0x2000175c __bss_end__ = _ebss + +._user_heap_stack + 0x2000175c 0x604 load address 0x0800b5e8 + 0x20001760 . = ALIGN (0x8) + *fill* 0x2000175c 0x4 + [!provide] PROVIDE (end = .) + 0x20001760 PROVIDE (_end = .) + 0x20001960 . = (. + _Min_Heap_Size) + *fill* 0x20001760 0x200 + 0x20001d60 . = (. + _Min_Stack_Size) + *fill* 0x20001960 0x400 + 0x20001d60 . = ALIGN (0x8) + +/DISCARD/ + libc.a(*) + libm.a(*) + libgcc.a(*) + +.ARM.attributes + 0x00000000 0x30 + *(.ARM.attributes) + .ARM.attributes + 0x00000000 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .ARM.attributes + 0x00000022 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .ARM.attributes + 0x00000056 0x34 ./Core/Src/dma.o + .ARM.attributes + 0x0000008a 0x34 ./Core/Src/gpio.o + .ARM.attributes + 0x000000be 0x34 ./Core/Src/i2c.o + .ARM.attributes + 0x000000f2 0x34 ./Core/Src/main.o + .ARM.attributes + 0x00000126 0x34 ./Core/Src/pwm.o + .ARM.attributes + 0x0000015a 0x34 ./Core/Src/stm32f4xx_hal_msp.o + .ARM.attributes + 0x0000018e 0x34 ./Core/Src/stm32f4xx_it.o + .ARM.attributes + 0x000001c2 0x34 ./Core/Src/system_stm32f4xx.o + .ARM.attributes + 0x000001f6 0x34 ./Core/Src/tim.o + .ARM.attributes + 0x0000022a 0x34 ./Core/Src/usart.o + .ARM.attributes + 0x0000025e 0x21 ./Core/Startup/startup_stm32f446retx.o + .ARM.attributes + 0x0000027f 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .ARM.attributes + 0x000002b3 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .ARM.attributes + 0x000002e7 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .ARM.attributes + 0x0000031b 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .ARM.attributes + 0x0000034f 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .ARM.attributes + 0x00000383 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .ARM.attributes + 0x000003b7 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .ARM.attributes + 0x000003eb 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .ARM.attributes + 0x0000041f 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .ARM.attributes + 0x00000453 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .ARM.attributes + 0x00000487 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .ARM.attributes + 0x000004bb 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .ARM.attributes + 0x000004ef 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .ARM.attributes + 0x00000523 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .ARM.attributes + 0x00000557 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .ARM.attributes + 0x0000058b 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .ARM.attributes + 0x000005bf 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .ARM.attributes + 0x000005f3 0x34 ./USB_DEVICE/App/usb_device.o + .ARM.attributes + 0x00000627 0x34 ./USB_DEVICE/App/usbd_desc.o + .ARM.attributes + 0x0000065b 0x34 ./USB_DEVICE/Target/usbd_conf.o + .ARM.attributes + 0x0000068f 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x000006c3 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x000006f7 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .ARM.attributes + 0x0000072b 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .ARM.attributes + 0x0000074d 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .ARM.attributes + 0x00000781 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + .ARM.attributes + 0x000007a3 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o +OUTPUT(modularkbd.elf elf32-littlearm) +LOAD linker stubs +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libm.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a + +.debug_info 0x00000000 0x1be15 + .debug_info 0x00000000 0x514 ./Core/Src/dma.o + .debug_info 0x00000514 0x455 ./Core/Src/gpio.o + .debug_info 0x00000969 0x9a4 ./Core/Src/i2c.o + .debug_info 0x0000130d 0x1b60 ./Core/Src/main.o + .debug_info 0x00002e6d 0x80d ./Core/Src/pwm.o + .debug_info 0x0000367a 0x299 ./Core/Src/stm32f4xx_hal_msp.o + .debug_info 0x00003913 0xc7c ./Core/Src/stm32f4xx_it.o + .debug_info 0x0000458f 0x54a ./Core/Src/system_stm32f4xx.o + .debug_info 0x00004ad9 0xd18 ./Core/Src/tim.o + .debug_info 0x000057f1 0xdbf ./Core/Src/usart.o + .debug_info 0x000065b0 0x30 ./Core/Startup/startup_stm32f446retx.o + .debug_info 0x000065e0 0x99a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_info 0x00006f7a 0xdaa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_info 0x00007d24 0x8e7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_info 0x0000860b 0x70b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_info 0x00008d16 0x2421 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_info 0x0000b137 0x15e3 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_info 0x0000c71a 0x7b4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_info 0x0000cece 0x8ff ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_info 0x0000d7cd 0x960 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_info 0x0000e12d 0x299d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_info 0x00010aca 0x14db ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_info 0x00011fa5 0x2f4f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_info 0x00014ef4 0x19f1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_info 0x000168e5 0xa9e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_info 0x00017383 0xe1f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_info 0x000181a2 0xaf8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_info 0x00018c9a 0x76f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_info 0x00019409 0x609 ./USB_DEVICE/App/usb_device.o + .debug_info 0x00019a12 0x4ba ./USB_DEVICE/App/usbd_desc.o + .debug_info 0x00019ecc 0x1f49 ./USB_DEVICE/Target/usbd_conf.o + +.debug_abbrev 0x00000000 0x4285 + .debug_abbrev 0x00000000 0x11b ./Core/Src/dma.o + .debug_abbrev 0x0000011b 0x152 ./Core/Src/gpio.o + .debug_abbrev 0x0000026d 0x1f1 ./Core/Src/i2c.o + .debug_abbrev 0x0000045e 0x368 ./Core/Src/main.o + .debug_abbrev 0x000007c6 0x1f5 ./Core/Src/pwm.o + .debug_abbrev 0x000009bb 0xd8 ./Core/Src/stm32f4xx_hal_msp.o + .debug_abbrev 0x00000a93 0x1f6 ./Core/Src/stm32f4xx_it.o + .debug_abbrev 0x00000c89 0x11a ./Core/Src/system_stm32f4xx.o + .debug_abbrev 0x00000da3 0x22c ./Core/Src/tim.o + .debug_abbrev 0x00000fcf 0x270 ./Core/Src/usart.o + .debug_abbrev 0x0000123f 0x24 ./Core/Startup/startup_stm32f446retx.o + .debug_abbrev 0x00001263 0x214 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_abbrev 0x00001477 0x31d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_abbrev 0x00001794 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_abbrev 0x000019f8 0x1d4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_abbrev 0x00001bcc 0x2ad ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_abbrev 0x00001e79 0x2d0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_abbrev 0x00002149 0x1dd ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_abbrev 0x00002326 0x2b7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_abbrev 0x000025dd 0x211 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_abbrev 0x000027ee 0x278 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_abbrev 0x00002a66 0x283 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_abbrev 0x00002ce9 0x30e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_abbrev 0x00002ff7 0x2b3 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_abbrev 0x000032aa 0x2a2 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_abbrev 0x0000354c 0x27c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_abbrev 0x000037c8 0x26f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_abbrev 0x00003a37 0x19a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_abbrev 0x00003bd1 0x190 ./USB_DEVICE/App/usb_device.o + .debug_abbrev 0x00003d61 0x1e3 ./USB_DEVICE/App/usbd_desc.o + .debug_abbrev 0x00003f44 0x341 ./USB_DEVICE/Target/usbd_conf.o + +.debug_aranges 0x00000000 0x17f0 + .debug_aranges + 0x00000000 0x20 ./Core/Src/dma.o + .debug_aranges + 0x00000020 0x20 ./Core/Src/gpio.o + .debug_aranges + 0x00000040 0x30 ./Core/Src/i2c.o + .debug_aranges + 0x00000070 0x90 ./Core/Src/main.o + .debug_aranges + 0x00000100 0x40 ./Core/Src/pwm.o + .debug_aranges + 0x00000140 0x20 ./Core/Src/stm32f4xx_hal_msp.o + .debug_aranges + 0x00000160 0xc8 ./Core/Src/stm32f4xx_it.o + .debug_aranges + 0x00000228 0x28 ./Core/Src/system_stm32f4xx.o + .debug_aranges + 0x00000250 0x50 ./Core/Src/tim.o + .debug_aranges + 0x000002a0 0x48 ./Core/Src/usart.o + .debug_aranges + 0x000002e8 0x28 ./Core/Startup/startup_stm32f446retx.o + .debug_aranges + 0x00000310 0xf0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_aranges + 0x00000400 0x130 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_aranges + 0x00000530 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_aranges + 0x000005c0 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_aranges + 0x00000618 0x2a8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_aranges + 0x000008c0 0x148 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_aranges + 0x00000a08 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_aranges + 0x00000a50 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_aranges + 0x00000ad8 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_aranges + 0x00000b50 0x3d0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_aranges + 0x00000f20 0x168 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_aranges + 0x00001088 0x208 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_aranges + 0x00001290 0x1a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_aranges + 0x00001430 0x68 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_aranges + 0x00001498 0xd8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_aranges + 0x00001570 0x90 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_aranges + 0x00001600 0x50 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_aranges + 0x00001650 0x20 ./USB_DEVICE/App/usb_device.o + .debug_aranges + 0x00001670 0x68 ./USB_DEVICE/App/usbd_desc.o + .debug_aranges + 0x000016d8 0x118 ./USB_DEVICE/Target/usbd_conf.o + +.debug_rnglists + 0x00000000 0x1291 + .debug_rnglists + 0x00000000 0x14 ./Core/Src/dma.o + .debug_rnglists + 0x00000014 0x14 ./Core/Src/gpio.o + .debug_rnglists + 0x00000028 0x20 ./Core/Src/i2c.o + .debug_rnglists + 0x00000048 0x70 ./Core/Src/main.o + .debug_rnglists + 0x000000b8 0x2b ./Core/Src/pwm.o + .debug_rnglists + 0x000000e3 0x13 ./Core/Src/stm32f4xx_hal_msp.o + .debug_rnglists + 0x000000f6 0x91 ./Core/Src/stm32f4xx_it.o + .debug_rnglists + 0x00000187 0x1a ./Core/Src/system_stm32f4xx.o + .debug_rnglists + 0x000001a1 0x3a ./Core/Src/tim.o + .debug_rnglists + 0x000001db 0x33 ./Core/Src/usart.o + .debug_rnglists + 0x0000020e 0x19 ./Core/Startup/startup_stm32f446retx.o + .debug_rnglists + 0x00000227 0xaf ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_rnglists + 0x000002d6 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_rnglists + 0x000003b6 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_rnglists + 0x00000426 0x3f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_rnglists + 0x00000465 0x23c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_rnglists + 0x000006a1 0xfa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_rnglists + 0x0000079b 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_rnglists + 0x000007cd 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_rnglists + 0x00000833 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_rnglists + 0x00000891 0x31a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_rnglists + 0x00000bab 0x125 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_rnglists + 0x00000cd0 0x1bc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_rnglists + 0x00000e8c 0x147 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_rnglists + 0x00000fd3 0x4c ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_rnglists + 0x0000101f 0xa1 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_rnglists + 0x000010c0 0x6e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_rnglists + 0x0000112e 0x37 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_rnglists + 0x00001165 0x13 ./USB_DEVICE/App/usb_device.o + .debug_rnglists + 0x00001178 0x49 ./USB_DEVICE/App/usbd_desc.o + .debug_rnglists + 0x000011c1 0xd0 ./USB_DEVICE/Target/usbd_conf.o + +.debug_macro 0x00000000 0x262b3 + .debug_macro 0x00000000 0x224 ./Core/Src/dma.o + .debug_macro 0x00000224 0xad8 ./Core/Src/dma.o + .debug_macro 0x00000cfc 0x2a7 ./Core/Src/dma.o + .debug_macro 0x00000fa3 0x2e ./Core/Src/dma.o + .debug_macro 0x00000fd1 0x28 ./Core/Src/dma.o + .debug_macro 0x00000ff9 0x22 ./Core/Src/dma.o + .debug_macro 0x0000101b 0x8e ./Core/Src/dma.o + .debug_macro 0x000010a9 0x51 ./Core/Src/dma.o + .debug_macro 0x000010fa 0x103 ./Core/Src/dma.o + .debug_macro 0x000011fd 0x6a ./Core/Src/dma.o + .debug_macro 0x00001267 0x1df ./Core/Src/dma.o + .debug_macro 0x00001446 0x1c ./Core/Src/dma.o + .debug_macro 0x00001462 0x22 ./Core/Src/dma.o + .debug_macro 0x00001484 0xfb ./Core/Src/dma.o + .debug_macro 0x0000157f 0x1011 ./Core/Src/dma.o + .debug_macro 0x00002590 0x11f ./Core/Src/dma.o + .debug_macro 0x000026af 0x1675e ./Core/Src/dma.o + .debug_macro 0x00018e0d 0x6d ./Core/Src/dma.o + .debug_macro 0x00018e7a 0x3693 ./Core/Src/dma.o + .debug_macro 0x0001c50d 0x190 ./Core/Src/dma.o + .debug_macro 0x0001c69d 0x5c ./Core/Src/dma.o + .debug_macro 0x0001c6f9 0xca5 ./Core/Src/dma.o + .debug_macro 0x0001d39e 0x9e9 ./Core/Src/dma.o + .debug_macro 0x0001dd87 0x115 ./Core/Src/dma.o + .debug_macro 0x0001de9c 0x1a0 ./Core/Src/dma.o + .debug_macro 0x0001e03c 0xa5 ./Core/Src/dma.o + .debug_macro 0x0001e0e1 0x16d ./Core/Src/dma.o + .debug_macro 0x0001e24e 0x287 ./Core/Src/dma.o + .debug_macro 0x0001e4d5 0x5f ./Core/Src/dma.o + .debug_macro 0x0001e534 0x236 ./Core/Src/dma.o + .debug_macro 0x0001e76a 0x132 ./Core/Src/dma.o + .debug_macro 0x0001e89c 0x29c ./Core/Src/dma.o + .debug_macro 0x0001eb38 0x2e ./Core/Src/dma.o + .debug_macro 0x0001eb66 0x1b5 ./Core/Src/dma.o + .debug_macro 0x0001ed1b 0x22 ./Core/Src/dma.o + .debug_macro 0x0001ed3d 0xd6 ./Core/Src/dma.o + .debug_macro 0x0001ee13 0x127 ./Core/Src/dma.o + .debug_macro 0x0001ef3a 0xe8 ./Core/Src/dma.o + .debug_macro 0x0001f022 0x89 ./Core/Src/dma.o + .debug_macro 0x0001f0ab 0x8ed ./Core/Src/dma.o + .debug_macro 0x0001f998 0x53 ./Core/Src/dma.o + .debug_macro 0x0001f9eb 0x2aa ./Core/Src/dma.o + .debug_macro 0x0001fc95 0x293 ./Core/Src/dma.o + .debug_macro 0x0001ff28 0xba ./Core/Src/dma.o + .debug_macro 0x0001ffe2 0x126 ./Core/Src/dma.o + .debug_macro 0x00020108 0x304 ./Core/Src/dma.o + .debug_macro 0x0002040c 0x224 ./Core/Src/gpio.o + .debug_macro 0x00020630 0x224 ./Core/Src/i2c.o + .debug_macro 0x00020854 0x444 ./Core/Src/main.o + .debug_macro 0x00020c98 0x61 ./Core/Src/main.o + .debug_macro 0x00020cf9 0x2a ./Core/Src/main.o + .debug_macro 0x00020d23 0x43 ./Core/Src/main.o + .debug_macro 0x00020d66 0x34 ./Core/Src/main.o + .debug_macro 0x00020d9a 0x16 ./Core/Src/main.o + .debug_macro 0x00020db0 0x3c ./Core/Src/main.o + .debug_macro 0x00020dec 0x370 ./Core/Src/main.o + .debug_macro 0x0002115c 0x10 ./Core/Src/main.o + .debug_macro 0x0002116c 0x16 ./Core/Src/main.o + .debug_macro 0x00021182 0x4a ./Core/Src/main.o + .debug_macro 0x000211cc 0x34 ./Core/Src/main.o + .debug_macro 0x00021200 0x10 ./Core/Src/main.o + .debug_macro 0x00021210 0x58 ./Core/Src/main.o + .debug_macro 0x00021268 0x8e ./Core/Src/main.o + .debug_macro 0x000212f6 0x1c ./Core/Src/main.o + .debug_macro 0x00021312 0x185 ./Core/Src/main.o + .debug_macro 0x00021497 0x16 ./Core/Src/main.o + .debug_macro 0x000214ad 0x16 ./Core/Src/main.o + .debug_macro 0x000214c3 0x146 ./Core/Src/main.o + .debug_macro 0x00021609 0x16 ./Core/Src/main.o + .debug_macro 0x0002161f 0x16 ./Core/Src/main.o + .debug_macro 0x00021635 0x29 ./Core/Src/main.o + .debug_macro 0x0002165e 0x16 ./Core/Src/main.o + .debug_macro 0x00021674 0x20 ./Core/Src/main.o + .debug_macro 0x00021694 0x6b ./Core/Src/main.o + .debug_macro 0x000216ff 0x20f ./Core/Src/main.o + .debug_macro 0x0002190e 0x5f ./Core/Src/main.o + .debug_macro 0x0002196d 0x22e ./Core/Src/pwm.o + .debug_macro 0x00021b9b 0x21a ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x00021db5 0x224 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00021fd9 0x20b ./Core/Src/system_stm32f4xx.o + .debug_macro 0x000221e4 0x224 ./Core/Src/tim.o + .debug_macro 0x00022408 0x224 ./Core/Src/usart.o + .debug_macro 0x0002262c 0x26b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x00022897 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x00022aa2 0x211 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x00022cb3 0x211 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x00022ec4 0x259 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_macro 0x0002311d 0x217 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_macro 0x00023334 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_macro 0x0002353f 0x22f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0002376e 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x00023979 0x20c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x00023b85 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x00023d90 0x20c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x00023f9c 0x20b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_macro 0x000241a7 0x3a9 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00024550 0x9e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x000245ee 0x112 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00024700 0x56 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_macro 0x00024756 0x390 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00024ae6 0x215 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_macro 0x00024cfb 0x39a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_macro 0x00025095 0x396 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_macro 0x0002542b 0x3c0 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x000257eb 0x30a ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00025af5 0x22 ./USB_DEVICE/App/usb_device.o + .debug_macro 0x00025b17 0x3d3 ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00025eea 0x1c ./USB_DEVICE/App/usbd_desc.o + .debug_macro 0x00025f06 0x3ad ./USB_DEVICE/Target/usbd_conf.o + +.debug_line 0x00000000 0x1f083 + .debug_line 0x00000000 0x726 ./Core/Src/dma.o + .debug_line 0x00000726 0x74e ./Core/Src/gpio.o + .debug_line 0x00000e74 0x789 ./Core/Src/i2c.o + .debug_line 0x000015fd 0xede ./Core/Src/main.o + .debug_line 0x000024db 0x7bc ./Core/Src/pwm.o + .debug_line 0x00002c97 0x71b ./Core/Src/stm32f4xx_hal_msp.o + .debug_line 0x000033b2 0x902 ./Core/Src/stm32f4xx_it.o + .debug_line 0x00003cb4 0x791 ./Core/Src/system_stm32f4xx.o + .debug_line 0x00004445 0x878 ./Core/Src/tim.o + .debug_line 0x00004cbd 0xa52 ./Core/Src/usart.o + .debug_line 0x0000570f 0x7a ./Core/Startup/startup_stm32f446retx.o + .debug_line 0x00005789 0xa0d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_line 0x00006196 0xcdd ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_line 0x00006e73 0xf79 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_line 0x00007dec 0xb51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_line 0x0000893d 0x3aba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_line 0x0000c3f7 0x1488 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_line 0x0000d87f 0x82d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_line 0x0000e0ac 0xe28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_line 0x0000eed4 0x14d9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_line 0x000103ad 0x3782 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_line 0x00013b2f 0x196d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_line 0x0001549c 0x2555 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_line 0x000179f1 0x1d2f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_line 0x00019720 0xc3e ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_line 0x0001a35e 0xf28 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_line 0x0001b286 0x1107 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_line 0x0001c38d 0xa2f ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_line 0x0001cdbc 0x9d6 ./USB_DEVICE/App/usb_device.o + .debug_line 0x0001d792 0xab9 ./USB_DEVICE/App/usbd_desc.o + .debug_line 0x0001e24b 0xe38 ./USB_DEVICE/Target/usbd_conf.o + +.debug_str 0x00000000 0xd80a4 + .debug_str 0x00000000 0xd80a4 ./Core/Src/dma.o + 0xcd194 (size before relaxing) + .debug_str 0x000d80a4 0xccd01 ./Core/Src/gpio.o + .debug_str 0x000d80a4 0xcd235 ./Core/Src/i2c.o + .debug_str 0x000d80a4 0xd23b5 ./Core/Src/main.o + .debug_str 0x000d80a4 0xcd18a ./Core/Src/pwm.o + .debug_str 0x000d80a4 0xccc36 ./Core/Src/stm32f4xx_hal_msp.o + .debug_str 0x000d80a4 0xcd5bc ./Core/Src/stm32f4xx_it.o + .debug_str 0x000d80a4 0xcc61e ./Core/Src/system_stm32f4xx.o + .debug_str 0x000d80a4 0xcd496 ./Core/Src/tim.o + .debug_str 0x000d80a4 0xcd808 ./Core/Src/usart.o + .debug_str 0x000d80a4 0x7e ./Core/Startup/startup_stm32f446retx.o + .debug_str 0x000d80a4 0xcd1e4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_str 0x000d80a4 0xccf3b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_str 0x000d80a4 0xcca14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_str 0x000d80a4 0xcc79a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_str 0x000d80a4 0xcd61d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_str 0x000d80a4 0xcd130 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_str 0x000d80a4 0xcca32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_str 0x000d80a4 0xcca58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_str 0x000d80a4 0xcca8b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_str 0x000d80a4 0xcd984 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_str 0x000d80a4 0xcd190 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_str 0x000d80a4 0xcd00f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_str 0x000d80a4 0xccfec ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_str 0x000d80a4 0xd1755 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_str 0x000d80a4 0xd16be ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_str 0x000d80a4 0xd14e9 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_str 0x000d80a4 0xd13be ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_str 0x000d80a4 0xd1553 ./USB_DEVICE/App/usb_device.o + .debug_str 0x000d80a4 0xd12d2 ./USB_DEVICE/App/usbd_desc.o + .debug_str 0x000d80a4 0xd271f ./USB_DEVICE/Target/usbd_conf.o + +.comment 0x00000000 0x43 + .comment 0x00000000 0x43 ./Core/Src/dma.o + 0x44 (size before relaxing) + .comment 0x00000043 0x44 ./Core/Src/gpio.o + .comment 0x00000043 0x44 ./Core/Src/i2c.o + .comment 0x00000043 0x44 ./Core/Src/main.o + .comment 0x00000043 0x44 ./Core/Src/pwm.o + .comment 0x00000043 0x44 ./Core/Src/stm32f4xx_hal_msp.o + .comment 0x00000043 0x44 ./Core/Src/stm32f4xx_it.o + .comment 0x00000043 0x44 ./Core/Src/system_stm32f4xx.o + .comment 0x00000043 0x44 ./Core/Src/tim.o + .comment 0x00000043 0x44 ./Core/Src/usart.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .comment 0x00000043 0x44 ./USB_DEVICE/App/usb_device.o + .comment 0x00000043 0x44 ./USB_DEVICE/App/usbd_desc.o + .comment 0x00000043 0x44 ./USB_DEVICE/Target/usbd_conf.o + +.debug_frame 0x00000000 0x645c + .debug_frame 0x00000000 0x34 ./Core/Src/dma.o + .debug_frame 0x00000034 0x34 ./Core/Src/gpio.o + .debug_frame 0x00000068 0x74 ./Core/Src/i2c.o + .debug_frame 0x000000dc 0x224 ./Core/Src/main.o + .debug_frame 0x00000300 0xb8 ./Core/Src/pwm.o + .debug_frame 0x000003b8 0x38 ./Core/Src/stm32f4xx_hal_msp.o + .debug_frame 0x000003f0 0x270 ./Core/Src/stm32f4xx_it.o + .debug_frame 0x00000660 0x58 ./Core/Src/system_stm32f4xx.o + .debug_frame 0x000006b8 0x114 ./Core/Src/tim.o + .debug_frame 0x000007cc 0xcc ./Core/Src/usart.o + .debug_frame 0x00000898 0x374 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_frame 0x00000c0c 0x508 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_frame 0x00001114 0x250 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_frame 0x00001364 0x14c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_frame 0x000014b0 0xc84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .debug_frame 0x00002134 0x5b8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .debug_frame 0x000026ec 0x100 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .debug_frame 0x000027ec 0x1f4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_frame 0x000029e0 0x1e8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_frame 0x00002bc8 0x11c0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_frame 0x00003d88 0x638 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_frame 0x000043c0 0x954 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_frame 0x00004d14 0x7c0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .debug_frame 0x000054d4 0x184 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .debug_frame 0x00005658 0x390 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .debug_frame 0x000059e8 0x23c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .debug_frame 0x00005c24 0x10c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .debug_frame 0x00005d30 0x2c ./USB_DEVICE/App/usb_device.o + .debug_frame 0x00005d5c 0x188 ./USB_DEVICE/App/usbd_desc.o + .debug_frame 0x00005ee4 0x4a4 ./USB_DEVICE/Target/usbd_conf.o + .debug_frame 0x00006388 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .debug_frame 0x000063a8 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .debug_frame 0x000063d4 0x28 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_frame 0x000063fc 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x00006428 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + +.debug_line_str + 0x00000000 0x62 + .debug_line_str + 0x00000000 0x62 ./Core/Startup/startup_stm32f446retx.o diff --git a/firmware/67percent/Debug/objects.list b/firmware/67percent/Debug/objects.list new file mode 100644 index 00000000..ff97ac42 --- /dev/null +++ b/firmware/67percent/Debug/objects.list @@ -0,0 +1,42 @@ +"./Core/Src/dma.o" +"./Core/Src/gpio.o" +"./Core/Src/hid_queue.o" +"./Core/Src/i2c.o" +"./Core/Src/main.o" +"./Core/Src/pwm.o" +"./Core/Src/stm32f4xx_hal_msp.o" +"./Core/Src/stm32f4xx_it.o" +"./Core/Src/syscalls.o" +"./Core/Src/sysmem.o" +"./Core/Src/system_stm32f4xx.o" +"./Core/Src/tim.o" +"./Core/Src/usart.o" +"./Core/Startup/startup_stm32f446retx.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o" +"./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o" +"./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o" +"./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o" +"./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o" +"./USB_DEVICE/App/usb_device.o" +"./USB_DEVICE/App/usbd_desc.o" +"./USB_DEVICE/Target/usbd_conf.o" diff --git a/firmware/modularkbd/Debug/objects.mk b/firmware/67percent/Debug/objects.mk similarity index 100% rename from firmware/modularkbd/Debug/objects.mk rename to firmware/67percent/Debug/objects.mk diff --git a/firmware/modularkbd/Debug/sources.mk b/firmware/67percent/Debug/sources.mk similarity index 100% rename from firmware/modularkbd/Debug/sources.mk rename to firmware/67percent/Debug/sources.mk diff --git a/firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h b/firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h rename to firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h b/firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h rename to firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h b/firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h rename to firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.txt b/firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.txt similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.txt rename to firmware/67percent/Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.txt diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cachel1_armv7.h b/firmware/67percent/Drivers/CMSIS/Include/cachel1_armv7.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cachel1_armv7.h rename to firmware/67percent/Drivers/CMSIS/Include/cachel1_armv7.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_armcc.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_armcc.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_armcc.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_armcc.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_armclang.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_armclang.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_armclang.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_armclang.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_armclang_ltm.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_armclang_ltm.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_armclang_ltm.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_armclang_ltm.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_compiler.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_compiler.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_compiler.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_compiler.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_gcc.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_gcc.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_gcc.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_gcc.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_iccarm.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_iccarm.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_iccarm.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_iccarm.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/cmsis_version.h b/firmware/67percent/Drivers/CMSIS/Include/cmsis_version.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/cmsis_version.h rename to firmware/67percent/Drivers/CMSIS/Include/cmsis_version.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_armv81mml.h b/firmware/67percent/Drivers/CMSIS/Include/core_armv81mml.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_armv81mml.h rename to firmware/67percent/Drivers/CMSIS/Include/core_armv81mml.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_armv8mbl.h b/firmware/67percent/Drivers/CMSIS/Include/core_armv8mbl.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_armv8mbl.h rename to firmware/67percent/Drivers/CMSIS/Include/core_armv8mbl.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_armv8mml.h b/firmware/67percent/Drivers/CMSIS/Include/core_armv8mml.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_armv8mml.h rename to firmware/67percent/Drivers/CMSIS/Include/core_armv8mml.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm0.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm0.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm0.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm0.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm0plus.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm0plus.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm0plus.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm0plus.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm1.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm1.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm1.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm1.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm23.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm23.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm23.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm23.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm3.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm3.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm3.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm3.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm33.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm33.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm33.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm33.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm35p.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm35p.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm35p.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm35p.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm4.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm4.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm4.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm4.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm55.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm55.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm55.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm55.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm7.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm7.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm7.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm7.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_cm85.h b/firmware/67percent/Drivers/CMSIS/Include/core_cm85.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_cm85.h rename to firmware/67percent/Drivers/CMSIS/Include/core_cm85.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_sc000.h b/firmware/67percent/Drivers/CMSIS/Include/core_sc000.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_sc000.h rename to firmware/67percent/Drivers/CMSIS/Include/core_sc000.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_sc300.h b/firmware/67percent/Drivers/CMSIS/Include/core_sc300.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_sc300.h rename to firmware/67percent/Drivers/CMSIS/Include/core_sc300.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/core_starmc1.h b/firmware/67percent/Drivers/CMSIS/Include/core_starmc1.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/core_starmc1.h rename to firmware/67percent/Drivers/CMSIS/Include/core_starmc1.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/mpu_armv7.h b/firmware/67percent/Drivers/CMSIS/Include/mpu_armv7.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/mpu_armv7.h rename to firmware/67percent/Drivers/CMSIS/Include/mpu_armv7.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/mpu_armv8.h b/firmware/67percent/Drivers/CMSIS/Include/mpu_armv8.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/mpu_armv8.h rename to firmware/67percent/Drivers/CMSIS/Include/mpu_armv8.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/pac_armv81.h b/firmware/67percent/Drivers/CMSIS/Include/pac_armv81.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/pac_armv81.h rename to firmware/67percent/Drivers/CMSIS/Include/pac_armv81.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/pmu_armv8.h b/firmware/67percent/Drivers/CMSIS/Include/pmu_armv8.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/pmu_armv8.h rename to firmware/67percent/Drivers/CMSIS/Include/pmu_armv8.h diff --git a/firmware/modularkbd/Drivers/CMSIS/Include/tz_context.h b/firmware/67percent/Drivers/CMSIS/Include/tz_context.h similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/Include/tz_context.h rename to firmware/67percent/Drivers/CMSIS/Include/tz_context.h diff --git a/firmware/modularkbd/Drivers/CMSIS/LICENSE.txt b/firmware/67percent/Drivers/CMSIS/LICENSE.txt similarity index 100% rename from firmware/modularkbd/Drivers/CMSIS/LICENSE.txt rename to firmware/67percent/Drivers/CMSIS/LICENSE.txt diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c diff --git a/firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c b/firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c similarity index 100% rename from firmware/modularkbd/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c rename to firmware/67percent/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c diff --git a/firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt b/firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt similarity index 100% rename from firmware/modularkbd/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt rename to firmware/67percent/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt diff --git a/firmware/modularkbd/Release/Core/Src/main.cyclo b/firmware/67percent/Release/Core/Src/main.cyclo similarity index 100% rename from firmware/modularkbd/Release/Core/Src/main.cyclo rename to firmware/67percent/Release/Core/Src/main.cyclo diff --git a/firmware/modularkbd/Release/Core/Src/main.d b/firmware/67percent/Release/Core/Src/main.d similarity index 100% rename from firmware/modularkbd/Release/Core/Src/main.d rename to firmware/67percent/Release/Core/Src/main.d diff --git a/firmware/modularkbd/Release/Core/Src/main.o b/firmware/67percent/Release/Core/Src/main.o similarity index 100% rename from firmware/modularkbd/Release/Core/Src/main.o rename to firmware/67percent/Release/Core/Src/main.o diff --git a/firmware/modularkbd/Release/Core/Src/main.su b/firmware/67percent/Release/Core/Src/main.su similarity index 100% rename from firmware/modularkbd/Release/Core/Src/main.su rename to firmware/67percent/Release/Core/Src/main.su diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.cyclo b/firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.cyclo similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.cyclo rename to firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.cyclo diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.d b/firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.d similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.d rename to firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.d diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.o b/firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.o similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.o rename to firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.o diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.su b/firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.su similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_hal_msp.su rename to firmware/67percent/Release/Core/Src/stm32f4xx_hal_msp.su diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_it.cyclo b/firmware/67percent/Release/Core/Src/stm32f4xx_it.cyclo similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_it.cyclo rename to firmware/67percent/Release/Core/Src/stm32f4xx_it.cyclo diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_it.d b/firmware/67percent/Release/Core/Src/stm32f4xx_it.d similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_it.d rename to firmware/67percent/Release/Core/Src/stm32f4xx_it.d diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_it.o b/firmware/67percent/Release/Core/Src/stm32f4xx_it.o similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_it.o rename to firmware/67percent/Release/Core/Src/stm32f4xx_it.o diff --git a/firmware/modularkbd/Release/Core/Src/stm32f4xx_it.su b/firmware/67percent/Release/Core/Src/stm32f4xx_it.su similarity index 100% rename from firmware/modularkbd/Release/Core/Src/stm32f4xx_it.su rename to firmware/67percent/Release/Core/Src/stm32f4xx_it.su diff --git a/firmware/modularkbd/Release/Core/Src/subdir.mk b/firmware/67percent/Release/Core/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/Core/Src/subdir.mk rename to firmware/67percent/Release/Core/Src/subdir.mk diff --git a/firmware/modularkbd/Release/Core/Src/syscalls.cyclo b/firmware/67percent/Release/Core/Src/syscalls.cyclo similarity index 100% rename from firmware/modularkbd/Release/Core/Src/syscalls.cyclo rename to firmware/67percent/Release/Core/Src/syscalls.cyclo diff --git a/firmware/modularkbd/Release/Core/Src/syscalls.d b/firmware/67percent/Release/Core/Src/syscalls.d similarity index 100% rename from firmware/modularkbd/Release/Core/Src/syscalls.d rename to firmware/67percent/Release/Core/Src/syscalls.d diff --git a/firmware/modularkbd/Release/Core/Src/syscalls.o b/firmware/67percent/Release/Core/Src/syscalls.o similarity index 100% rename from firmware/modularkbd/Release/Core/Src/syscalls.o rename to firmware/67percent/Release/Core/Src/syscalls.o diff --git a/firmware/modularkbd/Release/Core/Src/syscalls.su b/firmware/67percent/Release/Core/Src/syscalls.su similarity index 100% rename from firmware/modularkbd/Release/Core/Src/syscalls.su rename to firmware/67percent/Release/Core/Src/syscalls.su diff --git a/firmware/modularkbd/Release/Core/Src/sysmem.cyclo b/firmware/67percent/Release/Core/Src/sysmem.cyclo similarity index 100% rename from firmware/modularkbd/Release/Core/Src/sysmem.cyclo rename to firmware/67percent/Release/Core/Src/sysmem.cyclo diff --git a/firmware/modularkbd/Release/Core/Src/sysmem.d b/firmware/67percent/Release/Core/Src/sysmem.d similarity index 100% rename from firmware/modularkbd/Release/Core/Src/sysmem.d rename to firmware/67percent/Release/Core/Src/sysmem.d diff --git a/firmware/modularkbd/Release/Core/Src/sysmem.o b/firmware/67percent/Release/Core/Src/sysmem.o similarity index 100% rename from firmware/modularkbd/Release/Core/Src/sysmem.o rename to firmware/67percent/Release/Core/Src/sysmem.o diff --git a/firmware/modularkbd/Release/Core/Src/sysmem.su b/firmware/67percent/Release/Core/Src/sysmem.su similarity index 100% rename from firmware/modularkbd/Release/Core/Src/sysmem.su rename to firmware/67percent/Release/Core/Src/sysmem.su diff --git a/firmware/modularkbd/Release/Core/Src/system_stm32f4xx.cyclo b/firmware/67percent/Release/Core/Src/system_stm32f4xx.cyclo similarity index 100% rename from firmware/modularkbd/Release/Core/Src/system_stm32f4xx.cyclo rename to firmware/67percent/Release/Core/Src/system_stm32f4xx.cyclo diff --git a/firmware/modularkbd/Release/Core/Src/system_stm32f4xx.d b/firmware/67percent/Release/Core/Src/system_stm32f4xx.d similarity index 100% rename from firmware/modularkbd/Release/Core/Src/system_stm32f4xx.d rename to firmware/67percent/Release/Core/Src/system_stm32f4xx.d diff --git a/firmware/modularkbd/Release/Core/Src/system_stm32f4xx.o b/firmware/67percent/Release/Core/Src/system_stm32f4xx.o similarity index 100% rename from firmware/modularkbd/Release/Core/Src/system_stm32f4xx.o rename to firmware/67percent/Release/Core/Src/system_stm32f4xx.o diff --git a/firmware/modularkbd/Release/Core/Src/system_stm32f4xx.su b/firmware/67percent/Release/Core/Src/system_stm32f4xx.su similarity index 100% rename from firmware/modularkbd/Release/Core/Src/system_stm32f4xx.su rename to firmware/67percent/Release/Core/Src/system_stm32f4xx.su diff --git a/firmware/modularkbd/Release/Core/Startup/startup_stm32f446retx.d b/firmware/67percent/Release/Core/Startup/startup_stm32f446retx.d similarity index 100% rename from firmware/modularkbd/Release/Core/Startup/startup_stm32f446retx.d rename to firmware/67percent/Release/Core/Startup/startup_stm32f446retx.d diff --git a/firmware/modularkbd/Release/Core/Startup/startup_stm32f446retx.o b/firmware/67percent/Release/Core/Startup/startup_stm32f446retx.o similarity index 100% rename from firmware/modularkbd/Release/Core/Startup/startup_stm32f446retx.o rename to firmware/67percent/Release/Core/Startup/startup_stm32f446retx.o diff --git a/firmware/modularkbd/Release/Core/Startup/subdir.mk b/firmware/67percent/Release/Core/Startup/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/Core/Startup/subdir.mk rename to firmware/67percent/Release/Core/Startup/subdir.mk diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su diff --git a/firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk rename to firmware/67percent/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o diff --git a/firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su b/firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su similarity index 100% rename from firmware/modularkbd/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su rename to firmware/67percent/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/subdir.mk b/firmware/67percent/Release/USB_DEVICE/App/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/subdir.mk rename to firmware/67percent/Release/USB_DEVICE/App/subdir.mk diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usb_device.cyclo b/firmware/67percent/Release/USB_DEVICE/App/usb_device.cyclo similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usb_device.cyclo rename to firmware/67percent/Release/USB_DEVICE/App/usb_device.cyclo diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usb_device.d b/firmware/67percent/Release/USB_DEVICE/App/usb_device.d similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usb_device.d rename to firmware/67percent/Release/USB_DEVICE/App/usb_device.d diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usb_device.o b/firmware/67percent/Release/USB_DEVICE/App/usb_device.o similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usb_device.o rename to firmware/67percent/Release/USB_DEVICE/App/usb_device.o diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usb_device.su b/firmware/67percent/Release/USB_DEVICE/App/usb_device.su similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usb_device.su rename to firmware/67percent/Release/USB_DEVICE/App/usb_device.su diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.cyclo b/firmware/67percent/Release/USB_DEVICE/App/usbd_desc.cyclo similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.cyclo rename to firmware/67percent/Release/USB_DEVICE/App/usbd_desc.cyclo diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.d b/firmware/67percent/Release/USB_DEVICE/App/usbd_desc.d similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.d rename to firmware/67percent/Release/USB_DEVICE/App/usbd_desc.d diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.o b/firmware/67percent/Release/USB_DEVICE/App/usbd_desc.o similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.o rename to firmware/67percent/Release/USB_DEVICE/App/usbd_desc.o diff --git a/firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.su b/firmware/67percent/Release/USB_DEVICE/App/usbd_desc.su similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/App/usbd_desc.su rename to firmware/67percent/Release/USB_DEVICE/App/usbd_desc.su diff --git a/firmware/modularkbd/Release/USB_DEVICE/Target/subdir.mk b/firmware/67percent/Release/USB_DEVICE/Target/subdir.mk similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/Target/subdir.mk rename to firmware/67percent/Release/USB_DEVICE/Target/subdir.mk diff --git a/firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.cyclo b/firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.cyclo similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.cyclo rename to firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.cyclo diff --git a/firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.d b/firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.d similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.d rename to firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.d diff --git a/firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.o b/firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.o similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.o rename to firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.o diff --git a/firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.su b/firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.su similarity index 100% rename from firmware/modularkbd/Release/USB_DEVICE/Target/usbd_conf.su rename to firmware/67percent/Release/USB_DEVICE/Target/usbd_conf.su diff --git a/firmware/modularkbd/Release/makefile b/firmware/67percent/Release/makefile similarity index 100% rename from firmware/modularkbd/Release/makefile rename to firmware/67percent/Release/makefile diff --git a/firmware/modularkbd/Release/modularkbd.elf b/firmware/67percent/Release/modularkbd.elf similarity index 100% rename from firmware/modularkbd/Release/modularkbd.elf rename to firmware/67percent/Release/modularkbd.elf diff --git a/firmware/modularkbd/Release/modularkbd.list b/firmware/67percent/Release/modularkbd.list similarity index 100% rename from firmware/modularkbd/Release/modularkbd.list rename to firmware/67percent/Release/modularkbd.list diff --git a/firmware/modularkbd/Release/modularkbd.map b/firmware/67percent/Release/modularkbd.map similarity index 100% rename from firmware/modularkbd/Release/modularkbd.map rename to firmware/67percent/Release/modularkbd.map diff --git a/firmware/modularkbd/Release/objects.list b/firmware/67percent/Release/objects.list similarity index 100% rename from firmware/modularkbd/Release/objects.list rename to firmware/67percent/Release/objects.list diff --git a/firmware/modularkbd/Release/objects.mk b/firmware/67percent/Release/objects.mk similarity index 100% rename from firmware/modularkbd/Release/objects.mk rename to firmware/67percent/Release/objects.mk diff --git a/firmware/modularkbd/Release/sources.mk b/firmware/67percent/Release/sources.mk similarity index 100% rename from firmware/modularkbd/Release/sources.mk rename to firmware/67percent/Release/sources.mk diff --git a/firmware/modularkbd/STM32F446RETX_FLASH.ld b/firmware/67percent/STM32F446RETX_FLASH.ld similarity index 100% rename from firmware/modularkbd/STM32F446RETX_FLASH.ld rename to firmware/67percent/STM32F446RETX_FLASH.ld diff --git a/firmware/modularkbd/STM32F446RETX_RAM.ld b/firmware/67percent/STM32F446RETX_RAM.ld similarity index 100% rename from firmware/modularkbd/STM32F446RETX_RAM.ld rename to firmware/67percent/STM32F446RETX_RAM.ld diff --git a/firmware/modularkbd/USB_DEVICE/App/usb_device.c b/firmware/67percent/USB_DEVICE/App/usb_device.c similarity index 100% rename from firmware/modularkbd/USB_DEVICE/App/usb_device.c rename to firmware/67percent/USB_DEVICE/App/usb_device.c diff --git a/firmware/modularkbd/USB_DEVICE/App/usb_device.h b/firmware/67percent/USB_DEVICE/App/usb_device.h similarity index 100% rename from firmware/modularkbd/USB_DEVICE/App/usb_device.h rename to firmware/67percent/USB_DEVICE/App/usb_device.h diff --git a/firmware/modularkbd/USB_DEVICE/App/usbd_desc.c b/firmware/67percent/USB_DEVICE/App/usbd_desc.c similarity index 100% rename from firmware/modularkbd/USB_DEVICE/App/usbd_desc.c rename to firmware/67percent/USB_DEVICE/App/usbd_desc.c diff --git a/firmware/modularkbd/USB_DEVICE/App/usbd_desc.h b/firmware/67percent/USB_DEVICE/App/usbd_desc.h similarity index 100% rename from firmware/modularkbd/USB_DEVICE/App/usbd_desc.h rename to firmware/67percent/USB_DEVICE/App/usbd_desc.h diff --git a/firmware/modularkbd/USB_DEVICE/Target/usbd_conf.c b/firmware/67percent/USB_DEVICE/Target/usbd_conf.c similarity index 100% rename from firmware/modularkbd/USB_DEVICE/Target/usbd_conf.c rename to firmware/67percent/USB_DEVICE/Target/usbd_conf.c diff --git a/firmware/modularkbd/USB_DEVICE/Target/usbd_conf.h b/firmware/67percent/USB_DEVICE/Target/usbd_conf.h similarity index 100% rename from firmware/modularkbd/USB_DEVICE/Target/usbd_conf.h rename to firmware/67percent/USB_DEVICE/Target/usbd_conf.h diff --git a/firmware/modularkbd/modularkbd.ioc b/firmware/67percent/modularkbd.ioc similarity index 100% rename from firmware/modularkbd/modularkbd.ioc rename to firmware/67percent/modularkbd.ioc diff --git a/firmware/modularkbd/modularkbd.launch b/firmware/67percent/modularkbd.launch similarity index 100% rename from firmware/modularkbd/modularkbd.launch rename to firmware/67percent/modularkbd.launch diff --git a/firmware/numpad/.cproject b/firmware/numpad/.cproject new file mode 100644 index 00000000..81260053 --- /dev/null +++ b/firmware/numpad/.cproject @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/firmware/numpad/.mxproject b/firmware/numpad/.mxproject new file mode 100644 index 00000000..b071a477 --- /dev/null +++ b/firmware/numpad/.mxproject @@ -0,0 +1,45 @@ +[PreviousLibFiles] +LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dmamux.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dmamux.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/cachel1_armv7.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_armclang_ltm.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv81mml.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm35p.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm55.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cm85.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_starmc1.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/pac_armv81.h;Drivers/CMSIS/Include/pmu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core/Src/main.c;Core/Src/gpio.c;Core/Src/dma.c;Core/Src/i2c.c;Core/Src/tim.c;Core/Src/usart.c;USB_DEVICE/App/usb_device.c;USB_DEVICE/Target/usbd_conf.c;USB_DEVICE/App/usbd_desc.c;Core/Src/stm32f4xx_it.c;Core/Src/stm32f4xx_hal_msp.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Core/Src/system_stm32f4xx.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Core/Src/system_stm32f4xx.c;;;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c; +HeaderPath=Drivers/STM32F4xx_HAL_Driver/Inc;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;Middlewares/ST/STM32_USB_Device_Library/Core/Inc;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc;Drivers/CMSIS/Device/ST/STM32F4xx/Include;Drivers/CMSIS/Include;Core/Inc;USB_DEVICE/App;USB_DEVICE/Target; +CDefines=USE_HAL_DRIVER;STM32F446xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=11 +HeaderFiles#0=../Core/Inc/gpio.h +HeaderFiles#1=../Core/Inc/dma.h +HeaderFiles#2=../Core/Inc/i2c.h +HeaderFiles#3=../Core/Inc/tim.h +HeaderFiles#4=../Core/Inc/usart.h +HeaderFiles#5=../USB_DEVICE/App/usb_device.h +HeaderFiles#6=../USB_DEVICE/Target/usbd_conf.h +HeaderFiles#7=../USB_DEVICE/App/usbd_desc.h +HeaderFiles#8=../Core/Inc/stm32f4xx_it.h +HeaderFiles#9=../Core/Inc/stm32f4xx_hal_conf.h +HeaderFiles#10=../Core/Inc/main.h +HeaderFolderListSize=3 +HeaderPath#0=../Core/Inc +HeaderPath#1=../USB_DEVICE/App +HeaderPath#2=../USB_DEVICE/Target +HeaderFiles=; +SourceFileListSize=11 +SourceFiles#0=../Core/Src/gpio.c +SourceFiles#1=../Core/Src/dma.c +SourceFiles#2=../Core/Src/i2c.c +SourceFiles#3=../Core/Src/tim.c +SourceFiles#4=../Core/Src/usart.c +SourceFiles#5=../USB_DEVICE/App/usb_device.c +SourceFiles#6=../USB_DEVICE/Target/usbd_conf.c +SourceFiles#7=../USB_DEVICE/App/usbd_desc.c +SourceFiles#8=../Core/Src/stm32f4xx_it.c +SourceFiles#9=../Core/Src/stm32f4xx_hal_msp.c +SourceFiles#10=../Core/Src/main.c +SourceFolderListSize=3 +SourcePath#0=../Core/Src +SourcePath#1=../USB_DEVICE/App +SourcePath#2=../USB_DEVICE/Target +SourceFiles=; + diff --git a/firmware/numpad/.project b/firmware/numpad/.project new file mode 100644 index 00000000..3dcc683b --- /dev/null +++ b/firmware/numpad/.project @@ -0,0 +1,32 @@ + + + modularkbd + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.st.stm32cube.ide.mcu.MCUProjectNature + com.st.stm32cube.ide.mcu.MCUCubeProjectNature + org.eclipse.cdt.core.cnature + com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature + com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature + com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature + com.st.stm32cube.ide.mcu.MCURootProjectNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/firmware/numpad/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs b/firmware/numpad/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs new file mode 100644 index 00000000..98a69fc7 --- /dev/null +++ b/firmware/numpad/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}} diff --git a/firmware/modularkbd/.settings/language.settings.xml b/firmware/numpad/.settings/language.settings.xml similarity index 100% rename from firmware/modularkbd/.settings/language.settings.xml rename to firmware/numpad/.settings/language.settings.xml diff --git a/firmware/numpad/.settings/org.eclipse.core.resources.prefs b/firmware/numpad/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..99f26c02 --- /dev/null +++ b/firmware/numpad/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/firmware/numpad/.settings/stm32cubeide.project.prefs b/firmware/numpad/.settings/stm32cubeide.project.prefs new file mode 100644 index 00000000..312ed386 --- /dev/null +++ b/firmware/numpad/.settings/stm32cubeide.project.prefs @@ -0,0 +1,5 @@ +635E684B79701B039C64EA45C3F84D30=995AAB8BA274295E2F8F7F317CB52865 +66BE74F758C12D739921AEA421D593D3=0 +8DF89ED150041C4CBC7CB9A9CAA90856=CFE0804C550E33C5B9DAB17F678FB68D +DC22A860405A8BF2F2C095E5B6529F12=CFE0804C550E33C5B9DAB17F678FB68D +eclipse.preferences.version=1 diff --git a/firmware/numpad/Core/Inc/Backup/dma.h.bak b/firmware/numpad/Core/Inc/Backup/dma.h.bak new file mode 100644 index 00000000..b8744950 --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/dma.h.bak @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file dma.h + * @brief This file contains all the function prototypes for + * the dma.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __DMA_H__ +#define __DMA_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* DMA memory to memory transfer handles -------------------------------------*/ + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_DMA_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __DMA_H__ */ + diff --git a/firmware/numpad/Core/Inc/Backup/gpio.h.bak b/firmware/numpad/Core/Inc/Backup/gpio.h.bak new file mode 100644 index 00000000..8ba7de1e --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/gpio.h.bak @@ -0,0 +1,49 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.h + * @brief This file contains all the function prototypes for + * the gpio.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __GPIO_H__ +#define __GPIO_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_GPIO_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif +#endif /*__ GPIO_H__ */ + diff --git a/firmware/numpad/Core/Inc/Backup/i2c.h.bak b/firmware/numpad/Core/Inc/Backup/i2c.h.bak new file mode 100644 index 00000000..4d3f631f --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/i2c.h.bak @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file i2c.h + * @brief This file contains all the function prototypes for + * the i2c.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __I2C_H__ +#define __I2C_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern I2C_HandleTypeDef hi2c1; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_I2C1_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __I2C_H__ */ + diff --git a/firmware/numpad/Core/Inc/Backup/main.h.bak b/firmware/numpad/Core/Inc/Backup/main.h.bak new file mode 100644 index 00000000..0e09511f --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/main.h.bak @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ +// Modifier Keys +#define KEY_LEFT_CTRL 0xE0 +#define KEY_LEFT_SHIFT 0xE1 +#define KEY_LEFT_ALT 0xE2 +#define KEY_LEFT_GUI 0xE3 +#define KEY_RIGHT_CTRL 0xE4 +#define KEY_RIGHT_SHIFT 0xE5 +#define KEY_RIGHT_ALT 0xE6 +#define KEY_RIGHT_GUI 0xE7 + +// Regular Keys (Usage ID 0x04–0x73) +#define KEY_A 0x04 +#define KEY_B 0x05 +#define KEY_C 0x06 +#define KEY_D 0x07 +#define KEY_E 0x08 +#define KEY_F 0x09 +#define KEY_G 0x0A +#define KEY_H 0x0B +#define KEY_I 0x0C +#define KEY_J 0x0D +#define KEY_K 0x0E +#define KEY_L 0x0F +#define KEY_M 0x10 +#define KEY_N 0x11 +#define KEY_O 0x12 +#define KEY_P 0x13 +#define KEY_Q 0x14 +#define KEY_R 0x15 +#define KEY_S 0x16 +#define KEY_T 0x17 +#define KEY_U 0x18 +#define KEY_V 0x19 +#define KEY_W 0x1A +#define KEY_X 0x1B +#define KEY_Y 0x1C +#define KEY_Z 0x1D + +#define KEY_1 0x1E +#define KEY_2 0x1F +#define KEY_3 0x20 +#define KEY_4 0x21 +#define KEY_5 0x22 +#define KEY_6 0x23 +#define KEY_7 0x24 +#define KEY_8 0x25 +#define KEY_9 0x26 +#define KEY_0 0x27 + +#define KEY_ENTER 0x28 +#define KEY_ESC 0x29 +#define KEY_BACKSPACE 0x2A +#define KEY_TAB 0x2B +#define KEY_SPACE 0x2C +#define KEY_MINUS 0x2D +#define KEY_EQUAL 0x2E +#define KEY_LEFT_BRACKET 0x2F +#define KEY_RIGHT_BRACKET 0x30 +#define KEY_BACKSLASH 0x31 +#define KEY_NON_US_HASH 0x32 +#define KEY_SEMICOLON 0x33 +#define KEY_APOSTROPHE 0x34 +#define KEY_GRAVE 0x35 +#define KEY_COMMA 0x36 +#define KEY_PERIOD 0x37 +#define KEY_SLASH 0x38 +#define KEY_CAPS_LOCK 0x39 + +// Function Keys +#define KEY_F1 0x3A +#define KEY_F2 0x3B +#define KEY_F3 0x3C +#define KEY_F4 0x3D +#define KEY_F5 0x3E +#define KEY_F6 0x3F +#define KEY_F7 0x40 +#define KEY_F8 0x41 +#define KEY_F9 0x42 +#define KEY_F10 0x43 +#define KEY_F11 0x44 +#define KEY_F12 0x45 + +#define KEY_PRINT_SCREEN 0x46 +#define KEY_SCROLL_LOCK 0x47 +#define KEY_PAUSE 0x48 + +// Navigation Keys +#define KEY_INSERT 0x49 +#define KEY_HOME 0x4A +#define KEY_PAGE_UP 0x4B +#define KEY_DELETE 0x4C +#define KEY_END 0x4D +#define KEY_PAGE_DOWN 0x4E + +#define KEY_RIGHT_ARROW 0x4F +#define KEY_LEFT_ARROW 0x50 +#define KEY_DOWN_ARROW 0x51 +#define KEY_UP_ARROW 0x52 + +// Keypad +#define NUM_LOCK 0x53 +#define KEYPAD_SLASH 0x54 +#define KEYPAD_ASTERISK 0x55 +#define KEYPAD_MINUS 0x56 +#define KEYPAD_PLUS 0x57 +#define KEYPAD_ENTER 0x58 +#define KEYPAD_1 0x59 +#define KEYPAD_2 0x5A +#define KEYPAD_3 0x5B +#define KEYPAD_4 0x5C +#define KEYPAD_5 0x5D +#define KEYPAD_6 0x5E +#define KEYPAD_7 0x5F +#define KEYPAD_8 0x60 +#define KEYPAD_9 0x61 +#define KEYPAD_0 0x62 +#define KEYPAD_DOT 0x63 + +// Misc/Non-US +#define KEY_NON_US_BACKSLASH 0x64 +#define KEY_APPLICATION 0x65 +#define KEY_POWER 0x66 +#define KEYPAD_EQUAL 0x67 +#define KEY_F13 0x68 +#define KEY_F14 0x69 +#define KEY_F15 0x6A +#define KEY_F16 0x6B +#define KEY_F17 0x6C +#define KEY_F18 0x6D +#define KEY_F19 0x6E +#define KEY_F20 0x6F +#define KEY_F21 0x70 +#define KEY_F22 0x71 +#define KEY_F23 0x72 +#define KEY_F24 0x73 +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/firmware/numpad/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak b/firmware/numpad/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak new file mode 100644 index 00000000..fac4fa4e --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak @@ -0,0 +1,495 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf_template.h + * @author MCD Application Team + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32f4xx_hal_conf.h. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CONF_H +#define __STM32F4xx_HAL_CONF_H + +#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 + */ +#define HAL_MODULE_ENABLED + + /* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_ETH_LEGACY_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_PCCARD_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +#define HAL_I2C_MODULE_ENABLED +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +#define HAL_PCD_MODULE_ENABLED +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_FMPI2C_MODULE_ENABLED */ +/* #define HAL_FMPSMBUS_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## 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 8000000U /*!< 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 ((uint32_t)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 External audio frequency 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 15U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ +#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ +#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ +#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ +#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## 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 Address*/ +#define DP83848_PHY_ADDRESS +/* 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)0x0000U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001U) /*!< 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)) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)) /*!< PHY Duplex 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 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_ETH_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_eth_legacy.h" +#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED + #include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_FMPSMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_fmpsmbus.h" +#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f4xx_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)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CONF_H */ diff --git a/firmware/numpad/Core/Inc/Backup/stm32f4xx_it.h.bak b/firmware/numpad/Core/Inc/Backup/stm32f4xx_it.h.bak new file mode 100644 index 00000000..bfc8aa91 --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/stm32f4xx_it.h.bak @@ -0,0 +1,79 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_IT_H +#define __STM32F4xx_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void DMA1_Stream0_IRQHandler(void); +void DMA1_Stream2_IRQHandler(void); +void DMA1_Stream4_IRQHandler(void); +void DMA1_Stream5_IRQHandler(void); +void DMA1_Stream6_IRQHandler(void); +void USART1_IRQHandler(void); +void USART2_IRQHandler(void); +void DMA1_Stream7_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void DMA2_Stream2_IRQHandler(void); +void OTG_FS_IRQHandler(void); +void DMA2_Stream7_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_IT_H */ diff --git a/firmware/numpad/Core/Inc/Backup/tim.h.bak b/firmware/numpad/Core/Inc/Backup/tim.h.bak new file mode 100644 index 00000000..f689f344 --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/tim.h.bak @@ -0,0 +1,57 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file tim.h + * @brief This file contains all the function prototypes for + * the tim.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __TIM_H__ +#define __TIM_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern TIM_HandleTypeDef htim2; + +extern TIM_HandleTypeDef htim3; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_TIM2_Init(void); +void MX_TIM3_Init(void); + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __TIM_H__ */ + diff --git a/firmware/numpad/Core/Inc/Backup/usart.h.bak b/firmware/numpad/Core/Inc/Backup/usart.h.bak new file mode 100644 index 00000000..b62ed639 --- /dev/null +++ b/firmware/numpad/Core/Inc/Backup/usart.h.bak @@ -0,0 +1,61 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.h + * @brief This file contains all the function prototypes for + * the usart.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USART_H__ +#define __USART_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern UART_HandleTypeDef huart4; + +extern UART_HandleTypeDef huart5; + +extern UART_HandleTypeDef huart1; + +extern UART_HandleTypeDef huart2; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_UART4_Init(void); +void MX_UART5_Init(void); +void MX_USART1_UART_Init(void); +void MX_USART2_UART_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USART_H__ */ + diff --git a/firmware/numpad/Core/Inc/dma.h b/firmware/numpad/Core/Inc/dma.h new file mode 100644 index 00000000..b8744950 --- /dev/null +++ b/firmware/numpad/Core/Inc/dma.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file dma.h + * @brief This file contains all the function prototypes for + * the dma.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __DMA_H__ +#define __DMA_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* DMA memory to memory transfer handles -------------------------------------*/ + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_DMA_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __DMA_H__ */ + diff --git a/firmware/numpad/Core/Inc/gpio.h b/firmware/numpad/Core/Inc/gpio.h new file mode 100644 index 00000000..8ba7de1e --- /dev/null +++ b/firmware/numpad/Core/Inc/gpio.h @@ -0,0 +1,49 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.h + * @brief This file contains all the function prototypes for + * the gpio.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __GPIO_H__ +#define __GPIO_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_GPIO_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif +#endif /*__ GPIO_H__ */ + diff --git a/firmware/numpad/Core/Inc/hid_queue.h b/firmware/numpad/Core/Inc/hid_queue.h new file mode 100644 index 00000000..8198b981 --- /dev/null +++ b/firmware/numpad/Core/Inc/hid_queue.h @@ -0,0 +1,33 @@ +#ifndef HID_QUEUE_H +#define HID_QUEUE_H + +#include +#include + +typedef struct { + uint8_t MODIFIER; // Modifier keys (Ctrl, Shift, Alt, Win) + uint8_t RESERVED; // Always 0 + uint8_t KEYPRESS[12]; // Up to 12 keycodes +} __attribute__((packed)) HIDReport; + +typedef struct { + HIDReport *buffer; + uint16_t capacity; + uint16_t head; + uint16_t tail; + uint16_t count; +} HIDQueue; + +// Init + reset +bool hid_queue_init(HIDQueue *q, HIDReport *buffer, uint16_t capacity); +void hid_queue_reset(HIDQueue *q); + +// FIFO Ops +bool hid_queue_push(HIDQueue *q, HIDReport item); +bool hid_queue_pop(HIDQueue *q, HIDReport *out); + +// Helpers +bool hid_queue_is_empty(HIDQueue *q); +bool hid_queue_is_full(HIDQueue *q); + +#endif diff --git a/firmware/numpad/Core/Inc/i2c.h b/firmware/numpad/Core/Inc/i2c.h new file mode 100644 index 00000000..4d3f631f --- /dev/null +++ b/firmware/numpad/Core/Inc/i2c.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file i2c.h + * @brief This file contains all the function prototypes for + * the i2c.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __I2C_H__ +#define __I2C_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern I2C_HandleTypeDef hi2c1; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_I2C1_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __I2C_H__ */ + diff --git a/firmware/numpad/Core/Inc/main.h b/firmware/numpad/Core/Inc/main.h new file mode 100644 index 00000000..0e09511f --- /dev/null +++ b/firmware/numpad/Core/Inc/main.h @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ +// Modifier Keys +#define KEY_LEFT_CTRL 0xE0 +#define KEY_LEFT_SHIFT 0xE1 +#define KEY_LEFT_ALT 0xE2 +#define KEY_LEFT_GUI 0xE3 +#define KEY_RIGHT_CTRL 0xE4 +#define KEY_RIGHT_SHIFT 0xE5 +#define KEY_RIGHT_ALT 0xE6 +#define KEY_RIGHT_GUI 0xE7 + +// Regular Keys (Usage ID 0x04–0x73) +#define KEY_A 0x04 +#define KEY_B 0x05 +#define KEY_C 0x06 +#define KEY_D 0x07 +#define KEY_E 0x08 +#define KEY_F 0x09 +#define KEY_G 0x0A +#define KEY_H 0x0B +#define KEY_I 0x0C +#define KEY_J 0x0D +#define KEY_K 0x0E +#define KEY_L 0x0F +#define KEY_M 0x10 +#define KEY_N 0x11 +#define KEY_O 0x12 +#define KEY_P 0x13 +#define KEY_Q 0x14 +#define KEY_R 0x15 +#define KEY_S 0x16 +#define KEY_T 0x17 +#define KEY_U 0x18 +#define KEY_V 0x19 +#define KEY_W 0x1A +#define KEY_X 0x1B +#define KEY_Y 0x1C +#define KEY_Z 0x1D + +#define KEY_1 0x1E +#define KEY_2 0x1F +#define KEY_3 0x20 +#define KEY_4 0x21 +#define KEY_5 0x22 +#define KEY_6 0x23 +#define KEY_7 0x24 +#define KEY_8 0x25 +#define KEY_9 0x26 +#define KEY_0 0x27 + +#define KEY_ENTER 0x28 +#define KEY_ESC 0x29 +#define KEY_BACKSPACE 0x2A +#define KEY_TAB 0x2B +#define KEY_SPACE 0x2C +#define KEY_MINUS 0x2D +#define KEY_EQUAL 0x2E +#define KEY_LEFT_BRACKET 0x2F +#define KEY_RIGHT_BRACKET 0x30 +#define KEY_BACKSLASH 0x31 +#define KEY_NON_US_HASH 0x32 +#define KEY_SEMICOLON 0x33 +#define KEY_APOSTROPHE 0x34 +#define KEY_GRAVE 0x35 +#define KEY_COMMA 0x36 +#define KEY_PERIOD 0x37 +#define KEY_SLASH 0x38 +#define KEY_CAPS_LOCK 0x39 + +// Function Keys +#define KEY_F1 0x3A +#define KEY_F2 0x3B +#define KEY_F3 0x3C +#define KEY_F4 0x3D +#define KEY_F5 0x3E +#define KEY_F6 0x3F +#define KEY_F7 0x40 +#define KEY_F8 0x41 +#define KEY_F9 0x42 +#define KEY_F10 0x43 +#define KEY_F11 0x44 +#define KEY_F12 0x45 + +#define KEY_PRINT_SCREEN 0x46 +#define KEY_SCROLL_LOCK 0x47 +#define KEY_PAUSE 0x48 + +// Navigation Keys +#define KEY_INSERT 0x49 +#define KEY_HOME 0x4A +#define KEY_PAGE_UP 0x4B +#define KEY_DELETE 0x4C +#define KEY_END 0x4D +#define KEY_PAGE_DOWN 0x4E + +#define KEY_RIGHT_ARROW 0x4F +#define KEY_LEFT_ARROW 0x50 +#define KEY_DOWN_ARROW 0x51 +#define KEY_UP_ARROW 0x52 + +// Keypad +#define NUM_LOCK 0x53 +#define KEYPAD_SLASH 0x54 +#define KEYPAD_ASTERISK 0x55 +#define KEYPAD_MINUS 0x56 +#define KEYPAD_PLUS 0x57 +#define KEYPAD_ENTER 0x58 +#define KEYPAD_1 0x59 +#define KEYPAD_2 0x5A +#define KEYPAD_3 0x5B +#define KEYPAD_4 0x5C +#define KEYPAD_5 0x5D +#define KEYPAD_6 0x5E +#define KEYPAD_7 0x5F +#define KEYPAD_8 0x60 +#define KEYPAD_9 0x61 +#define KEYPAD_0 0x62 +#define KEYPAD_DOT 0x63 + +// Misc/Non-US +#define KEY_NON_US_BACKSLASH 0x64 +#define KEY_APPLICATION 0x65 +#define KEY_POWER 0x66 +#define KEYPAD_EQUAL 0x67 +#define KEY_F13 0x68 +#define KEY_F14 0x69 +#define KEY_F15 0x6A +#define KEY_F16 0x6B +#define KEY_F17 0x6C +#define KEY_F18 0x6D +#define KEY_F19 0x6E +#define KEY_F20 0x6F +#define KEY_F21 0x70 +#define KEY_F22 0x71 +#define KEY_F23 0x72 +#define KEY_F24 0x73 +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/firmware/numpad/Core/Inc/stm32f4xx_hal_conf.h b/firmware/numpad/Core/Inc/stm32f4xx_hal_conf.h new file mode 100644 index 00000000..fac4fa4e --- /dev/null +++ b/firmware/numpad/Core/Inc/stm32f4xx_hal_conf.h @@ -0,0 +1,495 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf_template.h + * @author MCD Application Team + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32f4xx_hal_conf.h. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CONF_H +#define __STM32F4xx_HAL_CONF_H + +#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 + */ +#define HAL_MODULE_ENABLED + + /* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_ETH_LEGACY_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_PCCARD_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +#define HAL_I2C_MODULE_ENABLED +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +#define HAL_PCD_MODULE_ENABLED +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_FMPI2C_MODULE_ENABLED */ +/* #define HAL_FMPSMBUS_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## 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 8000000U /*!< 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 ((uint32_t)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 External audio frequency 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 15U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ +#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ +#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ +#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ +#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## 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 Address*/ +#define DP83848_PHY_ADDRESS +/* 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)0x0000U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001U) /*!< 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)) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)) /*!< PHY Duplex 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 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_ETH_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_eth_legacy.h" +#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED + #include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_FMPSMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_fmpsmbus.h" +#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f4xx_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)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CONF_H */ diff --git a/firmware/numpad/Core/Inc/stm32f4xx_it.h b/firmware/numpad/Core/Inc/stm32f4xx_it.h new file mode 100644 index 00000000..bfc8aa91 --- /dev/null +++ b/firmware/numpad/Core/Inc/stm32f4xx_it.h @@ -0,0 +1,79 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_IT_H +#define __STM32F4xx_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void DMA1_Stream0_IRQHandler(void); +void DMA1_Stream2_IRQHandler(void); +void DMA1_Stream4_IRQHandler(void); +void DMA1_Stream5_IRQHandler(void); +void DMA1_Stream6_IRQHandler(void); +void USART1_IRQHandler(void); +void USART2_IRQHandler(void); +void DMA1_Stream7_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void DMA2_Stream2_IRQHandler(void); +void OTG_FS_IRQHandler(void); +void DMA2_Stream7_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_IT_H */ diff --git a/firmware/numpad/Core/Inc/tim.h b/firmware/numpad/Core/Inc/tim.h new file mode 100644 index 00000000..f689f344 --- /dev/null +++ b/firmware/numpad/Core/Inc/tim.h @@ -0,0 +1,57 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file tim.h + * @brief This file contains all the function prototypes for + * the tim.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __TIM_H__ +#define __TIM_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern TIM_HandleTypeDef htim2; + +extern TIM_HandleTypeDef htim3; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_TIM2_Init(void); +void MX_TIM3_Init(void); + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __TIM_H__ */ + diff --git a/firmware/numpad/Core/Inc/usart.h b/firmware/numpad/Core/Inc/usart.h new file mode 100644 index 00000000..b62ed639 --- /dev/null +++ b/firmware/numpad/Core/Inc/usart.h @@ -0,0 +1,61 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.h + * @brief This file contains all the function prototypes for + * the usart.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USART_H__ +#define __USART_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern UART_HandleTypeDef huart4; + +extern UART_HandleTypeDef huart5; + +extern UART_HandleTypeDef huart1; + +extern UART_HandleTypeDef huart2; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_UART4_Init(void); +void MX_UART5_Init(void); +void MX_USART1_UART_Init(void); +void MX_USART2_UART_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USART_H__ */ + diff --git a/firmware/numpad/Core/Src/Backup/dma.c.bak b/firmware/numpad/Core/Src/Backup/dma.c.bak new file mode 100644 index 00000000..ea28d29a --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/dma.c.bak @@ -0,0 +1,77 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file dma.c + * @brief This file provides code for the configuration + * of all the requested memory to memory DMA transfers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "dma.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/*----------------------------------------------------------------------------*/ +/* Configure DMA */ +/*----------------------------------------------------------------------------*/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** + * Enable DMA controller clock + */ +void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + __HAL_RCC_DMA2_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); + /* DMA1_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn); + /* DMA1_Stream4_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn); + /* DMA1_Stream5_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); + /* DMA1_Stream6_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); + /* DMA1_Stream7_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); + /* DMA2_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); + /* DMA2_Stream7_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); + +} + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ + diff --git a/firmware/numpad/Core/Src/Backup/gpio.c.bak b/firmware/numpad/Core/Src/Backup/gpio.c.bak new file mode 100644 index 00000000..1ac25202 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/gpio.c.bak @@ -0,0 +1,90 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.c + * @brief This file provides code for the configuration + * of all used GPIO pins. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "gpio.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/*----------------------------------------------------------------------------*/ +/* Configure GPIO */ +/*----------------------------------------------------------------------------*/ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** Configure pins as + * Analog + * Input + * Output + * EVENT_OUT + * EXTI +*/ +void MX_GPIO_Init(void) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + + /*Configure GPIO pins : PC4 PC5 */ + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /*Configure GPIO pins : PB0 PB1 PB2 PB10 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pins : PC6 PC7 PC8 PC9 */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /*Configure GPIO pin : PA8 */ + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ diff --git a/firmware/numpad/Core/Src/Backup/i2c.c.bak b/firmware/numpad/Core/Src/Backup/i2c.c.bak new file mode 100644 index 00000000..1bcb7ec1 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/i2c.c.bak @@ -0,0 +1,116 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file i2c.c + * @brief This file provides code for the configuration + * of the I2C instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "i2c.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +I2C_HandleTypeDef hi2c1; + +/* I2C1 init function */ +void MX_I2C1_Init(void) +{ + + /* USER CODE BEGIN I2C1_Init 0 */ + + /* USER CODE END I2C1_Init 0 */ + + /* USER CODE BEGIN I2C1_Init 1 */ + + /* USER CODE END I2C1_Init 1 */ + hi2c1.Instance = I2C1; + hi2c1.Init.ClockSpeed = 100000; + hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; + hi2c1.Init.OwnAddress1 = 0; + hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; + hi2c1.Init.OwnAddress2 = 0; + hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + if (HAL_I2C_Init(&hi2c1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2C1_Init 2 */ + + /* USER CODE END I2C1_Init 2 */ + +} + +void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(i2cHandle->Instance==I2C1) + { + /* USER CODE BEGIN I2C1_MspInit 0 */ + + /* USER CODE END I2C1_MspInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**I2C1 GPIO Configuration + PB6 ------> I2C1_SCL + PB7 ------> I2C1_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* I2C1 clock enable */ + __HAL_RCC_I2C1_CLK_ENABLE(); + /* USER CODE BEGIN I2C1_MspInit 1 */ + + /* USER CODE END I2C1_MspInit 1 */ + } +} + +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle) +{ + + if(i2cHandle->Instance==I2C1) + { + /* USER CODE BEGIN I2C1_MspDeInit 0 */ + + /* USER CODE END I2C1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C1_CLK_DISABLE(); + + /**I2C1 GPIO Configuration + PB6 ------> I2C1_SCL + PB7 ------> I2C1_SDA + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7); + + /* USER CODE BEGIN I2C1_MspDeInit 1 */ + + /* USER CODE END I2C1_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/Backup/main.c.bak b/firmware/numpad/Core/Src/Backup/main.c.bak new file mode 100644 index 00000000..344b7a56 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/main.c.bak @@ -0,0 +1,329 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "dma.h" +#include "i2c.h" +#include "tim.h" +#include "usart.h" +#include "usb_device.h" +#include "gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "usbd_hid.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +// HID (Human Interface Device) report structure +typedef struct { + uint8_t MODIFIER; // Modifier keys (e.g., Ctrl, Shift, Alt, GUI/Win) + uint8_t RESERVED; // Reserved for alignment, always set to 0 + uint8_t KEYPRESS[12]; // Array holding up to 12 keycodes being pressed +} HIDReport; + + +// Switch pin mapping structure +typedef struct { + GPIO_TypeDef* GPIOx; // Pointer to GPIO port (e.g., GPIOA, GPIOB) + uint16_t PIN; // Pin number on the GPIO port +} SwitchPins; + + +// UART message structure for sending/receiving key events +typedef struct { + uint16_t DEPTH; // Custom field: could represent queue depth, layer, or message size + uint16_t TYPE; // Message type identifier (defines what kind of message this is) + uint8_t KEYPRESS[12]; // Keypress data (similar to HIDReport, but for UART transmission) +} UARTMessage; + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ +#define ROW 6 +#define COL 5 +#define MAXQUEUE 256 +#define MODE_INACTIVE 0 +#define MODE_MAINBOARD 1 +#define MODE_ACTIVE 2 +#define MODE_DEBUG 3 +#define UART_RX_BUFF_SIZE 64 +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +// Initialize HID report properly +HIDReport REPORT = {0, 0, {0}}; + +SwitchPins ROW_PINS[ROW] = { + {GPIOB, GPIO_PIN_10}, + {GPIOB, GPIO_PIN_2}, + {GPIOB, GPIO_PIN_1}, + {GPIOB, GPIO_PIN_0}, + {GPIOC, GPIO_PIN_5}, + {GPIOC, GPIO_PIN_4}, +}; + +SwitchPins COLUMN_PINS[COL] = { + {GPIOA, GPIO_PIN_8}, + {GPIOC, GPIO_PIN_9}, + {GPIOC, GPIO_PIN_8}, + {GPIOC, GPIO_PIN_7}, + {GPIOC, GPIO_PIN_5} +}; + +// Initialize keycodes array +uint8_t KEYCODES[ROW][COL] = { + {0x00, KEY_F13, KEY_F14, KEY_F15, KEY_F16}, + {KEY_F17, NUM_LOCK, KEYPAD_SLASH, KEYPAD_ASTERISK, KEYPAD_MINUS}, + {KEY_F18, KEYPAD_7, KEYPAD_8, KEYPAD_9, KEYPAD_PLUS}, + {KEY_F19, KEYPAD_4, KEYPAD_5, KEYPAD_6, 0x00}, + {KEY_F20, KEYPAD_1, KEYPAD_2, KEYPAD_3, KEYPAD_ENTER}, + {KEY_F21, KEYPAD_0, 0x00, KEYPAD_DOT, 0x00} +}; + +uint16_t DEPTH = 0; + +extern USBD_HandleTypeDef hUsbDeviceFS; +volatile uint8_t MODE = MODE_INACTIVE; + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +/* USER CODE BEGIN PFP */ +void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *huart); +void UART_DMA_SendReport(UART_HandleTypeDef *huart); +void addUSBReport(uint8_t usageID); +void matrixScan(void); +void resetReport(void); +void sendMessage(void); +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_DMA_Init(); + MX_TIM2_Init(); + MX_TIM3_Init(); + MX_UART4_Init(); + MX_UART5_Init(); + MX_USART1_UART_Init(); + MX_USART2_UART_Init(); + MX_I2C1_Init(); + MX_USB_DEVICE_Init(); + /* USER CODE BEGIN 2 */ + + UARTMessage REQ; + REQ.TYPE = 0xFF; //Message code for request is 0xFF + HAL_UART_Transmit_DMA(&huart4, (uint8_t*)&REQ, sizeof(REQ)); + + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + switch (MODE){ + case MODE_ACTIVE: + resetReport(); + matrixScan(); + break; + + case MODE_INACTIVE: + //If the module is connected through the USB then mode is mainboard + if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED){ + MODE = MODE_MAINBOARD; + DEPTH = 0; + }else{ + //TODO: Look for a parent module... UARTMessage REQ; + } + break; + + case MODE_MAINBOARD: + resetReport(); + matrixScan(); + USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT)); + break; + } + HAL_Delay(50); + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 4; + RCC_OscInitStruct.PLL.PLLN = 96; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + RCC_OscInitStruct.PLL.PLLR = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) + { + Error_Handler(); + } +} + +/* USER CODE BEGIN 4 */ +//UART Message Requests Goes Here +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ + +} + +//TODO: A function that gets called by RX Interrupt to handle messages that get sent +void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *sender){ + //TODO: Handle messages coming from devices based on the message type... +} + +void addUSBReport(uint8_t usageID){ + if(usageID < 0x04 || usageID > 0x73) return; //Usage ID is out of bounds + uint16_t bit_index = usageID - 0x04; //Offset, UsageID starts with 0x04. Gives us the actual value of the bit + uint8_t byte_index = bit_index/8; //Calculates which byte in the REPORT array + uint8_t bit_offset = bit_index%8; //Calculates which bits in the REPORT[byte_index] should be set/unset + REPORT.KEYPRESS[byte_index] |= (1 << bit_offset); +} + +void matrixScan(void){ + for (uint8_t col = 0; col < COL; col++){ + HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_SET); + HAL_Delay(1); + for(uint8_t row = 0; row < ROW; row++){ + if(HAL_GPIO_ReadPin(ROW_PINS[row].GPIOx, ROW_PINS[row].PIN)){ + addUSBReport(KEYCODES[row][col]); + } + } + HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_RESET); + } +} + +void resetReport(void){ + REPORT.MODIFIER = 0; + memset(REPORT.KEYPRESS, 0, sizeof(REPORT.KEYPRESS)); +} + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/firmware/numpad/Core/Src/Backup/stm32f4xx_hal_msp.c.bak b/firmware/numpad/Core/Src/Backup/stm32f4xx_hal_msp.c.bak new file mode 100644 index 00000000..00c02c33 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/stm32f4xx_hal_msp.c.bak @@ -0,0 +1,82 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/Backup/stm32f4xx_it.c.bak b/firmware/numpad/Core/Src/Backup/stm32f4xx_it.c.bak new file mode 100644 index 00000000..4b0a65d4 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/stm32f4xx_it.c.bak @@ -0,0 +1,397 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f4xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern PCD_HandleTypeDef hpcd_USB_OTG_FS; +extern DMA_HandleTypeDef hdma_uart4_rx; +extern DMA_HandleTypeDef hdma_uart4_tx; +extern DMA_HandleTypeDef hdma_uart5_rx; +extern DMA_HandleTypeDef hdma_uart5_tx; +extern DMA_HandleTypeDef hdma_usart1_rx; +extern DMA_HandleTypeDef hdma_usart1_tx; +extern DMA_HandleTypeDef hdma_usart2_rx; +extern DMA_HandleTypeDef hdma_usart2_tx; +extern UART_HandleTypeDef huart4; +extern UART_HandleTypeDef huart5; +extern UART_HandleTypeDef huart1; +extern UART_HandleTypeDef huart2; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F4xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f4xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_rx); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream2 global interrupt. + */ +void DMA1_Stream2_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ + + /* USER CODE END DMA1_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_rx); + /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ + + /* USER CODE END DMA1_Stream2_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream4 global interrupt. + */ +void DMA1_Stream4_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ + + /* USER CODE END DMA1_Stream4_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_tx); + /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ + + /* USER CODE END DMA1_Stream4_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream5 global interrupt. + */ +void DMA1_Stream5_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ + + /* USER CODE END DMA1_Stream5_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_rx); + /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ + + /* USER CODE END DMA1_Stream5_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream6 global interrupt. + */ +void DMA1_Stream6_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ + + /* USER CODE END DMA1_Stream6_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_tx); + /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ + + /* USER CODE END DMA1_Stream6_IRQn 1 */ +} + +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + /* USER CODE BEGIN USART1_IRQn 0 */ + + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + /* USER CODE BEGIN USART1_IRQn 1 */ + + /* USER CODE END USART1_IRQn 1 */ +} + +/** + * @brief This function handles USART2 global interrupt. + */ +void USART2_IRQHandler(void) +{ + /* USER CODE BEGIN USART2_IRQn 0 */ + + /* USER CODE END USART2_IRQn 0 */ + HAL_UART_IRQHandler(&huart2); + /* USER CODE BEGIN USART2_IRQn 1 */ + + /* USER CODE END USART2_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream7 global interrupt. + */ +void DMA1_Stream7_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream7_IRQn 0 */ + + /* USER CODE END DMA1_Stream7_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_tx); + /* USER CODE BEGIN DMA1_Stream7_IRQn 1 */ + + /* USER CODE END DMA1_Stream7_IRQn 1 */ +} + +/** + * @brief This function handles UART4 global interrupt. + */ +void UART4_IRQHandler(void) +{ + /* USER CODE BEGIN UART4_IRQn 0 */ + + /* USER CODE END UART4_IRQn 0 */ + HAL_UART_IRQHandler(&huart4); + /* USER CODE BEGIN UART4_IRQn 1 */ + + /* USER CODE END UART4_IRQn 1 */ +} + +/** + * @brief This function handles UART5 global interrupt. + */ +void UART5_IRQHandler(void) +{ + /* USER CODE BEGIN UART5_IRQn 0 */ + + /* USER CODE END UART5_IRQn 0 */ + HAL_UART_IRQHandler(&huart5); + /* USER CODE BEGIN UART5_IRQn 1 */ + + /* USER CODE END UART5_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream2 global interrupt. + */ +void DMA2_Stream2_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */ + + /* USER CODE END DMA2_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_rx); + /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */ + + /* USER CODE END DMA2_Stream2_IRQn 1 */ +} + +/** + * @brief This function handles USB On The Go FS global interrupt. + */ +void OTG_FS_IRQHandler(void) +{ + /* USER CODE BEGIN OTG_FS_IRQn 0 */ + + /* USER CODE END OTG_FS_IRQn 0 */ + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + /* USER CODE BEGIN OTG_FS_IRQn 1 */ + + /* USER CODE END OTG_FS_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream7 global interrupt. + */ +void DMA2_Stream7_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */ + + /* USER CODE END DMA2_Stream7_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_tx); + /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */ + + /* USER CODE END DMA2_Stream7_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/Backup/syscalls.c.bak b/firmware/numpad/Core/Src/Backup/syscalls.c.bak new file mode 100644 index 00000000..8884b5aa --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/syscalls.c.bak @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + (void)pid; + (void)sig; + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + + return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + (void)file; + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + (void)file; + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + (void)file; + (void)ptr; + (void)dir; + return 0; +} + +int _open(char *path, int flags, ...) +{ + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + (void)status; + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + (void)name; + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + (void)buf; + return -1; +} + +int _stat(char *file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + (void)old; + (void)new; + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; +} diff --git a/firmware/numpad/Core/Src/Backup/sysmem.c.bak b/firmware/numpad/Core/Src/Backup/sysmem.c.bak new file mode 100644 index 00000000..5d9f7e67 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/sysmem.c.bak @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/firmware/numpad/Core/Src/Backup/system_stm32f4xx.c.bak b/firmware/numpad/Core/Src/Backup/system_stm32f4xx.c.bak new file mode 100644 index 00000000..7a61e9cf --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/system_stm32f4xx.c.bak @@ -0,0 +1,747 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 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_stm32f4xx.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 + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + + +#include "stm32f4xx.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 STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ + STM32F412Zx || STM32F412Vx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* #define DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ + STM32F479xx */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in Flash or Sram, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ +#if !defined(VECT_TAB_OFFSET) +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_OFFSET */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_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 STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @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 + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @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 stm32f4xx_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 stm32f4xx_hal_conf.h file (its value + * depends on the application requirements), 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, pllvco, pllp, pllsource, pllm; + + /* 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; +} + +#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ + RCC->AHB1ENR |= 0x000001F8; + + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + FMC_Bank5_6->SDCR[0] = 0x000019E4; + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ + FMC_Bank5_6->SDCMR = 0x00000073; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ + FMC_Bank5_6->SDCMR = 0x00046014; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ + + (void)(tmp); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#if defined (DATA_IN_ExtSDRAM) + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + +#if defined(STM32F446xx) + /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface + clock */ + RCC->AHB1ENR |= 0x0000007D; +#else + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface + clock */ + RCC->AHB1ENR |= 0x000001F8; +#endif /* STM32F446xx */ + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + +#if defined(STM32F446xx) + /* Connect PAx pins to FMC Alternate function */ + GPIOA->AFR[0] |= 0xC0000000; + GPIOA->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOA->MODER |= 0x00008000; + /* Configure PDx pins speed to 50 MHz */ + GPIOA->OSPEEDR |= 0x00008000; + /* Configure PDx pins Output type to push-pull */ + GPIOA->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOA->PUPDR |= 0x00000000; + + /* Connect PCx pins to FMC Alternate function */ + GPIOC->AFR[0] |= 0x00CC0000; + GPIOC->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOC->MODER |= 0x00000A00; + /* Configure PDx pins speed to 50 MHz */ + GPIOC->OSPEEDR |= 0x00000A00; + /* Configure PDx pins Output type to push-pull */ + GPIOC->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOC->PUPDR |= 0x00000000; +#endif /* STM32F446xx */ + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x000000CC; + GPIOD->AFR[1] = 0xCC000CCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xA02A000A; + /* Configure PDx pins speed to 50 MHz */ + GPIOD->OSPEEDR = 0xA02A000A; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 50 MHz */ + GPIOE->OSPEEDR = 0xAAAA800A; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* Configure and enable SDRAM bank1 */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCR[0] = 0x00001954; +#else + FMC_Bank5_6->SDCR[0] = 0x000019E4; +#endif /* STM32F446xx */ + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x000000F3; +#else + FMC_Bank5_6->SDCMR = 0x00000073; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x00044014; +#else + FMC_Bank5_6->SDCMR = 0x00046014; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; +#if defined(STM32F446xx) + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); +#else + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); +#endif /* STM32F446xx */ + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); +#endif /* DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) + +#if defined(DATA_IN_ExtSRAM) +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FMC/FSMC Configuration --------------------------------------------------*/ + /* Enable the FMC/FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ + || defined(STM32F412Zx) || defined(STM32F412Vx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ + +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ + STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ + (void)(tmp); +} +#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Core/Src/Backup/tim.c.bak b/firmware/numpad/Core/Src/Backup/tim.c.bak new file mode 100644 index 00000000..62b4ea70 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/tim.c.bak @@ -0,0 +1,233 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file tim.c + * @brief This file provides code for the configuration + * of the TIM instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "tim.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +TIM_HandleTypeDef htim2; +TIM_HandleTypeDef htim3; + +/* TIM2 init function */ +void MX_TIM2_Init(void) +{ + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 0; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 4294967295; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_OC_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_FORCED_ACTIVE; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + HAL_TIM_MspPostInit(&htim2); + +} +/* TIM3 init function */ +void MX_TIM3_Init(void) +{ + + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_Encoder_InitTypeDef sConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + htim3.Init.Prescaler = 0; + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + htim3.Init.Period = 65535; + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + sConfig.EncoderMode = TIM_ENCODERMODE_TI1; + sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; + sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; + sConfig.IC1Prescaler = TIM_ICPSC_DIV1; + sConfig.IC1Filter = 0; + sConfig.IC2Polarity = TIM_ICPOLARITY_RISING; + sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; + sConfig.IC2Prescaler = TIM_ICPSC_DIV1; + sConfig.IC2Filter = 0; + if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + +} + +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* tim_ocHandle) +{ + + if(tim_ocHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* TIM2 clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } +} + +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(tim_encoderHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* TIM3 clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM3 GPIO Configuration + PA6 ------> TIM3_CH1 + PA7 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } +} +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(timHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspPostInit 0 */ + + /* USER CODE END TIM2_MspPostInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM2 GPIO Configuration + PA5 ------> TIM2_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM2_MspPostInit 1 */ + + /* USER CODE END TIM2_MspPostInit 1 */ + } + +} + +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* tim_ocHandle) +{ + + if(tim_ocHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } +} + +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle) +{ + + if(tim_encoderHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspDeInit 0 */ + + /* USER CODE END TIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM3_CLK_DISABLE(); + + /**TIM3 GPIO Configuration + PA6 ------> TIM3_CH1 + PA7 ------> TIM3_CH2 + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6|GPIO_PIN_7); + + /* USER CODE BEGIN TIM3_MspDeInit 1 */ + + /* USER CODE END TIM3_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/Backup/usart.c.bak b/firmware/numpad/Core/Src/Backup/usart.c.bak new file mode 100644 index 00000000..8cf0a4e4 --- /dev/null +++ b/firmware/numpad/Core/Src/Backup/usart.c.bak @@ -0,0 +1,530 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.c + * @brief This file provides code for the configuration + * of the USART instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "usart.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +UART_HandleTypeDef huart4; +UART_HandleTypeDef huart5; +UART_HandleTypeDef huart1; +UART_HandleTypeDef huart2; +DMA_HandleTypeDef hdma_uart4_rx; +DMA_HandleTypeDef hdma_uart4_tx; +DMA_HandleTypeDef hdma_uart5_rx; +DMA_HandleTypeDef hdma_uart5_tx; +DMA_HandleTypeDef hdma_usart1_rx; +DMA_HandleTypeDef hdma_usart1_tx; +DMA_HandleTypeDef hdma_usart2_rx; +DMA_HandleTypeDef hdma_usart2_tx; + +/* UART4 init function */ +void MX_UART4_Init(void) +{ + + /* USER CODE BEGIN UART4_Init 0 */ + + /* USER CODE END UART4_Init 0 */ + + /* USER CODE BEGIN UART4_Init 1 */ + + /* USER CODE END UART4_Init 1 */ + huart4.Instance = UART4; + huart4.Init.BaudRate = 115200; + huart4.Init.WordLength = UART_WORDLENGTH_8B; + huart4.Init.StopBits = UART_STOPBITS_1; + huart4.Init.Parity = UART_PARITY_NONE; + huart4.Init.Mode = UART_MODE_TX_RX; + huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART4_Init 2 */ + + /* USER CODE END UART4_Init 2 */ + +} +/* UART5 init function */ +void MX_UART5_Init(void) +{ + + /* USER CODE BEGIN UART5_Init 0 */ + + /* USER CODE END UART5_Init 0 */ + + /* USER CODE BEGIN UART5_Init 1 */ + + /* USER CODE END UART5_Init 1 */ + huart5.Instance = UART5; + huart5.Init.BaudRate = 115200; + huart5.Init.WordLength = UART_WORDLENGTH_8B; + huart5.Init.StopBits = UART_STOPBITS_1; + huart5.Init.Parity = UART_PARITY_NONE; + huart5.Init.Mode = UART_MODE_TX_RX; + huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart5.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart5) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART5_Init 2 */ + + /* USER CODE END UART5_Init 2 */ + +} +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} +/* USART2 init function */ + +void MX_USART2_UART_Init(void) +{ + + /* USER CODE BEGIN USART2_Init 0 */ + + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + huart2.Init.BaudRate = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(uartHandle->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspInit 0 */ + + /* USER CODE END UART4_MspInit 0 */ + /* UART4 clock enable */ + __HAL_RCC_UART4_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**UART4 GPIO Configuration + PA0-WKUP ------> UART4_TX + PA1 ------> UART4_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|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_AF8_UART4; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* UART4 DMA Init */ + /* UART4_RX Init */ + hdma_uart4_rx.Instance = DMA1_Stream2; + hdma_uart4_rx.Init.Channel = DMA_CHANNEL_4; + hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart4_rx.Init.Mode = DMA_CIRCULAR; + hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx); + + /* UART4_TX Init */ + hdma_uart4_tx.Instance = DMA1_Stream4; + hdma_uart4_tx.Init.Channel = DMA_CHANNEL_4; + hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart4_tx.Init.Mode = DMA_CIRCULAR; + hdma_uart4_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx); + + /* UART4 interrupt Init */ + HAL_NVIC_SetPriority(UART4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(UART4_IRQn); + /* USER CODE BEGIN UART4_MspInit 1 */ + + /* USER CODE END UART4_MspInit 1 */ + } + else if(uartHandle->Instance==UART5) + { + /* USER CODE BEGIN UART5_MspInit 0 */ + + /* USER CODE END UART5_MspInit 0 */ + /* UART5 clock enable */ + __HAL_RCC_UART5_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* UART5 DMA Init */ + /* UART5_RX Init */ + hdma_uart5_rx.Instance = DMA1_Stream0; + hdma_uart5_rx.Init.Channel = DMA_CHANNEL_4; + hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart5_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart5_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart5_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart5_rx.Init.Mode = DMA_CIRCULAR; + hdma_uart5_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart5_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart5_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart5_rx); + + /* UART5_TX Init */ + hdma_uart5_tx.Instance = DMA1_Stream7; + hdma_uart5_tx.Init.Channel = DMA_CHANNEL_4; + hdma_uart5_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_uart5_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart5_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart5_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart5_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart5_tx.Init.Mode = DMA_CIRCULAR; + hdma_uart5_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart5_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart5_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart5_tx); + + /* UART5 interrupt Init */ + HAL_NVIC_SetPriority(UART5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(UART5_IRQn); + /* USER CODE BEGIN UART5_MspInit 1 */ + + /* USER CODE END UART5_MspInit 1 */ + } + else if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* USART1 clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USART1 DMA Init */ + /* USART1_RX Init */ + hdma_usart1_rx.Instance = DMA2_Stream2; + hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; + hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; + hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx); + + /* USART1_TX Init */ + hdma_usart1_tx.Instance = DMA2_Stream7; + hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; + hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_tx.Init.Mode = DMA_CIRCULAR; + hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx); + + /* USART1 interrupt Init */ + HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + else if(uartHandle->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* USART2 clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USART2 DMA Init */ + /* USART2_RX Init */ + hdma_usart2_rx.Instance = DMA1_Stream5; + hdma_usart2_rx.Init.Channel = DMA_CHANNEL_4; + hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart2_rx.Init.Mode = DMA_CIRCULAR; + hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); + + /* USART2_TX Init */ + hdma_usart2_tx.Instance = DMA1_Stream6; + hdma_usart2_tx.Init.Channel = DMA_CHANNEL_4; + hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart2_tx.Init.Mode = DMA_CIRCULAR; + hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); + + /* USART2 interrupt Init */ + HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART2_IRQn); + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } +} + +void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) +{ + + if(uartHandle->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspDeInit 0 */ + + /* USER CODE END UART4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART4_CLK_DISABLE(); + + /**UART4 GPIO Configuration + PA0-WKUP ------> UART4_TX + PA1 ------> UART4_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1); + + /* UART4 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* UART4 interrupt Deinit */ + HAL_NVIC_DisableIRQ(UART4_IRQn); + /* USER CODE BEGIN UART4_MspDeInit 1 */ + + /* USER CODE END UART4_MspDeInit 1 */ + } + else if(uartHandle->Instance==UART5) + { + /* USER CODE BEGIN UART5_MspDeInit 0 */ + + /* USER CODE END UART5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART5_CLK_DISABLE(); + + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); + + /* UART5 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* UART5 interrupt Deinit */ + HAL_NVIC_DisableIRQ(UART5_IRQn); + /* USER CODE BEGIN UART5_MspDeInit 1 */ + + /* USER CODE END UART5_MspDeInit 1 */ + } + else if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USART1 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* USART1 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + else if(uartHandle->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + + /* USART2 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* USART2 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART2_IRQn); + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/dma.c b/firmware/numpad/Core/Src/dma.c new file mode 100644 index 00000000..ea28d29a --- /dev/null +++ b/firmware/numpad/Core/Src/dma.c @@ -0,0 +1,77 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file dma.c + * @brief This file provides code for the configuration + * of all the requested memory to memory DMA transfers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "dma.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/*----------------------------------------------------------------------------*/ +/* Configure DMA */ +/*----------------------------------------------------------------------------*/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** + * Enable DMA controller clock + */ +void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + __HAL_RCC_DMA2_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); + /* DMA1_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn); + /* DMA1_Stream4_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn); + /* DMA1_Stream5_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); + /* DMA1_Stream6_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); + /* DMA1_Stream7_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); + /* DMA2_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); + /* DMA2_Stream7_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); + +} + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ + diff --git a/firmware/numpad/Core/Src/gpio.c b/firmware/numpad/Core/Src/gpio.c new file mode 100644 index 00000000..1ac25202 --- /dev/null +++ b/firmware/numpad/Core/Src/gpio.c @@ -0,0 +1,90 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.c + * @brief This file provides code for the configuration + * of all used GPIO pins. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "gpio.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/*----------------------------------------------------------------------------*/ +/* Configure GPIO */ +/*----------------------------------------------------------------------------*/ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** Configure pins as + * Analog + * Input + * Output + * EVENT_OUT + * EXTI +*/ +void MX_GPIO_Init(void) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); + + /*Configure GPIO pins : PC4 PC5 */ + GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /*Configure GPIO pins : PB0 PB1 PB2 PB10 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pins : PC6 PC7 PC8 PC9 */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /*Configure GPIO pin : PA8 */ + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ diff --git a/firmware/numpad/Core/Src/hid_queue.c b/firmware/numpad/Core/Src/hid_queue.c new file mode 100644 index 00000000..4662ee2b --- /dev/null +++ b/firmware/numpad/Core/Src/hid_queue.c @@ -0,0 +1,55 @@ +#include "hid_queue.h" + +bool hid_queue_init(HIDQueue *q, HIDReport *buffer, uint16_t capacity) { + if (!q || !buffer || capacity == 0) return false; + + q->buffer = buffer; + q->capacity = capacity; + q->head = 0; + q->tail = 0; + q->count = 0; + + return true; +} + +void hid_queue_reset(HIDQueue *q) { + if (!q) return; + q->head = 0; + q->tail = 0; + q->count = 0; +} + +bool hid_queue_is_empty(HIDQueue *q) { + return q->count == 0; +} + +bool hid_queue_is_full(HIDQueue *q) { + return q->count == q->capacity; +} + +bool hid_queue_push(HIDQueue *q, HIDReport item) { + if (hid_queue_is_full(q)) { + return false; // Queue full (no more shelves for potions!) (;ω;) + } + + q->buffer[q->tail] = item; + q->tail = (q->tail + 1) % q->capacity; + q->count++; + + return true; +} + +bool hid_queue_pop(HIDQueue *q, HIDReport *out) { + if (hid_queue_is_empty(q)) { + return false; // Nothing to dequeue + } + + if (out) { + *out = q->buffer[q->head]; + } + + q->head = (q->head + 1) % q->capacity; + q->count--; + + return true; +} diff --git a/firmware/numpad/Core/Src/i2c.c b/firmware/numpad/Core/Src/i2c.c new file mode 100644 index 00000000..1bcb7ec1 --- /dev/null +++ b/firmware/numpad/Core/Src/i2c.c @@ -0,0 +1,116 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file i2c.c + * @brief This file provides code for the configuration + * of the I2C instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "i2c.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +I2C_HandleTypeDef hi2c1; + +/* I2C1 init function */ +void MX_I2C1_Init(void) +{ + + /* USER CODE BEGIN I2C1_Init 0 */ + + /* USER CODE END I2C1_Init 0 */ + + /* USER CODE BEGIN I2C1_Init 1 */ + + /* USER CODE END I2C1_Init 1 */ + hi2c1.Instance = I2C1; + hi2c1.Init.ClockSpeed = 100000; + hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; + hi2c1.Init.OwnAddress1 = 0; + hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; + hi2c1.Init.OwnAddress2 = 0; + hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + if (HAL_I2C_Init(&hi2c1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2C1_Init 2 */ + + /* USER CODE END I2C1_Init 2 */ + +} + +void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(i2cHandle->Instance==I2C1) + { + /* USER CODE BEGIN I2C1_MspInit 0 */ + + /* USER CODE END I2C1_MspInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**I2C1 GPIO Configuration + PB6 ------> I2C1_SCL + PB7 ------> I2C1_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* I2C1 clock enable */ + __HAL_RCC_I2C1_CLK_ENABLE(); + /* USER CODE BEGIN I2C1_MspInit 1 */ + + /* USER CODE END I2C1_MspInit 1 */ + } +} + +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle) +{ + + if(i2cHandle->Instance==I2C1) + { + /* USER CODE BEGIN I2C1_MspDeInit 0 */ + + /* USER CODE END I2C1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C1_CLK_DISABLE(); + + /**I2C1 GPIO Configuration + PB6 ------> I2C1_SCL + PB7 ------> I2C1_SDA + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7); + + /* USER CODE BEGIN I2C1_MspDeInit 1 */ + + /* USER CODE END I2C1_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/modularkbd/Core/Src/main.c b/firmware/numpad/Core/Src/main.c similarity index 100% rename from firmware/modularkbd/Core/Src/main.c rename to firmware/numpad/Core/Src/main.c diff --git a/firmware/numpad/Core/Src/stm32f4xx_hal_msp.c b/firmware/numpad/Core/Src/stm32f4xx_hal_msp.c new file mode 100644 index 00000000..00c02c33 --- /dev/null +++ b/firmware/numpad/Core/Src/stm32f4xx_hal_msp.c @@ -0,0 +1,82 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/stm32f4xx_it.c b/firmware/numpad/Core/Src/stm32f4xx_it.c new file mode 100644 index 00000000..4b0a65d4 --- /dev/null +++ b/firmware/numpad/Core/Src/stm32f4xx_it.c @@ -0,0 +1,397 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f4xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern PCD_HandleTypeDef hpcd_USB_OTG_FS; +extern DMA_HandleTypeDef hdma_uart4_rx; +extern DMA_HandleTypeDef hdma_uart4_tx; +extern DMA_HandleTypeDef hdma_uart5_rx; +extern DMA_HandleTypeDef hdma_uart5_tx; +extern DMA_HandleTypeDef hdma_usart1_rx; +extern DMA_HandleTypeDef hdma_usart1_tx; +extern DMA_HandleTypeDef hdma_usart2_rx; +extern DMA_HandleTypeDef hdma_usart2_tx; +extern UART_HandleTypeDef huart4; +extern UART_HandleTypeDef huart5; +extern UART_HandleTypeDef huart1; +extern UART_HandleTypeDef huart2; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F4xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f4xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_rx); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream2 global interrupt. + */ +void DMA1_Stream2_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ + + /* USER CODE END DMA1_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_rx); + /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ + + /* USER CODE END DMA1_Stream2_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream4 global interrupt. + */ +void DMA1_Stream4_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream4_IRQn 0 */ + + /* USER CODE END DMA1_Stream4_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart4_tx); + /* USER CODE BEGIN DMA1_Stream4_IRQn 1 */ + + /* USER CODE END DMA1_Stream4_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream5 global interrupt. + */ +void DMA1_Stream5_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ + + /* USER CODE END DMA1_Stream5_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_rx); + /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ + + /* USER CODE END DMA1_Stream5_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream6 global interrupt. + */ +void DMA1_Stream6_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */ + + /* USER CODE END DMA1_Stream6_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_tx); + /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */ + + /* USER CODE END DMA1_Stream6_IRQn 1 */ +} + +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + /* USER CODE BEGIN USART1_IRQn 0 */ + + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + /* USER CODE BEGIN USART1_IRQn 1 */ + + /* USER CODE END USART1_IRQn 1 */ +} + +/** + * @brief This function handles USART2 global interrupt. + */ +void USART2_IRQHandler(void) +{ + /* USER CODE BEGIN USART2_IRQn 0 */ + + /* USER CODE END USART2_IRQn 0 */ + HAL_UART_IRQHandler(&huart2); + /* USER CODE BEGIN USART2_IRQn 1 */ + + /* USER CODE END USART2_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream7 global interrupt. + */ +void DMA1_Stream7_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream7_IRQn 0 */ + + /* USER CODE END DMA1_Stream7_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_tx); + /* USER CODE BEGIN DMA1_Stream7_IRQn 1 */ + + /* USER CODE END DMA1_Stream7_IRQn 1 */ +} + +/** + * @brief This function handles UART4 global interrupt. + */ +void UART4_IRQHandler(void) +{ + /* USER CODE BEGIN UART4_IRQn 0 */ + + /* USER CODE END UART4_IRQn 0 */ + HAL_UART_IRQHandler(&huart4); + /* USER CODE BEGIN UART4_IRQn 1 */ + + /* USER CODE END UART4_IRQn 1 */ +} + +/** + * @brief This function handles UART5 global interrupt. + */ +void UART5_IRQHandler(void) +{ + /* USER CODE BEGIN UART5_IRQn 0 */ + + /* USER CODE END UART5_IRQn 0 */ + HAL_UART_IRQHandler(&huart5); + /* USER CODE BEGIN UART5_IRQn 1 */ + + /* USER CODE END UART5_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream2 global interrupt. + */ +void DMA2_Stream2_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */ + + /* USER CODE END DMA2_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_rx); + /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */ + + /* USER CODE END DMA2_Stream2_IRQn 1 */ +} + +/** + * @brief This function handles USB On The Go FS global interrupt. + */ +void OTG_FS_IRQHandler(void) +{ + /* USER CODE BEGIN OTG_FS_IRQn 0 */ + + /* USER CODE END OTG_FS_IRQn 0 */ + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + /* USER CODE BEGIN OTG_FS_IRQn 1 */ + + /* USER CODE END OTG_FS_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream7 global interrupt. + */ +void DMA2_Stream7_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */ + + /* USER CODE END DMA2_Stream7_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_tx); + /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */ + + /* USER CODE END DMA2_Stream7_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/syscalls.c b/firmware/numpad/Core/Src/syscalls.c new file mode 100644 index 00000000..8884b5aa --- /dev/null +++ b/firmware/numpad/Core/Src/syscalls.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + (void)pid; + (void)sig; + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + + return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + (void)file; + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + (void)file; + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + (void)file; + (void)ptr; + (void)dir; + return 0; +} + +int _open(char *path, int flags, ...) +{ + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + (void)status; + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + (void)name; + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + (void)buf; + return -1; +} + +int _stat(char *file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + (void)old; + (void)new; + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; +} diff --git a/firmware/numpad/Core/Src/sysmem.c b/firmware/numpad/Core/Src/sysmem.c new file mode 100644 index 00000000..5d9f7e67 --- /dev/null +++ b/firmware/numpad/Core/Src/sysmem.c @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/firmware/numpad/Core/Src/system_stm32f4xx.c b/firmware/numpad/Core/Src/system_stm32f4xx.c new file mode 100644 index 00000000..7a61e9cf --- /dev/null +++ b/firmware/numpad/Core/Src/system_stm32f4xx.c @@ -0,0 +1,747 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 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_stm32f4xx.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 + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + + +#include "stm32f4xx.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 STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ + STM32F412Zx || STM32F412Vx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* #define DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ + STM32F479xx */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in Flash or Sram, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ +#if !defined(VECT_TAB_OFFSET) +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_OFFSET */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_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 STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @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 + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @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 stm32f4xx_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 stm32f4xx_hal_conf.h file (its value + * depends on the application requirements), 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, pllvco, pllp, pllsource, pllm; + + /* 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; +} + +#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ + RCC->AHB1ENR |= 0x000001F8; + + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + FMC_Bank5_6->SDCR[0] = 0x000019E4; + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ + FMC_Bank5_6->SDCMR = 0x00000073; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ + FMC_Bank5_6->SDCMR = 0x00046014; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ + + (void)(tmp); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#if defined (DATA_IN_ExtSDRAM) + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + +#if defined(STM32F446xx) + /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface + clock */ + RCC->AHB1ENR |= 0x0000007D; +#else + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface + clock */ + RCC->AHB1ENR |= 0x000001F8; +#endif /* STM32F446xx */ + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + +#if defined(STM32F446xx) + /* Connect PAx pins to FMC Alternate function */ + GPIOA->AFR[0] |= 0xC0000000; + GPIOA->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOA->MODER |= 0x00008000; + /* Configure PDx pins speed to 50 MHz */ + GPIOA->OSPEEDR |= 0x00008000; + /* Configure PDx pins Output type to push-pull */ + GPIOA->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOA->PUPDR |= 0x00000000; + + /* Connect PCx pins to FMC Alternate function */ + GPIOC->AFR[0] |= 0x00CC0000; + GPIOC->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOC->MODER |= 0x00000A00; + /* Configure PDx pins speed to 50 MHz */ + GPIOC->OSPEEDR |= 0x00000A00; + /* Configure PDx pins Output type to push-pull */ + GPIOC->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOC->PUPDR |= 0x00000000; +#endif /* STM32F446xx */ + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x000000CC; + GPIOD->AFR[1] = 0xCC000CCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xA02A000A; + /* Configure PDx pins speed to 50 MHz */ + GPIOD->OSPEEDR = 0xA02A000A; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 50 MHz */ + GPIOE->OSPEEDR = 0xAAAA800A; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* Configure and enable SDRAM bank1 */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCR[0] = 0x00001954; +#else + FMC_Bank5_6->SDCR[0] = 0x000019E4; +#endif /* STM32F446xx */ + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x000000F3; +#else + FMC_Bank5_6->SDCMR = 0x00000073; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x00044014; +#else + FMC_Bank5_6->SDCMR = 0x00046014; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; +#if defined(STM32F446xx) + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); +#else + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); +#endif /* STM32F446xx */ + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); +#endif /* DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) + +#if defined(DATA_IN_ExtSRAM) +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FMC/FSMC Configuration --------------------------------------------------*/ + /* Enable the FMC/FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ + || defined(STM32F412Zx) || defined(STM32F412Vx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ + +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ + STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ + (void)(tmp); +} +#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Core/Src/tim.c b/firmware/numpad/Core/Src/tim.c new file mode 100644 index 00000000..62b4ea70 --- /dev/null +++ b/firmware/numpad/Core/Src/tim.c @@ -0,0 +1,233 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file tim.c + * @brief This file provides code for the configuration + * of the TIM instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "tim.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +TIM_HandleTypeDef htim2; +TIM_HandleTypeDef htim3; + +/* TIM2 init function */ +void MX_TIM2_Init(void) +{ + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 0; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 4294967295; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_OC_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_FORCED_ACTIVE; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + HAL_TIM_MspPostInit(&htim2); + +} +/* TIM3 init function */ +void MX_TIM3_Init(void) +{ + + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_Encoder_InitTypeDef sConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + htim3.Init.Prescaler = 0; + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + htim3.Init.Period = 65535; + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + sConfig.EncoderMode = TIM_ENCODERMODE_TI1; + sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; + sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; + sConfig.IC1Prescaler = TIM_ICPSC_DIV1; + sConfig.IC1Filter = 0; + sConfig.IC2Polarity = TIM_ICPOLARITY_RISING; + sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; + sConfig.IC2Prescaler = TIM_ICPSC_DIV1; + sConfig.IC2Filter = 0; + if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + +} + +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* tim_ocHandle) +{ + + if(tim_ocHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* TIM2 clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } +} + +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(tim_encoderHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* TIM3 clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM3 GPIO Configuration + PA6 ------> TIM3_CH1 + PA7 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } +} +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(timHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspPostInit 0 */ + + /* USER CODE END TIM2_MspPostInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM2 GPIO Configuration + PA5 ------> TIM2_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM2_MspPostInit 1 */ + + /* USER CODE END TIM2_MspPostInit 1 */ + } + +} + +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* tim_ocHandle) +{ + + if(tim_ocHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } +} + +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle) +{ + + if(tim_encoderHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspDeInit 0 */ + + /* USER CODE END TIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM3_CLK_DISABLE(); + + /**TIM3 GPIO Configuration + PA6 ------> TIM3_CH1 + PA7 ------> TIM3_CH2 + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6|GPIO_PIN_7); + + /* USER CODE BEGIN TIM3_MspDeInit 1 */ + + /* USER CODE END TIM3_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Src/usart.c b/firmware/numpad/Core/Src/usart.c new file mode 100644 index 00000000..ad15fee2 --- /dev/null +++ b/firmware/numpad/Core/Src/usart.c @@ -0,0 +1,530 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.c + * @brief This file provides code for the configuration + * of the USART instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "usart.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +UART_HandleTypeDef huart4; +UART_HandleTypeDef huart5; +UART_HandleTypeDef huart1; +UART_HandleTypeDef huart2; +DMA_HandleTypeDef hdma_uart4_rx; +DMA_HandleTypeDef hdma_uart4_tx; +DMA_HandleTypeDef hdma_uart5_rx; +DMA_HandleTypeDef hdma_uart5_tx; +DMA_HandleTypeDef hdma_usart1_rx; +DMA_HandleTypeDef hdma_usart1_tx; +DMA_HandleTypeDef hdma_usart2_rx; +DMA_HandleTypeDef hdma_usart2_tx; + +/* UART4 init function */ +void MX_UART4_Init(void) +{ + + /* USER CODE BEGIN UART4_Init 0 */ + + /* USER CODE END UART4_Init 0 */ + + /* USER CODE BEGIN UART4_Init 1 */ + + /* USER CODE END UART4_Init 1 */ + huart4.Instance = UART4; + huart4.Init.BaudRate = 115200; + huart4.Init.WordLength = UART_WORDLENGTH_8B; + huart4.Init.StopBits = UART_STOPBITS_1; + huart4.Init.Parity = UART_PARITY_NONE; + huart4.Init.Mode = UART_MODE_TX_RX; + huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART4_Init 2 */ + + /* USER CODE END UART4_Init 2 */ + +} +/* UART5 init function */ +void MX_UART5_Init(void) +{ + + /* USER CODE BEGIN UART5_Init 0 */ + + /* USER CODE END UART5_Init 0 */ + + /* USER CODE BEGIN UART5_Init 1 */ + + /* USER CODE END UART5_Init 1 */ + huart5.Instance = UART5; + huart5.Init.BaudRate = 115200; + huart5.Init.WordLength = UART_WORDLENGTH_8B; + huart5.Init.StopBits = UART_STOPBITS_1; + huart5.Init.Parity = UART_PARITY_NONE; + huart5.Init.Mode = UART_MODE_TX_RX; + huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart5.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart5) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART5_Init 2 */ + + /* USER CODE END UART5_Init 2 */ + +} +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} +/* USART2 init function */ + +void MX_USART2_UART_Init(void) +{ + + /* USER CODE BEGIN USART2_Init 0 */ + + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + huart2.Init.BaudRate = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(uartHandle->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspInit 0 */ + + /* USER CODE END UART4_MspInit 0 */ + /* UART4 clock enable */ + __HAL_RCC_UART4_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**UART4 GPIO Configuration + PA0-WKUP ------> UART4_TX + PA1 ------> UART4_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|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_AF8_UART4; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* UART4 DMA Init */ + /* UART4_RX Init */ + hdma_uart4_rx.Instance = DMA1_Stream2; + hdma_uart4_rx.Init.Channel = DMA_CHANNEL_4; + hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart4_rx.Init.Mode = DMA_NORMAL; + hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart4_rx); + + /* UART4_TX Init */ + hdma_uart4_tx.Instance = DMA1_Stream4; + hdma_uart4_tx.Init.Channel = DMA_CHANNEL_4; + hdma_uart4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_uart4_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart4_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart4_tx.Init.Mode = DMA_NORMAL; + hdma_uart4_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart4_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart4_tx); + + /* UART4 interrupt Init */ + HAL_NVIC_SetPriority(UART4_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(UART4_IRQn); + /* USER CODE BEGIN UART4_MspInit 1 */ + + /* USER CODE END UART4_MspInit 1 */ + } + else if(uartHandle->Instance==UART5) + { + /* USER CODE BEGIN UART5_MspInit 0 */ + + /* USER CODE END UART5_MspInit 0 */ + /* UART5 clock enable */ + __HAL_RCC_UART5_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* UART5 DMA Init */ + /* UART5_RX Init */ + hdma_uart5_rx.Instance = DMA1_Stream0; + hdma_uart5_rx.Init.Channel = DMA_CHANNEL_4; + hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart5_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart5_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart5_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart5_rx.Init.Mode = DMA_NORMAL; + hdma_uart5_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart5_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart5_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart5_rx); + + /* UART5_TX Init */ + hdma_uart5_tx.Instance = DMA1_Stream7; + hdma_uart5_tx.Init.Channel = DMA_CHANNEL_4; + hdma_uart5_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_uart5_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart5_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart5_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart5_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart5_tx.Init.Mode = DMA_NORMAL; + hdma_uart5_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_uart5_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart5_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart5_tx); + + /* UART5 interrupt Init */ + HAL_NVIC_SetPriority(UART5_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(UART5_IRQn); + /* USER CODE BEGIN UART5_MspInit 1 */ + + /* USER CODE END UART5_MspInit 1 */ + } + else if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* USART1 clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USART1 DMA Init */ + /* USART1_RX Init */ + hdma_usart1_rx.Instance = DMA2_Stream2; + hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; + hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_rx.Init.Mode = DMA_NORMAL; + hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx); + + /* USART1_TX Init */ + hdma_usart1_tx.Instance = DMA2_Stream7; + hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; + hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_tx.Init.Mode = DMA_NORMAL; + hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx); + + /* USART1 interrupt Init */ + HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + else if(uartHandle->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* USART2 clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USART2 DMA Init */ + /* USART2_RX Init */ + hdma_usart2_rx.Instance = DMA1_Stream5; + hdma_usart2_rx.Init.Channel = DMA_CHANNEL_4; + hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart2_rx.Init.Mode = DMA_NORMAL; + hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); + + /* USART2_TX Init */ + hdma_usart2_tx.Instance = DMA1_Stream6; + hdma_usart2_tx.Init.Channel = DMA_CHANNEL_4; + hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart2_tx.Init.Mode = DMA_NORMAL; + hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); + + /* USART2 interrupt Init */ + HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART2_IRQn); + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } +} + +void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) +{ + + if(uartHandle->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspDeInit 0 */ + + /* USER CODE END UART4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART4_CLK_DISABLE(); + + /**UART4 GPIO Configuration + PA0-WKUP ------> UART4_TX + PA1 ------> UART4_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1); + + /* UART4 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* UART4 interrupt Deinit */ + HAL_NVIC_DisableIRQ(UART4_IRQn); + /* USER CODE BEGIN UART4_MspDeInit 1 */ + + /* USER CODE END UART4_MspDeInit 1 */ + } + else if(uartHandle->Instance==UART5) + { + /* USER CODE BEGIN UART5_MspDeInit 0 */ + + /* USER CODE END UART5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART5_CLK_DISABLE(); + + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); + + /* UART5 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* UART5 interrupt Deinit */ + HAL_NVIC_DisableIRQ(UART5_IRQn); + /* USER CODE BEGIN UART5_MspDeInit 1 */ + + /* USER CODE END UART5_MspDeInit 1 */ + } + else if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USART1 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* USART1 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART1_IRQn); + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + else if(uartHandle->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + + /* USART2 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + + /* USART2 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART2_IRQn); + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/firmware/numpad/Core/Startup/startup_stm32f446retx.s b/firmware/numpad/Core/Startup/startup_stm32f446retx.s new file mode 100644 index 00000000..7040eafa --- /dev/null +++ b/firmware/numpad/Core/Startup/startup_stm32f446retx.s @@ -0,0 +1,538 @@ +/** + ****************************************************************************** + * @file startup_stm32f446xx.s + * @author MCD Application Team + * @brief STM32F446xx Devices vector table for GCC based toolchains. + * 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 Cortex-M4 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m4 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* set stack pointer */ + +/* Call the clock system initialization function.*/ + bl SystemInit + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + ldr r1, =_edata + ldr r2, =_sidata + movs r3, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r4, [r2, r3] + str r4, [r0, r3] + adds r3, r3, #4 + +LoopCopyDataInit: + adds r4, r0, r3 + cmp r4, r1 + bcc CopyDataInit + +/* Zero fill the bss segment. */ + ldr r2, =_sbss + ldr r4, =_ebss + movs r3, #0 + b LoopFillZerobss + +FillZerobss: + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + cmp r2, r4 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + + +g_pfnVectors: + .word _estack + .word Reset_Handler + + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FMC_IRQHandler /* FMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word FPU_IRQHandler /* FPU */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word SPI4_IRQHandler /* SPI4 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word SAI1_IRQHandler /* SAI1 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word SAI2_IRQHandler /* SAI2 */ + .word QUADSPI_IRQHandler /* QuadSPI */ + .word CEC_IRQHandler /* CEC */ + .word SPDIF_RX_IRQHandler /* SPDIF RX */ + .word FMPI2C1_EV_IRQHandler /* FMPI2C 1 Event */ + .word FMPI2C1_ER_IRQHandler /* FMPI2C 1 Error */ + + + .size g_pfnVectors, .-g_pfnVectors + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FMC_IRQHandler + .thumb_set FMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + + .weak SPI4_IRQHandler + .thumb_set SPI4_IRQHandler,Default_Handler + + .weak SAI1_IRQHandler + .thumb_set SAI1_IRQHandler,Default_Handler + + .weak SAI2_IRQHandler + .thumb_set SAI2_IRQHandler,Default_Handler + + .weak QUADSPI_IRQHandler + .thumb_set QUADSPI_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak SPDIF_RX_IRQHandler + .thumb_set SPDIF_RX_IRQHandler,Default_Handler + + .weak FMPI2C1_EV_IRQHandler + .thumb_set FMPI2C1_EV_IRQHandler,Default_Handler + + .weak FMPI2C1_ER_IRQHandler + .thumb_set FMPI2C1_ER_IRQHandler,Default_Handler diff --git a/firmware/numpad/Debug/Core/Src/dma.cyclo b/firmware/numpad/Debug/Core/Src/dma.cyclo new file mode 100644 index 00000000..a9d9f425 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/dma.cyclo @@ -0,0 +1 @@ +../Core/Src/dma.c:39:6:MX_DMA_Init 1 diff --git a/firmware/numpad/Debug/Core/Src/dma.d b/firmware/numpad/Debug/Core/Src/dma.d new file mode 100644 index 00000000..872d4dbe --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/dma.d @@ -0,0 +1,69 @@ +Core/Src/dma.o: ../Core/Src/dma.c ../Core/Inc/dma.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/dma.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/dma.o b/firmware/numpad/Debug/Core/Src/dma.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/dma.o rename to firmware/numpad/Debug/Core/Src/dma.o diff --git a/firmware/numpad/Debug/Core/Src/dma.su b/firmware/numpad/Debug/Core/Src/dma.su new file mode 100644 index 00000000..802020b1 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/dma.su @@ -0,0 +1 @@ +../Core/Src/dma.c:39:6:MX_DMA_Init 16 static diff --git a/firmware/numpad/Debug/Core/Src/gpio.cyclo b/firmware/numpad/Debug/Core/Src/gpio.cyclo new file mode 100644 index 00000000..56b69583 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/gpio.cyclo @@ -0,0 +1 @@ +../Core/Src/gpio.c:42:6:MX_GPIO_Init 1 diff --git a/firmware/numpad/Debug/Core/Src/gpio.d b/firmware/numpad/Debug/Core/Src/gpio.d new file mode 100644 index 00000000..718c3608 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/gpio.d @@ -0,0 +1,69 @@ +Core/Src/gpio.o: ../Core/Src/gpio.c ../Core/Inc/gpio.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/gpio.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.o b/firmware/numpad/Debug/Core/Src/gpio.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/gpio.o rename to firmware/numpad/Debug/Core/Src/gpio.o diff --git a/firmware/numpad/Debug/Core/Src/gpio.su b/firmware/numpad/Debug/Core/Src/gpio.su new file mode 100644 index 00000000..87b765ef --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/gpio.su @@ -0,0 +1 @@ +../Core/Src/gpio.c:42:6:MX_GPIO_Init 48 static diff --git a/firmware/numpad/Debug/Core/Src/hid_queue.cyclo b/firmware/numpad/Debug/Core/Src/hid_queue.cyclo new file mode 100644 index 00000000..201ff0ba --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/hid_queue.cyclo @@ -0,0 +1,6 @@ +../Core/Src/hid_queue.c:3:6:hid_queue_init 4 +../Core/Src/hid_queue.c:15:6:hid_queue_reset 2 +../Core/Src/hid_queue.c:22:6:hid_queue_is_empty 1 +../Core/Src/hid_queue.c:26:6:hid_queue_is_full 1 +../Core/Src/hid_queue.c:30:6:hid_queue_push 2 +../Core/Src/hid_queue.c:42:6:hid_queue_pop 3 diff --git a/firmware/numpad/Debug/Core/Src/hid_queue.d b/firmware/numpad/Debug/Core/Src/hid_queue.d new file mode 100644 index 00000000..115dc54f --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/hid_queue.d @@ -0,0 +1,2 @@ +Core/Src/hid_queue.o: ../Core/Src/hid_queue.c ../Core/Inc/hid_queue.h +../Core/Inc/hid_queue.h: diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.o b/firmware/numpad/Debug/Core/Src/hid_queue.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/hid_queue.o rename to firmware/numpad/Debug/Core/Src/hid_queue.o diff --git a/firmware/numpad/Debug/Core/Src/hid_queue.su b/firmware/numpad/Debug/Core/Src/hid_queue.su new file mode 100644 index 00000000..f204f562 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/hid_queue.su @@ -0,0 +1,6 @@ +../Core/Src/hid_queue.c:3:6:hid_queue_init 24 static +../Core/Src/hid_queue.c:15:6:hid_queue_reset 16 static +../Core/Src/hid_queue.c:22:6:hid_queue_is_empty 16 static +../Core/Src/hid_queue.c:26:6:hid_queue_is_full 16 static +../Core/Src/hid_queue.c:30:6:hid_queue_push 24 static +../Core/Src/hid_queue.c:42:6:hid_queue_pop 24 static diff --git a/firmware/numpad/Debug/Core/Src/i2c.cyclo b/firmware/numpad/Debug/Core/Src/i2c.cyclo new file mode 100644 index 00000000..7acaf9e1 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/i2c.cyclo @@ -0,0 +1,3 @@ +../Core/Src/i2c.c:30:6:MX_I2C1_Init 2 +../Core/Src/i2c.c:59:6:HAL_I2C_MspInit 2 +../Core/Src/i2c.c:89:6:HAL_I2C_MspDeInit 2 diff --git a/firmware/numpad/Debug/Core/Src/i2c.d b/firmware/numpad/Debug/Core/Src/i2c.d new file mode 100644 index 00000000..fc14089f --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/i2c.d @@ -0,0 +1,69 @@ +Core/Src/i2c.o: ../Core/Src/i2c.c ../Core/Inc/i2c.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/i2c.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.o b/firmware/numpad/Debug/Core/Src/i2c.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/i2c.o rename to firmware/numpad/Debug/Core/Src/i2c.o diff --git a/firmware/numpad/Debug/Core/Src/i2c.su b/firmware/numpad/Debug/Core/Src/i2c.su new file mode 100644 index 00000000..638b0578 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/i2c.su @@ -0,0 +1,3 @@ +../Core/Src/i2c.c:30:6:MX_I2C1_Init 8 static +../Core/Src/i2c.c:59:6:HAL_I2C_MspInit 48 static +../Core/Src/i2c.c:89:6:HAL_I2C_MspDeInit 16 static diff --git a/firmware/modularkbd/Debug/Core/Src/main.cyclo b/firmware/numpad/Debug/Core/Src/main.cyclo similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/main.cyclo rename to firmware/numpad/Debug/Core/Src/main.cyclo diff --git a/firmware/modularkbd/Debug/Core/Src/main.d b/firmware/numpad/Debug/Core/Src/main.d similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/main.d rename to firmware/numpad/Debug/Core/Src/main.d diff --git a/firmware/modularkbd/Debug/Core/Src/main.o b/firmware/numpad/Debug/Core/Src/main.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/main.o rename to firmware/numpad/Debug/Core/Src/main.o diff --git a/firmware/modularkbd/Debug/Core/Src/main.su b/firmware/numpad/Debug/Core/Src/main.su similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/main.su rename to firmware/numpad/Debug/Core/Src/main.su diff --git a/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.cyclo b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.cyclo new file mode 100644 index 00000000..ae31cf96 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.cyclo @@ -0,0 +1 @@ +../Core/Src/stm32f4xx_hal_msp.c:63:6:HAL_MspInit 1 diff --git a/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.d b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.d new file mode 100644 index 00000000..4b18fd24 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.d @@ -0,0 +1,68 @@ +Core/Src/stm32f4xx_hal_msp.o: ../Core/Src/stm32f4xx_hal_msp.c \ + ../Core/Inc/main.h ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.o b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.o rename to firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.o diff --git a/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.su b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.su new file mode 100644 index 00000000..dbeb228c --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/stm32f4xx_hal_msp.su @@ -0,0 +1 @@ +../Core/Src/stm32f4xx_hal_msp.c:63:6:HAL_MspInit 16 static diff --git a/firmware/numpad/Debug/Core/Src/stm32f4xx_it.cyclo b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.cyclo new file mode 100644 index 00000000..a5859a1a --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.cyclo @@ -0,0 +1,22 @@ +../Core/Src/stm32f4xx_it.c:81:6:NMI_Handler 1 +../Core/Src/stm32f4xx_it.c:96:6:HardFault_Handler 1 +../Core/Src/stm32f4xx_it.c:111:6:MemManage_Handler 1 +../Core/Src/stm32f4xx_it.c:126:6:BusFault_Handler 1 +../Core/Src/stm32f4xx_it.c:141:6:UsageFault_Handler 1 +../Core/Src/stm32f4xx_it.c:156:6:SVC_Handler 1 +../Core/Src/stm32f4xx_it.c:169:6:DebugMon_Handler 1 +../Core/Src/stm32f4xx_it.c:182:6:PendSV_Handler 1 +../Core/Src/stm32f4xx_it.c:195:6:SysTick_Handler 1 +../Core/Src/stm32f4xx_it.c:216:6:DMA1_Stream0_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:230:6:DMA1_Stream2_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:244:6:DMA1_Stream4_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:258:6:DMA1_Stream5_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:272:6:DMA1_Stream6_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:286:6:USART1_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:300:6:USART2_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:314:6:DMA1_Stream7_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:328:6:UART4_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:342:6:UART5_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:356:6:DMA2_Stream2_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:370:6:OTG_FS_IRQHandler 1 +../Core/Src/stm32f4xx_it.c:384:6:DMA2_Stream7_IRQHandler 1 diff --git a/firmware/numpad/Debug/Core/Src/stm32f4xx_it.d b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.d new file mode 100644 index 00000000..37eb467d --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.d @@ -0,0 +1,70 @@ +Core/Src/stm32f4xx_it.o: ../Core/Src/stm32f4xx_it.c ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Core/Inc/stm32f4xx_it.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Core/Inc/stm32f4xx_it.h: diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.o b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.o rename to firmware/numpad/Debug/Core/Src/stm32f4xx_it.o diff --git a/firmware/numpad/Debug/Core/Src/stm32f4xx_it.su b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.su new file mode 100644 index 00000000..2f984562 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/stm32f4xx_it.su @@ -0,0 +1,22 @@ +../Core/Src/stm32f4xx_it.c:81:6:NMI_Handler 4 static +../Core/Src/stm32f4xx_it.c:96:6:HardFault_Handler 4 static +../Core/Src/stm32f4xx_it.c:111:6:MemManage_Handler 4 static +../Core/Src/stm32f4xx_it.c:126:6:BusFault_Handler 4 static +../Core/Src/stm32f4xx_it.c:141:6:UsageFault_Handler 4 static +../Core/Src/stm32f4xx_it.c:156:6:SVC_Handler 4 static +../Core/Src/stm32f4xx_it.c:169:6:DebugMon_Handler 4 static +../Core/Src/stm32f4xx_it.c:182:6:PendSV_Handler 4 static +../Core/Src/stm32f4xx_it.c:195:6:SysTick_Handler 8 static +../Core/Src/stm32f4xx_it.c:216:6:DMA1_Stream0_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:230:6:DMA1_Stream2_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:244:6:DMA1_Stream4_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:258:6:DMA1_Stream5_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:272:6:DMA1_Stream6_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:286:6:USART1_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:300:6:USART2_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:314:6:DMA1_Stream7_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:328:6:UART4_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:342:6:UART5_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:356:6:DMA2_Stream2_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:370:6:OTG_FS_IRQHandler 8 static +../Core/Src/stm32f4xx_it.c:384:6:DMA2_Stream7_IRQHandler 8 static diff --git a/firmware/modularkbd/Debug/Core/Src/subdir.mk b/firmware/numpad/Debug/Core/Src/subdir.mk similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/subdir.mk rename to firmware/numpad/Debug/Core/Src/subdir.mk diff --git a/firmware/numpad/Debug/Core/Src/syscalls.cyclo b/firmware/numpad/Debug/Core/Src/syscalls.cyclo new file mode 100644 index 00000000..6cbfdd05 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/syscalls.cyclo @@ -0,0 +1,18 @@ +../Core/Src/syscalls.c:44:6:initialise_monitor_handles 1 +../Core/Src/syscalls.c:48:5:_getpid 1 +../Core/Src/syscalls.c:53:5:_kill 1 +../Core/Src/syscalls.c:61:6:_exit 1 +../Core/Src/syscalls.c:67:27:_read 2 +../Core/Src/syscalls.c:80:27:_write 2 +../Core/Src/syscalls.c:92:5:_close 1 +../Core/Src/syscalls.c:99:5:_fstat 1 +../Core/Src/syscalls.c:106:5:_isatty 1 +../Core/Src/syscalls.c:112:5:_lseek 1 +../Core/Src/syscalls.c:120:5:_open 1 +../Core/Src/syscalls.c:128:5:_wait 1 +../Core/Src/syscalls.c:135:5:_unlink 1 +../Core/Src/syscalls.c:142:5:_times 1 +../Core/Src/syscalls.c:148:5:_stat 1 +../Core/Src/syscalls.c:155:5:_link 1 +../Core/Src/syscalls.c:163:5:_fork 1 +../Core/Src/syscalls.c:169:5:_execve 1 diff --git a/firmware/numpad/Debug/Core/Src/syscalls.d b/firmware/numpad/Debug/Core/Src/syscalls.d new file mode 100644 index 00000000..8667c708 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/syscalls.d @@ -0,0 +1 @@ +Core/Src/syscalls.o: ../Core/Src/syscalls.c diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.o b/firmware/numpad/Debug/Core/Src/syscalls.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/syscalls.o rename to firmware/numpad/Debug/Core/Src/syscalls.o diff --git a/firmware/numpad/Debug/Core/Src/syscalls.su b/firmware/numpad/Debug/Core/Src/syscalls.su new file mode 100644 index 00000000..50b547ab --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/syscalls.su @@ -0,0 +1,18 @@ +../Core/Src/syscalls.c:44:6:initialise_monitor_handles 4 static +../Core/Src/syscalls.c:48:5:_getpid 4 static +../Core/Src/syscalls.c:53:5:_kill 16 static +../Core/Src/syscalls.c:61:6:_exit 16 static +../Core/Src/syscalls.c:67:27:_read 32 static +../Core/Src/syscalls.c:80:27:_write 32 static +../Core/Src/syscalls.c:92:5:_close 16 static +../Core/Src/syscalls.c:99:5:_fstat 16 static +../Core/Src/syscalls.c:106:5:_isatty 16 static +../Core/Src/syscalls.c:112:5:_lseek 24 static +../Core/Src/syscalls.c:120:5:_open 12 static +../Core/Src/syscalls.c:128:5:_wait 16 static +../Core/Src/syscalls.c:135:5:_unlink 16 static +../Core/Src/syscalls.c:142:5:_times 16 static +../Core/Src/syscalls.c:148:5:_stat 16 static +../Core/Src/syscalls.c:155:5:_link 16 static +../Core/Src/syscalls.c:163:5:_fork 8 static +../Core/Src/syscalls.c:169:5:_execve 24 static diff --git a/firmware/numpad/Debug/Core/Src/sysmem.cyclo b/firmware/numpad/Debug/Core/Src/sysmem.cyclo new file mode 100644 index 00000000..0090c10f --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/sysmem.cyclo @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 3 diff --git a/firmware/numpad/Debug/Core/Src/sysmem.d b/firmware/numpad/Debug/Core/Src/sysmem.d new file mode 100644 index 00000000..74fecf9b --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/sysmem.d @@ -0,0 +1 @@ +Core/Src/sysmem.o: ../Core/Src/sysmem.c diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.o b/firmware/numpad/Debug/Core/Src/sysmem.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/sysmem.o rename to firmware/numpad/Debug/Core/Src/sysmem.o diff --git a/firmware/numpad/Debug/Core/Src/sysmem.su b/firmware/numpad/Debug/Core/Src/sysmem.su new file mode 100644 index 00000000..12d5f177 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/sysmem.su @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 32 static diff --git a/firmware/numpad/Debug/Core/Src/system_stm32f4xx.cyclo b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.cyclo new file mode 100644 index 00000000..4cc0df91 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.cyclo @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f4xx.c:167:6:SystemInit 1 +../Core/Src/system_stm32f4xx.c:220:6:SystemCoreClockUpdate 6 diff --git a/firmware/numpad/Debug/Core/Src/system_stm32f4xx.d b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.d new file mode 100644 index 00000000..8e525e44 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.d @@ -0,0 +1,67 @@ +Core/Src/system_stm32f4xx.o: ../Core/Src/system_stm32f4xx.c \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.o b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.o rename to firmware/numpad/Debug/Core/Src/system_stm32f4xx.o diff --git a/firmware/numpad/Debug/Core/Src/system_stm32f4xx.su b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.su new file mode 100644 index 00000000..96f1cd43 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/system_stm32f4xx.su @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f4xx.c:167:6:SystemInit 4 static +../Core/Src/system_stm32f4xx.c:220:6:SystemCoreClockUpdate 32 static diff --git a/firmware/numpad/Debug/Core/Src/tim.cyclo b/firmware/numpad/Debug/Core/Src/tim.cyclo new file mode 100644 index 00000000..21b599d4 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/tim.cyclo @@ -0,0 +1,7 @@ +../Core/Src/tim.c:31:6:MX_TIM2_Init 4 +../Core/Src/tim.c:75:6:MX_TIM3_Init 3 +../Core/Src/tim.c:119:6:HAL_TIM_OC_MspInit 2 +../Core/Src/tim.c:135:6:HAL_TIM_Encoder_MspInit 2 +../Core/Src/tim.c:164:6:HAL_TIM_MspPostInit 2 +../Core/Src/tim.c:192:6:HAL_TIM_OC_MspDeInit 2 +../Core/Src/tim.c:208:6:HAL_TIM_Encoder_MspDeInit 2 diff --git a/firmware/numpad/Debug/Core/Src/tim.d b/firmware/numpad/Debug/Core/Src/tim.d new file mode 100644 index 00000000..183b1212 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/tim.d @@ -0,0 +1,69 @@ +Core/Src/tim.o: ../Core/Src/tim.c ../Core/Inc/tim.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/tim.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/tim.o b/firmware/numpad/Debug/Core/Src/tim.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/tim.o rename to firmware/numpad/Debug/Core/Src/tim.o diff --git a/firmware/numpad/Debug/Core/Src/tim.su b/firmware/numpad/Debug/Core/Src/tim.su new file mode 100644 index 00000000..feb2927b --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/tim.su @@ -0,0 +1,7 @@ +../Core/Src/tim.c:31:6:MX_TIM2_Init 48 static +../Core/Src/tim.c:75:6:MX_TIM3_Init 56 static +../Core/Src/tim.c:119:6:HAL_TIM_OC_MspInit 24 static +../Core/Src/tim.c:135:6:HAL_TIM_Encoder_MspInit 48 static +../Core/Src/tim.c:164:6:HAL_TIM_MspPostInit 40 static +../Core/Src/tim.c:192:6:HAL_TIM_OC_MspDeInit 16 static +../Core/Src/tim.c:208:6:HAL_TIM_Encoder_MspDeInit 16 static diff --git a/firmware/numpad/Debug/Core/Src/usart.cyclo b/firmware/numpad/Debug/Core/Src/usart.cyclo new file mode 100644 index 00000000..cd4d8707 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/usart.cyclo @@ -0,0 +1,6 @@ +../Core/Src/usart.c:41:6:MX_UART4_Init 2 +../Core/Src/usart.c:69:6:MX_UART5_Init 2 +../Core/Src/usart.c:98:6:MX_USART1_UART_Init 2 +../Core/Src/usart.c:127:6:MX_USART2_UART_Init 2 +../Core/Src/usart.c:155:6:HAL_UART_MspInit 13 +../Core/Src/usart.c:425:6:HAL_UART_MspDeInit 5 diff --git a/firmware/numpad/Debug/Core/Src/usart.d b/firmware/numpad/Debug/Core/Src/usart.d new file mode 100644 index 00000000..fa958672 --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/usart.d @@ -0,0 +1,69 @@ +Core/Src/usart.o: ../Core/Src/usart.c ../Core/Inc/usart.h \ + ../Core/Inc/main.h ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/usart.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/modularkbd/Debug/Core/Src/usart.o b/firmware/numpad/Debug/Core/Src/usart.o similarity index 100% rename from firmware/modularkbd/Debug/Core/Src/usart.o rename to firmware/numpad/Debug/Core/Src/usart.o diff --git a/firmware/numpad/Debug/Core/Src/usart.su b/firmware/numpad/Debug/Core/Src/usart.su new file mode 100644 index 00000000..c66d3dfc --- /dev/null +++ b/firmware/numpad/Debug/Core/Src/usart.su @@ -0,0 +1,6 @@ +../Core/Src/usart.c:41:6:MX_UART4_Init 8 static +../Core/Src/usart.c:69:6:MX_UART5_Init 8 static +../Core/Src/usart.c:98:6:MX_USART1_UART_Init 8 static +../Core/Src/usart.c:127:6:MX_USART2_UART_Init 8 static +../Core/Src/usart.c:155:6:HAL_UART_MspInit 72 static +../Core/Src/usart.c:425:6:HAL_UART_MspDeInit 16 static diff --git a/firmware/numpad/Debug/Core/Startup/startup_stm32f446retx.d b/firmware/numpad/Debug/Core/Startup/startup_stm32f446retx.d new file mode 100644 index 00000000..168e9e87 --- /dev/null +++ b/firmware/numpad/Debug/Core/Startup/startup_stm32f446retx.d @@ -0,0 +1,2 @@ +Core/Startup/startup_stm32f446retx.o: \ + ../Core/Startup/startup_stm32f446retx.s diff --git a/firmware/numpad/Debug/Core/Startup/startup_stm32f446retx.o b/firmware/numpad/Debug/Core/Startup/startup_stm32f446retx.o new file mode 100644 index 00000000..3635b8e1 Binary files /dev/null and b/firmware/numpad/Debug/Core/Startup/startup_stm32f446retx.o differ diff --git a/firmware/numpad/Debug/Core/Startup/subdir.mk b/firmware/numpad/Debug/Core/Startup/subdir.mk new file mode 100644 index 00000000..8e156ed0 --- /dev/null +++ b/firmware/numpad/Debug/Core/Startup/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +S_SRCS += \ +../Core/Startup/startup_stm32f446retx.s + +OBJS += \ +./Core/Startup/startup_stm32f446retx.o + +S_DEPS += \ +./Core/Startup/startup_stm32f446retx.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/Startup/%.o: ../Core/Startup/%.s Core/Startup/subdir.mk + arm-none-eabi-gcc -mcpu=cortex-m4 -g3 -DDEBUG -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<" + +clean: clean-Core-2f-Startup + +clean-Core-2f-Startup: + -$(RM) ./Core/Startup/startup_stm32f446retx.d ./Core/Startup/startup_stm32f446retx.o + +.PHONY: clean-Core-2f-Startup + diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo new file mode 100644 index 00000000..61b1bb12 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo @@ -0,0 +1,27 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:157:19:HAL_Init 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:190:19:HAL_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:219:13:HAL_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:230:13:HAL_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:253:26:HAL_InitTick 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:312:13:HAL_IncTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323:17:HAL_GetTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:332:10:HAL_GetTickPrio 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:341:19:HAL_SetTickFreq 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:374:21:HAL_GetTickFreq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:390:13:HAL_Delay 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:416:13:HAL_SuspendTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:432:13:HAL_ResumeTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:442:10:HAL_GetHalVersion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:451:10:HAL_GetREVID 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:460:10:HAL_GetDEVID 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:469:6:HAL_DBGMCU_EnableDBGSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:478:6:HAL_DBGMCU_DisableDBGSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:487:6:HAL_DBGMCU_EnableDBGStopMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:496:6:HAL_DBGMCU_DisableDBGStopMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:505:6:HAL_DBGMCU_EnableDBGStandbyMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:514:6:HAL_DBGMCU_DisableDBGStandbyMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:525:6:HAL_EnableCompensationCell 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:536:6:HAL_DisableCompensationCell 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:545:10:HAL_GetUIDw0 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:554:10:HAL_GetUIDw1 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:563:10:HAL_GetUIDw2 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d new file mode 100644 index 00000000..4c8c5b86 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o new file mode 100644 index 00000000..bf8d83f5 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su new file mode 100644 index 00000000..fb2a723a --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su @@ -0,0 +1,27 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:157:19:HAL_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:190:19:HAL_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:219:13:HAL_MspInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:230:13:HAL_MspDeInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:253:26:HAL_InitTick 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:312:13:HAL_IncTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323:17:HAL_GetTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:332:10:HAL_GetTickPrio 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:341:19:HAL_SetTickFreq 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:374:21:HAL_GetTickFreq 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:390:13:HAL_Delay 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:416:13:HAL_SuspendTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:432:13:HAL_ResumeTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:442:10:HAL_GetHalVersion 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:451:10:HAL_GetREVID 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:460:10:HAL_GetDEVID 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:469:6:HAL_DBGMCU_EnableDBGSleepMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:478:6:HAL_DBGMCU_DisableDBGSleepMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:487:6:HAL_DBGMCU_EnableDBGStopMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:496:6:HAL_DBGMCU_DisableDBGStopMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:505:6:HAL_DBGMCU_EnableDBGStandbyMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:514:6:HAL_DBGMCU_DisableDBGStandbyMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:525:6:HAL_EnableCompensationCell 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:536:6:HAL_DisableCompensationCell 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:545:10:HAL_GetUIDw0 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:554:10:HAL_GetUIDw1 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:563:10:HAL_GetUIDw2 4 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo new file mode 100644 index 00000000..04f992fd --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo @@ -0,0 +1,35 @@ +../Drivers/CMSIS/Include/core_cm4.h:1653:22:__NVIC_SetPriorityGrouping 1 +../Drivers/CMSIS/Include/core_cm4.h:1672:26:__NVIC_GetPriorityGrouping 1 +../Drivers/CMSIS/Include/core_cm4.h:1684:22:__NVIC_EnableIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1722:22:__NVIC_DisableIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1741:26:__NVIC_GetPendingIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1760:22:__NVIC_SetPendingIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1775:22:__NVIC_ClearPendingIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1792:26:__NVIC_GetActive 2 +../Drivers/CMSIS/Include/core_cm4.h:1814:22:__NVIC_SetPriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1836:26:__NVIC_GetPriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1861:26:NVIC_EncodePriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1888:22:NVIC_DecodePriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1938:34:__NVIC_SystemReset 1 +../Drivers/CMSIS/Include/core_cm4.h:2022:26:SysTick_Config 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:141:6:HAL_NVIC_SetPriorityGrouping 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:163:6:HAL_NVIC_SetPriority 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:185:6:HAL_NVIC_EnableIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:201:6:HAL_NVIC_DisableIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:214:6:HAL_NVIC_SystemReset 0 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:227:10:HAL_SYSTICK_Config 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:256:6:HAL_MPU_Disable 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:279:6:HAL_MPU_Enable 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:296:6:HAL_MPU_EnableRegion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:312:6:HAL_MPU_DisableRegion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:330:6:HAL_MPU_ConfigRegion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:368:6:HAL_CORTEX_ClearEvent 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:378:10:HAL_NVIC_GetPriorityGrouping 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:405:6:HAL_NVIC_GetPriority 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:420:6:HAL_NVIC_SetPendingIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:438:10:HAL_NVIC_GetPendingIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:454:6:HAL_NVIC_ClearPendingIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:471:10:HAL_NVIC_GetActive 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:488:6:HAL_SYSTICK_CLKSourceConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:506:6:HAL_SYSTICK_IRQHandler 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:515:13:HAL_SYSTICK_Callback 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d new file mode 100644 index 00000000..93b84ece --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o new file mode 100644 index 00000000..1e9a78e9 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su new file mode 100644 index 00000000..985c4808 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su @@ -0,0 +1,35 @@ +../Drivers/CMSIS/Include/core_cm4.h:1653:22:__NVIC_SetPriorityGrouping 24 static +../Drivers/CMSIS/Include/core_cm4.h:1672:26:__NVIC_GetPriorityGrouping 4 static +../Drivers/CMSIS/Include/core_cm4.h:1684:22:__NVIC_EnableIRQ 16 static,ignoring_inline_asm +../Drivers/CMSIS/Include/core_cm4.h:1722:22:__NVIC_DisableIRQ 16 static,ignoring_inline_asm +../Drivers/CMSIS/Include/core_cm4.h:1741:26:__NVIC_GetPendingIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1760:22:__NVIC_SetPendingIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1775:22:__NVIC_ClearPendingIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1792:26:__NVIC_GetActive 16 static +../Drivers/CMSIS/Include/core_cm4.h:1814:22:__NVIC_SetPriority 16 static +../Drivers/CMSIS/Include/core_cm4.h:1836:26:__NVIC_GetPriority 16 static +../Drivers/CMSIS/Include/core_cm4.h:1861:26:NVIC_EncodePriority 40 static +../Drivers/CMSIS/Include/core_cm4.h:1888:22:NVIC_DecodePriority 40 static +../Drivers/CMSIS/Include/core_cm4.h:1938:34:__NVIC_SystemReset 4 static,ignoring_inline_asm +../Drivers/CMSIS/Include/core_cm4.h:2022:26:SysTick_Config 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:141:6:HAL_NVIC_SetPriorityGrouping 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:163:6:HAL_NVIC_SetPriority 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:185:6:HAL_NVIC_EnableIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:201:6:HAL_NVIC_DisableIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:214:6:HAL_NVIC_SystemReset 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:227:10:HAL_SYSTICK_Config 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:256:6:HAL_MPU_Disable 4 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:279:6:HAL_MPU_Enable 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:296:6:HAL_MPU_EnableRegion 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:312:6:HAL_MPU_DisableRegion 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:330:6:HAL_MPU_ConfigRegion 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:368:6:HAL_CORTEX_ClearEvent 4 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:378:10:HAL_NVIC_GetPriorityGrouping 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:405:6:HAL_NVIC_GetPriority 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:420:6:HAL_NVIC_SetPendingIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:438:10:HAL_NVIC_GetPendingIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:454:6:HAL_NVIC_ClearPendingIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:471:10:HAL_NVIC_GetActive 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:488:6:HAL_SYSTICK_CLKSourceConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:506:6:HAL_SYSTICK_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:515:13:HAL_SYSTICK_Callback 4 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo new file mode 100644 index 00000000..29a68e40 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo @@ -0,0 +1,15 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:170:19:HAL_DMA_Init 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:309:19:HAL_DMA_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:407:19:HAL_DMA_Start 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:451:19:HAL_DMA_Start_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:513:19:HAL_DMA_Abort 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:580:19:HAL_DMA_Abort_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:610:19:HAL_DMA_PollForTransfer 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:746:6:HAL_DMA_IRQHandler 32 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:967:19:HAL_DMA_RegisterCallback 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1029:19:HAL_DMA_UnRegisterCallback 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1114:22:HAL_DMA_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1125:10:HAL_DMA_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1151:13:DMA_SetConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1185:17:DMA_CalcBaseAndBitshift 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1213:26:DMA_CheckFifoParam 15 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d new file mode 100644 index 00000000..44fd2965 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o new file mode 100644 index 00000000..88fd28bb Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su new file mode 100644 index 00000000..6c24b90d --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su @@ -0,0 +1,15 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:170:19:HAL_DMA_Init 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:309:19:HAL_DMA_DeInit 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:407:19:HAL_DMA_Start 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:451:19:HAL_DMA_Start_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:513:19:HAL_DMA_Abort 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:580:19:HAL_DMA_Abort_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:610:19:HAL_DMA_PollForTransfer 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:746:6:HAL_DMA_IRQHandler 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:967:19:HAL_DMA_RegisterCallback 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1029:19:HAL_DMA_UnRegisterCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1114:22:HAL_DMA_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1125:10:HAL_DMA_GetError 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1151:13:DMA_SetConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1185:17:DMA_CalcBaseAndBitshift 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1213:26:DMA_CheckFifoParam 24 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo new file mode 100644 index 00000000..8080a4a9 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:100:19:HAL_DMAEx_MultiBufferStart 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:154:19:HAL_DMAEx_MultiBufferStart_IT 264 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:239:19:HAL_DMAEx_ChangeMemory 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:276:13:DMA_MultiBufferSetConfig 2 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d new file mode 100644 index 00000000..a5b9ab6f --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o new file mode 100644 index 00000000..b357b0b1 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su new file mode 100644 index 00000000..9b2268bd --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:100:19:HAL_DMAEx_MultiBufferStart 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:154:19:HAL_DMAEx_MultiBufferStart_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:239:19:HAL_DMAEx_ChangeMemory 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:276:13:DMA_MultiBufferSetConfig 24 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo new file mode 100644 index 00000000..65258b17 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:466:10:HAL_EXTI_GetPending 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:498:6:HAL_EXTI_ClearPending 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:522:6:HAL_EXTI_GenerateSWI 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d new file mode 100644 index 00000000..387a44c6 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o new file mode 100644 index 00000000..51552fb7 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su new file mode 100644 index 00000000..8a14ca59 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:466:10:HAL_EXTI_GetPending 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:498:6:HAL_EXTI_ClearPending 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:522:6:HAL_EXTI_GenerateSWI 24 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo new file mode 100644 index 00000000..3035a468 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:161:19:HAL_FLASH_Program 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:219:19:HAL_FLASH_Program_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:263:6:HAL_FLASH_IRQHandler 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:383:13:HAL_FLASH_EndOfOperationCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:400:13:HAL_FLASH_OperationErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:432:19:HAL_FLASH_Unlock 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:456:19:HAL_FLASH_Lock 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:468:19:HAL_FLASH_OB_Unlock 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:488:19:HAL_FLASH_OB_Lock 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:500:19:HAL_FLASH_OB_Launch 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:537:10:HAL_FLASH_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:551:19:FLASH_WaitForLastOperation 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:611:13:FLASH_Program_DoubleWord 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:645:13:FLASH_Program_Word 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:670:13:FLASH_Program_HalfWord 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:695:13:FLASH_Program_Byte 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:712:13:FLASH_SetErrorCode 7 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d new file mode 100644 index 00000000..bc34265a --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o new file mode 100644 index 00000000..9f1f473b Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su new file mode 100644 index 00000000..3f33f488 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:161:19:HAL_FLASH_Program 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:219:19:HAL_FLASH_Program_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:263:6:HAL_FLASH_IRQHandler 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:383:13:HAL_FLASH_EndOfOperationCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:400:13:HAL_FLASH_OperationErrorCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:432:19:HAL_FLASH_Unlock 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:456:19:HAL_FLASH_Lock 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:468:19:HAL_FLASH_OB_Unlock 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:488:19:HAL_FLASH_OB_Lock 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:500:19:HAL_FLASH_OB_Launch 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:537:10:HAL_FLASH_GetError 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:551:19:FLASH_WaitForLastOperation 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:611:13:FLASH_Program_DoubleWord 24 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:645:13:FLASH_Program_Word 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:670:13:FLASH_Program_HalfWord 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:695:13:FLASH_Program_Byte 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:712:13:FLASH_SetErrorCode 4 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo new file mode 100644 index 00000000..7b06e0da --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo @@ -0,0 +1,22 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:160:19:HAL_FLASHEx_Erase 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:231:19:HAL_FLASHEx_Erase_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:281:19:HAL_FLASHEx_OBProgram 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:340:6:HAL_FLASHEx_OBGetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:369:19:HAL_FLASHEx_AdvOBProgram 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:425:6:HAL_FLASHEx_AdvOBGetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:457:19:HAL_FLASHEx_OB_SelectPCROP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:482:19:HAL_FLASHEx_OB_DeSelectPCROP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:948:13:FLASH_MassErase 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:977:6:FLASH_Erase_Sector 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1027:26:FLASH_OB_EnableWRP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1063:26:FLASH_OB_DisableWRP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1096:26:FLASH_OB_EnablePCROP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1124:26:FLASH_OB_DisablePCROP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1157:26:FLASH_OB_RDP_LevelConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1191:26:FLASH_OB_UserConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1226:26:FLASH_OB_BOR_LevelConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1244:16:FLASH_OB_GetUser 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1254:17:FLASH_OB_GetWRP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1268:16:FLASH_OB_GetRDP 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1296:16:FLASH_OB_GetBOR 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1306:6:FLASH_FlushCaches 3 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d new file mode 100644 index 00000000..db1c6529 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o new file mode 100644 index 00000000..50f581c4 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su new file mode 100644 index 00000000..76905bf7 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su @@ -0,0 +1,22 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:160:19:HAL_FLASHEx_Erase 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:231:19:HAL_FLASHEx_Erase_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:281:19:HAL_FLASHEx_OBProgram 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:340:6:HAL_FLASHEx_OBGetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:369:19:HAL_FLASHEx_AdvOBProgram 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:425:6:HAL_FLASHEx_AdvOBGetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:457:19:HAL_FLASHEx_OB_SelectPCROP 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:482:19:HAL_FLASHEx_OB_DeSelectPCROP 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:948:13:FLASH_MassErase 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:977:6:FLASH_Erase_Sector 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1027:26:FLASH_OB_EnableWRP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1063:26:FLASH_OB_DisableWRP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1096:26:FLASH_OB_EnablePCROP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1124:26:FLASH_OB_DisablePCROP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1157:26:FLASH_OB_RDP_LevelConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1191:26:FLASH_OB_UserConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1226:26:FLASH_OB_BOR_LevelConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1244:16:FLASH_OB_GetUser 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1254:17:FLASH_OB_GetWRP 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1268:16:FLASH_OB_GetRDP 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1296:16:FLASH_OB_GetBOR 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1306:6:FLASH_FlushCaches 4 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo new file mode 100644 index 00000000..bd716274 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:94:30:HAL_FLASHEx_StopFlashInterfaceClk 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:111:30:HAL_FLASHEx_StartFlashInterfaceClk 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:128:30:HAL_FLASHEx_EnableFlashSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:145:30:HAL_FLASHEx_DisableFlashSleepMode 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d new file mode 100644 index 00000000..141bd7f2 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o new file mode 100644 index 00000000..8c1bbf02 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su new file mode 100644 index 00000000..c37958f6 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:94:30:HAL_FLASHEx_StopFlashInterfaceClk 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:111:30:HAL_FLASHEx_StartFlashInterfaceClk 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:128:30:HAL_FLASHEx_EnableFlashSleepMode 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:145:30:HAL_FLASHEx_DisableFlashSleepMode 16 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo new file mode 100644 index 00000000..bcef341b --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo @@ -0,0 +1,8 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:164:6:HAL_GPIO_Init 19 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:294:6:HAL_GPIO_DeInit 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:375:15:HAL_GPIO_ReadPin 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:410:6:HAL_GPIO_WritePin 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:433:6:HAL_GPIO_TogglePin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:458:19:HAL_GPIO_LockPin 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:492:6:HAL_GPIO_EXTI_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:507:13:HAL_GPIO_EXTI_Callback 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d new file mode 100644 index 00000000..12e17379 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o new file mode 100644 index 00000000..39067e22 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su new file mode 100644 index 00000000..2ae13210 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su @@ -0,0 +1,8 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:164:6:HAL_GPIO_Init 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:294:6:HAL_GPIO_DeInit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:375:15:HAL_GPIO_ReadPin 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:410:6:HAL_GPIO_WritePin 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:433:6:HAL_GPIO_TogglePin 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:458:19:HAL_GPIO_LockPin 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:492:6:HAL_GPIO_EXTI_IRQHandler 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:507:13:HAL_GPIO_EXTI_Callback 16 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo new file mode 100644 index 00000000..d56c7657 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo @@ -0,0 +1,82 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:445:19:HAL_I2C_Init 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:560:19:HAL_I2C_DeInit 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:606:13:HAL_I2C_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:622:13:HAL_I2C_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:959:13:I2C_Flush_DR 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1056:19:HAL_I2C_Master_Transmit 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1177:19:HAL_I2C_Master_Receive 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1428:19:HAL_I2C_Slave_Transmit 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1558:19:HAL_I2C_Slave_Receive 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1679:19:HAL_I2C_Master_Transmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1756:19:HAL_I2C_Master_Receive_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1836:19:HAL_I2C_Slave_Transmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1898:19:HAL_I2C_Slave_Receive_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1962:19:HAL_I2C_Master_Transmit_DMA 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2117:19:HAL_I2C_Master_Receive_DMA 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2270:19:HAL_I2C_Slave_Transmit_DMA 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2384:19:HAL_I2C_Slave_Receive_DMA 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2503:19:HAL_I2C_Mem_Write 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2626:19:HAL_I2C_Mem_Read 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2878:19:HAL_I2C_Mem_Write_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2963:19:HAL_I2C_Mem_Read_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3054:19:HAL_I2C_Mem_Write_DMA 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3236:19:HAL_I2C_Mem_Read_DMA 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3432:19:HAL_I2C_IsDeviceReady 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3568:19:HAL_I2C_Master_Seq_Transmit_IT 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3663:19:HAL_I2C_Master_Seq_Transmit_DMA 23 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3843:19:HAL_I2C_Master_Seq_Receive_IT 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3964:19:HAL_I2C_Master_Seq_Receive_DMA 30 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4179:19:HAL_I2C_Slave_Seq_Transmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4245:19:HAL_I2C_Slave_Seq_Transmit_DMA 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4419:19:HAL_I2C_Slave_Seq_Receive_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4485:19:HAL_I2C_Slave_Seq_Receive_DMA 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4655:19:HAL_I2C_EnableListen_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4688:19:HAL_I2C_DisableListen_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4723:19:HAL_I2C_Master_Abort_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4783:6:HAL_I2C_EV_IRQHandler 46 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4952:6:HAL_I2C_ER_IRQHandler 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5032:13:HAL_I2C_MasterTxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5048:13:HAL_I2C_MasterRxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5063:13:HAL_I2C_SlaveTxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5079:13:HAL_I2C_SlaveRxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5097:13:HAL_I2C_AddrCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5115:13:HAL_I2C_ListenCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5131:13:HAL_I2C_MemTxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5147:13:HAL_I2C_MemRxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5163:13:HAL_I2C_ErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5179:13:HAL_I2C_AbortCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5214:22:HAL_I2C_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5226:21:HAL_I2C_GetMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5237:10:HAL_I2C_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5260:13:I2C_MasterTransmit_TXE 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5354:13:I2C_MasterTransmit_BTF 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5433:13:I2C_MemoryTransmit_TXE_BTF 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5520:13:I2C_MasterReceive_RXNE 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5639:13:I2C_MasterReceive_BTF 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5768:13:I2C_Master_SB 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5829:13:I2C_Master_ADD10 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5848:13:I2C_Master_ADDR 33 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5993:13:I2C_SlaveTransmit_TXE 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6034:13:I2C_SlaveTransmit_BTF 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6055:13:I2C_SlaveReceive_RXNE 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6096:13:I2C_SlaveReceive_BTF 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6118:13:I2C_Slave_ADDR 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6169:13:I2C_Slave_STOPF 19 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6338:13:I2C_Slave_AF 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6407:13:I2C_ITError 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6573:26:I2C_MasterRequestWrite 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6643:26:I2C_MasterRequestRead 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6743:26:I2C_RequestMemoryWrite 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6823:26:I2C_RequestMemoryRead 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6932:13:I2C_DMAXferCplt 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7077:13:I2C_DMAError 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7118:13:I2C_DMAAbort 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7221:26:I2C_WaitOnFlagUntilTimeout 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7258:26:I2C_WaitOnMasterAddressFlagUntilTimeout 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7312:26:I2C_WaitOnTXEFlagUntilTimeout 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7353:26:I2C_WaitOnBTFFlagUntilTimeout 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7394:26:I2C_WaitOnSTOPFlagUntilTimeout 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7430:26:I2C_WaitOnSTOPRequestThroughIT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7459:26:I2C_WaitOnRXNEFlagUntilTimeout 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7507:26:I2C_IsAcknowledgeFailed 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7532:13:I2C_ConvertOtherXferOptions 3 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d new file mode 100644 index 00000000..cfb11d36 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o new file mode 100644 index 00000000..af912a65 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su new file mode 100644 index 00000000..135aba49 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su @@ -0,0 +1,82 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:445:19:HAL_I2C_Init 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:560:19:HAL_I2C_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:606:13:HAL_I2C_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:622:13:HAL_I2C_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:959:13:I2C_Flush_DR 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1056:19:HAL_I2C_Master_Transmit 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1177:19:HAL_I2C_Master_Receive 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1428:19:HAL_I2C_Slave_Transmit 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1558:19:HAL_I2C_Slave_Receive 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1679:19:HAL_I2C_Master_Transmit_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1756:19:HAL_I2C_Master_Receive_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1836:19:HAL_I2C_Slave_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1898:19:HAL_I2C_Slave_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1962:19:HAL_I2C_Master_Transmit_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2117:19:HAL_I2C_Master_Receive_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2270:19:HAL_I2C_Slave_Transmit_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2384:19:HAL_I2C_Slave_Receive_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2503:19:HAL_I2C_Mem_Write 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2626:19:HAL_I2C_Mem_Read 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2878:19:HAL_I2C_Mem_Write_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2963:19:HAL_I2C_Mem_Read_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3054:19:HAL_I2C_Mem_Write_DMA 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3236:19:HAL_I2C_Mem_Read_DMA 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3432:19:HAL_I2C_IsDeviceReady 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3568:19:HAL_I2C_Master_Seq_Transmit_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3663:19:HAL_I2C_Master_Seq_Transmit_DMA 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3843:19:HAL_I2C_Master_Seq_Receive_IT 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3964:19:HAL_I2C_Master_Seq_Receive_DMA 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4179:19:HAL_I2C_Slave_Seq_Transmit_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4245:19:HAL_I2C_Slave_Seq_Transmit_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4419:19:HAL_I2C_Slave_Seq_Receive_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4485:19:HAL_I2C_Slave_Seq_Receive_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4655:19:HAL_I2C_EnableListen_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4688:19:HAL_I2C_DisableListen_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4723:19:HAL_I2C_Master_Abort_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4783:6:HAL_I2C_EV_IRQHandler 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4952:6:HAL_I2C_ER_IRQHandler 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5032:13:HAL_I2C_MasterTxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5048:13:HAL_I2C_MasterRxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5063:13:HAL_I2C_SlaveTxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5079:13:HAL_I2C_SlaveRxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5097:13:HAL_I2C_AddrCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5115:13:HAL_I2C_ListenCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5131:13:HAL_I2C_MemTxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5147:13:HAL_I2C_MemRxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5163:13:HAL_I2C_ErrorCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5179:13:HAL_I2C_AbortCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5214:22:HAL_I2C_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5226:21:HAL_I2C_GetMode 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5237:10:HAL_I2C_GetError 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5260:13:I2C_MasterTransmit_TXE 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5354:13:I2C_MasterTransmit_BTF 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5433:13:I2C_MemoryTransmit_TXE_BTF 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5520:13:I2C_MasterReceive_RXNE 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5639:13:I2C_MasterReceive_BTF 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5768:13:I2C_Master_SB 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5829:13:I2C_Master_ADD10 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5848:13:I2C_Master_ADDR 72 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5993:13:I2C_SlaveTransmit_TXE 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6034:13:I2C_SlaveTransmit_BTF 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6055:13:I2C_SlaveReceive_RXNE 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6096:13:I2C_SlaveReceive_BTF 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6118:13:I2C_Slave_ADDR 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6169:13:I2C_Slave_STOPF 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6338:13:I2C_Slave_AF 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6407:13:I2C_ITError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6573:26:I2C_MasterRequestWrite 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6643:26:I2C_MasterRequestRead 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6743:26:I2C_RequestMemoryWrite 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6823:26:I2C_RequestMemoryRead 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6932:13:I2C_DMAXferCplt 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7077:13:I2C_DMAError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7118:13:I2C_DMAAbort 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7221:26:I2C_WaitOnFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7258:26:I2C_WaitOnMasterAddressFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7312:26:I2C_WaitOnTXEFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7353:26:I2C_WaitOnBTFFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7394:26:I2C_WaitOnSTOPFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7430:26:I2C_WaitOnSTOPRequestThroughIT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7459:26:I2C_WaitOnRXNEFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7507:26:I2C_IsAcknowledgeFailed 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7532:13:I2C_ConvertOtherXferOptions 16 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo new file mode 100644 index 00000000..84b11ba7 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo @@ -0,0 +1,2 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:88:19:HAL_I2CEx_ConfigAnalogFilter 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:126:19:HAL_I2CEx_ConfigDigitalFilter 2 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d new file mode 100644 index 00000000..2cffc3d7 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o new file mode 100644 index 00000000..c862940a Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su new file mode 100644 index 00000000..6fd02734 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su @@ -0,0 +1,2 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:88:19:HAL_I2CEx_ConfigAnalogFilter 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:126:19:HAL_I2CEx_ConfigDigitalFilter 24 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo new file mode 100644 index 00000000..94a32b46 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo @@ -0,0 +1,38 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:123:19:HAL_PCD_Init 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:258:19:HAL_PCD_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:297:13:HAL_PCD_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:312:13:HAL_PCD_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1015:19:HAL_PCD_Start 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1040:19:HAL_PCD_Stop 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1068:6:HAL_PCD_IRQHandler 59 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1532:6:HAL_PCD_WKUP_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1559:13:HAL_PCD_DataOutStageCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1576:13:HAL_PCD_DataInStageCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1591:13:HAL_PCD_SetupStageCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1606:13:HAL_PCD_SOFCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1621:13:HAL_PCD_ResetCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1636:13:HAL_PCD_SuspendCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1651:13:HAL_PCD_ResumeCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1667:13:HAL_PCD_ISOOUTIncompleteCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1684:13:HAL_PCD_ISOINIncompleteCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1700:13:HAL_PCD_ConnectCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1715:13:HAL_PCD_DisconnectCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1749:19:HAL_PCD_DevConnect 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1772:19:HAL_PCD_DevDisconnect 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1797:19:HAL_PCD_SetAddress 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1814:19:HAL_PCD_EP_Open 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1860:19:HAL_PCD_EP_Close 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1891:19:HAL_PCD_EP_Receive 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1920:10:HAL_PCD_EP_GetRxCount 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1932:19:HAL_PCD_EP_Transmit 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1961:19:HAL_PCD_EP_SetStall 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2004:19:HAL_PCD_EP_ClrStall 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2040:19:HAL_PCD_EP_Abort 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2066:19:HAL_PCD_EP_Flush 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2089:19:HAL_PCD_ActivateRemoteWakeup 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2099:19:HAL_PCD_DeActivateRemoteWakeup 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2128:18:HAL_PCD_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2140:19:HAL_PCD_SetTestMode 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2182:26:PCD_WriteEmptyTxFifo 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2242:26:PCD_EP_OutXfrComplete_int 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2354:26:PCD_EP_OutSetupPacket_int 5 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d new file mode 100644 index 00000000..8ed93470 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o new file mode 100644 index 00000000..7cf67108 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su new file mode 100644 index 00000000..a609c8f4 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su @@ -0,0 +1,38 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:123:19:HAL_PCD_Init 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:258:19:HAL_PCD_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:297:13:HAL_PCD_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:312:13:HAL_PCD_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1015:19:HAL_PCD_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1040:19:HAL_PCD_Stop 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1068:6:HAL_PCD_IRQHandler 64 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1532:6:HAL_PCD_WKUP_IRQHandler 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1559:13:HAL_PCD_DataOutStageCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1576:13:HAL_PCD_DataInStageCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1591:13:HAL_PCD_SetupStageCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1606:13:HAL_PCD_SOFCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1621:13:HAL_PCD_ResetCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1636:13:HAL_PCD_SuspendCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1651:13:HAL_PCD_ResumeCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1667:13:HAL_PCD_ISOOUTIncompleteCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1684:13:HAL_PCD_ISOINIncompleteCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1700:13:HAL_PCD_ConnectCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1715:13:HAL_PCD_DisconnectCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1749:19:HAL_PCD_DevConnect 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1772:19:HAL_PCD_DevDisconnect 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1797:19:HAL_PCD_SetAddress 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1814:19:HAL_PCD_EP_Open 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1860:19:HAL_PCD_EP_Close 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1891:19:HAL_PCD_EP_Receive 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1920:10:HAL_PCD_EP_GetRxCount 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1932:19:HAL_PCD_EP_Transmit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1961:19:HAL_PCD_EP_SetStall 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2004:19:HAL_PCD_EP_ClrStall 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2040:19:HAL_PCD_EP_Abort 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2066:19:HAL_PCD_EP_Flush 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2089:19:HAL_PCD_ActivateRemoteWakeup 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2099:19:HAL_PCD_DeActivateRemoteWakeup 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2128:18:HAL_PCD_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2140:19:HAL_PCD_SetTestMode 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2182:26:PCD_WriteEmptyTxFifo 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2242:26:PCD_EP_OutXfrComplete_int 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2354:26:PCD_EP_OutSetupPacket_int 32 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo new file mode 100644 index 00000000..f616ddf9 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo @@ -0,0 +1,6 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:70:19:HAL_PCDEx_SetTxFiFo 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:112:19:HAL_PCDEx_SetRxFiFo 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:126:19:HAL_PCDEx_ActivateLPM 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:143:19:HAL_PCDEx_DeActivateLPM 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:303:13:HAL_PCDEx_LPM_Callback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:320:13:HAL_PCDEx_BCD_Callback 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d new file mode 100644 index 00000000..a330b78f --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o new file mode 100644 index 00000000..a8fbea38 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su new file mode 100644 index 00000000..0574680f --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su @@ -0,0 +1,6 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:70:19:HAL_PCDEx_SetTxFiFo 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:112:19:HAL_PCDEx_SetRxFiFo 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:126:19:HAL_PCDEx_ActivateLPM 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:143:19:HAL_PCDEx_DeActivateLPM 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:303:13:HAL_PCDEx_LPM_Callback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:320:13:HAL_PCDEx_BCD_Callback 16 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo new file mode 100644 index 00000000..fcef8458 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:90:6:HAL_PWR_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:108:6:HAL_PWR_EnableBkUpAccess 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:128:6:HAL_PWR_DisableBkUpAccess 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:275:6:HAL_PWR_ConfigPVD 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:318:6:HAL_PWR_EnablePVD 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:327:6:HAL_PWR_DisablePVD 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:341:6:HAL_PWR_EnableWakeUpPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:359:6:HAL_PWR_DisableWakeUpPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:391:6:HAL_PWR_EnterSLEEPMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:445:6:HAL_PWR_EnterSTOPMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:488:6:HAL_PWR_EnterSTANDBYMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:509:6:HAL_PWR_PVD_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:526:13:HAL_PWR_PVDCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:541:6:HAL_PWR_EnableSleepOnExit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:553:6:HAL_PWR_DisableSleepOnExit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:565:6:HAL_PWR_EnableSEVOnPend 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:577:6:HAL_PWR_DisableSEVOnPend 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d new file mode 100644 index 00000000..75b77829 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o new file mode 100644 index 00000000..12392f23 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su new file mode 100644 index 00000000..4eb40e84 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:90:6:HAL_PWR_DeInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:108:6:HAL_PWR_EnableBkUpAccess 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:128:6:HAL_PWR_DisableBkUpAccess 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:275:6:HAL_PWR_ConfigPVD 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:318:6:HAL_PWR_EnablePVD 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:327:6:HAL_PWR_DisablePVD 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:341:6:HAL_PWR_EnableWakeUpPin 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:359:6:HAL_PWR_DisableWakeUpPin 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:391:6:HAL_PWR_EnterSLEEPMode 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:445:6:HAL_PWR_EnterSTOPMode 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:488:6:HAL_PWR_EnterSTANDBYMode 4 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:509:6:HAL_PWR_PVD_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:526:13:HAL_PWR_PVDCallback 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:541:6:HAL_PWR_EnableSleepOnExit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:553:6:HAL_PWR_DisableSleepOnExit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:565:6:HAL_PWR_EnableSEVOnPend 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:577:6:HAL_PWR_DisableSEVOnPend 4 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo new file mode 100644 index 00000000..970ac44e --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:141:19:HAL_PWREx_EnableBkUpReg 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:165:19:HAL_PWREx_DisableBkUpReg 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:189:6:HAL_PWREx_EnableFlashPowerDown 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:198:6:HAL_PWREx_DisableFlashPowerDown 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:211:10:HAL_PWREx_GetVoltageRange 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:288:19:HAL_PWREx_ControlVoltageScaling 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:413:19:HAL_PWREx_EnableOverDrive 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:460:19:HAL_PWREx_DisableOverDrive 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:536:19:HAL_PWREx_EnterUnderDriveSTOPMode 2 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d new file mode 100644 index 00000000..220344d7 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o new file mode 100644 index 00000000..6951152c Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su new file mode 100644 index 00000000..afdd0771 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:141:19:HAL_PWREx_EnableBkUpReg 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:165:19:HAL_PWREx_DisableBkUpReg 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:189:6:HAL_PWREx_EnableFlashPowerDown 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:198:6:HAL_PWREx_DisableFlashPowerDown 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:211:10:HAL_PWREx_GetVoltageRange 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:288:19:HAL_PWREx_ControlVoltageScaling 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:413:19:HAL_PWREx_EnableOverDrive 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:460:19:HAL_PWREx_DisableOverDrive 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:536:19:HAL_PWREx_EnterUnderDriveSTOPMode 24 static,ignoring_inline_asm diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo new file mode 100644 index 00000000..a235e51e --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo @@ -0,0 +1,14 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:200:26:HAL_RCC_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:219:26:HAL_RCC_OscConfig 62 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:591:19:HAL_RCC_ClockConfig 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:775:6:HAL_RCC_MCOConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:841:6:HAL_RCC_EnableCSS 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:850:6:HAL_RCC_DisableCSS 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:885:17:HAL_RCC_GetSysClockFreq 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:943:10:HAL_RCC_GetHCLKFreq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:954:10:HAL_RCC_GetPCLK1Freq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:966:10:HAL_RCC_GetPCLK2Freq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:979:13:HAL_RCC_GetOscConfig 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1058:6:HAL_RCC_GetClockConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1084:6:HAL_RCC_NMI_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1101:13:HAL_RCC_CSSCallback 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d new file mode 100644 index 00000000..ed14ce03 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o new file mode 100644 index 00000000..13f63a55 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su new file mode 100644 index 00000000..7b240098 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su @@ -0,0 +1,14 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:200:26:HAL_RCC_DeInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:219:26:HAL_RCC_OscConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:591:19:HAL_RCC_ClockConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:775:6:HAL_RCC_MCOConfig 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:841:6:HAL_RCC_EnableCSS 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:850:6:HAL_RCC_DisableCSS 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:885:17:HAL_RCC_GetSysClockFreq 112 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:943:10:HAL_RCC_GetHCLKFreq 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:954:10:HAL_RCC_GetPCLK1Freq 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:966:10:HAL_RCC_GetPCLK2Freq 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:979:13:HAL_RCC_GetOscConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1058:6:HAL_RCC_GetClockConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1084:6:HAL_RCC_NMI_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1101:13:HAL_RCC_CSSCallback 4 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo new file mode 100644 index 00000000..9b944148 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo @@ -0,0 +1,12 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:87:19:HAL_RCCEx_PeriphCLKConfig 56 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:500:6:HAL_RCCEx_GetPeriphCLKConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:580:10:HAL_RCCEx_GetPeriphCLKFreq 38 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2809:6:HAL_RCCEx_SelectLSEMode 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2846:19:HAL_RCCEx_EnablePLLI2S 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2929:19:HAL_RCCEx_DisablePLLI2S 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2959:19:HAL_RCCEx_EnablePLLSAI 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3033:19:HAL_RCCEx_DisablePLLSAI 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3094:10:HAL_RCC_GetSysClockFreq 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3186:19:HAL_RCC_DeInit 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3377:19:HAL_RCC_OscConfig 66 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3752:6:HAL_RCC_GetOscConfig 8 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d new file mode 100644 index 00000000..efb9c676 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o new file mode 100644 index 00000000..3f6d714e Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su new file mode 100644 index 00000000..534b848c --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su @@ -0,0 +1,12 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:87:19:HAL_RCCEx_PeriphCLKConfig 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:500:6:HAL_RCCEx_GetPeriphCLKConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:580:10:HAL_RCCEx_GetPeriphCLKFreq 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2809:6:HAL_RCCEx_SelectLSEMode 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2846:19:HAL_RCCEx_EnablePLLI2S 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2929:19:HAL_RCCEx_DisablePLLI2S 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2959:19:HAL_RCCEx_EnablePLLSAI 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3033:19:HAL_RCCEx_DisablePLLSAI 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3094:10:HAL_RCC_GetSysClockFreq 216 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3186:19:HAL_RCC_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3377:19:HAL_RCC_OscConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3752:6:HAL_RCC_GetOscConfig 16 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo new file mode 100644 index 00000000..673019de --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo @@ -0,0 +1,119 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:266:19:HAL_TIM_Base_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:326:19:HAL_TIM_Base_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:369:13:HAL_TIM_Base_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:384:13:HAL_TIM_Base_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:400:19:HAL_TIM_Base_Start 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:439:19:HAL_TIM_Base_Stop 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:459:19:HAL_TIM_Base_Start_IT 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:501:19:HAL_TIM_Base_Stop_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:526:19:HAL_TIM_Base_Start_DMA 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:595:19:HAL_TIM_Base_Stop_DMA 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:650:19:HAL_TIM_OC_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:710:19:HAL_TIM_OC_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:753:13:HAL_TIM_OC_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:768:13:HAL_TIM_OC_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:789:19:HAL_TIM_OC_Start 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:843:19:HAL_TIM_OC_Stop 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:878:19:HAL_TIM_OC_Start_IT 25 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:971:19:HAL_TIM_OC_Stop_IT 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1048:19:HAL_TIM_OC_Start_DMA 35 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1212:19:HAL_TIM_OC_Stop_DMA 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1315:19:HAL_TIM_PWM_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1375:19:HAL_TIM_PWM_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1418:13:HAL_TIM_PWM_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1433:13:HAL_TIM_PWM_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1454:19:HAL_TIM_PWM_Start 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1508:19:HAL_TIM_PWM_Stop 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1543:19:HAL_TIM_PWM_Start_IT 25 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1636:19:HAL_TIM_PWM_Stop_IT 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1713:19:HAL_TIM_PWM_Start_DMA 35 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1876:19:HAL_TIM_PWM_Stop_DMA 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1979:19:HAL_TIM_IC_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2039:19:HAL_TIM_IC_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2082:13:HAL_TIM_IC_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2097:13:HAL_TIM_IC_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2118:19:HAL_TIM_IC_Start 24 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2170:19:HAL_TIM_IC_Stop 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2200:19:HAL_TIM_IC_Start_IT 29 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2292:19:HAL_TIM_IC_Stop_IT 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2364:19:HAL_TIM_IC_Start_DMA 36 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2523:19:HAL_TIM_IC_Stop_DMA 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2628:19:HAL_TIM_OnePulse_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2697:19:HAL_TIM_OnePulse_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2742:13:HAL_TIM_OnePulse_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2757:13:HAL_TIM_OnePulse_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2777:19:HAL_TIM_OnePulse_Start 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2834:19:HAL_TIM_OnePulse_Stop 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2877:19:HAL_TIM_OnePulse_Start_IT 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2940:19:HAL_TIM_OnePulse_Stop_IT 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3019:19:HAL_TIM_Encoder_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3134:19:HAL_TIM_Encoder_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3179:13:HAL_TIM_Encoder_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3194:13:HAL_TIM_Encoder_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3214:19:HAL_TIM_Encoder_Start 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3308:19:HAL_TIM_Encoder_Stop 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3368:19:HAL_TIM_Encoder_Start_IT 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3468:19:HAL_TIM_Encoder_Stop_IT 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3533:19:HAL_TIM_Encoder_Start_DMA 32 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3746:19:HAL_TIM_Encoder_Stop_DMA 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3823:6:HAL_TIM_IRQHandler 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4041:19:HAL_TIM_OC_ConfigChannel 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4120:19:HAL_TIM_IC_ConfigChannel 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4219:19:HAL_TIM_PWM_ConfigChannel 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4333:19:HAL_TIM_OnePulse_ConfigChannel 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4481:19:HAL_TIM_DMABurst_WriteStart 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4534:19:HAL_TIM_DMABurst_MultiWriteStart 25 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4718:19:HAL_TIM_DMABurst_WriteStop 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4819:19:HAL_TIM_DMABurst_ReadStart 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4870:19:HAL_TIM_DMABurst_MultiReadStart 25 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5054:19:HAL_TIM_DMABurst_ReadStop 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5137:19:HAL_TIM_GenerateEvent 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5174:19:HAL_TIM_ConfigOCrefClear 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5304:19:HAL_TIM_ConfigClockSource 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5458:19:HAL_TIM_ConfigTI1Input 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5490:19:HAL_TIM_SlaveConfigSynchro 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5530:19:HAL_TIM_SlaveConfigSynchro_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5573:10:HAL_TIM_ReadCapturedValue 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5657:13:HAL_TIM_PeriodElapsedCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5672:13:HAL_TIM_PeriodElapsedHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5687:13:HAL_TIM_OC_DelayElapsedCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5702:13:HAL_TIM_IC_CaptureCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5717:13:HAL_TIM_IC_CaptureHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5732:13:HAL_TIM_PWM_PulseFinishedCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5747:13:HAL_TIM_PWM_PulseFinishedHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5762:13:HAL_TIM_TriggerCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5777:13:HAL_TIM_TriggerHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5792:13:HAL_TIM_ErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6339:22:HAL_TIM_Base_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6349:22:HAL_TIM_OC_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6359:22:HAL_TIM_PWM_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6369:22:HAL_TIM_IC_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6379:22:HAL_TIM_OnePulse_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6389:22:HAL_TIM_Encoder_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6399:23:HAL_TIM_GetActiveChannel 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6417:29:HAL_TIM_GetChannelState 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6434:30:HAL_TIM_DMABurstState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6459:6:TIM_DMAError 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6502:13:TIM_DMADelayPulseCplt 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6561:6:TIM_DMADelayPulseHalfCplt 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6600:6:TIM_DMACaptureCplt 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6663:6:TIM_DMACaptureHalfCplt 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6702:13:TIM_DMAPeriodElapsedCplt 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6723:13:TIM_DMAPeriodElapsedHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6739:13:TIM_DMATriggerCplt 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6760:13:TIM_DMATriggerHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6777:6:TIM_Base_SetConfig 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6829:13:TIM_OC1_SetConfig 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6905:6:TIM_OC2_SetConfig 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6981:13:TIM_OC3_SetConfig 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7056:13:TIM_OC4_SetConfig 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7117:26:TIM_SlaveTimer_SetConfig 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7251:6:TIM_TI1_SetConfig 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7298:13:TIM_TI1_ConfigInputStage 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7341:13:TIM_TI2_SetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7381:13:TIM_TI2_ConfigInputStage 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7424:13:TIM_TI3_SetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7472:13:TIM_TI4_SetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7515:13:TIM_ITRx_SetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7545:6:TIM_ETR_SetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7575:6:TIM_CCxChannelCmd 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d new file mode 100644 index 00000000..74d1f732 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o new file mode 100644 index 00000000..b6cfe38e Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su new file mode 100644 index 00000000..f4fb564a --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su @@ -0,0 +1,119 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:266:19:HAL_TIM_Base_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:326:19:HAL_TIM_Base_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:369:13:HAL_TIM_Base_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:384:13:HAL_TIM_Base_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:400:19:HAL_TIM_Base_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:439:19:HAL_TIM_Base_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:459:19:HAL_TIM_Base_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:501:19:HAL_TIM_Base_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:526:19:HAL_TIM_Base_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:595:19:HAL_TIM_Base_Stop_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:650:19:HAL_TIM_OC_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:710:19:HAL_TIM_OC_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:753:13:HAL_TIM_OC_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:768:13:HAL_TIM_OC_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:789:19:HAL_TIM_OC_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:843:19:HAL_TIM_OC_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:878:19:HAL_TIM_OC_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:971:19:HAL_TIM_OC_Stop_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1048:19:HAL_TIM_OC_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1212:19:HAL_TIM_OC_Stop_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1315:19:HAL_TIM_PWM_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1375:19:HAL_TIM_PWM_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1418:13:HAL_TIM_PWM_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1433:13:HAL_TIM_PWM_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1454:19:HAL_TIM_PWM_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1508:19:HAL_TIM_PWM_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1543:19:HAL_TIM_PWM_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1636:19:HAL_TIM_PWM_Stop_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1713:19:HAL_TIM_PWM_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1876:19:HAL_TIM_PWM_Stop_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1979:19:HAL_TIM_IC_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2039:19:HAL_TIM_IC_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2082:13:HAL_TIM_IC_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2097:13:HAL_TIM_IC_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2118:19:HAL_TIM_IC_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2170:19:HAL_TIM_IC_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2200:19:HAL_TIM_IC_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2292:19:HAL_TIM_IC_Stop_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2364:19:HAL_TIM_IC_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2523:19:HAL_TIM_IC_Stop_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2628:19:HAL_TIM_OnePulse_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2697:19:HAL_TIM_OnePulse_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2742:13:HAL_TIM_OnePulse_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2757:13:HAL_TIM_OnePulse_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2777:19:HAL_TIM_OnePulse_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2834:19:HAL_TIM_OnePulse_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2877:19:HAL_TIM_OnePulse_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2940:19:HAL_TIM_OnePulse_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3019:19:HAL_TIM_Encoder_Init 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3134:19:HAL_TIM_Encoder_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3179:13:HAL_TIM_Encoder_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3194:13:HAL_TIM_Encoder_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3214:19:HAL_TIM_Encoder_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3308:19:HAL_TIM_Encoder_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3368:19:HAL_TIM_Encoder_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3468:19:HAL_TIM_Encoder_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3533:19:HAL_TIM_Encoder_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3746:19:HAL_TIM_Encoder_Stop_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3823:6:HAL_TIM_IRQHandler 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4041:19:HAL_TIM_OC_ConfigChannel 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4120:19:HAL_TIM_IC_ConfigChannel 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4219:19:HAL_TIM_PWM_ConfigChannel 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4333:19:HAL_TIM_OnePulse_ConfigChannel 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4481:19:HAL_TIM_DMABurst_WriteStart 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4534:19:HAL_TIM_DMABurst_MultiWriteStart 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4718:19:HAL_TIM_DMABurst_WriteStop 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4819:19:HAL_TIM_DMABurst_ReadStart 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4870:19:HAL_TIM_DMABurst_MultiReadStart 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5054:19:HAL_TIM_DMABurst_ReadStop 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5137:19:HAL_TIM_GenerateEvent 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5174:19:HAL_TIM_ConfigOCrefClear 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5304:19:HAL_TIM_ConfigClockSource 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5458:19:HAL_TIM_ConfigTI1Input 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5490:19:HAL_TIM_SlaveConfigSynchro 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5530:19:HAL_TIM_SlaveConfigSynchro_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5573:10:HAL_TIM_ReadCapturedValue 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5657:13:HAL_TIM_PeriodElapsedCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5672:13:HAL_TIM_PeriodElapsedHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5687:13:HAL_TIM_OC_DelayElapsedCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5702:13:HAL_TIM_IC_CaptureCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5717:13:HAL_TIM_IC_CaptureHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5732:13:HAL_TIM_PWM_PulseFinishedCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5747:13:HAL_TIM_PWM_PulseFinishedHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5762:13:HAL_TIM_TriggerCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5777:13:HAL_TIM_TriggerHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5792:13:HAL_TIM_ErrorCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6339:22:HAL_TIM_Base_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6349:22:HAL_TIM_OC_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6359:22:HAL_TIM_PWM_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6369:22:HAL_TIM_IC_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6379:22:HAL_TIM_OnePulse_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6389:22:HAL_TIM_Encoder_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6399:23:HAL_TIM_GetActiveChannel 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6417:29:HAL_TIM_GetChannelState 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6434:30:HAL_TIM_DMABurstState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6459:6:TIM_DMAError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6502:13:TIM_DMADelayPulseCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6561:6:TIM_DMADelayPulseHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6600:6:TIM_DMACaptureCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6663:6:TIM_DMACaptureHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6702:13:TIM_DMAPeriodElapsedCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6723:13:TIM_DMAPeriodElapsedHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6739:13:TIM_DMATriggerCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6760:13:TIM_DMATriggerHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6777:6:TIM_Base_SetConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6829:13:TIM_OC1_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6905:6:TIM_OC2_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6981:13:TIM_OC3_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7056:13:TIM_OC4_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7117:26:TIM_SlaveTimer_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7251:6:TIM_TI1_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7298:13:TIM_TI1_ConfigInputStage 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7341:13:TIM_TI2_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7381:13:TIM_TI2_ConfigInputStage 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7424:13:TIM_TI3_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7472:13:TIM_TI4_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7515:13:TIM_ITRx_SetConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7545:6:TIM_ETR_SetConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7575:6:TIM_CCxChannelCmd 32 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo new file mode 100644 index 00000000..9bfdfb78 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo @@ -0,0 +1,42 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:138:19:HAL_TIMEx_HallSensor_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:240:19:HAL_TIMEx_HallSensor_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:285:13:HAL_TIMEx_HallSensor_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:300:13:HAL_TIMEx_HallSensor_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:315:19:HAL_TIMEx_HallSensor_Start 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:369:19:HAL_TIMEx_HallSensor_Stop 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:397:19:HAL_TIMEx_HallSensor_Start_IT 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:454:19:HAL_TIMEx_HallSensor_Stop_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:487:19:HAL_TIMEx_HallSensor_Start_DMA 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:563:19:HAL_TIMEx_HallSensor_Stop_DMA 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:625:19:HAL_TIMEx_OCN_Start 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:676:19:HAL_TIMEx_OCN_Stop 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:708:19:HAL_TIMEx_OCN_Start_IT 22 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:795:19:HAL_TIMEx_OCN_Stop_IT 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:870:19:HAL_TIMEx_OCN_Start_DMA 31 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1008:19:HAL_TIMEx_OCN_Stop_DMA 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1098:19:HAL_TIMEx_PWMN_Start 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1148:19:HAL_TIMEx_PWMN_Stop 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1180:19:HAL_TIMEx_PWMN_Start_IT 22 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1266:19:HAL_TIMEx_PWMN_Stop_IT 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1341:19:HAL_TIMEx_PWMN_Start_DMA 31 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1479:19:HAL_TIMEx_PWMN_Stop_DMA 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1570:19:HAL_TIMEx_OnePulseN_Start 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1619:19:HAL_TIMEx_OnePulseN_Stop 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1658:19:HAL_TIMEx_OnePulseN_Start_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1713:19:HAL_TIMEx_OnePulseN_Stop_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1792:19:HAL_TIMEx_ConfigCommutEvent 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1848:19:HAL_TIMEx_ConfigCommutEvent_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1905:19:HAL_TIMEx_ConfigCommutEvent_DMA 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1954:19:HAL_TIMEx_MasterConfigSynchronization 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2015:19:HAL_TIMEx_ConfigBreakDeadTime 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2091:19:HAL_TIMEx_RemapConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2147:13:HAL_TIMEx_CommutCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2161:13:HAL_TIMEx_CommutHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2176:13:HAL_TIMEx_BreakCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2209:22:HAL_TIMEx_HallSensor_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2224:29:HAL_TIMEx_GetChannelNState 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2253:6:TIMEx_DMACommutationCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2272:6:TIMEx_DMACommutationHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2292:13:TIM_DMADelayPulseNCplt 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2342:13:TIM_DMAErrorCCxN 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2387:13:TIM_CCxNChannelCmd 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d new file mode 100644 index 00000000..cf3ba16a --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o new file mode 100644 index 00000000..8cca8f3c Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su new file mode 100644 index 00000000..1dd929fe --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su @@ -0,0 +1,42 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:138:19:HAL_TIMEx_HallSensor_Init 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:240:19:HAL_TIMEx_HallSensor_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:285:13:HAL_TIMEx_HallSensor_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:300:13:HAL_TIMEx_HallSensor_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:315:19:HAL_TIMEx_HallSensor_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:369:19:HAL_TIMEx_HallSensor_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:397:19:HAL_TIMEx_HallSensor_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:454:19:HAL_TIMEx_HallSensor_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:487:19:HAL_TIMEx_HallSensor_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:563:19:HAL_TIMEx_HallSensor_Stop_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:625:19:HAL_TIMEx_OCN_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:676:19:HAL_TIMEx_OCN_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:708:19:HAL_TIMEx_OCN_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:795:19:HAL_TIMEx_OCN_Stop_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:870:19:HAL_TIMEx_OCN_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1008:19:HAL_TIMEx_OCN_Stop_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1098:19:HAL_TIMEx_PWMN_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1148:19:HAL_TIMEx_PWMN_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1180:19:HAL_TIMEx_PWMN_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1266:19:HAL_TIMEx_PWMN_Stop_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1341:19:HAL_TIMEx_PWMN_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1479:19:HAL_TIMEx_PWMN_Stop_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1570:19:HAL_TIMEx_OnePulseN_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1619:19:HAL_TIMEx_OnePulseN_Stop 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1658:19:HAL_TIMEx_OnePulseN_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1713:19:HAL_TIMEx_OnePulseN_Stop_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1792:19:HAL_TIMEx_ConfigCommutEvent 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1848:19:HAL_TIMEx_ConfigCommutEvent_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1905:19:HAL_TIMEx_ConfigCommutEvent_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1954:19:HAL_TIMEx_MasterConfigSynchronization 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2015:19:HAL_TIMEx_ConfigBreakDeadTime 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2091:19:HAL_TIMEx_RemapConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2147:13:HAL_TIMEx_CommutCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2161:13:HAL_TIMEx_CommutHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2176:13:HAL_TIMEx_BreakCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2209:22:HAL_TIMEx_HallSensor_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2224:29:HAL_TIMEx_GetChannelNState 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2253:6:TIMEx_DMACommutationCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2272:6:TIMEx_DMACommutationHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2292:13:TIM_DMADelayPulseNCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2342:13:TIM_DMAErrorCCxN 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2387:13:TIM_CCxNChannelCmd 32 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo new file mode 100644 index 00000000..8be37003 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo @@ -0,0 +1,62 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:357:19:HAL_UART_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:435:19:HAL_HalfDuplex_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:509:19:HAL_LIN_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:591:19:HAL_MultiProcessor_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:669:19:HAL_UART_DeInit 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:715:13:HAL_UART_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:730:13:HAL_UART_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1135:19:HAL_UART_Transmit 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1221:19:HAL_UART_Receive 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1308:19:HAL_UART_Transmit_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1347:19:HAL_UART_Receive_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1379:19:HAL_UART_Transmit_DMA 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1449:19:HAL_UART_Receive_DMA 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1476:19:HAL_UART_DMAPause 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1507:19:HAL_UART_DMAResume 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1541:19:HAL_UART_DMAStop 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1596:19:HAL_UARTEx_ReceiveToIdle 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1721:19:HAL_UARTEx_ReceiveToIdle_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1781:19:HAL_UARTEx_ReceiveToIdle_DMA 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1846:29:HAL_UARTEx_GetRxEventType 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1864:19:HAL_UART_Abort 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1953:19:HAL_UART_AbortTransmit 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2004:19:HAL_UART_AbortReceive 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2065:19:HAL_UART_Abort_IT 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2200:19:HAL_UART_AbortTransmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2277:19:HAL_UART_AbortReceive_IT 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2355:6:HAL_UART_IRQHandler 47 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2619:13:HAL_UART_TxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2634:13:HAL_UART_TxHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2649:13:HAL_UART_RxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2664:13:HAL_UART_RxHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2679:13:HAL_UART_ErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2693:13:HAL_UART_AbortCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2708:13:HAL_UART_AbortTransmitCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2723:13:HAL_UART_AbortReceiveCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2740:13:HAL_UARTEx_RxEventCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2780:19:HAL_LIN_SendBreak 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2807:19:HAL_MultiProcessor_EnterMuteMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2835:19:HAL_MultiProcessor_ExitMuteMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2863:19:HAL_HalfDuplex_EnableTransmitter 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2898:19:HAL_HalfDuplex_EnableReceiver 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2955:23:HAL_UART_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2970:10:HAL_UART_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3015:13:UART_DMATransmitCplt 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3050:13:UART_DMATxHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3069:13:UART_DMAReceiveCplt 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3131:13:UART_DMARxHalfCplt 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3170:13:UART_DMAError 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3212:26:UART_WaitOnFlagUntilTimeout 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3263:19:UART_Start_Receive_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3298:19:UART_Start_Receive_DMA 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3356:13:UART_EndTxTransfer 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3370:13:UART_EndRxTransfer 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3394:13:UART_DMAAbortOnError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3417:13:UART_DMATxAbortCallback 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3463:13:UART_DMARxAbortCallback 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3509:13:UART_DMATxOnlyAbortCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3537:13:UART_DMARxOnlyAbortCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3563:26:UART_Transmit_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3603:26:UART_EndTransmit_IT 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3628:26:UART_Receive_IT 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3731:13:UART_SetConfig 4 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d new file mode 100644 index 00000000..180b2c9f --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o new file mode 100644 index 00000000..95c395c1 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su new file mode 100644 index 00000000..80e6f1c0 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su @@ -0,0 +1,62 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:357:19:HAL_UART_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:435:19:HAL_HalfDuplex_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:509:19:HAL_LIN_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:591:19:HAL_MultiProcessor_Init 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:669:19:HAL_UART_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:715:13:HAL_UART_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:730:13:HAL_UART_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1135:19:HAL_UART_Transmit 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1221:19:HAL_UART_Receive 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1308:19:HAL_UART_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1347:19:HAL_UART_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1379:19:HAL_UART_Transmit_DMA 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1449:19:HAL_UART_Receive_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1476:19:HAL_UART_DMAPause 120 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1507:19:HAL_UART_DMAResume 120 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1541:19:HAL_UART_DMAStop 72 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1596:19:HAL_UARTEx_ReceiveToIdle 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1721:19:HAL_UARTEx_ReceiveToIdle_IT 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1781:19:HAL_UARTEx_ReceiveToIdle_DMA 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1846:29:HAL_UARTEx_GetRxEventType 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1864:19:HAL_UART_Abort 136 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1953:19:HAL_UART_AbortTransmit 64 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2004:19:HAL_UART_AbortReceive 112 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2065:19:HAL_UART_Abort_IT 144 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2200:19:HAL_UART_AbortTransmit_IT 64 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2277:19:HAL_UART_AbortReceive_IT 112 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2355:6:HAL_UART_IRQHandler 240 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2619:13:HAL_UART_TxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2634:13:HAL_UART_TxHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2649:13:HAL_UART_RxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2664:13:HAL_UART_RxHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2679:13:HAL_UART_ErrorCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2693:13:HAL_UART_AbortCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2708:13:HAL_UART_AbortTransmitCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2723:13:HAL_UART_AbortReceiveCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2740:13:HAL_UARTEx_RxEventCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2780:19:HAL_LIN_SendBreak 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2807:19:HAL_MultiProcessor_EnterMuteMode 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2835:19:HAL_MultiProcessor_ExitMuteMode 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2863:19:HAL_HalfDuplex_EnableTransmitter 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2898:19:HAL_HalfDuplex_EnableReceiver 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2955:23:HAL_UART_GetState 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2970:10:HAL_UART_GetError 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3015:13:UART_DMATransmitCplt 72 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3050:13:UART_DMATxHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3069:13:UART_DMAReceiveCplt 120 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3131:13:UART_DMARxHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3170:13:UART_DMAError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3212:26:UART_WaitOnFlagUntilTimeout 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3263:19:UART_Start_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3298:19:UART_Start_Receive_DMA 104 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3356:13:UART_EndTxTransfer 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3370:13:UART_EndRxTransfer 88 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3394:13:UART_DMAAbortOnError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3417:13:UART_DMATxAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3463:13:UART_DMARxAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3509:13:UART_DMATxOnlyAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3537:13:UART_DMARxOnlyAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3563:26:UART_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3603:26:UART_EndTransmit_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3628:26:UART_Receive_IT 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3731:13:UART_SetConfig 288 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo new file mode 100644 index 00000000..65c0e417 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo @@ -0,0 +1,49 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:83:19:USB_CoreInit 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:139:19:USB_SetTurnaroundTime 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:222:19:USB_EnableGlobalInt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:234:19:USB_DisableGlobalInt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:249:19:USB_SetCurrentMode 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:296:19:USB_DevInit 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:473:19:USB_FlushTxFifo 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:510:19:USB_FlushRxFifo 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:553:19:USB_SetDevSpeed 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:569:9:USB_GetDevSpeed 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:598:19:USB_ActivateEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:636:19:USB_ActivateDedicatedEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:675:19:USB_DeactivateEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:722:19:USB_DeactivateDedicatedEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:764:19:USB_EPStartXfer 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:936:19:USB_EPStopXfer 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1000:19:USB_WritePacket 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1031:7:USB_ReadPacket 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1073:19:USB_EPSetStall 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1104:19:USB_EPClearStall 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1133:19:USB_StopDevice 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1174:19:USB_SetDevAddress 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1189:19:USB_DevConnect 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1206:19:USB_DevDisconnect 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1223:10:USB_ReadInterrupts 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1239:10:USB_ReadChInterrupts 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1255:10:USB_ReadDevAllOutEpInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1271:10:USB_ReadDevAllInEpInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1289:10:USB_ReadDevOutEPInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1307:10:USB_ReadDevInEPInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1328:7:USB_ClearInterrupts 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1341:10:USB_GetMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1351:19:USB_ActivateSetup 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1373:19:USB_EP0_OutStart 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1406:26:USB_CoreReset 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1453:19:USB_HostInit 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1568:19:USB_InitFSLSPClkSel 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1598:19:USB_ResetPort 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1625:19:USB_DriveVbus 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1655:10:USB_GetHostSpeed 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1669:10:USB_GetCurrentFrame 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1700:19:USB_HC_Init 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1832:19:USB_HC_StartXfer 44 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2095:10:USB_HC_ReadInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2109:19:USB_HC_Halt 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2193:19:USB_DoPing 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2217:19:USB_StopHost 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2282:19:USB_ActivateRemoteWakeup 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2300:19:USB_DeActivateRemoteWakeup 1 diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d new file mode 100644 index 00000000..1ed2e89c --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o new file mode 100644 index 00000000..e0744966 Binary files /dev/null and b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o differ diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su new file mode 100644 index 00000000..426b6415 --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su @@ -0,0 +1,49 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:83:19:USB_CoreInit 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:139:19:USB_SetTurnaroundTime 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:222:19:USB_EnableGlobalInt 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:234:19:USB_DisableGlobalInt 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:249:19:USB_SetCurrentMode 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:296:19:USB_DevInit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:473:19:USB_FlushTxFifo 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:510:19:USB_FlushRxFifo 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:553:19:USB_SetDevSpeed 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:569:9:USB_GetDevSpeed 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:598:19:USB_ActivateEndpoint 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:636:19:USB_ActivateDedicatedEndpoint 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:675:19:USB_DeactivateEndpoint 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:722:19:USB_DeactivateDedicatedEndpoint 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:764:19:USB_EPStartXfer 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:936:19:USB_EPStopXfer 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1000:19:USB_WritePacket 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1031:7:USB_ReadPacket 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1073:19:USB_EPSetStall 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1104:19:USB_EPClearStall 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1133:19:USB_StopDevice 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1174:19:USB_SetDevAddress 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1189:19:USB_DevConnect 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1206:19:USB_DevDisconnect 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1223:10:USB_ReadInterrupts 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1239:10:USB_ReadChInterrupts 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1255:10:USB_ReadDevAllOutEpInterrupt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1271:10:USB_ReadDevAllInEpInterrupt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1289:10:USB_ReadDevOutEPInterrupt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1307:10:USB_ReadDevInEPInterrupt 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1328:7:USB_ClearInterrupts 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1341:10:USB_GetMode 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1351:19:USB_ActivateSetup 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1373:19:USB_EP0_OutStart 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1406:26:USB_CoreReset 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1453:19:USB_HostInit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1568:19:USB_InitFSLSPClkSel 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1598:19:USB_ResetPort 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1625:19:USB_DriveVbus 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1655:10:USB_GetHostSpeed 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1669:10:USB_GetCurrentFrame 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1700:19:USB_HC_Init 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1832:19:USB_HC_StartXfer 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2095:10:USB_HC_ReadInterrupt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2109:19:USB_HC_Halt 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2193:19:USB_DoPing 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2217:19:USB_StopHost 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2282:19:USB_ActivateRemoteWakeup 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2300:19:USB_DeActivateRemoteWakeup 24 static diff --git a/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk new file mode 100644 index 00000000..fa9e3fdc --- /dev/null +++ b/firmware/numpad/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk @@ -0,0 +1,87 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c + +OBJS += \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + +C_DEPS += \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d + + +# Each subdirectory must supply rules for building sources it contributes +Drivers/STM32F4xx_HAL_Driver/Src/%.o Drivers/STM32F4xx_HAL_Driver/Src/%.su Drivers/STM32F4xx_HAL_Driver/Src/%.cyclo: ../Drivers/STM32F4xx_HAL_Driver/Src/%.c Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src + +clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src: + -$(RM) ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su + +.PHONY: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src + diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk new file mode 100644 index 00000000..397659ef --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c + +OBJS += \ +./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + +C_DEPS += \ +./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d + + +# Each subdirectory must supply rules for building sources it contributes +Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.o Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.su Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.cyclo: ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.c Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Class-2f-HID-2f-Src + +clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Class-2f-HID-2f-Src: + -$(RM) ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su + +.PHONY: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Class-2f-HID-2f-Src + diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo new file mode 100644 index 00000000..546301b3 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo @@ -0,0 +1,10 @@ +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:304:16:USBD_HID_Init 3 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:351:16:USBD_HID_DeInit 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:382:16:USBD_HID_Setup 18 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:514:9:USBD_HID_SendReport 4 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:547:10:USBD_HID_GetPollingInterval 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:577:17:USBD_HID_GetFSCfgDesc 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:597:17:USBD_HID_GetHSCfgDesc 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:617:17:USBD_HID_GetOtherSpeedCfgDesc 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:638:16:USBD_HID_DataIn 1 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:655:17:USBD_HID_GetDeviceQualifierDesc 1 diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d new file mode 100644 index 00000000..dbb7e592 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d @@ -0,0 +1,85 @@ +Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o new file mode 100644 index 00000000..fd892965 Binary files /dev/null and b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o differ diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su new file mode 100644 index 00000000..fcd4edcf --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su @@ -0,0 +1,10 @@ +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:304:16:USBD_HID_Init 24 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:351:16:USBD_HID_DeInit 16 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:382:16:USBD_HID_Setup 32 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:514:9:USBD_HID_SendReport 32 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:547:10:USBD_HID_GetPollingInterval 24 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:577:17:USBD_HID_GetFSCfgDesc 24 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:597:17:USBD_HID_GetHSCfgDesc 24 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:617:17:USBD_HID_GetOtherSpeedCfgDesc 24 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:638:16:USBD_HID_DataIn 16 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:655:17:USBD_HID_GetDeviceQualifierDesc 16 static diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk new file mode 100644 index 00000000..40d355c1 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk @@ -0,0 +1,33 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c + +OBJS += \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + +C_DEPS += \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d + + +# Each subdirectory must supply rules for building sources it contributes +Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.o Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.su Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.cyclo: ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.c Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Core-2f-Src + +clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Core-2f-Src: + -$(RM) ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su + +.PHONY: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Core-2f-Src + diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo new file mode 100644 index 00000000..b10733b0 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo @@ -0,0 +1,24 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:92:20:USBD_Init 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:149:20:USBD_DeInit 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:202:20:USBD_RegisterClass 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:384:20:USBD_Start 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:400:20:USBD_Stop 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:440:20:USBD_RunTestMode 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:465:20:USBD_SetClassConfig 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:505:20:USBD_ClrClassConfig 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:546:20:USBD_LL_SetupStage 5 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:586:20:USBD_LL_DataOutStage 16 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:684:20:USBD_LL_DataInStage 15 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:777:20:USBD_LL_Reset 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:845:20:USBD_LL_SetSpeed 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:859:20:USBD_LL_Suspend 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:877:20:USBD_LL_Resume 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:893:20:USBD_LL_SOF 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:936:20:USBD_LL_IsoINIncomplete 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:962:20:USBD_LL_IsoOUTIncomplete 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:987:20:USBD_LL_DevConnected 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1001:20:USBD_LL_DevDisconnected 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1046:9:USBD_CoreFindIF 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1086:9:USBD_CoreFindEP 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1157:7:USBD_GetEpDesc 5 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1198:25:USBD_GetNextDesc 1 diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d new file mode 100644 index 00000000..f6fb1ae9 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d @@ -0,0 +1,81 @@ +Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o new file mode 100644 index 00000000..dadf3675 Binary files /dev/null and b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o differ diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su new file mode 100644 index 00000000..e5b5357a --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su @@ -0,0 +1,24 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:92:20:USBD_Init 32 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:149:20:USBD_DeInit 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:202:20:USBD_RegisterClass 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:384:20:USBD_Start 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:400:20:USBD_Stop 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:440:20:USBD_RunTestMode 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:465:20:USBD_SetClassConfig 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:505:20:USBD_ClrClassConfig 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:546:20:USBD_LL_SetupStage 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:586:20:USBD_LL_DataOutStage 32 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:684:20:USBD_LL_DataInStage 32 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:777:20:USBD_LL_Reset 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:845:20:USBD_LL_SetSpeed 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:859:20:USBD_LL_Suspend 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:877:20:USBD_LL_Resume 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:893:20:USBD_LL_SOF 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:936:20:USBD_LL_IsoINIncomplete 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:962:20:USBD_LL_IsoOUTIncomplete 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:987:20:USBD_LL_DevConnected 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1001:20:USBD_LL_DevDisconnected 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1046:9:USBD_CoreFindIF 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1086:9:USBD_CoreFindEP 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1157:7:USBD_GetEpDesc 32 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1198:25:USBD_GetNextDesc 24 static diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo new file mode 100644 index 00000000..5f2e56ac --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo @@ -0,0 +1,15 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h:425:26:SWAPBYTE 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:104:20:USBD_StdDevReq 12 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:167:20:USBD_StdItfReq 12 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:239:20:USBD_StdEPReq 41 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:428:13:USBD_GetDescriptor 26 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:682:13:USBD_SetAddress 6 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:723:27:USBD_SetConfig 9 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:821:13:USBD_GetConfig 5 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:855:13:USBD_GetStatus 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:896:13:USBD_SetFeature 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:922:13:USBD_ClrFeature 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:950:6:USBD_ParseSetupRequest 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:979:6:USBD_CtlError 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:996:6:USBD_GetString 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:1032:16:USBD_GetLen 2 diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d new file mode 100644 index 00000000..692469a4 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d @@ -0,0 +1,83 @@ +Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o new file mode 100644 index 00000000..11a34289 Binary files /dev/null and b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o differ diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su new file mode 100644 index 00000000..dd078244 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su @@ -0,0 +1,15 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h:425:26:SWAPBYTE 32 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:104:20:USBD_StdDevReq 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:167:20:USBD_StdItfReq 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:239:20:USBD_StdEPReq 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:428:13:USBD_GetDescriptor 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:682:13:USBD_SetAddress 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:723:27:USBD_SetConfig 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:821:13:USBD_GetConfig 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:855:13:USBD_GetStatus 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:896:13:USBD_SetFeature 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:922:13:USBD_ClrFeature 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:950:6:USBD_ParseSetupRequest 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:979:6:USBD_CtlError 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:996:6:USBD_GetString 32 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:1032:16:USBD_GetLen 24 static diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo new file mode 100644 index 00000000..b8d45878 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo @@ -0,0 +1,7 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:86:20:USBD_CtlSendData 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:114:20:USBD_CtlContinueSendData 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:131:20:USBD_CtlPrepareRx 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:159:20:USBD_CtlContinueRx 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:173:20:USBD_CtlSendStatus 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:190:20:USBD_CtlReceiveStatus 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:208:10:USBD_GetRxCount 1 diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d new file mode 100644 index 00000000..68758366 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d @@ -0,0 +1,81 @@ +Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o new file mode 100644 index 00000000..95ab3498 Binary files /dev/null and b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o differ diff --git a/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su new file mode 100644 index 00000000..0788a965 --- /dev/null +++ b/firmware/numpad/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su @@ -0,0 +1,7 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:86:20:USBD_CtlSendData 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:114:20:USBD_CtlContinueSendData 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:131:20:USBD_CtlPrepareRx 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:159:20:USBD_CtlContinueRx 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:173:20:USBD_CtlSendStatus 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:190:20:USBD_CtlReceiveStatus 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:208:10:USBD_GetRxCount 16 static diff --git a/firmware/numpad/Debug/USB_DEVICE/App/subdir.mk b/firmware/numpad/Debug/USB_DEVICE/App/subdir.mk new file mode 100644 index 00000000..e1ea6907 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/subdir.mk @@ -0,0 +1,30 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../USB_DEVICE/App/usb_device.c \ +../USB_DEVICE/App/usbd_desc.c + +OBJS += \ +./USB_DEVICE/App/usb_device.o \ +./USB_DEVICE/App/usbd_desc.o + +C_DEPS += \ +./USB_DEVICE/App/usb_device.d \ +./USB_DEVICE/App/usbd_desc.d + + +# Each subdirectory must supply rules for building sources it contributes +USB_DEVICE/App/%.o USB_DEVICE/App/%.su USB_DEVICE/App/%.cyclo: ../USB_DEVICE/App/%.c USB_DEVICE/App/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-USB_DEVICE-2f-App + +clean-USB_DEVICE-2f-App: + -$(RM) ./USB_DEVICE/App/usb_device.cyclo ./USB_DEVICE/App/usb_device.d ./USB_DEVICE/App/usb_device.o ./USB_DEVICE/App/usb_device.su ./USB_DEVICE/App/usbd_desc.cyclo ./USB_DEVICE/App/usbd_desc.d ./USB_DEVICE/App/usbd_desc.o ./USB_DEVICE/App/usbd_desc.su + +.PHONY: clean-USB_DEVICE-2f-App + diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usb_device.cyclo b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.cyclo new file mode 100644 index 00000000..ff36f216 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.cyclo @@ -0,0 +1 @@ +../USB_DEVICE/App/usb_device.c:63:6:MX_USB_DEVICE_Init 4 diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usb_device.d b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.d new file mode 100644 index 00000000..f8cd5595 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.d @@ -0,0 +1,90 @@ +USB_DEVICE/App/usb_device.o: ../USB_DEVICE/App/usb_device.c \ + ../USB_DEVICE/App/usb_device.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../USB_DEVICE/App/usbd_desc.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h +../USB_DEVICE/App/usb_device.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../USB_DEVICE/App/usbd_desc.h: +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usb_device.o b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.o new file mode 100644 index 00000000..61f5504a Binary files /dev/null and b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.o differ diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usb_device.su b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.su new file mode 100644 index 00000000..e29c600d --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/usb_device.su @@ -0,0 +1 @@ +../USB_DEVICE/App/usb_device.c:63:6:MX_USB_DEVICE_Init 8 static diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.cyclo b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.cyclo new file mode 100644 index 00000000..e715f1f3 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.cyclo @@ -0,0 +1,10 @@ +../USB_DEVICE/App/usbd_desc.c:258:11:USBD_FS_DeviceDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:271:11:USBD_FS_LangIDStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:284:11:USBD_FS_ProductStrDescriptor 2 +../USB_DEVICE/App/usbd_desc.c:303:11:USBD_FS_ManufacturerStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:316:11:USBD_FS_SerialStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:336:11:USBD_FS_ConfigStrDescriptor 2 +../USB_DEVICE/App/usbd_desc.c:355:11:USBD_FS_InterfaceStrDescriptor 2 +../USB_DEVICE/App/usbd_desc.c:375:11:USBD_FS_USR_BOSDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:388:13:Get_SerialNum 2 +../USB_DEVICE/App/usbd_desc.c:414:13:IntToUnicode 3 diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.d b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.d new file mode 100644 index 00000000..e610db0b --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.d @@ -0,0 +1,84 @@ +USB_DEVICE/App/usbd_desc.o: ../USB_DEVICE/App/usbd_desc.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../USB_DEVICE/App/usbd_desc.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../USB_DEVICE/App/usbd_desc.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.o b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.o new file mode 100644 index 00000000..11b6d2a3 Binary files /dev/null and b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.o differ diff --git a/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.su b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.su new file mode 100644 index 00000000..c360c904 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/App/usbd_desc.su @@ -0,0 +1,10 @@ +../USB_DEVICE/App/usbd_desc.c:258:11:USBD_FS_DeviceDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:271:11:USBD_FS_LangIDStrDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:284:11:USBD_FS_ProductStrDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:303:11:USBD_FS_ManufacturerStrDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:316:11:USBD_FS_SerialStrDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:336:11:USBD_FS_ConfigStrDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:355:11:USBD_FS_InterfaceStrDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:375:11:USBD_FS_USR_BOSDescriptor 16 static +../USB_DEVICE/App/usbd_desc.c:388:13:Get_SerialNum 24 static +../USB_DEVICE/App/usbd_desc.c:414:13:IntToUnicode 32 static diff --git a/firmware/numpad/Debug/USB_DEVICE/Target/subdir.mk b/firmware/numpad/Debug/USB_DEVICE/Target/subdir.mk new file mode 100644 index 00000000..16b6991f --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/Target/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../USB_DEVICE/Target/usbd_conf.c + +OBJS += \ +./USB_DEVICE/Target/usbd_conf.o + +C_DEPS += \ +./USB_DEVICE/Target/usbd_conf.d + + +# Each subdirectory must supply rules for building sources it contributes +USB_DEVICE/Target/%.o USB_DEVICE/Target/%.su USB_DEVICE/Target/%.cyclo: ../USB_DEVICE/Target/%.c USB_DEVICE/Target/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-USB_DEVICE-2f-Target + +clean-USB_DEVICE-2f-Target: + -$(RM) ./USB_DEVICE/Target/usbd_conf.cyclo ./USB_DEVICE/Target/usbd_conf.d ./USB_DEVICE/Target/usbd_conf.o ./USB_DEVICE/Target/usbd_conf.su + +.PHONY: clean-USB_DEVICE-2f-Target + diff --git a/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.cyclo b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.cyclo new file mode 100644 index 00000000..e780cf5d --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.cyclo @@ -0,0 +1,32 @@ +../USB_DEVICE/Target/usbd_conf.c:69:6:HAL_PCD_MspInit 3 +../USB_DEVICE/Target/usbd_conf.c:112:6:HAL_PCD_MspDeInit 2 +../USB_DEVICE/Target/usbd_conf.c:145:6:HAL_PCD_SetupStageCallback 1 +../USB_DEVICE/Target/usbd_conf.c:160:6:HAL_PCD_DataOutStageCallback 1 +../USB_DEVICE/Target/usbd_conf.c:175:6:HAL_PCD_DataInStageCallback 1 +../USB_DEVICE/Target/usbd_conf.c:189:6:HAL_PCD_SOFCallback 1 +../USB_DEVICE/Target/usbd_conf.c:203:6:HAL_PCD_ResetCallback 3 +../USB_DEVICE/Target/usbd_conf.c:236:6:HAL_PCD_SuspendCallback 2 +../USB_DEVICE/Target/usbd_conf.c:261:6:HAL_PCD_ResumeCallback 1 +../USB_DEVICE/Target/usbd_conf.c:279:6:HAL_PCD_ISOOUTIncompleteCallback 1 +../USB_DEVICE/Target/usbd_conf.c:294:6:HAL_PCD_ISOINIncompleteCallback 1 +../USB_DEVICE/Target/usbd_conf.c:308:6:HAL_PCD_ConnectCallback 1 +../USB_DEVICE/Target/usbd_conf.c:322:6:HAL_PCD_DisconnectCallback 1 +../USB_DEVICE/Target/usbd_conf.c:337:20:USBD_LL_Init 3 +../USB_DEVICE/Target/usbd_conf.c:387:20:USBD_LL_DeInit 1 +../USB_DEVICE/Target/usbd_conf.c:404:20:USBD_LL_Start 1 +../USB_DEVICE/Target/usbd_conf.c:421:20:USBD_LL_Stop 1 +../USB_DEVICE/Target/usbd_conf.c:441:20:USBD_LL_OpenEP 1 +../USB_DEVICE/Target/usbd_conf.c:459:20:USBD_LL_CloseEP 1 +../USB_DEVICE/Target/usbd_conf.c:477:20:USBD_LL_FlushEP 1 +../USB_DEVICE/Target/usbd_conf.c:495:20:USBD_LL_StallEP 1 +../USB_DEVICE/Target/usbd_conf.c:513:20:USBD_LL_ClearStallEP 1 +../USB_DEVICE/Target/usbd_conf.c:531:9:USBD_LL_IsStallEP 2 +../USB_DEVICE/Target/usbd_conf.c:551:20:USBD_LL_SetUSBAddress 1 +../USB_DEVICE/Target/usbd_conf.c:571:20:USBD_LL_Transmit 1 +../USB_DEVICE/Target/usbd_conf.c:591:20:USBD_LL_PrepareReceive 1 +../USB_DEVICE/Target/usbd_conf.c:609:10:USBD_LL_GetRxDataSize 1 +../USB_DEVICE/Target/usbd_conf.c:620:6:HAL_PCDEx_LPM_Callback 5 +../USB_DEVICE/Target/usbd_conf.c:671:7:USBD_static_malloc 1 +../USB_DEVICE/Target/usbd_conf.c:682:6:USBD_static_free 1 +../USB_DEVICE/Target/usbd_conf.c:692:6:USBD_LL_Delay 1 +../USB_DEVICE/Target/usbd_conf.c:702:20:USBD_Get_USB_Status 5 diff --git a/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.d b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.d new file mode 100644 index 00000000..5fb644c5 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.d @@ -0,0 +1,86 @@ +USB_DEVICE/Target/usbd_conf.o: ../USB_DEVICE/Target/usbd_conf.c \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: diff --git a/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.o b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.o new file mode 100644 index 00000000..177f1296 Binary files /dev/null and b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.o differ diff --git a/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.su b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.su new file mode 100644 index 00000000..4d1df5c7 --- /dev/null +++ b/firmware/numpad/Debug/USB_DEVICE/Target/usbd_conf.su @@ -0,0 +1,32 @@ +../USB_DEVICE/Target/usbd_conf.c:69:6:HAL_PCD_MspInit 136 static +../USB_DEVICE/Target/usbd_conf.c:112:6:HAL_PCD_MspDeInit 16 static +../USB_DEVICE/Target/usbd_conf.c:145:6:HAL_PCD_SetupStageCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:160:6:HAL_PCD_DataOutStageCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:175:6:HAL_PCD_DataInStageCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:189:6:HAL_PCD_SOFCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:203:6:HAL_PCD_ResetCallback 24 static +../USB_DEVICE/Target/usbd_conf.c:236:6:HAL_PCD_SuspendCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:261:6:HAL_PCD_ResumeCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:279:6:HAL_PCD_ISOOUTIncompleteCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:294:6:HAL_PCD_ISOINIncompleteCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:308:6:HAL_PCD_ConnectCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:322:6:HAL_PCD_DisconnectCallback 16 static +../USB_DEVICE/Target/usbd_conf.c:337:20:USBD_LL_Init 16 static +../USB_DEVICE/Target/usbd_conf.c:387:20:USBD_LL_DeInit 24 static +../USB_DEVICE/Target/usbd_conf.c:404:20:USBD_LL_Start 24 static +../USB_DEVICE/Target/usbd_conf.c:421:20:USBD_LL_Stop 24 static +../USB_DEVICE/Target/usbd_conf.c:441:20:USBD_LL_OpenEP 24 static +../USB_DEVICE/Target/usbd_conf.c:459:20:USBD_LL_CloseEP 24 static +../USB_DEVICE/Target/usbd_conf.c:477:20:USBD_LL_FlushEP 24 static +../USB_DEVICE/Target/usbd_conf.c:495:20:USBD_LL_StallEP 24 static +../USB_DEVICE/Target/usbd_conf.c:513:20:USBD_LL_ClearStallEP 24 static +../USB_DEVICE/Target/usbd_conf.c:531:9:USBD_LL_IsStallEP 24 static +../USB_DEVICE/Target/usbd_conf.c:551:20:USBD_LL_SetUSBAddress 24 static +../USB_DEVICE/Target/usbd_conf.c:571:20:USBD_LL_Transmit 32 static +../USB_DEVICE/Target/usbd_conf.c:591:20:USBD_LL_PrepareReceive 32 static +../USB_DEVICE/Target/usbd_conf.c:609:10:USBD_LL_GetRxDataSize 16 static +../USB_DEVICE/Target/usbd_conf.c:620:6:HAL_PCDEx_LPM_Callback 16 static +../USB_DEVICE/Target/usbd_conf.c:671:7:USBD_static_malloc 16 static +../USB_DEVICE/Target/usbd_conf.c:682:6:USBD_static_free 16 static +../USB_DEVICE/Target/usbd_conf.c:692:6:USBD_LL_Delay 16 static +../USB_DEVICE/Target/usbd_conf.c:702:20:USBD_Get_USB_Status 24 static diff --git a/firmware/modularkbd/Debug/makefile b/firmware/numpad/Debug/makefile similarity index 100% rename from firmware/modularkbd/Debug/makefile rename to firmware/numpad/Debug/makefile diff --git a/firmware/modularkbd/Debug/modularkbd.elf b/firmware/numpad/Debug/modularkbd.elf similarity index 100% rename from firmware/modularkbd/Debug/modularkbd.elf rename to firmware/numpad/Debug/modularkbd.elf diff --git a/firmware/modularkbd/Debug/modularkbd.list b/firmware/numpad/Debug/modularkbd.list similarity index 100% rename from firmware/modularkbd/Debug/modularkbd.list rename to firmware/numpad/Debug/modularkbd.list diff --git a/firmware/modularkbd/Debug/modularkbd.map b/firmware/numpad/Debug/modularkbd.map similarity index 100% rename from firmware/modularkbd/Debug/modularkbd.map rename to firmware/numpad/Debug/modularkbd.map diff --git a/firmware/modularkbd/Debug/objects.list b/firmware/numpad/Debug/objects.list similarity index 100% rename from firmware/modularkbd/Debug/objects.list rename to firmware/numpad/Debug/objects.list diff --git a/firmware/numpad/Debug/objects.mk b/firmware/numpad/Debug/objects.mk new file mode 100644 index 00000000..b471e98e --- /dev/null +++ b/firmware/numpad/Debug/objects.mk @@ -0,0 +1,9 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/firmware/numpad/Debug/sources.mk b/firmware/numpad/Debug/sources.mk new file mode 100644 index 00000000..083ab34c --- /dev/null +++ b/firmware/numpad/Debug/sources.mk @@ -0,0 +1,32 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +ELF_SRCS := +OBJ_SRCS := +S_SRCS := +C_SRCS := +S_UPPER_SRCS := +O_SRCS := +CYCLO_FILES := +SIZE_OUTPUT := +OBJDUMP_LIST := +SU_FILES := +EXECUTABLES := +OBJS := +MAP_FILES := +S_DEPS := +S_UPPER_DEPS := +C_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +Core/Src \ +Core/Startup \ +Drivers/STM32F4xx_HAL_Driver/Src \ +Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src \ +Middlewares/ST/STM32_USB_Device_Library/Core/Src \ +USB_DEVICE/App \ +USB_DEVICE/Target \ + diff --git a/firmware/numpad/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h b/firmware/numpad/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h new file mode 100644 index 00000000..0157f168 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h @@ -0,0 +1,15985 @@ +/** + ****************************************************************************** + * @file stm32f446xx.h + * @author MCD Application Team + * @brief CMSIS STM32F446xx Device Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - peripherals registers declarations and bits definition + * - Macros to access peripheral's registers hardware + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32f446xx + * @{ + */ + +#ifndef __STM32F446xx_H +#define __STM32F446xx_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M4 Processor and Core Peripherals + */ +#define __CM4_REV 0x0001U /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1U /*!< STM32F4XX provides an MPU */ +#define __NVIC_PRIO_BITS 4U /*!< STM32F4XX uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0U /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 1U /*!< FPU present */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F4XX Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ + /****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ + /****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ + DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ + DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ + DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ + DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ + DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ + DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ + ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ + CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ + CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ + TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */ + TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ + OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ + TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global interrupt */ + TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global interrupt */ + TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare global interrupt */ + DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */ + FMC_IRQn = 48, /*!< FMC global Interrupt */ + SDIO_IRQn = 49, /*!< SDIO global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */ + TIM7_IRQn = 55, /*!< TIM7 global interrupt */ + DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ + DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ + DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ + DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ + DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ + CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */ + CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */ + CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */ + CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */ + OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */ + DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ + DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ + DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ + USART6_IRQn = 71, /*!< USART6 global interrupt */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ + OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */ + OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */ + OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */ + OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */ + DCMI_IRQn = 78, /*!< DCMI global interrupt */ + FPU_IRQn = 81, /*!< FPU global interrupt */ + SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ + SAI1_IRQn = 87, /*!< SAI1 global Interrupt */ + SAI2_IRQn = 91, /*!< SAI2 global Interrupt */ + QUADSPI_IRQn = 92, /*!< QuadSPI global Interrupt */ + CEC_IRQn = 93, /*!< CEC global Interrupt */ + SPDIF_RX_IRQn = 94, /*!< SPDIF-RX global Interrupt */ + FMPI2C1_EV_IRQn = 95, /*!< FMPI2C1 Event Interrupt */ + FMPI2C1_ER_IRQn = 96 /*!< FMPI2C1 Error Interrupt */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_stm32f4xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ + __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ + __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ + __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ + __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ + __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ + __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ + __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ + __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ + __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ + __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ + __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ + __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ + __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ + __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ + __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ + __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ + __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ + __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ + __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ + __IO uint32_t CDR; /*!< ADC common regular data register for dual + AND triple modes, Address offset: ADC1 base address + 0x308 */ +} ADC_Common_TypeDef; + + +/** + * @brief Controller Area Network TxMailBox + */ + +typedef struct +{ + __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ + __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ + __IO uint32_t TDLR; /*!< CAN mailbox data low register */ + __IO uint32_t TDHR; /*!< CAN mailbox data high register */ +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ + +typedef struct +{ + __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ + __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ + __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ + __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ + +typedef struct +{ + __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ + __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ + +typedef struct +{ + __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ + __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ + __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ + __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ + __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ + __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ + __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ + __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ + uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ + CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ + uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ + __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ + __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ + uint32_t RESERVED2; /*!< Reserved, 0x208 */ + __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ + uint32_t RESERVED3; /*!< Reserved, 0x210 */ + __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ + uint32_t RESERVED4; /*!< Reserved, 0x218 */ + __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ + uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ + CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ +} CAN_TypeDef; + + +/** + * @brief Consumer Electronics Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< CEC control register, Address offset:0x00 */ + __IO uint32_t CFGR; /*!< CEC configuration register, Address offset:0x04 */ + __IO uint32_t TXDR; /*!< CEC Tx data register , Address offset:0x08 */ + __IO uint32_t RXDR; /*!< CEC Rx Data Register, Address offset:0x0C */ + __IO uint32_t ISR; /*!< CEC Interrupt and Status Register, Address offset:0x10 */ + __IO uint32_t IER; /*!< CEC interrupt enable register, Address offset:0x14 */ +} CEC_TypeDef; +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ +} CRC_TypeDef; + +/** + * @brief Digital to Analog Converter + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ + __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ + __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ + __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ + __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ + __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ + __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ + __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ + __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ + __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ + __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ + __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ + __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ + __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ +} DAC_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ +} DBGMCU_TypeDef; + +/** + * @brief DCMI + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DCMI control register 1, Address offset: 0x00 */ + __IO uint32_t SR; /*!< DCMI status register, Address offset: 0x04 */ + __IO uint32_t RISR; /*!< DCMI raw interrupt status register, Address offset: 0x08 */ + __IO uint32_t IER; /*!< DCMI interrupt enable register, Address offset: 0x0C */ + __IO uint32_t MISR; /*!< DCMI masked interrupt status register, Address offset: 0x10 */ + __IO uint32_t ICR; /*!< DCMI interrupt clear register, Address offset: 0x14 */ + __IO uint32_t ESCR; /*!< DCMI embedded synchronization code register, Address offset: 0x18 */ + __IO uint32_t ESUR; /*!< DCMI embedded synchronization unmask register, Address offset: 0x1C */ + __IO uint32_t CWSTRTR; /*!< DCMI crop window start, Address offset: 0x20 */ + __IO uint32_t CWSIZER; /*!< DCMI crop window size, Address offset: 0x24 */ + __IO uint32_t DR; /*!< DCMI data register, Address offset: 0x28 */ +} DCMI_TypeDef; + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA stream x configuration register */ + __IO uint32_t NDTR; /*!< DMA stream x number of data register */ + __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ + __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ + __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ + __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ +} DMA_Stream_TypeDef; + +typedef struct +{ + __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ + __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ + __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ + __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ +} DMA_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ + __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ + __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ + __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ + __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ + __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ + __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ + __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ + __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ + __IO uint32_t OPTCR1; /*!< FLASH option control register 1, Address offset: 0x18 */ +} FLASH_TypeDef; + +/** + * @brief Flexible Memory Controller + */ + +typedef struct +{ + __IO uint32_t BTCR[8]; /*!< NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */ +} FMC_Bank1_TypeDef; + +/** + * @brief Flexible Memory Controller Bank1E + */ + +typedef struct +{ + __IO uint32_t BWTR[7]; /*!< NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */ +} FMC_Bank1E_TypeDef; + +/** + * @brief Flexible Memory Controller Bank3 + */ + +typedef struct +{ + __IO uint32_t PCR; /*!< NAND Flash control register, Address offset: 0x80 */ + __IO uint32_t SR; /*!< NAND Flash FIFO status and interrupt register, Address offset: 0x84 */ + __IO uint32_t PMEM; /*!< NAND Flash Common memory space timing register, Address offset: 0x88 */ + __IO uint32_t PATT; /*!< NAND Flash Attribute memory space timing register, Address offset: 0x8C */ + uint32_t RESERVED; /*!< Reserved, 0x90 */ + __IO uint32_t ECCR; /*!< NAND Flash ECC result registers, Address offset: 0x94 */ +} FMC_Bank3_TypeDef; + +/** + * @brief Flexible Memory Controller Bank5_6 + */ + +typedef struct +{ + __IO uint32_t SDCR[2]; /*!< SDRAM Control registers , Address offset: 0x140-0x144 */ + __IO uint32_t SDTR[2]; /*!< SDRAM Timing registers , Address offset: 0x148-0x14C */ + __IO uint32_t SDCMR; /*!< SDRAM Command Mode register, Address offset: 0x150 */ + __IO uint32_t SDRTR; /*!< SDRAM Refresh Timer register, Address offset: 0x154 */ + __IO uint32_t SDSR; /*!< SDRAM Status register, Address offset: 0x158 */ +} FMC_Bank5_6_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ + __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ + __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ + __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ + __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ + __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ + __IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */ + __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ + __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ +} GPIO_TypeDef; + +/** + * @brief System configuration controller + */ + +typedef struct +{ + __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ + __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ + __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ + uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ + __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x24-0x28 */ + __IO uint32_t CFGR; /*!< SYSCFG Configuration register, Address offset: 0x2C */ +} SYSCFG_TypeDef; + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< I2C Own address register 1, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< I2C Own address register 2, Address offset: 0x0C */ + __IO uint32_t DR; /*!< I2C Data register, Address offset: 0x10 */ + __IO uint32_t SR1; /*!< I2C Status register 1, Address offset: 0x14 */ + __IO uint32_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ + __IO uint32_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ + __IO uint32_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ + __IO uint32_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ +} I2C_TypeDef; + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< FMPI2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< FMPI2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< FMPI2C Own address 1 register, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< FMPI2C Own address 2 register, Address offset: 0x0C */ + __IO uint32_t TIMINGR; /*!< FMPI2C Timing register, Address offset: 0x10 */ + __IO uint32_t TIMEOUTR; /*!< FMPI2C Timeout register, Address offset: 0x14 */ + __IO uint32_t ISR; /*!< FMPI2C Interrupt and status register, Address offset: 0x18 */ + __IO uint32_t ICR; /*!< FMPI2C Interrupt clear register, Address offset: 0x1C */ + __IO uint32_t PECR; /*!< FMPI2C PEC register, Address offset: 0x20 */ + __IO uint32_t RXDR; /*!< FMPI2C Receive data register, Address offset: 0x24 */ + __IO uint32_t TXDR; /*!< FMPI2C Transmit data register, Address offset: 0x28 */ +} FMPI2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ +} IWDG_TypeDef; + + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< PWR power control register, Address offset: 0x00 */ + __IO uint32_t CSR; /*!< PWR power control/status register, Address offset: 0x04 */ +} PWR_TypeDef; + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ + __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ + __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ + __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ + __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ + __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ + __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ + uint32_t RESERVED0; /*!< Reserved, 0x1C */ + __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ + __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ + __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ + __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ + __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ + uint32_t RESERVED2; /*!< Reserved, 0x3C */ + __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ + __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ + uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ + __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ + __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ + __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ + uint32_t RESERVED4; /*!< Reserved, 0x5C */ + __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ + __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ + uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ + __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ + __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ + uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ + __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ + __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ + __IO uint32_t PLLSAICFGR; /*!< RCC PLLSAI configuration register, Address offset: 0x88 */ + __IO uint32_t DCKCFGR; /*!< RCC Dedicated Clocks configuration register, Address offset: 0x8C */ + __IO uint32_t CKGATENR; /*!< RCC Clocks Gated ENable Register, Address offset: 0x90 */ + __IO uint32_t DCKCFGR2; /*!< RCC Dedicated Clocks configuration register 2, Address offset: 0x94 */ +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ + __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ + __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ + __IO uint32_t CALIBR; /*!< RTC calibration register, Address offset: 0x18 */ + __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ + __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ + __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ + __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ + __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ + __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ + __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ + __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ + __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ + __IO uint32_t TAFCR; /*!< RTC tamper and alternate function configuration register, Address offset: 0x40 */ + __IO uint32_t ALRMASSR;/*!< RTC alarm A sub second register, Address offset: 0x44 */ + __IO uint32_t ALRMBSSR;/*!< RTC alarm B sub second register, Address offset: 0x48 */ + uint32_t RESERVED7; /*!< Reserved, 0x4C */ + __IO uint32_t BKP0R; /*!< RTC backup register 1, Address offset: 0x50 */ + __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ + __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ + __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ + __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ + __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ + __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ + __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ + __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ + __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ + __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ + __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ + __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ + __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ + __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ + __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ + __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ + __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ + __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ + __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ +} RTC_TypeDef; + +/** + * @brief Serial Audio Interface + */ + +typedef struct +{ + __IO uint32_t GCR; /*!< SAI global configuration register, Address offset: 0x00 */ +} SAI_TypeDef; + +typedef struct +{ + __IO uint32_t CR1; /*!< SAI block x configuration register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< SAI block x configuration register 2, Address offset: 0x08 */ + __IO uint32_t FRCR; /*!< SAI block x frame configuration register, Address offset: 0x0C */ + __IO uint32_t SLOTR; /*!< SAI block x slot register, Address offset: 0x10 */ + __IO uint32_t IMR; /*!< SAI block x interrupt mask register, Address offset: 0x14 */ + __IO uint32_t SR; /*!< SAI block x status register, Address offset: 0x18 */ + __IO uint32_t CLRFR; /*!< SAI block x clear flag register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< SAI block x data register, Address offset: 0x20 */ +} SAI_Block_TypeDef; + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; /*!< SDIO power control register, Address offset: 0x00 */ + __IO uint32_t CLKCR; /*!< SDI clock control register, Address offset: 0x04 */ + __IO uint32_t ARG; /*!< SDIO argument register, Address offset: 0x08 */ + __IO uint32_t CMD; /*!< SDIO command register, Address offset: 0x0C */ + __IO const uint32_t RESPCMD; /*!< SDIO command response register, Address offset: 0x10 */ + __IO const uint32_t RESP1; /*!< SDIO response 1 register, Address offset: 0x14 */ + __IO const uint32_t RESP2; /*!< SDIO response 2 register, Address offset: 0x18 */ + __IO const uint32_t RESP3; /*!< SDIO response 3 register, Address offset: 0x1C */ + __IO const uint32_t RESP4; /*!< SDIO response 4 register, Address offset: 0x20 */ + __IO uint32_t DTIMER; /*!< SDIO data timer register, Address offset: 0x24 */ + __IO uint32_t DLEN; /*!< SDIO data length register, Address offset: 0x28 */ + __IO uint32_t DCTRL; /*!< SDIO data control register, Address offset: 0x2C */ + __IO const uint32_t DCOUNT; /*!< SDIO data counter register, Address offset: 0x30 */ + __IO const uint32_t STA; /*!< SDIO status register, Address offset: 0x34 */ + __IO uint32_t ICR; /*!< SDIO interrupt clear register, Address offset: 0x38 */ + __IO uint32_t MASK; /*!< SDIO mask register, Address offset: 0x3C */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ + __IO const uint32_t FIFOCNT; /*!< SDIO FIFO counter register, Address offset: 0x48 */ + uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ + __IO uint32_t FIFO; /*!< SDIO data FIFO register, Address offset: 0x80 */ +} SDIO_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ + __IO uint32_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ + __IO uint32_t SR; /*!< SPI status register, Address offset: 0x08 */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ + __IO uint32_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ + __IO uint32_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ + __IO uint32_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ + __IO uint32_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ +} SPI_TypeDef; + +/** + * @brief QUAD Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR; /*!< QUADSPI Control register, Address offset: 0x00 */ + __IO uint32_t DCR; /*!< QUADSPI Device Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< QUADSPI Status register, Address offset: 0x08 */ + __IO uint32_t FCR; /*!< QUADSPI Flag Clear register, Address offset: 0x0C */ + __IO uint32_t DLR; /*!< QUADSPI Data Length register, Address offset: 0x10 */ + __IO uint32_t CCR; /*!< QUADSPI Communication Configuration register, Address offset: 0x14 */ + __IO uint32_t AR; /*!< QUADSPI Address register, Address offset: 0x18 */ + __IO uint32_t ABR; /*!< QUADSPI Alternate Bytes register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< QUADSPI Data register, Address offset: 0x20 */ + __IO uint32_t PSMKR; /*!< QUADSPI Polling Status Mask register, Address offset: 0x24 */ + __IO uint32_t PSMAR; /*!< QUADSPI Polling Status Match register, Address offset: 0x28 */ + __IO uint32_t PIR; /*!< QUADSPI Polling Interval register, Address offset: 0x2C */ + __IO uint32_t LPTR; /*!< QUADSPI Low Power Timeout register, Address offset: 0x30 */ +} QUADSPI_TypeDef; + +/** + * @brief SPDIFRX Interface + */ + +typedef struct +{ + __IO uint32_t CR; /*!< Control register, Address offset: 0x00 */ + __IO uint16_t IMR; /*!< Interrupt mask register, Address offset: 0x04 */ + uint16_t RESERVED0; /*!< Reserved, 0x06 */ + __IO uint32_t SR; /*!< Status register, Address offset: 0x08 */ + __IO uint16_t IFCR; /*!< Interrupt Flag Clear register, Address offset: 0x0C */ + uint16_t RESERVED1; /*!< Reserved, 0x0E */ + __IO uint32_t DR; /*!< Data input register, Address offset: 0x10 */ + __IO uint32_t CSR; /*!< Channel Status register, Address offset: 0x14 */ + __IO uint32_t DIR; /*!< Debug Information register, Address offset: 0x18 */ + uint16_t RESERVED2; /*!< Reserved, 0x1A */ +} SPDIFRX_TypeDef; + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ + __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ +} TIM_TypeDef; + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< USART Status register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< USART Data register, Address offset: 0x04 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ + __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ +} USART_TypeDef; + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; +/** + * @brief USB_OTG_Core_Registers + */ +typedef struct +{ + __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register 000h */ + __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register 004h */ + __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register 008h */ + __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register 00Ch */ + __IO uint32_t GRSTCTL; /*!< Core Reset Register 010h */ + __IO uint32_t GINTSTS; /*!< Core Interrupt Register 014h */ + __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register 018h */ + __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register 01Ch */ + __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register 020h */ + __IO uint32_t GRXFSIZ; /*!< Receive FIFO Size Register 024h */ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register 028h */ + __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg 02Ch */ + uint32_t Reserved30[2]; /*!< Reserved 030h */ + __IO uint32_t GCCFG; /*!< General Purpose IO Register 038h */ + __IO uint32_t CID; /*!< User ID Register 03Ch */ + uint32_t Reserved5[3]; /*!< Reserved 040h-048h */ + __IO uint32_t GHWCFG3; /*!< User HW config3 04Ch */ + uint32_t Reserved6; /*!< Reserved 050h */ + __IO uint32_t GLPMCFG; /*!< LPM Register 054h */ + uint32_t Reserved; /*!< Reserved 058h */ + __IO uint32_t GDFIFOCFG; /*!< DFIFO Software Config Register 05Ch */ + uint32_t Reserved43[40]; /*!< Reserved 058h-0FFh */ + __IO uint32_t HPTXFSIZ; /*!< Host Periodic Tx FIFO Size Reg 100h */ + __IO uint32_t DIEPTXF[0x0F]; /*!< dev Periodic Transmit FIFO */ +} USB_OTG_GlobalTypeDef; + +/** + * @brief USB_OTG_device_Registers + */ +typedef struct +{ + __IO uint32_t DCFG; /*!< dev Configuration Register 800h */ + __IO uint32_t DCTL; /*!< dev Control Register 804h */ + __IO uint32_t DSTS; /*!< dev Status Register (RO) 808h */ + uint32_t Reserved0C; /*!< Reserved 80Ch */ + __IO uint32_t DIEPMSK; /*!< dev IN Endpoint Mask 810h */ + __IO uint32_t DOEPMSK; /*!< dev OUT Endpoint Mask 814h */ + __IO uint32_t DAINT; /*!< dev All Endpoints Itr Reg 818h */ + __IO uint32_t DAINTMSK; /*!< dev All Endpoints Itr Mask 81Ch */ + uint32_t Reserved20; /*!< Reserved 820h */ + uint32_t Reserved9; /*!< Reserved 824h */ + __IO uint32_t DVBUSDIS; /*!< dev VBUS discharge Register 828h */ + __IO uint32_t DVBUSPULSE; /*!< dev VBUS Pulse Register 82Ch */ + __IO uint32_t DTHRCTL; /*!< dev threshold 830h */ + __IO uint32_t DIEPEMPMSK; /*!< dev empty msk 834h */ + __IO uint32_t DEACHINT; /*!< dedicated EP interrupt 838h */ + __IO uint32_t DEACHMSK; /*!< dedicated EP msk 83Ch */ + uint32_t Reserved40; /*!< dedicated EP mask 840h */ + __IO uint32_t DINEP1MSK; /*!< dedicated EP mask 844h */ + uint32_t Reserved44[15]; /*!< Reserved 844-87Ch */ + __IO uint32_t DOUTEP1MSK; /*!< dedicated EP msk 884h */ +} USB_OTG_DeviceTypeDef; + +/** + * @brief USB_OTG_IN_Endpoint-Specific_Register + */ +typedef struct +{ + __IO uint32_t DIEPCTL; /*!< dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved 900h + (ep_num * 20h) + 04h */ + __IO uint32_t DIEPINT; /*!< dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved 900h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DIEPTSIZ; /*!< IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h */ + __IO uint32_t DIEPDMA; /*!< IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h */ + __IO uint32_t DTXFSTS; /*!< IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h */ + uint32_t Reserved18; /*!< Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch */ +} USB_OTG_INEndpointTypeDef; + +/** + * @brief USB_OTG_OUT_Endpoint-Specific_Registers + */ +typedef struct +{ + __IO uint32_t DOEPCTL; /*!< dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved B00h + (ep_num * 20h) + 04h */ + __IO uint32_t DOEPINT; /*!< dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved B00h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DOEPTSIZ; /*!< dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h */ + __IO uint32_t DOEPDMA; /*!< dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h */ + uint32_t Reserved18[2]; /*!< Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch */ +} USB_OTG_OUTEndpointTypeDef; + +/** + * @brief USB_OTG_Host_Mode_Register_Structures + */ +typedef struct +{ + __IO uint32_t HCFG; /*!< Host Configuration Register 400h */ + __IO uint32_t HFIR; /*!< Host Frame Interval Register 404h */ + __IO uint32_t HFNUM; /*!< Host Frame Nbr/Frame Remaining 408h */ + uint32_t Reserved40C; /*!< Reserved 40Ch */ + __IO uint32_t HPTXSTS; /*!< Host Periodic Tx FIFO/ Queue Status 410h */ + __IO uint32_t HAINT; /*!< Host All Channels Interrupt Register 414h */ + __IO uint32_t HAINTMSK; /*!< Host All Channels Interrupt Mask 418h */ +} USB_OTG_HostTypeDef; + +/** + * @brief USB_OTG_Host_Channel_Specific_Registers + */ +typedef struct +{ + __IO uint32_t HCCHAR; /*!< Host Channel Characteristics Register 500h */ + __IO uint32_t HCSPLT; /*!< Host Channel Split Control Register 504h */ + __IO uint32_t HCINT; /*!< Host Channel Interrupt Register 508h */ + __IO uint32_t HCINTMSK; /*!< Host Channel Interrupt Mask Register 50Ch */ + __IO uint32_t HCTSIZ; /*!< Host Channel Transfer Size Register 510h */ + __IO uint32_t HCDMA; /*!< Host Channel DMA Address Register 514h */ + uint32_t Reserved[2]; /*!< Reserved */ +} USB_OTG_HostChannelTypeDef; + +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ +#define FLASH_BASE 0x08000000UL /*!< FLASH(up to 1 MB) base address in the alias region */ +#define SRAM1_BASE 0x20000000UL /*!< SRAM1(112 KB) base address in the alias region */ +#define SRAM2_BASE 0x2001C000UL /*!< SRAM2(16 KB) base address in the alias region */ +#define PERIPH_BASE 0x40000000UL /*!< Peripheral base address in the alias region */ +#define BKPSRAM_BASE 0x40024000UL /*!< Backup SRAM(4 KB) base address in the alias region */ +#define FMC_R_BASE 0xA0000000UL /*!< FMC registers base address */ +#define QSPI_R_BASE 0xA0001000UL /*!< QuadSPI registers base address */ +#define SRAM1_BB_BASE 0x22000000UL /*!< SRAM1(112 KB) base address in the bit-band region */ +#define SRAM2_BB_BASE 0x22380000UL /*!< SRAM2(16 KB) base address in the bit-band region */ +#define PERIPH_BB_BASE 0x42000000UL /*!< Peripheral base address in the bit-band region */ +#define BKPSRAM_BB_BASE 0x42480000UL /*!< Backup SRAM(4 KB) base address in the bit-band region */ +#define FLASH_END 0x0807FFFFUL /*!< FLASH end address */ +#define FLASH_OTP_BASE 0x1FFF7800UL /*!< Base address of : (up to 528 Bytes) embedded FLASH OTP Area */ +#define FLASH_OTP_END 0x1FFF7A0FUL /*!< End address of : (up to 528 Bytes) embedded FLASH OTP Area */ + +/* Legacy defines */ +#define SRAM_BASE SRAM1_BASE +#define SRAM_BB_BASE SRAM1_BB_BASE + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000UL) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000UL) + +/*!< APB1 peripherals */ +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000UL) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400UL) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800UL) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00UL) +#define TIM6_BASE (APB1PERIPH_BASE + 0x1000UL) +#define TIM7_BASE (APB1PERIPH_BASE + 0x1400UL) +#define TIM12_BASE (APB1PERIPH_BASE + 0x1800UL) +#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00UL) +#define TIM14_BASE (APB1PERIPH_BASE + 0x2000UL) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800UL) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00UL) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000UL) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800UL) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00UL) +#define SPDIFRX_BASE (APB1PERIPH_BASE + 0x4000UL) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400UL) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800UL) +#define UART4_BASE (APB1PERIPH_BASE + 0x4C00UL) +#define UART5_BASE (APB1PERIPH_BASE + 0x5000UL) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400UL) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800UL) +#define I2C3_BASE (APB1PERIPH_BASE + 0x5C00UL) +#define FMPI2C1_BASE (APB1PERIPH_BASE + 0x6000UL) +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400UL) +#define CAN2_BASE (APB1PERIPH_BASE + 0x6800UL) +#define CEC_BASE (APB1PERIPH_BASE + 0x6C00UL) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000UL) +#define DAC_BASE (APB1PERIPH_BASE + 0x7400UL) + +/*!< APB2 peripherals */ +#define TIM1_BASE (APB2PERIPH_BASE + 0x0000UL) +#define TIM8_BASE (APB2PERIPH_BASE + 0x0400UL) +#define USART1_BASE (APB2PERIPH_BASE + 0x1000UL) +#define USART6_BASE (APB2PERIPH_BASE + 0x1400UL) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2000UL) +#define ADC2_BASE (APB2PERIPH_BASE + 0x2100UL) +#define ADC3_BASE (APB2PERIPH_BASE + 0x2200UL) +#define ADC123_COMMON_BASE (APB2PERIPH_BASE + 0x2300UL) +/* Legacy define */ +#define ADC_BASE ADC123_COMMON_BASE +#define SDIO_BASE (APB2PERIPH_BASE + 0x2C00UL) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000UL) +#define SPI4_BASE (APB2PERIPH_BASE + 0x3400UL) +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800UL) +#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00UL) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4000UL) +#define TIM10_BASE (APB2PERIPH_BASE + 0x4400UL) +#define TIM11_BASE (APB2PERIPH_BASE + 0x4800UL) +#define SAI1_BASE (APB2PERIPH_BASE + 0x5800UL) +#define SAI1_Block_A_BASE (SAI1_BASE + 0x004UL) +#define SAI1_Block_B_BASE (SAI1_BASE + 0x024UL) +#define SAI2_BASE (APB2PERIPH_BASE + 0x5C00UL) +#define SAI2_Block_A_BASE (SAI2_BASE + 0x004UL) +#define SAI2_Block_B_BASE (SAI2_BASE + 0x024UL) + +/*!< AHB1 peripherals */ +#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000UL) +#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400UL) +#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800UL) +#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00UL) +#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000UL) +#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400UL) +#define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800UL) +#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00UL) +#define CRC_BASE (AHB1PERIPH_BASE + 0x3000UL) +#define RCC_BASE (AHB1PERIPH_BASE + 0x3800UL) +#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00UL) +#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000UL) +#define DMA1_Stream0_BASE (DMA1_BASE + 0x010UL) +#define DMA1_Stream1_BASE (DMA1_BASE + 0x028UL) +#define DMA1_Stream2_BASE (DMA1_BASE + 0x040UL) +#define DMA1_Stream3_BASE (DMA1_BASE + 0x058UL) +#define DMA1_Stream4_BASE (DMA1_BASE + 0x070UL) +#define DMA1_Stream5_BASE (DMA1_BASE + 0x088UL) +#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0UL) +#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8UL) +#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400UL) +#define DMA2_Stream0_BASE (DMA2_BASE + 0x010UL) +#define DMA2_Stream1_BASE (DMA2_BASE + 0x028UL) +#define DMA2_Stream2_BASE (DMA2_BASE + 0x040UL) +#define DMA2_Stream3_BASE (DMA2_BASE + 0x058UL) +#define DMA2_Stream4_BASE (DMA2_BASE + 0x070UL) +#define DMA2_Stream5_BASE (DMA2_BASE + 0x088UL) +#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0UL) +#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8UL) + +/*!< AHB2 peripherals */ +#define DCMI_BASE (AHB2PERIPH_BASE + 0x50000UL) + +/*!< FMC Bankx registers base address */ +#define FMC_Bank1_R_BASE (FMC_R_BASE + 0x0000UL) +#define FMC_Bank1E_R_BASE (FMC_R_BASE + 0x0104UL) +#define FMC_Bank3_R_BASE (FMC_R_BASE + 0x0080UL) +#define FMC_Bank5_6_R_BASE (FMC_R_BASE + 0x0140UL) + + +/*!< Debug MCU registers base address */ +#define DBGMCU_BASE 0xE0042000UL +/*!< USB registers base address */ +#define USB_OTG_HS_PERIPH_BASE 0x40040000UL +#define USB_OTG_FS_PERIPH_BASE 0x50000000UL + +#define USB_OTG_GLOBAL_BASE 0x000UL +#define USB_OTG_DEVICE_BASE 0x800UL +#define USB_OTG_IN_ENDPOINT_BASE 0x900UL +#define USB_OTG_OUT_ENDPOINT_BASE 0xB00UL +#define USB_OTG_EP_REG_SIZE 0x20UL +#define USB_OTG_HOST_BASE 0x400UL +#define USB_OTG_HOST_PORT_BASE 0x440UL +#define USB_OTG_HOST_CHANNEL_BASE 0x500UL +#define USB_OTG_HOST_CHANNEL_SIZE 0x20UL +#define USB_OTG_PCGCCTL_BASE 0xE00UL +#define USB_OTG_FIFO_BASE 0x1000UL +#define USB_OTG_FIFO_SIZE 0x1000UL + +#define UID_BASE 0x1FFF7A10UL /*!< Unique device ID register base address */ +#define FLASHSIZE_BASE 0x1FFF7A22UL /*!< FLASH Size register base address */ +#define PACKAGE_BASE 0x1FFF7BF0UL /*!< Package size register base address */ +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define TIM6 ((TIM_TypeDef *) TIM6_BASE) +#define TIM7 ((TIM_TypeDef *) TIM7_BASE) +#define TIM12 ((TIM_TypeDef *) TIM12_BASE) +#define TIM13 ((TIM_TypeDef *) TIM13_BASE) +#define TIM14 ((TIM_TypeDef *) TIM14_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define SPDIFRX ((SPDIFRX_TypeDef *) SPDIFRX_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define UART4 ((USART_TypeDef *) UART4_BASE) +#define UART5 ((USART_TypeDef *) UART5_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define I2C3 ((I2C_TypeDef *) I2C3_BASE) +#define FMPI2C1 ((FMPI2C_TypeDef *) FMPI2C1_BASE) +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define CAN2 ((CAN_TypeDef *) CAN2_BASE) +#define CEC ((CEC_TypeDef *) CEC_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define DAC1 ((DAC_TypeDef *) DAC_BASE) +#define DAC ((DAC_TypeDef *) DAC_BASE) /* Kept for legacy purpose */ +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define TIM8 ((TIM_TypeDef *) TIM8_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define USART6 ((USART_TypeDef *) USART6_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define ADC3 ((ADC_TypeDef *) ADC3_BASE) +#define ADC123_COMMON ((ADC_Common_TypeDef *) ADC123_COMMON_BASE) +/* Legacy define */ +#define ADC ADC123_COMMON +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define SPI4 ((SPI_TypeDef *) SPI4_BASE) +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define SAI1 ((SAI_TypeDef *) SAI1_BASE) +#define SAI1_Block_A ((SAI_Block_TypeDef *)SAI1_Block_A_BASE) +#define SAI1_Block_B ((SAI_Block_TypeDef *)SAI1_Block_B_BASE) +#define SAI2 ((SAI_TypeDef *) SAI2_BASE) +#define SAI2_Block_A ((SAI_Block_TypeDef *)SAI2_Block_A_BASE) +#define SAI2_Block_B ((SAI_Block_TypeDef *)SAI2_Block_B_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) +#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) +#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) +#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) +#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) +#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) +#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) +#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) +#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) +#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) +#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) +#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) +#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) +#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) +#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) +#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) +#define DCMI ((DCMI_TypeDef *) DCMI_BASE) +#define FMC_Bank1 ((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) +#define FMC_Bank1E ((FMC_Bank1E_TypeDef *) FMC_Bank1E_R_BASE) +#define FMC_Bank3 ((FMC_Bank3_TypeDef *) FMC_Bank3_R_BASE) +#define FMC_Bank5_6 ((FMC_Bank5_6_TypeDef *) FMC_Bank5_6_R_BASE) +#define QUADSPI ((QUADSPI_TypeDef *) QSPI_R_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) +#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) +#define USB_OTG_HS ((USB_OTG_GlobalTypeDef *) USB_OTG_HS_PERIPH_BASE) + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + +/** @addtogroup Hardware_Constant_Definition + * @{ + */ +#define LSI_STARTUP_TIME 40U /*!< LSI Maximum startup time in us */ +/** + * @} + */ + +/** @addtogroup Peripheral_Registers_Bits_Definition +* @{ +*/ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ +/* + * @brief Specific device feature definitions (not present on all devices in the STM32F4 series) + */ +#define ADC_MULTIMODE_SUPPORT /*!> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + +#ifndef __SCB_DCACHE_LINE_SIZE +#define __SCB_DCACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#endif + +#ifndef __SCB_ICACHE_LINE_SIZE +#define __SCB_ICACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#endif + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ + + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief I-Cache Invalidate by address + \details Invalidates I-Cache for the given address. + I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + I-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] isize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (volatile void *addr, int32_t isize) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if ( isize > 0 ) { + int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->ICIMVAU = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_ICACHE_LINE_SIZE; + op_size -= __SCB_ICACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address. + D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (volatile void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (volatile void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (volatile void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + +/*@} end of CMSIS_Core_CacheFunctions */ + +#endif /* ARM_CACHEL1_ARMV7_H */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_armcc.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_armcc.h new file mode 100644 index 00000000..a955d471 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_armcc.h @@ -0,0 +1,888 @@ +/**************************************************************************//** + * @file cmsis_armcc.h + * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file + * @version V5.3.2 + * @date 27. May 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#ifndef __CMSIS_ARMCC_H +#define __CMSIS_ARMCC_H + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677) + #error "Please use Arm Compiler Toolchain V4.0.677 or later!" +#endif + +/* CMSIS compiler control architecture macros */ +#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ + (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) + #define __ARM_ARCH_6M__ 1 +#endif + +#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) + #define __ARM_ARCH_7M__ 1 +#endif + +#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) + #define __ARM_ARCH_7EM__ 1 +#endif + + /* __ARM_ARCH_8M_BASE__ not applicable */ + /* __ARM_ARCH_8M_MAIN__ not applicable */ + /* __ARM_ARCH_8_1M_MAIN__ not applicable */ + +/* CMSIS compiler control DSP macros */ +#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + #define __ARM_FEATURE_DSP 1 +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE static __forceinline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __declspec(noreturn) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed)) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT __packed struct +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION __packed union +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __memory_changed() +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ + +#ifndef __PROGRAM_START +#define __PROGRAM_START __main +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) +#endif + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + #define __RBIT __rbit +#else +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ + return result; +} +#endif + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) +#else + #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) +#else + #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) +#else + #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXB(value, ptr) __strex(value, ptr) +#else + #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXH(value, ptr) __strex(value, ptr) +#else + #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXW(value, ptr) __strex(value, ptr) +#else + #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __clrex + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); */ + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; + __ISB(); +} + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xFFU); +} + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + register uint32_t __regBasePriMax __ASM("basepri_max"); + __regBasePriMax = (basePri & 0xFFU); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1U); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32U) ) >> 32U)) + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCC_H */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_armclang.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_armclang.h new file mode 100644 index 00000000..69114177 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_armclang.h @@ -0,0 +1,1503 @@ +/**************************************************************************//** + * @file cmsis_armclang.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V5.4.3 + * @date 27. May 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ + +#ifndef __PROGRAM_START +#define __PROGRAM_START __main +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __builtin_arm_nop + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __builtin_arm_wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __builtin_arm_wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __builtin_arm_sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __builtin_arm_isb(0xF) + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __builtin_arm_dmb(0xF) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __builtin_bswap32(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __ROR(__REV(value), 16) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) (int16_t)__builtin_bswap16(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +{ + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __builtin_arm_ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __builtin_arm_usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) + +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} +#endif + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} +#endif + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +#define __SADD8 __builtin_arm_sadd8 +#define __QADD8 __builtin_arm_qadd8 +#define __SHADD8 __builtin_arm_shadd8 +#define __UADD8 __builtin_arm_uadd8 +#define __UQADD8 __builtin_arm_uqadd8 +#define __UHADD8 __builtin_arm_uhadd8 +#define __SSUB8 __builtin_arm_ssub8 +#define __QSUB8 __builtin_arm_qsub8 +#define __SHSUB8 __builtin_arm_shsub8 +#define __USUB8 __builtin_arm_usub8 +#define __UQSUB8 __builtin_arm_uqsub8 +#define __UHSUB8 __builtin_arm_uhsub8 +#define __SADD16 __builtin_arm_sadd16 +#define __QADD16 __builtin_arm_qadd16 +#define __SHADD16 __builtin_arm_shadd16 +#define __UADD16 __builtin_arm_uadd16 +#define __UQADD16 __builtin_arm_uqadd16 +#define __UHADD16 __builtin_arm_uhadd16 +#define __SSUB16 __builtin_arm_ssub16 +#define __QSUB16 __builtin_arm_qsub16 +#define __SHSUB16 __builtin_arm_shsub16 +#define __USUB16 __builtin_arm_usub16 +#define __UQSUB16 __builtin_arm_uqsub16 +#define __UHSUB16 __builtin_arm_uhsub16 +#define __SASX __builtin_arm_sasx +#define __QASX __builtin_arm_qasx +#define __SHASX __builtin_arm_shasx +#define __UASX __builtin_arm_uasx +#define __UQASX __builtin_arm_uqasx +#define __UHASX __builtin_arm_uhasx +#define __SSAX __builtin_arm_ssax +#define __QSAX __builtin_arm_qsax +#define __SHSAX __builtin_arm_shsax +#define __USAX __builtin_arm_usax +#define __UQSAX __builtin_arm_uqsax +#define __UHSAX __builtin_arm_uhsax +#define __USAD8 __builtin_arm_usad8 +#define __USADA8 __builtin_arm_usada8 +#define __SSAT16 __builtin_arm_ssat16 +#define __USAT16 __builtin_arm_usat16 +#define __UXTB16 __builtin_arm_uxtb16 +#define __UXTAB16 __builtin_arm_uxtab16 +#define __SXTB16 __builtin_arm_sxtb16 +#define __SXTAB16 __builtin_arm_sxtab16 +#define __SMUAD __builtin_arm_smuad +#define __SMUADX __builtin_arm_smuadx +#define __SMLAD __builtin_arm_smlad +#define __SMLADX __builtin_arm_smladx +#define __SMLALD __builtin_arm_smlald +#define __SMLALDX __builtin_arm_smlaldx +#define __SMUSD __builtin_arm_smusd +#define __SMUSDX __builtin_arm_smusdx +#define __SMLSD __builtin_arm_smlsd +#define __SMLSDX __builtin_arm_smlsdx +#define __SMLSLD __builtin_arm_smlsld +#define __SMLSLDX __builtin_arm_smlsldx +#define __SEL __builtin_arm_sel +#define __QADD __builtin_arm_qadd +#define __QSUB __builtin_arm_qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_armclang_ltm.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_armclang_ltm.h new file mode 100644 index 00000000..1e255d59 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_armclang_ltm.h @@ -0,0 +1,1928 @@ +/**************************************************************************//** + * @file cmsis_armclang_ltm.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V1.5.3 + * @date 27. May 2021 + ******************************************************************************/ +/* + * Copyright (c) 2018-2021 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. + */ + +/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ + +#ifndef __PROGRAM_START +#define __PROGRAM_START __main +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __builtin_arm_nop + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __builtin_arm_wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __builtin_arm_wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __builtin_arm_sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __builtin_arm_isb(0xF) + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __builtin_arm_dmb(0xF) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __builtin_bswap32(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __ROR(__REV(value), 16) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) (int16_t)__builtin_bswap16(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +{ + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __builtin_arm_ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __builtin_arm_usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} +#endif + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} +#endif + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_compiler.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_compiler.h new file mode 100644 index 00000000..adbf296f --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_compiler.h @@ -0,0 +1,283 @@ +/**************************************************************************//** + * @file cmsis_compiler.h + * @brief CMSIS compiler generic header file + * @version V5.1.0 + * @date 09. October 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 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. + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler 4/5 + */ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + + +/* + * Arm Compiler 6.6 LTM (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) + #include "cmsis_armclang_ltm.h" + + /* + * Arm Compiler above 6.10.1 (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) + #include "cmsis_armclang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #include + + +/* + * TI Arm Compiler + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #define __RESTRICT __restrict + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __packed__ T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + @packed struct T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_gcc.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_gcc.h new file mode 100644 index 00000000..67bda4ef --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_gcc.h @@ -0,0 +1,2211 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @version V5.4.1 + * @date 27. May 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ + +#ifndef __PROGRAM_START + +/** + \brief Initializes data and bss sections + \details This default implementations initialized all data and additional bss + sections relying on .copy.table and .zero.table specified properly + in the used linker script. + + */ +__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) +{ + extern void _start(void) __NO_RETURN; + + typedef struct { + uint32_t const* src; + uint32_t* dest; + uint32_t wlen; + } __copy_table_t; + + typedef struct { + uint32_t* dest; + uint32_t wlen; + } __zero_table_t; + + extern const __copy_table_t __copy_table_start__; + extern const __copy_table_t __copy_table_end__; + extern const __zero_table_t __zero_table_start__; + extern const __zero_table_t __zero_table_end__; + + for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + pTable->dest[i] = pTable->src[i]; + } + } + + for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + pTable->dest[i] = 0u; + } + } + + _start(); +} + +#define __PROGRAM_START __cmsis_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __StackTop +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __StackLimit +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL __StackSeal +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi":::"memory") + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __ASM volatile ("wfe":::"memory") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__STATIC_FORCEINLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__STATIC_FORCEINLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (int16_t)__builtin_bswap16(value); +#else + int16_t result; + + __ASM ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return result; +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +{ + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1, ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1, ARG2) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); +} + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_get_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + return __builtin_arm_get_fpscr(); +#else + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#endif +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_set_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + __builtin_arm_set_fpscr(fpscr); +#else + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); +#endif +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1, ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + +#define __USAT16(ARG1, ARG2) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) { + __ASM volatile ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); + } else { + result = __SXTB16(__ROR(op1, rotate)) ; + } + return result; +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16_RORn(uint32_t op1, uint32_t op2, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) { + __ASM volatile ("sxtab16 %0, %1, %2, ROR %3" : "=r" (result) : "r" (op1) , "r" (op2) , "i" (rotate)); + } else { + result = __SXTAB16(op1, __ROR(op2, rotate)); + } + return result; +} + + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +#define __PKHBT(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_H */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_iccarm.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_iccarm.h new file mode 100644 index 00000000..65b824b0 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_iccarm.h @@ -0,0 +1,1002 @@ +/**************************************************************************//** + * @file cmsis_iccarm.h + * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file + * @version V5.3.0 + * @date 14. April 2021 + ******************************************************************************/ + +//------------------------------------------------------------------------------ +// +// Copyright (c) 2017-2021 IAR Systems +// Copyright (c) 2017-2021 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 +// http://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. +// +//------------------------------------------------------------------------------ + + +#ifndef __CMSIS_ICCARM_H__ +#define __CMSIS_ICCARM_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ +/* Macros already defined */ +#else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ +#endif + +/* Alternativ core deduction for older ICCARM's */ +#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #else + #error "Unknown target." + #endif +#endif + + + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #if __ICCARM_V8 + #define __RESTRICT __restrict + #else + /* Needs IAR language extensions */ + #define __RESTRICT restrict + #endif +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#undef __WEAK /* undo the definition from DLib_Defaults.h */ +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + +#ifndef __PROGRAM_START +#define __PROGRAM_START __iar_program_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP CSTACK$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT CSTACK$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __vector_table +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE @".intvec" +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL STACKSEAL$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) + +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __arm_wsr("CONTROL", control); + __iar_builtin_ISB(); +} + + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) + #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __arm_wsr("CONTROL_NS", control); + __iar_builtin_ISB(); +} + + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) + #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) + #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM volatile("RRX %0, %1" : "=r"(result) : "r" (value)); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) + { + __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + __iar_builtin_ISB(); + } + + __IAR_FT uint32_t __TZ_get_PSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } +#endif + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM volatile ("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM volatile ("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM volatile ("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +#endif /* __CMSIS_ICCARM_H__ */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/cmsis_version.h b/firmware/numpad/Drivers/CMSIS/Include/cmsis_version.h new file mode 100644 index 00000000..8b4765f1 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/cmsis_version.h @@ -0,0 +1,39 @@ +/**************************************************************************//** + * @file cmsis_version.h + * @brief CMSIS Core(M) Version definitions + * @version V5.0.5 + * @date 02. February 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2022 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 6U) /*!< [15:0] CMSIS Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ +#endif diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_armv81mml.h b/firmware/numpad/Drivers/CMSIS/Include/core_armv81mml.h new file mode 100644 index 00000000..94128a1a --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_armv81mml.h @@ -0,0 +1,4228 @@ +/**************************************************************************//** + * @file core_armv81mml.h + * @brief CMSIS Armv8.1-M Mainline Core Peripheral Access Layer Header File + * @version V1.4.2 + * @date 13. October 2021 + ******************************************************************************/ +/* + * Copyright (c) 2018-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_ARMV81MML_H_GENERIC +#define __CORE_ARMV81MML_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMV81MML + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS ARMV81MML definitions */ +#define __ARMv81MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv81MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv81MML_CMSIS_VERSION ((__ARMv81MML_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv81MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (81U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV81MML_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV81MML_H_DEPENDANT +#define __CORE_ARMV81MML_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv81MML_REV + #define __ARMv81MML_REV 0x0000U + #warning "__ARMv81MML_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 2U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 31 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv81MML */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED4[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/* SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) ITM Device Type Register */ + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFmt_Pos 0U /*!< TPI FFCR: EnFmt Position */ +#define TPI_FFCR_EnFmt_Msk (0x3UL << /*TPI_FFCR_EnFmt_Pos*/) /*!< TPI FFCR: EnFmt Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) PMU Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) PMU Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) PMU Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) PMU Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) PMU Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) PMU Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) PMU Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) PMU Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) PMU Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) PMU Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) PMU Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) PMU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) PMU Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) PMU Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) PMU Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) PMU Device Type Register */ + __IOM uint32_t PIDR4; /*!< Offset: 0xFD0 (R/W) PMU Peripheral Identification Register 4 */ + uint32_t RESERVED13[3]; + __IOM uint32_t PIDR0; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 0 */ + __IOM uint32_t PIDR1; /*!< Offset: 0xFE4 (R/W) PMU Peripheral Identification Register 1 */ + __IOM uint32_t PIDR2; /*!< Offset: 0xFE8 (R/W) PMU Peripheral Identification Register 2 */ + __IOM uint32_t PIDR3; /*!< Offset: 0xFEC (R/W) PMU Peripheral Identification Register 3 */ + __IOM uint32_t CIDR0; /*!< Offset: 0xFF0 (R/W) PMU Component Identification Register 0 */ + __IOM uint32_t CIDR1; /*!< Offset: 0xFF4 (R/W) PMU Component Identification Register 1 */ + __IOM uint32_t CIDR2; /*!< Offset: 0xFF8 (R/W) PMU Component Identification Register 2 */ + __IOM uint32_t CIDR3; /*!< Offset: 0xFFC (R/W) PMU Component Identification Register 3 */ +} PMU_Type; + +/** \brief PMU Event Counter Registers (0-30) Definitions */ + +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ + +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ + +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ + +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ + +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ + +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ + +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ + +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ + +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ + +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ + +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ + +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + +/*@} end of group CMSIS_PMU */ +#endif + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: FPRound bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: FPRound bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: FPSqrt bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: FPSqrt bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: FPDivide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: FPDP bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: FPDP bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: FPSP bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: FPSP bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMDReg bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMDReg bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: FMAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: FMAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FPHP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FPHP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: FPDNaN bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: FPDNaN bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FPFtZ bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FPFtZ bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_FPD_Pos 23U /*!< \deprecated CoreDebug DHCSR: S_FPD Position */ +#define CoreDebug_DHCSR_S_FPD_Msk (1UL << CoreDebug_DHCSR_S_FPD_Pos) /*!< \deprecated CoreDebug DHCSR: S_FPD Mask */ + +#define CoreDebug_DHCSR_S_SUIDE_Pos 22U /*!< \deprecated CoreDebug DHCSR: S_SUIDE Position */ +#define CoreDebug_DHCSR_S_SUIDE_Msk (1UL << CoreDebug_DHCSR_S_SUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SUIDE Mask */ + +#define CoreDebug_DHCSR_S_NSUIDE_Pos 21U /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Position */ +#define CoreDebug_DHCSR_S_NSUIDE_Msk (1UL << CoreDebug_DHCSR_S_NSUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Mask */ + +#define CoreDebug_DHCSR_S_SDE_Pos 20U /*!< \deprecated CoreDebug DHCSR: S_SDE Position */ +#define CoreDebug_DHCSR_S_SDE_Msk (1UL << CoreDebug_DHCSR_S_SDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SDE Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_PMOV_Pos 6U /*!< \deprecated CoreDebug DHCSR: C_PMOV Position */ +#define CoreDebug_DHCSR_C_PMOV_Msk (1UL << CoreDebug_DHCSR_C_PMOV_Pos) /*!< \deprecated CoreDebug DHCSR: C_PMOV Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos 3U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos 1U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos 10U /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos 9U /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDAPEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Mask */ + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos 8U /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Position */ +#define CoreDebug_DAUTHCTRL_FSDMA_Msk (1UL << CoreDebug_DAUTHCTRL_FSDMA_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (0x1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (0x1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (0x1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (0x1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DSCEMCR, Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (0x1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (0x1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (0x1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (0x1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (0x1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (0x1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (0x1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "pmu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) +#include "cachel1_armv7.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV81MML_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_armv8mbl.h b/firmware/numpad/Drivers/CMSIS/Include/core_armv8mbl.h new file mode 100644 index 00000000..932d3d18 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_armv8mbl.h @@ -0,0 +1,2222 @@ +/**************************************************************************//** + * @file core_armv8mbl.h + * @brief CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File + * @version V5.1.0 + * @date 27. March 2020 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_ARMV8MBL_H_GENERIC +#define __CORE_ARMV8MBL_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMv8MBL + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __ARMv8MBL_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MBL_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MBL_CMSIS_VERSION ((__ARMv8MBL_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MBL_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (2U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MBL_H_DEPENDANT +#define __CORE_ARMV8MBL_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MBL_REV + #define __ARMv8MBL_REV 0x0000U + #warning "__ARMv8MBL_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MBL */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< \deprecated CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_armv8mml.h b/firmware/numpad/Drivers/CMSIS/Include/core_armv8mml.h new file mode 100644 index 00000000..c119fbf2 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_armv8mml.h @@ -0,0 +1,3209 @@ +/**************************************************************************//** + * @file core_armv8mml.h + * @brief CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File + * @version V5.2.3 + * @date 13. October 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_ARMV8MML_H_GENERIC +#define __CORE_ARMV8MML_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMv8MML + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS Armv8MML definitions */ +#define __ARMv8MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MML_CMSIS_VERSION ((__ARMv8MML_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (80U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MML_H_DEPENDANT +#define __CORE_ARMV8MML_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MML_REV + #define __ARMv8MML_REV 0x0000U + #warning "__ARMv8MML_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MML */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) +#include "cachel1_armv7.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm0.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm0.h new file mode 100644 index 00000000..6441ff34 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm0.h @@ -0,0 +1,952 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 21. August 2019 + ******************************************************************************/ +/* + * Copyright (c) 2009-2019 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M0 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ + /* ARM Application Note 321 states that the M0 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm0plus.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm0plus.h new file mode 100644 index 00000000..4e7179a6 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm0plus.h @@ -0,0 +1,1087 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V5.0.9 + * @date 21. August 2019 + ******************************************************************************/ +/* + * Copyright (c) 2009-2019 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex-M0+ + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0+ definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ + __CM0PLUS_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000U + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0+ header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +#else + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ +#endif + /* ARM Application Note 321 states that the M0+ does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +#else + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ +#endif +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm1.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm1.h new file mode 100644 index 00000000..76b45697 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm1.h @@ -0,0 +1,979 @@ +/**************************************************************************//** + * @file core_cm1.h + * @brief CMSIS Cortex-M1 Core Peripheral Access Layer Header File + * @version V1.0.1 + * @date 12. November 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM1_H_GENERIC +#define __CORE_CM1_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M1 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM1 definitions */ +#define __CM1_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM1_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM1_CMSIS_VERSION ((__CM1_CMSIS_VERSION_MAIN << 16U) | \ + __CM1_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (1U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM1_H_DEPENDANT +#define __CORE_CM1_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM1_REV + #define __CM1_REV 0x0100U + #warning "__CM1_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ + +#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M1 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M1 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M1 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm23.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm23.h new file mode 100644 index 00000000..55fff995 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm23.h @@ -0,0 +1,2297 @@ +/**************************************************************************//** + * @file core_cm23.h + * @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File + * @version V5.1.0 + * @date 11. February 2020 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM23_H_GENERIC +#define __CORE_CM23_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M23 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __CM23_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM23_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM23_CMSIS_VERSION ((__CM23_CMSIS_VERSION_MAIN << 16U) | \ + __CM23_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (23U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM23_H_DEPENDANT +#define __CORE_CM23_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM23_REV + #define __CM23_REV 0x0000U + #warning "__CM23_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M23 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< \deprecated CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm3.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm3.h new file mode 100644 index 00000000..74fb87e5 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm3.h @@ -0,0 +1,1943 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V5.1.2 + * @date 04. June 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M3 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (3U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200U + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ +#endif + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm33.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm33.h new file mode 100644 index 00000000..18a2e6fb --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm33.h @@ -0,0 +1,3277 @@ +/**************************************************************************//** + * @file core_cm33.h + * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File + * @version V5.2.3 + * @date 13. October 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM33_H_GENERIC +#define __CORE_CM33_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M33 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM33 definitions */ +#define __CM33_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM33_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM33_CMSIS_VERSION ((__CM33_CMSIS_VERSION_MAIN << 16U) | \ + __CM33_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (33U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM33_H_DEPENDANT +#define __CORE_CM33_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM33_REV + #define __CM33_REV 0x0000U + #warning "__CM33_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M33 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm35p.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm35p.h new file mode 100644 index 00000000..3843d954 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm35p.h @@ -0,0 +1,3277 @@ +/**************************************************************************//** + * @file core_cm35p.h + * @brief CMSIS Cortex-M35P Core Peripheral Access Layer Header File + * @version V1.1.3 + * @date 13. October 2021 + ******************************************************************************/ +/* + * Copyright (c) 2018-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM35P_H_GENERIC +#define __CORE_CM35P_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M35P + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM35P definitions */ +#define __CM35P_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM35P_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM35P_CMSIS_VERSION ((__CM35P_CMSIS_VERSION_MAIN << 16U) | \ + __CM35P_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (35U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM35P_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM35P_H_DEPENDANT +#define __CORE_CM35P_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM35P_REV + #define __CM35P_REV 0x0000U + #warning "__CM35P_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M35P */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM35P_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm4.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm4.h new file mode 100644 index 00000000..e21cd149 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm4.h @@ -0,0 +1,2129 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V5.1.2 + * @date 04. June 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M4 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (4U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000U + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and FP Feature Register 2 Definitions */ + +#define FPU_MVFR2_VFP_Misc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_VFP_Misc_Msk (0xFUL << FPU_MVFR2_VFP_Misc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M4 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm55.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm55.h new file mode 100644 index 00000000..faa30ce3 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm55.h @@ -0,0 +1,4817 @@ +/**************************************************************************//** + * @file core_cm55.h + * @brief CMSIS Cortex-M55 Core Peripheral Access Layer Header File + * @version V1.2.4 + * @date 21. April 2022 + ******************************************************************************/ +/* + * Copyright (c) 2018-2022 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM55_H_GENERIC +#define __CORE_CM55_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M55 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM55 definitions */ +#define __CM55_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM55_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM55_CMSIS_VERSION ((__CM55_CMSIS_VERSION_MAIN << 16U) | \ + __CM55_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (55U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM55_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM55_H_DEPENDANT +#define __CORE_CM55_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM55_REV + #define __CM55_REV 0x0000U + #warning "__CM55_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 8U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 8 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M55 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core PMU Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED4[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/* SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register + @{ + */ + +/** + \brief Structure type to access the Implementation Control Block (ICB). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} ICB_Type; + +/* Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define ICB_ACTLR_DISDI_Msk (3UL << ICB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define ICB_ACTLR_DISOLAP_Pos 7U /*!< ACTLR: DISOLAP Position */ +#define ICB_ACTLR_DISOLAP_Msk (1UL << ICB_ACTLR_DISOLAP_Pos) /*!< ACTLR: DISOLAP Mask */ + +#define ICB_ACTLR_DISOLAPS_Pos 6U /*!< ACTLR: DISOLAPS Position */ +#define ICB_ACTLR_DISOLAPS_Msk (1UL << ICB_ACTLR_DISOLAPS_Pos) /*!< ACTLR: DISOLAPS Mask */ + +#define ICB_ACTLR_DISLOBR_Pos 5U /*!< ACTLR: DISLOBR Position */ +#define ICB_ACTLR_DISLOBR_Msk (1UL << ICB_ACTLR_DISLOBR_Pos) /*!< ACTLR: DISLOBR Mask */ + +#define ICB_ACTLR_DISLO_Pos 4U /*!< ACTLR: DISLO Position */ +#define ICB_ACTLR_DISLO_Msk (1UL << ICB_ACTLR_DISLO_Pos) /*!< ACTLR: DISLO Mask */ + +#define ICB_ACTLR_DISLOLEP_Pos 3U /*!< ACTLR: DISLOLEP Position */ +#define ICB_ACTLR_DISLOLEP_Msk (1UL << ICB_ACTLR_DISLOLEP_Pos) /*!< ACTLR: DISLOLEP Mask */ + +#define ICB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define ICB_ACTLR_DISFOLD_Msk (1UL << ICB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +/* Interrupt Controller Type Register Definitions */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_ICB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) ITM Device Type Register */ + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + __IOM uint32_t PFCR; /*!< Offset: 0x004 (R/W) Prefetcher Control Register */ + uint32_t RESERVED1[2U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/* MEMSYSCTL Memory System Control Register (MSCR) Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (0x1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (0x1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (0x1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (0x1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (0x1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (0x1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/* MEMSYSCTL Prefetcher Control Register (PFCR) Register Definitions */ +#define MEMSYSCTL_PFCR_MAX_OS_Pos 7U /*!< MEMSYSCTL PFCR: MAX_OS Position */ +#define MEMSYSCTL_PFCR_MAX_OS_Msk (0x7UL << MEMSYSCTL_PFCR_MAX_OS_Pos) /*!< MEMSYSCTL PFCR: MAX_OS Mask */ + +#define MEMSYSCTL_PFCR_MAX_LA_Pos 4U /*!< MEMSYSCTL PFCR: MAX_LA Position */ +#define MEMSYSCTL_PFCR_MAX_LA_Msk (0x7UL << MEMSYSCTL_PFCR_MAX_LA_Pos) /*!< MEMSYSCTL PFCR: MAX_LA Mask */ + +#define MEMSYSCTL_PFCR_MIN_LA_Pos 1U /*!< MEMSYSCTL PFCR: MIN_LA Position */ +#define MEMSYSCTL_PFCR_MIN_LA_Msk (0x7UL << MEMSYSCTL_PFCR_MIN_LA_Pos) /*!< MEMSYSCTL PFCR: MIN_LA Mask */ + +#define MEMSYSCTL_PFCR_ENABLE_Pos 0U /*!< MEMSYSCTL PFCR: ENABLE Position */ +#define MEMSYSCTL_PFCR_ENABLE_Msk (0x1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/* MEMSYSCTL ITCM Control Register (ITCMCR) Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/* MEMSYSCTL DTCM Control Register (DTCMCR) Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/* MEMSYSCTL P-AHB Control Register (PAHBCR) Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (0x1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/* MEMSYSCTL ITGU Control Register (ITGU_CTRL) Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL ITGU Configuration Register (ITGU_CFG) Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/* MEMSYSCTL DTGU Control Registers (DTGU_CTRL) Register Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL DTGU Configuration Register (DTGU_CFG) Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/* PWRMODCTL Core Power Domain Low Power State (CPDLPSTATE) Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos 4U /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/* PWRMODCTL Debug Power Domain Low Power State (DPDLPSTATE) Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/W) Event Mask A Register */ + __IM uint32_t EVENTMASK[15]; /*!< Offset: 0x084 (R/W) Event Mask Register */ +} EWIC_Type; + +/* EWIC External Wakeup Interrupt Controller (EVENTSPR) Register Definitions */ +#define EWIC_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC EVENTSPR: EDBGREQ Position */ +#define EWIC_EVENTSPR_EDBGREQ_Msk (0x1UL << EWIC_EVENTSPR_EDBGREQ_Pos) /*!< EWIC EVENTSPR: EDBGREQ Mask */ + +#define EWIC_EVENTSPR_NMI_Pos 1U /*!< EWIC EVENTSPR: NMI Position */ +#define EWIC_EVENTSPR_NMI_Msk (0x1UL << EWIC_EVENTSPR_NMI_Pos) /*!< EWIC EVENTSPR: NMI Mask */ + +#define EWIC_EVENTSPR_EVENT_Pos 0U /*!< EWIC EVENTSPR: EVENT Position */ +#define EWIC_EVENTSPR_EVENT_Msk (0x1UL /*<< EWIC_EVENTSPR_EVENT_Pos*/) /*!< EWIC EVENTSPR: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASKA) Register Definitions */ +#define EWIC_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC EVENTMASKA: EDBGREQ Position */ +#define EWIC_EVENTMASKA_EDBGREQ_Msk (0x1UL << EWIC_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_EVENTMASKA_NMI_Pos 1U /*!< EWIC EVENTMASKA: NMI Position */ +#define EWIC_EVENTMASKA_NMI_Msk (0x1UL << EWIC_EVENTMASKA_NMI_Pos) /*!< EWIC EVENTMASKA: NMI Mask */ + +#define EWIC_EVENTMASKA_EVENT_Pos 0U /*!< EWIC EVENTMASKA: EVENT Position */ +#define EWIC_EVENTMASKA_EVENT_Msk (0x1UL /*<< EWIC_EVENTMASKA_EVENT_Pos*/) /*!< EWIC EVENTMASKA: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASK) Register Definitions */ +#define EWIC_EVENTMASK_IRQ_Pos 0U /*!< EWIC EVENTMASKA: IRQ Position */ +#define EWIC_EVENTMASK_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EVENTMASKA_IRQ_Pos*/) /*!< EWIC EVENTMASKA: IRQ Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ +} ErrBnk_Type; + +/* ERRBNK Instruction Cache Error Bank Register 0 (IEBR0) Register Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (0x1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (0x1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (0x1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/* ERRBNK Instruction Cache Error Bank Register 1 (IEBR1) Register Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (0x1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (0x1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (0x1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 0 (DEBR0) Register Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (0x1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (0x1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (0x1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (0x1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 1 (DEBR1) Register Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (0x1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (0x1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (0x1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (0x1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 0 (TEBR0) Register Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 28U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (0x1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (0x1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x3UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (0x1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (0x1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 1 (TEBR1) Register Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 28U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (0x1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (0x1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x3UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (0x1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (0x1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/* PRCCFGINF Processor Configuration Information Selection Register (CFGINFOSEL) Definitions */ + +/* PRCCFGINF Processor Configuration Information Read Data Register (CFGINFORD) Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup STL_Type Software Test Library Observation Registers + \brief Type definitions for the Software Test Library Observation Registerss (STL) + @{ + */ + +/** + \brief Structure type to access the Software Test Library Observation Registerss (STL). + */ +typedef struct +{ + __IM uint32_t STLNVICPENDOR; /*!< Offset: 0x000 (R/ ) NVIC Pending Priority Tree Register */ + __IM uint32_t STLNVICACTVOR; /*!< Offset: 0x004 (R/ ) NVIC Active Priority Tree Register */ + uint32_t RESERVED0[2U]; + __OM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sanple Register */ + __IM uint32_t STLIMPUOR; /*!< Offset: 0x014 (R/ ) MPU Region Hit Register */ + __IM uint32_t STLD0MPUOR; /*!< Offset: 0x018 (R/ ) MPU Memory Attributes Register 0 */ + __IM uint32_t STLD1MPUOR; /*!< Offset: 0x01C (R/ ) MPU Memory Attributes Register 1 */ + +} STL_Type; + +/* STL Software Test Library Observation Register (STLNVICPENDOR) Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (0x1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (0x1UL << STL_STLNVICPENDOR_TARGET_Pos) /*!< STL STLNVICPENDOR: TARGET Mask */ + +#define STL_STLNVICPENDOR_PRIORITY_Pos 9U /*!< STL STLNVICPENDOR: PRIORITY Position */ +#define STL_STLNVICPENDOR_PRIORITY_Msk (0xFFUL << STL_STLNVICPENDOR_PRIORITY_Pos) /*!< STL STLNVICPENDOR: PRIORITY Mask */ + +#define STL_STLNVICPENDOR_INTNUM_Pos 0U /*!< STL STLNVICPENDOR: INTNUM Position */ +#define STL_STLNVICPENDOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICPENDOR_INTNUM_Pos*/) /*!< STL STLNVICPENDOR: INTNUM Mask */ + +/* STL Software Test Library Observation Register (STLNVICACTVOR) Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (0x1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (0x1UL << STL_STLNVICACTVOR_TARGET_Pos) /*!< STL STLNVICACTVOR: TARGET Mask */ + +#define STL_STLNVICACTVOR_PRIORITY_Pos 9U /*!< STL STLNVICACTVOR: PRIORITY Position */ +#define STL_STLNVICACTVOR_PRIORITY_Msk (0xFFUL << STL_STLNVICACTVOR_PRIORITY_Pos) /*!< STL STLNVICACTVOR: PRIORITY Mask */ + +#define STL_STLNVICACTVOR_INTNUM_Pos 0U /*!< STL STLNVICACTVOR: INTNUM Position */ +#define STL_STLNVICACTVOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICACTVOR_INTNUM_Pos*/) /*!< STL STLNVICACTVOR: INTNUM Mask */ + +/* STL Software Test Library Observation Register (STLIDMPUSR) Definitions */ +#define STL_STLIDMPUSR_ADDR_Pos 5U /*!< STL STLIDMPUSR: ADDR Position */ +#define STL_STLIDMPUSR_ADDR_Msk (0x7FFFFFFUL << STL_STLIDMPUSR_ADDR_Pos) /*!< STL STLIDMPUSR: ADDR Mask */ + +#define STL_STLIDMPUSR_INSTR_Pos 2U /*!< STL STLIDMPUSR: INSTR Position */ +#define STL_STLIDMPUSR_INSTR_Msk (0x1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (0x1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/* STL Software Test Library Observation Register (STLIMPUOR) Definitions */ +#define STL_STLIMPUOR_HITREGION_Pos 9U /*!< STL STLIMPUOR: HITREGION Position */ +#define STL_STLIMPUOR_HITREGION_Msk (0xFFUL << STL_STLIMPUOR_HITREGION_Pos) /*!< STL STLIMPUOR: HITREGION Mask */ + +#define STL_STLIMPUOR_ATTR_Pos 0U /*!< STL STLIMPUOR: ATTR Position */ +#define STL_STLIMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLIMPUOR_ATTR_Pos*/) /*!< STL STLIMPUOR: ATTR Mask */ + +/* STL Software Test Library Observation Register (STLD0MPUOR) Definitions */ +#define STL_STLD0MPUOR_HITREGION_Pos 9U /*!< STL STLD0MPUOR: HITREGION Position */ +#define STL_STLD0MPUOR_HITREGION_Msk (0xFFUL << STL_STLD0MPUOR_HITREGION_Pos) /*!< STL STLD0MPUOR: HITREGION Mask */ + +#define STL_STLD0MPUOR_ATTR_Pos 0U /*!< STL STLD0MPUOR: ATTR Position */ +#define STL_STLD0MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD0MPUOR_ATTR_Pos*/) /*!< STL STLD0MPUOR: ATTR Mask */ + +/* STL Software Test Library Observation Register (STLD1MPUOR) Definitions */ +#define STL_STLD1MPUOR_HITREGION_Pos 9U /*!< STL STLD1MPUOR: HITREGION Position */ +#define STL_STLD1MPUOR_HITREGION_Msk (0xFFUL << STL_STLD1MPUOR_HITREGION_Pos) /*!< STL STLD1MPUOR: HITREGION Mask */ + +#define STL_STLD1MPUOR_ATTR_Pos 0U /*!< STL STLD1MPUOR: ATTR Position */ +#define STL_STLD1MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD1MPUOR_ATTR_Pos*/) /*!< STL STLD1MPUOR: ATTR Mask */ + +/*@}*/ /* end of group STL_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFmt_Pos 0U /*!< TPI FFCR: EnFmt Position */ +#define TPI_FFCR_EnFmt_Msk (0x3UL << /*TPI_FFCR_EnFmt_Pos*/) /*!< TPI FFCR: EnFmt Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) PMU Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) PMU Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) PMU Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) PMU Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) PMU Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) PMU Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) PMU Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) PMU Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) PMU Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) PMU Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) PMU Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) PMU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) PMU Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) PMU Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) PMU Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) PMU Device Type Register */ + __IOM uint32_t PIDR4; /*!< Offset: 0xFD0 (R/W) PMU Peripheral Identification Register 4 */ + uint32_t RESERVED13[3]; + __IOM uint32_t PIDR0; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 0 */ + __IOM uint32_t PIDR1; /*!< Offset: 0xFE4 (R/W) PMU Peripheral Identification Register 1 */ + __IOM uint32_t PIDR2; /*!< Offset: 0xFE8 (R/W) PMU Peripheral Identification Register 2 */ + __IOM uint32_t PIDR3; /*!< Offset: 0xFEC (R/W) PMU Peripheral Identification Register 3 */ + __IOM uint32_t CIDR0; /*!< Offset: 0xFF0 (R/W) PMU Component Identification Register 0 */ + __IOM uint32_t CIDR1; /*!< Offset: 0xFF4 (R/W) PMU Component Identification Register 1 */ + __IOM uint32_t CIDR2; /*!< Offset: 0xFF8 (R/W) PMU Component Identification Register 2 */ + __IOM uint32_t CIDR3; /*!< Offset: 0xFFC (R/W) PMU Component Identification Register 3 */ +} PMU_Type; + +/** \brief PMU Event Counter Registers (0-30) Definitions */ + +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ + +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ + +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ + +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ + +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ + +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ + +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ + +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ + +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ + +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ + +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ + +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + + +/*@} end of group CMSIS_PMU */ +#endif + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: FPRound bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: FPRound bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: FPSqrt bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: FPSqrt bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: FPDivide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: FPDP bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: FPDP bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: FPSP bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: FPSP bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMDReg bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMDReg bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: FMAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: FMAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FPHP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FPHP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: FPDNaN bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: FPDNaN bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FPFtZ bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FPFtZ bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_FPD_Pos 23U /*!< \deprecated CoreDebug DHCSR: S_FPD Position */ +#define CoreDebug_DHCSR_S_FPD_Msk (1UL << CoreDebug_DHCSR_S_FPD_Pos) /*!< \deprecated CoreDebug DHCSR: S_FPD Mask */ + +#define CoreDebug_DHCSR_S_SUIDE_Pos 22U /*!< \deprecated CoreDebug DHCSR: S_SUIDE Position */ +#define CoreDebug_DHCSR_S_SUIDE_Msk (1UL << CoreDebug_DHCSR_S_SUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SUIDE Mask */ + +#define CoreDebug_DHCSR_S_NSUIDE_Pos 21U /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Position */ +#define CoreDebug_DHCSR_S_NSUIDE_Msk (1UL << CoreDebug_DHCSR_S_NSUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Mask */ + +#define CoreDebug_DHCSR_S_SDE_Pos 20U /*!< \deprecated CoreDebug DHCSR: S_SDE Position */ +#define CoreDebug_DHCSR_S_SDE_Msk (1UL << CoreDebug_DHCSR_S_SDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SDE Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_PMOV_Pos 6U /*!< \deprecated CoreDebug DHCSR: C_PMOV Position */ +#define CoreDebug_DHCSR_C_PMOV_Msk (1UL << CoreDebug_DHCSR_C_PMOV_Pos) /*!< \deprecated CoreDebug DHCSR: C_PMOV Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos 3U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos 1U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos 10U /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos 9U /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDAPEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Mask */ + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos 8U /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Position */ +#define CoreDebug_DAUTHCTRL_FSDMA_Msk (1UL << CoreDebug_DAUTHCTRL_FSDMA_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (0x1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (0x1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (0x1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (0x1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DSCEMCR, Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (0x1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (0x1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (0x1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (0x1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (0x1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (0x1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (0x1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define STL ((STL_Type *) STL_BASE ) /*!< Software Test Library configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ + +/* 'SCnSCB' is deprecated and replaced by 'ICB' */ +typedef ICB_Type SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISCRITAXIRUW_Pos (ICB_ACTLR_DISCRITAXIRUW_Pos) +#define SCnSCB_ACTLR_DISCRITAXIRUW_Msk (ICB_ACTLR_DISCRITAXIRUW_Msk) + +#define SCnSCB_ACTLR_DISDI_Pos (ICB_ACTLR_DISDI_Pos) +#define SCnSCB_ACTLR_DISDI_Msk (ICB_ACTLR_DISDI_Msk) + +#define SCnSCB_ACTLR_DISCRITAXIRUR_Pos (ICB_ACTLR_DISCRITAXIRUR_Pos) +#define SCnSCB_ACTLR_DISCRITAXIRUR_Msk (ICB_ACTLR_DISCRITAXIRUR_Msk) + +#define SCnSCB_ACTLR_EVENTBUSEN_Pos (ICB_ACTLR_EVENTBUSEN_Pos) +#define SCnSCB_ACTLR_EVENTBUSEN_Msk (ICB_ACTLR_EVENTBUSEN_Msk) + +#define SCnSCB_ACTLR_EVENTBUSEN_S_Pos (ICB_ACTLR_EVENTBUSEN_S_Pos) +#define SCnSCB_ACTLR_EVENTBUSEN_S_Msk (ICB_ACTLR_EVENTBUSEN_S_Msk) + +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos (ICB_ACTLR_DISITMATBFLUSH_Pos) +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (ICB_ACTLR_DISITMATBFLUSH_Msk) + +#define SCnSCB_ACTLR_DISNWAMODE_Pos (ICB_ACTLR_DISNWAMODE_Pos) +#define SCnSCB_ACTLR_DISNWAMODE_Msk (ICB_ACTLR_DISNWAMODE_Msk) + +#define SCnSCB_ACTLR_FPEXCODIS_Pos (ICB_ACTLR_FPEXCODIS_Pos) +#define SCnSCB_ACTLR_FPEXCODIS_Msk (ICB_ACTLR_FPEXCODIS_Msk) + +#define SCnSCB_ACTLR_DISOLAP_Pos (ICB_ACTLR_DISOLAP_Pos) +#define SCnSCB_ACTLR_DISOLAP_Msk (ICB_ACTLR_DISOLAP_Msk) + +#define SCnSCB_ACTLR_DISOLAPS_Pos (ICB_ACTLR_DISOLAPS_Pos) +#define SCnSCB_ACTLR_DISOLAPS_Msk (ICB_ACTLR_DISOLAPS_Msk) + +#define SCnSCB_ACTLR_DISLOBR_Pos (ICB_ACTLR_DISLOBR_Pos) +#define SCnSCB_ACTLR_DISLOBR_Msk (ICB_ACTLR_DISLOBR_Msk) + +#define SCnSCB_ACTLR_DISLO_Pos (ICB_ACTLR_DISLO_Pos) +#define SCnSCB_ACTLR_DISLO_Msk (ICB_ACTLR_DISLO_Msk) + +#define SCnSCB_ACTLR_DISLOLEP_Pos (ICB_ACTLR_DISLOLEP_Pos) +#define SCnSCB_ACTLR_DISLOLEP_Msk (ICB_ACTLR_DISLOLEP_Msk) + +#define SCnSCB_ACTLR_DISFOLD_Pos (ICB_ACTLR_DISFOLD_Pos) +#define SCnSCB_ACTLR_DISFOLD_Msk (ICB_ACTLR_DISFOLD_Msk) + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos (ICB_ICTR_INTLINESNUM_Pos) +#define SCnSCB_ICTR_INTLINESNUM_Msk (ICB_ICTR_INTLINESNUM_Msk) + +#define SCnSCB (ICB) +#define SCnSCB_NS (ICB_NS) + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "pmu_armv8.h" + +/** + \brief Cortex-M55 PMU events + \note Architectural PMU events can be found in pmu_armv8.h +*/ + +#define ARMCM55_PMU_ECC_ERR 0xC000 /*!< Any ECC error */ +#define ARMCM55_PMU_ECC_ERR_FATAL 0xC001 /*!< Any fatal ECC error */ +#define ARMCM55_PMU_ECC_ERR_DCACHE 0xC010 /*!< Any ECC error in the data cache */ +#define ARMCM55_PMU_ECC_ERR_ICACHE 0xC011 /*!< Any ECC error in the instruction cache */ +#define ARMCM55_PMU_ECC_ERR_FATAL_DCACHE 0xC012 /*!< Any fatal ECC error in the data cache */ +#define ARMCM55_PMU_ECC_ERR_FATAL_ICACHE 0xC013 /*!< Any fatal ECC error in the instruction cache*/ +#define ARMCM55_PMU_ECC_ERR_DTCM 0xC020 /*!< Any ECC error in the DTCM */ +#define ARMCM55_PMU_ECC_ERR_ITCM 0xC021 /*!< Any ECC error in the ITCM */ +#define ARMCM55_PMU_ECC_ERR_FATAL_DTCM 0xC022 /*!< Any fatal ECC error in the DTCM */ +#define ARMCM55_PMU_ECC_ERR_FATAL_ITCM 0xC023 /*!< Any fatal ECC error in the ITCM */ +#define ARMCM55_PMU_PF_LINEFILL 0xC100 /*!< A prefetcher starts a line-fill */ +#define ARMCM55_PMU_PF_CANCEL 0xC101 /*!< A prefetcher stops prefetching */ +#define ARMCM55_PMU_PF_DROP_LINEFILL 0xC102 /*!< A linefill triggered by a prefetcher has been dropped because of lack of buffering */ +#define ARMCM55_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM55_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM55_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM55_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access to the P-AHB write interface */ +#define ARMCM55_PMU_AXI_WRITE_ACCESS 0xC302 /*!< Any beat access to M-AXI write interface */ +#define ARMCM55_PMU_AXI_READ_ACCESS 0xC303 /*!< Any beat access to M-AXI read interface */ +#define ARMCM55_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM55_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) +#include "cachel1_armv7.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM55_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm7.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm7.h new file mode 100644 index 00000000..010506e9 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm7.h @@ -0,0 +1,2366 @@ +/**************************************************************************//** + * @file core_cm7.h + * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File + * @version V5.1.6 + * @date 04. June 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M7 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM7 definitions */ +#define __CM7_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM7_CMSIS_VERSION_SUB ( __CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16U) | \ + __CM7_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (7U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000U + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ + uint32_t RESERVED7[5U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< \deprecated SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< \deprecated SCB CACR: ECCEN Mask */ + +#define SCB_CACR_ECCDIS_Pos 1U /*!< SCB CACR: ECCDIS Position */ +#define SCB_CACR_ECCDIS_Msk (1UL << SCB_CACR_ECCDIS_Pos) /*!< SCB CACR: ECCDIS Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBSCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBSCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBSCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISDYNADD_Pos 26U /*!< ACTLR: DISDYNADD Position */ +#define SCnSCB_ACTLR_DISDYNADD_Msk (1UL << SCnSCB_ACTLR_DISDYNADD_Pos) /*!< ACTLR: DISDYNADD Mask */ + +#define SCnSCB_ACTLR_DISISSCH1_Pos 21U /*!< ACTLR: DISISSCH1 Position */ +#define SCnSCB_ACTLR_DISISSCH1_Msk (0x1FUL << SCnSCB_ACTLR_DISISSCH1_Pos) /*!< ACTLR: DISISSCH1 Mask */ + +#define SCnSCB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define SCnSCB_ACTLR_DISDI_Msk (0x1FUL << SCnSCB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define SCnSCB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define SCnSCB_ACTLR_DISCRITAXIRUR_Msk (1UL << SCnSCB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define SCnSCB_ACTLR_DISBTACALLOC_Pos 14U /*!< ACTLR: DISBTACALLOC Position */ +#define SCnSCB_ACTLR_DISBTACALLOC_Msk (1UL << SCnSCB_ACTLR_DISBTACALLOC_Pos) /*!< ACTLR: DISBTACALLOC Mask */ + +#define SCnSCB_ACTLR_DISBTACREAD_Pos 13U /*!< ACTLR: DISBTACREAD Position */ +#define SCnSCB_ACTLR_DISBTACREAD_Msk (1UL << SCnSCB_ACTLR_DISBTACREAD_Pos) /*!< ACTLR: DISBTACREAD Mask */ + +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED3[981U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and FP Feature Register 2 Definitions */ + +#define FPU_MVFR2_VFP_Misc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_VFP_Misc_Msk (0xFUL << FPU_MVFR2_VFP_Misc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = SCB->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) +#include "cachel1_armv7.h" +#endif + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_cm85.h b/firmware/numpad/Drivers/CMSIS/Include/core_cm85.h new file mode 100644 index 00000000..60463111 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_cm85.h @@ -0,0 +1,4672 @@ +/**************************************************************************//** + * @file core_cm85.h + * @brief CMSIS Cortex-M85 Core Peripheral Access Layer Header File + * @version V1.0.4 + * @date 21. April 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM85_H_GENERIC +#define __CORE_CM85_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M85 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM85 definitions */ + +#define __CORTEX_M (85U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM85_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM85_H_DEPENDANT +#define __CORE_CM85_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM85_REV + #define __CM85_REV 0x0001U + #warning "__CM85_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 8U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 8 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M85 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core PMU Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:1; /*!< bit: 20 Reserved */ + uint32_t B:1; /*!< bit: 21 BTI active (read 0) */ + uint32_t _reserved2:2; /*!< bit: 22..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_B_Pos 21U /*!< xPSR: B Position */ +#define xPSR_B_Msk (1UL << xPSR_B_Pos) /*!< xPSR: B Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t BTI_EN:1; /*!< bit: 4 Privileged branch target identification enable */ + uint32_t UBTI_EN:1; /*!< bit: 5 Unprivileged branch target identification enable */ + uint32_t PAC_EN:1; /*!< bit: 6 Privileged pointer authentication enable */ + uint32_t UPAC_EN:1; /*!< bit: 7 Unprivileged pointer authentication enable */ + uint32_t _reserved1:24; /*!< bit: 8..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_UPAC_EN_Pos 7U /*!< CONTROL: UPAC_EN Position */ +#define CONTROL_UPAC_EN_Msk (1UL << CONTROL_UPAC_EN_Pos) /*!< CONTROL: UPAC_EN Mask */ + +#define CONTROL_PAC_EN_Pos 6U /*!< CONTROL: PAC_EN Position */ +#define CONTROL_PAC_EN_Msk (1UL << CONTROL_PAC_EN_Pos) /*!< CONTROL: PAC_EN Mask */ + +#define CONTROL_UBTI_EN_Pos 5U /*!< CONTROL: UBTI_EN Position */ +#define CONTROL_UBTI_EN_Msk (1UL << CONTROL_UBTI_EN_Pos) /*!< CONTROL: UBTI_EN Mask */ + +#define CONTROL_BTI_EN_Pos 4U /*!< CONTROL: BTI_EN Position */ +#define CONTROL_BTI_EN_Msk (1UL << CONTROL_BTI_EN_Pos) /*!< CONTROL: BTI_EN Mask */ + +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED4[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/* SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register + @{ + */ + +/** + \brief Structure type to access the Implementation Control Block (ICB). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} ICB_Type; + +/* Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +/* Interrupt Controller Type Register Definitions */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_ICB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) ITM Device Type Register */ + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + __IOM uint32_t PFCR; /*!< Offset: 0x004 (R/W) Prefetcher Control Register */ + uint32_t RESERVED1[2U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/* MEMSYSCTL Memory System Control Register (MSCR) Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (0x1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (0x1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (0x1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (0x1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (0x1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/* MEMSYSCTL Prefetcher Control Register (PFCR) Register Definitions */ +#define MEMSYSCTL_PFCR_DIS_NLP_Pos 7U /*!< MEMSYSCTL PFCR: DIS_NLP Position */ +#define MEMSYSCTL_PFCR_DIS_NLP_Msk (0x1UL << MEMSYSCTL_PFCR_DIS_NLP_Pos) /*!< MEMSYSCTL PFCR: DIS_NLP Mask */ + +#define MEMSYSCTL_PFCR_ENABLE_Pos 0U /*!< MEMSYSCTL PFCR: ENABLE Position */ +#define MEMSYSCTL_PFCR_ENABLE_Msk (0x1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/* MEMSYSCTL ITCM Control Register (ITCMCR) Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/* MEMSYSCTL DTCM Control Register (DTCMCR) Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/* MEMSYSCTL P-AHB Control Register (PAHBCR) Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (0x1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/* MEMSYSCTL ITGU Control Register (ITGU_CTRL) Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL ITGU Configuration Register (ITGU_CFG) Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/* MEMSYSCTL DTGU Control Registers (DTGU_CTRL) Register Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL DTGU Configuration Register (DTGU_CFG) Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/* PWRMODCTL Core Power Domain Low Power State (CPDLPSTATE) Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos 4U /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/* PWRMODCTL Debug Power Domain Low Power State (DPDLPSTATE) Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/W) Event Mask A Register */ + __IM uint32_t EVENTMASK[15]; /*!< Offset: 0x084 (R/W) Event Mask Register */ +} EWIC_Type; + +/* EWIC External Wakeup Interrupt Controller (EVENTSPR) Register Definitions */ +#define EWIC_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC EVENTSPR: EDBGREQ Position */ +#define EWIC_EVENTSPR_EDBGREQ_Msk (0x1UL << EWIC_EVENTSPR_EDBGREQ_Pos) /*!< EWIC EVENTSPR: EDBGREQ Mask */ + +#define EWIC_EVENTSPR_NMI_Pos 1U /*!< EWIC EVENTSPR: NMI Position */ +#define EWIC_EVENTSPR_NMI_Msk (0x1UL << EWIC_EVENTSPR_NMI_Pos) /*!< EWIC EVENTSPR: NMI Mask */ + +#define EWIC_EVENTSPR_EVENT_Pos 0U /*!< EWIC EVENTSPR: EVENT Position */ +#define EWIC_EVENTSPR_EVENT_Msk (0x1UL /*<< EWIC_EVENTSPR_EVENT_Pos*/) /*!< EWIC EVENTSPR: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASKA) Register Definitions */ +#define EWIC_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC EVENTMASKA: EDBGREQ Position */ +#define EWIC_EVENTMASKA_EDBGREQ_Msk (0x1UL << EWIC_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_EVENTMASKA_NMI_Pos 1U /*!< EWIC EVENTMASKA: NMI Position */ +#define EWIC_EVENTMASKA_NMI_Msk (0x1UL << EWIC_EVENTMASKA_NMI_Pos) /*!< EWIC EVENTMASKA: NMI Mask */ + +#define EWIC_EVENTMASKA_EVENT_Pos 0U /*!< EWIC EVENTMASKA: EVENT Position */ +#define EWIC_EVENTMASKA_EVENT_Msk (0x1UL /*<< EWIC_EVENTMASKA_EVENT_Pos*/) /*!< EWIC EVENTMASKA: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASK) Register Definitions */ +#define EWIC_EVENTMASK_IRQ_Pos 0U /*!< EWIC EVENTMASKA: IRQ Position */ +#define EWIC_EVENTMASK_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EVENTMASKA_IRQ_Pos*/) /*!< EWIC EVENTMASKA: IRQ Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ +} ErrBnk_Type; + +/* ERRBNK Instruction Cache Error Bank Register 0 (IEBR0) Register Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (0x1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (0x1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (0x1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/* ERRBNK Instruction Cache Error Bank Register 1 (IEBR1) Register Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (0x1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (0x1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (0x1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 0 (DEBR0) Register Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (0x1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (0x1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (0x1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (0x1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 1 (DEBR1) Register Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (0x1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (0x1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (0x1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (0x1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 0 (TEBR0) Register Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 28U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (0x1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (0x1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x3UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (0x1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (0x1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 1 (TEBR1) Register Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 28U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (0x1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (0x1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x3UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (0x1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (0x1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/* PRCCFGINF Processor Configuration Information Selection Register (CFGINFOSEL) Definitions */ + +/* PRCCFGINF Processor Configuration Information Read Data Register (CFGINFORD) Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFmt_Pos 0U /*!< TPI FFCR: EnFmt Position */ +#define TPI_FFCR_EnFmt_Msk (0x3UL << /*TPI_FFCR_EnFmt_Pos*/) /*!< TPI FFCR: EnFmt Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) PMU Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) PMU Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) PMU Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) PMU Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) PMU Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) PMU Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) PMU Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) PMU Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) PMU Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) PMU Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) PMU Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) PMU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) PMU Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) PMU Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) PMU Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) PMU Device Type Register */ + __IOM uint32_t PIDR4; /*!< Offset: 0xFD0 (R/W) PMU Peripheral Identification Register 4 */ + uint32_t RESERVED13[3]; + __IOM uint32_t PIDR0; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 0 */ + __IOM uint32_t PIDR1; /*!< Offset: 0xFE4 (R/W) PMU Peripheral Identification Register 1 */ + __IOM uint32_t PIDR2; /*!< Offset: 0xFE8 (R/W) PMU Peripheral Identification Register 2 */ + __IOM uint32_t PIDR3; /*!< Offset: 0xFEC (R/W) PMU Peripheral Identification Register 3 */ + __IOM uint32_t CIDR0; /*!< Offset: 0xFF0 (R/W) PMU Component Identification Register 0 */ + __IOM uint32_t CIDR1; /*!< Offset: 0xFF4 (R/W) PMU Component Identification Register 1 */ + __IOM uint32_t CIDR2; /*!< Offset: 0xFF8 (R/W) PMU Component Identification Register 2 */ + __IOM uint32_t CIDR3; /*!< Offset: 0xFFC (R/W) PMU Component Identification Register 3 */ +} PMU_Type; + +/** \brief PMU Event Counter Registers (0-30) Definitions */ + +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ + +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ + +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ + +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ + +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ + +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ + +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ + +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ + +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ + +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ + +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ + +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + + +/*@} end of group CMSIS_PMU */ +#endif + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: FPRound bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: FPRound bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: FPSqrt bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: FPSqrt bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: FPDivide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: FPDP bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: FPDP bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: FPSP bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: FPSP bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMDReg bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMDReg bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: FMAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: FMAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FPHP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FPHP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: FPDNaN bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: FPDNaN bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FPFtZ bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FPFtZ bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_FPD_Pos 23U /*!< \deprecated CoreDebug DHCSR: S_FPD Position */ +#define CoreDebug_DHCSR_S_FPD_Msk (1UL << CoreDebug_DHCSR_S_FPD_Pos) /*!< \deprecated CoreDebug DHCSR: S_FPD Mask */ + +#define CoreDebug_DHCSR_S_SUIDE_Pos 22U /*!< \deprecated CoreDebug DHCSR: S_SUIDE Position */ +#define CoreDebug_DHCSR_S_SUIDE_Msk (1UL << CoreDebug_DHCSR_S_SUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SUIDE Mask */ + +#define CoreDebug_DHCSR_S_NSUIDE_Pos 21U /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Position */ +#define CoreDebug_DHCSR_S_NSUIDE_Msk (1UL << CoreDebug_DHCSR_S_NSUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Mask */ + +#define CoreDebug_DHCSR_S_SDE_Pos 20U /*!< \deprecated CoreDebug DHCSR: S_SDE Position */ +#define CoreDebug_DHCSR_S_SDE_Msk (1UL << CoreDebug_DHCSR_S_SDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SDE Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_PMOV_Pos 6U /*!< \deprecated CoreDebug DHCSR: C_PMOV Position */ +#define CoreDebug_DHCSR_C_PMOV_Msk (1UL << CoreDebug_DHCSR_C_PMOV_Pos) /*!< \deprecated CoreDebug DHCSR: C_PMOV Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos 3U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos 1U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos 10U /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos 9U /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDAPEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Mask */ + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos 8U /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Position */ +#define CoreDebug_DAUTHCTRL_FSDMA_Msk (1UL << CoreDebug_DAUTHCTRL_FSDMA_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (0x1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (0x1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (0x1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (0x1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DSCEMCR, Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (0x1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (0x1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (0x1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (0x1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (0x1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (0x1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (0x1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "pmu_armv8.h" + +/** + \brief Cortex-M85 PMU events + \note Architectural PMU events can be found in pmu_armv8.h +*/ + +#define ARMCM85_PMU_ECC_ERR 0xC000 /*!< One or more Error Correcting Code (ECC) errors detected */ +#define ARMCM85_PMU_ECC_ERR_MBIT 0xC001 /*!< One or more multi-bit ECC errors detected */ +#define ARMCM85_PMU_ECC_ERR_DCACHE 0xC010 /*!< One or more ECC errors in the data cache */ +#define ARMCM85_PMU_ECC_ERR_ICACHE 0xC011 /*!< One or more ECC errors in the instruction cache */ +#define ARMCM85_PMU_ECC_ERR_MBIT_DCACHE 0xC012 /*!< One or more multi-bit ECC errors in the data cache */ +#define ARMCM85_PMU_ECC_ERR_MBIT_ICACHE 0xC013 /*!< One or more multi-bit ECC errors in the instruction cache */ +#define ARMCM85_PMU_ECC_ERR_DTCM 0xC020 /*!< One or more ECC errors in the Data Tightly Coupled Memory (DTCM) */ +#define ARMCM85_PMU_ECC_ERR_ITCM 0xC021 /*!< One or more ECC errors in the Instruction Tightly Coupled Memory (ITCM) */ +#define ARMCM85_PMU_ECC_ERR_MBIT_DTCM 0xC022 /*!< One or more multi-bit ECC errors in the DTCM */ +#define ARMCM85_PMU_ECC_ERR_MBIT_ITCM 0xC023 /*!< One or more multi-bit ECC errors in the ITCM */ +#define ARMCM85_PMU_PF_LINEFILL 0xC100 /*!< The prefetcher starts a line-fill */ +#define ARMCM85_PMU_PF_CANCEL 0xC101 /*!< The prefetcher stops prefetching */ +#define ARMCM85_PMU_PF_DROP_LINEFILL 0xC102 /*!< A linefill triggered by a prefetcher has been dropped because of lack of buffering */ +#define ARMCM85_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM85_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM85_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM85_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access on the P-AHB write interface */ +#define ARMCM85_PMU_AXI_WRITE_ACCESS 0xC302 /*!< Any beat access to M-AXI write interface */ +#define ARMCM85_PMU_AXI_READ_ACCESS 0xC303 /*!< Any beat access to M-AXI read interface */ +#define ARMCM85_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM85_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) +#include "cachel1_armv7.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + +/* ################### PAC Key functions ########################### */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) +#include "pac_armv81.h" +#endif + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM85_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_sc000.h b/firmware/numpad/Drivers/CMSIS/Include/core_sc000.h new file mode 100644 index 00000000..dbc755ff --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_sc000.h @@ -0,0 +1,1030 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 27. March 2020 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16U) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (000U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000U + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M0 and M0+ do not require the architectural barrier - assume SC000 is the same */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_sc300.h b/firmware/numpad/Drivers/CMSIS/Include/core_sc300.h new file mode 100644 index 00000000..d6662103 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_sc300.h @@ -0,0 +1,1917 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V5.0.10 + * @date 04. June 2021 + ******************************************************************************/ +/* + * Copyright (c) 2009-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC3000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16U) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (300U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000U + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/core_starmc1.h b/firmware/numpad/Drivers/CMSIS/Include/core_starmc1.h new file mode 100644 index 00000000..d86c8d38 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/core_starmc1.h @@ -0,0 +1,3592 @@ +/**************************************************************************//** + * @file core_starmc1.h + * @brief CMSIS ArmChina STAR-MC1 Core Peripheral Access Layer Header File + * @version V1.0.2 + * @date 07. April 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. + * Copyright (c) 2018-2022 Arm China. + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_STAR_H_GENERIC +#define __CORE_STAR_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup STAR-MC1 + @{ + */ + +#include "cmsis_version.h" + +/* Macro Define for STAR-MC1 */ +#define __STAR_MC (1U) /*!< STAR-MC Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_STAR_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_STAR_H_DEPENDANT +#define __CORE_STAR_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __STAR_REV + #define __STAR_REV 0x0000U + #warning "__STAR_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group STAR-MC1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for STAR-MC1 processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED_ADD1[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: F00-D00=0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ +} SCB_Type; + +typedef struct +{ + __IOM uint32_t CACR; /*!< Offset: 0x0 (R/W) L1 Cache Control Register */ + __IOM uint32_t ITCMCR; /*!< Offset: 0x10 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x14 (R/W) Data Tightly-Coupled Memory Control Registers */ +}EMSS_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +#define SCB_CLIDR_IC_Pos 0U /*!< SCB CLIDR: IC Position */ +#define SCB_CLIDR_IC_Msk (1UL << SCB_CLIDR_IC_Pos) /*!< SCB CLIDR: IC Mask */ + +#define SCB_CLIDR_DC_Pos 1U /*!< SCB CLIDR: DC Position */ +#define SCB_CLIDR_DC_Msk (1UL << SCB_CLIDR_DC_Pos) /*!< SCB CLIDR: DC Mask */ + + + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache line Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_LEVEL_Pos 1U /*!< SCB DCISW: Level Position */ +#define SCB_DCISW_LEVEL_Msk (7UL << SCB_DCISW_LEVEL_Pos) /*!< SCB DCISW: Level Mask */ + +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0xFFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean line by Set-way Register Definitions */ +#define SCB_DCCSW_LEVEL_Pos 1U /*!< SCB DCCSW: Level Position */ +#define SCB_DCCSW_LEVEL_Msk (7UL << SCB_DCCSW_LEVEL_Pos) /*!< SCB DCCSW: Level Mask */ + +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0xFFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_LEVEL_Pos 1U /*!< SCB DCCISW: Level Position */ +#define SCB_DCCISW_LEVEL_Msk (7UL << SCB_DCCISW_LEVEL_Pos) /*!< SCB DCCISW: Level Mask */ + +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0xFFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* ArmChina: Implementation Defined */ +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_DCCLEAN_Pos 16U /*!< SCB CACR: DCCLEAN Position */ +#define SCB_CACR_DCCLEAN_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: DCCLEAN Mask */ + +#define SCB_CACR_ICACTIVE_Pos 13U /*!< SCB CACR: ICACTIVE Position */ +#define SCB_CACR_ICACTIVE_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: ICACTIVE Mask */ + +#define SCB_CACR_DCACTIVE_Pos 12U /*!< SCB CACR: DCACTIVE Position */ +#define SCB_CACR_DCACTIVE_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: DCACTIVE Mask */ + +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/* DHCSR, Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (0x1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (0x1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (0x1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (0x1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (0x1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (0x1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (0x1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (0x1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/* DCRDR, Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (0x1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (0x1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (0x1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (0x1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (0x1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (0x1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (0x1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (0x1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (0x1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (0x1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (0x1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (0x1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (0x1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (0x1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (0x1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (0x1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (0x1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (0x1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (0x1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (0x1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define EMSS_BASE (0xE001E000UL) /*!AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses including + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/** + \brief Software Reset + \details Initiates a system reset request to reset the CPU. + */ +__NO_RETURN __STATIC_INLINE void __SW_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses including + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk) | /* Keep BFHFNMINS unchanged. Use this Reset function in case your case need to keep it */ + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | /* Keep priority group unchanged */ + SCB_AIRCR_SYSRESETREQ_Msk ); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + +/* ########################## Cache functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + +#define __SCB_DCACHE_LINE_SIZE 32U /*!< STAR-MC1 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#define __SCB_ICACHE_LINE_SIZE 32U /*!< STAR-MC1 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ + + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief I-Cache Invalidate by address + \details Invalidates I-Cache for the given address. + I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + I-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] isize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (void *addr, int32_t isize) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if ( isize > 0 ) { + int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->ICIMVAU = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_ICACHE_LINE_SIZE; + op_size -= __SCB_ICACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address. + D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + +/*@} end of CMSIS_Core_CacheFunctions */ +#endif + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_STAR_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/mpu_armv7.h b/firmware/numpad/Drivers/CMSIS/Include/mpu_armv7.h new file mode 100644 index 00000000..d9eedf81 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/mpu_armv7.h @@ -0,0 +1,275 @@ +/****************************************************************************** + * @file mpu_armv7.h + * @brief CMSIS MPU API for Armv7-M MPU + * @version V5.1.2 + * @date 25. May 2020 + ******************************************************************************/ +/* + * Copyright (c) 2017-2020 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV7_H +#define ARM_MPU_ARMV7_H + +#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes +#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes +#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes +#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes +#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes +#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte +#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes +#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes +#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes +#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes +#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes +#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes +#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes +#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes +#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes +#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte +#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes +#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes +#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes +#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes +#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes +#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes +#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes +#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes +#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes +#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte +#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes +#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes + +#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access +#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only +#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only +#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access +#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only +#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access + +/** MPU Region Base Address Register Value +* +* \param Region The region to be configured, number 0 to 15. +* \param BaseAddress The base address for the region. +*/ +#define ARM_MPU_RBAR(Region, BaseAddress) \ + (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ + ((Region) & MPU_RBAR_REGION_Msk) | \ + (MPU_RBAR_VALID_Msk)) + +/** +* MPU Memory Access Attributes +* +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +*/ +#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ + ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ + (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ + (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ + (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ + ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ + (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ + (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ + (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ + (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ + (((MPU_RASR_ENABLE_Msk)))) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ + ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) + +/** +* MPU Memory Access Attribute for strongly ordered memory. +* - TEX: 000b +* - Shareable +* - Non-cacheable +* - Non-bufferable +*/ +#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) + +/** +* MPU Memory Access Attribute for device memory. +* - TEX: 000b (if shareable) or 010b (if non-shareable) +* - Shareable or non-shareable +* - Non-cacheable +* - Bufferable (if shareable) or non-bufferable (if non-shareable) +* +* \param IsShareable Configures the device memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) + +/** +* MPU Memory Access Attribute for normal memory. +* - TEX: 1BBb (reflecting outer cacheability rules) +* - Shareable or non-shareable +* - Cacheable or non-cacheable (reflecting inner cacheability rules) +* - Bufferable or non-bufferable (reflecting inner cacheability rules) +* +* \param OuterCp Configures the outer cache policy. +* \param InnerCp Configures the inner cache policy. +* \param IsShareable Configures the memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U)) + +/** +* MPU Memory Access Attribute non-cacheable policy. +*/ +#define ARM_MPU_CACHEP_NOCACHE 0U + +/** +* MPU Memory Access Attribute write-back, write and read allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_WRA 1U + +/** +* MPU Memory Access Attribute write-through, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WT_NWA 2U + +/** +* MPU Memory Access Attribute write-back, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_NWA 3U + + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; //!< The region base address register value (RBAR) + uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DMB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + MPU->RNR = rnr; + MPU->RASR = 0U; +} + +/** Configure an MPU region. +* \param rbar Value for RBAR register. +* \param rasr Value for RASR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) +{ + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rasr Value for RASR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) +{ + MPU->RNR = rnr; + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_Load(). +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + while (cnt > MPU_TYPE_RALIASES) { + ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); + table += MPU_TYPE_RALIASES; + cnt -= MPU_TYPE_RALIASES; + } + ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); +} + +#endif diff --git a/firmware/numpad/Drivers/CMSIS/Include/mpu_armv8.h b/firmware/numpad/Drivers/CMSIS/Include/mpu_armv8.h new file mode 100644 index 00000000..3de16efc --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/mpu_armv8.h @@ -0,0 +1,352 @@ +/****************************************************************************** + * @file mpu_armv8.h + * @brief CMSIS MPU API for Armv8-M and Armv8.1-M MPU + * @version V5.1.3 + * @date 03. February 2021 + ******************************************************************************/ +/* + * Copyright (c) 2017-2021 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV8_H +#define ARM_MPU_ARMV8_H + +/** \brief Attribute for device memory (outer only) */ +#define ARM_MPU_ATTR_DEVICE ( 0U ) + +/** \brief Attribute for non-cacheable, normal memory */ +#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) + +/** \brief Attribute for normal memory (outer and inner) +* \param NT Non-Transient: Set to 1 for non-transient data. +* \param WB Write-Back: Set to 1 to use write-back update policy. +* \param RA Read Allocation: Set to 1 to use cache allocation on read miss. +* \param WA Write Allocation: Set to 1 to use cache allocation on write miss. +*/ +#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ + ((((NT) & 1U) << 3U) | (((WB) & 1U) << 2U) | (((RA) & 1U) << 1U) | ((WA) & 1U)) + +/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) + +/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) + +/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGRE (2U) + +/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_GRE (3U) + +/** \brief Memory Attribute +* \param O Outer memory attributes +* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes +*/ +#define ARM_MPU_ATTR(O, I) ((((O) & 0xFU) << 4U) | ((((O) & 0xFU) != 0U) ? ((I) & 0xFU) : (((I) & 0x3U) << 2U))) + +/** \brief Normal memory non-shareable */ +#define ARM_MPU_SH_NON (0U) + +/** \brief Normal memory outer shareable */ +#define ARM_MPU_SH_OUTER (2U) + +/** \brief Normal memory inner shareable */ +#define ARM_MPU_SH_INNER (3U) + +/** \brief Memory access permissions +* \param RO Read-Only: Set to 1 for read-only memory. +* \param NP Non-Privileged: Set to 1 for non-privileged memory. +*/ +#define ARM_MPU_AP_(RO, NP) ((((RO) & 1U) << 1U) | ((NP) & 1U)) + +/** \brief Region Base Address Register value +* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. +* \param SH Defines the Shareability domain for this memory region. +* \param RO Read-Only: Set to 1 for a read-only memory region. +* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. +* \oaram XN eXecute Never: Set to 1 for a non-executable memory region. +*/ +#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ + (((BASE) & MPU_RBAR_BASE_Msk) | \ + (((SH) << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ + ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ + (((XN) << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) + +/** \brief Region Limit Address Register value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR(LIMIT, IDX) \ + (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ + (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +#if defined(MPU_RLAR_PXN_Pos) + +/** \brief Region Limit Address Register with PXN value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \ + (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ + (((PXN) << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \ + (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +#endif + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; /*!< Region Base Address Register value */ + uint32_t RLAR; /*!< Region Limit Address Register value */ +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DMB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} + +#ifdef MPU_NS +/** Enable the Non-secure MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) +{ + __DMB(); + MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the Non-secure MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable_NS(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} +#endif + +/** Set the memory attribute encoding to the given MPU. +* \param mpu Pointer to the MPU to be configured. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) +{ + const uint8_t reg = idx / 4U; + const uint32_t pos = ((idx % 4U) * 8U); + const uint32_t mask = 0xFFU << pos; + + if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { + return; // invalid index + } + + mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); +} + +/** Set the memory attribute encoding. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU, idx, attr); +} + +#ifdef MPU_NS +/** Set the memory attribute encoding to the Non-secure MPU. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); +} +#endif + +/** Clear and disable the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) +{ + mpu->RNR = rnr; + mpu->RLAR = 0U; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU, rnr); +} + +#ifdef MPU_NS +/** Clear and disable the given Non-secure MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU_NS, rnr); +} +#endif + +/** Configure the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + mpu->RNR = rnr; + mpu->RBAR = rbar; + mpu->RLAR = rlar; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); +} + +#ifdef MPU_NS +/** Configure the given Non-secure MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); +} +#endif + +/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_LoadEx() +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table to the given MPU. +* \param mpu Pointer to the MPU registers to be used. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + if (cnt == 1U) { + mpu->RNR = rnr; + ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); + } else { + uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); + uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; + + mpu->RNR = rnrBase; + while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { + uint32_t c = MPU_TYPE_RALIASES - rnrOffset; + ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); + table += c; + cnt -= c; + rnrOffset = 0U; + rnrBase += MPU_TYPE_RALIASES; + mpu->RNR = rnrBase; + } + + ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); + } +} + +/** Load the given number of MPU regions from a table. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU, rnr, table, cnt); +} + +#ifdef MPU_NS +/** Load the given number of MPU regions from a table to the Non-secure MPU. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); +} +#endif + +#endif + diff --git a/firmware/numpad/Drivers/CMSIS/Include/pac_armv81.h b/firmware/numpad/Drivers/CMSIS/Include/pac_armv81.h new file mode 100644 index 00000000..854b60a2 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/pac_armv81.h @@ -0,0 +1,206 @@ +/****************************************************************************** + * @file pac_armv81.h + * @brief CMSIS PAC key functions for Armv8.1-M PAC extension + * @version V1.0.0 + * @date 23. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef PAC_ARMV81_H +#define PAC_ARMV81_H + + +/* ################### PAC Key functions ########################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_PacKeyFunctions PAC Key functions + \brief Functions that access the PAC keys. + @{ + */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) + +/** + \brief read the PAC key used for privileged mode + \details Reads the PAC key stored in the PAC_KEY_P registers. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __get_PAC_KEY_P (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_p_0\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_p_1\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_p_2\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_p_3\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for privileged mode + \details writes the given PAC key to the PAC_KEY_P registers. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __set_PAC_KEY_P (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_p_0, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_p_1, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_p_2, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_p_3, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief read the PAC key used for unprivileged mode + \details Reads the PAC key stored in the PAC_KEY_U registers. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __get_PAC_KEY_U (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_u_0\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_u_1\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_u_2\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_u_3\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for unprivileged mode + \details writes the given PAC key to the PAC_KEY_U registers. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __set_PAC_KEY_U (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_u_0, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_u_1, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_u_2, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_u_3, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) + +/** + \brief read the PAC key used for privileged mode (non-secure) + \details Reads the PAC key stored in the non-secure PAC_KEY_P registers when in secure mode. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_P_NS (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_p_0_ns\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_p_1_ns\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_p_2_ns\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_p_3_ns\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for privileged mode (non-secure) + \details writes the given PAC key to the non-secure PAC_KEY_P registers when in secure mode. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_P_NS (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_p_0_ns, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_p_1_ns, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_p_2_ns, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_p_3_ns, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief read the PAC key used for unprivileged mode (non-secure) + \details Reads the PAC key stored in the non-secure PAC_KEY_U registers when in secure mode. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_U_NS (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_u_0_ns\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_u_1_ns\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_u_2_ns\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_u_3_ns\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for unprivileged mode (non-secure) + \details writes the given PAC key to the non-secure PAC_KEY_U registers when in secure mode. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_U_NS (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_u_0_ns, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_u_1_ns, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_u_2_ns, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_u_3_ns, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +#endif /* (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) */ + +#endif /* (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) */ + +/*@} end of CMSIS_Core_PacKeyFunctions */ + + +#endif /* PAC_ARMV81_H */ diff --git a/firmware/numpad/Drivers/CMSIS/Include/pmu_armv8.h b/firmware/numpad/Drivers/CMSIS/Include/pmu_armv8.h new file mode 100644 index 00000000..f8f3d893 --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/pmu_armv8.h @@ -0,0 +1,337 @@ +/****************************************************************************** + * @file pmu_armv8.h + * @brief CMSIS PMU API for Armv8.1-M PMU + * @version V1.0.1 + * @date 15. April 2020 + ******************************************************************************/ +/* + * Copyright (c) 2020 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_PMU_ARMV8_H +#define ARM_PMU_ARMV8_H + +/** + * \brief PMU Events + * \note See the Armv8.1-M Architecture Reference Manual for full details on these PMU events. + * */ + +#define ARM_PMU_SW_INCR 0x0000 /*!< Software update to the PMU_SWINC register, architecturally executed and condition code check pass */ +#define ARM_PMU_L1I_CACHE_REFILL 0x0001 /*!< L1 I-Cache refill */ +#define ARM_PMU_L1D_CACHE_REFILL 0x0003 /*!< L1 D-Cache refill */ +#define ARM_PMU_L1D_CACHE 0x0004 /*!< L1 D-Cache access */ +#define ARM_PMU_LD_RETIRED 0x0006 /*!< Memory-reading instruction architecturally executed and condition code check pass */ +#define ARM_PMU_ST_RETIRED 0x0007 /*!< Memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_INST_RETIRED 0x0008 /*!< Instruction architecturally executed */ +#define ARM_PMU_EXC_TAKEN 0x0009 /*!< Exception entry */ +#define ARM_PMU_EXC_RETURN 0x000A /*!< Exception return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_PC_WRITE_RETIRED 0x000C /*!< Software change to the Program Counter (PC). Instruction is architecturally executed and condition code check pass */ +#define ARM_PMU_BR_IMMED_RETIRED 0x000D /*!< Immediate branch architecturally executed */ +#define ARM_PMU_BR_RETURN_RETIRED 0x000E /*!< Function return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_UNALIGNED_LDST_RETIRED 0x000F /*!< Unaligned memory memory-reading or memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BR_MIS_PRED 0x0010 /*!< Mispredicted or not predicted branch speculatively executed */ +#define ARM_PMU_CPU_CYCLES 0x0011 /*!< Cycle */ +#define ARM_PMU_BR_PRED 0x0012 /*!< Predictable branch speculatively executed */ +#define ARM_PMU_MEM_ACCESS 0x0013 /*!< Data memory access */ +#define ARM_PMU_L1I_CACHE 0x0014 /*!< Level 1 instruction cache access */ +#define ARM_PMU_L1D_CACHE_WB 0x0015 /*!< Level 1 data cache write-back */ +#define ARM_PMU_L2D_CACHE 0x0016 /*!< Level 2 data cache access */ +#define ARM_PMU_L2D_CACHE_REFILL 0x0017 /*!< Level 2 data cache refill */ +#define ARM_PMU_L2D_CACHE_WB 0x0018 /*!< Level 2 data cache write-back */ +#define ARM_PMU_BUS_ACCESS 0x0019 /*!< Bus access */ +#define ARM_PMU_MEMORY_ERROR 0x001A /*!< Local memory error */ +#define ARM_PMU_INST_SPEC 0x001B /*!< Instruction speculatively executed */ +#define ARM_PMU_BUS_CYCLES 0x001D /*!< Bus cycles */ +#define ARM_PMU_CHAIN 0x001E /*!< For an odd numbered counter, increment when an overflow occurs on the preceding even-numbered counter on the same PE */ +#define ARM_PMU_L1D_CACHE_ALLOCATE 0x001F /*!< Level 1 data cache allocation without refill */ +#define ARM_PMU_L2D_CACHE_ALLOCATE 0x0020 /*!< Level 2 data cache allocation without refill */ +#define ARM_PMU_BR_RETIRED 0x0021 /*!< Branch instruction architecturally executed */ +#define ARM_PMU_BR_MIS_PRED_RETIRED 0x0022 /*!< Mispredicted branch instruction architecturally executed */ +#define ARM_PMU_STALL_FRONTEND 0x0023 /*!< No operation issued because of the frontend */ +#define ARM_PMU_STALL_BACKEND 0x0024 /*!< No operation issued because of the backend */ +#define ARM_PMU_L2I_CACHE 0x0027 /*!< Level 2 instruction cache access */ +#define ARM_PMU_L2I_CACHE_REFILL 0x0028 /*!< Level 2 instruction cache refill */ +#define ARM_PMU_L3D_CACHE_ALLOCATE 0x0029 /*!< Level 3 data cache allocation without refill */ +#define ARM_PMU_L3D_CACHE_REFILL 0x002A /*!< Level 3 data cache refill */ +#define ARM_PMU_L3D_CACHE 0x002B /*!< Level 3 data cache access */ +#define ARM_PMU_L3D_CACHE_WB 0x002C /*!< Level 3 data cache write-back */ +#define ARM_PMU_LL_CACHE_RD 0x0036 /*!< Last level data cache read */ +#define ARM_PMU_LL_CACHE_MISS_RD 0x0037 /*!< Last level data cache read miss */ +#define ARM_PMU_L1D_CACHE_MISS_RD 0x0039 /*!< Level 1 data cache read miss */ +#define ARM_PMU_OP_COMPLETE 0x003A /*!< Operation retired */ +#define ARM_PMU_OP_SPEC 0x003B /*!< Operation speculatively executed */ +#define ARM_PMU_STALL 0x003C /*!< Stall cycle for instruction or operation not sent for execution */ +#define ARM_PMU_STALL_OP_BACKEND 0x003D /*!< Stall cycle for instruction or operation not sent for execution due to pipeline backend */ +#define ARM_PMU_STALL_OP_FRONTEND 0x003E /*!< Stall cycle for instruction or operation not sent for execution due to pipeline frontend */ +#define ARM_PMU_STALL_OP 0x003F /*!< Instruction or operation slots not occupied each cycle */ +#define ARM_PMU_L1D_CACHE_RD 0x0040 /*!< Level 1 data cache read */ +#define ARM_PMU_LE_RETIRED 0x0100 /*!< Loop end instruction executed */ +#define ARM_PMU_LE_SPEC 0x0101 /*!< Loop end instruction speculatively executed */ +#define ARM_PMU_BF_RETIRED 0x0104 /*!< Branch future instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BF_SPEC 0x0105 /*!< Branch future instruction speculatively executed and condition code check pass */ +#define ARM_PMU_LE_CANCEL 0x0108 /*!< Loop end instruction not taken */ +#define ARM_PMU_BF_CANCEL 0x0109 /*!< Branch future instruction not taken */ +#define ARM_PMU_SE_CALL_S 0x0114 /*!< Call to secure function, resulting in Security state change */ +#define ARM_PMU_SE_CALL_NS 0x0115 /*!< Call to non-secure function, resulting in Security state change */ +#define ARM_PMU_DWT_CMPMATCH0 0x0118 /*!< DWT comparator 0 match */ +#define ARM_PMU_DWT_CMPMATCH1 0x0119 /*!< DWT comparator 1 match */ +#define ARM_PMU_DWT_CMPMATCH2 0x011A /*!< DWT comparator 2 match */ +#define ARM_PMU_DWT_CMPMATCH3 0x011B /*!< DWT comparator 3 match */ +#define ARM_PMU_MVE_INST_RETIRED 0x0200 /*!< MVE instruction architecturally executed */ +#define ARM_PMU_MVE_INST_SPEC 0x0201 /*!< MVE instruction speculatively executed */ +#define ARM_PMU_MVE_FP_RETIRED 0x0204 /*!< MVE floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SPEC 0x0205 /*!< MVE floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_HP_RETIRED 0x0208 /*!< MVE half-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_HP_SPEC 0x0209 /*!< MVE half-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_SP_RETIRED 0x020C /*!< MVE single-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SP_SPEC 0x020D /*!< MVE single-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_MAC_RETIRED 0x0214 /*!< MVE floating-point multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_FP_MAC_SPEC 0x0215 /*!< MVE floating-point multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_INT_RETIRED 0x0224 /*!< MVE integer instruction architecturally executed */ +#define ARM_PMU_MVE_INT_SPEC 0x0225 /*!< MVE integer instruction speculatively executed */ +#define ARM_PMU_MVE_INT_MAC_RETIRED 0x0228 /*!< MVE multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_INT_MAC_SPEC 0x0229 /*!< MVE multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_RETIRED 0x0238 /*!< MVE load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_SPEC 0x0239 /*!< MVE load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_RETIRED 0x023C /*!< MVE load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_SPEC 0x023D /*!< MVE load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_RETIRED 0x0240 /*!< MVE store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_SPEC 0x0241 /*!< MVE store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_CONTIG_RETIRED 0x0244 /*!< MVE contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_CONTIG_SPEC 0x0245 /*!< MVE contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_CONTIG_RETIRED 0x0248 /*!< MVE contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_CONTIG_SPEC 0x0249 /*!< MVE contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_CONTIG_RETIRED 0x024C /*!< MVE contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_CONTIG_SPEC 0x024D /*!< MVE contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED 0x0250 /*!< MVE non-contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC 0x0251 /*!< MVE non-contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED 0x0254 /*!< MVE non-contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_SPEC 0x0255 /*!< MVE non-contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED 0x0258 /*!< MVE non-contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_SPEC 0x0259 /*!< MVE non-contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_MULTI_RETIRED 0x025C /*!< MVE memory instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LDST_MULTI_SPEC 0x025D /*!< MVE memory instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LD_MULTI_RETIRED 0x0260 /*!< MVE memory load instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LD_MULTI_SPEC 0x0261 /*!< MVE memory load instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_ST_MULTI_RETIRED 0x0261 /*!< MVE memory store instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_ST_MULTI_SPEC 0x0265 /*!< MVE memory store instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED 0x028C /*!< MVE unaligned memory load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC 0x028D /*!< MVE unaligned memory load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED 0x0290 /*!< MVE unaligned load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_SPEC 0x0291 /*!< MVE unaligned load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED 0x0294 /*!< MVE unaligned store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_SPEC 0x0295 /*!< MVE unaligned store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298 /*!< MVE unaligned noncontiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC 0x0299 /*!< MVE unaligned noncontiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_RETIRED 0x02A0 /*!< MVE vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_SPEC 0x02A1 /*!< MVE vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_FP_RETIRED 0x02A4 /*!< MVE floating-point vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_FP_SPEC 0x02A5 /*!< MVE floating-point vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_INT_RETIRED 0x02A8 /*!< MVE integer vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_INT_SPEC 0x02A9 /*!< MVE integer vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_PRED 0x02B8 /*!< Cycles where one or more predicated beats architecturally executed */ +#define ARM_PMU_MVE_STALL 0x02CC /*!< Stall cycles caused by an MVE instruction */ +#define ARM_PMU_MVE_STALL_RESOURCE 0x02CD /*!< Stall cycles caused by an MVE instruction because of resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_MEM 0x02CE /*!< Stall cycles caused by an MVE instruction because of memory resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_FP 0x02CF /*!< Stall cycles caused by an MVE instruction because of floating-point resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_INT 0x02D0 /*!< Stall cycles caused by an MVE instruction because of integer resource conflicts */ +#define ARM_PMU_MVE_STALL_BREAK 0x02D3 /*!< Stall cycles caused by an MVE chain break */ +#define ARM_PMU_MVE_STALL_DEPENDENCY 0x02D4 /*!< Stall cycles caused by MVE register dependency */ +#define ARM_PMU_ITCM_ACCESS 0x4007 /*!< Instruction TCM access */ +#define ARM_PMU_DTCM_ACCESS 0x4008 /*!< Data TCM access */ +#define ARM_PMU_TRCEXTOUT0 0x4010 /*!< ETM external output 0 */ +#define ARM_PMU_TRCEXTOUT1 0x4011 /*!< ETM external output 1 */ +#define ARM_PMU_TRCEXTOUT2 0x4012 /*!< ETM external output 2 */ +#define ARM_PMU_TRCEXTOUT3 0x4013 /*!< ETM external output 3 */ +#define ARM_PMU_CTI_TRIGOUT4 0x4018 /*!< Cross-trigger Interface output trigger 4 */ +#define ARM_PMU_CTI_TRIGOUT5 0x4019 /*!< Cross-trigger Interface output trigger 5 */ +#define ARM_PMU_CTI_TRIGOUT6 0x401A /*!< Cross-trigger Interface output trigger 6 */ +#define ARM_PMU_CTI_TRIGOUT7 0x401B /*!< Cross-trigger Interface output trigger 7 */ + +/** \brief PMU Functions */ + +__STATIC_INLINE void ARM_PMU_Enable(void); +__STATIC_INLINE void ARM_PMU_Disable(void); + +__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type); + +__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void); +__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void); + +__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask); +__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask); + +__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void); +__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num); + +__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void); +__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask); + +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask); +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask); + +__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask); + +/** + \brief Enable the PMU +*/ +__STATIC_INLINE void ARM_PMU_Enable(void) +{ + PMU->CTRL |= PMU_CTRL_ENABLE_Msk; +} + +/** + \brief Disable the PMU +*/ +__STATIC_INLINE void ARM_PMU_Disable(void) +{ + PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk; +} + +/** + \brief Set event to count for PMU eventer counter + \param [in] num Event counter (0-30) to configure + \param [in] type Event to count +*/ +__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type) +{ + PMU->EVTYPER[num] = type; +} + +/** + \brief Reset cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void) +{ + PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk; +} + +/** + \brief Reset all event counters +*/ +__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void) +{ + PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk; +} + +/** + \brief Enable counters + \param [in] mask Counters to enable + \note Enables one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask) +{ + PMU->CNTENSET = mask; +} + +/** + \brief Disable counters + \param [in] mask Counters to enable + \note Disables one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask) +{ + PMU->CNTENCLR = mask; +} + +/** + \brief Read cycle counter + \return Cycle count +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void) +{ + return PMU->CCNTR; +} + +/** + \brief Read event counter + \param [in] num Event counter (0-30) to read + \return Event count +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num) +{ + return PMU_EVCNTR_CNT_Msk & PMU->EVCNTR[num]; +} + +/** + \brief Read counter overflow status + \return Counter overflow status bits for the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void) +{ + return PMU->OVSSET; +} + +/** + \brief Clear counter overflow status + \param [in] mask Counter overflow status bits to clear + \note Clears overflow status bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask) +{ + PMU->OVSCLR = mask; +} + +/** + \brief Enable counter overflow interrupt request + \param [in] mask Counter overflow interrupt request bits to set + \note Sets overflow interrupt request bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask) +{ + PMU->INTENSET = mask; +} + +/** + \brief Disable counter overflow interrupt request + \param [in] mask Counter overflow interrupt request bits to clear + \note Clears overflow interrupt request bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask) +{ + PMU->INTENCLR = mask; +} + +/** + \brief Software increment event counter + \param [in] mask Counters to increment + \note Software increment bits for one or more event counters (0-30) +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask) +{ + PMU->SWINC = mask; +} + +#endif diff --git a/firmware/numpad/Drivers/CMSIS/Include/tz_context.h b/firmware/numpad/Drivers/CMSIS/Include/tz_context.h new file mode 100644 index 00000000..0d09749f --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/Include/tz_context.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * @file tz_context.h + * @brief Context Management for Armv8-M TrustZone + * @version V1.0.1 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef TZ_CONTEXT_H +#define TZ_CONTEXT_H + +#include + +#ifndef TZ_MODULEID_T +#define TZ_MODULEID_T +/// \details Data type that identifies secure software modules called by a process. +typedef uint32_t TZ_ModuleId_t; +#endif + +/// \details TZ Memory ID identifies an allocated memory slot. +typedef uint32_t TZ_MemoryId_t; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +uint32_t TZ_InitContextSystem_S (void); + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); + +#endif // TZ_CONTEXT_H diff --git a/firmware/numpad/Drivers/CMSIS/LICENSE.txt b/firmware/numpad/Drivers/CMSIS/LICENSE.txt new file mode 100644 index 00000000..8dada3ed --- /dev/null +++ b/firmware/numpad/Drivers/CMSIS/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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 + + http://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. diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h new file mode 100644 index 00000000..c3b84738 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -0,0 +1,4422 @@ +/** + ****************************************************************************** + * @file stm32_hal_legacy.h + * @author MCD Application Team + * @brief This file contains aliases definition for the STM32Cube HAL constants + * macros and functions maintained for legacy purpose. + ****************************************************************************** + * @attention + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose + * @{ + */ +#define AES_FLAG_RDERR CRYP_FLAG_RDERR +#define AES_FLAG_WRERR CRYP_FLAG_WRERR +#define AES_CLEARFLAG_CCF CRYP_CLEARFLAG_CCF +#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR +#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR +#if defined(STM32H7) || defined(STM32MP1) +#define CRYP_DATATYPE_32B CRYP_NO_SWAP +#define CRYP_DATATYPE_16B CRYP_HALFWORD_SWAP +#define CRYP_DATATYPE_8B CRYP_BYTE_SWAP +#define CRYP_DATATYPE_1B CRYP_BIT_SWAP +#endif /* STM32H7 || STM32MP1 */ +/** + * @} + */ + +/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose + * @{ + */ +#define ADC_RESOLUTION12b ADC_RESOLUTION_12B +#define ADC_RESOLUTION10b ADC_RESOLUTION_10B +#define ADC_RESOLUTION8b ADC_RESOLUTION_8B +#define ADC_RESOLUTION6b ADC_RESOLUTION_6B +#define OVR_DATA_OVERWRITTEN ADC_OVR_DATA_OVERWRITTEN +#define OVR_DATA_PRESERVED ADC_OVR_DATA_PRESERVED +#define EOC_SINGLE_CONV ADC_EOC_SINGLE_CONV +#define EOC_SEQ_CONV ADC_EOC_SEQ_CONV +#define EOC_SINGLE_SEQ_CONV ADC_EOC_SINGLE_SEQ_CONV +#define REGULAR_GROUP ADC_REGULAR_GROUP +#define INJECTED_GROUP ADC_INJECTED_GROUP +#define REGULAR_INJECTED_GROUP ADC_REGULAR_INJECTED_GROUP +#define AWD_EVENT ADC_AWD_EVENT +#define AWD1_EVENT ADC_AWD1_EVENT +#define AWD2_EVENT ADC_AWD2_EVENT +#define AWD3_EVENT ADC_AWD3_EVENT +#define OVR_EVENT ADC_OVR_EVENT +#define JQOVF_EVENT ADC_JQOVF_EVENT +#define ALL_CHANNELS ADC_ALL_CHANNELS +#define REGULAR_CHANNELS ADC_REGULAR_CHANNELS +#define INJECTED_CHANNELS ADC_INJECTED_CHANNELS +#define SYSCFG_FLAG_SENSOR_ADC ADC_FLAG_SENSOR +#define SYSCFG_FLAG_VREF_ADC ADC_FLAG_VREFINT +#define ADC_CLOCKPRESCALER_PCLK_DIV1 ADC_CLOCK_SYNC_PCLK_DIV1 +#define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 +#define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 +#define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 +#define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO +#define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 +#define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 +#define ADC_EXTERNALTRIG_EDGE_NONE ADC_EXTERNALTRIGCONVEDGE_NONE +#define ADC_EXTERNALTRIG_EDGE_RISING ADC_EXTERNALTRIGCONVEDGE_RISING +#define ADC_EXTERNALTRIG_EDGE_FALLING ADC_EXTERNALTRIGCONVEDGE_FALLING +#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING +#define ADC_SAMPLETIME_2CYCLE_5 ADC_SAMPLETIME_2CYCLES_5 + +#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY +#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY +#define HAL_ADC_STATE_EOC_REG HAL_ADC_STATE_REG_EOC +#define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC +#define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL +#define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ + +#if defined(STM32U5) +#define ADC_SAMPLETIME_5CYCLE ADC_SAMPLETIME_5CYCLES +#define ADC_SAMPLETIME_391CYCLES_5 ADC_SAMPLETIME_391CYCLES +#define ADC4_SAMPLETIME_160CYCLES_5 ADC4_SAMPLETIME_814CYCLES_5 +#endif /* STM32U5 */ + +#if defined(STM32H5) +#define ADC_CHANNEL_VCORE ADC_CHANNEL_VDDCORE +#endif /* STM32H5 */ +/** + * @} + */ + +/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose + * @{ + */ +#define COMP_WINDOWMODE_DISABLED COMP_WINDOWMODE_DISABLE +#define COMP_WINDOWMODE_ENABLED COMP_WINDOWMODE_ENABLE +#define COMP_EXTI_LINE_COMP1_EVENT COMP_EXTI_LINE_COMP1 +#define COMP_EXTI_LINE_COMP2_EVENT COMP_EXTI_LINE_COMP2 +#define COMP_EXTI_LINE_COMP3_EVENT COMP_EXTI_LINE_COMP3 +#define COMP_EXTI_LINE_COMP4_EVENT COMP_EXTI_LINE_COMP4 +#define COMP_EXTI_LINE_COMP5_EVENT COMP_EXTI_LINE_COMP5 +#define COMP_EXTI_LINE_COMP6_EVENT COMP_EXTI_LINE_COMP6 +#define COMP_EXTI_LINE_COMP7_EVENT COMP_EXTI_LINE_COMP7 +#if defined(STM32L0) +#define COMP_LPTIMCONNECTION_ENABLED ((uint32_t)0x00000003U) /*!< COMPX output generic naming: connected to LPTIM + input 1 for COMP1, LPTIM input 2 for COMP2 */ +#endif +#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR +#if defined(STM32F373xC) || defined(STM32F378xx) +#define COMP_OUTPUT_TIM3IC1 COMP_OUTPUT_COMP1_TIM3IC1 +#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32L0) || defined(STM32L4) +#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON + +#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1 +#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2 +#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3 +#define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 +#define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 +#define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 + +#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT +#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT +#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT +#define COMP_INVERTINGINPUT_VREFINT COMP_INPUT_MINUS_VREFINT +#define COMP_INVERTINGINPUT_DAC1_CH1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC1_CH2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_DAC1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO1 COMP_INPUT_MINUS_IO1 +#if defined(STM32L0) +/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2), */ +/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding */ +/* to the second dedicated IO (only for COMP2). */ +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO2 +#else +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3 +#endif +#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4 +#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5 + +#define COMP_OUTPUTLEVEL_LOW COMP_OUTPUT_LEVEL_LOW +#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH + +/* Note: Literal "COMP_FLAG_LOCK" kept for legacy purpose. */ +/* To check COMP lock state, use macro "__HAL_COMP_IS_LOCKED()". */ +#if defined(COMP_CSR_LOCK) +#define COMP_FLAG_LOCK COMP_CSR_LOCK +#elif defined(COMP_CSR_COMP1LOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK +#elif defined(COMP_CSR_COMPxLOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK +#endif + +#if defined(STM32L4) +#define COMP_BLANKINGSRCE_TIM1OC5 COMP_BLANKINGSRC_TIM1_OC5_COMP1 +#define COMP_BLANKINGSRCE_TIM2OC3 COMP_BLANKINGSRC_TIM2_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC3 COMP_BLANKINGSRC_TIM3_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC4 COMP_BLANKINGSRC_TIM3_OC4_COMP2 +#define COMP_BLANKINGSRCE_TIM8OC5 COMP_BLANKINGSRC_TIM8_OC5_COMP2 +#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2 +#define COMP_BLANKINGSRCE_NONE COMP_BLANKINGSRC_NONE +#endif + +#if defined(STM32L0) +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWSPEED COMP_POWERMODE_ULTRALOWPOWER +#else +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_HIGHSPEED +#define COMP_MODE_MEDIUMSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWPOWER COMP_POWERMODE_LOWPOWER +#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER +#endif + +#endif + +#if defined(STM32U5) +#define __HAL_COMP_COMP1_EXTI_CLEAR_RASING_FLAG __HAL_COMP_COMP1_EXTI_CLEAR_RISING_FLAG +#endif + +/** + * @} + */ + +/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose + * @{ + */ +#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig +#if defined(STM32U5) +#define MPU_DEVICE_nGnRnE MPU_DEVICE_NGNRNE +#define MPU_DEVICE_nGnRE MPU_DEVICE_NGNRE +#define MPU_DEVICE_nGRE MPU_DEVICE_NGRE +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup CRC_Aliases CRC API aliases + * @{ + */ +#if defined(STM32H5) || defined(STM32C0) +#else +#define HAL_CRC_Input_Data_Reverse HAL_CRCEx_Input_Data_Reverse /*!< Aliased to HAL_CRCEx_Input_Data_Reverse for + inter STM32 series compatibility */ +#define HAL_CRC_Output_Data_Reverse HAL_CRCEx_Output_Data_Reverse /*!< Aliased to HAL_CRCEx_Output_Data_Reverse for + inter STM32 series compatibility */ +#endif +/** + * @} + */ + +/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE +#define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define DAC1_CHANNEL_1 DAC_CHANNEL_1 +#define DAC1_CHANNEL_2 DAC_CHANNEL_2 +#define DAC2_CHANNEL_1 DAC_CHANNEL_1 +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 +#define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE +#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE +#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE + +#if defined(STM32G4) || defined(STM32H7) || defined (STM32U5) +#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL +#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL +#endif + +#if defined(STM32U5) +#define DAC_TRIGGER_STOP_LPTIM1_OUT DAC_TRIGGER_STOP_LPTIM1_CH1 +#define DAC_TRIGGER_STOP_LPTIM3_OUT DAC_TRIGGER_STOP_LPTIM3_CH1 +#define DAC_TRIGGER_LPTIM1_OUT DAC_TRIGGER_LPTIM1_CH1 +#define DAC_TRIGGER_LPTIM3_OUT DAC_TRIGGER_LPTIM3_CH1 +#endif + +#if defined(STM32H5) +#define DAC_TRIGGER_LPTIM1_OUT DAC_TRIGGER_LPTIM1_CH1 +#define DAC_TRIGGER_LPTIM2_OUT DAC_TRIGGER_LPTIM2_CH1 +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || \ + defined(STM32F4) || defined(STM32G4) +#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID +#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID +#endif + +/** + * @} + */ + +/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 +#define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE +#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || \ + defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI +#endif + +#endif /* STM32L4 */ + +#if defined(STM32G0) +#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2 +#define DMA_REQUEST_TIM16_TRIG_COM DMA_REQUEST_TIM16_COM +#define DMA_REQUEST_TIM17_TRIG_COM DMA_REQUEST_TIM17_COM + +#define LL_DMAMUX_REQ_TIM16_TRIG_COM LL_DMAMUX_REQ_TIM16_COM +#define LL_DMAMUX_REQ_TIM17_TRIG_COM LL_DMAMUX_REQ_TIM17_COM +#endif + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT +#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT + +#endif /* STM32H7 */ + +#if defined(STM32U5) +#define GPDMA1_REQUEST_DCMI GPDMA1_REQUEST_DCMI_PSSI +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD +#define TYPEPROGRAM_DOUBLEWORD FLASH_TYPEPROGRAM_DOUBLEWORD +#define TYPEERASE_SECTORS FLASH_TYPEERASE_SECTORS +#define TYPEERASE_PAGES FLASH_TYPEERASE_PAGES +#define TYPEERASE_PAGEERASE FLASH_TYPEERASE_PAGES +#define TYPEERASE_MASSERASE FLASH_TYPEERASE_MASSERASE +#define WRPSTATE_DISABLE OB_WRPSTATE_DISABLE +#define WRPSTATE_ENABLE OB_WRPSTATE_ENABLE +#define HAL_FLASH_TIMEOUT_VALUE FLASH_TIMEOUT_VALUE +#define OBEX_PCROP OPTIONBYTE_PCROP +#define OBEX_BOOTCONFIG OPTIONBYTE_BOOTCONFIG +#define PCROPSTATE_DISABLE OB_PCROP_STATE_DISABLE +#define PCROPSTATE_ENABLE OB_PCROP_STATE_ENABLE +#define TYPEERASEDATA_BYTE FLASH_TYPEERASEDATA_BYTE +#define TYPEERASEDATA_HALFWORD FLASH_TYPEERASEDATA_HALFWORD +#define TYPEERASEDATA_WORD FLASH_TYPEERASEDATA_WORD +#define TYPEPROGRAMDATA_BYTE FLASH_TYPEPROGRAMDATA_BYTE +#define TYPEPROGRAMDATA_HALFWORD FLASH_TYPEPROGRAMDATA_HALFWORD +#define TYPEPROGRAMDATA_WORD FLASH_TYPEPROGRAMDATA_WORD +#define TYPEPROGRAMDATA_FASTBYTE FLASH_TYPEPROGRAMDATA_FASTBYTE +#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD +#define TYPEPROGRAMDATA_FASTWORD FLASH_TYPEPROGRAMDATA_FASTWORD +#if !defined(STM32F2) && !defined(STM32F4) && !defined(STM32F7) && !defined(STM32H7) && !defined(STM32H5) +#define PAGESIZE FLASH_PAGE_SIZE +#endif /* STM32F2 && STM32F4 && STM32F7 && STM32H7 && STM32H5 */ +#define TYPEPROGRAM_FASTBYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_FASTHALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_FASTWORD FLASH_TYPEPROGRAM_WORD +#define VOLTAGE_RANGE_1 FLASH_VOLTAGE_RANGE_1 +#define VOLTAGE_RANGE_2 FLASH_VOLTAGE_RANGE_2 +#define VOLTAGE_RANGE_3 FLASH_VOLTAGE_RANGE_3 +#define VOLTAGE_RANGE_4 FLASH_VOLTAGE_RANGE_4 +#define TYPEPROGRAM_FAST FLASH_TYPEPROGRAM_FAST +#define TYPEPROGRAM_FAST_AND_LAST FLASH_TYPEPROGRAM_FAST_AND_LAST +#define WRPAREA_BANK1_AREAA OB_WRPAREA_BANK1_AREAA +#define WRPAREA_BANK1_AREAB OB_WRPAREA_BANK1_AREAB +#define WRPAREA_BANK2_AREAA OB_WRPAREA_BANK2_AREAA +#define WRPAREA_BANK2_AREAB OB_WRPAREA_BANK2_AREAB +#define IWDG_STDBY_FREEZE OB_IWDG_STDBY_FREEZE +#define IWDG_STDBY_ACTIVE OB_IWDG_STDBY_RUN +#define IWDG_STOP_FREEZE OB_IWDG_STOP_FREEZE +#define IWDG_STOP_ACTIVE OB_IWDG_STOP_RUN +#define FLASH_ERROR_NONE HAL_FLASH_ERROR_NONE +#define FLASH_ERROR_RD HAL_FLASH_ERROR_RD +#define FLASH_ERROR_PG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_PGP HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_WRP HAL_FLASH_ERROR_WRP +#define FLASH_ERROR_OPTV HAL_FLASH_ERROR_OPTV +#define FLASH_ERROR_OPTVUSR HAL_FLASH_ERROR_OPTVUSR +#define FLASH_ERROR_PROG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_OP HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_PGA HAL_FLASH_ERROR_PGA +#define FLASH_ERROR_SIZE HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_SIZ HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_PGS HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_MIS HAL_FLASH_ERROR_MIS +#define FLASH_ERROR_FAST HAL_FLASH_ERROR_FAST +#define FLASH_ERROR_FWWERR HAL_FLASH_ERROR_FWWERR +#define FLASH_ERROR_NOTZERO HAL_FLASH_ERROR_NOTZERO +#define FLASH_ERROR_OPERATION HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_ERS HAL_FLASH_ERROR_ERS +#define OB_WDG_SW OB_IWDG_SW +#define OB_WDG_HW OB_IWDG_HW +#define OB_SDADC12_VDD_MONITOR_SET OB_SDACD_VDD_MONITOR_SET +#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET +#define OB_RAM_PARITY_CHECK_SET OB_SRAM_PARITY_SET +#define OB_RAM_PARITY_CHECK_RESET OB_SRAM_PARITY_RESET +#define IS_OB_SDADC12_VDD_MONITOR IS_OB_SDACD_VDD_MONITOR +#define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 +#define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 +#define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) || defined(STM32C0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2 +#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2 +#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2 +#define FLASH_FLAG_WDW FLASH_FLAG_WBNE +#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL +#endif /* STM32H7 */ +#if defined(STM32H7RS) +#define FLASH_OPTKEY1 FLASH_OPT_KEY1 +#define FLASH_OPTKEY2 FLASH_OPT_KEY2 +#endif /* STM32H7RS */ +#if defined(STM32U5) +#define OB_USER_nRST_STOP OB_USER_NRST_STOP +#define OB_USER_nRST_STDBY OB_USER_NRST_STDBY +#define OB_USER_nRST_SHDW OB_USER_NRST_SHDW +#define OB_USER_nSWBOOT0 OB_USER_NSWBOOT0 +#define OB_USER_nBOOT0 OB_USER_NBOOT0 +#define OB_nBOOT0_RESET OB_NBOOT0_RESET +#define OB_nBOOT0_SET OB_NBOOT0_SET +#define OB_USER_SRAM134_RST OB_USER_SRAM_RST +#define OB_SRAM134_RST_ERASE OB_SRAM_RST_ERASE +#define OB_SRAM134_RST_NOT_ERASE OB_SRAM_RST_NOT_ERASE +#endif /* STM32U5 */ +#if defined(STM32U0) +#define OB_USER_nRST_STOP OB_USER_NRST_STOP +#define OB_USER_nRST_STDBY OB_USER_NRST_STDBY +#define OB_USER_nRST_SHDW OB_USER_NRST_SHDW +#define OB_USER_nBOOT_SEL OB_USER_NBOOT_SEL +#define OB_USER_nBOOT0 OB_USER_NBOOT0 +#define OB_USER_nBOOT1 OB_USER_NBOOT1 +#define OB_nBOOT0_RESET OB_NBOOT0_RESET +#define OB_nBOOT0_SET OB_NBOOT0_SET +#endif /* STM32U0 */ + +/** + * @} + */ + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + +/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose + * @{ + */ + +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7 I2C_FASTMODEPLUS_PB7 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8 I2C_FASTMODEPLUS_PB8 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9 I2C_FASTMODEPLUS_PB9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1 +#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2 +#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3 +#if defined(STM32G4) + +#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster +#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster +#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD +#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD +#endif /* STM32G4 */ + +#if defined(STM32U5) + +#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOAnalogBooster +#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOAnalogBooster +#define HAL_SYSCFG_EnableIOAnalogSwitchVoltageSelection HAL_SYSCFG_EnableIOAnalogVoltageSelection +#define HAL_SYSCFG_DisableIOAnalogSwitchVoltageSelection HAL_SYSCFG_DisableIOAnalogVoltageSelection + +#endif /* STM32U5 */ + +#if defined(STM32H5) +#define SYSCFG_IT_FPU_IOC SBS_IT_FPU_IOC +#define SYSCFG_IT_FPU_DZC SBS_IT_FPU_DZC +#define SYSCFG_IT_FPU_UFC SBS_IT_FPU_UFC +#define SYSCFG_IT_FPU_OFC SBS_IT_FPU_OFC +#define SYSCFG_IT_FPU_IDC SBS_IT_FPU_IDC +#define SYSCFG_IT_FPU_IXC SBS_IT_FPU_IXC + +#define SYSCFG_BREAK_FLASH_ECC SBS_BREAK_FLASH_ECC +#define SYSCFG_BREAK_PVD SBS_BREAK_PVD +#define SYSCFG_BREAK_SRAM_ECC SBS_BREAK_SRAM_ECC +#define SYSCFG_BREAK_LOCKUP SBS_BREAK_LOCKUP + +#define SYSCFG_VREFBUF_VOLTAGE_SCALE0 VREFBUF_VOLTAGE_SCALE0 +#define SYSCFG_VREFBUF_VOLTAGE_SCALE1 VREFBUF_VOLTAGE_SCALE1 +#define SYSCFG_VREFBUF_VOLTAGE_SCALE2 VREFBUF_VOLTAGE_SCALE2 +#define SYSCFG_VREFBUF_VOLTAGE_SCALE3 VREFBUF_VOLTAGE_SCALE3 + +#define SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE VREFBUF_HIGH_IMPEDANCE_DISABLE +#define SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE VREFBUF_HIGH_IMPEDANCE_ENABLE + +#define SYSCFG_FASTMODEPLUS_PB6 SBS_FASTMODEPLUS_PB6 +#define SYSCFG_FASTMODEPLUS_PB7 SBS_FASTMODEPLUS_PB7 +#define SYSCFG_FASTMODEPLUS_PB8 SBS_FASTMODEPLUS_PB8 +#define SYSCFG_FASTMODEPLUS_PB9 SBS_FASTMODEPLUS_PB9 + +#define SYSCFG_ETH_MII SBS_ETH_MII +#define SYSCFG_ETH_RMII SBS_ETH_RMII +#define IS_SYSCFG_ETHERNET_CONFIG IS_SBS_ETHERNET_CONFIG + +#define SYSCFG_MEMORIES_ERASE_FLAG_IPMEE SBS_MEMORIES_ERASE_FLAG_IPMEE +#define SYSCFG_MEMORIES_ERASE_FLAG_MCLR SBS_MEMORIES_ERASE_FLAG_MCLR +#define IS_SYSCFG_MEMORIES_ERASE_FLAG IS_SBS_MEMORIES_ERASE_FLAG + +#define IS_SYSCFG_CODE_CONFIG IS_SBS_CODE_CONFIG + +#define SYSCFG_MPU_NSEC SBS_MPU_NSEC +#define SYSCFG_VTOR_NSEC SBS_VTOR_NSEC +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define SYSCFG_SAU SBS_SAU +#define SYSCFG_MPU_SEC SBS_MPU_SEC +#define SYSCFG_VTOR_AIRCR_SEC SBS_VTOR_AIRCR_SEC +#define SYSCFG_LOCK_ALL SBS_LOCK_ALL +#else +#define SYSCFG_LOCK_ALL SBS_LOCK_ALL +#endif /* __ARM_FEATURE_CMSE */ + +#define SYSCFG_CLK SBS_CLK +#define SYSCFG_CLASSB SBS_CLASSB +#define SYSCFG_FPU SBS_FPU +#define SYSCFG_ALL SBS_ALL + +#define SYSCFG_SEC SBS_SEC +#define SYSCFG_NSEC SBS_NSEC + +#define __HAL_SYSCFG_FPU_INTERRUPT_ENABLE __HAL_SBS_FPU_INTERRUPT_ENABLE +#define __HAL_SYSCFG_FPU_INTERRUPT_DISABLE __HAL_SBS_FPU_INTERRUPT_DISABLE + +#define __HAL_SYSCFG_BREAK_ECC_LOCK __HAL_SBS_BREAK_ECC_LOCK +#define __HAL_SYSCFG_BREAK_LOCKUP_LOCK __HAL_SBS_BREAK_LOCKUP_LOCK +#define __HAL_SYSCFG_BREAK_PVD_LOCK __HAL_SBS_BREAK_PVD_LOCK +#define __HAL_SYSCFG_BREAK_SRAM_ECC_LOCK __HAL_SBS_BREAK_SRAM_ECC_LOCK + +#define __HAL_SYSCFG_FASTMODEPLUS_ENABLE __HAL_SBS_FASTMODEPLUS_ENABLE +#define __HAL_SYSCFG_FASTMODEPLUS_DISABLE __HAL_SBS_FASTMODEPLUS_DISABLE + +#define __HAL_SYSCFG_GET_MEMORIES_ERASE_STATUS __HAL_SBS_GET_MEMORIES_ERASE_STATUS +#define __HAL_SYSCFG_CLEAR_MEMORIES_ERASE_STATUS __HAL_SBS_CLEAR_MEMORIES_ERASE_STATUS + +#define IS_SYSCFG_FPU_INTERRUPT IS_SBS_FPU_INTERRUPT +#define IS_SYSCFG_BREAK_CONFIG IS_SBS_BREAK_CONFIG +#define IS_SYSCFG_VREFBUF_VOLTAGE_SCALE IS_VREFBUF_VOLTAGE_SCALE +#define IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE IS_VREFBUF_HIGH_IMPEDANCE +#define IS_SYSCFG_VREFBUF_TRIMMING IS_VREFBUF_TRIMMING +#define IS_SYSCFG_FASTMODEPLUS IS_SBS_FASTMODEPLUS +#define IS_SYSCFG_ITEMS_ATTRIBUTES IS_SBS_ITEMS_ATTRIBUTES +#define IS_SYSCFG_ATTRIBUTES IS_SBS_ATTRIBUTES +#define IS_SYSCFG_LOCK_ITEMS IS_SBS_LOCK_ITEMS + +#define HAL_SYSCFG_VREFBUF_VoltageScalingConfig HAL_VREFBUF_VoltageScalingConfig +#define HAL_SYSCFG_VREFBUF_HighImpedanceConfig HAL_VREFBUF_HighImpedanceConfig +#define HAL_SYSCFG_VREFBUF_TrimmingConfig HAL_VREFBUF_TrimmingConfig +#define HAL_SYSCFG_EnableVREFBUF HAL_EnableVREFBUF +#define HAL_SYSCFG_DisableVREFBUF HAL_DisableVREFBUF + +#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SBS_EnableIOAnalogSwitchBooster +#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SBS_DisableIOAnalogSwitchBooster +#define HAL_SYSCFG_ETHInterfaceSelect HAL_SBS_ETHInterfaceSelect + +#define HAL_SYSCFG_Lock HAL_SBS_Lock +#define HAL_SYSCFG_GetLock HAL_SBS_GetLock + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define HAL_SYSCFG_ConfigAttributes HAL_SBS_ConfigAttributes +#define HAL_SYSCFG_GetConfigAttributes HAL_SBS_GetConfigAttributes +#endif /* __ARM_FEATURE_CMSE */ + +#endif /* STM32H5 */ + + +/** + * @} + */ + + +/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose + * @{ + */ +#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) +#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE +#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE +#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8 +#define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) +#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE +#define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE +#define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 +#define FMC_NAND_MEM_BUS_WIDTH_16 FMC_NAND_PCC_MEM_BUS_WIDTH_16 +#endif +/** + * @} + */ + +/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef +#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef +/** + * @} + */ + +/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose + * @{ + */ +#define GET_GPIO_SOURCE GPIO_GET_INDEX +#define GET_GPIO_INDEX GPIO_GET_INDEX + +#if defined(STM32F4) +#define GPIO_AF12_SDMMC GPIO_AF12_SDIO +#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO +#endif + +#if defined(STM32F7) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32L4) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 + +#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \ + defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx) +#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS +#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS +#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS +#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || \ + STM32H757xx */ +#endif /* STM32H7 */ + +#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1 +#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1 +#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1 + +#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || \ + defined(STM32G4) || defined(STM32H7) || defined(STM32WB) || defined(STM32U5) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7 || STM32WB || STM32U5*/ + +#if defined(STM32L1) +#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L1 */ + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_HIGH +#endif /* STM32F0 || STM32F3 || STM32F1 */ + +#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1 + +#if defined(STM32U5) || defined(STM32H5) +#define GPIO_AF0_RTC_50Hz GPIO_AF0_RTC_50HZ +#endif /* STM32U5 || STM32H5 */ +#if defined(STM32U5) +#define GPIO_AF0_S2DSTOP GPIO_AF0_SRDSTOP +#define GPIO_AF11_LPGPIO GPIO_AF11_LPGPIO1 +#endif /* STM32U5 */ + +#if defined(STM32WBA) +#define GPIO_AF11_RF_ANTSW0 GPIO_AF11_RF +#define GPIO_AF11_RF_ANTSW1 GPIO_AF11_RF +#define GPIO_AF11_RF_ANTSW2 GPIO_AF11_RF +#define GPIO_AF11_RF_IO1 GPIO_AF11_RF +#define GPIO_AF11_RF_IO2 GPIO_AF11_RF +#define GPIO_AF11_RF_IO3 GPIO_AF11_RF +#define GPIO_AF11_RF_IO4 GPIO_AF11_RF +#define GPIO_AF11_RF_IO5 GPIO_AF11_RF +#define GPIO_AF11_RF_IO6 GPIO_AF11_RF +#define GPIO_AF11_RF_IO7 GPIO_AF11_RF +#define GPIO_AF11_RF_IO8 GPIO_AF11_RF +#define GPIO_AF11_RF_IO9 GPIO_AF11_RF +#endif /* STM32WBA */ +/** + * @} + */ + +/** @defgroup HAL_GTZC_Aliased_Defines HAL GTZC Aliased Defines maintained for legacy purpose + * @{ + */ +#if defined(STM32U5) +#define GTZC_PERIPH_DCMI GTZC_PERIPH_DCMI_PSSI +#define GTZC_PERIPH_LTDC GTZC_PERIPH_LTDCUSB +#endif /* STM32U5 */ +#if defined(STM32H5) +#define GTZC_PERIPH_DAC12 GTZC_PERIPH_DAC1 +#define GTZC_PERIPH_ADC12 GTZC_PERIPH_ADC +#define GTZC_PERIPH_USBFS GTZC_PERIPH_USB +#endif /* STM32H5 */ +#if defined(STM32H5) || defined(STM32U5) +#define GTZC_MCPBB_NB_VCTR_REG_MAX GTZC_MPCBB_NB_VCTR_REG_MAX +#define GTZC_MCPBB_NB_LCK_VCTR_REG_MAX GTZC_MPCBB_NB_LCK_VCTR_REG_MAX +#define GTZC_MCPBB_SUPERBLOCK_UNLOCKED GTZC_MPCBB_SUPERBLOCK_UNLOCKED +#define GTZC_MCPBB_SUPERBLOCK_LOCKED GTZC_MPCBB_SUPERBLOCK_LOCKED +#define GTZC_MCPBB_BLOCK_NSEC GTZC_MPCBB_BLOCK_NSEC +#define GTZC_MCPBB_BLOCK_SEC GTZC_MPCBB_BLOCK_SEC +#define GTZC_MCPBB_BLOCK_NPRIV GTZC_MPCBB_BLOCK_NPRIV +#define GTZC_MCPBB_BLOCK_PRIV GTZC_MPCBB_BLOCK_PRIV +#define GTZC_MCPBB_LOCK_OFF GTZC_MPCBB_LOCK_OFF +#define GTZC_MCPBB_LOCK_ON GTZC_MPCBB_LOCK_ON +#endif /* STM32H5 || STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define HRTIM_TIMDELAYEDPROTECTION_DISABLED HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 + +#define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER +#define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER +#define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD +#define __HAL_HRTIM_GetPeriod __HAL_HRTIM_GETPERIOD +#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER +#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER +#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE +#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE + +#if defined(STM32F3) || defined(STM32G4) || defined(STM32H7) +#define HRTIMInterruptResquests HRTIMInterruptRequests +#endif /* STM32F3 || STM32G4 || STM32H7 */ + +#if defined(STM32G4) +#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig +#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable +#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable +#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset +#define HRTIM_TIMEEVENT_A HRTIM_EVENTCOUNTER_A +#define HRTIM_TIMEEVENT_B HRTIM_EVENTCOUNTER_B +#define HRTIM_TIMEEVENTRESETMODE_UNCONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_UNCONDITIONAL +#define HRTIM_TIMEEVENTRESETMODE_CONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_CONDITIONAL +#endif /* STM32G4 */ + +#if defined(STM32H7) +#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9 + +#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9 +#endif /* STM32H7 */ + +#if defined(STM32F3) +/** @brief Constants defining available sources associated to external events. + */ +#define HRTIM_EVENTSRC_1 (0x00000000U) +#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0) +#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1) +#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0) + +/** @brief Constants defining the DLL calibration periods (in micro seconds) + */ +#define HRTIM_CALIBRATIONRATE_7300 0x00000000U +#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0) +#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1) +#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0) +#endif /* STM32F3 */ + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2C_DUALADDRESS_DISABLED I2C_DUALADDRESS_DISABLE +#define I2C_DUALADDRESS_ENABLED I2C_DUALADDRESS_ENABLE +#define I2C_GENERALCALL_DISABLED I2C_GENERALCALL_DISABLE +#define I2C_GENERALCALL_ENABLED I2C_GENERALCALL_ENABLE +#define I2C_NOSTRETCH_DISABLED I2C_NOSTRETCH_DISABLE +#define I2C_NOSTRETCH_ENABLED I2C_NOSTRETCH_ENABLE +#define I2C_ANALOGFILTER_ENABLED I2C_ANALOGFILTER_ENABLE +#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE +#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || \ + defined(STM32L1) || defined(STM32F7) +#define HAL_I2C_STATE_MEM_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MEM_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_SLAVE_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_SLAVE_BUSY_RX HAL_I2C_STATE_BUSY_RX +#endif +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose + * @{ + */ +#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE +#define IRDA_ONE_BIT_SAMPLE_ENABLED IRDA_ONE_BIT_SAMPLE_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define KR_KEY_RELOAD IWDG_KEY_RELOAD +#define KR_KEY_ENABLE IWDG_KEY_ENABLE +#define KR_KEY_EWA IWDG_KEY_WRITE_ACCESS_ENABLE +#define KR_KEY_DWA IWDG_KEY_WRITE_ACCESS_DISABLE +/** + * @} + */ + +/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose + * @{ + */ + +#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION +#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS LPTIM_CLOCKSAMPLETIME_2TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS LPTIM_CLOCKSAMPLETIME_4TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS LPTIM_CLOCKSAMPLETIME_8TRANSITIONS + +#define LPTIM_CLOCKPOLARITY_RISINGEDGE LPTIM_CLOCKPOLARITY_RISING +#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING +#define LPTIM_CLOCKPOLARITY_BOTHEDGES LPTIM_CLOCKPOLARITY_RISING_FALLING + +#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION +#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS + +/* The following 3 definition have also been present in a temporary version of lptim.h */ +/* They need to be renamed also to the right name, just in case */ +#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS + + +/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_LPTIM_ReadCompare HAL_LPTIM_ReadCapturedValue +/** + * @} + */ + +#if defined(STM32U5) +#define LPTIM_ISR_CC1 LPTIM_ISR_CC1IF +#define LPTIM_ISR_CC2 LPTIM_ISR_CC2IF +#define LPTIM_CHANNEL_ALL 0x00000000U +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_NAND_Read_Page HAL_NAND_Read_Page_8b +#define HAL_NAND_Write_Page HAL_NAND_Write_Page_8b +#define HAL_NAND_Read_SpareArea HAL_NAND_Read_SpareArea_8b +#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b + +#define NAND_AddressTypedef NAND_AddressTypeDef + +#define __ARRAY_ADDRESS ARRAY_ADDRESS +#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE +#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE +#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE +#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE +/** + * @} + */ + +/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose + * @{ + */ +#define NOR_StatusTypedef HAL_NOR_StatusTypeDef +#define NOR_SUCCESS HAL_NOR_STATUS_SUCCESS +#define NOR_ONGOING HAL_NOR_STATUS_ONGOING +#define NOR_ERROR HAL_NOR_STATUS_ERROR +#define NOR_TIMEOUT HAL_NOR_STATUS_TIMEOUT + +#define __NOR_WRITE NOR_WRITE +#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT +/** + * @} + */ + +/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose + * @{ + */ + +#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0 +#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 +#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 +#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 + +#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 +#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 +#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 + +#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7) || defined(STM32G4) || defined(STM32U5) +#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID +#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID +#endif + +#if defined(STM32L4) || defined(STM32L5) +#define OPAMP_POWERMODE_NORMAL OPAMP_POWERMODE_NORMALPOWER +#elif defined(STM32G4) +#define OPAMP_POWERMODE_NORMAL OPAMP_POWERMODE_NORMALSPEED +#endif + +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS + +#if defined(STM32H7) +#define I2S_IT_TXE I2S_IT_TXP +#define I2S_IT_RXNE I2S_IT_RXP + +#define I2S_FLAG_TXE I2S_FLAG_TXP +#define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) +#define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL +#endif +/** + * @} + */ + +/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose + * @{ + */ + +/* Compact Flash-ATA registers description */ +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA + +/* Compact Flash-ATA commands */ +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD +#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD +#define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD + +#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef +#define PCCARD_SUCCESS HAL_PCCARD_STATUS_SUCCESS +#define PCCARD_ONGOING HAL_PCCARD_STATUS_ONGOING +#define PCCARD_ERROR HAL_PCCARD_STATUS_ERROR +#define PCCARD_TIMEOUT HAL_PCCARD_STATUS_TIMEOUT +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FORMAT_BIN RTC_FORMAT_BIN +#define FORMAT_BCD RTC_FORMAT_BCD + +#define RTC_ALARMSUBSECONDMASK_None RTC_ALARMSUBSECONDMASK_NONE +#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE +#define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE + +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT + +#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 + +#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE +#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 +#define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 + +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 + +#if defined(STM32H5) || defined(STM32H7RS) || defined(STM32N6) +#define TAMP_SECRETDEVICE_ERASE_NONE TAMP_DEVICESECRETS_ERASE_NONE +#define TAMP_SECRETDEVICE_ERASE_BKP_SRAM TAMP_DEVICESECRETS_ERASE_BKPSRAM +#endif /* STM32H5 || STM32H7RS || STM32N6 */ + +#if defined(STM32WBA) +#define TAMP_SECRETDEVICE_ERASE_NONE TAMP_DEVICESECRETS_ERASE_NONE +#define TAMP_SECRETDEVICE_ERASE_SRAM2 TAMP_DEVICESECRETS_ERASE_SRAM2 +#define TAMP_SECRETDEVICE_ERASE_RHUK TAMP_DEVICESECRETS_ERASE_RHUK +#define TAMP_SECRETDEVICE_ERASE_ICACHE TAMP_DEVICESECRETS_ERASE_ICACHE +#define TAMP_SECRETDEVICE_ERASE_SAES_AES_HASH TAMP_DEVICESECRETS_ERASE_SAES_AES_HASH +#define TAMP_SECRETDEVICE_ERASE_PKA_SRAM TAMP_DEVICESECRETS_ERASE_PKA_SRAM +#define TAMP_SECRETDEVICE_ERASE_ALL TAMP_DEVICESECRETS_ERASE_ALL +#endif /* STM32WBA */ + +#if defined(STM32H5) || defined(STM32WBA) || defined(STM32H7RS) || defined(STM32N6) +#define TAMP_SECRETDEVICE_ERASE_DISABLE TAMP_DEVICESECRETS_ERASE_NONE +#define TAMP_SECRETDEVICE_ERASE_ENABLE TAMP_SECRETDEVICE_ERASE_ALL +#endif /* STM32H5 || STM32WBA || STM32H7RS || STM32N6 */ + +#if defined(STM32F7) || defined(STM32WB) +#define RTC_TAMPCR_TAMPXE RTC_TAMPER_ENABLE_BITS_MASK +#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_IT_ENABLE_BITS_MASK +#endif /* STM32F7 || STM32WB */ + +#if defined(STM32H7) +#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X +#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT +#endif /* STM32H7 */ + +#if defined(STM32F7) || defined(STM32H7) || defined(STM32L0) || defined(STM32WB) +#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1 +#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2 +#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3 +#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMP +#endif /* STM32F7 || STM32H7 || STM32L0 || STM32WB */ + +/** + * @} + */ + + +/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMARTCARD_NACK_ENABLED SMARTCARD_NACK_ENABLE +#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE + +#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLED SMARTCARD_ONE_BIT_SAMPLE_ENABLE +#define SMARTCARD_ONEBIT_SAMPLING_DISABLE SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLE SMARTCARD_ONE_BIT_SAMPLE_ENABLE + +#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE +#define SMARTCARD_TIMEOUT_ENABLED SMARTCARD_TIMEOUT_ENABLE + +#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE +#define SMARTCARD_LASTBIT_ENABLED SMARTCARD_LASTBIT_ENABLE +/** + * @} + */ + + +/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMBUS_DUALADDRESS_DISABLED SMBUS_DUALADDRESS_DISABLE +#define SMBUS_DUALADDRESS_ENABLED SMBUS_DUALADDRESS_ENABLE +#define SMBUS_GENERALCALL_DISABLED SMBUS_GENERALCALL_DISABLE +#define SMBUS_GENERALCALL_ENABLED SMBUS_GENERALCALL_ENABLE +#define SMBUS_NOSTRETCH_DISABLED SMBUS_NOSTRETCH_DISABLE +#define SMBUS_NOSTRETCH_ENABLED SMBUS_NOSTRETCH_ENABLE +#define SMBUS_ANALOGFILTER_ENABLED SMBUS_ANALOGFILTER_ENABLE +#define SMBUS_ANALOGFILTER_DISABLED SMBUS_ANALOGFILTER_DISABLE +#define SMBUS_PEC_DISABLED SMBUS_PEC_DISABLE +#define SMBUS_PEC_ENABLED SMBUS_PEC_ENABLE +#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose + * @{ + */ +#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE +#define SPI_TIMODE_ENABLED SPI_TIMODE_ENABLE + +#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE +#define SPI_CRCCALCULATION_ENABLED SPI_CRCCALCULATION_ENABLE + +#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE +#define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE + +#if defined(STM32H7) + +#define SPI_FLAG_TXE SPI_FLAG_TXP +#define SPI_FLAG_RXNE SPI_FLAG_RXP + +#define SPI_IT_TXE SPI_IT_TXP +#define SPI_IT_RXNE SPI_IT_RXP + +#define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET +#define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET +#define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET +#define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose + * @{ + */ +#define CCER_CCxE_MASK TIM_CCER_CCxE_MASK +#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK + +#define TIM_DMABase_CR1 TIM_DMABASE_CR1 +#define TIM_DMABase_CR2 TIM_DMABASE_CR2 +#define TIM_DMABase_SMCR TIM_DMABASE_SMCR +#define TIM_DMABase_DIER TIM_DMABASE_DIER +#define TIM_DMABase_SR TIM_DMABASE_SR +#define TIM_DMABase_EGR TIM_DMABASE_EGR +#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1 +#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2 +#define TIM_DMABase_CCER TIM_DMABASE_CCER +#define TIM_DMABase_CNT TIM_DMABASE_CNT +#define TIM_DMABase_PSC TIM_DMABASE_PSC +#define TIM_DMABase_ARR TIM_DMABASE_ARR +#define TIM_DMABase_RCR TIM_DMABASE_RCR +#define TIM_DMABase_CCR1 TIM_DMABASE_CCR1 +#define TIM_DMABase_CCR2 TIM_DMABASE_CCR2 +#define TIM_DMABase_CCR3 TIM_DMABASE_CCR3 +#define TIM_DMABase_CCR4 TIM_DMABASE_CCR4 +#define TIM_DMABase_BDTR TIM_DMABASE_BDTR +#define TIM_DMABase_DCR TIM_DMABASE_DCR +#define TIM_DMABase_DMAR TIM_DMABASE_DMAR +#define TIM_DMABase_OR1 TIM_DMABASE_OR1 +#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3 +#define TIM_DMABase_CCR5 TIM_DMABASE_CCR5 +#define TIM_DMABase_CCR6 TIM_DMABASE_CCR6 +#define TIM_DMABase_OR2 TIM_DMABASE_OR2 +#define TIM_DMABase_OR3 TIM_DMABASE_OR3 +#define TIM_DMABase_OR TIM_DMABASE_OR + +#define TIM_EventSource_Update TIM_EVENTSOURCE_UPDATE +#define TIM_EventSource_CC1 TIM_EVENTSOURCE_CC1 +#define TIM_EventSource_CC2 TIM_EVENTSOURCE_CC2 +#define TIM_EventSource_CC3 TIM_EVENTSOURCE_CC3 +#define TIM_EventSource_CC4 TIM_EVENTSOURCE_CC4 +#define TIM_EventSource_COM TIM_EVENTSOURCE_COM +#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER +#define TIM_EventSource_Break TIM_EVENTSOURCE_BREAK +#define TIM_EventSource_Break2 TIM_EVENTSOURCE_BREAK2 + +#define TIM_DMABurstLength_1Transfer TIM_DMABURSTLENGTH_1TRANSFER +#define TIM_DMABurstLength_2Transfers TIM_DMABURSTLENGTH_2TRANSFERS +#define TIM_DMABurstLength_3Transfers TIM_DMABURSTLENGTH_3TRANSFERS +#define TIM_DMABurstLength_4Transfers TIM_DMABURSTLENGTH_4TRANSFERS +#define TIM_DMABurstLength_5Transfers TIM_DMABURSTLENGTH_5TRANSFERS +#define TIM_DMABurstLength_6Transfers TIM_DMABURSTLENGTH_6TRANSFERS +#define TIM_DMABurstLength_7Transfers TIM_DMABURSTLENGTH_7TRANSFERS +#define TIM_DMABurstLength_8Transfers TIM_DMABURSTLENGTH_8TRANSFERS +#define TIM_DMABurstLength_9Transfers TIM_DMABURSTLENGTH_9TRANSFERS +#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS +#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS +#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS +#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS +#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS +#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS +#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS +#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS +#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS + +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE +#endif + +#if defined(STM32H7) +#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1 +#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2 +#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1 +#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2 +#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1 +#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2 +#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1 +#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1 +#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2 +#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1 +#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2 +#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2 +#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1 +#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2 +#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2 +#endif + +#if defined(STM32U5) || defined(STM32MP2) +#define OCREF_CLEAR_SELECT_Pos OCREF_CLEAR_SELECT_POS +#define OCREF_CLEAR_SELECT_Msk OCREF_CLEAR_SELECT_MSK +#endif +/** + * @} + */ + +/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose + * @{ + */ +#define TSC_SYNC_POL_FALL TSC_SYNC_POLARITY_FALLING +#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose + * @{ + */ +#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONEBIT_SAMPLING_ENABLED UART_ONE_BIT_SAMPLE_ENABLE +#define UART_ONE_BIT_SAMPLE_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONE_BIT_SAMPLE_ENABLED UART_ONE_BIT_SAMPLE_ENABLE + +#define __HAL_UART_ONEBIT_ENABLE __HAL_UART_ONE_BIT_SAMPLE_ENABLE +#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE + +#define __DIV_SAMPLING16 UART_DIV_SAMPLING16 +#define __DIVMANT_SAMPLING16 UART_DIVMANT_SAMPLING16 +#define __DIVFRAQ_SAMPLING16 UART_DIVFRAQ_SAMPLING16 +#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16 + +#define __DIV_SAMPLING8 UART_DIV_SAMPLING8 +#define __DIVMANT_SAMPLING8 UART_DIVMANT_SAMPLING8 +#define __DIVFRAQ_SAMPLING8 UART_DIVFRAQ_SAMPLING8 +#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8 + +#define __DIV_LPUART UART_DIV_LPUART + +#define UART_WAKEUPMETHODE_IDLELINE UART_WAKEUPMETHOD_IDLELINE +#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose + * @{ + */ + +#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE +#define USART_CLOCK_ENABLED USART_CLOCK_ENABLE + +#define USARTNACK_ENABLED USART_NACK_ENABLE +#define USARTNACK_DISABLED USART_NACK_DISABLE +/** + * @} + */ + +/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define CFR_BASE WWDG_CFR_BASE + +/** + * @} + */ + +/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose + * @{ + */ +#define CAN_FilterFIFO0 CAN_FILTER_FIFO0 +#define CAN_FilterFIFO1 CAN_FILTER_FIFO1 +#define CAN_IT_RQCP0 CAN_IT_TME +#define CAN_IT_RQCP1 CAN_IT_TME +#define CAN_IT_RQCP2 CAN_IT_TME +#define INAK_TIMEOUT CAN_TIMEOUT_VALUE +#define SLAK_TIMEOUT CAN_TIMEOUT_VALUE +#define CAN_TXSTATUS_FAILED ((uint8_t)0x00U) +#define CAN_TXSTATUS_OK ((uint8_t)0x01U) +#define CAN_TXSTATUS_PENDING ((uint8_t)0x02U) + +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define VLAN_TAG ETH_VLAN_TAG +#define MIN_ETH_PAYLOAD ETH_MIN_ETH_PAYLOAD +#define MAX_ETH_PAYLOAD ETH_MAX_ETH_PAYLOAD +#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD +#define MACMIIAR_CR_MASK ETH_MACMIIAR_CR_MASK +#define MACCR_CLEAR_MASK ETH_MACCR_CLEAR_MASK +#define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK +#define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK + +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to + the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from + MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus + or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status + of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and + transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input + frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control + de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control + activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ +#if defined(STM32F1) +#else +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status + (or time-stamp) */ +#endif +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and + status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ + +#define ETH_TxPacketConfig ETH_TxPacketConfigTypeDef /* Transmit Packet Configuration structure definition */ + +/** + * @} + */ + +/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR +#define DCMI_IT_OVF DCMI_IT_OVR +#define DCMI_FLAG_OVFRI DCMI_FLAG_OVRRI +#define DCMI_FLAG_OVFMI DCMI_FLAG_OVRMI + +#define HAL_DCMI_ConfigCROP HAL_DCMI_ConfigCrop +#define HAL_DCMI_EnableCROP HAL_DCMI_EnableCrop +#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop + +/** + * @} + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) +/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose + * @{ + */ +#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 +#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 + +#define CM_ARGB8888 DMA2D_INPUT_ARGB8888 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_ARGB1555 DMA2D_INPUT_ARGB1555 +#define CM_ARGB4444 DMA2D_INPUT_ARGB4444 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 +/** + * @} + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) || defined(STM32U5) +/** @defgroup DMA2D_Aliases DMA2D API Aliases + * @{ + */ +#define HAL_DMA2D_DisableCLUT HAL_DMA2D_CLUTLoading_Abort /*!< Aliased to HAL_DMA2D_CLUTLoading_Abort + for compatibility with legacy code */ +/** + * @} + */ + +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 || STM32U5 */ + +/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback +/** + * @} + */ + +/** @defgroup HAL_DCACHE_Aliased_Functions HAL DCACHE Aliased Functions maintained for legacy purpose + * @{ + */ + +#if defined(STM32U5) +#define HAL_DCACHE_CleanInvalidateByAddr HAL_DCACHE_CleanInvalidByAddr +#define HAL_DCACHE_CleanInvalidateByAddr_IT HAL_DCACHE_CleanInvalidByAddr_IT +#endif /* STM32U5 */ + +/** + * @} + */ + +#if !defined(STM32F2) +/** @defgroup HASH_alias HASH API alias + * @{ + */ +#define HAL_HASHEx_IRQHandler HAL_HASH_IRQHandler /*!< Redirection for compatibility with legacy code */ +/** + * + * @} + */ +#endif /* STM32F2 */ +/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef +#define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef +#define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish +#define HAL_HMAC_SHA1_Finish HAL_HASH_SHA1_Finish +#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish +#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish + +/*HASH Algorithm Selection*/ + +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 +#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 +#define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 + +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC + +#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY +#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY + +#if defined(STM32L4) || defined(STM32L5) || defined(STM32F2) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) + +#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt +#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End +#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT +#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT + +#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt +#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End +#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT +#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT + +#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt +#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End +#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT +#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT + +#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt +#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End +#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT +#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT + +#endif /* STM32L4 || STM32L5 || STM32F2 || STM32F4 || STM32F7 || STM32H7 */ +/** + * @} + */ + +/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_EnableDBGSleepMode HAL_DBGMCU_EnableDBGSleepMode +#define HAL_DisableDBGSleepMode HAL_DBGMCU_DisableDBGSleepMode +#define HAL_EnableDBGStopMode HAL_DBGMCU_EnableDBGStopMode +#define HAL_DisableDBGStopMode HAL_DBGMCU_DisableDBGStopMode +#define HAL_EnableDBGStandbyMode HAL_DBGMCU_EnableDBGStandbyMode +#define HAL_DisableDBGStandbyMode HAL_DBGMCU_DisableDBGStandbyMode +#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd\ + )==ENABLE)? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : \ + HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph)) +#define HAL_VREFINT_OutputSelect HAL_SYSCFG_VREFINT_OutputSelect +#define HAL_Lock_Cmd(cmd) (((cmd)==ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT()) +#if defined(STM32L0) +#else +#define HAL_VREFINT_Cmd(cmd) (((cmd)==ENABLE)? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT()) +#endif +#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT()) +#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd\ + )==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : \ + HAL_ADCEx_DisableVREFINTTempSensor()) +#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || \ + defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ) +#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode +#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode +#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode +#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode +#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */ + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define FLASH_HalfPageProgram HAL_FLASHEx_HalfPageProgram +#define FLASH_EnableRunPowerDown HAL_FLASHEx_EnableRunPowerDown +#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown +#define HAL_DATA_EEPROMEx_Unlock HAL_FLASHEx_DATAEEPROM_Unlock +#define HAL_DATA_EEPROMEx_Lock HAL_FLASHEx_DATAEEPROM_Lock +#define HAL_DATA_EEPROMEx_Erase HAL_FLASHEx_DATAEEPROM_Erase +#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_I2CEx_AnalogFilter_Config HAL_I2CEx_ConfigAnalogFilter +#define HAL_I2CEx_DigitalFilter_Config HAL_I2CEx_ConfigDigitalFilter +#define HAL_FMPI2CEx_AnalogFilter_Config HAL_FMPI2CEx_ConfigAnalogFilter +#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter + +#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd) == ENABLE)? \ + HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): \ + HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus)) + +#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || \ + defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || \ + defined(STM32L4) || defined(STM32L5) || defined(STM32G4) || defined(STM32L1) +#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT +#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT +#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT +#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT +#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || + STM32L4 || STM32L5 || STM32G4 || STM32L1 */ +#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || \ + defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)|| defined(STM32L1) +#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA +#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA +#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA +#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA +#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ +/** + * @} + */ + +/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose + * @{ + */ + +#if defined(STM32G0) +#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD +#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD +#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD +#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler +#endif +#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD +#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg +#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown +#define HAL_PWR_DisableVddio2Monitor HAL_PWREx_DisableVddio2Monitor +#define HAL_PWR_EnableBkUpReg HAL_PWREx_EnableBkUpReg +#define HAL_PWR_EnableFlashPowerDown HAL_PWREx_EnableFlashPowerDown +#define HAL_PWR_EnableVddio2Monitor HAL_PWREx_EnableVddio2Monitor +#define HAL_PWR_PVD_PVM_IRQHandler HAL_PWREx_PVD_PVM_IRQHandler +#define HAL_PWR_PVDLevelConfig HAL_PWR_ConfigPVD +#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler +#define HAL_PWR_Vddio2MonitorCallback HAL_PWREx_Vddio2MonitorCallback +#define HAL_PWREx_ActivateOverDrive HAL_PWREx_EnableOverDrive +#define HAL_PWREx_DeactivateOverDrive HAL_PWREx_DisableOverDrive +#define HAL_PWREx_DisableSDADCAnalog HAL_PWREx_DisableSDADC +#define HAL_PWREx_EnableSDADCAnalog HAL_PWREx_EnableSDADC +#define HAL_PWREx_PVMConfig HAL_PWREx_ConfigPVM + +#define PWR_MODE_NORMAL PWR_PVD_MODE_NORMAL +#define PWR_MODE_IT_RISING PWR_PVD_MODE_IT_RISING +#define PWR_MODE_IT_FALLING PWR_PVD_MODE_IT_FALLING +#define PWR_MODE_IT_RISING_FALLING PWR_PVD_MODE_IT_RISING_FALLING +#define PWR_MODE_EVENT_RISING PWR_PVD_MODE_EVENT_RISING +#define PWR_MODE_EVENT_FALLING PWR_PVD_MODE_EVENT_FALLING +#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING + +#define CR_OFFSET_BB PWR_CR_OFFSET_BB +#define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB + +#define DBP_BitNumber DBP_BIT_NUMBER +#define PVDE_BitNumber PVDE_BIT_NUMBER +#define PMODE_BitNumber PMODE_BIT_NUMBER +#define EWUP_BitNumber EWUP_BIT_NUMBER +#define FPDS_BitNumber FPDS_BIT_NUMBER +#define ODEN_BitNumber ODEN_BIT_NUMBER +#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER +#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER +#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER +#define BRE_BitNumber BRE_BIT_NUMBER + +#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL + +#if defined (STM32U5) +#define PWR_SRAM1_PAGE1_STOP_RETENTION PWR_SRAM1_PAGE1_STOP +#define PWR_SRAM1_PAGE2_STOP_RETENTION PWR_SRAM1_PAGE2_STOP +#define PWR_SRAM1_PAGE3_STOP_RETENTION PWR_SRAM1_PAGE3_STOP +#define PWR_SRAM1_PAGE4_STOP_RETENTION PWR_SRAM1_PAGE4_STOP +#define PWR_SRAM1_PAGE5_STOP_RETENTION PWR_SRAM1_PAGE5_STOP +#define PWR_SRAM1_PAGE6_STOP_RETENTION PWR_SRAM1_PAGE6_STOP +#define PWR_SRAM1_PAGE7_STOP_RETENTION PWR_SRAM1_PAGE7_STOP +#define PWR_SRAM1_PAGE8_STOP_RETENTION PWR_SRAM1_PAGE8_STOP +#define PWR_SRAM1_PAGE9_STOP_RETENTION PWR_SRAM1_PAGE9_STOP +#define PWR_SRAM1_PAGE10_STOP_RETENTION PWR_SRAM1_PAGE10_STOP +#define PWR_SRAM1_PAGE11_STOP_RETENTION PWR_SRAM1_PAGE11_STOP +#define PWR_SRAM1_PAGE12_STOP_RETENTION PWR_SRAM1_PAGE12_STOP +#define PWR_SRAM1_FULL_STOP_RETENTION PWR_SRAM1_FULL_STOP + +#define PWR_SRAM2_PAGE1_STOP_RETENTION PWR_SRAM2_PAGE1_STOP +#define PWR_SRAM2_PAGE2_STOP_RETENTION PWR_SRAM2_PAGE2_STOP +#define PWR_SRAM2_FULL_STOP_RETENTION PWR_SRAM2_FULL_STOP + +#define PWR_SRAM3_PAGE1_STOP_RETENTION PWR_SRAM3_PAGE1_STOP +#define PWR_SRAM3_PAGE2_STOP_RETENTION PWR_SRAM3_PAGE2_STOP +#define PWR_SRAM3_PAGE3_STOP_RETENTION PWR_SRAM3_PAGE3_STOP +#define PWR_SRAM3_PAGE4_STOP_RETENTION PWR_SRAM3_PAGE4_STOP +#define PWR_SRAM3_PAGE5_STOP_RETENTION PWR_SRAM3_PAGE5_STOP +#define PWR_SRAM3_PAGE6_STOP_RETENTION PWR_SRAM3_PAGE6_STOP +#define PWR_SRAM3_PAGE7_STOP_RETENTION PWR_SRAM3_PAGE7_STOP +#define PWR_SRAM3_PAGE8_STOP_RETENTION PWR_SRAM3_PAGE8_STOP +#define PWR_SRAM3_PAGE9_STOP_RETENTION PWR_SRAM3_PAGE9_STOP +#define PWR_SRAM3_PAGE10_STOP_RETENTION PWR_SRAM3_PAGE10_STOP +#define PWR_SRAM3_PAGE11_STOP_RETENTION PWR_SRAM3_PAGE11_STOP +#define PWR_SRAM3_PAGE12_STOP_RETENTION PWR_SRAM3_PAGE12_STOP +#define PWR_SRAM3_PAGE13_STOP_RETENTION PWR_SRAM3_PAGE13_STOP +#define PWR_SRAM3_FULL_STOP_RETENTION PWR_SRAM3_FULL_STOP + +#define PWR_SRAM4_FULL_STOP_RETENTION PWR_SRAM4_FULL_STOP + +#define PWR_SRAM5_PAGE1_STOP_RETENTION PWR_SRAM5_PAGE1_STOP +#define PWR_SRAM5_PAGE2_STOP_RETENTION PWR_SRAM5_PAGE2_STOP +#define PWR_SRAM5_PAGE3_STOP_RETENTION PWR_SRAM5_PAGE3_STOP +#define PWR_SRAM5_PAGE4_STOP_RETENTION PWR_SRAM5_PAGE4_STOP +#define PWR_SRAM5_PAGE5_STOP_RETENTION PWR_SRAM5_PAGE5_STOP +#define PWR_SRAM5_PAGE6_STOP_RETENTION PWR_SRAM5_PAGE6_STOP +#define PWR_SRAM5_PAGE7_STOP_RETENTION PWR_SRAM5_PAGE7_STOP +#define PWR_SRAM5_PAGE8_STOP_RETENTION PWR_SRAM5_PAGE8_STOP +#define PWR_SRAM5_PAGE9_STOP_RETENTION PWR_SRAM5_PAGE9_STOP +#define PWR_SRAM5_PAGE10_STOP_RETENTION PWR_SRAM5_PAGE10_STOP +#define PWR_SRAM5_PAGE11_STOP_RETENTION PWR_SRAM5_PAGE11_STOP +#define PWR_SRAM5_PAGE12_STOP_RETENTION PWR_SRAM5_PAGE12_STOP +#define PWR_SRAM5_PAGE13_STOP_RETENTION PWR_SRAM5_PAGE13_STOP +#define PWR_SRAM5_FULL_STOP_RETENTION PWR_SRAM5_FULL_STOP + +#define PWR_SRAM6_PAGE1_STOP_RETENTION PWR_SRAM6_PAGE1_STOP +#define PWR_SRAM6_PAGE2_STOP_RETENTION PWR_SRAM6_PAGE2_STOP +#define PWR_SRAM6_PAGE3_STOP_RETENTION PWR_SRAM6_PAGE3_STOP +#define PWR_SRAM6_PAGE4_STOP_RETENTION PWR_SRAM6_PAGE4_STOP +#define PWR_SRAM6_PAGE5_STOP_RETENTION PWR_SRAM6_PAGE5_STOP +#define PWR_SRAM6_PAGE6_STOP_RETENTION PWR_SRAM6_PAGE6_STOP +#define PWR_SRAM6_PAGE7_STOP_RETENTION PWR_SRAM6_PAGE7_STOP +#define PWR_SRAM6_PAGE8_STOP_RETENTION PWR_SRAM6_PAGE8_STOP +#define PWR_SRAM6_FULL_STOP_RETENTION PWR_SRAM6_FULL_STOP + + +#define PWR_ICACHE_FULL_STOP_RETENTION PWR_ICACHE_FULL_STOP +#define PWR_DCACHE1_FULL_STOP_RETENTION PWR_DCACHE1_FULL_STOP +#define PWR_DCACHE2_FULL_STOP_RETENTION PWR_DCACHE2_FULL_STOP +#define PWR_DMA2DRAM_FULL_STOP_RETENTION PWR_DMA2DRAM_FULL_STOP +#define PWR_PERIPHRAM_FULL_STOP_RETENTION PWR_PERIPHRAM_FULL_STOP +#define PWR_PKA32RAM_FULL_STOP_RETENTION PWR_PKA32RAM_FULL_STOP +#define PWR_GRAPHICPRAM_FULL_STOP_RETENTION PWR_GRAPHICPRAM_FULL_STOP +#define PWR_DSIRAM_FULL_STOP_RETENTION PWR_DSIRAM_FULL_STOP +#define PWR_JPEGRAM_FULL_STOP_RETENTION PWR_JPEGRAM_FULL_STOP + + +#define PWR_SRAM2_PAGE1_STANDBY_RETENTION PWR_SRAM2_PAGE1_STANDBY +#define PWR_SRAM2_PAGE2_STANDBY_RETENTION PWR_SRAM2_PAGE2_STANDBY +#define PWR_SRAM2_FULL_STANDBY_RETENTION PWR_SRAM2_FULL_STANDBY + +#define PWR_SRAM1_FULL_RUN_RETENTION PWR_SRAM1_FULL_RUN +#define PWR_SRAM2_FULL_RUN_RETENTION PWR_SRAM2_FULL_RUN +#define PWR_SRAM3_FULL_RUN_RETENTION PWR_SRAM3_FULL_RUN +#define PWR_SRAM4_FULL_RUN_RETENTION PWR_SRAM4_FULL_RUN +#define PWR_SRAM5_FULL_RUN_RETENTION PWR_SRAM5_FULL_RUN +#define PWR_SRAM6_FULL_RUN_RETENTION PWR_SRAM6_FULL_RUN + +#define PWR_ALL_RAM_RUN_RETENTION_MASK PWR_ALL_RAM_RUN_MASK +#endif + +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Functions HAL RTC Aliased Functions maintained for legacy purpose + * @{ + */ +#if defined(STM32H5) || defined(STM32WBA) || defined(STM32H7RS) || defined(STM32N6) +#define HAL_RTCEx_SetBoothardwareKey HAL_RTCEx_LockBootHardwareKey +#define HAL_RTCEx_BKUPBlock_Enable HAL_RTCEx_BKUPBlock +#define HAL_RTCEx_BKUPBlock_Disable HAL_RTCEx_BKUPUnblock +#define HAL_RTCEx_Erase_SecretDev_Conf HAL_RTCEx_ConfigEraseDeviceSecrets +#endif /* STM32H5 || STM32WBA || STM32H7RS || STM32N6 */ + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_TIM_DMADelayPulseCplt TIM_DMADelayPulseCplt +#define HAL_TIM_DMAError TIM_DMAError +#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt +#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt +#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || \ + defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) +#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro +#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT +#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback +#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent +#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT +#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA +#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */ +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig +/** + * @} + */ + + +/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported macros ------------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose + * @{ + */ +#define AES_IT_CC CRYP_IT_CC +#define AES_IT_ERR CRYP_IT_ERR +#define AES_FLAG_CCF CRYP_FLAG_CCF +/** + * @} + */ + +/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_GET_BOOT_MODE __HAL_SYSCFG_GET_BOOT_MODE +#define __HAL_REMAPMEMORY_FLASH __HAL_SYSCFG_REMAPMEMORY_FLASH +#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH +#define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM +#define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC +#define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI +#define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK +#define __HAL_GET_FLAG __HAL_SYSCFG_GET_FLAG +#define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG +#define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE +#define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE + +#define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY +#define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 +#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS +#define UFB_MODE_BitNumber UFB_MODE_BIT_NUMBER +#define CMP_PD_BitNumber CMP_PD_BIT_NUMBER + +/** + * @} + */ + + +/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __ADC_ENABLE __HAL_ADC_ENABLE +#define __ADC_DISABLE __HAL_ADC_DISABLE +#define __HAL_ADC_ENABLING_CONDITIONS ADC_ENABLING_CONDITIONS +#define __HAL_ADC_DISABLING_CONDITIONS ADC_DISABLING_CONDITIONS +#define __HAL_ADC_IS_ENABLED ADC_IS_ENABLE +#define __ADC_IS_ENABLED ADC_IS_ENABLE +#define __HAL_ADC_IS_SOFTWARE_START_REGULAR ADC_IS_SOFTWARE_START_REGULAR +#define __HAL_ADC_IS_SOFTWARE_START_INJECTED ADC_IS_SOFTWARE_START_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR ADC_IS_CONVERSION_ONGOING_REGULAR +#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED ADC_IS_CONVERSION_ONGOING_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING ADC_IS_CONVERSION_ONGOING +#define __HAL_ADC_CLEAR_ERRORCODE ADC_CLEAR_ERRORCODE + +#define __HAL_ADC_GET_RESOLUTION ADC_GET_RESOLUTION +#define __HAL_ADC_JSQR_RK ADC_JSQR_RK +#define __HAL_ADC_CFGR_AWD1CH ADC_CFGR_AWD1CH_SHIFT +#define __HAL_ADC_CFGR_AWD23CR ADC_CFGR_AWD23CR +#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION +#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE ADC_CFGR_INJECT_CONTEXT_QUEUE +#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS ADC_CFGR_INJECT_DISCCONTINUOUS +#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS ADC_CFGR_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM ADC_CFGR_DISCONTINUOUS_NUM +#define __HAL_ADC_CFGR_AUTOWAIT ADC_CFGR_AUTOWAIT +#define __HAL_ADC_CFGR_CONTINUOUS ADC_CFGR_CONTINUOUS +#define __HAL_ADC_CFGR_OVERRUN ADC_CFGR_OVERRUN +#define __HAL_ADC_CFGR_DMACONTREQ ADC_CFGR_DMACONTREQ +#define __HAL_ADC_CFGR_EXTSEL ADC_CFGR_EXTSEL_SET +#define __HAL_ADC_JSQR_JEXTSEL ADC_JSQR_JEXTSEL_SET +#define __HAL_ADC_OFR_CHANNEL ADC_OFR_CHANNEL +#define __HAL_ADC_DIFSEL_CHANNEL ADC_DIFSEL_CHANNEL +#define __HAL_ADC_CALFACT_DIFF_SET ADC_CALFACT_DIFF_SET +#define __HAL_ADC_CALFACT_DIFF_GET ADC_CALFACT_DIFF_GET +#define __HAL_ADC_TRX_HIGHTHRESHOLD ADC_TRX_HIGHTHRESHOLD + +#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION ADC_OFFSET_SHIFT_RESOLUTION +#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION ADC_AWD1THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_COMMON_REGISTER ADC_COMMON_REGISTER +#define __HAL_ADC_COMMON_CCR_MULTI ADC_COMMON_CCR_MULTI +#define __HAL_ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER +#define __HAL_ADC_COMMON_ADC_OTHER ADC_COMMON_ADC_OTHER +#define __HAL_ADC_MULTI_SLAVE ADC_MULTI_SLAVE + +#define __HAL_ADC_SQR1_L ADC_SQR1_L_SHIFT +#define __HAL_ADC_JSQR_JL ADC_JSQR_JL_SHIFT +#define __HAL_ADC_JSQR_RK_JL ADC_JSQR_RK_JL +#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM +#define __HAL_ADC_CR1_SCAN ADC_CR1_SCAN_SET +#define __HAL_ADC_CONVCYCLES_MAX_RANGE ADC_CONVCYCLES_MAX_RANGE +#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE +#define __HAL_ADC_GET_CLOCK_PRESCALER ADC_GET_CLOCK_PRESCALER + +#define __HAL_ADC_SQR1 ADC_SQR1 +#define __HAL_ADC_SMPR1 ADC_SMPR1 +#define __HAL_ADC_SMPR2 ADC_SMPR2 +#define __HAL_ADC_SQR3_RK ADC_SQR3_RK +#define __HAL_ADC_SQR2_RK ADC_SQR2_RK +#define __HAL_ADC_SQR1_RK ADC_SQR1_RK +#define __HAL_ADC_CR2_CONTINUOUS ADC_CR2_CONTINUOUS +#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS +#define __HAL_ADC_CR1_SCANCONV ADC_CR1_SCANCONV +#define __HAL_ADC_CR2_EOCSelection ADC_CR2_EOCSelection +#define __HAL_ADC_CR2_DMAContReq ADC_CR2_DMAContReq +#define __HAL_ADC_JSQR ADC_JSQR + +#define __HAL_ADC_CHSELR_CHANNEL ADC_CHSELR_CHANNEL +#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR1_AUTOOFF ADC_CFGR1_AUTOOFF +#define __HAL_ADC_CFGR1_AUTOWAIT ADC_CFGR1_AUTOWAIT +#define __HAL_ADC_CFGR1_CONTINUOUS ADC_CFGR1_CONTINUOUS +#define __HAL_ADC_CFGR1_OVERRUN ADC_CFGR1_OVERRUN +#define __HAL_ADC_CFGR1_SCANDIR ADC_CFGR1_SCANDIR +#define __HAL_ADC_CFGR1_DMACONTREQ ADC_CFGR1_DMACONTREQ + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT +#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT +#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT +#define IS_DAC_GENERATE_WAVE IS_DAC_WAVE + +/** + * @} + */ + +/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_FREEZE_TIM1_DBGMCU __HAL_DBGMCU_FREEZE_TIM1 +#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1 +#define __HAL_FREEZE_TIM2_DBGMCU __HAL_DBGMCU_FREEZE_TIM2 +#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2 +#define __HAL_FREEZE_TIM3_DBGMCU __HAL_DBGMCU_FREEZE_TIM3 +#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3 +#define __HAL_FREEZE_TIM4_DBGMCU __HAL_DBGMCU_FREEZE_TIM4 +#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4 +#define __HAL_FREEZE_TIM5_DBGMCU __HAL_DBGMCU_FREEZE_TIM5 +#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5 +#define __HAL_FREEZE_TIM6_DBGMCU __HAL_DBGMCU_FREEZE_TIM6 +#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6 +#define __HAL_FREEZE_TIM7_DBGMCU __HAL_DBGMCU_FREEZE_TIM7 +#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7 +#define __HAL_FREEZE_TIM8_DBGMCU __HAL_DBGMCU_FREEZE_TIM8 +#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8 + +#define __HAL_FREEZE_TIM9_DBGMCU __HAL_DBGMCU_FREEZE_TIM9 +#define __HAL_UNFREEZE_TIM9_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM9 +#define __HAL_FREEZE_TIM10_DBGMCU __HAL_DBGMCU_FREEZE_TIM10 +#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10 +#define __HAL_FREEZE_TIM11_DBGMCU __HAL_DBGMCU_FREEZE_TIM11 +#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11 +#define __HAL_FREEZE_TIM12_DBGMCU __HAL_DBGMCU_FREEZE_TIM12 +#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12 +#define __HAL_FREEZE_TIM13_DBGMCU __HAL_DBGMCU_FREEZE_TIM13 +#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13 +#define __HAL_FREEZE_TIM14_DBGMCU __HAL_DBGMCU_FREEZE_TIM14 +#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14 +#define __HAL_FREEZE_CAN2_DBGMCU __HAL_DBGMCU_FREEZE_CAN2 +#define __HAL_UNFREEZE_CAN2_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN2 + + +#define __HAL_FREEZE_TIM15_DBGMCU __HAL_DBGMCU_FREEZE_TIM15 +#define __HAL_UNFREEZE_TIM15_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM15 +#define __HAL_FREEZE_TIM16_DBGMCU __HAL_DBGMCU_FREEZE_TIM16 +#define __HAL_UNFREEZE_TIM16_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM16 +#define __HAL_FREEZE_TIM17_DBGMCU __HAL_DBGMCU_FREEZE_TIM17 +#define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 +#define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC +#define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC +#if defined(STM32H7) +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ +#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT +#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT +#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT +#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT +#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT +#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT +#define __HAL_FREEZE_CAN1_DBGMCU __HAL_DBGMCU_FREEZE_CAN1 +#define __HAL_UNFREEZE_CAN1_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN1 +#define __HAL_FREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM1 +#define __HAL_UNFREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM1 +#define __HAL_FREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM2 +#define __HAL_UNFREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM2 + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32F3) +#define COMP_START __HAL_COMP_ENABLE +#define COMP_STOP __HAL_COMP_DISABLE +#define COMP_LOCK __HAL_COMP_LOCK + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || \ + defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +#endif +#if defined(STM32F302xE) || defined(STM32F302xC) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +#endif +#if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP7_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP7_EXTI_CLEAR_FLAG()) +#endif +#if defined(STM32F373xC) ||defined(STM32F378xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +#endif +#else +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +#endif + +#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE + +#if defined(STM32L0) || defined(STM32L4) +/* Note: On these STM32 families, the only argument of this macro */ +/* is COMP_FLAG_LOCK. */ +/* This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle */ +/* argument. */ +#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__)) +#endif +/** + * @} + */ + +#if defined(STM32L0) || defined(STM32L4) +/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is + done into HAL_COMP_Init() */ +#define HAL_COMP_Stop_IT HAL_COMP_Stop /* Function considered as legacy as EXTI event or IT configuration is + done into HAL_COMP_Init() */ +/** + * @} + */ +#endif + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ + ((WAVE) == DAC_WAVE_NOISE)|| \ + ((WAVE) == DAC_WAVE_TRIANGLE)) + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_WRPAREA IS_OB_WRPAREA +#define IS_TYPEPROGRAM IS_FLASH_TYPEPROGRAM +#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM +#define IS_TYPEERASE IS_FLASH_TYPEERASE +#define IS_NBSECTORS IS_FLASH_NBSECTORS +#define IS_OB_WDG_SOURCE IS_OB_IWDG_SOURCE + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 +#define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else +#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ +#define __HAL_I2C_RISE_TIME I2C_RISE_TIME +#define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD +#define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST +#define __HAL_I2C_SPEED I2C_SPEED +#define __HAL_I2C_7BIT_ADD_WRITE I2C_7BIT_ADD_WRITE +#define __HAL_I2C_7BIT_ADD_READ I2C_7BIT_ADD_READ +#define __HAL_I2C_10BIT_ADDRESS I2C_10BIT_ADDRESS +#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE +#define __HAL_I2C_10BIT_HEADER_READ I2C_10BIT_HEADER_READ +#define __HAL_I2C_MEM_ADD_MSB I2C_MEM_ADD_MSB +#define __HAL_I2C_MEM_ADD_LSB I2C_MEM_ADD_LSB +#define __HAL_I2C_FREQRANGE I2C_FREQRANGE +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE +#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT + +#if defined(STM32H7) +#define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __IRDA_DISABLE __HAL_IRDA_DISABLE +#define __IRDA_ENABLE __HAL_IRDA_ENABLE + +#define __HAL_IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION +#define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION + +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE + + +/** + * @} + */ + + +/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_IWDG_ENABLE_WRITE_ACCESS IWDG_ENABLE_WRITE_ACCESS +#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS +/** + * @} + */ + + +/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_LPTIM_ENABLE_INTERRUPT __HAL_LPTIM_ENABLE_IT +#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT +#define __HAL_LPTIM_GET_ITSTATUS __HAL_LPTIM_GET_IT_SOURCE + +/** + * @} + */ + + +/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose + * @{ + */ +#define __OPAMP_CSR_OPAXPD OPAMP_CSR_OPAXPD +#define __OPAMP_CSR_S3SELX OPAMP_CSR_S3SELX +#define __OPAMP_CSR_S4SELX OPAMP_CSR_S4SELX +#define __OPAMP_CSR_S5SELX OPAMP_CSR_S5SELX +#define __OPAMP_CSR_S6SELX OPAMP_CSR_S6SELX +#define __OPAMP_CSR_OPAXCAL_L OPAMP_CSR_OPAXCAL_L +#define __OPAMP_CSR_OPAXCAL_H OPAMP_CSR_OPAXCAL_H +#define __OPAMP_CSR_OPAXLPM OPAMP_CSR_OPAXLPM +#define __OPAMP_CSR_ALL_SWITCHES OPAMP_CSR_ALL_SWITCHES +#define __OPAMP_CSR_ANAWSELX OPAMP_CSR_ANAWSELX +#define __OPAMP_CSR_OPAXCALOUT OPAMP_CSR_OPAXCALOUT +#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION +#define __OPAMP_OFFSET_TRIM_SET OPAMP_OFFSET_TRIM_SET + +/** + * @} + */ + + +/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_PVD_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PVD_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PVM_EVENT_DISABLE __HAL_PWR_PVM_EVENT_DISABLE +#define __HAL_PVM_EVENT_ENABLE __HAL_PWR_PVM_EVENT_ENABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE +#define __HAL_PWR_INTERNALWAKEUP_DISABLE HAL_PWREx_DisableInternalWakeUpLine +#define __HAL_PWR_INTERNALWAKEUP_ENABLE HAL_PWREx_EnableInternalWakeUpLine +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE HAL_PWREx_EnablePullUpPullDownConfig +#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() do { __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE(); \ + __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); \ + } while(0) +#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVM_DISABLE() do { HAL_PWREx_DisablePVM1();HAL_PWREx_DisablePVM2(); \ + HAL_PWREx_DisablePVM3();HAL_PWREx_DisablePVM4(); \ + } while(0) +#define __HAL_PWR_PVM_ENABLE() do { HAL_PWREx_EnablePVM1();HAL_PWREx_EnablePVM2(); \ + HAL_PWREx_EnablePVM3();HAL_PWREx_EnablePVM4(); \ + } while(0) +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE HAL_PWREx_DisableSRAM2ContentRetention +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE HAL_PWREx_EnableSRAM2ContentRetention +#define __HAL_PWR_VDDIO2_DISABLE HAL_PWREx_DisableVddIO2 +#define __HAL_PWR_VDDIO2_ENABLE HAL_PWREx_EnableVddIO2 +#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_VDDUSB_DISABLE HAL_PWREx_DisableVddUSB +#define __HAL_PWR_VDDUSB_ENABLE HAL_PWREx_EnableVddUSB + +#if defined (STM32F4) +#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() +#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() +#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() +#else +#define __HAL_PVD_EXTI_CLEAR_FLAG __HAL_PWR_PVD_EXTI_CLEAR_FLAG +#define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT +#define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT +#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#endif /* STM32F4 */ +/** + * @} + */ + + +/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose + * @{ + */ + +#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI +#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI + +#define HAL_RCC_CCSCallback HAL_RCC_CSSCallback +#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? \ + HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT()) + +#define __ADC_CLK_DISABLE __HAL_RCC_ADC_CLK_DISABLE +#define __ADC_CLK_ENABLE __HAL_RCC_ADC_CLK_ENABLE +#define __ADC_CLK_SLEEP_DISABLE __HAL_RCC_ADC_CLK_SLEEP_DISABLE +#define __ADC_CLK_SLEEP_ENABLE __HAL_RCC_ADC_CLK_SLEEP_ENABLE +#define __ADC_FORCE_RESET __HAL_RCC_ADC_FORCE_RESET +#define __ADC_RELEASE_RESET __HAL_RCC_ADC_RELEASE_RESET +#define __ADC1_CLK_DISABLE __HAL_RCC_ADC1_CLK_DISABLE +#define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE +#define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET +#define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE +#define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE +#define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET +#define __ADC2_RELEASE_RESET __HAL_RCC_ADC2_RELEASE_RESET +#define __ADC3_CLK_DISABLE __HAL_RCC_ADC3_CLK_DISABLE +#define __ADC3_CLK_ENABLE __HAL_RCC_ADC3_CLK_ENABLE +#define __ADC3_FORCE_RESET __HAL_RCC_ADC3_FORCE_RESET +#define __ADC3_RELEASE_RESET __HAL_RCC_ADC3_RELEASE_RESET +#define __AES_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __AES_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __AES_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __AES_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __AES_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __AES_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#define __CRYP_CLK_SLEEP_ENABLE __HAL_RCC_CRYP_CLK_SLEEP_ENABLE +#define __CRYP_CLK_SLEEP_DISABLE __HAL_RCC_CRYP_CLK_SLEEP_DISABLE +#define __CRYP_CLK_ENABLE __HAL_RCC_CRYP_CLK_ENABLE +#define __CRYP_CLK_DISABLE __HAL_RCC_CRYP_CLK_DISABLE +#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET +#define __CRYP_RELEASE_RESET __HAL_RCC_CRYP_RELEASE_RESET +#define __AFIO_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE +#define __AFIO_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE +#define __AFIO_FORCE_RESET __HAL_RCC_AFIO_FORCE_RESET +#define __AFIO_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET +#define __AHB_FORCE_RESET __HAL_RCC_AHB_FORCE_RESET +#define __AHB_RELEASE_RESET __HAL_RCC_AHB_RELEASE_RESET +#define __AHB1_FORCE_RESET __HAL_RCC_AHB1_FORCE_RESET +#define __AHB1_RELEASE_RESET __HAL_RCC_AHB1_RELEASE_RESET +#define __AHB2_FORCE_RESET __HAL_RCC_AHB2_FORCE_RESET +#define __AHB2_RELEASE_RESET __HAL_RCC_AHB2_RELEASE_RESET +#define __AHB3_FORCE_RESET __HAL_RCC_AHB3_FORCE_RESET +#define __AHB3_RELEASE_RESET __HAL_RCC_AHB3_RELEASE_RESET +#define __APB1_FORCE_RESET __HAL_RCC_APB1_FORCE_RESET +#define __APB1_RELEASE_RESET __HAL_RCC_APB1_RELEASE_RESET +#define __APB2_FORCE_RESET __HAL_RCC_APB2_FORCE_RESET +#define __APB2_RELEASE_RESET __HAL_RCC_APB2_RELEASE_RESET +#if defined(STM32C0) +#define __HAL_RCC_APB1_FORCE_RESET __HAL_RCC_APB1_GRP1_FORCE_RESET +#define __HAL_RCC_APB1_RELEASE_RESET __HAL_RCC_APB1_GRP1_RELEASE_RESET +#define __HAL_RCC_APB2_FORCE_RESET __HAL_RCC_APB1_GRP2_FORCE_RESET +#define __HAL_RCC_APB2_RELEASE_RESET __HAL_RCC_APB1_GRP2_RELEASE_RESET +#endif /* STM32C0 */ +#define __BKP_CLK_DISABLE __HAL_RCC_BKP_CLK_DISABLE +#define __BKP_CLK_ENABLE __HAL_RCC_BKP_CLK_ENABLE +#define __BKP_FORCE_RESET __HAL_RCC_BKP_FORCE_RESET +#define __BKP_RELEASE_RESET __HAL_RCC_BKP_RELEASE_RESET +#define __CAN1_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN1_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN1_CLK_SLEEP_DISABLE __HAL_RCC_CAN1_CLK_SLEEP_DISABLE +#define __CAN1_CLK_SLEEP_ENABLE __HAL_RCC_CAN1_CLK_SLEEP_ENABLE +#define __CAN1_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN1_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN2_CLK_DISABLE __HAL_RCC_CAN2_CLK_DISABLE +#define __CAN2_CLK_ENABLE __HAL_RCC_CAN2_CLK_ENABLE +#define __CAN2_FORCE_RESET __HAL_RCC_CAN2_FORCE_RESET +#define __CAN2_RELEASE_RESET __HAL_RCC_CAN2_RELEASE_RESET +#define __CEC_CLK_DISABLE __HAL_RCC_CEC_CLK_DISABLE +#define __CEC_CLK_ENABLE __HAL_RCC_CEC_CLK_ENABLE +#define __COMP_CLK_DISABLE __HAL_RCC_COMP_CLK_DISABLE +#define __COMP_CLK_ENABLE __HAL_RCC_COMP_CLK_ENABLE +#define __COMP_FORCE_RESET __HAL_RCC_COMP_FORCE_RESET +#define __COMP_RELEASE_RESET __HAL_RCC_COMP_RELEASE_RESET +#define __COMP_CLK_SLEEP_ENABLE __HAL_RCC_COMP_CLK_SLEEP_ENABLE +#define __COMP_CLK_SLEEP_DISABLE __HAL_RCC_COMP_CLK_SLEEP_DISABLE +#define __CEC_FORCE_RESET __HAL_RCC_CEC_FORCE_RESET +#define __CEC_RELEASE_RESET __HAL_RCC_CEC_RELEASE_RESET +#define __CRC_CLK_DISABLE __HAL_RCC_CRC_CLK_DISABLE +#define __CRC_CLK_ENABLE __HAL_RCC_CRC_CLK_ENABLE +#define __CRC_CLK_SLEEP_DISABLE __HAL_RCC_CRC_CLK_SLEEP_DISABLE +#define __CRC_CLK_SLEEP_ENABLE __HAL_RCC_CRC_CLK_SLEEP_ENABLE +#define __CRC_FORCE_RESET __HAL_RCC_CRC_FORCE_RESET +#define __CRC_RELEASE_RESET __HAL_RCC_CRC_RELEASE_RESET +#define __DAC_CLK_DISABLE __HAL_RCC_DAC_CLK_DISABLE +#define __DAC_CLK_ENABLE __HAL_RCC_DAC_CLK_ENABLE +#define __DAC_FORCE_RESET __HAL_RCC_DAC_FORCE_RESET +#define __DAC_RELEASE_RESET __HAL_RCC_DAC_RELEASE_RESET +#define __DAC1_CLK_DISABLE __HAL_RCC_DAC1_CLK_DISABLE +#define __DAC1_CLK_ENABLE __HAL_RCC_DAC1_CLK_ENABLE +#define __DAC1_CLK_SLEEP_DISABLE __HAL_RCC_DAC1_CLK_SLEEP_DISABLE +#define __DAC1_CLK_SLEEP_ENABLE __HAL_RCC_DAC1_CLK_SLEEP_ENABLE +#define __DAC1_FORCE_RESET __HAL_RCC_DAC1_FORCE_RESET +#define __DAC1_RELEASE_RESET __HAL_RCC_DAC1_RELEASE_RESET +#define __DBGMCU_CLK_ENABLE __HAL_RCC_DBGMCU_CLK_ENABLE +#define __DBGMCU_CLK_DISABLE __HAL_RCC_DBGMCU_CLK_DISABLE +#define __DBGMCU_FORCE_RESET __HAL_RCC_DBGMCU_FORCE_RESET +#define __DBGMCU_RELEASE_RESET __HAL_RCC_DBGMCU_RELEASE_RESET +#define __DFSDM_CLK_DISABLE __HAL_RCC_DFSDM_CLK_DISABLE +#define __DFSDM_CLK_ENABLE __HAL_RCC_DFSDM_CLK_ENABLE +#define __DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE +#define __DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE +#define __DFSDM_FORCE_RESET __HAL_RCC_DFSDM_FORCE_RESET +#define __DFSDM_RELEASE_RESET __HAL_RCC_DFSDM_RELEASE_RESET +#define __DMA1_CLK_DISABLE __HAL_RCC_DMA1_CLK_DISABLE +#define __DMA1_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE +#define __DMA1_CLK_SLEEP_DISABLE __HAL_RCC_DMA1_CLK_SLEEP_DISABLE +#define __DMA1_CLK_SLEEP_ENABLE __HAL_RCC_DMA1_CLK_SLEEP_ENABLE +#define __DMA1_FORCE_RESET __HAL_RCC_DMA1_FORCE_RESET +#define __DMA1_RELEASE_RESET __HAL_RCC_DMA1_RELEASE_RESET +#define __DMA2_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE +#define __DMA2_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE +#define __DMA2_CLK_SLEEP_DISABLE __HAL_RCC_DMA2_CLK_SLEEP_DISABLE +#define __DMA2_CLK_SLEEP_ENABLE __HAL_RCC_DMA2_CLK_SLEEP_ENABLE +#define __DMA2_FORCE_RESET __HAL_RCC_DMA2_FORCE_RESET +#define __DMA2_RELEASE_RESET __HAL_RCC_DMA2_RELEASE_RESET +#define __ETHMAC_CLK_DISABLE __HAL_RCC_ETHMAC_CLK_DISABLE +#define __ETHMAC_CLK_ENABLE __HAL_RCC_ETHMAC_CLK_ENABLE +#define __ETHMAC_FORCE_RESET __HAL_RCC_ETHMAC_FORCE_RESET +#define __ETHMAC_RELEASE_RESET __HAL_RCC_ETHMAC_RELEASE_RESET +#define __ETHMACRX_CLK_DISABLE __HAL_RCC_ETHMACRX_CLK_DISABLE +#define __ETHMACRX_CLK_ENABLE __HAL_RCC_ETHMACRX_CLK_ENABLE +#define __ETHMACTX_CLK_DISABLE __HAL_RCC_ETHMACTX_CLK_DISABLE +#define __ETHMACTX_CLK_ENABLE __HAL_RCC_ETHMACTX_CLK_ENABLE +#define __FIREWALL_CLK_DISABLE __HAL_RCC_FIREWALL_CLK_DISABLE +#define __FIREWALL_CLK_ENABLE __HAL_RCC_FIREWALL_CLK_ENABLE +#define __FLASH_CLK_DISABLE __HAL_RCC_FLASH_CLK_DISABLE +#define __FLASH_CLK_ENABLE __HAL_RCC_FLASH_CLK_ENABLE +#define __FLASH_CLK_SLEEP_DISABLE __HAL_RCC_FLASH_CLK_SLEEP_DISABLE +#define __FLASH_CLK_SLEEP_ENABLE __HAL_RCC_FLASH_CLK_SLEEP_ENABLE +#define __FLASH_FORCE_RESET __HAL_RCC_FLASH_FORCE_RESET +#define __FLASH_RELEASE_RESET __HAL_RCC_FLASH_RELEASE_RESET +#define __FLITF_CLK_DISABLE __HAL_RCC_FLITF_CLK_DISABLE +#define __FLITF_CLK_ENABLE __HAL_RCC_FLITF_CLK_ENABLE +#define __FLITF_FORCE_RESET __HAL_RCC_FLITF_FORCE_RESET +#define __FLITF_RELEASE_RESET __HAL_RCC_FLITF_RELEASE_RESET +#define __FLITF_CLK_SLEEP_ENABLE __HAL_RCC_FLITF_CLK_SLEEP_ENABLE +#define __FLITF_CLK_SLEEP_DISABLE __HAL_RCC_FLITF_CLK_SLEEP_DISABLE +#define __FMC_CLK_DISABLE __HAL_RCC_FMC_CLK_DISABLE +#define __FMC_CLK_ENABLE __HAL_RCC_FMC_CLK_ENABLE +#define __FMC_CLK_SLEEP_DISABLE __HAL_RCC_FMC_CLK_SLEEP_DISABLE +#define __FMC_CLK_SLEEP_ENABLE __HAL_RCC_FMC_CLK_SLEEP_ENABLE +#define __FMC_FORCE_RESET __HAL_RCC_FMC_FORCE_RESET +#define __FMC_RELEASE_RESET __HAL_RCC_FMC_RELEASE_RESET +#define __FSMC_CLK_DISABLE __HAL_RCC_FSMC_CLK_DISABLE +#define __FSMC_CLK_ENABLE __HAL_RCC_FSMC_CLK_ENABLE +#define __GPIOA_CLK_DISABLE __HAL_RCC_GPIOA_CLK_DISABLE +#define __GPIOA_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE +#define __GPIOA_CLK_SLEEP_DISABLE __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE +#define __GPIOA_CLK_SLEEP_ENABLE __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE +#define __GPIOA_FORCE_RESET __HAL_RCC_GPIOA_FORCE_RESET +#define __GPIOA_RELEASE_RESET __HAL_RCC_GPIOA_RELEASE_RESET +#define __GPIOB_CLK_DISABLE __HAL_RCC_GPIOB_CLK_DISABLE +#define __GPIOB_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE +#define __GPIOB_CLK_SLEEP_DISABLE __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE +#define __GPIOB_CLK_SLEEP_ENABLE __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE +#define __GPIOB_FORCE_RESET __HAL_RCC_GPIOB_FORCE_RESET +#define __GPIOB_RELEASE_RESET __HAL_RCC_GPIOB_RELEASE_RESET +#define __GPIOC_CLK_DISABLE __HAL_RCC_GPIOC_CLK_DISABLE +#define __GPIOC_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE +#define __GPIOC_CLK_SLEEP_DISABLE __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE +#define __GPIOC_CLK_SLEEP_ENABLE __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE +#define __GPIOC_FORCE_RESET __HAL_RCC_GPIOC_FORCE_RESET +#define __GPIOC_RELEASE_RESET __HAL_RCC_GPIOC_RELEASE_RESET +#define __GPIOD_CLK_DISABLE __HAL_RCC_GPIOD_CLK_DISABLE +#define __GPIOD_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE +#define __GPIOD_CLK_SLEEP_DISABLE __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE +#define __GPIOD_CLK_SLEEP_ENABLE __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE +#define __GPIOD_FORCE_RESET __HAL_RCC_GPIOD_FORCE_RESET +#define __GPIOD_RELEASE_RESET __HAL_RCC_GPIOD_RELEASE_RESET +#define __GPIOE_CLK_DISABLE __HAL_RCC_GPIOE_CLK_DISABLE +#define __GPIOE_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE +#define __GPIOE_CLK_SLEEP_DISABLE __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE +#define __GPIOE_CLK_SLEEP_ENABLE __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE +#define __GPIOE_FORCE_RESET __HAL_RCC_GPIOE_FORCE_RESET +#define __GPIOE_RELEASE_RESET __HAL_RCC_GPIOE_RELEASE_RESET +#define __GPIOF_CLK_DISABLE __HAL_RCC_GPIOF_CLK_DISABLE +#define __GPIOF_CLK_ENABLE __HAL_RCC_GPIOF_CLK_ENABLE +#define __GPIOF_CLK_SLEEP_DISABLE __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE +#define __GPIOF_CLK_SLEEP_ENABLE __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE +#define __GPIOF_FORCE_RESET __HAL_RCC_GPIOF_FORCE_RESET +#define __GPIOF_RELEASE_RESET __HAL_RCC_GPIOF_RELEASE_RESET +#define __GPIOG_CLK_DISABLE __HAL_RCC_GPIOG_CLK_DISABLE +#define __GPIOG_CLK_ENABLE __HAL_RCC_GPIOG_CLK_ENABLE +#define __GPIOG_CLK_SLEEP_DISABLE __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE +#define __GPIOG_CLK_SLEEP_ENABLE __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE +#define __GPIOG_FORCE_RESET __HAL_RCC_GPIOG_FORCE_RESET +#define __GPIOG_RELEASE_RESET __HAL_RCC_GPIOG_RELEASE_RESET +#define __GPIOH_CLK_DISABLE __HAL_RCC_GPIOH_CLK_DISABLE +#define __GPIOH_CLK_ENABLE __HAL_RCC_GPIOH_CLK_ENABLE +#define __GPIOH_CLK_SLEEP_DISABLE __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE +#define __GPIOH_CLK_SLEEP_ENABLE __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE +#define __GPIOH_FORCE_RESET __HAL_RCC_GPIOH_FORCE_RESET +#define __GPIOH_RELEASE_RESET __HAL_RCC_GPIOH_RELEASE_RESET +#define __I2C1_CLK_DISABLE __HAL_RCC_I2C1_CLK_DISABLE +#define __I2C1_CLK_ENABLE __HAL_RCC_I2C1_CLK_ENABLE +#define __I2C1_CLK_SLEEP_DISABLE __HAL_RCC_I2C1_CLK_SLEEP_DISABLE +#define __I2C1_CLK_SLEEP_ENABLE __HAL_RCC_I2C1_CLK_SLEEP_ENABLE +#define __I2C1_FORCE_RESET __HAL_RCC_I2C1_FORCE_RESET +#define __I2C1_RELEASE_RESET __HAL_RCC_I2C1_RELEASE_RESET +#define __I2C2_CLK_DISABLE __HAL_RCC_I2C2_CLK_DISABLE +#define __I2C2_CLK_ENABLE __HAL_RCC_I2C2_CLK_ENABLE +#define __I2C2_CLK_SLEEP_DISABLE __HAL_RCC_I2C2_CLK_SLEEP_DISABLE +#define __I2C2_CLK_SLEEP_ENABLE __HAL_RCC_I2C2_CLK_SLEEP_ENABLE +#define __I2C2_FORCE_RESET __HAL_RCC_I2C2_FORCE_RESET +#define __I2C2_RELEASE_RESET __HAL_RCC_I2C2_RELEASE_RESET +#define __I2C3_CLK_DISABLE __HAL_RCC_I2C3_CLK_DISABLE +#define __I2C3_CLK_ENABLE __HAL_RCC_I2C3_CLK_ENABLE +#define __I2C3_CLK_SLEEP_DISABLE __HAL_RCC_I2C3_CLK_SLEEP_DISABLE +#define __I2C3_CLK_SLEEP_ENABLE __HAL_RCC_I2C3_CLK_SLEEP_ENABLE +#define __I2C3_FORCE_RESET __HAL_RCC_I2C3_FORCE_RESET +#define __I2C3_RELEASE_RESET __HAL_RCC_I2C3_RELEASE_RESET +#define __LCD_CLK_DISABLE __HAL_RCC_LCD_CLK_DISABLE +#define __LCD_CLK_ENABLE __HAL_RCC_LCD_CLK_ENABLE +#define __LCD_CLK_SLEEP_DISABLE __HAL_RCC_LCD_CLK_SLEEP_DISABLE +#define __LCD_CLK_SLEEP_ENABLE __HAL_RCC_LCD_CLK_SLEEP_ENABLE +#define __LCD_FORCE_RESET __HAL_RCC_LCD_FORCE_RESET +#define __LCD_RELEASE_RESET __HAL_RCC_LCD_RELEASE_RESET +#define __LPTIM1_CLK_DISABLE __HAL_RCC_LPTIM1_CLK_DISABLE +#define __LPTIM1_CLK_ENABLE __HAL_RCC_LPTIM1_CLK_ENABLE +#define __LPTIM1_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE +#define __LPTIM1_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE +#define __LPTIM1_FORCE_RESET __HAL_RCC_LPTIM1_FORCE_RESET +#define __LPTIM1_RELEASE_RESET __HAL_RCC_LPTIM1_RELEASE_RESET +#define __LPTIM2_CLK_DISABLE __HAL_RCC_LPTIM2_CLK_DISABLE +#define __LPTIM2_CLK_ENABLE __HAL_RCC_LPTIM2_CLK_ENABLE +#define __LPTIM2_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE +#define __LPTIM2_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE +#define __LPTIM2_FORCE_RESET __HAL_RCC_LPTIM2_FORCE_RESET +#define __LPTIM2_RELEASE_RESET __HAL_RCC_LPTIM2_RELEASE_RESET +#define __LPUART1_CLK_DISABLE __HAL_RCC_LPUART1_CLK_DISABLE +#define __LPUART1_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE +#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE +#define __LPUART1_CLK_SLEEP_ENABLE __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE +#define __LPUART1_FORCE_RESET __HAL_RCC_LPUART1_FORCE_RESET +#define __LPUART1_RELEASE_RESET __HAL_RCC_LPUART1_RELEASE_RESET +#define __OPAMP_CLK_DISABLE __HAL_RCC_OPAMP_CLK_DISABLE +#define __OPAMP_CLK_ENABLE __HAL_RCC_OPAMP_CLK_ENABLE +#define __OPAMP_CLK_SLEEP_DISABLE __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE +#define __OPAMP_CLK_SLEEP_ENABLE __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE +#define __OPAMP_FORCE_RESET __HAL_RCC_OPAMP_FORCE_RESET +#define __OPAMP_RELEASE_RESET __HAL_RCC_OPAMP_RELEASE_RESET +#define __OTGFS_CLK_DISABLE __HAL_RCC_OTGFS_CLK_DISABLE +#define __OTGFS_CLK_ENABLE __HAL_RCC_OTGFS_CLK_ENABLE +#define __OTGFS_CLK_SLEEP_DISABLE __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE +#define __OTGFS_CLK_SLEEP_ENABLE __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE +#define __OTGFS_FORCE_RESET __HAL_RCC_OTGFS_FORCE_RESET +#define __OTGFS_RELEASE_RESET __HAL_RCC_OTGFS_RELEASE_RESET +#define __PWR_CLK_DISABLE __HAL_RCC_PWR_CLK_DISABLE +#define __PWR_CLK_ENABLE __HAL_RCC_PWR_CLK_ENABLE +#define __PWR_CLK_SLEEP_DISABLE __HAL_RCC_PWR_CLK_SLEEP_DISABLE +#define __PWR_CLK_SLEEP_ENABLE __HAL_RCC_PWR_CLK_SLEEP_ENABLE +#define __PWR_FORCE_RESET __HAL_RCC_PWR_FORCE_RESET +#define __PWR_RELEASE_RESET __HAL_RCC_PWR_RELEASE_RESET +#define __QSPI_CLK_DISABLE __HAL_RCC_QSPI_CLK_DISABLE +#define __QSPI_CLK_ENABLE __HAL_RCC_QSPI_CLK_ENABLE +#define __QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QSPI_CLK_SLEEP_DISABLE +#define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE +#define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET +#define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + +#define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE +#define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE +#define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE +#define __RNG_CLK_SLEEP_ENABLE __HAL_RCC_RNG_CLK_SLEEP_ENABLE +#define __RNG_FORCE_RESET __HAL_RCC_RNG_FORCE_RESET +#define __RNG_RELEASE_RESET __HAL_RCC_RNG_RELEASE_RESET +#define __SAI1_CLK_DISABLE __HAL_RCC_SAI1_CLK_DISABLE +#define __SAI1_CLK_ENABLE __HAL_RCC_SAI1_CLK_ENABLE +#define __SAI1_CLK_SLEEP_DISABLE __HAL_RCC_SAI1_CLK_SLEEP_DISABLE +#define __SAI1_CLK_SLEEP_ENABLE __HAL_RCC_SAI1_CLK_SLEEP_ENABLE +#define __SAI1_FORCE_RESET __HAL_RCC_SAI1_FORCE_RESET +#define __SAI1_RELEASE_RESET __HAL_RCC_SAI1_RELEASE_RESET +#define __SAI2_CLK_DISABLE __HAL_RCC_SAI2_CLK_DISABLE +#define __SAI2_CLK_ENABLE __HAL_RCC_SAI2_CLK_ENABLE +#define __SAI2_CLK_SLEEP_DISABLE __HAL_RCC_SAI2_CLK_SLEEP_DISABLE +#define __SAI2_CLK_SLEEP_ENABLE __HAL_RCC_SAI2_CLK_SLEEP_ENABLE +#define __SAI2_FORCE_RESET __HAL_RCC_SAI2_FORCE_RESET +#define __SAI2_RELEASE_RESET __HAL_RCC_SAI2_RELEASE_RESET +#define __SDIO_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __SDIO_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __SDMMC_CLK_DISABLE __HAL_RCC_SDMMC_CLK_DISABLE +#define __SDMMC_CLK_ENABLE __HAL_RCC_SDMMC_CLK_ENABLE +#define __SDMMC_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE +#define __SDMMC_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE +#define __SDMMC_FORCE_RESET __HAL_RCC_SDMMC_FORCE_RESET +#define __SDMMC_RELEASE_RESET __HAL_RCC_SDMMC_RELEASE_RESET +#define __SPI1_CLK_DISABLE __HAL_RCC_SPI1_CLK_DISABLE +#define __SPI1_CLK_ENABLE __HAL_RCC_SPI1_CLK_ENABLE +#define __SPI1_CLK_SLEEP_DISABLE __HAL_RCC_SPI1_CLK_SLEEP_DISABLE +#define __SPI1_CLK_SLEEP_ENABLE __HAL_RCC_SPI1_CLK_SLEEP_ENABLE +#define __SPI1_FORCE_RESET __HAL_RCC_SPI1_FORCE_RESET +#define __SPI1_RELEASE_RESET __HAL_RCC_SPI1_RELEASE_RESET +#define __SPI2_CLK_DISABLE __HAL_RCC_SPI2_CLK_DISABLE +#define __SPI2_CLK_ENABLE __HAL_RCC_SPI2_CLK_ENABLE +#define __SPI2_CLK_SLEEP_DISABLE __HAL_RCC_SPI2_CLK_SLEEP_DISABLE +#define __SPI2_CLK_SLEEP_ENABLE __HAL_RCC_SPI2_CLK_SLEEP_ENABLE +#define __SPI2_FORCE_RESET __HAL_RCC_SPI2_FORCE_RESET +#define __SPI2_RELEASE_RESET __HAL_RCC_SPI2_RELEASE_RESET +#define __SPI3_CLK_DISABLE __HAL_RCC_SPI3_CLK_DISABLE +#define __SPI3_CLK_ENABLE __HAL_RCC_SPI3_CLK_ENABLE +#define __SPI3_CLK_SLEEP_DISABLE __HAL_RCC_SPI3_CLK_SLEEP_DISABLE +#define __SPI3_CLK_SLEEP_ENABLE __HAL_RCC_SPI3_CLK_SLEEP_ENABLE +#define __SPI3_FORCE_RESET __HAL_RCC_SPI3_FORCE_RESET +#define __SPI3_RELEASE_RESET __HAL_RCC_SPI3_RELEASE_RESET +#define __SRAM_CLK_DISABLE __HAL_RCC_SRAM_CLK_DISABLE +#define __SRAM_CLK_ENABLE __HAL_RCC_SRAM_CLK_ENABLE +#define __SRAM1_CLK_SLEEP_DISABLE __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE +#define __SRAM1_CLK_SLEEP_ENABLE __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE +#define __SRAM2_CLK_SLEEP_DISABLE __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE +#define __SRAM2_CLK_SLEEP_ENABLE __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE +#define __SWPMI1_CLK_DISABLE __HAL_RCC_SWPMI1_CLK_DISABLE +#define __SWPMI1_CLK_ENABLE __HAL_RCC_SWPMI1_CLK_ENABLE +#define __SWPMI1_CLK_SLEEP_DISABLE __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE +#define __SWPMI1_CLK_SLEEP_ENABLE __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE +#define __SWPMI1_FORCE_RESET __HAL_RCC_SWPMI1_FORCE_RESET +#define __SWPMI1_RELEASE_RESET __HAL_RCC_SWPMI1_RELEASE_RESET +#define __SYSCFG_CLK_DISABLE __HAL_RCC_SYSCFG_CLK_DISABLE +#define __SYSCFG_CLK_ENABLE __HAL_RCC_SYSCFG_CLK_ENABLE +#define __SYSCFG_CLK_SLEEP_DISABLE __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE +#define __SYSCFG_CLK_SLEEP_ENABLE __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE +#define __SYSCFG_FORCE_RESET __HAL_RCC_SYSCFG_FORCE_RESET +#define __SYSCFG_RELEASE_RESET __HAL_RCC_SYSCFG_RELEASE_RESET +#define __TIM1_CLK_DISABLE __HAL_RCC_TIM1_CLK_DISABLE +#define __TIM1_CLK_ENABLE __HAL_RCC_TIM1_CLK_ENABLE +#define __TIM1_CLK_SLEEP_DISABLE __HAL_RCC_TIM1_CLK_SLEEP_DISABLE +#define __TIM1_CLK_SLEEP_ENABLE __HAL_RCC_TIM1_CLK_SLEEP_ENABLE +#define __TIM1_FORCE_RESET __HAL_RCC_TIM1_FORCE_RESET +#define __TIM1_RELEASE_RESET __HAL_RCC_TIM1_RELEASE_RESET +#define __TIM10_CLK_DISABLE __HAL_RCC_TIM10_CLK_DISABLE +#define __TIM10_CLK_ENABLE __HAL_RCC_TIM10_CLK_ENABLE +#define __TIM10_FORCE_RESET __HAL_RCC_TIM10_FORCE_RESET +#define __TIM10_RELEASE_RESET __HAL_RCC_TIM10_RELEASE_RESET +#define __TIM11_CLK_DISABLE __HAL_RCC_TIM11_CLK_DISABLE +#define __TIM11_CLK_ENABLE __HAL_RCC_TIM11_CLK_ENABLE +#define __TIM11_FORCE_RESET __HAL_RCC_TIM11_FORCE_RESET +#define __TIM11_RELEASE_RESET __HAL_RCC_TIM11_RELEASE_RESET +#define __TIM12_CLK_DISABLE __HAL_RCC_TIM12_CLK_DISABLE +#define __TIM12_CLK_ENABLE __HAL_RCC_TIM12_CLK_ENABLE +#define __TIM12_FORCE_RESET __HAL_RCC_TIM12_FORCE_RESET +#define __TIM12_RELEASE_RESET __HAL_RCC_TIM12_RELEASE_RESET +#define __TIM13_CLK_DISABLE __HAL_RCC_TIM13_CLK_DISABLE +#define __TIM13_CLK_ENABLE __HAL_RCC_TIM13_CLK_ENABLE +#define __TIM13_FORCE_RESET __HAL_RCC_TIM13_FORCE_RESET +#define __TIM13_RELEASE_RESET __HAL_RCC_TIM13_RELEASE_RESET +#define __TIM14_CLK_DISABLE __HAL_RCC_TIM14_CLK_DISABLE +#define __TIM14_CLK_ENABLE __HAL_RCC_TIM14_CLK_ENABLE +#define __TIM14_FORCE_RESET __HAL_RCC_TIM14_FORCE_RESET +#define __TIM14_RELEASE_RESET __HAL_RCC_TIM14_RELEASE_RESET +#define __TIM15_CLK_DISABLE __HAL_RCC_TIM15_CLK_DISABLE +#define __TIM15_CLK_ENABLE __HAL_RCC_TIM15_CLK_ENABLE +#define __TIM15_CLK_SLEEP_DISABLE __HAL_RCC_TIM15_CLK_SLEEP_DISABLE +#define __TIM15_CLK_SLEEP_ENABLE __HAL_RCC_TIM15_CLK_SLEEP_ENABLE +#define __TIM15_FORCE_RESET __HAL_RCC_TIM15_FORCE_RESET +#define __TIM15_RELEASE_RESET __HAL_RCC_TIM15_RELEASE_RESET +#define __TIM16_CLK_DISABLE __HAL_RCC_TIM16_CLK_DISABLE +#define __TIM16_CLK_ENABLE __HAL_RCC_TIM16_CLK_ENABLE +#define __TIM16_CLK_SLEEP_DISABLE __HAL_RCC_TIM16_CLK_SLEEP_DISABLE +#define __TIM16_CLK_SLEEP_ENABLE __HAL_RCC_TIM16_CLK_SLEEP_ENABLE +#define __TIM16_FORCE_RESET __HAL_RCC_TIM16_FORCE_RESET +#define __TIM16_RELEASE_RESET __HAL_RCC_TIM16_RELEASE_RESET +#define __TIM17_CLK_DISABLE __HAL_RCC_TIM17_CLK_DISABLE +#define __TIM17_CLK_ENABLE __HAL_RCC_TIM17_CLK_ENABLE +#define __TIM17_CLK_SLEEP_DISABLE __HAL_RCC_TIM17_CLK_SLEEP_DISABLE +#define __TIM17_CLK_SLEEP_ENABLE __HAL_RCC_TIM17_CLK_SLEEP_ENABLE +#define __TIM17_FORCE_RESET __HAL_RCC_TIM17_FORCE_RESET +#define __TIM17_RELEASE_RESET __HAL_RCC_TIM17_RELEASE_RESET +#define __TIM2_CLK_DISABLE __HAL_RCC_TIM2_CLK_DISABLE +#define __TIM2_CLK_ENABLE __HAL_RCC_TIM2_CLK_ENABLE +#define __TIM2_CLK_SLEEP_DISABLE __HAL_RCC_TIM2_CLK_SLEEP_DISABLE +#define __TIM2_CLK_SLEEP_ENABLE __HAL_RCC_TIM2_CLK_SLEEP_ENABLE +#define __TIM2_FORCE_RESET __HAL_RCC_TIM2_FORCE_RESET +#define __TIM2_RELEASE_RESET __HAL_RCC_TIM2_RELEASE_RESET +#define __TIM3_CLK_DISABLE __HAL_RCC_TIM3_CLK_DISABLE +#define __TIM3_CLK_ENABLE __HAL_RCC_TIM3_CLK_ENABLE +#define __TIM3_CLK_SLEEP_DISABLE __HAL_RCC_TIM3_CLK_SLEEP_DISABLE +#define __TIM3_CLK_SLEEP_ENABLE __HAL_RCC_TIM3_CLK_SLEEP_ENABLE +#define __TIM3_FORCE_RESET __HAL_RCC_TIM3_FORCE_RESET +#define __TIM3_RELEASE_RESET __HAL_RCC_TIM3_RELEASE_RESET +#define __TIM4_CLK_DISABLE __HAL_RCC_TIM4_CLK_DISABLE +#define __TIM4_CLK_ENABLE __HAL_RCC_TIM4_CLK_ENABLE +#define __TIM4_CLK_SLEEP_DISABLE __HAL_RCC_TIM4_CLK_SLEEP_DISABLE +#define __TIM4_CLK_SLEEP_ENABLE __HAL_RCC_TIM4_CLK_SLEEP_ENABLE +#define __TIM4_FORCE_RESET __HAL_RCC_TIM4_FORCE_RESET +#define __TIM4_RELEASE_RESET __HAL_RCC_TIM4_RELEASE_RESET +#define __TIM5_CLK_DISABLE __HAL_RCC_TIM5_CLK_DISABLE +#define __TIM5_CLK_ENABLE __HAL_RCC_TIM5_CLK_ENABLE +#define __TIM5_CLK_SLEEP_DISABLE __HAL_RCC_TIM5_CLK_SLEEP_DISABLE +#define __TIM5_CLK_SLEEP_ENABLE __HAL_RCC_TIM5_CLK_SLEEP_ENABLE +#define __TIM5_FORCE_RESET __HAL_RCC_TIM5_FORCE_RESET +#define __TIM5_RELEASE_RESET __HAL_RCC_TIM5_RELEASE_RESET +#define __TIM6_CLK_DISABLE __HAL_RCC_TIM6_CLK_DISABLE +#define __TIM6_CLK_ENABLE __HAL_RCC_TIM6_CLK_ENABLE +#define __TIM6_CLK_SLEEP_DISABLE __HAL_RCC_TIM6_CLK_SLEEP_DISABLE +#define __TIM6_CLK_SLEEP_ENABLE __HAL_RCC_TIM6_CLK_SLEEP_ENABLE +#define __TIM6_FORCE_RESET __HAL_RCC_TIM6_FORCE_RESET +#define __TIM6_RELEASE_RESET __HAL_RCC_TIM6_RELEASE_RESET +#define __TIM7_CLK_DISABLE __HAL_RCC_TIM7_CLK_DISABLE +#define __TIM7_CLK_ENABLE __HAL_RCC_TIM7_CLK_ENABLE +#define __TIM7_CLK_SLEEP_DISABLE __HAL_RCC_TIM7_CLK_SLEEP_DISABLE +#define __TIM7_CLK_SLEEP_ENABLE __HAL_RCC_TIM7_CLK_SLEEP_ENABLE +#define __TIM7_FORCE_RESET __HAL_RCC_TIM7_FORCE_RESET +#define __TIM7_RELEASE_RESET __HAL_RCC_TIM7_RELEASE_RESET +#define __TIM8_CLK_DISABLE __HAL_RCC_TIM8_CLK_DISABLE +#define __TIM8_CLK_ENABLE __HAL_RCC_TIM8_CLK_ENABLE +#define __TIM8_CLK_SLEEP_DISABLE __HAL_RCC_TIM8_CLK_SLEEP_DISABLE +#define __TIM8_CLK_SLEEP_ENABLE __HAL_RCC_TIM8_CLK_SLEEP_ENABLE +#define __TIM8_FORCE_RESET __HAL_RCC_TIM8_FORCE_RESET +#define __TIM8_RELEASE_RESET __HAL_RCC_TIM8_RELEASE_RESET +#define __TIM9_CLK_DISABLE __HAL_RCC_TIM9_CLK_DISABLE +#define __TIM9_CLK_ENABLE __HAL_RCC_TIM9_CLK_ENABLE +#define __TIM9_FORCE_RESET __HAL_RCC_TIM9_FORCE_RESET +#define __TIM9_RELEASE_RESET __HAL_RCC_TIM9_RELEASE_RESET +#define __TSC_CLK_DISABLE __HAL_RCC_TSC_CLK_DISABLE +#define __TSC_CLK_ENABLE __HAL_RCC_TSC_CLK_ENABLE +#define __TSC_CLK_SLEEP_DISABLE __HAL_RCC_TSC_CLK_SLEEP_DISABLE +#define __TSC_CLK_SLEEP_ENABLE __HAL_RCC_TSC_CLK_SLEEP_ENABLE +#define __TSC_FORCE_RESET __HAL_RCC_TSC_FORCE_RESET +#define __TSC_RELEASE_RESET __HAL_RCC_TSC_RELEASE_RESET +#define __UART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __UART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __UART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __UART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __UART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __UART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __UART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __UART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __UART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __UART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __UART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __UART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART1_CLK_DISABLE __HAL_RCC_USART1_CLK_DISABLE +#define __USART1_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE +#define __USART1_CLK_SLEEP_DISABLE __HAL_RCC_USART1_CLK_SLEEP_DISABLE +#define __USART1_CLK_SLEEP_ENABLE __HAL_RCC_USART1_CLK_SLEEP_ENABLE +#define __USART1_FORCE_RESET __HAL_RCC_USART1_FORCE_RESET +#define __USART1_RELEASE_RESET __HAL_RCC_USART1_RELEASE_RESET +#define __USART2_CLK_DISABLE __HAL_RCC_USART2_CLK_DISABLE +#define __USART2_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE +#define __USART2_CLK_SLEEP_DISABLE __HAL_RCC_USART2_CLK_SLEEP_DISABLE +#define __USART2_CLK_SLEEP_ENABLE __HAL_RCC_USART2_CLK_SLEEP_ENABLE +#define __USART2_FORCE_RESET __HAL_RCC_USART2_FORCE_RESET +#define __USART2_RELEASE_RESET __HAL_RCC_USART2_RELEASE_RESET +#define __USART3_CLK_DISABLE __HAL_RCC_USART3_CLK_DISABLE +#define __USART3_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE +#define __USART3_CLK_SLEEP_DISABLE __HAL_RCC_USART3_CLK_SLEEP_DISABLE +#define __USART3_CLK_SLEEP_ENABLE __HAL_RCC_USART3_CLK_SLEEP_ENABLE +#define __USART3_FORCE_RESET __HAL_RCC_USART3_FORCE_RESET +#define __USART3_RELEASE_RESET __HAL_RCC_USART3_RELEASE_RESET +#define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __USART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __USART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __USART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __USART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __USART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __USART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __USART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __USB_CLK_DISABLE __HAL_RCC_USB_CLK_DISABLE +#define __USB_CLK_ENABLE __HAL_RCC_USB_CLK_ENABLE +#define __USB_FORCE_RESET __HAL_RCC_USB_FORCE_RESET +#define __USB_CLK_SLEEP_ENABLE __HAL_RCC_USB_CLK_SLEEP_ENABLE +#define __USB_CLK_SLEEP_DISABLE __HAL_RCC_USB_CLK_SLEEP_DISABLE +#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE +#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE +#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET + +#if defined(STM32H7) +#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE +#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE +#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE +#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE + +#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/ +#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/ + + +#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED +#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED +#define RCC_SPI4CLKSOURCE_D2PCLK1 RCC_SPI4CLKSOURCE_D2PCLK2 +#define RCC_SPI5CLKSOURCE_D2PCLK1 RCC_SPI5CLKSOURCE_D2PCLK2 +#define RCC_SPI45CLKSOURCE_D2PCLK1 RCC_SPI45CLKSOURCE_D2PCLK2 +#define RCC_SPI45CLKSOURCE_CDPCLK1 RCC_SPI45CLKSOURCE_CDPCLK2 +#define RCC_SPI45CLKSOURCE_PCLK1 RCC_SPI45CLKSOURCE_PCLK2 +#endif + +#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE +#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE +#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE +#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE +#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET +#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET + +#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE +#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE +#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET +#define __TIM21_RELEASE_RESET __HAL_RCC_TIM21_RELEASE_RESET +#define __TIM21_CLK_SLEEP_ENABLE __HAL_RCC_TIM21_CLK_SLEEP_ENABLE +#define __TIM21_CLK_SLEEP_DISABLE __HAL_RCC_TIM21_CLK_SLEEP_DISABLE +#define __TIM22_CLK_ENABLE __HAL_RCC_TIM22_CLK_ENABLE +#define __TIM22_CLK_DISABLE __HAL_RCC_TIM22_CLK_DISABLE +#define __TIM22_FORCE_RESET __HAL_RCC_TIM22_FORCE_RESET +#define __TIM22_RELEASE_RESET __HAL_RCC_TIM22_RELEASE_RESET +#define __TIM22_CLK_SLEEP_ENABLE __HAL_RCC_TIM22_CLK_SLEEP_ENABLE +#define __TIM22_CLK_SLEEP_DISABLE __HAL_RCC_TIM22_CLK_SLEEP_DISABLE +#define __CRS_CLK_DISABLE __HAL_RCC_CRS_CLK_DISABLE +#define __CRS_CLK_ENABLE __HAL_RCC_CRS_CLK_ENABLE +#define __CRS_CLK_SLEEP_DISABLE __HAL_RCC_CRS_CLK_SLEEP_DISABLE +#define __CRS_CLK_SLEEP_ENABLE __HAL_RCC_CRS_CLK_SLEEP_ENABLE +#define __CRS_FORCE_RESET __HAL_RCC_CRS_FORCE_RESET +#define __CRS_RELEASE_RESET __HAL_RCC_CRS_RELEASE_RESET +#define __RCC_BACKUPRESET_FORCE __HAL_RCC_BACKUPRESET_FORCE +#define __RCC_BACKUPRESET_RELEASE __HAL_RCC_BACKUPRESET_RELEASE + +#define __USB_OTG_FS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __USB_OTG_FS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET +#define __USB_OTG_FS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE +#define __USB_OTG_FS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE +#define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE +#define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE +#define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE +#define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET +#define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET +#define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE +#define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE +#define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE +#define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET +#define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET +#define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE +#define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE +#define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET +#define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET +#define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE +#define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE +#define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET +#define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE +#define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE +#define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE +#define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE +#define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET +#define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET +#define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE +#define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE +#define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET +#define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET +#define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE +#define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE +#define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET +#define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET +#define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE +#define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE +#define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET +#define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET +#define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE +#define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE +#define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET +#define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE +#define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE +#define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET +#define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET +#define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED +#define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET +#define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET +#define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE +#define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE +#define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET +#define __DMA2D_RELEASE_RESET __HAL_RCC_DMA2D_RELEASE_RESET +#define __DMA2D_CLK_SLEEP_ENABLE __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_SLEEP_DISABLE __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE + +/* alias define maintained for legacy */ +#define __HAL_RCC_OTGFS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET + +#define __ADC12_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __ADC34_CLK_ENABLE __HAL_RCC_ADC34_CLK_ENABLE +#define __ADC34_CLK_DISABLE __HAL_RCC_ADC34_CLK_DISABLE +#define __DAC2_CLK_ENABLE __HAL_RCC_DAC2_CLK_ENABLE +#define __DAC2_CLK_DISABLE __HAL_RCC_DAC2_CLK_DISABLE +#define __TIM18_CLK_ENABLE __HAL_RCC_TIM18_CLK_ENABLE +#define __TIM18_CLK_DISABLE __HAL_RCC_TIM18_CLK_DISABLE +#define __TIM19_CLK_ENABLE __HAL_RCC_TIM19_CLK_ENABLE +#define __TIM19_CLK_DISABLE __HAL_RCC_TIM19_CLK_DISABLE +#define __TIM20_CLK_ENABLE __HAL_RCC_TIM20_CLK_ENABLE +#define __TIM20_CLK_DISABLE __HAL_RCC_TIM20_CLK_DISABLE +#define __HRTIM1_CLK_ENABLE __HAL_RCC_HRTIM1_CLK_ENABLE +#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE +#define __SDADC1_CLK_ENABLE __HAL_RCC_SDADC1_CLK_ENABLE +#define __SDADC2_CLK_ENABLE __HAL_RCC_SDADC2_CLK_ENABLE +#define __SDADC3_CLK_ENABLE __HAL_RCC_SDADC3_CLK_ENABLE +#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE +#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE +#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE + +#define __ADC12_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __ADC34_FORCE_RESET __HAL_RCC_ADC34_FORCE_RESET +#define __ADC34_RELEASE_RESET __HAL_RCC_ADC34_RELEASE_RESET +#define __DAC2_FORCE_RESET __HAL_RCC_DAC2_FORCE_RESET +#define __DAC2_RELEASE_RESET __HAL_RCC_DAC2_RELEASE_RESET +#define __TIM18_FORCE_RESET __HAL_RCC_TIM18_FORCE_RESET +#define __TIM18_RELEASE_RESET __HAL_RCC_TIM18_RELEASE_RESET +#define __TIM19_FORCE_RESET __HAL_RCC_TIM19_FORCE_RESET +#define __TIM19_RELEASE_RESET __HAL_RCC_TIM19_RELEASE_RESET +#define __TIM20_FORCE_RESET __HAL_RCC_TIM20_FORCE_RESET +#define __TIM20_RELEASE_RESET __HAL_RCC_TIM20_RELEASE_RESET +#define __HRTIM1_FORCE_RESET __HAL_RCC_HRTIM1_FORCE_RESET +#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET +#define __SDADC1_FORCE_RESET __HAL_RCC_SDADC1_FORCE_RESET +#define __SDADC2_FORCE_RESET __HAL_RCC_SDADC2_FORCE_RESET +#define __SDADC3_FORCE_RESET __HAL_RCC_SDADC3_FORCE_RESET +#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET +#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET +#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET + +#define __ADC1_IS_CLK_ENABLED __HAL_RCC_ADC1_IS_CLK_ENABLED +#define __ADC1_IS_CLK_DISABLED __HAL_RCC_ADC1_IS_CLK_DISABLED +#define __ADC12_IS_CLK_ENABLED __HAL_RCC_ADC12_IS_CLK_ENABLED +#define __ADC12_IS_CLK_DISABLED __HAL_RCC_ADC12_IS_CLK_DISABLED +#define __ADC34_IS_CLK_ENABLED __HAL_RCC_ADC34_IS_CLK_ENABLED +#define __ADC34_IS_CLK_DISABLED __HAL_RCC_ADC34_IS_CLK_DISABLED +#define __CEC_IS_CLK_ENABLED __HAL_RCC_CEC_IS_CLK_ENABLED +#define __CEC_IS_CLK_DISABLED __HAL_RCC_CEC_IS_CLK_DISABLED +#define __CRC_IS_CLK_ENABLED __HAL_RCC_CRC_IS_CLK_ENABLED +#define __CRC_IS_CLK_DISABLED __HAL_RCC_CRC_IS_CLK_DISABLED +#define __DAC1_IS_CLK_ENABLED __HAL_RCC_DAC1_IS_CLK_ENABLED +#define __DAC1_IS_CLK_DISABLED __HAL_RCC_DAC1_IS_CLK_DISABLED +#define __DAC2_IS_CLK_ENABLED __HAL_RCC_DAC2_IS_CLK_ENABLED +#define __DAC2_IS_CLK_DISABLED __HAL_RCC_DAC2_IS_CLK_DISABLED +#define __DMA1_IS_CLK_ENABLED __HAL_RCC_DMA1_IS_CLK_ENABLED +#define __DMA1_IS_CLK_DISABLED __HAL_RCC_DMA1_IS_CLK_DISABLED +#define __DMA2_IS_CLK_ENABLED __HAL_RCC_DMA2_IS_CLK_ENABLED +#define __DMA2_IS_CLK_DISABLED __HAL_RCC_DMA2_IS_CLK_DISABLED +#define __FLITF_IS_CLK_ENABLED __HAL_RCC_FLITF_IS_CLK_ENABLED +#define __FLITF_IS_CLK_DISABLED __HAL_RCC_FLITF_IS_CLK_DISABLED +#define __FMC_IS_CLK_ENABLED __HAL_RCC_FMC_IS_CLK_ENABLED +#define __FMC_IS_CLK_DISABLED __HAL_RCC_FMC_IS_CLK_DISABLED +#define __GPIOA_IS_CLK_ENABLED __HAL_RCC_GPIOA_IS_CLK_ENABLED +#define __GPIOA_IS_CLK_DISABLED __HAL_RCC_GPIOA_IS_CLK_DISABLED +#define __GPIOB_IS_CLK_ENABLED __HAL_RCC_GPIOB_IS_CLK_ENABLED +#define __GPIOB_IS_CLK_DISABLED __HAL_RCC_GPIOB_IS_CLK_DISABLED +#define __GPIOC_IS_CLK_ENABLED __HAL_RCC_GPIOC_IS_CLK_ENABLED +#define __GPIOC_IS_CLK_DISABLED __HAL_RCC_GPIOC_IS_CLK_DISABLED +#define __GPIOD_IS_CLK_ENABLED __HAL_RCC_GPIOD_IS_CLK_ENABLED +#define __GPIOD_IS_CLK_DISABLED __HAL_RCC_GPIOD_IS_CLK_DISABLED +#define __GPIOE_IS_CLK_ENABLED __HAL_RCC_GPIOE_IS_CLK_ENABLED +#define __GPIOE_IS_CLK_DISABLED __HAL_RCC_GPIOE_IS_CLK_DISABLED +#define __GPIOF_IS_CLK_ENABLED __HAL_RCC_GPIOF_IS_CLK_ENABLED +#define __GPIOF_IS_CLK_DISABLED __HAL_RCC_GPIOF_IS_CLK_DISABLED +#define __GPIOG_IS_CLK_ENABLED __HAL_RCC_GPIOG_IS_CLK_ENABLED +#define __GPIOG_IS_CLK_DISABLED __HAL_RCC_GPIOG_IS_CLK_DISABLED +#define __GPIOH_IS_CLK_ENABLED __HAL_RCC_GPIOH_IS_CLK_ENABLED +#define __GPIOH_IS_CLK_DISABLED __HAL_RCC_GPIOH_IS_CLK_DISABLED +#define __HRTIM1_IS_CLK_ENABLED __HAL_RCC_HRTIM1_IS_CLK_ENABLED +#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED +#define __I2C1_IS_CLK_ENABLED __HAL_RCC_I2C1_IS_CLK_ENABLED +#define __I2C1_IS_CLK_DISABLED __HAL_RCC_I2C1_IS_CLK_DISABLED +#define __I2C2_IS_CLK_ENABLED __HAL_RCC_I2C2_IS_CLK_ENABLED +#define __I2C2_IS_CLK_DISABLED __HAL_RCC_I2C2_IS_CLK_DISABLED +#define __I2C3_IS_CLK_ENABLED __HAL_RCC_I2C3_IS_CLK_ENABLED +#define __I2C3_IS_CLK_DISABLED __HAL_RCC_I2C3_IS_CLK_DISABLED +#define __PWR_IS_CLK_ENABLED __HAL_RCC_PWR_IS_CLK_ENABLED +#define __PWR_IS_CLK_DISABLED __HAL_RCC_PWR_IS_CLK_DISABLED +#define __SYSCFG_IS_CLK_ENABLED __HAL_RCC_SYSCFG_IS_CLK_ENABLED +#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED +#define __SPI1_IS_CLK_ENABLED __HAL_RCC_SPI1_IS_CLK_ENABLED +#define __SPI1_IS_CLK_DISABLED __HAL_RCC_SPI1_IS_CLK_DISABLED +#define __SPI2_IS_CLK_ENABLED __HAL_RCC_SPI2_IS_CLK_ENABLED +#define __SPI2_IS_CLK_DISABLED __HAL_RCC_SPI2_IS_CLK_DISABLED +#define __SPI3_IS_CLK_ENABLED __HAL_RCC_SPI3_IS_CLK_ENABLED +#define __SPI3_IS_CLK_DISABLED __HAL_RCC_SPI3_IS_CLK_DISABLED +#define __SPI4_IS_CLK_ENABLED __HAL_RCC_SPI4_IS_CLK_ENABLED +#define __SPI4_IS_CLK_DISABLED __HAL_RCC_SPI4_IS_CLK_DISABLED +#define __SDADC1_IS_CLK_ENABLED __HAL_RCC_SDADC1_IS_CLK_ENABLED +#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED +#define __SDADC2_IS_CLK_ENABLED __HAL_RCC_SDADC2_IS_CLK_ENABLED +#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED +#define __SDADC3_IS_CLK_ENABLED __HAL_RCC_SDADC3_IS_CLK_ENABLED +#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED +#define __SRAM_IS_CLK_ENABLED __HAL_RCC_SRAM_IS_CLK_ENABLED +#define __SRAM_IS_CLK_DISABLED __HAL_RCC_SRAM_IS_CLK_DISABLED +#define __TIM1_IS_CLK_ENABLED __HAL_RCC_TIM1_IS_CLK_ENABLED +#define __TIM1_IS_CLK_DISABLED __HAL_RCC_TIM1_IS_CLK_DISABLED +#define __TIM2_IS_CLK_ENABLED __HAL_RCC_TIM2_IS_CLK_ENABLED +#define __TIM2_IS_CLK_DISABLED __HAL_RCC_TIM2_IS_CLK_DISABLED +#define __TIM3_IS_CLK_ENABLED __HAL_RCC_TIM3_IS_CLK_ENABLED +#define __TIM3_IS_CLK_DISABLED __HAL_RCC_TIM3_IS_CLK_DISABLED +#define __TIM4_IS_CLK_ENABLED __HAL_RCC_TIM4_IS_CLK_ENABLED +#define __TIM4_IS_CLK_DISABLED __HAL_RCC_TIM4_IS_CLK_DISABLED +#define __TIM5_IS_CLK_ENABLED __HAL_RCC_TIM5_IS_CLK_ENABLED +#define __TIM5_IS_CLK_DISABLED __HAL_RCC_TIM5_IS_CLK_DISABLED +#define __TIM6_IS_CLK_ENABLED __HAL_RCC_TIM6_IS_CLK_ENABLED +#define __TIM6_IS_CLK_DISABLED __HAL_RCC_TIM6_IS_CLK_DISABLED +#define __TIM7_IS_CLK_ENABLED __HAL_RCC_TIM7_IS_CLK_ENABLED +#define __TIM7_IS_CLK_DISABLED __HAL_RCC_TIM7_IS_CLK_DISABLED +#define __TIM8_IS_CLK_ENABLED __HAL_RCC_TIM8_IS_CLK_ENABLED +#define __TIM8_IS_CLK_DISABLED __HAL_RCC_TIM8_IS_CLK_DISABLED +#define __TIM12_IS_CLK_ENABLED __HAL_RCC_TIM12_IS_CLK_ENABLED +#define __TIM12_IS_CLK_DISABLED __HAL_RCC_TIM12_IS_CLK_DISABLED +#define __TIM13_IS_CLK_ENABLED __HAL_RCC_TIM13_IS_CLK_ENABLED +#define __TIM13_IS_CLK_DISABLED __HAL_RCC_TIM13_IS_CLK_DISABLED +#define __TIM14_IS_CLK_ENABLED __HAL_RCC_TIM14_IS_CLK_ENABLED +#define __TIM14_IS_CLK_DISABLED __HAL_RCC_TIM14_IS_CLK_DISABLED +#define __TIM15_IS_CLK_ENABLED __HAL_RCC_TIM15_IS_CLK_ENABLED +#define __TIM15_IS_CLK_DISABLED __HAL_RCC_TIM15_IS_CLK_DISABLED +#define __TIM16_IS_CLK_ENABLED __HAL_RCC_TIM16_IS_CLK_ENABLED +#define __TIM16_IS_CLK_DISABLED __HAL_RCC_TIM16_IS_CLK_DISABLED +#define __TIM17_IS_CLK_ENABLED __HAL_RCC_TIM17_IS_CLK_ENABLED +#define __TIM17_IS_CLK_DISABLED __HAL_RCC_TIM17_IS_CLK_DISABLED +#define __TIM18_IS_CLK_ENABLED __HAL_RCC_TIM18_IS_CLK_ENABLED +#define __TIM18_IS_CLK_DISABLED __HAL_RCC_TIM18_IS_CLK_DISABLED +#define __TIM19_IS_CLK_ENABLED __HAL_RCC_TIM19_IS_CLK_ENABLED +#define __TIM19_IS_CLK_DISABLED __HAL_RCC_TIM19_IS_CLK_DISABLED +#define __TIM20_IS_CLK_ENABLED __HAL_RCC_TIM20_IS_CLK_ENABLED +#define __TIM20_IS_CLK_DISABLED __HAL_RCC_TIM20_IS_CLK_DISABLED +#define __TSC_IS_CLK_ENABLED __HAL_RCC_TSC_IS_CLK_ENABLED +#define __TSC_IS_CLK_DISABLED __HAL_RCC_TSC_IS_CLK_DISABLED +#define __UART4_IS_CLK_ENABLED __HAL_RCC_UART4_IS_CLK_ENABLED +#define __UART4_IS_CLK_DISABLED __HAL_RCC_UART4_IS_CLK_DISABLED +#define __UART5_IS_CLK_ENABLED __HAL_RCC_UART5_IS_CLK_ENABLED +#define __UART5_IS_CLK_DISABLED __HAL_RCC_UART5_IS_CLK_DISABLED +#define __USART1_IS_CLK_ENABLED __HAL_RCC_USART1_IS_CLK_ENABLED +#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED +#define __USART2_IS_CLK_ENABLED __HAL_RCC_USART2_IS_CLK_ENABLED +#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED +#define __USART3_IS_CLK_ENABLED __HAL_RCC_USART3_IS_CLK_ENABLED +#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED +#define __USB_IS_CLK_ENABLED __HAL_RCC_USB_IS_CLK_ENABLED +#define __USB_IS_CLK_DISABLED __HAL_RCC_USB_IS_CLK_DISABLED +#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED +#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED + +#if defined(STM32L1) +#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#endif /* STM32L1 */ + +#if defined(STM32F4) +#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDMMC1_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __HAL_RCC_SDMMC1_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED __HAL_RCC_SDIO_IS_CLK_ENABLED +#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED __HAL_RCC_SDIO_IS_CLK_DISABLED +#define Sdmmc1ClockSelection SdioClockSelection +#define RCC_PERIPHCLK_SDMMC1 RCC_PERIPHCLK_SDIO +#define RCC_SDMMC1CLKSOURCE_CLK48 RCC_SDIOCLKSOURCE_CK48 +#define RCC_SDMMC1CLKSOURCE_SYSCLK RCC_SDIOCLKSOURCE_SYSCLK +#define __HAL_RCC_SDMMC1_CONFIG __HAL_RCC_SDIO_CONFIG +#define __HAL_RCC_GET_SDMMC1_SOURCE __HAL_RCC_GET_SDIO_SOURCE +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define __HAL_RCC_SDIO_FORCE_RESET __HAL_RCC_SDMMC1_FORCE_RESET +#define __HAL_RCC_SDIO_RELEASE_RESET __HAL_RCC_SDMMC1_RELEASE_RESET +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDIO_CLK_ENABLE __HAL_RCC_SDMMC1_CLK_ENABLE +#define __HAL_RCC_SDIO_CLK_DISABLE __HAL_RCC_SDMMC1_CLK_DISABLE +#define __HAL_RCC_SDIO_IS_CLK_ENABLED __HAL_RCC_SDMMC1_IS_CLK_ENABLED +#define __HAL_RCC_SDIO_IS_CLK_DISABLED __HAL_RCC_SDMMC1_IS_CLK_DISABLED +#define SdioClockSelection Sdmmc1ClockSelection +#define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 +#define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#endif + +#if defined(STM32F7) +#define RCC_SDIOCLKSOURCE_CLK48 RCC_SDMMC1CLKSOURCE_CLK48 +#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK +#endif + +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + +#define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG +#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG + +#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE + +#define IS_RCC_MSIRANGE IS_RCC_MSI_CLOCK_RANGE +#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE +#define IS_RCC_SYSCLK_DIV IS_RCC_HCLK +#define IS_RCC_HCLK_DIV IS_RCC_PCLK +#define IS_RCC_PERIPHCLK IS_RCC_PERIPHCLOCK + +#define RCC_IT_HSI14 RCC_IT_HSI14RDY + +#define RCC_IT_CSSLSE RCC_IT_LSECSS +#define RCC_IT_CSSHSE RCC_IT_CSS + +#define RCC_PLLMUL_3 RCC_PLL_MUL3 +#define RCC_PLLMUL_4 RCC_PLL_MUL4 +#define RCC_PLLMUL_6 RCC_PLL_MUL6 +#define RCC_PLLMUL_8 RCC_PLL_MUL8 +#define RCC_PLLMUL_12 RCC_PLL_MUL12 +#define RCC_PLLMUL_16 RCC_PLL_MUL16 +#define RCC_PLLMUL_24 RCC_PLL_MUL24 +#define RCC_PLLMUL_32 RCC_PLL_MUL32 +#define RCC_PLLMUL_48 RCC_PLL_MUL48 + +#define RCC_PLLDIV_2 RCC_PLL_DIV2 +#define RCC_PLLDIV_3 RCC_PLL_DIV3 +#define RCC_PLLDIV_4 RCC_PLL_DIV4 + +#define IS_RCC_MCOSOURCE IS_RCC_MCO1SOURCE +#define __HAL_RCC_MCO_CONFIG __HAL_RCC_MCO1_CONFIG +#define RCC_MCO_NODIV RCC_MCODIV_1 +#define RCC_MCO_DIV1 RCC_MCODIV_1 +#define RCC_MCO_DIV2 RCC_MCODIV_2 +#define RCC_MCO_DIV4 RCC_MCODIV_4 +#define RCC_MCO_DIV8 RCC_MCODIV_8 +#define RCC_MCO_DIV16 RCC_MCODIV_16 +#define RCC_MCO_DIV32 RCC_MCODIV_32 +#define RCC_MCO_DIV64 RCC_MCODIV_64 +#define RCC_MCO_DIV128 RCC_MCODIV_128 +#define RCC_MCOSOURCE_NONE RCC_MCO1SOURCE_NOCLOCK +#define RCC_MCOSOURCE_LSI RCC_MCO1SOURCE_LSI +#define RCC_MCOSOURCE_LSE RCC_MCO1SOURCE_LSE +#define RCC_MCOSOURCE_SYSCLK RCC_MCO1SOURCE_SYSCLK +#define RCC_MCOSOURCE_HSI RCC_MCO1SOURCE_HSI +#define RCC_MCOSOURCE_HSI14 RCC_MCO1SOURCE_HSI14 +#define RCC_MCOSOURCE_HSI48 RCC_MCO1SOURCE_HSI48 +#define RCC_MCOSOURCE_HSE RCC_MCO1SOURCE_HSE +#define RCC_MCOSOURCE_PLLCLK_DIV1 RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 + +#if defined(STM32U0) +#define RCC_SYSCLKSOURCE_STATUS_PLLR RCC_SYSCLKSOURCE_STATUS_PLLCLK +#endif + +#if defined(STM32L4) || defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5) || \ + defined(STM32WL) || defined(STM32C0) || defined(STM32N6) || defined(STM32H7RS) || \ + defined(STM32U0) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#else +#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK +#endif + +#define RCC_USBCLK_PLLSAI1 RCC_USBCLKSOURCE_PLLSAI1 +#define RCC_USBCLK_PLL RCC_USBCLKSOURCE_PLL +#define RCC_USBCLK_MSI RCC_USBCLKSOURCE_MSI +#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1 RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1_5 RCC_USBCLKSOURCE_PLL_DIV1_5 +#define RCC_USBPLLCLK_DIV2 RCC_USBCLKSOURCE_PLL_DIV2 +#define RCC_USBPLLCLK_DIV3 RCC_USBCLKSOURCE_PLL_DIV3 + +#define HSION_BitNumber RCC_HSION_BIT_NUMBER +#define HSION_BITNUMBER RCC_HSION_BIT_NUMBER +#define HSEON_BitNumber RCC_HSEON_BIT_NUMBER +#define HSEON_BITNUMBER RCC_HSEON_BIT_NUMBER +#define MSION_BITNUMBER RCC_MSION_BIT_NUMBER +#define CSSON_BitNumber RCC_CSSON_BIT_NUMBER +#define CSSON_BITNUMBER RCC_CSSON_BIT_NUMBER +#define PLLON_BitNumber RCC_PLLON_BIT_NUMBER +#define PLLON_BITNUMBER RCC_PLLON_BIT_NUMBER +#define PLLI2SON_BitNumber RCC_PLLI2SON_BIT_NUMBER +#define I2SSRC_BitNumber RCC_I2SSRC_BIT_NUMBER +#define RTCEN_BitNumber RCC_RTCEN_BIT_NUMBER +#define RTCEN_BITNUMBER RCC_RTCEN_BIT_NUMBER +#define BDRST_BitNumber RCC_BDRST_BIT_NUMBER +#define BDRST_BITNUMBER RCC_BDRST_BIT_NUMBER +#define RTCRST_BITNUMBER RCC_RTCRST_BIT_NUMBER +#define LSION_BitNumber RCC_LSION_BIT_NUMBER +#define LSION_BITNUMBER RCC_LSION_BIT_NUMBER +#define LSEON_BitNumber RCC_LSEON_BIT_NUMBER +#define LSEON_BITNUMBER RCC_LSEON_BIT_NUMBER +#define LSEBYP_BITNUMBER RCC_LSEBYP_BIT_NUMBER +#define PLLSAION_BitNumber RCC_PLLSAION_BIT_NUMBER +#define TIMPRE_BitNumber RCC_TIMPRE_BIT_NUMBER +#define RMVF_BitNumber RCC_RMVF_BIT_NUMBER +#define RMVF_BITNUMBER RCC_RMVF_BIT_NUMBER +#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER +#define CR_BYTE2_ADDRESS RCC_CR_BYTE2_ADDRESS +#define CIR_BYTE1_ADDRESS RCC_CIR_BYTE1_ADDRESS +#define CIR_BYTE2_ADDRESS RCC_CIR_BYTE2_ADDRESS +#define BDCR_BYTE0_ADDRESS RCC_BDCR_BYTE0_ADDRESS +#define DBP_TIMEOUT_VALUE RCC_DBP_TIMEOUT_VALUE +#define LSE_TIMEOUT_VALUE RCC_LSE_TIMEOUT_VALUE + +#define CR_HSION_BB RCC_CR_HSION_BB +#define CR_CSSON_BB RCC_CR_CSSON_BB +#define CR_PLLON_BB RCC_CR_PLLON_BB +#define CR_PLLI2SON_BB RCC_CR_PLLI2SON_BB +#define CR_MSION_BB RCC_CR_MSION_BB +#define CSR_LSION_BB RCC_CSR_LSION_BB +#define CSR_LSEON_BB RCC_CSR_LSEON_BB +#define CSR_LSEBYP_BB RCC_CSR_LSEBYP_BB +#define CSR_RTCEN_BB RCC_CSR_RTCEN_BB +#define CSR_RTCRST_BB RCC_CSR_RTCRST_BB +#define CFGR_I2SSRC_BB RCC_CFGR_I2SSRC_BB +#define BDCR_RTCEN_BB RCC_BDCR_RTCEN_BB +#define BDCR_BDRST_BB RCC_BDCR_BDRST_BB +#define CR_HSEON_BB RCC_CR_HSEON_BB +#define CSR_RMVF_BB RCC_CSR_RMVF_BB +#define CR_PLLSAION_BB RCC_CR_PLLSAION_BB +#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB + +#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE +#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE +#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE +#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE +#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE __HAL_RCC_CRS_RELOADVALUE_CALCULATE + +#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT + +#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN +#define RCC_CRS_TRIMOV RCC_CRS_TRIMOVF + +#define RCC_PERIPHCLK_CK48 RCC_PERIPHCLK_CLK48 +#define RCC_CK48CLKSOURCE_PLLQ RCC_CLK48CLKSOURCE_PLLQ +#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP +#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ +#define IS_RCC_CK48CLKSOURCE IS_RCC_CLK48CLKSOURCE +#define RCC_SDIOCLKSOURCE_CK48 RCC_SDIOCLKSOURCE_CLK48 + +#define __HAL_RCC_DFSDM_CLK_ENABLE __HAL_RCC_DFSDM1_CLK_ENABLE +#define __HAL_RCC_DFSDM_CLK_DISABLE __HAL_RCC_DFSDM1_CLK_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_ENABLED __HAL_RCC_DFSDM1_IS_CLK_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_DISABLED __HAL_RCC_DFSDM1_IS_CLK_DISABLED +#define __HAL_RCC_DFSDM_FORCE_RESET __HAL_RCC_DFSDM1_FORCE_RESET +#define __HAL_RCC_DFSDM_RELEASE_RESET __HAL_RCC_DFSDM1_RELEASE_RESET +#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE +#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED +#define DfsdmClockSelection Dfsdm1ClockSelection +#define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK +#define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG +#define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#if !defined(STM32U0) +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 +#endif + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 +#if defined(STM32U5) +#define MSIKPLLModeSEL RCC_MSIKPLL_MODE_SEL +#define MSISPLLModeSEL RCC_MSISPLL_MODE_SEL +#define __HAL_RCC_AHB21_CLK_DISABLE __HAL_RCC_AHB2_1_CLK_DISABLE +#define __HAL_RCC_AHB22_CLK_DISABLE __HAL_RCC_AHB2_2_CLK_DISABLE +#define __HAL_RCC_AHB1_CLK_Disable_Clear __HAL_RCC_AHB1_CLK_ENABLE +#define __HAL_RCC_AHB21_CLK_Disable_Clear __HAL_RCC_AHB2_1_CLK_ENABLE +#define __HAL_RCC_AHB22_CLK_Disable_Clear __HAL_RCC_AHB2_2_CLK_ENABLE +#define __HAL_RCC_AHB3_CLK_Disable_Clear __HAL_RCC_AHB3_CLK_ENABLE +#define __HAL_RCC_APB1_CLK_Disable_Clear __HAL_RCC_APB1_CLK_ENABLE +#define __HAL_RCC_APB2_CLK_Disable_Clear __HAL_RCC_APB2_CLK_ENABLE +#define __HAL_RCC_APB3_CLK_Disable_Clear __HAL_RCC_APB3_CLK_ENABLE +#define IS_RCC_MSIPLLModeSelection IS_RCC_MSIPLLMODE_SELECT +#define RCC_PERIPHCLK_CLK48 RCC_PERIPHCLK_ICLK +#define RCC_CLK48CLKSOURCE_HSI48 RCC_ICLK_CLKSOURCE_HSI48 +#define RCC_CLK48CLKSOURCE_PLL2 RCC_ICLK_CLKSOURCE_PLL2 +#define RCC_CLK48CLKSOURCE_PLL1 RCC_ICLK_CLKSOURCE_PLL1 +#define RCC_CLK48CLKSOURCE_MSIK RCC_ICLK_CLKSOURCE_MSIK +#define __HAL_RCC_ADC1_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __HAL_RCC_ADC1_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __HAL_RCC_ADC1_IS_CLK_ENABLED __HAL_RCC_ADC12_IS_CLK_ENABLED +#define __HAL_RCC_ADC1_IS_CLK_DISABLED __HAL_RCC_ADC12_IS_CLK_DISABLED +#define __HAL_RCC_ADC1_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __HAL_RCC_ADC1_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __HAL_RCC_ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC12_CLK_SLEEP_ENABLE +#define __HAL_RCC_ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC12_CLK_SLEEP_DISABLE +#define __HAL_RCC_GET_CLK48_SOURCE __HAL_RCC_GET_ICLK_SOURCE +#define __HAL_RCC_PLLFRACN_ENABLE __HAL_RCC_PLL_FRACN_ENABLE +#define __HAL_RCC_PLLFRACN_DISABLE __HAL_RCC_PLL_FRACN_DISABLE +#define __HAL_RCC_PLLFRACN_CONFIG __HAL_RCC_PLL_FRACN_CONFIG +#define IS_RCC_PLLFRACN_VALUE IS_RCC_PLL_FRACN_VALUE +#endif /* STM32U5 */ + +#if defined(STM32H5) +#define __HAL_RCC_PLLFRACN_ENABLE __HAL_RCC_PLL_FRACN_ENABLE +#define __HAL_RCC_PLLFRACN_DISABLE __HAL_RCC_PLL_FRACN_DISABLE +#define __HAL_RCC_PLLFRACN_CONFIG __HAL_RCC_PLL_FRACN_CONFIG +#define IS_RCC_PLLFRACN_VALUE IS_RCC_PLL_FRACN_VALUE + +#define RCC_PLLSOURCE_NONE RCC_PLL1_SOURCE_NONE +#define RCC_PLLSOURCE_HSI RCC_PLL1_SOURCE_HSI +#define RCC_PLLSOURCE_CSI RCC_PLL1_SOURCE_CSI +#define RCC_PLLSOURCE_HSE RCC_PLL1_SOURCE_HSE +#define RCC_PLLVCIRANGE_0 RCC_PLL1_VCIRANGE_0 +#define RCC_PLLVCIRANGE_1 RCC_PLL1_VCIRANGE_1 +#define RCC_PLLVCIRANGE_2 RCC_PLL1_VCIRANGE_2 +#define RCC_PLLVCIRANGE_3 RCC_PLL1_VCIRANGE_3 +#define RCC_PLL1VCOWIDE RCC_PLL1_VCORANGE_WIDE +#define RCC_PLL1VCOMEDIUM RCC_PLL1_VCORANGE_MEDIUM + +#define IS_RCC_PLLSOURCE IS_RCC_PLL1_SOURCE +#define IS_RCC_PLLRGE_VALUE IS_RCC_PLL1_VCIRGE_VALUE +#define IS_RCC_PLLVCORGE_VALUE IS_RCC_PLL1_VCORGE_VALUE +#define IS_RCC_PLLCLOCKOUT_VALUE IS_RCC_PLL1_CLOCKOUT_VALUE +#define IS_RCC_PLL_FRACN_VALUE IS_RCC_PLL1_FRACN_VALUE +#define IS_RCC_PLLM_VALUE IS_RCC_PLL1_DIVM_VALUE +#define IS_RCC_PLLN_VALUE IS_RCC_PLL1_MULN_VALUE +#define IS_RCC_PLLP_VALUE IS_RCC_PLL1_DIVP_VALUE +#define IS_RCC_PLLQ_VALUE IS_RCC_PLL1_DIVQ_VALUE +#define IS_RCC_PLLR_VALUE IS_RCC_PLL1_DIVR_VALUE + +#define __HAL_RCC_PLL_ENABLE __HAL_RCC_PLL1_ENABLE +#define __HAL_RCC_PLL_DISABLE __HAL_RCC_PLL1_DISABLE +#define __HAL_RCC_PLL_FRACN_ENABLE __HAL_RCC_PLL1_FRACN_ENABLE +#define __HAL_RCC_PLL_FRACN_DISABLE __HAL_RCC_PLL1_FRACN_DISABLE +#define __HAL_RCC_PLL_CONFIG __HAL_RCC_PLL1_CONFIG +#define __HAL_RCC_PLL_PLLSOURCE_CONFIG __HAL_RCC_PLL1_PLLSOURCE_CONFIG +#define __HAL_RCC_PLL_DIVM_CONFIG __HAL_RCC_PLL1_DIVM_CONFIG +#define __HAL_RCC_PLL_FRACN_CONFIG __HAL_RCC_PLL1_FRACN_CONFIG +#define __HAL_RCC_PLL_VCIRANGE __HAL_RCC_PLL1_VCIRANGE +#define __HAL_RCC_PLL_VCORANGE __HAL_RCC_PLL1_VCORANGE +#define __HAL_RCC_GET_PLL_OSCSOURCE __HAL_RCC_GET_PLL1_OSCSOURCE +#define __HAL_RCC_PLLCLKOUT_ENABLE __HAL_RCC_PLL1_CLKOUT_ENABLE +#define __HAL_RCC_PLLCLKOUT_DISABLE __HAL_RCC_PLL1_CLKOUT_DISABLE +#define __HAL_RCC_GET_PLLCLKOUT_CONFIG __HAL_RCC_GET_PLL1_CLKOUT_CONFIG + +#define __HAL_RCC_PLL2FRACN_ENABLE __HAL_RCC_PLL2_FRACN_ENABLE +#define __HAL_RCC_PLL2FRACN_DISABLE __HAL_RCC_PLL2_FRACN_DISABLE +#define __HAL_RCC_PLL2CLKOUT_ENABLE __HAL_RCC_PLL2_CLKOUT_ENABLE +#define __HAL_RCC_PLL2CLKOUT_DISABLE __HAL_RCC_PLL2_CLKOUT_DISABLE +#define __HAL_RCC_PLL2FRACN_CONFIG __HAL_RCC_PLL2_FRACN_CONFIG +#define __HAL_RCC_GET_PLL2CLKOUT_CONFIG __HAL_RCC_GET_PLL2_CLKOUT_CONFIG + +#define __HAL_RCC_PLL3FRACN_ENABLE __HAL_RCC_PLL3_FRACN_ENABLE +#define __HAL_RCC_PLL3FRACN_DISABLE __HAL_RCC_PLL3_FRACN_DISABLE +#define __HAL_RCC_PLL3CLKOUT_ENABLE __HAL_RCC_PLL3_CLKOUT_ENABLE +#define __HAL_RCC_PLL3CLKOUT_DISABLE __HAL_RCC_PLL3_CLKOUT_DISABLE +#define __HAL_RCC_PLL3FRACN_CONFIG __HAL_RCC_PLL3_FRACN_CONFIG +#define __HAL_RCC_GET_PLL3CLKOUT_CONFIG __HAL_RCC_GET_PLL3_CLKOUT_CONFIG + +#define RCC_PLL2VCIRANGE_0 RCC_PLL2_VCIRANGE_0 +#define RCC_PLL2VCIRANGE_1 RCC_PLL2_VCIRANGE_1 +#define RCC_PLL2VCIRANGE_2 RCC_PLL2_VCIRANGE_2 +#define RCC_PLL2VCIRANGE_3 RCC_PLL2_VCIRANGE_3 + +#define RCC_PLL2VCOWIDE RCC_PLL2_VCORANGE_WIDE +#define RCC_PLL2VCOMEDIUM RCC_PLL2_VCORANGE_MEDIUM + +#define RCC_PLL2SOURCE_NONE RCC_PLL2_SOURCE_NONE +#define RCC_PLL2SOURCE_HSI RCC_PLL2_SOURCE_HSI +#define RCC_PLL2SOURCE_CSI RCC_PLL2_SOURCE_CSI +#define RCC_PLL2SOURCE_HSE RCC_PLL2_SOURCE_HSE + +#define RCC_PLL3VCIRANGE_0 RCC_PLL3_VCIRANGE_0 +#define RCC_PLL3VCIRANGE_1 RCC_PLL3_VCIRANGE_1 +#define RCC_PLL3VCIRANGE_2 RCC_PLL3_VCIRANGE_2 +#define RCC_PLL3VCIRANGE_3 RCC_PLL3_VCIRANGE_3 + +#define RCC_PLL3VCOWIDE RCC_PLL3_VCORANGE_WIDE +#define RCC_PLL3VCOMEDIUM RCC_PLL3_VCORANGE_MEDIUM + +#define RCC_PLL3SOURCE_NONE RCC_PLL3_SOURCE_NONE +#define RCC_PLL3SOURCE_HSI RCC_PLL3_SOURCE_HSI +#define RCC_PLL3SOURCE_CSI RCC_PLL3_SOURCE_CSI +#define RCC_PLL3SOURCE_HSE RCC_PLL3_SOURCE_HSE + + +#endif /* STM32H5 */ + +/** + * @} + */ + +/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose + * @{ + */ +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) + +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || \ + defined (STM32L4P5xx)|| defined (STM32L4Q5xx) || defined (STM32G4) || defined (STM32WL) || defined (STM32U5) || \ + defined (STM32WBA) || defined (STM32H5) || \ + defined (STM32C0) || defined (STM32N6) || defined (STM32H7RS) || defined (STM32U0) || defined (STM32U3) +#else +#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif +#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT +#define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT + +#if defined (STM32F1) +#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() + +#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT() + +#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT() + +#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG() + +#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() +#else +#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG())) +#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT())) +#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT())) +#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG())) +#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT())) +#endif /* STM32F1 */ + +#if defined (STM32F0) || defined (STM32F2) || defined (STM32F3) || defined (STM32F4) || defined (STM32F7) || \ + defined (STM32H7) || \ + defined (STM32L0) || defined (STM32L1) || \ + defined (STM32WB) +#define __HAL_RTC_TAMPER_GET_IT __HAL_RTC_TAMPER_GET_FLAG +#endif + +#define IS_ALARM IS_RTC_ALARM +#define IS_ALARM_MASK IS_RTC_ALARM_MASK +#define IS_TAMPER IS_RTC_TAMPER +#define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT +#define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE +#define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION +#define IS_TAMPER_PULLUP_STATE IS_RTC_TAMPER_PULLUP_STATE +#define IS_TAMPER_SAMPLING_FREQ IS_RTC_TAMPER_SAMPLING_FREQ +#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION +#define IS_TAMPER_TRIGGER IS_RTC_TAMPER_TRIGGER +#define IS_WAKEUP_CLOCK IS_RTC_WAKEUP_CLOCK +#define IS_WAKEUP_COUNTER IS_RTC_WAKEUP_COUNTER + +#define __RTC_WRITEPROTECTION_ENABLE __HAL_RTC_WRITEPROTECTION_ENABLE +#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE + +#if defined (STM32H5) +#define __HAL_RCC_RTCAPB_CLK_ENABLE __HAL_RCC_RTC_CLK_ENABLE +#define __HAL_RCC_RTCAPB_CLK_DISABLE __HAL_RCC_RTC_CLK_DISABLE +#endif /* STM32H5 */ + +/** + * @} + */ + +/** @defgroup HAL_SD_Aliased_Macros HAL SD/MMC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE +#define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS + +#if !defined(STM32F1) && !defined(STM32F2) && !defined(STM32F4) && !defined(STM32L1) +#define eMMC_HIGH_VOLTAGE_RANGE EMMC_HIGH_VOLTAGE_RANGE +#define eMMC_DUAL_VOLTAGE_RANGE EMMC_DUAL_VOLTAGE_RANGE +#define eMMC_LOW_VOLTAGE_RANGE EMMC_LOW_VOLTAGE_RANGE + +#define SDMMC_NSpeed_CLK_DIV SDMMC_NSPEED_CLK_DIV +#define SDMMC_HSpeed_CLK_DIV SDMMC_HSPEED_CLK_DIV +#endif + +#if defined(STM32F4) || defined(STM32F2) +#define SD_SDMMC_DISABLED SD_SDIO_DISABLED +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND +/* alias CMSIS */ +#define SDMMC1_IRQn SDIO_IRQn +#define SDMMC1_IRQHandler SDIO_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define SD_SDIO_DISABLED SD_SDMMC_DISABLED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION +#define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND +#define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT +#define SD_CMD_SDIO_RW_EXTENDED SD_CMD_SDMMC_RW_EXTENDED +#define __HAL_SD_SDIO_ENABLE __HAL_SD_SDMMC_ENABLE +#define __HAL_SD_SDIO_DISABLE __HAL_SD_SDMMC_DISABLE +#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE +#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE +#define __HAL_SD_SDIO_ENABLE_IT __HAL_SD_SDMMC_ENABLE_IT +#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT +#define __HAL_SD_SDIO_GET_FLAG __HAL_SD_SDMMC_GET_FLAG +#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG +#define __HAL_SD_SDIO_GET_IT __HAL_SD_SDMMC_GET_IT +#define __HAL_SD_SDIO_CLEAR_IT __HAL_SD_SDMMC_CLEAR_IT +#define SDIO_STATIC_FLAGS SDMMC_STATIC_FLAGS +#define SDIO_CMD0TIMEOUT SDMMC_CMD0TIMEOUT +#define SD_SDIO_SEND_IF_COND SD_SDMMC_SEND_IF_COND +/* alias CMSIS for compatibilities */ +#define SDIO_IRQn SDMMC1_IRQn +#define SDIO_IRQHandler SDMMC1_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7) +#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef +#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef +#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef +#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef +#endif + +#if defined(STM32H7) || defined(STM32L5) +#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif +/** + * @} + */ + +/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __SMARTCARD_ENABLE_IT __HAL_SMARTCARD_ENABLE_IT +#define __SMARTCARD_DISABLE_IT __HAL_SMARTCARD_DISABLE_IT +#define __SMARTCARD_ENABLE __HAL_SMARTCARD_ENABLE +#define __SMARTCARD_DISABLE __HAL_SMARTCARD_DISABLE +#define __SMARTCARD_DMA_REQUEST_ENABLE __HAL_SMARTCARD_DMA_REQUEST_ENABLE +#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE + +#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE +#define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE + +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_SMBUS_RESET_CR1 SMBUS_RESET_CR1 +#define __HAL_SMBUS_RESET_CR2 SMBUS_RESET_CR2 +#define __HAL_SMBUS_GENERATE_START SMBUS_GENERATE_START +#define __HAL_SMBUS_GET_ADDR_MATCH SMBUS_GET_ADDR_MATCH +#define __HAL_SMBUS_GET_DIR SMBUS_GET_DIR +#define __HAL_SMBUS_GET_STOP_MODE SMBUS_GET_STOP_MODE +#define __HAL_SMBUS_GET_PEC_MODE SMBUS_GET_PEC_MODE +#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_SPI_1LINE_TX SPI_1LINE_TX +#define __HAL_SPI_1LINE_RX SPI_1LINE_RX +#define __HAL_SPI_RESET_CRC SPI_RESET_CRC + +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION +#define __UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __UART_MASK_COMPUTATION UART_MASK_COMPUTATION + +#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD + +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __USART_ENABLE_IT __HAL_USART_ENABLE_IT +#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT +#define __USART_ENABLE __HAL_USART_ENABLE +#define __USART_DISABLE __HAL_USART_DISABLE + +#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE +#define __USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F7) +#define USART_OVERSAMPLING_16 0x00000000U +#define USART_OVERSAMPLING_8 USART_CR1_OVER8 + +#define IS_USART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == USART_OVERSAMPLING_16) || \ + ((__SAMPLING__) == USART_OVERSAMPLING_8)) +#endif /* STM32F0 || STM32F3 || STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose + * @{ + */ +#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE + +#define USB_FS_EXTI_TRIGGER_RISING_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE +#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE +#define USB_FS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_FS_EXTI_LINE_WAKEUP USB_OTG_FS_WAKEUP_EXTI_LINE + +#define USB_HS_EXTI_TRIGGER_RISING_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE +#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE +#define USB_HS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_HS_EXTI_LINE_WAKEUP USB_OTG_HS_WAKEUP_EXTI_LINE + +#define __HAL_USB_EXTI_ENABLE_IT __HAL_USB_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_EXTI_DISABLE_IT __HAL_USB_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_EXTI_GET_FLAG __HAL_USB_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_EXTI_CLEAR_FLAG __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE + +#define __HAL_USB_FS_EXTI_ENABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_FS_EXTI_DISABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_FS_EXTI_GET_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_FS_EXTI_CLEAR_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_FS_EXTI_GENERATE_SWIT __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT + +#define __HAL_USB_HS_EXTI_ENABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_HS_EXTI_DISABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_HS_EXTI_GET_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_HS_EXTI_CLEAR_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_HS_EXTI_GENERATE_SWIT __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT + +#define HAL_PCD_ActiveRemoteWakeup HAL_PCD_ActivateRemoteWakeup +#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup + +#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo +#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo +#if defined(STM32U5) +#define USB_OTG_GOTGCTL_BSESVLD USB_OTG_GOTGCTL_BSVLD +#define USB_OTG_GAHBCFG_GINT USB_OTG_GAHBCFG_GINTMSK +#define USB_OTG_GUSBCFG_PHYLPCS USB_OTG_GUSBCFG_PHYLPC +#define USB_OTG_GRSTCTL_HSRST USB_OTG_GRSTCTL_PSRST +#define USB_OTG_GINTSTS_BOUTNAKEFF USB_OTG_GINTSTS_GONAKEFF +#define USB_OTG_GINTSTS_WKUINT USB_OTG_GINTSTS_WKUPINT +#define USB_OTG_GINTMSK_PXFRM_IISOOXFRM USB_OTG_GINTMSK_IPXFRM_IISOOXFRM +#define USB_OTG_GRXSTSP_EPNUM USB_OTG_GRXSTSP_EPNUM_CHNUM +#define USB_OTG_GLPMCFG_L1ResumeOK USB_OTG_GLPMCFG_L1RSMOK +#define USB_OTG_HPTXFSIZ_PTXFD USB_OTG_HPTXFSIZ_PTXFSIZ +#define USB_OTG_HCCHAR_MC USB_OTG_HCCHAR_MCNT +#define USB_OTG_HCCHAR_MC_0 USB_OTG_HCCHAR_MCNT_0 +#define USB_OTG_HCCHAR_MC_1 USB_OTG_HCCHAR_MCNT_1 +#define USB_OTG_HCINTMSK_AHBERR USB_OTG_HCINTMSK_AHBERRM +#define USB_OTG_HCTSIZ_DOPING USB_OTG_HCTSIZ_DOPNG +#define USB_OTG_DOEPMSK_OPEM USB_OTG_DOEPMSK_OUTPKTERRM +#define USB_OTG_DIEPCTL_SODDFRM USB_OTG_DIEPCTL_SD1PID_SODDFRM +#define USB_OTG_DIEPTSIZ_MULCNT USB_OTG_DIEPTSIZ_MCNT +#define USB_OTG_DOEPCTL_SODDFRM USB_OTG_DOEPCTL_SD1PID_SODDFRM +#define USB_OTG_DOEPCTL_DPID USB_OTG_DOEPCTL_DPID_EONUM +#define USB_OTG_DOEPTSIZ_STUPCNT USB_OTG_DOEPTSIZ_RXDPID +#define USB_OTG_DOEPTSIZ_STUPCNT_0 USB_OTG_DOEPTSIZ_RXDPID_0 +#define USB_OTG_DOEPTSIZ_STUPCNT_1 USB_OTG_DOEPTSIZ_RXDPID_1 +#define USB_OTG_PCGCCTL_STOPCLK USB_OTG_PCGCCTL_STPPCLK +#define USB_OTG_PCGCCTL_GATECLK USB_OTG_PCGCCTL_GATEHCLK +#endif +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_TIM_SetICPrescalerValue TIM_SET_ICPRESCALERVALUE +#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE + +#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE +#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT + +#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE + +#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN +#define __HAL_TIM_PRESCALER __HAL_TIM_SET_PRESCALER +#define __HAL_TIM_SetCounter __HAL_TIM_SET_COUNTER +#define __HAL_TIM_GetCounter __HAL_TIM_GET_COUNTER +#define __HAL_TIM_SetAutoreload __HAL_TIM_SET_AUTORELOAD +#define __HAL_TIM_GetAutoreload __HAL_TIM_GET_AUTORELOAD +#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION +#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION +#define __HAL_TIM_SetICPrescaler __HAL_TIM_SET_ICPRESCALER +#define __HAL_TIM_GetICPrescaler __HAL_TIM_GET_ICPRESCALER +#define __HAL_TIM_SetCompare __HAL_TIM_SET_COMPARE +#define __HAL_TIM_GetCompare __HAL_TIM_GET_COMPARE + +#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1 + +#define TIM_OCMODE_ASSYMETRIC_PWM1 TIM_OCMODE_ASYMMETRIC_PWM1 +#define TIM_OCMODE_ASSYMETRIC_PWM2 TIM_OCMODE_ASYMMETRIC_PWM2 +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT +#define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT +#define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG +#define __HAL_ETH_EXTI_CLEAR_FLAG __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER + +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE +#define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG +/** + * @} + */ + +/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose + * @{ + */ +#define SAI_OUTPUTDRIVE_DISABLED SAI_OUTPUTDRIVE_DISABLE +#define SAI_OUTPUTDRIVE_ENABLED SAI_OUTPUTDRIVE_ENABLE +#define SAI_MASTERDIVIDER_ENABLED SAI_MASTERDIVIDER_ENABLE +#define SAI_MASTERDIVIDER_DISABLED SAI_MASTERDIVIDER_DISABLE +#define SAI_STREOMODE SAI_STEREOMODE +#define SAI_FIFOStatus_Empty SAI_FIFOSTATUS_EMPTY +#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL +#define SAI_FIFOStatus_1QuarterFull SAI_FIFOSTATUS_1QUARTERFULL +#define SAI_FIFOStatus_HalfFull SAI_FIFOSTATUS_HALFFULL +#define SAI_FIFOStatus_3QuartersFull SAI_FIFOSTATUS_3QUARTERFULL +#define SAI_FIFOStatus_Full SAI_FIFOSTATUS_FULL +#define IS_SAI_BLOCK_MONO_STREO_MODE IS_SAI_BLOCK_MONO_STEREO_MODE +#define SAI_SYNCHRONOUS_EXT SAI_SYNCHRONOUS_EXT_SAI1 +#define SAI_SYNCEXT_IN_ENABLE SAI_SYNCEXT_OUTBLOCKA_ENABLE +/** + * @} + */ + +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3) +#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT +#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA +#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart +#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT +#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA +#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop +#endif +/** + * @} + */ + +/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7) || defined(STM32H7) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif /* STM32L4 || STM32F4 || STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_Generic_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32F7) +#define ART_ACCLERATOR_ENABLE ART_ACCELERATOR_ENABLE +#endif /* STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32_HAL_LEGACY */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h new file mode 100644 index 00000000..f7eb847b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h @@ -0,0 +1,297 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal.h + * @author MCD Application Team + * @brief This file contains all the functions prototypes for the HAL + * module driver. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_H +#define __STM32F4xx_HAL_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_conf.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup HAL + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Constants HAL Exported Constants + * @{ + */ + +/** @defgroup HAL_TICK_FREQ Tick Frequency + * @{ + */ +typedef enum +{ + HAL_TICK_FREQ_10HZ = 100U, + HAL_TICK_FREQ_100HZ = 10U, + HAL_TICK_FREQ_1KHZ = 1U, + HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ +} HAL_TickFreqTypeDef; +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup HAL_Exported_Macros HAL Exported Macros + * @{ + */ + +/** @brief Freeze/Unfreeze Peripherals in Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM2() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM3() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM4() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM4_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM5() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM5_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM6() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM7() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM12() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM12_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM13() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM13_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM14() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#define __HAL_DBGMCU_FREEZE_RTC() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#define __HAL_DBGMCU_FREEZE_WWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#define __HAL_DBGMCU_FREEZE_IWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_FREEZE_CAN1() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN1_STOP)) +#define __HAL_DBGMCU_FREEZE_CAN2() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN2_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM1() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM8() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM8_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM9() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM9_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM10() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM10_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM11() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM11_STOP)) + +#define __HAL_DBGMCU_UNFREEZE_TIM2() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM3() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM4() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM4_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM5() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM5_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM6() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM7() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM12() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM12_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM13() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM13_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM14() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#define __HAL_DBGMCU_UNFREEZE_RTC() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#define __HAL_DBGMCU_UNFREEZE_WWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_IWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_CAN1() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN1_STOP)) +#define __HAL_DBGMCU_UNFREEZE_CAN2() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN2_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM1() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM8() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM8_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM9() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM9_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM10() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM10_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM11() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM11_STOP)) + +/** @brief Main Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FLASH() (SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE)) + +/** @brief System Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_0;\ + }while(0); + +/** @brief Embedded SRAM mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SRAM() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_0 | SYSCFG_MEMRMP_MEM_MODE_1);\ + }while(0); + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) +/** @brief FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FSMC() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\ + }while(0); +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +/** @brief FMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FMC() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\ + }while(0); + +/** @brief FMC/SDRAM Bank 1 and 2 mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_2);\ + }while(0); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup Cortex_Lockup_Enable Cortex Lockup Enable + * @{ + */ +/** @brief SYSCFG Break Lockup lock + * Enables and locks the connection of Cortex-M4 LOCKUP (Hardfault) output to TIM1/8 input + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_PVD_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_PVD_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_PVD_LOCK; \ + }while(0) +/** + * @} + */ + +/** @defgroup PVD_Lock_Enable PVD Lock + * @{ + */ +/** @brief SYSCFG Break PVD lock + * Enables and locks the PVD connection with Timer1/8 Break Input, , as well as the PVDE and PLS[2:0] in the PWR_CR register + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_LOCKUP_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_LOCKUP_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_LOCKUP_LOCK; \ + }while(0) +/** + * @} + */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup HAL_Private_Macros HAL Private Macros + * @{ + */ +#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || \ + ((FREQ) == HAL_TICK_FREQ_100HZ) || \ + ((FREQ) == HAL_TICK_FREQ_1KHZ)) +/** + * @} + */ + +/* Exported variables --------------------------------------------------------*/ + +/** @addtogroup HAL_Exported_Variables + * @{ + */ +extern __IO uint32_t uwTick; +extern uint32_t uwTickPrio; +extern HAL_TickFreqTypeDef uwTickFreq; +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup HAL_Exported_Functions + * @{ + */ +/** @addtogroup HAL_Exported_Functions_Group1 + * @{ + */ +/* Initialization and Configuration functions ******************************/ +HAL_StatusTypeDef HAL_Init(void); +HAL_StatusTypeDef HAL_DeInit(void); +void HAL_MspInit(void); +void HAL_MspDeInit(void); +HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority); +/** + * @} + */ + +/** @addtogroup HAL_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ************************************************/ +void HAL_IncTick(void); +void HAL_Delay(uint32_t Delay); +uint32_t HAL_GetTick(void); +uint32_t HAL_GetTickPrio(void); +HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq); +HAL_TickFreqTypeDef HAL_GetTickFreq(void); +void HAL_SuspendTick(void); +void HAL_ResumeTick(void); +uint32_t HAL_GetHalVersion(void); +uint32_t HAL_GetREVID(void); +uint32_t HAL_GetDEVID(void); +void HAL_DBGMCU_EnableDBGSleepMode(void); +void HAL_DBGMCU_DisableDBGSleepMode(void); +void HAL_DBGMCU_EnableDBGStopMode(void); +void HAL_DBGMCU_DisableDBGStopMode(void); +void HAL_DBGMCU_EnableDBGStandbyMode(void); +void HAL_DBGMCU_DisableDBGStandbyMode(void); +void HAL_EnableCompensationCell(void); +void HAL_DisableCompensationCell(void); +uint32_t HAL_GetUIDw0(void); +uint32_t HAL_GetUIDw1(void); +uint32_t HAL_GetUIDw2(void); +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +void HAL_EnableMemorySwappingBank(void); +void HAL_DisableMemorySwappingBank(void); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup HAL_Private_Variables HAL Private Variables + * @{ + */ +/** + * @} + */ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup HAL_Private_Constants HAL Private Constants + * @{ + */ +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_H */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h new file mode 100644 index 00000000..76909305 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h @@ -0,0 +1,410 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_cortex.h + * @author MCD Application Team + * @brief Header file of CORTEX HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CORTEX_H +#define __STM32F4xx_HAL_CORTEX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup CORTEX + * @{ + */ +/* Exported types ------------------------------------------------------------*/ +/** @defgroup CORTEX_Exported_Types Cortex Exported Types + * @{ + */ + +#if (__MPU_PRESENT == 1U) +/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition + * @brief MPU Region initialization structure + * @{ + */ +typedef struct +{ + uint8_t Enable; /*!< Specifies the status of the region. + This parameter can be a value of @ref CORTEX_MPU_Region_Enable */ + uint8_t Number; /*!< Specifies the number of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Number */ + uint32_t BaseAddress; /*!< Specifies the base address of the region to protect. */ + uint8_t Size; /*!< Specifies the size of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Size */ + uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + uint8_t TypeExtField; /*!< Specifies the TEX field level. + This parameter can be a value of @ref CORTEX_MPU_TEX_Levels */ + uint8_t AccessPermission; /*!< Specifies the region access permission type. + This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes */ + uint8_t DisableExec; /*!< Specifies the instruction access status. + This parameter can be a value of @ref CORTEX_MPU_Instruction_Access */ + uint8_t IsShareable; /*!< Specifies the shareability status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Shareable */ + uint8_t IsCacheable; /*!< Specifies the cacheable status of the region protected. + This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable */ + uint8_t IsBufferable; /*!< Specifies the bufferable status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable */ +}MPU_Region_InitTypeDef; +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants + * @{ + */ + +/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group + * @{ + */ +#define NVIC_PRIORITYGROUP_0 0x00000007U /*!< 0 bits for pre-emption priority + 4 bits for subpriority */ +#define NVIC_PRIORITYGROUP_1 0x00000006U /*!< 1 bits for pre-emption priority + 3 bits for subpriority */ +#define NVIC_PRIORITYGROUP_2 0x00000005U /*!< 2 bits for pre-emption priority + 2 bits for subpriority */ +#define NVIC_PRIORITYGROUP_3 0x00000004U /*!< 3 bits for pre-emption priority + 1 bits for subpriority */ +#define NVIC_PRIORITYGROUP_4 0x00000003U /*!< 4 bits for pre-emption priority + 0 bits for subpriority */ +/** + * @} + */ + +/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source + * @{ + */ +#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U +#define SYSTICK_CLKSOURCE_HCLK 0x00000004U + +/** + * @} + */ + +#if (__MPU_PRESENT == 1) +/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control + * @{ + */ +#define MPU_HFNMI_PRIVDEF_NONE 0x00000000U +#define MPU_HARDFAULT_NMI MPU_CTRL_HFNMIENA_Msk +#define MPU_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk +#define MPU_HFNMI_PRIVDEF (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) + +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable + * @{ + */ +#define MPU_REGION_ENABLE ((uint8_t)0x01) +#define MPU_REGION_DISABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access + * @{ + */ +#define MPU_INSTRUCTION_ACCESS_ENABLE ((uint8_t)0x00) +#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable + * @{ + */ +#define MPU_ACCESS_SHAREABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable + * @{ + */ +#define MPU_ACCESS_CACHEABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable + * @{ + */ +#define MPU_ACCESS_BUFFERABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels + * @{ + */ +#define MPU_TEX_LEVEL0 ((uint8_t)0x00) +#define MPU_TEX_LEVEL1 ((uint8_t)0x01) +#define MPU_TEX_LEVEL2 ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size + * @{ + */ +#define MPU_REGION_SIZE_32B ((uint8_t)0x04) +#define MPU_REGION_SIZE_64B ((uint8_t)0x05) +#define MPU_REGION_SIZE_128B ((uint8_t)0x06) +#define MPU_REGION_SIZE_256B ((uint8_t)0x07) +#define MPU_REGION_SIZE_512B ((uint8_t)0x08) +#define MPU_REGION_SIZE_1KB ((uint8_t)0x09) +#define MPU_REGION_SIZE_2KB ((uint8_t)0x0A) +#define MPU_REGION_SIZE_4KB ((uint8_t)0x0B) +#define MPU_REGION_SIZE_8KB ((uint8_t)0x0C) +#define MPU_REGION_SIZE_16KB ((uint8_t)0x0D) +#define MPU_REGION_SIZE_32KB ((uint8_t)0x0E) +#define MPU_REGION_SIZE_64KB ((uint8_t)0x0F) +#define MPU_REGION_SIZE_128KB ((uint8_t)0x10) +#define MPU_REGION_SIZE_256KB ((uint8_t)0x11) +#define MPU_REGION_SIZE_512KB ((uint8_t)0x12) +#define MPU_REGION_SIZE_1MB ((uint8_t)0x13) +#define MPU_REGION_SIZE_2MB ((uint8_t)0x14) +#define MPU_REGION_SIZE_4MB ((uint8_t)0x15) +#define MPU_REGION_SIZE_8MB ((uint8_t)0x16) +#define MPU_REGION_SIZE_16MB ((uint8_t)0x17) +#define MPU_REGION_SIZE_32MB ((uint8_t)0x18) +#define MPU_REGION_SIZE_64MB ((uint8_t)0x19) +#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A) +#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B) +#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C) +#define MPU_REGION_SIZE_1GB ((uint8_t)0x1D) +#define MPU_REGION_SIZE_2GB ((uint8_t)0x1E) +#define MPU_REGION_SIZE_4GB ((uint8_t)0x1F) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes + * @{ + */ +#define MPU_REGION_NO_ACCESS ((uint8_t)0x00) +#define MPU_REGION_PRIV_RW ((uint8_t)0x01) +#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02) +#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03) +#define MPU_REGION_PRIV_RO ((uint8_t)0x05) +#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number + * @{ + */ +#define MPU_REGION_NUMBER0 ((uint8_t)0x00) +#define MPU_REGION_NUMBER1 ((uint8_t)0x01) +#define MPU_REGION_NUMBER2 ((uint8_t)0x02) +#define MPU_REGION_NUMBER3 ((uint8_t)0x03) +#define MPU_REGION_NUMBER4 ((uint8_t)0x04) +#define MPU_REGION_NUMBER5 ((uint8_t)0x05) +#define MPU_REGION_NUMBER6 ((uint8_t)0x06) +#define MPU_REGION_NUMBER7 ((uint8_t)0x07) +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + + +/* Exported Macros -----------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup CORTEX_Exported_Functions + * @{ + */ + +/** @addtogroup CORTEX_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup); +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); +void HAL_NVIC_SystemReset(void); +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb); +/** + * @} + */ + +/** @addtogroup CORTEX_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +uint32_t HAL_NVIC_GetPriorityGrouping(void); +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority); +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn); +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn); +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource); +void HAL_SYSTICK_IRQHandler(void); +void HAL_SYSTICK_Callback(void); + +#if (__MPU_PRESENT == 1U) +void HAL_MPU_Enable(uint32_t MPU_Control); +void HAL_MPU_Disable(void); +void HAL_MPU_EnableRegion(uint32_t RegionNumber); +void HAL_MPU_DisableRegion(uint32_t RegionNumber); +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); +#endif /* __MPU_PRESENT */ +void HAL_CORTEX_ClearEvent(void); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Macros CORTEX Private Macros + * @{ + */ +#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \ + ((GROUP) == NVIC_PRIORITYGROUP_1) || \ + ((GROUP) == NVIC_PRIORITYGROUP_2) || \ + ((GROUP) == NVIC_PRIORITYGROUP_3) || \ + ((GROUP) == NVIC_PRIORITYGROUP_4)) + +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) + +#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) + +#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= (IRQn_Type)0x00U) + +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ + ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) + +#if (__MPU_PRESENT == 1U) +#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \ + ((STATE) == MPU_REGION_DISABLE)) + +#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \ + ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE)) + +#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || \ + ((STATE) == MPU_ACCESS_NOT_SHAREABLE)) + +#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || \ + ((STATE) == MPU_ACCESS_NOT_CACHEABLE)) + +#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || \ + ((STATE) == MPU_ACCESS_NOT_BUFFERABLE)) + +#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || \ + ((TYPE) == MPU_TEX_LEVEL1) || \ + ((TYPE) == MPU_TEX_LEVEL2)) + +#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RW) || \ + ((TYPE) == MPU_REGION_PRIV_RW_URO) || \ + ((TYPE) == MPU_REGION_FULL_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RO) || \ + ((TYPE) == MPU_REGION_PRIV_RO_URO)) + +#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \ + ((NUMBER) == MPU_REGION_NUMBER1) || \ + ((NUMBER) == MPU_REGION_NUMBER2) || \ + ((NUMBER) == MPU_REGION_NUMBER3) || \ + ((NUMBER) == MPU_REGION_NUMBER4) || \ + ((NUMBER) == MPU_REGION_NUMBER5) || \ + ((NUMBER) == MPU_REGION_NUMBER6) || \ + ((NUMBER) == MPU_REGION_NUMBER7)) + +#define IS_MPU_REGION_SIZE(SIZE) (((SIZE) == MPU_REGION_SIZE_32B) || \ + ((SIZE) == MPU_REGION_SIZE_64B) || \ + ((SIZE) == MPU_REGION_SIZE_128B) || \ + ((SIZE) == MPU_REGION_SIZE_256B) || \ + ((SIZE) == MPU_REGION_SIZE_512B) || \ + ((SIZE) == MPU_REGION_SIZE_1KB) || \ + ((SIZE) == MPU_REGION_SIZE_2KB) || \ + ((SIZE) == MPU_REGION_SIZE_4KB) || \ + ((SIZE) == MPU_REGION_SIZE_8KB) || \ + ((SIZE) == MPU_REGION_SIZE_16KB) || \ + ((SIZE) == MPU_REGION_SIZE_32KB) || \ + ((SIZE) == MPU_REGION_SIZE_64KB) || \ + ((SIZE) == MPU_REGION_SIZE_128KB) || \ + ((SIZE) == MPU_REGION_SIZE_256KB) || \ + ((SIZE) == MPU_REGION_SIZE_512KB) || \ + ((SIZE) == MPU_REGION_SIZE_1MB) || \ + ((SIZE) == MPU_REGION_SIZE_2MB) || \ + ((SIZE) == MPU_REGION_SIZE_4MB) || \ + ((SIZE) == MPU_REGION_SIZE_8MB) || \ + ((SIZE) == MPU_REGION_SIZE_16MB) || \ + ((SIZE) == MPU_REGION_SIZE_32MB) || \ + ((SIZE) == MPU_REGION_SIZE_64MB) || \ + ((SIZE) == MPU_REGION_SIZE_128MB) || \ + ((SIZE) == MPU_REGION_SIZE_256MB) || \ + ((SIZE) == MPU_REGION_SIZE_512MB) || \ + ((SIZE) == MPU_REGION_SIZE_1GB) || \ + ((SIZE) == MPU_REGION_SIZE_2GB) || \ + ((SIZE) == MPU_REGION_SIZE_4GB)) + +#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF) +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CORTEX_H */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h new file mode 100644 index 00000000..1df0d7d0 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h @@ -0,0 +1,212 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_def.h + * @author MCD Application Team + * @brief This file contains HAL common defines, enumeration, macros and + * structures definitions. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_DEF +#define __STM32F4xx_HAL_DEF + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" +#include "Legacy/stm32_hal_legacy.h" +#include + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief HAL Status structures definition + */ +typedef enum +{ + HAL_OK = 0x00U, + HAL_ERROR = 0x01U, + HAL_BUSY = 0x02U, + HAL_TIMEOUT = 0x03U +} HAL_StatusTypeDef; + +/** + * @brief HAL Lock structures definition + */ +typedef enum +{ + HAL_UNLOCKED = 0x00U, + HAL_LOCKED = 0x01U +} HAL_LockTypeDef; + +/* Exported macro ------------------------------------------------------------*/ + +#if !defined(UNUSED) +#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */ +#endif /* UNUSED */ + +#define HAL_MAX_DELAY 0xFFFFFFFFU + +#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) == (BIT)) +#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U) + +#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \ + do{ \ + (__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__); \ + (__DMA_HANDLE__).Parent = (__HANDLE__); \ + } while(0U) + +/** @brief Reset the Handle's State field. + * @param __HANDLE__ specifies the Peripheral Handle. + * @note This macro can be used for the following purpose: + * - When the Handle is declared as local variable; before passing it as parameter + * to HAL_PPP_Init() for the first time, it is mandatory to use this macro + * to set to 0 the Handle's "State" field. + * Otherwise, "State" field may have any random value and the first time the function + * HAL_PPP_Init() is called, the low level hardware initialization will be missed + * (i.e. HAL_PPP_MspInit() will not be executed). + * - When there is a need to reconfigure the low level hardware: instead of calling + * HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init(). + * In this later function, when the Handle's "State" field is set to 0, it will execute the function + * HAL_PPP_MspInit() which will reconfigure the low level hardware. + * @retval None + */ +#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U) + +#if (USE_RTOS == 1U) + /* Reserved for future use */ + #error "USE_RTOS should be 0 in the current HAL release" +#else + #define __HAL_LOCK(__HANDLE__) \ + do{ \ + if((__HANDLE__)->Lock == HAL_LOCKED) \ + { \ + return HAL_BUSY; \ + } \ + else \ + { \ + (__HANDLE__)->Lock = HAL_LOCKED; \ + } \ + }while (0U) + + #define __HAL_UNLOCK(__HANDLE__) \ + do{ \ + (__HANDLE__)->Lock = HAL_UNLOCKED; \ + }while (0U) +#endif /* USE_RTOS */ + +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ + #ifndef __weak + #define __weak __attribute__((weak)) + #endif + #ifndef __packed + #define __packed __attribute__((packed)) + #endif +#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ + #ifndef __weak + #define __weak __attribute__((weak)) + #endif /* __weak */ + #ifndef __packed + #define __packed __attribute__((__packed__)) + #endif /* __packed */ +#endif /* __GNUC__ */ + + +/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif + #ifndef __ALIGN_END + #define __ALIGN_END __attribute__ ((aligned (4))) + #endif +#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ + #ifndef __ALIGN_END +#define __ALIGN_END __attribute__ ((aligned (4))) + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif /* __ALIGN_BEGIN */ +#else + #ifndef __ALIGN_END + #define __ALIGN_END + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #if defined (__CC_ARM) /* ARM Compiler V5*/ +#define __ALIGN_BEGIN __align(4) + #elif defined (__ICCARM__) /* IAR Compiler */ + #define __ALIGN_BEGIN + #endif /* __CC_ARM */ + #endif /* __ALIGN_BEGIN */ +#endif /* __GNUC__ */ + + +/** + * @brief __RAM_FUNC definition + */ +#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) +/* ARM Compiler V4/V5 and V6 + -------------------------- + RAM functions are defined using the toolchain options. + Functions that are executed in RAM should reside in a separate source module. + Using the 'Options for File' dialog you can simply change the 'Code / Const' + area of a module to a memory space in physical RAM. + Available memory areas are declared in the 'Target' tab of the 'Options for Target' + dialog. +*/ +#define __RAM_FUNC + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- + RAM functions are defined using a specific toolchain keyword "__ramfunc". +*/ +#define __RAM_FUNC __ramfunc + +#elif defined ( __GNUC__ ) +/* GNU Compiler + ------------ + RAM functions are defined using a specific toolchain attribute + "__attribute__((section(".RamFunc")))". +*/ +#define __RAM_FUNC __attribute__((section(".RamFunc"))) + +#endif + +/** + * @brief __NOINLINE definition + */ +#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined ( __GNUC__ ) +/* ARM V4/V5 and V6 & GNU Compiler + ------------------------------- +*/ +#define __NOINLINE __attribute__ ( (noinline) ) + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- +*/ +#define __NOINLINE _Pragma("optimize = no_inline") + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ___STM32F4xx_HAL_DEF */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h new file mode 100644 index 00000000..7ff3836b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h @@ -0,0 +1,802 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma.h + * @author MCD Application Team + * @brief Header file of DMA HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_DMA_H +#define __STM32F4xx_HAL_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Types DMA Exported Types + * @brief DMA Exported Types + * @{ + */ + +/** + * @brief DMA Configuration Structure definition + */ +typedef struct +{ + uint32_t Channel; /*!< Specifies the channel used for the specified stream. + This parameter can be a value of @ref DMA_Channel_selection */ + + uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_Data_transfer_direction */ + + uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not. + This parameter can be a value of @ref DMA_Peripheral_incremented_mode */ + + uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not. + This parameter can be a value of @ref DMA_Memory_incremented_mode */ + + uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_Peripheral_data_size */ + + uint32_t MemDataAlignment; /*!< Specifies the Memory data width. + This parameter can be a value of @ref DMA_Memory_data_size */ + + uint32_t Mode; /*!< Specifies the operation mode of the DMAy Streamx. + This parameter can be a value of @ref DMA_mode + @note The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Stream */ + + uint32_t Priority; /*!< Specifies the software priority for the DMAy Streamx. + This parameter can be a value of @ref DMA_Priority_level */ + + uint32_t FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified stream. + This parameter can be a value of @ref DMA_FIFO_direct_mode + @note The Direct mode (FIFO mode disabled) cannot be used if the + memory-to-memory data transfer is configured on the selected stream */ + + uint32_t FIFOThreshold; /*!< Specifies the FIFO threshold level. + This parameter can be a value of @ref DMA_FIFO_threshold_level */ + + uint32_t MemBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_Memory_burst + @note The burst mode is possible only if the address Increment mode is enabled. */ + + uint32_t PeriphBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_Peripheral_burst + @note The burst mode is possible only if the address Increment mode is enabled. */ +}DMA_InitTypeDef; + + +/** + * @brief HAL DMA State structures definition + */ +typedef enum +{ + HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */ + HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */ + HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */ + HAL_DMA_STATE_TIMEOUT = 0x03U, /*!< DMA timeout state */ + HAL_DMA_STATE_ERROR = 0x04U, /*!< DMA error state */ + HAL_DMA_STATE_ABORT = 0x05U, /*!< DMA Abort state */ +}HAL_DMA_StateTypeDef; + +/** + * @brief HAL DMA Error Code structure definition + */ +typedef enum +{ + HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer */ + HAL_DMA_HALF_TRANSFER = 0x01U /*!< Half Transfer */ +}HAL_DMA_LevelCompleteTypeDef; + +/** + * @brief HAL DMA Error Code structure definition + */ +typedef enum +{ + HAL_DMA_XFER_CPLT_CB_ID = 0x00U, /*!< Full transfer */ + HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half Transfer */ + HAL_DMA_XFER_M1CPLT_CB_ID = 0x02U, /*!< M1 Full Transfer */ + HAL_DMA_XFER_M1HALFCPLT_CB_ID = 0x03U, /*!< M1 Half Transfer */ + HAL_DMA_XFER_ERROR_CB_ID = 0x04U, /*!< Error */ + HAL_DMA_XFER_ABORT_CB_ID = 0x05U, /*!< Abort */ + HAL_DMA_XFER_ALL_CB_ID = 0x06U /*!< All */ +}HAL_DMA_CallbackIDTypeDef; + +/** + * @brief DMA handle Structure definition + */ +typedef struct __DMA_HandleTypeDef +{ + DMA_Stream_TypeDef *Instance; /*!< Register base address */ + + DMA_InitTypeDef Init; /*!< DMA communication parameters */ + + HAL_LockTypeDef Lock; /*!< DMA locking object */ + + __IO HAL_DMA_StateTypeDef State; /*!< DMA transfer state */ + + void *Parent; /*!< Parent object state */ + + void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */ + + void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback */ + + void (* XferM1CpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete Memory1 callback */ + + void (* XferM1HalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer Half complete Memory1 callback */ + + void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */ + + void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer Abort callback */ + + __IO uint32_t ErrorCode; /*!< DMA Error code */ + + uint32_t StreamBaseAddress; /*!< DMA Stream Base Address */ + + uint32_t StreamIndex; /*!< DMA Stream Index */ + +}DMA_HandleTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Constants DMA Exported Constants + * @brief DMA Exported constants + * @{ + */ + +/** @defgroup DMA_Error_Code DMA Error Code + * @brief DMA Error Code + * @{ + */ +#define HAL_DMA_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_DMA_ERROR_TE 0x00000001U /*!< Transfer error */ +#define HAL_DMA_ERROR_FE 0x00000002U /*!< FIFO error */ +#define HAL_DMA_ERROR_DME 0x00000004U /*!< Direct Mode error */ +#define HAL_DMA_ERROR_TIMEOUT 0x00000020U /*!< Timeout error */ +#define HAL_DMA_ERROR_PARAM 0x00000040U /*!< Parameter error */ +#define HAL_DMA_ERROR_NO_XFER 0x00000080U /*!< Abort requested with no Xfer ongoing */ +#define HAL_DMA_ERROR_NOT_SUPPORTED 0x00000100U /*!< Not supported mode */ +/** + * @} + */ + +/** @defgroup DMA_Channel_selection DMA Channel selection + * @brief DMA channel selection + * @{ + */ +#define DMA_CHANNEL_0 0x00000000U /*!< DMA Channel 0 */ +#define DMA_CHANNEL_1 0x02000000U /*!< DMA Channel 1 */ +#define DMA_CHANNEL_2 0x04000000U /*!< DMA Channel 2 */ +#define DMA_CHANNEL_3 0x06000000U /*!< DMA Channel 3 */ +#define DMA_CHANNEL_4 0x08000000U /*!< DMA Channel 4 */ +#define DMA_CHANNEL_5 0x0A000000U /*!< DMA Channel 5 */ +#define DMA_CHANNEL_6 0x0C000000U /*!< DMA Channel 6 */ +#define DMA_CHANNEL_7 0x0E000000U /*!< DMA Channel 7 */ +#if defined (DMA_SxCR_CHSEL_3) +#define DMA_CHANNEL_8 0x10000000U /*!< DMA Channel 8 */ +#define DMA_CHANNEL_9 0x12000000U /*!< DMA Channel 9 */ +#define DMA_CHANNEL_10 0x14000000U /*!< DMA Channel 10 */ +#define DMA_CHANNEL_11 0x16000000U /*!< DMA Channel 11 */ +#define DMA_CHANNEL_12 0x18000000U /*!< DMA Channel 12 */ +#define DMA_CHANNEL_13 0x1A000000U /*!< DMA Channel 13 */ +#define DMA_CHANNEL_14 0x1C000000U /*!< DMA Channel 14 */ +#define DMA_CHANNEL_15 0x1E000000U /*!< DMA Channel 15 */ +#endif /* DMA_SxCR_CHSEL_3 */ +/** + * @} + */ + +/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction + * @brief DMA data transfer direction + * @{ + */ +#define DMA_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ +#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_SxCR_DIR_0) /*!< Memory to peripheral direction */ +#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_SxCR_DIR_1) /*!< Memory to memory direction */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode + * @brief DMA peripheral incremented mode + * @{ + */ +#define DMA_PINC_ENABLE ((uint32_t)DMA_SxCR_PINC) /*!< Peripheral increment mode enable */ +#define DMA_PINC_DISABLE 0x00000000U /*!< Peripheral increment mode disable */ +/** + * @} + */ + +/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode + * @brief DMA memory incremented mode + * @{ + */ +#define DMA_MINC_ENABLE ((uint32_t)DMA_SxCR_MINC) /*!< Memory increment mode enable */ +#define DMA_MINC_DISABLE 0x00000000U /*!< Memory increment mode disable */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size + * @brief DMA peripheral data size + * @{ + */ +#define DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment: Byte */ +#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_SxCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */ +#define DMA_PDATAALIGN_WORD ((uint32_t)DMA_SxCR_PSIZE_1) /*!< Peripheral data alignment: Word */ +/** + * @} + */ + +/** @defgroup DMA_Memory_data_size DMA Memory data size + * @brief DMA memory data size + * @{ + */ +#define DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment: Byte */ +#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_SxCR_MSIZE_0) /*!< Memory data alignment: HalfWord */ +#define DMA_MDATAALIGN_WORD ((uint32_t)DMA_SxCR_MSIZE_1) /*!< Memory data alignment: Word */ +/** + * @} + */ + +/** @defgroup DMA_mode DMA mode + * @brief DMA mode + * @{ + */ +#define DMA_NORMAL 0x00000000U /*!< Normal mode */ +#define DMA_CIRCULAR ((uint32_t)DMA_SxCR_CIRC) /*!< Circular mode */ +#define DMA_PFCTRL ((uint32_t)DMA_SxCR_PFCTRL) /*!< Peripheral flow control mode */ +/** + * @} + */ + +/** @defgroup DMA_Priority_level DMA Priority level + * @brief DMA priority levels + * @{ + */ +#define DMA_PRIORITY_LOW 0x00000000U /*!< Priority level: Low */ +#define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_SxCR_PL_0) /*!< Priority level: Medium */ +#define DMA_PRIORITY_HIGH ((uint32_t)DMA_SxCR_PL_1) /*!< Priority level: High */ +#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_SxCR_PL) /*!< Priority level: Very High */ +/** + * @} + */ + +/** @defgroup DMA_FIFO_direct_mode DMA FIFO direct mode + * @brief DMA FIFO direct mode + * @{ + */ +#define DMA_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ +#define DMA_FIFOMODE_ENABLE ((uint32_t)DMA_SxFCR_DMDIS) /*!< FIFO mode enable */ +/** + * @} + */ + +/** @defgroup DMA_FIFO_threshold_level DMA FIFO threshold level + * @brief DMA FIFO level + * @{ + */ +#define DMA_FIFO_THRESHOLD_1QUARTERFULL 0x00000000U /*!< FIFO threshold 1 quart full configuration */ +#define DMA_FIFO_THRESHOLD_HALFFULL ((uint32_t)DMA_SxFCR_FTH_0) /*!< FIFO threshold half full configuration */ +#define DMA_FIFO_THRESHOLD_3QUARTERSFULL ((uint32_t)DMA_SxFCR_FTH_1) /*!< FIFO threshold 3 quarts full configuration */ +#define DMA_FIFO_THRESHOLD_FULL ((uint32_t)DMA_SxFCR_FTH) /*!< FIFO threshold full configuration */ +/** + * @} + */ + +/** @defgroup DMA_Memory_burst DMA Memory burst + * @brief DMA memory burst + * @{ + */ +#define DMA_MBURST_SINGLE 0x00000000U +#define DMA_MBURST_INC4 ((uint32_t)DMA_SxCR_MBURST_0) +#define DMA_MBURST_INC8 ((uint32_t)DMA_SxCR_MBURST_1) +#define DMA_MBURST_INC16 ((uint32_t)DMA_SxCR_MBURST) +/** + * @} + */ + +/** @defgroup DMA_Peripheral_burst DMA Peripheral burst + * @brief DMA peripheral burst + * @{ + */ +#define DMA_PBURST_SINGLE 0x00000000U +#define DMA_PBURST_INC4 ((uint32_t)DMA_SxCR_PBURST_0) +#define DMA_PBURST_INC8 ((uint32_t)DMA_SxCR_PBURST_1) +#define DMA_PBURST_INC16 ((uint32_t)DMA_SxCR_PBURST) +/** + * @} + */ + +/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions + * @brief DMA interrupts definition + * @{ + */ +#define DMA_IT_TC ((uint32_t)DMA_SxCR_TCIE) +#define DMA_IT_HT ((uint32_t)DMA_SxCR_HTIE) +#define DMA_IT_TE ((uint32_t)DMA_SxCR_TEIE) +#define DMA_IT_DME ((uint32_t)DMA_SxCR_DMEIE) +#define DMA_IT_FE 0x00000080U +/** + * @} + */ + +/** @defgroup DMA_flag_definitions DMA flag definitions + * @brief DMA flag definitions + * @{ + */ +#define DMA_FLAG_FEIF0_4 0x00000001U +#define DMA_FLAG_DMEIF0_4 0x00000004U +#define DMA_FLAG_TEIF0_4 0x00000008U +#define DMA_FLAG_HTIF0_4 0x00000010U +#define DMA_FLAG_TCIF0_4 0x00000020U +#define DMA_FLAG_FEIF1_5 0x00000040U +#define DMA_FLAG_DMEIF1_5 0x00000100U +#define DMA_FLAG_TEIF1_5 0x00000200U +#define DMA_FLAG_HTIF1_5 0x00000400U +#define DMA_FLAG_TCIF1_5 0x00000800U +#define DMA_FLAG_FEIF2_6 0x00010000U +#define DMA_FLAG_DMEIF2_6 0x00040000U +#define DMA_FLAG_TEIF2_6 0x00080000U +#define DMA_FLAG_HTIF2_6 0x00100000U +#define DMA_FLAG_TCIF2_6 0x00200000U +#define DMA_FLAG_FEIF3_7 0x00400000U +#define DMA_FLAG_DMEIF3_7 0x01000000U +#define DMA_FLAG_TEIF3_7 0x02000000U +#define DMA_FLAG_HTIF3_7 0x04000000U +#define DMA_FLAG_TCIF3_7 0x08000000U +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/** @brief Reset DMA handle state + * @param __HANDLE__ specifies the DMA handle. + * @retval None + */ +#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET) + +/** + * @brief Return the current DMA Stream FIFO filled level. + * @param __HANDLE__ DMA handle + * @retval The FIFO filling state. + * - DMA_FIFOStatus_Less1QuarterFull: when FIFO is less than 1 quarter-full + * and not empty. + * - DMA_FIFOStatus_1QuarterFull: if more than 1 quarter-full. + * - DMA_FIFOStatus_HalfFull: if more than 1 half-full. + * - DMA_FIFOStatus_3QuartersFull: if more than 3 quarters-full. + * - DMA_FIFOStatus_Empty: when FIFO is empty + * - DMA_FIFOStatus_Full: when FIFO is full + */ +#define __HAL_DMA_GET_FS(__HANDLE__) (((__HANDLE__)->Instance->FCR & (DMA_SxFCR_FS))) + +/** + * @brief Enable the specified DMA Stream. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= DMA_SxCR_EN) + +/** + * @brief Disable the specified DMA Stream. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~DMA_SxCR_EN) + +/* Interrupt & Flag management */ + +/** + * @brief Return the current DMA Stream transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer complete flag index. + */ +#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_TCIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_TCIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_TCIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_TCIF2_6 :\ + DMA_FLAG_TCIF3_7) + +/** + * @brief Return the current DMA Stream half transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified half transfer complete flag index. + */ +#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_HTIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_HTIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_HTIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_HTIF2_6 :\ + DMA_FLAG_HTIF3_7) + +/** + * @brief Return the current DMA Stream transfer error flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_TEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_TEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_TEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_TEIF2_6 :\ + DMA_FLAG_TEIF3_7) + +/** + * @brief Return the current DMA Stream FIFO error flag. + * @param __HANDLE__ DMA handle + * @retval The specified FIFO error flag index. + */ +#define __HAL_DMA_GET_FE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_FEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_FEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_FEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_FEIF2_6 :\ + DMA_FLAG_FEIF3_7) + +/** + * @brief Return the current DMA Stream direct mode error flag. + * @param __HANDLE__ DMA handle + * @retval The specified direct mode error flag index. + */ +#define __HAL_DMA_GET_DME_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_DMEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_DMEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_DMEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_DMEIF2_6 :\ + DMA_FLAG_DMEIF3_7) + +/** + * @brief Get the DMA Stream pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCIFx: Transfer complete flag. + * @arg DMA_FLAG_HTIFx: Half transfer complete flag. + * @arg DMA_FLAG_TEIFx: Transfer error flag. + * @arg DMA_FLAG_DMEIFx: Direct mode error flag. + * @arg DMA_FLAG_FEIFx: FIFO error flag. + * Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag. + * @retval The state of FLAG (SET or RESET). + */ +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA2_Stream3)? (DMA2->HISR & (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream7)? (DMA2->LISR & (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream3)? (DMA1->HISR & (__FLAG__)) : (DMA1->LISR & (__FLAG__))) + +/** + * @brief Clear the DMA Stream pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCIFx: Transfer complete flag. + * @arg DMA_FLAG_HTIFx: Half transfer complete flag. + * @arg DMA_FLAG_TEIFx: Transfer error flag. + * @arg DMA_FLAG_DMEIFx: Direct mode error flag. + * @arg DMA_FLAG_FEIFx: FIFO error flag. + * Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA2_Stream3)? (DMA2->HIFCR = (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream7)? (DMA2->LIFCR = (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream3)? (DMA1->HIFCR = (__FLAG__)) : (DMA1->LIFCR = (__FLAG__))) + +/** + * @brief Enable the specified DMA Stream interrupts. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask. + * @arg DMA_IT_HT: Half transfer complete interrupt mask. + * @arg DMA_IT_TE: Transfer error interrupt mask. + * @arg DMA_IT_FE: FIFO error interrupt mask. + * @arg DMA_IT_DME: Direct mode error interrupt. + * @retval None + */ +#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__INTERRUPT__) != DMA_IT_FE)? \ +((__HANDLE__)->Instance->CR |= (__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR |= (__INTERRUPT__))) + +/** + * @brief Disable the specified DMA Stream interrupts. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask. + * @arg DMA_IT_HT: Half transfer complete interrupt mask. + * @arg DMA_IT_TE: Transfer error interrupt mask. + * @arg DMA_IT_FE: FIFO error interrupt mask. + * @arg DMA_IT_DME: Direct mode error interrupt. + * @retval None + */ +#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__INTERRUPT__) != DMA_IT_FE)? \ +((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR &= ~(__INTERRUPT__))) + +/** + * @brief Check whether the specified DMA Stream interrupt is enabled or disabled. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt source to check. + * This parameter can be one of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask. + * @arg DMA_IT_HT: Half transfer complete interrupt mask. + * @arg DMA_IT_TE: Transfer error interrupt mask. + * @arg DMA_IT_FE: FIFO error interrupt mask. + * @arg DMA_IT_DME: Direct mode error interrupt. + * @retval The state of DMA_IT. + */ +#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__INTERRUPT__) != DMA_IT_FE)? \ + ((__HANDLE__)->Instance->CR & (__INTERRUPT__)) : \ + ((__HANDLE__)->Instance->FCR & (__INTERRUPT__))) + +/** + * @brief Writes the number of data units to be transferred on the DMA Stream. + * @param __HANDLE__ DMA handle + * @param __COUNTER__ Number of data units to be transferred (from 0 to 65535) + * Number of data items depends only on the Peripheral data format. + * + * @note If Peripheral data format is Bytes: number of data units is equal + * to total number of bytes to be transferred. + * + * @note If Peripheral data format is Half-Word: number of data units is + * equal to total number of bytes to be transferred / 2. + * + * @note If Peripheral data format is Word: number of data units is equal + * to total number of bytes to be transferred / 4. + * + * @retval The number of remaining data units in the current DMAy Streamx transfer. + */ +#define __HAL_DMA_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->NDTR = (uint16_t)(__COUNTER__)) + +/** + * @brief Returns the number of remaining data units in the current DMAy Streamx transfer. + * @param __HANDLE__ DMA handle + * + * @retval The number of remaining data units in the current DMA Stream transfer. + */ +#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->NDTR) + + +/* Include DMA HAL Extension module */ +#include "stm32f4xx_hal_dma_ex.h" + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Functions DMA Exported Functions + * @brief DMA Exported functions + * @{ + */ + +/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * @{ + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group2 I/O operation functions + * @brief I/O operation functions + * @{ + */ +HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout); +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_CleanCallbacks(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma)); +HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID); + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group3 Peripheral State functions + * @brief Peripheral State functions + * @{ + */ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma); +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); +/** + * @} + */ +/** + * @} + */ +/* Private Constants -------------------------------------------------------------*/ +/** @defgroup DMA_Private_Constants DMA Private Constants + * @brief DMA private defines and constants + * @{ + */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup DMA_Private_Macros DMA Private Macros + * @brief DMA private macros + * @{ + */ +#if defined (DMA_SxCR_CHSEL_3) +#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_CHANNEL_0) || \ + ((CHANNEL) == DMA_CHANNEL_1) || \ + ((CHANNEL) == DMA_CHANNEL_2) || \ + ((CHANNEL) == DMA_CHANNEL_3) || \ + ((CHANNEL) == DMA_CHANNEL_4) || \ + ((CHANNEL) == DMA_CHANNEL_5) || \ + ((CHANNEL) == DMA_CHANNEL_6) || \ + ((CHANNEL) == DMA_CHANNEL_7) || \ + ((CHANNEL) == DMA_CHANNEL_8) || \ + ((CHANNEL) == DMA_CHANNEL_9) || \ + ((CHANNEL) == DMA_CHANNEL_10)|| \ + ((CHANNEL) == DMA_CHANNEL_11)|| \ + ((CHANNEL) == DMA_CHANNEL_12)|| \ + ((CHANNEL) == DMA_CHANNEL_13)|| \ + ((CHANNEL) == DMA_CHANNEL_14)|| \ + ((CHANNEL) == DMA_CHANNEL_15)) +#else +#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_CHANNEL_0) || \ + ((CHANNEL) == DMA_CHANNEL_1) || \ + ((CHANNEL) == DMA_CHANNEL_2) || \ + ((CHANNEL) == DMA_CHANNEL_3) || \ + ((CHANNEL) == DMA_CHANNEL_4) || \ + ((CHANNEL) == DMA_CHANNEL_5) || \ + ((CHANNEL) == DMA_CHANNEL_6) || \ + ((CHANNEL) == DMA_CHANNEL_7)) +#endif /* DMA_SxCR_CHSEL_3 */ + +#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ + ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ + ((DIRECTION) == DMA_MEMORY_TO_MEMORY)) + +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x01U) && ((SIZE) < 0x10000U)) + +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \ + ((STATE) == DMA_PINC_DISABLE)) + +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ + ((STATE) == DMA_MINC_DISABLE)) + +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ + ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_PDATAALIGN_WORD)) + +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \ + ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_MDATAALIGN_WORD )) + +#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \ + ((MODE) == DMA_CIRCULAR) || \ + ((MODE) == DMA_PFCTRL)) + +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \ + ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \ + ((PRIORITY) == DMA_PRIORITY_HIGH) || \ + ((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) + +#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMODE_DISABLE ) || \ + ((STATE) == DMA_FIFOMODE_ENABLE)) + +#define IS_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == DMA_FIFO_THRESHOLD_1QUARTERFULL ) || \ + ((THRESHOLD) == DMA_FIFO_THRESHOLD_HALFFULL) || \ + ((THRESHOLD) == DMA_FIFO_THRESHOLD_3QUARTERSFULL) || \ + ((THRESHOLD) == DMA_FIFO_THRESHOLD_FULL)) + +#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MBURST_SINGLE) || \ + ((BURST) == DMA_MBURST_INC4) || \ + ((BURST) == DMA_MBURST_INC8) || \ + ((BURST) == DMA_MBURST_INC16)) + +#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PBURST_SINGLE) || \ + ((BURST) == DMA_PBURST_INC4) || \ + ((BURST) == DMA_PBURST_INC8) || \ + ((BURST) == DMA_PBURST_INC16)) +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup DMA_Private_Functions DMA Private Functions + * @brief DMA private functions + * @{ + */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_DMA_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h new file mode 100644 index 00000000..9858c741 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h @@ -0,0 +1,102 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma_ex.h + * @author MCD Application Team + * @brief Header file of DMA HAL extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_DMA_EX_H +#define __STM32F4xx_HAL_DMA_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMAEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Types DMAEx Exported Types + * @brief DMAEx Exported types + * @{ + */ + +/** + * @brief HAL DMA Memory definition + */ +typedef enum +{ + MEMORY0 = 0x00U, /*!< Memory 0 */ + MEMORY1 = 0x01U /*!< Memory 1 */ +}HAL_DMA_MemoryTypeDef; + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions + * @brief DMAEx Exported functions + * @{ + */ + +/** @defgroup DMAEx_Exported_Functions_Group1 Extended features functions + * @brief Extended features functions + * @{ + */ + +/* IO operation functions *******************************************************/ +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory); + +/** + * @} + */ +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup DMAEx_Private_Functions DMAEx Private Functions + * @brief DMAEx Private functions + * @{ + */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F4xx_HAL_DMA_EX_H*/ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h new file mode 100644 index 00000000..b18a2287 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h @@ -0,0 +1,366 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_exti.h + * @author MCD Application Team + * @brief Header file of EXTI HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2018 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS.Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32f4xx_HAL_EXTI_H +#define STM32f4xx_HAL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup EXTI EXTI + * @brief EXTI HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup EXTI_Exported_Types EXTI Exported Types + * @{ + */ +typedef enum +{ + HAL_EXTI_COMMON_CB_ID = 0x00U +} EXTI_CallbackIDTypeDef; + +/** + * @brief EXTI Handle structure definition + */ +typedef struct +{ + uint32_t Line; /*!< Exti line number */ + void (* PendingCallback)(void); /*!< Exti pending callback */ +} EXTI_HandleTypeDef; + +/** + * @brief EXTI Configuration structure definition + */ +typedef struct +{ + uint32_t Line; /*!< The Exti line to be configured. This parameter + can be a value of @ref EXTI_Line */ + uint32_t Mode; /*!< The Exit Mode to be configured for a core. + This parameter can be a combination of @ref EXTI_Mode */ + uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter + can be a value of @ref EXTI_Trigger */ + uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured. + This parameter is only possible for line 0 to 15. It + can be a value of @ref EXTI_GPIOSel */ +} EXTI_ConfigTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Constants EXTI Exported Constants + * @{ + */ + +/** @defgroup EXTI_Line EXTI Line + * @{ + */ +#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */ +#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */ +#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */ +#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */ +#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */ +#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */ +#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */ +#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */ +#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */ +#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */ +#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */ +#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */ +#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */ +#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */ +#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */ +#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */ +#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */ +#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */ +#if defined(EXTI_IMR_IM18) +#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */ +#else +#define EXTI_LINE_18 (EXTI_RESERVED | 0x12u) /*!< No interrupt supported in this line */ +#endif /* EXTI_IMR_IM18 */ +#if defined(EXTI_IMR_IM19) +#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ +#else +#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */ +#endif /* EXTI_IMR_IM19 */ +#if defined(EXTI_IMR_IM20) +#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */ +#else +#define EXTI_LINE_20 (EXTI_RESERVED | 0x14u) /*!< No interrupt supported in this line */ +#endif /* EXTI_IMR_IM20 */ +#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */ +#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */ +#if defined(EXTI_IMR_IM23) +#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM1 asynchronous event */ +#endif /* EXTI_IMR_IM23 */ + +/** + * @} + */ + +/** @defgroup EXTI_Mode EXTI Mode + * @{ + */ +#define EXTI_MODE_NONE 0x00000000u +#define EXTI_MODE_INTERRUPT 0x00000001u +#define EXTI_MODE_EVENT 0x00000002u +/** + * @} + */ + +/** @defgroup EXTI_Trigger EXTI Trigger + * @{ + */ + +#define EXTI_TRIGGER_NONE 0x00000000u +#define EXTI_TRIGGER_RISING 0x00000001u +#define EXTI_TRIGGER_FALLING 0x00000002u +#define EXTI_TRIGGER_RISING_FALLING (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING) +/** + * @} + */ + +/** @defgroup EXTI_GPIOSel EXTI GPIOSel + * @brief + * @{ + */ +#define EXTI_GPIOA 0x00000000u +#define EXTI_GPIOB 0x00000001u +#define EXTI_GPIOC 0x00000002u +#if defined (GPIOD) +#define EXTI_GPIOD 0x00000003u +#endif /* GPIOD */ +#if defined (GPIOE) +#define EXTI_GPIOE 0x00000004u +#endif /* GPIOE */ +#if defined (GPIOF) +#define EXTI_GPIOF 0x00000005u +#endif /* GPIOF */ +#if defined (GPIOG) +#define EXTI_GPIOG 0x00000006u +#endif /* GPIOG */ +#if defined (GPIOH) +#define EXTI_GPIOH 0x00000007u +#endif /* GPIOH */ +#if defined (GPIOI) +#define EXTI_GPIOI 0x00000008u +#endif /* GPIOI */ +#if defined (GPIOJ) +#define EXTI_GPIOJ 0x00000009u +#endif /* GPIOJ */ +#if defined (GPIOK) +#define EXTI_GPIOK 0x0000000Au +#endif /* GPIOK */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Macros EXTI Exported Macros + * @{ + */ + +/** + * @} + */ + +/* Private constants --------------------------------------------------------*/ +/** @defgroup EXTI_Private_Constants EXTI Private Constants + * @{ + */ +/** + * @brief EXTI Line property definition + */ +#define EXTI_PROPERTY_SHIFT 24u +#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT) +#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG) +#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT) +#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO) + +/** + * @brief EXTI bit usage + */ +#define EXTI_PIN_MASK 0x0000001Fu + +/** + * @brief EXTI Mask for interrupt & event mode + */ +#define EXTI_MODE_MASK (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT) + +/** + * @brief EXTI Mask for trigger possibilities + */ +#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING) + +/** + * @brief EXTI Line number + */ +#if defined(EXTI_IMR_IM23) +#define EXTI_LINE_NB 24UL +#else +#define EXTI_LINE_NB 23UL +#endif /* EXTI_IMR_IM23 */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup EXTI_Private_Macros EXTI Private Macros + * @{ + */ +#define IS_EXTI_LINE(__EXTI_LINE__) ((((__EXTI_LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \ + ((((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \ + (((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \ + (((__EXTI_LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB)) + +#define IS_EXTI_MODE(__EXTI_LINE__) ((((__EXTI_LINE__) & EXTI_MODE_MASK) != 0x00u) && \ + (((__EXTI_LINE__) & ~EXTI_MODE_MASK) == 0x00u)) + +#define IS_EXTI_TRIGGER(__EXTI_LINE__) (((__EXTI_LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u) + +#define IS_EXTI_PENDING_EDGE(__EXTI_LINE__) ((__EXTI_LINE__) == EXTI_TRIGGER_RISING_FALLING) + +#define IS_EXTI_CONFIG_LINE(__EXTI_LINE__) (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00u) + +#if !defined (GPIOD) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOE) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOF) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOI) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOJ) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH) || \ + ((__PORT__) == EXTI_GPIOI)) +#else +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH) || \ + ((__PORT__) == EXTI_GPIOI) || \ + ((__PORT__) == EXTI_GPIOJ) || \ + ((__PORT__) == EXTI_GPIOK)) +#endif /* GPIOD */ + +#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U) +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Functions EXTI Exported Functions + * @brief EXTI Exported Functions + * @{ + */ + +/** @defgroup EXTI_Exported_Functions_Group1 Configuration functions + * @brief Configuration functions + * @{ + */ +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig); +HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig); +HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti); +HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)); +HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine); +/** + * @} + */ + +/** @defgroup EXTI_Exported_Functions_Group2 IO operation functions + * @brief IO operation functions + * @{ + */ +/* IO operation functions *****************************************************/ +void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti); +uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge); +void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge); +void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32f4xx_HAL_EXTI_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h new file mode 100644 index 00000000..41f77d28 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h @@ -0,0 +1,425 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash.h + * @author MCD Application Team + * @brief Header file of FLASH HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_FLASH_H +#define __STM32F4xx_HAL_FLASH_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Types FLASH Exported Types + * @{ + */ + +/** + * @brief FLASH Procedure structure definition + */ +typedef enum +{ + FLASH_PROC_NONE = 0U, + FLASH_PROC_SECTERASE, + FLASH_PROC_MASSERASE, + FLASH_PROC_PROGRAM +} FLASH_ProcedureTypeDef; + +/** + * @brief FLASH handle Structure definition + */ +typedef struct +{ + __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*Internal variable to indicate which procedure is ongoing or not in IT context*/ + + __IO uint32_t NbSectorsToErase; /*Internal variable to save the remaining sectors to erase in IT context*/ + + __IO uint8_t VoltageForErase; /*Internal variable to provide voltage range selected by user in IT context*/ + + __IO uint32_t Sector; /*Internal variable to define the current sector which is erasing*/ + + __IO uint32_t Bank; /*Internal variable to save current bank selected during mass erase*/ + + __IO uint32_t Address; /*Internal variable to save address selected for program*/ + + HAL_LockTypeDef Lock; /* FLASH locking object */ + + __IO uint32_t ErrorCode; /* FLASH error code */ + +} FLASH_ProcessTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Constants FLASH Exported Constants + * @{ + */ +/** @defgroup FLASH_Error_Code FLASH Error Code + * @brief FLASH Error Code + * @{ + */ +#define HAL_FLASH_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_FLASH_ERROR_RD 0x00000001U /*!< Read Protection error */ +#define HAL_FLASH_ERROR_PGS 0x00000002U /*!< Programming Sequence error */ +#define HAL_FLASH_ERROR_PGP 0x00000004U /*!< Programming Parallelism error */ +#define HAL_FLASH_ERROR_PGA 0x00000008U /*!< Programming Alignment error */ +#define HAL_FLASH_ERROR_WRP 0x00000010U /*!< Write protection error */ +#define HAL_FLASH_ERROR_OPERATION 0x00000020U /*!< Operation Error */ +/** + * @} + */ + +/** @defgroup FLASH_Type_Program FLASH Type Program + * @{ + */ +#define FLASH_TYPEPROGRAM_BYTE 0x00000000U /*!< Program byte (8-bit) at a specified address */ +#define FLASH_TYPEPROGRAM_HALFWORD 0x00000001U /*!< Program a half-word (16-bit) at a specified address */ +#define FLASH_TYPEPROGRAM_WORD 0x00000002U /*!< Program a word (32-bit) at a specified address */ +#define FLASH_TYPEPROGRAM_DOUBLEWORD 0x00000003U /*!< Program a double word (64-bit) at a specified address */ +/** + * @} + */ + +/** @defgroup FLASH_Flag_definition FLASH Flag definition + * @brief Flag definition + * @{ + */ +#define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Operation flag */ +#define FLASH_FLAG_OPERR FLASH_SR_SOP /*!< FLASH operation Error flag */ +#define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write protected error flag */ +#define FLASH_FLAG_PGAERR FLASH_SR_PGAERR /*!< FLASH Programming Alignment error flag */ +#define FLASH_FLAG_PGPERR FLASH_SR_PGPERR /*!< FLASH Programming Parallelism error flag */ +#define FLASH_FLAG_PGSERR FLASH_SR_PGSERR /*!< FLASH Programming Sequence error flag */ +#if defined(FLASH_SR_RDERR) +#define FLASH_FLAG_RDERR FLASH_SR_RDERR /*!< Read Protection error flag (PCROP) */ +#endif /* FLASH_SR_RDERR */ +#define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ +/** + * @} + */ + +/** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition + * @brief FLASH Interrupt definition + * @{ + */ +#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */ +#define FLASH_IT_ERR 0x02000000U /*!< Error Interrupt source */ +/** + * @} + */ + +/** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism + * @{ + */ +#define FLASH_PSIZE_BYTE 0x00000000U +#define FLASH_PSIZE_HALF_WORD 0x00000100U +#define FLASH_PSIZE_WORD 0x00000200U +#define FLASH_PSIZE_DOUBLE_WORD 0x00000300U +#define CR_PSIZE_MASK 0xFFFFFCFFU +/** + * @} + */ + +/** @defgroup FLASH_Keys FLASH Keys + * @{ + */ +#define RDP_KEY ((uint16_t)0x00A5) +#define FLASH_KEY1 0x45670123U +#define FLASH_KEY2 0xCDEF89ABU +#define FLASH_OPT_KEY1 0x08192A3BU +#define FLASH_OPT_KEY2 0x4C5D6E7FU +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Macros FLASH Exported Macros + * @{ + */ +/** + * @brief Set the FLASH Latency. + * @param __LATENCY__ FLASH Latency + * The value of this parameter depend on device used within the same series + * @retval none + */ +#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (*(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)(__LATENCY__)) + +/** + * @brief Get the FLASH Latency. + * @retval FLASH Latency + * The value of this parameter depend on device used within the same series + */ +#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) + +/** + * @brief Enable the FLASH prefetch buffer. + * @retval none + */ +#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTEN) + +/** + * @brief Disable the FLASH prefetch buffer. + * @retval none + */ +#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTEN)) + +/** + * @brief Enable the FLASH instruction cache. + * @retval none + */ +#define __HAL_FLASH_INSTRUCTION_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_ICEN) + +/** + * @brief Disable the FLASH instruction cache. + * @retval none + */ +#define __HAL_FLASH_INSTRUCTION_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_ICEN)) + +/** + * @brief Enable the FLASH data cache. + * @retval none + */ +#define __HAL_FLASH_DATA_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_DCEN) + +/** + * @brief Disable the FLASH data cache. + * @retval none + */ +#define __HAL_FLASH_DATA_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_DCEN)) + +/** + * @brief Resets the FLASH instruction Cache. + * @note This function must be used only when the Instruction Cache is disabled. + * @retval None + */ +#define __HAL_FLASH_INSTRUCTION_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_ICRST; \ + FLASH->ACR &= ~FLASH_ACR_ICRST; \ + }while(0U) + +/** + * @brief Resets the FLASH data Cache. + * @note This function must be used only when the data Cache is disabled. + * @retval None + */ +#define __HAL_FLASH_DATA_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_DCRST; \ + FLASH->ACR &= ~FLASH_ACR_DCRST; \ + }while(0U) +/** + * @brief Enable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt + * @arg FLASH_IT_ERR: Error Interrupt + * @retval none + */ +#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__)) + +/** + * @brief Disable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt + * @arg FLASH_IT_ERR: Error Interrupt + * @retval none + */ +#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(uint32_t)(__INTERRUPT__)) + +/** + * @brief Get the specified FLASH flag status. + * @param __FLAG__ specifies the FLASH flags to check. + * This parameter can be any combination of the following values: + * @arg FLASH_FLAG_EOP : FLASH End of Operation flag + * @arg FLASH_FLAG_OPERR : FLASH operation Error flag + * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag + * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag + * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag + * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag + * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*) + * @arg FLASH_FLAG_BSY : FLASH Busy flag + * (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__))) + +/** + * @brief Clear the specified FLASH flags. + * @param __FLAG__ specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg FLASH_FLAG_EOP : FLASH End of Operation flag + * @arg FLASH_FLAG_OPERR : FLASH operation Error flag + * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag + * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag + * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag + * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag + * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*) + * (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices + * @retval none + */ +#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) (FLASH->SR = (__FLAG__)) +/** + * @} + */ + +/* Include FLASH HAL Extension module */ +#include "stm32f4xx_hal_flash_ex.h" +#include "stm32f4xx_hal_flash_ramfunc.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_Exported_Functions + * @{ + */ +/** @addtogroup FLASH_Exported_Functions_Group1 + * @{ + */ +/* Program operation functions ***********************************************/ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); +/* FLASH IRQ handler method */ +void HAL_FLASH_IRQHandler(void); +/* Callbacks in non blocking modes */ +void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); +void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions **********************************************/ +HAL_StatusTypeDef HAL_FLASH_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_Lock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); +/* Option bytes control */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State functions ************************************************/ +uint32_t HAL_FLASH_GetError(void); +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Variables FLASH Private Variables + * @{ + */ + +/** + * @} + */ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Constants FLASH Private Constants + * @{ + */ + +/** + * @brief ACR register byte 0 (Bits[7:0]) base address + */ +#define ACR_BYTE0_ADDRESS 0x40023C00U +/** + * @brief OPTCR register byte 0 (Bits[7:0]) base address + */ +#define OPTCR_BYTE0_ADDRESS 0x40023C14U +/** + * @brief OPTCR register byte 1 (Bits[15:8]) base address + */ +#define OPTCR_BYTE1_ADDRESS 0x40023C15U +/** + * @brief OPTCR register byte 2 (Bits[23:16]) base address + */ +#define OPTCR_BYTE2_ADDRESS 0x40023C16U +/** + * @brief OPTCR register byte 3 (Bits[31:24]) base address + */ +#define OPTCR_BYTE3_ADDRESS 0x40023C17U + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup FLASH_Private_Macros FLASH Private Macros + * @{ + */ + +/** @defgroup FLASH_IS_FLASH_Definitions FLASH Private macros to check input parameters + * @{ + */ +#define IS_FLASH_TYPEPROGRAM(VALUE)(((VALUE) == FLASH_TYPEPROGRAM_BYTE) || \ + ((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Functions FLASH Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_FLASH_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h new file mode 100644 index 00000000..5fa89db5 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h @@ -0,0 +1,1063 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ex.h + * @author MCD Application Team + * @brief Header file of FLASH HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_FLASH_EX_H +#define __STM32F4xx_HAL_FLASH_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASHEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Types FLASH Exported Types + * @{ + */ + +/** + * @brief FLASH Erase structure definition + */ +typedef struct +{ + uint32_t TypeErase; /*!< Mass erase or sector Erase. + This parameter can be a value of @ref FLASHEx_Type_Erase */ + + uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint32_t Sector; /*!< Initial FLASH sector to erase when Mass erase is disabled + This parameter must be a value of @ref FLASHEx_Sectors */ + + uint32_t NbSectors; /*!< Number of sectors to be erased. + This parameter must be a value between 1 and (max number of sectors - value of Initial sector)*/ + + uint32_t VoltageRange;/*!< The device voltage range which defines the erase parallelism + This parameter must be a value of @ref FLASHEx_Voltage_Range */ + +} FLASH_EraseInitTypeDef; + +/** + * @brief FLASH Option Bytes Program structure definition + */ +typedef struct +{ + uint32_t OptionType; /*!< Option byte to be configured. + This parameter can be a value of @ref FLASHEx_Option_Type */ + + uint32_t WRPState; /*!< Write protection activation or deactivation. + This parameter can be a value of @ref FLASHEx_WRP_State */ + + uint32_t WRPSector; /*!< Specifies the sector(s) to be write protected. + The value of this parameter depend on device used within the same series */ + + uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint32_t RDPLevel; /*!< Set the read protection level. + This parameter can be a value of @ref FLASHEx_Option_Bytes_Read_Protection */ + + uint32_t BORLevel; /*!< Set the BOR Level. + This parameter can be a value of @ref FLASHEx_BOR_Reset_Level */ + + uint8_t USERConfig; /*!< Program the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. */ + +} FLASH_OBProgramInitTypeDef; + +/** + * @brief FLASH Advanced Option Bytes Program structure definition + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +typedef struct +{ + uint32_t OptionType; /*!< Option byte to be configured for extension. + This parameter can be a value of @ref FLASHEx_Advanced_Option_Type */ + + uint32_t PCROPState; /*!< PCROP activation or deactivation. + This parameter can be a value of @ref FLASHEx_PCROP_State */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + uint16_t Sectors; /*!< specifies the sector(s) set for PCROP. + This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection */ +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx ||\ + STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + uint32_t Banks; /*!< Select banks for PCROP activation/deactivation of all sectors. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint16_t SectorsBank1; /*!< Specifies the sector(s) set for PCROP for Bank1. + This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection */ + + uint16_t SectorsBank2; /*!< Specifies the sector(s) set for PCROP for Bank2. + This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection */ + + uint8_t BootConfig; /*!< Specifies Option bytes for boot config. + This parameter can be a value of @ref FLASHEx_Dual_Boot */ + +#endif /*STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +} FLASH_AdvOBProgramInitTypeDef; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || + STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup FLASHEx_Exported_Constants FLASH Exported Constants + * @{ + */ + +/** @defgroup FLASHEx_Type_Erase FLASH Type Erase + * @{ + */ +#define FLASH_TYPEERASE_SECTORS 0x00000000U /*!< Sectors erase only */ +#define FLASH_TYPEERASE_MASSERASE 0x00000001U /*!< Flash Mass erase activation */ +/** + * @} + */ + +/** @defgroup FLASHEx_Voltage_Range FLASH Voltage Range + * @{ + */ +#define FLASH_VOLTAGE_RANGE_1 0x00000000U /*!< Device operating range: 1.8V to 2.1V */ +#define FLASH_VOLTAGE_RANGE_2 0x00000001U /*!< Device operating range: 2.1V to 2.7V */ +#define FLASH_VOLTAGE_RANGE_3 0x00000002U /*!< Device operating range: 2.7V to 3.6V */ +#define FLASH_VOLTAGE_RANGE_4 0x00000003U /*!< Device operating range: 2.7V to 3.6V + External Vpp */ +/** + * @} + */ + +/** @defgroup FLASHEx_WRP_State FLASH WRP State + * @{ + */ +#define OB_WRPSTATE_DISABLE 0x00000000U /*!< Disable the write protection of the desired bank 1 sectors */ +#define OB_WRPSTATE_ENABLE 0x00000001U /*!< Enable the write protection of the desired bank 1 sectors */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Type FLASH Option Type + * @{ + */ +#define OPTIONBYTE_WRP 0x00000001U /*!< WRP option byte configuration */ +#define OPTIONBYTE_RDP 0x00000002U /*!< RDP option byte configuration */ +#define OPTIONBYTE_USER 0x00000004U /*!< USER option byte configuration */ +#define OPTIONBYTE_BOR 0x00000008U /*!< BOR option byte configuration */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Bytes_Read_Protection FLASH Option Bytes Read Protection + * @{ + */ +#define OB_RDP_LEVEL_0 ((uint8_t)0xAA) +#define OB_RDP_LEVEL_1 ((uint8_t)0x55) +#define OB_RDP_LEVEL_2 ((uint8_t)0xCC) /*!< Warning: When enabling read protection level 2 + it s no more possible to go back to level 1 or 0 */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Bytes_IWatchdog FLASH Option Bytes IWatchdog + * @{ + */ +#define OB_IWDG_SW ((uint8_t)0x20) /*!< Software IWDG selected */ +#define OB_IWDG_HW ((uint8_t)0x00) /*!< Hardware IWDG selected */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Bytes_nRST_STOP FLASH Option Bytes nRST_STOP + * @{ + */ +#define OB_STOP_NO_RST ((uint8_t)0x40) /*!< No reset generated when entering in STOP */ +#define OB_STOP_RST ((uint8_t)0x00) /*!< Reset generated when entering in STOP */ +/** + * @} + */ + + +/** @defgroup FLASHEx_Option_Bytes_nRST_STDBY FLASH Option Bytes nRST_STDBY + * @{ + */ +#define OB_STDBY_NO_RST ((uint8_t)0x80) /*!< No reset generated when entering in STANDBY */ +#define OB_STDBY_RST ((uint8_t)0x00) /*!< Reset generated when entering in STANDBY */ +/** + * @} + */ + +/** @defgroup FLASHEx_BOR_Reset_Level FLASH BOR Reset Level + * @{ + */ +#define OB_BOR_LEVEL3 ((uint8_t)0x00) /*!< Supply voltage ranges from 2.70 to 3.60 V */ +#define OB_BOR_LEVEL2 ((uint8_t)0x04) /*!< Supply voltage ranges from 2.40 to 2.70 V */ +#define OB_BOR_LEVEL1 ((uint8_t)0x08) /*!< Supply voltage ranges from 2.10 to 2.40 V */ +#define OB_BOR_OFF ((uint8_t)0x0C) /*!< Supply voltage ranges from 1.62 to 2.10 V */ +/** + * @} + */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup FLASHEx_PCROP_State FLASH PCROP State + * @{ + */ +#define OB_PCROP_STATE_DISABLE 0x00000000U /*!< Disable PCROP */ +#define OB_PCROP_STATE_ENABLE 0x00000001U /*!< Enable PCROP */ +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\ + STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/** @defgroup FLASHEx_Advanced_Option_Type FLASH Advanced Option Type + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define OPTIONBYTE_PCROP 0x00000001U /*!< PCROP option byte configuration */ +#define OPTIONBYTE_BOOTCONFIG 0x00000002U /*!< BOOTConfig option byte configuration */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +#define OPTIONBYTE_PCROP 0x00000001U /*!= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \ + (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END))) + +#define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL)) + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFF000000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F401xC) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xC */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ + defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F401xC) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xC */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ + defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define IS_OB_BOOT(BOOT) (((BOOT) == OB_DUAL_BOOT_ENABLE) || ((BOOT) == OB_DUAL_BOOT_DISABLE)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +#define IS_OB_PCROP_SELECT(PCROP) (((PCROP) == OB_PCROP_SELECTED) || ((PCROP) == OB_PCROP_DESELECTED)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\ + STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Functions FLASH Private Functions + * @{ + */ +void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange); +void FLASH_FlushCaches(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_FLASH_EX_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h new file mode 100644 index 00000000..2112e747 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h @@ -0,0 +1,76 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ramfunc.h + * @author MCD Application Team + * @brief Header file of FLASH RAMFUNC driver. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_FLASH_RAMFUNC_H +#define __STM32F4xx_FLASH_RAMFUNC_H + +#ifdef __cplusplus +extern "C" { +#endif +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH_RAMFUNC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_RAMFUNC_Exported_Functions + * @{ + */ + +/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group1 + * @{ + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StopFlashInterfaceClk(void); +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StartFlashInterfaceClk(void); +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableFlashSleepMode(void); +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableFlashSleepMode(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_FLASH_RAMFUNC_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h new file mode 100644 index 00000000..5f3d749e --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h @@ -0,0 +1,325 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_gpio.h + * @author MCD Application Team + * @brief Header file of GPIO HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_GPIO_H +#define __STM32F4xx_HAL_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup GPIO + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Types GPIO Exported Types + * @{ + */ + +/** + * @brief GPIO Init structure definition + */ +typedef struct +{ + uint32_t Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins_define */ + + uint32_t Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIO_mode_define */ + + uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. + This parameter can be a value of @ref GPIO_pull_define */ + + uint32_t Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIO_speed_define */ + + uint32_t Alternate; /*!< Peripheral to be connected to the selected pins. + This parameter can be a value of @ref GPIO_Alternate_function_selection */ +}GPIO_InitTypeDef; + +/** + * @brief GPIO Bit SET and Bit RESET enumeration + */ +typedef enum +{ + GPIO_PIN_RESET = 0, + GPIO_PIN_SET +}GPIO_PinState; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_pins_define GPIO pins define + * @{ + */ +#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ +#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ +#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ +#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ +#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ +#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ +#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ +#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ +#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ +#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ +#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ +#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ +#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ +#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ +#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ +#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ +#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ + +#define GPIO_PIN_MASK 0x0000FFFFU /* PIN mask for assert test */ +/** + * @} + */ + +/** @defgroup GPIO_mode_define GPIO mode define + * @brief GPIO Configuration Mode + * Elements values convention: 0x00WX00YZ + * - W : EXTI trigger detection on 3 bits + * - X : EXTI mode (IT or Event) on 2 bits + * - Y : Output type (Push Pull or Open Drain) on 1 bit + * - Z : GPIO mode (Input, Output, Alternate or Analog) on 2 bits + * @{ + */ +#define GPIO_MODE_INPUT MODE_INPUT /*!< Input Floating Mode */ +#define GPIO_MODE_OUTPUT_PP (MODE_OUTPUT | OUTPUT_PP) /*!< Output Push Pull Mode */ +#define GPIO_MODE_OUTPUT_OD (MODE_OUTPUT | OUTPUT_OD) /*!< Output Open Drain Mode */ +#define GPIO_MODE_AF_PP (MODE_AF | OUTPUT_PP) /*!< Alternate Function Push Pull Mode */ +#define GPIO_MODE_AF_OD (MODE_AF | OUTPUT_OD) /*!< Alternate Function Open Drain Mode */ + +#define GPIO_MODE_ANALOG MODE_ANALOG /*!< Analog Mode */ + +#define GPIO_MODE_IT_RISING (MODE_INPUT | EXTI_IT | TRIGGER_RISING) /*!< External Interrupt Mode with Rising edge trigger detection */ +#define GPIO_MODE_IT_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_FALLING) /*!< External Interrupt Mode with Falling edge trigger detection */ +#define GPIO_MODE_IT_RISING_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ + +#define GPIO_MODE_EVT_RISING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING) /*!< External Event Mode with Rising edge trigger detection */ +#define GPIO_MODE_EVT_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING) /*!< External Event Mode with Falling edge trigger detection */ +#define GPIO_MODE_EVT_RISING_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Event Mode with Rising/Falling edge trigger detection */ + +/** + * @} + */ + +/** @defgroup GPIO_speed_define GPIO speed define + * @brief GPIO Output Maximum frequency + * @{ + */ +#define GPIO_SPEED_FREQ_LOW 0x00000000U /*!< IO works at 2 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_MEDIUM 0x00000001U /*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_HIGH 0x00000002U /*!< range 25 MHz to 100 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U /*!< range 50 MHz to 200 MHz, please refer to the product datasheet */ +/** + * @} + */ + + /** @defgroup GPIO_pull_define GPIO pull define + * @brief GPIO Pull-Up or Pull-Down Activation + * @{ + */ +#define GPIO_NOPULL 0x00000000U /*!< No Pull-up or Pull-down activation */ +#define GPIO_PULLUP 0x00000001U /*!< Pull-up activation */ +#define GPIO_PULLDOWN 0x00000002U /*!< Pull-down activation */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Macros GPIO Exported Macros + * @{ + */ + +/** + * @brief Checks whether the specified EXTI line flag is set or not. + * @param __EXTI_LINE__ specifies the EXTI line flag to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clears the EXTI's line pending flags. + * @param __EXTI_LINE__ specifies the EXTI lines flags to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Checks whether the specified EXTI line is asserted or not. + * @param __EXTI_LINE__ specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clears the EXTI's line pending bits. + * @param __EXTI_LINE__ specifies the EXTI lines to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Generates a Software interrupt on selected EXTI line. + * @param __EXTI_LINE__ specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) +/** + * @} + */ + +/* Include GPIO HAL Extension module */ +#include "stm32f4xx_hal_gpio_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup GPIO_Exported_Functions + * @{ + */ + +/** @addtogroup GPIO_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); +/** + * @} + */ + +/** @addtogroup GPIO_Exported_Functions_Group2 + * @{ + */ +/* IO operation functions *****************************************************/ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); + +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ +#define GPIO_MODE_Pos 0U +#define GPIO_MODE (0x3UL << GPIO_MODE_Pos) +#define MODE_INPUT (0x0UL << GPIO_MODE_Pos) +#define MODE_OUTPUT (0x1UL << GPIO_MODE_Pos) +#define MODE_AF (0x2UL << GPIO_MODE_Pos) +#define MODE_ANALOG (0x3UL << GPIO_MODE_Pos) +#define OUTPUT_TYPE_Pos 4U +#define OUTPUT_TYPE (0x1UL << OUTPUT_TYPE_Pos) +#define OUTPUT_PP (0x0UL << OUTPUT_TYPE_Pos) +#define OUTPUT_OD (0x1UL << OUTPUT_TYPE_Pos) +#define EXTI_MODE_Pos 16U +#define EXTI_MODE (0x3UL << EXTI_MODE_Pos) +#define EXTI_IT (0x1UL << EXTI_MODE_Pos) +#define EXTI_EVT (0x2UL << EXTI_MODE_Pos) +#define TRIGGER_MODE_Pos 20U +#define TRIGGER_MODE (0x7UL << TRIGGER_MODE_Pos) +#define TRIGGER_RISING (0x1UL << TRIGGER_MODE_Pos) +#define TRIGGER_FALLING (0x2UL << TRIGGER_MODE_Pos) + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GPIO_Private_Macros GPIO Private Macros + * @{ + */ +#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) +#define IS_GPIO_PIN(PIN) (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00U) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00U)) +#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\ + ((MODE) == GPIO_MODE_OUTPUT_PP) ||\ + ((MODE) == GPIO_MODE_OUTPUT_OD) ||\ + ((MODE) == GPIO_MODE_AF_PP) ||\ + ((MODE) == GPIO_MODE_AF_OD) ||\ + ((MODE) == GPIO_MODE_IT_RISING) ||\ + ((MODE) == GPIO_MODE_IT_FALLING) ||\ + ((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\ + ((MODE) == GPIO_MODE_EVT_RISING) ||\ + ((MODE) == GPIO_MODE_EVT_FALLING) ||\ + ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\ + ((MODE) == GPIO_MODE_ANALOG)) +#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \ + ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH)) +#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ + ((PULL) == GPIO_PULLDOWN)) +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup GPIO_Private_Functions GPIO Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_GPIO_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h new file mode 100644 index 00000000..5e0b7cc6 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h @@ -0,0 +1,1590 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_gpio_ex.h + * @author MCD Application Team + * @brief Header file of GPIO HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_GPIO_EX_H +#define __STM32F4xx_HAL_GPIO_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIOEx GPIOEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_Alternate_function_selection GPIO Alternate Function Selection + * @{ + */ + +/*------------------------------------------ STM32F429xx/STM32F439xx ---------*/ +#if defined(STM32F429xx) || defined(STM32F439xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ +#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_LTDC ((uint8_t)0x09) /* LCD-TFT Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_LTDC ((uint8_t)0x0E) /* LCD-TFT Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F429xx || STM32F439xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F427xx/STM32F437xx------------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ +#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ +/** @brief GPIO_Legacy + */ +#define GPIO_AF5_I2S3ext GPIO_AF5_SPI3 /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F427xx || STM32F437xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F407xx/STM32F417xx------------------*/ +#if defined(STM32F407xx) || defined(STM32F417xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FSMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F407xx || STM32F417xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F405xx/STM32F415xx------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FSMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F405xx || STM32F415xx */ + +/*----------------------------------------------------------------------------*/ + +/*---------------------------------------- STM32F401xx------------------------*/ +#if defined(STM32F401xC) || defined(STM32F401xE) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ + + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F401xC || STM32F401xE */ +/*----------------------------------------------------------------------------*/ + +/*--------------- STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx-------------*/ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_DFSDM1 ((uint8_t)0x06) /* DFSDM1 Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_USART3 ((uint8_t)0x08) /* USART3 Alternate Function mapping */ +#define GPIO_AF8_DFSDM1 ((uint8_t)0x08) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF8_CAN1 ((uint8_t)0x08) /* CAN1 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ +#define GPIO_AF9_FMPI2C1 ((uint8_t)0x09) /* FMPI2C1 Alternate Function mapping */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_DFSDM1 ((uint8_t)0x0A) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ +#define GPIO_AF10_FMC ((uint8_t)0x0A) /* FMC Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +/*----------------------------------------------------------------------------*/ + +/*--------------- STM32F413xx/STM32F423xx-------------------------------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_LPTIM1 ((uint8_t)0x01) /* LPTIM1 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ +#define GPIO_AF3_DFSDM2 ((uint8_t)0x03) /* DFSDM2 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_DFSDM1 ((uint8_t)0x06) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF6_DFSDM2 ((uint8_t)0x06) /* DFSDM2 Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_SAI1 ((uint8_t)0x07) /* SAI1 Alternate Function mapping */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ +#define GPIO_AF7_DFSDM2 ((uint8_t)0x07) /* DFSDM2 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_USART3 ((uint8_t)0x08) /* USART3 Alternate Function mapping */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ +#define GPIO_AF8_DFSDM1 ((uint8_t)0x08) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF8_CAN1 ((uint8_t)0x08) /* CAN1 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ +#define GPIO_AF9_FMPI2C1 ((uint8_t)0x09) /* FMPI2C1 Alternate Function mapping */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_SAI1 ((uint8_t)0x0A) /* SAI1 Alternate Function mapping */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_DFSDM1 ((uint8_t)0x0A) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF10_DFSDM2 ((uint8_t)0x0A) /* DFSDM2 Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ +#define GPIO_AF10_FSMC ((uint8_t)0x0A) /* FSMC Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_UART4 ((uint8_t)0x0B) /* UART4 Alternate Function mapping */ +#define GPIO_AF11_UART5 ((uint8_t)0x0B) /* UART5 Alternate Function mapping */ +#define GPIO_AF11_UART9 ((uint8_t)0x0B) /* UART9 Alternate Function mapping */ +#define GPIO_AF11_UART10 ((uint8_t)0x0B) /* UART10 Alternate Function mapping */ +#define GPIO_AF11_CAN3 ((uint8_t)0x0B) /* CAN3 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_RNG ((uint8_t)0x0E) /* RNG Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F413xx || STM32F423xx */ + +/*---------------------------------------- STM32F411xx------------------------*/ +#if defined(STM32F411xE) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F411xE */ + +/*---------------------------------------- STM32F410xx------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_LPTIM1 ((uint8_t)0x01) /* LPTIM1 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#if defined(STM32F410Cx) || defined(STM32F410Rx) +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#endif /* STM32F410Cx || STM32F410Rx */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI1 ((uint8_t)0x06) /* SPI1 Alternate Function mapping */ +#if defined(STM32F410Cx) || defined(STM32F410Rx) +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#endif /* STM32F410Cx || STM32F410Rx */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_FMPI2C1 ((uint8_t)0x09) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/*---------------------------------------- STM32F446xx -----------------------*/ +#if defined(STM32F446xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ +#define GPIO_AF3_CEC ((uint8_t)0x03) /* CEC Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ +#define GPIO_AF4_CEC ((uint8_t)0x04) /* CEC Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4 Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_UART5 ((uint8_t)0x07) /* UART5 Alternate Function mapping */ +#define GPIO_AF7_SPI2 ((uint8_t)0x07) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_SPDIFRX ((uint8_t)0x07) /* SPDIFRX Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_SPDIFRX ((uint8_t)0x08) /* SPDIFRX Alternate Function mapping */ +#define GPIO_AF8_SAI2 ((uint8_t)0x08) /* SAI2 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ +#define GPIO_AF10_SAI2 ((uint8_t)0x0A) /* SAI2 Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ + +#endif /* STM32F446xx */ +/*----------------------------------------------------------------------------*/ + +/*-------------------------------- STM32F469xx/STM32F479xx--------------------*/ +#if defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ +#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_LTDC ((uint8_t)0x09) /* LCD-TFT Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ +#define GPIO_AF13_DSI ((uint8_t)0x0D) /* DSI Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_LTDC ((uint8_t)0x0E) /* LCD-TFT Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ + +#endif /* STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Macros GPIO Exported Macros + * @{ + */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Functions GPIO Exported Functions + * @{ + */ +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup GPIOEx_Private_Constants GPIO Private Constants + * @{ + */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GPIOEx_Private_Macros GPIO Private Macros + * @{ + */ +/** @defgroup GPIOEx_Get_Port_Index GPIO Get Port Index + * @{ + */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U :\ + ((__GPIOx__) == (GPIOH))? 7U : 8U) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U :\ + ((__GPIOx__) == (GPIOH))? 7U :\ + ((__GPIOx__) == (GPIOI))? 8U :\ + ((__GPIOx__) == (GPIOJ))? 9U : 10U) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U : 7U) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U : 7U) +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ + +#if defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U : 7U) +#endif /* STM32F446xx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U : 7U) +#endif /* STM32F412Vx */ +#if defined(STM32F412Rx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U : 7U) +#endif /* STM32F412Rx */ +#if defined(STM32F412Cx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U : 7U) +#endif /* STM32F412Cx */ + +/** + * @} + */ + +/** @defgroup GPIOEx_IS_Alternat_function_selection GPIO Check Alternate Function + * @{ + */ +/*------------------------- STM32F429xx/STM32F439xx---------------------------*/ +#if defined(STM32F429xx) || defined(STM32F439xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF5_SPI5) || ((AF) == GPIO_AF5_SPI6) || \ + ((AF) == GPIO_AF8_UART7) || ((AF) == GPIO_AF8_UART8) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1) || \ + ((AF) == GPIO_AF14_LTDC)) + +#endif /* STM32F429xx || STM32F439xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F427xx/STM32F437xx------------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF5_SPI5) || ((AF) == GPIO_AF5_SPI6) || \ + ((AF) == GPIO_AF8_UART7) || ((AF) == GPIO_AF8_UART8) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1)) + +#endif /* STM32F427xx || STM32F437xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F407xx/STM32F417xx------------------*/ +#if defined(STM32F407xx) || defined(STM32F417xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF12_FSMC) || ((AF) == GPIO_AF15_EVENTOUT)) + +#endif /* STM32F407xx || STM32F417xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F405xx/STM32F415xx------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF12_OTG_HS_FS) || ((AF) == GPIO_AF12_SDIO) || \ + ((AF) == GPIO_AF12_FSMC) || ((AF) == GPIO_AF15_EVENTOUT)) + +#endif /* STM32F405xx || STM32F415xx */ + +/*----------------------------------------------------------------------------*/ + +/*---------------------------------------- STM32F401xx------------------------*/ +#if defined(STM32F401xC) || defined(STM32F401xE) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF12_SDIO) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM9) || \ + ((AF) == GPIO_AF3_TIM10) || ((AF) == GPIO_AF3_TIM11) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF7_USART1) || \ + ((AF) == GPIO_AF7_USART2) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_I2C2) || ((AF) == GPIO_AF9_I2C3) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF15_EVENTOUT)) +#endif /* STM32F401xC || STM32F401xE */ +/*----------------------------------------------------------------------------*/ +/*---------------------------------------- STM32F410xx------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_GPIO_AF(AF) (((AF) < 10U) || ((AF) == 15U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/*---------------------------------------- STM32F411xx------------------------*/ +#if defined(STM32F411xE) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF4_I2C1) || \ + ((AF) == GPIO_AF4_I2C2) || ((AF) == GPIO_AF4_I2C3) || \ + ((AF) == GPIO_AF5_SPI1) || ((AF) == GPIO_AF5_SPI2) || \ + ((AF) == GPIO_AF5_SPI3) || ((AF) == GPIO_AF6_SPI4) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF6_SPI5) || ((AF) == GPIO_AF7_SPI3) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF8_USART6) || ((AF) == GPIO_AF10_OTG_FS) || \ + ((AF) == GPIO_AF9_I2C2) || ((AF) == GPIO_AF9_I2C3) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF15_EVENTOUT)) + +#endif /* STM32F411xE */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------- STM32F446xx ----------------*/ +#if defined(STM32F446xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1) || \ + ((AF) == GPIO_AF3_CEC) || ((AF) == GPIO_AF4_CEC) || \ + ((AF) == GPIO_AF5_SPI3) || ((AF) == GPIO_AF6_SPI2) || \ + ((AF) == GPIO_AF6_SPI4) || ((AF) == GPIO_AF7_UART5) || \ + ((AF) == GPIO_AF7_SPI2) || ((AF) == GPIO_AF7_SPI3) || \ + ((AF) == GPIO_AF7_SPDIFRX) || ((AF) == GPIO_AF8_SPDIFRX) || \ + ((AF) == GPIO_AF8_SAI2) || ((AF) == GPIO_AF9_QSPI) || \ + ((AF) == GPIO_AF10_SAI2) || ((AF) == GPIO_AF10_QSPI)) + +#endif /* STM32F446xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------------------- STM32F469xx/STM32F479xx --------*/ +#if defined(STM32F469xx) || defined(STM32F479xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF5_SPI5) || ((AF) == GPIO_AF5_SPI6) || \ + ((AF) == GPIO_AF8_UART7) || ((AF) == GPIO_AF8_UART8) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1) || \ + ((AF) == GPIO_AF14_LTDC) || ((AF) == GPIO_AF13_DSI) || \ + ((AF) == GPIO_AF9_QSPI) || ((AF) == GPIO_AF10_QSPI)) + +#endif /* STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx-----------*/ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_GPIO_AF(AF) (((AF) < 16U) && ((AF) != 11U) && ((AF) != 14U) && ((AF) != 13U)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +/*----------------------------------------------------------------------------*/ + +/*------------------STM32F413xx/STM32F423xx-----------------------------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_GPIO_AF(AF) (((AF) < 16U) && ((AF) != 13U)) +#endif /* STM32F413xx || STM32F423xx */ +/*----------------------------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup GPIOEx_Private_Functions GPIO Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_GPIO_EX_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h new file mode 100644 index 00000000..b37126e3 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h @@ -0,0 +1,741 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_i2c.h + * @author MCD Application Team + * @brief Header file of I2C HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_I2C_H +#define __STM32F4xx_HAL_I2C_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup I2C + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup I2C_Exported_Types I2C Exported Types + * @{ + */ + +/** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition + * @brief I2C Configuration Structure definition + * @{ + */ +typedef struct +{ + uint32_t ClockSpeed; /*!< Specifies the clock frequency. + This parameter must be set to a value lower than 400kHz */ + + uint32_t DutyCycle; /*!< Specifies the I2C fast mode duty cycle. + This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */ + + uint32_t OwnAddress1; /*!< Specifies the first device own address. + This parameter can be a 7-bit or 10-bit address. */ + + uint32_t AddressingMode; /*!< Specifies if 7-bit or 10-bit addressing mode is selected. + This parameter can be a value of @ref I2C_addressing_mode */ + + uint32_t DualAddressMode; /*!< Specifies if dual addressing mode is selected. + This parameter can be a value of @ref I2C_dual_addressing_mode */ + + uint32_t OwnAddress2; /*!< Specifies the second device own address if dual addressing mode is selected + This parameter can be a 7-bit address. */ + + uint32_t GeneralCallMode; /*!< Specifies if general call mode is selected. + This parameter can be a value of @ref I2C_general_call_addressing_mode */ + + uint32_t NoStretchMode; /*!< Specifies if nostretch mode is selected. + This parameter can be a value of @ref I2C_nostretch_mode */ + +} I2C_InitTypeDef; + +/** + * @} + */ + +/** @defgroup HAL_state_structure_definition HAL state structure definition + * @brief HAL State structure definition + * @note HAL I2C State value coding follow below described bitmap : + * b7-b6 Error information + * 00 : No Error + * 01 : Abort (Abort user request on going) + * 10 : Timeout + * 11 : Error + * b5 Peripheral initialization status + * 0 : Reset (Peripheral not initialized) + * 1 : Init done (Peripheral initialized and ready to use. HAL I2C Init function called) + * b4 (not used) + * x : Should be set to 0 + * b3 + * 0 : Ready or Busy (No Listen mode ongoing) + * 1 : Listen (Peripheral in Address Listen Mode) + * b2 Intrinsic process state + * 0 : Ready + * 1 : Busy (Peripheral busy with some configuration or internal operations) + * b1 Rx state + * 0 : Ready (no Rx operation ongoing) + * 1 : Busy (Rx operation ongoing) + * b0 Tx state + * 0 : Ready (no Tx operation ongoing) + * 1 : Busy (Tx operation ongoing) + * @{ + */ +typedef enum +{ + HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */ + HAL_I2C_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use */ + HAL_I2C_STATE_BUSY = 0x24U, /*!< An internal process is ongoing */ + HAL_I2C_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing */ + HAL_I2C_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ + HAL_I2C_STATE_LISTEN = 0x28U, /*!< Address Listen Mode is ongoing */ + HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission + process is ongoing */ + HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception + process is ongoing */ + HAL_I2C_STATE_ABORT = 0x60U, /*!< Abort user request ongoing */ + HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */ + HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */ + +} HAL_I2C_StateTypeDef; + +/** + * @} + */ + +/** @defgroup HAL_mode_structure_definition HAL mode structure definition + * @brief HAL Mode structure definition + * @note HAL I2C Mode value coding follow below described bitmap :\n + * b7 (not used)\n + * x : Should be set to 0\n + * b6\n + * 0 : None\n + * 1 : Memory (HAL I2C communication is in Memory Mode)\n + * b5\n + * 0 : None\n + * 1 : Slave (HAL I2C communication is in Slave Mode)\n + * b4\n + * 0 : None\n + * 1 : Master (HAL I2C communication is in Master Mode)\n + * b3-b2-b1-b0 (not used)\n + * xxxx : Should be set to 0000 + * @{ + */ +typedef enum +{ + HAL_I2C_MODE_NONE = 0x00U, /*!< No I2C communication on going */ + HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode */ + HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */ + HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */ + +} HAL_I2C_ModeTypeDef; + +/** + * @} + */ + +/** @defgroup I2C_Error_Code_definition I2C Error Code definition + * @brief I2C Error Code definition + * @{ + */ +#define HAL_I2C_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_I2C_ERROR_BERR 0x00000001U /*!< BERR error */ +#define HAL_I2C_ERROR_ARLO 0x00000002U /*!< ARLO error */ +#define HAL_I2C_ERROR_AF 0x00000004U /*!< AF error */ +#define HAL_I2C_ERROR_OVR 0x00000008U /*!< OVR error */ +#define HAL_I2C_ERROR_DMA 0x00000010U /*!< DMA transfer error */ +#define HAL_I2C_ERROR_TIMEOUT 0x00000020U /*!< Timeout Error */ +#define HAL_I2C_ERROR_SIZE 0x00000040U /*!< Size Management error */ +#define HAL_I2C_ERROR_DMA_PARAM 0x00000080U /*!< DMA Parameter Error */ +#define HAL_I2C_WRONG_START 0x00000200U /*!< Wrong start Error */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +#define HAL_I2C_ERROR_INVALID_CALLBACK 0x00000100U /*!< Invalid Callback error */ +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @defgroup I2C_handle_Structure_definition I2C handle Structure definition + * @brief I2C handle Structure definition + * @{ + */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +typedef struct __I2C_HandleTypeDef +#else +typedef struct +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +{ + I2C_TypeDef *Instance; /*!< I2C registers base address */ + + I2C_InitTypeDef Init; /*!< I2C communication parameters */ + + uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer */ + + uint16_t XferSize; /*!< I2C transfer size */ + + __IO uint16_t XferCount; /*!< I2C transfer counter */ + + __IO uint32_t XferOptions; /*!< I2C transfer options */ + + __IO uint32_t PreviousState; /*!< I2C communication Previous state and mode + context for internal usage */ + + DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters */ + + HAL_LockTypeDef Lock; /*!< I2C locking object */ + + __IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ + + __IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode */ + + __IO uint32_t ErrorCode; /*!< I2C Error code */ + + __IO uint32_t Devaddress; /*!< I2C Target device address */ + + __IO uint32_t Memaddress; /*!< I2C Target memory address */ + + __IO uint32_t MemaddSize; /*!< I2C Target memory address size */ + + __IO uint32_t EventCount; /*!< I2C Event counter */ + + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Master Tx Transfer completed callback */ + void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Master Rx Transfer completed callback */ + void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Slave Tx Transfer completed callback */ + void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Slave Rx Transfer completed callback */ + void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Listen Complete callback */ + void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Memory Tx Transfer completed callback */ + void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Memory Rx Transfer completed callback */ + void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Error callback */ + void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Abort callback */ + + void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*!< I2C Slave Address Match callback */ + + void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Msp Init callback */ + void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c); /*!< I2C Msp DeInit callback */ + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +} I2C_HandleTypeDef; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +/** + * @brief HAL I2C Callback ID enumeration definition + */ +typedef enum +{ + HAL_I2C_MASTER_TX_COMPLETE_CB_ID = 0x00U, /*!< I2C Master Tx Transfer completed callback ID */ + HAL_I2C_MASTER_RX_COMPLETE_CB_ID = 0x01U, /*!< I2C Master Rx Transfer completed callback ID */ + HAL_I2C_SLAVE_TX_COMPLETE_CB_ID = 0x02U, /*!< I2C Slave Tx Transfer completed callback ID */ + HAL_I2C_SLAVE_RX_COMPLETE_CB_ID = 0x03U, /*!< I2C Slave Rx Transfer completed callback ID */ + HAL_I2C_LISTEN_COMPLETE_CB_ID = 0x04U, /*!< I2C Listen Complete callback ID */ + HAL_I2C_MEM_TX_COMPLETE_CB_ID = 0x05U, /*!< I2C Memory Tx Transfer callback ID */ + HAL_I2C_MEM_RX_COMPLETE_CB_ID = 0x06U, /*!< I2C Memory Rx Transfer completed callback ID */ + HAL_I2C_ERROR_CB_ID = 0x07U, /*!< I2C Error callback ID */ + HAL_I2C_ABORT_CB_ID = 0x08U, /*!< I2C Abort callback ID */ + + HAL_I2C_MSPINIT_CB_ID = 0x09U, /*!< I2C Msp Init callback ID */ + HAL_I2C_MSPDEINIT_CB_ID = 0x0AU /*!< I2C Msp DeInit callback ID */ + +} HAL_I2C_CallbackIDTypeDef; + +/** + * @brief HAL I2C Callback pointer definition + */ +typedef void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c); /*!< pointer to an I2C callback function */ +typedef void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*!< pointer to an I2C Address Match callback function */ + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** + * @} + */ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Constants I2C Exported Constants + * @{ + */ + +/** @defgroup I2C_duty_cycle_in_fast_mode I2C duty cycle in fast mode + * @{ + */ +#define I2C_DUTYCYCLE_2 0x00000000U +#define I2C_DUTYCYCLE_16_9 I2C_CCR_DUTY +/** + * @} + */ + +/** @defgroup I2C_addressing_mode I2C addressing mode + * @{ + */ +#define I2C_ADDRESSINGMODE_7BIT 0x00004000U +#define I2C_ADDRESSINGMODE_10BIT (I2C_OAR1_ADDMODE | 0x00004000U) +/** + * @} + */ + +/** @defgroup I2C_dual_addressing_mode I2C dual addressing mode + * @{ + */ +#define I2C_DUALADDRESS_DISABLE 0x00000000U +#define I2C_DUALADDRESS_ENABLE I2C_OAR2_ENDUAL +/** + * @} + */ + +/** @defgroup I2C_general_call_addressing_mode I2C general call addressing mode + * @{ + */ +#define I2C_GENERALCALL_DISABLE 0x00000000U +#define I2C_GENERALCALL_ENABLE I2C_CR1_ENGC +/** + * @} + */ + +/** @defgroup I2C_nostretch_mode I2C nostretch mode + * @{ + */ +#define I2C_NOSTRETCH_DISABLE 0x00000000U +#define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH +/** + * @} + */ + +/** @defgroup I2C_Memory_Address_Size I2C Memory Address Size + * @{ + */ +#define I2C_MEMADD_SIZE_8BIT 0x00000001U +#define I2C_MEMADD_SIZE_16BIT 0x00000010U +/** + * @} + */ + +/** @defgroup I2C_XferDirection_definition I2C XferDirection definition + * @{ + */ +#define I2C_DIRECTION_RECEIVE 0x00000000U +#define I2C_DIRECTION_TRANSMIT 0x00000001U +/** + * @} + */ + +/** @defgroup I2C_XferOptions_definition I2C XferOptions definition + * @{ + */ +#define I2C_FIRST_FRAME 0x00000001U +#define I2C_FIRST_AND_NEXT_FRAME 0x00000002U +#define I2C_NEXT_FRAME 0x00000004U +#define I2C_FIRST_AND_LAST_FRAME 0x00000008U +#define I2C_LAST_FRAME_NO_STOP 0x00000010U +#define I2C_LAST_FRAME 0x00000020U + +/* List of XferOptions in usage of : + * 1- Restart condition in all use cases (direction change or not) + */ +#define I2C_OTHER_FRAME (0x00AA0000U) +#define I2C_OTHER_AND_LAST_FRAME (0xAA000000U) +/** + * @} + */ + +/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition + * @brief I2C Interrupt definition + * Elements values convention: 0xXXXXXXXX + * - XXXXXXXX : Interrupt control mask + * @{ + */ +#define I2C_IT_BUF I2C_CR2_ITBUFEN +#define I2C_IT_EVT I2C_CR2_ITEVTEN +#define I2C_IT_ERR I2C_CR2_ITERREN +/** + * @} + */ + +/** @defgroup I2C_Flag_definition I2C Flag definition + * @{ + */ + +#define I2C_FLAG_OVR 0x00010800U +#define I2C_FLAG_AF 0x00010400U +#define I2C_FLAG_ARLO 0x00010200U +#define I2C_FLAG_BERR 0x00010100U +#define I2C_FLAG_TXE 0x00010080U +#define I2C_FLAG_RXNE 0x00010040U +#define I2C_FLAG_STOPF 0x00010010U +#define I2C_FLAG_ADD10 0x00010008U +#define I2C_FLAG_BTF 0x00010004U +#define I2C_FLAG_ADDR 0x00010002U +#define I2C_FLAG_SB 0x00010001U +#define I2C_FLAG_DUALF 0x00100080U +#define I2C_FLAG_GENCALL 0x00100010U +#define I2C_FLAG_TRA 0x00100004U +#define I2C_FLAG_BUSY 0x00100002U +#define I2C_FLAG_MSL 0x00100001U +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Macros I2C Exported Macros + * @{ + */ + +/** @brief Reset I2C handle state. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->State = HAL_I2C_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET) +#endif + +/** @brief Enable or disable the specified I2C interrupts. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the interrupt source to enable or disable. + * This parameter can be one of the following values: + * @arg I2C_IT_BUF: Buffer interrupt enable + * @arg I2C_IT_EVT: Event interrupt enable + * @arg I2C_IT_ERR: Error interrupt enable + * @retval None + */ +#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR2,(__INTERRUPT__)) +#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) + +/** @brief Checks if the specified I2C interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the I2C interrupt source to check. + * This parameter can be one of the following values: + * @arg I2C_IT_BUF: Buffer interrupt enable + * @arg I2C_IT_EVT: Event interrupt enable + * @arg I2C_IT_ERR: Error interrupt enable + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Checks whether the specified I2C flag is set or not. + * @param __HANDLE__ specifies the I2C Handle. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg I2C_FLAG_OVR: Overrun/Underrun flag + * @arg I2C_FLAG_AF: Acknowledge failure flag + * @arg I2C_FLAG_ARLO: Arbitration lost flag + * @arg I2C_FLAG_BERR: Bus error flag + * @arg I2C_FLAG_TXE: Data register empty flag + * @arg I2C_FLAG_RXNE: Data register not empty flag + * @arg I2C_FLAG_STOPF: Stop detection flag + * @arg I2C_FLAG_ADD10: 10-bit header sent flag + * @arg I2C_FLAG_BTF: Byte transfer finished flag + * @arg I2C_FLAG_ADDR: Address sent flag + * Address matched flag + * @arg I2C_FLAG_SB: Start bit flag + * @arg I2C_FLAG_DUALF: Dual flag + * @arg I2C_FLAG_GENCALL: General call header flag + * @arg I2C_FLAG_TRA: Transmitter/Receiver flag + * @arg I2C_FLAG_BUSY: Bus busy flag + * @arg I2C_FLAG_MSL: Master/Slave flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16U)) == 0x01U) ? \ + (((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET) : \ + (((((__HANDLE__)->Instance->SR2) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET)) + +/** @brief Clears the I2C pending flags which are cleared by writing 0 in a specific bit. + * @param __HANDLE__ specifies the I2C Handle. + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_FLAG_AF: Acknowledge failure flag + * @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_FLAG_BERR: Bus error flag + * @retval None + */ +#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR1 = ~((__FLAG__) & I2C_FLAG_MASK)) + +/** @brief Clears the I2C ADDR pending flag. + * @param __HANDLE__ specifies the I2C Handle. + * This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral. + * @retval None + */ +#define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg = 0x00U; \ + tmpreg = (__HANDLE__)->Instance->SR1; \ + tmpreg = (__HANDLE__)->Instance->SR2; \ + UNUSED(tmpreg); \ + } while(0) + +/** @brief Clears the I2C STOPF pending flag. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg = 0x00U; \ + tmpreg = (__HANDLE__)->Instance->SR1; \ + SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE); \ + UNUSED(tmpreg); \ + } while(0) + +/** @brief Enable the specified I2C peripheral. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE) + +/** @brief Disable the specified I2C peripheral. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE) + +/** + * @} + */ + +/* Include I2C HAL Extension module */ +#include "stm32f4xx_hal_i2c_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2C_Exported_Functions + * @{ + */ + +/** @addtogroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions******************************/ +HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, pI2C_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID); + +HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @addtogroup I2C_Exported_Functions_Group2 Input and Output operation functions + * @{ + */ +/* IO operation functions ****************************************************/ +/******* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout); + +/******* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress); + +/******* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions); +/** + * @} + */ + +/** @addtogroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks + * @{ + */ +/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */ +void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c); +void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); +void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/** @addtogroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions + * @{ + */ +/* Peripheral State, Mode and Error functions *********************************/ +HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c); +HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c); +uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); + +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2C_Private_Constants I2C Private Constants + * @{ + */ +#define I2C_FLAG_MASK 0x0000FFFFU +#define I2C_MIN_PCLK_FREQ_STANDARD 2000000U /*!< 2 MHz */ +#define I2C_MIN_PCLK_FREQ_FAST 4000000U /*!< 4 MHz */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2C_Private_Macros I2C Private Macros + * @{ + */ + +#define I2C_MIN_PCLK_FREQ(__PCLK__, __SPEED__) (((__SPEED__) <= 100000U) ? ((__PCLK__) < I2C_MIN_PCLK_FREQ_STANDARD) : ((__PCLK__) < I2C_MIN_PCLK_FREQ_FAST)) +#define I2C_CCR_CALCULATION(__PCLK__, __SPEED__, __COEFF__) (((((__PCLK__) - 1U)/((__SPEED__) * (__COEFF__))) + 1U) & I2C_CCR_CCR) +#define I2C_FREQRANGE(__PCLK__) ((__PCLK__)/1000000U) +#define I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (((__SPEED__) <= 100000U) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U)) +#define I2C_SPEED_STANDARD(__PCLK__, __SPEED__) ((I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 2U) < 4U)? 4U:I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 2U)) +#define I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2)? I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 3U) : (I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 25U) | I2C_DUTYCYCLE_16_9)) +#define I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__SPEED__) <= 100000U)? (I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) : \ + ((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0U)? 1U : \ + ((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS)) + +#define I2C_7BIT_ADD_WRITE(__ADDRESS__) ((uint8_t)((__ADDRESS__) & (uint8_t)(~I2C_OAR1_ADD0))) +#define I2C_7BIT_ADD_READ(__ADDRESS__) ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0)) + +#define I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)0x00FF))) +#define I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)0x0300)) >> 7) | (uint16_t)0x00F0))) +#define I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)0x0300)) >> 7) | (uint16_t)(0x00F1)))) + +#define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)0xFF00)) >> 8))) +#define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)0x00FF))) + +/** @defgroup I2C_IS_RTC_Definitions I2C Private macros to check input parameters + * @{ + */ +#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DUTYCYCLE_2) || \ + ((CYCLE) == I2C_DUTYCYCLE_16_9)) +#define IS_I2C_ADDRESSING_MODE(ADDRESS) (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || \ + ((ADDRESS) == I2C_ADDRESSINGMODE_10BIT)) +#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \ + ((ADDRESS) == I2C_DUALADDRESS_ENABLE)) +#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \ + ((CALL) == I2C_GENERALCALL_ENABLE)) +#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \ + ((STRETCH) == I2C_NOSTRETCH_ENABLE)) +#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \ + ((SIZE) == I2C_MEMADD_SIZE_16BIT)) +#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) > 0U) && ((SPEED) <= 400000U)) +#define IS_I2C_OWN_ADDRESS1(ADDRESS1) (((ADDRESS1) & 0xFFFFFC00U) == 0U) +#define IS_I2C_OWN_ADDRESS2(ADDRESS2) (((ADDRESS2) & 0xFFFFFF01U) == 0U) +#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \ + ((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \ + ((REQUEST) == I2C_NEXT_FRAME) || \ + ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \ + ((REQUEST) == I2C_LAST_FRAME) || \ + ((REQUEST) == I2C_LAST_FRAME_NO_STOP) || \ + IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST)) + +#define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME) || \ + ((REQUEST) == I2C_OTHER_AND_LAST_FRAME)) + +#define I2C_CHECK_FLAG(__ISR__, __FLAG__) ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET) +#define I2C_CHECK_IT_SOURCE(__CR1__, __IT__) ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET) +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup I2C_Private_Functions I2C Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_HAL_I2C_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h new file mode 100644 index 00000000..e2ee7c80 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h @@ -0,0 +1,115 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_i2c_ex.h + * @author MCD Application Team + * @brief Header file of I2C HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_I2C_EX_H +#define __STM32F4xx_HAL_I2C_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(I2C_FLTR_ANOFF)&&defined(I2C_FLTR_DNF) +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup I2CEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup I2CEx_Exported_Constants I2C Exported Constants + * @{ + */ + +/** @defgroup I2CEx_Analog_Filter I2C Analog Filter + * @{ + */ +#define I2C_ANALOGFILTER_ENABLE 0x00000000U +#define I2C_ANALOGFILTER_DISABLE I2C_FLTR_ANOFF +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2CEx_Exported_Functions + * @{ + */ + +/** @addtogroup I2CEx_Exported_Functions_Group1 + * @{ + */ +/* Peripheral Control functions ************************************************/ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter); +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter); +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Constants I2C Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Macros I2C Private Macros + * @{ + */ +#define IS_I2C_ANALOG_FILTER(FILTER) (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \ + ((FILTER) == I2C_ANALOGFILTER_DISABLE)) +#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000FU) +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_I2C_EX_H */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h new file mode 100644 index 00000000..de1ec241 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h @@ -0,0 +1,461 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pcd.h + * @author MCD Application Team + * @brief Header file of PCD HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_HAL_PCD_H +#define STM32F4xx_HAL_PCD_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_ll_usb.h" + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup PCD + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup PCD_Exported_Types PCD Exported Types + * @{ + */ + +/** + * @brief PCD State structure definition + */ +typedef enum +{ + HAL_PCD_STATE_RESET = 0x00, + HAL_PCD_STATE_READY = 0x01, + HAL_PCD_STATE_ERROR = 0x02, + HAL_PCD_STATE_BUSY = 0x03, + HAL_PCD_STATE_TIMEOUT = 0x04 +} PCD_StateTypeDef; + +/* Device LPM suspend state */ +typedef enum +{ + LPM_L0 = 0x00, /* on */ + LPM_L1 = 0x01, /* LPM L1 sleep */ + LPM_L2 = 0x02, /* suspend */ + LPM_L3 = 0x03, /* off */ +} PCD_LPM_StateTypeDef; + +typedef enum +{ + PCD_LPM_L0_ACTIVE = 0x00, /* on */ + PCD_LPM_L1_ACTIVE = 0x01, /* LPM L1 sleep */ +} PCD_LPM_MsgTypeDef; + +typedef enum +{ + PCD_BCD_ERROR = 0xFF, + PCD_BCD_CONTACT_DETECTION = 0xFE, + PCD_BCD_STD_DOWNSTREAM_PORT = 0xFD, + PCD_BCD_CHARGING_DOWNSTREAM_PORT = 0xFC, + PCD_BCD_DEDICATED_CHARGING_PORT = 0xFB, + PCD_BCD_DISCOVERY_COMPLETED = 0x00, + +} PCD_BCD_MsgTypeDef; + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +typedef USB_OTG_GlobalTypeDef PCD_TypeDef; +typedef USB_OTG_CfgTypeDef PCD_InitTypeDef; +typedef USB_OTG_EPTypeDef PCD_EPTypeDef; +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +/** + * @brief PCD Handle Structure definition + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +typedef struct __PCD_HandleTypeDef +#else +typedef struct +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + PCD_TypeDef *Instance; /*!< Register base address */ + PCD_InitTypeDef Init; /*!< PCD required parameters */ + __IO uint8_t USB_Address; /*!< USB Address */ + PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */ + PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */ + HAL_LockTypeDef Lock; /*!< PCD peripheral status */ + __IO PCD_StateTypeDef State; /*!< PCD communication state */ + __IO uint32_t ErrorCode; /*!< PCD Error code */ + uint32_t Setup[12]; /*!< Setup packet buffer */ + PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */ + uint32_t BESL; + uint32_t FrameNumber; /*!< Store Current Frame number */ + + + uint32_t lpm_active; /*!< Enable or disable the Link Power Management . + This parameter can be set to ENABLE or DISABLE */ + + uint32_t battery_charging_active; /*!< Enable or disable Battery charging. + This parameter can be set to ENABLE or DISABLE */ + void *pData; /*!< Pointer to upper stack Handler */ + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + void (* SOFCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD SOF callback */ + void (* SetupStageCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Setup Stage callback */ + void (* ResetCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Reset callback */ + void (* SuspendCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Suspend callback */ + void (* ResumeCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Resume callback */ + void (* ConnectCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Connect callback */ + void (* DisconnectCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Disconnect callback */ + + void (* DataOutStageCallback)(struct __PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< USB OTG PCD Data OUT Stage callback */ + void (* DataInStageCallback)(struct __PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< USB OTG PCD Data IN Stage callback */ + void (* ISOOUTIncompleteCallback)(struct __PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< USB OTG PCD ISO OUT Incomplete callback */ + void (* ISOINIncompleteCallback)(struct __PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< USB OTG PCD ISO IN Incomplete callback */ + void (* BCDCallback)(struct __PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg); /*!< USB OTG PCD BCD callback */ + void (* LPMCallback)(struct __PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg); /*!< USB OTG PCD LPM callback */ + + void (* MspInitCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Msp Init callback */ + void (* MspDeInitCallback)(struct __PCD_HandleTypeDef *hpcd); /*!< USB OTG PCD Msp DeInit callback */ +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +} PCD_HandleTypeDef; + +/** + * @} + */ + +/* Include PCD HAL Extended module */ +#include "stm32f4xx_hal_pcd_ex.h" + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PCD_Exported_Constants PCD Exported Constants + * @{ + */ + +/** @defgroup PCD_Speed PCD Speed + * @{ + */ +#define PCD_SPEED_HIGH USBD_HS_SPEED +#define PCD_SPEED_HIGH_IN_FULL USBD_HSINFS_SPEED +#define PCD_SPEED_FULL USBD_FS_SPEED +/** + * @} + */ + +/** @defgroup PCD_PHY_Module PCD PHY Module + * @{ + */ +#define PCD_PHY_ULPI 1U +#define PCD_PHY_EMBEDDED 2U +#define PCD_PHY_UTMI 3U +/** + * @} + */ + +/** @defgroup PCD_Error_Code_definition PCD Error Code definition + * @brief PCD Error Code definition + * @{ + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +#define HAL_PCD_ERROR_INVALID_CALLBACK (0x00000010U) /*!< Invalid Callback error */ +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup PCD_Exported_Macros PCD Exported Macros + * @brief macros to handle interrupts and specific clock configurations + * @{ + */ +#define __HAL_PCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) +#define __HAL_PCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) + +#define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) \ + ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) &= (__INTERRUPT__)) +#define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) + +#define __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__) \ + *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) &= ~(USB_OTG_PCGCCTL_STOPCLK) + +#define __HAL_PCD_GATE_PHYCLOCK(__HANDLE__) \ + *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) |= USB_OTG_PCGCCTL_STOPCLK + +#define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) \ + ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE)) & 0x10U) + +#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= (USB_OTG_HS_WAKEUP_EXTI_LINE) +#define __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE) +#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE) +#define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE) + +#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \ + do { \ + EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE); \ + EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \ + } while(0U) +#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE +#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) +#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE) +#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE + +#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \ + do { \ + EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \ + EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \ + } while(0U) +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup PCD_Exported_Functions PCD Exported Functions + * @{ + */ + +/* Initialization/de-initialization functions ********************************/ +/** @addtogroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd); +void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd); +void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd); + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +/** @defgroup HAL_PCD_Callback_ID_enumeration_definition HAL USB OTG PCD Callback ID enumeration definition + * @brief HAL USB OTG PCD Callback ID enumeration definition + * @{ + */ +typedef enum +{ + HAL_PCD_SOF_CB_ID = 0x01, /*!< USB PCD SOF callback ID */ + HAL_PCD_SETUPSTAGE_CB_ID = 0x02, /*!< USB PCD Setup Stage callback ID */ + HAL_PCD_RESET_CB_ID = 0x03, /*!< USB PCD Reset callback ID */ + HAL_PCD_SUSPEND_CB_ID = 0x04, /*!< USB PCD Suspend callback ID */ + HAL_PCD_RESUME_CB_ID = 0x05, /*!< USB PCD Resume callback ID */ + HAL_PCD_CONNECT_CB_ID = 0x06, /*!< USB PCD Connect callback ID */ + HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */ + + HAL_PCD_MSPINIT_CB_ID = 0x08, /*!< USB PCD MspInit callback ID */ + HAL_PCD_MSPDEINIT_CB_ID = 0x09 /*!< USB PCD MspDeInit callback ID */ + +} HAL_PCD_CallbackIDTypeDef; +/** + * @} + */ + +/** @defgroup HAL_PCD_Callback_pointer_definition HAL USB OTG PCD Callback pointer definition + * @brief HAL USB OTG PCD Callback pointer definition + * @{ + */ + +typedef void (*pPCD_CallbackTypeDef)(PCD_HandleTypeDef *hpcd); /*!< pointer to a common USB OTG PCD callback function */ +typedef void (*pPCD_DataOutStageCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< pointer to USB OTG PCD Data OUT Stage callback */ +typedef void (*pPCD_DataInStageCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< pointer to USB OTG PCD Data IN Stage callback */ +typedef void (*pPCD_IsoOutIncpltCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< pointer to USB OTG PCD ISO OUT Incomplete callback */ +typedef void (*pPCD_IsoInIncpltCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum); /*!< pointer to USB OTG PCD ISO IN Incomplete callback */ +typedef void (*pPCD_LpmCallbackTypeDef)(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg); /*!< pointer to USB OTG PCD LPM callback */ +typedef void (*pPCD_BcdCallbackTypeDef)(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg); /*!< pointer to USB OTG PCD BCD callback */ + +/** + * @} + */ + +HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID, + pPCD_CallbackTypeDef pCallback); + +HAL_StatusTypeDef HAL_PCD_UnRegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID); + +HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, + pPCD_DataOutStageCallbackTypeDef pCallback); + +HAL_StatusTypeDef HAL_PCD_UnRegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd); + +HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd, + pPCD_DataInStageCallbackTypeDef pCallback); + +HAL_StatusTypeDef HAL_PCD_UnRegisterDataInStageCallback(PCD_HandleTypeDef *hpcd); + +HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd, + pPCD_IsoOutIncpltCallbackTypeDef pCallback); + +HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd); + +HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, + pPCD_IsoInIncpltCallbackTypeDef pCallback); + +HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd); + +HAL_StatusTypeDef HAL_PCD_RegisterBcdCallback(PCD_HandleTypeDef *hpcd, pPCD_BcdCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_PCD_UnRegisterBcdCallback(PCD_HandleTypeDef *hpcd); + +HAL_StatusTypeDef HAL_PCD_RegisterLpmCallback(PCD_HandleTypeDef *hpcd, pPCD_LpmCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_PCD_UnRegisterLpmCallback(PCD_HandleTypeDef *hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +/** + * @} + */ + +/* I/O operation functions ***************************************************/ +/* Non-Blocking mode: Interrupt */ +/** @addtogroup PCD_Exported_Functions_Group2 Input and Output operation functions + * @{ + */ +HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd); +void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd); +void HAL_PCD_WKUP_IRQHandler(PCD_HandleTypeDef *hpcd); + +void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd); +void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd); +void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd); +void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd); +void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd); +void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd); +void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd); + +void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); +void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); +void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); +void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); +/** + * @} + */ + +/* Peripheral Control functions **********************************************/ +/** @addtogroup PCD_Exported_Functions_Group3 Peripheral Control functions + * @{ + */ +HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); +HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type); +HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); +HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); +HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); +HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); +HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); +HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); +HAL_StatusTypeDef HAL_PCD_EP_Abort(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); +HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +HAL_StatusTypeDef HAL_PCD_SetTestMode(const PCD_HandleTypeDef *hpcd, uint8_t testmode); +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef const *hpcd, uint8_t ep_addr); +/** + * @} + */ + +/* Peripheral State functions ************************************************/ +/** @addtogroup PCD_Exported_Functions_Group4 Peripheral State functions + * @{ + */ +PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef const *hpcd); +/** + * @} + */ + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup PCD_Private_Constants PCD Private Constants + * @{ + */ +/** @defgroup USB_EXTI_Line_Interrupt USB EXTI line interrupt + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +#define USB_OTG_FS_WAKEUP_EXTI_LINE (0x1U << 18) /*!< USB FS EXTI Line WakeUp Interrupt */ +#define USB_OTG_HS_WAKEUP_EXTI_LINE (0x1U << 20) /*!< USB HS EXTI Line WakeUp Interrupt */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + + +/** + * @} + */ +/** + * @} + */ + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +#ifndef USB_OTG_DOEPINT_OTEPSPR +#define USB_OTG_DOEPINT_OTEPSPR (0x1UL << 5) /*!< Status Phase Received interrupt */ +#endif /* defined USB_OTG_DOEPINT_OTEPSPR */ + +#ifndef USB_OTG_DOEPMSK_OTEPSPRM +#define USB_OTG_DOEPMSK_OTEPSPRM (0x1UL << 5) /*!< Setup Packet Received interrupt mask */ +#endif /* defined USB_OTG_DOEPMSK_OTEPSPRM */ + +#ifndef USB_OTG_DOEPINT_NAK +#define USB_OTG_DOEPINT_NAK (0x1UL << 13) /*!< NAK interrupt */ +#endif /* defined USB_OTG_DOEPINT_NAK */ + +#ifndef USB_OTG_DOEPMSK_NAKM +#define USB_OTG_DOEPMSK_NAKM (0x1UL << 13) /*!< OUT Packet NAK interrupt mask */ +#endif /* defined USB_OTG_DOEPMSK_NAKM */ + +#ifndef USB_OTG_DOEPINT_STPKTRX +#define USB_OTG_DOEPINT_STPKTRX (0x1UL << 15) /*!< Setup Packet Received interrupt */ +#endif /* defined USB_OTG_DOEPINT_STPKTRX */ + +#ifndef USB_OTG_DOEPMSK_NYETM +#define USB_OTG_DOEPMSK_NYETM (0x1UL << 14) /*!< Setup Packet Received interrupt mask */ +#endif /* defined USB_OTG_DOEPMSK_NYETM */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup PCD_Private_Macros PCD Private Macros + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F4xx_HAL_PCD_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h new file mode 100644 index 00000000..284c9d56 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h @@ -0,0 +1,93 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pcd_ex.h + * @author MCD Application Team + * @brief Header file of PCD HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_HAL_PCD_EX_H +#define STM32F4xx_HAL_PCD_EX_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup PCDEx + * @{ + */ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macros -----------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup PCDEx_Exported_Functions PCDEx Exported Functions + * @{ + */ +/** @addtogroup PCDEx_Exported_Functions_Group1 Peripheral Control functions + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size); +HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size); +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \ + || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \ + || defined(STM32F423xx) +HAL_StatusTypeDef HAL_PCDEx_ActivateLPM(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCDEx_DeActivateLPM(PCD_HandleTypeDef *hpcd); +#endif /* defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || + defined(STM32F423xx) */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) \ + || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +HAL_StatusTypeDef HAL_PCDEx_ActivateBCD(PCD_HandleTypeDef *hpcd); +HAL_StatusTypeDef HAL_PCDEx_DeActivateBCD(PCD_HandleTypeDef *hpcd); +void HAL_PCDEx_BCD_VBUSDetect(PCD_HandleTypeDef *hpcd); +#endif /* defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) */ +void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg); +void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* STM32F4xx_HAL_PCD_EX_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h new file mode 100644 index 00000000..a7273d5e --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h @@ -0,0 +1,436 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr.h + * @author MCD Application Team + * @brief Header file of PWR HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_PWR_H +#define __STM32F4xx_HAL_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWR + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Types PWR Exported Types + * @{ + */ + +/** + * @brief PWR PVD configuration structure definition + */ +typedef struct +{ + uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level. + This parameter can be a value of @ref PWR_PVD_detection_level */ + + uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. + This parameter can be a value of @ref PWR_PVD_Mode */ +}PWR_PVDTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWR_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins + * @{ + */ +#define PWR_WAKEUP_PIN1 0x00000100U +/** + * @} + */ + +/** @defgroup PWR_PVD_detection_level PWR PVD detection level + * @{ + */ +#define PWR_PVDLEVEL_0 PWR_CR_PLS_LEV0 +#define PWR_PVDLEVEL_1 PWR_CR_PLS_LEV1 +#define PWR_PVDLEVEL_2 PWR_CR_PLS_LEV2 +#define PWR_PVDLEVEL_3 PWR_CR_PLS_LEV3 +#define PWR_PVDLEVEL_4 PWR_CR_PLS_LEV4 +#define PWR_PVDLEVEL_5 PWR_CR_PLS_LEV5 +#define PWR_PVDLEVEL_6 PWR_CR_PLS_LEV6 +#define PWR_PVDLEVEL_7 PWR_CR_PLS_LEV7/* External input analog voltage + (Compare internally to VREFINT) */ +/** + * @} + */ + +/** @defgroup PWR_PVD_Mode PWR PVD Mode + * @{ + */ +#define PWR_PVD_MODE_NORMAL 0x00000000U /*!< basic mode is used */ +#define PWR_PVD_MODE_IT_RISING 0x00010001U /*!< External Interrupt Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_IT_FALLING 0x00010002U /*!< External Interrupt Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_IT_RISING_FALLING 0x00010003U /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING 0x00020001U /*!< Event Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_EVENT_FALLING 0x00020002U /*!< Event Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING_FALLING 0x00020003U /*!< Event Mode with Rising/Falling edge trigger detection */ +/** + * @} + */ + + +/** @defgroup PWR_Regulator_state_in_STOP_mode PWR Regulator state in SLEEP/STOP mode + * @{ + */ +#define PWR_MAINREGULATOR_ON 0x00000000U +#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS +/** + * @} + */ + +/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry + * @{ + */ +#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01) +#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02) +#define PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR ((uint8_t)0x03) + +/** + * @} + */ + +/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry + * @{ + */ +#define PWR_STOPENTRY_WFI ((uint8_t)0x01) +#define PWR_STOPENTRY_WFE ((uint8_t)0x02) +#define PWR_STOPENTRY_WFE_NO_EVT_CLEAR ((uint8_t)0x03) +/** + * @} + */ + +/** @defgroup PWR_Flag PWR Flag + * @{ + */ +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF +#define PWR_FLAG_PVDO PWR_CSR_PVDO +#define PWR_FLAG_BRR PWR_CSR_BRR +#define PWR_FLAG_VOSRDY PWR_CSR_VOSRDY +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWR_Exported_Macro PWR Exported Macro + * @{ + */ + +/** @brief Check PWR flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event + * was received from the WKUP pin or from the RTC alarm (Alarm A + * or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup. + * An additional wakeup event is detected if the WKUP pin is enabled + * (by setting the EWUP bit) when the WKUP pin level is already high. + * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was + * resumed from StandBy mode. + * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled + * by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode + * For this reason, this bit is equal to 0 after Standby or reset + * until the PVDE bit is set. + * @arg PWR_FLAG_BRR: Backup regulator ready flag. This bit is not reset + * when the device wakes up from Standby mode or by a system reset + * or power reset. + * @arg PWR_FLAG_VOSRDY: This flag indicates that the Regulator voltage + * scaling output selection is ready. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the PWR's pending flags. + * @param __FLAG__ specifies the flag to clear. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag + * @arg PWR_FLAG_SB: StandBy flag + */ +#define __HAL_PWR_CLEAR_FLAG(__FLAG__) (PWR->CR |= (__FLAG__) << 2U) + +/** + * @brief Enable the PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable the PVD EXTI Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_IT() (EXTI->IMR &= ~(PWR_EXTI_LINE_PVD)) + +/** + * @brief Enable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() (EXTI->EMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() (EXTI->EMR &= ~(PWR_EXTI_LINE_PVD)) + +/** + * @brief Enable the PVD Extended Interrupt Rising Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable the PVD Extended Interrupt Rising Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Enable the PVD Extended Interrupt Falling Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + + +/** + * @brief Disable the PVD Extended Interrupt Falling Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + + +/** + * @brief PVD EXTI line configuration: set rising & falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() do{__HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();\ + __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\ + }while(0U) + +/** + * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. + * This parameter can be: + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() do{__HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();\ + __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\ + }while(0U) + +/** + * @brief checks whether the specified PVD Exti interrupt flag is set or not. + * @retval EXTI PVD Line Status. + */ +#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) + +/** + * @brief Clear the PVD Exti flag. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) + +/** + * @brief Generates a Software interrupt on PVD EXTI line. + * @retval None + */ +#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_PVD)) + +/** + * @} + */ + +/* Include PWR HAL Extension module */ +#include "stm32f4xx_hal_pwr_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_PWR_DeInit(void); +void HAL_PWR_EnableBkUpAccess(void); +void HAL_PWR_DisableBkUpAccess(void); +/** + * @} + */ + +/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @{ + */ +/* Peripheral Control functions **********************************************/ +/* PVD configuration */ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); +void HAL_PWR_EnablePVD(void); +void HAL_PWR_DisablePVD(void); + +/* WakeUp pins configuration */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx); +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx); + +/* Low Power modes entry */ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry); +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry); +void HAL_PWR_EnterSTANDBYMode(void); + +/* Power PVD IRQ Handler */ +void HAL_PWR_PVD_IRQHandler(void); +void HAL_PWR_PVDCallback(void); + +/* Cortex System Control functions *******************************************/ +void HAL_PWR_EnableSleepOnExit(void); +void HAL_PWR_DisableSleepOnExit(void); +void HAL_PWR_EnableSEVOnPend(void); +void HAL_PWR_DisableSEVOnPend(void); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup PWR_Private_Constants PWR Private Constants + * @{ + */ + +/** @defgroup PWR_PVD_EXTI_Line PWR PVD EXTI Line + * @{ + */ +#define PWR_EXTI_LINE_PVD ((uint32_t)EXTI_IMR_MR16) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ +/** + * @} + */ + +/** @defgroup PWR_register_alias_address PWR Register alias address + * @{ + */ +/* ------------- PWR registers bit address in the alias region ---------------*/ +#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) +#define PWR_CR_OFFSET 0x00U +#define PWR_CSR_OFFSET 0x04U +#define PWR_CR_OFFSET_BB (PWR_OFFSET + PWR_CR_OFFSET) +#define PWR_CSR_OFFSET_BB (PWR_OFFSET + PWR_CSR_OFFSET) +/** + * @} + */ + +/** @defgroup PWR_CR_register_alias PWR CR Register alias address + * @{ + */ +/* --- CR Register ---*/ +/* Alias word address of DBP bit */ +#define DBP_BIT_NUMBER PWR_CR_DBP_Pos +#define CR_DBP_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (DBP_BIT_NUMBER * 4U)) + +/* Alias word address of PVDE bit */ +#define PVDE_BIT_NUMBER PWR_CR_PVDE_Pos +#define CR_PVDE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U)) + +/* Alias word address of VOS bit */ +#define VOS_BIT_NUMBER PWR_CR_VOS_Pos +#define CR_VOS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (VOS_BIT_NUMBER * 4U)) +/** + * @} + */ + +/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address + * @{ + */ +/* --- CSR Register ---*/ +/* Alias word address of EWUP bit */ +#define EWUP_BIT_NUMBER PWR_CSR_EWUP_Pos +#define CSR_EWUP_BB (PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (EWUP_BIT_NUMBER * 4U)) +/** + * @} + */ + +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup PWR_Private_Macros PWR Private Macros + * @{ + */ + +/** @defgroup PWR_IS_PWR_Definitions PWR Private macros to check input parameters + * @{ + */ +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \ + ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \ + ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \ + ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7)) +#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \ + ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \ + ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \ + ((MODE) == PWR_PVD_MODE_NORMAL)) +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) + +#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || \ + ((ENTRY) == PWR_SLEEPENTRY_WFE) || \ + ((ENTRY) == PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR)) + +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || \ + ((ENTRY) == PWR_STOPENTRY_WFE) || \ + ((ENTRY) == PWR_STOPENTRY_WFE_NO_EVT_CLEAR)) +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_HAL_PWR_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h new file mode 100644 index 00000000..57fd4d93 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h @@ -0,0 +1,340 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr_ex.h + * @author MCD Application Team + * @brief Header file of PWR HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_PWR_EX_H +#define __STM32F4xx_HAL_PWR_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWREx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Constants PWREx Exported Constants + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) + +/** @defgroup PWREx_Regulator_state_in_UnderDrive_mode PWREx Regulator state in UnderDrive mode + * @{ + */ +#define PWR_MAINREGULATOR_UNDERDRIVE_ON PWR_CR_MRUDS +#define PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON ((uint32_t)(PWR_CR_LPDS | PWR_CR_LPUDS)) +/** + * @} + */ + +/** @defgroup PWREx_Over_Under_Drive_Flag PWREx Over Under Drive Flag + * @{ + */ +#define PWR_FLAG_ODRDY PWR_CSR_ODRDY +#define PWR_FLAG_ODSWRDY PWR_CSR_ODSWRDY +#define PWR_FLAG_UDRDY PWR_CSR_UDSWRDY +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +/** @defgroup PWREx_Regulator_Voltage_Scale PWREx Regulator Voltage Scale + * @{ + */ +#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) +#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR_VOS /* Scale 1 mode(default value at reset): the maximum value of fHCLK = 168 MHz. */ +#define PWR_REGULATOR_VOLTAGE_SCALE2 0x00000000U /* Scale 2 mode: the maximum value of fHCLK = 144 MHz. */ +#else +#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR_VOS /* Scale 1 mode(default value at reset): the maximum value of fHCLK is 168 MHz. It can be extended to + 180 MHz by activating the over-drive mode. */ +#define PWR_REGULATOR_VOLTAGE_SCALE2 PWR_CR_VOS_1 /* Scale 2 mode: the maximum value of fHCLK is 144 MHz. It can be extended to + 168 MHz by activating the over-drive mode. */ +#define PWR_REGULATOR_VOLTAGE_SCALE3 PWR_CR_VOS_0 /* Scale 3 mode: the maximum value of fHCLK is 120 MHz. */ +#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ +/** + * @} + */ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup PWREx_WakeUp_Pins PWREx WakeUp Pins + * @{ + */ +#define PWR_WAKEUP_PIN2 0x00000080U +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +#define PWR_WAKEUP_PIN3 0x00000040U +#endif /* STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Zx || STM32F412Vx || \ + STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/** + * @} + */ +#endif /* STM32F410xx || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Constants PWREx Exported Constants + * @{ + */ + +#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) +/** @brief macros configure the main internal regulator output voltage. + * @param __REGULATOR__ specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption when the device does + * not operate at the maximum frequency (refer to the datasheets for more details). + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode + * @retval None + */ +#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS); \ + UNUSED(tmpreg); \ + } while(0U) +#else +/** @brief macros configure the main internal regulator output voltage. + * @param __REGULATOR__ specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption when the device does + * not operate at the maximum frequency (refer to the datasheets for more details). + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode + * @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode + * @retval None + */ +#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS); \ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macros to enable or disable the Over drive mode. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + */ +#define __HAL_PWR_OVERDRIVE_ENABLE() (*(__IO uint32_t *) CR_ODEN_BB = ENABLE) +#define __HAL_PWR_OVERDRIVE_DISABLE() (*(__IO uint32_t *) CR_ODEN_BB = DISABLE) + +/** @brief Macros to enable or disable the Over drive switching. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + */ +#define __HAL_PWR_OVERDRIVESWITCHING_ENABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = ENABLE) +#define __HAL_PWR_OVERDRIVESWITCHING_DISABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = DISABLE) + +/** @brief Macros to enable or disable the Under drive mode. + * @note This mode is enabled only with STOP low power mode. + * In this mode, the 1.2V domain is preserved in reduced leakage mode. This + * mode is only available when the main regulator or the low power regulator + * is in low voltage mode. + * @note If the Under-drive mode was enabled, it is automatically disabled after + * exiting Stop mode. + * When the voltage regulator operates in Under-drive mode, an additional + * startup delay is induced when waking up from Stop mode. + */ +#define __HAL_PWR_UNDERDRIVE_ENABLE() (PWR->CR |= (uint32_t)PWR_CR_UDEN) +#define __HAL_PWR_UNDERDRIVE_DISABLE() (PWR->CR &= (uint32_t)(~PWR_CR_UDEN)) + +/** @brief Check PWR flag is set or not. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_ODRDY: This flag indicates that the Over-drive mode + * is ready + * @arg PWR_FLAG_ODSWRDY: This flag indicates that the Over-drive mode + * switching is ready + * @arg PWR_FLAG_UDRDY: This flag indicates that the Under-drive mode + * is enabled in Stop mode + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_PWR_GET_ODRUDR_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the Under-Drive Ready flag. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + */ +#define __HAL_PWR_CLEAR_ODRUDR_FLAG() (PWR->CSR |= PWR_FLAG_UDRDY) + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup PWREx_Exported_Functions PWREx Exported Functions + * @{ + */ + +/** @addtogroup PWREx_Exported_Functions_Group1 + * @{ + */ +void HAL_PWREx_EnableFlashPowerDown(void); +void HAL_PWREx_DisableFlashPowerDown(void); +HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void); +HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void); +uint32_t HAL_PWREx_GetVoltageRange(void); +HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling); + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\ + defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +void HAL_PWREx_EnableMainRegulatorLowVoltage(void); +void HAL_PWREx_DisableMainRegulatorLowVoltage(void); +void HAL_PWREx_EnableLowRegulatorLowVoltage(void); +void HAL_PWREx_DisableLowRegulatorLowVoltage(void); +#endif /* STM32F410xx || STM32F401xC || STM32F401xE || STM32F411xE || STM32F412Zx || STM32F412Vx ||\ + STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void); +HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void); +HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup PWREx_Private_Constants PWREx Private Constants + * @{ + */ + +/** @defgroup PWREx_register_alias_address PWREx Register alias address + * @{ + */ +/* ------------- PWR registers bit address in the alias region ---------------*/ +/* --- CR Register ---*/ +/* Alias word address of FPDS bit */ +#define FPDS_BIT_NUMBER PWR_CR_FPDS_Pos +#define CR_FPDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (FPDS_BIT_NUMBER * 4U)) + +/* Alias word address of ODEN bit */ +#define ODEN_BIT_NUMBER PWR_CR_ODEN_Pos +#define CR_ODEN_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODEN_BIT_NUMBER * 4U)) + +/* Alias word address of ODSWEN bit */ +#define ODSWEN_BIT_NUMBER PWR_CR_ODSWEN_Pos +#define CR_ODSWEN_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODSWEN_BIT_NUMBER * 4U)) + +/* Alias word address of MRLVDS bit */ +#define MRLVDS_BIT_NUMBER PWR_CR_MRLVDS_Pos +#define CR_MRLVDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (MRLVDS_BIT_NUMBER * 4U)) + +/* Alias word address of LPLVDS bit */ +#define LPLVDS_BIT_NUMBER PWR_CR_LPLVDS_Pos +#define CR_LPLVDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPLVDS_BIT_NUMBER * 4U)) + + /** + * @} + */ + +/** @defgroup PWREx_CSR_register_alias PWRx CSR Register alias address + * @{ + */ +/* --- CSR Register ---*/ +/* Alias word address of BRE bit */ +#define BRE_BIT_NUMBER PWR_CSR_BRE_Pos +#define CSR_BRE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (BRE_BIT_NUMBER * 4U)) + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup PWREx_Private_Macros PWREx Private Macros + * @{ + */ + +/** @defgroup PWREx_IS_PWR_Definitions PWREx Private macros to check input parameters + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_PWR_REGULATOR_UNDERDRIVE(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_UNDERDRIVE_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) +#define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ + ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2)) +#else +#define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ + ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2) || \ + ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE3)) +#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ + +#if defined(STM32F446xx) +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2)) +#elif defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2) || \ + ((PIN) == PWR_WAKEUP_PIN3)) +#else +#define IS_PWR_WAKEUP_PIN(PIN) ((PIN) == PWR_WAKEUP_PIN1) +#endif /* STM32F446xx */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_HAL_PWR_EX_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h new file mode 100644 index 00000000..2e3909ad --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h @@ -0,0 +1,1458 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc.h + * @author MCD Application Team + * @brief Header file of RCC HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_RCC_H +#define __STM32F4xx_HAL_RCC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/* Include RCC HAL Extended module */ +/* (include on top of file since RCC structures are defined in extended file) */ +#include "stm32f4xx_hal_rcc_ex.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup RCC_Exported_Types RCC Exported Types + * @{ + */ + +/** + * @brief RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition + */ +typedef struct +{ + uint32_t OscillatorType; /*!< The oscillators to be configured. + This parameter can be a value of @ref RCC_Oscillator_Type */ + + uint32_t HSEState; /*!< The new state of the HSE. + This parameter can be a value of @ref RCC_HSE_Config */ + + uint32_t LSEState; /*!< The new state of the LSE. + This parameter can be a value of @ref RCC_LSE_Config */ + + uint32_t HSIState; /*!< The new state of the HSI. + This parameter can be a value of @ref RCC_HSI_Config */ + + uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT). + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */ + + uint32_t LSIState; /*!< The new state of the LSI. + This parameter can be a value of @ref RCC_LSI_Config */ + + RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */ +} RCC_OscInitTypeDef; + +/** + * @brief RCC System, AHB and APB busses clock configuration structure definition + */ +typedef struct +{ + uint32_t ClockType; /*!< The clock to be configured. + This parameter can be a value of @ref RCC_System_Clock_Type */ + + uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock. + This parameter can be a value of @ref RCC_System_Clock_Source */ + + uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK). + This parameter can be a value of @ref RCC_AHB_Clock_Source */ + + uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ + + uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ + +} RCC_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_Oscillator_Type Oscillator Type + * @{ + */ +#define RCC_OSCILLATORTYPE_NONE 0x00000000U +#define RCC_OSCILLATORTYPE_HSE 0x00000001U +#define RCC_OSCILLATORTYPE_HSI 0x00000002U +#define RCC_OSCILLATORTYPE_LSE 0x00000004U +#define RCC_OSCILLATORTYPE_LSI 0x00000008U +/** + * @} + */ + +/** @defgroup RCC_HSE_Config HSE Config + * @{ + */ +#define RCC_HSE_OFF 0x00000000U +#define RCC_HSE_ON RCC_CR_HSEON +#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) +/** + * @} + */ + +/** @defgroup RCC_LSE_Config LSE Config + * @{ + */ +#define RCC_LSE_OFF 0x00000000U +#define RCC_LSE_ON RCC_BDCR_LSEON +#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) +/** + * @} + */ + +/** @defgroup RCC_HSI_Config HSI Config + * @{ + */ +#define RCC_HSI_OFF ((uint8_t)0x00) +#define RCC_HSI_ON ((uint8_t)0x01) + +#define RCC_HSICALIBRATION_DEFAULT 0x10U /* Default HSI calibration trimming value */ +/** + * @} + */ + +/** @defgroup RCC_LSI_Config LSI Config + * @{ + */ +#define RCC_LSI_OFF ((uint8_t)0x00) +#define RCC_LSI_ON ((uint8_t)0x01) +/** + * @} + */ + +/** @defgroup RCC_PLL_Config PLL Config + * @{ + */ +#define RCC_PLL_NONE ((uint8_t)0x00) +#define RCC_PLL_OFF ((uint8_t)0x01) +#define RCC_PLL_ON ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup RCC_PLLP_Clock_Divider PLLP Clock Divider + * @{ + */ +#define RCC_PLLP_DIV2 0x00000002U +#define RCC_PLLP_DIV4 0x00000004U +#define RCC_PLLP_DIV6 0x00000006U +#define RCC_PLLP_DIV8 0x00000008U +/** + * @} + */ + +/** @defgroup RCC_PLL_Clock_Source PLL Clock Source + * @{ + */ +#define RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI +#define RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Type System Clock Type + * @{ + */ +#define RCC_CLOCKTYPE_SYSCLK 0x00000001U +#define RCC_CLOCKTYPE_HCLK 0x00000002U +#define RCC_CLOCKTYPE_PCLK1 0x00000004U +#define RCC_CLOCKTYPE_PCLK2 0x00000008U +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source System Clock Source + * @note The RCC_SYSCLKSOURCE_PLLRCLK parameter is available only for + * STM32F446xx devices. + * @{ + */ +#define RCC_SYSCLKSOURCE_HSI RCC_CFGR_SW_HSI +#define RCC_SYSCLKSOURCE_HSE RCC_CFGR_SW_HSE +#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL +#define RCC_SYSCLKSOURCE_PLLRCLK ((uint32_t)(RCC_CFGR_SW_0 | RCC_CFGR_SW_1)) +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status + * @note The RCC_SYSCLKSOURCE_STATUS_PLLRCLK parameter is available only for + * STM32F446xx devices. + * @{ + */ +#define RCC_SYSCLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_PLLRCLK ((uint32_t)(RCC_CFGR_SWS_0 | RCC_CFGR_SWS_1)) /*!< PLLR used as system clock */ +/** + * @} + */ + +/** @defgroup RCC_AHB_Clock_Source AHB Clock Source + * @{ + */ +#define RCC_SYSCLK_DIV1 RCC_CFGR_HPRE_DIV1 +#define RCC_SYSCLK_DIV2 RCC_CFGR_HPRE_DIV2 +#define RCC_SYSCLK_DIV4 RCC_CFGR_HPRE_DIV4 +#define RCC_SYSCLK_DIV8 RCC_CFGR_HPRE_DIV8 +#define RCC_SYSCLK_DIV16 RCC_CFGR_HPRE_DIV16 +#define RCC_SYSCLK_DIV64 RCC_CFGR_HPRE_DIV64 +#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 +#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 +#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 +/** + * @} + */ + +/** @defgroup RCC_APB1_APB2_Clock_Source APB1/APB2 Clock Source + * @{ + */ +#define RCC_HCLK_DIV1 RCC_CFGR_PPRE1_DIV1 +#define RCC_HCLK_DIV2 RCC_CFGR_PPRE1_DIV2 +#define RCC_HCLK_DIV4 RCC_CFGR_PPRE1_DIV4 +#define RCC_HCLK_DIV8 RCC_CFGR_PPRE1_DIV8 +#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 +/** + * @} + */ + +/** @defgroup RCC_RTC_Clock_Source RTC Clock Source + * @{ + */ +#define RCC_RTCCLKSOURCE_NO_CLK 0x00000000U +#define RCC_RTCCLKSOURCE_LSE 0x00000100U +#define RCC_RTCCLKSOURCE_LSI 0x00000200U +#define RCC_RTCCLKSOURCE_HSE_DIVX 0x00000300U +#define RCC_RTCCLKSOURCE_HSE_DIV2 0x00020300U +#define RCC_RTCCLKSOURCE_HSE_DIV3 0x00030300U +#define RCC_RTCCLKSOURCE_HSE_DIV4 0x00040300U +#define RCC_RTCCLKSOURCE_HSE_DIV5 0x00050300U +#define RCC_RTCCLKSOURCE_HSE_DIV6 0x00060300U +#define RCC_RTCCLKSOURCE_HSE_DIV7 0x00070300U +#define RCC_RTCCLKSOURCE_HSE_DIV8 0x00080300U +#define RCC_RTCCLKSOURCE_HSE_DIV9 0x00090300U +#define RCC_RTCCLKSOURCE_HSE_DIV10 0x000A0300U +#define RCC_RTCCLKSOURCE_HSE_DIV11 0x000B0300U +#define RCC_RTCCLKSOURCE_HSE_DIV12 0x000C0300U +#define RCC_RTCCLKSOURCE_HSE_DIV13 0x000D0300U +#define RCC_RTCCLKSOURCE_HSE_DIV14 0x000E0300U +#define RCC_RTCCLKSOURCE_HSE_DIV15 0x000F0300U +#define RCC_RTCCLKSOURCE_HSE_DIV16 0x00100300U +#define RCC_RTCCLKSOURCE_HSE_DIV17 0x00110300U +#define RCC_RTCCLKSOURCE_HSE_DIV18 0x00120300U +#define RCC_RTCCLKSOURCE_HSE_DIV19 0x00130300U +#define RCC_RTCCLKSOURCE_HSE_DIV20 0x00140300U +#define RCC_RTCCLKSOURCE_HSE_DIV21 0x00150300U +#define RCC_RTCCLKSOURCE_HSE_DIV22 0x00160300U +#define RCC_RTCCLKSOURCE_HSE_DIV23 0x00170300U +#define RCC_RTCCLKSOURCE_HSE_DIV24 0x00180300U +#define RCC_RTCCLKSOURCE_HSE_DIV25 0x00190300U +#define RCC_RTCCLKSOURCE_HSE_DIV26 0x001A0300U +#define RCC_RTCCLKSOURCE_HSE_DIV27 0x001B0300U +#define RCC_RTCCLKSOURCE_HSE_DIV28 0x001C0300U +#define RCC_RTCCLKSOURCE_HSE_DIV29 0x001D0300U +#define RCC_RTCCLKSOURCE_HSE_DIV30 0x001E0300U +#define RCC_RTCCLKSOURCE_HSE_DIV31 0x001F0300U +/** + * @} + */ + +/** @defgroup RCC_MCO_Index MCO Index + * @{ + */ +#define RCC_MCO1 0x00000000U +#define RCC_MCO2 0x00000001U +/** + * @} + */ + +/** @defgroup RCC_MCO1_Clock_Source MCO1 Clock Source + * @{ + */ +#define RCC_MCO1SOURCE_HSI 0x00000000U +#define RCC_MCO1SOURCE_LSE RCC_CFGR_MCO1_0 +#define RCC_MCO1SOURCE_HSE RCC_CFGR_MCO1_1 +#define RCC_MCO1SOURCE_PLLCLK RCC_CFGR_MCO1 +/** + * @} + */ + +/** @defgroup RCC_MCOx_Clock_Prescaler MCOx Clock Prescaler + * @{ + */ +#define RCC_MCODIV_1 0x00000000U +#define RCC_MCODIV_2 RCC_CFGR_MCO1PRE_2 +#define RCC_MCODIV_3 ((uint32_t)RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_2) +#define RCC_MCODIV_4 ((uint32_t)RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_2) +#define RCC_MCODIV_5 RCC_CFGR_MCO1PRE +/** + * @} + */ + +/** @defgroup RCC_Interrupt Interrupts + * @{ + */ +#define RCC_IT_LSIRDY ((uint8_t)0x01) +#define RCC_IT_LSERDY ((uint8_t)0x02) +#define RCC_IT_HSIRDY ((uint8_t)0x04) +#define RCC_IT_HSERDY ((uint8_t)0x08) +#define RCC_IT_PLLRDY ((uint8_t)0x10) +#define RCC_IT_PLLI2SRDY ((uint8_t)0x20) +#define RCC_IT_CSS ((uint8_t)0x80) +/** + * @} + */ + +/** @defgroup RCC_Flag Flags + * Elements values convention: 0XXYYYYYb + * - YYYYY : Flag position in the register + * - 0XX : Register index + * - 01: CR register + * - 10: BDCR register + * - 11: CSR register + * @{ + */ +/* Flags in the CR register */ +#define RCC_FLAG_HSIRDY ((uint8_t)0x21) +#define RCC_FLAG_HSERDY ((uint8_t)0x31) +#define RCC_FLAG_PLLRDY ((uint8_t)0x39) +#define RCC_FLAG_PLLI2SRDY ((uint8_t)0x3B) + +/* Flags in the BDCR register */ +#define RCC_FLAG_LSERDY ((uint8_t)0x41) + +/* Flags in the CSR register */ +#define RCC_FLAG_LSIRDY ((uint8_t)0x61) +#define RCC_FLAG_BORRST ((uint8_t)0x79) +#define RCC_FLAG_PINRST ((uint8_t)0x7A) +#define RCC_FLAG_PORRST ((uint8_t)0x7B) +#define RCC_FLAG_SFTRST ((uint8_t)0x7C) +#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) +#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) +#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCC_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOA_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOHEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOAEN)) +#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOBEN)) +#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOCEN)) +#define __HAL_RCC_GPIOH_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOHEN)) +#define __HAL_RCC_DMA1_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA1EN)) +#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA2EN)) +/** + * @} + */ + +/** @defgroup RCC_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOA_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOAEN)) != RESET) +#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOBEN)) != RESET) +#define __HAL_RCC_GPIOC_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOCEN)) != RESET) +#define __HAL_RCC_GPIOH_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOHEN)) != RESET) +#define __HAL_RCC_DMA1_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA1EN)) != RESET) +#define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA2EN)) != RESET) + +#define __HAL_RCC_GPIOA_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOAEN)) == RESET) +#define __HAL_RCC_GPIOB_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOBEN)) == RESET) +#define __HAL_RCC_GPIOC_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOCEN)) == RESET) +#define __HAL_RCC_GPIOH_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOHEN)) == RESET) +#define __HAL_RCC_DMA1_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA1EN)) == RESET) +#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA2EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_WWDG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_PWR_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN)) +#define __HAL_RCC_WWDG_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN)) +#define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) +#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN)) +#define __HAL_RCC_I2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) +#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET) +#define __HAL_RCC_WWDG_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET) +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_USART2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET) +#define __HAL_RCC_I2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) +#define __HAL_RCC_PWR_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET) + +#define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET) +#define __HAL_RCC_WWDG_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET) +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) +#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET) +#define __HAL_RCC_I2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) +#define __HAL_RCC_PWR_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SYSCFG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM9_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM11_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN)) +#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN)) +#define __HAL_RCC_USART6_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART6EN)) +#define __HAL_RCC_ADC1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN)) +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#define __HAL_RCC_SYSCFG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SYSCFGEN)) +#define __HAL_RCC_TIM9_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN)) +#define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET) +#define __HAL_RCC_USART1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET) +#define __HAL_RCC_USART6_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART6EN)) != RESET) +#define __HAL_RCC_ADC1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) +#define __HAL_RCC_SYSCFG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) != RESET) +#define __HAL_RCC_TIM9_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET) +#define __HAL_RCC_TIM11_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET) + +#define __HAL_RCC_TIM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET) +#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET) +#define __HAL_RCC_USART6_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART6EN)) == RESET) +#define __HAL_RCC_ADC1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET) +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#define __HAL_RCC_SYSCFG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) == RESET) +#define __HAL_RCC_TIM9_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET) +#define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOCRST)) +#define __HAL_RCC_GPIOH_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOHRST)) +#define __HAL_RCC_DMA1_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA1RST)) +#define __HAL_RCC_DMA2_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA2RST)) + +#define __HAL_RCC_AHB1_RELEASE_RESET() (RCC->AHB1RSTR = 0x00U) +#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOCRST)) +#define __HAL_RCC_GPIOH_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOHRST)) +#define __HAL_RCC_DMA1_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA1RST)) +#define __HAL_RCC_DMA2_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA2RST)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_WWDG_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_I2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00U) +#define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_WWDG_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_I2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST)) +#define __HAL_RCC_USART6_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART6RST)) +#define __HAL_RCC_ADC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADCRST)) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_SYSCFG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_TIM9_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST)) +#define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00U) +#define __HAL_RCC_TIM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST)) +#define __HAL_RCC_USART6_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART6RST)) +#define __HAL_RCC_ADC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADCRST)) +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_SYSCFG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_TIM9_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST)) +#define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST)) +/** + * @} + */ + +/** @defgroup RCC_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOALPEN)) +#define __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOBLPEN)) +#define __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOCLPEN)) +#define __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOHLPEN)) +#define __HAL_RCC_DMA1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA1LPEN)) +#define __HAL_RCC_DMA2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA2LPEN)) + +#define __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOALPEN)) +#define __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOBLPEN)) +#define __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOCLPEN)) +#define __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOHLPEN)) +#define __HAL_RCC_DMA1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA1LPEN)) +#define __HAL_RCC_DMA2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA2LPEN)) +/** + * @} + */ + +/** @defgroup RCC_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM5LPEN)) +#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_WWDGLPEN)) +#define __HAL_RCC_SPI2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI2LPEN)) +#define __HAL_RCC_USART2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART2LPEN)) +#define __HAL_RCC_I2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C1LPEN)) +#define __HAL_RCC_I2C2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C2LPEN)) +#define __HAL_RCC_PWR_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_PWRLPEN)) + +#define __HAL_RCC_TIM5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM5LPEN)) +#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_WWDGLPEN)) +#define __HAL_RCC_SPI2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI2LPEN)) +#define __HAL_RCC_USART2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART2LPEN)) +#define __HAL_RCC_I2C1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C1LPEN)) +#define __HAL_RCC_I2C2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C2LPEN)) +#define __HAL_RCC_PWR_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_PWRLPEN)) +/** + * @} + */ + +/** @defgroup RCC_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM1LPEN)) +#define __HAL_RCC_USART1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_USART1LPEN)) +#define __HAL_RCC_USART6_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_USART6LPEN)) +#define __HAL_RCC_ADC1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC1LPEN)) +#define __HAL_RCC_SPI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI1LPEN)) +#define __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SYSCFGLPEN)) +#define __HAL_RCC_TIM9_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM9LPEN)) +#define __HAL_RCC_TIM11_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM11LPEN)) + +#define __HAL_RCC_TIM1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM1LPEN)) +#define __HAL_RCC_USART1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_USART1LPEN)) +#define __HAL_RCC_USART6_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_USART6LPEN)) +#define __HAL_RCC_ADC1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC1LPEN)) +#define __HAL_RCC_SPI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI1LPEN)) +#define __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SYSCFGLPEN)) +#define __HAL_RCC_TIM9_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM9LPEN)) +#define __HAL_RCC_TIM11_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM11LPEN)) +/** + * @} + */ + +/** @defgroup RCC_HSI_Configuration HSI Configuration + * @{ + */ + +/** @brief Macros to enable or disable the Internal High Speed oscillator (HSI). + * @note The HSI is stopped by hardware when entering STOP and STANDBY modes. + * It is used (enabled by hardware) as system clock source after startup + * from Reset, wake-up from STOP and STANDBY mode, or in case of failure + * of the HSE used directly or indirectly as system clock (if the Clock + * Security System CSS is enabled). + * @note HSI can not be stopped if it is used as system clock source. In this case, + * you have to select another source of the system clock then stop the HSI. + * @note After enabling the HSI, the application software should wait on HSIRDY + * flag to be set indicating that HSI clock is stable and can be used as + * system clock source. + * This parameter can be: ENABLE or DISABLE. + * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator + * clock cycles. + */ +#define __HAL_RCC_HSI_ENABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = ENABLE) +#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = DISABLE) + +/** @brief Macro to adjust the Internal High Speed oscillator (HSI) calibration value. + * @note The calibration is used to compensate for the variations in voltage + * and temperature that influence the frequency of the internal HSI RC. + * @param __HSICalibrationValue__ specifies the calibration trimming value. + * (default is RCC_HSICALIBRATION_DEFAULT). + * This parameter must be a number between 0 and 0x1F. + */ +#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(__HSICalibrationValue__) (MODIFY_REG(RCC->CR,\ + RCC_CR_HSITRIM, (uint32_t)(__HSICalibrationValue__) << RCC_CR_HSITRIM_Pos)) +/** + * @} + */ + +/** @defgroup RCC_LSI_Configuration LSI Configuration + * @{ + */ + +/** @brief Macros to enable or disable the Internal Low Speed oscillator (LSI). + * @note After enabling the LSI, the application software should wait on + * LSIRDY flag to be set indicating that LSI clock is stable and can + * be used to clock the IWDG and/or the RTC. + * @note LSI can not be disabled if the IWDG is running. + * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator + * clock cycles. + */ +#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = ENABLE) +#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = DISABLE) +/** + * @} + */ + +/** @defgroup RCC_HSE_Configuration HSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External High Speed oscillator (HSE). + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not supported by this macro. + * User should request a transition to HSE Off first and then HSE On or HSE Bypass. + * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application + * software should wait on HSERDY flag to be set indicating that HSE clock + * is stable and can be used to clock the PLL and/or system clock. + * @note HSE state can not be changed if it is used directly or through the + * PLL as system clock. In this case, you have to select another source + * of the system clock then change the HSE state (ex. disable it). + * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. + * @note This function reset the CSSON bit, so if the clock security system(CSS) + * was previously enabled you have to enable it again after calling this + * function. + * @param __STATE__ specifies the new state of the HSE. + * This parameter can be one of the following values: + * @arg RCC_HSE_OFF: turn OFF the HSE oscillator, HSERDY flag goes low after + * 6 HSE oscillator clock cycles. + * @arg RCC_HSE_ON: turn ON the HSE oscillator. + * @arg RCC_HSE_BYPASS: HSE oscillator bypassed with external clock. + */ +#define __HAL_RCC_HSE_CONFIG(__STATE__) \ + do { \ + if ((__STATE__) == RCC_HSE_ON) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else if ((__STATE__) == RCC_HSE_BYPASS) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEBYP); \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + } while(0U) +/** + * @} + */ + +/** @defgroup RCC_LSE_Configuration LSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE). + * @note Transition LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro. + * User should request a transition to LSE Off first and then LSE On or LSE Bypass. + * @note As the LSE is in the Backup domain and write access is denied to + * this domain after reset, you have to enable write access using + * HAL_PWR_EnableBkUpAccess() function before to configure the LSE + * (to be done once after reset). + * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application + * software should wait on LSERDY flag to be set indicating that LSE clock + * is stable and can be used to clock the RTC. + * @param __STATE__ specifies the new state of the LSE. + * This parameter can be one of the following values: + * @arg RCC_LSE_OFF: turn OFF the LSE oscillator, LSERDY flag goes low after + * 6 LSE oscillator clock cycles. + * @arg RCC_LSE_ON: turn ON the LSE oscillator. + * @arg RCC_LSE_BYPASS: LSE oscillator bypassed with external clock. + */ +#define __HAL_RCC_LSE_CONFIG(__STATE__) \ + do { \ + if((__STATE__) == RCC_LSE_ON) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else if((__STATE__) == RCC_LSE_BYPASS) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + } while(0U) +/** + * @} + */ + +/** @defgroup RCC_Internal_RTC_Clock_Configuration RTC Clock Configuration + * @{ + */ + +/** @brief Macros to enable or disable the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = ENABLE) +#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = DISABLE) + +/** @brief Macros to configure the RTC clock (RTCCLK). + * @note As the RTC clock configuration bits are in the Backup domain and write + * access is denied to this domain after reset, you have to enable write + * access using the Power Backup Access macro before to configure + * the RTC clock source (to be done once after reset). + * @note Once the RTC clock is configured it can't be changed unless the + * Backup domain is reset using __HAL_RCC_BackupReset_RELEASE() macro, or by + * a Power On Reset (POR). + * @param __RTCCLKSource__ specifies the RTC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK : No clock selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_LSE : LSE selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_LSI : LSI selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER() + * @note If the LSE or LSI is used as RTC clock source, the RTC continues to + * work in STOP and STANDBY modes, and can be used as wake-up source. + * However, when the HSE clock is used as RTC clock source, the RTC + * cannot be used in STOP and STANDBY modes. + * @note The maximum input clock frequency for RTC is 1MHz (when using HSE as + * RTC clock source). + */ +#define __HAL_RCC_RTC_CLKPRESCALER(__RTCCLKSource__) (((__RTCCLKSource__) & RCC_BDCR_RTCSEL) == RCC_BDCR_RTCSEL) ? \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_RTCPRE, ((__RTCCLKSource__) & 0xFFFFCFFU)) : CLEAR_BIT(RCC->CFGR, RCC_CFGR_RTCPRE) + +#define __HAL_RCC_RTC_CONFIG(__RTCCLKSource__) do { __HAL_RCC_RTC_CLKPRESCALER(__RTCCLKSource__); \ + RCC->BDCR |= ((__RTCCLKSource__) & 0x00000FFFU); \ + } while(0U) + +/** @brief Macro to get the RTC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER() + */ +#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) + +/** + * @brief Get the RTC and HSE clock divider (RTCPRE). + * @retval Returned value can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER() + */ +#define __HAL_RCC_GET_RTC_HSE_PRESCALER() (READ_BIT(RCC->CFGR, RCC_CFGR_RTCPRE) | RCC_BDCR_RTCSEL) + +/** @brief Macros to force or release the Backup domain reset. + * @note This function resets the RTC peripheral (including the backup registers) + * and the RTC clock source selection in RCC_CSR register. + * @note The BKPSRAM is not affected by this reset. + */ +#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = ENABLE) +#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = DISABLE) +/** + * @} + */ + +/** @defgroup RCC_PLL_Configuration PLL Configuration + * @{ + */ + +/** @brief Macros to enable or disable the main PLL. + * @note After enabling the main PLL, the application software should wait on + * PLLRDY flag to be set indicating that PLL clock is stable and can + * be used as system clock source. + * @note The main PLL can not be disabled if it is used as system clock source + * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = ENABLE) +#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = DISABLE) + +/** @brief Macro to configure the PLL clock source. + * @note This function must be used only when the main PLL is disabled. + * @param __PLLSOURCE__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLSOURCE_HSI: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry + * + */ +#define __HAL_RCC_PLL_PLLSOURCE_CONFIG(__PLLSOURCE__) MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, (__PLLSOURCE__)) + +/** @brief Macro to configure the PLL multiplication factor. + * @note This function must be used only when the main PLL is disabled. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * + */ +#define __HAL_RCC_PLL_PLLM_CONFIG(__PLLM__) MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, (__PLLM__)) +/** + * @} + */ + +/** @defgroup RCC_Get_Clock_source Get Clock source + * @{ + */ +/** + * @brief Macro to configure the system clock source. + * @param __RCC_SYSCLKSOURCE__ specifies the system clock source. + * This parameter can be one of the following values: + * - RCC_SYSCLKSOURCE_HSI: HSI oscillator is used as system clock source. + * - RCC_SYSCLKSOURCE_HSE: HSE oscillator is used as system clock source. + * - RCC_SYSCLKSOURCE_PLLCLK: PLL output is used as system clock source. + * - RCC_SYSCLKSOURCE_PLLRCLK: PLLR output is used as system clock source. This + * parameter is available only for STM32F446xx devices. + */ +#define __HAL_RCC_SYSCLK_CONFIG(__RCC_SYSCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__RCC_SYSCLKSOURCE__)) + +/** @brief Macro to get the clock source used as system clock. + * @retval The clock source used as system clock. The returned value can be one + * of the following: + * - RCC_SYSCLKSOURCE_STATUS_HSI: HSI used as system clock. + * - RCC_SYSCLKSOURCE_STATUS_HSE: HSE used as system clock. + * - RCC_SYSCLKSOURCE_STATUS_PLLCLK: PLL used as system clock. + * - RCC_SYSCLKSOURCE_STATUS_PLLRCLK: PLLR used as system clock. This parameter + * is available only for STM32F446xx devices. + */ +#define __HAL_RCC_GET_SYSCLK_SOURCE() (RCC->CFGR & RCC_CFGR_SWS) + +/** @brief Macro to get the oscillator used as PLL clock source. + * @retval The oscillator used as PLL clock source. The returned value can be one + * of the following: + * - RCC_PLLSOURCE_HSI: HSI oscillator is used as PLL clock source. + * - RCC_PLLSOURCE_HSE: HSE oscillator is used as PLL clock source. + */ +#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC)) +/** + * @} + */ + +/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config + * @{ + */ + +/** @brief Macro to configure the MCO1 clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg RCC_MCO1SOURCE_HSI: HSI clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_LSE: LSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_HSE: HSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_PLLCLK: main PLL clock selected as MCO1 source + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCODIV_1: no division applied to MCOx clock + * @arg RCC_MCODIV_2: division by 2 applied to MCOx clock + * @arg RCC_MCODIV_3: division by 3 applied to MCOx clock + * @arg RCC_MCODIV_4: division by 4 applied to MCOx clock + * @arg RCC_MCODIV_5: division by 5 applied to MCOx clock + */ +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO1 | RCC_CFGR_MCO1PRE), ((__MCOCLKSOURCE__) | (__MCODIV__))) + +/** @brief Macro to configure the MCO2 clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg RCC_MCO2SOURCE_SYSCLK: System clock (SYSCLK) selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLI2SCLK: PLLI2S clock selected as MCO2 source, available for all STM32F4 devices except STM32F410xx + * @arg RCC_MCO2SOURCE_I2SCLK: I2SCLK clock selected as MCO2 source, available only for STM32F410Rx devices + * @arg RCC_MCO2SOURCE_HSE: HSE clock selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLCLK: main PLL clock selected as MCO2 source + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCODIV_1: no division applied to MCOx clock + * @arg RCC_MCODIV_2: division by 2 applied to MCOx clock + * @arg RCC_MCODIV_3: division by 3 applied to MCOx clock + * @arg RCC_MCODIV_4: division by 4 applied to MCOx clock + * @arg RCC_MCODIV_5: division by 5 applied to MCOx clock + * @note For STM32F410Rx devices, to output I2SCLK clock on MCO2, you should have + * at least one of the SPI clocks enabled (SPI1, SPI2 or SPI5). + */ +#define __HAL_RCC_MCO2_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO2 | RCC_CFGR_MCO2PRE), ((__MCOCLKSOURCE__) | ((__MCODIV__) << 3U))); +/** + * @} + */ + +/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management + * @brief macros to manage the specified RCC Flags and interrupts. + * @{ + */ + +/** @brief Enable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to enable + * the selected interrupts). + * @param __INTERRUPT__ specifies the RCC interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt. + * @arg RCC_IT_LSERDY: LSE ready interrupt. + * @arg RCC_IT_HSIRDY: HSI ready interrupt. + * @arg RCC_IT_HSERDY: HSE ready interrupt. + * @arg RCC_IT_PLLRDY: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + */ +#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__)) + +/** @brief Disable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to disable + * the selected interrupts). + * @param __INTERRUPT__ specifies the RCC interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt. + * @arg RCC_IT_LSERDY: LSE ready interrupt. + * @arg RCC_IT_HSIRDY: HSI ready interrupt. + * @arg RCC_IT_HSERDY: HSE ready interrupt. + * @arg RCC_IT_PLLRDY: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + */ +#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__))) + +/** @brief Clear the RCC's interrupt pending bits (Perform Byte access to RCC_CIR[23:16] + * bits to clear the selected interrupt pending bits. + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt. + * @arg RCC_IT_LSERDY: LSE ready interrupt. + * @arg RCC_IT_HSIRDY: HSI ready interrupt. + * @arg RCC_IT_HSERDY: HSE ready interrupt. + * @arg RCC_IT_PLLRDY: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + * @arg RCC_IT_CSS: Clock Security System interrupt + */ +#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__)) + +/** @brief Check the RCC's interrupt has occurred or not. + * @param __INTERRUPT__ specifies the RCC interrupt source to check. + * This parameter can be one of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt. + * @arg RCC_IT_LSERDY: LSE ready interrupt. + * @arg RCC_IT_HSIRDY: HSI ready interrupt. + * @arg RCC_IT_HSERDY: HSE ready interrupt. + * @arg RCC_IT_PLLRDY: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + * @arg RCC_IT_CSS: Clock Security System interrupt + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__)) + +/** @brief Set RMVF bit to clear the reset flags: RCC_FLAG_PINRST, RCC_FLAG_PORRST, + * RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST and RCC_FLAG_LPWRRST. + */ +#define __HAL_RCC_CLEAR_RESET_FLAGS() (RCC->CSR |= RCC_CSR_RMVF) + +/** @brief Check RCC flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready. + * @arg RCC_FLAG_HSERDY: HSE oscillator clock ready. + * @arg RCC_FLAG_PLLRDY: Main PLL clock ready. + * @arg RCC_FLAG_PLLI2SRDY: PLLI2S clock ready. + * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready. + * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready. + * @arg RCC_FLAG_BORRST: POR/PDR or BOR reset. + * @arg RCC_FLAG_PINRST: Pin reset. + * @arg RCC_FLAG_PORRST: POR/PDR reset. + * @arg RCC_FLAG_SFTRST: Software reset. + * @arg RCC_FLAG_IWDGRST: Independent Watchdog reset. + * @arg RCC_FLAG_WWDGRST: Window Watchdog reset. + * @arg RCC_FLAG_LPWRRST: Low Power reset. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define RCC_FLAG_MASK ((uint8_t)0x1FU) +#define __HAL_RCC_GET_FLAG(__FLAG__) (((((((__FLAG__) >> 5U)\ + == 1U)? RCC->CR :((((__FLAG__) >> 5U) == 2U) ? RCC->BDCR :((((__FLAG__) >> 5U) == 3U)? RCC->CSR :RCC->CIR))) &\ + (1U << ((__FLAG__) & RCC_FLAG_MASK)))!= 0U)? 1U : 0U) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCC_Exported_Functions + * @{ + */ + +/** @addtogroup RCC_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions ******************************/ +HAL_StatusTypeDef HAL_RCC_DeInit(void); +HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef *RCC_OscInitStruct); +HAL_StatusTypeDef HAL_RCC_ClockConfig(const RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency); +/** + * @} + */ + +/** @addtogroup RCC_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ************************************************/ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv); +void HAL_RCC_EnableCSS(void); +void HAL_RCC_DisableCSS(void); +uint32_t HAL_RCC_GetSysClockFreq(void); +uint32_t HAL_RCC_GetHCLKFreq(void); +uint32_t HAL_RCC_GetPCLK1Freq(void); +uint32_t HAL_RCC_GetPCLK2Freq(void); +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency); + +/* CSS NMI IRQ handler */ +void HAL_RCC_NMI_IRQHandler(void); + +/* User Callbacks in non blocking mode (IT mode) */ +void HAL_RCC_CSSCallback(void); + +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Constants RCC Private Constants + * @{ + */ + +/** @defgroup RCC_BitAddress_AliasRegion RCC BitAddress AliasRegion + * @brief RCC registers bit address in the alias region + * @{ + */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) +/* --- CR Register --- */ +/* Alias word address of HSION bit */ +#define RCC_CR_OFFSET (RCC_OFFSET + 0x00U) +#define RCC_HSION_BIT_NUMBER 0x00U +#define RCC_CR_HSION_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_HSION_BIT_NUMBER * 4U)) +/* Alias word address of CSSON bit */ +#define RCC_CSSON_BIT_NUMBER 0x13U +#define RCC_CR_CSSON_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_CSSON_BIT_NUMBER * 4U)) +/* Alias word address of PLLON bit */ +#define RCC_PLLON_BIT_NUMBER 0x18U +#define RCC_CR_PLLON_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_PLLON_BIT_NUMBER * 4U)) + +/* --- BDCR Register --- */ +/* Alias word address of RTCEN bit */ +#define RCC_BDCR_OFFSET (RCC_OFFSET + 0x70U) +#define RCC_RTCEN_BIT_NUMBER 0x0FU +#define RCC_BDCR_RTCEN_BB (PERIPH_BB_BASE + (RCC_BDCR_OFFSET * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U)) +/* Alias word address of BDRST bit */ +#define RCC_BDRST_BIT_NUMBER 0x10U +#define RCC_BDCR_BDRST_BB (PERIPH_BB_BASE + (RCC_BDCR_OFFSET * 32U) + (RCC_BDRST_BIT_NUMBER * 4U)) + +/* --- CSR Register --- */ +/* Alias word address of LSION bit */ +#define RCC_CSR_OFFSET (RCC_OFFSET + 0x74U) +#define RCC_LSION_BIT_NUMBER 0x00U +#define RCC_CSR_LSION_BB (PERIPH_BB_BASE + (RCC_CSR_OFFSET * 32U) + (RCC_LSION_BIT_NUMBER * 4U)) + +/* CR register byte 3 (Bits[23:16]) base address */ +#define RCC_CR_BYTE2_ADDRESS 0x40023802U + +/* CIR register byte 2 (Bits[15:8]) base address */ +#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + 0x0CU + 0x01U)) + +/* CIR register byte 3 (Bits[23:16]) base address */ +#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + 0x0CU + 0x02U)) + +/* BDCR register base address */ +#define RCC_BDCR_BYTE0_ADDRESS (PERIPH_BASE + RCC_BDCR_OFFSET) + +#define RCC_DBP_TIMEOUT_VALUE 2U +#define RCC_LSE_TIMEOUT_VALUE LSE_STARTUP_TIMEOUT + +#define HSE_TIMEOUT_VALUE HSE_STARTUP_TIMEOUT +#define HSI_TIMEOUT_VALUE 2U /* 2 ms */ +#define LSI_TIMEOUT_VALUE 2U /* 2 ms */ +#define CLOCKSWITCH_TIMEOUT_VALUE 5000U /* 5 s */ + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup RCC_Private_Macros RCC Private Macros + * @{ + */ + +/** @defgroup RCC_IS_RCC_Definitions RCC Private macros to check input parameters + * @{ + */ +#define IS_RCC_OSCILLATORTYPE(OSCILLATOR) ((OSCILLATOR) <= 15U) + +#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ + ((HSE) == RCC_HSE_BYPASS)) + +#define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \ + ((LSE) == RCC_LSE_BYPASS)) + +#define IS_RCC_HSI(HSI) (((HSI) == RCC_HSI_OFF) || ((HSI) == RCC_HSI_ON)) + +#define IS_RCC_LSI(LSI) (((LSI) == RCC_LSI_OFF) || ((LSI) == RCC_LSI_ON)) + +#define IS_RCC_PLL(PLL) (((PLL) == RCC_PLL_NONE) ||((PLL) == RCC_PLL_OFF) || ((PLL) == RCC_PLL_ON)) + +#define IS_RCC_PLLSOURCE(SOURCE) (((SOURCE) == RCC_PLLSOURCE_HSI) || \ + ((SOURCE) == RCC_PLLSOURCE_HSE)) + +#define IS_RCC_SYSCLKSOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_HSI) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_HSE) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_PLLCLK) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_PLLRCLK)) + +#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV2) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV3) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV4) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV5) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV6) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV7) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV8) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV9) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV10) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV11) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV12) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV13) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV14) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV15) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV16) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV17) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV18) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV19) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV20) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV21) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV22) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV23) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV24) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV25) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV26) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV27) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV28) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV29) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV30) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV31)) + +#define IS_RCC_PLLM_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 63U)) + +#define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == 2U) || ((VALUE) == 4U) || ((VALUE) == 6U) || ((VALUE) == 8U)) + +#define IS_RCC_PLLQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_DIV1) || ((HCLK) == RCC_SYSCLK_DIV2) || \ + ((HCLK) == RCC_SYSCLK_DIV4) || ((HCLK) == RCC_SYSCLK_DIV8) || \ + ((HCLK) == RCC_SYSCLK_DIV16) || ((HCLK) == RCC_SYSCLK_DIV64) || \ + ((HCLK) == RCC_SYSCLK_DIV128) || ((HCLK) == RCC_SYSCLK_DIV256) || \ + ((HCLK) == RCC_SYSCLK_DIV512)) + +#define IS_RCC_CLOCKTYPE(CLK) ((1U <= (CLK)) && ((CLK) <= 15U)) + +#define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_DIV1) || ((PCLK) == RCC_HCLK_DIV2) || \ + ((PCLK) == RCC_HCLK_DIV4) || ((PCLK) == RCC_HCLK_DIV8) || \ + ((PCLK) == RCC_HCLK_DIV16)) + +#define IS_RCC_MCO(MCOx) (((MCOx) == RCC_MCO1) || ((MCOx) == RCC_MCO2)) + +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_HSI) || ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || ((SOURCE) == RCC_MCO1SOURCE_PLLCLK)) + +#define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1) || ((DIV) == RCC_MCODIV_2) || \ + ((DIV) == RCC_MCODIV_3) || ((DIV) == RCC_MCODIV_4) || \ + ((DIV) == RCC_MCODIV_5)) +#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1FU) + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_RCC_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h new file mode 100644 index 00000000..3b621340 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h @@ -0,0 +1,7190 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc_ex.h + * @author MCD Application Team + * @brief Header file of RCC HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_RCC_EX_H +#define __STM32F4xx_HAL_RCC_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCCEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Types RCCEx Exported Types + * @{ + */ + +/** + * @brief RCC PLL configuration structure definition + */ +typedef struct +{ + uint32_t PLLState; /*!< The new state of the PLL. + This parameter can be a value of @ref RCC_PLL_Config */ + + uint32_t PLLSource; /*!< RCC_PLLSource: PLL entry clock source. + This parameter must be a value of @ref RCC_PLL_Clock_Source */ + + uint32_t PLLM; /*!< PLLM: Division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 0 and Max_Data = 63 */ + + uint32_t PLLN; /*!< PLLN: Multiplication factor for PLL VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 + except for STM32F411xE devices where the Min_Data = 192 */ + + uint32_t PLLP; /*!< PLLP: Division factor for main system clock (SYSCLK). + This parameter must be a value of @ref RCC_PLLP_Clock_Divider */ + + uint32_t PLLQ; /*!< PLLQ: Division factor for OTG FS, SDIO and RNG clocks. + This parameter must be a number between Min_Data = 2 and Max_Data = 15 */ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) + uint32_t PLLR; /*!< PLLR: PLL division factor for I2S, SAI, SYSTEM, SPDIFRX clocks. + This parameter is only available in STM32F410xx/STM32F446xx/STM32F469xx/STM32F479xx + and STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/STM32F413xx/STM32F423xx devices. + This parameter must be a number between Min_Data = 2 and Max_Data = 7 */ +#endif /* STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +} RCC_PLLInitTypeDef; + +#if defined(STM32F446xx) +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ + uint32_t PLLI2SM; /*!< Specifies division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 63 */ + + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 */ + + uint32_t PLLI2SP; /*!< Specifies division factor for SPDIFRX Clock. + This parameter must be a value of @ref RCCEx_PLLI2SP_Clock_Divider */ + + uint32_t PLLI2SQ; /*!< Specifies the division factor for SAI clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S */ +} RCC_PLLI2SInitTypeDef; + +/** + * @brief PLLSAI Clock structure definition + */ +typedef struct +{ + uint32_t PLLSAIM; /*!< Specifies division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 63 */ + + uint32_t PLLSAIN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 */ + + uint32_t PLLSAIP; /*!< Specifies division factor for OTG FS, SDIO and RNG clocks. + This parameter must be a value of @ref RCCEx_PLLSAIP_Clock_Divider */ + + uint32_t PLLSAIQ; /*!< Specifies the division factor for SAI clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLSAI is selected as Clock Source SAI */ +} RCC_PLLSAIInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + RCC_PLLSAIInitTypeDef PLLSAI; /*!< PLL SAI structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source SAI or LTDC */ + + uint32_t PLLI2SDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLSAIDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLSAI is selected as Clock Source SAI */ + + uint32_t Sai1ClockSelection; /*!< Specifies SAI1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_SAI1_Clock_Source */ + + uint32_t Sai2ClockSelection; /*!< Specifies SAI2 Clock Source Selection. + This parameter can be a value of @ref RCCEx_SAI2_Clock_Source */ + + uint32_t I2sApb1ClockSelection; /*!< Specifies I2S APB1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB1_Clock_Source */ + + uint32_t I2sApb2ClockSelection; /*!< Specifies I2S APB2 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB2_Clock_Source */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t SdioClockSelection; /*!< Specifies SDIO Clock Source Selection. + This parameter can be a value of @ref RCCEx_SDIO_Clock_Source */ + + uint32_t CecClockSelection; /*!< Specifies CEC Clock Source Selection. + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + + uint32_t Fmpi2c1ClockSelection; /*!< Specifies FMPI2C1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_FMPI2C1_Clock_Source */ + + uint32_t SpdifClockSelection; /*!< Specifies SPDIFRX Clock Source Selection. + This parameter can be a value of @ref RCCEx_SPDIFRX_Clock_Source */ + + uint32_t Clk48ClockSelection; /*!< Specifies CLK48 Clock Selection this clock used OTG FS, SDIO and RNG clocks. + This parameter can be a value of @ref RCCEx_CLK48_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +} RCC_PeriphCLKInitTypeDef; +#endif /* STM32F446xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t I2SClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2S_APB_Clock_Source */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */ + + uint32_t Fmpi2c1ClockSelection; /*!< Specifies FMPI2C1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_FMPI2C1_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +} RCC_PeriphCLKInitTypeDef; +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ + uint32_t PLLI2SM; /*!< Specifies division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 63 */ + + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 */ + + uint32_t PLLI2SQ; /*!< Specifies the division factor for SAI clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S */ +} RCC_PLLI2SInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S */ + +#if defined(STM32F413xx) || defined(STM32F423xx) + uint32_t PLLDivR; /*!< Specifies the PLL division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLL is selected as Clock Source SAI */ + + uint32_t PLLI2SDivR; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ +#endif /* STM32F413xx || STM32F423xx */ + + uint32_t I2sApb1ClockSelection; /*!< Specifies I2S APB1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB1_Clock_Source */ + + uint32_t I2sApb2ClockSelection; /*!< Specifies I2S APB2 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB2_Clock_Source */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t SdioClockSelection; /*!< Specifies SDIO Clock Source Selection. + This parameter can be a value of @ref RCCEx_SDIO_Clock_Source */ + + uint32_t Fmpi2c1ClockSelection; /*!< Specifies FMPI2C1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_FMPI2C1_Clock_Source */ + + uint32_t Clk48ClockSelection; /*!< Specifies CLK48 Clock Selection this clock used OTG FS, SDIO and RNG clocks. + This parameter can be a value of @ref RCCEx_CLK48_Clock_Source */ + + uint32_t Dfsdm1ClockSelection; /*!< Specifies DFSDM1 Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM1_Kernel_Clock_Source */ + + uint32_t Dfsdm1AudioClockSelection;/*!< Specifies DFSDM1 Audio Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM1_Audio_Clock_Source */ + +#if defined(STM32F413xx) || defined(STM32F423xx) + uint32_t Dfsdm2ClockSelection; /*!< Specifies DFSDM2 Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM2_Kernel_Clock_Source */ + + uint32_t Dfsdm2AudioClockSelection;/*!< Specifies DFSDM2 Audio Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM2_Audio_Clock_Source */ + + uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */ + + uint32_t SaiAClockSelection; /*!< Specifies SAI1_A Clock Prescalers Selection + This parameter can be a value of @ref RCCEx_SAI1_BlockA_Clock_Source */ + + uint32_t SaiBClockSelection; /*!< Specifies SAI1_B Clock Prescalers Selection + This parameter can be a value of @ref RCCEx_SAI1_BlockB_Clock_Source */ +#endif /* STM32F413xx || STM32F423xx */ + + uint32_t PLLI2SSelection; /*!< Specifies PLL I2S Clock Source Selection. + This parameter can be a value of @ref RCCEx_PLL_I2S_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +} RCC_PeriphCLKInitTypeDef; +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t PLLI2SQ; /*!< Specifies the division factor for SAI1 clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ +} RCC_PLLI2SInitTypeDef; + +/** + * @brief PLLSAI Clock structure definition + */ +typedef struct +{ + uint32_t PLLSAIN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432. + This parameter will be used only when PLLSAI is selected as Clock Source SAI or LTDC */ +#if defined(STM32F469xx) || defined(STM32F479xx) + uint32_t PLLSAIP; /*!< Specifies division factor for OTG FS and SDIO clocks. + This parameter is only available in STM32F469xx/STM32F479xx devices. + This parameter must be a value of @ref RCCEx_PLLSAIP_Clock_Divider */ +#endif /* STM32F469xx || STM32F479xx */ + + uint32_t PLLSAIQ; /*!< Specifies the division factor for SAI1 clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLSAI is selected as Clock Source SAI or LTDC */ + + uint32_t PLLSAIR; /*!< specifies the division factor for LTDC clock + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLSAI is selected as Clock Source LTDC */ + +} RCC_PLLSAIInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + RCC_PLLSAIInitTypeDef PLLSAI; /*!< PLL SAI structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source SAI or LTDC */ + + uint32_t PLLI2SDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLSAIDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLSAI is selected as Clock Source SAI */ + + uint32_t PLLSAIDivR; /*!< Specifies the PLLSAI division factor for LTDC clock. + This parameter must be one value of @ref RCCEx_PLLSAI_DIVR */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Prescalers Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +#if defined(STM32F469xx) || defined(STM32F479xx) + uint32_t Clk48ClockSelection; /*!< Specifies CLK48 Clock Selection this clock used OTG FS, SDIO and RNG clocks. + This parameter can be a value of @ref RCCEx_CLK48_Clock_Source */ + + uint32_t SdioClockSelection; /*!< Specifies SDIO Clock Source Selection. + This parameter can be a value of @ref RCCEx_SDIO_Clock_Source */ +#endif /* STM32F469xx || STM32F479xx */ +} RCC_PeriphCLKInitTypeDef; + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ +#if defined(STM32F411xE) + uint32_t PLLI2SM; /*!< PLLM: Division factor for PLLI2S VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 62 */ +#endif /* STM32F411xE */ + + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 + Except for STM32F411xE devices where the Min_Data = 192. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + +} RCC_PLLI2SInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ +} RCC_PeriphCLKInitTypeDef; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE */ +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants + * @{ + */ + +/** @defgroup RCCEx_Periph_Clock_Selection RCC Periph Clock Selection + * @{ + */ +/* Peripheral Clock source for STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +#define RCC_PERIPHCLK_I2S_APB1 0x00000001U +#define RCC_PERIPHCLK_I2S_APB2 0x00000002U +#define RCC_PERIPHCLK_TIM 0x00000004U +#define RCC_PERIPHCLK_RTC 0x00000008U +#define RCC_PERIPHCLK_FMPI2C1 0x00000010U +#define RCC_PERIPHCLK_CLK48 0x00000020U +#define RCC_PERIPHCLK_SDIO 0x00000040U +#define RCC_PERIPHCLK_PLLI2S 0x00000080U +#define RCC_PERIPHCLK_DFSDM1 0x00000100U +#define RCC_PERIPHCLK_DFSDM1_AUDIO 0x00000200U +#endif /* STM32F412Zx || STM32F412Vx) || STM32F412Rx || STM32F412Cx */ +#if defined(STM32F413xx) || defined(STM32F423xx) +#define RCC_PERIPHCLK_DFSDM2 0x00000400U +#define RCC_PERIPHCLK_DFSDM2_AUDIO 0x00000800U +#define RCC_PERIPHCLK_LPTIM1 0x00001000U +#define RCC_PERIPHCLK_SAIA 0x00002000U +#define RCC_PERIPHCLK_SAIB 0x00004000U +#endif /* STM32F413xx || STM32F423xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------- Peripheral Clock source for STM32F410xx ----------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_TIM 0x00000002U +#define RCC_PERIPHCLK_RTC 0x00000004U +#define RCC_PERIPHCLK_FMPI2C1 0x00000008U +#define RCC_PERIPHCLK_LPTIM1 0x00000010U +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ +/*----------------------------------------------------------------------------*/ + +/*------------------- Peripheral Clock source for STM32F446xx ----------------*/ +#if defined(STM32F446xx) +#define RCC_PERIPHCLK_I2S_APB1 0x00000001U +#define RCC_PERIPHCLK_I2S_APB2 0x00000002U +#define RCC_PERIPHCLK_SAI1 0x00000004U +#define RCC_PERIPHCLK_SAI2 0x00000008U +#define RCC_PERIPHCLK_TIM 0x00000010U +#define RCC_PERIPHCLK_RTC 0x00000020U +#define RCC_PERIPHCLK_CEC 0x00000040U +#define RCC_PERIPHCLK_FMPI2C1 0x00000080U +#define RCC_PERIPHCLK_CLK48 0x00000100U +#define RCC_PERIPHCLK_SDIO 0x00000200U +#define RCC_PERIPHCLK_SPDIFRX 0x00000400U +#define RCC_PERIPHCLK_PLLI2S 0x00000800U +#endif /* STM32F446xx */ +/*-----------------------------------------------------------------------------*/ + +/*----------- Peripheral Clock source for STM32F469xx/STM32F479xx -------------*/ +#if defined(STM32F469xx) || defined(STM32F479xx) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_SAI_PLLI2S 0x00000002U +#define RCC_PERIPHCLK_SAI_PLLSAI 0x00000004U +#define RCC_PERIPHCLK_LTDC 0x00000008U +#define RCC_PERIPHCLK_TIM 0x00000010U +#define RCC_PERIPHCLK_RTC 0x00000020U +#define RCC_PERIPHCLK_PLLI2S 0x00000040U +#define RCC_PERIPHCLK_CLK48 0x00000080U +#define RCC_PERIPHCLK_SDIO 0x00000100U +#endif /* STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*-------- Peripheral Clock source for STM32F42xxx/STM32F43xxx ---------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_SAI_PLLI2S 0x00000002U +#define RCC_PERIPHCLK_SAI_PLLSAI 0x00000004U +#define RCC_PERIPHCLK_LTDC 0x00000008U +#define RCC_PERIPHCLK_TIM 0x00000010U +#define RCC_PERIPHCLK_RTC 0x00000020U +#define RCC_PERIPHCLK_PLLI2S 0x00000040U +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +/*----------------------------------------------------------------------------*/ + +/*-------- Peripheral Clock source for STM32F40xxx/STM32F41xxx ---------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_RTC 0x00000002U +#define RCC_PERIPHCLK_PLLI2S 0x00000004U +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE */ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define RCC_PERIPHCLK_TIM 0x00000008U +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ +/*----------------------------------------------------------------------------*/ +/** + * @} + */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F469xx) || \ + defined(STM32F479xx) +/** @defgroup RCCEx_I2S_Clock_Source I2S Clock Source + * @{ + */ +#define RCC_I2SCLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SCLKSOURCE_EXT RCC_CFGR_I2SSRC +/** + * @} + */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F469xx || STM32F479xx */ + +/** @defgroup RCCEx_PLLSAI_DIVR RCC PLLSAI DIVR + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define RCC_PLLSAIDIVR_2 0x00000000U +#define RCC_PLLSAIDIVR_4 0x00010000U +#define RCC_PLLSAIDIVR_8 0x00020000U +#define RCC_PLLSAIDIVR_16 0x00030000U +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_PLLI2SP_Clock_Divider RCC PLLI2SP Clock Divider + * @{ + */ +#if defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) +#define RCC_PLLI2SP_DIV2 0x00000002U +#define RCC_PLLI2SP_DIV4 0x00000004U +#define RCC_PLLI2SP_DIV6 0x00000006U +#define RCC_PLLI2SP_DIV8 0x00000008U +#endif /* STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +/** + * @} + */ + +/** @defgroup RCCEx_PLLSAIP_Clock_Divider RCC PLLSAIP Clock Divider + * @{ + */ +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define RCC_PLLSAIP_DIV2 0x00000002U +#define RCC_PLLSAIP_DIV4 0x00000004U +#define RCC_PLLSAIP_DIV6 0x00000006U +#define RCC_PLLSAIP_DIV8 0x00000008U +#endif /* STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup RCCEx_SAI_BlockA_Clock_Source RCC SAI BlockA Clock Source + * @{ + */ +#define RCC_SAIACLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAIACLKSOURCE_PLLI2S 0x00100000U +#define RCC_SAIACLKSOURCE_EXT 0x00200000U +/** + * @} + */ + +/** @defgroup RCCEx_SAI_BlockB_Clock_Source RCC SAI BlockB Clock Source + * @{ + */ +#define RCC_SAIBCLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAIBCLKSOURCE_PLLI2S 0x00400000U +#define RCC_SAIBCLKSOURCE_EXT 0x00800000U +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup RCCEx_CLK48_Clock_Source RCC CLK48 Clock Source + * @{ + */ +#define RCC_CLK48CLKSOURCE_PLLQ 0x00000000U +#define RCC_CLK48CLKSOURCE_PLLSAIP ((uint32_t)RCC_DCKCFGR_CK48MSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SDIO_Clock_Source RCC SDIO Clock Source + * @{ + */ +#define RCC_SDIOCLKSOURCE_CLK48 0x00000000U +#define RCC_SDIOCLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR_SDIOSEL) +/** + * @} + */ + +/** @defgroup RCCEx_DSI_Clock_Source RCC DSI Clock Source + * @{ + */ +#define RCC_DSICLKSOURCE_DSIPHY 0x00000000U +#define RCC_DSICLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_DSISEL) +/** + * @} + */ +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F446xx) +/** @defgroup RCCEx_SAI1_Clock_Source RCC SAI1 Clock Source + * @{ + */ +#define RCC_SAI1CLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAI1CLKSOURCE_PLLI2S ((uint32_t)RCC_DCKCFGR_SAI1SRC_0) +#define RCC_SAI1CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI1SRC_1) +#define RCC_SAI1CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_SAI1SRC) +/** + * @} + */ + +/** @defgroup RCCEx_SAI2_Clock_Source RCC SAI2 Clock Source + * @{ + */ +#define RCC_SAI2CLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAI2CLKSOURCE_PLLI2S ((uint32_t)RCC_DCKCFGR_SAI2SRC_0) +#define RCC_SAI2CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI2SRC_1) +#define RCC_SAI2CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_SAI2SRC) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB1_Clock_Source RCC I2S APB1 Clock Source + * @{ + */ +#define RCC_I2SAPB1CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB1CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S1SRC_0) +#define RCC_I2SAPB1CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S1SRC_1) +#define RCC_I2SAPB1CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S1SRC) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB2_Clock_Source RCC I2S APB2 Clock Source + * @{ + */ +#define RCC_I2SAPB2CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB2CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S2SRC_0) +#define RCC_I2SAPB2CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S2SRC_1) +#define RCC_I2SAPB2CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S2SRC) +/** + * @} + */ + +/** @defgroup RCCEx_FMPI2C1_Clock_Source RCC FMPI2C1 Clock Source + * @{ + */ +#define RCC_FMPI2C1CLKSOURCE_PCLK1 0x00000000U +#define RCC_FMPI2C1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_0) +#define RCC_FMPI2C1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_1) +/** + * @} + */ + +/** @defgroup RCCEx_CEC_Clock_Source RCC CEC Clock Source + * @{ + */ +#define RCC_CECCLKSOURCE_HSI 0x00000000U +#define RCC_CECCLKSOURCE_LSE ((uint32_t)RCC_DCKCFGR2_CECSEL) +/** + * @} + */ + +/** @defgroup RCCEx_CLK48_Clock_Source RCC CLK48 Clock Source + * @{ + */ +#define RCC_CLK48CLKSOURCE_PLLQ 0x00000000U +#define RCC_CLK48CLKSOURCE_PLLSAIP ((uint32_t)RCC_DCKCFGR2_CK48MSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SDIO_Clock_Source RCC SDIO Clock Source + * @{ + */ +#define RCC_SDIOCLKSOURCE_CLK48 0x00000000U +#define RCC_SDIOCLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_SDIOSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SPDIFRX_Clock_Source RCC SPDIFRX Clock Source + * @{ + */ +#define RCC_SPDIFRXCLKSOURCE_PLLR 0x00000000U +#define RCC_SPDIFRXCLKSOURCE_PLLI2SP ((uint32_t)RCC_DCKCFGR2_SPDIFRXSEL) +/** + * @} + */ + +#endif /* STM32F446xx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_SAI1_BlockA_Clock_Source RCC SAI BlockA Clock Source + * @{ + */ +#define RCC_SAIACLKSOURCE_PLLI2SR 0x00000000U +#define RCC_SAIACLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_SAI1ASRC_0) +#define RCC_SAIACLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI1ASRC_1) +#define RCC_SAIACLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_SAI1ASRC_0 | RCC_DCKCFGR_SAI1ASRC_1) +/** + * @} + */ + +/** @defgroup RCCEx_SAI1_BlockB_Clock_Source RCC SAI BlockB Clock Source + * @{ + */ +#define RCC_SAIBCLKSOURCE_PLLI2SR 0x00000000U +#define RCC_SAIBCLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_SAI1BSRC_0) +#define RCC_SAIBCLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI1BSRC_1) +#define RCC_SAIBCLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_SAI1BSRC_0 | RCC_DCKCFGR_SAI1BSRC_1) +/** + * @} + */ + +/** @defgroup RCCEx_LPTIM1_Clock_Source RCC LPTIM1 Clock Source + * @{ + */ +#define RCC_LPTIM1CLKSOURCE_PCLK1 0x00000000U +#define RCC_LPTIM1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0) +#define RCC_LPTIM1CLKSOURCE_LSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_1) +#define RCC_LPTIM1CLKSOURCE_LSE ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0 | RCC_DCKCFGR2_LPTIM1SEL_1) +/** + * @} + */ + + +/** @defgroup RCCEx_DFSDM2_Audio_Clock_Source RCC DFSDM2 Audio Clock Source + * @{ + */ +#define RCC_DFSDM2AUDIOCLKSOURCE_I2S1 0x00000000U +#define RCC_DFSDM2AUDIOCLKSOURCE_I2S2 ((uint32_t)RCC_DCKCFGR_CKDFSDM2ASEL) +/** + * @} + */ + +/** @defgroup RCCEx_DFSDM2_Kernel_Clock_Source RCC DFSDM2 Kernel Clock Source + * @{ + */ +#define RCC_DFSDM2CLKSOURCE_PCLK2 0x00000000U +#define RCC_DFSDM2CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR_CKDFSDM1SEL) +/** + * @} + */ + +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_PLL_I2S_Clock_Source PLL I2S Clock Source + * @{ + */ +#define RCC_PLLI2SCLKSOURCE_PLLSRC 0x00000000U +#define RCC_PLLI2SCLKSOURCE_EXT ((uint32_t)RCC_PLLI2SCFGR_PLLI2SSRC) +/** + * @} + */ + +/** @defgroup RCCEx_DFSDM1_Audio_Clock_Source RCC DFSDM1 Audio Clock Source + * @{ + */ +#define RCC_DFSDM1AUDIOCLKSOURCE_I2S1 0x00000000U +#define RCC_DFSDM1AUDIOCLKSOURCE_I2S2 ((uint32_t)RCC_DCKCFGR_CKDFSDM1ASEL) +/** + * @} + */ + +/** @defgroup RCCEx_DFSDM1_Kernel_Clock_Source RCC DFSDM1 Kernel Clock Source + * @{ + */ +#define RCC_DFSDM1CLKSOURCE_PCLK2 0x00000000U +#define RCC_DFSDM1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR_CKDFSDM1SEL) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB1_Clock_Source RCC I2S APB1 Clock Source + * @{ + */ +#define RCC_I2SAPB1CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB1CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S1SRC_0) +#define RCC_I2SAPB1CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S1SRC_1) +#define RCC_I2SAPB1CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S1SRC) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB2_Clock_Source RCC I2S APB2 Clock Source + * @{ + */ +#define RCC_I2SAPB2CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB2CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S2SRC_0) +#define RCC_I2SAPB2CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S2SRC_1) +#define RCC_I2SAPB2CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S2SRC) +/** + * @} + */ + +/** @defgroup RCCEx_FMPI2C1_Clock_Source RCC FMPI2C1 Clock Source + * @{ + */ +#define RCC_FMPI2C1CLKSOURCE_PCLK1 0x00000000U +#define RCC_FMPI2C1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_0) +#define RCC_FMPI2C1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_1) +/** + * @} + */ + +/** @defgroup RCCEx_CLK48_Clock_Source RCC CLK48 Clock Source + * @{ + */ +#define RCC_CLK48CLKSOURCE_PLLQ 0x00000000U +#define RCC_CLK48CLKSOURCE_PLLI2SQ ((uint32_t)RCC_DCKCFGR2_CK48MSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SDIO_Clock_Source RCC SDIO Clock Source + * @{ + */ +#define RCC_SDIOCLKSOURCE_CLK48 0x00000000U +#define RCC_SDIOCLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_SDIOSEL) +/** + * @} + */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) + +/** @defgroup RCCEx_I2S_APB_Clock_Source RCC I2S APB Clock Source + * @{ + */ +#define RCC_I2SAPBCLKSOURCE_PLLR 0x00000000U +#define RCC_I2SAPBCLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2SSRC_0) +#define RCC_I2SAPBCLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2SSRC_1) +/** + * @} + */ + +/** @defgroup RCCEx_FMPI2C1_Clock_Source RCC FMPI2C1 Clock Source + * @{ + */ +#define RCC_FMPI2C1CLKSOURCE_PCLK1 0x00000000U +#define RCC_FMPI2C1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_0) +#define RCC_FMPI2C1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_1) +/** + * @} + */ + +/** @defgroup RCCEx_LPTIM1_Clock_Source RCC LPTIM1 Clock Source + * @{ + */ +#define RCC_LPTIM1CLKSOURCE_PCLK1 0x00000000U +#define RCC_LPTIM1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0) +#define RCC_LPTIM1CLKSOURCE_LSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_1) +#define RCC_LPTIM1CLKSOURCE_LSE ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0 | RCC_DCKCFGR2_LPTIM1SEL_1) +/** + * @} + */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_TIM_PRescaler_Selection RCC TIM PRescaler Selection + * @{ + */ +#define RCC_TIMPRES_DESACTIVATED ((uint8_t)0x00) +#define RCC_TIMPRES_ACTIVATED ((uint8_t)0x01) +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\ + STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +/** @defgroup RCCEx_LSE_Dual_Mode_Selection RCC LSE Dual Mode Selection + * @{ + */ +#define RCC_LSE_LOWPOWER_MODE ((uint8_t)0x00) +#define RCC_LSE_HIGHDRIVE_MODE ((uint8_t)0x01) +/** + * @} + */ +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx ||\ + STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCC_MCO2_Clock_Source MCO2 Clock Source + * @{ + */ +#define RCC_MCO2SOURCE_SYSCLK 0x00000000U +#define RCC_MCO2SOURCE_PLLI2SCLK RCC_CFGR_MCO2_0 +#define RCC_MCO2SOURCE_HSE RCC_CFGR_MCO2_1 +#define RCC_MCO2SOURCE_PLLCLK RCC_CFGR_MCO2 +/** + * @} + */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || + STM32F412Rx || STM32F413xx | STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @defgroup RCC_MCO2_Clock_Source MCO2 Clock Source + * @{ + */ +#define RCC_MCO2SOURCE_SYSCLK 0x00000000U +#define RCC_MCO2SOURCE_I2SCLK RCC_CFGR_MCO2_0 +#define RCC_MCO2SOURCE_HSE RCC_CFGR_MCO2_1 +#define RCC_MCO2SOURCE_PLLCLK RCC_CFGR_MCO2 +/** + * @} + */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros + * @{ + */ +/*------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx --------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOJ_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOJEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOJEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOK_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOKEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOKEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA2D_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACTX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACPTP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#define __HAL_RCC_GPIOI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOIEN)) +#define __HAL_RCC_GPIOJ_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOJEN)) +#define __HAL_RCC_GPIOK_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOKEN)) +#define __HAL_RCC_DMA2D_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA2DEN)) +#define __HAL_RCC_ETHMAC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACEN)) +#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACTXEN)) +#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACRXEN)) +#define __HAL_RCC_ETHMACPTP_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACPTPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSULPIEN)) +#define __HAL_RCC_BKPSRAM_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_BKPSRAMEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) + +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETH_CLK_ENABLE() do { \ + __HAL_RCC_ETHMAC_CLK_ENABLE(); \ + __HAL_RCC_ETHMACTX_CLK_ENABLE(); \ + __HAL_RCC_ETHMACRX_CLK_ENABLE(); \ + } while(0U) +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETH_CLK_DISABLE() do { \ + __HAL_RCC_ETHMACTX_CLK_DISABLE(); \ + __HAL_RCC_ETHMACRX_CLK_DISABLE(); \ + __HAL_RCC_ETHMAC_CLK_DISABLE(); \ + } while(0U) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#define __HAL_RCC_GPIOI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) != RESET) +#define __HAL_RCC_GPIOJ_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOJEN)) != RESET) +#define __HAL_RCC_GPIOK_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOKEN)) != RESET) +#define __HAL_RCC_DMA2D_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_DMA2DEN)) != RESET) +#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) != RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) != RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) != RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) != RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_ETH_IS_CLK_ENABLED() (__HAL_RCC_ETHMAC_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#define __HAL_RCC_GPIOI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) == RESET) +#define __HAL_RCC_GPIOJ_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOJEN)) == RESET) +#define __HAL_RCC_GPIOK_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOKEN)) == RESET) +#define __HAL_RCC_DMA2D_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_DMA2DEN)) == RESET) +#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) == RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) == RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) == RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) == RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#define __HAL_RCC_ETH_IS_CLK_DISABLED() (__HAL_RCC_ETHMAC_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_DISABLED()) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DCMI_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_DCMIEN)) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_HASH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_CRYP_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_CRYPEN)) +#define __HAL_RCC_HASH_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_HASHEN)) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) != RESET) +#define __HAL_RCC_DCMI_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) == RESET) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) != RESET) +#define __HAL_RCC_CRYP_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) == RESET) + +#define __HAL_RCC_HASH_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) != RESET) +#define __HAL_RCC_HASH_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) == RESET) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ + +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FMCEN)) +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_QSPI_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_QSPIEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) != RESET) +#define __HAL_RCC_FMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) == RESET) +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) != RESET) +#define __HAL_RCC_QSPI_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) == RESET) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +#define __HAL_RCC_UART7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART7EN)) +#define __HAL_RCC_UART8_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART8EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) +#define __HAL_RCC_UART7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) != RESET) +#define __HAL_RCC_UART8_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +#define __HAL_RCC_UART7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) == RESET) +#define __HAL_RCC_UART8_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SAI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +#define __HAL_RCC_SPI6_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI6EN)) +#define __HAL_RCC_SAI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI1EN)) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_LTDC_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_LTDCEN)) +#endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_DSI_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DSIEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) +#define __HAL_RCC_SPI6_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI6EN)) != RESET) +#define __HAL_RCC_SAI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) != RESET) +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN))!= RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN))== RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +#define __HAL_RCC_SPI6_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI6EN)) == RESET) +#define __HAL_RCC_SAI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) == RESET) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_LTDCEN)) != RESET) +#define __HAL_RCC_LTDC_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_LTDCEN)) == RESET) +#endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DSIEN)) != RESET) +#define __HAL_RCC_DSI_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DSIEN)) == RESET) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x22E017FFU) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_GPIOJ_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOJRST)) +#define __HAL_RCC_GPIOK_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOKRST)) +#define __HAL_RCC_DMA2D_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA2DRST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_GPIOJ_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOJRST)) +#define __HAL_RCC_GPIOK_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOKRST)) +#define __HAL_RCC_DMA2D_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA2DRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F469xx) +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x000000C1U) +#endif /* STM32F427xx || STM32F429xx || STM32F469xx */ +#if defined(STM32F437xx) || defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x000000F1U) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_DCMIRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_DCMIRST)) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_HASHRST)) + +#define __HAL_RCC_CRYP_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_HASHRST)) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F437xx) || defined(STM32F439xx) +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0x00000001U) +#endif /* STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0x00000003U) +#endif /* STM32F469xx || STM32F479xx */ +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) +#define __HAL_RCC_FMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FMCRST)) +#define __HAL_RCC_FMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FMCRST)) + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_QSPIRST)) +#define __HAL_RCC_QSPI_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_QSPIRST)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xF6FEC9FFU) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART8RST)) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART8RST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x0C777933U) +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F429xx) || defined(STM32F439xx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x04777933U) +#endif /* STM32F429xx || STM32F439xx */ +#if defined(STM32F427xx) || defined(STM32F437xx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x00777933U) +#endif /* STM32F427xx || STM32F437xx */ +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SPI6_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI6RST)) +#define __HAL_RCC_SAI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI1RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET()(RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SPI6_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI6RST)) +#define __HAL_RCC_SAI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI1RST)) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_LTDCRST)) +#define __HAL_RCC_LTDC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_LTDCRST)) +#endif /* STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DSIRST)) +#define __HAL_RCC_DSI_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DSIRST)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOJLPEN)) +#define __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOKLPEN)) +#define __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM3LPEN)) +#define __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA2DLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_BKPSRAMLPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOJLPEN)) +#define __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOKLPEN)) +#define __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA2DLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_BKPSRAMLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) + +#define __HAL_RCC_DCMI_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_DCMILPEN)) +#define __HAL_RCC_DCMI_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_DCMILPEN)) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_HASHLPEN)) + +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_HASHLPEN)) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_FMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FMCLPEN)) +#define __HAL_RCC_FMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FMCLPEN)) + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_QSPILPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_QSPILPEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART8LPEN)) +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART8LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_SPI6_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI6LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI1LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()(RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()(RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_SPI6_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI6LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI1LPEN)) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_LTDCLPEN)) + +#define __HAL_RCC_LTDC_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_LTDCLPEN)) +#endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_DSILPEN)) +#define __HAL_RCC_DSI_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_DSILPEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------- STM32F40xxx/STM32F41xxx-----------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#define __HAL_RCC_GPIOI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOIEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSULPIEN)) +#define __HAL_RCC_BKPSRAM_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_BKPSRAMEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +#if defined(STM32F407xx)|| defined(STM32F417xx) +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACTX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACPTP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETH_CLK_ENABLE() do { \ + __HAL_RCC_ETHMAC_CLK_ENABLE(); \ + __HAL_RCC_ETHMACTX_CLK_ENABLE(); \ + __HAL_RCC_ETHMACRX_CLK_ENABLE(); \ + } while(0U) + +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACEN)) +#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACTXEN)) +#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACRXEN)) +#define __HAL_RCC_ETHMACPTP_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACPTPEN)) +#define __HAL_RCC_ETH_CLK_DISABLE() do { \ + __HAL_RCC_ETHMACTX_CLK_DISABLE(); \ + __HAL_RCC_ETHMACRX_CLK_DISABLE(); \ + __HAL_RCC_ETHMAC_CLK_DISABLE(); \ + } while(0U) +#endif /* STM32F407xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#define __HAL_RCC_GPIOI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN))== RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#if defined(STM32F407xx)|| defined(STM32F417xx) +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) != RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) != RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) != RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) != RESET) +#define __HAL_RCC_ETH_IS_CLK_ENABLED() (__HAL_RCC_ETHMAC_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()) +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) == RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) == RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) == RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) == RESET) +#define __HAL_RCC_ETH_IS_CLK_DISABLED() (__HAL_RCC_ETHMAC_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_DISABLED()) +#endif /* STM32F407xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DCMI_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_DCMIEN)) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_HASH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRYP_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_CRYPEN)) +#define __HAL_RCC_HASH_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_HASHEN)) +#endif /* STM32F415xx || STM32F417xx */ +/** + * @} + */ + + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) != RESET) +#define __HAL_RCC_DCMI_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) == RESET) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) != RESET) +#define __HAL_RCC_HASH_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) != RESET) + +#define __HAL_RCC_CRYP_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) == RESET) +#define __HAL_RCC_HASH_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) == RESET) +#endif /* STM32F415xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FSMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FSMCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FSMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) != RESET) +#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#if defined (STM32F405xx) || defined (STM32F415xx) +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x206011FFU) +#endif /* STM32F405xx || STM32F415xx */ +#if defined (STM32F407xx) || defined (STM32F417xx) +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x226011FFU) +#endif /* STM32F407xx || STM32F417xx */ +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#if defined (STM32F415xx) || defined (STM32F417xx) +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x000000F1U) +#endif /* STM32F415xx || STM32F417xx */ +#if defined (STM32F405xx) || defined (STM32F407xx) +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x000000C1U) +#endif /* STM32F405xx || STM32F407xx */ +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_DCMIRST)) +#define __HAL_RCC_DCMI_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_DCMIRST)) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_HASHRST)) + +#define __HAL_RCC_CRYP_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_HASHRST)) +#endif /* STM32F415xx || STM32F417xx */ + +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0x00000001U) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) + +#define __HAL_RCC_FSMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FSMCRST)) +#define __HAL_RCC_FSMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FSMCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xF6FEC9FFU) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x04777933U) +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET()(RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_BKPSRAMLPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_BKPSRAMLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_DCMILPEN)) +#define __HAL_RCC_DCMI_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_DCMILPEN)) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_HASHLPEN)) + +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_HASHLPEN)) +#endif /* STM32F415xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_FSMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FSMCLPEN)) +#define __HAL_RCC_FSMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FSMCLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()(RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()(RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC3LPEN)) +/** + * @} + */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------- STM32F401xE/STM32F401xC --------------------------*/ +#if defined(STM32F401xC) || defined(STM32F401xE) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +/** + * @} + */ +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x0060109FU) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_AHB1_RELEASE_RESET() (RCC->AHB1RSTR = 0x00U) +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x00000080U) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0x10E2C80FU) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00U) +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x00077931U) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00U) +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +/** + * @} + */ +#endif /* STM32F401xC || STM32F401xE*/ +/*----------------------------------------------------------------------------*/ + +/*-------------------------------- STM32F410xx -------------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_RNGEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_RNGEN)) != RESET) + +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB1) peripheral clock. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_LPTIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RTCAPB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FMPI2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_RTCAPB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_RTCAPBEN)) +#define __HAL_RCC_LPTIM1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_LPTIM1EN)) +#define __HAL_RCC_FMPI2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_FMPI2C1EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_RTCAPB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) != RESET) +#define __HAL_RCC_LPTIM1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) != RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) + +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_RTCAPB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) == RESET) +#define __HAL_RCC_LPTIM1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) == RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_EXTIT_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +#define __HAL_RCC_EXTIT_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_EXTITEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) +#define __HAL_RCC_EXTIT_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) != RESET) + +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +#define __HAL_RCC_EXTIT_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x80601087U) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_RNGRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_RNGRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() +#define __HAL_RCC_AHB2_RELEASE_RESET() +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() +#define __HAL_RCC_AHB3_RELEASE_RESET() +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#if defined (STM32F410Rx) || defined (STM32F410Cx) +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0x31624A18U) +#endif /* STM32F410Rx || STM32F410Cx */ +#if defined (STM32F410Tx) +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0x31620A18U) +#endif /* STM32F410Tx */ +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_LPTIM1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_LPTIM1RST)) +#define __HAL_RCC_FMPI2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) + +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_LPTIM1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LPTIM1RST)) +#define __HAL_RCC_FMPI2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#if defined (STM32F410Rx) || defined (STM32F410Cx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x00155131U) +#endif /* STM32F410Rx || STM32F410Cx */ +#if defined (STM32F410Tx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x00055111U) +#endif /* STM32F410Tx */ +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_RNGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_RNGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_LPTIM1LPEN)) +#define __HAL_RCC_RTCAPB_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) + +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LPTIM1LPEN)) +#define __HAL_RCC_RTCAPB_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_EXTITLPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_EXTITLPEN)) +/** + * @} + */ + +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ +/*----------------------------------------------------------------------------*/ + +/*-------------------------------- STM32F411xx -------------------------------*/ +#if defined(STM32F411xE) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEX_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x0060109FU) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x00000080U) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0x10E2C80FU) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x00177931U) +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +/** + * @} + */ +#endif /* STM32F411xE */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F446xx -----------------------------*/ +#if defined(STM32F446xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSULPIEN)) +#define __HAL_RCC_BKPSRAM_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_BKPSRAMEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) != RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN))!= RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) == RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DCMI_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_DCMIEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) != RESET) +#define __HAL_RCC_DCMI_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) == RESET) + +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_QSPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_FMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FMCEN)) +#define __HAL_RCC_QSPI_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_QSPIEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) != RESET) +#define __HAL_RCC_QSPI_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) != RESET) + +#define __HAL_RCC_FMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) == RESET) +#define __HAL_RCC_QSPI_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPDIFRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPDIFRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPDIFRXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FMPI2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CEC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_SPDIFRX_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPDIFRXEN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_FMPI2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_FMPI2C1EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#define __HAL_RCC_CEC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_SPDIFRX_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPDIFRXEN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_CEC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_SPDIFRX_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPDIFRXEN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#define __HAL_RCC_CEC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SAI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SAI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +#define __HAL_RCC_SAI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI1EN)) +#define __HAL_RCC_SAI2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI2EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) +#define __HAL_RCC_SAI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) != RESET) +#define __HAL_RCC_SAI2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI2EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +#define __HAL_RCC_SAI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) == RESET) +#define __HAL_RCC_SAI2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI2EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x206010FFU) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x00000081U) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_DCMIRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_DCMIRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0x00000003U) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) + +#define __HAL_RCC_FMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FMCRST)) +#define __HAL_RCC_QSPI_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_QSPIRST)) + +#define __HAL_RCC_FMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FMCRST)) +#define __HAL_RCC_QSPI_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_QSPIRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0x3FFFC9FFU) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_SPDIFRX_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPDIFRXRST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_FMPI2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_CEC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_SPDIFRX_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPDIFRXRST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_FMPI2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_CEC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x00C77933U) +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SAI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI1RST)) +#define __HAL_RCC_SAI2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI2RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SAI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI1RST)) +#define __HAL_RCC_SAI2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI2RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_BKPSRAMLPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_BKPSRAMLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) + +#define __HAL_RCC_DCMI_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_DCMILPEN)) +#define __HAL_RCC_DCMI_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_DCMILPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_FMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_QSPILPEN)) + +#define __HAL_RCC_FMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_QSPILPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_SPDIFRX_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPDIFRXLPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_CEC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CECLPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_SPDIFRX_CLK_SLEEP_DISABLE()(RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPDIFRXLPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_DISABLE()(RCC->APB1LPENR &= ~(RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_CEC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CECLPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI1LPEN)) +#define __HAL_RCC_SAI2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI2LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()(RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()(RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI1LPEN)) +#define __HAL_RCC_SAI2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI2LPEN)) +/** + * @} + */ + +#endif /* STM32F446xx */ +/*----------------------------------------------------------------------------*/ + +/*-------STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx-------*/ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) + +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AES_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_AESEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_AESEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_AES_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_AESEN)) +#endif /* STM32F423xx */ + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AES_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_AESEN)) != RESET) +#define __HAL_RCC_AES_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_AESEN)) == RESET) +#endif /* STM32F423xx */ + +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_FSMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_QSPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FSMCEN)) +#define __HAL_RCC_QSPI_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_QSPIEN)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_FSMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) != RESET) +#define __HAL_RCC_QSPI_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) != RESET) + +#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) == RESET) +#define __HAL_RCC_QSPI_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) == RESET) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_FMPI2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_LPTIM1EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_RTCAPBEN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_FMPI2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_FMPI2C1EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN3EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +#define __HAL_RCC_UART7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART7EN)) +#define __HAL_RCC_UART8_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART8EN)) +#endif /* STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN))!= RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN3EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) +#define __HAL_RCC_UART7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) != RESET) +#define __HAL_RCC_UART8_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN3EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +#define __HAL_RCC_UART7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) == RESET) +#define __HAL_RCC_UART8_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_UART9EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_UART9EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_UART10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_UART10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_EXTIT_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_UART9EN)) +#define __HAL_RCC_UART10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_UART10EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_EXTIT_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_EXTITEN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI1EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DFSDM1EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DFSDM2EN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART9EN)) != RESET) +#define __HAL_RCC_UART10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART10EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_EXTIT_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM1EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM2EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART9EN)) == RESET) +#define __HAL_RCC_UART10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART10EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_EXTIT_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM1EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM2EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#if defined (STM32F412Zx) || defined(STM32F413xx) || defined (STM32F423xx) +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x006010FFU) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined (STM32F412Cx) +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x00601087U) +#endif /* STM32F412Cx */ +#if defined (STM32F412Vx) +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x0060109FU) +#endif /* STM32F412Vx */ +#if defined (STM32F412Rx) +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0x0060108FU) +#endif /* STM32F412Rx */ +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x000000D0U) +#define __HAL_RCC_AES_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_AESRST)) +#define __HAL_RCC_AES_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_AESRST)) +#else +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0x000000C0U) +#endif /* STM32F423xx */ +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) + +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0x00000003U) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) + +#define __HAL_RCC_FSMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FSMCRST)) +#define __HAL_RCC_QSPI_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_QSPIRST)) + +#define __HAL_RCC_FSMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FSMCRST)) +#define __HAL_RCC_QSPI_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_QSPIRST)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Cx) +#define __HAL_RCC_AHB3_FORCE_RESET() +#define __HAL_RCC_AHB3_RELEASE_RESET() + +#define __HAL_RCC_FSMC_FORCE_RESET() +#define __HAL_RCC_QSPI_FORCE_RESET() + +#define __HAL_RCC_FSMC_RELEASE_RESET() +#define __HAL_RCC_QSPI_RELEASE_RESET() +#endif /* STM32F412Cx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xFFFECBFFU) +#endif /* STM32F413xx || STM32F423xx */ +#if defined (STM32F412Zx) || defined (STM32F412Vx) || defined (STM32F412Rx) || defined (STM32F412Cx) +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0x17E6C9FFU) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_LPTIM1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_FMPI2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN3RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART8RST)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LPTIM1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_FMPI2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN3RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART8RST)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#if defined(STM32F413xx)|| defined(STM32F423xx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x035779F3U) +#endif /* STM32F413xx || STM32F423xx */ +#if defined (STM32F412Zx) || defined (STM32F412Vx) || defined (STM32F412Rx) || defined (STM32F412Cx) +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0x01177933U) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_UART9RST)) +#define __HAL_RCC_UART10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_UART10RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DFSDM1RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DFSDM2RST)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_UART9RST)) +#define __HAL_RCC_UART10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_UART10RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DFSDM1RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DFSDM2RST)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AES_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_AESLPEN)) +#define __HAL_RCC_AES_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_AESLPEN)) +#endif /* STM32F423xx */ + +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_FSMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FSMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_QSPILPEN)) + +#define __HAL_RCC_FSMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FSMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_QSPILPEN)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_LPTIM1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN3LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART8LPEN)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LPTIM1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_DISABLE()(RCC->APB1LPENR &= ~(RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN3LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART8LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_UART9LPEN)) +#define __HAL_RCC_UART10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_UART10LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_EXTITLPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_DFSDM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_DFSDM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_UART9LPEN)) +#define __HAL_RCC_UART10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_UART10LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_EXTITLPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_DFSDM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_DFSDM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------- PLL Configuration --------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the main PLL clock source, multiplication and division factors. + * @note This function must be used only when the main PLL is disabled. + * @param __RCC_PLLSource__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLSOURCE_HSI: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry + * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * @param __PLLN__ specifies the multiplication factor for PLL VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLN parameter correctly to ensure that the VCO + * output frequency is between 100 and 432 MHz. + * + * @param __PLLP__ specifies the division factor for main system clock (SYSCLK) + * This parameter must be a number in the range {2, 4, 6, or 8}. + * + * @param __PLLQ__ specifies the division factor for OTG FS, SDIO and RNG clocks + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * @note If the USB OTG FS is used in your application, you have to set the + * PLLQ parameter correctly to have 48 MHz clock for the USB. However, + * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work + * correctly. + * + * @param __PLLR__ PLL division factor for I2S, SAI, SYSTEM, SPDIFRX clocks. + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note This parameter is only available in STM32F446xx/STM32F469xx/STM32F479xx/ + STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/STM32F413xx/STM32F423xx devices. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__,__PLLR__) \ + (RCC->PLLCFGR = ((__RCC_PLLSource__) | (__PLLM__) | \ + ((__PLLN__) << RCC_PLLCFGR_PLLN_Pos) | \ + ((((__PLLP__) >> 1U) -1U) << RCC_PLLCFGR_PLLP_Pos) | \ + ((__PLLQ__) << RCC_PLLCFGR_PLLQ_Pos) | \ + ((__PLLR__) << RCC_PLLCFGR_PLLR_Pos))) +#else +/** @brief Macro to configure the main PLL clock source, multiplication and division factors. + * @note This function must be used only when the main PLL is disabled. + * @param __RCC_PLLSource__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLSOURCE_HSI: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry + * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * @param __PLLN__ specifies the multiplication factor for PLL VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432 + * Except for STM32F411xE devices where Min_Data = 192. + * @note You have to set the PLLN parameter correctly to ensure that the VCO + * output frequency is between 100 and 432 MHz, Except for STM32F411xE devices + * where frequency is between 192 and 432 MHz. + * @param __PLLP__ specifies the division factor for main system clock (SYSCLK) + * This parameter must be a number in the range {2, 4, 6, or 8}. + * + * @param __PLLQ__ specifies the division factor for OTG FS, SDIO and RNG clocks + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * @note If the USB OTG FS is used in your application, you have to set the + * PLLQ parameter correctly to have 48 MHz clock for the USB. However, + * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work + * correctly. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__) \ + (RCC->PLLCFGR = (0x20000000U | (__RCC_PLLSource__) | (__PLLM__)| \ + ((__PLLN__) << RCC_PLLCFGR_PLLN_Pos) | \ + ((((__PLLP__) >> 1U) -1U) << RCC_PLLCFGR_PLLP_Pos) | \ + ((__PLLQ__) << RCC_PLLCFGR_PLLQ_Pos))) +#endif /* STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------PLLI2S Configuration ---------------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + +/** @brief Macros to enable or disable the PLLI2S. + * @note The PLLI2S is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = ENABLE) +#define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = DISABLE) + +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || + STM32F412Rx || STM32F412Cx */ +#if defined(STM32F446xx) +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SM__ specifies the division factor for PLLI2S VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLI2SM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 1 MHz to limit PLLI2S jitter. + * + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLI2SP__ specifies division factor for SPDIFRX Clock. + * This parameter must be a number in the range {2, 4, 6, or 8}. + * @note the PLLI2SP parameter is only available with STM32F446xx Devices + * + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + * @param __PLLI2SQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SM__, __PLLI2SN__, __PLLI2SP__, __PLLI2SQ__, __PLLI2SR__) \ + (RCC->PLLI2SCFGR = ((__PLLI2SM__) |\ + ((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((((__PLLI2SP__) >> 1U) -1U) << RCC_PLLI2SCFGR_PLLI2SP_Pos) |\ + ((__PLLI2SQ__) << RCC_PLLI2SCFGR_PLLI2SQ_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#elif defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SM__ specifies the division factor for PLLI2S VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLI2SM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 1 MHz to limit PLLI2S jitter. + * + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + * @param __PLLI2SQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SM__, __PLLI2SN__, __PLLI2SQ__, __PLLI2SR__) \ + (RCC->PLLI2SCFGR = ((__PLLI2SM__) |\ + ((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((__PLLI2SQ__) << RCC_PLLI2SCFGR_PLLI2SQ_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#else +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SN__, __PLLI2SR__) \ + (RCC->PLLI2SCFGR = (((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#endif /* STM32F446xx */ + +#if defined(STM32F411xE) +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SM__ specifies the division factor for PLLI2S VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note The PLLI2SM parameter is only used with STM32F411xE/STM32F410xx Devices + * @note You have to set the PLLI2SM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLLI2S jitter. + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 192 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 192 and Max_Data = 432 MHz. + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + */ +#define __HAL_RCC_PLLI2S_I2SCLK_CONFIG(__PLLI2SM__, __PLLI2SN__, __PLLI2SR__) (RCC->PLLI2SCFGR = ((__PLLI2SM__) |\ + ((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#endif /* STM32F411xE */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro used by the SAI HAL driver to configure the PLLI2S clock multiplication and division factors. + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API) + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * @param __PLLI2SQ__ specifies the division factor for SAI1 clock. + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * @note the PLLI2SQ parameter is only available with STM32F427xx/437xx/429xx/439xx/469xx/479xx + * Devices and can be configured using the __HAL_RCC_PLLI2S_PLLSAICLK_CONFIG() macro + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + */ +#define __HAL_RCC_PLLI2S_SAICLK_CONFIG(__PLLI2SN__, __PLLI2SQ__, __PLLI2SR__) (RCC->PLLI2SCFGR = ((__PLLI2SN__) << 6U) |\ + ((__PLLI2SQ__) << 24U) |\ + ((__PLLI2SR__) << 28U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------ PLLSAI Configuration ------------------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macros to Enable or Disable the PLLISAI. + * @note The PLLSAI is only available with STM32F429x/439x Devices. + * @note The PLLSAI is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLLSAI_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLSAION_BB = ENABLE) +#define __HAL_RCC_PLLSAI_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLSAION_BB = DISABLE) + +#if defined(STM32F446xx) +/** @brief Macro to configure the PLLSAI clock multiplication and division factors. + * + * @param __PLLSAIM__ specifies the division factor for PLLSAI VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLSAIM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 1 MHz to limit PLLI2S jitter. + * @note The PLLSAIM parameter is only used with STM32F446xx Devices + * + * @param __PLLSAIN__ specifies the multiplication factor for PLLSAI VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLSAIN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLSAIP__ specifies division factor for OTG FS, SDIO and RNG clocks. + * This parameter must be a number in the range {2, 4, 6, or 8}. + * @note the PLLSAIP parameter is only available with STM32F446xx Devices + * + * @param __PLLSAIQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * + * @param __PLLSAIR__ specifies the division factor for LTDC clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note the PLLI2SR parameter is only available with STM32F427/437/429/439xx Devices + */ +#define __HAL_RCC_PLLSAI_CONFIG(__PLLSAIM__, __PLLSAIN__, __PLLSAIP__, __PLLSAIQ__, __PLLSAIR__) \ + (RCC->PLLSAICFGR = ((__PLLSAIM__) | \ + ((__PLLSAIN__) << RCC_PLLSAICFGR_PLLSAIN_Pos) | \ + ((((__PLLSAIP__) >> 1U) -1U) << RCC_PLLSAICFGR_PLLSAIP_Pos) | \ + ((__PLLSAIQ__) << RCC_PLLSAICFGR_PLLSAIQ_Pos))) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro to configure the PLLSAI clock multiplication and division factors. + * + * @param __PLLSAIN__ specifies the multiplication factor for PLLSAI VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLSAIN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLSAIP__ specifies division factor for SDIO and CLK48 clocks. + * This parameter must be a number in the range {2, 4, 6, or 8}. + * + * @param __PLLSAIQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * + * @param __PLLSAIR__ specifies the division factor for LTDC clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + */ +#define __HAL_RCC_PLLSAI_CONFIG(__PLLSAIN__, __PLLSAIP__, __PLLSAIQ__, __PLLSAIR__) \ + (RCC->PLLSAICFGR = (((__PLLSAIN__) << RCC_PLLSAICFGR_PLLSAIN_Pos) |\ + ((((__PLLSAIP__) >> 1U) -1U) << RCC_PLLSAICFGR_PLLSAIP_Pos) |\ + ((__PLLSAIQ__) << RCC_PLLSAICFGR_PLLSAIQ_Pos) |\ + ((__PLLSAIR__) << RCC_PLLSAICFGR_PLLSAIR_Pos))) +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) +/** @brief Macro to configure the PLLSAI clock multiplication and division factors. + * + * @param __PLLSAIN__ specifies the multiplication factor for PLLSAI VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLSAIN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLSAIQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * + * @param __PLLSAIR__ specifies the division factor for LTDC clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note the PLLI2SR parameter is only available with STM32F427/437/429/439xx Devices + */ +#define __HAL_RCC_PLLSAI_CONFIG(__PLLSAIN__, __PLLSAIQ__, __PLLSAIR__) \ + (RCC->PLLSAICFGR = (((__PLLSAIN__) << RCC_PLLSAICFGR_PLLSAIN_Pos) | \ + ((__PLLSAIQ__) << RCC_PLLSAICFGR_PLLSAIQ_Pos) | \ + ((__PLLSAIR__) << RCC_PLLSAICFGR_PLLSAIR_Pos))) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------- PLLSAI/PLLI2S Dividers Configuration -------------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the SAI clock Divider coming from PLLI2S. + * @note This function must be called before enabling the PLLI2S. + * @param __PLLI2SDivR__ specifies the PLLI2S division factor for SAI1 clock. + * This parameter must be a number between 1 and 32. + * SAI1 clock frequency = f(PLLI2SR) / __PLLI2SDivR__ + */ +#define __HAL_RCC_PLLI2S_PLLSAICLKDIVR_CONFIG(__PLLI2SDivR__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVR, (__PLLI2SDivR__)-1U)) + +/** @brief Macro to configure the SAI clock Divider coming from PLL. + * @param __PLLDivR__ specifies the PLL division factor for SAI1 clock. + * This parameter must be a number between 1 and 32. + * SAI1 clock frequency = f(PLLR) / __PLLDivR__ + */ +#define __HAL_RCC_PLL_PLLSAICLKDIVR_CONFIG(__PLLDivR__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLDIVR, ((__PLLDivR__)-1U)<<8U)) +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro to configure the SAI clock Divider coming from PLLI2S. + * @note This function must be called before enabling the PLLI2S. + * @param __PLLI2SDivQ__ specifies the PLLI2S division factor for SAI1 clock. + * This parameter must be a number between 1 and 32. + * SAI1 clock frequency = f(PLLI2SQ) / __PLLI2SDivQ__ + */ +#define __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(__PLLI2SDivQ__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVQ, (__PLLI2SDivQ__)-1U)) + +/** @brief Macro to configure the SAI clock Divider coming from PLLSAI. + * @note This function must be called before enabling the PLLSAI. + * @param __PLLSAIDivQ__ specifies the PLLSAI division factor for SAI1 clock . + * This parameter must be a number between Min_Data = 1 and Max_Data = 32. + * SAI1 clock frequency = f(PLLSAIQ) / __PLLSAIDivQ__ + */ +#define __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(__PLLSAIDivQ__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVQ, ((__PLLSAIDivQ__)-1U)<<8U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro to configure the LTDC clock Divider coming from PLLSAI. + * + * @note The LTDC peripheral is only available with STM32F427/437/429/439/469/479xx Devices. + * @note This function must be called before enabling the PLLSAI. + * @param __PLLSAIDivR__ specifies the PLLSAI division factor for LTDC clock . + * This parameter must be a number between Min_Data = 2 and Max_Data = 16. + * LTDC clock frequency = f(PLLSAIR) / __PLLSAIDivR__ + */ +#define __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(__PLLSAIDivR__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR, (__PLLSAIDivR__))) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------- Peripheral Clock selection -----------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F469xx) ||\ + defined(STM32F479xx) +/** @brief Macro to configure the I2S clock source (I2SCLK). + * @note This function must be called before enabling the I2S APB clock. + * @param __SOURCE__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SCLKSOURCE_PLLI2S: PLLI2S clock used as I2S clock source. + * @arg RCC_I2SCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin + * used as I2S clock source. + */ +#define __HAL_RCC_I2S_CONFIG(__SOURCE__) (MODIFY_REG(RCC->CFGR, RCC_CFGR_I2SSRC, (__SOURCE__))) + + +/** @brief Macro to get the I2S clock source (I2SCLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2SCLKSOURCE_PLLI2S: PLLI2S clock used as I2S clock source. + * @arg @ref RCC_I2SCLKSOURCE_EXT External clock mapped on the I2S_CKIN pin + * used as I2S clock source + */ +#define __HAL_RCC_GET_I2S_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_I2SSRC))) +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + +/** @brief Macro to configure SAI1BlockA clock source selection. + * @note The SAI peripheral is only available with STM32F427/437/429/439/469/479xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block A clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIACLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used + * as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used + * as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_Ext: External clock mapped on the I2S_CKIN pin + * used as SAI1 Block A clock. + */ +#define __HAL_RCC_SAI_BLOCKACLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1ASRC, (__SOURCE__))) + +/** @brief Macro to configure SAI1BlockB clock source selection. + * @note The SAI peripheral is only available with STM32F427/437/429/439/469/479xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block B clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIBCLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used + * as SAI1 Block B clock. + * @arg RCC_SAIBCLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used + * as SAI1 Block B clock. + * @arg RCC_SAIBCLKSOURCE_Ext: External clock mapped on the I2S_CKIN pin + * used as SAI1 Block B clock. + */ +#define __HAL_RCC_SAI_BLOCKBCLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1BSRC, (__SOURCE__))) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F446xx) +/** @brief Macro to configure SAI1 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @note This function must be called before enabling PLL, PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI1 clock source. + * This parameter can be one of the following values: + * @arg RCC_SAI1CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 clock. + */ +#define __HAL_RCC_SAI1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1SRC, (__SOURCE__))) + +/** @brief Macro to Get SAI1 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAI1CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 clock. + */ +#define __HAL_RCC_GET_SAI1_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI1SRC)) + +/** @brief Macro to configure SAI2 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @note This function must be called before enabling PLL, PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI2 clock source. + * This parameter can be one of the following values: + * @arg RCC_SAI2CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL Source clock used as SAI2 clock. + */ +#define __HAL_RCC_SAI2_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI2SRC, (__SOURCE__))) + +/** @brief Macro to Get SAI2 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAI2CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL Source clock used as SAI2 clock. + */ +#define __HAL_RCC_GET_SAI2_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI2SRC)) + +/** @brief Macro to configure I2S APB1 clock source selection. + * @note This function must be called before enabling PLL, PLLI2S and the I2S clock. + * @param __SOURCE__ specifies the I2S APB1 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB1 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB1_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC)) + +/** @brief Macro to configure I2S APB2 clock source selection. + * @note This function must be called before enabling PLL, PLLI2S and the I2S clock. + * @param __SOURCE__ specifies the SAI Block A clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB2_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB2 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB2_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC)) + +/** @brief Macro to configure the CEC clock. + * @param __SOURCE__ specifies the CEC clock source. + * This parameter can be one of the following values: + * @arg RCC_CECCLKSOURCE_HSI: HSI selected as CEC clock + * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock + */ +#define __HAL_RCC_CEC_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CECSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CEC clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CECCLKSOURCE_HSI488: HSI selected as CEC clock + * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock + */ +#define __HAL_RCC_GET_CEC_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_CECSEL)) + +/** @brief Macro to configure the FMPI2C1 clock. + * @param __SOURCE__ specifies the FMPI2C1 clock source. + * This parameter can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_FMPI2C1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the FMPI2C1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_GET_FMPI2C1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL)) + +/** @brief Macro to configure the CLK48 clock. + * @param __SOURCE__ specifies the CLK48 clock source. + * This parameter can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_CLK48_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CLK48 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_GET_CLK48_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL)) + +/** @brief Macro to configure the SDIO clock. + * @param __SOURCE__ specifies the SDIO clock source. + * This parameter can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_SDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SDIO clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_GET_SDIO_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL)) + +/** @brief Macro to configure the SPDIFRX clock. + * @param __SOURCE__ specifies the SPDIFRX clock source. + * This parameter can be one of the following values: + * @arg RCC_SPDIFRXCLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SPDIFRX clock. + * @arg RCC_SPDIFRXCLKSOURCE_PLLI2SP: PLLI2S VCO Output divided by PLLI2SP used as SPDIFRX clock. + */ +#define __HAL_RCC_SPDIFRX_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SPDIFRXSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SPDIFRX clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SPDIFRXCLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SPDIFRX clock. + * @arg RCC_SPDIFRXCLKSOURCE_PLLI2SP: PLLI2S VCO Output divided by PLLI2SP used as SPDIFRX clock. + */ +#define __HAL_RCC_GET_SPDIFRX_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_SPDIFRXSEL)) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) + +/** @brief Macro to configure the CLK48 clock. + * @param __SOURCE__ specifies the CLK48 clock source. + * This parameter can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_CLK48_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CLK48 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_GET_CLK48_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL)) + +/** @brief Macro to configure the SDIO clock. + * @param __SOURCE__ specifies the SDIO clock source. + * This parameter can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_SDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SDIOSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SDIO clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_GET_SDIO_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SDIOSEL)) + +/** @brief Macro to configure the DSI clock. + * @param __SOURCE__ specifies the DSI clock source. + * This parameter can be one of the following values: + * @arg RCC_DSICLKSOURCE_PLLR: PLLR output used as DSI clock. + * @arg RCC_DSICLKSOURCE_DSIPHY: DSI-PHY output used as DSI clock. + */ +#define __HAL_RCC_DSI_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_DSISEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the DSI clock. + * @retval The clock source can be one of the following values: + * @arg RCC_DSICLKSOURCE_PLLR: PLLR output used as DSI clock. + * @arg RCC_DSICLKSOURCE_DSIPHY: DSI-PHY output used as DSI clock. + */ +#define __HAL_RCC_GET_DSI_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_DSISEL)) + +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the DFSDM1 clock. + * @param __DFSDM1_CLKSOURCE__ specifies the DFSDM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM1CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM1CLKSOURCE_SYSCLK: System clock used as kernel clock. + * @retval None + */ +#define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1_CLKSOURCE__) MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL, (__DFSDM1_CLKSOURCE__)) + +/** @brief Macro to get the DFSDM1 clock source. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM1CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM1CLKSOURCE_SYSCLK: System clock used as kernel clock. + */ +#define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL))) + +/** @brief Macro to configure DFSDM1 Audio clock source selection. + * @note This configuration is only available with STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/ + STM32F413xx/STM32F423xx Devices. + * @param __SOURCE__ specifies the DFSDM1 Audio clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_DFSDM1AUDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1ASEL, (__SOURCE__))) + +/** @brief Macro to Get DFSDM1 Audio clock source selection. + * @note This configuration is only available with STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/ + STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_GET_DFSDM1AUDIO_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1ASEL)) + +#if defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the DFSDM2 clock. + * @param __DFSDM2_CLKSOURCE__ specifies the DFSDM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM2CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM2CLKSOURCE_SYSCLK: System clock used as kernel clock. + * @retval None + */ +#define __HAL_RCC_DFSDM2_CONFIG(__DFSDM2_CLKSOURCE__) MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL, (__DFSDM2_CLKSOURCE__)) + +/** @brief Macro to get the DFSDM2 clock source. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM2CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM2CLKSOURCE_SYSCLK: System clock used as kernel clock. + */ +#define __HAL_RCC_GET_DFSDM2_SOURCE() ((uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL))) + +/** @brief Macro to configure DFSDM1 Audio clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @param __SOURCE__ specifies the DFSDM2 Audio clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_DFSDM2AUDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM2ASEL, (__SOURCE__))) + +/** @brief Macro to Get DFSDM2 Audio clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_GET_DFSDM2AUDIO_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM2ASEL)) + +/** @brief Macro to configure SAI1BlockA clock source selection. + * @note The SAI peripheral is only available with STM32F413xx/STM32F423xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block A clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIACLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_EXT: External clock mapped on the I2S_CKIN pinused as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_SAI_BLOCKACLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1ASRC, (__SOURCE__))) + +/** @brief Macro to Get SAI1 BlockA clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAIACLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_EXT: External clock mapped on the I2S_CKIN pinused as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_SAI_BLOCKA_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI1ASRC)) + +/** @brief Macro to configure SAI1 BlockB clock source selection. + * @note The SAI peripheral is only available with STM32F413xx/STM32F423xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block B clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIBCLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_SAI_BLOCKBCLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1BSRC, (__SOURCE__))) + +/** @brief Macro to Get SAI1 BlockB clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAIBCLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_SAI_BLOCKB_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI1BSRC)) + +/** @brief Macro to configure the LPTIM1 clock. + * @param __SOURCE__ specifies the LPTIM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_LPTIM1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the LPTIM1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_GET_LPTIM1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL)) +#endif /* STM32F413xx || STM32F423xx */ + +/** @brief Macro to configure I2S APB1 clock source selection. + * @param __SOURCE__ specifies the I2S APB1 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB1 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB1_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC)) + +/** @brief Macro to configure I2S APB2 clock source selection. + * @param __SOURCE__ specifies the I2S APB2 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB2_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB2 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB2_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC)) + +/** @brief Macro to configure the PLL I2S clock source (PLLI2SCLK). + * @note This macro must be called before enabling the I2S APB clock. + * @param __SOURCE__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLI2SCLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + * @arg RCC_PLLI2SCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin + * used as I2S clock source. + */ +#define __HAL_RCC_PLL_I2S_CONFIG(__SOURCE__) (*(__IO uint32_t *) RCC_PLLI2SCFGR_PLLI2SSRC_BB = (__SOURCE__)) + +/** @brief Macro to configure the FMPI2C1 clock. + * @param __SOURCE__ specifies the FMPI2C1 clock source. + * This parameter can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_FMPI2C1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the FMPI2C1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_GET_FMPI2C1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL)) + +/** @brief Macro to configure the CLK48 clock. + * @param __SOURCE__ specifies the CLK48 clock source. + * This parameter can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLI2SQ: PLLI2S VCO Output divided by PLLI2SQ used as CLK48 clock. + */ +#define __HAL_RCC_CLK48_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CLK48 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLI2SQ: PLLI2S VCO Output divided by PLLI2SQ used as CLK48 clock + */ +#define __HAL_RCC_GET_CLK48_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL)) + +/** @brief Macro to configure the SDIO clock. + * @param __SOURCE__ specifies the SDIO clock source. + * This parameter can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_SDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SDIO clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_GET_SDIO_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL)) + +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @brief Macro to configure I2S clock source selection. + * @param __SOURCE__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPBCLKSOURCE_PLLR: PLL VCO output clock divided by PLLR. + * @arg RCC_I2SAPBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPBCLKSOURCE_PLLSRC: HSI/HSE depends on PLLSRC. + */ +#define __HAL_RCC_I2S_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2SSRC, (__SOURCE__))) + +/** @brief Macro to Get I2S clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPBCLKSOURCE_PLLR: PLL VCO output clock divided by PLLR. + * @arg RCC_I2SAPBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPBCLKSOURCE_PLLSRC: HSI/HSE depends on PLLSRC. + */ +#define __HAL_RCC_GET_I2S_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2SSRC)) + +/** @brief Macro to configure the FMPI2C1 clock. + * @param __SOURCE__ specifies the FMPI2C1 clock source. + * This parameter can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_FMPI2C1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the FMPI2C1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_GET_FMPI2C1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL)) + +/** @brief Macro to configure the LPTIM1 clock. + * @param __SOURCE__ specifies the LPTIM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK1 selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_LPTIM1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the LPTIM1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK1 selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_GET_LPTIM1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the Timers clocks prescalers + * @note This feature is only available with STM32F429x/439x Devices. + * @param __PRESC__ specifies the Timers clocks prescalers selection + * This parameter can be one of the following values: + * @arg RCC_TIMPRES_DESACTIVATED: The Timers kernels clocks prescaler is + * equal to HPRE if PPREx is corresponding to division by 1 or 2, + * else it is equal to [(HPRE * PPREx) / 2] if PPREx is corresponding to + * division by 4 or more. + * @arg RCC_TIMPRES_ACTIVATED: The Timers kernels clocks prescaler is + * equal to HPRE if PPREx is corresponding to division by 1, 2 or 4, + * else it is equal to [(HPRE * PPREx) / 4] if PPREx is corresponding + * to division by 8 or more. + */ +#define __HAL_RCC_TIMCLKPRESCALER(__PRESC__) (*(__IO uint32_t *) RCC_DCKCFGR_TIMPRE_BB = (__PRESC__)) + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx) || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE ||\ + STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx ||\ + STM32F423xx */ + +/*----------------------------------------------------------------------------*/ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Enable PLLSAI_RDY interrupt. + */ +#define __HAL_RCC_PLLSAI_ENABLE_IT() (RCC->CIR |= (RCC_CIR_PLLSAIRDYIE)) + +/** @brief Disable PLLSAI_RDY interrupt. + */ +#define __HAL_RCC_PLLSAI_DISABLE_IT() (RCC->CIR &= ~(RCC_CIR_PLLSAIRDYIE)) + +/** @brief Clear the PLLSAI RDY interrupt pending bits. + */ +#define __HAL_RCC_PLLSAI_CLEAR_IT() (RCC->CIR |= (RCC_CIR_PLLSAIRDYF)) + +/** @brief Check the PLLSAI RDY interrupt has occurred or not. + * @retval The new state (TRUE or FALSE). + */ +#define __HAL_RCC_PLLSAI_GET_IT() ((RCC->CIR & (RCC_CIR_PLLSAIRDYIE)) == (RCC_CIR_PLLSAIRDYIE)) + +/** @brief Check PLLSAI RDY flag is set or not. + * @retval The new state (TRUE or FALSE). + */ +#define __HAL_RCC_PLLSAI_GET_FLAG() ((RCC->CR & (RCC_CR_PLLSAIRDY)) == (RCC_CR_PLLSAIRDY)) + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @brief Macros to enable or disable the RCC MCO1 feature. + */ +#define __HAL_RCC_MCO1_ENABLE() (*(__IO uint32_t *) RCC_CFGR_MCO1EN_BB = ENABLE) +#define __HAL_RCC_MCO1_DISABLE() (*(__IO uint32_t *) RCC_CFGR_MCO1EN_BB = DISABLE) + +/** @brief Macros to enable or disable the RCC MCO2 feature. + */ +#define __HAL_RCC_MCO2_ENABLE() (*(__IO uint32_t *) RCC_CFGR_MCO2EN_BB = ENABLE) +#define __HAL_RCC_MCO2_DISABLE() (*(__IO uint32_t *) RCC_CFGR_MCO2EN_BB = DISABLE) + +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCCEx_Exported_Functions + * @{ + */ + +/** @addtogroup RCCEx_Exported_Functions_Group1 + * @{ + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); + +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk); + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +void HAL_RCCEx_SelectLSEMode(uint8_t Mode); +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +#if defined(RCC_PLLI2S_SUPPORT) +HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit); +HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void); +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI(RCC_PLLSAIInitTypeDef *PLLSAIInit); +HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI(void); +#endif /* RCC_PLLSAI_SUPPORT */ +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Constants RCCEx Private Constants + * @{ + */ + +/** @defgroup RCCEx_BitAddress_AliasRegion RCC BitAddress AliasRegion + * @brief RCC registers bit address in the alias region + * @{ + */ +/* --- CR Register ---*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* Alias word address of PLLSAION bit */ +#define RCC_PLLSAION_BIT_NUMBER 0x1CU +#define RCC_CR_PLLSAION_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_PLLSAION_BIT_NUMBER * 4U)) + +#define PLLSAI_TIMEOUT_VALUE 2U /* Timeout value fixed to 2 ms */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/* Alias word address of PLLI2SON bit */ +#define RCC_PLLI2SON_BIT_NUMBER 0x1AU +#define RCC_CR_PLLI2SON_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_PLLI2SON_BIT_NUMBER * 4U)) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || + STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/* --- DCKCFGR Register ---*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\ + defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/* Alias word address of TIMPRE bit */ +#define RCC_DCKCFGR_OFFSET (RCC_OFFSET + 0x8CU) +#define RCC_TIMPRE_BIT_NUMBER 0x18U +#define RCC_DCKCFGR_TIMPRE_BB (PERIPH_BB_BASE + (RCC_DCKCFGR_OFFSET * 32U) + (RCC_TIMPRE_BIT_NUMBER * 4U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F410xx || STM32F401xC ||\ + STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/* --- CFGR Register ---*/ +#define RCC_CFGR_OFFSET (RCC_OFFSET + 0x08U) +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) +/* Alias word address of I2SSRC bit */ +#define RCC_I2SSRC_BIT_NUMBER 0x17U +#define RCC_CFGR_I2SSRC_BB (PERIPH_BB_BASE + (RCC_CFGR_OFFSET * 32U) + (RCC_I2SSRC_BIT_NUMBER * 4U)) + +#define PLLI2S_TIMEOUT_VALUE 2U /* Timeout value fixed to 2 ms */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/* --- PLLI2SCFGR Register ---*/ +#define RCC_PLLI2SCFGR_OFFSET (RCC_OFFSET + 0x84U) +/* Alias word address of PLLI2SSRC bit */ +#define RCC_PLLI2SSRC_BIT_NUMBER 0x16U +#define RCC_PLLI2SCFGR_PLLI2SSRC_BB (PERIPH_BB_BASE\ + + (RCC_PLLI2SCFGR_OFFSET * 32U) + (RCC_PLLI2SSRC_BIT_NUMBER * 4U)) + +#define PLLI2S_TIMEOUT_VALUE 2U /* Timeout value fixed to 2 ms */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx | STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/* Alias word address of MCO1EN bit */ +#define RCC_MCO1EN_BIT_NUMBER 0x8U +#define RCC_CFGR_MCO1EN_BB (PERIPH_BB_BASE + (RCC_CFGR_OFFSET * 32U) + (RCC_MCO1EN_BIT_NUMBER * 4U)) + +/* Alias word address of MCO2EN bit */ +#define RCC_MCO2EN_BIT_NUMBER 0x9U +#define RCC_CFGR_MCO2EN_BB (PERIPH_BB_BASE + (RCC_CFGR_OFFSET * 32U) + (RCC_MCO2EN_BIT_NUMBER * 4U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#define PLL_TIMEOUT_VALUE 2U /* 2 ms */ +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Macros RCCEx Private Macros + * @{ + */ +/** @defgroup RCCEx_IS_RCC_Definitions RCC Private macros to check input parameters + * @{ + */ +#define IS_RCC_PLLN_VALUE(VALUE) ((50U <= (VALUE)) && ((VALUE) <= 432U)) +#define IS_RCC_PLLI2SN_VALUE(VALUE) ((50U <= (VALUE)) && ((VALUE) <= 432U)) + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x0000007FU)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x00000007U)) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x0000000FU)) +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x0000001FU)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F446xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x00000FFFU)) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x000001FFU)) +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x000003FFU)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x00007FFFU)) +#endif /* STM32F413xx || STM32F423xx */ + +#define IS_RCC_PLLI2SR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_RCC_PLLI2SQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_PLLSAIN_VALUE(VALUE) ((50U <= (VALUE)) && ((VALUE) <= 432U)) + +#define IS_RCC_PLLSAIQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_PLLSAIR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLSAI_DIVQ_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#define IS_RCC_PLLI2S_DIVQ_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#define IS_RCC_PLLSAI_DIVR_VALUE(VALUE) (((VALUE) == RCC_PLLSAIDIVR_2) ||\ + ((VALUE) == RCC_PLLSAIDIVR_4) ||\ + ((VALUE) == RCC_PLLSAIDIVR_8) ||\ + ((VALUE) == RCC_PLLSAIDIVR_16)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_PLLI2SM_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 63U)) + +#define IS_RCC_LSE_MODE(MODE) (((MODE) == RCC_LSE_LOWPOWER_MODE) ||\ + ((MODE) == RCC_LSE_HIGHDRIVE_MODE)) +#endif /* STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_LSE_MODE(MODE) (((MODE) == RCC_LSE_LOWPOWER_MODE) ||\ + ((MODE) == RCC_LSE_HIGHDRIVE_MODE)) + +#define IS_RCC_FMPI2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_FMPI2C1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_SYSCLK) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_HSI)) + +#define IS_RCC_LPTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPTIM1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_HSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE)) + +#define IS_RCC_I2SAPBCLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPBCLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPBCLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPBCLKSOURCE_PLLSRC)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F446xx) +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLI2SP_VALUE(VALUE) (((VALUE) == RCC_PLLI2SP_DIV2) ||\ + ((VALUE) == RCC_PLLI2SP_DIV4) ||\ + ((VALUE) == RCC_PLLI2SP_DIV6) ||\ + ((VALUE) == RCC_PLLI2SP_DIV8)) + +#define IS_RCC_PLLSAIM_VALUE(VALUE) ((VALUE) <= 63U) + +#define IS_RCC_PLLSAIP_VALUE(VALUE) (((VALUE) == RCC_PLLSAIP_DIV2) ||\ + ((VALUE) == RCC_PLLSAIP_DIV4) ||\ + ((VALUE) == RCC_PLLSAIP_DIV6) ||\ + ((VALUE) == RCC_PLLSAIP_DIV8)) + +#define IS_RCC_SAI1CLKSOURCE(SOURCE) (((SOURCE) == RCC_SAI1CLKSOURCE_PLLSAI) ||\ + ((SOURCE) == RCC_SAI1CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_SAI1CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAI1CLKSOURCE_EXT)) + +#define IS_RCC_SAI2CLKSOURCE(SOURCE) (((SOURCE) == RCC_SAI2CLKSOURCE_PLLSAI) ||\ + ((SOURCE) == RCC_SAI2CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_SAI2CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAI2CLKSOURCE_PLLSRC)) + +#define IS_RCC_I2SAPB1CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLSRC)) + +#define IS_RCC_I2SAPB2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLSRC)) + +#define IS_RCC_FMPI2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_FMPI2C1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_SYSCLK) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_HSI)) + +#define IS_RCC_CECCLKSOURCE(SOURCE) (((SOURCE) == RCC_CECCLKSOURCE_HSI) ||\ + ((SOURCE) == RCC_CECCLKSOURCE_LSE)) + +#define IS_RCC_CLK48CLKSOURCE(SOURCE) (((SOURCE) == RCC_CLK48CLKSOURCE_PLLQ) ||\ + ((SOURCE) == RCC_CLK48CLKSOURCE_PLLSAIP)) + +#define IS_RCC_SDIOCLKSOURCE(SOURCE) (((SOURCE) == RCC_SDIOCLKSOURCE_CLK48) ||\ + ((SOURCE) == RCC_SDIOCLKSOURCE_SYSCLK)) + +#define IS_RCC_SPDIFRXCLKSOURCE(SOURCE) (((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLLI2SP)) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLSAIP_VALUE(VALUE) (((VALUE) == RCC_PLLSAIP_DIV2) ||\ + ((VALUE) == RCC_PLLSAIP_DIV4) ||\ + ((VALUE) == RCC_PLLSAIP_DIV6) ||\ + ((VALUE) == RCC_PLLSAIP_DIV8)) + +#define IS_RCC_CLK48CLKSOURCE(SOURCE) (((SOURCE) == RCC_CLK48CLKSOURCE_PLLQ) ||\ + ((SOURCE) == RCC_CLK48CLKSOURCE_PLLSAIP)) + +#define IS_RCC_SDIOCLKSOURCE(SOURCE) (((SOURCE) == RCC_SDIOCLKSOURCE_CLK48) ||\ + ((SOURCE) == RCC_SDIOCLKSOURCE_SYSCLK)) + +#define IS_RCC_DSIBYTELANECLKSOURCE(SOURCE) (((SOURCE) == RCC_DSICLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_DSICLKSOURCE_DSIPHY)) + +#define IS_RCC_LSE_MODE(MODE) (((MODE) == RCC_LSE_LOWPOWER_MODE) ||\ + ((MODE) == RCC_LSE_HIGHDRIVE_MODE)) +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_PLLI2SQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLI2SCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLI2SCLKSOURCE_PLLSRC) || \ + ((__SOURCE__) == RCC_PLLI2SCLKSOURCE_EXT)) + +#define IS_RCC_I2SAPB1CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLSRC)) + +#define IS_RCC_I2SAPB2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLSRC)) + +#define IS_RCC_FMPI2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_FMPI2C1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_SYSCLK) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_HSI)) + +#define IS_RCC_CLK48CLKSOURCE(SOURCE) (((SOURCE) == RCC_CLK48CLKSOURCE_PLLQ) ||\ + ((SOURCE) == RCC_CLK48CLKSOURCE_PLLI2SQ)) + +#define IS_RCC_SDIOCLKSOURCE(SOURCE) (((SOURCE) == RCC_SDIOCLKSOURCE_CLK48) ||\ + ((SOURCE) == RCC_SDIOCLKSOURCE_SYSCLK)) + +#define IS_RCC_DFSDM1CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM1CLKSOURCE_PCLK2) || \ + ((__SOURCE__) == RCC_DFSDM1CLKSOURCE_SYSCLK)) + +#define IS_RCC_DFSDM1AUDIOCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_I2S1) || \ + ((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_I2S2)) + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_DFSDM2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM2CLKSOURCE_PCLK2) || \ + ((__SOURCE__) == RCC_DFSDM2CLKSOURCE_SYSCLK)) + +#define IS_RCC_DFSDM2AUDIOCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM2AUDIOCLKSOURCE_I2S1) || \ + ((__SOURCE__) == RCC_DFSDM2AUDIOCLKSOURCE_I2S2)) + +#define IS_RCC_LPTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPTIM1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_HSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE)) + +#define IS_RCC_SAIACLKSOURCE(SOURCE) (((SOURCE) == RCC_SAIACLKSOURCE_PLLI2SR) ||\ + ((SOURCE) == RCC_SAIACLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_SAIACLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAIACLKSOURCE_PLLSRC)) + +#define IS_RCC_SAIBCLKSOURCE(SOURCE) (((SOURCE) == RCC_SAIBCLKSOURCE_PLLI2SR) ||\ + ((SOURCE) == RCC_SAIBCLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_SAIBCLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAIBCLKSOURCE_PLLSRC)) + +#define IS_RCC_PLL_DIVR_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#define IS_RCC_PLLI2S_DIVR_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#endif /* STM32F413xx || STM32F423xx */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + +#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2SOURCE_SYSCLK) || ((SOURCE) == RCC_MCO2SOURCE_PLLI2SCLK)|| \ + ((SOURCE) == RCC_MCO2SOURCE_HSE) || ((SOURCE) == RCC_MCO2SOURCE_PLLCLK)) + +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || \ + STM32F412Rx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2SOURCE_SYSCLK) || ((SOURCE) == RCC_MCO2SOURCE_I2SCLK)|| \ + ((SOURCE) == RCC_MCO2SOURCE_HSE) || ((SOURCE) == RCC_MCO2SOURCE_PLLCLK)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_RCC_EX_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h new file mode 100644 index 00000000..53c9bf66 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h @@ -0,0 +1,2157 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim.h + * @author MCD Application Team + * @brief Header file of TIM HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_HAL_TIM_H +#define STM32F4xx_HAL_TIM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIM + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIM_Exported_Types TIM Exported Types + * @{ + */ + +/** + * @brief TIM Time base Configuration Structure definition + */ +typedef struct +{ + uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint32_t Period; /*!< Specifies the period value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + + uint32_t ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_ClockDivision */ + + uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + GP timers: this parameter must be a number between Min_Data = 0x00 and + Max_Data = 0xFF. + Advanced timers: this parameter must be a number between Min_Data = 0x0000 and + Max_Data = 0xFFFF. */ + + uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload. + This parameter can be a value of @ref TIM_AutoReloadPreload */ +} TIM_Base_InitTypeDef; + +/** + * @brief TIM Output Compare Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCFastMode; /*!< Specifies the Fast mode state. + This parameter can be a value of @ref TIM_Output_Fast_State + @note This parameter is valid only in PWM1 and PWM2 mode. */ + + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ +} TIM_OC_InitTypeDef; + +/** + * @brief TIM One Pulse Mode Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_OnePulse_InitTypeDef; + +/** + * @brief TIM Input Capture Configuration Structure definition + */ +typedef struct +{ + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_IC_InitTypeDef; + +/** + * @brief TIM Encoder Configuration Structure definition + */ +typedef struct +{ + uint32_t EncoderMode; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Mode */ + + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ + + uint32_t IC1Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ + + uint32_t IC2Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC2Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_Encoder_InitTypeDef; + +/** + * @brief Clock Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClockSource; /*!< TIM clock sources + This parameter can be a value of @ref TIM_Clock_Source */ + uint32_t ClockPolarity; /*!< TIM clock polarity + This parameter can be a value of @ref TIM_Clock_Polarity */ + uint32_t ClockPrescaler; /*!< TIM clock prescaler + This parameter can be a value of @ref TIM_Clock_Prescaler */ + uint32_t ClockFilter; /*!< TIM clock filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_ClockConfigTypeDef; + +/** + * @brief TIM Clear Input Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClearInputState; /*!< TIM clear Input state + This parameter can be ENABLE or DISABLE */ + uint32_t ClearInputSource; /*!< TIM clear Input sources + This parameter can be a value of @ref TIM_ClearInput_Source */ + uint32_t ClearInputPolarity; /*!< TIM Clear Input polarity + This parameter can be a value of @ref TIM_ClearInput_Polarity */ + uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler + This parameter must be 0: When OCRef clear feature is used with ETR source, + ETR prescaler must be off */ + uint32_t ClearInputFilter; /*!< TIM Clear Input filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_ClearInputConfigTypeDef; + +/** + * @brief TIM Master configuration Structure definition + */ +typedef struct +{ + uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection + This parameter can be a value of @ref TIM_Master_Mode_Selection */ + uint32_t MasterSlaveMode; /*!< Master/slave mode selection + This parameter can be a value of @ref TIM_Master_Slave_Mode + @note When the Master/slave mode is enabled, the effect of + an event on the trigger input (TRGI) is delayed to allow a + perfect synchronization between the current timer and its + slaves (through TRGO). It is not mandatory in case of timer + synchronization mode. */ +} TIM_MasterConfigTypeDef; + +/** + * @brief TIM Slave configuration Structure definition + */ +typedef struct +{ + uint32_t SlaveMode; /*!< Slave mode selection + This parameter can be a value of @ref TIM_Slave_Mode */ + uint32_t InputTrigger; /*!< Input Trigger source + This parameter can be a value of @ref TIM_Trigger_Selection */ + uint32_t TriggerPolarity; /*!< Input Trigger polarity + This parameter can be a value of @ref TIM_Trigger_Polarity */ + uint32_t TriggerPrescaler; /*!< Input trigger prescaler + This parameter can be a value of @ref TIM_Trigger_Prescaler */ + uint32_t TriggerFilter; /*!< Input trigger filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + +} TIM_SlaveConfigTypeDef; + +/** + * @brief TIM Break input(s) and Dead time configuration Structure definition + * @note 2 break inputs can be configured (BKIN and BKIN2) with configurable + * filter and polarity. + */ +typedef struct +{ + uint32_t OffStateRunMode; /*!< TIM off state in run mode, This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ + + uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode, This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ + + uint32_t LockLevel; /*!< TIM Lock level, This parameter can be a value of @ref TIM_Lock_level */ + + uint32_t DeadTime; /*!< TIM dead Time, This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + + uint32_t BreakState; /*!< TIM Break State, This parameter can be a value of @ref TIM_Break_Input_enable_disable */ + + uint32_t BreakPolarity; /*!< TIM Break input polarity, This parameter can be a value of @ref TIM_Break_Polarity */ + + uint32_t BreakFilter; /*!< Specifies the break input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state, This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ + +} TIM_BreakDeadTimeConfigTypeDef; + +/** + * @brief HAL State structures definition + */ +typedef enum +{ + HAL_TIM_STATE_RESET = 0x00U, /*!< Peripheral not yet initialized or disabled */ + HAL_TIM_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ + HAL_TIM_STATE_BUSY = 0x02U, /*!< An internal process is ongoing */ + HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ + HAL_TIM_STATE_ERROR = 0x04U /*!< Reception process is ongoing */ +} HAL_TIM_StateTypeDef; + +/** + * @brief TIM Channel States definition + */ +typedef enum +{ + HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state */ + HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use */ + HAL_TIM_CHANNEL_STATE_BUSY = 0x02U, /*!< An internal process is ongoing on the TIM channel */ +} HAL_TIM_ChannelStateTypeDef; + +/** + * @brief DMA Burst States definition + */ +typedef enum +{ + HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */ + HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */ + HAL_DMA_BURST_STATE_BUSY = 0x02U, /*!< Ongoing DMA Burst */ +} HAL_TIM_DMABurstStateTypeDef; + +/** + * @brief HAL Active channel structures definition + */ +typedef enum +{ + HAL_TIM_ACTIVE_CHANNEL_1 = 0x01U, /*!< The active channel is 1 */ + HAL_TIM_ACTIVE_CHANNEL_2 = 0x02U, /*!< The active channel is 2 */ + HAL_TIM_ACTIVE_CHANNEL_3 = 0x04U, /*!< The active channel is 3 */ + HAL_TIM_ACTIVE_CHANNEL_4 = 0x08U, /*!< The active channel is 4 */ + HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U /*!< All active channels cleared */ +} HAL_TIM_ActiveChannel; + +/** + * @brief TIM Time Base Handle Structure definition + */ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +typedef struct __TIM_HandleTypeDef +#else +typedef struct +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +{ + TIM_TypeDef *Instance; /*!< Register base address */ + TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */ + HAL_TIM_ActiveChannel Channel; /*!< Active channel */ + DMA_HandleTypeDef *hdma[7]; /*!< DMA Handlers array + This array is accessed by a @ref DMA_Handle_index */ + HAL_LockTypeDef Lock; /*!< Locking object */ + __IO HAL_TIM_StateTypeDef State; /*!< TIM operation state */ + __IO HAL_TIM_ChannelStateTypeDef ChannelState[4]; /*!< TIM channel operation state */ + __IO HAL_TIM_ChannelStateTypeDef ChannelNState[4]; /*!< TIM complementary channel operation state */ + __IO HAL_TIM_DMABurstStateTypeDef DMABurstState; /*!< DMA burst operation state */ + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + void (* Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp Init Callback */ + void (* Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp DeInit Callback */ + void (* IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp Init Callback */ + void (* IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp DeInit Callback */ + void (* OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp Init Callback */ + void (* OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp DeInit Callback */ + void (* PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp Init Callback */ + void (* PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp DeInit Callback */ + void (* OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp Init Callback */ + void (* OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp DeInit Callback */ + void (* Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp Init Callback */ + void (* Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp DeInit Callback */ + void (* HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp Init Callback */ + void (* HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp DeInit Callback */ + void (* PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed Callback */ + void (* PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed half complete Callback */ + void (* TriggerCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger Callback */ + void (* TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger half complete Callback */ + void (* IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture Callback */ + void (* IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture half complete Callback */ + void (* OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Output Compare Delay Elapsed Callback */ + void (* PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished Callback */ + void (* PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback */ + void (* ErrorCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Error Callback */ + void (* CommutationCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation Callback */ + void (* CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation half complete Callback */ + void (* BreakCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Break Callback */ +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} TIM_HandleTypeDef; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief HAL TIM Callback ID enumeration definition + */ +typedef enum +{ + HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID */ + , HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID */ + , HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID */ + , HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID */ + , HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID */ + , HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID */ + , HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID */ + , HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID */ + , HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID */ + , HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID */ + , HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID */ + , HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID */ + , HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID */ + , HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID */ + , HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID */ + , HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID */ + , HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID */ + , HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID */ + , HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID */ + , HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID */ + , HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID */ + , HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID */ + , HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID */ + , HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID */ + , HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID */ + , HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID */ + , HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID */ +} HAL_TIM_CallbackIDTypeDef; + +/** + * @brief HAL TIM Callback pointer definition + */ +typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */ + +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIM_Exported_Constants TIM Exported Constants + * @{ + */ + +/** @defgroup TIM_ClearInput_Source TIM Clear Input Source + * @{ + */ +#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */ +#define TIM_CLEARINPUTSOURCE_ETR 0x00000001U /*!< OCREF_CLR is connected to ETRF input */ +/** + * @} + */ + +/** @defgroup TIM_DMA_Base_address TIM DMA Base Address + * @{ + */ +#define TIM_DMABASE_CR1 0x00000000U +#define TIM_DMABASE_CR2 0x00000001U +#define TIM_DMABASE_SMCR 0x00000002U +#define TIM_DMABASE_DIER 0x00000003U +#define TIM_DMABASE_SR 0x00000004U +#define TIM_DMABASE_EGR 0x00000005U +#define TIM_DMABASE_CCMR1 0x00000006U +#define TIM_DMABASE_CCMR2 0x00000007U +#define TIM_DMABASE_CCER 0x00000008U +#define TIM_DMABASE_CNT 0x00000009U +#define TIM_DMABASE_PSC 0x0000000AU +#define TIM_DMABASE_ARR 0x0000000BU +#define TIM_DMABASE_RCR 0x0000000CU +#define TIM_DMABASE_CCR1 0x0000000DU +#define TIM_DMABASE_CCR2 0x0000000EU +#define TIM_DMABASE_CCR3 0x0000000FU +#define TIM_DMABASE_CCR4 0x00000010U +#define TIM_DMABASE_BDTR 0x00000011U +#define TIM_DMABASE_DCR 0x00000012U +#define TIM_DMABASE_DMAR 0x00000013U +/** + * @} + */ + +/** @defgroup TIM_Event_Source TIM Event Source + * @{ + */ +#define TIM_EVENTSOURCE_UPDATE TIM_EGR_UG /*!< Reinitialize the counter and generates an update of the registers */ +#define TIM_EVENTSOURCE_CC1 TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */ +#define TIM_EVENTSOURCE_CC2 TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */ +#define TIM_EVENTSOURCE_CC3 TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */ +#define TIM_EVENTSOURCE_CC4 TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */ +#define TIM_EVENTSOURCE_COM TIM_EGR_COMG /*!< A commutation event is generated */ +#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG /*!< A trigger event is generated */ +#define TIM_EVENTSOURCE_BREAK TIM_EGR_BG /*!< A break event is generated */ +/** + * @} + */ + +/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity + * @{ + */ +#define TIM_INPUTCHANNELPOLARITY_RISING 0x00000000U /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_FALLING TIM_CCER_CC1P /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Polarity TIM ETR Polarity + * @{ + */ +#define TIM_ETRPOLARITY_INVERTED TIM_SMCR_ETP /*!< Polarity for ETR source */ +#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U /*!< Polarity for ETR source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler + * @{ + */ +#define TIM_ETRPRESCALER_DIV1 0x00000000U /*!< No prescaler is used */ +#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */ +#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */ +#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS /*!< ETR input source is divided by 8 */ +/** + * @} + */ + +/** @defgroup TIM_Counter_Mode TIM Counter Mode + * @{ + */ +#define TIM_COUNTERMODE_UP 0x00000000U /*!< Counter used as up-counter */ +#define TIM_COUNTERMODE_DOWN TIM_CR1_DIR /*!< Counter used as down-counter */ +#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1 */ +#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2 */ +#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS /*!< Center-aligned mode 3 */ +/** + * @} + */ + +/** @defgroup TIM_ClockDivision TIM Clock Division + * @{ + */ +#define TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< Clock division: tDTS=tCK_INT */ +#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */ +#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_State TIM Output Compare State + * @{ + */ +#define TIM_OUTPUTSTATE_DISABLE 0x00000000U /*!< Capture/Compare 1 output disabled */ +#define TIM_OUTPUTSTATE_ENABLE TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */ +/** + * @} + */ + +/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload + * @{ + */ +#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U /*!< TIMx_ARR register is not buffered */ +#define TIM_AUTORELOAD_PRELOAD_ENABLE TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */ + +/** + * @} + */ + +/** @defgroup TIM_Output_Fast_State TIM Output Fast State + * @{ + */ +#define TIM_OCFAST_DISABLE 0x00000000U /*!< Output Compare fast disable */ +#define TIM_OCFAST_ENABLE TIM_CCMR1_OC1FE /*!< Output Compare fast enable */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State + * @{ + */ +#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U /*!< OCxN is disabled */ +#define TIM_OUTPUTNSTATE_ENABLE TIM_CCER_CC1NE /*!< OCxN is enabled */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity + * @{ + */ +#define TIM_OCPOLARITY_HIGH 0x00000000U /*!< Capture/Compare output polarity */ +#define TIM_OCPOLARITY_LOW TIM_CCER_CC1P /*!< Capture/Compare output polarity */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity + * @{ + */ +#define TIM_OCNPOLARITY_HIGH 0x00000000U /*!< Capture/Compare complementary output polarity */ +#define TIM_OCNPOLARITY_LOW TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State + * @{ + */ +#define TIM_OCIDLESTATE_SET TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */ +#define TIM_OCIDLESTATE_RESET 0x00000000U /*!< Output Idle state: OCx=0 when MOE=0 */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State + * @{ + */ +#define TIM_OCNIDLESTATE_SET TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */ +#define TIM_OCNIDLESTATE_RESET 0x00000000U /*!< Complementary output Idle state: OCxN=0 when MOE=0 */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity + * @{ + */ +#define TIM_ICPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Capture triggered by rising edge on timer input */ +#define TIM_ICPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Capture triggered by falling edge on timer input */ +#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/ +/** + * @} + */ + +/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity + * @{ + */ +#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */ +#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection + * @{ + */ +#define TIM_ICSELECTION_DIRECTTI TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSELECTION_INDIRECTTI TIM_CCMR1_CC1S_1 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively */ +#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler + * @{ + */ +#define TIM_ICPSC_DIV1 0x00000000U /*!< Capture performed each time an edge is detected on the capture input */ +#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events */ +#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events */ +#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC /*!< Capture performed once every 8 events */ +/** + * @} + */ + +/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode + * @{ + */ +#define TIM_OPMODE_SINGLE TIM_CR1_OPM /*!< Counter stops counting at the next update event */ +#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event */ +/** + * @} + */ + +/** @defgroup TIM_Encoder_Mode TIM Encoder Mode + * @{ + */ +#define TIM_ENCODERMODE_TI1 TIM_SMCR_SMS_0 /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level */ +#define TIM_ENCODERMODE_TI2 TIM_SMCR_SMS_1 /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */ +#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */ +/** + * @} + */ + +/** @defgroup TIM_Interrupt_definition TIM interrupt Definition + * @{ + */ +#define TIM_IT_UPDATE TIM_DIER_UIE /*!< Update interrupt */ +#define TIM_IT_CC1 TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */ +#define TIM_IT_CC2 TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */ +#define TIM_IT_CC3 TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */ +#define TIM_IT_CC4 TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */ +#define TIM_IT_COM TIM_DIER_COMIE /*!< Commutation interrupt */ +#define TIM_IT_TRIGGER TIM_DIER_TIE /*!< Trigger interrupt */ +#define TIM_IT_BREAK TIM_DIER_BIE /*!< Break interrupt */ +/** + * @} + */ + +/** @defgroup TIM_Commutation_Source TIM Commutation Source + * @{ + */ +#define TIM_COMMUTATION_TRGI TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */ +#define TIM_COMMUTATION_SOFTWARE 0x00000000U /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */ +/** + * @} + */ + +/** @defgroup TIM_DMA_sources TIM DMA Sources + * @{ + */ +#define TIM_DMA_UPDATE TIM_DIER_UDE /*!< DMA request is triggered by the update event */ +#define TIM_DMA_CC1 TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */ +#define TIM_DMA_CC2 TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */ +#define TIM_DMA_CC3 TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */ +#define TIM_DMA_CC4 TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */ +#define TIM_DMA_COM TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */ +#define TIM_DMA_TRIGGER TIM_DIER_TDE /*!< DMA request is triggered by the trigger event */ +/** + * @} + */ + +/** @defgroup TIM_CC_DMA_Request CCx DMA request selection + * @{ + */ +#define TIM_CCDMAREQUEST_CC 0x00000000U /*!< CCx DMA request sent when capture or compare match event occurs */ +#define TIM_CCDMAREQUEST_UPDATE TIM_CR2_CCDS /*!< CCx DMA requests sent when update event occurs */ +/** + * @} + */ + +/** @defgroup TIM_Flag_definition TIM Flag Definition + * @{ + */ +#define TIM_FLAG_UPDATE TIM_SR_UIF /*!< Update interrupt flag */ +#define TIM_FLAG_CC1 TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */ +#define TIM_FLAG_CC2 TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */ +#define TIM_FLAG_CC3 TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */ +#define TIM_FLAG_CC4 TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */ +#define TIM_FLAG_COM TIM_SR_COMIF /*!< Commutation interrupt flag */ +#define TIM_FLAG_TRIGGER TIM_SR_TIF /*!< Trigger interrupt flag */ +#define TIM_FLAG_BREAK TIM_SR_BIF /*!< Break interrupt flag */ +#define TIM_FLAG_CC1OF TIM_SR_CC1OF /*!< Capture 1 overcapture flag */ +#define TIM_FLAG_CC2OF TIM_SR_CC2OF /*!< Capture 2 overcapture flag */ +#define TIM_FLAG_CC3OF TIM_SR_CC3OF /*!< Capture 3 overcapture flag */ +#define TIM_FLAG_CC4OF TIM_SR_CC4OF /*!< Capture 4 overcapture flag */ +/** + * @} + */ + +/** @defgroup TIM_Channel TIM Channel + * @{ + */ +#define TIM_CHANNEL_1 0x00000000U /*!< Capture/compare channel 1 identifier */ +#define TIM_CHANNEL_2 0x00000004U /*!< Capture/compare channel 2 identifier */ +#define TIM_CHANNEL_3 0x00000008U /*!< Capture/compare channel 3 identifier */ +#define TIM_CHANNEL_4 0x0000000CU /*!< Capture/compare channel 4 identifier */ +#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Source TIM Clock Source + * @{ + */ +#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source */ +#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF /*!< External clock source mode 1 (ETRF) */ +#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2 */ +#define TIM_CLOCKSOURCE_TI1ED TIM_TS_TI1F_ED /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */ +#define TIM_CLOCKSOURCE_TI1 TIM_TS_TI1FP1 /*!< External clock source mode 1 (TTI1FP1) */ +#define TIM_CLOCKSOURCE_TI2 TIM_TS_TI2FP2 /*!< External clock source mode 1 (TTI2FP2) */ +#define TIM_CLOCKSOURCE_ITR0 TIM_TS_ITR0 /*!< External clock source mode 1 (ITR0) */ +#define TIM_CLOCKSOURCE_ITR1 TIM_TS_ITR1 /*!< External clock source mode 1 (ITR1) */ +#define TIM_CLOCKSOURCE_ITR2 TIM_TS_ITR2 /*!< External clock source mode 1 (ITR2) */ +#define TIM_CLOCKSOURCE_ITR3 TIM_TS_ITR3 /*!< External clock source mode 1 (ITR3) */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Polarity TIM Clock Polarity + * @{ + */ +#define TIM_CLOCKPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler + * @{ + */ +#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */ +#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */ +#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity + * @{ + */ +#define TIM_CLEARINPUTPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx pin */ +#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler + * @{ + */ +#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state + * @{ + */ +#define TIM_OSSR_ENABLE TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ +#define TIM_OSSR_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ +/** + * @} + */ + +/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state + * @{ + */ +#define TIM_OSSI_ENABLE TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ +#define TIM_OSSI_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ +/** + * @} + */ +/** @defgroup TIM_Lock_level TIM Lock level + * @{ + */ +#define TIM_LOCKLEVEL_OFF 0x00000000U /*!< LOCK OFF */ +#define TIM_LOCKLEVEL_1 TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */ +#define TIM_LOCKLEVEL_2 TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */ +#define TIM_LOCKLEVEL_3 TIM_BDTR_LOCK /*!< LOCK Level 3 */ +/** + * @} + */ + +/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable + * @{ + */ +#define TIM_BREAK_ENABLE TIM_BDTR_BKE /*!< Break input BRK is enabled */ +#define TIM_BREAK_DISABLE 0x00000000U /*!< Break input BRK is disabled */ +/** + * @} + */ + +/** @defgroup TIM_Break_Polarity TIM Break Input Polarity + * @{ + */ +#define TIM_BREAKPOLARITY_LOW 0x00000000U /*!< Break input BRK is active low */ +#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */ +/** + * @} + */ + +/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable + * @{ + */ +#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */ +#define TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event (if none of the break inputs BRK and BRK2 is active) */ +/** + * @} + */ + +/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection + * @{ + */ +#define TIM_TRGO_RESET 0x00000000U /*!< TIMx_EGR.UG bit is used as trigger output (TRGO) */ +#define TIM_TRGO_ENABLE TIM_CR2_MMS_0 /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO) */ +#define TIM_TRGO_UPDATE TIM_CR2_MMS_1 /*!< Update event is used as trigger output (TRGO) */ +#define TIM_TRGO_OC1 (TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< Capture or a compare match 1 is used as trigger output (TRGO) */ +#define TIM_TRGO_OC1REF TIM_CR2_MMS_2 /*!< OC1REF signal is used as trigger output (TRGO) */ +#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0) /*!< OC2REF signal is used as trigger output(TRGO) */ +#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1) /*!< OC3REF signal is used as trigger output(TRGO) */ +#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO) */ +/** + * @} + */ + +/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode + * @{ + */ +#define TIM_MASTERSLAVEMODE_ENABLE TIM_SMCR_MSM /*!< No action */ +#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U /*!< Master/slave mode is selected */ +/** + * @} + */ + +/** @defgroup TIM_Slave_Mode TIM Slave mode + * @{ + */ +#define TIM_SLAVEMODE_DISABLE 0x00000000U /*!< Slave mode disabled */ +#define TIM_SLAVEMODE_RESET TIM_SMCR_SMS_2 /*!< Reset Mode */ +#define TIM_SLAVEMODE_GATED (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0) /*!< Gated Mode */ +#define TIM_SLAVEMODE_TRIGGER (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1) /*!< Trigger Mode */ +#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1 */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes + * @{ + */ +#define TIM_OCMODE_TIMING 0x00000000U /*!< Frozen */ +#define TIM_OCMODE_ACTIVE TIM_CCMR1_OC1M_0 /*!< Set channel to active level on match */ +#define TIM_OCMODE_INACTIVE TIM_CCMR1_OC1M_1 /*!< Set channel to inactive level on match */ +#define TIM_OCMODE_TOGGLE (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< Toggle */ +#define TIM_OCMODE_PWM1 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1) /*!< PWM mode 1 */ +#define TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2 */ +#define TIM_OCMODE_FORCED_ACTIVE (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0) /*!< Force active level */ +#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2 /*!< Force inactive level */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Selection TIM Trigger Selection + * @{ + */ +#define TIM_TS_ITR0 0x00000000U /*!< Internal Trigger 0 (ITR0) */ +#define TIM_TS_ITR1 TIM_SMCR_TS_0 /*!< Internal Trigger 1 (ITR1) */ +#define TIM_TS_ITR2 TIM_SMCR_TS_1 /*!< Internal Trigger 2 (ITR2) */ +#define TIM_TS_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) /*!< Internal Trigger 3 (ITR3) */ +#define TIM_TS_TI1F_ED TIM_SMCR_TS_2 /*!< TI1 Edge Detector (TI1F_ED) */ +#define TIM_TS_TI1FP1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 1 (TI1FP1) */ +#define TIM_TS_TI2FP2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 2 (TI2FP2) */ +#define TIM_TS_ETRF (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */ +#define TIM_TS_NONE 0x0000FFFFU /*!< No trigger selected */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity + * @{ + */ +#define TIM_TRIGGERPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler + * @{ + */ +#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */ +#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */ +#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection + * @{ + */ +#define TIM_TI1SELECTION_CH1 0x00000000U /*!< The TIMx_CH1 pin is connected to TI1 input */ +#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */ +/** + * @} + */ + +/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length + * @{ + */ +#define TIM_DMABURSTLENGTH_1TRANSFER 0x00000000U /*!< The transfer is done to 1 register starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_2TRANSFERS 0x00000100U /*!< The transfer is done to 2 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_3TRANSFERS 0x00000200U /*!< The transfer is done to 3 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_4TRANSFERS 0x00000300U /*!< The transfer is done to 4 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_5TRANSFERS 0x00000400U /*!< The transfer is done to 5 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_6TRANSFERS 0x00000500U /*!< The transfer is done to 6 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_7TRANSFERS 0x00000600U /*!< The transfer is done to 7 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_8TRANSFERS 0x00000700U /*!< The transfer is done to 8 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_9TRANSFERS 0x00000800U /*!< The transfer is done to 9 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +/** + * @} + */ + +/** @defgroup DMA_Handle_index TIM DMA Handle Index + * @{ + */ +#define TIM_DMA_ID_UPDATE ((uint16_t) 0x0000) /*!< Index of the DMA handle used for Update DMA requests */ +#define TIM_DMA_ID_CC1 ((uint16_t) 0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */ +#define TIM_DMA_ID_CC2 ((uint16_t) 0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */ +#define TIM_DMA_ID_CC3 ((uint16_t) 0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */ +#define TIM_DMA_ID_CC4 ((uint16_t) 0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */ +#define TIM_DMA_ID_COMMUTATION ((uint16_t) 0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */ +#define TIM_DMA_ID_TRIGGER ((uint16_t) 0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */ +/** + * @} + */ + +/** @defgroup Channel_CC_State TIM Capture/Compare Channel State + * @{ + */ +#define TIM_CCx_ENABLE 0x00000001U /*!< Input or output channel is enabled */ +#define TIM_CCx_DISABLE 0x00000000U /*!< Input or output channel is disabled */ +#define TIM_CCxN_ENABLE 0x00000004U /*!< Complementary output channel is enabled */ +#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup TIM_Exported_Macros TIM Exported Macros + * @{ + */ + +/** @brief Reset TIM handle state. + * @param __HANDLE__ TIM handle. + * @retval None + */ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ + (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ + (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ + (__HANDLE__)->Base_MspInitCallback = NULL; \ + (__HANDLE__)->Base_MspDeInitCallback = NULL; \ + (__HANDLE__)->IC_MspInitCallback = NULL; \ + (__HANDLE__)->IC_MspDeInitCallback = NULL; \ + (__HANDLE__)->OC_MspInitCallback = NULL; \ + (__HANDLE__)->OC_MspDeInitCallback = NULL; \ + (__HANDLE__)->PWM_MspInitCallback = NULL; \ + (__HANDLE__)->PWM_MspDeInitCallback = NULL; \ + (__HANDLE__)->OnePulse_MspInitCallback = NULL; \ + (__HANDLE__)->OnePulse_MspDeInitCallback = NULL; \ + (__HANDLE__)->Encoder_MspInitCallback = NULL; \ + (__HANDLE__)->Encoder_MspDeInitCallback = NULL; \ + (__HANDLE__)->HallSensor_MspInitCallback = NULL; \ + (__HANDLE__)->HallSensor_MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ + (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ + (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ + } while(0) +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @brief Enable the TIM peripheral. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN)) + +/** + * @brief Enable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR|=(TIM_BDTR_MOE)) + +/** + * @brief Disable the TIM peripheral. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ + { \ + (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \ + } \ + } \ + } while(0) + +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been + * disabled + */ +#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ + { \ + (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \ + } \ + } \ + } while(0) + +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled unconditionally + */ +#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE) + +/** @brief Enable the specified TIM interrupt. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to enable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) + +/** @brief Disable the specified TIM interrupt. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to disable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__)) + +/** @brief Enable the specified DMA request. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to enable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) + +/** @brief Disable the specified DMA request. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to disable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) + +/** @brief Check whether the specified TIM interrupt flag is set or not. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to check. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__)) + +/** @brief Clear the specified TIM interrupt flag. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to clear. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) + +/** + * @brief Check whether the specified TIM interrupt source is enabled or not. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the TIM interrupt source to check. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval The state of TIM_IT (SET or RESET). + */ +#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \ + == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Clear the TIM interrupt pending bits. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__)) + +/** + * @brief Indicates whether or not the TIM Counter is used as downcounter. + * @param __HANDLE__ TIM handle. + * @retval False (Counter used as upcounter) or True (Counter used as downcounter) + * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode + * or Encoder mode. + */ +#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR)) + +/** + * @brief Set the TIM Prescaler on runtime. + * @param __HANDLE__ TIM handle. + * @param __PRESC__ specifies the Prescaler new value. + * @retval None + */ +#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__)) + +/** + * @brief Set the TIM Counter Register value on runtime. + * @param __HANDLE__ TIM handle. + * @param __COUNTER__ specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__)) + +/** + * @brief Get the TIM Counter Register value on runtime. + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT) + */ +#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT) + +/** + * @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function. + * @param __HANDLE__ TIM handle. + * @param __AUTORELOAD__ specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \ + do{ \ + (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \ + (__HANDLE__)->Init.Period = (__AUTORELOAD__); \ + } while(0) + +/** + * @brief Get the TIM Autoreload Register value on runtime. + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR) + */ +#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR) + +/** + * @brief Set the TIM Clock Division value on runtime without calling another time any Init function. + * @param __HANDLE__ TIM handle. + * @param __CKD__ specifies the clock division value. + * This parameter can be one of the following value: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT + * @retval None + */ +#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \ + do{ \ + (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \ + (__HANDLE__)->Instance->CR1 |= (__CKD__); \ + (__HANDLE__)->Init.ClockDivision = (__CKD__); \ + } while(0) + +/** + * @brief Get the TIM Clock Division value on runtime. + * @param __HANDLE__ TIM handle. + * @retval The clock division can be one of the following values: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT + */ +#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD) + +/** + * @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() + * function. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __ICPSC__ specifies the Input Capture4 prescaler new value. + * This parameter can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + * @retval None + */ +#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \ + do{ \ + TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \ + } while(0) + +/** + * @brief Get the TIM Input Capture prescaler on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get input capture 1 prescaler value + * @arg TIM_CHANNEL_2: get input capture 2 prescaler value + * @arg TIM_CHANNEL_3: get input capture 3 prescaler value + * @arg TIM_CHANNEL_4: get input capture 4 prescaler value + * @retval The input capture prescaler can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events + */ +#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\ + (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U) + +/** + * @brief Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __COMPARE__ specifies the Capture Compare register new value. + * @retval None + */ +#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\ + ((__HANDLE__)->Instance->CCR4 = (__COMPARE__))) + +/** + * @brief Get the TIM Capture Compare Register value on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channel associated with the capture compare register + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get capture/compare 1 register value + * @arg TIM_CHANNEL_2: get capture/compare 2 register value + * @arg TIM_CHANNEL_3: get capture/compare 3 register value + * @arg TIM_CHANNEL_4: get capture/compare 4 register value + * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy) + */ +#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\ + ((__HANDLE__)->Instance->CCR4)) + +/** + * @brief Set the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval None + */ +#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\ + ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE)) + +/** + * @brief Reset the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval None + */ +#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE)) + +/** + * @brief Enable fast mode for a given channel. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @note When fast mode is enabled an active edge on the trigger input acts + * like a compare match on CCx output. Delay to sample the trigger + * input and to activate CCx output is reduced to 3 clock cycles. + * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode. + * @retval None + */ +#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\ + ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE)) + +/** + * @brief Disable fast mode for a given channel. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @note When fast mode is disabled CCx output behaves normally depending + * on counter and CCRx values even when the trigger is ON. The minimum + * delay to activate CCx output when an active edge occurs on the + * trigger input is 5 clock cycles. + * @retval None + */ +#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE)) + +/** + * @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register. + * @param __HANDLE__ TIM handle. + * @note When the URS bit of the TIMx_CR1 register is set, only counter + * overflow/underflow generates an update interrupt or DMA request (if + * enabled) + * @retval None + */ +#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS) + +/** + * @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register. + * @param __HANDLE__ TIM handle. + * @note When the URS bit of the TIMx_CR1 register is reset, any of the + * following events generate an update interrupt or DMA request (if + * enabled): + * _ Counter overflow underflow + * _ Setting the UG bit + * _ Update generation through the slave mode controller + * @retval None + */ +#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS) + +/** + * @brief Set the TIM Capture x input polarity on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __POLARITY__ Polarity for TIx source + * @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge + * @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge + * @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge + * @retval None + */ +#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + do{ \ + TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ + }while(0) + +/** @brief Select the Capture/compare DMA request source. + * @param __HANDLE__ specifies the TIM Handle. + * @param __CCDMA__ specifies Capture/compare DMA request source + * This parameter can be one of the following values: + * @arg TIM_CCDMAREQUEST_CC: CCx DMA request generated on Capture/Compare event + * @arg TIM_CCDMAREQUEST_UPDATE: CCx DMA request generated on Update event + * @retval None + */ +#define __HAL_TIM_SELECT_CCDMAREQUEST(__HANDLE__, __CCDMA__) \ + MODIFY_REG((__HANDLE__)->Instance->CR2, TIM_CR2_CCDS, (__CCDMA__)) + +/** + * @} + */ +/* End of exported macros ----------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup TIM_Private_Constants TIM Private Constants + * @{ + */ +/* The counter of a timer instance is disabled only if all the CCx and CCxN + channels have been disabled */ +#define TIM_CCER_CCxE_MASK ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E)) +#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) +/** + * @} + */ +/* End of private constants --------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup TIM_Private_Macros TIM Private Macros + * @{ + */ +#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || \ + ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR)) + +#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \ + ((__BASE__) == TIM_DMABASE_CR2) || \ + ((__BASE__) == TIM_DMABASE_SMCR) || \ + ((__BASE__) == TIM_DMABASE_DIER) || \ + ((__BASE__) == TIM_DMABASE_SR) || \ + ((__BASE__) == TIM_DMABASE_EGR) || \ + ((__BASE__) == TIM_DMABASE_CCMR1) || \ + ((__BASE__) == TIM_DMABASE_CCMR2) || \ + ((__BASE__) == TIM_DMABASE_CCER) || \ + ((__BASE__) == TIM_DMABASE_CNT) || \ + ((__BASE__) == TIM_DMABASE_PSC) || \ + ((__BASE__) == TIM_DMABASE_ARR) || \ + ((__BASE__) == TIM_DMABASE_RCR) || \ + ((__BASE__) == TIM_DMABASE_CCR1) || \ + ((__BASE__) == TIM_DMABASE_CCR2) || \ + ((__BASE__) == TIM_DMABASE_CCR3) || \ + ((__BASE__) == TIM_DMABASE_CCR4) || \ + ((__BASE__) == TIM_DMABASE_BDTR)) + +#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) + +#define IS_TIM_COUNTER_MODE(__MODE__) (((__MODE__) == TIM_COUNTERMODE_UP) || \ + ((__MODE__) == TIM_COUNTERMODE_DOWN) || \ + ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1) || \ + ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \ + ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3)) + +#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \ + ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \ + ((__DIV__) == TIM_CLOCKDIVISION_DIV4)) + +#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \ + ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE)) + +#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || \ + ((__STATE__) == TIM_OCFAST_ENABLE)) + +#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || \ + ((__POLARITY__) == TIM_OCPOLARITY_LOW)) + +#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || \ + ((__POLARITY__) == TIM_OCNPOLARITY_LOW)) + +#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || \ + ((__STATE__) == TIM_OCIDLESTATE_RESET)) + +#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \ + ((__STATE__) == TIM_OCNIDLESTATE_RESET)) + +#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING)) + +#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \ + ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE)) + +#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || \ + ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || \ + ((__SELECTION__) == TIM_ICSELECTION_TRC)) + +#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV2) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV4) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV8)) + +#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || \ + ((__MODE__) == TIM_OPMODE_REPETITIVE)) + +#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || \ + ((__MODE__) == TIM_ENCODERMODE_TI2) || \ + ((__MODE__) == TIM_ENCODERMODE_TI12)) + +#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) + +#define IS_TIM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3) || \ + ((__CHANNEL__) == TIM_CHANNEL_4) || \ + ((__CHANNEL__) == TIM_CHANNEL_ALL)) + +#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2)) + +#define IS_TIM_PERIOD(__HANDLE__, __PERIOD__) ((IS_TIM_32B_COUNTER_INSTANCE(((__HANDLE__)->Instance)) == 0U) ? \ + (((__PERIOD__) > 0U) && ((__PERIOD__) <= 0x0000FFFFU)) : \ + ((__PERIOD__) > 0U)) + +#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3)) + +#define IS_TIM_CLOCKSOURCE(__CLOCK__) (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3)) + +#define IS_TIM_CLOCKPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE)) + +#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8)) + +#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || \ + ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED)) + +#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8)) + +#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || \ + ((__STATE__) == TIM_OSSR_DISABLE)) + +#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || \ + ((__STATE__) == TIM_OSSI_DISABLE)) + +#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_1) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_2) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_3)) + +#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL) + +#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || \ + ((__STATE__) == TIM_BREAK_DISABLE)) + +#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || \ + ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH)) + +#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || \ + ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE)) + +#define IS_TIM_TRGO_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO_RESET) || \ + ((__SOURCE__) == TIM_TRGO_ENABLE) || \ + ((__SOURCE__) == TIM_TRGO_UPDATE) || \ + ((__SOURCE__) == TIM_TRGO_OC1) || \ + ((__SOURCE__) == TIM_TRGO_OC1REF) || \ + ((__SOURCE__) == TIM_TRGO_OC2REF) || \ + ((__SOURCE__) == TIM_TRGO_OC3REF) || \ + ((__SOURCE__) == TIM_TRGO_OC4REF)) + +#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || \ + ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE)) + +#define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE) || \ + ((__MODE__) == TIM_SLAVEMODE_RESET) || \ + ((__MODE__) == TIM_SLAVEMODE_GATED) || \ + ((__MODE__) == TIM_SLAVEMODE_TRIGGER) || \ + ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1)) + +#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || \ + ((__MODE__) == TIM_OCMODE_PWM2)) + +#define IS_TIM_OC_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_TIMING) || \ + ((__MODE__) == TIM_OCMODE_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_INACTIVE) || \ + ((__MODE__) == TIM_OCMODE_TOGGLE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE)) + +#define IS_TIM_TRIGGER_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ + ((__SELECTION__) == TIM_TS_ITR1) || \ + ((__SELECTION__) == TIM_TS_ITR2) || \ + ((__SELECTION__) == TIM_TS_ITR3) || \ + ((__SELECTION__) == TIM_TS_TI1F_ED) || \ + ((__SELECTION__) == TIM_TS_TI1FP1) || \ + ((__SELECTION__) == TIM_TS_TI2FP2) || \ + ((__SELECTION__) == TIM_TS_ETRF)) + +#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ + ((__SELECTION__) == TIM_TS_ITR1) || \ + ((__SELECTION__) == TIM_TS_ITR2) || \ + ((__SELECTION__) == TIM_TS_ITR3) || \ + ((__SELECTION__) == TIM_TS_NONE)) + +#define IS_TIM_TRIGGERPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE )) + +#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8)) + +#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || \ + ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION)) + +#define IS_TIM_DMA_LENGTH(__LENGTH__) (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || \ + ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS)) + +#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U)) + +#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU) + +#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER) + +#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\ + ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U))) + +#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC)) + +#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\ + ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U)))) + +#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\ + ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP))) + +#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] :\ + (__HANDLE__)->ChannelState[3]) + +#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__)\ + do {\ + (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__);\ + (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__);\ + (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__);\ + (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__);\ + } while(0) + +#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelNState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] :\ + (__HANDLE__)->ChannelNState[3]) + +#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__)\ + do {\ + (__HANDLE__)->ChannelNState[0] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[1] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[2] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[3] = \ + (__CHANNEL_STATE__); \ + } while(0) + +/** + * @} + */ +/* End of private macros -----------------------------------------------------*/ + +/* Include TIM HAL Extended module */ +#include "stm32f4xx_hal_tim_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions + * @brief Time Base functions + * @{ + */ +/* Time Base functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions + * @brief TIM Output Compare functions + * @{ + */ +/* Timer Output Compare functions *********************************************/ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length); +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions + * @brief TIM PWM functions + * @{ + */ +/* Timer PWM functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions + * @brief TIM Input Capture functions + * @{ + */ +/* Timer Input Capture functions **********************************************/ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions + * @brief TIM One Pulse functions + * @{ + */ +/* Timer One Pulse functions **************************************************/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode); +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions + * @brief TIM Encoder functions + * @{ + */ +/* Timer Encoder functions ****************************************************/ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, const TIM_Encoder_InitTypeDef *sConfig); +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, + uint32_t *pData2, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief IRQ handler management + * @{ + */ +/* Interrupt Handler functions ***********************************************/ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions + * @brief Peripheral Control functions + * @{ + */ +/* Control functions *********************************************************/ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, + uint32_t OutputChannel, uint32_t InputChannel); +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, + const TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig); +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, + uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource); +uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * @{ + */ +/* Callback in non blocking modes (Interrupt and DMA) *************************/ +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, + pTIM_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions + * @brief Peripheral State functions + * @{ + */ +/* Peripheral State functions ************************************************/ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim); + +/* Peripheral Channel state functions ************************************************/ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure); +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter); +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); +void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter); + +void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma); +void TIM_DMAError(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma); +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +void TIM_ResetCallback(TIM_HandleTypeDef *htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F4xx_HAL_TIM_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h new file mode 100644 index 00000000..4f1d01b0 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h @@ -0,0 +1,357 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim_ex.h + * @author MCD Application Team + * @brief Header file of TIM HAL Extended module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_HAL_TIM_EX_H +#define STM32F4xx_HAL_TIM_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIMEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types + * @{ + */ + +/** + * @brief TIM Hall sensor Configuration Structure definition + */ + +typedef struct +{ + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ +} TIM_HallSensor_InitTypeDef; +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants + * @{ + */ + +/** @defgroup TIMEx_Remap TIM Extended Remapping + * @{ + */ +#if defined (TIM2) +#if defined(TIM8) +#define TIM_TIM2_TIM8_TRGO 0x00000000U /*!< TIM2 ITR1 is connected to TIM8 TRGO */ +#endif /* TIM8 */ +#define TIM_TIM2_ETH_PTP TIM_OR_ITR1_RMP_0 /*!< TIM2 ITR1 is connected to PTP trigger output */ +#define TIM_TIM2_USBFS_SOF TIM_OR_ITR1_RMP_1 /*!< TIM2 ITR1 is connected to OTG FS SOF */ +#define TIM_TIM2_USBHS_SOF (TIM_OR_ITR1_RMP_1 | TIM_OR_ITR1_RMP_0) /*!< TIM2 ITR1 is connected to OTG HS SOF */ +#endif /* TIM2 */ + +#define TIM_TIM5_GPIO 0x00000000U /*!< TIM5 TI4 is connected to GPIO */ +#define TIM_TIM5_LSI TIM_OR_TI4_RMP_0 /*!< TIM5 TI4 is connected to LSI */ +#define TIM_TIM5_LSE TIM_OR_TI4_RMP_1 /*!< TIM5 TI4 is connected to LSE */ +#define TIM_TIM5_RTC (TIM_OR_TI4_RMP_1 | TIM_OR_TI4_RMP_0) /*!< TIM5 TI4 is connected to the RTC wakeup interrupt */ + +#define TIM_TIM11_GPIO 0x00000000U /*!< TIM11 TI1 is connected to GPIO */ +#define TIM_TIM11_HSE TIM_OR_TI1_RMP_1 /*!< TIM11 TI1 is connected to HSE_RTC clock */ +#if defined(SPDIFRX) +#define TIM_TIM11_SPDIFRX TIM_OR_TI1_RMP_0 /*!< TIM11 TI1 is connected to SPDIFRX_FRAME_SYNC */ +#endif /* SPDIFRX*/ + +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) +#define LPTIM_REMAP_MASK 0x10000000U + +#define TIM_TIM9_TIM3_TRGO LPTIM_REMAP_MASK /*!< TIM9 ITR1 is connected to TIM3 TRGO */ +#define TIM_TIM9_LPTIM (LPTIM_REMAP_MASK | LPTIM_OR_TIM9_ITR1_RMP) /*!< TIM9 ITR1 is connected to LPTIM1 output */ + +#define TIM_TIM5_TIM3_TRGO LPTIM_REMAP_MASK /*!< TIM5 ITR1 is connected to TIM3 TRGO */ +#define TIM_TIM5_LPTIM (LPTIM_REMAP_MASK | LPTIM_OR_TIM5_ITR1_RMP) /*!< TIM5 ITR1 is connected to LPTIM1 output */ + +#define TIM_TIM1_TIM3_TRGO LPTIM_REMAP_MASK /*!< TIM1 ITR2 is connected to TIM3 TRGO */ +#define TIM_TIM1_LPTIM (LPTIM_REMAP_MASK | LPTIM_OR_TIM1_ITR2_RMP) /*!< TIM1 ITR2 is connected to LPTIM1 output */ +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM5_ITR1_RMP */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros + * @{ + */ + +/** + * @} + */ +/* End of exported macro -----------------------------------------------------*/ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros + * @{ + */ +#if defined(SPDIFRX) +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_SPDIFRX) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#elif defined(TIM2) +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO) || \ + ((TIM_REMAP) == TIM_TIM2_ETH_PTP) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE))) || \ + (((INSTANCE) == TIM1) && (((TIM_REMAP) == TIM_TIM1_TIM3_TRGO) || \ + ((TIM_REMAP) == TIM_TIM1_LPTIM))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_TIM3_TRGO) || \ + ((TIM_REMAP) == TIM_TIM5_LPTIM))) || \ + (((INSTANCE) == TIM9) && (((TIM_REMAP) == TIM_TIM9_TIM3_TRGO) || \ + ((TIM_REMAP) == TIM_TIM9_LPTIM)))) +#elif defined(TIM8) +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO) || \ + ((TIM_REMAP) == TIM_TIM2_ETH_PTP) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#else +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_ETH_PTP) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM5_ITR1_RMP */ +#else +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#endif /* SPDIFRX */ + +/** + * @} + */ +/* End of private macro ------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions + * @{ + */ + +/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * @{ + */ +/* Timer Hall Sensor functions **********************************************/ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, const TIM_HallSensor_InitTypeDef *sConfig); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim); + +void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim); + +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * @{ + */ +/* Timer Complementary Output Compare functions *****************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * @{ + */ +/* Timer Complementary PWM functions ****************************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * @{ + */ +/* Timer Complementary One Pulse functions **********************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions + * @brief Peripheral Control functions + * @{ + */ +/* Extended Control functions ************************************************/ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + const TIM_MasterConfigTypeDef *sMasterConfig); +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig); +HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions + * @brief Extended Callbacks functions + * @{ + */ +/* Extended Callback **********************************************************/ +void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions + * @brief Extended Peripheral State functions + * @{ + */ +/* Extended Peripheral State functions ***************************************/ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(const TIM_HandleTypeDef *htim, uint32_t ChannelN); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @addtogroup TIMEx_Private_Functions TIM Extended Private Functions + * @{ + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); +void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma); +/** + * @} + */ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* STM32F4xx_HAL_TIM_EX_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h new file mode 100644 index 00000000..e6ce82fc --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h @@ -0,0 +1,909 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_uart.h + * @author MCD Application Team + * @brief Header file of UART HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_UART_H +#define __STM32F4xx_HAL_UART_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup UART + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup UART_Exported_Types UART Exported Types + * @{ + */ + +/** + * @brief UART Init Structure definition + */ +typedef struct +{ + uint32_t BaudRate; /*!< This member configures the UART communication baud rate. + The baud rate is computed using the following formula: + - IntegerDivider = ((PCLKx) / (8 * (OVR8+1) * (huart->Init.BaudRate))) + - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8 * (OVR8+1)) + 0.5 + Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */ + + uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref UART_Word_Length */ + + uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. + This parameter can be a value of @ref UART_Stop_Bits */ + + uint32_t Parity; /*!< Specifies the parity mode. + This parameter can be a value of @ref UART_Parity + @note When parity is enabled, the computed parity is inserted + at the MSB position of the transmitted data (9th bit when + the word length is set to 9 data bits; 8th bit when the + word length is set to 8 data bits). */ + + uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. + This parameter can be a value of @ref UART_Mode */ + + uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. + This parameter can be a value of @ref UART_Hardware_Flow_Control */ + + uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8). + This parameter can be a value of @ref UART_Over_Sampling */ +} UART_InitTypeDef; + +/** + * @brief HAL UART State structures definition + * @note HAL UART State value is a combination of 2 different substates: gState and RxState. + * - gState contains UART state information related to global Handle management + * and also information related to Tx operations. + * gState value coding follow below described bitmap : + * b7-b6 Error information + * 00 : No Error + * 01 : (Not Used) + * 10 : Timeout + * 11 : Error + * b5 Peripheral initialization status + * 0 : Reset (Peripheral not initialized) + * 1 : Init done (Peripheral initialized. HAL UART Init function already called) + * b4-b3 (not used) + * xx : Should be set to 00 + * b2 Intrinsic process state + * 0 : Ready + * 1 : Busy (Peripheral busy with some configuration or internal operations) + * b1 (not used) + * x : Should be set to 0 + * b0 Tx state + * 0 : Ready (no Tx operation ongoing) + * 1 : Busy (Tx operation ongoing) + * - RxState contains information related to Rx operations. + * RxState value coding follow below described bitmap : + * b7-b6 (not used) + * xx : Should be set to 00 + * b5 Peripheral initialization status + * 0 : Reset (Peripheral not initialized) + * 1 : Init done (Peripheral initialized) + * b4-b2 (not used) + * xxx : Should be set to 000 + * b1 Rx state + * 0 : Ready (no Rx operation ongoing) + * 1 : Busy (Rx operation ongoing) + * b0 (not used) + * x : Should be set to 0. + */ +typedef enum +{ + HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized + Value is allowed for gState and RxState */ + HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use + Value is allowed for gState and RxState */ + HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing + Value is allowed for gState only */ + HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing + Value is allowed for gState only */ + HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing + Value is allowed for RxState only */ + HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing + Not to be used for neither gState nor RxState. + Value is result of combination (Or) between gState and RxState values */ + HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state + Value is allowed for gState only */ + HAL_UART_STATE_ERROR = 0xE0U /*!< Error + Value is allowed for gState only */ +} HAL_UART_StateTypeDef; + +/** + * @brief HAL UART Reception type definition + * @note HAL UART Reception type value aims to identify which type of Reception is ongoing. + * This parameter can be a value of @ref UART_Reception_Type_Values : + * HAL_UART_RECEPTION_STANDARD = 0x00U, + * HAL_UART_RECEPTION_TOIDLE = 0x01U, + */ +typedef uint32_t HAL_UART_RxTypeTypeDef; + +/** + * @brief HAL UART Rx Event type definition + * @note HAL UART Rx Event type value aims to identify which type of Event has occurred + * leading to call of the RxEvent callback. + * This parameter can be a value of @ref UART_RxEvent_Type_Values : + * HAL_UART_RXEVENT_TC = 0x00U, + * HAL_UART_RXEVENT_HT = 0x01U, + * HAL_UART_RXEVENT_IDLE = 0x02U, + */ +typedef uint32_t HAL_UART_RxEventTypeTypeDef; + +/** + * @brief UART handle Structure definition + */ +typedef struct __UART_HandleTypeDef +{ + USART_TypeDef *Instance; /*!< UART registers base address */ + + UART_InitTypeDef Init; /*!< UART communication parameters */ + + const uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ + + uint16_t TxXferSize; /*!< UART Tx Transfer size */ + + __IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ + + uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ + + uint16_t RxXferSize; /*!< UART Rx Transfer size */ + + __IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ + + __IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */ + + __IO HAL_UART_RxEventTypeTypeDef RxEventType; /*!< Type of Rx Event */ + + DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ + + HAL_LockTypeDef Lock; /*!< Locking object */ + + __IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management + and also related to Tx operations. + This parameter can be a value of @ref HAL_UART_StateTypeDef */ + + __IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. + This parameter can be a value of @ref HAL_UART_StateTypeDef */ + + __IO uint32_t ErrorCode; /*!< UART Error code */ + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Half Complete Callback */ + void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Complete Callback */ + void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Half Complete Callback */ + void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Complete Callback */ + void (* ErrorCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Error Callback */ + void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Complete Callback */ + void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */ + void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Receive Complete Callback */ + void (* WakeupCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Wakeup Callback */ + void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback */ + + void (* MspInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp Init callback */ + void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp DeInit callback */ +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +} UART_HandleTypeDef; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +/** + * @brief HAL UART Callback ID enumeration definition + */ +typedef enum +{ + HAL_UART_TX_HALFCOMPLETE_CB_ID = 0x00U, /*!< UART Tx Half Complete Callback ID */ + HAL_UART_TX_COMPLETE_CB_ID = 0x01U, /*!< UART Tx Complete Callback ID */ + HAL_UART_RX_HALFCOMPLETE_CB_ID = 0x02U, /*!< UART Rx Half Complete Callback ID */ + HAL_UART_RX_COMPLETE_CB_ID = 0x03U, /*!< UART Rx Complete Callback ID */ + HAL_UART_ERROR_CB_ID = 0x04U, /*!< UART Error Callback ID */ + HAL_UART_ABORT_COMPLETE_CB_ID = 0x05U, /*!< UART Abort Complete Callback ID */ + HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U, /*!< UART Abort Transmit Complete Callback ID */ + HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID = 0x07U, /*!< UART Abort Receive Complete Callback ID */ + HAL_UART_WAKEUP_CB_ID = 0x08U, /*!< UART Wakeup Callback ID */ + + HAL_UART_MSPINIT_CB_ID = 0x0BU, /*!< UART MspInit callback ID */ + HAL_UART_MSPDEINIT_CB_ID = 0x0CU /*!< UART MspDeInit callback ID */ + +} HAL_UART_CallbackIDTypeDef; + +/** + * @brief HAL UART Callback pointer definition + */ +typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer to an UART callback function */ +typedef void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< pointer to a UART Rx Event specific callback function */ + +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup UART_Exported_Constants UART Exported Constants + * @{ + */ + +/** @defgroup UART_Error_Code UART Error Code + * @{ + */ +#define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_UART_ERROR_PE 0x00000001U /*!< Parity error */ +#define HAL_UART_ERROR_NE 0x00000002U /*!< Noise error */ +#define HAL_UART_ERROR_FE 0x00000004U /*!< Frame error */ +#define HAL_UART_ERROR_ORE 0x00000008U /*!< Overrun error */ +#define HAL_UART_ERROR_DMA 0x00000010U /*!< DMA transfer error */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +#define HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U /*!< Invalid Callback error */ +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @defgroup UART_Word_Length UART Word Length + * @{ + */ +#define UART_WORDLENGTH_8B 0x00000000U +#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) +/** + * @} + */ + +/** @defgroup UART_Stop_Bits UART Number of Stop Bits + * @{ + */ +#define UART_STOPBITS_1 0x00000000U +#define UART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) +/** + * @} + */ + +/** @defgroup UART_Parity UART Parity + * @{ + */ +#define UART_PARITY_NONE 0x00000000U +#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) +#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) +/** + * @} + */ + +/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control + * @{ + */ +#define UART_HWCONTROL_NONE 0x00000000U +#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE) +#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE) +#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE)) +/** + * @} + */ + +/** @defgroup UART_Mode UART Transfer Mode + * @{ + */ +#define UART_MODE_RX ((uint32_t)USART_CR1_RE) +#define UART_MODE_TX ((uint32_t)USART_CR1_TE) +#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE | USART_CR1_RE)) +/** + * @} + */ + +/** @defgroup UART_State UART State + * @{ + */ +#define UART_STATE_DISABLE 0x00000000U +#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE) +/** + * @} + */ + +/** @defgroup UART_Over_Sampling UART Over Sampling + * @{ + */ +#define UART_OVERSAMPLING_16 0x00000000U +#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) +/** + * @} + */ + +/** @defgroup UART_LIN_Break_Detection_Length UART LIN Break Detection Length + * @{ + */ +#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U +#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL) +/** + * @} + */ + +/** @defgroup UART_WakeUp_functions UART Wakeup Functions + * @{ + */ +#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U +#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)USART_CR1_WAKE) +/** + * @} + */ + +/** @defgroup UART_Flags UART FLags + * Elements values convention: 0xXXXX + * - 0xXXXX : Flag mask in the SR register + * @{ + */ +#define UART_FLAG_CTS ((uint32_t)USART_SR_CTS) +#define UART_FLAG_LBD ((uint32_t)USART_SR_LBD) +#define UART_FLAG_TXE ((uint32_t)USART_SR_TXE) +#define UART_FLAG_TC ((uint32_t)USART_SR_TC) +#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE) +#define UART_FLAG_IDLE ((uint32_t)USART_SR_IDLE) +#define UART_FLAG_ORE ((uint32_t)USART_SR_ORE) +#define UART_FLAG_NE ((uint32_t)USART_SR_NE) +#define UART_FLAG_FE ((uint32_t)USART_SR_FE) +#define UART_FLAG_PE ((uint32_t)USART_SR_PE) +/** + * @} + */ + +/** @defgroup UART_Interrupt_definition UART Interrupt Definitions + * Elements values convention: 0xY000XXXX + * - XXXX : Interrupt mask (16 bits) in the Y register + * - Y : Interrupt source register (2bits) + * - 0001: CR1 register + * - 0010: CR2 register + * - 0011: CR3 register + * @{ + */ + +#define UART_IT_PE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE)) +#define UART_IT_TXE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE)) +#define UART_IT_TC ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE)) +#define UART_IT_RXNE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE)) +#define UART_IT_IDLE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE)) + +#define UART_IT_LBD ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE)) + +#define UART_IT_CTS ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE)) +#define UART_IT_ERR ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE)) +/** + * @} + */ + +/** @defgroup UART_Reception_Type_Values UART Reception type values + * @{ + */ +#define HAL_UART_RECEPTION_STANDARD (0x00000000U) /*!< Standard reception */ +#define HAL_UART_RECEPTION_TOIDLE (0x00000001U) /*!< Reception till completion or IDLE event */ +/** + * @} + */ + +/** @defgroup UART_RxEvent_Type_Values UART RxEvent type values + * @{ + */ +#define HAL_UART_RXEVENT_TC (0x00000000U) /*!< RxEvent linked to Transfer Complete event */ +#define HAL_UART_RXEVENT_HT (0x00000001U) /*!< RxEvent linked to Half Transfer event */ +#define HAL_UART_RXEVENT_IDLE (0x00000002U) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup UART_Exported_Macros UART Exported Macros + * @{ + */ + +/** @brief Reset UART handle gstate & RxState + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->gState = HAL_UART_STATE_RESET; \ + (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0U) +#else +#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->gState = HAL_UART_STATE_RESET; \ + (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ + } while(0U) +#endif /*USE_HAL_UART_REGISTER_CALLBACKS */ + +/** @brief Flushes the UART DR register + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + */ +#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) + +/** @brief Checks whether the specified UART flag is set or not. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) + * @arg UART_FLAG_LBD: LIN Break detection flag + * @arg UART_FLAG_TXE: Transmit data register empty flag + * @arg UART_FLAG_TC: Transmission Complete flag + * @arg UART_FLAG_RXNE: Receive data register not empty flag + * @arg UART_FLAG_IDLE: Idle Line detection flag + * @arg UART_FLAG_ORE: Overrun Error flag + * @arg UART_FLAG_NE: Noise Error flag + * @arg UART_FLAG_FE: Framing Error flag + * @arg UART_FLAG_PE: Parity Error flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clears the specified UART pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __FLAG__ specifies the flag to check. + * This parameter can be any combination of the following values: + * @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). + * @arg UART_FLAG_LBD: LIN Break detection flag. + * @arg UART_FLAG_TC: Transmission Complete flag. + * @arg UART_FLAG_RXNE: Receive data register not empty flag. + * + * @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun + * error) and IDLE (Idle line detected) flags are cleared by software + * sequence: a read operation to USART_SR register followed by a read + * operation to USART_DR register. + * @note RXNE flag can be also cleared by a read to the USART_DR register. + * @note TC flag can be also cleared by software sequence: a read operation to + * USART_SR register followed by a write operation to USART_DR register. + * @note TXE flag is cleared only by a write to the USART_DR register. + * + * @retval None + */ +#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) + +/** @brief Clears the UART PE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg = 0x00U; \ + tmpreg = (__HANDLE__)->Instance->SR; \ + tmpreg = (__HANDLE__)->Instance->DR; \ + UNUSED(tmpreg); \ + } while(0U) + +/** @brief Clears the UART FE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Clears the UART NE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Clears the UART ORE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Clears the UART IDLE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Enable the specified UART interrupt. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __INTERRUPT__ specifies the UART interrupt source to enable. + * This parameter can be one of the following values: + * @arg UART_IT_CTS: CTS change interrupt + * @arg UART_IT_LBD: LIN Break detection interrupt + * @arg UART_IT_TXE: Transmit Data Register empty interrupt + * @arg UART_IT_TC: Transmission complete interrupt + * @arg UART_IT_RXNE: Receive Data register not empty interrupt + * @arg UART_IT_IDLE: Idle line detection interrupt + * @arg UART_IT_PE: Parity Error interrupt + * @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \ + (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \ + ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK))) + +/** @brief Disable the specified UART interrupt. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __INTERRUPT__ specifies the UART interrupt source to disable. + * This parameter can be one of the following values: + * @arg UART_IT_CTS: CTS change interrupt + * @arg UART_IT_LBD: LIN Break detection interrupt + * @arg UART_IT_TXE: Transmit Data Register empty interrupt + * @arg UART_IT_TC: Transmission complete interrupt + * @arg UART_IT_RXNE: Receive Data register not empty interrupt + * @arg UART_IT_IDLE: Idle line detection interrupt + * @arg UART_IT_PE: Parity Error interrupt + * @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ + (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ + ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK))) + +/** @brief Checks whether the specified UART interrupt source is enabled or not. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __IT__ specifies the UART interrupt source to check. + * This parameter can be one of the following values: + * @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) + * @arg UART_IT_LBD: LIN Break detection interrupt + * @arg UART_IT_TXE: Transmit Data Register empty interrupt + * @arg UART_IT_TC: Transmission complete interrupt + * @arg UART_IT_RXNE: Receive Data register not empty interrupt + * @arg UART_IT_IDLE: Idle line detection interrupt + * @arg UART_IT_ERR: Error interrupt + * @retval The new state of __IT__ (TRUE or FALSE). + */ +#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \ + (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK)) + +/** @brief Enable CTS flow control + * @note This macro allows to enable CTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__) \ + do{ \ + ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ + (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE; \ + } while(0U) + +/** @brief Disable CTS flow control + * @note This macro allows to disable CTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__) \ + do{ \ + ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ + (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE); \ + } while(0U) + +/** @brief Enable RTS flow control + * This macro allows to enable RTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__) \ + do{ \ + ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \ + (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE; \ + } while(0U) + +/** @brief Disable RTS flow control + * This macro allows to disable RTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__) \ + do{ \ + ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\ + (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \ + } while(0U) + +/** @brief Macro to enable the UART's one bit sample method + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) + +/** @brief Macro to disable the UART's one bit sample method + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\ + &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) + +/** @brief Enable UART + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) + +/** @brief Disable UART + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup UART_Exported_Functions + * @{ + */ + +/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ + +/* Initialization/de-initialization functions **********************************/ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength); +HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod); +HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart); +void HAL_UART_MspInit(UART_HandleTypeDef *huart); +void HAL_UART_MspDeInit(UART_HandleTypeDef *huart); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, + pUART_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID); + +HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @addtogroup UART_Exported_Functions_Group2 IO operation functions + * @{ + */ + +/* IO operation functions *******************************************************/ +HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart); + +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, + uint32_t Timeout); +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); + +HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart); + +/* Transfer Abort functions */ +HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart); + +void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); +void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart); + +void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size); + +/** + * @} + */ + +/** @addtogroup UART_Exported_Functions_Group3 + * @{ + */ +/* Peripheral Control functions ************************************************/ +HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart); +/** + * @} + */ + +/** @addtogroup UART_Exported_Functions_Group4 + * @{ + */ +/* Peripheral State functions **************************************************/ +HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart); +uint32_t HAL_UART_GetError(const UART_HandleTypeDef *huart); +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup UART_Private_Constants UART Private Constants + * @{ + */ +/** @brief UART interruptions flag mask + * + */ +#define UART_IT_MASK 0x0000FFFFU + +#define UART_CR1_REG_INDEX 1U +#define UART_CR2_REG_INDEX 2U +#define UART_CR3_REG_INDEX 3U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup UART_Private_Macros UART Private Macros + * @{ + */ +#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \ + ((LENGTH) == UART_WORDLENGTH_9B)) +#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B)) +#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \ + ((STOPBITS) == UART_STOPBITS_2)) +#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \ + ((PARITY) == UART_PARITY_EVEN) || \ + ((PARITY) == UART_PARITY_ODD)) +#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ + (((CONTROL) == UART_HWCONTROL_NONE) || \ + ((CONTROL) == UART_HWCONTROL_RTS) || \ + ((CONTROL) == UART_HWCONTROL_CTS) || \ + ((CONTROL) == UART_HWCONTROL_RTS_CTS)) +#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U)) +#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \ + ((STATE) == UART_STATE_ENABLE)) +#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \ + ((SAMPLING) == UART_OVERSAMPLING_8)) +#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16)) +#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \ + ((LENGTH) == UART_LINBREAKDETECTLENGTH_11B)) +#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \ + ((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK)) +#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 10500000U) +#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU) + +#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) ((uint32_t)((((uint64_t)(_PCLK_))*25U)/(4U*((uint64_t)(_BAUD_))))) +#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U) +#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U)\ + + 50U) / 100U) +/* UART BRR = mantissa + overflow + fraction + = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */ +#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_) ((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \ + (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U) + \ + (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU)) + +#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_) ((uint32_t)((((uint64_t)(_PCLK_))*25U)/(2U*((uint64_t)(_BAUD_))))) +#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U) +#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U)\ + + 50U) / 100U) +/* UART BRR = mantissa + overflow + fraction + = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */ +#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_) ((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \ + ((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U) + \ + (UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U)) + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup UART_Private_Functions UART Private Functions + * @{ + */ + +HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_UART_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h new file mode 100644 index 00000000..ce19d4d9 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h @@ -0,0 +1,2105 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_bus.h + * @author MCD Application Team + * @brief Header file of BUS LL module. + + @verbatim + ##### RCC Limitations ##### + ============================================================================== + [..] + A delay between an RCC peripheral clock enable and the effective peripheral + enabling should be taken into account in order to manage the peripheral read/write + from/to registers. + (+) This delay depends on the peripheral mapping. + (++) AHB & APB peripherals, 1 dummy read is necessary + + [..] + Workarounds: + (#) For AHB & APB peripherals, a dummy read to the peripheral register has been + inserted in each LL_{BUS}_GRP{x}_EnableClock() function. + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_BUS_H +#define __STM32F4xx_LL_BUS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined(RCC) + +/** @defgroup BUS_LL BUS + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup BUS_LL_Exported_Constants BUS Exported Constants + * @{ + */ + +/** @defgroup BUS_LL_EC_AHB1_GRP1_PERIPH AHB1 GRP1 PERIPH + * @{ + */ +#define LL_AHB1_GRP1_PERIPH_ALL 0xFFFFFFFFU +#define LL_AHB1_GRP1_PERIPH_GPIOA RCC_AHB1ENR_GPIOAEN +#define LL_AHB1_GRP1_PERIPH_GPIOB RCC_AHB1ENR_GPIOBEN +#define LL_AHB1_GRP1_PERIPH_GPIOC RCC_AHB1ENR_GPIOCEN +#if defined(GPIOD) +#define LL_AHB1_GRP1_PERIPH_GPIOD RCC_AHB1ENR_GPIODEN +#endif /* GPIOD */ +#if defined(GPIOE) +#define LL_AHB1_GRP1_PERIPH_GPIOE RCC_AHB1ENR_GPIOEEN +#endif /* GPIOE */ +#if defined(GPIOF) +#define LL_AHB1_GRP1_PERIPH_GPIOF RCC_AHB1ENR_GPIOFEN +#endif /* GPIOF */ +#if defined(GPIOG) +#define LL_AHB1_GRP1_PERIPH_GPIOG RCC_AHB1ENR_GPIOGEN +#endif /* GPIOG */ +#if defined(GPIOH) +#define LL_AHB1_GRP1_PERIPH_GPIOH RCC_AHB1ENR_GPIOHEN +#endif /* GPIOH */ +#if defined(GPIOI) +#define LL_AHB1_GRP1_PERIPH_GPIOI RCC_AHB1ENR_GPIOIEN +#endif /* GPIOI */ +#if defined(GPIOJ) +#define LL_AHB1_GRP1_PERIPH_GPIOJ RCC_AHB1ENR_GPIOJEN +#endif /* GPIOJ */ +#if defined(GPIOK) +#define LL_AHB1_GRP1_PERIPH_GPIOK RCC_AHB1ENR_GPIOKEN +#endif /* GPIOK */ +#define LL_AHB1_GRP1_PERIPH_CRC RCC_AHB1ENR_CRCEN +#if defined(RCC_AHB1ENR_BKPSRAMEN) +#define LL_AHB1_GRP1_PERIPH_BKPSRAM RCC_AHB1ENR_BKPSRAMEN +#endif /* RCC_AHB1ENR_BKPSRAMEN */ +#if defined(RCC_AHB1ENR_CCMDATARAMEN) +#define LL_AHB1_GRP1_PERIPH_CCMDATARAM RCC_AHB1ENR_CCMDATARAMEN +#endif /* RCC_AHB1ENR_CCMDATARAMEN */ +#define LL_AHB1_GRP1_PERIPH_DMA1 RCC_AHB1ENR_DMA1EN +#define LL_AHB1_GRP1_PERIPH_DMA2 RCC_AHB1ENR_DMA2EN +#if defined(RCC_AHB1ENR_RNGEN) +#define LL_AHB1_GRP1_PERIPH_RNG RCC_AHB1ENR_RNGEN +#endif /* RCC_AHB1ENR_RNGEN */ +#if defined(DMA2D) +#define LL_AHB1_GRP1_PERIPH_DMA2D RCC_AHB1ENR_DMA2DEN +#endif /* DMA2D */ +#if defined(ETH) +#define LL_AHB1_GRP1_PERIPH_ETHMAC RCC_AHB1ENR_ETHMACEN +#define LL_AHB1_GRP1_PERIPH_ETHMACTX RCC_AHB1ENR_ETHMACTXEN +#define LL_AHB1_GRP1_PERIPH_ETHMACRX RCC_AHB1ENR_ETHMACRXEN +#define LL_AHB1_GRP1_PERIPH_ETHMACPTP RCC_AHB1ENR_ETHMACPTPEN +#endif /* ETH */ +#if defined(USB_OTG_HS) +#define LL_AHB1_GRP1_PERIPH_OTGHS RCC_AHB1ENR_OTGHSEN +#define LL_AHB1_GRP1_PERIPH_OTGHSULPI RCC_AHB1ENR_OTGHSULPIEN +#endif /* USB_OTG_HS */ +#define LL_AHB1_GRP1_PERIPH_FLITF RCC_AHB1LPENR_FLITFLPEN +#define LL_AHB1_GRP1_PERIPH_SRAM1 RCC_AHB1LPENR_SRAM1LPEN +#if defined(RCC_AHB1LPENR_SRAM2LPEN) +#define LL_AHB1_GRP1_PERIPH_SRAM2 RCC_AHB1LPENR_SRAM2LPEN +#endif /* RCC_AHB1LPENR_SRAM2LPEN */ +#if defined(RCC_AHB1LPENR_SRAM3LPEN) +#define LL_AHB1_GRP1_PERIPH_SRAM3 RCC_AHB1LPENR_SRAM3LPEN +#endif /* RCC_AHB1LPENR_SRAM3LPEN */ +/** + * @} + */ + +#if defined(RCC_AHB2_SUPPORT) +/** @defgroup BUS_LL_EC_AHB2_GRP1_PERIPH AHB2 GRP1 PERIPH + * @{ + */ +#define LL_AHB2_GRP1_PERIPH_ALL 0xFFFFFFFFU +#if defined(DCMI) +#define LL_AHB2_GRP1_PERIPH_DCMI RCC_AHB2ENR_DCMIEN +#endif /* DCMI */ +#if defined(CRYP) +#define LL_AHB2_GRP1_PERIPH_CRYP RCC_AHB2ENR_CRYPEN +#endif /* CRYP */ +#if defined(AES) +#define LL_AHB2_GRP1_PERIPH_AES RCC_AHB2ENR_AESEN +#endif /* AES */ +#if defined(HASH) +#define LL_AHB2_GRP1_PERIPH_HASH RCC_AHB2ENR_HASHEN +#endif /* HASH */ +#if defined(RCC_AHB2ENR_RNGEN) +#define LL_AHB2_GRP1_PERIPH_RNG RCC_AHB2ENR_RNGEN +#endif /* RCC_AHB2ENR_RNGEN */ +#if defined(USB_OTG_FS) +#define LL_AHB2_GRP1_PERIPH_OTGFS RCC_AHB2ENR_OTGFSEN +#endif /* USB_OTG_FS */ +/** + * @} + */ +#endif /* RCC_AHB2_SUPPORT */ + +#if defined(RCC_AHB3_SUPPORT) +/** @defgroup BUS_LL_EC_AHB3_GRP1_PERIPH AHB3 GRP1 PERIPH + * @{ + */ +#define LL_AHB3_GRP1_PERIPH_ALL 0xFFFFFFFFU +#if defined(FSMC_Bank1) +#define LL_AHB3_GRP1_PERIPH_FSMC RCC_AHB3ENR_FSMCEN +#endif /* FSMC_Bank1 */ +#if defined(FMC_Bank1) +#define LL_AHB3_GRP1_PERIPH_FMC RCC_AHB3ENR_FMCEN +#endif /* FMC_Bank1 */ +#if defined(QUADSPI) +#define LL_AHB3_GRP1_PERIPH_QSPI RCC_AHB3ENR_QSPIEN +#endif /* QUADSPI */ +/** + * @} + */ +#endif /* RCC_AHB3_SUPPORT */ + +/** @defgroup BUS_LL_EC_APB1_GRP1_PERIPH APB1 GRP1 PERIPH + * @{ + */ +#define LL_APB1_GRP1_PERIPH_ALL 0xFFFFFFFFU +#if defined(TIM2) +#define LL_APB1_GRP1_PERIPH_TIM2 RCC_APB1ENR_TIM2EN +#endif /* TIM2 */ +#if defined(TIM3) +#define LL_APB1_GRP1_PERIPH_TIM3 RCC_APB1ENR_TIM3EN +#endif /* TIM3 */ +#if defined(TIM4) +#define LL_APB1_GRP1_PERIPH_TIM4 RCC_APB1ENR_TIM4EN +#endif /* TIM4 */ +#define LL_APB1_GRP1_PERIPH_TIM5 RCC_APB1ENR_TIM5EN +#if defined(TIM6) +#define LL_APB1_GRP1_PERIPH_TIM6 RCC_APB1ENR_TIM6EN +#endif /* TIM6 */ +#if defined(TIM7) +#define LL_APB1_GRP1_PERIPH_TIM7 RCC_APB1ENR_TIM7EN +#endif /* TIM7 */ +#if defined(TIM12) +#define LL_APB1_GRP1_PERIPH_TIM12 RCC_APB1ENR_TIM12EN +#endif /* TIM12 */ +#if defined(TIM13) +#define LL_APB1_GRP1_PERIPH_TIM13 RCC_APB1ENR_TIM13EN +#endif /* TIM13 */ +#if defined(TIM14) +#define LL_APB1_GRP1_PERIPH_TIM14 RCC_APB1ENR_TIM14EN +#endif /* TIM14 */ +#if defined(LPTIM1) +#define LL_APB1_GRP1_PERIPH_LPTIM1 RCC_APB1ENR_LPTIM1EN +#endif /* LPTIM1 */ +#if defined(RCC_APB1ENR_RTCAPBEN) +#define LL_APB1_GRP1_PERIPH_RTCAPB RCC_APB1ENR_RTCAPBEN +#endif /* RCC_APB1ENR_RTCAPBEN */ +#define LL_APB1_GRP1_PERIPH_WWDG RCC_APB1ENR_WWDGEN +#if defined(SPI2) +#define LL_APB1_GRP1_PERIPH_SPI2 RCC_APB1ENR_SPI2EN +#endif /* SPI2 */ +#if defined(SPI3) +#define LL_APB1_GRP1_PERIPH_SPI3 RCC_APB1ENR_SPI3EN +#endif /* SPI3 */ +#if defined(SPDIFRX) +#define LL_APB1_GRP1_PERIPH_SPDIFRX RCC_APB1ENR_SPDIFRXEN +#endif /* SPDIFRX */ +#define LL_APB1_GRP1_PERIPH_USART2 RCC_APB1ENR_USART2EN +#if defined(USART3) +#define LL_APB1_GRP1_PERIPH_USART3 RCC_APB1ENR_USART3EN +#endif /* USART3 */ +#if defined(UART4) +#define LL_APB1_GRP1_PERIPH_UART4 RCC_APB1ENR_UART4EN +#endif /* UART4 */ +#if defined(UART5) +#define LL_APB1_GRP1_PERIPH_UART5 RCC_APB1ENR_UART5EN +#endif /* UART5 */ +#define LL_APB1_GRP1_PERIPH_I2C1 RCC_APB1ENR_I2C1EN +#define LL_APB1_GRP1_PERIPH_I2C2 RCC_APB1ENR_I2C2EN +#if defined(I2C3) +#define LL_APB1_GRP1_PERIPH_I2C3 RCC_APB1ENR_I2C3EN +#endif /* I2C3 */ +#if defined(FMPI2C1) +#define LL_APB1_GRP1_PERIPH_FMPI2C1 RCC_APB1ENR_FMPI2C1EN +#endif /* FMPI2C1 */ +#if defined(CAN1) +#define LL_APB1_GRP1_PERIPH_CAN1 RCC_APB1ENR_CAN1EN +#endif /* CAN1 */ +#if defined(CAN2) +#define LL_APB1_GRP1_PERIPH_CAN2 RCC_APB1ENR_CAN2EN +#endif /* CAN2 */ +#if defined(CAN3) +#define LL_APB1_GRP1_PERIPH_CAN3 RCC_APB1ENR_CAN3EN +#endif /* CAN3 */ +#if defined(CEC) +#define LL_APB1_GRP1_PERIPH_CEC RCC_APB1ENR_CECEN +#endif /* CEC */ +#define LL_APB1_GRP1_PERIPH_PWR RCC_APB1ENR_PWREN +#if defined(DAC1) +#define LL_APB1_GRP1_PERIPH_DAC1 RCC_APB1ENR_DACEN +#endif /* DAC1 */ +#if defined(UART7) +#define LL_APB1_GRP1_PERIPH_UART7 RCC_APB1ENR_UART7EN +#endif /* UART7 */ +#if defined(UART8) +#define LL_APB1_GRP1_PERIPH_UART8 RCC_APB1ENR_UART8EN +#endif /* UART8 */ +/** + * @} + */ + +/** @defgroup BUS_LL_EC_APB2_GRP1_PERIPH APB2 GRP1 PERIPH + * @{ + */ +#define LL_APB2_GRP1_PERIPH_ALL 0xFFFFFFFFU +#define LL_APB2_GRP1_PERIPH_TIM1 RCC_APB2ENR_TIM1EN +#if defined(TIM8) +#define LL_APB2_GRP1_PERIPH_TIM8 RCC_APB2ENR_TIM8EN +#endif /* TIM8 */ +#define LL_APB2_GRP1_PERIPH_USART1 RCC_APB2ENR_USART1EN +#if defined(USART6) +#define LL_APB2_GRP1_PERIPH_USART6 RCC_APB2ENR_USART6EN +#endif /* USART6 */ +#if defined(UART9) +#define LL_APB2_GRP1_PERIPH_UART9 RCC_APB2ENR_UART9EN +#endif /* UART9 */ +#if defined(UART10) +#define LL_APB2_GRP1_PERIPH_UART10 RCC_APB2ENR_UART10EN +#endif /* UART10 */ +#define LL_APB2_GRP1_PERIPH_ADC1 RCC_APB2ENR_ADC1EN +#if defined(ADC2) +#define LL_APB2_GRP1_PERIPH_ADC2 RCC_APB2ENR_ADC2EN +#endif /* ADC2 */ +#if defined(ADC3) +#define LL_APB2_GRP1_PERIPH_ADC3 RCC_APB2ENR_ADC3EN +#endif /* ADC3 */ +#if defined(SDIO) +#define LL_APB2_GRP1_PERIPH_SDIO RCC_APB2ENR_SDIOEN +#endif /* SDIO */ +#define LL_APB2_GRP1_PERIPH_SPI1 RCC_APB2ENR_SPI1EN +#if defined(SPI4) +#define LL_APB2_GRP1_PERIPH_SPI4 RCC_APB2ENR_SPI4EN +#endif /* SPI4 */ +#define LL_APB2_GRP1_PERIPH_SYSCFG RCC_APB2ENR_SYSCFGEN +#if defined(RCC_APB2ENR_EXTITEN) +#define LL_APB2_GRP1_PERIPH_EXTI RCC_APB2ENR_EXTITEN +#endif /* RCC_APB2ENR_EXTITEN */ +#define LL_APB2_GRP1_PERIPH_TIM9 RCC_APB2ENR_TIM9EN +#if defined(TIM10) +#define LL_APB2_GRP1_PERIPH_TIM10 RCC_APB2ENR_TIM10EN +#endif /* TIM10 */ +#define LL_APB2_GRP1_PERIPH_TIM11 RCC_APB2ENR_TIM11EN +#if defined(SPI5) +#define LL_APB2_GRP1_PERIPH_SPI5 RCC_APB2ENR_SPI5EN +#endif /* SPI5 */ +#if defined(SPI6) +#define LL_APB2_GRP1_PERIPH_SPI6 RCC_APB2ENR_SPI6EN +#endif /* SPI6 */ +#if defined(SAI1) +#define LL_APB2_GRP1_PERIPH_SAI1 RCC_APB2ENR_SAI1EN +#endif /* SAI1 */ +#if defined(SAI2) +#define LL_APB2_GRP1_PERIPH_SAI2 RCC_APB2ENR_SAI2EN +#endif /* SAI2 */ +#if defined(LTDC) +#define LL_APB2_GRP1_PERIPH_LTDC RCC_APB2ENR_LTDCEN +#endif /* LTDC */ +#if defined(DSI) +#define LL_APB2_GRP1_PERIPH_DSI RCC_APB2ENR_DSIEN +#endif /* DSI */ +#if defined(DFSDM1_Channel0) +#define LL_APB2_GRP1_PERIPH_DFSDM1 RCC_APB2ENR_DFSDM1EN +#endif /* DFSDM1_Channel0 */ +#if defined(DFSDM2_Channel0) +#define LL_APB2_GRP1_PERIPH_DFSDM2 RCC_APB2ENR_DFSDM2EN +#endif /* DFSDM2_Channel0 */ +#define LL_APB2_GRP1_PERIPH_ADC RCC_APB2RSTR_ADCRST +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup BUS_LL_Exported_Functions BUS Exported Functions + * @{ + */ + +/** @defgroup BUS_LL_EF_AHB1 AHB1 + * @{ + */ + +/** + * @brief Enable AHB1 peripherals clock. + * @rmtoll AHB1ENR GPIOAEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOBEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOCEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIODEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOEEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOFEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOGEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOHEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOIEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOJEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOKEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR CRCEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR BKPSRAMEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR CCMDATARAMEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMA1EN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMA2EN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR RNGEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMA2DEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACTXEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACRXEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACPTPEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR OTGHSEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR OTGHSULPIEN LL_AHB1_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CCMDATARAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB1_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB1ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB1ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB1 peripheral clock is enabled or not + * @rmtoll AHB1ENR GPIOAEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOBEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOCEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIODEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOEEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOFEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOGEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOHEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOIEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOJEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOKEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR CRCEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR BKPSRAMEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR CCMDATARAMEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMA1EN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMA2EN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR RNGEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMA2DEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACTXEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACRXEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACPTPEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR OTGHSEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR OTGHSULPIEN LL_AHB1_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CCMDATARAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). + */ +__STATIC_INLINE uint32_t LL_AHB1_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->AHB1ENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB1 peripherals clock. + * @rmtoll AHB1ENR GPIOAEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOBEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOCEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIODEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOEEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOFEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOGEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOHEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOIEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOJEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOKEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR CRCEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR BKPSRAMEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR CCMDATARAMEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMA1EN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMA2EN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR RNGEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMA2DEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACTXEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACRXEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACPTPEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR OTGHSEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR OTGHSULPIEN LL_AHB1_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CCMDATARAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB1_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB1ENR, Periphs); +} + +/** + * @brief Force AHB1 peripherals reset. + * @rmtoll AHB1RSTR GPIOARST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOBRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOCRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIODRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOERST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOFRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOGRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOHRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOIRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOJRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOKRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR CRCRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMA1RST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMA2RST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR RNGRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR ETHMACRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR OTGHSRST LL_AHB1_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_ALL + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB1_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHB1RSTR, Periphs); +} + +/** + * @brief Release AHB1 peripherals reset. + * @rmtoll AHB1RSTR GPIOARST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOBRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOCRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIODRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOERST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOFRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOGRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOHRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOIRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOJRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOKRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR CRCRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMA1RST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMA2RST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR RNGRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR ETHMACRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR OTGHSRST LL_AHB1_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_ALL + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB1_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB1RSTR, Periphs); +} + +/** + * @brief Enable AHB1 peripheral clocks in low-power mode + * @rmtoll AHB1LPENR GPIOALPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOBLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOCLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIODLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOELPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOFLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOGLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOHLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOILPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOJLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOKLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR CRCLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR FLITFLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR SRAM1LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR SRAM2LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR SRAM3LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR DMA1LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR DMA2LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR DMA2DLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR RNGLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACTXLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACRXLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACPTPLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR OTGHSLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR OTGHSULPILPEN LL_AHB1_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_FLITF + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM1 + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM3 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB1_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB1LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB1LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable AHB1 peripheral clocks in low-power mode + * @rmtoll AHB1LPENR GPIOALPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOBLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOCLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIODLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOELPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOFLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOGLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOHLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOILPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOJLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOKLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR CRCLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR FLITFLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR SRAM1LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR SRAM2LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR SRAM3LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR DMA1LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR DMA2LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR DMA2DLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR RNGLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACTXLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACRXLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACPTPLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR OTGHSLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR OTGHSULPILPEN LL_AHB1_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_FLITF + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM1 + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM3 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB1_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB1LPENR, Periphs); +} + +/** + * @} + */ + +#if defined(RCC_AHB2_SUPPORT) +/** @defgroup BUS_LL_EF_AHB2 AHB2 + * @{ + */ + +/** + * @brief Enable AHB2 peripherals clock. + * @rmtoll AHB2ENR DCMIEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR CRYPEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR AESEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR HASHEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR RNGEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR OTGFSEN LL_AHB2_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB2_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB2ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB2ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB2 peripheral clock is enabled or not + * @rmtoll AHB2ENR DCMIEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR CRYPEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR AESEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR HASHEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR RNGEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR OTGFSEN LL_AHB2_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). + */ +__STATIC_INLINE uint32_t LL_AHB2_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->AHB2ENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB2 peripherals clock. + * @rmtoll AHB2ENR DCMIEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR CRYPEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR AESEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR HASHEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR RNGEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR OTGFSEN LL_AHB2_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB2_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB2ENR, Periphs); +} + +/** + * @brief Force AHB2 peripherals reset. + * @rmtoll AHB2RSTR DCMIRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR CRYPRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR AESRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR HASHRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR RNGRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR OTGFSRST LL_AHB2_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_ALL + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB2_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHB2RSTR, Periphs); +} + +/** + * @brief Release AHB2 peripherals reset. + * @rmtoll AHB2RSTR DCMIRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR CRYPRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR AESRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR HASHRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR RNGRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR OTGFSRST LL_AHB2_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_ALL + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB2_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB2RSTR, Periphs); +} + +/** + * @brief Enable AHB2 peripheral clocks in low-power mode + * @rmtoll AHB2LPENR DCMILPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR CRYPLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR AESLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR HASHLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR RNGLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR OTGFSLPEN LL_AHB2_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB2_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB2LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB2LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable AHB2 peripheral clocks in low-power mode + * @rmtoll AHB2LPENR DCMILPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR CRYPLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR AESLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR HASHLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR RNGLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR OTGFSLPEN LL_AHB2_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB2_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB2LPENR, Periphs); +} + +/** + * @} + */ +#endif /* RCC_AHB2_SUPPORT */ + +#if defined(RCC_AHB3_SUPPORT) +/** @defgroup BUS_LL_EF_AHB3 AHB3 + * @{ + */ + +/** + * @brief Enable AHB3 peripherals clock. + * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_EnableClock\n + * AHB3ENR FSMCEN LL_AHB3_GRP1_EnableClock\n + * AHB3ENR QSPIEN LL_AHB3_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB3_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB3ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB3ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB3 peripheral clock is enabled or not + * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_IsEnabledClock\n + * AHB3ENR FSMCEN LL_AHB3_GRP1_IsEnabledClock\n + * AHB3ENR QSPIEN LL_AHB3_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). + */ +__STATIC_INLINE uint32_t LL_AHB3_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->AHB3ENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB3 peripherals clock. + * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_DisableClock\n + * AHB3ENR FSMCEN LL_AHB3_GRP1_DisableClock\n + * AHB3ENR QSPIEN LL_AHB3_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB3_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB3ENR, Periphs); +} + +/** + * @brief Force AHB3 peripherals reset. + * @rmtoll AHB3RSTR FMCRST LL_AHB3_GRP1_ForceReset\n + * AHB3RSTR FSMCRST LL_AHB3_GRP1_ForceReset\n + * AHB3RSTR QSPIRST LL_AHB3_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_ALL + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB3_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHB3RSTR, Periphs); +} + +/** + * @brief Release AHB3 peripherals reset. + * @rmtoll AHB3RSTR FMCRST LL_AHB3_GRP1_ReleaseReset\n + * AHB3RSTR FSMCRST LL_AHB3_GRP1_ReleaseReset\n + * AHB3RSTR QSPIRST LL_AHB3_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_ALL + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB3_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB3RSTR, Periphs); +} + +/** + * @brief Enable AHB3 peripheral clocks in low-power mode + * @rmtoll AHB3LPENR FMCLPEN LL_AHB3_GRP1_EnableClockLowPower\n + * AHB3LPENR FSMCLPEN LL_AHB3_GRP1_EnableClockLowPower\n + * AHB3LPENR QSPILPEN LL_AHB3_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB3_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB3LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB3LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable AHB3 peripheral clocks in low-power mode + * @rmtoll AHB3LPENR FMCLPEN LL_AHB3_GRP1_DisableClockLowPower\n + * AHB3LPENR FSMCLPEN LL_AHB3_GRP1_DisableClockLowPower\n + * AHB3LPENR QSPILPEN LL_AHB3_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_AHB3_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB3LPENR, Periphs); +} + +/** + * @} + */ +#endif /* RCC_AHB3_SUPPORT */ + +/** @defgroup BUS_LL_EF_APB1 APB1 + * @{ + */ + +/** + * @brief Enable APB1 peripherals clock. + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM4EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM5EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM12EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM13EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_EnableClock\n + * APB1ENR LPTIM1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPI3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPDIFRXEN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART4EN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART5EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR FMPI2C1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CAN1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CAN2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CAN3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CECEN LL_APB1_GRP1_EnableClock\n + * APB1ENR PWREN LL_APB1_GRP1_EnableClock\n + * APB1ENR DACEN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART7EN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART8EN LL_APB1_GRP1_EnableClock\n + * APB1ENR RTCAPBEN LL_APB1_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB1_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB1ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB1ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if APB1 peripheral clock is enabled or not + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM4EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM5EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM12EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM13EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR LPTIM1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPI3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPDIFRXEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART4EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART5EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR FMPI2C1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CAN1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CAN2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CAN3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CECEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR PWREN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR DACEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART7EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART8EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR RTCAPBEN LL_APB1_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). + */ +__STATIC_INLINE uint32_t LL_APB1_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->APB1ENR, Periphs) == Periphs); +} + +/** + * @brief Disable APB1 peripherals clock. + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM4EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM5EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM12EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM13EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_DisableClock\n + * APB1ENR LPTIM1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPI3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPDIFRXEN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART4EN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART5EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR FMPI2C1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CAN1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CAN2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CAN3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CECEN LL_APB1_GRP1_DisableClock\n + * APB1ENR PWREN LL_APB1_GRP1_DisableClock\n + * APB1ENR DACEN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART7EN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART8EN LL_APB1_GRP1_DisableClock\n + * APB1ENR RTCAPBEN LL_APB1_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB1_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1ENR, Periphs); +} + +/** + * @brief Force APB1 peripherals reset. + * @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM4RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM5RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM6RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM7RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM12RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM13RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM14RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR LPTIM1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR WWDGRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPI2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPI3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPDIFRXRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART4RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART5RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR FMPI2C1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CAN1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CAN2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CAN3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CECRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR PWRRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR DACRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART7RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART8RST LL_APB1_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB1_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->APB1RSTR, Periphs); +} + +/** + * @brief Release APB1 peripherals reset. + * @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM4RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM5RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM6RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM7RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM12RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM13RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM14RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR LPTIM1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR WWDGRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPI2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPI3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPDIFRXRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART4RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART5RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR FMPI2C1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CAN1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CAN2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CAN3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CECRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR PWRRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR DACRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART7RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART8RST LL_APB1_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB1_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1RSTR, Periphs); +} + +/** + * @brief Enable APB1 peripheral clocks in low-power mode + * @rmtoll APB1LPENR TIM2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM4LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM5LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM6LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM7LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM12LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM13LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM14LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR LPTIM1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR WWDGLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR SPI2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR SPI3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR SPDIFRXLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR USART2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR USART3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART4LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART5LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR I2C1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR I2C2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR I2C3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR FMPI2C1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CAN1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CAN2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CAN3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CECLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR PWRLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR DACLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART7LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART8LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR RTCAPBLPEN LL_APB1_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB1_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB1LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB1LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable APB1 peripheral clocks in low-power mode + * @rmtoll APB1LPENR TIM2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM4LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM5LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM6LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM7LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM12LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM13LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM14LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR LPTIM1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR WWDGLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR SPI2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR SPI3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR SPDIFRXLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR USART2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR USART3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART4LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART5LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR I2C1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR I2C2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR I2C3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR FMPI2C1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CAN1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CAN2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CAN3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CECLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR PWRLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR DACLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART7LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART8LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR RTCAPBLPEN LL_APB1_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB1_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1LPENR, Periphs); +} + +/** + * @} + */ + +/** @defgroup BUS_LL_EF_APB2 APB2 + * @{ + */ + +/** + * @brief Enable APB2 peripherals clock. + * @rmtoll APB2ENR TIM1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM8EN LL_APB2_GRP1_EnableClock\n + * APB2ENR USART1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR USART6EN LL_APB2_GRP1_EnableClock\n + * APB2ENR UART9EN LL_APB2_GRP1_EnableClock\n + * APB2ENR UART10EN LL_APB2_GRP1_EnableClock\n + * APB2ENR ADC1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR ADC2EN LL_APB2_GRP1_EnableClock\n + * APB2ENR ADC3EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SDIOEN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI4EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SYSCFGEN LL_APB2_GRP1_EnableClock\n + * APB2ENR EXTITEN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM9EN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM10EN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM11EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI5EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI6EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SAI1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SAI2EN LL_APB2_GRP1_EnableClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_EnableClock\n + * APB2ENR DSIEN LL_APB2_GRP1_EnableClock\n + * APB2ENR DFSDM1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR DFSDM2EN LL_APB2_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB2ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if APB2 peripheral clock is enabled or not + * @rmtoll APB2ENR TIM1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM8EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR USART1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR USART6EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR UART9EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR UART10EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR ADC1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR ADC2EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR ADC3EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SDIOEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI4EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SYSCFGEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR EXTITEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM9EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM10EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM11EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI5EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI6EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SAI1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SAI2EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DSIEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DFSDM1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DFSDM2EN LL_APB2_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). + */ +__STATIC_INLINE uint32_t LL_APB2_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->APB2ENR, Periphs) == Periphs); +} + +/** + * @brief Disable APB2 peripherals clock. + * @rmtoll APB2ENR TIM1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM8EN LL_APB2_GRP1_DisableClock\n + * APB2ENR USART1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR USART6EN LL_APB2_GRP1_DisableClock\n + * APB2ENR UART9EN LL_APB2_GRP1_DisableClock\n + * APB2ENR UART10EN LL_APB2_GRP1_DisableClock\n + * APB2ENR ADC1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR ADC2EN LL_APB2_GRP1_DisableClock\n + * APB2ENR ADC3EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SDIOEN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI4EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SYSCFGEN LL_APB2_GRP1_DisableClock\n + * APB2ENR EXTITEN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM9EN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM10EN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM11EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI5EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI6EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SAI1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SAI2EN LL_APB2_GRP1_DisableClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_DisableClock\n + * APB2ENR DSIEN LL_APB2_GRP1_DisableClock\n + * APB2ENR DFSDM1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR DFSDM2EN LL_APB2_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB2_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2ENR, Periphs); +} + +/** + * @brief Force APB2 peripherals reset. + * @rmtoll APB2RSTR TIM1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM8RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR USART1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR USART6RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR UART9RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR UART10RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR ADCRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SDIORST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI4RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SYSCFGRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM9RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM10RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM11RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI5RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI6RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SAI1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SAI2RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR LTDCRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DSIRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DFSDM1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DFSDM2RST LL_APB2_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_ALL + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB2_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->APB2RSTR, Periphs); +} + +/** + * @brief Release APB2 peripherals reset. + * @rmtoll APB2RSTR TIM1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM8RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR USART1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR USART6RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR UART9RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR UART10RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR ADCRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SDIORST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI4RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SYSCFGRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM9RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM10RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM11RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI5RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI6RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SAI1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SAI2RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR LTDCRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DSIRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DFSDM1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DFSDM2RST LL_APB2_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_ALL + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB2_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2RSTR, Periphs); +} + +/** + * @brief Enable APB2 peripheral clocks in low-power mode + * @rmtoll APB2LPENR TIM1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM8LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR USART1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR USART6LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR UART9LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR UART10LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR ADC1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR ADC2LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR ADC3LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SDIOLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI4LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SYSCFGLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR EXTITLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM9LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM10LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM11LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI5LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI6LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SAI1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SAI2LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR LTDCLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DFSDM1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DFSDM2LPEN LL_APB2_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB2_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB2LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable APB2 peripheral clocks in low-power mode + * @rmtoll APB2LPENR TIM1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM8LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR USART1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR USART6LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR UART9LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR UART10LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR ADC1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR ADC2LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR ADC3LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SDIOLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI4LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SYSCFGLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR EXTITLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM9LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM10LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM11LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI5LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI6LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SAI1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SAI2LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR LTDCLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DFSDM1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DFSDM2LPEN LL_APB2_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_APB2_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2LPENR, Periphs); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(RCC) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_BUS_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h new file mode 100644 index 00000000..9a183ea7 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h @@ -0,0 +1,647 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_cortex.h + * @author MCD Application Team + * @brief Header file of CORTEX LL module. + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The LL CORTEX driver contains a set of generic APIs that can be + used by user: + (+) SYSTICK configuration used by LL_mDelay and LL_Init1msTick + functions + (+) Low power mode configuration (SCB register of Cortex-MCU) + (+) MPU API to configure and enable regions + (MPU services provided only on some devices) + (+) API to access to MCU info (CPUID register) + (+) API to enable fault handler (SHCSR accesses) + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_CORTEX_H +#define __STM32F4xx_LL_CORTEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +/** @defgroup CORTEX_LL CORTEX + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup CORTEX_LL_Exported_Constants CORTEX Exported Constants + * @{ + */ + +/** @defgroup CORTEX_LL_EC_CLKSOURCE_HCLK SYSTICK Clock Source + * @{ + */ +#define LL_SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U /*!< AHB clock divided by 8 selected as SysTick clock source.*/ +#define LL_SYSTICK_CLKSOURCE_HCLK SysTick_CTRL_CLKSOURCE_Msk /*!< AHB clock selected as SysTick clock source. */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_FAULT Handler Fault type + * @{ + */ +#define LL_HANDLER_FAULT_USG SCB_SHCSR_USGFAULTENA_Msk /*!< Usage fault */ +#define LL_HANDLER_FAULT_BUS SCB_SHCSR_BUSFAULTENA_Msk /*!< Bus fault */ +#define LL_HANDLER_FAULT_MEM SCB_SHCSR_MEMFAULTENA_Msk /*!< Memory management fault */ +/** + * @} + */ + +#if __MPU_PRESENT + +/** @defgroup CORTEX_LL_EC_CTRL_HFNMI_PRIVDEF MPU Control + * @{ + */ +#define LL_MPU_CTRL_HFNMI_PRIVDEF_NONE 0x00000000U /*!< Disable NMI and privileged SW access */ +#define LL_MPU_CTRL_HARDFAULT_NMI MPU_CTRL_HFNMIENA_Msk /*!< Enables the operation of MPU during hard fault, NMI, and FAULTMASK handlers */ +#define LL_MPU_CTRL_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk /*!< Enable privileged software access to default memory map */ +#define LL_MPU_CTRL_HFNMI_PRIVDEF (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) /*!< Enable NMI and privileged SW access */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_REGION MPU Region Number + * @{ + */ +#define LL_MPU_REGION_NUMBER0 0x00U /*!< REGION Number 0 */ +#define LL_MPU_REGION_NUMBER1 0x01U /*!< REGION Number 1 */ +#define LL_MPU_REGION_NUMBER2 0x02U /*!< REGION Number 2 */ +#define LL_MPU_REGION_NUMBER3 0x03U /*!< REGION Number 3 */ +#define LL_MPU_REGION_NUMBER4 0x04U /*!< REGION Number 4 */ +#define LL_MPU_REGION_NUMBER5 0x05U /*!< REGION Number 5 */ +#define LL_MPU_REGION_NUMBER6 0x06U /*!< REGION Number 6 */ +#define LL_MPU_REGION_NUMBER7 0x07U /*!< REGION Number 7 */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_REGION_SIZE MPU Region Size + * @{ + */ +#define LL_MPU_REGION_SIZE_32B (0x04U << MPU_RASR_SIZE_Pos) /*!< 32B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_64B (0x05U << MPU_RASR_SIZE_Pos) /*!< 64B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_128B (0x06U << MPU_RASR_SIZE_Pos) /*!< 128B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_256B (0x07U << MPU_RASR_SIZE_Pos) /*!< 256B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_512B (0x08U << MPU_RASR_SIZE_Pos) /*!< 512B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_1KB (0x09U << MPU_RASR_SIZE_Pos) /*!< 1KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_2KB (0x0AU << MPU_RASR_SIZE_Pos) /*!< 2KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_4KB (0x0BU << MPU_RASR_SIZE_Pos) /*!< 4KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_8KB (0x0CU << MPU_RASR_SIZE_Pos) /*!< 8KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_16KB (0x0DU << MPU_RASR_SIZE_Pos) /*!< 16KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_32KB (0x0EU << MPU_RASR_SIZE_Pos) /*!< 32KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_64KB (0x0FU << MPU_RASR_SIZE_Pos) /*!< 64KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_128KB (0x10U << MPU_RASR_SIZE_Pos) /*!< 128KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_256KB (0x11U << MPU_RASR_SIZE_Pos) /*!< 256KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_512KB (0x12U << MPU_RASR_SIZE_Pos) /*!< 512KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_1MB (0x13U << MPU_RASR_SIZE_Pos) /*!< 1MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_2MB (0x14U << MPU_RASR_SIZE_Pos) /*!< 2MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_4MB (0x15U << MPU_RASR_SIZE_Pos) /*!< 4MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_8MB (0x16U << MPU_RASR_SIZE_Pos) /*!< 8MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_16MB (0x17U << MPU_RASR_SIZE_Pos) /*!< 16MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_32MB (0x18U << MPU_RASR_SIZE_Pos) /*!< 32MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_64MB (0x19U << MPU_RASR_SIZE_Pos) /*!< 64MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_128MB (0x1AU << MPU_RASR_SIZE_Pos) /*!< 128MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_256MB (0x1BU << MPU_RASR_SIZE_Pos) /*!< 256MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_512MB (0x1CU << MPU_RASR_SIZE_Pos) /*!< 512MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_1GB (0x1DU << MPU_RASR_SIZE_Pos) /*!< 1GB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_2GB (0x1EU << MPU_RASR_SIZE_Pos) /*!< 2GB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_4GB (0x1FU << MPU_RASR_SIZE_Pos) /*!< 4GB Size of the MPU protection region */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_REGION_PRIVILEDGES MPU Region Privileges + * @{ + */ +#define LL_MPU_REGION_NO_ACCESS (0x00U << MPU_RASR_AP_Pos) /*!< No access*/ +#define LL_MPU_REGION_PRIV_RW (0x01U << MPU_RASR_AP_Pos) /*!< RW privileged (privileged access only)*/ +#define LL_MPU_REGION_PRIV_RW_URO (0x02U << MPU_RASR_AP_Pos) /*!< RW privileged - RO user (Write in a user program generates a fault) */ +#define LL_MPU_REGION_FULL_ACCESS (0x03U << MPU_RASR_AP_Pos) /*!< RW privileged & user (Full access) */ +#define LL_MPU_REGION_PRIV_RO (0x05U << MPU_RASR_AP_Pos) /*!< RO privileged (privileged read only)*/ +#define LL_MPU_REGION_PRIV_RO_URO (0x06U << MPU_RASR_AP_Pos) /*!< RO privileged & user (read only) */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_TEX MPU TEX Level + * @{ + */ +#define LL_MPU_TEX_LEVEL0 (0x00U << MPU_RASR_TEX_Pos) /*!< b000 for TEX bits */ +#define LL_MPU_TEX_LEVEL1 (0x01U << MPU_RASR_TEX_Pos) /*!< b001 for TEX bits */ +#define LL_MPU_TEX_LEVEL2 (0x02U << MPU_RASR_TEX_Pos) /*!< b010 for TEX bits */ +#define LL_MPU_TEX_LEVEL4 (0x04U << MPU_RASR_TEX_Pos) /*!< b100 for TEX bits */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_INSTRUCTION_ACCESS MPU Instruction Access + * @{ + */ +#define LL_MPU_INSTRUCTION_ACCESS_ENABLE 0x00U /*!< Instruction fetches enabled */ +#define LL_MPU_INSTRUCTION_ACCESS_DISABLE MPU_RASR_XN_Msk /*!< Instruction fetches disabled*/ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_SHAREABLE_ACCESS MPU Shareable Access + * @{ + */ +#define LL_MPU_ACCESS_SHAREABLE MPU_RASR_S_Msk /*!< Shareable memory attribute */ +#define LL_MPU_ACCESS_NOT_SHAREABLE 0x00U /*!< Not Shareable memory attribute */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_CACHEABLE_ACCESS MPU Cacheable Access + * @{ + */ +#define LL_MPU_ACCESS_CACHEABLE MPU_RASR_C_Msk /*!< Cacheable memory attribute */ +#define LL_MPU_ACCESS_NOT_CACHEABLE 0x00U /*!< Not Cacheable memory attribute */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_BUFFERABLE_ACCESS MPU Bufferable Access + * @{ + */ +#define LL_MPU_ACCESS_BUFFERABLE MPU_RASR_B_Msk /*!< Bufferable memory attribute */ +#define LL_MPU_ACCESS_NOT_BUFFERABLE 0x00U /*!< Not Bufferable memory attribute */ +/** + * @} + */ +#endif /* __MPU_PRESENT */ +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup CORTEX_LL_Exported_Functions CORTEX Exported Functions + * @{ + */ + +/** @defgroup CORTEX_LL_EF_SYSTICK SYSTICK + * @{ + */ + +/** + * @brief This function checks if the Systick counter flag is active or not. + * @note It can be used in timeout function on application side. + * @rmtoll STK_CTRL COUNTFLAG LL_SYSTICK_IsActiveCounterFlag + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSTICK_IsActiveCounterFlag(void) +{ + return ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk)); +} + +/** + * @brief Configures the SysTick clock source + * @rmtoll STK_CTRL CLKSOURCE LL_SYSTICK_SetClkSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8 + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK + * @retval None + */ +__STATIC_INLINE void LL_SYSTICK_SetClkSource(uint32_t Source) +{ + if (Source == LL_SYSTICK_CLKSOURCE_HCLK) + { + SET_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK); + } + else + { + CLEAR_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK); + } +} + +/** + * @brief Get the SysTick clock source + * @rmtoll STK_CTRL CLKSOURCE LL_SYSTICK_GetClkSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8 + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK + */ +__STATIC_INLINE uint32_t LL_SYSTICK_GetClkSource(void) +{ + return READ_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK); +} + +/** + * @brief Enable SysTick exception request + * @rmtoll STK_CTRL TICKINT LL_SYSTICK_EnableIT + * @retval None + */ +__STATIC_INLINE void LL_SYSTICK_EnableIT(void) +{ + SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief Disable SysTick exception request + * @rmtoll STK_CTRL TICKINT LL_SYSTICK_DisableIT + * @retval None + */ +__STATIC_INLINE void LL_SYSTICK_DisableIT(void) +{ + CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief Checks if the SYSTICK interrupt is enabled or disabled. + * @rmtoll STK_CTRL TICKINT LL_SYSTICK_IsEnabledIT + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSTICK_IsEnabledIT(void) +{ + return (READ_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk) == (SysTick_CTRL_TICKINT_Msk)); +} + +/** + * @} + */ + +/** @defgroup CORTEX_LL_EF_LOW_POWER_MODE LOW POWER MODE + * @{ + */ + +/** + * @brief Processor uses sleep as its low power mode + * @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableSleep + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableSleep(void) +{ + /* Clear SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Processor uses deep sleep as its low power mode + * @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableDeepSleep + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableDeepSleep(void) +{ + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Configures sleep-on-exit when returning from Handler mode to Thread mode. + * @note Setting this bit to 1 enables an interrupt-driven application to avoid returning to an + * empty main application. + * @rmtoll SCB_SCR SLEEPONEXIT LL_LPM_EnableSleepOnExit + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableSleepOnExit(void) +{ + /* Set SLEEPONEXIT bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Do not sleep when returning to Thread mode. + * @rmtoll SCB_SCR SLEEPONEXIT LL_LPM_DisableSleepOnExit + * @retval None + */ +__STATIC_INLINE void LL_LPM_DisableSleepOnExit(void) +{ + /* Clear SLEEPONEXIT bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Enabled events and all interrupts, including disabled interrupts, can wakeup the + * processor. + * @rmtoll SCB_SCR SEVEONPEND LL_LPM_EnableEventOnPend + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableEventOnPend(void) +{ + /* Set SEVEONPEND bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @brief Only enabled interrupts or events can wakeup the processor, disabled interrupts are + * excluded + * @rmtoll SCB_SCR SEVEONPEND LL_LPM_DisableEventOnPend + * @retval None + */ +__STATIC_INLINE void LL_LPM_DisableEventOnPend(void) +{ + /* Clear SEVEONPEND bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @brief Clear pending events. + * @retval None + */ +__STATIC_INLINE void LL_LPM_ClearEvent(void) +{ + __SEV(); + __WFE(); +} + +/** + * @} + */ + +/** @defgroup CORTEX_LL_EF_HANDLER HANDLER + * @{ + */ + +/** + * @brief Enable a fault in System handler control register (SHCSR) + * @rmtoll SCB_SHCSR MEMFAULTENA LL_HANDLER_EnableFault + * @param Fault This parameter can be a combination of the following values: + * @arg @ref LL_HANDLER_FAULT_USG + * @arg @ref LL_HANDLER_FAULT_BUS + * @arg @ref LL_HANDLER_FAULT_MEM + * @retval None + */ +__STATIC_INLINE void LL_HANDLER_EnableFault(uint32_t Fault) +{ + /* Enable the system handler fault */ + SET_BIT(SCB->SHCSR, Fault); +} + +/** + * @brief Disable a fault in System handler control register (SHCSR) + * @rmtoll SCB_SHCSR MEMFAULTENA LL_HANDLER_DisableFault + * @param Fault This parameter can be a combination of the following values: + * @arg @ref LL_HANDLER_FAULT_USG + * @arg @ref LL_HANDLER_FAULT_BUS + * @arg @ref LL_HANDLER_FAULT_MEM + * @retval None + */ +__STATIC_INLINE void LL_HANDLER_DisableFault(uint32_t Fault) +{ + /* Disable the system handler fault */ + CLEAR_BIT(SCB->SHCSR, Fault); +} + +/** + * @} + */ + +/** @defgroup CORTEX_LL_EF_MCU_INFO MCU INFO + * @{ + */ + +/** + * @brief Get Implementer code + * @rmtoll SCB_CPUID IMPLEMENTER LL_CPUID_GetImplementer + * @retval Value should be equal to 0x41 for ARM + */ +__STATIC_INLINE uint32_t LL_CPUID_GetImplementer(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos); +} + +/** + * @brief Get Variant number (The r value in the rnpn product revision identifier) + * @rmtoll SCB_CPUID VARIANT LL_CPUID_GetVariant + * @retval Value between 0 and 255 (0x0: revision 0) + */ +__STATIC_INLINE uint32_t LL_CPUID_GetVariant(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos); +} + +/** + * @brief Get Constant number + * @rmtoll SCB_CPUID ARCHITECTURE LL_CPUID_GetConstant + * @retval Value should be equal to 0xF for Cortex-M4 devices + */ +__STATIC_INLINE uint32_t LL_CPUID_GetConstant(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_ARCHITECTURE_Msk) >> SCB_CPUID_ARCHITECTURE_Pos); +} + +/** + * @brief Get Part number + * @rmtoll SCB_CPUID PARTNO LL_CPUID_GetParNo + * @retval Value should be equal to 0xC24 for Cortex-M4 + */ +__STATIC_INLINE uint32_t LL_CPUID_GetParNo(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_PARTNO_Msk) >> SCB_CPUID_PARTNO_Pos); +} + +/** + * @brief Get Revision number (The p value in the rnpn product revision identifier, indicates patch release) + * @rmtoll SCB_CPUID REVISION LL_CPUID_GetRevision + * @retval Value between 0 and 255 (0x1: patch 1) + */ +__STATIC_INLINE uint32_t LL_CPUID_GetRevision(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos); +} + +/** + * @} + */ + +#if __MPU_PRESENT +/** @defgroup CORTEX_LL_EF_MPU MPU + * @{ + */ + +/** + * @brief Enable MPU with input options + * @rmtoll MPU_CTRL ENABLE LL_MPU_Enable + * @param Options This parameter can be one of the following values: + * @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF_NONE + * @arg @ref LL_MPU_CTRL_HARDFAULT_NMI + * @arg @ref LL_MPU_CTRL_PRIVILEGED_DEFAULT + * @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF + * @retval None + */ +__STATIC_INLINE void LL_MPU_Enable(uint32_t Options) +{ + /* Enable the MPU*/ + WRITE_REG(MPU->CTRL, (MPU_CTRL_ENABLE_Msk | Options)); + /* Ensure MPU settings take effects */ + __DSB(); + /* Sequence instruction fetches using update settings */ + __ISB(); +} + +/** + * @brief Disable MPU + * @rmtoll MPU_CTRL ENABLE LL_MPU_Disable + * @retval None + */ +__STATIC_INLINE void LL_MPU_Disable(void) +{ + /* Make sure outstanding transfers are done */ + __DMB(); + /* Disable MPU*/ + WRITE_REG(MPU->CTRL, 0U); +} + +/** + * @brief Check if MPU is enabled or not + * @rmtoll MPU_CTRL ENABLE LL_MPU_IsEnabled + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_MPU_IsEnabled(void) +{ + return (READ_BIT(MPU->CTRL, MPU_CTRL_ENABLE_Msk) == (MPU_CTRL_ENABLE_Msk)); +} + +/** + * @brief Enable a MPU region + * @rmtoll MPU_RASR ENABLE LL_MPU_EnableRegion + * @param Region This parameter can be one of the following values: + * @arg @ref LL_MPU_REGION_NUMBER0 + * @arg @ref LL_MPU_REGION_NUMBER1 + * @arg @ref LL_MPU_REGION_NUMBER2 + * @arg @ref LL_MPU_REGION_NUMBER3 + * @arg @ref LL_MPU_REGION_NUMBER4 + * @arg @ref LL_MPU_REGION_NUMBER5 + * @arg @ref LL_MPU_REGION_NUMBER6 + * @arg @ref LL_MPU_REGION_NUMBER7 + * @retval None + */ +__STATIC_INLINE void LL_MPU_EnableRegion(uint32_t Region) +{ + /* Set Region number */ + WRITE_REG(MPU->RNR, Region); + /* Enable the MPU region */ + SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); +} + +/** + * @brief Configure and enable a region + * @rmtoll MPU_RNR REGION LL_MPU_ConfigRegion\n + * MPU_RBAR REGION LL_MPU_ConfigRegion\n + * MPU_RBAR ADDR LL_MPU_ConfigRegion\n + * MPU_RASR XN LL_MPU_ConfigRegion\n + * MPU_RASR AP LL_MPU_ConfigRegion\n + * MPU_RASR S LL_MPU_ConfigRegion\n + * MPU_RASR C LL_MPU_ConfigRegion\n + * MPU_RASR B LL_MPU_ConfigRegion\n + * MPU_RASR SIZE LL_MPU_ConfigRegion + * @param Region This parameter can be one of the following values: + * @arg @ref LL_MPU_REGION_NUMBER0 + * @arg @ref LL_MPU_REGION_NUMBER1 + * @arg @ref LL_MPU_REGION_NUMBER2 + * @arg @ref LL_MPU_REGION_NUMBER3 + * @arg @ref LL_MPU_REGION_NUMBER4 + * @arg @ref LL_MPU_REGION_NUMBER5 + * @arg @ref LL_MPU_REGION_NUMBER6 + * @arg @ref LL_MPU_REGION_NUMBER7 + * @param Address Value of region base address + * @param SubRegionDisable Sub-region disable value between Min_Data = 0x00 and Max_Data = 0xFF + * @param Attributes This parameter can be a combination of the following values: + * @arg @ref LL_MPU_REGION_SIZE_32B or @ref LL_MPU_REGION_SIZE_64B or @ref LL_MPU_REGION_SIZE_128B or @ref LL_MPU_REGION_SIZE_256B or @ref LL_MPU_REGION_SIZE_512B + * or @ref LL_MPU_REGION_SIZE_1KB or @ref LL_MPU_REGION_SIZE_2KB or @ref LL_MPU_REGION_SIZE_4KB or @ref LL_MPU_REGION_SIZE_8KB or @ref LL_MPU_REGION_SIZE_16KB + * or @ref LL_MPU_REGION_SIZE_32KB or @ref LL_MPU_REGION_SIZE_64KB or @ref LL_MPU_REGION_SIZE_128KB or @ref LL_MPU_REGION_SIZE_256KB or @ref LL_MPU_REGION_SIZE_512KB + * or @ref LL_MPU_REGION_SIZE_1MB or @ref LL_MPU_REGION_SIZE_2MB or @ref LL_MPU_REGION_SIZE_4MB or @ref LL_MPU_REGION_SIZE_8MB or @ref LL_MPU_REGION_SIZE_16MB + * or @ref LL_MPU_REGION_SIZE_32MB or @ref LL_MPU_REGION_SIZE_64MB or @ref LL_MPU_REGION_SIZE_128MB or @ref LL_MPU_REGION_SIZE_256MB or @ref LL_MPU_REGION_SIZE_512MB + * or @ref LL_MPU_REGION_SIZE_1GB or @ref LL_MPU_REGION_SIZE_2GB or @ref LL_MPU_REGION_SIZE_4GB + * @arg @ref LL_MPU_REGION_NO_ACCESS or @ref LL_MPU_REGION_PRIV_RW or @ref LL_MPU_REGION_PRIV_RW_URO or @ref LL_MPU_REGION_FULL_ACCESS + * or @ref LL_MPU_REGION_PRIV_RO or @ref LL_MPU_REGION_PRIV_RO_URO + * @arg @ref LL_MPU_TEX_LEVEL0 or @ref LL_MPU_TEX_LEVEL1 or @ref LL_MPU_TEX_LEVEL2 or @ref LL_MPU_TEX_LEVEL4 + * @arg @ref LL_MPU_INSTRUCTION_ACCESS_ENABLE or @ref LL_MPU_INSTRUCTION_ACCESS_DISABLE + * @arg @ref LL_MPU_ACCESS_SHAREABLE or @ref LL_MPU_ACCESS_NOT_SHAREABLE + * @arg @ref LL_MPU_ACCESS_CACHEABLE or @ref LL_MPU_ACCESS_NOT_CACHEABLE + * @arg @ref LL_MPU_ACCESS_BUFFERABLE or @ref LL_MPU_ACCESS_NOT_BUFFERABLE + * @retval None + */ +__STATIC_INLINE void LL_MPU_ConfigRegion(uint32_t Region, uint32_t SubRegionDisable, uint32_t Address, uint32_t Attributes) +{ + /* Set Region number */ + WRITE_REG(MPU->RNR, Region); + /* Set base address */ + WRITE_REG(MPU->RBAR, (Address & 0xFFFFFFE0U)); + /* Configure MPU */ + WRITE_REG(MPU->RASR, (MPU_RASR_ENABLE_Msk | Attributes | (SubRegionDisable << MPU_RASR_SRD_Pos))); +} + +/** + * @brief Disable a region + * @rmtoll MPU_RNR REGION LL_MPU_DisableRegion\n + * MPU_RASR ENABLE LL_MPU_DisableRegion + * @param Region This parameter can be one of the following values: + * @arg @ref LL_MPU_REGION_NUMBER0 + * @arg @ref LL_MPU_REGION_NUMBER1 + * @arg @ref LL_MPU_REGION_NUMBER2 + * @arg @ref LL_MPU_REGION_NUMBER3 + * @arg @ref LL_MPU_REGION_NUMBER4 + * @arg @ref LL_MPU_REGION_NUMBER5 + * @arg @ref LL_MPU_REGION_NUMBER6 + * @arg @ref LL_MPU_REGION_NUMBER7 + * @retval None + */ +__STATIC_INLINE void LL_MPU_DisableRegion(uint32_t Region) +{ + /* Set Region number */ + WRITE_REG(MPU->RNR, Region); + /* Disable the MPU region */ + CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); +} + +/** + * @} + */ + +#endif /* __MPU_PRESENT */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_CORTEX_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h new file mode 100644 index 00000000..055ba5f2 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h @@ -0,0 +1,2868 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_dma.h + * @author MCD Application Team + * @brief Header file of DMA LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_DMA_H +#define __STM32F4xx_LL_DMA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (DMA1) || defined (DMA2) + +/** @defgroup DMA_LL DMA + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup DMA_LL_Private_Variables DMA Private Variables + * @{ + */ +/* Array used to get the DMA stream register offset versus stream index LL_DMA_STREAM_x */ +static const uint8_t STREAM_OFFSET_TAB[] = +{ + (uint8_t)(DMA1_Stream0_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream1_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream2_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream3_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream4_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream5_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream6_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream7_BASE - DMA1_BASE) +}; + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup DMA_LL_Private_Constants DMA Private Constants + * @{ + */ +/** + * @} + */ + + +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup DMA_LL_ES_INIT DMA Exported Init structure + * @{ + */ +typedef struct +{ + uint32_t PeriphOrM2MSrcAddress; /*!< Specifies the peripheral base address for DMA transfer + or as Source base address in case of memory to memory transfer direction. + + This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */ + + uint32_t MemoryOrM2MDstAddress; /*!< Specifies the memory base address for DMA transfer + or as Destination base address in case of memory to memory transfer direction. + + This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */ + + uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_LL_EC_DIRECTION + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */ + + uint32_t Mode; /*!< Specifies the normal or circular operation mode. + This parameter can be a value of @ref DMA_LL_EC_MODE + @note The circular buffer mode cannot be used if the memory to memory + data transfer direction is configured on the selected Stream + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */ + + uint32_t PeriphOrM2MSrcIncMode; /*!< Specifies whether the Peripheral address or Source address in case of memory to memory transfer direction + is incremented or not. + This parameter can be a value of @ref DMA_LL_EC_PERIPH + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */ + + uint32_t MemoryOrM2MDstIncMode; /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction + is incremented or not. + This parameter can be a value of @ref DMA_LL_EC_MEMORY + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */ + + uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment (byte, half word, word) + in case of memory to memory transfer direction. + This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */ + + uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word) + in case of memory to memory transfer direction. + This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */ + + uint32_t NbData; /*!< Specifies the number of data to transfer, in data unit. + The data unit is equal to the source buffer configuration set in PeripheralSize + or MemorySize parameters depending in the transfer direction. + This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */ + + uint32_t Channel; /*!< Specifies the peripheral channel. + This parameter can be a value of @ref DMA_LL_EC_CHANNEL + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelSelection(). */ + + uint32_t Priority; /*!< Specifies the channel priority level. + This parameter can be a value of @ref DMA_LL_EC_PRIORITY + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetStreamPriorityLevel(). */ + + uint32_t FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified stream. + This parameter can be a value of @ref DMA_LL_FIFOMODE + @note The Direct mode (FIFO mode disabled) cannot be used if the + memory-to-memory data transfer is configured on the selected stream + + This feature can be modified afterwards using unitary functions @ref LL_DMA_EnableFifoMode() or @ref LL_DMA_EnableFifoMode() . */ + + uint32_t FIFOThreshold; /*!< Specifies the FIFO threshold level. + This parameter can be a value of @ref DMA_LL_EC_FIFOTHRESHOLD + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetFIFOThreshold(). */ + + uint32_t MemBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_LL_EC_MBURST + @note The burst mode is possible only if the address Increment mode is enabled. + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryBurstxfer(). */ + + uint32_t PeriphBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_LL_EC_PBURST + @note The burst mode is possible only if the address Increment mode is enabled. + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphBurstxfer(). */ + +} LL_DMA_InitTypeDef; +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup DMA_LL_Exported_Constants DMA Exported Constants + * @{ + */ + +/** @defgroup DMA_LL_EC_STREAM STREAM + * @{ + */ +#define LL_DMA_STREAM_0 0x00000000U +#define LL_DMA_STREAM_1 0x00000001U +#define LL_DMA_STREAM_2 0x00000002U +#define LL_DMA_STREAM_3 0x00000003U +#define LL_DMA_STREAM_4 0x00000004U +#define LL_DMA_STREAM_5 0x00000005U +#define LL_DMA_STREAM_6 0x00000006U +#define LL_DMA_STREAM_7 0x00000007U +#define LL_DMA_STREAM_ALL 0xFFFF0000U +/** + * @} + */ + +/** @defgroup DMA_LL_EC_DIRECTION DIRECTION + * @{ + */ +#define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ +#define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_SxCR_DIR_0 /*!< Memory to peripheral direction */ +#define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_SxCR_DIR_1 /*!< Memory to memory direction */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MODE MODE + * @{ + */ +#define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */ +#define LL_DMA_MODE_CIRCULAR DMA_SxCR_CIRC /*!< Circular Mode */ +#define LL_DMA_MODE_PFCTRL DMA_SxCR_PFCTRL /*!< Peripheral flow control mode */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_DOUBLEBUFFER_MODE DOUBLEBUFFER MODE + * @{ + */ +#define LL_DMA_DOUBLEBUFFER_MODE_DISABLE 0x00000000U /*!< Disable double buffering mode */ +#define LL_DMA_DOUBLEBUFFER_MODE_ENABLE DMA_SxCR_DBM /*!< Enable double buffering mode */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PERIPH PERIPH + * @{ + */ +#define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */ +#define LL_DMA_PERIPH_INCREMENT DMA_SxCR_PINC /*!< Peripheral increment mode Enable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MEMORY MEMORY + * @{ + */ +#define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */ +#define LL_DMA_MEMORY_INCREMENT DMA_SxCR_MINC /*!< Memory increment mode Enable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PDATAALIGN PDATAALIGN + * @{ + */ +#define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */ +#define LL_DMA_PDATAALIGN_HALFWORD DMA_SxCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */ +#define LL_DMA_PDATAALIGN_WORD DMA_SxCR_PSIZE_1 /*!< Peripheral data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MDATAALIGN MDATAALIGN + * @{ + */ +#define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */ +#define LL_DMA_MDATAALIGN_HALFWORD DMA_SxCR_MSIZE_0 /*!< Memory data alignment : HalfWord */ +#define LL_DMA_MDATAALIGN_WORD DMA_SxCR_MSIZE_1 /*!< Memory data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_OFFSETSIZE OFFSETSIZE + * @{ + */ +#define LL_DMA_OFFSETSIZE_PSIZE 0x00000000U /*!< Peripheral increment offset size is linked to the PSIZE */ +#define LL_DMA_OFFSETSIZE_FIXEDTO4 DMA_SxCR_PINCOS /*!< Peripheral increment offset size is fixed to 4 (32-bit alignment) */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PRIORITY PRIORITY + * @{ + */ +#define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */ +#define LL_DMA_PRIORITY_MEDIUM DMA_SxCR_PL_0 /*!< Priority level : Medium */ +#define LL_DMA_PRIORITY_HIGH DMA_SxCR_PL_1 /*!< Priority level : High */ +#define LL_DMA_PRIORITY_VERYHIGH DMA_SxCR_PL /*!< Priority level : Very_High */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_CHANNEL CHANNEL + * @{ + */ +#define LL_DMA_CHANNEL_0 0x00000000U /* Select Channel0 of DMA Instance */ +#define LL_DMA_CHANNEL_1 DMA_SxCR_CHSEL_0 /* Select Channel1 of DMA Instance */ +#define LL_DMA_CHANNEL_2 DMA_SxCR_CHSEL_1 /* Select Channel2 of DMA Instance */ +#define LL_DMA_CHANNEL_3 (DMA_SxCR_CHSEL_0 | DMA_SxCR_CHSEL_1) /* Select Channel3 of DMA Instance */ +#define LL_DMA_CHANNEL_4 DMA_SxCR_CHSEL_2 /* Select Channel4 of DMA Instance */ +#define LL_DMA_CHANNEL_5 (DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_0) /* Select Channel5 of DMA Instance */ +#define LL_DMA_CHANNEL_6 (DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1) /* Select Channel6 of DMA Instance */ +#define LL_DMA_CHANNEL_7 (DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0) /* Select Channel7 of DMA Instance */ +#if defined (DMA_SxCR_CHSEL_3) +#define LL_DMA_CHANNEL_8 DMA_SxCR_CHSEL_3 /* Select Channel8 of DMA Instance */ +#define LL_DMA_CHANNEL_9 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_0) /* Select Channel9 of DMA Instance */ +#define LL_DMA_CHANNEL_10 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_1) /* Select Channel10 of DMA Instance */ +#define LL_DMA_CHANNEL_11 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0) /* Select Channel11 of DMA Instance */ +#define LL_DMA_CHANNEL_12 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2) /* Select Channel12 of DMA Instance */ +#define LL_DMA_CHANNEL_13 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_0) /* Select Channel13 of DMA Instance */ +#define LL_DMA_CHANNEL_14 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1) /* Select Channel14 of DMA Instance */ +#define LL_DMA_CHANNEL_15 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0) /* Select Channel15 of DMA Instance */ +#endif /* DMA_SxCR_CHSEL_3 */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MBURST MBURST + * @{ + */ +#define LL_DMA_MBURST_SINGLE 0x00000000U /*!< Memory burst single transfer configuration */ +#define LL_DMA_MBURST_INC4 DMA_SxCR_MBURST_0 /*!< Memory burst of 4 beats transfer configuration */ +#define LL_DMA_MBURST_INC8 DMA_SxCR_MBURST_1 /*!< Memory burst of 8 beats transfer configuration */ +#define LL_DMA_MBURST_INC16 (DMA_SxCR_MBURST_0 | DMA_SxCR_MBURST_1) /*!< Memory burst of 16 beats transfer configuration */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PBURST PBURST + * @{ + */ +#define LL_DMA_PBURST_SINGLE 0x00000000U /*!< Peripheral burst single transfer configuration */ +#define LL_DMA_PBURST_INC4 DMA_SxCR_PBURST_0 /*!< Peripheral burst of 4 beats transfer configuration */ +#define LL_DMA_PBURST_INC8 DMA_SxCR_PBURST_1 /*!< Peripheral burst of 8 beats transfer configuration */ +#define LL_DMA_PBURST_INC16 (DMA_SxCR_PBURST_0 | DMA_SxCR_PBURST_1) /*!< Peripheral burst of 16 beats transfer configuration */ +/** + * @} + */ + +/** @defgroup DMA_LL_FIFOMODE DMA_LL_FIFOMODE + * @{ + */ +#define LL_DMA_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable (direct mode is enabled) */ +#define LL_DMA_FIFOMODE_ENABLE DMA_SxFCR_DMDIS /*!< FIFO mode enable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_FIFOSTATUS_0 FIFOSTATUS 0 + * @{ + */ +#define LL_DMA_FIFOSTATUS_0_25 0x00000000U /*!< 0 < fifo_level < 1/4 */ +#define LL_DMA_FIFOSTATUS_25_50 DMA_SxFCR_FS_0 /*!< 1/4 < fifo_level < 1/2 */ +#define LL_DMA_FIFOSTATUS_50_75 DMA_SxFCR_FS_1 /*!< 1/2 < fifo_level < 3/4 */ +#define LL_DMA_FIFOSTATUS_75_100 (DMA_SxFCR_FS_1 | DMA_SxFCR_FS_0) /*!< 3/4 < fifo_level < full */ +#define LL_DMA_FIFOSTATUS_EMPTY DMA_SxFCR_FS_2 /*!< FIFO is empty */ +#define LL_DMA_FIFOSTATUS_FULL (DMA_SxFCR_FS_2 | DMA_SxFCR_FS_0) /*!< FIFO is full */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_FIFOTHRESHOLD FIFOTHRESHOLD + * @{ + */ +#define LL_DMA_FIFOTHRESHOLD_1_4 0x00000000U /*!< FIFO threshold 1 quart full configuration */ +#define LL_DMA_FIFOTHRESHOLD_1_2 DMA_SxFCR_FTH_0 /*!< FIFO threshold half full configuration */ +#define LL_DMA_FIFOTHRESHOLD_3_4 DMA_SxFCR_FTH_1 /*!< FIFO threshold 3 quarts full configuration */ +#define LL_DMA_FIFOTHRESHOLD_FULL DMA_SxFCR_FTH /*!< FIFO threshold full configuration */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_CURRENTTARGETMEM CURRENTTARGETMEM + * @{ + */ +#define LL_DMA_CURRENTTARGETMEM0 0x00000000U /*!< Set CurrentTarget Memory to Memory 0 */ +#define LL_DMA_CURRENTTARGETMEM1 DMA_SxCR_CT /*!< Set CurrentTarget Memory to Memory 1 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMA_LL_Exported_Macros DMA Exported Macros + * @{ + */ + +/** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros + * @{ + */ +/** + * @brief Write a value in DMA register + * @param __INSTANCE__ DMA Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in DMA register + * @param __INSTANCE__ DMA Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxStreamy + * @{ + */ +/** + * @brief Convert DMAx_Streamy into DMAx + * @param __STREAM_INSTANCE__ DMAx_Streamy + * @retval DMAx + */ +#define __LL_DMA_GET_INSTANCE(__STREAM_INSTANCE__) \ +(((uint32_t)(__STREAM_INSTANCE__) > ((uint32_t)DMA1_Stream7)) ? DMA2 : DMA1) + +/** + * @brief Convert DMAx_Streamy into LL_DMA_STREAM_y + * @param __STREAM_INSTANCE__ DMAx_Streamy + * @retval LL_DMA_CHANNEL_y + */ +#define __LL_DMA_GET_STREAM(__STREAM_INSTANCE__) \ +(((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream0)) ? LL_DMA_STREAM_0 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream0)) ? LL_DMA_STREAM_0 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream1)) ? LL_DMA_STREAM_1 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream1)) ? LL_DMA_STREAM_1 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream2)) ? LL_DMA_STREAM_2 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream2)) ? LL_DMA_STREAM_2 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream3)) ? LL_DMA_STREAM_3 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream3)) ? LL_DMA_STREAM_3 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream4)) ? LL_DMA_STREAM_4 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream4)) ? LL_DMA_STREAM_4 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream5)) ? LL_DMA_STREAM_5 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream5)) ? LL_DMA_STREAM_5 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream6)) ? LL_DMA_STREAM_6 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream6)) ? LL_DMA_STREAM_6 : \ + LL_DMA_STREAM_7) + +/** + * @brief Convert DMA Instance DMAx and LL_DMA_STREAM_y into DMAx_Streamy + * @param __DMA_INSTANCE__ DMAx + * @param __STREAM__ LL_DMA_STREAM_y + * @retval DMAx_Streamy + */ +#define __LL_DMA_GET_STREAM_INSTANCE(__DMA_INSTANCE__, __STREAM__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_0))) ? DMA1_Stream0 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_0))) ? DMA2_Stream0 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_1))) ? DMA1_Stream1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_1))) ? DMA2_Stream1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_2))) ? DMA1_Stream2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_2))) ? DMA2_Stream2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_3))) ? DMA1_Stream3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_3))) ? DMA2_Stream3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_4))) ? DMA1_Stream4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_4))) ? DMA2_Stream4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_5))) ? DMA1_Stream5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_5))) ? DMA2_Stream5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_6))) ? DMA1_Stream6 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_6))) ? DMA2_Stream6 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_7))) ? DMA1_Stream7 : \ + DMA2_Stream7) + +/** + * @} + */ + +/** + * @} + */ + + +/* Exported functions --------------------------------------------------------*/ + /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @defgroup DMA_LL_EF_Configuration Configuration + * @{ + */ +/** + * @brief Enable DMA stream. + * @rmtoll CR EN LL_DMA_EnableStream + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableStream(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_EN); +} + +/** + * @brief Disable DMA stream. + * @rmtoll CR EN LL_DMA_DisableStream + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableStream(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_EN); +} + +/** + * @brief Check if DMA stream is enabled or disabled. + * @rmtoll CR EN LL_DMA_IsEnabledStream + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledStream(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_EN) == (DMA_SxCR_EN)); +} + +/** + * @brief Configure all parameters linked to DMA transfer. + * @rmtoll CR DIR LL_DMA_ConfigTransfer\n + * CR CIRC LL_DMA_ConfigTransfer\n + * CR PINC LL_DMA_ConfigTransfer\n + * CR MINC LL_DMA_ConfigTransfer\n + * CR PSIZE LL_DMA_ConfigTransfer\n + * CR MSIZE LL_DMA_ConfigTransfer\n + * CR PL LL_DMA_ConfigTransfer\n + * CR PFCTRL LL_DMA_ConfigTransfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Configuration This parameter must be a combination of all the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + * @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR or @ref LL_DMA_MODE_PFCTRL + * @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT + * @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT + * @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD + * @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD + * @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH + *@retval None + */ +__STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Configuration) +{ + MODIFY_REG(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, + DMA_SxCR_DIR | DMA_SxCR_CIRC | DMA_SxCR_PINC | DMA_SxCR_MINC | DMA_SxCR_PSIZE | DMA_SxCR_MSIZE | DMA_SxCR_PL | DMA_SxCR_PFCTRL, + Configuration); +} + +/** + * @brief Set Data transfer direction (read from peripheral or from memory). + * @rmtoll CR DIR LL_DMA_SetDataTransferDirection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Direction This parameter can be one of the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Direction) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DIR, Direction); +} + +/** + * @brief Get Data transfer direction (read from peripheral or from memory). + * @rmtoll CR DIR LL_DMA_GetDataTransferDirection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + */ +__STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DIR)); +} + +/** + * @brief Set DMA mode normal, circular or peripheral flow control. + * @rmtoll CR CIRC LL_DMA_SetMode\n + * CR PFCTRL LL_DMA_SetMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_DMA_MODE_NORMAL + * @arg @ref LL_DMA_MODE_CIRCULAR + * @arg @ref LL_DMA_MODE_PFCTRL + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Mode) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CIRC | DMA_SxCR_PFCTRL, Mode); +} + +/** + * @brief Get DMA mode normal, circular or peripheral flow control. + * @rmtoll CR CIRC LL_DMA_GetMode\n + * CR PFCTRL LL_DMA_GetMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MODE_NORMAL + * @arg @ref LL_DMA_MODE_CIRCULAR + * @arg @ref LL_DMA_MODE_PFCTRL + */ +__STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CIRC | DMA_SxCR_PFCTRL)); +} + +/** + * @brief Set Peripheral increment mode. + * @rmtoll CR PINC LL_DMA_SetPeriphIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param IncrementMode This parameter can be one of the following values: + * @arg @ref LL_DMA_PERIPH_NOINCREMENT + * @arg @ref LL_DMA_PERIPH_INCREMENT + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t IncrementMode) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINC, IncrementMode); +} + +/** + * @brief Get Peripheral increment mode. + * @rmtoll CR PINC LL_DMA_GetPeriphIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PERIPH_NOINCREMENT + * @arg @ref LL_DMA_PERIPH_INCREMENT + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINC)); +} + +/** + * @brief Set Memory increment mode. + * @rmtoll CR MINC LL_DMA_SetMemoryIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param IncrementMode This parameter can be one of the following values: + * @arg @ref LL_DMA_MEMORY_NOINCREMENT + * @arg @ref LL_DMA_MEMORY_INCREMENT + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t IncrementMode) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MINC, IncrementMode); +} + +/** + * @brief Get Memory increment mode. + * @rmtoll CR MINC LL_DMA_GetMemoryIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MEMORY_NOINCREMENT + * @arg @ref LL_DMA_MEMORY_INCREMENT + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MINC)); +} + +/** + * @brief Set Peripheral size. + * @rmtoll CR PSIZE LL_DMA_SetPeriphSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Size This parameter can be one of the following values: + * @arg @ref LL_DMA_PDATAALIGN_BYTE + * @arg @ref LL_DMA_PDATAALIGN_HALFWORD + * @arg @ref LL_DMA_PDATAALIGN_WORD + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Size) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PSIZE, Size); +} + +/** + * @brief Get Peripheral size. + * @rmtoll CR PSIZE LL_DMA_GetPeriphSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PDATAALIGN_BYTE + * @arg @ref LL_DMA_PDATAALIGN_HALFWORD + * @arg @ref LL_DMA_PDATAALIGN_WORD + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PSIZE)); +} + +/** + * @brief Set Memory size. + * @rmtoll CR MSIZE LL_DMA_SetMemorySize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Size This parameter can be one of the following values: + * @arg @ref LL_DMA_MDATAALIGN_BYTE + * @arg @ref LL_DMA_MDATAALIGN_HALFWORD + * @arg @ref LL_DMA_MDATAALIGN_WORD + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Size) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MSIZE, Size); +} + +/** + * @brief Get Memory size. + * @rmtoll CR MSIZE LL_DMA_GetMemorySize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MDATAALIGN_BYTE + * @arg @ref LL_DMA_MDATAALIGN_HALFWORD + * @arg @ref LL_DMA_MDATAALIGN_WORD + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MSIZE)); +} + +/** + * @brief Set Peripheral increment offset size. + * @rmtoll CR PINCOS LL_DMA_SetIncOffsetSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param OffsetSize This parameter can be one of the following values: + * @arg @ref LL_DMA_OFFSETSIZE_PSIZE + * @arg @ref LL_DMA_OFFSETSIZE_FIXEDTO4 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetIncOffsetSize(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t OffsetSize) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINCOS, OffsetSize); +} + +/** + * @brief Get Peripheral increment offset size. + * @rmtoll CR PINCOS LL_DMA_GetIncOffsetSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_OFFSETSIZE_PSIZE + * @arg @ref LL_DMA_OFFSETSIZE_FIXEDTO4 + */ +__STATIC_INLINE uint32_t LL_DMA_GetIncOffsetSize(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINCOS)); +} + +/** + * @brief Set Stream priority level. + * @rmtoll CR PL LL_DMA_SetStreamPriorityLevel + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Priority This parameter can be one of the following values: + * @arg @ref LL_DMA_PRIORITY_LOW + * @arg @ref LL_DMA_PRIORITY_MEDIUM + * @arg @ref LL_DMA_PRIORITY_HIGH + * @arg @ref LL_DMA_PRIORITY_VERYHIGH + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetStreamPriorityLevel(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Priority) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PL, Priority); +} + +/** + * @brief Get Stream priority level. + * @rmtoll CR PL LL_DMA_GetStreamPriorityLevel + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PRIORITY_LOW + * @arg @ref LL_DMA_PRIORITY_MEDIUM + * @arg @ref LL_DMA_PRIORITY_HIGH + * @arg @ref LL_DMA_PRIORITY_VERYHIGH + */ +__STATIC_INLINE uint32_t LL_DMA_GetStreamPriorityLevel(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PL)); +} + +/** + * @brief Set Number of data to transfer. + * @rmtoll NDTR NDT LL_DMA_SetDataLength + * @note This action has no effect if + * stream is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param NbData Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t NbData) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->NDTR, DMA_SxNDT, NbData); +} + +/** + * @brief Get Number of data to transfer. + * @rmtoll NDTR NDT LL_DMA_GetDataLength + * @note Once the stream is enabled, the return value indicate the + * remaining bytes to be transmitted. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->NDTR, DMA_SxNDT)); +} + +/** + * @brief Select Channel number associated to the Stream. + * @rmtoll CR CHSEL LL_DMA_SetChannelSelection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMA_CHANNEL_0 + * @arg @ref LL_DMA_CHANNEL_1 + * @arg @ref LL_DMA_CHANNEL_2 + * @arg @ref LL_DMA_CHANNEL_3 + * @arg @ref LL_DMA_CHANNEL_4 + * @arg @ref LL_DMA_CHANNEL_5 + * @arg @ref LL_DMA_CHANNEL_6 + * @arg @ref LL_DMA_CHANNEL_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetChannelSelection(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Channel) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CHSEL, Channel); +} + +/** + * @brief Get the Channel number associated to the Stream. + * @rmtoll CR CHSEL LL_DMA_GetChannelSelection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_CHANNEL_0 + * @arg @ref LL_DMA_CHANNEL_1 + * @arg @ref LL_DMA_CHANNEL_2 + * @arg @ref LL_DMA_CHANNEL_3 + * @arg @ref LL_DMA_CHANNEL_4 + * @arg @ref LL_DMA_CHANNEL_5 + * @arg @ref LL_DMA_CHANNEL_6 + * @arg @ref LL_DMA_CHANNEL_7 + */ +__STATIC_INLINE uint32_t LL_DMA_GetChannelSelection(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CHSEL)); +} + +/** + * @brief Set Memory burst transfer configuration. + * @rmtoll CR MBURST LL_DMA_SetMemoryBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Mburst This parameter can be one of the following values: + * @arg @ref LL_DMA_MBURST_SINGLE + * @arg @ref LL_DMA_MBURST_INC4 + * @arg @ref LL_DMA_MBURST_INC8 + * @arg @ref LL_DMA_MBURST_INC16 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Mburst) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MBURST, Mburst); +} + +/** + * @brief Get Memory burst transfer configuration. + * @rmtoll CR MBURST LL_DMA_GetMemoryBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MBURST_SINGLE + * @arg @ref LL_DMA_MBURST_INC4 + * @arg @ref LL_DMA_MBURST_INC8 + * @arg @ref LL_DMA_MBURST_INC16 + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MBURST)); +} + +/** + * @brief Set Peripheral burst transfer configuration. + * @rmtoll CR PBURST LL_DMA_SetPeriphBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Pburst This parameter can be one of the following values: + * @arg @ref LL_DMA_PBURST_SINGLE + * @arg @ref LL_DMA_PBURST_INC4 + * @arg @ref LL_DMA_PBURST_INC8 + * @arg @ref LL_DMA_PBURST_INC16 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Pburst) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PBURST, Pburst); +} + +/** + * @brief Get Peripheral burst transfer configuration. + * @rmtoll CR PBURST LL_DMA_GetPeriphBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PBURST_SINGLE + * @arg @ref LL_DMA_PBURST_INC4 + * @arg @ref LL_DMA_PBURST_INC8 + * @arg @ref LL_DMA_PBURST_INC16 + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PBURST)); +} + +/** + * @brief Set Current target (only in double buffer mode) to Memory 1 or Memory 0. + * @rmtoll CR CT LL_DMA_SetCurrentTargetMem + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param CurrentMemory This parameter can be one of the following values: + * @arg @ref LL_DMA_CURRENTTARGETMEM0 + * @arg @ref LL_DMA_CURRENTTARGETMEM1 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetCurrentTargetMem(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t CurrentMemory) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CT, CurrentMemory); +} + +/** + * @brief Get Current target (only in double buffer mode). + * @rmtoll CR CT LL_DMA_GetCurrentTargetMem + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_CURRENTTARGETMEM0 + * @arg @ref LL_DMA_CURRENTTARGETMEM1 + */ +__STATIC_INLINE uint32_t LL_DMA_GetCurrentTargetMem(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CT)); +} + +/** + * @brief Enable the double buffer mode. + * @rmtoll CR DBM LL_DMA_EnableDoubleBufferMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableDoubleBufferMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DBM); +} + +/** + * @brief Disable the double buffer mode. + * @rmtoll CR DBM LL_DMA_DisableDoubleBufferMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableDoubleBufferMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DBM); +} + +/** + * @brief Get FIFO status. + * @rmtoll FCR FS LL_DMA_GetFIFOStatus + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_FIFOSTATUS_0_25 + * @arg @ref LL_DMA_FIFOSTATUS_25_50 + * @arg @ref LL_DMA_FIFOSTATUS_50_75 + * @arg @ref LL_DMA_FIFOSTATUS_75_100 + * @arg @ref LL_DMA_FIFOSTATUS_EMPTY + * @arg @ref LL_DMA_FIFOSTATUS_FULL + */ +__STATIC_INLINE uint32_t LL_DMA_GetFIFOStatus(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FS)); +} + +/** + * @brief Disable Fifo mode. + * @rmtoll FCR DMDIS LL_DMA_DisableFifoMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableFifoMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_DMDIS); +} + +/** + * @brief Enable Fifo mode. + * @rmtoll FCR DMDIS LL_DMA_EnableFifoMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableFifoMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_DMDIS); +} + +/** + * @brief Select FIFO threshold. + * @rmtoll FCR FTH LL_DMA_SetFIFOThreshold + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_2 + * @arg @ref LL_DMA_FIFOTHRESHOLD_3_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_FULL + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetFIFOThreshold(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Threshold) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FTH, Threshold); +} + +/** + * @brief Get FIFO threshold. + * @rmtoll FCR FTH LL_DMA_GetFIFOThreshold + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_2 + * @arg @ref LL_DMA_FIFOTHRESHOLD_3_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_FULL + */ +__STATIC_INLINE uint32_t LL_DMA_GetFIFOThreshold(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FTH)); +} + +/** + * @brief Configure the FIFO . + * @rmtoll FCR FTH LL_DMA_ConfigFifo\n + * FCR DMDIS LL_DMA_ConfigFifo + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param FifoMode This parameter can be one of the following values: + * @arg @ref LL_DMA_FIFOMODE_ENABLE + * @arg @ref LL_DMA_FIFOMODE_DISABLE + * @param FifoThreshold This parameter can be one of the following values: + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_2 + * @arg @ref LL_DMA_FIFOTHRESHOLD_3_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_FULL + * @retval None + */ +__STATIC_INLINE void LL_DMA_ConfigFifo(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t FifoMode, uint32_t FifoThreshold) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FTH|DMA_SxFCR_DMDIS, FifoMode|FifoThreshold); +} + +/** + * @brief Configure the Source and Destination addresses. + * @note This API must not be called when the DMA stream is enabled. + * @rmtoll M0AR M0A LL_DMA_ConfigAddresses\n + * PAR PA LL_DMA_ConfigAddresses + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param SrcAddress Between 0 to 0xFFFFFFFF + * @param DstAddress Between 0 to 0xFFFFFFFF + * @param Direction This parameter can be one of the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + * @retval None + */ +__STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t SrcAddress, uint32_t DstAddress, uint32_t Direction) +{ + /* Direction Memory to Periph */ + if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH) + { + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, SrcAddress); + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, DstAddress); + } + /* Direction Periph to Memory and Memory to Memory */ + else + { + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, SrcAddress); + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, DstAddress); + } +} + +/** + * @brief Set the Memory address. + * @rmtoll M0AR M0A LL_DMA_SetMemoryAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param MemoryAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, MemoryAddress); +} + +/** + * @brief Set the Peripheral address. + * @rmtoll PAR PA LL_DMA_SetPeriphAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param PeriphAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t PeriphAddress) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, PeriphAddress); +} + +/** + * @brief Get the Memory address. + * @rmtoll M0AR M0A LL_DMA_GetMemoryAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR)); +} + +/** + * @brief Get the Peripheral address. + * @rmtoll PAR PA LL_DMA_GetPeriphAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_REG(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR)); +} + +/** + * @brief Set the Memory to Memory Source address. + * @rmtoll PAR PA LL_DMA_SetM2MSrcAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param MemoryAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, MemoryAddress); +} + +/** + * @brief Set the Memory to Memory Destination address. + * @rmtoll M0AR M0A LL_DMA_SetM2MDstAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param MemoryAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t MemoryAddress) + { + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, MemoryAddress); + } + +/** + * @brief Get the Memory to Memory Source address. + * @rmtoll PAR PA LL_DMA_GetM2MSrcAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef* DMAx, uint32_t Stream) + { + return (READ_REG(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR)); + } + +/** + * @brief Get the Memory to Memory Destination address. + * @rmtoll M0AR M0A LL_DMA_GetM2MDstAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR)); +} + +/** + * @brief Set Memory 1 address (used in case of Double buffer mode). + * @rmtoll M1AR M1A LL_DMA_SetMemory1Address + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Address Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemory1Address(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Address) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M1AR, Address); +} + +/** + * @brief Get Memory 1 address (used in case of Double buffer mode). + * @rmtoll M1AR M1A LL_DMA_GetMemory1Address + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemory1Address(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M1AR); +} + +/** + * @} + */ + +/** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Get Stream 0 half transfer flag. + * @rmtoll LISR HTIF0 LL_DMA_IsActiveFlag_HT0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF0)==(DMA_LISR_HTIF0)); +} + +/** + * @brief Get Stream 1 half transfer flag. + * @rmtoll LISR HTIF1 LL_DMA_IsActiveFlag_HT1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF1)==(DMA_LISR_HTIF1)); +} + +/** + * @brief Get Stream 2 half transfer flag. + * @rmtoll LISR HTIF2 LL_DMA_IsActiveFlag_HT2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF2)==(DMA_LISR_HTIF2)); +} + +/** + * @brief Get Stream 3 half transfer flag. + * @rmtoll LISR HTIF3 LL_DMA_IsActiveFlag_HT3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF3)==(DMA_LISR_HTIF3)); +} + +/** + * @brief Get Stream 4 half transfer flag. + * @rmtoll HISR HTIF4 LL_DMA_IsActiveFlag_HT4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF4)==(DMA_HISR_HTIF4)); +} + +/** + * @brief Get Stream 5 half transfer flag. + * @rmtoll HISR HTIF0 LL_DMA_IsActiveFlag_HT5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF5)==(DMA_HISR_HTIF5)); +} + +/** + * @brief Get Stream 6 half transfer flag. + * @rmtoll HISR HTIF6 LL_DMA_IsActiveFlag_HT6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF6)==(DMA_HISR_HTIF6)); +} + +/** + * @brief Get Stream 7 half transfer flag. + * @rmtoll HISR HTIF7 LL_DMA_IsActiveFlag_HT7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF7)==(DMA_HISR_HTIF7)); +} + +/** + * @brief Get Stream 0 transfer complete flag. + * @rmtoll LISR TCIF0 LL_DMA_IsActiveFlag_TC0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF0)==(DMA_LISR_TCIF0)); +} + +/** + * @brief Get Stream 1 transfer complete flag. + * @rmtoll LISR TCIF1 LL_DMA_IsActiveFlag_TC1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF1)==(DMA_LISR_TCIF1)); +} + +/** + * @brief Get Stream 2 transfer complete flag. + * @rmtoll LISR TCIF2 LL_DMA_IsActiveFlag_TC2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF2)==(DMA_LISR_TCIF2)); +} + +/** + * @brief Get Stream 3 transfer complete flag. + * @rmtoll LISR TCIF3 LL_DMA_IsActiveFlag_TC3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF3)==(DMA_LISR_TCIF3)); +} + +/** + * @brief Get Stream 4 transfer complete flag. + * @rmtoll HISR TCIF4 LL_DMA_IsActiveFlag_TC4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF4)==(DMA_HISR_TCIF4)); +} + +/** + * @brief Get Stream 5 transfer complete flag. + * @rmtoll HISR TCIF0 LL_DMA_IsActiveFlag_TC5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF5)==(DMA_HISR_TCIF5)); +} + +/** + * @brief Get Stream 6 transfer complete flag. + * @rmtoll HISR TCIF6 LL_DMA_IsActiveFlag_TC6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF6)==(DMA_HISR_TCIF6)); +} + +/** + * @brief Get Stream 7 transfer complete flag. + * @rmtoll HISR TCIF7 LL_DMA_IsActiveFlag_TC7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF7)==(DMA_HISR_TCIF7)); +} + +/** + * @brief Get Stream 0 transfer error flag. + * @rmtoll LISR TEIF0 LL_DMA_IsActiveFlag_TE0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF0)==(DMA_LISR_TEIF0)); +} + +/** + * @brief Get Stream 1 transfer error flag. + * @rmtoll LISR TEIF1 LL_DMA_IsActiveFlag_TE1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF1)==(DMA_LISR_TEIF1)); +} + +/** + * @brief Get Stream 2 transfer error flag. + * @rmtoll LISR TEIF2 LL_DMA_IsActiveFlag_TE2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF2)==(DMA_LISR_TEIF2)); +} + +/** + * @brief Get Stream 3 transfer error flag. + * @rmtoll LISR TEIF3 LL_DMA_IsActiveFlag_TE3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF3)==(DMA_LISR_TEIF3)); +} + +/** + * @brief Get Stream 4 transfer error flag. + * @rmtoll HISR TEIF4 LL_DMA_IsActiveFlag_TE4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF4)==(DMA_HISR_TEIF4)); +} + +/** + * @brief Get Stream 5 transfer error flag. + * @rmtoll HISR TEIF0 LL_DMA_IsActiveFlag_TE5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF5)==(DMA_HISR_TEIF5)); +} + +/** + * @brief Get Stream 6 transfer error flag. + * @rmtoll HISR TEIF6 LL_DMA_IsActiveFlag_TE6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF6)==(DMA_HISR_TEIF6)); +} + +/** + * @brief Get Stream 7 transfer error flag. + * @rmtoll HISR TEIF7 LL_DMA_IsActiveFlag_TE7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF7)==(DMA_HISR_TEIF7)); +} + +/** + * @brief Get Stream 0 direct mode error flag. + * @rmtoll LISR DMEIF0 LL_DMA_IsActiveFlag_DME0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF0)==(DMA_LISR_DMEIF0)); +} + +/** + * @brief Get Stream 1 direct mode error flag. + * @rmtoll LISR DMEIF1 LL_DMA_IsActiveFlag_DME1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF1)==(DMA_LISR_DMEIF1)); +} + +/** + * @brief Get Stream 2 direct mode error flag. + * @rmtoll LISR DMEIF2 LL_DMA_IsActiveFlag_DME2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF2)==(DMA_LISR_DMEIF2)); +} + +/** + * @brief Get Stream 3 direct mode error flag. + * @rmtoll LISR DMEIF3 LL_DMA_IsActiveFlag_DME3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF3)==(DMA_LISR_DMEIF3)); +} + +/** + * @brief Get Stream 4 direct mode error flag. + * @rmtoll HISR DMEIF4 LL_DMA_IsActiveFlag_DME4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF4)==(DMA_HISR_DMEIF4)); +} + +/** + * @brief Get Stream 5 direct mode error flag. + * @rmtoll HISR DMEIF0 LL_DMA_IsActiveFlag_DME5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF5)==(DMA_HISR_DMEIF5)); +} + +/** + * @brief Get Stream 6 direct mode error flag. + * @rmtoll HISR DMEIF6 LL_DMA_IsActiveFlag_DME6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF6)==(DMA_HISR_DMEIF6)); +} + +/** + * @brief Get Stream 7 direct mode error flag. + * @rmtoll HISR DMEIF7 LL_DMA_IsActiveFlag_DME7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF7)==(DMA_HISR_DMEIF7)); +} + +/** + * @brief Get Stream 0 FIFO error flag. + * @rmtoll LISR FEIF0 LL_DMA_IsActiveFlag_FE0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF0)==(DMA_LISR_FEIF0)); +} + +/** + * @brief Get Stream 1 FIFO error flag. + * @rmtoll LISR FEIF1 LL_DMA_IsActiveFlag_FE1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF1)==(DMA_LISR_FEIF1)); +} + +/** + * @brief Get Stream 2 FIFO error flag. + * @rmtoll LISR FEIF2 LL_DMA_IsActiveFlag_FE2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF2)==(DMA_LISR_FEIF2)); +} + +/** + * @brief Get Stream 3 FIFO error flag. + * @rmtoll LISR FEIF3 LL_DMA_IsActiveFlag_FE3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF3)==(DMA_LISR_FEIF3)); +} + +/** + * @brief Get Stream 4 FIFO error flag. + * @rmtoll HISR FEIF4 LL_DMA_IsActiveFlag_FE4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF4)==(DMA_HISR_FEIF4)); +} + +/** + * @brief Get Stream 5 FIFO error flag. + * @rmtoll HISR FEIF0 LL_DMA_IsActiveFlag_FE5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF5)==(DMA_HISR_FEIF5)); +} + +/** + * @brief Get Stream 6 FIFO error flag. + * @rmtoll HISR FEIF6 LL_DMA_IsActiveFlag_FE6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF6)==(DMA_HISR_FEIF6)); +} + +/** + * @brief Get Stream 7 FIFO error flag. + * @rmtoll HISR FEIF7 LL_DMA_IsActiveFlag_FE7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF7)==(DMA_HISR_FEIF7)); +} + +/** + * @brief Clear Stream 0 half transfer flag. + * @rmtoll LIFCR CHTIF0 LL_DMA_ClearFlag_HT0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF0); +} + +/** + * @brief Clear Stream 1 half transfer flag. + * @rmtoll LIFCR CHTIF1 LL_DMA_ClearFlag_HT1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF1); +} + +/** + * @brief Clear Stream 2 half transfer flag. + * @rmtoll LIFCR CHTIF2 LL_DMA_ClearFlag_HT2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF2); +} + +/** + * @brief Clear Stream 3 half transfer flag. + * @rmtoll LIFCR CHTIF3 LL_DMA_ClearFlag_HT3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF3); +} + +/** + * @brief Clear Stream 4 half transfer flag. + * @rmtoll HIFCR CHTIF4 LL_DMA_ClearFlag_HT4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF4); +} + +/** + * @brief Clear Stream 5 half transfer flag. + * @rmtoll HIFCR CHTIF5 LL_DMA_ClearFlag_HT5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF5); +} + +/** + * @brief Clear Stream 6 half transfer flag. + * @rmtoll HIFCR CHTIF6 LL_DMA_ClearFlag_HT6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF6); +} + +/** + * @brief Clear Stream 7 half transfer flag. + * @rmtoll HIFCR CHTIF7 LL_DMA_ClearFlag_HT7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF7); +} + +/** + * @brief Clear Stream 0 transfer complete flag. + * @rmtoll LIFCR CTCIF0 LL_DMA_ClearFlag_TC0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF0); +} + +/** + * @brief Clear Stream 1 transfer complete flag. + * @rmtoll LIFCR CTCIF1 LL_DMA_ClearFlag_TC1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF1); +} + +/** + * @brief Clear Stream 2 transfer complete flag. + * @rmtoll LIFCR CTCIF2 LL_DMA_ClearFlag_TC2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF2); +} + +/** + * @brief Clear Stream 3 transfer complete flag. + * @rmtoll LIFCR CTCIF3 LL_DMA_ClearFlag_TC3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF3); +} + +/** + * @brief Clear Stream 4 transfer complete flag. + * @rmtoll HIFCR CTCIF4 LL_DMA_ClearFlag_TC4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF4); +} + +/** + * @brief Clear Stream 5 transfer complete flag. + * @rmtoll HIFCR CTCIF5 LL_DMA_ClearFlag_TC5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF5); +} + +/** + * @brief Clear Stream 6 transfer complete flag. + * @rmtoll HIFCR CTCIF6 LL_DMA_ClearFlag_TC6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF6); +} + +/** + * @brief Clear Stream 7 transfer complete flag. + * @rmtoll HIFCR CTCIF7 LL_DMA_ClearFlag_TC7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF7); +} + +/** + * @brief Clear Stream 0 transfer error flag. + * @rmtoll LIFCR CTEIF0 LL_DMA_ClearFlag_TE0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF0); +} + +/** + * @brief Clear Stream 1 transfer error flag. + * @rmtoll LIFCR CTEIF1 LL_DMA_ClearFlag_TE1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF1); +} + +/** + * @brief Clear Stream 2 transfer error flag. + * @rmtoll LIFCR CTEIF2 LL_DMA_ClearFlag_TE2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF2); +} + +/** + * @brief Clear Stream 3 transfer error flag. + * @rmtoll LIFCR CTEIF3 LL_DMA_ClearFlag_TE3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF3); +} + +/** + * @brief Clear Stream 4 transfer error flag. + * @rmtoll HIFCR CTEIF4 LL_DMA_ClearFlag_TE4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF4); +} + +/** + * @brief Clear Stream 5 transfer error flag. + * @rmtoll HIFCR CTEIF5 LL_DMA_ClearFlag_TE5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF5); +} + +/** + * @brief Clear Stream 6 transfer error flag. + * @rmtoll HIFCR CTEIF6 LL_DMA_ClearFlag_TE6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF6); +} + +/** + * @brief Clear Stream 7 transfer error flag. + * @rmtoll HIFCR CTEIF7 LL_DMA_ClearFlag_TE7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF7); +} + +/** + * @brief Clear Stream 0 direct mode error flag. + * @rmtoll LIFCR CDMEIF0 LL_DMA_ClearFlag_DME0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF0); +} + +/** + * @brief Clear Stream 1 direct mode error flag. + * @rmtoll LIFCR CDMEIF1 LL_DMA_ClearFlag_DME1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF1); +} + +/** + * @brief Clear Stream 2 direct mode error flag. + * @rmtoll LIFCR CDMEIF2 LL_DMA_ClearFlag_DME2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF2); +} + +/** + * @brief Clear Stream 3 direct mode error flag. + * @rmtoll LIFCR CDMEIF3 LL_DMA_ClearFlag_DME3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF3); +} + +/** + * @brief Clear Stream 4 direct mode error flag. + * @rmtoll HIFCR CDMEIF4 LL_DMA_ClearFlag_DME4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF4); +} + +/** + * @brief Clear Stream 5 direct mode error flag. + * @rmtoll HIFCR CDMEIF5 LL_DMA_ClearFlag_DME5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF5); +} + +/** + * @brief Clear Stream 6 direct mode error flag. + * @rmtoll HIFCR CDMEIF6 LL_DMA_ClearFlag_DME6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF6); +} + +/** + * @brief Clear Stream 7 direct mode error flag. + * @rmtoll HIFCR CDMEIF7 LL_DMA_ClearFlag_DME7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF7); +} + +/** + * @brief Clear Stream 0 FIFO error flag. + * @rmtoll LIFCR CFEIF0 LL_DMA_ClearFlag_FE0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF0); +} + +/** + * @brief Clear Stream 1 FIFO error flag. + * @rmtoll LIFCR CFEIF1 LL_DMA_ClearFlag_FE1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF1); +} + +/** + * @brief Clear Stream 2 FIFO error flag. + * @rmtoll LIFCR CFEIF2 LL_DMA_ClearFlag_FE2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF2); +} + +/** + * @brief Clear Stream 3 FIFO error flag. + * @rmtoll LIFCR CFEIF3 LL_DMA_ClearFlag_FE3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF3); +} + +/** + * @brief Clear Stream 4 FIFO error flag. + * @rmtoll HIFCR CFEIF4 LL_DMA_ClearFlag_FE4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF4); +} + +/** + * @brief Clear Stream 5 FIFO error flag. + * @rmtoll HIFCR CFEIF5 LL_DMA_ClearFlag_FE5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF5); +} + +/** + * @brief Clear Stream 6 FIFO error flag. + * @rmtoll HIFCR CFEIF6 LL_DMA_ClearFlag_FE6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF6); +} + +/** + * @brief Clear Stream 7 FIFO error flag. + * @rmtoll HIFCR CFEIF7 LL_DMA_ClearFlag_FE7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF7); +} + +/** + * @} + */ + +/** @defgroup DMA_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable Half transfer interrupt. + * @rmtoll CR HTIE LL_DMA_EnableIT_HT + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_HTIE); +} + +/** + * @brief Enable Transfer error interrupt. + * @rmtoll CR TEIE LL_DMA_EnableIT_TE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TEIE); +} + +/** + * @brief Enable Transfer complete interrupt. + * @rmtoll CR TCIE LL_DMA_EnableIT_TC + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TCIE); +} + +/** + * @brief Enable Direct mode error interrupt. + * @rmtoll CR DMEIE LL_DMA_EnableIT_DME + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_DME(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DMEIE); +} + +/** + * @brief Enable FIFO error interrupt. + * @rmtoll FCR FEIE LL_DMA_EnableIT_FE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_FE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FEIE); +} + +/** + * @brief Disable Half transfer interrupt. + * @rmtoll CR HTIE LL_DMA_DisableIT_HT + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_HTIE); +} + +/** + * @brief Disable Transfer error interrupt. + * @rmtoll CR TEIE LL_DMA_DisableIT_TE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TEIE); +} + +/** + * @brief Disable Transfer complete interrupt. + * @rmtoll CR TCIE LL_DMA_DisableIT_TC + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TCIE); +} + +/** + * @brief Disable Direct mode error interrupt. + * @rmtoll CR DMEIE LL_DMA_DisableIT_DME + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_DME(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DMEIE); +} + +/** + * @brief Disable FIFO error interrupt. + * @rmtoll FCR FEIE LL_DMA_DisableIT_FE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_FE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FEIE); +} + +/** + * @brief Check if Half transfer interrupt is enabled. + * @rmtoll CR HTIE LL_DMA_IsEnabledIT_HT + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_HTIE) == DMA_SxCR_HTIE); +} + +/** + * @brief Check if Transfer error nterrup is enabled. + * @rmtoll CR TEIE LL_DMA_IsEnabledIT_TE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TEIE) == DMA_SxCR_TEIE); +} + +/** + * @brief Check if Transfer complete interrupt is enabled. + * @rmtoll CR TCIE LL_DMA_IsEnabledIT_TC + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TCIE) == DMA_SxCR_TCIE); +} + +/** + * @brief Check if Direct mode error interrupt is enabled. + * @rmtoll CR DMEIE LL_DMA_IsEnabledIT_DME + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_DME(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DMEIE) == DMA_SxCR_DMEIE); +} + +/** + * @brief Check if FIFO error interrupt is enabled. + * @rmtoll FCR FEIE LL_DMA_IsEnabledIT_FE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_FE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FEIE) == DMA_SxFCR_FEIE); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Stream, LL_DMA_InitTypeDef *DMA_InitStruct); +uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Stream); +void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DMA1 || DMA2 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_DMA_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h new file mode 100644 index 00000000..65ab6918 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h @@ -0,0 +1,954 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_exti.h + * @author MCD Application Team + * @brief Header file of EXTI LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS.Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_EXTI_H +#define __STM32F4xx_LL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (EXTI) + +/** @defgroup EXTI_LL EXTI + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private Macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup EXTI_LL_Private_Macros EXTI Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup EXTI_LL_ES_INIT EXTI Exported Init structure + * @{ + */ +typedef struct +{ + + uint32_t Line_0_31; /*!< Specifies the EXTI lines to be enabled or disabled for Lines in range 0 to 31 + This parameter can be any combination of @ref EXTI_LL_EC_LINE */ + + FunctionalState LineCommand; /*!< Specifies the new state of the selected EXTI lines. + This parameter can be set either to ENABLE or DISABLE */ + + uint8_t Mode; /*!< Specifies the mode for the EXTI lines. + This parameter can be a value of @ref EXTI_LL_EC_MODE. */ + + uint8_t Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines. + This parameter can be a value of @ref EXTI_LL_EC_TRIGGER. */ +} LL_EXTI_InitTypeDef; + +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup EXTI_LL_Exported_Constants EXTI Exported Constants + * @{ + */ + +/** @defgroup EXTI_LL_EC_LINE LINE + * @{ + */ +#define LL_EXTI_LINE_0 EXTI_IMR_IM0 /*!< Extended line 0 */ +#define LL_EXTI_LINE_1 EXTI_IMR_IM1 /*!< Extended line 1 */ +#define LL_EXTI_LINE_2 EXTI_IMR_IM2 /*!< Extended line 2 */ +#define LL_EXTI_LINE_3 EXTI_IMR_IM3 /*!< Extended line 3 */ +#define LL_EXTI_LINE_4 EXTI_IMR_IM4 /*!< Extended line 4 */ +#define LL_EXTI_LINE_5 EXTI_IMR_IM5 /*!< Extended line 5 */ +#define LL_EXTI_LINE_6 EXTI_IMR_IM6 /*!< Extended line 6 */ +#define LL_EXTI_LINE_7 EXTI_IMR_IM7 /*!< Extended line 7 */ +#define LL_EXTI_LINE_8 EXTI_IMR_IM8 /*!< Extended line 8 */ +#define LL_EXTI_LINE_9 EXTI_IMR_IM9 /*!< Extended line 9 */ +#define LL_EXTI_LINE_10 EXTI_IMR_IM10 /*!< Extended line 10 */ +#define LL_EXTI_LINE_11 EXTI_IMR_IM11 /*!< Extended line 11 */ +#define LL_EXTI_LINE_12 EXTI_IMR_IM12 /*!< Extended line 12 */ +#define LL_EXTI_LINE_13 EXTI_IMR_IM13 /*!< Extended line 13 */ +#define LL_EXTI_LINE_14 EXTI_IMR_IM14 /*!< Extended line 14 */ +#define LL_EXTI_LINE_15 EXTI_IMR_IM15 /*!< Extended line 15 */ +#if defined(EXTI_IMR_IM16) +#define LL_EXTI_LINE_16 EXTI_IMR_IM16 /*!< Extended line 16 */ +#endif +#define LL_EXTI_LINE_17 EXTI_IMR_IM17 /*!< Extended line 17 */ +#if defined(EXTI_IMR_IM18) +#define LL_EXTI_LINE_18 EXTI_IMR_IM18 /*!< Extended line 18 */ +#endif +#define LL_EXTI_LINE_19 EXTI_IMR_IM19 /*!< Extended line 19 */ +#if defined(EXTI_IMR_IM20) +#define LL_EXTI_LINE_20 EXTI_IMR_IM20 /*!< Extended line 20 */ +#endif +#if defined(EXTI_IMR_IM21) +#define LL_EXTI_LINE_21 EXTI_IMR_IM21 /*!< Extended line 21 */ +#endif +#if defined(EXTI_IMR_IM22) +#define LL_EXTI_LINE_22 EXTI_IMR_IM22 /*!< Extended line 22 */ +#endif +#if defined(EXTI_IMR_IM23) +#define LL_EXTI_LINE_23 EXTI_IMR_IM23 /*!< Extended line 23 */ +#endif +#if defined(EXTI_IMR_IM24) +#define LL_EXTI_LINE_24 EXTI_IMR_IM24 /*!< Extended line 24 */ +#endif +#if defined(EXTI_IMR_IM25) +#define LL_EXTI_LINE_25 EXTI_IMR_IM25 /*!< Extended line 25 */ +#endif +#if defined(EXTI_IMR_IM26) +#define LL_EXTI_LINE_26 EXTI_IMR_IM26 /*!< Extended line 26 */ +#endif +#if defined(EXTI_IMR_IM27) +#define LL_EXTI_LINE_27 EXTI_IMR_IM27 /*!< Extended line 27 */ +#endif +#if defined(EXTI_IMR_IM28) +#define LL_EXTI_LINE_28 EXTI_IMR_IM28 /*!< Extended line 28 */ +#endif +#if defined(EXTI_IMR_IM29) +#define LL_EXTI_LINE_29 EXTI_IMR_IM29 /*!< Extended line 29 */ +#endif +#if defined(EXTI_IMR_IM30) +#define LL_EXTI_LINE_30 EXTI_IMR_IM30 /*!< Extended line 30 */ +#endif +#if defined(EXTI_IMR_IM31) +#define LL_EXTI_LINE_31 EXTI_IMR_IM31 /*!< Extended line 31 */ +#endif +#define LL_EXTI_LINE_ALL_0_31 EXTI_IMR_IM /*!< All Extended line not reserved*/ + + +#define LL_EXTI_LINE_ALL ((uint32_t)0xFFFFFFFFU) /*!< All Extended line */ + +#if defined(USE_FULL_LL_DRIVER) +#define LL_EXTI_LINE_NONE ((uint32_t)0x00000000U) /*!< None Extended line */ +#endif /*USE_FULL_LL_DRIVER*/ + +/** + * @} + */ +#if defined(USE_FULL_LL_DRIVER) + +/** @defgroup EXTI_LL_EC_MODE Mode + * @{ + */ +#define LL_EXTI_MODE_IT ((uint8_t)0x00U) /*!< Interrupt Mode */ +#define LL_EXTI_MODE_EVENT ((uint8_t)0x01U) /*!< Event Mode */ +#define LL_EXTI_MODE_IT_EVENT ((uint8_t)0x02U) /*!< Interrupt & Event Mode */ +/** + * @} + */ + +/** @defgroup EXTI_LL_EC_TRIGGER Edge Trigger + * @{ + */ +#define LL_EXTI_TRIGGER_NONE ((uint8_t)0x00U) /*!< No Trigger Mode */ +#define LL_EXTI_TRIGGER_RISING ((uint8_t)0x01U) /*!< Trigger Rising Mode */ +#define LL_EXTI_TRIGGER_FALLING ((uint8_t)0x02U) /*!< Trigger Falling Mode */ +#define LL_EXTI_TRIGGER_RISING_FALLING ((uint8_t)0x03U) /*!< Trigger Rising & Falling Mode */ + +/** + * @} + */ + + +#endif /*USE_FULL_LL_DRIVER*/ + + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup EXTI_LL_Exported_Macros EXTI Exported Macros + * @{ + */ + +/** @defgroup EXTI_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in EXTI register + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_EXTI_WriteReg(__REG__, __VALUE__) WRITE_REG(EXTI->__REG__, (__VALUE__)) + +/** + * @brief Read a value in EXTI register + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_EXTI_ReadReg(__REG__) READ_REG(EXTI->__REG__) +/** + * @} + */ + + +/** + * @} + */ + + + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup EXTI_LL_Exported_Functions EXTI Exported Functions + * @{ + */ +/** @defgroup EXTI_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Interrupt request for Lines in range 0 to 31 + * @note The reset value for the direct or internal lines (see RM) + * is set to 1 in order to enable the interrupt by default. + * Bits are set automatically at Power on. + * @rmtoll IMR IMx LL_EXTI_EnableIT_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableIT_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->IMR, ExtiLine); +} + +/** + * @brief Disable ExtiLine Interrupt request for Lines in range 0 to 31 + * @note The reset value for the direct or internal lines (see RM) + * is set to 1 in order to enable the interrupt by default. + * Bits are set automatically at Power on. + * @rmtoll IMR IMx LL_EXTI_DisableIT_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableIT_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->IMR, ExtiLine); +} + + +/** + * @brief Indicate if ExtiLine Interrupt request is enabled for Lines in range 0 to 31 + * @note The reset value for the direct or internal lines (see RM) + * is set to 1 in order to enable the interrupt by default. + * Bits are set automatically at Power on. + * @rmtoll IMR IMx LL_EXTI_IsEnabledIT_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledIT_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->IMR, ExtiLine) == (ExtiLine)); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Event_Management Event_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Event request for Lines in range 0 to 31 + * @rmtoll EMR EMx LL_EXTI_EnableEvent_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableEvent_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->EMR, ExtiLine); + +} + + +/** + * @brief Disable ExtiLine Event request for Lines in range 0 to 31 + * @rmtoll EMR EMx LL_EXTI_DisableEvent_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableEvent_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->EMR, ExtiLine); +} + + +/** + * @brief Indicate if ExtiLine Event request is enabled for Lines in range 0 to 31 + * @rmtoll EMR EMx LL_EXTI_IsEnabledEvent_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledEvent_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->EMR, ExtiLine) == (ExtiLine)); + +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Rising_Trigger_Management Rising_Trigger_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Rising Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a rising edge on a configurable interrupt + * line occurs during a write operation in the EXTI_RTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for + * the same interrupt line. In this case, both generate a trigger + * condition. + * @rmtoll RTSR RTx LL_EXTI_EnableRisingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableRisingTrig_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->RTSR, ExtiLine); + +} + + +/** + * @brief Disable ExtiLine Rising Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a rising edge on a configurable interrupt + * line occurs during a write operation in the EXTI_RTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for + * the same interrupt line. In this case, both generate a trigger + * condition. + * @rmtoll RTSR RTx LL_EXTI_DisableRisingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableRisingTrig_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->RTSR, ExtiLine); + +} + + +/** + * @brief Check if rising edge trigger is enabled for Lines in range 0 to 31 + * @rmtoll RTSR RTx LL_EXTI_IsEnabledRisingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledRisingTrig_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->RTSR, ExtiLine) == (ExtiLine)); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Falling_Trigger_Management Falling_Trigger_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Falling Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a falling edge on a configurable interrupt + * line occurs during a write operation in the EXTI_FTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for + * the same interrupt line. In this case, both generate a trigger + * condition. + * @rmtoll FTSR FTx LL_EXTI_EnableFallingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableFallingTrig_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->FTSR, ExtiLine); +} + + +/** + * @brief Disable ExtiLine Falling Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a Falling edge on a configurable interrupt + * line occurs during a write operation in the EXTI_FTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for the same interrupt line. + * In this case, both generate a trigger condition. + * @rmtoll FTSR FTx LL_EXTI_DisableFallingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableFallingTrig_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->FTSR, ExtiLine); +} + + +/** + * @brief Check if falling edge trigger is enabled for Lines in range 0 to 31 + * @rmtoll FTSR FTx LL_EXTI_IsEnabledFallingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledFallingTrig_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->FTSR, ExtiLine) == (ExtiLine)); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Software_Interrupt_Management Software_Interrupt_Management + * @{ + */ + +/** + * @brief Generate a software Interrupt Event for Lines in range 0 to 31 + * @note If the interrupt is enabled on this line in the EXTI_IMR, writing a 1 to + * this bit when it is at '0' sets the corresponding pending bit in EXTI_PR + * resulting in an interrupt request generation. + * This bit is cleared by clearing the corresponding bit in the EXTI_PR + * register (by writing a 1 into the bit) + * @rmtoll SWIER SWIx LL_EXTI_GenerateSWI_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_GenerateSWI_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->SWIER, ExtiLine); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Flag_Management Flag_Management + * @{ + */ + +/** + * @brief Check if the ExtLine Flag is set or not for Lines in range 0 to 31 + * @note This bit is set when the selected edge event arrives on the interrupt + * line. This bit is cleared by writing a 1 to the bit. + * @rmtoll PR PIFx LL_EXTI_IsActiveFlag_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsActiveFlag_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->PR, ExtiLine) == (ExtiLine)); +} + + +/** + * @brief Read ExtLine Combination Flag for Lines in range 0 to 31 + * @note This bit is set when the selected edge event arrives on the interrupt + * line. This bit is cleared by writing a 1 to the bit. + * @rmtoll PR PIFx LL_EXTI_ReadFlag_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval @note This bit is set when the selected edge event arrives on the interrupt + */ +__STATIC_INLINE uint32_t LL_EXTI_ReadFlag_0_31(uint32_t ExtiLine) +{ + return (uint32_t)(READ_BIT(EXTI->PR, ExtiLine)); +} + + +/** + * @brief Clear ExtLine Flags for Lines in range 0 to 31 + * @note This bit is set when the selected edge event arrives on the interrupt + * line. This bit is cleared by writing a 1 to the bit. + * @rmtoll PR PIFx LL_EXTI_ClearFlag_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_ClearFlag_0_31(uint32_t ExtiLine) +{ + WRITE_REG(EXTI->PR, ExtiLine); +} + + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup EXTI_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct); +uint32_t LL_EXTI_DeInit(void); +void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct); + + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EXTI */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_EXTI_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h new file mode 100644 index 00000000..6bee7fd1 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h @@ -0,0 +1,981 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_gpio.h + * @author MCD Application Team + * @brief Header file of GPIO LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_GPIO_H +#define __STM32F4xx_LL_GPIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) + +/** @defgroup GPIO_LL GPIO + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup GPIO_LL_Private_Macros GPIO Private Macros + * @{ + */ + +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures + * @{ + */ + +/** + * @brief LL GPIO Init Structure definition + */ +typedef struct +{ + uint32_t Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_LL_EC_PIN */ + + uint32_t Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_MODE. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/ + + uint32_t Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_SPEED. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/ + + uint32_t OutputType; /*!< Specifies the operating output type for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_OUTPUT. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/ + + uint32_t Pull; /*!< Specifies the operating Pull-up/Pull down for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_PULL. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/ + + uint32_t Alternate; /*!< Specifies the Peripheral to be connected to the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_AF. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/ +} LL_GPIO_InitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_LL_EC_PIN PIN + * @{ + */ +#define LL_GPIO_PIN_0 GPIO_BSRR_BS_0 /*!< Select pin 0 */ +#define LL_GPIO_PIN_1 GPIO_BSRR_BS_1 /*!< Select pin 1 */ +#define LL_GPIO_PIN_2 GPIO_BSRR_BS_2 /*!< Select pin 2 */ +#define LL_GPIO_PIN_3 GPIO_BSRR_BS_3 /*!< Select pin 3 */ +#define LL_GPIO_PIN_4 GPIO_BSRR_BS_4 /*!< Select pin 4 */ +#define LL_GPIO_PIN_5 GPIO_BSRR_BS_5 /*!< Select pin 5 */ +#define LL_GPIO_PIN_6 GPIO_BSRR_BS_6 /*!< Select pin 6 */ +#define LL_GPIO_PIN_7 GPIO_BSRR_BS_7 /*!< Select pin 7 */ +#define LL_GPIO_PIN_8 GPIO_BSRR_BS_8 /*!< Select pin 8 */ +#define LL_GPIO_PIN_9 GPIO_BSRR_BS_9 /*!< Select pin 9 */ +#define LL_GPIO_PIN_10 GPIO_BSRR_BS_10 /*!< Select pin 10 */ +#define LL_GPIO_PIN_11 GPIO_BSRR_BS_11 /*!< Select pin 11 */ +#define LL_GPIO_PIN_12 GPIO_BSRR_BS_12 /*!< Select pin 12 */ +#define LL_GPIO_PIN_13 GPIO_BSRR_BS_13 /*!< Select pin 13 */ +#define LL_GPIO_PIN_14 GPIO_BSRR_BS_14 /*!< Select pin 14 */ +#define LL_GPIO_PIN_15 GPIO_BSRR_BS_15 /*!< Select pin 15 */ +#define LL_GPIO_PIN_ALL (GPIO_BSRR_BS_0 | GPIO_BSRR_BS_1 | GPIO_BSRR_BS_2 | \ + GPIO_BSRR_BS_3 | GPIO_BSRR_BS_4 | GPIO_BSRR_BS_5 | \ + GPIO_BSRR_BS_6 | GPIO_BSRR_BS_7 | GPIO_BSRR_BS_8 | \ + GPIO_BSRR_BS_9 | GPIO_BSRR_BS_10 | GPIO_BSRR_BS_11 | \ + GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | \ + GPIO_BSRR_BS_15) /*!< Select all pins */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_MODE Mode + * @{ + */ +#define LL_GPIO_MODE_INPUT (0x00000000U) /*!< Select input mode */ +#define LL_GPIO_MODE_OUTPUT GPIO_MODER_MODER0_0 /*!< Select output mode */ +#define LL_GPIO_MODE_ALTERNATE GPIO_MODER_MODER0_1 /*!< Select alternate function mode */ +#define LL_GPIO_MODE_ANALOG GPIO_MODER_MODER0 /*!< Select analog mode */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_OUTPUT Output Type + * @{ + */ +#define LL_GPIO_OUTPUT_PUSHPULL (0x00000000U) /*!< Select push-pull as output type */ +#define LL_GPIO_OUTPUT_OPENDRAIN GPIO_OTYPER_OT_0 /*!< Select open-drain as output type */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_SPEED Output Speed + * @{ + */ +#define LL_GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< Select I/O low output speed */ +#define LL_GPIO_SPEED_FREQ_MEDIUM GPIO_OSPEEDER_OSPEEDR0_0 /*!< Select I/O medium output speed */ +#define LL_GPIO_SPEED_FREQ_HIGH GPIO_OSPEEDER_OSPEEDR0_1 /*!< Select I/O fast output speed */ +#define LL_GPIO_SPEED_FREQ_VERY_HIGH GPIO_OSPEEDER_OSPEEDR0 /*!< Select I/O high output speed */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down + * @{ + */ +#define LL_GPIO_PULL_NO (0x00000000U) /*!< Select I/O no pull */ +#define LL_GPIO_PULL_UP GPIO_PUPDR_PUPDR0_0 /*!< Select I/O pull up */ +#define LL_GPIO_PULL_DOWN GPIO_PUPDR_PUPDR0_1 /*!< Select I/O pull down */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_AF Alternate Function + * @{ + */ +#define LL_GPIO_AF_0 (0x0000000U) /*!< Select alternate function 0 */ +#define LL_GPIO_AF_1 (0x0000001U) /*!< Select alternate function 1 */ +#define LL_GPIO_AF_2 (0x0000002U) /*!< Select alternate function 2 */ +#define LL_GPIO_AF_3 (0x0000003U) /*!< Select alternate function 3 */ +#define LL_GPIO_AF_4 (0x0000004U) /*!< Select alternate function 4 */ +#define LL_GPIO_AF_5 (0x0000005U) /*!< Select alternate function 5 */ +#define LL_GPIO_AF_6 (0x0000006U) /*!< Select alternate function 6 */ +#define LL_GPIO_AF_7 (0x0000007U) /*!< Select alternate function 7 */ +#define LL_GPIO_AF_8 (0x0000008U) /*!< Select alternate function 8 */ +#define LL_GPIO_AF_9 (0x0000009U) /*!< Select alternate function 9 */ +#define LL_GPIO_AF_10 (0x000000AU) /*!< Select alternate function 10 */ +#define LL_GPIO_AF_11 (0x000000BU) /*!< Select alternate function 11 */ +#define LL_GPIO_AF_12 (0x000000CU) /*!< Select alternate function 12 */ +#define LL_GPIO_AF_13 (0x000000DU) /*!< Select alternate function 13 */ +#define LL_GPIO_AF_14 (0x000000EU) /*!< Select alternate function 14 */ +#define LL_GPIO_AF_15 (0x000000FU) /*!< Select alternate function 15 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros + * @{ + */ + +/** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in GPIO register + * @param __INSTANCE__ GPIO Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in GPIO register + * @param __INSTANCE__ GPIO Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration + * @{ + */ + +/** + * @brief Configure gpio mode for a dedicated pin on dedicated port. + * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll MODER MODEy LL_GPIO_SetPinMode + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_GPIO_MODE_INPUT + * @arg @ref LL_GPIO_MODE_OUTPUT + * @arg @ref LL_GPIO_MODE_ALTERNATE + * @arg @ref LL_GPIO_MODE_ANALOG + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode) +{ + MODIFY_REG(GPIOx->MODER, (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U)), (Mode << (POSITION_VAL(Pin) * 2U))); +} + +/** + * @brief Return gpio mode for a dedicated pin on dedicated port. + * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll MODER MODEy LL_GPIO_GetPinMode + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_MODE_INPUT + * @arg @ref LL_GPIO_MODE_OUTPUT + * @arg @ref LL_GPIO_MODE_ALTERNATE + * @arg @ref LL_GPIO_MODE_ANALOG + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->MODER, + (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U)); +} + +/** + * @brief Configure gpio output type for several pins on dedicated port. + * @note Output type as to be set when gpio pin is in output or + * alternate modes. Possible type are Push-pull or Open-drain. + * @rmtoll OTYPER OTy LL_GPIO_SetPinOutputType + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @param OutputType This parameter can be one of the following values: + * @arg @ref LL_GPIO_OUTPUT_PUSHPULL + * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType) +{ + MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType)); +} + +/** + * @brief Return gpio output type for several pins on dedicated port. + * @note Output type as to be set when gpio pin is in output or + * alternate modes. Possible type are Push-pull or Open-drain. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll OTYPER OTy LL_GPIO_GetPinOutputType + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_OUTPUT_PUSHPULL + * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) >> POSITION_VAL(Pin)); +} + +/** + * @brief Configure gpio speed for a dedicated pin on dedicated port. + * @note I/O speed can be Low, Medium, Fast or High speed. + * @note Warning: only one pin can be passed as parameter. + * @note Refer to datasheet for frequency specifications and the power + * supply and load conditions for each speed. + * @rmtoll OSPEEDR OSPEEDy LL_GPIO_SetPinSpeed + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Speed This parameter can be one of the following values: + * @arg @ref LL_GPIO_SPEED_FREQ_LOW + * @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM + * @arg @ref LL_GPIO_SPEED_FREQ_HIGH + * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed) +{ + MODIFY_REG(GPIOx->OSPEEDR, (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U)), + (Speed << (POSITION_VAL(Pin) * 2U))); +} + +/** + * @brief Return gpio speed for a dedicated pin on dedicated port. + * @note I/O speed can be Low, Medium, Fast or High speed. + * @note Warning: only one pin can be passed as parameter. + * @note Refer to datasheet for frequency specifications and the power + * supply and load conditions for each speed. + * @rmtoll OSPEEDR OSPEEDy LL_GPIO_GetPinSpeed + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_SPEED_FREQ_LOW + * @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM + * @arg @ref LL_GPIO_SPEED_FREQ_HIGH + * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, + (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U)); +} + +/** + * @brief Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll PUPDR PUPDy LL_GPIO_SetPinPull + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Pull This parameter can be one of the following values: + * @arg @ref LL_GPIO_PULL_NO + * @arg @ref LL_GPIO_PULL_UP + * @arg @ref LL_GPIO_PULL_DOWN + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull) +{ + MODIFY_REG(GPIOx->PUPDR, (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U)), (Pull << (POSITION_VAL(Pin) * 2U))); +} + +/** + * @brief Return gpio pull-up or pull-down for a dedicated pin on a dedicated port + * @note Warning: only one pin can be passed as parameter. + * @rmtoll PUPDR PUPDy LL_GPIO_GetPinPull + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_PULL_NO + * @arg @ref LL_GPIO_PULL_UP + * @arg @ref LL_GPIO_PULL_DOWN + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->PUPDR, + (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U)); +} + +/** + * @brief Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port. + * @note Possible values are from AF0 to AF15 depending on target. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll AFRL AFSELy LL_GPIO_SetAFPin_0_7 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @param Alternate This parameter can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) +{ + MODIFY_REG(GPIOx->AFR[0], (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U)), + (Alternate << (POSITION_VAL(Pin) * 4U))); +} + +/** + * @brief Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port. + * @rmtoll AFRL AFSELy LL_GPIO_GetAFPin_0_7 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->AFR[0], + (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U)); +} + +/** + * @brief Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port. + * @note Possible values are from AF0 to AF15 depending on target. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll AFRH AFSELy LL_GPIO_SetAFPin_8_15 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Alternate This parameter can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) +{ + MODIFY_REG(GPIOx->AFR[1], (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U)), + (Alternate << (POSITION_VAL(Pin >> 8U) * 4U))); +} + +/** + * @brief Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port. + * @note Possible values are from AF0 to AF15 depending on target. + * @rmtoll AFRH AFSELy LL_GPIO_GetAFPin_8_15 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->AFR[1], + (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U))) >> (POSITION_VAL(Pin >> 8U) * 4U)); +} + + +/** + * @brief Lock configuration of several pins for a dedicated port. + * @note When the lock sequence has been applied on a port bit, the + * value of this port bit can no longer be modified until the + * next reset. + * @note Each lock bit freezes a specific configuration register + * (control and alternate function registers). + * @rmtoll LCKR LCKK LL_GPIO_LockPin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + __IO uint32_t temp; + WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask); + WRITE_REG(GPIOx->LCKR, PinMask); + WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask); + temp = READ_REG(GPIOx->LCKR); + (void) temp; +} + +/** + * @brief Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0. + * @rmtoll LCKR LCKy LL_GPIO_IsPinLocked + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + return (READ_BIT(GPIOx->LCKR, PinMask) == (PinMask)); +} + +/** + * @brief Return 1 if one of the pin of a dedicated port is locked. else return 0. + * @rmtoll LCKR LCKK LL_GPIO_IsAnyPinLocked + * @param GPIOx GPIO Port + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx) +{ + return (READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)); +} + +/** + * @} + */ + +/** @defgroup GPIO_LL_EF_Data_Access Data Access + * @{ + */ + +/** + * @brief Return full input data register value for a dedicated port. + * @rmtoll IDR IDy LL_GPIO_ReadInputPort + * @param GPIOx GPIO Port + * @retval Input data register value of port + */ +__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx) +{ + return (uint32_t)(READ_REG(GPIOx->IDR)); +} + +/** + * @brief Return if input data level for several pins of dedicated port is high or low. + * @rmtoll IDR IDy LL_GPIO_IsInputPinSet + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + return (READ_BIT(GPIOx->IDR, PinMask) == (PinMask)); +} + +/** + * @brief Write output data register for the port. + * @rmtoll ODR ODy LL_GPIO_WriteOutputPort + * @param GPIOx GPIO Port + * @param PortValue Level value for each pin of the port + * @retval None + */ +__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue) +{ + WRITE_REG(GPIOx->ODR, PortValue); +} + +/** + * @brief Return full output data register value for a dedicated port. + * @rmtoll ODR ODy LL_GPIO_ReadOutputPort + * @param GPIOx GPIO Port + * @retval Output data register value of port + */ +__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx) +{ + return (uint32_t)(READ_REG(GPIOx->ODR)); +} + +/** + * @brief Return if input data level for several pins of dedicated port is high or low. + * @rmtoll ODR ODy LL_GPIO_IsOutputPinSet + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + return (READ_BIT(GPIOx->ODR, PinMask) == (PinMask)); +} + +/** + * @brief Set several pins to high level on dedicated gpio port. + * @rmtoll BSRR BSy LL_GPIO_SetOutputPin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + WRITE_REG(GPIOx->BSRR, PinMask); +} + +/** + * @brief Set several pins to low level on dedicated gpio port. + * @rmtoll BSRR BRy LL_GPIO_ResetOutputPin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + WRITE_REG(GPIOx->BSRR, (PinMask << 16)); +} + +/** + * @brief Toggle data value for several pin of dedicated port. + * @rmtoll ODR ODy LL_GPIO_TogglePin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + uint32_t odr = READ_REG(GPIOx->ODR); + WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask)); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx); +ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct); +void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) */ +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_GPIO_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h new file mode 100644 index 00000000..5a17be59 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_i2c.h @@ -0,0 +1,1890 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_i2c.h + * @author MCD Application Team + * @brief Header file of I2C LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_I2C_H +#define __STM32F4xx_LL_I2C_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (I2C1) || defined (I2C2) || defined (I2C3) + +/** @defgroup I2C_LL I2C + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2C_LL_Private_Constants I2C Private Constants + * @{ + */ + +/* Defines used to perform compute and check in the macros */ +#define LL_I2C_MAX_SPEED_STANDARD 100000U +#define LL_I2C_MAX_SPEED_FAST 400000U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2C_LL_Private_Macros I2C Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2C_LL_ES_INIT I2C Exported Init structure + * @{ + */ +typedef struct +{ + uint32_t PeripheralMode; /*!< Specifies the peripheral mode. + This parameter can be a value of @ref I2C_LL_EC_PERIPHERAL_MODE + + This feature can be modified afterwards using unitary function @ref LL_I2C_SetMode(). */ + + uint32_t ClockSpeed; /*!< Specifies the clock frequency. + This parameter must be set to a value lower than 400kHz (in Hz) + + This feature can be modified afterwards using unitary function @ref LL_I2C_SetClockPeriod() + or @ref LL_I2C_SetDutyCycle() or @ref LL_I2C_SetClockSpeedMode() or @ref LL_I2C_ConfigSpeed(). */ + + uint32_t DutyCycle; /*!< Specifies the I2C fast mode duty cycle. + This parameter can be a value of @ref I2C_LL_EC_DUTYCYCLE + + This feature can be modified afterwards using unitary function @ref LL_I2C_SetDutyCycle(). */ + +#if defined(I2C_FLTR_ANOFF)&&defined(I2C_FLTR_DNF) + uint32_t AnalogFilter; /*!< Enables or disables analog noise filter. + This parameter can be a value of @ref I2C_LL_EC_ANALOGFILTER_SELECTION + + This feature can be modified afterwards using unitary functions @ref LL_I2C_EnableAnalogFilter() or LL_I2C_DisableAnalogFilter(). */ + + uint32_t DigitalFilter; /*!< Configures the digital noise filter. + This parameter can be a number between Min_Data = 0x00 and Max_Data = 0x0F + + This feature can be modified afterwards using unitary function @ref LL_I2C_SetDigitalFilter(). */ + +#endif + uint32_t OwnAddress1; /*!< Specifies the device own address 1. + This parameter must be a value between Min_Data = 0x00 and Max_Data = 0x3FF + + This feature can be modified afterwards using unitary function @ref LL_I2C_SetOwnAddress1(). */ + + uint32_t TypeAcknowledge; /*!< Specifies the ACKnowledge or Non ACKnowledge condition after the address receive match code or next received byte. + This parameter can be a value of @ref I2C_LL_EC_I2C_ACKNOWLEDGE + + This feature can be modified afterwards using unitary function @ref LL_I2C_AcknowledgeNextData(). */ + + uint32_t OwnAddrSize; /*!< Specifies the device own address 1 size (7-bit or 10-bit). + This parameter can be a value of @ref I2C_LL_EC_OWNADDRESS1 + + This feature can be modified afterwards using unitary function @ref LL_I2C_SetOwnAddress1(). */ +} LL_I2C_InitTypeDef; +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup I2C_LL_Exported_Constants I2C Exported Constants + * @{ + */ + +/** @defgroup I2C_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_I2C_ReadReg function + * @{ + */ +#define LL_I2C_SR1_SB I2C_SR1_SB /*!< Start Bit (master mode) */ +#define LL_I2C_SR1_ADDR I2C_SR1_ADDR /*!< Address sent (master mode) or + Address matched flag (slave mode) */ +#define LL_I2C_SR1_BTF I2C_SR1_BTF /*!< Byte Transfer Finished flag */ +#define LL_I2C_SR1_ADD10 I2C_SR1_ADD10 /*!< 10-bit header sent (master mode) */ +#define LL_I2C_SR1_STOPF I2C_SR1_STOPF /*!< Stop detection flag (slave mode) */ +#define LL_I2C_SR1_RXNE I2C_SR1_RXNE /*!< Data register not empty (receivers) */ +#define LL_I2C_SR1_TXE I2C_SR1_TXE /*!< Data register empty (transmitters) */ +#define LL_I2C_SR1_BERR I2C_SR1_BERR /*!< Bus error */ +#define LL_I2C_SR1_ARLO I2C_SR1_ARLO /*!< Arbitration lost */ +#define LL_I2C_SR1_AF I2C_SR1_AF /*!< Acknowledge failure flag */ +#define LL_I2C_SR1_OVR I2C_SR1_OVR /*!< Overrun/Underrun */ +#define LL_I2C_SR1_PECERR I2C_ISR_PECERR /*!< PEC Error in reception (SMBus mode) */ +#define LL_I2C_SR1_TIMEOUT I2C_ISR_TIMEOUT /*!< Timeout detection flag (SMBus mode) */ +#define LL_I2C_SR1_SMALERT I2C_ISR_SMALERT /*!< SMBus alert (SMBus mode) */ +#define LL_I2C_SR2_MSL I2C_SR2_MSL /*!< Master/Slave flag */ +#define LL_I2C_SR2_BUSY I2C_SR2_BUSY /*!< Bus busy flag */ +#define LL_I2C_SR2_TRA I2C_SR2_TRA /*!< Transmitter/receiver direction */ +#define LL_I2C_SR2_GENCALL I2C_SR2_GENCALL /*!< General call address (Slave mode) */ +#define LL_I2C_SR2_SMBDEFAULT I2C_SR2_SMBDEFAULT /*!< SMBus Device default address (Slave mode) */ +#define LL_I2C_SR2_SMBHOST I2C_SR2_SMBHOST /*!< SMBus Host address (Slave mode) */ +#define LL_I2C_SR2_DUALF I2C_SR2_DUALF /*!< Dual flag (Slave mode) */ +/** + * @} + */ + +/** @defgroup I2C_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_I2C_ReadReg and LL_I2C_WriteReg functions + * @{ + */ +#define LL_I2C_CR2_ITEVTEN I2C_CR2_ITEVTEN /*!< Events interrupts enable */ +#define LL_I2C_CR2_ITBUFEN I2C_CR2_ITBUFEN /*!< Buffer interrupts enable */ +#define LL_I2C_CR2_ITERREN I2C_CR2_ITERREN /*!< Error interrupts enable */ +/** + * @} + */ + +#if defined(I2C_FLTR_ANOFF) +/** @defgroup I2C_LL_EC_ANALOGFILTER_SELECTION Analog Filter Selection + * @{ + */ +#define LL_I2C_ANALOGFILTER_ENABLE 0x00000000U /*!< Analog filter is enabled. */ +#define LL_I2C_ANALOGFILTER_DISABLE I2C_FLTR_ANOFF /*!< Analog filter is disabled.*/ +/** + * @} + */ + +#endif +/** @defgroup I2C_LL_EC_OWNADDRESS1 Own Address 1 Length + * @{ + */ +#define LL_I2C_OWNADDRESS1_7BIT 0x00004000U /*!< Own address 1 is a 7-bit address. */ +#define LL_I2C_OWNADDRESS1_10BIT (uint32_t)(I2C_OAR1_ADDMODE | 0x00004000U) /*!< Own address 1 is a 10-bit address. */ +/** + * @} + */ + +/** @defgroup I2C_LL_EC_DUTYCYCLE Fast Mode Duty Cycle + * @{ + */ +#define LL_I2C_DUTYCYCLE_2 0x00000000U /*!< I2C fast mode Tlow/Thigh = 2 */ +#define LL_I2C_DUTYCYCLE_16_9 I2C_CCR_DUTY /*!< I2C fast mode Tlow/Thigh = 16/9 */ +/** + * @} + */ + +/** @defgroup I2C_LL_EC_CLOCK_SPEED_MODE Master Clock Speed Mode + * @{ + */ +#define LL_I2C_CLOCK_SPEED_STANDARD_MODE 0x00000000U /*!< Master clock speed range is standard mode */ +#define LL_I2C_CLOCK_SPEED_FAST_MODE I2C_CCR_FS /*!< Master clock speed range is fast mode */ +/** + * @} + */ + +/** @defgroup I2C_LL_EC_PERIPHERAL_MODE Peripheral Mode + * @{ + */ +#define LL_I2C_MODE_I2C 0x00000000U /*!< I2C Master or Slave mode */ +#define LL_I2C_MODE_SMBUS_HOST (uint32_t)(I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP) /*!< SMBus Host address acknowledge */ +#define LL_I2C_MODE_SMBUS_DEVICE I2C_CR1_SMBUS /*!< SMBus Device default mode (Default address not acknowledge) */ +#define LL_I2C_MODE_SMBUS_DEVICE_ARP (uint32_t)(I2C_CR1_SMBUS | I2C_CR1_ENARP) /*!< SMBus Device Default address acknowledge */ +/** + * @} + */ + +/** @defgroup I2C_LL_EC_I2C_ACKNOWLEDGE Acknowledge Generation + * @{ + */ +#define LL_I2C_ACK I2C_CR1_ACK /*!< ACK is sent after current received byte. */ +#define LL_I2C_NACK 0x00000000U /*!< NACK is sent after current received byte.*/ +/** + * @} + */ + +/** @defgroup I2C_LL_EC_DIRECTION Read Write Direction + * @{ + */ +#define LL_I2C_DIRECTION_WRITE I2C_SR2_TRA /*!< Bus is in write transfer */ +#define LL_I2C_DIRECTION_READ 0x00000000U /*!< Bus is in read transfer */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup I2C_LL_Exported_Macros I2C Exported Macros + * @{ + */ + +/** @defgroup I2C_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in I2C register + * @param __INSTANCE__ I2C Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_I2C_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in I2C register + * @param __INSTANCE__ I2C Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_I2C_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** @defgroup I2C_LL_EM_Exported_Macros_Helper Exported Macros Helper + * @{ + */ + +/** + * @brief Convert Peripheral Clock Frequency in Mhz. + * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz). + * @retval Value of peripheral clock (in Mhz) + */ +#define __LL_I2C_FREQ_HZ_TO_MHZ(__PCLK__) (uint32_t)((__PCLK__)/1000000U) + +/** + * @brief Convert Peripheral Clock Frequency in Hz. + * @param __PCLK__ This parameter must be a value of peripheral clock (in Mhz). + * @retval Value of peripheral clock (in Hz) + */ +#define __LL_I2C_FREQ_MHZ_TO_HZ(__PCLK__) (uint32_t)((__PCLK__)*1000000U) + +/** + * @brief Compute I2C Clock rising time. + * @param __FREQRANGE__ This parameter must be a value of peripheral clock (in Mhz). + * @param __SPEED__ This parameter must be a value lower than 400kHz (in Hz). + * @retval Value between Min_Data=0x02 and Max_Data=0x3F + */ +#define __LL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (uint32_t)(((__SPEED__) <= LL_I2C_MAX_SPEED_STANDARD) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U)) + +/** + * @brief Compute Speed clock range to a Clock Control Register (I2C_CCR_CCR) value. + * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz). + * @param __SPEED__ This parameter must be a value lower than 400kHz (in Hz). + * @param __DUTYCYCLE__ This parameter can be one of the following values: + * @arg @ref LL_I2C_DUTYCYCLE_2 + * @arg @ref LL_I2C_DUTYCYCLE_16_9 + * @retval Value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001. + */ +#define __LL_I2C_SPEED_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__) (uint32_t)(((__SPEED__) <= LL_I2C_MAX_SPEED_STANDARD)? \ + (__LL_I2C_SPEED_STANDARD_TO_CCR((__PCLK__), (__SPEED__))) : \ + (__LL_I2C_SPEED_FAST_TO_CCR((__PCLK__), (__SPEED__), (__DUTYCYCLE__)))) + +/** + * @brief Compute Speed Standard clock range to a Clock Control Register (I2C_CCR_CCR) value. + * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz). + * @param __SPEED__ This parameter must be a value lower than 100kHz (in Hz). + * @retval Value between Min_Data=0x004 and Max_Data=0xFFF. + */ +#define __LL_I2C_SPEED_STANDARD_TO_CCR(__PCLK__, __SPEED__) (uint32_t)(((((__PCLK__)/((__SPEED__) << 1U)) & I2C_CCR_CCR) < 4U)? 4U:((__PCLK__) / ((__SPEED__) << 1U))) + +/** + * @brief Compute Speed Fast clock range to a Clock Control Register (I2C_CCR_CCR) value. + * @param __PCLK__ This parameter must be a value of peripheral clock (in Hz). + * @param __SPEED__ This parameter must be a value between Min_Data=100Khz and Max_Data=400Khz (in Hz). + * @param __DUTYCYCLE__ This parameter can be one of the following values: + * @arg @ref LL_I2C_DUTYCYCLE_2 + * @arg @ref LL_I2C_DUTYCYCLE_16_9 + * @retval Value between Min_Data=0x001 and Max_Data=0xFFF + */ +#define __LL_I2C_SPEED_FAST_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__) (uint32_t)(((__DUTYCYCLE__) == LL_I2C_DUTYCYCLE_2)? \ + (((((__PCLK__) / ((__SPEED__) * 3U)) & I2C_CCR_CCR) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 3U))) : \ + (((((__PCLK__) / ((__SPEED__) * 25U)) & I2C_CCR_CCR) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 25U)))) + +/** + * @brief Get the Least significant bits of a 10-Bits address. + * @param __ADDRESS__ This parameter must be a value of a 10-Bits slave address. + * @retval Value between Min_Data=0x00 and Max_Data=0xFF + */ +#define __LL_I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF)))) + +/** + * @brief Convert a 10-Bits address to a 10-Bits header with Write direction. + * @param __ADDRESS__ This parameter must be a value of a 10-Bits slave address. + * @retval Value between Min_Data=0xF0 and Max_Data=0xF6 + */ +#define __LL_I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0)))) + +/** + * @brief Convert a 10-Bits address to a 10-Bits header with Read direction. + * @param __ADDRESS__ This parameter must be a value of a 10-Bits slave address. + * @retval Value between Min_Data=0xF1 and Max_Data=0xF7 + */ +#define __LL_I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1)))) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup I2C_LL_Exported_Functions I2C Exported Functions + * @{ + */ + +/** @defgroup I2C_LL_EF_Configuration Configuration + * @{ + */ + +/** + * @brief Enable I2C peripheral (PE = 1). + * @rmtoll CR1 PE LL_I2C_Enable + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_Enable(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_PE); +} + +/** + * @brief Disable I2C peripheral (PE = 0). + * @rmtoll CR1 PE LL_I2C_Disable + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_Disable(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_PE); +} + +/** + * @brief Check if the I2C peripheral is enabled or disabled. + * @rmtoll CR1 PE LL_I2C_IsEnabled + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabled(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_PE) == (I2C_CR1_PE)); +} + +#if defined(I2C_FLTR_ANOFF)&&defined(I2C_FLTR_DNF) +/** + * @brief Configure Noise Filters (Analog and Digital). + * @note If the analog filter is also enabled, the digital filter is added to analog filter. + * The filters can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll FLTR ANOFF LL_I2C_ConfigFilters\n + * FLTR DNF LL_I2C_ConfigFilters + * @param I2Cx I2C Instance. + * @param AnalogFilter This parameter can be one of the following values: + * @arg @ref LL_I2C_ANALOGFILTER_ENABLE + * @arg @ref LL_I2C_ANALOGFILTER_DISABLE + * @param DigitalFilter This parameter must be a value between Min_Data=0x00 (Digital filter disabled) and Max_Data=0x0F (Digital filter enabled and filtering capability up to 15*TPCLK1) + * This parameter is used to configure the digital noise filter on SDA and SCL input. The digital filter will suppress the spikes with a length of up to DNF[3:0]*TPCLK1. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ConfigFilters(I2C_TypeDef *I2Cx, uint32_t AnalogFilter, uint32_t DigitalFilter) +{ + MODIFY_REG(I2Cx->FLTR, I2C_FLTR_ANOFF | I2C_FLTR_DNF, AnalogFilter | DigitalFilter); +} +#endif +#if defined(I2C_FLTR_DNF) + +/** + * @brief Configure Digital Noise Filter. + * @note If the analog filter is also enabled, the digital filter is added to analog filter. + * This filter can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll FLTR DNF LL_I2C_SetDigitalFilter + * @param I2Cx I2C Instance. + * @param DigitalFilter This parameter must be a value between Min_Data=0x00 (Digital filter disabled) and Max_Data=0x0F (Digital filter enabled and filtering capability up to 15*TPCLK1) + * This parameter is used to configure the digital noise filter on SDA and SCL input. The digital filter will suppress the spikes with a length of up to DNF[3:0]*TPCLK1. + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetDigitalFilter(I2C_TypeDef *I2Cx, uint32_t DigitalFilter) +{ + MODIFY_REG(I2Cx->FLTR, I2C_FLTR_DNF, DigitalFilter); +} + +/** + * @brief Get the current Digital Noise Filter configuration. + * @rmtoll FLTR DNF LL_I2C_GetDigitalFilter + * @param I2Cx I2C Instance. + * @retval Value between Min_Data=0x0 and Max_Data=0xF + */ +__STATIC_INLINE uint32_t LL_I2C_GetDigitalFilter(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->FLTR, I2C_FLTR_DNF)); +} +#endif +#if defined(I2C_FLTR_ANOFF) + +/** + * @brief Enable Analog Noise Filter. + * @note This filter can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll FLTR ANOFF LL_I2C_EnableAnalogFilter + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableAnalogFilter(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->FLTR, I2C_FLTR_ANOFF); +} + +/** + * @brief Disable Analog Noise Filter. + * @note This filter can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll FLTR ANOFF LL_I2C_DisableAnalogFilter + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableAnalogFilter(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->FLTR, I2C_FLTR_ANOFF); +} + +/** + * @brief Check if Analog Noise Filter is enabled or disabled. + * @rmtoll FLTR ANOFF LL_I2C_IsEnabledAnalogFilter + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledAnalogFilter(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->FLTR, I2C_FLTR_ANOFF) == (I2C_FLTR_ANOFF)); +} +#endif + +/** + * @brief Enable DMA transmission requests. + * @rmtoll CR2 DMAEN LL_I2C_EnableDMAReq_TX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableDMAReq_TX(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_DMAEN); +} + +/** + * @brief Disable DMA transmission requests. + * @rmtoll CR2 DMAEN LL_I2C_DisableDMAReq_TX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableDMAReq_TX(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_DMAEN); +} + +/** + * @brief Check if DMA transmission requests are enabled or disabled. + * @rmtoll CR2 DMAEN LL_I2C_IsEnabledDMAReq_TX + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledDMAReq_TX(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_DMAEN) == (I2C_CR2_DMAEN)); +} + +/** + * @brief Enable DMA reception requests. + * @rmtoll CR2 DMAEN LL_I2C_EnableDMAReq_RX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableDMAReq_RX(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_DMAEN); +} + +/** + * @brief Disable DMA reception requests. + * @rmtoll CR2 DMAEN LL_I2C_DisableDMAReq_RX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableDMAReq_RX(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_DMAEN); +} + +/** + * @brief Check if DMA reception requests are enabled or disabled. + * @rmtoll CR2 DMAEN LL_I2C_IsEnabledDMAReq_RX + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledDMAReq_RX(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_DMAEN) == (I2C_CR2_DMAEN)); +} + +/** + * @brief Get the data register address used for DMA transfer. + * @rmtoll DR DR LL_I2C_DMA_GetRegAddr + * @param I2Cx I2C Instance. + * @retval Address of data register + */ +__STATIC_INLINE uint32_t LL_I2C_DMA_GetRegAddr(I2C_TypeDef *I2Cx) +{ + return (uint32_t) & (I2Cx->DR); +} + +/** + * @brief Enable Clock stretching. + * @note This bit can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll CR1 NOSTRETCH LL_I2C_EnableClockStretching + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableClockStretching(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH); +} + +/** + * @brief Disable Clock stretching. + * @note This bit can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll CR1 NOSTRETCH LL_I2C_DisableClockStretching + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableClockStretching(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH); +} + +/** + * @brief Check if Clock stretching is enabled or disabled. + * @rmtoll CR1 NOSTRETCH LL_I2C_IsEnabledClockStretching + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledClockStretching(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH) != (I2C_CR1_NOSTRETCH)); +} + +/** + * @brief Enable General Call. + * @note When enabled the Address 0x00 is ACKed. + * @rmtoll CR1 ENGC LL_I2C_EnableGeneralCall + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableGeneralCall(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_ENGC); +} + +/** + * @brief Disable General Call. + * @note When disabled the Address 0x00 is NACKed. + * @rmtoll CR1 ENGC LL_I2C_DisableGeneralCall + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableGeneralCall(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_ENGC); +} + +/** + * @brief Check if General Call is enabled or disabled. + * @rmtoll CR1 ENGC LL_I2C_IsEnabledGeneralCall + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledGeneralCall(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_ENGC) == (I2C_CR1_ENGC)); +} + +/** + * @brief Set the Own Address1. + * @rmtoll OAR1 ADD0 LL_I2C_SetOwnAddress1\n + * OAR1 ADD1_7 LL_I2C_SetOwnAddress1\n + * OAR1 ADD8_9 LL_I2C_SetOwnAddress1\n + * OAR1 ADDMODE LL_I2C_SetOwnAddress1 + * @param I2Cx I2C Instance. + * @param OwnAddress1 This parameter must be a value between Min_Data=0 and Max_Data=0x3FF. + * @param OwnAddrSize This parameter can be one of the following values: + * @arg @ref LL_I2C_OWNADDRESS1_7BIT + * @arg @ref LL_I2C_OWNADDRESS1_10BIT + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetOwnAddress1(I2C_TypeDef *I2Cx, uint32_t OwnAddress1, uint32_t OwnAddrSize) +{ + MODIFY_REG(I2Cx->OAR1, I2C_OAR1_ADD0 | I2C_OAR1_ADD1_7 | I2C_OAR1_ADD8_9 | I2C_OAR1_ADDMODE, OwnAddress1 | OwnAddrSize); +} + +/** + * @brief Set the 7bits Own Address2. + * @note This action has no effect if own address2 is enabled. + * @rmtoll OAR2 ADD2 LL_I2C_SetOwnAddress2 + * @param I2Cx I2C Instance. + * @param OwnAddress2 This parameter must be a value between Min_Data=0 and Max_Data=0x7F. + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetOwnAddress2(I2C_TypeDef *I2Cx, uint32_t OwnAddress2) +{ + MODIFY_REG(I2Cx->OAR2, I2C_OAR2_ADD2, OwnAddress2); +} + +/** + * @brief Enable acknowledge on Own Address2 match address. + * @rmtoll OAR2 ENDUAL LL_I2C_EnableOwnAddress2 + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableOwnAddress2(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL); +} + +/** + * @brief Disable acknowledge on Own Address2 match address. + * @rmtoll OAR2 ENDUAL LL_I2C_DisableOwnAddress2 + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableOwnAddress2(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL); +} + +/** + * @brief Check if Own Address1 acknowledge is enabled or disabled. + * @rmtoll OAR2 ENDUAL LL_I2C_IsEnabledOwnAddress2 + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledOwnAddress2(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL) == (I2C_OAR2_ENDUAL)); +} + +/** + * @brief Configure the Peripheral clock frequency. + * @rmtoll CR2 FREQ LL_I2C_SetPeriphClock + * @param I2Cx I2C Instance. + * @param PeriphClock Peripheral Clock (in Hz) + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetPeriphClock(I2C_TypeDef *I2Cx, uint32_t PeriphClock) +{ + MODIFY_REG(I2Cx->CR2, I2C_CR2_FREQ, __LL_I2C_FREQ_HZ_TO_MHZ(PeriphClock)); +} + +/** + * @brief Get the Peripheral clock frequency. + * @rmtoll CR2 FREQ LL_I2C_GetPeriphClock + * @param I2Cx I2C Instance. + * @retval Value of Peripheral Clock (in Hz) + */ +__STATIC_INLINE uint32_t LL_I2C_GetPeriphClock(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(__LL_I2C_FREQ_MHZ_TO_HZ(READ_BIT(I2Cx->CR2, I2C_CR2_FREQ))); +} + +/** + * @brief Configure the Duty cycle (Fast mode only). + * @rmtoll CCR DUTY LL_I2C_SetDutyCycle + * @param I2Cx I2C Instance. + * @param DutyCycle This parameter can be one of the following values: + * @arg @ref LL_I2C_DUTYCYCLE_2 + * @arg @ref LL_I2C_DUTYCYCLE_16_9 + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetDutyCycle(I2C_TypeDef *I2Cx, uint32_t DutyCycle) +{ + MODIFY_REG(I2Cx->CCR, I2C_CCR_DUTY, DutyCycle); +} + +/** + * @brief Get the Duty cycle (Fast mode only). + * @rmtoll CCR DUTY LL_I2C_GetDutyCycle + * @param I2Cx I2C Instance. + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2C_DUTYCYCLE_2 + * @arg @ref LL_I2C_DUTYCYCLE_16_9 + */ +__STATIC_INLINE uint32_t LL_I2C_GetDutyCycle(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_DUTY)); +} + +/** + * @brief Configure the I2C master clock speed mode. + * @rmtoll CCR FS LL_I2C_SetClockSpeedMode + * @param I2Cx I2C Instance. + * @param ClockSpeedMode This parameter can be one of the following values: + * @arg @ref LL_I2C_CLOCK_SPEED_STANDARD_MODE + * @arg @ref LL_I2C_CLOCK_SPEED_FAST_MODE + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetClockSpeedMode(I2C_TypeDef *I2Cx, uint32_t ClockSpeedMode) +{ + MODIFY_REG(I2Cx->CCR, I2C_CCR_FS, ClockSpeedMode); +} + +/** + * @brief Get the the I2C master speed mode. + * @rmtoll CCR FS LL_I2C_GetClockSpeedMode + * @param I2Cx I2C Instance. + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2C_CLOCK_SPEED_STANDARD_MODE + * @arg @ref LL_I2C_CLOCK_SPEED_FAST_MODE + */ +__STATIC_INLINE uint32_t LL_I2C_GetClockSpeedMode(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_FS)); +} + +/** + * @brief Configure the SCL, SDA rising time. + * @note This bit can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll TRISE TRISE LL_I2C_SetRiseTime + * @param I2Cx I2C Instance. + * @param RiseTime This parameter must be a value between Min_Data=0x02 and Max_Data=0x3F. + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetRiseTime(I2C_TypeDef *I2Cx, uint32_t RiseTime) +{ + MODIFY_REG(I2Cx->TRISE, I2C_TRISE_TRISE, RiseTime); +} + +/** + * @brief Get the SCL, SDA rising time. + * @rmtoll TRISE TRISE LL_I2C_GetRiseTime + * @param I2Cx I2C Instance. + * @retval Value between Min_Data=0x02 and Max_Data=0x3F + */ +__STATIC_INLINE uint32_t LL_I2C_GetRiseTime(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->TRISE, I2C_TRISE_TRISE)); +} + +/** + * @brief Configure the SCL high and low period. + * @note This bit can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll CCR CCR LL_I2C_SetClockPeriod + * @param I2Cx I2C Instance. + * @param ClockPeriod This parameter must be a value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001. + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetClockPeriod(I2C_TypeDef *I2Cx, uint32_t ClockPeriod) +{ + MODIFY_REG(I2Cx->CCR, I2C_CCR_CCR, ClockPeriod); +} + +/** + * @brief Get the SCL high and low period. + * @rmtoll CCR CCR LL_I2C_GetClockPeriod + * @param I2Cx I2C Instance. + * @retval Value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001. + */ +__STATIC_INLINE uint32_t LL_I2C_GetClockPeriod(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_CCR)); +} + +/** + * @brief Configure the SCL speed. + * @note This bit can only be programmed when the I2C is disabled (PE = 0). + * @rmtoll CR2 FREQ LL_I2C_ConfigSpeed\n + * TRISE TRISE LL_I2C_ConfigSpeed\n + * CCR FS LL_I2C_ConfigSpeed\n + * CCR DUTY LL_I2C_ConfigSpeed\n + * CCR CCR LL_I2C_ConfigSpeed + * @param I2Cx I2C Instance. + * @param PeriphClock Peripheral Clock (in Hz) + * @param ClockSpeed This parameter must be a value lower than 400kHz (in Hz). + * @param DutyCycle This parameter can be one of the following values: + * @arg @ref LL_I2C_DUTYCYCLE_2 + * @arg @ref LL_I2C_DUTYCYCLE_16_9 + * @retval None + */ +__STATIC_INLINE void LL_I2C_ConfigSpeed(I2C_TypeDef *I2Cx, uint32_t PeriphClock, uint32_t ClockSpeed, + uint32_t DutyCycle) +{ + uint32_t freqrange = 0x0U; + uint32_t clockconfig = 0x0U; + + /* Compute frequency range */ + freqrange = __LL_I2C_FREQ_HZ_TO_MHZ(PeriphClock); + + /* Configure I2Cx: Frequency range register */ + MODIFY_REG(I2Cx->CR2, I2C_CR2_FREQ, freqrange); + + /* Configure I2Cx: Rise Time register */ + MODIFY_REG(I2Cx->TRISE, I2C_TRISE_TRISE, __LL_I2C_RISE_TIME(freqrange, ClockSpeed)); + + /* Configure Speed mode, Duty Cycle and Clock control register value */ + if (ClockSpeed > LL_I2C_MAX_SPEED_STANDARD) + { + /* Set Speed mode at fast and duty cycle for Clock Speed request in fast clock range */ + clockconfig = LL_I2C_CLOCK_SPEED_FAST_MODE | \ + __LL_I2C_SPEED_FAST_TO_CCR(PeriphClock, ClockSpeed, DutyCycle) | \ + DutyCycle; + } + else + { + /* Set Speed mode at standard for Clock Speed request in standard clock range */ + clockconfig = LL_I2C_CLOCK_SPEED_STANDARD_MODE | \ + __LL_I2C_SPEED_STANDARD_TO_CCR(PeriphClock, ClockSpeed); + } + + /* Configure I2Cx: Clock control register */ + MODIFY_REG(I2Cx->CCR, (I2C_CCR_FS | I2C_CCR_DUTY | I2C_CCR_CCR), clockconfig); +} + +/** + * @brief Configure peripheral mode. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 SMBUS LL_I2C_SetMode\n + * CR1 SMBTYPE LL_I2C_SetMode\n + * CR1 ENARP LL_I2C_SetMode + * @param I2Cx I2C Instance. + * @param PeripheralMode This parameter can be one of the following values: + * @arg @ref LL_I2C_MODE_I2C + * @arg @ref LL_I2C_MODE_SMBUS_HOST + * @arg @ref LL_I2C_MODE_SMBUS_DEVICE + * @arg @ref LL_I2C_MODE_SMBUS_DEVICE_ARP + * @retval None + */ +__STATIC_INLINE void LL_I2C_SetMode(I2C_TypeDef *I2Cx, uint32_t PeripheralMode) +{ + MODIFY_REG(I2Cx->CR1, I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP, PeripheralMode); +} + +/** + * @brief Get peripheral mode. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 SMBUS LL_I2C_GetMode\n + * CR1 SMBTYPE LL_I2C_GetMode\n + * CR1 ENARP LL_I2C_GetMode + * @param I2Cx I2C Instance. + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2C_MODE_I2C + * @arg @ref LL_I2C_MODE_SMBUS_HOST + * @arg @ref LL_I2C_MODE_SMBUS_DEVICE + * @arg @ref LL_I2C_MODE_SMBUS_DEVICE_ARP + */ +__STATIC_INLINE uint32_t LL_I2C_GetMode(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->CR1, I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP)); +} + +/** + * @brief Enable SMBus alert (Host or Device mode) + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note SMBus Device mode: + * - SMBus Alert pin is drived low and + * Alert Response Address Header acknowledge is enabled. + * SMBus Host mode: + * - SMBus Alert pin management is supported. + * @rmtoll CR1 ALERT LL_I2C_EnableSMBusAlert + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableSMBusAlert(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_ALERT); +} + +/** + * @brief Disable SMBus alert (Host or Device mode) + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note SMBus Device mode: + * - SMBus Alert pin is not drived (can be used as a standard GPIO) and + * Alert Response Address Header acknowledge is disabled. + * SMBus Host mode: + * - SMBus Alert pin management is not supported. + * @rmtoll CR1 ALERT LL_I2C_DisableSMBusAlert + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableSMBusAlert(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_ALERT); +} + +/** + * @brief Check if SMBus alert (Host or Device mode) is enabled or disabled. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 ALERT LL_I2C_IsEnabledSMBusAlert + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusAlert(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_ALERT) == (I2C_CR1_ALERT)); +} + +/** + * @brief Enable SMBus Packet Error Calculation (PEC). + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 ENPEC LL_I2C_EnableSMBusPEC + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableSMBusPEC(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_ENPEC); +} + +/** + * @brief Disable SMBus Packet Error Calculation (PEC). + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 ENPEC LL_I2C_DisableSMBusPEC + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableSMBusPEC(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_ENPEC); +} + +/** + * @brief Check if SMBus Packet Error Calculation (PEC) is enabled or disabled. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 ENPEC LL_I2C_IsEnabledSMBusPEC + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPEC(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_ENPEC) == (I2C_CR1_ENPEC)); +} + +/** + * @} + */ + +/** @defgroup I2C_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable TXE interrupt. + * @rmtoll CR2 ITEVTEN LL_I2C_EnableIT_TX\n + * CR2 ITBUFEN LL_I2C_EnableIT_TX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableIT_TX(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN); +} + +/** + * @brief Disable TXE interrupt. + * @rmtoll CR2 ITEVTEN LL_I2C_DisableIT_TX\n + * CR2 ITBUFEN LL_I2C_DisableIT_TX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableIT_TX(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN); +} + +/** + * @brief Check if the TXE Interrupt is enabled or disabled. + * @rmtoll CR2 ITEVTEN LL_I2C_IsEnabledIT_TX\n + * CR2 ITBUFEN LL_I2C_IsEnabledIT_TX + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_TX(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN) == (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN)); +} + +/** + * @brief Enable RXNE interrupt. + * @rmtoll CR2 ITEVTEN LL_I2C_EnableIT_RX\n + * CR2 ITBUFEN LL_I2C_EnableIT_RX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableIT_RX(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN); +} + +/** + * @brief Disable RXNE interrupt. + * @rmtoll CR2 ITEVTEN LL_I2C_DisableIT_RX\n + * CR2 ITBUFEN LL_I2C_DisableIT_RX + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableIT_RX(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN); +} + +/** + * @brief Check if the RXNE Interrupt is enabled or disabled. + * @rmtoll CR2 ITEVTEN LL_I2C_IsEnabledIT_RX\n + * CR2 ITBUFEN LL_I2C_IsEnabledIT_RX + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_RX(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN) == (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN)); +} + +/** + * @brief Enable Events interrupts. + * @note Any of these events will generate interrupt : + * Start Bit (SB) + * Address sent, Address matched (ADDR) + * 10-bit header sent (ADD10) + * Stop detection (STOPF) + * Byte transfer finished (BTF) + * + * @note Any of these events will generate interrupt if Buffer interrupts are enabled too(using unitary function @ref LL_I2C_EnableIT_BUF()) : + * Receive buffer not empty (RXNE) + * Transmit buffer empty (TXE) + * @rmtoll CR2 ITEVTEN LL_I2C_EnableIT_EVT + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableIT_EVT(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN); +} + +/** + * @brief Disable Events interrupts. + * @note Any of these events will generate interrupt : + * Start Bit (SB) + * Address sent, Address matched (ADDR) + * 10-bit header sent (ADD10) + * Stop detection (STOPF) + * Byte transfer finished (BTF) + * Receive buffer not empty (RXNE) + * Transmit buffer empty (TXE) + * @rmtoll CR2 ITEVTEN LL_I2C_DisableIT_EVT + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableIT_EVT(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN); +} + +/** + * @brief Check if Events interrupts are enabled or disabled. + * @rmtoll CR2 ITEVTEN LL_I2C_IsEnabledIT_EVT + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_EVT(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN) == (I2C_CR2_ITEVTEN)); +} + +/** + * @brief Enable Buffer interrupts. + * @note Any of these Buffer events will generate interrupt if Events interrupts are enabled too(using unitary function @ref LL_I2C_EnableIT_EVT()) : + * Receive buffer not empty (RXNE) + * Transmit buffer empty (TXE) + * @rmtoll CR2 ITBUFEN LL_I2C_EnableIT_BUF + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableIT_BUF(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN); +} + +/** + * @brief Disable Buffer interrupts. + * @note Any of these Buffer events will generate interrupt : + * Receive buffer not empty (RXNE) + * Transmit buffer empty (TXE) + * @rmtoll CR2 ITBUFEN LL_I2C_DisableIT_BUF + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableIT_BUF(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN); +} + +/** + * @brief Check if Buffer interrupts are enabled or disabled. + * @rmtoll CR2 ITBUFEN LL_I2C_IsEnabledIT_BUF + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_BUF(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN) == (I2C_CR2_ITBUFEN)); +} + +/** + * @brief Enable Error interrupts. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note Any of these errors will generate interrupt : + * Bus Error detection (BERR) + * Arbitration Loss (ARLO) + * Acknowledge Failure(AF) + * Overrun/Underrun (OVR) + * SMBus Timeout detection (TIMEOUT) + * SMBus PEC error detection (PECERR) + * SMBus Alert pin event detection (SMBALERT) + * @rmtoll CR2 ITERREN LL_I2C_EnableIT_ERR + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableIT_ERR(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_ITERREN); +} + +/** + * @brief Disable Error interrupts. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note Any of these errors will generate interrupt : + * Bus Error detection (BERR) + * Arbitration Loss (ARLO) + * Acknowledge Failure(AF) + * Overrun/Underrun (OVR) + * SMBus Timeout detection (TIMEOUT) + * SMBus PEC error detection (PECERR) + * SMBus Alert pin event detection (SMBALERT) + * @rmtoll CR2 ITERREN LL_I2C_DisableIT_ERR + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableIT_ERR(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITERREN); +} + +/** + * @brief Check if Error interrupts are enabled or disabled. + * @rmtoll CR2 ITERREN LL_I2C_IsEnabledIT_ERR + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_ERR(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_ITERREN) == (I2C_CR2_ITERREN)); +} + +/** + * @} + */ + +/** @defgroup I2C_LL_EF_FLAG_management FLAG_management + * @{ + */ + +/** + * @brief Indicate the status of Transmit data register empty flag. + * @note RESET: When next data is written in Transmit data register. + * SET: When Transmit data register is empty. + * @rmtoll SR1 TXE LL_I2C_IsActiveFlag_TXE + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_TXE(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_TXE) == (I2C_SR1_TXE)); +} + +/** + * @brief Indicate the status of Byte Transfer Finished flag. + * RESET: When Data byte transfer not done. + * SET: When Data byte transfer succeeded. + * @rmtoll SR1 BTF LL_I2C_IsActiveFlag_BTF + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BTF(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_BTF) == (I2C_SR1_BTF)); +} + +/** + * @brief Indicate the status of Receive data register not empty flag. + * @note RESET: When Receive data register is read. + * SET: When the received data is copied in Receive data register. + * @rmtoll SR1 RXNE LL_I2C_IsActiveFlag_RXNE + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_RXNE(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_RXNE) == (I2C_SR1_RXNE)); +} + +/** + * @brief Indicate the status of Start Bit (master mode). + * @note RESET: When No Start condition. + * SET: When Start condition is generated. + * @rmtoll SR1 SB LL_I2C_IsActiveFlag_SB + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_SB(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_SB) == (I2C_SR1_SB)); +} + +/** + * @brief Indicate the status of Address sent (master mode) or Address matched flag (slave mode). + * @note RESET: Clear default value. + * SET: When the address is fully sent (master mode) or when the received slave address matched with one of the enabled slave address (slave mode). + * @rmtoll SR1 ADDR LL_I2C_IsActiveFlag_ADDR + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ADDR(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_ADDR) == (I2C_SR1_ADDR)); +} + +/** + * @brief Indicate the status of 10-bit header sent (master mode). + * @note RESET: When no ADD10 event occurred. + * SET: When the master has sent the first address byte (header). + * @rmtoll SR1 ADD10 LL_I2C_IsActiveFlag_ADD10 + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ADD10(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_ADD10) == (I2C_SR1_ADD10)); +} + +/** + * @brief Indicate the status of Acknowledge failure flag. + * @note RESET: No acknowledge failure. + * SET: When an acknowledge failure is received after a byte transmission. + * @rmtoll SR1 AF LL_I2C_IsActiveFlag_AF + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_AF(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_AF) == (I2C_SR1_AF)); +} + +/** + * @brief Indicate the status of Stop detection flag (slave mode). + * @note RESET: Clear default value. + * SET: When a Stop condition is detected. + * @rmtoll SR1 STOPF LL_I2C_IsActiveFlag_STOP + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_STOP(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_STOPF) == (I2C_SR1_STOPF)); +} + +/** + * @brief Indicate the status of Bus error flag. + * @note RESET: Clear default value. + * SET: When a misplaced Start or Stop condition is detected. + * @rmtoll SR1 BERR LL_I2C_IsActiveFlag_BERR + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BERR(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_BERR) == (I2C_SR1_BERR)); +} + +/** + * @brief Indicate the status of Arbitration lost flag. + * @note RESET: Clear default value. + * SET: When arbitration lost. + * @rmtoll SR1 ARLO LL_I2C_IsActiveFlag_ARLO + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ARLO(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_ARLO) == (I2C_SR1_ARLO)); +} + +/** + * @brief Indicate the status of Overrun/Underrun flag. + * @note RESET: Clear default value. + * SET: When an overrun/underrun error occurs (Clock Stretching Disabled). + * @rmtoll SR1 OVR LL_I2C_IsActiveFlag_OVR + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_OVR(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_OVR) == (I2C_SR1_OVR)); +} + +/** + * @brief Indicate the status of SMBus PEC error flag in reception. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll SR1 PECERR LL_I2C_IsActiveSMBusFlag_PECERR + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_PECERR(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_PECERR) == (I2C_SR1_PECERR)); +} + +/** + * @brief Indicate the status of SMBus Timeout detection flag. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll SR1 TIMEOUT LL_I2C_IsActiveSMBusFlag_TIMEOUT + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_TIMEOUT) == (I2C_SR1_TIMEOUT)); +} + +/** + * @brief Indicate the status of SMBus alert flag. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll SR1 SMBALERT LL_I2C_IsActiveSMBusFlag_ALERT + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_ALERT(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR1, I2C_SR1_SMBALERT) == (I2C_SR1_SMBALERT)); +} + +/** + * @brief Indicate the status of Bus Busy flag. + * @note RESET: Clear default value. + * SET: When a Start condition is detected. + * @rmtoll SR2 BUSY LL_I2C_IsActiveFlag_BUSY + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BUSY(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR2, I2C_SR2_BUSY) == (I2C_SR2_BUSY)); +} + +/** + * @brief Indicate the status of Dual flag. + * @note RESET: Received address matched with OAR1. + * SET: Received address matched with OAR2. + * @rmtoll SR2 DUALF LL_I2C_IsActiveFlag_DUAL + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_DUAL(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR2, I2C_SR2_DUALF) == (I2C_SR2_DUALF)); +} + +/** + * @brief Indicate the status of SMBus Host address reception (Slave mode). + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note RESET: No SMBus Host address + * SET: SMBus Host address received. + * @note This status is cleared by hardware after a STOP condition or repeated START condition. + * @rmtoll SR2 SMBHOST LL_I2C_IsActiveSMBusFlag_SMBHOST + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_SMBHOST(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR2, I2C_SR2_SMBHOST) == (I2C_SR2_SMBHOST)); +} + +/** + * @brief Indicate the status of SMBus Device default address reception (Slave mode). + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note RESET: No SMBus Device default address + * SET: SMBus Device default address received. + * @note This status is cleared by hardware after a STOP condition or repeated START condition. + * @rmtoll SR2 SMBDEFAULT LL_I2C_IsActiveSMBusFlag_SMBDEFAULT + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_SMBDEFAULT(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR2, I2C_SR2_SMBDEFAULT) == (I2C_SR2_SMBDEFAULT)); +} + +/** + * @brief Indicate the status of General call address reception (Slave mode). + * @note RESET: No General call address + * SET: General call address received. + * @note This status is cleared by hardware after a STOP condition or repeated START condition. + * @rmtoll SR2 GENCALL LL_I2C_IsActiveFlag_GENCALL + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_GENCALL(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR2, I2C_SR2_GENCALL) == (I2C_SR2_GENCALL)); +} + +/** + * @brief Indicate the status of Master/Slave flag. + * @note RESET: Slave Mode. + * SET: Master Mode. + * @rmtoll SR2 MSL LL_I2C_IsActiveFlag_MSL + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_MSL(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->SR2, I2C_SR2_MSL) == (I2C_SR2_MSL)); +} + +/** + * @brief Clear Address Matched flag. + * @note Clearing this flag is done by a read access to the I2Cx_SR1 + * register followed by a read access to the I2Cx_SR2 register. + * @rmtoll SR1 ADDR LL_I2C_ClearFlag_ADDR + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearFlag_ADDR(I2C_TypeDef *I2Cx) +{ + __IO uint32_t tmpreg; + tmpreg = I2Cx->SR1; + (void) tmpreg; + tmpreg = I2Cx->SR2; + (void) tmpreg; +} + +/** + * @brief Clear Acknowledge failure flag. + * @rmtoll SR1 AF LL_I2C_ClearFlag_AF + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearFlag_AF(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_AF); +} + +/** + * @brief Clear Stop detection flag. + * @note Clearing this flag is done by a read access to the I2Cx_SR1 + * register followed by a write access to I2Cx_CR1 register. + * @rmtoll SR1 STOPF LL_I2C_ClearFlag_STOP\n + * CR1 PE LL_I2C_ClearFlag_STOP + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearFlag_STOP(I2C_TypeDef *I2Cx) +{ + __IO uint32_t tmpreg; + tmpreg = I2Cx->SR1; + (void) tmpreg; + SET_BIT(I2Cx->CR1, I2C_CR1_PE); +} + +/** + * @brief Clear Bus error flag. + * @rmtoll SR1 BERR LL_I2C_ClearFlag_BERR + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearFlag_BERR(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_BERR); +} + +/** + * @brief Clear Arbitration lost flag. + * @rmtoll SR1 ARLO LL_I2C_ClearFlag_ARLO + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearFlag_ARLO(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_ARLO); +} + +/** + * @brief Clear Overrun/Underrun flag. + * @rmtoll SR1 OVR LL_I2C_ClearFlag_OVR + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearFlag_OVR(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_OVR); +} + +/** + * @brief Clear SMBus PEC error flag. + * @rmtoll SR1 PECERR LL_I2C_ClearSMBusFlag_PECERR + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearSMBusFlag_PECERR(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_PECERR); +} + +/** + * @brief Clear SMBus Timeout detection flag. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll SR1 TIMEOUT LL_I2C_ClearSMBusFlag_TIMEOUT + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_TIMEOUT); +} + +/** + * @brief Clear SMBus Alert flag. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll SR1 SMBALERT LL_I2C_ClearSMBusFlag_ALERT + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_ClearSMBusFlag_ALERT(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->SR1, I2C_SR1_SMBALERT); +} + +/** + * @} + */ + +/** @defgroup I2C_LL_EF_Data_Management Data_Management + * @{ + */ + +/** + * @brief Enable Reset of I2C peripheral. + * @rmtoll CR1 SWRST LL_I2C_EnableReset + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableReset(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_SWRST); +} + +/** + * @brief Disable Reset of I2C peripheral. + * @rmtoll CR1 SWRST LL_I2C_DisableReset + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableReset(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_SWRST); +} + +/** + * @brief Check if the I2C peripheral is under reset state or not. + * @rmtoll CR1 SWRST LL_I2C_IsResetEnabled + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsResetEnabled(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_SWRST) == (I2C_CR1_SWRST)); +} + +/** + * @brief Prepare the generation of a ACKnowledge or Non ACKnowledge condition after the address receive match code or next received byte. + * @note Usage in Slave or Master mode. + * @rmtoll CR1 ACK LL_I2C_AcknowledgeNextData + * @param I2Cx I2C Instance. + * @param TypeAcknowledge This parameter can be one of the following values: + * @arg @ref LL_I2C_ACK + * @arg @ref LL_I2C_NACK + * @retval None + */ +__STATIC_INLINE void LL_I2C_AcknowledgeNextData(I2C_TypeDef *I2Cx, uint32_t TypeAcknowledge) +{ + MODIFY_REG(I2Cx->CR1, I2C_CR1_ACK, TypeAcknowledge); +} + +/** + * @brief Generate a START or RESTART condition + * @note The START bit can be set even if bus is BUSY or I2C is in slave mode. + * This action has no effect when RELOAD is set. + * @rmtoll CR1 START LL_I2C_GenerateStartCondition + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_GenerateStartCondition(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_START); +} + +/** + * @brief Generate a STOP condition after the current byte transfer (master mode). + * @rmtoll CR1 STOP LL_I2C_GenerateStopCondition + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_GenerateStopCondition(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_STOP); +} + +/** + * @brief Enable bit POS (master/host mode). + * @note In that case, the ACK bit controls the (N)ACK of the next byte received or the PEC bit indicates that the next byte in shift register is a PEC. + * @rmtoll CR1 POS LL_I2C_EnableBitPOS + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableBitPOS(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_POS); +} + +/** + * @brief Disable bit POS (master/host mode). + * @note In that case, the ACK bit controls the (N)ACK of the current byte received or the PEC bit indicates that the current byte in shift register is a PEC. + * @rmtoll CR1 POS LL_I2C_DisableBitPOS + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableBitPOS(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_POS); +} + +/** + * @brief Check if bit POS is enabled or disabled. + * @rmtoll CR1 POS LL_I2C_IsEnabledBitPOS + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledBitPOS(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_POS) == (I2C_CR1_POS)); +} + +/** + * @brief Indicate the value of transfer direction. + * @note RESET: Bus is in read transfer (peripheral point of view). + * SET: Bus is in write transfer (peripheral point of view). + * @rmtoll SR2 TRA LL_I2C_GetTransferDirection + * @param I2Cx I2C Instance. + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2C_DIRECTION_WRITE + * @arg @ref LL_I2C_DIRECTION_READ + */ +__STATIC_INLINE uint32_t LL_I2C_GetTransferDirection(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->SR2, I2C_SR2_TRA)); +} + +/** + * @brief Enable DMA last transfer. + * @note This action mean that next DMA EOT is the last transfer. + * @rmtoll CR2 LAST LL_I2C_EnableLastDMA + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableLastDMA(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR2, I2C_CR2_LAST); +} + +/** + * @brief Disable DMA last transfer. + * @note This action mean that next DMA EOT is not the last transfer. + * @rmtoll CR2 LAST LL_I2C_DisableLastDMA + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableLastDMA(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR2, I2C_CR2_LAST); +} + +/** + * @brief Check if DMA last transfer is enabled or disabled. + * @rmtoll CR2 LAST LL_I2C_IsEnabledLastDMA + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledLastDMA(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR2, I2C_CR2_LAST) == (I2C_CR2_LAST)); +} + +/** + * @brief Enable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode). + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @note This feature is cleared by hardware when the PEC byte is transferred or compared, + * or by a START or STOP condition, it is also cleared by software. + * @rmtoll CR1 PEC LL_I2C_EnableSMBusPECCompare + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_EnableSMBusPECCompare(I2C_TypeDef *I2Cx) +{ + SET_BIT(I2Cx->CR1, I2C_CR1_PEC); +} + +/** + * @brief Disable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode). + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 PEC LL_I2C_DisableSMBusPECCompare + * @param I2Cx I2C Instance. + * @retval None + */ +__STATIC_INLINE void LL_I2C_DisableSMBusPECCompare(I2C_TypeDef *I2Cx) +{ + CLEAR_BIT(I2Cx->CR1, I2C_CR1_PEC); +} + +/** + * @brief Check if the SMBus Packet Error byte transfer or internal comparison is requested or not. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll CR1 PEC LL_I2C_IsEnabledSMBusPECCompare + * @param I2Cx I2C Instance. + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPECCompare(I2C_TypeDef *I2Cx) +{ + return (READ_BIT(I2Cx->CR1, I2C_CR1_PEC) == (I2C_CR1_PEC)); +} + +/** + * @brief Get the SMBus Packet Error byte calculated. + * @note Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not + * SMBus feature is supported by the I2Cx Instance. + * @rmtoll SR2 PEC LL_I2C_GetSMBusPEC + * @param I2Cx I2C Instance. + * @retval Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint32_t LL_I2C_GetSMBusPEC(I2C_TypeDef *I2Cx) +{ + return (uint32_t)(READ_BIT(I2Cx->SR2, I2C_SR2_PEC) >> I2C_SR2_PEC_Pos); +} + +/** + * @brief Read Receive Data register. + * @rmtoll DR DR LL_I2C_ReceiveData8 + * @param I2Cx I2C Instance. + * @retval Value between Min_Data=0x0 and Max_Data=0xFF + */ +__STATIC_INLINE uint8_t LL_I2C_ReceiveData8(I2C_TypeDef *I2Cx) +{ + return (uint8_t)(READ_BIT(I2Cx->DR, I2C_DR_DR)); +} + +/** + * @brief Write in Transmit Data Register . + * @rmtoll DR DR LL_I2C_TransmitData8 + * @param I2Cx I2C Instance. + * @param Data Value between Min_Data=0x0 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_I2C_TransmitData8(I2C_TypeDef *I2Cx, uint8_t Data) +{ + MODIFY_REG(I2Cx->DR, I2C_DR_DR, Data); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2C_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +uint32_t LL_I2C_Init(I2C_TypeDef *I2Cx, LL_I2C_InitTypeDef *I2C_InitStruct); +uint32_t LL_I2C_DeInit(I2C_TypeDef *I2Cx); +void LL_I2C_StructInit(LL_I2C_InitTypeDef *I2C_InitStruct); + + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* I2C1 || I2C2 || I2C3 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_I2C_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h new file mode 100644 index 00000000..ea23dc52 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h @@ -0,0 +1,985 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_pwr.h + * @author MCD Application Team + * @brief Header file of PWR LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_PWR_H +#define __STM32F4xx_LL_PWR_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined(PWR) + +/** @defgroup PWR_LL PWR + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWR_LL_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_LL_EC_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_PWR_WriteReg function + * @{ + */ +#define LL_PWR_CR_CSBF PWR_CR_CSBF /*!< Clear standby flag */ +#define LL_PWR_CR_CWUF PWR_CR_CWUF /*!< Clear wakeup flag */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_PWR_ReadReg function + * @{ + */ +#define LL_PWR_CSR_WUF PWR_CSR_WUF /*!< Wakeup flag */ +#define LL_PWR_CSR_SBF PWR_CSR_SBF /*!< Standby flag */ +#define LL_PWR_CSR_PVDO PWR_CSR_PVDO /*!< Power voltage detector output flag */ +#define LL_PWR_CSR_VOS PWR_CSR_VOSRDY /*!< Voltage scaling select flag */ +#if defined(PWR_CSR_EWUP) +#define LL_PWR_CSR_EWUP1 PWR_CSR_EWUP /*!< Enable WKUP pin */ +#elif defined(PWR_CSR_EWUP1) +#define LL_PWR_CSR_EWUP1 PWR_CSR_EWUP1 /*!< Enable WKUP pin 1 */ +#endif /* PWR_CSR_EWUP */ +#if defined(PWR_CSR_EWUP2) +#define LL_PWR_CSR_EWUP2 PWR_CSR_EWUP2 /*!< Enable WKUP pin 2 */ +#endif /* PWR_CSR_EWUP2 */ +#if defined(PWR_CSR_EWUP3) +#define LL_PWR_CSR_EWUP3 PWR_CSR_EWUP3 /*!< Enable WKUP pin 3 */ +#endif /* PWR_CSR_EWUP3 */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_REGU_VOLTAGE Regulator Voltage + * @{ + */ +#if defined(PWR_CR_VOS_0) +#define LL_PWR_REGU_VOLTAGE_SCALE3 (PWR_CR_VOS_0) +#define LL_PWR_REGU_VOLTAGE_SCALE2 (PWR_CR_VOS_1) +#define LL_PWR_REGU_VOLTAGE_SCALE1 (PWR_CR_VOS_0 | PWR_CR_VOS_1) /* The SCALE1 is not available for STM32F401xx devices */ +#else +#define LL_PWR_REGU_VOLTAGE_SCALE1 (PWR_CR_VOS) +#define LL_PWR_REGU_VOLTAGE_SCALE2 0x00000000U +#endif /* PWR_CR_VOS_0 */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_MODE_PWR Mode Power + * @{ + */ +#define LL_PWR_MODE_STOP_MAINREGU 0x00000000U /*!< Enter Stop mode when the CPU enters deepsleep */ +#define LL_PWR_MODE_STOP_LPREGU (PWR_CR_LPDS) /*!< Enter Stop mode (with low power Regulator ON) when the CPU enters deepsleep */ +#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) +#define LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (PWR_CR_MRUDS | PWR_CR_FPDS) /*!< Enter Stop mode (with main Regulator in under-drive mode) when the CPU enters deepsleep */ +#define LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (PWR_CR_LPDS | PWR_CR_LPUDS | PWR_CR_FPDS) /*!< Enter Stop mode (with low power Regulator in under-drive mode) when the CPU enters deepsleep */ +#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ +#if defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) +#define LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (PWR_CR_MRLVDS | PWR_CR_FPDS) /*!< Enter Stop mode (with main Regulator in Deep Sleep mode) when the CPU enters deepsleep */ +#define LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (PWR_CR_LPDS | PWR_CR_LPLVDS | PWR_CR_FPDS) /*!< Enter Stop mode (with low power Regulator in Deep Sleep mode) when the CPU enters deepsleep */ +#endif /* PWR_CR_MRLVDS && PWR_CR_LPLVDS && PWR_CR_FPDS */ +#define LL_PWR_MODE_STANDBY (PWR_CR_PDDS) /*!< Enter Standby mode when the CPU enters deepsleep */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_REGU_MODE_DS_MODE Regulator Mode In Deep Sleep Mode + * @{ + */ +#define LL_PWR_REGU_DSMODE_MAIN 0x00000000U /*!< Voltage Regulator in main mode during deepsleep mode */ +#define LL_PWR_REGU_DSMODE_LOW_POWER (PWR_CR_LPDS) /*!< Voltage Regulator in low-power mode during deepsleep mode */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_PVDLEVEL Power Voltage Detector Level + * @{ + */ +#define LL_PWR_PVDLEVEL_0 (PWR_CR_PLS_LEV0) /*!< Voltage threshold detected by PVD 2.2 V */ +#define LL_PWR_PVDLEVEL_1 (PWR_CR_PLS_LEV1) /*!< Voltage threshold detected by PVD 2.3 V */ +#define LL_PWR_PVDLEVEL_2 (PWR_CR_PLS_LEV2) /*!< Voltage threshold detected by PVD 2.4 V */ +#define LL_PWR_PVDLEVEL_3 (PWR_CR_PLS_LEV3) /*!< Voltage threshold detected by PVD 2.5 V */ +#define LL_PWR_PVDLEVEL_4 (PWR_CR_PLS_LEV4) /*!< Voltage threshold detected by PVD 2.6 V */ +#define LL_PWR_PVDLEVEL_5 (PWR_CR_PLS_LEV5) /*!< Voltage threshold detected by PVD 2.7 V */ +#define LL_PWR_PVDLEVEL_6 (PWR_CR_PLS_LEV6) /*!< Voltage threshold detected by PVD 2.8 V */ +#define LL_PWR_PVDLEVEL_7 (PWR_CR_PLS_LEV7) /*!< Voltage threshold detected by PVD 2.9 V */ +/** + * @} + */ +/** @defgroup PWR_LL_EC_WAKEUP_PIN Wakeup Pins + * @{ + */ +#if defined(PWR_CSR_EWUP) +#define LL_PWR_WAKEUP_PIN1 (PWR_CSR_EWUP) /*!< WKUP pin : PA0 */ +#endif /* PWR_CSR_EWUP */ +#if defined(PWR_CSR_EWUP1) +#define LL_PWR_WAKEUP_PIN1 (PWR_CSR_EWUP1) /*!< WKUP pin 1 : PA0 */ +#endif /* PWR_CSR_EWUP1 */ +#if defined(PWR_CSR_EWUP2) +#define LL_PWR_WAKEUP_PIN2 (PWR_CSR_EWUP2) /*!< WKUP pin 2 : PC0 or PC13 according to device */ +#endif /* PWR_CSR_EWUP2 */ +#if defined(PWR_CSR_EWUP3) +#define LL_PWR_WAKEUP_PIN3 (PWR_CSR_EWUP3) /*!< WKUP pin 3 : PC1 */ +#endif /* PWR_CSR_EWUP3 */ +/** + * @} + */ + +/** + * @} + */ + + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWR_LL_Exported_Macros PWR Exported Macros + * @{ + */ + +/** @defgroup PWR_LL_EM_WRITE_READ Common write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in PWR register + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_PWR_WriteReg(__REG__, __VALUE__) WRITE_REG(PWR->__REG__, (__VALUE__)) + +/** + * @brief Read a value in PWR register + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_PWR_ReadReg(__REG__) READ_REG(PWR->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup PWR_LL_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @defgroup PWR_LL_EF_Configuration Configuration + * @{ + */ +#if defined(PWR_CR_FISSR) +/** + * @brief Enable FLASH interface STOP while system Run is ON + * @rmtoll CR FISSR LL_PWR_EnableFLASHInterfaceSTOP + * @note This mode is enabled only with STOP low power mode. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableFLASHInterfaceSTOP(void) +{ + SET_BIT(PWR->CR, PWR_CR_FISSR); +} + +/** + * @brief Disable FLASH Interface STOP while system Run is ON + * @rmtoll CR FISSR LL_PWR_DisableFLASHInterfaceSTOP + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableFLASHInterfaceSTOP(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_FISSR); +} + +/** + * @brief Check if FLASH Interface STOP while system Run feature is enabled + * @rmtoll CR FISSR LL_PWR_IsEnabledFLASHInterfaceSTOP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledFLASHInterfaceSTOP(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_FISSR) == (PWR_CR_FISSR)); +} +#endif /* PWR_CR_FISSR */ + +#if defined(PWR_CR_FMSSR) +/** + * @brief Enable FLASH Memory STOP while system Run is ON + * @rmtoll CR FMSSR LL_PWR_EnableFLASHMemorySTOP + * @note This mode is enabled only with STOP low power mode. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableFLASHMemorySTOP(void) +{ + SET_BIT(PWR->CR, PWR_CR_FMSSR); +} + +/** + * @brief Disable FLASH Memory STOP while system Run is ON + * @rmtoll CR FMSSR LL_PWR_DisableFLASHMemorySTOP + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableFLASHMemorySTOP(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_FMSSR); +} + +/** + * @brief Check if FLASH Memory STOP while system Run feature is enabled + * @rmtoll CR FMSSR LL_PWR_IsEnabledFLASHMemorySTOP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledFLASHMemorySTOP(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_FMSSR) == (PWR_CR_FMSSR)); +} +#endif /* PWR_CR_FMSSR */ +#if defined(PWR_CR_UDEN) +/** + * @brief Enable Under Drive Mode + * @rmtoll CR UDEN LL_PWR_EnableUnderDriveMode + * @note This mode is enabled only with STOP low power mode. + * In this mode, the 1.2V domain is preserved in reduced leakage mode. This + * mode is only available when the main Regulator or the low power Regulator + * is in low voltage mode. + * @note If the Under-drive mode was enabled, it is automatically disabled after + * exiting Stop mode. + * When the voltage Regulator operates in Under-drive mode, an additional + * startup delay is induced when waking up from Stop mode. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableUnderDriveMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_UDEN); +} + +/** + * @brief Disable Under Drive Mode + * @rmtoll CR UDEN LL_PWR_DisableUnderDriveMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableUnderDriveMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_UDEN); +} + +/** + * @brief Check if Under Drive Mode is enabled + * @rmtoll CR UDEN LL_PWR_IsEnabledUnderDriveMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledUnderDriveMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_UDEN) == (PWR_CR_UDEN)); +} +#endif /* PWR_CR_UDEN */ + +#if defined(PWR_CR_ODSWEN) +/** + * @brief Enable Over drive switching + * @rmtoll CR ODSWEN LL_PWR_EnableOverDriveSwitching + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableOverDriveSwitching(void) +{ + SET_BIT(PWR->CR, PWR_CR_ODSWEN); +} + +/** + * @brief Disable Over drive switching + * @rmtoll CR ODSWEN LL_PWR_DisableOverDriveSwitching + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableOverDriveSwitching(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_ODSWEN); +} + +/** + * @brief Check if Over drive switching is enabled + * @rmtoll CR ODSWEN LL_PWR_IsEnabledOverDriveSwitching + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledOverDriveSwitching(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_ODSWEN) == (PWR_CR_ODSWEN)); +} +#endif /* PWR_CR_ODSWEN */ +#if defined(PWR_CR_ODEN) +/** + * @brief Enable Over drive Mode + * @rmtoll CR ODEN LL_PWR_EnableOverDriveMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableOverDriveMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_ODEN); +} + +/** + * @brief Disable Over drive Mode + * @rmtoll CR ODEN LL_PWR_DisableOverDriveMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableOverDriveMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_ODEN); +} + +/** + * @brief Check if Over drive switching is enabled + * @rmtoll CR ODEN LL_PWR_IsEnabledOverDriveMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledOverDriveMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_ODEN) == (PWR_CR_ODEN)); +} +#endif /* PWR_CR_ODEN */ +#if defined(PWR_CR_MRUDS) +/** + * @brief Enable Main Regulator in deepsleep under-drive Mode + * @rmtoll CR MRUDS LL_PWR_EnableMainRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableMainRegulatorDeepSleepUDMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_MRUDS); +} + +/** + * @brief Disable Main Regulator in deepsleep under-drive Mode + * @rmtoll CR MRUDS LL_PWR_DisableMainRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableMainRegulatorDeepSleepUDMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_MRUDS); +} + +/** + * @brief Check if Main Regulator in deepsleep under-drive Mode is enabled + * @rmtoll CR MRUDS LL_PWR_IsEnabledMainRegulatorDeepSleepUDMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledMainRegulatorDeepSleepUDMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_MRUDS) == (PWR_CR_MRUDS)); +} +#endif /* PWR_CR_MRUDS */ + +#if defined(PWR_CR_LPUDS) +/** + * @brief Enable Low Power Regulator in deepsleep under-drive Mode + * @rmtoll CR LPUDS LL_PWR_EnableLowPowerRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableLowPowerRegulatorDeepSleepUDMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_LPUDS); +} + +/** + * @brief Disable Low Power Regulator in deepsleep under-drive Mode + * @rmtoll CR LPUDS LL_PWR_DisableLowPowerRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableLowPowerRegulatorDeepSleepUDMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_LPUDS); +} + +/** + * @brief Check if Low Power Regulator in deepsleep under-drive Mode is enabled + * @rmtoll CR LPUDS LL_PWR_IsEnabledLowPowerRegulatorDeepSleepUDMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRegulatorDeepSleepUDMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_LPUDS) == (PWR_CR_LPUDS)); +} +#endif /* PWR_CR_LPUDS */ + +#if defined(PWR_CR_MRLVDS) +/** + * @brief Enable Main Regulator low voltage Mode + * @rmtoll CR MRLVDS LL_PWR_EnableMainRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableMainRegulatorLowVoltageMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_MRLVDS); +} + +/** + * @brief Disable Main Regulator low voltage Mode + * @rmtoll CR MRLVDS LL_PWR_DisableMainRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableMainRegulatorLowVoltageMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_MRLVDS); +} + +/** + * @brief Check if Main Regulator low voltage Mode is enabled + * @rmtoll CR MRLVDS LL_PWR_IsEnabledMainRegulatorLowVoltageMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledMainRegulatorLowVoltageMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_MRLVDS) == (PWR_CR_MRLVDS)); +} +#endif /* PWR_CR_MRLVDS */ + +#if defined(PWR_CR_LPLVDS) +/** + * @brief Enable Low Power Regulator low voltage Mode + * @rmtoll CR LPLVDS LL_PWR_EnableLowPowerRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableLowPowerRegulatorLowVoltageMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_LPLVDS); +} + +/** + * @brief Disable Low Power Regulator low voltage Mode + * @rmtoll CR LPLVDS LL_PWR_DisableLowPowerRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableLowPowerRegulatorLowVoltageMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_LPLVDS); +} + +/** + * @brief Check if Low Power Regulator low voltage Mode is enabled + * @rmtoll CR LPLVDS LL_PWR_IsEnabledLowPowerRegulatorLowVoltageMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRegulatorLowVoltageMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_LPLVDS) == (PWR_CR_LPLVDS)); +} +#endif /* PWR_CR_LPLVDS */ +/** + * @brief Set the main internal Regulator output voltage + * @rmtoll CR VOS LL_PWR_SetRegulVoltageScaling + * @param VoltageScaling This parameter can be one of the following values: + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 (*) + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE2 + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE3 + * (*) LL_PWR_REGU_VOLTAGE_SCALE1 is not available for STM32F401xx devices + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetRegulVoltageScaling(uint32_t VoltageScaling) +{ + MODIFY_REG(PWR->CR, PWR_CR_VOS, VoltageScaling); +} + +/** + * @brief Get the main internal Regulator output voltage + * @rmtoll CR VOS LL_PWR_GetRegulVoltageScaling + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 (*) + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE2 + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE3 + * (*) LL_PWR_REGU_VOLTAGE_SCALE1 is not available for STM32F401xx devices + */ +__STATIC_INLINE uint32_t LL_PWR_GetRegulVoltageScaling(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_VOS)); +} +/** + * @brief Enable the Flash Power Down in Stop Mode + * @rmtoll CR FPDS LL_PWR_EnableFlashPowerDown + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableFlashPowerDown(void) +{ + SET_BIT(PWR->CR, PWR_CR_FPDS); +} + +/** + * @brief Disable the Flash Power Down in Stop Mode + * @rmtoll CR FPDS LL_PWR_DisableFlashPowerDown + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableFlashPowerDown(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_FPDS); +} + +/** + * @brief Check if the Flash Power Down in Stop Mode is enabled + * @rmtoll CR FPDS LL_PWR_IsEnabledFlashPowerDown + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledFlashPowerDown(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_FPDS) == (PWR_CR_FPDS)); +} + +/** + * @brief Enable access to the backup domain + * @rmtoll CR DBP LL_PWR_EnableBkUpAccess + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableBkUpAccess(void) +{ + SET_BIT(PWR->CR, PWR_CR_DBP); +} + +/** + * @brief Disable access to the backup domain + * @rmtoll CR DBP LL_PWR_DisableBkUpAccess + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableBkUpAccess(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_DBP); +} + +/** + * @brief Check if the backup domain is enabled + * @rmtoll CR DBP LL_PWR_IsEnabledBkUpAccess + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpAccess(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_DBP) == (PWR_CR_DBP)); +} +/** + * @brief Enable the backup Regulator + * @rmtoll CSR BRE LL_PWR_EnableBkUpRegulator + * @note The BRE bit of the PWR_CSR register is protected against parasitic write access. + * The LL_PWR_EnableBkUpAccess() must be called before using this API. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableBkUpRegulator(void) +{ + SET_BIT(PWR->CSR, PWR_CSR_BRE); +} + +/** + * @brief Disable the backup Regulator + * @rmtoll CSR BRE LL_PWR_DisableBkUpRegulator + * @note The BRE bit of the PWR_CSR register is protected against parasitic write access. + * The LL_PWR_EnableBkUpAccess() must be called before using this API. + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableBkUpRegulator(void) +{ + CLEAR_BIT(PWR->CSR, PWR_CSR_BRE); +} + +/** + * @brief Check if the backup Regulator is enabled + * @rmtoll CSR BRE LL_PWR_IsEnabledBkUpRegulator + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpRegulator(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_BRE) == (PWR_CSR_BRE)); +} + +/** + * @brief Set voltage Regulator mode during deep sleep mode + * @rmtoll CR LPDS LL_PWR_SetRegulModeDS + * @param RegulMode This parameter can be one of the following values: + * @arg @ref LL_PWR_REGU_DSMODE_MAIN + * @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetRegulModeDS(uint32_t RegulMode) +{ + MODIFY_REG(PWR->CR, PWR_CR_LPDS, RegulMode); +} + +/** + * @brief Get voltage Regulator mode during deep sleep mode + * @rmtoll CR LPDS LL_PWR_GetRegulModeDS + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_REGU_DSMODE_MAIN + * @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER + */ +__STATIC_INLINE uint32_t LL_PWR_GetRegulModeDS(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_LPDS)); +} + +/** + * @brief Set Power Down mode when CPU enters deepsleep + * @rmtoll CR PDDS LL_PWR_SetPowerMode\n + * @rmtoll CR MRUDS LL_PWR_SetPowerMode\n + * @rmtoll CR LPUDS LL_PWR_SetPowerMode\n + * @rmtoll CR FPDS LL_PWR_SetPowerMode\n + * @rmtoll CR MRLVDS LL_PWR_SetPowerMode\n + * @rmtoll CR LPlVDS LL_PWR_SetPowerMode\n + * @rmtoll CR FPDS LL_PWR_SetPowerMode\n + * @rmtoll CR LPDS LL_PWR_SetPowerMode + * @param PDMode This parameter can be one of the following values: + * @arg @ref LL_PWR_MODE_STOP_MAINREGU + * @arg @ref LL_PWR_MODE_STOP_LPREGU + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (*) + * + * (*) not available on all devices + * @arg @ref LL_PWR_MODE_STANDBY + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode) +{ +#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) + MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS), PDMode); +#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) + MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS), PDMode); +#else + MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode); +#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ +} + +/** + * @brief Get Power Down mode when CPU enters deepsleep + * @rmtoll CR PDDS LL_PWR_GetPowerMode\n + * @rmtoll CR MRUDS LL_PWR_GetPowerMode\n + * @rmtoll CR LPUDS LL_PWR_GetPowerMode\n + * @rmtoll CR FPDS LL_PWR_GetPowerMode\n + * @rmtoll CR MRLVDS LL_PWR_GetPowerMode\n + * @rmtoll CR LPLVDS LL_PWR_GetPowerMode\n + * @rmtoll CR FPDS LL_PWR_GetPowerMode\n + * @rmtoll CR LPDS LL_PWR_GetPowerMode + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_MODE_STOP_MAINREGU + * @arg @ref LL_PWR_MODE_STOP_LPREGU + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (*) + * + * (*) not available on all devices + * @arg @ref LL_PWR_MODE_STANDBY + */ +__STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void) +{ +#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS))); +#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS))); +#else + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS))); +#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ +} + +/** + * @brief Configure the voltage threshold detected by the Power Voltage Detector + * @rmtoll CR PLS LL_PWR_SetPVDLevel + * @param PVDLevel This parameter can be one of the following values: + * @arg @ref LL_PWR_PVDLEVEL_0 + * @arg @ref LL_PWR_PVDLEVEL_1 + * @arg @ref LL_PWR_PVDLEVEL_2 + * @arg @ref LL_PWR_PVDLEVEL_3 + * @arg @ref LL_PWR_PVDLEVEL_4 + * @arg @ref LL_PWR_PVDLEVEL_5 + * @arg @ref LL_PWR_PVDLEVEL_6 + * @arg @ref LL_PWR_PVDLEVEL_7 + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetPVDLevel(uint32_t PVDLevel) +{ + MODIFY_REG(PWR->CR, PWR_CR_PLS, PVDLevel); +} + +/** + * @brief Get the voltage threshold detection + * @rmtoll CR PLS LL_PWR_GetPVDLevel + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_PVDLEVEL_0 + * @arg @ref LL_PWR_PVDLEVEL_1 + * @arg @ref LL_PWR_PVDLEVEL_2 + * @arg @ref LL_PWR_PVDLEVEL_3 + * @arg @ref LL_PWR_PVDLEVEL_4 + * @arg @ref LL_PWR_PVDLEVEL_5 + * @arg @ref LL_PWR_PVDLEVEL_6 + * @arg @ref LL_PWR_PVDLEVEL_7 + */ +__STATIC_INLINE uint32_t LL_PWR_GetPVDLevel(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_PLS)); +} + +/** + * @brief Enable Power Voltage Detector + * @rmtoll CR PVDE LL_PWR_EnablePVD + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnablePVD(void) +{ + SET_BIT(PWR->CR, PWR_CR_PVDE); +} + +/** + * @brief Disable Power Voltage Detector + * @rmtoll CR PVDE LL_PWR_DisablePVD + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisablePVD(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_PVDE); +} + +/** + * @brief Check if Power Voltage Detector is enabled + * @rmtoll CR PVDE LL_PWR_IsEnabledPVD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledPVD(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_PVDE) == (PWR_CR_PVDE)); +} + +/** + * @brief Enable the WakeUp PINx functionality + * @rmtoll CSR EWUP LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP1 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_EnableWakeUpPin + * @param WakeUpPin This parameter can be one of the following values: + * @arg @ref LL_PWR_WAKEUP_PIN1 + * @arg @ref LL_PWR_WAKEUP_PIN2 (*) + * @arg @ref LL_PWR_WAKEUP_PIN3 (*) + * + * (*) not available on all devices + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin) +{ + SET_BIT(PWR->CSR, WakeUpPin); +} + +/** + * @brief Disable the WakeUp PINx functionality + * @rmtoll CSR EWUP LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP1 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_DisableWakeUpPin + * @param WakeUpPin This parameter can be one of the following values: + * @arg @ref LL_PWR_WAKEUP_PIN1 + * @arg @ref LL_PWR_WAKEUP_PIN2 (*) + * @arg @ref LL_PWR_WAKEUP_PIN3 (*) + * + * (*) not available on all devices + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin) +{ + CLEAR_BIT(PWR->CSR, WakeUpPin); +} + +/** + * @brief Check if the WakeUp PINx functionality is enabled + * @rmtoll CSR EWUP LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP1 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_IsEnabledWakeUpPin + * @param WakeUpPin This parameter can be one of the following values: + * @arg @ref LL_PWR_WAKEUP_PIN1 + * @arg @ref LL_PWR_WAKEUP_PIN2 (*) + * @arg @ref LL_PWR_WAKEUP_PIN3 (*) + * + * (*) not available on all devices + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin) +{ + return (READ_BIT(PWR->CSR, WakeUpPin) == (WakeUpPin)); +} + + +/** + * @} + */ + +/** @defgroup PWR_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Get Wake-up Flag + * @rmtoll CSR WUF LL_PWR_IsActiveFlag_WU + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_WU(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_WUF) == (PWR_CSR_WUF)); +} + +/** + * @brief Get Standby Flag + * @rmtoll CSR SBF LL_PWR_IsActiveFlag_SB + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_SB(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_SBF) == (PWR_CSR_SBF)); +} + +/** + * @brief Get Backup Regulator ready Flag + * @rmtoll CSR BRR LL_PWR_IsActiveFlag_BRR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_BRR(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_BRR) == (PWR_CSR_BRR)); +} +/** + * @brief Indicate whether VDD voltage is below the selected PVD threshold + * @rmtoll CSR PVDO LL_PWR_IsActiveFlag_PVDO + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_PVDO(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_PVDO) == (PWR_CSR_PVDO)); +} + +/** + * @brief Indicate whether the Regulator is ready in the selected voltage range or if its output voltage is still changing to the required voltage level + * @rmtoll CSR VOS LL_PWR_IsActiveFlag_VOS + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_VOS(void) +{ + return (READ_BIT(PWR->CSR, LL_PWR_CSR_VOS) == (LL_PWR_CSR_VOS)); +} +#if defined(PWR_CR_ODEN) +/** + * @brief Indicate whether the Over-Drive mode is ready or not + * @rmtoll CSR ODRDY LL_PWR_IsActiveFlag_OD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_OD(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_ODRDY) == (PWR_CSR_ODRDY)); +} +#endif /* PWR_CR_ODEN */ + +#if defined(PWR_CR_ODSWEN) +/** + * @brief Indicate whether the Over-Drive mode switching is ready or not + * @rmtoll CSR ODSWRDY LL_PWR_IsActiveFlag_ODSW + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_ODSW(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_ODSWRDY) == (PWR_CSR_ODSWRDY)); +} +#endif /* PWR_CR_ODSWEN */ + +#if defined(PWR_CR_UDEN) +/** + * @brief Indicate whether the Under-Drive mode is ready or not + * @rmtoll CSR UDRDY LL_PWR_IsActiveFlag_UD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_UD(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_UDRDY) == (PWR_CSR_UDRDY)); +} +#endif /* PWR_CR_UDEN */ +/** + * @brief Clear Standby Flag + * @rmtoll CR CSBF LL_PWR_ClearFlag_SB + * @retval None + */ +__STATIC_INLINE void LL_PWR_ClearFlag_SB(void) +{ + SET_BIT(PWR->CR, PWR_CR_CSBF); +} + +/** + * @brief Clear Wake-up Flags + * @rmtoll CR CWUF LL_PWR_ClearFlag_WU + * @retval None + */ +__STATIC_INLINE void LL_PWR_ClearFlag_WU(void) +{ + SET_BIT(PWR->CR, PWR_CR_CWUF); +} +#if defined(PWR_CSR_UDRDY) +/** + * @brief Clear Under-Drive ready Flag + * @rmtoll CSR UDRDY LL_PWR_ClearFlag_UD + * @retval None + */ +__STATIC_INLINE void LL_PWR_ClearFlag_UD(void) +{ + WRITE_REG(PWR->CSR, PWR_CSR_UDRDY); +} +#endif /* PWR_CSR_UDRDY */ + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup PWR_LL_EF_Init De-initialization function + * @{ + */ +ErrorStatus LL_PWR_DeInit(void); +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(PWR) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_PWR_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h new file mode 100644 index 00000000..0a6a5b92 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h @@ -0,0 +1,7101 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_rcc.h + * @author MCD Application Team + * @brief Header file of RCC LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_RCC_H +#define __STM32F4xx_LL_RCC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined(RCC) + +/** @defgroup RCC_LL RCC + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_LL_Private_Variables RCC Private Variables + * @{ + */ + +#if defined(RCC_PLLSAI_SUPPORT) && defined(LTDC) +static const uint8_t aRCC_PLLSAIDIVRPrescTable[4] = {2, 4, 8, 16}; +#endif /* RCC_PLLSAI_SUPPORT && LTDC */ + +/** + * @} + */ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_Private_Macros RCC Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_Exported_Types RCC Exported Types + * @{ + */ + +/** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure + * @{ + */ + +/** + * @brief RCC Clocks Frequency Structure + */ +typedef struct +{ + uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */ + uint32_t HCLK_Frequency; /*!< HCLK clock frequency */ + uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */ + uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */ +} LL_RCC_ClocksTypeDef; + +/** + * @} + */ + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_LL_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation + * @brief Defines used to adapt values of different oscillators + * @note These values could be modified in the user environment according to + * HW set-up. + * @{ + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE 25000000U /*!< Value of the HSE oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) +#define HSI_VALUE 16000000U /*!< Value of the HSI oscillator in Hz */ +#endif /* HSI_VALUE */ + +#if !defined (LSE_VALUE) +#define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSI_VALUE) +#define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */ +#endif /* LSI_VALUE */ + +#if !defined (EXTERNAL_CLOCK_VALUE) +#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the I2S_CKIN external oscillator in Hz */ +#endif /* EXTERNAL_CLOCK_VALUE */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_RCC_WriteReg function + * @{ + */ +#define LL_RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC /*!< LSI Ready Interrupt Clear */ +#define LL_RCC_CIR_LSERDYC RCC_CIR_LSERDYC /*!< LSE Ready Interrupt Clear */ +#define LL_RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC /*!< HSI Ready Interrupt Clear */ +#define LL_RCC_CIR_HSERDYC RCC_CIR_HSERDYC /*!< HSE Ready Interrupt Clear */ +#define LL_RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC /*!< PLL Ready Interrupt Clear */ +#if defined(RCC_PLLI2S_SUPPORT) +#define LL_RCC_CIR_PLLI2SRDYC RCC_CIR_PLLI2SRDYC /*!< PLLI2S Ready Interrupt Clear */ +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CIR_PLLSAIRDYC RCC_CIR_PLLSAIRDYC /*!< PLLSAI Ready Interrupt Clear */ +#endif /* RCC_PLLSAI_SUPPORT */ +#define LL_RCC_CIR_CSSC RCC_CIR_CSSC /*!< Clock Security System Interrupt Clear */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_RCC_ReadReg function + * @{ + */ +#define LL_RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF /*!< LSI Ready Interrupt flag */ +#define LL_RCC_CIR_LSERDYF RCC_CIR_LSERDYF /*!< LSE Ready Interrupt flag */ +#define LL_RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF /*!< HSI Ready Interrupt flag */ +#define LL_RCC_CIR_HSERDYF RCC_CIR_HSERDYF /*!< HSE Ready Interrupt flag */ +#define LL_RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF /*!< PLL Ready Interrupt flag */ +#if defined(RCC_PLLI2S_SUPPORT) +#define LL_RCC_CIR_PLLI2SRDYF RCC_CIR_PLLI2SRDYF /*!< PLLI2S Ready Interrupt flag */ +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CIR_PLLSAIRDYF RCC_CIR_PLLSAIRDYF /*!< PLLSAI Ready Interrupt flag */ +#endif /* RCC_PLLSAI_SUPPORT */ +#define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */ +#define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */ +#define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */ +#define LL_RCC_CSR_PORRSTF RCC_CSR_PORRSTF /*!< POR/PDR reset flag */ +#define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */ +#define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */ +#define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */ +#if defined(RCC_CSR_BORRSTF) +#define LL_RCC_CSR_BORRSTF RCC_CSR_BORRSTF /*!< BOR reset flag */ +#endif /* RCC_CSR_BORRSTF */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions + * @{ + */ +#define LL_RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE /*!< LSI Ready Interrupt Enable */ +#define LL_RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE /*!< LSE Ready Interrupt Enable */ +#define LL_RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE /*!< HSI Ready Interrupt Enable */ +#define LL_RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE /*!< HSE Ready Interrupt Enable */ +#define LL_RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE /*!< PLL Ready Interrupt Enable */ +#if defined(RCC_PLLI2S_SUPPORT) +#define LL_RCC_CIR_PLLI2SRDYIE RCC_CIR_PLLI2SRDYIE /*!< PLLI2S Ready Interrupt Enable */ +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CIR_PLLSAIRDYIE RCC_CIR_PLLSAIRDYIE /*!< PLLSAI Ready Interrupt Enable */ +#endif /* RCC_PLLSAI_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch + * @{ + */ +#define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */ +#define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */ +#define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */ +#if defined(RCC_CFGR_SW_PLLR) +#define LL_RCC_SYS_CLKSOURCE_PLLR RCC_CFGR_SW_PLLR /*!< PLLR selection as system clock */ +#endif /* RCC_CFGR_SW_PLLR */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status + * @{ + */ +#define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ +#define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ +#define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ +#if defined(RCC_PLLR_SYSCLK_SUPPORT) +#define LL_RCC_SYS_CLKSOURCE_STATUS_PLLR RCC_CFGR_SWS_PLLR /*!< PLLR used as system clock */ +#endif /* RCC_PLLR_SYSCLK_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler + * @{ + */ +#define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */ +#define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */ +#define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */ +#define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */ +#define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */ +#define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */ +#define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */ +#define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */ +#define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1) + * @{ + */ +#define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */ +#define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */ +#define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */ +#define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */ +#define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2) + * @{ + */ +#define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */ +#define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */ +#define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */ +#define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */ +#define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_MCOxSOURCE MCO source selection + * @{ + */ +#define LL_RCC_MCO1SOURCE_HSI (uint32_t)(RCC_CFGR_MCO1|0x00000000U) /*!< HSI selection as MCO1 source */ +#define LL_RCC_MCO1SOURCE_LSE (uint32_t)(RCC_CFGR_MCO1|(RCC_CFGR_MCO1_0 >> 16U)) /*!< LSE selection as MCO1 source */ +#define LL_RCC_MCO1SOURCE_HSE (uint32_t)(RCC_CFGR_MCO1|(RCC_CFGR_MCO1_1 >> 16U)) /*!< HSE selection as MCO1 source */ +#define LL_RCC_MCO1SOURCE_PLLCLK (uint32_t)(RCC_CFGR_MCO1|((RCC_CFGR_MCO1_1|RCC_CFGR_MCO1_0) >> 16U)) /*!< PLLCLK selection as MCO1 source */ +#if defined(RCC_CFGR_MCO2) +#define LL_RCC_MCO2SOURCE_SYSCLK (uint32_t)(RCC_CFGR_MCO2|0x00000000U) /*!< SYSCLK selection as MCO2 source */ +#define LL_RCC_MCO2SOURCE_PLLI2S (uint32_t)(RCC_CFGR_MCO2|(RCC_CFGR_MCO2_0 >> 16U)) /*!< PLLI2S selection as MCO2 source */ +#define LL_RCC_MCO2SOURCE_HSE (uint32_t)(RCC_CFGR_MCO2|(RCC_CFGR_MCO2_1 >> 16U)) /*!< HSE selection as MCO2 source */ +#define LL_RCC_MCO2SOURCE_PLLCLK (uint32_t)(RCC_CFGR_MCO2|((RCC_CFGR_MCO2_1|RCC_CFGR_MCO2_0) >> 16U)) /*!< PLLCLK selection as MCO2 source */ +#endif /* RCC_CFGR_MCO2 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_MCOx_DIV MCO prescaler + * @{ + */ +#define LL_RCC_MCO1_DIV_1 (uint32_t)(RCC_CFGR_MCO1PRE|0x00000000U) /*!< MCO1 not divided */ +#define LL_RCC_MCO1_DIV_2 (uint32_t)(RCC_CFGR_MCO1PRE|(RCC_CFGR_MCO1PRE_2 >> 16U)) /*!< MCO1 divided by 2 */ +#define LL_RCC_MCO1_DIV_3 (uint32_t)(RCC_CFGR_MCO1PRE|((RCC_CFGR_MCO1PRE_2|RCC_CFGR_MCO1PRE_0) >> 16U)) /*!< MCO1 divided by 3 */ +#define LL_RCC_MCO1_DIV_4 (uint32_t)(RCC_CFGR_MCO1PRE|((RCC_CFGR_MCO1PRE_2|RCC_CFGR_MCO1PRE_1) >> 16U)) /*!< MCO1 divided by 4 */ +#define LL_RCC_MCO1_DIV_5 (uint32_t)(RCC_CFGR_MCO1PRE|(RCC_CFGR_MCO1PRE >> 16U)) /*!< MCO1 divided by 5 */ +#if defined(RCC_CFGR_MCO2PRE) +#define LL_RCC_MCO2_DIV_1 (uint32_t)(RCC_CFGR_MCO2PRE|0x00000000U) /*!< MCO2 not divided */ +#define LL_RCC_MCO2_DIV_2 (uint32_t)(RCC_CFGR_MCO2PRE|(RCC_CFGR_MCO2PRE_2 >> 16U)) /*!< MCO2 divided by 2 */ +#define LL_RCC_MCO2_DIV_3 (uint32_t)(RCC_CFGR_MCO2PRE|((RCC_CFGR_MCO2PRE_2|RCC_CFGR_MCO2PRE_0) >> 16U)) /*!< MCO2 divided by 3 */ +#define LL_RCC_MCO2_DIV_4 (uint32_t)(RCC_CFGR_MCO2PRE|((RCC_CFGR_MCO2PRE_2|RCC_CFGR_MCO2PRE_1) >> 16U)) /*!< MCO2 divided by 4 */ +#define LL_RCC_MCO2_DIV_5 (uint32_t)(RCC_CFGR_MCO2PRE|(RCC_CFGR_MCO2PRE >> 16U)) /*!< MCO2 divided by 5 */ +#endif /* RCC_CFGR_MCO2PRE */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_RTC_HSEDIV HSE prescaler for RTC clock + * @{ + */ +#define LL_RCC_RTC_NOCLOCK 0x00000000U /*!< HSE not divided */ +#define LL_RCC_RTC_HSE_DIV_2 RCC_CFGR_RTCPRE_1 /*!< HSE clock divided by 2 */ +#define LL_RCC_RTC_HSE_DIV_3 (RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 3 */ +#define LL_RCC_RTC_HSE_DIV_4 RCC_CFGR_RTCPRE_2 /*!< HSE clock divided by 4 */ +#define LL_RCC_RTC_HSE_DIV_5 (RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 5 */ +#define LL_RCC_RTC_HSE_DIV_6 (RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 6 */ +#define LL_RCC_RTC_HSE_DIV_7 (RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 7 */ +#define LL_RCC_RTC_HSE_DIV_8 RCC_CFGR_RTCPRE_3 /*!< HSE clock divided by 8 */ +#define LL_RCC_RTC_HSE_DIV_9 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 9 */ +#define LL_RCC_RTC_HSE_DIV_10 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 10 */ +#define LL_RCC_RTC_HSE_DIV_11 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 11 */ +#define LL_RCC_RTC_HSE_DIV_12 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2) /*!< HSE clock divided by 12 */ +#define LL_RCC_RTC_HSE_DIV_13 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 13 */ +#define LL_RCC_RTC_HSE_DIV_14 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 14 */ +#define LL_RCC_RTC_HSE_DIV_15 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 15 */ +#define LL_RCC_RTC_HSE_DIV_16 RCC_CFGR_RTCPRE_4 /*!< HSE clock divided by 16 */ +#define LL_RCC_RTC_HSE_DIV_17 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 17 */ +#define LL_RCC_RTC_HSE_DIV_18 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 18 */ +#define LL_RCC_RTC_HSE_DIV_19 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 19 */ +#define LL_RCC_RTC_HSE_DIV_20 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2) /*!< HSE clock divided by 20 */ +#define LL_RCC_RTC_HSE_DIV_21 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 21 */ +#define LL_RCC_RTC_HSE_DIV_22 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 22 */ +#define LL_RCC_RTC_HSE_DIV_23 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 23 */ +#define LL_RCC_RTC_HSE_DIV_24 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3) /*!< HSE clock divided by 24 */ +#define LL_RCC_RTC_HSE_DIV_25 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 25 */ +#define LL_RCC_RTC_HSE_DIV_26 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 26 */ +#define LL_RCC_RTC_HSE_DIV_27 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 27 */ +#define LL_RCC_RTC_HSE_DIV_28 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2) /*!< HSE clock divided by 28 */ +#define LL_RCC_RTC_HSE_DIV_29 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 29 */ +#define LL_RCC_RTC_HSE_DIV_30 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 30 */ +#define LL_RCC_RTC_HSE_DIV_31 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 31 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency + * @{ + */ +#define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */ +#define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +#if defined(FMPI2C1) +/** @defgroup RCC_LL_EC_FMPI2C1_CLKSOURCE Peripheral FMPI2C clock source selection + * @{ + */ +#define LL_RCC_FMPI2C1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 clock used as FMPI2C1 clock source */ +#define LL_RCC_FMPI2C1_CLKSOURCE_SYSCLK RCC_DCKCFGR2_FMPI2C1SEL_0 /*!< SYSCLK clock used as FMPI2C1 clock source */ +#define LL_RCC_FMPI2C1_CLKSOURCE_HSI RCC_DCKCFGR2_FMPI2C1SEL_1 /*!< HSI clock used as FMPI2C1 clock source */ +/** + * @} + */ +#endif /* FMPI2C1 */ + +#if defined(LPTIM1) +/** @defgroup RCC_LL_EC_LPTIM1_CLKSOURCE Peripheral LPTIM clock source selection + * @{ + */ +#define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 clock used as LPTIM1 clock */ +#define LL_RCC_LPTIM1_CLKSOURCE_HSI RCC_DCKCFGR2_LPTIM1SEL_0 /*!< LSI oscillator clock used as LPTIM1 clock */ +#define LL_RCC_LPTIM1_CLKSOURCE_LSI RCC_DCKCFGR2_LPTIM1SEL_1 /*!< HSI oscillator clock used as LPTIM1 clock */ +#define LL_RCC_LPTIM1_CLKSOURCE_LSE (uint32_t)(RCC_DCKCFGR2_LPTIM1SEL_1 | RCC_DCKCFGR2_LPTIM1SEL_0) /*!< LSE oscillator clock used as LPTIM1 clock */ +/** + * @} + */ +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** @defgroup RCC_LL_EC_SAIx_CLKSOURCE Peripheral SAI clock source selection + * @{ + */ +#if defined(RCC_DCKCFGR_SAI1SRC) +#define LL_RCC_SAI1_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI1SRC | 0x00000000U) /*!< PLLSAI clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1SRC | (RCC_DCKCFGR_SAI1SRC_0 >> 16)) /*!< PLLI2S clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI1SRC | (RCC_DCKCFGR_SAI1SRC_1 >> 16)) /*!< PLL clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1SRC | (RCC_DCKCFGR_SAI1SRC >> 16)) /*!< External pin clock used as SAI1 clock source */ +#endif /* RCC_DCKCFGR_SAI1SRC */ +#if defined(RCC_DCKCFGR_SAI2SRC) +#define LL_RCC_SAI2_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI2SRC | 0x00000000U) /*!< PLLSAI clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI2SRC | (RCC_DCKCFGR_SAI2SRC_0 >> 16)) /*!< PLLI2S clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI2SRC | (RCC_DCKCFGR_SAI2SRC_1 >> 16)) /*!< PLL clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_SAI2SRC | (RCC_DCKCFGR_SAI2SRC >> 16)) /*!< PLL Main clock used as SAI2 clock source */ +#endif /* RCC_DCKCFGR_SAI2SRC */ +#if defined(RCC_DCKCFGR_SAI1ASRC) +#if defined(RCC_SAI1A_PLLSOURCE_SUPPORT) +#define LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1ASRC | 0x00000000U) /*!< PLLI2S clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_0 >> 16)) /*!< External pin used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_1 >> 16)) /*!< PLL clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC >> 16)) /*!< PLL Main clock used as SAI1 block A clock source */ +#else +#define LL_RCC_SAI1_A_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI1ASRC | 0x00000000U) /*!< PLLSAI clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_0 >> 16)) /*!< PLLI2S clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_1 >> 16)) /*!< External pin clock used as SAI1 block A clock source */ +#endif /* RCC_SAI1A_PLLSOURCE_SUPPORT */ +#endif /* RCC_DCKCFGR_SAI1ASRC */ +#if defined(RCC_DCKCFGR_SAI1BSRC) +#if defined(RCC_SAI1B_PLLSOURCE_SUPPORT) +#define LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1BSRC | 0x00000000U) /*!< PLLI2S clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_0 >> 16)) /*!< External pin used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_1 >> 16)) /*!< PLL clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC >> 16)) /*!< PLL Main clock used as SAI1 block B clock source */ +#else +#define LL_RCC_SAI1_B_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI1BSRC | 0x00000000U) /*!< PLLSAI clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_0 >> 16)) /*!< PLLI2S clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_1 >> 16)) /*!< External pin clock used as SAI1 block B clock source */ +#endif /* RCC_SAI1B_PLLSOURCE_SUPPORT */ +#endif /* RCC_DCKCFGR_SAI1BSRC */ +/** + * @} + */ +#endif /* SAI1 */ + +#if defined(RCC_DCKCFGR_SDIOSEL) || defined(RCC_DCKCFGR2_SDIOSEL) +/** @defgroup RCC_LL_EC_SDIOx_CLKSOURCE Peripheral SDIO clock source selection + * @{ + */ +#define LL_RCC_SDIO_CLKSOURCE_PLL48CLK 0x00000000U /*!< PLL 48M domain clock used as SDIO clock */ +#if defined(RCC_DCKCFGR_SDIOSEL) +#define LL_RCC_SDIO_CLKSOURCE_SYSCLK RCC_DCKCFGR_SDIOSEL /*!< System clock clock used as SDIO clock */ +#else +#define LL_RCC_SDIO_CLKSOURCE_SYSCLK RCC_DCKCFGR2_SDIOSEL /*!< System clock clock used as SDIO clock */ +#endif /* RCC_DCKCFGR_SDIOSEL */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_SDIOSEL || RCC_DCKCFGR2_SDIOSEL */ + +#if defined(DSI) +/** @defgroup RCC_LL_EC_DSI_CLKSOURCE Peripheral DSI clock source selection + * @{ + */ +#define LL_RCC_DSI_CLKSOURCE_PHY 0x00000000U /*!< DSI-PHY clock used as DSI byte lane clock source */ +#define LL_RCC_DSI_CLKSOURCE_PLL RCC_DCKCFGR_DSISEL /*!< PLL clock used as DSI byte lane clock source */ +/** + * @} + */ +#endif /* DSI */ + +#if defined(CEC) +/** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection + * @{ + */ +#define LL_RCC_CEC_CLKSOURCE_HSI_DIV488 0x00000000U /*!< HSI oscillator clock divided by 488 used as CEC clock */ +#define LL_RCC_CEC_CLKSOURCE_LSE RCC_DCKCFGR2_CECSEL /*!< LSE oscillator clock used as CEC clock */ +/** + * @} + */ +#endif /* CEC */ + +/** @defgroup RCC_LL_EC_I2S1_CLKSOURCE Peripheral I2S clock source selection + * @{ + */ +#if defined(RCC_CFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE_PLLI2S 0x00000000U /*!< I2S oscillator clock used as I2S1 clock */ +#define LL_RCC_I2S1_CLKSOURCE_PIN RCC_CFGR_I2SSRC /*!< External pin clock used as I2S1 clock */ +#endif /* RCC_CFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_I2SSRC | 0x00000000U) /*!< PLL clock used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_I2SSRC | (RCC_DCKCFGR_I2SSRC_0 >> 16)) /*!< External pin used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_I2SSRC | (RCC_DCKCFGR_I2SSRC_1 >> 16)) /*!< PLL Main clock used as I2S1 clock source */ +#endif /* RCC_DCKCFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2S1SRC) +#define LL_RCC_I2S1_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_I2S1SRC | 0x00000000U) /*!< PLLI2S clock used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_I2S1SRC | (RCC_DCKCFGR_I2S1SRC_0 >> 16)) /*!< External pin used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_I2S1SRC | (RCC_DCKCFGR_I2S1SRC_1 >> 16)) /*!< PLL clock used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_I2S1SRC | (RCC_DCKCFGR_I2S1SRC >> 16)) /*!< PLL Main clock used as I2S1 clock source */ +#endif /* RCC_DCKCFGR_I2S1SRC */ +#if defined(RCC_DCKCFGR_I2S2SRC) +#define LL_RCC_I2S2_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_I2S2SRC | 0x00000000U) /*!< PLLI2S clock used as I2S2 clock source */ +#define LL_RCC_I2S2_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_I2S2SRC | (RCC_DCKCFGR_I2S2SRC_0 >> 16)) /*!< External pin used as I2S2 clock source */ +#define LL_RCC_I2S2_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_I2S2SRC | (RCC_DCKCFGR_I2S2SRC_1 >> 16)) /*!< PLL clock used as I2S2 clock source */ +#define LL_RCC_I2S2_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_I2S2SRC | (RCC_DCKCFGR_I2S2SRC >> 16)) /*!< PLL Main clock used as I2S2 clock source */ +#endif /* RCC_DCKCFGR_I2S2SRC */ +/** + * @} + */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** @defgroup RCC_LL_EC_CK48M_CLKSOURCE Peripheral 48Mhz domain clock source selection + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE_PLL 0x00000000U /*!< PLL oscillator clock used as 48Mhz domain clock */ +#define LL_RCC_CK48M_CLKSOURCE_PLLSAI RCC_DCKCFGR_CK48MSEL /*!< PLLSAI oscillator clock used as 48Mhz domain clock */ +#endif /* RCC_DCKCFGR_CK48MSEL */ +#if defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE_PLL 0x00000000U /*!< PLL oscillator clock used as 48Mhz domain clock */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CK48M_CLKSOURCE_PLLSAI RCC_DCKCFGR2_CK48MSEL /*!< PLLSAI oscillator clock used as 48Mhz domain clock */ +#endif /* RCC_PLLSAI_SUPPORT */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define LL_RCC_CK48M_CLKSOURCE_PLLI2S RCC_DCKCFGR2_CK48MSEL /*!< PLLI2S oscillator clock used as 48Mhz domain clock */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +#endif /* RCC_DCKCFGR2_CK48MSEL */ +/** + * @} + */ + +#if defined(RNG) +/** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG clock source selection + * @{ + */ +#define LL_RCC_RNG_CLKSOURCE_PLL LL_RCC_CK48M_CLKSOURCE_PLL /*!< PLL clock used as RNG clock source */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_RNG_CLKSOURCE_PLLSAI LL_RCC_CK48M_CLKSOURCE_PLLSAI /*!< PLLSAI clock used as RNG clock source */ +#endif /* RCC_PLLSAI_SUPPORT */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define LL_RCC_RNG_CLKSOURCE_PLLI2S LL_RCC_CK48M_CLKSOURCE_PLLI2S /*!< PLLI2S clock used as RNG clock source */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +/** + * @} + */ +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection + * @{ + */ +#define LL_RCC_USB_CLKSOURCE_PLL LL_RCC_CK48M_CLKSOURCE_PLL /*!< PLL clock used as USB clock source */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_USB_CLKSOURCE_PLLSAI LL_RCC_CK48M_CLKSOURCE_PLLSAI /*!< PLLSAI clock used as USB clock source */ +#endif /* RCC_PLLSAI_SUPPORT */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define LL_RCC_USB_CLKSOURCE_PLLI2S LL_RCC_CK48M_CLKSOURCE_PLLI2S /*!< PLLI2S clock used as USB clock source */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +/** + * @} + */ +#endif /* USB_OTG_FS || USB_OTG_HS */ + +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(DFSDM1_Channel0) || defined(DFSDM2_Channel0) +/** @defgroup RCC_LL_EC_DFSDM1_AUDIO_CLKSOURCE Peripheral DFSDM Audio clock source selection + * @{ + */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S1 (uint32_t)(RCC_DCKCFGR_CKDFSDM1ASEL | 0x00000000U) /*!< I2S1 clock used as DFSDM1 Audio clock source */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S2 (uint32_t)(RCC_DCKCFGR_CKDFSDM1ASEL | (RCC_DCKCFGR_CKDFSDM1ASEL << 16)) /*!< I2S2 clock used as DFSDM1 Audio clock source */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S1 (uint32_t)(RCC_DCKCFGR_CKDFSDM2ASEL | 0x00000000U) /*!< I2S1 clock used as DFSDM2 Audio clock source */ +#define LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S2 (uint32_t)(RCC_DCKCFGR_CKDFSDM2ASEL | (RCC_DCKCFGR_CKDFSDM2ASEL << 16)) /*!< I2S2 clock used as DFSDM2 Audio clock source */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_DFSDM1_CLKSOURCE Peripheral DFSDM clock source selection + * @{ + */ +#define LL_RCC_DFSDM1_CLKSOURCE_PCLK2 0x00000000U /*!< PCLK2 clock used as DFSDM1 clock */ +#define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK RCC_DCKCFGR_CKDFSDM1SEL /*!< System clock used as DFSDM1 clock */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_CLKSOURCE_PCLK2 0x00000000U /*!< PCLK2 clock used as DFSDM2 clock */ +#define LL_RCC_DFSDM2_CLKSOURCE_SYSCLK RCC_DCKCFGR_CKDFSDM1SEL /*!< System clock used as DFSDM2 clock */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ +#endif /* DFSDM1_Channel0 || DFSDM2_Channel0 */ + +#if defined(FMPI2C1) +/** @defgroup RCC_LL_EC_FMPI2C1 Peripheral FMPI2C get clock source + * @{ + */ +#define LL_RCC_FMPI2C1_CLKSOURCE RCC_DCKCFGR2_FMPI2C1SEL /*!< FMPI2C1 Clock source selection */ +/** + * @} + */ +#endif /* FMPI2C1 */ + +#if defined(SPDIFRX) +/** @defgroup RCC_LL_EC_SPDIFRX_CLKSOURCE Peripheral SPDIFRX clock source selection + * @{ + */ +#define LL_RCC_SPDIFRX1_CLKSOURCE_PLL 0x00000000U /*!< PLL clock used as SPDIFRX clock source */ +#define LL_RCC_SPDIFRX1_CLKSOURCE_PLLI2S RCC_DCKCFGR2_SPDIFRXSEL /*!< PLLI2S clock used as SPDIFRX clock source */ +/** + * @} + */ +#endif /* SPDIFRX */ + +#if defined(LPTIM1) +/** @defgroup RCC_LL_EC_LPTIM1 Peripheral LPTIM get clock source + * @{ + */ +#define LL_RCC_LPTIM1_CLKSOURCE RCC_DCKCFGR2_LPTIM1SEL /*!< LPTIM1 Clock source selection */ +/** + * @} + */ +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** @defgroup RCC_LL_EC_SAIx Peripheral SAI get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_SAI1ASRC) +#define LL_RCC_SAI1_A_CLKSOURCE RCC_DCKCFGR_SAI1ASRC /*!< SAI1 block A Clock source selection */ +#endif /* RCC_DCKCFGR_SAI1ASRC */ +#if defined(RCC_DCKCFGR_SAI1BSRC) +#define LL_RCC_SAI1_B_CLKSOURCE RCC_DCKCFGR_SAI1BSRC /*!< SAI1 block B Clock source selection */ +#endif /* RCC_DCKCFGR_SAI1BSRC */ +#if defined(RCC_DCKCFGR_SAI1SRC) +#define LL_RCC_SAI1_CLKSOURCE RCC_DCKCFGR_SAI1SRC /*!< SAI1 Clock source selection */ +#endif /* RCC_DCKCFGR_SAI1SRC */ +#if defined(RCC_DCKCFGR_SAI2SRC) +#define LL_RCC_SAI2_CLKSOURCE RCC_DCKCFGR_SAI2SRC /*!< SAI2 Clock source selection */ +#endif /* RCC_DCKCFGR_SAI2SRC */ +/** + * @} + */ +#endif /* SAI1 */ + +#if defined(SDIO) +/** @defgroup RCC_LL_EC_SDIOx Peripheral SDIO get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_SDIOSEL) +#define LL_RCC_SDIO_CLKSOURCE RCC_DCKCFGR_SDIOSEL /*!< SDIO Clock source selection */ +#elif defined(RCC_DCKCFGR2_SDIOSEL) +#define LL_RCC_SDIO_CLKSOURCE RCC_DCKCFGR2_SDIOSEL /*!< SDIO Clock source selection */ +#else +#define LL_RCC_SDIO_CLKSOURCE RCC_PLLCFGR_PLLQ /*!< SDIO Clock source selection */ +#endif /* RCC_DCKCFGR_SDIOSEL */ +/** + * @} + */ +#endif /* SDIO */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** @defgroup RCC_LL_EC_CK48M Peripheral CK48M get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE RCC_DCKCFGR_CK48MSEL /*!< CK48M Domain clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL */ +#if defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE RCC_DCKCFGR2_CK48MSEL /*!< CK48M Domain clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(RNG) +/** @defgroup RCC_LL_EC_RNG Peripheral RNG get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_RNG_CLKSOURCE LL_RCC_CK48M_CLKSOURCE /*!< RNG Clock source selection */ +#else +#define LL_RCC_RNG_CLKSOURCE RCC_PLLCFGR_PLLQ /*!< RNG Clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ +/** + * @} + */ +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** @defgroup RCC_LL_EC_USB Peripheral USB get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_USB_CLKSOURCE LL_RCC_CK48M_CLKSOURCE /*!< USB Clock source selection */ +#else +#define LL_RCC_USB_CLKSOURCE RCC_PLLCFGR_PLLQ /*!< USB Clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ +/** + * @} + */ +#endif /* USB_OTG_FS || USB_OTG_HS */ + +#if defined(CEC) +/** @defgroup RCC_LL_EC_CEC Peripheral CEC get clock source + * @{ + */ +#define LL_RCC_CEC_CLKSOURCE RCC_DCKCFGR2_CECSEL /*!< CEC Clock source selection */ +/** + * @} + */ +#endif /* CEC */ + +/** @defgroup RCC_LL_EC_I2S1 Peripheral I2S get clock source + * @{ + */ +#if defined(RCC_CFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE RCC_CFGR_I2SSRC /*!< I2S1 Clock source selection */ +#endif /* RCC_CFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE RCC_DCKCFGR_I2SSRC /*!< I2S1 Clock source selection */ +#endif /* RCC_DCKCFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2S1SRC) +#define LL_RCC_I2S1_CLKSOURCE RCC_DCKCFGR_I2S1SRC /*!< I2S1 Clock source selection */ +#endif /* RCC_DCKCFGR_I2S1SRC */ +#if defined(RCC_DCKCFGR_I2S2SRC) +#define LL_RCC_I2S2_CLKSOURCE RCC_DCKCFGR_I2S2SRC /*!< I2S2 Clock source selection */ +#endif /* RCC_DCKCFGR_I2S2SRC */ +/** + * @} + */ + +#if defined(DFSDM1_Channel0) || defined(DFSDM2_Channel0) +/** @defgroup RCC_LL_EC_DFSDM_AUDIO Peripheral DFSDM Audio get clock source + * @{ + */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE RCC_DCKCFGR_CKDFSDM1ASEL /*!< DFSDM1 Audio Clock source selection */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_AUDIO_CLKSOURCE RCC_DCKCFGR_CKDFSDM2ASEL /*!< DFSDM2 Audio Clock source selection */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_DFSDM Peripheral DFSDM get clock source + * @{ + */ +#define LL_RCC_DFSDM1_CLKSOURCE RCC_DCKCFGR_CKDFSDM1SEL /*!< DFSDM1 Clock source selection */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_CLKSOURCE RCC_DCKCFGR_CKDFSDM1SEL /*!< DFSDM2 Clock source selection */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ +#endif /* DFSDM1_Channel0 || DFSDM2_Channel0 */ + +#if defined(SPDIFRX) +/** @defgroup RCC_LL_EC_SPDIFRX Peripheral SPDIFRX get clock source + * @{ + */ +#define LL_RCC_SPDIFRX1_CLKSOURCE RCC_DCKCFGR2_SPDIFRXSEL /*!< SPDIFRX Clock source selection */ +/** + * @} + */ +#endif /* SPDIFRX */ + +#if defined(DSI) +/** @defgroup RCC_LL_EC_DSI Peripheral DSI get clock source + * @{ + */ +#define LL_RCC_DSI_CLKSOURCE RCC_DCKCFGR_DSISEL /*!< DSI Clock source selection */ +/** + * @} + */ +#endif /* DSI */ + +#if defined(LTDC) +/** @defgroup RCC_LL_EC_LTDC Peripheral LTDC get clock source + * @{ + */ +#define LL_RCC_LTDC_CLKSOURCE RCC_DCKCFGR_PLLSAIDIVR /*!< LTDC Clock source selection */ +/** + * @} + */ +#endif /* LTDC */ + + +/** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection + * @{ + */ +#define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */ +#define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */ +#define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */ +#define LL_RCC_RTC_CLKSOURCE_HSE RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by HSE prescaler used as RTC clock */ +/** + * @} + */ + +#if defined(RCC_DCKCFGR_TIMPRE) +/** @defgroup RCC_LL_EC_TIM_CLKPRESCALER Timers clocks prescalers selection + * @{ + */ +#define LL_RCC_TIM_PRESCALER_TWICE 0x00000000U /*!< Timers clock to twice PCLK */ +#define LL_RCC_TIM_PRESCALER_FOUR_TIMES RCC_DCKCFGR_TIMPRE /*!< Timers clock to four time PCLK */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_TIMPRE */ + +/** @defgroup RCC_LL_EC_PLLSOURCE PLL, PLLI2S and PLLSAI entry clock source + * @{ + */ +#define LL_RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI /*!< HSI16 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE /*!< HSE clock selected as PLL entry clock source */ +#if defined(RCC_PLLI2SCFGR_PLLI2SSRC) +#define LL_RCC_PLLI2SSOURCE_PIN (RCC_PLLI2SCFGR_PLLI2SSRC | 0x80U) /*!< I2S External pin input clock selected as PLLI2S entry clock source */ +#endif /* RCC_PLLI2SCFGR_PLLI2SSRC */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLM_DIV PLL, PLLI2S and PLLSAI division factor + * @{ + */ +#define LL_RCC_PLLM_DIV_2 (RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 2 */ +#define LL_RCC_PLLM_DIV_3 (RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 3 */ +#define LL_RCC_PLLM_DIV_4 (RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 4 */ +#define LL_RCC_PLLM_DIV_5 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 5 */ +#define LL_RCC_PLLM_DIV_6 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 6 */ +#define LL_RCC_PLLM_DIV_7 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 7 */ +#define LL_RCC_PLLM_DIV_8 (RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 8 */ +#define LL_RCC_PLLM_DIV_9 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 9 */ +#define LL_RCC_PLLM_DIV_10 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 10 */ +#define LL_RCC_PLLM_DIV_11 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 11 */ +#define LL_RCC_PLLM_DIV_12 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 12 */ +#define LL_RCC_PLLM_DIV_13 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 13 */ +#define LL_RCC_PLLM_DIV_14 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 14 */ +#define LL_RCC_PLLM_DIV_15 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 15 */ +#define LL_RCC_PLLM_DIV_16 (RCC_PLLCFGR_PLLM_4) /*!< PLL, PLLI2S and PLLSAI division factor by 16 */ +#define LL_RCC_PLLM_DIV_17 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 17 */ +#define LL_RCC_PLLM_DIV_18 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 18 */ +#define LL_RCC_PLLM_DIV_19 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 19 */ +#define LL_RCC_PLLM_DIV_20 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 20 */ +#define LL_RCC_PLLM_DIV_21 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 21 */ +#define LL_RCC_PLLM_DIV_22 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 22 */ +#define LL_RCC_PLLM_DIV_23 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 23 */ +#define LL_RCC_PLLM_DIV_24 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 24 */ +#define LL_RCC_PLLM_DIV_25 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 25 */ +#define LL_RCC_PLLM_DIV_26 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 26 */ +#define LL_RCC_PLLM_DIV_27 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 27 */ +#define LL_RCC_PLLM_DIV_28 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 28 */ +#define LL_RCC_PLLM_DIV_29 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 29 */ +#define LL_RCC_PLLM_DIV_30 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 30 */ +#define LL_RCC_PLLM_DIV_31 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 31 */ +#define LL_RCC_PLLM_DIV_32 (RCC_PLLCFGR_PLLM_5) /*!< PLL, PLLI2S and PLLSAI division factor by 32 */ +#define LL_RCC_PLLM_DIV_33 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 33 */ +#define LL_RCC_PLLM_DIV_34 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 34 */ +#define LL_RCC_PLLM_DIV_35 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 35 */ +#define LL_RCC_PLLM_DIV_36 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 36 */ +#define LL_RCC_PLLM_DIV_37 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 37 */ +#define LL_RCC_PLLM_DIV_38 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 38 */ +#define LL_RCC_PLLM_DIV_39 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 39 */ +#define LL_RCC_PLLM_DIV_40 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 40 */ +#define LL_RCC_PLLM_DIV_41 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 41 */ +#define LL_RCC_PLLM_DIV_42 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 42 */ +#define LL_RCC_PLLM_DIV_43 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 43 */ +#define LL_RCC_PLLM_DIV_44 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 44 */ +#define LL_RCC_PLLM_DIV_45 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 45 */ +#define LL_RCC_PLLM_DIV_46 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 46 */ +#define LL_RCC_PLLM_DIV_47 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 47 */ +#define LL_RCC_PLLM_DIV_48 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4) /*!< PLL, PLLI2S and PLLSAI division factor by 48 */ +#define LL_RCC_PLLM_DIV_49 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 49 */ +#define LL_RCC_PLLM_DIV_50 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 50 */ +#define LL_RCC_PLLM_DIV_51 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 51 */ +#define LL_RCC_PLLM_DIV_52 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 52 */ +#define LL_RCC_PLLM_DIV_53 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 53 */ +#define LL_RCC_PLLM_DIV_54 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 54 */ +#define LL_RCC_PLLM_DIV_55 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 55 */ +#define LL_RCC_PLLM_DIV_56 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 56 */ +#define LL_RCC_PLLM_DIV_57 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 57 */ +#define LL_RCC_PLLM_DIV_58 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 58 */ +#define LL_RCC_PLLM_DIV_59 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 59 */ +#define LL_RCC_PLLM_DIV_60 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 60 */ +#define LL_RCC_PLLM_DIV_61 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 61 */ +#define LL_RCC_PLLM_DIV_62 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 62 */ +#define LL_RCC_PLLM_DIV_63 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 63 */ +/** + * @} + */ + +#if defined(RCC_PLLCFGR_PLLR) +/** @defgroup RCC_LL_EC_PLLR_DIV PLL division factor (PLLR) + * @{ + */ +#define LL_RCC_PLLR_DIV_2 (RCC_PLLCFGR_PLLR_1) /*!< Main PLL division factor for PLLCLK (system clock) by 2 */ +#define LL_RCC_PLLR_DIV_3 (RCC_PLLCFGR_PLLR_1|RCC_PLLCFGR_PLLR_0) /*!< Main PLL division factor for PLLCLK (system clock) by 3 */ +#define LL_RCC_PLLR_DIV_4 (RCC_PLLCFGR_PLLR_2) /*!< Main PLL division factor for PLLCLK (system clock) by 4 */ +#define LL_RCC_PLLR_DIV_5 (RCC_PLLCFGR_PLLR_2|RCC_PLLCFGR_PLLR_0) /*!< Main PLL division factor for PLLCLK (system clock) by 5 */ +#define LL_RCC_PLLR_DIV_6 (RCC_PLLCFGR_PLLR_2|RCC_PLLCFGR_PLLR_1) /*!< Main PLL division factor for PLLCLK (system clock) by 6 */ +#define LL_RCC_PLLR_DIV_7 (RCC_PLLCFGR_PLLR) /*!< Main PLL division factor for PLLCLK (system clock) by 7 */ +/** + * @} + */ +#endif /* RCC_PLLCFGR_PLLR */ + +#if defined(RCC_DCKCFGR_PLLDIVR) +/** @defgroup RCC_LL_EC_PLLDIVR PLLDIVR division factor (PLLDIVR) + * @{ + */ +#define LL_RCC_PLLDIVR_DIV_1 (RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 1 */ +#define LL_RCC_PLLDIVR_DIV_2 (RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 2 */ +#define LL_RCC_PLLDIVR_DIV_3 (RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 3 */ +#define LL_RCC_PLLDIVR_DIV_4 (RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 4 */ +#define LL_RCC_PLLDIVR_DIV_5 (RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 5 */ +#define LL_RCC_PLLDIVR_DIV_6 (RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 6 */ +#define LL_RCC_PLLDIVR_DIV_7 (RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 7 */ +#define LL_RCC_PLLDIVR_DIV_8 (RCC_DCKCFGR_PLLDIVR_3) /*!< PLL division factor for PLLDIVR output by 8 */ +#define LL_RCC_PLLDIVR_DIV_9 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 9 */ +#define LL_RCC_PLLDIVR_DIV_10 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 10 */ +#define LL_RCC_PLLDIVR_DIV_11 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 11 */ +#define LL_RCC_PLLDIVR_DIV_12 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 12 */ +#define LL_RCC_PLLDIVR_DIV_13 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 13 */ +#define LL_RCC_PLLDIVR_DIV_14 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 14 */ +#define LL_RCC_PLLDIVR_DIV_15 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 15 */ +#define LL_RCC_PLLDIVR_DIV_16 (RCC_DCKCFGR_PLLDIVR_4) /*!< PLL division factor for PLLDIVR output by 16 */ +#define LL_RCC_PLLDIVR_DIV_17 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 17 */ +#define LL_RCC_PLLDIVR_DIV_18 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 18 */ +#define LL_RCC_PLLDIVR_DIV_19 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 19 */ +#define LL_RCC_PLLDIVR_DIV_20 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 20 */ +#define LL_RCC_PLLDIVR_DIV_21 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 21 */ +#define LL_RCC_PLLDIVR_DIV_22 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 22 */ +#define LL_RCC_PLLDIVR_DIV_23 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 23 */ +#define LL_RCC_PLLDIVR_DIV_24 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3) /*!< PLL division factor for PLLDIVR output by 24 */ +#define LL_RCC_PLLDIVR_DIV_25 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 25 */ +#define LL_RCC_PLLDIVR_DIV_26 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 26 */ +#define LL_RCC_PLLDIVR_DIV_27 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 27 */ +#define LL_RCC_PLLDIVR_DIV_28 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 28 */ +#define LL_RCC_PLLDIVR_DIV_29 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 29 */ +#define LL_RCC_PLLDIVR_DIV_30 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 30 */ +#define LL_RCC_PLLDIVR_DIV_31 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 31 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLDIVR */ + +/** @defgroup RCC_LL_EC_PLLP_DIV PLL division factor (PLLP) + * @{ + */ +#define LL_RCC_PLLP_DIV_2 0x00000000U /*!< Main PLL division factor for PLLP output by 2 */ +#define LL_RCC_PLLP_DIV_4 RCC_PLLCFGR_PLLP_0 /*!< Main PLL division factor for PLLP output by 4 */ +#define LL_RCC_PLLP_DIV_6 RCC_PLLCFGR_PLLP_1 /*!< Main PLL division factor for PLLP output by 6 */ +#define LL_RCC_PLLP_DIV_8 (RCC_PLLCFGR_PLLP_1 | RCC_PLLCFGR_PLLP_0) /*!< Main PLL division factor for PLLP output by 8 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLQ_DIV PLL division factor (PLLQ) + * @{ + */ +#define LL_RCC_PLLQ_DIV_2 RCC_PLLCFGR_PLLQ_1 /*!< Main PLL division factor for PLLQ output by 2 */ +#define LL_RCC_PLLQ_DIV_3 (RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 3 */ +#define LL_RCC_PLLQ_DIV_4 RCC_PLLCFGR_PLLQ_2 /*!< Main PLL division factor for PLLQ output by 4 */ +#define LL_RCC_PLLQ_DIV_5 (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 5 */ +#define LL_RCC_PLLQ_DIV_6 (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 6 */ +#define LL_RCC_PLLQ_DIV_7 (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 7 */ +#define LL_RCC_PLLQ_DIV_8 RCC_PLLCFGR_PLLQ_3 /*!< Main PLL division factor for PLLQ output by 8 */ +#define LL_RCC_PLLQ_DIV_9 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 9 */ +#define LL_RCC_PLLQ_DIV_10 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 10 */ +#define LL_RCC_PLLQ_DIV_11 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 11 */ +#define LL_RCC_PLLQ_DIV_12 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2) /*!< Main PLL division factor for PLLQ output by 12 */ +#define LL_RCC_PLLQ_DIV_13 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 13 */ +#define LL_RCC_PLLQ_DIV_14 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 14 */ +#define LL_RCC_PLLQ_DIV_15 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 15 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLL_SPRE_SEL PLL Spread Spectrum Selection + * @{ + */ +#define LL_RCC_SPREAD_SELECT_CENTER 0x00000000U /*!< PLL center spread spectrum selection */ +#define LL_RCC_SPREAD_SELECT_DOWN RCC_SSCGR_SPREADSEL /*!< PLL down spread spectrum selection */ +/** + * @} + */ + +#if defined(RCC_PLLI2S_SUPPORT) +/** @defgroup RCC_LL_EC_PLLI2SM PLLI2SM division factor (PLLI2SM) + * @{ + */ +#if defined(RCC_PLLI2SCFGR_PLLI2SM) +#define LL_RCC_PLLI2SM_DIV_2 (RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 2 */ +#define LL_RCC_PLLI2SM_DIV_3 (RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 3 */ +#define LL_RCC_PLLI2SM_DIV_4 (RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 4 */ +#define LL_RCC_PLLI2SM_DIV_5 (RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 5 */ +#define LL_RCC_PLLI2SM_DIV_6 (RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 6 */ +#define LL_RCC_PLLI2SM_DIV_7 (RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 7 */ +#define LL_RCC_PLLI2SM_DIV_8 (RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 8 */ +#define LL_RCC_PLLI2SM_DIV_9 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 9 */ +#define LL_RCC_PLLI2SM_DIV_10 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 10 */ +#define LL_RCC_PLLI2SM_DIV_11 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 11 */ +#define LL_RCC_PLLI2SM_DIV_12 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 12 */ +#define LL_RCC_PLLI2SM_DIV_13 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 13 */ +#define LL_RCC_PLLI2SM_DIV_14 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 14 */ +#define LL_RCC_PLLI2SM_DIV_15 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 15 */ +#define LL_RCC_PLLI2SM_DIV_16 (RCC_PLLI2SCFGR_PLLI2SM_4) /*!< PLLI2S division factor for PLLI2SM output by 16 */ +#define LL_RCC_PLLI2SM_DIV_17 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 17 */ +#define LL_RCC_PLLI2SM_DIV_18 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 18 */ +#define LL_RCC_PLLI2SM_DIV_19 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 19 */ +#define LL_RCC_PLLI2SM_DIV_20 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 20 */ +#define LL_RCC_PLLI2SM_DIV_21 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 21 */ +#define LL_RCC_PLLI2SM_DIV_22 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 22 */ +#define LL_RCC_PLLI2SM_DIV_23 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 23 */ +#define LL_RCC_PLLI2SM_DIV_24 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 24 */ +#define LL_RCC_PLLI2SM_DIV_25 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 25 */ +#define LL_RCC_PLLI2SM_DIV_26 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 26 */ +#define LL_RCC_PLLI2SM_DIV_27 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 27 */ +#define LL_RCC_PLLI2SM_DIV_28 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 28 */ +#define LL_RCC_PLLI2SM_DIV_29 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 29 */ +#define LL_RCC_PLLI2SM_DIV_30 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 30 */ +#define LL_RCC_PLLI2SM_DIV_31 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 31 */ +#define LL_RCC_PLLI2SM_DIV_32 (RCC_PLLI2SCFGR_PLLI2SM_5) /*!< PLLI2S division factor for PLLI2SM output by 32 */ +#define LL_RCC_PLLI2SM_DIV_33 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 33 */ +#define LL_RCC_PLLI2SM_DIV_34 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 34 */ +#define LL_RCC_PLLI2SM_DIV_35 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 35 */ +#define LL_RCC_PLLI2SM_DIV_36 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 36 */ +#define LL_RCC_PLLI2SM_DIV_37 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 37 */ +#define LL_RCC_PLLI2SM_DIV_38 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 38 */ +#define LL_RCC_PLLI2SM_DIV_39 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 39 */ +#define LL_RCC_PLLI2SM_DIV_40 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 40 */ +#define LL_RCC_PLLI2SM_DIV_41 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 41 */ +#define LL_RCC_PLLI2SM_DIV_42 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 42 */ +#define LL_RCC_PLLI2SM_DIV_43 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 43 */ +#define LL_RCC_PLLI2SM_DIV_44 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 44 */ +#define LL_RCC_PLLI2SM_DIV_45 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 45 */ +#define LL_RCC_PLLI2SM_DIV_46 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 46 */ +#define LL_RCC_PLLI2SM_DIV_47 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 47 */ +#define LL_RCC_PLLI2SM_DIV_48 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4) /*!< PLLI2S division factor for PLLI2SM output by 48 */ +#define LL_RCC_PLLI2SM_DIV_49 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 49 */ +#define LL_RCC_PLLI2SM_DIV_50 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 50 */ +#define LL_RCC_PLLI2SM_DIV_51 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 51 */ +#define LL_RCC_PLLI2SM_DIV_52 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 52 */ +#define LL_RCC_PLLI2SM_DIV_53 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 53 */ +#define LL_RCC_PLLI2SM_DIV_54 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 54 */ +#define LL_RCC_PLLI2SM_DIV_55 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 55 */ +#define LL_RCC_PLLI2SM_DIV_56 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 56 */ +#define LL_RCC_PLLI2SM_DIV_57 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 57 */ +#define LL_RCC_PLLI2SM_DIV_58 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 58 */ +#define LL_RCC_PLLI2SM_DIV_59 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 59 */ +#define LL_RCC_PLLI2SM_DIV_60 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 60 */ +#define LL_RCC_PLLI2SM_DIV_61 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 61 */ +#define LL_RCC_PLLI2SM_DIV_62 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 62 */ +#define LL_RCC_PLLI2SM_DIV_63 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 63 */ +#else +#define LL_RCC_PLLI2SM_DIV_2 LL_RCC_PLLM_DIV_2 /*!< PLLI2S division factor for PLLI2SM output by 2 */ +#define LL_RCC_PLLI2SM_DIV_3 LL_RCC_PLLM_DIV_3 /*!< PLLI2S division factor for PLLI2SM output by 3 */ +#define LL_RCC_PLLI2SM_DIV_4 LL_RCC_PLLM_DIV_4 /*!< PLLI2S division factor for PLLI2SM output by 4 */ +#define LL_RCC_PLLI2SM_DIV_5 LL_RCC_PLLM_DIV_5 /*!< PLLI2S division factor for PLLI2SM output by 5 */ +#define LL_RCC_PLLI2SM_DIV_6 LL_RCC_PLLM_DIV_6 /*!< PLLI2S division factor for PLLI2SM output by 6 */ +#define LL_RCC_PLLI2SM_DIV_7 LL_RCC_PLLM_DIV_7 /*!< PLLI2S division factor for PLLI2SM output by 7 */ +#define LL_RCC_PLLI2SM_DIV_8 LL_RCC_PLLM_DIV_8 /*!< PLLI2S division factor for PLLI2SM output by 8 */ +#define LL_RCC_PLLI2SM_DIV_9 LL_RCC_PLLM_DIV_9 /*!< PLLI2S division factor for PLLI2SM output by 9 */ +#define LL_RCC_PLLI2SM_DIV_10 LL_RCC_PLLM_DIV_10 /*!< PLLI2S division factor for PLLI2SM output by 10 */ +#define LL_RCC_PLLI2SM_DIV_11 LL_RCC_PLLM_DIV_11 /*!< PLLI2S division factor for PLLI2SM output by 11 */ +#define LL_RCC_PLLI2SM_DIV_12 LL_RCC_PLLM_DIV_12 /*!< PLLI2S division factor for PLLI2SM output by 12 */ +#define LL_RCC_PLLI2SM_DIV_13 LL_RCC_PLLM_DIV_13 /*!< PLLI2S division factor for PLLI2SM output by 13 */ +#define LL_RCC_PLLI2SM_DIV_14 LL_RCC_PLLM_DIV_14 /*!< PLLI2S division factor for PLLI2SM output by 14 */ +#define LL_RCC_PLLI2SM_DIV_15 LL_RCC_PLLM_DIV_15 /*!< PLLI2S division factor for PLLI2SM output by 15 */ +#define LL_RCC_PLLI2SM_DIV_16 LL_RCC_PLLM_DIV_16 /*!< PLLI2S division factor for PLLI2SM output by 16 */ +#define LL_RCC_PLLI2SM_DIV_17 LL_RCC_PLLM_DIV_17 /*!< PLLI2S division factor for PLLI2SM output by 17 */ +#define LL_RCC_PLLI2SM_DIV_18 LL_RCC_PLLM_DIV_18 /*!< PLLI2S division factor for PLLI2SM output by 18 */ +#define LL_RCC_PLLI2SM_DIV_19 LL_RCC_PLLM_DIV_19 /*!< PLLI2S division factor for PLLI2SM output by 19 */ +#define LL_RCC_PLLI2SM_DIV_20 LL_RCC_PLLM_DIV_20 /*!< PLLI2S division factor for PLLI2SM output by 20 */ +#define LL_RCC_PLLI2SM_DIV_21 LL_RCC_PLLM_DIV_21 /*!< PLLI2S division factor for PLLI2SM output by 21 */ +#define LL_RCC_PLLI2SM_DIV_22 LL_RCC_PLLM_DIV_22 /*!< PLLI2S division factor for PLLI2SM output by 22 */ +#define LL_RCC_PLLI2SM_DIV_23 LL_RCC_PLLM_DIV_23 /*!< PLLI2S division factor for PLLI2SM output by 23 */ +#define LL_RCC_PLLI2SM_DIV_24 LL_RCC_PLLM_DIV_24 /*!< PLLI2S division factor for PLLI2SM output by 24 */ +#define LL_RCC_PLLI2SM_DIV_25 LL_RCC_PLLM_DIV_25 /*!< PLLI2S division factor for PLLI2SM output by 25 */ +#define LL_RCC_PLLI2SM_DIV_26 LL_RCC_PLLM_DIV_26 /*!< PLLI2S division factor for PLLI2SM output by 26 */ +#define LL_RCC_PLLI2SM_DIV_27 LL_RCC_PLLM_DIV_27 /*!< PLLI2S division factor for PLLI2SM output by 27 */ +#define LL_RCC_PLLI2SM_DIV_28 LL_RCC_PLLM_DIV_28 /*!< PLLI2S division factor for PLLI2SM output by 28 */ +#define LL_RCC_PLLI2SM_DIV_29 LL_RCC_PLLM_DIV_29 /*!< PLLI2S division factor for PLLI2SM output by 29 */ +#define LL_RCC_PLLI2SM_DIV_30 LL_RCC_PLLM_DIV_30 /*!< PLLI2S division factor for PLLI2SM output by 30 */ +#define LL_RCC_PLLI2SM_DIV_31 LL_RCC_PLLM_DIV_31 /*!< PLLI2S division factor for PLLI2SM output by 31 */ +#define LL_RCC_PLLI2SM_DIV_32 LL_RCC_PLLM_DIV_32 /*!< PLLI2S division factor for PLLI2SM output by 32 */ +#define LL_RCC_PLLI2SM_DIV_33 LL_RCC_PLLM_DIV_33 /*!< PLLI2S division factor for PLLI2SM output by 33 */ +#define LL_RCC_PLLI2SM_DIV_34 LL_RCC_PLLM_DIV_34 /*!< PLLI2S division factor for PLLI2SM output by 34 */ +#define LL_RCC_PLLI2SM_DIV_35 LL_RCC_PLLM_DIV_35 /*!< PLLI2S division factor for PLLI2SM output by 35 */ +#define LL_RCC_PLLI2SM_DIV_36 LL_RCC_PLLM_DIV_36 /*!< PLLI2S division factor for PLLI2SM output by 36 */ +#define LL_RCC_PLLI2SM_DIV_37 LL_RCC_PLLM_DIV_37 /*!< PLLI2S division factor for PLLI2SM output by 37 */ +#define LL_RCC_PLLI2SM_DIV_38 LL_RCC_PLLM_DIV_38 /*!< PLLI2S division factor for PLLI2SM output by 38 */ +#define LL_RCC_PLLI2SM_DIV_39 LL_RCC_PLLM_DIV_39 /*!< PLLI2S division factor for PLLI2SM output by 39 */ +#define LL_RCC_PLLI2SM_DIV_40 LL_RCC_PLLM_DIV_40 /*!< PLLI2S division factor for PLLI2SM output by 40 */ +#define LL_RCC_PLLI2SM_DIV_41 LL_RCC_PLLM_DIV_41 /*!< PLLI2S division factor for PLLI2SM output by 41 */ +#define LL_RCC_PLLI2SM_DIV_42 LL_RCC_PLLM_DIV_42 /*!< PLLI2S division factor for PLLI2SM output by 42 */ +#define LL_RCC_PLLI2SM_DIV_43 LL_RCC_PLLM_DIV_43 /*!< PLLI2S division factor for PLLI2SM output by 43 */ +#define LL_RCC_PLLI2SM_DIV_44 LL_RCC_PLLM_DIV_44 /*!< PLLI2S division factor for PLLI2SM output by 44 */ +#define LL_RCC_PLLI2SM_DIV_45 LL_RCC_PLLM_DIV_45 /*!< PLLI2S division factor for PLLI2SM output by 45 */ +#define LL_RCC_PLLI2SM_DIV_46 LL_RCC_PLLM_DIV_46 /*!< PLLI2S division factor for PLLI2SM output by 46 */ +#define LL_RCC_PLLI2SM_DIV_47 LL_RCC_PLLM_DIV_47 /*!< PLLI2S division factor for PLLI2SM output by 47 */ +#define LL_RCC_PLLI2SM_DIV_48 LL_RCC_PLLM_DIV_48 /*!< PLLI2S division factor for PLLI2SM output by 48 */ +#define LL_RCC_PLLI2SM_DIV_49 LL_RCC_PLLM_DIV_49 /*!< PLLI2S division factor for PLLI2SM output by 49 */ +#define LL_RCC_PLLI2SM_DIV_50 LL_RCC_PLLM_DIV_50 /*!< PLLI2S division factor for PLLI2SM output by 50 */ +#define LL_RCC_PLLI2SM_DIV_51 LL_RCC_PLLM_DIV_51 /*!< PLLI2S division factor for PLLI2SM output by 51 */ +#define LL_RCC_PLLI2SM_DIV_52 LL_RCC_PLLM_DIV_52 /*!< PLLI2S division factor for PLLI2SM output by 52 */ +#define LL_RCC_PLLI2SM_DIV_53 LL_RCC_PLLM_DIV_53 /*!< PLLI2S division factor for PLLI2SM output by 53 */ +#define LL_RCC_PLLI2SM_DIV_54 LL_RCC_PLLM_DIV_54 /*!< PLLI2S division factor for PLLI2SM output by 54 */ +#define LL_RCC_PLLI2SM_DIV_55 LL_RCC_PLLM_DIV_55 /*!< PLLI2S division factor for PLLI2SM output by 55 */ +#define LL_RCC_PLLI2SM_DIV_56 LL_RCC_PLLM_DIV_56 /*!< PLLI2S division factor for PLLI2SM output by 56 */ +#define LL_RCC_PLLI2SM_DIV_57 LL_RCC_PLLM_DIV_57 /*!< PLLI2S division factor for PLLI2SM output by 57 */ +#define LL_RCC_PLLI2SM_DIV_58 LL_RCC_PLLM_DIV_58 /*!< PLLI2S division factor for PLLI2SM output by 58 */ +#define LL_RCC_PLLI2SM_DIV_59 LL_RCC_PLLM_DIV_59 /*!< PLLI2S division factor for PLLI2SM output by 59 */ +#define LL_RCC_PLLI2SM_DIV_60 LL_RCC_PLLM_DIV_60 /*!< PLLI2S division factor for PLLI2SM output by 60 */ +#define LL_RCC_PLLI2SM_DIV_61 LL_RCC_PLLM_DIV_61 /*!< PLLI2S division factor for PLLI2SM output by 61 */ +#define LL_RCC_PLLI2SM_DIV_62 LL_RCC_PLLM_DIV_62 /*!< PLLI2S division factor for PLLI2SM output by 62 */ +#define LL_RCC_PLLI2SM_DIV_63 LL_RCC_PLLM_DIV_63 /*!< PLLI2S division factor for PLLI2SM output by 63 */ +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ +/** + * @} + */ + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) +/** @defgroup RCC_LL_EC_PLLI2SQ PLLI2SQ division factor (PLLI2SQ) + * @{ + */ +#define LL_RCC_PLLI2SQ_DIV_2 RCC_PLLI2SCFGR_PLLI2SQ_1 /*!< PLLI2S division factor for PLLI2SQ output by 2 */ +#define LL_RCC_PLLI2SQ_DIV_3 (RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 3 */ +#define LL_RCC_PLLI2SQ_DIV_4 RCC_PLLI2SCFGR_PLLI2SQ_2 /*!< PLLI2S division factor for PLLI2SQ output by 4 */ +#define LL_RCC_PLLI2SQ_DIV_5 (RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 5 */ +#define LL_RCC_PLLI2SQ_DIV_6 (RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1) /*!< PLLI2S division factor for PLLI2SQ output by 6 */ +#define LL_RCC_PLLI2SQ_DIV_7 (RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 7 */ +#define LL_RCC_PLLI2SQ_DIV_8 RCC_PLLI2SCFGR_PLLI2SQ_3 /*!< PLLI2S division factor for PLLI2SQ output by 8 */ +#define LL_RCC_PLLI2SQ_DIV_9 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 9 */ +#define LL_RCC_PLLI2SQ_DIV_10 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_1) /*!< PLLI2S division factor for PLLI2SQ output by 10 */ +#define LL_RCC_PLLI2SQ_DIV_11 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 11 */ +#define LL_RCC_PLLI2SQ_DIV_12 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2) /*!< PLLI2S division factor for PLLI2SQ output by 12 */ +#define LL_RCC_PLLI2SQ_DIV_13 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 13 */ +#define LL_RCC_PLLI2SQ_DIV_14 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1) /*!< PLLI2S division factor for PLLI2SQ output by 14 */ +#define LL_RCC_PLLI2SQ_DIV_15 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 15 */ +/** + * @} + */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** @defgroup RCC_LL_EC_PLLI2SDIVQ PLLI2SDIVQ division factor (PLLI2SDIVQ) + * @{ + */ +#define LL_RCC_PLLI2SDIVQ_DIV_1 0x00000000U /*!< PLLI2S division factor for PLLI2SDIVQ output by 1 */ +#define LL_RCC_PLLI2SDIVQ_DIV_2 RCC_DCKCFGR_PLLI2SDIVQ_0 /*!< PLLI2S division factor for PLLI2SDIVQ output by 2 */ +#define LL_RCC_PLLI2SDIVQ_DIV_3 RCC_DCKCFGR_PLLI2SDIVQ_1 /*!< PLLI2S division factor for PLLI2SDIVQ output by 3 */ +#define LL_RCC_PLLI2SDIVQ_DIV_4 (RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 4 */ +#define LL_RCC_PLLI2SDIVQ_DIV_5 RCC_DCKCFGR_PLLI2SDIVQ_2 /*!< PLLI2S division factor for PLLI2SDIVQ output by 5 */ +#define LL_RCC_PLLI2SDIVQ_DIV_6 (RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 6 */ +#define LL_RCC_PLLI2SDIVQ_DIV_7 (RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 7 */ +#define LL_RCC_PLLI2SDIVQ_DIV_8 (RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 8 */ +#define LL_RCC_PLLI2SDIVQ_DIV_9 RCC_DCKCFGR_PLLI2SDIVQ_3 /*!< PLLI2S division factor for PLLI2SDIVQ output by 9 */ +#define LL_RCC_PLLI2SDIVQ_DIV_10 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 10 */ +#define LL_RCC_PLLI2SDIVQ_DIV_11 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 11 */ +#define LL_RCC_PLLI2SDIVQ_DIV_12 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 12 */ +#define LL_RCC_PLLI2SDIVQ_DIV_13 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2) /*!< PLLI2S division factor for PLLI2SDIVQ output by 13 */ +#define LL_RCC_PLLI2SDIVQ_DIV_14 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 14 */ +#define LL_RCC_PLLI2SDIVQ_DIV_15 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 15 */ +#define LL_RCC_PLLI2SDIVQ_DIV_16 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 16 */ +#define LL_RCC_PLLI2SDIVQ_DIV_17 RCC_DCKCFGR_PLLI2SDIVQ_4 /*!< PLLI2S division factor for PLLI2SDIVQ output by 17 */ +#define LL_RCC_PLLI2SDIVQ_DIV_18 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 18 */ +#define LL_RCC_PLLI2SDIVQ_DIV_19 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 19 */ +#define LL_RCC_PLLI2SDIVQ_DIV_20 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 20 */ +#define LL_RCC_PLLI2SDIVQ_DIV_21 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2) /*!< PLLI2S division factor for PLLI2SDIVQ output by 21 */ +#define LL_RCC_PLLI2SDIVQ_DIV_22 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 22 */ +#define LL_RCC_PLLI2SDIVQ_DIV_23 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 23 */ +#define LL_RCC_PLLI2SDIVQ_DIV_24 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 24 */ +#define LL_RCC_PLLI2SDIVQ_DIV_25 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3) /*!< PLLI2S division factor for PLLI2SDIVQ output by 25 */ +#define LL_RCC_PLLI2SDIVQ_DIV_26 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 26 */ +#define LL_RCC_PLLI2SDIVQ_DIV_27 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 27 */ +#define LL_RCC_PLLI2SDIVQ_DIV_28 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 28 */ +#define LL_RCC_PLLI2SDIVQ_DIV_29 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2) /*!< PLLI2S division factor for PLLI2SDIVQ output by 29 */ +#define LL_RCC_PLLI2SDIVQ_DIV_30 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 30 */ +#define LL_RCC_PLLI2SDIVQ_DIV_31 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 31 */ +#define LL_RCC_PLLI2SDIVQ_DIV_32 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 32 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVR) +/** @defgroup RCC_LL_EC_PLLI2SDIVR PLLI2SDIVR division factor (PLLI2SDIVR) + * @{ + */ +#define LL_RCC_PLLI2SDIVR_DIV_1 (RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 1 */ +#define LL_RCC_PLLI2SDIVR_DIV_2 (RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 2 */ +#define LL_RCC_PLLI2SDIVR_DIV_3 (RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 3 */ +#define LL_RCC_PLLI2SDIVR_DIV_4 (RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 4 */ +#define LL_RCC_PLLI2SDIVR_DIV_5 (RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 5 */ +#define LL_RCC_PLLI2SDIVR_DIV_6 (RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 6 */ +#define LL_RCC_PLLI2SDIVR_DIV_7 (RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 7 */ +#define LL_RCC_PLLI2SDIVR_DIV_8 (RCC_DCKCFGR_PLLI2SDIVR_3) /*!< PLLI2S division factor for PLLI2SDIVR output by 8 */ +#define LL_RCC_PLLI2SDIVR_DIV_9 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 9 */ +#define LL_RCC_PLLI2SDIVR_DIV_10 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 10 */ +#define LL_RCC_PLLI2SDIVR_DIV_11 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 11 */ +#define LL_RCC_PLLI2SDIVR_DIV_12 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 12 */ +#define LL_RCC_PLLI2SDIVR_DIV_13 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 13 */ +#define LL_RCC_PLLI2SDIVR_DIV_14 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 14 */ +#define LL_RCC_PLLI2SDIVR_DIV_15 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 15 */ +#define LL_RCC_PLLI2SDIVR_DIV_16 (RCC_DCKCFGR_PLLI2SDIVR_4) /*!< PLLI2S division factor for PLLI2SDIVR output by 16 */ +#define LL_RCC_PLLI2SDIVR_DIV_17 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 17 */ +#define LL_RCC_PLLI2SDIVR_DIV_18 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 18 */ +#define LL_RCC_PLLI2SDIVR_DIV_19 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 19 */ +#define LL_RCC_PLLI2SDIVR_DIV_20 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 20 */ +#define LL_RCC_PLLI2SDIVR_DIV_21 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 21 */ +#define LL_RCC_PLLI2SDIVR_DIV_22 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 22 */ +#define LL_RCC_PLLI2SDIVR_DIV_23 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 23 */ +#define LL_RCC_PLLI2SDIVR_DIV_24 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3) /*!< PLLI2S division factor for PLLI2SDIVR output by 24 */ +#define LL_RCC_PLLI2SDIVR_DIV_25 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 25 */ +#define LL_RCC_PLLI2SDIVR_DIV_26 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 26 */ +#define LL_RCC_PLLI2SDIVR_DIV_27 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 27 */ +#define LL_RCC_PLLI2SDIVR_DIV_28 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 28 */ +#define LL_RCC_PLLI2SDIVR_DIV_29 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 29 */ +#define LL_RCC_PLLI2SDIVR_DIV_30 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 30 */ +#define LL_RCC_PLLI2SDIVR_DIV_31 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 31 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLI2SDIVR */ + +/** @defgroup RCC_LL_EC_PLLI2SR PLLI2SR division factor (PLLI2SR) + * @{ + */ +#define LL_RCC_PLLI2SR_DIV_2 RCC_PLLI2SCFGR_PLLI2SR_1 /*!< PLLI2S division factor for PLLI2SR output by 2 */ +#define LL_RCC_PLLI2SR_DIV_3 (RCC_PLLI2SCFGR_PLLI2SR_1 | RCC_PLLI2SCFGR_PLLI2SR_0) /*!< PLLI2S division factor for PLLI2SR output by 3 */ +#define LL_RCC_PLLI2SR_DIV_4 RCC_PLLI2SCFGR_PLLI2SR_2 /*!< PLLI2S division factor for PLLI2SR output by 4 */ +#define LL_RCC_PLLI2SR_DIV_5 (RCC_PLLI2SCFGR_PLLI2SR_2 | RCC_PLLI2SCFGR_PLLI2SR_0) /*!< PLLI2S division factor for PLLI2SR output by 5 */ +#define LL_RCC_PLLI2SR_DIV_6 (RCC_PLLI2SCFGR_PLLI2SR_2 | RCC_PLLI2SCFGR_PLLI2SR_1) /*!< PLLI2S division factor for PLLI2SR output by 6 */ +#define LL_RCC_PLLI2SR_DIV_7 (RCC_PLLI2SCFGR_PLLI2SR_2 | RCC_PLLI2SCFGR_PLLI2SR_1 | RCC_PLLI2SCFGR_PLLI2SR_0) /*!< PLLI2S division factor for PLLI2SR output by 7 */ +/** + * @} + */ + +#if defined(RCC_PLLI2SCFGR_PLLI2SP) +/** @defgroup RCC_LL_EC_PLLI2SP PLLI2SP division factor (PLLI2SP) + * @{ + */ +#define LL_RCC_PLLI2SP_DIV_2 0x00000000U /*!< PLLI2S division factor for PLLI2SP output by 2 */ +#define LL_RCC_PLLI2SP_DIV_4 RCC_PLLI2SCFGR_PLLI2SP_0 /*!< PLLI2S division factor for PLLI2SP output by 4 */ +#define LL_RCC_PLLI2SP_DIV_6 RCC_PLLI2SCFGR_PLLI2SP_1 /*!< PLLI2S division factor for PLLI2SP output by 6 */ +#define LL_RCC_PLLI2SP_DIV_8 (RCC_PLLI2SCFGR_PLLI2SP_1 | RCC_PLLI2SCFGR_PLLI2SP_0) /*!< PLLI2S division factor for PLLI2SP output by 8 */ +/** + * @} + */ +#endif /* RCC_PLLI2SCFGR_PLLI2SP */ +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** @defgroup RCC_LL_EC_PLLSAIM PLLSAIM division factor (PLLSAIM or PLLM) + * @{ + */ +#if defined(RCC_PLLSAICFGR_PLLSAIM) +#define LL_RCC_PLLSAIM_DIV_2 (RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 2 */ +#define LL_RCC_PLLSAIM_DIV_3 (RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 3 */ +#define LL_RCC_PLLSAIM_DIV_4 (RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 4 */ +#define LL_RCC_PLLSAIM_DIV_5 (RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 5 */ +#define LL_RCC_PLLSAIM_DIV_6 (RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 6 */ +#define LL_RCC_PLLSAIM_DIV_7 (RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 7 */ +#define LL_RCC_PLLSAIM_DIV_8 (RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 8 */ +#define LL_RCC_PLLSAIM_DIV_9 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 9 */ +#define LL_RCC_PLLSAIM_DIV_10 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 10 */ +#define LL_RCC_PLLSAIM_DIV_11 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 11 */ +#define LL_RCC_PLLSAIM_DIV_12 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 12 */ +#define LL_RCC_PLLSAIM_DIV_13 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 13 */ +#define LL_RCC_PLLSAIM_DIV_14 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 14 */ +#define LL_RCC_PLLSAIM_DIV_15 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 15 */ +#define LL_RCC_PLLSAIM_DIV_16 (RCC_PLLSAICFGR_PLLSAIM_4) /*!< PLLSAI division factor for PLLSAIM output by 16 */ +#define LL_RCC_PLLSAIM_DIV_17 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 17 */ +#define LL_RCC_PLLSAIM_DIV_18 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 18 */ +#define LL_RCC_PLLSAIM_DIV_19 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 19 */ +#define LL_RCC_PLLSAIM_DIV_20 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 20 */ +#define LL_RCC_PLLSAIM_DIV_21 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 21 */ +#define LL_RCC_PLLSAIM_DIV_22 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 22 */ +#define LL_RCC_PLLSAIM_DIV_23 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 23 */ +#define LL_RCC_PLLSAIM_DIV_24 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 24 */ +#define LL_RCC_PLLSAIM_DIV_25 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 25 */ +#define LL_RCC_PLLSAIM_DIV_26 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 26 */ +#define LL_RCC_PLLSAIM_DIV_27 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 27 */ +#define LL_RCC_PLLSAIM_DIV_28 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 28 */ +#define LL_RCC_PLLSAIM_DIV_29 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 29 */ +#define LL_RCC_PLLSAIM_DIV_30 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 30 */ +#define LL_RCC_PLLSAIM_DIV_31 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 31 */ +#define LL_RCC_PLLSAIM_DIV_32 (RCC_PLLSAICFGR_PLLSAIM_5) /*!< PLLSAI division factor for PLLSAIM output by 32 */ +#define LL_RCC_PLLSAIM_DIV_33 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 33 */ +#define LL_RCC_PLLSAIM_DIV_34 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 34 */ +#define LL_RCC_PLLSAIM_DIV_35 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 35 */ +#define LL_RCC_PLLSAIM_DIV_36 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 36 */ +#define LL_RCC_PLLSAIM_DIV_37 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 37 */ +#define LL_RCC_PLLSAIM_DIV_38 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 38 */ +#define LL_RCC_PLLSAIM_DIV_39 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 39 */ +#define LL_RCC_PLLSAIM_DIV_40 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 40 */ +#define LL_RCC_PLLSAIM_DIV_41 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 41 */ +#define LL_RCC_PLLSAIM_DIV_42 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 42 */ +#define LL_RCC_PLLSAIM_DIV_43 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 43 */ +#define LL_RCC_PLLSAIM_DIV_44 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 44 */ +#define LL_RCC_PLLSAIM_DIV_45 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 45 */ +#define LL_RCC_PLLSAIM_DIV_46 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 46 */ +#define LL_RCC_PLLSAIM_DIV_47 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 47 */ +#define LL_RCC_PLLSAIM_DIV_48 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4) /*!< PLLSAI division factor for PLLSAIM output by 48 */ +#define LL_RCC_PLLSAIM_DIV_49 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 49 */ +#define LL_RCC_PLLSAIM_DIV_50 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 50 */ +#define LL_RCC_PLLSAIM_DIV_51 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 51 */ +#define LL_RCC_PLLSAIM_DIV_52 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 52 */ +#define LL_RCC_PLLSAIM_DIV_53 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 53 */ +#define LL_RCC_PLLSAIM_DIV_54 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 54 */ +#define LL_RCC_PLLSAIM_DIV_55 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 55 */ +#define LL_RCC_PLLSAIM_DIV_56 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 56 */ +#define LL_RCC_PLLSAIM_DIV_57 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 57 */ +#define LL_RCC_PLLSAIM_DIV_58 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 58 */ +#define LL_RCC_PLLSAIM_DIV_59 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 59 */ +#define LL_RCC_PLLSAIM_DIV_60 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 60 */ +#define LL_RCC_PLLSAIM_DIV_61 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 61 */ +#define LL_RCC_PLLSAIM_DIV_62 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 62 */ +#define LL_RCC_PLLSAIM_DIV_63 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 63 */ +#else +#define LL_RCC_PLLSAIM_DIV_2 LL_RCC_PLLM_DIV_2 /*!< PLLSAI division factor for PLLSAIM output by 2 */ +#define LL_RCC_PLLSAIM_DIV_3 LL_RCC_PLLM_DIV_3 /*!< PLLSAI division factor for PLLSAIM output by 3 */ +#define LL_RCC_PLLSAIM_DIV_4 LL_RCC_PLLM_DIV_4 /*!< PLLSAI division factor for PLLSAIM output by 4 */ +#define LL_RCC_PLLSAIM_DIV_5 LL_RCC_PLLM_DIV_5 /*!< PLLSAI division factor for PLLSAIM output by 5 */ +#define LL_RCC_PLLSAIM_DIV_6 LL_RCC_PLLM_DIV_6 /*!< PLLSAI division factor for PLLSAIM output by 6 */ +#define LL_RCC_PLLSAIM_DIV_7 LL_RCC_PLLM_DIV_7 /*!< PLLSAI division factor for PLLSAIM output by 7 */ +#define LL_RCC_PLLSAIM_DIV_8 LL_RCC_PLLM_DIV_8 /*!< PLLSAI division factor for PLLSAIM output by 8 */ +#define LL_RCC_PLLSAIM_DIV_9 LL_RCC_PLLM_DIV_9 /*!< PLLSAI division factor for PLLSAIM output by 9 */ +#define LL_RCC_PLLSAIM_DIV_10 LL_RCC_PLLM_DIV_10 /*!< PLLSAI division factor for PLLSAIM output by 10 */ +#define LL_RCC_PLLSAIM_DIV_11 LL_RCC_PLLM_DIV_11 /*!< PLLSAI division factor for PLLSAIM output by 11 */ +#define LL_RCC_PLLSAIM_DIV_12 LL_RCC_PLLM_DIV_12 /*!< PLLSAI division factor for PLLSAIM output by 12 */ +#define LL_RCC_PLLSAIM_DIV_13 LL_RCC_PLLM_DIV_13 /*!< PLLSAI division factor for PLLSAIM output by 13 */ +#define LL_RCC_PLLSAIM_DIV_14 LL_RCC_PLLM_DIV_14 /*!< PLLSAI division factor for PLLSAIM output by 14 */ +#define LL_RCC_PLLSAIM_DIV_15 LL_RCC_PLLM_DIV_15 /*!< PLLSAI division factor for PLLSAIM output by 15 */ +#define LL_RCC_PLLSAIM_DIV_16 LL_RCC_PLLM_DIV_16 /*!< PLLSAI division factor for PLLSAIM output by 16 */ +#define LL_RCC_PLLSAIM_DIV_17 LL_RCC_PLLM_DIV_17 /*!< PLLSAI division factor for PLLSAIM output by 17 */ +#define LL_RCC_PLLSAIM_DIV_18 LL_RCC_PLLM_DIV_18 /*!< PLLSAI division factor for PLLSAIM output by 18 */ +#define LL_RCC_PLLSAIM_DIV_19 LL_RCC_PLLM_DIV_19 /*!< PLLSAI division factor for PLLSAIM output by 19 */ +#define LL_RCC_PLLSAIM_DIV_20 LL_RCC_PLLM_DIV_20 /*!< PLLSAI division factor for PLLSAIM output by 20 */ +#define LL_RCC_PLLSAIM_DIV_21 LL_RCC_PLLM_DIV_21 /*!< PLLSAI division factor for PLLSAIM output by 21 */ +#define LL_RCC_PLLSAIM_DIV_22 LL_RCC_PLLM_DIV_22 /*!< PLLSAI division factor for PLLSAIM output by 22 */ +#define LL_RCC_PLLSAIM_DIV_23 LL_RCC_PLLM_DIV_23 /*!< PLLSAI division factor for PLLSAIM output by 23 */ +#define LL_RCC_PLLSAIM_DIV_24 LL_RCC_PLLM_DIV_24 /*!< PLLSAI division factor for PLLSAIM output by 24 */ +#define LL_RCC_PLLSAIM_DIV_25 LL_RCC_PLLM_DIV_25 /*!< PLLSAI division factor for PLLSAIM output by 25 */ +#define LL_RCC_PLLSAIM_DIV_26 LL_RCC_PLLM_DIV_26 /*!< PLLSAI division factor for PLLSAIM output by 26 */ +#define LL_RCC_PLLSAIM_DIV_27 LL_RCC_PLLM_DIV_27 /*!< PLLSAI division factor for PLLSAIM output by 27 */ +#define LL_RCC_PLLSAIM_DIV_28 LL_RCC_PLLM_DIV_28 /*!< PLLSAI division factor for PLLSAIM output by 28 */ +#define LL_RCC_PLLSAIM_DIV_29 LL_RCC_PLLM_DIV_29 /*!< PLLSAI division factor for PLLSAIM output by 29 */ +#define LL_RCC_PLLSAIM_DIV_30 LL_RCC_PLLM_DIV_30 /*!< PLLSAI division factor for PLLSAIM output by 30 */ +#define LL_RCC_PLLSAIM_DIV_31 LL_RCC_PLLM_DIV_31 /*!< PLLSAI division factor for PLLSAIM output by 31 */ +#define LL_RCC_PLLSAIM_DIV_32 LL_RCC_PLLM_DIV_32 /*!< PLLSAI division factor for PLLSAIM output by 32 */ +#define LL_RCC_PLLSAIM_DIV_33 LL_RCC_PLLM_DIV_33 /*!< PLLSAI division factor for PLLSAIM output by 33 */ +#define LL_RCC_PLLSAIM_DIV_34 LL_RCC_PLLM_DIV_34 /*!< PLLSAI division factor for PLLSAIM output by 34 */ +#define LL_RCC_PLLSAIM_DIV_35 LL_RCC_PLLM_DIV_35 /*!< PLLSAI division factor for PLLSAIM output by 35 */ +#define LL_RCC_PLLSAIM_DIV_36 LL_RCC_PLLM_DIV_36 /*!< PLLSAI division factor for PLLSAIM output by 36 */ +#define LL_RCC_PLLSAIM_DIV_37 LL_RCC_PLLM_DIV_37 /*!< PLLSAI division factor for PLLSAIM output by 37 */ +#define LL_RCC_PLLSAIM_DIV_38 LL_RCC_PLLM_DIV_38 /*!< PLLSAI division factor for PLLSAIM output by 38 */ +#define LL_RCC_PLLSAIM_DIV_39 LL_RCC_PLLM_DIV_39 /*!< PLLSAI division factor for PLLSAIM output by 39 */ +#define LL_RCC_PLLSAIM_DIV_40 LL_RCC_PLLM_DIV_40 /*!< PLLSAI division factor for PLLSAIM output by 40 */ +#define LL_RCC_PLLSAIM_DIV_41 LL_RCC_PLLM_DIV_41 /*!< PLLSAI division factor for PLLSAIM output by 41 */ +#define LL_RCC_PLLSAIM_DIV_42 LL_RCC_PLLM_DIV_42 /*!< PLLSAI division factor for PLLSAIM output by 42 */ +#define LL_RCC_PLLSAIM_DIV_43 LL_RCC_PLLM_DIV_43 /*!< PLLSAI division factor for PLLSAIM output by 43 */ +#define LL_RCC_PLLSAIM_DIV_44 LL_RCC_PLLM_DIV_44 /*!< PLLSAI division factor for PLLSAIM output by 44 */ +#define LL_RCC_PLLSAIM_DIV_45 LL_RCC_PLLM_DIV_45 /*!< PLLSAI division factor for PLLSAIM output by 45 */ +#define LL_RCC_PLLSAIM_DIV_46 LL_RCC_PLLM_DIV_46 /*!< PLLSAI division factor for PLLSAIM output by 46 */ +#define LL_RCC_PLLSAIM_DIV_47 LL_RCC_PLLM_DIV_47 /*!< PLLSAI division factor for PLLSAIM output by 47 */ +#define LL_RCC_PLLSAIM_DIV_48 LL_RCC_PLLM_DIV_48 /*!< PLLSAI division factor for PLLSAIM output by 48 */ +#define LL_RCC_PLLSAIM_DIV_49 LL_RCC_PLLM_DIV_49 /*!< PLLSAI division factor for PLLSAIM output by 49 */ +#define LL_RCC_PLLSAIM_DIV_50 LL_RCC_PLLM_DIV_50 /*!< PLLSAI division factor for PLLSAIM output by 50 */ +#define LL_RCC_PLLSAIM_DIV_51 LL_RCC_PLLM_DIV_51 /*!< PLLSAI division factor for PLLSAIM output by 51 */ +#define LL_RCC_PLLSAIM_DIV_52 LL_RCC_PLLM_DIV_52 /*!< PLLSAI division factor for PLLSAIM output by 52 */ +#define LL_RCC_PLLSAIM_DIV_53 LL_RCC_PLLM_DIV_53 /*!< PLLSAI division factor for PLLSAIM output by 53 */ +#define LL_RCC_PLLSAIM_DIV_54 LL_RCC_PLLM_DIV_54 /*!< PLLSAI division factor for PLLSAIM output by 54 */ +#define LL_RCC_PLLSAIM_DIV_55 LL_RCC_PLLM_DIV_55 /*!< PLLSAI division factor for PLLSAIM output by 55 */ +#define LL_RCC_PLLSAIM_DIV_56 LL_RCC_PLLM_DIV_56 /*!< PLLSAI division factor for PLLSAIM output by 56 */ +#define LL_RCC_PLLSAIM_DIV_57 LL_RCC_PLLM_DIV_57 /*!< PLLSAI division factor for PLLSAIM output by 57 */ +#define LL_RCC_PLLSAIM_DIV_58 LL_RCC_PLLM_DIV_58 /*!< PLLSAI division factor for PLLSAIM output by 58 */ +#define LL_RCC_PLLSAIM_DIV_59 LL_RCC_PLLM_DIV_59 /*!< PLLSAI division factor for PLLSAIM output by 59 */ +#define LL_RCC_PLLSAIM_DIV_60 LL_RCC_PLLM_DIV_60 /*!< PLLSAI division factor for PLLSAIM output by 60 */ +#define LL_RCC_PLLSAIM_DIV_61 LL_RCC_PLLM_DIV_61 /*!< PLLSAI division factor for PLLSAIM output by 61 */ +#define LL_RCC_PLLSAIM_DIV_62 LL_RCC_PLLM_DIV_62 /*!< PLLSAI division factor for PLLSAIM output by 62 */ +#define LL_RCC_PLLSAIM_DIV_63 LL_RCC_PLLM_DIV_63 /*!< PLLSAI division factor for PLLSAIM output by 63 */ +#endif /* RCC_PLLSAICFGR_PLLSAIM */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLSAIQ PLLSAIQ division factor (PLLSAIQ) + * @{ + */ +#define LL_RCC_PLLSAIQ_DIV_2 RCC_PLLSAICFGR_PLLSAIQ_1 /*!< PLLSAI division factor for PLLSAIQ output by 2 */ +#define LL_RCC_PLLSAIQ_DIV_3 (RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 3 */ +#define LL_RCC_PLLSAIQ_DIV_4 RCC_PLLSAICFGR_PLLSAIQ_2 /*!< PLLSAI division factor for PLLSAIQ output by 4 */ +#define LL_RCC_PLLSAIQ_DIV_5 (RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 5 */ +#define LL_RCC_PLLSAIQ_DIV_6 (RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1) /*!< PLLSAI division factor for PLLSAIQ output by 6 */ +#define LL_RCC_PLLSAIQ_DIV_7 (RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 7 */ +#define LL_RCC_PLLSAIQ_DIV_8 RCC_PLLSAICFGR_PLLSAIQ_3 /*!< PLLSAI division factor for PLLSAIQ output by 8 */ +#define LL_RCC_PLLSAIQ_DIV_9 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 9 */ +#define LL_RCC_PLLSAIQ_DIV_10 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_1) /*!< PLLSAI division factor for PLLSAIQ output by 10 */ +#define LL_RCC_PLLSAIQ_DIV_11 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 11 */ +#define LL_RCC_PLLSAIQ_DIV_12 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2) /*!< PLLSAI division factor for PLLSAIQ output by 12 */ +#define LL_RCC_PLLSAIQ_DIV_13 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 13 */ +#define LL_RCC_PLLSAIQ_DIV_14 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1) /*!< PLLSAI division factor for PLLSAIQ output by 14 */ +#define LL_RCC_PLLSAIQ_DIV_15 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 15 */ +/** + * @} + */ + +#if defined(RCC_DCKCFGR_PLLSAIDIVQ) +/** @defgroup RCC_LL_EC_PLLSAIDIVQ PLLSAIDIVQ division factor (PLLSAIDIVQ) + * @{ + */ +#define LL_RCC_PLLSAIDIVQ_DIV_1 0x00000000U /*!< PLLSAI division factor for PLLSAIDIVQ output by 1 */ +#define LL_RCC_PLLSAIDIVQ_DIV_2 RCC_DCKCFGR_PLLSAIDIVQ_0 /*!< PLLSAI division factor for PLLSAIDIVQ output by 2 */ +#define LL_RCC_PLLSAIDIVQ_DIV_3 RCC_DCKCFGR_PLLSAIDIVQ_1 /*!< PLLSAI division factor for PLLSAIDIVQ output by 3 */ +#define LL_RCC_PLLSAIDIVQ_DIV_4 (RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 4 */ +#define LL_RCC_PLLSAIDIVQ_DIV_5 RCC_DCKCFGR_PLLSAIDIVQ_2 /*!< PLLSAI division factor for PLLSAIDIVQ output by 5 */ +#define LL_RCC_PLLSAIDIVQ_DIV_6 (RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 6 */ +#define LL_RCC_PLLSAIDIVQ_DIV_7 (RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 7 */ +#define LL_RCC_PLLSAIDIVQ_DIV_8 (RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 8 */ +#define LL_RCC_PLLSAIDIVQ_DIV_9 RCC_DCKCFGR_PLLSAIDIVQ_3 /*!< PLLSAI division factor for PLLSAIDIVQ output by 9 */ +#define LL_RCC_PLLSAIDIVQ_DIV_10 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 10 */ +#define LL_RCC_PLLSAIDIVQ_DIV_11 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 11 */ +#define LL_RCC_PLLSAIDIVQ_DIV_12 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 12 */ +#define LL_RCC_PLLSAIDIVQ_DIV_13 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2) /*!< PLLSAI division factor for PLLSAIDIVQ output by 13 */ +#define LL_RCC_PLLSAIDIVQ_DIV_14 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 14 */ +#define LL_RCC_PLLSAIDIVQ_DIV_15 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 15 */ +#define LL_RCC_PLLSAIDIVQ_DIV_16 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 16 */ +#define LL_RCC_PLLSAIDIVQ_DIV_17 RCC_DCKCFGR_PLLSAIDIVQ_4 /*!< PLLSAI division factor for PLLSAIDIVQ output by 17 */ +#define LL_RCC_PLLSAIDIVQ_DIV_18 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 18 */ +#define LL_RCC_PLLSAIDIVQ_DIV_19 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 19 */ +#define LL_RCC_PLLSAIDIVQ_DIV_20 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 20 */ +#define LL_RCC_PLLSAIDIVQ_DIV_21 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2) /*!< PLLSAI division factor for PLLSAIDIVQ output by 21 */ +#define LL_RCC_PLLSAIDIVQ_DIV_22 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 22 */ +#define LL_RCC_PLLSAIDIVQ_DIV_23 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 23 */ +#define LL_RCC_PLLSAIDIVQ_DIV_24 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 24 */ +#define LL_RCC_PLLSAIDIVQ_DIV_25 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3) /*!< PLLSAI division factor for PLLSAIDIVQ output by 25 */ +#define LL_RCC_PLLSAIDIVQ_DIV_26 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 26 */ +#define LL_RCC_PLLSAIDIVQ_DIV_27 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 27 */ +#define LL_RCC_PLLSAIDIVQ_DIV_28 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 28 */ +#define LL_RCC_PLLSAIDIVQ_DIV_29 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2) /*!< PLLSAI division factor for PLLSAIDIVQ output by 29 */ +#define LL_RCC_PLLSAIDIVQ_DIV_30 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 30 */ +#define LL_RCC_PLLSAIDIVQ_DIV_31 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 31 */ +#define LL_RCC_PLLSAIDIVQ_DIV_32 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 32 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLSAIDIVQ */ + +#if defined(RCC_PLLSAICFGR_PLLSAIR) +/** @defgroup RCC_LL_EC_PLLSAIR PLLSAIR division factor (PLLSAIR) + * @{ + */ +#define LL_RCC_PLLSAIR_DIV_2 RCC_PLLSAICFGR_PLLSAIR_1 /*!< PLLSAI division factor for PLLSAIR output by 2 */ +#define LL_RCC_PLLSAIR_DIV_3 (RCC_PLLSAICFGR_PLLSAIR_1 | RCC_PLLSAICFGR_PLLSAIR_0) /*!< PLLSAI division factor for PLLSAIR output by 3 */ +#define LL_RCC_PLLSAIR_DIV_4 RCC_PLLSAICFGR_PLLSAIR_2 /*!< PLLSAI division factor for PLLSAIR output by 4 */ +#define LL_RCC_PLLSAIR_DIV_5 (RCC_PLLSAICFGR_PLLSAIR_2 | RCC_PLLSAICFGR_PLLSAIR_0) /*!< PLLSAI division factor for PLLSAIR output by 5 */ +#define LL_RCC_PLLSAIR_DIV_6 (RCC_PLLSAICFGR_PLLSAIR_2 | RCC_PLLSAICFGR_PLLSAIR_1) /*!< PLLSAI division factor for PLLSAIR output by 6 */ +#define LL_RCC_PLLSAIR_DIV_7 (RCC_PLLSAICFGR_PLLSAIR_2 | RCC_PLLSAICFGR_PLLSAIR_1 | RCC_PLLSAICFGR_PLLSAIR_0) /*!< PLLSAI division factor for PLLSAIR output by 7 */ +/** + * @} + */ +#endif /* RCC_PLLSAICFGR_PLLSAIR */ + +#if defined(RCC_DCKCFGR_PLLSAIDIVR) +/** @defgroup RCC_LL_EC_PLLSAIDIVR PLLSAIDIVR division factor (PLLSAIDIVR) + * @{ + */ +#define LL_RCC_PLLSAIDIVR_DIV_2 0x00000000U /*!< PLLSAI division factor for PLLSAIDIVR output by 2 */ +#define LL_RCC_PLLSAIDIVR_DIV_4 RCC_DCKCFGR_PLLSAIDIVR_0 /*!< PLLSAI division factor for PLLSAIDIVR output by 4 */ +#define LL_RCC_PLLSAIDIVR_DIV_8 RCC_DCKCFGR_PLLSAIDIVR_1 /*!< PLLSAI division factor for PLLSAIDIVR output by 8 */ +#define LL_RCC_PLLSAIDIVR_DIV_16 (RCC_DCKCFGR_PLLSAIDIVR_1 | RCC_DCKCFGR_PLLSAIDIVR_0) /*!< PLLSAI division factor for PLLSAIDIVR output by 16 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLSAIDIVR */ + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** @defgroup RCC_LL_EC_PLLSAIP PLLSAIP division factor (PLLSAIP) + * @{ + */ +#define LL_RCC_PLLSAIP_DIV_2 0x00000000U /*!< PLLSAI division factor for PLLSAIP output by 2 */ +#define LL_RCC_PLLSAIP_DIV_4 RCC_PLLSAICFGR_PLLSAIP_0 /*!< PLLSAI division factor for PLLSAIP output by 4 */ +#define LL_RCC_PLLSAIP_DIV_6 RCC_PLLSAICFGR_PLLSAIP_1 /*!< PLLSAI division factor for PLLSAIP output by 6 */ +#define LL_RCC_PLLSAIP_DIV_8 (RCC_PLLSAICFGR_PLLSAIP_1 | RCC_PLLSAICFGR_PLLSAIP_0) /*!< PLLSAI division factor for PLLSAIP output by 8 */ +/** + * @} + */ +#endif /* RCC_PLLSAICFGR_PLLSAIP */ +#endif /* RCC_PLLSAI_SUPPORT */ +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCC_LL_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in RCC register + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__)) + +/** + * @brief Read a value in RCC register + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__) +/** + * @} + */ + +/** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies + * @{ + */ + +/** + * @brief Helper macro to calculate the PLLCLK frequency on system domain + * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLP__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLP_DIV_2 + * @arg @ref LL_RCC_PLLP_DIV_4 + * @arg @ref LL_RCC_PLLP_DIV_6 + * @arg @ref LL_RCC_PLLP_DIV_8 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((((__PLLP__) >> RCC_PLLCFGR_PLLP_Pos ) + 1U) * 2U)) + +#if defined(RCC_PLLR_SYSCLK_SUPPORT) +/** + * @brief Helper macro to calculate the PLLRCLK frequency on system domain + * @note ex: @ref __LL_RCC_CALC_PLLRCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLRCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) + +#endif /* RCC_PLLR_SYSCLK_SUPPORT */ + +/** + * @brief Helper macro to calculate the PLLCLK frequency used on 48M domain + * @note ex: @ref __LL_RCC_CALC_PLLCLK_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLQ_DIV_2 + * @arg @ref LL_RCC_PLLQ_DIV_3 + * @arg @ref LL_RCC_PLLQ_DIV_4 + * @arg @ref LL_RCC_PLLQ_DIV_5 + * @arg @ref LL_RCC_PLLQ_DIV_6 + * @arg @ref LL_RCC_PLLQ_DIV_7 + * @arg @ref LL_RCC_PLLQ_DIV_8 + * @arg @ref LL_RCC_PLLQ_DIV_9 + * @arg @ref LL_RCC_PLLQ_DIV_10 + * @arg @ref LL_RCC_PLLQ_DIV_11 + * @arg @ref LL_RCC_PLLQ_DIV_12 + * @arg @ref LL_RCC_PLLQ_DIV_13 + * @arg @ref LL_RCC_PLLQ_DIV_14 + * @arg @ref LL_RCC_PLLQ_DIV_15 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLQ__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLQ__) >> RCC_PLLCFGR_PLLQ_Pos )) + +#if defined(DSI) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on DSI + * @note ex: @ref __LL_RCC_CALC_PLLCLK_DSI_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_DSI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* DSI */ + +#if defined(RCC_PLLR_I2S_CLKSOURCE_SUPPORT) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on I2S + * @note ex: @ref __LL_RCC_CALC_PLLCLK_I2S_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_I2S_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* RCC_PLLR_I2S_CLKSOURCE_SUPPORT */ + +#if defined(SPDIFRX) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on SPDIFRX + * @note ex: @ref __LL_RCC_CALC_PLLCLK_SPDIFRX_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_SPDIFRX_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* SPDIFRX */ + +#if defined(RCC_PLLCFGR_PLLR) +#if defined(SAI1) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on SAI + * @note ex: @ref __LL_RCC_CALC_PLLCLK_SAI_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR (), @ref LL_RCC_PLL_GetDIVR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @param __PLLDIVR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval PLL clock frequency (in Hz) + */ +#if defined(RCC_DCKCFGR_PLLDIVR) +#define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__, __PLLDIVR__) (((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) / ((__PLLDIVR__) >> RCC_DCKCFGR_PLLDIVR_Pos )) +#else +#define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* RCC_DCKCFGR_PLLDIVR */ +#endif /* SAI1 */ +#endif /* RCC_PLLCFGR_PLLR */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI_GetDivider (), + * @ref LL_RCC_PLLSAI_GetN (), @ref LL_RCC_PLLSAI_GetQ (), @ref LL_RCC_PLLSAI_GetDIVQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param __PLLSAIN__ Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLSAIQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIQ_DIV_15 + * @param __PLLSAIDIVQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_32 + * @retval PLLSAI clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAIN__, __PLLSAIQ__, __PLLSAIDIVQ__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLSAIN__) / \ + (((__PLLSAIQ__) >> RCC_PLLSAICFGR_PLLSAIQ_Pos) * (((__PLLSAIDIVQ__) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos) + 1U))) + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** + * @brief Helper macro to calculate the PLLSAI frequency used on 48Mhz domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI_GetDivider (), + * @ref LL_RCC_PLLSAI_GetN (), @ref LL_RCC_PLLSAI_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param __PLLSAIN__ Between 50 and 432 + * @param __PLLSAIP__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIP_DIV_2 + * @arg @ref LL_RCC_PLLSAIP_DIV_4 + * @arg @ref LL_RCC_PLLSAIP_DIV_6 + * @arg @ref LL_RCC_PLLSAIP_DIV_8 + * @retval PLLSAI clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAIN__, __PLLSAIP__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLSAIN__) / \ + ((((__PLLSAIP__) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) * 2U)) +#endif /* RCC_PLLSAICFGR_PLLSAIP */ + +#if defined(LTDC) +/** + * @brief Helper macro to calculate the PLLSAI frequency used for LTDC domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI_LTDC_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI_GetDivider (), + * @ref LL_RCC_PLLSAI_GetN (), @ref LL_RCC_PLLSAI_GetR (), @ref LL_RCC_PLLSAI_GetDIVR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param __PLLSAIN__ Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLSAIR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIR_DIV_2 + * @arg @ref LL_RCC_PLLSAIR_DIV_3 + * @arg @ref LL_RCC_PLLSAIR_DIV_4 + * @arg @ref LL_RCC_PLLSAIR_DIV_5 + * @arg @ref LL_RCC_PLLSAIR_DIV_6 + * @arg @ref LL_RCC_PLLSAIR_DIV_7 + * @param __PLLSAIDIVR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_16 + * @retval PLLSAI clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI_LTDC_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAIN__, __PLLSAIR__, __PLLSAIDIVR__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLSAIN__) / \ + (((__PLLSAIR__) >> RCC_PLLSAICFGR_PLLSAIR_Pos) * (aRCC_PLLSAIDIVRPrescTable[(__PLLSAIDIVR__) >> RCC_DCKCFGR_PLLSAIDIVR_Pos]))) +#endif /* LTDC */ +#endif /* RCC_PLLSAI_SUPPORT */ + +#if defined(RCC_PLLI2S_SUPPORT) +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) || defined(RCC_DCKCFGR_PLLI2SDIVR) +/** + * @brief Helper macro to calculate the PLLI2S frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetQ (), @ref LL_RCC_PLLI2S_GetDIVQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLI2SQ_R__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_7 (*) + * + * (*) value not defined in all devices. + * @param __PLLI2SDIVQ_R__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_31 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_32 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval PLLI2S clock frequency (in Hz) + */ +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define __LL_RCC_CALC_PLLI2S_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SQ_R__, __PLLI2SDIVQ_R__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + (((__PLLI2SQ_R__) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos) * (((__PLLI2SDIVQ_R__) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos) + 1U))) +#else +#define __LL_RCC_CALC_PLLI2S_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SQ_R__, __PLLI2SDIVQ_R__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + (((__PLLI2SQ_R__) >> RCC_PLLI2SCFGR_PLLI2SR_Pos) * ((__PLLI2SDIVQ_R__) >> RCC_DCKCFGR_PLLI2SDIVR_Pos))) + +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ +#endif /* RCC_DCKCFGR_PLLI2SDIVQ || RCC_DCKCFGR_PLLI2SDIVR */ + +#if defined(SPDIFRX) +/** + * @brief Helper macro to calculate the PLLI2S frequency used on SPDIFRX domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_SPDIFRX_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50 and 432 + * @param __PLLI2SP__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SP_DIV_2 + * @arg @ref LL_RCC_PLLI2SP_DIV_4 + * @arg @ref LL_RCC_PLLI2SP_DIV_6 + * @arg @ref LL_RCC_PLLI2SP_DIV_8 + * @retval PLLI2S clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLI2S_SPDIFRX_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SP__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + ((((__PLLI2SP__) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) * 2U)) + +#endif /* SPDIFRX */ + +/** + * @brief Helper macro to calculate the PLLI2S frequency used for I2S domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_I2S_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLI2SR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SR_DIV_2 + * @arg @ref LL_RCC_PLLI2SR_DIV_3 + * @arg @ref LL_RCC_PLLI2SR_DIV_4 + * @arg @ref LL_RCC_PLLI2SR_DIV_5 + * @arg @ref LL_RCC_PLLI2SR_DIV_6 + * @arg @ref LL_RCC_PLLI2SR_DIV_7 + * @retval PLLI2S clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLI2S_I2S_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SR__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + ((__PLLI2SR__) >> RCC_PLLI2SCFGR_PLLI2SR_Pos)) + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** + * @brief Helper macro to calculate the PLLI2S frequency used for 48Mhz domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50 and 432 + * @param __PLLI2SQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 + * @retval PLLI2S clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLI2S_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SQ__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + ((__PLLI2SQ__) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos)) + +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +#endif /* RCC_PLLI2S_SUPPORT */ + +/** + * @brief Helper macro to calculate the HCLK frequency + * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK) + * @param __AHBPRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_RCC_SYSCLK_DIV_1 + * @arg @ref LL_RCC_SYSCLK_DIV_2 + * @arg @ref LL_RCC_SYSCLK_DIV_4 + * @arg @ref LL_RCC_SYSCLK_DIV_8 + * @arg @ref LL_RCC_SYSCLK_DIV_16 + * @arg @ref LL_RCC_SYSCLK_DIV_64 + * @arg @ref LL_RCC_SYSCLK_DIV_128 + * @arg @ref LL_RCC_SYSCLK_DIV_256 + * @arg @ref LL_RCC_SYSCLK_DIV_512 + * @retval HCLK clock frequency (in Hz) + */ +#define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) &\ + RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]) + +/** + * @brief Helper macro to calculate the PCLK1 frequency (ABP1) + * @param __HCLKFREQ__ HCLK frequency + * @param __APB1PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_RCC_APB1_DIV_1 + * @arg @ref LL_RCC_APB1_DIV_2 + * @arg @ref LL_RCC_APB1_DIV_4 + * @arg @ref LL_RCC_APB1_DIV_8 + * @arg @ref LL_RCC_APB1_DIV_16 + * @retval PCLK1 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos]) + +/** + * @brief Helper macro to calculate the PCLK2 frequency (ABP2) + * @param __HCLKFREQ__ HCLK frequency + * @param __APB2PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_RCC_APB2_DIV_1 + * @arg @ref LL_RCC_APB2_DIV_2 + * @arg @ref LL_RCC_APB2_DIV_4 + * @arg @ref LL_RCC_APB2_DIV_8 + * @arg @ref LL_RCC_APB2_DIV_16 + * @retval PCLK2 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos]) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup RCC_LL_Exported_Functions RCC Exported Functions + * @{ + */ + +/** @defgroup RCC_LL_EF_HSE HSE + * @{ + */ + +/** + * @brief Enable the Clock Security System. + * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_EnableCSS(void) +{ + SET_BIT(RCC->CR, RCC_CR_CSSON); +} + +/** + * @brief Enable HSE external oscillator (HSE Bypass) + * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_EnableBypass(void) +{ + SET_BIT(RCC->CR, RCC_CR_HSEBYP); +} + +/** + * @brief Disable HSE external oscillator (HSE Bypass) + * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_DisableBypass(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); +} + +/** + * @brief Enable HSE crystal oscillator (HSE ON) + * @rmtoll CR HSEON LL_RCC_HSE_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_HSEON); +} + +/** + * @brief Disable HSE crystal oscillator (HSE ON) + * @rmtoll CR HSEON LL_RCC_HSE_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); +} + +/** + * @brief Check if HSE oscillator Ready + * @rmtoll CR HSERDY LL_RCC_HSE_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_HSI HSI + * @{ + */ + +/** + * @brief Enable HSI oscillator + * @rmtoll CR HSION LL_RCC_HSI_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_HSION); +} + +/** + * @brief Disable HSI oscillator + * @rmtoll CR HSION LL_RCC_HSI_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_HSION); +} + +/** + * @brief Check if HSI clock is ready + * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)); +} + +/** + * @brief Get HSI Calibration value + * @note When HSITRIM is written, HSICAL is updated with the sum of + * HSITRIM and the factory trim value + * @rmtoll CR HSICAL LL_RCC_HSI_GetCalibration + * @retval Between Min_Data = 0x00 and Max_Data = 0xFF + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void) +{ + return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos); +} + +/** + * @brief Set HSI Calibration trimming + * @note user-programmable trimming value that is added to the HSICAL + * @note Default value is 16, which, when added to the HSICAL value, + * should trim the HSI to 16 MHz +/- 1 % + * @rmtoll CR HSITRIM LL_RCC_HSI_SetCalibTrimming + * @param Value Between Min_Data = 0 and Max_Data = 31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value) +{ + MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos); +} + +/** + * @brief Get HSI Calibration trimming + * @rmtoll CR HSITRIM LL_RCC_HSI_GetCalibTrimming + * @retval Between Min_Data = 0 and Max_Data = 31 + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void) +{ + return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_LSE LSE + * @{ + */ + +/** + * @brief Enable Low Speed External (LSE) crystal. + * @rmtoll BDCR LSEON LL_RCC_LSE_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_Enable(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); +} + +/** + * @brief Disable Low Speed External (LSE) crystal. + * @rmtoll BDCR LSEON LL_RCC_LSE_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_Disable(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); +} + +/** + * @brief Enable external clock source (LSE bypass). + * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_EnableBypass(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); +} + +/** + * @brief Disable external clock source (LSE bypass). + * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_DisableBypass(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); +} + +/** + * @brief Check if LSE oscillator Ready + * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void) +{ + return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)); +} + +#if defined(RCC_BDCR_LSEMOD) +/** + * @brief Enable LSE high drive mode. + * @note LSE high drive mode can be enabled only when the LSE clock is disabled + * @rmtoll BDCR LSEMOD LL_RCC_LSE_EnableHighDriveMode + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_EnableHighDriveMode(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); +} + +/** + * @brief Disable LSE high drive mode. + * @note LSE high drive mode can be disabled only when the LSE clock is disabled + * @rmtoll BDCR LSEMOD LL_RCC_LSE_DisableHighDriveMode + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_DisableHighDriveMode(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); +} +#endif /* RCC_BDCR_LSEMOD */ + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_LSI LSI + * @{ + */ + +/** + * @brief Enable LSI Oscillator + * @rmtoll CSR LSION LL_RCC_LSI_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSI_Enable(void) +{ + SET_BIT(RCC->CSR, RCC_CSR_LSION); +} + +/** + * @brief Disable LSI Oscillator + * @rmtoll CSR LSION LL_RCC_LSI_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSI_Disable(void) +{ + CLEAR_BIT(RCC->CSR, RCC_CSR_LSION); +} + +/** + * @brief Check if LSI is Ready + * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_System System + * @{ + */ + +/** + * @brief Configure the system clock source + * @rmtoll CFGR SW LL_RCC_SetSysClkSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI + * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE + * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL + * @arg @ref LL_RCC_SYS_CLKSOURCE_PLLR (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source); +} + +/** + * @brief Get the system clock source + * @rmtoll CFGR SWS LL_RCC_GetSysClkSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLLR (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)); +} + +/** + * @brief Set AHB prescaler + * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_SYSCLK_DIV_1 + * @arg @ref LL_RCC_SYSCLK_DIV_2 + * @arg @ref LL_RCC_SYSCLK_DIV_4 + * @arg @ref LL_RCC_SYSCLK_DIV_8 + * @arg @ref LL_RCC_SYSCLK_DIV_16 + * @arg @ref LL_RCC_SYSCLK_DIV_64 + * @arg @ref LL_RCC_SYSCLK_DIV_128 + * @arg @ref LL_RCC_SYSCLK_DIV_256 + * @arg @ref LL_RCC_SYSCLK_DIV_512 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler); +} + +/** + * @brief Set APB1 prescaler + * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_APB1_DIV_1 + * @arg @ref LL_RCC_APB1_DIV_2 + * @arg @ref LL_RCC_APB1_DIV_4 + * @arg @ref LL_RCC_APB1_DIV_8 + * @arg @ref LL_RCC_APB1_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler); +} + +/** + * @brief Set APB2 prescaler + * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_APB2_DIV_1 + * @arg @ref LL_RCC_APB2_DIV_2 + * @arg @ref LL_RCC_APB2_DIV_4 + * @arg @ref LL_RCC_APB2_DIV_8 + * @arg @ref LL_RCC_APB2_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler); +} + +/** + * @brief Get AHB prescaler + * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SYSCLK_DIV_1 + * @arg @ref LL_RCC_SYSCLK_DIV_2 + * @arg @ref LL_RCC_SYSCLK_DIV_4 + * @arg @ref LL_RCC_SYSCLK_DIV_8 + * @arg @ref LL_RCC_SYSCLK_DIV_16 + * @arg @ref LL_RCC_SYSCLK_DIV_64 + * @arg @ref LL_RCC_SYSCLK_DIV_128 + * @arg @ref LL_RCC_SYSCLK_DIV_256 + * @arg @ref LL_RCC_SYSCLK_DIV_512 + */ +__STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE)); +} + +/** + * @brief Get APB1 prescaler + * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_APB1_DIV_1 + * @arg @ref LL_RCC_APB1_DIV_2 + * @arg @ref LL_RCC_APB1_DIV_4 + * @arg @ref LL_RCC_APB1_DIV_8 + * @arg @ref LL_RCC_APB1_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1)); +} + +/** + * @brief Get APB2 prescaler + * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_APB2_DIV_1 + * @arg @ref LL_RCC_APB2_DIV_2 + * @arg @ref LL_RCC_APB2_DIV_4 + * @arg @ref LL_RCC_APB2_DIV_8 + * @arg @ref LL_RCC_APB2_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_MCO MCO + * @{ + */ + +#if defined(RCC_CFGR_MCO1EN) +/** + * @brief Enable MCO1 output + * @rmtoll CFGR RCC_CFGR_MCO1EN LL_RCC_MCO1_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO1_Enable(void) +{ + SET_BIT(RCC->CFGR, RCC_CFGR_MCO1EN); +} + +/** + * @brief Disable MCO1 output + * @rmtoll CFGR RCC_CFGR_MCO1EN LL_RCC_MCO1_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO1_Disable(void) +{ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_MCO1EN); +} +#endif /* RCC_CFGR_MCO1EN */ + +#if defined(RCC_CFGR_MCO2EN) +/** + * @brief Enable MCO2 output + * @rmtoll CFGR RCC_CFGR_MCO2EN LL_RCC_MCO2_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO2_Enable(void) +{ + SET_BIT(RCC->CFGR, RCC_CFGR_MCO2EN); +} + +/** + * @brief Disable MCO2 output + * @rmtoll CFGR RCC_CFGR_MCO2EN LL_RCC_MCO2_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO2_Disable(void) +{ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_MCO2EN); +} +#endif /* RCC_CFGR_MCO2EN */ + +/** + * @brief Configure MCOx + * @rmtoll CFGR MCO1 LL_RCC_ConfigMCO\n + * CFGR MCO1PRE LL_RCC_ConfigMCO\n + * CFGR MCO2 LL_RCC_ConfigMCO\n + * CFGR MCO2PRE LL_RCC_ConfigMCO + * @param MCOxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_MCO1SOURCE_HSI + * @arg @ref LL_RCC_MCO1SOURCE_LSE + * @arg @ref LL_RCC_MCO1SOURCE_HSE + * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK + * @arg @ref LL_RCC_MCO2SOURCE_SYSCLK + * @arg @ref LL_RCC_MCO2SOURCE_PLLI2S + * @arg @ref LL_RCC_MCO2SOURCE_HSE + * @arg @ref LL_RCC_MCO2SOURCE_PLLCLK + * @param MCOxPrescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_MCO1_DIV_1 + * @arg @ref LL_RCC_MCO1_DIV_2 + * @arg @ref LL_RCC_MCO1_DIV_3 + * @arg @ref LL_RCC_MCO1_DIV_4 + * @arg @ref LL_RCC_MCO1_DIV_5 + * @arg @ref LL_RCC_MCO2_DIV_1 + * @arg @ref LL_RCC_MCO2_DIV_2 + * @arg @ref LL_RCC_MCO2_DIV_3 + * @arg @ref LL_RCC_MCO2_DIV_4 + * @arg @ref LL_RCC_MCO2_DIV_5 + * @retval None + */ +__STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler) +{ + MODIFY_REG(RCC->CFGR, (MCOxSource & 0xFFFF0000U) | (MCOxPrescaler & 0xFFFF0000U), (MCOxSource << 16U) | (MCOxPrescaler << 16U)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source + * @{ + */ +#if defined(FMPI2C1) +/** + * @brief Configure FMPI2C clock source + * @rmtoll DCKCFGR2 FMPI2C1SEL LL_RCC_SetFMPI2CClockSource + * @param FMPI2CxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_HSI + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetFMPI2CClockSource(uint32_t FMPI2CxSource) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, FMPI2CxSource); +} +#endif /* FMPI2C1 */ + +#if defined(LPTIM1) +/** + * @brief Configure LPTIMx clock source + * @rmtoll DCKCFGR2 LPTIM1SEL LL_RCC_SetLPTIMClockSource + * @param LPTIMxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL, LPTIMxSource); +} +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** + * @brief Configure SAIx clock source + * @rmtoll DCKCFGR SAI1SRC LL_RCC_SetSAIClockSource\n + * DCKCFGR SAI2SRC LL_RCC_SetSAIClockSource\n + * DCKCFGR SAI1ASRC LL_RCC_SetSAIClockSource\n + * DCKCFGR SAI1BSRC LL_RCC_SetSAIClockSource + * @param SAIxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource) +{ + MODIFY_REG(RCC->DCKCFGR, (SAIxSource & 0xFFFF0000U), (SAIxSource << 16U)); +} +#endif /* SAI1 */ + +#if defined(RCC_DCKCFGR_SDIOSEL) || defined(RCC_DCKCFGR2_SDIOSEL) +/** + * @brief Configure SDIO clock source + * @rmtoll DCKCFGR SDIOSEL LL_RCC_SetSDIOClockSource\n + * DCKCFGR2 SDIOSEL LL_RCC_SetSDIOClockSource + * @param SDIOxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SDIO_CLKSOURCE_PLL48CLK + * @arg @ref LL_RCC_SDIO_CLKSOURCE_SYSCLK + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSDIOClockSource(uint32_t SDIOxSource) +{ +#if defined(RCC_DCKCFGR_SDIOSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SDIOSEL, SDIOxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL, SDIOxSource); +#endif /* RCC_DCKCFGR_SDIOSEL */ +} +#endif /* RCC_DCKCFGR_SDIOSEL || RCC_DCKCFGR2_SDIOSEL */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** + * @brief Configure 48Mhz domain clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_SetCK48MClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_SetCK48MClockSource + * @param CK48MxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLL + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetCK48MClockSource(uint32_t CK48MxSource) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, CK48MxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, CK48MxSource); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} + +#if defined(RNG) +/** + * @brief Configure RNG clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_SetRNGClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_SetRNGClockSource + * @param RNGxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, RNGxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, RNGxSource); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** + * @brief Configure USB clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_SetUSBClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_SetUSBClockSource + * @param USBxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE_PLL + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, USBxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, USBxSource); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* USB_OTG_FS || USB_OTG_HS */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(CEC) +/** + * @brief Configure CEC clock source + * @rmtoll DCKCFGR2 CECSEL LL_RCC_SetCECClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV488 + * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CECSEL, Source); +} +#endif /* CEC */ + +/** + * @brief Configure I2S clock source + * @rmtoll CFGR I2SSRC LL_RCC_SetI2SClockSource\n + * DCKCFGR I2SSRC LL_RCC_SetI2SClockSource\n + * DCKCFGR I2S1SRC LL_RCC_SetI2SClockSource\n + * DCKCFGR I2S2SRC LL_RCC_SetI2SClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PIN + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetI2SClockSource(uint32_t Source) +{ +#if defined(RCC_CFGR_I2SSRC) + MODIFY_REG(RCC->CFGR, RCC_CFGR_I2SSRC, Source); +#else + MODIFY_REG(RCC->DCKCFGR, (Source & 0xFFFF0000U), (Source << 16U)); +#endif /* RCC_CFGR_I2SSRC */ +} + +#if defined(DSI) +/** + * @brief Configure DSI clock source + * @rmtoll DCKCFGR DSISEL LL_RCC_SetDSIClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY + * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDSIClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_DSISEL, Source); +} +#endif /* DSI */ + +#if defined(DFSDM1_Channel0) +/** + * @brief Configure DFSDM Audio clock source + * @rmtoll DCKCFGR CKDFSDM1ASEL LL_RCC_SetDFSDMAudioClockSource\n + * DCKCFGR CKDFSDM2ASEL LL_RCC_SetDFSDMAudioClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S1 + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S2 + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S1 (*) + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDFSDMAudioClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR, (Source & 0x0000FFFFU), (Source >> 16U)); +} + +/** + * @brief Configure DFSDM Kernel clock source + * @rmtoll DCKCFGR CKDFSDM1SEL LL_RCC_SetDFSDMClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2 + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_PCLK2 (*) + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_SYSCLK (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDFSDMClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL, Source); +} +#endif /* DFSDM1_Channel0 */ + +#if defined(SPDIFRX) +/** + * @brief Configure SPDIFRX clock source + * @rmtoll DCKCFGR2 SPDIFRXSEL LL_RCC_SetSPDIFRXClockSource + * @param SPDIFRXxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLL + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLLI2S + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSPDIFRXClockSource(uint32_t SPDIFRXxSource) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SPDIFRXSEL, SPDIFRXxSource); +} +#endif /* SPDIFRX */ + +#if defined(FMPI2C1) +/** + * @brief Get FMPI2C clock source + * @rmtoll DCKCFGR2 FMPI2C1SEL LL_RCC_GetFMPI2CClockSource + * @param FMPI2Cx This parameter can be one of the following values: + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_HSI + */ +__STATIC_INLINE uint32_t LL_RCC_GetFMPI2CClockSource(uint32_t FMPI2Cx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, FMPI2Cx)); +} +#endif /* FMPI2C1 */ + +#if defined(LPTIM1) +/** + * @brief Get LPTIMx clock source + * @rmtoll DCKCFGR2 LPTIM1SEL LL_RCC_GetLPTIMClockSource + * @param LPTIMx This parameter can be one of the following values: + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL)); +} +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** + * @brief Get SAIx clock source + * @rmtoll DCKCFGR SAI1SEL LL_RCC_GetSAIClockSource\n + * DCKCFGR SAI2SEL LL_RCC_GetSAIClockSource\n + * DCKCFGR SAI1ASRC LL_RCC_GetSAIClockSource\n + * DCKCFGR SAI1BSRC LL_RCC_GetSAIClockSource + * @param SAIx This parameter can be one of the following values: + * @arg @ref LL_RCC_SAI1_CLKSOURCE (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE (*) + * + * (*) value not defined in all devices. + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, SAIx) >> 16U | SAIx); +} +#endif /* SAI1 */ + +#if defined(RCC_DCKCFGR_SDIOSEL) || defined(RCC_DCKCFGR2_SDIOSEL) +/** + * @brief Get SDIOx clock source + * @rmtoll DCKCFGR SDIOSEL LL_RCC_GetSDIOClockSource\n + * DCKCFGR2 SDIOSEL LL_RCC_GetSDIOClockSource + * @param SDIOx This parameter can be one of the following values: + * @arg @ref LL_RCC_SDIO_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SDIO_CLKSOURCE_PLL48CLK + * @arg @ref LL_RCC_SDIO_CLKSOURCE_SYSCLK + */ +__STATIC_INLINE uint32_t LL_RCC_GetSDIOClockSource(uint32_t SDIOx) +{ +#if defined(RCC_DCKCFGR_SDIOSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, SDIOx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, SDIOx)); +#endif /* RCC_DCKCFGR_SDIOSEL */ +} +#endif /* RCC_DCKCFGR_SDIOSEL || RCC_DCKCFGR2_SDIOSEL */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** + * @brief Get 48Mhz domain clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_GetCK48MClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_GetCK48MClockSource + * @param CK48Mx This parameter can be one of the following values: + * @arg @ref LL_RCC_CK48M_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLL + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetCK48MClockSource(uint32_t CK48Mx) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, CK48Mx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, CK48Mx)); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} + +#if defined(RNG) +/** + * @brief Get RNGx clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_GetRNGClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_GetRNGClockSource + * @param RNGx This parameter can be one of the following values: + * @arg @ref LL_RCC_RNG_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RNGx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, RNGx)); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** + * @brief Get USBx clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_GetUSBClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_GetUSBClockSource + * @param USBx This parameter can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE_PLL + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, USBx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, USBx)); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* USB_OTG_FS || USB_OTG_HS */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(CEC) +/** + * @brief Get CEC Clock Source + * @rmtoll DCKCFGR2 CECSEL LL_RCC_GetCECClockSource + * @param CECx This parameter can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV488 + * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t CECx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, CECx)); +} +#endif /* CEC */ + +/** + * @brief Get I2S Clock Source + * @rmtoll CFGR I2SSRC LL_RCC_GetI2SClockSource\n + * DCKCFGR I2SSRC LL_RCC_GetI2SClockSource\n + * DCKCFGR I2S1SRC LL_RCC_GetI2SClockSource\n + * DCKCFGR I2S2SRC LL_RCC_GetI2SClockSource + * @param I2Sx This parameter can be one of the following values: + * @arg @ref LL_RCC_I2S1_CLKSOURCE + * @arg @ref LL_RCC_I2S2_CLKSOURCE (*) + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PIN + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetI2SClockSource(uint32_t I2Sx) +{ +#if defined(RCC_CFGR_I2SSRC) + return (uint32_t)(READ_BIT(RCC->CFGR, I2Sx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR, I2Sx) >> 16U | I2Sx); +#endif /* RCC_CFGR_I2SSRC */ +} + +#if defined(DFSDM1_Channel0) +/** + * @brief Get DFSDM Audio Clock Source + * @rmtoll DCKCFGR CKDFSDM1ASEL LL_RCC_GetDFSDMAudioClockSource\n + * DCKCFGR CKDFSDM2ASEL LL_RCC_GetDFSDMAudioClockSource + * @param DFSDMx This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE (*) + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S1 + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S2 + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S1 (*) + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S2 (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetDFSDMAudioClockSource(uint32_t DFSDMx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, DFSDMx) << 16U | DFSDMx); +} + +/** + * @brief Get DFSDM Audio Clock Source + * @rmtoll DCKCFGR CKDFSDM1SEL LL_RCC_GetDFSDMClockSource + * @param DFSDMx This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE (*) + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2 + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_PCLK2 (*) + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_SYSCLK (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetDFSDMClockSource(uint32_t DFSDMx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, DFSDMx)); +} +#endif /* DFSDM1_Channel0 */ + +#if defined(SPDIFRX) +/** + * @brief Get SPDIFRX clock source + * @rmtoll DCKCFGR2 SPDIFRXSEL LL_RCC_GetSPDIFRXClockSource + * @param SPDIFRXx This parameter can be one of the following values: + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLL + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLLI2S + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSPDIFRXClockSource(uint32_t SPDIFRXx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, SPDIFRXx)); +} +#endif /* SPDIFRX */ + +#if defined(DSI) +/** + * @brief Get DSI Clock Source + * @rmtoll DCKCFGR DSISEL LL_RCC_GetDSIClockSource + * @param DSIx This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY + * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL + */ +__STATIC_INLINE uint32_t LL_RCC_GetDSIClockSource(uint32_t DSIx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, DSIx)); +} +#endif /* DSI */ + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_RTC RTC + * @{ + */ + +/** + * @brief Set RTC Clock Source + * @note Once the RTC clock source has been selected, it cannot be changed anymore unless + * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is + * set). The BDRST bit can be used to reset them. + * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI + * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source); +} + +/** + * @brief Get RTC Clock Source + * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI + * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void) +{ + return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)); +} + +/** + * @brief Enable RTC + * @rmtoll BDCR RTCEN LL_RCC_EnableRTC + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableRTC(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN); +} + +/** + * @brief Disable RTC + * @rmtoll BDCR RTCEN LL_RCC_DisableRTC + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableRTC(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN); +} + +/** + * @brief Check if RTC has been enabled or not + * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void) +{ + return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN)); +} + +/** + * @brief Force the Backup domain reset + * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset + * @retval None + */ +__STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_BDRST); +} + +/** + * @brief Release the Backup domain reset + * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset + * @retval None + */ +__STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST); +} + +/** + * @brief Set HSE Prescalers for RTC Clock + * @rmtoll CFGR RTCPRE LL_RCC_SetRTC_HSEPrescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_RTC_NOCLOCK + * @arg @ref LL_RCC_RTC_HSE_DIV_2 + * @arg @ref LL_RCC_RTC_HSE_DIV_3 + * @arg @ref LL_RCC_RTC_HSE_DIV_4 + * @arg @ref LL_RCC_RTC_HSE_DIV_5 + * @arg @ref LL_RCC_RTC_HSE_DIV_6 + * @arg @ref LL_RCC_RTC_HSE_DIV_7 + * @arg @ref LL_RCC_RTC_HSE_DIV_8 + * @arg @ref LL_RCC_RTC_HSE_DIV_9 + * @arg @ref LL_RCC_RTC_HSE_DIV_10 + * @arg @ref LL_RCC_RTC_HSE_DIV_11 + * @arg @ref LL_RCC_RTC_HSE_DIV_12 + * @arg @ref LL_RCC_RTC_HSE_DIV_13 + * @arg @ref LL_RCC_RTC_HSE_DIV_14 + * @arg @ref LL_RCC_RTC_HSE_DIV_15 + * @arg @ref LL_RCC_RTC_HSE_DIV_16 + * @arg @ref LL_RCC_RTC_HSE_DIV_17 + * @arg @ref LL_RCC_RTC_HSE_DIV_18 + * @arg @ref LL_RCC_RTC_HSE_DIV_19 + * @arg @ref LL_RCC_RTC_HSE_DIV_20 + * @arg @ref LL_RCC_RTC_HSE_DIV_21 + * @arg @ref LL_RCC_RTC_HSE_DIV_22 + * @arg @ref LL_RCC_RTC_HSE_DIV_23 + * @arg @ref LL_RCC_RTC_HSE_DIV_24 + * @arg @ref LL_RCC_RTC_HSE_DIV_25 + * @arg @ref LL_RCC_RTC_HSE_DIV_26 + * @arg @ref LL_RCC_RTC_HSE_DIV_27 + * @arg @ref LL_RCC_RTC_HSE_DIV_28 + * @arg @ref LL_RCC_RTC_HSE_DIV_29 + * @arg @ref LL_RCC_RTC_HSE_DIV_30 + * @arg @ref LL_RCC_RTC_HSE_DIV_31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetRTC_HSEPrescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_RTCPRE, Prescaler); +} + +/** + * @brief Get HSE Prescalers for RTC Clock + * @rmtoll CFGR RTCPRE LL_RCC_GetRTC_HSEPrescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_RTC_NOCLOCK + * @arg @ref LL_RCC_RTC_HSE_DIV_2 + * @arg @ref LL_RCC_RTC_HSE_DIV_3 + * @arg @ref LL_RCC_RTC_HSE_DIV_4 + * @arg @ref LL_RCC_RTC_HSE_DIV_5 + * @arg @ref LL_RCC_RTC_HSE_DIV_6 + * @arg @ref LL_RCC_RTC_HSE_DIV_7 + * @arg @ref LL_RCC_RTC_HSE_DIV_8 + * @arg @ref LL_RCC_RTC_HSE_DIV_9 + * @arg @ref LL_RCC_RTC_HSE_DIV_10 + * @arg @ref LL_RCC_RTC_HSE_DIV_11 + * @arg @ref LL_RCC_RTC_HSE_DIV_12 + * @arg @ref LL_RCC_RTC_HSE_DIV_13 + * @arg @ref LL_RCC_RTC_HSE_DIV_14 + * @arg @ref LL_RCC_RTC_HSE_DIV_15 + * @arg @ref LL_RCC_RTC_HSE_DIV_16 + * @arg @ref LL_RCC_RTC_HSE_DIV_17 + * @arg @ref LL_RCC_RTC_HSE_DIV_18 + * @arg @ref LL_RCC_RTC_HSE_DIV_19 + * @arg @ref LL_RCC_RTC_HSE_DIV_20 + * @arg @ref LL_RCC_RTC_HSE_DIV_21 + * @arg @ref LL_RCC_RTC_HSE_DIV_22 + * @arg @ref LL_RCC_RTC_HSE_DIV_23 + * @arg @ref LL_RCC_RTC_HSE_DIV_24 + * @arg @ref LL_RCC_RTC_HSE_DIV_25 + * @arg @ref LL_RCC_RTC_HSE_DIV_26 + * @arg @ref LL_RCC_RTC_HSE_DIV_27 + * @arg @ref LL_RCC_RTC_HSE_DIV_28 + * @arg @ref LL_RCC_RTC_HSE_DIV_29 + * @arg @ref LL_RCC_RTC_HSE_DIV_30 + * @arg @ref LL_RCC_RTC_HSE_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_GetRTC_HSEPrescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_RTCPRE)); +} + +/** + * @} + */ + +#if defined(RCC_DCKCFGR_TIMPRE) +/** @defgroup RCC_LL_EF_TIM_CLOCK_PRESCALER TIM + * @{ + */ + +/** + * @brief Set Timers Clock Prescalers + * @rmtoll DCKCFGR TIMPRE LL_RCC_SetTIMPrescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_TIM_PRESCALER_TWICE + * @arg @ref LL_RCC_TIM_PRESCALER_FOUR_TIMES + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetTIMPrescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_TIMPRE, Prescaler); +} + +/** + * @brief Get Timers Clock Prescalers + * @rmtoll DCKCFGR TIMPRE LL_RCC_GetTIMPrescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_TIM_PRESCALER_TWICE + * @arg @ref LL_RCC_TIM_PRESCALER_FOUR_TIMES + */ +__STATIC_INLINE uint32_t LL_RCC_GetTIMPrescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_TIMPRE)); +} + +/** + * @} + */ +#endif /* RCC_DCKCFGR_TIMPRE */ + +/** @defgroup RCC_LL_EF_PLL PLL + * @{ + */ + +/** + * @brief Enable PLL + * @rmtoll CR PLLON LL_RCC_PLL_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_PLLON); +} + +/** + * @brief Disable PLL + * @note Cannot be disabled if the PLL clock is used as the system clock + * @rmtoll CR PLLON LL_RCC_PLL_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON); +} + +/** + * @brief Check if PLL Ready + * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY)); +} + +/** + * @brief Configure PLL used for SYSCLK Domain + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLP can be written only when PLL is disabled + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLP LL_RCC_PLL_ConfigDomain_SYS + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLP_R This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLP_DIV_2 + * @arg @ref LL_RCC_PLLP_DIV_4 + * @arg @ref LL_RCC_PLLP_DIV_6 + * @arg @ref LL_RCC_PLLP_DIV_8 + * @arg @ref LL_RCC_PLLR_DIV_2 (*) + * @arg @ref LL_RCC_PLLR_DIV_3 (*) + * @arg @ref LL_RCC_PLLR_DIV_4 (*) + * @arg @ref LL_RCC_PLLR_DIV_5 (*) + * @arg @ref LL_RCC_PLLR_DIV_6 (*) + * @arg @ref LL_RCC_PLLR_DIV_7 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP_R) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos); + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLP, PLLP_R); +#if defined(RCC_PLLR_SYSCLK_SUPPORT) + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLR, PLLP_R); +#endif /* RCC_PLLR_SYSCLK_SUPPORT */ +} + +/** + * @brief Configure PLL used for 48Mhz domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ can be written only when PLL is disabled + * @note This can be selected for USB, RNG, SDIO + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_48M\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_48M\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_48M\n + * PLLCFGR PLLQ LL_RCC_PLL_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLQ_DIV_2 + * @arg @ref LL_RCC_PLLQ_DIV_3 + * @arg @ref LL_RCC_PLLQ_DIV_4 + * @arg @ref LL_RCC_PLLQ_DIV_5 + * @arg @ref LL_RCC_PLLQ_DIV_6 + * @arg @ref LL_RCC_PLLQ_DIV_7 + * @arg @ref LL_RCC_PLLQ_DIV_8 + * @arg @ref LL_RCC_PLLQ_DIV_9 + * @arg @ref LL_RCC_PLLQ_DIV_10 + * @arg @ref LL_RCC_PLLQ_DIV_11 + * @arg @ref LL_RCC_PLLQ_DIV_12 + * @arg @ref LL_RCC_PLLQ_DIV_13 + * @arg @ref LL_RCC_PLLQ_DIV_14 + * @arg @ref LL_RCC_PLLQ_DIV_15 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLQ, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLQ); +} + +#if defined(DSI) +/** + * @brief Configure PLL used for DSI clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for DSI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_DSI\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_DSI\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_DSI\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_DSI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_DSI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +} +#endif /* DSI */ + +#if defined(RCC_PLLR_I2S_CLKSOURCE_SUPPORT) +/** + * @brief Configure PLL used for I2S clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for I2S + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_I2S\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_I2S\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_I2S\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_I2S + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_I2S(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +} +#endif /* RCC_PLLR_I2S_CLKSOURCE_SUPPORT */ + +#if defined(SPDIFRX) +/** + * @brief Configure PLL used for SPDIFRX clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for SPDIFRX + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SPDIFRX + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SPDIFRX(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +} +#endif /* SPDIFRX */ + +#if defined(RCC_PLLCFGR_PLLR) +#if defined(SAI1) +/** + * @brief Configure PLL used for SAI clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for SAI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SAI\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SAI\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SAI\n + * DCKCFGR PLLDIVR LL_RCC_PLL_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @param PLLDIVR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +#if defined(RCC_DCKCFGR_PLLDIVR) +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR, + uint32_t PLLDIVR) +#else +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +#endif /* RCC_DCKCFGR_PLLDIVR */ +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +#if defined(RCC_DCKCFGR_PLLDIVR) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLDIVR, PLLDIVR); +#endif /* RCC_DCKCFGR_PLLDIVR */ +} +#endif /* SAI1 */ +#endif /* RCC_PLLCFGR_PLLR */ + +/** + * @brief Configure PLL clock source + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_SetMainSource + * @param PLLSource This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, PLLSource); +} + +/** + * @brief Get the oscillator used as PLL clock source. + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_GetMainSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); +} + +/** + * @brief Get Main PLL multiplication factor for VCO + * @rmtoll PLLCFGR PLLN LL_RCC_PLL_GetN + * @retval Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); +} + +/** + * @brief Get Main PLL division factor for PLLP + * @rmtoll PLLCFGR PLLP LL_RCC_PLL_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLP_DIV_2 + * @arg @ref LL_RCC_PLLP_DIV_4 + * @arg @ref LL_RCC_PLLP_DIV_6 + * @arg @ref LL_RCC_PLLP_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP)); +} + +/** + * @brief Get Main PLL division factor for PLLQ + * @note used for PLL48MCLK selected for USB, RNG, SDIO (48 MHz clock) + * @rmtoll PLLCFGR PLLQ LL_RCC_PLL_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLQ_DIV_2 + * @arg @ref LL_RCC_PLLQ_DIV_3 + * @arg @ref LL_RCC_PLLQ_DIV_4 + * @arg @ref LL_RCC_PLLQ_DIV_5 + * @arg @ref LL_RCC_PLLQ_DIV_6 + * @arg @ref LL_RCC_PLLQ_DIV_7 + * @arg @ref LL_RCC_PLLQ_DIV_8 + * @arg @ref LL_RCC_PLLQ_DIV_9 + * @arg @ref LL_RCC_PLLQ_DIV_10 + * @arg @ref LL_RCC_PLLQ_DIV_11 + * @arg @ref LL_RCC_PLLQ_DIV_12 + * @arg @ref LL_RCC_PLLQ_DIV_13 + * @arg @ref LL_RCC_PLLQ_DIV_14 + * @arg @ref LL_RCC_PLLQ_DIV_15 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ)); +} + +#if defined(RCC_PLLCFGR_PLLR) +/** + * @brief Get Main PLL division factor for PLLR + * @note used for PLLCLK (system clock) + * @rmtoll PLLCFGR PLLR LL_RCC_PLL_GetR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR)); +} +#endif /* RCC_PLLCFGR_PLLR */ + +#if defined(RCC_DCKCFGR_PLLDIVR) +/** + * @brief Get Main PLL division factor for PLLDIVR + * @note used for PLLSAICLK (SAI1 and SAI2 clock) + * @rmtoll DCKCFGR PLLDIVR LL_RCC_PLL_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLDIVR_DIV_1 + * @arg @ref LL_RCC_PLLDIVR_DIV_2 + * @arg @ref LL_RCC_PLLDIVR_DIV_3 + * @arg @ref LL_RCC_PLLDIVR_DIV_4 + * @arg @ref LL_RCC_PLLDIVR_DIV_5 + * @arg @ref LL_RCC_PLLDIVR_DIV_6 + * @arg @ref LL_RCC_PLLDIVR_DIV_7 + * @arg @ref LL_RCC_PLLDIVR_DIV_8 + * @arg @ref LL_RCC_PLLDIVR_DIV_9 + * @arg @ref LL_RCC_PLLDIVR_DIV_10 + * @arg @ref LL_RCC_PLLDIVR_DIV_11 + * @arg @ref LL_RCC_PLLDIVR_DIV_12 + * @arg @ref LL_RCC_PLLDIVR_DIV_13 + * @arg @ref LL_RCC_PLLDIVR_DIV_14 + * @arg @ref LL_RCC_PLLDIVR_DIV_15 + * @arg @ref LL_RCC_PLLDIVR_DIV_16 + * @arg @ref LL_RCC_PLLDIVR_DIV_17 + * @arg @ref LL_RCC_PLLDIVR_DIV_18 + * @arg @ref LL_RCC_PLLDIVR_DIV_19 + * @arg @ref LL_RCC_PLLDIVR_DIV_20 + * @arg @ref LL_RCC_PLLDIVR_DIV_21 + * @arg @ref LL_RCC_PLLDIVR_DIV_22 + * @arg @ref LL_RCC_PLLDIVR_DIV_23 + * @arg @ref LL_RCC_PLLDIVR_DIV_24 + * @arg @ref LL_RCC_PLLDIVR_DIV_25 + * @arg @ref LL_RCC_PLLDIVR_DIV_26 + * @arg @ref LL_RCC_PLLDIVR_DIV_27 + * @arg @ref LL_RCC_PLLDIVR_DIV_28 + * @arg @ref LL_RCC_PLLDIVR_DIV_29 + * @arg @ref LL_RCC_PLLDIVR_DIV_30 + * @arg @ref LL_RCC_PLLDIVR_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLDIVR)); +} +#endif /* RCC_DCKCFGR_PLLDIVR */ + +/** + * @brief Get Division factor for the main PLL and other PLL + * @rmtoll PLLCFGR PLLM LL_RCC_PLL_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); +} + +/** + * @brief Configure Spread Spectrum used for PLL + * @note These bits must be written before enabling PLL + * @rmtoll SSCGR MODPER LL_RCC_PLL_ConfigSpreadSpectrum\n + * SSCGR INCSTEP LL_RCC_PLL_ConfigSpreadSpectrum\n + * SSCGR SPREADSEL LL_RCC_PLL_ConfigSpreadSpectrum + * @param Mod Between Min_Data=0 and Max_Data=8191 + * @param Inc Between Min_Data=0 and Max_Data=32767 + * @param Sel This parameter can be one of the following values: + * @arg @ref LL_RCC_SPREAD_SELECT_CENTER + * @arg @ref LL_RCC_SPREAD_SELECT_DOWN + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigSpreadSpectrum(uint32_t Mod, uint32_t Inc, uint32_t Sel) +{ + MODIFY_REG(RCC->SSCGR, RCC_SSCGR_MODPER | RCC_SSCGR_INCSTEP | RCC_SSCGR_SPREADSEL, Mod | (Inc << RCC_SSCGR_INCSTEP_Pos) | Sel); +} + +/** + * @brief Get Spread Spectrum Modulation Period for PLL + * @rmtoll SSCGR MODPER LL_RCC_PLL_GetPeriodModulation + * @retval Between Min_Data=0 and Max_Data=8191 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetPeriodModulation(void) +{ + return (uint32_t)(READ_BIT(RCC->SSCGR, RCC_SSCGR_MODPER)); +} + +/** + * @brief Get Spread Spectrum Incrementation Step for PLL + * @note Must be written before enabling PLL + * @rmtoll SSCGR INCSTEP LL_RCC_PLL_GetStepIncrementation + * @retval Between Min_Data=0 and Max_Data=32767 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetStepIncrementation(void) +{ + return (uint32_t)(READ_BIT(RCC->SSCGR, RCC_SSCGR_INCSTEP) >> RCC_SSCGR_INCSTEP_Pos); +} + +/** + * @brief Get Spread Spectrum Selection for PLL + * @note Must be written before enabling PLL + * @rmtoll SSCGR SPREADSEL LL_RCC_PLL_GetSpreadSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SPREAD_SELECT_CENTER + * @arg @ref LL_RCC_SPREAD_SELECT_DOWN + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetSpreadSelection(void) +{ + return (uint32_t)(READ_BIT(RCC->SSCGR, RCC_SSCGR_SPREADSEL)); +} + +/** + * @brief Enable Spread Spectrum for PLL. + * @rmtoll SSCGR SSCGEN LL_RCC_PLL_SpreadSpectrum_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SpreadSpectrum_Enable(void) +{ + SET_BIT(RCC->SSCGR, RCC_SSCGR_SSCGEN); +} + +/** + * @brief Disable Spread Spectrum for PLL. + * @rmtoll SSCGR SSCGEN LL_RCC_PLL_SpreadSpectrum_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SpreadSpectrum_Disable(void) +{ + CLEAR_BIT(RCC->SSCGR, RCC_SSCGR_SSCGEN); +} + +/** + * @} + */ + +#if defined(RCC_PLLI2S_SUPPORT) +/** @defgroup RCC_LL_EF_PLLI2S PLLI2S + * @{ + */ + +/** + * @brief Enable PLLI2S + * @rmtoll CR PLLI2SON LL_RCC_PLLI2S_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_PLLI2SON); +} + +/** + * @brief Disable PLLI2S + * @rmtoll CR PLLI2SON LL_RCC_PLLI2S_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_PLLI2SON); +} + +/** + * @brief Check if PLLI2S Ready + * @rmtoll CR PLLI2SRDY LL_RCC_PLLI2S_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_PLLI2SRDY) == (RCC_CR_PLLI2SRDY)); +} + +#if (defined(RCC_DCKCFGR_PLLI2SDIVQ) || defined(RCC_DCKCFGR_PLLI2SDIVR)) +/** + * @brief Configure PLLI2S used for SAI domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ/PLLR can be written only when PLLI2S is disabled + * @note This can be selected for SAI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SQ LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SR LL_RCC_PLLI2S_ConfigDomain_SAI\n + * DCKCFGR PLLI2SDIVQ LL_RCC_PLLI2S_ConfigDomain_SAI\n + * DCKCFGR PLLI2SDIVR LL_RCC_PLLI2S_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLQ_R This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_7 (*) + * + * (*) value not defined in all devices. + * @param PLLDIVQ_R This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_31 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_32 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ_R, + uint32_t PLLDIVQ_R) +{ + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&RCC->PLLCFGR) + (Source & 0x80U))); + MODIFY_REG(*pReg, RCC_PLLCFGR_PLLSRC, (Source & (~0x80U))); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos); +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SQ, PLLQ_R); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVQ, PLLDIVQ_R); +#else + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SR, PLLQ_R); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVR, PLLDIVQ_R); +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ +} +#endif /* RCC_DCKCFGR_PLLI2SDIVQ && RCC_DCKCFGR_PLLI2SDIVR */ + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** + * @brief Configure PLLI2S used for 48Mhz domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ can be written only when PLLI2S is disabled + * @note This can be selected for RNG, USB, SDIO + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SQ LL_RCC_PLLI2S_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) +{ + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&RCC->PLLCFGR) + (Source & 0x80U))); + MODIFY_REG(*pReg, RCC_PLLCFGR_PLLSRC, (Source & (~0x80U))); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN | RCC_PLLI2SCFGR_PLLI2SQ, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos | PLLQ); +} +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ + +#if defined(SPDIFRX) +/** + * @brief Configure PLLI2S used for SPDIFRX domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLP can be written only when PLLI2S is disabled + * @note This can be selected for SPDIFRX + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLI2SCFGR PLLI2SP LL_RCC_PLLI2S_ConfigDomain_SPDIFRX + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SP_DIV_2 + * @arg @ref LL_RCC_PLLI2SP_DIV_4 + * @arg @ref LL_RCC_PLLI2SP_DIV_6 + * @arg @ref LL_RCC_PLLI2SP_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_SPDIFRX(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN | RCC_PLLI2SCFGR_PLLI2SP, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos | PLLP); +} +#endif /* SPDIFRX */ + +/** + * @brief Configure PLLI2S used for I2S1 domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLR can be written only when PLLI2S is disabled + * @note This can be selected for I2S + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SR LL_RCC_PLLI2S_ConfigDomain_I2S + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SR_DIV_2 + * @arg @ref LL_RCC_PLLI2SR_DIV_3 + * @arg @ref LL_RCC_PLLI2SR_DIV_4 + * @arg @ref LL_RCC_PLLI2SR_DIV_5 + * @arg @ref LL_RCC_PLLI2SR_DIV_6 + * @arg @ref LL_RCC_PLLI2SR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_I2S(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&RCC->PLLCFGR) + (Source & 0x80U))); + MODIFY_REG(*pReg, RCC_PLLCFGR_PLLSRC, (Source & (~0x80U))); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN | RCC_PLLI2SCFGR_PLLI2SR, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos | PLLR); +} + +/** + * @brief Get I2SPLL multiplication factor for VCO + * @rmtoll PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_GetN + * @retval Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetN(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); +} + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) +/** + * @brief Get I2SPLL division factor for PLLI2SQ + * @rmtoll PLLI2SCFGR PLLI2SQ LL_RCC_PLLI2S_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SQ)); +} +#endif /* RCC_PLLI2SCFGR_PLLI2SQ */ + +/** + * @brief Get I2SPLL division factor for PLLI2SR + * @note used for PLLI2SCLK (I2S clock) + * @rmtoll PLLI2SCFGR PLLI2SR LL_RCC_PLLI2S_GetR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SR_DIV_2 + * @arg @ref LL_RCC_PLLI2SR_DIV_3 + * @arg @ref LL_RCC_PLLI2SR_DIV_4 + * @arg @ref LL_RCC_PLLI2SR_DIV_5 + * @arg @ref LL_RCC_PLLI2SR_DIV_6 + * @arg @ref LL_RCC_PLLI2SR_DIV_7 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetR(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SR)); +} + +#if defined(RCC_PLLI2SCFGR_PLLI2SP) +/** + * @brief Get I2SPLL division factor for PLLI2SP + * @note used for PLLSPDIFRXCLK (SPDIFRX clock) + * @rmtoll PLLI2SCFGR PLLI2SP LL_RCC_PLLI2S_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SP_DIV_2 + * @arg @ref LL_RCC_PLLI2SP_DIV_4 + * @arg @ref LL_RCC_PLLI2SP_DIV_6 + * @arg @ref LL_RCC_PLLI2SP_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SP)); +} +#endif /* RCC_PLLI2SCFGR_PLLI2SP */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** + * @brief Get I2SPLL division factor for PLLI2SDIVQ + * @note used PLLSAICLK selected (SAI clock) + * @rmtoll DCKCFGR PLLI2SDIVQ LL_RCC_PLLI2S_GetDIVQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_32 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetDIVQ(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVQ)); +} +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVR) +/** + * @brief Get I2SPLL division factor for PLLI2SDIVR + * @note used PLLSAICLK selected (SAI clock) + * @rmtoll DCKCFGR PLLI2SDIVR LL_RCC_PLLI2S_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_1 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_2 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_3 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_4 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_5 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_6 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_7 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_8 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_9 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_10 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_11 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_12 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_13 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_14 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_15 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_16 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_17 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_18 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_19 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_20 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_21 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_22 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_23 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_24 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_25 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_26 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_27 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_28 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_29 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_30 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVR)); +} +#endif /* RCC_DCKCFGR_PLLI2SDIVR */ + +/** + * @brief Get division factor for PLLI2S input clock + * @rmtoll PLLCFGR PLLM LL_RCC_PLLI2S_GetDivider\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetDivider(void) +{ +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM)); +#else + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ +} + +/** + * @brief Get the oscillator used as PLL clock source. + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_GetMainSource\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_GetMainSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetMainSource(void) +{ +#if defined(RCC_PLLI2SCFGR_PLLI2SSRC) + uint32_t pllsrc = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC); + uint32_t plli2sssrc0 = READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SSRC); + uint32_t plli2sssrc1 = READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SSRC) >> 15U; + return (uint32_t)(pllsrc | plli2sssrc0 | plli2sssrc1); +#else + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); +#endif /* RCC_PLLI2SCFGR_PLLI2SSRC */ +} + +/** + * @} + */ +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** @defgroup RCC_LL_EF_PLLSAI PLLSAI + * @{ + */ + +/** + * @brief Enable PLLSAI + * @rmtoll CR PLLSAION LL_RCC_PLLSAI_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_PLLSAION); +} + +/** + * @brief Disable PLLSAI + * @rmtoll CR PLLSAION LL_RCC_PLLSAI_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_PLLSAION); +} + +/** + * @brief Check if PLLSAI Ready + * @rmtoll CR PLLSAIRDY LL_RCC_PLLSAI_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_PLLSAIRDY) == (RCC_CR_PLLSAIRDY)); +} + +/** + * @brief Configure PLLSAI used for SAI domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ can be written only when PLLSAI is disabled + * @note This can be selected for SAI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLSAICFGR PLLSAIM LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLSAICFGR PLLSAIQ LL_RCC_PLLSAI_ConfigDomain_SAI\n + * DCKCFGR PLLSAIDIVQ LL_RCC_PLLSAI_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param PLLN Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIQ_DIV_15 + * @param PLLDIVQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_32 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ, + uint32_t PLLDIVQ) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); +#if defined(RCC_PLLSAICFGR_PLLSAIM) + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIQ, PLLN << RCC_PLLSAICFGR_PLLSAIN_Pos | PLLQ); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVQ, PLLDIVQ); +} + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** + * @brief Configure PLLSAI used for 48Mhz domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLP can be written only when PLLSAI is disabled + * @note This can be selected for USB, RNG, SDIO + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLCFGR PLLM LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLSAICFGR PLLSAIM LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLSAICFGR PLLSAIP LL_RCC_PLLSAI_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIP_DIV_2 + * @arg @ref LL_RCC_PLLSAIP_DIV_4 + * @arg @ref LL_RCC_PLLSAIP_DIV_6 + * @arg @ref LL_RCC_PLLSAIP_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); +#if defined(RCC_PLLSAICFGR_PLLSAIM) + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIP, PLLN << RCC_PLLSAICFGR_PLLSAIN_Pos | PLLP); +} +#endif /* RCC_PLLSAICFGR_PLLSAIP */ + +#if defined(LTDC) +/** + * @brief Configure PLLSAI used for LTDC domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLR can be written only when PLLSAI is disabled + * @note This can be selected for LTDC + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * PLLCFGR PLLM LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * PLLSAICFGR PLLSAIR LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * DCKCFGR PLLSAIDIVR LL_RCC_PLLSAI_ConfigDomain_LTDC + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param PLLN Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIR_DIV_2 + * @arg @ref LL_RCC_PLLSAIR_DIV_3 + * @arg @ref LL_RCC_PLLSAIR_DIV_4 + * @arg @ref LL_RCC_PLLSAIR_DIV_5 + * @arg @ref LL_RCC_PLLSAIR_DIV_6 + * @arg @ref LL_RCC_PLLSAIR_DIV_7 + * @param PLLDIVR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_ConfigDomain_LTDC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR, + uint32_t PLLDIVR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIR, PLLN << RCC_PLLSAICFGR_PLLSAIN_Pos | PLLR); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR, PLLDIVR); +} +#endif /* LTDC */ + +/** + * @brief Get division factor for PLLSAI input clock + * @rmtoll PLLCFGR PLLM LL_RCC_PLLSAI_GetDivider\n + * PLLSAICFGR PLLSAIM LL_RCC_PLLSAI_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetDivider(void) +{ +#if defined(RCC_PLLSAICFGR_PLLSAIM) + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIM)); +#else + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ +} + +/** + * @brief Get SAIPLL multiplication factor for VCO + * @rmtoll PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_GetN + * @retval Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetN(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); +} + +/** + * @brief Get SAIPLL division factor for PLLSAIQ + * @rmtoll PLLSAICFGR PLLSAIQ LL_RCC_PLLSAI_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIQ_DIV_15 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIQ)); +} + +#if defined(RCC_PLLSAICFGR_PLLSAIR) +/** + * @brief Get SAIPLL division factor for PLLSAIR + * @note used for PLLSAICLK (SAI clock) + * @rmtoll PLLSAICFGR PLLSAIR LL_RCC_PLLSAI_GetR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIR_DIV_2 + * @arg @ref LL_RCC_PLLSAIR_DIV_3 + * @arg @ref LL_RCC_PLLSAIR_DIV_4 + * @arg @ref LL_RCC_PLLSAIR_DIV_5 + * @arg @ref LL_RCC_PLLSAIR_DIV_6 + * @arg @ref LL_RCC_PLLSAIR_DIV_7 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetR(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIR)); +} +#endif /* RCC_PLLSAICFGR_PLLSAIR */ + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** + * @brief Get SAIPLL division factor for PLLSAIP + * @note used for PLL48MCLK (48M domain clock) + * @rmtoll PLLSAICFGR PLLSAIP LL_RCC_PLLSAI_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIP_DIV_2 + * @arg @ref LL_RCC_PLLSAIP_DIV_4 + * @arg @ref LL_RCC_PLLSAIP_DIV_6 + * @arg @ref LL_RCC_PLLSAIP_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIP)); +} +#endif /* RCC_PLLSAICFGR_PLLSAIP */ + +/** + * @brief Get SAIPLL division factor for PLLSAIDIVQ + * @note used PLLSAICLK selected (SAI clock) + * @rmtoll DCKCFGR PLLSAIDIVQ LL_RCC_PLLSAI_GetDIVQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_32 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetDIVQ(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVQ)); +} + +#if defined(RCC_DCKCFGR_PLLSAIDIVR) +/** + * @brief Get SAIPLL division factor for PLLSAIDIVR + * @note used for LTDC domain clock + * @rmtoll DCKCFGR PLLSAIDIVR LL_RCC_PLLSAI_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR)); +} +#endif /* RCC_DCKCFGR_PLLSAIDIVR */ + +/** + * @} + */ +#endif /* RCC_PLLSAI_SUPPORT */ + +/** @defgroup RCC_LL_EF_FLAG_Management FLAG Management + * @{ + */ + +/** + * @brief Clear LSI ready interrupt flag + * @rmtoll CIR LSIRDYC LL_RCC_ClearFlag_LSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC); +} + +/** + * @brief Clear LSE ready interrupt flag + * @rmtoll CIR LSERDYC LL_RCC_ClearFlag_LSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSERDYC); +} + +/** + * @brief Clear HSI ready interrupt flag + * @rmtoll CIR HSIRDYC LL_RCC_ClearFlag_HSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC); +} + +/** + * @brief Clear HSE ready interrupt flag + * @rmtoll CIR HSERDYC LL_RCC_ClearFlag_HSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSERDYC); +} + +/** + * @brief Clear PLL ready interrupt flag + * @rmtoll CIR PLLRDYC LL_RCC_ClearFlag_PLLRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Clear PLLI2S ready interrupt flag + * @rmtoll CIR PLLI2SRDYC LL_RCC_ClearFlag_PLLI2SRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_PLLI2SRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYC); +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Clear PLLSAI ready interrupt flag + * @rmtoll CIR PLLSAIRDYC LL_RCC_ClearFlag_PLLSAIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_PLLSAIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYC); +} + +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Clear Clock security system interrupt flag + * @rmtoll CIR CSSC LL_RCC_ClearFlag_HSECSS + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_CSSC); +} + +/** + * @brief Check if LSI ready interrupt occurred or not + * @rmtoll CIR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF)); +} + +/** + * @brief Check if LSE ready interrupt occurred or not + * @rmtoll CIR LSERDYF LL_RCC_IsActiveFlag_LSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF)); +} + +/** + * @brief Check if HSI ready interrupt occurred or not + * @rmtoll CIR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF)); +} + +/** + * @brief Check if HSE ready interrupt occurred or not + * @rmtoll CIR HSERDYF LL_RCC_IsActiveFlag_HSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF)); +} + +/** + * @brief Check if PLL ready interrupt occurred or not + * @rmtoll CIR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF)); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Check if PLLI2S ready interrupt occurred or not + * @rmtoll CIR PLLI2SRDYF LL_RCC_IsActiveFlag_PLLI2SRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLI2SRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYF) == (RCC_CIR_PLLI2SRDYF)); +} +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Check if PLLSAI ready interrupt occurred or not + * @rmtoll CIR PLLSAIRDYF LL_RCC_IsActiveFlag_PLLSAIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLSAIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYF) == (RCC_CIR_PLLSAIRDYF)); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Check if Clock security system interrupt occurred or not + * @rmtoll CIR CSSF LL_RCC_IsActiveFlag_HSECSS + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF)); +} + +/** + * @brief Check if RCC flag Independent Watchdog reset is set or not. + * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF)); +} + +/** + * @brief Check if RCC flag Low Power reset is set or not. + * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF)); +} + +/** + * @brief Check if RCC flag Pin reset is set or not. + * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF)); +} + +/** + * @brief Check if RCC flag POR/PDR reset is set or not. + * @rmtoll CSR PORRSTF LL_RCC_IsActiveFlag_PORRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF)); +} + +/** + * @brief Check if RCC flag Software reset is set or not. + * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)); +} + +/** + * @brief Check if RCC flag Window Watchdog reset is set or not. + * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF)); +} + +#if defined(RCC_CSR_BORRSTF) +/** + * @brief Check if RCC flag BOR reset is set or not. + * @rmtoll CSR BORRSTF LL_RCC_IsActiveFlag_BORRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_BORRSTF) == (RCC_CSR_BORRSTF)); +} +#endif /* RCC_CSR_BORRSTF */ + +/** + * @brief Set RMVF bit to clear the reset flags. + * @rmtoll CSR RMVF LL_RCC_ClearResetFlags + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearResetFlags(void) +{ + SET_BIT(RCC->CSR, RCC_CSR_RMVF); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_IT_Management IT Management + * @{ + */ + +/** + * @brief Enable LSI ready interrupt + * @rmtoll CIR LSIRDYIE LL_RCC_EnableIT_LSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE); +} + +/** + * @brief Enable LSE ready interrupt + * @rmtoll CIR LSERDYIE LL_RCC_EnableIT_LSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE); +} + +/** + * @brief Enable HSI ready interrupt + * @rmtoll CIR HSIRDYIE LL_RCC_EnableIT_HSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE); +} + +/** + * @brief Enable HSE ready interrupt + * @rmtoll CIR HSERDYIE LL_RCC_EnableIT_HSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE); +} + +/** + * @brief Enable PLL ready interrupt + * @rmtoll CIR PLLRDYIE LL_RCC_EnableIT_PLLRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Enable PLLI2S ready interrupt + * @rmtoll CIR PLLI2SRDYIE LL_RCC_EnableIT_PLLI2SRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_PLLI2SRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE); +} +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Enable PLLSAI ready interrupt + * @rmtoll CIR PLLSAIRDYIE LL_RCC_EnableIT_PLLSAIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_PLLSAIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Disable LSI ready interrupt + * @rmtoll CIR LSIRDYIE LL_RCC_DisableIT_LSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE); +} + +/** + * @brief Disable LSE ready interrupt + * @rmtoll CIR LSERDYIE LL_RCC_DisableIT_LSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE); +} + +/** + * @brief Disable HSI ready interrupt + * @rmtoll CIR HSIRDYIE LL_RCC_DisableIT_HSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE); +} + +/** + * @brief Disable HSE ready interrupt + * @rmtoll CIR HSERDYIE LL_RCC_DisableIT_HSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE); +} + +/** + * @brief Disable PLL ready interrupt + * @rmtoll CIR PLLRDYIE LL_RCC_DisableIT_PLLRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Disable PLLI2S ready interrupt + * @rmtoll CIR PLLI2SRDYIE LL_RCC_DisableIT_PLLI2SRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_PLLI2SRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE); +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Disable PLLSAI ready interrupt + * @rmtoll CIR PLLSAIRDYIE LL_RCC_DisableIT_PLLSAIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_PLLSAIRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Checks if LSI ready interrupt source is enabled or disabled. + * @rmtoll CIR LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE)); +} + +/** + * @brief Checks if LSE ready interrupt source is enabled or disabled. + * @rmtoll CIR LSERDYIE LL_RCC_IsEnabledIT_LSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE)); +} + +/** + * @brief Checks if HSI ready interrupt source is enabled or disabled. + * @rmtoll CIR HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE)); +} + +/** + * @brief Checks if HSE ready interrupt source is enabled or disabled. + * @rmtoll CIR HSERDYIE LL_RCC_IsEnabledIT_HSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE)); +} + +/** + * @brief Checks if PLL ready interrupt source is enabled or disabled. + * @rmtoll CIR PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE)); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Checks if PLLI2S ready interrupt source is enabled or disabled. + * @rmtoll CIR PLLI2SRDYIE LL_RCC_IsEnabledIT_PLLI2SRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLI2SRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE) == (RCC_CIR_PLLI2SRDYIE)); +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Checks if PLLSAI ready interrupt source is enabled or disabled. + * @rmtoll CIR PLLSAIRDYIE LL_RCC_IsEnabledIT_PLLSAIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLSAIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE) == (RCC_CIR_PLLSAIRDYIE)); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_EF_Init De-initialization function + * @{ + */ +ErrorStatus LL_RCC_DeInit(void); +/** + * @} + */ + +/** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions + * @{ + */ +void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks); +#if defined(FMPI2C1) +uint32_t LL_RCC_GetFMPI2CClockFreq(uint32_t FMPI2CxSource); +#endif /* FMPI2C1 */ +#if defined(LPTIM1) +uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource); +#endif /* LPTIM1 */ +#if defined(SAI1) +uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource); +#endif /* SAI1 */ +#if defined(SDIO) +uint32_t LL_RCC_GetSDIOClockFreq(uint32_t SDIOxSource); +#endif /* SDIO */ +#if defined(RNG) +uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource); +#endif /* RNG */ +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource); +#endif /* USB_OTG_FS || USB_OTG_HS */ +#if defined(DFSDM1_Channel0) +uint32_t LL_RCC_GetDFSDMClockFreq(uint32_t DFSDMxSource); +uint32_t LL_RCC_GetDFSDMAudioClockFreq(uint32_t DFSDMxSource); +#endif /* DFSDM1_Channel0 */ +uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource); +#if defined(CEC) +uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource); +#endif /* CEC */ +#if defined(LTDC) +uint32_t LL_RCC_GetLTDCClockFreq(uint32_t LTDCxSource); +#endif /* LTDC */ +#if defined(SPDIFRX) +uint32_t LL_RCC_GetSPDIFRXClockFreq(uint32_t SPDIFRXxSource); +#endif /* SPDIFRX */ +#if defined(DSI) +uint32_t LL_RCC_GetDSIClockFreq(uint32_t DSIxSource); +#endif /* DSI */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(RCC) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_RCC_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h new file mode 100644 index 00000000..84ea5c4d --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h @@ -0,0 +1,1711 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_system.h + * @author MCD Application Team + * @brief Header file of SYSTEM LL module. + * + ****************************************************************************** + * @attention + * + *Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The LL SYSTEM driver contains a set of generic APIs that can be + used by user: + (+) Some of the FLASH features need to be handled in the SYSTEM file. + (+) Access to DBGCMU registers + (+) Access to SYSCFG registers + + @endverbatim + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_SYSTEM_H +#define __STM32F4xx_LL_SYSTEM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (FLASH) || defined (SYSCFG) || defined (DBGMCU) + +/** @defgroup SYSTEM_LL SYSTEM + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup SYSTEM_LL_Private_Constants SYSTEM Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup SYSTEM_LL_Exported_Constants SYSTEM Exported Constants + * @{ + */ + +/** @defgroup SYSTEM_LL_EC_REMAP SYSCFG REMAP +* @{ +*/ +#define LL_SYSCFG_REMAP_FLASH (uint32_t)0x00000000 /*!< Main Flash memory mapped at 0x00000000 */ +#define LL_SYSCFG_REMAP_SYSTEMFLASH SYSCFG_MEMRMP_MEM_MODE_0 /*!< System Flash memory mapped at 0x00000000 */ +#if defined(FSMC_Bank1) +#define LL_SYSCFG_REMAP_FSMC SYSCFG_MEMRMP_MEM_MODE_1 /*!< FSMC(NOR/PSRAM 1 and 2) mapped at 0x00000000 */ +#endif /* FSMC_Bank1 */ +#if defined(FMC_Bank1) +#define LL_SYSCFG_REMAP_FMC SYSCFG_MEMRMP_MEM_MODE_1 /*!< FMC(NOR/PSRAM 1 and 2) mapped at 0x00000000 */ +#define LL_SYSCFG_REMAP_SDRAM SYSCFG_MEMRMP_MEM_MODE_2 /*!< FMC/SDRAM mapped at 0x00000000 */ +#endif /* FMC_Bank1 */ +#define LL_SYSCFG_REMAP_SRAM (SYSCFG_MEMRMP_MEM_MODE_1 | SYSCFG_MEMRMP_MEM_MODE_0) /*!< SRAM1 mapped at 0x00000000 */ + +/** + * @} + */ + +#if defined(SYSCFG_PMC_MII_RMII_SEL) + /** @defgroup SYSTEM_LL_EC_PMC SYSCFG PMC +* @{ +*/ +#define LL_SYSCFG_PMC_ETHMII (uint32_t)0x00000000 /*!< ETH Media MII interface */ +#define LL_SYSCFG_PMC_ETHRMII (uint32_t)SYSCFG_PMC_MII_RMII_SEL /*!< ETH Media RMII interface */ + +/** + * @} + */ +#endif /* SYSCFG_PMC_MII_RMII_SEL */ + + + +#if defined(SYSCFG_MEMRMP_UFB_MODE) +/** @defgroup SYSTEM_LL_EC_BANKMODE SYSCFG BANK MODE + * @{ + */ +#define LL_SYSCFG_BANKMODE_BANK1 (uint32_t)0x00000000 /*!< Flash Bank 1 base address mapped at 0x0800 0000 (AXI) and 0x0020 0000 (TCM) + and Flash Bank 2 base address mapped at 0x0810 0000 (AXI) and 0x0030 0000 (TCM)*/ +#define LL_SYSCFG_BANKMODE_BANK2 SYSCFG_MEMRMP_UFB_MODE /*!< Flash Bank 2 base address mapped at 0x0800 0000 (AXI) and 0x0020 0000(TCM) + and Flash Bank 1 base address mapped at 0x0810 0000 (AXI) and 0x0030 0000(TCM) */ +/** + * @} + */ +#endif /* SYSCFG_MEMRMP_UFB_MODE */ +/** @defgroup SYSTEM_LL_EC_I2C_FASTMODEPLUS SYSCFG I2C FASTMODEPLUS + * @{ + */ +#if defined(SYSCFG_CFGR_FMPI2C1_SCL) +#define LL_SYSCFG_I2C_FASTMODEPLUS_SCL SYSCFG_CFGR_FMPI2C1_SCL /*!< Enable Fast Mode Plus on FMPI2C_SCL pin */ +#define LL_SYSCFG_I2C_FASTMODEPLUS_SDA SYSCFG_CFGR_FMPI2C1_SDA /*!< Enable Fast Mode Plus on FMPI2C_SDA pin*/ +#endif /* SYSCFG_CFGR_FMPI2C1_SCL */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_EXTI_PORT SYSCFG EXTI PORT + * @{ + */ +#define LL_SYSCFG_EXTI_PORTA (uint32_t)0 /*!< EXTI PORT A */ +#define LL_SYSCFG_EXTI_PORTB (uint32_t)1 /*!< EXTI PORT B */ +#define LL_SYSCFG_EXTI_PORTC (uint32_t)2 /*!< EXTI PORT C */ +#define LL_SYSCFG_EXTI_PORTD (uint32_t)3 /*!< EXTI PORT D */ +#define LL_SYSCFG_EXTI_PORTE (uint32_t)4 /*!< EXTI PORT E */ +#if defined(GPIOF) +#define LL_SYSCFG_EXTI_PORTF (uint32_t)5 /*!< EXTI PORT F */ +#endif /* GPIOF */ +#if defined(GPIOG) +#define LL_SYSCFG_EXTI_PORTG (uint32_t)6 /*!< EXTI PORT G */ +#endif /* GPIOG */ +#define LL_SYSCFG_EXTI_PORTH (uint32_t)7 /*!< EXTI PORT H */ +#if defined(GPIOI) +#define LL_SYSCFG_EXTI_PORTI (uint32_t)8 /*!< EXTI PORT I */ +#endif /* GPIOI */ +#if defined(GPIOJ) +#define LL_SYSCFG_EXTI_PORTJ (uint32_t)9 /*!< EXTI PORT J */ +#endif /* GPIOJ */ +#if defined(GPIOK) +#define LL_SYSCFG_EXTI_PORTK (uint32_t)10 /*!< EXTI PORT k */ +#endif /* GPIOK */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_EXTI_LINE SYSCFG EXTI LINE + * @{ + */ +#define LL_SYSCFG_EXTI_LINE0 (uint32_t)(0x000FU << 16 | 0) /*!< EXTI_POSITION_0 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE1 (uint32_t)(0x00F0U << 16 | 0) /*!< EXTI_POSITION_4 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE2 (uint32_t)(0x0F00U << 16 | 0) /*!< EXTI_POSITION_8 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE3 (uint32_t)(0xF000U << 16 | 0) /*!< EXTI_POSITION_12 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE4 (uint32_t)(0x000FU << 16 | 1) /*!< EXTI_POSITION_0 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE5 (uint32_t)(0x00F0U << 16 | 1) /*!< EXTI_POSITION_4 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE6 (uint32_t)(0x0F00U << 16 | 1) /*!< EXTI_POSITION_8 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE7 (uint32_t)(0xF000U << 16 | 1) /*!< EXTI_POSITION_12 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE8 (uint32_t)(0x000FU << 16 | 2) /*!< EXTI_POSITION_0 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE9 (uint32_t)(0x00F0U << 16 | 2) /*!< EXTI_POSITION_4 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE10 (uint32_t)(0x0F00U << 16 | 2) /*!< EXTI_POSITION_8 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE11 (uint32_t)(0xF000U << 16 | 2) /*!< EXTI_POSITION_12 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE12 (uint32_t)(0x000FU << 16 | 3) /*!< EXTI_POSITION_0 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE13 (uint32_t)(0x00F0U << 16 | 3) /*!< EXTI_POSITION_4 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE14 (uint32_t)(0x0F00U << 16 | 3) /*!< EXTI_POSITION_8 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE15 (uint32_t)(0xF000U << 16 | 3) /*!< EXTI_POSITION_12 | EXTICR[3] */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_TIMBREAK SYSCFG TIMER BREAK + * @{ + */ +#if defined(SYSCFG_CFGR2_LOCKUP_LOCK) +#define LL_SYSCFG_TIMBREAK_LOCKUP SYSCFG_CFGR2_LOCKUP_LOCK /*!< Enables and locks the LOCKUP output of CortexM4 + with Break Input of TIM1/8 */ +#define LL_SYSCFG_TIMBREAK_PVD SYSCFG_CFGR2_PVD_LOCK /*!< Enables and locks the PVD connection with TIM1/8 Break Input + and also the PVDE and PLS bits of the Power Control Interface */ +#endif /* SYSCFG_CFGR2_CLL */ +/** + * @} + */ + +#if defined(SYSCFG_MCHDLYCR_BSCKSEL) +/** @defgroup SYSTEM_LL_DFSDM_BitStream_ClockSource SYSCFG MCHDLY BCKKSEL + * @{ + */ +#define LL_SYSCFG_BITSTREAM_CLOCK_TIM2OC1 (uint32_t)0x00000000 +#define LL_SYSCFG_BITSTREAM_CLOCK_DFSDM2 SYSCFG_MCHDLYCR_BSCKSEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM_MCHDLYEN SYSCFG MCHDLY MCHDLYEN + * @{ + */ +#define LL_SYSCFG_DFSDM1_MCHDLYEN SYSCFG_MCHDLYCR_MCHDLY1EN +#define LL_SYSCFG_DFSDM2_MCHDLYEN SYSCFG_MCHDLYCR_MCHDLY2EN +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM_DataIn0_Source SYSCFG MCHDLY DFSDMD0SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_DataIn0 SYSCFG_MCHDLYCR_DFSDM1D0SEL +#define LL_SYSCFG_DFSDM2_DataIn0 SYSCFG_MCHDLYCR_DFSDM2D0SEL + +#define LL_SYSCFG_DFSDM1_DataIn0_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D0SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM1_DataIn0_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D0SEL << 16) | SYSCFG_MCHDLYCR_DFSDM1D0SEL) +#define LL_SYSCFG_DFSDM2_DataIn0_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D0SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM2_DataIn0_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D0SEL << 16) | SYSCFG_MCHDLYCR_DFSDM2D0SEL) +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM_DataIn2_Source SYSCFG MCHDLY DFSDMD2SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_DataIn2 SYSCFG_MCHDLYCR_DFSDM1D2SEL +#define LL_SYSCFG_DFSDM2_DataIn2 SYSCFG_MCHDLYCR_DFSDM2D2SEL + +#define LL_SYSCFG_DFSDM1_DataIn2_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D2SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM1_DataIn2_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D2SEL << 16) | SYSCFG_MCHDLYCR_DFSDM1D2SEL) +#define LL_SYSCFG_DFSDM2_DataIn2_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D2SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM2_DataIn2_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D2SEL << 16) | SYSCFG_MCHDLYCR_DFSDM2D2SEL) +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_TIM4OC2_BitstreamDistribution SYSCFG MCHDLY DFSDM1CK02SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN0 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN2 SYSCFG_MCHDLYCR_DFSDM1CK02SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_TIM4OC1_BitstreamDistribution SYSCFG MCHDLY DFSDM1CK13SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN1 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN3 SYSCFG_MCHDLYCR_DFSDM1CK13SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_CLKIN_SourceSelection SYSCFG MCHDLY DFSDMCFG + * @{ + */ +#define LL_SYSCFG_DFSDM1_CKIN_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_CKIN_DM SYSCFG_MCHDLYCR_DFSDM1CFG +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_CLKOUT_SourceSelection SYSCFG MCHDLY DFSDM1CKOSEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_CKOUT (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_CKOUT_M27 SYSCFG_MCHDLYCR_DFSDM1CKOSEL +/** + * @} + */ + +/** @defgroup SYSTEM_LL_DFSDM2_DataIn4_SourceSelection SYSCFG MCHDLY DFSDM2D4SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_DataIn4_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_DataIn4_DM SYSCFG_MCHDLYCR_DFSDM2D4SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_DataIn6_SourceSelection SYSCFG MCHDLY DFSDM2D6SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_DataIn6_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_DataIn6_DM SYSCFG_MCHDLYCR_DFSDM2D6SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC4_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK04SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN0 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN4 SYSCFG_MCHDLYCR_DFSDM2CK04SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC3_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK15SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN1 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN5 SYSCFG_MCHDLYCR_DFSDM2CK15SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC2_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK26SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN2 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN6 SYSCFG_MCHDLYCR_DFSDM2CK26SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC1_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK37SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN3 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN7 SYSCFG_MCHDLYCR_DFSDM2CK37SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_CLKIN_SourceSelection SYSCFG MCHDLY DFSDM2CFG + * @{ + */ +#define LL_SYSCFG_DFSDM2_CKIN_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_CKIN_DM SYSCFG_MCHDLYCR_DFSDM2CFG +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_CLKOUT_SourceSelection SYSCFG MCHDLY DFSDM2CKOSEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_CKOUT (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_CKOUT_M27 SYSCFG_MCHDLYCR_DFSDM2CKOSEL +/** + * @} + */ +#endif /* SYSCFG_MCHDLYCR_BSCKSEL */ + +/** @defgroup SYSTEM_LL_EC_TRACE DBGMCU TRACE Pin Assignment + * @{ + */ +#define LL_DBGMCU_TRACE_NONE 0x00000000U /*!< TRACE pins not assigned (default state) */ +#define LL_DBGMCU_TRACE_ASYNCH DBGMCU_CR_TRACE_IOEN /*!< TRACE pin assignment for Asynchronous Mode */ +#define LL_DBGMCU_TRACE_SYNCH_SIZE1 (DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE_0) /*!< TRACE pin assignment for Synchronous Mode with a TRACEDATA size of 1 */ +#define LL_DBGMCU_TRACE_SYNCH_SIZE2 (DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE_1) /*!< TRACE pin assignment for Synchronous Mode with a TRACEDATA size of 2 */ +#define LL_DBGMCU_TRACE_SYNCH_SIZE4 (DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE) /*!< TRACE pin assignment for Synchronous Mode with a TRACEDATA size of 4 */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_APB1_GRP1_STOP_IP DBGMCU APB1 GRP1 STOP IP + * @{ + */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM2_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM2_STOP DBGMCU_APB1_FZ_DBG_TIM2_STOP /*!< TIM2 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM2_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM3_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM3_STOP DBGMCU_APB1_FZ_DBG_TIM3_STOP /*!< TIM3 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM3_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM4_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM4_STOP DBGMCU_APB1_FZ_DBG_TIM4_STOP /*!< TIM4 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM4_STOP */ +#define LL_DBGMCU_APB1_GRP1_TIM5_STOP DBGMCU_APB1_FZ_DBG_TIM5_STOP /*!< TIM5 counter stopped when core is halted */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM6_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM6_STOP DBGMCU_APB1_FZ_DBG_TIM6_STOP /*!< TIM6 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM6_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM7_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM7_STOP DBGMCU_APB1_FZ_DBG_TIM7_STOP /*!< TIM7 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM7_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM12_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM12_STOP DBGMCU_APB1_FZ_DBG_TIM12_STOP /*!< TIM12 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM12_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM13_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM13_STOP DBGMCU_APB1_FZ_DBG_TIM13_STOP /*!< TIM13 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM13_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM14_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM14_STOP DBGMCU_APB1_FZ_DBG_TIM14_STOP /*!< TIM14 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM14_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_LPTIM_STOP) +#define LL_DBGMCU_APB1_GRP1_LPTIM_STOP DBGMCU_APB1_FZ_DBG_LPTIM_STOP /*!< LPTIM counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_LPTIM_STOP */ +#define LL_DBGMCU_APB1_GRP1_RTC_STOP DBGMCU_APB1_FZ_DBG_RTC_STOP /*!< RTC counter stopped when core is halted */ +#define LL_DBGMCU_APB1_GRP1_WWDG_STOP DBGMCU_APB1_FZ_DBG_WWDG_STOP /*!< Debug Window Watchdog stopped when Core is halted */ +#define LL_DBGMCU_APB1_GRP1_IWDG_STOP DBGMCU_APB1_FZ_DBG_IWDG_STOP /*!< Debug Independent Watchdog stopped when Core is halted */ +#define LL_DBGMCU_APB1_GRP1_I2C1_STOP DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT /*!< I2C1 SMBUS timeout mode stopped when Core is halted */ +#define LL_DBGMCU_APB1_GRP1_I2C2_STOP DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT /*!< I2C2 SMBUS timeout mode stopped when Core is halted */ +#if defined(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT) +#define LL_DBGMCU_APB1_GRP1_I2C3_STOP DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT /*!< I2C3 SMBUS timeout mode stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT */ +#if defined(DBGMCU_APB1_FZ_DBG_I2C4_SMBUS_TIMEOUT) +#define LL_DBGMCU_APB1_GRP1_I2C4_STOP DBGMCU_APB1_FZ_DBG_I2C4_SMBUS_TIMEOUT /*!< I2C4 SMBUS timeout mode stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_I2C4_SMBUS_TIMEOUT */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN1_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN1_STOP DBGMCU_APB1_FZ_DBG_CAN1_STOP /*!< CAN1 debug stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_CAN1_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN2_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN2_STOP DBGMCU_APB1_FZ_DBG_CAN2_STOP /*!< CAN2 debug stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_CAN2_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN3_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN3_STOP DBGMCU_APB1_FZ_DBG_CAN3_STOP /*!< CAN3 debug stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_CAN3_STOP */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_APB2_GRP1_STOP_IP DBGMCU APB2 GRP1 STOP IP + * @{ + */ +#define LL_DBGMCU_APB2_GRP1_TIM1_STOP DBGMCU_APB2_FZ_DBG_TIM1_STOP /*!< TIM1 counter stopped when core is halted */ +#if defined(DBGMCU_APB2_FZ_DBG_TIM8_STOP) +#define LL_DBGMCU_APB2_GRP1_TIM8_STOP DBGMCU_APB2_FZ_DBG_TIM8_STOP /*!< TIM8 counter stopped when core is halted */ +#endif /* DBGMCU_APB2_FZ_DBG_TIM8_STOP */ +#define LL_DBGMCU_APB2_GRP1_TIM9_STOP DBGMCU_APB2_FZ_DBG_TIM9_STOP /*!< TIM9 counter stopped when core is halted */ +#if defined(DBGMCU_APB2_FZ_DBG_TIM10_STOP) +#define LL_DBGMCU_APB2_GRP1_TIM10_STOP DBGMCU_APB2_FZ_DBG_TIM10_STOP /*!< TIM10 counter stopped when core is halted */ +#endif /* DBGMCU_APB2_FZ_DBG_TIM10_STOP */ +#define LL_DBGMCU_APB2_GRP1_TIM11_STOP DBGMCU_APB2_FZ_DBG_TIM11_STOP /*!< TIM11 counter stopped when core is halted */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_LATENCY FLASH LATENCY + * @{ + */ +#define LL_FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS /*!< FLASH Zero wait state */ +#define LL_FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS /*!< FLASH One wait state */ +#define LL_FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS /*!< FLASH Two wait states */ +#define LL_FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS /*!< FLASH Three wait states */ +#define LL_FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS /*!< FLASH Four wait states */ +#define LL_FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS /*!< FLASH five wait state */ +#define LL_FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS /*!< FLASH six wait state */ +#define LL_FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS /*!< FLASH seven wait states */ +#define LL_FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS /*!< FLASH eight wait states */ +#define LL_FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS /*!< FLASH nine wait states */ +#define LL_FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS /*!< FLASH ten wait states */ +#define LL_FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS /*!< FLASH eleven wait states */ +#define LL_FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS /*!< FLASH twelve wait states */ +#define LL_FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS /*!< FLASH thirteen wait states */ +#define LL_FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS /*!< FLASH fourteen wait states */ +#define LL_FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS /*!< FLASH fifteen wait states */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup SYSTEM_LL_Exported_Functions SYSTEM Exported Functions + * @{ + */ + +/** @defgroup SYSTEM_LL_EF_SYSCFG SYSCFG + * @{ + */ +/** + * @brief Set memory mapping at address 0x00000000 + * @rmtoll SYSCFG_MEMRMP MEM_MODE LL_SYSCFG_SetRemapMemory + * @param Memory This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_REMAP_FLASH + * @arg @ref LL_SYSCFG_REMAP_SYSTEMFLASH + * @arg @ref LL_SYSCFG_REMAP_SRAM + * @arg @ref LL_SYSCFG_REMAP_FSMC (*) + * @arg @ref LL_SYSCFG_REMAP_FMC (*) + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapMemory(uint32_t Memory) +{ + MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, Memory); +} + +/** + * @brief Get memory mapping at address 0x00000000 + * @rmtoll SYSCFG_MEMRMP MEM_MODE LL_SYSCFG_GetRemapMemory + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_REMAP_FLASH + * @arg @ref LL_SYSCFG_REMAP_SYSTEMFLASH + * @arg @ref LL_SYSCFG_REMAP_SRAM + * @arg @ref LL_SYSCFG_REMAP_FSMC (*) + * @arg @ref LL_SYSCFG_REMAP_FMC (*) + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetRemapMemory(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE)); +} + +#if defined(SYSCFG_MEMRMP_SWP_FMC) +/** + * @brief Enables the FMC Memory Mapping Swapping + * @rmtoll SYSCFG_MEMRMP SWP_FMC LL_SYSCFG_EnableFMCMemorySwapping + * @note SDRAM is accessible at 0x60000000 and NOR/RAM + * is accessible at 0xC0000000 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableFMCMemorySwapping(void) +{ + SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_SWP_FMC_0); +} + +/** + * @brief Disables the FMC Memory Mapping Swapping + * @rmtoll SYSCFG_MEMRMP SWP_FMC LL_SYSCFG_DisableFMCMemorySwapping + * @note SDRAM is accessible at 0xC0000000 (default mapping) + * and NOR/RAM is accessible at 0x60000000 (default mapping) + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableFMCMemorySwapping(void) +{ + CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_SWP_FMC); +} + +#endif /* SYSCFG_MEMRMP_SWP_FMC */ +/** + * @brief Enables the Compensation cell Power Down + * @rmtoll SYSCFG_CMPCR CMP_PD LL_SYSCFG_EnableCompensationCell + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableCompensationCell(void) +{ + SET_BIT(SYSCFG->CMPCR, SYSCFG_CMPCR_CMP_PD); +} + +/** + * @brief Disables the Compensation cell Power Down + * @rmtoll SYSCFG_CMPCR CMP_PD LL_SYSCFG_DisableCompensationCell + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableCompensationCell(void) +{ + CLEAR_BIT(SYSCFG->CMPCR, SYSCFG_CMPCR_CMP_PD); +} + +/** + * @brief Get Compensation Cell ready Flag + * @rmtoll SYSCFG_CMPCR READY LL_SYSCFG_IsActiveFlag_CMPCR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_CMPCR(void) +{ + return (READ_BIT(SYSCFG->CMPCR, SYSCFG_CMPCR_READY) == (SYSCFG_CMPCR_READY)); +} + +#if defined(SYSCFG_PMC_MII_RMII_SEL) +/** + * @brief Select Ethernet PHY interface + * @rmtoll SYSCFG_PMC MII_RMII_SEL LL_SYSCFG_SetPHYInterface + * @param Interface This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_PMC_ETHMII + * @arg @ref LL_SYSCFG_PMC_ETHRMII + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetPHYInterface(uint32_t Interface) +{ + MODIFY_REG(SYSCFG->PMC, SYSCFG_PMC_MII_RMII_SEL, Interface); +} + +/** + * @brief Get Ethernet PHY interface + * @rmtoll SYSCFG_PMC MII_RMII_SEL LL_SYSCFG_GetPHYInterface + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_PMC_ETHMII + * @arg @ref LL_SYSCFG_PMC_ETHRMII + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetPHYInterface(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->PMC, SYSCFG_PMC_MII_RMII_SEL)); +} +#endif /* SYSCFG_PMC_MII_RMII_SEL */ + + + +#if defined(SYSCFG_MEMRMP_UFB_MODE) +/** + * @brief Select Flash bank mode (Bank flashed at 0x08000000) + * @rmtoll SYSCFG_MEMRMP UFB_MODE LL_SYSCFG_SetFlashBankMode + * @param Bank This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_BANKMODE_BANK1 + * @arg @ref LL_SYSCFG_BANKMODE_BANK2 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetFlashBankMode(uint32_t Bank) +{ + MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_UFB_MODE, Bank); +} + +/** + * @brief Get Flash bank mode (Bank flashed at 0x08000000) + * @rmtoll SYSCFG_MEMRMP UFB_MODE LL_SYSCFG_GetFlashBankMode + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_BANKMODE_BANK1 + * @arg @ref LL_SYSCFG_BANKMODE_BANK2 + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetFlashBankMode(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_UFB_MODE)); +} +#endif /* SYSCFG_MEMRMP_UFB_MODE */ + +#if defined(SYSCFG_CFGR_FMPI2C1_SCL) +/** + * @brief Enable the I2C fast mode plus driving capability. + * @rmtoll SYSCFG_CFGR FMPI2C1_SCL LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR FMPI2C1_SDA LL_SYSCFG_EnableFastModePlus + * @param ConfigFastModePlus This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SCL + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SDA + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableFastModePlus(uint32_t ConfigFastModePlus) +{ + SET_BIT(SYSCFG->CFGR, ConfigFastModePlus); +} + +/** + * @brief Disable the I2C fast mode plus driving capability. + * @rmtoll SYSCFG_CFGR FMPI2C1_SCL LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR FMPI2C1_SDA LL_SYSCFG_DisableFastModePlus\n + * @param ConfigFastModePlus This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SCL + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SDA + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableFastModePlus(uint32_t ConfigFastModePlus) +{ + CLEAR_BIT(SYSCFG->CFGR, ConfigFastModePlus); +} +#endif /* SYSCFG_CFGR_FMPI2C1_SCL */ + +/** + * @brief Configure source input for the EXTI external interrupt. + * @rmtoll SYSCFG_EXTICR1 EXTIx LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTIx LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTIx LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTIx LL_SYSCFG_SetEXTISource + * @param Port This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_PORTA + * @arg @ref LL_SYSCFG_EXTI_PORTB + * @arg @ref LL_SYSCFG_EXTI_PORTC + * @arg @ref LL_SYSCFG_EXTI_PORTD + * @arg @ref LL_SYSCFG_EXTI_PORTE + * @arg @ref LL_SYSCFG_EXTI_PORTF (*) + * @arg @ref LL_SYSCFG_EXTI_PORTG (*) + * @arg @ref LL_SYSCFG_EXTI_PORTH + * + * (*) value not defined in all devices + * @param Line This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_LINE0 + * @arg @ref LL_SYSCFG_EXTI_LINE1 + * @arg @ref LL_SYSCFG_EXTI_LINE2 + * @arg @ref LL_SYSCFG_EXTI_LINE3 + * @arg @ref LL_SYSCFG_EXTI_LINE4 + * @arg @ref LL_SYSCFG_EXTI_LINE5 + * @arg @ref LL_SYSCFG_EXTI_LINE6 + * @arg @ref LL_SYSCFG_EXTI_LINE7 + * @arg @ref LL_SYSCFG_EXTI_LINE8 + * @arg @ref LL_SYSCFG_EXTI_LINE9 + * @arg @ref LL_SYSCFG_EXTI_LINE10 + * @arg @ref LL_SYSCFG_EXTI_LINE11 + * @arg @ref LL_SYSCFG_EXTI_LINE12 + * @arg @ref LL_SYSCFG_EXTI_LINE13 + * @arg @ref LL_SYSCFG_EXTI_LINE14 + * @arg @ref LL_SYSCFG_EXTI_LINE15 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetEXTISource(uint32_t Port, uint32_t Line) +{ + MODIFY_REG(SYSCFG->EXTICR[Line & 0xFF], (Line >> 16), Port << POSITION_VAL((Line >> 16))); +} + +/** + * @brief Get the configured defined for specific EXTI Line + * @rmtoll SYSCFG_EXTICR1 EXTIx LL_SYSCFG_GetEXTISource\n + * SYSCFG_EXTICR2 EXTIx LL_SYSCFG_GetEXTISource\n + * SYSCFG_EXTICR3 EXTIx LL_SYSCFG_GetEXTISource\n + * SYSCFG_EXTICR4 EXTIx LL_SYSCFG_GetEXTISource + * @param Line This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_LINE0 + * @arg @ref LL_SYSCFG_EXTI_LINE1 + * @arg @ref LL_SYSCFG_EXTI_LINE2 + * @arg @ref LL_SYSCFG_EXTI_LINE3 + * @arg @ref LL_SYSCFG_EXTI_LINE4 + * @arg @ref LL_SYSCFG_EXTI_LINE5 + * @arg @ref LL_SYSCFG_EXTI_LINE6 + * @arg @ref LL_SYSCFG_EXTI_LINE7 + * @arg @ref LL_SYSCFG_EXTI_LINE8 + * @arg @ref LL_SYSCFG_EXTI_LINE9 + * @arg @ref LL_SYSCFG_EXTI_LINE10 + * @arg @ref LL_SYSCFG_EXTI_LINE11 + * @arg @ref LL_SYSCFG_EXTI_LINE12 + * @arg @ref LL_SYSCFG_EXTI_LINE13 + * @arg @ref LL_SYSCFG_EXTI_LINE14 + * @arg @ref LL_SYSCFG_EXTI_LINE15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_PORTA + * @arg @ref LL_SYSCFG_EXTI_PORTB + * @arg @ref LL_SYSCFG_EXTI_PORTC + * @arg @ref LL_SYSCFG_EXTI_PORTD + * @arg @ref LL_SYSCFG_EXTI_PORTE + * @arg @ref LL_SYSCFG_EXTI_PORTF (*) + * @arg @ref LL_SYSCFG_EXTI_PORTG (*) + * @arg @ref LL_SYSCFG_EXTI_PORTH + * (*) value not defined in all devices + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetEXTISource(uint32_t Line) +{ + return (uint32_t)(READ_BIT(SYSCFG->EXTICR[Line & 0xFF], (Line >> 16)) >> POSITION_VAL(Line >> 16)); +} + +#if defined(SYSCFG_CFGR2_LOCKUP_LOCK) +/** + * @brief Set connections to TIM1/8 break inputs + * @rmtoll SYSCFG_CFGR2 LockUp Lock LL_SYSCFG_SetTIMBreakInputs \n + * SYSCFG_CFGR2 PVD Lock LL_SYSCFG_SetTIMBreakInputs + * @param Break This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_TIMBREAK_LOCKUP + * @arg @ref LL_SYSCFG_TIMBREAK_PVD + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetTIMBreakInputs(uint32_t Break) +{ + MODIFY_REG(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_PVD_LOCK, Break); +} + +/** + * @brief Get connections to TIM1/8 Break inputs + * @rmtoll SYSCFG_CFGR2 LockUp Lock LL_SYSCFG_SetTIMBreakInputs \n + * SYSCFG_CFGR2 PVD Lock LL_SYSCFG_SetTIMBreakInputs + * @retval Returned value can be can be a combination of the following values: + * @arg @ref LL_SYSCFG_TIMBREAK_LOCKUP + * @arg @ref LL_SYSCFG_TIMBREAK_PVD + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetTIMBreakInputs(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_PVD_LOCK)); +} +#endif /* SYSCFG_CFGR2_LOCKUP_LOCK */ +#if defined(SYSCFG_MCHDLYCR_BSCKSEL) +/** + * @brief Select the DFSDM2 or TIM2_OC1 as clock source for the bitstream clock. + * @rmtoll SYSCFG_MCHDLYCR BSCKSEL LL_SYSCFG_DFSDM_SetBitstreamClockSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_DFSDM2 + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_TIM2OC1 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_SetBitstreamClockSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_BSCKSEL, ClockSource); +} +/** + * @brief Get the DFSDM2 or TIM2_OC1 as clock source for the bitstream clock. + * @rmtoll SYSCFG_MCHDLYCR BSCKSEL LL_SYSCFG_DFSDM_GetBitstreamClockSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_DFSDM2 + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_TIM2OC1 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM_GetBitstreamClockSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_BSCKSEL)); +} +/** + * @brief Enables the DFSDM1 or DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLYEN LL_SYSCFG_DFSDM_EnableDelayClock + * @param MCHDLY This parameter can be one of the following values + * @arg @ref LL_SYSCFG_DFSDM1_MCHDLYEN + * @arg @ref LL_SYSCFG_DFSDM2_MCHDLYEN + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_EnableDelayClock(uint32_t MCHDLY) +{ + SET_BIT(SYSCFG->MCHDLYCR, MCHDLY); +} + +/** + * @brief Disables the DFSDM1 or the DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLY1EN LL_SYSCFG_DFSDM1_DisableDelayClock + * @param MCHDLY This parameter can be one of the following values + * @arg @ref LL_SYSCFG_DFSDM1_MCHDLYEN + * @arg @ref LL_SYSCFG_DFSDM2_MCHDLYEN + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_DisableDelayClock(uint32_t MCHDLY) +{ + CLEAR_BIT(SYSCFG->MCHDLYCR, MCHDLY); +} + +/** + * @brief Select the source for DFSDM1 or DFSDM2 DatIn0 + * @rmtoll SYSCFG_MCHDLYCR DFSDMD0SEL LL_SYSCFG_DFSDM_SetDataIn0Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_SetDataIn0Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, (Source >> 16), (Source & 0x0000FFFF)); +} +/** + * @brief Get the source for DFSDM1 or DFSDM2 DatIn0. + * @rmtoll SYSCFG_MCHDLYCR DFSDMD0SEL LL_SYSCFG_DFSDM_GetDataIn0Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0 + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0 + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM_GetDataIn0Source(uint32_t Source) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, Source)); +} +/** + * @brief Select the source for DFSDM1 or DFSDM2 DatIn2 + * @rmtoll SYSCFG_MCHDLYCR DFSDMD2SEL LL_SYSCFG_DFSDM_SetDataIn2Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_SetDataIn2Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, (Source >> 16), (Source & 0x0000FFFF)); +} +/** + * @brief Get the source for DFSDM1 or DFSDM2 DatIn2. + * @rmtoll SYSCFG_MCHDLYCR DFSDMD2SEL LL_SYSCFG_DFSDM_GetDataIn2Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2 + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2 + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM_GetDataIn2Source(uint32_t Source) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, Source)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM4 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CK02SEL LL_SYSCFG_DFSDM1_SetTIM4OC2BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN2 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetTIM4OC2BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK02SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM4 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1D2SEL LL_SYSCFG_DFSDM1_GetTIM4OC2BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN2 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetTIM4OC2BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK02SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM4 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CK13SEL LL_SYSCFG_DFSDM1_SetTIM4OC1BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN3 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetTIM4OC1BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK13SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM4 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1D2SEL LL_SYSCFG_DFSDM1_GetTIM4OC1BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN3 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetTIM4OC1BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK13SEL)); +} + +/** + * @brief Select the DFSDM1 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CFG LL_SYSCFG_DFSDM1_SetClockInSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetClockInSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CFG, ClockSource); +} +/** + * @brief GET the DFSDM1 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CFG LL_SYSCFG_DFSDM1_GetClockInSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetClockInSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CFG)); +} + +/** + * @brief Select the DFSDM1 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CKOSEL LL_SYSCFG_DFSDM1_SetClockOutSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetClockOutSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CKOSEL, ClockSource); +} +/** + * @brief GET the DFSDM1 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CKOSEL LL_SYSCFG_DFSDM1_GetClockOutSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetClockOutSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CKOSEL)); +} + +/** + * @brief Enables the DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLY2EN LL_SYSCFG_DFSDM2_EnableDelayClock + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_EnableDelayClock(void) +{ + SET_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_MCHDLY2EN); +} + +/** + * @brief Disables the DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLY2EN LL_SYSCFG_DFSDM2_DisableDelayClock + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_DisableDelayClock(void) +{ + CLEAR_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_MCHDLY2EN); +} +/** + * @brief Select the source for DFSDM2 DatIn0 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D0SEL LL_SYSCFG_DFSDM2_SetDataIn0Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn0Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D0SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn0. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D0SEL LL_SYSCFG_DFSDM2_GetDataIn0Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn0Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D0SEL)); +} + +/** + * @brief Select the source for DFSDM2 DatIn2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D2SEL LL_SYSCFG_DFSDM2_SetDataIn2Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn2Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D2SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn2. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D2SEL LL_SYSCFG_DFSDM2_GetDataIn2Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn2Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D2SEL)); +} + +/** + * @brief Select the source for DFSDM2 DatIn4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D4SEL LL_SYSCFG_DFSDM2_SetDataIn4Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn4Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D4SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn4. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D4SEL LL_SYSCFG_DFSDM2_GetDataIn4Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn4Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D4SEL)); +} + +/** + * @brief Select the source for DFSDM2 DatIn6 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D6SEL LL_SYSCFG_DFSDM2_SetDataIn6Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn6Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D6SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn6. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D6SEL LL_SYSCFG_DFSDM2_GetDataIn6Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn6Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D6SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_SetTIM3OC4BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN4 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC4BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK04SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_GetTIM3OC4BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN4 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC4BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK04SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC3 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK15SEL LL_SYSCFG_DFSDM2_SetTIM3OC3BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN5 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC3BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK15SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_GetTIM3OC3BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN5 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC3BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK15SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK26SEL LL_SYSCFG_DFSDM2_SetTIM3OC2BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN2 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN6 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC2BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK26SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_GetTIM3OC2BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN2 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN6 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC2BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK26SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK37SEL LL_SYSCFG_DFSDM2_SetTIM3OC1BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN3 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN7 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC1BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK37SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK37SEL LL_SYSCFG_DFSDM2_GetTIM3OC1BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN3 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN7 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC1BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK37SEL)); +} + +/** + * @brief Select the DFSDM2 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CFG LL_SYSCFG_DFSDM2_SetClockInSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetClockInSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CFG, ClockSource); +} +/** + * @brief GET the DFSDM2 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CFG LL_SYSCFG_DFSDM2_GetClockInSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetClockInSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CFG)); +} + +/** + * @brief Select the DFSDM2 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CKOSEL LL_SYSCFG_DFSDM2_SetClockOutSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetClockOutSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CKOSEL, ClockSource); +} +/** + * @brief GET the DFSDM2 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CKOSEL LL_SYSCFG_DFSDM2_GetClockOutSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetClockOutSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CKOSEL)); +} + +#endif /* SYSCFG_MCHDLYCR_BSCKSEL */ +/** + * @} + */ + + +/** @defgroup SYSTEM_LL_EF_DBGMCU DBGMCU + * @{ + */ + +/** + * @brief Return the device identifier + * @note For STM32F405/407xx and STM32F415/417xx devices, the device ID is 0x413 + * @note For STM32F42xxx and STM32F43xxx devices, the device ID is 0x419 + * @note For STM32F401xx devices, the device ID is 0x423 + * @note For STM32F401xx devices, the device ID is 0x433 + * @note For STM32F411xx devices, the device ID is 0x431 + * @note For STM32F410xx devices, the device ID is 0x458 + * @note For STM32F412xx devices, the device ID is 0x441 + * @note For STM32F413xx and STM32423xx devices, the device ID is 0x463 + * @note For STM32F446xx devices, the device ID is 0x421 + * @note For STM32F469xx and STM32F479xx devices, the device ID is 0x434 + * @rmtoll DBGMCU_IDCODE DEV_ID LL_DBGMCU_GetDeviceID + * @retval Values between Min_Data=0x00 and Max_Data=0xFFF + */ +__STATIC_INLINE uint32_t LL_DBGMCU_GetDeviceID(void) +{ + return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_DEV_ID)); +} + +/** + * @brief Return the device revision identifier + * @note This field indicates the revision of the device. + For example, it is read as RevA -> 0x1000, Cat 2 revZ -> 0x1001, rev1 -> 0x1003, rev2 ->0x1007, revY -> 0x100F for STM32F405/407xx and STM32F415/417xx devices + For example, it is read as RevA -> 0x1000, Cat 2 revY -> 0x1003, rev1 -> 0x1007, rev3 ->0x2001 for STM32F42xxx and STM32F43xxx devices + For example, it is read as RevZ -> 0x1000, Cat 2 revA -> 0x1001 for STM32F401xB/C devices + For example, it is read as RevA -> 0x1000, Cat 2 revZ -> 0x1001 for STM32F401xD/E devices + For example, it is read as RevA -> 0x1000 for STM32F411xx,STM32F413/423xx,STM32F469/423xx, STM32F446xx and STM32F410xx devices + For example, it is read as RevZ -> 0x1001, Cat 2 revB -> 0x2000, revC -> 0x3000 for STM32F412xx devices + * @rmtoll DBGMCU_IDCODE REV_ID LL_DBGMCU_GetRevisionID + * @retval Values between Min_Data=0x00 and Max_Data=0xFFFF + */ +__STATIC_INLINE uint32_t LL_DBGMCU_GetRevisionID(void) +{ + return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_REV_ID) >> DBGMCU_IDCODE_REV_ID_Pos); +} + +/** + * @brief Enable the Debug Module during SLEEP mode + * @rmtoll DBGMCU_CR DBG_SLEEP LL_DBGMCU_EnableDBGSleepMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_EnableDBGSleepMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Disable the Debug Module during SLEEP mode + * @rmtoll DBGMCU_CR DBG_SLEEP LL_DBGMCU_DisableDBGSleepMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_DisableDBGSleepMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Enable the Debug Module during STOP mode + * @rmtoll DBGMCU_CR DBG_STOP LL_DBGMCU_EnableDBGStopMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_EnableDBGStopMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Disable the Debug Module during STOP mode + * @rmtoll DBGMCU_CR DBG_STOP LL_DBGMCU_DisableDBGStopMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_DisableDBGStopMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Enable the Debug Module during STANDBY mode + * @rmtoll DBGMCU_CR DBG_STANDBY LL_DBGMCU_EnableDBGStandbyMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_EnableDBGStandbyMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Disable the Debug Module during STANDBY mode + * @rmtoll DBGMCU_CR DBG_STANDBY LL_DBGMCU_DisableDBGStandbyMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_DisableDBGStandbyMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Set Trace pin assignment control + * @rmtoll DBGMCU_CR TRACE_IOEN LL_DBGMCU_SetTracePinAssignment\n + * DBGMCU_CR TRACE_MODE LL_DBGMCU_SetTracePinAssignment + * @param PinAssignment This parameter can be one of the following values: + * @arg @ref LL_DBGMCU_TRACE_NONE + * @arg @ref LL_DBGMCU_TRACE_ASYNCH + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE1 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE2 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE4 + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_SetTracePinAssignment(uint32_t PinAssignment) +{ + MODIFY_REG(DBGMCU->CR, DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE, PinAssignment); +} + +/** + * @brief Get Trace pin assignment control + * @rmtoll DBGMCU_CR TRACE_IOEN LL_DBGMCU_GetTracePinAssignment\n + * DBGMCU_CR TRACE_MODE LL_DBGMCU_GetTracePinAssignment + * @retval Returned value can be one of the following values: + * @arg @ref LL_DBGMCU_TRACE_NONE + * @arg @ref LL_DBGMCU_TRACE_ASYNCH + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE1 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE2 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE4 + */ +__STATIC_INLINE uint32_t LL_DBGMCU_GetTracePinAssignment(void) +{ + return (uint32_t)(READ_BIT(DBGMCU->CR, DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE)); +} + +/** + * @brief Freeze APB1 peripherals (group1 peripherals) + * @rmtoll DBGMCU_APB1_FZ DBG_TIM2_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM3_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM4_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM5_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM6_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM7_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM12_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM13_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM14_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_LPTIM_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_RTC_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_WWDG_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_IWDG_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C1_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C2_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C3_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C4_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN1_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN2_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN3_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM5_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM6_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM7_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM12_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM13_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM14_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_LPTIM_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_RTC_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_WWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_IWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C1_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C2_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN1_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN3_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB1_GRP1_FreezePeriph(uint32_t Periphs) +{ + SET_BIT(DBGMCU->APB1FZ, Periphs); +} + +/** + * @brief Unfreeze APB1 peripherals (group1 peripherals) + * @rmtoll DBGMCU_APB1_FZ DBG_TIM2_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM3_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM4_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM5_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM6_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM7_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM12_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM13_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM14_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_LPTIM_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_RTC_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_WWDG_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_IWDG_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C1_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C2_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C3_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C4_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN1_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN2_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN3_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM5_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM6_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM7_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM12_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM13_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM14_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_LPTIM_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_RTC_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_WWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_IWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C1_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C2_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN1_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN3_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB1_GRP1_UnFreezePeriph(uint32_t Periphs) +{ + CLEAR_BIT(DBGMCU->APB1FZ, Periphs); +} + +/** + * @brief Freeze APB2 peripherals + * @rmtoll DBGMCU_APB2_FZ DBG_TIM1_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM8_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM9_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM10_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM11_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM1_STOP + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM8_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM9_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM10_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM11_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB2_GRP1_FreezePeriph(uint32_t Periphs) +{ + SET_BIT(DBGMCU->APB2FZ, Periphs); +} + +/** + * @brief Unfreeze APB2 peripherals + * @rmtoll DBGMCU_APB2_FZ DBG_TIM1_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM8_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM9_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM10_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM11_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM1_STOP + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM8_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM9_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM10_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM11_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB2_GRP1_UnFreezePeriph(uint32_t Periphs) +{ + CLEAR_BIT(DBGMCU->APB2FZ, Periphs); +} +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EF_FLASH FLASH + * @{ + */ + +/** + * @brief Set FLASH Latency + * @rmtoll FLASH_ACR LATENCY LL_FLASH_SetLatency + * @param Latency This parameter can be one of the following values: + * @arg @ref LL_FLASH_LATENCY_0 + * @arg @ref LL_FLASH_LATENCY_1 + * @arg @ref LL_FLASH_LATENCY_2 + * @arg @ref LL_FLASH_LATENCY_3 + * @arg @ref LL_FLASH_LATENCY_4 + * @arg @ref LL_FLASH_LATENCY_5 + * @arg @ref LL_FLASH_LATENCY_6 + * @arg @ref LL_FLASH_LATENCY_7 + * @arg @ref LL_FLASH_LATENCY_8 + * @arg @ref LL_FLASH_LATENCY_9 + * @arg @ref LL_FLASH_LATENCY_10 + * @arg @ref LL_FLASH_LATENCY_11 + * @arg @ref LL_FLASH_LATENCY_12 + * @arg @ref LL_FLASH_LATENCY_13 + * @arg @ref LL_FLASH_LATENCY_14 + * @arg @ref LL_FLASH_LATENCY_15 + * @retval None + */ +__STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency) +{ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, Latency); +} + +/** + * @brief Get FLASH Latency + * @rmtoll FLASH_ACR LATENCY LL_FLASH_GetLatency + * @retval Returned value can be one of the following values: + * @arg @ref LL_FLASH_LATENCY_0 + * @arg @ref LL_FLASH_LATENCY_1 + * @arg @ref LL_FLASH_LATENCY_2 + * @arg @ref LL_FLASH_LATENCY_3 + * @arg @ref LL_FLASH_LATENCY_4 + * @arg @ref LL_FLASH_LATENCY_5 + * @arg @ref LL_FLASH_LATENCY_6 + * @arg @ref LL_FLASH_LATENCY_7 + * @arg @ref LL_FLASH_LATENCY_8 + * @arg @ref LL_FLASH_LATENCY_9 + * @arg @ref LL_FLASH_LATENCY_10 + * @arg @ref LL_FLASH_LATENCY_11 + * @arg @ref LL_FLASH_LATENCY_12 + * @arg @ref LL_FLASH_LATENCY_13 + * @arg @ref LL_FLASH_LATENCY_14 + * @arg @ref LL_FLASH_LATENCY_15 + */ +__STATIC_INLINE uint32_t LL_FLASH_GetLatency(void) +{ + return (uint32_t)(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)); +} + +/** + * @brief Enable Prefetch + * @rmtoll FLASH_ACR PRFTEN LL_FLASH_EnablePrefetch + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnablePrefetch(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_PRFTEN); +} + +/** + * @brief Disable Prefetch + * @rmtoll FLASH_ACR PRFTEN LL_FLASH_DisablePrefetch + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisablePrefetch(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_PRFTEN); +} + +/** + * @brief Check if Prefetch buffer is enabled + * @rmtoll FLASH_ACR PRFTEN LL_FLASH_IsPrefetchEnabled + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_FLASH_IsPrefetchEnabled(void) +{ + return (READ_BIT(FLASH->ACR, FLASH_ACR_PRFTEN) == (FLASH_ACR_PRFTEN)); +} + +/** + * @brief Enable Instruction cache + * @rmtoll FLASH_ACR ICEN LL_FLASH_EnableInstCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableInstCache(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_ICEN); +} + +/** + * @brief Disable Instruction cache + * @rmtoll FLASH_ACR ICEN LL_FLASH_DisableInstCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableInstCache(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_ICEN); +} + +/** + * @brief Enable Data cache + * @rmtoll FLASH_ACR DCEN LL_FLASH_EnableDataCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableDataCache(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_DCEN); +} + +/** + * @brief Disable Data cache + * @rmtoll FLASH_ACR DCEN LL_FLASH_DisableDataCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableDataCache(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_DCEN); +} + +/** + * @brief Enable Instruction cache reset + * @note bit can be written only when the instruction cache is disabled + * @rmtoll FLASH_ACR ICRST LL_FLASH_EnableInstCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableInstCacheReset(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_ICRST); +} + +/** + * @brief Disable Instruction cache reset + * @rmtoll FLASH_ACR ICRST LL_FLASH_DisableInstCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableInstCacheReset(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_ICRST); +} + +/** + * @brief Enable Data cache reset + * @note bit can be written only when the data cache is disabled + * @rmtoll FLASH_ACR DCRST LL_FLASH_EnableDataCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableDataCacheReset(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_DCRST); +} + +/** + * @brief Disable Data cache reset + * @rmtoll FLASH_ACR DCRST LL_FLASH_DisableDataCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableDataCacheReset(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_DCRST); +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined (FLASH) || defined (SYSCFG) || defined (DBGMCU) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_SYSTEM_H */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h new file mode 100644 index 00000000..a11f5619 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_tim.h @@ -0,0 +1,4096 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_tim.h + * @author MCD Application Team + * @brief Header file of TIM LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_TIM_H +#define __STM32F4xx_LL_TIM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (TIM1) || defined (TIM2) || defined (TIM3) || defined (TIM4) || defined (TIM5) || defined (TIM6) || defined (TIM7) || defined (TIM8) || defined (TIM9) || defined (TIM10) || defined (TIM11) || defined (TIM12) || defined (TIM13) || defined (TIM14) + +/** @defgroup TIM_LL TIM + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup TIM_LL_Private_Variables TIM Private Variables + * @{ + */ +static const uint8_t OFFSET_TAB_CCMRx[] = +{ + 0x00U, /* 0: TIMx_CH1 */ + 0x00U, /* 1: TIMx_CH1N */ + 0x00U, /* 2: TIMx_CH2 */ + 0x00U, /* 3: TIMx_CH2N */ + 0x04U, /* 4: TIMx_CH3 */ + 0x04U, /* 5: TIMx_CH3N */ + 0x04U /* 6: TIMx_CH4 */ +}; + +static const uint8_t SHIFT_TAB_OCxx[] = +{ + 0U, /* 0: OC1M, OC1FE, OC1PE */ + 0U, /* 1: - NA */ + 8U, /* 2: OC2M, OC2FE, OC2PE */ + 0U, /* 3: - NA */ + 0U, /* 4: OC3M, OC3FE, OC3PE */ + 0U, /* 5: - NA */ + 8U /* 6: OC4M, OC4FE, OC4PE */ +}; + +static const uint8_t SHIFT_TAB_ICxx[] = +{ + 0U, /* 0: CC1S, IC1PSC, IC1F */ + 0U, /* 1: - NA */ + 8U, /* 2: CC2S, IC2PSC, IC2F */ + 0U, /* 3: - NA */ + 0U, /* 4: CC3S, IC3PSC, IC3F */ + 0U, /* 5: - NA */ + 8U /* 6: CC4S, IC4PSC, IC4F */ +}; + +static const uint8_t SHIFT_TAB_CCxP[] = +{ + 0U, /* 0: CC1P */ + 2U, /* 1: CC1NP */ + 4U, /* 2: CC2P */ + 6U, /* 3: CC2NP */ + 8U, /* 4: CC3P */ + 10U, /* 5: CC3NP */ + 12U /* 6: CC4P */ +}; + +static const uint8_t SHIFT_TAB_OISx[] = +{ + 0U, /* 0: OIS1 */ + 1U, /* 1: OIS1N */ + 2U, /* 2: OIS2 */ + 3U, /* 3: OIS2N */ + 4U, /* 4: OIS3 */ + 5U, /* 5: OIS3N */ + 6U /* 6: OIS4 */ +}; +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup TIM_LL_Private_Constants TIM Private Constants + * @{ + */ + + +/* Remap mask definitions */ +#define TIMx_OR_RMP_SHIFT 16U +#define TIMx_OR_RMP_MASK 0x0000FFFFU +#define TIM2_OR_RMP_MASK (TIM_OR_ITR1_RMP << TIMx_OR_RMP_SHIFT) +#define TIM5_OR_RMP_MASK (TIM_OR_TI4_RMP << TIMx_OR_RMP_SHIFT) +#define TIM11_OR_RMP_MASK (TIM_OR_TI1_RMP << TIMx_OR_RMP_SHIFT) + +/* Mask used to set the TDG[x:0] of the DTG bits of the TIMx_BDTR register */ +#define DT_DELAY_1 ((uint8_t)0x7F) +#define DT_DELAY_2 ((uint8_t)0x3F) +#define DT_DELAY_3 ((uint8_t)0x1F) +#define DT_DELAY_4 ((uint8_t)0x1F) + +/* Mask used to set the DTG[7:5] bits of the DTG bits of the TIMx_BDTR register */ +#define DT_RANGE_1 ((uint8_t)0x00) +#define DT_RANGE_2 ((uint8_t)0x80) +#define DT_RANGE_3 ((uint8_t)0xC0) +#define DT_RANGE_4 ((uint8_t)0xE0) + + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup TIM_LL_Private_Macros TIM Private Macros + * @{ + */ +/** @brief Convert channel id into channel index. + * @param __CHANNEL__ This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval none + */ +#define TIM_GET_CHANNEL_INDEX( __CHANNEL__) \ + (((__CHANNEL__) == LL_TIM_CHANNEL_CH1) ? 0U :\ + ((__CHANNEL__) == LL_TIM_CHANNEL_CH1N) ? 1U :\ + ((__CHANNEL__) == LL_TIM_CHANNEL_CH2) ? 2U :\ + ((__CHANNEL__) == LL_TIM_CHANNEL_CH2N) ? 3U :\ + ((__CHANNEL__) == LL_TIM_CHANNEL_CH3) ? 4U :\ + ((__CHANNEL__) == LL_TIM_CHANNEL_CH3N) ? 5U : 6U) + +/** @brief Calculate the deadtime sampling period(in ps). + * @param __TIMCLK__ timer input clock frequency (in Hz). + * @param __CKD__ This parameter can be one of the following values: + * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 + * @retval none + */ +#define TIM_CALC_DTS(__TIMCLK__, __CKD__) \ + (((__CKD__) == LL_TIM_CLOCKDIVISION_DIV1) ? ((uint64_t)1000000000000U/(__TIMCLK__)) : \ + ((__CKD__) == LL_TIM_CLOCKDIVISION_DIV2) ? ((uint64_t)1000000000000U/((__TIMCLK__) >> 1U)) : \ + ((uint64_t)1000000000000U/((__TIMCLK__) >> 2U))) +/** + * @} + */ + + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup TIM_LL_ES_INIT TIM Exported Init structure + * @{ + */ + +/** + * @brief TIM Time Base configuration structure definition. + */ +typedef struct +{ + uint16_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between Min_Data=0x0000 and Max_Data=0xFFFF. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetPrescaler().*/ + + uint32_t CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_LL_EC_COUNTERMODE. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetCounterMode().*/ + + uint32_t Autoreload; /*!< Specifies the auto reload value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter must be a number between Min_Data=0x0000 and Max_Data=0xFFFF. + Some timer instances may support 32 bits counters. In that case this parameter must + be a number between 0x0000 and 0xFFFFFFFF. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetAutoReload().*/ + + uint32_t ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_LL_EC_CLOCKDIVISION. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetClockDivision().*/ + + uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + GP timers: this parameter must be a number between Min_Data = 0x00 and + Max_Data = 0xFF. + Advanced timers: this parameter must be a number between Min_Data = 0x0000 and + Max_Data = 0xFFFF. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetRepetitionCounter().*/ +} LL_TIM_InitTypeDef; + +/** + * @brief TIM Output Compare configuration structure definition. + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the output mode. + This parameter can be a value of @ref TIM_LL_EC_OCMODE. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetMode().*/ + + uint32_t OCState; /*!< Specifies the TIM Output Compare state. + This parameter can be a value of @ref TIM_LL_EC_OCSTATE. + + This feature can be modified afterwards using unitary functions + @ref LL_TIM_CC_EnableChannel() or @ref LL_TIM_CC_DisableChannel().*/ + + uint32_t OCNState; /*!< Specifies the TIM complementary Output Compare state. + This parameter can be a value of @ref TIM_LL_EC_OCSTATE. + + This feature can be modified afterwards using unitary functions + @ref LL_TIM_CC_EnableChannel() or @ref LL_TIM_CC_DisableChannel().*/ + + uint32_t CompareValue; /*!< Specifies the Compare value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data=0x0000 and Max_Data=0xFFFF. + + This feature can be modified afterwards using unitary function + LL_TIM_OC_SetCompareCHx (x=1..6).*/ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_LL_EC_OCPOLARITY. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetPolarity().*/ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_LL_EC_OCPOLARITY. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetPolarity().*/ + + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_LL_EC_OCIDLESTATE. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetIdleState().*/ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_LL_EC_OCIDLESTATE. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetIdleState().*/ +} LL_TIM_OC_InitTypeDef; + +/** + * @brief TIM Input Capture configuration structure definition. + */ + +typedef struct +{ + + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPolarity().*/ + + uint32_t ICActiveInput; /*!< Specifies the input. + This parameter can be a value of @ref TIM_LL_EC_ACTIVEINPUT. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetActiveInput().*/ + + uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_LL_EC_ICPSC. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPrescaler().*/ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a value of @ref TIM_LL_EC_IC_FILTER. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetFilter().*/ +} LL_TIM_IC_InitTypeDef; + + +/** + * @brief TIM Encoder interface configuration structure definition. + */ +typedef struct +{ + uint32_t EncoderMode; /*!< Specifies the encoder resolution (x2 or x4). + This parameter can be a value of @ref TIM_LL_EC_ENCODERMODE. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetEncoderMode().*/ + + uint32_t IC1Polarity; /*!< Specifies the active edge of TI1 input. + This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPolarity().*/ + + uint32_t IC1ActiveInput; /*!< Specifies the TI1 input source + This parameter can be a value of @ref TIM_LL_EC_ACTIVEINPUT. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetActiveInput().*/ + + uint32_t IC1Prescaler; /*!< Specifies the TI1 input prescaler value. + This parameter can be a value of @ref TIM_LL_EC_ICPSC. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPrescaler().*/ + + uint32_t IC1Filter; /*!< Specifies the TI1 input filter. + This parameter can be a value of @ref TIM_LL_EC_IC_FILTER. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetFilter().*/ + + uint32_t IC2Polarity; /*!< Specifies the active edge of TI2 input. + This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPolarity().*/ + + uint32_t IC2ActiveInput; /*!< Specifies the TI2 input source + This parameter can be a value of @ref TIM_LL_EC_ACTIVEINPUT. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetActiveInput().*/ + + uint32_t IC2Prescaler; /*!< Specifies the TI2 input prescaler value. + This parameter can be a value of @ref TIM_LL_EC_ICPSC. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPrescaler().*/ + + uint32_t IC2Filter; /*!< Specifies the TI2 input filter. + This parameter can be a value of @ref TIM_LL_EC_IC_FILTER. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetFilter().*/ + +} LL_TIM_ENCODER_InitTypeDef; + +/** + * @brief TIM Hall sensor interface configuration structure definition. + */ +typedef struct +{ + + uint32_t IC1Polarity; /*!< Specifies the active edge of TI1 input. + This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPolarity().*/ + + uint32_t IC1Prescaler; /*!< Specifies the TI1 input prescaler value. + Prescaler must be set to get a maximum counter period longer than the + time interval between 2 consecutive changes on the Hall inputs. + This parameter can be a value of @ref TIM_LL_EC_ICPSC. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetPrescaler().*/ + + uint32_t IC1Filter; /*!< Specifies the TI1 input filter. + This parameter can be a value of + @ref TIM_LL_EC_IC_FILTER. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_IC_SetFilter().*/ + + uint32_t CommutationDelay; /*!< Specifies the compare value to be loaded into the Capture Compare Register. + A positive pulse (TRGO event) is generated with a programmable delay every time + a change occurs on the Hall inputs. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetCompareCH2().*/ +} LL_TIM_HALLSENSOR_InitTypeDef; + +/** + * @brief BDTR (Break and Dead Time) structure definition + */ +typedef struct +{ + uint32_t OSSRState; /*!< Specifies the Off-State selection used in Run mode. + This parameter can be a value of @ref TIM_LL_EC_OSSR + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetOffStates() + + @note This bit-field cannot be modified as long as LOCK level 2 has been + programmed. */ + + uint32_t OSSIState; /*!< Specifies the Off-State used in Idle state. + This parameter can be a value of @ref TIM_LL_EC_OSSI + + This feature can be modified afterwards using unitary function + @ref LL_TIM_SetOffStates() + + @note This bit-field cannot be modified as long as LOCK level 2 has been + programmed. */ + + uint32_t LockLevel; /*!< Specifies the LOCK level parameters. + This parameter can be a value of @ref TIM_LL_EC_LOCKLEVEL + + @note The LOCK bits can be written only once after the reset. Once the TIMx_BDTR + register has been written, their content is frozen until the next reset.*/ + + uint8_t DeadTime; /*!< Specifies the delay time between the switching-off and the + switching-on of the outputs. + This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF. + + This feature can be modified afterwards using unitary function + @ref LL_TIM_OC_SetDeadTime() + + @note This bit-field can not be modified as long as LOCK level 1, 2 or 3 has been + programmed. */ + + uint16_t BreakState; /*!< Specifies whether the TIM Break input is enabled or not. + This parameter can be a value of @ref TIM_LL_EC_BREAK_ENABLE + + This feature can be modified afterwards using unitary functions + @ref LL_TIM_EnableBRK() or @ref LL_TIM_DisableBRK() + + @note This bit-field can not be modified as long as LOCK level 1 has been + programmed. */ + + uint32_t BreakPolarity; /*!< Specifies the TIM Break Input pin polarity. + This parameter can be a value of @ref TIM_LL_EC_BREAK_POLARITY + + This feature can be modified afterwards using unitary function + @ref LL_TIM_ConfigBRK() + + @note This bit-field can not be modified as long as LOCK level 1 has been + programmed. */ + + uint32_t AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not. + This parameter can be a value of @ref TIM_LL_EC_AUTOMATICOUTPUT_ENABLE + + This feature can be modified afterwards using unitary functions + @ref LL_TIM_EnableAutomaticOutput() or @ref LL_TIM_DisableAutomaticOutput() + + @note This bit-field can not be modified as long as LOCK level 1 has been + programmed. */ +} LL_TIM_BDTR_InitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIM_LL_Exported_Constants TIM Exported Constants + * @{ + */ + +/** @defgroup TIM_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_TIM_ReadReg function. + * @{ + */ +#define LL_TIM_SR_UIF TIM_SR_UIF /*!< Update interrupt flag */ +#define LL_TIM_SR_CC1IF TIM_SR_CC1IF /*!< Capture/compare 1 interrupt flag */ +#define LL_TIM_SR_CC2IF TIM_SR_CC2IF /*!< Capture/compare 2 interrupt flag */ +#define LL_TIM_SR_CC3IF TIM_SR_CC3IF /*!< Capture/compare 3 interrupt flag */ +#define LL_TIM_SR_CC4IF TIM_SR_CC4IF /*!< Capture/compare 4 interrupt flag */ +#define LL_TIM_SR_COMIF TIM_SR_COMIF /*!< COM interrupt flag */ +#define LL_TIM_SR_TIF TIM_SR_TIF /*!< Trigger interrupt flag */ +#define LL_TIM_SR_BIF TIM_SR_BIF /*!< Break interrupt flag */ +#define LL_TIM_SR_CC1OF TIM_SR_CC1OF /*!< Capture/Compare 1 overcapture flag */ +#define LL_TIM_SR_CC2OF TIM_SR_CC2OF /*!< Capture/Compare 2 overcapture flag */ +#define LL_TIM_SR_CC3OF TIM_SR_CC3OF /*!< Capture/Compare 3 overcapture flag */ +#define LL_TIM_SR_CC4OF TIM_SR_CC4OF /*!< Capture/Compare 4 overcapture flag */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup TIM_LL_EC_BREAK_ENABLE Break Enable + * @{ + */ +#define LL_TIM_BREAK_DISABLE 0x00000000U /*!< Break function disabled */ +#define LL_TIM_BREAK_ENABLE TIM_BDTR_BKE /*!< Break function enabled */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_AUTOMATICOUTPUT_ENABLE Automatic output enable + * @{ + */ +#define LL_TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */ +#define LL_TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** @defgroup TIM_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_TIM_ReadReg and LL_TIM_WriteReg functions. + * @{ + */ +#define LL_TIM_DIER_UIE TIM_DIER_UIE /*!< Update interrupt enable */ +#define LL_TIM_DIER_CC1IE TIM_DIER_CC1IE /*!< Capture/compare 1 interrupt enable */ +#define LL_TIM_DIER_CC2IE TIM_DIER_CC2IE /*!< Capture/compare 2 interrupt enable */ +#define LL_TIM_DIER_CC3IE TIM_DIER_CC3IE /*!< Capture/compare 3 interrupt enable */ +#define LL_TIM_DIER_CC4IE TIM_DIER_CC4IE /*!< Capture/compare 4 interrupt enable */ +#define LL_TIM_DIER_COMIE TIM_DIER_COMIE /*!< COM interrupt enable */ +#define LL_TIM_DIER_TIE TIM_DIER_TIE /*!< Trigger interrupt enable */ +#define LL_TIM_DIER_BIE TIM_DIER_BIE /*!< Break interrupt enable */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_UPDATESOURCE Update Source + * @{ + */ +#define LL_TIM_UPDATESOURCE_REGULAR 0x00000000U /*!< Counter overflow/underflow, Setting the UG bit or Update generation through the slave mode controller generates an update request */ +#define LL_TIM_UPDATESOURCE_COUNTER TIM_CR1_URS /*!< Only counter overflow/underflow generates an update request */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_ONEPULSEMODE One Pulse Mode + * @{ + */ +#define LL_TIM_ONEPULSEMODE_SINGLE TIM_CR1_OPM /*!< Counter stops counting at the next update event */ +#define LL_TIM_ONEPULSEMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_COUNTERMODE Counter Mode + * @{ + */ +#define LL_TIM_COUNTERMODE_UP 0x00000000U /*!< Counter used as upcounter */ +#define LL_TIM_COUNTERMODE_DOWN TIM_CR1_DIR /*!< Counter used as downcounter */ +#define LL_TIM_COUNTERMODE_CENTER_DOWN TIM_CR1_CMS_0 /*!< The counter counts up and down alternatively. Output compare interrupt flags of output channels are set only when the counter is counting down. */ +#define LL_TIM_COUNTERMODE_CENTER_UP TIM_CR1_CMS_1 /*!< The counter counts up and down alternatively. Output compare interrupt flags of output channels are set only when the counter is counting up */ +#define LL_TIM_COUNTERMODE_CENTER_UP_DOWN TIM_CR1_CMS /*!< The counter counts up and down alternatively. Output compare interrupt flags of output channels are set only when the counter is counting up or down. */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_CLOCKDIVISION Clock Division + * @{ + */ +#define LL_TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< tDTS=tCK_INT */ +#define LL_TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< tDTS=2*tCK_INT */ +#define LL_TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< tDTS=4*tCK_INT */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_COUNTERDIRECTION Counter Direction + * @{ + */ +#define LL_TIM_COUNTERDIRECTION_UP 0x00000000U /*!< Timer counter counts up */ +#define LL_TIM_COUNTERDIRECTION_DOWN TIM_CR1_DIR /*!< Timer counter counts down */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_CCUPDATESOURCE Capture Compare Update Source + * @{ + */ +#define LL_TIM_CCUPDATESOURCE_COMG_ONLY 0x00000000U /*!< Capture/compare control bits are updated by setting the COMG bit only */ +#define LL_TIM_CCUPDATESOURCE_COMG_AND_TRGI TIM_CR2_CCUS /*!< Capture/compare control bits are updated by setting the COMG bit or when a rising edge occurs on trigger input (TRGI) */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_CCDMAREQUEST Capture Compare DMA Request + * @{ + */ +#define LL_TIM_CCDMAREQUEST_CC 0x00000000U /*!< CCx DMA request sent when CCx event occurs */ +#define LL_TIM_CCDMAREQUEST_UPDATE TIM_CR2_CCDS /*!< CCx DMA requests sent when update event occurs */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_LOCKLEVEL Lock Level + * @{ + */ +#define LL_TIM_LOCKLEVEL_OFF 0x00000000U /*!< LOCK OFF - No bit is write protected */ +#define LL_TIM_LOCKLEVEL_1 TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */ +#define LL_TIM_LOCKLEVEL_2 TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */ +#define LL_TIM_LOCKLEVEL_3 TIM_BDTR_LOCK /*!< LOCK Level 3 */ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_CHANNEL Channel + * @{ + */ +#define LL_TIM_CHANNEL_CH1 TIM_CCER_CC1E /*!< Timer input/output channel 1 */ +#define LL_TIM_CHANNEL_CH1N TIM_CCER_CC1NE /*!< Timer complementary output channel 1 */ +#define LL_TIM_CHANNEL_CH2 TIM_CCER_CC2E /*!< Timer input/output channel 2 */ +#define LL_TIM_CHANNEL_CH2N TIM_CCER_CC2NE /*!< Timer complementary output channel 2 */ +#define LL_TIM_CHANNEL_CH3 TIM_CCER_CC3E /*!< Timer input/output channel 3 */ +#define LL_TIM_CHANNEL_CH3N TIM_CCER_CC3NE /*!< Timer complementary output channel 3 */ +#define LL_TIM_CHANNEL_CH4 TIM_CCER_CC4E /*!< Timer input/output channel 4 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup TIM_LL_EC_OCSTATE Output Configuration State + * @{ + */ +#define LL_TIM_OCSTATE_DISABLE 0x00000000U /*!< OCx is not active */ +#define LL_TIM_OCSTATE_ENABLE TIM_CCER_CC1E /*!< OCx signal is output on the corresponding output pin */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** @defgroup TIM_LL_EC_OCMODE Output Configuration Mode + * @{ + */ +#define LL_TIM_OCMODE_FROZEN 0x00000000U /*!TIMx_CCRy else active.*/ +#define LL_TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!TIMx_CCRy else inactive*/ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_OCPOLARITY Output Configuration Polarity + * @{ + */ +#define LL_TIM_OCPOLARITY_HIGH 0x00000000U /*!< OCxactive high*/ +#define LL_TIM_OCPOLARITY_LOW TIM_CCER_CC1P /*!< OCxactive low*/ +/** + * @} + */ + +/** @defgroup TIM_LL_EC_OCIDLESTATE Output Configuration Idle State + * @{ + */ +#define LL_TIM_OCIDLESTATE_LOW 0x00000000U /*!__REG__, (__VALUE__)) + +/** + * @brief Read a value in TIM register. + * @param __INSTANCE__ TIM Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_TIM_ReadReg(__INSTANCE__, __REG__) READ_REG((__INSTANCE__)->__REG__) +/** + * @} + */ + +/** + * @brief HELPER macro calculating DTG[0:7] in the TIMx_BDTR register to achieve the requested dead time duration. + * @note ex: @ref __LL_TIM_CALC_DEADTIME (80000000, @ref LL_TIM_GetClockDivision (), 120); + * @param __TIMCLK__ timer input clock frequency (in Hz) + * @param __CKD__ This parameter can be one of the following values: + * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 + * @param __DT__ deadtime duration (in ns) + * @retval DTG[0:7] + */ +#define __LL_TIM_CALC_DEADTIME(__TIMCLK__, __CKD__, __DT__) \ + ( (((uint64_t)((__DT__)*1000U)) < ((DT_DELAY_1+1U) * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ + (uint8_t)(((uint64_t)((__DT__)*1000U) / TIM_CALC_DTS((__TIMCLK__), (__CKD__))) & DT_DELAY_1) : \ + (((uint64_t)((__DT__)*1000U)) < ((64U + (DT_DELAY_2+1U)) * 2U * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ + (uint8_t)(DT_RANGE_2 | ((uint8_t)((uint8_t)((((uint64_t)((__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), \ + (__CKD__))) >> 1U) - (uint8_t) 64) & DT_DELAY_2)) :\ + (((uint64_t)((__DT__)*1000U)) < ((32U + (DT_DELAY_3+1U)) * 8U * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ + (uint8_t)(DT_RANGE_3 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), \ + (__CKD__))) >> 3U) - (uint8_t) 32) & DT_DELAY_3)) :\ + (((uint64_t)((__DT__)*1000U)) < ((32U + (DT_DELAY_4+1U)) * 16U * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ + (uint8_t)(DT_RANGE_4 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), \ + (__CKD__))) >> 4U) - (uint8_t) 32) & DT_DELAY_4)) :\ + 0U) + +/** + * @brief HELPER macro calculating the prescaler value to achieve the required counter clock frequency. + * @note ex: @ref __LL_TIM_CALC_PSC (80000000, 1000000); + * @param __TIMCLK__ timer input clock frequency (in Hz) + * @param __CNTCLK__ counter clock frequency (in Hz) + * @retval Prescaler value (between Min_Data=0 and Max_Data=65535) + */ +#define __LL_TIM_CALC_PSC(__TIMCLK__, __CNTCLK__) \ + (((__TIMCLK__) >= (__CNTCLK__)) ? (uint32_t)((((__TIMCLK__) + (__CNTCLK__)/2U)/(__CNTCLK__)) - 1U) : 0U) + +/** + * @brief HELPER macro calculating the auto-reload value to achieve the required output signal frequency. + * @note ex: @ref __LL_TIM_CALC_ARR (1000000, @ref LL_TIM_GetPrescaler (), 10000); + * @param __TIMCLK__ timer input clock frequency (in Hz) + * @param __PSC__ prescaler + * @param __FREQ__ output signal frequency (in Hz) + * @retval Auto-reload value (between Min_Data=0 and Max_Data=65535) + */ +#define __LL_TIM_CALC_ARR(__TIMCLK__, __PSC__, __FREQ__) \ + ((((__TIMCLK__)/((__PSC__) + 1U)) >= (__FREQ__)) ? (((__TIMCLK__)/((__FREQ__) * ((__PSC__) + 1U))) - 1U) : 0U) + +/** + * @brief HELPER macro calculating the compare value required to achieve the required timer output compare + * active/inactive delay. + * @note ex: @ref __LL_TIM_CALC_DELAY (1000000, @ref LL_TIM_GetPrescaler (), 10); + * @param __TIMCLK__ timer input clock frequency (in Hz) + * @param __PSC__ prescaler + * @param __DELAY__ timer output compare active/inactive delay (in us) + * @retval Compare value (between Min_Data=0 and Max_Data=65535) + */ +#define __LL_TIM_CALC_DELAY(__TIMCLK__, __PSC__, __DELAY__) \ + ((uint32_t)(((uint64_t)(__TIMCLK__) * (uint64_t)(__DELAY__)) \ + / ((uint64_t)1000000U * (uint64_t)((__PSC__) + 1U)))) + +/** + * @brief HELPER macro calculating the auto-reload value to achieve the required pulse duration + * (when the timer operates in one pulse mode). + * @note ex: @ref __LL_TIM_CALC_PULSE (1000000, @ref LL_TIM_GetPrescaler (), 10, 20); + * @param __TIMCLK__ timer input clock frequency (in Hz) + * @param __PSC__ prescaler + * @param __DELAY__ timer output compare active/inactive delay (in us) + * @param __PULSE__ pulse duration (in us) + * @retval Auto-reload value (between Min_Data=0 and Max_Data=65535) + */ +#define __LL_TIM_CALC_PULSE(__TIMCLK__, __PSC__, __DELAY__, __PULSE__) \ + ((uint32_t)(__LL_TIM_CALC_DELAY((__TIMCLK__), (__PSC__), (__PULSE__)) \ + + __LL_TIM_CALC_DELAY((__TIMCLK__), (__PSC__), (__DELAY__)))) + +/** + * @brief HELPER macro retrieving the ratio of the input capture prescaler + * @note ex: @ref __LL_TIM_GET_ICPSC_RATIO (@ref LL_TIM_IC_GetPrescaler ()); + * @param __ICPSC__ This parameter can be one of the following values: + * @arg @ref LL_TIM_ICPSC_DIV1 + * @arg @ref LL_TIM_ICPSC_DIV2 + * @arg @ref LL_TIM_ICPSC_DIV4 + * @arg @ref LL_TIM_ICPSC_DIV8 + * @retval Input capture prescaler ratio (1, 2, 4 or 8) + */ +#define __LL_TIM_GET_ICPSC_RATIO(__ICPSC__) \ + ((uint32_t)(0x01U << (((__ICPSC__) >> 16U) >> TIM_CCMR1_IC1PSC_Pos))) + + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup TIM_LL_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @defgroup TIM_LL_EF_Time_Base Time Base configuration + * @{ + */ +/** + * @brief Enable timer counter. + * @rmtoll CR1 CEN LL_TIM_EnableCounter + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableCounter(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->CR1, TIM_CR1_CEN); +} + +/** + * @brief Disable timer counter. + * @rmtoll CR1 CEN LL_TIM_DisableCounter + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableCounter(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->CR1, TIM_CR1_CEN); +} + +/** + * @brief Indicates whether the timer counter is enabled. + * @rmtoll CR1 CEN LL_TIM_IsEnabledCounter + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledCounter(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->CR1, TIM_CR1_CEN) == (TIM_CR1_CEN)) ? 1UL : 0UL); +} + +/** + * @brief Enable update event generation. + * @rmtoll CR1 UDIS LL_TIM_EnableUpdateEvent + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableUpdateEvent(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->CR1, TIM_CR1_UDIS); +} + +/** + * @brief Disable update event generation. + * @rmtoll CR1 UDIS LL_TIM_DisableUpdateEvent + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableUpdateEvent(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->CR1, TIM_CR1_UDIS); +} + +/** + * @brief Indicates whether update event generation is enabled. + * @rmtoll CR1 UDIS LL_TIM_IsEnabledUpdateEvent + * @param TIMx Timer instance + * @retval Inverted state of bit (0 or 1). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledUpdateEvent(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->CR1, TIM_CR1_UDIS) == (uint32_t)RESET) ? 1UL : 0UL); +} + +/** + * @brief Set update event source + * @note Update event source set to LL_TIM_UPDATESOURCE_REGULAR: any of the following events + * generate an update interrupt or DMA request if enabled: + * - Counter overflow/underflow + * - Setting the UG bit + * - Update generation through the slave mode controller + * @note Update event source set to LL_TIM_UPDATESOURCE_COUNTER: only counter + * overflow/underflow generates an update interrupt or DMA request if enabled. + * @rmtoll CR1 URS LL_TIM_SetUpdateSource + * @param TIMx Timer instance + * @param UpdateSource This parameter can be one of the following values: + * @arg @ref LL_TIM_UPDATESOURCE_REGULAR + * @arg @ref LL_TIM_UPDATESOURCE_COUNTER + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetUpdateSource(TIM_TypeDef *TIMx, uint32_t UpdateSource) +{ + MODIFY_REG(TIMx->CR1, TIM_CR1_URS, UpdateSource); +} + +/** + * @brief Get actual event update source + * @rmtoll CR1 URS LL_TIM_GetUpdateSource + * @param TIMx Timer instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_UPDATESOURCE_REGULAR + * @arg @ref LL_TIM_UPDATESOURCE_COUNTER + */ +__STATIC_INLINE uint32_t LL_TIM_GetUpdateSource(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_URS)); +} + +/** + * @brief Set one pulse mode (one shot v.s. repetitive). + * @rmtoll CR1 OPM LL_TIM_SetOnePulseMode + * @param TIMx Timer instance + * @param OnePulseMode This parameter can be one of the following values: + * @arg @ref LL_TIM_ONEPULSEMODE_SINGLE + * @arg @ref LL_TIM_ONEPULSEMODE_REPETITIVE + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetOnePulseMode(TIM_TypeDef *TIMx, uint32_t OnePulseMode) +{ + MODIFY_REG(TIMx->CR1, TIM_CR1_OPM, OnePulseMode); +} + +/** + * @brief Get actual one pulse mode. + * @rmtoll CR1 OPM LL_TIM_GetOnePulseMode + * @param TIMx Timer instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_ONEPULSEMODE_SINGLE + * @arg @ref LL_TIM_ONEPULSEMODE_REPETITIVE + */ +__STATIC_INLINE uint32_t LL_TIM_GetOnePulseMode(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_OPM)); +} + +/** + * @brief Set the timer counter counting mode. + * @note Macro IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx) can be used to + * check whether or not the counter mode selection feature is supported + * by a timer instance. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * @rmtoll CR1 DIR LL_TIM_SetCounterMode\n + * CR1 CMS LL_TIM_SetCounterMode + * @param TIMx Timer instance + * @param CounterMode This parameter can be one of the following values: + * @arg @ref LL_TIM_COUNTERMODE_UP + * @arg @ref LL_TIM_COUNTERMODE_DOWN + * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP + * @arg @ref LL_TIM_COUNTERMODE_CENTER_DOWN + * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP_DOWN + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetCounterMode(TIM_TypeDef *TIMx, uint32_t CounterMode) +{ + MODIFY_REG(TIMx->CR1, (TIM_CR1_DIR | TIM_CR1_CMS), CounterMode); +} + +/** + * @brief Get actual counter mode. + * @note Macro IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx) can be used to + * check whether or not the counter mode selection feature is supported + * by a timer instance. + * @rmtoll CR1 DIR LL_TIM_GetCounterMode\n + * CR1 CMS LL_TIM_GetCounterMode + * @param TIMx Timer instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_COUNTERMODE_UP + * @arg @ref LL_TIM_COUNTERMODE_DOWN + * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP + * @arg @ref LL_TIM_COUNTERMODE_CENTER_DOWN + * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP_DOWN + */ +__STATIC_INLINE uint32_t LL_TIM_GetCounterMode(const TIM_TypeDef *TIMx) +{ + uint32_t counter_mode; + + counter_mode = (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_CMS)); + + if (counter_mode == 0U) + { + counter_mode = (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_DIR)); + } + + return counter_mode; +} + +/** + * @brief Enable auto-reload (ARR) preload. + * @rmtoll CR1 ARPE LL_TIM_EnableARRPreload + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableARRPreload(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->CR1, TIM_CR1_ARPE); +} + +/** + * @brief Disable auto-reload (ARR) preload. + * @rmtoll CR1 ARPE LL_TIM_DisableARRPreload + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableARRPreload(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->CR1, TIM_CR1_ARPE); +} + +/** + * @brief Indicates whether auto-reload (ARR) preload is enabled. + * @rmtoll CR1 ARPE LL_TIM_IsEnabledARRPreload + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledARRPreload(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->CR1, TIM_CR1_ARPE) == (TIM_CR1_ARPE)) ? 1UL : 0UL); +} + +/** + * @brief Set the division ratio between the timer clock and the sampling clock used by the dead-time generators + * (when supported) and the digital filters. + * @note Macro IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx) can be used to check + * whether or not the clock division feature is supported by the timer + * instance. + * @rmtoll CR1 CKD LL_TIM_SetClockDivision + * @param TIMx Timer instance + * @param ClockDivision This parameter can be one of the following values: + * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetClockDivision(TIM_TypeDef *TIMx, uint32_t ClockDivision) +{ + MODIFY_REG(TIMx->CR1, TIM_CR1_CKD, ClockDivision); +} + +/** + * @brief Get the actual division ratio between the timer clock and the sampling clock used by the dead-time + * generators (when supported) and the digital filters. + * @note Macro IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx) can be used to check + * whether or not the clock division feature is supported by the timer + * instance. + * @rmtoll CR1 CKD LL_TIM_GetClockDivision + * @param TIMx Timer instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 + * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 + */ +__STATIC_INLINE uint32_t LL_TIM_GetClockDivision(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_CKD)); +} + +/** + * @brief Set the counter value. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @rmtoll CNT CNT LL_TIM_SetCounter + * @param TIMx Timer instance + * @param Counter Counter value (between Min_Data=0 and Max_Data=0xFFFF or 0xFFFFFFFF) + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetCounter(TIM_TypeDef *TIMx, uint32_t Counter) +{ + WRITE_REG(TIMx->CNT, Counter); +} + +/** + * @brief Get the counter value. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @rmtoll CNT CNT LL_TIM_GetCounter + * @param TIMx Timer instance + * @retval Counter value (between Min_Data=0 and Max_Data=0xFFFF or 0xFFFFFFFF) + */ +__STATIC_INLINE uint32_t LL_TIM_GetCounter(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CNT)); +} + +/** + * @brief Get the current direction of the counter + * @rmtoll CR1 DIR LL_TIM_GetDirection + * @param TIMx Timer instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_COUNTERDIRECTION_UP + * @arg @ref LL_TIM_COUNTERDIRECTION_DOWN + */ +__STATIC_INLINE uint32_t LL_TIM_GetDirection(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_DIR)); +} + +/** + * @brief Set the prescaler value. + * @note The counter clock frequency CK_CNT is equal to fCK_PSC / (PSC[15:0] + 1). + * @note The prescaler can be changed on the fly as this control register is buffered. The new + * prescaler ratio is taken into account at the next update event. + * @note Helper macro @ref __LL_TIM_CALC_PSC can be used to calculate the Prescaler parameter + * @rmtoll PSC PSC LL_TIM_SetPrescaler + * @param TIMx Timer instance + * @param Prescaler between Min_Data=0 and Max_Data=65535 + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetPrescaler(TIM_TypeDef *TIMx, uint32_t Prescaler) +{ + WRITE_REG(TIMx->PSC, Prescaler); +} + +/** + * @brief Get the prescaler value. + * @rmtoll PSC PSC LL_TIM_GetPrescaler + * @param TIMx Timer instance + * @retval Prescaler value between Min_Data=0 and Max_Data=65535 + */ +__STATIC_INLINE uint32_t LL_TIM_GetPrescaler(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->PSC)); +} + +/** + * @brief Set the auto-reload value. + * @note The counter is blocked while the auto-reload value is null. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Helper macro @ref __LL_TIM_CALC_ARR can be used to calculate the AutoReload parameter + * @rmtoll ARR ARR LL_TIM_SetAutoReload + * @param TIMx Timer instance + * @param AutoReload between Min_Data=0 and Max_Data=65535 + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetAutoReload(TIM_TypeDef *TIMx, uint32_t AutoReload) +{ + WRITE_REG(TIMx->ARR, AutoReload); +} + +/** + * @brief Get the auto-reload value. + * @rmtoll ARR ARR LL_TIM_GetAutoReload + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @param TIMx Timer instance + * @retval Auto-reload value + */ +__STATIC_INLINE uint32_t LL_TIM_GetAutoReload(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->ARR)); +} + +/** + * @brief Set the repetition counter value. + * @note Macro IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a repetition counter. + * @rmtoll RCR REP LL_TIM_SetRepetitionCounter + * @param TIMx Timer instance + * @param RepetitionCounter between Min_Data=0 and Max_Data=255 or 65535 for advanced timer. + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetRepetitionCounter(TIM_TypeDef *TIMx, uint32_t RepetitionCounter) +{ + WRITE_REG(TIMx->RCR, RepetitionCounter); +} + +/** + * @brief Get the repetition counter value. + * @note Macro IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a repetition counter. + * @rmtoll RCR REP LL_TIM_GetRepetitionCounter + * @param TIMx Timer instance + * @retval Repetition counter value + */ +__STATIC_INLINE uint32_t LL_TIM_GetRepetitionCounter(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->RCR)); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Capture_Compare Capture Compare configuration + * @{ + */ +/** + * @brief Enable the capture/compare control bits (CCxE, CCxNE and OCxM) preload. + * @note CCxE, CCxNE and OCxM bits are preloaded, after having been written, + * they are updated only when a commutation event (COM) occurs. + * @note Only on channels that have a complementary output. + * @note Macro IS_TIM_COMMUTATION_EVENT_INSTANCE(TIMx) can be used to check + * whether or not a timer instance is able to generate a commutation event. + * @rmtoll CR2 CCPC LL_TIM_CC_EnablePreload + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_EnablePreload(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->CR2, TIM_CR2_CCPC); +} + +/** + * @brief Disable the capture/compare control bits (CCxE, CCxNE and OCxM) preload. + * @note Macro IS_TIM_COMMUTATION_EVENT_INSTANCE(TIMx) can be used to check + * whether or not a timer instance is able to generate a commutation event. + * @rmtoll CR2 CCPC LL_TIM_CC_DisablePreload + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_DisablePreload(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->CR2, TIM_CR2_CCPC); +} + +/** + * @brief Indicates whether the capture/compare control bits (CCxE, CCxNE and OCxM) preload is enabled. + * @rmtoll CR2 CCPC LL_TIM_CC_IsEnabledPreload + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_CC_IsEnabledPreload(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->CR2, TIM_CR2_CCPC) == (TIM_CR2_CCPC)) ? 1UL : 0UL); +} + +/** + * @brief Set the updated source of the capture/compare control bits (CCxE, CCxNE and OCxM). + * @note Macro IS_TIM_COMMUTATION_EVENT_INSTANCE(TIMx) can be used to check + * whether or not a timer instance is able to generate a commutation event. + * @rmtoll CR2 CCUS LL_TIM_CC_SetUpdate + * @param TIMx Timer instance + * @param CCUpdateSource This parameter can be one of the following values: + * @arg @ref LL_TIM_CCUPDATESOURCE_COMG_ONLY + * @arg @ref LL_TIM_CCUPDATESOURCE_COMG_AND_TRGI + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_SetUpdate(TIM_TypeDef *TIMx, uint32_t CCUpdateSource) +{ + MODIFY_REG(TIMx->CR2, TIM_CR2_CCUS, CCUpdateSource); +} + +/** + * @brief Set the trigger of the capture/compare DMA request. + * @rmtoll CR2 CCDS LL_TIM_CC_SetDMAReqTrigger + * @param TIMx Timer instance + * @param DMAReqTrigger This parameter can be one of the following values: + * @arg @ref LL_TIM_CCDMAREQUEST_CC + * @arg @ref LL_TIM_CCDMAREQUEST_UPDATE + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_SetDMAReqTrigger(TIM_TypeDef *TIMx, uint32_t DMAReqTrigger) +{ + MODIFY_REG(TIMx->CR2, TIM_CR2_CCDS, DMAReqTrigger); +} + +/** + * @brief Get actual trigger of the capture/compare DMA request. + * @rmtoll CR2 CCDS LL_TIM_CC_GetDMAReqTrigger + * @param TIMx Timer instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_CCDMAREQUEST_CC + * @arg @ref LL_TIM_CCDMAREQUEST_UPDATE + */ +__STATIC_INLINE uint32_t LL_TIM_CC_GetDMAReqTrigger(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_BIT(TIMx->CR2, TIM_CR2_CCDS)); +} + +/** + * @brief Set the lock level to freeze the + * configuration of several capture/compare parameters. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * the lock mechanism is supported by a timer instance. + * @rmtoll BDTR LOCK LL_TIM_CC_SetLockLevel + * @param TIMx Timer instance + * @param LockLevel This parameter can be one of the following values: + * @arg @ref LL_TIM_LOCKLEVEL_OFF + * @arg @ref LL_TIM_LOCKLEVEL_1 + * @arg @ref LL_TIM_LOCKLEVEL_2 + * @arg @ref LL_TIM_LOCKLEVEL_3 + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_SetLockLevel(TIM_TypeDef *TIMx, uint32_t LockLevel) +{ + MODIFY_REG(TIMx->BDTR, TIM_BDTR_LOCK, LockLevel); +} + +/** + * @brief Enable capture/compare channels. + * @rmtoll CCER CC1E LL_TIM_CC_EnableChannel\n + * CCER CC1NE LL_TIM_CC_EnableChannel\n + * CCER CC2E LL_TIM_CC_EnableChannel\n + * CCER CC2NE LL_TIM_CC_EnableChannel\n + * CCER CC3E LL_TIM_CC_EnableChannel\n + * CCER CC3NE LL_TIM_CC_EnableChannel\n + * CCER CC4E LL_TIM_CC_EnableChannel + * @param TIMx Timer instance + * @param Channels This parameter can be a combination of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_EnableChannel(TIM_TypeDef *TIMx, uint32_t Channels) +{ + SET_BIT(TIMx->CCER, Channels); +} + +/** + * @brief Disable capture/compare channels. + * @rmtoll CCER CC1E LL_TIM_CC_DisableChannel\n + * CCER CC1NE LL_TIM_CC_DisableChannel\n + * CCER CC2E LL_TIM_CC_DisableChannel\n + * CCER CC2NE LL_TIM_CC_DisableChannel\n + * CCER CC3E LL_TIM_CC_DisableChannel\n + * CCER CC3NE LL_TIM_CC_DisableChannel\n + * CCER CC4E LL_TIM_CC_DisableChannel + * @param TIMx Timer instance + * @param Channels This parameter can be a combination of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_CC_DisableChannel(TIM_TypeDef *TIMx, uint32_t Channels) +{ + CLEAR_BIT(TIMx->CCER, Channels); +} + +/** + * @brief Indicate whether channel(s) is(are) enabled. + * @rmtoll CCER CC1E LL_TIM_CC_IsEnabledChannel\n + * CCER CC1NE LL_TIM_CC_IsEnabledChannel\n + * CCER CC2E LL_TIM_CC_IsEnabledChannel\n + * CCER CC2NE LL_TIM_CC_IsEnabledChannel\n + * CCER CC3E LL_TIM_CC_IsEnabledChannel\n + * CCER CC3NE LL_TIM_CC_IsEnabledChannel\n + * CCER CC4E LL_TIM_CC_IsEnabledChannel + * @param TIMx Timer instance + * @param Channels This parameter can be a combination of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_CC_IsEnabledChannel(const TIM_TypeDef *TIMx, uint32_t Channels) +{ + return ((READ_BIT(TIMx->CCER, Channels) == (Channels)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Output_Channel Output channel configuration + * @{ + */ +/** + * @brief Configure an output channel. + * @rmtoll CCMR1 CC1S LL_TIM_OC_ConfigOutput\n + * CCMR1 CC2S LL_TIM_OC_ConfigOutput\n + * CCMR2 CC3S LL_TIM_OC_ConfigOutput\n + * CCMR2 CC4S LL_TIM_OC_ConfigOutput\n + * CCER CC1P LL_TIM_OC_ConfigOutput\n + * CCER CC2P LL_TIM_OC_ConfigOutput\n + * CCER CC3P LL_TIM_OC_ConfigOutput\n + * CCER CC4P LL_TIM_OC_ConfigOutput\n + * CR2 OIS1 LL_TIM_OC_ConfigOutput\n + * CR2 OIS2 LL_TIM_OC_ConfigOutput\n + * CR2 OIS3 LL_TIM_OC_ConfigOutput\n + * CR2 OIS4 LL_TIM_OC_ConfigOutput + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param Configuration This parameter must be a combination of all the following values: + * @arg @ref LL_TIM_OCPOLARITY_HIGH or @ref LL_TIM_OCPOLARITY_LOW + * @arg @ref LL_TIM_OCIDLESTATE_LOW or @ref LL_TIM_OCIDLESTATE_HIGH + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_ConfigOutput(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Configuration) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + CLEAR_BIT(*pReg, (TIM_CCMR1_CC1S << SHIFT_TAB_OCxx[iChannel])); + MODIFY_REG(TIMx->CCER, (TIM_CCER_CC1P << SHIFT_TAB_CCxP[iChannel]), + (Configuration & TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel]); + MODIFY_REG(TIMx->CR2, (TIM_CR2_OIS1 << SHIFT_TAB_OISx[iChannel]), + (Configuration & TIM_CR2_OIS1) << SHIFT_TAB_OISx[iChannel]); +} + +/** + * @brief Define the behavior of the output reference signal OCxREF from which + * OCx and OCxN (when relevant) are derived. + * @rmtoll CCMR1 OC1M LL_TIM_OC_SetMode\n + * CCMR1 OC2M LL_TIM_OC_SetMode\n + * CCMR2 OC3M LL_TIM_OC_SetMode\n + * CCMR2 OC4M LL_TIM_OC_SetMode + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_TIM_OCMODE_FROZEN + * @arg @ref LL_TIM_OCMODE_ACTIVE + * @arg @ref LL_TIM_OCMODE_INACTIVE + * @arg @ref LL_TIM_OCMODE_TOGGLE + * @arg @ref LL_TIM_OCMODE_FORCED_INACTIVE + * @arg @ref LL_TIM_OCMODE_FORCED_ACTIVE + * @arg @ref LL_TIM_OCMODE_PWM1 + * @arg @ref LL_TIM_OCMODE_PWM2 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetMode(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Mode) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + MODIFY_REG(*pReg, ((TIM_CCMR1_OC1M | TIM_CCMR1_CC1S) << SHIFT_TAB_OCxx[iChannel]), Mode << SHIFT_TAB_OCxx[iChannel]); +} + +/** + * @brief Get the output compare mode of an output channel. + * @rmtoll CCMR1 OC1M LL_TIM_OC_GetMode\n + * CCMR1 OC2M LL_TIM_OC_GetMode\n + * CCMR2 OC3M LL_TIM_OC_GetMode\n + * CCMR2 OC4M LL_TIM_OC_GetMode + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_OCMODE_FROZEN + * @arg @ref LL_TIM_OCMODE_ACTIVE + * @arg @ref LL_TIM_OCMODE_INACTIVE + * @arg @ref LL_TIM_OCMODE_TOGGLE + * @arg @ref LL_TIM_OCMODE_FORCED_INACTIVE + * @arg @ref LL_TIM_OCMODE_FORCED_ACTIVE + * @arg @ref LL_TIM_OCMODE_PWM1 + * @arg @ref LL_TIM_OCMODE_PWM2 + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetMode(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + return (READ_BIT(*pReg, ((TIM_CCMR1_OC1M | TIM_CCMR1_CC1S) << SHIFT_TAB_OCxx[iChannel])) >> SHIFT_TAB_OCxx[iChannel]); +} + +/** + * @brief Set the polarity of an output channel. + * @rmtoll CCER CC1P LL_TIM_OC_SetPolarity\n + * CCER CC1NP LL_TIM_OC_SetPolarity\n + * CCER CC2P LL_TIM_OC_SetPolarity\n + * CCER CC2NP LL_TIM_OC_SetPolarity\n + * CCER CC3P LL_TIM_OC_SetPolarity\n + * CCER CC3NP LL_TIM_OC_SetPolarity\n + * CCER CC4P LL_TIM_OC_SetPolarity + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_TIM_OCPOLARITY_HIGH + * @arg @ref LL_TIM_OCPOLARITY_LOW + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetPolarity(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Polarity) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + MODIFY_REG(TIMx->CCER, (TIM_CCER_CC1P << SHIFT_TAB_CCxP[iChannel]), Polarity << SHIFT_TAB_CCxP[iChannel]); +} + +/** + * @brief Get the polarity of an output channel. + * @rmtoll CCER CC1P LL_TIM_OC_GetPolarity\n + * CCER CC1NP LL_TIM_OC_GetPolarity\n + * CCER CC2P LL_TIM_OC_GetPolarity\n + * CCER CC2NP LL_TIM_OC_GetPolarity\n + * CCER CC3P LL_TIM_OC_GetPolarity\n + * CCER CC3NP LL_TIM_OC_GetPolarity\n + * CCER CC4P LL_TIM_OC_GetPolarity + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_OCPOLARITY_HIGH + * @arg @ref LL_TIM_OCPOLARITY_LOW + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetPolarity(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + return (READ_BIT(TIMx->CCER, (TIM_CCER_CC1P << SHIFT_TAB_CCxP[iChannel])) >> SHIFT_TAB_CCxP[iChannel]); +} + +/** + * @brief Set the IDLE state of an output channel + * @note This function is significant only for the timer instances + * supporting the break feature. Macro IS_TIM_BREAK_INSTANCE(TIMx) + * can be used to check whether or not a timer instance provides + * a break input. + * @rmtoll CR2 OIS1 LL_TIM_OC_SetIdleState\n + * CR2 OIS1N LL_TIM_OC_SetIdleState\n + * CR2 OIS2 LL_TIM_OC_SetIdleState\n + * CR2 OIS2N LL_TIM_OC_SetIdleState\n + * CR2 OIS3 LL_TIM_OC_SetIdleState\n + * CR2 OIS3N LL_TIM_OC_SetIdleState\n + * CR2 OIS4 LL_TIM_OC_SetIdleState + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param IdleState This parameter can be one of the following values: + * @arg @ref LL_TIM_OCIDLESTATE_LOW + * @arg @ref LL_TIM_OCIDLESTATE_HIGH + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetIdleState(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t IdleState) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + MODIFY_REG(TIMx->CR2, (TIM_CR2_OIS1 << SHIFT_TAB_OISx[iChannel]), IdleState << SHIFT_TAB_OISx[iChannel]); +} + +/** + * @brief Get the IDLE state of an output channel + * @rmtoll CR2 OIS1 LL_TIM_OC_GetIdleState\n + * CR2 OIS1N LL_TIM_OC_GetIdleState\n + * CR2 OIS2 LL_TIM_OC_GetIdleState\n + * CR2 OIS2N LL_TIM_OC_GetIdleState\n + * CR2 OIS3 LL_TIM_OC_GetIdleState\n + * CR2 OIS3N LL_TIM_OC_GetIdleState\n + * CR2 OIS4 LL_TIM_OC_GetIdleState + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH1N + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH2N + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH3N + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_OCIDLESTATE_LOW + * @arg @ref LL_TIM_OCIDLESTATE_HIGH + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetIdleState(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + return (READ_BIT(TIMx->CR2, (TIM_CR2_OIS1 << SHIFT_TAB_OISx[iChannel])) >> SHIFT_TAB_OISx[iChannel]); +} + +/** + * @brief Enable fast mode for the output channel. + * @note Acts only if the channel is configured in PWM1 or PWM2 mode. + * @rmtoll CCMR1 OC1FE LL_TIM_OC_EnableFast\n + * CCMR1 OC2FE LL_TIM_OC_EnableFast\n + * CCMR2 OC3FE LL_TIM_OC_EnableFast\n + * CCMR2 OC4FE LL_TIM_OC_EnableFast + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_EnableFast(TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + SET_BIT(*pReg, (TIM_CCMR1_OC1FE << SHIFT_TAB_OCxx[iChannel])); + +} + +/** + * @brief Disable fast mode for the output channel. + * @rmtoll CCMR1 OC1FE LL_TIM_OC_DisableFast\n + * CCMR1 OC2FE LL_TIM_OC_DisableFast\n + * CCMR2 OC3FE LL_TIM_OC_DisableFast\n + * CCMR2 OC4FE LL_TIM_OC_DisableFast + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_DisableFast(TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + CLEAR_BIT(*pReg, (TIM_CCMR1_OC1FE << SHIFT_TAB_OCxx[iChannel])); + +} + +/** + * @brief Indicates whether fast mode is enabled for the output channel. + * @rmtoll CCMR1 OC1FE LL_TIM_OC_IsEnabledFast\n + * CCMR1 OC2FE LL_TIM_OC_IsEnabledFast\n + * CCMR2 OC3FE LL_TIM_OC_IsEnabledFast\n + * CCMR2 OC4FE LL_TIM_OC_IsEnabledFast\n + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledFast(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + uint32_t bitfield = TIM_CCMR1_OC1FE << SHIFT_TAB_OCxx[iChannel]; + return ((READ_BIT(*pReg, bitfield) == bitfield) ? 1UL : 0UL); +} + +/** + * @brief Enable compare register (TIMx_CCRx) preload for the output channel. + * @rmtoll CCMR1 OC1PE LL_TIM_OC_EnablePreload\n + * CCMR1 OC2PE LL_TIM_OC_EnablePreload\n + * CCMR2 OC3PE LL_TIM_OC_EnablePreload\n + * CCMR2 OC4PE LL_TIM_OC_EnablePreload + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_EnablePreload(TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + SET_BIT(*pReg, (TIM_CCMR1_OC1PE << SHIFT_TAB_OCxx[iChannel])); +} + +/** + * @brief Disable compare register (TIMx_CCRx) preload for the output channel. + * @rmtoll CCMR1 OC1PE LL_TIM_OC_DisablePreload\n + * CCMR1 OC2PE LL_TIM_OC_DisablePreload\n + * CCMR2 OC3PE LL_TIM_OC_DisablePreload\n + * CCMR2 OC4PE LL_TIM_OC_DisablePreload + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_DisablePreload(TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + CLEAR_BIT(*pReg, (TIM_CCMR1_OC1PE << SHIFT_TAB_OCxx[iChannel])); +} + +/** + * @brief Indicates whether compare register (TIMx_CCRx) preload is enabled for the output channel. + * @rmtoll CCMR1 OC1PE LL_TIM_OC_IsEnabledPreload\n + * CCMR1 OC2PE LL_TIM_OC_IsEnabledPreload\n + * CCMR2 OC3PE LL_TIM_OC_IsEnabledPreload\n + * CCMR2 OC4PE LL_TIM_OC_IsEnabledPreload\n + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledPreload(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + uint32_t bitfield = TIM_CCMR1_OC1PE << SHIFT_TAB_OCxx[iChannel]; + return ((READ_BIT(*pReg, bitfield) == bitfield) ? 1UL : 0UL); +} + +/** + * @brief Enable clearing the output channel on an external event. + * @note This function can only be used in Output compare and PWM modes. It does not work in Forced mode. + * @note Macro IS_TIM_OCXREF_CLEAR_INSTANCE(TIMx) can be used to check whether + * or not a timer instance can clear the OCxREF signal on an external event. + * @rmtoll CCMR1 OC1CE LL_TIM_OC_EnableClear\n + * CCMR1 OC2CE LL_TIM_OC_EnableClear\n + * CCMR2 OC3CE LL_TIM_OC_EnableClear\n + * CCMR2 OC4CE LL_TIM_OC_EnableClear + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_EnableClear(TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + SET_BIT(*pReg, (TIM_CCMR1_OC1CE << SHIFT_TAB_OCxx[iChannel])); +} + +/** + * @brief Disable clearing the output channel on an external event. + * @note Macro IS_TIM_OCXREF_CLEAR_INSTANCE(TIMx) can be used to check whether + * or not a timer instance can clear the OCxREF signal on an external event. + * @rmtoll CCMR1 OC1CE LL_TIM_OC_DisableClear\n + * CCMR1 OC2CE LL_TIM_OC_DisableClear\n + * CCMR2 OC3CE LL_TIM_OC_DisableClear\n + * CCMR2 OC4CE LL_TIM_OC_DisableClear + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_DisableClear(TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + CLEAR_BIT(*pReg, (TIM_CCMR1_OC1CE << SHIFT_TAB_OCxx[iChannel])); +} + +/** + * @brief Indicates clearing the output channel on an external event is enabled for the output channel. + * @note This function enables clearing the output channel on an external event. + * @note This function can only be used in Output compare and PWM modes. It does not work in Forced mode. + * @note Macro IS_TIM_OCXREF_CLEAR_INSTANCE(TIMx) can be used to check whether + * or not a timer instance can clear the OCxREF signal on an external event. + * @rmtoll CCMR1 OC1CE LL_TIM_OC_IsEnabledClear\n + * CCMR1 OC2CE LL_TIM_OC_IsEnabledClear\n + * CCMR2 OC3CE LL_TIM_OC_IsEnabledClear\n + * CCMR2 OC4CE LL_TIM_OC_IsEnabledClear\n + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledClear(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + uint32_t bitfield = TIM_CCMR1_OC1CE << SHIFT_TAB_OCxx[iChannel]; + return ((READ_BIT(*pReg, bitfield) == bitfield) ? 1UL : 0UL); +} + +/** + * @brief Set the dead-time delay (delay inserted between the rising edge of the OCxREF signal and the rising edge of + * the Ocx and OCxN signals). + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * dead-time insertion feature is supported by a timer instance. + * @note Helper macro @ref __LL_TIM_CALC_DEADTIME can be used to calculate the DeadTime parameter + * @rmtoll BDTR DTG LL_TIM_OC_SetDeadTime + * @param TIMx Timer instance + * @param DeadTime between Min_Data=0 and Max_Data=255 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetDeadTime(TIM_TypeDef *TIMx, uint32_t DeadTime) +{ + MODIFY_REG(TIMx->BDTR, TIM_BDTR_DTG, DeadTime); +} + +/** + * @brief Set compare value for output channel 1 (TIMx_CCR1). + * @note In 32-bit timer implementations compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC1_INSTANCE(TIMx) can be used to check whether or not + * output channel 1 is supported by a timer instance. + * @rmtoll CCR1 CCR1 LL_TIM_OC_SetCompareCH1 + * @param TIMx Timer instance + * @param CompareValue between Min_Data=0 and Max_Data=65535 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetCompareCH1(TIM_TypeDef *TIMx, uint32_t CompareValue) +{ + WRITE_REG(TIMx->CCR1, CompareValue); +} + +/** + * @brief Set compare value for output channel 2 (TIMx_CCR2). + * @note In 32-bit timer implementations compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC2_INSTANCE(TIMx) can be used to check whether or not + * output channel 2 is supported by a timer instance. + * @rmtoll CCR2 CCR2 LL_TIM_OC_SetCompareCH2 + * @param TIMx Timer instance + * @param CompareValue between Min_Data=0 and Max_Data=65535 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetCompareCH2(TIM_TypeDef *TIMx, uint32_t CompareValue) +{ + WRITE_REG(TIMx->CCR2, CompareValue); +} + +/** + * @brief Set compare value for output channel 3 (TIMx_CCR3). + * @note In 32-bit timer implementations compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC3_INSTANCE(TIMx) can be used to check whether or not + * output channel is supported by a timer instance. + * @rmtoll CCR3 CCR3 LL_TIM_OC_SetCompareCH3 + * @param TIMx Timer instance + * @param CompareValue between Min_Data=0 and Max_Data=65535 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetCompareCH3(TIM_TypeDef *TIMx, uint32_t CompareValue) +{ + WRITE_REG(TIMx->CCR3, CompareValue); +} + +/** + * @brief Set compare value for output channel 4 (TIMx_CCR4). + * @note In 32-bit timer implementations compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC4_INSTANCE(TIMx) can be used to check whether or not + * output channel 4 is supported by a timer instance. + * @rmtoll CCR4 CCR4 LL_TIM_OC_SetCompareCH4 + * @param TIMx Timer instance + * @param CompareValue between Min_Data=0 and Max_Data=65535 + * @retval None + */ +__STATIC_INLINE void LL_TIM_OC_SetCompareCH4(TIM_TypeDef *TIMx, uint32_t CompareValue) +{ + WRITE_REG(TIMx->CCR4, CompareValue); +} + +/** + * @brief Get compare value (TIMx_CCR1) set for output channel 1. + * @note In 32-bit timer implementations returned compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC1_INSTANCE(TIMx) can be used to check whether or not + * output channel 1 is supported by a timer instance. + * @rmtoll CCR1 CCR1 LL_TIM_OC_GetCompareCH1 + * @param TIMx Timer instance + * @retval CompareValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH1(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR1)); +} + +/** + * @brief Get compare value (TIMx_CCR2) set for output channel 2. + * @note In 32-bit timer implementations returned compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC2_INSTANCE(TIMx) can be used to check whether or not + * output channel 2 is supported by a timer instance. + * @rmtoll CCR2 CCR2 LL_TIM_OC_GetCompareCH2 + * @param TIMx Timer instance + * @retval CompareValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH2(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR2)); +} + +/** + * @brief Get compare value (TIMx_CCR3) set for output channel 3. + * @note In 32-bit timer implementations returned compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC3_INSTANCE(TIMx) can be used to check whether or not + * output channel 3 is supported by a timer instance. + * @rmtoll CCR3 CCR3 LL_TIM_OC_GetCompareCH3 + * @param TIMx Timer instance + * @retval CompareValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH3(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR3)); +} + +/** + * @brief Get compare value (TIMx_CCR4) set for output channel 4. + * @note In 32-bit timer implementations returned compare value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC4_INSTANCE(TIMx) can be used to check whether or not + * output channel 4 is supported by a timer instance. + * @rmtoll CCR4 CCR4 LL_TIM_OC_GetCompareCH4 + * @param TIMx Timer instance + * @retval CompareValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH4(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR4)); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Input_Channel Input channel configuration + * @{ + */ +/** + * @brief Configure input channel. + * @rmtoll CCMR1 CC1S LL_TIM_IC_Config\n + * CCMR1 IC1PSC LL_TIM_IC_Config\n + * CCMR1 IC1F LL_TIM_IC_Config\n + * CCMR1 CC2S LL_TIM_IC_Config\n + * CCMR1 IC2PSC LL_TIM_IC_Config\n + * CCMR1 IC2F LL_TIM_IC_Config\n + * CCMR2 CC3S LL_TIM_IC_Config\n + * CCMR2 IC3PSC LL_TIM_IC_Config\n + * CCMR2 IC3F LL_TIM_IC_Config\n + * CCMR2 CC4S LL_TIM_IC_Config\n + * CCMR2 IC4PSC LL_TIM_IC_Config\n + * CCMR2 IC4F LL_TIM_IC_Config\n + * CCER CC1P LL_TIM_IC_Config\n + * CCER CC1NP LL_TIM_IC_Config\n + * CCER CC2P LL_TIM_IC_Config\n + * CCER CC2NP LL_TIM_IC_Config\n + * CCER CC3P LL_TIM_IC_Config\n + * CCER CC3NP LL_TIM_IC_Config\n + * CCER CC4P LL_TIM_IC_Config\n + * CCER CC4NP LL_TIM_IC_Config + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param Configuration This parameter must be a combination of all the following values: + * @arg @ref LL_TIM_ACTIVEINPUT_DIRECTTI or @ref LL_TIM_ACTIVEINPUT_INDIRECTTI or @ref LL_TIM_ACTIVEINPUT_TRC + * @arg @ref LL_TIM_ICPSC_DIV1 or ... or @ref LL_TIM_ICPSC_DIV8 + * @arg @ref LL_TIM_IC_FILTER_FDIV1 or ... or @ref LL_TIM_IC_FILTER_FDIV32_N8 + * @arg @ref LL_TIM_IC_POLARITY_RISING or @ref LL_TIM_IC_POLARITY_FALLING or @ref LL_TIM_IC_POLARITY_BOTHEDGE + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_Config(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Configuration) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + MODIFY_REG(*pReg, ((TIM_CCMR1_IC1F | TIM_CCMR1_IC1PSC | TIM_CCMR1_CC1S) << SHIFT_TAB_ICxx[iChannel]), + ((Configuration >> 16U) & (TIM_CCMR1_IC1F | TIM_CCMR1_IC1PSC | TIM_CCMR1_CC1S)) \ + << SHIFT_TAB_ICxx[iChannel]); + MODIFY_REG(TIMx->CCER, ((TIM_CCER_CC1NP | TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel]), + (Configuration & (TIM_CCER_CC1NP | TIM_CCER_CC1P)) << SHIFT_TAB_CCxP[iChannel]); +} + +/** + * @brief Set the active input. + * @rmtoll CCMR1 CC1S LL_TIM_IC_SetActiveInput\n + * CCMR1 CC2S LL_TIM_IC_SetActiveInput\n + * CCMR2 CC3S LL_TIM_IC_SetActiveInput\n + * CCMR2 CC4S LL_TIM_IC_SetActiveInput + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param ICActiveInput This parameter can be one of the following values: + * @arg @ref LL_TIM_ACTIVEINPUT_DIRECTTI + * @arg @ref LL_TIM_ACTIVEINPUT_INDIRECTTI + * @arg @ref LL_TIM_ACTIVEINPUT_TRC + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_SetActiveInput(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICActiveInput) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + MODIFY_REG(*pReg, ((TIM_CCMR1_CC1S) << SHIFT_TAB_ICxx[iChannel]), (ICActiveInput >> 16U) << SHIFT_TAB_ICxx[iChannel]); +} + +/** + * @brief Get the current active input. + * @rmtoll CCMR1 CC1S LL_TIM_IC_GetActiveInput\n + * CCMR1 CC2S LL_TIM_IC_GetActiveInput\n + * CCMR2 CC3S LL_TIM_IC_GetActiveInput\n + * CCMR2 CC4S LL_TIM_IC_GetActiveInput + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_ACTIVEINPUT_DIRECTTI + * @arg @ref LL_TIM_ACTIVEINPUT_INDIRECTTI + * @arg @ref LL_TIM_ACTIVEINPUT_TRC + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetActiveInput(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + return ((READ_BIT(*pReg, ((TIM_CCMR1_CC1S) << SHIFT_TAB_ICxx[iChannel])) >> SHIFT_TAB_ICxx[iChannel]) << 16U); +} + +/** + * @brief Set the prescaler of input channel. + * @rmtoll CCMR1 IC1PSC LL_TIM_IC_SetPrescaler\n + * CCMR1 IC2PSC LL_TIM_IC_SetPrescaler\n + * CCMR2 IC3PSC LL_TIM_IC_SetPrescaler\n + * CCMR2 IC4PSC LL_TIM_IC_SetPrescaler + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param ICPrescaler This parameter can be one of the following values: + * @arg @ref LL_TIM_ICPSC_DIV1 + * @arg @ref LL_TIM_ICPSC_DIV2 + * @arg @ref LL_TIM_ICPSC_DIV4 + * @arg @ref LL_TIM_ICPSC_DIV8 + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_SetPrescaler(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICPrescaler) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + MODIFY_REG(*pReg, ((TIM_CCMR1_IC1PSC) << SHIFT_TAB_ICxx[iChannel]), (ICPrescaler >> 16U) << SHIFT_TAB_ICxx[iChannel]); +} + +/** + * @brief Get the current prescaler value acting on an input channel. + * @rmtoll CCMR1 IC1PSC LL_TIM_IC_GetPrescaler\n + * CCMR1 IC2PSC LL_TIM_IC_GetPrescaler\n + * CCMR2 IC3PSC LL_TIM_IC_GetPrescaler\n + * CCMR2 IC4PSC LL_TIM_IC_GetPrescaler + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_ICPSC_DIV1 + * @arg @ref LL_TIM_ICPSC_DIV2 + * @arg @ref LL_TIM_ICPSC_DIV4 + * @arg @ref LL_TIM_ICPSC_DIV8 + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetPrescaler(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + return ((READ_BIT(*pReg, ((TIM_CCMR1_IC1PSC) << SHIFT_TAB_ICxx[iChannel])) >> SHIFT_TAB_ICxx[iChannel]) << 16U); +} + +/** + * @brief Set the input filter duration. + * @rmtoll CCMR1 IC1F LL_TIM_IC_SetFilter\n + * CCMR1 IC2F LL_TIM_IC_SetFilter\n + * CCMR2 IC3F LL_TIM_IC_SetFilter\n + * CCMR2 IC4F LL_TIM_IC_SetFilter + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param ICFilter This parameter can be one of the following values: + * @arg @ref LL_TIM_IC_FILTER_FDIV1 + * @arg @ref LL_TIM_IC_FILTER_FDIV1_N2 + * @arg @ref LL_TIM_IC_FILTER_FDIV1_N4 + * @arg @ref LL_TIM_IC_FILTER_FDIV1_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV2_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV2_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV4_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV4_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV8_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV8_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV16_N5 + * @arg @ref LL_TIM_IC_FILTER_FDIV16_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV16_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV32_N5 + * @arg @ref LL_TIM_IC_FILTER_FDIV32_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV32_N8 + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_SetFilter(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICFilter) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + MODIFY_REG(*pReg, ((TIM_CCMR1_IC1F) << SHIFT_TAB_ICxx[iChannel]), (ICFilter >> 16U) << SHIFT_TAB_ICxx[iChannel]); +} + +/** + * @brief Get the input filter duration. + * @rmtoll CCMR1 IC1F LL_TIM_IC_GetFilter\n + * CCMR1 IC2F LL_TIM_IC_GetFilter\n + * CCMR2 IC3F LL_TIM_IC_GetFilter\n + * CCMR2 IC4F LL_TIM_IC_GetFilter + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_IC_FILTER_FDIV1 + * @arg @ref LL_TIM_IC_FILTER_FDIV1_N2 + * @arg @ref LL_TIM_IC_FILTER_FDIV1_N4 + * @arg @ref LL_TIM_IC_FILTER_FDIV1_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV2_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV2_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV4_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV4_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV8_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV8_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV16_N5 + * @arg @ref LL_TIM_IC_FILTER_FDIV16_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV16_N8 + * @arg @ref LL_TIM_IC_FILTER_FDIV32_N5 + * @arg @ref LL_TIM_IC_FILTER_FDIV32_N6 + * @arg @ref LL_TIM_IC_FILTER_FDIV32_N8 + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetFilter(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); + return ((READ_BIT(*pReg, ((TIM_CCMR1_IC1F) << SHIFT_TAB_ICxx[iChannel])) >> SHIFT_TAB_ICxx[iChannel]) << 16U); +} + +/** + * @brief Set the input channel polarity. + * @rmtoll CCER CC1P LL_TIM_IC_SetPolarity\n + * CCER CC1NP LL_TIM_IC_SetPolarity\n + * CCER CC2P LL_TIM_IC_SetPolarity\n + * CCER CC2NP LL_TIM_IC_SetPolarity\n + * CCER CC3P LL_TIM_IC_SetPolarity\n + * CCER CC3NP LL_TIM_IC_SetPolarity\n + * CCER CC4P LL_TIM_IC_SetPolarity\n + * CCER CC4NP LL_TIM_IC_SetPolarity + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @param ICPolarity This parameter can be one of the following values: + * @arg @ref LL_TIM_IC_POLARITY_RISING + * @arg @ref LL_TIM_IC_POLARITY_FALLING + * @arg @ref LL_TIM_IC_POLARITY_BOTHEDGE + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_SetPolarity(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICPolarity) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + MODIFY_REG(TIMx->CCER, ((TIM_CCER_CC1NP | TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel]), + ICPolarity << SHIFT_TAB_CCxP[iChannel]); +} + +/** + * @brief Get the current input channel polarity. + * @rmtoll CCER CC1P LL_TIM_IC_GetPolarity\n + * CCER CC1NP LL_TIM_IC_GetPolarity\n + * CCER CC2P LL_TIM_IC_GetPolarity\n + * CCER CC2NP LL_TIM_IC_GetPolarity\n + * CCER CC3P LL_TIM_IC_GetPolarity\n + * CCER CC3NP LL_TIM_IC_GetPolarity\n + * CCER CC4P LL_TIM_IC_GetPolarity\n + * CCER CC4NP LL_TIM_IC_GetPolarity + * @param TIMx Timer instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_TIM_CHANNEL_CH1 + * @arg @ref LL_TIM_CHANNEL_CH2 + * @arg @ref LL_TIM_CHANNEL_CH3 + * @arg @ref LL_TIM_CHANNEL_CH4 + * @retval Returned value can be one of the following values: + * @arg @ref LL_TIM_IC_POLARITY_RISING + * @arg @ref LL_TIM_IC_POLARITY_FALLING + * @arg @ref LL_TIM_IC_POLARITY_BOTHEDGE + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetPolarity(const TIM_TypeDef *TIMx, uint32_t Channel) +{ + uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); + return (READ_BIT(TIMx->CCER, ((TIM_CCER_CC1NP | TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel])) >> + SHIFT_TAB_CCxP[iChannel]); +} + +/** + * @brief Connect the TIMx_CH1, CH2 and CH3 pins to the TI1 input (XOR combination). + * @note Macro IS_TIM_XOR_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides an XOR input. + * @rmtoll CR2 TI1S LL_TIM_IC_EnableXORCombination + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_EnableXORCombination(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->CR2, TIM_CR2_TI1S); +} + +/** + * @brief Disconnect the TIMx_CH1, CH2 and CH3 pins from the TI1 input. + * @note Macro IS_TIM_XOR_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides an XOR input. + * @rmtoll CR2 TI1S LL_TIM_IC_DisableXORCombination + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_IC_DisableXORCombination(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->CR2, TIM_CR2_TI1S); +} + +/** + * @brief Indicates whether the TIMx_CH1, CH2 and CH3 pins are connectected to the TI1 input. + * @note Macro IS_TIM_XOR_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides an XOR input. + * @rmtoll CR2 TI1S LL_TIM_IC_IsEnabledXORCombination + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IC_IsEnabledXORCombination(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->CR2, TIM_CR2_TI1S) == (TIM_CR2_TI1S)) ? 1UL : 0UL); +} + +/** + * @brief Get captured value for input channel 1. + * @note In 32-bit timer implementations returned captured value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC1_INSTANCE(TIMx) can be used to check whether or not + * input channel 1 is supported by a timer instance. + * @rmtoll CCR1 CCR1 LL_TIM_IC_GetCaptureCH1 + * @param TIMx Timer instance + * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH1(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR1)); +} + +/** + * @brief Get captured value for input channel 2. + * @note In 32-bit timer implementations returned captured value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC2_INSTANCE(TIMx) can be used to check whether or not + * input channel 2 is supported by a timer instance. + * @rmtoll CCR2 CCR2 LL_TIM_IC_GetCaptureCH2 + * @param TIMx Timer instance + * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH2(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR2)); +} + +/** + * @brief Get captured value for input channel 3. + * @note In 32-bit timer implementations returned captured value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC3_INSTANCE(TIMx) can be used to check whether or not + * input channel 3 is supported by a timer instance. + * @rmtoll CCR3 CCR3 LL_TIM_IC_GetCaptureCH3 + * @param TIMx Timer instance + * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH3(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR3)); +} + +/** + * @brief Get captured value for input channel 4. + * @note In 32-bit timer implementations returned captured value can be between 0x00000000 and 0xFFFFFFFF. + * @note Macro IS_TIM_32B_COUNTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports a 32 bits counter. + * @note Macro IS_TIM_CC4_INSTANCE(TIMx) can be used to check whether or not + * input channel 4 is supported by a timer instance. + * @rmtoll CCR4 CCR4 LL_TIM_IC_GetCaptureCH4 + * @param TIMx Timer instance + * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) + */ +__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH4(const TIM_TypeDef *TIMx) +{ + return (uint32_t)(READ_REG(TIMx->CCR4)); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Clock_Selection Counter clock selection + * @{ + */ +/** + * @brief Enable external clock mode 2. + * @note When external clock mode 2 is enabled the counter is clocked by any active edge on the ETRF signal. + * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports external clock mode2. + * @rmtoll SMCR ECE LL_TIM_EnableExternalClock + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableExternalClock(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->SMCR, TIM_SMCR_ECE); +} + +/** + * @brief Disable external clock mode 2. + * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports external clock mode2. + * @rmtoll SMCR ECE LL_TIM_DisableExternalClock + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableExternalClock(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->SMCR, TIM_SMCR_ECE); +} + +/** + * @brief Indicate whether external clock mode 2 is enabled. + * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports external clock mode2. + * @rmtoll SMCR ECE LL_TIM_IsEnabledExternalClock + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledExternalClock(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SMCR, TIM_SMCR_ECE) == (TIM_SMCR_ECE)) ? 1UL : 0UL); +} + +/** + * @brief Set the clock source of the counter clock. + * @note when selected clock source is external clock mode 1, the timer input + * the external clock is applied is selected by calling the @ref LL_TIM_SetTriggerInput() + * function. This timer input must be configured by calling + * the @ref LL_TIM_IC_Config() function. + * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports external clock mode1. + * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports external clock mode2. + * @rmtoll SMCR SMS LL_TIM_SetClockSource\n + * SMCR ECE LL_TIM_SetClockSource + * @param TIMx Timer instance + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_TIM_CLOCKSOURCE_INTERNAL + * @arg @ref LL_TIM_CLOCKSOURCE_EXT_MODE1 + * @arg @ref LL_TIM_CLOCKSOURCE_EXT_MODE2 + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetClockSource(TIM_TypeDef *TIMx, uint32_t ClockSource) +{ + MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS | TIM_SMCR_ECE, ClockSource); +} + +/** + * @brief Set the encoder interface mode. + * @note Macro IS_TIM_ENCODER_INTERFACE_INSTANCE(TIMx) can be used to check + * whether or not a timer instance supports the encoder mode. + * @rmtoll SMCR SMS LL_TIM_SetEncoderMode + * @param TIMx Timer instance + * @param EncoderMode This parameter can be one of the following values: + * @arg @ref LL_TIM_ENCODERMODE_X2_TI1 + * @arg @ref LL_TIM_ENCODERMODE_X2_TI2 + * @arg @ref LL_TIM_ENCODERMODE_X4_TI12 + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetEncoderMode(TIM_TypeDef *TIMx, uint32_t EncoderMode) +{ + MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS, EncoderMode); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Timer_Synchronization Timer synchronisation configuration + * @{ + */ +/** + * @brief Set the trigger output (TRGO) used for timer synchronization . + * @note Macro IS_TIM_MASTER_INSTANCE(TIMx) can be used to check + * whether or not a timer instance can operate as a master timer. + * @rmtoll CR2 MMS LL_TIM_SetTriggerOutput + * @param TIMx Timer instance + * @param TimerSynchronization This parameter can be one of the following values: + * @arg @ref LL_TIM_TRGO_RESET + * @arg @ref LL_TIM_TRGO_ENABLE + * @arg @ref LL_TIM_TRGO_UPDATE + * @arg @ref LL_TIM_TRGO_CC1IF + * @arg @ref LL_TIM_TRGO_OC1REF + * @arg @ref LL_TIM_TRGO_OC2REF + * @arg @ref LL_TIM_TRGO_OC3REF + * @arg @ref LL_TIM_TRGO_OC4REF + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetTriggerOutput(TIM_TypeDef *TIMx, uint32_t TimerSynchronization) +{ + MODIFY_REG(TIMx->CR2, TIM_CR2_MMS, TimerSynchronization); +} + +/** + * @brief Set the synchronization mode of a slave timer. + * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not + * a timer instance can operate as a slave timer. + * @rmtoll SMCR SMS LL_TIM_SetSlaveMode + * @param TIMx Timer instance + * @param SlaveMode This parameter can be one of the following values: + * @arg @ref LL_TIM_SLAVEMODE_DISABLED + * @arg @ref LL_TIM_SLAVEMODE_RESET + * @arg @ref LL_TIM_SLAVEMODE_GATED + * @arg @ref LL_TIM_SLAVEMODE_TRIGGER + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetSlaveMode(TIM_TypeDef *TIMx, uint32_t SlaveMode) +{ + MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS, SlaveMode); +} + +/** + * @brief Set the selects the trigger input to be used to synchronize the counter. + * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not + * a timer instance can operate as a slave timer. + * @rmtoll SMCR TS LL_TIM_SetTriggerInput + * @param TIMx Timer instance + * @param TriggerInput This parameter can be one of the following values: + * @arg @ref LL_TIM_TS_ITR0 + * @arg @ref LL_TIM_TS_ITR1 + * @arg @ref LL_TIM_TS_ITR2 + * @arg @ref LL_TIM_TS_ITR3 + * @arg @ref LL_TIM_TS_TI1F_ED + * @arg @ref LL_TIM_TS_TI1FP1 + * @arg @ref LL_TIM_TS_TI2FP2 + * @arg @ref LL_TIM_TS_ETRF + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetTriggerInput(TIM_TypeDef *TIMx, uint32_t TriggerInput) +{ + MODIFY_REG(TIMx->SMCR, TIM_SMCR_TS, TriggerInput); +} + +/** + * @brief Enable the Master/Slave mode. + * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not + * a timer instance can operate as a slave timer. + * @rmtoll SMCR MSM LL_TIM_EnableMasterSlaveMode + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableMasterSlaveMode(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->SMCR, TIM_SMCR_MSM); +} + +/** + * @brief Disable the Master/Slave mode. + * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not + * a timer instance can operate as a slave timer. + * @rmtoll SMCR MSM LL_TIM_DisableMasterSlaveMode + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableMasterSlaveMode(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->SMCR, TIM_SMCR_MSM); +} + +/** + * @brief Indicates whether the Master/Slave mode is enabled. + * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not + * a timer instance can operate as a slave timer. + * @rmtoll SMCR MSM LL_TIM_IsEnabledMasterSlaveMode + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledMasterSlaveMode(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SMCR, TIM_SMCR_MSM) == (TIM_SMCR_MSM)) ? 1UL : 0UL); +} + +/** + * @brief Configure the external trigger (ETR) input. + * @note Macro IS_TIM_ETR_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides an external trigger input. + * @rmtoll SMCR ETP LL_TIM_ConfigETR\n + * SMCR ETPS LL_TIM_ConfigETR\n + * SMCR ETF LL_TIM_ConfigETR + * @param TIMx Timer instance + * @param ETRPolarity This parameter can be one of the following values: + * @arg @ref LL_TIM_ETR_POLARITY_NONINVERTED + * @arg @ref LL_TIM_ETR_POLARITY_INVERTED + * @param ETRPrescaler This parameter can be one of the following values: + * @arg @ref LL_TIM_ETR_PRESCALER_DIV1 + * @arg @ref LL_TIM_ETR_PRESCALER_DIV2 + * @arg @ref LL_TIM_ETR_PRESCALER_DIV4 + * @arg @ref LL_TIM_ETR_PRESCALER_DIV8 + * @param ETRFilter This parameter can be one of the following values: + * @arg @ref LL_TIM_ETR_FILTER_FDIV1 + * @arg @ref LL_TIM_ETR_FILTER_FDIV1_N2 + * @arg @ref LL_TIM_ETR_FILTER_FDIV1_N4 + * @arg @ref LL_TIM_ETR_FILTER_FDIV1_N8 + * @arg @ref LL_TIM_ETR_FILTER_FDIV2_N6 + * @arg @ref LL_TIM_ETR_FILTER_FDIV2_N8 + * @arg @ref LL_TIM_ETR_FILTER_FDIV4_N6 + * @arg @ref LL_TIM_ETR_FILTER_FDIV4_N8 + * @arg @ref LL_TIM_ETR_FILTER_FDIV8_N6 + * @arg @ref LL_TIM_ETR_FILTER_FDIV8_N8 + * @arg @ref LL_TIM_ETR_FILTER_FDIV16_N5 + * @arg @ref LL_TIM_ETR_FILTER_FDIV16_N6 + * @arg @ref LL_TIM_ETR_FILTER_FDIV16_N8 + * @arg @ref LL_TIM_ETR_FILTER_FDIV32_N5 + * @arg @ref LL_TIM_ETR_FILTER_FDIV32_N6 + * @arg @ref LL_TIM_ETR_FILTER_FDIV32_N8 + * @retval None + */ +__STATIC_INLINE void LL_TIM_ConfigETR(TIM_TypeDef *TIMx, uint32_t ETRPolarity, uint32_t ETRPrescaler, + uint32_t ETRFilter) +{ + MODIFY_REG(TIMx->SMCR, TIM_SMCR_ETP | TIM_SMCR_ETPS | TIM_SMCR_ETF, ETRPolarity | ETRPrescaler | ETRFilter); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Break_Function Break function configuration + * @{ + */ +/** + * @brief Enable the break function. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR BKE LL_TIM_EnableBRK + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableBRK(TIM_TypeDef *TIMx) +{ + __IO uint32_t tmpreg; + SET_BIT(TIMx->BDTR, TIM_BDTR_BKE); + /* Note: Any write operation to this bit takes a delay of 1 APB clock cycle to become effective. */ + tmpreg = READ_REG(TIMx->BDTR); + (void)(tmpreg); +} + +/** + * @brief Disable the break function. + * @rmtoll BDTR BKE LL_TIM_DisableBRK + * @param TIMx Timer instance + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableBRK(TIM_TypeDef *TIMx) +{ + __IO uint32_t tmpreg; + CLEAR_BIT(TIMx->BDTR, TIM_BDTR_BKE); + /* Note: Any write operation to this bit takes a delay of 1 APB clock cycle to become effective. */ + tmpreg = READ_REG(TIMx->BDTR); + (void)(tmpreg); +} + +/** + * @brief Configure the break input. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR BKP LL_TIM_ConfigBRK + * @param TIMx Timer instance + * @param BreakPolarity This parameter can be one of the following values: + * @arg @ref LL_TIM_BREAK_POLARITY_LOW + * @arg @ref LL_TIM_BREAK_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_TIM_ConfigBRK(TIM_TypeDef *TIMx, uint32_t BreakPolarity) +{ + __IO uint32_t tmpreg; + MODIFY_REG(TIMx->BDTR, TIM_BDTR_BKP, BreakPolarity); + /* Note: Any write operation to BKP bit takes a delay of 1 APB clock cycle to become effective. */ + tmpreg = READ_REG(TIMx->BDTR); + (void)(tmpreg); +} + +/** + * @brief Select the outputs off state (enabled v.s. disabled) in Idle and Run modes. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR OSSI LL_TIM_SetOffStates\n + * BDTR OSSR LL_TIM_SetOffStates + * @param TIMx Timer instance + * @param OffStateIdle This parameter can be one of the following values: + * @arg @ref LL_TIM_OSSI_DISABLE + * @arg @ref LL_TIM_OSSI_ENABLE + * @param OffStateRun This parameter can be one of the following values: + * @arg @ref LL_TIM_OSSR_DISABLE + * @arg @ref LL_TIM_OSSR_ENABLE + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetOffStates(TIM_TypeDef *TIMx, uint32_t OffStateIdle, uint32_t OffStateRun) +{ + MODIFY_REG(TIMx->BDTR, TIM_BDTR_OSSI | TIM_BDTR_OSSR, OffStateIdle | OffStateRun); +} + +/** + * @brief Enable automatic output (MOE can be set by software or automatically when a break input is active). + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR AOE LL_TIM_EnableAutomaticOutput + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableAutomaticOutput(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->BDTR, TIM_BDTR_AOE); +} + +/** + * @brief Disable automatic output (MOE can be set only by software). + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR AOE LL_TIM_DisableAutomaticOutput + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableAutomaticOutput(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->BDTR, TIM_BDTR_AOE); +} + +/** + * @brief Indicate whether automatic output is enabled. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR AOE LL_TIM_IsEnabledAutomaticOutput + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledAutomaticOutput(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->BDTR, TIM_BDTR_AOE) == (TIM_BDTR_AOE)) ? 1UL : 0UL); +} + +/** + * @brief Enable the outputs (set the MOE bit in TIMx_BDTR register). + * @note The MOE bit in TIMx_BDTR register allows to enable /disable the outputs by + * software and is reset in case of break or break2 event + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR MOE LL_TIM_EnableAllOutputs + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableAllOutputs(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->BDTR, TIM_BDTR_MOE); +} + +/** + * @brief Disable the outputs (reset the MOE bit in TIMx_BDTR register). + * @note The MOE bit in TIMx_BDTR register allows to enable /disable the outputs by + * software and is reset in case of break or break2 event. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR MOE LL_TIM_DisableAllOutputs + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableAllOutputs(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->BDTR, TIM_BDTR_MOE); +} + +/** + * @brief Indicates whether outputs are enabled. + * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not + * a timer instance provides a break input. + * @rmtoll BDTR MOE LL_TIM_IsEnabledAllOutputs + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledAllOutputs(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->BDTR, TIM_BDTR_MOE) == (TIM_BDTR_MOE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_DMA_Burst_Mode DMA burst mode configuration + * @{ + */ +/** + * @brief Configures the timer DMA burst feature. + * @note Macro IS_TIM_DMABURST_INSTANCE(TIMx) can be used to check whether or + * not a timer instance supports the DMA burst mode. + * @rmtoll DCR DBL LL_TIM_ConfigDMABurst\n + * DCR DBA LL_TIM_ConfigDMABurst + * @param TIMx Timer instance + * @param DMABurstBaseAddress This parameter can be one of the following values: + * @arg @ref LL_TIM_DMABURST_BASEADDR_CR1 + * @arg @ref LL_TIM_DMABURST_BASEADDR_CR2 + * @arg @ref LL_TIM_DMABURST_BASEADDR_SMCR + * @arg @ref LL_TIM_DMABURST_BASEADDR_DIER + * @arg @ref LL_TIM_DMABURST_BASEADDR_SR + * @arg @ref LL_TIM_DMABURST_BASEADDR_EGR + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCMR1 + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCMR2 + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCER + * @arg @ref LL_TIM_DMABURST_BASEADDR_CNT + * @arg @ref LL_TIM_DMABURST_BASEADDR_PSC + * @arg @ref LL_TIM_DMABURST_BASEADDR_ARR + * @arg @ref LL_TIM_DMABURST_BASEADDR_RCR + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR1 + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR2 + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR3 + * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR4 + * @arg @ref LL_TIM_DMABURST_BASEADDR_BDTR + * @param DMABurstLength This parameter can be one of the following values: + * @arg @ref LL_TIM_DMABURST_LENGTH_1TRANSFER + * @arg @ref LL_TIM_DMABURST_LENGTH_2TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_3TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_4TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_5TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_6TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_7TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_8TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_9TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_10TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_11TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_12TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_13TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_14TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_15TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_16TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_17TRANSFERS + * @arg @ref LL_TIM_DMABURST_LENGTH_18TRANSFERS + * @retval None + */ +__STATIC_INLINE void LL_TIM_ConfigDMABurst(TIM_TypeDef *TIMx, uint32_t DMABurstBaseAddress, uint32_t DMABurstLength) +{ + MODIFY_REG(TIMx->DCR, (TIM_DCR_DBL | TIM_DCR_DBA), (DMABurstBaseAddress | DMABurstLength)); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_Timer_Inputs_Remapping Timer input remapping + * @{ + */ +/** + * @brief Remap TIM inputs (input channel, internal/external triggers). + * @note Macro IS_TIM_REMAP_INSTANCE(TIMx) can be used to check whether or not + * a some timer inputs can be remapped. + * @rmtoll TIM1_OR ITR2_RMP LL_TIM_SetRemap\n + * TIM2_OR ITR1_RMP LL_TIM_SetRemap\n + * TIM5_OR ITR1_RMP LL_TIM_SetRemap\n + * TIM5_OR TI4_RMP LL_TIM_SetRemap\n + * TIM9_OR ITR1_RMP LL_TIM_SetRemap\n + * TIM11_OR TI1_RMP LL_TIM_SetRemap\n + * LPTIM1_OR OR LL_TIM_SetRemap + * @param TIMx Timer instance + * @param Remap Remap param depends on the TIMx. Description available only + * in CHM version of the User Manual (not in .pdf). + * Otherwise see Reference Manual description of OR registers. + * + * Below description summarizes "Timer Instance" and "Remap" param combinations: + * + * TIM1: one of the following values + * + * ITR2_RMP can be one of the following values + * @arg @ref LL_TIM_TIM1_ITR2_RMP_TIM3_TRGO (*) + * @arg @ref LL_TIM_TIM1_ITR2_RMP_LPTIM (*) + * + * TIM2: one of the following values + * + * ITR1_RMP can be one of the following values + * @arg @ref LL_TIM_TIM2_ITR1_RMP_TIM8_TRGO + * @arg @ref LL_TIM_TIM2_ITR1_RMP_OTG_FS_SOF + * @arg @ref LL_TIM_TIM2_ITR1_RMP_OTG_HS_SOF + * + * TIM5: one of the following values + * + * @arg @ref LL_TIM_TIM5_TI4_RMP_GPIO + * @arg @ref LL_TIM_TIM5_TI4_RMP_LSI + * @arg @ref LL_TIM_TIM5_TI4_RMP_LSE + * @arg @ref LL_TIM_TIM5_TI4_RMP_RTC + * @arg @ref LL_TIM_TIM5_ITR1_RMP_TIM3_TRGO (*) + * @arg @ref LL_TIM_TIM5_ITR1_RMP_LPTIM (*) + * + * TIM9: one of the following values + * + * ITR1_RMP can be one of the following values + * @arg @ref LL_TIM_TIM9_ITR1_RMP_TIM3_TRGO (*) + * @arg @ref LL_TIM_TIM9_ITR1_RMP_LPTIM (*) + * + * TIM11: one of the following values + * + * @arg @ref LL_TIM_TIM11_TI1_RMP_GPIO + * @arg @ref LL_TIM_TIM11_TI1_RMP_GPIO1 (*) + * @arg @ref LL_TIM_TIM11_TI1_RMP_HSE_RTC + * @arg @ref LL_TIM_TIM11_TI1_RMP_GPIO2 + * @arg @ref LL_TIM_TIM11_TI1_RMP_SPDIFRX (*) + * + * (*) Value not defined in all devices. \n + * + * @retval None + */ +__STATIC_INLINE void LL_TIM_SetRemap(TIM_TypeDef *TIMx, uint32_t Remap) +{ +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM9_ITR1_RMP) + if ((Remap & LL_TIM_LPTIM_REMAP_MASK) == LL_TIM_LPTIM_REMAP_MASK) + { + /* Connect TIMx internal trigger to LPTIM1 output */ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN); + MODIFY_REG(LPTIM1->OR, + (LPTIM_OR_TIM1_ITR2_RMP | LPTIM_OR_TIM5_ITR1_RMP | LPTIM_OR_TIM9_ITR1_RMP), + Remap & ~(LL_TIM_LPTIM_REMAP_MASK)); + } + else + { + MODIFY_REG(TIMx->OR, (Remap >> TIMx_OR_RMP_SHIFT), (Remap & TIMx_OR_RMP_MASK)); + } +#else + MODIFY_REG(TIMx->OR, (Remap >> TIMx_OR_RMP_SHIFT), (Remap & TIMx_OR_RMP_MASK)); +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM9_ITR1_RMP */ +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_FLAG_Management FLAG-Management + * @{ + */ +/** + * @brief Clear the update interrupt flag (UIF). + * @rmtoll SR UIF LL_TIM_ClearFlag_UPDATE + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_UPDATE(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_UIF)); +} + +/** + * @brief Indicate whether update interrupt flag (UIF) is set (update interrupt is pending). + * @rmtoll SR UIF LL_TIM_IsActiveFlag_UPDATE + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_UPDATE(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_UIF) == (TIM_SR_UIF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 1 interrupt flag (CC1F). + * @rmtoll SR CC1IF LL_TIM_ClearFlag_CC1 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC1(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC1IF)); +} + +/** + * @brief Indicate whether Capture/Compare 1 interrupt flag (CC1F) is set (Capture/Compare 1 interrupt is pending). + * @rmtoll SR CC1IF LL_TIM_IsActiveFlag_CC1 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC1(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC1IF) == (TIM_SR_CC1IF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 2 interrupt flag (CC2F). + * @rmtoll SR CC2IF LL_TIM_ClearFlag_CC2 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC2(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC2IF)); +} + +/** + * @brief Indicate whether Capture/Compare 2 interrupt flag (CC2F) is set (Capture/Compare 2 interrupt is pending). + * @rmtoll SR CC2IF LL_TIM_IsActiveFlag_CC2 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC2(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC2IF) == (TIM_SR_CC2IF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 3 interrupt flag (CC3F). + * @rmtoll SR CC3IF LL_TIM_ClearFlag_CC3 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC3(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC3IF)); +} + +/** + * @brief Indicate whether Capture/Compare 3 interrupt flag (CC3F) is set (Capture/Compare 3 interrupt is pending). + * @rmtoll SR CC3IF LL_TIM_IsActiveFlag_CC3 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC3(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC3IF) == (TIM_SR_CC3IF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 4 interrupt flag (CC4F). + * @rmtoll SR CC4IF LL_TIM_ClearFlag_CC4 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC4(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC4IF)); +} + +/** + * @brief Indicate whether Capture/Compare 4 interrupt flag (CC4F) is set (Capture/Compare 4 interrupt is pending). + * @rmtoll SR CC4IF LL_TIM_IsActiveFlag_CC4 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC4(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC4IF) == (TIM_SR_CC4IF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the commutation interrupt flag (COMIF). + * @rmtoll SR COMIF LL_TIM_ClearFlag_COM + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_COM(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_COMIF)); +} + +/** + * @brief Indicate whether commutation interrupt flag (COMIF) is set (commutation interrupt is pending). + * @rmtoll SR COMIF LL_TIM_IsActiveFlag_COM + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_COM(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_COMIF) == (TIM_SR_COMIF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the trigger interrupt flag (TIF). + * @rmtoll SR TIF LL_TIM_ClearFlag_TRIG + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_TRIG(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_TIF)); +} + +/** + * @brief Indicate whether trigger interrupt flag (TIF) is set (trigger interrupt is pending). + * @rmtoll SR TIF LL_TIM_IsActiveFlag_TRIG + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_TRIG(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_TIF) == (TIM_SR_TIF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the break interrupt flag (BIF). + * @rmtoll SR BIF LL_TIM_ClearFlag_BRK + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_BRK(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_BIF)); +} + +/** + * @brief Indicate whether break interrupt flag (BIF) is set (break interrupt is pending). + * @rmtoll SR BIF LL_TIM_IsActiveFlag_BRK + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_BRK(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_BIF) == (TIM_SR_BIF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 1 over-capture interrupt flag (CC1OF). + * @rmtoll SR CC1OF LL_TIM_ClearFlag_CC1OVR + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC1OVR(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC1OF)); +} + +/** + * @brief Indicate whether Capture/Compare 1 over-capture interrupt flag (CC1OF) is set + * (Capture/Compare 1 interrupt is pending). + * @rmtoll SR CC1OF LL_TIM_IsActiveFlag_CC1OVR + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC1OVR(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC1OF) == (TIM_SR_CC1OF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 2 over-capture interrupt flag (CC2OF). + * @rmtoll SR CC2OF LL_TIM_ClearFlag_CC2OVR + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC2OVR(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC2OF)); +} + +/** + * @brief Indicate whether Capture/Compare 2 over-capture interrupt flag (CC2OF) is set + * (Capture/Compare 2 over-capture interrupt is pending). + * @rmtoll SR CC2OF LL_TIM_IsActiveFlag_CC2OVR + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC2OVR(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC2OF) == (TIM_SR_CC2OF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 3 over-capture interrupt flag (CC3OF). + * @rmtoll SR CC3OF LL_TIM_ClearFlag_CC3OVR + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC3OVR(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC3OF)); +} + +/** + * @brief Indicate whether Capture/Compare 3 over-capture interrupt flag (CC3OF) is set + * (Capture/Compare 3 over-capture interrupt is pending). + * @rmtoll SR CC3OF LL_TIM_IsActiveFlag_CC3OVR + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC3OVR(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC3OF) == (TIM_SR_CC3OF)) ? 1UL : 0UL); +} + +/** + * @brief Clear the Capture/Compare 4 over-capture interrupt flag (CC4OF). + * @rmtoll SR CC4OF LL_TIM_ClearFlag_CC4OVR + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_ClearFlag_CC4OVR(TIM_TypeDef *TIMx) +{ + WRITE_REG(TIMx->SR, ~(TIM_SR_CC4OF)); +} + +/** + * @brief Indicate whether Capture/Compare 4 over-capture interrupt flag (CC4OF) is set + * (Capture/Compare 4 over-capture interrupt is pending). + * @rmtoll SR CC4OF LL_TIM_IsActiveFlag_CC4OVR + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC4OVR(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->SR, TIM_SR_CC4OF) == (TIM_SR_CC4OF)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_IT_Management IT-Management + * @{ + */ +/** + * @brief Enable update interrupt (UIE). + * @rmtoll DIER UIE LL_TIM_EnableIT_UPDATE + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_UPDATE(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_UIE); +} + +/** + * @brief Disable update interrupt (UIE). + * @rmtoll DIER UIE LL_TIM_DisableIT_UPDATE + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_UPDATE(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_UIE); +} + +/** + * @brief Indicates whether the update interrupt (UIE) is enabled. + * @rmtoll DIER UIE LL_TIM_IsEnabledIT_UPDATE + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_UPDATE(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_UIE) == (TIM_DIER_UIE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 1 interrupt (CC1IE). + * @rmtoll DIER CC1IE LL_TIM_EnableIT_CC1 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_CC1(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC1IE); +} + +/** + * @brief Disable capture/compare 1 interrupt (CC1IE). + * @rmtoll DIER CC1IE LL_TIM_DisableIT_CC1 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_CC1(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC1IE); +} + +/** + * @brief Indicates whether the capture/compare 1 interrupt (CC1IE) is enabled. + * @rmtoll DIER CC1IE LL_TIM_IsEnabledIT_CC1 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC1(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC1IE) == (TIM_DIER_CC1IE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 2 interrupt (CC2IE). + * @rmtoll DIER CC2IE LL_TIM_EnableIT_CC2 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_CC2(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC2IE); +} + +/** + * @brief Disable capture/compare 2 interrupt (CC2IE). + * @rmtoll DIER CC2IE LL_TIM_DisableIT_CC2 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_CC2(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC2IE); +} + +/** + * @brief Indicates whether the capture/compare 2 interrupt (CC2IE) is enabled. + * @rmtoll DIER CC2IE LL_TIM_IsEnabledIT_CC2 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC2(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC2IE) == (TIM_DIER_CC2IE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 3 interrupt (CC3IE). + * @rmtoll DIER CC3IE LL_TIM_EnableIT_CC3 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_CC3(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC3IE); +} + +/** + * @brief Disable capture/compare 3 interrupt (CC3IE). + * @rmtoll DIER CC3IE LL_TIM_DisableIT_CC3 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_CC3(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC3IE); +} + +/** + * @brief Indicates whether the capture/compare 3 interrupt (CC3IE) is enabled. + * @rmtoll DIER CC3IE LL_TIM_IsEnabledIT_CC3 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC3(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC3IE) == (TIM_DIER_CC3IE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 4 interrupt (CC4IE). + * @rmtoll DIER CC4IE LL_TIM_EnableIT_CC4 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_CC4(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC4IE); +} + +/** + * @brief Disable capture/compare 4 interrupt (CC4IE). + * @rmtoll DIER CC4IE LL_TIM_DisableIT_CC4 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_CC4(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC4IE); +} + +/** + * @brief Indicates whether the capture/compare 4 interrupt (CC4IE) is enabled. + * @rmtoll DIER CC4IE LL_TIM_IsEnabledIT_CC4 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC4(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC4IE) == (TIM_DIER_CC4IE)) ? 1UL : 0UL); +} + +/** + * @brief Enable commutation interrupt (COMIE). + * @rmtoll DIER COMIE LL_TIM_EnableIT_COM + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_COM(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_COMIE); +} + +/** + * @brief Disable commutation interrupt (COMIE). + * @rmtoll DIER COMIE LL_TIM_DisableIT_COM + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_COM(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_COMIE); +} + +/** + * @brief Indicates whether the commutation interrupt (COMIE) is enabled. + * @rmtoll DIER COMIE LL_TIM_IsEnabledIT_COM + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_COM(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_COMIE) == (TIM_DIER_COMIE)) ? 1UL : 0UL); +} + +/** + * @brief Enable trigger interrupt (TIE). + * @rmtoll DIER TIE LL_TIM_EnableIT_TRIG + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_TRIG(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_TIE); +} + +/** + * @brief Disable trigger interrupt (TIE). + * @rmtoll DIER TIE LL_TIM_DisableIT_TRIG + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_TRIG(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_TIE); +} + +/** + * @brief Indicates whether the trigger interrupt (TIE) is enabled. + * @rmtoll DIER TIE LL_TIM_IsEnabledIT_TRIG + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_TRIG(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_TIE) == (TIM_DIER_TIE)) ? 1UL : 0UL); +} + +/** + * @brief Enable break interrupt (BIE). + * @rmtoll DIER BIE LL_TIM_EnableIT_BRK + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableIT_BRK(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_BIE); +} + +/** + * @brief Disable break interrupt (BIE). + * @rmtoll DIER BIE LL_TIM_DisableIT_BRK + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableIT_BRK(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_BIE); +} + +/** + * @brief Indicates whether the break interrupt (BIE) is enabled. + * @rmtoll DIER BIE LL_TIM_IsEnabledIT_BRK + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_BRK(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_BIE) == (TIM_DIER_BIE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_DMA_Management DMA Management + * @{ + */ +/** + * @brief Enable update DMA request (UDE). + * @rmtoll DIER UDE LL_TIM_EnableDMAReq_UPDATE + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_UPDATE(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_UDE); +} + +/** + * @brief Disable update DMA request (UDE). + * @rmtoll DIER UDE LL_TIM_DisableDMAReq_UPDATE + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_UPDATE(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_UDE); +} + +/** + * @brief Indicates whether the update DMA request (UDE) is enabled. + * @rmtoll DIER UDE LL_TIM_IsEnabledDMAReq_UPDATE + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_UPDATE(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_UDE) == (TIM_DIER_UDE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 1 DMA request (CC1DE). + * @rmtoll DIER CC1DE LL_TIM_EnableDMAReq_CC1 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_CC1(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC1DE); +} + +/** + * @brief Disable capture/compare 1 DMA request (CC1DE). + * @rmtoll DIER CC1DE LL_TIM_DisableDMAReq_CC1 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_CC1(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC1DE); +} + +/** + * @brief Indicates whether the capture/compare 1 DMA request (CC1DE) is enabled. + * @rmtoll DIER CC1DE LL_TIM_IsEnabledDMAReq_CC1 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC1(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC1DE) == (TIM_DIER_CC1DE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 2 DMA request (CC2DE). + * @rmtoll DIER CC2DE LL_TIM_EnableDMAReq_CC2 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_CC2(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC2DE); +} + +/** + * @brief Disable capture/compare 2 DMA request (CC2DE). + * @rmtoll DIER CC2DE LL_TIM_DisableDMAReq_CC2 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_CC2(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC2DE); +} + +/** + * @brief Indicates whether the capture/compare 2 DMA request (CC2DE) is enabled. + * @rmtoll DIER CC2DE LL_TIM_IsEnabledDMAReq_CC2 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC2(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC2DE) == (TIM_DIER_CC2DE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 3 DMA request (CC3DE). + * @rmtoll DIER CC3DE LL_TIM_EnableDMAReq_CC3 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_CC3(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC3DE); +} + +/** + * @brief Disable capture/compare 3 DMA request (CC3DE). + * @rmtoll DIER CC3DE LL_TIM_DisableDMAReq_CC3 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_CC3(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC3DE); +} + +/** + * @brief Indicates whether the capture/compare 3 DMA request (CC3DE) is enabled. + * @rmtoll DIER CC3DE LL_TIM_IsEnabledDMAReq_CC3 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC3(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC3DE) == (TIM_DIER_CC3DE)) ? 1UL : 0UL); +} + +/** + * @brief Enable capture/compare 4 DMA request (CC4DE). + * @rmtoll DIER CC4DE LL_TIM_EnableDMAReq_CC4 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_CC4(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_CC4DE); +} + +/** + * @brief Disable capture/compare 4 DMA request (CC4DE). + * @rmtoll DIER CC4DE LL_TIM_DisableDMAReq_CC4 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_CC4(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_CC4DE); +} + +/** + * @brief Indicates whether the capture/compare 4 DMA request (CC4DE) is enabled. + * @rmtoll DIER CC4DE LL_TIM_IsEnabledDMAReq_CC4 + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC4(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_CC4DE) == (TIM_DIER_CC4DE)) ? 1UL : 0UL); +} + +/** + * @brief Enable commutation DMA request (COMDE). + * @rmtoll DIER COMDE LL_TIM_EnableDMAReq_COM + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_COM(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_COMDE); +} + +/** + * @brief Disable commutation DMA request (COMDE). + * @rmtoll DIER COMDE LL_TIM_DisableDMAReq_COM + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_COM(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_COMDE); +} + +/** + * @brief Indicates whether the commutation DMA request (COMDE) is enabled. + * @rmtoll DIER COMDE LL_TIM_IsEnabledDMAReq_COM + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_COM(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_COMDE) == (TIM_DIER_COMDE)) ? 1UL : 0UL); +} + +/** + * @brief Enable trigger interrupt (TDE). + * @rmtoll DIER TDE LL_TIM_EnableDMAReq_TRIG + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_EnableDMAReq_TRIG(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->DIER, TIM_DIER_TDE); +} + +/** + * @brief Disable trigger interrupt (TDE). + * @rmtoll DIER TDE LL_TIM_DisableDMAReq_TRIG + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_DisableDMAReq_TRIG(TIM_TypeDef *TIMx) +{ + CLEAR_BIT(TIMx->DIER, TIM_DIER_TDE); +} + +/** + * @brief Indicates whether the trigger interrupt (TDE) is enabled. + * @rmtoll DIER TDE LL_TIM_IsEnabledDMAReq_TRIG + * @param TIMx Timer instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_TRIG(const TIM_TypeDef *TIMx) +{ + return ((READ_BIT(TIMx->DIER, TIM_DIER_TDE) == (TIM_DIER_TDE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup TIM_LL_EF_EVENT_Management EVENT-Management + * @{ + */ +/** + * @brief Generate an update event. + * @rmtoll EGR UG LL_TIM_GenerateEvent_UPDATE + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_UPDATE(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_UG); +} + +/** + * @brief Generate Capture/Compare 1 event. + * @rmtoll EGR CC1G LL_TIM_GenerateEvent_CC1 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_CC1(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_CC1G); +} + +/** + * @brief Generate Capture/Compare 2 event. + * @rmtoll EGR CC2G LL_TIM_GenerateEvent_CC2 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_CC2(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_CC2G); +} + +/** + * @brief Generate Capture/Compare 3 event. + * @rmtoll EGR CC3G LL_TIM_GenerateEvent_CC3 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_CC3(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_CC3G); +} + +/** + * @brief Generate Capture/Compare 4 event. + * @rmtoll EGR CC4G LL_TIM_GenerateEvent_CC4 + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_CC4(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_CC4G); +} + +/** + * @brief Generate commutation event. + * @rmtoll EGR COMG LL_TIM_GenerateEvent_COM + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_COM(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_COMG); +} + +/** + * @brief Generate trigger event. + * @rmtoll EGR TG LL_TIM_GenerateEvent_TRIG + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_TRIG(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_TG); +} + +/** + * @brief Generate break event. + * @rmtoll EGR BG LL_TIM_GenerateEvent_BRK + * @param TIMx Timer instance + * @retval None + */ +__STATIC_INLINE void LL_TIM_GenerateEvent_BRK(TIM_TypeDef *TIMx) +{ + SET_BIT(TIMx->EGR, TIM_EGR_BG); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup TIM_LL_EF_Init Initialisation and deinitialisation functions + * @{ + */ + +ErrorStatus LL_TIM_DeInit(const TIM_TypeDef *TIMx); +void LL_TIM_StructInit(LL_TIM_InitTypeDef *TIM_InitStruct); +ErrorStatus LL_TIM_Init(TIM_TypeDef *TIMx, const LL_TIM_InitTypeDef *TIM_InitStruct); +void LL_TIM_OC_StructInit(LL_TIM_OC_InitTypeDef *TIM_OC_InitStruct); +ErrorStatus LL_TIM_OC_Init(TIM_TypeDef *TIMx, uint32_t Channel, const LL_TIM_OC_InitTypeDef *TIM_OC_InitStruct); +void LL_TIM_IC_StructInit(LL_TIM_IC_InitTypeDef *TIM_ICInitStruct); +ErrorStatus LL_TIM_IC_Init(TIM_TypeDef *TIMx, uint32_t Channel, const LL_TIM_IC_InitTypeDef *TIM_IC_InitStruct); +void LL_TIM_ENCODER_StructInit(LL_TIM_ENCODER_InitTypeDef *TIM_EncoderInitStruct); +ErrorStatus LL_TIM_ENCODER_Init(TIM_TypeDef *TIMx, const LL_TIM_ENCODER_InitTypeDef *TIM_EncoderInitStruct); +void LL_TIM_HALLSENSOR_StructInit(LL_TIM_HALLSENSOR_InitTypeDef *TIM_HallSensorInitStruct); +ErrorStatus LL_TIM_HALLSENSOR_Init(TIM_TypeDef *TIMx, const LL_TIM_HALLSENSOR_InitTypeDef *TIM_HallSensorInitStruct); +void LL_TIM_BDTR_StructInit(LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct); +ErrorStatus LL_TIM_BDTR_Init(TIM_TypeDef *TIMx, const LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct); +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* TIM1 || TIM2 || TIM3 || TIM4 || TIM5 || TIM6 || TIM7 || TIM8 || TIM9 || TIM10 || TIM11 || TIM12 || TIM13 || TIM14 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_TIM_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h new file mode 100644 index 00000000..ed83b6c6 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h @@ -0,0 +1,2521 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_usart.h + * @author MCD Application Team + * @brief Header file of USART LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_USART_H +#define __STM32F4xx_LL_USART_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART6) || defined (UART4) || defined (UART5) || defined (UART7) || defined (UART8) || defined (UART9) || defined (UART10) + +/** @defgroup USART_LL USART + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup USART_LL_Private_Constants USART Private Constants + * @{ + */ + +/* Defines used for the bit position in the register and perform offsets*/ +#define USART_POSITION_GTPR_GT USART_GTPR_GT_Pos +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_Private_Macros USART Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_ES_INIT USART Exported Init structures + * @{ + */ + +/** + * @brief LL USART Init Structure definition + */ +typedef struct +{ + uint32_t BaudRate; /*!< This field defines expected Usart communication baud rate. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetBaudRate().*/ + + uint32_t DataWidth; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref USART_LL_EC_DATAWIDTH. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetDataWidth().*/ + + uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. + This parameter can be a value of @ref USART_LL_EC_STOPBITS. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetStopBitsLength().*/ + + uint32_t Parity; /*!< Specifies the parity mode. + This parameter can be a value of @ref USART_LL_EC_PARITY. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetParity().*/ + + uint32_t TransferDirection; /*!< Specifies whether the Receive and/or Transmit mode is enabled or disabled. + This parameter can be a value of @ref USART_LL_EC_DIRECTION. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetTransferDirection().*/ + + uint32_t HardwareFlowControl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. + This parameter can be a value of @ref USART_LL_EC_HWCONTROL. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetHWFlowCtrl().*/ + + uint32_t OverSampling; /*!< Specifies whether USART oversampling mode is 16 or 8. + This parameter can be a value of @ref USART_LL_EC_OVERSAMPLING. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetOverSampling().*/ + +} LL_USART_InitTypeDef; + +/** + * @brief LL USART Clock Init Structure definition + */ +typedef struct +{ + uint32_t ClockOutput; /*!< Specifies whether the USART clock is enabled or disabled. + This parameter can be a value of @ref USART_LL_EC_CLOCK. + + USART HW configuration can be modified afterwards using unitary functions + @ref LL_USART_EnableSCLKOutput() or @ref LL_USART_DisableSCLKOutput(). + For more details, refer to description of this function. */ + + uint32_t ClockPolarity; /*!< Specifies the steady state of the serial clock. + This parameter can be a value of @ref USART_LL_EC_POLARITY. + + USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPolarity(). + For more details, refer to description of this function. */ + + uint32_t ClockPhase; /*!< Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref USART_LL_EC_PHASE. + + USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPhase(). + For more details, refer to description of this function. */ + + uint32_t LastBitClockPulse; /*!< Specifies whether the clock pulse corresponding to the last transmitted + data bit (MSB) has to be output on the SCLK pin in synchronous mode. + This parameter can be a value of @ref USART_LL_EC_LASTCLKPULSE. + + USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetLastClkPulseOutput(). + For more details, refer to description of this function. */ + +} LL_USART_ClockInitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup USART_LL_Exported_Constants USART Exported Constants + * @{ + */ + +/** @defgroup USART_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_USART_ReadReg function + * @{ + */ +#define LL_USART_SR_PE USART_SR_PE /*!< Parity error flag */ +#define LL_USART_SR_FE USART_SR_FE /*!< Framing error flag */ +#define LL_USART_SR_NE USART_SR_NE /*!< Noise detected flag */ +#define LL_USART_SR_ORE USART_SR_ORE /*!< Overrun error flag */ +#define LL_USART_SR_IDLE USART_SR_IDLE /*!< Idle line detected flag */ +#define LL_USART_SR_RXNE USART_SR_RXNE /*!< Read data register not empty flag */ +#define LL_USART_SR_TC USART_SR_TC /*!< Transmission complete flag */ +#define LL_USART_SR_TXE USART_SR_TXE /*!< Transmit data register empty flag */ +#define LL_USART_SR_LBD USART_SR_LBD /*!< LIN break detection flag */ +#define LL_USART_SR_CTS USART_SR_CTS /*!< CTS flag */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_USART_ReadReg and LL_USART_WriteReg functions + * @{ + */ +#define LL_USART_CR1_IDLEIE USART_CR1_IDLEIE /*!< IDLE interrupt enable */ +#define LL_USART_CR1_RXNEIE USART_CR1_RXNEIE /*!< Read data register not empty interrupt enable */ +#define LL_USART_CR1_TCIE USART_CR1_TCIE /*!< Transmission complete interrupt enable */ +#define LL_USART_CR1_TXEIE USART_CR1_TXEIE /*!< Transmit data register empty interrupt enable */ +#define LL_USART_CR1_PEIE USART_CR1_PEIE /*!< Parity error */ +#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */ +#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */ +#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_DIRECTION Communication Direction + * @{ + */ +#define LL_USART_DIRECTION_NONE 0x00000000U /*!< Transmitter and Receiver are disabled */ +#define LL_USART_DIRECTION_RX USART_CR1_RE /*!< Transmitter is disabled and Receiver is enabled */ +#define LL_USART_DIRECTION_TX USART_CR1_TE /*!< Transmitter is enabled and Receiver is disabled */ +#define LL_USART_DIRECTION_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< Transmitter and Receiver are enabled */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_PARITY Parity Control + * @{ + */ +#define LL_USART_PARITY_NONE 0x00000000U /*!< Parity control disabled */ +#define LL_USART_PARITY_EVEN USART_CR1_PCE /*!< Parity control enabled and Even Parity is selected */ +#define LL_USART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Parity control enabled and Odd Parity is selected */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_WAKEUP Wakeup + * @{ + */ +#define LL_USART_WAKEUP_IDLELINE 0x00000000U /*!< USART wake up from Mute mode on Idle Line */ +#define LL_USART_WAKEUP_ADDRESSMARK USART_CR1_WAKE /*!< USART wake up from Mute mode on Address Mark */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_DATAWIDTH Datawidth + * @{ + */ +#define LL_USART_DATAWIDTH_8B 0x00000000U /*!< 8 bits word length : Start bit, 8 data bits, n stop bits */ +#define LL_USART_DATAWIDTH_9B USART_CR1_M /*!< 9 bits word length : Start bit, 9 data bits, n stop bits */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_OVERSAMPLING Oversampling + * @{ + */ +#define LL_USART_OVERSAMPLING_16 0x00000000U /*!< Oversampling by 16 */ +#define LL_USART_OVERSAMPLING_8 USART_CR1_OVER8 /*!< Oversampling by 8 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_EC_CLOCK Clock Signal + * @{ + */ + +#define LL_USART_CLOCK_DISABLE 0x00000000U /*!< Clock signal not provided */ +#define LL_USART_CLOCK_ENABLE USART_CR2_CLKEN /*!< Clock signal provided */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/** @defgroup USART_LL_EC_LASTCLKPULSE Last Clock Pulse + * @{ + */ +#define LL_USART_LASTCLKPULSE_NO_OUTPUT 0x00000000U /*!< The clock pulse of the last data bit is not output to the SCLK pin */ +#define LL_USART_LASTCLKPULSE_OUTPUT USART_CR2_LBCL /*!< The clock pulse of the last data bit is output to the SCLK pin */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_PHASE Clock Phase + * @{ + */ +#define LL_USART_PHASE_1EDGE 0x00000000U /*!< The first clock transition is the first data capture edge */ +#define LL_USART_PHASE_2EDGE USART_CR2_CPHA /*!< The second clock transition is the first data capture edge */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_POLARITY Clock Polarity + * @{ + */ +#define LL_USART_POLARITY_LOW 0x00000000U /*!< Steady low value on SCLK pin outside transmission window*/ +#define LL_USART_POLARITY_HIGH USART_CR2_CPOL /*!< Steady high value on SCLK pin outside transmission window */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_STOPBITS Stop Bits + * @{ + */ +#define LL_USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< 0.5 stop bit */ +#define LL_USART_STOPBITS_1 0x00000000U /*!< 1 stop bit */ +#define LL_USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< 1.5 stop bits */ +#define LL_USART_STOPBITS_2 USART_CR2_STOP_1 /*!< 2 stop bits */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_HWCONTROL Hardware Control + * @{ + */ +#define LL_USART_HWCONTROL_NONE 0x00000000U /*!< CTS and RTS hardware flow control disabled */ +#define LL_USART_HWCONTROL_RTS USART_CR3_RTSE /*!< RTS output enabled, data is only requested when there is space in the receive buffer */ +#define LL_USART_HWCONTROL_CTS USART_CR3_CTSE /*!< CTS mode enabled, data is only transmitted when the nCTS input is asserted (tied to 0) */ +#define LL_USART_HWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE) /*!< CTS and RTS hardware flow control enabled */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power + * @{ + */ +#define LL_USART_IRDA_POWER_NORMAL 0x00000000U /*!< IrDA normal power mode */ +#define LL_USART_IRDA_POWER_LOW USART_CR3_IRLP /*!< IrDA low power mode */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_LINBREAK_DETECT LIN Break Detection Length + * @{ + */ +#define LL_USART_LINBREAK_DETECT_10B 0x00000000U /*!< 10-bit break detection method selected */ +#define LL_USART_LINBREAK_DETECT_11B USART_CR2_LBDL /*!< 11-bit break detection method selected */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup USART_LL_Exported_Macros USART Exported Macros + * @{ + */ + +/** @defgroup USART_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in USART register + * @param __INSTANCE__ USART Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_USART_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in USART register + * @param __INSTANCE__ USART Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_USART_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** @defgroup USART_LL_EM_Exported_Macros_Helper Exported Macros Helper + * @{ + */ + +/** + * @brief Compute USARTDIV value according to Peripheral Clock and + * expected Baud Rate in 8 bits sampling mode (32 bits value of USARTDIV is returned) + * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance + * @param __BAUDRATE__ Baud rate value to achieve + * @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case + */ +#define __LL_USART_DIV_SAMPLING8_100(__PERIPHCLK__, __BAUDRATE__) ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(2*((uint64_t)(__BAUDRATE__))))) +#define __LL_USART_DIVMANT_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__))/100) +#define __LL_USART_DIVFRAQ_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 8)\ + + 50) / 100) +/* UART BRR = mantissa + overflow + fraction + = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07) */ +#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \ + ((__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0xF8) << 1)) + \ + (__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0x07)) + +/** + * @brief Compute USARTDIV value according to Peripheral Clock and + * expected Baud Rate in 16 bits sampling mode (32 bits value of USARTDIV is returned) + * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance + * @param __BAUDRATE__ Baud rate value to achieve + * @retval USARTDIV value to be used for BRR register filling in OverSampling_16 case + */ +#define __LL_USART_DIV_SAMPLING16_100(__PERIPHCLK__, __BAUDRATE__) ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(4*((uint64_t)(__BAUDRATE__))))) +#define __LL_USART_DIVMANT_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__))/100) +#define __LL_USART_DIVFRAQ_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 16)\ + + 50) / 100) +/* USART BRR = mantissa + overflow + fraction + = (USART DIVMANT << 4) + (USART DIVFRAQ & 0xF0) + (USART DIVFRAQ & 0x0F) */ +#define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \ + (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0xF0)) + \ + (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0x0F)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup USART_LL_Exported_Functions USART Exported Functions + * @{ + */ + +/** @defgroup USART_LL_EF_Configuration Configuration functions + * @{ + */ + +/** + * @brief USART Enable + * @rmtoll CR1 UE LL_USART_Enable + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_UE); +} + +/** + * @brief USART Disable (all USART prescalers and outputs are disabled) + * @note When USART is disabled, USART prescalers and outputs are stopped immediately, + * and current operations are discarded. The configuration of the USART is kept, but all the status + * flags, in the USARTx_SR are set to their default values. + * @rmtoll CR1 UE LL_USART_Disable + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_Disable(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_UE); +} + +/** + * @brief Indicate if USART is enabled + * @rmtoll CR1 UE LL_USART_IsEnabled + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabled(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)); +} + +/** + * @brief Receiver Enable (Receiver is enabled and begins searching for a start bit) + * @rmtoll CR1 RE LL_USART_EnableDirectionRx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDirectionRx(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RE); +} + +/** + * @brief Receiver Disable + * @rmtoll CR1 RE LL_USART_DisableDirectionRx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDirectionRx(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RE); +} + +/** + * @brief Transmitter Enable + * @rmtoll CR1 TE LL_USART_EnableDirectionTx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDirectionTx(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TE); +} + +/** + * @brief Transmitter Disable + * @rmtoll CR1 TE LL_USART_DisableDirectionTx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDirectionTx(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TE); +} + +/** + * @brief Configure simultaneously enabled/disabled states + * of Transmitter and Receiver + * @rmtoll CR1 RE LL_USART_SetTransferDirection\n + * CR1 TE LL_USART_SetTransferDirection + * @param USARTx USART Instance + * @param TransferDirection This parameter can be one of the following values: + * @arg @ref LL_USART_DIRECTION_NONE + * @arg @ref LL_USART_DIRECTION_RX + * @arg @ref LL_USART_DIRECTION_TX + * @arg @ref LL_USART_DIRECTION_TX_RX + * @retval None + */ +__STATIC_INLINE void LL_USART_SetTransferDirection(USART_TypeDef *USARTx, uint32_t TransferDirection) +{ + ATOMIC_MODIFY_REG(USARTx->CR1, USART_CR1_RE | USART_CR1_TE, TransferDirection); +} + +/** + * @brief Return enabled/disabled states of Transmitter and Receiver + * @rmtoll CR1 RE LL_USART_GetTransferDirection\n + * CR1 TE LL_USART_GetTransferDirection + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_DIRECTION_NONE + * @arg @ref LL_USART_DIRECTION_RX + * @arg @ref LL_USART_DIRECTION_TX + * @arg @ref LL_USART_DIRECTION_TX_RX + */ +__STATIC_INLINE uint32_t LL_USART_GetTransferDirection(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_RE | USART_CR1_TE)); +} + +/** + * @brief Configure Parity (enabled/disabled and parity mode if enabled). + * @note This function selects if hardware parity control (generation and detection) is enabled or disabled. + * When the parity control is enabled (Odd or Even), computed parity bit is inserted at the MSB position + * (9th or 8th bit depending on data width) and parity is checked on the received data. + * @rmtoll CR1 PS LL_USART_SetParity\n + * CR1 PCE LL_USART_SetParity + * @param USARTx USART Instance + * @param Parity This parameter can be one of the following values: + * @arg @ref LL_USART_PARITY_NONE + * @arg @ref LL_USART_PARITY_EVEN + * @arg @ref LL_USART_PARITY_ODD + * @retval None + */ +__STATIC_INLINE void LL_USART_SetParity(USART_TypeDef *USARTx, uint32_t Parity) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE, Parity); +} + +/** + * @brief Return Parity configuration (enabled/disabled and parity mode if enabled) + * @rmtoll CR1 PS LL_USART_GetParity\n + * CR1 PCE LL_USART_GetParity + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_PARITY_NONE + * @arg @ref LL_USART_PARITY_EVEN + * @arg @ref LL_USART_PARITY_ODD + */ +__STATIC_INLINE uint32_t LL_USART_GetParity(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE)); +} + +/** + * @brief Set Receiver Wake Up method from Mute mode. + * @rmtoll CR1 WAKE LL_USART_SetWakeUpMethod + * @param USARTx USART Instance + * @param Method This parameter can be one of the following values: + * @arg @ref LL_USART_WAKEUP_IDLELINE + * @arg @ref LL_USART_WAKEUP_ADDRESSMARK + * @retval None + */ +__STATIC_INLINE void LL_USART_SetWakeUpMethod(USART_TypeDef *USARTx, uint32_t Method) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_WAKE, Method); +} + +/** + * @brief Return Receiver Wake Up method from Mute mode + * @rmtoll CR1 WAKE LL_USART_GetWakeUpMethod + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_WAKEUP_IDLELINE + * @arg @ref LL_USART_WAKEUP_ADDRESSMARK + */ +__STATIC_INLINE uint32_t LL_USART_GetWakeUpMethod(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_WAKE)); +} + +/** + * @brief Set Word length (i.e. nb of data bits, excluding start and stop bits) + * @rmtoll CR1 M LL_USART_SetDataWidth + * @param USARTx USART Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + * @retval None + */ +__STATIC_INLINE void LL_USART_SetDataWidth(USART_TypeDef *USARTx, uint32_t DataWidth) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_M, DataWidth); +} + +/** + * @brief Return Word length (i.e. nb of data bits, excluding start and stop bits) + * @rmtoll CR1 M LL_USART_GetDataWidth + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + */ +__STATIC_INLINE uint32_t LL_USART_GetDataWidth(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_M)); +} + +/** + * @brief Set Oversampling to 8-bit or 16-bit mode + * @rmtoll CR1 OVER8 LL_USART_SetOverSampling + * @param USARTx USART Instance + * @param OverSampling This parameter can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetOverSampling(USART_TypeDef *USARTx, uint32_t OverSampling) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_OVER8, OverSampling); +} + +/** + * @brief Return Oversampling mode + * @rmtoll CR1 OVER8 LL_USART_GetOverSampling + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + */ +__STATIC_INLINE uint32_t LL_USART_GetOverSampling(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_OVER8)); +} + +/** + * @brief Configure if Clock pulse of the last data bit is output to the SCLK pin or not + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 LBCL LL_USART_SetLastClkPulseOutput + * @param USARTx USART Instance + * @param LastBitClockPulse This parameter can be one of the following values: + * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT + * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT + * @retval None + */ +__STATIC_INLINE void LL_USART_SetLastClkPulseOutput(USART_TypeDef *USARTx, uint32_t LastBitClockPulse) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_LBCL, LastBitClockPulse); +} + +/** + * @brief Retrieve Clock pulse of the last data bit output configuration + * (Last bit Clock pulse output to the SCLK pin or not) + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 LBCL LL_USART_GetLastClkPulseOutput + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT + * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT + */ +__STATIC_INLINE uint32_t LL_USART_GetLastClkPulseOutput(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBCL)); +} + +/** + * @brief Select the phase of the clock output on the SCLK pin in synchronous mode + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPHA LL_USART_SetClockPhase + * @param USARTx USART Instance + * @param ClockPhase This parameter can be one of the following values: + * @arg @ref LL_USART_PHASE_1EDGE + * @arg @ref LL_USART_PHASE_2EDGE + * @retval None + */ +__STATIC_INLINE void LL_USART_SetClockPhase(USART_TypeDef *USARTx, uint32_t ClockPhase) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_CPHA, ClockPhase); +} + +/** + * @brief Return phase of the clock output on the SCLK pin in synchronous mode + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPHA LL_USART_GetClockPhase + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_PHASE_1EDGE + * @arg @ref LL_USART_PHASE_2EDGE + */ +__STATIC_INLINE uint32_t LL_USART_GetClockPhase(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPHA)); +} + +/** + * @brief Select the polarity of the clock output on the SCLK pin in synchronous mode + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPOL LL_USART_SetClockPolarity + * @param USARTx USART Instance + * @param ClockPolarity This parameter can be one of the following values: + * @arg @ref LL_USART_POLARITY_LOW + * @arg @ref LL_USART_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_USART_SetClockPolarity(USART_TypeDef *USARTx, uint32_t ClockPolarity) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_CPOL, ClockPolarity); +} + +/** + * @brief Return polarity of the clock output on the SCLK pin in synchronous mode + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPOL LL_USART_GetClockPolarity + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_POLARITY_LOW + * @arg @ref LL_USART_POLARITY_HIGH + */ +__STATIC_INLINE uint32_t LL_USART_GetClockPolarity(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPOL)); +} + +/** + * @brief Configure Clock signal format (Phase Polarity and choice about output of last bit clock pulse) + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clock Phase configuration using @ref LL_USART_SetClockPhase() function + * - Clock Polarity configuration using @ref LL_USART_SetClockPolarity() function + * - Output of Last bit Clock pulse configuration using @ref LL_USART_SetLastClkPulseOutput() function + * @rmtoll CR2 CPHA LL_USART_ConfigClock\n + * CR2 CPOL LL_USART_ConfigClock\n + * CR2 LBCL LL_USART_ConfigClock + * @param USARTx USART Instance + * @param Phase This parameter can be one of the following values: + * @arg @ref LL_USART_PHASE_1EDGE + * @arg @ref LL_USART_PHASE_2EDGE + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_USART_POLARITY_LOW + * @arg @ref LL_USART_POLARITY_HIGH + * @param LBCPOutput This parameter can be one of the following values: + * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT + * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigClock(USART_TypeDef *USARTx, uint32_t Phase, uint32_t Polarity, uint32_t LBCPOutput) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL, Phase | Polarity | LBCPOutput); +} + +/** + * @brief Enable Clock output on SCLK pin + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CLKEN LL_USART_EnableSCLKOutput + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSCLKOutput(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +/** + * @brief Disable Clock output on SCLK pin + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CLKEN LL_USART_DisableSCLKOutput + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSCLKOutput(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +/** + * @brief Indicate if Clock output on SCLK pin is enabled + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CLKEN LL_USART_IsEnabledSCLKOutput + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSCLKOutput(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_CLKEN) == (USART_CR2_CLKEN)); +} + +/** + * @brief Set the length of the stop bits + * @rmtoll CR2 STOP LL_USART_SetStopBitsLength + * @param USARTx USART Instance + * @param StopBits This parameter can be one of the following values: + * @arg @ref LL_USART_STOPBITS_0_5 + * @arg @ref LL_USART_STOPBITS_1 + * @arg @ref LL_USART_STOPBITS_1_5 + * @arg @ref LL_USART_STOPBITS_2 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetStopBitsLength(USART_TypeDef *USARTx, uint32_t StopBits) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); +} + +/** + * @brief Retrieve the length of the stop bits + * @rmtoll CR2 STOP LL_USART_GetStopBitsLength + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_STOPBITS_0_5 + * @arg @ref LL_USART_STOPBITS_1 + * @arg @ref LL_USART_STOPBITS_1_5 + * @arg @ref LL_USART_STOPBITS_2 + */ +__STATIC_INLINE uint32_t LL_USART_GetStopBitsLength(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_STOP)); +} + +/** + * @brief Configure Character frame format (Datawidth, Parity control, Stop Bits) + * @note Call of this function is equivalent to following function call sequence : + * - Data Width configuration using @ref LL_USART_SetDataWidth() function + * - Parity Control and mode configuration using @ref LL_USART_SetParity() function + * - Stop bits configuration using @ref LL_USART_SetStopBitsLength() function + * @rmtoll CR1 PS LL_USART_ConfigCharacter\n + * CR1 PCE LL_USART_ConfigCharacter\n + * CR1 M LL_USART_ConfigCharacter\n + * CR2 STOP LL_USART_ConfigCharacter + * @param USARTx USART Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + * @param Parity This parameter can be one of the following values: + * @arg @ref LL_USART_PARITY_NONE + * @arg @ref LL_USART_PARITY_EVEN + * @arg @ref LL_USART_PARITY_ODD + * @param StopBits This parameter can be one of the following values: + * @arg @ref LL_USART_STOPBITS_0_5 + * @arg @ref LL_USART_STOPBITS_1 + * @arg @ref LL_USART_STOPBITS_1_5 + * @arg @ref LL_USART_STOPBITS_2 + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigCharacter(USART_TypeDef *USARTx, uint32_t DataWidth, uint32_t Parity, + uint32_t StopBits) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE | USART_CR1_M, Parity | DataWidth); + MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); +} + +/** + * @brief Set Address of the USART node. + * @note This is used in multiprocessor communication during Mute mode or Stop mode, + * for wake up with address mark detection. + * @rmtoll CR2 ADD LL_USART_SetNodeAddress + * @param USARTx USART Instance + * @param NodeAddress 4 bit Address of the USART node. + * @retval None + */ +__STATIC_INLINE void LL_USART_SetNodeAddress(USART_TypeDef *USARTx, uint32_t NodeAddress) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_ADD, (NodeAddress & USART_CR2_ADD)); +} + +/** + * @brief Return 4 bit Address of the USART node as set in ADD field of CR2. + * @note only 4bits (b3-b0) of returned value are relevant (b31-b4 are not relevant) + * @rmtoll CR2 ADD LL_USART_GetNodeAddress + * @param USARTx USART Instance + * @retval Address of the USART node (Value between Min_Data=0 and Max_Data=255) + */ +__STATIC_INLINE uint32_t LL_USART_GetNodeAddress(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADD)); +} + +/** + * @brief Enable RTS HW Flow Control + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_EnableRTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_RTSE); +} + +/** + * @brief Disable RTS HW Flow Control + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_DisableRTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_RTSE); +} + +/** + * @brief Enable CTS HW Flow Control + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSE LL_USART_EnableCTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_CTSE); +} + +/** + * @brief Disable CTS HW Flow Control + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSE LL_USART_DisableCTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_CTSE); +} + +/** + * @brief Configure HW Flow Control mode (both CTS and RTS) + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_SetHWFlowCtrl\n + * CR3 CTSE LL_USART_SetHWFlowCtrl + * @param USARTx USART Instance + * @param HardwareFlowControl This parameter can be one of the following values: + * @arg @ref LL_USART_HWCONTROL_NONE + * @arg @ref LL_USART_HWCONTROL_RTS + * @arg @ref LL_USART_HWCONTROL_CTS + * @arg @ref LL_USART_HWCONTROL_RTS_CTS + * @retval None + */ +__STATIC_INLINE void LL_USART_SetHWFlowCtrl(USART_TypeDef *USARTx, uint32_t HardwareFlowControl) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE, HardwareFlowControl); +} + +/** + * @brief Return HW Flow Control configuration (both CTS and RTS) + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_GetHWFlowCtrl\n + * CR3 CTSE LL_USART_GetHWFlowCtrl + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_HWCONTROL_NONE + * @arg @ref LL_USART_HWCONTROL_RTS + * @arg @ref LL_USART_HWCONTROL_CTS + * @arg @ref LL_USART_HWCONTROL_RTS_CTS + */ +__STATIC_INLINE uint32_t LL_USART_GetHWFlowCtrl(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE)); +} + +/** + * @brief Enable One bit sampling method + * @rmtoll CR3 ONEBIT LL_USART_EnableOneBitSamp + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableOneBitSamp(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_ONEBIT); +} + +/** + * @brief Disable One bit sampling method + * @rmtoll CR3 ONEBIT LL_USART_DisableOneBitSamp + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableOneBitSamp(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_ONEBIT); +} + +/** + * @brief Indicate if One bit sampling method is enabled + * @rmtoll CR3 ONEBIT LL_USART_IsEnabledOneBitSamp + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledOneBitSamp(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT)); +} + +/** + * @brief Configure USART BRR register for achieving expected Baud Rate value. + * @note Compute and set USARTDIV value in BRR Register (full BRR content) + * according to used Peripheral Clock, Oversampling mode, and expected Baud Rate values + * @note Peripheral clock and Baud rate values provided as function parameters should be valid + * (Baud rate value != 0) + * @rmtoll BRR BRR LL_USART_SetBaudRate + * @param USARTx USART Instance + * @param PeriphClk Peripheral Clock + * @param OverSampling This parameter can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + * @param BaudRate Baud Rate + * @retval None + */ +__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling, + uint32_t BaudRate) +{ + if (OverSampling == LL_USART_OVERSAMPLING_8) + { + USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate)); + } + else + { + USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate)); + } +} + +/** + * @brief Return current Baud Rate value, according to USARTDIV present in BRR register + * (full BRR content), and to used Peripheral Clock and Oversampling mode values + * @note In case of non-initialized or invalid value stored in BRR register, value 0 will be returned. + * @rmtoll BRR BRR LL_USART_GetBaudRate + * @param USARTx USART Instance + * @param PeriphClk Peripheral Clock + * @param OverSampling This parameter can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + * @retval Baud Rate + */ +__STATIC_INLINE uint32_t LL_USART_GetBaudRate(const USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling) +{ + uint32_t usartdiv = 0x0U; + uint32_t brrresult = 0x0U; + + usartdiv = USARTx->BRR; + + if (OverSampling == LL_USART_OVERSAMPLING_8) + { + if ((usartdiv & 0xFFF7U) != 0U) + { + usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ; + brrresult = (PeriphClk * 2U) / usartdiv; + } + } + else + { + if ((usartdiv & 0xFFFFU) != 0U) + { + brrresult = PeriphClk / usartdiv; + } + } + return (brrresult); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_IRDA Configuration functions related to Irda feature + * @{ + */ + +/** + * @brief Enable IrDA mode + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IREN LL_USART_EnableIrda + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIrda(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_IREN); +} + +/** + * @brief Disable IrDA mode + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IREN LL_USART_DisableIrda + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIrda(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_IREN); +} + +/** + * @brief Indicate if IrDA mode is enabled + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IREN LL_USART_IsEnabledIrda + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIrda(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_IREN) == (USART_CR3_IREN)); +} + +/** + * @brief Configure IrDA Power Mode (Normal or Low Power) + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IRLP LL_USART_SetIrdaPowerMode + * @param USARTx USART Instance + * @param PowerMode This parameter can be one of the following values: + * @arg @ref LL_USART_IRDA_POWER_NORMAL + * @arg @ref LL_USART_IRDA_POWER_LOW + * @retval None + */ +__STATIC_INLINE void LL_USART_SetIrdaPowerMode(USART_TypeDef *USARTx, uint32_t PowerMode) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_IRLP, PowerMode); +} + +/** + * @brief Retrieve IrDA Power Mode configuration (Normal or Low Power) + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IRLP LL_USART_GetIrdaPowerMode + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_IRDA_POWER_NORMAL + * @arg @ref LL_USART_PHASE_2EDGE + */ +__STATIC_INLINE uint32_t LL_USART_GetIrdaPowerMode(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_IRLP)); +} + +/** + * @brief Set Irda prescaler value, used for dividing the USART clock source + * to achieve the Irda Low Power frequency (8 bits value) + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_SetIrdaPrescaler + * @param USARTx USART Instance + * @param PrescalerValue Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_SetIrdaPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) +{ + MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue); +} + +/** + * @brief Return Irda prescaler value, used for dividing the USART clock source + * to achieve the Irda Low Power frequency (8 bits value) + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_GetIrdaPrescaler + * @param USARTx USART Instance + * @retval Irda prescaler value (Value between Min_Data=0x00 and Max_Data=0xFF) + */ +__STATIC_INLINE uint32_t LL_USART_GetIrdaPrescaler(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_Smartcard Configuration functions related to Smartcard feature + * @{ + */ + +/** + * @brief Enable Smartcard NACK transmission + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 NACK LL_USART_EnableSmartcardNACK + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSmartcardNACK(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_NACK); +} + +/** + * @brief Disable Smartcard NACK transmission + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 NACK LL_USART_DisableSmartcardNACK + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSmartcardNACK(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_NACK); +} + +/** + * @brief Indicate if Smartcard NACK transmission is enabled + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 NACK LL_USART_IsEnabledSmartcardNACK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcardNACK(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_NACK) == (USART_CR3_NACK)); +} + +/** + * @brief Enable Smartcard mode + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCEN LL_USART_EnableSmartcard + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSmartcard(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_SCEN); +} + +/** + * @brief Disable Smartcard mode + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCEN LL_USART_DisableSmartcard + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSmartcard(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_SCEN); +} + +/** + * @brief Indicate if Smartcard mode is enabled + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCEN LL_USART_IsEnabledSmartcard + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcard(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_SCEN) == (USART_CR3_SCEN)); +} + +/** + * @brief Set Smartcard prescaler value, used for dividing the USART clock + * source to provide the SMARTCARD Clock (5 bits value) + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_SetSmartcardPrescaler + * @param USARTx USART Instance + * @param PrescalerValue Value between Min_Data=0 and Max_Data=31 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetSmartcardPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) +{ + MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue); +} + +/** + * @brief Return Smartcard prescaler value, used for dividing the USART clock + * source to provide the SMARTCARD Clock (5 bits value) + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_GetSmartcardPrescaler + * @param USARTx USART Instance + * @retval Smartcard prescaler value (Value between Min_Data=0 and Max_Data=31) + */ +__STATIC_INLINE uint32_t LL_USART_GetSmartcardPrescaler(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); +} + +/** + * @brief Set Smartcard Guard time value, expressed in nb of baud clocks periods + * (GT[7:0] bits : Guard time value) + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR GT LL_USART_SetSmartcardGuardTime + * @param USARTx USART Instance + * @param GuardTime Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_SetSmartcardGuardTime(USART_TypeDef *USARTx, uint32_t GuardTime) +{ + MODIFY_REG(USARTx->GTPR, USART_GTPR_GT, GuardTime << USART_POSITION_GTPR_GT); +} + +/** + * @brief Return Smartcard Guard time value, expressed in nb of baud clocks periods + * (GT[7:0] bits : Guard time value) + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR GT LL_USART_GetSmartcardGuardTime + * @param USARTx USART Instance + * @retval Smartcard Guard time value (Value between Min_Data=0x00 and Max_Data=0xFF) + */ +__STATIC_INLINE uint32_t LL_USART_GetSmartcardGuardTime(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_GT) >> USART_POSITION_GTPR_GT); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_HalfDuplex Configuration functions related to Half Duplex feature + * @{ + */ + +/** + * @brief Enable Single Wire Half-Duplex mode + * @note Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @rmtoll CR3 HDSEL LL_USART_EnableHalfDuplex + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableHalfDuplex(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +/** + * @brief Disable Single Wire Half-Duplex mode + * @note Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @rmtoll CR3 HDSEL LL_USART_DisableHalfDuplex + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableHalfDuplex(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +/** + * @brief Indicate if Single Wire Half-Duplex mode is enabled + * @note Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @rmtoll CR3 HDSEL LL_USART_IsEnabledHalfDuplex + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledHalfDuplex(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_HDSEL) == (USART_CR3_HDSEL)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature + * @{ + */ + +/** + * @brief Set LIN Break Detection Length + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDL LL_USART_SetLINBrkDetectionLen + * @param USARTx USART Instance + * @param LINBDLength This parameter can be one of the following values: + * @arg @ref LL_USART_LINBREAK_DETECT_10B + * @arg @ref LL_USART_LINBREAK_DETECT_11B + * @retval None + */ +__STATIC_INLINE void LL_USART_SetLINBrkDetectionLen(USART_TypeDef *USARTx, uint32_t LINBDLength) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_LBDL, LINBDLength); +} + +/** + * @brief Return LIN Break Detection Length + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDL LL_USART_GetLINBrkDetectionLen + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_LINBREAK_DETECT_10B + * @arg @ref LL_USART_LINBREAK_DETECT_11B + */ +__STATIC_INLINE uint32_t LL_USART_GetLINBrkDetectionLen(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBDL)); +} + +/** + * @brief Enable LIN mode + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LINEN LL_USART_EnableLIN + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableLIN(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_LINEN); +} + +/** + * @brief Disable LIN mode + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LINEN LL_USART_DisableLIN + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableLIN(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_LINEN); +} + +/** + * @brief Indicate if LIN mode is enabled + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LINEN LL_USART_IsEnabledLIN + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledLIN(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_LINEN) == (USART_CR2_LINEN)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_AdvancedConfiguration Advanced Configurations services + * @{ + */ + +/** + * @brief Perform basic configuration of USART for enabling use in Asynchronous Mode (UART) + * @note In UART mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * @note Other remaining configurations items related to Asynchronous Mode + * (as Baud Rate, Word length, Parity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigAsyncMode\n + * CR2 CLKEN LL_USART_ConfigAsyncMode\n + * CR3 SCEN LL_USART_ConfigAsyncMode\n + * CR3 IREN LL_USART_ConfigAsyncMode\n + * CR3 HDSEL LL_USART_ConfigAsyncMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx) +{ + /* In Asynchronous mode, the following bits must be kept cleared: + - LINEN, CLKEN bits in the USART_CR2 register, + - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Synchronous Mode + * @note In Synchronous mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also sets the USART in Synchronous mode. + * @note Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function + * @note Other remaining configurations items related to Synchronous Mode + * (as Baud Rate, Word length, Parity, Clock Polarity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigSyncMode\n + * CR2 CLKEN LL_USART_ConfigSyncMode\n + * CR3 SCEN LL_USART_ConfigSyncMode\n + * CR3 IREN LL_USART_ConfigSyncMode\n + * CR3 HDSEL LL_USART_ConfigSyncMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx) +{ + /* In Synchronous mode, the following bits must be kept cleared: + - LINEN bit in the USART_CR2 register, + - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); + /* set the UART/USART in Synchronous mode */ + SET_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in LIN Mode + * @note In LIN mode, the following bits must be kept cleared: + * - STOP and CLKEN bits in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also set the UART/USART in LIN mode. + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear STOP in CR2 using @ref LL_USART_SetStopBitsLength() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Set LINEN in CR2 using @ref LL_USART_EnableLIN() function + * @note Other remaining configurations items related to LIN Mode + * (as Baud Rate, Word length, LIN Break Detection Length, ...) should be set using + * dedicated functions + * @rmtoll CR2 CLKEN LL_USART_ConfigLINMode\n + * CR2 STOP LL_USART_ConfigLINMode\n + * CR2 LINEN LL_USART_ConfigLINMode\n + * CR3 IREN LL_USART_ConfigLINMode\n + * CR3 SCEN LL_USART_ConfigLINMode\n + * CR3 HDSEL LL_USART_ConfigLINMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx) +{ + /* In LIN mode, the following bits must be kept cleared: + - STOP and CLKEN bits in the USART_CR2 register, + - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL)); + /* Set the UART/USART in LIN mode */ + SET_BIT(USARTx->CR2, USART_CR2_LINEN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Half Duplex Mode + * @note In Half Duplex mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * This function also sets the UART/USART in Half Duplex mode. + * @note Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Set HDSEL in CR3 using @ref LL_USART_EnableHalfDuplex() function + * @note Other remaining configurations items related to Half Duplex Mode + * (as Baud Rate, Word length, Parity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigHalfDuplexMode\n + * CR2 CLKEN LL_USART_ConfigHalfDuplexMode\n + * CR3 HDSEL LL_USART_ConfigHalfDuplexMode\n + * CR3 SCEN LL_USART_ConfigHalfDuplexMode\n + * CR3 IREN LL_USART_ConfigHalfDuplexMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx) +{ + /* In Half Duplex mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN)); + /* set the UART/USART in Half Duplex mode */ + SET_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Smartcard Mode + * @note In Smartcard mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also configures Stop bits to 1.5 bits and + * sets the USART in Smartcard mode (SCEN bit). + * Clock Output is also enabled (CLKEN). + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function + * - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function + * - Set SCEN in CR3 using @ref LL_USART_EnableSmartcard() function + * @note Other remaining configurations items related to Smartcard Mode + * (as Baud Rate, Word length, Parity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigSmartcardMode\n + * CR2 STOP LL_USART_ConfigSmartcardMode\n + * CR2 CLKEN LL_USART_ConfigSmartcardMode\n + * CR3 HDSEL LL_USART_ConfigSmartcardMode\n + * CR3 SCEN LL_USART_ConfigSmartcardMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx) +{ + /* In Smartcard mode, the following bits must be kept cleared: + - LINEN bit in the USART_CR2 register, + - IREN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); + /* Configure Stop bits to 1.5 bits */ + /* Synchronous mode is activated by default */ + SET_BIT(USARTx->CR2, (USART_CR2_STOP_0 | USART_CR2_STOP_1 | USART_CR2_CLKEN)); + /* set the UART/USART in Smartcard mode */ + SET_BIT(USARTx->CR3, USART_CR3_SCEN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Irda Mode + * @note In IRDA mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - STOP and CLKEN bits in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also sets the UART/USART in IRDA mode (IREN bit). + * @note Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function + * - Set IREN in CR3 using @ref LL_USART_EnableIrda() function + * @note Other remaining configurations items related to Irda Mode + * (as Baud Rate, Word length, Power mode, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigIrdaMode\n + * CR2 CLKEN LL_USART_ConfigIrdaMode\n + * CR2 STOP LL_USART_ConfigIrdaMode\n + * CR3 SCEN LL_USART_ConfigIrdaMode\n + * CR3 HDSEL LL_USART_ConfigIrdaMode\n + * CR3 IREN LL_USART_ConfigIrdaMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx) +{ + /* In IRDA mode, the following bits must be kept cleared: + - LINEN, STOP and CLKEN bits in the USART_CR2 register, + - SCEN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); + /* set the UART/USART in IRDA mode */ + SET_BIT(USARTx->CR3, USART_CR3_IREN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Multi processor Mode + * (several USARTs connected in a network, one of the USARTs can be the master, + * its TX output connected to the RX inputs of the other slaves USARTs). + * @note In MultiProcessor mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * @note Other remaining configurations items related to Multi processor Mode + * (as Baud Rate, Wake Up Method, Node address, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigMultiProcessMode\n + * CR2 CLKEN LL_USART_ConfigMultiProcessMode\n + * CR3 SCEN LL_USART_ConfigMultiProcessMode\n + * CR3 HDSEL LL_USART_ConfigMultiProcessMode\n + * CR3 IREN LL_USART_ConfigMultiProcessMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx) +{ + /* In Multi Processor mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Check if the USART Parity Error Flag is set or not + * @rmtoll SR PE LL_USART_IsActiveFlag_PE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_PE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_PE) == (USART_SR_PE)); +} + +/** + * @brief Check if the USART Framing Error Flag is set or not + * @rmtoll SR FE LL_USART_IsActiveFlag_FE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_FE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_FE) == (USART_SR_FE)); +} + +/** + * @brief Check if the USART Noise error detected Flag is set or not + * @rmtoll SR NF LL_USART_IsActiveFlag_NE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_NE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_NE) == (USART_SR_NE)); +} + +/** + * @brief Check if the USART OverRun Error Flag is set or not + * @rmtoll SR ORE LL_USART_IsActiveFlag_ORE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ORE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_ORE) == (USART_SR_ORE)); +} + +/** + * @brief Check if the USART IDLE line detected Flag is set or not + * @rmtoll SR IDLE LL_USART_IsActiveFlag_IDLE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_IDLE) == (USART_SR_IDLE)); +} + +/** + * @brief Check if the USART Read Data Register Not Empty Flag is set or not + * @rmtoll SR RXNE LL_USART_IsActiveFlag_RXNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_RXNE) == (USART_SR_RXNE)); +} + +/** + * @brief Check if the USART Transmission Complete Flag is set or not + * @rmtoll SR TC LL_USART_IsActiveFlag_TC + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_TC) == (USART_SR_TC)); +} + +/** + * @brief Check if the USART Transmit Data Register Empty Flag is set or not + * @rmtoll SR TXE LL_USART_IsActiveFlag_TXE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_TXE) == (USART_SR_TXE)); +} + +/** + * @brief Check if the USART LIN Break Detection Flag is set or not + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll SR LBD LL_USART_IsActiveFlag_LBD + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_LBD(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_LBD) == (USART_SR_LBD)); +} + +/** + * @brief Check if the USART CTS Flag is set or not + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll SR CTS LL_USART_IsActiveFlag_nCTS + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_nCTS(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_CTS) == (USART_SR_CTS)); +} + +/** + * @brief Check if the USART Send Break Flag is set or not + * @rmtoll CR1 SBK LL_USART_IsActiveFlag_SBK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_SBK(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_SBK) == (USART_CR1_SBK)); +} + +/** + * @brief Check if the USART Receive Wake Up from mute mode Flag is set or not + * @rmtoll CR1 RWU LL_USART_IsActiveFlag_RWU + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_RWU) == (USART_CR1_RWU)); +} + +/** + * @brief Clear Parity Error Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * NE, FE, ORE, IDLE would also be cleared. + * @rmtoll SR PE LL_USART_ClearFlag_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_PE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear Framing Error Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, NE, ORE, IDLE would also be cleared. + * @rmtoll SR FE LL_USART_ClearFlag_FE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_FE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear Noise detected Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, FE, ORE, IDLE would also be cleared. + * @rmtoll SR NF LL_USART_ClearFlag_NE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_NE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear OverRun Error Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, NE, FE, IDLE would also be cleared. + * @rmtoll SR ORE LL_USART_ClearFlag_ORE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_ORE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear IDLE line detected Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, NE, FE, ORE would also be cleared. + * @rmtoll SR IDLE LL_USART_ClearFlag_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear Transmission Complete Flag + * @rmtoll SR TC LL_USART_ClearFlag_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_TC)); +} + +/** + * @brief Clear RX Not Empty Flag + * @rmtoll SR RXNE LL_USART_ClearFlag_RXNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_RXNE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_RXNE)); +} + +/** + * @brief Clear LIN Break Detection Flag + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll SR LBD LL_USART_ClearFlag_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_LBD(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_LBD)); +} + +/** + * @brief Clear CTS Interrupt Flag + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll SR CTS LL_USART_ClearFlag_nCTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_nCTS(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_CTS)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable IDLE Interrupt + * @rmtoll CR1 IDLEIE LL_USART_EnableIT_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_IDLEIE); +} + +/** + * @brief Enable RX Not Empty Interrupt + * @rmtoll CR1 RXNEIE LL_USART_EnableIT_RXNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_RXNE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RXNEIE); +} + +/** + * @brief Enable Transmission Complete Interrupt + * @rmtoll CR1 TCIE LL_USART_EnableIT_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TC(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TCIE); +} + +/** + * @brief Enable TX Empty Interrupt + * @rmtoll CR1 TXEIE LL_USART_EnableIT_TXE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TXE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TXEIE); +} + +/** + * @brief Enable Parity Error Interrupt + * @rmtoll CR1 PEIE LL_USART_EnableIT_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_PE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_PEIE); +} + +/** + * @brief Enable LIN Break Detection Interrupt + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDIE LL_USART_EnableIT_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_LBD(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_LBDIE); +} + +/** + * @brief Enable Error Interrupt + * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing + * error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register). + * 0: Interrupt is inhibited + * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register. + * @rmtoll CR3 EIE LL_USART_EnableIT_ERROR + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_ERROR(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_EIE); +} + +/** + * @brief Enable CTS Interrupt + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSIE LL_USART_EnableIT_CTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_CTSIE); +} + +/** + * @brief Disable IDLE Interrupt + * @rmtoll CR1 IDLEIE LL_USART_DisableIT_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_IDLE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_IDLEIE); +} + +/** + * @brief Disable RX Not Empty Interrupt + * @rmtoll CR1 RXNEIE LL_USART_DisableIT_RXNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_RXNE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE); +} + +/** + * @brief Disable Transmission Complete Interrupt + * @rmtoll CR1 TCIE LL_USART_DisableIT_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TC(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TCIE); +} + +/** + * @brief Disable TX Empty Interrupt + * @rmtoll CR1 TXEIE LL_USART_DisableIT_TXE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TXE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE); +} + +/** + * @brief Disable Parity Error Interrupt + * @rmtoll CR1 PEIE LL_USART_DisableIT_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_PE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_PEIE); +} + +/** + * @brief Disable LIN Break Detection Interrupt + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDIE LL_USART_DisableIT_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_LBD(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_LBDIE); +} + +/** + * @brief Disable Error Interrupt + * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing + * error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register). + * 0: Interrupt is inhibited + * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register. + * @rmtoll CR3 EIE LL_USART_DisableIT_ERROR + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_ERROR(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_EIE); +} + +/** + * @brief Disable CTS Interrupt + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSIE LL_USART_DisableIT_CTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE); +} + +/** + * @brief Check if the USART IDLE Interrupt source is enabled or disabled. + * @rmtoll CR1 IDLEIE LL_USART_IsEnabledIT_IDLE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_IDLE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)); +} + +/** + * @brief Check if the USART RX Not Empty Interrupt is enabled or disabled. + * @rmtoll CR1 RXNEIE LL_USART_IsEnabledIT_RXNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE)); +} + +/** + * @brief Check if the USART Transmission Complete Interrupt is enabled or disabled. + * @rmtoll CR1 TCIE LL_USART_IsEnabledIT_TC + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TC(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)); +} + +/** + * @brief Check if the USART TX Empty Interrupt is enabled or disabled. + * @rmtoll CR1 TXEIE LL_USART_IsEnabledIT_TXE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE)); +} + +/** + * @brief Check if the USART Parity Error Interrupt is enabled or disabled. + * @rmtoll CR1 PEIE LL_USART_IsEnabledIT_PE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_PE(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_PEIE) == (USART_CR1_PEIE)); +} + +/** + * @brief Check if the USART LIN Break Detection Interrupt is enabled or disabled. + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDIE LL_USART_IsEnabledIT_LBD + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_LBD(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_LBDIE) == (USART_CR2_LBDIE)); +} + +/** + * @brief Check if the USART Error Interrupt is enabled or disabled. + * @rmtoll CR3 EIE LL_USART_IsEnabledIT_ERROR + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_ERROR(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_EIE) == (USART_CR3_EIE)); +} + +/** + * @brief Check if the USART CTS Interrupt is enabled or disabled. + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSIE LL_USART_IsEnabledIT_CTS + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_DMA_Management DMA_Management + * @{ + */ + +/** + * @brief Enable DMA Mode for reception + * @rmtoll CR3 DMAR LL_USART_EnableDMAReq_RX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDMAReq_RX(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAR); +} + +/** + * @brief Disable DMA Mode for reception + * @rmtoll CR3 DMAR LL_USART_DisableDMAReq_RX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDMAReq_RX(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAR); +} + +/** + * @brief Check if DMA Mode is enabled for reception + * @rmtoll CR3 DMAR LL_USART_IsEnabledDMAReq_RX + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_RX(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_DMAR) == (USART_CR3_DMAR)); +} + +/** + * @brief Enable DMA Mode for transmission + * @rmtoll CR3 DMAT LL_USART_EnableDMAReq_TX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDMAReq_TX(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAT); +} + +/** + * @brief Disable DMA Mode for transmission + * @rmtoll CR3 DMAT LL_USART_DisableDMAReq_TX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDMAReq_TX(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAT); +} + +/** + * @brief Check if DMA Mode is enabled for transmission + * @rmtoll CR3 DMAT LL_USART_IsEnabledDMAReq_TX + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_TX(const USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_DMAT) == (USART_CR3_DMAT)); +} + +/** + * @brief Get the data register address used for DMA transfer + * @rmtoll DR DR LL_USART_DMA_GetRegAddr + * @note Address of Data Register is valid for both Transmit and Receive transfers. + * @param USARTx USART Instance + * @retval Address of data register + */ +__STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(const USART_TypeDef *USARTx) +{ + /* return address of DR register */ + return ((uint32_t) &(USARTx->DR)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Data_Management Data_Management + * @{ + */ + +/** + * @brief Read Receiver Data register (Receive Data value, 8 bits) + * @rmtoll DR DR LL_USART_ReceiveData8 + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint8_t LL_USART_ReceiveData8(const USART_TypeDef *USARTx) +{ + return (uint8_t)(READ_BIT(USARTx->DR, USART_DR_DR)); +} + +/** + * @brief Read Receiver Data register (Receive Data value, 9 bits) + * @rmtoll DR DR LL_USART_ReceiveData9 + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0x1FF + */ +__STATIC_INLINE uint16_t LL_USART_ReceiveData9(const USART_TypeDef *USARTx) +{ + return (uint16_t)(READ_BIT(USARTx->DR, USART_DR_DR)); +} + +/** + * @brief Write in Transmitter Data Register (Transmit Data value, 8 bits) + * @rmtoll DR DR LL_USART_TransmitData8 + * @param USARTx USART Instance + * @param Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value) +{ + USARTx->DR = Value; +} + +/** + * @brief Write in Transmitter Data Register (Transmit Data value, 9 bits) + * @rmtoll DR DR LL_USART_TransmitData9 + * @param USARTx USART Instance + * @param Value between Min_Data=0x00 and Max_Data=0x1FF + * @retval None + */ +__STATIC_INLINE void LL_USART_TransmitData9(USART_TypeDef *USARTx, uint16_t Value) +{ + USARTx->DR = Value & 0x1FFU; +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Execution Execution + * @{ + */ + +/** + * @brief Request Break sending + * @rmtoll CR1 SBK LL_USART_RequestBreakSending + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestBreakSending(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_SBK); +} + +/** + * @brief Put USART in Mute mode + * @rmtoll CR1 RWU LL_USART_RequestEnterMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_RWU); +} + +/** + * @brief Put USART in Active mode + * @rmtoll CR1 RWU LL_USART_RequestExitMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestExitMuteMode(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_RWU); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_EF_Init Initialization and de-initialization functions + * @{ + */ +ErrorStatus LL_USART_DeInit(const USART_TypeDef *USARTx); +ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, const LL_USART_InitTypeDef *USART_InitStruct); +void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct); +ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, const LL_USART_ClockInitTypeDef *USART_ClockInitStruct); +void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct); +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* USART1 || USART2 || USART3 || USART6 || UART4 || UART5 || UART7 || UART8 || UART9 || UART10 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_USART_H */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h new file mode 100644 index 00000000..caabcf33 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h @@ -0,0 +1,578 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_usb.h + * @author MCD Application Team + * @brief Header file of USB Low Layer HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_LL_USB_H +#define STM32F4xx_LL_USB_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup USB_LL + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +#ifndef HAL_USB_TIMEOUT +#define HAL_USB_TIMEOUT 0xF000000U +#endif /* define HAL_USB_TIMEOUT */ + +#ifndef HAL_USB_CURRENT_MODE_MAX_DELAY_MS +#define HAL_USB_CURRENT_MODE_MAX_DELAY_MS 200U +#endif /* define HAL_USB_CURRENT_MODE_MAX_DELAY_MS */ + +/** + * @brief USB Mode definition + */ + +typedef enum +{ + USB_DEVICE_MODE = 0, + USB_HOST_MODE = 1, + USB_DRD_MODE = 2 +} USB_ModeTypeDef; + +/** + * @brief URB States definition + */ +typedef enum +{ + URB_IDLE = 0, + URB_DONE, + URB_NOTREADY, + URB_NYET, + URB_ERROR, + URB_STALL +} USB_URBStateTypeDef; + +/** + * @brief Host channel States definition + */ +typedef enum +{ + HC_IDLE = 0, + HC_XFRC, + HC_HALTED, + HC_ACK, + HC_NAK, + HC_NYET, + HC_STALL, + HC_XACTERR, + HC_BBLERR, + HC_DATATGLERR +} USB_HCStateTypeDef; + + +/** + * @brief USB Instance Initialization Structure definition + */ +typedef struct +{ + uint8_t dev_endpoints; /*!< Device Endpoints number. + This parameter depends on the used USB core. + This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ + + uint8_t Host_channels; /*!< Host Channels number. + This parameter Depends on the used USB core. + This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ + + uint8_t dma_enable; /*!< USB DMA state. + If DMA is not supported this parameter shall be set by default to zero */ + + uint8_t speed; /*!< USB Core speed. + This parameter can be any value of @ref PCD_Speed/HCD_Speed + (HCD_SPEED_xxx, HCD_SPEED_xxx) */ + + uint8_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size. */ + + uint8_t phy_itface; /*!< Select the used PHY interface. + This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module */ + + uint8_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */ + + uint8_t low_power_enable; /*!< Enable or disable the low Power Mode. */ + + uint8_t lpm_enable; /*!< Enable or disable Link Power Management. */ + + uint8_t battery_charging_enable; /*!< Enable or disable Battery charging. */ + + uint8_t vbus_sensing_enable; /*!< Enable or disable the VBUS Sensing feature. */ + + uint8_t use_dedicated_ep1; /*!< Enable or disable the use of the dedicated EP1 interrupt. */ + + uint8_t use_external_vbus; /*!< Enable or disable the use of the external VBUS. */ + +} USB_CfgTypeDef; + +typedef struct +{ + uint8_t num; /*!< Endpoint number + This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ + + uint8_t is_in; /*!< Endpoint direction + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint8_t is_stall; /*!< Endpoint stall condition + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint8_t is_iso_incomplete; /*!< Endpoint isoc condition + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint8_t type; /*!< Endpoint type + This parameter can be any value of @ref USB_LL_EP_Type */ + + uint8_t data_pid_start; /*!< Initial data PID + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint32_t maxpacket; /*!< Endpoint Max packet size + This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ + + uint8_t *xfer_buff; /*!< Pointer to transfer buffer */ + + uint32_t xfer_len; /*!< Current transfer length */ + + uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */ + + uint8_t even_odd_frame; /*!< IFrame parity + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint16_t tx_fifo_num; /*!< Transmission FIFO number + This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ + + uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address */ + + uint32_t xfer_size; /*!< requested transfer size */ +} USB_EPTypeDef; + +typedef struct +{ + uint8_t dev_addr; /*!< USB device address. + This parameter must be a number between Min_Data = 1 and Max_Data = 255 */ + + uint8_t ch_num; /*!< Host channel number. + This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ + + uint8_t ep_num; /*!< Endpoint number. + This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ + + uint8_t ep_is_in; /*!< Endpoint direction + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint8_t speed; /*!< USB Host Channel speed. + This parameter can be any value of @ref HCD_Device_Speed: + (HCD_DEVICE_SPEED_xxx) */ + + uint8_t do_ping; /*!< Enable or disable the use of the PING protocol for HS mode. */ + uint8_t do_ssplit; /*!< Enable start split transaction in HS mode. */ + uint8_t do_csplit; /*!< Enable complete split transaction in HS mode. */ + uint8_t ep_ss_schedule; /*!< Enable periodic endpoint start split schedule . */ + uint32_t iso_splt_xactPos; /*!< iso split transfer transaction position. */ + + uint8_t hub_port_nbr; /*!< USB HUB port number */ + uint8_t hub_addr; /*!< USB HUB address */ + + uint8_t ep_type; /*!< Endpoint Type. + This parameter can be any value of @ref USB_LL_EP_Type */ + + uint16_t max_packet; /*!< Endpoint Max packet size. + This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ + + uint8_t data_pid; /*!< Initial data PID. + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint8_t *xfer_buff; /*!< Pointer to transfer buffer. */ + + uint32_t XferSize; /*!< OTG Channel transfer size. */ + + uint32_t xfer_len; /*!< Current transfer length. */ + + uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer. */ + + uint8_t toggle_in; /*!< IN transfer current toggle flag. + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint8_t toggle_out; /*!< OUT transfer current toggle flag + This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ + + uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address. */ + + uint32_t ErrCnt; /*!< Host channel error count. */ + uint32_t NyetErrCnt; /*!< Complete Split NYET Host channel error count. */ + + USB_URBStateTypeDef urb_state; /*!< URB state. + This parameter can be any value of @ref USB_URBStateTypeDef */ + + USB_HCStateTypeDef state; /*!< Host Channel state. + This parameter can be any value of @ref USB_HCStateTypeDef */ +} USB_HCTypeDef; + +typedef USB_ModeTypeDef USB_OTG_ModeTypeDef; +typedef USB_CfgTypeDef USB_OTG_CfgTypeDef; +typedef USB_EPTypeDef USB_OTG_EPTypeDef; +typedef USB_URBStateTypeDef USB_OTG_URBStateTypeDef; +typedef USB_HCStateTypeDef USB_OTG_HCStateTypeDef; +typedef USB_HCTypeDef USB_OTG_HCTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup PCD_Exported_Constants PCD Exported Constants + * @{ + */ + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** @defgroup USB_OTG_CORE VERSION ID + * @{ + */ +#define USB_OTG_CORE_ID_300A 0x4F54300AU +#define USB_OTG_CORE_ID_310A 0x4F54310AU +/** + * @} + */ + +/** @defgroup USB_Core_Mode_ USB Core Mode + * @{ + */ +#define USB_OTG_MODE_DEVICE 0U +#define USB_OTG_MODE_HOST 1U +#define USB_OTG_MODE_DRD 2U +/** + * @} + */ + +/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed + * @{ + */ +#define USB_OTG_SPEED_HIGH 0U +#define USB_OTG_SPEED_HIGH_IN_FULL 1U +#define USB_OTG_SPEED_FULL 3U +/** + * @} + */ + +/** @defgroup USB_LL_Core_PHY USB Low Layer Core PHY + * @{ + */ +#define USB_OTG_ULPI_PHY 1U +#define USB_OTG_EMBEDDED_PHY 2U +/** + * @} + */ + +/** @defgroup USB_LL_Turnaround_Timeout Turnaround Timeout Value + * @{ + */ +#ifndef USBD_HS_TRDT_VALUE +#define USBD_HS_TRDT_VALUE 9U +#endif /* USBD_HS_TRDT_VALUE */ +#ifndef USBD_FS_TRDT_VALUE +#define USBD_FS_TRDT_VALUE 5U +#define USBD_DEFAULT_TRDT_VALUE 9U +#endif /* USBD_HS_TRDT_VALUE */ +/** + * @} + */ + +/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS + * @{ + */ +#define USB_OTG_HS_MAX_PACKET_SIZE 512U +#define USB_OTG_FS_MAX_PACKET_SIZE 64U +#define USB_OTG_MAX_EP0_SIZE 64U +/** + * @} + */ + +/** @defgroup USB_LL_Core_PHY_Frequency USB Low Layer Core PHY Frequency + * @{ + */ +#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1) +#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1) +#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1) +/** + * @} + */ + +/** @defgroup USB_LL_CORE_Frame_Interval USB Low Layer Core Frame Interval + * @{ + */ +#define DCFG_FRAME_INTERVAL_80 0U +#define DCFG_FRAME_INTERVAL_85 1U +#define DCFG_FRAME_INTERVAL_90 2U +#define DCFG_FRAME_INTERVAL_95 3U +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS + * @{ + */ +#define EP_MPS_64 0U +#define EP_MPS_32 1U +#define EP_MPS_16 2U +#define EP_MPS_8 3U +/** + * @} + */ + +/** @defgroup USB_LL_EP_Type USB Low Layer EP Type + * @{ + */ +#define EP_TYPE_CTRL 0U +#define EP_TYPE_ISOC 1U +#define EP_TYPE_BULK 2U +#define EP_TYPE_INTR 3U +#define EP_TYPE_MSK 3U +/** + * @} + */ + +/** @defgroup USB_LL_EP_Speed USB Low Layer EP Speed + * @{ + */ +#define EP_SPEED_LOW 0U +#define EP_SPEED_FULL 1U +#define EP_SPEED_HIGH 2U +/** + * @} + */ + +/** @defgroup USB_LL_CH_PID_Type USB Low Layer Channel PID Type + * @{ + */ +#define HC_PID_DATA0 0U +#define HC_PID_DATA2 1U +#define HC_PID_DATA1 2U +#define HC_PID_SETUP 3U +/** + * @} + */ + +/** @defgroup USB_LL Device Speed + * @{ + */ +#define USBD_HS_SPEED 0U +#define USBD_HSINFS_SPEED 1U +#define USBH_HS_SPEED 0U +#define USBD_FS_SPEED 2U +#define USBH_FSLS_SPEED 1U +/** + * @} + */ + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** @defgroup USB_LL_STS_Defines USB Low Layer STS Defines + * @{ + */ +#define STS_GOUT_NAK 1U +#define STS_DATA_UPDT 2U +#define STS_XFER_COMP 3U +#define STS_SETUP_COMP 4U +#define STS_SETUP_UPDT 6U +/** + * @} + */ + +/** @defgroup USB_LL_HCFG_SPEED_Defines USB Low Layer HCFG Speed Defines + * @{ + */ +#define HCFG_30_60_MHZ 0U +#define HCFG_48_MHZ 1U +#define HCFG_6_MHZ 2U +/** + * @} + */ + +/** @defgroup USB_LL_HFIR_Defines USB Low Layer frame interval Defines + * @{ + */ +#define HFIR_6_MHZ 6000U +#define HFIR_60_MHZ 60000U +#define HFIR_48_MHZ 48000U +/** + * @} + */ + +/** @defgroup USB_LL_HPRT0_PRTSPD_SPEED_Defines USB Low Layer HPRT0 PRTSPD Speed Defines + * @{ + */ +#define HPRT0_PRTSPD_HIGH_SPEED 0U +#define HPRT0_PRTSPD_FULL_SPEED 1U +#define HPRT0_PRTSPD_LOW_SPEED 2U +/** + * @} + */ + +#define HCCHAR_CTRL 0U +#define HCCHAR_ISOC 1U +#define HCCHAR_BULK 2U +#define HCCHAR_INTR 3U + +#define GRXSTS_PKTSTS_IN 2U +#define GRXSTS_PKTSTS_IN_XFER_COMP 3U +#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5U +#define GRXSTS_PKTSTS_CH_HALTED 7U + +#define CLEAR_INTERRUPT_MASK 0xFFFFFFFFU + +#define HC_MAX_PKT_CNT 256U +#define ISO_SPLT_MPS 188U + +#define HCSPLT_BEGIN 1U +#define HCSPLT_MIDDLE 2U +#define HCSPLT_END 3U +#define HCSPLT_FULL 4U + +#define TEST_J 1U +#define TEST_K 2U +#define TEST_SE0_NAK 3U +#define TEST_PACKET 4U +#define TEST_FORCE_EN 5U + +#define USBx_PCGCCTL *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_PCGCCTL_BASE) +#define USBx_HPRT0 *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_HOST_PORT_BASE) + +#define USBx_DEVICE ((USB_OTG_DeviceTypeDef *)(USBx_BASE + USB_OTG_DEVICE_BASE)) +#define USBx_INEP(i) ((USB_OTG_INEndpointTypeDef *)(USBx_BASE\ + + USB_OTG_IN_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE))) + +#define USBx_OUTEP(i) ((USB_OTG_OUTEndpointTypeDef *)(USBx_BASE\ + + USB_OTG_OUT_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE))) + +#define USBx_DFIFO(i) *(__IO uint32_t *)(USBx_BASE + USB_OTG_FIFO_BASE + ((i) * USB_OTG_FIFO_SIZE)) + +#define USBx_HOST ((USB_OTG_HostTypeDef *)(USBx_BASE + USB_OTG_HOST_BASE)) +#define USBx_HC(i) ((USB_OTG_HostChannelTypeDef *)(USBx_BASE\ + + USB_OTG_HOST_CHANNEL_BASE\ + + ((i) * USB_OTG_HOST_CHANNEL_SIZE))) + + +#define EP_ADDR_MSK 0xFU +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup USB_LL_Exported_Macros USB Low Layer Exported Macros + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +#define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__)) +#define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__)) + +#define CLEAR_IN_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_INEP(__EPNUM__)->DIEPINT = (__INTERRUPT__)) +#define CLEAR_OUT_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_OUTEP(__EPNUM__)->DOEPINT = (__INTERRUPT__)) +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); +HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); +HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, uint32_t hclk, uint8_t speed); +HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_OTG_ModeTypeDef mode); +HAL_StatusTypeDef USB_SetDevSpeed(const USB_OTG_GlobalTypeDef *USBx, uint8_t speed); +HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num); +HAL_StatusTypeDef USB_ActivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_DeactivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_ActivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep, uint8_t dma); +HAL_StatusTypeDef USB_WritePacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *src, + uint8_t ch_ep_num, uint16_t len, uint8_t dma); + +void *USB_ReadPacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len); +HAL_StatusTypeDef USB_EPSetStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_EPClearStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_EPStopXfer(const USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); +HAL_StatusTypeDef USB_SetDevAddress(const USB_OTG_GlobalTypeDef *USBx, uint8_t address); +HAL_StatusTypeDef USB_DevConnect(const USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_DevDisconnect(const USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_ActivateSetup(const USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_EP0_OutStart(const USB_OTG_GlobalTypeDef *USBx, uint8_t dma, const uint8_t *psetup); +uint8_t USB_GetDevSpeed(const USB_OTG_GlobalTypeDef *USBx); +uint32_t USB_GetMode(const USB_OTG_GlobalTypeDef *USBx); +uint32_t USB_ReadInterrupts(USB_OTG_GlobalTypeDef const *USBx); +uint32_t USB_ReadChInterrupts(const USB_OTG_GlobalTypeDef *USBx, uint8_t chnum); +uint32_t USB_ReadDevAllOutEpInterrupt(const USB_OTG_GlobalTypeDef *USBx); +uint32_t USB_ReadDevOutEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum); +uint32_t USB_ReadDevAllInEpInterrupt(const USB_OTG_GlobalTypeDef *USBx); +uint32_t USB_ReadDevInEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum); +void USB_ClearInterrupts(USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt); + +HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); +HAL_StatusTypeDef USB_InitFSLSPClkSel(const USB_OTG_GlobalTypeDef *USBx, uint8_t freq); +HAL_StatusTypeDef USB_ResetPort(const USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_DriveVbus(const USB_OTG_GlobalTypeDef *USBx, uint8_t state); +uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef const *USBx); +uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef const *USBx); +HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num, + uint8_t epnum, uint8_t dev_address, uint8_t speed, + uint8_t ep_type, uint16_t mps); +HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, + USB_OTG_HCTypeDef *hc, uint8_t dma); + +uint32_t USB_HC_ReadInterrupt(const USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_HC_Halt(const USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num); +HAL_StatusTypeDef USB_DoPing(const USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num); +HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_ActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx); +HAL_StatusTypeDef USB_DeActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx); +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* STM32F4xx_LL_USB_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h new file mode 100644 index 00000000..accdac7b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h @@ -0,0 +1,307 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_utils.h + * @author MCD Application Team + * @brief Header file of UTILS LL module. + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The LL UTILS driver contains a set of generic APIs that can be + used by user: + (+) Device electronic signature + (+) Timing functions + (+) PLL configuration functions + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_UTILS_H +#define __STM32F4xx_LL_UTILS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +/** @defgroup UTILS_LL UTILS + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup UTILS_LL_Private_Constants UTILS Private Constants + * @{ + */ + +/* Max delay can be used in LL_mDelay */ +#define LL_MAX_DELAY 0xFFFFFFFFU + +/** + * @brief Unique device ID register base address + */ +#define UID_BASE_ADDRESS UID_BASE + +/** + * @brief Flash size data register base address + */ +#define FLASHSIZE_BASE_ADDRESS FLASHSIZE_BASE + +/** + * @brief Package data register base address + */ +#define PACKAGE_BASE_ADDRESS PACKAGE_BASE + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup UTILS_LL_Private_Macros UTILS Private Macros + * @{ + */ +/** + * @} + */ +/* Exported types ------------------------------------------------------------*/ +/** @defgroup UTILS_LL_ES_INIT UTILS Exported structures + * @{ + */ +/** + * @brief UTILS PLL structure definition + */ +typedef struct +{ + uint32_t PLLM; /*!< Division factor for PLL VCO input clock. + This parameter can be a value of @ref RCC_LL_EC_PLLM_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ + + uint32_t PLLN; /*!< Multiplication factor for PLL VCO output clock. + This parameter must be a number between Min_Data = @ref RCC_PLLN_MIN_VALUE + and Max_Data = @ref RCC_PLLN_MIN_VALUE + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ + + uint32_t PLLP; /*!< Division for the main system clock. + This parameter can be a value of @ref RCC_LL_EC_PLLP_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ +} LL_UTILS_PLLInitTypeDef; + +/** + * @brief UTILS System, AHB and APB buses clock configuration structure definition + */ +typedef struct +{ + uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK). + This parameter can be a value of @ref RCC_LL_EC_SYSCLK_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_SetAHBPrescaler(). */ + + uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_LL_EC_APB1_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_SetAPB1Prescaler(). */ + + uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_LL_EC_APB2_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_SetAPB2Prescaler(). */ + +} LL_UTILS_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup UTILS_LL_Exported_Constants UTILS Exported Constants + * @{ + */ + +/** @defgroup UTILS_EC_HSE_BYPASS HSE Bypass activation + * @{ + */ +#define LL_UTILS_HSEBYPASS_OFF 0x00000000U /*!< HSE Bypass is not enabled */ +#define LL_UTILS_HSEBYPASS_ON 0x00000001U /*!< HSE Bypass is enabled */ +/** + * @} + */ + +/** @defgroup UTILS_EC_PACKAGETYPE PACKAGE TYPE + * @{ + */ +#define LL_UTILS_PACKAGETYPE_WLCSP36_UFQFPN48_LQFP64 0x00000000U /*!< WLCSP36 or UFQFPN48 or LQFP64 package type */ +#define LL_UTILS_PACKAGETYPE_WLCSP168_FBGA169_LQFP100_LQFP64_UFQFPN48 0x00000100U /*!< WLCSP168 or FBGA169 or LQFP100 or LQFP64 or UFQFPN48 package type */ +#define LL_UTILS_PACKAGETYPE_WLCSP64_WLCSP81_LQFP176_UFBGA176 0x00000200U /*!< WLCSP64 or WLCSP81 or LQFP176 or UFBGA176 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP144_UFBGA144_UFBGA144_UFBGA100 0x00000300U /*!< LQFP144 or UFBGA144 or UFBGA144 or UFBGA100 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP100_LQFP208_TFBGA216 0x00000400U /*!< LQFP100 or LQFP208 or TFBGA216 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP208_TFBGA216 0x00000500U /*!< LQFP208 or TFBGA216 package type */ +#define LL_UTILS_PACKAGETYPE_TQFP64_UFBGA144_LQFP144 0x00000700U /*!< TQFP64 or UFBGA144 or LQFP144 package type */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup UTILS_LL_Exported_Functions UTILS Exported Functions + * @{ + */ + +/** @defgroup UTILS_EF_DEVICE_ELECTRONIC_SIGNATURE DEVICE ELECTRONIC SIGNATURE + * @{ + */ + +/** + * @brief Get Word0 of the unique device identifier (UID based on 96 bits) + * @retval UID[31:0] + */ +__STATIC_INLINE uint32_t LL_GetUID_Word0(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)UID_BASE_ADDRESS))); +} + +/** + * @brief Get Word1 of the unique device identifier (UID based on 96 bits) + * @retval UID[63:32] + */ +__STATIC_INLINE uint32_t LL_GetUID_Word1(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 4U)))); +} + +/** + * @brief Get Word2 of the unique device identifier (UID based on 96 bits) + * @retval UID[95:64] + */ +__STATIC_INLINE uint32_t LL_GetUID_Word2(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 8U)))); +} + +/** + * @brief Get Flash memory size + * @note This bitfield indicates the size of the device Flash memory expressed in + * Kbytes. As an example, 0x040 corresponds to 64 Kbytes. + * @retval FLASH_SIZE[15:0]: Flash memory size + */ +__STATIC_INLINE uint32_t LL_GetFlashSize(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)) & 0xFFFF); +} + +/** + * @brief Get Package type + * @retval Returned value can be one of the following values: + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP36_UFQFPN48_LQFP64 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP168_FBGA169_LQFP100_LQFP64_UFQFPN48 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP64_WLCSP81_LQFP176_UFBGA176 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP144_UFBGA144_UFBGA144_UFBGA100 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP100_LQFP208_TFBGA216 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP208_TFBGA216 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_TQFP64_UFBGA144_LQFP144 (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_GetPackageType(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)PACKAGE_BASE_ADDRESS)) & 0x0700U); +} + +/** + * @} + */ + +/** @defgroup UTILS_LL_EF_DELAY DELAY + * @{ + */ + +/** + * @brief This function configures the Cortex-M SysTick source of the time base. + * @param HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro) + * @note When a RTOS is used, it is recommended to avoid changing the SysTick + * configuration by calling this function, for a delay use rather osDelay RTOS service. + * @param Ticks Frequency of Ticks (Hz) + * @retval None + */ +__STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks) +{ + /* Configure the SysTick to have interrupt in 1ms time base */ + SysTick->LOAD = (uint32_t)((HCLKFrequency / Ticks) - 1UL); /* set reload register */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable the Systick Timer */ +} + +void LL_Init1msTick(uint32_t HCLKFrequency); +void LL_mDelay(uint32_t Delay); + +/** + * @} + */ + +/** @defgroup UTILS_EF_SYSTEM SYSTEM + * @{ + */ + +void LL_SetSystemCoreClock(uint32_t HCLKFrequency); +ErrorStatus LL_SetFlashLatency(uint32_t HCLK_Frequency); +ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, + LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct); +ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypass, + LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_UTILS_H */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt new file mode 100644 index 00000000..3edc4d14 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt @@ -0,0 +1,6 @@ +This software component is provided to you as part of a software package and +applicable license terms are in the Package_license file. If you received this +software component outside of a package or without applicable license terms, +the terms of the BSD-3-Clause license shall apply. +You may obtain a copy of the BSD-3-Clause at: +https://opensource.org/licenses/BSD-3-Clause diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c new file mode 100644 index 00000000..862ec732 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c @@ -0,0 +1,616 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal.c + * @author MCD Application Team + * @brief HAL module driver. + * This is the common part of the HAL initialization + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The common HAL driver contains a set of generic and common APIs that can be + used by the PPP peripheral drivers and the user to start using the HAL. + [..] + The HAL contains two APIs' categories: + (+) Common HAL APIs + (+) Services HAL APIs + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup HAL HAL + * @brief HAL module driver. + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup HAL_Private_Constants + * @{ + */ +/** + * @brief STM32F4xx HAL Driver version number V1.8.5 + */ +#define __STM32F4xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */ +#define __STM32F4xx_HAL_VERSION_SUB1 (0x08U) /*!< [23:16] sub1 version */ +#define __STM32F4xx_HAL_VERSION_SUB2 (0x05U) /*!< [15:8] sub2 version */ +#define __STM32F4xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */ +#define __STM32F4xx_HAL_VERSION ((__STM32F4xx_HAL_VERSION_MAIN << 24U)\ + |(__STM32F4xx_HAL_VERSION_SUB1 << 16U)\ + |(__STM32F4xx_HAL_VERSION_SUB2 << 8U )\ + |(__STM32F4xx_HAL_VERSION_RC)) + +#define IDCODE_DEVID_MASK 0x00000FFFU + +/* ------------ RCC registers bit address in the alias region ----------- */ +#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE) +/* --- MEMRMP Register ---*/ +/* Alias word address of UFB_MODE bit */ +#define MEMRMP_OFFSET SYSCFG_OFFSET +#define UFB_MODE_BIT_NUMBER SYSCFG_MEMRMP_UFB_MODE_Pos +#define UFB_MODE_BB (uint32_t)(PERIPH_BB_BASE + (MEMRMP_OFFSET * 32U) + (UFB_MODE_BIT_NUMBER * 4U)) + +/* --- CMPCR Register ---*/ +/* Alias word address of CMP_PD bit */ +#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20U) +#define CMP_PD_BIT_NUMBER SYSCFG_CMPCR_CMP_PD_Pos +#define CMPCR_CMP_PD_BB (uint32_t)(PERIPH_BB_BASE + (CMPCR_OFFSET * 32U) + (CMP_PD_BIT_NUMBER * 4U)) + +/* --- MCHDLYCR Register ---*/ +/* Alias word address of BSCKSEL bit */ +#define MCHDLYCR_OFFSET (SYSCFG_OFFSET + 0x30U) +#define BSCKSEL_BIT_NUMBER SYSCFG_MCHDLYCR_BSCKSEL_Pos +#define MCHDLYCR_BSCKSEL_BB (uint32_t)(PERIPH_BB_BASE + (MCHDLYCR_OFFSET * 32U) + (BSCKSEL_BIT_NUMBER * 4U)) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @addtogroup HAL_Private_Variables + * @{ + */ +__IO uint32_t uwTick; +uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */ +HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT; /* 1KHz */ +/** + * @} + */ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Functions HAL Exported Functions + * @{ + */ + +/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initializes the Flash interface the NVIC allocation and initial clock + configuration. It initializes the systick also when timeout is needed + and the backup domain when enabled. + (+) De-Initializes common part of the HAL. + (+) Configure the time base source to have 1ms time base with a dedicated + Tick interrupt priority. + (++) SysTick timer is used by default as source of time base, but user + can eventually implement his proper time base source (a general purpose + timer for example or other time source), keeping in mind that Time base + duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and + handled in milliseconds basis. + (++) Time base configuration function (HAL_InitTick ()) is called automatically + at the beginning of the program after reset by HAL_Init() or at any time + when clock is configured, by HAL_RCC_ClockConfig(). + (++) Source of time base is configured to generate interrupts at regular + time intervals. Care must be taken if HAL_Delay() is called from a + peripheral ISR process, the Tick interrupt line must have higher priority + (numerically lower) than the peripheral interrupt. Otherwise the caller + ISR process will be blocked. + (++) functions affecting time base configurations are declared as __weak + to make override possible in case of other implementations in user file. +@endverbatim + * @{ + */ + +/** + * @brief This function is used to initialize the HAL Library; it must be the first + * instruction to be executed in the main program (before to call any other + * HAL function), it performs the following: + * Configure the Flash prefetch, instruction and Data caches. + * Configures the SysTick to generate an interrupt each 1 millisecond, + * which is clocked by the HSI (at this stage, the clock is not yet + * configured and thus the system is running from the internal HSI at 16 MHz). + * Set NVIC Group Priority to 4. + * Calls the HAL_MspInit() callback function defined in user file + * "stm32f4xx_hal_msp.c" to do the global low level hardware initialization + * + * @note SysTick is used as time base for the HAL_Delay() function, the application + * need to ensure that the SysTick time base is always set to 1 millisecond + * to have correct HAL operation. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + /* Configure Flash prefetch, Instruction cache, Data cache */ +#if (INSTRUCTION_CACHE_ENABLE != 0U) + __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); +#endif /* INSTRUCTION_CACHE_ENABLE */ + +#if (DATA_CACHE_ENABLE != 0U) + __HAL_FLASH_DATA_CACHE_ENABLE(); +#endif /* DATA_CACHE_ENABLE */ + +#if (PREFETCH_ENABLE != 0U) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + + /* Init the low level hardware */ + HAL_MspInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief This function de-Initializes common part of the HAL and stops the systick. + * This function is optional. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DeInit(void) +{ + /* Reset of all peripherals */ + __HAL_RCC_APB1_FORCE_RESET(); + __HAL_RCC_APB1_RELEASE_RESET(); + + __HAL_RCC_APB2_FORCE_RESET(); + __HAL_RCC_APB2_RELEASE_RESET(); + + __HAL_RCC_AHB1_FORCE_RESET(); + __HAL_RCC_AHB1_RELEASE_RESET(); + + __HAL_RCC_AHB2_FORCE_RESET(); + __HAL_RCC_AHB2_RELEASE_RESET(); + + __HAL_RCC_AHB3_FORCE_RESET(); + __HAL_RCC_AHB3_RELEASE_RESET(); + + /* De-Init the low level hardware */ + HAL_MspDeInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initialize the MSP. + * @retval None + */ +__weak void HAL_MspInit(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes the MSP. + * @retval None + */ +__weak void HAL_MspDeInit(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief This function configures the source of the time base. + * The time source is configured to have 1ms time base with a dedicated + * Tick interrupt priority. + * @note This function is called automatically at the beginning of program after + * reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig(). + * @note In the default implementation, SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals. + * Care must be taken if HAL_Delay() is called from a peripheral ISR process, + * The SysTick interrupt must have higher priority (numerically lower) + * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. + * The function is declared as __weak to be overwritten in case of other + * implementation in user file. + * @param TickPriority Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + /* Configure the SysTick to have interrupt in 1ms time basis*/ + if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) + { + return HAL_ERROR; + } + + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + { + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); + uwTickPrio = TickPriority; + } + else + { + return HAL_ERROR; + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions + * @brief HAL Control functions + * +@verbatim + =============================================================================== + ##### HAL Control functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Provide a tick value in millisecond + (+) Provide a blocking delay in millisecond + (+) Suspend the time base source interrupt + (+) Resume the time base source interrupt + (+) Get the HAL API driver version + (+) Get the device identifier + (+) Get the device revision identifier + (+) Enable/Disable Debug module during SLEEP mode + (+) Enable/Disable Debug module during STOP mode + (+) Enable/Disable Debug module during STANDBY mode + +@endverbatim + * @{ + */ + +/** + * @brief This function is called to increment a global variable "uwTick" + * used as application time base. + * @note In the default implementation, this variable is incremented each 1ms + * in SysTick ISR. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_IncTick(void) +{ + uwTick += uwTickFreq; +} + +/** + * @brief Provides a tick value in millisecond. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval tick value + */ +__weak uint32_t HAL_GetTick(void) +{ + return uwTick; +} + +/** + * @brief This function returns a tick priority. + * @retval tick priority + */ +uint32_t HAL_GetTickPrio(void) +{ + return uwTickPrio; +} + +/** + * @brief Set new tick Freq. + * @retval Status + */ +HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) +{ + HAL_StatusTypeDef status = HAL_OK; + HAL_TickFreqTypeDef prevTickFreq; + + assert_param(IS_TICKFREQ(Freq)); + + if (uwTickFreq != Freq) + { + /* Back up uwTickFreq frequency */ + prevTickFreq = uwTickFreq; + + /* Update uwTickFreq global variable used by HAL_InitTick() */ + uwTickFreq = Freq; + + /* Apply the new tick Freq */ + status = HAL_InitTick(uwTickPrio); + + if (status != HAL_OK) + { + /* Restore previous tick frequency */ + uwTickFreq = prevTickFreq; + } + } + + return status; +} + +/** + * @brief Return tick frequency. + * @retval Tick frequency. + * Value of @ref HAL_TickFreqTypeDef. + */ +HAL_TickFreqTypeDef HAL_GetTickFreq(void) +{ + return uwTickFreq; +} + +/** + * @brief This function provides minimum delay (in milliseconds) based + * on variable incremented. + * @note In the default implementation , SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals where uwTick + * is incremented. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @param Delay specifies the delay time length, in milliseconds. + * @retval None + */ +__weak void HAL_Delay(uint32_t Delay) +{ + uint32_t tickstart = HAL_GetTick(); + uint32_t wait = Delay; + + /* Add a freq to guarantee minimum wait */ + if (wait < HAL_MAX_DELAY) + { + wait += (uint32_t)(uwTickFreq); + } + + while((HAL_GetTick() - tickstart) < wait) + { + } +} + +/** + * @brief Suspend Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_SuspendTick() + * is called, the SysTick interrupt will be disabled and so Tick increment + * is suspended. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_SuspendTick(void) +{ + /* Disable SysTick Interrupt */ + SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; +} + +/** + * @brief Resume Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_ResumeTick() + * is called, the SysTick interrupt will be enabled and so Tick increment + * is resumed. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_ResumeTick(void) +{ + /* Enable SysTick Interrupt */ + SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; +} + +/** + * @brief Returns the HAL revision + * @retval version : 0xXYZR (8bits for each decimal, R for RC) + */ +uint32_t HAL_GetHalVersion(void) +{ + return __STM32F4xx_HAL_VERSION; +} + +/** + * @brief Returns the device revision identifier. + * @retval Device revision identifier + */ +uint32_t HAL_GetREVID(void) +{ + return((DBGMCU->IDCODE) >> 16U); +} + +/** + * @brief Returns the device identifier. + * @retval Device identifier + */ +uint32_t HAL_GetDEVID(void) +{ + return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); +} + +/** + * @brief Enable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGSleepMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Disable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGSleepMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Enable the Debug Module during STOP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGStopMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Disable the Debug Module during STOP mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGStopMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Enable the Debug Module during STANDBY mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGStandbyMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Disable the Debug Module during STANDBY mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGStandbyMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Enables the I/O Compensation Cell. + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V. + * @retval None + */ +void HAL_EnableCompensationCell(void) +{ + *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)ENABLE; +} + +/** + * @brief Power-down the I/O Compensation Cell. + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V. + * @retval None + */ +void HAL_DisableCompensationCell(void) +{ + *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)DISABLE; +} + +/** + * @brief Returns first word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw0(void) +{ + return (READ_REG(*((uint32_t *)UID_BASE))); +} + +/** + * @brief Returns second word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw1(void) +{ + return (READ_REG(*((uint32_t *)(UID_BASE + 4U)))); +} + +/** + * @brief Returns third word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw2(void) +{ + return (READ_REG(*((uint32_t *)(UID_BASE + 8U)))); +} + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Enables the Internal FLASH Bank Swapping. + * + * @note This function can be used only for STM32F42xxx/43xxx/469xx/479xx devices. + * + * @note Flash Bank2 mapped at 0x08000000 (and aliased @0x00000000) + * and Flash Bank1 mapped at 0x08100000 (and aliased at 0x00100000) + * + * @retval None + */ +void HAL_EnableMemorySwappingBank(void) +{ + *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Internal FLASH Bank Swapping. + * + * @note This function can be used only for STM32F42xxx/43xxx/469xx/479xx devices. + * + * @note The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x00000000) + * and Flash Bank2 mapped at 0x08100000 (and aliased at 0x00100000) + * + * @retval None + */ +void HAL_DisableMemorySwappingBank(void) +{ + *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)DISABLE; +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c new file mode 100644 index 00000000..c3d2ba8e --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c @@ -0,0 +1,538 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_cortex.c + * @author MCD Application Team + * @brief CORTEX HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the CORTEX: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + + [..] + *** How to configure Interrupts using CORTEX HAL driver *** + =========================================================== + [..] + This section provides functions allowing to configure the NVIC interrupts (IRQ). + The Cortex-M4 exceptions are managed by CMSIS functions. + + (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() + function according to the following table. + (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority(). + (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ(). + (#) please refer to programming manual for details in how to configure priority. + + -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible. + The pending IRQ priority will be managed only by the sub priority. + + -@- IRQ priority order (sorted by highest to lowest priority): + (+@) Lowest preemption priority + (+@) Lowest sub priority + (+@) Lowest hardware priority (IRQ number) + + [..] + *** How to configure Systick using CORTEX HAL driver *** + ======================================================== + [..] + Setup SysTick Timer for time base. + + (+) The HAL_SYSTICK_Config() function calls the SysTick_Config() function which + is a CMSIS function that: + (++) Configures the SysTick Reload register with value passed as function parameter. + (++) Configures the SysTick IRQ priority to the lowest value 0x0F. + (++) Resets the SysTick Counter register. + (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK). + (++) Enables the SysTick Interrupt. + (++) Starts the SysTick Counter. + + (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro + __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the + HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined + inside the stm32f4xx_hal_cortex.h file. + + (+) You can change the SysTick IRQ priority by calling the + HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function + call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function. + + (+) To adjust the SysTick time base, use the following formula: + + Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) + (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function + (++) Reload Value should not exceed 0xFFFFFF + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup CORTEX CORTEX + * @brief CORTEX HAL module driver + * @{ + */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions + * @{ + */ + + +/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + ============================================================================== + ##### Initialization and de-initialization functions ##### + ============================================================================== + [..] + This section provides the CORTEX HAL driver functions allowing to configure Interrupts + Systick functionalities + +@endverbatim + * @{ + */ + + +/** + * @brief Sets the priority grouping field (preemption priority and subpriority) + * using the required unlock sequence. + * @param PriorityGroup The priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority + * 0 bits for subpriority + * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * @retval None + */ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ + NVIC_SetPriorityGrouping(PriorityGroup); +} + +/** + * @brief Sets the priority of an interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @param PreemptPriority The preemption priority for the IRQn channel. + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority + * @param SubPriority the subpriority level for the IRQ channel. + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t prioritygroup = 0x00U; + + /* Check the parameters */ + assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + + prioritygroup = NVIC_GetPriorityGrouping(); + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); +} + +/** + * @brief Enables a device specific interrupt in the NVIC interrupt controller. + * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() + * function should be called before. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Enable interrupt */ + NVIC_EnableIRQ(IRQn); +} + +/** + * @brief Disables a device specific interrupt in the NVIC interrupt controller. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Disable interrupt */ + NVIC_DisableIRQ(IRQn); +} + +/** + * @brief Initiates a system reset request to reset the MCU. + * @retval None + */ +void HAL_NVIC_SystemReset(void) +{ + /* System Reset */ + NVIC_SystemReset(); +} + +/** + * @brief Initializes the System Timer and its interrupt, and starts the System Tick Timer. + * Counter is in free running mode to generate periodic interrupts. + * @param TicksNumb Specifies the ticks Number of ticks between two interrupts. + * @retval status: - 0 Function succeeded. + * - 1 Function failed. + */ +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) +{ + return SysTick_Config(TicksNumb); +} +/** + * @} + */ + +/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions + * @brief Cortex control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the CORTEX + (NVIC, SYSTICK, MPU) functionalities. + + +@endverbatim + * @{ + */ + +#if (__MPU_PRESENT == 1U) +/** + * @brief Disables the MPU + * @retval None + */ +void HAL_MPU_Disable(void) +{ + /* Make sure outstanding transfers are done */ + __DMB(); + + /* Disable fault exceptions */ + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; + + /* Disable the MPU and clear the control register*/ + MPU->CTRL = 0U; +} + +/** + * @brief Enable the MPU. + * @param MPU_Control Specifies the control mode of the MPU during hard fault, + * NMI, FAULTMASK and privileged access to the default memory + * This parameter can be one of the following values: + * @arg MPU_HFNMI_PRIVDEF_NONE + * @arg MPU_HARDFAULT_NMI + * @arg MPU_PRIVILEGED_DEFAULT + * @arg MPU_HFNMI_PRIVDEF + * @retval None + */ +void HAL_MPU_Enable(uint32_t MPU_Control) +{ + /* Enable the MPU */ + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; + + /* Enable fault exceptions */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; + + /* Ensure MPU setting take effects */ + __DSB(); + __ISB(); +} + +/** + * @brief Enables the MPU Region. + * @retval None + */ +void HAL_MPU_EnableRegion(uint32_t RegionNumber) +{ + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(RegionNumber)); + + /* Set the Region number */ + MPU->RNR = RegionNumber; + + /* Enable the Region */ + SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); +} + +/** + * @brief Disables the MPU Region. + * @retval None + */ +void HAL_MPU_DisableRegion(uint32_t RegionNumber) +{ + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(RegionNumber)); + + /* Set the Region number */ + MPU->RNR = RegionNumber; + + /* Disable the Region */ + CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); +} + +/** + * @brief Initializes and configures the Region and the memory to be protected. + * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains + * the initialization and configuration information. + * @retval None + */ +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) +{ + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number)); + assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable)); + assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec)); + assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission)); + assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField)); + assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable)); + assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable)); + assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable)); + assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable)); + assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size)); + + /* Set the Region number */ + MPU->RNR = MPU_Init->Number; + + /* Disable the Region */ + CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); + + /* Apply configuration */ + MPU->RBAR = MPU_Init->BaseAddress; + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | + ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | + ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | + ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | + ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | + ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos); +} +#endif /* __MPU_PRESENT */ + +/** + * @brief Clear pending events. + * @retval None + */ +void HAL_CORTEX_ClearEvent(void) +{ + __SEV(); + __WFE(); +} + +/** + * @brief Gets the priority grouping field from the NVIC Interrupt Controller. + * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field) + */ +uint32_t HAL_NVIC_GetPriorityGrouping(void) +{ + /* Get the PRIGROUP[10:8] field value */ + return NVIC_GetPriorityGrouping(); +} + +/** + * @brief Gets the priority of an interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @param PriorityGroup the priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority + * 0 bits for subpriority + * @param pPreemptPriority Pointer on the Preemptive priority value (starting from 0). + * @param pSubPriority Pointer on the Subpriority value (starting from 0). + * @retval None + */ +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + /* Get priority for Cortex-M system or device specific interrupts */ + NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority); +} + +/** + * @brief Sets Pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Set interrupt pending */ + NVIC_SetPendingIRQ(IRQn); +} + +/** + * @brief Gets Pending Interrupt (reads the pending register in the NVIC + * and returns the pending bit for the specified interrupt). + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Return 1 if pending else 0 */ + return NVIC_GetPendingIRQ(IRQn); +} + +/** + * @brief Clears the pending bit of an external interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Clear pending interrupt */ + NVIC_ClearPendingIRQ(IRQn); +} + +/** + * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit). + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Return 1 if active else 0 */ + return NVIC_GetActive(IRQn); +} + +/** + * @brief Configures the SysTick clock source. + * @param CLKSource specifies the SysTick clock source. + * This parameter can be one of the following values: + * @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source. + * @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source. + * @retval None + */ +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) +{ + /* Check the parameters */ + assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource)); + if (CLKSource == SYSTICK_CLKSOURCE_HCLK) + { + SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; + } + else + { + SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK; + } +} + +/** + * @brief This function handles SYSTICK interrupt request. + * @retval None + */ +void HAL_SYSTICK_IRQHandler(void) +{ + HAL_SYSTICK_Callback(); +} + +/** + * @brief SYSTICK callback. + * @retval None + */ +__weak void HAL_SYSTICK_Callback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_SYSTICK_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_CORTEX_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c new file mode 100644 index 00000000..3dbb4776 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c @@ -0,0 +1,1305 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma.c + * @author MCD Application Team + * @brief DMA HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the Direct Memory Access (DMA) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral State and errors functions + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable and configure the peripheral to be connected to the DMA Stream + (except for internal SRAM/FLASH memories: no initialization is + necessary) please refer to Reference manual for connection between peripherals + and DMA requests. + + (#) For a given Stream, program the required configuration through the following parameters: + Transfer Direction, Source and Destination data formats, + Circular, Normal or peripheral flow control mode, Stream Priority level, + Source and Destination Increment mode, FIFO mode and its Threshold (if needed), + Burst mode for Source and/or Destination (if needed) using HAL_DMA_Init() function. + + -@- Prior to HAL_DMA_Init() the clock must be enabled for DMA through the following macros: + __HAL_RCC_DMA1_CLK_ENABLE() or __HAL_RCC_DMA2_CLK_ENABLE(). + + *** Polling mode IO operation *** + ================================= + [..] + (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source + address and destination address and the Length of data to be transferred. + (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this + case a fixed Timeout can be configured by User depending from his application. + (+) Use HAL_DMA_Abort() function to abort the current transfer. + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority() + (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ() + (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of + Source address and destination address and the Length of data to be transferred. In this + case the DMA interrupt is configured + (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine + (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can + add his own function by customization of function pointer XferCpltCallback and + XferErrorCallback (i.e a member of DMA handle structure). + [..] + (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error + detection. + + (#) Use HAL_DMA_Abort_IT() function to abort the current transfer + + -@- In Memory-to-Memory transfer mode, Circular mode is not allowed. + + -@- The FIFO is used mainly to reduce bus usage and to allow data packing/unpacking: it is + possible to set different Data Sizes for the Peripheral and the Memory (ie. you can set + Half-Word data size for the peripheral to access its data register and set Word data size + for the Memory to gain in access time. Each two half words will be packed and written in + a single access to a Word in the Memory). + + -@- When FIFO is disabled, it is not allowed to configure different Data Sizes for Source + and Destination. In this case the Peripheral Data Size will be applied to both Source + and Destination. + + *** DMA HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in DMA HAL driver. + + (+) __HAL_DMA_ENABLE: Enable the specified DMA Stream. + (+) __HAL_DMA_DISABLE: Disable the specified DMA Stream. + (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Stream interrupt has occurred or not. + + [..] + (@) You can refer to the DMA HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup DMA DMA + * @brief DMA HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private types -------------------------------------------------------------*/ +typedef struct +{ + __IO uint32_t ISR; /*!< DMA interrupt status register */ + __IO uint32_t Reserved0; + __IO uint32_t IFCR; /*!< DMA interrupt flag clear register */ +} DMA_Base_Registers; + +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @addtogroup DMA_Private_Constants + * @{ + */ + #define HAL_TIMEOUT_DMA_ABORT 5U /* 5 ms */ +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @addtogroup DMA_Private_Functions + * @{ + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @addtogroup DMA_Exported_Functions + * @{ + */ + +/** @addtogroup DMA_Exported_Functions_Group1 + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize the DMA Stream source + and destination addresses, incrementation and data sizes, transfer direction, + circular/normal mode selection, memory-to-memory mode selection and Stream priority value. + [..] + The HAL_DMA_Init() function follows the DMA configuration procedures as described in + reference manual. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the DMA according to the specified + * parameters in the DMA_InitTypeDef and create the associated handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) +{ + uint32_t tmp = 0U; + uint32_t tickstart = HAL_GetTick(); + DMA_Base_Registers *regs; + + /* Check the DMA peripheral state */ + if(hdma == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_STREAM_ALL_INSTANCE(hdma->Instance)); + assert_param(IS_DMA_CHANNEL(hdma->Init.Channel)); + assert_param(IS_DMA_DIRECTION(hdma->Init.Direction)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment)); + assert_param(IS_DMA_MODE(hdma->Init.Mode)); + assert_param(IS_DMA_PRIORITY(hdma->Init.Priority)); + assert_param(IS_DMA_FIFO_MODE_STATE(hdma->Init.FIFOMode)); + /* Check the memory burst, peripheral burst and FIFO threshold parameters only + when FIFO mode is enabled */ + if(hdma->Init.FIFOMode != DMA_FIFOMODE_DISABLE) + { + assert_param(IS_DMA_FIFO_THRESHOLD(hdma->Init.FIFOThreshold)); + assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst)); + assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst)); + } + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Allocate lock resource */ + __HAL_UNLOCK(hdma); + + /* Disable the peripheral */ + __HAL_DMA_DISABLE(hdma); + + /* Check if the DMA Stream is effectively disabled */ + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_TIMEOUT; + + return HAL_TIMEOUT; + } + } + + /* Get the CR register value */ + tmp = hdma->Instance->CR; + + /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */ + tmp &= ((uint32_t)~(DMA_SxCR_CHSEL | DMA_SxCR_MBURST | DMA_SxCR_PBURST | \ + DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \ + DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \ + DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM)); + + /* Prepare the DMA Stream configuration */ + tmp |= hdma->Init.Channel | hdma->Init.Direction | + hdma->Init.PeriphInc | hdma->Init.MemInc | + hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | + hdma->Init.Mode | hdma->Init.Priority; + + /* the Memory burst and peripheral burst are not used when the FIFO is disabled */ + if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE) + { + /* Get memory burst and peripheral burst */ + tmp |= hdma->Init.MemBurst | hdma->Init.PeriphBurst; + } + + /* Write to DMA Stream CR register */ + hdma->Instance->CR = tmp; + + /* Get the FCR register value */ + tmp = hdma->Instance->FCR; + + /* Clear Direct mode and FIFO threshold bits */ + tmp &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH); + + /* Prepare the DMA Stream FIFO configuration */ + tmp |= hdma->Init.FIFOMode; + + /* The FIFO threshold is not used when the FIFO mode is disabled */ + if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE) + { + /* Get the FIFO threshold */ + tmp |= hdma->Init.FIFOThreshold; + + /* Check compatibility between FIFO threshold level and size of the memory burst */ + /* for INCR4, INCR8, INCR16 bursts */ + if (hdma->Init.MemBurst != DMA_MBURST_SINGLE) + { + if (DMA_CheckFifoParam(hdma) != HAL_OK) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_PARAM; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + return HAL_ERROR; + } + } + } + + /* Write to DMA Stream FCR */ + hdma->Instance->FCR = tmp; + + /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate + DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */ + regs = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma); + + /* Clear all interrupt flags */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Initialize the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the DMA peripheral + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) +{ + DMA_Base_Registers *regs; + + /* Check the DMA peripheral state */ + if(hdma == NULL) + { + return HAL_ERROR; + } + + /* Check the DMA peripheral state */ + if(hdma->State == HAL_DMA_STATE_BUSY) + { + /* Return error status */ + return HAL_BUSY; + } + + /* Check the parameters */ + assert_param(IS_DMA_STREAM_ALL_INSTANCE(hdma->Instance)); + + /* Disable the selected DMA Streamx */ + __HAL_DMA_DISABLE(hdma); + + /* Reset DMA Streamx control register */ + hdma->Instance->CR = 0U; + + /* Reset DMA Streamx number of data to transfer register */ + hdma->Instance->NDTR = 0U; + + /* Reset DMA Streamx peripheral address register */ + hdma->Instance->PAR = 0U; + + /* Reset DMA Streamx memory 0 address register */ + hdma->Instance->M0AR = 0U; + + /* Reset DMA Streamx memory 1 address register */ + hdma->Instance->M1AR = 0U; + + /* Reset DMA Streamx FIFO control register */ + hdma->Instance->FCR = 0x00000021U; + + /* Get DMA steam Base Address */ + regs = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma); + + /* Clean all callbacks */ + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferM1CpltCallback = NULL; + hdma->XferM1HalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Reset the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Reset the DMA state */ + hdma->State = HAL_DMA_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group2 + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the source, destination address and data length and Start DMA transfer + (+) Configure the source, destination address and data length and + Start DMA transfer with interrupt + (+) Abort DMA transfer + (+) Poll for transfer complete + (+) Handle DMA interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Starts the DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the Peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + /* Return error status */ + status = HAL_BUSY; + } + return status; +} + +/** + * @brief Start the DMA Transfer with interrupt enabled. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Enable Common interrupts*/ + hdma->Instance->CR |= DMA_IT_TC | DMA_IT_TE | DMA_IT_DME; + + if(hdma->XferHalfCpltCallback != NULL) + { + hdma->Instance->CR |= DMA_IT_HT; + } + + /* Enable the Peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + /* Return error status */ + status = HAL_BUSY; + } + + return status; +} + +/** + * @brief Aborts the DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * + * @note After disabling a DMA Stream, a check for wait until the DMA Stream is + * effectively disabled is added. If a Stream is disabled + * while a data transfer is ongoing, the current data will be transferred + * and the Stream will be effectively disabled only after the transfer of + * this single data is finished. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + + uint32_t tickstart = HAL_GetTick(); + + if(hdma->State != HAL_DMA_STATE_BUSY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + else + { + /* Disable all the transfer interrupts */ + hdma->Instance->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME); + hdma->Instance->FCR &= ~(DMA_IT_FE); + + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + { + hdma->Instance->CR &= ~(DMA_IT_HT); + } + + /* Disable the stream */ + __HAL_DMA_DISABLE(hdma); + + /* Check if the DMA Stream is effectively disabled */ + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_TIMEOUT; + } + } + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Change the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + return HAL_OK; +} + +/** + * @brief Aborts the DMA Transfer in Interrupt mode. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) +{ + if(hdma->State != HAL_DMA_STATE_BUSY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + return HAL_ERROR; + } + else + { + /* Set Abort State */ + hdma->State = HAL_DMA_STATE_ABORT; + + /* Disable the stream */ + __HAL_DMA_DISABLE(hdma); + } + + return HAL_OK; +} + +/** + * @brief Polling for transfer complete. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CompleteLevel Specifies the DMA level complete. + * @note The polling mode is kept in this version for legacy. it is recommended to use the IT model instead. + * This model could be used for debug purpose. + * @note The HAL_DMA_PollForTransfer API cannot be used in circular and double buffering mode (automatic circular mode). + * @param Timeout Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t mask_cpltlevel; + uint32_t tickstart = HAL_GetTick(); + uint32_t tmpisr; + + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs; + + if(HAL_DMA_STATE_BUSY != hdma->State) + { + /* No transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + __HAL_UNLOCK(hdma); + return HAL_ERROR; + } + + /* Polling mode not supported in circular mode and double buffering mode */ + if ((hdma->Instance->CR & DMA_SxCR_CIRC) != RESET) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + return HAL_ERROR; + } + + /* Get the level transfer complete flag */ + if(CompleteLevel == HAL_DMA_FULL_TRANSFER) + { + /* Transfer Complete flag */ + mask_cpltlevel = DMA_FLAG_TCIF0_4 << hdma->StreamIndex; + } + else + { + /* Half Transfer Complete flag */ + mask_cpltlevel = DMA_FLAG_HTIF0_4 << hdma->StreamIndex; + } + + regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + tmpisr = regs->ISR; + + while(((tmpisr & mask_cpltlevel) == RESET) && ((hdma->ErrorCode & HAL_DMA_ERROR_TE) == RESET)) + { + /* Check for the Timeout (Not applicable in circular mode)*/ + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_TIMEOUT; + } + } + + /* Get the ISR register value */ + tmpisr = regs->ISR; + + if((tmpisr & (DMA_FLAG_TEIF0_4 << hdma->StreamIndex)) != RESET) + { + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_TE; + + /* Clear the transfer error flag */ + regs->IFCR = DMA_FLAG_TEIF0_4 << hdma->StreamIndex; + } + + if((tmpisr & (DMA_FLAG_FEIF0_4 << hdma->StreamIndex)) != RESET) + { + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_FE; + + /* Clear the FIFO error flag */ + regs->IFCR = DMA_FLAG_FEIF0_4 << hdma->StreamIndex; + } + + if((tmpisr & (DMA_FLAG_DMEIF0_4 << hdma->StreamIndex)) != RESET) + { + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_DME; + + /* Clear the Direct Mode error flag */ + regs->IFCR = DMA_FLAG_DMEIF0_4 << hdma->StreamIndex; + } + } + + if(hdma->ErrorCode != HAL_DMA_ERROR_NONE) + { + if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != RESET) + { + HAL_DMA_Abort(hdma); + + /* Clear the half transfer and transfer complete flags */ + regs->IFCR = (DMA_FLAG_HTIF0_4 | DMA_FLAG_TCIF0_4) << hdma->StreamIndex; + + /* Change the DMA state */ + hdma->State= HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + } + + /* Get the level transfer complete flag */ + if(CompleteLevel == HAL_DMA_FULL_TRANSFER) + { + /* Clear the half transfer and transfer complete flags */ + regs->IFCR = (DMA_FLAG_HTIF0_4 | DMA_FLAG_TCIF0_4) << hdma->StreamIndex; + + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + else + { + /* Clear the half transfer and transfer complete flags */ + regs->IFCR = (DMA_FLAG_HTIF0_4) << hdma->StreamIndex; + } + + return status; +} + +/** + * @brief Handles DMA interrupt request. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) +{ + uint32_t tmpisr; + __IO uint32_t count = 0U; + uint32_t timeout = SystemCoreClock / 9600U; + + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + + tmpisr = regs->ISR; + + /* Transfer Error Interrupt management ***************************************/ + if ((tmpisr & (DMA_FLAG_TEIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != RESET) + { + /* Disable the transfer error interrupt */ + hdma->Instance->CR &= ~(DMA_IT_TE); + + /* Clear the transfer error flag */ + regs->IFCR = DMA_FLAG_TEIF0_4 << hdma->StreamIndex; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_TE; + } + } + /* FIFO Error Interrupt management ******************************************/ + if ((tmpisr & (DMA_FLAG_FEIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != RESET) + { + /* Clear the FIFO error flag */ + regs->IFCR = DMA_FLAG_FEIF0_4 << hdma->StreamIndex; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_FE; + } + } + /* Direct Mode Error Interrupt management ***********************************/ + if ((tmpisr & (DMA_FLAG_DMEIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != RESET) + { + /* Clear the direct mode error flag */ + regs->IFCR = DMA_FLAG_DMEIF0_4 << hdma->StreamIndex; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_DME; + } + } + /* Half Transfer Complete Interrupt management ******************************/ + if ((tmpisr & (DMA_FLAG_HTIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != RESET) + { + /* Clear the half transfer complete flag */ + regs->IFCR = DMA_FLAG_HTIF0_4 << hdma->StreamIndex; + + /* Multi_Buffering mode enabled */ + if(((hdma->Instance->CR) & (uint32_t)(DMA_SxCR_DBM)) != RESET) + { + /* Current memory buffer used is Memory 0 */ + if((hdma->Instance->CR & DMA_SxCR_CT) == RESET) + { + if(hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + /* Current memory buffer used is Memory 1 */ + else + { + if(hdma->XferM1HalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferM1HalfCpltCallback(hdma); + } + } + } + else + { + /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ + if((hdma->Instance->CR & DMA_SxCR_CIRC) == RESET) + { + /* Disable the half transfer interrupt */ + hdma->Instance->CR &= ~(DMA_IT_HT); + } + + if(hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + } + } + /* Transfer Complete Interrupt management ***********************************/ + if ((tmpisr & (DMA_FLAG_TCIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != RESET) + { + /* Clear the transfer complete flag */ + regs->IFCR = DMA_FLAG_TCIF0_4 << hdma->StreamIndex; + + if(HAL_DMA_STATE_ABORT == hdma->State) + { + /* Disable all the transfer interrupts */ + hdma->Instance->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME); + hdma->Instance->FCR &= ~(DMA_IT_FE); + + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + { + hdma->Instance->CR &= ~(DMA_IT_HT); + } + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if(hdma->XferAbortCallback != NULL) + { + hdma->XferAbortCallback(hdma); + } + return; + } + + if(((hdma->Instance->CR) & (uint32_t)(DMA_SxCR_DBM)) != RESET) + { + /* Current memory buffer used is Memory 0 */ + if((hdma->Instance->CR & DMA_SxCR_CT) == RESET) + { + if(hdma->XferM1CpltCallback != NULL) + { + /* Transfer complete Callback for memory1 */ + hdma->XferM1CpltCallback(hdma); + } + } + /* Current memory buffer used is Memory 1 */ + else + { + if(hdma->XferCpltCallback != NULL) + { + /* Transfer complete Callback for memory0 */ + hdma->XferCpltCallback(hdma); + } + } + } + /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */ + else + { + if((hdma->Instance->CR & DMA_SxCR_CIRC) == RESET) + { + /* Disable the transfer complete interrupt */ + hdma->Instance->CR &= ~(DMA_IT_TC); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + + if(hdma->XferCpltCallback != NULL) + { + /* Transfer complete callback */ + hdma->XferCpltCallback(hdma); + } + } + } + } + + /* manage error case */ + if(hdma->ErrorCode != HAL_DMA_ERROR_NONE) + { + if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != RESET) + { + hdma->State = HAL_DMA_STATE_ABORT; + + /* Disable the stream */ + __HAL_DMA_DISABLE(hdma); + + do + { + if (++count > timeout) + { + break; + } + } + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + + if(hdma->XferErrorCallback != NULL) + { + /* Transfer error callback */ + hdma->XferErrorCallback(hdma); + } + } +} + +/** + * @brief Register callbacks + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CallbackID User Callback identifier + * a DMA_HandleTypeDef structure as parameter. + * @param pCallback pointer to private callback function which has pointer to + * a DMA_HandleTypeDef structure as parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma)) +{ + + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + switch (CallbackID) + { + case HAL_DMA_XFER_CPLT_CB_ID: + hdma->XferCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_HALFCPLT_CB_ID: + hdma->XferHalfCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_M1CPLT_CB_ID: + hdma->XferM1CpltCallback = pCallback; + break; + + case HAL_DMA_XFER_M1HALFCPLT_CB_ID: + hdma->XferM1HalfCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_ERROR_CB_ID: + hdma->XferErrorCallback = pCallback; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = pCallback; + break; + + default: + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @brief UnRegister callbacks + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CallbackID User Callback identifier + * a HAL_DMA_CallbackIDTypeDef ENUM as parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + switch (CallbackID) + { + case HAL_DMA_XFER_CPLT_CB_ID: + hdma->XferCpltCallback = NULL; + break; + + case HAL_DMA_XFER_HALFCPLT_CB_ID: + hdma->XferHalfCpltCallback = NULL; + break; + + case HAL_DMA_XFER_M1CPLT_CB_ID: + hdma->XferM1CpltCallback = NULL; + break; + + case HAL_DMA_XFER_M1HALFCPLT_CB_ID: + hdma->XferM1HalfCpltCallback = NULL; + break; + + case HAL_DMA_XFER_ERROR_CB_ID: + hdma->XferErrorCallback = NULL; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = NULL; + break; + + case HAL_DMA_XFER_ALL_CB_ID: + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferM1CpltCallback = NULL; + hdma->XferM1HalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + break; + + default: + status = HAL_ERROR; + break; + } + } + else + { + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group3 + * +@verbatim + =============================================================================== + ##### State and Errors functions ##### + =============================================================================== + [..] + This subsection provides functions allowing to + (+) Check the DMA state + (+) Get error code + +@endverbatim + * @{ + */ + +/** + * @brief Returns the DMA state. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL state + */ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) +{ + return hdma->State; +} + +/** + * @brief Return the DMA error code + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval DMA Error Code + */ +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) +{ + return hdma->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMA_Private_Functions + * @{ + */ + +/** + * @brief Sets the DMA Transfer parameter. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Clear DBM bit */ + hdma->Instance->CR &= (uint32_t)(~DMA_SxCR_DBM); + + /* Configure DMA Stream data length */ + hdma->Instance->NDTR = DataLength; + + /* Memory to Peripheral */ + if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Stream destination address */ + hdma->Instance->PAR = DstAddress; + + /* Configure DMA Stream source address */ + hdma->Instance->M0AR = SrcAddress; + } + /* Peripheral to Memory */ + else + { + /* Configure DMA Stream source address */ + hdma->Instance->PAR = SrcAddress; + + /* Configure DMA Stream destination address */ + hdma->Instance->M0AR = DstAddress; + } +} + +/** + * @brief Returns the DMA Stream base address depending on stream number + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval Stream base address + */ +static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma) +{ + uint32_t stream_number = (((uint32_t)hdma->Instance & 0xFFU) - 16U) / 24U; + + /* lookup table for necessary bitshift of flags within status registers */ + static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U}; + hdma->StreamIndex = flagBitshiftOffset[stream_number]; + + if (stream_number > 3U) + { + /* return pointer to HISR and HIFCR */ + hdma->StreamBaseAddress = (((uint32_t)hdma->Instance & (uint32_t)(~0x3FFU)) + 4U); + } + else + { + /* return pointer to LISR and LIFCR */ + hdma->StreamBaseAddress = ((uint32_t)hdma->Instance & (uint32_t)(~0x3FFU)); + } + + return hdma->StreamBaseAddress; +} + +/** + * @brief Check compatibility between FIFO threshold level and size of the memory burst + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmp = hdma->Init.FIFOThreshold; + + /* Memory Data size equal to Byte */ + if(hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE) + { + switch (tmp) + { + case DMA_FIFO_THRESHOLD_1QUARTERFULL: + case DMA_FIFO_THRESHOLD_3QUARTERSFULL: + if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1) + { + status = HAL_ERROR; + } + break; + case DMA_FIFO_THRESHOLD_HALFFULL: + if (hdma->Init.MemBurst == DMA_MBURST_INC16) + { + status = HAL_ERROR; + } + break; + case DMA_FIFO_THRESHOLD_FULL: + break; + default: + break; + } + } + + /* Memory Data size equal to Half-Word */ + else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) + { + switch (tmp) + { + case DMA_FIFO_THRESHOLD_1QUARTERFULL: + case DMA_FIFO_THRESHOLD_3QUARTERSFULL: + status = HAL_ERROR; + break; + case DMA_FIFO_THRESHOLD_HALFFULL: + if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1) + { + status = HAL_ERROR; + } + break; + case DMA_FIFO_THRESHOLD_FULL: + if (hdma->Init.MemBurst == DMA_MBURST_INC16) + { + status = HAL_ERROR; + } + break; + default: + break; + } + } + + /* Memory Data size equal to Word */ + else + { + switch (tmp) + { + case DMA_FIFO_THRESHOLD_1QUARTERFULL: + case DMA_FIFO_THRESHOLD_HALFFULL: + case DMA_FIFO_THRESHOLD_3QUARTERSFULL: + status = HAL_ERROR; + break; + case DMA_FIFO_THRESHOLD_FULL: + if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1) + { + status = HAL_ERROR; + } + break; + default: + break; + } + } + + return status; +} + +/** + * @} + */ + +#endif /* HAL_DMA_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c new file mode 100644 index 00000000..7167e77e --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c @@ -0,0 +1,313 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma_ex.c + * @author MCD Application Team + * @brief DMA Extension HAL module driver + * This file provides firmware functions to manage the following + * functionalities of the DMA Extension peripheral: + * + Extended features functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The DMA Extension HAL driver can be used as follows: + (#) Start a multi buffer transfer using the HAL_DMA_MultiBufferStart() function + for polling mode or HAL_DMA_MultiBufferStart_IT() for interrupt mode. + + -@- In Memory-to-Memory transfer mode, Multi (Double) Buffer mode is not allowed. + -@- When Multi (Double) Buffer mode is enabled the, transfer is circular by default. + -@- In Multi (Double) buffer mode, it is possible to update the base address for + the AHB memory port on the fly (DMA_SxM0AR or DMA_SxM1AR) when the stream is enabled. + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup DMAEx DMAEx + * @brief DMA Extended HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private Constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @addtogroup DMAEx_Private_Functions + * @{ + */ +static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @addtogroup DMAEx_Exported_Functions + * @{ + */ + + +/** @addtogroup DMAEx_Exported_Functions_Group1 + * +@verbatim + =============================================================================== + ##### Extended features functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the source, destination address and data length and + Start MultiBuffer DMA transfer + (+) Configure the source, destination address and data length and + Start MultiBuffer DMA transfer with interrupt + (+) Change on the fly the memory0 or memory1 address. + +@endverbatim + * @{ + */ + + +/** + * @brief Starts the multi_buffer DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param SecondMemAddress The second memory Buffer address in case of multi buffer Transfer + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Memory-to-memory transfer not supported in double buffering mode */ + if (hdma->Init.Direction == DMA_MEMORY_TO_MEMORY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + status = HAL_ERROR; + } + else + { + /* Process Locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Enable the double buffer mode */ + hdma->Instance->CR |= (uint32_t)DMA_SxCR_DBM; + + /* Configure DMA Stream destination address */ + hdma->Instance->M1AR = SecondMemAddress; + + /* Configure the source, destination address and the data length */ + DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Return error status */ + status = HAL_BUSY; + } + } + return status; +} + +/** + * @brief Starts the multi_buffer DMA Transfer with interrupt enabled. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param SecondMemAddress The second memory Buffer address in case of multi buffer Transfer + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Memory-to-memory transfer not supported in double buffering mode */ + if (hdma->Init.Direction == DMA_MEMORY_TO_MEMORY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + return HAL_ERROR; + } + + /* Check callback functions */ + if ((NULL == hdma->XferCpltCallback) || (NULL == hdma->XferM1CpltCallback) || (NULL == hdma->XferErrorCallback)) + { + hdma->ErrorCode = HAL_DMA_ERROR_PARAM; + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Enable the Double buffer mode */ + hdma->Instance->CR |= (uint32_t)DMA_SxCR_DBM; + + /* Configure DMA Stream destination address */ + hdma->Instance->M1AR = SecondMemAddress; + + /* Configure the source, destination address and the data length */ + DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Clear all flags */ + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_DME_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_FE_FLAG_INDEX(hdma)); + + /* Enable Common interrupts*/ + hdma->Instance->CR |= DMA_IT_TC | DMA_IT_TE | DMA_IT_DME; + hdma->Instance->FCR |= DMA_IT_FE; + + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + { + hdma->Instance->CR |= DMA_IT_HT; + } + + /* Enable the peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + /* Return error status */ + status = HAL_BUSY; + } + return status; +} + +/** + * @brief Change the memory0 or memory1 address on the fly. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param Address The new address + * @param memory the memory to be changed, This parameter can be one of + * the following values: + * MEMORY0 / + * MEMORY1 + * @note The MEMORY0 address can be changed only when the current transfer use + * MEMORY1 and the MEMORY1 address can be changed only when the current + * transfer use MEMORY0. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory) +{ + if(memory == MEMORY0) + { + /* change the memory0 address */ + hdma->Instance->M0AR = Address; + } + else + { + /* change the memory1 address */ + hdma->Instance->M1AR = Address; + } + + return HAL_OK; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMAEx_Private_Functions + * @{ + */ + +/** + * @brief Set the DMA Transfer parameter. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Configure DMA Stream data length */ + hdma->Instance->NDTR = DataLength; + + /* Peripheral to Memory */ + if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Stream destination address */ + hdma->Instance->PAR = DstAddress; + + /* Configure DMA Stream source address */ + hdma->Instance->M0AR = SrcAddress; + } + /* Memory to Peripheral */ + else + { + /* Configure DMA Stream source address */ + hdma->Instance->PAR = SrcAddress; + + /* Configure DMA Stream destination address */ + hdma->Instance->M0AR = DstAddress; + } +} + +/** + * @} + */ + +#endif /* HAL_DMA_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c new file mode 100644 index 00000000..3e463122 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c @@ -0,0 +1,553 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_exti.c + * @author MCD Application Team + * @brief EXTI HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Extended Interrupts and events controller (EXTI) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2018 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### EXTI Peripheral features ##### + ============================================================================== + [..] + (+) Each Exti line can be configured within this driver. + + (+) Exti line can be configured in 3 different modes + (++) Interrupt + (++) Event + (++) Both of them + + (+) Configurable Exti lines can be configured with 3 different triggers + (++) Rising + (++) Falling + (++) Both of them + + (+) When set in interrupt mode, configurable Exti lines have two different + interrupts pending registers which allow to distinguish which transition + occurs: + (++) Rising edge pending interrupt + (++) Falling + + (+) Exti lines 0 to 15 are linked to gpio pin number 0 to 15. Gpio port can + be selected through multiplexer. + + ##### How to use this driver ##### + ============================================================================== + [..] + + (#) Configure the EXTI line using HAL_EXTI_SetConfigLine(). + (++) Choose the interrupt line number by setting "Line" member from + EXTI_ConfigTypeDef structure. + (++) Configure the interrupt and/or event mode using "Mode" member from + EXTI_ConfigTypeDef structure. + (++) For configurable lines, configure rising and/or falling trigger + "Trigger" member from EXTI_ConfigTypeDef structure. + (++) For Exti lines linked to gpio, choose gpio port using "GPIOSel" + member from GPIO_InitTypeDef structure. + + (#) Get current Exti configuration of a dedicated line using + HAL_EXTI_GetConfigLine(). + (++) Provide exiting handle as parameter. + (++) Provide pointer on EXTI_ConfigTypeDef structure as second parameter. + + (#) Clear Exti configuration of a dedicated line using HAL_EXTI_ClearConfigLine(). + (++) Provide exiting handle as parameter. + + (#) Register callback to treat Exti interrupts using HAL_EXTI_RegisterCallback(). + (++) Provide exiting handle as first parameter. + (++) Provide which callback will be registered using one value from + EXTI_CallbackIDTypeDef. + (++) Provide callback function pointer. + + (#) Get interrupt pending bit using HAL_EXTI_GetPending(). + + (#) Clear interrupt pending bit using HAL_EXTI_ClearPending(). + + (#) Generate software interrupt using HAL_EXTI_GenerateSWI(). + + @endverbatim + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup EXTI + * @{ + */ +/** MISRA C:2012 deviation rule has been granted for following rule: + * Rule-18.1_b - Medium: Array `EXTICR' 1st subscript interval [0,7] may be out + * of bounds [0,3] in following API : + * HAL_EXTI_SetConfigLine + * HAL_EXTI_GetConfigLine + * HAL_EXTI_ClearConfigLine + */ + +#ifdef HAL_EXTI_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @defgroup EXTI_Private_Constants EXTI Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup EXTI_Exported_Functions + * @{ + */ + +/** @addtogroup EXTI_Exported_Functions_Group1 + * @brief Configuration functions + * +@verbatim + =============================================================================== + ##### Configuration functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Set configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @param pExtiConfig Pointer on EXTI configuration to be set. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check null pointer */ + if ((hexti == NULL) || (pExtiConfig == NULL)) + { + return HAL_ERROR; + } + + /* Check parameters */ + assert_param(IS_EXTI_LINE(pExtiConfig->Line)); + assert_param(IS_EXTI_MODE(pExtiConfig->Mode)); + + /* Assign line number to handle */ + hexti->Line = pExtiConfig->Line; + + /* Compute line mask */ + linepos = (pExtiConfig->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* Configure triggers for configurable lines */ + if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) + { + assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger)); + + /* Configure rising trigger */ + /* Mask or set line */ + if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u) + { + EXTI->RTSR |= maskline; + } + else + { + EXTI->RTSR &= ~maskline; + } + + /* Configure falling trigger */ + /* Mask or set line */ + if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u) + { + EXTI->FTSR |= maskline; + } + else + { + EXTI->FTSR &= ~maskline; + } + + + /* Configure gpio port selection in case of gpio exti line */ + if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel)); + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + SYSCFG->EXTICR[linepos >> 2u] = regval; + } + } + + /* Configure interrupt mode : read current mode */ + /* Mask or set line */ + if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u) + { + EXTI->IMR |= maskline; + } + else + { + EXTI->IMR &= ~maskline; + } + + /* Configure event mode : read current mode */ + /* Mask or set line */ + if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u) + { + EXTI->EMR |= maskline; + } + else + { + EXTI->EMR &= ~maskline; + } + + return HAL_OK; +} + +/** + * @brief Get configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @param pExtiConfig Pointer on structure to store Exti configuration. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check null pointer */ + if ((hexti == NULL) || (pExtiConfig == NULL)) + { + return HAL_ERROR; + } + + /* Check the parameter */ + assert_param(IS_EXTI_LINE(hexti->Line)); + + /* Store handle line number to configuration structure */ + pExtiConfig->Line = hexti->Line; + + /* Compute line mask */ + linepos = (pExtiConfig->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* 1] Get core mode : interrupt */ + + /* Check if selected line is enable */ + if ((EXTI->IMR & maskline) != 0x00u) + { + pExtiConfig->Mode = EXTI_MODE_INTERRUPT; + } + else + { + pExtiConfig->Mode = EXTI_MODE_NONE; + } + + /* Get event mode */ + /* Check if selected line is enable */ + if ((EXTI->EMR & maskline) != 0x00u) + { + pExtiConfig->Mode |= EXTI_MODE_EVENT; + } + + /* Get default Trigger and GPIOSel configuration */ + pExtiConfig->Trigger = EXTI_TRIGGER_NONE; + pExtiConfig->GPIOSel = 0x00u; + + /* 2] Get trigger for configurable lines : rising */ + if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) + { + /* Check if configuration of selected line is enable */ + if ((EXTI->RTSR & maskline) != 0x00u) + { + pExtiConfig->Trigger = EXTI_TRIGGER_RISING; + } + + /* Get falling configuration */ + /* Check if configuration of selected line is enable */ + if ((EXTI->FTSR & maskline) != 0x00u) + { + pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING; + } + + /* Get Gpio port selection for gpio lines */ + if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + pExtiConfig->GPIOSel = (regval >> (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))) & SYSCFG_EXTICR1_EXTI0; + } + } + + return HAL_OK; +} + +/** + * @brief Clear whole configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check null pointer */ + if (hexti == NULL) + { + return HAL_ERROR; + } + + /* Check the parameter */ + assert_param(IS_EXTI_LINE(hexti->Line)); + + /* compute line mask */ + linepos = (hexti->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* 1] Clear interrupt mode */ + EXTI->IMR = (EXTI->IMR & ~maskline); + + /* 2] Clear event mode */ + EXTI->EMR = (EXTI->EMR & ~maskline); + + /* 3] Clear triggers in case of configurable lines */ + if ((hexti->Line & EXTI_CONFIG) != 0x00u) + { + EXTI->RTSR = (EXTI->RTSR & ~maskline); + EXTI->FTSR = (EXTI->FTSR & ~maskline); + + /* Get Gpio port selection for gpio lines */ + if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + SYSCFG->EXTICR[linepos >> 2u] = regval; + } + } + + return HAL_OK; +} + +/** + * @brief Register callback for a dedicated Exti line. + * @param hexti Exti handle. + * @param CallbackID User callback identifier. + * This parameter can be one of @arg @ref EXTI_CallbackIDTypeDef values. + * @param pPendingCbfn function pointer to be stored as callback. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)) +{ + HAL_StatusTypeDef status = HAL_OK; + + switch (CallbackID) + { + case HAL_EXTI_COMMON_CB_ID: + hexti->PendingCallback = pPendingCbfn; + break; + + default: + status = HAL_ERROR; + break; + } + + return status; +} + +/** + * @brief Store line number as handle private field. + * @param hexti Exti handle. + * @param ExtiLine Exti line number. + * This parameter can be from 0 to @ref EXTI_LINE_NB. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(ExtiLine)); + + /* Check null pointer */ + if (hexti == NULL) + { + return HAL_ERROR; + } + else + { + /* Store line number as handle private field */ + hexti->Line = ExtiLine; + + return HAL_OK; + } +} + +/** + * @} + */ + +/** @addtogroup EXTI_Exported_Functions_Group2 + * @brief EXTI IO functions. + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Handle EXTI interrupt request. + * @param hexti Exti handle. + * @retval none. + */ +void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti) +{ + uint32_t regval; + uint32_t maskline; + + /* Compute line mask */ + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Get pending bit */ + regval = (EXTI->PR & maskline); + if (regval != 0x00u) + { + /* Clear pending bit */ + EXTI->PR = maskline; + + /* Call callback */ + if (hexti->PendingCallback != NULL) + { + hexti->PendingCallback(); + } + } +} + +/** + * @brief Get interrupt pending bit of a dedicated line. + * @param hexti Exti handle. + * @param Edge Specify which pending edge as to be checked. + * This parameter can be one of the following values: + * @arg @ref EXTI_TRIGGER_RISING_FALLING + * This parameter is kept for compatibility with other series. + * @retval 1 if interrupt is pending else 0. + */ +uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(Edge); + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + assert_param(IS_EXTI_PENDING_EDGE(Edge)); + + /* Compute line mask */ + linepos = (hexti->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* return 1 if bit is set else 0 */ + regval = ((EXTI->PR & maskline) >> linepos); + return regval; +} + +/** + * @brief Clear interrupt pending bit of a dedicated line. + * @param hexti Exti handle. + * @param Edge Specify which pending edge as to be clear. + * This parameter can be one of the following values: + * @arg @ref EXTI_TRIGGER_RISING_FALLING + * This parameter is kept for compatibility with other series. + * @retval None. + */ +void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) +{ + uint32_t maskline; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(Edge); + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + assert_param(IS_EXTI_PENDING_EDGE(Edge)); + + /* Compute line mask */ + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Clear Pending bit */ + EXTI->PR = maskline; +} + +/** + * @brief Generate a software interrupt for a dedicated line. + * @param hexti Exti handle. + * @retval None. + */ +void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti) +{ + uint32_t maskline; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + + /* Compute line mask */ + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Generate Software interrupt */ + EXTI->SWIER = maskline; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_EXTI_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c new file mode 100644 index 00000000..808949ea --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c @@ -0,0 +1,776 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash.c + * @author MCD Application Team + * @brief FLASH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the internal FLASH memory: + * + Program operations functions + * + Memory Control functions + * + Peripheral Errors functions + * + @verbatim + ============================================================================== + ##### FLASH peripheral features ##### + ============================================================================== + + [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses + to the Flash memory. It implements the erase and program Flash memory operations + and the read and write protection mechanisms. + + [..] The Flash memory interface accelerates code execution with a system of instruction + prefetch and cache lines. + + [..] The FLASH main features are: + (+) Flash memory read operations + (+) Flash memory program/erase operations + (+) Read / write protections + (+) Prefetch on I-Code + (+) 64 cache lines of 128 bits on I-Code + (+) 8 cache lines of 128 bits on D-Code + + + ##### How to use this driver ##### + ============================================================================== + [..] + This driver provides functions and macros to configure and program the FLASH + memory of all STM32F4xx devices. + + (#) FLASH Memory IO Programming functions: + (++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and + HAL_FLASH_Lock() functions + (++) Program functions: byte, half word, word and double word + (++) There Two modes of programming : + (+++) Polling mode using HAL_FLASH_Program() function + (+++) Interrupt mode using HAL_FLASH_Program_IT() function + + (#) Interrupts and flags management functions : + (++) Handle FLASH interrupts by calling HAL_FLASH_IRQHandler() + (++) Wait for last FLASH operation according to its status + (++) Get error flag status by calling HAL_SetErrorCode() + + [..] + In addition to these functions, this driver includes a set of macros allowing + to handle the following operations: + (+) Set the latency + (+) Enable/Disable the prefetch buffer + (+) Enable/Disable the Instruction cache and the Data cache + (+) Reset the Instruction cache and the Data cache + (+) Enable/Disable the FLASH interrupts + (+) Monitor the FLASH flags status + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup FLASH FLASH + * @brief FLASH HAL module driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup FLASH_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @addtogroup FLASH_Private_Variables + * @{ + */ +/* Variable used for Erase sectors under interruption */ +FLASH_ProcessTypeDef pFlash = {.ProcedureOnGoing = FLASH_PROC_NONE, + .NbSectorsToErase = 0U, + .VoltageForErase= FLASH_VOLTAGE_RANGE_1, + .Sector = 0U, + .Bank = FLASH_BANK_1, + .Address = 0U, + .Lock = HAL_UNLOCKED, + .ErrorCode = HAL_FLASH_ERROR_NONE}; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup FLASH_Private_Functions + * @{ + */ +/* Program operations */ +static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data); +static void FLASH_Program_Word(uint32_t Address, uint32_t Data); +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data); +static void FLASH_Program_Byte(uint32_t Address, uint8_t Data); +static void FLASH_SetErrorCode(void); + +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Functions FLASH Exported Functions + * @{ + */ + +/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions + * @brief Programming operation functions + * +@verbatim + =============================================================================== + ##### Programming operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the FLASH + program operations. + +@endverbatim + * @{ + */ + +/** + * @brief Program byte, halfword, word or double word at a specified address + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if (TypeProgram == FLASH_TYPEPROGRAM_BYTE) + { + /*Program byte (8-bit) at a specified address.*/ + FLASH_Program_Byte(Address, (uint8_t) Data); + } + else if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(Address, (uint16_t) Data); + } + else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /*Program word (32-bit) at a specified address.*/ + FLASH_Program_Word(Address, (uint32_t) Data); + } + else + { + /*Program double word (64-bit) at a specified address.*/ + FLASH_Program_DoubleWord(Address, Data); + } + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the PG Bit */ + FLASH->CR &= (~FLASH_CR_PG); + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Program byte, halfword, word or double word at a specified address with interrupt enabled. + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + + /* Enable End of FLASH Operation interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP); + + /* Enable Error source interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_ERR); + + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM; + pFlash.Address = Address; + + if (TypeProgram == FLASH_TYPEPROGRAM_BYTE) + { + /*Program byte (8-bit) at a specified address.*/ + FLASH_Program_Byte(Address, (uint8_t) Data); + } + else if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(Address, (uint16_t) Data); + } + else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /*Program word (32-bit) at a specified address.*/ + FLASH_Program_Word(Address, (uint32_t) Data); + } + else + { + /*Program double word (64-bit) at a specified address.*/ + FLASH_Program_DoubleWord(Address, Data); + } + + return status; +} + +/** + * @brief This function handles FLASH interrupt request. + * @retval None + */ +void HAL_FLASH_IRQHandler(void) +{ + uint32_t addresstmp = 0U; + + /* Check FLASH operation error flags */ +#if defined(FLASH_SR_RDERR) + if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) +#else + if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)) != RESET) +#endif /* FLASH_SR_RDERR */ + { + if (pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) + { + /*return the faulty sector*/ + addresstmp = pFlash.Sector; + pFlash.Sector = 0xFFFFFFFFU; + } + else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /*return the faulty bank*/ + addresstmp = pFlash.Bank; + } + else + { + /*return the faulty address*/ + addresstmp = pFlash.Address; + } + + /*Save the Error code*/ + FLASH_SetErrorCode(); + + /* FLASH error interrupt user callback */ + HAL_FLASH_OperationErrorCallback(addresstmp); + + /*Stop the procedure ongoing*/ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + + /* Check FLASH End of Operation flag */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + + if (pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) + { + /*Nb of sector to erased can be decreased*/ + pFlash.NbSectorsToErase--; + + /* Check if there are still sectors to erase*/ + if (pFlash.NbSectorsToErase != 0U) + { + addresstmp = pFlash.Sector; + /*Indicate user which sector has been erased*/ + HAL_FLASH_EndOfOperationCallback(addresstmp); + + /*Increment sector number*/ + pFlash.Sector++; + addresstmp = pFlash.Sector; + FLASH_Erase_Sector(addresstmp, pFlash.VoltageForErase); + } + else + { + /*No more sectors to Erase, user callback can be called.*/ + /*Reset Sector and stop Erase sectors procedure*/ + pFlash.Sector = addresstmp = 0xFFFFFFFFU; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + + /* Flush the caches to be sure of the data consistency */ + FLASH_FlushCaches(); + + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + } + } + else + { + if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /* MassErase ended. Return the selected bank */ + /* Flush the caches to be sure of the data consistency */ + FLASH_FlushCaches(); + + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(pFlash.Bank); + } + else + { + /*Program ended. Return the selected address*/ + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + + if (pFlash.ProcedureOnGoing == FLASH_PROC_NONE) + { + /* Operation is completed, disable the PG, SER, SNB and MER Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_SER | FLASH_CR_SNB | FLASH_MER_BIT)); + + /* Disable End of FLASH Operation interrupt */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP); + + /* Disable Error source interrupt */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR); + } +} + +/** + * @brief FLASH end of operation interrupt callback + * @param ReturnValue The value saved in this parameter depends on the ongoing procedure + * Mass Erase: Bank number which has been requested to erase + * Sectors Erase: Sector which has been erased + * (if 0xFFFFFFFFU, it means that all the selected sectors have been erased) + * Program: Address which was selected for data program + * @retval None + */ +__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_EndOfOperationCallback could be implemented in the user file + */ +} + +/** + * @brief FLASH operation error interrupt callback + * @param ReturnValue The value saved in this parameter depends on the ongoing procedure + * Mass Erase: Bank number which has been requested to erase + * Sectors Erase: Sector number which returned an error + * Program: Address which was selected for data program + * @retval None + */ +__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_OperationErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions + * @brief management functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + memory operations. + +@endverbatim + * @{ + */ + +/** + * @brief Unlock the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Unlock(void) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + /* Authorize the FLASH Registers access */ + WRITE_REG(FLASH->KEYR, FLASH_KEY1); + WRITE_REG(FLASH->KEYR, FLASH_KEY2); + + /* Verify Flash is unlocked */ + if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } + } + + return status; +} + +/** + * @brief Locks the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Lock(void) +{ + /* Set the LOCK Bit to lock the FLASH Registers access */ + FLASH->CR |= FLASH_CR_LOCK; + + return HAL_OK; +} + +/** + * @brief Unlock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) +{ + if ((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET) + { + /* Authorizes the Option Byte register programming */ + FLASH->OPTKEYR = FLASH_OPT_KEY1; + FLASH->OPTKEYR = FLASH_OPT_KEY2; + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Lock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void) +{ + /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */ + FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK; + + return HAL_OK; +} + +/** + * @brief Launch the option byte loading. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) +{ + /* Set the OPTSTRT bit in OPTCR register */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT; + + /* Wait for last operation to be completed */ + return (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE)); +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group3 Peripheral State and Errors functions + * @brief Peripheral Errors functions + * +@verbatim + =============================================================================== + ##### Peripheral Errors functions ##### + =============================================================================== + [..] + This subsection permits to get in run-time Errors of the FLASH peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Get the specific FLASH error flag. + * @retval FLASH_ErrorCode: The returned value can be a combination of: + * @arg HAL_FLASH_ERROR_RD: FLASH Read Protection error flag (PCROP) + * @arg HAL_FLASH_ERROR_PGS: FLASH Programming Sequence error flag + * @arg HAL_FLASH_ERROR_PGP: FLASH Programming Parallelism error flag + * @arg HAL_FLASH_ERROR_PGA: FLASH Programming Alignment error flag + * @arg HAL_FLASH_ERROR_WRP: FLASH Write protected error flag + * @arg HAL_FLASH_ERROR_OPERATION: FLASH operation Error flag + */ +uint32_t HAL_FLASH_GetError(void) +{ + return pFlash.ErrorCode; +} + +/** + * @} + */ + +/** + * @brief Wait for a FLASH operation to complete. + * @param Timeout maximum flash operationtimeout + * @retval HAL Status + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) +{ + uint32_t tickstart = 0U; + + /* Clear Error Code */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. + Even if the FLASH operation fails, the BUSY flag will be reset and an error + flag will be set */ + /* Get tick */ + tickstart = HAL_GetTick(); + + while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET) + { + if (Timeout != HAL_MAX_DELAY) + { + if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + { + return HAL_TIMEOUT; + } + } + } + + /* Check FLASH End of Operation flag */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + } +#if defined(FLASH_SR_RDERR) + if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) +#else + if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)) != RESET) +#endif /* FLASH_SR_RDERR */ + { + /*Save the error code*/ + FLASH_SetErrorCode(); + return HAL_ERROR; + } + + /* If there is no error flag set */ + return HAL_OK; + +} + +/** + * @brief Program a double word (64-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.7V to 3.6V and Vpp in the range 7V to 9V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD; + FLASH->CR |= FLASH_CR_PG; + + /* Program first word */ + *(__IO uint32_t *)Address = (uint32_t)Data; + + /* Barrier to ensure programming is performed in 2 steps, in right order + (independently of compiler optimization behavior) */ + __ISB(); + + /* Program second word */ + *(__IO uint32_t *)(Address + 4) = (uint32_t)(Data >> 32); +} + + +/** + * @brief Program word (32-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.7V to 3.6V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_Word(uint32_t Address, uint32_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint32_t *)Address = Data; +} + +/** + * @brief Program a half-word (16-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.1V to 3.6V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_HALF_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint16_t *)Address = Data; +} + +/** + * @brief Program byte (8-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 1.8V to 3.6V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_Byte(uint32_t Address, uint8_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_BYTE; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint8_t *)Address = Data; +} + +/** + * @brief Set the specific FLASH error flag. + * @retval None + */ +static void FLASH_SetErrorCode(void) +{ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP; + + /* Clear FLASH write protection error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR); + } + + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PGA; + + /* Clear FLASH Programming alignment error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGAERR); + } + + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGPERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PGP; + + /* Clear FLASH Programming parallelism error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGPERR); + } + + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PGS; + + /* Clear FLASH Programming sequence error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR); + } +#if defined(FLASH_SR_RDERR) + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_RD; + + /* Clear FLASH Proprietary readout protection error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_RDERR); + } +#endif /* FLASH_SR_RDERR */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_OPERATION; + + /* Clear FLASH Operation error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR); + } +} + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c new file mode 100644 index 00000000..839c91b1 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c @@ -0,0 +1,1344 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ex.c + * @author MCD Application Team + * @brief Extended FLASH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the FLASH extension peripheral: + * + Extended programming operations functions + * + @verbatim + ============================================================================== + ##### Flash Extension features ##### + ============================================================================== + + [..] Comparing to other previous devices, the FLASH interface for STM32F427xx/437xx and + STM32F429xx/439xx devices contains the following additional features + + (+) Capacity up to 2 Mbyte with dual bank architecture supporting read-while-write + capability (RWW) + (+) Dual bank memory organization + (+) PCROP protection for all banks + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure and program the FLASH memory + of all STM32F427xx/437xx, STM32F429xx/439xx, STM32F469xx/479xx and STM32F446xx + devices. It includes + (#) FLASH Memory Erase functions: + (++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and + HAL_FLASH_Lock() functions + (++) Erase function: Erase sector, erase all sectors + (++) There are two modes of erase : + (+++) Polling Mode using HAL_FLASHEx_Erase() + (+++) Interrupt Mode using HAL_FLASHEx_Erase_IT() + + (#) Option Bytes Programming functions: Use HAL_FLASHEx_OBProgram() to : + (++) Set/Reset the write protection + (++) Set the Read protection Level + (++) Set the BOR level + (++) Program the user Option Bytes + (#) Advanced Option Bytes Programming functions: Use HAL_FLASHEx_AdvOBProgram() to : + (++) Extended space (bank 2) erase function + (++) Full FLASH space (2 Mo) erase (bank 1 and bank 2) + (++) Dual Boot activation + (++) Write protection configuration for bank 2 + (++) PCROP protection configuration and control for both banks + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup FLASHEx FLASHEx + * @brief FLASH HAL Extension module driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup FLASHEx_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */ +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @addtogroup FLASHEx_Private_Variables + * @{ + */ +extern FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup FLASHEx_Private_Functions + * @{ + */ +/* Option bytes control */ +static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t Level); +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t Iwdg, uint8_t Stop, uint8_t Stdby); +static HAL_StatusTypeDef FLASH_OB_BOR_LevelConfig(uint8_t Level); +static uint8_t FLASH_OB_GetUser(void); +static uint16_t FLASH_OB_GetWRP(void); +static uint8_t FLASH_OB_GetRDP(void); +static uint8_t FLASH_OB_GetBOR(void); + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) ||\ + defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t Sector); +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t Sector); +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx + STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_BootConfig(uint8_t BootConfig); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +extern HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions + * @{ + */ + +/** @defgroup FLASHEx_Exported_Functions_Group1 Extended IO operation functions + * @brief Extended IO operation functions + * +@verbatim + =============================================================================== + ##### Extended programming operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the Extension FLASH + programming operations. + +@endverbatim + * @{ + */ +/** + * @brief Perform a mass erase or erase the specified FLASH memory sectors + * @param[in] pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @param[out] SectorError pointer to variable that + * contains the configuration information on faulty sector in case of error + * (0xFFFFFFFFU means that all the sectors have been correctly erased) + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError) +{ + HAL_StatusTypeDef status; + uint32_t index = 0U; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /*Initialization of SectorError variable*/ + *SectorError = 0xFFFFFFFFU; + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + FLASH_MassErase((uint8_t) pEraseInit->VoltageRange, pEraseInit->Banks); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the erase operation is completed, disable the MER Bit */ + FLASH->CR &= (~FLASH_MER_BIT); + } + else + { + /* Check the parameters */ + assert_param(IS_FLASH_NBSECTORS(pEraseInit->NbSectors + pEraseInit->Sector)); + + /* Erase by sector by sector to be done*/ + for (index = pEraseInit->Sector; index < (pEraseInit->NbSectors + pEraseInit->Sector); index++) + { + FLASH_Erase_Sector(index, (uint8_t) pEraseInit->VoltageRange); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the SER and SNB Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_SER | FLASH_CR_SNB)); + + if (status != HAL_OK) + { + /* In case of error, stop erase procedure and return the faulty sector*/ + *SectorError = index; + break; + } + } + } + /* Flush the caches to be sure of the data consistency */ + FLASH_FlushCaches(); + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Perform a mass erase or erase the specified FLASH memory sectors with interrupt enabled + * @param pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Enable End of FLASH Operation interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP); + + /* Enable Error source interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_ERR); + + /* Clear pending flags (if any) */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \ + FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE; + pFlash.Bank = pEraseInit->Banks; + FLASH_MassErase((uint8_t) pEraseInit->VoltageRange, pEraseInit->Banks); + } + else + { + /* Erase by sector to be done*/ + + /* Check the parameters */ + assert_param(IS_FLASH_NBSECTORS(pEraseInit->NbSectors + pEraseInit->Sector)); + + pFlash.ProcedureOnGoing = FLASH_PROC_SECTERASE; + pFlash.NbSectorsToErase = pEraseInit->NbSectors; + pFlash.Sector = pEraseInit->Sector; + pFlash.VoltageForErase = (uint8_t)pEraseInit->VoltageRange; + + /*Erase 1st sector and wait for IT*/ + FLASH_Erase_Sector(pEraseInit->Sector, pEraseInit->VoltageRange); + } + + return status; +} + +/** + * @brief Program option bytes + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_OPTIONBYTE(pOBInit->OptionType)); + + /*Write protection configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) + { + assert_param(IS_WRPSTATE(pOBInit->WRPState)); + if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) + { + /*Enable of Write protection on the selected Sector*/ + status = FLASH_OB_EnableWRP(pOBInit->WRPSector, pOBInit->Banks); + } + else + { + /*Disable of Write protection on the selected Sector*/ + status = FLASH_OB_DisableWRP(pOBInit->WRPSector, pOBInit->Banks); + } + } + + /*Read protection configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) + { + status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel); + } + + /*USER configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) + { + status = FLASH_OB_UserConfig(pOBInit->USERConfig & OB_IWDG_SW, + pOBInit->USERConfig & OB_STOP_NO_RST, + pOBInit->USERConfig & OB_STDBY_NO_RST); + } + + /*BOR Level configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_BOR) == OPTIONBYTE_BOR) + { + status = FLASH_OB_BOR_LevelConfig(pOBInit->BORLevel); + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Get the Option byte configuration + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval None + */ +void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) +{ + pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_BOR; + + /*Get WRP*/ + pOBInit->WRPSector = (uint32_t)FLASH_OB_GetWRP(); + + /*Get RDP Level*/ + pOBInit->RDPLevel = (uint32_t)FLASH_OB_GetRDP(); + + /*Get USER*/ + pOBInit->USERConfig = (uint8_t)FLASH_OB_GetUser(); + + /*Get BOR Level*/ + pOBInit->BORLevel = (uint32_t)FLASH_OB_GetBOR(); +} + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Program option bytes + * @param pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that + * contains the configuration information for the programming. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Check the parameters */ + assert_param(IS_OBEX(pAdvOBInit->OptionType)); + + /*Program PCROP option byte*/ + if (((pAdvOBInit->OptionType) & OPTIONBYTE_PCROP) == OPTIONBYTE_PCROP) + { + /* Check the parameters */ + assert_param(IS_PCROPSTATE(pAdvOBInit->PCROPState)); + if ((pAdvOBInit->PCROPState) == OB_PCROP_STATE_ENABLE) + { + /*Enable of Write protection on the selected Sector*/ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + status = FLASH_OB_EnablePCROP(pAdvOBInit->Sectors); +#else /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + status = FLASH_OB_EnablePCROP(pAdvOBInit->SectorsBank1, pAdvOBInit->SectorsBank2, pAdvOBInit->Banks); +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + } + else + { + /*Disable of Write protection on the selected Sector*/ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + status = FLASH_OB_DisablePCROP(pAdvOBInit->Sectors); +#else /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + status = FLASH_OB_DisablePCROP(pAdvOBInit->SectorsBank1, pAdvOBInit->SectorsBank2, pAdvOBInit->Banks); +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + } + } + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + /*Program BOOT config option byte*/ + if (((pAdvOBInit->OptionType) & OPTIONBYTE_BOOTCONFIG) == OPTIONBYTE_BOOTCONFIG) + { + status = FLASH_OB_BootConfig(pAdvOBInit->BootConfig); + } +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + + return status; +} + +/** + * @brief Get the OBEX byte configuration + * @param pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that + * contains the configuration information for the programming. + * + * @retval None + */ +void HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit) +{ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + /*Get Sector*/ + pAdvOBInit->Sectors = (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); +#else /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + /*Get Sector for Bank1*/ + pAdvOBInit->SectorsBank1 = (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); + + /*Get Sector for Bank2*/ + pAdvOBInit->SectorsBank2 = (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS)); + + /*Get Boot config OB*/ + pAdvOBInit->BootConfig = *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS; +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ +} + +/** + * @brief Select the Protection Mode + * + * @note After PCROP activated Option Byte modification NOT POSSIBLE! excepted + * Global Read Out Protection modification (from level1 to level0) + * @note Once SPRMOD bit is active unprotection of a protected sector is not possible + * @note Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag + * @note This function can be used only for STM32F42xxx/STM32F43xxx/STM32F401xx/STM32F411xx/STM32F446xx/ + * STM32F469xx/STM32F479xx/STM32F412xx/STM32F413xx devices. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void) +{ + uint8_t optiontmp; + + /* Mask SPRMOD bit */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE3_ADDRESS) & (uint8_t)0x7F); + + /* Update Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE3_ADDRESS = (uint8_t)(OB_PCROP_SELECTED | optiontmp); + + return HAL_OK; +} + +/** + * @brief Deselect the Protection Mode + * + * @note After PCROP activated Option Byte modification NOT POSSIBLE! excepted + * Global Read Out Protection modification (from level1 to level0) + * @note Once SPRMOD bit is active unprotection of a protected sector is not possible + * @note Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag + * @note This function can be used only for STM32F42xxx/STM32F43xxx/STM32F401xx/STM32F411xx/STM32F446xx/ + * STM32F469xx/STM32F479xx/STM32F412xx/STM32F413xx devices. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void) +{ + uint8_t optiontmp; + + /* Mask SPRMOD bit */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE3_ADDRESS) & (uint8_t)0x7F); + + /* Update Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE3_ADDRESS = (uint8_t)(OB_PCROP_DESELECTED | optiontmp); + + return HAL_OK; +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE || STM32F410xx ||\ + STM32F411xE || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Returns the FLASH Write Protection Option Bytes value for Bank 2 + * @note This function can be used only for STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx devices. + * @retval The FLASH Write Protection Option Bytes value + */ +uint16_t HAL_FLASHEx_OB_GetBank2WRP(void) +{ + /* Return the FLASH write protection Register value */ + return (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS)); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/** + * @} + */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Full erase of FLASH memory sectors + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @param Banks Banks to be erased + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: Bank1 to be erased + * @arg FLASH_BANK_2: Bank2 to be erased + * @arg FLASH_BANK_BOTH: Bank1 and Bank2 to be erased + * + * @retval HAL Status + */ +static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks) +{ + /* Check the parameters */ + assert_param(IS_VOLTAGERANGE(VoltageRange)); + assert_param(IS_FLASH_BANK(Banks)); + + /* if the previous operation is completed, proceed to erase all sectors */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + + if (Banks == FLASH_BANK_BOTH) + { + /* bank1 & bank2 will be erased*/ + FLASH->CR |= FLASH_MER_BIT; + } + else if (Banks == FLASH_BANK_1) + { + /*Only bank1 will be erased*/ + FLASH->CR |= FLASH_CR_MER1; + } + else + { + /*Only bank2 will be erased*/ + FLASH->CR |= FLASH_CR_MER2; + } + FLASH->CR |= FLASH_CR_STRT | ((uint32_t)VoltageRange << 8U); +} + +/** + * @brief Erase the specified FLASH memory sector + * @param Sector FLASH sector to erase + * The value of this parameter depend on device used within the same series + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @retval None + */ +void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange) +{ + uint32_t tmp_psize = 0U; + + /* Check the parameters */ + assert_param(IS_FLASH_SECTOR(Sector)); + assert_param(IS_VOLTAGERANGE(VoltageRange)); + + if (VoltageRange == FLASH_VOLTAGE_RANGE_1) + { + tmp_psize = FLASH_PSIZE_BYTE; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_2) + { + tmp_psize = FLASH_PSIZE_HALF_WORD; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_3) + { + tmp_psize = FLASH_PSIZE_WORD; + } + else + { + tmp_psize = FLASH_PSIZE_DOUBLE_WORD; + } + + /* Need to add offset of 4 when sector higher than FLASH_SECTOR_11 */ + if (Sector > FLASH_SECTOR_11) + { + Sector += 4U; + } + /* If the previous operation is completed, proceed to erase the sector */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= tmp_psize; + CLEAR_BIT(FLASH->CR, FLASH_CR_SNB); + FLASH->CR |= FLASH_CR_SER | (Sector << FLASH_CR_SNB_Pos); + FLASH->CR |= FLASH_CR_STRT; +} + +/** + * @brief Enable the write protection of the desired bank1 or bank 2 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * This parameter can be one of the following values: + * @arg WRPSector: A value between OB_WRP_SECTOR_0 and OB_WRP_SECTOR_23 + * @arg OB_WRP_SECTOR_All + * @note BANK2 starts from OB_WRP_SECTOR_12 + * + * @param Banks Enable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * @arg FLASH_BANK_2: WRP on all sectors of bank2 + * @arg FLASH_BANK_BOTH: WRP on all sectors of bank1 & bank2 + * + * @retval HAL FLASH State + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if (((WRPSector == OB_WRP_SECTOR_All) && ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH))) || + (WRPSector < OB_WRP_SECTOR_12)) + { + if (WRPSector == OB_WRP_SECTOR_All) + { + /*Write protection on all sector of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~(WRPSector >> 12)); + } + else + { + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~WRPSector); + } + } + else + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~(WRPSector >> 12)); + } + + /*Write protection on all sector of BANK2*/ + if ((WRPSector == OB_WRP_SECTOR_All) && (Banks == FLASH_BANK_BOTH)) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~(WRPSector >> 12)); + } + } + + } + return status; +} + +/** + * @brief Disable the write protection of the desired bank1 or bank 2 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * This parameter can be one of the following values: + * @arg WRPSector: A value between OB_WRP_SECTOR_0 and OB_WRP_SECTOR_23 + * @arg OB_WRP_Sector_All + * @note BANK2 starts from OB_WRP_SECTOR_12 + * + * @param Banks Disable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: Bank1 to be erased + * @arg FLASH_BANK_2: Bank2 to be erased + * @arg FLASH_BANK_BOTH: Bank1 and Bank2 to be erased + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if (((WRPSector == OB_WRP_SECTOR_All) && ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH))) || + (WRPSector < OB_WRP_SECTOR_12)) + { + if (WRPSector == OB_WRP_SECTOR_All) + { + /*Write protection on all sector of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)(WRPSector >> 12); + } + else + { + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)WRPSector; + } + } + else + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)(WRPSector >> 12); + } + + /*Write protection on all sector of BANK2*/ + if ((WRPSector == OB_WRP_SECTOR_All) && (Banks == FLASH_BANK_BOTH)) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)(WRPSector >> 12); + } + } + + } + + return status; +} + +/** + * @brief Configure the Dual Bank Boot. + * + * @note This function can be used only for STM32F42xxx/43xxx devices. + * + * @param BootConfig specifies the Dual Bank Boot Option byte. + * This parameter can be one of the following values: + * @arg OB_Dual_BootEnabled: Dual Bank Boot Enable + * @arg OB_Dual_BootDisabled: Dual Bank Boot Disabled + * @retval None + */ +static HAL_StatusTypeDef FLASH_OB_BootConfig(uint8_t BootConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_BOOT(BootConfig)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /* Set Dual Bank Boot */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BFB2); + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= BootConfig; + } + + return status; +} + +/** + * @brief Enable the read/write protection (PCROP) of the desired + * sectors of Bank 1 and/or Bank 2. + * @note This function can be used only for STM32F42xxx/43xxx devices. + * @param SectorBank1 Specifies the sector(s) to be read/write protected or unprotected for bank1. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_0 and OB_PCROP_SECTOR_11 + * @arg OB_PCROP_SECTOR__All + * @param SectorBank2 Specifies the sector(s) to be read/write protected or unprotected for bank2. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_12 and OB_PCROP_SECTOR_23 + * @arg OB_PCROP_SECTOR__All + * @param Banks Enable PCROP protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * @arg FLASH_BANK_2: WRP on all sectors of bank2 + * @arg FLASH_BANK_BOTH: WRP on all sectors of bank1 & bank2 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH)) + { + assert_param(IS_OB_PCROP(SectorBank1)); + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)SectorBank1; + } + else + { + assert_param(IS_OB_PCROP(SectorBank2)); + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)SectorBank2; + } + + /*Write protection on all sector of BANK2*/ + if (Banks == FLASH_BANK_BOTH) + { + assert_param(IS_OB_PCROP(SectorBank2)); + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)SectorBank2; + } + } + + } + + return status; +} + + +/** + * @brief Disable the read/write protection (PCROP) of the desired + * sectors of Bank 1 and/or Bank 2. + * @note This function can be used only for STM32F42xxx/43xxx devices. + * @param SectorBank1 specifies the sector(s) to be read/write protected or unprotected for bank1. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_0 and OB_PCROP_SECTOR_11 + * @arg OB_PCROP_SECTOR__All + * @param SectorBank2 Specifies the sector(s) to be read/write protected or unprotected for bank2. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_12 and OB_PCROP_SECTOR_23 + * @arg OB_PCROP_SECTOR__All + * @param Banks Disable PCROP protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * @arg FLASH_BANK_2: WRP on all sectors of bank2 + * @arg FLASH_BANK_BOTH: WRP on all sectors of bank1 & bank2 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH)) + { + assert_param(IS_OB_PCROP(SectorBank1)); + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~SectorBank1); + } + else + { + /*Write protection done on sectors of BANK2*/ + assert_param(IS_OB_PCROP(SectorBank2)); + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~SectorBank2); + } + + /*Write protection on all sector of BANK2*/ + if (Banks == FLASH_BANK_BOTH) + { + assert_param(IS_OB_PCROP(SectorBank2)); + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~SectorBank2); + } + } + + } + + return status; + +} + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +/** + * @brief Mass erase of FLASH memory + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @param Banks Banks to be erased + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: Bank1 to be erased + * + * @retval None + */ +static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks) +{ + /* Check the parameters */ + assert_param(IS_VOLTAGERANGE(VoltageRange)); + assert_param(IS_FLASH_BANK(Banks)); + + /* If the previous operation is completed, proceed to erase all sectors */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_CR_MER; + FLASH->CR |= FLASH_CR_STRT | ((uint32_t)VoltageRange << 8U); +} + +/** + * @brief Erase the specified FLASH memory sector + * @param Sector FLASH sector to erase + * The value of this parameter depend on device used within the same series + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @retval None + */ +void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange) +{ + uint32_t tmp_psize = 0U; + + /* Check the parameters */ + assert_param(IS_FLASH_SECTOR(Sector)); + assert_param(IS_VOLTAGERANGE(VoltageRange)); + + if (VoltageRange == FLASH_VOLTAGE_RANGE_1) + { + tmp_psize = FLASH_PSIZE_BYTE; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_2) + { + tmp_psize = FLASH_PSIZE_HALF_WORD; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_3) + { + tmp_psize = FLASH_PSIZE_WORD; + } + else + { + tmp_psize = FLASH_PSIZE_DOUBLE_WORD; + } + + /* If the previous operation is completed, proceed to erase the sector */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= tmp_psize; + CLEAR_BIT(FLASH->CR, FLASH_CR_SNB); + FLASH->CR |= FLASH_CR_SER | (Sector << FLASH_CR_SNB_Pos); + FLASH->CR |= FLASH_CR_STRT; +} + +/** + * @brief Enable the write protection of the desired bank 1 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * The value of this parameter depend on device used within the same series + * + * @param Banks Enable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~WRPSector); + } + + return status; +} + +/** + * @brief Disable the write protection of the desired bank 1 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * The value of this parameter depend on device used within the same series + * + * @param Banks Enable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)WRPSector; + } + + return status; +} +#endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx + STM32F413xx || STM32F423xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Enable the read/write protection (PCROP) of the desired sectors. + * @note This function can be used only for STM32F401xx devices. + * @param Sector specifies the sector(s) to be read/write protected or unprotected. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_Sector0 and OB_PCROP_Sector5 + * @arg OB_PCROP_Sector_All + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t Sector) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_PCROP(Sector)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)Sector; + } + + return status; +} + + +/** + * @brief Disable the read/write protection (PCROP) of the desired sectors. + * @note This function can be used only for STM32F401xx devices. + * @param Sector specifies the sector(s) to be read/write protected or unprotected. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_Sector0 and OB_PCROP_Sector5 + * @arg OB_PCROP_Sector_All + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t Sector) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_PCROP(Sector)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~Sector); + } + + return status; + +} +#endif /* STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx + STM32F413xx || STM32F423xx */ + +/** + * @brief Set the read protection level. + * @param Level specifies the read protection level. + * This parameter can be one of the following values: + * @arg OB_RDP_LEVEL_0: No protection + * @arg OB_RDP_LEVEL_1: Read protection of the memory + * @arg OB_RDP_LEVEL_2: Full chip protection + * + * @note WARNING: When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t Level) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_RDP_LEVEL(Level)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint8_t *)OPTCR_BYTE1_ADDRESS = Level; + } + + return status; +} + +/** + * @brief Program the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. + * @param Iwdg Selects the IWDG mode + * This parameter can be one of the following values: + * @arg OB_IWDG_SW: Software IWDG selected + * @arg OB_IWDG_HW: Hardware IWDG selected + * @param Stop Reset event when entering STOP mode. + * This parameter can be one of the following values: + * @arg OB_STOP_NO_RST: No reset generated when entering in STOP + * @arg OB_STOP_RST: Reset generated when entering in STOP + * @param Stdby Reset event when entering Standby mode. + * This parameter can be one of the following values: + * @arg OB_STDBY_NO_RST: No reset generated when entering in STANDBY + * @arg OB_STDBY_RST: Reset generated when entering in STANDBY + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t Iwdg, uint8_t Stop, uint8_t Stdby) +{ + uint8_t optiontmp; + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE(Iwdg)); + assert_param(IS_OB_STOP_SOURCE(Stop)); + assert_param(IS_OB_STDBY_SOURCE(Stdby)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /* Mask OPTLOCK, OPTSTRT, BOR_LEV and BFB2 bits */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE0_ADDRESS) & (uint8_t)0x1F); + + /* Update User Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS = Iwdg | (uint8_t)(Stdby | (uint8_t)(Stop | ((uint8_t)optiontmp))); + } + + return status; +} + +/** + * @brief Set the BOR Level. + * @param Level specifies the Option Bytes BOR Reset Level. + * This parameter can be one of the following values: + * @arg OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V + * @arg OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V + * @arg OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V + * @arg OB_BOR_OFF: Supply voltage ranges from 1.62 to 2.1 V + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_BOR_LevelConfig(uint8_t Level) +{ + /* Check the parameters */ + assert_param(IS_OB_BOR_LEVEL(Level)); + + /* Set the BOR Level */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BOR_LEV); + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= Level; + + return HAL_OK; + +} + +/** + * @brief Return the FLASH User Option Byte value. + * @retval uint8_t FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1) + * and RST_STDBY(Bit2). + */ +static uint8_t FLASH_OB_GetUser(void) +{ + /* Return the User Option Byte */ + return ((uint8_t)(FLASH->OPTCR & 0xE0)); +} + +/** + * @brief Return the FLASH Write Protection Option Bytes value. + * @retval uint16_t FLASH Write Protection Option Bytes value + */ +static uint16_t FLASH_OB_GetWRP(void) +{ + /* Return the FLASH write protection Register value */ + return (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); +} + +/** + * @brief Returns the FLASH Read Protection level. + * @retval FLASH ReadOut Protection Status: + * This parameter can be one of the following values: + * @arg OB_RDP_LEVEL_0: No protection + * @arg OB_RDP_LEVEL_1: Read protection of the memory + * @arg OB_RDP_LEVEL_2: Full chip protection + */ +static uint8_t FLASH_OB_GetRDP(void) +{ + uint8_t readstatus = OB_RDP_LEVEL_0; + + if (*(__IO uint8_t *)(OPTCR_BYTE1_ADDRESS) == (uint8_t)OB_RDP_LEVEL_2) + { + readstatus = OB_RDP_LEVEL_2; + } + else if (*(__IO uint8_t *)(OPTCR_BYTE1_ADDRESS) == (uint8_t)OB_RDP_LEVEL_0) + { + readstatus = OB_RDP_LEVEL_0; + } + else + { + readstatus = OB_RDP_LEVEL_1; + } + + return readstatus; +} + +/** + * @brief Returns the FLASH BOR level. + * @retval uint8_t The FLASH BOR level: + * - OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V + * - OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V + * - OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V + * - OB_BOR_OFF : Supply voltage ranges from 1.62 to 2.1 V + */ +static uint8_t FLASH_OB_GetBOR(void) +{ + /* Return the FLASH BOR level */ + return (uint8_t)(*(__IO uint8_t *)(OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0C); +} + +/** + * @brief Flush the instruction and data caches + * @retval None + */ +void FLASH_FlushCaches(void) +{ + /* Flush instruction cache */ + if (READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) != RESET) + { + /* Disable instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_DISABLE(); + /* Reset instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_RESET(); + /* Enable instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); + } + + /* Flush data cache */ + if (READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != RESET) + { + /* Disable data cache */ + __HAL_FLASH_DATA_CACHE_DISABLE(); + /* Reset data cache */ + __HAL_FLASH_DATA_CACHE_RESET(); + /* Enable data cache */ + __HAL_FLASH_DATA_CACHE_ENABLE(); + } +} + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c new file mode 100644 index 00000000..e6ab3ac8 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c @@ -0,0 +1,172 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ramfunc.c + * @author MCD Application Team + * @brief FLASH RAMFUNC module driver. + * This file provides a FLASH firmware functions which should be + * executed from internal SRAM + * + Stop/Start the flash interface while System Run + * + Enable/Disable the flash sleep while System Run + @verbatim + ============================================================================== + ##### APIs executed from Internal RAM ##### + ============================================================================== + [..] + *** ARM Compiler *** + -------------------- + [..] RAM functions are defined using the toolchain options. + Functions that are be executed in RAM should reside in a separate + source module. Using the 'Options for File' dialog you can simply change + the 'Code / Const' area of a module to a memory space in physical RAM. + Available memory areas are declared in the 'Target' tab of the + Options for Target' dialog. + + *** ICCARM Compiler *** + ----------------------- + [..] RAM functions are defined using a specific toolchain keyword "__ramfunc". + + *** GNU Compiler *** + -------------------- + [..] RAM functions are defined using a specific toolchain attribute + "__attribute__((section(".RamFunc")))". + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup FLASH_RAMFUNC FLASH RAMFUNC + * @brief FLASH functions executed from RAM + * @{ + */ +#ifdef HAL_FLASH_MODULE_ENABLED +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup FLASH_RAMFUNC_Exported_Functions FLASH RAMFUNC Exported Functions + * @{ + */ + +/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group1 Peripheral features functions executed from internal RAM + * @brief Peripheral Extended features functions + * +@verbatim + + =============================================================================== + ##### ramfunc functions ##### + =============================================================================== + [..] + This subsection provides a set of functions that should be executed from RAM + transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Stop the flash interface while System Run + * @note This mode is only available for STM32F41xxx/STM32F446xx devices. + * @note This mode couldn't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StopFlashInterfaceClk(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Stop the flash interface while System Run */ + SET_BIT(PWR->CR, PWR_CR_FISSR); + + return HAL_OK; +} + +/** + * @brief Start the flash interface while System Run + * @note This mode is only available for STM32F411xx/STM32F446xx devices. + * @note This mode couldn't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StartFlashInterfaceClk(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Start the flash interface while System Run */ + CLEAR_BIT(PWR->CR, PWR_CR_FISSR); + + return HAL_OK; +} + +/** + * @brief Enable the flash sleep while System Run + * @note This mode is only available for STM32F41xxx/STM32F446xx devices. + * @note This mode could n't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableFlashSleepMode(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Enable the flash sleep while System Run */ + SET_BIT(PWR->CR, PWR_CR_FMSSR); + + return HAL_OK; +} + +/** + * @brief Disable the flash sleep while System Run + * @note This mode is only available for STM32F41xxx/STM32F446xx devices. + * @note This mode couldn't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableFlashSleepMode(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Disable the flash sleep while System Run */ + CLEAR_BIT(PWR->CR, PWR_CR_FMSSR); + + return HAL_OK; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +#endif /* HAL_FLASH_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c new file mode 100644 index 00000000..b3ce9bbc --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c @@ -0,0 +1,533 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_gpio.c + * @author MCD Application Team + * @brief GPIO HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the General Purpose Input/Output (GPIO) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### GPIO Peripheral features ##### + ============================================================================== + [..] + Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each + port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software + in several modes: + (+) Input mode + (+) Analog mode + (+) Output mode + (+) Alternate function mode + (+) External interrupt/event lines + + [..] + During and just after reset, the alternate functions and external interrupt + lines are not active and the I/O ports are configured in input floating mode. + + [..] + All GPIO pins have weak internal pull-up and pull-down resistors, which can be + activated or not. + + [..] + In Output or Alternate mode, each IO can be configured on open-drain or push-pull + type and the IO speed can be selected depending on the VDD value. + + [..] + All ports have external interrupt/event capability. To use external interrupt + lines, the port must be configured in input mode. All available GPIO pins are + connected to the 16 external interrupt/event lines from EXTI0 to EXTI15. + + [..] + The external interrupt/event controller consists of up to 23 edge detectors + (16 lines are connected to GPIO) for generating event/interrupt requests (each + input line can be independently configured to select the type (interrupt or event) + and the corresponding trigger event (rising or falling or both). Each line can + also be masked independently. + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE(). + + (#) Configure the GPIO pin(s) using HAL_GPIO_Init(). + (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure + (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef + structure. + (++) In case of Output or alternate function mode selection: the speed is + configured through "Speed" member from GPIO_InitTypeDef structure. + (++) In alternate mode is selection, the alternate function connected to the IO + is configured through "Alternate" member from GPIO_InitTypeDef structure. + (++) Analog mode is required when a pin is to be used as ADC channel + or DAC output. + (++) In case of external interrupt/event selection the "Mode" member from + GPIO_InitTypeDef structure select the type (interrupt or event) and + the corresponding trigger event (rising or falling or both). + + (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority + mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using + HAL_NVIC_EnableIRQ(). + + (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin(). + + (#) To set/reset the level of a pin configured in output mode use + HAL_GPIO_WritePin()/HAL_GPIO_TogglePin(). + + (#) To lock pin configuration until next reset use HAL_GPIO_LockPin(). + + + (#) During and just after reset, the alternate functions are not + active and the GPIO pins are configured in input floating mode (except JTAG + pins). + + (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose + (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has + priority over the GPIO function. + + (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as + general purpose PH0 and PH1, respectively, when the HSE oscillator is off. + The HSE has priority over the GPIO function. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIO GPIO + * @brief GPIO HAL module driver + * @{ + */ + +#ifdef HAL_GPIO_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ + +#define GPIO_NUMBER 16U +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize and de-initialize the GPIOs + to be ready for use. + +@endverbatim + * @{ + */ + + +/** + * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init. + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) +{ + uint32_t position; + uint32_t ioposition = 0x00U; + uint32_t iocurrent = 0x00U; + uint32_t temp = 0x00U; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); + assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); + + /* Configure the port pins */ + for(position = 0U; position < GPIO_NUMBER; position++) + { + /* Get the IO position */ + ioposition = 0x01U << position; + /* Get the current IO position */ + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + + if(iocurrent == ioposition) + { + /*--------------------- GPIO Mode Configuration ------------------------*/ + /* In case of Output or Alternate function mode selection */ + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \ + (GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + { + /* Check the Speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + /* Configure the IO Speed */ + temp = GPIOx->OSPEEDR; + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); + temp |= (GPIO_Init->Speed << (position * 2U)); + GPIOx->OSPEEDR = temp; + + /* Configure the IO Output Type */ + temp = GPIOx->OTYPER; + temp &= ~(GPIO_OTYPER_OT_0 << position) ; + temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); + GPIOx->OTYPER = temp; + } + + if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) + { + /* Check the parameters */ + assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); + + /* Activate the Pull-up or Pull down resistor for the current IO */ + temp = GPIOx->PUPDR; + temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); + temp |= ((GPIO_Init->Pull) << (position * 2U)); + GPIOx->PUPDR = temp; + } + + /* In case of Alternate function mode selection */ + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + { + /* Check the Alternate function parameter */ + assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); + /* Configure Alternate function mapped with the current IO */ + temp = GPIOx->AFR[position >> 3U]; + temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; + temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U)); + GPIOx->AFR[position >> 3U] = temp; + } + + /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ + temp = GPIOx->MODER; + temp &= ~(GPIO_MODER_MODER0 << (position * 2U)); + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U)); + GPIOx->MODER = temp; + + /*--------------------- EXTI Mode Configuration ------------------------*/ + /* Configure the External Interrupt or event for the current IO */ + if((GPIO_Init->Mode & EXTI_MODE) != 0x00U) + { + /* Enable SYSCFG Clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + temp = SYSCFG->EXTICR[position >> 2U]; + temp &= ~(0x0FU << (4U * (position & 0x03U))); + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))); + SYSCFG->EXTICR[position >> 2U] = temp; + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U) + { + temp |= iocurrent; + } + EXTI->RTSR = temp; + + temp = EXTI->FTSR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U) + { + temp |= iocurrent; + } + EXTI->FTSR = temp; + + temp = EXTI->EMR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & EXTI_EVT) != 0x00U) + { + temp |= iocurrent; + } + EXTI->EMR = temp; + + /* Clear EXTI line configuration */ + temp = EXTI->IMR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & EXTI_IT) != 0x00U) + { + temp |= iocurrent; + } + EXTI->IMR = temp; + } + } + } +} + +/** + * @brief De-initializes the GPIOx peripheral registers to their default reset values. + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Pin specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @retval None + */ +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) +{ + uint32_t position; + uint32_t ioposition = 0x00U; + uint32_t iocurrent = 0x00U; + uint32_t tmp = 0x00U; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + + /* Configure the port pins */ + for(position = 0U; position < GPIO_NUMBER; position++) + { + /* Get the IO position */ + ioposition = 0x01U << position; + /* Get the current IO position */ + iocurrent = (GPIO_Pin) & ioposition; + + if(iocurrent == ioposition) + { + /*------------------------- EXTI Mode Configuration --------------------*/ + tmp = SYSCFG->EXTICR[position >> 2U]; + tmp &= (0x0FU << (4U * (position & 0x03U))); + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U)))) + { + /* Clear EXTI line configuration */ + EXTI->IMR &= ~((uint32_t)iocurrent); + EXTI->EMR &= ~((uint32_t)iocurrent); + + /* Clear Rising Falling edge configuration */ + EXTI->FTSR &= ~((uint32_t)iocurrent); + EXTI->RTSR &= ~((uint32_t)iocurrent); + + /* Configure the External Interrupt or event for the current IO */ + tmp = 0x0FU << (4U * (position & 0x03U)); + SYSCFG->EXTICR[position >> 2U] &= ~tmp; + } + + /*------------------------- GPIO Mode Configuration --------------------*/ + /* Configure IO Direction in Input Floating Mode */ + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2U)); + + /* Configure the default Alternate Function in current IO */ + GPIOx->AFR[position >> 3U] &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; + + /* Deactivate the Pull-up and Pull-down resistor for the current IO */ + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); + + /* Configure the default value IO Output Type */ + GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ; + + /* Configure the default value for IO Speed */ + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); + } + } +} + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions + * @brief GPIO Read and Write + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Reads the specified input port pin. + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Pin specifies the port bit to read. + * This parameter can be GPIO_PIN_x where x can be (0..15). + * @retval The input port pin value. + */ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + GPIO_PinState bitstatus; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) + { + bitstatus = GPIO_PIN_SET; + } + else + { + bitstatus = GPIO_PIN_RESET; + } + return bitstatus; +} + +/** + * @brief Sets or clears the selected data port bit. + * + * @note This function uses GPIOx_BSRR register to allow atomic read/modify + * accesses. In this way, there is no risk of an IRQ occurring between + * the read and the modify access. + * + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Pin specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @param PinState specifies the value to be written to the selected bit. + * This parameter can be one of the GPIO_PinState enum values: + * @arg GPIO_PIN_RESET: to clear the port pin + * @arg GPIO_PIN_SET: to set the port pin + * @retval None + */ +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) +{ + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_PIN_ACTION(PinState)); + + if(PinState != GPIO_PIN_RESET) + { + GPIOx->BSRR = GPIO_Pin; + } + else + { + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; + } +} + +/** + * @brief Toggles the specified GPIO pins. + * @param GPIOx Where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Pin Specifies the pins to be toggled. + * @retval None + */ +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint32_t odr; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* get current Output Data Register value */ + odr = GPIOx->ODR; + + /* Set selected pins that were at low level, and reset ones that were high */ + GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin); +} + +/** + * @brief Locks GPIO Pins configuration registers. + * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, + * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. + * @note The configuration of the locked GPIO pins can no longer be modified + * until the next reset. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F4 family + * @param GPIO_Pin specifies the port bit to be locked. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15). + * @retval None + */ +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + __IO uint32_t tmp = GPIO_LCKR_LCKK; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Apply lock key write sequence */ + tmp |= GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ + GPIOx->LCKR = tmp; + /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ + GPIOx->LCKR = tmp; + /* Read LCKR register. This read is mandatory to complete key lock sequence */ + tmp = GPIOx->LCKR; + + /* Read again in order to confirm lock is active */ + if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET) + { + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief This function handles EXTI interrupt request. + * @param GPIO_Pin Specifies the pins connected EXTI line + * @retval None + */ +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) +{ + /* EXTI line interrupt detected */ + if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) + { + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + HAL_GPIO_EXTI_Callback(GPIO_Pin); + } +} + +/** + * @brief EXTI line detection callbacks. + * @param GPIO_Pin Specifies the pins connected EXTI line + * @retval None + */ +__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(GPIO_Pin); + /* NOTE: This function Should not be modified, when the callback is needed, + the HAL_GPIO_EXTI_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + + +/** + * @} + */ + +#endif /* HAL_GPIO_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c new file mode 100644 index 00000000..9ad44f63 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c @@ -0,0 +1,7567 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_i2c.c + * @author MCD Application Team + * @brief I2C HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Inter Integrated Circuit (I2C) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral State, Mode and Error functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The I2C HAL driver can be used as follows: + + (#) Declare a I2C_HandleTypeDef handle structure, for example: + I2C_HandleTypeDef hi2c; + + (#)Initialize the I2C low level resources by implementing the HAL_I2C_MspInit() API: + (##) Enable the I2Cx interface clock + (##) I2C pins configuration + (+++) Enable the clock for the I2C GPIOs + (+++) Configure I2C pins as alternate function open-drain + (##) NVIC configuration if you need to use interrupt process + (+++) Configure the I2Cx interrupt priority + (+++) Enable the NVIC I2C IRQ Channel + (##) DMA Configuration if you need to use DMA process + (+++) Declare a DMA_HandleTypeDef handle structure for the transmit or receive stream + (+++) Enable the DMAx interface clock using + (+++) Configure the DMA handle parameters + (+++) Configure the DMA Tx or Rx stream + (+++) Associate the initialized DMA handle to the hi2c DMA Tx or Rx handle + (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on + the DMA Tx or Rx stream + + (#) Configure the Communication Speed, Duty cycle, Addressing mode, Own Address1, + Dual Addressing mode, Own Address2, General call and Nostretch mode in the hi2c Init structure. + + (#) Initialize the I2C registers by calling the HAL_I2C_Init(), configures also the low level Hardware + (GPIO, CLOCK, NVIC...etc) by calling the customized HAL_I2C_MspInit() API. + + (#) To check if target device is ready for communication, use the function HAL_I2C_IsDeviceReady() + + (#) For I2C IO and IO MEM operations, three operation modes are available within this driver : + + *** Polling mode IO operation *** + ================================= + [..] + (+) Transmit in master mode an amount of data in blocking mode using HAL_I2C_Master_Transmit() + (+) Receive in master mode an amount of data in blocking mode using HAL_I2C_Master_Receive() + (+) Transmit in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Transmit() + (+) Receive in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Receive() + + *** Polling mode IO MEM operation *** + ===================================== + [..] + (+) Write an amount of data in blocking mode to a specific memory address using HAL_I2C_Mem_Write() + (+) Read an amount of data in blocking mode from a specific memory address using HAL_I2C_Mem_Read() + + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Transmit in master mode an amount of data in non-blocking mode using HAL_I2C_Master_Transmit_IT() + (+) At transmission end of transfer, HAL_I2C_MasterTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (+) Receive in master mode an amount of data in non-blocking mode using HAL_I2C_Master_Receive_IT() + (+) At reception end of transfer, HAL_I2C_MasterRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (+) Transmit in slave mode an amount of data in non-blocking mode using HAL_I2C_Slave_Transmit_IT() + (+) At transmission end of transfer, HAL_I2C_SlaveTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (+) Receive in slave mode an amount of data in non-blocking mode using HAL_I2C_Slave_Receive_IT() + (+) At reception end of transfer, HAL_I2C_SlaveRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_I2C_ErrorCallback() + (+) Abort a master or memory I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_AbortCpltCallback() + + *** Interrupt mode or DMA mode IO sequential operation *** + ========================================================== + [..] + (@) These interfaces allow to manage a sequential transfer with a repeated start condition + when a direction change during transfer + [..] + (+) A specific option field manage the different steps of a sequential transfer + (+) Option field values are defined through I2C_XferOptions_definition and are listed below: + (++) I2C_FIRST_AND_LAST_FRAME: No sequential usage, functional is same as associated interfaces in no sequential mode + (++) I2C_FIRST_FRAME: Sequential usage, this option allow to manage a sequence with start condition, address + and data to transfer without a final stop condition + (++) I2C_FIRST_AND_NEXT_FRAME: Sequential usage (Master only), this option allow to manage a sequence with start condition, address + and data to transfer without a final stop condition, an then permit a call the same master sequential interface + several times (like HAL_I2C_Master_Seq_Transmit_IT() then HAL_I2C_Master_Seq_Transmit_IT() + or HAL_I2C_Master_Seq_Transmit_DMA() then HAL_I2C_Master_Seq_Transmit_DMA()) + (++) I2C_NEXT_FRAME: Sequential usage, this option allow to manage a sequence with a restart condition, address + and with new data to transfer if the direction change or manage only the new data to transfer + if no direction change and without a final stop condition in both cases + (++) I2C_LAST_FRAME: Sequential usage, this option allow to manage a sequance with a restart condition, address + and with new data to transfer if the direction change or manage only the new data to transfer + if no direction change and with a final stop condition in both cases + (++) I2C_LAST_FRAME_NO_STOP: Sequential usage (Master only), this option allow to manage a restart condition after several call of the same master sequential + interface several times (link with option I2C_FIRST_AND_NEXT_FRAME). + Usage can, transfer several bytes one by one using HAL_I2C_Master_Seq_Transmit_IT(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME) + or HAL_I2C_Master_Seq_Receive_IT(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME) + or HAL_I2C_Master_Seq_Transmit_DMA(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME) + or HAL_I2C_Master_Seq_Receive_DMA(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME). + Then usage of this option I2C_LAST_FRAME_NO_STOP at the last Transmit or Receive sequence permit to call the opposite interface Receive or Transmit + without stopping the communication and so generate a restart condition. + (++) I2C_OTHER_FRAME: Sequential usage (Master only), this option allow to manage a restart condition after each call of the same master sequential + interface. + Usage can, transfer several bytes one by one with a restart with slave address between each bytes using HAL_I2C_Master_Seq_Transmit_IT(option I2C_FIRST_FRAME then I2C_OTHER_FRAME) + or HAL_I2C_Master_Seq_Receive_IT(option I2C_FIRST_FRAME then I2C_OTHER_FRAME) + or HAL_I2C_Master_Seq_Transmit_DMA(option I2C_FIRST_FRAME then I2C_OTHER_FRAME) + or HAL_I2C_Master_Seq_Receive_DMA(option I2C_FIRST_FRAME then I2C_OTHER_FRAME). + Then usage of this option I2C_OTHER_AND_LAST_FRAME at the last frame to help automatic generation of STOP condition. + + (+) Different sequential I2C interfaces are listed below: + (++) Sequential transmit in master I2C mode an amount of data in non-blocking mode using HAL_I2C_Master_Seq_Transmit_IT() + or using HAL_I2C_Master_Seq_Transmit_DMA() + (+++) At transmission end of current frame transfer, HAL_I2C_MasterTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (++) Sequential receive in master I2C mode an amount of data in non-blocking mode using HAL_I2C_Master_Seq_Receive_IT() + or using HAL_I2C_Master_Seq_Receive_DMA() + (+++) At reception end of current frame transfer, HAL_I2C_MasterRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (++) Abort a master or memory IT or DMA I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+++) End of abort process, HAL_I2C_AbortCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (++) Enable/disable the Address listen mode in slave I2C mode using HAL_I2C_EnableListen_IT() HAL_I2C_DisableListen_IT() + (+++) When address slave I2C match, HAL_I2C_AddrCallback() is executed and user can + add his own code to check the Address Match Code and the transmission direction request by master (Write/Read). + (+++) At Listen mode end HAL_I2C_ListenCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_ListenCpltCallback() + (++) Sequential transmit in slave I2C mode an amount of data in non-blocking mode using HAL_I2C_Slave_Seq_Transmit_IT() + or using HAL_I2C_Slave_Seq_Transmit_DMA() + (+++) At transmission end of current frame transfer, HAL_I2C_SlaveTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (++) Sequential receive in slave I2C mode an amount of data in non-blocking mode using HAL_I2C_Slave_Seq_Receive_IT() + or using HAL_I2C_Slave_Seq_Receive_DMA() + (+++) At reception end of current frame transfer, HAL_I2C_SlaveRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (++) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_I2C_ErrorCallback() + + *** Interrupt mode IO MEM operation *** + ======================================= + [..] + (+) Write an amount of data in non-blocking mode with Interrupt to a specific memory address using + HAL_I2C_Mem_Write_IT() + (+) At Memory end of write transfer, HAL_I2C_MemTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MemTxCpltCallback() + (+) Read an amount of data in non-blocking mode with Interrupt from a specific memory address using + HAL_I2C_Mem_Read_IT() + (+) At Memory end of read transfer, HAL_I2C_MemRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MemRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_I2C_ErrorCallback() + + *** DMA mode IO operation *** + ============================== + [..] + (+) Transmit in master mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Master_Transmit_DMA() + (+) At transmission end of transfer, HAL_I2C_MasterTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (+) Receive in master mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Master_Receive_DMA() + (+) At reception end of transfer, HAL_I2C_MasterRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (+) Transmit in slave mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Slave_Transmit_DMA() + (+) At transmission end of transfer, HAL_I2C_SlaveTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (+) Receive in slave mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Slave_Receive_DMA() + (+) At reception end of transfer, HAL_I2C_SlaveRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_I2C_ErrorCallback() + (+) Abort a master or memory I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_AbortCpltCallback() + + *** DMA mode IO MEM operation *** + ================================= + [..] + (+) Write an amount of data in non-blocking mode with DMA to a specific memory address using + HAL_I2C_Mem_Write_DMA() + (+) At Memory end of write transfer, HAL_I2C_MemTxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MemTxCpltCallback() + (+) Read an amount of data in non-blocking mode with DMA from a specific memory address using + HAL_I2C_Mem_Read_DMA() + (+) At Memory end of read transfer, HAL_I2C_MemRxCpltCallback() is executed and user can + add his own code by customization of function pointer HAL_I2C_MemRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_I2C_ErrorCallback() + + + *** I2C HAL driver macros list *** + ================================== + [..] + Below the list of most used macros in I2C HAL driver. + + (+) __HAL_I2C_ENABLE: Enable the I2C peripheral + (+) __HAL_I2C_DISABLE: Disable the I2C peripheral + (+) __HAL_I2C_GET_FLAG: Checks whether the specified I2C flag is set or not + (+) __HAL_I2C_CLEAR_FLAG: Clear the specified I2C pending flag + (+) __HAL_I2C_ENABLE_IT: Enable the specified I2C interrupt + (+) __HAL_I2C_DISABLE_IT: Disable the specified I2C interrupt + + *** Callback registration *** + ============================================= + [..] + The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + Use Functions HAL_I2C_RegisterCallback() or HAL_I2C_RegisterAddrCallback() + to register an interrupt callback. + [..] + Function HAL_I2C_RegisterCallback() allows to register following callbacks: + (+) MasterTxCpltCallback : callback for Master transmission end of transfer. + (+) MasterRxCpltCallback : callback for Master reception end of transfer. + (+) SlaveTxCpltCallback : callback for Slave transmission end of transfer. + (+) SlaveRxCpltCallback : callback for Slave reception end of transfer. + (+) ListenCpltCallback : callback for end of listen mode. + (+) MemTxCpltCallback : callback for Memory transmission end of transfer. + (+) MemRxCpltCallback : callback for Memory reception end of transfer. + (+) ErrorCallback : callback for error detection. + (+) AbortCpltCallback : callback for abort completion process. + (+) MspInitCallback : callback for Msp Init. + (+) MspDeInitCallback : callback for Msp DeInit. + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + [..] + For specific callback AddrCallback use dedicated register callbacks : HAL_I2C_RegisterAddrCallback(). + [..] + Use function HAL_I2C_UnRegisterCallback to reset a callback to the default + weak function. + HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (+) MasterTxCpltCallback : callback for Master transmission end of transfer. + (+) MasterRxCpltCallback : callback for Master reception end of transfer. + (+) SlaveTxCpltCallback : callback for Slave transmission end of transfer. + (+) SlaveRxCpltCallback : callback for Slave reception end of transfer. + (+) ListenCpltCallback : callback for end of listen mode. + (+) MemTxCpltCallback : callback for Memory transmission end of transfer. + (+) MemRxCpltCallback : callback for Memory reception end of transfer. + (+) ErrorCallback : callback for error detection. + (+) AbortCpltCallback : callback for abort completion process. + (+) MspInitCallback : callback for Msp Init. + (+) MspDeInitCallback : callback for Msp DeInit. + [..] + For callback AddrCallback use dedicated register callbacks : HAL_I2C_UnRegisterAddrCallback(). + [..] + By default, after the HAL_I2C_Init() and when the state is HAL_I2C_STATE_RESET + all callbacks are set to the corresponding weak functions: + examples HAL_I2C_MasterTxCpltCallback(), HAL_I2C_MasterRxCpltCallback(). + Exception done for MspInit and MspDeInit functions that are + reset to the legacy weak functions in the HAL_I2C_Init()/ HAL_I2C_DeInit() only when + these callbacks are null (not registered beforehand). + If MspInit or MspDeInit are not null, the HAL_I2C_Init()/ HAL_I2C_DeInit() + keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state. + [..] + Callbacks can be registered/unregistered in HAL_I2C_STATE_READY state only. + Exception done MspInit/MspDeInit functions that can be registered/unregistered + in HAL_I2C_STATE_READY or HAL_I2C_STATE_RESET state, + thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. + Then, the user first registers the MspInit/MspDeInit user callbacks + using HAL_I2C_RegisterCallback() before calling HAL_I2C_DeInit() + or HAL_I2C_Init() function. + [..] + When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available and all callbacks + are set to the corresponding weak functions. + + + + [..] + (@) You can refer to the I2C HAL driver header file for more useful macros + + @endverbatim + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup I2C I2C + * @brief I2C HAL module driver + * @{ + */ + +#ifdef HAL_I2C_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup I2C_Private_Define I2C Private Define + * @{ + */ +#define I2C_TIMEOUT_FLAG 35U /*!< Timeout 35 ms */ +#define I2C_TIMEOUT_BUSY_FLAG 25U /*!< Timeout 25 ms */ +#define I2C_TIMEOUT_STOP_FLAG 5U /*!< Timeout 5 ms */ +#define I2C_NO_OPTION_FRAME 0xFFFF0000U /*!< XferOptions default value */ + +/* Private define for @ref PreviousState usage */ +#define I2C_STATE_MSK ((uint32_t)((uint32_t)((uint32_t)HAL_I2C_STATE_BUSY_TX | (uint32_t)HAL_I2C_STATE_BUSY_RX) & (uint32_t)(~((uint32_t)HAL_I2C_STATE_READY)))) /*!< Mask State define, keep only RX and TX bits */ +#define I2C_STATE_NONE ((uint32_t)(HAL_I2C_MODE_NONE)) /*!< Default Value */ +#define I2C_STATE_MASTER_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_MASTER)) /*!< Master Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MASTER_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_MASTER)) /*!< Master Busy RX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_SLAVE_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_SLAVE)) /*!< Slave Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_SLAVE_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_SLAVE)) /*!< Slave Busy RX, combinaison of State LSB and Mode enum */ + +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @addtogroup I2C_Private_Macros + * @{ + */ +/* Macro to get remaining data to transfer on DMA side */ +#define I2C_GET_DMA_REMAIN_DATA(__HANDLE__) __HAL_DMA_GET_COUNTER(__HANDLE__) +/** + * @} + */ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +/** @defgroup I2C_Private_Functions I2C Private Functions + * @{ + */ +/* Private functions to handle DMA transfer */ +static void I2C_DMAXferCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMAError(DMA_HandleTypeDef *hdma); +static void I2C_DMAAbort(DMA_HandleTypeDef *hdma); + +static void I2C_ITError(I2C_HandleTypeDef *hi2c); + +static HAL_StatusTypeDef I2C_MasterRequestWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_MasterRequestRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart); + +/* Private functions to handle flags during polling transfer */ +static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnMasterAddressFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnTXEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnBTFFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnSTOPRequestThroughIT(I2C_HandleTypeDef *hi2c); +static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c); + +/* Private functions for I2C transfer IRQ handler */ +static void I2C_MasterTransmit_TXE(I2C_HandleTypeDef *hi2c); +static void I2C_MasterTransmit_BTF(I2C_HandleTypeDef *hi2c); +static void I2C_MasterReceive_RXNE(I2C_HandleTypeDef *hi2c); +static void I2C_MasterReceive_BTF(I2C_HandleTypeDef *hi2c); +static void I2C_Master_SB(I2C_HandleTypeDef *hi2c); +static void I2C_Master_ADD10(I2C_HandleTypeDef *hi2c); +static void I2C_Master_ADDR(I2C_HandleTypeDef *hi2c); + +static void I2C_SlaveTransmit_TXE(I2C_HandleTypeDef *hi2c); +static void I2C_SlaveTransmit_BTF(I2C_HandleTypeDef *hi2c); +static void I2C_SlaveReceive_RXNE(I2C_HandleTypeDef *hi2c); +static void I2C_SlaveReceive_BTF(I2C_HandleTypeDef *hi2c); +static void I2C_Slave_ADDR(I2C_HandleTypeDef *hi2c, uint32_t IT2Flags); +static void I2C_Slave_STOPF(I2C_HandleTypeDef *hi2c); +static void I2C_Slave_AF(I2C_HandleTypeDef *hi2c); + +static void I2C_MemoryTransmit_TXE_BTF(I2C_HandleTypeDef *hi2c); + +/* Private function to Convert Specific options */ +static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c); + +/* Private function to flush DR register */ +static void I2C_Flush_DR(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Functions I2C Exported Functions + * @{ + */ + +/** @defgroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This subsection provides a set of functions allowing to initialize and + deinitialize the I2Cx peripheral: + + (+) User must Implement HAL_I2C_MspInit() function in which he configures + all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC). + + (+) Call the function HAL_I2C_Init() to configure the selected device with + the selected configuration: + (++) Communication Speed + (++) Duty cycle + (++) Addressing mode + (++) Own Address 1 + (++) Dual Addressing mode + (++) Own Address 2 + (++) General call mode + (++) Nostretch mode + + (+) Call the function HAL_I2C_DeInit() to restore the default configuration + of the selected I2Cx peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the I2C according to the specified parameters + * in the I2C_InitTypeDef and initialize the associated handle. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) +{ + uint32_t freqrange; + uint32_t pclk1; + + /* Check the I2C handle allocation */ + if (hi2c == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_CLOCK_SPEED(hi2c->Init.ClockSpeed)); + assert_param(IS_I2C_DUTY_CYCLE(hi2c->Init.DutyCycle)); + assert_param(IS_I2C_OWN_ADDRESS1(hi2c->Init.OwnAddress1)); + assert_param(IS_I2C_ADDRESSING_MODE(hi2c->Init.AddressingMode)); + assert_param(IS_I2C_DUAL_ADDRESS(hi2c->Init.DualAddressMode)); + assert_param(IS_I2C_OWN_ADDRESS2(hi2c->Init.OwnAddress2)); + assert_param(IS_I2C_GENERAL_CALL(hi2c->Init.GeneralCallMode)); + assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode)); + + if (hi2c->State == HAL_I2C_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hi2c->Lock = HAL_UNLOCKED; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + /* Init the I2C Callback settings */ + hi2c->MasterTxCpltCallback = HAL_I2C_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback */ + hi2c->MasterRxCpltCallback = HAL_I2C_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback */ + hi2c->SlaveTxCpltCallback = HAL_I2C_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback */ + hi2c->SlaveRxCpltCallback = HAL_I2C_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback */ + hi2c->ListenCpltCallback = HAL_I2C_ListenCpltCallback; /* Legacy weak ListenCpltCallback */ + hi2c->MemTxCpltCallback = HAL_I2C_MemTxCpltCallback; /* Legacy weak MemTxCpltCallback */ + hi2c->MemRxCpltCallback = HAL_I2C_MemRxCpltCallback; /* Legacy weak MemRxCpltCallback */ + hi2c->ErrorCallback = HAL_I2C_ErrorCallback; /* Legacy weak ErrorCallback */ + hi2c->AbortCpltCallback = HAL_I2C_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + hi2c->AddrCallback = HAL_I2C_AddrCallback; /* Legacy weak AddrCallback */ + + if (hi2c->MspInitCallback == NULL) + { + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + } + + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + hi2c->MspInitCallback(hi2c); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + HAL_I2C_MspInit(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /*Reset I2C*/ + hi2c->Instance->CR1 |= I2C_CR1_SWRST; + hi2c->Instance->CR1 &= ~I2C_CR1_SWRST; + + /* Get PCLK1 frequency */ + pclk1 = HAL_RCC_GetPCLK1Freq(); + + /* Check the minimum allowed PCLK1 frequency */ + if (I2C_MIN_PCLK_FREQ(pclk1, hi2c->Init.ClockSpeed) == 1U) + { + return HAL_ERROR; + } + + /* Calculate frequency range */ + freqrange = I2C_FREQRANGE(pclk1); + + /*---------------------------- I2Cx CR2 Configuration ----------------------*/ + /* Configure I2Cx: Frequency range */ + MODIFY_REG(hi2c->Instance->CR2, I2C_CR2_FREQ, freqrange); + + /*---------------------------- I2Cx TRISE Configuration --------------------*/ + /* Configure I2Cx: Rise Time */ + MODIFY_REG(hi2c->Instance->TRISE, I2C_TRISE_TRISE, I2C_RISE_TIME(freqrange, hi2c->Init.ClockSpeed)); + + /*---------------------------- I2Cx CCR Configuration ----------------------*/ + /* Configure I2Cx: Speed */ + MODIFY_REG(hi2c->Instance->CCR, (I2C_CCR_FS | I2C_CCR_DUTY | I2C_CCR_CCR), I2C_SPEED(pclk1, hi2c->Init.ClockSpeed, hi2c->Init.DutyCycle)); + + /*---------------------------- I2Cx CR1 Configuration ----------------------*/ + /* Configure I2Cx: Generalcall and NoStretch mode */ + MODIFY_REG(hi2c->Instance->CR1, (I2C_CR1_ENGC | I2C_CR1_NOSTRETCH), (hi2c->Init.GeneralCallMode | hi2c->Init.NoStretchMode)); + + /*---------------------------- I2Cx OAR1 Configuration ---------------------*/ + /* Configure I2Cx: Own Address1 and addressing mode */ + MODIFY_REG(hi2c->Instance->OAR1, (I2C_OAR1_ADDMODE | I2C_OAR1_ADD8_9 | I2C_OAR1_ADD1_7 | I2C_OAR1_ADD0), (hi2c->Init.AddressingMode | hi2c->Init.OwnAddress1)); + + /*---------------------------- I2Cx OAR2 Configuration ---------------------*/ + /* Configure I2Cx: Dual mode and Own Address2 */ + MODIFY_REG(hi2c->Instance->OAR2, (I2C_OAR2_ENDUAL | I2C_OAR2_ADD2), (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2)); + + /* Enable the selected I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->Mode = HAL_I2C_MODE_NONE; + + return HAL_OK; +} + +/** + * @brief DeInitialize the I2C peripheral. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c) +{ + /* Check the I2C handle allocation */ + if (hi2c == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the I2C Peripheral Clock */ + __HAL_I2C_DISABLE(hi2c); + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + if (hi2c->MspDeInitCallback == NULL) + { + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + } + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + hi2c->MspDeInitCallback(hi2c); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_I2C_MspDeInit(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_RESET; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Initialize the I2C MSP. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitialize the I2C MSP. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User I2C Callback + * To be used instead of the weak predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_I2C_MASTER_TX_COMPLETE_CB_ID Master Tx Transfer completed callback ID + * @arg @ref HAL_I2C_MASTER_RX_COMPLETE_CB_ID Master Rx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_TX_COMPLETE_CB_ID Slave Tx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_RX_COMPLETE_CB_ID Slave Rx Transfer completed callback ID + * @arg @ref HAL_I2C_LISTEN_COMPLETE_CB_ID Listen Complete callback ID + * @arg @ref HAL_I2C_MEM_TX_COMPLETE_CB_ID Memory Tx Transfer callback ID + * @arg @ref HAL_I2C_MEM_RX_COMPLETE_CB_ID Memory Rx Transfer completed callback ID + * @arg @ref HAL_I2C_ERROR_CB_ID Error callback ID + * @arg @ref HAL_I2C_ABORT_CB_ID Abort callback ID + * @arg @ref HAL_I2C_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_I2C_MSPDEINIT_CB_ID MspDeInit callback ID + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, pI2C_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MASTER_TX_COMPLETE_CB_ID : + hi2c->MasterTxCpltCallback = pCallback; + break; + + case HAL_I2C_MASTER_RX_COMPLETE_CB_ID : + hi2c->MasterRxCpltCallback = pCallback; + break; + + case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID : + hi2c->SlaveTxCpltCallback = pCallback; + break; + + case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID : + hi2c->SlaveRxCpltCallback = pCallback; + break; + + case HAL_I2C_LISTEN_COMPLETE_CB_ID : + hi2c->ListenCpltCallback = pCallback; + break; + + case HAL_I2C_MEM_TX_COMPLETE_CB_ID : + hi2c->MemTxCpltCallback = pCallback; + break; + + case HAL_I2C_MEM_RX_COMPLETE_CB_ID : + hi2c->MemRxCpltCallback = pCallback; + break; + + case HAL_I2C_ERROR_CB_ID : + hi2c->ErrorCallback = pCallback; + break; + + case HAL_I2C_ABORT_CB_ID : + hi2c->AbortCpltCallback = pCallback; + break; + + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = pCallback; + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_I2C_STATE_RESET == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = pCallback; + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +/** + * @brief Unregister an I2C Callback + * I2C callback is redirected to the weak predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * This parameter can be one of the following values: + * @arg @ref HAL_I2C_MASTER_TX_COMPLETE_CB_ID Master Tx Transfer completed callback ID + * @arg @ref HAL_I2C_MASTER_RX_COMPLETE_CB_ID Master Rx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_TX_COMPLETE_CB_ID Slave Tx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_RX_COMPLETE_CB_ID Slave Rx Transfer completed callback ID + * @arg @ref HAL_I2C_LISTEN_COMPLETE_CB_ID Listen Complete callback ID + * @arg @ref HAL_I2C_MEM_TX_COMPLETE_CB_ID Memory Tx Transfer callback ID + * @arg @ref HAL_I2C_MEM_RX_COMPLETE_CB_ID Memory Rx Transfer completed callback ID + * @arg @ref HAL_I2C_ERROR_CB_ID Error callback ID + * @arg @ref HAL_I2C_ABORT_CB_ID Abort callback ID + * @arg @ref HAL_I2C_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_I2C_MSPDEINIT_CB_ID MspDeInit callback ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MASTER_TX_COMPLETE_CB_ID : + hi2c->MasterTxCpltCallback = HAL_I2C_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback */ + break; + + case HAL_I2C_MASTER_RX_COMPLETE_CB_ID : + hi2c->MasterRxCpltCallback = HAL_I2C_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback */ + break; + + case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID : + hi2c->SlaveTxCpltCallback = HAL_I2C_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback */ + break; + + case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID : + hi2c->SlaveRxCpltCallback = HAL_I2C_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback */ + break; + + case HAL_I2C_LISTEN_COMPLETE_CB_ID : + hi2c->ListenCpltCallback = HAL_I2C_ListenCpltCallback; /* Legacy weak ListenCpltCallback */ + break; + + case HAL_I2C_MEM_TX_COMPLETE_CB_ID : + hi2c->MemTxCpltCallback = HAL_I2C_MemTxCpltCallback; /* Legacy weak MemTxCpltCallback */ + break; + + case HAL_I2C_MEM_RX_COMPLETE_CB_ID : + hi2c->MemRxCpltCallback = HAL_I2C_MemRxCpltCallback; /* Legacy weak MemRxCpltCallback */ + break; + + case HAL_I2C_ERROR_CB_ID : + hi2c->ErrorCallback = HAL_I2C_ErrorCallback; /* Legacy weak ErrorCallback */ + break; + + case HAL_I2C_ABORT_CB_ID : + hi2c->AbortCpltCallback = HAL_I2C_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + break; + + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_I2C_STATE_RESET == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +/** + * @brief Register the Slave Address Match I2C Callback + * To be used instead of the weak HAL_I2C_AddrCallback() predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pCallback pointer to the Address Match Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + hi2c->AddrCallback = pCallback; + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +/** + * @brief UnRegister the Slave Address Match I2C Callback + * Info Ready I2C Callback is redirected to the weak HAL_I2C_AddrCallback() predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hi2c); + + if (HAL_I2C_STATE_READY == hi2c->State) + { + hi2c->AddrCallback = HAL_I2C_AddrCallback; /* Legacy weak AddrCallback */ + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + return status; +} + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + +/** + * @brief I2C data register flush process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_Flush_DR(I2C_HandleTypeDef *hi2c) +{ + /* Write a dummy data in DR to clear TXE flag */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) != RESET) + { + hi2c->Instance->DR = 0x00U; + } +} + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions_Group2 Input and Output operation functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the I2C data + transfers. + + (#) There are two modes of transfer: + (++) Blocking mode : The communication is performed in the polling mode. + The status of all data processing is returned by the same function + after finishing transfer. + (++) No-Blocking mode : The communication is performed using Interrupts + or DMA. These functions return the status of the transfer startup. + The end of the data processing will be indicated through the + dedicated I2C IRQ when using Interrupt mode or the DMA IRQ when + using DMA mode. + + (#) Blocking mode functions are : + (++) HAL_I2C_Master_Transmit() + (++) HAL_I2C_Master_Receive() + (++) HAL_I2C_Slave_Transmit() + (++) HAL_I2C_Slave_Receive() + (++) HAL_I2C_Mem_Write() + (++) HAL_I2C_Mem_Read() + (++) HAL_I2C_IsDeviceReady() + + (#) No-Blocking mode functions with Interrupt are : + (++) HAL_I2C_Master_Transmit_IT() + (++) HAL_I2C_Master_Receive_IT() + (++) HAL_I2C_Slave_Transmit_IT() + (++) HAL_I2C_Slave_Receive_IT() + (++) HAL_I2C_Mem_Write_IT() + (++) HAL_I2C_Mem_Read_IT() + (++) HAL_I2C_Master_Seq_Transmit_IT() + (++) HAL_I2C_Master_Seq_Receive_IT() + (++) HAL_I2C_Slave_Seq_Transmit_IT() + (++) HAL_I2C_Slave_Seq_Receive_IT() + (++) HAL_I2C_EnableListen_IT() + (++) HAL_I2C_DisableListen_IT() + (++) HAL_I2C_Master_Abort_IT() + + (#) No-Blocking mode functions with DMA are : + (++) HAL_I2C_Master_Transmit_DMA() + (++) HAL_I2C_Master_Receive_DMA() + (++) HAL_I2C_Slave_Transmit_DMA() + (++) HAL_I2C_Slave_Receive_DMA() + (++) HAL_I2C_Mem_Write_DMA() + (++) HAL_I2C_Mem_Read_DMA() + (++) HAL_I2C_Master_Seq_Transmit_DMA() + (++) HAL_I2C_Master_Seq_Receive_DMA() + (++) HAL_I2C_Slave_Seq_Transmit_DMA() + (++) HAL_I2C_Slave_Seq_Receive_DMA() + + (#) A set of Transfer Complete Callbacks are provided in non Blocking mode: + (++) HAL_I2C_MasterTxCpltCallback() + (++) HAL_I2C_MasterRxCpltCallback() + (++) HAL_I2C_SlaveTxCpltCallback() + (++) HAL_I2C_SlaveRxCpltCallback() + (++) HAL_I2C_MemTxCpltCallback() + (++) HAL_I2C_MemRxCpltCallback() + (++) HAL_I2C_AddrCallback() + (++) HAL_I2C_ListenCpltCallback() + (++) HAL_I2C_ErrorCallback() + (++) HAL_I2C_AbortCpltCallback() + +@endverbatim + * @{ + */ + +/** + * @brief Transmits in master mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Send Slave Address */ + if (I2C_MasterRequestWrite(hi2c, DevAddress, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + while (hi2c->XferSize > 0U) + { + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + hi2c->XferSize--; + + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + hi2c->XferSize--; + } + + /* Wait until BTF flag is set */ + if (I2C_WaitOnBTFFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + } + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives in master mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Send Slave Address */ + if (I2C_MasterRequestRead(hi2c, DevAddress, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferSize == 0U) + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + else if (hi2c->XferSize == 1U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + else if (hi2c->XferSize == 2U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Enable Pos */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + + while (hi2c->XferSize > 0U) + { + if (hi2c->XferSize <= 3U) + { + /* One byte */ + if (hi2c->XferSize == 1U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + /* Two bytes */ + else if (hi2c->XferSize == 2U) + { + /* Wait until BTF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + /* 3 Last bytes */ + else + { + /* Wait until BTF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + /* Wait until BTF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + } + else + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) + { + + if (hi2c->XferSize == 3U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + } + } + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmits in slave mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* If 10bit addressing mode is selected */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + + while (hi2c->XferSize > 0U) + { + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + return HAL_ERROR; + } + + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + hi2c->XferSize--; + + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + hi2c->XferSize--; + } + } + + /* Wait until AF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_AF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear AF flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Disable Address Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in blocking mode + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == (uint16_t)0)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + while (hi2c->XferSize > 0U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + return HAL_ERROR; + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + } + + /* Wait until STOP flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + return HAL_ERROR; + } + + /* Clear STOP flag */ + __HAL_I2C_CLEAR_STOPFLAG(hi2c); + + /* Disable Address Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in master mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in master mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in slave mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in master mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferM1CpltCallback = NULL; + hi2c->hdmatx->XferM1HalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in master mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferM1CpltCallback = NULL; + hi2c->hdmarx->XferM1HalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in slave mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferM1CpltCallback = NULL; + hi2c->hdmatx->XferM1HalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Enable DMA Request */ + hi2c->Instance->CR2 |= I2C_CR2_DMAEN; + + return HAL_OK; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferM1CpltCallback = NULL; + hi2c->hdmarx->XferM1HalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + return HAL_OK; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Write an amount of data in blocking mode to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + while (hi2c->XferSize > 0U) + { + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + } + + /* Wait until BTF flag is set */ + if (I2C_WaitOnBTFFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Read an amount of data in blocking mode from a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferSize == 0U) + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + else if (hi2c->XferSize == 1U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + else if (hi2c->XferSize == 2U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Enable Pos */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + else + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + + while (hi2c->XferSize > 0U) + { + if (hi2c->XferSize <= 3U) + { + /* One byte */ + if (hi2c->XferSize == 1U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + /* Two bytes */ + else if (hi2c->XferSize == 2U) + { + /* Wait until BTF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + /* 3 Last bytes */ + else + { + /* Wait until BTF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + /* Wait until BTF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + } + else + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) + { + if (hi2c->XferSize == 3U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferSize--; + hi2c->XferCount--; + } + } + } + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Write an amount of data in non-blocking mode with Interrupt to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + hi2c->Memaddress = MemAddress; + hi2c->MemaddSize = MemAddSize; + hi2c->EventCount = 0U; + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Read an amount of data in non-blocking mode with Interrupt from a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + hi2c->Memaddress = MemAddress; + hi2c->MemaddSize = MemAddSize; + hi2c->EventCount = 0U; + + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + if (hi2c->XferSize > 0U) + { + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + } + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Write an amount of data in non-blocking mode with DMA to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + __IO uint32_t count = 0U; + HAL_StatusTypeDef dmaxferstatus; + + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + hi2c->Memaddress = MemAddress; + hi2c->MemaddSize = MemAddSize; + hi2c->EventCount = 0U; + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferM1CpltCallback = NULL; + hi2c->hdmatx->XferM1HalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + { + /* Abort the ongoing DMA */ + dmaxferstatus = HAL_DMA_Abort_IT(hi2c->hdmatx); + + /* Prevent unused argument(s) compilation and MISRA warning */ + UNUSED(dmaxferstatus); + + /* Set the unused I2C DMA transfer complete callback to NULL */ + hi2c->hdmatx->XferCpltCallback = NULL; + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + hi2c->XferSize = 0U; + hi2c->XferCount = 0U; + + /* Disable I2C peripheral to prevent dummy data in buffer */ + __HAL_I2C_DISABLE(hi2c); + + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_ERR); + + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + return HAL_OK; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_SIZE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Reads an amount of data in non-blocking mode with DMA from a specific memory address. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be read + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + /* Init tickstart for timeout management*/ + uint32_t tickstart = HAL_GetTick(); + __IO uint32_t count = 0U; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->Devaddress = DevAddress; + hi2c->Memaddress = MemAddress; + hi2c->MemaddSize = MemAddSize; + hi2c->EventCount = 0U; + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferM1CpltCallback = NULL; + hi2c->hdmarx->XferM1HalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + { + /* Abort the ongoing DMA */ + dmaxferstatus = HAL_DMA_Abort_IT(hi2c->hdmarx); + + /* Prevent unused argument(s) compilation and MISRA warning */ + UNUSED(dmaxferstatus); + + /* Set the unused I2C DMA transfer complete callback to NULL */ + hi2c->hdmarx->XferCpltCallback = NULL; + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + hi2c->XferSize = 0U; + hi2c->XferCount = 0U; + + /* Disable I2C peripheral to prevent dummy data in buffer */ + __HAL_I2C_DISABLE(hi2c); + + return HAL_ERROR; + } + + if (hi2c->XferSize == 1U) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + else + { + /* Enable Last DMA bit */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_ERR); + + /* Enable DMA Request */ + hi2c->Instance->CR2 |= I2C_CR2_DMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Checks if target device is ready for communication. + * @note This function is used with Memory devices + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param Trials Number of trials + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout) +{ + /* Get tick */ + uint32_t tickstart = HAL_GetTick(); + uint32_t I2C_Trials = 0U; + FlagStatus tmp1; + FlagStatus tmp2; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + do + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); + + /* Wait until ADDR or AF flag are set */ + /* Get tick */ + tickstart = HAL_GetTick(); + + tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR); + tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF); + while ((hi2c->State != HAL_I2C_STATE_TIMEOUT) && (tmp1 == RESET) && (tmp2 == RESET)) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + hi2c->State = HAL_I2C_STATE_TIMEOUT; + } + tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR); + tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF); + } + + hi2c->State = HAL_I2C_STATE_READY; + + /* Check if the ADDR flag has been set */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR) == SET) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Clear ADDR Flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Clear AF Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + } + + /* Increment Trials */ + I2C_Trials++; + } + while (I2C_Trials < Trials); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in master I2C mode an amount of data in non-blocking mode with Interrupt. + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + __IO uint32_t Prev_State = 0x00U; + __IO uint32_t count = 0x00U; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Check Busy Flag only if FIRST call of Master interface */ + if ((READ_BIT(hi2c->Instance->CR1, I2C_CR1_STOP) == I2C_CR1_STOP) || (XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->Devaddress = DevAddress; + + Prev_State = hi2c->PreviousState; + + /* If transfer direction not change and there is no request to start another frame, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((Prev_State != I2C_STATE_MASTER_BUSY_TX) || (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 1)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in master I2C mode an amount of data in non-blocking mode with DMA. + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + __IO uint32_t Prev_State = 0x00U; + __IO uint32_t count = 0x00U; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Check Busy Flag only if FIRST call of Master interface */ + if ((READ_BIT(hi2c->Instance->CR1, I2C_CR1_STOP) == I2C_CR1_STOP) || (XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->Devaddress = DevAddress; + + Prev_State = hi2c->PreviousState; + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* If transfer direction not change and there is no request to start another frame, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((Prev_State != I2C_STATE_MASTER_BUSY_TX) || (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 1)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* If XferOptions is not associated to a new frame, mean no start bit is request, enable directly the DMA request */ + /* In other cases, DMA request is enabled after Slave address treatment in IRQHandler */ + if ((XferOptions == I2C_NEXT_FRAME) || (XferOptions == I2C_LAST_FRAME) || (XferOptions == I2C_LAST_FRAME_NO_STOP)) + { + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + } + + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* If transfer direction not change and there is no request to start another frame, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((Prev_State != I2C_STATE_MASTER_BUSY_TX) || (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 1)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in master I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + __IO uint32_t Prev_State = 0x00U; + __IO uint32_t count = 0U; + uint32_t enableIT = (I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Check Busy Flag only if FIRST call of Master interface */ + if ((READ_BIT(hi2c->Instance->CR1, I2C_CR1_STOP) == I2C_CR1_STOP) || (XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->Devaddress = DevAddress; + + Prev_State = hi2c->PreviousState; + + if ((hi2c->XferCount == 2U) && ((XferOptions == I2C_LAST_FRAME) || (XferOptions == I2C_LAST_FRAME_NO_STOP))) + { + if (Prev_State == I2C_STATE_MASTER_BUSY_RX) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Enable Pos */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + /* Remove Enabling of IT_BUF, mean RXNE treatment, treat the 2 bytes through BTF */ + enableIT &= ~I2C_IT_BUF; + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + + /* If transfer direction not change and there is no request to start another frame, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((Prev_State != I2C_STATE_MASTER_BUSY_RX) || (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 1)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable interrupts */ + __HAL_I2C_ENABLE_IT(hi2c, enableIT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in master mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + __IO uint32_t Prev_State = 0x00U; + __IO uint32_t count = 0U; + uint32_t enableIT = (I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Check Busy Flag only if FIRST call of Master interface */ + if ((READ_BIT(hi2c->Instance->CR1, I2C_CR1_STOP) == I2C_CR1_STOP) || (XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) + { + /* Wait until BUSY flag is reset */ + count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_BUSY; + } + } + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET); + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + /* Clear Last DMA bit */ + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->Devaddress = DevAddress; + + Prev_State = hi2c->PreviousState; + + if (hi2c->XferSize > 0U) + { + if ((hi2c->XferCount == 2U) && ((XferOptions == I2C_LAST_FRAME) || (XferOptions == I2C_LAST_FRAME_NO_STOP))) + { + if (Prev_State == I2C_STATE_MASTER_BUSY_RX) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Enable Pos */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + /* Enable Last DMA bit */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + if ((XferOptions == I2C_LAST_FRAME) || (XferOptions == I2C_OTHER_AND_LAST_FRAME) || (XferOptions == I2C_LAST_FRAME_NO_STOP)) + { + /* Enable Last DMA bit */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + } + } + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + if (dmaxferstatus == HAL_OK) + { + /* If transfer direction not change and there is no request to start another frame, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((Prev_State != I2C_STATE_MASTER_BUSY_RX) || (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 1)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Update interrupt for only EVT and ERR */ + enableIT = (I2C_IT_EVT | I2C_IT_ERR); + } + else + { + /* Update interrupt for only ERR */ + enableIT = I2C_IT_ERR; + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* If XferOptions is not associated to a new frame, mean no start bit is request, enable directly the DMA request */ + /* In other cases, DMA request is enabled after Slave address treatment in IRQHandler */ + if ((XferOptions == I2C_NEXT_FRAME) || (XferOptions == I2C_LAST_FRAME) || (XferOptions == I2C_LAST_FRAME_NO_STOP)) + { + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + } + + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, enableIT); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* If transfer direction not change and there is no request to start another frame, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((Prev_State != I2C_STATE_MASTER_BUSY_RX) || (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 1)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable interrupts */ + __HAL_I2C_ENABLE_IT(hi2c, enableIT); + } + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in slave mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in slave mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave RX state to TX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + /* Abort DMA Xfer if any */ + if (hi2c->hdmarx != NULL) + { + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + else + { + /* Nothing to do */ + } + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_TX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Enable DMA Request */ + hi2c->Instance->CR2 |= I2C_CR2_DMAEN; + + return HAL_OK; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in slave mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable EVT, BUF and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in slave mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) +{ + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave RX state to TX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + /* Abort DMA Xfer if any */ + if (hi2c->hdmarx != NULL) + { + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + else + { + /* Nothing to do */ + } + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Disable Pos */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + return HAL_OK; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Enable the Address listen mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + hi2c->State = HAL_I2C_STATE_LISTEN; + + /* Check if the I2C is already enabled */ + if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) + { + /* Enable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + } + + /* Enable Address Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Enable EVT and ERR interrupt */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Disable the Address listen mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + uint32_t tmp; + + /* Disable Address listen mode only if a transfer is not ongoing */ + if (hi2c->State == HAL_I2C_STATE_LISTEN) + { + tmp = (uint32_t)(hi2c->State) & I2C_STATE_MSK; + hi2c->PreviousState = tmp | (uint32_t)(hi2c->Mode); + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Disable Address Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Disable EVT and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Abort a master or memory I2C IT or DMA process communication with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(DevAddress); + + /* Abort Master transfer during Receive or Transmit process */ + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET) && ((CurrentMode == HAL_I2C_MODE_MASTER) || + (CurrentMode == HAL_I2C_MODE_MEM))) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_ABORT; + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->XferCount = 0U; + + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c); + + return HAL_OK; + } + else + { + /* Wrong usage of abort function */ + /* This function should be used only in case of abort monitored by master device */ + /* Or periphal is not in busy state, mean there is no active sequence to be abort */ + return HAL_ERROR; + } +} + +/** + * @} + */ + +/** @defgroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks + * @{ + */ + +/** + * @brief This function handles I2C event interrupt request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c) +{ + uint32_t sr1itflags; + uint32_t sr2itflags = 0U; + uint32_t itsources = READ_REG(hi2c->Instance->CR2); + uint32_t CurrentXferOptions = hi2c->XferOptions; + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + + /* Master or Memory mode selected */ + if ((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM)) + { + sr2itflags = READ_REG(hi2c->Instance->SR2); + sr1itflags = READ_REG(hi2c->Instance->SR1); + + /* Exit IRQ event until Start Bit detected in case of Other frame requested */ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_SB) == RESET) && (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(CurrentXferOptions) == 1U)) + { + return; + } + + /* SB Set ----------------------------------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_SB) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + I2C_Master_SB(hi2c); + } + /* ADD10 Set -------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_ADD10) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + I2C_Master_ADD10(hi2c); + } + /* ADDR Set --------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_ADDR) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + I2C_Master_ADDR(hi2c); + } + /* I2C in mode Transmitter -----------------------------------------------*/ + else if (I2C_CHECK_FLAG(sr2itflags, I2C_FLAG_TRA) != RESET) + { + /* Do not check buffer and BTF flag if a Xfer DMA is on going */ + if (READ_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN) != I2C_CR2_DMAEN) + { + /* TXE set and BTF reset -----------------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_TXE) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_BUF) != RESET) && (I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) == RESET)) + { + I2C_MasterTransmit_TXE(hi2c); + } + /* BTF set -------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + if (CurrentState == HAL_I2C_STATE_BUSY_TX) + { + I2C_MasterTransmit_BTF(hi2c); + } + else /* HAL_I2C_MODE_MEM */ + { + if (CurrentMode == HAL_I2C_MODE_MEM) + { + I2C_MemoryTransmit_TXE_BTF(hi2c); + } + } + } + else + { + /* Do nothing */ + } + } + } + /* I2C in mode Receiver --------------------------------------------------*/ + else + { + /* Do not check buffer and BTF flag if a Xfer DMA is on going */ + if (READ_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN) != I2C_CR2_DMAEN) + { + /* RXNE set and BTF reset -----------------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_RXNE) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_BUF) != RESET) && (I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) == RESET)) + { + I2C_MasterReceive_RXNE(hi2c); + } + /* BTF set -------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + I2C_MasterReceive_BTF(hi2c); + } + else + { + /* Do nothing */ + } + } + } + } + /* Slave mode selected */ + else + { + /* If an error is detected, read only SR1 register to prevent */ + /* a clear of ADDR flags by reading SR2 after reading SR1 in Error treatment */ + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + { + sr1itflags = READ_REG(hi2c->Instance->SR1); + } + else + { + sr2itflags = READ_REG(hi2c->Instance->SR2); + sr1itflags = READ_REG(hi2c->Instance->SR1); + } + + /* ADDR set --------------------------------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_ADDR) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + /* Now time to read SR2, this will clear ADDR flag automatically */ + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + { + sr2itflags = READ_REG(hi2c->Instance->SR2); + } + I2C_Slave_ADDR(hi2c, sr2itflags); + } + /* STOPF set --------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + I2C_Slave_STOPF(hi2c); + } + /* I2C in mode Transmitter -----------------------------------------------*/ + else if ((CurrentState == HAL_I2C_STATE_BUSY_TX) || (CurrentState == HAL_I2C_STATE_BUSY_TX_LISTEN)) + { + /* TXE set and BTF reset -----------------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_TXE) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_BUF) != RESET) && (I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) == RESET)) + { + I2C_SlaveTransmit_TXE(hi2c); + } + /* BTF set -------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + I2C_SlaveTransmit_BTF(hi2c); + } + else + { + /* Do nothing */ + } + } + /* I2C in mode Receiver --------------------------------------------------*/ + else + { + /* RXNE set and BTF reset ----------------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_RXNE) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_BUF) != RESET) && (I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) == RESET)) + { + I2C_SlaveReceive_RXNE(hi2c); + } + /* BTF set -------------------------------------------------------------*/ + else if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BTF) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_EVT) != RESET)) + { + I2C_SlaveReceive_BTF(hi2c); + } + else + { + /* Do nothing */ + } + } + } +} + +/** + * @brief This function handles I2C error interrupt request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) +{ + HAL_I2C_ModeTypeDef tmp1; + uint32_t tmp2; + HAL_I2C_StateTypeDef tmp3; + uint32_t tmp4; + uint32_t sr1itflags = READ_REG(hi2c->Instance->SR1); + uint32_t itsources = READ_REG(hi2c->Instance->CR2); + uint32_t error = HAL_I2C_ERROR_NONE; + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + + /* I2C Bus error interrupt occurred ----------------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_BERR) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERR) != RESET)) + { + error |= HAL_I2C_ERROR_BERR; + + /* Clear BERR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR); + } + + /* I2C Arbitration Lost error interrupt occurred ---------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_ARLO) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERR) != RESET)) + { + error |= HAL_I2C_ERROR_ARLO; + + /* Clear ARLO flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO); + } + + /* I2C Acknowledge failure error interrupt occurred ------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERR) != RESET)) + { + tmp1 = CurrentMode; + tmp2 = hi2c->XferCount; + tmp3 = hi2c->State; + tmp4 = hi2c->PreviousState; + if ((tmp1 == HAL_I2C_MODE_SLAVE) && (tmp2 == 0U) && \ + ((tmp3 == HAL_I2C_STATE_BUSY_TX) || (tmp3 == HAL_I2C_STATE_BUSY_TX_LISTEN) || \ + ((tmp3 == HAL_I2C_STATE_LISTEN) && (tmp4 == I2C_STATE_SLAVE_BUSY_TX)))) + { + I2C_Slave_AF(hi2c); + } + else + { + /* Clear AF flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + error |= HAL_I2C_ERROR_AF; + + /* Do not generate a STOP in case of Slave receive non acknowledge during transfer (mean not at the end of transfer) */ + if ((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM)) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + } + } + + /* I2C Over-Run/Under-Run interrupt occurred -------------------------------*/ + if ((I2C_CHECK_FLAG(sr1itflags, I2C_FLAG_OVR) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERR) != RESET)) + { + error |= HAL_I2C_ERROR_OVR; + /* Clear OVR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR); + } + + /* Call the Error Callback in case of Error detected -----------------------*/ + if (error != HAL_I2C_ERROR_NONE) + { + hi2c->ErrorCode |= error; + I2C_ITError(hi2c); + } +} + +/** + * @brief Master Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MasterTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Master Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MasterRxCpltCallback could be implemented in the user file + */ +} + +/** @brief Slave Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_SlaveTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Slave Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_SlaveRxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Slave Address Match callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param TransferDirection Master request Transfer Direction (Write/Read), value of @ref I2C_XferDirection_definition + * @param AddrMatchCode Address Match Code + * @retval None + */ +__weak void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + UNUSED(TransferDirection); + UNUSED(AddrMatchCode); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_AddrCallback() could be implemented in the user file + */ +} + +/** + * @brief Listen Complete callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_ListenCpltCallback() could be implemented in the user file + */ +} + +/** + * @brief Memory Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MemTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Memory Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MemRxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief I2C error callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief I2C abort callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_AbortCpltCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions + * @brief Peripheral State, Mode and Error functions + * +@verbatim + =============================================================================== + ##### Peripheral State, Mode and Error functions ##### + =============================================================================== + [..] + This subsection permit to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the I2C handle state. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL state + */ +HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c) +{ + /* Return I2C handle state */ + return hi2c->State; +} + +/** + * @brief Returns the I2C Master, Slave, Memory or no mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval HAL mode + */ +HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c) +{ + return hi2c->Mode; +} + +/** + * @brief Return the I2C error code. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval I2C Error Code + */ +uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c) +{ + return hi2c->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup I2C_Private_Functions + * @{ + */ + +/** + * @brief Handle TXE flag for Master + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_MasterTransmit_TXE(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + uint32_t CurrentXferOptions = hi2c->XferOptions; + + if ((hi2c->XferSize == 0U) && (CurrentState == HAL_I2C_STATE_BUSY_TX)) + { + /* Call TxCpltCallback() directly if no stop mode is set */ + if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) && (CurrentXferOptions != I2C_NO_OPTION_FRAME)) + { + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else /* Generate Stop condition then Call TxCpltCallback() */ + { + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemTxCpltCallback(hi2c); +#else + HAL_I2C_MemTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + } + else if ((CurrentState == HAL_I2C_STATE_BUSY_TX) || \ + ((CurrentMode == HAL_I2C_MODE_MEM) && (CurrentState == HAL_I2C_STATE_BUSY_RX))) + { + if (hi2c->XferCount == 0U) + { + /* Disable BUF interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + } + else + { + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + I2C_MemoryTransmit_TXE_BTF(hi2c); + } + else + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + } + } + else + { + /* Do nothing */ + } +} + +/** + * @brief Handle BTF flag for Master transmitter + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_MasterTransmit_BTF(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + uint32_t CurrentXferOptions = hi2c->XferOptions; + + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + if (hi2c->XferCount != 0U) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + else + { + /* Call TxCpltCallback() directly if no stop mode is set */ + if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) && (CurrentXferOptions != I2C_NO_OPTION_FRAME)) + { + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else /* Generate Stop condition then Call TxCpltCallback() */ + { + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemTxCpltCallback(hi2c); +#else + HAL_I2C_MemTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + } + } + else + { + /* Do nothing */ + } +} + +/** + * @brief Handle TXE and BTF flag for Memory transmitter + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_MemoryTransmit_TXE_BTF(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + + if (hi2c->EventCount == 0U) + { + /* If Memory address size is 8Bit */ + if (hi2c->MemaddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_LSB(hi2c->Memaddress); + + hi2c->EventCount += 2U; + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_MSB(hi2c->Memaddress); + + hi2c->EventCount++; + } + } + else if (hi2c->EventCount == 1U) + { + /* Send LSB of Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_LSB(hi2c->Memaddress); + + hi2c->EventCount++; + } + else if (hi2c->EventCount == 2U) + { + if (CurrentState == HAL_I2C_STATE_BUSY_RX) + { + /* Generate Restart */ + hi2c->Instance->CR1 |= I2C_CR1_START; + + hi2c->EventCount++; + } + else if ((hi2c->XferCount > 0U) && (CurrentState == HAL_I2C_STATE_BUSY_TX)) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + else if ((hi2c->XferCount == 0U) && (CurrentState == HAL_I2C_STATE_BUSY_TX)) + { + /* Generate Stop condition then Call TxCpltCallback() */ + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemTxCpltCallback(hi2c); +#else + HAL_I2C_MemTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Do nothing */ + } + } + else + { + /* Clear TXE and BTF flags */ + I2C_Flush_DR(hi2c); + } +} + +/** + * @brief Handle RXNE flag for Master + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_MasterReceive_RXNE(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + uint32_t tmp; + uint32_t CurrentXferOptions; + + CurrentXferOptions = hi2c->XferOptions; + tmp = hi2c->XferCount; + if (tmp > 3U) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + if (hi2c->XferCount == (uint16_t)3) + { + /* Disable BUF interrupt, this help to treat correctly the last 4 bytes + on BTF subroutine */ + /* Disable BUF interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + } + } + else if ((hi2c->XferOptions != I2C_FIRST_AND_NEXT_FRAME) && ((tmp == 1U) || (tmp == 0U))) + { + if (I2C_WaitOnSTOPRequestThroughIT(hi2c) == HAL_OK) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + hi2c->State = HAL_I2C_STATE_READY; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->PreviousState = I2C_STATE_NONE; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemRxCpltCallback(hi2c); +#else + HAL_I2C_MemRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME)) + { + hi2c->PreviousState = I2C_STATE_NONE; + } + else + { + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Call user error callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + /* Disable BUF interrupt, this help to treat correctly the last 2 bytes + on BTF subroutine if there is a reception delay between N-1 and N byte */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + } + } +} + +/** + * @brief Handle BTF flag for Master receiver + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_MasterReceive_BTF(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + uint32_t CurrentXferOptions = hi2c->XferOptions; + + if (hi2c->XferCount == 4U) + { + /* Disable BUF interrupt, this help to treat correctly the last 2 bytes + on BTF subroutine if there is a reception delay between N-1 and N byte */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + else if (hi2c->XferCount == 3U) + { + /* Disable BUF interrupt, this help to treat correctly the last 2 bytes + on BTF subroutine if there is a reception delay between N-1 and N byte */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + + if ((CurrentXferOptions != I2C_NEXT_FRAME) && (CurrentXferOptions != I2C_FIRST_AND_NEXT_FRAME)) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + else if (hi2c->XferCount == 2U) + { + /* Prepare next transfer or stop current transfer */ + if ((CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME_NO_STOP)) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + else if ((CurrentXferOptions == I2C_NEXT_FRAME) || (CurrentXferOptions == I2C_FIRST_AND_NEXT_FRAME)) + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + else + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + /* Disable EVT and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + hi2c->State = HAL_I2C_STATE_READY; + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->PreviousState = I2C_STATE_NONE; +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemRxCpltCallback(hi2c); +#else + HAL_I2C_MemRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME)) + { + hi2c->PreviousState = I2C_STATE_NONE; + } + else + { + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } +} + +/** + * @brief Handle SB flag for Master + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_Master_SB(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + if (hi2c->EventCount == 0U) + { + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(hi2c->Devaddress); + } + else + { + hi2c->Instance->DR = I2C_7BIT_ADD_READ(hi2c->Devaddress); + } + } + else + { + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + { + /* Send slave 7 Bits address */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(hi2c->Devaddress); + } + else + { + hi2c->Instance->DR = I2C_7BIT_ADD_READ(hi2c->Devaddress); + } + + if (((hi2c->hdmatx != NULL) && (hi2c->hdmatx->XferCpltCallback != NULL)) + || ((hi2c->hdmarx != NULL) && (hi2c->hdmarx->XferCpltCallback != NULL))) + { + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + } + } + else + { + if (hi2c->EventCount == 0U) + { + /* Send header of slave address */ + hi2c->Instance->DR = I2C_10BIT_HEADER_WRITE(hi2c->Devaddress); + } + else if (hi2c->EventCount == 1U) + { + /* Send header of slave address */ + hi2c->Instance->DR = I2C_10BIT_HEADER_READ(hi2c->Devaddress); + } + else + { + /* Do nothing */ + } + } + } +} + +/** + * @brief Handle ADD10 flag for Master + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_Master_ADD10(I2C_HandleTypeDef *hi2c) +{ + /* Send slave address */ + hi2c->Instance->DR = I2C_10BIT_ADDRESS(hi2c->Devaddress); + + if (((hi2c->hdmatx != NULL) && (hi2c->hdmatx->XferCpltCallback != NULL)) + || ((hi2c->hdmarx != NULL) && (hi2c->hdmarx->XferCpltCallback != NULL))) + { + /* Enable DMA Request */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + } +} + +/** + * @brief Handle ADDR flag for Master + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_Master_ADDR(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + uint32_t CurrentXferOptions = hi2c->XferOptions; + uint32_t Prev_State = hi2c->PreviousState; + + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + if ((hi2c->EventCount == 0U) && (CurrentMode == HAL_I2C_MODE_MEM)) + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + else if ((hi2c->EventCount == 0U) && (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT)) + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Restart */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + hi2c->EventCount++; + } + else + { + if (hi2c->XferCount == 0U) + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + else if (hi2c->XferCount == 1U) + { + if (CurrentXferOptions == I2C_NO_OPTION_FRAME) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + else + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + } + /* Prepare next transfer or stop current transfer */ + else if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) \ + && ((Prev_State != I2C_STATE_MASTER_BUSY_RX) || (CurrentXferOptions == I2C_FIRST_FRAME))) + { + if ((CurrentXferOptions != I2C_NEXT_FRAME) && (CurrentXferOptions != I2C_FIRST_AND_NEXT_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME_NO_STOP)) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + else + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + } + else if (hi2c->XferCount == 2U) + { + if ((CurrentXferOptions != I2C_NEXT_FRAME) && (CurrentXferOptions != I2C_FIRST_AND_NEXT_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME_NO_STOP)) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Enable Pos */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_POS); + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + + if (((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) && ((CurrentXferOptions == I2C_NO_OPTION_FRAME) || (CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME_NO_STOP) || (CurrentXferOptions == I2C_LAST_FRAME))) + { + /* Enable Last DMA bit */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + else + { + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + if (((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) && ((CurrentXferOptions == I2C_NO_OPTION_FRAME) || (CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME_NO_STOP) || (CurrentXferOptions == I2C_LAST_FRAME))) + { + /* Enable Last DMA bit */ + SET_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } + + /* Reset Event counter */ + hi2c->EventCount = 0U; + } + } + else + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + } +} + +/** + * @brief Handle TXE flag for Slave + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_SlaveTransmit_TXE(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + + if (hi2c->XferCount != 0U) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + if ((hi2c->XferCount == 0U) && (CurrentState == HAL_I2C_STATE_BUSY_TX_LISTEN)) + { + /* Last Byte is received, disable Interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + + /* Set state at HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + hi2c->State = HAL_I2C_STATE_LISTEN; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } +} + +/** + * @brief Handle BTF flag for Slave transmitter + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_SlaveTransmit_BTF(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->XferCount != 0U) + { + /* Write data to DR */ + hi2c->Instance->DR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } +} + +/** + * @brief Handle RXNE flag for Slave + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_SlaveReceive_RXNE(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + + if (hi2c->XferCount != 0U) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + + if ((hi2c->XferCount == 0U) && (CurrentState == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + /* Last Byte is received, disable Interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF); + + /* Set state at HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + hi2c->State = HAL_I2C_STATE_LISTEN; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } +} + +/** + * @brief Handle BTF flag for Slave receiver + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_SlaveReceive_BTF(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->XferCount != 0U) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } +} + +/** + * @brief Handle ADD flag for Slave + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param IT2Flags Interrupt2 flags to handle. + * @retval None + */ +static void I2C_Slave_ADDR(I2C_HandleTypeDef *hi2c, uint32_t IT2Flags) +{ + uint8_t TransferDirection = I2C_DIRECTION_RECEIVE; + uint16_t SlaveAddrCode; + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* Disable BUF interrupt, BUF enabling is manage through slave specific interface */ + __HAL_I2C_DISABLE_IT(hi2c, (I2C_IT_BUF)); + + /* Transfer Direction requested by Master */ + if (I2C_CHECK_FLAG(IT2Flags, I2C_FLAG_TRA) == RESET) + { + TransferDirection = I2C_DIRECTION_TRANSMIT; + } + + if (I2C_CHECK_FLAG(IT2Flags, I2C_FLAG_DUALF) == RESET) + { + SlaveAddrCode = (uint16_t)hi2c->Init.OwnAddress1; + } + else + { + SlaveAddrCode = (uint16_t)hi2c->Init.OwnAddress2; + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, TransferDirection, SlaveAddrCode); +#else + HAL_I2C_AddrCallback(hi2c, TransferDirection, SlaveAddrCode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + } +} + +/** + * @brief Handle STOPF flag for Slave + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_Slave_STOPF(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Clear STOPF flag */ + __HAL_I2C_CLEAR_STOPFLAG(hi2c); + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* If a DMA is ongoing, Update handle size context */ + if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + if ((CurrentState == HAL_I2C_STATE_BUSY_RX) || (CurrentState == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + hi2c->XferCount = (uint16_t)(I2C_GET_DMA_REMAIN_DATA(hi2c->hdmarx)); + + if (hi2c->XferCount != 0U) + { + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + /* Disable, stop the current DMA */ + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Abort DMA Xfer if any */ + if (HAL_DMA_GetState(hi2c->hdmarx) != HAL_DMA_STATE_READY) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + else + { + hi2c->XferCount = (uint16_t)(I2C_GET_DMA_REMAIN_DATA(hi2c->hdmatx)); + + if (hi2c->XferCount != 0U) + { + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + /* Disable, stop the current DMA */ + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + /* Abort DMA Xfer if any */ + if (HAL_DMA_GetState(hi2c->hdmatx) != HAL_DMA_STATE_READY) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + + /* All data are not transferred, so set error code accordingly */ + if (hi2c->XferCount != 0U) + { + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + /* Update counter */ + hi2c->XferCount--; + } + + if (hi2c->XferCount != 0U) + { + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + } + + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c); + } + else + { + if (CurrentState == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Set state at HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_LISTEN; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + if (hi2c->State == HAL_I2C_STATE_LISTEN) + { + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + if ((hi2c->PreviousState == I2C_STATE_SLAVE_BUSY_RX) || (CurrentState == HAL_I2C_STATE_BUSY_RX)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + } +} + +/** + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval None + */ +static void I2C_Slave_AF(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variables to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + uint32_t CurrentXferOptions = hi2c->XferOptions; + + if (((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME)) && \ + (CurrentState == HAL_I2C_STATE_LISTEN)) + { + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Clear AF flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else if (CurrentState == HAL_I2C_STATE_BUSY_TX) + { + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + + /* Clear AF flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Clear TXE flag */ + I2C_Flush_DR(hi2c); + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Clear AF flag only */ + /* State Listen, but XferOptions == FIRST or NEXT */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } +} + +/** + * @brief I2C interrupts error process + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ITError(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + uint32_t CurrentError; + + if (((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM)) && (CurrentState == HAL_I2C_STATE_BUSY_RX)) + { + /* Disable Pos bit in I2C CR1 when error occurred in Master/Mem Receive IT Process */ + hi2c->Instance->CR1 &= ~I2C_CR1_POS; + } + + if (((uint32_t)CurrentState & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* keep HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_LISTEN; + } + else + { + /* If state is an abort treatment on going, don't change state */ + /* This change will be do later */ + if ((READ_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN) != I2C_CR2_DMAEN) && (CurrentState != HAL_I2C_STATE_ABORT)) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + } + hi2c->PreviousState = I2C_STATE_NONE; + } + + /* Abort DMA transfer */ + if (READ_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN) == I2C_CR2_DMAEN) + { + hi2c->Instance->CR2 &= ~I2C_CR2_DMAEN; + + if (hi2c->hdmatx->State != HAL_DMA_STATE_READY) + { + /* Set the DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Disable I2C peripheral to prevent dummy data in buffer */ + __HAL_I2C_DISABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + else + { + /* Set the DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + } + + /* Disable I2C peripheral to prevent dummy data in buffer */ + __HAL_I2C_DISABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Call Directly hi2c->hdmarx->XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + else if (hi2c->State == HAL_I2C_STATE_ABORT) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + } + + /* Disable I2C peripheral to prevent dummy data in buffer */ + __HAL_I2C_DISABLE(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AbortCpltCallback(hi2c); +#else + HAL_I2C_AbortCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + { + /* Read data from DR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->DR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + } + + /* Call user error callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + /* STOP Flag is not set after a NACK reception, BusError, ArbitrationLost, OverRun */ + CurrentError = hi2c->ErrorCode; + + if (((CurrentError & HAL_I2C_ERROR_BERR) == HAL_I2C_ERROR_BERR) || \ + ((CurrentError & HAL_I2C_ERROR_ARLO) == HAL_I2C_ERROR_ARLO) || \ + ((CurrentError & HAL_I2C_ERROR_AF) == HAL_I2C_ERROR_AF) || \ + ((CurrentError & HAL_I2C_ERROR_OVR) == HAL_I2C_ERROR_OVR)) + { + /* Disable EVT, BUF and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR); + } + + /* So may inform upper layer that listen phase is stopped */ + /* during NACK error treatment */ + CurrentState = hi2c->State; + if (((hi2c->ErrorCode & HAL_I2C_ERROR_AF) == HAL_I2C_ERROR_AF) && (CurrentState == HAL_I2C_STATE_LISTEN)) + { + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_MasterRequestWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart) +{ + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + uint32_t CurrentXferOptions = hi2c->XferOptions; + + /* Generate Start condition if first transfer */ + if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_NO_OPTION_FRAME)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + else if (hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) + { + /* Generate ReStart */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + else + { + /* Do nothing */ + } + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + { + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); + } + else + { + /* Send header of slave address */ + hi2c->Instance->DR = I2C_10BIT_HEADER_WRITE(DevAddress); + + /* Wait until ADD10 flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADD10, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Send slave address */ + hi2c->Instance->DR = I2C_10BIT_ADDRESS(DevAddress); + } + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Master sends target device address for read request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_MasterRequestRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart) +{ + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + uint32_t CurrentXferOptions = hi2c->XferOptions; + + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start condition if first transfer */ + if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_NO_OPTION_FRAME)) + { + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + else if (hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) + { + /* Generate ReStart */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + } + else + { + /* Do nothing */ + } + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + { + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_READ(DevAddress); + } + else + { + /* Send header of slave address */ + hi2c->Instance->DR = I2C_10BIT_HEADER_WRITE(DevAddress); + + /* Wait until ADD10 flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADD10, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Send slave address */ + hi2c->Instance->DR = I2C_10BIT_ADDRESS(DevAddress); + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Generate Restart */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + /* Send header of slave address */ + hi2c->Instance->DR = I2C_10BIT_HEADER_READ(DevAddress); + } + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Master sends target device address followed by internal memory address for write request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart) +{ + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress); + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_MSB(MemAddress); + + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* Send LSB of Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress); + } + + return HAL_OK; +} + +/** + * @brief Master sends target device address followed by internal memory address for read request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart) +{ + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* Generate Start */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_ADDRFLAG(hi2c); + + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress); + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_MSB(MemAddress); + + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* Send LSB of Memory Address */ + hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress); + } + + /* Wait until TXE flag is set */ + if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + return HAL_ERROR; + } + + /* Generate Restart */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_START); + + /* Wait until SB flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) + { + if (READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START) + { + hi2c->ErrorCode = HAL_I2C_WRONG_START; + } + return HAL_TIMEOUT; + } + + /* Send slave address */ + hi2c->Instance->DR = I2C_7BIT_ADD_READ(DevAddress); + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief DMA I2C process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAXferCplt(DMA_HandleTypeDef *hdma) +{ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Derogation MISRAC2012-Rule-11.5 */ + + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + HAL_I2C_ModeTypeDef CurrentMode = hi2c->Mode; + uint32_t CurrentXferOptions = hi2c->XferOptions; + + /* Disable EVT and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Clear Complete callback */ + if (hi2c->hdmatx != NULL) + { + hi2c->hdmatx->XferCpltCallback = NULL; + } + if (hi2c->hdmarx != NULL) + { + hi2c->hdmarx->XferCpltCallback = NULL; + } + + if ((((uint32_t)CurrentState & (uint32_t)HAL_I2C_STATE_BUSY_TX) == (uint32_t)HAL_I2C_STATE_BUSY_TX) || ((((uint32_t)CurrentState & (uint32_t)HAL_I2C_STATE_BUSY_RX) == (uint32_t)HAL_I2C_STATE_BUSY_RX) && (CurrentMode == HAL_I2C_MODE_SLAVE))) + { + /* Disable DMA Request */ + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + hi2c->XferCount = 0U; + + if (CurrentState == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Set state at HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + hi2c->State = HAL_I2C_STATE_LISTEN; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else if (CurrentState == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Set state at HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + hi2c->State = HAL_I2C_STATE_LISTEN; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Do nothing */ + } + + /* Enable EVT and ERR interrupt to treat end of transfer in IRQ handler */ + __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + } + /* Check current Mode, in case of treatment DMA handler have been preempted by a prior interrupt */ + else if (hi2c->Mode != HAL_I2C_MODE_NONE) + { + if (hi2c->XferCount == (uint16_t)1) + { + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + } + + /* Disable EVT and ERR interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR); + + /* Prepare next transfer or stop current transfer */ + if ((CurrentXferOptions == I2C_NO_OPTION_FRAME) || (CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_OTHER_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME)) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + } + + /* Disable Last DMA */ + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_LAST); + + /* Disable DMA Request */ + CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_DMAEN); + + hi2c->XferCount = 0U; + + /* Check if Errors has been detected during transfer */ + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + { +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->State = HAL_I2C_STATE_READY; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->PreviousState = I2C_STATE_NONE; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemRxCpltCallback(hi2c); +#else + HAL_I2C_MemRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME)) + { + hi2c->PreviousState = I2C_STATE_NONE; + } + else + { + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + } + else + { + /* Do nothing */ + } +} + +/** + * @brief DMA I2C communication error callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAError(DMA_HandleTypeDef *hdma) +{ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Derogation MISRAC2012-Rule-11.5 */ + + /* Clear Complete callback */ + if (hi2c->hdmatx != NULL) + { + hi2c->hdmatx->XferCpltCallback = NULL; + } + if (hi2c->hdmarx != NULL) + { + hi2c->hdmarx->XferCpltCallback = NULL; + } + + /* Ignore DMA FIFO error */ + if (HAL_DMA_GetError(hdma) != HAL_DMA_ERROR_FE) + { + /* Disable Acknowledge */ + hi2c->Instance->CR1 &= ~I2C_CR1_ACK; + + hi2c->XferCount = 0U; + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA I2C communication abort callback + * (To be called at end of DMA Abort procedure). + * @param hdma DMA handle. + * @retval None + */ +static void I2C_DMAAbort(DMA_HandleTypeDef *hdma) +{ + __IO uint32_t count = 0U; + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Derogation MISRAC2012-Rule-11.5 */ + + /* Declaration of temporary variable to prevent undefined behavior of volatile usage */ + HAL_I2C_StateTypeDef CurrentState = hi2c->State; + + /* During abort treatment, check that there is no pending STOP request */ + /* Wait until STOP flag is reset */ + count = I2C_TIMEOUT_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + if (count == 0U) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + break; + } + count--; + } + while (READ_BIT(hi2c->Instance->CR1, I2C_CR1_STOP) == I2C_CR1_STOP); + + /* Clear Complete callback */ + if (hi2c->hdmatx != NULL) + { + hi2c->hdmatx->XferCpltCallback = NULL; + } + if (hi2c->hdmarx != NULL) + { + hi2c->hdmarx->XferCpltCallback = NULL; + } + + /* Disable Acknowledge */ + CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + hi2c->XferCount = 0U; + + /* Reset XferAbortCallback */ + if (hi2c->hdmatx != NULL) + { + hi2c->hdmatx->XferAbortCallback = NULL; + } + if (hi2c->hdmarx != NULL) + { + hi2c->hdmarx->XferAbortCallback = NULL; + } + + /* Disable I2C peripheral to prevent dummy data in buffer */ + __HAL_I2C_DISABLE(hi2c); + + /* Check if come from abort from user */ + if (hi2c->State == HAL_I2C_STATE_ABORT) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AbortCpltCallback(hi2c); +#else + HAL_I2C_AbortCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + if (((uint32_t)CurrentState & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* Renable I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + + /* Enable Acknowledge */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK); + + /* keep HAL_I2C_STATE_LISTEN */ + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_LISTEN; + } + else + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + } + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief This function handles I2C Communication Timeout. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param Flag specifies the I2C flag to check. + * @param Status The new Flag status (SET or RESET). + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart) +{ + /* Wait until flag is set */ + while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, Flag) == Status)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for Master addressing phase. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @param Flag specifies the I2C flag to check. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnMasterAddressFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, uint32_t Timeout, uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, Flag) == RESET) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) + { + /* Generate Stop */ + SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP); + + /* Clear AF Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, Flag) == RESET)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of TXE flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnTXEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) + { + /* Check if a NACK is detected */ + if (I2C_IsAcknowledgeFailed(hi2c) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of BTF flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnBTFFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == RESET) + { + /* Check if a NACK is detected */ + if (I2C_IsAcknowledgeFailed(hi2c) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == RESET)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of STOP flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + { + /* Check if a NACK is detected */ + if (I2C_IsAcknowledgeFailed(hi2c) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of STOP request through Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnSTOPRequestThroughIT(I2C_HandleTypeDef *hi2c) +{ + __IO uint32_t count = 0U; + + /* Wait until STOP flag is reset */ + count = I2C_TIMEOUT_STOP_FLAG * (SystemCoreClock / 25U / 1000U); + do + { + count--; + if (count == 0U) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while (READ_BIT(hi2c->Instance->CR1, I2C_CR1_STOP) == I2C_CR1_STOP); + + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of RXNE flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) +{ + + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET) + { + /* Check if a STOPF is detected */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) + { + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET)) + { + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles Acknowledge failed detection during an I2C Communication. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c) +{ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) + { + /* Clear NACKF Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + return HAL_OK; +} + +/** + * @brief Convert I2Cx OTHER_xxx XferOptions to functional XferOptions. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c) +{ + /* if user set XferOptions to I2C_OTHER_FRAME */ + /* it request implicitly to generate a restart condition */ + /* set XferOptions to I2C_FIRST_FRAME */ + if (hi2c->XferOptions == I2C_OTHER_FRAME) + { + hi2c->XferOptions = I2C_FIRST_FRAME; + } + /* else if user set XferOptions to I2C_OTHER_AND_LAST_FRAME */ + /* it request implicitly to generate a restart condition */ + /* then generate a stop condition at the end of transfer */ + /* set XferOptions to I2C_FIRST_AND_LAST_FRAME */ + else if (hi2c->XferOptions == I2C_OTHER_AND_LAST_FRAME) + { + hi2c->XferOptions = I2C_FIRST_AND_LAST_FRAME; + } + else + { + /* Nothing to do */ + } +} + +/** + * @} + */ + +#endif /* HAL_I2C_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c new file mode 100644 index 00000000..351f4fda --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c @@ -0,0 +1,182 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_i2c_ex.c + * @author MCD Application Team + * @brief I2C Extension HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of I2C extension peripheral: + * + Extension features functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### I2C peripheral extension features ##### + ============================================================================== + + [..] Comparing to other previous devices, the I2C interface for STM32F427xx/437xx/ + 429xx/439xx devices contains the following additional features : + + (+) Possibility to disable or enable Analog Noise Filter + (+) Use of a configured Digital Noise Filter + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure Noise Filter + (#) Configure I2C Analog noise filter using the function HAL_I2C_AnalogFilter_Config() + (#) Configure I2C Digital noise filter using the function HAL_I2C_DigitalFilter_Config() + + @endverbatim + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup I2CEx I2CEx + * @brief I2C HAL module driver + * @{ + */ + +#ifdef HAL_I2C_MODULE_ENABLED + +#if defined(I2C_FLTR_ANOFF)&&defined(I2C_FLTR_DNF) +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup I2CEx_Exported_Functions I2C Exported Functions + * @{ + */ + + +/** @defgroup I2CEx_Exported_Functions_Group1 Extension features functions + * @brief Extension features functions + * +@verbatim + =============================================================================== + ##### Extension features functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Noise Filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures I2C Analog noise filter. + * @param hi2c pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @param AnalogFilter new state of the Analog filter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Reset I2Cx ANOFF bit */ + hi2c->Instance->FLTR &= ~(I2C_FLTR_ANOFF); + + /* Disable the analog filter */ + hi2c->Instance->FLTR |= AnalogFilter; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Configures I2C Digital noise filter. + * @param hi2c pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @param DigitalFilter Coefficient of digital noise filter between 0x00 and 0x0F. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter) +{ + uint16_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Get the old register value */ + tmpreg = hi2c->Instance->FLTR; + + /* Reset I2Cx DNF bit [3:0] */ + tmpreg &= ~(I2C_FLTR_DNF); + + /* Set I2Cx DNF coefficient */ + tmpreg |= DigitalFilter; + + /* Store the new register value */ + hi2c->Instance->FLTR = tmpreg; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @} + */ + +/** + * @} + */ +#endif + +#endif /* HAL_I2C_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c new file mode 100644 index 00000000..dacbfeb4 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c @@ -0,0 +1,2394 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pcd.c + * @author MCD Application Team + * @brief PCD HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the USB Peripheral Controller: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The PCD HAL driver can be used as follows: + + (#) Declare a PCD_HandleTypeDef handle structure, for example: + PCD_HandleTypeDef hpcd; + + (#) Fill parameters of Init structure in HCD handle + + (#) Call HAL_PCD_Init() API to initialize the PCD peripheral (Core, Device core, ...) + + (#) Initialize the PCD low level resources through the HAL_PCD_MspInit() API: + (##) Enable the PCD/USB Low Level interface clock using + (+++) __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); + (+++) __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); (For High Speed Mode) + + (##) Initialize the related GPIO clocks + (##) Configure PCD pin-out + (##) Configure PCD NVIC interrupt + + (#)Associate the Upper USB device stack to the HAL PCD Driver: + (##) hpcd.pData = pdev; + + (#)Enable PCD transmission and reception: + (##) HAL_PCD_Start(); + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup PCD PCD + * @brief PCD HAL module driver + * @{ + */ + +#ifdef HAL_PCD_MODULE_ENABLED + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup PCD_Private_Macros PCD Private Macros + * @{ + */ +#define PCD_MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define PCD_MAX(a, b) (((a) > (b)) ? (a) : (b)) +/** + * @} + */ + +/* Private functions prototypes ----------------------------------------------*/ +/** @defgroup PCD_Private_Functions PCD Private Functions + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t epnum); +static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint32_t epnum); +static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint32_t epnum); +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup PCD_Exported_Functions PCD Exported Functions + * @{ + */ + +/** @defgroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This section provides functions allowing to: + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the PCD according to the specified + * parameters in the PCD_InitTypeDef and initialize the associated handle. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd) +{ +#if defined (USB_OTG_FS) + const USB_OTG_GlobalTypeDef *USBx; +#endif /* defined (USB_OTG_FS) */ + uint8_t i; + + /* Check the PCD handle allocation */ + if (hpcd == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance)); + +#if defined (USB_OTG_FS) + USBx = hpcd->Instance; +#endif /* defined (USB_OTG_FS) */ + + if (hpcd->State == HAL_PCD_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hpcd->Lock = HAL_UNLOCKED; + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->SOFCallback = HAL_PCD_SOFCallback; + hpcd->SetupStageCallback = HAL_PCD_SetupStageCallback; + hpcd->ResetCallback = HAL_PCD_ResetCallback; + hpcd->SuspendCallback = HAL_PCD_SuspendCallback; + hpcd->ResumeCallback = HAL_PCD_ResumeCallback; + hpcd->ConnectCallback = HAL_PCD_ConnectCallback; + hpcd->DisconnectCallback = HAL_PCD_DisconnectCallback; + hpcd->DataOutStageCallback = HAL_PCD_DataOutStageCallback; + hpcd->DataInStageCallback = HAL_PCD_DataInStageCallback; + hpcd->ISOOUTIncompleteCallback = HAL_PCD_ISOOUTIncompleteCallback; + hpcd->ISOINIncompleteCallback = HAL_PCD_ISOINIncompleteCallback; + hpcd->LPMCallback = HAL_PCDEx_LPM_Callback; + hpcd->BCDCallback = HAL_PCDEx_BCD_Callback; + + if (hpcd->MspInitCallback == NULL) + { + hpcd->MspInitCallback = HAL_PCD_MspInit; + } + + /* Init the low level hardware */ + hpcd->MspInitCallback(hpcd); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC... */ + HAL_PCD_MspInit(hpcd); +#endif /* (USE_HAL_PCD_REGISTER_CALLBACKS) */ + } + + hpcd->State = HAL_PCD_STATE_BUSY; + +#if defined (USB_OTG_FS) + /* Disable DMA mode for FS instance */ + if (USBx == USB_OTG_FS) + { + hpcd->Init.dma_enable = 0U; + } +#endif /* defined (USB_OTG_FS) */ + + /* Disable the Interrupts */ + __HAL_PCD_DISABLE(hpcd); + + /*Init the Core (common init.) */ + if (USB_CoreInit(hpcd->Instance, hpcd->Init) != HAL_OK) + { + hpcd->State = HAL_PCD_STATE_ERROR; + return HAL_ERROR; + } + + /* Force Device Mode */ + if (USB_SetCurrentMode(hpcd->Instance, USB_DEVICE_MODE) != HAL_OK) + { + hpcd->State = HAL_PCD_STATE_ERROR; + return HAL_ERROR; + } + + /* Init endpoints structures */ + for (i = 0U; i < hpcd->Init.dev_endpoints; i++) + { + /* Init ep structure */ + hpcd->IN_ep[i].is_in = 1U; + hpcd->IN_ep[i].num = i; + hpcd->IN_ep[i].tx_fifo_num = i; + /* Control until ep is activated */ + hpcd->IN_ep[i].type = EP_TYPE_CTRL; + hpcd->IN_ep[i].maxpacket = 0U; + hpcd->IN_ep[i].xfer_buff = 0U; + hpcd->IN_ep[i].xfer_len = 0U; + } + + for (i = 0U; i < hpcd->Init.dev_endpoints; i++) + { + hpcd->OUT_ep[i].is_in = 0U; + hpcd->OUT_ep[i].num = i; + /* Control until ep is activated */ + hpcd->OUT_ep[i].type = EP_TYPE_CTRL; + hpcd->OUT_ep[i].maxpacket = 0U; + hpcd->OUT_ep[i].xfer_buff = 0U; + hpcd->OUT_ep[i].xfer_len = 0U; + } + + /* Init Device */ + if (USB_DevInit(hpcd->Instance, hpcd->Init) != HAL_OK) + { + hpcd->State = HAL_PCD_STATE_ERROR; + return HAL_ERROR; + } + + hpcd->USB_Address = 0U; + hpcd->State = HAL_PCD_STATE_READY; +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \ + || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \ + || defined(STM32F423xx) + /* Activate LPM */ + if (hpcd->Init.lpm_enable == 1U) + { + (void)HAL_PCDEx_ActivateLPM(hpcd); + } +#endif /* defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || + defined(STM32F423xx) */ + (void)USB_DevDisconnect(hpcd->Instance); + + return HAL_OK; +} + +/** + * @brief DeInitializes the PCD peripheral. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd) +{ + /* Check the PCD handle allocation */ + if (hpcd == NULL) + { + return HAL_ERROR; + } + + hpcd->State = HAL_PCD_STATE_BUSY; + + /* Stop Device */ + if (USB_StopDevice(hpcd->Instance) != HAL_OK) + { + return HAL_ERROR; + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + if (hpcd->MspDeInitCallback == NULL) + { + hpcd->MspDeInitCallback = HAL_PCD_MspDeInit; /* Legacy weak MspDeInit */ + } + + /* DeInit the low level hardware */ + hpcd->MspDeInitCallback(hpcd); +#else + /* DeInit the low level hardware: CLOCK, NVIC.*/ + HAL_PCD_MspDeInit(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + + hpcd->State = HAL_PCD_STATE_RESET; + + return HAL_OK; +} + +/** + * @brief Initializes the PCD MSP. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes PCD MSP. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +/** + * @brief Register a User USB PCD Callback + * To be used instead of the weak predefined callback + * @param hpcd USB PCD handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_PCD_SOF_CB_ID USB PCD SOF callback ID + * @arg @ref HAL_PCD_SETUPSTAGE_CB_ID USB PCD Setup callback ID + * @arg @ref HAL_PCD_RESET_CB_ID USB PCD Reset callback ID + * @arg @ref HAL_PCD_SUSPEND_CB_ID USB PCD Suspend callback ID + * @arg @ref HAL_PCD_RESUME_CB_ID USB PCD Resume callback ID + * @arg @ref HAL_PCD_CONNECT_CB_ID USB PCD Connect callback ID + * @arg @ref HAL_PCD_DISCONNECT_CB_ID USB PCD Disconnect callback ID + * @arg @ref HAL_PCD_MSPINIT_CB_ID MspDeInit callback ID + * @arg @ref HAL_PCD_MSPDEINIT_CB_ID MspDeInit callback ID + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd, + HAL_PCD_CallbackIDTypeDef CallbackID, + pPCD_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + switch (CallbackID) + { + case HAL_PCD_SOF_CB_ID : + hpcd->SOFCallback = pCallback; + break; + + case HAL_PCD_SETUPSTAGE_CB_ID : + hpcd->SetupStageCallback = pCallback; + break; + + case HAL_PCD_RESET_CB_ID : + hpcd->ResetCallback = pCallback; + break; + + case HAL_PCD_SUSPEND_CB_ID : + hpcd->SuspendCallback = pCallback; + break; + + case HAL_PCD_RESUME_CB_ID : + hpcd->ResumeCallback = pCallback; + break; + + case HAL_PCD_CONNECT_CB_ID : + hpcd->ConnectCallback = pCallback; + break; + + case HAL_PCD_DISCONNECT_CB_ID : + hpcd->DisconnectCallback = pCallback; + break; + + case HAL_PCD_MSPINIT_CB_ID : + hpcd->MspInitCallback = pCallback; + break; + + case HAL_PCD_MSPDEINIT_CB_ID : + hpcd->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (hpcd->State == HAL_PCD_STATE_RESET) + { + switch (CallbackID) + { + case HAL_PCD_MSPINIT_CB_ID : + hpcd->MspInitCallback = pCallback; + break; + + case HAL_PCD_MSPDEINIT_CB_ID : + hpcd->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + return status; +} + +/** + * @brief Unregister an USB PCD Callback + * USB PCD callback is redirected to the weak predefined callback + * @param hpcd USB PCD handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_PCD_SOF_CB_ID USB PCD SOF callback ID + * @arg @ref HAL_PCD_SETUPSTAGE_CB_ID USB PCD Setup callback ID + * @arg @ref HAL_PCD_RESET_CB_ID USB PCD Reset callback ID + * @arg @ref HAL_PCD_SUSPEND_CB_ID USB PCD Suspend callback ID + * @arg @ref HAL_PCD_RESUME_CB_ID USB PCD Resume callback ID + * @arg @ref HAL_PCD_CONNECT_CB_ID USB PCD Connect callback ID + * @arg @ref HAL_PCD_DISCONNECT_CB_ID USB PCD Disconnect callback ID + * @arg @ref HAL_PCD_MSPINIT_CB_ID MspDeInit callback ID + * @arg @ref HAL_PCD_MSPDEINIT_CB_ID MspDeInit callback ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + /* Setup Legacy weak Callbacks */ + if (hpcd->State == HAL_PCD_STATE_READY) + { + switch (CallbackID) + { + case HAL_PCD_SOF_CB_ID : + hpcd->SOFCallback = HAL_PCD_SOFCallback; + break; + + case HAL_PCD_SETUPSTAGE_CB_ID : + hpcd->SetupStageCallback = HAL_PCD_SetupStageCallback; + break; + + case HAL_PCD_RESET_CB_ID : + hpcd->ResetCallback = HAL_PCD_ResetCallback; + break; + + case HAL_PCD_SUSPEND_CB_ID : + hpcd->SuspendCallback = HAL_PCD_SuspendCallback; + break; + + case HAL_PCD_RESUME_CB_ID : + hpcd->ResumeCallback = HAL_PCD_ResumeCallback; + break; + + case HAL_PCD_CONNECT_CB_ID : + hpcd->ConnectCallback = HAL_PCD_ConnectCallback; + break; + + case HAL_PCD_DISCONNECT_CB_ID : + hpcd->DisconnectCallback = HAL_PCD_DisconnectCallback; + break; + + case HAL_PCD_MSPINIT_CB_ID : + hpcd->MspInitCallback = HAL_PCD_MspInit; + break; + + case HAL_PCD_MSPDEINIT_CB_ID : + hpcd->MspDeInitCallback = HAL_PCD_MspDeInit; + break; + + default : + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (hpcd->State == HAL_PCD_STATE_RESET) + { + switch (CallbackID) + { + case HAL_PCD_MSPINIT_CB_ID : + hpcd->MspInitCallback = HAL_PCD_MspInit; + break; + + case HAL_PCD_MSPDEINIT_CB_ID : + hpcd->MspDeInitCallback = HAL_PCD_MspDeInit; + break; + + default : + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + return status; +} + +/** + * @brief Register USB PCD Data OUT Stage Callback + * To be used instead of the weak HAL_PCD_DataOutStageCallback() predefined callback + * @param hpcd PCD handle + * @param pCallback pointer to the USB PCD Data OUT Stage Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, + pPCD_DataOutStageCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->DataOutStageCallback = pCallback; + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Unregister the USB PCD Data OUT Stage Callback + * USB PCD Data OUT Stage Callback is redirected to the weak HAL_PCD_DataOutStageCallback() predefined callback + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->DataOutStageCallback = HAL_PCD_DataOutStageCallback; /* Legacy weak DataOutStageCallback */ + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Register USB PCD Data IN Stage Callback + * To be used instead of the weak HAL_PCD_DataInStageCallback() predefined callback + * @param hpcd PCD handle + * @param pCallback pointer to the USB PCD Data IN Stage Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd, + pPCD_DataInStageCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->DataInStageCallback = pCallback; + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Unregister the USB PCD Data IN Stage Callback + * USB PCD Data OUT Stage Callback is redirected to the weak HAL_PCD_DataInStageCallback() predefined callback + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterDataInStageCallback(PCD_HandleTypeDef *hpcd) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->DataInStageCallback = HAL_PCD_DataInStageCallback; /* Legacy weak DataInStageCallback */ + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Register USB PCD Iso OUT incomplete Callback + * To be used instead of the weak HAL_PCD_ISOOUTIncompleteCallback() predefined callback + * @param hpcd PCD handle + * @param pCallback pointer to the USB PCD Iso OUT incomplete Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd, + pPCD_IsoOutIncpltCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->ISOOUTIncompleteCallback = pCallback; + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Unregister the USB PCD Iso OUT incomplete Callback + * USB PCD Iso OUT incomplete Callback is redirected + * to the weak HAL_PCD_ISOOUTIncompleteCallback() predefined callback + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->ISOOUTIncompleteCallback = HAL_PCD_ISOOUTIncompleteCallback; /* Legacy weak ISOOUTIncompleteCallback */ + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Register USB PCD Iso IN incomplete Callback + * To be used instead of the weak HAL_PCD_ISOINIncompleteCallback() predefined callback + * @param hpcd PCD handle + * @param pCallback pointer to the USB PCD Iso IN incomplete Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, + pPCD_IsoInIncpltCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->ISOINIncompleteCallback = pCallback; + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Unregister the USB PCD Iso IN incomplete Callback + * USB PCD Iso IN incomplete Callback is redirected + * to the weak HAL_PCD_ISOINIncompleteCallback() predefined callback + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->ISOINIncompleteCallback = HAL_PCD_ISOINIncompleteCallback; /* Legacy weak ISOINIncompleteCallback */ + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Register USB PCD BCD Callback + * To be used instead of the weak HAL_PCDEx_BCD_Callback() predefined callback + * @param hpcd PCD handle + * @param pCallback pointer to the USB PCD BCD Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterBcdCallback(PCD_HandleTypeDef *hpcd, pPCD_BcdCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->BCDCallback = pCallback; + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Unregister the USB PCD BCD Callback + * USB BCD Callback is redirected to the weak HAL_PCDEx_BCD_Callback() predefined callback + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterBcdCallback(PCD_HandleTypeDef *hpcd) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->BCDCallback = HAL_PCDEx_BCD_Callback; /* Legacy weak HAL_PCDEx_BCD_Callback */ + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Register USB PCD LPM Callback + * To be used instead of the weak HAL_PCDEx_LPM_Callback() predefined callback + * @param hpcd PCD handle + * @param pCallback pointer to the USB PCD LPM Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_RegisterLpmCallback(PCD_HandleTypeDef *hpcd, pPCD_LpmCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->LPMCallback = pCallback; + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} + +/** + * @brief Unregister the USB PCD LPM Callback + * USB LPM Callback is redirected to the weak HAL_PCDEx_LPM_Callback() predefined callback + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_UnRegisterLpmCallback(PCD_HandleTypeDef *hpcd) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hpcd); + + if (hpcd->State == HAL_PCD_STATE_READY) + { + hpcd->LPMCallback = HAL_PCDEx_LPM_Callback; /* Legacy weak HAL_PCDEx_LPM_Callback */ + } + else + { + /* Update the error code */ + hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hpcd); + + return status; +} +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup PCD_Exported_Functions_Group2 Input and Output operation functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the PCD data + transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Start the USB device + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + __HAL_LOCK(hpcd); + + if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) && + (hpcd->Init.battery_charging_enable == 1U)) + { + /* Enable USB Transceiver */ + USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN; + } + + __HAL_PCD_ENABLE(hpcd); + (void)USB_DevConnect(hpcd->Instance); + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +/** + * @brief Stop the USB device. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + __HAL_LOCK(hpcd); + __HAL_PCD_DISABLE(hpcd); + (void)USB_DevDisconnect(hpcd->Instance); + + (void)USB_FlushTxFifo(hpcd->Instance, 0x10U); + + if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) && + (hpcd->Init.battery_charging_enable == 1U)) + { + /* Disable USB Transceiver */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN); + } + + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** + * @brief Handles PCD interrupt request. + * @param hpcd PCD handle + * @retval HAL status + */ +void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + uint32_t USBx_BASE = (uint32_t)USBx; + USB_OTG_EPTypeDef *ep; + uint32_t i; + uint32_t ep_intr; + uint32_t epint; + uint32_t epnum; + uint32_t fifoemptymsk; + uint32_t RegVal; + + /* ensure that we are in device mode */ + if (USB_GetMode(hpcd->Instance) == USB_OTG_MODE_DEVICE) + { + /* avoid spurious interrupt */ + if (__HAL_PCD_IS_INVALID_INTERRUPT(hpcd)) + { + return; + } + + /* store current frame number */ + hpcd->FrameNumber = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF_Msk) >> USB_OTG_DSTS_FNSOF_Pos; + + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_MMIS)) + { + /* incorrect mode, acknowledge the interrupt */ + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS); + } + + /* Handle RxQLevel Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL)) + { + USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL); + + RegVal = USBx->GRXSTSP; + + ep = &hpcd->OUT_ep[RegVal & USB_OTG_GRXSTSP_EPNUM]; + + if (((RegVal & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT) + { + if ((RegVal & USB_OTG_GRXSTSP_BCNT) != 0U) + { + (void)USB_ReadPacket(USBx, ep->xfer_buff, + (uint16_t)((RegVal & USB_OTG_GRXSTSP_BCNT) >> 4)); + + ep->xfer_buff += (RegVal & USB_OTG_GRXSTSP_BCNT) >> 4; + ep->xfer_count += (RegVal & USB_OTG_GRXSTSP_BCNT) >> 4; + } + } + else if (((RegVal & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT) + { + (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U); + ep->xfer_count += (RegVal & USB_OTG_GRXSTSP_BCNT) >> 4; + } + else + { + /* ... */ + } + + USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL); + } + + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT)) + { + epnum = 0U; + + /* Read in the device interrupt bits */ + ep_intr = USB_ReadDevAllOutEpInterrupt(hpcd->Instance); + + while (ep_intr != 0U) + { + if ((ep_intr & 0x1U) != 0U) + { + epint = USB_ReadDevOutEPInterrupt(hpcd->Instance, (uint8_t)epnum); + + if ((epint & USB_OTG_DOEPINT_XFRC) == USB_OTG_DOEPINT_XFRC) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_XFRC); + (void)PCD_EP_OutXfrComplete_int(hpcd, epnum); + } + + if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP); + /* Class B setup phase done for previous decoded setup */ + (void)PCD_EP_OutSetupPacket_int(hpcd, epnum); + } + + if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPDIS); + } + + /* Clear OUT Endpoint disable interrupt */ + if ((epint & USB_OTG_DOEPINT_EPDISD) == USB_OTG_DOEPINT_EPDISD) + { + if ((USBx->GINTSTS & USB_OTG_GINTSTS_BOUTNAKEFF) == USB_OTG_GINTSTS_BOUTNAKEFF) + { + USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGONAK; + } + + ep = &hpcd->OUT_ep[epnum]; + + if (ep->is_iso_incomplete == 1U) + { + ep->is_iso_incomplete = 0U; + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum); +#else + HAL_PCD_ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_EPDISD); + } + + /* Clear Status Phase Received interrupt */ + if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR); + } + + /* Clear OUT NAK interrupt */ + if ((epint & USB_OTG_DOEPINT_NAK) == USB_OTG_DOEPINT_NAK) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_NAK); + } + } + epnum++; + ep_intr >>= 1U; + } + } + + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IEPINT)) + { + /* Read in the device interrupt bits */ + ep_intr = USB_ReadDevAllInEpInterrupt(hpcd->Instance); + + epnum = 0U; + + while (ep_intr != 0U) + { + if ((ep_intr & 0x1U) != 0U) /* In ITR */ + { + epint = USB_ReadDevInEPInterrupt(hpcd->Instance, (uint8_t)epnum); + + if ((epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC) + { + fifoemptymsk = (uint32_t)(0x1UL << (epnum & EP_ADDR_MSK)); + USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk; + + CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_XFRC); + + if (hpcd->Init.dma_enable == 1U) + { + hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket; + + /* this is ZLP, so prepare EP0 for next setup */ + if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U)) + { + /* prepare to rx more setup packets */ + (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup); + } + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->DataInStageCallback(hpcd, (uint8_t)epnum); +#else + HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC) + { + CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_TOC); + } + if ((epint & USB_OTG_DIEPINT_ITTXFE) == USB_OTG_DIEPINT_ITTXFE) + { + CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_ITTXFE); + } + if ((epint & USB_OTG_DIEPINT_INEPNE) == USB_OTG_DIEPINT_INEPNE) + { + CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_INEPNE); + } + if ((epint & USB_OTG_DIEPINT_EPDISD) == USB_OTG_DIEPINT_EPDISD) + { + (void)USB_FlushTxFifo(USBx, epnum); + + ep = &hpcd->IN_ep[epnum]; + + if (ep->is_iso_incomplete == 1U) + { + ep->is_iso_incomplete = 0U; + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum); +#else + HAL_PCD_ISOINIncompleteCallback(hpcd, (uint8_t)epnum); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + + CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_EPDISD); + } + if ((epint & USB_OTG_DIEPINT_TXFE) == USB_OTG_DIEPINT_TXFE) + { + (void)PCD_WriteEmptyTxFifo(hpcd, epnum); + } + } + epnum++; + ep_intr >>= 1U; + } + } + + /* Handle Resume Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT)) + { + /* Clear the Remote Wake-up Signaling */ + USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG; + + if (hpcd->LPM_State == LPM_L1) + { + hpcd->LPM_State = LPM_L0; + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->LPMCallback(hpcd, PCD_LPM_L0_ACTIVE); +#else + HAL_PCDEx_LPM_Callback(hpcd, PCD_LPM_L0_ACTIVE); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + else + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->ResumeCallback(hpcd); +#else + HAL_PCD_ResumeCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT); + } + + /* Handle Suspend Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP)) + { + if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS) + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->SuspendCallback(hpcd); +#else + HAL_PCD_SuspendCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP); + } +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \ + || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \ + || defined(STM32F423xx) + /* Handle LPM Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_LPMINT)) + { + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_LPMINT); + + if (hpcd->LPM_State == LPM_L0) + { + hpcd->LPM_State = LPM_L1; + hpcd->BESL = (hpcd->Instance->GLPMCFG & USB_OTG_GLPMCFG_BESL) >> 2U; + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->LPMCallback(hpcd, PCD_LPM_L1_ACTIVE); +#else + HAL_PCDEx_LPM_Callback(hpcd, PCD_LPM_L1_ACTIVE); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + else + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->SuspendCallback(hpcd); +#else + HAL_PCD_SuspendCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + } +#endif /* defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || + defined(STM32F423xx) */ + /* Handle Reset Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBRST)) + { + USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG; + (void)USB_FlushTxFifo(hpcd->Instance, 0x10U); + + for (i = 0U; i < hpcd->Init.dev_endpoints; i++) + { + USBx_INEP(i)->DIEPINT = 0xFB7FU; + USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL; + USBx_OUTEP(i)->DOEPINT = 0xFB7FU; + USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL; + USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK; + } + USBx_DEVICE->DAINTMSK |= 0x10001U; + + if (hpcd->Init.use_dedicated_ep1 != 0U) + { + USBx_DEVICE->DOUTEP1MSK |= USB_OTG_DOEPMSK_STUPM | + USB_OTG_DOEPMSK_XFRCM | + USB_OTG_DOEPMSK_EPDM; + + USBx_DEVICE->DINEP1MSK |= USB_OTG_DIEPMSK_TOM | + USB_OTG_DIEPMSK_XFRCM | + USB_OTG_DIEPMSK_EPDM; + } + else + { + USBx_DEVICE->DOEPMSK |= USB_OTG_DOEPMSK_STUPM | + USB_OTG_DOEPMSK_XFRCM | + USB_OTG_DOEPMSK_EPDM | + USB_OTG_DOEPMSK_OTEPSPRM | + USB_OTG_DOEPMSK_NAKM; + + USBx_DEVICE->DIEPMSK |= USB_OTG_DIEPMSK_TOM | + USB_OTG_DIEPMSK_XFRCM | + USB_OTG_DIEPMSK_EPDM; + } + + /* Set Default Address to 0 */ + USBx_DEVICE->DCFG &= ~USB_OTG_DCFG_DAD; + + /* setup EP0 to receive SETUP packets */ + (void)USB_EP0_OutStart(hpcd->Instance, (uint8_t)hpcd->Init.dma_enable, + (uint8_t *)hpcd->Setup); + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBRST); + } + + /* Handle Enumeration done Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE)) + { + (void)USB_ActivateSetup(hpcd->Instance); + hpcd->Init.speed = USB_GetDevSpeed(hpcd->Instance); + + /* Set USB Turnaround time */ + (void)USB_SetTurnaroundTime(hpcd->Instance, + HAL_RCC_GetHCLKFreq(), + (uint8_t)hpcd->Init.speed); + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->ResetCallback(hpcd); +#else + HAL_PCD_ResetCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE); + } + + /* Handle SOF Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF)) + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->SOFCallback(hpcd); +#else + HAL_PCD_SOFCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SOF); + } + + /* Handle Global OUT NAK effective Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_BOUTNAKEFF)) + { + USBx->GINTMSK &= ~USB_OTG_GINTMSK_GONAKEFFM; + + for (epnum = 1U; epnum < hpcd->Init.dev_endpoints; epnum++) + { + if (hpcd->OUT_ep[epnum].is_iso_incomplete == 1U) + { + /* Abort current transaction and disable the EP */ + (void)HAL_PCD_EP_Abort(hpcd, (uint8_t)epnum); + } + } + } + + /* Handle Incomplete ISO IN Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR)) + { + for (epnum = 1U; epnum < hpcd->Init.dev_endpoints; epnum++) + { + RegVal = USBx_INEP(epnum)->DIEPCTL; + + if ((hpcd->IN_ep[epnum].type == EP_TYPE_ISOC) && + ((RegVal & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)) + { + hpcd->IN_ep[epnum].is_iso_incomplete = 1U; + + /* Abort current transaction and disable the EP */ + (void)HAL_PCD_EP_Abort(hpcd, (uint8_t)(epnum | 0x80U)); + } + } + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR); + } + + /* Handle Incomplete ISO OUT Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT)) + { + for (epnum = 1U; epnum < hpcd->Init.dev_endpoints; epnum++) + { + RegVal = USBx_OUTEP(epnum)->DOEPCTL; + + if ((hpcd->OUT_ep[epnum].type == EP_TYPE_ISOC) && + ((RegVal & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) && + (((RegVal & (0x1U << 16)) >> 16U) == (hpcd->FrameNumber & 0x1U))) + { + hpcd->OUT_ep[epnum].is_iso_incomplete = 1U; + + USBx->GINTMSK |= USB_OTG_GINTMSK_GONAKEFFM; + + if ((USBx->GINTSTS & USB_OTG_GINTSTS_BOUTNAKEFF) == 0U) + { + USBx_DEVICE->DCTL |= USB_OTG_DCTL_SGONAK; + break; + } + } + } + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT); + } + + /* Handle Connection event Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT)) + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->ConnectCallback(hpcd); +#else + HAL_PCD_ConnectCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + + __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT); + } + + /* Handle Disconnection event Interrupt */ + if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OTGINT)) + { + RegVal = hpcd->Instance->GOTGINT; + + if ((RegVal & USB_OTG_GOTGINT_SEDET) == USB_OTG_GOTGINT_SEDET) + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->DisconnectCallback(hpcd); +#else + HAL_PCD_DisconnectCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + hpcd->Instance->GOTGINT |= RegVal; + } + } +} + + +/** + * @brief Handles PCD Wakeup interrupt request. + * @param hpcd PCD handle + * @retval HAL status + */ +void HAL_PCD_WKUP_IRQHandler(PCD_HandleTypeDef *hpcd) +{ +#if defined (USB_OTG_FS) + USB_OTG_GlobalTypeDef *USBx; + USBx = hpcd->Instance; + + if (USBx == USB_OTG_FS) + { + /* Clear EXTI pending Bit */ + __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG(); + } + else +#endif /* defined (USB_OTG_FS) */ + { + /* Clear EXTI pending Bit */ + __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG(); + } +} +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + + +/** + * @brief Data OUT stage callback. + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval None + */ +__weak void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + UNUSED(epnum); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_DataOutStageCallback could be implemented in the user file + */ +} + +/** + * @brief Data IN stage callback + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval None + */ +__weak void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + UNUSED(epnum); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_DataInStageCallback could be implemented in the user file + */ +} +/** + * @brief Setup stage callback + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_SetupStageCallback could be implemented in the user file + */ +} + +/** + * @brief USB Start Of Frame callback. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_SOFCallback could be implemented in the user file + */ +} + +/** + * @brief USB Reset callback. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_ResetCallback could be implemented in the user file + */ +} + +/** + * @brief Suspend event callback. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_SuspendCallback could be implemented in the user file + */ +} + +/** + * @brief Resume event callback. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_ResumeCallback could be implemented in the user file + */ +} + +/** + * @brief Incomplete ISO OUT callback. + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval None + */ +__weak void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + UNUSED(epnum); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_ISOOUTIncompleteCallback could be implemented in the user file + */ +} + +/** + * @brief Incomplete ISO IN callback. + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval None + */ +__weak void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + UNUSED(epnum); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_ISOINIncompleteCallback could be implemented in the user file + */ +} + +/** + * @brief Connection event callback. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_ConnectCallback could be implemented in the user file + */ +} + +/** + * @brief Disconnection event callback. + * @param hpcd PCD handle + * @retval None + */ +__weak void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCD_DisconnectCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup PCD_Exported_Functions_Group3 Peripheral Control functions + * @brief management functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the PCD data + transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Connect the USB device + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + __HAL_LOCK(hpcd); + + if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) && + (hpcd->Init.battery_charging_enable == 1U)) + { + /* Enable USB Transceiver */ + USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN; + } + (void)USB_DevConnect(hpcd->Instance); + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +/** + * @brief Disconnect the USB device. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + __HAL_LOCK(hpcd); + (void)USB_DevDisconnect(hpcd->Instance); + + if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) && + (hpcd->Init.battery_charging_enable == 1U)) + { + /* Disable USB Transceiver */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN); + } + + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +/** + * @brief Set the USB Device address. + * @param hpcd PCD handle + * @param address new device address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address) +{ + __HAL_LOCK(hpcd); + hpcd->USB_Address = address; + (void)USB_SetDevAddress(hpcd->Instance, address); + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} +/** + * @brief Open and configure an endpoint. + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @param ep_mps endpoint max packet size + * @param ep_type endpoint type + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, + uint16_t ep_mps, uint8_t ep_type) +{ + HAL_StatusTypeDef ret = HAL_OK; + PCD_EPTypeDef *ep; + + if ((ep_addr & 0x80U) == 0x80U) + { + ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 1U; + } + else + { + ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 0U; + } + + ep->num = ep_addr & EP_ADDR_MSK; + ep->maxpacket = (uint32_t)ep_mps & 0x7FFU; + ep->type = ep_type; + + if (ep->is_in != 0U) + { + /* Assign a Tx FIFO */ + ep->tx_fifo_num = ep->num; + } + + /* Set initial data PID. */ + if (ep_type == EP_TYPE_BULK) + { + ep->data_pid_start = 0U; + } + + __HAL_LOCK(hpcd); + (void)USB_ActivateEndpoint(hpcd->Instance, ep); + __HAL_UNLOCK(hpcd); + + return ret; +} + +/** + * @brief Deactivate an endpoint. + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) +{ + PCD_EPTypeDef *ep; + + if ((ep_addr & 0x80U) == 0x80U) + { + ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 1U; + } + else + { + ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 0U; + } + ep->num = ep_addr & EP_ADDR_MSK; + + __HAL_LOCK(hpcd); + (void)USB_DeactivateEndpoint(hpcd->Instance, ep); + __HAL_UNLOCK(hpcd); + return HAL_OK; +} + + +/** + * @brief Receive an amount of data. + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @param pBuf pointer to the reception buffer + * @param len amount of data to be received + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len) +{ + PCD_EPTypeDef *ep; + + ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK]; + + /*setup and start the Xfer */ + ep->xfer_buff = pBuf; + ep->xfer_len = len; + ep->xfer_count = 0U; + ep->is_in = 0U; + ep->num = ep_addr & EP_ADDR_MSK; + + if (hpcd->Init.dma_enable == 1U) + { + ep->dma_addr = (uint32_t)pBuf; + } + + (void)USB_EPStartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable); + + return HAL_OK; +} + +/** + * @brief Get Received Data Size + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @retval Data Size + */ +uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef const *hpcd, uint8_t ep_addr) +{ + return hpcd->OUT_ep[ep_addr & EP_ADDR_MSK].xfer_count; +} +/** + * @brief Send an amount of data + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @param pBuf pointer to the transmission buffer + * @param len amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len) +{ + PCD_EPTypeDef *ep; + + ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; + + /*setup and start the Xfer */ + ep->xfer_buff = pBuf; + ep->xfer_len = len; + ep->xfer_count = 0U; + ep->is_in = 1U; + ep->num = ep_addr & EP_ADDR_MSK; + + if (hpcd->Init.dma_enable == 1U) + { + ep->dma_addr = (uint32_t)pBuf; + } + + (void)USB_EPStartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable); + + return HAL_OK; +} + +/** + * @brief Set a STALL condition over an endpoint + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) +{ + PCD_EPTypeDef *ep; + + if (((uint32_t)ep_addr & EP_ADDR_MSK) > hpcd->Init.dev_endpoints) + { + return HAL_ERROR; + } + + if ((0x80U & ep_addr) == 0x80U) + { + ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 1U; + } + else + { + ep = &hpcd->OUT_ep[ep_addr]; + ep->is_in = 0U; + } + + ep->is_stall = 1U; + ep->num = ep_addr & EP_ADDR_MSK; + + __HAL_LOCK(hpcd); + + (void)USB_EPSetStall(hpcd->Instance, ep); + + if ((ep_addr & EP_ADDR_MSK) == 0U) + { + (void)USB_EP0_OutStart(hpcd->Instance, (uint8_t)hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup); + } + + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +/** + * @brief Clear a STALL condition over in an endpoint + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) +{ + PCD_EPTypeDef *ep; + + if (((uint32_t)ep_addr & 0x0FU) > hpcd->Init.dev_endpoints) + { + return HAL_ERROR; + } + + if ((0x80U & ep_addr) == 0x80U) + { + ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 1U; + } + else + { + ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK]; + ep->is_in = 0U; + } + + ep->is_stall = 0U; + ep->num = ep_addr & EP_ADDR_MSK; + + __HAL_LOCK(hpcd); + (void)USB_EPClearStall(hpcd->Instance, ep); + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +/** + * @brief Abort an USB EP transaction. + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_Abort(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) +{ + HAL_StatusTypeDef ret; + PCD_EPTypeDef *ep; + + if ((0x80U & ep_addr) == 0x80U) + { + ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; + } + else + { + ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK]; + } + + /* Stop Xfer */ + ret = USB_EPStopXfer(hpcd->Instance, ep); + + return ret; +} + +/** + * @brief Flush an endpoint + * @param hpcd PCD handle + * @param ep_addr endpoint address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) +{ + __HAL_LOCK(hpcd); + + if ((ep_addr & 0x80U) == 0x80U) + { + (void)USB_FlushTxFifo(hpcd->Instance, (uint32_t)ep_addr & EP_ADDR_MSK); + } + else + { + (void)USB_FlushRxFifo(hpcd->Instance); + } + + __HAL_UNLOCK(hpcd); + + return HAL_OK; +} + +/** + * @brief Activate remote wakeup signalling + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd) +{ + return (USB_ActivateRemoteWakeup(hpcd->Instance)); +} + +/** + * @brief De-activate remote wakeup signalling. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd) +{ + return (USB_DeActivateRemoteWakeup(hpcd->Instance)); +} + +/** + * @} + */ + +/** @defgroup PCD_Exported_Functions_Group4 Peripheral State functions + * @brief Peripheral State functions + * +@verbatim + =============================================================================== + ##### Peripheral State functions ##### + =============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the PCD handle state. + * @param hpcd PCD handle + * @retval HAL state + */ +PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef const *hpcd) +{ + return hpcd->State; +} + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** + * @brief Set the USB Device high speed test mode. + * @param hpcd PCD handle + * @param testmode USB Device high speed test mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCD_SetTestMode(const PCD_HandleTypeDef *hpcd, uint8_t testmode) +{ + const USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + uint32_t USBx_BASE = (uint32_t)USBx; + + switch (testmode) + { + case TEST_J: + case TEST_K: + case TEST_SE0_NAK: + case TEST_PACKET: + case TEST_FORCE_EN: + USBx_DEVICE->DCTL &= ~(0x7U << 4); + USBx_DEVICE->DCTL |= (uint32_t)testmode << 4; + break; + + default: + break; + } + + return HAL_OK; +} +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @addtogroup PCD_Private_Functions + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** + * @brief Check FIFO for the next packet to be loaded. + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval HAL status + */ +static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t epnum) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + uint32_t USBx_BASE = (uint32_t)USBx; + USB_OTG_EPTypeDef *ep; + uint32_t len; + uint32_t len32b; + uint32_t fifoemptymsk; + + ep = &hpcd->IN_ep[epnum]; + + if (ep->xfer_count > ep->xfer_len) + { + return HAL_ERROR; + } + + len = ep->xfer_len - ep->xfer_count; + + if (len > ep->maxpacket) + { + len = ep->maxpacket; + } + + len32b = (len + 3U) / 4U; + + while (((USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b) && + (ep->xfer_count < ep->xfer_len) && (ep->xfer_len != 0U)) + { + /* Write the FIFO */ + len = ep->xfer_len - ep->xfer_count; + + if (len > ep->maxpacket) + { + len = ep->maxpacket; + } + len32b = (len + 3U) / 4U; + + (void)USB_WritePacket(USBx, ep->xfer_buff, (uint8_t)epnum, (uint16_t)len, + (uint8_t)hpcd->Init.dma_enable); + + ep->xfer_buff += len; + ep->xfer_count += len; + } + + if (ep->xfer_len <= ep->xfer_count) + { + fifoemptymsk = (uint32_t)(0x1UL << (epnum & EP_ADDR_MSK)); + USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk; + } + + return HAL_OK; +} + + +/** + * @brief process EP OUT transfer complete interrupt. + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval HAL status + */ +static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint32_t epnum) +{ + USB_OTG_EPTypeDef *ep; + const USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t gSNPSiD = *(__IO const uint32_t *)(&USBx->CID + 0x1U); + uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT; + + if (hpcd->Init.dma_enable == 1U) + { + if ((DoepintReg & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP) /* Class C */ + { + /* StupPktRcvd = 1 this is a setup packet */ + if ((gSNPSiD > USB_OTG_CORE_ID_300A) && + ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX)) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX); + } + } + else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) /* Class E */ + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR); + } + else if ((DoepintReg & (USB_OTG_DOEPINT_STUP | USB_OTG_DOEPINT_OTEPSPR)) == 0U) + { + /* StupPktRcvd = 1 this is a setup packet */ + if ((gSNPSiD > USB_OTG_CORE_ID_300A) && + ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX)) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX); + } + else + { + ep = &hpcd->OUT_ep[epnum]; + + /* out data packet received over EP */ + ep->xfer_count = ep->xfer_size - (USBx_OUTEP(epnum)->DOEPTSIZ & USB_OTG_DOEPTSIZ_XFRSIZ); + + if (epnum == 0U) + { + if (ep->xfer_len == 0U) + { + /* this is ZLP, so prepare EP0 for next setup */ + (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup); + } + else + { + ep->xfer_buff += ep->xfer_count; + } + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum); +#else + HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + } + else + { + /* ... */ + } + } + else + { + if (gSNPSiD == USB_OTG_CORE_ID_310A) + { + /* StupPktRcvd = 1 this is a setup packet */ + if ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX); + } + else + { + if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR); + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum); +#else + HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + } + else + { + if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U)) + { + /* this is ZLP, so prepare EP0 for next setup */ + (void)USB_EP0_OutStart(hpcd->Instance, 0U, (uint8_t *)hpcd->Setup); + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum); +#else + HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + } + + return HAL_OK; +} + + +/** + * @brief process EP OUT setup packet received interrupt. + * @param hpcd PCD handle + * @param epnum endpoint number + * @retval HAL status + */ +static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint32_t epnum) +{ + const USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t gSNPSiD = *(__IO const uint32_t *)(&USBx->CID + 0x1U); + uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT; + + if ((gSNPSiD > USB_OTG_CORE_ID_300A) && + ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX)) + { + CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX); + } + + /* Inform the upper layer that a setup packet is available */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->SetupStageCallback(hpcd); +#else + HAL_PCD_SetupStageCallback(hpcd); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + + if ((gSNPSiD > USB_OTG_CORE_ID_300A) && (hpcd->Init.dma_enable == 1U)) + { + (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup); + } + + return HAL_OK; +} +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +#endif /* HAL_PCD_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c new file mode 100644 index 00000000..b66be6ac --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c @@ -0,0 +1,347 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pcd_ex.c + * @author MCD Application Team + * @brief PCD Extended HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the USB Peripheral Controller: + * + Extended features functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup PCDEx PCDEx + * @brief PCD Extended HAL module driver + * @{ + */ + +#ifdef HAL_PCD_MODULE_ENABLED + +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions + * @{ + */ + +/** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions + * @brief PCDEx control functions + * +@verbatim + =============================================================================== + ##### Extended features functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Update FIFO configuration + +@endverbatim + * @{ + */ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/** + * @brief Set Tx FIFO + * @param hpcd PCD handle + * @param fifo The number of Tx fifo + * @param size Fifo size + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size) +{ + uint8_t i; + uint32_t Tx_Offset; + + /* TXn min size = 16 words. (n : Transmit FIFO index) + When a TxFIFO is not used, the Configuration should be as follows: + case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes) + --> Txm can use the space allocated for Txn. + case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes) + --> Txn should be configured with the minimum space of 16 words + The FIFO is used optimally when used TxFIFOs are allocated in the top + of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones. + When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */ + + Tx_Offset = hpcd->Instance->GRXFSIZ; + + if (fifo == 0U) + { + hpcd->Instance->DIEPTXF0_HNPTXFSIZ = ((uint32_t)size << 16) | Tx_Offset; + } + else + { + Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16; + for (i = 0U; i < (fifo - 1U); i++) + { + Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16); + } + + /* Multiply Tx_Size by 2 to get higher performance */ + hpcd->Instance->DIEPTXF[fifo - 1U] = ((uint32_t)size << 16) | Tx_Offset; + } + + return HAL_OK; +} + +/** + * @brief Set Rx FIFO + * @param hpcd PCD handle + * @param size Size of Rx fifo + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size) +{ + hpcd->Instance->GRXFSIZ = size; + + return HAL_OK; +} +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \ + || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \ + || defined(STM32F423xx) +/** + * @brief Activate LPM feature. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCDEx_ActivateLPM(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + hpcd->lpm_active = 1U; + hpcd->LPM_State = LPM_L0; + USBx->GINTMSK |= USB_OTG_GINTMSK_LPMINTM; + USBx->GLPMCFG |= (USB_OTG_GLPMCFG_LPMEN | USB_OTG_GLPMCFG_LPMACK | USB_OTG_GLPMCFG_ENBESL); + + return HAL_OK; +} + +/** + * @brief Deactivate LPM feature. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCDEx_DeActivateLPM(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + hpcd->lpm_active = 0U; + USBx->GINTMSK &= ~USB_OTG_GINTMSK_LPMINTM; + USBx->GLPMCFG &= ~(USB_OTG_GLPMCFG_LPMEN | USB_OTG_GLPMCFG_LPMACK | USB_OTG_GLPMCFG_ENBESL); + + return HAL_OK; +} +#endif /* defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || + defined(STM32F423xx) */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) \ + || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Handle BatteryCharging Process. + * @param hpcd PCD handle + * @retval HAL status + */ +void HAL_PCDEx_BCD_VBUSDetect(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + uint32_t tickstart = HAL_GetTick(); + + /* Enable DCD : Data Contact Detect */ + USBx->GCCFG |= USB_OTG_GCCFG_DCDEN; + + /* Wait for Min DCD Timeout */ + HAL_Delay(300U); + + /* Check Detect flag */ + if ((USBx->GCCFG & USB_OTG_GCCFG_DCDET) == USB_OTG_GCCFG_DCDET) + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->BCDCallback(hpcd, PCD_BCD_CONTACT_DETECTION); +#else + HAL_PCDEx_BCD_Callback(hpcd, PCD_BCD_CONTACT_DETECTION); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + + /* Primary detection: checks if connected to Standard Downstream Port + (without charging capability) */ + USBx->GCCFG &= ~USB_OTG_GCCFG_DCDEN; + HAL_Delay(50U); + USBx->GCCFG |= USB_OTG_GCCFG_PDEN; + HAL_Delay(50U); + + if ((USBx->GCCFG & USB_OTG_GCCFG_PDET) == 0U) + { + /* Case of Standard Downstream Port */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->BCDCallback(hpcd, PCD_BCD_STD_DOWNSTREAM_PORT); +#else + HAL_PCDEx_BCD_Callback(hpcd, PCD_BCD_STD_DOWNSTREAM_PORT); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + else + { + /* start secondary detection to check connection to Charging Downstream + Port or Dedicated Charging Port */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_PDEN); + HAL_Delay(50U); + USBx->GCCFG |= USB_OTG_GCCFG_SDEN; + HAL_Delay(50U); + + if ((USBx->GCCFG & USB_OTG_GCCFG_SDET) == USB_OTG_GCCFG_SDET) + { + /* case Dedicated Charging Port */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->BCDCallback(hpcd, PCD_BCD_DEDICATED_CHARGING_PORT); +#else + HAL_PCDEx_BCD_Callback(hpcd, PCD_BCD_DEDICATED_CHARGING_PORT); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + else + { + /* case Charging Downstream Port */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->BCDCallback(hpcd, PCD_BCD_CHARGING_DOWNSTREAM_PORT); +#else + HAL_PCDEx_BCD_Callback(hpcd, PCD_BCD_CHARGING_DOWNSTREAM_PORT); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + } + + /* Battery Charging capability discovery finished */ + (void)HAL_PCDEx_DeActivateBCD(hpcd); + + /* Check for the Timeout, else start USB Device */ + if ((HAL_GetTick() - tickstart) > 1000U) + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->BCDCallback(hpcd, PCD_BCD_ERROR); +#else + HAL_PCDEx_BCD_Callback(hpcd, PCD_BCD_ERROR); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } + else + { +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + hpcd->BCDCallback(hpcd, PCD_BCD_DISCOVERY_COMPLETED); +#else + HAL_PCDEx_BCD_Callback(hpcd, PCD_BCD_DISCOVERY_COMPLETED); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + } +} + +/** + * @brief Activate BatteryCharging feature. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCDEx_ActivateBCD(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + USBx->GCCFG &= ~(USB_OTG_GCCFG_PDEN); + USBx->GCCFG &= ~(USB_OTG_GCCFG_SDEN); + + /* Power Down USB transceiver */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN); + + /* Enable Battery charging */ + USBx->GCCFG |= USB_OTG_GCCFG_BCDEN; + + hpcd->battery_charging_active = 1U; + + return HAL_OK; +} + +/** + * @brief Deactivate BatteryCharging feature. + * @param hpcd PCD handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PCDEx_DeActivateBCD(PCD_HandleTypeDef *hpcd) +{ + USB_OTG_GlobalTypeDef *USBx = hpcd->Instance; + + USBx->GCCFG &= ~(USB_OTG_GCCFG_SDEN); + USBx->GCCFG &= ~(USB_OTG_GCCFG_PDEN); + + /* Disable Battery charging */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_BCDEN); + + hpcd->battery_charging_active = 0U; + + return HAL_OK; +} +#endif /* defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +/** + * @brief Send LPM message to user layer callback. + * @param hpcd PCD handle + * @param msg LPM message + * @retval HAL status + */ +__weak void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + UNUSED(msg); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCDEx_LPM_Callback could be implemented in the user file + */ +} + +/** + * @brief Send BatteryCharging message to user layer callback. + * @param hpcd PCD handle + * @param msg LPM message + * @retval HAL status + */ +__weak void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hpcd); + UNUSED(msg); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_PCDEx_BCD_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +#endif /* HAL_PCD_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c new file mode 100644 index 00000000..5ccde648 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c @@ -0,0 +1,598 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr.c + * @author MCD Application Team + * @brief PWR HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Power Controller (PWR) peripheral: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup PWR PWR + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup PWR_Private_Constants + * @{ + */ + +/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask + * @{ + */ +#define PVD_MODE_IT 0x00010000U +#define PVD_MODE_EVT 0x00020000U +#define PVD_RISING_EDGE 0x00000001U +#define PVD_FALLING_EDGE 0x00000002U +/** + * @} + */ + +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + After reset, the backup domain (RTC registers, RTC backup data + registers and backup SRAM) is protected against possible unwanted + write accesses. + To enable access to the RTC Domain and RTC registers, proceed as follows: + (+) Enable the Power Controller (PWR) APB1 interface clock using the + __HAL_RCC_PWR_CLK_ENABLE() macro. + (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the HAL PWR peripheral registers to their default reset values. + * @retval None + */ +void HAL_PWR_DeInit(void) +{ + __HAL_RCC_PWR_FORCE_RESET(); + __HAL_RCC_PWR_RELEASE_RESET(); +} + +/** + * @brief Enables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @note The following sequence is required to bypass the delay between + * DBP bit programming and the effective enabling of the backup domain. + * Please check the Errata Sheet for more details under "Possible delay + * in backup domain protection disabling/enabling after programming the + * DBP bit" section. + * @retval None + */ +void HAL_PWR_EnableBkUpAccess(void) +{ + __IO uint32_t dummyread; + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE; + dummyread = PWR->CR; + UNUSED(dummyread); +} + +/** + * @brief Disables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @note The following sequence is required to bypass the delay between + * DBP bit programming and the effective disabling of the backup domain. + * Please check the Errata Sheet for more details under "Possible delay + * in backup domain protection disabling/enabling after programming the + * DBP bit" section. + * @retval None + */ +void HAL_PWR_DisableBkUpAccess(void) +{ + __IO uint32_t dummyread; + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)DISABLE; + dummyread = PWR->CR; + UNUSED(dummyread); +} + +/** + * @} + */ + +/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @brief Low Power modes configuration functions + * +@verbatim + + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + + *** PVD configuration *** + ========================= + [..] + (+) The PVD is used to monitor the VDD power supply by comparing it to a + threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR). + (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower + than the PVD threshold. This event is internally connected to the EXTI + line16 and can generate an interrupt if enabled. This is done through + __HAL_PWR_PVD_EXTI_ENABLE_IT() macro. + (+) The PVD is stopped in Standby mode. + + *** Wake-up pin configuration *** + ================================ + [..] + (+) Wake-up pin is used to wake up the system from Standby mode. This pin is + forced in input pull-down configuration and is active on rising edges. + (+) There is one Wake-up pin: Wake-up Pin 1 on PA.00. + (++) For STM32F446xx there are two Wake-Up pins: Pin1 on PA.00 and Pin2 on PC.13 + (++) For STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx there are three Wake-Up pins: Pin1 on PA.00, Pin2 on PC.00 and Pin3 on PC.01 + + *** Low Power modes configuration *** + ===================================== + [..] + The devices feature 3 low-power modes: + (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running. + (+) Stop mode: all clocks are stopped, regulator running, regulator + in low power mode + (+) Standby mode: 1.2V domain powered off. + + *** Sleep mode *** + ================== + [..] + (+) Entry: + The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(Regulator, SLEEPEntry) + functions with + (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + (++) PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR: Enter SLEEP mode with WFE instruction and + no clear of pending event before. + + -@@- The Regulator parameter is not used for the STM32F4 family + and is kept as parameter just to maintain compatibility with the + lower power families (STM32L). + (+) Exit: + Any peripheral interrupt acknowledged by the nested vectored interrupt + controller (NVIC) can wake up the device from Sleep mode. + + *** Stop mode *** + ================= + [..] + In Stop mode, all clocks in the 1.2V domain are stopped, the PLL, the HSI, + and the HSE RC oscillators are disabled. Internal SRAM and register contents + are preserved. + The voltage regulator can be configured either in normal or low-power mode. + To minimize the consumption In Stop mode, FLASH can be powered off before + entering the Stop mode using the HAL_PWREx_EnableFlashPowerDown() function. + It can be switched on again by software after exiting the Stop mode using + the HAL_PWREx_DisableFlashPowerDown() function. + + (+) Entry: + The Stop mode is entered using the HAL_PWR_EnterSTOPMode(Regulator, STOPEntry) + function with: + (++) Regulator: + (+++) Main regulator ON. + (+++) Low Power regulator ON. + (++) STOPEntry: + (+++) PWR_STOPENTRY_WFI : Enter STOP mode with WFI instruction. + (+++) PWR_STOPENTRY_WFE : Enter STOP mode with WFE instruction and + clear of pending events before. + (+++) PWR_STOPENTRY_WFE_NO_EVT_CLEAR : Enter STOP mode with WFE instruction and + no clear of pending event before. + (+) Exit: + Any EXTI Line (Internal or External) configured in Interrupt/Event mode. + + *** Standby mode *** + ==================== + [..] + (+) + The Standby mode allows to achieve the lowest power consumption. It is based + on the Cortex-M4 deep sleep mode, with the voltage regulator disabled. + The 1.2V domain is consequently powered off. The PLL, the HSI oscillator and + the HSE oscillator are also switched off. SRAM and register contents are lost + except for the RTC registers, RTC backup registers, backup SRAM and Standby + circuitry. + + The voltage regulator is OFF. + + (++) Entry: + (+++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function. + (++) Exit: + (+++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wake-up, + tamper event, time-stamp event, external reset in NRST pin, IWDG reset. + + *** Auto-wake-up (AWU) from low-power mode *** + ============================================= + [..] + + (+) The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC + Wake-up event, a tamper event or a time-stamp event, without depending on + an external interrupt (Auto-wake-up mode). + + (+) RTC auto-wake-up (AWU) from the Stop and Standby modes + + (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to + configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function. + + (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it + is necessary to configure the RTC to detect the tamper or time stamp event using the + HAL_RTCEx_SetTimeStamp_IT() or HAL_RTCEx_SetTamper_IT() functions. + + (++) To wake up from the Stop mode with an RTC Wake-up event, it is necessary to + configure the RTC to generate the RTC Wake-up event using the HAL_RTCEx_SetWakeUpTimer_IT() function. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD). + * @param sConfigPVD pointer to an PWR_PVDTypeDef structure that contains the configuration + * information for the PVD. + * @note Refer to the electrical characteristics of your device datasheet for + * more details about the voltage threshold corresponding to each + * detection level. + * @retval None + */ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) +{ + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel)); + assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode)); + + /* Set PLS[7:5] bits according to PVDLevel value */ + MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel); + + /* Clear any previous config. Keep it clear if no event or IT mode is selected */ + __HAL_PWR_PVD_EXTI_DISABLE_EVENT(); + __HAL_PWR_PVD_EXTI_DISABLE_IT(); + __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE(); + __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + + /* Configure interrupt mode */ + if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) + { + __HAL_PWR_PVD_EXTI_ENABLE_IT(); + } + + /* Configure event mode */ + if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) + { + __HAL_PWR_PVD_EXTI_ENABLE_EVENT(); + } + + /* Configure the edge */ + if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE(); + } + + if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + } +} + +/** + * @brief Enables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_EnablePVD(void) +{ + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_DisablePVD(void) +{ + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)DISABLE; +} + +/** + * @brief Enables the Wake-up PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to enable. + * This parameter can be one of the following values: + * @arg PWR_WAKEUP_PIN1 + * @arg PWR_WAKEUP_PIN2 available only on STM32F410xx/STM32F446xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @arg PWR_WAKEUP_PIN3 available only on STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @retval None + */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameter */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + + /* Enable the wake up pin */ + SET_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Disables the Wake-up PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to disable. + * This parameter can be one of the following values: + * @arg PWR_WAKEUP_PIN1 + * @arg PWR_WAKEUP_PIN2 available only on STM32F410xx/STM32F446xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @arg PWR_WAKEUP_PIN3 available only on STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @retval None + */ +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameter */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + + /* Disable the wake up pin */ + CLEAR_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Enters Sleep mode. + * + * @note In Sleep mode, all I/O pins keep the same state as in Run mode. + * + * @note In Sleep mode, the systick is stopped to avoid exit from this mode with + * systick interrupt when used as time base for Timeout + * + * @param Regulator Specifies the regulator state in SLEEP mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: SLEEP mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: SLEEP mode with low power regulator ON + * @note This parameter is not used for the STM32F4 family and is kept as parameter + * just to maintain compatibility with the lower power families. + * @param SLEEPEntry Specifies if SLEEP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_SLEEPENTRY_WFI : Enter SLEEP mode with WFI instruction + * @arg PWR_SLEEPENTRY_WFE : Enter SLEEP mode with WFE instruction and + * clear of pending events before. + * @arg PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR : Enter SLEEP mode with WFE instruction and + * no clear of pending event before. + * @retval None + */ +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(Regulator); + + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry)); + + /* Clear SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* Select SLEEP mode entry -------------------------------------------------*/ + if(SLEEPEntry == PWR_SLEEPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + if(SLEEPEntry != PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR) + { + /* Clear all pending event */ + __SEV(); + __WFE(); + } + + /* Request Wait For Event */ + __WFE(); + } +} + +/** + * @brief Enters Stop mode. + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * @note When exiting Stop mode by issuing an interrupt or a wake-up event, + * the HSI RC oscillator is selected as system clock. + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * @param Regulator Specifies the regulator state in Stop mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON + * @param STOPEntry Specifies if Stop mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_STOPENTRY_WFI : Enter Stop mode with WFI instruction + * @arg PWR_STOPENTRY_WFE : Enter Stop mode with WFE instruction and + * clear of pending events before. + * @arg PWR_STOPENTRY_WFE_NO_EVT_CLEAR : Enter STOP mode with WFE instruction and + * no clear of pending event before. + * @retval None + */ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) +{ + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Select the regulator state in Stop mode: Set PDDS and LPDS bits according to PWR_Regulator value */ + MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS), Regulator); + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* Select Stop mode entry --------------------------------------------------*/ + if(STOPEntry == PWR_STOPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + if(STOPEntry != PWR_STOPENTRY_WFE_NO_EVT_CLEAR) + { + /* Clear all pending event */ + __SEV(); + __WFE(); + } + /* Request Wait For Event */ + __WFE(); + } + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Enters Standby mode. + * @note In Standby mode, all I/O pins are high impedance except for: + * - Reset pad (still available) + * - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC + * Alarm out, or RTC clock calibration out. + * - RTC_AF2 pin (PI8) if configured for tamper or time-stamp. + * - WKUP pin 1 (PA0) if enabled. + * @retval None + */ +void HAL_PWR_EnterSTANDBYMode(void) +{ + /* Select Standby mode */ + SET_BIT(PWR->CR, PWR_CR_PDDS); + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + +/** + * @brief This function handles the PWR PVD interrupt request. + * @note This API should be called under the PVD_IRQHandler(). + * @retval None + */ +void HAL_PWR_PVD_IRQHandler(void) +{ + /* Check PWR Exti flag */ + if(__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) + { + /* PWR PVD interrupt user callback */ + HAL_PWR_PVDCallback(); + + /* Clear PWR Exti pending bit */ + __HAL_PWR_PVD_EXTI_CLEAR_FLAG(); + } +} + +/** + * @brief PWR PVD interrupt callback + * @retval None + */ +__weak void HAL_PWR_PVDCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_PWR_PVDCallback could be implemented in the user file + */ +} + +/** + * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode. + * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * Setting this bit is useful when the processor is expected to run only on + * interruptions handling. + * @retval None + */ +void HAL_PWR_EnableSleepOnExit(void) +{ + /* Set SLEEPONEXIT bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode. + * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * @retval None + */ +void HAL_PWR_DisableSleepOnExit(void) +{ + /* Clear SLEEPONEXIT bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Enables CORTEX M4 SEVONPEND bit. + * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_EnableSEVOnPend(void) +{ + /* Set SEVONPEND bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @brief Disables CORTEX M4 SEVONPEND bit. + * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_DisableSEVOnPend(void) +{ + /* Clear SEVONPEND bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c new file mode 100644 index 00000000..77f9c35b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c @@ -0,0 +1,600 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr_ex.c + * @author MCD Application Team + * @brief Extended PWR HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of PWR extension peripheral: + * + Peripheral Extended features functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup PWREx PWREx + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup PWREx_Private_Constants + * @{ + */ +#define PWR_OVERDRIVE_TIMEOUT_VALUE 1000U +#define PWR_UDERDRIVE_TIMEOUT_VALUE 1000U +#define PWR_BKPREG_TIMEOUT_VALUE 1000U +#define PWR_VOSRDY_TIMEOUT_VALUE 1000U +/** + * @} + */ + + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Functions PWREx Exported Functions + * @{ + */ + +/** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended features functions + * @brief Peripheral Extended features functions + * +@verbatim + + =============================================================================== + ##### Peripheral extended features functions ##### + =============================================================================== + + *** Main and Backup Regulators configuration *** + ================================================ + [..] + (+) The backup domain includes 4 Kbytes of backup SRAM accessible only from + the CPU, and address in 32-bit, 16-bit or 8-bit mode. Its content is + retained even in Standby or VBAT mode when the low power backup regulator + is enabled. It can be considered as an internal EEPROM when VBAT is + always present. You can use the HAL_PWREx_EnableBkUpReg() function to + enable the low power backup regulator. + + (+) When the backup domain is supplied by VDD (analog switch connected to VDD) + the backup SRAM is powered from VDD which replaces the VBAT power supply to + save battery life. + + (+) The backup SRAM is not mass erased by a tamper event. It is read + protected to prevent confidential data, such as cryptographic private + key, from being accessed. The backup SRAM can be erased only through + the Flash interface when a protection level change from level 1 to + level 0 is requested. + -@- Refer to the description of Read protection (RDP) in the Flash + programming manual. + + (+) The main internal regulator can be configured to have a tradeoff between + performance and power consumption when the device does not operate at + the maximum frequency. This is done through __HAL_PWR_MAINREGULATORMODE_CONFIG() + macro which configure VOS bit in PWR_CR register + + Refer to the product datasheets for more details. + + *** FLASH Power Down configuration **** + ======================================= + [..] + (+) By setting the FPDS bit in the PWR_CR register by using the + HAL_PWREx_EnableFlashPowerDown() function, the Flash memory also enters power + down mode when the device enters Stop mode. When the Flash memory + is in power down mode, an additional startup delay is incurred when + waking up from Stop mode. + + (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, the scale can be modified only when the PLL + is OFF and the HSI or HSE clock source is selected as system clock. + The new value programmed is active only when the PLL is ON. + When the PLL is OFF, the voltage scale 3 is automatically selected. + Refer to the datasheets for more details. + + *** Over-Drive and Under-Drive configuration **** + ================================================= + [..] + (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, in Run mode: the main regulator has + 2 operating modes available: + (++) Normal mode: The CPU and core logic operate at maximum frequency at a given + voltage scaling (scale 1, scale 2 or scale 3) + (++) Over-drive mode: This mode allows the CPU and the core logic to operate at a + higher frequency than the normal mode for a given voltage scaling (scale 1, + scale 2 or scale 3). This mode is enabled through HAL_PWREx_EnableOverDrive() function and + disabled by HAL_PWREx_DisableOverDrive() function, to enter or exit from Over-drive mode please follow + the sequence described in Reference manual. + + (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, in Stop mode: the main regulator or low power regulator + supplies a low power voltage to the 1.2V domain, thus preserving the content of registers + and internal SRAM. 2 operating modes are available: + (++) Normal mode: the 1.2V domain is preserved in nominal leakage mode. This mode is only + available when the main regulator or the low power regulator is used in Scale 3 or + low voltage mode. + (++) Under-drive mode: the 1.2V domain is preserved in reduced leakage mode. This mode is only + available when the main regulator or the low power regulator is in low voltage mode. + +@endverbatim + * @{ + */ + +/** + * @brief Enables the Backup Regulator. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void) +{ + uint32_t tickstart = 0U; + + *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)ENABLE; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till Backup regulator ready flag is set */ + while(__HAL_PWR_GET_FLAG(PWR_FLAG_BRR) == RESET) + { + if((HAL_GetTick() - tickstart ) > PWR_BKPREG_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Disables the Backup Regulator. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void) +{ + uint32_t tickstart = 0U; + + *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)DISABLE; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till Backup regulator ready flag is set */ + while(__HAL_PWR_GET_FLAG(PWR_FLAG_BRR) != RESET) + { + if((HAL_GetTick() - tickstart ) > PWR_BKPREG_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Enables the Flash Power Down in Stop mode. + * @retval None + */ +void HAL_PWREx_EnableFlashPowerDown(void) +{ + *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Flash Power Down in Stop mode. + * @retval None + */ +void HAL_PWREx_DisableFlashPowerDown(void) +{ + *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)DISABLE; +} + +/** + * @brief Return Voltage Scaling Range. + * @retval The configured scale for the regulator voltage(VOS bit field). + * The returned value can be one of the following: + * - @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode + * - @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode + * - @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode + */ +uint32_t HAL_PWREx_GetVoltageRange(void) +{ + return (PWR->CR & PWR_CR_VOS); +} + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) +/** + * @brief Configures the main internal regulator output voltage. + * @param VoltageScaling specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption. + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output range 1 mode, + * the maximum value of fHCLK = 168 MHz. + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output range 2 mode, + * the maximum value of fHCLK = 144 MHz. + * @note When moving from Range 1 to Range 2, the system frequency must be decreased to + * a value below 144 MHz before calling HAL_PWREx_ConfigVoltageScaling() API. + * When moving from Range 2 to Range 1, the system frequency can be increased to + * a value up to 168 MHz after calling HAL_PWREx_ConfigVoltageScaling() API. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling) +{ + uint32_t tickstart = 0U; + + assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling)); + + /* Enable PWR RCC Clock Peripheral */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Set Range */ + __HAL_PWR_VOLTAGESCALING_CONFIG(VoltageScaling); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + while((__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == RESET)) + { + if((HAL_GetTick() - tickstart ) > PWR_VOSRDY_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) || \ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Configures the main internal regulator output voltage. + * @param VoltageScaling specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption. + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output range 1 mode, + * the maximum value of fHCLK is 168 MHz. It can be extended to + * 180 MHz by activating the over-drive mode. + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output range 2 mode, + * the maximum value of fHCLK is 144 MHz. It can be extended to, + * 168 MHz by activating the over-drive mode. + * @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output range 3 mode, + * the maximum value of fHCLK is 120 MHz. + * @note To update the system clock frequency(SYSCLK): + * - Set the HSI or HSE as system clock frequency using the HAL_RCC_ClockConfig(). + * - Call the HAL_RCC_OscConfig() to configure the PLL. + * - Call HAL_PWREx_ConfigVoltageScaling() API to adjust the voltage scale. + * - Set the new system clock frequency using the HAL_RCC_ClockConfig(). + * @note The scale can be modified only when the HSI or HSE clock source is selected + * as system clock source, otherwise the API returns HAL_ERROR. + * @note When the PLL is OFF, the voltage scale 3 is automatically selected and the VOS bits + * value in the PWR_CR1 register are not taken in account. + * @note This API forces the PLL state ON to allow the possibility to configure the voltage scale 1 or 2. + * @note The new voltage scale is active only when the PLL is ON. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling) +{ + uint32_t tickstart = 0U; + + assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling)); + + /* Enable PWR RCC Clock Peripheral */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + { + /* Disable the main PLL */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set Range */ + __HAL_PWR_VOLTAGESCALING_CONFIG(VoltageScaling); + + /* Enable the main PLL */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + while((__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == RESET)) + { + if((HAL_GetTick() - tickstart ) > PWR_VOSRDY_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Enables Main Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xx devices. + * @retval None + */ +void HAL_PWREx_EnableMainRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_MRLVDS_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables Main Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xxdevices. + * @retval None + */ +void HAL_PWREx_DisableMainRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_MRLVDS_BB = (uint32_t)DISABLE; +} + +/** + * @brief Enables Low Power Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xx devices. + * @retval None + */ +void HAL_PWREx_EnableLowRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_LPLVDS_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables Low Power Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xx devices. + * @retval None + */ +void HAL_PWREx_DisableLowRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_LPLVDS_BB = (uint32_t)DISABLE; +} + +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Activates the Over-Drive mode. + * @note This function can be used only for STM32F42xx/STM32F43xx/STM32F446xx/STM32F469xx/STM32F479xx devices. + * This mode allows the CPU and the core logic to operate at a higher frequency + * than the normal mode for a given voltage scaling (scale 1, scale 2 or scale 3). + * @note It is recommended to enter or exit Over-drive mode when the application is not running + * critical tasks and when the system clock source is either HSI or HSE. + * During the Over-drive switch activation, no peripheral clocks should be enabled. + * The peripheral clocks must be enabled once the Over-drive mode is activated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void) +{ + uint32_t tickstart = 0U; + + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable the Over-drive to extend the clock frequency to 180 Mhz */ + __HAL_PWR_OVERDRIVE_ENABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY)) + { + if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Enable the Over-drive switch */ + __HAL_PWR_OVERDRIVESWITCHING_ENABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY)) + { + if((HAL_GetTick() - tickstart ) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Deactivates the Over-Drive mode. + * @note This function can be used only for STM32F42xx/STM32F43xx/STM32F446xx/STM32F469xx/STM32F479xx devices. + * This mode allows the CPU and the core logic to operate at a higher frequency + * than the normal mode for a given voltage scaling (scale 1, scale 2 or scale 3). + * @note It is recommended to enter or exit Over-drive mode when the application is not running + * critical tasks and when the system clock source is either HSI or HSE. + * During the Over-drive switch activation, no peripheral clocks should be enabled. + * The peripheral clocks must be enabled once the Over-drive mode is activated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void) +{ + uint32_t tickstart = 0U; + + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Disable the Over-drive switch */ + __HAL_PWR_OVERDRIVESWITCHING_DISABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY)) + { + if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Disable the Over-drive */ + __HAL_PWR_OVERDRIVE_DISABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY)) + { + if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +/** + * @brief Enters in Under-Drive STOP mode. + * + * @note This mode is only available for STM32F42xxx/STM32F43xxx/STM32F446xx/STM32F469xx/STM32F479xx devices. + * + * @note This mode can be selected only when the Under-Drive is already active + * + * @note This mode is enabled only with STOP low power mode. + * In this mode, the 1.2V domain is preserved in reduced leakage mode. This + * mode is only available when the main regulator or the low power regulator + * is in low voltage mode + * + * @note If the Under-drive mode was enabled, it is automatically disabled after + * exiting Stop mode. + * When the voltage regulator operates in Under-drive mode, an additional + * startup delay is induced when waking up from Stop mode. + * + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * + * @note When exiting Stop mode by issuing an interrupt or a wake-up event, + * the HSI RC oscillator is selected as system clock. + * + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * + * @param Regulator specifies the regulator state in STOP mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_UNDERDRIVE_ON: Main Regulator in under-drive mode + * and Flash memory in power-down when the device is in Stop under-drive mode + * @arg PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON: Low Power Regulator in under-drive mode + * and Flash memory in power-down when the device is in Stop under-drive mode + * @param STOPEntry specifies if STOP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction + * @arg PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction + * @retval None + */ +HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry) +{ + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR_UNDERDRIVE(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Enable the Under-drive Mode ---------------------------------------------*/ + /* Clear Under-drive flag */ + __HAL_PWR_CLEAR_ODRUDR_FLAG(); + + /* Enable the Under-drive */ + __HAL_PWR_UNDERDRIVE_ENABLE(); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg1 = PWR->CR; + /* Clear PDDS, LPDS, MRLUDS and LPLUDS bits */ + tmpreg1 &= (uint32_t)~(PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_LPUDS | PWR_CR_MRUDS); + + /* Set LPDS, MRLUDS and LPLUDS bits according to PWR_Regulator value */ + tmpreg1 |= Regulator; + + /* Store the new value */ + PWR->CR = tmpreg1; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* Select STOP mode entry --------------------------------------------------*/ + if(STOPEntry == PWR_SLEEPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __WFE(); + } + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + + return HAL_OK; +} + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c new file mode 100644 index 00000000..c18fa09b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c @@ -0,0 +1,1124 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc.c + * @author MCD Application Team + * @brief RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Reset and Clock Control (RCC) peripheral: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + @verbatim + ============================================================================== + ##### RCC specific features ##### + ============================================================================== + [..] + After reset the device is running from Internal High Speed oscillator + (HSI 16MHz) with Flash 0 wait state, Flash prefetch buffer, D-Cache + and I-Cache are disabled, and all peripherals are off except internal + SRAM, Flash and JTAG. + (+) There is no prescaler on High speed (AHB) and Low speed (APB) busses; + all peripherals mapped on these busses are running at HSI speed. + (+) The clock for all peripherals is switched off, except the SRAM and FLASH. + (+) All GPIOs are in input floating state, except the JTAG pins which + are assigned to be used for debug purpose. + + [..] + Once the device started from reset, the user application has to: + (+) Configure the clock source to be used to drive the System clock + (if the application needs higher frequency/performance) + (+) Configure the System clock frequency and Flash settings + (+) Configure the AHB and APB busses prescalers + (+) Enable the clock for the peripheral(s) to be used + (+) Configure the clock source(s) for peripherals which clocks are not + derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG) + + ##### RCC Limitations ##### + ============================================================================== + [..] + A delay between an RCC peripheral clock enable and the effective peripheral + enabling should be taken into account in order to manage the peripheral read/write + from/to registers. + (+) This delay depends on the peripheral mapping. + (+) If peripheral is mapped on AHB: the delay is 2 AHB clock cycle + after the clock enable bit is set on the hardware register + (+) If peripheral is mapped on APB: the delay is 2 APB clock cycle + after the clock enable bit is set on the hardware register + + [..] + Implemented Workaround: + (+) For AHB & APB peripherals, a dummy read to the peripheral register has been + inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro. + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup RCC RCC + * @brief RCC HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup RCC_Private_Constants + * @{ + */ + +/* Private macro -------------------------------------------------------------*/ +#define __MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define MCO1_GPIO_PORT GPIOA +#define MCO1_PIN GPIO_PIN_8 + +#define __MCO2_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() +#define MCO2_GPIO_PORT GPIOC +#define MCO2_PIN GPIO_PIN_9 +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Variables RCC Private Variables + * @{ + */ +/** + * @} + */ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Functions RCC Exported Functions + * @{ + */ + +/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to configure the internal/external oscillators + (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System busses clocks (SYSCLK, AHB, APB1 + and APB2). + + [..] Internal/external clock and PLL configuration + (#) HSI (high-speed internal), 16 MHz factory-trimmed RC used directly or through + the PLL as System clock source. + + (#) LSI (low-speed internal), 32 KHz low consumption RC used as IWDG and/or RTC + clock source. + + (#) HSE (high-speed external), 4 to 26 MHz crystal oscillator used directly or + through the PLL as System clock source. Can be used also as RTC clock source. + + (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source. + + (#) PLL (clocked by HSI or HSE), featuring two different output clocks: + (++) The first output is used to generate the high speed system clock (up to 168 MHz) + (++) The second output is used to generate the clock for the USB OTG FS (48 MHz), + the random analog generator (<=48 MHz) and the SDIO (<= 48 MHz). + + (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE() + and if a HSE clock failure occurs(HSE used directly or through PLL as System + clock source), the System clocks automatically switched to HSI and an interrupt + is generated if enabled. The interrupt is linked to the Cortex-M4 NMI + (Non-Maskable Interrupt) exception vector. + + (#) MCO1 (microcontroller clock output), used to output HSI, LSE, HSE or PLL + clock (through a configurable prescaler) on PA8 pin. + + (#) MCO2 (microcontroller clock output), used to output HSE, PLL, SYSCLK or PLLI2S + clock (through a configurable prescaler) on PC9 pin. + + [..] System, AHB and APB busses clocks configuration + (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI, + HSE and PLL. + The AHB clock (HCLK) is derived from System clock through configurable + prescaler and used to clock the CPU, memory and peripherals mapped + on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived + from AHB clock through configurable prescalers and used to clock + the peripherals mapped on these busses. You can use + "HAL_RCC_GetSysClockFreq()" function to retrieve the frequencies of these clocks. + + (#) For the STM32F405xx/07xx and STM32F415xx/17xx devices, the maximum + frequency of the SYSCLK and HCLK is 168 MHz, PCLK2 84 MHz and PCLK1 42 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + + (#) For the STM32F42xxx, STM32F43xxx, STM32F446xx, STM32F469xx and STM32F479xx devices, + the maximum frequency of the SYSCLK and HCLK is 180 MHz, PCLK2 90 MHz and PCLK1 45 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + + (#) For the STM32F401xx, the maximum frequency of the SYSCLK and HCLK is 84 MHz, + PCLK2 84 MHz and PCLK1 42 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + + (#) For the STM32F41xxx, the maximum frequency of the SYSCLK and HCLK is 100 MHz, + PCLK2 100 MHz and PCLK1 50 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + +@endverbatim + * @{ + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE and PLL OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS, MCO1 and MCO2 OFF + * - All interrupts disabled + * @note This function doesn't modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_RCC_DeInit(void) +{ + return HAL_OK; +} + +/** + * @brief Initializes the RCC Oscillators according to the specified parameters in the + * RCC_OscInitTypeDef. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC Oscillators. + * @note The PLL is not disabled when used as system clock. + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not + * supported by this API. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this API. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart; + uint32_t pll_config; + /* Check Null pointer */ + if (RCC_OscInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + /*------------------------------- HSE Configuration ------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */ + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) + { + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + { + return HAL_ERROR; + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + + /* Check the HSE State */ + if ((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is bypassed or disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) + { + /* When HSI is used as system clock it will not disabled */ + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + { + return HAL_ERROR; + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + } + else + { + /* Check the HSI State */ + if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF) + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value. */ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF) + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + { + FlagStatus pwrclkchanged = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Update LSE configuration in Backup Domain control register */ + /* Requires to enable write access to Backup Domain of necessary */ + if (__HAL_RCC_PWR_IS_CLK_DISABLED()) + { + __HAL_RCC_PWR_CLK_ENABLE(); + pwrclkchanged = SET; + } + + if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + /* Check the LSE State */ + if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Restore clock configuration if changed */ + if (pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + { + /* Check if the PLL is used as system clock or not */ + if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + { + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLLM_VALUE(RCC_OscInitStruct->PLL.PLLM)); + assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); + assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); + assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the main PLL clock source, multiplication and division factors. */ + WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ + RCC_OscInitStruct->PLL.PLLM | \ + (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ + (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ + (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + { + return HAL_ERROR; + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->PLLCFGR; +#if defined (RCC_PLLCFGR_PLLR) + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))) +#else + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) +#endif /* RCC_PLLCFGR_PLLR */ + { + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief Initializes the CPU, AHB and APB busses clocks according to the specified + * parameters in the RCC_ClkInitStruct. + * @param RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC peripheral. + * @param FLatency FLASH Latency, this parameter depend on device selected + * + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated by HAL_RCC_GetHCLKFreq() function called within this function + * + * @note The HSI is used (enabled by hardware) as system clock source after + * startup from Reset, wake-up from STOP and STANDBY mode, or in case + * of failure of the HSE used directly or indirectly as system clock + * (if the Clock Security System CSS is enabled). + * + * @note A switch from one clock source to another occurs only if the target + * clock source is ready (clock stable after startup delay or PLL locked). + * If a clock source which is not yet ready is selected, the switch will + * occur when the clock source will be ready. + * + * @note Depending on the device voltage range, the software has to set correctly + * HPRE[3:0] bits to ensure that HCLK not exceed the maximum allowed frequency + * (for more details refer to section above "Initialization/de-initialization functions") + * @retval None + */ +HAL_StatusTypeDef HAL_RCC_ClockConfig(const RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) +{ + uint32_t tickstart; + + /* Check Null pointer */ + if (RCC_ClkInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType)); + assert_param(IS_FLASH_LATENCY(FLatency)); + + /* To correctly read data from FLASH memory, the number of wait states (LATENCY) + must be correctly programmed according to the frequency of the CPU clock + (HCLK) and the supply voltage of the device. */ + + /* Increasing the number of wait states because of higher CPU frequency */ + if (FLatency > __HAL_FLASH_GET_LATENCY()) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if (__HAL_FLASH_GET_LATENCY() != FLatency) + { + return HAL_ERROR; + } + } + + /*-------------------------- HCLK Configuration --------------------------*/ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + { + /* Set the highest APBx dividers in order to ensure that we do not go through + a non-spec phase whatever we decrease or increase HCLK. */ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); + } + + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); + } + + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + { + /* Check the HSE ready flag */ + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + return HAL_ERROR; + } + } + /* PLL is selected as System Clock Source */ + else if ((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || + (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLRCLK)) + { + /* Check the PLL ready flag */ + if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + return HAL_ERROR; + } + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + return HAL_ERROR; + } + } + + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Decreasing the number of wait states because of lower CPU frequency */ + if (FLatency < __HAL_FLASH_GET_LATENCY()) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if (__HAL_FLASH_GET_LATENCY() != FLatency) + { + return HAL_ERROR; + } + } + + /*-------------------------- PCLK1 Configuration ---------------------------*/ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + } + + /*-------------------------- PCLK2 Configuration ---------------------------*/ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U)); + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; + + /* Configure the source of time base considering new system clocks settings */ + HAL_InitTick(uwTickPrio); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions + * @brief RCC clocks control functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + +@endverbatim + * @{ + */ + +/** + * @brief Selects the clock source to output on MCO1 pin(PA8) or on MCO2 pin(PC9). + * @note PA8/PC9 should be configured in alternate function mode. + * @param RCC_MCOx specifies the output direction for the clock source. + * This parameter can be one of the following values: + * @arg RCC_MCO1: Clock source to output on MCO1 pin(PA8). + * @arg RCC_MCO2: Clock source to output on MCO2 pin(PC9). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg RCC_MCO1SOURCE_HSI: HSI clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_LSE: LSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_HSE: HSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_PLLCLK: main PLL clock selected as MCO1 source + * @arg RCC_MCO2SOURCE_SYSCLK: System clock (SYSCLK) selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLI2SCLK: PLLI2S clock selected as MCO2 source, available for all STM32F4 devices except STM32F410xx + * @arg RCC_MCO2SOURCE_I2SCLK: I2SCLK clock selected as MCO2 source, available only for STM32F410Rx devices + * @arg RCC_MCO2SOURCE_HSE: HSE clock selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLCLK: main PLL clock selected as MCO2 source + * @param RCC_MCODiv specifies the MCOx prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCODIV_1: no division applied to MCOx clock + * @arg RCC_MCODIV_2: division by 2 applied to MCOx clock + * @arg RCC_MCODIV_3: division by 3 applied to MCOx clock + * @arg RCC_MCODIV_4: division by 4 applied to MCOx clock + * @arg RCC_MCODIV_5: division by 5 applied to MCOx clock + * @note For STM32F410Rx devices to output I2SCLK clock on MCO2 you should have + * at last one of the SPI clocks enabled (SPI1, SPI2 or SPI5). + * @retval None + */ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) +{ + GPIO_InitTypeDef GPIO_InitStruct; + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCOx)); + assert_param(IS_RCC_MCODIV(RCC_MCODiv)); + /* RCC_MCO1 */ + if (RCC_MCOx == RCC_MCO1) + { + assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource)); + + /* MCO1 Clock Enable */ + __MCO1_CLK_ENABLE(); + + /* Configure the MCO1 pin in alternate function mode */ + GPIO_InitStruct.Pin = MCO1_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Alternate = GPIO_AF0_MCO; + HAL_GPIO_Init(MCO1_GPIO_PORT, &GPIO_InitStruct); + + /* Mask MCO1 and MCO1PRE[2:0] bits then Select MCO1 clock source and prescaler */ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO1 | RCC_CFGR_MCO1PRE), (RCC_MCOSource | RCC_MCODiv)); + + /* This RCC MCO1 enable feature is available only on STM32F410xx devices */ +#if defined(RCC_CFGR_MCO1EN) + __HAL_RCC_MCO1_ENABLE(); +#endif /* RCC_CFGR_MCO1EN */ + } +#if defined(RCC_CFGR_MCO2) + else + { + assert_param(IS_RCC_MCO2SOURCE(RCC_MCOSource)); + + /* MCO2 Clock Enable */ + __MCO2_CLK_ENABLE(); + + /* Configure the MCO2 pin in alternate function mode */ + GPIO_InitStruct.Pin = MCO2_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Alternate = GPIO_AF0_MCO; + HAL_GPIO_Init(MCO2_GPIO_PORT, &GPIO_InitStruct); + + /* Mask MCO2 and MCO2PRE[2:0] bits then Select MCO2 clock source and prescaler */ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO2 | RCC_CFGR_MCO2PRE), (RCC_MCOSource | (RCC_MCODiv << 3U))); + + /* This RCC MCO2 enable feature is available only on STM32F410Rx devices */ +#if defined(RCC_CFGR_MCO2EN) + __HAL_RCC_MCO2_ENABLE(); +#endif /* RCC_CFGR_MCO2EN */ + } +#endif /* RCC_CFGR_MCO2 */ +} + +/** + * @brief Enables the Clock Security System. + * @note If a failure is detected on the HSE oscillator clock, this oscillator + * is automatically disabled and an interrupt is generated to inform the + * software about the failure (Clock Security System Interrupt, CSSI), + * allowing the MCU to perform rescue operations. The CSSI is linked to + * the Cortex-M4 NMI (Non-Maskable Interrupt) exception vector. + * @retval None + */ +void HAL_RCC_EnableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Clock Security System. + * @retval None + */ +void HAL_RCC_DisableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)DISABLE; +} + +/** + * @brief Returns the SYSCLK frequency + * + * @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: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) + * @note If SYSCLK source is PLL, function returns values based on HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * @note (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f4xx_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. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @note This function can be used by the user application to compute the + * baudrate for the communication peripherals or configure other parameters. + * + * @note Each time SYSCLK changes, this function must be called to update the + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * + * @retval SYSCLK frequency + */ +__weak uint32_t HAL_RCC_GetSysClockFreq(void) +{ + uint32_t pllm = 0U; + uint32_t pllvco = 0U; + uint32_t pllp = 0U; + uint32_t sysclockfreq = 0U; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + { + sysclockfreq = HSI_VALUE; + break; + } + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_CFGR_SWS_PLL: /* PLL used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) * 2U); + + sysclockfreq = pllvco / pllp; + break; + } + default: + { + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} + +/** + * @brief Returns the HCLK frequency + * @note Each time HCLK changes, this function must be called to update the + * right HCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated within this function + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + return SystemCoreClock; +} + +/** + * @brief Returns the PCLK1 frequency + * @note Each time PCLK1 changes, this function must be called to update the + * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]); +} + +/** + * @brief Returns the PCLK2 frequency + * @note Each time PCLK2 changes, this function must be called to update the + * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK2 frequency + */ +uint32_t HAL_RCC_GetPCLK2Freq(void) +{ + /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]); +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * will be configured. + * @retval None + */ +__weak void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; + + /* Get the HSE configuration -----------------------------------------------*/ + if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + { + RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; + } + else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON) + { + RCC_OscInitStruct->HSEState = RCC_HSE_ON; + } + else + { + RCC_OscInitStruct->HSEState = RCC_HSE_OFF; + } + + /* Get the HSI configuration -----------------------------------------------*/ + if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION) + { + RCC_OscInitStruct->HSIState = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSIState = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); + + /* Get the LSE configuration -----------------------------------------------*/ + if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + { + RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; + } + else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + { + RCC_OscInitStruct->LSEState = RCC_LSE_ON; + } + else + { + RCC_OscInitStruct->LSEState = RCC_LSE_OFF; + } + + /* Get the LSI configuration -----------------------------------------------*/ + if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION) + { + RCC_OscInitStruct->LSIState = RCC_LSI_ON; + } + else + { + RCC_OscInitStruct->LSIState = RCC_LSI_OFF; + } + + /* Get the PLL configuration -----------------------------------------------*/ + if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON) + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; + } + else + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; + } + RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLM = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); + RCC_OscInitStruct->PLL.PLLN = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + RCC_OscInitStruct->PLL.PLLP = (uint32_t)((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) + RCC_PLLCFGR_PLLP_0) << 1U) >> RCC_PLLCFGR_PLLP_Pos); + RCC_OscInitStruct->PLL.PLLQ = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos); +} + +/** + * @brief Configures the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that + * will be configured. + * @param pFLatency Pointer on the Flash Latency. + * @retval None + */ +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) +{ + /* Set all possible values for the Clock type parameter --------------------*/ + RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + + /* Get the SYSCLK configuration --------------------------------------------*/ + RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW); + + /* Get the HCLK configuration ----------------------------------------------*/ + RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE); + + /* Get the APB1 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1); + + /* Get the APB2 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3U); + + /* Get the Flash Wait State (Latency) configuration ------------------------*/ + *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY); +} + +/** + * @brief This function handles the RCC CSS interrupt request. + * @note This API should be called under the NMI_Handler(). + * @retval None + */ +void HAL_RCC_NMI_IRQHandler(void) +{ + /* Check RCC CSSF flag */ + if (__HAL_RCC_GET_IT(RCC_IT_CSS)) + { + /* RCC Clock Security System interrupt user callback */ + HAL_RCC_CSSCallback(); + + /* Clear RCC CSS pending bit */ + __HAL_RCC_CLEAR_IT(RCC_IT_CSS); + } +} + +/** + * @brief RCC Clock Security System interrupt callback + * @retval None + */ +__weak void HAL_RCC_CSSCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_RCC_CSSCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c new file mode 100644 index 00000000..04317181 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c @@ -0,0 +1,3833 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc_ex.c + * @author MCD Application Team + * @brief Extension RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities RCC extension peripheral: + * + Extended Peripheral Control functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup RCCEx RCCEx + * @brief RCCEx HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup RCCEx_Private_Constants + * @{ + */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions + * @{ + */ + +/** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions + * @brief Extended Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Extended Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + [..] + (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to + select the RTC clock source; in this case the Backup domain will be reset in + order to modify the RTC Clock source, as consequence RTC registers (including + the backup registers) and RCC_BDCR register are set to their reset values. + +@endverbatim + * @{ + */ + +#if defined(STM32F446xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, SAI, LTDC RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + uint32_t plli2sp = 0U; + uint32_t plli2sq = 0U; + uint32_t plli2sr = 0U; + uint32_t pllsaip = 0U; + uint32_t pllsaiq = 0U; + uint32_t plli2sused = 0U; + uint32_t pllsaiused = 0U; + + /* Check the peripheral clock selection parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*------------------------ I2S APB1 configuration --------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == (RCC_PERIPHCLK_I2S_APB1)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB1CLKSOURCE(PeriphClkInit->I2sApb1ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB1_CONFIG(PeriphClkInit->I2sApb1ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if (PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- I2S APB2 configuration ----------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == (RCC_PERIPHCLK_I2S_APB2)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB2CLKSOURCE(PeriphClkInit->I2sApb2ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB2_CONFIG(PeriphClkInit->I2sApb2ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if (PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*--------------------------- SAI1 configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == (RCC_PERIPHCLK_SAI1)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAI1CLKSOURCE(PeriphClkInit->Sai1ClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection); + /* Enable the PLLI2S when it's used as clock source for SAI */ + if (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI) + { + pllsaiused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*-------------------------- SAI2 configuration ----------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == (RCC_PERIPHCLK_SAI2)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAI2CLKSOURCE(PeriphClkInit->Sai2ClockSelection)); + + /* Configure SAI2 Clock source */ + __HAL_RCC_SAI2_CONFIG(PeriphClkInit->Sai2ClockSelection); + + /* Enable the PLLI2S when it's used as clock source for SAI */ + if (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLSAI) + { + pllsaiused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- RTC configuration --------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while ((PWR->CR & PWR_CR_DBP) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if ((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + /* Configure Timer Prescaler */ + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- FMPI2C1 Configuration -----------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMPI2C1) == RCC_PERIPHCLK_FMPI2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_FMPI2C1CLKSOURCE(PeriphClkInit->Fmpi2c1ClockSelection)); + + /* Configure the FMPI2C1 clock source */ + __HAL_RCC_FMPI2C1_CONFIG(PeriphClkInit->Fmpi2c1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------ CEC Configuration -------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC) + { + /* Check the parameters */ + assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- CLK48 Configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48CLKSOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the CLK48 clock source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + + /* Enable the PLLSAI when it's used as clock source for CLK48 */ + if (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP) + { + pllsaiused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- SDIO Configuration -------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_SDIOCLKSOURCE(PeriphClkInit->SdioClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_SDIO_CONFIG(PeriphClkInit->SdioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------ SPDIFRX Configuration ---------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX) + { + /* Check the parameters */ + assert_param(IS_RCC_SPDIFRXCLKSOURCE(PeriphClkInit->SpdifClockSelection)); + + /* Configure the SPDIFRX clock source */ + __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifClockSelection); + /* Enable the PLLI2S when it's used as clock source for SPDIFRX */ + if (PeriphClkInit->SpdifClockSelection == RCC_SPDIFRXCLKSOURCE_PLLI2SP) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- PLLI2S Configuration ------------------------*/ + /* PLLI2S is configured when a peripheral will use it as source clock : SAI1, SAI2, I2S on APB1, + I2S on APB2 or SPDIFRX */ + if ((plli2sused == 1U) || (PeriphClkInit->PeriphClockSelection == RCC_PERIPHCLK_PLLI2S)) + { + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* check for common PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SM_VALUE(PeriphClkInit->PLLI2S.PLLI2SM)); + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + + /*------ In Case of PLLI2S is selected as source clock for I2S -----------*/ + if (((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == RCC_PERIPHCLK_I2S_APB1) + && (PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == RCC_PERIPHCLK_I2S_APB2) && (PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S))) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + + /* Read PLLI2SP/PLLI2SQ value from PLLI2SCFGR register (this value is not needed for I2S configuration) */ + plli2sp = ((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + plli2sq = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, plli2sp, plli2sq, + PeriphClkInit->PLLI2S.PLLI2SR); + } + + /*------- In Case of PLLI2S is selected as source clock for SAI ----------*/ + if (((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) + && (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) && (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S))) + { + /* Check for PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + /* Check for PLLI2S/DIVQ parameters */ + assert_param(IS_RCC_PLLI2S_DIVQ_VALUE(PeriphClkInit->PLLI2SDivQ)); + + /* Read PLLI2SP/PLLI2SR value from PLLI2SCFGR register (this value is not needed for SAI configuration) */ + plli2sp = ((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + plli2sr = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, plli2sp, + PeriphClkInit->PLLI2S.PLLI2SQ, plli2sr); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + } + + /*------ In Case of PLLI2S is selected as source clock for SPDIFRX -------*/ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX) + && (PeriphClkInit->SpdifClockSelection == RCC_SPDIFRXCLKSOURCE_PLLI2SP)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SP_VALUE(PeriphClkInit->PLLI2S.PLLI2SP)); + /* Read PLLI2SR value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + plli2sq = ((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + plli2sr = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* SPDIFRXCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SP */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SP, + plli2sq, plli2sr); + } + + /*----------------- In Case of PLLI2S is just selected -----------------*/ + if ((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SP_VALUE(PeriphClkInit->PLLI2S.PLLI2SP)); + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SP, + PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- PLLSAI Configuration -----------------------*/ + /* PLLSAI is configured when a peripheral will use it as source clock : SAI1, SAI2, CLK48 or SDIO */ + if (pllsaiused == 1U) + { + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is disabled */ + while (__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIM_VALUE(PeriphClkInit->PLLSAI.PLLSAIM)); + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /*------ In Case of PLLSAI is selected as source clock for SAI -----------*/ + if (((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) + && (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) && (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLSAI))) + { + /* check for PLLSAIQ Parameter */ + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + /* check for PLLSAI/DIVQ Parameter */ + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + pllsaip = ((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIM, PeriphClkInit->PLLSAI.PLLSAIN, pllsaip, + PeriphClkInit->PLLSAI.PLLSAIQ, 0U); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + } + + /*------ In Case of PLLSAI is selected as source clock for CLK48 ---------*/ + /* In Case of PLLI2S is selected as source clock for CLK48 */ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLSAIP_VALUE(PeriphClkInit->PLLSAI.PLLSAIP)); + /* Read PLLSAIQ value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + pllsaiq = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Configure the PLLSAI division factors */ + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) * (PLLI2SN/PLLSAIM) */ + /* 48CLK = f(PLLSAI clock output) = f(VCO clock) / PLLSAIP */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIM, PeriphClkInit->PLLSAI.PLLSAIN, PeriphClkInit->PLLSAI.PLLSAIP, + pllsaiq, 0U); + } + + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is ready */ + while (__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + return HAL_OK; +} + +/** + * @brief Get the RCC_PeriphCLKInitTypeDef according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_I2S_APB2 | \ + RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | \ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_FMPI2C1 | \ + RCC_PERIPHCLK_CLK48 | RCC_PERIPHCLK_SDIO | \ + RCC_PERIPHCLK_SPDIFRX; + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SM = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM) >> RCC_PLLI2SCFGR_PLLI2SM_Pos); + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SP = (uint32_t)((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Get the PLLSAI Clock configuration --------------------------------------*/ + PeriphClkInit->PLLSAI.PLLSAIM = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIM) >> RCC_PLLSAICFGR_PLLSAIM_Pos); + PeriphClkInit->PLLSAI.PLLSAIN = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); + PeriphClkInit->PLLSAI.PLLSAIP = (uint32_t)((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + PeriphClkInit->PLLSAI.PLLSAIQ = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Get the PLLSAI/PLLI2S division factors ----------------------------------*/ + PeriphClkInit->PLLI2SDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos); + PeriphClkInit->PLLSAIDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos); + + /* Get the SAI1 clock configuration ----------------------------------------*/ + PeriphClkInit->Sai1ClockSelection = __HAL_RCC_GET_SAI1_SOURCE(); + + /* Get the SAI2 clock configuration ----------------------------------------*/ + PeriphClkInit->Sai2ClockSelection = __HAL_RCC_GET_SAI2_SOURCE(); + + /* Get the I2S APB1 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb1ClockSelection = __HAL_RCC_GET_I2S_APB1_SOURCE(); + + /* Get the I2S APB2 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb2ClockSelection = __HAL_RCC_GET_I2S_APB2_SOURCE(); + + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + /* Get the CEC clock configuration -----------------------------------------*/ + PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE(); + + /* Get the FMPI2C1 clock configuration -------------------------------------*/ + PeriphClkInit->Fmpi2c1ClockSelection = __HAL_RCC_GET_FMPI2C1_SOURCE(); + + /* Get the CLK48 clock configuration ----------------------------------------*/ + PeriphClkInit->Clk48ClockSelection = __HAL_RCC_GET_CLK48_SOURCE(); + + /* Get the SDIO clock configuration ----------------------------------------*/ + PeriphClkInit->SdioClockSelection = __HAL_RCC_GET_SDIO_SOURCE(); + + /* Get the SPDIFRX clock configuration -------------------------------------*/ + PeriphClkInit->SpdifClockSelection = __HAL_RCC_GET_SPDIFRX_SOURCE(); + + /* Get the TIM Prescaler configuration -------------------------------------*/ + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_SAI1: SAI1 peripheral clock + * @arg RCC_PERIPHCLK_SAI2: SAI2 peripheral clock + * @arg RCC_PERIPHCLK_I2S_APB1: I2S APB1 peripheral clock + * @arg RCC_PERIPHCLK_I2S_APB2: I2S APB2 peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + uint32_t tmpreg1 = 0U; + /* This variable used to store the SAI clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + /* This variable used to store the SAI clock source */ + uint32_t saiclocksource = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_SAI1: + case RCC_PERIPHCLK_SAI2: + { + saiclocksource = RCC->DCKCFGR; + saiclocksource &= (RCC_DCKCFGR_SAI1SRC | RCC_DCKCFGR_SAI2SRC); + switch (saiclocksource) + { + case 0U: /* PLLSAI is the clock source for SAI*/ + { + /* Configure the PLLSAI division factor */ + /* PLLSAI_VCO Input = PLL_SOURCE/PLLSAIM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + vcoinput = (HSI_VALUE / (uint32_t)(RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIM)); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + vcoinput = ((HSE_VALUE / (uint32_t)(RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIM))); + } + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + tmpreg1 = (RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> 24U; + frequency = (vcoinput * ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> 6U)) / (tmpreg1); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + tmpreg1 = (((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> 8U) + 1U); + frequency = frequency / (tmpreg1); + break; + } + case RCC_DCKCFGR_SAI1SRC_0: /* PLLI2S is the clock source for SAI*/ + case RCC_DCKCFGR_SAI2SRC_0: /* PLLI2S is the clock source for SAI*/ + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + vcoinput = (HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + vcoinput = ((HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM))); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + tmpreg1 = (RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> 24U; + frequency = (vcoinput * ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U)) / (tmpreg1); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + tmpreg1 = ((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) + 1U); + frequency = frequency / (tmpreg1); + break; + } + case RCC_DCKCFGR_SAI1SRC_1: /* PLLR is the clock source for SAI*/ + case RCC_DCKCFGR_SAI2SRC_1: /* PLLR is the clock source for SAI*/ + { + /* Configure the PLLI2S division factor */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + vcoinput = (HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + vcoinput = ((HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM))); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + /* SAI_CLK_x = PLL_VCO Output/PLLR */ + tmpreg1 = (RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U; + frequency = (vcoinput * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U)) / (tmpreg1); + break; + } + case RCC_DCKCFGR_SAI1SRC: /* External clock is the clock source for SAI*/ + { + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + case RCC_DCKCFGR_SAI2SRC: /* PLLSRC(HSE or HSI) is the clock source for SAI*/ + { + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + frequency = (uint32_t)(HSI_VALUE); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + frequency = (uint32_t)(HSE_VALUE); + } + break; + } + default : + { + break; + } + } + break; + } + case RCC_PERIPHCLK_I2S_APB1: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB1_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB1CLKSOURCE_PLLSRC: + { + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + case RCC_PERIPHCLK_I2S_APB2: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB2_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB2CLKSOURCE_PLLSRC: + { + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + default: + { + break; + } + } + return frequency; +} +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, SAI, LTDC, RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + uint32_t pllsaip = 0U; + uint32_t pllsaiq = 0U; + uint32_t pllsair = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*--------------------------- CLK48 Configuration --------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48CLKSOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the CLK48 clock source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------ SDIO Configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_SDIOCLKSOURCE(PeriphClkInit->SdioClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_SDIO_CONFIG(PeriphClkInit->SdioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*----------------------- SAI/I2S Configuration (PLLI2S) -------------------*/ + /*------------------- Common configuration SAI/I2S -------------------------*/ + /* In Case of SAI or I2S Clock Configuration through PLLI2S, PLLI2SN division + factor is common parameters for both peripherals */ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == RCC_PERIPHCLK_SAI_PLLI2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------- I2S configuration -------------------------------*/ + /* In Case of I2S Clock Configuration through PLLI2S, PLLI2SR must be added + only for I2S configuration */ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) x (PLLI2SN/PLLM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLI2S, PLLI2SQ and PLLI2S_DIVQ must + be added only for SAI configuration */ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == (RCC_PERIPHCLK_SAI_PLLI2S)) + { + /* Check the PLLI2S division factors */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2S_DIVQ_VALUE(PeriphClkInit->PLLI2SDivQ)); + + /* Read PLLI2SR value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, tmpreg1); + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + } + + /*----------------- In Case of PLLI2S is just selected -----------------*/ + if ((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + + /* Configure the PLLI2S multiplication and division factors */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, + PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------- SAI/LTDC Configuration (PLLSAI) ------------------*/ + /*----------------------- Common configuration SAI/LTDC --------------------*/ + /* In Case of SAI, LTDC or CLK48 Clock Configuration through PLLSAI, PLLSAIN division + factor is common parameters for these peripherals */ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == RCC_PERIPHCLK_SAI_PLLSAI) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) && + (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP))) + { + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is disabled */ + while (__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLSAI, PLLSAIQ and PLLSAI_DIVQ must + be added only for SAI configuration */ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == (RCC_PERIPHCLK_SAI_PLLSAI)) + { + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + pllsaip = ((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsair = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, pllsaip, PeriphClkInit->PLLSAI.PLLSAIQ, pllsair); + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + } + + /*---------------------------- LTDC configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == (RCC_PERIPHCLK_LTDC)) + { + assert_param(IS_RCC_PLLSAIR_VALUE(PeriphClkInit->PLLSAI.PLLSAIR)); + assert_param(IS_RCC_PLLSAI_DIVR_VALUE(PeriphClkInit->PLLSAIDivR)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + pllsaip = ((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + /* Read PLLSAIQ value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsaiq = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* LTDC_CLK(first level) = PLLSAI_VCO Output/PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, pllsaip, pllsaiq, PeriphClkInit->PLLSAI.PLLSAIR); + /* LTDC_CLK = LTDC_CLK(first level)/PLLSAIDIVR */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLSAIDivR); + } + + /*---------------------------- CLK48 configuration ------------------------*/ + /* Configure the PLLSAI when it is used as clock source for CLK48 */ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == (RCC_PERIPHCLK_CLK48)) && + (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP)) + { + assert_param(IS_RCC_PLLSAIP_VALUE(PeriphClkInit->PLLSAI.PLLSAIP)); + + /* Read PLLSAIQ value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsaiq = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsair = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* CLK48_CLK(first level) = PLLSAI_VCO Output/PLLSAIP */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, PeriphClkInit->PLLSAI.PLLSAIP, pllsaiq, pllsair); + } + + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is ready */ + while (__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + + /*--------------------------------------------------------------------------*/ + + /*---------------------------- RTC configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while ((PWR->CR & PWR_CR_DBP) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if ((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + return HAL_OK; +} + +/** + * @brief Configures the RCC_PeriphCLKInitTypeDef according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_SAI_PLLSAI | \ + RCC_PERIPHCLK_SAI_PLLI2S | RCC_PERIPHCLK_LTDC | \ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_CLK48 | RCC_PERIPHCLK_SDIO; + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Get the PLLSAI Clock configuration --------------------------------------*/ + PeriphClkInit->PLLSAI.PLLSAIN = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); + PeriphClkInit->PLLSAI.PLLSAIR = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + PeriphClkInit->PLLSAI.PLLSAIQ = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Get the PLLSAI/PLLI2S division factors ----------------------------------*/ + PeriphClkInit->PLLI2SDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos); + PeriphClkInit->PLLSAIDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos); + PeriphClkInit->PLLSAIDivR = (uint32_t)(RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVR); + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + /* Get the CLK48 clock configuration -------------------------------------*/ + PeriphClkInit->Clk48ClockSelection = __HAL_RCC_GET_CLK48_SOURCE(); + + /* Get the SDIO clock configuration ----------------------------------------*/ + PeriphClkInit->SdioClockSelection = __HAL_RCC_GET_SDIO_SOURCE(); + + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SCLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + default: + { + break; + } + } + return frequency; +} +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, LTDC RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; +#if defined(STM32F413xx) || defined(STM32F423xx) + uint32_t plli2sq = 0U; +#endif /* STM32F413xx || STM32F423xx */ + uint32_t plli2sused = 0U; + + /* Check the peripheral clock selection parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*----------------------------------- I2S APB1 configuration ---------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == (RCC_PERIPHCLK_I2S_APB1)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB1CLKSOURCE(PeriphClkInit->I2sApb1ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB1_CONFIG(PeriphClkInit->I2sApb1ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if (PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------------- I2S APB2 configuration ---------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == (RCC_PERIPHCLK_I2S_APB2)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB2CLKSOURCE(PeriphClkInit->I2sApb2ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB2_CONFIG(PeriphClkInit->I2sApb2ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if (PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + +#if defined(STM32F413xx) || defined(STM32F423xx) + /*----------------------- SAI1 Block A configuration -----------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIA) == (RCC_PERIPHCLK_SAIA)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAIACLKSOURCE(PeriphClkInit->SaiAClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI_BLOCKACLKSOURCE_CONFIG(PeriphClkInit->SaiAClockSelection); + /* Enable the PLLI2S when it's used as clock source for SAI */ + if (PeriphClkInit->SaiAClockSelection == RCC_SAIACLKSOURCE_PLLI2SR) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if (PeriphClkInit->SaiAClockSelection == RCC_SAIACLKSOURCE_PLLR) + { + /* Check for PLL/DIVR parameters */ + assert_param(IS_RCC_PLL_DIVR_VALUE(PeriphClkInit->PLLDivR)); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLDIVR */ + __HAL_RCC_PLL_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLDivR); + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------- SAI1 Block B configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIB) == (RCC_PERIPHCLK_SAIB)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAIBCLKSOURCE(PeriphClkInit->SaiBClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI_BLOCKBCLKSOURCE_CONFIG(PeriphClkInit->SaiBClockSelection); + /* Enable the PLLI2S when it's used as clock source for SAI */ + if (PeriphClkInit->SaiBClockSelection == RCC_SAIBCLKSOURCE_PLLI2SR) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if (PeriphClkInit->SaiBClockSelection == RCC_SAIBCLKSOURCE_PLLR) + { + /* Check for PLL/DIVR parameters */ + assert_param(IS_RCC_PLL_DIVR_VALUE(PeriphClkInit->PLLDivR)); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLDIVR */ + __HAL_RCC_PLL_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLDivR); + } + } + /*--------------------------------------------------------------------------*/ +#endif /* STM32F413xx || STM32F423xx */ + + /*------------------------------------ RTC configuration -------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while ((PWR->CR & PWR_CR_DBP) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if ((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------ TIM configuration -------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + /* Configure Timer Prescaler */ + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------- FMPI2C1 Configuration --------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMPI2C1) == RCC_PERIPHCLK_FMPI2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_FMPI2C1CLKSOURCE(PeriphClkInit->Fmpi2c1ClockSelection)); + + /* Configure the FMPI2C1 clock source */ + __HAL_RCC_FMPI2C1_CONFIG(PeriphClkInit->Fmpi2c1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------- CLK48 Configuration ----------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48CLKSOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + + /* Enable the PLLI2S when it's used as clock source for CLK48 */ + if (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLI2SQ) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------- SDIO Configuration -----------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_SDIOCLKSOURCE(PeriphClkInit->SdioClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_SDIO_CONFIG(PeriphClkInit->SdioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*-------------------------------------- PLLI2S Configuration --------------*/ + /* PLLI2S is configured when a peripheral will use it as source clock : I2S on APB1 or + I2S on APB2*/ + if ((plli2sused == 1U) || (PeriphClkInit->PeriphClockSelection == RCC_PERIPHCLK_PLLI2S)) + { + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* check for common PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SCLKSOURCE(PeriphClkInit->PLLI2SSelection)); + assert_param(IS_RCC_PLLI2SM_VALUE(PeriphClkInit->PLLI2S.PLLI2SM)); + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + /*-------------------- Set the PLL I2S clock -----------------------------*/ + __HAL_RCC_PLL_I2S_CONFIG(PeriphClkInit->PLLI2SSelection); + + /*------- In Case of PLLI2S is selected as source clock for I2S ----------*/ + if (((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == RCC_PERIPHCLK_I2S_APB1) + && (PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == RCC_PERIPHCLK_I2S_APB2) && (PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLI2SQ)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) && (PeriphClkInit->SdioClockSelection == RCC_SDIOCLKSOURCE_CLK48) && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLI2SQ))) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM)*/ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, + PeriphClkInit->PLLI2S.PLLI2SR); + } + +#if defined(STM32F413xx) || defined(STM32F423xx) + /*------- In Case of PLLI2S is selected as source clock for SAI ----------*/ + if (((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIA) == RCC_PERIPHCLK_SAIA) + && (PeriphClkInit->SaiAClockSelection == RCC_SAIACLKSOURCE_PLLI2SR)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIB) == RCC_PERIPHCLK_SAIB) && (PeriphClkInit->SaiBClockSelection == RCC_SAIBCLKSOURCE_PLLI2SR))) + { + /* Check for PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + /* Check for PLLI2S/DIVR parameters */ + assert_param(IS_RCC_PLLI2S_DIVR_VALUE(PeriphClkInit->PLLI2SDivR)); + + /* Read PLLI2SQ value from PLLI2SCFGR register (this value is not needed for SAI configuration) */ + plli2sq = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, plli2sq, + PeriphClkInit->PLLI2S.PLLI2SR); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVR */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLI2SDivR); + } +#endif /* STM32F413xx || STM32F423xx */ + + /*----------------- In Case of PLLI2S is just selected ------------------*/ + if ((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM)*/ + /* SPDIFRXCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SP */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, + PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*-------------------- DFSDM1 clock source configuration -------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection)); + + /* Configure the DFSDM1 interface clock source */ + __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*-------------------- DFSDM1 Audio clock source configuration -------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1_AUDIO) == RCC_PERIPHCLK_DFSDM1_AUDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM1AUDIOCLKSOURCE(PeriphClkInit->Dfsdm1AudioClockSelection)); + + /* Configure the DFSDM1 Audio interface clock source */ + __HAL_RCC_DFSDM1AUDIO_CONFIG(PeriphClkInit->Dfsdm1AudioClockSelection); + } + /*--------------------------------------------------------------------------*/ + +#if defined(STM32F413xx) || defined(STM32F423xx) + /*-------------------- DFSDM2 clock source configuration -------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM2) == RCC_PERIPHCLK_DFSDM2) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM2CLKSOURCE(PeriphClkInit->Dfsdm2ClockSelection)); + + /* Configure the DFSDM1 interface clock source */ + __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*-------------------- DFSDM2 Audio clock source configuration -------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM2_AUDIO) == RCC_PERIPHCLK_DFSDM2_AUDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM2AUDIOCLKSOURCE(PeriphClkInit->Dfsdm2AudioClockSelection)); + + /* Configure the DFSDM1 Audio interface clock source */ + __HAL_RCC_DFSDM2AUDIO_CONFIG(PeriphClkInit->Dfsdm2AudioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- LPTIM1 Configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) + { + /* Check the parameters */ + assert_param(IS_RCC_LPTIM1CLKSOURCE(PeriphClkInit->Lptim1ClockSelection)); + + /* Configure the LPTIM1 clock source */ + __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection); + } + /*--------------------------------------------------------------------------*/ +#endif /* STM32F413xx || STM32F423xx */ + + return HAL_OK; +} + +/** + * @brief Get the RCC_PeriphCLKInitTypeDef according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_I2S_APB2 | \ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_FMPI2C1 | RCC_PERIPHCLK_CLK48 | \ + RCC_PERIPHCLK_SDIO | RCC_PERIPHCLK_DFSDM1 | \ + RCC_PERIPHCLK_DFSDM1_AUDIO | RCC_PERIPHCLK_DFSDM2 | \ + RCC_PERIPHCLK_DFSDM2_AUDIO | RCC_PERIPHCLK_LPTIM1 | \ + RCC_PERIPHCLK_SAIA | RCC_PERIPHCLK_SAIB; +#else /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_I2S_APB2 | \ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_FMPI2C1 | RCC_PERIPHCLK_CLK48 | \ + RCC_PERIPHCLK_SDIO | RCC_PERIPHCLK_DFSDM1 | \ + RCC_PERIPHCLK_DFSDM1_AUDIO; +#endif /* STM32F413xx || STM32F423xx */ + + + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SM = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM) >> RCC_PLLI2SCFGR_PLLI2SM_Pos); + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); +#if defined(STM32F413xx) || defined(STM32F423xx) + /* Get the PLL/PLLI2S division factors -------------------------------------*/ + PeriphClkInit->PLLI2SDivR = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVR) >> RCC_DCKCFGR_PLLI2SDIVR_Pos); + PeriphClkInit->PLLDivR = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLDIVR) >> RCC_DCKCFGR_PLLDIVR_Pos); +#endif /* STM32F413xx || STM32F423xx */ + + /* Get the I2S APB1 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb1ClockSelection = __HAL_RCC_GET_I2S_APB1_SOURCE(); + + /* Get the I2S APB2 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb2ClockSelection = __HAL_RCC_GET_I2S_APB2_SOURCE(); + + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + /* Get the FMPI2C1 clock configuration -------------------------------------*/ + PeriphClkInit->Fmpi2c1ClockSelection = __HAL_RCC_GET_FMPI2C1_SOURCE(); + + /* Get the CLK48 clock configuration ---------------------------------------*/ + PeriphClkInit->Clk48ClockSelection = __HAL_RCC_GET_CLK48_SOURCE(); + + /* Get the SDIO clock configuration ----------------------------------------*/ + PeriphClkInit->SdioClockSelection = __HAL_RCC_GET_SDIO_SOURCE(); + + /* Get the DFSDM1 clock configuration --------------------------------------*/ + PeriphClkInit->Dfsdm1ClockSelection = __HAL_RCC_GET_DFSDM1_SOURCE(); + + /* Get the DFSDM1 Audio clock configuration --------------------------------*/ + PeriphClkInit->Dfsdm1AudioClockSelection = __HAL_RCC_GET_DFSDM1AUDIO_SOURCE(); + +#if defined(STM32F413xx) || defined(STM32F423xx) + /* Get the DFSDM2 clock configuration --------------------------------------*/ + PeriphClkInit->Dfsdm2ClockSelection = __HAL_RCC_GET_DFSDM2_SOURCE(); + + /* Get the DFSDM2 Audio clock configuration --------------------------------*/ + PeriphClkInit->Dfsdm2AudioClockSelection = __HAL_RCC_GET_DFSDM2AUDIO_SOURCE(); + + /* Get the LPTIM1 clock configuration --------------------------------------*/ + PeriphClkInit->Lptim1ClockSelection = __HAL_RCC_GET_LPTIM1_SOURCE(); + + /* Get the SAI1 Block Aclock configuration ---------------------------------*/ + PeriphClkInit->SaiAClockSelection = __HAL_RCC_GET_SAI_BLOCKA_SOURCE(); + + /* Get the SAI1 Block B clock configuration --------------------------------*/ + PeriphClkInit->SaiBClockSelection = __HAL_RCC_GET_SAI_BLOCKB_SOURCE(); +#endif /* STM32F413xx || STM32F423xx */ + + /* Get the TIM Prescaler configuration -------------------------------------*/ + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(I2S..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S_APB1: I2S APB1 peripheral clock + * @arg RCC_PERIPHCLK_I2S_APB2: I2S APB2 peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S_APB1: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB1_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLI2S: + { + if ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SSRC) == RCC_PLLI2SCFGR_PLLI2SSRC) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(EXTERNAL_CLOCK_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + } + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB1CLKSOURCE_PLLSRC: + { + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + case RCC_PERIPHCLK_I2S_APB2: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB2_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLI2S: + { + if ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SSRC) == RCC_PLLI2SCFGR_PLLI2SSRC) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(EXTERNAL_CLOCK_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + } + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB2CLKSOURCE_PLLSRC: + { + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + default: + { + break; + } + } + return frequency; +} +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified parameters in the + * RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals clocks(I2S and RTC clocks). + * + * @note A caution to be taken when HAL_RCCEx_PeriphCLKConfig() is used to select RTC clock selection, in this case + * the Reset of Backup domain will be applied in order to modify the RTC Clock source as consequence all backup + * domain (RTC and RCC_BDCR register expect BKPSRAM) will be reset + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*---------------------------- RTC configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while ((PWR->CR & PWR_CR_DBP) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if ((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- FMPI2C1 Configuration -----------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMPI2C1) == RCC_PERIPHCLK_FMPI2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_FMPI2C1CLKSOURCE(PeriphClkInit->Fmpi2c1ClockSelection)); + + /* Configure the FMPI2C1 clock source */ + __HAL_RCC_FMPI2C1_CONFIG(PeriphClkInit->Fmpi2c1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- LPTIM1 Configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) + { + /* Check the parameters */ + assert_param(IS_RCC_LPTIM1CLKSOURCE(PeriphClkInit->Lptim1ClockSelection)); + + /* Configure the LPTIM1 clock source */ + __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection); + } + + /*---------------------------- I2S Configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPBCLKSOURCE(PeriphClkInit->I2SClockSelection)); + + /* Configure the I2S clock source */ + __HAL_RCC_I2S_CONFIG(PeriphClkInit->I2SClockSelection); + } + + return HAL_OK; +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_FMPI2C1 | RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC; + + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } + /* Get the FMPI2C1 clock configuration -------------------------------------*/ + PeriphClkInit->Fmpi2c1ClockSelection = __HAL_RCC_GET_FMPI2C1_SOURCE(); + + /* Get the I2S clock configuration -----------------------------------------*/ + PeriphClkInit->I2SClockSelection = __HAL_RCC_GET_I2S_SOURCE(); + + +} +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPBCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPBCLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPBCLKSOURCE_PLLSRC: + { + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + default: + { + break; + } + } + return frequency; +} +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, SAI, LTDC RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*----------------------- SAI/I2S Configuration (PLLI2S) -------------------*/ + /*----------------------- Common configuration SAI/I2S ---------------------*/ + /* In Case of SAI or I2S Clock Configuration through PLLI2S, PLLI2SN division + factor is common parameters for both peripherals */ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == RCC_PERIPHCLK_SAI_PLLI2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------------- I2S configuration -------------------------*/ + /* In Case of I2S Clock Configuration through PLLI2S, PLLI2SR must be added + only for I2S configuration */ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLI2S, PLLI2SQ and PLLI2S_DIVQ must + be added only for SAI configuration */ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == (RCC_PERIPHCLK_SAI_PLLI2S)) + { + /* Check the PLLI2S division factors */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2S_DIVQ_VALUE(PeriphClkInit->PLLI2SDivQ)); + + /* Read PLLI2SR value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, tmpreg1); + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + } + + /*----------------- In Case of PLLI2S is just selected -----------------*/ + if ((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + + /* Configure the PLLI2S multiplication and division factors */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, + PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------- SAI/LTDC Configuration (PLLSAI) ------------------*/ + /*----------------------- Common configuration SAI/LTDC --------------------*/ + /* In Case of SAI or LTDC Clock Configuration through PLLSAI, PLLSAIN division + factor is common parameters for both peripherals */ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == RCC_PERIPHCLK_SAI_PLLSAI) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC)) + { + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is disabled */ + while (__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLSAI, PLLSAIQ and PLLSAI_DIVQ must + be added only for SAI configuration */ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == (RCC_PERIPHCLK_SAI_PLLSAI)) + { + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, PeriphClkInit->PLLSAI.PLLSAIQ, tmpreg1); + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + } + + /*---------------------------- LTDC configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == (RCC_PERIPHCLK_LTDC)) + { + assert_param(IS_RCC_PLLSAIR_VALUE(PeriphClkInit->PLLSAI.PLLSAIR)); + assert_param(IS_RCC_PLLSAI_DIVR_VALUE(PeriphClkInit->PLLSAIDivR)); + + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* LTDC_CLK(first level) = PLLSAI_VCO Output/PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, tmpreg1, PeriphClkInit->PLLSAI.PLLSAIR); + /* LTDC_CLK = LTDC_CLK(first level)/PLLSAIDIVR */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLSAIDivR); + } + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is ready */ + while (__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- RTC configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while ((PWR->CR & PWR_CR_DBP) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if ((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + return HAL_OK; +} + +/** + * @brief Configures the PeriphClkInit according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_SAI_PLLSAI | RCC_PERIPHCLK_SAI_PLLI2S | RCC_PERIPHCLK_LTDC | RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC; + + /* Get the PLLI2S Clock configuration -----------------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Get the PLLSAI Clock configuration -----------------------------------------------*/ + PeriphClkInit->PLLSAI.PLLSAIN = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); + PeriphClkInit->PLLSAI.PLLSAIR = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + PeriphClkInit->PLLSAI.PLLSAIQ = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Get the PLLSAI/PLLI2S division factors -----------------------------------------------*/ + PeriphClkInit->PLLI2SDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos); + PeriphClkInit->PLLSAIDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos); + PeriphClkInit->PLLSAIDivR = (uint32_t)(RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVR); + /* Get the RTC Clock configuration -----------------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SCLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + default: + { + break; + } + } + return frequency; +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified parameters in the + * RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals clocks(I2S and RTC clocks). + * + * @note A caution to be taken when HAL_RCCEx_PeriphCLKConfig() is used to select RTC clock selection, in this case + * the Reset of Backup domain will be applied in order to modify the RTC Clock source as consequence all backup + * domain (RTC and RCC_BDCR register expect BKPSRAM) will be reset + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*---------------------------- I2S configuration ---------------------------*/ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); +#if defined(STM32F411xE) + assert_param(IS_RCC_PLLI2SM_VALUE(PeriphClkInit->PLLI2S.PLLI2SM)); +#endif /* STM32F411xE */ + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + +#if defined(STM32F411xE) + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_I2SCLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, + PeriphClkInit->PLLI2S.PLLI2SR); +#else + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SR); +#endif /* STM32F411xE */ + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + + /*---------------------------- RTC configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while ((PWR->CR & PWR_CR_DBP) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if ((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) + /*---------------------------- TIM configuration ---------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ + return HAL_OK; +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_RTC; + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); +#if defined(STM32F411xE) + PeriphClkInit->PLLI2S.PLLI2SM = (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM); +#endif /* STM32F411xE */ + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) + /* Get the TIM Prescaler configuration -------------------------------------*/ + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SCLKSOURCE_PLLI2S: + { +#if defined(STM32F411xE) + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } +#else + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + if ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } +#endif /* STM32F411xE */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput / (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + default: + { + break; + } + } + return frequency; +} +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Select LSE mode + * + * @note This mode is only available for STM32F410xx/STM32F411xx/STM32F446xx/STM32F469xx/STM32F479xx/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx devices. + * + * @param Mode specifies the LSE mode. + * This parameter can be one of the following values: + * @arg RCC_LSE_LOWPOWER_MODE: LSE oscillator in low power mode selection + * @arg RCC_LSE_HIGHDRIVE_MODE: LSE oscillator in High Drive mode selection + * @retval None + */ +void HAL_RCCEx_SelectLSEMode(uint8_t Mode) +{ + /* Check the parameters */ + assert_param(IS_RCC_LSE_MODE(Mode)); + if (Mode == RCC_LSE_HIGHDRIVE_MODE) + { + SET_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); + } + else + { + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); + } +} + +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/** @defgroup RCCEx_Exported_Functions_Group2 Extended Clock management functions + * @brief Extended Clock management functions + * +@verbatim + =============================================================================== + ##### Extended clock management functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the + activation or deactivation of PLLI2S, PLLSAI. +@endverbatim + * @{ + */ + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Enable PLLI2S. + * @param PLLI2SInit pointer to an RCC_PLLI2SInitTypeDef structure that + * contains the configuration information for the PLLI2S + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit) +{ + uint32_t tickstart; + + /* Check for parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PLLI2SInit->PLLI2SN)); + assert_param(IS_RCC_PLLI2SR_VALUE(PLLI2SInit->PLLI2SR)); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + assert_param(IS_RCC_PLLI2SM_VALUE(PLLI2SInit->PLLI2SM)); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ +#if defined(RCC_PLLI2SCFGR_PLLI2SP) + assert_param(IS_RCC_PLLI2SP_VALUE(PLLI2SInit->PLLI2SP)); +#endif /* RCC_PLLI2SCFGR_PLLI2SP */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) + assert_param(IS_RCC_PLLI2SQ_VALUE(PLLI2SInit->PLLI2SQ)); +#endif /* RCC_PLLI2SCFGR_PLLI2SQ */ + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + + /* Wait till PLLI2S is disabled */ + tickstart = HAL_GetTick(); + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* Configure the PLLI2S division factors */ +#if defined(STM32F446xx) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SPCLK = PLLI2S_VCO / PLLI2SP */ + /* I2SQCLK = PLLI2S_VCO / PLLI2SQ */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SM, PLLI2SInit->PLLI2SN, \ + PLLI2SInit->PLLI2SP, PLLI2SInit->PLLI2SQ, PLLI2SInit->PLLI2SR); +#elif defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM)*/ + /* I2SQCLK = PLLI2S_VCO / PLLI2SQ */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SM, PLLI2SInit->PLLI2SN, \ + PLLI2SInit->PLLI2SQ, PLLI2SInit->PLLI2SR); +#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * PLLI2SN */ + /* I2SQCLK = PLLI2S_VCO / PLLI2SQ */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PLLI2SInit->PLLI2SN, PLLI2SInit->PLLI2SQ, PLLI2SInit->PLLI2SR); +#elif defined(STM32F411xE) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_I2SCLK_CONFIG(PLLI2SInit->PLLI2SM, PLLI2SInit->PLLI2SN, PLLI2SInit->PLLI2SR); +#else + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) x PLLI2SN */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SN, PLLI2SInit->PLLI2SR); +#endif /* STM32F446xx */ + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + + /* Wait till PLLI2S is ready */ + tickstart = HAL_GetTick(); + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +/** + * @brief Disable PLLI2S. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void) +{ + uint32_t tickstart; + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + + /* Wait till PLLI2S is disabled */ + tickstart = HAL_GetTick(); + while (READ_BIT(RCC->CR, RCC_CR_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Enable PLLSAI. + * @param PLLSAIInit pointer to an RCC_PLLSAIInitTypeDef structure that + * contains the configuration information for the PLLSAI + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI(RCC_PLLSAIInitTypeDef *PLLSAIInit) +{ + uint32_t tickstart; + + /* Check for parameters */ + assert_param(IS_RCC_PLLSAIN_VALUE(PLLSAIInit->PLLSAIN)); + assert_param(IS_RCC_PLLSAIQ_VALUE(PLLSAIInit->PLLSAIQ)); +#if defined(RCC_PLLSAICFGR_PLLSAIM) + assert_param(IS_RCC_PLLSAIM_VALUE(PLLSAIInit->PLLSAIM)); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ +#if defined(RCC_PLLSAICFGR_PLLSAIP) + assert_param(IS_RCC_PLLSAIP_VALUE(PLLSAIInit->PLLSAIP)); +#endif /* RCC_PLLSAICFGR_PLLSAIP */ +#if defined(RCC_PLLSAICFGR_PLLSAIR) + assert_param(IS_RCC_PLLSAIR_VALUE(PLLSAIInit->PLLSAIR)); +#endif /* RCC_PLLSAICFGR_PLLSAIR */ + + /* Disable the PLLSAI */ + __HAL_RCC_PLLSAI_DISABLE(); + + /* Wait till PLLSAI is disabled */ + tickstart = HAL_GetTick(); + while (__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* Configure the PLLSAI division factors */ +#if defined(STM32F446xx) + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) * (PLLSAIN/PLLSAIM) */ + /* SAIPCLK = PLLSAI_VCO / PLLSAIP */ + /* SAIQCLK = PLLSAI_VCO / PLLSAIQ */ + /* SAIRCLK = PLLSAI_VCO / PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PLLSAIInit->PLLSAIM, PLLSAIInit->PLLSAIN, \ + PLLSAIInit->PLLSAIP, PLLSAIInit->PLLSAIQ, 0U); +#elif defined(STM32F469xx) || defined(STM32F479xx) + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) * PLLSAIN */ + /* SAIPCLK = PLLSAI_VCO / PLLSAIP */ + /* SAIQCLK = PLLSAI_VCO / PLLSAIQ */ + /* SAIRCLK = PLLSAI_VCO / PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PLLSAIInit->PLLSAIN, PLLSAIInit->PLLSAIP, \ + PLLSAIInit->PLLSAIQ, PLLSAIInit->PLLSAIR); +#else + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) x PLLSAIN */ + /* SAIQCLK = PLLSAI_VCO / PLLSAIQ */ + /* SAIRCLK = PLLSAI_VCO / PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PLLSAIInit->PLLSAIN, PLLSAIInit->PLLSAIQ, PLLSAIInit->PLLSAIR); +#endif /* STM32F446xx */ + + /* Enable the PLLSAI */ + __HAL_RCC_PLLSAI_ENABLE(); + + /* Wait till PLLSAI is ready */ + tickstart = HAL_GetTick(); + while (__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +/** + * @brief Disable PLLSAI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI(void) +{ + uint32_t tickstart; + + /* Disable the PLLSAI */ + __HAL_RCC_PLLSAI_DISABLE(); + + /* Wait till PLLSAI is disabled */ + tickstart = HAL_GetTick(); + while (__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @} + */ + +#if defined(STM32F446xx) +/** + * @brief Returns the SYSCLK frequency + * + * @note This function implementation is valid only for STM32F446xx devices. + * @note This function add the PLL/PLLR System clock source + * + * @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: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) + * @note If SYSCLK source is PLL or PLLR, function returns values based on HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * @note (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f4xx_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. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @note This function can be used by the user application to compute the + * baudrate for the communication peripherals or configure other parameters. + * + * @note Each time SYSCLK changes, this function must be called to update the + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * + * @retval SYSCLK frequency + */ +uint32_t HAL_RCC_GetSysClockFreq(void) +{ + uint32_t pllm = 0U; + uint32_t pllvco = 0U; + uint32_t pllp = 0U; + uint32_t pllr = 0U; + uint32_t sysclockfreq = 0U; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + { + sysclockfreq = HSI_VALUE; + break; + } + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_CFGR_SWS_PLL: /* PLL/PLLP used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) * 2U); + + sysclockfreq = pllvco / pllp; + break; + } + case RCC_CFGR_SWS_PLLR: /* PLL/PLLR used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + pllr = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos); + + sysclockfreq = pllvco / pllr; + break; + } + default: + { + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} +#endif /* STM32F446xx */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE, PLL, PLLI2S and PLLSAI OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS, MCO1 and MCO2 OFF + * - All interrupts disabled + * @note This function doesn't modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_DeInit(void) +{ + uint32_t tickstart; + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Set HSION bit to the reset value */ + SET_BIT(RCC->CR, RCC_CR_HSION); + + /* Wait till HSI is ready */ + while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set HSITRIM[4:0] bits to the reset value */ + SET_BIT(RCC->CR, RCC_CR_HSITRIM_4); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Reset CFGR register */ + CLEAR_REG(RCC->CFGR); + + /* Wait till clock switch is ready */ + while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Clear HSEON, HSEBYP and CSSON bits */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_CSSON); + + /* Wait till HSE is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Clear PLLON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON); + + /* Wait till PLL is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + +#if defined(RCC_PLLI2S_SUPPORT) + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Reset PLLI2SON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLI2SON); + + /* Wait till PLLI2S is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Reset PLLSAI bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLSAION); + + /* Wait till PLLSAI is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLSAIRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } +#endif /* RCC_PLLSAI_SUPPORT */ + + /* Once PLL, PLLI2S and PLLSAI are OFF, reset PLLCFGR register to default value */ +#if defined(STM32F412Cx) || defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || \ + defined(STM32F423xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) + RCC->PLLCFGR = RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLR_1; +#elif defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) + RCC->PLLCFGR = RCC_PLLCFGR_PLLR_0 | RCC_PLLCFGR_PLLR_1 | RCC_PLLCFGR_PLLR_2 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_0 | RCC_PLLCFGR_PLLQ_1 | RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLQ_3; +#else + RCC->PLLCFGR = RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_2; +#endif /* STM32F412Cx || STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx || STM32F446xx || STM32F469xx || STM32F479xx */ + + /* Reset PLLI2SCFGR register to default value */ +#if defined(STM32F412Cx) || defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || \ + defined(STM32F423xx) || defined(STM32F446xx) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SR_1; +#elif defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SR_1; +#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SR_1; +#elif defined(STM32F411xE) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SR_1; +#endif /* STM32F412Cx || STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx || STM32F446xx */ + + /* Reset PLLSAICFGR register */ +#if defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F437xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + RCC->PLLSAICFGR = RCC_PLLSAICFGR_PLLSAIN_6 | RCC_PLLSAICFGR_PLLSAIN_7 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIR_1; +#elif defined(STM32F446xx) + RCC->PLLSAICFGR = RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIN_6 | RCC_PLLSAICFGR_PLLSAIN_7 | RCC_PLLSAICFGR_PLLSAIQ_2; +#endif /* STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F469xx || STM32F479xx */ + + /* Disable all interrupts */ + CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE | RCC_CIR_LSERDYIE | RCC_CIR_HSIRDYIE | RCC_CIR_HSERDYIE | RCC_CIR_PLLRDYIE); + +#if defined(RCC_CIR_PLLI2SRDYIE) + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE); +#endif /* RCC_CIR_PLLI2SRDYIE */ + +#if defined(RCC_CIR_PLLSAIRDYIE) + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE); +#endif /* RCC_CIR_PLLSAIRDYIE */ + + /* Clear all interrupt flags */ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC | RCC_CIR_LSERDYC | RCC_CIR_HSIRDYC | RCC_CIR_HSERDYC | RCC_CIR_PLLRDYC | + RCC_CIR_CSSC); + +#if defined(RCC_CIR_PLLI2SRDYC) + SET_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYC); +#endif /* RCC_CIR_PLLI2SRDYC */ + +#if defined(RCC_CIR_PLLSAIRDYC) + SET_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYC); +#endif /* RCC_CIR_PLLSAIRDYC */ + + /* Clear LSION bit */ + CLEAR_BIT(RCC->CSR, RCC_CSR_LSION); + + /* Reset all CSR flags */ + SET_BIT(RCC->CSR, RCC_CSR_RMVF); + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HSI_VALUE; + + /* Adapt Systick interrupt period */ + if (HAL_InitTick(uwTickPrio) != HAL_OK) + { + return HAL_ERROR; + } + else + { + return HAL_OK; + } +} + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Initializes the RCC Oscillators according to the specified parameters in the + * RCC_OscInitTypeDef. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC Oscillators. + * @note The PLL is not disabled when used as system clock. + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not + * supported by this API. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this API. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @note This function add the PLL/PLLR factor management during PLL configuration this feature + * is only available in STM32F410xx/STM32F446xx/STM32F469xx/STM32F479xx/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart; + uint32_t pll_config; + + /* Check Null pointer */ + if (RCC_OscInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + /*------------------------------- HSE Configuration ------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */ +#if defined(STM32F446xx) + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) + || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)) || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLLR) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) +#else + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) + || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) +#endif /* STM32F446xx */ + { + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + { + return HAL_ERROR; + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + + /* Check the HSE State */ + if ((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSE is bypassed or disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ +#if defined(STM32F446xx) + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) + || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)) || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLLR) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) +#else + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) + || \ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) +#endif /* STM32F446xx */ + { + /* When HSI is used as system clock it will not disabled */ + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + { + return HAL_ERROR; + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + } + else + { + /* Check the HSI State */ + if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF) + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF) + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + { + FlagStatus pwrclkchanged = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Update LSE configuration in Backup Domain control register */ + /* Requires to enable write access to Backup Domain of necessary */ + if (__HAL_RCC_PWR_IS_CLK_DISABLED()) + { + __HAL_RCC_PWR_CLK_ENABLE(); + pwrclkchanged = SET; + } + + if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + /* Check the LSE State */ + if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Restore clock configuration if changed */ + if (pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + { + /* Check if the PLL is used as system clock or not */ + if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + { + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLLM_VALUE(RCC_OscInitStruct->PLL.PLLM)); + assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); + assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); + assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); + assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the main PLL clock source, multiplication and division factors. */ + WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ + RCC_OscInitStruct->PLL.PLLM | \ + (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ + (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ + (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos) | \ + (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + { + return HAL_ERROR; + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->PLLCFGR; +#if defined (RCC_PLLCFGR_PLLR) + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))) +#else + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) +#endif /* RCC_PLLCFGR_PLLR */ + { + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that will be configured. + * + * @note This function is only available in case of STM32F410xx/STM32F446xx/STM32F469xx/STM32F479xx/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx devices. + * @note This function add the PLL/PLLR factor management + * @retval None + */ +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; + + /* Get the HSE configuration -----------------------------------------------*/ + if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + { + RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; + } + else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON) + { + RCC_OscInitStruct->HSEState = RCC_HSE_ON; + } + else + { + RCC_OscInitStruct->HSEState = RCC_HSE_OFF; + } + + /* Get the HSI configuration -----------------------------------------------*/ + if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION) + { + RCC_OscInitStruct->HSIState = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSIState = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); + + /* Get the LSE configuration -----------------------------------------------*/ + if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + { + RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; + } + else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + { + RCC_OscInitStruct->LSEState = RCC_LSE_ON; + } + else + { + RCC_OscInitStruct->LSEState = RCC_LSE_OFF; + } + + /* Get the LSI configuration -----------------------------------------------*/ + if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION) + { + RCC_OscInitStruct->LSIState = RCC_LSI_ON; + } + else + { + RCC_OscInitStruct->LSIState = RCC_LSI_OFF; + } + + /* Get the PLL configuration -----------------------------------------------*/ + if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON) + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; + } + else + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; + } + RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLM = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); + RCC_OscInitStruct->PLL.PLLN = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + RCC_OscInitStruct->PLL.PLLP = (uint32_t)((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) + RCC_PLLCFGR_PLLP_0) << 1U) >> RCC_PLLCFGR_PLLP_Pos); + RCC_OscInitStruct->PLL.PLLQ = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos); + RCC_OscInitStruct->PLL.PLLR = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos); +} +#endif /* STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#endif /* HAL_RCC_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c new file mode 100644 index 00000000..f056ebf2 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c @@ -0,0 +1,7629 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim.c + * @author MCD Application Team + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer (TIM) peripheral: + * + TIM Time Base Initialization + * + TIM Time Base Start + * + TIM Time Base Start Interruption + * + TIM Time Base Start DMA + * + TIM Output Compare/PWM Initialization + * + TIM Output Compare/PWM Channel Configuration + * + TIM Output Compare/PWM Start + * + TIM Output Compare/PWM Start Interruption + * + TIM Output Compare/PWM Start DMA + * + TIM Input Capture Initialization + * + TIM Input Capture Channel Configuration + * + TIM Input Capture Start + * + TIM Input Capture Start Interruption + * + TIM Input Capture Start DMA + * + TIM One Pulse Initialization + * + TIM One Pulse Channel Configuration + * + TIM One Pulse Start + * + TIM Encoder Interface Initialization + * + TIM Encoder Interface Start + * + TIM Encoder Interface Start Interruption + * + TIM Encoder Interface Start DMA + * + Commutation Event configuration with Interruption and DMA + * + TIM OCRef clear configuration + * + TIM External Clock configuration + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### TIMER Generic features ##### + ============================================================================== + [..] The Timer features include: + (#) 16-bit up, down, up/down auto-reload counter. + (#) 16-bit programmable prescaler allowing dividing (also on the fly) the + counter clock frequency either by any factor between 1 and 65536. + (#) Up to 4 independent channels for: + (++) Input Capture + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to interconnect + several timers together. + (#) Supports incremental encoder for positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending on the selected feature: + (++) Time Base : HAL_TIM_Base_MspInit() + (++) Input Capture : HAL_TIM_IC_MspInit() + (++) Output Compare : HAL_TIM_OC_MspInit() + (++) PWM generation : HAL_TIM_PWM_MspInit() + (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit() + (++) Encoder mode output : HAL_TIM_Encoder_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + Initialization function of this driver: + (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base + (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an + Output Compare signal. + (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a + PWM signal. + (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an + external signal. + (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer + in One Pulse Mode. + (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface. + + (#) Activate the TIM peripheral using one of the start functions depending from the feature used: + (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT() + (++) Input Capture : HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT() + (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT() + (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT() + (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT() + (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT(). + + (#) The DMA Burst is managed with the two following functions: + HAL_TIM_DMABurst_WriteStart() + HAL_TIM_DMABurst_ReadStart() + + *** Callback registration *** + ============================================= + + [..] + The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + + [..] + Use Function HAL_TIM_RegisterCallback() to register a callback. + HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle, + the Callback ID and a pointer to the user callback function. + + [..] + Use function HAL_TIM_UnRegisterCallback() to reset a callback to the default + weak function. + HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + + [..] + These functions allow to register/unregister following callbacks: + (+) Base_MspInitCallback : TIM Base Msp Init Callback. + (+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback. + (+) IC_MspInitCallback : TIM IC Msp Init Callback. + (+) IC_MspDeInitCallback : TIM IC Msp DeInit Callback. + (+) OC_MspInitCallback : TIM OC Msp Init Callback. + (+) OC_MspDeInitCallback : TIM OC Msp DeInit Callback. + (+) PWM_MspInitCallback : TIM PWM Msp Init Callback. + (+) PWM_MspDeInitCallback : TIM PWM Msp DeInit Callback. + (+) OnePulse_MspInitCallback : TIM One Pulse Msp Init Callback. + (+) OnePulse_MspDeInitCallback : TIM One Pulse Msp DeInit Callback. + (+) Encoder_MspInitCallback : TIM Encoder Msp Init Callback. + (+) Encoder_MspDeInitCallback : TIM Encoder Msp DeInit Callback. + (+) HallSensor_MspInitCallback : TIM Hall Sensor Msp Init Callback. + (+) HallSensor_MspDeInitCallback : TIM Hall Sensor Msp DeInit Callback. + (+) PeriodElapsedCallback : TIM Period Elapsed Callback. + (+) PeriodElapsedHalfCpltCallback : TIM Period Elapsed half complete Callback. + (+) TriggerCallback : TIM Trigger Callback. + (+) TriggerHalfCpltCallback : TIM Trigger half complete Callback. + (+) IC_CaptureCallback : TIM Input Capture Callback. + (+) IC_CaptureHalfCpltCallback : TIM Input Capture half complete Callback. + (+) OC_DelayElapsedCallback : TIM Output Compare Delay Elapsed Callback. + (+) PWM_PulseFinishedCallback : TIM PWM Pulse Finished Callback. + (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback. + (+) ErrorCallback : TIM Error Callback. + (+) CommutationCallback : TIM Commutation Callback. + (+) CommutationHalfCpltCallback : TIM Commutation half complete Callback. + (+) BreakCallback : TIM Break Callback. + + [..] +By default, after the Init and when the state is HAL_TIM_STATE_RESET +all interrupt callbacks are set to the corresponding weak functions: + examples HAL_TIM_TriggerCallback(), HAL_TIM_ErrorCallback(). + + [..] + Exception done for MspInit and MspDeInit functions that are reset to the legacy weak + functionalities in the Init / DeInit only when these callbacks are null + (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit + keep and use the user MspInit / MspDeInit callbacks(registered beforehand) + + [..] + Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only. + Exception done MspInit / MspDeInit that can be registered / unregistered + in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state, + thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_TIM_RegisterCallback() before calling DeInit or Init function. + + [..] + When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available and all callbacks + are set to the corresponding weak functions. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup TIM TIM + * @brief TIM HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup TIM_Private_Functions + * @{ + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource); +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + const TIM_SlaveConfigTypeDef *sSlaveConfig); +/** + * @} + */ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions + * @brief Time Base functions + * +@verbatim + ============================================================================== + ##### Time Base functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM base. + (+) De-initialize the TIM base. + (+) Start the Time Base. + (+) Stop the Time Base. + (+) Start the Time Base and enable interrupt. + (+) Stop the Time Base and disable interrupt. + (+) Start the Time Base and enable DMA transfer. + (+) Stop the Time Base and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Time base Unit according to the specified + * parameters in the TIM_HandleTypeDef and initialize the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->Base_MspInitCallback == NULL) + { + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Base_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the Time Base configuration */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Base peripheral + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->Base_MspDeInitCallback == NULL) + { + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + } + /* DeInit the low level hardware */ + htim->Base_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Base MSP. + * @param htim TIM Base handle + * @retval None + */ +__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Base_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Base MSP. + * @param htim TIM Base handle + * @retval None + */ +__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Base_MspDeInit could be implemented in the user file + */ +} + + +/** + * @brief Starts the TIM Base generation. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Check the TIM state */ + if (htim->State != HAL_TIM_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in interrupt mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Check the TIM state */ + if (htim->State != HAL_TIM_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Enable the TIM Update interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in interrupt mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Disable the TIM Update interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in DMA mode. + * @param htim TIM Base handle + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Set the TIM state */ + if (htim->State == HAL_TIM_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->State == HAL_TIM_STATE_READY) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + else + { + return HAL_ERROR; + } + + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Update DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in DMA mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE); + + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions + * @brief TIM Output Compare functions + * +@verbatim + ============================================================================== + ##### TIM Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Output Compare. + (+) De-initialize the TIM Output Compare. + (+) Start the TIM Output Compare. + (+) Stop the TIM Output Compare. + (+) Start the TIM Output Compare and enable interrupt. + (+) Stop the TIM Output Compare and disable interrupt. + (+) Start the TIM Output Compare and enable DMA transfer. + (+) Stop the TIM Output Compare and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Output Compare according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init() + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->OC_MspInitCallback == NULL) + { + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the Output Compare */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->OC_MspDeInitCallback == NULL) + { + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + } + /* DeInit the low level hardware */ + htim->OC_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Output Compare signal generation. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions + * @brief TIM PWM functions + * +@verbatim + ============================================================================== + ##### TIM PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM PWM. + (+) De-initialize the TIM PWM. + (+) Start the TIM PWM. + (+) Stop the TIM PWM. + (+) Start the TIM PWM and enable interrupt. + (+) Stop the TIM PWM and disable interrupt. + (+) Start the TIM PWM and enable DMA transfer. + (+) Stop the TIM PWM and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM PWM Time Base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->PWM_MspInitCallback == NULL) + { + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->PWM_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the PWM */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->PWM_MspDeInitCallback == NULL) + { + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + } + /* DeInit the low level hardware */ + htim->PWM_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the PWM signal generation. + * @param htim TIM handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode. + * @param htim TIM PWM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Capture/Compare 3 request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions + * @brief TIM Input Capture functions + * +@verbatim + ============================================================================== + ##### TIM Input Capture functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Input Capture. + (+) De-initialize the TIM Input Capture. + (+) Start the TIM Input Capture. + (+) Stop the TIM Input Capture. + (+) Start the TIM Input Capture and enable interrupt. + (+) Stop the TIM Input Capture and disable interrupt. + (+) Start the TIM Input Capture and enable DMA transfer. + (+) Stop the TIM Input Capture and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Input Capture Time base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init() + * @param htim TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->IC_MspInitCallback == NULL) + { + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->IC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the input capture */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->IC_MspDeInitCallback == NULL) + { + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + } + /* DeInit the low level hardware */ + htim->IC_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Input Capture MSP. + * @param htim TIM Input Capture handle + * @retval None + */ +__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Input Capture MSP. + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Input Capture measurement. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Input Capture measurement. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Input Capture measurement in interrupt mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Input Capture measurement in interrupt mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Set the TIM channel state */ + if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions + * @brief TIM One Pulse functions + * +@verbatim + ============================================================================== + ##### TIM One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM One Pulse. + (+) De-initialize the TIM One Pulse. + (+) Start the TIM One Pulse. + (+) Stop the TIM One Pulse. + (+) Start the TIM One Pulse and enable interrupt. + (+) Stop the TIM One Pulse and disable interrupt. + (+) Start the TIM One Pulse and enable DMA transfer. + (+) Stop the TIM One Pulse and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM One Pulse Time Base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init() + * @note When the timer instance is initialized in One Pulse mode, timer + * channels 1 and channel 2 are reserved and cannot be used for other + * purpose. + * @param htim TIM One Pulse handle + * @param OnePulseMode Select the One pulse mode. + * This parameter can be one of the following values: + * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. + * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_OPM_MODE(OnePulseMode)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->OnePulse_MspInitCallback == NULL) + { + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OnePulse_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OnePulse_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the One Pulse Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Reset the OPM Bit */ + htim->Instance->CR1 &= ~TIM_CR1_OPM; + + /* Configure the OPM Mode */ + htim->Instance->CR1 |= OnePulseMode; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM One Pulse + * @param htim TIM One Pulse handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->OnePulse_MspDeInitCallback == NULL) + { + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + } + /* DeInit the low level hardware */ + htim->OnePulse_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_OnePulse_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM One Pulse MSP. + * @param htim TIM One Pulse handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM One Pulse MSP. + * @param htim TIM One Pulse handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM One Pulse signal generation. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions + * @brief TIM Encoder functions + * +@verbatim + ============================================================================== + ##### TIM Encoder functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Encoder. + (+) De-initialize the TIM Encoder. + (+) Start the TIM Encoder. + (+) Stop the TIM Encoder. + (+) Start the TIM Encoder and enable interrupt. + (+) Stop the TIM Encoder and disable interrupt. + (+) Start the TIM Encoder and enable DMA transfer. + (+) Stop the TIM Encoder and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Encoder Interface and initialize the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init() + * @note Encoder mode and External clock mode 2 are not compatible and must not be selected together + * Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource + * using TIM_CLOCKSOURCE_ETRMODE2 and vice versa + * @note When the timer instance is initialized in Encoder mode, timer + * channels 1 and channel 2 are reserved and cannot be used for other + * purpose. + * @param htim TIM Encoder Interface handle + * @param sConfig TIM Encoder Interface configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, const TIM_Encoder_InitTypeDef *sConfig) +{ + uint32_t tmpsmcr; + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection)); + assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->Encoder_MspInitCallback == NULL) + { + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Encoder_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_Encoder_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Reset the SMS and ECE bits */ + htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE); + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = htim->Instance->CCMR1; + + /* Get the TIMx CCER register value */ + tmpccer = htim->Instance->CCER; + + /* Set the encoder Mode */ + tmpsmcr |= sConfig->EncoderMode; + + /* Select the Capture Compare 1 and the Capture Compare 2 as input */ + tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S); + tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U)); + + /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */ + tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC); + tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F); + tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U); + tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U); + + /* Set the TI1 and the TI2 Polarities */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); + tmpccer &= ~(TIM_CCER_CC1NP | TIM_CCER_CC2NP); + tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U); + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Write to TIMx CCMR1 */ + htim->Instance->CCMR1 = tmpccmr1; + + /* Write to TIMx CCER */ + htim->Instance->CCER = tmpccer; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + + +/** + * @brief DeInitializes the TIM Encoder interface + * @param htim TIM Encoder Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->Encoder_MspDeInitCallback == NULL) + { + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + } + /* DeInit the low level hardware */ + htim->Encoder_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Encoder_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Encoder Interface MSP. + * @param htim TIM Encoder Interface handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Encoder Interface MSP. + * @param htim TIM Encoder Interface handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Encoder Interface. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + + /* Enable the encoder interface channels */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + } + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in interrupt mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + + /* Enable the encoder interface channels */ + /* Enable the capture compare Interrupts 1 and/or 2 */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in interrupt mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if (Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + else if (Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 and 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in DMA mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @param pData1 The destination Buffer address for IC1. + * @param pData2 The destination Buffer address for IC2. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, + uint32_t *pData2, uint16_t Length) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData1 == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData2 == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + else + { + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((((pData1 == NULL) || (pData2 == NULL))) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError; + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + + default: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in DMA mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if (Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + } + else if (Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 and 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ +/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief TIM IRQ handler management + * +@verbatim + ============================================================================== + ##### IRQ handler management ##### + ============================================================================== + [..] + This section provides Timer IRQ handler function. + +@endverbatim + * @{ + */ +/** + * @brief This function handles TIM interrupts requests. + * @param htim TIM handle + * @retval None + */ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) +{ + uint32_t itsource = htim->Instance->DIER; + uint32_t itflag = htim->Instance->SR; + + /* Capture compare 1 event */ + if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1)) + { + if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1)) + { + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + } + /* Capture compare 2 event */ + if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2)) + { + if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 3 event */ + if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3)) + { + if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 4 event */ + if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4)) + { + if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* TIM Update event */ + if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE)) + { + if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Break input event */ + if ((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) + { + if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->BreakCallback(htim); +#else + HAL_TIMEx_BreakCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Trigger detection event */ + if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER)) + { + if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM commutation event */ + if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM)) + { + if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM)) + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions + * @brief TIM Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode. + (+) Configure External Clock source. + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master and the Slave synchronization. + (+) Configure the DMA Burst Mode. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the TIM Output Compare Channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim TIM Output Compare handle + * @param sConfig TIM Output Compare configuration structure + * @param Channel TIM Channels to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, + const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_OC_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + + /* Process Locked */ + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 1 in Output Compare */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 2 in Output Compare */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 3 in Output Compare */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 4 in Output Compare */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + break; + } + + default: + status = HAL_ERROR; + break; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM Input Capture Channels according to the specified + * parameters in the TIM_IC_InitTypeDef. + * @param htim TIM IC handle + * @param sConfig TIM Input Capture configuration structure + * @param Channel TIM Channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity)); + assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter)); + + /* Process Locked */ + __HAL_LOCK(htim); + + if (Channel == TIM_CHANNEL_1) + { + /* TI1 Configuration */ + TIM_TI1_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_2) + { + /* TI2 Configuration */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Set the IC2PSC value */ + htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U); + } + else if (Channel == TIM_CHANNEL_3) + { + /* TI3 Configuration */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + TIM_TI3_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC3PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC; + + /* Set the IC3PSC value */ + htim->Instance->CCMR2 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_4) + { + /* TI4 Configuration */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + TIM_TI4_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC4PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC; + + /* Set the IC4PSC value */ + htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U); + } + else + { + status = HAL_ERROR; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM PWM channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim TIM PWM handle + * @param sConfig TIM PWM configuration structure + * @param Channel TIM Channels to be configured + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, + const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); + + /* Process Locked */ + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the Channel 1 in PWM mode */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel1 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode; + break; + } + + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the Channel 2 in PWM mode */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel2 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the Channel 3 in PWM mode */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel3 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode; + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the Channel 4 in PWM mode */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel4 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + break; + } + + default: + status = HAL_ERROR; + break; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM One Pulse Channels according to the specified + * parameters in the TIM_OnePulse_InitTypeDef. + * @param htim TIM One Pulse handle + * @param sConfig TIM One Pulse configuration structure + * @param OutputChannel TIM output channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @param InputChannel TIM input Channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @note To output a waveform with a minimum delay user can enable the fast + * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx + * output is forced in response to the edge detection on TIx input, + * without taking in account the comparison. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, + uint32_t OutputChannel, uint32_t InputChannel) +{ + HAL_StatusTypeDef status = HAL_OK; + TIM_OC_InitTypeDef temp1; + + /* Check the parameters */ + assert_param(IS_TIM_OPM_CHANNELS(OutputChannel)); + assert_param(IS_TIM_OPM_CHANNELS(InputChannel)); + + if (OutputChannel != InputChannel) + { + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Extract the Output compare configuration from sConfig structure */ + temp1.OCMode = sConfig->OCMode; + temp1.Pulse = sConfig->Pulse; + temp1.OCPolarity = sConfig->OCPolarity; + temp1.OCNPolarity = sConfig->OCNPolarity; + temp1.OCIdleState = sConfig->OCIdleState; + temp1.OCNIdleState = sConfig->OCNIdleState; + + switch (OutputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_OC1_SetConfig(htim->Instance, &temp1); + break; + } + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_OC2_SetConfig(htim->Instance, &temp1); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + switch (InputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1FP1; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + break; + } + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI2FP2; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + break; + } + + default: + status = HAL_ERROR; + break; + } + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Configure the DMA Burst to transfer Data from the memory to the TIM peripheral + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @note This function should be used only when BurstLength is equal to DMA data transfer length. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, + uint32_t BurstLength) +{ + HAL_StatusTypeDef status; + + status = HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, + ((BurstLength) >> 8U) + 1U); + + + + return status; +} + +/** + * @brief Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @param DataLength Data length. This parameter can be one value + * between 1 and 0xFFFF. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); + + if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) + { + if ((BurstBuffer == NULL) && (BurstLength > 0U)) + { + return HAL_ERROR; + } + else + { + htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; + } + } + else + { + /* nothing to do */ + } + + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_COM: + { + /* Set the DMA commutation callbacks */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_TRIGGER: + { + /* Set the DMA trigger callbacks */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Configure the DMA Burst Mode */ + htim->Instance->DCR = (BurstBaseAddress | BurstLength); + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM DMA Burst mode + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA stream) */ + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + break; + } + case TIM_DMA_CC1: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + case TIM_DMA_CC2: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + case TIM_DMA_CC3: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + case TIM_DMA_CC4: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + case TIM_DMA_COM: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); + break; + } + case TIM_DMA_TRIGGER: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @note This function should be used only when BurstLength is equal to DMA data transfer length. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) +{ + HAL_StatusTypeDef status; + + status = HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, + ((BurstLength) >> 8U) + 1U); + + + return status; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read + * This parameter can be one of the following values: + * @arg TIM_DMABASE_CR1 + * @arg TIM_DMABASE_CR2 + * @arg TIM_DMABASE_SMCR + * @arg TIM_DMABASE_DIER + * @arg TIM_DMABASE_SR + * @arg TIM_DMABASE_EGR + * @arg TIM_DMABASE_CCMR1 + * @arg TIM_DMABASE_CCMR2 + * @arg TIM_DMABASE_CCER + * @arg TIM_DMABASE_CNT + * @arg TIM_DMABASE_PSC + * @arg TIM_DMABASE_ARR + * @arg TIM_DMABASE_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: TIM update Interrupt source + * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source + * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source + * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source + * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source + * @arg TIM_DMA_COM: TIM Commutation DMA source + * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @param DataLength Data length. This parameter can be one value + * between 1 and 0xFFFF. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); + + if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) + { + if ((BurstBuffer == NULL) && (BurstLength > 0U)) + { + return HAL_ERROR; + } + else + { + htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; + } + } + else + { + /* nothing to do */ + } + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC3: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC4: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_COM: + { + /* Set the DMA commutation callbacks */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_TRIGGER: + { + /* Set the DMA trigger callbacks */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Configure the DMA Burst Mode */ + htim->Instance->DCR = (BurstBaseAddress | BurstLength); + + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stop the DMA burst reading + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA stream) */ + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + break; + } + case TIM_DMA_CC1: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + case TIM_DMA_CC2: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + case TIM_DMA_CC3: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + case TIM_DMA_CC4: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + case TIM_DMA_COM: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); + break; + } + case TIM_DMA_TRIGGER: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + } + + /* Return function status */ + return status; +} + +/** + * @brief Generate a software event + * @param htim TIM handle + * @param EventSource specifies the event source. + * This parameter can be one of the following values: + * @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source + * @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source + * @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source + * @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source + * @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source + * @arg TIM_EVENTSOURCE_COM: Timer COM event source + * @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source + * @arg TIM_EVENTSOURCE_BREAK: Timer Break event source + * @note Basic timers can only generate an update event. + * @note TIM_EVENTSOURCE_COM is relevant only with advanced timer instances. + * @note TIM_EVENTSOURCE_BREAK are relevant only for timer instances + * supporting a break input. + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_EVENT_SOURCE(EventSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the event sources */ + htim->Instance->EGR = EventSource; + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Configures the OCRef clear feature + * @param htim TIM handle + * @param sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that + * contains the OCREF clear feature and parameters for the TIM peripheral. + * @param Channel specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, + const TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + switch (sClearInputConfig->ClearInputSource) + { + case TIM_CLEARINPUTSOURCE_NONE: + { + /* Clear the OCREF clear selection bit and the the ETR Bits */ + CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP)); + break; + } + + case TIM_CLEARINPUTSOURCE_ETR: + { + /* Check the parameters */ + assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity)); + assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler)); + assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter)); + + /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */ + if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + TIM_ETR_SetConfig(htim->Instance, + sClearInputConfig->ClearInputPrescaler, + sClearInputConfig->ClearInputPolarity, + sClearInputConfig->ClearInputFilter); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + switch (Channel) + { + case TIM_CHANNEL_1: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 1 */ + SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); + } + else + { + /* Disable the OCREF clear feature for Channel 1 */ + CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); + } + break; + } + case TIM_CHANNEL_2: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 2 */ + SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); + } + else + { + /* Disable the OCREF clear feature for Channel 2 */ + CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); + } + break; + } + case TIM_CHANNEL_3: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 3 */ + SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); + } + else + { + /* Disable the OCREF clear feature for Channel 3 */ + CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); + } + break; + } + case TIM_CHANNEL_4: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 4 */ + SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); + } + else + { + /* Disable the OCREF clear feature for Channel 4 */ + CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); + } + break; + } + default: + break; + } + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Configures the clock source to be used + * @param htim TIM handle + * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that + * contains the clock source information for the TIM peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); + + /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + htim->Instance->SMCR = tmpsmcr; + + switch (sClockSourceConfig->ClockSource) + { + case TIM_CLOCKSOURCE_INTERNAL: + { + assert_param(IS_TIM_INSTANCE(htim->Instance)); + break; + } + + case TIM_CLOCKSOURCE_ETRMODE1: + { + /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + + /* Select the External clock mode1 and the ETRF trigger */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + break; + } + + case TIM_CLOCKSOURCE_ETRMODE2: + { + /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + /* Enable the External clock mode2 */ + htim->Instance->SMCR |= TIM_SMCR_ECE; + break; + } + + case TIM_CLOCKSOURCE_TI1: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); + break; + } + + case TIM_CLOCKSOURCE_TI2: + { + /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI2 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI2_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); + break; + } + + case TIM_CLOCKSOURCE_TI1ED: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); + break; + } + + case TIM_CLOCKSOURCE_ITR0: + case TIM_CLOCKSOURCE_ITR1: + case TIM_CLOCKSOURCE_ITR2: + case TIM_CLOCKSOURCE_ITR3: + { + /* Check whether or not the timer instance supports internal trigger input */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); + break; + } + + default: + status = HAL_ERROR; + break; + } + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Selects the signal connected to the TI1 input: direct from CH1_input + * or a XOR combination between CH1_input, CH2_input & CH3_input + * @param htim TIM handle. + * @param TI1_Selection Indicate whether or not channel 1 is connected to the + * output of a XOR gate. + * This parameter can be one of the following values: + * @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input + * @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3 + * pins are connected to the TI1 input (XOR combination) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) +{ + uint32_t tmpcr2; + + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TI1SELECTION(TI1_Selection)); + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Reset the TI1 selection */ + tmpcr2 &= ~TIM_CR2_TI1S; + + /* Set the TI1 selection */ + tmpcr2 |= TI1_Selection; + + /* Write to TIMxCR2 */ + htim->Instance->CR2 = tmpcr2; + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the Slave mode + * (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + /* Disable Trigger Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode in interrupt mode + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the Slave mode + * (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, + const TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + /* Enable Trigger Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Read the captured value from Capture Compare unit + * @param htim TIM handle. + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval Captured value + */ +uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpreg = 0U; + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Return the capture 1 value */ + tmpreg = htim->Instance->CCR1; + + break; + } + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Return the capture 2 value */ + tmpreg = htim->Instance->CCR2; + + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Return the capture 3 value */ + tmpreg = htim->Instance->CCR3; + + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Return the capture 4 value */ + tmpreg = htim->Instance->CCR4; + + break; + } + + default: + break; + } + + return tmpreg; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * +@verbatim + ============================================================================== + ##### TIM Callbacks functions ##### + ============================================================================== + [..] + This section provides TIM callback functions: + (+) TIM Period elapsed callback + (+) TIM Output Compare callback + (+) TIM Input capture callback + (+) TIM Trigger callback + (+) TIM Error callback + +@endverbatim + * @{ + */ + +/** + * @brief Period elapsed callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedCallback could be implemented in the user file + */ +} + +/** + * @brief Period elapsed half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Output Compare callback in non-blocking mode + * @param htim TIM OC handle + * @retval None + */ +__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file + */ +} + +/** + * @brief Input Capture callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureCallback could be implemented in the user file + */ +} + +/** + * @brief Input Capture half complete callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Timer error callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_ErrorCallback could be implemented in the user file + */ +} + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User TIM callback to be used instead of the weak predefined callback + * @param htim tim handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID + * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID + * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID + * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID + * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID + * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID + * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID + * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID + * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID + * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID + * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID + * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID + * @param pCallback pointer to the callback function + * @retval status + */ +HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, + pTIM_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + return HAL_ERROR; + } + + if (htim->State == HAL_TIM_STATE_READY) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + htim->Base_MspInitCallback = pCallback; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + htim->Base_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + htim->IC_MspInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + htim->IC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + htim->OC_MspInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + htim->OC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + htim->PWM_MspInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + htim->PWM_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + htim->OnePulse_MspInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + htim->OnePulse_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + htim->Encoder_MspInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + htim->Encoder_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + htim->HallSensor_MspInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + htim->HallSensor_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_CB_ID : + htim->PeriodElapsedCallback = pCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : + htim->PeriodElapsedHalfCpltCallback = pCallback; + break; + + case HAL_TIM_TRIGGER_CB_ID : + htim->TriggerCallback = pCallback; + break; + + case HAL_TIM_TRIGGER_HALF_CB_ID : + htim->TriggerHalfCpltCallback = pCallback; + break; + + case HAL_TIM_IC_CAPTURE_CB_ID : + htim->IC_CaptureCallback = pCallback; + break; + + case HAL_TIM_IC_CAPTURE_HALF_CB_ID : + htim->IC_CaptureHalfCpltCallback = pCallback; + break; + + case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : + htim->OC_DelayElapsedCallback = pCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : + htim->PWM_PulseFinishedCallback = pCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : + htim->PWM_PulseFinishedHalfCpltCallback = pCallback; + break; + + case HAL_TIM_ERROR_CB_ID : + htim->ErrorCallback = pCallback; + break; + + case HAL_TIM_COMMUTATION_CB_ID : + htim->CommutationCallback = pCallback; + break; + + case HAL_TIM_COMMUTATION_HALF_CB_ID : + htim->CommutationHalfCpltCallback = pCallback; + break; + + case HAL_TIM_BREAK_CB_ID : + htim->BreakCallback = pCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (htim->State == HAL_TIM_STATE_RESET) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + htim->Base_MspInitCallback = pCallback; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + htim->Base_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + htim->IC_MspInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + htim->IC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + htim->OC_MspInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + htim->OC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + htim->PWM_MspInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + htim->PWM_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + htim->OnePulse_MspInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + htim->OnePulse_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + htim->Encoder_MspInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + htim->Encoder_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + htim->HallSensor_MspInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + htim->HallSensor_MspDeInitCallback = pCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Unregister a TIM callback + * TIM callback is redirected to the weak predefined callback + * @param htim tim handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID + * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID + * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID + * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID + * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID + * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID + * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID + * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID + * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID + * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID + * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID + * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID + * @retval status + */ +HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (htim->State == HAL_TIM_STATE_READY) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + /* Legacy weak Base MspInit Callback */ + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + /* Legacy weak Base Msp DeInit Callback */ + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + /* Legacy weak IC Msp Init Callback */ + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + /* Legacy weak IC Msp DeInit Callback */ + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + /* Legacy weak OC Msp Init Callback */ + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + /* Legacy weak OC Msp DeInit Callback */ + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + /* Legacy weak PWM Msp Init Callback */ + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + /* Legacy weak PWM Msp DeInit Callback */ + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + /* Legacy weak One Pulse Msp Init Callback */ + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + /* Legacy weak One Pulse Msp DeInit Callback */ + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + /* Legacy weak Encoder Msp Init Callback */ + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + /* Legacy weak Encoder Msp DeInit Callback */ + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + /* Legacy weak Hall Sensor Msp Init Callback */ + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + /* Legacy weak Hall Sensor Msp DeInit Callback */ + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + break; + + case HAL_TIM_PERIOD_ELAPSED_CB_ID : + /* Legacy weak Period Elapsed Callback */ + htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : + /* Legacy weak Period Elapsed half complete Callback */ + htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; + break; + + case HAL_TIM_TRIGGER_CB_ID : + /* Legacy weak Trigger Callback */ + htim->TriggerCallback = HAL_TIM_TriggerCallback; + break; + + case HAL_TIM_TRIGGER_HALF_CB_ID : + /* Legacy weak Trigger half complete Callback */ + htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; + break; + + case HAL_TIM_IC_CAPTURE_CB_ID : + /* Legacy weak IC Capture Callback */ + htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; + break; + + case HAL_TIM_IC_CAPTURE_HALF_CB_ID : + /* Legacy weak IC Capture half complete Callback */ + htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; + break; + + case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : + /* Legacy weak OC Delay Elapsed Callback */ + htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : + /* Legacy weak PWM Pulse Finished Callback */ + htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : + /* Legacy weak PWM Pulse Finished half complete Callback */ + htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; + break; + + case HAL_TIM_ERROR_CB_ID : + /* Legacy weak Error Callback */ + htim->ErrorCallback = HAL_TIM_ErrorCallback; + break; + + case HAL_TIM_COMMUTATION_CB_ID : + /* Legacy weak Commutation Callback */ + htim->CommutationCallback = HAL_TIMEx_CommutCallback; + break; + + case HAL_TIM_COMMUTATION_HALF_CB_ID : + /* Legacy weak Commutation half complete Callback */ + htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; + break; + + case HAL_TIM_BREAK_CB_ID : + /* Legacy weak Break Callback */ + htim->BreakCallback = HAL_TIMEx_BreakCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (htim->State == HAL_TIM_STATE_RESET) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + /* Legacy weak Base MspInit Callback */ + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + /* Legacy weak Base Msp DeInit Callback */ + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + /* Legacy weak IC Msp Init Callback */ + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + /* Legacy weak IC Msp DeInit Callback */ + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + /* Legacy weak OC Msp Init Callback */ + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + /* Legacy weak OC Msp DeInit Callback */ + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + /* Legacy weak PWM Msp Init Callback */ + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + /* Legacy weak PWM Msp DeInit Callback */ + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + /* Legacy weak One Pulse Msp Init Callback */ + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + /* Legacy weak One Pulse Msp DeInit Callback */ + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + /* Legacy weak Encoder Msp Init Callback */ + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + /* Legacy weak Encoder Msp DeInit Callback */ + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + /* Legacy weak Hall Sensor Msp Init Callback */ + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + /* Legacy weak Hall Sensor Msp DeInit Callback */ + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions + * @brief TIM Peripheral State functions + * +@verbatim + ============================================================================== + ##### Peripheral State functions ##### + ============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Base handle state. + * @param htim TIM Base handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM OC handle state. + * @param htim TIM Output Compare handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM PWM handle state. + * @param htim TIM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Input Capture handle state. + * @param htim TIM IC handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM One Pulse Mode handle state. + * @param htim TIM OPM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode handle state. + * @param htim TIM Encoder Interface handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode handle state. + * @param htim TIM handle + * @retval Active channel + */ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim) +{ + return htim->Channel; +} + +/** + * @brief Return actual state of the TIM channel. + * @param htim TIM handle + * @param Channel TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @arg TIM_CHANNEL_5: TIM Channel 5 + * @arg TIM_CHANNEL_6: TIM Channel 6 + * @retval TIM Channel state + */ +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_state; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + + return channel_state; +} + +/** + * @brief Return actual state of a DMA burst operation. + * @param htim TIM handle + * @retval DMA burst state + */ +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + + return htim->DMABurstState; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ + +/** + * @brief TIM DMA error callback + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMAError(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->ErrorCallback(htim); +#else + HAL_TIM_ErrorCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Delay Pulse complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Delay Pulse half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedHalfCpltCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Capture complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Capture half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureHalfCpltCallback(htim); +#else + HAL_TIM_IC_CaptureHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Period Elapse complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Period Elapse half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedHalfCpltCallback(htim); +#else + HAL_TIM_PeriodElapsedHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Trigger callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Trigger half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerHalfCpltCallback(htim); +#else + HAL_TIM_TriggerHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief Time Base configuration + * @param TIMx TIM peripheral + * @param Structure TIM Base configuration structure + * @retval None + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure) +{ + uint32_t tmpcr1; + tmpcr1 = TIMx->CR1; + + /* Set TIM Time Base Unit parameters ---------------------------------------*/ + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + { + /* Select the Counter Mode */ + tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); + tmpcr1 |= Structure->CounterMode; + } + + if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) + { + /* Set the clock division */ + tmpcr1 &= ~TIM_CR1_CKD; + tmpcr1 |= (uint32_t)Structure->ClockDivision; + } + + /* Set the auto-reload preload */ + MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); + + /* Set the Autoreload value */ + TIMx->ARR = (uint32_t)Structure->Period ; + + /* Set the Prescaler value */ + TIMx->PSC = Structure->Prescaler; + + if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) + { + /* Set the Repetition Counter value */ + TIMx->RCR = Structure->RepetitionCounter; + } + + /* Disable Update Event (UEV) with Update Generation (UG) + by changing Update Request Source (URS) to avoid Update flag (UIF) */ + SET_BIT(TIMx->CR1, TIM_CR1_URS); + + /* Generate an update event to reload the Prescaler + and the repetition counter (only for advanced timer) value immediately */ + TIMx->EGR = TIM_EGR_UG; + + TIMx->CR1 = tmpcr1; +} + +/** + * @brief Timer Output Compare 1 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= ~TIM_CCMR1_OC1M; + tmpccmrx &= ~TIM_CCMR1_CC1S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC1P; + /* Set the Output Compare Polarity */ + tmpccer |= OC_Config->OCPolarity; + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) + { + /* Check parameters */ + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC1NP; + /* Set the Output N Polarity */ + tmpccer |= OC_Config->OCNPolarity; + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC1NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS1; + tmpcr2 &= ~TIM_CR2_OIS1N; + /* Set the Output Idle state */ + tmpcr2 |= OC_Config->OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= OC_Config->OCNIdleState; + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 2 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR1_OC2M; + tmpccmrx &= ~TIM_CCMR1_CC2S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC2P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 4U); + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC2NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 4U); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC2NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS2; + tmpcr2 &= ~TIM_CR2_OIS2N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 2U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 2U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 3 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC3M; + tmpccmrx &= ~TIM_CCMR2_CC3S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC3P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 8U); + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC3NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 8U); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC3NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS3; + tmpcr2 &= ~TIM_CR2_OIS3N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 4U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 4U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 4 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC4M; + tmpccmrx &= ~TIM_CCMR2_CC4S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC4P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 12U); + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS4; + + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 6U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Slave Timer configuration function + * @param htim TIM handle + * @param sSlaveConfig Slave timer configuration + * @retval None + */ +static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + const TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Reset the Trigger Selection Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source */ + tmpsmcr |= sSlaveConfig->InputTrigger; + + /* Reset the slave mode Bits */ + tmpsmcr &= ~TIM_SMCR_SMS; + /* Set the slave mode */ + tmpsmcr |= sSlaveConfig->SlaveMode; + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Configure the trigger prescaler, filter, and polarity */ + switch (sSlaveConfig->InputTrigger) + { + case TIM_TS_ETRF: + { + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + /* Configure the ETR Trigger source */ + TIM_ETR_SetConfig(htim->Instance, + sSlaveConfig->TriggerPrescaler, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_TI1F_ED: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) + { + return HAL_ERROR; + } + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = htim->Instance->CCER; + htim->Instance->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = htim->Instance->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U); + + /* Write to TIMx CCMR1 and CCER registers */ + htim->Instance->CCMR1 = tmpccmr1; + htim->Instance->CCER = tmpccer; + break; + } + + case TIM_TS_TI1FP1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI1 Filter and Polarity */ + TIM_TI1_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_TI2FP2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI2 Filter and Polarity */ + TIM_TI2_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_ITR0: + case TIM_TS_ITR1: + case TIM_TS_ITR2: + case TIM_TS_ITR3: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + break; + } + + default: + status = HAL_ERROR; + break; + } + + return status; +} + +/** + * @brief Configure the TI1 as Input. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2. + * @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1 + * (on channel2 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + + /* Select the Input */ + if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) + { + tmpccmr1 &= ~TIM_CCMR1_CC1S; + tmpccmr1 |= TIM_ICSelection; + } + else + { + tmpccmr1 |= TIM_CCMR1_CC1S_0; + } + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI1. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= (TIM_ICFilter << 4U); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= TIM_ICPolarity; + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI2 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1. + * @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2 + * (on channel1 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + + /* Select the Input */ + tmpccmr1 &= ~TIM_CCMR1_CC2S; + tmpccmr1 |= (TIM_ICSelection << 8U); + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI2. + * @param TIMx to select the TIM peripheral. + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= (TIM_ICFilter << 12U); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= (TIM_ICPolarity << 4U); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI3 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4. + * @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2; + uint32_t tmpccer; + + /* Disable the Channel 3: Reset the CC3E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC3E; + tmpccmr2 = TIMx->CCMR2; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC3S; + tmpccmr2 |= TIM_ICSelection; + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC3F; + tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F); + + /* Select the Polarity and set the CC3E Bit */ + tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP); + tmpccer |= ((TIM_ICPolarity << 8U) & (TIM_CCER_CC3P | TIM_CCER_CC3NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI4 as Input. + * @param TIMx to select the TIM peripheral + * @param TIM_ICPolarity The Input Polarity. + * This parameter can be one of the following values: + * @arg TIM_ICPOLARITY_RISING + * @arg TIM_ICPOLARITY_FALLING + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICSelection specifies the input to be used. + * This parameter can be one of the following values: + * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4. + * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3. + * @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC. + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + * @retval None + */ +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2; + uint32_t tmpccer; + + /* Disable the Channel 4: Reset the CC4E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC4E; + tmpccmr2 = TIMx->CCMR2; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC4S; + tmpccmr2 |= (TIM_ICSelection << 8U); + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC4F; + tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F); + + /* Select the Polarity and set the CC4E Bit */ + tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP); + tmpccer |= ((TIM_ICPolarity << 12U) & (TIM_CCER_CC4P | TIM_CCER_CC4NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer ; +} + +/** + * @brief Selects the Input Trigger source + * @param TIMx to select the TIM peripheral + * @param InputTriggerSource The Input Trigger source. + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal Trigger 0 + * @arg TIM_TS_ITR1: Internal Trigger 1 + * @arg TIM_TS_ITR2: Internal Trigger 2 + * @arg TIM_TS_ITR3: Internal Trigger 3 + * @arg TIM_TS_TI1F_ED: TI1 Edge Detector + * @arg TIM_TS_TI1FP1: Filtered Timer Input 1 + * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 + * @arg TIM_TS_ETRF: External Trigger input + * @retval None + */ +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) +{ + uint32_t tmpsmcr; + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Reset the TS Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source and the slave mode*/ + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} +/** + * @brief Configures the TIMx External Trigger (ETR). + * @param TIMx to select the TIM peripheral + * @param TIM_ExtTRGPrescaler The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF. + * @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2. + * @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4. + * @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active. + * @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active. + * @param ExtTRGFilter External Trigger Filter. + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) +{ + uint32_t tmpsmcr; + + tmpsmcr = TIMx->SMCR; + + /* Reset the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel x. + * @param TIMx to select the TIM peripheral + * @param Channel specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @arg TIM_CHANNEL_4: TIM Channel 4 + * @param ChannelState specifies the TIM Channel CCxE bit new state. + * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE. + * @retval None + */ +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) +{ + uint32_t tmp; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(TIMx)); + assert_param(IS_TIM_CHANNELS(Channel)); + + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + + /* Reset the CCxE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ +} + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief Reset interrupt callbacks to the legacy weak callbacks. + * @param htim pointer to a TIM_HandleTypeDef structure that contains + * the configuration information for TIM module. + * @retval None + */ +void TIM_ResetCallback(TIM_HandleTypeDef *htim) +{ + /* Reset the TIM callback to the legacy weak callbacks */ + htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; + htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; + htim->TriggerCallback = HAL_TIM_TriggerCallback; + htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; + htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; + htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; + htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; + htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; + htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; + htim->ErrorCallback = HAL_TIM_ErrorCallback; + htim->CommutationCallback = HAL_TIMEx_CommutCallback; + htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; + htim->BreakCallback = HAL_TIMEx_BreakCallback; +} +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c new file mode 100644 index 00000000..889f8fb9 --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c @@ -0,0 +1,2410 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim_ex.c + * @author MCD Application Team + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer Extended peripheral: + * + Time Hall Sensor Interface Initialization + * + Time Hall Sensor Interface Start + * + Time Complementary signal break and dead time configuration + * + Time Master and Slave synchronization configuration + * + Timer remapping capabilities configuration + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### TIMER Extended features ##### + ============================================================================== + [..] + The Timer Extended features include: + (#) Complementary outputs with programmable dead-time for : + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to + interconnect several timers together. + (#) Break input to put the timer output signals in reset state or in a known state. + (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for + positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending on the selected feature: + (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + initialization function of this driver: + (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the + Timer Hall Sensor Interface and the commutation event with the corresponding + Interrupt and DMA request if needed (Note that One Timer is used to interface + with the Hall sensor Interface and another Timer should be used to use + the commutation event). + + (#) Activate the TIM peripheral using one of the start functions: + (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), + HAL_TIMEx_OCN_Start_IT() + (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), + HAL_TIMEx_PWMN_Start_IT() + (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() + (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), + HAL_TIMEx_HallSensor_Start_IT(). + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup TIMEx TIMEx + * @brief TIM Extended HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma); +static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState); + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions + * @{ + */ + +/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * +@verbatim + ============================================================================== + ##### Timer Hall Sensor functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure TIM HAL Sensor. + (+) De-initialize TIM HAL Sensor. + (+) Start the Hall Sensor Interface. + (+) Stop the Hall Sensor Interface. + (+) Start the Hall Sensor Interface and enable interrupts. + (+) Stop the Hall Sensor Interface and disable interrupts. + (+) Start the Hall Sensor Interface and enable DMA transfers. + (+) Stop the Hall Sensor Interface and disable DMA transfers. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Hall Sensor Interface and initialize the associated handle. + * @note When the timer instance is initialized in Hall Sensor Interface mode, + * timer channels 1 and channel 2 are reserved and cannot be used for + * other purpose. + * @param htim TIM Hall Sensor Interface handle + * @param sConfig TIM Hall Sensor configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, const TIM_HallSensor_InitTypeDef *sConfig) +{ + TIM_OC_InitTypeDef OC_Config; + + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy week callbacks */ + TIM_ResetCallback(htim); + + if (htim->HallSensor_MspInitCallback == NULL) + { + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->HallSensor_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIMEx_HallSensor_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ + TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->IC1Prescaler; + + /* Enable the Hall sensor interface (XOR function of the three inputs) */ + htim->Instance->CR2 |= TIM_CR2_TI1S; + + /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1F_ED; + + /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; + + /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ + OC_Config.OCFastMode = TIM_OCFAST_DISABLE; + OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; + OC_Config.OCMode = TIM_OCMODE_PWM2; + OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; + OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; + OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; + OC_Config.Pulse = sConfig->Commutation_Delay; + + TIM_OC2_SetConfig(htim->Instance, &OC_Config); + + /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 + register to 101 */ + htim->Instance->CR2 &= ~TIM_CR2_MMS; + htim->Instance->CR2 |= TIM_TRGO_OC2REF; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Hall Sensor interface + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->HallSensor_MspDeInitCallback == NULL) + { + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + } + /* DeInit the low level hardware */ + htim->HallSensor_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIMEx_HallSensor_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Hall Sensor MSP. + * @param htim TIM Hall Sensor Interface handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Hall Sensor MSP. + * @param htim TIM Hall Sensor Interface handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Hall Sensor Interface. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall sensor Interface. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1, 2 and 3 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in interrupt mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the capture compare Interrupts 1 event */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in interrupt mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts event */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in DMA mode. + * @param htim TIM Hall Sensor Interface handle + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel state */ + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Set the DMA Input Capture 1 Callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream for Capture 1*/ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the capture compare 1 Interrupt */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in DMA mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + + /* Disable the capture compare Interrupts 1 event */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * +@verbatim + ============================================================================== + ##### Timer Complementary Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary Output Compare/PWM. + (+) Stop the Complementary Output Compare/PWM. + (+) Start the Complementary Output Compare/PWM and enable interrupts. + (+) Stop the Complementary Output Compare/PWM and disable interrupts. + (+) Start the Complementary Output Compare/PWM and enable DMA transfers. + (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM Output Compare signal generation on the complementary + * output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation on the complementary + * output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim TIM OC handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpccer; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & TIM_CCER_CCxNE_MASK) == (uint32_t)RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * +@verbatim + ============================================================================== + ##### Timer Complementary PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary PWM. + (+) Stop the Complementary PWM. + (+) Start the Complementary PWM and enable interrupts. + (+) Stop the Complementary PWM and disable interrupts. + (+) Start the Complementary PWM and enable DMA transfers. + (+) Stop the Complementary PWM and disable DMA transfers. +@endverbatim + * @{ + */ + +/** + * @brief Starts the PWM signal generation on the complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation on the complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpccer; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & TIM_CCER_CCxNE_MASK) == (uint32_t)RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode on the + * complementary output + * @param htim TIM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, + uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) || (Length == 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode on the complementary + * output + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * +@verbatim + ============================================================================== + ##### Timer Complementary One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM One Pulse signal generation on the complementary + * output. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to enable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation on the complementary + * output. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to enable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + /* Enable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure the commutation event in case of use of the Hall sensor interface. + (+) Configure Output channels for OC and PWM mode. + + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master synchronization. + (+) Configure timer remapping capabilities. + +@endverbatim + * @{ + */ + +/** + * @brief Configure the TIM commutation event sequence. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Disable Commutation Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); + + /* Disable Commutation DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with interrupt. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Disable Commutation DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); + + /* Enable the Commutation Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with DMA. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @note The user should configure the DMA in his own software, in This function only the COMDE bit is set + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Enable the Commutation DMA Request */ + /* Set the DMA Commutation Callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; + + /* Disable Commutation Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); + + /* Enable the Commutation DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIM in master mode. + * @param htim TIM handle. + * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that + * contains the selected trigger output (TRGO) and the Master/Slave + * mode. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + const TIM_MasterConfigTypeDef *sMasterConfig) +{ + uint32_t tmpcr2; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); + assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); + + /* Check input state */ + __HAL_LOCK(htim); + + /* Change the handler state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Reset the MMS Bits */ + tmpcr2 &= ~TIM_CR2_MMS; + /* Select the TRGO source */ + tmpcr2 |= sMasterConfig->MasterOutputTrigger; + + /* Update TIMx CR2 */ + htim->Instance->CR2 = tmpcr2; + + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + /* Reset the MSM Bit */ + tmpsmcr &= ~TIM_SMCR_MSM; + /* Set master mode */ + tmpsmcr |= sMasterConfig->MasterSlaveMode; + + /* Update TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + } + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State + * and the AOE(automatic output enable). + * @param htim TIM handle + * @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that + * contains the BDTR Register configuration information for the TIM peripheral. + * @note Interrupts can be generated when an active level is detected on the + * break input, the break 2 input or the system break input. Break + * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) +{ + /* Keep this variable initialized to 0 as it is used to configure BDTR register */ + uint32_t tmpbdtr = 0U; + + /* Check the parameters */ + assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); + assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); + assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); + assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); + assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); + assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); + assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); + + /* Check input state */ + __HAL_LOCK(htim); + + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + + /* Set the BDTR bits */ + MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime); + MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode); + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity); + MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); + + + /* Set TIMx_BDTR */ + htim->Instance->BDTR = tmpbdtr; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIMx Remapping input capabilities. + * @param htim TIM handle. + * @param Remap specifies the TIM remapping source. + * For TIM1, the parameter can have the following values: (**) + * @arg TIM_TIM1_TIM3_TRGO: TIM1 ITR2 is connected to TIM3 TRGO + * @arg TIM_TIM1_LPTIM: TIM1 ITR2 is connected to LPTIM1 output + * + * For TIM2, the parameter can have the following values: (**) + * @arg TIM_TIM2_TIM8_TRGO: TIM2 ITR1 is connected to TIM8 TRGO (*) + * @arg TIM_TIM2_ETH_PTP: TIM2 ITR1 is connected to PTP trigger output (*) + * @arg TIM_TIM2_USBFS_SOF: TIM2 ITR1 is connected to OTG FS SOF + * @arg TIM_TIM2_USBHS_SOF: TIM2 ITR1 is connected to OTG FS SOF + * + * For TIM5, the parameter can have the following values: + * @arg TIM_TIM5_GPIO: TIM5 TI4 is connected to GPIO + * @arg TIM_TIM5_LSI: TIM5 TI4 is connected to LSI + * @arg TIM_TIM5_LSE: TIM5 TI4 is connected to LSE + * @arg TIM_TIM5_RTC: TIM5 TI4 is connected to the RTC wakeup interrupt + * @arg TIM_TIM5_TIM3_TRGO: TIM5 ITR1 is connected to TIM3 TRGO (*) + * @arg TIM_TIM5_LPTIM: TIM5 ITR1 is connected to LPTIM1 output (*) + * + * For TIM9, the parameter can have the following values: (**) + * @arg TIM_TIM9_TIM3_TRGO: TIM9 ITR1 is connected to TIM3 TRGO + * @arg TIM_TIM9_LPTIM: TIM9 ITR1 is connected to LPTIM1 output + * + * For TIM11, the parameter can have the following values: + * @arg TIM_TIM11_GPIO: TIM11 TI1 is connected to GPIO + * @arg TIM_TIM11_HSE: TIM11 TI1 is connected to HSE_RTC clock + * @arg TIM_TIM11_SPDIFRX: TIM11 TI1 is connected to SPDIFRX_FRAME_SYNC (*) + * + * (*) Value not defined in all devices. \n + * (**) Register not available in all devices. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) +{ + /* Check parameters */ + assert_param(IS_TIM_REMAP(htim->Instance, Remap)); + + __HAL_LOCK(htim); + +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM9_ITR1_RMP) + if ((Remap & LPTIM_REMAP_MASK) == LPTIM_REMAP_MASK) + { + /* Connect TIMx internal trigger to LPTIM1 output */ + __HAL_RCC_LPTIM1_CLK_ENABLE(); + MODIFY_REG(LPTIM1->OR, + (LPTIM_OR_TIM1_ITR2_RMP | LPTIM_OR_TIM5_ITR1_RMP | LPTIM_OR_TIM9_ITR1_RMP), + Remap & ~(LPTIM_REMAP_MASK)); + } + else + { + /* Set the Timer remapping configuration */ + WRITE_REG(htim->Instance->OR, Remap); + } +#else + /* Set the Timer remapping configuration */ + WRITE_REG(htim->Instance->OR, Remap); +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM9_ITR1_RMP */ + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions + * @brief Extended Callbacks functions + * +@verbatim + ============================================================================== + ##### Extended Callbacks functions ##### + ============================================================================== + [..] + This section provides Extended TIM callback functions: + (+) Timer Commutation callback + (+) Timer Break callback + +@endverbatim + * @{ + */ + +/** + * @brief Commutation callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutCallback could be implemented in the user file + */ +} +/** + * @brief Commutation half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Break detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_BreakCallback could be implemented in the user file + */ +} +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions + * @brief Extended Peripheral State functions + * +@verbatim + ============================================================================== + ##### Extended Peripheral State functions ##### + ============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Hall Sensor interface handle state. + * @param htim TIM Hall Sensor handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(const TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return actual state of the TIM complementary channel. + * @param htim TIM handle + * @param ChannelN TIM Complementary channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @retval TIM Complementary channel state + */ +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(const TIM_HandleTypeDef *htim, uint32_t ChannelN) +{ + HAL_TIM_ChannelStateTypeDef channel_state; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN)); + + channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN); + + return channel_state; +} +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions + * @{ + */ + +/** + * @brief TIM DMA Commutation callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Commutation half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationHalfCpltCallback(htim); +#else + HAL_TIMEx_CommutHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + + +/** + * @brief TIM DMA Delay Pulse complete callback (complementary channel). + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA error callback (complementary channel) + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->ErrorCallback(htim); +#else + HAL_TIM_ErrorCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel xN. + * @param TIMx to select the TIM peripheral + * @param Channel specifies the TIM Channel + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 + * @arg TIM_CHANNEL_2: TIM Channel 2 + * @arg TIM_CHANNEL_3: TIM Channel 3 + * @param ChannelNState specifies the TIM Channel CCxNE bit new state. + * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. + * @retval None + */ +static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) +{ + uint32_t tmp; + + tmp = TIM_CCER_CC1NE << (Channel & 0xFU); /* 0xFU = 15 bits max shift */ + + /* Reset the CCxNE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxNE Bit */ + TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0xFU)); /* 0xFU = 15 bits max shift */ +} +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c new file mode 100644 index 00000000..cf6d201b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c @@ -0,0 +1,3807 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_uart.c + * @author MCD Application Team + * @brief UART HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART). + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State and Errors functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The UART HAL driver can be used as follows: + + (#) Declare a UART_HandleTypeDef handle structure (eg. UART_HandleTypeDef huart). + (#) Initialize the UART low level resources by implementing the HAL_UART_MspInit() API: + (##) Enable the USARTx interface clock. + (##) UART pins configuration: + (+++) Enable the clock for the UART GPIOs. + (+++) Configure the UART TX/RX pins as alternate function pull-up. + (##) NVIC configuration if you need to use interrupt process (HAL_UART_Transmit_IT() + and HAL_UART_Receive_IT() APIs): + (+++) Configure the USARTx interrupt priority. + (+++) Enable the NVIC USART IRQ handle. + (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA() + and HAL_UART_Receive_DMA() APIs): + (+++) Declare a DMA handle structure for the Tx/Rx stream. + (+++) Enable the DMAx interface clock. + (+++) Configure the declared DMA handle structure with the required + Tx/Rx parameters. + (+++) Configure the DMA Tx/Rx stream. + (+++) Associate the initialized DMA handle to the UART DMA Tx/Rx handle. + (+++) Configure the priority and enable the NVIC for the transfer complete + interrupt on the DMA Tx/Rx stream. + (+++) Configure the USARTx interrupt priority and enable the NVIC USART IRQ handle + (used for last byte sending completion detection in DMA non circular mode) + + (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware + flow control and Mode(Receiver/Transmitter) in the huart Init structure. + + (#) For the UART asynchronous mode, initialize the UART registers by calling + the HAL_UART_Init() API. + + (#) For the UART Half duplex mode, initialize the UART registers by calling + the HAL_HalfDuplex_Init() API. + + (#) For the LIN mode, initialize the UART registers by calling the HAL_LIN_Init() API. + + (#) For the Multi-Processor mode, initialize the UART registers by calling + the HAL_MultiProcessor_Init() API. + + [..] + (@) The specific UART interrupts (Transmission complete interrupt, + RXNE interrupt and Error Interrupts) will be managed using the macros + __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit + and receive process. + + [..] + (@) These APIs (HAL_UART_Init() and HAL_HalfDuplex_Init()) configure also the + low level Hardware GPIO, CLOCK, CORTEX...etc) by calling the customized + HAL_UART_MspInit() API. + + ##### Callback registration ##### + ================================== + + [..] + The compilation define USE_HAL_UART_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + + [..] + Use Function HAL_UART_RegisterCallback() to register a user callback. + Function HAL_UART_RegisterCallback() allows to register following callbacks: + (+) TxHalfCpltCallback : Tx Half Complete Callback. + (+) TxCpltCallback : Tx Complete Callback. + (+) RxHalfCpltCallback : Rx Half Complete Callback. + (+) RxCpltCallback : Rx Complete Callback. + (+) ErrorCallback : Error Callback. + (+) AbortCpltCallback : Abort Complete Callback. + (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. + (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. + (+) MspInitCallback : UART MspInit. + (+) MspDeInitCallback : UART MspDeInit. + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + + [..] + Use function HAL_UART_UnRegisterCallback() to reset a callback to the default + weak (surcharged) function. + HAL_UART_UnRegisterCallback() takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (+) TxHalfCpltCallback : Tx Half Complete Callback. + (+) TxCpltCallback : Tx Complete Callback. + (+) RxHalfCpltCallback : Rx Half Complete Callback. + (+) RxCpltCallback : Rx Complete Callback. + (+) ErrorCallback : Error Callback. + (+) AbortCpltCallback : Abort Complete Callback. + (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. + (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. + (+) MspInitCallback : UART MspInit. + (+) MspDeInitCallback : UART MspDeInit. + + [..] + For specific callback RxEventCallback, use dedicated registration/reset functions: + respectively HAL_UART_RegisterRxEventCallback() , HAL_UART_UnRegisterRxEventCallback(). + + [..] + By default, after the HAL_UART_Init() and when the state is HAL_UART_STATE_RESET + all callbacks are set to the corresponding weak (surcharged) functions: + examples HAL_UART_TxCpltCallback(), HAL_UART_RxHalfCpltCallback(). + Exception done for MspInit and MspDeInit functions that are respectively + reset to the legacy weak (surcharged) functions in the HAL_UART_Init() + and HAL_UART_DeInit() only when these callbacks are null (not registered beforehand). + If not, MspInit or MspDeInit are not null, the HAL_UART_Init() and HAL_UART_DeInit() + keep and use the user MspInit/MspDeInit callbacks (registered beforehand). + + [..] + Callbacks can be registered/unregistered in HAL_UART_STATE_READY state only. + Exception done MspInit/MspDeInit that can be registered/unregistered + in HAL_UART_STATE_READY or HAL_UART_STATE_RESET state, thus registered (user) + MspInit/DeInit callbacks can be used during the Init/DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_UART_RegisterCallback() before calling HAL_UART_DeInit() + or HAL_UART_Init() function. + + [..] + When The compilation define USE_HAL_UART_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available + and weak (surcharged) callbacks are used. + + [..] + Three operation modes are available within this driver : + + *** Polling mode IO operation *** + ================================= + [..] + (+) Send an amount of data in blocking mode using HAL_UART_Transmit() + (+) Receive an amount of data in blocking mode using HAL_UART_Receive() + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Send an amount of data in non blocking mode using HAL_UART_Transmit_IT() + (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_TxCpltCallback + (+) Receive an amount of data in non blocking mode using HAL_UART_Receive_IT() + (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_RxCpltCallback + (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_UART_ErrorCallback + + *** DMA mode IO operation *** + ============================== + [..] + (+) Send an amount of data in non blocking mode (DMA) using HAL_UART_Transmit_DMA() + (+) At transmission end of half transfer HAL_UART_TxHalfCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_TxHalfCpltCallback + (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_TxCpltCallback + (+) Receive an amount of data in non blocking mode (DMA) using HAL_UART_Receive_DMA() + (+) At reception end of half transfer HAL_UART_RxHalfCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_RxHalfCpltCallback + (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_RxCpltCallback + (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_UART_ErrorCallback + (+) Pause the DMA Transfer using HAL_UART_DMAPause() + (+) Resume the DMA Transfer using HAL_UART_DMAResume() + (+) Stop the DMA Transfer using HAL_UART_DMAStop() + + + [..] This subsection also provides a set of additional functions providing enhanced reception + services to user. (For example, these functions allow application to handle use cases + where number of data to be received is unknown). + + (#) Compared to standard reception services which only consider number of received + data elements as reception completion criteria, these functions also consider additional events + as triggers for updating reception status to caller : + (+) Detection of inactivity period (RX line has not been active for a given period). + (++) RX inactivity detected by IDLE event, i.e. RX line has been in idle state (normally high state) + for 1 frame time, after last received byte. + + (#) There are two mode of transfer: + (+) Blocking mode: The reception is performed in polling mode, until either expected number of data is received, + or till IDLE event occurs. Reception is handled only during function execution. + When function exits, no data reception could occur. HAL status and number of actually received data elements, + are returned by function after finishing transfer. + (+) Non-Blocking mode: The reception is performed using Interrupts or DMA. + These API's return the HAL status. + The end of the data processing will be indicated through the + dedicated UART IRQ when using Interrupt mode or the DMA IRQ when using DMA mode. + The HAL_UARTEx_RxEventCallback() user callback will be executed during Receive process + The HAL_UART_ErrorCallback()user callback will be executed when a reception error is detected. + + (#) Blocking mode API: + (+) HAL_UARTEx_ReceiveToIdle() + + (#) Non-Blocking mode API with Interrupt: + (+) HAL_UARTEx_ReceiveToIdle_IT() + + (#) Non-Blocking mode API with DMA: + (+) HAL_UARTEx_ReceiveToIdle_DMA() + + + *** UART HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in UART HAL driver. + + (+) __HAL_UART_ENABLE: Enable the UART peripheral + (+) __HAL_UART_DISABLE: Disable the UART peripheral + (+) __HAL_UART_GET_FLAG : Check whether the specified UART flag is set or not + (+) __HAL_UART_CLEAR_FLAG : Clear the specified UART pending flag + (+) __HAL_UART_ENABLE_IT: Enable the specified UART interrupt + (+) __HAL_UART_DISABLE_IT: Disable the specified UART interrupt + (+) __HAL_UART_GET_IT_SOURCE: Check whether the specified UART interrupt has occurred or not + + [..] + (@) You can refer to the UART HAL driver header file for more useful macros + + @endverbatim + [..] + (@) Additional remark: If the parity is enabled, then the MSB bit of the data written + in the data register is transmitted but is changed by the parity bit. + Depending on the frame length defined by the M bit (8-bits or 9-bits), + the possible UART frame formats are as listed in the following table: + +-------------------------------------------------------------+ + | M bit | PCE bit | UART frame | + |---------------------|---------------------------------------| + | 0 | 0 | | SB | 8 bit data | STB | | + |---------|-----------|---------------------------------------| + | 0 | 1 | | SB | 7 bit data | PB | STB | | + |---------|-----------|---------------------------------------| + | 1 | 0 | | SB | 9 bit data | STB | | + |---------|-----------|---------------------------------------| + | 1 | 1 | | SB | 8 bit data | PB | STB | | + +-------------------------------------------------------------+ + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup UART UART + * @brief HAL UART module driver + * @{ + */ +#ifdef HAL_UART_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup UART_Private_Constants + * @{ + */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup UART_Private_Functions UART Private Functions + * @{ + */ + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +static void UART_EndTxTransfer(UART_HandleTypeDef *huart); +static void UART_EndRxTransfer(UART_HandleTypeDef *huart); +static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma); +static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma); +static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma); +static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma); +static void UART_DMAError(DMA_HandleTypeDef *hdma); +static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma); +static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma); +static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma); +static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); +static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart); +static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart); +static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart); +static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout); +static void UART_SetConfig(UART_HandleTypeDef *huart); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup UART_Exported_Functions UART Exported Functions + * @{ + */ + +/** @defgroup UART_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to initialize the USARTx or the UARTy + in asynchronous mode. + (+) For the asynchronous mode only these parameters can be configured: + (++) Baud Rate + (++) Word Length + (++) Stop Bit + (++) Parity: If the parity is enabled, then the MSB bit of the data written + in the data register is transmitted but is changed by the parity bit. + Depending on the frame length defined by the M bit (8-bits or 9-bits), + please refer to Reference manual for possible UART frame formats. + (++) Hardware flow control + (++) Receiver/transmitter modes + (++) Over Sampling Method + [..] + The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init() and HAL_MultiProcessor_Init() APIs + follow respectively the UART asynchronous, UART Half duplex, LIN and Multi-Processor configuration + procedures (details for the procedures are available in reference manual + (RM0430 for STM32F4X3xx MCUs and RM0402 for STM32F412xx MCUs + RM0383 for STM32F411xC/E MCUs and RM0401 for STM32F410xx MCUs + RM0090 for STM32F4X5xx/STM32F4X7xx/STM32F429xx/STM32F439xx MCUs + RM0390 for STM32F446xx MCUs and RM0386 for STM32F469xx/STM32F479xx MCUs)). + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the UART mode according to the specified parameters in + * the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE) + { + /* The hardware flow control is available only for USART1, USART2, USART3 and USART6. + Except for STM32F446xx devices, that is available for USART1, USART2, USART3, USART6, UART4 and UART5. + */ + assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance)); + assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); + } + else + { + assert_param(IS_UART_INSTANCE(huart->Instance)); + } + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In asynchronous mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + return HAL_OK; +} + +/** + * @brief Initializes the half-duplex mode according to the specified + * parameters in the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance)); + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In half-duplex mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN)); + + /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */ + SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state*/ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + return HAL_OK; +} + +/** + * @brief Initializes the LIN mode according to the specified + * parameters in the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param BreakDetectLength Specifies the LIN break detection length. + * This parameter can be one of the following values: + * @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection + * @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the LIN UART instance */ + assert_param(IS_UART_LIN_INSTANCE(huart->Instance)); + + /* Check the Break detection length parameter */ + assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength)); + assert_param(IS_UART_LIN_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_LIN_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In LIN mode, the following bits must be kept cleared: + - CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN)); + + /* Enable the LIN mode by setting the LINEN bit in the CR2 register */ + SET_BIT(huart->Instance->CR2, USART_CR2_LINEN); + + /* Set the USART LIN Break detection length. */ + CLEAR_BIT(huart->Instance->CR2, USART_CR2_LBDL); + SET_BIT(huart->Instance->CR2, BreakDetectLength); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state*/ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + return HAL_OK; +} + +/** + * @brief Initializes the Multi-Processor mode according to the specified + * parameters in the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param Address USART address + * @param WakeUpMethod specifies the USART wake-up method. + * This parameter can be one of the following values: + * @arg UART_WAKEUPMETHOD_IDLELINE: Wake-up by an idle line detection + * @arg UART_WAKEUPMETHOD_ADDRESSMARK: Wake-up by an address mark + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Check the Address & wake up method parameters */ + assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod)); + assert_param(IS_UART_ADDRESS(Address)); + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In Multi-Processor mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register */ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + + /* Set the USART address node */ + CLEAR_BIT(huart->Instance->CR2, USART_CR2_ADD); + SET_BIT(huart->Instance->CR2, Address); + + /* Set the wake up method by setting the WAKE bit in the CR1 register */ + CLEAR_BIT(huart->Instance->CR1, USART_CR1_WAKE); + SET_BIT(huart->Instance->CR1, WakeUpMethod); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + return HAL_OK; +} + +/** + * @brief DeInitializes the UART peripheral. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the Peripheral */ + __HAL_UART_DISABLE(huart); + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + if (huart->MspDeInitCallback == NULL) + { + huart->MspDeInitCallback = HAL_UART_MspDeInit; + } + /* DeInit the low level hardware */ + huart->MspDeInitCallback(huart); +#else + /* DeInit the low level hardware */ + HAL_UART_MspDeInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_RESET; + huart->RxState = HAL_UART_STATE_RESET; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Process Unlock */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief UART MSP Init. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_MspInit could be implemented in the user file + */ +} + +/** + * @brief UART MSP DeInit. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User UART Callback + * To be used instead of the weak predefined callback + * @note The HAL_UART_RegisterCallback() may be called before HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init(), + * HAL_MultiProcessor_Init() to register callbacks for HAL_UART_MSPINIT_CB_ID and HAL_UART_MSPDEINIT_CB_ID + * @param huart uart handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID + * @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID + * @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID + * @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID + * @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID + * @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID + * @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID + * @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID + * @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, + pUART_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + if (huart->gState == HAL_UART_STATE_READY) + { + switch (CallbackID) + { + case HAL_UART_TX_HALFCOMPLETE_CB_ID : + huart->TxHalfCpltCallback = pCallback; + break; + + case HAL_UART_TX_COMPLETE_CB_ID : + huart->TxCpltCallback = pCallback; + break; + + case HAL_UART_RX_HALFCOMPLETE_CB_ID : + huart->RxHalfCpltCallback = pCallback; + break; + + case HAL_UART_RX_COMPLETE_CB_ID : + huart->RxCpltCallback = pCallback; + break; + + case HAL_UART_ERROR_CB_ID : + huart->ErrorCallback = pCallback; + break; + + case HAL_UART_ABORT_COMPLETE_CB_ID : + huart->AbortCpltCallback = pCallback; + break; + + case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID : + huart->AbortTransmitCpltCallback = pCallback; + break; + + case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID : + huart->AbortReceiveCpltCallback = pCallback; + break; + + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = pCallback; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (huart->gState == HAL_UART_STATE_RESET) + { + switch (CallbackID) + { + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = pCallback; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Unregister an UART Callback + * UART callaback is redirected to the weak predefined callback + * @note The HAL_UART_UnRegisterCallback() may be called before HAL_UART_Init(), HAL_HalfDuplex_Init(), + * HAL_LIN_Init(), HAL_MultiProcessor_Init() to un-register callbacks for HAL_UART_MSPINIT_CB_ID + * and HAL_UART_MSPDEINIT_CB_ID + * @param huart uart handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID + * @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID + * @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID + * @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID + * @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID + * @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID + * @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID + * @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID + * @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (HAL_UART_STATE_READY == huart->gState) + { + switch (CallbackID) + { + case HAL_UART_TX_HALFCOMPLETE_CB_ID : + huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ + break; + + case HAL_UART_TX_COMPLETE_CB_ID : + huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */ + break; + + case HAL_UART_RX_HALFCOMPLETE_CB_ID : + huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ + break; + + case HAL_UART_RX_COMPLETE_CB_ID : + huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */ + break; + + case HAL_UART_ERROR_CB_ID : + huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */ + break; + + case HAL_UART_ABORT_COMPLETE_CB_ID : + huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + break; + + case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID : + huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ + break; + + case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID : + huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ + break; + + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */ + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = HAL_UART_MspDeInit; /* Legacy weak MspDeInitCallback */ + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_UART_STATE_RESET == huart->gState) + { + switch (CallbackID) + { + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = HAL_UART_MspInit; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = HAL_UART_MspDeInit; + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Register a User UART Rx Event Callback + * To be used instead of the weak predefined callback + * @param huart Uart handle + * @param pCallback Pointer to the Rx Event Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(huart); + + if (huart->gState == HAL_UART_STATE_READY) + { + huart->RxEventCallback = pCallback; + } + else + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(huart); + + return status; +} + +/** + * @brief UnRegister the UART Rx Event Callback + * UART Rx Event Callback is redirected to the weak HAL_UARTEx_RxEventCallback() predefined callback + * @param huart Uart handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(huart); + + if (huart->gState == HAL_UART_STATE_READY) + { + huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak UART Rx Event Callback */ + } + else + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(huart); + return status; +} +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group2 IO operation functions + * @brief UART Transmit and Receive functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + This subsection provides a set of functions allowing to manage the UART asynchronous + and Half duplex data transfers. + + (#) There are two modes of transfer: + (+) Blocking mode: The communication is performed in polling mode. + The HAL status of all data processing is returned by the same function + after finishing transfer. + (+) Non-Blocking mode: The communication is performed using Interrupts + or DMA, these API's return the HAL status. + The end of the data processing will be indicated through the + dedicated UART IRQ when using Interrupt mode or the DMA IRQ when + using DMA mode. + The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks + will be executed respectively at the end of the transmit or receive process + The HAL_UART_ErrorCallback()user callback will be executed when a communication error is detected. + + (#) Blocking mode API's are : + (+) HAL_UART_Transmit() + (+) HAL_UART_Receive() + + (#) Non-Blocking mode API's with Interrupt are : + (+) HAL_UART_Transmit_IT() + (+) HAL_UART_Receive_IT() + (+) HAL_UART_IRQHandler() + + (#) Non-Blocking mode API's with DMA are : + (+) HAL_UART_Transmit_DMA() + (+) HAL_UART_Receive_DMA() + (+) HAL_UART_DMAPause() + (+) HAL_UART_DMAResume() + (+) HAL_UART_DMAStop() + + (#) A set of Transfer Complete Callbacks are provided in Non_Blocking mode: + (+) HAL_UART_TxHalfCpltCallback() + (+) HAL_UART_TxCpltCallback() + (+) HAL_UART_RxHalfCpltCallback() + (+) HAL_UART_RxCpltCallback() + (+) HAL_UART_ErrorCallback() + + (#) Non-Blocking mode transfers could be aborted using Abort API's : + (+) HAL_UART_Abort() + (+) HAL_UART_AbortTransmit() + (+) HAL_UART_AbortReceive() + (+) HAL_UART_Abort_IT() + (+) HAL_UART_AbortTransmit_IT() + (+) HAL_UART_AbortReceive_IT() + + (#) For Abort services based on interrupts (HAL_UART_Abortxxx_IT), a set of Abort Complete Callbacks are provided: + (+) HAL_UART_AbortCpltCallback() + (+) HAL_UART_AbortTransmitCpltCallback() + (+) HAL_UART_AbortReceiveCpltCallback() + + (#) A Rx Event Reception Callback (Rx event notification) is available for Non_Blocking modes of enhanced reception services: + (+) HAL_UARTEx_RxEventCallback() + + (#) In Non-Blocking mode transfers, possible errors are split into 2 categories. + Errors are handled as follows : + (+) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is + to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error in Interrupt mode reception . + Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify error type, + and HAL_UART_ErrorCallback() user callback is executed. Transfer is kept ongoing on UART side. + If user wants to abort it, Abort services should be called by user. + (+) Error is considered as Blocking : Transfer could not be completed properly and is aborted. + This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode. + Error code is set to allow user to identify error type, and HAL_UART_ErrorCallback() user callback is executed. + + -@- In the Half duplex communication, it is forbidden to run the transmit + and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX can't be useful. + +@endverbatim + * @{ + */ + +/** + * @brief Sends an amount of data in blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the sent data is handled as a set of u16. In this case, Size must indicate the number + * of u16 provided through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + const uint8_t *pdata8bits; + const uint16_t *pdata16bits; + uint32_t tickstart = 0U; + + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (const uint16_t *) pData; + } + else + { + pdata8bits = pData; + pdata16bits = NULL; + } + + while (huart->TxXferCount > 0U) + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) + { + huart->gState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + if (pdata8bits == NULL) + { + huart->Instance->DR = (uint16_t)(*pdata16bits & 0x01FFU); + pdata16bits++; + } + else + { + huart->Instance->DR = (uint8_t)(*pdata8bits & 0xFFU); + pdata8bits++; + } + huart->TxXferCount--; + } + + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) + { + huart->gState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + + /* At end of Tx process, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives an amount of data in blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the received data is handled as a set of u16. In this case, Size must indicate the number + * of u16 available through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint8_t *pdata8bits; + uint16_t *pdata16bits; + uint32_t tickstart = 0U; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (uint16_t *) pData; + } + else + { + pdata8bits = pData; + pdata16bits = NULL; + } + + /* Check the remain data to be received */ + while (huart->RxXferCount > 0U) + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) + { + huart->RxState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + if (pdata8bits == NULL) + { + *pdata16bits = (uint16_t)(huart->Instance->DR & 0x01FF); + pdata16bits++; + } + else + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + } + pdata8bits++; + } + huart->RxXferCount--; + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sends an amount of data in non blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the sent data is handled as a set of u16. In this case, Size must indicate the number + * of u16 provided through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) +{ + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Enable the UART Transmit data register empty Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_TXE); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives an amount of data in non blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the received data is handled as a set of u16. In this case, Size must indicate the number + * of u16 available through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Set Reception type to Standard reception */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return (UART_Start_Receive_IT(huart, pData, Size)); + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sends an amount of data in DMA mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the sent data is handled as a set of u16. In this case, Size must indicate the number + * of u16 provided through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) +{ + const uint32_t *tmp; + + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Set the UART DMA transfer complete callback */ + huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt; + + /* Set the UART DMA Half transfer complete callback */ + huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt; + + /* Set the DMA error callback */ + huart->hdmatx->XferErrorCallback = UART_DMAError; + + /* Set the DMA abort callback */ + huart->hdmatx->XferAbortCallback = NULL; + + /* Enable the UART transmit DMA stream */ + tmp = (const uint32_t *)&pData; + if (HAL_DMA_Start_IT(huart->hdmatx, *(const uint32_t *)tmp, (uint32_t)&huart->Instance->DR, Size) != HAL_OK) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + /* Restore huart->gState to ready */ + huart->gState = HAL_UART_STATE_READY; + + return HAL_ERROR; + } + /* Clear the TC flag in the SR register by writing 0 to it */ + __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC); + + /* Enable the DMA transfer for transmit request by setting the DMAT bit + in the UART CR3 register */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives an amount of data in DMA mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the received data is handled as a set of u16. In this case, Size must indicate the number + * of u16 available through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @note When the UART parity is enabled (PCE = 1) the received data contains the parity bit. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Set Reception type to Standard reception */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return (UART_Start_Receive_DMA(huart, pData, Size)); + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Pauses the DMA Transfer. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart) +{ + uint32_t dmarequest = 0x00U; + + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) + { + /* Disable the UART DMA Tx request */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + } + + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) + { + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Disable the UART DMA Rx request */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + } + + return HAL_OK; +} + +/** + * @brief Resumes the DMA Transfer. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart) +{ + + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + /* Enable the UART DMA Tx request */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); + } + + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + { + /* Clear the Overrun flag before resuming the Rx transfer*/ + __HAL_UART_CLEAR_OREFLAG(huart); + + /* Re-enable PE and ERR (Frame error, noise error, overrun error) interrupts */ + if (huart->Init.Parity != UART_PARITY_NONE) + { + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); + } + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Enable the UART DMA Rx request */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); + } + + return HAL_OK; +} + +/** + * @brief Stops the DMA Transfer. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) +{ + uint32_t dmarequest = 0x00U; + /* The Lock is not implemented on this API to allow the user application + to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback(): + when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated + and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback() + */ + + /* Stop UART DMA Tx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream */ + if (huart->hdmatx != NULL) + { + HAL_DMA_Abort(huart->hdmatx); + } + UART_EndTxTransfer(huart); + } + + /* Stop UART DMA Rx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream */ + if (huart->hdmarx != NULL) + { + HAL_DMA_Abort(huart->hdmarx); + } + UART_EndRxTransfer(huart); + } + + return HAL_OK; +} + +/** + * @brief Receive an amount of data in blocking mode till either the expected number of data is received or an IDLE event occurs. + * @note HAL_OK is returned if reception is completed (expected number of data has been received) + * or if reception is stopped after IDLE event (less than the expected number of data has been received) + * In this case, RxLen output parameter indicates number of data available in reception buffer. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), + * the received data is handled as a set of uint16_t. In this case, Size must indicate the number + * of uint16_t available through pData. + * @param huart UART handle. + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @param RxLen Number of data elements finally received (could be lower than Size, in case reception ends on IDLE event) + * @param Timeout Timeout duration expressed in ms (covers the whole reception sequence). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, + uint32_t Timeout) +{ + uint8_t *pdata8bits; + uint16_t *pdata16bits; + uint32_t tickstart; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (uint16_t *) pData; + } + else + { + pdata8bits = pData; + pdata16bits = NULL; + } + + /* Initialize output number of received elements */ + *RxLen = 0U; + + /* as long as data have to be received */ + while (huart->RxXferCount > 0U) + { + /* Check if IDLE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) + { + /* Clear IDLE flag in ISR */ + __HAL_UART_CLEAR_IDLEFLAG(huart); + + /* If Set, but no data ever received, clear flag without exiting loop */ + /* If Set, and data has already been received, this means Idle Event is valid : End reception */ + if (*RxLen > 0U) + { + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; + } + } + + /* Check if RXNE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE)) + { + if (pdata8bits == NULL) + { + *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); + pdata16bits++; + } + else + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + } + + pdata8bits++; + } + /* Increment number of received elements */ + *RxLen += 1U; + huart->RxXferCount--; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + huart->RxState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + } + } + + /* Set number of received elements in output parameter : RxLen */ + *RxLen = huart->RxXferSize - huart->RxXferCount; + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive an amount of data in interrupt mode till either the expected number of data is received or an IDLE event occurs. + * @note Reception is initiated by this function call. Further progress of reception is achieved thanks + * to UART interrupts raised by RXNE and IDLE events. Callback is called at end of reception indicating + * number of received data elements. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), + * the received data is handled as a set of uint16_t. In this case, Size must indicate the number + * of uint16_t available through pData. + * @param huart UART handle. + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef status; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + status = UART_Start_Receive_IT(huart, pData, Size); + + /* Check Rx process has been successfully started */ + if (status == HAL_OK) + { + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + else + { + /* In case of errors already pending when reception is started, + Interrupts may have already been raised and lead to reception abortion. + (Overrun error for instance). + In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ + status = HAL_ERROR; + } + } + + return status; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive an amount of data in DMA mode till either the expected number of data is received or an IDLE event occurs. + * @note Reception is initiated by this function call. Further progress of reception is achieved thanks + * to DMA services, transferring automatically received data elements in user reception buffer and + * calling registered callbacks at half/end of reception. UART IDLE events are also used to consider + * reception phase as ended. In all cases, callback execution will indicate number of received data elements. + * @note When the UART parity is enabled (PCE = 1), the received data contain + * the parity bit (MSB position). + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), + * the received data is handled as a set of uint16_t. In this case, Size must indicate the number + * of uint16_t available through pData. + * @param huart UART handle. + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef status; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + status = UART_Start_Receive_DMA(huart, pData, Size); + + /* Check Rx process has been successfully started */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + else + { + /* In case of errors already pending when reception is started, + Interrupts may have already been raised and lead to reception abortion. + (Overrun error for instance). + In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ + status = HAL_ERROR; + } + + return status; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Provide Rx Event type that has lead to RxEvent callback execution. + * @note When HAL_UARTEx_ReceiveToIdle_IT() or HAL_UARTEx_ReceiveToIdle_DMA() API are called, progress + * of reception process is provided to application through calls of Rx Event callback (either default one + * HAL_UARTEx_RxEventCallback() or user registered one). As several types of events could occur (IDLE event, + * Half Transfer, or Transfer Complete), this function allows to retrieve the Rx Event type that has lead + * to Rx Event callback execution. + * @note This function is expected to be called within the user implementation of Rx Event Callback, + * in order to provide the accurate value : + * In Interrupt Mode : + * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received) + * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed (nb of + * received data is lower than expected one) + * In DMA Mode : + * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received) + * - HAL_UART_RXEVENT_HT : when half of expected nb of data has been received + * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed (nb of + * received data is lower than expected one). + * In DMA mode, RxEvent callback could be called several times; + * When DMA is configured in Normal Mode, HT event does not stop Reception process; + * When DMA is configured in Circular Mode, HT, TC or IDLE events don't stop Reception process; + * @param huart UART handle. + * @retval Rx Event Type (returned value will be a value of @ref UART_RxEvent_Type_Values) + */ +HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart) +{ + /* Return Rx Event type value, as stored in UART handle */ + return(huart->RxEventType); +} + +/** + * @brief Abort ongoing transfers (blocking mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx and Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream: use blocking DMA Abort API (no callback) */ + if (huart->hdmatx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmatx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream: use blocking DMA Abort API (no callback) */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Reset Tx and Rx transfer counters */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->RxState and huart->gState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->gState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return HAL_OK; +} + +/** + * @brief Abort ongoing Transmit transfer (blocking mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE and TCIE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmatx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmatx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Reset Tx transfer counter */ + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + return HAL_OK; +} + +/** + * @brief Abort ongoing Receive transfer (blocking mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart) +{ + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Reset Rx transfer counter */ + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return HAL_OK; +} + +/** + * @brief Abort ongoing transfers (Interrupt mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx and Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) +{ + uint32_t AbortCplt = 0x01U; + + /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised + before any call to DMA Abort functions */ + /* DMA Tx Handle is valid */ + if (huart->hdmatx != NULL) + { + /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + huart->hdmatx->XferAbortCallback = UART_DMATxAbortCallback; + } + else + { + huart->hdmatx->XferAbortCallback = NULL; + } + } + /* DMA Rx Handle is valid */ + if (huart->hdmarx != NULL) + { + /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + huart->hdmarx->XferAbortCallback = UART_DMARxAbortCallback; + } + else + { + huart->hdmarx->XferAbortCallback = NULL; + } + } + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + /* Disable DMA Tx at UART level */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream : use non blocking DMA Abort API (callback) */ + if (huart->hdmatx != NULL) + { + /* UART Tx DMA Abort callback has already been initialised : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) + { + huart->hdmatx->XferAbortCallback = NULL; + } + else + { + AbortCplt = 0x00U; + } + } + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream : use non blocking DMA Abort API (callback) */ + if (huart->hdmarx != NULL) + { + /* UART Rx DMA Abort callback has already been initialised : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + { + huart->hdmarx->XferAbortCallback = NULL; + AbortCplt = 0x01U; + } + else + { + AbortCplt = 0x00U; + } + } + } + + /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ + if (AbortCplt == 0x01U) + { + /* Reset Tx and Rx transfer counters */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; +} + +/** + * @brief Abort ongoing Transmit transfer (Interrupt mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE and TCIE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmatx != NULL) + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + huart->hdmatx->XferAbortCallback = UART_DMATxOnlyAbortCallback; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) + { + /* Call Directly huart->hdmatx->XferAbortCallback function in case of error */ + huart->hdmatx->XferAbortCallback(huart->hdmatx); + } + } + else + { + /* Reset Tx transfer counter */ + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Transmit Complete Callback */ + huart->AbortTransmitCpltCallback(huart); +#else + /* Call legacy weak Abort Transmit Complete Callback */ + HAL_UART_AbortTransmitCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Reset Tx transfer counter */ + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Transmit Complete Callback */ + huart->AbortTransmitCpltCallback(huart); +#else + /* Call legacy weak Abort Transmit Complete Callback */ + HAL_UART_AbortTransmitCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; +} + +/** + * @brief Abort ongoing Receive transfer (Interrupt mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart) +{ + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = UART_DMARxOnlyAbortCallback; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + { + /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */ + huart->hdmarx->XferAbortCallback(huart->hdmarx); + } + } + else + { + /* Reset Rx transfer counter */ + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Receive Complete Callback */ + huart->AbortReceiveCpltCallback(huart); +#else + /* Call legacy weak Abort Receive Complete Callback */ + HAL_UART_AbortReceiveCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Reset Rx transfer counter */ + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Receive Complete Callback */ + huart->AbortReceiveCpltCallback(huart); +#else + /* Call legacy weak Abort Receive Complete Callback */ + HAL_UART_AbortReceiveCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; +} + +/** + * @brief This function handles UART interrupt request. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) +{ + uint32_t isrflags = READ_REG(huart->Instance->SR); + uint32_t cr1its = READ_REG(huart->Instance->CR1); + uint32_t cr3its = READ_REG(huart->Instance->CR3); + uint32_t errorflags = 0x00U; + uint32_t dmarequest = 0x00U; + + /* If no error occurs */ + errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE)); + if (errorflags == RESET) + { + /* UART in mode Receiver -------------------------------------------------*/ + if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) + { + UART_Receive_IT(huart); + return; + } + } + + /* If some errors occur */ + if ((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) + || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) + { + /* UART parity error interrupt occurred ----------------------------------*/ + if (((isrflags & USART_SR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) + { + huart->ErrorCode |= HAL_UART_ERROR_PE; + } + + /* UART noise error interrupt occurred -----------------------------------*/ + if (((isrflags & USART_SR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + { + huart->ErrorCode |= HAL_UART_ERROR_NE; + } + + /* UART frame error interrupt occurred -----------------------------------*/ + if (((isrflags & USART_SR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + { + huart->ErrorCode |= HAL_UART_ERROR_FE; + } + + /* UART Over-Run interrupt occurred --------------------------------------*/ + if (((isrflags & USART_SR_ORE) != RESET) && (((cr1its & USART_CR1_RXNEIE) != RESET) + || ((cr3its & USART_CR3_EIE) != RESET))) + { + huart->ErrorCode |= HAL_UART_ERROR_ORE; + } + + /* Call UART Error Call back function if need be --------------------------*/ + if (huart->ErrorCode != HAL_UART_ERROR_NONE) + { + /* UART in mode Receiver -----------------------------------------------*/ + if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) + { + UART_Receive_IT(huart); + } + + /* If Overrun error occurs, or if any error occurs in DMA mode reception, + consider error as blocking */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || dmarequest) + { + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ + UART_EndRxTransfer(huart); + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError; + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + huart->hdmarx->XferAbortCallback(huart->hdmarx); + } + } + else + { + /* Call user error callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Call user error callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Non Blocking error : transfer could go on. + Error is notified to user through user error callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + + huart->ErrorCode = HAL_UART_ERROR_NONE; + } + } + return; + } /* End if some error occurs */ + + /* Check current reception Mode : + If Reception till IDLE event has been selected : */ + if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + && ((isrflags & USART_SR_IDLE) != 0U) + && ((cr1its & USART_CR1_IDLEIE) != 0U)) + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + + /* Check if DMA mode is enabled in UART */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* DMA mode enabled */ + /* Check received length : If all expected data are received, do nothing, + (DMA cplt callback will be called). + Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ + uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx); + if ((nb_remaining_rx_data > 0U) + && (nb_remaining_rx_data < huart->RxXferSize)) + { + /* Reception is not complete */ + huart->RxXferCount = nb_remaining_rx_data; + + /* In Normal mode, end DMA xfer and HAL UART Rx process*/ + if (huart->hdmarx->Init.Mode != DMA_CIRCULAR) + { + /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Disable the DMA transfer for the receiver request by resetting the DMAR bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + + /* Last bytes received, so no need as the abort is immediate */ + (void)HAL_DMA_Abort(huart->hdmarx); + } + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* If DMA is in Circular mode, Idle event is to be reported to user + even if occurring after a Transfer Complete event from DMA */ + if (nb_remaining_rx_data == huart->RxXferSize) + { + if (huart->hdmarx->Init.Mode == DMA_CIRCULAR) + { + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + } + } + return; + } + else + { + /* DMA mode not enabled */ + /* Check received length : If all expected data are received, do nothing. + Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ + uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount; + if ((huart->RxXferCount > 0U) + && (nb_rx_data > 0U)) + { + /* Disable the UART Parity Error Interrupt and RXNE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxEventCallback(huart, nb_rx_data); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, nb_rx_data); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + return; + } + } + + /* UART in mode Transmitter ------------------------------------------------*/ + if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) + { + UART_Transmit_IT(huart); + return; + } + + /* UART in mode Transmitter end --------------------------------------------*/ + if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) + { + UART_EndTransmit_IT(huart); + return; + } +} + +/** + * @brief Tx Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_TxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Tx Half Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_TxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_RxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Half Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_RxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief UART error callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief UART Abort Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortCpltCallback can be implemented in the user file. + */ +} + +/** + * @brief UART Abort Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortTransmitCpltCallback can be implemented in the user file. + */ +} + +/** + * @brief UART Abort Receive Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortReceiveCpltCallback can be implemented in the user file. + */ +} + +/** + * @brief Reception Event Callback (Rx event notification called after use of advanced reception service). + * @param huart UART handle + * @param Size Number of data available in application reception buffer (indicates a position in + * reception buffer until which, data are available) + * @retval None + */ +__weak void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + UNUSED(Size); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UARTEx_RxEventCallback can be implemented in the user file. + */ +} + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group3 Peripheral Control functions + * @brief UART control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the UART: + (+) HAL_LIN_SendBreak() API can be helpful to transmit the break character. + (+) HAL_MultiProcessor_EnterMuteMode() API can be helpful to enter the UART in mute mode. + (+) HAL_MultiProcessor_ExitMuteMode() API can be helpful to exit the UART mute mode by software. + (+) HAL_HalfDuplex_EnableTransmitter() API to enable the UART transmitter and disables the UART receiver in Half Duplex mode + (+) HAL_HalfDuplex_EnableReceiver() API to enable the UART receiver and disables the UART transmitter in Half Duplex mode + +@endverbatim + * @{ + */ + +/** + * @brief Transmits break characters. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Send break characters */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_SBK); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enters the UART in mute mode. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Enable the USART mute mode by setting the RWU bit in the CR1 register */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RWU); + + huart->gState = HAL_UART_STATE_READY; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Exits the UART mute mode: wake up software. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RWU); + + huart->gState = HAL_UART_STATE_READY; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enables the UART transmitter and disables the UART receiver. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg = 0x00U; + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /*-------------------------- USART CR1 Configuration -----------------------*/ + tmpreg = huart->Instance->CR1; + + /* Clear TE and RE bits */ + tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE)); + + /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */ + tmpreg |= (uint32_t)USART_CR1_TE; + + /* Write to USART CR1 */ + WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enables the UART receiver and disables the UART transmitter. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg = 0x00U; + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /*-------------------------- USART CR1 Configuration -----------------------*/ + tmpreg = huart->Instance->CR1; + + /* Clear TE and RE bits */ + tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE)); + + /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */ + tmpreg |= (uint32_t)USART_CR1_RE; + + /* Write to USART CR1 */ + WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Errors functions + * @brief UART State and Errors functions + * +@verbatim + ============================================================================== + ##### Peripheral State and Errors functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to return the State of + UART communication process, return Peripheral Errors occurred during communication + process + (+) HAL_UART_GetState() API can be helpful to check in run-time the state of the UART peripheral. + (+) HAL_UART_GetError() check in run-time errors that could be occurred during communication. + +@endverbatim + * @{ + */ + +/** + * @brief Returns the UART state. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL state + */ +HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart) +{ + uint32_t temp1 = 0x00U, temp2 = 0x00U; + temp1 = huart->gState; + temp2 = huart->RxState; + + return (HAL_UART_StateTypeDef)(temp1 | temp2); +} + +/** + * @brief Return the UART error code + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART. + * @retval UART Error Code + */ +uint32_t HAL_UART_GetError(const UART_HandleTypeDef *huart) +{ + return huart->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup UART_Private_Functions UART Private Functions + * @{ + */ + +/** + * @brief Initialize the callbacks to their default values. + * @param huart UART handle. + * @retval none + */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart) +{ + /* Init the UART Callback settings */ + huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ + huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */ + huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ + huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */ + huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */ + huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ + huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ + huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak RxEventCallback */ + +} +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @brief DMA UART transmit process complete callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + /* DMA Normal mode*/ + if ((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U) + { + huart->TxXferCount = 0x00U; + + /* Disable the DMA transfer for transmit request by setting the DMAT bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Enable the UART Transmit Complete Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + + } + /* DMA Circular mode */ + else + { +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA UART transmit process half complete callback + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxHalfCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxHalfCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART receive process complete callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* DMA Normal mode*/ + if ((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U) + { + huart->RxXferCount = 0U; + + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Disable the DMA transfer for the receiver request by setting the DMAR bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* If Reception till IDLE event has been selected, Disable IDLE Interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + } + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Transfer Complete */ + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Check current reception Mode : + If Reception till IDLE event has been selected : use Rx Event callback */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* In other cases : use Rx Complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxCpltCallback(huart); +#else + /*Call legacy weak Rx complete callback*/ + HAL_UART_RxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA UART receive process half complete callback + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Half Transfer */ + huart->RxEventType = HAL_UART_RXEVENT_HT; + + /* Check current reception Mode : + If Reception till IDLE event has been selected : use Rx Event callback */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize / 2U); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize / 2U); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* In other cases : use Rx Half Complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Half complete callback*/ + huart->RxHalfCpltCallback(huart); +#else + /*Call legacy weak Rx Half complete callback*/ + HAL_UART_RxHalfCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA UART communication error callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAError(DMA_HandleTypeDef *hdma) +{ + uint32_t dmarequest = 0x00U; + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Stop UART DMA Tx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) + { + huart->TxXferCount = 0x00U; + UART_EndTxTransfer(huart); + } + + /* Stop UART DMA Rx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) + { + huart->RxXferCount = 0x00U; + UART_EndRxTransfer(huart); + } + + huart->ErrorCode |= HAL_UART_ERROR_DMA; +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief This function handles UART Communication Timeout. It waits + * until a flag is no longer in the specified status. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param Flag specifies the UART flag to check. + * @param Status The actual Flag status (SET or RESET). + * @param Tickstart Tick start value + * @param Timeout Timeout duration + * @retval HAL status + */ +static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout) +{ + /* Wait until flag is set */ + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + + return HAL_TIMEOUT; + } + + if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC)) + { + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET) + { + /* Clear Overrun Error flag*/ + __HAL_UART_CLEAR_OREFLAG(huart); + + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts if ongoing */ + UART_EndRxTransfer(huart); + + huart->ErrorCode = HAL_UART_ERROR_ORE; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief Start Receive operation in interrupt mode. + * @note This function could be called by all HAL UART API providing reception in Interrupt mode. + * @note When calling this function, parameters validity is considered as already checked, + * i.e. Rx State, buffer address, ... + * UART Handle is assumed as Locked. + * @param huart UART handle. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + huart->pRxBuffPtr = pData; + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + + if (huart->Init.Parity != UART_PARITY_NONE) + { + /* Enable the UART Parity Error Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_PE); + } + + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + __HAL_UART_ENABLE_IT(huart, UART_IT_ERR); + + /* Enable the UART Data Register not empty Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE); + + return HAL_OK; +} + +/** + * @brief Start Receive operation in DMA mode. + * @note This function could be called by all HAL UART API providing reception in DMA mode. + * @note When calling this function, parameters validity is considered as already checked, + * i.e. Rx State, buffer address, ... + * UART Handle is assumed as Locked. + * @param huart UART handle. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + uint32_t *tmp; + + huart->pRxBuffPtr = pData; + huart->RxXferSize = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + + /* Set the UART DMA transfer complete callback */ + huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt; + + /* Set the UART DMA Half transfer complete callback */ + huart->hdmarx->XferHalfCpltCallback = UART_DMARxHalfCplt; + + /* Set the DMA error callback */ + huart->hdmarx->XferErrorCallback = UART_DMAError; + + /* Set the DMA abort callback */ + huart->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + tmp = (uint32_t *)&pData; + if (HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->DR, *(uint32_t *)tmp, Size) != HAL_OK) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + /* Restore huart->RxState to ready */ + huart->RxState = HAL_UART_STATE_READY; + + return HAL_ERROR; + } + /* Clear the Overrun flag just before enabling the DMA Rx request: can be mandatory for the second transfer */ + __HAL_UART_CLEAR_OREFLAG(huart); + + if (huart->Init.Parity != UART_PARITY_NONE) + { + /* Enable the UART Parity Error Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); + } + + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Enable the DMA transfer for the receiver request by setting the DMAR bit + in the UART CR3 register */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + return HAL_OK; +} + +/** + * @brief End ongoing Tx transfer on UART peripheral (following error detection or Transmit completion). + * @param huart UART handle. + * @retval None + */ +static void UART_EndTxTransfer(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE and TCIE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* At end of Tx process, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; +} + +/** + * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). + * @param huart UART handle. + * @retval None + */ +static void UART_EndRxTransfer(UART_HandleTypeDef *huart) +{ + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; +} + +/** + * @brief DMA UART communication abort callback, when initiated by HAL services on Error + * (To be called at end of DMA Abort procedure following error occurrence). + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + huart->RxXferCount = 0x00U; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Tx communication abort callback, when initiated by user + * (To be called at end of DMA Tx Abort procedure following user abort request). + * @note When this callback is executed, User Abort complete call back is called only if no + * Abort still ongoing for Rx DMA Handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->hdmatx->XferAbortCallback = NULL; + + /* Check if an Abort process is still ongoing */ + if (huart->hdmarx != NULL) + { + if (huart->hdmarx->XferAbortCallback != NULL) + { + return; + } + } + + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Rx communication abort callback, when initiated by user + * (To be called at end of DMA Rx Abort procedure following user abort request). + * @note When this callback is executed, User Abort complete call back is called only if no + * Abort still ongoing for Tx DMA Handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->hdmarx->XferAbortCallback = NULL; + + /* Check if an Abort process is still ongoing */ + if (huart->hdmatx != NULL) + { + if (huart->hdmatx->XferAbortCallback != NULL) + { + return; + } + } + + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Tx communication abort callback, when initiated by user by a call to + * HAL_UART_AbortTransmit_IT API (Abort only Tx transfer) + * (This callback is executed at end of DMA Tx Abort procedure following user abort request, + * and leads to user Tx Abort Complete callback execution). + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Transmit Complete Callback */ + huart->AbortTransmitCpltCallback(huart); +#else + /* Call legacy weak Abort Transmit Complete Callback */ + HAL_UART_AbortTransmitCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Rx communication abort callback, when initiated by user by a call to + * HAL_UART_AbortReceive_IT API (Abort only Rx transfer) + * (This callback is executed at end of DMA Rx Abort procedure following user abort request, + * and leads to user Rx Abort Complete callback execution). + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Receive Complete Callback */ + huart->AbortReceiveCpltCallback(huart); +#else + /* Call legacy weak Abort Receive Complete Callback */ + HAL_UART_AbortReceiveCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief Sends an amount of data in non blocking mode. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart) +{ + const uint16_t *tmp; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + tmp = (const uint16_t *) huart->pTxBuffPtr; + huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF); + huart->pTxBuffPtr += 2U; + } + else + { + huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF); + } + + if (--huart->TxXferCount == 0U) + { + /* Disable the UART Transmit Data Register Empty Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_TXE); + + /* Enable the UART Transmit Complete Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_TC); + } + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Wraps up transmission in non blocking mode. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart) +{ + /* Disable the UART Transmit Complete Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_TC); + + /* Tx process is ended, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + + return HAL_OK; +} + +/** + * @brief Receives an amount of data in non blocking mode + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) +{ + uint8_t *pdata8bits = NULL; + uint16_t *pdata16bits = NULL; + + /* Check that a Rx process is ongoing */ + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + /* Unused pdata8bits */ + UNUSED(pdata8bits); + pdata16bits = (uint16_t *) huart->pRxBuffPtr; + *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); + huart->pRxBuffPtr += 2U; + } + else + { + pdata8bits = (uint8_t *) huart->pRxBuffPtr; + /* Unused pdata16bits */ + UNUSED(pdata16bits); + + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + } + huart->pRxBuffPtr += 1U; + } + + if (--huart->RxXferCount == 0U) + { + /* Disable the UART Data Register not empty Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); + + /* Disable the UART Parity Error Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_PE); + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* Initialize type of RxEvent to Transfer Complete */ + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Check current reception Mode : + If Reception till IDLE event has been selected : */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + /* Set reception type to Standard */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Disable IDLE interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + + /* Check if IDLE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) + { + /* Clear IDLE flag in ISR */ + __HAL_UART_CLEAR_IDLEFLAG(huart); + } + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* Standard reception API called */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxCpltCallback(huart); +#else + /*Call legacy weak Rx complete callback*/ + HAL_UART_RxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; + } + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Configures the UART peripheral. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +static void UART_SetConfig(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg; + uint32_t pclk; + + /* Check the parameters */ + assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate)); + assert_param(IS_UART_STOPBITS(huart->Init.StopBits)); + assert_param(IS_UART_PARITY(huart->Init.Parity)); + assert_param(IS_UART_MODE(huart->Init.Mode)); + + /*-------------------------- USART CR2 Configuration -----------------------*/ + /* Configure the UART Stop Bits: Set STOP[13:12] bits + according to huart->Init.StopBits value */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); + + /*-------------------------- USART CR1 Configuration -----------------------*/ + /* Configure the UART Word Length, Parity and mode: + Set the M bits according to huart->Init.WordLength value + Set PCE and PS bits according to huart->Init.Parity value + Set TE and RE bits according to huart->Init.Mode value + Set OVER8 bit according to huart->Init.OverSampling value */ + + tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling; + MODIFY_REG(huart->Instance->CR1, + (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), + tmpreg); + + /*-------------------------- USART CR3 Configuration -----------------------*/ + /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */ + MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl); + + +#if defined(USART6) && defined(UART9) && defined(UART10) + if ((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9) || (huart->Instance == UART10)) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#elif defined(USART6) + if ((huart->Instance == USART1) || (huart->Instance == USART6)) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#else + if (huart->Instance == USART1) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#endif /* USART6 */ + else + { + pclk = HAL_RCC_GetPCLK1Freq(); + } + /*-------------------------- USART BRR Configuration ---------------------*/ + if (huart->Init.OverSampling == UART_OVERSAMPLING_8) + { + huart->Instance->BRR = UART_BRR_SAMPLING8(pclk, huart->Init.BaudRate); + } + else + { + huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); + } +} + +/** + * @} + */ + +#endif /* HAL_UART_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c new file mode 100644 index 00000000..7d98361b --- /dev/null +++ b/firmware/numpad/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c @@ -0,0 +1,2323 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_usb.c + * @author MCD Application Team + * @brief USB Low Layer HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the USB Peripheral Controller: + * + Initialization/de-initialization functions + * + I/O operation functions + * + Peripheral Control functions + * + Peripheral State functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Fill parameters of Init structure in USB_CfgTypeDef structure. + + (#) Call USB_CoreInit() API to initialize the USB Core peripheral. + + (#) The upper HAL HCD/PCD driver will call the right routines for its internal processes. + + @endverbatim + + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_LL_USB_DRIVER + * @{ + */ + +#if defined (HAL_PCD_MODULE_ENABLED) || defined (HAL_HCD_MODULE_ENABLED) +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +#if defined (USB_OTG_FS) || defined (USB_OTG_HS) +static HAL_StatusTypeDef USB_CoreReset(USB_OTG_GlobalTypeDef *USBx); + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup USB_LL_Exported_Functions USB Low Layer Exported Functions + * @{ + */ + +/** @defgroup USB_LL_Exported_Functions_Group1 Initialization/de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization/de-initialization functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the USB Core + * @param USBx USB Instance + * @param cfg pointer to a USB_OTG_CfgTypeDef structure that contains + * the configuration information for the specified USBx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg) +{ + HAL_StatusTypeDef ret; + if (cfg.phy_itface == USB_OTG_ULPI_PHY) + { + USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN); + + /* Init The ULPI Interface */ + USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL); + + /* Select vbus source */ + USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI); + if (cfg.use_external_vbus == 1U) + { + USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPIEVBUSD; + } + + /* Reset after a PHY select */ + ret = USB_CoreReset(USBx); + } + else /* FS interface (embedded Phy) */ + { + /* Select FS Embedded PHY */ + USBx->GUSBCFG |= USB_OTG_GUSBCFG_PHYSEL; + + /* Reset after a PHY select */ + ret = USB_CoreReset(USBx); + + if (cfg.battery_charging_enable == 0U) + { + /* Activate the USB Transceiver */ + USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN; + } + else + { + /* Deactivate the USB Transceiver */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN); + } + } + + if (cfg.dma_enable == 1U) + { + USBx->GAHBCFG |= USB_OTG_GAHBCFG_HBSTLEN_2; + USBx->GAHBCFG |= USB_OTG_GAHBCFG_DMAEN; + } + + return ret; +} + + +/** + * @brief Set the USB turnaround time + * @param USBx USB Instance + * @param hclk: AHB clock frequency + * @retval USB turnaround time In PHY Clocks number + */ +HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, + uint32_t hclk, uint8_t speed) +{ + uint32_t UsbTrd; + + /* The USBTRD is configured according to the tables below, depending on AHB frequency + used by application. In the low AHB frequency range it is used to stretch enough the USB response + time to IN tokens, the USB turnaround time, so to compensate for the longer AHB read access + latency to the Data FIFO */ + if (speed == USBD_FS_SPEED) + { + if ((hclk >= 14200000U) && (hclk < 15000000U)) + { + /* hclk Clock Range between 14.2-15 MHz */ + UsbTrd = 0xFU; + } + else if ((hclk >= 15000000U) && (hclk < 16000000U)) + { + /* hclk Clock Range between 15-16 MHz */ + UsbTrd = 0xEU; + } + else if ((hclk >= 16000000U) && (hclk < 17200000U)) + { + /* hclk Clock Range between 16-17.2 MHz */ + UsbTrd = 0xDU; + } + else if ((hclk >= 17200000U) && (hclk < 18500000U)) + { + /* hclk Clock Range between 17.2-18.5 MHz */ + UsbTrd = 0xCU; + } + else if ((hclk >= 18500000U) && (hclk < 20000000U)) + { + /* hclk Clock Range between 18.5-20 MHz */ + UsbTrd = 0xBU; + } + else if ((hclk >= 20000000U) && (hclk < 21800000U)) + { + /* hclk Clock Range between 20-21.8 MHz */ + UsbTrd = 0xAU; + } + else if ((hclk >= 21800000U) && (hclk < 24000000U)) + { + /* hclk Clock Range between 21.8-24 MHz */ + UsbTrd = 0x9U; + } + else if ((hclk >= 24000000U) && (hclk < 27700000U)) + { + /* hclk Clock Range between 24-27.7 MHz */ + UsbTrd = 0x8U; + } + else if ((hclk >= 27700000U) && (hclk < 32000000U)) + { + /* hclk Clock Range between 27.7-32 MHz */ + UsbTrd = 0x7U; + } + else /* if(hclk >= 32000000) */ + { + /* hclk Clock Range between 32-200 MHz */ + UsbTrd = 0x6U; + } + } + else if (speed == USBD_HS_SPEED) + { + UsbTrd = USBD_HS_TRDT_VALUE; + } + else + { + UsbTrd = USBD_DEFAULT_TRDT_VALUE; + } + + USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_TRDT; + USBx->GUSBCFG |= (uint32_t)((UsbTrd << 10) & USB_OTG_GUSBCFG_TRDT); + + return HAL_OK; +} + +/** + * @brief USB_EnableGlobalInt + * Enables the controller's Global Int in the AHB Config reg + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx) +{ + USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT; + return HAL_OK; +} + +/** + * @brief USB_DisableGlobalInt + * Disable the controller's Global Int in the AHB Config reg + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx) +{ + USBx->GAHBCFG &= ~USB_OTG_GAHBCFG_GINT; + return HAL_OK; +} + +/** + * @brief USB_SetCurrentMode Set functional mode + * @param USBx Selected device + * @param mode current core mode + * This parameter can be one of these values: + * @arg USB_DEVICE_MODE Peripheral mode + * @arg USB_HOST_MODE Host mode + * @retval HAL status + */ +HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_OTG_ModeTypeDef mode) +{ + uint32_t ms = 0U; + + USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_FHMOD | USB_OTG_GUSBCFG_FDMOD); + + if (mode == USB_HOST_MODE) + { + USBx->GUSBCFG |= USB_OTG_GUSBCFG_FHMOD; + + do + { + HAL_Delay(10U); + ms += 10U; + } while ((USB_GetMode(USBx) != (uint32_t)USB_HOST_MODE) && (ms < HAL_USB_CURRENT_MODE_MAX_DELAY_MS)); + } + else if (mode == USB_DEVICE_MODE) + { + USBx->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD; + + do + { + HAL_Delay(10U); + ms += 10U; + } while ((USB_GetMode(USBx) != (uint32_t)USB_DEVICE_MODE) && (ms < HAL_USB_CURRENT_MODE_MAX_DELAY_MS)); + } + else + { + return HAL_ERROR; + } + + if (ms == HAL_USB_CURRENT_MODE_MAX_DELAY_MS) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief USB_DevInit Initializes the USB_OTG controller registers + * for device mode + * @param USBx Selected device + * @param cfg pointer to a USB_OTG_CfgTypeDef structure that contains + * the configuration information for the specified USBx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg) +{ + HAL_StatusTypeDef ret = HAL_OK; + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t i; + + for (i = 0U; i < 15U; i++) + { + USBx->DIEPTXF[i] = 0U; + } + +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \ + || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \ + || defined(STM32F423xx) + /* VBUS Sensing setup */ + if (cfg.vbus_sensing_enable == 0U) + { + USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS; + + /* Deactivate VBUS Sensing B */ + USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN; + + /* B-peripheral session valid override enable */ + USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN; + USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL; + } + else + { + /* Enable HW VBUS sensing */ + USBx->GCCFG |= USB_OTG_GCCFG_VBDEN; + } +#else + /* VBUS Sensing setup */ + if (cfg.vbus_sensing_enable == 0U) + { + /* + * Disable HW VBUS sensing. VBUS is internally considered to be always + * at VBUS-Valid level (5V). + */ + USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS; + USBx->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS; + USBx->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN; + USBx->GCCFG &= ~USB_OTG_GCCFG_VBUSASEN; + } + else + { + /* Enable HW VBUS sensing */ + USBx->GCCFG &= ~USB_OTG_GCCFG_NOVBUSSENS; + USBx->GCCFG |= USB_OTG_GCCFG_VBUSBSEN; + } +#endif /* defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || + defined(STM32F423xx) */ + + /* Restart the Phy Clock */ + USBx_PCGCCTL = 0U; + + if (cfg.phy_itface == USB_OTG_ULPI_PHY) + { + if (cfg.speed == USBD_HS_SPEED) + { + /* Set Core speed to High speed mode */ + (void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH); + } + else + { + /* Set Core speed to Full speed mode */ + (void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL); + } + } + else + { + /* Set Core speed to Full speed mode */ + (void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_FULL); + } + + /* Flush the FIFOs */ + if (USB_FlushTxFifo(USBx, 0x10U) != HAL_OK) /* all Tx FIFOs */ + { + ret = HAL_ERROR; + } + + if (USB_FlushRxFifo(USBx) != HAL_OK) + { + ret = HAL_ERROR; + } + + /* Clear all pending Device Interrupts */ + USBx_DEVICE->DIEPMSK = 0U; + USBx_DEVICE->DOEPMSK = 0U; + USBx_DEVICE->DAINTMSK = 0U; + + for (i = 0U; i < cfg.dev_endpoints; i++) + { + if ((USBx_INEP(i)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA) + { + if (i == 0U) + { + USBx_INEP(i)->DIEPCTL = USB_OTG_DIEPCTL_SNAK; + } + else + { + USBx_INEP(i)->DIEPCTL = USB_OTG_DIEPCTL_EPDIS | USB_OTG_DIEPCTL_SNAK; + } + } + else + { + USBx_INEP(i)->DIEPCTL = 0U; + } + + USBx_INEP(i)->DIEPTSIZ = 0U; + USBx_INEP(i)->DIEPINT = 0xFB7FU; + } + + for (i = 0U; i < cfg.dev_endpoints; i++) + { + if ((USBx_OUTEP(i)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) + { + if (i == 0U) + { + USBx_OUTEP(i)->DOEPCTL = USB_OTG_DOEPCTL_SNAK; + } + else + { + USBx_OUTEP(i)->DOEPCTL = USB_OTG_DOEPCTL_EPDIS | USB_OTG_DOEPCTL_SNAK; + } + } + else + { + USBx_OUTEP(i)->DOEPCTL = 0U; + } + + USBx_OUTEP(i)->DOEPTSIZ = 0U; + USBx_OUTEP(i)->DOEPINT = 0xFB7FU; + } + + USBx_DEVICE->DIEPMSK &= ~(USB_OTG_DIEPMSK_TXFURM); + + /* Disable all interrupts. */ + USBx->GINTMSK = 0U; + + /* Clear any pending interrupts */ + USBx->GINTSTS = 0xBFFFFFFFU; + + /* Enable the common interrupts */ + if (cfg.dma_enable == 0U) + { + USBx->GINTMSK |= USB_OTG_GINTMSK_RXFLVLM; + } + + /* Enable interrupts matching to the Device mode ONLY */ + USBx->GINTMSK |= USB_OTG_GINTMSK_USBSUSPM | USB_OTG_GINTMSK_USBRST | + USB_OTG_GINTMSK_ENUMDNEM | USB_OTG_GINTMSK_IEPINT | + USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTMSK_IISOIXFRM | + USB_OTG_GINTMSK_PXFRM_IISOOXFRM | USB_OTG_GINTMSK_WUIM; + + if (cfg.Sof_enable != 0U) + { + USBx->GINTMSK |= USB_OTG_GINTMSK_SOFM; + } + + if (cfg.vbus_sensing_enable == 1U) + { + USBx->GINTMSK |= (USB_OTG_GINTMSK_SRQIM | USB_OTG_GINTMSK_OTGINT); + } + + return ret; +} + +/** + * @brief USB_FlushTxFifo Flush a Tx FIFO + * @param USBx Selected device + * @param num FIFO number + * This parameter can be a value from 1 to 15 + 15 means Flush all Tx FIFOs + * @retval HAL status + */ +HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num) +{ + __IO uint32_t count = 0U; + + /* Wait for AHB master IDLE state. */ + do + { + count++; + + if (count > HAL_USB_TIMEOUT) + { + return HAL_TIMEOUT; + } + } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U); + + /* Flush TX Fifo */ + count = 0U; + USBx->GRSTCTL = (USB_OTG_GRSTCTL_TXFFLSH | (num << 6)); + + do + { + count++; + + if (count > HAL_USB_TIMEOUT) + { + return HAL_TIMEOUT; + } + } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_TXFFLSH) == USB_OTG_GRSTCTL_TXFFLSH); + + return HAL_OK; +} + +/** + * @brief USB_FlushRxFifo Flush Rx FIFO + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx) +{ + __IO uint32_t count = 0U; + + /* Wait for AHB master IDLE state. */ + do + { + count++; + + if (count > HAL_USB_TIMEOUT) + { + return HAL_TIMEOUT; + } + } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U); + + /* Flush RX Fifo */ + count = 0U; + USBx->GRSTCTL = USB_OTG_GRSTCTL_RXFFLSH; + + do + { + count++; + + if (count > HAL_USB_TIMEOUT) + { + return HAL_TIMEOUT; + } + } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_RXFFLSH) == USB_OTG_GRSTCTL_RXFFLSH); + + return HAL_OK; +} + +/** + * @brief USB_SetDevSpeed Initializes the DevSpd field of DCFG register + * depending the PHY type and the enumeration speed of the device. + * @param USBx Selected device + * @param speed device speed + * This parameter can be one of these values: + * @arg USB_OTG_SPEED_HIGH: High speed mode + * @arg USB_OTG_SPEED_HIGH_IN_FULL: High speed core in Full Speed mode + * @arg USB_OTG_SPEED_FULL: Full speed mode + * @retval Hal status + */ +HAL_StatusTypeDef USB_SetDevSpeed(const USB_OTG_GlobalTypeDef *USBx, uint8_t speed) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + USBx_DEVICE->DCFG |= speed; + return HAL_OK; +} + +/** + * @brief USB_GetDevSpeed Return the Dev Speed + * @param USBx Selected device + * @retval speed device speed + * This parameter can be one of these values: + * @arg USBD_HS_SPEED: High speed mode + * @arg USBD_FS_SPEED: Full speed mode + */ +uint8_t USB_GetDevSpeed(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint8_t speed; + uint32_t DevEnumSpeed = USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD; + + if (DevEnumSpeed == DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ) + { + speed = USBD_HS_SPEED; + } + else if ((DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ) || + (DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_48MHZ)) + { + speed = USBD_FS_SPEED; + } + else + { + speed = 0xFU; + } + + return speed; +} + +/** + * @brief Activate and configure an endpoint + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_ActivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + + if (ep->is_in == 1U) + { + USBx_DEVICE->DAINTMSK |= USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)); + + if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_USBAEP) == 0U) + { + USBx_INEP(epnum)->DIEPCTL |= (ep->maxpacket & USB_OTG_DIEPCTL_MPSIZ) | + ((uint32_t)ep->type << 18) | (epnum << 22) | + USB_OTG_DIEPCTL_SD0PID_SEVNFRM | + USB_OTG_DIEPCTL_USBAEP; + } + } + else + { + USBx_DEVICE->DAINTMSK |= USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16); + + if (((USBx_OUTEP(epnum)->DOEPCTL) & USB_OTG_DOEPCTL_USBAEP) == 0U) + { + USBx_OUTEP(epnum)->DOEPCTL |= (ep->maxpacket & USB_OTG_DOEPCTL_MPSIZ) | + ((uint32_t)ep->type << 18) | + USB_OTG_DIEPCTL_SD0PID_SEVNFRM | + USB_OTG_DOEPCTL_USBAEP; + } + } + return HAL_OK; +} + +/** + * @brief Activate and configure a dedicated endpoint + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_ActivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + + /* Read DEPCTLn register */ + if (ep->is_in == 1U) + { + if (((USBx_INEP(epnum)->DIEPCTL) & USB_OTG_DIEPCTL_USBAEP) == 0U) + { + USBx_INEP(epnum)->DIEPCTL |= (ep->maxpacket & USB_OTG_DIEPCTL_MPSIZ) | + ((uint32_t)ep->type << 18) | (epnum << 22) | + USB_OTG_DIEPCTL_SD0PID_SEVNFRM | + USB_OTG_DIEPCTL_USBAEP; + } + + USBx_DEVICE->DEACHMSK |= USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)); + } + else + { + if (((USBx_OUTEP(epnum)->DOEPCTL) & USB_OTG_DOEPCTL_USBAEP) == 0U) + { + USBx_OUTEP(epnum)->DOEPCTL |= (ep->maxpacket & USB_OTG_DOEPCTL_MPSIZ) | + ((uint32_t)ep->type << 18) | (epnum << 22) | + USB_OTG_DOEPCTL_USBAEP; + } + + USBx_DEVICE->DEACHMSK |= USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16); + } + + return HAL_OK; +} + +/** + * @brief De-activate and de-initialize an endpoint + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_DeactivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + + /* Read DEPCTLn register */ + if (ep->is_in == 1U) + { + if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA) + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK; + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS; + } + + USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK))); + USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK))); + USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_USBAEP | + USB_OTG_DIEPCTL_MPSIZ | + USB_OTG_DIEPCTL_TXFNUM | + USB_OTG_DIEPCTL_SD0PID_SEVNFRM | + USB_OTG_DIEPCTL_EPTYP); + } + else + { + if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) + { + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK; + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS; + } + + USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16)); + USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16)); + USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_USBAEP | + USB_OTG_DOEPCTL_MPSIZ | + USB_OTG_DOEPCTL_SD0PID_SEVNFRM | + USB_OTG_DOEPCTL_EPTYP); + } + + return HAL_OK; +} + +/** + * @brief De-activate and de-initialize a dedicated endpoint + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + + /* Read DEPCTLn register */ + if (ep->is_in == 1U) + { + if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA) + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK; + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS; + } + + USBx_INEP(epnum)->DIEPCTL &= ~ USB_OTG_DIEPCTL_USBAEP; + USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK))); + } + else + { + if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) + { + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK; + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS; + } + + USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_USBAEP; + USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16)); + } + + return HAL_OK; +} + +/** + * @brief USB_EPStartXfer : setup and starts a transfer over an EP + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @param dma USB dma enabled or disabled + * This parameter can be one of these values: + * 0 : DMA feature not used + * 1 : DMA feature used + * @retval HAL status + */ +HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep, uint8_t dma) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + uint16_t pktcnt; + + /* IN endpoint */ + if (ep->is_in == 1U) + { + /* Zero Length Packet? */ + if (ep->xfer_len == 0U) + { + USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT); + USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19)); + USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ); + } + else + { + /* Program the transfer size and packet count + * as follows: xfersize = N * maxpacket + + * short_packet pktcnt = N + (short_packet + * exist ? 1 : 0) + */ + USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ); + USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT); + + if (epnum == 0U) + { + if (ep->xfer_len > ep->maxpacket) + { + ep->xfer_len = ep->maxpacket; + } + + USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19)); + } + else + { + pktcnt = (uint16_t)((ep->xfer_len + ep->maxpacket - 1U) / ep->maxpacket); + USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & ((uint32_t)pktcnt << 19)); + + if (ep->type == EP_TYPE_ISOC) + { + USBx_INEP(epnum)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_MULCNT); + USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_MULCNT & ((uint32_t)pktcnt << 29)); + } + } + + USBx_INEP(epnum)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_XFRSIZ & ep->xfer_len); + } + + if (dma == 1U) + { + if ((uint32_t)ep->dma_addr != 0U) + { + USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr); + } + + if (ep->type == EP_TYPE_ISOC) + { + if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U) + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM; + } + else + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM; + } + } + + /* EP enable, IN data in FIFO */ + USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA); + } + else + { + /* EP enable, IN data in FIFO */ + USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA); + + if (ep->type != EP_TYPE_ISOC) + { + /* Enable the Tx FIFO Empty Interrupt for this EP */ + if (ep->xfer_len > 0U) + { + USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK); + } + } + else + { + if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U) + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM; + } + else + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM; + } + + (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma); + } + } + } + else /* OUT endpoint */ + { + /* Program the transfer size and packet count as follows: + * pktcnt = N + * xfersize = N * maxpacket + */ + USBx_OUTEP(epnum)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_XFRSIZ); + USBx_OUTEP(epnum)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_PKTCNT); + + if (epnum == 0U) + { + if (ep->xfer_len > 0U) + { + ep->xfer_len = ep->maxpacket; + } + + /* Store transfer size, for EP0 this is equal to endpoint max packet size */ + ep->xfer_size = ep->maxpacket; + + USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_XFRSIZ & ep->xfer_size); + USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19)); + } + else + { + if (ep->xfer_len == 0U) + { + USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_XFRSIZ & ep->maxpacket); + USBx_OUTEP(epnum)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19)); + } + else + { + pktcnt = (uint16_t)((ep->xfer_len + ep->maxpacket - 1U) / ep->maxpacket); + ep->xfer_size = ep->maxpacket * pktcnt; + + USBx_OUTEP(epnum)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_PKTCNT & ((uint32_t)pktcnt << 19); + USBx_OUTEP(epnum)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_XFRSIZ & ep->xfer_size; + } + } + + if (dma == 1U) + { + if ((uint32_t)ep->xfer_buff != 0U) + { + USBx_OUTEP(epnum)->DOEPDMA = (uint32_t)(ep->xfer_buff); + } + } + + if (ep->type == EP_TYPE_ISOC) + { + if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U) + { + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SODDFRM; + } + else + { + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SD0PID_SEVNFRM; + } + } + /* EP enable */ + USBx_OUTEP(epnum)->DOEPCTL |= (USB_OTG_DOEPCTL_CNAK | USB_OTG_DOEPCTL_EPENA); + } + + return HAL_OK; +} + + +/** + * @brief USB_EPStoptXfer Stop transfer on an EP + * @param USBx usb device instance + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_EPStopXfer(const USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep) +{ + __IO uint32_t count = 0U; + HAL_StatusTypeDef ret = HAL_OK; + uint32_t USBx_BASE = (uint32_t)USBx; + + /* IN endpoint */ + if (ep->is_in == 1U) + { + /* EP enable, IN data in FIFO */ + if (((USBx_INEP(ep->num)->DIEPCTL) & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA) + { + USBx_INEP(ep->num)->DIEPCTL |= (USB_OTG_DIEPCTL_SNAK); + USBx_INEP(ep->num)->DIEPCTL |= (USB_OTG_DIEPCTL_EPDIS); + + do + { + count++; + + if (count > 10000U) + { + ret = HAL_ERROR; + break; + } + } while (((USBx_INEP(ep->num)->DIEPCTL) & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA); + } + } + else /* OUT endpoint */ + { + if (((USBx_OUTEP(ep->num)->DOEPCTL) & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) + { + USBx_OUTEP(ep->num)->DOEPCTL |= (USB_OTG_DOEPCTL_SNAK); + USBx_OUTEP(ep->num)->DOEPCTL |= (USB_OTG_DOEPCTL_EPDIS); + + do + { + count++; + + if (count > 10000U) + { + ret = HAL_ERROR; + break; + } + } while (((USBx_OUTEP(ep->num)->DOEPCTL) & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA); + } + } + + return ret; +} + + +/** + * @brief USB_WritePacket : Writes a packet into the Tx FIFO associated + * with the EP/channel + * @param USBx Selected device + * @param src pointer to source buffer + * @param ch_ep_num endpoint or host channel number + * @param len Number of bytes to write + * @param dma USB dma enabled or disabled + * This parameter can be one of these values: + * 0 : DMA feature not used + * 1 : DMA feature used + * @retval HAL status + */ +HAL_StatusTypeDef USB_WritePacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *src, + uint8_t ch_ep_num, uint16_t len, uint8_t dma) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint8_t *pSrc = src; + uint32_t count32b; + uint32_t i; + + if (dma == 0U) + { + count32b = ((uint32_t)len + 3U) / 4U; + for (i = 0U; i < count32b; i++) + { + USBx_DFIFO((uint32_t)ch_ep_num) = __UNALIGNED_UINT32_READ(pSrc); + pSrc++; + pSrc++; + pSrc++; + pSrc++; + } + } + + return HAL_OK; +} + +/** + * @brief USB_ReadPacket : read a packet from the RX FIFO + * @param USBx Selected device + * @param dest source pointer + * @param len Number of bytes to read + * @retval pointer to destination buffer + */ +void *USB_ReadPacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint8_t *pDest = dest; + uint32_t pData; + uint32_t i; + uint32_t count32b = (uint32_t)len >> 2U; + uint16_t remaining_bytes = len % 4U; + + for (i = 0U; i < count32b; i++) + { + __UNALIGNED_UINT32_WRITE(pDest, USBx_DFIFO(0U)); + pDest++; + pDest++; + pDest++; + pDest++; + } + + /* When Number of data is not word aligned, read the remaining byte */ + if (remaining_bytes != 0U) + { + i = 0U; + __UNALIGNED_UINT32_WRITE(&pData, USBx_DFIFO(0U)); + + do + { + *(uint8_t *)pDest = (uint8_t)(pData >> (8U * (uint8_t)(i))); + i++; + pDest++; + remaining_bytes--; + } while (remaining_bytes != 0U); + } + + return ((void *)pDest); +} + +/** + * @brief USB_EPSetStall : set a stall condition over an EP + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_EPSetStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + + if (ep->is_in == 1U) + { + if (((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == 0U) && (epnum != 0U)) + { + USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_EPDIS); + } + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_STALL; + } + else + { + if (((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == 0U) && (epnum != 0U)) + { + USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_EPDIS); + } + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_STALL; + } + + return HAL_OK; +} + +/** + * @brief USB_EPClearStall : Clear a stall condition over an EP + * @param USBx Selected device + * @param ep pointer to endpoint structure + * @retval HAL status + */ +HAL_StatusTypeDef USB_EPClearStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t epnum = (uint32_t)ep->num; + + if (ep->is_in == 1U) + { + USBx_INEP(epnum)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL; + if ((ep->type == EP_TYPE_INTR) || (ep->type == EP_TYPE_BULK)) + { + USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM; /* DATA0 */ + } + } + else + { + USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL; + if ((ep->type == EP_TYPE_INTR) || (ep->type == EP_TYPE_BULK)) + { + USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SD0PID_SEVNFRM; /* DATA0 */ + } + } + return HAL_OK; +} + +/** + * @brief USB_StopDevice : Stop the usb device mode + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx) +{ + HAL_StatusTypeDef ret; + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t i; + + /* Clear Pending interrupt */ + for (i = 0U; i < 15U; i++) + { + USBx_INEP(i)->DIEPINT = 0xFB7FU; + USBx_OUTEP(i)->DOEPINT = 0xFB7FU; + } + + /* Clear interrupt masks */ + USBx_DEVICE->DIEPMSK = 0U; + USBx_DEVICE->DOEPMSK = 0U; + USBx_DEVICE->DAINTMSK = 0U; + + /* Flush the FIFO */ + ret = USB_FlushRxFifo(USBx); + if (ret != HAL_OK) + { + return ret; + } + + ret = USB_FlushTxFifo(USBx, 0x10U); + if (ret != HAL_OK) + { + return ret; + } + + return ret; +} + +/** + * @brief USB_SetDevAddress : Stop the usb device mode + * @param USBx Selected device + * @param address new device address to be assigned + * This parameter can be a value from 0 to 255 + * @retval HAL status + */ +HAL_StatusTypeDef USB_SetDevAddress(const USB_OTG_GlobalTypeDef *USBx, uint8_t address) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + USBx_DEVICE->DCFG &= ~(USB_OTG_DCFG_DAD); + USBx_DEVICE->DCFG |= ((uint32_t)address << 4) & USB_OTG_DCFG_DAD; + + return HAL_OK; +} + +/** + * @brief USB_DevConnect : Connect the USB device by enabling Rpu + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_DevConnect(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + /* In case phy is stopped, ensure to ungate and restore the phy CLK */ + USBx_PCGCCTL &= ~(USB_OTG_PCGCCTL_STOPCLK | USB_OTG_PCGCCTL_GATECLK); + + USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_SDIS; + + return HAL_OK; +} + +/** + * @brief USB_DevDisconnect : Disconnect the USB device by disabling Rpu + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_DevDisconnect(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + /* In case phy is stopped, ensure to ungate and restore the phy CLK */ + USBx_PCGCCTL &= ~(USB_OTG_PCGCCTL_STOPCLK | USB_OTG_PCGCCTL_GATECLK); + + USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS; + + return HAL_OK; +} + +/** + * @brief USB_ReadInterrupts: return the global USB interrupt status + * @param USBx Selected device + * @retval USB Global Interrupt status + */ +uint32_t USB_ReadInterrupts(USB_OTG_GlobalTypeDef const *USBx) +{ + uint32_t tmpreg; + + tmpreg = USBx->GINTSTS; + tmpreg &= USBx->GINTMSK; + + return tmpreg; +} + +/** + * @brief USB_ReadChInterrupts: return USB channel interrupt status + * @param USBx Selected device + * @param chnum Channel number + * @retval USB Channel Interrupt status + */ +uint32_t USB_ReadChInterrupts(const USB_OTG_GlobalTypeDef *USBx, uint8_t chnum) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t tmpreg; + + tmpreg = USBx_HC(chnum)->HCINT; + tmpreg &= USBx_HC(chnum)->HCINTMSK; + + return tmpreg; +} + +/** + * @brief USB_ReadDevAllOutEpInterrupt: return the USB device OUT endpoints interrupt status + * @param USBx Selected device + * @retval USB Device OUT EP interrupt status + */ +uint32_t USB_ReadDevAllOutEpInterrupt(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t tmpreg; + + tmpreg = USBx_DEVICE->DAINT; + tmpreg &= USBx_DEVICE->DAINTMSK; + + return ((tmpreg & 0xffff0000U) >> 16); +} + +/** + * @brief USB_ReadDevAllInEpInterrupt: return the USB device IN endpoints interrupt status + * @param USBx Selected device + * @retval USB Device IN EP interrupt status + */ +uint32_t USB_ReadDevAllInEpInterrupt(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t tmpreg; + + tmpreg = USBx_DEVICE->DAINT; + tmpreg &= USBx_DEVICE->DAINTMSK; + + return ((tmpreg & 0xFFFFU)); +} + +/** + * @brief Returns Device OUT EP Interrupt register + * @param USBx Selected device + * @param epnum endpoint number + * This parameter can be a value from 0 to 15 + * @retval Device OUT EP Interrupt register + */ +uint32_t USB_ReadDevOutEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t tmpreg; + + tmpreg = USBx_OUTEP((uint32_t)epnum)->DOEPINT; + tmpreg &= USBx_DEVICE->DOEPMSK; + + return tmpreg; +} + +/** + * @brief Returns Device IN EP Interrupt register + * @param USBx Selected device + * @param epnum endpoint number + * This parameter can be a value from 0 to 15 + * @retval Device IN EP Interrupt register + */ +uint32_t USB_ReadDevInEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t tmpreg; + uint32_t msk; + uint32_t emp; + + msk = USBx_DEVICE->DIEPMSK; + emp = USBx_DEVICE->DIEPEMPMSK; + msk |= ((emp >> (epnum & EP_ADDR_MSK)) & 0x1U) << 7; + tmpreg = USBx_INEP((uint32_t)epnum)->DIEPINT & msk; + + return tmpreg; +} + +/** + * @brief USB_ClearInterrupts: clear a USB interrupt + * @param USBx Selected device + * @param interrupt flag + * @retval None + */ +void USB_ClearInterrupts(USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt) +{ + USBx->GINTSTS &= interrupt; +} + +/** + * @brief Returns USB core mode + * @param USBx Selected device + * @retval return core mode : Host or Device + * This parameter can be one of these values: + * 1 : Host + * 0 : Device + */ +uint32_t USB_GetMode(const USB_OTG_GlobalTypeDef *USBx) +{ + return ((USBx->GINTSTS) & 0x1U); +} + +/** + * @brief Activate EP0 for Setup transactions + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_ActivateSetup(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + /* Set the MPS of the IN EP0 to 64 bytes */ + USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ; + + USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK; + + return HAL_OK; +} + +/** + * @brief Prepare the EP0 to start the first control setup + * @param USBx Selected device + * @param dma USB dma enabled or disabled + * This parameter can be one of these values: + * 0 : DMA feature not used + * 1 : DMA feature used + * @param psetup pointer to setup packet + * @retval HAL status + */ +HAL_StatusTypeDef USB_EP0_OutStart(const USB_OTG_GlobalTypeDef *USBx, uint8_t dma, const uint8_t *psetup) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t gSNPSiD = *(__IO const uint32_t *)(&USBx->CID + 0x1U); + + if (gSNPSiD > USB_OTG_CORE_ID_300A) + { + if ((USBx_OUTEP(0U)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) + { + return HAL_OK; + } + } + + USBx_OUTEP(0U)->DOEPTSIZ = 0U; + USBx_OUTEP(0U)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19)); + USBx_OUTEP(0U)->DOEPTSIZ |= (3U * 8U); + USBx_OUTEP(0U)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_STUPCNT; + + if (dma == 1U) + { + USBx_OUTEP(0U)->DOEPDMA = (uint32_t)psetup; + /* EP enable */ + USBx_OUTEP(0U)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_USBAEP; + } + + return HAL_OK; +} + +/** + * @brief Reset the USB Core (needed after USB clock settings change) + * @param USBx Selected device + * @retval HAL status + */ +static HAL_StatusTypeDef USB_CoreReset(USB_OTG_GlobalTypeDef *USBx) +{ + __IO uint32_t count = 0U; + + /* Wait for AHB master IDLE state. */ + do + { + count++; + + if (count > HAL_USB_TIMEOUT) + { + return HAL_TIMEOUT; + } + } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U); + + count = 10U; + + /* few cycles before setting core reset */ + while (count > 0U) + { + count--; + } + + /* Core Soft Reset */ + USBx->GRSTCTL |= USB_OTG_GRSTCTL_CSRST; + + do + { + count++; + + if (count > HAL_USB_TIMEOUT) + { + return HAL_TIMEOUT; + } + } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_CSRST) == USB_OTG_GRSTCTL_CSRST); + + return HAL_OK; +} + +/** + * @brief USB_HostInit : Initializes the USB OTG controller registers + * for Host mode + * @param USBx Selected device + * @param cfg pointer to a USB_OTG_CfgTypeDef structure that contains + * the configuration information for the specified USBx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg) +{ + HAL_StatusTypeDef ret = HAL_OK; + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t i; + + /* Restart the Phy Clock */ + USBx_PCGCCTL = 0U; + +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \ + || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \ + || defined(STM32F423xx) + /* Disable HW VBUS sensing */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_VBDEN); +#else + /* + * Disable HW VBUS sensing. VBUS is internally considered to be always + * at VBUS-Valid level (5V). + */ + USBx->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS; + USBx->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN; + USBx->GCCFG &= ~USB_OTG_GCCFG_VBUSASEN; +#endif /* defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || + defined(STM32F423xx) */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) \ + || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + /* Disable Battery chargin detector */ + USBx->GCCFG &= ~(USB_OTG_GCCFG_BCDEN); +#endif /* defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) */ + + if ((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) == 0U) + { + if (cfg.speed == USBH_FSLS_SPEED) + { + /* Force Device Enumeration to FS/LS mode only */ + USBx_HOST->HCFG |= USB_OTG_HCFG_FSLSS; + } + else + { + /* Set default Max speed support */ + USBx_HOST->HCFG &= ~(USB_OTG_HCFG_FSLSS); + } + } + else + { + /* Set default Max speed support */ + USBx_HOST->HCFG &= ~(USB_OTG_HCFG_FSLSS); + } + + /* Make sure the FIFOs are flushed. */ + if (USB_FlushTxFifo(USBx, 0x10U) != HAL_OK) /* all Tx FIFOs */ + { + ret = HAL_ERROR; + } + + if (USB_FlushRxFifo(USBx) != HAL_OK) + { + ret = HAL_ERROR; + } + + /* Clear all pending HC Interrupts */ + for (i = 0U; i < cfg.Host_channels; i++) + { + USBx_HC(i)->HCINT = CLEAR_INTERRUPT_MASK; + USBx_HC(i)->HCINTMSK = 0U; + } + + /* Disable all interrupts. */ + USBx->GINTMSK = 0U; + + /* Clear any pending interrupts */ + USBx->GINTSTS = CLEAR_INTERRUPT_MASK; +#if defined (USB_OTG_HS) + if (USBx == USB_OTG_HS) + { + /* set Rx FIFO size */ + USBx->GRXFSIZ = 0x200U; + USBx->DIEPTXF0_HNPTXFSIZ = (uint32_t)(((0x100U << 16) & USB_OTG_NPTXFD) | 0x200U); + USBx->HPTXFSIZ = (uint32_t)(((0xE0U << 16) & USB_OTG_HPTXFSIZ_PTXFD) | 0x300U); + } + else +#endif /* defined (USB_OTG_HS) */ + { + /* set Rx FIFO size */ + USBx->GRXFSIZ = 0x80U; + USBx->DIEPTXF0_HNPTXFSIZ = (uint32_t)(((0x60U << 16) & USB_OTG_NPTXFD) | 0x80U); + USBx->HPTXFSIZ = (uint32_t)(((0x40U << 16)& USB_OTG_HPTXFSIZ_PTXFD) | 0xE0U); + } + + /* Enable the common interrupts */ + if (cfg.dma_enable == 0U) + { + USBx->GINTMSK |= USB_OTG_GINTMSK_RXFLVLM; + } + + /* Enable interrupts matching to the Host mode ONLY */ + USBx->GINTMSK |= (USB_OTG_GINTMSK_PRTIM | USB_OTG_GINTMSK_HCIM | \ + USB_OTG_GINTMSK_SOFM | USB_OTG_GINTSTS_DISCINT | \ + USB_OTG_GINTMSK_PXFRM_IISOOXFRM | USB_OTG_GINTMSK_WUIM); + + return ret; +} + +/** + * @brief USB_InitFSLSPClkSel : Initializes the FSLSPClkSel field of the + * HCFG register on the PHY type and set the right frame interval + * @param USBx Selected device + * @param freq clock frequency + * This parameter can be one of these values: + * HCFG_48_MHZ : Full Speed 48 MHz Clock + * HCFG_6_MHZ : Low Speed 6 MHz Clock + * @retval HAL status + */ +HAL_StatusTypeDef USB_InitFSLSPClkSel(const USB_OTG_GlobalTypeDef *USBx, uint8_t freq) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + USBx_HOST->HCFG &= ~(USB_OTG_HCFG_FSLSPCS); + USBx_HOST->HCFG |= (uint32_t)freq & USB_OTG_HCFG_FSLSPCS; + + if (freq == HCFG_48_MHZ) + { + USBx_HOST->HFIR = HFIR_48_MHZ; + } + else if (freq == HCFG_6_MHZ) + { + USBx_HOST->HFIR = HFIR_6_MHZ; + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief USB_OTG_ResetPort : Reset Host Port + * @param USBx Selected device + * @retval HAL status + * @note (1)The application must wait at least 10 ms + * before clearing the reset bit. + */ +HAL_StatusTypeDef USB_ResetPort(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + __IO uint32_t hprt0 = 0U; + + hprt0 = USBx_HPRT0; + + hprt0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET | + USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG); + + USBx_HPRT0 = (USB_OTG_HPRT_PRST | hprt0); + HAL_Delay(100U); /* See Note #1 */ + USBx_HPRT0 = ((~USB_OTG_HPRT_PRST) & hprt0); + HAL_Delay(10U); + + return HAL_OK; +} + +/** + * @brief USB_DriveVbus : activate or de-activate vbus + * @param state VBUS state + * This parameter can be one of these values: + * 0 : Deactivate VBUS + * 1 : Activate VBUS + * @retval HAL status + */ +HAL_StatusTypeDef USB_DriveVbus(const USB_OTG_GlobalTypeDef *USBx, uint8_t state) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + __IO uint32_t hprt0 = 0U; + + hprt0 = USBx_HPRT0; + + hprt0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET | + USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG); + + if (((hprt0 & USB_OTG_HPRT_PPWR) == 0U) && (state == 1U)) + { + USBx_HPRT0 = (USB_OTG_HPRT_PPWR | hprt0); + } + if (((hprt0 & USB_OTG_HPRT_PPWR) == USB_OTG_HPRT_PPWR) && (state == 0U)) + { + USBx_HPRT0 = ((~USB_OTG_HPRT_PPWR) & hprt0); + } + return HAL_OK; +} + +/** + * @brief Return Host Port speed + * @param USBx Selected device + * @retval speed : Host port device speed + * This parameter can be one of these values: + * @arg HCD_DEVICE_SPEED_HIGH: High speed mode + * @arg HCD_DEVICE_SPEED_FULL: Full speed mode + * @arg HCD_DEVICE_SPEED_LOW: Low speed mode + */ +uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef const *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + __IO uint32_t hprt0 = 0U; + + hprt0 = USBx_HPRT0; + return ((hprt0 & USB_OTG_HPRT_PSPD) >> 17); +} + +/** + * @brief Return Host Current Frame number + * @param USBx Selected device + * @retval current frame number + */ +uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef const *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + return (USBx_HOST->HFNUM & USB_OTG_HFNUM_FRNUM); +} + +/** + * @brief Initialize a host channel + * @param USBx Selected device + * @param ch_num Channel number + * This parameter can be a value from 1 to 15 + * @param epnum Endpoint number + * This parameter can be a value from 1 to 15 + * @param dev_address Current device address + * This parameter can be a value from 0 to 255 + * @param speed Current device speed + * This parameter can be one of these values: + * @arg USB_OTG_SPEED_HIGH: High speed mode + * @arg USB_OTG_SPEED_FULL: Full speed mode + * @arg USB_OTG_SPEED_LOW: Low speed mode + * @param ep_type Endpoint Type + * This parameter can be one of these values: + * @arg EP_TYPE_CTRL: Control type + * @arg EP_TYPE_ISOC: Isochronous type + * @arg EP_TYPE_BULK: Bulk type + * @arg EP_TYPE_INTR: Interrupt type + * @param mps Max Packet Size + * This parameter can be a value from 0 to 32K + * @retval HAL state + */ +HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num, + uint8_t epnum, uint8_t dev_address, uint8_t speed, + uint8_t ep_type, uint16_t mps) +{ + HAL_StatusTypeDef ret = HAL_OK; + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t HCcharEpDir; + uint32_t HCcharLowSpeed; + uint32_t HostCoreSpeed; + + /* Clear old interrupt conditions for this host channel. */ + USBx_HC((uint32_t)ch_num)->HCINT = CLEAR_INTERRUPT_MASK; + + /* Enable channel interrupts required for this transfer. */ + switch (ep_type) + { + case EP_TYPE_CTRL: + case EP_TYPE_BULK: + USBx_HC((uint32_t)ch_num)->HCINTMSK = USB_OTG_HCINTMSK_XFRCM | + USB_OTG_HCINTMSK_STALLM | + USB_OTG_HCINTMSK_TXERRM | + USB_OTG_HCINTMSK_DTERRM | + USB_OTG_HCINTMSK_AHBERR | + USB_OTG_HCINTMSK_NAKM; + + if ((epnum & 0x80U) == 0x80U) + { + USBx_HC((uint32_t)ch_num)->HCINTMSK |= USB_OTG_HCINTMSK_BBERRM; + } + else + { +#if defined (USB_OTG_HS) + if (USBx == USB_OTG_HS) + { + USBx_HC((uint32_t)ch_num)->HCINTMSK |= USB_OTG_HCINTMSK_NYET | + USB_OTG_HCINTMSK_ACKM; + } +#endif /* defined (USB_OTG_HS) */ + } + break; + + case EP_TYPE_INTR: + USBx_HC((uint32_t)ch_num)->HCINTMSK = USB_OTG_HCINTMSK_XFRCM | + USB_OTG_HCINTMSK_STALLM | + USB_OTG_HCINTMSK_TXERRM | + USB_OTG_HCINTMSK_DTERRM | + USB_OTG_HCINTMSK_NAKM | + USB_OTG_HCINTMSK_AHBERR | + USB_OTG_HCINTMSK_FRMORM; + + if ((epnum & 0x80U) == 0x80U) + { + USBx_HC((uint32_t)ch_num)->HCINTMSK |= USB_OTG_HCINTMSK_BBERRM; + } + + break; + + case EP_TYPE_ISOC: + USBx_HC((uint32_t)ch_num)->HCINTMSK = USB_OTG_HCINTMSK_XFRCM | + USB_OTG_HCINTMSK_ACKM | + USB_OTG_HCINTMSK_AHBERR | + USB_OTG_HCINTMSK_FRMORM; + + if ((epnum & 0x80U) == 0x80U) + { + USBx_HC((uint32_t)ch_num)->HCINTMSK |= (USB_OTG_HCINTMSK_TXERRM | USB_OTG_HCINTMSK_BBERRM); + } + break; + + default: + ret = HAL_ERROR; + break; + } + + /* Clear Hub Start Split transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT = 0U; + + /* Enable host channel Halt interrupt */ + USBx_HC((uint32_t)ch_num)->HCINTMSK |= USB_OTG_HCINTMSK_CHHM; + + /* Enable the top level host channel interrupt. */ + USBx_HOST->HAINTMSK |= 1UL << (ch_num & 0xFU); + + /* Make sure host channel interrupts are enabled. */ + USBx->GINTMSK |= USB_OTG_GINTMSK_HCIM; + + /* Program the HCCHAR register */ + if ((epnum & 0x80U) == 0x80U) + { + HCcharEpDir = (0x1U << 15) & USB_OTG_HCCHAR_EPDIR; + } + else + { + HCcharEpDir = 0U; + } + + HostCoreSpeed = USB_GetHostSpeed(USBx); + + /* LS device plugged to HUB */ + if ((speed == HPRT0_PRTSPD_LOW_SPEED) && (HostCoreSpeed != HPRT0_PRTSPD_LOW_SPEED)) + { + HCcharLowSpeed = (0x1U << 17) & USB_OTG_HCCHAR_LSDEV; + } + else + { + HCcharLowSpeed = 0U; + } + + USBx_HC((uint32_t)ch_num)->HCCHAR = (((uint32_t)dev_address << 22) & USB_OTG_HCCHAR_DAD) | + ((((uint32_t)epnum & 0x7FU) << 11) & USB_OTG_HCCHAR_EPNUM) | + (((uint32_t)ep_type << 18) & USB_OTG_HCCHAR_EPTYP) | + ((uint32_t)mps & USB_OTG_HCCHAR_MPSIZ) | + USB_OTG_HCCHAR_MC_0 | HCcharEpDir | HCcharLowSpeed; + + if ((ep_type == EP_TYPE_INTR) || (ep_type == EP_TYPE_ISOC)) + { + USBx_HC((uint32_t)ch_num)->HCCHAR |= USB_OTG_HCCHAR_ODDFRM; + } + + return ret; +} + +/** + * @brief Start a transfer over a host channel + * @param USBx Selected device + * @param hc pointer to host channel structure + * @param dma USB dma enabled or disabled + * This parameter can be one of these values: + * 0 : DMA feature not used + * 1 : DMA feature used + * @retval HAL state + */ +HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t ch_num = (uint32_t)hc->ch_num; + __IO uint32_t tmpreg; + uint8_t is_oddframe; + uint16_t len_words; + uint16_t num_packets; + uint16_t max_hc_pkt_count = HC_MAX_PKT_CNT; + +#if defined (USB_OTG_HS) + if (USBx == USB_OTG_HS) + { + /* in DMA mode host Core automatically issues ping in case of NYET/NAK */ + if (dma == 1U) + { + if (((hc->ep_type == EP_TYPE_CTRL) || (hc->ep_type == EP_TYPE_BULK)) && (hc->do_ssplit == 0U)) + { + + USBx_HC((uint32_t)ch_num)->HCINTMSK &= ~(USB_OTG_HCINTMSK_NYET | + USB_OTG_HCINTMSK_ACKM | + USB_OTG_HCINTMSK_NAKM); + } + } + else + { + if ((hc->speed == USBH_HS_SPEED) && (hc->do_ping == 1U)) + { + (void)USB_DoPing(USBx, hc->ch_num); + return HAL_OK; + } + } + } +#endif /* defined (USB_OTG_HS) */ + + if (hc->do_ssplit == 1U) + { + /* Set number of packet to 1 for Split transaction */ + num_packets = 1U; + + if (hc->ep_is_in != 0U) + { + hc->XferSize = (uint32_t)num_packets * hc->max_packet; + } + else + { + if (hc->ep_type == EP_TYPE_ISOC) + { + if (hc->xfer_len > ISO_SPLT_MPS) + { + /* Isochrone Max Packet Size for Split mode */ + hc->XferSize = hc->max_packet; + hc->xfer_len = hc->XferSize; + + if ((hc->iso_splt_xactPos == HCSPLT_BEGIN) || (hc->iso_splt_xactPos == HCSPLT_MIDDLE)) + { + hc->iso_splt_xactPos = HCSPLT_MIDDLE; + } + else + { + hc->iso_splt_xactPos = HCSPLT_BEGIN; + } + } + else + { + hc->XferSize = hc->xfer_len; + + if ((hc->iso_splt_xactPos != HCSPLT_BEGIN) && (hc->iso_splt_xactPos != HCSPLT_MIDDLE)) + { + hc->iso_splt_xactPos = HCSPLT_FULL; + } + else + { + hc->iso_splt_xactPos = HCSPLT_END; + } + } + } + else + { + if ((dma == 1U) && (hc->xfer_len > hc->max_packet)) + { + hc->XferSize = (uint32_t)num_packets * hc->max_packet; + } + else + { + hc->XferSize = hc->xfer_len; + } + } + } + } + else + { + /* Compute the expected number of packets associated to the transfer */ + if (hc->xfer_len > 0U) + { + num_packets = (uint16_t)((hc->xfer_len + hc->max_packet - 1U) / hc->max_packet); + + if (num_packets > max_hc_pkt_count) + { + num_packets = max_hc_pkt_count; + hc->XferSize = (uint32_t)num_packets * hc->max_packet; + } + } + else + { + num_packets = 1U; + } + + /* + * For IN channel HCTSIZ.XferSize is expected to be an integer multiple of + * max_packet size. + */ + if (hc->ep_is_in != 0U) + { + hc->XferSize = (uint32_t)num_packets * hc->max_packet; + } + else + { + hc->XferSize = hc->xfer_len; + } + } + + /* Initialize the HCTSIZn register */ + USBx_HC(ch_num)->HCTSIZ = (hc->XferSize & USB_OTG_HCTSIZ_XFRSIZ) | + (((uint32_t)num_packets << 19) & USB_OTG_HCTSIZ_PKTCNT) | + (((uint32_t)hc->data_pid << 29) & USB_OTG_HCTSIZ_DPID); + + if (dma != 0U) + { + /* xfer_buff MUST be 32-bits aligned */ + USBx_HC(ch_num)->HCDMA = (uint32_t)hc->xfer_buff; + } + + is_oddframe = (((uint32_t)USBx_HOST->HFNUM & 0x01U) != 0U) ? 0U : 1U; + USBx_HC(ch_num)->HCCHAR &= ~USB_OTG_HCCHAR_ODDFRM; + USBx_HC(ch_num)->HCCHAR |= (uint32_t)is_oddframe << 29; + + if (hc->do_ssplit == 1U) + { + /* Set Hub start Split transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT = ((uint32_t)hc->hub_addr << USB_OTG_HCSPLT_HUBADDR_Pos) | + (uint32_t)hc->hub_port_nbr | USB_OTG_HCSPLT_SPLITEN; + + /* unmask ack & nyet for IN/OUT transactions */ + USBx_HC((uint32_t)ch_num)->HCINTMSK |= (USB_OTG_HCINTMSK_ACKM | + USB_OTG_HCINTMSK_NYET); + + if ((hc->do_csplit == 1U) && (hc->ep_is_in == 0U)) + { + USBx_HC((uint32_t)ch_num)->HCSPLT |= USB_OTG_HCSPLT_COMPLSPLT; + USBx_HC((uint32_t)ch_num)->HCINTMSK |= USB_OTG_HCINTMSK_NYET; + } + + if (((hc->ep_type == EP_TYPE_ISOC) || (hc->ep_type == EP_TYPE_INTR)) && + (hc->do_csplit == 1U) && (hc->ep_is_in == 1U)) + { + USBx_HC((uint32_t)ch_num)->HCSPLT |= USB_OTG_HCSPLT_COMPLSPLT; + } + + /* Position management for iso out transaction on split mode */ + if ((hc->ep_type == EP_TYPE_ISOC) && (hc->ep_is_in == 0U)) + { + /* Set data payload position */ + switch (hc->iso_splt_xactPos) + { + case HCSPLT_BEGIN: + /* First data payload for OUT Transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT |= USB_OTG_HCSPLT_XACTPOS_1; + break; + + case HCSPLT_MIDDLE: + /* Middle data payload for OUT Transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT |= USB_OTG_HCSPLT_XACTPOS_Pos; + break; + + case HCSPLT_END: + /* End data payload for OUT Transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT |= USB_OTG_HCSPLT_XACTPOS_0; + break; + + case HCSPLT_FULL: + /* Entire data payload for OUT Transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT |= USB_OTG_HCSPLT_XACTPOS; + break; + + default: + break; + } + } + } + else + { + /* Clear Hub Start Split transaction */ + USBx_HC((uint32_t)ch_num)->HCSPLT = 0U; + } + + /* Set host channel enable */ + tmpreg = USBx_HC(ch_num)->HCCHAR; + tmpreg &= ~USB_OTG_HCCHAR_CHDIS; + + /* make sure to set the correct ep direction */ + if (hc->ep_is_in != 0U) + { + tmpreg |= USB_OTG_HCCHAR_EPDIR; + } + else + { + tmpreg &= ~USB_OTG_HCCHAR_EPDIR; + } + tmpreg |= USB_OTG_HCCHAR_CHENA; + USBx_HC(ch_num)->HCCHAR = tmpreg; + + if (dma != 0U) /* dma mode */ + { + return HAL_OK; + } + + if ((hc->ep_is_in == 0U) && (hc->xfer_len > 0U) && (hc->do_csplit == 0U)) + { + switch (hc->ep_type) + { + /* Non periodic transfer */ + case EP_TYPE_CTRL: + case EP_TYPE_BULK: + + len_words = (uint16_t)((hc->xfer_len + 3U) / 4U); + + /* check if there is enough space in FIFO space */ + if (len_words > (USBx->HNPTXSTS & 0xFFFFU)) + { + /* need to process data in nptxfempty interrupt */ + USBx->GINTMSK |= USB_OTG_GINTMSK_NPTXFEM; + } + break; + + /* Periodic transfer */ + case EP_TYPE_INTR: + case EP_TYPE_ISOC: + len_words = (uint16_t)((hc->xfer_len + 3U) / 4U); + /* check if there is enough space in FIFO space */ + if (len_words > (USBx_HOST->HPTXSTS & 0xFFFFU)) /* split the transfer */ + { + /* need to process data in ptxfempty interrupt */ + USBx->GINTMSK |= USB_OTG_GINTMSK_PTXFEM; + } + break; + + default: + break; + } + + /* Write packet into the Tx FIFO. */ + (void)USB_WritePacket(USBx, hc->xfer_buff, hc->ch_num, (uint16_t)hc->xfer_len, 0); + } + + return HAL_OK; +} + +/** + * @brief Read all host channel interrupts status + * @param USBx Selected device + * @retval HAL state + */ +uint32_t USB_HC_ReadInterrupt(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + return ((USBx_HOST->HAINT) & 0xFFFFU); +} + +/** + * @brief Halt a host channel + * @param USBx Selected device + * @param hc_num Host Channel number + * This parameter can be a value from 1 to 15 + * @retval HAL state + */ +HAL_StatusTypeDef USB_HC_Halt(const USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t hcnum = (uint32_t)hc_num; + __IO uint32_t count = 0U; + uint32_t HcEpType = (USBx_HC(hcnum)->HCCHAR & USB_OTG_HCCHAR_EPTYP) >> 18; + uint32_t ChannelEna = (USBx_HC(hcnum)->HCCHAR & USB_OTG_HCCHAR_CHENA) >> 31; + uint32_t SplitEna = (USBx_HC(hcnum)->HCSPLT & USB_OTG_HCSPLT_SPLITEN) >> 31; + + /* In buffer DMA, Channel disable must not be programmed for non-split periodic channels. + At the end of the next uframe/frame (in the worst case), the core generates a channel halted + and disables the channel automatically. */ + + if ((((USBx->GAHBCFG & USB_OTG_GAHBCFG_DMAEN) == USB_OTG_GAHBCFG_DMAEN) && (SplitEna == 0U)) && + ((ChannelEna == 0U) || (((HcEpType == HCCHAR_ISOC) || (HcEpType == HCCHAR_INTR))))) + { + return HAL_OK; + } + + /* Check for space in the request queue to issue the halt. */ + if ((HcEpType == HCCHAR_CTRL) || (HcEpType == HCCHAR_BULK)) + { + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHDIS; + + if ((USBx->GAHBCFG & USB_OTG_GAHBCFG_DMAEN) == 0U) + { + if ((USBx->HNPTXSTS & (0xFFU << 16)) == 0U) + { + USBx_HC(hcnum)->HCCHAR &= ~USB_OTG_HCCHAR_CHENA; + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA; + do + { + count++; + + if (count > 1000U) + { + break; + } + } while ((USBx_HC(hcnum)->HCCHAR & USB_OTG_HCCHAR_CHENA) == USB_OTG_HCCHAR_CHENA); + } + else + { + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA; + } + } + else + { + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA; + } + } + else + { + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHDIS; + + if ((USBx_HOST->HPTXSTS & (0xFFU << 16)) == 0U) + { + USBx_HC(hcnum)->HCCHAR &= ~USB_OTG_HCCHAR_CHENA; + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA; + do + { + count++; + + if (count > 1000U) + { + break; + } + } while ((USBx_HC(hcnum)->HCCHAR & USB_OTG_HCCHAR_CHENA) == USB_OTG_HCCHAR_CHENA); + } + else + { + USBx_HC(hcnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA; + } + } + + return HAL_OK; +} + +/** + * @brief Initiate Do Ping protocol + * @param USBx Selected device + * @param hc_num Host Channel number + * This parameter can be a value from 1 to 15 + * @retval HAL state + */ +HAL_StatusTypeDef USB_DoPing(const USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + uint32_t chnum = (uint32_t)ch_num; + uint32_t num_packets = 1U; + uint32_t tmpreg; + + USBx_HC(chnum)->HCTSIZ = ((num_packets << 19) & USB_OTG_HCTSIZ_PKTCNT) | + USB_OTG_HCTSIZ_DOPING; + + /* Set host channel enable */ + tmpreg = USBx_HC(chnum)->HCCHAR; + tmpreg &= ~USB_OTG_HCCHAR_CHDIS; + tmpreg |= USB_OTG_HCCHAR_CHENA; + USBx_HC(chnum)->HCCHAR = tmpreg; + + return HAL_OK; +} + +/** + * @brief Stop Host Core + * @param USBx Selected device + * @retval HAL state + */ +HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx) +{ + HAL_StatusTypeDef ret = HAL_OK; + uint32_t USBx_BASE = (uint32_t)USBx; + __IO uint32_t count = 0U; + uint32_t value; + uint32_t i; + + (void)USB_DisableGlobalInt(USBx); + + /* Flush USB FIFO */ + if (USB_FlushTxFifo(USBx, 0x10U) != HAL_OK) /* all Tx FIFOs */ + { + ret = HAL_ERROR; + } + + if (USB_FlushRxFifo(USBx) != HAL_OK) + { + ret = HAL_ERROR; + } + + /* Flush out any leftover queued requests. */ + for (i = 0U; i <= 15U; i++) + { + value = USBx_HC(i)->HCCHAR; + value |= USB_OTG_HCCHAR_CHDIS; + value &= ~USB_OTG_HCCHAR_CHENA; + value &= ~USB_OTG_HCCHAR_EPDIR; + USBx_HC(i)->HCCHAR = value; + } + + /* Halt all channels to put them into a known state. */ + for (i = 0U; i <= 15U; i++) + { + value = USBx_HC(i)->HCCHAR; + value |= USB_OTG_HCCHAR_CHDIS; + value |= USB_OTG_HCCHAR_CHENA; + value &= ~USB_OTG_HCCHAR_EPDIR; + USBx_HC(i)->HCCHAR = value; + + do + { + count++; + + if (count > 1000U) + { + break; + } + } while ((USBx_HC(i)->HCCHAR & USB_OTG_HCCHAR_CHENA) == USB_OTG_HCCHAR_CHENA); + } + + /* Clear any pending Host interrupts */ + USBx_HOST->HAINT = CLEAR_INTERRUPT_MASK; + USBx->GINTSTS = CLEAR_INTERRUPT_MASK; + + (void)USB_EnableGlobalInt(USBx); + + return ret; +} + +/** + * @brief USB_ActivateRemoteWakeup active remote wakeup signalling + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_ActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS) + { + /* active Remote wakeup signalling */ + USBx_DEVICE->DCTL |= USB_OTG_DCTL_RWUSIG; + } + + return HAL_OK; +} + +/** + * @brief USB_DeActivateRemoteWakeup de-active remote wakeup signalling + * @param USBx Selected device + * @retval HAL status + */ +HAL_StatusTypeDef USB_DeActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx) +{ + uint32_t USBx_BASE = (uint32_t)USBx; + + /* active Remote wakeup signalling */ + USBx_DEVICE->DCTL &= ~(USB_OTG_DCTL_RWUSIG); + + return HAL_OK; +} +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ +#endif /* defined (HAL_PCD_MODULE_ENABLED) || defined (HAL_HCD_MODULE_ENABLED) */ + +/** + * @} + */ diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h new file mode 100644 index 00000000..b6e8d43e --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h @@ -0,0 +1,190 @@ +/** + ****************************************************************************** + * @file usbd_hid.h + * @author MCD Application Team + * @brief Header file for the usbd_hid_core.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_HID_H +#define __USB_HID_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_ioreq.h" + +/** @addtogroup STM32_USB_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_HID + * @brief This file is the Header file for usbd_hid.c + * @{ + */ + + +///** @defgroup USBD_HID_Exported_Defines +// * @{ +// */ +//#ifndef HID_EPIN_ADDR +//#define HID_EPIN_ADDR 0x81U +//#endif /* HID_EPIN_ADDR */ +//#define HID_EPIN_SIZE 0x04U +// +//#define USB_HID_CONFIG_DESC_SIZ 34U +//#define USB_HID_DESC_SIZ 9U +//#define HID_MOUSE_REPORT_DESC_SIZE 63U +// +//#define HID_DESCRIPTOR_TYPE 0x21U +//#define HID_REPORT_DESC 0x22U +// +//#ifndef HID_HS_BINTERVAL +//#define HID_HS_BINTERVAL 0x07U +//#endif /* HID_HS_BINTERVAL */ +// +//#ifndef HID_FS_BINTERVAL +//#define HID_FS_BINTERVAL 0x0AU +//#endif /* HID_FS_BINTERVAL */ +// +//#define USBD_HID_REQ_SET_PROTOCOL 0x0BU +//#define USBD_HID_REQ_GET_PROTOCOL 0x03U +// +//#define USBD_HID_REQ_SET_IDLE 0x0AU +//#define USBD_HID_REQ_GET_IDLE 0x02U +// +//#define USBD_HID_REQ_SET_REPORT 0x09U +//#define USBD_HID_REQ_GET_REPORT 0x01U +///** +// * @} +// */ + +/** @defgroup USBD_HID_Exported_Defines + * @{ + */ +#ifndef HID_EPIN_ADDR +#define HID_EPIN_ADDR 0x81U +#endif /* HID_EPIN_ADDR */ +#define HID_EPIN_SIZE 0x0EU + +#define USB_HID_CONFIG_DESC_SIZ 34U +#define USB_HID_DESC_SIZ 9U +#define HID_MOUSE_REPORT_DESC_SIZE 0x2DU + +#define HID_DESCRIPTOR_TYPE 0x21U +#define HID_REPORT_DESC 0x22U + +#ifndef HID_HS_BINTERVAL +#define HID_HS_BINTERVAL 0x07U +#endif /* HID_HS_BINTERVAL */ + +#ifndef HID_FS_BINTERVAL +#define HID_FS_BINTERVAL 0x0AU +#endif /* HID_FS_BINTERVAL */ + +#define USBD_HID_REQ_SET_PROTOCOL 0x0BU +#define USBD_HID_REQ_GET_PROTOCOL 0x03U + +#define USBD_HID_REQ_SET_IDLE 0x0AU +#define USBD_HID_REQ_GET_IDLE 0x02U + +#define USBD_HID_REQ_SET_REPORT 0x09U +#define USBD_HID_REQ_GET_REPORT 0x01U +/** + * @} + */ + +typedef enum +{ + USBD_HID_IDLE = 0, + USBD_HID_BUSY, +} USBD_HID_StateTypeDef; + + +typedef struct +{ + uint32_t Protocol; + uint32_t IdleState; + uint32_t AltSetting; + USBD_HID_StateTypeDef state; +} USBD_HID_HandleTypeDef; + +/* + * HID Class specification version 1.1 + * 6.2.1 HID Descriptor + */ + +typedef struct +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t bcdHID; + uint8_t bCountryCode; + uint8_t bNumDescriptors; + uint8_t bHIDDescriptorType; + uint16_t wItemLength; +} __PACKED USBD_HIDDescTypeDef; + +/** + * @} + */ + + + +/** @defgroup USBD_CORE_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CORE_Exported_Variables + * @{ + */ + +extern USBD_ClassTypeDef USBD_HID; +#define USBD_HID_CLASS &USBD_HID +/** + * @} + */ + +/** @defgroup USB_CORE_Exported_Functions + * @{ + */ +#ifdef USE_USBD_COMPOSITE +uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len, uint8_t ClassId); +#else +uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len); +#endif /* USE_USBD_COMPOSITE */ +uint32_t USBD_HID_GetPollingInterval(USBD_HandleTypeDef *pdev); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USB_HID_H */ +/** + * @} + */ + +/** + * @} + */ diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c new file mode 100644 index 00000000..1040f939 --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c @@ -0,0 +1,674 @@ +/** + ****************************************************************************** + * @file usbd_hid.c + * @author MCD Application Team + * @brief This file provides the HID core functions. + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + * @verbatim + * + * =================================================================== + * HID Class Description + * =================================================================== + * This module manages the HID class V1.11 following the "Device Class Definition + * for Human Interface Devices (HID) Version 1.11 Jun 27, 2001". + * This driver implements the following aspects of the specification: + * - The Boot Interface Subclass + * - The Mouse protocol + * - Usage Page : Generic Desktop + * - Usage : Joystick + * - Collection : Application + * + * @note In HS mode and when the DMA is used, all variables and data structures + * dealing with the DMA during the transaction process should be 32-bit aligned. + * + * + * @endverbatim + * + ****************************************************************************** + */ + +/* BSPDependencies +- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c" +- "stm32xxxxx_{eval}{discovery}_io.c" +EndBSPDependencies */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_hid.h" +#include "usbd_ctlreq.h" + + +/** @addtogroup STM32_USB_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_HID + * @brief usbd core module + * @{ + */ + +/** @defgroup USBD_HID_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_HID_Private_Defines + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_HID_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_HID_Private_FunctionPrototypes + * @{ + */ + +static uint8_t USBD_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx); +static uint8_t USBD_HID_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx); +static uint8_t USBD_HID_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static uint8_t USBD_HID_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum); +#ifndef USE_USBD_COMPOSITE +static uint8_t *USBD_HID_GetFSCfgDesc(uint16_t *length); +static uint8_t *USBD_HID_GetHSCfgDesc(uint16_t *length); +static uint8_t *USBD_HID_GetOtherSpeedCfgDesc(uint16_t *length); +static uint8_t *USBD_HID_GetDeviceQualifierDesc(uint16_t *length); +#endif /* USE_USBD_COMPOSITE */ +/** + * @} + */ + +/** @defgroup USBD_HID_Private_Variables + * @{ + */ + +USBD_ClassTypeDef USBD_HID = +{ + USBD_HID_Init, + USBD_HID_DeInit, + USBD_HID_Setup, + NULL, /* EP0_TxSent */ + NULL, /* EP0_RxReady */ + USBD_HID_DataIn, /* DataIn */ + NULL, /* DataOut */ + NULL, /* SOF */ + NULL, + NULL, +#ifdef USE_USBD_COMPOSITE + NULL, + NULL, + NULL, + NULL, +#else + USBD_HID_GetHSCfgDesc, + USBD_HID_GetFSCfgDesc, + USBD_HID_GetOtherSpeedCfgDesc, + USBD_HID_GetDeviceQualifierDesc, +#endif /* USE_USBD_COMPOSITE */ +}; + +#ifndef USE_USBD_COMPOSITE +/* USB HID device FS Configuration Descriptor */ +__ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END = +{ + 0x09, /* bLength: Configuration Descriptor size */ + USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ + USB_HID_CONFIG_DESC_SIZ, /* wTotalLength: Bytes returned */ + 0x00, + 0x01, /* bNumInterfaces: 1 interface */ + 0x01, /* bConfigurationValue: Configuration value */ + 0x00, /* iConfiguration: Index of string descriptor + describing the configuration */ +#if (USBD_SELF_POWERED == 1U) + 0xE0, /* bmAttributes: Bus Powered according to user configuration */ +#else + 0xA0, /* bmAttributes: Bus Powered according to user configuration */ +#endif /* USBD_SELF_POWERED */ + USBD_MAX_POWER, /* MaxPower (mA) */ + + /************** Descriptor of Joystick Mouse interface ****************/ + /* 09 */ + 0x09, /* bLength: Interface Descriptor size */ + USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */ + 0x00, /* bInterfaceNumber: Number of Interface */ + 0x00, /* bAlternateSetting: Alternate setting */ + 0x01, /* bNumEndpoints */ + 0x03, /* bInterfaceClass: HID */ + 0x00, /* bInterfaceSubClass : 1=BOOT, 0=no boot */ + 0x0, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */ + 0, /* iInterface: Index of string descriptor */ + /******************** Descriptor of Joystick Mouse HID ********************/ + /* 18 */ + 0x09, /* bLength: HID Descriptor size */ + HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */ + 0x11, /* bcdHID: HID Class Spec release number */ + 0x01, + 0x00, /* bCountryCode: Hardware target country */ + 0x01, /* bNumDescriptors: Number of HID class descriptors to follow */ + 0x22, /* bDescriptorType */ + HID_MOUSE_REPORT_DESC_SIZE, /* wItemLength: Total length of Report descriptor */ + 0x00, + /******************** Descriptor of Mouse endpoint ********************/ + /* 27 */ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_DESC_TYPE_ENDPOINT, /* bDescriptorType:*/ + + HID_EPIN_ADDR, /* bEndpointAddress: Endpoint Address (IN) */ + 0x03, /* bmAttributes: Interrupt endpoint */ + HID_EPIN_SIZE, /* wMaxPacketSize: 4 Bytes max */ + 0x00, + HID_FS_BINTERVAL, /* bInterval: Polling Interval */ + /* 34 */ +}; +#endif /* USE_USBD_COMPOSITE */ + +/* USB HID device Configuration Descriptor */ +__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END = +{ + /* 18 */ + 0x09, /* bLength: HID Descriptor size */ + HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */ + 0x11, /* bcdHID: HID Class Spec release number */ + 0x01, + 0x00, /* bCountryCode: Hardware target country */ + 0x01, /* bNumDescriptors: Number of HID class descriptors to follow */ + 0x22, /* bDescriptorType */ + HID_MOUSE_REPORT_DESC_SIZE, /* wItemLength: Total length of Report descriptor */ + 0x00, +}; + +#ifndef USE_USBD_COMPOSITE +/* USB Standard Device Descriptor */ +__ALIGN_BEGIN static uint8_t USBD_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = +{ + USB_LEN_DEV_QUALIFIER_DESC, + USB_DESC_TYPE_DEVICE_QUALIFIER, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x40, + 0x01, + 0x00, +}; +#endif /* USE_USBD_COMPOSITE */ + +__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END = +{ +// 0x05, 0x01, // USAGE_PAGE (Generic Desktop) +// 0x09, 0x06, // USAGE (Keyboard) +// 0xa1, 0x01, // COLLECTION (Application) +// 0x05, 0x07, // USAGE_PAGE (Keyboard) +// 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) +// 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) +// 0x15, 0x00, // LOGICAL_MINIMUM (0) +// 0x25, 0x01, // LOGICAL_MAXIMUM (1) +// 0x75, 0x01, // REPORT_SIZE (1) +// 0x95, 0x08, // REPORT_COUNT (8) +// 0x81, 0x02, // INPUT (Data,Var,Abs) +// 0x95, 0x01, // REPORT_COUNT (1) +// 0x75, 0x08, // REPORT_SIZE (8) +// 0x81, 0x03, // INPUT (Cnst,Var,Abs) +// 0x95, 0x05, // REPORT_COUNT (5) +// 0x75, 0x01, // REPORT_SIZE (1) +// 0x05, 0x08, // USAGE_PAGE (LEDs) +// 0x19, 0x01, // USAGE_MINIMUM (Num Lock) +// 0x29, 0x05, // USAGE_MAXIMUM (Kana) +// 0x91, 0x02, // OUTPUT (Data,Var,Abs) +// 0x95, 0x01, // REPORT_COUNT (1) +// 0x75, 0x03, // REPORT_SIZE (3) +// 0x91, 0x03, // OUTPUT (Cnst,Var,Abs) +// 0x95, 0x06, // REPORT_COUNT (6) +// 0x75, 0x08, // REPORT_SIZE (8) +// 0x15, 0x00, // LOGICAL_MINIMUM (0) +// 0x25, 0x65, // LOGICAL_MAXIMUM (101) +// 0x05, 0x07, // USAGE_PAGE (Keyboard) +// 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) +// 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application) +// 0x81, 0x00, // INPUT (Data,Ary,Abs) +// 0xc0 // END_COLLECTION + // 0xC0 /* End Collection */ + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x06, // Usage (Keyboard) + 0xA1, 0x01, // Collection (Application) + + // Modifiers (8 bits) + 0x05, 0x07, // Usage Page (Keyboard/Keypad) + 0x19, 0xE0, // Usage Minimum (224) - Left Control + 0x29, 0xE7, // Usage Maximum (231) - Right GUI + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x01, // Logical Maximum (1) + 0x75, 0x01, // Report Size (1 bit) + 0x95, 0x08, // Report Count (8 bits) + 0x81, 0x02, // Input (Data, Variable, Absolute) + + // Reserved byte (8 bits) + 0x75, 0x08, // Report Size (8 bits) + 0x95, 0x01, // Report Count (1) + 0x81, 0x01, // Input (Constant) + + // Key bitfield (96 bits = 12 bytes) + 0x05, 0x07, // Usage Page (Keyboard/Keypad) + 0x19, 0x04, // Usage Minimum (4) — 'A' key + 0x29, 0x63, // Usage Maximum (99) — 96 keys total (4 to 99) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x01, // Logical Maximum (1) + 0x75, 0x01, // Report Size (1 bit) + 0x95, 0x60, // Report Count (96 bits) + 0x81, 0x02, // Input (Data, Variable, Absolute) + + 0xC0 // End Collection +}; + +static uint8_t HIDInEpAdd = HID_EPIN_ADDR; + +/** + * @} + */ + +/** @defgroup USBD_HID_Private_Functions + * @{ + */ + +/** + * @brief USBD_HID_Init + * Initialize the HID interface + * @param pdev: device instance + * @param cfgidx: Configuration index + * @retval status + */ +static uint8_t USBD_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) +{ + UNUSED(cfgidx); + + USBD_HID_HandleTypeDef *hhid; + + hhid = (USBD_HID_HandleTypeDef *)USBD_malloc(sizeof(USBD_HID_HandleTypeDef)); + + if (hhid == NULL) + { + pdev->pClassDataCmsit[pdev->classId] = NULL; + return (uint8_t)USBD_EMEM; + } + + pdev->pClassDataCmsit[pdev->classId] = (void *)hhid; + pdev->pClassData = pdev->pClassDataCmsit[pdev->classId]; + +#ifdef USE_USBD_COMPOSITE + /* Get the Endpoints addresses allocated for this class instance */ + HIDInEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_IN, USBD_EP_TYPE_INTR, (uint8_t)pdev->classId); +#endif /* USE_USBD_COMPOSITE */ + + if (pdev->dev_speed == USBD_SPEED_HIGH) + { + pdev->ep_in[HIDInEpAdd & 0xFU].bInterval = HID_HS_BINTERVAL; + } + else /* LOW and FULL-speed endpoints */ + { + pdev->ep_in[HIDInEpAdd & 0xFU].bInterval = HID_FS_BINTERVAL; + } + + /* Open EP IN */ + (void)USBD_LL_OpenEP(pdev, HIDInEpAdd, USBD_EP_TYPE_INTR, HID_EPIN_SIZE); + pdev->ep_in[HIDInEpAdd & 0xFU].is_used = 1U; + + hhid->state = USBD_HID_IDLE; + + return (uint8_t)USBD_OK; +} + +/** + * @brief USBD_HID_DeInit + * DeInitialize the HID layer + * @param pdev: device instance + * @param cfgidx: Configuration index + * @retval status + */ +static uint8_t USBD_HID_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx) +{ + UNUSED(cfgidx); + +#ifdef USE_USBD_COMPOSITE + /* Get the Endpoints addresses allocated for this class instance */ + HIDInEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_IN, USBD_EP_TYPE_INTR, (uint8_t)pdev->classId); +#endif /* USE_USBD_COMPOSITE */ + + /* Close HID EPs */ + (void)USBD_LL_CloseEP(pdev, HIDInEpAdd); + pdev->ep_in[HIDInEpAdd & 0xFU].is_used = 0U; + pdev->ep_in[HIDInEpAdd & 0xFU].bInterval = 0U; + + /* Free allocated memory */ + if (pdev->pClassDataCmsit[pdev->classId] != NULL) + { + (void)USBD_free(pdev->pClassDataCmsit[pdev->classId]); + pdev->pClassDataCmsit[pdev->classId] = NULL; + } + + return (uint8_t)USBD_OK; +} + +/** + * @brief USBD_HID_Setup + * Handle the HID specific requests + * @param pdev: instance + * @param req: usb requests + * @retval status + */ +static uint8_t USBD_HID_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId]; + USBD_StatusTypeDef ret = USBD_OK; + uint16_t len; + uint8_t *pbuf; + uint16_t status_info = 0U; + + if (hhid == NULL) + { + return (uint8_t)USBD_FAIL; + } + + switch (req->bmRequest & USB_REQ_TYPE_MASK) + { + case USB_REQ_TYPE_CLASS : + switch (req->bRequest) + { + case USBD_HID_REQ_SET_PROTOCOL: + hhid->Protocol = (uint8_t)(req->wValue); + break; + + case USBD_HID_REQ_GET_PROTOCOL: + (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->Protocol, 1U); + break; + + case USBD_HID_REQ_SET_IDLE: + hhid->IdleState = (uint8_t)(req->wValue >> 8); + break; + + case USBD_HID_REQ_GET_IDLE: + (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->IdleState, 1U); + break; + + default: + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + break; + } + break; + case USB_REQ_TYPE_STANDARD: + switch (req->bRequest) + { + case USB_REQ_GET_STATUS: + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + (void)USBD_CtlSendData(pdev, (uint8_t *)&status_info, 2U); + } + else + { + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + } + break; + + case USB_REQ_GET_DESCRIPTOR: + if ((req->wValue >> 8) == HID_REPORT_DESC) + { + len = MIN(HID_MOUSE_REPORT_DESC_SIZE, req->wLength); + pbuf = HID_MOUSE_ReportDesc; + } + else if ((req->wValue >> 8) == HID_DESCRIPTOR_TYPE) + { + pbuf = USBD_HID_Desc; + len = MIN(USB_HID_DESC_SIZ, req->wLength); + } + else + { + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + break; + } + (void)USBD_CtlSendData(pdev, pbuf, len); + break; + + case USB_REQ_GET_INTERFACE : + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->AltSetting, 1U); + } + else + { + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + } + break; + + case USB_REQ_SET_INTERFACE: + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + hhid->AltSetting = (uint8_t)(req->wValue); + } + else + { + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + } + break; + + case USB_REQ_CLEAR_FEATURE: + break; + + default: + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + break; + } + break; + + default: + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + break; + } + + return (uint8_t)ret; +} + + +/** + * @brief USBD_HID_SendReport + * Send HID Report + * @param pdev: device instance + * @param buff: pointer to report + * @param ClassId: The Class ID + * @retval status + */ +#ifdef USE_USBD_COMPOSITE +uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len, uint8_t ClassId) +{ + USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef *)pdev->pClassDataCmsit[ClassId]; +#else +uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len) +{ + USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId]; +#endif /* USE_USBD_COMPOSITE */ + + if (hhid == NULL) + { + return (uint8_t)USBD_FAIL; + } + +#ifdef USE_USBD_COMPOSITE + /* Get the Endpoints addresses allocated for this class instance */ + HIDInEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_IN, USBD_EP_TYPE_INTR, ClassId); +#endif /* USE_USBD_COMPOSITE */ + + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (hhid->state == USBD_HID_IDLE) + { + hhid->state = USBD_HID_BUSY; + (void)USBD_LL_Transmit(pdev, HIDInEpAdd, report, len); + } + } + + return (uint8_t)USBD_OK; +} + +/** + * @brief USBD_HID_GetPollingInterval + * return polling interval from endpoint descriptor + * @param pdev: device instance + * @retval polling interval + */ +uint32_t USBD_HID_GetPollingInterval(USBD_HandleTypeDef *pdev) +{ + uint32_t polling_interval; + + /* HIGH-speed endpoints */ + if (pdev->dev_speed == USBD_SPEED_HIGH) + { + /* Sets the data transfer polling interval for high speed transfers. + Values between 1..16 are allowed. Values correspond to interval + of 2 ^ (bInterval-1). This option (8 ms, corresponds to HID_HS_BINTERVAL */ + polling_interval = (((1U << (HID_HS_BINTERVAL - 1U))) / 8U); + } + else /* LOW and FULL-speed endpoints */ + { + /* Sets the data transfer polling interval for low and full + speed transfers */ + polling_interval = HID_FS_BINTERVAL; + } + + return ((uint32_t)(polling_interval)); +} + +#ifndef USE_USBD_COMPOSITE +/** + * @brief USBD_HID_GetCfgFSDesc + * return FS configuration descriptor + * @param speed : current device speed + * @param length : pointer data length + * @retval pointer to descriptor buffer + */ +static uint8_t *USBD_HID_GetFSCfgDesc(uint16_t *length) +{ + USBD_EpDescTypeDef *pEpDesc = USBD_GetEpDesc(USBD_HID_CfgDesc, HID_EPIN_ADDR); + + if (pEpDesc != NULL) + { + pEpDesc->bInterval = HID_FS_BINTERVAL; + } + + *length = (uint16_t)sizeof(USBD_HID_CfgDesc); + return USBD_HID_CfgDesc; +} + +/** + * @brief USBD_HID_GetCfgHSDesc + * return HS configuration descriptor + * @param speed : current device speed + * @param length : pointer data length + * @retval pointer to descriptor buffer + */ +static uint8_t *USBD_HID_GetHSCfgDesc(uint16_t *length) +{ + USBD_EpDescTypeDef *pEpDesc = USBD_GetEpDesc(USBD_HID_CfgDesc, HID_EPIN_ADDR); + + if (pEpDesc != NULL) + { + pEpDesc->bInterval = HID_HS_BINTERVAL; + } + + *length = (uint16_t)sizeof(USBD_HID_CfgDesc); + return USBD_HID_CfgDesc; +} + +/** + * @brief USBD_HID_GetOtherSpeedCfgDesc + * return other speed configuration descriptor + * @param speed : current device speed + * @param length : pointer data length + * @retval pointer to descriptor buffer + */ +static uint8_t *USBD_HID_GetOtherSpeedCfgDesc(uint16_t *length) +{ + USBD_EpDescTypeDef *pEpDesc = USBD_GetEpDesc(USBD_HID_CfgDesc, HID_EPIN_ADDR); + + if (pEpDesc != NULL) + { + pEpDesc->bInterval = HID_FS_BINTERVAL; + } + + *length = (uint16_t)sizeof(USBD_HID_CfgDesc); + return USBD_HID_CfgDesc; +} +#endif /* USE_USBD_COMPOSITE */ + +/** + * @brief USBD_HID_DataIn + * handle data IN Stage + * @param pdev: device instance + * @param epnum: endpoint index + * @retval status + */ +static uint8_t USBD_HID_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) +{ + UNUSED(epnum); + /* Ensure that the FIFO is empty before a new transfer, this condition could + be caused by a new transfer before the end of the previous transfer */ + ((USBD_HID_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId])->state = USBD_HID_IDLE; + + return (uint8_t)USBD_OK; +} + +#ifndef USE_USBD_COMPOSITE +/** + * @brief DeviceQualifierDescriptor + * return Device Qualifier descriptor + * @param length : pointer data length + * @retval pointer to descriptor buffer + */ +static uint8_t *USBD_HID_GetDeviceQualifierDesc(uint16_t *length) +{ + *length = (uint16_t)sizeof(USBD_HID_DeviceQualifierDesc); + + return USBD_HID_DeviceQualifierDesc; +} +#endif /* USE_USBD_COMPOSITE */ +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h new file mode 100644 index 00000000..4672921b --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h @@ -0,0 +1,175 @@ +/** + ****************************************************************************** + * @file usbd_core.h + * @author MCD Application Team + * @brief Header file for usbd_core.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_CORE_H +#define __USBD_CORE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_conf.h" +#include "usbd_def.h" +#include "usbd_ioreq.h" +#include "usbd_ctlreq.h" + +/** @addtogroup STM32_USB_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_CORE + * @brief This file is the Header file for usbd_core.c file + * @{ + */ + + +/** @defgroup USBD_CORE_Exported_Defines + * @{ + */ +#ifndef USBD_DEBUG_LEVEL +#define USBD_DEBUG_LEVEL 0U +#endif /* USBD_DEBUG_LEVEL */ +/** + * @} + */ + + +/** @defgroup USBD_CORE_Exported_TypesDefinitions + * @{ + */ + + +/** + * @} + */ + + + +/** @defgroup USBD_CORE_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CORE_Exported_Variables + * @{ + */ +#define USBD_SOF USBD_LL_SOF +/** + * @} + */ + +/** @defgroup USBD_CORE_Exported_FunctionsPrototype + * @{ + */ +USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id); +USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass); +#if (USBD_USER_REGISTER_CALLBACK == 1U) +USBD_StatusTypeDef USBD_RegisterDevStateCallback(USBD_HandleTypeDef *pdev, USBD_DevStateCallbackTypeDef pUserCallback); +#endif /* USBD_USER_REGISTER_CALLBACK */ + +#ifdef USE_USBD_COMPOSITE +USBD_StatusTypeDef USBD_RegisterClassComposite(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass, + USBD_CompositeClassTypeDef classtype, uint8_t *EpAddr); + +USBD_StatusTypeDef USBD_UnRegisterClassComposite(USBD_HandleTypeDef *pdev); +uint8_t USBD_CoreGetEPAdd(USBD_HandleTypeDef *pdev, uint8_t ep_dir, uint8_t ep_type, uint8_t ClassId); +#endif /* USE_USBD_COMPOSITE */ + +uint8_t USBD_CoreFindIF(USBD_HandleTypeDef *pdev, uint8_t index); +uint8_t USBD_CoreFindEP(USBD_HandleTypeDef *pdev, uint8_t index); + +USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx); +USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx); + +USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup); +USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata); +USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata); + +USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed); +USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev); + +USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum); +USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum); + +USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev); + +/* USBD Low Level Driver */ +USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev); + +USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, + uint8_t ep_type, uint16_t ep_mps); + +USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr); +USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr); +USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr); +USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr); +USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr); + +USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, + uint8_t *pbuf, uint32_t size); + +USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, + uint8_t *pbuf, uint32_t size); + +#ifdef USBD_HS_TESTMODE_ENABLE +USBD_StatusTypeDef USBD_LL_SetTestMode(USBD_HandleTypeDef *pdev, uint8_t testmode); +#endif /* USBD_HS_TESTMODE_ENABLE */ + +uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr); +uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr); + +void USBD_LL_Delay(uint32_t Delay); + +void *USBD_GetEpDesc(uint8_t *pConfDesc, uint8_t EpAddr); +USBD_DescHeaderTypeDef *USBD_GetNextDesc(uint8_t *pbuf, uint16_t *ptr); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_CORE_H */ + +/** + * @} + */ + +/** + * @} + */ + + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h new file mode 100644 index 00000000..6c45d6ce --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h @@ -0,0 +1,101 @@ +/** + ****************************************************************************** + * @file usbd_req.h + * @author MCD Application Team + * @brief Header file for the usbd_req.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_REQUEST_H +#define __USB_REQUEST_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" + + +/** @addtogroup STM32_USB_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_REQ + * @brief header file for the usbd_req.c file + * @{ + */ + +/** @defgroup USBD_REQ_Exported_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_REQ_Exported_Types + * @{ + */ +/** + * @} + */ + + + +/** @defgroup USBD_REQ_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USBD_REQ_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USBD_REQ_Exported_FunctionsPrototype + * @{ + */ + +USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); + +void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata); +void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USB_REQUEST_H */ + +/** + * @} + */ + +/** + * @} + */ + + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h new file mode 100644 index 00000000..5b2394e7 --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h @@ -0,0 +1,524 @@ +/** + ****************************************************************************** + * @file usbd_def.h + * @author MCD Application Team + * @brief General defines for the usb device library + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_DEF_H +#define __USBD_DEF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_conf.h" + +/** @addtogroup STM32_USBD_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USB_DEF + * @brief general defines for the usb device library file + * @{ + */ + +/** @defgroup USB_DEF_Exported_Defines + * @{ + */ + +#ifndef NULL +#define NULL 0U +#endif /* NULL */ + +#ifndef USBD_MAX_NUM_INTERFACES +#define USBD_MAX_NUM_INTERFACES 1U +#endif /* USBD_MAX_NUM_CONFIGURATION */ + +#ifndef USBD_MAX_NUM_CONFIGURATION +#define USBD_MAX_NUM_CONFIGURATION 1U +#endif /* USBD_MAX_NUM_CONFIGURATION */ + +#ifdef USE_USBD_COMPOSITE +#ifndef USBD_MAX_SUPPORTED_CLASS +#define USBD_MAX_SUPPORTED_CLASS 4U +#endif /* USBD_MAX_SUPPORTED_CLASS */ +#else +#ifndef USBD_MAX_SUPPORTED_CLASS +#define USBD_MAX_SUPPORTED_CLASS 1U +#endif /* USBD_MAX_SUPPORTED_CLASS */ +#endif /* USE_USBD_COMPOSITE */ + +#ifndef USBD_MAX_CLASS_ENDPOINTS +#define USBD_MAX_CLASS_ENDPOINTS 5U +#endif /* USBD_MAX_CLASS_ENDPOINTS */ + +#ifndef USBD_MAX_CLASS_INTERFACES +#define USBD_MAX_CLASS_INTERFACES 5U +#endif /* USBD_MAX_CLASS_INTERFACES */ + +#ifndef USBD_LPM_ENABLED +#define USBD_LPM_ENABLED 0U +#endif /* USBD_LPM_ENABLED */ + +#ifndef USBD_SELF_POWERED +#define USBD_SELF_POWERED 1U +#endif /*USBD_SELF_POWERED */ + +#ifndef USBD_MAX_POWER +#define USBD_MAX_POWER 0x32U /* 100 mA */ +#endif /* USBD_MAX_POWER */ + +#ifndef USBD_SUPPORT_USER_STRING_DESC +#define USBD_SUPPORT_USER_STRING_DESC 0U +#endif /* USBD_SUPPORT_USER_STRING_DESC */ + +#ifndef USBD_CLASS_USER_STRING_DESC +#define USBD_CLASS_USER_STRING_DESC 0U +#endif /* USBD_CLASS_USER_STRING_DESC */ + +#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU +#define USB_LEN_DEV_DESC 0x12U +#define USB_LEN_CFG_DESC 0x09U +#define USB_LEN_IF_DESC 0x09U +#define USB_LEN_EP_DESC 0x07U +#define USB_LEN_OTG_DESC 0x03U +#define USB_LEN_LANGID_STR_DESC 0x04U +#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09U + +#define USBD_IDX_LANGID_STR 0x00U +#define USBD_IDX_MFC_STR 0x01U +#define USBD_IDX_PRODUCT_STR 0x02U +#define USBD_IDX_SERIAL_STR 0x03U +#define USBD_IDX_CONFIG_STR 0x04U +#define USBD_IDX_INTERFACE_STR 0x05U + +#define USB_REQ_TYPE_STANDARD 0x00U +#define USB_REQ_TYPE_CLASS 0x20U +#define USB_REQ_TYPE_VENDOR 0x40U +#define USB_REQ_TYPE_MASK 0x60U + +#define USB_REQ_RECIPIENT_DEVICE 0x00U +#define USB_REQ_RECIPIENT_INTERFACE 0x01U +#define USB_REQ_RECIPIENT_ENDPOINT 0x02U +#define USB_REQ_RECIPIENT_MASK 0x03U + +#define USB_REQ_GET_STATUS 0x00U +#define USB_REQ_CLEAR_FEATURE 0x01U +#define USB_REQ_SET_FEATURE 0x03U +#define USB_REQ_SET_ADDRESS 0x05U +#define USB_REQ_GET_DESCRIPTOR 0x06U +#define USB_REQ_SET_DESCRIPTOR 0x07U +#define USB_REQ_GET_CONFIGURATION 0x08U +#define USB_REQ_SET_CONFIGURATION 0x09U +#define USB_REQ_GET_INTERFACE 0x0AU +#define USB_REQ_SET_INTERFACE 0x0BU +#define USB_REQ_SYNCH_FRAME 0x0CU + +#define USB_DESC_TYPE_DEVICE 0x01U +#define USB_DESC_TYPE_CONFIGURATION 0x02U +#define USB_DESC_TYPE_STRING 0x03U +#define USB_DESC_TYPE_INTERFACE 0x04U +#define USB_DESC_TYPE_ENDPOINT 0x05U +#define USB_DESC_TYPE_DEVICE_QUALIFIER 0x06U +#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 0x07U +#define USB_DESC_TYPE_IAD 0x0BU +#define USB_DESC_TYPE_BOS 0x0FU + +#define USB_CONFIG_REMOTE_WAKEUP 0x02U +#define USB_CONFIG_SELF_POWERED 0x01U + +#define USB_FEATURE_EP_HALT 0x00U +#define USB_FEATURE_REMOTE_WAKEUP 0x01U +#define USB_FEATURE_TEST_MODE 0x02U + +#define USB_DEVICE_CAPABITY_TYPE 0x10U + +#define USB_CONF_DESC_SIZE 0x09U +#define USB_IF_DESC_SIZE 0x09U +#define USB_EP_DESC_SIZE 0x07U +#define USB_IAD_DESC_SIZE 0x08U + +#define USB_HS_MAX_PACKET_SIZE 512U +#define USB_FS_MAX_PACKET_SIZE 64U +#define USB_MAX_EP0_SIZE 64U + +/* Device Status */ +#define USBD_STATE_DEFAULT 0x01U +#define USBD_STATE_ADDRESSED 0x02U +#define USBD_STATE_CONFIGURED 0x03U +#define USBD_STATE_SUSPENDED 0x04U + + +/* EP0 State */ +#define USBD_EP0_IDLE 0x00U +#define USBD_EP0_SETUP 0x01U +#define USBD_EP0_DATA_IN 0x02U +#define USBD_EP0_DATA_OUT 0x03U +#define USBD_EP0_STATUS_IN 0x04U +#define USBD_EP0_STATUS_OUT 0x05U +#define USBD_EP0_STALL 0x06U + +#define USBD_EP_TYPE_CTRL 0x00U +#define USBD_EP_TYPE_ISOC 0x01U +#define USBD_EP_TYPE_BULK 0x02U +#define USBD_EP_TYPE_INTR 0x03U + +#ifdef USE_USBD_COMPOSITE +#define USBD_EP_IN 0x80U +#define USBD_EP_OUT 0x00U +#define USBD_FUNC_DESCRIPTOR_TYPE 0x24U +#define USBD_DESC_SUBTYPE_ACM 0x0FU +#define USBD_DESC_ECM_BCD_LOW 0x00U +#define USBD_DESC_ECM_BCD_HIGH 0x10U +#endif /* USE_USBD_COMPOSITE */ +/** + * @} + */ + + +/** @defgroup USBD_DEF_Exported_TypesDefinitions + * @{ + */ + +typedef struct usb_setup_req +{ + uint8_t bmRequest; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; +} USBD_SetupReqTypedef; + +typedef struct +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t wTotalLength; + uint8_t bNumInterfaces; + uint8_t bConfigurationValue; + uint8_t iConfiguration; + uint8_t bmAttributes; + uint8_t bMaxPower; +} __PACKED USBD_ConfigDescTypeDef; + +typedef struct +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t wTotalLength; + uint8_t bNumDeviceCaps; +} USBD_BosDescTypeDef; + +typedef struct +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bEndpointAddress; + uint8_t bmAttributes; + uint16_t wMaxPacketSize; + uint8_t bInterval; +} __PACKED USBD_EpDescTypeDef; + +typedef struct +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; +} USBD_DescHeaderTypeDef; + +struct _USBD_HandleTypeDef; + +typedef struct _Device_cb +{ + uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx); + uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx); + /* Control Endpoints*/ + uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); + uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev); + uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev); + /* Class Specific Endpoints*/ + uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum); + uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum); + uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev); + uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum); + uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum); + + uint8_t *(*GetHSConfigDescriptor)(uint16_t *length); + uint8_t *(*GetFSConfigDescriptor)(uint16_t *length); + uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length); + uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length); +#if (USBD_SUPPORT_USER_STRING_DESC == 1U) + uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length); +#endif /* USBD_SUPPORT_USER_STRING_DESC */ + +} USBD_ClassTypeDef; + +/* Following USB Device Speed */ +typedef enum +{ + USBD_SPEED_HIGH = 0U, + USBD_SPEED_FULL = 1U, + USBD_SPEED_LOW = 2U, +} USBD_SpeedTypeDef; + +/* Following USB Device status */ +typedef enum +{ + USBD_OK = 0U, + USBD_BUSY, + USBD_EMEM, + USBD_FAIL, +} USBD_StatusTypeDef; + +/* USB Device descriptors structure */ +typedef struct +{ + uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); + uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); + uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); + uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); + uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); + uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); + uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); +#if (USBD_CLASS_USER_STRING_DESC == 1) + uint8_t *(*GetUserStrDescriptor)(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length); +#endif /* USBD_CLASS_USER_STRING_DESC */ +#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1)) + uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length); +#endif /* (USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1) */ +} USBD_DescriptorsTypeDef; + +/* USB Device handle structure */ +typedef struct +{ + uint32_t total_length; + uint32_t rem_length; + uint32_t bInterval; + uint16_t maxpacket; + uint8_t status; + uint8_t is_used; + uint8_t *pbuffer; +} USBD_EndpointTypeDef; + +#ifdef USE_USBD_COMPOSITE +typedef enum +{ + CLASS_TYPE_NONE = 0, + CLASS_TYPE_HID = 1, + CLASS_TYPE_CDC = 2, + CLASS_TYPE_MSC = 3, + CLASS_TYPE_DFU = 4, + CLASS_TYPE_CHID = 5, + CLASS_TYPE_AUDIO = 6, + CLASS_TYPE_ECM = 7, + CLASS_TYPE_RNDIS = 8, + CLASS_TYPE_MTP = 9, + CLASS_TYPE_VIDEO = 10, + CLASS_TYPE_PRINTER = 11, + CLASS_TYPE_CCID = 12, +} USBD_CompositeClassTypeDef; + + +/* USB Device handle structure */ +typedef struct +{ + uint8_t add; + uint8_t type; + uint8_t size; + uint8_t is_used; +} USBD_EPTypeDef; + +/* USB Device handle structure */ +typedef struct +{ + USBD_CompositeClassTypeDef ClassType; + uint32_t ClassId; + uint32_t Active; + uint32_t NumEps; + USBD_EPTypeDef Eps[USBD_MAX_CLASS_ENDPOINTS]; + uint8_t *EpAdd; + uint32_t NumIf; + uint8_t Ifs[USBD_MAX_CLASS_INTERFACES]; + uint32_t CurrPcktSze; +} USBD_CompositeElementTypeDef; +#endif /* USE_USBD_COMPOSITE */ + +/* USB Device handle structure */ +typedef struct _USBD_HandleTypeDef +{ + uint8_t id; + uint32_t dev_config; + uint32_t dev_default_config; + uint32_t dev_config_status; + USBD_SpeedTypeDef dev_speed; + USBD_EndpointTypeDef ep_in[16]; + USBD_EndpointTypeDef ep_out[16]; + __IO uint32_t ep0_state; + uint32_t ep0_data_len; + __IO uint8_t dev_state; + __IO uint8_t dev_old_state; + uint8_t dev_address; + uint8_t dev_connection_status; + uint8_t dev_test_mode; + uint32_t dev_remote_wakeup; + uint8_t ConfIdx; + + USBD_SetupReqTypedef request; + USBD_DescriptorsTypeDef *pDesc; + USBD_ClassTypeDef *pClass[USBD_MAX_SUPPORTED_CLASS]; + void *pClassData; + void *pClassDataCmsit[USBD_MAX_SUPPORTED_CLASS]; + void *pUserData[USBD_MAX_SUPPORTED_CLASS]; + void *pData; + void *pBosDesc; + void *pConfDesc; + uint32_t classId; + uint32_t NumClasses; +#ifdef USE_USBD_COMPOSITE + USBD_CompositeElementTypeDef tclasslist[USBD_MAX_SUPPORTED_CLASS]; +#endif /* USE_USBD_COMPOSITE */ +#if (USBD_USER_REGISTER_CALLBACK == 1U) + void (* DevStateCallback)(uint8_t dev_state, uint8_t cfgidx); /*!< User Notification callback */ +#endif /* USBD_USER_REGISTER_CALLBACK */ +} USBD_HandleTypeDef; + +#if (USBD_USER_REGISTER_CALLBACK == 1U) +typedef void (*USBD_DevStateCallbackTypeDef)(uint8_t dev_state, uint8_t cfgidx); /*!< pointer to User callback function */ +#endif /* USBD_USER_REGISTER_CALLBACK */ + +/* USB Device endpoint direction */ +typedef enum +{ + OUT = 0x00, + IN = 0x80, +} USBD_EPDirectionTypeDef; + +typedef enum +{ + NETWORK_CONNECTION = 0x00, + RESPONSE_AVAILABLE = 0x01, + CONNECTION_SPEED_CHANGE = 0x2A +} USBD_CDC_NotifCodeTypeDef; +/** + * @} + */ + + + +/** @defgroup USBD_DEF_Exported_Macros + * @{ + */ +__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr) +{ + uint16_t _SwapVal; + uint16_t _Byte1; + uint16_t _Byte2; + uint8_t *_pbuff = addr; + + _Byte1 = *(uint8_t *)_pbuff; + _pbuff++; + _Byte2 = *(uint8_t *)_pbuff; + + _SwapVal = (_Byte2 << 8) | _Byte1; + + return _SwapVal; +} + +#ifndef LOBYTE +#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU)) +#endif /* LOBYTE */ + +#ifndef HIBYTE +#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U)) +#endif /* HIBYTE */ + +#ifndef MIN +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif /* MIN */ + +#ifndef MAX +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif /* MAX */ + +#if defined ( __GNUC__ ) +#ifndef __weak +#define __weak __attribute__((weak)) +#endif /* __weak */ +#ifndef __packed +#define __packed __attribute__((__packed__)) +#endif /* __packed */ +#endif /* __GNUC__ */ + + +/* In HS mode and when the DMA is used, all variables and data structures dealing + with the DMA during the transaction process should be 4-bytes aligned */ + +#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ +#ifndef __ALIGN_END +#define __ALIGN_END __attribute__ ((aligned (4U))) +#endif /* __ALIGN_END */ +#ifndef __ALIGN_BEGIN +#define __ALIGN_BEGIN +#endif /* __ALIGN_BEGIN */ +#else +#ifndef __ALIGN_END +#define __ALIGN_END +#endif /* __ALIGN_END */ +#ifndef __ALIGN_BEGIN +#if defined (__CC_ARM) /* ARM Compiler */ +#define __ALIGN_BEGIN __align(4U) +#elif defined (__ICCARM__) /* IAR Compiler */ +#define __ALIGN_BEGIN +#endif /* __CC_ARM */ +#endif /* __ALIGN_BEGIN */ +#endif /* __GNUC__ */ + + +/** + * @} + */ + +/** @defgroup USBD_DEF_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_DEF_Exported_FunctionsPrototype + * @{ + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_DEF_H */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h new file mode 100644 index 00000000..15197b92 --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h @@ -0,0 +1,113 @@ +/** + ****************************************************************************** + * @file usbd_ioreq.h + * @author MCD Application Team + * @brief Header file for the usbd_ioreq.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_IOREQ_H +#define __USBD_IOREQ_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" +#include "usbd_core.h" + +/** @addtogroup STM32_USB_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_IOREQ + * @brief header file for the usbd_ioreq.c file + * @{ + */ + +/** @defgroup USBD_IOREQ_Exported_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Exported_Types + * @{ + */ + + +/** + * @} + */ + + + +/** @defgroup USBD_IOREQ_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_IOREQ_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype + * @{ + */ + +USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len); + +USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len); + +USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len); + +USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len); + +USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev); +USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev); + +uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_IOREQ_H */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c new file mode 100644 index 00000000..bcf571e5 --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c @@ -0,0 +1,1221 @@ +/** + ****************************************************************************** + * @file usbd_core.c + * @author MCD Application Team + * @brief This file provides all the USBD core functions. + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_core.h" + +#ifdef USE_USBD_COMPOSITE +#include "usbd_composite_builder.h" +#endif /* USE_USBD_COMPOSITE */ + +/** @addtogroup STM32_USBD_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_CORE + * @brief usbd core module + * @{ + */ + +/** @defgroup USBD_CORE_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_CORE_Private_Defines + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_CORE_Private_Macros + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_CORE_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CORE_Private_Variables + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_CORE_Private_Functions + * @{ + */ + +/** + * @brief USBD_Init + * Initialize the device stack and load the class driver + * @param pdev: device instance + * @param pdesc: Descriptor structure address + * @param id: Low level core index + * @retval status: USBD Status + */ +USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, + USBD_DescriptorsTypeDef *pdesc, uint8_t id) +{ + USBD_StatusTypeDef ret; + + /* Check whether the USB Host handle is valid */ + if (pdev == NULL) + { +#if (USBD_DEBUG_LEVEL > 1U) + USBD_ErrLog("Invalid Device handle"); +#endif /* (USBD_DEBUG_LEVEL > 1U) */ + return USBD_FAIL; + } + +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Unlink previous class*/ + pdev->pClass[i] = NULL; + pdev->pUserData[i] = NULL; + + /* Set class as inactive */ + pdev->tclasslist[i].Active = 0; + pdev->NumClasses = 0; + pdev->classId = 0; + } +#else + /* Unlink previous class*/ + pdev->pClass[0] = NULL; + pdev->pUserData[0] = NULL; +#endif /* USE_USBD_COMPOSITE */ + + pdev->pConfDesc = NULL; + + /* Assign USBD Descriptors */ + if (pdesc != NULL) + { + pdev->pDesc = pdesc; + } + + /* Set Device initial State */ + pdev->dev_state = USBD_STATE_DEFAULT; + pdev->id = id; + + /* Initialize low level driver */ + ret = USBD_LL_Init(pdev); + + return ret; +} + +/** + * @brief USBD_DeInit + * De-Initialize the device library + * @param pdev: device instance + * @retval status: USBD Status + */ +USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev) +{ + USBD_StatusTypeDef ret; + + /* Disconnect the USB Device */ + (void)USBD_LL_Stop(pdev); + + /* Set Default State */ + pdev->dev_state = USBD_STATE_DEFAULT; + +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + pdev->classId = i; + /* Free Class Resources */ + pdev->pClass[i]->DeInit(pdev, (uint8_t)pdev->dev_config); + } + } + } +#else + /* Free Class Resources */ + if (pdev->pClass[0] != NULL) + { + pdev->pClass[0]->DeInit(pdev, (uint8_t)pdev->dev_config); + } + + pdev->pUserData[0] = NULL; + +#endif /* USE_USBD_COMPOSITE */ + + /* Free Device descriptors resources */ + pdev->pDesc = NULL; + pdev->pConfDesc = NULL; + + /* DeInitialize low level driver */ + ret = USBD_LL_DeInit(pdev); + + return ret; +} + +/** + * @brief USBD_RegisterClass + * Link class driver to Device Core. + * @param pdev: Device Handle + * @param pclass: Class handle + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass) +{ + uint16_t len = 0U; + + if (pclass == NULL) + { +#if (USBD_DEBUG_LEVEL > 1U) + USBD_ErrLog("Invalid Class handle"); +#endif /* (USBD_DEBUG_LEVEL > 1U) */ + return USBD_FAIL; + } + + /* link the class to the USB Device handle */ + pdev->pClass[0] = pclass; + + /* Get Device Configuration Descriptor */ +#ifdef USE_USB_HS + if (pdev->pClass[pdev->classId]->GetHSConfigDescriptor != NULL) + { + pdev->pConfDesc = (void *)pdev->pClass[pdev->classId]->GetHSConfigDescriptor(&len); + } +#else /* Default USE_USB_FS */ + if (pdev->pClass[pdev->classId]->GetFSConfigDescriptor != NULL) + { + pdev->pConfDesc = (void *)pdev->pClass[pdev->classId]->GetFSConfigDescriptor(&len); + } +#endif /* USE_USB_FS */ + + /* Increment the NumClasses */ + pdev->NumClasses++; + + return USBD_OK; +} + +#ifdef USE_USBD_COMPOSITE +/** + * @brief USBD_RegisterClassComposite + * Link class driver to Device Core. + * @param pdev : Device Handle + * @param pclass: Class handle + * @param classtype: Class type + * @param EpAddr: Endpoint Address handle + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_RegisterClassComposite(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass, + USBD_CompositeClassTypeDef classtype, uint8_t *EpAddr) +{ + USBD_StatusTypeDef ret = USBD_OK; + uint16_t len = 0U; + + if ((pdev->classId < USBD_MAX_SUPPORTED_CLASS) && (pdev->NumClasses < USBD_MAX_SUPPORTED_CLASS)) + { + if ((uint32_t)pclass != 0U) + { + /* Link the class to the USB Device handle */ + pdev->pClass[pdev->classId] = pclass; + ret = USBD_OK; + + pdev->tclasslist[pdev->classId].EpAdd = EpAddr; + + /* Call the composite class builder */ + (void)USBD_CMPSIT_AddClass(pdev, pclass, classtype, 0); + + /* Increment the ClassId for the next occurrence */ + pdev->classId ++; + pdev->NumClasses ++; + } + else + { +#if (USBD_DEBUG_LEVEL > 1U) + USBD_ErrLog("Invalid Class handle"); +#endif /* (USBD_DEBUG_LEVEL > 1U) */ + ret = USBD_FAIL; + } + } + + if (ret == USBD_OK) + { + /* Get Device Configuration Descriptor */ +#ifdef USE_USB_HS + pdev->pConfDesc = USBD_CMPSIT.GetHSConfigDescriptor(&len); +#else /* Default USE_USB_FS */ + pdev->pConfDesc = USBD_CMPSIT.GetFSConfigDescriptor(&len); +#endif /* USE_USB_FS */ + } + + return ret; +} + +/** + * @brief USBD_UnRegisterClassComposite + * UnLink all composite class drivers from Device Core. + * @param pdev: Device Handle + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_UnRegisterClassComposite(USBD_HandleTypeDef *pdev) +{ + USBD_StatusTypeDef ret = USBD_OK; + uint8_t idx1; + uint8_t idx2; + + /* Unroll all activated classes */ + for (idx1 = 0; idx1 < pdev->NumClasses; idx1++) + { + /* Check if the class correspond to the requested type and if it is active */ + if (pdev->tclasslist[idx1].Active == 1U) + { + /* Set the new class ID */ + pdev->classId = idx1; + + /* Free resources used by the selected class */ + if (pdev->pClass[pdev->classId] != NULL) + { + /* Free Class Resources */ + if (pdev->pClass[pdev->classId]->DeInit(pdev, (uint8_t)pdev->dev_config) != 0U) + { +#if (USBD_DEBUG_LEVEL > 1U) + USBD_ErrLog("Class DeInit didn't succeed!, can't unregister selected class"); +#endif /* (USBD_DEBUG_LEVEL > 1U) */ + + ret = USBD_FAIL; + } + } + + /* Free the class pointer */ + pdev->pClass[pdev->classId] = NULL; + + /* Free the class location in classes table and reset its parameters to zero */ + pdev->tclasslist[pdev->classId].ClassType = CLASS_TYPE_NONE; + pdev->tclasslist[pdev->classId].ClassId = 0U; + pdev->tclasslist[pdev->classId].Active = 0U; + pdev->tclasslist[pdev->classId].NumEps = 0U; + pdev->tclasslist[pdev->classId].NumIf = 0U; + pdev->tclasslist[pdev->classId].CurrPcktSze = 0U; + + for (idx2 = 0U; idx2 < USBD_MAX_CLASS_ENDPOINTS; idx2++) + { + pdev->tclasslist[pdev->classId].Eps[idx2].add = 0U; + pdev->tclasslist[pdev->classId].Eps[idx2].type = 0U; + pdev->tclasslist[pdev->classId].Eps[idx2].size = 0U; + pdev->tclasslist[pdev->classId].Eps[idx2].is_used = 0U; + } + + for (idx2 = 0U; idx2 < USBD_MAX_CLASS_INTERFACES; idx2++) + { + pdev->tclasslist[pdev->classId].Ifs[idx2] = 0U; + } + } + } + + /* Reset the configuration descriptor */ + (void)USBD_CMPST_ClearConfDesc(pdev); + + /* Reset the class ID and number of classes */ + pdev->classId = 0U; + pdev->NumClasses = 0U; + + return ret; +} +#endif /* USE_USBD_COMPOSITE */ + +#if (USBD_USER_REGISTER_CALLBACK == 1U) +/** + * @brief USBD_RegisterDevStateCallback + * @param pdev : Device Handle + * @param pUserCallback: User Callback + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_RegisterDevStateCallback(USBD_HandleTypeDef *pdev, USBD_DevStateCallbackTypeDef pUserCallback) +{ + pdev->DevStateCallback = pUserCallback; + + return USBD_OK; +} +#endif /* USBD_USER_REGISTER_CALLBACK */ + +/** + * @brief USBD_Start + * Start the USB Device Core. + * @param pdev: Device Handle + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev) +{ +#ifdef USE_USBD_COMPOSITE + pdev->classId = 0U; +#endif /* USE_USBD_COMPOSITE */ + + /* Start the low level driver */ + return USBD_LL_Start(pdev); +} + +/** + * @brief USBD_Stop + * Stop the USB Device Core. + * @param pdev: Device Handle + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev) +{ + /* Disconnect USB Device */ + (void)USBD_LL_Stop(pdev); + + /* Free Class Resources */ +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0U; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + pdev->classId = i; + /* Free Class Resources */ + (void)pdev->pClass[i]->DeInit(pdev, (uint8_t)pdev->dev_config); + } + } + } + + /* Reset the class ID */ + pdev->classId = 0U; +#else + if (pdev->pClass[0] != NULL) + { + (void)pdev->pClass[0]->DeInit(pdev, (uint8_t)pdev->dev_config); + } +#endif /* USE_USBD_COMPOSITE */ + + return USBD_OK; +} + +/** + * @brief USBD_RunTestMode + * Launch test mode process + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev) +{ +#ifdef USBD_HS_TESTMODE_ENABLE + USBD_StatusTypeDef ret; + + /* Run USB HS test mode */ + ret = USBD_LL_SetTestMode(pdev, pdev->dev_test_mode); + + return ret; +#else + /* Prevent unused argument compilation warning */ + UNUSED(pdev); + + return USBD_OK; +#endif /* USBD_HS_TESTMODE_ENABLE */ +} + +/** + * @brief USBD_SetClassConfig + * Configure device and start the interface + * @param pdev: device instance + * @param cfgidx: configuration index + * @retval status + */ + +USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) +{ + USBD_StatusTypeDef ret = USBD_OK; + +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0U; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + pdev->classId = i; + /* Set configuration and Start the Class*/ + if (pdev->pClass[i]->Init(pdev, cfgidx) != 0U) + { + ret = USBD_FAIL; + } + } + } + } +#else + if (pdev->pClass[0] != NULL) + { + /* Set configuration and Start the Class */ + ret = (USBD_StatusTypeDef)pdev->pClass[0]->Init(pdev, cfgidx); + } +#endif /* USE_USBD_COMPOSITE */ + + return ret; +} + +/** + * @brief USBD_ClrClassConfig + * Clear current configuration + * @param pdev: device instance + * @param cfgidx: configuration index + * @retval status + */ +USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) +{ + USBD_StatusTypeDef ret = USBD_OK; + +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0U; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + pdev->classId = i; + /* Clear configuration and De-initialize the Class process */ + if (pdev->pClass[i]->DeInit(pdev, cfgidx) != 0U) + { + ret = USBD_FAIL; + } + } + } + } +#else + /* Clear configuration and De-initialize the Class process */ + if (pdev->pClass[0]->DeInit(pdev, cfgidx) != 0U) + { + ret = USBD_FAIL; + } +#endif /* USE_USBD_COMPOSITE */ + + return ret; +} + + +/** + * @brief USBD_LL_SetupStage + * Handle the setup stage + * @param pdev: device instance + * @param psetup: setup packet buffer pointer + * @retval status + */ +USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup) +{ + USBD_StatusTypeDef ret; + + USBD_ParseSetupRequest(&pdev->request, psetup); + + pdev->ep0_state = USBD_EP0_SETUP; + + pdev->ep0_data_len = pdev->request.wLength; + + switch (pdev->request.bmRequest & 0x1FU) + { + case USB_REQ_RECIPIENT_DEVICE: + ret = USBD_StdDevReq(pdev, &pdev->request); + break; + + case USB_REQ_RECIPIENT_INTERFACE: + ret = USBD_StdItfReq(pdev, &pdev->request); + break; + + case USB_REQ_RECIPIENT_ENDPOINT: + ret = USBD_StdEPReq(pdev, &pdev->request); + break; + + default: + ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U)); + break; + } + + return ret; +} + +/** + * @brief USBD_LL_DataOutStage + * Handle data OUT stage + * @param pdev: device instance + * @param epnum: endpoint index + * @param pdata: data pointer + * @retval status + */ +USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, + uint8_t epnum, uint8_t *pdata) +{ + USBD_EndpointTypeDef *pep; + USBD_StatusTypeDef ret = USBD_OK; + uint8_t idx; + + UNUSED(pdata); + + if (epnum == 0U) + { + pep = &pdev->ep_out[0]; + + if (pdev->ep0_state == USBD_EP0_DATA_OUT) + { + if (pep->rem_length > pep->maxpacket) + { + pep->rem_length -= pep->maxpacket; + pep->pbuffer += pep->maxpacket; + + (void)USBD_CtlContinueRx(pdev, pep->pbuffer, MAX(pep->rem_length, pep->maxpacket)); + } + else + { + /* Find the class ID relative to the current request */ + switch (pdev->request.bmRequest & 0x1FU) + { + case USB_REQ_RECIPIENT_DEVICE: + /* Device requests must be managed by the first instantiated class + (or duplicated by all classes for simplicity) */ + idx = 0U; + break; + + case USB_REQ_RECIPIENT_INTERFACE: + idx = USBD_CoreFindIF(pdev, LOBYTE(pdev->request.wIndex)); + break; + + case USB_REQ_RECIPIENT_ENDPOINT: + idx = USBD_CoreFindEP(pdev, LOBYTE(pdev->request.wIndex)); + break; + + default: + /* Back to the first class in case of doubt */ + idx = 0U; + break; + } + + if (idx < USBD_MAX_SUPPORTED_CLASS) + { + /* Setup the class ID and route the request to the relative class function */ + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (pdev->pClass[idx]->EP0_RxReady != NULL) + { + pdev->classId = idx; + pdev->pClass[idx]->EP0_RxReady(pdev); + } + } + } + + (void)USBD_CtlSendStatus(pdev); + } + } + } + else + { + /* Get the class index relative to this interface */ + idx = USBD_CoreFindEP(pdev, (epnum & 0x7FU)); + + if (((uint16_t)idx != 0xFFU) && (idx < USBD_MAX_SUPPORTED_CLASS)) + { + /* Call the class data out function to manage the request */ + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (pdev->pClass[idx]->DataOut != NULL) + { + pdev->classId = idx; + ret = (USBD_StatusTypeDef)pdev->pClass[idx]->DataOut(pdev, epnum); + } + } + if (ret != USBD_OK) + { + return ret; + } + } + } + + return USBD_OK; +} + +/** + * @brief USBD_LL_DataInStage + * Handle data in stage + * @param pdev: device instance + * @param epnum: endpoint index + * @param pdata: data pointer + * @retval status + */ +USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, + uint8_t epnum, uint8_t *pdata) +{ + USBD_EndpointTypeDef *pep; + USBD_StatusTypeDef ret; + uint8_t idx; + + UNUSED(pdata); + + if (epnum == 0U) + { + pep = &pdev->ep_in[0]; + + if (pdev->ep0_state == USBD_EP0_DATA_IN) + { + if (pep->rem_length > pep->maxpacket) + { + pep->rem_length -= pep->maxpacket; + pep->pbuffer += pep->maxpacket; + + (void)USBD_CtlContinueSendData(pdev, pep->pbuffer, pep->rem_length); + + /* Prepare endpoint for premature end of transfer */ + (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U); + } + else + { + /* last packet is MPS multiple, so send ZLP packet */ + if ((pep->maxpacket == pep->rem_length) && + (pep->total_length >= pep->maxpacket) && + (pep->total_length < pdev->ep0_data_len)) + { + (void)USBD_CtlContinueSendData(pdev, NULL, 0U); + pdev->ep0_data_len = 0U; + + /* Prepare endpoint for premature end of transfer */ + (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U); + } + else + { + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (pdev->pClass[0]->EP0_TxSent != NULL) + { + pdev->classId = 0U; + pdev->pClass[0]->EP0_TxSent(pdev); + } + } + (void)USBD_LL_StallEP(pdev, 0x80U); + (void)USBD_CtlReceiveStatus(pdev); + } + } + } + + if (pdev->dev_test_mode != 0U) + { + (void)USBD_RunTestMode(pdev); + pdev->dev_test_mode = 0U; + } + } + else + { + /* Get the class index relative to this interface */ + idx = USBD_CoreFindEP(pdev, ((uint8_t)epnum | 0x80U)); + + if (((uint16_t)idx != 0xFFU) && (idx < USBD_MAX_SUPPORTED_CLASS)) + { + /* Call the class data out function to manage the request */ + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (pdev->pClass[idx]->DataIn != NULL) + { + pdev->classId = idx; + ret = (USBD_StatusTypeDef)pdev->pClass[idx]->DataIn(pdev, epnum); + + if (ret != USBD_OK) + { + return ret; + } + } + } + } + } + + return USBD_OK; +} + +/** + * @brief USBD_LL_Reset + * Handle Reset event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev) +{ + USBD_StatusTypeDef ret = USBD_OK; + + /* Upon Reset call user call back */ + pdev->dev_state = USBD_STATE_DEFAULT; + pdev->ep0_state = USBD_EP0_IDLE; + pdev->dev_config = 0U; + pdev->dev_remote_wakeup = 0U; + pdev->dev_test_mode = 0U; + +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0U; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + pdev->classId = i; + /* Clear configuration and De-initialize the Class process*/ + + if (pdev->pClass[i]->DeInit != NULL) + { + if (pdev->pClass[i]->DeInit(pdev, (uint8_t)pdev->dev_config) != USBD_OK) + { + ret = USBD_FAIL; + } + } + } + } + } +#else + + if (pdev->pClass[0] != NULL) + { + if (pdev->pClass[0]->DeInit != NULL) + { + if (pdev->pClass[0]->DeInit(pdev, (uint8_t)pdev->dev_config) != USBD_OK) + { + ret = USBD_FAIL; + } + } + } +#endif /* USE_USBD_COMPOSITE */ + + /* Open EP0 OUT */ + (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE); + pdev->ep_out[0x00U & 0xFU].is_used = 1U; + + pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE; + + /* Open EP0 IN */ + (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE); + pdev->ep_in[0x80U & 0xFU].is_used = 1U; + + pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE; + + return ret; +} + +/** + * @brief USBD_LL_SetSpeed + * Handle Reset event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, + USBD_SpeedTypeDef speed) +{ + pdev->dev_speed = speed; + + return USBD_OK; +} + +/** + * @brief USBD_LL_Suspend + * Handle Suspend event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev) +{ + if (pdev->dev_state != USBD_STATE_SUSPENDED) + { + pdev->dev_old_state = pdev->dev_state; + } + + pdev->dev_state = USBD_STATE_SUSPENDED; + + return USBD_OK; +} + +/** + * @brief USBD_LL_Resume + * Handle Resume event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev) +{ + if (pdev->dev_state == USBD_STATE_SUSPENDED) + { + pdev->dev_state = pdev->dev_old_state; + } + + return USBD_OK; +} + +/** + * @brief USBD_LL_SOF + * Handle SOF event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev) +{ + /* The SOF event can be distributed for all classes that support it */ + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + if (pdev->pClass[i]->SOF != NULL) + { + pdev->classId = i; + (void)pdev->pClass[i]->SOF(pdev); + } + } + } + } +#else + if (pdev->pClass[0] != NULL) + { + if (pdev->pClass[0]->SOF != NULL) + { + (void)pdev->pClass[0]->SOF(pdev); + } + } +#endif /* USE_USBD_COMPOSITE */ + } + + return USBD_OK; +} + +/** + * @brief USBD_LL_IsoINIncomplete + * Handle iso in incomplete event + * @param pdev: device instance + * @param epnum: Endpoint number + * @retval status + */ +USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, + uint8_t epnum) +{ + if (pdev->pClass[pdev->classId] == NULL) + { + return USBD_FAIL; + } + + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (pdev->pClass[pdev->classId]->IsoINIncomplete != NULL) + { + (void)pdev->pClass[pdev->classId]->IsoINIncomplete(pdev, epnum); + } + } + + return USBD_OK; +} + +/** + * @brief USBD_LL_IsoOUTIncomplete + * Handle iso out incomplete event + * @param pdev: device instance + * @param epnum: Endpoint number + * @retval status + */ +USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, + uint8_t epnum) +{ + if (pdev->pClass[pdev->classId] == NULL) + { + return USBD_FAIL; + } + + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + if (pdev->pClass[pdev->classId]->IsoOUTIncomplete != NULL) + { + (void)pdev->pClass[pdev->classId]->IsoOUTIncomplete(pdev, epnum); + } + } + + return USBD_OK; +} + +/** + * @brief USBD_LL_DevConnected + * Handle device connection event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev) +{ + /* Prevent unused argument compilation warning */ + UNUSED(pdev); + + return USBD_OK; +} + +/** + * @brief USBD_LL_DevDisconnected + * Handle device disconnection event + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev) +{ + USBD_StatusTypeDef ret = USBD_OK; + + /* Free Class Resources */ + pdev->dev_state = USBD_STATE_DEFAULT; + +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + if (pdev->pClass[i] != NULL) + { + pdev->classId = i; + /* Clear configuration and De-initialize the Class process*/ + if (pdev->pClass[i]->DeInit(pdev, (uint8_t)pdev->dev_config) != 0U) + { + ret = USBD_FAIL; + } + } + } + } +#else + if (pdev->pClass[0] != NULL) + { + if (pdev->pClass[0]->DeInit(pdev, (uint8_t)pdev->dev_config) != 0U) + { + ret = USBD_FAIL; + } + } +#endif /* USE_USBD_COMPOSITE */ + + return ret; +} + +/** + * @brief USBD_CoreFindIF + * return the class index relative to the selected interface + * @param pdev: device instance + * @param index : selected interface number + * @retval index of the class using the selected interface number. OxFF if no class found. + */ +uint8_t USBD_CoreFindIF(USBD_HandleTypeDef *pdev, uint8_t index) +{ +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0U; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + /* Parse all interfaces listed in the current class */ + for (uint32_t j = 0U; j < pdev->tclasslist[i].NumIf; j++) + { + /* Check if requested Interface matches the current class interface */ + if (pdev->tclasslist[i].Ifs[j] == index) + { + if (pdev->pClass[i]->Setup != NULL) + { + return (uint8_t)i; + } + } + } + } + } + + return 0xFFU; +#else + UNUSED(pdev); + UNUSED(index); + + return 0x00U; +#endif /* USE_USBD_COMPOSITE */ +} + +/** + * @brief USBD_CoreFindEP + * return the class index relative to the selected endpoint + * @param pdev: device instance + * @param index : selected endpoint number + * @retval index of the class using the selected endpoint number. 0xFF if no class found. + */ +uint8_t USBD_CoreFindEP(USBD_HandleTypeDef *pdev, uint8_t index) +{ +#ifdef USE_USBD_COMPOSITE + /* Parse the table of classes in use */ + for (uint32_t i = 0U; i < USBD_MAX_SUPPORTED_CLASS; i++) + { + /* Check if current class is in use */ + if ((pdev->tclasslist[i].Active) == 1U) + { + /* Parse all endpoints listed in the current class */ + for (uint32_t j = 0U; j < pdev->tclasslist[i].NumEps; j++) + { + /* Check if requested endpoint matches the current class endpoint */ + if (pdev->tclasslist[i].Eps[j].add == index) + { + if (pdev->pClass[i]->Setup != NULL) + { + return (uint8_t)i; + } + } + } + } + } + + return 0xFFU; +#else + UNUSED(pdev); + UNUSED(index); + + return 0x00U; +#endif /* USE_USBD_COMPOSITE */ +} + +#ifdef USE_USBD_COMPOSITE +/** + * @brief USBD_CoreGetEPAdd + * Get the endpoint address relative to a selected class + * @param pdev: device instance + * @param ep_dir: USBD_EP_IN or USBD_EP_OUT + * @param ep_type: USBD_EP_TYPE_CTRL, USBD_EP_TYPE_ISOC, USBD_EP_TYPE_BULK or USBD_EP_TYPE_INTR + * @param ClassId: The Class ID + * @retval Address of the selected endpoint or 0xFFU if no endpoint found. + */ +uint8_t USBD_CoreGetEPAdd(USBD_HandleTypeDef *pdev, uint8_t ep_dir, uint8_t ep_type, uint8_t ClassId) +{ + uint8_t idx; + + /* Find the EP address in the selected class table */ + for (idx = 0; idx < pdev->tclasslist[ClassId].NumEps; idx++) + { + if (((pdev->tclasslist[ClassId].Eps[idx].add & USBD_EP_IN) == ep_dir) && \ + (pdev->tclasslist[ClassId].Eps[idx].type == ep_type) && \ + (pdev->tclasslist[ClassId].Eps[idx].is_used != 0U)) + { + return (pdev->tclasslist[ClassId].Eps[idx].add); + } + } + + /* If reaching this point, then no endpoint was found */ + return 0xFFU; +} +#endif /* USE_USBD_COMPOSITE */ + +/** + * @brief USBD_GetEpDesc + * This function return the Endpoint descriptor + * @param pdev: device instance + * @param pConfDesc: pointer to Bos descriptor + * @param EpAddr: endpoint address + * @retval pointer to video endpoint descriptor + */ +void *USBD_GetEpDesc(uint8_t *pConfDesc, uint8_t EpAddr) +{ + USBD_DescHeaderTypeDef *pdesc = (USBD_DescHeaderTypeDef *)(void *)pConfDesc; + USBD_ConfigDescTypeDef *desc = (USBD_ConfigDescTypeDef *)(void *)pConfDesc; + USBD_EpDescTypeDef *pEpDesc = NULL; + uint16_t ptr; + + if (desc->wTotalLength > desc->bLength) + { + ptr = desc->bLength; + + while (ptr < desc->wTotalLength) + { + pdesc = USBD_GetNextDesc((uint8_t *)pdesc, &ptr); + + if (pdesc->bDescriptorType == USB_DESC_TYPE_ENDPOINT) + { + pEpDesc = (USBD_EpDescTypeDef *)(void *)pdesc; + + if (pEpDesc->bEndpointAddress == EpAddr) + { + break; + } + else + { + pEpDesc = NULL; + } + } + } + } + + return (void *)pEpDesc; +} + +/** + * @brief USBD_GetNextDesc + * This function return the next descriptor header + * @param buf: Buffer where the descriptor is available + * @param ptr: data pointer inside the descriptor + * @retval next header + */ +USBD_DescHeaderTypeDef *USBD_GetNextDesc(uint8_t *pbuf, uint16_t *ptr) +{ + USBD_DescHeaderTypeDef *pnext = (USBD_DescHeaderTypeDef *)(void *)pbuf; + + *ptr += pnext->bLength; + pnext = (USBD_DescHeaderTypeDef *)(void *)(pbuf + pnext->bLength); + + return (pnext); +} + +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c new file mode 100644 index 00000000..814b810c --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c @@ -0,0 +1,1058 @@ +/** + ****************************************************************************** + * @file usbd_req.c + * @author MCD Application Team + * @brief This file provides the standard USB requests following chapter 9. + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_ctlreq.h" +#include "usbd_ioreq.h" + +#ifdef USE_USBD_COMPOSITE +#include "usbd_composite_builder.h" +#endif /* USE_USBD_COMPOSITE */ + +/** @addtogroup STM32_USBD_STATE_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_REQ + * @brief USB standard requests module + * @{ + */ + +/** @defgroup USBD_REQ_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Defines + * @{ + */ +#ifndef USBD_MAX_STR_DESC_SIZ +#define USBD_MAX_STR_DESC_SIZ 64U +#endif /* USBD_MAX_STR_DESC_SIZ */ +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Macros + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Variables + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_FunctionPrototypes + * @{ + */ +static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); +static uint8_t USBD_GetLen(uint8_t *buf); + +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Functions + * @{ + */ + + +/** + * @brief USBD_StdDevReq + * Handle standard usb device requests + * @param pdev: device instance + * @param req: usb request + * @retval status + */ +USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + USBD_StatusTypeDef ret = USBD_OK; + + switch (req->bmRequest & USB_REQ_TYPE_MASK) + { + case USB_REQ_TYPE_CLASS: + case USB_REQ_TYPE_VENDOR: + ret = (USBD_StatusTypeDef)pdev->pClass[pdev->classId]->Setup(pdev, req); + break; + + case USB_REQ_TYPE_STANDARD: + switch (req->bRequest) + { + case USB_REQ_GET_DESCRIPTOR: + USBD_GetDescriptor(pdev, req); + break; + + case USB_REQ_SET_ADDRESS: + USBD_SetAddress(pdev, req); + break; + + case USB_REQ_SET_CONFIGURATION: + ret = USBD_SetConfig(pdev, req); + break; + + case USB_REQ_GET_CONFIGURATION: + USBD_GetConfig(pdev, req); + break; + + case USB_REQ_GET_STATUS: + USBD_GetStatus(pdev, req); + break; + + case USB_REQ_SET_FEATURE: + USBD_SetFeature(pdev, req); + break; + + case USB_REQ_CLEAR_FEATURE: + USBD_ClrFeature(pdev, req); + break; + + default: + USBD_CtlError(pdev, req); + break; + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } + + return ret; +} + +/** + * @brief USBD_StdItfReq + * Handle standard usb interface requests + * @param pdev: device instance + * @param req: usb request + * @retval status + */ +USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + USBD_StatusTypeDef ret = USBD_OK; + uint8_t idx; + + switch (req->bmRequest & USB_REQ_TYPE_MASK) + { + case USB_REQ_TYPE_CLASS: + case USB_REQ_TYPE_VENDOR: + case USB_REQ_TYPE_STANDARD: + switch (pdev->dev_state) + { + case USBD_STATE_DEFAULT: + case USBD_STATE_ADDRESSED: + case USBD_STATE_CONFIGURED: + + if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES) + { + /* Get the class index relative to this interface */ + idx = USBD_CoreFindIF(pdev, LOBYTE(req->wIndex)); + if (((uint8_t)idx != 0xFFU) && (idx < USBD_MAX_SUPPORTED_CLASS)) + { + /* Call the class data out function to manage the request */ + if (pdev->pClass[idx]->Setup != NULL) + { + pdev->classId = idx; + ret = (USBD_StatusTypeDef)(pdev->pClass[idx]->Setup(pdev, req)); + } + else + { + /* should never reach this condition */ + ret = USBD_FAIL; + } + } + else + { + /* No relative interface found */ + ret = USBD_FAIL; + } + + if ((req->wLength == 0U) && (ret == USBD_OK)) + { + (void)USBD_CtlSendStatus(pdev); + } + } + else + { + USBD_CtlError(pdev, req); + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } + + return ret; +} + +/** + * @brief USBD_StdEPReq + * Handle standard usb endpoint requests + * @param pdev: device instance + * @param req: usb request + * @retval status + */ +USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + USBD_EndpointTypeDef *pep; + uint8_t ep_addr; + uint8_t idx; + USBD_StatusTypeDef ret = USBD_OK; + + ep_addr = LOBYTE(req->wIndex); + + switch (req->bmRequest & USB_REQ_TYPE_MASK) + { + case USB_REQ_TYPE_CLASS: + case USB_REQ_TYPE_VENDOR: + /* Get the class index relative to this endpoint */ + idx = USBD_CoreFindEP(pdev, ep_addr); + if (((uint8_t)idx != 0xFFU) && (idx < USBD_MAX_SUPPORTED_CLASS)) + { + pdev->classId = idx; + /* Call the class data out function to manage the request */ + if (pdev->pClass[idx]->Setup != NULL) + { + ret = (USBD_StatusTypeDef)pdev->pClass[idx]->Setup(pdev, req); + } + } + break; + + case USB_REQ_TYPE_STANDARD: + switch (req->bRequest) + { + case USB_REQ_SET_FEATURE: + switch (pdev->dev_state) + { + case USBD_STATE_ADDRESSED: + if ((ep_addr != 0x00U) && (ep_addr != 0x80U)) + { + (void)USBD_LL_StallEP(pdev, ep_addr); + (void)USBD_LL_StallEP(pdev, 0x80U); + } + else + { + USBD_CtlError(pdev, req); + } + break; + + case USBD_STATE_CONFIGURED: + if (req->wValue == USB_FEATURE_EP_HALT) + { + if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U)) + { + (void)USBD_LL_StallEP(pdev, ep_addr); + } + } + (void)USBD_CtlSendStatus(pdev); + + break; + + default: + USBD_CtlError(pdev, req); + break; + } + break; + + case USB_REQ_CLEAR_FEATURE: + + switch (pdev->dev_state) + { + case USBD_STATE_ADDRESSED: + if ((ep_addr != 0x00U) && (ep_addr != 0x80U)) + { + (void)USBD_LL_StallEP(pdev, ep_addr); + (void)USBD_LL_StallEP(pdev, 0x80U); + } + else + { + USBD_CtlError(pdev, req); + } + break; + + case USBD_STATE_CONFIGURED: + if (req->wValue == USB_FEATURE_EP_HALT) + { + if ((ep_addr & 0x7FU) != 0x00U) + { + (void)USBD_LL_ClearStallEP(pdev, ep_addr); + } + (void)USBD_CtlSendStatus(pdev); + + /* Get the class index relative to this interface */ + idx = USBD_CoreFindEP(pdev, ep_addr); + if (((uint8_t)idx != 0xFFU) && (idx < USBD_MAX_SUPPORTED_CLASS)) + { + pdev->classId = idx; + /* Call the class data out function to manage the request */ + if (pdev->pClass[idx]->Setup != NULL) + { + ret = (USBD_StatusTypeDef)(pdev->pClass[idx]->Setup(pdev, req)); + } + } + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } + break; + + case USB_REQ_GET_STATUS: + switch (pdev->dev_state) + { + case USBD_STATE_ADDRESSED: + if ((ep_addr != 0x00U) && (ep_addr != 0x80U)) + { + USBD_CtlError(pdev, req); + break; + } + pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \ + &pdev->ep_out[ep_addr & 0x7FU]; + + pep->status = 0x0000U; + + (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U); + break; + + case USBD_STATE_CONFIGURED: + if ((ep_addr & 0x80U) == 0x80U) + { + if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U) + { + USBD_CtlError(pdev, req); + break; + } + } + else + { + if (pdev->ep_out[ep_addr & 0xFU].is_used == 0U) + { + USBD_CtlError(pdev, req); + break; + } + } + + pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \ + &pdev->ep_out[ep_addr & 0x7FU]; + + if ((ep_addr == 0x00U) || (ep_addr == 0x80U)) + { + pep->status = 0x0000U; + } + else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U) + { + pep->status = 0x0001U; + } + else + { + pep->status = 0x0000U; + } + + (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U); + break; + + default: + USBD_CtlError(pdev, req); + break; + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } + + return ret; +} + + +/** + * @brief USBD_GetDescriptor + * Handle Get Descriptor requests + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + uint16_t len = 0U; + uint8_t *pbuf = NULL; + uint8_t err = 0U; + + switch (req->wValue >> 8) + { +#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U)) + case USB_DESC_TYPE_BOS: + if (pdev->pDesc->GetBOSDescriptor != NULL) + { + pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; +#endif /* (USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U) */ + case USB_DESC_TYPE_DEVICE: + pbuf = pdev->pDesc->GetDeviceDescriptor(pdev->dev_speed, &len); + break; + + case USB_DESC_TYPE_CONFIGURATION: + if (pdev->dev_speed == USBD_SPEED_HIGH) + { +#ifdef USE_USBD_COMPOSITE + if ((uint8_t)(pdev->NumClasses) > 0U) + { + pbuf = (uint8_t *)USBD_CMPSIT.GetHSConfigDescriptor(&len); + } + else +#endif /* USE_USBD_COMPOSITE */ + { + pbuf = (uint8_t *)pdev->pClass[0]->GetHSConfigDescriptor(&len); + } + pbuf[1] = USB_DESC_TYPE_CONFIGURATION; + } + else + { +#ifdef USE_USBD_COMPOSITE + if ((uint8_t)(pdev->NumClasses) > 0U) + { + pbuf = (uint8_t *)USBD_CMPSIT.GetFSConfigDescriptor(&len); + } + else +#endif /* USE_USBD_COMPOSITE */ + { + pbuf = (uint8_t *)pdev->pClass[0]->GetFSConfigDescriptor(&len); + } + pbuf[1] = USB_DESC_TYPE_CONFIGURATION; + } + break; + + case USB_DESC_TYPE_STRING: + switch ((uint8_t)(req->wValue)) + { + case USBD_IDX_LANGID_STR: + if (pdev->pDesc->GetLangIDStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + case USBD_IDX_MFC_STR: + if (pdev->pDesc->GetManufacturerStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + case USBD_IDX_PRODUCT_STR: + if (pdev->pDesc->GetProductStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + case USBD_IDX_SERIAL_STR: + if (pdev->pDesc->GetSerialStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + case USBD_IDX_CONFIG_STR: + if (pdev->pDesc->GetConfigurationStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + case USBD_IDX_INTERFACE_STR: + if (pdev->pDesc->GetInterfaceStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + default: +#if (USBD_SUPPORT_USER_STRING_DESC == 1U) + pbuf = NULL; + + for (uint32_t idx = 0U; (idx < pdev->NumClasses); idx++) + { + if (pdev->pClass[idx]->GetUsrStrDescriptor != NULL) + { + pdev->classId = idx; + pbuf = pdev->pClass[idx]->GetUsrStrDescriptor(pdev, LOBYTE(req->wValue), &len); + + if (pbuf == NULL) /* This means that no class recognized the string index */ + { + continue; + } + else + { + break; + } + } + } +#endif /* USBD_SUPPORT_USER_STRING_DESC */ + +#if (USBD_CLASS_USER_STRING_DESC == 1U) + if (pdev->pDesc->GetUserStrDescriptor != NULL) + { + pbuf = pdev->pDesc->GetUserStrDescriptor(pdev->dev_speed, LOBYTE(req->wValue), &len); + } + else + { + USBD_CtlError(pdev, req); + err++; + } +#endif /* USBD_SUPPORT_USER_STRING_DESC */ + +#if ((USBD_CLASS_USER_STRING_DESC == 0U) && (USBD_SUPPORT_USER_STRING_DESC == 0U)) + USBD_CtlError(pdev, req); + err++; +#endif /* (USBD_CLASS_USER_STRING_DESC == 0U) && (USBD_SUPPORT_USER_STRING_DESC == 0U) */ + break; + } + break; + + case USB_DESC_TYPE_DEVICE_QUALIFIER: + if (pdev->dev_speed == USBD_SPEED_HIGH) + { +#ifdef USE_USBD_COMPOSITE + if ((uint8_t)(pdev->NumClasses) > 0U) + { + pbuf = (uint8_t *)USBD_CMPSIT.GetDeviceQualifierDescriptor(&len); + } + else +#endif /* USE_USBD_COMPOSITE */ + { + pbuf = (uint8_t *)pdev->pClass[0]->GetDeviceQualifierDescriptor(&len); + } + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION: + if (pdev->dev_speed == USBD_SPEED_HIGH) + { +#ifdef USE_USBD_COMPOSITE + if ((uint8_t)(pdev->NumClasses) > 0U) + { + pbuf = (uint8_t *)USBD_CMPSIT.GetOtherSpeedConfigDescriptor(&len); + } + else +#endif /* USE_USBD_COMPOSITE */ + { + pbuf = (uint8_t *)pdev->pClass[0]->GetOtherSpeedConfigDescriptor(&len); + } + pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION; + } + else + { + USBD_CtlError(pdev, req); + err++; + } + break; + + default: + USBD_CtlError(pdev, req); + err++; + break; + } + + if (err != 0U) + { + return; + } + + if (req->wLength != 0U) + { + if (len != 0U) + { + len = MIN(len, req->wLength); + (void)USBD_CtlSendData(pdev, pbuf, len); + } + else + { + USBD_CtlError(pdev, req); + } + } + else + { + (void)USBD_CtlSendStatus(pdev); + } +} + + +/** + * @brief USBD_SetAddress + * Set device address + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + uint8_t dev_addr; + + if ((req->wIndex == 0U) && (req->wLength == 0U) && (req->wValue < 128U)) + { + dev_addr = (uint8_t)(req->wValue) & 0x7FU; + + if (pdev->dev_state == USBD_STATE_CONFIGURED) + { + USBD_CtlError(pdev, req); + } + else + { + pdev->dev_address = dev_addr; + (void)USBD_LL_SetUSBAddress(pdev, dev_addr); + (void)USBD_CtlSendStatus(pdev); + + if (dev_addr != 0U) + { + pdev->dev_state = USBD_STATE_ADDRESSED; + } + else + { + pdev->dev_state = USBD_STATE_DEFAULT; + } + } + } + else + { + USBD_CtlError(pdev, req); + } +} + +/** + * @brief USBD_SetConfig + * Handle Set device configuration request + * @param pdev: device instance + * @param req: usb request + * @retval status + */ +static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + USBD_StatusTypeDef ret = USBD_OK; + static uint8_t cfgidx; + + cfgidx = (uint8_t)(req->wValue); + + if (cfgidx > USBD_MAX_NUM_CONFIGURATION) + { + USBD_CtlError(pdev, req); + return USBD_FAIL; + } + + switch (pdev->dev_state) + { + case USBD_STATE_ADDRESSED: + if (cfgidx != 0U) + { + pdev->dev_config = cfgidx; + + ret = USBD_SetClassConfig(pdev, cfgidx); + + if (ret != USBD_OK) + { + USBD_CtlError(pdev, req); + pdev->dev_state = USBD_STATE_ADDRESSED; + } + else + { + (void)USBD_CtlSendStatus(pdev); + pdev->dev_state = USBD_STATE_CONFIGURED; + +#if (USBD_USER_REGISTER_CALLBACK == 1U) + if (pdev->DevStateCallback != NULL) + { + pdev->DevStateCallback(USBD_STATE_CONFIGURED, cfgidx); + } +#endif /* USBD_USER_REGISTER_CALLBACK */ + } + } + else + { + (void)USBD_CtlSendStatus(pdev); + } + break; + + case USBD_STATE_CONFIGURED: + if (cfgidx == 0U) + { + pdev->dev_state = USBD_STATE_ADDRESSED; + pdev->dev_config = cfgidx; + (void)USBD_ClrClassConfig(pdev, cfgidx); + (void)USBD_CtlSendStatus(pdev); + } + else if (cfgidx != pdev->dev_config) + { + /* Clear old configuration */ + (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config); + + /* set new configuration */ + pdev->dev_config = cfgidx; + + ret = USBD_SetClassConfig(pdev, cfgidx); + + if (ret != USBD_OK) + { + USBD_CtlError(pdev, req); + (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config); + pdev->dev_state = USBD_STATE_ADDRESSED; + } + else + { + (void)USBD_CtlSendStatus(pdev); + } + } + else + { + (void)USBD_CtlSendStatus(pdev); + } + break; + + default: + USBD_CtlError(pdev, req); + (void)USBD_ClrClassConfig(pdev, cfgidx); + ret = USBD_FAIL; + break; + } + + return ret; +} + +/** + * @brief USBD_GetConfig + * Handle Get device configuration request + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + if (req->wLength != 1U) + { + USBD_CtlError(pdev, req); + } + else + { + switch (pdev->dev_state) + { + case USBD_STATE_DEFAULT: + case USBD_STATE_ADDRESSED: + pdev->dev_default_config = 0U; + (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U); + break; + + case USBD_STATE_CONFIGURED: + (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U); + break; + + default: + USBD_CtlError(pdev, req); + break; + } + } +} + +/** + * @brief USBD_GetStatus + * Handle Get Status request + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + switch (pdev->dev_state) + { + case USBD_STATE_DEFAULT: + case USBD_STATE_ADDRESSED: + case USBD_STATE_CONFIGURED: + if (req->wLength != 0x2U) + { + USBD_CtlError(pdev, req); + break; + } + +#if (USBD_SELF_POWERED == 1U) + pdev->dev_config_status = USB_CONFIG_SELF_POWERED; +#else + pdev->dev_config_status = 0U; +#endif /* USBD_SELF_POWERED */ + + if (pdev->dev_remote_wakeup != 0U) + { + pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP; + } + + (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U); + break; + + default: + USBD_CtlError(pdev, req); + break; + } +} + + +/** + * @brief USBD_SetFeature + * Handle Set device feature request + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) + { + pdev->dev_remote_wakeup = 1U; + (void)USBD_CtlSendStatus(pdev); + } + else if (req->wValue == USB_FEATURE_TEST_MODE) + { + pdev->dev_test_mode = (uint8_t)(req->wIndex >> 8); + (void)USBD_CtlSendStatus(pdev); + } + else + { + USBD_CtlError(pdev, req); + } +} + + +/** + * @brief USBD_ClrFeature + * Handle clear device feature request + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + switch (pdev->dev_state) + { + case USBD_STATE_DEFAULT: + case USBD_STATE_ADDRESSED: + case USBD_STATE_CONFIGURED: + if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) + { + pdev->dev_remote_wakeup = 0U; + (void)USBD_CtlSendStatus(pdev); + } + break; + + default: + USBD_CtlError(pdev, req); + break; + } +} + + +/** + * @brief USBD_ParseSetupRequest + * Copy buffer into setup structure + * @param req: usb request + * @param pdata: setup data pointer + * @retval None + */ +void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata) +{ + uint8_t *pbuff = pdata; + + req->bmRequest = *(uint8_t *)(pbuff); + + pbuff++; + req->bRequest = *(uint8_t *)(pbuff); + + pbuff++; + req->wValue = SWAPBYTE(pbuff); + + pbuff++; + pbuff++; + req->wIndex = SWAPBYTE(pbuff); + + pbuff++; + pbuff++; + req->wLength = SWAPBYTE(pbuff); +} + + +/** + * @brief USBD_CtlError + * Handle USB low level Error + * @param pdev: device instance + * @param req: usb request + * @retval None + */ +void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) +{ + UNUSED(req); + + (void)USBD_LL_StallEP(pdev, 0x80U); + (void)USBD_LL_StallEP(pdev, 0U); +} + + +/** + * @brief USBD_GetString + * Convert Ascii string into unicode one + * @param desc : descriptor buffer + * @param unicode : Formatted string buffer (unicode) + * @param len : descriptor length + * @retval None + */ +void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len) +{ + uint8_t idx = 0U; + uint8_t *pdesc; + + if (desc == NULL) + { + return; + } + + pdesc = desc; + *len = MIN(USBD_MAX_STR_DESC_SIZ, ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U); + + unicode[idx] = *(uint8_t *)len; + idx++; + unicode[idx] = USB_DESC_TYPE_STRING; + idx++; + + while (*pdesc != (uint8_t)'\0') + { + unicode[idx] = *pdesc; + pdesc++; + idx++; + + unicode[idx] = 0U; + idx++; + } +} + + +/** + * @brief USBD_GetLen + * return the string length + * @param buf : pointer to the ascii string buffer + * @retval string length + */ +static uint8_t USBD_GetLen(uint8_t *buf) +{ + uint8_t len = 0U; + uint8_t *pbuff = buf; + + while (*pbuff != (uint8_t)'\0') + { + len++; + pbuff++; + } + + return len; +} +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c new file mode 100644 index 00000000..2171398b --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c @@ -0,0 +1,226 @@ +/** + ****************************************************************************** + * @file usbd_ioreq.c + * @author MCD Application Team + * @brief This file provides the IO requests APIs for control endpoints. + ****************************************************************************** + * @attention + * + * Copyright (c) 2015 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_ioreq.h" + +/** @addtogroup STM32_USB_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_IOREQ + * @brief control I/O requests module + * @{ + */ + +/** @defgroup USBD_IOREQ_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Defines + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Variables + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_FunctionPrototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Functions + * @{ + */ + +/** + * @brief USBD_CtlSendData + * send data on the ctl pipe + * @param pdev: device instance + * @param buff: pointer to data buffer + * @param len: length of data to be sent + * @retval status + */ +USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len) +{ + /* Set EP0 State */ + pdev->ep0_state = USBD_EP0_DATA_IN; + pdev->ep_in[0].total_length = len; + pdev->ep_in[0].pbuffer = pbuf; + +#ifdef USBD_AVOID_PACKET_SPLIT_MPS + pdev->ep_in[0].rem_length = 0U; +#else + pdev->ep_in[0].rem_length = len; +#endif /* USBD_AVOID_PACKET_SPLIT_MPS */ + + /* Start the transfer */ + (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len); + + return USBD_OK; +} + +/** + * @brief USBD_CtlContinueSendData + * continue sending data on the ctl pipe + * @param pdev: device instance + * @param buff: pointer to data buffer + * @param len: length of data to be sent + * @retval status + */ +USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len) +{ + /* Start the next transfer */ + (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len); + + return USBD_OK; +} + +/** + * @brief USBD_CtlPrepareRx + * receive data on the ctl pipe + * @param pdev: device instance + * @param buff: pointer to data buffer + * @param len: length of data to be received + * @retval status + */ +USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len) +{ + /* Set EP0 State */ + pdev->ep0_state = USBD_EP0_DATA_OUT; + pdev->ep_out[0].total_length = len; + pdev->ep_out[0].pbuffer = pbuf; + +#ifdef USBD_AVOID_PACKET_SPLIT_MPS + pdev->ep_out[0].rem_length = 0U; +#else + pdev->ep_out[0].rem_length = len; +#endif /* USBD_AVOID_PACKET_SPLIT_MPS */ + + /* Start the transfer */ + (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len); + + return USBD_OK; +} + +/** + * @brief USBD_CtlContinueRx + * continue receive data on the ctl pipe + * @param pdev: device instance + * @param buff: pointer to data buffer + * @param len: length of data to be received + * @retval status + */ +USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev, + uint8_t *pbuf, uint32_t len) +{ + (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len); + + return USBD_OK; +} + +/** + * @brief USBD_CtlSendStatus + * send zero lzngth packet on the ctl pipe + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev) +{ + /* Set EP0 State */ + pdev->ep0_state = USBD_EP0_STATUS_IN; + + /* Start the transfer */ + (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U); + + return USBD_OK; +} + +/** + * @brief USBD_CtlReceiveStatus + * receive zero lzngth packet on the ctl pipe + * @param pdev: device instance + * @retval status + */ +USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev) +{ + /* Set EP0 State */ + pdev->ep0_state = USBD_EP0_STATUS_OUT; + + /* Start the transfer */ + (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U); + + return USBD_OK; +} + +/** + * @brief USBD_GetRxCount + * returns the received data length + * @param pdev: device instance + * @param ep_addr: endpoint address + * @retval Rx Data blength + */ +uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + return USBD_LL_GetRxDataSize(pdev, ep_addr); +} + +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + diff --git a/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt new file mode 100644 index 00000000..e66295c5 --- /dev/null +++ b/firmware/numpad/Middlewares/ST/STM32_USB_Device_Library/LICENSE.txt @@ -0,0 +1,86 @@ +This software component is provided to you as part of a software package and +applicable license terms are in the Package_license file. If you received this +software component outside of a package or without applicable license terms, +the terms of the SLA0044 license shall apply and are fully reproduced below: + +SLA0044 Rev5/February 2018 + +Software license agreement + +ULTIMATE LIBERTY SOFTWARE LICENSE AGREEMENT + +BY INSTALLING, COPYING, DOWNLOADING, ACCESSING OR OTHERWISE USING THIS SOFTWARE +OR ANY PART THEREOF (AND THE RELATED DOCUMENTATION) FROM STMICROELECTRONICS +INTERNATIONAL N.V, SWISS BRANCH AND/OR ITS AFFILIATED COMPANIES +(STMICROELECTRONICS), THE RECIPIENT, ON BEHALF OF HIMSELF OR HERSELF, OR ON +BEHALF OF ANY ENTITY BY WHICH SUCH RECIPIENT IS EMPLOYED AND/OR ENGAGED AGREES +TO BE BOUND BY THIS SOFTWARE LICENSE AGREEMENT. + +Under STMicroelectronics’ intellectual property rights, the redistribution, +reproduction and use in source and binary forms of the software or any part +thereof, with or without modification, are permitted provided that the following +conditions are met: + +1. Redistribution of source code (modified or not) must retain any copyright +notice, this list of conditions and the disclaimer set forth below as items 10 +and 11. + +2. Redistributions in binary form, except as embedded into microcontroller or +microprocessor device manufactured by or for STMicroelectronics or a software +update for such device, must reproduce any copyright notice provided with the +binary code, this list of conditions, and the disclaimer set forth below as +items 10 and 11, in documentation and/or other materials provided with the +distribution. + +3. Neither the name of STMicroelectronics nor the names of other contributors to +this software may be used to endorse or promote products derived from this +software or part thereof without specific written permission. + +4. This software or any part thereof, including modifications and/or derivative +works of this software, must be used and execute solely and exclusively on or in +combination with a microcontroller or microprocessor device manufactured by or +for STMicroelectronics. + +5. No use, reproduction or redistribution of this software partially or totally +may be done in any manner that would subject this software to any Open Source +Terms. “Open Source Terms” shall mean any open source license which requires as +part of distribution of software that the source code of such software is +distributed therewith or otherwise made available, or open source license that +substantially complies with the Open Source definition specified at +www.opensource.org and any other comparable open source license such as for +example GNU General Public License (GPL), Eclipse Public License (EPL), Apache +Software License, BSD license or MIT license. + +6. STMicroelectronics has no obligation to provide any maintenance, support or +updates for the software. + +7. The software is and will remain the exclusive property of STMicroelectronics +and its licensors. The recipient will not take any action that jeopardizes +STMicroelectronics and its licensors' proprietary rights or acquire any rights +in the software, except the limited rights specified hereunder. + +8. The recipient shall comply with all applicable laws and regulations affecting +the use of the software or any part thereof including any applicable export +control law or regulation. + +9. Redistribution and use of this software or any part thereof other than as +permitted under this license is void and will automatically terminate your +rights under this license. + +10. THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, WHICH ARE +DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT SHALL +STMICROELECTRONICS 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. + +11. EXCEPT AS EXPRESSLY PERMITTED HEREUNDER, NO LICENSE OR OTHER RIGHTS, WHETHER +EXPRESS OR IMPLIED, ARE GRANTED UNDER ANY PATENT OR OTHER INTELLECTUAL PROPERTY +RIGHTS OF STMICROELECTRONICS OR ANY THIRD PARTY. + diff --git a/firmware/numpad/Release/Core/Src/main.cyclo b/firmware/numpad/Release/Core/Src/main.cyclo new file mode 100644 index 00000000..ec333fe5 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/main.cyclo @@ -0,0 +1,3 @@ +../Core/Src/main.c:152:6:SystemClock_Config 3 +../Core/Src/main.c:94:5:main 1 +../Core/Src/main.c:556:6:Error_Handler 1 diff --git a/firmware/numpad/Release/Core/Src/main.d b/firmware/numpad/Release/Core/Src/main.d new file mode 100644 index 00000000..efa445e4 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/main.d @@ -0,0 +1,86 @@ +Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../USB_DEVICE/App/usb_device.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../USB_DEVICE/App/usb_device.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Release/Core/Src/main.o b/firmware/numpad/Release/Core/Src/main.o new file mode 100644 index 00000000..b0b06b52 Binary files /dev/null and b/firmware/numpad/Release/Core/Src/main.o differ diff --git a/firmware/numpad/Release/Core/Src/main.su b/firmware/numpad/Release/Core/Src/main.su new file mode 100644 index 00000000..57c69fef --- /dev/null +++ b/firmware/numpad/Release/Core/Src/main.su @@ -0,0 +1,3 @@ +../Core/Src/main.c:152:6:SystemClock_Config 88 static,ignoring_inline_asm +../Core/Src/main.c:94:5:main 48 static +../Core/Src/main.c:556:6:Error_Handler 0 static,ignoring_inline_asm diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.cyclo b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.cyclo new file mode 100644 index 00000000..f8c22f1d --- /dev/null +++ b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.cyclo @@ -0,0 +1,10 @@ +../Core/Src/stm32f4xx_hal_msp.c:65:6:HAL_MspInit 1 +../Core/Src/stm32f4xx_hal_msp.c:88:6:HAL_I2C_MspInit 2 +../Core/Src/stm32f4xx_hal_msp.c:125:6:HAL_I2C_MspDeInit 2 +../Core/Src/stm32f4xx_hal_msp.c:156:6:HAL_TIM_OC_MspInit 2 +../Core/Src/stm32f4xx_hal_msp.c:179:6:HAL_TIM_Encoder_MspInit 2 +../Core/Src/stm32f4xx_hal_msp.c:210:6:HAL_TIM_MspPostInit 2 +../Core/Src/stm32f4xx_hal_msp.c:242:6:HAL_TIM_OC_MspDeInit 2 +../Core/Src/stm32f4xx_hal_msp.c:264:6:HAL_TIM_Encoder_MspDeInit 2 +../Core/Src/stm32f4xx_hal_msp.c:293:6:HAL_UART_MspInit 6 +../Core/Src/stm32f4xx_hal_msp.c:433:6:HAL_UART_MspDeInit 6 diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.d b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.d new file mode 100644 index 00000000..4b18fd24 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.d @@ -0,0 +1,68 @@ +Core/Src/stm32f4xx_hal_msp.o: ../Core/Src/stm32f4xx_hal_msp.c \ + ../Core/Inc/main.h ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.o b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.o new file mode 100644 index 00000000..f42ce8a9 Binary files /dev/null and b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.o differ diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.su b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.su new file mode 100644 index 00000000..56e830cc --- /dev/null +++ b/firmware/numpad/Release/Core/Src/stm32f4xx_hal_msp.su @@ -0,0 +1,10 @@ +../Core/Src/stm32f4xx_hal_msp.c:65:6:HAL_MspInit 8 static +../Core/Src/stm32f4xx_hal_msp.c:88:6:HAL_I2C_MspInit 48 static +../Core/Src/stm32f4xx_hal_msp.c:125:6:HAL_I2C_MspDeInit 8 static +../Core/Src/stm32f4xx_hal_msp.c:156:6:HAL_TIM_OC_MspInit 8 static +../Core/Src/stm32f4xx_hal_msp.c:179:6:HAL_TIM_Encoder_MspInit 40 static +../Core/Src/stm32f4xx_hal_msp.c:210:6:HAL_TIM_MspPostInit 32 static +../Core/Src/stm32f4xx_hal_msp.c:242:6:HAL_TIM_OC_MspDeInit 0 static +../Core/Src/stm32f4xx_hal_msp.c:264:6:HAL_TIM_Encoder_MspDeInit 0 static +../Core/Src/stm32f4xx_hal_msp.c:293:6:HAL_UART_MspInit 88 static +../Core/Src/stm32f4xx_hal_msp.c:433:6:HAL_UART_MspDeInit 8 static diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_it.cyclo b/firmware/numpad/Release/Core/Src/stm32f4xx_it.cyclo new file mode 100644 index 00000000..104167e1 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/stm32f4xx_it.cyclo @@ -0,0 +1,10 @@ +../Core/Src/stm32f4xx_it.c:69:6:NMI_Handler 1 +../Core/Src/stm32f4xx_it.c:84:6:HardFault_Handler 1 +../Core/Src/stm32f4xx_it.c:99:6:MemManage_Handler 1 +../Core/Src/stm32f4xx_it.c:114:6:BusFault_Handler 1 +../Core/Src/stm32f4xx_it.c:129:6:UsageFault_Handler 1 +../Core/Src/stm32f4xx_it.c:144:6:SVC_Handler 1 +../Core/Src/stm32f4xx_it.c:157:6:DebugMon_Handler 1 +../Core/Src/stm32f4xx_it.c:170:6:PendSV_Handler 1 +../Core/Src/stm32f4xx_it.c:183:6:SysTick_Handler 1 +../Core/Src/stm32f4xx_it.c:204:6:OTG_FS_IRQHandler 1 diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_it.d b/firmware/numpad/Release/Core/Src/stm32f4xx_it.d new file mode 100644 index 00000000..37eb467d --- /dev/null +++ b/firmware/numpad/Release/Core/Src/stm32f4xx_it.d @@ -0,0 +1,70 @@ +Core/Src/stm32f4xx_it.o: ../Core/Src/stm32f4xx_it.c ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Core/Inc/stm32f4xx_it.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Core/Inc/stm32f4xx_it.h: diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_it.o b/firmware/numpad/Release/Core/Src/stm32f4xx_it.o new file mode 100644 index 00000000..1ae4528b Binary files /dev/null and b/firmware/numpad/Release/Core/Src/stm32f4xx_it.o differ diff --git a/firmware/numpad/Release/Core/Src/stm32f4xx_it.su b/firmware/numpad/Release/Core/Src/stm32f4xx_it.su new file mode 100644 index 00000000..cbe9e53e --- /dev/null +++ b/firmware/numpad/Release/Core/Src/stm32f4xx_it.su @@ -0,0 +1,10 @@ +../Core/Src/stm32f4xx_it.c:69:6:NMI_Handler 0 static +../Core/Src/stm32f4xx_it.c:84:6:HardFault_Handler 0 static +../Core/Src/stm32f4xx_it.c:99:6:MemManage_Handler 0 static +../Core/Src/stm32f4xx_it.c:114:6:BusFault_Handler 0 static +../Core/Src/stm32f4xx_it.c:129:6:UsageFault_Handler 0 static +../Core/Src/stm32f4xx_it.c:144:6:SVC_Handler 0 static +../Core/Src/stm32f4xx_it.c:157:6:DebugMon_Handler 0 static +../Core/Src/stm32f4xx_it.c:170:6:PendSV_Handler 0 static +../Core/Src/stm32f4xx_it.c:183:6:SysTick_Handler 0 static +../Core/Src/stm32f4xx_it.c:204:6:OTG_FS_IRQHandler 0 static diff --git a/firmware/numpad/Release/Core/Src/subdir.mk b/firmware/numpad/Release/Core/Src/subdir.mk new file mode 100644 index 00000000..7ceeab9e --- /dev/null +++ b/firmware/numpad/Release/Core/Src/subdir.mk @@ -0,0 +1,42 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Core/Src/main.c \ +../Core/Src/stm32f4xx_hal_msp.c \ +../Core/Src/stm32f4xx_it.c \ +../Core/Src/syscalls.c \ +../Core/Src/sysmem.c \ +../Core/Src/system_stm32f4xx.c + +OBJS += \ +./Core/Src/main.o \ +./Core/Src/stm32f4xx_hal_msp.o \ +./Core/Src/stm32f4xx_it.o \ +./Core/Src/syscalls.o \ +./Core/Src/sysmem.o \ +./Core/Src/system_stm32f4xx.o + +C_DEPS += \ +./Core/Src/main.d \ +./Core/Src/stm32f4xx_hal_msp.d \ +./Core/Src/stm32f4xx_it.d \ +./Core/Src/syscalls.d \ +./Core/Src/sysmem.d \ +./Core/Src/system_stm32f4xx.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/Src/%.o Core/Src/%.su Core/Src/%.cyclo: ../Core/Src/%.c Core/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Core-2f-Src + +clean-Core-2f-Src: + -$(RM) ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/stm32f4xx_hal_msp.cyclo ./Core/Src/stm32f4xx_hal_msp.d ./Core/Src/stm32f4xx_hal_msp.o ./Core/Src/stm32f4xx_hal_msp.su ./Core/Src/stm32f4xx_it.cyclo ./Core/Src/stm32f4xx_it.d ./Core/Src/stm32f4xx_it.o ./Core/Src/stm32f4xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f4xx.cyclo ./Core/Src/system_stm32f4xx.d ./Core/Src/system_stm32f4xx.o ./Core/Src/system_stm32f4xx.su + +.PHONY: clean-Core-2f-Src + diff --git a/firmware/numpad/Release/Core/Src/syscalls.cyclo b/firmware/numpad/Release/Core/Src/syscalls.cyclo new file mode 100644 index 00000000..6cbfdd05 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/syscalls.cyclo @@ -0,0 +1,18 @@ +../Core/Src/syscalls.c:44:6:initialise_monitor_handles 1 +../Core/Src/syscalls.c:48:5:_getpid 1 +../Core/Src/syscalls.c:53:5:_kill 1 +../Core/Src/syscalls.c:61:6:_exit 1 +../Core/Src/syscalls.c:67:27:_read 2 +../Core/Src/syscalls.c:80:27:_write 2 +../Core/Src/syscalls.c:92:5:_close 1 +../Core/Src/syscalls.c:99:5:_fstat 1 +../Core/Src/syscalls.c:106:5:_isatty 1 +../Core/Src/syscalls.c:112:5:_lseek 1 +../Core/Src/syscalls.c:120:5:_open 1 +../Core/Src/syscalls.c:128:5:_wait 1 +../Core/Src/syscalls.c:135:5:_unlink 1 +../Core/Src/syscalls.c:142:5:_times 1 +../Core/Src/syscalls.c:148:5:_stat 1 +../Core/Src/syscalls.c:155:5:_link 1 +../Core/Src/syscalls.c:163:5:_fork 1 +../Core/Src/syscalls.c:169:5:_execve 1 diff --git a/firmware/numpad/Release/Core/Src/syscalls.d b/firmware/numpad/Release/Core/Src/syscalls.d new file mode 100644 index 00000000..8667c708 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/syscalls.d @@ -0,0 +1 @@ +Core/Src/syscalls.o: ../Core/Src/syscalls.c diff --git a/firmware/numpad/Release/Core/Src/syscalls.o b/firmware/numpad/Release/Core/Src/syscalls.o new file mode 100644 index 00000000..eaf673c8 Binary files /dev/null and b/firmware/numpad/Release/Core/Src/syscalls.o differ diff --git a/firmware/numpad/Release/Core/Src/syscalls.su b/firmware/numpad/Release/Core/Src/syscalls.su new file mode 100644 index 00000000..268646b2 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/syscalls.su @@ -0,0 +1,18 @@ +../Core/Src/syscalls.c:44:6:initialise_monitor_handles 0 static +../Core/Src/syscalls.c:48:5:_getpid 0 static +../Core/Src/syscalls.c:53:5:_kill 8 static +../Core/Src/syscalls.c:61:6:_exit 8 static +../Core/Src/syscalls.c:67:27:_read 16 static +../Core/Src/syscalls.c:80:27:_write 16 static +../Core/Src/syscalls.c:92:5:_close 0 static +../Core/Src/syscalls.c:99:5:_fstat 0 static +../Core/Src/syscalls.c:106:5:_isatty 0 static +../Core/Src/syscalls.c:112:5:_lseek 0 static +../Core/Src/syscalls.c:120:5:_open 0 static +../Core/Src/syscalls.c:128:5:_wait 8 static +../Core/Src/syscalls.c:135:5:_unlink 8 static +../Core/Src/syscalls.c:142:5:_times 0 static +../Core/Src/syscalls.c:148:5:_stat 0 static +../Core/Src/syscalls.c:155:5:_link 8 static +../Core/Src/syscalls.c:163:5:_fork 8 static +../Core/Src/syscalls.c:169:5:_execve 8 static diff --git a/firmware/numpad/Release/Core/Src/sysmem.cyclo b/firmware/numpad/Release/Core/Src/sysmem.cyclo new file mode 100644 index 00000000..0090c10f --- /dev/null +++ b/firmware/numpad/Release/Core/Src/sysmem.cyclo @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 3 diff --git a/firmware/numpad/Release/Core/Src/sysmem.d b/firmware/numpad/Release/Core/Src/sysmem.d new file mode 100644 index 00000000..74fecf9b --- /dev/null +++ b/firmware/numpad/Release/Core/Src/sysmem.d @@ -0,0 +1 @@ +Core/Src/sysmem.o: ../Core/Src/sysmem.c diff --git a/firmware/numpad/Release/Core/Src/sysmem.o b/firmware/numpad/Release/Core/Src/sysmem.o new file mode 100644 index 00000000..a0542ca4 Binary files /dev/null and b/firmware/numpad/Release/Core/Src/sysmem.o differ diff --git a/firmware/numpad/Release/Core/Src/sysmem.su b/firmware/numpad/Release/Core/Src/sysmem.su new file mode 100644 index 00000000..43d062a7 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/sysmem.su @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 8 static diff --git a/firmware/numpad/Release/Core/Src/system_stm32f4xx.cyclo b/firmware/numpad/Release/Core/Src/system_stm32f4xx.cyclo new file mode 100644 index 00000000..8e385a80 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/system_stm32f4xx.cyclo @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f4xx.c:167:6:SystemInit 1 +../Core/Src/system_stm32f4xx.c:220:6:SystemCoreClockUpdate 4 diff --git a/firmware/numpad/Release/Core/Src/system_stm32f4xx.d b/firmware/numpad/Release/Core/Src/system_stm32f4xx.d new file mode 100644 index 00000000..8e525e44 --- /dev/null +++ b/firmware/numpad/Release/Core/Src/system_stm32f4xx.d @@ -0,0 +1,67 @@ +Core/Src/system_stm32f4xx.o: ../Core/Src/system_stm32f4xx.c \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Core/Src/system_stm32f4xx.o b/firmware/numpad/Release/Core/Src/system_stm32f4xx.o new file mode 100644 index 00000000..efcec98f Binary files /dev/null and b/firmware/numpad/Release/Core/Src/system_stm32f4xx.o differ diff --git a/firmware/numpad/Release/Core/Src/system_stm32f4xx.su b/firmware/numpad/Release/Core/Src/system_stm32f4xx.su new file mode 100644 index 00000000..f786683e --- /dev/null +++ b/firmware/numpad/Release/Core/Src/system_stm32f4xx.su @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f4xx.c:167:6:SystemInit 0 static +../Core/Src/system_stm32f4xx.c:220:6:SystemCoreClockUpdate 0 static diff --git a/firmware/numpad/Release/Core/Startup/startup_stm32f446retx.d b/firmware/numpad/Release/Core/Startup/startup_stm32f446retx.d new file mode 100644 index 00000000..168e9e87 --- /dev/null +++ b/firmware/numpad/Release/Core/Startup/startup_stm32f446retx.d @@ -0,0 +1,2 @@ +Core/Startup/startup_stm32f446retx.o: \ + ../Core/Startup/startup_stm32f446retx.s diff --git a/firmware/numpad/Release/Core/Startup/startup_stm32f446retx.o b/firmware/numpad/Release/Core/Startup/startup_stm32f446retx.o new file mode 100644 index 00000000..9b847dcb Binary files /dev/null and b/firmware/numpad/Release/Core/Startup/startup_stm32f446retx.o differ diff --git a/firmware/numpad/Release/Core/Startup/subdir.mk b/firmware/numpad/Release/Core/Startup/subdir.mk new file mode 100644 index 00000000..e5fe2425 --- /dev/null +++ b/firmware/numpad/Release/Core/Startup/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +S_SRCS += \ +../Core/Startup/startup_stm32f446retx.s + +OBJS += \ +./Core/Startup/startup_stm32f446retx.o + +S_DEPS += \ +./Core/Startup/startup_stm32f446retx.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/Startup/%.o: ../Core/Startup/%.s Core/Startup/subdir.mk + arm-none-eabi-gcc -mcpu=cortex-m4 -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<" + +clean: clean-Core-2f-Startup + +clean-Core-2f-Startup: + -$(RM) ./Core/Startup/startup_stm32f446retx.d ./Core/Startup/startup_stm32f446retx.o + +.PHONY: clean-Core-2f-Startup + diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo new file mode 100644 index 00000000..97c4624f --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo @@ -0,0 +1,27 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:219:13:HAL_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:230:13:HAL_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:190:19:HAL_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:253:26:HAL_InitTick 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:157:19:HAL_Init 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:312:13:HAL_IncTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323:17:HAL_GetTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:332:10:HAL_GetTickPrio 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:341:19:HAL_SetTickFreq 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:374:21:HAL_GetTickFreq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:390:13:HAL_Delay 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:416:13:HAL_SuspendTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:432:13:HAL_ResumeTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:442:10:HAL_GetHalVersion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:451:10:HAL_GetREVID 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:460:10:HAL_GetDEVID 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:469:6:HAL_DBGMCU_EnableDBGSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:478:6:HAL_DBGMCU_DisableDBGSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:487:6:HAL_DBGMCU_EnableDBGStopMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:496:6:HAL_DBGMCU_DisableDBGStopMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:505:6:HAL_DBGMCU_EnableDBGStandbyMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:514:6:HAL_DBGMCU_DisableDBGStandbyMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:525:6:HAL_EnableCompensationCell 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:536:6:HAL_DisableCompensationCell 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:545:10:HAL_GetUIDw0 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:554:10:HAL_GetUIDw1 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:563:10:HAL_GetUIDw2 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d new file mode 100644 index 00000000..4c8c5b86 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o new file mode 100644 index 00000000..cc542f8c Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su new file mode 100644 index 00000000..c420924a --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su @@ -0,0 +1,27 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:219:13:HAL_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:230:13:HAL_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:190:19:HAL_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:253:26:HAL_InitTick 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:157:19:HAL_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:312:13:HAL_IncTick 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323:17:HAL_GetTick 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:332:10:HAL_GetTickPrio 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:341:19:HAL_SetTickFreq 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:374:21:HAL_GetTickFreq 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:390:13:HAL_Delay 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:416:13:HAL_SuspendTick 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:432:13:HAL_ResumeTick 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:442:10:HAL_GetHalVersion 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:451:10:HAL_GetREVID 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:460:10:HAL_GetDEVID 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:469:6:HAL_DBGMCU_EnableDBGSleepMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:478:6:HAL_DBGMCU_DisableDBGSleepMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:487:6:HAL_DBGMCU_EnableDBGStopMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:496:6:HAL_DBGMCU_DisableDBGStopMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:505:6:HAL_DBGMCU_EnableDBGStandbyMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:514:6:HAL_DBGMCU_DisableDBGStandbyMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:525:6:HAL_EnableCompensationCell 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:536:6:HAL_DisableCompensationCell 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:545:10:HAL_GetUIDw0 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:554:10:HAL_GetUIDw1 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:563:10:HAL_GetUIDw2 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo new file mode 100644 index 00000000..2a621aa4 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo @@ -0,0 +1,21 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:141:6:HAL_NVIC_SetPriorityGrouping 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:163:6:HAL_NVIC_SetPriority 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:185:6:HAL_NVIC_EnableIRQ 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:201:6:HAL_NVIC_DisableIRQ 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:214:6:HAL_NVIC_SystemReset 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:227:10:HAL_SYSTICK_Config 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:256:6:HAL_MPU_Disable 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:279:6:HAL_MPU_Enable 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:296:6:HAL_MPU_EnableRegion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:312:6:HAL_MPU_DisableRegion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:330:6:HAL_MPU_ConfigRegion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:368:6:HAL_CORTEX_ClearEvent 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:378:10:HAL_NVIC_GetPriorityGrouping 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:405:6:HAL_NVIC_GetPriority 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:420:6:HAL_NVIC_SetPendingIRQ 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:438:10:HAL_NVIC_GetPendingIRQ 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:454:6:HAL_NVIC_ClearPendingIRQ 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:471:10:HAL_NVIC_GetActive 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:488:6:HAL_SYSTICK_CLKSourceConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:515:13:HAL_SYSTICK_Callback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:506:6:HAL_SYSTICK_IRQHandler 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d new file mode 100644 index 00000000..93b84ece --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o new file mode 100644 index 00000000..df5fb8cd Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su new file mode 100644 index 00000000..fd031510 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su @@ -0,0 +1,21 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:141:6:HAL_NVIC_SetPriorityGrouping 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:163:6:HAL_NVIC_SetPriority 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:185:6:HAL_NVIC_EnableIRQ 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:201:6:HAL_NVIC_DisableIRQ 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:214:6:HAL_NVIC_SystemReset 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:227:10:HAL_SYSTICK_Config 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:256:6:HAL_MPU_Disable 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:279:6:HAL_MPU_Enable 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:296:6:HAL_MPU_EnableRegion 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:312:6:HAL_MPU_DisableRegion 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:330:6:HAL_MPU_ConfigRegion 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:368:6:HAL_CORTEX_ClearEvent 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:378:10:HAL_NVIC_GetPriorityGrouping 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:405:6:HAL_NVIC_GetPriority 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:420:6:HAL_NVIC_SetPendingIRQ 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:438:10:HAL_NVIC_GetPendingIRQ 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:454:6:HAL_NVIC_ClearPendingIRQ 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:471:10:HAL_NVIC_GetActive 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:488:6:HAL_SYSTICK_CLKSourceConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:515:13:HAL_SYSTICK_Callback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:506:6:HAL_SYSTICK_IRQHandler 8 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo new file mode 100644 index 00000000..1f6a706b --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo @@ -0,0 +1,13 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1185:17:DMA_CalcBaseAndBitshift 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:170:19:HAL_DMA_Init 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:309:19:HAL_DMA_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:407:19:HAL_DMA_Start 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:451:19:HAL_DMA_Start_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:513:19:HAL_DMA_Abort 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:580:19:HAL_DMA_Abort_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:610:19:HAL_DMA_PollForTransfer 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:746:6:HAL_DMA_IRQHandler 32 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:967:19:HAL_DMA_RegisterCallback 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1029:19:HAL_DMA_UnRegisterCallback 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1114:22:HAL_DMA_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1125:10:HAL_DMA_GetError 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d new file mode 100644 index 00000000..44fd2965 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o new file mode 100644 index 00000000..a89935c9 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su new file mode 100644 index 00000000..05740a8b --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su @@ -0,0 +1,13 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1185:17:DMA_CalcBaseAndBitshift 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:170:19:HAL_DMA_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:309:19:HAL_DMA_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:407:19:HAL_DMA_Start 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:451:19:HAL_DMA_Start_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:513:19:HAL_DMA_Abort 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:580:19:HAL_DMA_Abort_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:610:19:HAL_DMA_PollForTransfer 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:746:6:HAL_DMA_IRQHandler 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:967:19:HAL_DMA_RegisterCallback 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1029:19:HAL_DMA_UnRegisterCallback 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1114:22:HAL_DMA_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1125:10:HAL_DMA_GetError 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo new file mode 100644 index 00000000..937046c8 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo @@ -0,0 +1,3 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:100:19:HAL_DMAEx_MultiBufferStart 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:154:19:HAL_DMAEx_MultiBufferStart_IT 25 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:239:19:HAL_DMAEx_ChangeMemory 2 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d new file mode 100644 index 00000000..a5b9ab6f --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o new file mode 100644 index 00000000..7024be02 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su new file mode 100644 index 00000000..d872f0ff --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su @@ -0,0 +1,3 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:100:19:HAL_DMAEx_MultiBufferStart 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:154:19:HAL_DMAEx_MultiBufferStart_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:239:19:HAL_DMAEx_ChangeMemory 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo new file mode 100644 index 00000000..a472e146 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:466:10:HAL_EXTI_GetPending 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:498:6:HAL_EXTI_ClearPending 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:522:6:HAL_EXTI_GenerateSWI 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d new file mode 100644 index 00000000..387a44c6 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o new file mode 100644 index 00000000..80d456c8 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su new file mode 100644 index 00000000..fb571f7d --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:466:10:HAL_EXTI_GetPending 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:498:6:HAL_EXTI_ClearPending 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:522:6:HAL_EXTI_GenerateSWI 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo new file mode 100644 index 00000000..5b3d56cf --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo @@ -0,0 +1,16 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:611:13:FLASH_Program_DoubleWord 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:645:13:FLASH_Program_Word 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:670:13:FLASH_Program_HalfWord 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:712:13:FLASH_SetErrorCode 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:219:19:HAL_FLASH_Program_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:383:13:HAL_FLASH_EndOfOperationCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:400:13:HAL_FLASH_OperationErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:263:6:HAL_FLASH_IRQHandler 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:432:19:HAL_FLASH_Unlock 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:456:19:HAL_FLASH_Lock 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:468:19:HAL_FLASH_OB_Unlock 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:488:19:HAL_FLASH_OB_Lock 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:537:10:HAL_FLASH_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:551:19:FLASH_WaitForLastOperation 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:161:19:HAL_FLASH_Program 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:500:19:HAL_FLASH_OB_Launch 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d new file mode 100644 index 00000000..bc34265a --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o new file mode 100644 index 00000000..cbe96ac4 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su new file mode 100644 index 00000000..1234c815 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su @@ -0,0 +1,16 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:611:13:FLASH_Program_DoubleWord 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:645:13:FLASH_Program_Word 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:670:13:FLASH_Program_HalfWord 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:712:13:FLASH_SetErrorCode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:219:19:HAL_FLASH_Program_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:383:13:HAL_FLASH_EndOfOperationCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:400:13:HAL_FLASH_OperationErrorCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:263:6:HAL_FLASH_IRQHandler 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:432:19:HAL_FLASH_Unlock 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:456:19:HAL_FLASH_Lock 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:468:19:HAL_FLASH_OB_Unlock 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:488:19:HAL_FLASH_OB_Lock 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:537:10:HAL_FLASH_GetError 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:551:19:FLASH_WaitForLastOperation 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:161:19:HAL_FLASH_Program 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:500:19:HAL_FLASH_OB_Launch 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo new file mode 100644 index 00000000..8d4a9cfb --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo @@ -0,0 +1,11 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:948:13:FLASH_MassErase.isra 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:281:19:HAL_FLASHEx_OBProgram 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:340:6:HAL_FLASHEx_OBGetConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:369:19:HAL_FLASHEx_AdvOBProgram 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:425:6:HAL_FLASHEx_AdvOBGetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:457:19:HAL_FLASHEx_OB_SelectPCROP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:482:19:HAL_FLASHEx_OB_DeSelectPCROP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:977:6:FLASH_Erase_Sector 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:231:19:HAL_FLASHEx_Erase_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1306:6:FLASH_FlushCaches 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:160:19:HAL_FLASHEx_Erase 6 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d new file mode 100644 index 00000000..db1c6529 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o new file mode 100644 index 00000000..5fd97714 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su new file mode 100644 index 00000000..f63139ee --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su @@ -0,0 +1,11 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:948:13:FLASH_MassErase.isra 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:281:19:HAL_FLASHEx_OBProgram 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:340:6:HAL_FLASHEx_OBGetConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:369:19:HAL_FLASHEx_AdvOBProgram 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:425:6:HAL_FLASHEx_AdvOBGetConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:457:19:HAL_FLASHEx_OB_SelectPCROP 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:482:19:HAL_FLASHEx_OB_DeSelectPCROP 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:977:6:FLASH_Erase_Sector 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:231:19:HAL_FLASHEx_Erase_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1306:6:FLASH_FlushCaches 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:160:19:HAL_FLASHEx_Erase 32 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo new file mode 100644 index 00000000..bd716274 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:94:30:HAL_FLASHEx_StopFlashInterfaceClk 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:111:30:HAL_FLASHEx_StartFlashInterfaceClk 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:128:30:HAL_FLASHEx_EnableFlashSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:145:30:HAL_FLASHEx_DisableFlashSleepMode 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d new file mode 100644 index 00000000..141bd7f2 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o new file mode 100644 index 00000000..dafaad06 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su new file mode 100644 index 00000000..ab196ef4 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:94:30:HAL_FLASHEx_StopFlashInterfaceClk 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:111:30:HAL_FLASHEx_StartFlashInterfaceClk 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:128:30:HAL_FLASHEx_EnableFlashSleepMode 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:145:30:HAL_FLASHEx_DisableFlashSleepMode 8 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo new file mode 100644 index 00000000..fc62138b --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo @@ -0,0 +1,8 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:164:6:HAL_GPIO_Init 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:294:6:HAL_GPIO_DeInit 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:375:15:HAL_GPIO_ReadPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:410:6:HAL_GPIO_WritePin 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:433:6:HAL_GPIO_TogglePin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:458:19:HAL_GPIO_LockPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:507:13:HAL_GPIO_EXTI_Callback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:492:6:HAL_GPIO_EXTI_IRQHandler 2 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d new file mode 100644 index 00000000..12e17379 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o new file mode 100644 index 00000000..6fc0d58e Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su new file mode 100644 index 00000000..0cfe1359 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su @@ -0,0 +1,8 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:164:6:HAL_GPIO_Init 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:294:6:HAL_GPIO_DeInit 36 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:375:15:HAL_GPIO_ReadPin 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:410:6:HAL_GPIO_WritePin 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:433:6:HAL_GPIO_TogglePin 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:458:19:HAL_GPIO_LockPin 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:507:13:HAL_GPIO_EXTI_Callback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:492:6:HAL_GPIO_EXTI_IRQHandler 8 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo new file mode 100644 index 00000000..a89752cc --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo @@ -0,0 +1,62 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7507:26:I2C_IsAcknowledgeFailed 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7221:26:I2C_WaitOnFlagUntilTimeout 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7258:26:I2C_WaitOnMasterAddressFlagUntilTimeout 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7312:26:I2C_WaitOnTXEFlagUntilTimeout 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6743:26:I2C_RequestMemoryWrite 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6823:26:I2C_RequestMemoryRead 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7353:26:I2C_WaitOnBTFFlagUntilTimeout 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7459:26:I2C_WaitOnRXNEFlagUntilTimeout 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:606:13:HAL_I2C_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:445:19:HAL_I2C_Init 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:622:13:HAL_I2C_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:560:19:HAL_I2C_DeInit 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1056:19:HAL_I2C_Master_Transmit 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1177:19:HAL_I2C_Master_Receive 31 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1428:19:HAL_I2C_Slave_Transmit 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1558:19:HAL_I2C_Slave_Receive 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1679:19:HAL_I2C_Master_Transmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1756:19:HAL_I2C_Master_Receive_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1836:19:HAL_I2C_Slave_Transmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1898:19:HAL_I2C_Slave_Receive_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1962:19:HAL_I2C_Master_Transmit_DMA 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2117:19:HAL_I2C_Master_Receive_DMA 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2270:19:HAL_I2C_Slave_Transmit_DMA 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2384:19:HAL_I2C_Slave_Receive_DMA 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2503:19:HAL_I2C_Mem_Write 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2626:19:HAL_I2C_Mem_Read 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2878:19:HAL_I2C_Mem_Write_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2963:19:HAL_I2C_Mem_Read_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3054:19:HAL_I2C_Mem_Write_DMA 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3236:19:HAL_I2C_Mem_Read_DMA 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3432:19:HAL_I2C_IsDeviceReady 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3568:19:HAL_I2C_Master_Seq_Transmit_IT 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3663:19:HAL_I2C_Master_Seq_Transmit_DMA 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3843:19:HAL_I2C_Master_Seq_Receive_IT 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3964:19:HAL_I2C_Master_Seq_Receive_DMA 27 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4179:19:HAL_I2C_Slave_Seq_Transmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4245:19:HAL_I2C_Slave_Seq_Transmit_DMA 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4419:19:HAL_I2C_Slave_Seq_Receive_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4485:19:HAL_I2C_Slave_Seq_Receive_DMA 16 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4655:19:HAL_I2C_EnableListen_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4688:19:HAL_I2C_DisableListen_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5032:13:HAL_I2C_MasterTxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5048:13:HAL_I2C_MasterRxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5063:13:HAL_I2C_SlaveTxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5079:13:HAL_I2C_SlaveRxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5097:13:HAL_I2C_AddrCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5115:13:HAL_I2C_ListenCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5131:13:HAL_I2C_MemTxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5433:13:I2C_MemoryTransmit_TXE_BTF 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5147:13:HAL_I2C_MemRxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5163:13:HAL_I2C_ErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7077:13:I2C_DMAError 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6932:13:I2C_DMAXferCplt 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5179:13:HAL_I2C_AbortCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7118:13:I2C_DMAAbort 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6407:13:I2C_ITError 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4723:19:HAL_I2C_Master_Abort_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4783:6:HAL_I2C_EV_IRQHandler 156 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4952:6:HAL_I2C_ER_IRQHandler 22 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5214:22:HAL_I2C_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5226:21:HAL_I2C_GetMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5237:10:HAL_I2C_GetError 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d new file mode 100644 index 00000000..cfb11d36 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o new file mode 100644 index 00000000..c125883e Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su new file mode 100644 index 00000000..c9dce67d --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su @@ -0,0 +1,62 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7507:26:I2C_IsAcknowledgeFailed 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7221:26:I2C_WaitOnFlagUntilTimeout 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7258:26:I2C_WaitOnMasterAddressFlagUntilTimeout 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7312:26:I2C_WaitOnTXEFlagUntilTimeout 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6743:26:I2C_RequestMemoryWrite 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6823:26:I2C_RequestMemoryRead 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7353:26:I2C_WaitOnBTFFlagUntilTimeout 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7459:26:I2C_WaitOnRXNEFlagUntilTimeout 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:606:13:HAL_I2C_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:445:19:HAL_I2C_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:622:13:HAL_I2C_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:560:19:HAL_I2C_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1056:19:HAL_I2C_Master_Transmit 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1177:19:HAL_I2C_Master_Receive 64 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1428:19:HAL_I2C_Slave_Transmit 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1558:19:HAL_I2C_Slave_Receive 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1679:19:HAL_I2C_Master_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1756:19:HAL_I2C_Master_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1836:19:HAL_I2C_Slave_Transmit_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1898:19:HAL_I2C_Slave_Receive_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:1962:19:HAL_I2C_Master_Transmit_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2117:19:HAL_I2C_Master_Receive_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2270:19:HAL_I2C_Slave_Transmit_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2384:19:HAL_I2C_Slave_Receive_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2503:19:HAL_I2C_Mem_Write 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2626:19:HAL_I2C_Mem_Read 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2878:19:HAL_I2C_Mem_Write_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:2963:19:HAL_I2C_Mem_Read_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3054:19:HAL_I2C_Mem_Write_DMA 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3236:19:HAL_I2C_Mem_Read_DMA 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3432:19:HAL_I2C_IsDeviceReady 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3568:19:HAL_I2C_Master_Seq_Transmit_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3663:19:HAL_I2C_Master_Seq_Transmit_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3843:19:HAL_I2C_Master_Seq_Receive_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:3964:19:HAL_I2C_Master_Seq_Receive_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4179:19:HAL_I2C_Slave_Seq_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4245:19:HAL_I2C_Slave_Seq_Transmit_DMA 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4419:19:HAL_I2C_Slave_Seq_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4485:19:HAL_I2C_Slave_Seq_Receive_DMA 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4655:19:HAL_I2C_EnableListen_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4688:19:HAL_I2C_DisableListen_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5032:13:HAL_I2C_MasterTxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5048:13:HAL_I2C_MasterRxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5063:13:HAL_I2C_SlaveTxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5079:13:HAL_I2C_SlaveRxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5097:13:HAL_I2C_AddrCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5115:13:HAL_I2C_ListenCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5131:13:HAL_I2C_MemTxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5433:13:I2C_MemoryTransmit_TXE_BTF 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5147:13:HAL_I2C_MemRxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5163:13:HAL_I2C_ErrorCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7077:13:I2C_DMAError 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6932:13:I2C_DMAXferCplt 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5179:13:HAL_I2C_AbortCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:7118:13:I2C_DMAAbort 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:6407:13:I2C_ITError 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4723:19:HAL_I2C_Master_Abort_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4783:6:HAL_I2C_EV_IRQHandler 80 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:4952:6:HAL_I2C_ER_IRQHandler 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5214:22:HAL_I2C_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5226:21:HAL_I2C_GetMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c:5237:10:HAL_I2C_GetError 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo new file mode 100644 index 00000000..84b11ba7 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo @@ -0,0 +1,2 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:88:19:HAL_I2CEx_ConfigAnalogFilter 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:126:19:HAL_I2CEx_ConfigDigitalFilter 2 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d new file mode 100644 index 00000000..2cffc3d7 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o new file mode 100644 index 00000000..7b9fb538 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su new file mode 100644 index 00000000..b443fe65 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su @@ -0,0 +1,2 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:88:19:HAL_I2CEx_ConfigAnalogFilter 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c:126:19:HAL_I2CEx_ConfigDigitalFilter 12 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo new file mode 100644 index 00000000..3f8dd06a --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo @@ -0,0 +1,35 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:297:13:HAL_PCD_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:123:19:HAL_PCD_Init 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:312:13:HAL_PCD_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:258:19:HAL_PCD_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1015:19:HAL_PCD_Start 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1040:19:HAL_PCD_Stop 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1532:6:HAL_PCD_WKUP_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1559:13:HAL_PCD_DataOutStageCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1576:13:HAL_PCD_DataInStageCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1591:13:HAL_PCD_SetupStageCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1606:13:HAL_PCD_SOFCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1621:13:HAL_PCD_ResetCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1636:13:HAL_PCD_SuspendCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1651:13:HAL_PCD_ResumeCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1667:13:HAL_PCD_ISOOUTIncompleteCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1684:13:HAL_PCD_ISOINIncompleteCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1700:13:HAL_PCD_ConnectCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1715:13:HAL_PCD_DisconnectCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1749:19:HAL_PCD_DevConnect 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1772:19:HAL_PCD_DevDisconnect 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1797:19:HAL_PCD_SetAddress 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1814:19:HAL_PCD_EP_Open 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1860:19:HAL_PCD_EP_Close 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1891:19:HAL_PCD_EP_Receive 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1920:10:HAL_PCD_EP_GetRxCount 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1932:19:HAL_PCD_EP_Transmit 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1961:19:HAL_PCD_EP_SetStall 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2004:19:HAL_PCD_EP_ClrStall 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2040:19:HAL_PCD_EP_Abort 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1068:6:HAL_PCD_IRQHandler 81 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2066:19:HAL_PCD_EP_Flush 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2089:19:HAL_PCD_ActivateRemoteWakeup 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2099:19:HAL_PCD_DeActivateRemoteWakeup 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2128:18:HAL_PCD_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2140:19:HAL_PCD_SetTestMode 2 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d new file mode 100644 index 00000000..8ed93470 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o new file mode 100644 index 00000000..bacab9b1 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su new file mode 100644 index 00000000..96a9c3c0 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su @@ -0,0 +1,35 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:297:13:HAL_PCD_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:123:19:HAL_PCD_Init 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:312:13:HAL_PCD_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:258:19:HAL_PCD_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1015:19:HAL_PCD_Start 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1040:19:HAL_PCD_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1532:6:HAL_PCD_WKUP_IRQHandler 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1559:13:HAL_PCD_DataOutStageCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1576:13:HAL_PCD_DataInStageCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1591:13:HAL_PCD_SetupStageCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1606:13:HAL_PCD_SOFCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1621:13:HAL_PCD_ResetCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1636:13:HAL_PCD_SuspendCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1651:13:HAL_PCD_ResumeCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1667:13:HAL_PCD_ISOOUTIncompleteCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1684:13:HAL_PCD_ISOINIncompleteCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1700:13:HAL_PCD_ConnectCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1715:13:HAL_PCD_DisconnectCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1749:19:HAL_PCD_DevConnect 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1772:19:HAL_PCD_DevDisconnect 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1797:19:HAL_PCD_SetAddress 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1814:19:HAL_PCD_EP_Open 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1860:19:HAL_PCD_EP_Close 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1891:19:HAL_PCD_EP_Receive 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1920:10:HAL_PCD_EP_GetRxCount 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1932:19:HAL_PCD_EP_Transmit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1961:19:HAL_PCD_EP_SetStall 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2004:19:HAL_PCD_EP_ClrStall 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2040:19:HAL_PCD_EP_Abort 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:1068:6:HAL_PCD_IRQHandler 72 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2066:19:HAL_PCD_EP_Flush 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2089:19:HAL_PCD_ActivateRemoteWakeup 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2099:19:HAL_PCD_DeActivateRemoteWakeup 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2128:18:HAL_PCD_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c:2140:19:HAL_PCD_SetTestMode 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo new file mode 100644 index 00000000..f616ddf9 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo @@ -0,0 +1,6 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:70:19:HAL_PCDEx_SetTxFiFo 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:112:19:HAL_PCDEx_SetRxFiFo 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:126:19:HAL_PCDEx_ActivateLPM 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:143:19:HAL_PCDEx_DeActivateLPM 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:303:13:HAL_PCDEx_LPM_Callback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:320:13:HAL_PCDEx_BCD_Callback 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d new file mode 100644 index 00000000..a330b78f --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o new file mode 100644 index 00000000..822a92af Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su new file mode 100644 index 00000000..864fbfa3 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su @@ -0,0 +1,6 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:70:19:HAL_PCDEx_SetTxFiFo 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:112:19:HAL_PCDEx_SetRxFiFo 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:126:19:HAL_PCDEx_ActivateLPM 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:143:19:HAL_PCDEx_DeActivateLPM 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:303:13:HAL_PCDEx_LPM_Callback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c:320:13:HAL_PCDEx_BCD_Callback 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo new file mode 100644 index 00000000..37de02b1 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:90:6:HAL_PWR_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:108:6:HAL_PWR_EnableBkUpAccess 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:128:6:HAL_PWR_DisableBkUpAccess 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:275:6:HAL_PWR_ConfigPVD 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:318:6:HAL_PWR_EnablePVD 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:327:6:HAL_PWR_DisablePVD 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:341:6:HAL_PWR_EnableWakeUpPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:359:6:HAL_PWR_DisableWakeUpPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:391:6:HAL_PWR_EnterSLEEPMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:445:6:HAL_PWR_EnterSTOPMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:488:6:HAL_PWR_EnterSTANDBYMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:526:13:HAL_PWR_PVDCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:509:6:HAL_PWR_PVD_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:541:6:HAL_PWR_EnableSleepOnExit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:553:6:HAL_PWR_DisableSleepOnExit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:565:6:HAL_PWR_EnableSEVOnPend 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:577:6:HAL_PWR_DisableSEVOnPend 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d new file mode 100644 index 00000000..75b77829 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o new file mode 100644 index 00000000..2073e4f8 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su new file mode 100644 index 00000000..9f0e3275 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:90:6:HAL_PWR_DeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:108:6:HAL_PWR_EnableBkUpAccess 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:128:6:HAL_PWR_DisableBkUpAccess 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:275:6:HAL_PWR_ConfigPVD 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:318:6:HAL_PWR_EnablePVD 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:327:6:HAL_PWR_DisablePVD 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:341:6:HAL_PWR_EnableWakeUpPin 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:359:6:HAL_PWR_DisableWakeUpPin 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:391:6:HAL_PWR_EnterSLEEPMode 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:445:6:HAL_PWR_EnterSTOPMode 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:488:6:HAL_PWR_EnterSTANDBYMode 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:526:13:HAL_PWR_PVDCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:509:6:HAL_PWR_PVD_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:541:6:HAL_PWR_EnableSleepOnExit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:553:6:HAL_PWR_DisableSleepOnExit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:565:6:HAL_PWR_EnableSEVOnPend 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:577:6:HAL_PWR_DisableSEVOnPend 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo new file mode 100644 index 00000000..970ac44e --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:141:19:HAL_PWREx_EnableBkUpReg 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:165:19:HAL_PWREx_DisableBkUpReg 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:189:6:HAL_PWREx_EnableFlashPowerDown 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:198:6:HAL_PWREx_DisableFlashPowerDown 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:211:10:HAL_PWREx_GetVoltageRange 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:288:19:HAL_PWREx_ControlVoltageScaling 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:413:19:HAL_PWREx_EnableOverDrive 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:460:19:HAL_PWREx_DisableOverDrive 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:536:19:HAL_PWREx_EnterUnderDriveSTOPMode 2 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d new file mode 100644 index 00000000..220344d7 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o new file mode 100644 index 00000000..86717c0b Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su new file mode 100644 index 00000000..df62720b --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:141:19:HAL_PWREx_EnableBkUpReg 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:165:19:HAL_PWREx_DisableBkUpReg 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:189:6:HAL_PWREx_EnableFlashPowerDown 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:198:6:HAL_PWREx_DisableFlashPowerDown 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:211:10:HAL_PWREx_GetVoltageRange 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:288:19:HAL_PWREx_ControlVoltageScaling 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:413:19:HAL_PWREx_EnableOverDrive 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:460:19:HAL_PWREx_DisableOverDrive 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:536:19:HAL_PWREx_EnterUnderDriveSTOPMode 8 static,ignoring_inline_asm diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo new file mode 100644 index 00000000..445a5337 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo @@ -0,0 +1,14 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:200:26:HAL_RCC_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:219:26:HAL_RCC_OscConfig 60 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:775:6:HAL_RCC_MCOConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:841:6:HAL_RCC_EnableCSS 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:850:6:HAL_RCC_DisableCSS 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:885:17:HAL_RCC_GetSysClockFreq 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:591:19:HAL_RCC_ClockConfig 19 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:943:10:HAL_RCC_GetHCLKFreq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:954:10:HAL_RCC_GetPCLK1Freq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:966:10:HAL_RCC_GetPCLK2Freq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:979:13:HAL_RCC_GetOscConfig 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1058:6:HAL_RCC_GetClockConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1101:13:HAL_RCC_CSSCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1084:6:HAL_RCC_NMI_IRQHandler 2 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d new file mode 100644 index 00000000..ed14ce03 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o new file mode 100644 index 00000000..3955c412 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su new file mode 100644 index 00000000..bd421422 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su @@ -0,0 +1,14 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:200:26:HAL_RCC_DeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:219:26:HAL_RCC_OscConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:775:6:HAL_RCC_MCOConfig 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:841:6:HAL_RCC_EnableCSS 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:850:6:HAL_RCC_DisableCSS 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:885:17:HAL_RCC_GetSysClockFreq 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:591:19:HAL_RCC_ClockConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:943:10:HAL_RCC_GetHCLKFreq 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:954:10:HAL_RCC_GetPCLK1Freq 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:966:10:HAL_RCC_GetPCLK2Freq 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:979:13:HAL_RCC_GetOscConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1058:6:HAL_RCC_GetClockConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1101:13:HAL_RCC_CSSCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1084:6:HAL_RCC_NMI_IRQHandler 8 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo new file mode 100644 index 00000000..4f039ca9 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo @@ -0,0 +1,12 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:87:19:HAL_RCCEx_PeriphCLKConfig 51 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:500:6:HAL_RCCEx_GetPeriphCLKConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:580:10:HAL_RCCEx_GetPeriphCLKFreq 27 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2809:6:HAL_RCCEx_SelectLSEMode 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2846:19:HAL_RCCEx_EnablePLLI2S 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2929:19:HAL_RCCEx_DisablePLLI2S 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2959:19:HAL_RCCEx_EnablePLLSAI 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3033:19:HAL_RCCEx_DisablePLLSAI 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3094:10:HAL_RCC_GetSysClockFreq 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3186:19:HAL_RCC_DeInit 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3377:19:HAL_RCC_OscConfig 64 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3752:6:HAL_RCC_GetOscConfig 3 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d new file mode 100644 index 00000000..efb9c676 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o new file mode 100644 index 00000000..decd53a0 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su new file mode 100644 index 00000000..b22b21bc --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su @@ -0,0 +1,12 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:87:19:HAL_RCCEx_PeriphCLKConfig 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:500:6:HAL_RCCEx_GetPeriphCLKConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:580:10:HAL_RCCEx_GetPeriphCLKFreq 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2809:6:HAL_RCCEx_SelectLSEMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2846:19:HAL_RCCEx_EnablePLLI2S 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2929:19:HAL_RCCEx_DisablePLLI2S 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2959:19:HAL_RCCEx_EnablePLLSAI 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3033:19:HAL_RCCEx_DisablePLLSAI 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3094:10:HAL_RCC_GetSysClockFreq 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3186:19:HAL_RCC_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3377:19:HAL_RCC_OscConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3752:6:HAL_RCC_GetOscConfig 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo new file mode 100644 index 00000000..861c0142 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo @@ -0,0 +1,113 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6829:13:TIM_OC1_SetConfig 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6981:13:TIM_OC3_SetConfig 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7056:13:TIM_OC4_SetConfig 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:369:13:HAL_TIM_Base_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:384:13:HAL_TIM_Base_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:326:19:HAL_TIM_Base_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:400:19:HAL_TIM_Base_Start 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:439:19:HAL_TIM_Base_Stop 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:459:19:HAL_TIM_Base_Start_IT 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:501:19:HAL_TIM_Base_Stop_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:526:19:HAL_TIM_Base_Start_DMA 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:595:19:HAL_TIM_Base_Stop_DMA 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:753:13:HAL_TIM_OC_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:768:13:HAL_TIM_OC_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:710:19:HAL_TIM_OC_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1418:13:HAL_TIM_PWM_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1433:13:HAL_TIM_PWM_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1375:19:HAL_TIM_PWM_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2082:13:HAL_TIM_IC_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2097:13:HAL_TIM_IC_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2039:19:HAL_TIM_IC_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2742:13:HAL_TIM_OnePulse_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2757:13:HAL_TIM_OnePulse_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2697:19:HAL_TIM_OnePulse_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2777:19:HAL_TIM_OnePulse_Start 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2834:19:HAL_TIM_OnePulse_Stop 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2877:19:HAL_TIM_OnePulse_Start_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2940:19:HAL_TIM_OnePulse_Stop_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3179:13:HAL_TIM_Encoder_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3194:13:HAL_TIM_Encoder_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3134:19:HAL_TIM_Encoder_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3214:19:HAL_TIM_Encoder_Start 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3308:19:HAL_TIM_Encoder_Stop 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3368:19:HAL_TIM_Encoder_Start_IT 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3468:19:HAL_TIM_Encoder_Stop_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3533:19:HAL_TIM_Encoder_Start_DMA 30 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3746:19:HAL_TIM_Encoder_Stop_DMA 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4534:19:HAL_TIM_DMABurst_MultiWriteStart 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4481:19:HAL_TIM_DMABurst_WriteStart 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4718:19:HAL_TIM_DMABurst_WriteStop 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4870:19:HAL_TIM_DMABurst_MultiReadStart 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4819:19:HAL_TIM_DMABurst_ReadStart 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5054:19:HAL_TIM_DMABurst_ReadStop 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5137:19:HAL_TIM_GenerateEvent 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5458:19:HAL_TIM_ConfigTI1Input 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5573:10:HAL_TIM_ReadCapturedValue 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5657:13:HAL_TIM_PeriodElapsedCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6702:13:TIM_DMAPeriodElapsedCplt 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5672:13:HAL_TIM_PeriodElapsedHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6723:13:TIM_DMAPeriodElapsedHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5687:13:HAL_TIM_OC_DelayElapsedCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5702:13:HAL_TIM_IC_CaptureCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6600:6:TIM_DMACaptureCplt 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5717:13:HAL_TIM_IC_CaptureHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6663:6:TIM_DMACaptureHalfCplt 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5732:13:HAL_TIM_PWM_PulseFinishedCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6502:13:TIM_DMADelayPulseCplt 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5747:13:HAL_TIM_PWM_PulseFinishedHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6561:6:TIM_DMADelayPulseHalfCplt 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5762:13:HAL_TIM_TriggerCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3823:6:HAL_TIM_IRQHandler 21 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6739:13:TIM_DMATriggerCplt 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5777:13:HAL_TIM_TriggerHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6760:13:TIM_DMATriggerHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5792:13:HAL_TIM_ErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6459:6:TIM_DMAError 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6339:22:HAL_TIM_Base_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6349:22:HAL_TIM_OC_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6359:22:HAL_TIM_PWM_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6369:22:HAL_TIM_IC_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6379:22:HAL_TIM_OnePulse_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6389:22:HAL_TIM_Encoder_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6399:23:HAL_TIM_GetActiveChannel 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6417:29:HAL_TIM_GetChannelState 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6434:30:HAL_TIM_DMABurstState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6777:6:TIM_Base_SetConfig 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:266:19:HAL_TIM_Base_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:650:19:HAL_TIM_OC_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1315:19:HAL_TIM_PWM_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1979:19:HAL_TIM_IC_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2628:19:HAL_TIM_OnePulse_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3019:19:HAL_TIM_Encoder_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6905:6:TIM_OC2_SetConfig 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4041:19:HAL_TIM_OC_ConfigChannel 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4219:19:HAL_TIM_PWM_ConfigChannel 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7251:6:TIM_TI1_SetConfig 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4120:19:HAL_TIM_IC_ConfigChannel 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4333:19:HAL_TIM_OnePulse_ConfigChannel 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7545:6:TIM_ETR_SetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5174:19:HAL_TIM_ConfigOCrefClear 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5304:19:HAL_TIM_ConfigClockSource 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7117:26:TIM_SlaveTimer_SetConfig.constprop 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5530:19:HAL_TIM_SlaveConfigSynchro_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5490:19:HAL_TIM_SlaveConfigSynchro 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7575:6:TIM_CCxChannelCmd 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:789:19:HAL_TIM_OC_Start 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1454:19:HAL_TIM_PWM_Start 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:843:19:HAL_TIM_OC_Stop 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1508:19:HAL_TIM_PWM_Stop 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:878:19:HAL_TIM_OC_Start_IT 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1543:19:HAL_TIM_PWM_Start_IT 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:971:19:HAL_TIM_OC_Stop_IT 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1636:19:HAL_TIM_PWM_Stop_IT 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1048:19:HAL_TIM_OC_Start_DMA 28 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1713:19:HAL_TIM_PWM_Start_DMA 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1212:19:HAL_TIM_OC_Stop_DMA 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1876:19:HAL_TIM_PWM_Stop_DMA 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2118:19:HAL_TIM_IC_Start 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2170:19:HAL_TIM_IC_Stop 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2200:19:HAL_TIM_IC_Start_IT 19 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2292:19:HAL_TIM_IC_Stop_IT 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2364:19:HAL_TIM_IC_Start_DMA 31 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2523:19:HAL_TIM_IC_Stop_DMA 11 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d new file mode 100644 index 00000000..74d1f732 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o new file mode 100644 index 00000000..845bc90c Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su new file mode 100644 index 00000000..b9cc97e0 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su @@ -0,0 +1,113 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6829:13:TIM_OC1_SetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6981:13:TIM_OC3_SetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7056:13:TIM_OC4_SetConfig 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:369:13:HAL_TIM_Base_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:384:13:HAL_TIM_Base_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:326:19:HAL_TIM_Base_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:400:19:HAL_TIM_Base_Start 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:439:19:HAL_TIM_Base_Stop 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:459:19:HAL_TIM_Base_Start_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:501:19:HAL_TIM_Base_Stop_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:526:19:HAL_TIM_Base_Start_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:595:19:HAL_TIM_Base_Stop_DMA 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:753:13:HAL_TIM_OC_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:768:13:HAL_TIM_OC_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:710:19:HAL_TIM_OC_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1418:13:HAL_TIM_PWM_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1433:13:HAL_TIM_PWM_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1375:19:HAL_TIM_PWM_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2082:13:HAL_TIM_IC_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2097:13:HAL_TIM_IC_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2039:19:HAL_TIM_IC_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2742:13:HAL_TIM_OnePulse_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2757:13:HAL_TIM_OnePulse_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2697:19:HAL_TIM_OnePulse_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2777:19:HAL_TIM_OnePulse_Start 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2834:19:HAL_TIM_OnePulse_Stop 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2877:19:HAL_TIM_OnePulse_Start_IT 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2940:19:HAL_TIM_OnePulse_Stop_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3179:13:HAL_TIM_Encoder_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3194:13:HAL_TIM_Encoder_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3134:19:HAL_TIM_Encoder_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3214:19:HAL_TIM_Encoder_Start 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3308:19:HAL_TIM_Encoder_Stop 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3368:19:HAL_TIM_Encoder_Start_IT 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3468:19:HAL_TIM_Encoder_Stop_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3533:19:HAL_TIM_Encoder_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3746:19:HAL_TIM_Encoder_Stop_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4534:19:HAL_TIM_DMABurst_MultiWriteStart 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4481:19:HAL_TIM_DMABurst_WriteStart 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4718:19:HAL_TIM_DMABurst_WriteStop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4870:19:HAL_TIM_DMABurst_MultiReadStart 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4819:19:HAL_TIM_DMABurst_ReadStart 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5054:19:HAL_TIM_DMABurst_ReadStop 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5137:19:HAL_TIM_GenerateEvent 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5458:19:HAL_TIM_ConfigTI1Input 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5573:10:HAL_TIM_ReadCapturedValue 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5657:13:HAL_TIM_PeriodElapsedCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6702:13:TIM_DMAPeriodElapsedCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5672:13:HAL_TIM_PeriodElapsedHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6723:13:TIM_DMAPeriodElapsedHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5687:13:HAL_TIM_OC_DelayElapsedCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5702:13:HAL_TIM_IC_CaptureCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6600:6:TIM_DMACaptureCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5717:13:HAL_TIM_IC_CaptureHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6663:6:TIM_DMACaptureHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5732:13:HAL_TIM_PWM_PulseFinishedCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6502:13:TIM_DMADelayPulseCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5747:13:HAL_TIM_PWM_PulseFinishedHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6561:6:TIM_DMADelayPulseHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5762:13:HAL_TIM_TriggerCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3823:6:HAL_TIM_IRQHandler 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6739:13:TIM_DMATriggerCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5777:13:HAL_TIM_TriggerHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6760:13:TIM_DMATriggerHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5792:13:HAL_TIM_ErrorCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6459:6:TIM_DMAError 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6339:22:HAL_TIM_Base_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6349:22:HAL_TIM_OC_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6359:22:HAL_TIM_PWM_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6369:22:HAL_TIM_IC_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6379:22:HAL_TIM_OnePulse_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6389:22:HAL_TIM_Encoder_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6399:23:HAL_TIM_GetActiveChannel 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6417:29:HAL_TIM_GetChannelState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6434:30:HAL_TIM_DMABurstState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6777:6:TIM_Base_SetConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:266:19:HAL_TIM_Base_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:650:19:HAL_TIM_OC_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1315:19:HAL_TIM_PWM_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1979:19:HAL_TIM_IC_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2628:19:HAL_TIM_OnePulse_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:3019:19:HAL_TIM_Encoder_Init 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:6905:6:TIM_OC2_SetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4041:19:HAL_TIM_OC_ConfigChannel 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4219:19:HAL_TIM_PWM_ConfigChannel 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7251:6:TIM_TI1_SetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4120:19:HAL_TIM_IC_ConfigChannel 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:4333:19:HAL_TIM_OnePulse_ConfigChannel 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7545:6:TIM_ETR_SetConfig 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5174:19:HAL_TIM_ConfigOCrefClear 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5304:19:HAL_TIM_ConfigClockSource 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7117:26:TIM_SlaveTimer_SetConfig.constprop 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5530:19:HAL_TIM_SlaveConfigSynchro_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:5490:19:HAL_TIM_SlaveConfigSynchro 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:7575:6:TIM_CCxChannelCmd 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:789:19:HAL_TIM_OC_Start 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1454:19:HAL_TIM_PWM_Start 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:843:19:HAL_TIM_OC_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1508:19:HAL_TIM_PWM_Stop 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:878:19:HAL_TIM_OC_Start_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1543:19:HAL_TIM_PWM_Start_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:971:19:HAL_TIM_OC_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1636:19:HAL_TIM_PWM_Stop_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1048:19:HAL_TIM_OC_Start_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1713:19:HAL_TIM_PWM_Start_DMA 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1212:19:HAL_TIM_OC_Stop_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:1876:19:HAL_TIM_PWM_Stop_DMA 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2118:19:HAL_TIM_IC_Start 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2170:19:HAL_TIM_IC_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2200:19:HAL_TIM_IC_Start_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2292:19:HAL_TIM_IC_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2364:19:HAL_TIM_IC_Start_DMA 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c:2523:19:HAL_TIM_IC_Stop_DMA 16 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo new file mode 100644 index 00000000..75307948 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo @@ -0,0 +1,42 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2387:13:TIM_CCxNChannelCmd 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2342:13:TIM_DMAErrorCCxN 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2292:13:TIM_DMADelayPulseNCplt 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:285:13:HAL_TIMEx_HallSensor_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:138:19:HAL_TIMEx_HallSensor_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:300:13:HAL_TIMEx_HallSensor_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:240:19:HAL_TIMEx_HallSensor_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:315:19:HAL_TIMEx_HallSensor_Start 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:369:19:HAL_TIMEx_HallSensor_Stop 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:397:19:HAL_TIMEx_HallSensor_Start_IT 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:454:19:HAL_TIMEx_HallSensor_Stop_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:487:19:HAL_TIMEx_HallSensor_Start_DMA 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:563:19:HAL_TIMEx_HallSensor_Stop_DMA 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:625:19:HAL_TIMEx_OCN_Start 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:676:19:HAL_TIMEx_OCN_Stop 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:708:19:HAL_TIMEx_OCN_Start_IT 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:795:19:HAL_TIMEx_OCN_Stop_IT 11 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:870:19:HAL_TIMEx_OCN_Start_DMA 26 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1008:19:HAL_TIMEx_OCN_Stop_DMA 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1098:19:HAL_TIMEx_PWMN_Start 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1148:19:HAL_TIMEx_PWMN_Stop 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1180:19:HAL_TIMEx_PWMN_Start_IT 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1266:19:HAL_TIMEx_PWMN_Stop_IT 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1341:19:HAL_TIMEx_PWMN_Start_DMA 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1479:19:HAL_TIMEx_PWMN_Stop_DMA 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1570:19:HAL_TIMEx_OnePulseN_Start 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1619:19:HAL_TIMEx_OnePulseN_Stop 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1658:19:HAL_TIMEx_OnePulseN_Start_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1713:19:HAL_TIMEx_OnePulseN_Stop_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1792:19:HAL_TIMEx_ConfigCommutEvent 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1848:19:HAL_TIMEx_ConfigCommutEvent_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1905:19:HAL_TIMEx_ConfigCommutEvent_DMA 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1954:19:HAL_TIMEx_MasterConfigSynchronization 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2015:19:HAL_TIMEx_ConfigBreakDeadTime 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2091:19:HAL_TIMEx_RemapConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2147:13:HAL_TIMEx_CommutCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2253:6:TIMEx_DMACommutationCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2161:13:HAL_TIMEx_CommutHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2272:6:TIMEx_DMACommutationHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2176:13:HAL_TIMEx_BreakCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2209:22:HAL_TIMEx_HallSensor_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2224:29:HAL_TIMEx_GetChannelNState 4 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d new file mode 100644 index 00000000..cf3ba16a --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o new file mode 100644 index 00000000..5c30cdf6 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su new file mode 100644 index 00000000..2b61829c --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su @@ -0,0 +1,42 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2387:13:TIM_CCxNChannelCmd 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2342:13:TIM_DMAErrorCCxN 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2292:13:TIM_DMADelayPulseNCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:285:13:HAL_TIMEx_HallSensor_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:138:19:HAL_TIMEx_HallSensor_Init 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:300:13:HAL_TIMEx_HallSensor_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:240:19:HAL_TIMEx_HallSensor_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:315:19:HAL_TIMEx_HallSensor_Start 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:369:19:HAL_TIMEx_HallSensor_Stop 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:397:19:HAL_TIMEx_HallSensor_Start_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:454:19:HAL_TIMEx_HallSensor_Stop_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:487:19:HAL_TIMEx_HallSensor_Start_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:563:19:HAL_TIMEx_HallSensor_Stop_DMA 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:625:19:HAL_TIMEx_OCN_Start 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:676:19:HAL_TIMEx_OCN_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:708:19:HAL_TIMEx_OCN_Start_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:795:19:HAL_TIMEx_OCN_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:870:19:HAL_TIMEx_OCN_Start_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1008:19:HAL_TIMEx_OCN_Stop_DMA 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1098:19:HAL_TIMEx_PWMN_Start 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1148:19:HAL_TIMEx_PWMN_Stop 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1180:19:HAL_TIMEx_PWMN_Start_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1266:19:HAL_TIMEx_PWMN_Stop_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1341:19:HAL_TIMEx_PWMN_Start_DMA 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1479:19:HAL_TIMEx_PWMN_Stop_DMA 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1570:19:HAL_TIMEx_OnePulseN_Start 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1619:19:HAL_TIMEx_OnePulseN_Stop 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1658:19:HAL_TIMEx_OnePulseN_Start_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1713:19:HAL_TIMEx_OnePulseN_Stop_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1792:19:HAL_TIMEx_ConfigCommutEvent 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1848:19:HAL_TIMEx_ConfigCommutEvent_IT 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1905:19:HAL_TIMEx_ConfigCommutEvent_DMA 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:1954:19:HAL_TIMEx_MasterConfigSynchronization 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2015:19:HAL_TIMEx_ConfigBreakDeadTime 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2091:19:HAL_TIMEx_RemapConfig 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2147:13:HAL_TIMEx_CommutCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2253:6:TIMEx_DMACommutationCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2161:13:HAL_TIMEx_CommutHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2272:6:TIMEx_DMACommutationHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2176:13:HAL_TIMEx_BreakCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2209:22:HAL_TIMEx_HallSensor_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c:2224:29:HAL_TIMEx_GetChannelNState 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo new file mode 100644 index 00000000..3b78358e --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo @@ -0,0 +1,59 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3370:13:UART_EndRxTransfer 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3731:13:UART_SetConfig 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3212:26:UART_WaitOnFlagUntilTimeout.constprop 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:715:13:HAL_UART_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:357:19:HAL_UART_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:435:19:HAL_HalfDuplex_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:509:19:HAL_LIN_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:591:19:HAL_MultiProcessor_Init 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:730:13:HAL_UART_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:669:19:HAL_UART_DeInit 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1135:19:HAL_UART_Transmit 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1221:19:HAL_UART_Receive 12 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1308:19:HAL_UART_Transmit_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1379:19:HAL_UART_Transmit_DMA 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1476:19:HAL_UART_DMAPause 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1507:19:HAL_UART_DMAResume 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1541:19:HAL_UART_DMAStop 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1596:19:HAL_UARTEx_ReceiveToIdle 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1846:29:HAL_UARTEx_GetRxEventType 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1864:19:HAL_UART_Abort 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1953:19:HAL_UART_AbortTransmit 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2004:19:HAL_UART_AbortReceive 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2619:13:HAL_UART_TxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3015:13:UART_DMATransmitCplt 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2634:13:HAL_UART_TxHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3050:13:UART_DMATxHalfCplt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2649:13:HAL_UART_RxCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2664:13:HAL_UART_RxHalfCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2679:13:HAL_UART_ErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3170:13:UART_DMAError 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3394:13:UART_DMAAbortOnError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2693:13:HAL_UART_AbortCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2065:19:HAL_UART_Abort_IT 18 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3463:13:UART_DMARxAbortCallback 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3417:13:UART_DMATxAbortCallback 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2708:13:HAL_UART_AbortTransmitCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2200:19:HAL_UART_AbortTransmit_IT 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3509:13:UART_DMATxOnlyAbortCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2723:13:HAL_UART_AbortReceiveCpltCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2277:19:HAL_UART_AbortReceive_IT 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3537:13:UART_DMARxOnlyAbortCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2740:13:HAL_UARTEx_RxEventCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3131:13:UART_DMARxHalfCplt 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3069:13:UART_DMAReceiveCplt 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3628:26:UART_Receive_IT.isra 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2355:6:HAL_UART_IRQHandler 47 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2780:19:HAL_LIN_SendBreak 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2807:19:HAL_MultiProcessor_EnterMuteMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2835:19:HAL_MultiProcessor_ExitMuteMode 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2863:19:HAL_HalfDuplex_EnableTransmitter 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2898:19:HAL_HalfDuplex_EnableReceiver 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2955:23:HAL_UART_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2970:10:HAL_UART_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3263:19:UART_Start_Receive_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1347:19:HAL_UART_Receive_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1721:19:HAL_UARTEx_ReceiveToIdle_IT 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3298:19:UART_Start_Receive_DMA 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1449:19:HAL_UART_Receive_DMA 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1781:19:HAL_UARTEx_ReceiveToIdle_DMA 6 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d new file mode 100644 index 00000000..180b2c9f --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o new file mode 100644 index 00000000..55064944 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su new file mode 100644 index 00000000..94e96e37 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su @@ -0,0 +1,59 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3370:13:UART_EndRxTransfer 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3731:13:UART_SetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3212:26:UART_WaitOnFlagUntilTimeout.constprop 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:715:13:HAL_UART_MspInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:357:19:HAL_UART_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:435:19:HAL_HalfDuplex_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:509:19:HAL_LIN_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:591:19:HAL_MultiProcessor_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:730:13:HAL_UART_MspDeInit 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:669:19:HAL_UART_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1135:19:HAL_UART_Transmit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1221:19:HAL_UART_Receive 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1308:19:HAL_UART_Transmit_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1379:19:HAL_UART_Transmit_DMA 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1476:19:HAL_UART_DMAPause 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1507:19:HAL_UART_DMAResume 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1541:19:HAL_UART_DMAStop 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1596:19:HAL_UARTEx_ReceiveToIdle 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1846:29:HAL_UARTEx_GetRxEventType 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1864:19:HAL_UART_Abort 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1953:19:HAL_UART_AbortTransmit 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2004:19:HAL_UART_AbortReceive 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2619:13:HAL_UART_TxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3015:13:UART_DMATransmitCplt 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2634:13:HAL_UART_TxHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3050:13:UART_DMATxHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2649:13:HAL_UART_RxCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2664:13:HAL_UART_RxHalfCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2679:13:HAL_UART_ErrorCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3170:13:UART_DMAError 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3394:13:UART_DMAAbortOnError 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2693:13:HAL_UART_AbortCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2065:19:HAL_UART_Abort_IT 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3463:13:UART_DMARxAbortCallback 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3417:13:UART_DMATxAbortCallback 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2708:13:HAL_UART_AbortTransmitCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2200:19:HAL_UART_AbortTransmit_IT 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3509:13:UART_DMATxOnlyAbortCallback 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2723:13:HAL_UART_AbortReceiveCpltCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2277:19:HAL_UART_AbortReceive_IT 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3537:13:UART_DMARxOnlyAbortCallback 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2740:13:HAL_UARTEx_RxEventCallback 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3131:13:UART_DMARxHalfCplt 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3069:13:UART_DMAReceiveCplt 8 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3628:26:UART_Receive_IT.isra 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2355:6:HAL_UART_IRQHandler 24 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2780:19:HAL_LIN_SendBreak 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2807:19:HAL_MultiProcessor_EnterMuteMode 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2835:19:HAL_MultiProcessor_ExitMuteMode 0 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2863:19:HAL_HalfDuplex_EnableTransmitter 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2898:19:HAL_HalfDuplex_EnableReceiver 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2955:23:HAL_UART_GetState 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2970:10:HAL_UART_GetError 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3263:19:UART_Start_Receive_IT 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1347:19:HAL_UART_Receive_IT 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1721:19:HAL_UARTEx_ReceiveToIdle_IT 24 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3298:19:UART_Start_Receive_DMA 24 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1449:19:HAL_UART_Receive_DMA 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1781:19:HAL_UARTEx_ReceiveToIdle_DMA 24 static,ignoring_inline_asm diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo new file mode 100644 index 00000000..b38b4ae6 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo @@ -0,0 +1,49 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1406:26:USB_CoreReset 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:83:19:USB_CoreInit 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:139:19:USB_SetTurnaroundTime 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:222:19:USB_EnableGlobalInt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:234:19:USB_DisableGlobalInt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:249:19:USB_SetCurrentMode 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:473:19:USB_FlushTxFifo 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:510:19:USB_FlushRxFifo 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:553:19:USB_SetDevSpeed 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:296:19:USB_DevInit 14 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:569:9:USB_GetDevSpeed 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:598:19:USB_ActivateEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:636:19:USB_ActivateDedicatedEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:675:19:USB_DeactivateEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:722:19:USB_DeactivateDedicatedEndpoint 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:936:19:USB_EPStopXfer 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1000:19:USB_WritePacket 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:764:19:USB_EPStartXfer 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1031:7:USB_ReadPacket 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1073:19:USB_EPSetStall 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1104:19:USB_EPClearStall 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1133:19:USB_StopDevice 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1174:19:USB_SetDevAddress 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1189:19:USB_DevConnect 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1206:19:USB_DevDisconnect 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1223:10:USB_ReadInterrupts 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1239:10:USB_ReadChInterrupts 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1255:10:USB_ReadDevAllOutEpInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1271:10:USB_ReadDevAllInEpInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1289:10:USB_ReadDevOutEPInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1307:10:USB_ReadDevInEPInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1328:7:USB_ClearInterrupts 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1341:10:USB_GetMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1351:19:USB_ActivateSetup 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1373:19:USB_EP0_OutStart 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1453:19:USB_HostInit 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1568:19:USB_InitFSLSPClkSel 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1598:19:USB_ResetPort 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1625:19:USB_DriveVbus 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1655:10:USB_GetHostSpeed 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1669:10:USB_GetCurrentFrame 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1700:19:USB_HC_Init 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2095:10:USB_HC_ReadInterrupt 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2109:19:USB_HC_Halt 13 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2193:19:USB_DoPing 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1832:19:USB_HC_StartXfer 39 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2217:19:USB_StopHost 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2282:19:USB_ActivateRemoteWakeup 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2300:19:USB_DeActivateRemoteWakeup 1 diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d new file mode 100644 index 00000000..1ed2e89c --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d @@ -0,0 +1,68 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o new file mode 100644 index 00000000..fe95fcb2 Binary files /dev/null and b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o differ diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su new file mode 100644 index 00000000..ae55907f --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su @@ -0,0 +1,49 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1406:26:USB_CoreReset 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:83:19:USB_CoreInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:139:19:USB_SetTurnaroundTime 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:222:19:USB_EnableGlobalInt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:234:19:USB_DisableGlobalInt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:249:19:USB_SetCurrentMode 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:473:19:USB_FlushTxFifo 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:510:19:USB_FlushRxFifo 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:553:19:USB_SetDevSpeed 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:296:19:USB_DevInit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:569:9:USB_GetDevSpeed 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:598:19:USB_ActivateEndpoint 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:636:19:USB_ActivateDedicatedEndpoint 20 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:675:19:USB_DeactivateEndpoint 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:722:19:USB_DeactivateDedicatedEndpoint 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:936:19:USB_EPStopXfer 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1000:19:USB_WritePacket 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:764:19:USB_EPStartXfer 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1031:7:USB_ReadPacket 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1073:19:USB_EPSetStall 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1104:19:USB_EPClearStall 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1133:19:USB_StopDevice 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1174:19:USB_SetDevAddress 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1189:19:USB_DevConnect 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1206:19:USB_DevDisconnect 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1223:10:USB_ReadInterrupts 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1239:10:USB_ReadChInterrupts 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1255:10:USB_ReadDevAllOutEpInterrupt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1271:10:USB_ReadDevAllInEpInterrupt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1289:10:USB_ReadDevOutEPInterrupt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1307:10:USB_ReadDevInEPInterrupt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1328:7:USB_ClearInterrupts 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1341:10:USB_GetMode 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1351:19:USB_ActivateSetup 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1373:19:USB_EP0_OutStart 12 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1453:19:USB_HostInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1568:19:USB_InitFSLSPClkSel 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1598:19:USB_ResetPort 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1625:19:USB_DriveVbus 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1655:10:USB_GetHostSpeed 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1669:10:USB_GetCurrentFrame 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1700:19:USB_HC_Init 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2095:10:USB_HC_ReadInterrupt 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2109:19:USB_HC_Halt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2193:19:USB_DoPing 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:1832:19:USB_HC_StartXfer 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2217:19:USB_StopHost 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2282:19:USB_ActivateRemoteWakeup 0 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c:2300:19:USB_DeActivateRemoteWakeup 0 static diff --git a/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk new file mode 100644 index 00000000..6a692c63 --- /dev/null +++ b/firmware/numpad/Release/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk @@ -0,0 +1,87 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c + +OBJS += \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + +C_DEPS += \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d + + +# Each subdirectory must supply rules for building sources it contributes +Drivers/STM32F4xx_HAL_Driver/Src/%.o Drivers/STM32F4xx_HAL_Driver/Src/%.su Drivers/STM32F4xx_HAL_Driver/Src/%.cyclo: ../Drivers/STM32F4xx_HAL_Driver/Src/%.c Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src + +clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src: + -$(RM) ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su + +.PHONY: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src + diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk new file mode 100644 index 00000000..d50975d6 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c + +OBJS += \ +./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + +C_DEPS += \ +./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d + + +# Each subdirectory must supply rules for building sources it contributes +Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.o Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.su Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.cyclo: ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/%.c Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Class-2f-HID-2f-Src + +clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Class-2f-HID-2f-Src: + -$(RM) ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su + +.PHONY: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Class-2f-HID-2f-Src + diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo new file mode 100644 index 00000000..c8d80008 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo @@ -0,0 +1,10 @@ +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:607:16:USBD_HID_DataIn 1 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:624:17:USBD_HID_GetDeviceQualifierDesc 1 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:546:17:USBD_HID_GetFSCfgDesc 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:586:17:USBD_HID_GetOtherSpeedCfgDesc 1 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:566:17:USBD_HID_GetHSCfgDesc 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:351:16:USBD_HID_Setup 18 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:320:16:USBD_HID_DeInit 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:273:16:USBD_HID_Init 2 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:483:9:USBD_HID_SendReport 4 +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:516:10:USBD_HID_GetPollingInterval 1 diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d new file mode 100644 index 00000000..dbb7e592 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d @@ -0,0 +1,85 @@ +Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o new file mode 100644 index 00000000..c4ad5d42 Binary files /dev/null and b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o differ diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su new file mode 100644 index 00000000..20eda204 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su @@ -0,0 +1,10 @@ +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:607:16:USBD_HID_DataIn 0 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:624:17:USBD_HID_GetDeviceQualifierDesc 0 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:546:17:USBD_HID_GetFSCfgDesc 8 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:586:17:USBD_HID_GetOtherSpeedCfgDesc 0 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:566:17:USBD_HID_GetHSCfgDesc 8 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:351:16:USBD_HID_Setup 16 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:320:16:USBD_HID_DeInit 16 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:273:16:USBD_HID_Init 16 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:483:9:USBD_HID_SendReport 8 static +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c:516:10:USBD_HID_GetPollingInterval 0 static diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk new file mode 100644 index 00000000..1bb63c34 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk @@ -0,0 +1,33 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c + +OBJS += \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + +C_DEPS += \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d \ +./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d + + +# Each subdirectory must supply rules for building sources it contributes +Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.o Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.su Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.cyclo: ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/%.c Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Core-2f-Src + +clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Core-2f-Src: + -$(RM) ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su + +.PHONY: clean-Middlewares-2f-ST-2f-STM32_USB_Device_Library-2f-Core-2f-Src + diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo new file mode 100644 index 00000000..b915e796 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo @@ -0,0 +1,24 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:92:20:USBD_Init 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:149:20:USBD_DeInit 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:202:20:USBD_RegisterClass 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:384:20:USBD_Start 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:400:20:USBD_Stop 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:440:20:USBD_RunTestMode 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:465:20:USBD_SetClassConfig 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:505:20:USBD_ClrClassConfig 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:546:20:USBD_LL_SetupStage 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:586:20:USBD_LL_DataOutStage 8 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:684:20:USBD_LL_DataInStage 12 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:777:20:USBD_LL_Reset 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:845:20:USBD_LL_SetSpeed 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:859:20:USBD_LL_Suspend 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:877:20:USBD_LL_Resume 2 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:893:20:USBD_LL_SOF 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:936:20:USBD_LL_IsoINIncomplete 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:962:20:USBD_LL_IsoOUTIncomplete 4 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:987:20:USBD_LL_DevConnected 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1001:20:USBD_LL_DevDisconnected 3 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1046:9:USBD_CoreFindIF 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1086:9:USBD_CoreFindEP 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1157:7:USBD_GetEpDesc 5 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1198:25:USBD_GetNextDesc 1 diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d new file mode 100644 index 00000000..f6fb1ae9 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d @@ -0,0 +1,81 @@ +Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o new file mode 100644 index 00000000..4ea1a5fa Binary files /dev/null and b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o differ diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su new file mode 100644 index 00000000..d4285285 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su @@ -0,0 +1,24 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:92:20:USBD_Init 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:149:20:USBD_DeInit 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:202:20:USBD_RegisterClass 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:384:20:USBD_Start 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:400:20:USBD_Stop 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:440:20:USBD_RunTestMode 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:465:20:USBD_SetClassConfig 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:505:20:USBD_ClrClassConfig 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:546:20:USBD_LL_SetupStage 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:586:20:USBD_LL_DataOutStage 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:684:20:USBD_LL_DataInStage 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:777:20:USBD_LL_Reset 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:845:20:USBD_LL_SetSpeed 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:859:20:USBD_LL_Suspend 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:877:20:USBD_LL_Resume 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:893:20:USBD_LL_SOF 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:936:20:USBD_LL_IsoINIncomplete 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:962:20:USBD_LL_IsoOUTIncomplete 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:987:20:USBD_LL_DevConnected 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1001:20:USBD_LL_DevDisconnected 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1046:9:USBD_CoreFindIF 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1086:9:USBD_CoreFindEP 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1157:7:USBD_GetEpDesc 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c:1198:25:USBD_GetNextDesc 0 static diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo new file mode 100644 index 00000000..f2280d9e --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo @@ -0,0 +1,7 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:979:6:USBD_CtlError.constprop 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:104:20:USBD_StdDevReq 58 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:167:20:USBD_StdItfReq 9 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:239:20:USBD_StdEPReq 32 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:950:6:USBD_ParseSetupRequest 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:979:6:USBD_CtlError 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:996:6:USBD_GetString 3 diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d new file mode 100644 index 00000000..692469a4 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d @@ -0,0 +1,83 @@ +Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o new file mode 100644 index 00000000..4949400e Binary files /dev/null and b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o differ diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su new file mode 100644 index 00000000..7cf92096 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su @@ -0,0 +1,7 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:979:6:USBD_CtlError.constprop 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:104:20:USBD_StdDevReq 24 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:167:20:USBD_StdItfReq 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:239:20:USBD_StdEPReq 16 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:950:6:USBD_ParseSetupRequest 0 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:979:6:USBD_CtlError 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c:996:6:USBD_GetString 16 static diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo new file mode 100644 index 00000000..b8d45878 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo @@ -0,0 +1,7 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:86:20:USBD_CtlSendData 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:114:20:USBD_CtlContinueSendData 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:131:20:USBD_CtlPrepareRx 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:159:20:USBD_CtlContinueRx 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:173:20:USBD_CtlSendStatus 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:190:20:USBD_CtlReceiveStatus 1 +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:208:10:USBD_GetRxCount 1 diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d new file mode 100644 index 00000000..68758366 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d @@ -0,0 +1,81 @@ +Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o: \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o new file mode 100644 index 00000000..678e42d4 Binary files /dev/null and b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o differ diff --git a/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su new file mode 100644 index 00000000..c358e6f8 --- /dev/null +++ b/firmware/numpad/Release/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su @@ -0,0 +1,7 @@ +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:86:20:USBD_CtlSendData 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:114:20:USBD_CtlContinueSendData 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:131:20:USBD_CtlPrepareRx 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:159:20:USBD_CtlContinueRx 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:173:20:USBD_CtlSendStatus 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:190:20:USBD_CtlReceiveStatus 8 static +../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c:208:10:USBD_GetRxCount 0 static diff --git a/firmware/numpad/Release/USB_DEVICE/App/subdir.mk b/firmware/numpad/Release/USB_DEVICE/App/subdir.mk new file mode 100644 index 00000000..358c99d6 --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/subdir.mk @@ -0,0 +1,30 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../USB_DEVICE/App/usb_device.c \ +../USB_DEVICE/App/usbd_desc.c + +OBJS += \ +./USB_DEVICE/App/usb_device.o \ +./USB_DEVICE/App/usbd_desc.o + +C_DEPS += \ +./USB_DEVICE/App/usb_device.d \ +./USB_DEVICE/App/usbd_desc.d + + +# Each subdirectory must supply rules for building sources it contributes +USB_DEVICE/App/%.o USB_DEVICE/App/%.su USB_DEVICE/App/%.cyclo: ../USB_DEVICE/App/%.c USB_DEVICE/App/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-USB_DEVICE-2f-App + +clean-USB_DEVICE-2f-App: + -$(RM) ./USB_DEVICE/App/usb_device.cyclo ./USB_DEVICE/App/usb_device.d ./USB_DEVICE/App/usb_device.o ./USB_DEVICE/App/usb_device.su ./USB_DEVICE/App/usbd_desc.cyclo ./USB_DEVICE/App/usbd_desc.d ./USB_DEVICE/App/usbd_desc.o ./USB_DEVICE/App/usbd_desc.su + +.PHONY: clean-USB_DEVICE-2f-App + diff --git a/firmware/numpad/Release/USB_DEVICE/App/usb_device.cyclo b/firmware/numpad/Release/USB_DEVICE/App/usb_device.cyclo new file mode 100644 index 00000000..ff36f216 --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/usb_device.cyclo @@ -0,0 +1 @@ +../USB_DEVICE/App/usb_device.c:63:6:MX_USB_DEVICE_Init 4 diff --git a/firmware/numpad/Release/USB_DEVICE/App/usb_device.d b/firmware/numpad/Release/USB_DEVICE/App/usb_device.d new file mode 100644 index 00000000..f8cd5595 --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/usb_device.d @@ -0,0 +1,90 @@ +USB_DEVICE/App/usb_device.o: ../USB_DEVICE/App/usb_device.c \ + ../USB_DEVICE/App/usb_device.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../USB_DEVICE/App/usbd_desc.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h +../USB_DEVICE/App/usb_device.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../USB_DEVICE/App/usbd_desc.h: +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: diff --git a/firmware/numpad/Release/USB_DEVICE/App/usb_device.o b/firmware/numpad/Release/USB_DEVICE/App/usb_device.o new file mode 100644 index 00000000..2dd43363 Binary files /dev/null and b/firmware/numpad/Release/USB_DEVICE/App/usb_device.o differ diff --git a/firmware/numpad/Release/USB_DEVICE/App/usb_device.su b/firmware/numpad/Release/USB_DEVICE/App/usb_device.su new file mode 100644 index 00000000..e29c600d --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/usb_device.su @@ -0,0 +1 @@ +../USB_DEVICE/App/usb_device.c:63:6:MX_USB_DEVICE_Init 8 static diff --git a/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.cyclo b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.cyclo new file mode 100644 index 00000000..09c8122a --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.cyclo @@ -0,0 +1,9 @@ +../USB_DEVICE/App/usbd_desc.c:258:11:USBD_FS_DeviceDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:271:11:USBD_FS_LangIDStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:375:11:USBD_FS_USR_BOSDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:414:13:IntToUnicode 3 +../USB_DEVICE/App/usbd_desc.c:316:11:USBD_FS_SerialStrDescriptor 2 +../USB_DEVICE/App/usbd_desc.c:303:11:USBD_FS_ManufacturerStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:284:11:USBD_FS_ProductStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:336:11:USBD_FS_ConfigStrDescriptor 1 +../USB_DEVICE/App/usbd_desc.c:355:11:USBD_FS_InterfaceStrDescriptor 1 diff --git a/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.d b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.d new file mode 100644 index 00000000..e610db0b --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.d @@ -0,0 +1,84 @@ +USB_DEVICE/App/usbd_desc.o: ../USB_DEVICE/App/usbd_desc.c \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../USB_DEVICE/App/usbd_desc.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../USB_DEVICE/App/usbd_desc.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: diff --git a/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.o b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.o new file mode 100644 index 00000000..2d879c9c Binary files /dev/null and b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.o differ diff --git a/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.su b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.su new file mode 100644 index 00000000..3e298ea6 --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/App/usbd_desc.su @@ -0,0 +1,9 @@ +../USB_DEVICE/App/usbd_desc.c:258:11:USBD_FS_DeviceDescriptor 0 static +../USB_DEVICE/App/usbd_desc.c:271:11:USBD_FS_LangIDStrDescriptor 0 static +../USB_DEVICE/App/usbd_desc.c:375:11:USBD_FS_USR_BOSDescriptor 0 static +../USB_DEVICE/App/usbd_desc.c:414:13:IntToUnicode 16 static +../USB_DEVICE/App/usbd_desc.c:316:11:USBD_FS_SerialStrDescriptor 8 static +../USB_DEVICE/App/usbd_desc.c:303:11:USBD_FS_ManufacturerStrDescriptor 8 static +../USB_DEVICE/App/usbd_desc.c:284:11:USBD_FS_ProductStrDescriptor 8 static +../USB_DEVICE/App/usbd_desc.c:336:11:USBD_FS_ConfigStrDescriptor 8 static +../USB_DEVICE/App/usbd_desc.c:355:11:USBD_FS_InterfaceStrDescriptor 8 static diff --git a/firmware/numpad/Release/USB_DEVICE/Target/subdir.mk b/firmware/numpad/Release/USB_DEVICE/Target/subdir.mk new file mode 100644 index 00000000..9f55130b --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/Target/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../USB_DEVICE/Target/usbd_conf.c + +OBJS += \ +./USB_DEVICE/Target/usbd_conf.o + +C_DEPS += \ +./USB_DEVICE/Target/usbd_conf.d + + +# Each subdirectory must supply rules for building sources it contributes +USB_DEVICE/Target/%.o USB_DEVICE/Target/%.su USB_DEVICE/Target/%.cyclo: ../USB_DEVICE/Target/%.c USB_DEVICE/Target/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-USB_DEVICE-2f-Target + +clean-USB_DEVICE-2f-Target: + -$(RM) ./USB_DEVICE/Target/usbd_conf.cyclo ./USB_DEVICE/Target/usbd_conf.d ./USB_DEVICE/Target/usbd_conf.o ./USB_DEVICE/Target/usbd_conf.su + +.PHONY: clean-USB_DEVICE-2f-Target + diff --git a/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.cyclo b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.cyclo new file mode 100644 index 00000000..01f51e43 --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.cyclo @@ -0,0 +1,32 @@ +../USB_DEVICE/Target/usbd_conf.c:69:6:HAL_PCD_MspInit 3 +../USB_DEVICE/Target/usbd_conf.c:112:6:HAL_PCD_MspDeInit 2 +../USB_DEVICE/Target/usbd_conf.c:145:6:HAL_PCD_SetupStageCallback 1 +../USB_DEVICE/Target/usbd_conf.c:160:6:HAL_PCD_DataOutStageCallback 1 +../USB_DEVICE/Target/usbd_conf.c:175:6:HAL_PCD_DataInStageCallback 1 +../USB_DEVICE/Target/usbd_conf.c:189:6:HAL_PCD_SOFCallback 1 +../USB_DEVICE/Target/usbd_conf.c:203:6:HAL_PCD_ResetCallback 3 +../USB_DEVICE/Target/usbd_conf.c:236:6:HAL_PCD_SuspendCallback 2 +../USB_DEVICE/Target/usbd_conf.c:261:6:HAL_PCD_ResumeCallback 1 +../USB_DEVICE/Target/usbd_conf.c:279:6:HAL_PCD_ISOOUTIncompleteCallback 1 +../USB_DEVICE/Target/usbd_conf.c:294:6:HAL_PCD_ISOINIncompleteCallback 1 +../USB_DEVICE/Target/usbd_conf.c:308:6:HAL_PCD_ConnectCallback 1 +../USB_DEVICE/Target/usbd_conf.c:322:6:HAL_PCD_DisconnectCallback 1 +../USB_DEVICE/Target/usbd_conf.c:337:20:USBD_LL_Init 3 +../USB_DEVICE/Target/usbd_conf.c:531:9:USBD_LL_IsStallEP 2 +../USB_DEVICE/Target/usbd_conf.c:609:10:USBD_LL_GetRxDataSize 1 +../USB_DEVICE/Target/usbd_conf.c:620:6:HAL_PCDEx_LPM_Callback 5 +../USB_DEVICE/Target/usbd_conf.c:671:7:USBD_static_malloc 1 +../USB_DEVICE/Target/usbd_conf.c:682:6:USBD_static_free 1 +../USB_DEVICE/Target/usbd_conf.c:692:6:USBD_LL_Delay 1 +../USB_DEVICE/Target/usbd_conf.c:702:20:USBD_Get_USB_Status 2 +../USB_DEVICE/Target/usbd_conf.c:387:20:USBD_LL_DeInit 1 +../USB_DEVICE/Target/usbd_conf.c:404:20:USBD_LL_Start 1 +../USB_DEVICE/Target/usbd_conf.c:421:20:USBD_LL_Stop 1 +../USB_DEVICE/Target/usbd_conf.c:441:20:USBD_LL_OpenEP 1 +../USB_DEVICE/Target/usbd_conf.c:459:20:USBD_LL_CloseEP 1 +../USB_DEVICE/Target/usbd_conf.c:477:20:USBD_LL_FlushEP 1 +../USB_DEVICE/Target/usbd_conf.c:495:20:USBD_LL_StallEP 1 +../USB_DEVICE/Target/usbd_conf.c:513:20:USBD_LL_ClearStallEP 1 +../USB_DEVICE/Target/usbd_conf.c:551:20:USBD_LL_SetUSBAddress 1 +../USB_DEVICE/Target/usbd_conf.c:571:20:USBD_LL_Transmit 1 +../USB_DEVICE/Target/usbd_conf.c:591:20:USBD_LL_PrepareReceive 1 diff --git a/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.d b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.d new file mode 100644 index 00000000..5fb644c5 --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.d @@ -0,0 +1,86 @@ +USB_DEVICE/Target/usbd_conf.o: ../USB_DEVICE/Target/usbd_conf.c \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/main.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \ + ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../USB_DEVICE/Target/usbd_conf.h: +../Core/Inc/main.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h: +../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h: +../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h: diff --git a/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.o b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.o new file mode 100644 index 00000000..ef263190 Binary files /dev/null and b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.o differ diff --git a/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.su b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.su new file mode 100644 index 00000000..00773c1e --- /dev/null +++ b/firmware/numpad/Release/USB_DEVICE/Target/usbd_conf.su @@ -0,0 +1,32 @@ +../USB_DEVICE/Target/usbd_conf.c:69:6:HAL_PCD_MspInit 136 static +../USB_DEVICE/Target/usbd_conf.c:112:6:HAL_PCD_MspDeInit 8 static +../USB_DEVICE/Target/usbd_conf.c:145:6:HAL_PCD_SetupStageCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:160:6:HAL_PCD_DataOutStageCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:175:6:HAL_PCD_DataInStageCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:189:6:HAL_PCD_SOFCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:203:6:HAL_PCD_ResetCallback 8 static +../USB_DEVICE/Target/usbd_conf.c:236:6:HAL_PCD_SuspendCallback 8 static +../USB_DEVICE/Target/usbd_conf.c:261:6:HAL_PCD_ResumeCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:279:6:HAL_PCD_ISOOUTIncompleteCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:294:6:HAL_PCD_ISOINIncompleteCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:308:6:HAL_PCD_ConnectCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:322:6:HAL_PCD_DisconnectCallback 0 static +../USB_DEVICE/Target/usbd_conf.c:337:20:USBD_LL_Init 8 static +../USB_DEVICE/Target/usbd_conf.c:531:9:USBD_LL_IsStallEP 0 static +../USB_DEVICE/Target/usbd_conf.c:609:10:USBD_LL_GetRxDataSize 0 static +../USB_DEVICE/Target/usbd_conf.c:620:6:HAL_PCDEx_LPM_Callback 8 static +../USB_DEVICE/Target/usbd_conf.c:671:7:USBD_static_malloc 0 static +../USB_DEVICE/Target/usbd_conf.c:682:6:USBD_static_free 0 static +../USB_DEVICE/Target/usbd_conf.c:692:6:USBD_LL_Delay 0 static +../USB_DEVICE/Target/usbd_conf.c:702:20:USBD_Get_USB_Status 0 static +../USB_DEVICE/Target/usbd_conf.c:387:20:USBD_LL_DeInit 8 static +../USB_DEVICE/Target/usbd_conf.c:404:20:USBD_LL_Start 8 static +../USB_DEVICE/Target/usbd_conf.c:421:20:USBD_LL_Stop 8 static +../USB_DEVICE/Target/usbd_conf.c:441:20:USBD_LL_OpenEP 8 static +../USB_DEVICE/Target/usbd_conf.c:459:20:USBD_LL_CloseEP 8 static +../USB_DEVICE/Target/usbd_conf.c:477:20:USBD_LL_FlushEP 8 static +../USB_DEVICE/Target/usbd_conf.c:495:20:USBD_LL_StallEP 8 static +../USB_DEVICE/Target/usbd_conf.c:513:20:USBD_LL_ClearStallEP 8 static +../USB_DEVICE/Target/usbd_conf.c:551:20:USBD_LL_SetUSBAddress 8 static +../USB_DEVICE/Target/usbd_conf.c:571:20:USBD_LL_Transmit 8 static +../USB_DEVICE/Target/usbd_conf.c:591:20:USBD_LL_PrepareReceive 8 static diff --git a/firmware/numpad/Release/makefile b/firmware/numpad/Release/makefile new file mode 100644 index 00000000..d7889bf9 --- /dev/null +++ b/firmware/numpad/Release/makefile @@ -0,0 +1,98 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include USB_DEVICE/Target/subdir.mk +-include USB_DEVICE/App/subdir.mk +-include Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk +-include Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk +-include Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk +-include Core/Startup/subdir.mk +-include Core/Src/subdir.mk +-include objects.mk + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(S_DEPS)),) +-include $(S_DEPS) +endif +ifneq ($(strip $(S_UPPER_DEPS)),) +-include $(S_UPPER_DEPS) +endif +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +-include ../makefile.defs + +OPTIONAL_TOOL_DEPS := \ +$(wildcard ../makefile.defs) \ +$(wildcard ../makefile.init) \ +$(wildcard ../makefile.targets) \ + + +BUILD_ARTIFACT_NAME := modularkbd +BUILD_ARTIFACT_EXTENSION := elf +BUILD_ARTIFACT_PREFIX := +BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),) + +# Add inputs and outputs from these tool invocations to the build variables +EXECUTABLES += \ +modularkbd.elf \ + +MAP_FILES += \ +modularkbd.map \ + +SIZE_OUTPUT += \ +default.size.stdout \ + +OBJDUMP_LIST += \ +modularkbd.list \ + + +# All Target +all: main-build + +# Main-build Target +main-build: modularkbd.elf secondary-outputs + +# Tool invocations +modularkbd.elf modularkbd.map: $(OBJS) $(USER_OBJS) /home/ukim/Projects/modular-kbd/firmware/stm32cubeide_workspace/modularkbd/STM32F446RETX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-gcc -o "modularkbd.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"/home/ukim/Projects/modular-kbd/firmware/stm32cubeide_workspace/modularkbd/STM32F446RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="modularkbd.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group + @echo 'Finished building target: $@' + @echo ' ' + +default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-size $(EXECUTABLES) + @echo 'Finished building: $@' + @echo ' ' + +modularkbd.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-objdump -h -S $(EXECUTABLES) > "modularkbd.list" + @echo 'Finished building: $@' + @echo ' ' + +# Other Targets +clean: + -$(RM) default.size.stdout modularkbd.elf modularkbd.list modularkbd.map + -@echo ' ' + +secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) + +fail-specified-linker-script-missing: + @echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.' + @exit 2 + +warn-no-linker-script-specified: + @echo 'Warning: No linker script specified. Check the linker settings in the build configuration.' + +.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified + +-include ../makefile.targets diff --git a/firmware/numpad/Release/modularkbd.elf b/firmware/numpad/Release/modularkbd.elf new file mode 100755 index 00000000..32e106d1 Binary files /dev/null and b/firmware/numpad/Release/modularkbd.elf differ diff --git a/firmware/numpad/Release/modularkbd.list b/firmware/numpad/Release/modularkbd.list new file mode 100644 index 00000000..baee7d80 --- /dev/null +++ b/firmware/numpad/Release/modularkbd.list @@ -0,0 +1,5636 @@ + +modularkbd.elf: file format elf32-littlearm + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .isr_vector 000001c4 08000000 08000000 00001000 2**0 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 1 .text 00003718 080001c4 080001c4 000011c4 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .rodata 00000044 080038dc 080038dc 000048dc 2**0 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .ARM.extab 00000000 08003920 08003920 00005120 2**0 + CONTENTS, READONLY + 4 .ARM 00000008 08003920 08003920 00004920 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 5 .preinit_array 00000000 08003928 08003928 00005120 2**0 + CONTENTS, ALLOC, LOAD, DATA + 6 .init_array 00000004 08003928 08003928 00004928 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 7 .fini_array 00000004 0800392c 0800392c 0000492c 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 8 .data 00000120 20000000 08003930 00005000 2**2 + CONTENTS, ALLOC, LOAD, DATA + 9 .bss 00000a00 20000120 08003a50 00005120 2**2 + ALLOC + 10 ._user_heap_stack 00000600 20000b20 08003a50 00005b20 2**0 + ALLOC + 11 .ARM.attributes 00000030 00000000 00000000 00005120 2**0 + CONTENTS, READONLY + 12 .comment 00000043 00000000 00000000 00005150 2**0 + CONTENTS, READONLY + 13 .debug_frame 000000ac 00000000 00000000 00005194 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + +Disassembly of section .text: + +080001c4 <__do_global_dtors_aux>: + 80001c4: b510 push {r4, lr} + 80001c6: 4c05 ldr r4, [pc, #20] @ (80001dc <__do_global_dtors_aux+0x18>) + 80001c8: 7823 ldrb r3, [r4, #0] + 80001ca: b933 cbnz r3, 80001da <__do_global_dtors_aux+0x16> + 80001cc: 4b04 ldr r3, [pc, #16] @ (80001e0 <__do_global_dtors_aux+0x1c>) + 80001ce: b113 cbz r3, 80001d6 <__do_global_dtors_aux+0x12> + 80001d0: 4804 ldr r0, [pc, #16] @ (80001e4 <__do_global_dtors_aux+0x20>) + 80001d2: f3af 8000 nop.w + 80001d6: 2301 movs r3, #1 + 80001d8: 7023 strb r3, [r4, #0] + 80001da: bd10 pop {r4, pc} + 80001dc: 20000120 .word 0x20000120 + 80001e0: 00000000 .word 0x00000000 + 80001e4: 080038c4 .word 0x080038c4 + +080001e8 : + 80001e8: b508 push {r3, lr} + 80001ea: 4b03 ldr r3, [pc, #12] @ (80001f8 ) + 80001ec: b11b cbz r3, 80001f6 + 80001ee: 4903 ldr r1, [pc, #12] @ (80001fc ) + 80001f0: 4803 ldr r0, [pc, #12] @ (8000200 ) + 80001f2: f3af 8000 nop.w + 80001f6: bd08 pop {r3, pc} + 80001f8: 00000000 .word 0x00000000 + 80001fc: 20000124 .word 0x20000124 + 8000200: 080038c4 .word 0x080038c4 + +08000204 : + 8000204: 4603 mov r3, r0 + 8000206: f813 2b01 ldrb.w r2, [r3], #1 + 800020a: 2a00 cmp r2, #0 + 800020c: d1fb bne.n 8000206 + 800020e: 1a18 subs r0, r3, r0 + 8000210: 3801 subs r0, #1 + 8000212: 4770 bx lr + +08000214 <__aeabi_uldivmod>: + 8000214: b953 cbnz r3, 800022c <__aeabi_uldivmod+0x18> + 8000216: b94a cbnz r2, 800022c <__aeabi_uldivmod+0x18> + 8000218: 2900 cmp r1, #0 + 800021a: bf08 it eq + 800021c: 2800 cmpeq r0, #0 + 800021e: bf1c itt ne + 8000220: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff + 8000224: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff + 8000228: f000 b988 b.w 800053c <__aeabi_idiv0> + 800022c: f1ad 0c08 sub.w ip, sp, #8 + 8000230: e96d ce04 strd ip, lr, [sp, #-16]! + 8000234: f000 f806 bl 8000244 <__udivmoddi4> + 8000238: f8dd e004 ldr.w lr, [sp, #4] + 800023c: e9dd 2302 ldrd r2, r3, [sp, #8] + 8000240: b004 add sp, #16 + 8000242: 4770 bx lr + +08000244 <__udivmoddi4>: + 8000244: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8000248: 9d08 ldr r5, [sp, #32] + 800024a: 468e mov lr, r1 + 800024c: 4604 mov r4, r0 + 800024e: 4688 mov r8, r1 + 8000250: 2b00 cmp r3, #0 + 8000252: d14a bne.n 80002ea <__udivmoddi4+0xa6> + 8000254: 428a cmp r2, r1 + 8000256: 4617 mov r7, r2 + 8000258: d962 bls.n 8000320 <__udivmoddi4+0xdc> + 800025a: fab2 f682 clz r6, r2 + 800025e: b14e cbz r6, 8000274 <__udivmoddi4+0x30> + 8000260: f1c6 0320 rsb r3, r6, #32 + 8000264: fa01 f806 lsl.w r8, r1, r6 + 8000268: fa20 f303 lsr.w r3, r0, r3 + 800026c: 40b7 lsls r7, r6 + 800026e: ea43 0808 orr.w r8, r3, r8 + 8000272: 40b4 lsls r4, r6 + 8000274: ea4f 4e17 mov.w lr, r7, lsr #16 + 8000278: fa1f fc87 uxth.w ip, r7 + 800027c: fbb8 f1fe udiv r1, r8, lr + 8000280: 0c23 lsrs r3, r4, #16 + 8000282: fb0e 8811 mls r8, lr, r1, r8 + 8000286: ea43 4308 orr.w r3, r3, r8, lsl #16 + 800028a: fb01 f20c mul.w r2, r1, ip + 800028e: 429a cmp r2, r3 + 8000290: d909 bls.n 80002a6 <__udivmoddi4+0x62> + 8000292: 18fb adds r3, r7, r3 + 8000294: f101 30ff add.w r0, r1, #4294967295 @ 0xffffffff + 8000298: f080 80ea bcs.w 8000470 <__udivmoddi4+0x22c> + 800029c: 429a cmp r2, r3 + 800029e: f240 80e7 bls.w 8000470 <__udivmoddi4+0x22c> + 80002a2: 3902 subs r1, #2 + 80002a4: 443b add r3, r7 + 80002a6: 1a9a subs r2, r3, r2 + 80002a8: b2a3 uxth r3, r4 + 80002aa: fbb2 f0fe udiv r0, r2, lr + 80002ae: fb0e 2210 mls r2, lr, r0, r2 + 80002b2: ea43 4302 orr.w r3, r3, r2, lsl #16 + 80002b6: fb00 fc0c mul.w ip, r0, ip + 80002ba: 459c cmp ip, r3 + 80002bc: d909 bls.n 80002d2 <__udivmoddi4+0x8e> + 80002be: 18fb adds r3, r7, r3 + 80002c0: f100 32ff add.w r2, r0, #4294967295 @ 0xffffffff + 80002c4: f080 80d6 bcs.w 8000474 <__udivmoddi4+0x230> + 80002c8: 459c cmp ip, r3 + 80002ca: f240 80d3 bls.w 8000474 <__udivmoddi4+0x230> + 80002ce: 443b add r3, r7 + 80002d0: 3802 subs r0, #2 + 80002d2: ea40 4001 orr.w r0, r0, r1, lsl #16 + 80002d6: eba3 030c sub.w r3, r3, ip + 80002da: 2100 movs r1, #0 + 80002dc: b11d cbz r5, 80002e6 <__udivmoddi4+0xa2> + 80002de: 40f3 lsrs r3, r6 + 80002e0: 2200 movs r2, #0 + 80002e2: e9c5 3200 strd r3, r2, [r5] + 80002e6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80002ea: 428b cmp r3, r1 + 80002ec: d905 bls.n 80002fa <__udivmoddi4+0xb6> + 80002ee: b10d cbz r5, 80002f4 <__udivmoddi4+0xb0> + 80002f0: e9c5 0100 strd r0, r1, [r5] + 80002f4: 2100 movs r1, #0 + 80002f6: 4608 mov r0, r1 + 80002f8: e7f5 b.n 80002e6 <__udivmoddi4+0xa2> + 80002fa: fab3 f183 clz r1, r3 + 80002fe: 2900 cmp r1, #0 + 8000300: d146 bne.n 8000390 <__udivmoddi4+0x14c> + 8000302: 4573 cmp r3, lr + 8000304: d302 bcc.n 800030c <__udivmoddi4+0xc8> + 8000306: 4282 cmp r2, r0 + 8000308: f200 8105 bhi.w 8000516 <__udivmoddi4+0x2d2> + 800030c: 1a84 subs r4, r0, r2 + 800030e: eb6e 0203 sbc.w r2, lr, r3 + 8000312: 2001 movs r0, #1 + 8000314: 4690 mov r8, r2 + 8000316: 2d00 cmp r5, #0 + 8000318: d0e5 beq.n 80002e6 <__udivmoddi4+0xa2> + 800031a: e9c5 4800 strd r4, r8, [r5] + 800031e: e7e2 b.n 80002e6 <__udivmoddi4+0xa2> + 8000320: 2a00 cmp r2, #0 + 8000322: f000 8090 beq.w 8000446 <__udivmoddi4+0x202> + 8000326: fab2 f682 clz r6, r2 + 800032a: 2e00 cmp r6, #0 + 800032c: f040 80a4 bne.w 8000478 <__udivmoddi4+0x234> + 8000330: 1a8a subs r2, r1, r2 + 8000332: 0c03 lsrs r3, r0, #16 + 8000334: ea4f 4e17 mov.w lr, r7, lsr #16 + 8000338: b280 uxth r0, r0 + 800033a: b2bc uxth r4, r7 + 800033c: 2101 movs r1, #1 + 800033e: fbb2 fcfe udiv ip, r2, lr + 8000342: fb0e 221c mls r2, lr, ip, r2 + 8000346: ea43 4302 orr.w r3, r3, r2, lsl #16 + 800034a: fb04 f20c mul.w r2, r4, ip + 800034e: 429a cmp r2, r3 + 8000350: d907 bls.n 8000362 <__udivmoddi4+0x11e> + 8000352: 18fb adds r3, r7, r3 + 8000354: f10c 38ff add.w r8, ip, #4294967295 @ 0xffffffff + 8000358: d202 bcs.n 8000360 <__udivmoddi4+0x11c> + 800035a: 429a cmp r2, r3 + 800035c: f200 80e0 bhi.w 8000520 <__udivmoddi4+0x2dc> + 8000360: 46c4 mov ip, r8 + 8000362: 1a9b subs r3, r3, r2 + 8000364: fbb3 f2fe udiv r2, r3, lr + 8000368: fb0e 3312 mls r3, lr, r2, r3 + 800036c: ea40 4303 orr.w r3, r0, r3, lsl #16 + 8000370: fb02 f404 mul.w r4, r2, r4 + 8000374: 429c cmp r4, r3 + 8000376: d907 bls.n 8000388 <__udivmoddi4+0x144> + 8000378: 18fb adds r3, r7, r3 + 800037a: f102 30ff add.w r0, r2, #4294967295 @ 0xffffffff + 800037e: d202 bcs.n 8000386 <__udivmoddi4+0x142> + 8000380: 429c cmp r4, r3 + 8000382: f200 80ca bhi.w 800051a <__udivmoddi4+0x2d6> + 8000386: 4602 mov r2, r0 + 8000388: 1b1b subs r3, r3, r4 + 800038a: ea42 400c orr.w r0, r2, ip, lsl #16 + 800038e: e7a5 b.n 80002dc <__udivmoddi4+0x98> + 8000390: f1c1 0620 rsb r6, r1, #32 + 8000394: 408b lsls r3, r1 + 8000396: fa22 f706 lsr.w r7, r2, r6 + 800039a: 431f orrs r7, r3 + 800039c: fa0e f401 lsl.w r4, lr, r1 + 80003a0: fa20 f306 lsr.w r3, r0, r6 + 80003a4: fa2e fe06 lsr.w lr, lr, r6 + 80003a8: ea4f 4917 mov.w r9, r7, lsr #16 + 80003ac: 4323 orrs r3, r4 + 80003ae: fa00 f801 lsl.w r8, r0, r1 + 80003b2: fa1f fc87 uxth.w ip, r7 + 80003b6: fbbe f0f9 udiv r0, lr, r9 + 80003ba: 0c1c lsrs r4, r3, #16 + 80003bc: fb09 ee10 mls lr, r9, r0, lr + 80003c0: ea44 440e orr.w r4, r4, lr, lsl #16 + 80003c4: fb00 fe0c mul.w lr, r0, ip + 80003c8: 45a6 cmp lr, r4 + 80003ca: fa02 f201 lsl.w r2, r2, r1 + 80003ce: d909 bls.n 80003e4 <__udivmoddi4+0x1a0> + 80003d0: 193c adds r4, r7, r4 + 80003d2: f100 3aff add.w sl, r0, #4294967295 @ 0xffffffff + 80003d6: f080 809c bcs.w 8000512 <__udivmoddi4+0x2ce> + 80003da: 45a6 cmp lr, r4 + 80003dc: f240 8099 bls.w 8000512 <__udivmoddi4+0x2ce> + 80003e0: 3802 subs r0, #2 + 80003e2: 443c add r4, r7 + 80003e4: eba4 040e sub.w r4, r4, lr + 80003e8: fa1f fe83 uxth.w lr, r3 + 80003ec: fbb4 f3f9 udiv r3, r4, r9 + 80003f0: fb09 4413 mls r4, r9, r3, r4 + 80003f4: ea4e 4404 orr.w r4, lr, r4, lsl #16 + 80003f8: fb03 fc0c mul.w ip, r3, ip + 80003fc: 45a4 cmp ip, r4 + 80003fe: d908 bls.n 8000412 <__udivmoddi4+0x1ce> + 8000400: 193c adds r4, r7, r4 + 8000402: f103 3eff add.w lr, r3, #4294967295 @ 0xffffffff + 8000406: f080 8082 bcs.w 800050e <__udivmoddi4+0x2ca> + 800040a: 45a4 cmp ip, r4 + 800040c: d97f bls.n 800050e <__udivmoddi4+0x2ca> + 800040e: 3b02 subs r3, #2 + 8000410: 443c add r4, r7 + 8000412: ea43 4000 orr.w r0, r3, r0, lsl #16 + 8000416: eba4 040c sub.w r4, r4, ip + 800041a: fba0 ec02 umull lr, ip, r0, r2 + 800041e: 4564 cmp r4, ip + 8000420: 4673 mov r3, lr + 8000422: 46e1 mov r9, ip + 8000424: d362 bcc.n 80004ec <__udivmoddi4+0x2a8> + 8000426: d05f beq.n 80004e8 <__udivmoddi4+0x2a4> + 8000428: b15d cbz r5, 8000442 <__udivmoddi4+0x1fe> + 800042a: ebb8 0203 subs.w r2, r8, r3 + 800042e: eb64 0409 sbc.w r4, r4, r9 + 8000432: fa04 f606 lsl.w r6, r4, r6 + 8000436: fa22 f301 lsr.w r3, r2, r1 + 800043a: 431e orrs r6, r3 + 800043c: 40cc lsrs r4, r1 + 800043e: e9c5 6400 strd r6, r4, [r5] + 8000442: 2100 movs r1, #0 + 8000444: e74f b.n 80002e6 <__udivmoddi4+0xa2> + 8000446: fbb1 fcf2 udiv ip, r1, r2 + 800044a: 0c01 lsrs r1, r0, #16 + 800044c: ea41 410e orr.w r1, r1, lr, lsl #16 + 8000450: b280 uxth r0, r0 + 8000452: ea40 4201 orr.w r2, r0, r1, lsl #16 + 8000456: 463b mov r3, r7 + 8000458: 4638 mov r0, r7 + 800045a: 463c mov r4, r7 + 800045c: 46b8 mov r8, r7 + 800045e: 46be mov lr, r7 + 8000460: 2620 movs r6, #32 + 8000462: fbb1 f1f7 udiv r1, r1, r7 + 8000466: eba2 0208 sub.w r2, r2, r8 + 800046a: ea41 410c orr.w r1, r1, ip, lsl #16 + 800046e: e766 b.n 800033e <__udivmoddi4+0xfa> + 8000470: 4601 mov r1, r0 + 8000472: e718 b.n 80002a6 <__udivmoddi4+0x62> + 8000474: 4610 mov r0, r2 + 8000476: e72c b.n 80002d2 <__udivmoddi4+0x8e> + 8000478: f1c6 0220 rsb r2, r6, #32 + 800047c: fa2e f302 lsr.w r3, lr, r2 + 8000480: 40b7 lsls r7, r6 + 8000482: 40b1 lsls r1, r6 + 8000484: fa20 f202 lsr.w r2, r0, r2 + 8000488: ea4f 4e17 mov.w lr, r7, lsr #16 + 800048c: 430a orrs r2, r1 + 800048e: fbb3 f8fe udiv r8, r3, lr + 8000492: b2bc uxth r4, r7 + 8000494: fb0e 3318 mls r3, lr, r8, r3 + 8000498: 0c11 lsrs r1, r2, #16 + 800049a: ea41 4103 orr.w r1, r1, r3, lsl #16 + 800049e: fb08 f904 mul.w r9, r8, r4 + 80004a2: 40b0 lsls r0, r6 + 80004a4: 4589 cmp r9, r1 + 80004a6: ea4f 4310 mov.w r3, r0, lsr #16 + 80004aa: b280 uxth r0, r0 + 80004ac: d93e bls.n 800052c <__udivmoddi4+0x2e8> + 80004ae: 1879 adds r1, r7, r1 + 80004b0: f108 3cff add.w ip, r8, #4294967295 @ 0xffffffff + 80004b4: d201 bcs.n 80004ba <__udivmoddi4+0x276> + 80004b6: 4589 cmp r9, r1 + 80004b8: d81f bhi.n 80004fa <__udivmoddi4+0x2b6> + 80004ba: eba1 0109 sub.w r1, r1, r9 + 80004be: fbb1 f9fe udiv r9, r1, lr + 80004c2: fb09 f804 mul.w r8, r9, r4 + 80004c6: fb0e 1119 mls r1, lr, r9, r1 + 80004ca: b292 uxth r2, r2 + 80004cc: ea42 4201 orr.w r2, r2, r1, lsl #16 + 80004d0: 4542 cmp r2, r8 + 80004d2: d229 bcs.n 8000528 <__udivmoddi4+0x2e4> + 80004d4: 18ba adds r2, r7, r2 + 80004d6: f109 31ff add.w r1, r9, #4294967295 @ 0xffffffff + 80004da: d2c4 bcs.n 8000466 <__udivmoddi4+0x222> + 80004dc: 4542 cmp r2, r8 + 80004de: d2c2 bcs.n 8000466 <__udivmoddi4+0x222> + 80004e0: f1a9 0102 sub.w r1, r9, #2 + 80004e4: 443a add r2, r7 + 80004e6: e7be b.n 8000466 <__udivmoddi4+0x222> + 80004e8: 45f0 cmp r8, lr + 80004ea: d29d bcs.n 8000428 <__udivmoddi4+0x1e4> + 80004ec: ebbe 0302 subs.w r3, lr, r2 + 80004f0: eb6c 0c07 sbc.w ip, ip, r7 + 80004f4: 3801 subs r0, #1 + 80004f6: 46e1 mov r9, ip + 80004f8: e796 b.n 8000428 <__udivmoddi4+0x1e4> + 80004fa: eba7 0909 sub.w r9, r7, r9 + 80004fe: 4449 add r1, r9 + 8000500: f1a8 0c02 sub.w ip, r8, #2 + 8000504: fbb1 f9fe udiv r9, r1, lr + 8000508: fb09 f804 mul.w r8, r9, r4 + 800050c: e7db b.n 80004c6 <__udivmoddi4+0x282> + 800050e: 4673 mov r3, lr + 8000510: e77f b.n 8000412 <__udivmoddi4+0x1ce> + 8000512: 4650 mov r0, sl + 8000514: e766 b.n 80003e4 <__udivmoddi4+0x1a0> + 8000516: 4608 mov r0, r1 + 8000518: e6fd b.n 8000316 <__udivmoddi4+0xd2> + 800051a: 443b add r3, r7 + 800051c: 3a02 subs r2, #2 + 800051e: e733 b.n 8000388 <__udivmoddi4+0x144> + 8000520: f1ac 0c02 sub.w ip, ip, #2 + 8000524: 443b add r3, r7 + 8000526: e71c b.n 8000362 <__udivmoddi4+0x11e> + 8000528: 4649 mov r1, r9 + 800052a: e79c b.n 8000466 <__udivmoddi4+0x222> + 800052c: eba1 0109 sub.w r1, r1, r9 + 8000530: 46c4 mov ip, r8 + 8000532: fbb1 f9fe udiv r9, r1, lr + 8000536: fb09 f804 mul.w r8, r9, r4 + 800053a: e7c4 b.n 80004c6 <__udivmoddi4+0x282> + +0800053c <__aeabi_idiv0>: + 800053c: 4770 bx lr + 800053e: bf00 nop + +08000540 : + 8000540: b500 push {lr} + 8000542: b095 sub sp, #84 @ 0x54 + 8000544: 2214 movs r2, #20 + 8000546: 2100 movs r1, #0 + 8000548: a808 add r0, sp, #32 + 800054a: f003 f98f bl 800386c + 800054e: 2214 movs r2, #20 + 8000550: 2100 movs r1, #0 + 8000552: a802 add r0, sp, #8 + 8000554: f003 f98a bl 800386c + 8000558: 4b20 ldr r3, [pc, #128] @ (80005dc ) + 800055a: 2100 movs r1, #0 + 800055c: 9100 str r1, [sp, #0] + 800055e: 6c1a ldr r2, [r3, #64] @ 0x40 + 8000560: f042 5280 orr.w r2, r2, #268435456 @ 0x10000000 + 8000564: 641a str r2, [r3, #64] @ 0x40 + 8000566: 6c1b ldr r3, [r3, #64] @ 0x40 + 8000568: 4a1d ldr r2, [pc, #116] @ (80005e0 ) + 800056a: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800056e: 9300 str r3, [sp, #0] + 8000570: 9b00 ldr r3, [sp, #0] + 8000572: 9101 str r1, [sp, #4] + 8000574: 6813 ldr r3, [r2, #0] + 8000576: f423 4340 bic.w r3, r3, #49152 @ 0xc000 + 800057a: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 800057e: 6013 str r3, [r2, #0] + 8000580: 6813 ldr r3, [r2, #0] + 8000582: 2101 movs r1, #1 + 8000584: f403 4340 and.w r3, r3, #49152 @ 0xc000 + 8000588: 2210 movs r2, #16 + 800058a: e9cd 120a strd r1, r2, [sp, #40] @ 0x28 + 800058e: 9301 str r3, [sp, #4] + 8000590: f44f 0080 mov.w r0, #4194304 @ 0x400000 + 8000594: 2204 movs r2, #4 + 8000596: e9cd 020e strd r0, r2, [sp, #56] @ 0x38 + 800059a: 9b01 ldr r3, [sp, #4] + 800059c: 2248 movs r2, #72 @ 0x48 + 800059e: 2302 movs r3, #2 + 80005a0: e9cd 2310 strd r2, r3, [sp, #64] @ 0x40 + 80005a4: a807 add r0, sp, #28 + 80005a6: 2203 movs r2, #3 + 80005a8: e9cd 2312 strd r2, r3, [sp, #72] @ 0x48 + 80005ac: 9307 str r3, [sp, #28] + 80005ae: 930d str r3, [sp, #52] @ 0x34 + 80005b0: f001 fb02 bl 8001bb8 + 80005b4: 4601 mov r1, r0 + 80005b6: b108 cbz r0, 80005bc + 80005b8: b672 cpsid i + 80005ba: e7fe b.n 80005ba + 80005bc: 230f movs r3, #15 + 80005be: e9cd 3002 strd r3, r0, [sp, #8] + 80005c2: e9cd 0004 strd r0, r0, [sp, #16] + 80005c6: 9006 str r0, [sp, #24] + 80005c8: a802 add r0, sp, #8 + 80005ca: f001 f803 bl 80015d4 + 80005ce: b108 cbz r0, 80005d4 + 80005d0: b672 cpsid i + 80005d2: e7fe b.n 80005d2 + 80005d4: b015 add sp, #84 @ 0x54 + 80005d6: f85d fb04 ldr.w pc, [sp], #4 + 80005da: bf00 nop + 80005dc: 40023800 .word 0x40023800 + 80005e0: 40007000 .word 0x40007000 + +080005e4
: + 80005e4: b500 push {lr} + 80005e6: b08b sub sp, #44 @ 0x2c + 80005e8: f000 f918 bl 800081c + 80005ec: f7ff ffa8 bl 8000540 + 80005f0: 2032 movs r0, #50 @ 0x32 + 80005f2: f000 f93f bl 8000874 + 80005f6: 2214 movs r2, #20 + 80005f8: 2100 movs r1, #0 + 80005fa: eb0d 0002 add.w r0, sp, r2 + 80005fe: f003 f935 bl 800386c + 8000602: 2400 movs r4, #0 + 8000604: 4b3c ldr r3, [pc, #240] @ (80006f8 ) + 8000606: 9400 str r4, [sp, #0] + 8000608: 6b1a ldr r2, [r3, #48] @ 0x30 + 800060a: 483c ldr r0, [pc, #240] @ (80006fc ) + 800060c: f042 0280 orr.w r2, r2, #128 @ 0x80 + 8000610: 631a str r2, [r3, #48] @ 0x30 + 8000612: 6b1a ldr r2, [r3, #48] @ 0x30 + 8000614: f002 0280 and.w r2, r2, #128 @ 0x80 + 8000618: 9200 str r2, [sp, #0] + 800061a: 9a00 ldr r2, [sp, #0] + 800061c: 9401 str r4, [sp, #4] + 800061e: 6b1a ldr r2, [r3, #48] @ 0x30 + 8000620: f042 0201 orr.w r2, r2, #1 + 8000624: 631a str r2, [r3, #48] @ 0x30 + 8000626: 6b1a ldr r2, [r3, #48] @ 0x30 + 8000628: f002 0201 and.w r2, r2, #1 + 800062c: 9201 str r2, [sp, #4] + 800062e: 9a01 ldr r2, [sp, #4] + 8000630: 9402 str r4, [sp, #8] + 8000632: 6b1a ldr r2, [r3, #48] @ 0x30 + 8000634: f042 0204 orr.w r2, r2, #4 + 8000638: 631a str r2, [r3, #48] @ 0x30 + 800063a: 6b1a ldr r2, [r3, #48] @ 0x30 + 800063c: f002 0204 and.w r2, r2, #4 + 8000640: 9202 str r2, [sp, #8] + 8000642: 9a02 ldr r2, [sp, #8] + 8000644: 9403 str r4, [sp, #12] + 8000646: 6b1a ldr r2, [r3, #48] @ 0x30 + 8000648: f042 0202 orr.w r2, r2, #2 + 800064c: 631a str r2, [r3, #48] @ 0x30 + 800064e: 6b1a ldr r2, [r3, #48] @ 0x30 + 8000650: f002 0202 and.w r2, r2, #2 + 8000654: 9203 str r2, [sp, #12] + 8000656: 9a03 ldr r2, [sp, #12] + 8000658: 9404 str r4, [sp, #16] + 800065a: 6b1a ldr r2, [r3, #48] @ 0x30 + 800065c: f042 0208 orr.w r2, r2, #8 + 8000660: 631a str r2, [r3, #48] @ 0x30 + 8000662: 6b1b ldr r3, [r3, #48] @ 0x30 + 8000664: f003 0308 and.w r3, r3, #8 + 8000668: 4622 mov r2, r4 + 800066a: 9304 str r3, [sp, #16] + 800066c: f44f 7170 mov.w r1, #960 @ 0x3c0 + 8000670: 9b04 ldr r3, [sp, #16] + 8000672: f000 fa4b bl 8000b0c + 8000676: 4622 mov r2, r4 + 8000678: 4821 ldr r0, [pc, #132] @ (8000700 ) + 800067a: f44f 7180 mov.w r1, #256 @ 0x100 + 800067e: f000 fa45 bl 8000b0c + 8000682: 2330 movs r3, #48 @ 0x30 + 8000684: 481d ldr r0, [pc, #116] @ (80006fc ) + 8000686: 9407 str r4, [sp, #28] + 8000688: a905 add r1, sp, #20 + 800068a: e9cd 3405 strd r3, r4, [sp, #20] + 800068e: f000 f96b bl 8000968 + 8000692: f240 4307 movw r3, #1031 @ 0x407 + 8000696: 481b ldr r0, [pc, #108] @ (8000704 ) + 8000698: 9407 str r4, [sp, #28] + 800069a: a905 add r1, sp, #20 + 800069c: e9cd 3405 strd r3, r4, [sp, #20] + 80006a0: 2501 movs r5, #1 + 80006a2: f000 f961 bl 8000968 + 80006a6: f44f 7370 mov.w r3, #960 @ 0x3c0 + 80006aa: 4814 ldr r0, [pc, #80] @ (80006fc ) + 80006ac: a905 add r1, sp, #20 + 80006ae: e9cd 3505 strd r3, r5, [sp, #20] + 80006b2: e9cd 4407 strd r4, r4, [sp, #28] + 80006b6: f000 f957 bl 8000968 + 80006ba: f44f 7380 mov.w r3, #256 @ 0x100 + 80006be: 4810 ldr r0, [pc, #64] @ (8000700 ) + 80006c0: a905 add r1, sp, #20 + 80006c2: e9cd 3505 strd r3, r5, [sp, #20] + 80006c6: e9cd 4407 strd r4, r4, [sp, #28] + 80006ca: f000 f94d bl 8000968 + 80006ce: f002 febd bl 800344c + 80006d2: 2032 movs r0, #50 @ 0x32 + 80006d4: f000 f8ce bl 8000874 + 80006d8: 4c0b ldr r4, [pc, #44] @ (8000708 ) + 80006da: 4d0c ldr r5, [pc, #48] @ (800070c ) + 80006dc: f04f 0602 mov.w r6, #2 + 80006e0: 2304 movs r3, #4 + 80006e2: 4909 ldr r1, [pc, #36] @ (8000708 ) + 80006e4: 7026 strb r6, [r4, #0] + 80006e6: 2208 movs r2, #8 + 80006e8: 4628 mov r0, r5 + 80006ea: 70a3 strb r3, [r4, #2] + 80006ec: f002 fa34 bl 8002b58 + 80006f0: 2064 movs r0, #100 @ 0x64 + 80006f2: f000 f8bf bl 8000874 + 80006f6: e7f3 b.n 80006e0 + 80006f8: 40023800 .word 0x40023800 + 80006fc: 40020800 .word 0x40020800 + 8000700: 40020000 .word 0x40020000 + 8000704: 40020400 .word 0x40020400 + 8000708: 2000013c .word 0x2000013c + 800070c: 2000014c .word 0x2000014c + +08000710 : + 8000710: b672 cpsid i + 8000712: e7fe b.n 8000712 + +08000714 : + 8000714: b082 sub sp, #8 + 8000716: 4b0c ldr r3, [pc, #48] @ (8000748 ) + 8000718: 2100 movs r1, #0 + 800071a: 9100 str r1, [sp, #0] + 800071c: 6c5a ldr r2, [r3, #68] @ 0x44 + 800071e: f442 4280 orr.w r2, r2, #16384 @ 0x4000 + 8000722: 645a str r2, [r3, #68] @ 0x44 + 8000724: 6c5a ldr r2, [r3, #68] @ 0x44 + 8000726: f402 4280 and.w r2, r2, #16384 @ 0x4000 + 800072a: 9200 str r2, [sp, #0] + 800072c: 9a00 ldr r2, [sp, #0] + 800072e: 9101 str r1, [sp, #4] + 8000730: 6c1a ldr r2, [r3, #64] @ 0x40 + 8000732: f042 5280 orr.w r2, r2, #268435456 @ 0x10000000 + 8000736: 641a str r2, [r3, #64] @ 0x40 + 8000738: 6c1b ldr r3, [r3, #64] @ 0x40 + 800073a: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800073e: 9301 str r3, [sp, #4] + 8000740: 9b01 ldr r3, [sp, #4] + 8000742: b002 add sp, #8 + 8000744: 4770 bx lr + 8000746: bf00 nop + 8000748: 40023800 .word 0x40023800 + +0800074c : + 800074c: e7fe b.n 800074c + +0800074e : + 800074e: e7fe b.n 800074e + +08000750 : + 8000750: e7fe b.n 8000750 + +08000752 : + 8000752: e7fe b.n 8000752 + +08000754 : + 8000754: e7fe b.n 8000754 + +08000756 : + 8000756: 4770 bx lr + +08000758 : + 8000758: 4770 bx lr + +0800075a : + 800075a: 4770 bx lr + +0800075c : + 800075c: f000 b878 b.w 8000850 + +08000760 : + 8000760: 4801 ldr r0, [pc, #4] @ (8000768 ) + 8000762: f000 bb9b b.w 8000e9c + 8000766: bf00 nop + 8000768: 2000063c .word 0x2000063c + +0800076c : + 800076c: 4a03 ldr r2, [pc, #12] @ (800077c ) + 800076e: f8d2 3088 ldr.w r3, [r2, #136] @ 0x88 + 8000772: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000 + 8000776: f8c2 3088 str.w r3, [r2, #136] @ 0x88 + 800077a: 4770 bx lr + 800077c: e000ed00 .word 0xe000ed00 + +08000780 : + 8000780: f8df d034 ldr.w sp, [pc, #52] @ 80007b8 + 8000784: f7ff fff2 bl 800076c + 8000788: 480c ldr r0, [pc, #48] @ (80007bc ) + 800078a: 490d ldr r1, [pc, #52] @ (80007c0 ) + 800078c: 4a0d ldr r2, [pc, #52] @ (80007c4 ) + 800078e: 2300 movs r3, #0 + 8000790: e002 b.n 8000798 + +08000792 : + 8000792: 58d4 ldr r4, [r2, r3] + 8000794: 50c4 str r4, [r0, r3] + 8000796: 3304 adds r3, #4 + +08000798 : + 8000798: 18c4 adds r4, r0, r3 + 800079a: 428c cmp r4, r1 + 800079c: d3f9 bcc.n 8000792 + 800079e: 4a0a ldr r2, [pc, #40] @ (80007c8 ) + 80007a0: 4c0a ldr r4, [pc, #40] @ (80007cc ) + 80007a2: 2300 movs r3, #0 + 80007a4: e001 b.n 80007aa + +080007a6 : + 80007a6: 6013 str r3, [r2, #0] + 80007a8: 3204 adds r2, #4 + +080007aa : + 80007aa: 42a2 cmp r2, r4 + 80007ac: d3fb bcc.n 80007a6 + 80007ae: f003 f865 bl 800387c <__libc_init_array> + 80007b2: f7ff ff17 bl 80005e4
+ 80007b6: 4770 bx lr + 80007b8: 20020000 .word 0x20020000 + 80007bc: 20000000 .word 0x20000000 + 80007c0: 20000120 .word 0x20000120 + 80007c4: 08003930 .word 0x08003930 + 80007c8: 20000120 .word 0x20000120 + 80007cc: 20000b20 .word 0x20000b20 + +080007d0 : + 80007d0: e7fe b.n 80007d0 + ... + +080007d4 : + 80007d4: b538 push {r3, r4, r5, lr} + 80007d6: 4b0e ldr r3, [pc, #56] @ (8000810 ) + 80007d8: 781a ldrb r2, [r3, #0] + 80007da: f44f 737a mov.w r3, #1000 @ 0x3e8 + 80007de: fbb3 f3f2 udiv r3, r3, r2 + 80007e2: 4a0c ldr r2, [pc, #48] @ (8000814 ) + 80007e4: 4605 mov r5, r0 + 80007e6: 6810 ldr r0, [r2, #0] + 80007e8: fbb0 f0f3 udiv r0, r0, r3 + 80007ec: f000 f8a8 bl 8000940 + 80007f0: 4604 mov r4, r0 + 80007f2: b958 cbnz r0, 800080c + 80007f4: 2d0f cmp r5, #15 + 80007f6: d809 bhi.n 800080c + 80007f8: 4602 mov r2, r0 + 80007fa: 4629 mov r1, r5 + 80007fc: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8000800: f000 f85e bl 80008c0 + 8000804: 4b04 ldr r3, [pc, #16] @ (8000818 ) + 8000806: 4620 mov r0, r4 + 8000808: 601d str r5, [r3, #0] + 800080a: bd38 pop {r3, r4, r5, pc} + 800080c: 2001 movs r0, #1 + 800080e: e7fc b.n 800080a + 8000810: 20000004 .word 0x20000004 + 8000814: 20000000 .word 0x20000000 + 8000818: 20000008 .word 0x20000008 + +0800081c : + 800081c: b508 push {r3, lr} + 800081e: 4b0b ldr r3, [pc, #44] @ (800084c ) + 8000820: 681a ldr r2, [r3, #0] + 8000822: f442 7200 orr.w r2, r2, #512 @ 0x200 + 8000826: 601a str r2, [r3, #0] + 8000828: 681a ldr r2, [r3, #0] + 800082a: f442 6280 orr.w r2, r2, #1024 @ 0x400 + 800082e: 601a str r2, [r3, #0] + 8000830: 681a ldr r2, [r3, #0] + 8000832: f442 7280 orr.w r2, r2, #256 @ 0x100 + 8000836: 601a str r2, [r3, #0] + 8000838: 2003 movs r0, #3 + 800083a: f000 f82f bl 800089c + 800083e: 200f movs r0, #15 + 8000840: f7ff ffc8 bl 80007d4 + 8000844: f7ff ff66 bl 8000714 + 8000848: 2000 movs r0, #0 + 800084a: bd08 pop {r3, pc} + 800084c: 40023c00 .word 0x40023c00 + +08000850 : + 8000850: 4a03 ldr r2, [pc, #12] @ (8000860 ) + 8000852: 4b04 ldr r3, [pc, #16] @ (8000864 ) + 8000854: 6811 ldr r1, [r2, #0] + 8000856: 781b ldrb r3, [r3, #0] + 8000858: 440b add r3, r1 + 800085a: 6013 str r3, [r2, #0] + 800085c: 4770 bx lr + 800085e: bf00 nop + 8000860: 20000144 .word 0x20000144 + 8000864: 20000004 .word 0x20000004 + +08000868 : + 8000868: 4b01 ldr r3, [pc, #4] @ (8000870 ) + 800086a: 6818 ldr r0, [r3, #0] + 800086c: 4770 bx lr + 800086e: bf00 nop + 8000870: 20000144 .word 0x20000144 + +08000874 : + 8000874: b538 push {r3, r4, r5, lr} + 8000876: 4604 mov r4, r0 + 8000878: f7ff fff6 bl 8000868 + 800087c: 1c63 adds r3, r4, #1 + 800087e: bf1c itt ne + 8000880: 4b05 ldrne r3, [pc, #20] @ (8000898 ) + 8000882: 781b ldrbne r3, [r3, #0] + 8000884: 4605 mov r5, r0 + 8000886: bf18 it ne + 8000888: 18e4 addne r4, r4, r3 + 800088a: f7ff ffed bl 8000868 + 800088e: 1b43 subs r3, r0, r5 + 8000890: 42a3 cmp r3, r4 + 8000892: d3fa bcc.n 800088a + 8000894: bd38 pop {r3, r4, r5, pc} + 8000896: bf00 nop + 8000898: 20000004 .word 0x20000004 + +0800089c : + 800089c: 4907 ldr r1, [pc, #28] @ (80008bc ) + 800089e: 68ca ldr r2, [r1, #12] + 80008a0: f422 62e0 bic.w r2, r2, #1792 @ 0x700 + 80008a4: 0203 lsls r3, r0, #8 + 80008a6: 0412 lsls r2, r2, #16 + 80008a8: f403 63e0 and.w r3, r3, #1792 @ 0x700 + 80008ac: 0c12 lsrs r2, r2, #16 + 80008ae: 4313 orrs r3, r2 + 80008b0: f043 63bf orr.w r3, r3, #100139008 @ 0x5f80000 + 80008b4: f443 3300 orr.w r3, r3, #131072 @ 0x20000 + 80008b8: 60cb str r3, [r1, #12] + 80008ba: 4770 bx lr + 80008bc: e000ed00 .word 0xe000ed00 + +080008c0 : + 80008c0: 4b16 ldr r3, [pc, #88] @ (800091c ) + 80008c2: b530 push {r4, r5, lr} + 80008c4: 68dc ldr r4, [r3, #12] + 80008c6: f3c4 2402 ubfx r4, r4, #8, #3 + 80008ca: f1c4 0307 rsb r3, r4, #7 + 80008ce: 1d25 adds r5, r4, #4 + 80008d0: 2b04 cmp r3, #4 + 80008d2: bf28 it cs + 80008d4: 2304 movcs r3, #4 + 80008d6: 2d06 cmp r5, #6 + 80008d8: f04f 35ff mov.w r5, #4294967295 @ 0xffffffff + 80008dc: bf8c ite hi + 80008de: 3c03 subhi r4, #3 + 80008e0: 2400 movls r4, #0 + 80008e2: fa05 f303 lsl.w r3, r5, r3 + 80008e6: ea21 0303 bic.w r3, r1, r3 + 80008ea: 40a5 lsls r5, r4 + 80008ec: ea22 0205 bic.w r2, r2, r5 + 80008f0: 40a3 lsls r3, r4 + 80008f2: 2800 cmp r0, #0 + 80008f4: ea43 0302 orr.w r3, r3, r2 + 80008f8: bfac ite ge + 80008fa: f100 4060 addge.w r0, r0, #3758096384 @ 0xe0000000 + 80008fe: 4a08 ldrlt r2, [pc, #32] @ (8000920 ) + 8000900: ea4f 1303 mov.w r3, r3, lsl #4 + 8000904: bfb8 it lt + 8000906: f000 000f andlt.w r0, r0, #15 + 800090a: b2db uxtb r3, r3 + 800090c: bfaa itet ge + 800090e: f500 4061 addge.w r0, r0, #57600 @ 0xe100 + 8000912: 5413 strblt r3, [r2, r0] + 8000914: f880 3300 strbge.w r3, [r0, #768] @ 0x300 + 8000918: bd30 pop {r4, r5, pc} + 800091a: bf00 nop + 800091c: e000ed00 .word 0xe000ed00 + 8000920: e000ed14 .word 0xe000ed14 + +08000924 : + 8000924: 2800 cmp r0, #0 + 8000926: db07 blt.n 8000938 + 8000928: 4a04 ldr r2, [pc, #16] @ (800093c ) + 800092a: 0941 lsrs r1, r0, #5 + 800092c: 2301 movs r3, #1 + 800092e: f000 001f and.w r0, r0, #31 + 8000932: 4083 lsls r3, r0 + 8000934: f842 3021 str.w r3, [r2, r1, lsl #2] + 8000938: 4770 bx lr + 800093a: bf00 nop + 800093c: e000e100 .word 0xe000e100 + +08000940 : + 8000940: 3801 subs r0, #1 + 8000942: f1b0 7f80 cmp.w r0, #16777216 @ 0x1000000 + 8000946: d20b bcs.n 8000960 + 8000948: f04f 23e0 mov.w r3, #3758153728 @ 0xe000e000 + 800094c: 4a05 ldr r2, [pc, #20] @ (8000964 ) + 800094e: 6158 str r0, [r3, #20] + 8000950: 21f0 movs r1, #240 @ 0xf0 + 8000952: f882 1023 strb.w r1, [r2, #35] @ 0x23 + 8000956: 2000 movs r0, #0 + 8000958: 2207 movs r2, #7 + 800095a: 6198 str r0, [r3, #24] + 800095c: 611a str r2, [r3, #16] + 800095e: 4770 bx lr + 8000960: 2001 movs r0, #1 + 8000962: 4770 bx lr + 8000964: e000ed00 .word 0xe000ed00 + +08000968 : + 8000968: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800096c: f8df 9198 ldr.w r9, [pc, #408] @ 8000b08 + 8000970: 4a63 ldr r2, [pc, #396] @ (8000b00 ) + 8000972: 2300 movs r3, #0 + 8000974: 680d ldr r5, [r1, #0] + 8000976: 2401 movs r4, #1 + 8000978: 409c lsls r4, r3 + 800097a: ea04 0605 and.w r6, r4, r5 + 800097e: 43ac bics r4, r5 + 8000980: f040 80ab bne.w 8000ada + 8000984: 684d ldr r5, [r1, #4] + 8000986: 2703 movs r7, #3 + 8000988: f005 0403 and.w r4, r5, #3 + 800098c: ea4f 0843 mov.w r8, r3, lsl #1 + 8000990: fa07 fc08 lsl.w ip, r7, r8 + 8000994: 1e67 subs r7, r4, #1 + 8000996: 2f01 cmp r7, #1 + 8000998: ea6f 0c0c mvn.w ip, ip + 800099c: d834 bhi.n 8000a08 + 800099e: 6887 ldr r7, [r0, #8] + 80009a0: ea07 0e0c and.w lr, r7, ip + 80009a4: 68cf ldr r7, [r1, #12] + 80009a6: fa07 f708 lsl.w r7, r7, r8 + 80009aa: ea47 070e orr.w r7, r7, lr + 80009ae: 6087 str r7, [r0, #8] + 80009b0: 6847 ldr r7, [r0, #4] + 80009b2: ea27 0e06 bic.w lr, r7, r6 + 80009b6: f3c5 1700 ubfx r7, r5, #4, #1 + 80009ba: 409f lsls r7, r3 + 80009bc: ea47 070e orr.w r7, r7, lr + 80009c0: 6047 str r7, [r0, #4] + 80009c2: 68c7 ldr r7, [r0, #12] + 80009c4: ea07 0e0c and.w lr, r7, ip + 80009c8: 688f ldr r7, [r1, #8] + 80009ca: fa07 f708 lsl.w r7, r7, r8 + 80009ce: ea47 070e orr.w r7, r7, lr + 80009d2: 2c02 cmp r4, #2 + 80009d4: 60c7 str r7, [r0, #12] + 80009d6: d119 bne.n 8000a0c + 80009d8: ea4f 0ad3 mov.w sl, r3, lsr #3 + 80009dc: eb00 0a8a add.w sl, r0, sl, lsl #2 + 80009e0: f003 0b07 and.w fp, r3, #7 + 80009e4: f8da 7020 ldr.w r7, [sl, #32] + 80009e8: ea4f 0b8b mov.w fp, fp, lsl #2 + 80009ec: f04f 0e0f mov.w lr, #15 + 80009f0: fa0e fe0b lsl.w lr, lr, fp + 80009f4: ea27 0e0e bic.w lr, r7, lr + 80009f8: 690f ldr r7, [r1, #16] + 80009fa: fa07 f70b lsl.w r7, r7, fp + 80009fe: ea47 070e orr.w r7, r7, lr + 8000a02: f8ca 7020 str.w r7, [sl, #32] + 8000a06: e001 b.n 8000a0c + 8000a08: 2c03 cmp r4, #3 + 8000a0a: d1da bne.n 80009c2 + 8000a0c: 6807 ldr r7, [r0, #0] + 8000a0e: fa04 f408 lsl.w r4, r4, r8 + 8000a12: ea07 070c and.w r7, r7, ip + 8000a16: 433c orrs r4, r7 + 8000a18: f415 3f40 tst.w r5, #196608 @ 0x30000 + 8000a1c: 6004 str r4, [r0, #0] + 8000a1e: d05c beq.n 8000ada + 8000a20: 2400 movs r4, #0 + 8000a22: 9401 str r4, [sp, #4] + 8000a24: f8d9 4044 ldr.w r4, [r9, #68] @ 0x44 + 8000a28: f444 4480 orr.w r4, r4, #16384 @ 0x4000 + 8000a2c: f8c9 4044 str.w r4, [r9, #68] @ 0x44 + 8000a30: f8d9 4044 ldr.w r4, [r9, #68] @ 0x44 + 8000a34: f023 0703 bic.w r7, r3, #3 + 8000a38: f107 4780 add.w r7, r7, #1073741824 @ 0x40000000 + 8000a3c: f404 4480 and.w r4, r4, #16384 @ 0x4000 + 8000a40: f507 379c add.w r7, r7, #79872 @ 0x13800 + 8000a44: 9401 str r4, [sp, #4] + 8000a46: f003 0c03 and.w ip, r3, #3 + 8000a4a: 9c01 ldr r4, [sp, #4] + 8000a4c: f8d7 e008 ldr.w lr, [r7, #8] + 8000a50: ea4f 0c8c mov.w ip, ip, lsl #2 + 8000a54: 240f movs r4, #15 + 8000a56: fa04 f40c lsl.w r4, r4, ip + 8000a5a: ea2e 0e04 bic.w lr, lr, r4 + 8000a5e: 4c29 ldr r4, [pc, #164] @ (8000b04 ) + 8000a60: 42a0 cmp r0, r4 + 8000a62: d041 beq.n 8000ae8 + 8000a64: f504 6480 add.w r4, r4, #1024 @ 0x400 + 8000a68: 42a0 cmp r0, r4 + 8000a6a: d03f beq.n 8000aec + 8000a6c: f504 6480 add.w r4, r4, #1024 @ 0x400 + 8000a70: 42a0 cmp r0, r4 + 8000a72: d03d beq.n 8000af0 + 8000a74: f504 6480 add.w r4, r4, #1024 @ 0x400 + 8000a78: 42a0 cmp r0, r4 + 8000a7a: d03b beq.n 8000af4 + 8000a7c: f504 6480 add.w r4, r4, #1024 @ 0x400 + 8000a80: 42a0 cmp r0, r4 + 8000a82: d039 beq.n 8000af8 + 8000a84: f504 6480 add.w r4, r4, #1024 @ 0x400 + 8000a88: 42a0 cmp r0, r4 + 8000a8a: d037 beq.n 8000afc + 8000a8c: f504 6480 add.w r4, r4, #1024 @ 0x400 + 8000a90: 42a0 cmp r0, r4 + 8000a92: bf14 ite ne + 8000a94: 2407 movne r4, #7 + 8000a96: 2406 moveq r4, #6 + 8000a98: fa04 f40c lsl.w r4, r4, ip + 8000a9c: ea44 040e orr.w r4, r4, lr + 8000aa0: 60bc str r4, [r7, #8] + 8000aa2: 6894 ldr r4, [r2, #8] + 8000aa4: 43f7 mvns r7, r6 + 8000aa6: f415 1f80 tst.w r5, #1048576 @ 0x100000 + 8000aaa: bf0c ite eq + 8000aac: 403c andeq r4, r7 + 8000aae: 4334 orrne r4, r6 + 8000ab0: 6094 str r4, [r2, #8] + 8000ab2: 68d4 ldr r4, [r2, #12] + 8000ab4: f415 1f00 tst.w r5, #2097152 @ 0x200000 + 8000ab8: bf0c ite eq + 8000aba: 403c andeq r4, r7 + 8000abc: 4334 orrne r4, r6 + 8000abe: 60d4 str r4, [r2, #12] + 8000ac0: 6854 ldr r4, [r2, #4] + 8000ac2: f415 3f00 tst.w r5, #131072 @ 0x20000 + 8000ac6: bf0c ite eq + 8000ac8: 403c andeq r4, r7 + 8000aca: 4334 orrne r4, r6 + 8000acc: 6054 str r4, [r2, #4] + 8000ace: 6814 ldr r4, [r2, #0] + 8000ad0: 03ed lsls r5, r5, #15 + 8000ad2: bf54 ite pl + 8000ad4: 403c andpl r4, r7 + 8000ad6: 4334 orrmi r4, r6 + 8000ad8: 6014 str r4, [r2, #0] + 8000ada: 3301 adds r3, #1 + 8000adc: 2b10 cmp r3, #16 + 8000ade: f47f af49 bne.w 8000974 + 8000ae2: b003 add sp, #12 + 8000ae4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8000ae8: 2400 movs r4, #0 + 8000aea: e7d5 b.n 8000a98 + 8000aec: 2401 movs r4, #1 + 8000aee: e7d3 b.n 8000a98 + 8000af0: 2402 movs r4, #2 + 8000af2: e7d1 b.n 8000a98 + 8000af4: 2403 movs r4, #3 + 8000af6: e7cf b.n 8000a98 + 8000af8: 2404 movs r4, #4 + 8000afa: e7cd b.n 8000a98 + 8000afc: 2405 movs r4, #5 + 8000afe: e7cb b.n 8000a98 + 8000b00: 40013c00 .word 0x40013c00 + 8000b04: 40020000 .word 0x40020000 + 8000b08: 40023800 .word 0x40023800 + +08000b0c : + 8000b0c: b10a cbz r2, 8000b12 + 8000b0e: 6181 str r1, [r0, #24] + 8000b10: 4770 bx lr + 8000b12: 0409 lsls r1, r1, #16 + 8000b14: e7fb b.n 8000b0e + +08000b16 : + 8000b16: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + 8000b18: 4604 mov r4, r0 + 8000b1a: b310 cbz r0, 8000b62 + 8000b1c: f890 3495 ldrb.w r3, [r0, #1173] @ 0x495 + 8000b20: 6805 ldr r5, [r0, #0] + 8000b22: f003 02ff and.w r2, r3, #255 @ 0xff + 8000b26: b91b cbnz r3, 8000b30 + 8000b28: f880 2494 strb.w r2, [r0, #1172] @ 0x494 + 8000b2c: f002 fd2c bl 8003588 + 8000b30: 2303 movs r3, #3 + 8000b32: f1b5 4fa0 cmp.w r5, #1342177280 @ 0x50000000 + 8000b36: f884 3495 strb.w r3, [r4, #1173] @ 0x495 + 8000b3a: bf04 itt eq + 8000b3c: 2300 moveq r3, #0 + 8000b3e: 71a3 strbeq r3, [r4, #6] + 8000b40: 6820 ldr r0, [r4, #0] + 8000b42: f001 fae9 bl 8002118 + 8000b46: 7c23 ldrb r3, [r4, #16] + 8000b48: f88d 3000 strb.w r3, [sp] + 8000b4c: 1d25 adds r5, r4, #4 + 8000b4e: e895 000e ldmia.w r5, {r1, r2, r3} + 8000b52: 6820 ldr r0, [r4, #0] + 8000b54: f001 fa26 bl 8001fa4 + 8000b58: 4601 mov r1, r0 + 8000b5a: b130 cbz r0, 8000b6a + 8000b5c: 2302 movs r3, #2 + 8000b5e: f884 3495 strb.w r3, [r4, #1173] @ 0x495 + 8000b62: 2501 movs r5, #1 + 8000b64: 4628 mov r0, r5 + 8000b66: b003 add sp, #12 + 8000b68: bdf0 pop {r4, r5, r6, r7, pc} + 8000b6a: 6820 ldr r0, [r4, #0] + 8000b6c: f001 fada bl 8002124 + 8000b70: 2800 cmp r0, #0 + 8000b72: d1f3 bne.n 8000b5c + 8000b74: 7926 ldrb r6, [r4, #4] + 8000b76: f104 0314 add.w r3, r4, #20 + 8000b7a: 2701 movs r7, #1 + 8000b7c: 4602 mov r2, r0 + 8000b7e: b2c1 uxtb r1, r0 + 8000b80: 428e cmp r6, r1 + 8000b82: f103 0324 add.w r3, r3, #36 @ 0x24 + 8000b86: d821 bhi.n 8000bcc + 8000b88: 2100 movs r1, #0 + 8000b8a: f504 7315 add.w r3, r4, #596 @ 0x254 + 8000b8e: 460a mov r2, r1 + 8000b90: b2c8 uxtb r0, r1 + 8000b92: 4286 cmp r6, r0 + 8000b94: f103 0324 add.w r3, r3, #36 @ 0x24 + 8000b98: d826 bhi.n 8000be8 + 8000b9a: 7c23 ldrb r3, [r4, #16] + 8000b9c: f88d 3000 strb.w r3, [sp] + 8000ba0: e895 000e ldmia.w r5, {r1, r2, r3} + 8000ba4: 6820 ldr r0, [r4, #0] + 8000ba6: f001 fb39 bl 800221c + 8000baa: 4605 mov r5, r0 + 8000bac: 2800 cmp r0, #0 + 8000bae: d1d5 bne.n 8000b5c + 8000bb0: 2301 movs r3, #1 + 8000bb2: 7460 strb r0, [r4, #17] + 8000bb4: f884 3495 strb.w r3, [r4, #1173] @ 0x495 + 8000bb8: 7b23 ldrb r3, [r4, #12] + 8000bba: 2b01 cmp r3, #1 + 8000bbc: d102 bne.n 8000bc4 + 8000bbe: 4620 mov r0, r4 + 8000bc0: f000 fcf5 bl 80015ae + 8000bc4: 6820 ldr r0, [r4, #0] + 8000bc6: f001 fe6b bl 80028a0 + 8000bca: e7cb b.n 8000b64 + 8000bcc: f823 0c0a strh.w r0, [r3, #-10] + 8000bd0: e943 2207 strd r2, r2, [r3, #-28] + 8000bd4: f803 7c23 strb.w r7, [r3, #-35] + 8000bd8: f803 1c24 strb.w r1, [r3, #-36] + 8000bdc: f803 2c20 strb.w r2, [r3, #-32] + 8000be0: f843 2c14 str.w r2, [r3, #-20] + 8000be4: 3001 adds r0, #1 + 8000be6: e7ca b.n 8000b7e + 8000be8: e943 2207 strd r2, r2, [r3, #-28] + 8000bec: f803 2c23 strb.w r2, [r3, #-35] + 8000bf0: f803 0c24 strb.w r0, [r3, #-36] + 8000bf4: f803 2c20 strb.w r2, [r3, #-32] + 8000bf8: f843 2c14 str.w r2, [r3, #-20] + 8000bfc: 3101 adds r1, #1 + 8000bfe: e7c7 b.n 8000b90 + +08000c00 : + 8000c00: b510 push {r4, lr} + 8000c02: 4604 mov r4, r0 + 8000c04: 6800 ldr r0, [r0, #0] + 8000c06: f894 3494 ldrb.w r3, [r4, #1172] @ 0x494 + 8000c0a: 2b01 cmp r3, #1 + 8000c0c: d015 beq.n 8000c3a + 8000c0e: 2301 movs r3, #1 + 8000c10: f884 3494 strb.w r3, [r4, #1172] @ 0x494 + 8000c14: 68c3 ldr r3, [r0, #12] + 8000c16: 065b lsls r3, r3, #25 + 8000c18: d506 bpl.n 8000c28 + 8000c1a: 7b63 ldrb r3, [r4, #13] + 8000c1c: 2b01 cmp r3, #1 + 8000c1e: bf02 ittt eq + 8000c20: 6b83 ldreq r3, [r0, #56] @ 0x38 + 8000c22: f443 3380 orreq.w r3, r3, #65536 @ 0x10000 + 8000c26: 6383 streq r3, [r0, #56] @ 0x38 + 8000c28: f001 fa70 bl 800210c + 8000c2c: 6820 ldr r0, [r4, #0] + 8000c2e: f001 fe29 bl 8002884 + 8000c32: 2000 movs r0, #0 + 8000c34: f884 0494 strb.w r0, [r4, #1172] @ 0x494 + 8000c38: bd10 pop {r4, pc} + 8000c3a: 2002 movs r0, #2 + 8000c3c: e7fc b.n 8000c38 + +08000c3e : + 8000c3e: b510 push {r4, lr} + 8000c40: f890 2494 ldrb.w r2, [r0, #1172] @ 0x494 + 8000c44: 2a01 cmp r2, #1 + 8000c46: 4604 mov r4, r0 + 8000c48: d00a beq.n 8000c60 + 8000c4a: 2201 movs r2, #1 + 8000c4c: f880 2494 strb.w r2, [r0, #1172] @ 0x494 + 8000c50: 7441 strb r1, [r0, #17] + 8000c52: 6800 ldr r0, [r0, #0] + 8000c54: f001 fe06 bl 8002864 + 8000c58: 2000 movs r0, #0 + 8000c5a: f884 0494 strb.w r0, [r4, #1172] @ 0x494 + 8000c5e: bd10 pop {r4, pc} + 8000c60: 2002 movs r0, #2 + 8000c62: e7fc b.n 8000c5e + +08000c64 : + 8000c64: b570 push {r4, r5, r6, lr} + 8000c66: f001 060f and.w r6, r1, #15 + 8000c6a: eb06 04c6 add.w r4, r6, r6, lsl #3 + 8000c6e: f011 0f80 tst.w r1, #128 @ 0x80 + 8000c72: 4605 mov r5, r0 + 8000c74: ea4f 0484 mov.w r4, r4, lsl #2 + 8000c78: f04f 0024 mov.w r0, #36 @ 0x24 + 8000c7c: d020 beq.n 8000cc0 + 8000c7e: fb00 5006 mla r0, r0, r6, r5 + 8000c82: f104 0114 add.w r1, r4, #20 + 8000c86: 2401 movs r4, #1 + 8000c88: 4429 add r1, r5 + 8000c8a: 7544 strb r4, [r0, #21] + 8000c8c: f3c2 020a ubfx r2, r2, #0, #11 + 8000c90: 608a str r2, [r1, #8] + 8000c92: 784a ldrb r2, [r1, #1] + 8000c94: 700e strb r6, [r1, #0] + 8000c96: 710b strb r3, [r1, #4] + 8000c98: b102 cbz r2, 8000c9c + 8000c9a: 834e strh r6, [r1, #26] + 8000c9c: 2b02 cmp r3, #2 + 8000c9e: bf04 itt eq + 8000ca0: 2300 moveq r3, #0 + 8000ca2: 714b strbeq r3, [r1, #5] + 8000ca4: f895 3494 ldrb.w r3, [r5, #1172] @ 0x494 + 8000ca8: 2b01 cmp r3, #1 + 8000caa: d012 beq.n 8000cd2 + 8000cac: 2301 movs r3, #1 + 8000cae: 6828 ldr r0, [r5, #0] + 8000cb0: f885 3494 strb.w r3, [r5, #1172] @ 0x494 + 8000cb4: f001 fb75 bl 80023a2 + 8000cb8: 2000 movs r0, #0 + 8000cba: f885 0494 strb.w r0, [r5, #1172] @ 0x494 + 8000cbe: bd70 pop {r4, r5, r6, pc} + 8000cc0: fb00 5006 mla r0, r0, r6, r5 + 8000cc4: f504 7115 add.w r1, r4, #596 @ 0x254 + 8000cc8: 2400 movs r4, #0 + 8000cca: 4429 add r1, r5 + 8000ccc: f880 4255 strb.w r4, [r0, #597] @ 0x255 + 8000cd0: e7dc b.n 8000c8c + 8000cd2: 2002 movs r0, #2 + 8000cd4: e7f3 b.n 8000cbe + +08000cd6 : + 8000cd6: b510 push {r4, lr} + 8000cd8: 4604 mov r4, r0 + 8000cda: f001 000f and.w r0, r1, #15 + 8000cde: eb00 03c0 add.w r3, r0, r0, lsl #3 + 8000ce2: f011 0f80 tst.w r1, #128 @ 0x80 + 8000ce6: ea4f 0383 mov.w r3, r3, lsl #2 + 8000cea: f04f 0224 mov.w r2, #36 @ 0x24 + 8000cee: d015 beq.n 8000d1c + 8000cf0: fb02 4200 mla r2, r2, r0, r4 + 8000cf4: f103 0114 add.w r1, r3, #20 + 8000cf8: 2301 movs r3, #1 + 8000cfa: 4421 add r1, r4 + 8000cfc: 7553 strb r3, [r2, #21] + 8000cfe: 7008 strb r0, [r1, #0] + 8000d00: f894 3494 ldrb.w r3, [r4, #1172] @ 0x494 + 8000d04: 2b01 cmp r3, #1 + 8000d06: d012 beq.n 8000d2e + 8000d08: 2301 movs r3, #1 + 8000d0a: 6820 ldr r0, [r4, #0] + 8000d0c: f884 3494 strb.w r3, [r4, #1172] @ 0x494 + 8000d10: f001 fb86 bl 8002420 + 8000d14: 2000 movs r0, #0 + 8000d16: f884 0494 strb.w r0, [r4, #1172] @ 0x494 + 8000d1a: bd10 pop {r4, pc} + 8000d1c: fb02 4200 mla r2, r2, r0, r4 + 8000d20: f503 7115 add.w r1, r3, #596 @ 0x254 + 8000d24: 2300 movs r3, #0 + 8000d26: 4421 add r1, r4 + 8000d28: f882 3255 strb.w r3, [r2, #597] @ 0x255 + 8000d2c: e7e7 b.n 8000cfe + 8000d2e: 2002 movs r0, #2 + 8000d30: e7f3 b.n 8000d1a + +08000d32 : + 8000d32: b570 push {r4, r5, r6, lr} + 8000d34: f001 050f and.w r5, r1, #15 + 8000d38: 2424 movs r4, #36 @ 0x24 + 8000d3a: fb04 0105 mla r1, r4, r5, r0 + 8000d3e: fb04 0405 mla r4, r4, r5, r0 + 8000d42: e9c4 2398 strd r2, r3, [r4, #608] @ 0x260 + 8000d46: 2300 movs r3, #0 + 8000d48: f8c4 3268 str.w r3, [r4, #616] @ 0x268 + 8000d4c: f884 3255 strb.w r3, [r4, #597] @ 0x255 + 8000d50: f884 5254 strb.w r5, [r4, #596] @ 0x254 + 8000d54: 4616 mov r6, r2 + 8000d56: 7982 ldrb r2, [r0, #6] + 8000d58: 6800 ldr r0, [r0, #0] + 8000d5a: 2a01 cmp r2, #1 + 8000d5c: f501 7115 add.w r1, r1, #596 @ 0x254 + 8000d60: bf08 it eq + 8000d62: f8c4 6270 streq.w r6, [r4, #624] @ 0x270 + 8000d66: f001 fc07 bl 8002578 + 8000d6a: 2000 movs r0, #0 + 8000d6c: bd70 pop {r4, r5, r6, pc} + +08000d6e : + 8000d6e: b570 push {r4, r5, r6, lr} + 8000d70: f001 050f and.w r5, r1, #15 + 8000d74: 2424 movs r4, #36 @ 0x24 + 8000d76: fb04 0105 mla r1, r4, r5, r0 + 8000d7a: fb04 0405 mla r4, r4, r5, r0 + 8000d7e: e9c4 2308 strd r2, r3, [r4, #32] + 8000d82: 2300 movs r3, #0 + 8000d84: 62a3 str r3, [r4, #40] @ 0x28 + 8000d86: 2301 movs r3, #1 + 8000d88: 7563 strb r3, [r4, #21] + 8000d8a: 7525 strb r5, [r4, #20] + 8000d8c: 4616 mov r6, r2 + 8000d8e: 7982 ldrb r2, [r0, #6] + 8000d90: 6800 ldr r0, [r0, #0] + 8000d92: 429a cmp r2, r3 + 8000d94: f101 0114 add.w r1, r1, #20 + 8000d98: bf08 it eq + 8000d9a: 6326 streq r6, [r4, #48] @ 0x30 + 8000d9c: f001 fbec bl 8002578 + 8000da0: 2000 movs r0, #0 + 8000da2: bd70 pop {r4, r5, r6, pc} + +08000da4 : + 8000da4: b538 push {r3, r4, r5, lr} + 8000da6: 7903 ldrb r3, [r0, #4] + 8000da8: f001 050f and.w r5, r1, #15 + 8000dac: 42ab cmp r3, r5 + 8000dae: 4604 mov r4, r0 + 8000db0: d32b bcc.n 8000e0a + 8000db2: f011 0f80 tst.w r1, #128 @ 0x80 + 8000db6: f04f 0024 mov.w r0, #36 @ 0x24 + 8000dba: d01d beq.n 8000df8 + 8000dbc: fb00 4105 mla r1, r0, r5, r4 + 8000dc0: fb00 4005 mla r0, r0, r5, r4 + 8000dc4: 2301 movs r3, #1 + 8000dc6: 3114 adds r1, #20 + 8000dc8: 7543 strb r3, [r0, #21] + 8000dca: 2301 movs r3, #1 + 8000dcc: 708b strb r3, [r1, #2] + 8000dce: 700d strb r5, [r1, #0] + 8000dd0: f894 2494 ldrb.w r2, [r4, #1172] @ 0x494 + 8000dd4: 429a cmp r2, r3 + 8000dd6: d01a beq.n 8000e0e + 8000dd8: 6820 ldr r0, [r4, #0] + 8000dda: f884 3494 strb.w r3, [r4, #1172] @ 0x494 + 8000dde: f001 fced bl 80027bc + 8000de2: b92d cbnz r5, 8000df0 + 8000de4: 79a1 ldrb r1, [r4, #6] + 8000de6: 6820 ldr r0, [r4, #0] + 8000de8: f204 429c addw r2, r4, #1180 @ 0x49c + 8000dec: f001 fda6 bl 800293c + 8000df0: 2000 movs r0, #0 + 8000df2: f884 0494 strb.w r0, [r4, #1172] @ 0x494 + 8000df6: bd38 pop {r3, r4, r5, pc} + 8000df8: fb00 4301 mla r3, r0, r1, r4 + 8000dfc: 461a mov r2, r3 + 8000dfe: f503 7115 add.w r1, r3, #596 @ 0x254 + 8000e02: 2300 movs r3, #0 + 8000e04: f882 3255 strb.w r3, [r2, #597] @ 0x255 + 8000e08: e7df b.n 8000dca + 8000e0a: 2001 movs r0, #1 + 8000e0c: e7f3 b.n 8000df6 + 8000e0e: 2002 movs r0, #2 + 8000e10: e7f1 b.n 8000df6 + +08000e12 : + 8000e12: b538 push {r3, r4, r5, lr} + 8000e14: 7903 ldrb r3, [r0, #4] + 8000e16: f001 020f and.w r2, r1, #15 + 8000e1a: 4293 cmp r3, r2 + 8000e1c: 4604 mov r4, r0 + 8000e1e: d329 bcc.n 8000e74 + 8000e20: eb02 03c2 add.w r3, r2, r2, lsl #3 + 8000e24: f011 0f80 tst.w r1, #128 @ 0x80 + 8000e28: ea4f 0383 mov.w r3, r3, lsl #2 + 8000e2c: f04f 0024 mov.w r0, #36 @ 0x24 + 8000e30: d017 beq.n 8000e62 + 8000e32: fb00 4002 mla r0, r0, r2, r4 + 8000e36: f103 0114 add.w r1, r3, #20 + 8000e3a: 2301 movs r3, #1 + 8000e3c: 4421 add r1, r4 + 8000e3e: 7543 strb r3, [r0, #21] + 8000e40: 2500 movs r5, #0 + 8000e42: 708d strb r5, [r1, #2] + 8000e44: 700a strb r2, [r1, #0] + 8000e46: f894 3494 ldrb.w r3, [r4, #1172] @ 0x494 + 8000e4a: 2b01 cmp r3, #1 + 8000e4c: d014 beq.n 8000e78 + 8000e4e: 2301 movs r3, #1 + 8000e50: 6820 ldr r0, [r4, #0] + 8000e52: f884 3494 strb.w r3, [r4, #1172] @ 0x494 + 8000e56: f001 fcdc bl 8002812 + 8000e5a: f884 5494 strb.w r5, [r4, #1172] @ 0x494 + 8000e5e: 4628 mov r0, r5 + 8000e60: bd38 pop {r3, r4, r5, pc} + 8000e62: fb00 4002 mla r0, r0, r2, r4 + 8000e66: f503 7115 add.w r1, r3, #596 @ 0x254 + 8000e6a: 2300 movs r3, #0 + 8000e6c: 4421 add r1, r4 + 8000e6e: f880 3255 strb.w r3, [r0, #597] @ 0x255 + 8000e72: e7e5 b.n 8000e40 + 8000e74: 2001 movs r0, #1 + 8000e76: e7f3 b.n 8000e60 + 8000e78: 2002 movs r0, #2 + 8000e7a: e7f1 b.n 8000e60 + +08000e7c : + 8000e7c: f001 030f and.w r3, r1, #15 + 8000e80: eb03 03c3 add.w r3, r3, r3, lsl #3 + 8000e84: 060a lsls r2, r1, #24 + 8000e86: ea4f 0383 mov.w r3, r3, lsl #2 + 8000e8a: bf4c ite mi + 8000e8c: f103 0114 addmi.w r1, r3, #20 + 8000e90: f503 7115 addpl.w r1, r3, #596 @ 0x254 + 8000e94: 4401 add r1, r0 + 8000e96: 6800 ldr r0, [r0, #0] + 8000e98: f001 bb18 b.w 80024cc + +08000e9c : + 8000e9c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8000ea0: 6806 ldr r6, [r0, #0] + 8000ea2: b089 sub sp, #36 @ 0x24 + 8000ea4: 4604 mov r4, r0 + 8000ea6: 4630 mov r0, r6 + 8000ea8: f001 fd36 bl 8002918 + 8000eac: 9003 str r0, [sp, #12] + 8000eae: 2800 cmp r0, #0 + 8000eb0: f040 8170 bne.w 8001194 + 8000eb4: 6820 ldr r0, [r4, #0] + 8000eb6: f001 fd01 bl 80028bc + 8000eba: 2800 cmp r0, #0 + 8000ebc: f000 816a beq.w 8001194 + 8000ec0: f8d6 3808 ldr.w r3, [r6, #2056] @ 0x808 + 8000ec4: 6820 ldr r0, [r4, #0] + 8000ec6: f3c3 230d ubfx r3, r3, #8, #14 + 8000eca: f8c4 34d4 str.w r3, [r4, #1236] @ 0x4d4 + 8000ece: f001 fcf5 bl 80028bc + 8000ed2: 0787 lsls r7, r0, #30 + 8000ed4: bf48 it mi + 8000ed6: 6822 ldrmi r2, [r4, #0] + 8000ed8: 6820 ldr r0, [r4, #0] + 8000eda: bf42 ittt mi + 8000edc: 6953 ldrmi r3, [r2, #20] + 8000ede: f003 0302 andmi.w r3, r3, #2 + 8000ee2: 6153 strmi r3, [r2, #20] + 8000ee4: f001 fcea bl 80028bc + 8000ee8: 06c0 lsls r0, r0, #27 + 8000eea: f506 6500 add.w r5, r6, #2048 @ 0x800 + 8000eee: d52d bpl.n 8000f4c + 8000ef0: 6822 ldr r2, [r4, #0] + 8000ef2: 6993 ldr r3, [r2, #24] + 8000ef4: f023 0310 bic.w r3, r3, #16 + 8000ef8: 6193 str r3, [r2, #24] + 8000efa: f8d6 8020 ldr.w r8, [r6, #32] + 8000efe: f408 13f0 and.w r3, r8, #1966080 @ 0x1e0000 + 8000f02: f5b3 2f80 cmp.w r3, #262144 @ 0x40000 + 8000f06: f008 070f and.w r7, r8, #15 + 8000f0a: f040 8146 bne.w 800119a + 8000f0e: f647 73f0 movw r3, #32752 @ 0x7ff0 + 8000f12: ea18 0f03 tst.w r8, r3 + 8000f16: d014 beq.n 8000f42 + 8000f18: 2324 movs r3, #36 @ 0x24 + 8000f1a: fb03 4707 mla r7, r3, r7, r4 + 8000f1e: f3c8 190a ubfx r9, r8, #4, #11 + 8000f22: f8d7 1260 ldr.w r1, [r7, #608] @ 0x260 + 8000f26: 464a mov r2, r9 + 8000f28: 4630 mov r0, r6 + 8000f2a: f001 fc27 bl 800277c + 8000f2e: f8d7 3260 ldr.w r3, [r7, #608] @ 0x260 + 8000f32: 444b add r3, r9 + 8000f34: f8c7 3260 str.w r3, [r7, #608] @ 0x260 + 8000f38: f8d7 3268 ldr.w r3, [r7, #616] @ 0x268 + 8000f3c: 444b add r3, r9 + 8000f3e: f8c7 3268 str.w r3, [r7, #616] @ 0x268 + 8000f42: 6822 ldr r2, [r4, #0] + 8000f44: 6993 ldr r3, [r2, #24] + 8000f46: f043 0310 orr.w r3, r3, #16 + 8000f4a: 6193 str r3, [r2, #24] + 8000f4c: 6820 ldr r0, [r4, #0] + 8000f4e: f001 fcb5 bl 80028bc + 8000f52: 0301 lsls r1, r0, #12 + 8000f54: f100 8134 bmi.w 80011c0 + 8000f58: 6820 ldr r0, [r4, #0] + 8000f5a: f001 fcaf bl 80028bc + 8000f5e: 0342 lsls r2, r0, #13 + 8000f60: d50d bpl.n 8000f7e + 8000f62: 6820 ldr r0, [r4, #0] + 8000f64: f001 fcb6 bl 80028d4 + 8000f68: 4627 mov r7, r4 + 8000f6a: 9004 str r0, [sp, #16] + 8000f6c: f506 6b10 add.w fp, r6, #2304 @ 0x900 + 8000f70: f04f 0a00 mov.w sl, #0 + 8000f74: 9b04 ldr r3, [sp, #16] + 8000f76: 6820 ldr r0, [r4, #0] + 8000f78: 2b00 cmp r3, #0 + 8000f7a: f040 81eb bne.w 8001354 + 8000f7e: 6820 ldr r0, [r4, #0] + 8000f80: f001 fc9c bl 80028bc + 8000f84: 2800 cmp r0, #0 + 8000f86: da13 bge.n 8000fb0 + 8000f88: 686b ldr r3, [r5, #4] + 8000f8a: f023 0301 bic.w r3, r3, #1 + 8000f8e: 606b str r3, [r5, #4] + 8000f90: f894 34cc ldrb.w r3, [r4, #1228] @ 0x4cc + 8000f94: 2b01 cmp r3, #1 + 8000f96: f040 8283 bne.w 80014a0 + 8000f9a: 2100 movs r1, #0 + 8000f9c: f884 14cc strb.w r1, [r4, #1228] @ 0x4cc + 8000fa0: 4620 mov r0, r4 + 8000fa2: f002 fbdb bl 800375c + 8000fa6: 6822 ldr r2, [r4, #0] + 8000fa8: 6953 ldr r3, [r2, #20] + 8000faa: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000 + 8000fae: 6153 str r3, [r2, #20] + 8000fb0: 6820 ldr r0, [r4, #0] + 8000fb2: f001 fc83 bl 80028bc + 8000fb6: 0503 lsls r3, r0, #20 + 8000fb8: d50a bpl.n 8000fd0 + 8000fba: 68ab ldr r3, [r5, #8] + 8000fbc: 07df lsls r7, r3, #31 + 8000fbe: d502 bpl.n 8000fc6 + 8000fc0: 4620 mov r0, r4 + 8000fc2: f002 fb5f bl 8003684 + 8000fc6: 6822 ldr r2, [r4, #0] + 8000fc8: 6953 ldr r3, [r2, #20] + 8000fca: f403 6300 and.w r3, r3, #2048 @ 0x800 + 8000fce: 6153 str r3, [r2, #20] + 8000fd0: 6820 ldr r0, [r4, #0] + 8000fd2: f001 fc73 bl 80028bc + 8000fd6: 0100 lsls r0, r0, #4 + 8000fd8: d514 bpl.n 8001004 + 8000fda: 6823 ldr r3, [r4, #0] + 8000fdc: 695a ldr r2, [r3, #20] + 8000fde: f002 6200 and.w r2, r2, #134217728 @ 0x8000000 + 8000fe2: 615a str r2, [r3, #20] + 8000fe4: f894 24cc ldrb.w r2, [r4, #1228] @ 0x4cc + 8000fe8: 2a00 cmp r2, #0 + 8000fea: f040 825d bne.w 80014a8 + 8000fee: 2101 movs r1, #1 + 8000ff0: f884 14cc strb.w r1, [r4, #1228] @ 0x4cc + 8000ff4: 6d5b ldr r3, [r3, #84] @ 0x54 + 8000ff6: f3c3 0383 ubfx r3, r3, #2, #4 + 8000ffa: f8c4 34d0 str.w r3, [r4, #1232] @ 0x4d0 + 8000ffe: 4620 mov r0, r4 + 8001000: f002 fbac bl 800375c + 8001004: 6820 ldr r0, [r4, #0] + 8001006: f001 fc59 bl 80028bc + 800100a: 04c1 lsls r1, r0, #19 + 800100c: d533 bpl.n 8001076 + 800100e: 686b ldr r3, [r5, #4] + 8001010: 6820 ldr r0, [r4, #0] + 8001012: f023 0301 bic.w r3, r3, #1 + 8001016: 606b str r3, [r5, #4] + 8001018: 2110 movs r1, #16 + 800101a: f001 f8b3 bl 8002184 + 800101e: 7920 ldrb r0, [r4, #4] + 8001020: f506 6310 add.w r3, r6, #2304 @ 0x900 + 8001024: f64f 317f movw r1, #64383 @ 0xfb7f + 8001028: 9a03 ldr r2, [sp, #12] + 800102a: 4290 cmp r0, r2 + 800102c: f200 8240 bhi.w 80014b0 + 8001030: 69eb ldr r3, [r5, #28] + 8001032: f043 1301 orr.w r3, r3, #65537 @ 0x10001 + 8001036: 61eb str r3, [r5, #28] + 8001038: 7be3 ldrb r3, [r4, #15] + 800103a: 2b00 cmp r3, #0 + 800103c: f000 8254 beq.w 80014e8 + 8001040: f8d5 3084 ldr.w r3, [r5, #132] @ 0x84 + 8001044: f043 030b orr.w r3, r3, #11 + 8001048: f8c5 3084 str.w r3, [r5, #132] @ 0x84 + 800104c: 6c6b ldr r3, [r5, #68] @ 0x44 + 800104e: f043 030b orr.w r3, r3, #11 + 8001052: 646b str r3, [r5, #68] @ 0x44 + 8001054: f8d6 3800 ldr.w r3, [r6, #2048] @ 0x800 + 8001058: 6820 ldr r0, [r4, #0] + 800105a: f423 63fe bic.w r3, r3, #2032 @ 0x7f0 + 800105e: f8c6 3800 str.w r3, [r6, #2048] @ 0x800 + 8001062: f204 429c addw r2, r4, #1180 @ 0x49c + 8001066: 79a1 ldrb r1, [r4, #6] + 8001068: f001 fc68 bl 800293c + 800106c: 6822 ldr r2, [r4, #0] + 800106e: 6953 ldr r3, [r2, #20] + 8001070: f403 5380 and.w r3, r3, #4096 @ 0x1000 + 8001074: 6153 str r3, [r2, #20] + 8001076: 6820 ldr r0, [r4, #0] + 8001078: f001 fc20 bl 80028bc + 800107c: 0482 lsls r2, r0, #18 + 800107e: d516 bpl.n 80010ae + 8001080: 6820 ldr r0, [r4, #0] + 8001082: f001 fc4d bl 8002920 + 8001086: 6820 ldr r0, [r4, #0] + 8001088: f001 f980 bl 800238c + 800108c: 71e0 strb r0, [r4, #7] + 800108e: 6827 ldr r7, [r4, #0] + 8001090: f000 fb3a bl 8001708 + 8001094: 79e2 ldrb r2, [r4, #7] + 8001096: 4601 mov r1, r0 + 8001098: 4638 mov r0, r7 + 800109a: f000 ffc7 bl 800202c + 800109e: 4620 mov r0, r4 + 80010a0: f002 fadd bl 800365e + 80010a4: 6822 ldr r2, [r4, #0] + 80010a6: 6953 ldr r3, [r2, #20] + 80010a8: f403 5300 and.w r3, r3, #8192 @ 0x2000 + 80010ac: 6153 str r3, [r2, #20] + 80010ae: 6820 ldr r0, [r4, #0] + 80010b0: f001 fc04 bl 80028bc + 80010b4: 0703 lsls r3, r0, #28 + 80010b6: d507 bpl.n 80010c8 + 80010b8: 4620 mov r0, r4 + 80010ba: f002 facc bl 8003656 + 80010be: 6822 ldr r2, [r4, #0] + 80010c0: 6953 ldr r3, [r2, #20] + 80010c2: f003 0308 and.w r3, r3, #8 + 80010c6: 6153 str r3, [r2, #20] + 80010c8: 6820 ldr r0, [r4, #0] + 80010ca: f001 fbf7 bl 80028bc + 80010ce: 0607 lsls r7, r0, #24 + 80010d0: f100 8215 bmi.w 80014fe + 80010d4: 6820 ldr r0, [r4, #0] + 80010d6: f001 fbf1 bl 80028bc + 80010da: 02c0 lsls r0, r0, #11 + 80010dc: d50c bpl.n 80010f8 + 80010de: 46a0 mov r8, r4 + 80010e0: f506 6912 add.w r9, r6, #2336 @ 0x920 + 80010e4: 2701 movs r7, #1 + 80010e6: 7923 ldrb r3, [r4, #4] + 80010e8: 42bb cmp r3, r7 + 80010ea: f200 8221 bhi.w 8001530 + 80010ee: 6822 ldr r2, [r4, #0] + 80010f0: 6953 ldr r3, [r2, #20] + 80010f2: f403 1380 and.w r3, r3, #1048576 @ 0x100000 + 80010f6: 6153 str r3, [r2, #20] + 80010f8: 6820 ldr r0, [r4, #0] + 80010fa: f001 fbdf bl 80028bc + 80010fe: 0281 lsls r1, r0, #10 + 8001100: d52b bpl.n 800115a + 8001102: f894 e004 ldrb.w lr, [r4, #4] + 8001106: 4623 mov r3, r4 + 8001108: f506 6132 add.w r1, r6, #2848 @ 0xb20 + 800110c: f04f 0c01 mov.w ip, #1 + 8001110: 45e6 cmp lr, ip + 8001112: d91d bls.n 8001150 + 8001114: f893 727c ldrb.w r7, [r3, #636] @ 0x27c + 8001118: 6808 ldr r0, [r1, #0] + 800111a: 2f01 cmp r7, #1 + 800111c: f040 821e bne.w 800155c + 8001120: 2800 cmp r0, #0 + 8001122: f280 821b bge.w 800155c + 8001126: f8d4 24d4 ldr.w r2, [r4, #1236] @ 0x4d4 + 800112a: ea82 4010 eor.w r0, r2, r0, lsr #16 + 800112e: 07c2 lsls r2, r0, #31 + 8001130: f100 8214 bmi.w 800155c + 8001134: f883 727b strb.w r7, [r3, #635] @ 0x27b + 8001138: 69b0 ldr r0, [r6, #24] + 800113a: f040 0080 orr.w r0, r0, #128 @ 0x80 + 800113e: 61b0 str r0, [r6, #24] + 8001140: 6970 ldr r0, [r6, #20] + 8001142: 0600 lsls r0, r0, #24 + 8001144: f100 820a bmi.w 800155c + 8001148: 686b ldr r3, [r5, #4] + 800114a: f443 7300 orr.w r3, r3, #512 @ 0x200 + 800114e: 606b str r3, [r5, #4] + 8001150: 6822 ldr r2, [r4, #0] + 8001152: 6953 ldr r3, [r2, #20] + 8001154: f403 1300 and.w r3, r3, #2097152 @ 0x200000 + 8001158: 6153 str r3, [r2, #20] + 800115a: 6820 ldr r0, [r4, #0] + 800115c: f001 fbae bl 80028bc + 8001160: 0041 lsls r1, r0, #1 + 8001162: d507 bpl.n 8001174 + 8001164: 4620 mov r0, r4 + 8001166: f002 fab1 bl 80036cc + 800116a: 6822 ldr r2, [r4, #0] + 800116c: 6953 ldr r3, [r2, #20] + 800116e: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000 + 8001172: 6153 str r3, [r2, #20] + 8001174: 6820 ldr r0, [r4, #0] + 8001176: f001 fba1 bl 80028bc + 800117a: 0742 lsls r2, r0, #29 + 800117c: d50a bpl.n 8001194 + 800117e: 6823 ldr r3, [r4, #0] + 8001180: 685d ldr r5, [r3, #4] + 8001182: 076b lsls r3, r5, #29 + 8001184: d502 bpl.n 800118c + 8001186: 4620 mov r0, r4 + 8001188: f002 faa4 bl 80036d4 + 800118c: 6822 ldr r2, [r4, #0] + 800118e: 6853 ldr r3, [r2, #4] + 8001190: 432b orrs r3, r5 + 8001192: 6053 str r3, [r2, #4] + 8001194: b009 add sp, #36 @ 0x24 + 8001196: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 800119a: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000 + 800119e: f47f aed0 bne.w 8000f42 + 80011a2: 2208 movs r2, #8 + 80011a4: f204 419c addw r1, r4, #1180 @ 0x49c + 80011a8: 4630 mov r0, r6 + 80011aa: f001 fae7 bl 800277c + 80011ae: 2324 movs r3, #36 @ 0x24 + 80011b0: fb03 4707 mla r7, r3, r7, r4 + 80011b4: f3c8 180a ubfx r8, r8, #4, #11 + 80011b8: f8d7 3268 ldr.w r3, [r7, #616] @ 0x268 + 80011bc: 4443 add r3, r8 + 80011be: e6be b.n 8000f3e + 80011c0: 6820 ldr r0, [r4, #0] + 80011c2: f001 fb7f bl 80028c4 + 80011c6: f506 6830 add.w r8, r6, #2816 @ 0xb00 + 80011ca: 9004 str r0, [sp, #16] + 80011cc: 46a2 mov sl, r4 + 80011ce: 2700 movs r7, #0 + 80011d0: 9b04 ldr r3, [sp, #16] + 80011d2: 6820 ldr r0, [r4, #0] + 80011d4: 2b00 cmp r3, #0 + 80011d6: f43f aebf beq.w 8000f58 + 80011da: 9b04 ldr r3, [sp, #16] + 80011dc: 07db lsls r3, r3, #31 + 80011de: d578 bpl.n 80012d2 + 80011e0: fa5f fb87 uxtb.w fp, r7 + 80011e4: 4659 mov r1, fp + 80011e6: f001 fb7d bl 80028e4 + 80011ea: f010 0f01 tst.w r0, #1 + 80011ee: 4681 mov r9, r0 + 80011f0: d01f beq.n 8001232 + 80011f2: 6820 ldr r0, [r4, #0] + 80011f4: 2301 movs r3, #1 + 80011f6: f8c8 3008 str.w r3, [r8, #8] + 80011fa: f894 c006 ldrb.w ip, [r4, #6] + 80011fe: 6c01 ldr r1, [r0, #64] @ 0x40 + 8001200: f500 6330 add.w r3, r0, #2816 @ 0xb00 + 8001204: eb03 1347 add.w r3, r3, r7, lsl #5 + 8001208: f1bc 0f01 cmp.w ip, #1 + 800120c: 689a ldr r2, [r3, #8] + 800120e: f040 808b bne.w 8001328 + 8001212: f012 0f08 tst.w r2, #8 + 8001216: d007 beq.n 8001228 + 8001218: 48b1 ldr r0, [pc, #708] @ (80014e0 ) + 800121a: 4281 cmp r1, r0 + 800121c: d909 bls.n 8001232 + 800121e: 0412 lsls r2, r2, #16 + 8001220: d507 bpl.n 8001232 + 8001222: f44f 4200 mov.w r2, #32768 @ 0x8000 + 8001226: e003 b.n 8001230 + 8001228: f012 0f20 tst.w r2, #32 + 800122c: d05a beq.n 80012e4 + 800122e: 2220 movs r2, #32 + 8001230: 609a str r2, [r3, #8] + 8001232: f019 0f08 tst.w r9, #8 + 8001236: d021 beq.n 800127c + 8001238: 2308 movs r3, #8 + 800123a: f8c8 3008 str.w r3, [r8, #8] + 800123e: 6823 ldr r3, [r4, #0] + 8001240: 49a7 ldr r1, [pc, #668] @ (80014e0 ) + 8001242: 6c1a ldr r2, [r3, #64] @ 0x40 + 8001244: f503 6330 add.w r3, r3, #2816 @ 0xb00 + 8001248: eb03 1347 add.w r3, r3, r7, lsl #5 + 800124c: 428a cmp r2, r1 + 800124e: 6898 ldr r0, [r3, #8] + 8001250: d904 bls.n 800125c + 8001252: 0400 lsls r0, r0, #16 + 8001254: bf44 itt mi + 8001256: f44f 4000 movmi.w r0, #32768 @ 0x8000 + 800125a: 6098 strmi r0, [r3, #8] + 800125c: 4620 mov r0, r4 + 800125e: 9205 str r2, [sp, #20] + 8001260: f002 f9e2 bl 8003628 + 8001264: 9a05 ldr r2, [sp, #20] + 8001266: 499e ldr r1, [pc, #632] @ (80014e0 ) + 8001268: 428a cmp r2, r1 + 800126a: d907 bls.n 800127c + 800126c: 79a1 ldrb r1, [r4, #6] + 800126e: 2901 cmp r1, #1 + 8001270: d104 bne.n 800127c + 8001272: 6820 ldr r0, [r4, #0] + 8001274: f204 429c addw r2, r4, #1180 @ 0x49c + 8001278: f001 fb60 bl 800293c + 800127c: f019 0f10 tst.w r9, #16 + 8001280: bf1c itt ne + 8001282: 2310 movne r3, #16 + 8001284: f8c8 3008 strne.w r3, [r8, #8] + 8001288: f019 0f02 tst.w r9, #2 + 800128c: d014 beq.n 80012b8 + 800128e: 6973 ldr r3, [r6, #20] + 8001290: 0619 lsls r1, r3, #24 + 8001292: bf42 ittt mi + 8001294: 686b ldrmi r3, [r5, #4] + 8001296: f443 6380 orrmi.w r3, r3, #1024 @ 0x400 + 800129a: 606b strmi r3, [r5, #4] + 800129c: f89a 3257 ldrb.w r3, [sl, #599] @ 0x257 + 80012a0: 2b01 cmp r3, #1 + 80012a2: d106 bne.n 80012b2 + 80012a4: 2300 movs r3, #0 + 80012a6: f88a 3257 strb.w r3, [sl, #599] @ 0x257 + 80012aa: 4659 mov r1, fp + 80012ac: 4620 mov r0, r4 + 80012ae: f002 fa05 bl 80036bc + 80012b2: 2302 movs r3, #2 + 80012b4: f8c8 3008 str.w r3, [r8, #8] + 80012b8: f019 0f20 tst.w r9, #32 + 80012bc: bf1c itt ne + 80012be: 2320 movne r3, #32 + 80012c0: f8c8 3008 strne.w r3, [r8, #8] + 80012c4: f419 5f00 tst.w r9, #8192 @ 0x2000 + 80012c8: bf1c itt ne + 80012ca: f44f 5300 movne.w r3, #8192 @ 0x2000 + 80012ce: f8c8 3008 strne.w r3, [r8, #8] + 80012d2: 9b04 ldr r3, [sp, #16] + 80012d4: 085b lsrs r3, r3, #1 + 80012d6: 3701 adds r7, #1 + 80012d8: 9304 str r3, [sp, #16] + 80012da: f108 0820 add.w r8, r8, #32 + 80012de: f10a 0a24 add.w sl, sl, #36 @ 0x24 + 80012e2: e775 b.n 80011d0 + 80012e4: f8df c1f8 ldr.w ip, [pc, #504] @ 80014e0 + 80012e8: 4561 cmp r1, ip + 80012ea: d901 bls.n 80012f0 + 80012ec: 0412 lsls r2, r2, #16 + 80012ee: d498 bmi.n 8001222 + 80012f0: 691a ldr r2, [r3, #16] + 80012f2: f8da 3274 ldr.w r3, [sl, #628] @ 0x274 + 80012f6: f3c2 0212 ubfx r2, r2, #0, #19 + 80012fa: 1a9b subs r3, r3, r2 + 80012fc: f8ca 3268 str.w r3, [sl, #616] @ 0x268 + 8001300: b96f cbnz r7, 800131e + 8001302: f8d4 2264 ldr.w r2, [r4, #612] @ 0x264 + 8001306: b92a cbnz r2, 8001314 + 8001308: f204 429c addw r2, r4, #1180 @ 0x49c + 800130c: 2101 movs r1, #1 + 800130e: f001 fb15 bl 800293c + 8001312: e004 b.n 800131e + 8001314: f8d4 2260 ldr.w r2, [r4, #608] @ 0x260 + 8001318: 441a add r2, r3 + 800131a: f8c4 2260 str.w r2, [r4, #608] @ 0x260 + 800131e: 4659 mov r1, fp + 8001320: 4620 mov r0, r4 + 8001322: f002 f987 bl 8003634 + 8001326: e784 b.n 8001232 + 8001328: f8df c1b8 ldr.w ip, [pc, #440] @ 80014e4 + 800132c: 4561 cmp r1, ip + 800132e: d107 bne.n 8001340 + 8001330: 0411 lsls r1, r2, #16 + 8001332: f53f af76 bmi.w 8001222 + 8001336: 0692 lsls r2, r2, #26 + 8001338: d5f1 bpl.n 800131e + 800133a: 2220 movs r2, #32 + 800133c: 609a str r2, [r3, #8] + 800133e: e7ee b.n 800131e + 8001340: 2f00 cmp r7, #0 + 8001342: d1ec bne.n 800131e + 8001344: f8d4 3264 ldr.w r3, [r4, #612] @ 0x264 + 8001348: 2b00 cmp r3, #0 + 800134a: d1e8 bne.n 800131e + 800134c: f204 429c addw r2, r4, #1180 @ 0x49c + 8001350: 4639 mov r1, r7 + 8001352: e7dc b.n 800130e + 8001354: 9b04 ldr r3, [sp, #16] + 8001356: 07da lsls r2, r3, #31 + 8001358: f140 8099 bpl.w 800148e + 800135c: fa5f f38a uxtb.w r3, sl + 8001360: 4619 mov r1, r3 + 8001362: 9305 str r3, [sp, #20] + 8001364: f001 fac7 bl 80028f6 + 8001368: f010 0f01 tst.w r0, #1 + 800136c: 4680 mov r8, r0 + 800136e: d01f beq.n 80013b0 + 8001370: 6b6b ldr r3, [r5, #52] @ 0x34 + 8001372: 2101 movs r1, #1 + 8001374: f00a 020f and.w r2, sl, #15 + 8001378: fa01 f202 lsl.w r2, r1, r2 + 800137c: ea23 0302 bic.w r3, r3, r2 + 8001380: 636b str r3, [r5, #52] @ 0x34 + 8001382: f8cb 1008 str.w r1, [fp, #8] + 8001386: 79a1 ldrb r1, [r4, #6] + 8001388: 2901 cmp r1, #1 + 800138a: d10d bne.n 80013a8 + 800138c: e9d7 2307 ldrd r2, r3, [r7, #28] + 8001390: 4413 add r3, r2 + 8001392: 623b str r3, [r7, #32] + 8001394: f1ba 0f00 cmp.w sl, #0 + 8001398: d106 bne.n 80013a8 + 800139a: 6a63 ldr r3, [r4, #36] @ 0x24 + 800139c: b923 cbnz r3, 80013a8 + 800139e: 6820 ldr r0, [r4, #0] + 80013a0: f204 429c addw r2, r4, #1180 @ 0x49c + 80013a4: f001 faca bl 800293c + 80013a8: 9905 ldr r1, [sp, #20] + 80013aa: 4620 mov r0, r4 + 80013ac: f002 f94b bl 8003646 + 80013b0: f018 0f08 tst.w r8, #8 + 80013b4: bf1c itt ne + 80013b6: 2308 movne r3, #8 + 80013b8: f8cb 3008 strne.w r3, [fp, #8] + 80013bc: f018 0f10 tst.w r8, #16 + 80013c0: bf1c itt ne + 80013c2: 2310 movne r3, #16 + 80013c4: f8cb 3008 strne.w r3, [fp, #8] + 80013c8: f018 0f40 tst.w r8, #64 @ 0x40 + 80013cc: bf1c itt ne + 80013ce: 2340 movne r3, #64 @ 0x40 + 80013d0: f8cb 3008 strne.w r3, [fp, #8] + 80013d4: f018 0f02 tst.w r8, #2 + 80013d8: d00f beq.n 80013fa + 80013da: 4651 mov r1, sl + 80013dc: 4630 mov r0, r6 + 80013de: f000 fed1 bl 8002184 + 80013e2: 7dfb ldrb r3, [r7, #23] + 80013e4: 2b01 cmp r3, #1 + 80013e6: d105 bne.n 80013f4 + 80013e8: 2300 movs r3, #0 + 80013ea: 9905 ldr r1, [sp, #20] + 80013ec: 75fb strb r3, [r7, #23] + 80013ee: 4620 mov r0, r4 + 80013f0: f002 f968 bl 80036c4 + 80013f4: 2302 movs r3, #2 + 80013f6: f8cb 3008 str.w r3, [fp, #8] + 80013fa: 6823 ldr r3, [r4, #0] + 80013fc: 9306 str r3, [sp, #24] + 80013fe: f018 0f80 tst.w r8, #128 @ 0x80 + 8001402: d044 beq.n 800148e + 8001404: e9d7 3209 ldrd r3, r2, [r7, #36] @ 0x24 + 8001408: 429a cmp r2, r3 + 800140a: d840 bhi.n 800148e + 800140c: eba3 0802 sub.w r8, r3, r2 + 8001410: 69fb ldr r3, [r7, #28] + 8001412: 4598 cmp r8, r3 + 8001414: bf28 it cs + 8001416: 4698 movcs r8, r3 + 8001418: 9b06 ldr r3, [sp, #24] + 800141a: f503 6310 add.w r3, r3, #2304 @ 0x900 + 800141e: f108 0803 add.w r8, r8, #3 + 8001422: eb03 134a add.w r3, r3, sl, lsl #5 + 8001426: ea4f 0898 mov.w r8, r8, lsr #2 + 800142a: 9307 str r3, [sp, #28] + 800142c: 9b07 ldr r3, [sp, #28] + 800142e: 6999 ldr r1, [r3, #24] + 8001430: b289 uxth r1, r1 + 8001432: 4541 cmp r1, r8 + 8001434: e9d7 3209 ldrd r3, r2, [r7, #36] @ 0x24 + 8001438: d327 bcc.n 800148a + 800143a: 4293 cmp r3, r2 + 800143c: d80b bhi.n 8001456 + 800143e: 9b06 ldr r3, [sp, #24] + 8001440: f00a 000f and.w r0, sl, #15 + 8001444: f8d3 2834 ldr.w r2, [r3, #2100] @ 0x834 + 8001448: 2101 movs r1, #1 + 800144a: 4081 lsls r1, r0 + 800144c: ea22 0201 bic.w r2, r2, r1 + 8001450: f8c3 2834 str.w r2, [r3, #2100] @ 0x834 + 8001454: e01b b.n 800148e + 8001456: eba3 0902 sub.w r9, r3, r2 + 800145a: 69fb ldr r3, [r7, #28] + 800145c: 9a05 ldr r2, [sp, #20] + 800145e: 9806 ldr r0, [sp, #24] + 8001460: 4599 cmp r9, r3 + 8001462: bf28 it cs + 8001464: 4699 movcs r9, r3 + 8001466: 79a3 ldrb r3, [r4, #6] + 8001468: 9300 str r3, [sp, #0] + 800146a: 6a39 ldr r1, [r7, #32] + 800146c: fa1f f389 uxth.w r3, r9 + 8001470: f001 f86e bl 8002550 + 8001474: 6a3b ldr r3, [r7, #32] + 8001476: 444b add r3, r9 + 8001478: 623b str r3, [r7, #32] + 800147a: 6abb ldr r3, [r7, #40] @ 0x28 + 800147c: f109 0803 add.w r8, r9, #3 + 8001480: 444b add r3, r9 + 8001482: ea4f 0898 mov.w r8, r8, lsr #2 + 8001486: 62bb str r3, [r7, #40] @ 0x28 + 8001488: e7d0 b.n 800142c + 800148a: 4293 cmp r3, r2 + 800148c: d9d7 bls.n 800143e + 800148e: 9b04 ldr r3, [sp, #16] + 8001490: 085b lsrs r3, r3, #1 + 8001492: f10a 0a01 add.w sl, sl, #1 + 8001496: 9304 str r3, [sp, #16] + 8001498: 3724 adds r7, #36 @ 0x24 + 800149a: f10b 0b20 add.w fp, fp, #32 + 800149e: e569 b.n 8000f74 + 80014a0: 4620 mov r0, r4 + 80014a2: f002 f907 bl 80036b4 + 80014a6: e57e b.n 8000fa6 + 80014a8: 4620 mov r0, r4 + 80014aa: f002 f8eb bl 8003684 + 80014ae: e5a9 b.n 8001004 + 80014b0: 6099 str r1, [r3, #8] + 80014b2: 681a ldr r2, [r3, #0] + 80014b4: f422 1200 bic.w r2, r2, #2097152 @ 0x200000 + 80014b8: 601a str r2, [r3, #0] + 80014ba: f8c3 1208 str.w r1, [r3, #520] @ 0x208 + 80014be: f8d3 2200 ldr.w r2, [r3, #512] @ 0x200 + 80014c2: f422 1200 bic.w r2, r2, #2097152 @ 0x200000 + 80014c6: f8c3 2200 str.w r2, [r3, #512] @ 0x200 + 80014ca: f8d3 2200 ldr.w r2, [r3, #512] @ 0x200 + 80014ce: f042 6200 orr.w r2, r2, #134217728 @ 0x8000000 + 80014d2: f8c3 2200 str.w r2, [r3, #512] @ 0x200 + 80014d6: 9a03 ldr r2, [sp, #12] + 80014d8: 3201 adds r2, #1 + 80014da: 9203 str r2, [sp, #12] + 80014dc: 3320 adds r3, #32 + 80014de: e5a3 b.n 8001028 + 80014e0: 4f54300a .word 0x4f54300a + 80014e4: 4f54310a .word 0x4f54310a + 80014e8: 696b ldr r3, [r5, #20] + 80014ea: f443 5300 orr.w r3, r3, #8192 @ 0x2000 + 80014ee: f043 032b orr.w r3, r3, #43 @ 0x2b + 80014f2: 616b str r3, [r5, #20] + 80014f4: 692b ldr r3, [r5, #16] + 80014f6: f043 030b orr.w r3, r3, #11 + 80014fa: 612b str r3, [r5, #16] + 80014fc: e5aa b.n 8001054 + 80014fe: 69b3 ldr r3, [r6, #24] + 8001500: f023 0380 bic.w r3, r3, #128 @ 0x80 + 8001504: 61b3 str r3, [r6, #24] + 8001506: 2701 movs r7, #1 + 8001508: f204 2857 addw r8, r4, #599 @ 0x257 + 800150c: f04f 0924 mov.w r9, #36 @ 0x24 + 8001510: 7923 ldrb r3, [r4, #4] + 8001512: 42bb cmp r3, r7 + 8001514: f67f adde bls.w 80010d4 + 8001518: fb09 f307 mul.w r3, r9, r7 + 800151c: f818 3003 ldrb.w r3, [r8, r3] + 8001520: 2b01 cmp r3, #1 + 8001522: d103 bne.n 800152c + 8001524: b2f9 uxtb r1, r7 + 8001526: 4620 mov r0, r4 + 8001528: f7ff fca8 bl 8000e7c + 800152c: 3701 adds r7, #1 + 800152e: e7ef b.n 8001510 + 8001530: f898 303c ldrb.w r3, [r8, #60] @ 0x3c + 8001534: f8d9 2000 ldr.w r2, [r9] + 8001538: 2b01 cmp r3, #1 + 800153a: d109 bne.n 8001550 + 800153c: 2a00 cmp r2, #0 + 800153e: da07 bge.n 8001550 + 8001540: f067 017f orn r1, r7, #127 @ 0x7f + 8001544: f888 303b strb.w r3, [r8, #59] @ 0x3b + 8001548: b2c9 uxtb r1, r1 + 800154a: 4620 mov r0, r4 + 800154c: f7ff fc96 bl 8000e7c + 8001550: 3701 adds r7, #1 + 8001552: f108 0824 add.w r8, r8, #36 @ 0x24 + 8001556: f109 0920 add.w r9, r9, #32 + 800155a: e5c4 b.n 80010e6 + 800155c: f10c 0c01 add.w ip, ip, #1 + 8001560: 3324 adds r3, #36 @ 0x24 + 8001562: 3120 adds r1, #32 + 8001564: e5d4 b.n 8001110 + 8001566: bf00 nop + +08001568 : + 8001568: 6800 ldr r0, [r0, #0] + 800156a: b570 push {r4, r5, r6, lr} + 800156c: 6a43 ldr r3, [r0, #36] @ 0x24 + 800156e: 0412 lsls r2, r2, #16 + 8001570: b919 cbnz r1, 800157a + 8001572: 4313 orrs r3, r2 + 8001574: 6283 str r3, [r0, #40] @ 0x28 + 8001576: 2000 movs r0, #0 + 8001578: bd70 pop {r4, r5, r6, pc} + 800157a: 6a84 ldr r4, [r0, #40] @ 0x28 + 800157c: 1e4e subs r6, r1, #1 + 800157e: eb03 4314 add.w r3, r3, r4, lsr #16 + 8001582: 2400 movs r4, #0 + 8001584: 42b4 cmp r4, r6 + 8001586: d305 bcc.n 8001594 + 8001588: 313f adds r1, #63 @ 0x3f + 800158a: eb00 0081 add.w r0, r0, r1, lsl #2 + 800158e: 4313 orrs r3, r2 + 8001590: 6043 str r3, [r0, #4] + 8001592: e7f0 b.n 8001576 + 8001594: f104 0540 add.w r5, r4, #64 @ 0x40 + 8001598: eb00 0585 add.w r5, r0, r5, lsl #2 + 800159c: 3401 adds r4, #1 + 800159e: 686d ldr r5, [r5, #4] + 80015a0: eb03 4315 add.w r3, r3, r5, lsr #16 + 80015a4: e7ee b.n 8001584 + +080015a6 : + 80015a6: 6803 ldr r3, [r0, #0] + 80015a8: 2000 movs r0, #0 + 80015aa: 6259 str r1, [r3, #36] @ 0x24 + 80015ac: 4770 bx lr + +080015ae : + 80015ae: 4603 mov r3, r0 + 80015b0: 2101 movs r1, #1 + 80015b2: 6802 ldr r2, [r0, #0] + 80015b4: f8c0 14d8 str.w r1, [r0, #1240] @ 0x4d8 + 80015b8: 2000 movs r0, #0 + 80015ba: f883 04cc strb.w r0, [r3, #1228] @ 0x4cc + 80015be: 6993 ldr r3, [r2, #24] + 80015c0: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 80015c4: 6193 str r3, [r2, #24] + 80015c6: 6d53 ldr r3, [r2, #84] @ 0x54 + 80015c8: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 80015cc: f043 0303 orr.w r3, r3, #3 + 80015d0: 6553 str r3, [r2, #84] @ 0x54 + 80015d2: 4770 bx lr + +080015d4 : + 80015d4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 80015d8: 460d mov r5, r1 + 80015da: 4604 mov r4, r0 + 80015dc: b910 cbnz r0, 80015e4 + 80015de: 2001 movs r0, #1 + 80015e0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 80015e4: 4b43 ldr r3, [pc, #268] @ (80016f4 ) + 80015e6: 681a ldr r2, [r3, #0] + 80015e8: f002 020f and.w r2, r2, #15 + 80015ec: 428a cmp r2, r1 + 80015ee: d328 bcc.n 8001642 + 80015f0: 6821 ldr r1, [r4, #0] + 80015f2: 078f lsls r7, r1, #30 + 80015f4: d42d bmi.n 8001652 + 80015f6: 07c8 lsls r0, r1, #31 + 80015f8: d440 bmi.n 800167c + 80015fa: 4b3e ldr r3, [pc, #248] @ (80016f4 ) + 80015fc: 681a ldr r2, [r3, #0] + 80015fe: f002 020f and.w r2, r2, #15 + 8001602: 42aa cmp r2, r5 + 8001604: d865 bhi.n 80016d2 + 8001606: 6822 ldr r2, [r4, #0] + 8001608: 0751 lsls r1, r2, #29 + 800160a: d46b bmi.n 80016e4 + 800160c: 0713 lsls r3, r2, #28 + 800160e: d507 bpl.n 8001620 + 8001610: 4a39 ldr r2, [pc, #228] @ (80016f8 ) + 8001612: 6921 ldr r1, [r4, #16] + 8001614: 6893 ldr r3, [r2, #8] + 8001616: f423 4360 bic.w r3, r3, #57344 @ 0xe000 + 800161a: ea43 03c1 orr.w r3, r3, r1, lsl #3 + 800161e: 6093 str r3, [r2, #8] + 8001620: f000 fa82 bl 8001b28 + 8001624: 4b34 ldr r3, [pc, #208] @ (80016f8 ) + 8001626: 4a35 ldr r2, [pc, #212] @ (80016fc ) + 8001628: 689b ldr r3, [r3, #8] + 800162a: f3c3 1303 ubfx r3, r3, #4, #4 + 800162e: 5cd3 ldrb r3, [r2, r3] + 8001630: 40d8 lsrs r0, r3 + 8001632: 4b33 ldr r3, [pc, #204] @ (8001700 ) + 8001634: 6018 str r0, [r3, #0] + 8001636: 4b33 ldr r3, [pc, #204] @ (8001704 ) + 8001638: 6818 ldr r0, [r3, #0] + 800163a: f7ff f8cb bl 80007d4 + 800163e: 2000 movs r0, #0 + 8001640: e7ce b.n 80015e0 + 8001642: b2ca uxtb r2, r1 + 8001644: 701a strb r2, [r3, #0] + 8001646: 681b ldr r3, [r3, #0] + 8001648: f003 030f and.w r3, r3, #15 + 800164c: 428b cmp r3, r1 + 800164e: d1c6 bne.n 80015de + 8001650: e7ce b.n 80015f0 + 8001652: 4b29 ldr r3, [pc, #164] @ (80016f8 ) + 8001654: f011 0f04 tst.w r1, #4 + 8001658: bf1e ittt ne + 800165a: 689a ldrne r2, [r3, #8] + 800165c: f442 52e0 orrne.w r2, r2, #7168 @ 0x1c00 + 8001660: 609a strne r2, [r3, #8] + 8001662: 070e lsls r6, r1, #28 + 8001664: bf42 ittt mi + 8001666: 689a ldrmi r2, [r3, #8] + 8001668: f442 4260 orrmi.w r2, r2, #57344 @ 0xe000 + 800166c: 609a strmi r2, [r3, #8] + 800166e: 689a ldr r2, [r3, #8] + 8001670: 68a0 ldr r0, [r4, #8] + 8001672: f022 02f0 bic.w r2, r2, #240 @ 0xf0 + 8001676: 4302 orrs r2, r0 + 8001678: 609a str r2, [r3, #8] + 800167a: e7bc b.n 80015f6 + 800167c: 6862 ldr r2, [r4, #4] + 800167e: 4b1e ldr r3, [pc, #120] @ (80016f8 ) + 8001680: 2a01 cmp r2, #1 + 8001682: d11c bne.n 80016be + 8001684: 681b ldr r3, [r3, #0] + 8001686: f413 3f00 tst.w r3, #131072 @ 0x20000 + 800168a: d0a8 beq.n 80015de + 800168c: 4e1a ldr r6, [pc, #104] @ (80016f8 ) + 800168e: 68b3 ldr r3, [r6, #8] + 8001690: f023 0303 bic.w r3, r3, #3 + 8001694: 4313 orrs r3, r2 + 8001696: 60b3 str r3, [r6, #8] + 8001698: f7ff f8e6 bl 8000868 + 800169c: f241 3888 movw r8, #5000 @ 0x1388 + 80016a0: 4607 mov r7, r0 + 80016a2: 68b3 ldr r3, [r6, #8] + 80016a4: 6862 ldr r2, [r4, #4] + 80016a6: f003 030c and.w r3, r3, #12 + 80016aa: ebb3 0f82 cmp.w r3, r2, lsl #2 + 80016ae: d0a4 beq.n 80015fa + 80016b0: f7ff f8da bl 8000868 + 80016b4: 1bc0 subs r0, r0, r7 + 80016b6: 4540 cmp r0, r8 + 80016b8: d9f3 bls.n 80016a2 + 80016ba: 2003 movs r0, #3 + 80016bc: e790 b.n 80015e0 + 80016be: 1e91 subs r1, r2, #2 + 80016c0: 2901 cmp r1, #1 + 80016c2: 681b ldr r3, [r3, #0] + 80016c4: d802 bhi.n 80016cc + 80016c6: f013 7f00 tst.w r3, #33554432 @ 0x2000000 + 80016ca: e7de b.n 800168a + 80016cc: f013 0f02 tst.w r3, #2 + 80016d0: e7db b.n 800168a + 80016d2: b2ea uxtb r2, r5 + 80016d4: 701a strb r2, [r3, #0] + 80016d6: 681b ldr r3, [r3, #0] + 80016d8: f003 030f and.w r3, r3, #15 + 80016dc: 42ab cmp r3, r5 + 80016de: f47f af7e bne.w 80015de + 80016e2: e790 b.n 8001606 + 80016e4: 4904 ldr r1, [pc, #16] @ (80016f8 ) + 80016e6: 68e0 ldr r0, [r4, #12] + 80016e8: 688b ldr r3, [r1, #8] + 80016ea: f423 53e0 bic.w r3, r3, #7168 @ 0x1c00 + 80016ee: 4303 orrs r3, r0 + 80016f0: 608b str r3, [r1, #8] + 80016f2: e78b b.n 800160c + 80016f4: 40023c00 .word 0x40023c00 + 80016f8: 40023800 .word 0x40023800 + 80016fc: 080038dc .word 0x080038dc + 8001700: 20000000 .word 0x20000000 + 8001704: 20000008 .word 0x20000008 + +08001708 : + 8001708: 4b01 ldr r3, [pc, #4] @ (8001710 ) + 800170a: 6818 ldr r0, [r3, #0] + 800170c: 4770 bx lr + 800170e: bf00 nop + 8001710: 20000000 .word 0x20000000 + +08001714 : + 8001714: 6803 ldr r3, [r0, #0] + 8001716: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + 800171a: f013 0601 ands.w r6, r3, #1 + 800171e: 4604 mov r4, r0 + 8001720: d00b beq.n 800173a + 8001722: 49ac ldr r1, [pc, #688] @ (80019d4 ) + 8001724: 6b86 ldr r6, [r0, #56] @ 0x38 + 8001726: f8d1 208c ldr.w r2, [r1, #140] @ 0x8c + 800172a: f022 62c0 bic.w r2, r2, #100663296 @ 0x6000000 + 800172e: 4332 orrs r2, r6 + 8001730: fab6 f686 clz r6, r6 + 8001734: f8c1 208c str.w r2, [r1, #140] @ 0x8c + 8001738: 0976 lsrs r6, r6, #5 + 800173a: 079a lsls r2, r3, #30 + 800173c: d50b bpl.n 8001756 + 800173e: 48a5 ldr r0, [pc, #660] @ (80019d4 ) + 8001740: 6be1 ldr r1, [r4, #60] @ 0x3c + 8001742: f8d0 208c ldr.w r2, [r0, #140] @ 0x8c + 8001746: f022 52c0 bic.w r2, r2, #402653184 @ 0x18000000 + 800174a: 430a orrs r2, r1 + 800174c: 2900 cmp r1, #0 + 800174e: f8c0 208c str.w r2, [r0, #140] @ 0x8c + 8001752: bf08 it eq + 8001754: 2601 moveq r6, #1 + 8001756: f013 0504 ands.w r5, r3, #4 + 800175a: d012 beq.n 8001782 + 800175c: 499d ldr r1, [pc, #628] @ (80019d4 ) + 800175e: 6b25 ldr r5, [r4, #48] @ 0x30 + 8001760: f8d1 208c ldr.w r2, [r1, #140] @ 0x8c + 8001764: f5b5 1f80 cmp.w r5, #1048576 @ 0x100000 + 8001768: f422 1240 bic.w r2, r2, #3145728 @ 0x300000 + 800176c: ea42 0205 orr.w r2, r2, r5 + 8001770: bf18 it ne + 8001772: fab5 f585 clzne r5, r5 + 8001776: f8c1 208c str.w r2, [r1, #140] @ 0x8c + 800177a: bf12 itee ne + 800177c: 096d lsrne r5, r5, #5 + 800177e: 2500 moveq r5, #0 + 8001780: 2601 moveq r6, #1 + 8001782: 071f lsls r7, r3, #28 + 8001784: d50f bpl.n 80017a6 + 8001786: 4893 ldr r0, [pc, #588] @ (80019d4 ) + 8001788: 6b61 ldr r1, [r4, #52] @ 0x34 + 800178a: f8d0 208c ldr.w r2, [r0, #140] @ 0x8c + 800178e: f422 0240 bic.w r2, r2, #12582912 @ 0xc00000 + 8001792: 430a orrs r2, r1 + 8001794: f5b1 0f80 cmp.w r1, #4194304 @ 0x400000 + 8001798: f8c0 208c str.w r2, [r0, #140] @ 0x8c + 800179c: f000 810c beq.w 80019b8 + 80017a0: 2900 cmp r1, #0 + 80017a2: bf08 it eq + 80017a4: 2501 moveq r5, #1 + 80017a6: 0698 lsls r0, r3, #26 + 80017a8: d534 bpl.n 8001814 + 80017aa: 2300 movs r3, #0 + 80017ac: 9301 str r3, [sp, #4] + 80017ae: 4b89 ldr r3, [pc, #548] @ (80019d4 ) + 80017b0: 4f89 ldr r7, [pc, #548] @ (80019d8 ) + 80017b2: 6c1a ldr r2, [r3, #64] @ 0x40 + 80017b4: f042 5280 orr.w r2, r2, #268435456 @ 0x10000000 + 80017b8: 641a str r2, [r3, #64] @ 0x40 + 80017ba: 6c1b ldr r3, [r3, #64] @ 0x40 + 80017bc: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 80017c0: 9301 str r3, [sp, #4] + 80017c2: 9b01 ldr r3, [sp, #4] + 80017c4: 683b ldr r3, [r7, #0] + 80017c6: f443 7380 orr.w r3, r3, #256 @ 0x100 + 80017ca: 603b str r3, [r7, #0] + 80017cc: f7ff f84c bl 8000868 + 80017d0: 4680 mov r8, r0 + 80017d2: 683b ldr r3, [r7, #0] + 80017d4: 05d9 lsls r1, r3, #23 + 80017d6: f140 80f1 bpl.w 80019bc + 80017da: 4f7e ldr r7, [pc, #504] @ (80019d4 ) + 80017dc: 6c22 ldr r2, [r4, #64] @ 0x40 + 80017de: 6f3b ldr r3, [r7, #112] @ 0x70 + 80017e0: f413 7340 ands.w r3, r3, #768 @ 0x300 + 80017e4: f040 80fe bne.w 80019e4 + 80017e8: 6c23 ldr r3, [r4, #64] @ 0x40 + 80017ea: f403 7240 and.w r2, r3, #768 @ 0x300 + 80017ee: f5b2 7f40 cmp.w r2, #768 @ 0x300 + 80017f2: 4a78 ldr r2, [pc, #480] @ (80019d4 ) + 80017f4: f040 811a bne.w 8001a2c + 80017f8: 6891 ldr r1, [r2, #8] + 80017fa: f023 4070 bic.w r0, r3, #4026531840 @ 0xf0000000 + 80017fe: f421 11f8 bic.w r1, r1, #2031616 @ 0x1f0000 + 8001802: f420 7040 bic.w r0, r0, #768 @ 0x300 + 8001806: 4301 orrs r1, r0 + 8001808: 6091 str r1, [r2, #8] + 800180a: 6f11 ldr r1, [r2, #112] @ 0x70 + 800180c: f3c3 030b ubfx r3, r3, #0, #12 + 8001810: 430b orrs r3, r1 + 8001812: 6713 str r3, [r2, #112] @ 0x70 + 8001814: 6823 ldr r3, [r4, #0] + 8001816: 06d8 lsls r0, r3, #27 + 8001818: bf42 ittt mi + 800181a: 4b70 ldrmi r3, [pc, #448] @ (80019dc ) + 800181c: f894 2058 ldrbmi.w r2, [r4, #88] @ 0x58 + 8001820: f8c3 21e0 strmi.w r2, [r3, #480] @ 0x1e0 + 8001824: 6823 ldr r3, [r4, #0] + 8001826: 0619 lsls r1, r3, #24 + 8001828: d508 bpl.n 800183c + 800182a: 496a ldr r1, [pc, #424] @ (80019d4 ) + 800182c: 6ce0 ldr r0, [r4, #76] @ 0x4c + 800182e: f8d1 2094 ldr.w r2, [r1, #148] @ 0x94 + 8001832: f422 0240 bic.w r2, r2, #12582912 @ 0xc00000 + 8001836: 4302 orrs r2, r0 + 8001838: f8c1 2094 str.w r2, [r1, #148] @ 0x94 + 800183c: 065a lsls r2, r3, #25 + 800183e: d508 bpl.n 8001852 + 8001840: 4964 ldr r1, [pc, #400] @ (80019d4 ) + 8001842: 6ca0 ldr r0, [r4, #72] @ 0x48 + 8001844: f8d1 2094 ldr.w r2, [r1, #148] @ 0x94 + 8001848: f022 6280 bic.w r2, r2, #67108864 @ 0x4000000 + 800184c: 4302 orrs r2, r0 + 800184e: f8c1 2094 str.w r2, [r1, #148] @ 0x94 + 8001852: 05df lsls r7, r3, #23 + 8001854: d50c bpl.n 8001870 + 8001856: 485f ldr r0, [pc, #380] @ (80019d4 ) + 8001858: 6d61 ldr r1, [r4, #84] @ 0x54 + 800185a: f8d0 2094 ldr.w r2, [r0, #148] @ 0x94 + 800185e: f022 6200 bic.w r2, r2, #134217728 @ 0x8000000 + 8001862: 430a orrs r2, r1 + 8001864: f1b1 6f00 cmp.w r1, #134217728 @ 0x8000000 + 8001868: f8c0 2094 str.w r2, [r0, #148] @ 0x94 + 800186c: bf08 it eq + 800186e: 2501 moveq r5, #1 + 8001870: 0598 lsls r0, r3, #22 + 8001872: d508 bpl.n 8001886 + 8001874: 4957 ldr r1, [pc, #348] @ (80019d4 ) + 8001876: 6c60 ldr r0, [r4, #68] @ 0x44 + 8001878: f8d1 2094 ldr.w r2, [r1, #148] @ 0x94 + 800187c: f022 5280 bic.w r2, r2, #268435456 @ 0x10000000 + 8001880: 4302 orrs r2, r0 + 8001882: f8c1 2094 str.w r2, [r1, #148] @ 0x94 + 8001886: 0559 lsls r1, r3, #21 + 8001888: f100 80d4 bmi.w 8001a34 + 800188c: 2e01 cmp r6, #1 + 800188e: f040 80df bne.w 8001a50 + 8001892: 4b53 ldr r3, [pc, #332] @ (80019e0 ) + 8001894: 4f4f ldr r7, [pc, #316] @ (80019d4 ) + 8001896: 2200 movs r2, #0 + 8001898: 669a str r2, [r3, #104] @ 0x68 + 800189a: f7fe ffe5 bl 8000868 + 800189e: 4606 mov r6, r0 + 80018a0: 683b ldr r3, [r7, #0] + 80018a2: 011a lsls r2, r3, #4 + 80018a4: f100 8129 bmi.w 8001afa + 80018a8: 6822 ldr r2, [r4, #0] + 80018aa: 07d3 lsls r3, r2, #31 + 80018ac: d501 bpl.n 80018b2 + 80018ae: 6ba3 ldr r3, [r4, #56] @ 0x38 + 80018b0: b11b cbz r3, 80018ba + 80018b2: 0797 lsls r7, r2, #30 + 80018b4: d515 bpl.n 80018e2 + 80018b6: 6be3 ldr r3, [r4, #60] @ 0x3c + 80018b8: b99b cbnz r3, 80018e2 + 80018ba: 4946 ldr r1, [pc, #280] @ (80019d4 ) + 80018bc: f8d1 3084 ldr.w r3, [r1, #132] @ 0x84 + 80018c0: f8d1 0084 ldr.w r0, [r1, #132] @ 0x84 + 80018c4: f403 3340 and.w r3, r3, #196608 @ 0x30000 + 80018c8: f000 6070 and.w r0, r0, #251658240 @ 0xf000000 + 80018cc: 4303 orrs r3, r0 + 80018ce: 6860 ldr r0, [r4, #4] + 80018d0: 4303 orrs r3, r0 + 80018d2: 68a0 ldr r0, [r4, #8] + 80018d4: ea43 1380 orr.w r3, r3, r0, lsl #6 + 80018d8: 6960 ldr r0, [r4, #20] + 80018da: ea43 7300 orr.w r3, r3, r0, lsl #28 + 80018de: f8c1 3084 str.w r3, [r1, #132] @ 0x84 + 80018e2: 0756 lsls r6, r2, #29 + 80018e4: d503 bpl.n 80018ee + 80018e6: 6b23 ldr r3, [r4, #48] @ 0x30 + 80018e8: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000 + 80018ec: d005 beq.n 80018fa + 80018ee: 0710 lsls r0, r2, #28 + 80018f0: d520 bpl.n 8001934 + 80018f2: 6b63 ldr r3, [r4, #52] @ 0x34 + 80018f4: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 + 80018f8: d11c bne.n 8001934 + 80018fa: 4936 ldr r1, [pc, #216] @ (80019d4 ) + 80018fc: f8d1 3084 ldr.w r3, [r1, #132] @ 0x84 + 8001900: f8d1 0084 ldr.w r0, [r1, #132] @ 0x84 + 8001904: f403 3340 and.w r3, r3, #196608 @ 0x30000 + 8001908: f000 40e0 and.w r0, r0, #1879048192 @ 0x70000000 + 800190c: 4303 orrs r3, r0 + 800190e: 6860 ldr r0, [r4, #4] + 8001910: 4303 orrs r3, r0 + 8001912: 68a0 ldr r0, [r4, #8] + 8001914: ea43 1380 orr.w r3, r3, r0, lsl #6 + 8001918: 6920 ldr r0, [r4, #16] + 800191a: ea43 6300 orr.w r3, r3, r0, lsl #24 + 800191e: f8c1 3084 str.w r3, [r1, #132] @ 0x84 + 8001922: f8d1 008c ldr.w r0, [r1, #140] @ 0x8c + 8001926: 6aa3 ldr r3, [r4, #40] @ 0x28 + 8001928: f020 001f bic.w r0, r0, #31 + 800192c: 3b01 subs r3, #1 + 800192e: 4303 orrs r3, r0 + 8001930: f8c1 308c str.w r3, [r1, #140] @ 0x8c + 8001934: 0551 lsls r1, r2, #21 + 8001936: d51b bpl.n 8001970 + 8001938: 6d23 ldr r3, [r4, #80] @ 0x50 + 800193a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000 + 800193e: d117 bne.n 8001970 + 8001940: 4824 ldr r0, [pc, #144] @ (80019d4 ) + 8001942: 6866 ldr r6, [r4, #4] + 8001944: f8d0 1084 ldr.w r1, [r0, #132] @ 0x84 + 8001948: f8d0 3084 ldr.w r3, [r0, #132] @ 0x84 + 800194c: f003 43e0 and.w r3, r3, #1879048192 @ 0x70000000 + 8001950: 4333 orrs r3, r6 + 8001952: 68a6 ldr r6, [r4, #8] + 8001954: f3c1 4101 ubfx r1, r1, #16, #2 + 8001958: 3101 adds r1, #1 + 800195a: ea43 1386 orr.w r3, r3, r6, lsl #6 + 800195e: ea43 6341 orr.w r3, r3, r1, lsl #25 + 8001962: 68e1 ldr r1, [r4, #12] + 8001964: 0849 lsrs r1, r1, #1 + 8001966: 3901 subs r1, #1 + 8001968: ea43 4301 orr.w r3, r3, r1, lsl #16 + 800196c: f8c0 3084 str.w r3, [r0, #132] @ 0x84 + 8001970: 0512 lsls r2, r2, #20 + 8001972: d511 bpl.n 8001998 + 8001974: 6923 ldr r3, [r4, #16] + 8001976: 68a2 ldr r2, [r4, #8] + 8001978: 061b lsls r3, r3, #24 + 800197a: ea43 1382 orr.w r3, r3, r2, lsl #6 + 800197e: 6862 ldr r2, [r4, #4] + 8001980: 4313 orrs r3, r2 + 8001982: 6962 ldr r2, [r4, #20] + 8001984: ea43 7302 orr.w r3, r3, r2, lsl #28 + 8001988: 68e2 ldr r2, [r4, #12] + 800198a: 0852 lsrs r2, r2, #1 + 800198c: 3a01 subs r2, #1 + 800198e: ea43 4302 orr.w r3, r3, r2, lsl #16 + 8001992: 4a10 ldr r2, [pc, #64] @ (80019d4 ) + 8001994: f8c2 3084 str.w r3, [r2, #132] @ 0x84 + 8001998: 4b11 ldr r3, [pc, #68] @ (80019e0 ) + 800199a: 4f0e ldr r7, [pc, #56] @ (80019d4 ) + 800199c: 2201 movs r2, #1 + 800199e: 669a str r2, [r3, #104] @ 0x68 + 80019a0: f7fe ff62 bl 8000868 + 80019a4: 4606 mov r6, r0 + 80019a6: 683b ldr r3, [r7, #0] + 80019a8: 011b lsls r3, r3, #4 + 80019aa: d455 bmi.n 8001a58 + 80019ac: f7fe ff5c bl 8000868 + 80019b0: 1b80 subs r0, r0, r6 + 80019b2: 2802 cmp r0, #2 + 80019b4: d9f7 bls.n 80019a6 + 80019b6: e008 b.n 80019ca + 80019b8: 2601 movs r6, #1 + 80019ba: e6f4 b.n 80017a6 + 80019bc: f7fe ff54 bl 8000868 + 80019c0: eba0 0008 sub.w r0, r0, r8 + 80019c4: 2802 cmp r0, #2 + 80019c6: f67f af04 bls.w 80017d2 + 80019ca: 2003 movs r0, #3 + 80019cc: b003 add sp, #12 + 80019ce: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 80019d2: bf00 nop + 80019d4: 40023800 .word 0x40023800 + 80019d8: 40007000 .word 0x40007000 + 80019dc: 42471000 .word 0x42471000 + 80019e0: 42470000 .word 0x42470000 + 80019e4: f402 7240 and.w r2, r2, #768 @ 0x300 + 80019e8: 4293 cmp r3, r2 + 80019ea: f43f aefd beq.w 80017e8 + 80019ee: 6f3b ldr r3, [r7, #112] @ 0x70 + 80019f0: 4a4b ldr r2, [pc, #300] @ (8001b20 ) + 80019f2: 2101 movs r1, #1 + 80019f4: f8c2 1e40 str.w r1, [r2, #3648] @ 0xe40 + 80019f8: f423 7340 bic.w r3, r3, #768 @ 0x300 + 80019fc: 2100 movs r1, #0 + 80019fe: f8c2 1e40 str.w r1, [r2, #3648] @ 0xe40 + 8001a02: 673b str r3, [r7, #112] @ 0x70 + 8001a04: 6f3b ldr r3, [r7, #112] @ 0x70 + 8001a06: 07da lsls r2, r3, #31 + 8001a08: f57f aeee bpl.w 80017e8 + 8001a0c: f7fe ff2c bl 8000868 + 8001a10: f241 3988 movw r9, #5000 @ 0x1388 + 8001a14: 4680 mov r8, r0 + 8001a16: 6f3b ldr r3, [r7, #112] @ 0x70 + 8001a18: 079b lsls r3, r3, #30 + 8001a1a: f53f aee5 bmi.w 80017e8 + 8001a1e: f7fe ff23 bl 8000868 + 8001a22: eba0 0008 sub.w r0, r0, r8 + 8001a26: 4548 cmp r0, r9 + 8001a28: d9f5 bls.n 8001a16 + 8001a2a: e7ce b.n 80019ca + 8001a2c: 6891 ldr r1, [r2, #8] + 8001a2e: f421 11f8 bic.w r1, r1, #2031616 @ 0x1f0000 + 8001a32: e6e9 b.n 8001808 + 8001a34: 483b ldr r0, [pc, #236] @ (8001b24 ) + 8001a36: 6d21 ldr r1, [r4, #80] @ 0x50 + 8001a38: f8d0 2094 ldr.w r2, [r0, #148] @ 0x94 + 8001a3c: f022 5200 bic.w r2, r2, #536870912 @ 0x20000000 + 8001a40: 430a orrs r2, r1 + 8001a42: f1b1 5f00 cmp.w r1, #536870912 @ 0x20000000 + 8001a46: f8c0 2094 str.w r2, [r0, #148] @ 0x94 + 8001a4a: f47f af1f bne.w 800188c + 8001a4e: e720 b.n 8001892 + 8001a50: f5b3 6f00 cmp.w r3, #2048 @ 0x800 + 8001a54: f43f af1d beq.w 8001892 + 8001a58: 2d01 cmp r5, #1 + 8001a5a: d14c bne.n 8001af6 + 8001a5c: 4b30 ldr r3, [pc, #192] @ (8001b20 ) + 8001a5e: 4e31 ldr r6, [pc, #196] @ (8001b24 ) + 8001a60: 2200 movs r2, #0 + 8001a62: 671a str r2, [r3, #112] @ 0x70 + 8001a64: f7fe ff00 bl 8000868 + 8001a68: 4605 mov r5, r0 + 8001a6a: 6833 ldr r3, [r6, #0] + 8001a6c: 009f lsls r7, r3, #2 + 8001a6e: d44b bmi.n 8001b08 + 8001a70: 6821 ldr r1, [r4, #0] + 8001a72: 074d lsls r5, r1, #29 + 8001a74: d501 bpl.n 8001a7a + 8001a76: 6b23 ldr r3, [r4, #48] @ 0x30 + 8001a78: b11b cbz r3, 8001a82 + 8001a7a: 0708 lsls r0, r1, #28 + 8001a7c: d51a bpl.n 8001ab4 + 8001a7e: 6b63 ldr r3, [r4, #52] @ 0x34 + 8001a80: b9c3 cbnz r3, 8001ab4 + 8001a82: 4a28 ldr r2, [pc, #160] @ (8001b24 ) + 8001a84: 69a0 ldr r0, [r4, #24] + 8001a86: f8d2 3088 ldr.w r3, [r2, #136] @ 0x88 + 8001a8a: f403 3340 and.w r3, r3, #196608 @ 0x30000 + 8001a8e: 4303 orrs r3, r0 + 8001a90: 69e0 ldr r0, [r4, #28] + 8001a92: ea43 1380 orr.w r3, r3, r0, lsl #6 + 8001a96: 6a60 ldr r0, [r4, #36] @ 0x24 + 8001a98: ea43 6300 orr.w r3, r3, r0, lsl #24 + 8001a9c: f8c2 3088 str.w r3, [r2, #136] @ 0x88 + 8001aa0: f8d2 308c ldr.w r3, [r2, #140] @ 0x8c + 8001aa4: 6ae0 ldr r0, [r4, #44] @ 0x2c + 8001aa6: f423 53f8 bic.w r3, r3, #7936 @ 0x1f00 + 8001aaa: 3801 subs r0, #1 + 8001aac: ea43 2300 orr.w r3, r3, r0, lsl #8 + 8001ab0: f8c2 308c str.w r3, [r2, #140] @ 0x8c + 8001ab4: 05ca lsls r2, r1, #23 + 8001ab6: d514 bpl.n 8001ae2 + 8001ab8: 6d63 ldr r3, [r4, #84] @ 0x54 + 8001aba: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000 + 8001abe: d110 bne.n 8001ae2 + 8001ac0: 4918 ldr r1, [pc, #96] @ (8001b24 ) + 8001ac2: 69a2 ldr r2, [r4, #24] + 8001ac4: f8d1 3088 ldr.w r3, [r1, #136] @ 0x88 + 8001ac8: f003 6370 and.w r3, r3, #251658240 @ 0xf000000 + 8001acc: 4313 orrs r3, r2 + 8001ace: 69e2 ldr r2, [r4, #28] + 8001ad0: ea43 1382 orr.w r3, r3, r2, lsl #6 + 8001ad4: 6a22 ldr r2, [r4, #32] + 8001ad6: 0852 lsrs r2, r2, #1 + 8001ad8: 3a01 subs r2, #1 + 8001ada: ea43 4302 orr.w r3, r3, r2, lsl #16 + 8001ade: f8c1 3088 str.w r3, [r1, #136] @ 0x88 + 8001ae2: 4b0f ldr r3, [pc, #60] @ (8001b20 ) + 8001ae4: 4d0f ldr r5, [pc, #60] @ (8001b24 ) + 8001ae6: 2201 movs r2, #1 + 8001ae8: 671a str r2, [r3, #112] @ 0x70 + 8001aea: f7fe febd bl 8000868 + 8001aee: 4604 mov r4, r0 + 8001af0: 682b ldr r3, [r5, #0] + 8001af2: 009b lsls r3, r3, #2 + 8001af4: d50e bpl.n 8001b14 + 8001af6: 2000 movs r0, #0 + 8001af8: e768 b.n 80019cc + 8001afa: f7fe feb5 bl 8000868 + 8001afe: 1b80 subs r0, r0, r6 + 8001b00: 2802 cmp r0, #2 + 8001b02: f67f aecd bls.w 80018a0 + 8001b06: e760 b.n 80019ca + 8001b08: f7fe feae bl 8000868 + 8001b0c: 1b40 subs r0, r0, r5 + 8001b0e: 2802 cmp r0, #2 + 8001b10: d9ab bls.n 8001a6a + 8001b12: e75a b.n 80019ca + 8001b14: f7fe fea8 bl 8000868 + 8001b18: 1b00 subs r0, r0, r4 + 8001b1a: 2802 cmp r0, #2 + 8001b1c: d9e8 bls.n 8001af0 + 8001b1e: e754 b.n 80019ca + 8001b20: 42470000 .word 0x42470000 + 8001b24: 40023800 .word 0x40023800 + +08001b28 : + 8001b28: 4920 ldr r1, [pc, #128] @ (8001bac ) + 8001b2a: b508 push {r3, lr} + 8001b2c: 688b ldr r3, [r1, #8] + 8001b2e: f003 030c and.w r3, r3, #12 + 8001b32: 2b08 cmp r3, #8 + 8001b34: d007 beq.n 8001b46 + 8001b36: 2b0c cmp r3, #12 + 8001b38: d020 beq.n 8001b7c + 8001b3a: 481d ldr r0, [pc, #116] @ (8001bb0 ) + 8001b3c: 4a1d ldr r2, [pc, #116] @ (8001bb4 ) + 8001b3e: 2b04 cmp r3, #4 + 8001b40: bf18 it ne + 8001b42: 4610 movne r0, r2 + 8001b44: bd08 pop {r3, pc} + 8001b46: 684a ldr r2, [r1, #4] + 8001b48: 684b ldr r3, [r1, #4] + 8001b4a: 6849 ldr r1, [r1, #4] + 8001b4c: f413 0380 ands.w r3, r3, #4194304 @ 0x400000 + 8001b50: bf14 ite ne + 8001b52: 4817 ldrne r0, [pc, #92] @ (8001bb0 ) + 8001b54: 4817 ldreq r0, [pc, #92] @ (8001bb4 ) + 8001b56: f3c1 1188 ubfx r1, r1, #6, #9 + 8001b5a: bf18 it ne + 8001b5c: 2300 movne r3, #0 + 8001b5e: f002 023f and.w r2, r2, #63 @ 0x3f + 8001b62: fba1 0100 umull r0, r1, r1, r0 + 8001b66: f7fe fb55 bl 8000214 <__aeabi_uldivmod> + 8001b6a: 4b10 ldr r3, [pc, #64] @ (8001bac ) + 8001b6c: 685b ldr r3, [r3, #4] + 8001b6e: f3c3 4301 ubfx r3, r3, #16, #2 + 8001b72: 3301 adds r3, #1 + 8001b74: 005b lsls r3, r3, #1 + 8001b76: fbb0 f0f3 udiv r0, r0, r3 + 8001b7a: e7e3 b.n 8001b44 + 8001b7c: 684a ldr r2, [r1, #4] + 8001b7e: 684b ldr r3, [r1, #4] + 8001b80: 6849 ldr r1, [r1, #4] + 8001b82: f413 0380 ands.w r3, r3, #4194304 @ 0x400000 + 8001b86: bf14 ite ne + 8001b88: 4809 ldrne r0, [pc, #36] @ (8001bb0 ) + 8001b8a: 480a ldreq r0, [pc, #40] @ (8001bb4 ) + 8001b8c: f3c1 1188 ubfx r1, r1, #6, #9 + 8001b90: bf18 it ne + 8001b92: 2300 movne r3, #0 + 8001b94: f002 023f and.w r2, r2, #63 @ 0x3f + 8001b98: fba1 0100 umull r0, r1, r1, r0 + 8001b9c: f7fe fb3a bl 8000214 <__aeabi_uldivmod> + 8001ba0: 4b02 ldr r3, [pc, #8] @ (8001bac ) + 8001ba2: 685b ldr r3, [r3, #4] + 8001ba4: f3c3 7302 ubfx r3, r3, #28, #3 + 8001ba8: e7e5 b.n 8001b76 + 8001baa: bf00 nop + 8001bac: 40023800 .word 0x40023800 + 8001bb0: 007a1200 .word 0x007a1200 + 8001bb4: 00f42400 .word 0x00f42400 + +08001bb8 : + 8001bb8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + 8001bbc: 4604 mov r4, r0 + 8001bbe: 2800 cmp r0, #0 + 8001bc0: d031 beq.n 8001c26 + 8001bc2: 6803 ldr r3, [r0, #0] + 8001bc4: 07df lsls r7, r3, #31 + 8001bc6: d410 bmi.n 8001bea + 8001bc8: 6823 ldr r3, [r4, #0] + 8001bca: 079e lsls r6, r3, #30 + 8001bcc: d467 bmi.n 8001c9e + 8001bce: 6823 ldr r3, [r4, #0] + 8001bd0: 0719 lsls r1, r3, #28 + 8001bd2: f100 80b2 bmi.w 8001d3a + 8001bd6: 6823 ldr r3, [r4, #0] + 8001bd8: 075a lsls r2, r3, #29 + 8001bda: f100 80d2 bmi.w 8001d82 + 8001bde: 69a3 ldr r3, [r4, #24] + 8001be0: 2b00 cmp r3, #0 + 8001be2: f040 8139 bne.w 8001e58 + 8001be6: 2000 movs r0, #0 + 8001be8: e034 b.n 8001c54 + 8001bea: 4b98 ldr r3, [pc, #608] @ (8001e4c ) + 8001bec: 689a ldr r2, [r3, #8] + 8001bee: f002 020c and.w r2, r2, #12 + 8001bf2: 2a04 cmp r2, #4 + 8001bf4: d010 beq.n 8001c18 + 8001bf6: 689a ldr r2, [r3, #8] + 8001bf8: f002 020c and.w r2, r2, #12 + 8001bfc: 2a08 cmp r2, #8 + 8001bfe: d102 bne.n 8001c06 + 8001c00: 685b ldr r3, [r3, #4] + 8001c02: 025d lsls r5, r3, #9 + 8001c04: d408 bmi.n 8001c18 + 8001c06: 4b91 ldr r3, [pc, #580] @ (8001e4c ) + 8001c08: 689a ldr r2, [r3, #8] + 8001c0a: f002 020c and.w r2, r2, #12 + 8001c0e: 2a0c cmp r2, #12 + 8001c10: d10b bne.n 8001c2a + 8001c12: 685a ldr r2, [r3, #4] + 8001c14: 0251 lsls r1, r2, #9 + 8001c16: d508 bpl.n 8001c2a + 8001c18: 4b8c ldr r3, [pc, #560] @ (8001e4c ) + 8001c1a: 681b ldr r3, [r3, #0] + 8001c1c: 039a lsls r2, r3, #14 + 8001c1e: d5d3 bpl.n 8001bc8 + 8001c20: 6863 ldr r3, [r4, #4] + 8001c22: 2b00 cmp r3, #0 + 8001c24: d1d0 bne.n 8001bc8 + 8001c26: 2001 movs r0, #1 + 8001c28: e014 b.n 8001c54 + 8001c2a: 6862 ldr r2, [r4, #4] + 8001c2c: f5b2 3f80 cmp.w r2, #65536 @ 0x10000 + 8001c30: d113 bne.n 8001c5a + 8001c32: 681a ldr r2, [r3, #0] + 8001c34: f442 3280 orr.w r2, r2, #65536 @ 0x10000 + 8001c38: 601a str r2, [r3, #0] + 8001c3a: f7fe fe15 bl 8000868 + 8001c3e: 4e83 ldr r6, [pc, #524] @ (8001e4c ) + 8001c40: 4605 mov r5, r0 + 8001c42: 6833 ldr r3, [r6, #0] + 8001c44: 039b lsls r3, r3, #14 + 8001c46: d4bf bmi.n 8001bc8 + 8001c48: f7fe fe0e bl 8000868 + 8001c4c: 1b40 subs r0, r0, r5 + 8001c4e: 2864 cmp r0, #100 @ 0x64 + 8001c50: d9f7 bls.n 8001c42 + 8001c52: 2003 movs r0, #3 + 8001c54: b002 add sp, #8 + 8001c56: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8001c5a: 4d7c ldr r5, [pc, #496] @ (8001e4c ) + 8001c5c: f5b2 2fa0 cmp.w r2, #327680 @ 0x50000 + 8001c60: 682b ldr r3, [r5, #0] + 8001c62: d107 bne.n 8001c74 + 8001c64: f443 2380 orr.w r3, r3, #262144 @ 0x40000 + 8001c68: 602b str r3, [r5, #0] + 8001c6a: 682b ldr r3, [r5, #0] + 8001c6c: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 8001c70: 602b str r3, [r5, #0] + 8001c72: e7e2 b.n 8001c3a + 8001c74: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 8001c78: 602b str r3, [r5, #0] + 8001c7a: 682b ldr r3, [r5, #0] + 8001c7c: f423 2380 bic.w r3, r3, #262144 @ 0x40000 + 8001c80: 602b str r3, [r5, #0] + 8001c82: 2a00 cmp r2, #0 + 8001c84: d1d9 bne.n 8001c3a + 8001c86: f7fe fdef bl 8000868 + 8001c8a: 4606 mov r6, r0 + 8001c8c: 682b ldr r3, [r5, #0] + 8001c8e: 039f lsls r7, r3, #14 + 8001c90: d59a bpl.n 8001bc8 + 8001c92: f7fe fde9 bl 8000868 + 8001c96: 1b80 subs r0, r0, r6 + 8001c98: 2864 cmp r0, #100 @ 0x64 + 8001c9a: d9f7 bls.n 8001c8c + 8001c9c: e7d9 b.n 8001c52 + 8001c9e: 4b6b ldr r3, [pc, #428] @ (8001e4c ) + 8001ca0: 689a ldr r2, [r3, #8] + 8001ca2: f012 0f0c tst.w r2, #12 + 8001ca6: d010 beq.n 8001cca + 8001ca8: 689a ldr r2, [r3, #8] + 8001caa: f002 020c and.w r2, r2, #12 + 8001cae: 2a08 cmp r2, #8 + 8001cb0: d102 bne.n 8001cb8 + 8001cb2: 685b ldr r3, [r3, #4] + 8001cb4: 025e lsls r6, r3, #9 + 8001cb6: d508 bpl.n 8001cca + 8001cb8: 4a64 ldr r2, [pc, #400] @ (8001e4c ) + 8001cba: 6893 ldr r3, [r2, #8] + 8001cbc: f003 030c and.w r3, r3, #12 + 8001cc0: 2b0c cmp r3, #12 + 8001cc2: d111 bne.n 8001ce8 + 8001cc4: 6853 ldr r3, [r2, #4] + 8001cc6: 025d lsls r5, r3, #9 + 8001cc8: d40e bmi.n 8001ce8 + 8001cca: 4a60 ldr r2, [pc, #384] @ (8001e4c ) + 8001ccc: 6813 ldr r3, [r2, #0] + 8001cce: 0799 lsls r1, r3, #30 + 8001cd0: d502 bpl.n 8001cd8 + 8001cd2: 68e3 ldr r3, [r4, #12] + 8001cd4: 2b01 cmp r3, #1 + 8001cd6: d1a6 bne.n 8001c26 + 8001cd8: 6813 ldr r3, [r2, #0] + 8001cda: 6921 ldr r1, [r4, #16] + 8001cdc: f023 03f8 bic.w r3, r3, #248 @ 0xf8 + 8001ce0: ea43 03c1 orr.w r3, r3, r1, lsl #3 + 8001ce4: 6013 str r3, [r2, #0] + 8001ce6: e772 b.n 8001bce + 8001ce8: 68e2 ldr r2, [r4, #12] + 8001cea: 4b59 ldr r3, [pc, #356] @ (8001e50 ) + 8001cec: b1b2 cbz r2, 8001d1c + 8001cee: 2201 movs r2, #1 + 8001cf0: 601a str r2, [r3, #0] + 8001cf2: f7fe fdb9 bl 8000868 + 8001cf6: 4d55 ldr r5, [pc, #340] @ (8001e4c ) + 8001cf8: 4606 mov r6, r0 + 8001cfa: 682b ldr r3, [r5, #0] + 8001cfc: 079b lsls r3, r3, #30 + 8001cfe: d507 bpl.n 8001d10 + 8001d00: 682b ldr r3, [r5, #0] + 8001d02: 6922 ldr r2, [r4, #16] + 8001d04: f023 03f8 bic.w r3, r3, #248 @ 0xf8 + 8001d08: ea43 03c2 orr.w r3, r3, r2, lsl #3 + 8001d0c: 602b str r3, [r5, #0] + 8001d0e: e75e b.n 8001bce + 8001d10: f7fe fdaa bl 8000868 + 8001d14: 1b80 subs r0, r0, r6 + 8001d16: 2802 cmp r0, #2 + 8001d18: d9ef bls.n 8001cfa + 8001d1a: e79a b.n 8001c52 + 8001d1c: 601a str r2, [r3, #0] + 8001d1e: f7fe fda3 bl 8000868 + 8001d22: 4e4a ldr r6, [pc, #296] @ (8001e4c ) + 8001d24: 4605 mov r5, r0 + 8001d26: 6833 ldr r3, [r6, #0] + 8001d28: 079f lsls r7, r3, #30 + 8001d2a: f57f af50 bpl.w 8001bce + 8001d2e: f7fe fd9b bl 8000868 + 8001d32: 1b40 subs r0, r0, r5 + 8001d34: 2802 cmp r0, #2 + 8001d36: d9f6 bls.n 8001d26 + 8001d38: e78b b.n 8001c52 + 8001d3a: 6962 ldr r2, [r4, #20] + 8001d3c: 4b44 ldr r3, [pc, #272] @ (8001e50 ) + 8001d3e: b182 cbz r2, 8001d62 + 8001d40: 2201 movs r2, #1 + 8001d42: f8c3 2e80 str.w r2, [r3, #3712] @ 0xe80 + 8001d46: f7fe fd8f bl 8000868 + 8001d4a: 4e40 ldr r6, [pc, #256] @ (8001e4c ) + 8001d4c: 4605 mov r5, r0 + 8001d4e: 6f73 ldr r3, [r6, #116] @ 0x74 + 8001d50: 079b lsls r3, r3, #30 + 8001d52: f53f af40 bmi.w 8001bd6 + 8001d56: f7fe fd87 bl 8000868 + 8001d5a: 1b40 subs r0, r0, r5 + 8001d5c: 2802 cmp r0, #2 + 8001d5e: d9f6 bls.n 8001d4e + 8001d60: e777 b.n 8001c52 + 8001d62: f8c3 2e80 str.w r2, [r3, #3712] @ 0xe80 + 8001d66: f7fe fd7f bl 8000868 + 8001d6a: 4e38 ldr r6, [pc, #224] @ (8001e4c ) + 8001d6c: 4605 mov r5, r0 + 8001d6e: 6f73 ldr r3, [r6, #116] @ 0x74 + 8001d70: 079f lsls r7, r3, #30 + 8001d72: f57f af30 bpl.w 8001bd6 + 8001d76: f7fe fd77 bl 8000868 + 8001d7a: 1b40 subs r0, r0, r5 + 8001d7c: 2802 cmp r0, #2 + 8001d7e: d9f6 bls.n 8001d6e + 8001d80: e767 b.n 8001c52 + 8001d82: 4b32 ldr r3, [pc, #200] @ (8001e4c ) + 8001d84: 6c1a ldr r2, [r3, #64] @ 0x40 + 8001d86: f012 5280 ands.w r2, r2, #268435456 @ 0x10000000 + 8001d8a: d128 bne.n 8001dde + 8001d8c: 9201 str r2, [sp, #4] + 8001d8e: 6c1a ldr r2, [r3, #64] @ 0x40 + 8001d90: f042 5280 orr.w r2, r2, #268435456 @ 0x10000000 + 8001d94: 641a str r2, [r3, #64] @ 0x40 + 8001d96: 6c1b ldr r3, [r3, #64] @ 0x40 + 8001d98: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 8001d9c: 9301 str r3, [sp, #4] + 8001d9e: 9b01 ldr r3, [sp, #4] + 8001da0: 2701 movs r7, #1 + 8001da2: 4d2c ldr r5, [pc, #176] @ (8001e54 ) + 8001da4: 682b ldr r3, [r5, #0] + 8001da6: 05d8 lsls r0, r3, #23 + 8001da8: d51b bpl.n 8001de2 + 8001daa: 68a3 ldr r3, [r4, #8] + 8001dac: 4d27 ldr r5, [pc, #156] @ (8001e4c ) + 8001dae: 2b01 cmp r3, #1 + 8001db0: d127 bne.n 8001e02 + 8001db2: 6f2b ldr r3, [r5, #112] @ 0x70 + 8001db4: f043 0301 orr.w r3, r3, #1 + 8001db8: 672b str r3, [r5, #112] @ 0x70 + 8001dba: f7fe fd55 bl 8000868 + 8001dbe: 4e23 ldr r6, [pc, #140] @ (8001e4c ) + 8001dc0: 4605 mov r5, r0 + 8001dc2: f241 3888 movw r8, #5000 @ 0x1388 + 8001dc6: 6f33 ldr r3, [r6, #112] @ 0x70 + 8001dc8: 079a lsls r2, r3, #30 + 8001dca: d539 bpl.n 8001e40 + 8001dcc: 2f00 cmp r7, #0 + 8001dce: f43f af06 beq.w 8001bde + 8001dd2: 4a1e ldr r2, [pc, #120] @ (8001e4c ) + 8001dd4: 6c13 ldr r3, [r2, #64] @ 0x40 + 8001dd6: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 + 8001dda: 6413 str r3, [r2, #64] @ 0x40 + 8001ddc: e6ff b.n 8001bde + 8001dde: 2700 movs r7, #0 + 8001de0: e7df b.n 8001da2 + 8001de2: 682b ldr r3, [r5, #0] + 8001de4: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8001de8: 602b str r3, [r5, #0] + 8001dea: f7fe fd3d bl 8000868 + 8001dee: 4606 mov r6, r0 + 8001df0: 682b ldr r3, [r5, #0] + 8001df2: 05d9 lsls r1, r3, #23 + 8001df4: d4d9 bmi.n 8001daa + 8001df6: f7fe fd37 bl 8000868 + 8001dfa: 1b80 subs r0, r0, r6 + 8001dfc: 2802 cmp r0, #2 + 8001dfe: d9f7 bls.n 8001df0 + 8001e00: e727 b.n 8001c52 + 8001e02: 2b05 cmp r3, #5 + 8001e04: d104 bne.n 8001e10 + 8001e06: 6f2b ldr r3, [r5, #112] @ 0x70 + 8001e08: f043 0304 orr.w r3, r3, #4 + 8001e0c: 672b str r3, [r5, #112] @ 0x70 + 8001e0e: e7d0 b.n 8001db2 + 8001e10: 6f2a ldr r2, [r5, #112] @ 0x70 + 8001e12: f022 0201 bic.w r2, r2, #1 + 8001e16: 672a str r2, [r5, #112] @ 0x70 + 8001e18: 6f2a ldr r2, [r5, #112] @ 0x70 + 8001e1a: f022 0204 bic.w r2, r2, #4 + 8001e1e: 672a str r2, [r5, #112] @ 0x70 + 8001e20: 2b00 cmp r3, #0 + 8001e22: d1ca bne.n 8001dba + 8001e24: f7fe fd20 bl 8000868 + 8001e28: f241 3888 movw r8, #5000 @ 0x1388 + 8001e2c: 4606 mov r6, r0 + 8001e2e: 6f2b ldr r3, [r5, #112] @ 0x70 + 8001e30: 079b lsls r3, r3, #30 + 8001e32: d5cb bpl.n 8001dcc + 8001e34: f7fe fd18 bl 8000868 + 8001e38: 1b80 subs r0, r0, r6 + 8001e3a: 4540 cmp r0, r8 + 8001e3c: d9f7 bls.n 8001e2e + 8001e3e: e708 b.n 8001c52 + 8001e40: f7fe fd12 bl 8000868 + 8001e44: 1b40 subs r0, r0, r5 + 8001e46: 4540 cmp r0, r8 + 8001e48: d9bd bls.n 8001dc6 + 8001e4a: e702 b.n 8001c52 + 8001e4c: 40023800 .word 0x40023800 + 8001e50: 42470000 .word 0x42470000 + 8001e54: 40007000 .word 0x40007000 + 8001e58: 4d3c ldr r5, [pc, #240] @ (8001f4c ) + 8001e5a: 68aa ldr r2, [r5, #8] + 8001e5c: f002 020c and.w r2, r2, #12 + 8001e60: 2a08 cmp r2, #8 + 8001e62: d041 beq.n 8001ee8 + 8001e64: 2b02 cmp r3, #2 + 8001e66: 4b3a ldr r3, [pc, #232] @ (8001f50 ) + 8001e68: f04f 0200 mov.w r2, #0 + 8001e6c: 661a str r2, [r3, #96] @ 0x60 + 8001e6e: d12e bne.n 8001ece + 8001e70: f7fe fcfa bl 8000868 + 8001e74: 4606 mov r6, r0 + 8001e76: 682b ldr r3, [r5, #0] + 8001e78: 0199 lsls r1, r3, #6 + 8001e7a: d422 bmi.n 8001ec2 + 8001e7c: e9d4 3207 ldrd r3, r2, [r4, #28] + 8001e80: 4313 orrs r3, r2 + 8001e82: 6a62 ldr r2, [r4, #36] @ 0x24 + 8001e84: ea43 1382 orr.w r3, r3, r2, lsl #6 + 8001e88: 6ae2 ldr r2, [r4, #44] @ 0x2c + 8001e8a: ea43 6302 orr.w r3, r3, r2, lsl #24 + 8001e8e: 6b22 ldr r2, [r4, #48] @ 0x30 + 8001e90: ea43 7302 orr.w r3, r3, r2, lsl #28 + 8001e94: 6aa2 ldr r2, [r4, #40] @ 0x28 + 8001e96: 0852 lsrs r2, r2, #1 + 8001e98: 3a01 subs r2, #1 + 8001e9a: ea43 4302 orr.w r3, r3, r2, lsl #16 + 8001e9e: 606b str r3, [r5, #4] + 8001ea0: 4b2b ldr r3, [pc, #172] @ (8001f50 ) + 8001ea2: 4d2a ldr r5, [pc, #168] @ (8001f4c ) + 8001ea4: 2201 movs r2, #1 + 8001ea6: 661a str r2, [r3, #96] @ 0x60 + 8001ea8: f7fe fcde bl 8000868 + 8001eac: 4604 mov r4, r0 + 8001eae: 682b ldr r3, [r5, #0] + 8001eb0: 019a lsls r2, r3, #6 + 8001eb2: f53f ae98 bmi.w 8001be6 + 8001eb6: f7fe fcd7 bl 8000868 + 8001eba: 1b00 subs r0, r0, r4 + 8001ebc: 2802 cmp r0, #2 + 8001ebe: d9f6 bls.n 8001eae + 8001ec0: e6c7 b.n 8001c52 + 8001ec2: f7fe fcd1 bl 8000868 + 8001ec6: 1b80 subs r0, r0, r6 + 8001ec8: 2802 cmp r0, #2 + 8001eca: d9d4 bls.n 8001e76 + 8001ecc: e6c1 b.n 8001c52 + 8001ece: f7fe fccb bl 8000868 + 8001ed2: 4604 mov r4, r0 + 8001ed4: 682b ldr r3, [r5, #0] + 8001ed6: 019b lsls r3, r3, #6 + 8001ed8: f57f ae85 bpl.w 8001be6 + 8001edc: f7fe fcc4 bl 8000868 + 8001ee0: 1b00 subs r0, r0, r4 + 8001ee2: 2802 cmp r0, #2 + 8001ee4: d9f6 bls.n 8001ed4 + 8001ee6: e6b4 b.n 8001c52 + 8001ee8: 2b01 cmp r3, #1 + 8001eea: f43f ae9c beq.w 8001c26 + 8001eee: 686b ldr r3, [r5, #4] + 8001ef0: 69e2 ldr r2, [r4, #28] + 8001ef2: f403 0180 and.w r1, r3, #4194304 @ 0x400000 + 8001ef6: 4291 cmp r1, r2 + 8001ef8: f47f ae95 bne.w 8001c26 + 8001efc: 6a21 ldr r1, [r4, #32] + 8001efe: f003 023f and.w r2, r3, #63 @ 0x3f + 8001f02: 428a cmp r2, r1 + 8001f04: f47f ae8f bne.w 8001c26 + 8001f08: 6a61 ldr r1, [r4, #36] @ 0x24 + 8001f0a: f647 72c0 movw r2, #32704 @ 0x7fc0 + 8001f0e: 401a ands r2, r3 + 8001f10: ebb2 1f81 cmp.w r2, r1, lsl #6 + 8001f14: f47f ae87 bne.w 8001c26 + 8001f18: 6aa2 ldr r2, [r4, #40] @ 0x28 + 8001f1a: 0852 lsrs r2, r2, #1 + 8001f1c: f403 3140 and.w r1, r3, #196608 @ 0x30000 + 8001f20: 3a01 subs r2, #1 + 8001f22: ebb1 4f02 cmp.w r1, r2, lsl #16 + 8001f26: f47f ae7e bne.w 8001c26 + 8001f2a: 6ae1 ldr r1, [r4, #44] @ 0x2c + 8001f2c: f003 6270 and.w r2, r3, #251658240 @ 0xf000000 + 8001f30: ebb2 6f01 cmp.w r2, r1, lsl #24 + 8001f34: f47f ae77 bne.w 8001c26 + 8001f38: 6b22 ldr r2, [r4, #48] @ 0x30 + 8001f3a: f003 43e0 and.w r3, r3, #1879048192 @ 0x70000000 + 8001f3e: ebb3 7f02 cmp.w r3, r2, lsl #28 + 8001f42: bf14 ite ne + 8001f44: 2001 movne r0, #1 + 8001f46: 2000 moveq r0, #0 + 8001f48: e684 b.n 8001c54 + 8001f4a: bf00 nop + 8001f4c: 40023800 .word 0x40023800 + 8001f50: 42470000 .word 0x42470000 + +08001f54 : + 8001f54: b082 sub sp, #8 + 8001f56: 2300 movs r3, #0 + 8001f58: 4602 mov r2, r0 + 8001f5a: 9301 str r3, [sp, #4] + 8001f5c: 9b01 ldr r3, [sp, #4] + 8001f5e: 3301 adds r3, #1 + 8001f60: 9301 str r3, [sp, #4] + 8001f62: 9b01 ldr r3, [sp, #4] + 8001f64: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8001f68: d81a bhi.n 8001fa0 + 8001f6a: 6913 ldr r3, [r2, #16] + 8001f6c: 2b00 cmp r3, #0 + 8001f6e: daf5 bge.n 8001f5c + 8001f70: 230a movs r3, #10 + 8001f72: 9301 str r3, [sp, #4] + 8001f74: 9b01 ldr r3, [sp, #4] + 8001f76: b983 cbnz r3, 8001f9a + 8001f78: 6913 ldr r3, [r2, #16] + 8001f7a: f043 0301 orr.w r3, r3, #1 + 8001f7e: 6113 str r3, [r2, #16] + 8001f80: 9b01 ldr r3, [sp, #4] + 8001f82: 3301 adds r3, #1 + 8001f84: 9301 str r3, [sp, #4] + 8001f86: 9b01 ldr r3, [sp, #4] + 8001f88: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8001f8c: d808 bhi.n 8001fa0 + 8001f8e: 6910 ldr r0, [r2, #16] + 8001f90: f010 0001 ands.w r0, r0, #1 + 8001f94: d1f4 bne.n 8001f80 + 8001f96: b002 add sp, #8 + 8001f98: 4770 bx lr + 8001f9a: 9b01 ldr r3, [sp, #4] + 8001f9c: 3b01 subs r3, #1 + 8001f9e: e7e8 b.n 8001f72 + 8001fa0: 2003 movs r0, #3 + 8001fa2: e7f8 b.n 8001f96 + +08001fa4 : + 8001fa4: b084 sub sp, #16 + 8001fa6: b538 push {r3, r4, r5, lr} + 8001fa8: ad05 add r5, sp, #20 + 8001faa: e885 000e stmia.w r5, {r1, r2, r3} + 8001fae: f89d 3019 ldrb.w r3, [sp, #25] + 8001fb2: 2b01 cmp r3, #1 + 8001fb4: 4604 mov r4, r0 + 8001fb6: d127 bne.n 8002008 + 8001fb8: 6b83 ldr r3, [r0, #56] @ 0x38 + 8001fba: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 8001fbe: 6383 str r3, [r0, #56] @ 0x38 + 8001fc0: 68c3 ldr r3, [r0, #12] + 8001fc2: f423 0384 bic.w r3, r3, #4325376 @ 0x420000 + 8001fc6: f023 0340 bic.w r3, r3, #64 @ 0x40 + 8001fca: 60c3 str r3, [r0, #12] + 8001fcc: 68c3 ldr r3, [r0, #12] + 8001fce: f423 1340 bic.w r3, r3, #3145728 @ 0x300000 + 8001fd2: 60c3 str r3, [r0, #12] + 8001fd4: f89d 3020 ldrb.w r3, [sp, #32] + 8001fd8: 2b01 cmp r3, #1 + 8001fda: bf02 ittt eq + 8001fdc: 68c3 ldreq r3, [r0, #12] + 8001fde: f443 1380 orreq.w r3, r3, #1048576 @ 0x100000 + 8001fe2: 60c3 streq r3, [r0, #12] + 8001fe4: f7ff ffb6 bl 8001f54 + 8001fe8: f89d 3016 ldrb.w r3, [sp, #22] + 8001fec: 2b01 cmp r3, #1 + 8001fee: d107 bne.n 8002000 + 8001ff0: 68a3 ldr r3, [r4, #8] + 8001ff2: f043 0306 orr.w r3, r3, #6 + 8001ff6: 60a3 str r3, [r4, #8] + 8001ff8: 68a3 ldr r3, [r4, #8] + 8001ffa: f043 0320 orr.w r3, r3, #32 + 8001ffe: 60a3 str r3, [r4, #8] + 8002000: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8002004: b004 add sp, #16 + 8002006: 4770 bx lr + 8002008: 68c3 ldr r3, [r0, #12] + 800200a: f043 0340 orr.w r3, r3, #64 @ 0x40 + 800200e: 60c3 str r3, [r0, #12] + 8002010: f7ff ffa0 bl 8001f54 + 8002014: f89d 301d ldrb.w r3, [sp, #29] + 8002018: b923 cbnz r3, 8002024 + 800201a: 6ba3 ldr r3, [r4, #56] @ 0x38 + 800201c: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 8002020: 63a3 str r3, [r4, #56] @ 0x38 + 8002022: e7e1 b.n 8001fe8 + 8002024: 6ba3 ldr r3, [r4, #56] @ 0x38 + 8002026: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 800202a: e7f9 b.n 8002020 + +0800202c : + 800202c: 2a02 cmp r2, #2 + 800202e: d14a bne.n 80020c6 + 8002030: 4b27 ldr r3, [pc, #156] @ (80020d0 ) + 8002032: 4a28 ldr r2, [pc, #160] @ (80020d4 ) + 8002034: 440b add r3, r1 + 8002036: 4293 cmp r3, r2 + 8002038: d939 bls.n 80020ae + 800203a: 4b27 ldr r3, [pc, #156] @ (80020d8 ) + 800203c: 4a27 ldr r2, [pc, #156] @ (80020dc ) + 800203e: 440b add r3, r1 + 8002040: 4293 cmp r3, r2 + 8002042: d936 bls.n 80020b2 + 8002044: 4a26 ldr r2, [pc, #152] @ (80020e0 ) + 8002046: f5a1 0374 sub.w r3, r1, #15990784 @ 0xf40000 + 800204a: f5a3 5310 sub.w r3, r3, #9216 @ 0x2400 + 800204e: 4293 cmp r3, r2 + 8002050: d931 bls.n 80020b6 + 8002052: 4a24 ldr r2, [pc, #144] @ (80020e4 ) + 8002054: f1a1 7383 sub.w r3, r1, #17170432 @ 0x1060000 + 8002058: f5a3 43e7 sub.w r3, r3, #29568 @ 0x7380 + 800205c: 4293 cmp r3, r2 + 800205e: d32c bcc.n 80020ba + 8002060: 4b21 ldr r3, [pc, #132] @ (80020e8 ) + 8002062: 4a22 ldr r2, [pc, #136] @ (80020ec ) + 8002064: 440b add r3, r1 + 8002066: 4293 cmp r3, r2 + 8002068: d929 bls.n 80020be + 800206a: 4b21 ldr r3, [pc, #132] @ (80020f0 ) + 800206c: 4a21 ldr r2, [pc, #132] @ (80020f4 ) + 800206e: 440b add r3, r1 + 8002070: 4293 cmp r3, r2 + 8002072: d326 bcc.n 80020c2 + 8002074: 4b20 ldr r3, [pc, #128] @ (80020f8 ) + 8002076: 4a21 ldr r2, [pc, #132] @ (80020fc ) + 8002078: 440b add r3, r1 + 800207a: 4293 cmp r3, r2 + 800207c: d323 bcc.n 80020c6 + 800207e: 4a20 ldr r2, [pc, #128] @ (8002100 ) + 8002080: f1a1 73b7 sub.w r3, r1, #23986176 @ 0x16e0000 + 8002084: f5a3 5358 sub.w r3, r3, #13824 @ 0x3600 + 8002088: 4293 cmp r3, r2 + 800208a: d31e bcc.n 80020ca + 800208c: 4b1d ldr r3, [pc, #116] @ (8002104 ) + 800208e: 4a1e ldr r2, [pc, #120] @ (8002108 ) + 8002090: 440b add r3, r1 + 8002092: 4293 cmp r3, r2 + 8002094: bf2c ite cs + 8002096: 2306 movcs r3, #6 + 8002098: 2307 movcc r3, #7 + 800209a: 68c2 ldr r2, [r0, #12] + 800209c: f422 5270 bic.w r2, r2, #15360 @ 0x3c00 + 80020a0: 60c2 str r2, [r0, #12] + 80020a2: 68c2 ldr r2, [r0, #12] + 80020a4: ea42 2383 orr.w r3, r2, r3, lsl #10 + 80020a8: 60c3 str r3, [r0, #12] + 80020aa: 2000 movs r0, #0 + 80020ac: 4770 bx lr + 80020ae: 230f movs r3, #15 + 80020b0: e7f3 b.n 800209a + 80020b2: 230e movs r3, #14 + 80020b4: e7f1 b.n 800209a + 80020b6: 230d movs r3, #13 + 80020b8: e7ef b.n 800209a + 80020ba: 230c movs r3, #12 + 80020bc: e7ed b.n 800209a + 80020be: 230b movs r3, #11 + 80020c0: e7eb b.n 800209a + 80020c2: 230a movs r3, #10 + 80020c4: e7e9 b.n 800209a + 80020c6: 2309 movs r3, #9 + 80020c8: e7e7 b.n 800209a + 80020ca: 2308 movs r3, #8 + 80020cc: e7e5 b.n 800209a + 80020ce: bf00 nop + 80020d0: ff275340 .word 0xff275340 + 80020d4: 000c34ff .word 0x000c34ff + 80020d8: ff1b1e40 .word 0xff1b1e40 + 80020dc: 000f423f .word 0x000f423f + 80020e0: 00124f7f .word 0x00124f7f + 80020e4: 0013d620 .word 0x0013d620 + 80020e8: fee5b660 .word 0xfee5b660 + 80020ec: 0016e35f .word 0x0016e35f + 80020f0: feced300 .word 0xfeced300 + 80020f4: 001b7740 .word 0x001b7740 + 80020f8: feb35bc0 .word 0xfeb35bc0 + 80020fc: 002191c0 .word 0x002191c0 + 8002100: 00387520 .word 0x00387520 + 8002104: fe5954e0 .word 0xfe5954e0 + 8002108: 00419ce0 .word 0x00419ce0 + +0800210c : + 800210c: 6883 ldr r3, [r0, #8] + 800210e: f043 0301 orr.w r3, r3, #1 + 8002112: 6083 str r3, [r0, #8] + 8002114: 2000 movs r0, #0 + 8002116: 4770 bx lr + +08002118 : + 8002118: 6883 ldr r3, [r0, #8] + 800211a: f023 0301 bic.w r3, r3, #1 + 800211e: 6083 str r3, [r0, #8] + 8002120: 2000 movs r0, #0 + 8002122: 4770 bx lr + +08002124 : + 8002124: b538 push {r3, r4, r5, lr} + 8002126: 68c3 ldr r3, [r0, #12] + 8002128: 2901 cmp r1, #1 + 800212a: f023 43c0 bic.w r3, r3, #1610612736 @ 0x60000000 + 800212e: 4605 mov r5, r0 + 8002130: 460c mov r4, r1 + 8002132: 60c3 str r3, [r0, #12] + 8002134: d114 bne.n 8002160 + 8002136: 68c3 ldr r3, [r0, #12] + 8002138: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000 + 800213c: 60c3 str r3, [r0, #12] + 800213e: 2400 movs r4, #0 + 8002140: 200a movs r0, #10 + 8002142: f7fe fb97 bl 8000874 + 8002146: 696b ldr r3, [r5, #20] + 8002148: 07d9 lsls r1, r3, #31 + 800214a: f104 040a add.w r4, r4, #10 + 800214e: d402 bmi.n 8002156 + 8002150: 2cc8 cmp r4, #200 @ 0xc8 + 8002152: d1f5 bne.n 8002140 + 8002154: 24c8 movs r4, #200 @ 0xc8 + 8002156: f1a4 03c8 sub.w r3, r4, #200 @ 0xc8 + 800215a: 4258 negs r0, r3 + 800215c: 4158 adcs r0, r3 + 800215e: bd38 pop {r3, r4, r5, pc} + 8002160: b971 cbnz r1, 8002180 + 8002162: 68c3 ldr r3, [r0, #12] + 8002164: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000 + 8002168: 60c3 str r3, [r0, #12] + 800216a: 200a movs r0, #10 + 800216c: f7fe fb82 bl 8000874 + 8002170: 696b ldr r3, [r5, #20] + 8002172: 07da lsls r2, r3, #31 + 8002174: f104 040a add.w r4, r4, #10 + 8002178: d5ed bpl.n 8002156 + 800217a: 2cc8 cmp r4, #200 @ 0xc8 + 800217c: d1f5 bne.n 800216a + 800217e: e7e9 b.n 8002154 + 8002180: 2001 movs r0, #1 + 8002182: e7ec b.n 800215e + +08002184 : + 8002184: b082 sub sp, #8 + 8002186: 2300 movs r3, #0 + 8002188: 4602 mov r2, r0 + 800218a: 9301 str r3, [sp, #4] + 800218c: 9b01 ldr r3, [sp, #4] + 800218e: 3301 adds r3, #1 + 8002190: 9301 str r3, [sp, #4] + 8002192: 9b01 ldr r3, [sp, #4] + 8002194: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 8002198: d815 bhi.n 80021c6 + 800219a: 6913 ldr r3, [r2, #16] + 800219c: 2b00 cmp r3, #0 + 800219e: daf5 bge.n 800218c + 80021a0: 0189 lsls r1, r1, #6 + 80021a2: 2300 movs r3, #0 + 80021a4: f041 0120 orr.w r1, r1, #32 + 80021a8: 9301 str r3, [sp, #4] + 80021aa: 6111 str r1, [r2, #16] + 80021ac: 9b01 ldr r3, [sp, #4] + 80021ae: 3301 adds r3, #1 + 80021b0: 9301 str r3, [sp, #4] + 80021b2: 9b01 ldr r3, [sp, #4] + 80021b4: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 80021b8: d805 bhi.n 80021c6 + 80021ba: 6910 ldr r0, [r2, #16] + 80021bc: f010 0020 ands.w r0, r0, #32 + 80021c0: d1f4 bne.n 80021ac + 80021c2: b002 add sp, #8 + 80021c4: 4770 bx lr + 80021c6: 2003 movs r0, #3 + 80021c8: e7fb b.n 80021c2 + +080021ca : + 80021ca: b082 sub sp, #8 + 80021cc: 2300 movs r3, #0 + 80021ce: 4602 mov r2, r0 + 80021d0: 9301 str r3, [sp, #4] + 80021d2: 9b01 ldr r3, [sp, #4] + 80021d4: 3301 adds r3, #1 + 80021d6: 9301 str r3, [sp, #4] + 80021d8: 9b01 ldr r3, [sp, #4] + 80021da: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 80021de: d813 bhi.n 8002208 + 80021e0: 6913 ldr r3, [r2, #16] + 80021e2: 2b00 cmp r3, #0 + 80021e4: daf5 bge.n 80021d2 + 80021e6: 2300 movs r3, #0 + 80021e8: 9301 str r3, [sp, #4] + 80021ea: 2310 movs r3, #16 + 80021ec: 6113 str r3, [r2, #16] + 80021ee: 9b01 ldr r3, [sp, #4] + 80021f0: 3301 adds r3, #1 + 80021f2: 9301 str r3, [sp, #4] + 80021f4: 9b01 ldr r3, [sp, #4] + 80021f6: f1b3 6f70 cmp.w r3, #251658240 @ 0xf000000 + 80021fa: d805 bhi.n 8002208 + 80021fc: 6910 ldr r0, [r2, #16] + 80021fe: f010 0010 ands.w r0, r0, #16 + 8002202: d1f4 bne.n 80021ee + 8002204: b002 add sp, #8 + 8002206: 4770 bx lr + 8002208: 2003 movs r0, #3 + 800220a: e7fb b.n 8002204 + +0800220c : + 800220c: f8d0 3800 ldr.w r3, [r0, #2048] @ 0x800 + 8002210: 4319 orrs r1, r3 + 8002212: f8c0 1800 str.w r1, [r0, #2048] @ 0x800 + 8002216: 2000 movs r0, #0 + 8002218: 4770 bx lr + ... + +0800221c : + 800221c: b084 sub sp, #16 + 800221e: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8002222: 4604 mov r4, r0 + 8002224: a809 add r0, sp, #36 @ 0x24 + 8002226: e880 000e stmia.w r0, {r1, r2, r3} + 800222a: 2300 movs r3, #0 + 800222c: f89d 6024 ldrb.w r6, [sp, #36] @ 0x24 + 8002230: f89d 502e ldrb.w r5, [sp, #46] @ 0x2e + 8002234: 4619 mov r1, r3 + 8002236: f103 0240 add.w r2, r3, #64 @ 0x40 + 800223a: eb04 0282 add.w r2, r4, r2, lsl #2 + 800223e: 3301 adds r3, #1 + 8002240: 2b0f cmp r3, #15 + 8002242: 6051 str r1, [r2, #4] + 8002244: d1f7 bne.n 8002236 + 8002246: f504 6700 add.w r7, r4, #2048 @ 0x800 + 800224a: 2d00 cmp r5, #0 + 800224c: d16c bne.n 8002328 + 800224e: 687b ldr r3, [r7, #4] + 8002250: f043 0302 orr.w r3, r3, #2 + 8002254: 607b str r3, [r7, #4] + 8002256: 6ba3 ldr r3, [r4, #56] @ 0x38 + 8002258: f423 1300 bic.w r3, r3, #2097152 @ 0x200000 + 800225c: 63a3 str r3, [r4, #56] @ 0x38 + 800225e: 6823 ldr r3, [r4, #0] + 8002260: f043 0340 orr.w r3, r3, #64 @ 0x40 + 8002264: 6023 str r3, [r4, #0] + 8002266: 6823 ldr r3, [r4, #0] + 8002268: f043 0380 orr.w r3, r3, #128 @ 0x80 + 800226c: 6023 str r3, [r4, #0] + 800226e: 2300 movs r3, #0 + 8002270: f8c4 3e00 str.w r3, [r4, #3584] @ 0xe00 + 8002274: f89d 3029 ldrb.w r3, [sp, #41] @ 0x29 + 8002278: 2b01 cmp r3, #1 + 800227a: d15c bne.n 8002336 + 800227c: f89d 1027 ldrb.w r1, [sp, #39] @ 0x27 + 8002280: 2900 cmp r1, #0 + 8002282: d156 bne.n 8002332 + 8002284: 4620 mov r0, r4 + 8002286: f7ff ffc1 bl 800220c + 800228a: 2110 movs r1, #16 + 800228c: 4620 mov r0, r4 + 800228e: f7ff ff79 bl 8002184 + 8002292: 4601 mov r1, r0 + 8002294: 4620 mov r0, r4 + 8002296: f7ff ff98 bl 80021ca + 800229a: 4308 orrs r0, r1 + 800229c: b2c0 uxtb r0, r0 + 800229e: 2300 movs r3, #0 + 80022a0: 3800 subs r0, #0 + 80022a2: 613b str r3, [r7, #16] + 80022a4: bf18 it ne + 80022a6: 2001 movne r0, #1 + 80022a8: 617b str r3, [r7, #20] + 80022aa: f504 6210 add.w r2, r4, #2304 @ 0x900 + 80022ae: 61fb str r3, [r7, #28] + 80022b0: 4619 mov r1, r3 + 80022b2: f04f 4c90 mov.w ip, #1207959552 @ 0x48000000 + 80022b6: f04f 6e00 mov.w lr, #134217728 @ 0x8000000 + 80022ba: f64f 387f movw r8, #64383 @ 0xfb7f + 80022be: 429e cmp r6, r3 + 80022c0: d83b bhi.n 800233a + 80022c2: 2200 movs r2, #0 + 80022c4: f504 6330 add.w r3, r4, #2816 @ 0xb00 + 80022c8: 4611 mov r1, r2 + 80022ca: f04f 4c90 mov.w ip, #1207959552 @ 0x48000000 + 80022ce: f04f 6e00 mov.w lr, #134217728 @ 0x8000000 + 80022d2: f64f 387f movw r8, #64383 @ 0xfb7f + 80022d6: 4296 cmp r6, r2 + 80022d8: d842 bhi.n 8002360 + 80022da: 693b ldr r3, [r7, #16] + 80022dc: f423 7380 bic.w r3, r3, #256 @ 0x100 + 80022e0: 613b str r3, [r7, #16] + 80022e2: 2300 movs r3, #0 + 80022e4: 61a3 str r3, [r4, #24] + 80022e6: f06f 4380 mvn.w r3, #1073741824 @ 0x40000000 + 80022ea: 6163 str r3, [r4, #20] + 80022ec: f89d 3026 ldrb.w r3, [sp, #38] @ 0x26 + 80022f0: b91b cbnz r3, 80022fa + 80022f2: 69a3 ldr r3, [r4, #24] + 80022f4: f043 0310 orr.w r3, r3, #16 + 80022f8: 61a3 str r3, [r4, #24] + 80022fa: 69a2 ldr r2, [r4, #24] + 80022fc: 4b22 ldr r3, [pc, #136] @ (8002388 ) + 80022fe: 4313 orrs r3, r2 + 8002300: 61a3 str r3, [r4, #24] + 8002302: f89d 302a ldrb.w r3, [sp, #42] @ 0x2a + 8002306: b11b cbz r3, 8002310 + 8002308: 69a3 ldr r3, [r4, #24] + 800230a: f043 0308 orr.w r3, r3, #8 + 800230e: 61a3 str r3, [r4, #24] + 8002310: 2d01 cmp r5, #1 + 8002312: bf01 itttt eq + 8002314: 69a3 ldreq r3, [r4, #24] + 8002316: f043 4380 orreq.w r3, r3, #1073741824 @ 0x40000000 + 800231a: f043 0304 orreq.w r3, r3, #4 + 800231e: 61a3 streq r3, [r4, #24] + 8002320: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8002324: b004 add sp, #16 + 8002326: 4770 bx lr + 8002328: 6ba3 ldr r3, [r4, #56] @ 0x38 + 800232a: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 800232e: 63a3 str r3, [r4, #56] @ 0x38 + 8002330: e79d b.n 800226e + 8002332: 4619 mov r1, r3 + 8002334: e7a6 b.n 8002284 + 8002336: 2103 movs r1, #3 + 8002338: e7a4 b.n 8002284 + 800233a: f8d2 9000 ldr.w r9, [r2] + 800233e: f1b9 0f00 cmp.w r9, #0 + 8002342: da0b bge.n 800235c + 8002344: b93b cbnz r3, 8002356 + 8002346: f8c2 e000 str.w lr, [r2] + 800234a: 6111 str r1, [r2, #16] + 800234c: 3301 adds r3, #1 + 800234e: f8c2 8008 str.w r8, [r2, #8] + 8002352: 3220 adds r2, #32 + 8002354: e7b3 b.n 80022be + 8002356: f8c2 c000 str.w ip, [r2] + 800235a: e7f6 b.n 800234a + 800235c: 6011 str r1, [r2, #0] + 800235e: e7f4 b.n 800234a + 8002360: f8d3 9000 ldr.w r9, [r3] + 8002364: f1b9 0f00 cmp.w r9, #0 + 8002368: da0b bge.n 8002382 + 800236a: b93a cbnz r2, 800237c + 800236c: f8c3 e000 str.w lr, [r3] + 8002370: 6119 str r1, [r3, #16] + 8002372: 3201 adds r2, #1 + 8002374: f8c3 8008 str.w r8, [r3, #8] + 8002378: 3320 adds r3, #32 + 800237a: e7ac b.n 80022d6 + 800237c: f8c3 c000 str.w ip, [r3] + 8002380: e7f6 b.n 8002370 + 8002382: 6019 str r1, [r3, #0] + 8002384: e7f4 b.n 8002370 + 8002386: bf00 nop + 8002388: 803c3800 .word 0x803c3800 + +0800238c : + 800238c: f8d0 3808 ldr.w r3, [r0, #2056] @ 0x808 + 8002390: f013 0006 ands.w r0, r3, #6 + 8002394: d004 beq.n 80023a0 + 8002396: f013 0f02 tst.w r3, #2 + 800239a: bf14 ite ne + 800239c: 2002 movne r0, #2 + 800239e: 200f moveq r0, #15 + 80023a0: 4770 bx lr + +080023a2 : + 80023a2: b530 push {r4, r5, lr} + 80023a4: 780c ldrb r4, [r1, #0] + 80023a6: 2201 movs r2, #1 + 80023a8: f004 050f and.w r5, r4, #15 + 80023ac: 40aa lsls r2, r5 + 80023ae: 784d ldrb r5, [r1, #1] + 80023b0: 2d01 cmp r5, #1 + 80023b2: f500 6300 add.w r3, r0, #2048 @ 0x800 + 80023b6: eb00 1044 add.w r0, r0, r4, lsl #5 + 80023ba: d119 bne.n 80023f0 + 80023bc: 69dd ldr r5, [r3, #28] + 80023be: 432a orrs r2, r5 + 80023c0: 61da str r2, [r3, #28] + 80023c2: f8d0 3900 ldr.w r3, [r0, #2304] @ 0x900 + 80023c6: 041a lsls r2, r3, #16 + 80023c8: d410 bmi.n 80023ec + 80023ca: 688a ldr r2, [r1, #8] + 80023cc: f8d0 5900 ldr.w r5, [r0, #2304] @ 0x900 + 80023d0: f3c2 030a ubfx r3, r2, #0, #11 + 80023d4: 790a ldrb r2, [r1, #4] + 80023d6: 432b orrs r3, r5 + 80023d8: ea43 4382 orr.w r3, r3, r2, lsl #18 + 80023dc: ea43 5384 orr.w r3, r3, r4, lsl #22 + 80023e0: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 80023e4: f443 4300 orr.w r3, r3, #32768 @ 0x8000 + 80023e8: f8c0 3900 str.w r3, [r0, #2304] @ 0x900 + 80023ec: 2000 movs r0, #0 + 80023ee: bd30 pop {r4, r5, pc} + 80023f0: 69dc ldr r4, [r3, #28] + 80023f2: ea44 4202 orr.w r2, r4, r2, lsl #16 + 80023f6: 61da str r2, [r3, #28] + 80023f8: f8d0 3b00 ldr.w r3, [r0, #2816] @ 0xb00 + 80023fc: 041b lsls r3, r3, #16 + 80023fe: d4f5 bmi.n 80023ec + 8002400: 688b ldr r3, [r1, #8] + 8002402: f8d0 2b00 ldr.w r2, [r0, #2816] @ 0xb00 + 8002406: f3c3 030a ubfx r3, r3, #0, #11 + 800240a: 4313 orrs r3, r2 + 800240c: 790a ldrb r2, [r1, #4] + 800240e: ea43 4382 orr.w r3, r3, r2, lsl #18 + 8002412: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8002416: f443 4300 orr.w r3, r3, #32768 @ 0x8000 + 800241a: f8c0 3b00 str.w r3, [r0, #2816] @ 0xb00 + 800241e: e7e5 b.n 80023ec + +08002420 : + 8002420: b510 push {r4, lr} + 8002422: 780a ldrb r2, [r1, #0] + 8002424: 7849 ldrb r1, [r1, #1] + 8002426: 2901 cmp r1, #1 + 8002428: eb00 1342 add.w r3, r0, r2, lsl #5 + 800242c: f500 6000 add.w r0, r0, #2048 @ 0x800 + 8002430: f002 020f and.w r2, r2, #15 + 8002434: d122 bne.n 800247c + 8002436: f8d3 1900 ldr.w r1, [r3, #2304] @ 0x900 + 800243a: 2900 cmp r1, #0 + 800243c: da0b bge.n 8002456 + 800243e: f8d3 1900 ldr.w r1, [r3, #2304] @ 0x900 + 8002442: f041 6100 orr.w r1, r1, #134217728 @ 0x8000000 + 8002446: f8c3 1900 str.w r1, [r3, #2304] @ 0x900 + 800244a: f8d3 1900 ldr.w r1, [r3, #2304] @ 0x900 + 800244e: f041 4180 orr.w r1, r1, #1073741824 @ 0x40000000 + 8002452: f8c3 1900 str.w r1, [r3, #2304] @ 0x900 + 8002456: 6bc4 ldr r4, [r0, #60] @ 0x3c + 8002458: 2101 movs r1, #1 + 800245a: fa01 f202 lsl.w r2, r1, r2 + 800245e: ea24 0402 bic.w r4, r4, r2 + 8002462: 63c4 str r4, [r0, #60] @ 0x3c + 8002464: 69c1 ldr r1, [r0, #28] + 8002466: ea21 0202 bic.w r2, r1, r2 + 800246a: 61c2 str r2, [r0, #28] + 800246c: f8d3 1900 ldr.w r1, [r3, #2304] @ 0x900 + 8002470: 4a14 ldr r2, [pc, #80] @ (80024c4 ) + 8002472: 400a ands r2, r1 + 8002474: f8c3 2900 str.w r2, [r3, #2304] @ 0x900 + 8002478: 2000 movs r0, #0 + 800247a: bd10 pop {r4, pc} + 800247c: f8d3 1b00 ldr.w r1, [r3, #2816] @ 0xb00 + 8002480: 2900 cmp r1, #0 + 8002482: da0b bge.n 800249c + 8002484: f8d3 1b00 ldr.w r1, [r3, #2816] @ 0xb00 + 8002488: f041 6100 orr.w r1, r1, #134217728 @ 0x8000000 + 800248c: f8c3 1b00 str.w r1, [r3, #2816] @ 0xb00 + 8002490: f8d3 1b00 ldr.w r1, [r3, #2816] @ 0xb00 + 8002494: f041 4180 orr.w r1, r1, #1073741824 @ 0x40000000 + 8002498: f8c3 1b00 str.w r1, [r3, #2816] @ 0xb00 + 800249c: 6bc4 ldr r4, [r0, #60] @ 0x3c + 800249e: f44f 3180 mov.w r1, #65536 @ 0x10000 + 80024a2: fa01 f202 lsl.w r2, r1, r2 + 80024a6: ea24 0402 bic.w r4, r4, r2 + 80024aa: 63c4 str r4, [r0, #60] @ 0x3c + 80024ac: 69c1 ldr r1, [r0, #28] + 80024ae: ea21 0202 bic.w r2, r1, r2 + 80024b2: 61c2 str r2, [r0, #28] + 80024b4: f8d3 1b00 ldr.w r1, [r3, #2816] @ 0xb00 + 80024b8: 4a03 ldr r2, [pc, #12] @ (80024c8 ) + 80024ba: 400a ands r2, r1 + 80024bc: f8c3 2b00 str.w r2, [r3, #2816] @ 0xb00 + 80024c0: e7da b.n 8002478 + 80024c2: bf00 nop + 80024c4: ec337800 .word 0xec337800 + 80024c8: eff37800 .word 0xeff37800 + +080024cc : + 80024cc: b082 sub sp, #8 + 80024ce: 2300 movs r3, #0 + 80024d0: 784a ldrb r2, [r1, #1] + 80024d2: 9301 str r3, [sp, #4] + 80024d4: 780b ldrb r3, [r1, #0] + 80024d6: 2a01 cmp r2, #1 + 80024d8: ea4f 1343 mov.w r3, r3, lsl #5 + 80024dc: d11e bne.n 800251c + 80024de: f500 6010 add.w r0, r0, #2304 @ 0x900 + 80024e2: 18c1 adds r1, r0, r3 + 80024e4: 58c2 ldr r2, [r0, r3] + 80024e6: 2a00 cmp r2, #0 + 80024e8: db02 blt.n 80024f0 + 80024ea: 2000 movs r0, #0 + 80024ec: b002 add sp, #8 + 80024ee: 4770 bx lr + 80024f0: 58c2 ldr r2, [r0, r3] + 80024f2: f042 6200 orr.w r2, r2, #134217728 @ 0x8000000 + 80024f6: 50c2 str r2, [r0, r3] + 80024f8: 58c2 ldr r2, [r0, r3] + 80024fa: f042 4280 orr.w r2, r2, #1073741824 @ 0x40000000 + 80024fe: 50c2 str r2, [r0, r3] + 8002500: f242 7210 movw r2, #10000 @ 0x2710 + 8002504: 9b01 ldr r3, [sp, #4] + 8002506: 3301 adds r3, #1 + 8002508: 9301 str r3, [sp, #4] + 800250a: 9b01 ldr r3, [sp, #4] + 800250c: 4293 cmp r3, r2 + 800250e: d901 bls.n 8002514 + 8002510: 2001 movs r0, #1 + 8002512: e7eb b.n 80024ec + 8002514: 680b ldr r3, [r1, #0] + 8002516: 2b00 cmp r3, #0 + 8002518: dbf4 blt.n 8002504 + 800251a: e7e6 b.n 80024ea + 800251c: f500 6030 add.w r0, r0, #2816 @ 0xb00 + 8002520: 18c1 adds r1, r0, r3 + 8002522: 58c2 ldr r2, [r0, r3] + 8002524: 2a00 cmp r2, #0 + 8002526: dae0 bge.n 80024ea + 8002528: 58c2 ldr r2, [r0, r3] + 800252a: f042 6200 orr.w r2, r2, #134217728 @ 0x8000000 + 800252e: 50c2 str r2, [r0, r3] + 8002530: 58c2 ldr r2, [r0, r3] + 8002532: f042 4280 orr.w r2, r2, #1073741824 @ 0x40000000 + 8002536: 50c2 str r2, [r0, r3] + 8002538: f242 7210 movw r2, #10000 @ 0x2710 + 800253c: 9b01 ldr r3, [sp, #4] + 800253e: 3301 adds r3, #1 + 8002540: 9301 str r3, [sp, #4] + 8002542: 9b01 ldr r3, [sp, #4] + 8002544: 4293 cmp r3, r2 + 8002546: d8e3 bhi.n 8002510 + 8002548: 680b ldr r3, [r1, #0] + 800254a: 2b00 cmp r3, #0 + 800254c: dbf6 blt.n 800253c + 800254e: e7cc b.n 80024ea + +08002550 : + 8002550: b510 push {r4, lr} + 8002552: f89d 4008 ldrb.w r4, [sp, #8] + 8002556: b944 cbnz r4, 800256a + 8002558: 3303 adds r3, #3 + 800255a: 3201 adds r2, #1 + 800255c: 089b lsrs r3, r3, #2 + 800255e: eb00 3002 add.w r0, r0, r2, lsl #12 + 8002562: eb01 0383 add.w r3, r1, r3, lsl #2 + 8002566: 4299 cmp r1, r3 + 8002568: d101 bne.n 800256e + 800256a: 2000 movs r0, #0 + 800256c: bd10 pop {r4, pc} + 800256e: f851 2b04 ldr.w r2, [r1], #4 + 8002572: 6002 str r2, [r0, #0] + 8002574: e7f7 b.n 8002566 + ... + +08002578 : + 8002578: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + 800257c: 784b ldrb r3, [r1, #1] + 800257e: 690c ldr r4, [r1, #16] + 8002580: 790f ldrb r7, [r1, #4] + 8002582: f8df e1f0 ldr.w lr, [pc, #496] @ 8002774 + 8002586: f8df 81f0 ldr.w r8, [pc, #496] @ 8002778 + 800258a: 4616 mov r6, r2 + 800258c: 780a ldrb r2, [r1, #0] + 800258e: 2b01 cmp r3, #1 + 8002590: eb00 1542 add.w r5, r0, r2, lsl #5 + 8002594: f040 8097 bne.w 80026c6 + 8002598: f505 6c10 add.w ip, r5, #2304 @ 0x900 + 800259c: f8dc 3010 ldr.w r3, [ip, #16] + 80025a0: bb74 cbnz r4, 8002600 + 80025a2: ea03 030e and.w r3, r3, lr + 80025a6: f8cc 3010 str.w r3, [ip, #16] + 80025aa: f8dc 3010 ldr.w r3, [ip, #16] + 80025ae: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 80025b2: f8cc 3010 str.w r3, [ip, #16] + 80025b6: f8dc 3010 ldr.w r3, [ip, #16] + 80025ba: ea03 0308 and.w r3, r3, r8 + 80025be: 2e01 cmp r6, #1 + 80025c0: f8cc 3010 str.w r3, [ip, #16] + 80025c4: d157 bne.n 8002676 + 80025c6: 69cb ldr r3, [r1, #28] + 80025c8: b10b cbz r3, 80025ce + 80025ca: f8cc 3014 str.w r3, [ip, #20] + 80025ce: 2f01 cmp r7, #1 + 80025d0: d10c bne.n 80025ec + 80025d2: f8d0 3808 ldr.w r3, [r0, #2056] @ 0x808 + 80025d6: f413 7f80 tst.w r3, #256 @ 0x100 + 80025da: f8d5 3900 ldr.w r3, [r5, #2304] @ 0x900 + 80025de: bf0c ite eq + 80025e0: f043 5300 orreq.w r3, r3, #536870912 @ 0x20000000 + 80025e4: f043 5380 orrne.w r3, r3, #268435456 @ 0x10000000 + 80025e8: f8c5 3900 str.w r3, [r5, #2304] @ 0x900 + 80025ec: f8d5 3900 ldr.w r3, [r5, #2304] @ 0x900 + 80025f0: f043 4304 orr.w r3, r3, #2214592512 @ 0x84000000 + 80025f4: f8c5 3900 str.w r3, [r5, #2304] @ 0x900 + 80025f8: 2000 movs r0, #0 + 80025fa: b002 add sp, #8 + 80025fc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8002600: ea03 0308 and.w r3, r3, r8 + 8002604: f8cc 3010 str.w r3, [ip, #16] + 8002608: f8dc 3010 ldr.w r3, [ip, #16] + 800260c: ea03 030e and.w r3, r3, lr + 8002610: f8cc 3010 str.w r3, [ip, #16] + 8002614: 688b ldr r3, [r1, #8] + 8002616: b97a cbnz r2, 8002638 + 8002618: 42a3 cmp r3, r4 + 800261a: bf38 it cc + 800261c: 610b strcc r3, [r1, #16] + 800261e: f8dc 3010 ldr.w r3, [ip, #16] + 8002622: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 8002626: f8cc 3010 str.w r3, [ip, #16] + 800262a: 690b ldr r3, [r1, #16] + 800262c: f8dc 4010 ldr.w r4, [ip, #16] + 8002630: f3c3 0312 ubfx r3, r3, #0, #19 + 8002634: 4323 orrs r3, r4 + 8002636: e7c2 b.n 80025be + 8002638: 441c add r4, r3 + 800263a: 3c01 subs r4, #1 + 800263c: fbb4 f4f3 udiv r4, r4, r3 + 8002640: 4b4b ldr r3, [pc, #300] @ (8002770 ) + 8002642: f8dc e010 ldr.w lr, [ip, #16] + 8002646: fa1f f884 uxth.w r8, r4 + 800264a: ea03 44c4 and.w r4, r3, r4, lsl #19 + 800264e: ea44 040e orr.w r4, r4, lr + 8002652: 2f01 cmp r7, #1 + 8002654: f8cc 4010 str.w r4, [ip, #16] + 8002658: d1e7 bne.n 800262a + 800265a: f8dc 3010 ldr.w r3, [ip, #16] + 800265e: f023 43c0 bic.w r3, r3, #1610612736 @ 0x60000000 + 8002662: f8cc 3010 str.w r3, [ip, #16] + 8002666: f8dc 4010 ldr.w r4, [ip, #16] + 800266a: ea4f 7348 mov.w r3, r8, lsl #29 + 800266e: f003 43c0 and.w r3, r3, #1610612736 @ 0x60000000 + 8002672: 4323 orrs r3, r4 + 8002674: e7d7 b.n 8002626 + 8002676: f8d5 3900 ldr.w r3, [r5, #2304] @ 0x900 + 800267a: 2f01 cmp r7, #1 + 800267c: f043 4304 orr.w r3, r3, #2214592512 @ 0x84000000 + 8002680: f8c5 3900 str.w r3, [r5, #2304] @ 0x900 + 8002684: 690b ldr r3, [r1, #16] + 8002686: d00b beq.n 80026a0 + 8002688: 2b00 cmp r3, #0 + 800268a: d0b5 beq.n 80025f8 + 800268c: f8d0 1834 ldr.w r1, [r0, #2100] @ 0x834 + 8002690: f002 020f and.w r2, r2, #15 + 8002694: 2301 movs r3, #1 + 8002696: 4093 lsls r3, r2 + 8002698: 430b orrs r3, r1 + 800269a: f8c0 3834 str.w r3, [r0, #2100] @ 0x834 + 800269e: e7ab b.n 80025f8 + 80026a0: f8d0 4808 ldr.w r4, [r0, #2056] @ 0x808 + 80026a4: f414 7f80 tst.w r4, #256 @ 0x100 + 80026a8: f8d5 4900 ldr.w r4, [r5, #2304] @ 0x900 + 80026ac: bf0c ite eq + 80026ae: f044 5400 orreq.w r4, r4, #536870912 @ 0x20000000 + 80026b2: f044 5480 orrne.w r4, r4, #268435456 @ 0x10000000 + 80026b6: f8c5 4900 str.w r4, [r5, #2304] @ 0x900 + 80026ba: 9600 str r6, [sp, #0] + 80026bc: 68c9 ldr r1, [r1, #12] + 80026be: b29b uxth r3, r3 + 80026c0: f7ff ff46 bl 8002550 + 80026c4: e798 b.n 80025f8 + 80026c6: f8d5 3b10 ldr.w r3, [r5, #2832] @ 0xb10 + 80026ca: ea03 0308 and.w r3, r3, r8 + 80026ce: f8c5 3b10 str.w r3, [r5, #2832] @ 0xb10 + 80026d2: f8d5 3b10 ldr.w r3, [r5, #2832] @ 0xb10 + 80026d6: ea03 030e and.w r3, r3, lr + 80026da: f505 6c30 add.w ip, r5, #2816 @ 0xb00 + 80026de: f8cc 3010 str.w r3, [ip, #16] + 80026e2: 688b ldr r3, [r1, #8] + 80026e4: bb5a cbnz r2, 800273e + 80026e6: b104 cbz r4, 80026ea + 80026e8: 610b str r3, [r1, #16] + 80026ea: 620b str r3, [r1, #32] + 80026ec: f8dc 2010 ldr.w r2, [ip, #16] + 80026f0: f3c3 0312 ubfx r3, r3, #0, #19 + 80026f4: 4313 orrs r3, r2 + 80026f6: f8cc 3010 str.w r3, [ip, #16] + 80026fa: f8dc 3010 ldr.w r3, [ip, #16] + 80026fe: f443 2300 orr.w r3, r3, #524288 @ 0x80000 + 8002702: 2e01 cmp r6, #1 + 8002704: f8cc 3010 str.w r3, [ip, #16] + 8002708: d103 bne.n 8002712 + 800270a: 68cb ldr r3, [r1, #12] + 800270c: b10b cbz r3, 8002712 + 800270e: f8cc 3014 str.w r3, [ip, #20] + 8002712: 2f01 cmp r7, #1 + 8002714: d10c bne.n 8002730 + 8002716: f8d0 3808 ldr.w r3, [r0, #2056] @ 0x808 + 800271a: f413 7f80 tst.w r3, #256 @ 0x100 + 800271e: f8d5 3b00 ldr.w r3, [r5, #2816] @ 0xb00 + 8002722: bf0c ite eq + 8002724: f043 5300 orreq.w r3, r3, #536870912 @ 0x20000000 + 8002728: f043 5380 orrne.w r3, r3, #268435456 @ 0x10000000 + 800272c: f8c5 3b00 str.w r3, [r5, #2816] @ 0xb00 + 8002730: f8d5 3b00 ldr.w r3, [r5, #2816] @ 0xb00 + 8002734: f043 4304 orr.w r3, r3, #2214592512 @ 0x84000000 + 8002738: f8c5 3b00 str.w r3, [r5, #2816] @ 0xb00 + 800273c: e75c b.n 80025f8 + 800273e: 2c00 cmp r4, #0 + 8002740: d0d4 beq.n 80026ec + 8002742: 441c add r4, r3 + 8002744: 4a0a ldr r2, [pc, #40] @ (8002770 ) + 8002746: f8dc e010 ldr.w lr, [ip, #16] + 800274a: 3c01 subs r4, #1 + 800274c: fbb4 f4f3 udiv r4, r4, r3 + 8002750: b2a4 uxth r4, r4 + 8002752: ea02 42c4 and.w r2, r2, r4, lsl #19 + 8002756: 4363 muls r3, r4 + 8002758: ea42 020e orr.w r2, r2, lr + 800275c: 620b str r3, [r1, #32] + 800275e: f8cc 2010 str.w r2, [ip, #16] + 8002762: f8dc 2010 ldr.w r2, [ip, #16] + 8002766: f3c3 0312 ubfx r3, r3, #0, #19 + 800276a: 4313 orrs r3, r2 + 800276c: e7c9 b.n 8002702 + 800276e: bf00 nop + 8002770: 1ff80000 .word 0x1ff80000 + 8002774: e007ffff .word 0xe007ffff + 8002778: fff80000 .word 0xfff80000 + +0800277c : + 800277c: 4603 mov r3, r0 + 800277e: b570 push {r4, r5, r6, lr} + 8002780: 2000 movs r0, #0 + 8002782: 0894 lsrs r4, r2, #2 + 8002784: f503 5580 add.w r5, r3, #4096 @ 0x1000 + 8002788: f002 0203 and.w r2, r2, #3 + 800278c: 42a0 cmp r0, r4 + 800278e: d310 bcc.n 80027b2 + 8002790: eb01 0084 add.w r0, r1, r4, lsl #2 + 8002794: b162 cbz r2, 80027b0 + 8002796: f503 5380 add.w r3, r3, #4096 @ 0x1000 + 800279a: 681c ldr r4, [r3, #0] + 800279c: 2300 movs r3, #0 + 800279e: 00d9 lsls r1, r3, #3 + 80027a0: fa24 f101 lsr.w r1, r4, r1 + 80027a4: 54c1 strb r1, [r0, r3] + 80027a6: 3301 adds r3, #1 + 80027a8: b299 uxth r1, r3 + 80027aa: 428a cmp r2, r1 + 80027ac: d1f7 bne.n 800279e + 80027ae: 4410 add r0, r2 + 80027b0: bd70 pop {r4, r5, r6, pc} + 80027b2: 682e ldr r6, [r5, #0] + 80027b4: f841 6020 str.w r6, [r1, r0, lsl #2] + 80027b8: 3001 adds r0, #1 + 80027ba: e7e7 b.n 800278c + +080027bc : + 80027bc: 784a ldrb r2, [r1, #1] + 80027be: 780b ldrb r3, [r1, #0] + 80027c0: 2a01 cmp r2, #1 + 80027c2: eb00 1043 add.w r0, r0, r3, lsl #5 + 80027c6: d112 bne.n 80027ee + 80027c8: f8d0 2900 ldr.w r2, [r0, #2304] @ 0x900 + 80027cc: 2a00 cmp r2, #0 + 80027ce: db06 blt.n 80027de + 80027d0: b12b cbz r3, 80027de + 80027d2: f8d0 3900 ldr.w r3, [r0, #2304] @ 0x900 + 80027d6: f023 4380 bic.w r3, r3, #1073741824 @ 0x40000000 + 80027da: f8c0 3900 str.w r3, [r0, #2304] @ 0x900 + 80027de: f8d0 3900 ldr.w r3, [r0, #2304] @ 0x900 + 80027e2: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 80027e6: f8c0 3900 str.w r3, [r0, #2304] @ 0x900 + 80027ea: 2000 movs r0, #0 + 80027ec: 4770 bx lr + 80027ee: f8d0 2b00 ldr.w r2, [r0, #2816] @ 0xb00 + 80027f2: 2a00 cmp r2, #0 + 80027f4: db06 blt.n 8002804 + 80027f6: b12b cbz r3, 8002804 + 80027f8: f8d0 3b00 ldr.w r3, [r0, #2816] @ 0xb00 + 80027fc: f023 4380 bic.w r3, r3, #1073741824 @ 0x40000000 + 8002800: f8c0 3b00 str.w r3, [r0, #2816] @ 0xb00 + 8002804: f8d0 3b00 ldr.w r3, [r0, #2816] @ 0xb00 + 8002808: f443 1300 orr.w r3, r3, #2097152 @ 0x200000 + 800280c: f8c0 3b00 str.w r3, [r0, #2816] @ 0xb00 + 8002810: e7eb b.n 80027ea + +08002812 : + 8002812: 780b ldrb r3, [r1, #0] + 8002814: 784a ldrb r2, [r1, #1] + 8002816: eb00 1043 add.w r0, r0, r3, lsl #5 + 800281a: 790b ldrb r3, [r1, #4] + 800281c: 2a01 cmp r2, #1 + 800281e: f1a3 0302 sub.w r3, r3, #2 + 8002822: b2db uxtb r3, r3 + 8002824: d10f bne.n 8002846 + 8002826: f8d0 2900 ldr.w r2, [r0, #2304] @ 0x900 + 800282a: 2b01 cmp r3, #1 + 800282c: f422 1200 bic.w r2, r2, #2097152 @ 0x200000 + 8002830: f8c0 2900 str.w r2, [r0, #2304] @ 0x900 + 8002834: d805 bhi.n 8002842 + 8002836: f8d0 3900 ldr.w r3, [r0, #2304] @ 0x900 + 800283a: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 800283e: f8c0 3900 str.w r3, [r0, #2304] @ 0x900 + 8002842: 2000 movs r0, #0 + 8002844: 4770 bx lr + 8002846: f8d0 2b00 ldr.w r2, [r0, #2816] @ 0xb00 + 800284a: f422 1200 bic.w r2, r2, #2097152 @ 0x200000 + 800284e: 2b01 cmp r3, #1 + 8002850: f8c0 2b00 str.w r2, [r0, #2816] @ 0xb00 + 8002854: bf9e ittt ls + 8002856: f8d0 3b00 ldrls.w r3, [r0, #2816] @ 0xb00 + 800285a: f043 5380 orrls.w r3, r3, #268435456 @ 0x10000000 + 800285e: f8c0 3b00 strls.w r3, [r0, #2816] @ 0xb00 + 8002862: e7ee b.n 8002842 + +08002864 : + 8002864: f8d0 3800 ldr.w r3, [r0, #2048] @ 0x800 + 8002868: f423 63fe bic.w r3, r3, #2032 @ 0x7f0 + 800286c: f8c0 3800 str.w r3, [r0, #2048] @ 0x800 + 8002870: f8d0 3800 ldr.w r3, [r0, #2048] @ 0x800 + 8002874: 0109 lsls r1, r1, #4 + 8002876: f401 61fe and.w r1, r1, #2032 @ 0x7f0 + 800287a: 4319 orrs r1, r3 + 800287c: f8c0 1800 str.w r1, [r0, #2048] @ 0x800 + 8002880: 2000 movs r0, #0 + 8002882: 4770 bx lr + +08002884 : + 8002884: f8d0 3e00 ldr.w r3, [r0, #3584] @ 0xe00 + 8002888: f023 0303 bic.w r3, r3, #3 + 800288c: f8c0 3e00 str.w r3, [r0, #3584] @ 0xe00 + 8002890: f8d0 3804 ldr.w r3, [r0, #2052] @ 0x804 + 8002894: f023 0302 bic.w r3, r3, #2 + 8002898: f8c0 3804 str.w r3, [r0, #2052] @ 0x804 + 800289c: 2000 movs r0, #0 + 800289e: 4770 bx lr + +080028a0 : + 80028a0: f8d0 3e00 ldr.w r3, [r0, #3584] @ 0xe00 + 80028a4: f023 0303 bic.w r3, r3, #3 + 80028a8: f8c0 3e00 str.w r3, [r0, #3584] @ 0xe00 + 80028ac: f8d0 3804 ldr.w r3, [r0, #2052] @ 0x804 + 80028b0: f043 0302 orr.w r3, r3, #2 + 80028b4: f8c0 3804 str.w r3, [r0, #2052] @ 0x804 + 80028b8: 2000 movs r0, #0 + 80028ba: 4770 bx lr + +080028bc : + 80028bc: 6942 ldr r2, [r0, #20] + 80028be: 6980 ldr r0, [r0, #24] + 80028c0: 4010 ands r0, r2 + 80028c2: 4770 bx lr + +080028c4 : + 80028c4: f8d0 3818 ldr.w r3, [r0, #2072] @ 0x818 + 80028c8: f500 6000 add.w r0, r0, #2048 @ 0x800 + 80028cc: 69c0 ldr r0, [r0, #28] + 80028ce: 4018 ands r0, r3 + 80028d0: 0c00 lsrs r0, r0, #16 + 80028d2: 4770 bx lr + +080028d4 : + 80028d4: f8d0 3818 ldr.w r3, [r0, #2072] @ 0x818 + 80028d8: f500 6000 add.w r0, r0, #2048 @ 0x800 + 80028dc: 69c0 ldr r0, [r0, #28] + 80028de: 4018 ands r0, r3 + 80028e0: b280 uxth r0, r0 + 80028e2: 4770 bx lr + +080028e4 : + 80028e4: eb00 1141 add.w r1, r0, r1, lsl #5 + 80028e8: f500 6000 add.w r0, r0, #2048 @ 0x800 + 80028ec: f8d1 2b08 ldr.w r2, [r1, #2824] @ 0xb08 + 80028f0: 6940 ldr r0, [r0, #20] + 80028f2: 4010 ands r0, r2 + 80028f4: 4770 bx lr + +080028f6 : + 80028f6: f8d0 2810 ldr.w r2, [r0, #2064] @ 0x810 + 80028fa: f8d0 3834 ldr.w r3, [r0, #2100] @ 0x834 + 80028fe: eb00 1041 add.w r0, r0, r1, lsl #5 + 8002902: f001 010f and.w r1, r1, #15 + 8002906: 40cb lsrs r3, r1 + 8002908: f500 6010 add.w r0, r0, #2304 @ 0x900 + 800290c: 01db lsls r3, r3, #7 + 800290e: 6880 ldr r0, [r0, #8] + 8002910: b2db uxtb r3, r3 + 8002912: 4313 orrs r3, r2 + 8002914: 4018 ands r0, r3 + 8002916: 4770 bx lr + +08002918 : + 8002918: 6940 ldr r0, [r0, #20] + 800291a: f000 0001 and.w r0, r0, #1 + 800291e: 4770 bx lr + +08002920 : + 8002920: f8d0 3900 ldr.w r3, [r0, #2304] @ 0x900 + 8002924: f36f 030a bfc r3, #0, #11 + 8002928: f8c0 3900 str.w r3, [r0, #2304] @ 0x900 + 800292c: f8d0 3804 ldr.w r3, [r0, #2052] @ 0x804 + 8002930: f443 7380 orr.w r3, r3, #256 @ 0x100 + 8002934: f8c0 3804 str.w r3, [r0, #2052] @ 0x804 + 8002938: 2000 movs r0, #0 + 800293a: 4770 bx lr + +0800293c : + 800293c: b530 push {r4, r5, lr} + 800293e: 6c05 ldr r5, [r0, #64] @ 0x40 + 8002940: 4c10 ldr r4, [pc, #64] @ (8002984 ) + 8002942: 42a5 cmp r5, r4 + 8002944: f500 6330 add.w r3, r0, #2816 @ 0xb00 + 8002948: d903 bls.n 8002952 + 800294a: f8d0 4b00 ldr.w r4, [r0, #2816] @ 0xb00 + 800294e: 2c00 cmp r4, #0 + 8002950: db16 blt.n 8002980 + 8002952: 2400 movs r4, #0 + 8002954: 611c str r4, [r3, #16] + 8002956: 691c ldr r4, [r3, #16] + 8002958: f444 2400 orr.w r4, r4, #524288 @ 0x80000 + 800295c: 611c str r4, [r3, #16] + 800295e: 691c ldr r4, [r3, #16] + 8002960: f044 0418 orr.w r4, r4, #24 + 8002964: 611c str r4, [r3, #16] + 8002966: 691c ldr r4, [r3, #16] + 8002968: 2901 cmp r1, #1 + 800296a: f044 44c0 orr.w r4, r4, #1610612736 @ 0x60000000 + 800296e: 611c str r4, [r3, #16] + 8002970: bf01 itttt eq + 8002972: 615a streq r2, [r3, #20] + 8002974: f8d0 3b00 ldreq.w r3, [r0, #2816] @ 0xb00 + 8002978: f043 2380 orreq.w r3, r3, #2147516416 @ 0x80008000 + 800297c: f8c0 3b00 streq.w r3, [r0, #2816] @ 0xb00 + 8002980: 2000 movs r0, #0 + 8002982: bd30 pop {r4, r5, pc} + 8002984: 4f54300a .word 0x4f54300a + +08002988 : + 8002988: f8d0 32d4 ldr.w r3, [r0, #724] @ 0x2d4 + 800298c: 33b0 adds r3, #176 @ 0xb0 + 800298e: f850 3023 ldr.w r3, [r0, r3, lsl #2] + 8002992: 2000 movs r0, #0 + 8002994: 7318 strb r0, [r3, #12] + 8002996: 4770 bx lr + +08002998 : + 8002998: 230a movs r3, #10 + 800299a: 8003 strh r3, [r0, #0] + 800299c: 4800 ldr r0, [pc, #0] @ (80029a0 ) + 800299e: 4770 bx lr + 80029a0: 2000004c .word 0x2000004c + +080029a4 : + 80029a4: b510 push {r4, lr} + 80029a6: 2181 movs r1, #129 @ 0x81 + 80029a8: 4604 mov r4, r0 + 80029aa: 4805 ldr r0, [pc, #20] @ (80029c0 ) + 80029ac: f000 fa7e bl 8002eac + 80029b0: b108 cbz r0, 80029b6 + 80029b2: 230a movs r3, #10 + 80029b4: 7183 strb r3, [r0, #6] + 80029b6: 2322 movs r3, #34 @ 0x22 + 80029b8: 4801 ldr r0, [pc, #4] @ (80029c0 ) + 80029ba: 8023 strh r3, [r4, #0] + 80029bc: bd10 pop {r4, pc} + 80029be: bf00 nop + 80029c0: 20000064 .word 0x20000064 + +080029c4 : + 80029c4: f7ff bfee b.w 80029a4 + +080029c8 : + 80029c8: b510 push {r4, lr} + 80029ca: 2181 movs r1, #129 @ 0x81 + 80029cc: 4604 mov r4, r0 + 80029ce: 4805 ldr r0, [pc, #20] @ (80029e4 ) + 80029d0: f000 fa6c bl 8002eac + 80029d4: b108 cbz r0, 80029da + 80029d6: 2307 movs r3, #7 + 80029d8: 7183 strb r3, [r0, #6] + 80029da: 2322 movs r3, #34 @ 0x22 + 80029dc: 4801 ldr r0, [pc, #4] @ (80029e4 ) + 80029de: 8023 strh r3, [r4, #0] + 80029e0: bd10 pop {r4, pc} + 80029e2: bf00 nop + 80029e4: 20000064 .word 0x20000064 + +080029e8 : + 80029e8: f8d0 32d4 ldr.w r3, [r0, #724] @ 0x2d4 + 80029ec: b513 push {r0, r1, r4, lr} + 80029ee: 33b0 adds r3, #176 @ 0xb0 + 80029f0: 2200 movs r2, #0 + 80029f2: f850 3023 ldr.w r3, [r0, r3, lsl #2] + 80029f6: f8ad 2006 strh.w r2, [sp, #6] + 80029fa: 2b00 cmp r3, #0 + 80029fc: d04a beq.n 8002a94 + 80029fe: 780a ldrb r2, [r1, #0] + 8002a00: f012 0260 ands.w r2, r2, #96 @ 0x60 + 8002a04: d01d beq.n 8002a42 + 8002a06: 2a20 cmp r2, #32 + 8002a08: d142 bne.n 8002a90 + 8002a0a: 784a ldrb r2, [r1, #1] + 8002a0c: 3a02 subs r2, #2 + 8002a0e: 2a09 cmp r2, #9 + 8002a10: d83e bhi.n 8002a90 + 8002a12: e8df f002 tbb [pc, r2] + 8002a16: 0a13 .short 0x0a13 + 8002a18: 3d3d3d3d .word 0x3d3d3d3d + 8002a1c: 050f3d3d .word 0x050f3d3d + 8002a20: 788a ldrb r2, [r1, #2] + 8002a22: 601a str r2, [r3, #0] + 8002a24: 2000 movs r0, #0 + 8002a26: b002 add sp, #8 + 8002a28: bd10 pop {r4, pc} + 8002a2a: 2201 movs r2, #1 + 8002a2c: 4619 mov r1, r3 + 8002a2e: f000 fcd8 bl 80033e2 + 8002a32: e7f7 b.n 8002a24 + 8002a34: 884a ldrh r2, [r1, #2] + 8002a36: 0a12 lsrs r2, r2, #8 + 8002a38: 605a str r2, [r3, #4] + 8002a3a: e7f3 b.n 8002a24 + 8002a3c: 2201 movs r2, #1 + 8002a3e: 1d19 adds r1, r3, #4 + 8002a40: e7f5 b.n 8002a2e + 8002a42: 784a ldrb r2, [r1, #1] + 8002a44: 2a0b cmp r2, #11 + 8002a46: d823 bhi.n 8002a90 + 8002a48: a401 add r4, pc, #4 @ (adr r4, 8002a50 ) + 8002a4a: f854 f022 ldr.w pc, [r4, r2, lsl #2] + 8002a4e: bf00 nop + 8002a50: 08002a81 .word 0x08002a81 + 8002a54: 08002a25 .word 0x08002a25 + 8002a58: 08002a91 .word 0x08002a91 + 8002a5c: 08002a91 .word 0x08002a91 + 8002a60: 08002a91 .word 0x08002a91 + 8002a64: 08002a91 .word 0x08002a91 + 8002a68: 08002a99 .word 0x08002a99 + 8002a6c: 08002a91 .word 0x08002a91 + 8002a70: 08002a91 .word 0x08002a91 + 8002a74: 08002a91 .word 0x08002a91 + 8002a78: 08002abd .word 0x08002abd + 8002a7c: 08002acd .word 0x08002acd + 8002a80: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002a84: 2b03 cmp r3, #3 + 8002a86: d103 bne.n 8002a90 + 8002a88: 2202 movs r2, #2 + 8002a8a: f10d 0106 add.w r1, sp, #6 + 8002a8e: e7ce b.n 8002a2e + 8002a90: f000 fc80 bl 8003394 + 8002a94: 2003 movs r0, #3 + 8002a96: e7c6 b.n 8002a26 + 8002a98: 884b ldrh r3, [r1, #2] + 8002a9a: 0a1b lsrs r3, r3, #8 + 8002a9c: 2b22 cmp r3, #34 @ 0x22 + 8002a9e: d105 bne.n 8002aac + 8002aa0: 88ca ldrh r2, [r1, #6] + 8002aa2: 490e ldr r1, [pc, #56] @ (8002adc ) + 8002aa4: 2a3f cmp r2, #63 @ 0x3f + 8002aa6: bf28 it cs + 8002aa8: 223f movcs r2, #63 @ 0x3f + 8002aaa: e7c0 b.n 8002a2e + 8002aac: 2b21 cmp r3, #33 @ 0x21 + 8002aae: d1ef bne.n 8002a90 + 8002ab0: 88ca ldrh r2, [r1, #6] + 8002ab2: 490b ldr r1, [pc, #44] @ (8002ae0 ) + 8002ab4: 2a09 cmp r2, #9 + 8002ab6: bf28 it cs + 8002ab8: 2209 movcs r2, #9 + 8002aba: e7b8 b.n 8002a2e + 8002abc: f890 229c ldrb.w r2, [r0, #668] @ 0x29c + 8002ac0: 2a03 cmp r2, #3 + 8002ac2: d1e5 bne.n 8002a90 + 8002ac4: 2201 movs r2, #1 + 8002ac6: f103 0108 add.w r1, r3, #8 + 8002aca: e7b0 b.n 8002a2e + 8002acc: f890 229c ldrb.w r2, [r0, #668] @ 0x29c + 8002ad0: 2a03 cmp r2, #3 + 8002ad2: d1dd bne.n 8002a90 + 8002ad4: 788a ldrb r2, [r1, #2] + 8002ad6: 609a str r2, [r3, #8] + 8002ad8: e7a4 b.n 8002a24 + 8002ada: bf00 nop + 8002adc: 2000000c .word 0x2000000c + 8002ae0: 20000058 .word 0x20000058 + +08002ae4 : + 8002ae4: b538 push {r3, r4, r5, lr} + 8002ae6: 4604 mov r4, r0 + 8002ae8: 2181 movs r1, #129 @ 0x81 + 8002aea: f000 fe89 bl 8003800 + 8002aee: f8d4 32d4 ldr.w r3, [r4, #724] @ 0x2d4 + 8002af2: 2500 movs r5, #0 + 8002af4: 33b0 adds r3, #176 @ 0xb0 + 8002af6: f884 5037 strb.w r5, [r4, #55] @ 0x37 + 8002afa: f854 0023 ldr.w r0, [r4, r3, lsl #2] + 8002afe: 6325 str r5, [r4, #48] @ 0x30 + 8002b00: b130 cbz r0, 8002b10 + 8002b02: f000 fe61 bl 80037c8 + 8002b06: f8d4 32d4 ldr.w r3, [r4, #724] @ 0x2d4 + 8002b0a: 33b0 adds r3, #176 @ 0xb0 + 8002b0c: f844 5023 str.w r5, [r4, r3, lsl #2] + 8002b10: 2000 movs r0, #0 + 8002b12: bd38 pop {r3, r4, r5, pc} + +08002b14 : + 8002b14: b538 push {r3, r4, r5, lr} + 8002b16: 4604 mov r4, r0 + 8002b18: 2010 movs r0, #16 + 8002b1a: f000 fe51 bl 80037c0 + 8002b1e: f8d4 32d4 ldr.w r3, [r4, #724] @ 0x2d4 + 8002b22: 33b0 adds r3, #176 @ 0xb0 + 8002b24: 4605 mov r5, r0 + 8002b26: f844 0023 str.w r0, [r4, r3, lsl #2] + 8002b2a: b908 cbnz r0, 8002b30 + 8002b2c: 2002 movs r0, #2 + 8002b2e: bd38 pop {r3, r4, r5, pc} + 8002b30: 7c23 ldrb r3, [r4, #16] + 8002b32: f8c4 02bc str.w r0, [r4, #700] @ 0x2bc + 8002b36: 2b00 cmp r3, #0 + 8002b38: bf14 ite ne + 8002b3a: 230a movne r3, #10 + 8002b3c: 2307 moveq r3, #7 + 8002b3e: 6323 str r3, [r4, #48] @ 0x30 + 8002b40: 2203 movs r2, #3 + 8002b42: 2304 movs r3, #4 + 8002b44: 2181 movs r1, #129 @ 0x81 + 8002b46: 4620 mov r0, r4 + 8002b48: f000 fe4e bl 80037e8 + 8002b4c: 2301 movs r3, #1 + 8002b4e: 2000 movs r0, #0 + 8002b50: f884 3037 strb.w r3, [r4, #55] @ 0x37 + 8002b54: 7328 strb r0, [r5, #12] + 8002b56: e7ea b.n 8002b2e + +08002b58 : + 8002b58: 4613 mov r3, r2 + 8002b5a: f8d0 22d4 ldr.w r2, [r0, #724] @ 0x2d4 + 8002b5e: 32b0 adds r2, #176 @ 0xb0 + 8002b60: b510 push {r4, lr} + 8002b62: f850 2022 ldr.w r2, [r0, r2, lsl #2] + 8002b66: b172 cbz r2, 8002b86 + 8002b68: f890 429c ldrb.w r4, [r0, #668] @ 0x29c + 8002b6c: 2c03 cmp r4, #3 + 8002b6e: d101 bne.n 8002b74 + 8002b70: 7b14 ldrb r4, [r2, #12] + 8002b72: b10c cbz r4, 8002b78 + 8002b74: 2000 movs r0, #0 + 8002b76: bd10 pop {r4, pc} + 8002b78: 2401 movs r4, #1 + 8002b7a: 7314 strb r4, [r2, #12] + 8002b7c: 460a mov r2, r1 + 8002b7e: 2181 movs r1, #129 @ 0x81 + 8002b80: f000 fe62 bl 8003848 + 8002b84: e7f6 b.n 8002b74 + 8002b86: 2003 movs r0, #3 + 8002b88: e7f5 b.n 8002b76 + +08002b8a : + 8002b8a: b178 cbz r0, 8002bac + 8002b8c: 2300 movs r3, #0 + 8002b8e: f8c0 32b8 str.w r3, [r0, #696] @ 0x2b8 + 8002b92: f8c0 32c4 str.w r3, [r0, #708] @ 0x2c4 + 8002b96: f8c0 32d0 str.w r3, [r0, #720] @ 0x2d0 + 8002b9a: b109 cbz r1, 8002ba0 + 8002b9c: f8c0 12b4 str.w r1, [r0, #692] @ 0x2b4 + 8002ba0: 2301 movs r3, #1 + 8002ba2: f880 329c strb.w r3, [r0, #668] @ 0x29c + 8002ba6: 7002 strb r2, [r0, #0] + 8002ba8: f000 bd98 b.w 80036dc + 8002bac: 2003 movs r0, #3 + 8002bae: 4770 bx lr + +08002bb0 : + 8002bb0: b513 push {r0, r1, r4, lr} + 8002bb2: 2300 movs r3, #0 + 8002bb4: 4604 mov r4, r0 + 8002bb6: f8ad 3006 strh.w r3, [sp, #6] + 8002bba: b181 cbz r1, 8002bde + 8002bbc: 6acb ldr r3, [r1, #44] @ 0x2c + 8002bbe: f8c0 12b8 str.w r1, [r0, #696] @ 0x2b8 + 8002bc2: b123 cbz r3, 8002bce + 8002bc4: f10d 0006 add.w r0, sp, #6 + 8002bc8: 4798 blx r3 + 8002bca: f8c4 02d0 str.w r0, [r4, #720] @ 0x2d0 + 8002bce: f8d4 32d8 ldr.w r3, [r4, #728] @ 0x2d8 + 8002bd2: 3301 adds r3, #1 + 8002bd4: f8c4 32d8 str.w r3, [r4, #728] @ 0x2d8 + 8002bd8: 2000 movs r0, #0 + 8002bda: b002 add sp, #8 + 8002bdc: bd10 pop {r4, pc} + 8002bde: 2003 movs r0, #3 + 8002be0: e7fb b.n 8002bda + +08002be2 : + 8002be2: f000 bdf8 b.w 80037d6 + +08002be6 : + 8002be6: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002bea: b10b cbz r3, 8002bf0 + 8002bec: 681b ldr r3, [r3, #0] + 8002bee: 4718 bx r3 + 8002bf0: 4618 mov r0, r3 + 8002bf2: 4770 bx lr + +08002bf4 : + 8002bf4: b508 push {r3, lr} + 8002bf6: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002bfa: 685b ldr r3, [r3, #4] + 8002bfc: 4798 blx r3 + 8002bfe: 2800 cmp r0, #0 + 8002c00: bf18 it ne + 8002c02: 2003 movne r0, #3 + 8002c04: bd08 pop {r3, pc} + +08002c06 : + 8002c06: b538 push {r3, r4, r5, lr} + 8002c08: 4604 mov r4, r0 + 8002c0a: f200 25aa addw r5, r0, #682 @ 0x2aa + 8002c0e: 4628 mov r0, r5 + 8002c10: f000 fbb5 bl 800337e + 8002c14: 2301 movs r3, #1 + 8002c16: f894 12aa ldrb.w r1, [r4, #682] @ 0x2aa + 8002c1a: f8c4 3294 str.w r3, [r4, #660] @ 0x294 + 8002c1e: f8b4 32b0 ldrh.w r3, [r4, #688] @ 0x2b0 + 8002c22: f8c4 3298 str.w r3, [r4, #664] @ 0x298 + 8002c26: f001 031f and.w r3, r1, #31 + 8002c2a: 2b01 cmp r3, #1 + 8002c2c: d008 beq.n 8002c40 + 8002c2e: 2b02 cmp r3, #2 + 8002c30: d00c beq.n 8002c4c + 8002c32: b98b cbnz r3, 8002c58 + 8002c34: 4629 mov r1, r5 + 8002c36: 4620 mov r0, r4 + 8002c38: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8002c3c: f000 b954 b.w 8002ee8 + 8002c40: 4629 mov r1, r5 + 8002c42: 4620 mov r0, r4 + 8002c44: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8002c48: f000 bac6 b.w 80031d8 + 8002c4c: 4629 mov r1, r5 + 8002c4e: 4620 mov r0, r4 + 8002c50: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8002c54: f000 baef b.w 8003236 + 8002c58: 4620 mov r0, r4 + 8002c5a: f001 0180 and.w r1, r1, #128 @ 0x80 + 8002c5e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8002c62: f000 bdd6 b.w 8003812 + +08002c66 : + 8002c66: b570 push {r4, r5, r6, lr} + 8002c68: 4604 mov r4, r0 + 8002c6a: bb39 cbnz r1, 8002cbc + 8002c6c: f8d0 3294 ldr.w r3, [r0, #660] @ 0x294 + 8002c70: 2b03 cmp r3, #3 + 8002c72: d112 bne.n 8002c9a + 8002c74: f8d0 3158 ldr.w r3, [r0, #344] @ 0x158 + 8002c78: f8b0 2160 ldrh.w r2, [r0, #352] @ 0x160 + 8002c7c: 4293 cmp r3, r2 + 8002c7e: d90e bls.n 8002c9e + 8002c80: f8d0 1164 ldr.w r1, [r0, #356] @ 0x164 + 8002c84: 1a9b subs r3, r3, r2 + 8002c86: 4411 add r1, r2 + 8002c88: 429a cmp r2, r3 + 8002c8a: f8c0 3158 str.w r3, [r0, #344] @ 0x158 + 8002c8e: f8c0 1164 str.w r1, [r0, #356] @ 0x164 + 8002c92: bf38 it cc + 8002c94: 461a movcc r2, r3 + 8002c96: f000 fbba bl 800340e + 8002c9a: 2000 movs r0, #0 + 8002c9c: bd70 pop {r4, r5, r6, pc} + 8002c9e: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002ca2: 2b03 cmp r3, #3 + 8002ca4: d106 bne.n 8002cb4 + 8002ca6: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002caa: 691b ldr r3, [r3, #16] + 8002cac: b113 cbz r3, 8002cb4 + 8002cae: f8c0 12d4 str.w r1, [r0, #724] @ 0x2d4 + 8002cb2: 4798 blx r3 + 8002cb4: 4620 mov r0, r4 + 8002cb6: f000 fbb2 bl 800341e + 8002cba: e7ee b.n 8002c9a + 8002cbc: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002cc0: 2b03 cmp r3, #3 + 8002cc2: d1ea bne.n 8002c9a + 8002cc4: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002cc8: 699b ldr r3, [r3, #24] + 8002cca: 2b00 cmp r3, #0 + 8002ccc: d0e5 beq.n 8002c9a + 8002cce: 2200 movs r2, #0 + 8002cd0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8002cd4: f8c0 22d4 str.w r2, [r0, #724] @ 0x2d4 + 8002cd8: 4718 bx r3 + +08002cda : + 8002cda: b570 push {r4, r5, r6, lr} + 8002cdc: 4604 mov r4, r0 + 8002cde: 460d mov r5, r1 + 8002ce0: 2900 cmp r1, #0 + 8002ce2: d13f bne.n 8002d64 + 8002ce4: f8d0 3294 ldr.w r3, [r0, #660] @ 0x294 + 8002ce8: 2b02 cmp r3, #2 + 8002cea: d110 bne.n 8002d0e + 8002cec: 6982 ldr r2, [r0, #24] + 8002cee: 8c03 ldrh r3, [r0, #32] + 8002cf0: 429a cmp r2, r3 + 8002cf2: d914 bls.n 8002d1e + 8002cf4: 6a41 ldr r1, [r0, #36] @ 0x24 + 8002cf6: 1ad2 subs r2, r2, r3 + 8002cf8: 4419 add r1, r3 + 8002cfa: 6182 str r2, [r0, #24] + 8002cfc: 6241 str r1, [r0, #36] @ 0x24 + 8002cfe: f000 fb7e bl 80033fe + 8002d02: 462b mov r3, r5 + 8002d04: 462a mov r2, r5 + 8002d06: 4629 mov r1, r5 + 8002d08: 4620 mov r0, r4 + 8002d0a: f000 fda6 bl 800385a + 8002d0e: f894 32a0 ldrb.w r3, [r4, #672] @ 0x2a0 + 8002d12: b113 cbz r3, 8002d1a + 8002d14: 2300 movs r3, #0 + 8002d16: f884 32a0 strb.w r3, [r4, #672] @ 0x2a0 + 8002d1a: 2000 movs r0, #0 + 8002d1c: bd70 pop {r4, r5, r6, pc} + 8002d1e: d10c bne.n 8002d3a + 8002d20: 6943 ldr r3, [r0, #20] + 8002d22: 429a cmp r2, r3 + 8002d24: d809 bhi.n 8002d3a + 8002d26: f8d0 2298 ldr.w r2, [r0, #664] @ 0x298 + 8002d2a: 4293 cmp r3, r2 + 8002d2c: d205 bcs.n 8002d3a + 8002d2e: 460a mov r2, r1 + 8002d30: f000 fb65 bl 80033fe + 8002d34: f8c4 5298 str.w r5, [r4, #664] @ 0x298 + 8002d38: e7e3 b.n 8002d02 + 8002d3a: f894 329c ldrb.w r3, [r4, #668] @ 0x29c + 8002d3e: 2b03 cmp r3, #3 + 8002d40: d108 bne.n 8002d54 + 8002d42: f8d4 32b8 ldr.w r3, [r4, #696] @ 0x2b8 + 8002d46: 68db ldr r3, [r3, #12] + 8002d48: b123 cbz r3, 8002d54 + 8002d4a: 2200 movs r2, #0 + 8002d4c: f8c4 22d4 str.w r2, [r4, #724] @ 0x2d4 + 8002d50: 4620 mov r0, r4 + 8002d52: 4798 blx r3 + 8002d54: 2180 movs r1, #128 @ 0x80 + 8002d56: 4620 mov r0, r4 + 8002d58: f000 fd5b bl 8003812 + 8002d5c: 4620 mov r0, r4 + 8002d5e: f000 fb69 bl 8003434 + 8002d62: e7d4 b.n 8002d0e + 8002d64: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002d68: 2b03 cmp r3, #3 + 8002d6a: d1d6 bne.n 8002d1a + 8002d6c: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002d70: 695b ldr r3, [r3, #20] + 8002d72: 2b00 cmp r3, #0 + 8002d74: d0d1 beq.n 8002d1a + 8002d76: 2200 movs r2, #0 + 8002d78: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8002d7c: f8c0 22d4 str.w r2, [r0, #724] @ 0x2d4 + 8002d80: 4718 bx r3 + +08002d82 : + 8002d82: b5f8 push {r3, r4, r5, r6, r7, lr} + 8002d84: 2301 movs r3, #1 + 8002d86: f880 329c strb.w r3, [r0, #668] @ 0x29c + 8002d8a: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002d8e: 2100 movs r1, #0 + 8002d90: 4604 mov r4, r0 + 8002d92: f8c0 1294 str.w r1, [r0, #660] @ 0x294 + 8002d96: 6041 str r1, [r0, #4] + 8002d98: f8c0 12a4 str.w r1, [r0, #676] @ 0x2a4 + 8002d9c: f880 12a0 strb.w r1, [r0, #672] @ 0x2a0 + 8002da0: b9bb cbnz r3, 8002dd2 + 8002da2: 2600 movs r6, #0 + 8002da4: 2200 movs r2, #0 + 8002da6: 2540 movs r5, #64 @ 0x40 + 8002da8: 4611 mov r1, r2 + 8002daa: 2701 movs r7, #1 + 8002dac: 2340 movs r3, #64 @ 0x40 + 8002dae: 4620 mov r0, r4 + 8002db0: f000 fd1a bl 80037e8 + 8002db4: f884 7163 strb.w r7, [r4, #355] @ 0x163 + 8002db8: f8a4 5160 strh.w r5, [r4, #352] @ 0x160 + 8002dbc: 462b mov r3, r5 + 8002dbe: 2200 movs r2, #0 + 8002dc0: 2180 movs r1, #128 @ 0x80 + 8002dc2: 4620 mov r0, r4 + 8002dc4: f000 fd10 bl 80037e8 + 8002dc8: f884 7023 strb.w r7, [r4, #35] @ 0x23 + 8002dcc: 8425 strh r5, [r4, #32] + 8002dce: 4630 mov r0, r6 + 8002dd0: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8002dd2: 685b ldr r3, [r3, #4] + 8002dd4: 2b00 cmp r3, #0 + 8002dd6: d0e4 beq.n 8002da2 + 8002dd8: 4798 blx r3 + 8002dda: 2800 cmp r0, #0 + 8002ddc: d0e1 beq.n 8002da2 + 8002dde: 2603 movs r6, #3 + 8002de0: e7e0 b.n 8002da4 + +08002de2 : + 8002de2: 7401 strb r1, [r0, #16] + 8002de4: 2000 movs r0, #0 + 8002de6: 4770 bx lr + +08002de8 : + 8002de8: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002dec: 2b04 cmp r3, #4 + 8002dee: bf1e ittt ne + 8002df0: f890 329c ldrbne.w r3, [r0, #668] @ 0x29c + 8002df4: b2db uxtbne r3, r3 + 8002df6: f880 329d strbne.w r3, [r0, #669] @ 0x29d + 8002dfa: 2304 movs r3, #4 + 8002dfc: f880 329c strb.w r3, [r0, #668] @ 0x29c + 8002e00: 2000 movs r0, #0 + 8002e02: 4770 bx lr + +08002e04 : + 8002e04: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002e08: 2b04 cmp r3, #4 + 8002e0a: bf02 ittt eq + 8002e0c: f890 329d ldrbeq.w r3, [r0, #669] @ 0x29d + 8002e10: b2db uxtbeq r3, r3 + 8002e12: f880 329c strbeq.w r3, [r0, #668] @ 0x29c + 8002e16: 2000 movs r0, #0 + 8002e18: 4770 bx lr + +08002e1a : + 8002e1a: b508 push {r3, lr} + 8002e1c: f890 229c ldrb.w r2, [r0, #668] @ 0x29c + 8002e20: 2a03 cmp r2, #3 + 8002e22: d105 bne.n 8002e30 + 8002e24: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002e28: b113 cbz r3, 8002e30 + 8002e2a: 69db ldr r3, [r3, #28] + 8002e2c: b103 cbz r3, 8002e30 + 8002e2e: 4798 blx r3 + 8002e30: 2000 movs r0, #0 + 8002e32: bd08 pop {r3, pc} + +08002e34 : + 8002e34: f8d0 22d4 ldr.w r2, [r0, #724] @ 0x2d4 + 8002e38: 32ae adds r2, #174 @ 0xae + 8002e3a: b508 push {r3, lr} + 8002e3c: f850 2022 ldr.w r2, [r0, r2, lsl #2] + 8002e40: b14a cbz r2, 8002e56 + 8002e42: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002e46: 2b03 cmp r3, #3 + 8002e48: d101 bne.n 8002e4e + 8002e4a: 6a13 ldr r3, [r2, #32] + 8002e4c: b90b cbnz r3, 8002e52 + 8002e4e: 2000 movs r0, #0 + 8002e50: bd08 pop {r3, pc} + 8002e52: 4798 blx r3 + 8002e54: e7fb b.n 8002e4e + 8002e56: 2003 movs r0, #3 + 8002e58: e7fa b.n 8002e50 + +08002e5a : + 8002e5a: f8d0 22d4 ldr.w r2, [r0, #724] @ 0x2d4 + 8002e5e: 32ae adds r2, #174 @ 0xae + 8002e60: b508 push {r3, lr} + 8002e62: f850 2022 ldr.w r2, [r0, r2, lsl #2] + 8002e66: b14a cbz r2, 8002e7c + 8002e68: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 8002e6c: 2b03 cmp r3, #3 + 8002e6e: d101 bne.n 8002e74 + 8002e70: 6a53 ldr r3, [r2, #36] @ 0x24 + 8002e72: b90b cbnz r3, 8002e78 + 8002e74: 2000 movs r0, #0 + 8002e76: bd08 pop {r3, pc} + 8002e78: 4798 blx r3 + 8002e7a: e7fb b.n 8002e74 + 8002e7c: 2003 movs r0, #3 + 8002e7e: e7fa b.n 8002e76 + +08002e80 : + 8002e80: 2000 movs r0, #0 + 8002e82: 4770 bx lr + +08002e84 : + 8002e84: 2201 movs r2, #1 + 8002e86: b508 push {r3, lr} + 8002e88: f880 229c strb.w r2, [r0, #668] @ 0x29c + 8002e8c: f8d0 22b8 ldr.w r2, [r0, #696] @ 0x2b8 + 8002e90: b90a cbnz r2, 8002e96 + 8002e92: 2000 movs r0, #0 + 8002e94: bd08 pop {r3, pc} + 8002e96: 6852 ldr r2, [r2, #4] + 8002e98: 7901 ldrb r1, [r0, #4] + 8002e9a: 4790 blx r2 + 8002e9c: 2800 cmp r0, #0 + 8002e9e: d0f8 beq.n 8002e92 + 8002ea0: 2003 movs r0, #3 + 8002ea2: e7f7 b.n 8002e94 + +08002ea4 : + 8002ea4: 2000 movs r0, #0 + 8002ea6: 4770 bx lr + +08002ea8 : + 8002ea8: 2000 movs r0, #0 + 8002eaa: 4770 bx lr + +08002eac : + 8002eac: b510 push {r4, lr} + 8002eae: 8842 ldrh r2, [r0, #2] + 8002eb0: 7803 ldrb r3, [r0, #0] + 8002eb2: 429a cmp r2, r3 + 8002eb4: d801 bhi.n 8002eba + 8002eb6: 2000 movs r0, #0 + 8002eb8: bd10 pop {r4, pc} + 8002eba: 7804 ldrb r4, [r0, #0] + 8002ebc: 4420 add r0, r4 + 8002ebe: 4423 add r3, r4 + 8002ec0: 7844 ldrb r4, [r0, #1] + 8002ec2: 2c05 cmp r4, #5 + 8002ec4: b29b uxth r3, r3 + 8002ec6: d1f4 bne.n 8002eb2 + 8002ec8: 7884 ldrb r4, [r0, #2] + 8002eca: 428c cmp r4, r1 + 8002ecc: d1f1 bne.n 8002eb2 + 8002ece: e7f3 b.n 8002eb8 + +08002ed0 : + 8002ed0: b510 push {r4, lr} + 8002ed2: 2180 movs r1, #128 @ 0x80 + 8002ed4: 4604 mov r4, r0 + 8002ed6: f000 fc9c bl 8003812 + 8002eda: 4620 mov r0, r4 + 8002edc: 2100 movs r1, #0 + 8002ede: e8bd 4010 ldmia.w sp!, {r4, lr} + 8002ee2: f000 bc96 b.w 8003812 + ... + +08002ee8 : + 8002ee8: b573 push {r0, r1, r4, r5, r6, lr} + 8002eea: 780b ldrb r3, [r1, #0] + 8002eec: f003 0360 and.w r3, r3, #96 @ 0x60 + 8002ef0: 2b20 cmp r3, #32 + 8002ef2: 4604 mov r4, r0 + 8002ef4: 460d mov r5, r1 + 8002ef6: d009 beq.n 8002f0c + 8002ef8: 2b40 cmp r3, #64 @ 0x40 + 8002efa: d007 beq.n 8002f0c + 8002efc: b193 cbz r3, 8002f24 + 8002efe: 4620 mov r0, r4 + 8002f00: f7ff ffe6 bl 8002ed0 + 8002f04: 2500 movs r5, #0 + 8002f06: 4628 mov r0, r5 + 8002f08: b002 add sp, #8 + 8002f0a: bd70 pop {r4, r5, r6, pc} + 8002f0c: f8d4 32d4 ldr.w r3, [r4, #724] @ 0x2d4 + 8002f10: 33ae adds r3, #174 @ 0xae + 8002f12: 4629 mov r1, r5 + 8002f14: f854 3023 ldr.w r3, [r4, r3, lsl #2] + 8002f18: 689b ldr r3, [r3, #8] + 8002f1a: 4620 mov r0, r4 + 8002f1c: b002 add sp, #8 + 8002f1e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8002f22: 4718 bx r3 + 8002f24: 784b ldrb r3, [r1, #1] + 8002f26: 2b09 cmp r3, #9 + 8002f28: d8e9 bhi.n 8002efe + 8002f2a: a201 add r2, pc, #4 @ (adr r2, 8002f30 ) + 8002f2c: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8002f30: 08003179 .word 0x08003179 + 8002f34: 080031bd .word 0x080031bd + 8002f38: 08002eff .word 0x08002eff + 8002f3c: 080031a1 .word 0x080031a1 + 8002f40: 08002eff .word 0x08002eff + 8002f44: 08003073 .word 0x08003073 + 8002f48: 08002f59 .word 0x08002f59 + 8002f4c: 08002eff .word 0x08002eff + 8002f50: 0800314d .word 0x0800314d + 8002f54: 080030b5 .word 0x080030b5 + 8002f58: 2300 movs r3, #0 + 8002f5a: f8ad 3006 strh.w r3, [sp, #6] + 8002f5e: 884b ldrh r3, [r1, #2] + 8002f60: 0a1a lsrs r2, r3, #8 + 8002f62: 3a01 subs r2, #1 + 8002f64: 2a0e cmp r2, #14 + 8002f66: d8ca bhi.n 8002efe + 8002f68: a101 add r1, pc, #4 @ (adr r1, 8002f70 ) + 8002f6a: f851 f022 ldr.w pc, [r1, r2, lsl #2] + 8002f6e: bf00 nop + 8002f70: 08002fb7 .word 0x08002fb7 + 8002f74: 08002fe9 .word 0x08002fe9 + 8002f78: 08003003 .word 0x08003003 + 8002f7c: 08002eff .word 0x08002eff + 8002f80: 08002eff .word 0x08002eff + 8002f84: 08003045 .word 0x08003045 + 8002f88: 0800305b .word 0x0800305b + 8002f8c: 08002eff .word 0x08002eff + 8002f90: 08002eff .word 0x08002eff + 8002f94: 08002eff .word 0x08002eff + 8002f98: 08002eff .word 0x08002eff + 8002f9c: 08002eff .word 0x08002eff + 8002fa0: 08002eff .word 0x08002eff + 8002fa4: 08002eff .word 0x08002eff + 8002fa8: 08002fad .word 0x08002fad + 8002fac: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8002fb0: 69db ldr r3, [r3, #28] + 8002fb2: b91b cbnz r3, 8002fbc + 8002fb4: e7a3 b.n 8002efe + 8002fb6: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8002fba: 681b ldr r3, [r3, #0] + 8002fbc: 7c20 ldrb r0, [r4, #16] + 8002fbe: f10d 0106 add.w r1, sp, #6 + 8002fc2: 4798 blx r3 + 8002fc4: 88ea ldrh r2, [r5, #6] + 8002fc6: 2a00 cmp r2, #0 + 8002fc8: f000 80a3 beq.w 8003112 + 8002fcc: f8bd 3006 ldrh.w r3, [sp, #6] + 8002fd0: 2b00 cmp r3, #0 + 8002fd2: d094 beq.n 8002efe + 8002fd4: 429a cmp r2, r3 + 8002fd6: bf28 it cs + 8002fd8: 461a movcs r2, r3 + 8002fda: f8ad 2006 strh.w r2, [sp, #6] + 8002fde: 4601 mov r1, r0 + 8002fe0: 4620 mov r0, r4 + 8002fe2: f000 f9fe bl 80033e2 + 8002fe6: e78d b.n 8002f04 + 8002fe8: 7c02 ldrb r2, [r0, #16] + 8002fea: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8002fee: b932 cbnz r2, 8002ffe + 8002ff0: 6a9b ldr r3, [r3, #40] @ 0x28 + 8002ff2: f10d 0006 add.w r0, sp, #6 + 8002ff6: 4798 blx r3 + 8002ff8: 2302 movs r3, #2 + 8002ffa: 7043 strb r3, [r0, #1] + 8002ffc: e7e2 b.n 8002fc4 + 8002ffe: 6adb ldr r3, [r3, #44] @ 0x2c + 8003000: e7f7 b.n 8002ff2 + 8003002: b2db uxtb r3, r3 + 8003004: 2b05 cmp r3, #5 + 8003006: f63f af7a bhi.w 8002efe + 800300a: e8df f003 tbb [pc, r3] + 800300e: 0703 .short 0x0703 + 8003010: 17130f0b .word 0x17130f0b + 8003014: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8003018: 685b ldr r3, [r3, #4] + 800301a: e7ca b.n 8002fb2 + 800301c: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8003020: 689b ldr r3, [r3, #8] + 8003022: e7c6 b.n 8002fb2 + 8003024: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8003028: 68db ldr r3, [r3, #12] + 800302a: e7c2 b.n 8002fb2 + 800302c: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8003030: 691b ldr r3, [r3, #16] + 8003032: e7be b.n 8002fb2 + 8003034: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8003038: 695b ldr r3, [r3, #20] + 800303a: e7ba b.n 8002fb2 + 800303c: f8d0 32b4 ldr.w r3, [r0, #692] @ 0x2b4 + 8003040: 699b ldr r3, [r3, #24] + 8003042: e7b6 b.n 8002fb2 + 8003044: 7c03 ldrb r3, [r0, #16] + 8003046: 2b00 cmp r3, #0 + 8003048: f47f af59 bne.w 8002efe + 800304c: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8003050: f10d 0006 add.w r0, sp, #6 + 8003054: 6b5b ldr r3, [r3, #52] @ 0x34 + 8003056: 4798 blx r3 + 8003058: e7b4 b.n 8002fc4 + 800305a: 7c03 ldrb r3, [r0, #16] + 800305c: 2b00 cmp r3, #0 + 800305e: f47f af4e bne.w 8002efe + 8003062: f8d0 32b8 ldr.w r3, [r0, #696] @ 0x2b8 + 8003066: f10d 0006 add.w r0, sp, #6 + 800306a: 6b1b ldr r3, [r3, #48] @ 0x30 + 800306c: 4798 blx r3 + 800306e: 2307 movs r3, #7 + 8003070: e7c3 b.n 8002ffa + 8003072: 888b ldrh r3, [r1, #4] + 8003074: 2b00 cmp r3, #0 + 8003076: f47f af42 bne.w 8002efe + 800307a: 88cb ldrh r3, [r1, #6] + 800307c: 2b00 cmp r3, #0 + 800307e: f47f af3e bne.w 8002efe + 8003082: 884d ldrh r5, [r1, #2] + 8003084: 2d7f cmp r5, #127 @ 0x7f + 8003086: f63f af3a bhi.w 8002efe + 800308a: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 800308e: 2b03 cmp r3, #3 + 8003090: f43f af35 beq.w 8002efe + 8003094: b2ed uxtb r5, r5 + 8003096: f880 529e strb.w r5, [r0, #670] @ 0x29e + 800309a: 4629 mov r1, r5 + 800309c: f000 fbcb bl 8003836 + 80030a0: 4620 mov r0, r4 + 80030a2: f000 f9bc bl 800341e + 80030a6: b11d cbz r5, 80030b0 + 80030a8: 2302 movs r3, #2 + 80030aa: f884 329c strb.w r3, [r4, #668] @ 0x29c + 80030ae: e729 b.n 8002f04 + 80030b0: 2301 movs r3, #1 + 80030b2: e7fa b.n 80030aa + 80030b4: 7889 ldrb r1, [r1, #2] + 80030b6: 4d47 ldr r5, [pc, #284] @ (80031d4 ) + 80030b8: 2901 cmp r1, #1 + 80030ba: 7029 strb r1, [r5, #0] + 80030bc: d903 bls.n 80030c6 + 80030be: f7ff ff07 bl 8002ed0 + 80030c2: 2503 movs r5, #3 + 80030c4: e71f b.n 8002f06 + 80030c6: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 80030ca: 2b02 cmp r3, #2 + 80030cc: b2de uxtb r6, r3 + 80030ce: d008 beq.n 80030e2 + 80030d0: 2e03 cmp r6, #3 + 80030d2: d017 beq.n 8003104 + 80030d4: f7ff fefc bl 8002ed0 + 80030d8: 7829 ldrb r1, [r5, #0] + 80030da: 4620 mov r0, r4 + 80030dc: f7ff fd8a bl 8002bf4 + 80030e0: e7ef b.n 80030c2 + 80030e2: b1b1 cbz r1, 8003112 + 80030e4: 2101 movs r1, #1 + 80030e6: 6041 str r1, [r0, #4] + 80030e8: f7ff fd7d bl 8002be6 + 80030ec: 4605 mov r5, r0 + 80030ee: 4620 mov r0, r4 + 80030f0: b125 cbz r5, 80030fc + 80030f2: f7ff feed bl 8002ed0 + 80030f6: f884 629c strb.w r6, [r4, #668] @ 0x29c + 80030fa: e704 b.n 8002f06 + 80030fc: f000 f98f bl 800341e + 8003100: 2303 movs r3, #3 + 8003102: e7d2 b.n 80030aa + 8003104: b949 cbnz r1, 800311a + 8003106: 2302 movs r3, #2 + 8003108: f880 329c strb.w r3, [r0, #668] @ 0x29c + 800310c: 6041 str r1, [r0, #4] + 800310e: f7ff fd71 bl 8002bf4 + 8003112: 4620 mov r0, r4 + 8003114: f000 f983 bl 800341e + 8003118: e6f4 b.n 8002f04 + 800311a: 6841 ldr r1, [r0, #4] + 800311c: 2901 cmp r1, #1 + 800311e: d0f8 beq.n 8003112 + 8003120: b2c9 uxtb r1, r1 + 8003122: f7ff fd67 bl 8002bf4 + 8003126: 7829 ldrb r1, [r5, #0] + 8003128: 6061 str r1, [r4, #4] + 800312a: 4620 mov r0, r4 + 800312c: f7ff fd5b bl 8002be6 + 8003130: 4605 mov r5, r0 + 8003132: 2800 cmp r0, #0 + 8003134: d0ed beq.n 8003112 + 8003136: 4620 mov r0, r4 + 8003138: f7ff feca bl 8002ed0 + 800313c: 7921 ldrb r1, [r4, #4] + 800313e: 4620 mov r0, r4 + 8003140: f7ff fd58 bl 8002bf4 + 8003144: 2302 movs r3, #2 + 8003146: f884 329c strb.w r3, [r4, #668] @ 0x29c + 800314a: e6dc b.n 8002f06 + 800314c: 88ca ldrh r2, [r1, #6] + 800314e: 2a01 cmp r2, #1 + 8003150: f47f aed5 bne.w 8002efe + 8003154: f890 129c ldrb.w r1, [r0, #668] @ 0x29c + 8003158: 2902 cmp r1, #2 + 800315a: b2cb uxtb r3, r1 + 800315c: d807 bhi.n 800316e + 800315e: 2b00 cmp r3, #0 + 8003160: f43f aecd beq.w 8002efe + 8003164: 4601 mov r1, r0 + 8003166: 2300 movs r3, #0 + 8003168: f841 3f08 str.w r3, [r1, #8]! + 800316c: e738 b.n 8002fe0 + 800316e: 2b03 cmp r3, #3 + 8003170: f47f aec5 bne.w 8002efe + 8003174: 1d01 adds r1, r0, #4 + 8003176: e733 b.n 8002fe0 + 8003178: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 800317c: 3b01 subs r3, #1 + 800317e: 2b02 cmp r3, #2 + 8003180: f63f aebd bhi.w 8002efe + 8003184: 88ca ldrh r2, [r1, #6] + 8003186: 2a02 cmp r2, #2 + 8003188: f47f aeb9 bne.w 8002efe + 800318c: f8d0 32a4 ldr.w r3, [r0, #676] @ 0x2a4 + 8003190: 4601 mov r1, r0 + 8003192: 2b00 cmp r3, #0 + 8003194: bf0c ite eq + 8003196: 2301 moveq r3, #1 + 8003198: 2303 movne r3, #3 + 800319a: f841 3f0c str.w r3, [r1, #12]! + 800319e: e71f b.n 8002fe0 + 80031a0: 884b ldrh r3, [r1, #2] + 80031a2: 2b01 cmp r3, #1 + 80031a4: d102 bne.n 80031ac + 80031a6: f8c4 32a4 str.w r3, [r4, #676] @ 0x2a4 + 80031aa: e7b2 b.n 8003112 + 80031ac: 2b02 cmp r3, #2 + 80031ae: f47f aea6 bne.w 8002efe + 80031b2: 888b ldrh r3, [r1, #4] + 80031b4: 0a1b lsrs r3, r3, #8 + 80031b6: f880 32a0 strb.w r3, [r0, #672] @ 0x2a0 + 80031ba: e7aa b.n 8003112 + 80031bc: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 80031c0: 3b01 subs r3, #1 + 80031c2: 2b02 cmp r3, #2 + 80031c4: f63f ae9b bhi.w 8002efe + 80031c8: 884b ldrh r3, [r1, #2] + 80031ca: 2b01 cmp r3, #1 + 80031cc: f47f ae9a bne.w 8002f04 + 80031d0: 2300 movs r3, #0 + 80031d2: e7e8 b.n 80031a6 + 80031d4: 20000148 .word 0x20000148 + +080031d8 : + 80031d8: b570 push {r4, r5, r6, lr} + 80031da: 780b ldrb r3, [r1, #0] + 80031dc: f003 0260 and.w r2, r3, #96 @ 0x60 + 80031e0: 065b lsls r3, r3, #25 + 80031e2: 4604 mov r4, r0 + 80031e4: 460e mov r6, r1 + 80031e6: d501 bpl.n 80031ec + 80031e8: 2a40 cmp r2, #64 @ 0x40 + 80031ea: d11f bne.n 800322c + 80031ec: f894 329c ldrb.w r3, [r4, #668] @ 0x29c + 80031f0: 3b01 subs r3, #1 + 80031f2: 2b02 cmp r3, #2 + 80031f4: d81a bhi.n 800322c + 80031f6: 7931 ldrb r1, [r6, #4] + 80031f8: 2901 cmp r1, #1 + 80031fa: 4620 mov r0, r4 + 80031fc: d817 bhi.n 800322e + 80031fe: f7ff fe51 bl 8002ea4 + 8003202: b988 cbnz r0, 8003228 + 8003204: f8d4 32b8 ldr.w r3, [r4, #696] @ 0x2b8 + 8003208: 689b ldr r3, [r3, #8] + 800320a: b16b cbz r3, 8003228 + 800320c: f8c4 02d4 str.w r0, [r4, #724] @ 0x2d4 + 8003210: 4631 mov r1, r6 + 8003212: 4620 mov r0, r4 + 8003214: 4798 blx r3 + 8003216: 4605 mov r5, r0 + 8003218: 88f3 ldrh r3, [r6, #6] + 800321a: b91b cbnz r3, 8003224 + 800321c: b915 cbnz r5, 8003224 + 800321e: 4620 mov r0, r4 + 8003220: f000 f8fd bl 800341e + 8003224: 4628 mov r0, r5 + 8003226: bd70 pop {r4, r5, r6, pc} + 8003228: 2503 movs r5, #3 + 800322a: e7f5 b.n 8003218 + 800322c: 4620 mov r0, r4 + 800322e: f7ff fe4f bl 8002ed0 + 8003232: 2500 movs r5, #0 + 8003234: e7f6 b.n 8003224 + +08003236 : + 8003236: b570 push {r4, r5, r6, lr} + 8003238: 780b ldrb r3, [r1, #0] + 800323a: 888a ldrh r2, [r1, #4] + 800323c: 790d ldrb r5, [r1, #4] + 800323e: f003 0360 and.w r3, r3, #96 @ 0x60 + 8003242: 2b20 cmp r3, #32 + 8003244: 4604 mov r4, r0 + 8003246: 460e mov r6, r1 + 8003248: d059 beq.n 80032fe + 800324a: 2b40 cmp r3, #64 @ 0x40 + 800324c: d057 beq.n 80032fe + 800324e: b11b cbz r3, 8003258 + 8003250: 4620 mov r0, r4 + 8003252: f7ff fe3d bl 8002ed0 + 8003256: e03e b.n 80032d6 + 8003258: 784b ldrb r3, [r1, #1] + 800325a: 2b01 cmp r3, #1 + 800325c: d03d beq.n 80032da + 800325e: 2b03 cmp r3, #3 + 8003260: d026 beq.n 80032b0 + 8003262: 2b00 cmp r3, #0 + 8003264: d1f4 bne.n 8003250 + 8003266: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 800326a: 2b02 cmp r3, #2 + 800326c: b2d9 uxtb r1, r3 + 800326e: d062 beq.n 8003336 + 8003270: 2903 cmp r1, #3 + 8003272: d1ed bne.n 8003250 + 8003274: f005 030f and.w r3, r5, #15 + 8003278: f012 0f80 tst.w r2, #128 @ 0x80 + 800327c: f04f 0214 mov.w r2, #20 + 8003280: fb02 0303 mla r3, r2, r3, r0 + 8003284: d067 beq.n 8003356 + 8003286: f893 3023 ldrb.w r3, [r3, #35] @ 0x23 + 800328a: 2b00 cmp r3, #0 + 800328c: d0e0 beq.n 8003250 + 800328e: f005 067f and.w r6, r5, #127 @ 0x7f + 8003292: 3601 adds r6, #1 + 8003294: eb06 0686 add.w r6, r6, r6, lsl #2 + 8003298: 2d80 cmp r5, #128 @ 0x80 + 800329a: eb00 0686 add.w r6, r0, r6, lsl #2 + 800329e: d066 beq.n 800336e + 80032a0: 4629 mov r1, r5 + 80032a2: 4620 mov r0, r4 + 80032a4: f000 fa48 bl 8003738 + 80032a8: 2800 cmp r0, #0 + 80032aa: d066 beq.n 800337a + 80032ac: 2301 movs r3, #1 + 80032ae: e05f b.n 8003370 + 80032b0: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 80032b4: 2b02 cmp r3, #2 + 80032b6: b2da uxtb r2, r3 + 80032b8: d033 beq.n 8003322 + 80032ba: 2a03 cmp r2, #3 + 80032bc: d1c8 bne.n 8003250 + 80032be: 884b ldrh r3, [r1, #2] + 80032c0: b933 cbnz r3, 80032d0 + 80032c2: 0669 lsls r1, r5, #25 + 80032c4: d004 beq.n 80032d0 + 80032c6: 88f3 ldrh r3, [r6, #6] + 80032c8: b913 cbnz r3, 80032d0 + 80032ca: 4629 mov r1, r5 + 80032cc: f000 faa1 bl 8003812 + 80032d0: 4620 mov r0, r4 + 80032d2: f000 f8a4 bl 800341e + 80032d6: 2000 movs r0, #0 + 80032d8: bd70 pop {r4, r5, r6, pc} + 80032da: f890 329c ldrb.w r3, [r0, #668] @ 0x29c + 80032de: 2b02 cmp r3, #2 + 80032e0: b2da uxtb r2, r3 + 80032e2: d01e beq.n 8003322 + 80032e4: 2a03 cmp r2, #3 + 80032e6: d1b3 bne.n 8003250 + 80032e8: 884b ldrh r3, [r1, #2] + 80032ea: 2b00 cmp r3, #0 + 80032ec: d1f3 bne.n 80032d6 + 80032ee: 066b lsls r3, r5, #25 + 80032f0: d002 beq.n 80032f8 + 80032f2: 4629 mov r1, r5 + 80032f4: f000 fa96 bl 8003824 + 80032f8: 4620 mov r0, r4 + 80032fa: f000 f890 bl 800341e + 80032fe: 4629 mov r1, r5 + 8003300: 4620 mov r0, r4 + 8003302: f7ff fdd1 bl 8002ea8 + 8003306: 2800 cmp r0, #0 + 8003308: d1e5 bne.n 80032d6 + 800330a: f8d4 32b8 ldr.w r3, [r4, #696] @ 0x2b8 + 800330e: f8c4 02d4 str.w r0, [r4, #724] @ 0x2d4 + 8003312: 689b ldr r3, [r3, #8] + 8003314: 2b00 cmp r3, #0 + 8003316: d0de beq.n 80032d6 + 8003318: 4631 mov r1, r6 + 800331a: 4620 mov r0, r4 + 800331c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8003320: 4718 bx r3 + 8003322: 066a lsls r2, r5, #25 + 8003324: d094 beq.n 8003250 + 8003326: 4629 mov r1, r5 + 8003328: f000 fa73 bl 8003812 + 800332c: 2180 movs r1, #128 @ 0x80 + 800332e: 4620 mov r0, r4 + 8003330: f000 fa6f bl 8003812 + 8003334: e7cf b.n 80032d6 + 8003336: 0669 lsls r1, r5, #25 + 8003338: d18a bne.n 8003250 + 800333a: 0613 lsls r3, r2, #24 + 800333c: bf4c ite mi + 800333e: f100 0114 addmi.w r1, r0, #20 + 8003342: f500 71aa addpl.w r1, r0, #340 @ 0x154 + 8003346: 2300 movs r3, #0 + 8003348: f801 3f0e strb.w r3, [r1, #14]! + 800334c: 2202 movs r2, #2 + 800334e: 4620 mov r0, r4 + 8003350: f000 f847 bl 80033e2 + 8003354: e7bf b.n 80032d6 + 8003356: f893 3163 ldrb.w r3, [r3, #355] @ 0x163 + 800335a: 2b00 cmp r3, #0 + 800335c: f43f af78 beq.w 8003250 + 8003360: 2614 movs r6, #20 + 8003362: fb06 0605 mla r6, r6, r5, r0 + 8003366: f506 76aa add.w r6, r6, #340 @ 0x154 + 800336a: 2d00 cmp r5, #0 + 800336c: d198 bne.n 80032a0 + 800336e: 2300 movs r3, #0 + 8003370: 73b3 strb r3, [r6, #14] + 8003372: 2202 movs r2, #2 + 8003374: f106 010e add.w r1, r6, #14 + 8003378: e7e9 b.n 800334e + 800337a: 73b0 strb r0, [r6, #14] + 800337c: e7f9 b.n 8003372 + +0800337e : + 800337e: 780b ldrb r3, [r1, #0] + 8003380: 7003 strb r3, [r0, #0] + 8003382: 784b ldrb r3, [r1, #1] + 8003384: 7043 strb r3, [r0, #1] + 8003386: 884b ldrh r3, [r1, #2] + 8003388: 8043 strh r3, [r0, #2] + 800338a: 888b ldrh r3, [r1, #4] + 800338c: 8083 strh r3, [r0, #4] + 800338e: 88cb ldrh r3, [r1, #6] + 8003390: 80c3 strh r3, [r0, #6] + 8003392: 4770 bx lr + +08003394 : + 8003394: b510 push {r4, lr} + 8003396: 2180 movs r1, #128 @ 0x80 + 8003398: 4604 mov r4, r0 + 800339a: f000 fa3a bl 8003812 + 800339e: 4620 mov r0, r4 + 80033a0: 2100 movs r1, #0 + 80033a2: e8bd 4010 ldmia.w sp!, {r4, lr} + 80033a6: f000 ba34 b.w 8003812 + +080033aa : + 80033aa: b570 push {r4, r5, r6, lr} + 80033ac: 460d mov r5, r1 + 80033ae: 4616 mov r6, r2 + 80033b0: 4604 mov r4, r0 + 80033b2: b170 cbz r0, 80033d2 + 80033b4: f7fc ff26 bl 8000204 + 80033b8: b2c3 uxtb r3, r0 + 80033ba: 3301 adds r3, #1 + 80033bc: 005b lsls r3, r3, #1 + 80033be: 8033 strh r3, [r6, #0] + 80033c0: 702b strb r3, [r5, #0] + 80033c2: 2303 movs r3, #3 + 80033c4: 706b strb r3, [r5, #1] + 80033c6: 3c01 subs r4, #1 + 80033c8: 2302 movs r3, #2 + 80033ca: 2100 movs r1, #0 + 80033cc: f814 2f01 ldrb.w r2, [r4, #1]! + 80033d0: b902 cbnz r2, 80033d4 + 80033d2: bd70 pop {r4, r5, r6, pc} + 80033d4: 54ea strb r2, [r5, r3] + 80033d6: 1c5a adds r2, r3, #1 + 80033d8: b2d2 uxtb r2, r2 + 80033da: 3302 adds r3, #2 + 80033dc: 54a9 strb r1, [r5, r2] + 80033de: b2db uxtb r3, r3 + 80033e0: e7f4 b.n 80033cc + +080033e2 : + 80033e2: b510 push {r4, lr} + 80033e4: 4613 mov r3, r2 + 80033e6: 2202 movs r2, #2 + 80033e8: f8c0 2294 str.w r2, [r0, #660] @ 0x294 + 80033ec: 6143 str r3, [r0, #20] + 80033ee: 460a mov r2, r1 + 80033f0: 6241 str r1, [r0, #36] @ 0x24 + 80033f2: 6183 str r3, [r0, #24] + 80033f4: 2100 movs r1, #0 + 80033f6: f000 fa27 bl 8003848 + 80033fa: 2000 movs r0, #0 + 80033fc: bd10 pop {r4, pc} + +080033fe : + 80033fe: b508 push {r3, lr} + 8003400: 4613 mov r3, r2 + 8003402: 460a mov r2, r1 + 8003404: 2100 movs r1, #0 + 8003406: f000 fa1f bl 8003848 + 800340a: 2000 movs r0, #0 + 800340c: bd08 pop {r3, pc} + +0800340e : + 800340e: b508 push {r3, lr} + 8003410: 4613 mov r3, r2 + 8003412: 460a mov r2, r1 + 8003414: 2100 movs r1, #0 + 8003416: f000 fa20 bl 800385a + 800341a: 2000 movs r0, #0 + 800341c: bd08 pop {r3, pc} + +0800341e : + 800341e: b508 push {r3, lr} + 8003420: 2204 movs r2, #4 + 8003422: 2300 movs r3, #0 + 8003424: f8c0 2294 str.w r2, [r0, #660] @ 0x294 + 8003428: 4619 mov r1, r3 + 800342a: 461a mov r2, r3 + 800342c: f000 fa0c bl 8003848 + 8003430: 2000 movs r0, #0 + 8003432: bd08 pop {r3, pc} + +08003434 : + 8003434: b508 push {r3, lr} + 8003436: 2205 movs r2, #5 + 8003438: 2300 movs r3, #0 + 800343a: f8c0 2294 str.w r2, [r0, #660] @ 0x294 + 800343e: 4619 mov r1, r3 + 8003440: 461a mov r2, r3 + 8003442: f000 fa0a bl 800385a + 8003446: 2000 movs r0, #0 + 8003448: bd08 pop {r3, pc} + ... + +0800344c : + 800344c: b508 push {r3, lr} + 800344e: 490c ldr r1, [pc, #48] @ (8003480 ) + 8003450: 480c ldr r0, [pc, #48] @ (8003484 ) + 8003452: 2200 movs r2, #0 + 8003454: f7ff fb99 bl 8002b8a + 8003458: b108 cbz r0, 800345e + 800345a: f7fd f959 bl 8000710 + 800345e: 490a ldr r1, [pc, #40] @ (8003488 ) + 8003460: 4808 ldr r0, [pc, #32] @ (8003484 ) + 8003462: f7ff fba5 bl 8002bb0 + 8003466: b108 cbz r0, 800346c + 8003468: f7fd f952 bl 8000710 + 800346c: 4805 ldr r0, [pc, #20] @ (8003484 ) + 800346e: f7ff fbb8 bl 8002be2 + 8003472: b118 cbz r0, 800347c + 8003474: e8bd 4008 ldmia.w sp!, {r3, lr} + 8003478: f7fd b94a b.w 8000710 + 800347c: bd08 pop {r3, pc} + 800347e: bf00 nop + 8003480: 20000100 .word 0x20000100 + 8003484: 2000014c .word 0x2000014c + 8003488: 20000088 .word 0x20000088 + +0800348c : + 800348c: 2312 movs r3, #18 + 800348e: 4801 ldr r0, [pc, #4] @ (8003494 ) + 8003490: 800b strh r3, [r1, #0] + 8003492: 4770 bx lr + 8003494: 200000ec .word 0x200000ec + +08003498 : + 8003498: 2304 movs r3, #4 + 800349a: 4801 ldr r0, [pc, #4] @ (80034a0 ) + 800349c: 800b strh r3, [r1, #0] + 800349e: 4770 bx lr + 80034a0: 200000dc .word 0x200000dc + +080034a4 : + 80034a4: 230c movs r3, #12 + 80034a6: 4801 ldr r0, [pc, #4] @ (80034ac ) + 80034a8: 800b strh r3, [r1, #0] + 80034aa: 4770 bx lr + 80034ac: 200000e0 .word 0x200000e0 + +080034b0 : + 80034b0: 2300 movs r3, #0 + 80034b2: b570 push {r4, r5, r6, lr} + 80034b4: 1c4d adds r5, r1, #1 + 80034b6: 461e mov r6, r3 + 80034b8: 0f04 lsrs r4, r0, #28 + 80034ba: f1b0 4f20 cmp.w r0, #2684354560 @ 0xa0000000 + 80034be: bf34 ite cc + 80034c0: 3430 addcc r4, #48 @ 0x30 + 80034c2: 3437 addcs r4, #55 @ 0x37 + 80034c4: f801 4013 strb.w r4, [r1, r3, lsl #1] + 80034c8: f805 6013 strb.w r6, [r5, r3, lsl #1] + 80034cc: 3301 adds r3, #1 + 80034ce: b2dc uxtb r4, r3 + 80034d0: 42a2 cmp r2, r4 + 80034d2: ea4f 1000 mov.w r0, r0, lsl #4 + 80034d6: d8ef bhi.n 80034b8 + 80034d8: bd70 pop {r4, r5, r6, pc} + ... + +080034dc : + 80034dc: 231a movs r3, #26 + 80034de: b510 push {r4, lr} + 80034e0: 800b strh r3, [r1, #0] + 80034e2: 4b0a ldr r3, [pc, #40] @ (800350c ) + 80034e4: f8d3 0a10 ldr.w r0, [r3, #2576] @ 0xa10 + 80034e8: f8d3 2a18 ldr.w r2, [r3, #2584] @ 0xa18 + 80034ec: 1880 adds r0, r0, r2 + 80034ee: d00a beq.n 8003506 + 80034f0: f8d3 4a14 ldr.w r4, [r3, #2580] @ 0xa14 + 80034f4: 4906 ldr r1, [pc, #24] @ (8003510 ) + 80034f6: 2208 movs r2, #8 + 80034f8: f7ff ffda bl 80034b0 + 80034fc: 2204 movs r2, #4 + 80034fe: 3110 adds r1, #16 + 8003500: 4620 mov r0, r4 + 8003502: f7ff ffd5 bl 80034b0 + 8003506: 4803 ldr r0, [pc, #12] @ (8003514 ) + 8003508: bd10 pop {r4, pc} + 800350a: bf00 nop + 800350c: 1fff7000 .word 0x1fff7000 + 8003510: 200000c2 .word 0x200000c2 + 8003514: 200000c0 .word 0x200000c0 + +08003518 : + 8003518: b510 push {r4, lr} + 800351a: 4c04 ldr r4, [pc, #16] @ (800352c ) + 800351c: 4804 ldr r0, [pc, #16] @ (8003530 ) + 800351e: 460a mov r2, r1 + 8003520: 4621 mov r1, r4 + 8003522: f7ff ff42 bl 80033aa + 8003526: 4620 mov r0, r4 + 8003528: bd10 pop {r4, pc} + 800352a: bf00 nop + 800352c: 20000428 .word 0x20000428 + 8003530: 080038ec .word 0x080038ec + +08003534 : + 8003534: b510 push {r4, lr} + 8003536: 4c04 ldr r4, [pc, #16] @ (8003548 ) + 8003538: 4804 ldr r0, [pc, #16] @ (800354c ) + 800353a: 460a mov r2, r1 + 800353c: 4621 mov r1, r4 + 800353e: f7ff ff34 bl 80033aa + 8003542: 4620 mov r0, r4 + 8003544: bd10 pop {r4, pc} + 8003546: bf00 nop + 8003548: 20000428 .word 0x20000428 + 800354c: 080038f6 .word 0x080038f6 + +08003550 : + 8003550: b510 push {r4, lr} + 8003552: 4c04 ldr r4, [pc, #16] @ (8003564 ) + 8003554: 4804 ldr r0, [pc, #16] @ (8003568 ) + 8003556: 460a mov r2, r1 + 8003558: 4621 mov r1, r4 + 800355a: f7ff ff26 bl 80033aa + 800355e: 4620 mov r0, r4 + 8003560: bd10 pop {r4, pc} + 8003562: bf00 nop + 8003564: 20000428 .word 0x20000428 + 8003568: 08003907 .word 0x08003907 + +0800356c : + 800356c: b510 push {r4, lr} + 800356e: 4c04 ldr r4, [pc, #16] @ (8003580 ) + 8003570: 4804 ldr r0, [pc, #16] @ (8003584 ) + 8003572: 460a mov r2, r1 + 8003574: 4621 mov r1, r4 + 8003576: f7ff ff18 bl 80033aa + 800357a: 4620 mov r0, r4 + 800357c: bd10 pop {r4, pc} + 800357e: bf00 nop + 8003580: 20000428 .word 0x20000428 + 8003584: 08003912 .word 0x08003912 + +08003588 : + 8003588: b530 push {r4, r5, lr} + 800358a: b09f sub sp, #124 @ 0x7c + 800358c: 4604 mov r4, r0 + 800358e: 2214 movs r2, #20 + 8003590: 2100 movs r1, #0 + 8003592: a802 add r0, sp, #8 + 8003594: f000 f96a bl 800386c + 8003598: 225c movs r2, #92 @ 0x5c + 800359a: 2100 movs r1, #0 + 800359c: a807 add r0, sp, #28 + 800359e: f000 f965 bl 800386c + 80035a2: 6823 ldr r3, [r4, #0] + 80035a4: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000 + 80035a8: d138 bne.n 800361c + 80035aa: f44f 7380 mov.w r3, #256 @ 0x100 + 80035ae: a807 add r0, sp, #28 + 80035b0: 9307 str r3, [sp, #28] + 80035b2: f7fe f8af bl 8001714 + 80035b6: b108 cbz r0, 80035bc + 80035b8: f7fd f8aa bl 8000710 + 80035bc: 4c18 ldr r4, [pc, #96] @ (8003620 ) + 80035be: 4819 ldr r0, [pc, #100] @ (8003624 ) + 80035c0: 2500 movs r5, #0 + 80035c2: 9500 str r5, [sp, #0] + 80035c4: 6b23 ldr r3, [r4, #48] @ 0x30 + 80035c6: f043 0301 orr.w r3, r3, #1 + 80035ca: 6323 str r3, [r4, #48] @ 0x30 + 80035cc: 6b23 ldr r3, [r4, #48] @ 0x30 + 80035ce: 9504 str r5, [sp, #16] + 80035d0: f003 0301 and.w r3, r3, #1 + 80035d4: 9300 str r3, [sp, #0] + 80035d6: f44f 52c0 mov.w r2, #6144 @ 0x1800 + 80035da: 9b00 ldr r3, [sp, #0] + 80035dc: 2302 movs r3, #2 + 80035de: e9cd 2302 strd r2, r3, [sp, #8] + 80035e2: 2103 movs r1, #3 + 80035e4: 230a movs r3, #10 + 80035e6: e9cd 1305 strd r1, r3, [sp, #20] + 80035ea: a902 add r1, sp, #8 + 80035ec: f7fd f9bc bl 8000968 + 80035f0: 6b63 ldr r3, [r4, #52] @ 0x34 + 80035f2: f043 0380 orr.w r3, r3, #128 @ 0x80 + 80035f6: 6363 str r3, [r4, #52] @ 0x34 + 80035f8: 9501 str r5, [sp, #4] + 80035fa: 6c63 ldr r3, [r4, #68] @ 0x44 + 80035fc: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 8003600: 6463 str r3, [r4, #68] @ 0x44 + 8003602: 6c63 ldr r3, [r4, #68] @ 0x44 + 8003604: f403 4380 and.w r3, r3, #16384 @ 0x4000 + 8003608: 9301 str r3, [sp, #4] + 800360a: 2043 movs r0, #67 @ 0x43 + 800360c: 462a mov r2, r5 + 800360e: 4629 mov r1, r5 + 8003610: 9b01 ldr r3, [sp, #4] + 8003612: f7fd f955 bl 80008c0 + 8003616: 2043 movs r0, #67 @ 0x43 + 8003618: f7fd f984 bl 8000924 + 800361c: b01f add sp, #124 @ 0x7c + 800361e: bd30 pop {r4, r5, pc} + 8003620: 40023800 .word 0x40023800 + 8003624: 40020000 .word 0x40020000 + +08003628 : + 8003628: f200 419c addw r1, r0, #1180 @ 0x49c + 800362c: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 8003630: f7ff bae9 b.w 8002c06 + +08003634 : + 8003634: 2324 movs r3, #36 @ 0x24 + 8003636: fb03 0301 mla r3, r3, r1, r0 + 800363a: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 800363e: f8d3 2260 ldr.w r2, [r3, #608] @ 0x260 + 8003642: f7ff bb10 b.w 8002c66 + +08003646 : + 8003646: 2324 movs r3, #36 @ 0x24 + 8003648: fb03 0301 mla r3, r3, r1, r0 + 800364c: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 8003650: 6a1a ldr r2, [r3, #32] + 8003652: f7ff bb42 b.w 8002cda + +08003656 : + 8003656: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 800365a: f7ff bbde b.w 8002e1a + +0800365e : + 800365e: b510 push {r4, lr} + 8003660: 79c1 ldrb r1, [r0, #7] + 8003662: 4604 mov r4, r0 + 8003664: b121 cbz r1, 8003670 + 8003666: 2902 cmp r1, #2 + 8003668: d001 beq.n 800366e + 800366a: f7fd f851 bl 8000710 + 800366e: 2101 movs r1, #1 + 8003670: f8d4 04e0 ldr.w r0, [r4, #1248] @ 0x4e0 + 8003674: f7ff fbb5 bl 8002de2 + 8003678: f8d4 04e0 ldr.w r0, [r4, #1248] @ 0x4e0 + 800367c: e8bd 4010 ldmia.w sp!, {r4, lr} + 8003680: f7ff bb7f b.w 8002d82 + +08003684 : + 8003684: b510 push {r4, lr} + 8003686: 4604 mov r4, r0 + 8003688: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 800368c: f7ff fbac bl 8002de8 + 8003690: 6822 ldr r2, [r4, #0] + 8003692: f8d2 3e00 ldr.w r3, [r2, #3584] @ 0xe00 + 8003696: f043 0301 orr.w r3, r3, #1 + 800369a: f8c2 3e00 str.w r3, [r2, #3584] @ 0xe00 + 800369e: 7ae3 ldrb r3, [r4, #11] + 80036a0: b123 cbz r3, 80036ac + 80036a2: 4a03 ldr r2, [pc, #12] @ (80036b0 ) + 80036a4: 6913 ldr r3, [r2, #16] + 80036a6: f043 0306 orr.w r3, r3, #6 + 80036aa: 6113 str r3, [r2, #16] + 80036ac: bd10 pop {r4, pc} + 80036ae: bf00 nop + 80036b0: e000ed00 .word 0xe000ed00 + +080036b4 : + 80036b4: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 80036b8: f7ff bba4 b.w 8002e04 + +080036bc : + 80036bc: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 80036c0: f7ff bbcb b.w 8002e5a + +080036c4 : + 80036c4: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 80036c8: f7ff bbb4 b.w 8002e34 + +080036cc : + 80036cc: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 80036d0: f7ff bbd6 b.w 8002e80 + +080036d4 : + 80036d4: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 80036d8: f7ff bbd4 b.w 8002e84 + +080036dc : + 80036dc: b508 push {r3, lr} + 80036de: 7802 ldrb r2, [r0, #0] + 80036e0: 4603 mov r3, r0 + 80036e2: bb22 cbnz r2, 800372e + 80036e4: 4813 ldr r0, [pc, #76] @ (8003734 ) + 80036e6: f8c0 34e0 str.w r3, [r0, #1248] @ 0x4e0 + 80036ea: f8c3 02c8 str.w r0, [r3, #712] @ 0x2c8 + 80036ee: f04f 43a0 mov.w r3, #1342177280 @ 0x50000000 + 80036f2: 6003 str r3, [r0, #0] + 80036f4: 2306 movs r3, #6 + 80036f6: 7103 strb r3, [r0, #4] + 80036f8: f44f 7300 mov.w r3, #512 @ 0x200 + 80036fc: 80c3 strh r3, [r0, #6] + 80036fe: 2302 movs r3, #2 + 8003700: 7243 strb r3, [r0, #9] + 8003702: 8142 strh r2, [r0, #10] + 8003704: 7302 strb r2, [r0, #12] + 8003706: 81c2 strh r2, [r0, #14] + 8003708: f7fd fa05 bl 8000b16 + 800370c: b108 cbz r0, 8003712 + 800370e: f7fc ffff bl 8000710 + 8003712: 2180 movs r1, #128 @ 0x80 + 8003714: 4807 ldr r0, [pc, #28] @ (8003734 ) + 8003716: f7fd ff46 bl 80015a6 + 800371a: 2240 movs r2, #64 @ 0x40 + 800371c: 2100 movs r1, #0 + 800371e: 4805 ldr r0, [pc, #20] @ (8003734 ) + 8003720: f7fd ff22 bl 8001568 + 8003724: 4803 ldr r0, [pc, #12] @ (8003734 ) + 8003726: 2280 movs r2, #128 @ 0x80 + 8003728: 2101 movs r1, #1 + 800372a: f7fd ff1d bl 8001568 + 800372e: 2000 movs r0, #0 + 8003730: bd08 pop {r3, pc} + 8003732: bf00 nop + 8003734: 2000063c .word 0x2000063c + +08003738 : + 8003738: f011 0f80 tst.w r1, #128 @ 0x80 + 800373c: f8d0 32c8 ldr.w r3, [r0, #712] @ 0x2c8 + 8003740: f04f 0224 mov.w r2, #36 @ 0x24 + 8003744: bf1b ittet ne + 8003746: f001 017f andne.w r1, r1, #127 @ 0x7f + 800374a: fb02 3301 mlane r3, r2, r1, r3 + 800374e: fb02 3301 mlaeq r3, r2, r1, r3 + 8003752: 7d98 ldrbne r0, [r3, #22] + 8003754: bf08 it eq + 8003756: f893 0256 ldrbeq.w r0, [r3, #598] @ 0x256 + 800375a: 4770 bx lr + +0800375c : + 800375c: b510 push {r4, lr} + 800375e: 4604 mov r4, r0 + 8003760: b111 cbz r1, 8003768 + 8003762: 2901 cmp r1, #1 + 8003764: d016 beq.n 8003794 + 8003766: bd10 pop {r4, pc} + 8003768: 7ac3 ldrb r3, [r0, #11] + 800376a: b133 cbz r3, 800377a + 800376c: f7fc fee8 bl 8000540 + 8003770: 4a12 ldr r2, [pc, #72] @ (80037bc ) + 8003772: 6913 ldr r3, [r2, #16] + 8003774: f023 0306 bic.w r3, r3, #6 + 8003778: 6113 str r3, [r2, #16] + 800377a: 6822 ldr r2, [r4, #0] + 800377c: f8d4 04e0 ldr.w r0, [r4, #1248] @ 0x4e0 + 8003780: f8d2 3e00 ldr.w r3, [r2, #3584] @ 0xe00 + 8003784: f023 0301 bic.w r3, r3, #1 + 8003788: e8bd 4010 ldmia.w sp!, {r4, lr} + 800378c: f8c2 3e00 str.w r3, [r2, #3584] @ 0xe00 + 8003790: f7ff bb38 b.w 8002e04 + 8003794: 6802 ldr r2, [r0, #0] + 8003796: f8d0 04e0 ldr.w r0, [r0, #1248] @ 0x4e0 + 800379a: f8d2 3e00 ldr.w r3, [r2, #3584] @ 0xe00 + 800379e: f043 0301 orr.w r3, r3, #1 + 80037a2: f8c2 3e00 str.w r3, [r2, #3584] @ 0xe00 + 80037a6: f7ff fb1f bl 8002de8 + 80037aa: 7ae3 ldrb r3, [r4, #11] + 80037ac: 2b00 cmp r3, #0 + 80037ae: d0da beq.n 8003766 + 80037b0: 4a02 ldr r2, [pc, #8] @ (80037bc ) + 80037b2: 6913 ldr r3, [r2, #16] + 80037b4: f043 0306 orr.w r3, r3, #6 + 80037b8: 6113 str r3, [r2, #16] + 80037ba: e7d4 b.n 8003766 + 80037bc: e000ed00 .word 0xe000ed00 + +080037c0 : + 80037c0: 4800 ldr r0, [pc, #0] @ (80037c4 ) + 80037c2: 4770 bx lr + 80037c4: 20000628 .word 0x20000628 + +080037c8 : + 80037c8: 4770 bx lr + +080037ca : + 80037ca: b118 cbz r0, 80037d4 + 80037cc: 2802 cmp r0, #2 + 80037ce: bf0c ite eq + 80037d0: 2001 moveq r0, #1 + 80037d2: 2003 movne r0, #3 + 80037d4: 4770 bx lr + +080037d6 : + 80037d6: b508 push {r3, lr} + 80037d8: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 80037dc: f7fd fa10 bl 8000c00 + 80037e0: e8bd 4008 ldmia.w sp!, {r3, lr} + 80037e4: f7ff bff1 b.w 80037ca + +080037e8 : + 80037e8: b510 push {r4, lr} + 80037ea: 4614 mov r4, r2 + 80037ec: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 80037f0: 461a mov r2, r3 + 80037f2: 4623 mov r3, r4 + 80037f4: f7fd fa36 bl 8000c64 + 80037f8: e8bd 4010 ldmia.w sp!, {r4, lr} + 80037fc: f7ff bfe5 b.w 80037ca + +08003800 : + 8003800: b508 push {r3, lr} + 8003802: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 8003806: f7fd fa66 bl 8000cd6 + 800380a: e8bd 4008 ldmia.w sp!, {r3, lr} + 800380e: f7ff bfdc b.w 80037ca + +08003812 : + 8003812: b508 push {r3, lr} + 8003814: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 8003818: f7fd fac4 bl 8000da4 + 800381c: e8bd 4008 ldmia.w sp!, {r3, lr} + 8003820: f7ff bfd3 b.w 80037ca + +08003824 : + 8003824: b508 push {r3, lr} + 8003826: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 800382a: f7fd faf2 bl 8000e12 + 800382e: e8bd 4008 ldmia.w sp!, {r3, lr} + 8003832: f7ff bfca b.w 80037ca + +08003836 : + 8003836: b508 push {r3, lr} + 8003838: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 800383c: f7fd f9ff bl 8000c3e + 8003840: e8bd 4008 ldmia.w sp!, {r3, lr} + 8003844: f7ff bfc1 b.w 80037ca + +08003848 : + 8003848: b508 push {r3, lr} + 800384a: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 800384e: f7fd fa8e bl 8000d6e + 8003852: e8bd 4008 ldmia.w sp!, {r3, lr} + 8003856: f7ff bfb8 b.w 80037ca + +0800385a : + 800385a: b508 push {r3, lr} + 800385c: f8d0 02c8 ldr.w r0, [r0, #712] @ 0x2c8 + 8003860: f7fd fa67 bl 8000d32 + 8003864: e8bd 4008 ldmia.w sp!, {r3, lr} + 8003868: f7ff bfaf b.w 80037ca + +0800386c : + 800386c: 4402 add r2, r0 + 800386e: 4603 mov r3, r0 + 8003870: 4293 cmp r3, r2 + 8003872: d100 bne.n 8003876 + 8003874: 4770 bx lr + 8003876: f803 1b01 strb.w r1, [r3], #1 + 800387a: e7f9 b.n 8003870 + +0800387c <__libc_init_array>: + 800387c: b570 push {r4, r5, r6, lr} + 800387e: 4d0d ldr r5, [pc, #52] @ (80038b4 <__libc_init_array+0x38>) + 8003880: 4c0d ldr r4, [pc, #52] @ (80038b8 <__libc_init_array+0x3c>) + 8003882: 1b64 subs r4, r4, r5 + 8003884: 10a4 asrs r4, r4, #2 + 8003886: 2600 movs r6, #0 + 8003888: 42a6 cmp r6, r4 + 800388a: d109 bne.n 80038a0 <__libc_init_array+0x24> + 800388c: 4d0b ldr r5, [pc, #44] @ (80038bc <__libc_init_array+0x40>) + 800388e: 4c0c ldr r4, [pc, #48] @ (80038c0 <__libc_init_array+0x44>) + 8003890: f000 f818 bl 80038c4 <_init> + 8003894: 1b64 subs r4, r4, r5 + 8003896: 10a4 asrs r4, r4, #2 + 8003898: 2600 movs r6, #0 + 800389a: 42a6 cmp r6, r4 + 800389c: d105 bne.n 80038aa <__libc_init_array+0x2e> + 800389e: bd70 pop {r4, r5, r6, pc} + 80038a0: f855 3b04 ldr.w r3, [r5], #4 + 80038a4: 4798 blx r3 + 80038a6: 3601 adds r6, #1 + 80038a8: e7ee b.n 8003888 <__libc_init_array+0xc> + 80038aa: f855 3b04 ldr.w r3, [r5], #4 + 80038ae: 4798 blx r3 + 80038b0: 3601 adds r6, #1 + 80038b2: e7f2 b.n 800389a <__libc_init_array+0x1e> + 80038b4: 08003928 .word 0x08003928 + 80038b8: 08003928 .word 0x08003928 + 80038bc: 08003928 .word 0x08003928 + 80038c0: 0800392c .word 0x0800392c + +080038c4 <_init>: + 80038c4: b5f8 push {r3, r4, r5, r6, r7, lr} + 80038c6: bf00 nop + 80038c8: bcf8 pop {r3, r4, r5, r6, r7} + 80038ca: bc08 pop {r3} + 80038cc: 469e mov lr, r3 + 80038ce: 4770 bx lr + +080038d0 <_fini>: + 80038d0: b5f8 push {r3, r4, r5, r6, r7, lr} + 80038d2: bf00 nop + 80038d4: bcf8 pop {r3, r4, r5, r6, r7} + 80038d6: bc08 pop {r3} + 80038d8: 469e mov lr, r3 + 80038da: 4770 bx lr diff --git a/firmware/numpad/Release/modularkbd.map b/firmware/numpad/Release/modularkbd.map new file mode 100644 index 00000000..584e68ce --- /dev/null +++ b/firmware/numpad/Release/modularkbd.map @@ -0,0 +1,2396 @@ +Archive member included to satisfy reference by file (symbol) + +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (exit) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) (__stdio_exit_handler) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (_fwalk_sglue) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (__sread) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (memset) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_close_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) (errno) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) (_impure_ptr) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_lseek_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_read_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) (_write_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + ./Core/Src/syscalls.o (__errno) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (__libc_init_array) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (__retarget_lock_init_recursive) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o (strlen) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) (_free_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (_malloc_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) (__malloc_lock) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) (_fflush_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) (_sbrk_r) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) + ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o (__aeabi_ldivmod) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o (__aeabi_uldivmod) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) (__udivmoddi4) +/home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) (__aeabi_ldiv0) + +Discarded input sections + + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .rodata 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x00000000 0x7c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.extab 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.exidx 0x00000000 0x10 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.attributes + 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .text 0x00000000 0x0 ./Core/Src/main.o + .data 0x00000000 0x0 ./Core/Src/main.o + .bss 0x00000000 0x0 ./Core/Src/main.o + .bss.huart3 0x00000000 0x48 ./Core/Src/main.o + .bss.huart2 0x00000000 0x48 ./Core/Src/main.o + .bss.huart1 0x00000000 0x48 ./Core/Src/main.o + .bss.huart5 0x00000000 0x48 ./Core/Src/main.o + .bss.huart4 0x00000000 0x48 ./Core/Src/main.o + .bss.htim3 0x00000000 0x48 ./Core/Src/main.o + .bss.htim2 0x00000000 0x48 ./Core/Src/main.o + .bss.hi2c1 0x00000000 0x54 ./Core/Src/main.o + .text 0x00000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .data 0x00000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .bss 0x00000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_I2C_MspInit + 0x00000000 0x6c ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_I2C_MspDeInit + 0x00000000 0x38 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_TIM_OC_MspInit + 0x00000000 0x2c ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_TIM_Encoder_MspInit + 0x00000000 0x64 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_TIM_MspPostInit + 0x00000000 0x50 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_TIM_OC_MspDeInit + 0x00000000 0x18 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_TIM_Encoder_MspDeInit + 0x00000000 0x28 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_UART_MspInit + 0x00000000 0x1b8 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_UART_MspDeInit + 0x00000000 0xb0 ./Core/Src/stm32f4xx_hal_msp.o + .text 0x00000000 0x0 ./Core/Src/stm32f4xx_it.o + .data 0x00000000 0x0 ./Core/Src/stm32f4xx_it.o + .bss 0x00000000 0x0 ./Core/Src/stm32f4xx_it.o + .text 0x00000000 0x0 ./Core/Src/syscalls.o + .data 0x00000000 0x0 ./Core/Src/syscalls.o + .bss 0x00000000 0x0 ./Core/Src/syscalls.o + .text.initialise_monitor_handles + 0x00000000 0x2 ./Core/Src/syscalls.o + .text._getpid 0x00000000 0x4 ./Core/Src/syscalls.o + .text._kill 0x00000000 0x10 ./Core/Src/syscalls.o + .text._exit 0x00000000 0xc ./Core/Src/syscalls.o + .text._read 0x00000000 0x1c ./Core/Src/syscalls.o + .text._write 0x00000000 0x1c ./Core/Src/syscalls.o + .text._close 0x00000000 0x6 ./Core/Src/syscalls.o + .text._fstat 0x00000000 0xa ./Core/Src/syscalls.o + .text._isatty 0x00000000 0x4 ./Core/Src/syscalls.o + .text._lseek 0x00000000 0x4 ./Core/Src/syscalls.o + .text._open 0x00000000 0xa ./Core/Src/syscalls.o + .text._wait 0x00000000 0x10 ./Core/Src/syscalls.o + .text._unlink 0x00000000 0x10 ./Core/Src/syscalls.o + .text._times 0x00000000 0x6 ./Core/Src/syscalls.o + .text._stat 0x00000000 0xa ./Core/Src/syscalls.o + .text._link 0x00000000 0x10 ./Core/Src/syscalls.o + .text._fork 0x00000000 0x10 ./Core/Src/syscalls.o + .text._execve 0x00000000 0x10 ./Core/Src/syscalls.o + .data.environ 0x00000000 0x4 ./Core/Src/syscalls.o + .bss.__env 0x00000000 0x4 ./Core/Src/syscalls.o + .comment 0x00000000 0x44 ./Core/Src/syscalls.o + .ARM.attributes + 0x00000000 0x34 ./Core/Src/syscalls.o + .text 0x00000000 0x0 ./Core/Src/sysmem.o + .data 0x00000000 0x0 ./Core/Src/sysmem.o + .bss 0x00000000 0x0 ./Core/Src/sysmem.o + .text._sbrk 0x00000000 0x40 ./Core/Src/sysmem.o + .bss.__sbrk_heap_end + 0x00000000 0x4 ./Core/Src/sysmem.o + .comment 0x00000000 0x44 ./Core/Src/sysmem.o + .ARM.attributes + 0x00000000 0x34 ./Core/Src/sysmem.o + .text 0x00000000 0x0 ./Core/Src/system_stm32f4xx.o + .data 0x00000000 0x0 ./Core/Src/system_stm32f4xx.o + .bss 0x00000000 0x0 ./Core/Src/system_stm32f4xx.o + .text.SystemCoreClockUpdate + 0x00000000 0x6c ./Core/Src/system_stm32f4xx.o + .rodata.APBPrescTable + 0x00000000 0x8 ./Core/Src/system_stm32f4xx.o + .text 0x00000000 0x14 ./Core/Startup/startup_stm32f446retx.o + .data 0x00000000 0x0 ./Core/Startup/startup_stm32f446retx.o + .bss 0x00000000 0x0 ./Core/Startup/startup_stm32f446retx.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DeInit + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetTickPrio + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_SetTickFreq + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetTickFreq + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_SuspendTick + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_ResumeTick + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetHalVersion + 0x00000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetREVID + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetDEVID + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGSleepMode + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGSleepMode + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGStopMode + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGStopMode + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGStandbyMode + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGStandbyMode + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_EnableCompensationCell + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DisableCompensationCell + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw0 + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw1 + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw2 + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_DisableIRQ + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SystemReset + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_Disable + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_Enable + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_EnableRegion + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_DisableRegion + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_ConfigRegion + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_CORTEX_ClearEvent + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPriorityGrouping + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPriority + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SetPendingIRQ + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPendingIRQ + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_ClearPendingIRQ + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetActive + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_CLKSourceConfig + 0x00000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_Callback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_IRQHandler + 0x00000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.DMA_CalcBaseAndBitshift + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Init + 0x00000000 0xfc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_DeInit + 0x00000000 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Start + 0x00000000 0x52 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Start_IT + 0x00000000 0x72 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Abort + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Abort_IT + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_PollForTransfer + 0x00000000 0x106 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_IRQHandler + 0x00000000 0x17c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_RegisterCallback + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_UnRegisterCallback + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_GetError + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .rodata.flagBitshiftOffset.0 + 0x00000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart_IT + 0x00000000 0x2f8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_ChangeMemory + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_SetConfigLine + 0x00000000 0x9c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetConfigLine + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_ClearConfigLine + 0x00000000 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_RegisterCallback + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetHandle + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_IRQHandler + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetPending + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_ClearPending + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GenerateSWI + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_DoubleWord + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_Word + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_HalfWord + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_SetErrorCode + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Program_IT + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_EndOfOperationCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OperationErrorCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_IRQHandler + 0x00000000 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Unlock + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Lock + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Unlock + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Lock + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_GetError + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_WaitForLastOperation + 0x00000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Program + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Launch + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .data.pFlash 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_MassErase.isra.0 + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBProgram + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetConfig + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_AdvOBProgram + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_AdvOBGetConfig + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OB_SelectPCROP + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OB_DeSelectPCROP + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_Erase_Sector + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase_IT + 0x00000000 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_FlushCaches + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase + 0x00000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .RamFunc 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_DeInit + 0x00000000 0x110 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_ReadPin + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_TogglePin + 0x00000000 0x12 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_LockPin + 0x00000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_EXTI_Callback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_EXTI_IRQHandler + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_IsAcknowledgeFailed + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnFlagUntilTimeout + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnMasterAddressFlagUntilTimeout + 0x00000000 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnTXEFlagUntilTimeout + 0x00000000 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_RequestMemoryWrite + 0x00000000 0xb4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_RequestMemoryRead + 0x00000000 0x104 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnBTFFlagUntilTimeout + 0x00000000 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_WaitOnRXNEFlagUntilTimeout + 0x00000000 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Init + 0x00000000 0x150 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_DeInit + 0x00000000 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit + 0x00000000 0x1b4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Receive + 0x00000000 0x2f4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit + 0x00000000 0x158 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive + 0x00000000 0x184 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_IT + 0x00000000 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_IT + 0x00000000 0xb4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_IT + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_IT + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_DMA + 0x00000000 0x140 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_DMA + 0x00000000 0x13c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_DMA + 0x00000000 0xd8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_DMA + 0x00000000 0xd8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Write + 0x00000000 0x120 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Read + 0x00000000 0x220 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_IT + 0x00000000 0xb8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_IT + 0x00000000 0xc4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_DMA + 0x00000000 0x18c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_DMA + 0x00000000 0x1d8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_IsDeviceReady + 0x00000000 0x164 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_IT + 0x00000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_DMA + 0x00000000 0x18c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_IT + 0x00000000 0x10c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_DMA + 0x00000000 0x1e0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_IT + 0x00000000 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_DMA + 0x00000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_IT + 0x00000000 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_DMA + 0x00000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_EnableListen_IT + 0x00000000 0x36 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_DisableListen_IT + 0x00000000 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MasterTxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MasterRxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_SlaveTxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_SlaveRxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_AddrCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_ListenCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MemTxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_MemoryTransmit_TXE_BTF + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_MemRxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_ErrorCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_DMAError + 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_DMAXferCplt + 0x00000000 0x114 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_AbortCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_DMAAbort + 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.I2C_ITError + 0x00000000 0x150 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_Master_Abort_IT + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_EV_IRQHandler + 0x00000000 0x8a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_ER_IRQHandler + 0x00000000 0x138 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_GetMode + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text.HAL_I2C_GetError + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .text.HAL_I2CEx_ConfigAnalogFilter + 0x00000000 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .text.HAL_I2CEx_ConfigDigitalFilter + 0x00000000 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DeInit + 0x00000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_Stop + 0x00000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_WKUP_IRQHandler + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DataOutStageCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DataInStageCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SetupStageCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SOFCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ResetCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SuspendCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ResumeCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ISOOUTIncompleteCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ISOINIncompleteCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ConnectCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DisconnectCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DevConnect + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DevDisconnect + 0x00000000 0x3a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_EP_GetRxCount + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_EP_Flush + 0x00000000 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_ActivateRemoteWakeup + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_DeActivateRemoteWakeup + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text.HAL_PCD_SetTestMode + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text.HAL_PCDEx_DeActivateLPM + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text.HAL_PCDEx_LPM_Callback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text.HAL_PCDEx_BCD_Callback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DeInit + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableBkUpAccess + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableBkUpAccess + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_ConfigPVD + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnablePVD + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisablePVD + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableWakeUpPin + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableWakeUpPin + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSLEEPMode + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSTOPMode + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSTANDBYMode + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_PVDCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_PVD_IRQHandler + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableSleepOnExit + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableSleepOnExit + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableSEVOnPend + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableSEVOnPend + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableBkUpReg + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableBkUpReg + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableFlashPowerDown + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableFlashPowerDown + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_GetVoltageRange + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_ControlVoltageScaling + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableOverDrive + 0x00000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableOverDrive + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnterUnderDriveSTOPMode + 0x00000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_DeInit + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_OscConfig + 0x00000000 0x368 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_MCOConfig + 0x00000000 0x98 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_EnableCSS + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_DisableCSS + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetSysClockFreq + 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetPCLK1Freq + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetPCLK2Freq + 0x00000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetOscConfig + 0x00000000 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetClockConfig + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_CSSCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_NMI_IRQHandler + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKConfig + 0x00000000 0xfc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKFreq + 0x00000000 0x194 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_SelectLSEMode + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLI2S + 0x00000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLI2S + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLSAI + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLSAI + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCC_DeInit + 0x00000000 0x154 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCC_GetOscConfig + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_OC1_SetConfig + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_OC3_SetConfig + 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_OC4_SetConfig + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_DeInit + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Start + 0x00000000 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Stop + 0x00000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Start_IT + 0x00000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Stop_IT + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Start_DMA + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Stop_DMA + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_DeInit + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_DeInit + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_DeInit + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_DeInit + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Start + 0x00000000 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Stop + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Start_IT + 0x00000000 0x94 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Stop_IT + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_DeInit + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Start + 0x00000000 0xb2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop + 0x00000000 0x72 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Start_IT + 0x00000000 0xda ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop_IT + 0x00000000 0x98 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Start_DMA + 0x00000000 0x1b4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop_DMA + 0x00000000 0xb6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_MultiWriteStart + 0x00000000 0xd4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_WriteStart + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_WriteStop + 0x00000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_MultiReadStart + 0x00000000 0xd4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_ReadStart + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurst_ReadStop + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_GenerateEvent + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ConfigTI1Input + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ReadCapturedValue + 0x00000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PeriodElapsedCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMAPeriodElapsedCplt + 0x00000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PeriodElapsedHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMAPeriodElapsedHalfCplt + 0x00000000 0xa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_DelayElapsedCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_CaptureCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMACaptureCplt + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_CaptureHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMACaptureHalfCplt + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_PulseFinishedCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMADelayPulseCplt + 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_PulseFinishedHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMADelayPulseHalfCplt + 0x00000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_TriggerCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IRQHandler + 0x00000000 0x128 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMATriggerCplt + 0x00000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_TriggerHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMATriggerHalfCplt + 0x00000000 0xa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ErrorCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_DMAError + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_GetActiveChannel + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_GetChannelState + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_DMABurstState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_Base_SetConfig + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Base_Init + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Init + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Init + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Init + 0x00000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_Init + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_Encoder_Init + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_OC2_SetConfig + 0x00000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_ConfigChannel + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_ConfigChannel + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_TI1_SetConfig + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_ConfigChannel + 0x00000000 0x118 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OnePulse_ConfigChannel + 0x00000000 0x104 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_ETR_SetConfig + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ConfigOCrefClear + 0x00000000 0xc6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_ConfigClockSource + 0x00000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_SlaveTimer_SetConfig.constprop.0 + 0x00000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_SlaveConfigSynchro_IT + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_SlaveConfigSynchro + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.TIM_CCxChannelCmd + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Start + 0x00000000 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Start + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Stop + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Stop + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Start_IT + 0x00000000 0xe4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Start_IT + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Stop_IT + 0x00000000 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Stop_IT + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Start_DMA + 0x00000000 0x198 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Start_DMA + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_OC_Stop_DMA + 0x00000000 0xcc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_PWM_Stop_DMA + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Start + 0x00000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Stop + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Start_IT + 0x00000000 0x104 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Stop_IT + 0x00000000 0x9c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Start_DMA + 0x00000000 0x1d8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text.HAL_TIM_IC_Stop_DMA + 0x00000000 0xa6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIM_CCxNChannelCmd + 0x00000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIM_DMAErrorCCxN + 0x00000000 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIM_DMADelayPulseNCplt + 0x00000000 0x52 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Init + 0x00000000 0xc2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_DeInit + 0x00000000 0x4e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start + 0x00000000 0xa4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop + 0x00000000 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start_IT + 0x00000000 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop_IT + 0x00000000 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start_DMA + 0x00000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop_DMA + 0x00000000 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start + 0x00000000 0xb4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop + 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start_IT + 0x00000000 0xd8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop_IT + 0x00000000 0xa2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start_DMA + 0x00000000 0x170 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop_DMA + 0x00000000 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start_IT + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop_IT + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start_DMA + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop_DMA + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Start + 0x00000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Stop + 0x00000000 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Start_IT + 0x00000000 0x7a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Stop_IT + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent_IT + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent_DMA + 0x00000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_MasterConfigSynchronization + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigBreakDeadTime + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_RemapConfig + 0x00000000 0x1a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_CommutCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIMEx_DMACommutationCplt + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_CommutHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.TIMEx_DMACommutationHalfCplt + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_BreakCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_GetState + 0x00000000 0x6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text.HAL_TIMEx_GetChannelNState + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_EndRxTransfer + 0x00000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_SetConfig + 0x00000000 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_WaitOnFlagUntilTimeout.constprop.0 + 0x00000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_MspInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Init + 0x00000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_Init + 0x00000000 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_LIN_Init + 0x00000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_Init + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_MspDeInit + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DeInit + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit + 0x00000000 0x9c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive + 0x00000000 0xae ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit_IT + 0x00000000 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit_DMA + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAPause + 0x00000000 0x82 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAResume + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAStop + 0x00000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle + 0x00000000 0xfc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_GetRxEventType + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Abort + 0x00000000 0xdc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmit + 0x00000000 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceive + 0x00000000 0x9e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_TxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATransmitCplt + 0x00000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_TxHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxHalfCplt + 0x00000000 0xa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_RxCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_RxHalfCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_ErrorCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAError + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAAbortOnError + 0x00000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Abort_IT + 0x00000000 0x104 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxAbortCallback + 0x00000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxAbortCallback + 0x00000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmitCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmit_IT + 0x00000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxOnlyAbortCallback + 0x00000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceiveCpltCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceive_IT + 0x00000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxOnlyAbortCallback + 0x00000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_RxEventCallback + 0x00000000 0x2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxHalfCplt + 0x00000000 0x1e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAReceiveCplt + 0x00000000 0x98 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Receive_IT.isra.0 + 0x00000000 0xb6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_IRQHandler + 0x00000000 0x2a0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_LIN_SendBreak + 0x00000000 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_EnterMuteMode + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_ExitMuteMode + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_EnableTransmitter + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_EnableReceiver + 0x00000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_GetState + 0x00000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_GetError + 0x00000000 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Start_Receive_IT + 0x00000000 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive_IT + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle_IT + 0x00000000 0x5a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Start_Receive_DMA + 0x00000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive_DMA + 0x00000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle_DMA + 0x00000000 0x56 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .comment 0x00000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .ARM.attributes + 0x00000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .data 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .bss 0x00000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ActivateDedicatedEndpoint + 0x00000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DeactivateDedicatedEndpoint + 0x00000000 0x86 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_StopDevice + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ReadChInterrupts + 0x00000000 0x12 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ClearInterrupts + 0x00000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HostInit + 0x00000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_InitFSLSPClkSel + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ResetPort + 0x00000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DriveVbus + 0x00000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_GetHostSpeed + 0x00000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_GetCurrentFrame + 0x00000000 0xa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_Init + 0x00000000 0x110 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_ReadInterrupt + 0x00000000 0xa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_Halt + 0x00000000 0xd2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DoPing + 0x00000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_HC_StartXfer + 0x00000000 0x260 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_StopHost + 0x00000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_ActivateRemoteWakeup + 0x00000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_DeActivateRemoteWakeup + 0x00000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetPollingInterval + 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text.USBD_DeInit + 0x00000000 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text.USBD_Stop + 0x00000000 0x1a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text.USBD_RunTestMode + 0x00000000 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text.USBD_GetNextDesc + 0x00000000 0xc ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .text 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .data 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .bss 0x00000000 0x0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .text.USBD_CtlPrepareRx + 0x00000000 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .text.USBD_GetRxCount + 0x00000000 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .text 0x00000000 0x0 ./USB_DEVICE/App/usb_device.o + .data 0x00000000 0x0 ./USB_DEVICE/App/usb_device.o + .bss 0x00000000 0x0 ./USB_DEVICE/App/usb_device.o + .text 0x00000000 0x0 ./USB_DEVICE/App/usbd_desc.o + .data 0x00000000 0x0 ./USB_DEVICE/App/usbd_desc.o + .bss 0x00000000 0x0 ./USB_DEVICE/App/usbd_desc.o + .text 0x00000000 0x0 ./USB_DEVICE/Target/usbd_conf.o + .data 0x00000000 0x0 ./USB_DEVICE/Target/usbd_conf.o + .bss 0x00000000 0x0 ./USB_DEVICE/Target/usbd_conf.o + .text.HAL_PCD_MspDeInit + 0x00000000 0x34 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_GetRxDataSize + 0x00000000 0x8 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_Delay + 0x00000000 0x4 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_DeInit + 0x00000000 0x12 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_Stop + 0x00000000 0x12 ./USB_DEVICE/Target/usbd_conf.o + .text.USBD_LL_FlushEP + 0x00000000 0x12 ./USB_DEVICE/Target/usbd_conf.o + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .text.exit 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .debug_frame 0x00000000 0x28 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-exit.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.std 0x00000000 0x6c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.stdio_exit_handler + 0x00000000 0x18 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.cleanup_stdio + 0x00000000 0x40 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock + 0x00000000 0x18 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock + 0x00000000 0x18 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.global_stdio_init.part.0 + 0x00000000 0x3c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_acquire + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_release + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp 0x00000000 0xa4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sinit 0x00000000 0x30 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock_all + 0x00000000 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock_all + 0x00000000 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .data.__sglue 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .bss.__sf 0x00000000 0x138 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .bss.__stdio_exit_handler + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .debug_frame 0x00000000 0x144 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-findfp.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .text._fwalk_sglue + 0x00000000 0x3c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_frame 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fwalk.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sread 0x00000000 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__seofread + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__swrite + 0x00000000 0x38 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sseek 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sclose + 0x00000000 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .debug_frame 0x00000000 0x88 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-stdio.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .text._close_r + 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-closer.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .text._reclaim_reent + 0x00000000 0xbc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .bss.errno 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .debug_frame 0x00000000 0x38 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-reent.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .data._impure_ptr + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .data._impure_data + 0x00000000 0x4c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-impure.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .text._lseek_r + 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lseekr.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .text._read_r 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-readr.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .text._write_r + 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-writer.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .text.__errno 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .debug_frame 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-errno.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release_recursive + 0x00000000 0x2 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___arc4random_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___dd_hash_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___tz_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___env_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___malloc_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___at_quick_exit_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___atexit_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___sfp_recursive_mutex + 0x00000000 0x1 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .debug_frame 0x00000000 0xb0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-lock.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + .ARM.extab 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + .eh_frame 0x00000000 0x28 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .text._free_r 0x00000000 0x94 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .debug_frame 0x00000000 0x38 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-freer.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .text.sbrk_aligned + 0x00000000 0x44 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .text._malloc_r + 0x00000000 0x100 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_sbrk_start + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_free_list + 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x00000000 0x50 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mallocr.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .text.__malloc_lock + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .text.__malloc_unlock + 0x00000000 0xc /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .debug_frame 0x00000000 0x30 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-mlock.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text.__sflush_r + 0x00000000 0x108 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text._fflush_r + 0x00000000 0x50 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text.fflush 0x00000000 0x28 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .debug_frame 0x00000000 0x5c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-fflush.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .text._sbrk_r 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x00000000 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-sbrkr.o) + .text 0x00000000 0xa0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) + .debug_frame 0x00000000 0x44 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) + .ARM.attributes + 0x00000000 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_ldivmod.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .ARM.extab 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .rodata 0x00000000 0x24 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .eh_frame 0x00000000 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .ARM.attributes + 0x00000000 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o + .text 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + .data 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + .bss 0x00000000 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + +Memory Configuration + +Name Origin Length Attributes +RAM 0x20000000 0x00020000 xrw +FLASH 0x08000000 0x00080000 xr +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o +LOAD ./Core/Src/main.o +LOAD ./Core/Src/stm32f4xx_hal_msp.o +LOAD ./Core/Src/stm32f4xx_it.o +LOAD ./Core/Src/syscalls.o +LOAD ./Core/Src/sysmem.o +LOAD ./Core/Src/system_stm32f4xx.o +LOAD ./Core/Startup/startup_stm32f446retx.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o +LOAD ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o +LOAD ./USB_DEVICE/App/usb_device.o +LOAD ./USB_DEVICE/App/usbd_desc.o +LOAD ./USB_DEVICE/Target/usbd_conf.o +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libm.a +END GROUP +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +END GROUP +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libnosys.a +END GROUP +START GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libnosys.a +END GROUP +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtend.o +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x20020000 _estack = (ORIGIN (RAM) + LENGTH (RAM)) + 0x00000200 _Min_Heap_Size = 0x200 + 0x00000400 _Min_Stack_Size = 0x400 + +.isr_vector 0x08000000 0x1c4 + 0x08000000 . = ALIGN (0x4) + *(.isr_vector) + .isr_vector 0x08000000 0x1c4 ./Core/Startup/startup_stm32f446retx.o + 0x08000000 g_pfnVectors + 0x080001c4 . = ALIGN (0x4) + +.text 0x080001c4 0x3718 + 0x080001c4 . = ALIGN (0x4) + *(.text) + .text 0x080001c4 0x40 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x08000204 0x10 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + 0x08000204 strlen + .text 0x08000214 0x30 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + 0x08000214 __aeabi_uldivmod + .text 0x08000244 0x2f8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + 0x08000244 __udivmoddi4 + .text 0x0800053c 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + 0x0800053c __aeabi_ldiv0 + 0x0800053c __aeabi_idiv0 + *(.text*) + .text.SystemClock_Config + 0x08000540 0xa4 ./Core/Src/main.o + 0x08000540 SystemClock_Config + .text.startup.main + 0x080005e4 0x12c ./Core/Src/main.o + 0x080005e4 main + .text.Error_Handler + 0x08000710 0x4 ./Core/Src/main.o + 0x08000710 Error_Handler + .text.HAL_MspInit + 0x08000714 0x38 ./Core/Src/stm32f4xx_hal_msp.o + 0x08000714 HAL_MspInit + .text.NMI_Handler + 0x0800074c 0x2 ./Core/Src/stm32f4xx_it.o + 0x0800074c NMI_Handler + .text.HardFault_Handler + 0x0800074e 0x2 ./Core/Src/stm32f4xx_it.o + 0x0800074e HardFault_Handler + .text.MemManage_Handler + 0x08000750 0x2 ./Core/Src/stm32f4xx_it.o + 0x08000750 MemManage_Handler + .text.BusFault_Handler + 0x08000752 0x2 ./Core/Src/stm32f4xx_it.o + 0x08000752 BusFault_Handler + .text.UsageFault_Handler + 0x08000754 0x2 ./Core/Src/stm32f4xx_it.o + 0x08000754 UsageFault_Handler + .text.SVC_Handler + 0x08000756 0x2 ./Core/Src/stm32f4xx_it.o + 0x08000756 SVC_Handler + .text.DebugMon_Handler + 0x08000758 0x2 ./Core/Src/stm32f4xx_it.o + 0x08000758 DebugMon_Handler + .text.PendSV_Handler + 0x0800075a 0x2 ./Core/Src/stm32f4xx_it.o + 0x0800075a PendSV_Handler + .text.SysTick_Handler + 0x0800075c 0x4 ./Core/Src/stm32f4xx_it.o + 0x0800075c SysTick_Handler + .text.OTG_FS_IRQHandler + 0x08000760 0xc ./Core/Src/stm32f4xx_it.o + 0x08000760 OTG_FS_IRQHandler + .text.SystemInit + 0x0800076c 0x14 ./Core/Src/system_stm32f4xx.o + 0x0800076c SystemInit + .text.Reset_Handler + 0x08000780 0x50 ./Core/Startup/startup_stm32f446retx.o + 0x08000780 Reset_Handler + .text.Default_Handler + 0x080007d0 0x2 ./Core/Startup/startup_stm32f446retx.o + 0x080007d0 RTC_Alarm_IRQHandler + 0x080007d0 EXTI2_IRQHandler + 0x080007d0 TIM8_CC_IRQHandler + 0x080007d0 FMPI2C1_EV_IRQHandler + 0x080007d0 SPI4_IRQHandler + 0x080007d0 TIM1_CC_IRQHandler + 0x080007d0 DMA2_Stream5_IRQHandler + 0x080007d0 DMA1_Stream5_IRQHandler + 0x080007d0 PVD_IRQHandler + 0x080007d0 SDIO_IRQHandler + 0x080007d0 TAMP_STAMP_IRQHandler + 0x080007d0 CAN2_RX1_IRQHandler + 0x080007d0 EXTI3_IRQHandler + 0x080007d0 TIM8_TRG_COM_TIM14_IRQHandler + 0x080007d0 TIM1_UP_TIM10_IRQHandler + 0x080007d0 TIM8_UP_TIM13_IRQHandler + 0x080007d0 I2C3_ER_IRQHandler + 0x080007d0 EXTI0_IRQHandler + 0x080007d0 I2C2_EV_IRQHandler + 0x080007d0 DMA1_Stream2_IRQHandler + 0x080007d0 CAN1_RX0_IRQHandler + 0x080007d0 FPU_IRQHandler + 0x080007d0 OTG_HS_WKUP_IRQHandler + 0x080007d0 CAN2_SCE_IRQHandler + 0x080007d0 DMA2_Stream2_IRQHandler + 0x080007d0 SPI1_IRQHandler + 0x080007d0 TIM6_DAC_IRQHandler + 0x080007d0 TIM1_BRK_TIM9_IRQHandler + 0x080007d0 DCMI_IRQHandler + 0x080007d0 CAN2_RX0_IRQHandler + 0x080007d0 DMA2_Stream3_IRQHandler + 0x080007d0 SAI2_IRQHandler + 0x080007d0 USART6_IRQHandler + 0x080007d0 USART3_IRQHandler + 0x080007d0 CAN1_RX1_IRQHandler + 0x080007d0 UART5_IRQHandler + 0x080007d0 DMA2_Stream0_IRQHandler + 0x080007d0 TIM4_IRQHandler + 0x080007d0 QUADSPI_IRQHandler + 0x080007d0 I2C1_EV_IRQHandler + 0x080007d0 DMA1_Stream6_IRQHandler + 0x080007d0 DMA1_Stream1_IRQHandler + 0x080007d0 UART4_IRQHandler + 0x080007d0 TIM3_IRQHandler + 0x080007d0 RCC_IRQHandler + 0x080007d0 TIM8_BRK_TIM12_IRQHandler + 0x080007d0 Default_Handler + 0x080007d0 CEC_IRQHandler + 0x080007d0 EXTI15_10_IRQHandler + 0x080007d0 ADC_IRQHandler + 0x080007d0 DMA1_Stream7_IRQHandler + 0x080007d0 TIM7_IRQHandler + 0x080007d0 CAN2_TX_IRQHandler + 0x080007d0 TIM5_IRQHandler + 0x080007d0 DMA2_Stream7_IRQHandler + 0x080007d0 I2C3_EV_IRQHandler + 0x080007d0 EXTI9_5_IRQHandler + 0x080007d0 RTC_WKUP_IRQHandler + 0x080007d0 SPDIF_RX_IRQHandler + 0x080007d0 SPI2_IRQHandler + 0x080007d0 OTG_HS_EP1_IN_IRQHandler + 0x080007d0 DMA1_Stream0_IRQHandler + 0x080007d0 CAN1_TX_IRQHandler + 0x080007d0 FMPI2C1_ER_IRQHandler + 0x080007d0 EXTI4_IRQHandler + 0x080007d0 OTG_HS_EP1_OUT_IRQHandler + 0x080007d0 WWDG_IRQHandler + 0x080007d0 TIM2_IRQHandler + 0x080007d0 OTG_FS_WKUP_IRQHandler + 0x080007d0 TIM1_TRG_COM_TIM11_IRQHandler + 0x080007d0 OTG_HS_IRQHandler + 0x080007d0 EXTI1_IRQHandler + 0x080007d0 USART2_IRQHandler + 0x080007d0 I2C2_ER_IRQHandler + 0x080007d0 DMA2_Stream1_IRQHandler + 0x080007d0 CAN1_SCE_IRQHandler + 0x080007d0 FLASH_IRQHandler + 0x080007d0 DMA2_Stream4_IRQHandler + 0x080007d0 USART1_IRQHandler + 0x080007d0 SPI3_IRQHandler + 0x080007d0 DMA1_Stream4_IRQHandler + 0x080007d0 I2C1_ER_IRQHandler + 0x080007d0 FMC_IRQHandler + 0x080007d0 DMA2_Stream6_IRQHandler + 0x080007d0 SAI1_IRQHandler + 0x080007d0 DMA1_Stream3_IRQHandler + *fill* 0x080007d2 0x2 + .text.HAL_InitTick + 0x080007d4 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x080007d4 HAL_InitTick + .text.HAL_Init + 0x0800081c 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x0800081c HAL_Init + .text.HAL_IncTick + 0x08000850 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08000850 HAL_IncTick + .text.HAL_GetTick + 0x08000868 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08000868 HAL_GetTick + .text.HAL_Delay + 0x08000874 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x08000874 HAL_Delay + .text.HAL_NVIC_SetPriorityGrouping + 0x0800089c 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x0800089c HAL_NVIC_SetPriorityGrouping + .text.HAL_NVIC_SetPriority + 0x080008c0 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x080008c0 HAL_NVIC_SetPriority + .text.HAL_NVIC_EnableIRQ + 0x08000924 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x08000924 HAL_NVIC_EnableIRQ + .text.HAL_SYSTICK_Config + 0x08000940 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x08000940 HAL_SYSTICK_Config + .text.HAL_GPIO_Init + 0x08000968 0x1a4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x08000968 HAL_GPIO_Init + .text.HAL_GPIO_WritePin + 0x08000b0c 0xa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x08000b0c HAL_GPIO_WritePin + .text.HAL_PCD_Init + 0x08000b16 0xea ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000b16 HAL_PCD_Init + .text.HAL_PCD_Start + 0x08000c00 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000c00 HAL_PCD_Start + .text.HAL_PCD_SetAddress + 0x08000c3e 0x26 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000c3e HAL_PCD_SetAddress + .text.HAL_PCD_EP_Open + 0x08000c64 0x72 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000c64 HAL_PCD_EP_Open + .text.HAL_PCD_EP_Close + 0x08000cd6 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000cd6 HAL_PCD_EP_Close + .text.HAL_PCD_EP_Receive + 0x08000d32 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000d32 HAL_PCD_EP_Receive + .text.HAL_PCD_EP_Transmit + 0x08000d6e 0x36 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000d6e HAL_PCD_EP_Transmit + .text.HAL_PCD_EP_SetStall + 0x08000da4 0x6e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000da4 HAL_PCD_EP_SetStall + .text.HAL_PCD_EP_ClrStall + 0x08000e12 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000e12 HAL_PCD_EP_ClrStall + .text.HAL_PCD_EP_Abort + 0x08000e7c 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000e7c HAL_PCD_EP_Abort + .text.HAL_PCD_IRQHandler + 0x08000e9c 0x6cc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + 0x08000e9c HAL_PCD_IRQHandler + .text.HAL_PCDEx_SetTxFiFo + 0x08001568 0x3e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + 0x08001568 HAL_PCDEx_SetTxFiFo + .text.HAL_PCDEx_SetRxFiFo + 0x080015a6 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + 0x080015a6 HAL_PCDEx_SetRxFiFo + .text.HAL_PCDEx_ActivateLPM + 0x080015ae 0x26 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + 0x080015ae HAL_PCDEx_ActivateLPM + .text.HAL_RCC_ClockConfig + 0x080015d4 0x134 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x080015d4 HAL_RCC_ClockConfig + .text.HAL_RCC_GetHCLKFreq + 0x08001708 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x08001708 HAL_RCC_GetHCLKFreq + .text.HAL_RCCEx_PeriphCLKConfig + 0x08001714 0x414 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + 0x08001714 HAL_RCCEx_PeriphCLKConfig + .text.HAL_RCC_GetSysClockFreq + 0x08001b28 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + 0x08001b28 HAL_RCC_GetSysClockFreq + .text.HAL_RCC_OscConfig + 0x08001bb8 0x39c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + 0x08001bb8 HAL_RCC_OscConfig + .text.USB_CoreReset + 0x08001f54 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .text.USB_CoreInit + 0x08001fa4 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08001fa4 USB_CoreInit + .text.USB_SetTurnaroundTime + 0x0800202c 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800202c USB_SetTurnaroundTime + .text.USB_EnableGlobalInt + 0x0800210c 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800210c USB_EnableGlobalInt + .text.USB_DisableGlobalInt + 0x08002118 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002118 USB_DisableGlobalInt + .text.USB_SetCurrentMode + 0x08002124 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002124 USB_SetCurrentMode + .text.USB_FlushTxFifo + 0x08002184 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002184 USB_FlushTxFifo + .text.USB_FlushRxFifo + 0x080021ca 0x42 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080021ca USB_FlushRxFifo + .text.USB_SetDevSpeed + 0x0800220c 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800220c USB_SetDevSpeed + *fill* 0x0800221a 0x2 + .text.USB_DevInit + 0x0800221c 0x170 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800221c USB_DevInit + .text.USB_GetDevSpeed + 0x0800238c 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800238c USB_GetDevSpeed + .text.USB_ActivateEndpoint + 0x080023a2 0x7e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080023a2 USB_ActivateEndpoint + .text.USB_DeactivateEndpoint + 0x08002420 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002420 USB_DeactivateEndpoint + .text.USB_EPStopXfer + 0x080024cc 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080024cc USB_EPStopXfer + .text.USB_WritePacket + 0x08002550 0x26 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002550 USB_WritePacket + *fill* 0x08002576 0x2 + .text.USB_EPStartXfer + 0x08002578 0x204 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002578 USB_EPStartXfer + .text.USB_ReadPacket + 0x0800277c 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800277c USB_ReadPacket + .text.USB_EPSetStall + 0x080027bc 0x56 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080027bc USB_EPSetStall + .text.USB_EPClearStall + 0x08002812 0x52 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002812 USB_EPClearStall + .text.USB_SetDevAddress + 0x08002864 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002864 USB_SetDevAddress + .text.USB_DevConnect + 0x08002884 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002884 USB_DevConnect + .text.USB_DevDisconnect + 0x080028a0 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080028a0 USB_DevDisconnect + .text.USB_ReadInterrupts + 0x080028bc 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080028bc USB_ReadInterrupts + .text.USB_ReadDevAllOutEpInterrupt + 0x080028c4 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080028c4 USB_ReadDevAllOutEpInterrupt + .text.USB_ReadDevAllInEpInterrupt + 0x080028d4 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080028d4 USB_ReadDevAllInEpInterrupt + .text.USB_ReadDevOutEPInterrupt + 0x080028e4 0x12 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080028e4 USB_ReadDevOutEPInterrupt + .text.USB_ReadDevInEPInterrupt + 0x080028f6 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x080028f6 USB_ReadDevInEPInterrupt + .text.USB_GetMode + 0x08002918 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002918 USB_GetMode + .text.USB_ActivateSetup + 0x08002920 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x08002920 USB_ActivateSetup + .text.USB_EP0_OutStart + 0x0800293c 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + 0x0800293c USB_EP0_OutStart + .text.USBD_HID_DataIn + 0x08002988 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetDeviceQualifierDesc + 0x08002998 0xc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetFSCfgDesc + 0x080029a4 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetOtherSpeedCfgDesc + 0x080029c4 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_GetHSCfgDesc + 0x080029c8 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_Setup + 0x080029e8 0xfc ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_DeInit + 0x08002ae4 0x30 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_Init + 0x08002b14 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .text.USBD_HID_SendReport + 0x08002b58 0x32 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + 0x08002b58 USBD_HID_SendReport + .text.USBD_Init + 0x08002b8a 0x26 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002b8a USBD_Init + .text.USBD_RegisterClass + 0x08002bb0 0x32 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002bb0 USBD_RegisterClass + .text.USBD_Start + 0x08002be2 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002be2 USBD_Start + .text.USBD_SetClassConfig + 0x08002be6 0xe ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002be6 USBD_SetClassConfig + .text.USBD_ClrClassConfig + 0x08002bf4 0x12 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002bf4 USBD_ClrClassConfig + .text.USBD_LL_SetupStage + 0x08002c06 0x60 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002c06 USBD_LL_SetupStage + .text.USBD_LL_DataOutStage + 0x08002c66 0x74 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002c66 USBD_LL_DataOutStage + .text.USBD_LL_DataInStage + 0x08002cda 0xa8 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002cda USBD_LL_DataInStage + .text.USBD_LL_Reset + 0x08002d82 0x60 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002d82 USBD_LL_Reset + .text.USBD_LL_SetSpeed + 0x08002de2 0x6 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002de2 USBD_LL_SetSpeed + .text.USBD_LL_Suspend + 0x08002de8 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002de8 USBD_LL_Suspend + .text.USBD_LL_Resume + 0x08002e04 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002e04 USBD_LL_Resume + .text.USBD_LL_SOF + 0x08002e1a 0x1a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002e1a USBD_LL_SOF + .text.USBD_LL_IsoINIncomplete + 0x08002e34 0x26 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002e34 USBD_LL_IsoINIncomplete + .text.USBD_LL_IsoOUTIncomplete + 0x08002e5a 0x26 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002e5a USBD_LL_IsoOUTIncomplete + .text.USBD_LL_DevConnected + 0x08002e80 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002e80 USBD_LL_DevConnected + .text.USBD_LL_DevDisconnected + 0x08002e84 0x20 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002e84 USBD_LL_DevDisconnected + .text.USBD_CoreFindIF + 0x08002ea4 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002ea4 USBD_CoreFindIF + .text.USBD_CoreFindEP + 0x08002ea8 0x4 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002ea8 USBD_CoreFindEP + .text.USBD_GetEpDesc + 0x08002eac 0x24 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + 0x08002eac USBD_GetEpDesc + .text.USBD_CtlError.constprop.0 + 0x08002ed0 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + *fill* 0x08002ee6 0x2 + .text.USBD_StdDevReq + 0x08002ee8 0x2f0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x08002ee8 USBD_StdDevReq + .text.USBD_StdItfReq + 0x080031d8 0x5e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x080031d8 USBD_StdItfReq + .text.USBD_StdEPReq + 0x08003236 0x148 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x08003236 USBD_StdEPReq + .text.USBD_ParseSetupRequest + 0x0800337e 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x0800337e USBD_ParseSetupRequest + .text.USBD_CtlError + 0x08003394 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x08003394 USBD_CtlError + .text.USBD_GetString + 0x080033aa 0x38 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + 0x080033aa USBD_GetString + .text.USBD_CtlSendData + 0x080033e2 0x1c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x080033e2 USBD_CtlSendData + .text.USBD_CtlContinueSendData + 0x080033fe 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x080033fe USBD_CtlContinueSendData + .text.USBD_CtlContinueRx + 0x0800340e 0x10 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800340e USBD_CtlContinueRx + .text.USBD_CtlSendStatus + 0x0800341e 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x0800341e USBD_CtlSendStatus + .text.USBD_CtlReceiveStatus + 0x08003434 0x16 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + 0x08003434 USBD_CtlReceiveStatus + *fill* 0x0800344a 0x2 + .text.MX_USB_DEVICE_Init + 0x0800344c 0x40 ./USB_DEVICE/App/usb_device.o + 0x0800344c MX_USB_DEVICE_Init + .text.USBD_FS_DeviceDescriptor + 0x0800348c 0xc ./USB_DEVICE/App/usbd_desc.o + 0x0800348c USBD_FS_DeviceDescriptor + .text.USBD_FS_LangIDStrDescriptor + 0x08003498 0xc ./USB_DEVICE/App/usbd_desc.o + 0x08003498 USBD_FS_LangIDStrDescriptor + .text.USBD_FS_USR_BOSDescriptor + 0x080034a4 0xc ./USB_DEVICE/App/usbd_desc.o + 0x080034a4 USBD_FS_USR_BOSDescriptor + .text.IntToUnicode + 0x080034b0 0x2a ./USB_DEVICE/App/usbd_desc.o + *fill* 0x080034da 0x2 + .text.USBD_FS_SerialStrDescriptor + 0x080034dc 0x3c ./USB_DEVICE/App/usbd_desc.o + 0x080034dc USBD_FS_SerialStrDescriptor + .text.USBD_FS_ManufacturerStrDescriptor + 0x08003518 0x1c ./USB_DEVICE/App/usbd_desc.o + 0x08003518 USBD_FS_ManufacturerStrDescriptor + .text.USBD_FS_ProductStrDescriptor + 0x08003534 0x1c ./USB_DEVICE/App/usbd_desc.o + 0x08003534 USBD_FS_ProductStrDescriptor + .text.USBD_FS_ConfigStrDescriptor + 0x08003550 0x1c ./USB_DEVICE/App/usbd_desc.o + 0x08003550 USBD_FS_ConfigStrDescriptor + .text.USBD_FS_InterfaceStrDescriptor + 0x0800356c 0x1c ./USB_DEVICE/App/usbd_desc.o + 0x0800356c USBD_FS_InterfaceStrDescriptor + .text.HAL_PCD_MspInit + 0x08003588 0xa0 ./USB_DEVICE/Target/usbd_conf.o + 0x08003588 HAL_PCD_MspInit + .text.HAL_PCD_SetupStageCallback + 0x08003628 0xc ./USB_DEVICE/Target/usbd_conf.o + 0x08003628 HAL_PCD_SetupStageCallback + .text.HAL_PCD_DataOutStageCallback + 0x08003634 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x08003634 HAL_PCD_DataOutStageCallback + .text.HAL_PCD_DataInStageCallback + 0x08003646 0x10 ./USB_DEVICE/Target/usbd_conf.o + 0x08003646 HAL_PCD_DataInStageCallback + .text.HAL_PCD_SOFCallback + 0x08003656 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x08003656 HAL_PCD_SOFCallback + .text.HAL_PCD_ResetCallback + 0x0800365e 0x26 ./USB_DEVICE/Target/usbd_conf.o + 0x0800365e HAL_PCD_ResetCallback + .text.HAL_PCD_SuspendCallback + 0x08003684 0x30 ./USB_DEVICE/Target/usbd_conf.o + 0x08003684 HAL_PCD_SuspendCallback + .text.HAL_PCD_ResumeCallback + 0x080036b4 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x080036b4 HAL_PCD_ResumeCallback + .text.HAL_PCD_ISOOUTIncompleteCallback + 0x080036bc 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x080036bc HAL_PCD_ISOOUTIncompleteCallback + .text.HAL_PCD_ISOINIncompleteCallback + 0x080036c4 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x080036c4 HAL_PCD_ISOINIncompleteCallback + .text.HAL_PCD_ConnectCallback + 0x080036cc 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x080036cc HAL_PCD_ConnectCallback + .text.HAL_PCD_DisconnectCallback + 0x080036d4 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x080036d4 HAL_PCD_DisconnectCallback + .text.USBD_LL_Init + 0x080036dc 0x5c ./USB_DEVICE/Target/usbd_conf.o + 0x080036dc USBD_LL_Init + .text.USBD_LL_IsStallEP + 0x08003738 0x24 ./USB_DEVICE/Target/usbd_conf.o + 0x08003738 USBD_LL_IsStallEP + .text.HAL_PCDEx_LPM_Callback + 0x0800375c 0x64 ./USB_DEVICE/Target/usbd_conf.o + 0x0800375c HAL_PCDEx_LPM_Callback + .text.USBD_static_malloc + 0x080037c0 0x8 ./USB_DEVICE/Target/usbd_conf.o + 0x080037c0 USBD_static_malloc + .text.USBD_static_free + 0x080037c8 0x2 ./USB_DEVICE/Target/usbd_conf.o + 0x080037c8 USBD_static_free + .text.USBD_Get_USB_Status + 0x080037ca 0xc ./USB_DEVICE/Target/usbd_conf.o + 0x080037ca USBD_Get_USB_Status + .text.USBD_LL_Start + 0x080037d6 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x080037d6 USBD_LL_Start + .text.USBD_LL_OpenEP + 0x080037e8 0x18 ./USB_DEVICE/Target/usbd_conf.o + 0x080037e8 USBD_LL_OpenEP + .text.USBD_LL_CloseEP + 0x08003800 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x08003800 USBD_LL_CloseEP + .text.USBD_LL_StallEP + 0x08003812 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x08003812 USBD_LL_StallEP + .text.USBD_LL_ClearStallEP + 0x08003824 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x08003824 USBD_LL_ClearStallEP + .text.USBD_LL_SetUSBAddress + 0x08003836 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x08003836 USBD_LL_SetUSBAddress + .text.USBD_LL_Transmit + 0x08003848 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x08003848 USBD_LL_Transmit + .text.USBD_LL_PrepareReceive + 0x0800385a 0x12 ./USB_DEVICE/Target/usbd_conf.o + 0x0800385a USBD_LL_PrepareReceive + .text.memset 0x0800386c 0x10 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + 0x0800386c memset + .text.__libc_init_array + 0x0800387c 0x48 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + 0x0800387c __libc_init_array + *(.glue_7) + .glue_7 0x080038c4 0x0 linker stubs + *(.glue_7t) + .glue_7t 0x080038c4 0x0 linker stubs + *(.eh_frame) + .eh_frame 0x080038c4 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.init) + .init 0x080038c4 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + 0x080038c4 _init + .init 0x080038c8 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + *(.fini) + .fini 0x080038d0 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + 0x080038d0 _fini + .fini 0x080038d4 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x080038dc . = ALIGN (0x4) + 0x080038dc _etext = . + +.vfp11_veneer 0x080038dc 0x0 + .vfp11_veneer 0x080038dc 0x0 linker stubs + +.v4_bx 0x080038dc 0x0 + .v4_bx 0x080038dc 0x0 linker stubs + +.iplt 0x080038dc 0x0 + .iplt 0x080038dc 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.rodata 0x080038dc 0x44 + 0x080038dc . = ALIGN (0x4) + *(.rodata) + *(.rodata*) + .rodata.AHBPrescTable + 0x080038dc 0x10 ./Core/Src/system_stm32f4xx.o + 0x080038dc AHBPrescTable + .rodata.USBD_FS_ManufacturerStrDescriptor.str1.1 + 0x080038ec 0x34 ./USB_DEVICE/App/usbd_desc.o + 0xa (size before relaxing) + .rodata.USBD_FS_ProductStrDescriptor.str1.1 + 0x08003920 0x11 ./USB_DEVICE/App/usbd_desc.o + .rodata.USBD_FS_ConfigStrDescriptor.str1.1 + 0x08003920 0xb ./USB_DEVICE/App/usbd_desc.o + .rodata.USBD_FS_InterfaceStrDescriptor.str1.1 + 0x08003920 0xe ./USB_DEVICE/App/usbd_desc.o + 0x08003934 . = ALIGN (0x4) + +.ARM.extab 0x08003920 0x0 + 0x08003920 . = ALIGN (0x4) + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x08003920 . = ALIGN (0x4) + +.ARM 0x08003920 0x8 + 0x08003920 . = ALIGN (0x4) + 0x08003920 __exidx_start = . + *(.ARM.exidx*) + .ARM.exidx 0x08003920 0x8 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + .ARM.exidx 0x08003928 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + 0x8 (size before relaxing) + 0x08003928 __exidx_end = . + 0x08003928 . = ALIGN (0x4) + +.preinit_array 0x08003928 0x0 + 0x08003928 . = ALIGN (0x4) + 0x08003928 PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x08003928 PROVIDE (__preinit_array_end = .) + 0x08003928 . = ALIGN (0x4) + +.init_array 0x08003928 0x4 + 0x08003928 . = ALIGN (0x4) + 0x08003928 PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + .init_array 0x08003928 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x0800392c PROVIDE (__init_array_end = .) + 0x0800392c . = ALIGN (0x4) + +.fini_array 0x0800392c 0x4 + 0x0800392c . = ALIGN (0x4) + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + .fini_array 0x0800392c 0x4 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + [!provide] PROVIDE (__fini_array_end = .) + 0x08003930 . = ALIGN (0x4) + 0x08003930 _sidata = LOADADDR (.data) + +.rel.dyn 0x08003930 0x0 + .rel.iplt 0x08003930 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.data 0x20000000 0x120 load address 0x08003930 + 0x20000000 . = ALIGN (0x4) + 0x20000000 _sdata = . + *(.data) + *(.data*) + .data.SystemCoreClock + 0x20000000 0x4 ./Core/Src/system_stm32f4xx.o + 0x20000000 SystemCoreClock + .data.uwTickFreq + 0x20000004 0x1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x20000004 uwTickFreq + *fill* 0x20000005 0x3 + .data.uwTickPrio + 0x20000008 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x20000008 uwTickPrio + .data.HID_MOUSE_ReportDesc + 0x2000000c 0x3f ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x2000004b 0x1 + .data.USBD_HID_DeviceQualifierDesc + 0x2000004c 0xa ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x20000056 0x2 + .data.USBD_HID_Desc + 0x20000058 0x9 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x20000061 0x3 + .data.USBD_HID_CfgDesc + 0x20000064 0x22 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + *fill* 0x20000086 0x2 + .data.USBD_HID + 0x20000088 0x38 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + 0x20000088 USBD_HID + .data.USBD_StringSerial + 0x200000c0 0x1a ./USB_DEVICE/App/usbd_desc.o + 0x200000c0 USBD_StringSerial + *fill* 0x200000da 0x2 + .data.USBD_LangIDDesc + 0x200000dc 0x4 ./USB_DEVICE/App/usbd_desc.o + 0x200000dc USBD_LangIDDesc + .data.USBD_FS_BOSDesc + 0x200000e0 0xc ./USB_DEVICE/App/usbd_desc.o + 0x200000e0 USBD_FS_BOSDesc + .data.USBD_FS_DeviceDesc + 0x200000ec 0x12 ./USB_DEVICE/App/usbd_desc.o + 0x200000ec USBD_FS_DeviceDesc + *fill* 0x200000fe 0x2 + .data.FS_Desc 0x20000100 0x20 ./USB_DEVICE/App/usbd_desc.o + 0x20000100 FS_Desc + *(.RamFunc) + *(.RamFunc*) + 0x20000120 . = ALIGN (0x4) + 0x20000120 _edata = . + +.igot.plt 0x20000120 0x0 load address 0x08003a50 + .igot.plt 0x20000120 0x0 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x20000120 . = ALIGN (0x4) + +.bss 0x20000120 0xa00 load address 0x08003a50 + 0x20000120 _sbss = . + 0x20000120 __bss_start__ = _sbss + *(.bss) + .bss 0x20000120 0x1c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.bss*) + .bss.USBREPORT + 0x2000013c 0x8 ./Core/Src/main.o + 0x2000013c USBREPORT + .bss.uwTick 0x20000144 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x20000144 uwTick + .bss.cfgidx.0 0x20000148 0x1 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + *fill* 0x20000149 0x3 + .bss.hUsbDeviceFS + 0x2000014c 0x2dc ./USB_DEVICE/App/usb_device.o + 0x2000014c hUsbDeviceFS + .bss.USBD_StrDesc + 0x20000428 0x200 ./USB_DEVICE/App/usbd_desc.o + 0x20000428 USBD_StrDesc + .bss.mem.0 0x20000628 0x14 ./USB_DEVICE/Target/usbd_conf.o + .bss.hpcd_USB_OTG_FS + 0x2000063c 0x4e4 ./USB_DEVICE/Target/usbd_conf.o + 0x2000063c hpcd_USB_OTG_FS + *(COMMON) + 0x20000b20 . = ALIGN (0x4) + 0x20000b20 _ebss = . + 0x20000b20 __bss_end__ = _ebss + +._user_heap_stack + 0x20000b20 0x600 load address 0x08003a50 + 0x20000b20 . = ALIGN (0x8) + [!provide] PROVIDE (end = .) + 0x20000b20 PROVIDE (_end = .) + 0x20000d20 . = (. + _Min_Heap_Size) + *fill* 0x20000b20 0x200 + 0x20001120 . = (. + _Min_Stack_Size) + *fill* 0x20000d20 0x400 + 0x20001120 . = ALIGN (0x8) + +/DISCARD/ + libc.a(*) + libm.a(*) + libgcc.a(*) + +.ARM.attributes + 0x00000000 0x30 + *(.ARM.attributes) + .ARM.attributes + 0x00000000 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crti.o + .ARM.attributes + 0x00000022 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .ARM.attributes + 0x00000056 0x34 ./Core/Src/main.o + .ARM.attributes + 0x0000008a 0x34 ./Core/Src/stm32f4xx_hal_msp.o + .ARM.attributes + 0x000000be 0x34 ./Core/Src/stm32f4xx_it.o + .ARM.attributes + 0x000000f2 0x34 ./Core/Src/system_stm32f4xx.o + .ARM.attributes + 0x00000126 0x21 ./Core/Startup/startup_stm32f446retx.o + .ARM.attributes + 0x00000147 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .ARM.attributes + 0x0000017b 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .ARM.attributes + 0x000001af 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .ARM.attributes + 0x000001e3 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .ARM.attributes + 0x00000217 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .ARM.attributes + 0x0000024b 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .ARM.attributes + 0x0000027f 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .ARM.attributes + 0x000002b3 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .ARM.attributes + 0x000002e7 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .ARM.attributes + 0x0000031b 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .ARM.attributes + 0x0000034f 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .ARM.attributes + 0x00000383 0x34 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .ARM.attributes + 0x000003b7 0x34 ./USB_DEVICE/App/usb_device.o + .ARM.attributes + 0x000003eb 0x34 ./USB_DEVICE/App/usbd_desc.o + .ARM.attributes + 0x0000041f 0x34 ./USB_DEVICE/Target/usbd_conf.o + .ARM.attributes + 0x00000453 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x00000487 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x000004bb 0x17 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-strlen.o) + .ARM.attributes + 0x000004d2 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .ARM.attributes + 0x000004f4 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) + .ARM.attributes + 0x00000528 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_dvmd_tls.o) + .ARM.attributes + 0x0000054a 0x22 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/crtn.o +OUTPUT(modularkbd.elf elf32-littlearm) +LOAD linker stubs +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libm.a +LOAD /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a + +.comment 0x00000000 0x43 + .comment 0x00000000 0x43 ./Core/Src/main.o + 0x44 (size before relaxing) + .comment 0x00000043 0x44 ./Core/Src/stm32f4xx_hal_msp.o + .comment 0x00000043 0x44 ./Core/Src/stm32f4xx_it.o + .comment 0x00000043 0x44 ./Core/Src/system_stm32f4xx.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .comment 0x00000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o + .comment 0x00000043 0x44 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o + .comment 0x00000043 0x44 ./USB_DEVICE/App/usb_device.o + .comment 0x00000043 0x44 ./USB_DEVICE/App/usbd_desc.o + .comment 0x00000043 0x44 ./USB_DEVICE/Target/usbd_conf.o + +.debug_frame 0x00000000 0xac + .debug_frame 0x00000000 0x20 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-memset.o) + .debug_frame 0x00000020 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a(libc_a-init.o) + .debug_frame 0x0000004c 0x2c /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x00000078 0x34 /home/ukim/st/stm32cubeide_1.19.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.0.202410170706/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m+fp/hard/libgcc.a(_udivmoddi4.o) diff --git a/firmware/numpad/Release/objects.list b/firmware/numpad/Release/objects.list new file mode 100644 index 00000000..00e4a516 --- /dev/null +++ b/firmware/numpad/Release/objects.list @@ -0,0 +1,35 @@ +"./Core/Src/main.o" +"./Core/Src/stm32f4xx_hal_msp.o" +"./Core/Src/stm32f4xx_it.o" +"./Core/Src/syscalls.o" +"./Core/Src/sysmem.o" +"./Core/Src/system_stm32f4xx.o" +"./Core/Startup/startup_stm32f446retx.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o" +"./Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o" +"./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o" +"./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o" +"./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o" +"./USB_DEVICE/App/usb_device.o" +"./USB_DEVICE/App/usbd_desc.o" +"./USB_DEVICE/Target/usbd_conf.o" diff --git a/firmware/numpad/Release/objects.mk b/firmware/numpad/Release/objects.mk new file mode 100644 index 00000000..b471e98e --- /dev/null +++ b/firmware/numpad/Release/objects.mk @@ -0,0 +1,9 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/firmware/numpad/Release/sources.mk b/firmware/numpad/Release/sources.mk new file mode 100644 index 00000000..083ab34c --- /dev/null +++ b/firmware/numpad/Release/sources.mk @@ -0,0 +1,32 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (13.3.rel1) +################################################################################ + +ELF_SRCS := +OBJ_SRCS := +S_SRCS := +C_SRCS := +S_UPPER_SRCS := +O_SRCS := +CYCLO_FILES := +SIZE_OUTPUT := +OBJDUMP_LIST := +SU_FILES := +EXECUTABLES := +OBJS := +MAP_FILES := +S_DEPS := +S_UPPER_DEPS := +C_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +Core/Src \ +Core/Startup \ +Drivers/STM32F4xx_HAL_Driver/Src \ +Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src \ +Middlewares/ST/STM32_USB_Device_Library/Core/Src \ +USB_DEVICE/App \ +USB_DEVICE/Target \ + diff --git a/firmware/numpad/STM32F446RETX_FLASH.ld b/firmware/numpad/STM32F446RETX_FLASH.ld new file mode 100644 index 00000000..09d5db96 --- /dev/null +++ b/firmware/numpad/STM32F446RETX_FLASH.ld @@ -0,0 +1,188 @@ +/* +****************************************************************************** +** +** @file : LinkerScript.ld +** +** @author : Auto-generated by STM32CubeIDE +** +** @brief : Linker script for STM32F446RETx Device from STM32F4 series +** 512KBytes FLASH +** 128KBytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +****************************************************************************** +** @attention +** +** Copyright (c) 2025 STMicroelectronics. +** All rights reserved. +** +** This software is licensed under terms that can be found in the LICENSE file +** in the root directory of this software component. +** If no LICENSE file comes with this software, it is provided AS-IS. +** +****************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ + +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Memories definition */ +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K +} + +/* Sections */ +SECTIONS +{ + + /* The startup code into "FLASH" Rom type memory */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data into "FLASH" Rom type memory */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data into "FLASH" Rom type memory */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + *(.ARM.extab* .gnu.linkonce.armextab.*) + . = ALIGN(4); + } >FLASH + + .ARM (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + . = ALIGN(4); + } >FLASH + + .preinit_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4); + } >FLASH + + .init_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4); + } >FLASH + + .fini_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4); + } >FLASH + + /* Used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections into "RAM" Ram type memory */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + *(.RamFunc) /* .RamFunc sections */ + *(.RamFunc*) /* .RamFunc* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + + } >RAM AT> FLASH + + /* Uninitialized data section into "RAM" Ram type memory */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + /* Remove information from the compiler libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/firmware/numpad/STM32F446RETX_RAM.ld b/firmware/numpad/STM32F446RETX_RAM.ld new file mode 100644 index 00000000..b458d6fb --- /dev/null +++ b/firmware/numpad/STM32F446RETX_RAM.ld @@ -0,0 +1,188 @@ +/* +****************************************************************************** +** +** @file : LinkerScript.ld (debug in RAM dedicated) +** +** @author : Auto-generated by STM32CubeIDE +** +** @brief : Linker script for STM32F446RETx Device from STM32F4 series +** 512KBytes FLASH +** 128KBytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +****************************************************************************** +** @attention +** +** Copyright (c) 2025 STMicroelectronics. +** All rights reserved. +** +** This software is licensed under terms that can be found in the LICENSE file +** in the root directory of this software component. +** If no LICENSE file comes with this software, it is provided AS-IS. +** +****************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ + +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Memories definition */ +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K +} + +/* Sections */ +SECTIONS +{ + + /* The startup code into "RAM" Ram type memory */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >RAM + + /* The program code and other data into "RAM" Ram type memory */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + *(.RamFunc) /* .RamFunc sections */ + *(.RamFunc*) /* .RamFunc* sections */ + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >RAM + + /* Constant data into "RAM" Ram type memory */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >RAM + + .ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + *(.ARM.extab* .gnu.linkonce.armextab.*) + . = ALIGN(4); + } >RAM + + .ARM (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + . = ALIGN(4); + } >RAM + + .preinit_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4); + } >RAM + + .init_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4); + } >RAM + + .fini_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + . = ALIGN(4); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4); + } >RAM + + /* Used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections into "RAM" Ram type memory */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + + } >RAM + + /* Uninitialized data section into "RAM" Ram type memory */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + /* Remove information from the compiler libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/firmware/numpad/USB_DEVICE/App/usb_device.c b/firmware/numpad/USB_DEVICE/App/usb_device.c new file mode 100644 index 00000000..3d3e900d --- /dev/null +++ b/firmware/numpad/USB_DEVICE/App/usb_device.c @@ -0,0 +1,95 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usb_device.c + * @version : v1.0_Cube + * @brief : This file implements the USB Device + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ + +#include "usb_device.h" +#include "usbd_core.h" +#include "usbd_desc.h" +#include "usbd_hid.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ + +/* USER CODE END PFP */ + +/* USB Device Core handle declaration. */ +USBD_HandleTypeDef hUsbDeviceFS; + +/* + * -- Insert your variables declaration here -- + */ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* + * -- Insert your external function declaration here -- + */ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** + * Init USB device Library, add supported class and start the library + * @retval None + */ +void MX_USB_DEVICE_Init(void) +{ + /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */ + + /* USER CODE END USB_DEVICE_Init_PreTreatment */ + + /* Init Device Library, add supported class and start the library. */ + if (USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS) != USBD_OK) + { + Error_Handler(); + } + if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_HID) != USBD_OK) + { + Error_Handler(); + } + if (USBD_Start(&hUsbDeviceFS) != USBD_OK) + { + Error_Handler(); + } + + /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */ + + /* USER CODE END USB_DEVICE_Init_PostTreatment */ +} + +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/USB_DEVICE/App/usb_device.h b/firmware/numpad/USB_DEVICE/App/usb_device.h new file mode 100644 index 00000000..5d3020f4 --- /dev/null +++ b/firmware/numpad/USB_DEVICE/App/usb_device.h @@ -0,0 +1,102 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usb_device.h + * @version : v1.0_Cube + * @brief : Header for usb_device.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_DEVICE__H__ +#define __USB_DEVICE__H__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" +#include "stm32f4xx_hal.h" +#include "usbd_def.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup USBD_OTG_DRIVER + * @{ + */ + +/** @defgroup USBD_DEVICE USBD_DEVICE + * @brief Device file for Usb otg low level driver. + * @{ + */ + +/** @defgroup USBD_DEVICE_Exported_Variables USBD_DEVICE_Exported_Variables + * @brief Public variables. + * @{ + */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* + * -- Insert your variables declaration here -- + */ +/* USER CODE BEGIN VARIABLES */ + +/* USER CODE END VARIABLES */ +/** + * @} + */ + +/** @defgroup USBD_DEVICE_Exported_FunctionsPrototype USBD_DEVICE_Exported_FunctionsPrototype + * @brief Declaration of public functions for Usb device. + * @{ + */ + +/** USB Device initialization function. */ +void MX_USB_DEVICE_Init(void); + +/* + * -- Insert functions declaration here -- + */ +/* USER CODE BEGIN FD */ + +/* USER CODE END FD */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USB_DEVICE__H__ */ diff --git a/firmware/numpad/USB_DEVICE/App/usbd_desc.c b/firmware/numpad/USB_DEVICE/App/usbd_desc.c new file mode 100644 index 00000000..332d755b --- /dev/null +++ b/firmware/numpad/USB_DEVICE/App/usbd_desc.c @@ -0,0 +1,445 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : App/usbd_desc.c + * @version : v1.0_Cube + * @brief : This file implements the USB device descriptors. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_core.h" +#include "usbd_desc.h" +#include "usbd_conf.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @addtogroup USBD_DESC + * @{ + */ + +/** @defgroup USBD_DESC_Private_TypesDefinitions USBD_DESC_Private_TypesDefinitions + * @brief Private types. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_TYPES */ + +/* USER CODE END PRIVATE_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines + * @brief Private defines. + * @{ + */ + +#define USBD_VID 1155 +#define USBD_LANGID_STRING 1033 +#define USBD_MANUFACTURER_STRING "Team SKBD" +#define USBD_PID_FS 22315 +#define USBD_PRODUCT_STRING_FS "Modular Keyboard" +#define USBD_CONFIGURATION_STRING_FS "HID Config" +#define USBD_INTERFACE_STRING_FS "HID Interface" + +#define USB_SIZ_BOS_DESC 0x0C + +/* USER CODE BEGIN PRIVATE_DEFINES */ + +/* USER CODE END PRIVATE_DEFINES */ + +/** + * @} + */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** @defgroup USBD_DESC_Private_Macros USBD_DESC_Private_Macros + * @brief Private macros. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_MACRO */ + +/* USER CODE END PRIVATE_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes + * @brief Private functions declaration. + * @{ + */ + +static void Get_SerialNum(void); +static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len); + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes + * @brief Private functions declaration for FS. + * @{ + */ + +uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +#if (USBD_LPM_ENABLED == 1) +uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); +#endif /* (USBD_LPM_ENABLED == 1) */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables + * @brief Private variables. + * @{ + */ + +USBD_DescriptorsTypeDef FS_Desc = +{ + USBD_FS_DeviceDescriptor +, USBD_FS_LangIDStrDescriptor +, USBD_FS_ManufacturerStrDescriptor +, USBD_FS_ProductStrDescriptor +, USBD_FS_SerialStrDescriptor +, USBD_FS_ConfigStrDescriptor +, USBD_FS_InterfaceStrDescriptor +#if (USBD_LPM_ENABLED == 1) +, USBD_FS_USR_BOSDescriptor +#endif /* (USBD_LPM_ENABLED == 1) */ +}; + +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ +/** USB standard device descriptor. */ +__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = +{ + 0x12, /*bLength */ + USB_DESC_TYPE_DEVICE, /*bDescriptorType*/ +#if (USBD_LPM_ENABLED == 1) + 0x01, /*bcdUSB */ /* changed to USB version 2.01 + in order to support LPM L1 suspend + resume test of USBCV3.0*/ +#else + 0x00, /*bcdUSB */ +#endif /* (USBD_LPM_ENABLED == 1) */ + 0x02, + 0x00, /*bDeviceClass*/ + 0x00, /*bDeviceSubClass*/ + 0x00, /*bDeviceProtocol*/ + USB_MAX_EP0_SIZE, /*bMaxPacketSize*/ + LOBYTE(USBD_VID), /*idVendor*/ + HIBYTE(USBD_VID), /*idVendor*/ + LOBYTE(USBD_PID_FS), /*idProduct*/ + HIBYTE(USBD_PID_FS), /*idProduct*/ + 0x00, /*bcdDevice rel. 2.00*/ + 0x02, + USBD_IDX_MFC_STR, /*Index of manufacturer string*/ + USBD_IDX_PRODUCT_STR, /*Index of product string*/ + USBD_IDX_SERIAL_STR, /*Index of serial number string*/ + USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/ +}; + +/* USB_DeviceDescriptor */ +/** BOS descriptor. */ +#if (USBD_LPM_ENABLED == 1) +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ +__ALIGN_BEGIN uint8_t USBD_FS_BOSDesc[USB_SIZ_BOS_DESC] __ALIGN_END = +{ + 0x5, + USB_DESC_TYPE_BOS, + 0xC, + 0x0, + 0x1, /* 1 device capability*/ + /* device capability*/ + 0x7, + USB_DEVICE_CAPABITY_TYPE, + 0x2, + 0x2, /* LPM capability bit set*/ + 0x0, + 0x0, + 0x0 +}; +#endif /* (USBD_LPM_ENABLED == 1) */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables + * @brief Private variables. + * @{ + */ + +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ + +/** USB lang identifier descriptor. */ +__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = +{ + USB_LEN_LANGID_STR_DESC, + USB_DESC_TYPE_STRING, + LOBYTE(USBD_LANGID_STRING), + HIBYTE(USBD_LANGID_STRING) +}; + +#if defined ( __ICCARM__ ) /* IAR Compiler */ + #pragma data_alignment=4 +#endif /* defined ( __ICCARM__ ) */ +/* Internal string descriptor. */ +__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END; + +#if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 +#endif +__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = { + USB_SIZ_STRING_SERIAL, + USB_DESC_TYPE_STRING, +}; + +/** + * @} + */ + +/** @defgroup USBD_DESC_Private_Functions USBD_DESC_Private_Functions + * @brief Private functions. + * @{ + */ + +/** + * @brief Return the device descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = sizeof(USBD_FS_DeviceDesc); + return USBD_FS_DeviceDesc; +} + +/** + * @brief Return the LangID string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = sizeof(USBD_LangIDDesc); + return USBD_LangIDDesc; +} + +/** + * @brief Return the product string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + if(speed == 0) + { + USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); + } + else + { + USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); + } + return USBD_StrDesc; +} + +/** + * @brief Return the manufacturer string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); + return USBD_StrDesc; +} + +/** + * @brief Return the serial number string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = USB_SIZ_STRING_SERIAL; + + /* Update the serial number string descriptor with the data from the unique + * ID */ + Get_SerialNum(); + /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */ + + /* USER CODE END USBD_FS_SerialStrDescriptor */ + return (uint8_t *) USBD_StringSerial; +} + +/** + * @brief Return the configuration string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + if(speed == USBD_SPEED_HIGH) + { + USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); + } + else + { + USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); + } + return USBD_StrDesc; +} + +/** + * @brief Return the interface string descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + if(speed == 0) + { + USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); + } + else + { + USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); + } + return USBD_StrDesc; +} + +#if (USBD_LPM_ENABLED == 1) +/** + * @brief Return the BOS descriptor + * @param speed : Current device speed + * @param length : Pointer to data length variable + * @retval Pointer to descriptor buffer + */ +uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) +{ + UNUSED(speed); + *length = sizeof(USBD_FS_BOSDesc); + return (uint8_t*)USBD_FS_BOSDesc; +} +#endif /* (USBD_LPM_ENABLED == 1) */ + +/** + * @brief Create the serial number string descriptor + * @param None + * @retval None + */ +static void Get_SerialNum(void) +{ + uint32_t deviceserial0; + uint32_t deviceserial1; + uint32_t deviceserial2; + + deviceserial0 = *(uint32_t *) DEVICE_ID1; + deviceserial1 = *(uint32_t *) DEVICE_ID2; + deviceserial2 = *(uint32_t *) DEVICE_ID3; + + deviceserial0 += deviceserial2; + + if (deviceserial0 != 0) + { + IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8); + IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4); + } +} + +/** + * @brief Convert Hex 32Bits value into char + * @param value: value to convert + * @param pbuf: pointer to the buffer + * @param len: buffer length + * @retval None + */ +static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len) +{ + uint8_t idx = 0; + + for (idx = 0; idx < len; idx++) + { + if (((value >> 28)) < 0xA) + { + pbuf[2 * idx] = (value >> 28) + '0'; + } + else + { + pbuf[2 * idx] = (value >> 28) + 'A' - 10; + } + + value = value << 4; + + pbuf[2 * idx + 1] = 0; + } +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/firmware/numpad/USB_DEVICE/App/usbd_desc.h b/firmware/numpad/USB_DEVICE/App/usbd_desc.h new file mode 100644 index 00000000..a42cff0c --- /dev/null +++ b/firmware/numpad/USB_DEVICE/App/usbd_desc.h @@ -0,0 +1,143 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_desc.c + * @version : v1.0_Cube + * @brief : Header for usbd_conf.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_DESC__C__ +#define __USBD_DESC__C__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_DESC USBD_DESC + * @brief Usb device descriptors module. + * @{ + */ + +/* + * User to provide a unique ID to define the USB device serial number + * The use of UID_BASE register can be considered as an example + */ +#define DEVICE_ID1 (UID_BASE) +#define DEVICE_ID2 (UID_BASE + 0x4) +#define DEVICE_ID3 (UID_BASE + 0x8) + +#define USB_SIZ_STRING_SERIAL 0x1A + +/* USER CODE BEGIN EXPORTED_CONSTANTS */ + +/* USER CODE END EXPORTED_CONSTANTS */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Defines USBD_DESC_Exported_Defines + * @brief Defines. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_DEFINES */ + +/* USER CODE END EXPORTED_DEFINES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_TypesDefinitions USBD_DESC_Exported_TypesDefinitions + * @brief Types. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_TYPES */ + +/* USER CODE END EXPORTED_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Macros USBD_DESC_Exported_Macros + * @brief Aliases. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_MACRO */ + +/* USER CODE END EXPORTED_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Variables USBD_DESC_Exported_Variables + * @brief Public variables. + * @{ + */ + +/** Descriptor for the Usb device. */ +extern USBD_DescriptorsTypeDef FS_Desc; + +/* USER CODE BEGIN EXPORTED_VARIABLES */ + +/* USER CODE END EXPORTED_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_FunctionsPrototype USBD_DESC_Exported_FunctionsPrototype + * @brief Public functions declaration. + * @{ + */ + +/* USER CODE BEGIN EXPORTED_FUNCTIONS */ + +/* USER CODE END EXPORTED_FUNCTIONS */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_DESC__C__ */ + diff --git a/firmware/numpad/USB_DEVICE/Target/usbd_conf.c b/firmware/numpad/USB_DEVICE/Target/usbd_conf.c new file mode 100644 index 00000000..2cd51711 --- /dev/null +++ b/firmware/numpad/USB_DEVICE/Target/usbd_conf.c @@ -0,0 +1,725 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : Target/usbd_conf.c + * @version : v1.0_Cube + * @brief : This file implements the board support package for the USB device library + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" +#include "stm32f4xx_hal.h" +#include "usbd_def.h" +#include "usbd_core.h" + +#include "usbd_hid.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +PCD_HandleTypeDef hpcd_USB_OTG_FS; +void Error_Handler(void); + +/* External functions --------------------------------------------------------*/ +void SystemClock_Config(void); + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ +USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status); + +/* USER CODE END PFP */ + +/* Private functions ---------------------------------------------------------*/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/******************************************************************************* + LL Driver Callbacks (PCD -> USB Device Library) +*******************************************************************************/ +/* MSP Init */ + +void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(pcdHandle->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */ + + /* USER CODE END USB_OTG_FS_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48CLKSOURCE_PLLQ; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USB_OTG_FS GPIO Configuration + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); + + /* Peripheral interrupt init */ + HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(OTG_FS_IRQn); + /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */ + + /* USER CODE END USB_OTG_FS_MspInit 1 */ + } +} + +void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle) +{ + if(pcdHandle->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USB_OTG_FS_CLK_DISABLE(); + + /**USB_OTG_FS GPIO Configuration + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12); + + /* Peripheral interrupt Deinit*/ + HAL_NVIC_DisableIRQ(OTG_FS_IRQn); + + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 1 */ + } +} + +/** + * @brief Setup stage callback + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup); +} + +/** + * @brief Data Out stage callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff); +} + +/** + * @brief Data In stage callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff); +} + +/** + * @brief SOF callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_SOFCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief Reset callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_SpeedTypeDef speed = USBD_SPEED_FULL; + + if ( hpcd->Init.speed == PCD_SPEED_HIGH) + { + speed = USBD_SPEED_HIGH; + } + else if ( hpcd->Init.speed == PCD_SPEED_FULL) + { + speed = USBD_SPEED_FULL; + } + else + { + Error_Handler(); + } + /* Set Speed. */ + USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed); + + /* Reset Device. */ + USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief Suspend callback. + * When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it) + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + /* Inform USB library that core enters in suspend Mode. */ + USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData); + __HAL_PCD_GATE_PHYCLOCK(hpcd); + /* Enter in STOP mode. */ + /* USER CODE BEGIN 2 */ + if (hpcd->Init.low_power_enable) + { + /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */ + SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); + } + /* USER CODE END 2 */ +} + +/** + * @brief Resume callback. + * When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it) + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + /* USER CODE BEGIN 3 */ + + /* USER CODE END 3 */ + USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief ISOOUTIncomplete callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum); +} + +/** + * @brief ISOINIncomplete callback. + * @param hpcd: PCD handle + * @param epnum: Endpoint number + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#else +void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum); +} + +/** + * @brief Connect callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData); +} + +/** + * @brief Disconnect callback. + * @param hpcd: PCD handle + * @retval None + */ +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) +static void PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) +#else +void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ +{ + USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData); +} + +/******************************************************************************* + LL Driver Interface (USB Device Library --> PCD) +*******************************************************************************/ + +/** + * @brief Initializes the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev) +{ + /* Init USB Ip. */ + if (pdev->id == DEVICE_FS) { + /* Link the driver to the stack. */ + hpcd_USB_OTG_FS.pData = pdev; + pdev->pData = &hpcd_USB_OTG_FS; + + hpcd_USB_OTG_FS.Instance = USB_OTG_FS; + hpcd_USB_OTG_FS.Init.dev_endpoints = 6; + hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL; + hpcd_USB_OTG_FS.Init.dma_enable = DISABLE; + hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED; + hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE; + hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE; + hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE; + hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE; + hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE; + if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK) + { + Error_Handler( ); + } + +#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) + /* Register USB PCD CallBacks */ + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback); + HAL_PCD_RegisterCallback(&hpcd_USB_OTG_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback); + + HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_OTG_FS, PCD_DataOutStageCallback); + HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_OTG_FS, PCD_DataInStageCallback); + HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_OTG_FS, PCD_ISOOUTIncompleteCallback); + HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_OTG_FS, PCD_ISOINIncompleteCallback); +#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ + HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80); + HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40); + HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x80); + } + return USBD_OK; +} + +/** + * @brief De-Initializes the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_DeInit(pdev->pData); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Starts the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_Start(pdev->pData); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Stops the low level portion of the device driver. + * @param pdev: Device handle + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_Stop(pdev->pData); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Opens an endpoint of the low level driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @param ep_type: Endpoint type + * @param ep_mps: Endpoint max packet size + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Closes an endpoint of the low level driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Flushes an endpoint of the Low Level Driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Sets a Stall condition on an endpoint of the Low Level Driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Clears a Stall condition on an endpoint of the Low Level Driver. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Returns Stall condition. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval Stall (1: Yes, 0: No) + */ +uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData; + + if((ep_addr & 0x80) == 0x80) + { + return hpcd->IN_ep[ep_addr & 0x7F].is_stall; + } + else + { + return hpcd->OUT_ep[ep_addr & 0x7F].is_stall; + } +} + +/** + * @brief Assigns a USB address to the device. + * @param pdev: Device handle + * @param dev_addr: Device address + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Transmits data over an endpoint. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @param pbuf: Pointer to data to be sent + * @param size: Data size + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Prepares an endpoint for reception. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @param pbuf: Pointer to data to be received + * @param size: Data size + * @retval USBD status + */ +USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBD_StatusTypeDef usb_status = USBD_OK; + + hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); + + usb_status = USBD_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Returns the last transferred packet size. + * @param pdev: Device handle + * @param ep_addr: Endpoint number + * @retval Received Data Size + */ +uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) +{ + return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr); +} + +/** + * @brief Send LPM message to user layer + * @param hpcd: PCD handle + * @param msg: LPM message + * @retval None + */ +void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg) +{ + switch (msg) + { + case PCD_LPM_L0_ACTIVE: + if (hpcd->Init.low_power_enable) + { + SystemClock_Config(); + + /* Reset SLEEPDEEP bit of Cortex System Control Register. */ + SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); + } + __HAL_PCD_UNGATE_PHYCLOCK(hpcd); + USBD_LL_Resume(hpcd->pData); + break; + + case PCD_LPM_L1_ACTIVE: + __HAL_PCD_GATE_PHYCLOCK(hpcd); + USBD_LL_Suspend(hpcd->pData); + + /* Enter in STOP mode. */ + if (hpcd->Init.low_power_enable) + { + /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */ + SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); + } + break; + } +} + +#ifdef USBD_HS_TESTMODE_ENABLE +/** + * @brief Set High speed Test mode. + * @param pdev: Device handle + * @param testmode: test mode + * @retval USBD Status + */ +USBD_StatusTypeDef USBD_LL_SetTestMode(USBD_HandleTypeDef *pdev, uint8_t testmode) +{ + UNUSED(pdev); + UNUSED(testmode); + + return USBD_OK; +} +#endif /* USBD_HS_TESTMODE_ENABLE */ + +/** + * @brief Static single allocation. + * @param size: Size of allocated memory + * @retval None + */ +void *USBD_static_malloc(uint32_t size) +{ + static uint32_t mem[(sizeof(USBD_HID_HandleTypeDef)/4)+1];/* On 32-bit boundary */ + return mem; +} + +/** + * @brief Dummy memory free + * @param p: Pointer to allocated memory address + * @retval None + */ +void USBD_static_free(void *p) +{ + +} + +/** + * @brief Delays routine for the USB Device Library. + * @param Delay: Delay in ms + * @retval None + */ +void USBD_LL_Delay(uint32_t Delay) +{ + HAL_Delay(Delay); +} + +/** + * @brief Returns the USB status depending on the HAL status: + * @param hal_status: HAL status + * @retval USB status + */ +USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status) +{ + USBD_StatusTypeDef usb_status = USBD_OK; + + switch (hal_status) + { + case HAL_OK : + usb_status = USBD_OK; + break; + case HAL_ERROR : + usb_status = USBD_FAIL; + break; + case HAL_BUSY : + usb_status = USBD_BUSY; + break; + case HAL_TIMEOUT : + usb_status = USBD_FAIL; + break; + default : + usb_status = USBD_FAIL; + break; + } + return usb_status; +} diff --git a/firmware/numpad/USB_DEVICE/Target/usbd_conf.h b/firmware/numpad/USB_DEVICE/Target/usbd_conf.h new file mode 100644 index 00000000..ac928543 --- /dev/null +++ b/firmware/numpad/USB_DEVICE/Target/usbd_conf.h @@ -0,0 +1,175 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_conf.h + * @version : v1.0_Cube + * @brief : Header for usbd_conf.c file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_CONF__H__ +#define __USBD_CONF__H__ + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include +#include +#include +#include "main.h" +#include "stm32f4xx.h" +#include "stm32f4xx_hal.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup USBD_OTG_DRIVER + * @brief Driver for Usb device. + * @{ + */ + +/** @defgroup USBD_CONF USBD_CONF + * @brief Configuration file for Usb otg low level driver. + * @{ + */ + +/** @defgroup USBD_CONF_Exported_Variables USBD_CONF_Exported_Variables + * @brief Public variables. + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_Defines USBD_CONF_Exported_Defines + * @brief Defines for configuration of the Usb device. + * @{ + */ + +/*---------- -----------*/ +#define USBD_MAX_NUM_INTERFACES 1U +/*---------- -----------*/ +#define USBD_MAX_NUM_CONFIGURATION 1U +/*---------- -----------*/ +#define USBD_MAX_STR_DESC_SIZ 512U +/*---------- -----------*/ +#define USBD_DEBUG_LEVEL 0U +/*---------- -----------*/ +#define USBD_LPM_ENABLED 1U +/*---------- -----------*/ +#define USBD_SELF_POWERED 1U +/*---------- -----------*/ +#define HID_FS_BINTERVAL 0xAU + +/****************************************/ +/* #define for FS and HS identification */ +#define DEVICE_FS 0 +#define DEVICE_HS 1 + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_Macros USBD_CONF_Exported_Macros + * @brief Aliases. + * @{ + */ +/* Memory management macros make sure to use static memory allocation */ +/** Alias for memory allocation. */ + +#define USBD_malloc (void *)USBD_static_malloc + +/** Alias for memory release. */ +#define USBD_free USBD_static_free + +/** Alias for memory set. */ +#define USBD_memset memset + +/** Alias for memory copy. */ +#define USBD_memcpy memcpy + +/** Alias for delay. */ +#define USBD_Delay HAL_Delay + +/* DEBUG macros */ + +#if (USBD_DEBUG_LEVEL > 0) +#define USBD_UsrLog(...) printf(__VA_ARGS__);\ + printf("\n"); +#else +#define USBD_UsrLog(...) +#endif /* (USBD_DEBUG_LEVEL > 0U) */ + +#if (USBD_DEBUG_LEVEL > 1) + +#define USBD_ErrLog(...) printf("ERROR: ");\ + printf(__VA_ARGS__);\ + printf("\n"); +#else +#define USBD_ErrLog(...) +#endif /* (USBD_DEBUG_LEVEL > 1U) */ + +#if (USBD_DEBUG_LEVEL > 2) +#define USBD_DbgLog(...) printf("DEBUG : ");\ + printf(__VA_ARGS__);\ + printf("\n"); +#else +#define USBD_DbgLog(...) +#endif /* (USBD_DEBUG_LEVEL > 2U) */ + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_Types USBD_CONF_Exported_Types + * @brief Types. + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CONF_Exported_FunctionsPrototype USBD_CONF_Exported_FunctionsPrototype + * @brief Declaration of public functions for Usb device. + * @{ + */ + +/* Exported functions -------------------------------------------------------*/ +void *USBD_static_malloc(uint32_t size); +void USBD_static_free(void *p); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBD_CONF__H__ */ + diff --git a/firmware/numpad/modularkbd.ioc b/firmware/numpad/modularkbd.ioc new file mode 100644 index 00000000..6527eeb2 --- /dev/null +++ b/firmware/numpad/modularkbd.ioc @@ -0,0 +1,362 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats=[] +CAD.pinconfig=Dual +CAD.provider= +Dma.Request0=UART4_RX +Dma.Request1=UART4_TX +Dma.Request2=UART5_RX +Dma.Request3=UART5_TX +Dma.Request4=USART1_RX +Dma.Request5=USART1_TX +Dma.Request6=USART2_RX +Dma.Request7=USART2_TX +Dma.RequestsNb=8 +Dma.UART4_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.UART4_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART4_RX.0.Instance=DMA1_Stream2 +Dma.UART4_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART4_RX.0.MemInc=DMA_MINC_ENABLE +Dma.UART4_RX.0.Mode=DMA_NORMAL +Dma.UART4_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART4_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.UART4_RX.0.Priority=DMA_PRIORITY_LOW +Dma.UART4_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.UART4_TX.1.Direction=DMA_MEMORY_TO_PERIPH +Dma.UART4_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART4_TX.1.Instance=DMA1_Stream4 +Dma.UART4_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART4_TX.1.MemInc=DMA_MINC_ENABLE +Dma.UART4_TX.1.Mode=DMA_NORMAL +Dma.UART4_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART4_TX.1.PeriphInc=DMA_PINC_DISABLE +Dma.UART4_TX.1.Priority=DMA_PRIORITY_LOW +Dma.UART4_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.UART5_RX.2.Direction=DMA_PERIPH_TO_MEMORY +Dma.UART5_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART5_RX.2.Instance=DMA1_Stream0 +Dma.UART5_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART5_RX.2.MemInc=DMA_MINC_ENABLE +Dma.UART5_RX.2.Mode=DMA_NORMAL +Dma.UART5_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART5_RX.2.PeriphInc=DMA_PINC_DISABLE +Dma.UART5_RX.2.Priority=DMA_PRIORITY_LOW +Dma.UART5_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.UART5_TX.3.Direction=DMA_MEMORY_TO_PERIPH +Dma.UART5_TX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART5_TX.3.Instance=DMA1_Stream7 +Dma.UART5_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART5_TX.3.MemInc=DMA_MINC_ENABLE +Dma.UART5_TX.3.Mode=DMA_NORMAL +Dma.UART5_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART5_TX.3.PeriphInc=DMA_PINC_DISABLE +Dma.UART5_TX.3.Priority=DMA_PRIORITY_LOW +Dma.UART5_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART1_RX.4.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.4.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_RX.4.Instance=DMA2_Stream2 +Dma.USART1_RX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.4.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.4.Mode=DMA_NORMAL +Dma.USART1_RX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.4.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.4.Priority=DMA_PRIORITY_LOW +Dma.USART1_RX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART1_TX.5.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART1_TX.5.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_TX.5.Instance=DMA2_Stream7 +Dma.USART1_TX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_TX.5.MemInc=DMA_MINC_ENABLE +Dma.USART1_TX.5.Mode=DMA_NORMAL +Dma.USART1_TX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_TX.5.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_TX.5.Priority=DMA_PRIORITY_LOW +Dma.USART1_TX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_RX.6.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART2_RX.6.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_RX.6.Instance=DMA1_Stream5 +Dma.USART2_RX.6.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_RX.6.MemInc=DMA_MINC_ENABLE +Dma.USART2_RX.6.Mode=DMA_NORMAL +Dma.USART2_RX.6.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_RX.6.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_RX.6.Priority=DMA_PRIORITY_LOW +Dma.USART2_RX.6.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_TX.7.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART2_TX.7.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_TX.7.Instance=DMA1_Stream6 +Dma.USART2_TX.7.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_TX.7.MemInc=DMA_MINC_ENABLE +Dma.USART2_TX.7.Mode=DMA_NORMAL +Dma.USART2_TX.7.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_TX.7.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_TX.7.Priority=DMA_PRIORITY_LOW +Dma.USART2_TX.7.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.CPN=STM32F446RET6 +Mcu.Family=STM32F4 +Mcu.IP0=DMA +Mcu.IP1=I2C1 +Mcu.IP10=USART2 +Mcu.IP11=USB_DEVICE +Mcu.IP12=USB_OTG_FS +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SYS +Mcu.IP5=TIM2 +Mcu.IP6=TIM3 +Mcu.IP7=UART4 +Mcu.IP8=UART5 +Mcu.IP9=USART1 +Mcu.IPNb=13 +Mcu.Name=STM32F446R(C-E)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PH0-OSC_IN +Mcu.Pin1=PH1-OSC_OUT +Mcu.Pin10=PC5 +Mcu.Pin11=PB0 +Mcu.Pin12=PB1 +Mcu.Pin13=PB2 +Mcu.Pin14=PB10 +Mcu.Pin15=PC6 +Mcu.Pin16=PC7 +Mcu.Pin17=PC8 +Mcu.Pin18=PC9 +Mcu.Pin19=PA8 +Mcu.Pin2=PA0-WKUP +Mcu.Pin20=PA9 +Mcu.Pin21=PA10 +Mcu.Pin22=PA11 +Mcu.Pin23=PA12 +Mcu.Pin24=PA13 +Mcu.Pin25=PA14 +Mcu.Pin26=PA15 +Mcu.Pin27=PC12 +Mcu.Pin28=PD2 +Mcu.Pin29=PB3 +Mcu.Pin3=PA1 +Mcu.Pin30=PB4 +Mcu.Pin31=PB6 +Mcu.Pin32=PB7 +Mcu.Pin33=VP_SYS_VS_Systick +Mcu.Pin34=VP_USB_DEVICE_VS_USB_DEVICE_HID_FS +Mcu.Pin4=PA2 +Mcu.Pin5=PA3 +Mcu.Pin6=PA5 +Mcu.Pin7=PA6 +Mcu.Pin8=PA7 +Mcu.Pin9=PC4 +Mcu.PinsNb=35 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F446RETx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DMA1_Stream0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Stream2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Stream4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Stream5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Stream6_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Stream7_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA2_Stream2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA2_Stream7_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.OTG_FS_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false +NVIC.UART4_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.UART5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +PA0-WKUP.Mode=Asynchronous +PA0-WKUP.Signal=UART4_TX +PA1.Mode=Asynchronous +PA1.Signal=UART4_RX +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA11.Mode=Device_Only +PA11.Signal=USB_OTG_FS_DM +PA12.Mode=Device_Only +PA12.Signal=USB_OTG_FS_DP +PA13.Mode=JTAG_5_pins +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=JTAG_5_pins +PA14.Signal=SYS_JTCK-SWCLK +PA15.Mode=JTAG_5_pins +PA15.Signal=SYS_JTDI +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA5.Signal=S_TIM2_CH1_ETR +PA6.Signal=S_TIM3_CH1 +PA7.Signal=S_TIM3_CH2 +PA8.Locked=true +PA8.Signal=GPIO_Output +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB0.GPIOParameters=GPIO_PuPd +PB0.GPIO_PuPd=GPIO_PULLDOWN +PB0.Locked=true +PB0.Signal=GPIO_Input +PB1.GPIOParameters=GPIO_PuPd +PB1.GPIO_PuPd=GPIO_PULLDOWN +PB1.Locked=true +PB1.Signal=GPIO_Input +PB10.GPIOParameters=GPIO_PuPd +PB10.GPIO_PuPd=GPIO_PULLDOWN +PB10.Locked=true +PB10.Signal=GPIO_Input +PB2.GPIOParameters=GPIO_PuPd +PB2.GPIO_PuPd=GPIO_PULLDOWN +PB2.Locked=true +PB2.Signal=GPIO_Input +PB3.Mode=JTAG_5_pins +PB3.Signal=SYS_JTDO-SWO +PB4.Mode=JTAG_5_pins +PB4.Signal=SYS_JTRST +PB6.Mode=I2C +PB6.Signal=I2C1_SCL +PB7.Mode=I2C +PB7.Signal=I2C1_SDA +PC12.Mode=Asynchronous +PC12.Signal=UART5_TX +PC4.GPIOParameters=GPIO_PuPd +PC4.GPIO_PuPd=GPIO_PULLDOWN +PC4.Locked=true +PC4.Signal=GPIO_Input +PC5.GPIOParameters=GPIO_PuPd +PC5.GPIO_PuPd=GPIO_PULLDOWN +PC5.Locked=true +PC5.Signal=GPIO_Input +PC6.Locked=true +PC6.Signal=GPIO_Output +PC7.Locked=true +PC7.Signal=GPIO_Output +PC8.Locked=true +PC8.Signal=GPIO_Output +PC9.Locked=true +PC9.Signal=GPIO_Output +PD2.Mode=Asynchronous +PD2.Signal=UART5_RX +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=true +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F446RETx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.28.3 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=modularkbd.ioc +ProjectManager.ProjectName=modularkbd +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_UART4_Init-UART4-false-HAL-true,7-MX_UART5_Init-UART5-false-HAL-true,8-MX_USART1_UART_Init-USART1-false-HAL-true,9-MX_USART2_UART_Init-USART2-false-HAL-true,10-MX_I2C1_Init-I2C1-false-HAL-true,11-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false +RCC.AHBCLKDivider=RCC_SYSCLK_DIV2 +RCC.AHBFreq_Value=48000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=24000000 +RCC.APB1TimFreq_Value=48000000 +RCC.APB2Freq_Value=48000000 +RCC.APB2TimFreq_Value=48000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.CortexFreq_Value=48000000 +RCC.FCLKCortexFreq_Value=48000000 +RCC.FMPI2C1Freq_Value=24000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=48000000 +RCC.HSE_VALUE=8000000 +RCC.I2S1Freq_Value=48000000 +RCC.I2S2Freq_Value=48000000 +RCC.IPParameters=AHBCLKDivider,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FMPI2C1Freq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,I2S1Freq_Value,I2S2Freq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SoutputFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLRCLKFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIoutputFreq_Value,PWRFreq_Value,SAIAFreq_Value,SAIBFreq_Value,SDIOFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USBFreq_Value,VCOI2SInputFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIInputFreq_Value,VCOSAIOutputFreq_Value +RCC.MCO2PinFreq_Value=96000000 +RCC.PLLCLKFreq_Value=96000000 +RCC.PLLI2SPCLKFreq_Value=48000000 +RCC.PLLI2SQCLKFreq_Value=48000000 +RCC.PLLI2SRCLKFreq_Value=48000000 +RCC.PLLI2SoutputFreq_Value=48000000 +RCC.PLLM=4 +RCC.PLLN=96 +RCC.PLLQ=4 +RCC.PLLQCLKFreq_Value=48000000 +RCC.PLLRCLKFreq_Value=96000000 +RCC.PLLSAIPCLKFreq_Value=48000000 +RCC.PLLSAIQCLKFreq_Value=48000000 +RCC.PLLSAIoutputFreq_Value=48000000 +RCC.PWRFreq_Value=96000000 +RCC.SAIAFreq_Value=48000000 +RCC.SAIBFreq_Value=48000000 +RCC.SDIOFreq_Value=48000000 +RCC.SPDIFRXFreq_Value=96000000 +RCC.SYSCLKFreq_VALUE=96000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.USBFreq_Value=48000000 +RCC.VCOI2SInputFreq_Value=500000 +RCC.VCOI2SOutputFreq_Value=96000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=192000000 +RCC.VCOSAIInputFreq_Value=500000 +RCC.VCOSAIOutputFreq_Value=96000000 +SH.S_TIM2_CH1_ETR.0=TIM2_CH1,Forced Output1 CH1 +SH.S_TIM2_CH1_ETR.ConfNb=1 +SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface +SH.S_TIM3_CH1.ConfNb=1 +SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface +SH.S_TIM3_CH2.ConfNb=1 +TIM2.Channel-Forced\ Output1\ CH1=TIM_CHANNEL_1 +TIM2.IPParameters=Channel-Forced Output1 CH1 +UART4.IPParameters=VirtualMode +UART4.VirtualMode=Asynchronous +UART5.IPParameters=VirtualMode +UART5.VirtualMode=Asynchronous +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +USART2.IPParameters=VirtualMode +USART2.VirtualMode=VM_ASYNC +USB_DEVICE.CLASS_NAME_FS=HID +USB_DEVICE.IPParameters=VirtualMode-HID_FS,VirtualModeFS,CLASS_NAME_FS,PRODUCT_STRING_HID_FS,MANUFACTURER_STRING-HID_FS +USB_DEVICE.MANUFACTURER_STRING-HID_FS=Team SKBD +USB_DEVICE.PRODUCT_STRING_HID_FS=Modular Keyboard +USB_DEVICE.VirtualMode-HID_FS=Hid +USB_DEVICE.VirtualModeFS=Hid_FS +USB_OTG_FS.IPParameters=VirtualMode +USB_OTG_FS.VirtualMode=Device_Only +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_USB_DEVICE_VS_USB_DEVICE_HID_FS.Mode=HID_FS +VP_USB_DEVICE_VS_USB_DEVICE_HID_FS.Signal=USB_DEVICE_VS_USB_DEVICE_HID_FS +board=custom +isbadioc=false diff --git a/firmware/numpad/modularkbd.launch b/firmware/numpad/modularkbd.launch new file mode 100644 index 00000000..43c4791d --- /dev/null +++ b/firmware/numpad/modularkbd.launch @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-06_112926.zip b/hardware/68percent/68percent-backups/68percent-2025-11-06_112926.zip deleted file mode 100644 index a0b90c01..00000000 Binary files a/hardware/68percent/68percent-backups/68percent-2025-11-06_112926.zip and /dev/null differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-06_114157.zip b/hardware/68percent/68percent-backups/68percent-2025-11-06_114157.zip deleted file mode 100644 index a9ed4e25..00000000 Binary files a/hardware/68percent/68percent-backups/68percent-2025-11-06_114157.zip and /dev/null differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-06_232806.zip b/hardware/68percent/68percent-backups/68percent-2025-11-06_232806.zip deleted file mode 100644 index e290d1c7..00000000 Binary files a/hardware/68percent/68percent-backups/68percent-2025-11-06_232806.zip and /dev/null differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-06_233351.zip b/hardware/68percent/68percent-backups/68percent-2025-11-06_233351.zip deleted file mode 100644 index 98a1cf02..00000000 Binary files a/hardware/68percent/68percent-backups/68percent-2025-11-06_233351.zip and /dev/null differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-23_152927.zip b/hardware/68percent/68percent-backups/68percent-2025-11-23_152927.zip new file mode 100644 index 00000000..cdf6b145 Binary files /dev/null and b/hardware/68percent/68percent-backups/68percent-2025-11-23_152927.zip differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-24_143509.zip b/hardware/68percent/68percent-backups/68percent-2025-11-24_143509.zip new file mode 100644 index 00000000..1cc975df Binary files /dev/null and b/hardware/68percent/68percent-backups/68percent-2025-11-24_143509.zip differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-25_193058.zip b/hardware/68percent/68percent-backups/68percent-2025-11-25_193058.zip new file mode 100644 index 00000000..72b288db Binary files /dev/null and b/hardware/68percent/68percent-backups/68percent-2025-11-25_193058.zip differ diff --git a/hardware/68percent/68percent-backups/68percent-2025-11-25_194435.zip b/hardware/68percent/68percent-backups/68percent-2025-11-25_194435.zip new file mode 100644 index 00000000..dc7c40e6 Binary files /dev/null and b/hardware/68percent/68percent-backups/68percent-2025-11-25_194435.zip differ diff --git a/hardware/68percent/68percent-backups/68percent.kicad_dru b/hardware/68percent/68percent-backups/68percent.kicad_dru new file mode 100644 index 00000000..07b40847 --- /dev/null +++ b/hardware/68percent/68percent-backups/68percent.kicad_dru @@ -0,0 +1,169 @@ +(version 1) +#PCBWay Custom DRC for Kicad 7 + +# ----------------------------------- Minimum trace width and spacing (PICK ONE) -------------------- + +# 2oz copper +#(rule "Minimum Trace Width and Spacing (outer layer)" +#(constraint track_width (min 0.1524mm)) +#(constraint clearance (min 0.1778mm)) +#(layer outer) +#(condition "A.Type == 'track'")) + +#(rule "Minimum Trace Width and Spacing (innner layer)" +#(constraint track_width (min 0.1524mm)) +#(constraint clearance (min 0.1778mm)) +#(layer inner) +#(condition "A.Type == 'track'")) + + +# 2-layer, 1oz copper +(rule "Minimum Trace Width and Spacing (outer layer)" +(constraint track_width (min 0.127mm)) +(constraint clearance (min 0.127mm)) +(layer outer) +(condition "A.Type == 'track'")) + +(rule "Minimum Trace Width and Spacing (inner layer)" +(constraint track_width (min 0.1mm)) +(constraint clearance (min 0.1mm)) +(layer inner) +(condition "A.Type == 'track'")) + +# 4-layer , 1oz and 0.5oz copper +#(rule "Minimum Trace Width and Spacing (outer layer)" +#(constraint track_width (min 0.09mm)) +#(constraint clearance (min 0.09mm)) +#(layer outer) +#(condition "A.Type == 'track'")) + +#(rule "Minimum Trace Width and Spacing (inner layer)" +#(constraint track_width (min 0.1mm)) +#(constraint clearance (min 0.09mm)) +#(layer inner) +#(condition "A.Type == 'track'")) + +# ------------------------------------------------------------------------------------------------------ + +# Drill/hole size - listed here to maintain order of rule application. Must not override rule set in Via hole/diameter size below. +(rule "drill hole size (mechanical)" +(constraint hole_size (min 0.15mm) (max 6.3mm))) + +# ----------------------------------- Via hole/diameter size (PICK ONE) ------------------------------------ + +# 2-layer standard +(rule "Minimum Via Diameter and Hole Size" +(constraint hole_size (min 0.3mm)) +(constraint via_diameter (min 0.5mm)) +(condition "A.Type == 'via'")) + +# 4-layer standard +#(rule "Minimum Via Diameter and Hole Size" +#(constraint hole_size (min 0.3mm)) +#(constraint via_diameter (min 0.45mm)) +#(condition "A.Type == 'via'")) + +# 4-layer advanced +#(rule "Minimum Via Diameter and Hole Size" +#(constraint hole_size (min 0.25mm)) +#(constraint via_diameter (min 0.4mm)) +#(constraint disallow buried_via) +#(condition "A.Type == 'via'")) + +# 4-layer advanced +#(rule "Minimum Via Diameter and Hole Size" +#(constraint hole_size (min 0.2mm)) +#(constraint via_diameter (min 0.35mm)) +#(condition "A.Type == 'via'")) + +# 4-layer advanced +#(rule "Minimum Via Diameter and Hole Size" +#(constraint hole_size (min 0.15mm)) +#(constraint via_diameter (min 0.3mm)) +#(condition "A.Type == 'via'")) + +# ----------------------------------- Drill/hole size ------------------------------------ + +(rule "PTH Hole Size" +(constraint hole_size (min 0.2mm) (max 6.35mm)) +(condition "A.Type != 'Via' && A.isPlated()")) + +(rule "Minimum Non-plated Hole Size" +(constraint hole_size (min 0.5mm)) +(condition "A.Type == 'pad' && !A.isPlated()")) + +(rule "Pad Size" +(constraint hole_size (min 0.5mm)) +(constraint annular_width (min 0.25mm)) +(condition "A.Type == 'Pad' && A.isPlated()")) + +(rule "Minimum Castellated Hole Size" +(constraint hole_size (min 0.6mm)) +(condition "A.Type == 'pad' && A.Fabrication_Property == 'Castellated pad'")) + +(rule "Min. Plated Slot Width" +(constraint hole_size (min 0.5mm)) +(condition "(A.Hole_Size_X != A.Hole_Size_Y) && A.isPlated()")) + +(rule "Min. Non-Plated Slot Width" +(constraint hole_size (min 0.8mm)) +(condition "(A.Hole_Size_X != A.Hole_Size_Y) && !A.isPlated()")) + +# ----------------------------------- Minimum clearance ---------------------------------- +(rule "hole to hole clearance (different nets)" +(constraint hole_to_hole (min 0.5mm)) +(condition "A.Net != B.Net")) + +(rule "via to track clearance" +(constraint hole_clearance (min 0.254mm)) +(condition "A.Type == 'via' && B.Type == 'track'")) + +(rule "via to via clearance (same nets)" +(constraint hole_to_hole (min 0.254mm)) +(condition "A.Type == 'via' && B.Type == A.Type && A.Net == B.Net")) + +(rule "pad to pad clearance (with hole, different nets)" +(constraint hole_to_hole (min 0.5mm)) +(condition "A.Type == 'pad' && B.Type == A.Type && A.Net != B.Net")) + +(rule "pad to pad clearance (without hole, different nets)" +(constraint clearance (min 0.127mm)) +(condition "A.Type == 'Pad' && B.Type == 'Pad'")) + +(rule "NPTH to Track clearance" +(constraint hole_clearance (min 0.254mm)) +(condition "A.Pad_Type == 'NPTH, mechanical' && B.Type == 'track'")) + +(rule "NPTH with copper around" +(constraint hole_clearance (min 0.20mm)) +(condition "A.Pad_Type == 'NPTH, mechanical' && B.Type != 'track'")) + +(rule "PTH to Track clearance" +(constraint hole_clearance (min 0.33mm)) +(condition "A.isPlated() && A.Type != 'Via' && B.Type == 'track'")) + +(rule "Pad to Track clearance" +(constraint clearance (min 0.2mm)) +(condition "A.isPlated() && A.Type != 'Via' && B.Type == 'track'")) + +# ----------------------------------- Board Outlines (PICK ONE) ------------------------------------- +#Default Routed Edge Clearance +(rule "Trace to Outline" +(constraint edge_clearance (min 0.3mm)) +(condition "A.Type == 'track'")) + +#Special Clearance for V-Score Edges +#(rule "Trace to V-Cut" +#(constraint edge_clearance (min 0.4mm)) +#(condition "A.Type == 'track'")) + +# ----------------------------------- silkscreen -------------------------- +(rule "Minimum Text" +(constraint text_thickness (min 0.15mm)) +(constraint text_height (min 0.8mm)) +(layer "?.Silkscreen")) + +(rule "Pad to Silkscreen" +(constraint silk_clearance (min 0.15mm)) +(layer outer) +(condition "A.Type == 'pad' && (B.Type == 'text' || B.Type == 'graphic')")) diff --git a/hardware/68percent/68percent-backups/68percent.kicad_pcb b/hardware/68percent/68percent-backups/68percent.kicad_pcb new file mode 100644 index 00000000..bf8e76e1 --- /dev/null +++ b/hardware/68percent/68percent-backups/68percent.kicad_pcb @@ -0,0 +1,177151 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A3") + (layers + (0 "F.Cu" signal) + (4 "In1.Cu" signal) + (6 "In2.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + (47 "User.5" user) + (49 "User.6" user) + (51 "User.7" user) + (53 "User.8" user) + (55 "User.9" user) + ) + (setup + (stackup + (layer "F.SilkS" + (type "Top Silk Screen") + ) + (layer "F.Paste" + (type "Top Solder Paste") + ) + (layer "F.Mask" + (type "Top Solder Mask") + (thickness 0.01) + ) + (layer "F.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "dielectric 1" + (type "prepreg") + (thickness 0.1) + (material "FR4") + (epsilon_r 4.5) + (loss_tangent 0.02) + ) + (layer "In1.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "dielectric 2" + (type "core") + (thickness 1.24) + (material "FR4") + (epsilon_r 4.5) + (loss_tangent 0.02) + ) + (layer "In2.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "dielectric 3" + (type "prepreg") + (thickness 0.1) + (material "FR4") + (epsilon_r 4.5) + (loss_tangent 0.02) + ) + (layer "B.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "B.Mask" + (type "Bottom Solder Mask") + (thickness 0.01) + ) + (layer "B.Paste" + (type "Bottom Solder Paste") + ) + (layer "B.SilkS" + (type "Bottom Silk Screen") + ) + (copper_finish "HAL lead-free") + (dielectric_constraints no) + ) + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (grid_origin 44.85125 47.625) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (net 1 "GND") + (net 2 "+3.3V") + (net 3 "+5V") + (net 4 "Net-(D3-A)") + (net 5 "Net-(D4-A)") + (net 6 "Net-(D5-A)") + (net 7 "Net-(D6-A)") + (net 8 "Net-(D7-A)") + (net 9 "Net-(D8-A)") + (net 10 "Net-(D9-A)") + (net 11 "Net-(D10-A)") + (net 12 "Net-(D11-A)") + (net 13 "Net-(D12-A)") + (net 14 "Net-(D13-A)") + (net 15 "Net-(D14-A)") + (net 16 "Net-(D15-A)") + (net 17 "Net-(D16-A)") + (net 18 "Net-(D17-A)") + (net 19 "Net-(D18-A)") + (net 20 "Net-(D19-A)") + (net 21 "Net-(D20-A)") + (net 22 "Net-(D21-A)") + (net 23 "Net-(D22-A)") + (net 24 "Net-(D23-A)") + (net 25 "Net-(D29-A)") + (net 26 "Net-(D30-A)") + (net 27 "Net-(D31-A)") + (net 28 "Net-(D32-A)") + (net 29 "Net-(D33-A)") + (net 30 "Net-(D24-A)") + (net 31 "Net-(D25-A)") + (net 32 "Net-(D26-A)") + (net 33 "Net-(D27-A)") + (net 34 "Net-(D28-A)") + (net 35 "Net-(D34-A)") + (net 36 "/COL2") + (net 37 "/COL3") + (net 38 "/COL4") + (net 39 "/COL5") + (net 40 "/COL1") + (net 41 "Net-(LED1-DOUT)") + (net 42 "/RGB_DATAIN") + (net 43 "Net-(U1-OSCIN)") + (net 44 "Net-(U1-OSCOUT)") + (net 45 "Net-(U1-VCAP)") + (net 46 "/NRST") + (net 47 "/D+") + (net 48 "/D-") + (net 49 "/ROW1") + (net 50 "/ROW2") + (net 51 "/ROW3") + (net 52 "/ROW4") + (net 53 "/ROW5") + (net 54 "Net-(D35-A)") + (net 55 "/UART_TX_EAST") + (net 56 "/UART_RX_EAST") + (net 57 "Net-(U1-VDDA)") + (net 58 "Net-(D36-A)") + (net 59 "Net-(D37-A)") + (net 60 "Net-(D38-A)") + (net 61 "Net-(D39-A)") + (net 62 "Net-(D40-A)") + (net 63 "Net-(D41-A)") + (net 64 "Net-(D42-A)") + (net 65 "Net-(D43-A)") + (net 66 "Net-(D44-A)") + (net 67 "Net-(D45-A)") + (net 68 "Net-(D46-A)") + (net 69 "Net-(D47-A)") + (net 70 "Net-(D48-A)") + (net 71 "Net-(D50-A)") + (net 72 "Net-(D51-A)") + (net 73 "Net-(D52-A)") + (net 74 "Net-(D53-A)") + (net 75 "Net-(D54-A)") + (net 76 "Net-(D55-A)") + (net 77 "Net-(D56-A)") + (net 78 "Net-(D57-A)") + (net 79 "Net-(D58-A)") + (net 80 "/UART_TX_NORTH") + (net 81 "/UART_RX_NORTH") + (net 82 "Net-(USB1-CC2)") + (net 83 "Net-(USB1-CC1)") + (net 84 "Net-(U1-PA11)") + (net 85 "Net-(U1-PA12)") + (net 86 "Net-(U1-BOOT)") + (net 87 "/JTCLK") + (net 88 "Net-(J1-Pin_2)") + (net 89 "/JTMS") + (net 90 "Net-(J1-Pin_4)") + (net 91 "Net-(J1-Pin_5)") + (net 92 "Net-(J1-Pin_6)") + (net 93 "/SWO") + (net 94 "/UART_TX_SOUTH") + (net 95 "/UART_RX_SOUTH") + (net 96 "unconnected-(U1-PB12-Pad33)") + (net 97 "AGND") + (net 98 "Net-(D59-A)") + (net 99 "/UART_TX_WEST") + (net 100 "unconnected-(U1-PC14-Pad3)") + (net 101 "unconnected-(U1-PC15-Pad4)") + (net 102 "Net-(D60-A)") + (net 103 "Net-(D61-A)") + (net 104 "Net-(D62-A)") + (net 105 "unconnected-(U1-PC1-Pad9)") + (net 106 "unconnected-(U1-PC3-Pad11)") + (net 107 "Net-(D64-A)") + (net 108 "unconnected-(U1-PC2-Pad10)") + (net 109 "Net-(D65-A)") + (net 110 "Net-(D68-A)") + (net 111 "/UART_RX_WEST") + (net 112 "Net-(D71-A)") + (net 113 "Net-(D72-A)") + (net 114 "Net-(D73-A)") + (net 115 "unconnected-(U1-PC0-Pad8)") + (net 116 "unconnected-(U1-PC13-Pad2)") + (net 117 "Net-(D2-A)") + (net 118 "unconnected-(USB1-SBU2-Pad3)") + (net 119 "unconnected-(USB1-SBU1-Pad9)") + (net 120 "unconnected-(U1-PB8-Pad61)") + (net 121 "unconnected-(U1-PB9-Pad62)") + (net 122 "Net-(D74-A)") + (net 123 "Net-(D75-A)") + (net 124 "Net-(D76-A)") + (net 125 "/COL12") + (net 126 "/COL9") + (net 127 "/COL10") + (net 128 "/COL11") + (net 129 "/COL6") + (net 130 "/COL7") + (net 131 "/COL8") + (net 132 "/COL14") + (net 133 "/COL13") + (net 134 "/COL15") + (net 135 "unconnected-(U1-PC4-Pad24)") + (net 136 "Net-(LED2-DOUT)") + (net 137 "Net-(LED3-DOUT)") + (net 138 "Net-(LED4-DOUT)") + (net 139 "Net-(LED5-DOUT)") + (net 140 "Net-(LED6-DOUT)") + (net 141 "Net-(LED7-DOUT)") + (net 142 "Net-(LED8-DOUT)") + (net 143 "Net-(LED10-DIN)") + (net 144 "Net-(LED10-DOUT)") + (net 145 "Net-(LED11-DOUT)") + (net 146 "Net-(LED12-DOUT)") + (net 147 "Net-(LED13-DOUT)") + (net 148 "Net-(LED14-DOUT)") + (net 149 "Net-(LED15-DOUT)") + (net 150 "Net-(LED16-DOUT)") + (net 151 "Net-(LED17-DOUT)") + (net 152 "Net-(LED18-DOUT)") + (net 153 "Net-(LED19-DOUT)") + (net 154 "Net-(LED20-DOUT)") + (net 155 "Net-(LED21-DOUT)") + (net 156 "Net-(LED22-DOUT)") + (net 157 "Net-(LED23-DOUT)") + (net 158 "Net-(LED24-DOUT)") + (net 159 "Net-(LED25-DOUT)") + (net 160 "Net-(LED26-DOUT)") + (net 161 "Net-(LED27-DOUT)") + (net 162 "Net-(LED28-DOUT)") + (net 163 "Net-(LED29-DOUT)") + (net 164 "Net-(LED30-DOUT)") + (net 165 "Net-(LED31-DOUT)") + (net 166 "Net-(LED32-DOUT)") + (net 167 "Net-(LED33-DOUT)") + (net 168 "Net-(LED34-DOUT)") + (net 169 "Net-(LED35-DOUT)") + (net 170 "Net-(LED36-DOUT)") + (net 171 "Net-(LED37-DOUT)") + (net 172 "Net-(LED38-DOUT)") + (net 173 "Net-(LED39-DOUT)") + (net 174 "Net-(LED40-DOUT)") + (net 175 "Net-(LED41-DOUT)") + (net 176 "Net-(LED42-DOUT)") + (net 177 "Net-(LED43-DOUT)") + (net 178 "Net-(LED44-DOUT)") + (net 179 "Net-(LED45-DOUT)") + (net 180 "Net-(LED46-DOUT)") + (net 181 "Net-(LED47-DOUT)") + (net 182 "Net-(LED48-DOUT)") + (net 183 "Net-(LED49-DOUT)") + (net 184 "Net-(LED50-DOUT)") + (net 185 "Net-(LED51-DOUT)") + (net 186 "Net-(LED52-DOUT)") + (net 187 "Net-(LED53-DOUT)") + (net 188 "Net-(LED54-DOUT)") + (net 189 "Net-(LED55-DOUT)") + (net 190 "Net-(LED56-DOUT)") + (net 191 "Net-(LED57-DOUT)") + (net 192 "Net-(LED58-DOUT)") + (net 193 "Net-(LED59-DOUT)") + (net 194 "Net-(LED60-DOUT)") + (net 195 "Net-(LED61-DOUT)") + (net 196 "Net-(LED62-DOUT)") + (net 197 "Net-(LED63-DOUT)") + (net 198 "Net-(LED64-DOUT)") + (net 199 "Net-(LED65-DOUT)") + (net 200 "Net-(LED66-DOUT)") + (net 201 "Net-(LED67-DOUT)") + (net 202 "unconnected-(LED68-DOUT-Pad2)") + (net 203 "unconnected-(U1-PA6-Pad22)") + (net 204 "unconnected-(U1-PA4-Pad20)") + (net 205 "unconnected-(U1-PA7-Pad23)") + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "000dfb7f-44a5-494a-9ac5-86a31c02a7b5") + (at 87.6083 77.925 90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R6" + (at -5.41878 0 90) + (layer "F.SilkS") + (uuid "5c803ea8-0746-4b96-9d66-37036bc1327a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "22" + (at 0 1.65 90) + (layer "F.Fab") + (hide yes) + (uuid "0c6e83b1-5180-43be-ba21-6d50581fc23d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e428b04c-b6e8-4cbf-9775-5c95b954225f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "4ce2261c-817a-424c-aaab-6090e6e9fdfa") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/870bee74-1b94-44bc-97d7-e29667be0724") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c3e0e422-c52a-4dfa-ae6b-f685c246672b") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "97667ad7-df7f-461e-becf-a146a344f9bf") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5176b41c-1f6d-401b-9a8f-f09cb687e9e8") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6ac8f04a-7bea-43ce-b132-29157752207e") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4bf32de5-45ac-480e-9f00-eaeec0ccadba") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0cfe0005-9b18-4c57-aaf9-1eae3a5cd164") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "aa5ba483-ed7a-44a6-86f2-d76a1b8f0806") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4d96562f-2856-4a19-a583-8e10157b8439") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0ac60279-3e79-425d-b483-0bd419a51478") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "25b0e68a-685f-4f81-af2b-f0efa2e40b33") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "6fc2eece-42f5-4651-8409-6df0927c029f") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3d2c8926-6062-4446-bdd8-837a2f03cbec") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "b056427c-77c6-43d7-9844-7519a2261f55") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 88 "Net-(J1-Pin_2)") + (pintype "passive") + (uuid "ab4e6f41-2dd4-4a24-ae1c-2b4ccaf0dc91") + ) + (pad "2" smd roundrect + (at 0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 87 "/JTCLK") + (pintype "passive") + (uuid "bff945a1-7b0f-41f8-acb7-7b722b548642") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "08c66f77-924a-4d2e-9524-8d6859589a49") + (at 141.2919 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D36" + (at 0.2344 0.0081 90) + (layer "F.SilkS") + (uuid "04f2ed66-d566-4663-9021-f297a60d12aa") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0756 0.0781 90) + (layer "F.SilkS") + (hide yes) + (uuid "74ac3482-40ee-4ac0-8f3e-01d41a62b906") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c9301e90-f191-4941-8f0d-4cca4ed04459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "2d494941-eb1c-4e94-bccf-06bc518e7934") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/0b3bfe08-f3f3-4fed-8478-ac0aa3079848") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "153618c4-8d6a-4e6e-ba02-5a4985741144") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "150f4b00-e648-4543-85b8-13cd31d09991") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "397cff52-cd8f-421e-b80f-8cc372474286") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c6f87b73-98f5-43a4-9735-c67d42fab822") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9eb97b72-8aec-427f-acf7-195db39bd364") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "700505d9-f4a9-4a6f-ac05-6a9bca26e366") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "078935cf-4fa0-471e-b713-9b9e6fa63906") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3d37e088-04fd-4729-a318-452953996da0") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2b7d380f-9744-4ea3-9bef-35ac5a92d9ff") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "36384f60-befa-464d-841e-c373f8c9ecff") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6959b080-8949-4e2a-b80d-c4418feeccf3") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "0b1f05a8-7eda-40e6-ada8-3bb8e88fec2f") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "12857fe6-1ac6-477c-936d-2ffd4a0062bb") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 58 "Net-(D36-A)") + (pinfunction "A") + (pintype "passive") + (uuid "885b1915-fc4f-4726-ab3f-c0ccd279c67e") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "0b66a852-1c14-4fa4-8c13-5d1453dd8247") + (at 54.8513 77.95 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C8" + (at -5.075 -0.00005 270) + (layer "F.SilkS") + (uuid "44c1e062-d092-4d1f-aa7c-8f3faf75d4be") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "7dce9294-4101-45b8-80c3-31ee5c1f725c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "53d21e1d-b0ab-4783-9206-fad94a74780f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "8a7e473c-9560-4943-a78c-5f10455e8b37") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/35f94759-1894-4596-badb-3697130513d4") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1e21f21e-be2f-4c54-a6a6-f9a072de05f4") + ) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6545707f-971b-44a6-be8e-f0c04a4ced2d") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "85b11c26-7197-4355-8267-2dadffb89ead") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "02d9b520-c34c-425c-9c0a-722d0969d341") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e9cdd966-8e08-47d8-b0e7-1b6e717a5e35") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0458875f-2ec7-4f90-b442-61c9ed8a7e98") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "102d8d30-05dc-480d-8963-b31371709c34") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f262c0a2-dbc7-4d60-b2e8-a209d0ea4bab") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a5fa5820-e057-4b29-a34d-dd705b194ac3") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a5a062a3-7016-4610-a1d2-a6083608ed63") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "08bddd9e-bee6-4124-a612-3f52f79d04ee") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5f51c901-dbf4-48d4-b601-b20302f38ffd") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "a867e6bf-9238-49f4-9a11-bdef4ca473cf") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "382a578c-b46c-491f-97f5-4e7e31e82e26") + ) + (pad "2" smd roundrect + (at 0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 2 "+3.3V") + (pintype "passive") + (uuid "d9d7544d-a41b-4102-a569-e9268fc404cc") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "0c466174-f6ad-4447-88f8-34b613a531cf") + (at 216.3013 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D55" + (at 0.1744 -0.0113 90) + (layer "F.SilkS") + (uuid "bbaff364-1bf9-46ed-acaf-5979309b2492") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -7.9656 0.0487 90) + (layer "F.SilkS") + (hide yes) + (uuid "6d0949da-502c-4f4b-99d4-99f4c0437812") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "5c98822b-8061-492a-98d3-b3d95f725d77") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "003c0bb0-7540-4acd-a911-1794cdb0039a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/c9786b6b-2770-4710-83e4-1251929bc4f5") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e0908974-9885-4faa-8dcc-d49e032b84fa") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d149fae9-6b1c-4d4d-b3d6-f61eae5e77a6") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "181f6e66-7450-40b3-90ee-d873761adda0") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "358cfc72-dfc3-4e32-a247-fbc12dbbf298") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4b314e27-fd8f-4b68-b467-fe01da0db53d") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b3a7413e-bd47-425e-99de-88834910a6e3") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e88888a5-843f-46e8-b50d-ae9bf5acd70b") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7bd318d2-f4ed-4d62-ae57-d0e1d486e681") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0dd127de-3984-4113-ba58-b97383fb4502") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7266da09-2bc6-4704-82b2-7fbbf079a98d") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7ccee6c4-ada4-4261-87c2-30f9841a0a9a") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "4a57fad7-a3e1-47fe-990d-3ab51d4f76e4") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "f06ac047-45b3-4c8f-a274-6824e3b6a1ad") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 76 "Net-(D55-A)") + (pinfunction "A") + (pintype "passive") + (uuid "d6921b9d-e3cd-46b6-ac3d-c98d0d463a6d") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "0e6be63a-2e90-437a-8423-cee0c6138c76") + (at 257.9731 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D71" + (at 0.1944 -0.0031 90) + (layer "F.SilkS") + (uuid "d4837144-025a-464c-bd1b-6005b4e1e2dd") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1056 -0.0031 90) + (layer "F.SilkS") + (hide yes) + (uuid "8884d20c-856b-4b64-b1e4-7a98cf1b5060") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "6fed6d0c-6e05-467b-b377-9923a056480a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "9d147c4f-e18a-4b84-b4ae-4e3420a65d04") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/da9e2942-059c-42b7-8312-8cae19a84177") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "60dba2c1-6e30-4e62-940e-ca3475d9645f") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c3f9de8c-7751-4026-afdb-22a8a1d55a0d") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cbfb8397-120c-434b-96ed-2284cc92326a") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8482a4fd-c507-425c-bef4-a222e97a86d4") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8587a7b9-5c9b-40f4-9da4-2a15891d50b7") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0300b156-aa64-4253-a93a-5dc3dcbfac0f") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a7ffae75-b653-4bbb-8177-1fa4aa2a11a0") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0727fc92-4e88-425f-a903-1989a4caa7ca") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0fe40926-79aa-4648-bae3-d1d2c9dc417a") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "535fdcb6-a0d6-4f01-97e3-53e39a3a95ba") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a1005198-37ad-44d2-bb7b-41742ff118b1") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "3e8bd87b-63b9-4a07-82bf-5c9104e867b3") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "1dc04f37-06d8-4f07-be7a-6e9ba99fe775") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 112 "Net-(D71-A)") + (pinfunction "A") + (pintype "passive") + (uuid "5c2c59cd-bef1-4ead-804e-f30b381ca2bc") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "103083a8-148f-46d5-a7ec-4092d6e327ad") + (at 172.2481 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D38" + (at 0.2144 0.0219 90) + (layer "F.SilkS") + (uuid "67eb1e62-eb24-4d71-8a6a-e32ad885f47a") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0656 0.0619 90) + (layer "F.SilkS") + (hide yes) + (uuid "e90bd649-30c6-4af3-a37b-da304f1c091c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c51bacf7-c304-4de8-9928-a0aa9de700af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "82f066f4-ea40-43f2-acd0-1c0cf824e092") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/ab1f4c51-0794-4a1c-b3cc-4ba4f7dd2e8e") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6129affa-db6e-49f7-9fdf-df91ac26927b") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "07887531-ba14-467d-9b45-8feef31cd4e6") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2ea1f53c-c662-4597-a7cb-4752df1bcbfb") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dce3be8e-237b-48bc-aa00-e126722bc1cc") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e93a050c-2120-492b-a0f3-46efff3c0b15") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "81449b0e-bd56-452b-b098-2388ac380a5b") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2645f7bd-ee7a-42de-8b23-0be878b07608") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ecee7585-8db9-4da2-bb25-54c3d460849b") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "49ea8ff1-b207-4aa9-b32a-b3b8614e3ee4") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ea01bc7f-badc-4d7b-a156-a2d393d0d71e") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4d3d3934-809f-44e7-8532-2812a5307c9a") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "96eee313-cfc1-4b06-a9b6-fad29673f7d3") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "168752d9-1b8f-447f-823a-733ed7304195") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 60 "Net-(D38-A)") + (pinfunction "A") + (pintype "passive") + (uuid "1492ff8b-47e5-4e7f-9eaf-e26966aebcbe") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "14d35ec0-14c4-49e1-8ec1-126cf16dd61c") + (at 138.9106 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D22" + (at 0.2144 0.0294 90) + (layer "F.SilkS") + (uuid "d6a40018-1d3f-4159-bf07-4ac6ae2978dc") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0556 0.0894 90) + (layer "F.SilkS") + (hide yes) + (uuid "ede1ad87-27d9-462c-9782-1596b49dc497") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "4f1c2bb9-f636-4b69-8124-a0f21ee8d59a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a1c9a330-67c6-4fa1-ae70-5db619bbf0db") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/f1ac9d1b-9ccc-4ba1-b1a1-12b86f0e204e") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e4f497ad-b829-40a0-8f12-83170ae29ea1") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8a5f5cb4-6827-434d-b34e-a5b64fb00d72") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2f95d46d-3f1f-4644-b2d9-31427d75fa32") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e3bac691-e750-48fd-a62f-55baa52696a1") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8e20ea7c-476a-41a3-b845-4c18134789fa") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d07e743-69ad-4f3a-a113-cdedb1804e46") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c3c91b76-66a3-45e0-bb19-b7d03ab88d50") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f69626c8-f9f7-419e-89b7-5b073780213b") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3239821a-ddd2-43db-aba6-ac586d5ebaa1") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7ea62b8e-3dbb-4133-8dfd-cae0ec36ab90") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "29eaae88-d5ab-41a4-91b1-6c9b861d8936") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "46b8ed0e-885f-4c59-869b-f8b2272d5ac3") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "04d8b775-87db-48da-9adc-b7b5344dcb9f") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 23 "Net-(D22-A)") + (pinfunction "A") + (pintype "passive") + (uuid "709f8bc9-c648-454a-84de-b68837e49216") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:STAB_MX_P_2u" + (layer "F.Cu") + (uuid "1684dec3-a7fc-4a6d-a4d3-42bc71c0eb33") + (at 318.695 97.6312) + (descr "Footprint for Cherry Clip/Screw in type stabilizers, 2u") + (property "Reference" "S3" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "65ef7bd0-3b68-4f28-b049-dd905605604b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_stab" + (at 0 8.128 0) + (layer "Cmts.User") + (uuid "90c6d31f-b3ef-4266-9d0c-8e4d61fb168a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "97120d98-c614-4fae-ad7f-27d5fd18f3ec") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "da7de32d-5476-4e9f-8b5e-75be8f5ba4c0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8d5b1b13-433e-4172-99dd-087f80a0e93a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole exclude_from_pos_files) + (fp_line + (start -19.05 -9.525) + (end -19.05 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6ede02a0-4e78-4241-b617-354ece06dd8f") + ) + (fp_line + (start -19.05 -9.525) + (end 19.05 -9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "77b3cf6a-58f5-49d8-a2fc-ec7d1a4d725a") + ) + (fp_line + (start -19.05 9.525) + (end 19.05 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5ceee9db-8966-4372-9968-30ec4dfece68") + ) + (fp_line + (start -7 -7) + (end -5 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ec2adc06-0904-459b-808f-7d61aa29a2ba") + ) + (fp_line + (start -7 -5) + (end -7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "83801e20-bcc1-47c5-b251-d5ee7ed17baa") + ) + (fp_line + (start -7 7) + (end -7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "53bfd824-410d-4d47-b688-b42bd109953a") + ) + (fp_line + (start -5 7) + (end -7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "421a0036-2e2e-481b-a15e-dc4c06a5face") + ) + (fp_line + (start 5 -7) + (end 7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f0a5f131-2839-40c9-a7e9-63809110101e") + ) + (fp_line + (start 5 7) + (end 7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8800afcd-52e9-4fab-87d0-ace8541e5c03") + ) + (fp_line + (start 7 -7) + (end 7 -5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "332bbaad-9f41-4f95-abda-925d70364e44") + ) + (fp_line + (start 7 7) + (end 7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ae64d021-04a0-4786-970c-bbdcc9510a65") + ) + (fp_line + (start 19.05 -9.525) + (end 19.05 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "91e61348-6471-4472-8255-dd349bc08809") + ) + (fp_line + (start -15.28125 -5.499999) + (end -15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9d017b94-7450-41b3-801b-4a40ed7f034e") + ) + (fp_line + (start -14.78125 -5.999999) + (end -9.03125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "91cb598d-b90b-485a-a4fa-7a05926989dd") + ) + (fp_line + (start -14.78125 8.000001) + (end -9.03125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cadedf76-a397-48ad-b997-4569eb761a71") + ) + (fp_line + (start -8.53125 -5.499999) + (end -8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5473a5f1-7fd7-4efe-84c2-9e0fca6fa728") + ) + (fp_line + (start 8.53125 -5.499999) + (end 8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6d9153a5-e580-44a9-91d2-ab5db708018b") + ) + (fp_line + (start 9.03125 -5.999999) + (end 14.780039 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "91445a57-4435-4319-b4c6-91da73cf5fcd") + ) + (fp_line + (start 9.03125 8.000001) + (end 14.78125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9bb6b8c4-501c-4254-b631-305bc5fd7898") + ) + (fp_line + (start 15.280039 -5.499999) + (end 15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2c76b7dc-6099-4d45-b1b5-d7130f7839db") + ) + (fp_arc + (start -15.28125 -5.499999) + (mid -15.134803 -5.853552) + (end -14.78125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "00faed6e-1a16-4592-8049-480a4486b41d") + ) + (fp_arc + (start -14.78125 8.000001) + (mid -15.134803 7.853554) + (end -15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "04c310d6-5c08-4eb8-9dbf-f79592cb2b8d") + ) + (fp_arc + (start -9.03125 -5.999999) + (mid -8.677697 -5.853552) + (end -8.53125 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6e839cae-d5f9-4af4-9aba-3c71665c1923") + ) + (fp_arc + (start -8.53125 7.500001) + (mid -8.677697 7.853554) + (end -9.03125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ddfaf69b-0621-4b3d-934f-69a3c7b7edf3") + ) + (fp_arc + (start 8.53125 -5.499999) + (mid 8.677697 -5.853552) + (end 9.03125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2a499e27-22de-489f-b71d-3d85b8207568") + ) + (fp_arc + (start 9.03125 8.000001) + (mid 8.677697 7.853554) + (end 8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8c922394-c780-4936-adef-1e1abb274134") + ) + (fp_arc + (start 14.780039 -5.999999) + (mid 15.133592 -5.853552) + (end 15.280039 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c573f155-9878-4870-8761-d866792a5db2") + ) + (fp_arc + (start 15.28125 7.500001) + (mid 15.134803 7.853554) + (end 14.78125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b0e9633f-226a-4132-87e0-86fdab386594") + ) + (pad "" thru_hole circle + (at -11.90625 -6.985) + (size 4 4) + (drill 3.048) + (layers "*.Cu" "B.Mask") + (remove_unused_layers no) + (uuid "b14ead98-0936-41fd-800e-2a48f5be7cfe") + ) + (pad "" np_thru_hole circle + (at -11.90625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "993eacdf-8f37-4e2c-8056-6ab713e78fcb") + ) + (pad "" thru_hole circle + (at 11.90625 -6.985) + (size 4 4) + (drill 3.048) + (layers "*.Cu" "B.Mask") + (remove_unused_layers no) + (uuid "19131ad4-6521-4000-aa49-0110d06d7ae5") + ) + (pad "" np_thru_hole circle + (at 11.90625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "9aed2d43-a297-4c29-b01d-6212b5074978") + ) + (group "" + (uuid "130c50e4-6655-4343-bb22-218f0967daac") + (members "2a499e27-22de-489f-b71d-3d85b8207568" "2c76b7dc-6099-4d45-b1b5-d7130f7839db" + "6d9153a5-e580-44a9-91d2-ab5db708018b" "8c922394-c780-4936-adef-1e1abb274134" + "91445a57-4435-4319-b4c6-91da73cf5fcd" "9bb6b8c4-501c-4254-b631-305bc5fd7898" + "b0e9633f-226a-4132-87e0-86fdab386594" "c573f155-9878-4870-8761-d866792a5db2" + ) + ) + (group "" + (uuid "66ffd91e-7bff-4713-aaae-0e3532c7e696") + (members "00faed6e-1a16-4592-8049-480a4486b41d" "04c310d6-5c08-4eb8-9dbf-f79592cb2b8d" + "5473a5f1-7fd7-4efe-84c2-9e0fca6fa728" "6e839cae-d5f9-4af4-9aba-3c71665c1923" + "91cb598d-b90b-485a-a4fa-7a05926989dd" "9d017b94-7450-41b3-801b-4a40ed7f034e" + "cadedf76-a397-48ad-b997-4569eb761a71" "ddfaf69b-0621-4b3d-934f-69a3c7b7edf3" + ) + ) + (embedded_fonts no) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "18c63fa8-037f-40eb-a6f9-c19116f705a4") + (at 237.7325 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D29" + (at 0.1544 -0.0225 90) + (layer "F.SilkS") + (uuid "4be6ab20-187d-44da-a88e-0c3ef44fc86e") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2556 0.0275 90) + (layer "F.SilkS") + (hide yes) + (uuid "bab19db8-36a6-4d22-b4eb-e3779d70833d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "81f0ec54-8369-4239-a626-6a43dc583b89") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7aefb178-01d1-4b9c-ab64-108709456717") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/ccc74562-6661-4570-befb-02e4c9b238d7") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "72171ce6-414e-4f9a-9fec-12d7f3dff8d5") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e0a9f124-8ae6-48d8-94c3-2a15f6dc2a37") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "647cabfb-3099-468a-a4d1-854845851a43") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c060857b-cd3e-4a83-b9b1-4c7aad57a644") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a73e0471-14e2-4fa9-9774-d972f1aff24d") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5cb69590-eeb0-4d34-9704-f159523dba84") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d1910271-d91f-461e-a77d-e5e0a5792b35") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "91f19243-134f-49fb-803d-29a3e8082c76") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "eaafc88f-ed39-44f7-abb5-06253362a837") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d02b04d4-81fa-4454-abc6-702753c2f655") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "249ac1b9-9996-4d58-bee2-9bdff7e53f55") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "48dbea3a-4b33-4564-9d44-22d55838edcf") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "3ed07aa8-4c35-49e0-9c33-c4b8b4bb00ab") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 25 "Net-(D29-A)") + (pinfunction "A") + (pintype "passive") + (uuid "8d3eba6e-3e93-45b2-a8c2-f4b8e651e2b8") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "1e80dffe-ad70-418b-bd1d-84d0bf4f2f84") + (at 100.9513 65.025) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R13" + (at -2.93705 0 270) + (layer "F.SilkS") + (uuid "465a6321-d00e-4a59-a99c-5499668e083e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "DNP" + (at 0 1.65 0) + (layer "F.Fab") + (hide yes) + (uuid "c71bbe99-5bdd-4a07-83c0-2559f527a2f1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "00dee7af-751f-4165-8523-12a2443c3949") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b8ebf762-ca9b-49b0-be56-b2413c123402") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/db62a6df-f2f1-4431-8846-a6dc2b8040af") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b1fd003d-f046-483a-94aa-02d36298cbf4") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7f544699-12b0-49c7-928c-8468275435b3") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3c1edade-c722-46d6-86a4-d1d96dea9a03") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c674c1f8-1269-4e12-9333-2bcd9c6e8986") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ab98ad2a-7aca-44db-969e-ac39874a9608") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d96293ff-8f97-496f-a035-eae6641a304d") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0e1a2259-4ee8-42e3-8e43-eb934096195c") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "855d6a39-df3f-4ffb-b623-77ef7da9ab07") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "45710e4d-c9b6-4b92-8fc0-7834c3771a33") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8483b6b0-bb37-4efd-b1a6-4976db2b1780") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "6566fce8-d267-4092-95bd-1bc5bcc6ff0f") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2686beea-a676-401f-80fc-ea5eb7b30549") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "559d871c-9113-443e-a440-17bd5120ca25") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 46 "/NRST") + (pintype "passive") + (uuid "46accfac-bc0e-4e33-aa03-bc36a3ca23d5") + ) + (pad "2" smd roundrect + (at 0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 2 "+3.3V") + (pintype "passive") + (uuid "34ac4af3-256f-4c09-b23b-3e59db1532e0") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "1fdd6bda-1b73-4e7a-b7ae-4e1c33843811") + (at 123.4325 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D18" + (at 0.2144 -0.0425 90) + (layer "F.SilkS") + (uuid "bfbb1115-37f7-4911-a2dc-4dd97e4e273c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0356 -0.0425 90) + (layer "F.SilkS") + (hide yes) + (uuid "1ad3421c-286e-49d6-8395-a692057822e4") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "6901647e-5df6-4ef0-aeaf-fced3653d5cd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "97217cb2-64b2-4b12-8628-83cb5ed5fcfd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d615d698-1eed-4b63-a315-e33f547b2da8") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f5f0f1e8-bf0a-405f-8ddb-74aea57c74a3") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ea733494-3e21-491a-8cd3-28b91a13ed99") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3d74cb59-b731-43c0-9285-2f8c055ae956") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "20b7b411-9355-407d-82eb-f5e617cc2250") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8b0074af-6fdf-4642-a330-555e8af3a669") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "47dfa0e9-8f82-4289-a618-c66e39abf1b5") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b3321eb8-6695-41b1-a894-b81eb5dde441") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9f69c4a1-639d-4bc1-a416-3f7de81ebdd5") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "03e44380-43ae-4825-a3d5-8a51d22407e9") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "905d2b2e-0f18-40f8-a702-bc2a0a103214") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e7fb11a7-b7f4-4967-9dbd-e5fcda1b8e08") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "bd7bf93f-10db-4677-b82c-e884c6981d39") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "069dd572-2790-473e-80f0-dade9307fdc8") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 19 "Net-(D18-A)") + (pinfunction "A") + (pintype "passive") + (uuid "f319ed6b-8e01-4ea5-9285-c715e590641d") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "23126ec3-755e-49bf-a560-de34106f1381") + (at 121.0513 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D3" + (at 0.1044 0.0387 90) + (layer "F.SilkS") + (uuid "0eb1957f-b79e-4606-9426-16e4063d0aae") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0056 0.1187 90) + (layer "F.SilkS") + (hide yes) + (uuid "e742859b-8466-4c28-8b96-0a7d2b9dec8c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "054cd2bd-3894-464b-b03c-5627abbc2903") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "6eb16638-1fbe-4f4c-9537-fdbfe7ed7659") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/aa9aa5a0-3cdd-4e35-b82b-98d57c94fef8") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5d851f29-2eef-460d-85ec-976ddc40f091") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9743a1ba-4d19-452b-b836-a449190d675b") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3420e552-2c87-4eb8-85ab-3a89ab08022b") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "776bba7c-182d-433a-bba5-f6d7fbc1d1e5") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ad27735c-0f9e-49da-b036-7d64b6e5e45d") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6a282e12-a2e7-4779-99c1-deb877186afb") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "292abd93-c90d-4af7-9b5b-c1b7b8f64bff") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "011ecc74-ef46-41f8-bdef-59ba7a648e25") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "456468a6-f11a-412a-b6c8-1d54b96bdae1") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "db78c6cf-6f7f-47bc-b309-0840b8900f7e") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "17dd4640-232b-4539-ac58-93425a2a153b") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "54b17f2e-fb98-45a9-9293-d31aba6f25cb") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "95936996-9009-4a3e-aabd-65b4a7363630") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 4 "Net-(D3-A)") + (pinfunction "A") + (pintype "passive") + (uuid "b3f2ac49-d755-4ee2-8a7b-4e4aef9f7f4f") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" + (layer "F.Cu") + (uuid "24f328ab-5a93-40db-86e8-6400f22bccc9") + (at 63.9013 173.8939) + (descr "Kailh keyswitch Hotswap Socket plated holes Keycap 1.25u") + (tags "Kailh Keyboard Keyswitch Switch Hotswap Socket Plated Relief Cutout Keycap 1.25u") + (property "Reference" "KEY_CTRL1" + (at 4.52 -8 0) + (layer "F.SilkS") + (uuid "619c087a-56b3-4ee0-90a1-0c0feb0f493d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 8 0) + (layer "F.Fab") + (uuid "e3a0454c-ced7-4cf0-87d3-5e1237713ce6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6ad4a012-95d3-4e76-b0c1-51ec92746842") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "00a7c916-69c5-4b98-80cf-1483a218179a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/380eb14e-171a-477c-b03e-86a44aefe3d2") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start -7.1 -7.1) + (end -7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3f0a9fa0-263e-4f40-b5fb-e6d3b5917397") + ) + (fp_line + (start -7.1 7.1) + (end 7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "be2ee983-5f04-4f0d-9e29-16526a3bdea7") + ) + (fp_line + (start 7.1 -7.1) + (end -7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9076e2e7-81f8-41ea-a240-86aae3edba09") + ) + (fp_line + (start 7.1 7.1) + (end 7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d756b5c0-e435-4a59-aa6e-0e8086b932b3") + ) + (fp_line + (start -4.1 -6.9) + (end 1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "507cd3b6-7fcd-4352-ac4c-f91ab5e63e79") + ) + (fp_line + (start -0.2 -2.7) + (end 4.9 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "cb6d2eb9-9255-4258-8f15-dd6e835a081e") + ) + (fp_arc + (start -6.1 -4.9) + (mid -5.514214 -6.314214) + (end -4.1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "549fac81-24a7-4625-8375-fceca563e26a") + ) + (fp_arc + (start -2.2 -0.7) + (mid -1.614214 -2.114214) + (end -0.2 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "8f908063-5497-429e-8085-0c2ecde0d243") + ) + (fp_line + (start -11.90625 -9.525) + (end -11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "99e6bdbf-8e59-4ee5-94bf-e6d68cd30354") + ) + (fp_line + (start -11.90625 9.525) + (end 11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "30ee13d8-33f0-4e54-97f2-b5cd07e7145b") + ) + (fp_line + (start 11.90625 -9.525) + (end -11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "49765d2a-52c2-453d-9c41-471a935447c3") + ) + (fp_line + (start 11.90625 9.525) + (end 11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "d30ce806-43c9-4b70-87a5-c7388b683490") + ) + (fp_line + (start -7.8 -6) + (end -7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "d951650b-8b13-4818-936a-96455d061f5c") + ) + (fp_line + (start -7.8 -2.9) + (end -7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "ecde8939-77e3-46be-a149-91fc4f4d44e3") + ) + (fp_line + (start -7.8 2.9) + (end -7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "c4a416b8-b41b-4e4b-8049-38d0087e585e") + ) + (fp_line + (start -7.8 6) + (end -7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "74dad145-8c95-4627-909d-68fdf2f54aa1") + ) + (fp_line + (start -7 -7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "b99c477c-d601-4833-a7cb-99b0114a8f88") + ) + (fp_line + (start -7 -6) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "f19c29bb-ad5d-4f1a-adfe-43585692bc6f") + ) + (fp_line + (start -7 -2.9) + (end -7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "4b05effa-cd8a-4ea6-aa0f-f161b2287ede") + ) + (fp_line + (start -7 2.9) + (end -7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "6c091ea5-120c-44ba-8b16-8e7374523a6a") + ) + (fp_line + (start -7 6) + (end -7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "cdc8f105-2444-4fa8-9af7-3aa3b424ae9a") + ) + (fp_line + (start -7 7) + (end -7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "ae8bdd29-97b3-4875-a563-e4efb9209a38") + ) + (fp_line + (start 7 -7) + (end 7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "854b45cb-1682-443c-b2f5-907261340bc1") + ) + (fp_line + (start 7 -6) + (end 7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "99cfcfb1-6e70-4bfd-8499-32e62d67c533") + ) + (fp_line + (start 7 -2.9) + (end 7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "913296aa-e45f-4dd5-a746-5712adb90987") + ) + (fp_line + (start 7 2.9) + (end 7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "1640fdc6-c1fd-4370-aab6-260f922b677e") + ) + (fp_line + (start 7 6) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "316bc6b9-aefd-493b-9897-650a29dc88b0") + ) + (fp_line + (start 7 7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "09f93926-b6be-47e2-81ba-57f30e2428fc") + ) + (fp_line + (start 7.8 -6) + (end 7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "65b2e75d-8755-4f46-b7be-1758356e28b8") + ) + (fp_line + (start 7.8 -2.9) + (end 7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "1827df58-0673-478f-9185-9bcd37f6215a") + ) + (fp_line + (start 7.8 2.9) + (end 7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "161cb8e1-5efa-433f-a908-235d6715eb46") + ) + (fp_line + (start 7.8 6) + (end 7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "febbd9da-a677-4f64-86a8-2ab89b4b8120") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f3081fb0-f1f5-4ddf-9109-6100d7cac2f2") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "13a3b63e-0f30-49ce-ae3f-ca8e1ba7733e") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e516570c-1d95-49c6-b669-0631f4fbe6a1") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bcac29e9-7825-4844-98f0-7dc67582dc14") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "492a7ec2-d27d-4dc6-9c7c-b139811eaa02") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a7404fa0-ae3d-4ce0-b61c-25c12c8ae1d7") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "621f900e-05ea-4ca9-871e-8885943a3ca7") + ) + (fp_line + (start -7.25 -7.25) + (end -7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "64a91a25-7749-4ba2-84a1-1a2f7e786e33") + ) + (fp_line + (start -7.25 7.25) + (end 7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "040bedcd-a3ae-4f53-a05d-7e60ef82bc79") + ) + (fp_line + (start 7.25 -7.25) + (end -7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c7ebef56-e0b8-417b-9b8c-64f4d0008795") + ) + (fp_line + (start 7.25 7.25) + (end 7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "03cbcd1d-8138-4158-8d27-e438bbc269b1") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0148d5f3-8497-407e-9b35-0f049b43d483") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e1c27cdc-efd6-40fe-8c30-ae388f4ccf24") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "357c57d1-2179-4083-b47a-e9824c88215b") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "955c32d5-228b-4565-b77a-7a414638f17a") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "13e94915-8b91-467a-8aa9-ff79a48e81a2") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cd54a535-33b5-445c-84bd-defd5fc7ccb1") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8644935c-55c2-42f2-a2bd-f07403f070bf") + ) + (fp_line + (start -7 -7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "acb33ec9-ba1f-466d-9dcd-6c868da20dd1") + ) + (fp_line + (start -7 7) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4b3d8d80-a54f-4765-a6fa-e063af2e2f8e") + ) + (fp_line + (start 7 -7) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "608def1a-8d86-4d51-9cee-08fb8539c7f9") + ) + (fp_line + (start 7 7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1a3d39ac-65e4-4ac5-b214-17c3cdd7f96b") + ) + (fp_text user "${REFERENCE}" + (at 4.52 0 0) + (layer "F.Fab") + (uuid "8e8ab79a-7ffd-47fa-b7c7-d7d41b9b1554") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" smd roundrect + (at -7.085 -2.54) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "3b039bad-eb4d-41a0-b98e-efe0c2001879") + ) + (pad "" np_thru_hole circle + (at -5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "6a754820-0ab5-433d-9a13-53892caafba2") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 4 4) + (drill 4) + (layers "*.Cu" "*.Mask") + (uuid "1e99587e-12bf-46f7-90a8-89459c855cc6") + ) + (pad "" np_thru_hole circle + (at 5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "0a6aedae-5d85-4bc0-b92b-afd2a79c1128") + ) + (pad "" smd roundrect + (at 5.842 -5.08) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "98cf97c1-ae69-4244-b898-e49d04b8a88b") + ) + (pad "1" smd roundrect + (at -6.585 -2.54) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "8faedc3d-a97b-4927-be64-e0faa9c2a6ec") + ) + (pad "1" thru_hole circle + (at -3.81 -2.54) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "20ea3544-e482-4dac-b589-0a5f07b6e3b0") + ) + (pad "2" thru_hole circle + (at 2.54 -5.08) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 22 "Net-(D21-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f4ab533d-1b0f-494e-87ad-ba070400dadf") + ) + (pad "2" smd roundrect + (at 5.32 -5.08) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 22 "Net-(D21-A)") + (pinfunction "2") + (pintype "passive") + (uuid "417961db-bd34-4a29-a862-7cb6ba79c0d0") + ) + (embedded_fonts no) + (model "${KICAD6_3RD_PARTY}/3dmodels/com_github_perigoso_keyswitch-kicad-library/3d-library.3dshapes/SW_Hotswap_Kailh_MX.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "2590d1db-20f0-4dd1-babc-dcda530ae558") + (at 154.3888 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D23" + (at 0.2044 0.0212 90) + (layer "F.SilkS") + (uuid "9fc85429-60e8-4407-a650-c1d47a8b7d19") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0856 0.1212 90) + (layer "F.SilkS") + (hide yes) + (uuid "e3dc7259-4837-480e-b68d-389ecad8a3ed") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a5ddff86-a4b3-4fe6-a36a-06ed5daca196") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "61d909ec-5f3c-4aa6-9760-e06274764fb1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/54df50b9-06c0-4bad-969c-c536a768ae38") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b3cae1d9-69ef-4624-b57f-c3ef3974528b") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d01ba7b-6f42-4495-a89d-4c28d50e8ad9") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "13800983-c8ce-4a27-8341-5edec96e40c1") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4eb00c0c-c17b-4c69-825a-ad0231df0156") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e946c1b9-952f-4e55-92b2-d3d59b699015") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a4086b59-fb2b-4771-bf0e-d2582ac627da") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "76f83a0f-f83b-4be4-8ffa-6476166954a2") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4edcbaba-09c2-40c5-a413-aa2caee815bb") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c895831f-a1b2-417c-a596-7c3e05510ba2") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7968f677-a13c-4d20-9be9-5766c8701bae") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e151326d-7fba-4c8e-8381-bb07d77427ce") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "cf11d081-bd8c-4c25-b396-e65fb1312a89") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "8ed0d8d4-3924-47eb-9723-1fc1173724e7") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 24 "Net-(D23-A)") + (pinfunction "A") + (pintype "passive") + (uuid "75a91526-651a-43d7-a944-03f22e5a5581") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" + (layer "F.Cu") + (uuid "273b5807-ee6d-4783-a26f-2a69711ae8b6") + (at 182.9638 173.99) + (descr "Kailh keyswitch Hotswap Socket plated holes Keycap 1.25u") + (tags "Kailh Keyboard Keyswitch Switch Hotswap Socket Plated Relief Cutout Keycap 1.25u") + (property "Reference" "KEY_SPACE1" + (at 4.52 -8 0) + (layer "F.SilkS") + (uuid "5be04c3a-c07a-4c26-9785-a09a67c361f7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 8 0) + (layer "F.Fab") + (uuid "aaeb4922-13a2-40cb-ae87-098ddb1498cc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "a7553be1-eac0-42cb-bfaf-da2e609e9e3c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "ae8223ca-0acd-462d-895b-c7e13ef9e4a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/982cf5c3-8db9-4e96-b717-e55e7261bc70") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start -7.1 -7.1) + (end -7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "44bc184e-8764-4f4b-a032-19fab3f0a311") + ) + (fp_line + (start -7.1 7.1) + (end 7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0c6f2301-72b9-4a9e-8276-8964077fafd2") + ) + (fp_line + (start 7.1 -7.1) + (end -7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5a7ed3b6-1a98-468d-a6d2-4c3d0649f9ae") + ) + (fp_line + (start 7.1 7.1) + (end 7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "af41a6b6-fdb6-4715-a55f-818d08e2c591") + ) + (fp_line + (start -4.1 -6.9) + (end 1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "41ebd9ef-69b7-4ff7-9545-e9e920f8b1fc") + ) + (fp_line + (start -0.2 -2.7) + (end 4.9 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "8e8dab91-e2d9-4016-86c8-ee2d6a9486e4") + ) + (fp_arc + (start -6.1 -4.9) + (mid -5.514214 -6.314214) + (end -4.1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "3f5b88ac-d30b-494c-abe9-ccb8d3feefe8") + ) + (fp_arc + (start -2.2 -0.7) + (mid -1.614214 -2.114214) + (end -0.2 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "0596ac17-ad58-4bc8-91e5-8fd73fc7dbda") + ) + (fp_line + (start -11.90625 -9.525) + (end -11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9279a84b-9f71-4147-8f5e-14b20b911afa") + ) + (fp_line + (start -11.90625 9.525) + (end 11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2cf9bf23-974a-47b9-8fc7-8d9a85bfaeaa") + ) + (fp_line + (start 11.90625 -9.525) + (end -11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4bae7a84-fb04-43a0-ac5a-fe169fec3acb") + ) + (fp_line + (start 11.90625 9.525) + (end 11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4ec2b9e6-a269-4f58-a6df-ed7367146e2a") + ) + (fp_line + (start -7.8 -6) + (end -7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "8c83662f-23ab-4d4d-96ce-942e0ea57d70") + ) + (fp_line + (start -7.8 -2.9) + (end -7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "5e86d0e3-b6e4-4124-ac12-812d54644771") + ) + (fp_line + (start -7.8 2.9) + (end -7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "2e642af3-2718-4e8a-b2a4-3d4b54a4943c") + ) + (fp_line + (start -7.8 6) + (end -7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "db7528e5-bc5d-4b5a-9156-47b35af4ecb7") + ) + (fp_line + (start -7 -7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "f504c84d-2529-4a14-bf67-47e58e803357") + ) + (fp_line + (start -7 -6) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "5225b308-bcb0-4b48-b637-c902997a742a") + ) + (fp_line + (start -7 -2.9) + (end -7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "960e3964-ad8b-4062-bcb8-8c07f1f5176b") + ) + (fp_line + (start -7 2.9) + (end -7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "b0743814-10ff-4ce1-b250-2a4bbe123061") + ) + (fp_line + (start -7 6) + (end -7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "67d81017-5512-43f1-afce-d570f5316ae7") + ) + (fp_line + (start -7 7) + (end -7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "89e7e87a-4bb7-4823-8d88-4489a2f43e91") + ) + (fp_line + (start 7 -7) + (end 7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "dbb6ecd2-141e-41d9-b8e9-565be2d02c9c") + ) + (fp_line + (start 7 -6) + (end 7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "ef274727-cfd8-46c8-be74-2c0ccf80c30a") + ) + (fp_line + (start 7 -2.9) + (end 7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "739f596e-f81b-45ee-980c-750e0d80e58b") + ) + (fp_line + (start 7 2.9) + (end 7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "29098cbe-7fb8-451a-95ad-f22f11d9847d") + ) + (fp_line + (start 7 6) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "36bf017e-49ab-4716-9ea7-c7b798fcf8d8") + ) + (fp_line + (start 7 7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "2cd23962-3d47-405a-8936-d68e2d65dd7e") + ) + (fp_line + (start 7.8 -6) + (end 7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "1f9dcfd2-824a-4c9a-9e84-72597213fcdd") + ) + (fp_line + (start 7.8 -2.9) + (end 7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "3b086214-9a0c-4d2a-bf66-6b1176c546f8") + ) + (fp_line + (start 7.8 2.9) + (end 7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "35f0b685-5344-4479-ab66-12389fc34f81") + ) + (fp_line + (start 7.8 6) + (end 7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "1f10d64d-ff2f-4b01-9c18-8ce9ab6d79c4") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2c7167cd-936d-4ec0-81c5-45ac1d0de386") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "173fb6d0-abb1-47ff-8f77-c28bef0c7148") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1e457e19-c15a-4509-9ec3-6baeeb6177ef") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f62ec848-563e-4ca1-a7da-1d330aa2da42") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "56801f19-a959-4901-8e32-1f33ee1eb293") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "43f59630-bad4-48df-9b32-71f81711d5f7") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b01687a2-6477-499f-8995-aafcfa5501e0") + ) + (fp_line + (start -7.25 -7.25) + (end -7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "bee422b1-e01d-4e27-9a0f-24b5af2f2408") + ) + (fp_line + (start -7.25 7.25) + (end 7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1c3367e4-b888-45fe-b1e4-a8f38f2092c9") + ) + (fp_line + (start 7.25 -7.25) + (end -7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "94c7eb69-fb85-41e7-bd15-0f54114bc07a") + ) + (fp_line + (start 7.25 7.25) + (end 7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8362b5da-8fe0-4b97-9820-cc91e7c81f2b") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "95b5d8db-1986-4af8-b644-d445d9c88d35") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3642a6a5-e23e-4a15-8d51-4958b411d2cb") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "09b8b817-8986-403f-ad5e-af66703f92a9") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9c2e804b-80ec-4f5d-a25e-3363a3e7f16c") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f59ad84c-1d6e-41cc-8c45-938dae22aa9a") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e5772eb8-7475-46d1-b334-3f1a1c29058a") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c7283376-cb16-4250-bf4f-9c39eb0860f4") + ) + (fp_line + (start -7 -7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d4c2a8a9-afe9-422c-ab6a-faed49b1184a") + ) + (fp_line + (start -7 7) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "92f86320-6906-49f8-9298-63f0be1a6fd7") + ) + (fp_line + (start 7 -7) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "cd09dc1f-2e85-4df7-a0db-64f7189f28b5") + ) + (fp_line + (start 7 7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3337b24c-d586-4498-99a5-d47d4304dcfb") + ) + (fp_text user "${REFERENCE}" + (at 4.52 0 0) + (layer "F.Fab") + (uuid "9c52ee37-3b2d-4b20-a0a8-12e7a5d39efe") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" smd roundrect + (at -7.085 -2.54) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "d03a140e-b64f-4ebf-8710-c20003d40dd1") + ) + (pad "" np_thru_hole circle + (at -5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "57cbd5a8-6b1f-438f-b539-8a6fd8a05b0c") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 4 4) + (drill 4) + (layers "*.Cu" "*.Mask") + (uuid "2ee20983-22c6-453b-9de3-9d0729d958e6") + ) + (pad "" np_thru_hole circle + (at 5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ba6e04aa-2a71-4d2b-8057-4dac4c7f20b1") + ) + (pad "" smd roundrect + (at 5.842 -5.08) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "8815acda-d9af-480a-b3b6-63f61c79f96f") + ) + (pad "1" smd roundrect + (at -6.585 -2.54) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "1373cd35-a2b8-4044-a88a-897b9e92ed5f") + ) + (pad "1" thru_hole circle + (at -3.81 -2.54) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "10066390-3540-4ed3-b05a-95c1ef17f6b0") + ) + (pad "2" thru_hole circle + (at 2.54 -5.08) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 110 "Net-(D68-A)") + (pinfunction "2") + (pintype "passive") + (uuid "740424e6-75c4-465f-91d7-45367ce05b4a") + ) + (pad "2" smd roundrect + (at 5.32 -5.08) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 110 "Net-(D68-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0f1d08b1-2fce-4bb1-a90a-7ff0178be488") + ) + (embedded_fonts no) + (model "${KICAD6_3RD_PARTY}/3dmodels/com_github_perigoso_keyswitch-kicad-library/3d-library.3dshapes/SW_Hotswap_Kailh_MX.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "2824508d-e2b5-423a-95f4-7759545667cb") + (at 271.07 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D59" + (at 0.1644 -0.0081 90) + (layer "F.SilkS") + (uuid "3095d477-aa38-467e-8a4b-e8c8718ca356") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1656 0.0619 90) + (layer "F.SilkS") + (hide yes) + (uuid "e6b15551-9eb3-46ff-9573-8f32ca805e67") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1fb896b3-a8bd-4122-a0fc-2ca2cab89f7a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "dc16579a-4a31-4c03-8642-9ec77df627d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/6a4c873b-9302-4d0b-ab6e-4b2daf93931a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "148da5a7-01fd-4972-b9c5-fa3f7a83f97c") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0ec91b79-c58f-4ee2-a295-0c6315d67911") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "49b9ac25-3899-47f9-bd42-89427f7eef0b") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "02174b7e-decd-4c54-9a55-370bf60df9c0") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a92d6ed2-d3b2-4ca6-9e3d-04caecc4e564") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f7e13ef1-ba8d-4331-8000-6e180bd7d28a") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "699b37b1-4e2a-4d58-b015-4ea4c7d0b0b3") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0992fdbf-b1c8-4780-a90c-321dd5d135c3") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "16b2d48a-0ac9-4c3a-b295-ce9efd0be9f8") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "69fad9e3-869a-4689-b00a-203232925f18") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6b43b7f9-96c3-4951-8a44-a5783e8bdd0c") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "3053cbe8-6eb2-47eb-8709-0c051371033f") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "0ad7ba85-b72c-4000-b2cc-920e30f77c3b") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 98 "Net-(D59-A)") + (pinfunction "A") + (pintype "passive") + (uuid "01583fb2-43e0-456a-921d-0d1b7a0cb252") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "2ae8ae32-da78-42f9-a5d0-0f58d7e8aa63") + (at 161.5325 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D65" + (at 0.2044 0.0075 90) + (layer "F.SilkS") + (uuid "47768829-e58f-4dc4-b368-a50cb374fbca") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -7.9956 0.0175 90) + (layer "F.SilkS") + (hide yes) + (uuid "b5de4b39-1131-4249-ba36-7ca76effddf5") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3f3c6ea9-166f-47ce-bc40-df52ea9fdc1d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "0675ae1d-dc5a-409f-8c06-9e0d7dd81941") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/7def791e-5a67-41d7-b347-c3f9a299b5a3") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "57360f4f-91ed-4568-a286-2287e2222f49") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "60888b67-23d2-4716-ad98-af2313f440dc") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5efb5e3a-7907-4e3e-b684-f3fbcf08d1ae") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d11fdfdf-25c5-4b31-8a77-beabb516185e") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6f667d2d-3a6f-4a25-a4ac-8d0433ba4b14") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b6278950-62ec-4fcc-a41e-38ee4539bd54") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c271694-409d-4545-8994-346a035790fe") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e25f7d41-3e1b-4d02-9a33-cb32e9c5b1be") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0250efdd-bff4-4ed2-b5d7-18d34453bfff") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e0e945b6-b0ef-495f-850f-3b130256fc7f") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2c45f3db-5b4c-47f3-8ddc-b04101878261") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "cbfd77e5-0144-45cc-8f85-6ba18339c24d") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "9d20ded0-c286-4098-951d-0c6c0a6d6a94") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 109 "Net-(D65-A)") + (pinfunction "A") + (pintype "passive") + (uuid "c1565816-3f7b-466a-a5b9-aac42e74c074") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (layer "F.Cu") + (uuid "2b99cee9-9bfc-4339-8b42-d93d232fb9e3") + (at 359.7718 126.2063 180) + (descr "Through hole straight socket strip, 1x04, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x04 2.54mm single row") + (property "Reference" "North1" + (at 0 -2.77 0) + (layer "F.SilkS") + (uuid "5ab59c59-e6a5-45c1-9c07-1f7d149b3dbe") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 0 10.39 0) + (layer "F.Fab") + (uuid "f62c93d3-c7ad-4fd6-96b2-e9be8e226ec7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "513bfe0c-8fd8-4574-b59b-ece851e9a3d4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "58eaa587-ed18-470b-aca5-38955aa2303f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "9fe1fee2-1ed4-459d-821b-cb1c32733e7b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "TAD" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "76273f3f-e6ba-4833-9d34-4c6aaab38c41") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "d154f74a-37ff-48a4-b142-50821520912b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*") + (path "/38beb260-5ceb-4b19-afa7-0dbaab81122b") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start 1.33 1.27) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "156f61a6-5060-443a-a597-77ccb5e3503d") + ) + (fp_line + (start 1.33 -1.33) + (end 1.33 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5e444c68-004a-435b-896f-7e467a63864f") + ) + (fp_line + (start 0 -1.33) + (end 1.33 -1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e942361a-1adf-4306-9ae3-449efd24cbad") + ) + (fp_line + (start -1.33 8.95) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "757da0b4-f46b-4e27-8549-80f547dff188") + ) + (fp_line + (start -1.33 1.27) + (end 1.33 1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a60f20ee-164c-4102-a99b-e0873844dc33") + ) + (fp_line + (start -1.33 1.27) + (end -1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "79f4ded7-19d7-4f98-8136-bdb74602d6a9") + ) + (fp_line + (start 1.75 9.4) + (end -1.8 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "11344500-f974-476f-a6ca-7948a315abd8") + ) + (fp_line + (start 1.75 -1.8) + (end 1.75 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1f45f91b-1bf4-4958-aa2f-22cb07b6f4fa") + ) + (fp_line + (start -1.8 9.4) + (end -1.8 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "84ad848d-9397-4669-b457-a23fab240758") + ) + (fp_line + (start -1.8 -1.8) + (end 1.75 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ebba6e52-6613-4d44-9578-cb82144abacd") + ) + (fp_line + (start 1.27 8.89) + (end -1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2cdafd17-82d2-4826-ac31-167c8db5aee9") + ) + (fp_line + (start 1.27 -0.635) + (end 1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c9aa0a05-e611-4c2d-ae34-3a9ed39a9fc8") + ) + (fp_line + (start 0.635 -1.27) + (end 1.27 -0.635) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4c000211-83e0-47c6-b128-7744139de883") + ) + (fp_line + (start -1.27 8.89) + (end -1.27 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3bf6b4a3-1960-4412-8a41-4c27cbbaed65") + ) + (fp_line + (start -1.27 -1.27) + (end 0.635 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "32b0f3b7-6e57-4f14-98f4-384dececdf96") + ) + (fp_text user "${REFERENCE}" + (at 0 3.81 90) + (layer "F.Fab") + (uuid "bf3cefb1-40bb-43fc-b773-4b79da997c2f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at 0 0 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "a936611a-0d34-40c7-bdb6-62da5be1e221") + ) + (pad "2" thru_hole circle + (at 0 2.54 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 81 "/UART_RX_NORTH") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "0c19096d-0a7f-490f-a75b-a065a7765091") + ) + (pad "3" thru_hole circle + (at 0 5.08 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 80 "/UART_TX_NORTH") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "be3808f5-cc9f-491d-ab6b-aa8735148fcf") + ) + (pad "4" thru_hole circle + (at 0 7.62 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "+5V") + (pinfunction "Pin_4") + (pintype "passive") + (uuid "d32e7e9c-5634-4d01-9913-065107195e8a") + ) + (embedded_fonts no) + (model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x04_P2.54mm_Vertical.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "2c24d111-3c30-47b4-a242-52072e4c3b5d") + (at 92.7083 77.925 90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R5" + (at -5.41878 0 90) + (layer "F.SilkS") + (uuid "b4c2864d-b86c-470d-800a-927614d536d3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 1.65 90) + (layer "F.Fab") + (hide yes) + (uuid "6fe8af7b-ddde-4b54-943d-2f27cdb888a9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "63845ca3-d530-4524-bacd-8378bd5c62a4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f2c1c6bb-2783-431a-b91c-c08d3b3d24bd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/bb837909-857a-4e99-a0d4-4f703a793296") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dccc944f-cff6-4159-bc21-5e5fed8489b3") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "68c15075-c7d8-4ea9-b9cf-52908246e23d") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "70a82d3d-3f55-4c15-a7b2-0236b556b944") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3a75d6ee-082c-4b8d-b734-aea5b0bd0324") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0bbed1fe-6810-4c56-a910-8d963bfbb640") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d0b32192-4a19-47ca-8683-574cff6b9d99") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e986ae77-7bf0-465c-8eae-31b497e7eec2") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e98c990c-d98d-4052-a7f0-a801ae89247e") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ba0525d5-c851-4b0f-a634-d480a63cd16a") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b67d10ae-2542-4a92-ab22-7ae6cf78a90a") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a8de8366-852c-4752-8e92-68be7622c68f") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3c301ebe-2d85-4c07-b017-514a56cac5ce") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "48f76f70-b887-4702-8bc4-dbe48b171f30") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 1 "GND") + (pintype "passive") + (uuid "fc18dbbb-e0e6-4095-8e27-5385040f3f86") + ) + (pad "2" smd roundrect + (at 0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 86 "Net-(U1-BOOT)") + (pintype "passive") + (uuid "0ae9c0d1-194c-43b3-9fe7-8adccff3900a") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "2dfb4817-9ec8-4e4e-9975-2f62e3c6f7ef") + (at 81.4763 77.925 90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R10" + (at -6.014093 0 90) + (layer "F.SilkS") + (uuid "880ebc27-dd12-46fd-94c3-0e8b886f29a6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "DNP" + (at 0 1.65 90) + (layer "F.Fab") + (hide yes) + (uuid "9a1eb86f-90e8-4ca2-9591-22c60910aecf") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ac5efc5a-c94a-4a19-942f-819279fa6d64") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3c575668-1ce6-447c-87d9-4106a729c408") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/f01e28d6-c99b-4363-922d-8d4ade2b1113") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4b6731b8-6f9f-4910-9888-a9a16a2a67e6") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9036beb4-a874-4020-8892-1aec1e170fe4") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c217b85e-50a9-4dfd-8579-8b65ac6068d5") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "515a8700-90ff-438a-8af9-1f09d3eb37cb") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "49186a45-7dd6-4ec6-abd7-e40fd460f3b9") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b24cfdac-4266-49b4-9543-64b423f2c7c3") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "89fff3e2-0eac-4345-9fea-aa112afe45a7") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "47d2ba46-830b-432b-a8f5-244469d6331d") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e1fb1171-ce86-4287-bdab-0df6abdb8539") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "38c0be2d-7052-4896-8d58-8b046a23f8bd") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b08ab99b-c36d-4951-90fa-955ec4702ecd") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "cea0d2c8-688f-41ac-8ec3-34a4cbb132f6") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "339e9859-7303-47da-9006-e5053c7b4c58") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 97 "AGND") + (pintype "passive") + (uuid "05eaf6ef-032a-4c74-8f48-2aea931cb4f1") + ) + (pad "2" smd roundrect + (at 0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 1 "GND") + (pintype "passive") + (uuid "31803b15-5fff-47cc-8a7f-2af23a4ecd0e") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (layer "F.Cu") + (uuid "2ecd76c3-b8ca-4609-8e0c-b51657eb67f2") + (at 49.6138 126.2063 180) + (descr "Through hole straight socket strip, 1x04, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x04 2.54mm single row") + (property "Reference" "West1" + (at 0 -2.77 0) + (layer "F.SilkS") + (uuid "765d21d4-8802-4633-9cc3-2fd3073c8ef3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 0 10.39 0) + (layer "F.Fab") + (uuid "2023a261-6a20-4f3a-a6c9-5a765afb5c8e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654e41a2-e26c-41ed-8471-9b4e21d81806") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "34e255c0-b770-4584-82d1-73e950a3fc8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "8f781a20-5762-4b59-a1d8-d3e72907da14") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "TAD" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "7c7a6885-4d3b-41a2-9d36-4c4bc3acce20") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "16006379-c2c9-4ecf-8c0d-c4f9644c1bed") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*") + (path "/e9c07dcf-7c62-4e0f-b7d8-bffddad87ab1") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start 1.33 1.27) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9b461284-0526-4127-8978-5cc0240c4f13") + ) + (fp_line + (start 1.33 -1.33) + (end 1.33 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3bfd09bf-df8b-4cad-8683-95be09a1383e") + ) + (fp_line + (start 0 -1.33) + (end 1.33 -1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f10aba98-2b99-4a72-a2be-f605e6bd354f") + ) + (fp_line + (start -1.33 8.95) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6c6fa49a-8dbd-4da8-aac8-bf9a39371d20") + ) + (fp_line + (start -1.33 1.27) + (end 1.33 1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "34c24eb7-7916-4799-926f-664146164a73") + ) + (fp_line + (start -1.33 1.27) + (end -1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "88ff5e50-042a-4bfd-a28c-3eaed03dfc59") + ) + (fp_line + (start 1.75 9.4) + (end -1.8 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b85b8e38-60d9-401a-bad6-81d7e65445a8") + ) + (fp_line + (start 1.75 -1.8) + (end 1.75 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "30205106-9e4d-4ee6-8258-b593775fabf2") + ) + (fp_line + (start -1.8 9.4) + (end -1.8 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0c77970f-01ca-4db1-9db3-3f50c466d123") + ) + (fp_line + (start -1.8 -1.8) + (end 1.75 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7fd2f7c9-de15-4bf3-9e68-077090553af5") + ) + (fp_line + (start 1.27 8.89) + (end -1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9f132683-7995-4531-bc22-b8edfc0c9f53") + ) + (fp_line + (start 1.27 -0.635) + (end 1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "437bddd3-95ce-4464-b0b6-f713951f3faf") + ) + (fp_line + (start 0.635 -1.27) + (end 1.27 -0.635) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d5c8aad1-e960-460b-a3d5-1253734f6d18") + ) + (fp_line + (start -1.27 8.89) + (end -1.27 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "79d8678d-82e9-4e6b-b227-90ede059c4bb") + ) + (fp_line + (start -1.27 -1.27) + (end 0.635 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9e44be84-6644-42d7-885e-dcd76de88b4e") + ) + (fp_text user "${REFERENCE}" + (at 0 3.81 90) + (layer "F.Fab") + (uuid "64311582-bca4-40f7-84fa-137fbeaf13be") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at 0 0 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "b23dd9f6-ab8d-4a49-8fa8-cf174a91b901") + ) + (pad "2" thru_hole circle + (at 0 2.54 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 111 "/UART_RX_WEST") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "d932011c-7193-4b26-bfa0-849e086a8295") + ) + (pad "3" thru_hole circle + (at 0 5.08 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 99 "/UART_TX_WEST") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "482e6d30-d425-4046-85a5-e1f4e23b1c15") + ) + (pad "4" thru_hole circle + (at 0 7.62 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "+5V") + (pinfunction "Pin_4") + (pintype "passive") + (uuid "b9e0b27d-afd0-438b-923b-68077692745f") + ) + (embedded_fonts no) + (model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x04_P2.54mm_Vertical.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "2f7b129a-47ac-4c46-a941-4bd5c3748830") + (at 198.4419 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D40" + (at 0.2044 0.0581 90) + (layer "F.SilkS") + (uuid "793c78b7-fd6a-4aca-92a1-b09c558ac54c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1856 0.0681 90) + (layer "F.SilkS") + (hide yes) + (uuid "1a333a55-9ffe-42f7-bb4a-a2e963a70182") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e1208340-1103-488a-8987-405447558835") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "51f6092a-9692-447d-aa67-0ad7387c9047") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d1943c1b-fcca-4277-a041-c8e0cf0a03a3") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e621b4d7-03d4-48cc-bc43-7fa25cf72903") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8ecefd7f-73a8-4041-a0bd-b0f67d09c3a8") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d94843f0-cbc3-4c6b-a125-265de4d34478") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b2d5f4bf-c5cd-435f-88f7-4de6a2dbbece") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "550042cc-fe3d-4b52-a18c-783e98c7c218") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1791b1a5-4540-4f3a-94e3-e4ad9942d682") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "24ba3d7f-3f88-4858-8e71-e5799fd85d3e") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5c285b70-37be-4875-85b2-f24760586a08") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b0431b82-4fac-4f7a-82d8-7dd3b01e4ad4") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d99f7030-d0b7-420c-a733-c929769e556a") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3666fa02-9ee3-4627-b810-3e7344c16f21") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "316428f8-c160-470e-aa0e-ebc340ccca36") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "77cd18ef-7bc5-416a-8a50-41b72a7fc84a") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 62 "Net-(D40-A)") + (pinfunction "A") + (pintype "passive") + (uuid "7c9348a8-130a-4bb4-8418-7bf6142611d7") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "304f41f2-0255-420f-8a3e-6b5142b8ea60") + (at 196.0606 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D26" + (at 0.2544 0.0394 90) + (layer "F.SilkS") + (uuid "21ce89d8-4572-4727-bbf8-02d9cb4c47c4") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2256 0.0094 90) + (layer "F.SilkS") + (hide yes) + (uuid "e2caa7c3-06d9-4b1d-a74e-a58f2b9ae4af") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "9a78ac20-df99-4b61-8bcf-dba3d1945f3b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "758064f9-8067-4b2e-95ff-546f04ce9be9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/46b714f1-462a-4a6e-82f1-abc04220794c") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "41f7ba2a-39a0-4a0b-a6d0-910f41150875") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d183cf66-6d73-4ad6-aa37-e8d115335818") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d9865975-1bdf-4876-a794-fb602ffe3b78") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8058314b-cb9e-4092-9652-d98c05acdcc1") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4a06f36a-6290-4e96-b70b-6a421c24c7af") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c612372c-245d-4baa-a45f-6527c4760113") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8ad1e3c1-12ba-4ee9-b6e6-d6a5c54392f0") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "31a3c12a-c97e-460d-abc7-bdfab4c0cd66") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3e169073-3592-450b-af1b-127e3eaf1423") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9d16e15d-fc7d-41f4-b474-203638868b7d") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "29faa77d-0c15-4347-8ea7-b592fefaafbe") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "ccadbb53-01bc-408c-a028-87a991cf4509") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "fb988b2b-2896-440f-a0d5-d0b08ee0b352") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 32 "Net-(D26-A)") + (pinfunction "A") + (pintype "passive") + (uuid "1f23c3e8-a446-471f-bdbc-59ae459f076a") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "31b12493-d8d1-42c3-aa48-1c921754c7c5") + (at 328.22 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D62" + (at 0.1644 0.02 90) + (layer "F.SilkS") + (uuid "2b104950-0a42-4ea0-b9cf-de3610eebcf0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0756 -0.03 90) + (layer "F.SilkS") + (hide yes) + (uuid "d7c40506-9114-46b9-b457-99f2aae90c33") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "098a2b05-5cff-460e-81b0-fefd17e49564") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f1e0415f-d405-4c1f-b7ed-8e7dd52c5095") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8eec45c1-7516-42ab-85ef-c683a28ad203") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "89cbacfb-904a-4f61-91e5-d20fa2612c23") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "62edcf20-f1f0-44cc-9fce-5eafc0e84c10") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "03785c3b-2444-42cc-bf9d-5ef7dddca19e") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6426e06a-031a-4ab0-ae5c-9454941aa039") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fac0403a-d1c1-4976-93bc-fc8a97337878") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "337551cf-85a5-4cc9-b903-70641c28a322") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1a948be8-e5ed-4dee-b12e-8b7960f24370") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "729d8e36-465d-4982-8bd8-689cda53b207") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f4ea98c9-6e04-43ed-bfd4-d9636d8dad6a") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c5cf9dd2-e414-47f3-adef-1fffa220a7e4") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d86d1bfe-d8df-46b4-884a-8c3c26d6c3b0") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "cf0d6789-40e2-4635-8242-c3322f41d4d0") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "867961bc-2328-4d47-9684-736fc44205b1") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 104 "Net-(D62-A)") + (pinfunction "A") + (pintype "passive") + (uuid "67c9656f-ac11-44ba-bc01-5d88bec697c3") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "336f18b2-eb1d-4cab-aad1-32650b83d9d5") + (at 321.0763 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D17" + (at 0.2944 0.0637 90) + (layer "F.SilkS") + (uuid "debec0e2-d089-4d78-a53f-0bc3382c8957") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1356 -0.1163 90) + (layer "F.SilkS") + (hide yes) + (uuid "45fec107-c684-4ff9-8844-e11add3dd8ec") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "8058a7d6-f149-4625-b3e8-4851c8b17ea4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "02ed31dc-e92d-4c81-aece-0bea7e4f37da") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/74706b6a-3e0b-4fa3-9f53-54509b6a0535") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "08f5cca0-67ba-4bb9-9c50-add539e7b37f") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f6a46063-95fa-4885-aa67-c32827e7e66d") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5db9867b-a67e-493d-9baa-8181dfdaab9e") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8aca5f3f-24f8-477e-a2e1-129501d9b8fb") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8eb923c7-b911-4abe-a9b1-813886a9302a") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "95ceaaab-7dd7-40eb-bd4b-70c0926aaa5f") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f5cb4760-c1a1-4955-895c-dfd85bc0f8a6") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1751ef92-9b35-4944-9a57-0a9a463c7b84") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "445cc791-d2fe-441e-9813-acdfaa9879a8") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "399460fb-668c-4ce1-9686-14cbafb5d95a") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "64608515-9720-4cc4-b967-555df3e883a0") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "f0331af3-035c-495e-a4bd-06b33e62ed29") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "a1b385a1-f5ac-455f-8d14-09a457f54ca0") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 18 "Net-(D17-A)") + (pinfunction "A") + (pintype "passive") + (uuid "60e4e8c3-409a-4d2c-8415-75e3543c84db") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "339d6ca4-cddd-4429-a147-a59e410cebdc") + (at 279.4044 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D14" + (at 0.1544 0.0337 90) + (layer "F.SilkS") + (uuid "2277208f-f595-4189-8c1a-1ea919a422a6") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1956 -0.0463 90) + (layer "F.SilkS") + (hide yes) + (uuid "594b8e70-2c29-49d7-aa83-13373cd1daa7") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "def70090-47be-4401-8a19-6544fa5871ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "db231ce4-0b08-42c0-ace2-9445f378a97f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/7a615478-d7b3-4edb-9516-020408805d18") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0a4530ad-9d31-4643-9b5a-3dbd3f80c46b") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e22f4903-c2ab-407f-9df3-aec4c0de6e2a") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6f9804d5-4321-4107-be19-e124c440eec8") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "44e27ce8-3ffa-4ba1-85b2-caa53d08a472") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "842f5485-047e-4de7-94e4-319ddf3b81ef") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6102ef4c-b08d-483c-9be8-04e6b1474c05") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "70f0533c-6c74-46bb-a3c5-66a7f9b2a74c") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9fe09bbc-723f-4eb8-91f4-6cb4ecae36cf") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e99008ad-ddd3-4792-a4ef-da972069226e") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fc30a084-b44c-4a08-8188-931bc3c4fa53") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "892586d5-c69d-476a-8a21-928ce72296ed") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "d8191fcc-53d7-42de-8e02-a0719178957d") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "5f0c8fea-2c10-40b2-8dc8-04ebadf2b37c") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 15 "Net-(D14-A)") + (pinfunction "A") + (pintype "passive") + (uuid "8e87ff41-14ef-4a2e-85bc-9e3276d4ad9b") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "3972ca5f-61ea-4617-ac77-f8f2ff945dac") + (at 227.0169 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D42" + (at 0.1344 0.0031 90) + (layer "F.SilkS") + (uuid "3ee7b3bd-6e6d-453c-9930-e62d50bec37a") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0656 0.0231 90) + (layer "F.SilkS") + (hide yes) + (uuid "4b38a5e3-cbbb-4ffc-a047-51c4b81832a8") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "35807431-b6f7-4fe7-9f89-d099616594a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "bf22260d-4bdd-4a7f-9a20-1b6a3644f70d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/bf6e5f27-170a-4944-a1f6-385a82104b47") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "991cb9d2-fa25-48e8-b278-ff7428ec8492") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c5dba065-6d19-46d2-b116-d1973a337dfc") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d8284d20-b81a-4561-a263-5769d9043cc9") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "98a6e512-4045-42d6-a172-9272ae6bbae7") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "53bbdf3a-a0af-4318-b52e-5a2a8675cb8f") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "12ba777c-5403-4fbc-a7bd-19b082babc51") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "18f850aa-6122-41ef-b2f0-f2b6a1e01772") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "32b35d60-e8ce-4055-b924-288082738ec6") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1e88cf1a-3d3c-4352-b8e4-d7c75d047160") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "abd47b62-dbdc-445e-858f-327a1b221950") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "102d10f9-0e8b-4388-ba4b-cb921c805063") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "b5796a1c-95aa-4d24-a777-1b0a13ce2fcb") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "a7704172-9a2e-4c62-abf1-a947aed66125") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 64 "Net-(D42-A)") + (pinfunction "A") + (pintype "passive") + (uuid "cb873f2d-a7d5-4d46-9924-4649e7cbd77a") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "3e7581eb-ba76-47fa-af5a-aaf45363d4f7") + (at 297.2638 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D33" + (at 0.2344 0.0962 90) + (layer "F.SilkS") + (uuid "3852b478-4d20-4624-8bd2-f10f027c955b") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1956 -0.0038 90) + (layer "F.SilkS") + (hide yes) + (uuid "5b52d426-e791-4c9f-a89f-7ae79032db38") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "be192ed0-3011-489b-9177-772d6207b4b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e3370e68-d4d1-4036-97ce-e8414a495ed3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/f003b52d-6156-4053-a298-6045bff0c97d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7f32f2a8-fedf-4d80-b283-1006c2799ed8") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "135b9977-2541-4ea8-9c56-70f3f28e1bc1") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "951d47dc-0af7-4f50-9469-3f3ce01f8a28") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "70996647-4bf8-488c-8bf2-03d677115811") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7d0aec66-b189-4d7b-95e4-846afc8d25bf") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e12fea1a-8b49-4567-ad0d-ef4d9acc524c") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "011bb52d-303f-4abb-9307-81a0e221c1e6") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "28d294a4-0269-4a80-95c6-5f9385231421") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c0d436de-7d0d-4019-aa81-24f3960930e6") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e65fafaf-8d08-4788-8978-7f2a5cbcc53b") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1a19ada4-1cd9-4b9b-adc7-c6cea74f306a") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "a48f2b02-6a34-4ec5-ae36-39b838cd25d0") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "6af4fb88-6e7a-402a-b3e0-e70f1b76a0c1") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 29 "Net-(D33-A)") + (pinfunction "A") + (pintype "passive") + (uuid "e37e9c74-2082-489f-b3f0-d39366ac14ef") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "40992160-2e42-4e9b-a97a-1c1f0c6701d8") + (at 323.4575 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D35" + (at 0.1144 0.0525 90) + (layer "F.SilkS") + (uuid "667b6d6c-6e9e-4aa4-95a4-8a0c422613c5") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2356 0.0225 90) + (layer "F.SilkS") + (hide yes) + (uuid "bc87797c-8bbd-41ca-a061-3ec70c4f9316") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "eaa25c3c-d2ba-4fbe-a937-b6eaac07d4f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "9e1aeffd-cec6-4586-8d3b-0e21110a908f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/09e4c03e-af71-4268-a862-17e1a98b74b1") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "504ebf0d-8346-47fa-b312-8747e1442c89") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "08079610-c980-428a-98a6-f0ffc303afa8") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "83550a31-6523-4631-80b3-d6805bc5857b") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "63ee2a04-235a-4673-9553-d73d8f60de56") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9b1dc283-4277-42b4-9ea2-dac5f78b2ea4") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bce0ea84-1a05-4e19-a3e3-6efcbeb448ec") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "da5d2b05-9bb1-4a71-92ac-a68b65e714d8") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0aaad662-835e-41ea-a00e-9f5c227e2489") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f1364fb6-1f35-417e-bddf-a73085af8c8f") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c12b575b-0523-4647-a650-81852eb21e1f") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "33d1f37f-13e3-4b94-a453-9f4827ecc0d8") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "B.Fab") + (uuid "3f09dc4a-d20b-4e08-a1f6-f0da4ce6f8f8") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + (justify mirror) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "39c9e547-6074-4fc0-a4b5-e8b11c204712") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 54 "Net-(D35-A)") + (pinfunction "A") + (pintype "passive") + (uuid "e27291eb-8f28-41d8-a287-1d9603460514") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "429cea8e-8232-478e-a2e7-1eb115399112") + (at 273.4513 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D72" + (at 0.2144 0.0106 90) + (layer "F.SilkS") + (uuid "c0a6769a-16b9-473c-83e9-3cafeb1020cf") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1456 0.0106 90) + (layer "F.SilkS") + (hide yes) + (uuid "0d83b4d9-0b8c-4828-89bb-0e6650727be0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "d54f8833-05a7-4ff2-8fd1-ff46a7736991") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "637bf167-61fa-4a2e-a58f-ee0703db19cd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1fb95f57-ac9c-4e69-b710-a64cc33cc33a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5ef4bf64-f3cf-40fa-bb94-dd7219e4351d") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "66ee20f6-fdd7-4859-8b32-7ce4d44154fe") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "084c750a-1d0a-4a40-b7bf-8254624cab9c") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2954d67c-03c2-443e-9c70-a0129ceeef24") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "57e9e11b-ce99-466d-8fb5-2445e659aca9") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5603c085-60ce-4f9a-9edb-b6fb8c85849a") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8d3f96f6-d13c-4beb-ae7e-74d69e2b9f89") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d1297ba2-a19b-4a87-8a64-016fc9dd86ff") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6f6e7152-13eb-49da-a160-e4dcfa93e738") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "469efa9b-927a-4b64-b3b0-35ff822828fd") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "49198797-3865-49b6-872d-7ce792c32a15") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "ff43b23d-7c35-4bcf-844a-7cd60486a144") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "ca38769f-b5c2-41b1-bc1e-2762149c1811") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 113 "Net-(D72-A)") + (pinfunction "A") + (pintype "passive") + (uuid "2bba2fed-05c1-4589-8676-76a586922514") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "42f9baea-1a38-4874-a6a7-cd23f08ea821") + (at 248.4481 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D12" + (at 0.1644 -0.0181 90) + (layer "F.SilkS") + (uuid "5b0acf74-67a4-45f7-b037-f331b212ab87") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1656 0.1019 90) + (layer "F.SilkS") + (hide yes) + (uuid "c346925c-e752-44b2-972f-3084ac7badf7") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "5f03ae9a-e55d-4920-a224-bd4453c56531") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "452245ff-5dc8-43c8-a61c-2c668f8b63e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/f5b01530-19bb-476f-a934-afe1eacc00cd") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "78c620da-906c-4f76-8bd0-efac9d912617") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "720861ed-d575-4d1a-b9c8-136f1fbfc5dc") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "70b7a3f2-9a41-4104-b5a1-d2599fb65d17") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d317fb5-afe2-46d2-aa63-b3af7dc66f0e") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "22484ae4-065c-4d4d-84b8-7c551c6f3df5") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "063166a2-0703-499c-93ba-b7b30e4aad80") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "25dcc71d-14f8-4a36-975f-76f202200c99") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8f47cd1e-2e6d-49d0-8e74-907502e6d218") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f66b0166-b74f-47e3-a5e9-8e5667c12458") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "538b9f61-9c0e-465e-92c4-db8fb7d0a9a7") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "78250d05-34e0-43bd-9be8-7a441f7b7c8d") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "dc5ab806-eec6-4110-b4be-93bde5d721f0") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "15387bca-1894-4018-bb25-c7ab32daf8fe") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 13 "Net-(D12-A)") + (pinfunction "A") + (pintype "passive") + (uuid "90659df8-cbd6-4f51-abce-add5edbe22b8") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "4340d866-d682-4552-bbb7-280338364f3c") + (at 253.2106 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D44" + (at 0.1944 0.0594 90) + (layer "F.SilkS") + (uuid "0bf29b7d-4be4-46d7-9f01-acdddc844432") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1256 -0.0306 90) + (layer "F.SilkS") + (hide yes) + (uuid "0241c78e-67ce-4642-86b5-c0ddc0bb1948") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "8653a766-0209-4be5-947a-219dd7316374") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "80f666a7-cf66-4186-85ef-a8fc23dd7fc0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/94ea4fd3-2048-4ef0-968f-57ba8c32036f") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c53eb203-eaa8-45e3-8f01-456c94000b65") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4c5d584d-f0fb-4d53-a203-c8cef97d2807") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e400585b-75e6-4847-a8da-d02fd77a05d0") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2e7a1e72-4ba5-4d8a-a4ab-e2e3a2de3d3a") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c8d23063-2da1-4fbd-9635-7edfa44b0ab5") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a30216c0-c8b9-43a0-97f2-df41b17cc53e") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ef680b63-8fee-44dc-80fa-e4ac28a46163") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "81acc744-e765-4505-a507-3c1b00886a7c") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4bf7f1cc-8c46-4717-b836-ac14908f62bf") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a29a8b37-d53b-44b4-b948-9f0a7083c071") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "460ec06b-954e-4a48-a1ef-774d46e15d07") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "b03d3899-2069-46fe-bc93-c3a695ed0e55") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "556b8ab0-b1dc-4225-98d1-9954a302f55d") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 66 "Net-(D44-A)") + (pinfunction "A") + (pintype "passive") + (uuid "0b9c49d0-520e-4b4c-85a2-8ca5bb70999a") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:STAB_MX_2.25u" + (layer "F.Cu") + (uuid "4430fded-4dd6-47d5-a0b0-e2526879c3ad") + (at 73.4263 154.7812) + (descr "Footprint for Cherry Clip/Screw in type stabilizers, 2.25u") + (property "Reference" "S1" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "8c529cb7-646e-4f2b-a375-afc336b55d20") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_stab" + (at -0.000034 27.240872 0) + (layer "Cmts.User") + (uuid "f6511aea-6a7f-4840-8ae8-0f8c8a139e06") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9114a618-3b21-4be9-bf8d-22ca3f6d9c86") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e3e87211-add0-4681-98c0-93d6da8a531f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/93b94b08-0cc9-494f-899a-9d796e095412") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole exclude_from_pos_files) + (fp_line + (start -21.43125 -9.525) + (end -21.43125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "804ae561-9f49-4475-b5aa-35f719532f30") + ) + (fp_line + (start -21.43125 -9.525) + (end 21.43125 -9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "0dd7be2d-c2cb-490d-b4b5-21ced66a7f37") + ) + (fp_line + (start -21.43125 9.525) + (end 21.43125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "255c7250-c92f-48f7-a95c-1723efa3cc0b") + ) + (fp_line + (start -7 -7) + (end -5 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "58be5790-7de8-47f9-9d51-e384b3387976") + ) + (fp_line + (start -7 -5) + (end -7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b561388c-107b-4ba0-8c2b-fdacffc66b6c") + ) + (fp_line + (start -7 7) + (end -7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7e65d754-df52-4b39-9433-b22ac41ede7a") + ) + (fp_line + (start -5 7) + (end -7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2db2cecd-b7e5-462e-8fcb-8119cf8645dc") + ) + (fp_line + (start 5 -7) + (end 7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e0551119-af1f-4864-8ebd-73b524fe0c73") + ) + (fp_line + (start 5 7) + (end 7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "34e0e36c-e866-4c29-b639-4be944312f53") + ) + (fp_line + (start 7 -7) + (end 7 -5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4c74202a-2a24-4c28-aef5-de28a60e0452") + ) + (fp_line + (start 7 7) + (end 7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "50a08250-0b51-4f51-b601-65f22041d088") + ) + (fp_line + (start 21.43125 -9.525) + (end 21.43125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "dc8ad7c7-6bcc-4bfb-87c6-cb741c56dc03") + ) + (fp_line + (start -15.28125 -5.499999) + (end -15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "45b754bb-8097-4a9d-a520-abbb5e0d28ef") + ) + (fp_line + (start -14.78125 -5.999999) + (end -9.03125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "32c7b151-d5e3-41e5-9fa0-612b821099ab") + ) + (fp_line + (start -14.78125 8.000001) + (end -9.03125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c368b14e-aee5-4616-98f5-7524c5a7a8e9") + ) + (fp_line + (start -8.53125 -5.499999) + (end -8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "de68ab80-7867-4e8f-a64a-907331f59d17") + ) + (fp_line + (start 8.53125 -5.499999) + (end 8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1189bf2f-a603-4def-b9b7-3d22df6e4caa") + ) + (fp_line + (start 9.03125 -5.999999) + (end 14.780039 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3d6699b5-49eb-473e-95ec-2e91ad831578") + ) + (fp_line + (start 9.03125 8.000001) + (end 14.78125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "14d6788a-8b0d-4f17-9e34-d1f4b121aebc") + ) + (fp_line + (start 15.280039 -5.499999) + (end 15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "61f5c5d1-06b6-4840-a725-1a4a95e2290f") + ) + (fp_arc + (start -15.28125 -5.499999) + (mid -15.134803 -5.853552) + (end -14.78125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "732bb7c0-b981-4a82-bea6-6c08d1b66e6b") + ) + (fp_arc + (start -14.78125 8.000001) + (mid -15.134803 7.853554) + (end -15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "96435a4e-26ae-4fec-8bfc-f2bf390b2c90") + ) + (fp_arc + (start -9.03125 -5.999999) + (mid -8.677697 -5.853552) + (end -8.53125 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c062eca8-c6bd-4277-ae4f-6058fd4a1d14") + ) + (fp_arc + (start -8.53125 7.500001) + (mid -8.677697 7.853554) + (end -9.03125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "84772dcc-b68d-4242-9342-385df47accdf") + ) + (fp_arc + (start 8.53125 -5.499999) + (mid 8.677697 -5.853552) + (end 9.03125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fbee4c6c-ee7e-432e-a881-523e1ca087ca") + ) + (fp_arc + (start 9.03125 8.000001) + (mid 8.677697 7.853554) + (end 8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "84a83f09-375f-436e-b753-64a19bdfe51b") + ) + (fp_arc + (start 14.780039 -5.999999) + (mid 15.133592 -5.853552) + (end 15.280039 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "67dc3740-5b2a-48b9-832f-857f0ba8a94f") + ) + (fp_arc + (start 15.28125 7.500001) + (mid 15.134803 7.853554) + (end 14.78125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c095905c-2354-4654-a1f5-80419b7a9bbe") + ) + (fp_circle + (center -11.90625 -6.985) + (end -9.90625 -6.985) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "B.CrtYd") + (uuid "59ff15b5-5081-4c33-b2b2-1f63a2721fee") + ) + (fp_circle + (center 11.90625 -6.985) + (end 13.90625 -6.985) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "B.CrtYd") + (uuid "82741bbd-e080-40fa-a132-f6ab406300ba") + ) + (pad "" np_thru_hole circle + (at -11.90625 -6.985) + (size 3.048 3.048) + (drill 3.048) + (layers "*.Cu" "*.Mask") + (uuid "0dd9486b-082e-4514-b7c7-2ddc9571592f") + ) + (pad "" np_thru_hole circle + (at -11.90625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "8ba88844-3c77-4809-a391-1eb5b2ff3abb") + ) + (pad "" np_thru_hole circle + (at 11.90625 -6.985) + (size 3.048 3.048) + (drill 3.048) + (layers "*.Cu" "*.Mask") + (uuid "4c26b2ba-7453-4574-8d36-782a71495d30") + ) + (pad "" np_thru_hole circle + (at 11.90625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "ccfd4357-bc72-4446-9f02-57f396ae828a") + ) + (group "" + (uuid "6860112b-7675-47fd-92b4-d8cde67d2941") + (members "32c7b151-d5e3-41e5-9fa0-612b821099ab" "45b754bb-8097-4a9d-a520-abbb5e0d28ef" + "732bb7c0-b981-4a82-bea6-6c08d1b66e6b" "84772dcc-b68d-4242-9342-385df47accdf" + "96435a4e-26ae-4fec-8bfc-f2bf390b2c90" "c062eca8-c6bd-4277-ae4f-6058fd4a1d14" + "c368b14e-aee5-4616-98f5-7524c5a7a8e9" "de68ab80-7867-4e8f-a64a-907331f59d17" + ) + ) + (group "" + (uuid "de3dc25d-b33e-4d64-afe3-6c8499b5c560") + (members "1189bf2f-a603-4def-b9b7-3d22df6e4caa" "14d6788a-8b0d-4f17-9e34-d1f4b121aebc" + "3d6699b5-49eb-473e-95ec-2e91ad831578" "61f5c5d1-06b6-4840-a725-1a4a95e2290f" + "67dc3740-5b2a-48b9-832f-857f0ba8a94f" "84a83f09-375f-436e-b753-64a19bdfe51b" + "c095905c-2354-4654-a1f5-80419b7a9bbe" "fbee4c6c-ee7e-432e-a881-523e1ca087ca" + ) + ) + (embedded_fonts no) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "4445fa8a-ce30-4d0d-9c96-cca9b5dc5f9f") + (at 136.5294 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D4" + (at -0.0656 0.0606 90) + (layer "F.SilkS") + (uuid "9d80cbbf-ce87-4e40-8085-4bf7b27e8c4c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0556 0.1506 90) + (layer "F.SilkS") + (hide yes) + (uuid "d50b0819-6de6-46e2-b44b-9469262a43e9") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7dd993d9-4dce-489d-a561-103eecaa144d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a3cd218f-e516-4036-b09b-03dbc6deb7b2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d4ca6ba1-ee2f-4785-ad68-a7aa41609a12") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f86639f3-3172-4f87-bd69-f797ab128ed9") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ebfd8318-1d64-4899-bc33-7bbd0fb3c409") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "49348fe4-a874-4770-bcfb-4184da624a0d") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b9e2b9a8-2320-46e9-add4-57d8a67065cf") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "debdf875-45f9-4b73-87d1-5a74ef6aced9") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "887f17d8-fb12-48b7-8e3e-8ebb52e5c051") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "77f30c1a-0b50-41a7-8e59-793a7df04b51") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "849ad83e-c1da-4380-a8ea-1af38f412c0c") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "40b21ee6-9224-4c0e-965f-9432c373d2ce") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1ae4811f-da1f-46e8-9e91-ae994cf58657") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fae2c0d9-c8f1-4069-877f-100c03d2a8f6") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "2f6b2225-24f9-409c-9890-bd3204a6a9f2") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "a6a803b7-7e35-464f-acf6-f0e57bbb5116") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 5 "Net-(D4-A)") + (pinfunction "A") + (pintype "passive") + (uuid "eface30d-4965-49b2-b9a3-80cb261caecb") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:STAB_MX_P_6.25u" + (layer "F.Cu") + (uuid "44e0f060-7938-4e9c-80b2-d40ed7ede562") + (at 182.9638 173.8312) + (descr "Footprint for Cherry Clip/Screw in type stabilizers, 6.25u") + (property "Reference" "S2" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "5dd8a923-f490-4a03-822f-e16c8394f44d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_stab" + (at 0 8.128 0) + (layer "Cmts.User") + (uuid "f783afa9-4894-41fe-ad5a-965f2f2ba574") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64e36bb6-c569-409a-8214-3aa9678a543c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "35793caa-0a89-4166-a6c9-dd61be87e7e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/eef9331e-0bf5-4f92-a54f-c0b6635718b4") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole exclude_from_pos_files) + (fp_line + (start -59.53125 -9.525) + (end -59.53125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "fe8cddca-3d1a-4d9e-a490-3c471fcaebd5") + ) + (fp_line + (start -59.53125 -9.525) + (end 59.53125 -9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "97899bc0-c532-42e1-983a-e316073e7532") + ) + (fp_line + (start -59.53125 9.525) + (end 59.53125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2b4ec9d0-b470-4b06-a171-9d74ad48d47c") + ) + (fp_line + (start -7 -7) + (end -5 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "0b5e69a6-f074-44b7-b0a4-dedcb05e0b27") + ) + (fp_line + (start -7 -5) + (end -7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "68baee13-0251-446c-8de0-d23cda309874") + ) + (fp_line + (start -7 7) + (end -7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "27e5ea0a-93e0-4dd9-8daf-61b1f718ad88") + ) + (fp_line + (start -5 7) + (end -7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f4427b96-9561-4932-b1a0-62f54c439c0f") + ) + (fp_line + (start 5 -7) + (end 7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a93efc1f-daf4-495e-9e7e-02414cd123b7") + ) + (fp_line + (start 5 7) + (end 7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "913befc8-f4fc-4380-9a70-c8f051433b98") + ) + (fp_line + (start 7 -7) + (end 7 -5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a758301e-6211-4f9c-a851-51b0640335fa") + ) + (fp_line + (start 7 7) + (end 7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5d9e60ec-1d4a-4081-985b-847ed293ca8a") + ) + (fp_line + (start 59.53125 -9.525) + (end 59.53125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4f4b2157-6990-4cb6-85aa-e18bee2d5614") + ) + (fp_line + (start -53.38125 -5.499999) + (end -53.38125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f29064b8-b99a-4cf8-a44b-93638202b4f9") + ) + (fp_line + (start -52.88125 -5.999999) + (end -47.13125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4c3c4833-feb1-4dd1-bec4-e8d6ce099191") + ) + (fp_line + (start -52.88125 8.000001) + (end -47.13125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "11f494c7-3322-4056-926e-39283b5f141a") + ) + (fp_line + (start -46.63125 -5.499999) + (end -46.63125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a9bed1c2-fcaf-4228-8028-46086ea1a3b5") + ) + (fp_line + (start 46.63125 -5.499999) + (end 46.63125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d5b97fac-7eb3-4ca0-ab81-b7f2573d4c35") + ) + (fp_line + (start 47.13125 -5.999999) + (end 52.880039 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7db25db6-4f46-49fa-8dab-6df7d6927f23") + ) + (fp_line + (start 47.13125 8.000001) + (end 52.88125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d44385d6-e844-4d91-af9e-107826b59656") + ) + (fp_line + (start 53.380039 -5.499999) + (end 53.38125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2b026e30-221b-4f99-b7a6-ebf1a1af28d6") + ) + (fp_arc + (start -53.38125 -5.499999) + (mid -53.234803 -5.853552) + (end -52.88125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "80119e0b-d1f1-4b75-b053-0400d61b73c8") + ) + (fp_arc + (start -52.88125 8.000001) + (mid -53.234803 7.853554) + (end -53.38125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3354b9c8-0463-4f7c-91d4-10e975f118ed") + ) + (fp_arc + (start -47.13125 -5.999999) + (mid -46.777697 -5.853552) + (end -46.63125 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0a21f634-87e3-416b-ade4-c602cd5a5027") + ) + (fp_arc + (start -46.63125 7.500001) + (mid -46.777697 7.853554) + (end -47.13125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4dbd3271-0521-4c73-a02a-bb488cfa6589") + ) + (fp_arc + (start 46.63125 -5.499999) + (mid 46.777697 -5.853552) + (end 47.13125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3cd35db1-a186-42ae-8c52-f502c1a3f4c8") + ) + (fp_arc + (start 47.13125 8.000001) + (mid 46.777697 7.853554) + (end 46.63125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "45461024-8d8f-4c06-93c0-f520401be60e") + ) + (fp_arc + (start 52.880039 -5.999999) + (mid 53.233592 -5.853552) + (end 53.380039 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8d1aa7f2-9895-498b-a806-25b0b022e13b") + ) + (fp_arc + (start 53.38125 7.500001) + (mid 53.234803 7.853554) + (end 52.88125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c859e639-cb0b-4d31-b1ad-7c2cb94f1c83") + ) + (pad "" thru_hole circle + (at -50.00625 -6.985) + (size 4 4) + (drill 3.048) + (layers "*.Cu" "B.Mask") + (remove_unused_layers no) + (uuid "7d6a1e59-1b75-42c6-a1b7-568469eb743a") + ) + (pad "" np_thru_hole circle + (at -50.00625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "7b380b9a-a473-4a31-b3f5-b7592880317a") + ) + (pad "" thru_hole circle + (at 50.00625 -6.985) + (size 4 4) + (drill 3.048) + (layers "*.Cu" "B.Mask") + (remove_unused_layers no) + (uuid "6846e423-40fa-4bdb-9a97-88611a83dd64") + ) + (pad "" np_thru_hole circle + (at 50.00625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "f0172e5a-d10f-47e2-8482-1cfcae3fa03d") + ) + (group "" + (uuid "014d8136-0cfd-40a0-ad0f-0a748c80f020") + (members "0a21f634-87e3-416b-ade4-c602cd5a5027" "11f494c7-3322-4056-926e-39283b5f141a" + "3354b9c8-0463-4f7c-91d4-10e975f118ed" "4c3c4833-feb1-4dd1-bec4-e8d6ce099191" + "4dbd3271-0521-4c73-a02a-bb488cfa6589" "80119e0b-d1f1-4b75-b053-0400d61b73c8" + "a9bed1c2-fcaf-4228-8028-46086ea1a3b5" "f29064b8-b99a-4cf8-a44b-93638202b4f9" + ) + ) + (group "" + (uuid "7efba7e7-9c41-49e4-98e8-8ac5db827a50") + (members "2b026e30-221b-4f99-b7a6-ebf1a1af28d6" "3cd35db1-a186-42ae-8c52-f502c1a3f4c8" + "45461024-8d8f-4c06-93c0-f520401be60e" "7db25db6-4f46-49fa-8dab-6df7d6927f23" + "8d1aa7f2-9895-498b-a806-25b0b022e13b" "c859e639-cb0b-4d31-b1ad-7c2cb94f1c83" + "d44385d6-e844-4d91-af9e-107826b59656" "d5b97fac-7eb3-4ca0-ab81-b7f2573d4c35" + ) + ) + (embedded_fonts no) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "45702056-2079-4cd0-8c9e-0175dc08c50b") + (at 75.8763 67.8656 180) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R3" + (at -3.12495 0 0) + (layer "F.SilkS") + (uuid "b39a19be-20af-482d-99d0-776415c908eb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "22" + (at 0 1.65 0) + (layer "F.Fab") + (hide yes) + (uuid "b6988a23-f89c-4814-8f82-91e4dfa61c61") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "66925bce-6524-40e9-8876-90597aa20c75") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "63413056-7461-4741-af05-0c1b44c49ce5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/9a64bac4-da04-48a9-9702-7209f655d06c") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c11c4e4c-1f8c-4379-a18a-7c0e72ac4314") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6dcb7353-815a-4417-8217-9d8b682c82a0") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9cf61ecd-cabe-4959-adac-c45668608674") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ce5bef54-8832-45d9-af0d-a3e8806436f2") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fabcdd9a-2091-493a-81bf-bc1063e3c7c7") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "52d3e430-684c-4b2a-9612-50ca8d66e01b") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d7ab3407-7333-4ca3-86aa-1d8d4101fc17") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8607fccb-e92b-46ea-a4b4-3744d54f195e") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "90268eb1-1bc0-4643-9b29-9f19c4c72c73") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "769b321b-1f17-4956-a643-6e39f3d78df5") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b1df39ac-f5de-4f0a-b105-d6975b43b82f") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "63525603-3945-4617-a31c-e492e83feae5") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "20cc83e1-81ff-49d9-be23-2941f65ee271") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 180) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 84 "Net-(U1-PA11)") + (pintype "passive") + (uuid "e70243a3-531b-481c-a2db-1b9b2bf5161e") + ) + (pad "2" smd roundrect + (at 0.9125 0 180) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 48 "/D-") + (pintype "passive") + (uuid "d1c987d3-20e7-4b4d-9884-29bc4ea888e9") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:STAB_MX_P_2.25u" + (layer "F.Cu") + (uuid "45e1efd6-d588-46ed-9d34-dd7008bc9e5d") + (at 316.3138 135.7312) + (descr "Footprint for Cherry Clip/Screw in type stabilizers, 2.25u, plated") + (property "Reference" "S4" + (at 0 0 0) + (layer "F.SilkS") + (hide yes) + (uuid "b2d0671e-3cb3-4058-b489-08e7995338b8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_stab" + (at 0 8.128 0) + (layer "Cmts.User") + (uuid "f444f1ef-b44d-4e3e-ba32-d56c919ef7c7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "da01c6e2-36e6-45d8-8f92-e0203068dbea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7950f4d5-058e-44df-89be-09af2460d7d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/af972c0f-6e96-4756-b25b-143313580e39") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole exclude_from_pos_files) + (fp_line + (start -21.43125 -9.525) + (end -21.43125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ddca4baa-6179-468c-871e-e32bf34b5e05") + ) + (fp_line + (start -21.43125 -9.525) + (end 21.43125 -9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9fa158d0-0a98-4fbc-b75e-52534a97a2c6") + ) + (fp_line + (start -21.43125 9.525) + (end 21.43125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a6c6223c-44aa-4351-96d7-912cfb32d54c") + ) + (fp_line + (start -7 -7) + (end -5 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f6d06775-2239-4107-bea3-2bc280a24003") + ) + (fp_line + (start -7 -5) + (end -7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "93438c6a-0033-409a-a0b3-3273f4dbcdb0") + ) + (fp_line + (start -7 7) + (end -7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a1ed50ee-7c48-4a99-8049-971b2b205771") + ) + (fp_line + (start -5 7) + (end -7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "385524cf-5d6e-4525-820e-a07c75c9e492") + ) + (fp_line + (start 5 -7) + (end 7 -7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "43d7f912-c4cc-4970-9eae-73df78bc2538") + ) + (fp_line + (start 5 7) + (end 7 7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "79d192c3-5e14-4f69-8163-b237f61f6d07") + ) + (fp_line + (start 7 -7) + (end 7 -5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c95374fe-0f9a-4029-95a3-b9c1ecd6e8f2") + ) + (fp_line + (start 7 7) + (end 7 5) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f84bf53a-8b9b-4117-aa69-de6ea09e7a42") + ) + (fp_line + (start 21.43125 -9.525) + (end 21.43125 9.525) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "330b79aa-1784-45ea-bf23-d2a625070f2b") + ) + (fp_line + (start -15.28125 -5.499999) + (end -15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2db0a534-ce96-4eed-8cfa-5d95d4ab9979") + ) + (fp_line + (start -14.78125 -5.999999) + (end -9.03125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6aa97181-4871-4f7f-a867-019b1db48b64") + ) + (fp_line + (start -14.78125 8.000001) + (end -9.03125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "507524e5-69b9-4209-8f17-189ad6700593") + ) + (fp_line + (start -8.53125 -5.499999) + (end -8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d48bcc98-fc99-4692-9bad-020690921a55") + ) + (fp_line + (start 8.53125 -5.499999) + (end 8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "90133f53-4c1c-480d-9918-673fc038ea25") + ) + (fp_line + (start 9.03125 -5.999999) + (end 14.780039 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c447628d-7feb-4e18-9dfd-80344485a0c6") + ) + (fp_line + (start 9.03125 8.000001) + (end 14.78125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "44a275e0-4f43-4b7b-9866-e46c6340e1db") + ) + (fp_line + (start 15.280039 -5.499999) + (end 15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9940d7a0-faa8-4790-bac1-21495d3e33bc") + ) + (fp_arc + (start -15.28125 -5.499999) + (mid -15.134803 -5.853552) + (end -14.78125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5cee5194-d37a-48d6-b09f-80cf93f291cc") + ) + (fp_arc + (start -14.78125 8.000001) + (mid -15.134803 7.853554) + (end -15.28125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0a1fc084-d2c5-4d52-87c0-9914ac8dca99") + ) + (fp_arc + (start -9.03125 -5.999999) + (mid -8.677697 -5.853552) + (end -8.53125 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "34d2a981-7687-464d-97e5-a43c57eeaba9") + ) + (fp_arc + (start -8.53125 7.500001) + (mid -8.677697 7.853554) + (end -9.03125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "269cefe4-7838-4854-9f79-e15cb43e7b06") + ) + (fp_arc + (start 8.53125 -5.499999) + (mid 8.677697 -5.853552) + (end 9.03125 -5.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bb5f0361-d96b-4a36-bd68-c1d6a9a3c48b") + ) + (fp_arc + (start 9.03125 8.000001) + (mid 8.677697 7.853554) + (end 8.53125 7.500001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "85b714e1-d21a-4e0e-80a6-2e8f8ceaf717") + ) + (fp_arc + (start 14.780039 -5.999999) + (mid 15.133592 -5.853552) + (end 15.280039 -5.499999) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e77a64e9-cbf0-4723-b584-8117e87a49a6") + ) + (fp_arc + (start 15.28125 7.500001) + (mid 15.134803 7.853554) + (end 14.78125 8.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "df5a724f-2f46-458d-8f04-720b452f58fa") + ) + (pad "" thru_hole circle + (at -11.90625 -6.985) + (size 4 4) + (drill 3.048) + (layers "*.Cu" "B.Mask") + (remove_unused_layers no) + (uuid "aeb2cd11-f7e2-4a69-a883-cace4a83916e") + ) + (pad "" np_thru_hole circle + (at -11.90625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "a17da119-5d3f-400a-971e-729e93221962") + ) + (pad "" thru_hole circle + (at 11.90625 -6.985) + (size 4 4) + (drill 3.048) + (layers "*.Cu" "B.Mask") + (remove_unused_layers no) + (uuid "b57a7580-0d15-44ba-86ba-bdf2ee4e2527") + ) + (pad "" np_thru_hole circle + (at 11.90625 8.255) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "244179b7-4db4-432d-9692-41d2afbeef16") + ) + (group "" + (uuid "a366f44a-d1fc-4bc5-86ce-461f2d02f428") + (members "0a1fc084-d2c5-4d52-87c0-9914ac8dca99" "269cefe4-7838-4854-9f79-e15cb43e7b06" + "2db0a534-ce96-4eed-8cfa-5d95d4ab9979" "34d2a981-7687-464d-97e5-a43c57eeaba9" + "507524e5-69b9-4209-8f17-189ad6700593" "5cee5194-d37a-48d6-b09f-80cf93f291cc" + "6aa97181-4871-4f7f-a867-019b1db48b64" "d48bcc98-fc99-4692-9bad-020690921a55" + ) + ) + (group "" + (uuid "bbb14960-8cc3-4008-b67c-3d9a71de2fe9") + (members "44a275e0-4f43-4b7b-9866-e46c6340e1db" "85b714e1-d21a-4e0e-80a6-2e8f8ceaf717" + "90133f53-4c1c-480d-9918-673fc038ea25" "9940d7a0-faa8-4790-bac1-21495d3e33bc" + "bb5f0361-d96b-4a36-bd68-c1d6a9a3c48b" "c447628d-7feb-4e18-9dfd-80344485a0c6" + "df5a724f-2f46-458d-8f04-720b452f58fa" "e77a64e9-cbf0-4723-b584-8117e87a49a6" + ) + ) + (embedded_fonts no) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "4a6f7644-b319-4c84-86ba-4e8d2ffb9bc2") + (at 185.345 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D39" + (at 0.2044 -0.005 90) + (layer "F.SilkS") + (uuid "1a6663e7-4421-4e57-b16b-84fac162d607") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1556 0.025 90) + (layer "F.SilkS") + (hide yes) + (uuid "9b26c309-d444-449b-b867-9b963a620520") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f630bf8b-70b9-4455-adda-dcd57f46af80") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "472dbb9b-92b0-497d-870a-393e8cf42493") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/9528b07a-bb2c-4b7a-a539-c673c2b5543a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1349655e-6d27-4c29-9be9-efb69a818cd7") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ecaa1e25-0b72-4404-a1fa-fb80cdbecf27") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1c1198da-5708-4950-b802-cc78ac16a032") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1b085741-9df8-45d5-b42b-92e5356d271b") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "59fbf4bc-637f-479c-a45c-39a3b7bc2d54") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6edf3d2f-ed35-496b-b3ed-e4e596375c8c") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "21cd11fe-c81c-48a2-9453-0678e7ac9e94") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "801cfd67-8ff6-43b5-8534-fbdca2a8b361") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "72dce183-7458-4e1d-8575-a8947cd2ae16") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "978a7609-3fdc-4014-b294-4cb8ab184c00") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "62a437c1-a0d2-4e12-980c-799436d3f922") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "1156d52f-612a-46f4-b83f-73d1d6ea9de9") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "d3620e3c-de1b-45ff-b96f-f807e44993ea") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 61 "Net-(D39-A)") + (pinfunction "A") + (pintype "passive") + (uuid "2f409941-c377-438a-b263-45f9e7d74bcd") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "4b5c0773-fb42-4df0-a673-fcce08271a09") + (at 93.4013 57.65 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C6" + (at -2.625 0.00395 180) + (layer "F.SilkS") + (uuid "b2f3f9fb-15a8-44bd-8ea0-e23080d878b6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "3a430e73-40ef-47fa-ac32-0672ee6eb745") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "2367f8bc-5eed-4fd2-a3c0-04de404ba828") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c28464e7-4c69-46a3-bdcb-f74d3db64cbd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/260e3606-a354-4351-a844-1997c309f36f") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0331ea6e-b6cd-4d03-b5f2-a17ee6580ff3") + ) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "492f72c5-688a-40d2-a9de-6342be42270a") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "30353988-dcea-4c44-96c3-f72213d9a202") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b1b08bb9-0e22-447b-b650-fa098f0f5886") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "993f77f5-295a-4c5c-bc03-456cf0957190") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "76da4ff4-ac99-4381-ba10-aab653ac4910") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8e7373eb-f5e8-454d-bbe2-aa71a86a74d0") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3ccea6bf-dc1e-4c93-9015-efaf82411e96") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f917cc14-3260-4b1a-9a6b-98d573f81494") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9128d1cb-73ed-467a-8446-ddd8fe64c736") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "83f8ecb0-323c-4665-aa74-134090c6fe52") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "286b928d-f164-4c14-b447-09934dd38cff") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "b54299c1-7b04-4df3-adfe-c4035fa52fa0") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 2 "+3.3V") + (pintype "passive") + (uuid "29fe166f-7de0-42a3-9c16-0c112a8ee3cd") + ) + (pad "2" smd roundrect + (at 0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "e7482e7c-b5e5-472e-83e5-8162cdb34a91") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "4bfbc03b-0059-431e-9663-03215ea92d49") + (at 75.8763 70.425) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R7" + (at 3.12495 0 0) + (layer "F.SilkS") + (uuid "4d1afba1-b6c7-403a-9e37-0ae6b7f7d5e7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "22" + (at 0 1.65 0) + (layer "F.Fab") + (hide yes) + (uuid "ae6434a5-9d9c-41b3-ba7d-ff0a876952d7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "1d58ac6d-b650-491e-bf20-15d2cd322000") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "a1e21916-e103-4f6d-9f06-67ca50171dc6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/5c57828a-36bc-4da4-bfd6-d3d5666e7619") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c28d97f4-fc62-4452-9e1a-129251418566") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2517e820-da46-4d2e-944a-fb06290bb73a") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "39341cf8-59c1-40de-b59e-5c6b9e5ded70") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8b54f70d-e85e-4f30-b8bc-a15d7efb56a5") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c5721b66-2d85-4364-b08a-459b62c5ae98") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5b8158f6-6764-49eb-9506-e93da9b7a74a") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e9b7c859-965d-4694-8942-de8de9a73c94") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "78864761-7ae2-45cf-867a-b20e144174a8") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "37c0977b-699d-4504-996f-a84cdc210d15") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d425233d-37b1-4879-88b6-dde6b04812d5") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4c5bf40a-5ff8-44df-be01-2748ecd9093e") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "caffadf2-3037-423e-94b7-8ab5e857038f") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "8464d00f-5668-4211-818e-079a8a1be6d8") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 90 "Net-(J1-Pin_4)") + (pintype "passive") + (uuid "41eb4210-57c2-4421-9cbc-d0d4e7d4dae8") + ) + (pad "2" smd roundrect + (at 0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 89 "/JTMS") + (pintype "passive") + (uuid "4fa13e13-9209-46c6-adcf-12a5ab2ecca4") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "4cd884e3-cf3c-45de-a6fb-ecdb444af5b5") + (at 100.9513 59.475 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C2" + (at 2.95 0.04995 180) + (layer "F.SilkS") + (uuid "7a291965-cc87-4404-a796-86b6f0a07b5f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "20pF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "d54cd2b5-a38a-42dc-8db3-33bc2c0e328b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "b319a31e-43e6-4c11-a5e0-43523faed90d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1b314916-dea4-4e88-9cee-bc71510cccb7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/6bbda6bc-f811-45ca-81a4-9ccc00f06fab") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9f3b696b-bed2-4469-b501-5ff5b48f1b1f") + ) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8eb62c4b-fecd-4f7e-a3b5-07a92b7eb2a8") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "35ce0b21-3785-4b3a-9e14-b473e9991267") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "87190d36-a1cc-47c3-b4fd-3f3ccd7d04d4") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "85442d68-309a-4a4d-916e-99197538ae68") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "95d4f12a-edc3-41c4-98a0-9cdbae6e2d18") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5f794967-019a-46ff-a120-8c1ad80448fc") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "31d269f9-dcca-41e8-8480-34058a8ae932") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "413dc358-d26b-4fc3-8c92-b9584abc4c7f") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9c45f365-091c-4303-aba6-864f5a8124ea") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a81b0f17-cf4d-40ec-bad1-d76b420d0cac") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b304e728-bbc6-4dcf-a232-213eb33681a1") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "b6af9c1d-60f2-4fae-bbf3-d274a8944176") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 44 "Net-(U1-OSCOUT)") + (pintype "passive") + (uuid "ba299753-d749-4231-8021-1293ad0f3db1") + ) + (pad "2" smd roundrect + (at 0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "4c4d9350-0492-4975-a4b8-51b5de81e56b") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "4cfbe0fb-fa28-4607-a055-4123d7a507a3") + (at 125.8138 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D19" + (at 0.2544 0.0562 90) + (layer "F.SilkS") + (uuid "ef70b0a1-0a0d-4e4c-9b89-7e69bfcd3ecc") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0656 0.0462 90) + (layer "F.SilkS") + (hide yes) + (uuid "1fa7f2dc-88f3-4ebc-9982-bb275b9cfb73") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "18b42d69-c87f-4a32-9972-7696d32f7d8b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f16a3377-1847-47de-98aa-4648b12be6d1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3eb42fb2-d4e6-467b-82e7-7335dd9c39b9") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5a87a5d3-e18c-46a8-a429-a586d706cb24") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c2b23e5c-d15f-4901-847a-09808c79bf95") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d5de560a-d999-409b-9d66-8c907504b9b9") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1c0fe400-c448-4216-9e66-4ceefb21ecc9") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6d60b8ba-3979-4872-ab77-86d900f4fe31") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d0b5f113-ed58-4daa-bd9a-01f5498abf38") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "65cf95cb-6d97-4b62-8b2d-3e515ccbe880") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4ce32f8d-36e4-46bd-9e60-b1060ab2495a") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9247277d-bee0-4ff7-9b8b-bfba27bc90ee") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "78f3b892-424d-4e96-9bf5-46287dafef4f") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7f698726-f0f8-41c7-809d-91578e92da48") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "87139ceb-4a2a-48fc-93ab-64f10c1eea23") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "663f8fa2-512b-4640-9cd7-626f8bd34b40") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 20 "Net-(D19-A)") + (pinfunction "A") + (pintype "passive") + (uuid "67276b40-18f6-4735-ac4c-4a9bdb6238a1") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "4cfcec0e-c84b-4b92-b059-ced75de7e165") + (at 89.8513 57.65 -90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C9" + (at 2.671 0 180) + (layer "F.SilkS") + (uuid "96763679-e1ce-428c-943b-4f472aaa8507") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "4.7uF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "a8de324c-b45a-42c6-9800-4e1e467db013") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ac47c885-977c-41ab-988d-594d247fc023") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "980c083a-ddf7-429c-8f18-27c3216cded6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/68cc06c9-d019-47d1-bae7-2856c48d1f53") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8928eb5d-20a9-4072-9a89-8811d1e0fdd9") + ) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a956f43c-2742-46e7-8076-6983bf4fcd53") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6b47fb28-c853-45f4-8c0b-d0cded6b313b") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "df4cf88e-c89a-4657-80c4-d0c726a6f96e") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "462e2de4-6087-4ea2-8350-c6b8581831cb") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3324591e-4705-46fa-ab4f-635569c8d20a") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "aaee010c-7581-447c-ab76-69b896713180") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c95abaaa-5015-4903-b650-9b199262281f") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ce3be8b6-c8cf-4485-b5ef-fa59c11f68fb") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "05cb1ec0-361b-4b6c-834c-7ac36e9baea0") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "968e692b-2f65-44bd-8c49-c56c021219c3") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3527f824-d3e5-4a52-85d2-e6f23e71ecc2") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "8ede75d3-1ccf-4719-9ad6-e8b44d71efdb") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "d50312bc-dd46-4b89-9227-6b8e7ee3f564") + ) + (pad "2" smd roundrect + (at 0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 45 "Net-(U1-VCAP)") + (pintype "passive") + (uuid "e2638153-bdea-4ed7-8adc-9225f0629ce9") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "4dc8d405-02e8-4ae3-85d4-6377a82293aa") + (at 325.8388 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D48" + (at 0.3244 0.0112 90) + (layer "F.SilkS") + (uuid "024eb0e3-bd98-4b81-b988-ccb60af2ee4d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1356 0.0812 90) + (layer "F.SilkS") + (hide yes) + (uuid "bc2e3067-d6a5-47c7-90c2-bc0cd3644b52") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ec357dd6-ce1f-47a7-a5fe-fe329c2b1eaf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7097a163-0552-435b-9b4b-1dbe40d008f7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/541ba844-7e6b-4079-bc16-7a53d5906d08") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7dd11e48-e901-4e72-82ae-46a46068c46f") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "323fc32b-ff50-46e2-b471-412ecec68f14") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0bb8907d-83af-46b7-92e7-9876d390769d") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9e9936e8-b126-494e-9702-9b6bc9211b0d") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "50c8e01d-f1c5-44dd-86b4-83505d9d4246") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e809596c-0d1f-441e-8524-57c49c20ea5a") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c2f4c222-e656-481c-ad7c-93b583d865e0") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "74032ea2-2c05-4369-95b7-5b2d2a240469") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "befd8b43-08e4-4898-b2b4-1571584a62b7") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ed068005-2014-4cde-b5fd-5f67262d51bd") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3cb75c07-e4df-4ce4-8329-96bda5f35b60") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "4f087745-d1e6-4011-bd62-4f5f789545d1") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "8c50336b-8159-4287-8e94-d19ac9609f77") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 70 "Net-(D48-A)") + (pinfunction "A") + (pintype "passive") + (uuid "bcb4b4e7-8088-46ab-8b99-7b97d5884901") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "4f1497d9-ffcd-415a-824d-a4879374630c") + (at 211.5388 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D27" + (at 0.2144 -0.0188 90) + (layer "F.SilkS") + (uuid "ffa6bd49-74e8-4338-945f-9a7e41cd39a8") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1556 -0.0388 90) + (layer "F.SilkS") + (hide yes) + (uuid "578feb6c-df60-4586-9173-035726059878") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "28a08c8c-8676-4ce2-bff4-daa51f7b7a75") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3d19ac32-6ece-438c-bb6a-bba072b8785f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/14726d6e-d39b-4871-826a-db6592452b58") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "54466104-4e03-4eb6-8e56-fb51afd9359b") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1cbc42c2-c85e-45e3-8470-f5f32970a5ca") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "88afb119-1134-4791-bc88-6c1465631e7b") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "61083e7c-d568-4cea-a89e-946a5a614290") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d4263f95-0bae-4636-be8e-6888549c18cd") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2904a4af-2c26-4ace-af15-ac7e4486ce72") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "21e45cc2-b2b6-4fd8-b866-4a5647aa2659") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ca68231d-885e-4340-a0d7-3fbc35c5e2f6") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0d7295e5-2b90-4890-8e68-bc7862ff9b48") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f5744af4-b298-4112-ada1-4fb1610585bd") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4ac33e9a-98d6-41b5-a68d-bb59fc57ea57") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "860265fa-4729-409f-bb93-51cbf815ea22") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "e7e83150-49f2-47af-98b5-0f7442e52d88") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 33 "Net-(D27-A)") + (pinfunction "A") + (pintype "passive") + (uuid "d0af713b-4695-4209-a961-07aa2a14688b") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "528e1029-17ce-4e6a-88fa-2668294496e4") + (at 213.92 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D41" + (at 0.1744 0.02 90) + (layer "F.SilkS") + (uuid "6947cc39-42f1-411a-bd25-2e3785182995") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0756 -0.04 90) + (layer "F.SilkS") + (hide yes) + (uuid "664172dc-a2ba-4285-ae03-f1e8bdf1979b") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "19468c35-d34f-4a77-8750-b3bca00734fa") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c034610d-2da0-4b06-bd1a-541b22d85cea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/67841535-19c4-4d15-9cfe-ce11e23a842e") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "803ac957-3e17-44d7-bd47-4d1403644905") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "670011f5-d813-4e78-b908-31692562e627") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b4d3dbf6-6bc3-463b-a096-e67a90a45c67") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d5dcddfc-5f50-4a97-a663-07a9e393aca4") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "64a24b76-fd64-485f-b855-6dd0159315be") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "acd46085-445b-4a63-8437-78535f3fc791") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "38bdf3da-f6db-4e5f-b87c-4d9b125a69ce") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e91c8755-491b-43f4-81fe-86d36ec5f9a2") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1c67f2b9-c5e3-4b9d-a272-9ce3eebcc7f2") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8c546907-724b-47ca-ada8-4245901bde96") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "416a3c08-d8c6-41cf-93e6-dbbad7f72e38") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "85243931-8270-4b1f-83c6-8046fc130344") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "a684cada-3c36-47e1-9d60-d6233e1a662d") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 63 "Net-(D41-A)") + (pinfunction "A") + (pintype "passive") + (uuid "46e814cd-a2ab-4d86-b836-77039420b5ec") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "52dde66a-6daf-4f77-ab5b-f2b4e454232f") + (at 209.1575 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D9" + (at 0.0244 0.0825 90) + (layer "F.SilkS") + (uuid "4ca63c60-33f6-4a10-9b71-384f4d35e6ee") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2356 -0.0075 90) + (layer "F.SilkS") + (hide yes) + (uuid "a9460309-4dfa-4605-abd7-e85d6fce1c5d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "09299578-6350-412c-b295-e376ee3f27b5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7b4e5934-0137-45ea-b3c3-128d8d983896") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/6932fc9c-c7e7-4ac0-a0d4-8942e8e51094") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5ec7d5c9-c8a9-4db2-9003-b00ea21a63c5") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "81bc6e98-9fd3-45a0-b8ab-3e405d037986") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fa07bc7b-c451-47a5-ab43-30dea2b0a67b") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6d5bc931-0db1-46fb-bbfb-d7bcca30c06c") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "82296194-978f-4c1b-bfb7-e818fc2e22ff") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dc9e58b0-26fb-40d7-85f3-54ce9e8efa31") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8dfe058c-60df-4fb8-80f0-a67b716c0095") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4f699f51-0ae0-49a8-9c0a-c6ffe9bcd695") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "eb963e9c-9b77-413a-b681-a9650fded32f") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5ff001dc-5b0f-4a84-b148-af34b7712fcb") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f24adae2-15bf-4134-9677-a705c06c94e1") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "f1bb2f3e-5831-409d-9511-40771865f8ac") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "70027c9f-6a70-40d4-8aca-a8521f3bc43a") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 10 "Net-(D9-A)") + (pinfunction "A") + (pintype "passive") + (uuid "ffa3d540-ee35-4382-9be0-2ca94073e767") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "54b9f55a-02c2-4490-b28b-5fc42a6bdb35") + (at 152.0075 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D5" + (at 0.0144 0.0525 90) + (layer "F.SilkS") + (uuid "e16ebf51-1651-4ad6-944b-7c5a3ed5d3f8") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -7.9956 0.0125 90) + (layer "F.SilkS") + (hide yes) + (uuid "44809634-e7a6-4ce3-8761-d2e3b02b4b23") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "506c2008-a2f4-49d8-9372-83874871efd0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1c2995a1-f24b-4d3a-bca4-24558be71fef") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d466eb56-7538-493e-8a7e-88ec89ec60f1") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cdeacc9e-e289-4aca-b57b-524c2e46485d") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f474c465-b6e6-4691-9704-5108bd497b10") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a04ee2eb-0cc5-486e-8ad4-b2a591326d18") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a65ae2c8-4ed6-4b73-ae0c-f836d42c054e") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c1bb8e38-94fb-45da-b54d-a3dcdcc6ab85") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "466b544b-ce5a-49ff-a1b8-4c119a192a6e") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "57d1c2a2-004c-400c-8682-16064169448a") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a458d291-e8d5-4d27-a339-c76fb28f7fa5") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3bd81584-4820-445d-8bec-6e3556fa25e0") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c0e2568b-00e0-4ac6-916d-c3a8f1c1feb1") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f69bd0d3-583c-46d6-b966-e0cf9a22a806") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "6c0beebe-b8ab-4e45-a038-ccf70bd2b10e") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "ef61b816-bf23-40f7-b797-e56a887641dc") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 6 "Net-(D5-A)") + (pinfunction "A") + (pintype "passive") + (uuid "0542bb71-90b7-4821-83e0-c462286d6ecf") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "5552a74e-c099-4f2d-bcf2-45458b9cdd1a") + (at 235.3513 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D11" + (at 0.1944 -0.0013 90) + (layer "F.SilkS") + (uuid "3b69c823-b130-42b8-bf65-e2158cbf7fd1") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1956 -0.0013 90) + (layer "F.SilkS") + (hide yes) + (uuid "670ed24f-2b88-408d-8afb-11dfddb8eec0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "28fe0396-bf08-48e9-81bf-85433f624373") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e160df68-d405-4f1a-8aa3-b53e159f8c9b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/16f03836-171f-40a5-8203-d1d7fb55edd7") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "665d01be-c4a3-4a2a-acb1-83f0b937b93e") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "43a17bbc-00f1-468b-bcf4-472bf62708ee") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1a6f239b-1d24-46ba-8026-965bf9205b65") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "22947f9c-af78-4178-8bc0-bf03c901100a") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4588a763-b8ea-442f-865c-a740d188aca9") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e87ec7ed-3ec9-42ba-ba2f-35b19150b8da") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fa0d4317-796b-427e-933e-0cff2e63b637") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "df0644a5-ce03-4058-bbf5-3964e822795f") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "928e3fd5-9f74-49ba-8d24-8b26c7989fd4") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2fcde0fa-7812-4a31-9109-f30719cfae25") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ce387a06-5878-4618-a262-2efb3618d4af") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "fd3328b4-cf81-42d2-99b4-0fb289371101") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "1b2233b2-034f-4a25-b600-de5cfed946d2") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 12 "Net-(D11-A)") + (pinfunction "A") + (pintype "passive") + (uuid "0d95a426-d064-440d-b48a-e683da0ad4c0") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "565b1e20-11f3-4188-917a-c73659756586") + (at 286.5481 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D60" + (at 0.2544 -0.03 90) + (layer "F.SilkS") + (uuid "208676c8-71bc-4853-8766-5b3cb85d4840") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2156 -0.01 90) + (layer "F.SilkS") + (hide yes) + (uuid "aa1cd8fe-71ee-4cf1-a80e-ae02bb4ba2fd") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "0e871c1c-3589-4459-befb-e40414c4b0d7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "df2980f4-529c-4ece-aa90-b7201e3b2c69") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1945bc0d-d7ba-4a80-8dd3-519b10c8a830") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2f72636a-1113-4c0d-b612-3d6bac446a83") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0db16b1a-e8c8-4101-b65a-78c0926e8560") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9386dc9d-293e-4b25-b1be-81d83f00ef6a") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ee69bf69-8c7c-481b-9a3a-aeb33a32ae4d") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5415d29a-9284-42e7-9756-38eca373cc4f") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e4fcec06-594a-445e-b70a-9307af3b76de") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "725724d9-f049-4b70-853f-95624223aa5f") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f82b3546-cd5d-4517-804a-fec6f15a138a") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "18d774f5-df52-4c5e-8f67-0e08d74bd239") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2d09fb71-6cdf-43a5-9d1a-ee4d1e4c26e2") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b2362494-6c8a-4c80-9048-af57740e1b20") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "fe1a79ad-1bf5-4048-97c5-990e9eacb414") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "7b41398c-0b96-499d-b162-6ec59a7907c0") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 102 "Net-(D60-A)") + (pinfunction "A") + (pintype "passive") + (uuid "b415644d-a76c-4017-ba5a-f81bffbacb98") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "568ef8e3-df28-4001-b525-aaf1d9811e60") + (at 84.3513 77.925 -90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C4" + (at 5.41878 0 90) + (layer "F.SilkS") + (uuid "daa71694-6aa1-414c-af20-a5d54de01c98") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "13e33d13-0afd-4c1b-a551-146601e9fbc0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "dc582bce-299a-45bf-9f5a-51be5dde2b6f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e32066e1-c500-427d-a788-d525084f5305") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/5d7500da-bd2b-4c6a-9047-3e2d6a3165ca") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "26100466-70f2-4731-986e-bee3a1991dfa") + ) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dba6ea65-f29c-47af-9178-ba6a126a346d") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6e576244-0323-4036-aaae-cb28bc711732") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "88e24e3c-2597-426c-af34-3f0ad0a1dbb5") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d50ddc4f-6ffe-4753-b8b2-52ff562c513a") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9e46f349-0f75-40ef-84c0-45bc86fe1296") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "32b4093d-b769-4bdf-8c6d-fa8c2b7a439a") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5a9499f8-9ba1-4b93-8fe6-d150520f4348") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d5df5ce9-638d-45f7-bc93-be30a946ff3e") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "77678ac0-1846-4b2b-9f6d-bf4a057da3bb") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "274885b9-b963-4ca2-b9c7-c72039fee92c") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "443549d3-eb78-4f34-a2a1-dc8ad29db6a0") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "dfaa6638-79c7-48af-9f02-21869b8ba140") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 2 "+3.3V") + (pintype "passive") + (uuid "990f5088-ad58-4b24-8601-f11e77024501") + ) + (pad "2" smd roundrect + (at 0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "ce671547-57d5-4db1-8e5f-4c804636b355") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "587a6d2a-7ae7-4a7f-842e-fff37ea83096") + (at 200.8231 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D54" + (at 0.1444 0.0269 90) + (layer "F.SilkS") + (uuid "215015c3-800c-46ce-a3b4-cd46726571d3") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1656 -0.0631 90) + (layer "F.SilkS") + (hide yes) + (uuid "995bbb12-af95-4968-95aa-7a9d34141a44") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3a545ca8-b96c-4d1b-852e-f3227bd72873") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1c5e4140-4dff-445c-bcfc-38fb0d656b23") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8dfe5ea9-ccb7-4e15-bde7-2d243cea9ebc") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b1a8e2e8-97b9-448c-a17e-f45824cdc89a") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "03717931-a3d1-46a9-b6f0-71cd59d4d21f") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "45cfc7a7-ddab-483e-95a5-b4d3f7a243cc") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ecb89137-8f6b-4a0b-8490-b33c0f1b0544") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "91c5c831-ac2e-4d8b-893b-cee6d16189cc") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1191911a-8245-4212-8c26-55b0a3554ed9") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5e6d41b7-bcba-4d21-a9ae-7c316af64423") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "385ba276-1e45-4e3a-ad47-b94c0598ccd7") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "90a9ce22-b68e-4c20-a832-f36f3133d2b8") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "18fd0d5d-472c-4d9f-b35f-1347441d4df5") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a30705c9-66f0-4ba9-b0d9-3193b05619ba") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "4940891c-9901-4732-8244-416effc3b6b4") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "af0389c8-888e-4783-98e1-3e479570544c") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 75 "Net-(D54-A)") + (pinfunction "A") + (pintype "passive") + (uuid "0047172c-9788-4150-bdb8-719a1efe44ab") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "6212371b-89df-4556-baa1-a75658aecdd1") + (at 167.4856 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D6" + (at -0.0356 0.0544 90) + (layer "F.SilkS") + (uuid "d99d1143-8b14-4953-bcc2-370c525a37fb") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1456 0.0744 90) + (layer "F.SilkS") + (hide yes) + (uuid "46f90d88-b89a-4f01-a254-c1989b9356e0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "da1f96b4-9d9b-4ca0-a8a1-714369a0a18c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "8ceb834b-883e-4f2c-adcb-4996912827bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/7e3a58d6-c4e1-41ce-b74e-eeedc486ae3f") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e4851ca1-5438-4dee-819b-e19fb1a9d365") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1af2dd06-3069-497e-930d-07b791c7f7c2") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "33e3636e-049f-4aa5-ade5-0912036dd994") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c24de47f-04cf-482d-9c0f-8a88615f8de5") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3a967fd1-9818-4aa6-82f9-75290d9cc91d") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b2604cc4-d3c2-48c0-8535-c6f1f155895c") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5fa5e521-b55d-41bb-9dab-deee83f66bf7") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "227790ff-13b8-4802-b215-8e2ce9d13742") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "27a18946-fff5-4a3f-b5fe-017f9ae6bfe9") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0da33ab0-4ee9-471e-a4bb-8db5f7007581") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4cc9eefc-73ab-4b76-9dbc-c3b828380065") + ) + (fp_text user "${REFERENCE}" + (at 4.11 0 90) + (layer "F.Fab") + (uuid "dde8eb0c-231e-45e3-aa65-333467d32ea1") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "451eb986-62cf-4511-af52-c379c4e7974c") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 7 "Net-(D6-A)") + (pinfunction "A") + (pintype "passive") + (uuid "6979f1bd-0467-4658-97fe-65f768188e3a") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" + (layer "F.Cu") + (uuid "63e476d1-d6f5-46f3-885e-bebf57b956fb") + (at 111.5263 173.8314) + (descr "Kailh keyswitch Hotswap Socket plated holes Keycap 1.25u") + (tags "Kailh Keyboard Keyswitch Switch Hotswap Socket Plated Relief Cutout Keycap 1.25u") + (property "Reference" "KEY_ALT1" + (at 4.52 -8 0) + (layer "F.SilkS") + (uuid "b502ae39-c27a-4494-a22d-7f341975b050") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 8 0) + (layer "F.Fab") + (uuid "22b1ed9e-a630-4d9b-908c-c2a36e5528e3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4a6b1656-6c01-4904-9dbd-828eaea09d57") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96349bcb-3afc-47f1-b710-e2991b917263") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/108dd771-9fdc-4d98-b67e-475219c6b109") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start -7.1 -7.1) + (end -7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0eaf79ed-32aa-43ce-becf-b208266d61ec") + ) + (fp_line + (start -7.1 7.1) + (end 7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "80c5ca8b-878c-4477-a25f-b1d299b1f838") + ) + (fp_line + (start 7.1 -7.1) + (end -7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "257231c5-7eca-4d8b-9413-2a4630a01b50") + ) + (fp_line + (start 7.1 7.1) + (end 7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "53fb245d-ebb7-4607-a91a-c21436e56d4c") + ) + (fp_line + (start -4.1 -6.9) + (end 1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "3d913ad6-9d5d-4519-9ed4-689f4f57f110") + ) + (fp_line + (start -0.2 -2.7) + (end 4.9 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "b730ecf8-555b-468f-bdee-7ff8e236515f") + ) + (fp_arc + (start -6.1 -4.9) + (mid -5.514214 -6.314214) + (end -4.1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "27ec6837-e8a4-4929-99be-838d1f32d83f") + ) + (fp_arc + (start -2.2 -0.7) + (mid -1.614214 -2.114214) + (end -0.2 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "02987cdd-44f8-4e95-8b9b-d4b9ff47ca1d") + ) + (fp_line + (start -11.90625 -9.525) + (end -11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "35d9caec-f364-4a3e-906b-34914abbbdcb") + ) + (fp_line + (start -11.90625 9.525) + (end 11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f785caf5-b208-4a48-959e-07a68dc2a39e") + ) + (fp_line + (start 11.90625 -9.525) + (end -11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "da2f45f9-5f45-4cd1-818e-55eec8b8c43c") + ) + (fp_line + (start 11.90625 9.525) + (end 11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9e170df6-b84e-4fe8-a193-fe3b58e550d2") + ) + (fp_line + (start -7.8 -6) + (end -7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "3af549b1-a792-4cad-b5e5-0c316748b046") + ) + (fp_line + (start -7.8 -2.9) + (end -7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "0ecab238-5156-4f0d-9fb4-7b689296e2a9") + ) + (fp_line + (start -7.8 2.9) + (end -7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "f9a6c1a5-c49c-43eb-84c7-b7faad048f7f") + ) + (fp_line + (start -7.8 6) + (end -7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "9953cee2-72e0-4de4-84e1-487907a3d6ce") + ) + (fp_line + (start -7 -7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "981f4d8d-97ea-4739-83fd-5c12c5b680e1") + ) + (fp_line + (start -7 -6) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "81eba18b-9f7d-474e-90b2-b7de9681265e") + ) + (fp_line + (start -7 -2.9) + (end -7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "14e3d99c-89c5-4ab5-9af2-ec690127b0d8") + ) + (fp_line + (start -7 2.9) + (end -7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "5c349ff2-7c9a-4e67-a68d-cfa5776b26cd") + ) + (fp_line + (start -7 6) + (end -7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "ac4f5aaa-274b-4029-b3a8-1bccba6ba4f3") + ) + (fp_line + (start -7 7) + (end -7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "935cc55a-eb39-4943-99ef-514fe45710d4") + ) + (fp_line + (start 7 -7) + (end 7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "7601e665-408d-4b1b-b506-bc71913b69d0") + ) + (fp_line + (start 7 -6) + (end 7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "48b194b6-33f2-4364-afbe-ca54bacdd685") + ) + (fp_line + (start 7 -2.9) + (end 7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "093b4b7a-6db2-404f-b602-a0985779e2df") + ) + (fp_line + (start 7 2.9) + (end 7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "fb4dce08-9347-4816-a427-c6ceea3071f9") + ) + (fp_line + (start 7 6) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "ae47e53e-0fe6-47e0-9128-c25a7d86a423") + ) + (fp_line + (start 7 7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "d4ab3443-ee6c-4c9d-a516-e166e0407028") + ) + (fp_line + (start 7.8 -6) + (end 7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "0b7296ba-5dca-429b-a1bd-5db537fd65c5") + ) + (fp_line + (start 7.8 -2.9) + (end 7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "9f7e34a1-40a2-4825-9bdc-bae353b37843") + ) + (fp_line + (start 7.8 2.9) + (end 7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "7f7a3389-2ea5-4ba0-8fe2-365d85a58e5a") + ) + (fp_line + (start 7.8 6) + (end 7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "15c59675-0d80-4879-82b6-3716ef742135") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "152aa157-2ae3-4e72-bfe3-459859fc603c") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c7c1d3d5-3254-416e-ab71-79a77e826c04") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0860ae99-5939-4d63-85f3-3a4256f0941f") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91d1a98a-4908-4bb2-890f-860a4dbbb0de") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ff4178c1-ff54-4031-a269-9d337004aeda") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d8d593a3-3272-4d0f-b2be-9a40ac3803ab") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b2c35346-20c9-43e0-95f4-f66318692e58") + ) + (fp_line + (start -7.25 -7.25) + (end -7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "99c109ac-0f6a-4054-821f-a77b04eb99c4") + ) + (fp_line + (start -7.25 7.25) + (end 7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "49840ced-aecb-4f70-aeb4-9ecf1d86f54e") + ) + (fp_line + (start 7.25 -7.25) + (end -7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0d4dd989-7854-43cf-bfec-5d64ca99e5a3") + ) + (fp_line + (start 7.25 7.25) + (end 7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "71ae09f8-d348-485c-86bb-8fdbb270e1a0") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "61e43712-a819-48d0-9ab5-44d2b02d053c") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "284dc410-db69-4106-81d3-72130cb08e14") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d7d9228c-94db-4834-bf85-4b964903a680") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3948ddeb-3d9b-4550-bd38-b2a9de45c331") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "fbefaef8-b633-4f65-bee2-89affc347d3a") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c2a08b67-54e7-495f-a8aa-720bf79ffc0e") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5da9e726-0bc9-40c3-b25c-0c19e1a17be9") + ) + (fp_line + (start -7 -7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0fa3d088-cec2-4b8d-9355-ddc877ccb11b") + ) + (fp_line + (start -7 7) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "be6cbf2a-dca6-4970-a5a5-94f3a9c5a2f0") + ) + (fp_line + (start 7 -7) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "164ce9db-8612-4c21-941e-aa0231d4242b") + ) + (fp_line + (start 7 7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d4b8629c-e9cc-4bc9-8911-b65363b1c368") + ) + (fp_text user "${REFERENCE}" + (at 4.52 0 0) + (layer "F.Fab") + (uuid "f49be440-af07-4612-82fc-029c1dec1556") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" smd roundrect + (at -7.085 -2.54) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "8ded4582-c3f0-4d62-ad4b-ab74646dbe62") + ) + (pad "" np_thru_hole circle + (at -5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "0ffa6784-5bd9-4717-bb99-67f71e608e17") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 4 4) + (drill 4) + (layers "*.Cu" "*.Mask") + (uuid "e1bc8282-a849-4cf6-a3db-aeb767b076b8") + ) + (pad "" np_thru_hole circle + (at 5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9a856191-b470-4a21-bf10-14fdb5416bac") + ) + (pad "" smd roundrect + (at 5.842 -5.08) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "4d218637-76af-4426-88a7-0ba98103ce6d") + ) + (pad "1" smd roundrect + (at -6.585 -2.54) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "fee33f78-edd7-4914-8af2-b0b30e277cb9") + ) + (pad "1" thru_hole circle + (at -3.81 -2.54) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "8a2f7a36-8435-4170-99e8-8b7ac5659a06") + ) + (pad "2" thru_hole circle + (at 2.54 -5.08) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 109 "Net-(D65-A)") + (pinfunction "2") + (pintype "passive") + (uuid "afcd778e-5321-438b-a1d8-dd13d26d1517") + ) + (pad "2" smd roundrect + (at 5.32 -5.08) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 109 "Net-(D65-A)") + (pinfunction "2") + (pintype "passive") + (uuid "d540152d-1614-48c0-98a9-2783648a0445") + ) + (embedded_fonts no) + (model "${KICAD6_3RD_PARTY}/3dmodels/com_github_perigoso_keyswitch-kicad-library/3d-library.3dshapes/SW_Hotswap_Kailh_MX.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "668dd5fe-90ff-47dc-9d57-7a131f98d49d") + (at 315.1231 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D75" + (at 0.2744 0.0869 90) + (layer "F.SilkS") + (uuid "052ef084-7af5-4e98-8cfd-c9ae4fd35470") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1356 -0.0931 90) + (layer "F.SilkS") + (hide yes) + (uuid "4ab779b1-c742-4dd8-a406-203a263d763c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "029b0010-eb3c-45cc-b6fd-1868f91fc221") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "531fcedb-4b55-4f33-b3ae-63bec6ca73fa") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8f1aea71-94bd-4342-9abf-971a8be1a4c8") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d60cfc9a-f7f7-4f0e-be76-2da4752e39af") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "99569a60-b097-4c8a-85dc-f6a05e2d0748") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4e83ae8e-7c4f-4505-ad50-b919def0850c") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9b3ebd4e-2765-403d-b92c-ec5a1c5ecf74") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d475a074-0fde-4fbd-bbef-3b7b74cbca4e") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b1c16d24-fd45-4983-ba51-8915a2045802") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2450a070-ee0e-42b1-bf3c-f56bf0fa28e2") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d037d529-1d65-4c7b-b84f-02beb217907f") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fe930d6f-cd17-464b-bf12-d4c40fb802d9") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "cd3d4823-863c-4d9e-bbdb-0b69a3ae7bd9") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0ce5db1a-2ed9-4515-8fe5-55106ea9a6b2") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "fa48513d-e6ec-45d8-bec1-c5ce961075ab") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "b67483fa-19bb-4e43-9162-6833b1c8644e") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 123 "Net-(D75-A)") + (pinfunction "A") + (pintype "passive") + (uuid "62f0470e-9672-4504-9490-605eb417384b") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-various:SW_SPST_SKQG_WithStem" + (layer "F.Cu") + (uuid "6ee5041d-01c2-44ef-a4eb-09bc783f5da5") + (at 107.3413 68.125 90) + (descr "ALPS 5.2mm Square Low-profile Type (Surface Mount) SKQG Series, With stem, http://www.alps.com/prod/info/E/HTML/Tact/SurfaceMount/SKQG/SKQGAFE010.html") + (tags "SPST Button Switch") + (property "Reference" "SW2" + (at 0 0 90) + (layer "F.SilkS") + (uuid "3343ce83-c1a3-42da-abce-16e154128f8f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Push_Button" + (at 0 3.6 90) + (layer "F.Fab") + (uuid "2364385c-1e03-4598-bf4b-3539438d94b5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "54a26331-3d87-4efd-b712-237d441d9264") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Common 6mmx6mm Push Button" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f243dc93-fa71-4393-9421-d05c65e783d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/3cd8ba19-3dca-4432-8dd9-49896aa80d3e") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.45 -2.72) + (end 1.94 -2.23) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8212ab0e-4fb3-48f7-a368-38f8818ce239") + ) + (fp_line + (start -1.45 -2.72) + (end 1.45 -2.72) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "58fa1f83-d710-44b1-8873-aca744132b07") + ) + (fp_line + (start -1.45 -2.72) + (end -1.94 -2.23) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c7876eb-612e-46c2-a2f5-bc29d66a2519") + ) + (fp_line + (start 2.72 1.04) + (end 2.72 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "704f9463-27b6-427d-b470-7294a7b677af") + ) + (fp_line + (start -2.72 1.04) + (end -2.72 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "955e07ee-33be-4796-a99b-c66432387760") + ) + (fp_line + (start 1.45 2.72) + (end 1.94 2.23) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "36b6a988-4a1f-4c3b-8641-b42cd564877a") + ) + (fp_line + (start -1.45 2.72) + (end -1.94 2.23) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a7b0e19e-8651-4f98-9fcb-1daedc0b344d") + ) + (fp_line + (start -1.45 2.72) + (end 1.45 2.72) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a6c96e31-4689-4533-b747-bf63807b3957") + ) + (fp_line + (start 4.25 -2.85) + (end -4.25 -2.85) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0648467c-a7b0-44e6-a03a-435cef5259fb") + ) + (fp_line + (start -4.25 -2.85) + (end -4.25 2.85) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "54215426-ad42-4ae6-ba6b-29b783abc6f2") + ) + (fp_line + (start 4.25 2.85) + (end 4.25 -2.85) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6f825290-98ae-49cc-8763-25bbdff867c3") + ) + (fp_line + (start -4.25 2.85) + (end 4.25 2.85) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "213ef983-27c4-45b4-adcb-2ab857ff9538") + ) + (fp_line + (start 1.4 -2.6) + (end 2.6 -1.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3e7af317-b164-44f3-acf7-552c55c6881d") + ) + (fp_line + (start -1.4 -2.6) + (end 1.4 -2.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f68a12ae-6a32-4df7-b126-496be5c616cb") + ) + (fp_line + (start 0.95 -1.865) + (end 1.865 -0.95) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4f86081b-2e49-4f38-a685-a23627e05929") + ) + (fp_line + (start -0.95 -1.865) + (end 0.95 -1.865) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "78fe9487-6a5e-4ee0-8adf-9d959d213d67") + ) + (fp_line + (start -0.95 -1.865) + (end -1.865 -0.95) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4c9a9417-ef4f-4217-a101-af5f92f0295b") + ) + (fp_line + (start 2.6 -1.4) + (end 2.6 1.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "50a260b0-197e-481d-848e-81510e3b10ff") + ) + (fp_line + (start -2.6 -1.4) + (end -1.4 -2.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8b0bc0af-d6b5-4ea3-bb6f-abef8eee14dc") + ) + (fp_line + (start 1.865 -0.95) + (end 1.865 0.95) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1c75a3f2-ed4a-4644-b06d-56987d701c2e") + ) + (fp_line + (start -1.865 0.95) + (end -1.865 -0.95) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3f444659-4c2d-4927-85d9-8bebe7442fe7") + ) + (fp_line + (start 2.6 1.4) + (end 1.4 2.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b28ba561-5cc6-47e1-a0d9-278da5f4cb7e") + ) + (fp_line + (start -2.6 1.4) + (end -2.6 -1.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "bec85737-7bd5-4539-90f4-f89dbcbddbf7") + ) + (fp_line + (start 0.95 1.865) + (end 1.865 0.95) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d3643271-cad2-4c9b-b8bd-c89362c0adf8") + ) + (fp_line + (start 0.95 1.865) + (end -0.95 1.865) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c6e681b9-aeb5-4f4c-bfa6-77f25d392122") + ) + (fp_line + (start -0.95 1.865) + (end -1.865 0.95) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "38a67023-8218-4a20-9ddb-c22ddbeb36a7") + ) + (fp_line + (start 1.4 2.6) + (end -1.4 2.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5d317a6a-c652-494c-b310-b2821326d622") + ) + (fp_line + (start -1.4 2.6) + (end -2.6 1.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5d053ed0-a0c8-4b3d-9c77-ad8c5cb36b63") + ) + (fp_circle + (center 0 0) + (end 1 0) + (stroke + (width 0.1) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "d2b75f49-112f-452c-b726-cff4c58091a5") + ) + (fp_text user "KEEP-OUT ZONE" + (at -2.5 -0.2 90) + (layer "Cmts.User") + (uuid "3fd89300-49ca-4ce2-8d27-51c639b6aa1c") + (effects + (font + (size 0.2 0.2) + (thickness 0.03) + ) + ) + ) + (fp_text user "KEEP-OUT ZONE" + (at 2.5 -0.2 90) + (layer "Cmts.User") + (uuid "52acadb5-997d-4fe7-b359-087122bf3771") + (effects + (font + (size 0.2 0.2) + (thickness 0.03) + ) + ) + ) + (fp_text user "No F.Cu tracks" + (at 2.5 0.2 90) + (layer "Cmts.User") + (uuid "7a063f00-13f1-4800-8847-f093f2afd0cf") + (effects + (font + (size 0.2 0.2) + (thickness 0.03) + ) + ) + ) + (fp_text user "No F.Cu tracks" + (at -2.5 0.2 90) + (layer "Cmts.User") + (uuid "d0402e0a-aedf-4086-80a1-236099f42a30") + (effects + (font + (size 0.2 0.2) + (thickness 0.03) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "d792b187-d004-4637-8e9b-8952a13d3ac2") + (effects + (font + (size 0.6 0.6) + (thickness 0.1) + (bold yes) + ) + ) + ) + (pad "1" smd roundrect + (at -3.1 -1.85 90) + (size 1.8 1.1) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 46 "/NRST") + (pintype "passive") + (uuid "c613fa16-8266-4acd-8ca2-62f70b59ac80") + ) + (pad "1" smd roundrect + (at 3.1 -1.85 90) + (size 1.8 1.1) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 46 "/NRST") + (pintype "passive") + (uuid "c4ec0eee-7f7d-4b7c-9596-410e56c866a1") + ) + (pad "2" smd roundrect + (at -3.1 1.85 90) + (size 1.8 1.1) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "a59b2a54-5b92-41ac-92e7-2564da20dc8b") + ) + (pad "2" smd roundrect + (at 3.1 1.85 90) + (size 1.8 1.1) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "a2ddbedc-dbaf-4fa0-806b-4e88bf851c75") + ) + (zone + (net 0) + (net_name "") + (layer "F.Cu") + (uuid "9c9d8f3d-ce35-4318-bd56-209d85fc1c7d") + (hatch full 0.508) + (connect_pads + (clearance 0) + ) + (min_thickness 0.254) + (filled_areas_thickness no) + (keepout + (tracks not_allowed) + (vias not_allowed) + (pads not_allowed) + (copperpour not_allowed) + (footprints not_allowed) + ) + (placement + (enabled no) + (sheetname "") + ) + (fill + (thermal_gap 0.508) + (thermal_bridge_width 0.508) + ) + (polygon + (pts + (xy 106.0413 67.125) (xy 106.0413 64.125) (xy 108.6413 64.125) (xy 108.6413 67.125) + ) + ) + ) + (zone + (net 0) + (net_name "") + (layer "F.Cu") + (uuid "842fc17c-fa18-4962-98d1-91a6013ab020") + (hatch full 0.508) + (connect_pads + (clearance 0) + ) + (min_thickness 0.254) + (filled_areas_thickness no) + (keepout + (tracks not_allowed) + (vias not_allowed) + (pads not_allowed) + (copperpour not_allowed) + (footprints not_allowed) + ) + (placement + (enabled no) + (sheetname "") + ) + (fill + (thermal_gap 0.508) + (thermal_bridge_width 0.508) + ) + (polygon + (pts + (xy 106.0413 72.125) (xy 106.0413 69.125) (xy 108.6413 69.125) (xy 108.6413 72.125) + ) + ) + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "6f5bd415-a32f-461c-8cf6-ed19d02fdc84") + (at 255.5919 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D58" + (at 0.1644 0.0481 90) + (layer "F.SilkS") + (uuid "d46f2254-43ca-419a-97d2-8a25b983adce") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1556 -0.0019 90) + (layer "F.SilkS") + (hide yes) + (uuid "efc1ecad-2f29-4b37-aa2b-bdc9aa11f865") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e57244bb-d357-4bde-a207-930780dea6f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "949056c0-ff50-4cc6-a519-a88d40a717ca") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8115d332-6670-4e74-a75f-1ab5d151c36d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6616018b-1b57-4e4d-8147-ecb42a2eeac5") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f07b93b9-d777-4fcc-a8ed-085e3d2fa046") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "389c2352-17e8-4f86-9975-c76f411729ce") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "39a1f19d-adc4-407a-92ea-a7d0b4ea8e63") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bb03fd9e-bf89-4633-aed4-172c3d4af624") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c605ece3-275a-4167-84df-47151de40913") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6693e6a3-5d51-4c88-a99e-8908170eac69") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9fed5f88-cdc2-41cb-b9cd-81900cb77e31") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "da633575-6dfb-4183-a4ab-d02f89dbbc4d") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c7137411-bc83-4bc5-9780-b47b727ec731") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b51602ee-cb2d-4706-ad41-d49e3ae680f7") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "dd7d0bec-43ea-40d9-9054-922f84b85654") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "5942dcd0-5755-48c6-9dac-f00683cba6db") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 79 "Net-(D58-A)") + (pinfunction "A") + (pintype "passive") + (uuid "a173c16a-3c8f-44c7-9f08-240f937c8b48") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "6fb6bf71-168c-46e2-a4f0-6ab2c6799761") + (at 128.195 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D20" + (at 0.2544 0.085 90) + (layer "F.SilkS") + (uuid "c3b1545e-a130-408e-9d39-f2fd0a600d79") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0656 -0.125 90) + (layer "F.SilkS") + (hide yes) + (uuid "ea15b557-7684-4ca7-9e40-2942dc093a38") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "dd0cfb8b-5c7b-4eef-866d-37ac3bf317c7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "4e60f8ce-f7f6-4b04-b874-5f8f6293bcb2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/77820fff-4086-4b1b-a884-b7719eab8b23") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d8608ba-5d4d-4514-90d7-7d1b8cb8de5e") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3c3fcf01-d2c7-4f51-81a3-bec35c84283a") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "14e1d166-0010-4983-bc27-8c304fb9dbf9") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "47bcf03e-fd03-4210-80d5-9dffea4b5838") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e3a089ea-7211-4a0f-b5ae-656a98d16667") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "499749e5-b13c-4afb-9393-f34b4f123df0") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "83fac55e-5de4-4557-8039-adb12533d3b6") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4fb257fc-eeab-42a3-a9e7-29132026e5bd") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5142778e-b3f2-411b-a57e-c9142bcd8562") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9348f0c6-13b3-4a48-9ceb-5369fe9b9069") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ff097025-5028-4801-b7da-812d851b9342") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "8f4d88ac-262c-4606-b44e-a4e5c8db3537") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "53fa9d7f-8f59-41be-a425-a84ff20c8612") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 21 "Net-(D20-A)") + (pinfunction "A") + (pintype "passive") + (uuid "18864be3-ec25-47da-8b89-2998c126a1d6") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "74485c87-0d5b-434c-88bd-e900196eedee") + (at 294.8825 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D15" + (at 0.1844 0.0775 90) + (layer "F.SilkS") + (uuid "05febed3-3136-4e9e-94ac-addeccd55040") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1656 -0.0525 90) + (layer "F.SilkS") + (hide yes) + (uuid "836c9112-9c9d-46d2-9ebb-c2df508bf254") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7cddcd15-084f-447c-8587-09598486271b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7fb9d52a-9f87-48fe-b3d0-7b323b94e34d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d15f2131-9165-4f99-ba76-068283f3f1d7") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f66905b4-a5c2-4645-bdb2-c8d6ad9ee4b9") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e672d984-5a7c-4095-8689-ad80186c918f") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "36250312-56b8-41dd-877b-cfb9de5684a5") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "86551b00-5fb8-47ea-bca0-f00d57bc307a") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a545557f-7d39-4c4a-aca8-dc877c4151db") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "719177c0-f71b-4b3e-a8a1-3c32a3f8b92a") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c878be95-2047-41a7-ae56-fc0f97fa08c6") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c6e75559-6b69-4def-8b45-88b3803d56da") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c1e6e7f2-75ec-4f67-9803-f4f42e4e66c2") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "dc1d2ef3-555b-4b06-b05a-6154e446b4b5") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "707dea7d-f48c-4f34-ade5-885d687125b8") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "eed66e3b-7acb-4956-ba56-b226972b5dca") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "436891a4-4199-4958-84da-336a0564b17f") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 16 "Net-(D15-A)") + (pinfunction "A") + (pintype "passive") + (uuid "616bccb5-c6f5-4c73-b6a3-ecbe6decb654") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Diode_SMD_AKL:D_SOD-323" + (layer "F.Cu") + (uuid "74f34839-2bbd-4fdb-ae41-92b2f1d35c2b") + (at 55.6513 61.925 90) + (descr "SOD-323, Alternate KiCad Library") + (tags "SOD-323") + (property "Reference" "D2" + (at 2.55 -0.05005 180) + (layer "F.SilkS") + (uuid "7a87facf-7e93-480e-a34e-53ed10fbc041") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "BAT60JFILM" + (at 0.1 1.9 90) + (layer "F.Fab") + (hide yes) + (uuid "619edc69-2ae5-4a1f-9b80-a59ed9f39326") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "d1affd33-2f0e-4250-ad23-94eb5369a5a9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Diode" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ba25ed68-caa9-4a68-a578-a51ac03c3561") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *SingleDiode *_Diode_* *SingleDiode* D_*") + (path "/3e4adb9d-795b-4ed4-9421-13dd684d8460") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4c8f45fb-d840-4a14-abae-e1e758b47192") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a8b242f5-93d3-468c-ae9d-a4a678aaa364") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3486ee41-e25b-42f3-b1c8-c304c8b27eb1") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e9bd6152-2e96-4735-bced-26683af5550f") + ) + (fp_poly + (pts + (xy -0.2 -1) (xy -0.8985 -1) (xy -0.8985 -1.3) (xy -0.2 -1.3) + ) + (stroke + (width 0.1) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "493b74e8-9e8b-47c3-ae92-80742892a155") + ) + (fp_poly + (pts + (xy -0.2015 1.3) (xy -0.9 1.3) (xy -0.9 1) (xy -0.2015 1) + ) + (stroke + (width 0.1) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "68e1324f-ead2-4758-92ee-082dd3b512e8") + ) + (fp_line + (start 1.6 -0.95) + (end 1.6 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "cfe2c70e-f743-4f40-8a30-b45671fdba49") + ) + (fp_line + (start -1.6 -0.95) + (end 1.6 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "bc4248c6-4c66-44c4-b2f4-44565cd2e945") + ) + (fp_line + (start -1.6 -0.95) + (end -1.6 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1f82828c-98c3-4225-ac6f-208a4b7811a4") + ) + (fp_line + (start -1.6 0.95) + (end 1.6 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d3cc213a-5b07-4a2e-bfbe-134093c2c6eb") + ) + (fp_line + (start 0.9 -0.7) + (end 0.9 0.7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9a9b15ab-3878-413f-81b1-ad888704bfff") + ) + (fp_line + (start -0.9 -0.7) + (end 0.9 -0.7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5d4bef05-5c4d-46e9-84ad-bb2dc35efa1e") + ) + (fp_line + (start 1.25 -0.15) + (end 0.9 -0.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ce0c016f-1108-42ed-9f8e-2f582ebeac6d") + ) + (fp_line + (start -1.25 -0.15) + (end -0.9 -0.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "052c6098-8479-4d2f-974f-227ccaffe1ec") + ) + (fp_line + (start -1.25 -0.15) + (end -1.25 0.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "846abe6d-17eb-4250-8877-47bb9e7b7341") + ) + (fp_line + (start 1.25 0.15) + (end 1.25 -0.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d952e587-a7dc-4183-9548-be14cb3aa9d1") + ) + (fp_line + (start 1.25 0.15) + (end 0.9 0.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9c015222-4d09-44fd-b44e-c0f0f01b262f") + ) + (fp_line + (start -1.25 0.15) + (end -0.9 0.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ef6d85fe-e89e-413b-8678-cf8be70df9e3") + ) + (fp_line + (start 0.9 0.7) + (end -0.9 0.7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f9c312ab-d09e-46e0-9211-49a0fedd2286") + ) + (fp_line + (start -0.9 0.7) + (end -0.9 -0.7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c6dda79b-bf27-42f9-a7ad-4d6756568a30") + ) + (fp_rect + (start -0.65 -0.7) + (end -0.4 0.7) + (stroke + (width 0.1) + (type solid) + ) + (fill yes) + (layer "F.Fab") + (uuid "7098b3f7-5fb3-4019-8814-b4bf8de3faed") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "84d2bf74-9d91-48bc-b3af-cd4f68033470") + (effects + (font + (size 0.3 0.3) + (thickness 0.04) + ) + ) + ) + (pad "1" smd roundrect + (at -1.05 0 90) + (size 0.6 0.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 3 "+5V") + (pinfunction "K") + (pintype "passive") + (uuid "5fb898a2-153a-450c-bd66-dc6d1c2eea20") + ) + (pad "2" smd roundrect + (at 1.05 0 90) + (size 0.6 0.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 117 "Net-(D2-A)") + (pinfunction "A") + (pintype "passive") + (uuid "df906ee8-9d77-4095-9fca-661778ea714e") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Diode_SMD.3dshapes/D_SOD-323.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "782f52c5-2bb1-41b3-9bf1-df981e944b4c") + (at 174.62 67.86 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D52" + (at 0.24 0.02 90) + (layer "F.SilkS") + (uuid "18a3a4df-fc10-49c6-8fc4-8615a5d4f60a") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.06 0.04 90) + (layer "F.SilkS") + (hide yes) + (uuid "b9a564eb-afb4-4db7-99d6-374f749bd857") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "29c77d81-28a2-4ce9-9a9f-755e788b1d2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f8f1b743-5b7b-4ff4-9a26-6a5c5b1abf30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/180d7e52-c39f-40dc-88b7-b6c21a74c0ee") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8db580e4-584b-447c-a81f-1dc34aa39670") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "84301c95-675b-458c-8974-48e788612ab0") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "aa014329-4fef-4444-aebd-9bfccdabbf2c") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7c6bf217-c47f-4b26-80d4-e8152e034402") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7b25e5ef-c02e-4e01-947a-f2755abecd6c") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f3f500a4-f27b-4d1c-9263-5c1e2b3760c7") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "694ab638-9187-4293-bcc4-a520c561e85a") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e06c926e-545d-4bce-a477-af44122d4d8a") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9f2a123d-232f-4bf0-9948-6b9a3229f699") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e15a280d-4260-4cde-a51d-d8f511465d25") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1151b080-7eda-404f-abc2-d09227963df8") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "d3b8892f-dc63-4a4a-ad3e-20be8425ab2b") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "fb4c708b-260a-4188-84db-1283e9b56705") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 73 "Net-(D52-A)") + (pinfunction "A") + (pintype "passive") + (uuid "ad6bcc43-a5a8-4d11-9fa3-59117e0a6e57") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" + (layer "F.Cu") + (uuid "834c1dd2-efdb-4b79-8f45-a2157810891a") + (at 87.7138 173.8312) + (descr "Kailh keyswitch Hotswap Socket plated holes Keycap 1.25u") + (tags "Kailh Keyboard Keyswitch Switch Hotswap Socket Plated Relief Cutout Keycap 1.25u") + (property "Reference" "KEY_WIN1" + (at 4.52 -8 0) + (layer "F.SilkS") + (uuid "3c8c6e9a-4402-43ec-94ab-9c56a8de9ea0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 8 0) + (layer "F.Fab") + (uuid "369f5140-8d20-4697-ae5c-efe4654a2b59") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b210bcd-17a6-4f4f-9456-dd4eb95736e5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5110b4bf-e349-4269-9fcb-21b59fae7c7b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/845bb780-6e16-47cd-a15e-538adef12cb0") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start -7.1 -7.1) + (end -7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "11a1cd92-f72d-413b-ad60-1226e10a9042") + ) + (fp_line + (start -7.1 7.1) + (end 7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f7e39ecd-576b-4755-a532-2a57be2c0253") + ) + (fp_line + (start 7.1 -7.1) + (end -7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "32d42370-ec88-4da4-ac36-394d76afc3dd") + ) + (fp_line + (start 7.1 7.1) + (end 7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "adae2cb5-5886-4a26-bd78-c5c44b78b68e") + ) + (fp_line + (start -4.1 -6.9) + (end 1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "61c60564-958f-4fcd-9fe6-10fa99dff7bb") + ) + (fp_line + (start -0.2 -2.7) + (end 4.9 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "62fb720f-13ef-4479-b83b-3742da06de04") + ) + (fp_arc + (start -6.1 -4.9) + (mid -5.514214 -6.314214) + (end -4.1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "4d011a5e-e090-4649-a13c-69bf4e1e93ef") + ) + (fp_arc + (start -2.2 -0.7) + (mid -1.614214 -2.114214) + (end -0.2 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "9a31add8-5bc6-42e5-9501-ffcfc739b122") + ) + (fp_line + (start -11.90625 -9.525) + (end -11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "93a9b1d4-357d-48d6-b4a2-55fd3d082b7f") + ) + (fp_line + (start -11.90625 9.525) + (end 11.90625 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "aba8cc05-d194-4bbc-9e67-8c76416e95b4") + ) + (fp_line + (start 11.90625 -9.525) + (end -11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7a908334-053a-48fd-9e3e-c01a7b82fa2f") + ) + (fp_line + (start 11.90625 9.525) + (end 11.90625 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1edf636c-1575-45a5-b295-b6b5c080ecfd") + ) + (fp_line + (start -7.8 -6) + (end -7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "322bad52-1c23-4749-9b87-a170b37b1927") + ) + (fp_line + (start -7.8 -2.9) + (end -7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "318eef00-0947-4339-be75-648756f79222") + ) + (fp_line + (start -7.8 2.9) + (end -7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "97e30e21-acc2-4965-bf34-2af76aa1572b") + ) + (fp_line + (start -7.8 6) + (end -7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "c1e1abfc-8f69-41d2-a813-9aa6fa854f29") + ) + (fp_line + (start -7 -7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "b8a1a843-e66c-4c86-8e0f-f62f79d3c952") + ) + (fp_line + (start -7 -6) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "f859b2c3-731a-46e7-b4a0-80deb87ad4bd") + ) + (fp_line + (start -7 -2.9) + (end -7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "be03666b-ef5e-4edf-8447-8e75e550dab8") + ) + (fp_line + (start -7 2.9) + (end -7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "d834b88c-dcfb-4ec3-8427-f7fe41340d0d") + ) + (fp_line + (start -7 6) + (end -7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "a927db78-78cb-474a-b1f3-892bc79c4b67") + ) + (fp_line + (start -7 7) + (end -7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "4591ce4e-6847-4298-b23e-87ed6d793416") + ) + (fp_line + (start 7 -7) + (end 7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "fed83ec2-2636-4b7b-bb8c-da0c6e78d764") + ) + (fp_line + (start 7 -6) + (end 7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "6a8ee8b4-e182-4627-8b72-25ca856254b4") + ) + (fp_line + (start 7 -2.9) + (end 7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "b6c256eb-7671-4515-84d5-98aebdd50fd1") + ) + (fp_line + (start 7 2.9) + (end 7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "79651d80-431f-460e-b2d8-8ac5628ec517") + ) + (fp_line + (start 7 6) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "590b91ad-ef48-466e-955f-06d780b665dd") + ) + (fp_line + (start 7 7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "b2d930e6-778d-4e33-ba1a-2878b6df66c6") + ) + (fp_line + (start 7.8 -6) + (end 7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "7e8872c9-98bb-4335-a03e-60df21b7e8e5") + ) + (fp_line + (start 7.8 -2.9) + (end 7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "84e32881-6288-4ae4-9b31-78e11d4a4fea") + ) + (fp_line + (start 7.8 2.9) + (end 7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "949669e4-2f9c-4b23-b3f7-12725938eb16") + ) + (fp_line + (start 7.8 6) + (end 7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "c8c78d3a-10c7-41dd-89d9-faa0234d84a5") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4f822d7f-73b8-42fb-8d9d-385e07d99729") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e993e8a0-691b-41ca-851b-1092002616ed") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7504ec03-f33e-47c2-9ab8-b140b27540bc") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2b6051a8-4426-4599-b519-ed41de0d915d") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dc495776-9770-4357-b4f8-0835164b456d") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "32179396-4ab9-44f8-b429-3417306e5078") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b3de0bcc-4cd3-42b9-8892-6fd89bc4d7b1") + ) + (fp_line + (start -7.25 -7.25) + (end -7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2620a94c-0764-4d05-9163-11fb47c0c74b") + ) + (fp_line + (start -7.25 7.25) + (end 7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "cb239025-cd9a-445e-abe6-dc7ca7e7538d") + ) + (fp_line + (start 7.25 -7.25) + (end -7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d1e3baba-4ab4-4b0d-851b-ba06e87c108d") + ) + (fp_line + (start 7.25 7.25) + (end 7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "27d71674-e258-4bdb-9711-27d069afc7fc") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "72ad77b6-64d0-47eb-a988-4768cf601a22") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a8e0a382-f1ac-4d89-be26-ce8113cc3cb2") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3ca17fb0-97b4-4b95-8211-d477247b8ba2") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "353b0603-9a65-476b-ba6e-98c264a3f84d") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ad1dbdb7-5ead-4b46-b0d8-ac8b3cb4ae1d") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "132f23ea-293d-4656-becd-bc554aa85c61") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c10bf260-6019-4fdf-b7dd-697c5d3f3319") + ) + (fp_line + (start -7 -7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f16f9406-c799-455e-8c3d-2dc2d7e12d1a") + ) + (fp_line + (start -7 7) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3335f41f-af85-46a2-90d6-0c895d0a3133") + ) + (fp_line + (start 7 -7) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f3e90e44-1a06-4fa5-aefb-d61c6a326fc9") + ) + (fp_line + (start 7 7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b1597956-af58-4147-90e3-65b6596f6b2b") + ) + (fp_text user "${REFERENCE}" + (at 4.52 0 0) + (layer "F.Fab") + (uuid "56c9e8e1-badd-4c85-9e8b-44ffe48b583a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" smd roundrect + (at -7.085 -2.54) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "74c0abdd-1381-40ab-8038-2c578abbd719") + ) + (pad "" np_thru_hole circle + (at -5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "060820a2-6e86-4c32-9e71-e4db84e7dbed") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 4 4) + (drill 4) + (layers "*.Cu" "*.Mask") + (uuid "22080345-1eac-45ed-b051-617a8fed4238") + ) + (pad "" np_thru_hole circle + (at 5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "7767bd51-e699-4980-b57e-9697bb8d518d") + ) + (pad "" smd roundrect + (at 5.842 -5.08) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "bbcbff41-cc1e-4262-9195-6b6342d39a4a") + ) + (pad "1" smd roundrect + (at -6.585 -2.54) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "f2774b30-e2ca-4f81-ade8-475d481d9a48") + ) + (pad "1" thru_hole circle + (at -3.81 -2.54) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "22d79a10-ed86-4c78-9bec-d8deb53af05a") + ) + (pad "2" thru_hole circle + (at 2.54 -5.08) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 107 "Net-(D64-A)") + (pinfunction "2") + (pintype "passive") + (uuid "3d6fa1e2-1b4e-4869-ba5a-d57500c15ae2") + ) + (pad "2" smd roundrect + (at 5.32 -5.08) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 107 "Net-(D64-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2e00c007-28c1-4350-b381-1e7fb45d4d07") + ) + (embedded_fonts no) + (model "${KICAD6_3RD_PARTY}/3dmodels/com_github_perigoso_keyswitch-kicad-library/3d-library.3dshapes/SW_Hotswap_Kailh_MX.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "837b93c0-7506-46cc-a660-cee58e65085b") + (at 187.7263 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D53" + (at 0.1844 0.0137 90) + (layer "F.SilkS") + (uuid "88fab8f1-43be-4853-93df-0421ba3d4ccd") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2156 -0.0863 90) + (layer "F.SilkS") + (hide yes) + (uuid "45c86a7e-6d10-465d-a812-801c7e7744ee") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "fa9d050a-bd3b-4183-b9e1-d644909612ec") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ce18717d-e497-457e-ad3c-0d53fe850d6a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/e2b5fd88-d6c7-4601-9391-95417031429d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f519b0bd-f724-463b-946b-bdfc5538d347") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1ca0ed8c-a8a8-485c-9bc4-89511f94b18b") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1aa54bbe-b3ab-45d9-bf50-f9656770a486") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "afb461c5-41f2-494d-a4ef-52410fe1bf5f") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ebde519e-28bd-4580-b740-b08dcc194667") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d3965ecc-4be3-4297-916b-2e928f8fd3e0") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1fd27deb-4c8b-403e-8e6f-4a8e1b247596") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8e913386-4eaa-4c83-8240-d6a548269638") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8311f4a7-394a-4cc8-a592-9a86a25faf09") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "04def42a-2813-4a42-a9be-391e7334395a") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "34587145-7295-478a-b32c-188f7f65aa40") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "48c56559-eeab-4149-b9b6-b9afe47a20f0") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "db89c5c7-254c-45ca-9069-8af4f49e72ec") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 74 "Net-(D53-A)") + (pinfunction "A") + (pintype "passive") + (uuid "2a546169-6151-4a14-8717-1171d778a31b") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "850da7ca-95ec-4ec2-bce3-b3770d4bb14f") + (at 58.3513 61.925 -90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R2" + (at -2.55 0 180) + (layer "F.SilkS") + (uuid "18f8bd85-a04a-42a4-b309-80bc72493cc3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "5.1k" + (at 0 1.65 90) + (layer "F.Fab") + (hide yes) + (uuid "5544face-a6f5-4558-bd68-3948e8a6a43b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "5c8dd29c-6a04-4c39-87a0-bb4edd2880d1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c0d44ff7-b841-42ad-a63f-da9a21772a54") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/e43ed88a-0b7c-4dfb-9632-55636cb7c7cb") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ea6c448a-5a7f-4229-b72a-d25d1c622ee7") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "11141795-35c5-4d83-88cb-9aaaa879cdda") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "44d9b2bc-e4d2-4484-bbd2-4982ebf9070a") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e84d502a-f486-447c-9dd3-8093aa68a8d7") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4e534c96-f550-4a0c-9ecd-3cf460f0bfb6") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8bb66a7f-4633-46c8-8044-7f807cee3aef") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "11203867-90ca-464f-9b82-faf05674d755") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fa550b7d-49d3-4e50-8a40-23f8714b85e0") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ff19fd63-70af-48cd-bcfa-af8ae624de73") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "7c9fcef8-126f-49aa-8f65-aa7490267d26") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "10147f23-2a39-4584-b4e9-b3058fd04892") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "35b737f1-f6b1-4cc9-a79b-bf6d7f6c1831") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "2a3b0dbc-43fb-464b-b0e7-67c309daccf3") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 270) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 83 "Net-(USB1-CC1)") + (pintype "passive") + (uuid "dc0013f4-63c4-4e3b-acd1-06b187ef5a14") + ) + (pad "2" smd roundrect + (at 0.9125 0 270) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 1 "GND") + (pintype "passive") + (uuid "31b0e512-e3c4-42f8-9368-b0713ad4b380") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "88e263d9-7421-40ab-b305-21527e34222f") + (at 86.8013 57.65 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C10" + (at -2.675 0 180) + (layer "F.SilkS") + (uuid "85dbbb54-67a2-4c7c-ac13-82914e84b2f7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "1uF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "0d58326c-cfcd-4211-8411-6cb1e8018f36") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "21bede73-3274-4dd2-a108-ba909a331bd5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e4afa81e-8585-4b10-8a25-13ead534f63a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/94a0fdd0-56a6-4942-8589-01a86c805627") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "aa5787d4-84f6-4bfd-90b4-f5238446ad3b") + ) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ded2d7d1-6966-489a-b668-2250ddb91f86") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ca009d18-cb83-4d33-88a2-7ad9380b943e") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d6b23d8b-a74f-41e8-b248-27453db020b3") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8cdd6207-4387-44c4-a128-0dacb9116bd2") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2fb77bfe-a829-4069-8eb6-ac05c8033c14") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "97caa698-67ab-4ebc-9d62-ccd80633c09d") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "29663ea0-55cf-4c10-8287-c17fe5ad8a2c") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e492114b-a42c-40fa-981f-ad957a72e4f9") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2ca51125-0941-4fe7-b79b-aec2c8ee25a4") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9d672bae-25bf-49bf-b581-c8f300455639") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3953addf-7b0b-4600-b96e-f13524bc683b") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "89de5b79-18ec-4545-821c-a41bc622454d") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 2 "+3.3V") + (pintype "passive") + (uuid "529a6612-c190-40ba-aed4-ced258842e26") + ) + (pad "2" smd roundrect + (at 0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "65bd65a5-4db8-40e0-bbd4-f90bef7de686") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "8f8c7755-6b61-41dc-88c2-1ac1a08f9e81") + (at 307.9794 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D16" + (at 0.1944 0.0506 90) + (layer "F.SilkS") + (uuid "836e1934-9074-4285-9a08-d8a52c640a0a") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1856 -0.0294 90) + (layer "F.SilkS") + (hide yes) + (uuid "e6c6c48d-4e8b-4f8c-89d0-85ae744bf97c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "b087db76-bc31-4874-81d5-7c7e5ac1aaf0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "b118eecc-4e02-4163-980b-4927fa8ca998") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8852f500-0eda-428e-83a3-759aec3e9d89") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4bc88034-4ecd-4650-8b24-5d8e386f4105") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "667a07f0-d94a-491d-99a7-d8893c2b4beb") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "99d8ef99-871a-4825-b810-02f89422b170") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "51c33e28-8d44-4621-81ef-92b86f801315") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "894f849b-7d26-4899-a625-0e30ce6a4579") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8431c026-b3aa-46c3-9b0e-4a59a6b57434") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "186dd0df-242f-4faf-9377-61abea26da15") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "42eb85ed-639e-44ef-ba0d-4d36bfcefb18") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fde92bad-e47e-49a6-8589-98ea70c003ed") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0dae2c58-76e6-48aa-84f5-e405b99de095") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "16f92dec-340c-4056-a552-5d0e201d12e5") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "9dc0bd1e-adf1-45b2-b302-7fc4bc614433") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "4fb38c7f-0c26-44ee-b30e-1bf193116eea") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 17 "Net-(D16-A)") + (pinfunction "A") + (pintype "passive") + (uuid "e7b7476a-2e55-4783-8e10-0cd50b1ddbd9") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "91619cc6-eeb1-42ba-a882-5332c0cfc1df") + (at 114.4763 68.125 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C11" + (at 0 2.77495 180) + (layer "F.SilkS") + (uuid "99b7d9be-4e17-4d7c-8803-78ea7a42dc59") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "0.1uF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "51da87f2-070f-4c92-9898-9f729dc7d5af") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "d6f006b0-5f93-4171-9f98-ccab9cd76b20") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "84950c98-38fa-4e11-bc2f-8d1fd19923aa") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/f4ed843a-a837-4644-ab1e-a88bfeb2df84") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1cc608cb-b94a-463d-8a9e-4f7c4623e900") + ) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d250b09e-ad8e-4a9c-bc59-e7cf080be65b") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dd34daed-705a-4107-b5b2-fbb5d5fc269e") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d0c57165-22ad-4ab1-91f6-4b5d50942ac8") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "78c4db25-f3cd-4c9d-935f-7e92b1b3c098") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d481b1f7-1ed8-4a78-aa60-973dd6e23279") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "920b830c-2b69-4256-b8ba-a1ea2e2c3eb7") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4a398a8c-dcec-4751-bb1a-39118c36d61a") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "890bc2ab-45c5-4a30-9d9d-73981fe1e39b") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f638e6b6-d5c9-40d9-9bf4-2c0b9887be7c") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8d1f22b3-e0b8-4106-8f79-01fca690e648") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1658f097-df98-442a-b38f-5e66aff3e2ec") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "c10a3c14-5e53-4326-8b84-7508845ff5bb") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "2943ea56-e0b8-4c0d-b30b-957f6843729a") + ) + (pad "2" smd roundrect + (at 0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 46 "/NRST") + (pintype "passive") + (uuid "06fbef21-af56-4170-9d02-9682af126159") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "9323a22c-8d86-40d4-937b-0a8f8414339c") + (at 268.6888 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D45" + (at 0.1444 0.0431 90) + (layer "F.SilkS") + (uuid "8dad41d0-7a87-4f08-a808-d3c9f1415688") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2156 0.0431 90) + (layer "F.SilkS") + (hide yes) + (uuid "715665f4-ded7-4b27-b43a-3e99591ad0e1") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "8ca2ec4f-d5e0-49de-ae20-8beb10f08e96") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "28f66e5d-c14a-4a73-912c-77dfd9ab4dc7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/9b4b8da2-8be9-424c-9089-3ef14a7affd4") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "975373e7-8287-4981-9b22-c5647844774e") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e74f0951-a994-42fd-9c4b-106a11fdd8e5") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a4762faf-572c-4fbd-ab6c-ca12e456edc7") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fe017284-c726-4364-ac76-9c836c3bc6d0") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cf2bc159-8c51-43e0-96f2-d0648f5869d4") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7802fa39-39e5-498a-ae69-8f313022bf3c") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "660c8775-92d0-4b9c-94e7-4bf97ad3f8f5") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "72e6457c-deb8-4bce-8692-a4eab236afaa") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9d72c9b8-83fb-4e22-9359-0dc96d32dc71") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ffce1d2e-5064-4f9f-bbab-b7c22553523b") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "09a1e01a-bad9-4448-b50c-ef2f41dfc2d3") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "4984a226-f745-4f9e-9e7f-ee1ff4aa9c72") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "ac012a30-dd3b-4ce5-884d-1a1a1917f235") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 67 "Net-(D45-A)") + (pinfunction "A") + (pintype "passive") + (uuid "2504cb49-195c-4c07-8803-1c67281e4ef2") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "94226e26-892b-4b08-a3f8-60891c37aa65") + (at 159.1513 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D51" + (at 0.2244 0.0187 90) + (layer "F.SilkS") + (uuid "e67add3b-2296-4e6a-bdb9-c0171f7b19c4") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0356 0.0187 90) + (layer "F.SilkS") + (hide yes) + (uuid "58789e24-ee30-49b0-8e58-4c503db38ff4") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "56dd2d3b-fc95-47be-8222-0a17109a4e12") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "19a99849-d2b5-4bb8-aabd-64b01f661570") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/84c5f039-5f78-4b24-affa-912977ae302e") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b9683af0-5ecd-44a3-81fe-5f29b7dbdceb") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "63204ba2-e19c-45fa-bb77-d77059795f73") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7efe1ae9-692b-4e2a-abcb-342864a8dd43") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3cba8b53-872b-4838-a740-8f755453ef22") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "26f184fb-8564-40e3-b4fa-93e9860c4865") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "11d66d27-1c3d-46a4-88d9-a670cc08bb77") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "86b8c9a5-943d-408a-99b6-8b85391bb19a") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "435db4c7-582f-494a-ae6e-a1ed0eed5f45") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e970e6fa-0da9-46da-bba0-086e5edc51f2") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5a9dfaaf-195c-4446-ab48-dd979d9d4cf5") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b2bb90aa-bb98-42ee-bd0f-52b74fa1be52") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "be32214d-9778-46f4-b52f-88caf78efd82") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "0f718b2b-7a10-4ed0-99cc-500356f0acac") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 72 "Net-(D51-A)") + (pinfunction "A") + (pintype "passive") + (uuid "aae8dca2-7900-4f9b-9aa7-7b6fa49e706b") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "94a2ec3d-1491-4886-afd0-c9125e982349") + (at 169.8669 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D24" + (at 0.2344 -0.0169 90) + (layer "F.SilkS") + (uuid "498388db-b625-4c46-97fd-7a94ada4475c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0856 0.0731 90) + (layer "F.SilkS") + (hide yes) + (uuid "72f09c65-347c-495b-a406-7a7f4c2679af") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "709b3dd1-6c3c-44c2-a498-a488d94590ae") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3fff65bb-2de4-4814-a78f-34572ce11141") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b14317ec-8178-4ec7-8efe-b44e3c9b5d08") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cba03ca4-8b20-4b96-880d-201c67735b6d") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "837f727f-d679-4d1a-8803-2ba9176b15d0") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "309de242-2c08-465c-b47c-81f0ca2599f2") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "996b2f18-2c68-435f-bba0-da54959e6a18") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6808257b-c5d6-4ab9-aee4-ac2f018ed355") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "90bdfe05-14de-41e5-8fc6-c6a3cfdd73dd") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3c39ae40-58b5-4841-812c-ba49f0d701e9") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "beb2c55c-cd16-4a0b-93e4-d2556cba885c") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ece79785-d23c-4cf8-88ae-31cc9b68b987") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f28573cd-0896-41ca-8d20-a4d8c7bb43bf") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fb043af4-116d-4ffc-820e-e4d01217e401") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "beb06a2c-de41-4465-815e-31bee22a54c0") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "d45478cc-3186-4954-8e97-255ac6a457f0") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 30 "Net-(D24-A)") + (pinfunction "A") + (pintype "passive") + (uuid "0bce0fa2-dc97-470c-9491-96e8a61d64c9") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "9866fcce-a5c2-4745-8420-1e0dc2c3f326") + (at 146.0544 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D64" + (at 0.2344 0.0256 90) + (layer "F.SilkS") + (uuid "324845a4-208f-4e43-a5b5-112118ebaa7d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -7.9756 0.0256 90) + (layer "F.SilkS") + (hide yes) + (uuid "c8451554-2784-451d-9a38-4a1378588cf7") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7107499c-90d4-4147-a4df-cca78b59712f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3df3859d-9ceb-4dca-9c85-eda75c53f008") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8dd52d64-57c0-4a4a-8b34-1f152207bb6d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cdb4fc74-1d59-483e-a2bb-48acf8800f9f") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "64259bb8-4dcc-4384-8f90-199f4e472f05") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "319e532c-e69f-4574-ac46-1554d496918e") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2626129e-c03c-4cae-ac4e-63286c16f664") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "157d845f-64d0-4c97-a4d7-7e643f7f4b11") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2de104f7-8716-4e34-bb5f-971031eec8b6") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "88518d4d-d242-4f70-8311-1325e9719ad9") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "23cb1146-7ac2-4c8e-a3a8-656360654793") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9ece7675-b563-4b61-ab6d-cdc738518904") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9b238d95-9842-4798-a595-edeb2453c4fe") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ba2781dd-561e-4d33-bda6-947c7f4f6624") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "e6a016cc-0172-4a57-90d2-34db61825ea8") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "bc496a00-f602-473c-bf34-9e1770053abf") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 107 "Net-(D64-A)") + (pinfunction "A") + (pintype "passive") + (uuid "75318e0b-f898-4472-8877-8d9122359063") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "986d27e7-3977-405d-b1e7-f5e72a54b0d3") + (at 143.6731 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D50" + (at 0.2144 0.0369 90) + (layer "F.SilkS") + (uuid "4a6ab3b6-58fd-4f8e-bd0a-86e52cbcb9e3") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0556 0.0569 90) + (layer "F.SilkS") + (hide yes) + (uuid "7f4f5294-74fe-4d9c-b0e3-d3dffc72c6b7") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3d430529-0fec-4c41-bfd5-8b106d31e003") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ab6a3fc3-783b-4e99-a43b-9d89c21cece0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/deefeed7-90b5-4d76-aa46-f3755b429d18") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3963a447-65cd-4e4c-b9a2-c5feb8677ce4") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6ee4be33-1200-4a85-a4d6-8d8f9f4f9e92") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c5d5b534-f1e7-4bed-9be9-cfb7d31dfc88") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f4ce8fb2-69ef-4307-874b-b82d0f91bc9e") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a8e6b7bb-d10d-4d4a-81e1-35bb0d5e1c8c") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "41eca1f5-649c-4113-b1c3-d0f5eccdc583") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8808d0ec-ac80-4e27-ad17-cec3877fb041") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c4055b54-ee2f-4319-8465-048ca6980a56") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "142a1773-f235-4b7a-bb01-08df7e5ac798") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "42f44803-e7af-4244-8c6b-0de1c7298b3f") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "bad64e83-3231-40f2-b570-5704fcec37e9") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "050f279d-6cf4-4c56-a366-534a4eb93e1b") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "03c79c41-5643-49fe-b243-95d067ed97a6") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 71 "Net-(D50-A)") + (pinfunction "A") + (pintype "passive") + (uuid "9ad9daac-8bd2-410b-9895-349ee843c60a") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "99d4d3ed-d081-4425-aa84-18455422f1c8") + (at 90.1083 77.925 90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R9" + (at -5.41878 0 90) + (layer "F.SilkS") + (uuid "f151af07-2bea-47a2-ab58-474118ce7782") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "22" + (at 0 1.65 90) + (layer "F.Fab") + (hide yes) + (uuid "63a8262e-856d-460f-b69f-279f7ebfe289") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a9ff085e-8ebe-49c3-932b-6210ea1731b2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7ce1b019-180a-40d4-b8ad-046519d4a522") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/9c5f0493-d680-4847-8e64-3696158e4f7e") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "383112aa-c9a8-4a67-8ca6-05097dc7be9c") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "427436ea-8688-45f1-a02b-e29fa9726d7b") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "baa9db15-199d-4a9a-93ba-4b97968f0fb7") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ba9145e5-c908-41a3-a446-748fbe416ce3") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "83fe5ca0-1d30-4069-b14c-7e34025a47d9") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0863ba76-43e0-4a3b-9986-74b93b349f32") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e2753fa0-1e16-4fb8-b4c4-b8de59a4f47b") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "59610250-825b-4e28-84f7-e228a838d293") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e40ff6f9-ad88-41c1-83eb-5b2e5fee082a") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b0a282b2-4fa6-4b43-a734-da205cab8190") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ac71058f-ba72-4e62-b937-3cf3aaa41975") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "361d4a2a-0b4c-4210-addb-24cc7cfff753") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "6e93f0a9-7cf1-461c-97d9-4a5cb4a99c38") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 92 "Net-(J1-Pin_6)") + (pintype "passive") + (uuid "50143159-814d-4f2b-9100-c11b34f5d621") + ) + (pad "2" smd roundrect + (at 0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 93 "/SWO") + (pintype "passive") + (uuid "eaa5fb5b-ebf3-40d2-af90-9895cc5ca298") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "9bf59e70-a011-4a78-be70-fc9cefe3827f") + (at 266.3075 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D31" + (at 0.2944 0.0244 90) + (layer "F.SilkS") + (uuid "4ae1055d-35bb-479f-9589-98142fbf4a88") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1856 -0.0156 90) + (layer "F.SilkS") + (hide yes) + (uuid "b253b659-1a21-4f5a-8833-d9e5733287c9") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "878cda8f-3060-454b-96be-9e0a76211a07") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "b6014296-7fd3-4648-86ef-4c7df7fd6f00") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d55ff88c-b74b-4e0f-accb-e3c99f134ae2") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "eb7dd2f7-c3f7-4cbf-8ac2-3b618d1d415c") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "58a21ccb-b318-4d79-bc19-4e7c5e46ec2e") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fb8ef985-f992-4f0f-866d-8977cec472ce") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e8e3629c-ad99-4b71-8321-8567e93655e2") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a75c928c-2da6-45b6-9fac-8ed69280bb6a") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5e18b481-73cd-4c1b-9b2e-1be2c3dab30a") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1651914a-f22b-486f-a124-e7ff9deb9a23") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "86aee1b5-d9b0-4600-ba66-b56de6fb5070") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fabdeb81-9e58-4539-aab7-dc6f8b00d79f") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3d966f9a-184a-468a-a427-555ade4a572c") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "90176c9d-8ea5-4b9a-9fc4-7272acfa8de0") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "02529ce9-e294-47ea-a633-14d8ec3f17ee") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "78a71ba6-06b4-433a-b445-da2993254c7c") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 27 "Net-(D31-A)") + (pinfunction "A") + (pintype "passive") + (uuid "14722ad4-56c7-4e00-85b9-b8622d3eb446") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Fuse_AKL:Fuse_0805_2012Metric_Pad1.15x1.40mm_BigPads" + (layer "F.Cu") + (uuid "9dc39ee3-982f-4175-b2f8-503bd38612b8") + (at 100.9513 68.125) + (descr "Fuse SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCAD Library") + (tags "fuse big pads") + (property "Reference" "FB1" + (at -2.93705 0 90) + (layer "F.SilkS") + (uuid "ac557cfc-bdb8-454b-874b-3abc95ac74a7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Ferrite_Bead" + (at 0 1.65 0) + (layer "F.Fab") + (hide yes) + (uuid "048ed830-5484-4053-a53c-f3d003921b5d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "04057f36-950d-41d5-b561-831097bb2cc0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Ferrite bead, Alternate KiCAD Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "addd6443-b07b-489c-9c57-bd22e6e922cc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "*Fuse*") + (path "/419d9c4f-4ab7-4264-9f26-8a0424a1c835") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -2 -1.1) + (end -2 1.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9003ea98-b5e6-42bd-bfe2-bd8273fefc06") + ) + (fp_line + (start -2 1.1) + (end 2 1.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "126e7eb9-6481-4bef-90d8-eeda0b903548") + ) + (fp_line + (start 2 -1.1) + (end -2 -1.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8003f843-55f9-400e-9e15-938309e46d04") + ) + (fp_line + (start 2 1.1) + (end 2 -1.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2258821d-3c56-4f9e-95bc-4b6be854b0ee") + ) + (fp_line + (start -1.905 -1.016) + (end 1.905 -1.016) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3b6a8fd2-2065-440b-9cac-364977698107") + ) + (fp_line + (start -1.905 1.016) + (end -1.905 -1.016) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "65deda1b-5090-4688-af37-b66c4d2598c1") + ) + (fp_line + (start 1.905 -1.016) + (end 1.905 1.016) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d2f2c216-3823-4091-a659-2a4f6cf12518") + ) + (fp_line + (start 1.905 1.016) + (end -1.905 1.016) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ab86f1ee-77e3-41b3-aae2-e43217d906fe") + ) + (fp_line + (start -1 -0.6) + (end 1 -0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d7897f3e-5674-4dc4-a07c-71e32c92f89f") + ) + (fp_line + (start -1 0.6) + (end -1 -0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "14b75c3e-e897-4329-a25b-cd386d5e4e90") + ) + (fp_line + (start 1 -0.6) + (end 1 0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c525a9f0-93d3-4651-875a-9fe2ba8901c4") + ) + (fp_line + (start 1 0.6) + (end -1 0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0204646a-6f8e-441b-ab4a-65bd00f8c40d") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "db7ae50d-6b00-42ec-a7af-e0d5b29cf659") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -1.025 0) + (size 1.15 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.217391) + (net 57 "Net-(U1-VDDA)") + (pintype "passive") + (uuid "5e995444-c128-4f43-adc4-b72ab21ee8d1") + ) + (pad "2" smd roundrect + (at 1.025 0) + (size 1.15 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.217391) + (net 2 "+3.3V") + (pintype "passive") + (uuid "1788f989-e3ad-4cbe-bef3-a1f482085f04") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Fuse.3dshapes/Fuse_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "a4948f74-9ae2-44fe-8cb3-3df716ea0841") + (at 182.95 67.86 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D25" + (at 0.19 0.06 90) + (layer "F.SilkS") + (uuid "ecf9193e-3850-4d6e-899f-c6b79c50ce61") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.19 0.07 90) + (layer "F.SilkS") + (hide yes) + (uuid "13126f81-141c-4a27-8dc6-7b46c6649717") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "858687d6-9f1a-45fc-a4b7-3d4bc0402fc0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f9718384-ab04-4964-a39e-4aeed810e697") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/803e7a88-32d5-4661-8d1b-777196178dcb") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cdbe61c8-3159-4234-8f71-b29fd1aede4c") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "afeeeae1-3cb0-4678-a815-1a5ae6ab6c65") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b846efc5-3a39-4e81-b8db-48ab21dcace4") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1ebcadec-399d-4a7b-9406-ef0dbe4c9889") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5d26bbd3-fc07-445c-8b18-e55aaf5d58ca") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cc6acbb4-d537-4b86-a57c-23516aa36db2") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6ad8786a-a8cd-4db9-b04a-bc0c87e31a4e") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6cda3b33-01de-47b2-a8d9-6d3b8af4839b") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "846e69bb-2362-4650-ae1f-42defa12e151") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "351bab77-916a-4abe-b28b-0ad8e90a5394") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "630067f5-0d10-443c-9a14-65c3810d6ecd") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "4474ca21-f20d-47b1-aa18-0af0563ba124") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "26738f86-232a-4d3c-b135-3e3ebf87ae26") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 31 "Net-(D25-A)") + (pinfunction "A") + (pintype "passive") + (uuid "b49241ae-8ee1-4119-af4e-dc35d86df41f") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "a87bfc77-2bbf-4314-90a1-45e22ae3d919") + (at 203.2044 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D68" + (at 0.1444 0.0256 90) + (layer "F.SilkS") + (uuid "1e2f83e4-e7e9-44eb-9e87-a11ca4b9cdc6") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0956 -0.0144 90) + (layer "F.SilkS") + (hide yes) + (uuid "91266e8d-0dc5-457d-8dcb-5de9e1b832c2") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f2e2dd77-9c81-4dd2-a69a-a876aa026179") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "5d48cd14-adad-4ac3-89df-0ad4331ea359") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/0a363a6f-576c-4529-9bac-5bfb55d26551") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5181e3eb-54b5-4b34-9a2a-f9f1468fcffc") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "69819301-a8e9-44be-a1cb-07688d1a6720") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2616ab2a-9442-4e18-b79d-86d85d8e0ca6") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9e84998f-87dd-447e-bb5c-86673f175ba3") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "39bfc80c-92fa-4731-96d4-3b5978eb6e8d") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "94c89bcf-5122-4e42-9f2e-3035ab9cf191") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bd19f482-1be6-49c6-9066-57896b9be324") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2b2a44f3-2911-44d1-8998-0937733a48af") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9d32192d-e027-4155-9d8e-56063e57aa79") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2330fae4-f6ef-4c0a-b6d1-eec3e4e58c71") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b35bad54-be4b-4f89-8e7f-2c30b378b7a0") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "1358dc52-0a13-47b7-b663-106dc2d40d32") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "7ee3b81b-18ad-4539-a4de-dd88a43332ee") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 110 "Net-(D68-A)") + (pinfunction "A") + (pintype "passive") + (uuid "fc439713-3cd2-4161-8ba7-f24b24e4fb52") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "ab052e1f-0711-42ef-8952-7b4024b5e2b3") + (at 299.645 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D47" + (at 0.1844 -0.005 90) + (layer "F.SilkS") + (uuid "6b39973f-e039-46f6-b220-a473ac6234a0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1456 -0.055 90) + (layer "F.SilkS") + (hide yes) + (uuid "1b25d892-8522-434b-a58c-a793ad4b447b") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "fb597fbe-4ea8-4326-ab9e-47f5de9fbe60") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "21dae551-4e00-4861-a02d-35b8a9d5d531") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/a3c03817-1fec-4730-beaa-6044544092df") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d4878e8f-8d3c-4ef6-b0f5-97304087a95a") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "35e4b1ce-3f86-46ad-a857-467eb290353c") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "10aadca3-acff-4dba-bc48-a23ae2be6df3") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fba8ebc1-c7d5-4b1e-bf48-de79070e4d4e") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c901dbc9-9e39-46c2-a971-44b3ed30bdc4") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "45cf18f0-9137-43aa-8711-b49290f9814b") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "704129cc-87f1-4c4c-8475-3f1e76284525") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b42ed1d9-1b31-481b-8d06-bc6532154c8e") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "df0eebae-be48-4b1c-a1d5-24c9f8a50df9") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6db35fa8-f5cd-48fd-8b02-cc0d9ac42de4") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "34163656-e1e6-4c3f-9015-6b092e1044cf") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "2dd56a72-d624-4d1f-98ea-2756a09178df") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "204684c5-f375-47a2-afb6-f67a47c402d3") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 69 "Net-(D47-A)") + (pinfunction "A") + (pintype "passive") + (uuid "b4d7dede-178f-401d-856d-1d74f3600ead") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "afa99148-c8a5-4350-893b-ff1e08f65946") + (at 284.1669 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D46" + (at 0.2944 -0.0188 90) + (layer "F.SilkS") + (uuid "681eb287-41bd-4cd2-a9f7-e8c97fac73aa") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2356 0.0512 90) + (layer "F.SilkS") + (hide yes) + (uuid "44242fe3-797c-4951-a336-c097ea18382b") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a3d4dd74-dbd2-43b7-80e7-7f928e4be659") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f097336c-bbcb-4c53-a8da-48f941259bf5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/69e51b39-5aa8-4d6c-943d-155a3c196fea") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c223a58-0a30-405c-bee8-db52d0740056") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e8808ac6-66cf-4915-a18c-4d8b71922f96") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "30f8569c-5cee-4e42-b59b-aa6285cc3dcc") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c1ca62c6-49ce-43ff-b83c-230c6cc46db8") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "59ac6dcb-672b-4e44-b21b-6c7c3f77608b") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e687bae2-e7e1-4f90-85c1-28795d9c0405") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c174fe8-61b7-4392-9d63-cec24dd543d4") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "bd01a616-e86d-48a5-8b1f-627efdfb4e46") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f64b4dd1-2632-4367-9191-bdb9ca65151f") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "83ce47fb-bf1f-4ff6-a50f-b71f021a07ad") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7851b729-715b-46fd-8508-48885f64aaa4") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "1790f7f7-1623-4f05-a3ec-a92d88f4b405") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "c03098b1-3e38-4724-ae44-d76e22ee8a22") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 68 "Net-(D46-A)") + (pinfunction "A") + (pintype "passive") + (uuid "b8c229d3-77dd-44e7-b0bb-a33b6350ac0b") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Package_TO_SOT_SMD_AKL:SOT-143_Handsoldering" + (layer "F.Cu") + (uuid "b0ecf570-9ad0-4e4e-8286-7ee10f232d9e") + (at 63.4606 61.925) + (descr "SOT-143 Handsoldering, Alternate KiCad Library") + (tags "SOT-143 Handsoldering") + (property "Reference" "D1" + (at -2.15935 2.75 0) + (layer "F.SilkS") + (uuid "00486f31-3190-412c-a05d-243fcd4ad9b4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "PRTR5V0U2X" + (at -0.02 2.48 0) + (layer "F.Fab") + (uuid "939b9279-b409-4e89-9cf0-e008e5477af5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "34b16a45-799f-4e73-ab1a-ad40f7ee14a6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7b85e116-1106-409d-b845-9723d0a0d3a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/c7c4756e-a5bf-4567-914d-57c2ffef1bc4") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -3.4925 -1.27) + (end -3.4925 1.7145) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "50266299-29f7-4f64-9a6b-356fa17d9dd8") + ) + (fp_line + (start -3.4925 1.7145) + (end 3.429 1.7145) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d15fc484-0f74-49cf-b63e-b7efb8e42ddf") + ) + (fp_line + (start 3.429 1.7145) + (end 3.4925 1.7145) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0d90e2dd-7ce9-41fc-94bf-612b65af8dc8") + ) + (fp_line + (start 3.4925 -1.7145) + (end -3.048 -1.7145) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "eb756bf1-5085-45b6-98b4-878128ce7fe4") + ) + (fp_line + (start 3.4925 1.7145) + (end 3.4925 -1.7145) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0a656934-790b-4b35-91b1-93d4d4635a33") + ) + (fp_circle + (center -3.3655 -1.5875) + (end -3.302 -1.5875) + (stroke + (width 0.2) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "b4588414-68fd-4fdc-bb04-890f940a1e75") + ) + (fp_line + (start -3.45 1.75) + (end -3.45 -1.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a2209afc-93f8-4802-a70a-23855b918e10") + ) + (fp_line + (start -3.45 1.75) + (end 3.45 1.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9499f105-77da-483d-a989-088d88633bcb") + ) + (fp_line + (start 3.45 -1.75) + (end -3.45 -1.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "787da8cf-4c66-4925-8bca-6d320955751b") + ) + (fp_line + (start 3.45 -1.75) + (end 3.45 1.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8fa74ea6-4ef5-4ce8-9dab-dad63c058977") + ) + (fp_line + (start -1.2 1.5) + (end -1.2 -1) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "af4f7932-5e5f-4812-8bbf-d9cb0fe6cc42") + ) + (fp_line + (start -0.6 -1.5) + (end -1.2 -1) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d2aada5f-e98a-4b05-9b8b-70d41b442d22") + ) + (fp_line + (start -0.6 -1.5) + (end 1.2 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4806ef56-ce6c-4466-9df3-8e72db6ad716") + ) + (fp_line + (start 1.2 -1.5) + (end 1.2 1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8d8707f0-37c0-452c-a0d6-a265050b7343") + ) + (fp_line + (start 1.2 1.5) + (end -1.2 1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e2f0c1d5-eed5-453a-b48c-bddb69608764") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "b2e7f05d-7268-4e37-adc5-90864896983b") + (effects + (font + (size 0.5 0.5) + (thickness 0.075) + ) + ) + ) + (pad "1" smd rect + (at -1.8 -0.77 270) + (size 1.2 2.8) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 1 "GND") + (pinfunction "VN") + (pintype "passive") + (uuid "e8ad39f6-a413-46a1-be2c-f5f616072435") + ) + (pad "2" smd rect + (at -1.8 0.95 270) + (size 1 2.8) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 48 "/D-") + (pinfunction "L1") + (pintype "passive") + (uuid "ae0b1dd8-bc8a-4d82-ae4e-ba3ac1a2d5ff") + ) + (pad "3" smd rect + (at 1.8 0.95 270) + (size 1 2.8) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 47 "/D+") + (pinfunction "L2") + (pintype "passive") + (uuid "3e2286ca-7ac2-4780-92e2-21525066659d") + ) + (pad "4" smd trapezoid + (at 1.8 -0.95 270) + (size 1 2.8) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 3 "+5V") + (pinfunction "VP") + (pintype "passive") + (uuid "5b76a508-2f3c-47ca-8929-0f6938b7c8cf") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Package_TO_SOT_SMD.3dshapes/SOT-143.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "b0f97626-3fc5-4f8b-a7e1-b5abdf6b67cc") + (at 310.3606 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D34" + (at 0.2144 0.0394 90) + (layer "F.SilkS") + (uuid "11c29662-8d1a-4c63-be60-42046ef64a0f") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1556 0.0594 90) + (layer "F.SilkS") + (hide yes) + (uuid "0f8ff5bf-6f9a-462a-bd13-d15c6901720d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "daabce36-d635-44ed-8d52-726d9bfe04fd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1352796d-292d-4d2b-883a-60f6c7bec3b6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/a384e94d-f214-490d-a267-f230bd022f73") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2122f26f-0b9a-47ca-a72d-fb949be25824") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b243c9b1-cab9-4762-823c-100f852171d0") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2104956a-5dee-4bf7-b12d-cd27591890a2") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8058a78a-579d-4633-a11c-fbe01e5413db") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "28ee0ddc-c10d-47bb-90a3-87d6645c42e4") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c0ad798b-dede-4492-a36c-2e356182ecc6") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "73a7b090-d7ce-4dcf-9a2b-9a651dfa9156") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a2d4b5f0-5d0f-4e9b-afac-805d1689e844") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3ab196cb-b8b2-4c73-9f29-84fd4eda7004") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "461df6e2-0088-4da0-ac71-73c88be2a893") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "53658ad2-985d-4dcf-8532-419e14fbc12c") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "7197e6e4-ead8-40a1-ac89-342eab7e671e") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "54c77b13-4847-4c48-9a9e-058d8903c3aa") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 35 "Net-(D34-A)") + (pinfunction "A") + (pintype "passive") + (uuid "51333f99-28a2-4f2b-b592-8e078d26e551") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (layer "F.Cu") + (uuid "b4f1e43b-b724-4579-bf07-02da4abfe7cd") + (at 204.395 51.1969 -90) + (descr "Through hole straight socket strip, 1x04, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x04 2.54mm single row") + (property "Reference" "East1" + (at 0 -2.77 90) + (layer "F.SilkS") + (uuid "c387b12b-4a1d-467b-a8a6-c5234197da92") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 0 10.39 90) + (layer "F.Fab") + (uuid "a91fb732-8fc3-43bf-85c9-69fd83f51175") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "02357e46-a36c-49fd-9952-9d7baa06f9fb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7d1f418c-4a99-4201-8211-816600d3dbab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 270) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "f8463917-4509-40aa-8cce-ca572f7300f4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "TAD" + (at 0 0 270) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "4dd8b2da-0718-4bd1-a568-1d3ea22b6200") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 0 0 270) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "12d3f6c0-ea9f-44da-b831-cace0db9f8d5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*") + (path "/16dff95b-3e36-4af3-b88b-15fb8adc8e2f") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start -1.33 8.95) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d07ca11c-8b1a-42a2-810a-f5d0f25c23d9") + ) + (fp_line + (start -1.33 1.27) + (end -1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b59be953-7a8c-4903-86a5-1df66d0e9c39") + ) + (fp_line + (start -1.33 1.27) + (end 1.33 1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "12f6a3a6-5d6f-4996-b72f-d2e901b435fd") + ) + (fp_line + (start 1.33 1.27) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "10b6d6f2-c243-49f4-840c-38bd8aca11d0") + ) + (fp_line + (start 0 -1.33) + (end 1.33 -1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5e0823dc-fe8f-44b3-b7d2-2f3fcfc3786f") + ) + (fp_line + (start 1.33 -1.33) + (end 1.33 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2ef09ae8-a395-416c-a551-768c4752346e") + ) + (fp_line + (start -1.8 9.4) + (end -1.8 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ef36302f-cbaf-4a23-baff-2b473fe7d085") + ) + (fp_line + (start 1.75 9.4) + (end -1.8 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9d3298aa-1278-4da3-bba7-a4a17b2f9487") + ) + (fp_line + (start -1.8 -1.8) + (end 1.75 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ea5a6f29-73db-4ef1-9f44-ff4443cc5565") + ) + (fp_line + (start 1.75 -1.8) + (end 1.75 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "66c7685a-ea43-4875-8170-8f0677ac09a1") + ) + (fp_line + (start -1.27 8.89) + (end -1.27 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "32b1eaee-8125-4f71-a44c-c998d3748853") + ) + (fp_line + (start 1.27 8.89) + (end -1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "4ee5b7db-2bd3-47df-8f56-4b3f4bf459fc") + ) + (fp_line + (start 1.27 -0.635) + (end 1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "38d62957-8757-4c10-8fbe-46aa0bd1ac7b") + ) + (fp_line + (start -1.27 -1.27) + (end 0.635 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "dc82b388-f9b4-4215-b073-800cda27d448") + ) + (fp_line + (start 0.635 -1.27) + (end 1.27 -0.635) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c887c5bf-8c6c-44b0-ad7b-f9e6c54811db") + ) + (fp_text user "${REFERENCE}" + (at 0 3.81 0) + (layer "F.Fab") + (uuid "b99c0ccc-8c4a-4383-92ed-6bde58b8997b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at 0 0 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "+5V") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "6b39d100-d38c-4244-8456-cc5c32553f3d") + ) + (pad "2" thru_hole circle + (at 0 2.54 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 56 "/UART_RX_EAST") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "4fbb6a16-7932-4ed7-927e-8691547b1ca6") + ) + (pad "3" thru_hole circle + (at 0 5.08 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 55 "/UART_TX_EAST") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "92aefdbf-4ef7-4d79-a791-37e540aafa76") + ) + (pad "4" thru_hole circle + (at 0 7.62 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "Pin_4") + (pintype "passive") + (uuid "8edcb9be-dc4b-4864-87e0-9fab5a42c07a") + ) + (embedded_fonts no) + (model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x04_P2.54mm_Vertical.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "b774e38e-349b-423d-a34f-0580edda0b0e") + (at 250.8294 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D30" + (at 0.1944 0.0406 90) + (layer "F.SilkS") + (uuid "a0cc4cb4-a808-4949-a507-a927ca34a4e0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1756 -0.0294 90) + (layer "F.SilkS") + (hide yes) + (uuid "7a84c9a8-902e-443c-8ad9-57cd5f7b5b74") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "066027a1-f844-4970-8a4f-7e8947cb2ef0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c505a670-b6cf-4f90-b005-5467ffc9de99") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/e62821ed-ac42-4df6-bca3-0eb0589d969c") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c4793084-aa92-4cfe-8634-bbe1eefe0621") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "77f2fb0b-35b3-49e1-8474-df5c625f3177") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a628d2f0-60ee-4f5c-8f50-f53647f9175a") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a3c03351-926a-43f7-8c1e-063694b49d51") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "25867d0d-4a59-41c7-baca-f13e66dc6759") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ea949935-26ac-4beb-9bdb-6494a9cd4c1c") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9078e032-75f6-4f5b-9451-cb2dae854a4e") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7b8ea79a-7197-4f28-b518-915cc766423a") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1538479f-6ec5-4799-9acd-09ba0a4446d7") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "669c1663-deb5-4472-aef3-1e02f0d5f108") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "bc34bbc6-e933-4dd1-a246-acc6cba3ea2a") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "2bafd108-75b5-4026-97d5-491172195e81") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "d253fd72-84d8-4da1-8925-5547ddaf516d") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 26 "Net-(D30-A)") + (pinfunction "A") + (pintype "passive") + (uuid "2002939c-18d4-4641-981d-898fb85be3e2") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "b9b59f1a-381d-419d-9785-a48a514e093e") + (at 75.8763 65.4844) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R4" + (at 3.12495 0 0) + (layer "F.SilkS") + (uuid "810b38bc-5f90-4072-9c46-3f93722380d3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "22" + (at 0 1.65 0) + (layer "F.Fab") + (hide yes) + (uuid "a8d9973b-8162-40f1-97c3-0ff6311485f2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "a3671ae3-e8ff-462c-8d12-09e3f604894c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b49eef3e-f203-48cc-b874-f8fdd0da13c5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/7cafd78e-827b-4512-9029-08dc37727121") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1295eb34-c3b9-4338-8b66-9881e4758817") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0f0fb51e-d248-416e-90be-449a8fecac30") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6adec25e-51b0-4020-a817-ca4d7b9b3ec9") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3a578428-ed33-42d1-88cc-caaaf47b0ed3") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f77d4656-63c1-48e1-8c9d-9947192f20e7") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "91186214-fc0a-455a-b140-434efddc646a") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "027df816-91cc-486a-844f-93d153d3f084") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "48c9fcbc-bc47-4d26-8012-f3b06b321e1d") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f8500b1e-3563-4975-99c5-8f9c02cc11e0") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0879483f-275a-4d32-9f0c-51f5238cfaee") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "29336d6c-7468-4693-a9b4-950abb92bbb9") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2b36769a-62cd-475d-bd04-f3f9f0a6f643") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "617afe3c-85dc-4e74-a9b3-1c4d25a5708c") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 47 "/D+") + (pintype "passive") + (uuid "33711b14-65d9-4b12-999e-c5da020b0f1d") + ) + (pad "2" smd roundrect + (at 0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 85 "Net-(U1-PA12)") + (pintype "passive") + (uuid "43a36725-3678-4c6a-b753-480d2e8828d7") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "bd910c09-df33-4811-8e61-4d6d228b904e") + (at 156.77 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D37" + (at 0.2044 0.02 90) + (layer "F.SilkS") + (uuid "b5bffa5b-9095-4475-a008-e70ee2d1d2b7") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1456 0.12 90) + (layer "F.SilkS") + (hide yes) + (uuid "e901b9fc-d55b-43c9-bf8c-89634943e473") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a989ba58-c3d5-44b6-8ba6-2843319c51ed") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f0e957d5-78f3-48f6-a0f4-2b7b8a23686b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/dbd3ebd6-e7a1-401f-a15f-ed1a8b7a724c") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b1dafdda-67c1-4151-b8ad-eb270d6d1f61") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "523f660b-c7f0-42ca-9437-7b8343853aca") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9360cc92-6117-4ed6-a4ba-73f789ef0d28") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6caf3615-1ea6-4a9c-b303-8cbd53bd342a") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3ae01d74-f8b0-444e-9dee-0cffe36c7ff0") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cd0a838f-c965-40f0-928c-10ecab3e08db") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a8de508f-19b0-4b46-8bac-a7093fcdd2ab") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c91ebb3d-a573-468a-af44-084aed4e73b0") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "713ddf13-1c22-42b5-9e70-b336b1023eca") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2a9a2c39-6241-4589-b152-50f995b248a9") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7380e65d-ad9d-41f0-abef-0da38545cd69") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "5bb50d12-3369-44db-bbdf-c37fa52cfba6") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "152b48e6-80df-4775-bbc1-98a60ceabe13") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 59 "Net-(D37-A)") + (pinfunction "A") + (pintype "passive") + (uuid "284cd9da-c62e-4793-a326-5f634270f222") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.75u" + (layer "F.Cu") + (uuid "bdf5fc62-d71a-4081-8f40-55934cefa6a2") + (at 302.0263 154.7812) + (descr "Kailh keyswitch Hotswap Socket plated holes Keycap 1.75u") + (tags "Kailh Keyboard Keyswitch Switch Hotswap Socket Plated Relief Cutout Keycap 1.75u") + (property "Reference" "KEY_SHIFT2" + (at 0 -8 0) + (layer "F.SilkS") + (uuid "12fa747f-901e-48d6-9a30-b6661ee96904") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 8 0) + (layer "F.Fab") + (uuid "586d7ad5-4406-413a-982a-7a249cb33725") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4b2b5070-9522-459c-8ee4-426cfd1ea82b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6cf81b9e-40ed-4d30-b011-84b6ffcf50c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1dd40309-298b-4501-a09d-5becae1ca2bc") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start -7.1 -7.1) + (end -7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e4a035e5-dc8e-4406-bf67-e3aaea992453") + ) + (fp_line + (start -7.1 7.1) + (end 7.1 7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a6045608-cafc-4112-84fa-0322bcdb5cea") + ) + (fp_line + (start 7.1 -7.1) + (end -7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5b4e23d8-1cfb-4edf-bdd1-ce64dc0455e1") + ) + (fp_line + (start 7.1 7.1) + (end 7.1 -7.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5b62ba2e-0699-424c-8e8b-6c3bcbdf9f90") + ) + (fp_line + (start -4.1 -6.9) + (end 1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "0d3d5819-3c81-461a-8d79-d587c79c71bf") + ) + (fp_line + (start -0.2 -2.7) + (end 4.9 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d06f763a-32c5-4393-9f98-3c5019d74e5b") + ) + (fp_arc + (start -6.1 -4.9) + (mid -5.514214 -6.314214) + (end -4.1 -6.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "c4e27e78-52e4-45fd-a108-736abd1f4aaa") + ) + (fp_arc + (start -2.2 -0.7) + (mid -1.614214 -2.114214) + (end -0.2 -2.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "c15aaf59-180c-47d6-80e6-c29c1fad54b5") + ) + (fp_line + (start -16.66875 -9.525) + (end -16.66875 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1d8b1f17-fb5a-462f-a4ee-bc08d0dc89b0") + ) + (fp_line + (start -16.66875 9.525) + (end 16.66875 9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b3757dca-8457-4d56-be3c-04474422e031") + ) + (fp_line + (start 16.66875 -9.525) + (end -16.66875 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2c60d3cb-7a0c-469b-9f3f-67087e44bc79") + ) + (fp_line + (start 16.66875 9.525) + (end 16.66875 -9.525) + (stroke + (width 0.1) + (type solid) + ) + (layer "Dwgs.User") + (uuid "74da4b38-bfcd-4b8f-8a0a-b6ccc2df6c9d") + ) + (fp_line + (start -7.8 -6) + (end -7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "bab895ff-3c46-4a18-804d-af43b1f52710") + ) + (fp_line + (start -7.8 -2.9) + (end -7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "9983ce17-07c1-454e-9af1-74339c3248eb") + ) + (fp_line + (start -7.8 2.9) + (end -7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "a0508730-bf30-47ea-8ce9-29150f7d953a") + ) + (fp_line + (start -7.8 6) + (end -7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "8b99261e-b142-44cc-9787-8c4cfd44d56f") + ) + (fp_line + (start -7 -7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "278d3414-1859-47b4-8063-52408a73a312") + ) + (fp_line + (start -7 -6) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "8578651b-0fa7-4a78-941d-a822d7a419e9") + ) + (fp_line + (start -7 -2.9) + (end -7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "3fef5496-c97f-449c-a0ed-62bca1fd8921") + ) + (fp_line + (start -7 2.9) + (end -7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "d2bcf235-15c7-4335-a340-dbc1069e5fbc") + ) + (fp_line + (start -7 6) + (end -7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "75aa31fb-4ac1-4d48-aaac-4491df2f1823") + ) + (fp_line + (start -7 7) + (end -7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "f1817a7f-1de9-4663-9bbc-6c939fcf9a16") + ) + (fp_line + (start 7 -7) + (end 7 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "2262d4cd-ea96-44eb-80a9-1cd5bda688ea") + ) + (fp_line + (start 7 -6) + (end 7.8 -6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "4f76a57a-a91d-421f-8058-b30ea73f0009") + ) + (fp_line + (start 7 -2.9) + (end 7 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "c20ec53a-611e-4838-9ec3-1a0ba6a057a1") + ) + (fp_line + (start 7 2.9) + (end 7.8 2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "4551af0c-43e5-48da-b6e7-0c94d49cd197") + ) + (fp_line + (start 7 6) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "a6116c5c-2ab5-49a2-87b0-7958a96f91b9") + ) + (fp_line + (start 7 7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "8bac7858-0e4c-4849-9077-43933f055901") + ) + (fp_line + (start 7.8 -6) + (end 7.8 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "1542ea09-d597-45d0-b85d-9b81c5c89262") + ) + (fp_line + (start 7.8 -2.9) + (end 7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "5ad78d7c-0511-4b16-b2b3-d9d2aee609ff") + ) + (fp_line + (start 7.8 2.9) + (end 7.8 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "e7ec6070-8557-49e1-b7fb-a9a7be947b78") + ) + (fp_line + (start 7.8 6) + (end 7 6) + (stroke + (width 0.1) + (type solid) + ) + (layer "Eco1.User") + (uuid "1b784fe5-a9a3-424a-a190-393e3ccbab1f") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "68911212-1270-4c93-ad3b-4083aa7e1179") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f58f8b40-bcd8-43a6-895a-a3bee6da9a0e") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0918fa94-ed4c-43d6-ac72-c80c0594bbdb") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dcddf30a-e763-45e0-89b8-b522e3c1219c") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dde28ef3-1588-4da8-abb2-256d80696814") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1fb83c3b-8132-4032-be1a-fd5b4dfea511") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "203d89af-4bab-4e65-90d5-e4a934f988b7") + ) + (fp_line + (start -7.25 -7.25) + (end -7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7d762a5d-c9bd-4ae3-96db-4e99c710bb2f") + ) + (fp_line + (start -7.25 7.25) + (end 7.25 7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "48485c5c-9d83-4ebf-b42f-078ac1ac0c07") + ) + (fp_line + (start 7.25 -7.25) + (end -7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8ea8f009-7437-4233-8c0d-98e0a26dfff7") + ) + (fp_line + (start 7.25 7.25) + (end 7.25 -7.25) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "063871d2-cdd6-4157-baf9-f5a02ccb1af6") + ) + (fp_line + (start -6 -0.8) + (end -6 -4.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f1314afe-052e-46dc-8e8a-a12d6546a80c") + ) + (fp_line + (start -6 -0.8) + (end -2.3 -0.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3f65fcea-9621-4e3a-bb96-b6c54e63efe1") + ) + (fp_line + (start -4 -6.8) + (end 4.8 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "80f442e4-7179-41a2-b835-419bf62aff1e") + ) + (fp_line + (start -0.3 -2.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "da26ef5e-8270-458d-bade-4fd388f4bfba") + ) + (fp_line + (start 4.8 -6.8) + (end 4.8 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "009e4d7b-ad3d-4950-b3d7-7d609dae9330") + ) + (fp_arc + (start -6 -4.8) + (mid -5.414214 -6.214214) + (end -4 -6.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "6ea8f8b6-c0fe-4152-98d0-8a2726d62c65") + ) + (fp_arc + (start -2.3 -0.8) + (mid -1.714214 -2.214214) + (end -0.3 -2.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "696329ce-596f-44d6-81af-b4626a228e34") + ) + (fp_line + (start -7 -7) + (end -7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d71eb21f-a424-41fd-a385-91e4c80dbb3f") + ) + (fp_line + (start -7 7) + (end 7 7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "41e19e8e-4db8-429d-877c-630e452157a5") + ) + (fp_line + (start 7 -7) + (end -7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3723caa1-c231-47ab-8c96-8731ee4e9ce5") + ) + (fp_line + (start 7 7) + (end 7 -7) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "6843bfae-5cf7-46a2-8ec9-2480ff178fcc") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "1f839a1b-c8a0-403f-b448-50a94a1786e6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" smd roundrect + (at -7.085 -2.54) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "b005c1ca-4855-4be8-b00b-e9f736ffe856") + ) + (pad "" np_thru_hole circle + (at -5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "39c73b14-f5d0-40f4-872d-bf9ad11be655") + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 4 4) + (drill 4) + (layers "*.Cu" "*.Mask") + (uuid "d88826bd-1b82-47a0-af8b-440faf9755e5") + ) + (pad "" np_thru_hole circle + (at 5.08 0) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "c0daea73-9e22-488d-acd7-deaa1b123102") + ) + (pad "" smd roundrect + (at 5.842 -5.08) + (size 2.55 2.5) + (layers "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (uuid "074d1f37-8824-47fe-85cd-f6d76e0e2c4e") + ) + (pad "1" smd roundrect + (at -6.585 -2.54) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "a8d4124c-aa84-423d-a1a7-3b8956784233") + ) + (pad "1" thru_hole circle + (at -3.81 -2.54) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "00247105-9ce6-4608-b87a-a64eb8db1ed4") + ) + (pad "2" thru_hole circle + (at 2.54 -5.08) + (size 3.6 3.6) + (drill 3.05) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 102 "Net-(D60-A)") + (pinfunction "2") + (pintype "passive") + (uuid "fc476289-0192-48d1-a82a-8db5e90bb41a") + ) + (pad "2" smd roundrect + (at 5.32 -5.08) + (size 3.55 2.5) + (layers "B.Cu") + (roundrect_rratio 0.1) + (net 102 "Net-(D60-A)") + (pinfunction "2") + (pintype "passive") + (uuid "04fef1e2-80c0-427f-9aae-1e37fe347a74") + ) + (embedded_fonts no) + (model "${KICAD6_3RD_PARTY}/3dmodels/com_github_perigoso_keyswitch-kicad-library/3d-library.3dshapes/SW_Hotswap_Kailh_MX.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "bf2a5e87-e058-4236-84af-cb6949e2d594") + (at 130.5763 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D21" + (at 0.2544 0.0437 90) + (layer "F.SilkS") + (uuid "1ff66e4e-677a-4034-8e47-dcb9f429bfe0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -7.9156 -0.1263 90) + (layer "F.SilkS") + (hide yes) + (uuid "7f98b17a-a6ee-4ca1-ab02-d5c715fbdefd") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3b2889c1-6625-4b2b-b16d-9097c3f58d35") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a54ec0db-7b5a-46a0-9694-fd44fe457bbd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/6b652fac-8a47-48a6-a903-a055f6d384b8") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5ec5ac39-530b-4b5e-bf3f-717410692e25") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a86b9bea-c5ed-4adc-8f01-d52e3e0b233a") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e5496ca1-3931-484f-a283-8b31f3af61b6") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "920fa632-b59d-464d-b51f-e575753e9915") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ce40fc06-7a84-4924-b427-b651ec21316d") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7a1bc591-49a6-4711-b5c9-fac4ca467e22") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "47e10abe-8274-49d2-8db4-d0a1c416f9a1") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "99413f58-b110-42d6-a249-a1785b72656b") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ec763421-33cb-45f1-ab70-19075e6fdcc7") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ff54dbcf-28a2-4245-a4be-c970397b1a27") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a8e34621-b433-451e-ab8b-7de598c8b7d1") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "b32c0000-4885-4981-9e4d-94cef6f80464") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "973a55b4-1e05-4612-a555-a18afbb01424") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 22 "Net-(D21-A)") + (pinfunction "A") + (pintype "passive") + (uuid "ef544e0d-ccb0-4d16-857a-4f6565c41fd3") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "c1f28c43-3e04-4d66-90f3-9cb7f18c36a4") + (at 240.1138 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D43" + (at 0.1744 -0.0038 90) + (layer "F.SilkS") + (uuid "144d2be4-7fad-4afb-bdcd-2a80f3182397") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2356 0.0662 90) + (layer "F.SilkS") + (hide yes) + (uuid "6a2c4af6-b77b-40ba-9adf-d0117b4368f7") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "625af733-58c5-4906-ab4c-90e2097e4abe") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e4f83842-812a-4769-92b8-81a939a20598") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/a3ea0bc1-1edc-4519-8635-af6897c1c19d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c0d055e5-71c5-4ecb-addf-18e4238f47a7") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b2ee92f2-9cd9-4359-a1c0-bab6b59916fe") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3a9992fe-602a-4a6a-a3c5-c58871019d8c") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e2afc3f2-84f2-4e8c-a61e-02df9bbd23c0") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2f2f6ab8-11d6-40ed-ad1d-e4191f435742") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1f86f342-cc4e-4dff-bfb7-f76cb7578e86") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9b29f637-8be3-4611-ac78-2901bb7046e0") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "386454cb-0ffc-4065-b20c-592d33dcb473") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c6e47cf8-8872-401e-a5d9-6b47d070540d") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4e43c6fb-ddf2-46f9-8b60-0d9ab9a954f8") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c8730473-cb02-40bf-9def-72128df91b5c") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "24c9f352-7026-4b8b-b42c-1ea65790f718") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 51 "/ROW3") + (pinfunction "K") + (pintype "passive") + (uuid "3eb74982-734a-48e3-a010-71c1c99f9465") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 65 "Net-(D43-A)") + (pinfunction "A") + (pintype "passive") + (uuid "4cf66306-482d-4918-9205-f4711f8ca784") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "footprints:LQFP64-10x10mm" + (layer "F.Cu") + (uuid "c341d8a6-d701-447f-8d07-c29738d375e6") + (at 90.095 67.8656 180) + (tags "STM32F446RET6 ") + (property "Reference" "U1" + (at 0 0 180) + (unlocked yes) + (layer "F.SilkS") + (uuid "04cfc2e9-c906-4189-b61d-5a20172d6243") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "~" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (uuid "5fb9d6d6-5a77-4952-977b-9d178f53d4ba") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "34691783-8042-4688-854f-334a612fcaed") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "655291aa-8aef-4e8f-9d7c-e00cf70aa94a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/31831253-77ba-4c6e-9363-32c75e9e329b") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 5.1308 5.1308) + (end 5.1308 4.234392) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "43d58bcd-76b9-4daa-98f7-9499dc868922") + ) + (fp_line + (start 5.1308 -4.234392) + (end 5.1308 -5.1308) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "43d84a0e-6b4c-4dd1-b5be-4d9bef26eded") + ) + (fp_line + (start 5.1308 -5.1308) + (end 4.234392 -5.1308) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "eb2ecc0b-0808-446f-a83a-7e8f2f1ab40e") + ) + (fp_line + (start 4.234392 5.1308) + (end 5.1308 5.1308) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "04a85f3e-b8dd-4183-9f23-916d23516d62") + ) + (fp_line + (start -4.234392 -5.1308) + (end -5.1308 -5.1308) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "dc10cce0-dfa2-4157-8a87-60cca3bf64cf") + ) + (fp_line + (start -5.1308 5.1308) + (end -4.234392 5.1308) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "b3510d34-e690-45e9-8063-f1811b825cc5") + ) + (fp_line + (start -5.1308 4.234392) + (end -5.1308 5.1308) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "530c0354-49e0-4746-b8b4-710cd8a13c48") + ) + (fp_line + (start -5.1308 -5.1308) + (end -5.1308 -4.234392) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.SilkS") + (uuid "f78266ec-4c07-4621-817e-95283b04666d") + ) + (fp_circle + (center -6.8509 -3.75) + (end -6.7747 -3.75) + (stroke + (width 0.1524) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "f09189f1-b8a6-4278-b88a-20172486048b") + ) + (fp_poly + (pts + (xy 6.854899 0.059499) (xy 6.854899 0.4405) (xy 6.600899 0.4405) (xy 6.600899 0.059499) + ) + (stroke + (width 0) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "18ab0376-3569-402c-b897-5dc953c82387") + ) + (fp_poly + (pts + (xy 3.059501 -6.600899) (xy 3.059501 -6.854899) (xy 3.440501 -6.854899) (xy 3.440501 -6.600899) + ) + (stroke + (width 0) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "6ce432ce-8be6-4ed0-8011-bc660a4f9e05") + ) + (fp_poly + (pts + (xy 2.5595 6.600899) (xy 2.5595 6.854899) (xy 2.9405 6.854899) (xy 2.9405 6.600899) + ) + (stroke + (width 0) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "01ccae30-de6b-4fb1-a74e-7f6147ec925b") + ) + (fp_poly + (pts + (xy -1.940499 -6.600899) (xy -1.940499 -6.854899) (xy -1.559499 -6.854899) (xy -1.559499 -6.600899) + ) + (stroke + (width 0) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "8692be4a-ea5a-4d79-a986-b7d9f3d96f19") + ) + (fp_poly + (pts + (xy -2.440501 6.600899) (xy -2.440501 6.854899) (xy -2.059501 6.854899) (xy -2.059501 6.600899) + ) + (stroke + (width 0) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "1949c87c-1c5b-4888-a1c0-29e4e1ff2bcf") + ) + (fp_poly + (pts + (xy -6.854899 0.559501) (xy -6.854899 0.940501) (xy -6.600899 0.940501) (xy -6.600899 0.559501) + ) + (stroke + (width 0) + (type solid) + ) + (fill yes) + (layer "F.SilkS") + (uuid "c6fb7673-1a3c-417f-be0a-cb0368fff43d") + ) + (fp_line + (start 6.8549 4.258) + (end 5.2578 4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "684d3680-e676-4655-9ecf-4aad90bd97e5") + ) + (fp_line + (start 6.8549 -4.258) + (end 6.8549 4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "28f8989d-af1c-4409-b1b8-a04d097cbfb6") + ) + (fp_line + (start 5.2578 5.2578) + (end 4.258 5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8206934c-12bd-4651-a6e9-3b2b011822ae") + ) + (fp_line + (start 5.2578 4.258) + (end 5.2578 5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "47427f83-6ec5-4eaf-92a5-90b670ef017c") + ) + (fp_line + (start 5.2578 -4.258) + (end 6.8549 -4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e5a38b3f-2683-4e12-81b2-662976849cd3") + ) + (fp_line + (start 5.2578 -5.2578) + (end 5.2578 -4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2a9b3b70-1d4d-475d-ba15-88d19118dd97") + ) + (fp_line + (start 4.258 6.8549) + (end -4.258 6.8549) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d510ed41-1b4c-44c9-99ce-35cc330756ce") + ) + (fp_line + (start 4.258 5.2578) + (end 4.258 6.8549) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b98fd5e6-7538-439a-b06f-f7bab32a20ce") + ) + (fp_line + (start 4.258 -5.2578) + (end 5.2578 -5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "55f215d2-683d-41b5-8285-333a6cc1dfc4") + ) + (fp_line + (start 4.258 -6.8549) + (end 4.258 -5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "47b70fbf-b7ad-4ffa-8cf9-f5dd299d7429") + ) + (fp_line + (start -4.258 6.8549) + (end -4.258 5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "eaab482a-d2b6-4f9b-bc2c-1dd448ceb5e8") + ) + (fp_line + (start -4.258 5.2578) + (end -5.2578 5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "cb1a76b7-c625-4ac9-b6ee-f2ccdd36a09b") + ) + (fp_line + (start -4.258 -5.2578) + (end -4.258 -6.8549) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7f3f1922-be90-465c-9ee8-89563b6723d5") + ) + (fp_line + (start -4.258 -6.8549) + (end 4.258 -6.8549) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6d767772-e50a-4b2c-895a-cde43ae9746f") + ) + (fp_line + (start -5.2578 5.2578) + (end -5.2578 4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a40f939f-8860-45ac-88ea-9f8a08536ac1") + ) + (fp_line + (start -5.2578 4.258) + (end -6.8549 4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "54986860-5fc5-446e-a3cd-05a1a49b921d") + ) + (fp_line + (start -5.2578 -4.258) + (end -5.2578 -5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "be2952c3-4f43-4151-a2e0-4d4641dff7f9") + ) + (fp_line + (start -5.2578 -5.2578) + (end -4.258 -5.2578) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3b1bb079-8859-46c4-97d3-e6bb304d769e") + ) + (fp_line + (start -6.8549 4.258) + (end -6.8549 -4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7b9f362f-a693-4b56-bde2-1dbd3b2c9afd") + ) + (fp_line + (start -6.8549 -4.258) + (end -5.2578 -4.258) + (stroke + (width 0.1524) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d2b58718-26e5-44b1-9f13-e3ca99be9b52") + ) + (fp_line + (start 5.0038 5.0038) + (end 5.0038 -5.0038) + (stroke + (width 0.0254) + (type solid) + ) + (layer "F.Fab") + (uuid "9349c066-ccad-413e-9787-9619efec4893") + ) + (fp_line + (start 5.0038 -5.0038) + (end -5.0038 -5.0038) + (stroke + (width 0.0254) + (type solid) + ) + (layer "F.Fab") + (uuid "8d83e8a8-9313-4bb5-90ca-cda58272df1e") + ) + (fp_line + (start -5.0038 5.0038) + (end 5.0038 5.0038) + (stroke + (width 0.0254) + (type solid) + ) + (layer "F.Fab") + (uuid "d9047f8a-522c-420b-ac09-7a26f6d040cc") + ) + (fp_line + (start -5.0038 -3.7338) + (end -3.7338 -5.0038) + (stroke + (width 0.0254) + (type solid) + ) + (layer "F.Fab") + (uuid "deff09c5-7362-44c5-a02b-e3d7fb94aeaf") + ) + (fp_line + (start -5.0038 -5.0038) + (end -5.0038 5.0038) + (stroke + (width 0.0254) + (type solid) + ) + (layer "F.Fab") + (uuid "4b005084-5126-4468-a50e-2795822a035e") + ) + (fp_circle + (center -4.5181 -3.75) + (end -4.4419 -3.75) + (stroke + (width 0.0254) + (type solid) + ) + (fill no) + (layer "F.Fab") + (uuid "63e8e35d-1e37-44ee-8644-42f2b007f9a8") + ) + (fp_text user "${REFERENCE}" + (at 0 0 180) + (unlocked yes) + (layer "F.Fab") + (uuid "eed55e20-6c28-4356-8053-23d6484abde0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -5.749999 -3.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 2 "+3.3V") + (pinfunction "VBAT") + (pintype "bidirectional") + (uuid "9ab9123f-8806-4411-8a7c-e9827a32b7f9") + ) + (pad "2" smd rect + (at -5.749999 -3.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 116 "unconnected-(U1-PC13-Pad2)") + (pinfunction "PC13") + (pintype "bidirectional+no_connect") + (uuid "bcc40e40-148d-4acf-b35f-9ac32e5240d3") + ) + (pad "3" smd rect + (at -5.749999 -2.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 100 "unconnected-(U1-PC14-Pad3)") + (pinfunction "PC14") + (pintype "bidirectional+no_connect") + (uuid "3ca31ae4-720c-4c5a-b2b5-1da45ff15402") + ) + (pad "4" smd rect + (at -5.749999 -2.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 101 "unconnected-(U1-PC15-Pad4)") + (pinfunction "PC15") + (pintype "bidirectional+no_connect") + (uuid "a6600609-b355-41b9-acec-2e42325d06dc") + ) + (pad "5" smd rect + (at -5.749999 -1.749999 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 43 "Net-(U1-OSCIN)") + (pinfunction "OSCIN") + (pintype "bidirectional") + (uuid "975d38ec-0058-47e7-a19e-a7b2b47e1725") + ) + (pad "6" smd rect + (at -5.749999 -1.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 44 "Net-(U1-OSCOUT)") + (pinfunction "OSCOUT") + (pintype "bidirectional") + (uuid "bcb92274-e900-4d75-be89-dc453c0c3b1e") + ) + (pad "7" smd rect + (at -5.749999 -0.750001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 46 "/NRST") + (pinfunction "NRST") + (pintype "bidirectional") + (uuid "e09f11d8-1b1b-4025-8384-9b69513607fd") + ) + (pad "8" smd rect + (at -5.749999 -0.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 115 "unconnected-(U1-PC0-Pad8)") + (pinfunction "PC0") + (pintype "bidirectional+no_connect") + (uuid "847b0be5-29b3-43dc-bf34-468cdf657366") + ) + (pad "9" smd rect + (at -5.749999 0.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 105 "unconnected-(U1-PC1-Pad9)") + (pinfunction "PC1") + (pintype "bidirectional+no_connect") + (uuid "475378f5-62f5-4bda-a469-acbfbf5e3f6d") + ) + (pad "10" smd rect + (at -5.749999 0.750001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 108 "unconnected-(U1-PC2-Pad10)") + (pinfunction "PC2") + (pintype "bidirectional+no_connect") + (uuid "7eef9950-7bfb-4fef-a72e-f576c7ee49fd") + ) + (pad "11" smd rect + (at -5.749999 1.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 106 "unconnected-(U1-PC3-Pad11)") + (pinfunction "PC3") + (pintype "bidirectional+no_connect") + (uuid "e73bed2e-2f69-4bdd-b3e5-31e04719648b") + ) + (pad "12" smd rect + (at -5.749999 1.749999 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 97 "AGND") + (pinfunction "VSSA") + (pintype "bidirectional") + (uuid "99ea2da5-3812-4007-ac42-492aa97b01f8") + ) + (pad "13" smd rect + (at -5.749999 2.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 57 "Net-(U1-VDDA)") + (pinfunction "VDDA") + (pintype "bidirectional") + (uuid "c360a599-3b5d-45f7-ab98-0ee949147900") + ) + (pad "14" smd rect + (at -5.749999 2.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 56 "/UART_RX_EAST") + (pinfunction "PA0") + (pintype "bidirectional") + (uuid "bcc923d8-1f6f-454d-be9e-f8fea75b76b9") + ) + (pad "15" smd rect + (at -5.749999 3.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 55 "/UART_TX_EAST") + (pinfunction "PA1") + (pintype "bidirectional") + (uuid "30b480b2-8bad-4139-b401-209730a5184c") + ) + (pad "16" smd rect + (at -5.749999 3.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 80 "/UART_TX_NORTH") + (pinfunction "PA2") + (pintype "bidirectional") + (uuid "8baf69d4-00e1-4741-88da-2c0ec7bc8579") + ) + (pad "17" smd rect + (at -3.75 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 81 "/UART_RX_NORTH") + (pinfunction "PA3") + (pintype "bidirectional") + (uuid "a3fce03f-b1a1-4af9-bdae-a2f70c7964dd") + ) + (pad "18" smd rect + (at -3.250001 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 1 "GND") + (pinfunction "VSS") + (pintype "bidirectional") + (uuid "2b6f8b73-8adc-41f9-88d9-6273e0e01242") + ) + (pad "19" smd rect + (at -2.75 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 2 "+3.3V") + (pinfunction "VDD") + (pintype "bidirectional") + (uuid "63e409dd-4e63-4de0-9cac-669428f71b69") + ) + (pad "20" smd rect + (at -2.250001 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 204 "unconnected-(U1-PA4-Pad20)") + (pinfunction "PA4") + (pintype "bidirectional") + (uuid "a60e30b0-13dc-43fc-85b3-b690d9b9a84c") + ) + (pad "21" smd rect + (at -1.749999 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 42 "/RGB_DATAIN") + (pinfunction "PA5") + (pintype "bidirectional") + (uuid "49c30ca2-a936-4614-a343-73ef6da4e9d9") + ) + (pad "22" smd rect + (at -1.25 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 203 "unconnected-(U1-PA6-Pad22)") + (pinfunction "PA6") + (pintype "bidirectional") + (uuid "83ea5149-6bfe-4dbe-a2c8-63166c2327ec") + ) + (pad "23" smd rect + (at -0.750001 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 205 "unconnected-(U1-PA7-Pad23)") + (pinfunction "PA7") + (pintype "bidirectional") + (uuid "f2a9e98c-c659-4b66-b377-c8786ff369df") + ) + (pad "24" smd rect + (at -0.25 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 135 "unconnected-(U1-PC4-Pad24)") + (pinfunction "PC4") + (pintype "bidirectional") + (uuid "979aef60-6b05-4e0d-9577-c918e9e54eaa") + ) + (pad "25" smd rect + (at 0.25 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 53 "/ROW5") + (pinfunction "PC5") + (pintype "bidirectional") + (uuid "f977146e-6ecf-4610-8566-bdbb92954dcc") + ) + (pad "26" smd rect + (at 0.750001 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 52 "/ROW4") + (pinfunction "PB0") + (pintype "bidirectional") + (uuid "1b363bd0-695b-49c9-b21a-aa792284f9f3") + ) + (pad "27" smd rect + (at 1.25 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 51 "/ROW3") + (pinfunction "PB1") + (pintype "bidirectional") + (uuid "756af4da-b7c3-466c-98d1-79e821017452") + ) + (pad "28" smd rect + (at 1.749999 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 50 "/ROW2") + (pinfunction "PB2") + (pintype "bidirectional") + (uuid "f3beacc2-d11a-412d-ae3f-655fc19ec09f") + ) + (pad "29" smd rect + (at 2.250001 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 49 "/ROW1") + (pinfunction "PB10") + (pintype "bidirectional") + (uuid "d74d2505-20d3-4a20-90c1-8a79db093aca") + ) + (pad "30" smd rect + (at 2.75 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 45 "Net-(U1-VCAP)") + (pinfunction "VCAP") + (pintype "bidirectional") + (uuid "541aad19-9f2b-458c-9ab5-80f4a8c10a72") + ) + (pad "31" smd rect + (at 3.250001 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 1 "GND") + (pinfunction "VSS") + (pintype "bidirectional") + (uuid "cb1fe2d5-94ad-479c-a7ff-6f7b3463ca1a") + ) + (pad "32" smd rect + (at 3.75 5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 2 "+3.3V") + (pinfunction "VDD") + (pintype "bidirectional") + (uuid "46435096-ba52-4903-afbe-e937b67b5c4a") + ) + (pad "33" smd rect + (at 5.749999 3.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 96 "unconnected-(U1-PB12-Pad33)") + (pinfunction "PB12") + (pintype "bidirectional+no_connect") + (uuid "8c01b0cd-1a49-42de-afe2-bbe3be4c5f93") + ) + (pad "34" smd rect + (at 5.749999 3.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 40 "/COL1") + (pinfunction "PB13") + (pintype "bidirectional") + (uuid "044db25b-0de9-4c95-a14a-33107d95aef7") + ) + (pad "35" smd rect + (at 5.749999 2.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 36 "/COL2") + (pinfunction "PB14") + (pintype "bidirectional") + (uuid "5699ca9f-3f6e-45ba-82c7-16dd573815d5") + ) + (pad "36" smd rect + (at 5.749999 2.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 37 "/COL3") + (pinfunction "PB15") + (pintype "bidirectional") + (uuid "9363292b-a03c-424a-bcc6-999e380d96a3") + ) + (pad "37" smd rect + (at 5.749999 1.749999 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 38 "/COL4") + (pinfunction "PC6") + (pintype "bidirectional") + (uuid "9bbca883-4c39-4fe8-a3e3-7234905f27f9") + ) + (pad "38" smd rect + (at 5.749999 1.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 39 "/COL5") + (pinfunction "PC7") + (pintype "bidirectional") + (uuid "5071b6c9-9a5f-4631-b5ac-645ab2b22a3b") + ) + (pad "39" smd rect + (at 5.749999 0.750001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 129 "/COL6") + (pinfunction "PC8") + (pintype "bidirectional") + (uuid "67aed648-2eaa-470c-9150-be9318d0ecfc") + ) + (pad "40" smd rect + (at 5.749999 0.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 130 "/COL7") + (pinfunction "PC9") + (pintype "bidirectional") + (uuid "d18871b8-befc-4abf-a562-19e62cc8ed25") + ) + (pad "41" smd rect + (at 5.749999 -0.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 131 "/COL8") + (pinfunction "PA8") + (pintype "bidirectional") + (uuid "3acbab0e-5307-4fb7-aca0-ecaafb7b73bc") + ) + (pad "42" smd rect + (at 5.749999 -0.750001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 111 "/UART_RX_WEST") + (pinfunction "PA9") + (pintype "bidirectional") + (uuid "ce7e485d-8920-4985-b6b1-8299d0baffb9") + ) + (pad "43" smd rect + (at 5.749999 -1.25 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 99 "/UART_TX_WEST") + (pinfunction "PA10") + (pintype "bidirectional") + (uuid "ede469b1-7dcf-4c2e-a1b6-078034b25315") + ) + (pad "44" smd rect + (at 5.749999 -1.749999 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 84 "Net-(U1-PA11)") + (pinfunction "PA11") + (pintype "bidirectional") + (uuid "ce03421a-0c1d-40fe-ad55-f260d1f9d11c") + ) + (pad "45" smd rect + (at 5.749999 -2.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 85 "Net-(U1-PA12)") + (pinfunction "PA12") + (pintype "bidirectional") + (uuid "333eb3bd-1ffa-4d40-a224-04a5459f8ee5") + ) + (pad "46" smd rect + (at 5.749999 -2.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 89 "/JTMS") + (pinfunction "PA13") + (pintype "bidirectional") + (uuid "93848502-bb78-49a2-815e-fa1354950efe") + ) + (pad "47" smd rect + (at 5.749999 -3.250001 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 1 "GND") + (pinfunction "VSS") + (pintype "bidirectional") + (uuid "2daa22d1-3362-4211-8161-c6abbd3bf5ab") + ) + (pad "48" smd rect + (at 5.749999 -3.75 180) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 2 "+3.3V") + (pinfunction "VDD") + (pintype "bidirectional") + (uuid "3cb94d74-ab42-451a-8172-34c06939cc6b") + ) + (pad "49" smd rect + (at 3.75 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 87 "/JTCLK") + (pinfunction "PA14") + (pintype "bidirectional") + (uuid "d4649957-b290-4208-9b4b-11a0780a4aa0") + ) + (pad "50" smd rect + (at 3.250001 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 126 "/COL9") + (pinfunction "PA15") + (pintype "bidirectional") + (uuid "113ad936-6d18-4138-83d8-424f8feee5d6") + ) + (pad "51" smd rect + (at 2.75 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 127 "/COL10") + (pinfunction "PA10") + (pintype "bidirectional") + (uuid "c9cdfce7-46c3-4d73-a13e-7ca320344812") + ) + (pad "52" smd rect + (at 2.250001 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 128 "/COL11") + (pinfunction "PC11") + (pintype "bidirectional") + (uuid "8a4238e5-0bcc-4feb-bb96-f481b537cdd3") + ) + (pad "53" smd rect + (at 1.749999 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 94 "/UART_TX_SOUTH") + (pinfunction "PC12") + (pintype "bidirectional") + (uuid "163389d3-209b-4800-9bb0-f656a7edb72a") + ) + (pad "54" smd rect + (at 1.25 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 95 "/UART_RX_SOUTH") + (pinfunction "PD2") + (pintype "bidirectional") + (uuid "4760b2d8-2a35-475f-a4fd-2bed98f7fe1e") + ) + (pad "55" smd rect + (at 0.750001 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 93 "/SWO") + (pinfunction "PB3") + (pintype "bidirectional") + (uuid "4354d08a-577e-433c-909e-9c49d4f63005") + ) + (pad "56" smd rect + (at 0.25 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 125 "/COL12") + (pinfunction "PB4") + (pintype "bidirectional") + (uuid "a4c5b0cc-ebac-4537-90a4-2349ce8675cd") + ) + (pad "57" smd rect + (at -0.25 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 133 "/COL13") + (pinfunction "PB5") + (pintype "bidirectional") + (uuid "9c394d19-eaf5-415f-b6ab-f84d73c1b041") + ) + (pad "58" smd rect + (at -0.750001 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 132 "/COL14") + (pinfunction "PB6") + (pintype "bidirectional") + (uuid "1541d439-70e6-4532-9dea-a7acddac17cb") + ) + (pad "59" smd rect + (at -1.25 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 134 "/COL15") + (pinfunction "PB7") + (pintype "bidirectional") + (uuid "0c0478e1-1e26-4fd2-98d3-da40d57f61c1") + ) + (pad "60" smd rect + (at -1.749999 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 86 "Net-(U1-BOOT)") + (pinfunction "BOOT") + (pintype "bidirectional") + (uuid "c2e3d927-3366-49bc-bf69-a6ebf42200ea") + ) + (pad "61" smd rect + (at -2.250001 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 120 "unconnected-(U1-PB8-Pad61)") + (pinfunction "PB8") + (pintype "bidirectional+no_connect") + (uuid "68742dda-0fbf-442e-829b-7352328ae6a0") + ) + (pad "62" smd rect + (at -2.75 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 121 "unconnected-(U1-PB9-Pad62)") + (pinfunction "PB9") + (pintype "bidirectional+no_connect") + (uuid "7c91588a-4fcc-4f74-b218-f9e8f2b97ded") + ) + (pad "63" smd rect + (at -3.250001 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 1 "GND") + (pinfunction "VSS") + (pintype "bidirectional") + (uuid "674cd008-ae7b-4981-a9d1-283d8d84e62d") + ) + (pad "64" smd rect + (at -3.75 -5.749999 270) + (size 1.1938 0.3048) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 2 "+3.3V") + (pinfunction "VDD") + (pintype "bidirectional") + (uuid "8402d281-4701-48e8-9c5f-1805ef495ceb") + ) + (embedded_fonts no) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "c34b0e7a-65a5-431c-861a-adc1b7171962") + (at 263.9263 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D13" + (at 0.2344 0.0756 90) + (layer "F.SilkS") + (uuid "afae846d-a869-4bcd-9a00-11a9852c5442") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2156 -0.1244 90) + (layer "F.SilkS") + (hide yes) + (uuid "37e27f7b-8dfe-4b41-9ff2-e928680b753e") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "9e9ec4dd-e5e8-422c-91cd-facf4b4295fa") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "700d653b-bcf7-4814-b556-8f450d9b5d8e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/c27e88cd-6cf4-4726-ba23-ebafe7cdb788") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9eca1f94-7b6e-41b5-b23a-b2e7a6646acb") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "17af93c8-35b2-4cac-880c-dc4bb9d78efc") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fbfa0bac-53b1-4c69-b836-856d44ce1f49") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b80e8a44-887e-4b65-8c45-affe379b55c7") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3c662929-9cff-468e-b548-ac7b37c952b2") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "98407e70-f408-459c-8f82-b7a4b7ca11f9") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "89a10159-3bb0-490b-84bb-65131b5545d2") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4db97931-5a73-413f-b00c-13f111307e4f") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "72bd8864-b794-475d-8fce-26445909889b") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b5526087-9892-4c24-964c-32add1309086") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "528d026b-4e15-4c79-b19f-74a2055e23d9") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "7b19ed30-e29d-41ff-8b91-48efe7302356") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "904e781a-b958-4145-b661-dcf8e53f8176") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 14 "Net-(D13-A)") + (pinfunction "A") + (pintype "passive") + (uuid "f1ec861b-3454-4411-95f4-8e6f1ed7a31f") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "c5925efe-4a12-4abe-83d2-cfb276bf8b1e") + (at 98.6763 77.95 -90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C5" + (at -3.535915 0.068991 90) + (layer "F.SilkS") + (uuid "6d7d323b-c2e6-45ae-8e1a-5423b2f18aef") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "87c29def-4d64-42bc-b4af-28339ded20d6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "471cec40-e3f6-4834-9e94-0b8443cddeab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7131e1f5-1b1a-4add-aed1-25b151f47b14") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/6ac435e0-7961-4dbe-9c30-dbf9204a8e02") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "86a892ef-1f8f-4fcb-b63d-cbddcf080c3f") + ) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d4ede345-2e89-49e7-962c-082494143cc1") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "da760370-299d-4df2-8242-168230df5f1b") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4981562f-db48-4e3c-b8b5-550ecdddf41a") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ec81add7-9804-490b-99e6-95722d3e545e") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2276267f-10fe-4f1b-94d8-1e6bc7dd430f") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ac06eae5-216c-4ee5-a48d-884fb3867245") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "379b34f7-619b-4fda-a5e2-c219dc7e0549") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "7d24b2dc-995f-4e48-b324-b268a70fc430") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3e725c58-abb5-4535-83d4-e2f1ef9da9d6") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "35d27dfc-73fb-469c-b9b4-6078f7e6ad45") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "cb4cabd7-c58a-4fe0-8af9-720781b2b3c4") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "8ad1b14a-051c-4d75-bb81-7b5a07063bc4") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 2 "+3.3V") + (pintype "passive") + (uuid "c41ab438-4fd6-4c30-86b1-19bf74756737") + ) + (pad "2" smd roundrect + (at 0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "a526ee79-d265-48d9-b837-dd2d95dc8d8e") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "caa7f542-52ce-438c-b8e4-db0116fab214") + (at 59.3763 77.975 -90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C7" + (at 5.15 -0.07495 270) + (layer "F.SilkS") + (uuid "413fce0e-52e8-434a-bdce-43a004f4dd08") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "1uF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "39d73cfa-1381-4f27-bd55-e2979f4352a8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1dc3207c-a9f7-4cb3-96d9-fb503ad1b391") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "5d2e6549-d2d3-4663-9938-1575e8ed8d5c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/acdb7e2a-dbdd-410b-b924-7a3e541f44dd") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "54b3a525-3b32-4fd3-9433-3f283a622e66") + ) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b404b0c7-4322-449b-899e-4ee0bfb25666") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "77dbff56-cb99-498b-a802-3a686f5a299c") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a3b94d7e-00bf-40ee-b516-55960757adba") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "868ff1e7-ec5f-4994-b2d5-f53df1552399") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "65480785-b254-4455-841a-7097cb2860b9") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1af94b54-f832-4c21-a0f6-426391305a1f") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a6af05f8-2f7a-47a3-911e-b1a4a34b4d81") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "cbd5b76d-f19a-48f3-b62a-8eb9a19e0e40") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9ad93465-b74f-4a35-9001-e340fdb76c29") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ad1ec0f9-e15f-453f-a0a4-2caa18eba9d7") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3e3d7756-4ec0-44f3-88f0-db7b069313ee") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "17fb80aa-deb1-45b8-9500-67a527e9b4a0") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 3 "+5V") + (pintype "passive") + (uuid "1fe2f8c4-8d6e-41c8-a2a1-490f87438861") + ) + (pad "2" smd roundrect + (at 0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "95db0695-a40a-424c-8ad7-e4553fd873a8") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "cd03bce1-91f5-46db-a43f-cf25f40fcb21") + (at 302.0263 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D74" + (at 0.2344 0.0437 90) + (layer "F.SilkS") + (uuid "edf4f77f-8c1b-4178-ba1f-a4439021db2f") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0856 -0.0663 90) + (layer "F.SilkS") + (hide yes) + (uuid "44721c66-694f-455d-9a1f-1e63cdbae02a") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "ef8481c9-e067-4643-a773-068b33120e0a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "19c4f452-ef9e-4d10-aba1-2faa7f9b5398") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b492ccfc-e90a-4ded-bda1-de723576cc78") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "25311eb1-e07d-489e-b212-4b7dd8da03b4") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fb7f1deb-049f-4cde-ad87-93b2b070b45d") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "405b8113-ca44-4c2b-9253-725b58080713") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "80689805-1d8a-4132-a36b-efc15a2485cc") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b30cf2c9-04eb-4bdd-8597-d8323e59e052") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "22f6efe4-a402-4850-9493-841a34aaab0f") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "632e4df6-93a8-4ddc-960b-58c6052aae5d") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "661f8498-7e2a-4f43-90a8-00bdee011e66") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "462cdb0d-0fbb-4547-8fb5-a5ee3a3ba72b") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "25987c49-4154-4937-873a-6796f8a63859") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "0a6761e7-242e-4bfb-88ee-a028a03f5536") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "978edda4-c534-40d9-9267-6d71dafc3dd4") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "a253fd30-5798-411b-80c9-0dd59ff7d95d") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 122 "Net-(D74-A)") + (pinfunction "A") + (pintype "passive") + (uuid "ee9f5a7e-af91-4b51-9d74-031aea3a75c1") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (layer "F.Cu") + (uuid "d15e3a23-0c31-4b0f-91a3-e052d9dee58a") + (at 204.395 186.9282 -90) + (descr "Through hole straight socket strip, 1x04, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x04 2.54mm single row") + (property "Reference" "South1" + (at 0 -2.77 90) + (layer "F.SilkS") + (uuid "40779919-3b6a-4f3e-9481-a567d829e5fc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 0 10.39 90) + (layer "F.Fab") + (uuid "bbb575fa-906d-4b5f-a0a2-57a999923e07") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c81f6747-df8c-49e5-8baa-75841dee862a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3669b250-ab2b-49f4-9c89-8557ff11146e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 270) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "cb560fea-f6c4-464e-8057-a7a95f0e3084") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "TAD" + (at 0 0 270) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "087e6017-1d20-4c87-9387-2581fbc0193f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 0 0 270) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "c52d22f7-3ad5-4914-86bb-a1728699d39f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*") + (path "/9676fbe1-cd81-4f09-9a64-1e08ed9b6d67") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start -1.33 8.95) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ab59babe-e233-4d9b-ab16-dac91d587ebc") + ) + (fp_line + (start -1.33 1.27) + (end -1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2abb7855-2a67-47c7-902d-cef241a4f2de") + ) + (fp_line + (start -1.33 1.27) + (end 1.33 1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "23cf7c97-b101-4e0a-bad9-473f09c41c99") + ) + (fp_line + (start 1.33 1.27) + (end 1.33 8.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5b5f11ef-361c-4ede-884b-03770a1ef452") + ) + (fp_line + (start 0 -1.33) + (end 1.33 -1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3da60c53-46f2-45fb-b2c6-b09eda7efc10") + ) + (fp_line + (start 1.33 -1.33) + (end 1.33 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "462ec708-61a7-45b6-89f7-196e0efa5393") + ) + (fp_line + (start -1.8 9.4) + (end -1.8 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "33d22593-b18e-41ef-9703-585a3ff28896") + ) + (fp_line + (start 1.75 9.4) + (end -1.8 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "e3b4cce6-2ffd-4aac-900d-453afc59b353") + ) + (fp_line + (start -1.8 -1.8) + (end 1.75 -1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "912cc0c2-0b80-4f55-bbfc-fb4a02f49e0f") + ) + (fp_line + (start 1.75 -1.8) + (end 1.75 9.4) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "15680597-c5ff-4652-bc6c-44dab6a50070") + ) + (fp_line + (start -1.27 8.89) + (end -1.27 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "56182695-d066-4789-bb86-31b9cc2a3170") + ) + (fp_line + (start 1.27 8.89) + (end -1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d8b1a907-4071-4a75-9ebb-5d77964cd48c") + ) + (fp_line + (start 1.27 -0.635) + (end 1.27 8.89) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b8338874-10c6-4c15-8dfe-0232bdcfabdf") + ) + (fp_line + (start -1.27 -1.27) + (end 0.635 -1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "bf87153a-21bc-42e5-a05d-b982e2365f49") + ) + (fp_line + (start 0.635 -1.27) + (end 1.27 -0.635) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "07263112-dc34-4a1e-aa8b-1bb27040ff29") + ) + (fp_text user "${REFERENCE}" + (at 0 3.81 0) + (layer "F.Fab") + (uuid "a4d2d635-3f26-478d-882d-33f1a66a5f19") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at 0 0 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "+5V") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "b024251b-c972-429d-8782-2d0d56be44b8") + ) + (pad "2" thru_hole circle + (at 0 2.54 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 95 "/UART_RX_SOUTH") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "1be5e200-6821-4014-aeaa-7cfd6c4454c5") + ) + (pad "3" thru_hole circle + (at 0 5.08 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 94 "/UART_TX_SOUTH") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "e9b869c4-17d5-4c8b-9f10-4f0fe635fd74") + ) + (pad "4" thru_hole circle + (at 0 7.62 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "Pin_4") + (pintype "passive") + (uuid "3c19ab8e-fea3-41d4-995f-90e584e97760") + ) + (embedded_fonts no) + (model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x04_P2.54mm_Vertical.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Crystal_AKL:Crystal_HC52-U_Vertical" + (layer "F.Cu") + (uuid "d2c26a48-118a-4c96-bddd-fb8aad33b018") + (at 105.4233 59.423) + (descr "Crystal THT HC-52/U, http://www.kvg-gmbh.de/assets/uploads/files/product_pdfs/XS71xx.pdf, Alternate KiCad Library") + (tags "THT crystal HC-52/U") + (property "Reference" "Y1" + (at 1.8267 -2.553 0) + (layer "F.SilkS") + (uuid "4ceea2d9-ed14-47e5-8a4c-9ecb60c5cc2d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "8MHz" + (at 1.9 2.85 0) + (layer "F.Fab") + (hide yes) + (uuid "de9585ed-8a2d-48c9-a24a-a276cc4be803") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "2d550f1b-a66a-4f16-ab76-e8e8aef8a42a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "8Mz Crystal" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8da0aeaf-45e7-426b-b298-94736816659d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (path "/8f6ee047-3b69-4415-a3d3-f3f35ce3c89b") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start -0.45 -1.85) + (end 4.25 -1.85) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c83a7e5-23a9-45d9-acf6-ed078d00f5ea") + ) + (fp_line + (start -0.45 1.85) + (end 4.25 1.85) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cd49ca75-4507-4af1-820c-5bf0683202c3") + ) + (fp_line + (start 1.016 0) + (end 1.397 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ee48f85a-0b61-4890-af64-16b82af1f1cf") + ) + (fp_line + (start 1.397 0) + (end 1.397 -1.016) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "aa32ae48-94f1-4c48-b404-4375edd78d89") + ) + (fp_line + (start 1.397 0) + (end 1.397 1.016) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "07063853-a17b-4d23-8f00-6dd728d17896") + ) + (fp_line + (start 1.651 -1.27) + (end 1.651 1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5fce924f-008c-42c3-b0bb-15c34f42268a") + ) + (fp_line + (start 1.651 1.27) + (end 2.159 1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a2f1e559-b860-4ef1-bf83-961e3016fe72") + ) + (fp_line + (start 2.159 -1.27) + (end 1.651 -1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "44194c8e-55da-472a-abd9-e29ba984693f") + ) + (fp_line + (start 2.159 1.27) + (end 2.159 -1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a470574f-7dcf-4172-b0cd-94176e885b7b") + ) + (fp_line + (start 2.413 -1.016) + (end 2.413 1.016) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d21f9063-5aaa-4160-8a2b-4af3cfca48fb") + ) + (fp_line + (start 2.413 0) + (end 2.794 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0d31cb12-0d2d-449f-a63b-b8015c87ffa1") + ) + (fp_arc + (start -0.45 1.85) + (mid -2.3 0) + (end -0.45 -1.85) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "961d9bad-7d2e-4efe-a1d3-69388348a1c9") + ) + (fp_arc + (start 4.25 -1.85) + (mid 6.1 0) + (end 4.25 1.85) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "06408a36-ce2f-4b75-9f22-04c5f9c40e4d") + ) + (fp_line + (start -2.6 -2.1) + (end -2.6 2.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1be55c88-c20d-4e47-88fc-18b7607291d4") + ) + (fp_line + (start -2.6 2.1) + (end 6.4 2.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c3f3547f-cc79-447b-a80d-6fa8691b684a") + ) + (fp_line + (start 6.4 -2.1) + (end -2.6 -2.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "96759866-488c-4e02-9b75-e8b8617de08d") + ) + (fp_line + (start 6.4 2.1) + (end 6.4 -2.1) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "dd62f6b1-de5f-4804-99f5-d9b40b968301") + ) + (fp_line + (start -0.45 -1.65) + (end 4.25 -1.65) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2cbc2e8a-f7e3-4661-8685-c4cec85636be") + ) + (fp_line + (start -0.45 -1.15) + (end 4.25 -1.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "aa92abd7-61d6-4128-bb85-0d7ed9239720") + ) + (fp_line + (start -0.45 1.15) + (end 4.25 1.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c752f874-d57c-4f9f-9ef6-4e79d576e64c") + ) + (fp_line + (start -0.45 1.65) + (end 4.25 1.65) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0fdac751-f130-411a-8fb6-eed579bbcae9") + ) + (fp_arc + (start -0.45 1.15) + (mid -1.6 0) + (end -0.45 -1.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b9402ef0-43ac-4b26-8276-db9dc5c05aff") + ) + (fp_arc + (start -0.45 1.65) + (mid -2.1 0) + (end -0.45 -1.65) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9d7a4dfc-d970-4799-8883-9a87633b8fec") + ) + (fp_arc + (start 4.25 -1.65) + (mid 5.9 0) + (end 4.25 1.65) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "caa371a7-d11a-4686-920c-f0734f23e93f") + ) + (fp_arc + (start 4.25 -1.15) + (mid 5.4 0) + (end 4.25 1.15) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5ee2bbe1-e1a1-4a10-b3bb-e42aa0d89ef7") + ) + (fp_text user "${REFERENCE}" + (at 1.9 0 0) + (layer "F.Fab") + (uuid "c576c28b-7cd7-494b-9898-86040a1d29f2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at 0 0) + (size 1.5 1.5) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 44 "Net-(U1-OSCOUT)") + (pintype "passive") + (uuid "18f2ddb5-3e2f-45a0-9614-d0d8e238797f") + ) + (pad "2" thru_hole circle + (at 3.8 0) + (size 1.5 1.5) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 43 "Net-(U1-OSCIN)") + (pintype "passive") + (uuid "05e25420-68b1-4db7-b52c-c0195f05a222") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Crystal.3dshapes/Crystal_HC52-U_Vertical.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "d891079d-63e4-493d-bbb6-32326f94b976") + (at 330.6013 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D76" + (at 0.2144 0.0087 90) + (layer "F.SilkS") + (uuid "6aace5d4-964a-4ffa-8e9b-49967214ff09") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2356 -0.0713 90) + (layer "F.SilkS") + (hide yes) + (uuid "ad918964-186f-41f5-a876-af30c95b916d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "864578bf-db18-42e7-872f-a77327648bb7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1dd7b9df-b7d6-4f98-add1-2ea6d14e99cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/f97507f7-f073-454f-9c49-bda7ad839dd1") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "21a6397b-7c6b-4f2d-9aa3-3639d5c9a7a5") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1f8b8593-effd-4b37-8fed-dd64b9585496") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2d9ba72e-1da3-4945-8eee-a7b5cf2795e6") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f5f3febc-7c4e-4848-9a5d-2ab769a2bb52") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "680404cf-f335-4f7c-ac82-11197b4446dd") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4e3c1e72-b8b0-4461-9496-3a255a113dfb") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1fd7d4b9-2815-4567-9347-dcb5adf5f06e") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b8a692d6-b51f-4337-aaa7-e3bbb59a6130") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "193d8f2b-33e9-481a-bc30-fec9bb336f34") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "944a5dc1-cda7-415b-93b6-78396f33bd7b") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5c482a5f-b1ac-41ca-bcfc-6c21f8cd7046") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "88a36eea-20af-4d71-86db-1ae35beaaa32") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "69dc3066-7566-40e2-b901-ecbfb720c340") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 124 "Net-(D76-A)") + (pinfunction "A") + (pintype "passive") + (uuid "08b54c93-f312-40f2-b5df-a1cc1f0bbfcb") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "dac3be5c-bd1b-43d0-a7d4-7c3d02576f50") + (at 68.5513 61.925 -90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R1" + (at -2.5 0 180) + (layer "F.SilkS") + (uuid "51be56c4-7da5-41f0-b131-af48fcfb6705") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "5.1k" + (at 0 1.65 90) + (layer "F.Fab") + (hide yes) + (uuid "a8b1a771-418e-477b-b260-19ecb5e0afba") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "bf72b84f-6a5e-4a54-bf02-ff08f4b2cc3a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "9e79a491-d0eb-482b-899f-d89e75097895") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/55fe11de-2a05-4ff1-bc3a-63c075a9f29d") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0e6b6449-4eae-4fc7-a092-0a462a2361b5") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bd83ab3a-4ba3-4e9f-97c1-3966bc70df0c") + ) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f3ba59b8-16fe-404a-9795-2803d668916f") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cc7d24ec-c330-4ba1-b38b-2df256c0402b") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "508142c6-8cb8-42a7-8376-f45a66987a77") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b2f83982-54cd-4c15-8102-f17339ff8bdb") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c32351c1-d80a-4d44-8976-6cad796ba023") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4ef1b61d-447e-4933-89fd-ce138017a714") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5712b152-b7d5-42c6-a7b9-f4e91ffa155d") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "903628ed-0709-4113-99ba-4a0aa7135d89") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2dc817bc-c469-4615-b8c8-6cf833ea9b47") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "fdb3fafa-f596-4143-a083-d024b229de2e") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "d5a18414-ad93-42eb-b960-5e291c485763") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 270) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 82 "Net-(USB1-CC2)") + (pintype "passive") + (uuid "2476e663-5bf5-49b7-ab76-58c81d9a9b5e") + ) + (pad "2" smd roundrect + (at 0.9125 0 270) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 1 "GND") + (pintype "passive") + (uuid "baa21d8a-5f47-4228-99d5-54d41d37ac90") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "db394feb-f53d-424e-bee0-190376326818") + (at 180.5825 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D7" + (at 0.0144 0.0075 90) + (layer "F.SilkS") + (uuid "f404af2d-2094-4f9c-b0a6-1ffbe942a24a") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1356 0.0875 90) + (layer "F.SilkS") + (hide yes) + (uuid "9c59bd82-2f23-4340-998e-f597a65faa64") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3d0f617f-367c-4e7d-8636-dd3655f721d6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "b3f587a1-01bb-4f6a-99c4-7761316408f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/92ba53dd-9dc7-41fe-93ac-26128165abf8") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4fb4f08b-a798-4f73-a2e2-fd33bdd4b751") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1dc24fc7-3a54-4ec1-b942-5e6efed9f808") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c554d9c9-2137-4330-84db-fa1ce2601bed") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "56886020-79f4-4048-a1bd-3b3107977e01") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4f158c3b-a373-474b-a53e-d8ff1d463ec3") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7a5916e2-bc20-4ed4-b439-aa533fd3c20a") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "11b784ec-1fcd-459c-83c9-d58ea00fa977") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ed123c53-8af8-46a1-aa51-0e2b7621d4af") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "03a49102-8cb1-4a0c-81ae-71756a694df1") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2cfdf233-635d-4040-a66f-ed1a7046a499") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "30bdb861-d9c8-44e4-a79e-dddbe8e3b831") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "5f785075-8b25-41fa-9e96-04d6de57d57d") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "d8b5272d-c221-4bf6-b7f5-431225cb377e") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 8 "Net-(D7-A)") + (pinfunction "A") + (pintype "passive") + (uuid "d00e63d0-da96-4116-8b2a-6a72b21ffe6c") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "dd09799d-a3fb-4f5a-bf35-3f6aa202aa77") + (at 224.6356 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D28" + (at 0.1544 0.1244 90) + (layer "F.SilkS") + (uuid "04d802ee-5880-4df9-a948-e7a76196da54") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0656 0.0044 90) + (layer "F.SilkS") + (hide yes) + (uuid "94c2baec-72d5-4c98-9e76-c4b96fac4f0c") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a056ca92-6d85-4d29-b8c3-bafc285b2ff5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "3d434c39-fb24-43a2-a22b-73418ea77036") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1d858e45-2ad9-4e53-99d0-697d505b86ea") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f8da464f-b8af-484e-bba6-e887dde0a9f8") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "05ce0fd8-b93b-480c-821d-e43a4391f6d5") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0175cb03-2443-4414-b5bb-9d3a9f9dcdc1") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e1732793-6f57-46a3-a37b-e4f3ef71203c") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a2f04c3c-6a8f-47c3-86d4-05cd81362994") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ff1ca395-d630-4be4-a128-2bbb630b7669") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4de96862-5d74-4497-8146-bbc58d8965e9") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a96ce23f-0561-45b2-a794-55409de04052") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "52f56eb3-82f7-4dc1-97e5-7921c519d985") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "82a93a08-8f3a-4478-8e4a-cc7493b64ac7") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "3120507e-500c-4ce9-9382-3938e2b1ee64") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "672d57aa-7d96-42f2-87cc-35b8d713ec6f") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "d86c4349-b8b8-4c86-a929-8579e1597c91") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 34 "Net-(D28-A)") + (pinfunction "A") + (pintype "passive") + (uuid "e5029549-c565-4ee5-8a3f-c82a4c7e50e5") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "de361b36-2ed8-4149-9356-6a7557077e91") + (at 281.7856 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D32" + (at 0.2544 0.0225 90) + (layer "F.SilkS") + (uuid "2844dffb-7779-4631-a658-09a69dba566e") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1456 0.1025 90) + (layer "F.SilkS") + (hide yes) + (uuid "f6ec89ee-4082-4313-84e6-ac0022166b5b") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "76189582-60de-41dd-86a8-a362e5401a80") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "54784e70-890a-4aad-b0c3-11d7710df449") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1e170ac8-3bf7-41a0-95a8-1f51035ff9da") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "448f7b1f-058c-4f43-b992-78a7fd4147a5") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1f5a8d79-08df-48ce-99b4-59aeb52f8c03") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9395da2f-070c-4286-a31c-9ff64dc0cb6d") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6fed5bbb-09be-43d3-a58d-42c0ca243eb1") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "09b1d21a-96cd-42b8-8d07-278bb4e9298a") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fcc4b2b5-78a0-45a5-9af0-abe3ae9843bf") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "78f8adc9-83b9-41fc-ae49-ed0fe42839e4") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "4debe1c5-e3d0-46bf-97c6-a3596917c388") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "dd0cd44b-3dab-4ac3-9219-df824d6d6c51") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "983a519d-0b43-4e98-8139-d527deb3e8bd") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1280e80d-85cf-4489-b429-0bf1b0ca7ac9") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "2dd71428-86ef-48e4-a13e-e17f1d366645") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 50 "/ROW2") + (pinfunction "K") + (pintype "passive") + (uuid "8240db5e-dbff-468c-8ae6-eea34401e671") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 28 "Net-(D32-A)") + (pinfunction "A") + (pintype "passive") + (uuid "dbdf8abf-bf3b-423b-85be-7aec90382999") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "e01c7c2c-2db9-496f-a344-6db55cfc3d3b") + (at 242.495 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D57" + (at 0.1744 0.005 90) + (layer "F.SilkS") + (uuid "272514ea-71c3-4f6d-829c-93e17a8cdf9d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2156 -0.065 90) + (layer "F.SilkS") + (hide yes) + (uuid "a8d28c17-ed85-4d46-aa1b-1fbc560d1b8d") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1190bc76-088c-49cc-9b88-de809710c643") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a165cb16-7abe-4313-a8cb-821c44cb3563") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/bc24a6c2-8e4a-4e00-9334-7bfb7b7bde11") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c673907c-0719-4d6e-b021-d1d17de4d6c2") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ea9cd705-63b0-4cd2-b23b-973313eac23d") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "911ec68a-16c8-4ee4-8ecd-b5b637e832a7") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1ecef599-deff-4e7e-a6dc-6ef6adf1b002") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d414ac2d-abfe-4ace-8d23-0819750b01e5") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6d40c8f2-ad9d-4f6d-9410-162bd69a20ba") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fc3fcf08-0b52-44a7-9608-eea5eeb9e07f") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "95584694-e66c-4658-b0ba-5d68ca24bfdc") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1f024974-4c7f-48c3-bd33-0b88f83a195f") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ed0ba842-ef4e-4123-a804-80d34e8abb0e") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f7d90c9f-825f-4609-8153-37b3b7d0e250") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "83edacfc-dcfa-408d-a9c7-462473aa4e42") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "2004cba6-3bc5-40de-9f3b-09e2015dabf4") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 78 "Net-(D57-A)") + (pinfunction "A") + (pintype "passive") + (uuid "e6042be8-4cba-4aa7-8651-69cc1d97d6a4") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "e786af02-8d62-430f-bea6-5d2c15b63567") + (at 114.4513 59.425 90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C1" + (at 2.9 0 180) + (layer "F.SilkS") + (uuid "6c6e4faf-3388-488f-9990-e0f8227f8115") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "20pF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "5553390e-6eea-452d-a184-c3c228e02d3a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "c104d235-8878-441b-ab25-1cd1e53a2af5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "a5af6f0d-9a90-4e6b-b516-a5e32334e22a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/3cf6d79a-8b3d-4cf7-a145-285fd4bdd59f") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "05607680-2391-4abd-9859-99a840ad4655") + ) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "67a6ec35-7c37-4558-8b94-18ef71fae991") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "843a2e70-cf38-4a38-8e84-dbde38c5f93a") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "110985d1-2b07-4610-b287-eb448dbb7c5a") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "41c6b0d6-23e3-47ec-ab35-b8276bb9e577") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5bf9a5e7-f014-47cf-833f-3e71676da20e") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1cd2c8b8-5835-4419-9c73-ecc63bc44054") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "1b2d1dc2-283f-4a73-b4ec-c232e1af2e74") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e476099d-28b2-49ea-a093-0dfb90563a5e") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "851449e6-a6d8-4026-a244-2217c6b6b0bc") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9b4ae73a-4713-4e46-9519-2171ea1665bc") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0d236285-0cba-45fd-95c0-927cb7991362") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "7177cfbc-f398-4ab0-adcd-c4276b6bf271") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 43 "Net-(U1-OSCIN)") + (pintype "passive") + (uuid "5a3c5af1-6133-434b-9ec0-3f1bf687f0d4") + ) + (pad "2" smd roundrect + (at 0.95 0 90) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "05d9644a-e388-4ccf-aa02-90f1e26d476e") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (layer "F.Cu") + (uuid "eb2964dc-f557-44fa-893b-779a9224361d") + (at 100.9513 71.225) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), Alternate KiCad Library") + (tags "resistor") + (property "Reference" "R8" + (at -2.68405 0 90) + (layer "F.SilkS") + (uuid "a4d58b13-3bdf-4e79-8a6b-d833ebc9027d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "22" + (at 0 1.65 0) + (layer "F.Fab") + (hide yes) + (uuid "1bd91def-14cc-4772-aecb-4390913ed381") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c61d359d-d0b0-4838-8b79-8aa8a975edca") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5221d5d6-a629-4952-a656-4d80545e82b2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/7efd55f9-94bc-4e0f-acd8-78533ca71252") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.7 -1) + (end -1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4916b7b5-010d-4536-af97-db30a20f8554") + ) + (fp_line + (start -1.7 1) + (end 1.7 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fd93677f-016f-47d9-8f93-c6764ef24807") + ) + (fp_line + (start 1.7 -1) + (end -1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0607aeab-3173-4c47-8b26-f4b4a9e6a4c8") + ) + (fp_line + (start 1.7 1) + (end 1.7 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "82862382-99bb-4cbb-96ea-5f2323f19a94") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5d044554-cafa-4312-8261-452fb804fd78") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "829a5e22-3b9f-4981-93bc-cc0e65ab837f") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ea4330f3-329a-4c4f-9327-41b5c9446c08") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "93a83905-248e-40b0-8edd-e9e774d305ef") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b263d1a0-4905-4e87-93fe-062265727f3f") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3f7881b5-66ed-4f3f-bc99-11291c3b2a97") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b6e09bfb-c885-41a2-9cb2-9fef7bb010dc") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d1e3457b-c53a-4b16-a92e-4dd55e61d4d7") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "61ccf283-8a02-4eb1-9994-d2e2e4af43af") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 46 "/NRST") + (pintype "passive") + (uuid "2b96256c-b8c5-44ea-972e-88ee58012f7f") + ) + (pad "2" smd roundrect + (at 0.9125 0) + (size 1.025 1.4) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.243902) + (net 91 "Net-(J1-Pin_5)") + (pintype "passive") + (uuid "c1d44f35-36d5-4225-9006-59e1ad3a26ab") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "ebedddbc-27c4-415e-9e10-6bf2aabcb359") + (at 222.2544 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D10" + (at 0.1544 0.0156 90) + (layer "F.SilkS") + (uuid "55de5a35-04ca-4335-9e64-c4ba1ca0a420") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.0656 0.0056 90) + (layer "F.SilkS") + (hide yes) + (uuid "5bf7612e-23e8-4e67-84e4-b4617defa054") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "7e52450e-04e7-4a3a-9654-8e8ced903641") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1a91743c-7328-440e-a4dd-ff1c12efc6f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/dad54e66-9301-4d40-a76c-94a7922eb1db") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a19a3726-cc90-4c32-8645-8bfe6d038c7c") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dde862de-64b7-4996-b542-a7bc56c73256") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7620a6ea-742f-409f-b045-0b60904b1702") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "df922c0d-a926-4cfb-a50b-d78129ca271a") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "be7addd4-916e-4e18-86b0-4bc4542f4fc8") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7edea5c7-3693-40dd-a070-f07fc47fc3df") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "782e2205-7712-46a9-9d23-0826e3c0a33e") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c8f3480a-3eee-4424-a213-221030c6f32a") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5b86012d-3694-4cd2-8974-2ff87c5362b9") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "898893c0-e0e6-4d29-8944-58f8453ea03a") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b517acae-12b1-4bf2-a131-5c6e4b3faffd") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "55b64b40-c9ab-438a-97b6-1c94c430ace9") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "532bd62a-ad78-4142-bbc2-92dbc5a55f9d") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 11 "Net-(D10-A)") + (pinfunction "A") + (pintype "passive") + (uuid "08806380-5299-463b-9555-2c782d3dda27") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "f0996015-6303-4e5c-b447-544ed94c703f") + (at 193.6794 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D8" + (at -0.0156 0.0306 90) + (layer "F.SilkS") + (uuid "506050c9-04ca-4651-b21d-02f1a7be06ee") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2656 0.0106 90) + (layer "F.SilkS") + (hide yes) + (uuid "74104dd7-9b45-4b1b-8dca-4876e5ce9b4f") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "42bfa319-e4dc-46ad-a4ca-d108476d6d70") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "bae911d4-7774-45ed-8d1a-07eaabc447a9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b3630641-d36d-4db6-ad43-e110633f8f94") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b0a33438-b718-4668-9075-b9a9690c471d") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "04aff196-a5a0-485e-b189-995f8440b847") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f0af92e4-1470-4b59-ada1-481665f4e94f") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9483088a-e9ef-491e-9ef3-476d442748d8") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a7c23ca4-0e40-404b-ab80-8dd029aa644c") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c0b51e0d-18d8-4113-b599-e6cdf5527988") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6702dfec-9ae9-45d2-a5b6-cfdc21793d78") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ab9d64d8-d721-46f5-be1b-7861718a298d") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "acf59721-e4b6-4711-b853-599201ee1cce") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "56af7f37-ce09-4014-a8d8-52c42dee6218") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "24541615-e365-439e-b51c-f592f45ba710") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "249650c9-4312-4c1a-aff4-7cc4a118c4b8") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 49 "/ROW1") + (pinfunction "K") + (pintype "passive") + (uuid "49b216cf-57e9-49c5-9eac-bd07d59017de") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 9 "Net-(D8-A)") + (pinfunction "A") + (pintype "passive") + (uuid "e385fdf1-7fe7-413f-a78f-fc351f902926") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "f216b85a-945c-43b7-90de-bf0d5356651d") + (at 229.3981 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D56" + (at 0.1744 0.0219 90) + (layer "F.SilkS") + (uuid "abfb0708-ff4b-4966-a2a7-284679cc6bf1") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -7.9856 0.0519 90) + (layer "F.SilkS") + (hide yes) + (uuid "dcf7a4ec-9830-4b8f-8236-0dbb03093a99") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "5a5a5a4f-0283-44d7-9d0f-1b3205d7b044") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "f50d264a-5e23-4b06-9c4c-517871bf29ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1ff6c01f-4fc2-4cc9-a30a-eb864a33da13") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "61982934-9fa7-48ee-a5ee-98961589ddab") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cfab0879-5999-4f84-b879-b21c11d308ad") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a57dd5c5-163d-4b22-9bb8-fe5726ca947d") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "234e0cdb-6963-4d28-8ec0-483bf5b73ebb") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ba50762c-eb60-437f-940a-85112f613a65") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "383c624e-273f-48d2-812e-6027f0eb7a91") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "95fe8200-9d96-4cd7-a8be-7ba5f699d413") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "59f81d45-6bec-4351-8319-5e8d74600428") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "82a3215e-adc9-43c4-87e6-467cca7f2d34") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "df61d4ae-97b1-46b7-a52a-036608bc0441") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ffed9012-b9b8-4214-8c9e-01d07d4987f1") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "c3993de6-8981-4fc1-98b8-e06468222bc9") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "299e868a-a294-4ae2-a9c3-8f762697da97") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 77 "Net-(D56-A)") + (pinfunction "A") + (pintype "passive") + (uuid "c244e4f1-bc27-4811-8b7a-8b2673801e22") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "f3b401fc-a096-4cf3-ae2b-1f2d0ae8fbd5") + (at 312.7419 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D61" + (at 0.2944 -0.0319 90) + (layer "F.SilkS") + (uuid "bb071bea-a35b-4a72-8f32-eea11e7f35b0") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.1556 -0.0019 90) + (layer "F.SilkS") + (hide yes) + (uuid "f74532bc-985f-4010-9cc8-4246c47d00fb") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "1b1abdaa-7252-427e-a4dd-b554976e3569") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "6f34f4e8-ed68-4602-a930-770164ee1b0f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/c4c317f6-ef3e-463d-b8da-793882d0879a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "94a3da03-0713-40f5-a563-1c1ad388571a") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "430b20e5-aa5c-47a6-a94b-5bb611dc5dcf") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "76d1e40e-474d-439b-942a-25119bbf7240") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a5021595-256e-4ad1-91b3-bc84116fadf5") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8f1f180c-2681-4bb2-93c8-fb0ea73af003") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e107fa3f-3163-4f49-9438-bba11d18ab65") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "03a31513-1830-4178-99a9-c0a5c67f12fe") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "728925b6-a2a2-4aa5-962e-ce2c22944e78") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a8bf40aa-9774-4bab-8511-d0f040e387c9") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "368fb753-e89f-4736-b34b-1cb098e75f74") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ac30de51-84d7-4322-81bc-a02c5c6e0331") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "8ca4a237-67ee-49a7-aeac-04bb3c929cf8") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 52 "/ROW4") + (pinfunction "K") + (pintype "passive") + (uuid "bf6112ac-f734-4280-a60e-59fe7260fb2f") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 103 "Net-(D61-A)") + (pinfunction "A") + (pintype "passive") + (uuid "f439baf3-7ab7-4671-b0be-4620ba50af17") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Package_SOT:SOT223" + (layer "F.Cu") + (uuid "f78a514e-0598-416d-9e49-25cee811ad10") + (at 57.1513 71.25) + (descr "SOT-223") + (property "Reference" "IC1" + (at 0 0 0) + (layer "F.SilkS") + (uuid "3d5e12a3-f167-4f2b-9857-9d1cf1ac08bd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify left bottom) + ) + ) + (property "Value" "TEAM SKBD" + (at 4.19995 1.675 0) + (layer "F.SilkS") + (uuid "98a72553-ed78-4ead-9eb1-614054998386") + (effects + (font + (face "NType 82 Headline") + (size 1.2065 1.2065) + (thickness 0.1524) + ) + (justify left bottom) + ) + (render_cache "TEAM SKBD" 0 + (polygon + (pts + (xy 61.371509 71.536464) (xy 61.371509 71.914831) (xy 61.442453 71.914831) (xy 61.442453 71.840499) + (xy 61.444861 71.792714) (xy 61.452287 71.750092) (xy 61.462854 71.717794) (xy 61.477507 71.689403) + (xy 61.494484 71.667085) (xy 61.515119 71.648071) (xy 61.566349 71.620686) (xy 61.636 71.606031) + (xy 61.678859 71.604092) (xy 61.689025 71.604092) (xy 61.710997 71.60643) (xy 61.728806 71.613362) + (xy 61.74099 71.623225) (xy 61.749736 71.636506) (xy 61.75658 71.671721) (xy 61.75658 72.584711) + (xy 61.754244 72.606715) (xy 61.747315 72.624546) (xy 61.737457 72.636742) (xy 61.724189 72.645494) + (xy 61.689025 72.652339) (xy 61.570785 72.652339) (xy 61.570785 72.719895) (xy 62.1113 72.719895) + (xy 62.1113 72.652339) (xy 61.99306 72.652339) (xy 61.971089 72.650002) (xy 61.95328 72.64307) + (xy 61.941096 72.633206) (xy 61.932349 72.619926) (xy 61.925505 72.584711) (xy 61.925505 71.671721) + (xy 61.927842 71.649717) (xy 61.934771 71.631886) (xy 61.944628 71.61969) (xy 61.957897 71.610938) + (xy 61.99306 71.604092) (xy 62.003227 71.604092) (xy 62.050124 71.606439) (xy 62.091276 71.613436) + (xy 62.123739 71.623719) (xy 62.151835 71.637708) (xy 62.174449 71.654232) (xy 62.193463 71.673961) + (xy 62.221283 71.72304) (xy 62.236818 71.789306) (xy 62.239633 71.840793) (xy 62.239633 71.914831) + (xy 62.310577 71.914831) (xy 62.310577 71.536464) + ) + ) + (polygon + (pts + (xy 63.209053 72.719895) (xy 63.209053 72.342263) (xy 63.138109 72.342263) (xy 63.138109 72.382708) + (xy 63.135714 72.433109) (xy 63.128378 72.47852) (xy 63.117744 72.514056) (xy 63.103014 72.545663) + (xy 63.085866 72.571035) (xy 63.065066 72.593047) (xy 63.014077 72.625921) (xy 62.946445 72.646093) + (xy 62.867889 72.652339) (xy 62.739482 72.652339) (xy 62.71748 72.650002) (xy 62.699653 72.643071) + (xy 62.687469 72.633214) (xy 62.678731 72.619944) (xy 62.671927 72.584932) (xy 62.671927 72.139966) + (xy 62.80026 72.139966) (xy 62.832231 72.142309) (xy 62.860064 72.14928) (xy 62.881706 72.159561) + (xy 62.899789 72.173531) (xy 62.924283 72.210421) (xy 62.935095 72.262108) (xy 62.935444 72.274856) + (xy 62.935444 72.311911) (xy 63.006388 72.311911) (xy 63.006388 71.899508) (xy 62.935444 71.899508) + (xy 62.935444 71.936859) (xy 62.933101 71.968889) (xy 62.926129 71.996777) (xy 62.915846 72.018466) + (xy 62.901872 72.036594) (xy 62.864982 72.061162) (xy 62.813311 72.072046) (xy 62.80026 72.072411) + (xy 62.671927 72.072411) (xy 62.671927 71.672016) (xy 62.674264 71.649905) (xy 62.681193 71.631994) + (xy 62.691041 71.619756) (xy 62.704296 71.610973) (xy 62.739482 71.604092) (xy 62.867889 71.604092) + (xy 62.917564 71.60644) (xy 62.961717 71.61344) (xy 62.997354 71.623846) (xy 63.028651 71.638034) + (xy 63.054299 71.654834) (xy 63.076309 71.674914) (xy 63.109622 71.7243) (xy 63.130539 71.789444) + (xy 63.138109 71.875787) (xy 63.138109 71.916526) (xy 63.209053 71.916526) (xy 63.209053 71.536464) + (xy 62.356031 71.536464) (xy 62.356031 71.604092) (xy 62.435447 71.604092) (xy 62.457388 71.60643) + (xy 62.475179 71.613366) (xy 62.487359 71.623239) (xy 62.496112 71.636536) (xy 62.503002 71.672016) + (xy 62.503002 72.584932) (xy 62.500665 72.606863) (xy 62.493737 72.624635) (xy 62.483874 72.636796) + (xy 62.470597 72.645522) (xy 62.435447 72.652339) (xy 62.356031 72.652339) (xy 62.356031 72.719895) + ) + ) + (polygon + (pts + (xy 64.135598 72.566367) (xy 64.139612 72.577526) (xy 64.164369 72.617954) (xy 64.181025 72.632382) + (xy 64.200563 72.64291) (xy 64.225412 72.649982) (xy 64.253838 72.652339) (xy 64.307911 72.652339) + (xy 64.307911 72.719895) (xy 63.850127 72.719895) (xy 63.850127 72.652339) (xy 63.905895 72.652339) + (xy 63.927321 72.650288) (xy 63.956654 72.636175) (xy 63.96592 72.624243) (xy 63.971025 72.609493) + (xy 63.971622 72.590159) (xy 63.966673 72.568061) (xy 63.902507 72.375709) (xy 63.539315 72.375709) + (xy 63.481926 72.568061) (xy 63.477889 72.588299) (xy 63.482959 72.621056) (xy 63.491731 72.633766) + (xy 63.504392 72.643391) (xy 63.522359 72.650042) (xy 63.544398 72.652339) (xy 63.610259 72.652339) + (xy 63.610259 72.719895) (xy 63.243752 72.719895) (xy 63.243752 72.652339) (xy 63.292742 72.652339) + (xy 63.308966 72.651614) (xy 63.354134 72.639313) (xy 63.372423 72.627467) (xy 63.387838 72.611772) + (xy 63.401163 72.590499) (xy 63.410982 72.564672) (xy 63.488101 72.308154) (xy 63.557953 72.308154) + (xy 63.880553 72.308154) (xy 63.716711 71.808968) (xy 63.704851 71.808968) (xy 63.557953 72.308154) + (xy 63.488101 72.308154) (xy 63.7201 71.536464) (xy 63.787655 71.536464) + ) + ) + (polygon + (pts + (xy 64.711621 72.719895) (xy 64.711621 72.652339) (xy 64.632205 72.652339) (xy 64.610234 72.650002) + (xy 64.592425 72.64307) (xy 64.580241 72.633206) (xy 64.571494 72.619926) (xy 64.56465 72.584711) + (xy 64.56465 71.742739) (xy 64.574817 71.742739) (xy 64.860213 72.719895) (xy 64.91937 72.719895) + (xy 65.206461 71.742739) (xy 65.216628 71.742739) (xy 65.216628 72.584711) (xy 65.214291 72.606715) + (xy 65.207362 72.624546) (xy 65.197504 72.636742) (xy 65.184236 72.645494) (xy 65.149072 72.652339) + (xy 65.069656 72.652339) (xy 65.069656 72.719895) (xy 65.532523 72.719895) (xy 65.532523 72.652339) + (xy 65.453107 72.652339) (xy 65.431136 72.650002) (xy 65.413327 72.64307) (xy 65.401143 72.633206) + (xy 65.392396 72.619926) (xy 65.385552 72.584711) (xy 65.385552 71.671721) (xy 65.387889 71.649717) + (xy 65.394818 71.631886) (xy 65.404675 71.61969) (xy 65.417944 71.610938) (xy 65.453107 71.604092) + (xy 65.532523 71.604092) (xy 65.532523 71.536464) (xy 65.189591 71.536464) (xy 64.943018 72.378435) + (xy 64.932852 72.378435) (xy 64.686279 71.536464) (xy 64.343346 71.536464) (xy 64.343346 71.604092) + (xy 64.422762 71.604092) (xy 64.444734 71.60643) (xy 64.462543 71.613362) (xy 64.474727 71.623225) + (xy 64.483473 71.636506) (xy 64.490317 71.671721) (xy 64.490317 72.584711) (xy 64.487981 72.606715) + (xy 64.481052 72.624546) (xy 64.471194 72.636742) (xy 64.457926 72.645494) (xy 64.422762 72.652339) + (xy 64.343346 72.652339) (xy 64.343346 72.719895) + ) + ) + (polygon + (pts + (xy 66.284397 72.738754) (xy 66.331648 72.736403) (xy 66.377014 72.72938) (xy 66.418908 72.718126) + (xy 66.458319 72.702542) (xy 66.493595 72.683481) (xy 66.525936 72.660475) (xy 66.554027 72.634616) + (xy 66.578829 72.605158) (xy 66.599528 72.573095) (xy 66.616601 72.537688) (xy 66.629639 72.499521) + (xy 66.638659 72.458155) (xy 66.644126 72.387497) (xy 66.641812 72.347572) (xy 66.63504 72.310633) + (xy 66.6093 72.245251) (xy 66.567108 72.187562) (xy 66.505866 72.134711) (xy 66.419899 72.084386) + (xy 66.389082 72.069906) (xy 66.218536 71.993953) (xy 66.171576 71.970186) (xy 66.130608 71.943482) + (xy 66.100587 71.918048) (xy 66.075572 71.890096) (xy 66.057575 71.862662) (xy 66.044055 71.832935) + (xy 66.03554 71.802451) (xy 66.031423 71.769685) (xy 66.031047 71.755778) (xy 66.033337 71.727178) + (xy 66.039942 71.70118) (xy 66.065036 71.656338) (xy 66.105541 71.620679) (xy 66.161298 71.595795) + (xy 66.229667 71.58533) (xy 66.237101 71.585233) (xy 66.270703 71.587539) (xy 66.302101 71.594253) + (xy 66.359684 71.620341) (xy 66.41218 71.664057) (xy 66.460758 71.728177) (xy 66.505392 71.816803) + (xy 66.546219 71.938185) (xy 66.551229 71.95675) (xy 66.618784 71.95675) (xy 66.618784 71.536464) + (xy 66.551229 71.536464) (xy 66.551229 71.635844) (xy 66.524266 71.654409) (xy 66.493045 71.61757) + (xy 66.458389 71.585795) (xy 66.426877 71.563946) (xy 66.39185 71.546011) (xy 66.355555 71.533036) + (xy 66.315278 71.523872) (xy 66.235407 71.517604) (xy 66.189123 71.519947) (xy 66.14431 71.526916) + (xy 66.102015 71.538239) (xy 66.062092 71.553894) (xy 66.026194 71.573065) (xy 65.99337 71.596128) + (xy 65.965267 71.621731) (xy 65.940725 71.650751) (xy 65.920915 71.681655) (xy 65.905023 71.715567) + (xy 65.89367 71.751233) (xy 65.88659 71.789614) (xy 65.884075 71.831806) (xy 65.88638 71.874025) + (xy 65.893083 71.913129) (xy 65.918632 71.982962) (xy 65.959986 72.043983) (xy 66.01825 72.097988) + (xy 66.095981 72.145767) (xy 66.113778 72.154406) (xy 66.287786 72.235442) (xy 66.395587 72.291206) + (xy 66.43516 72.320323) (xy 66.465085 72.353382) (xy 66.479112 72.377629) (xy 66.489157 72.405045) + (xy 66.497229 72.471922) (xy 66.48823 72.528586) (xy 66.461898 72.579548) (xy 66.418979 72.622606) + (xy 66.36116 72.654115) (xy 66.327757 72.664227) (xy 66.292267 72.669958) (xy 66.265832 72.671199) + (xy 66.222749 72.668876) (xy 66.183147 72.662049) (xy 66.147794 72.651257) (xy 66.115562 72.636576) + (xy 66.05996 72.5962) (xy 66.014352 72.540278) (xy 65.978225 72.466492) (xy 65.95256 72.371566) + (xy 65.944853 72.319941) (xy 65.938149 72.262479) (xy 65.87052 72.262479) (xy 65.87052 72.719895) + (xy 65.938149 72.719895) (xy 65.938149 72.625597) (xy 65.958408 72.607032) (xy 65.996953 72.645759) + (xy 66.037435 72.677591) (xy 66.07153 72.697677) (xy 66.108877 72.713712) (xy 66.192606 72.73329) + ) + ) + (polygon + (pts + (xy 67.617967 72.652339) (xy 67.587877 72.649974) (xy 67.561027 72.642849) (xy 67.518649 72.616958) + (xy 67.482559 72.572343) (xy 67.477773 72.56423) (xy 67.178748 72.035945) (xy 67.438876 71.685056) + (xy 67.463753 71.655551) (xy 67.489173 71.633338) (xy 67.512511 71.619293) (xy 67.537068 71.610037) + (xy 67.584152 71.604092) (xy 67.668578 71.604092) (xy 67.668578 71.536464) (xy 67.281812 71.536464) + (xy 67.281812 71.604092) (xy 67.327413 71.604092) (xy 67.344602 71.606311) (xy 67.357006 71.612409) + (xy 67.367992 71.631683) (xy 67.362431 71.658334) (xy 67.356144 71.668185) (xy 67.047026 72.079852) + (xy 66.977777 72.079852) (xy 66.977777 71.671574) (xy 66.980113 71.649609) (xy 66.987042 71.631816) + (xy 66.996901 71.619647) (xy 67.010172 71.610917) (xy 67.045332 71.604092) (xy 67.124748 71.604092) + (xy 67.124748 71.536464) (xy 66.661881 71.536464) (xy 66.661881 71.604092) (xy 66.741297 71.604092) + (xy 66.763299 71.60643) (xy 66.781126 71.613364) (xy 66.793306 71.623224) (xy 66.802042 71.636499) + (xy 66.808852 71.671574) (xy 66.808852 72.584563) (xy 66.806515 72.606608) (xy 66.799586 72.624475) + (xy 66.78973 72.636699) (xy 66.776463 72.645473) (xy 66.741297 72.652339) (xy 66.661881 72.652339) + (xy 66.661881 72.719895) (xy 67.124748 72.719895) (xy 67.124748 72.652339) (xy 67.045332 72.652339) + (xy 67.023391 72.650002) (xy 67.0056 72.643073) (xy 66.993411 72.633205) (xy 66.984655 72.619919) + (xy 66.977777 72.584563) (xy 66.977777 72.154111) (xy 67.045332 72.154111) (xy 67.296988 72.587952) + (xy 67.304371 72.60486) (xy 67.306107 72.619827) (xy 67.303106 72.63206) (xy 67.296173 72.641737) + (xy 67.272075 72.65207) (xy 67.266636 72.652339) (xy 67.222655 72.652339) (xy 67.222655 72.719895) + (xy 67.680439 72.719895) (xy 67.680439 72.652339) + ) + ) + (polygon + (pts + (xy 68.301331 71.539261) (xy 68.398154 71.55695) (xy 68.476877 71.587993) (xy 68.537147 71.629323) + (xy 68.579941 71.679046) (xy 68.606114 71.736762) (xy 68.612915 71.768938) (xy 68.615234 71.803295) + (xy 68.615234 71.82186) (xy 68.613418 71.853065) (xy 68.606821 71.886956) (xy 68.595963 71.917327) + (xy 68.579357 71.947553) (xy 68.558936 71.973785) (xy 68.529993 72.000815) (xy 68.498152 72.022701) + (xy 68.452964 72.045048) (xy 68.40918 72.059887) (xy 68.40918 72.073442) (xy 68.460777 72.086275) + (xy 68.522602 72.118991) (xy 68.575337 72.166501) (xy 68.615128 72.225642) (xy 68.640225 72.29505) + (xy 68.646767 72.333344) (xy 68.649048 72.374752) (xy 68.642073 72.454681) (xy 68.619101 72.53043) + (xy 68.601977 72.563557) (xy 68.581187 72.593646) (xy 68.556425 72.62104) (xy 68.528081 72.645201) + (xy 68.495056 72.666763) (xy 68.458408 72.684745) (xy 68.416225 72.699687) (xy 68.370313 72.710567) + (xy 68.318175 72.71755) (xy 68.262209 72.719895) (xy 67.725082 72.719895) (xy 67.725082 72.652339) + (xy 67.804498 72.652339) (xy 67.839672 72.645487) (xy 67.852934 72.63673) (xy 67.862788 72.624527) + (xy 67.869717 72.606675) (xy 67.872054 72.584637) (xy 68.040978 72.584637) (xy 68.047828 72.619914) + (xy 68.056573 72.633201) (xy 68.068753 72.643067) (xy 68.086562 72.650002) (xy 68.108534 72.652339) + (xy 68.22169 72.652339) (xy 68.267163 72.649705) (xy 68.33217 72.633551) (xy 68.381791 72.604031) + (xy 68.402033 72.583801) (xy 68.418941 72.560013) (xy 68.433243 72.530771) (xy 68.44371 72.497469) + (xy 68.450736 72.456319) (xy 68.453087 72.410261) (xy 68.453087 72.340864) (xy 68.451246 72.299834) + (xy 68.436557 72.229328) (xy 68.409117 72.176745) (xy 68.390563 72.155796) (xy 68.3688 72.138379) + (xy 68.342445 72.123867) (xy 68.312578 72.113284) (xy 68.275977 72.106224) (xy 68.235246 72.103868) + (xy 68.040978 72.103868) (xy 68.040978 72.584637) (xy 67.872054 72.584637) (xy 67.872054 71.671574) + (xy 68.040978 71.671574) (xy 68.040978 72.036239) (xy 68.257199 72.036239) (xy 68.313164 72.029588) + (xy 68.340324 72.020263) (xy 68.364235 72.007222) (xy 68.385368 71.990214) (xy 68.402996 71.969801) + (xy 68.417783 71.944791) (xy 68.428557 71.916571) (xy 68.435563 71.883346) (xy 68.437911 71.847203) + (xy 68.437911 71.793129) (xy 68.437759 71.784646) (xy 68.426857 71.724971) (xy 68.400014 71.675883) + (xy 68.380818 71.655422) (xy 68.35795 71.638053) (xy 68.330945 71.623754) (xy 68.30036 71.613165) + (xy 68.265325 71.606405) (xy 68.226773 71.604092) (xy 68.108534 71.604092) (xy 68.073374 71.610917) + (xy 68.060103 71.619647) (xy 68.050244 71.631816) (xy 68.043315 71.649609) (xy 68.040978 71.671574) + (xy 67.872054 71.671574) (xy 67.865244 71.636499) (xy 67.856507 71.623224) (xy 67.844328 71.613364) + (xy 67.826501 71.60643) (xy 67.804498 71.604092) (xy 67.725082 71.604092) (xy 67.725082 71.536464) + (xy 68.240255 71.536464) + ) + ) + (polygon + (pts + (xy 69.109556 71.537003) (xy 69.20224 71.550236) (xy 69.244894 71.563252) (xy 69.285103 71.580393) + (xy 69.323131 71.601764) (xy 69.358516 71.627112) (xy 69.391852 71.656991) (xy 69.422272 71.69078) + (xy 69.450471 71.729546) (xy 69.475403 71.772202) (xy 69.497645 71.820243) (xy 69.516203 71.872155) + (xy 69.531395 71.929654) (xy 69.542449 71.990965) (xy 69.549386 72.057768) (xy 69.551724 72.128253) + (xy 69.55054 72.178463) (xy 69.535625 72.305602) (xy 69.505445 72.414982) (xy 69.46213 72.506899) + (xy 69.407351 72.581988) (xy 69.342148 72.640891) (xy 69.305768 72.664389) (xy 69.266901 72.683889) + (xy 69.225359 72.699377) (xy 69.181486 72.710608) (xy 69.134619 72.717555) (xy 69.085542 72.719895) + (xy 68.63623 72.719895) (xy 68.63623 72.652339) (xy 68.715646 72.652339) (xy 68.750809 72.645494) + (xy 68.764078 72.636742) (xy 68.773936 72.624546) (xy 68.780864 72.606715) (xy 68.783201 72.584711) + (xy 68.783201 71.671721) (xy 68.952126 71.671721) (xy 68.952126 72.584711) (xy 68.95897 72.619926) + (xy 68.967716 72.633206) (xy 68.979901 72.64307) (xy 68.99771 72.650002) (xy 69.019681 72.652339) + (xy 69.085542 72.652339) (xy 69.133351 72.649123) (xy 69.195282 72.631932) (xy 69.22176 72.617785) + (xy 69.245789 72.59965) (xy 69.268174 72.576424) (xy 69.287962 72.548548) (xy 69.306589 72.51268) + (xy 69.322188 72.470852) (xy 69.336124 72.416539) (xy 69.346325 72.354109) (xy 69.353468 72.272293) + (xy 69.355836 72.178938) (xy 69.355836 72.077494) (xy 69.350607 71.943081) (xy 69.332764 71.824583) + (xy 69.305199 71.740642) (xy 69.269235 71.681301) (xy 69.247789 71.658576) (xy 69.223903 71.640034) + (xy 69.195973 71.624805) (xy 69.165268 71.613885) (xy 69.127208 71.606495) (xy 69.085542 71.604092) + (xy 69.019681 71.604092) (xy 68.984518 71.610938) (xy 68.971249 71.61969) (xy 68.961391 71.631886) + (xy 68.954463 71.649717) (xy 68.952126 71.671721) (xy 68.783201 71.671721) (xy 68.776357 71.636506) + (xy 68.767611 71.623225) (xy 68.755426 71.613362) (xy 68.737617 71.60643) (xy 68.715646 71.604092) + (xy 68.63623 71.604092) (xy 68.63623 71.536464) (xy 69.085542 71.536464) + ) + ) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "29628290-8ec1-4d88-848d-fd85a2f0ad10") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "85c451d7-9c9b-497d-a2e7-0ed2ba520f73") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Manufacturer" "STMicroelectronics" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "63504435-f431-4afc-820c-b4137fcbe529") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Part Number" "LD1117S33CTR" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "3a5fb34c-a76b-4b4b-8701-a00d68e5d43c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "*TO-252-2* *TO?252?2*") + (path "/780e4915-82a4-4658-81f3-960aa1d9fc82") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start -3.3 -1.8) + (end -3.3 1.8) + (stroke + (width 0.127) + (type solid) + ) + (layer "F.SilkS") + (uuid "4c94eaa8-ba94-4c66-a4ce-259d1a0f2532") + ) + (fp_line + (start -3.3 1.8) + (end 3.3 1.8) + (stroke + (width 0.127) + (type solid) + ) + (layer "F.SilkS") + (uuid "54767478-e4ec-4aee-8730-835c2c314715") + ) + (fp_line + (start 3.3 -1.8) + (end -3.3 -1.8) + (stroke + (width 0.127) + (type solid) + ) + (layer "F.SilkS") + (uuid "adc134ea-f809-467d-96da-4224c859c513") + ) + (fp_line + (start 3.3 1.8) + (end 3.3 -1.8) + (stroke + (width 0.127) + (type solid) + ) + (layer "F.SilkS") + (uuid "2c2fd303-244f-4d97-9e04-b436d910f334") + ) + (fp_line + (start -3.55 -2.05) + (end -3.55 2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "249790d3-f42b-4fe6-a9c0-4f32b73882ae") + ) + (fp_line + (start -3.55 2.05) + (end -3.15 2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "fe5280a9-44c9-469c-aa6b-0da8f46f6f6f") + ) + (fp_line + (start -3.15 2.05) + (end -3.15 4.2) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f01d1bf1-39e4-42d8-99b9-9db2752d2bee") + ) + (fp_line + (start -3.15 4.2) + (end 3.15 4.2) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2a4e0a95-cbbd-45d8-a468-f421063d6bee") + ) + (fp_line + (start -1.9 -4.2) + (end -1.9 -2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "230491cc-9b48-4304-b4b7-c8f247b7964f") + ) + (fp_line + (start -1.9 -2.05) + (end -3.55 -2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ea51594b-f10f-4f38-aef2-497d2955184e") + ) + (fp_line + (start 1.9 -4.2) + (end -1.9 -4.2) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "84ed477c-0661-44b5-a89e-ef83e159e4c1") + ) + (fp_line + (start 1.9 -2.05) + (end 1.9 -4.2) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8815a5e7-cac1-47f5-9d55-130f7a34fa14") + ) + (fp_line + (start 3.15 2.05) + (end 3.55 2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7c6e19e4-e2cb-4cf6-add7-5a0500d9ee7b") + ) + (fp_line + (start 3.15 4.2) + (end 3.15 2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "73680374-af1f-4a52-8052-b5e3aef954ef") + ) + (fp_line + (start 3.55 -2.05) + (end 1.9 -2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ec1e7277-6b46-487e-b5e5-9db8f03196b9") + ) + (fp_line + (start 3.55 2.05) + (end 3.55 -2.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "49fde26f-6464-4eb7-8666-987b3ede40ea") + ) + (pad "1" smd rect + (at -2.3 3.2) + (size 1.2 1.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 1 "GND") + (pinfunction "ADJ") + (pintype "input") + (uuid "6432c685-833e-4a48-bdfa-c132ee69ccd2") + ) + (pad "2" smd rect + (at 0 3.2) + (size 1.2 1.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 2 "+3.3V") + (pinfunction "OUT") + (pintype "passive") + (uuid "14c1e3dd-2170-4561-8865-febaa5bbd591") + ) + (pad "2B" smd rect + (at 0 -3.2) + (size 3.3 1.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (uuid "8b3b1339-302a-443e-89b0-83a3cce3ea2f") + ) + (pad "3" smd rect + (at 2.2 3.2) + (size 1.2 1.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (net 3 "+5V") + (pinfunction "IN") + (pintype "input") + (uuid "94f08154-0eb1-4591-9e3a-27b839b69ae7") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Package_TO_SOT_SMD.3dshapes/SOT-223.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 -90) + ) + ) + ) + (footprint "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (layer "F.Cu") + (uuid "f827e5a1-61a6-456e-866b-a048267f9faa") + (at 95.8763 77.95 -90) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), Alternate KiCad Library") + (tags "capacitor") + (property "Reference" "C3" + (at -3.535915 0 90) + (layer "F.SilkS") + (uuid "ece51fa6-aca3-4874-92a2-0e889e221992") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 1.68 90) + (layer "F.Fab") + (hide yes) + (uuid "02b9de36-cc9a-4a75-be36-17be5ae84bfb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "50677a4d-f036-4be2-b99e-6d84e7ab5858") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "e85305a2-802c-475e-af1c-a20c14777a75") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/8b2a8a82-737e-4e1c-b010-75e324eaa549") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -1.5 1) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "95c51587-0d75-4131-a848-4e38b0c6b9ce") + ) + (fp_line + (start 1.5 -1) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ea37aac9-c241-4d79-aba5-d55f5f00626e") + ) + (fp_arc + (start -1.5 1) + (mid -1.880894 0) + (end -1.5 -1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f3682ecc-96ca-490c-b8e5-f93d202efd71") + ) + (fp_arc + (start 1.5 -1) + (mid 1.880894 0) + (end 1.5 1) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b25a5b7b-70a5-4a76-a207-8a8407e7756e") + ) + (fp_line + (start -1.7 0.98) + (end -1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f9433121-6b33-49d2-ae55-dd7bf20d16ef") + ) + (fp_line + (start 1.7 0.98) + (end -1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c7db6f2c-9e40-4802-a0d6-9ca0fe5c3baa") + ) + (fp_line + (start -1.7 -0.98) + (end 1.7 -0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f4bb06ce-8987-4ec2-97ba-d8b9ecfffdb8") + ) + (fp_line + (start 1.7 -0.98) + (end 1.7 0.98) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b4f2f068-1398-460c-937a-5e5c0f8a8d09") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "7c4a4bb1-15de-4a14-9e2d-0c0386073f43") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "13eedf05-84d0-49ce-8cd3-7c9ca769640f") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "cf6ec907-1f6b-46ed-9bcf-455911887527") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5522d9de-8aba-4f6d-a10e-21b4584aaa69") + ) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "74e82874-9be7-4a04-8aa5-45135f71e955") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 2 "+3.3V") + (pintype "passive") + (uuid "b0cfcd4c-9352-4a92-ad33-158b895699d3") + ) + (pad "2" smd roundrect + (at 0.95 0 270) + (size 1 1.45) + (layers "F.Cu" "F.Mask" "F.Paste") + (roundrect_rratio 0.25) + (net 1 "GND") + (pintype "passive") + (uuid "08a7c02b-8be3-4eaf-a077-404501656bae") + ) + (embedded_fonts no) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" + (layer "F.Cu") + (uuid "f9d5d4de-750d-4a0b-965b-99135cc3026a") + (at 288.9294 67.8656 -90) + (descr "D, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "D DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (property "Reference" "D73" + (at 0.2344 0.1187 90) + (layer "F.SilkS") + (uuid "2dcdfd40-dd9b-427d-9b7f-d86d3d167dbb") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Value" "1N4148W" + (at -8.2356 0.0387 90) + (layer "F.SilkS") + (hide yes) + (uuid "b22c980a-db1f-4f7a-be07-47f8143929ed") + (effects + (font + (size 1.016 1.016) + (thickness 0.1524) + ) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "77ebaf55-5ef4-4d5d-a95b-d45555986add") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 90) + (layer "F.Fab") + (hide yes) + (uuid "13c0e13e-269a-41c5-a043-fa91e0ee5010") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property ki_fp_filters "TO-???* *_Diode_* *SingleDiode* D_*") + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/4ca68793-fbf6-4f2c-905f-275d87d5ba29") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr through_hole) + (fp_line + (start -2.06 1.06) + (end 2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "55609817-2526-4d11-954d-5eca7dcf330d") + ) + (fp_line + (start 2.06 1.06) + (end 2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "63e8d6d0-c621-4dd4-a854-659950abdaea") + ) + (fp_line + (start -2.83 0) + (end -2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "86811f50-0c04-4e2d-a1ca-acabb9ee3b13") + ) + (fp_line + (start 2.83 0) + (end 2.06 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0031aef1-e0a2-4bb9-a600-3e290b6f6cb3") + ) + (fp_line + (start -2.06 -1.06) + (end -2.06 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "abf446a6-5be9-4b07-ba9f-1e2b1382ddfc") + ) + (fp_line + (start -1.4 -1.06) + (end -1.4 1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "14d9836e-522f-43c0-8c6d-2d5f4ea37b8c") + ) + (fp_line + (start 2.06 -1.06) + (end -2.06 -1.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "806cedb4-b401-443d-bb46-5b9395337f37") + ) + (fp_line + (start -4.86 1.31) + (end 4.89 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "5fd3ca39-aacb-44a6-b8b2-e7dee22bffad") + ) + (fp_line + (start 4.89 1.31) + (end 4.89 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9ca67764-c156-4412-b3a4-271d2a326f43") + ) + (fp_line + (start -4.86 -1.31) + (end -4.86 1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "94a86e69-8388-4174-a3f2-27631f8e0bd0") + ) + (fp_line + (start 4.89 -1.31) + (end -4.86 -1.31) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8d6dce0f-9f47-4cf3-b0e2-5fe81b3bb13c") + ) + (fp_text user "${REFERENCE}" + (at 0.4 0 90) + (layer "F.Fab") + (uuid "76d7622f-0e67-4a56-9851-584bef8e8693") + (effects + (font + (size 0.4 0.4) + (thickness 0.08) + ) + ) + ) + (pad "1" thru_hole rect + (at -3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 53 "/ROW5") + (pinfunction "K") + (pintype "passive") + (uuid "38d6edc7-e0e9-43c2-bfdd-0ea1b341e6d8") + ) + (pad "2" thru_hole oval + (at 3.81 0 270) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 114 "Net-(D73-A)") + (pinfunction "A") + (pintype "passive") + (uuid "32e45c38-4929-4e62-a2e0-b73084e94868") + ) + (embedded_fonts no) + (model "${KISYS3DMOD}/Diodes_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl" + (offset + (xyz -3.937 0 0) + ) + (scale + (xyz 0.3937 0.3937 0.3937) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "012a96cb-f2ae-4516-9f6f-c16a44f84a76") + (at 132.9313 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED34" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "4fb07a93-6987-42a9-8278-acd88be62103") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "2176044f-4039-4e36-9576-335fda209364") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "75832d10-d3c1-4cc7-8451-ee9aa4327fd5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "99b9ca0f-6003-4336-8966-8201ca68c24d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/359adf5b-7a8d-4a0b-9baa-f947b3b10d84") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "60bcd6ee-9335-480a-ae11-325cdf65dac9") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c352662b-bc2e-4c1c-b504-7fab4161fa75") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "facaaa09-1c64-4a67-ac23-3be34f7cc8a8") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b71d88a2-f043-4d3e-8ce7-b43bcfc9a28b") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "06360dbe-7df7-4705-a817-f1514ce5efce") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "eab8f722-db9b-480c-b484-69d2496dd7e4") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d7fb48d9-24cc-4405-80c8-6e93223dd3f4") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "96cdde37-b9f4-40c5-ac3d-f6c241103115") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "6df33264-be2e-45ac-bed4-ff7bba5fd278") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0c210b1b-8f53-4a83-9d7a-2e8395f93bab") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "35611580-633f-41cb-9ee3-4ab5e2fb73d8") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7c492c25-fd3c-4e2e-9812-c574dcbb5964") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c94926b4-ebf1-4ba9-894f-298a978bf4d1") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ccb9268a-9d7a-4b87-81b0-5011bdd1c7a2") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3d358291-15b3-4880-9749-70cf82cefe25") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "28c43ac2-d278-4edd-94c7-7f547c20e2ed") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8e664552-d808-4e51-867a-e1241d38b3ea") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b067e3fb-aec5-40b0-9c95-0f7020921dcf") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ffe397c5-e8fb-45d7-b348-1b55b81262fb") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "131ccf9f-8b08-4aab-81b8-37879f8128b0") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4fe51844-4ac2-4915-b68d-ce6cb2beaa81") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a2481c03-4aad-4dcb-83d8-21b528fd9770") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9a33d361-55bf-42fd-a3ec-f0b72dde6ebd") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ae9973e4-ba01-4a95-aaa2-11468bd56b48") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "dacfde28-7cc7-4e09-a644-7d6f77849dbd") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3152fb8d-e2b1-4ea9-86b4-e3149ec7ebc9") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e10584c5-f55a-4148-821c-94c65c261a32") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bc2aee42-79db-4577-b256-5d4a49cc17f7") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "06a1b122-5c4b-419a-99fa-3b1ac21c4124") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91ee5030-3bc9-4024-a719-4117f5793ab3") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5c72d470-9d87-45bf-bdf9-90e5e73aa178") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bf99b582-f2c7-4a3a-95cc-2483c5f18376") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b5c9109e-b10e-48eb-83e0-7d6e7e50c739") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4654f93d-defd-4893-9d31-f3e91c001268") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d1339e79-a304-42f5-9653-205bbaaafd05") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e8002b14-6531-44e3-b492-c66eec59393a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "23719c71-e06c-40ea-b3e4-6b1eafa0fd07") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2d3db1b2-1e2a-443c-ba44-d7a50054d840") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "b5bdf0b6-3726-428b-89af-8406a48c2e56") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "cebe66ad-a67e-4918-a511-f9e3b71bdea3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "e597be4d-425c-4c3a-8142-7cb82a5b7859") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "032a9fa2-fa30-413f-964d-21fbcae75fc3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "675593f2-7073-4d1c-aeb6-72d389977336") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "57d58c5a-57e0-4e4b-9919-8db803d5c2b4") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 168 "Net-(LED34-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d212ad40-4cd0-4147-b9c2-f1123ed6a204") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 167 "Net-(LED33-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "8c38f545-86f8-4a41-937f-e683f9857bed") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "f89dd2b9-140b-4883-a54e-33e72690acfa") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "0460780a-4b05-4f1b-b478-d501b0453c9b") + (at 80.5175 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "3d6a34f8-f1a9-451e-b625-f22667f14cba") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "dfe613e0-1185-4ac3-9a89-6978c57998f7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "6892a535-38da-4c0a-84c9-4afa37a3b73c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b6b0cbee-fb01-445b-89a2-262d15c5ec1d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/52184e44-813e-453e-a209-b17b8c4ef315") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "faf22d61-ed15-4a61-b143-13d1b7962e43") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3838b941-5e7a-485b-b3ea-8487733d4020") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cab42219-eae9-4b26-ab3b-187ed6136627") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f68e4f92-72b1-4cc5-9a51-a609094b7a4f") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fdad063d-ac22-4077-9302-84f700fce305") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a6f993c8-2cf6-4d75-9dbb-56b074d4045d") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e4f58a6a-a054-4c58-a8b0-d63b79b57d09") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b68facd8-240e-4194-b051-f562204fa9c5") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f97b0dd8-4dea-441c-bdb1-7338eb588779") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "075eed7b-b56a-48c9-9f5b-905ec805421e") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "a08396fb-6fca-4987-b511-6fdd04a6b34e") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "44a376c8-7d1f-495a-a1f8-9e46d70a3f07") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "32c59992-e5f8-42ff-b84a-7cb0ced9f6c6") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1a141de7-4e29-471c-87cc-7c188484fc91") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4e6a159f-64c2-4396-a7c0-1b8818f23261") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d3ed7b03-cf76-44ef-9965-753585161885") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "29dbc2e2-96db-4118-ae3a-258e2122805b") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f9fa7c51-6643-4c34-8e42-5a82b423a379") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e08f77f5-8239-4b53-8401-1ce63e57c834") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f8779ea6-5545-4733-b2c2-bf6eca46e08f") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "27498bf4-ea38-4bb3-a85d-1fd8773bf2f0") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6c784830-37e2-43c3-bd84-266df65ed9db") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "59fcf1e3-345d-489d-85b0-57b8a9d0d534") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "19e10a33-c950-49db-8ee8-1d5d4f5ca7de") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a088479-a1e3-4529-b258-4b196f622a97") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "34059a2e-969c-4a33-86f5-4d9871d01348") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "59064fa9-3167-4d3d-9690-7ae5c21ac1ba") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9678fbbc-9242-4099-b079-6f448bd7a6d0") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "436ae03b-dea9-4889-9447-4f2c380f1c7e") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cd2afc2-17e8-4122-a445-f54ccc1bb4c4") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "167d585e-ad4f-4ca1-ac8f-e29507714c16") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a778771a-19a3-4511-8ab8-a8e323c08aae") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7c1b704a-79ad-4067-bff4-11e64cfad0d0") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3775bf53-fc7a-4b3a-b2da-a2289bf96cfd") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "aff419ab-6efb-442e-811c-0c24b9177777") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6a8cee3e-1bc8-4bcb-a8fd-4ca8c797a394") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b79ff062-73f5-4783-8a23-07b7d5542608") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "217d1232-32bd-4a3b-b259-a3096ad1bf1b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8d64c31e-ea7a-4b19-b49e-9585f08b3302") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "538ec031-dd5d-495d-ab45-7fcffb783684") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "94654265-53e8-47e0-aec4-e6f79d279f5d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4812010f-e8e8-47bd-bc3d-7d15fd7ae6a5") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "1796e7e7-bf85-4acf-8ec4-0de03356b00a") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "e0791312-a65c-485d-a7b4-e5ab45cf26d9") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "2697d26d-2907-4bb6-89f3-1f95945d7468") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "6dccc9ad-6a34-42e1-b5e4-3794a4ae849e") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "ab9bc20d-b7c0-42a8-8987-d1323b073714") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "2f224639-b8df-4811-b0b7-fd1aae4c1a4c") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "8bd6f0c4-85a0-4c25-879a-dbde6ff915a7") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 5 "Net-(D4-A)") + (pinfunction "2") + (pintype "passive") + (uuid "39c74018-3b31-4ce8-8a06-bbfbde1ce4a3") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 5 "Net-(D4-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6d38f3a0-f00c-4ea3-a103-7eaf57a8ac9d") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 5 "Net-(D4-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f58e9900-29f2-4a9a-a566-390a749dacfc") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "06c084b0-90d3-4739-a76f-9c3ede628692") + (at 61.4038 102.2487) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED1" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "9b722c0f-5972-4cfa-9f8a-df81fd13a9f1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "be863fab-5b3e-4a8d-b9c0-1ab57cea616a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "1c85c70e-cf35-42ef-8f29-763ab2854689") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "8b52bdb1-2bce-4690-a63f-ed9e6f8c717e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/e61aecf2-8aef-4a76-b3b4-8a52c719577f") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "816d6bd7-d4d5-4e2d-806e-d461ae92c8b7") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "07eeb441-1c0c-48e4-aadf-b56fc59adc46") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5020b28b-aa13-4991-95c4-e644f344ad67") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c8a2b68a-deb7-4be6-8c96-7faf538bb0e5") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "381c66a4-d62f-4b93-8d56-37e3cc079e5c") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "84ce1147-9734-4dd2-89f3-e8ffaf8eeae4") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "192c42ad-d442-4b5b-a305-eb610e18bdb2") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5bf9e39e-86b1-41ce-8d77-99eb995ff855") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "458f11e0-f811-492b-9381-b153b041ec6e") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "412921f2-7d7e-44a3-a36b-f7cb76dbebc3") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "24420eb4-3ac8-496e-afbf-9244c143da02") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f36a85d1-2e2d-419b-9338-bce7b63e5de6") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "451080a8-2c54-4462-8dc6-e13f8ae18471") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "366a2cf8-9c75-4afb-80de-22a18b75ceda") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3fc107c1-6dd0-49a2-bc37-0622a6a76805") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ba7e220f-c354-43d3-b433-d65b6846c805") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d7b0630e-ec39-4a63-9d15-cb37f4516405") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "16175ffb-c6ef-4398-a0be-0dc8380f06bc") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1a9e7ad4-6f2b-4580-8c4e-3ea07c966d5e") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ea5845f1-fdbf-45e5-a491-37183c15367b") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a4981654-88bf-437e-9b98-9c3d11d0a78d") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ffd2b2af-6cf0-42fb-abc2-e2734231fa4d") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c7d59403-1e10-4f24-89f1-5e97c90d6ede") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "42f0381f-3bb0-4141-af6f-a87fc1b605b3") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3b0e2cc6-4e55-4879-9068-9b673673fbec") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8167820d-d730-4c38-ba36-64c2c72ef1b7") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3b20ef17-53d1-4ea6-8b71-1cb54c4349a6") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fd38af0c-8cc8-4974-a438-02b93c713dd1") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "412a0258-eba3-406c-af24-c637bb1b6a79") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "934a6984-2f44-4aac-bb34-2ebba3039152") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "83d32b3d-d1fb-4480-85d2-3dee7ca034bd") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f7555fa9-7cdc-4796-abff-e78108be3edd") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1af785be-fffd-4a69-87e7-8606ddc301bb") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4ce54f39-ed27-40d9-b157-52870fa0094e") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "db6ffbb5-c9bd-4a6b-b8c4-8ced70b74354") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "31a4c553-8be6-45f6-a92e-fe65f9af2ce0") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e0e66b7b-35c9-4db4-9601-95f5cf26563f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "be0c7b68-606b-4b5b-8184-3ab418104736") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "025c4633-a5b7-499c-b564-a808ce57d4e2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "3e6278fb-a383-43f1-834a-58ce99463581") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3348394b-0bca-4e61-b3e6-cf7b4c7b2f21") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "528fd7c9-bc29-4a47-9199-2f178b4f9acd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "d8777fd0-ac9f-46b5-817d-8124bf225c19") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "65ef4d37-3595-47ee-abee-9419c33bb138") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 41 "Net-(LED1-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "5e30de82-71f7-42d2-b77b-bcbe51fb46f2") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 42 "/RGB_DATAIN") + (pinfunction "DIN") + (pintype "input") + (uuid "fb5c9864-0156-436c-8a6c-336244ab1c1d") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "7afb550d-0fa9-4da3-8b53-62a01cb4c72f") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "07d97887-3d68-41b5-baa7-0223135ce058") + (at 261.545 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_P1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "4431f6b1-b4a4-43c9-a148-3aca3466b11f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "6e3f4004-61e2-446d-9423-baeceede0ace") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3fb1285a-f497-46d9-876f-e95063b8028f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "64d54551-35ba-4804-a1a3-159fcfa18294") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/e5fdb085-e86d-492f-8638-d60bb9f57b69") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "879c8dfe-a069-4baf-b57e-ad2af28fe822") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "aa4815e2-0cd6-4ec8-bc84-4909e18159a1") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1e83fe85-8a3c-4d42-9b85-c617e6da1b14") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "61b2b95a-55ec-499b-baa8-6634c5af7a9b") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1843a930-d62c-4c82-8415-08a8bdf61b80") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8f2c0c82-ab2d-43f5-bb4a-d9ee15dd6791") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5a5dc13e-772c-4b08-ba09-dbd37a8ea9fe") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "58d22f1e-44bb-46ad-b8a3-ab62a373ada9") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "eccd71d9-3f58-4458-8921-0ef4ac6eae4d") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d9db42fc-afd0-4371-b59d-865bff67e550") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "667e4c62-9d5c-4658-82be-0245a4e4d63e") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f7141c42-03ae-4e3b-a5ec-71ef14ed8170") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cb4a6dca-944a-4641-a73e-cf0f09932a62") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d7f37dbe-ff72-4a5f-a872-32ad27cd60ea") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fecf2592-a337-4ce7-ab54-22f1d00a79ef") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8e4743c8-dbd6-4ad5-a62b-f44b47cdda8a") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d270cceb-d3a4-4c41-bb11-619fb7f78cc6") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "94d6adf3-59bc-4f7e-b3f4-f5dbae6d4a1b") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9bbede15-bb0c-456a-891a-878d852e44e9") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b6587e74-eb46-4c79-8d14-0626f90079c7") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "54a11739-9f84-4ce8-846a-dbfa9c107779") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7b2885cd-bf78-454b-a8ea-f2254aa151a9") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "68d449e3-6848-4a54-a40a-6995b87f3e56") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f1f2fbb3-5452-4e21-b75d-7115bac1ee9e") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7679a027-755f-4e83-900b-3100b1ff2607") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "39b6640d-cbc0-49ff-b4b2-064db187e54f") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4c993739-a2f2-43f3-b8ba-e3b965973690") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2b6f8133-615b-4249-958f-814419ec654f") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4b55c8f5-3d0a-4e0e-8e12-3e313a34160a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "23f1731a-0a5b-4f41-b431-f4c25e519f0d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3df84100-6f1d-4564-881f-07d91f40ed6d") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a00ebaa-7fc0-456d-ba7f-2a70021c89f9") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f98100b-9a01-4764-b2a6-58d64ae3badb") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3a230cd5-415e-410c-930e-451c4e7c40ae") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "8fe36a8f-fb6a-4b01-b585-8c6c03386fe2") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2e269ffb-75f3-4cc6-bac5-48d706fde0d6") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c469a4f0-82cc-43af-9f76-e886bdbabbdb") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1649ea1c-de63-457c-a9f0-37aaa017a8a9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3432cd6b-dffe-4fcc-ad08-33317aeda54d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cc8d42bc-343e-4c91-a286-db1b5c892191") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "84400d64-9ea9-42f5-aea9-8f242636f213") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f084f83d-25d7-4d99-9736-57b8a85f106c") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "a10b2a58-3823-4693-ae37-18251461c512") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "49bdc17d-f1bf-4a9f-93fe-400802000ac9") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "3d036b75-5464-401e-b231-edc2f1e44397") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "315f93ae-bde8-4a75-abdb-a1f18aa77e2f") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "c88d76a8-e199-400f-92bd-9f2d12c9fa1c") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "85c78b05-4f5e-4013-b7d1-508bde0269fd") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "3952febd-5c40-4dd9-b299-d8eff7f6758e") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 27 "Net-(D31-A)") + (pinfunction "2") + (pintype "passive") + (uuid "c47981e6-a313-4d48-bc86-75f4f5190dba") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 27 "Net-(D31-A)") + (pinfunction "2") + (pintype "passive") + (uuid "8c4b44b6-49e7-4ea2-b83e-b6a2e3d8d459") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 27 "Net-(D31-A)") + (pinfunction "2") + (pintype "passive") + (uuid "15764f00-523a-4a4f-af42-4c9b786dbe9f") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "0c362101-dcfc-44c6-a3e4-f7482483be43") + (at 347.27 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_HOME1" + (at -6.77 1.6612 0) + (layer "B.SilkS") + (uuid "b894c4c2-cc7b-4b5b-81c5-6f62e94f4169") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "442bd11e-4d20-4f02-84ca-2890b5791b9d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "aae68e0c-83b9-4738-9a87-0f13d7895e83") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "68fe1ff8-8d42-4492-af88-e7014c27f4f0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/63bbd4f2-b72e-4169-844f-dc300c927600") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "91f32267-398d-41dd-829f-72c0595777b1") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4d5e9971-390d-4e67-adcb-69d0356b3060") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0998b9eb-b36d-4581-b626-d6c89a6eed19") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b8781749-d2b0-4bf7-b21e-926038a1c20e") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0c0f4f37-e202-407e-995b-e3fa0448b485") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c38d49c7-8e35-4227-9bfc-bf9d751a82ef") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d2f0bfb8-9fcb-410a-872d-1609b875193e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5c19281d-9bcf-4877-9fa0-5f4b11ed2bed") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4cbcd8dc-fb7c-46c8-909e-53178ee1b006") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6b5cb14b-84ff-430c-97b0-a518b844c4a8") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "760819b9-6625-42f1-9fbb-b7faba920d94") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ab8e95d9-8451-4721-88ee-d817d4faa91e") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "65699e1a-473e-48a6-9020-290cd8ee076d") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1ff18868-7a04-4251-a1fd-9a31184d075c") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "684f35f8-f9e6-4654-b6c4-b6a2f1c5db80") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "98f80399-e81e-4d47-9567-ffc85cf5ecfd") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "88332f91-5e45-41d6-b317-c3895fe0fa5c") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0d25102b-e259-4332-abc8-6e67ba51718c") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0983fa19-5c36-4be4-84b8-71a49871ed43") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f35a2643-310f-4a7f-b403-90a13256c185") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "80daa3e0-ceac-497f-8797-abfd5c7178ca") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8f13464e-5d28-4ed0-b4d4-d8d24d56a315") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "db360ecf-a47b-480f-9ddc-d612731d1f58") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d848a1c4-b49d-4bd6-8b7f-5f4eb2a39f22") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d5326535-cb2a-4539-8ed9-ee9572ba15d0") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "155bee3b-88c3-46ca-963d-43cce6982eaf") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a5b11cd0-239b-4903-8965-65a6d7cb4b7d") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2e54d39f-a9bd-4576-a160-19c8af871225") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d79b1fcd-2f6e-4331-b141-2a54741faaec") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3423dd7a-8796-4301-b163-8e84e2ba5122") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b901e76d-efb9-42ba-9c7b-a85f1fa4c8be") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b22094ee-bf14-4709-933d-1d4cf8798364") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4841141d-1add-4833-9947-2b732ca8b082") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8a79e93e-2325-4282-85d5-7ca696dba839") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "9b330fc6-b9a8-4ab7-9f84-73618a77ece1") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e752321d-4ae5-43ff-b30a-0c04da209be7") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "08050131-c24a-4aa4-a957-9353eca3dea7") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "103651b7-ba5a-43c1-a163-178728b0cb1d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c092f3cd-8e9b-4ab3-9c3f-a2787892f357") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "de49d10c-1088-46e8-b9b7-d811cbd4b2a6") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cb5f8728-266c-41f4-844a-7985ad15ca44") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7b16d5fd-44af-44c3-9053-75aa722d43c2") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "1c42c371-c91c-4069-b013-d15e90ffa52a") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f3ee5a69-61b5-479c-b1f0-26dd0d6fe508") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "7fb49593-9da7-46fc-934c-56d1b23889f2") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "48d2b74b-8fde-4b3b-a64a-8f49f1105149") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "14818922-9274-444c-8a7c-7b279cbd86ab") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "07e00950-cee2-4140-bfca-ec085a69179e") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "b09426ae-fab8-4be9-be0d-72baa8d330d6") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 18 "Net-(D17-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9681fe3d-791c-482f-a0c7-5bf2db7d937b") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 18 "Net-(D17-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bf1a8714-10b1-446a-a129-972c392b3e95") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 18 "Net-(D17-A)") + (pinfunction "2") + (pintype "passive") + (uuid "33b230c3-af16-4c90-8d5a-eb36798c762a") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "0d48a29e-55ee-4fa1-bb47-fe74f4954f52") + (at 118.6838 102.3687) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED4" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "41a416cc-bff7-4ef1-bab7-85ffa01e301e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "b232cf25-ef43-4ba1-992a-c3e31079bcf1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d764b9ff-1db3-4efe-8f3a-d7548e3cd39b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "86d30886-3176-428e-8d7f-73652eabd983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/36effd9e-0ae7-4e66-b47b-ead1e8f8c8a2") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "4103f485-8495-4799-914c-13b0ca2be61b") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5cecf1f8-e336-4c88-8af1-c76abd989682") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "339a2a87-6ef4-4aa8-9634-5bf062500b70") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e43bcd7e-2811-40b9-89fc-aa246acc3e1b") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4f188a8a-2d59-4bb7-b7fa-83fb8c743a10") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "6e405558-c768-441f-be14-cc3916b33316") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4d7e1747-af00-46f4-b913-0a3897640ded") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "75fed58e-2a5d-401c-b835-da114d7a99ca") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5d01e0f1-0216-456d-8616-12f460d2f811") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "3f48f5cc-07c5-4381-b211-e8a5de647d00") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "427aafe2-9529-4a8f-903a-0ff16dc495e5") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a594a6ff-065b-4db9-8f97-a54779a1d306") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f16118ce-8c22-4375-81a9-a5cf9371d8ec") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d3568989-bc37-43e1-9e4a-36279ae8349c") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a7fddd1e-5318-4731-a81d-e74853cab46d") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d7aba207-c56b-400b-9540-abef6abdd542") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "015bf2b2-571f-455e-b828-37b0c9359139") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ea128979-81c3-4754-8d1a-7e24d6995d83") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8f53613f-fe0e-4aa8-8e9b-354b1cc935c2") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "575c3492-bf11-40ab-8226-60f9dd25c18d") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "446bb2b7-50c7-484d-88e0-e66f9094398d") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0417b936-26ae-4b3f-b391-ca768b738fa8") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "730ef62a-08ce-4b84-9641-6bb5ca085ad1") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2ee96c3a-b54f-4517-89b1-bc3894ad394a") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "db15a18c-622a-4741-b65f-a659cd1ce175") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c0a66b70-8a9f-4d50-bf98-5ce709a63dde") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "46c3d39d-0378-4953-84a8-b7c414c06503") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cb5a6c66-37e1-40de-b292-9d4201760acc") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3527e50a-64be-4475-acb4-6ffd0e93d990") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cd3fb374-fea2-4bca-a5c9-4b38d8738656") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f97f64e8-a467-4fe9-85df-fb05f2a12925") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "818e75e1-bdeb-44b4-87e8-36731f92834c") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "524d3983-b958-4a8e-99d5-840dd3a91cd1") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7bdd6bf9-b009-453a-920c-314c154445df") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "727bcc42-fad9-40b8-91bf-2e2f689fd32c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8d81a8b9-99dc-478e-8188-c9747ce2abe1") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5acc3532-f6d7-419c-bb6b-668015bf0814") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4e377ac9-c078-4fcf-b072-4ee3344b3909") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "7f7cd3e2-9ba4-40be-b3b6-3ffbdf6fd1c1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "db25ed86-8eda-4e9a-8ff0-59660a8cba14") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "6b4ca7ab-bcda-4c4e-a39f-871969bdd982") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "93165422-f962-4cec-864c-3de9e23f7d36") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "7a3e8486-affc-48fc-b350-1b12e59f4e65") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "1b4259dd-3173-4099-8baf-17a2a3c90b3c") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 138 "Net-(LED4-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "cb0c8797-9b01-4c71-a5dc-54c626321e65") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 137 "Net-(LED3-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "87920251-6692-4d0c-b8d9-760becfb09f0") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "556b65a5-e88a-4adb-917c-6f9162eccb3c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "0d5996d3-c527-4ced-ba83-23b93bf5898a") + (at 275.8325 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_/1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "ea7ddb7b-3d58-45dd-98d1-a065ce1642f0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "d80ed101-5be8-46d9-94fa-a0c36d9bb283") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "ca7a6649-ed3b-467e-92f1-bbb885d59d5b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "5a3c7313-9fb1-4c65-9986-efc392fdbf97") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/db5cf6ba-b7e8-4b15-9d62-c33f33010389") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4c07f0f2-e009-4cef-85d0-6d40bfeda460") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9bc3e74f-2135-442e-8f71-6fbdbd0bcafc") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a56cb59b-201f-4946-9d7b-f46198f56e17") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "12439a8b-c2bd-4ec1-97aa-014f7c43467a") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3112233d-21c5-46e5-ac9f-e365bff06ce0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d223772f-1327-414f-b31f-f482b6db1387") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e1455c56-48f0-4658-840a-0a4920e80b6c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e39973f8-8e42-49f2-80aa-8413fd32ac03") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cfe4c09a-e179-4d23-9e6c-8da178264762") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "42b2d005-d186-4fa0-86a2-64bb095b0279") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "5fa256b3-ac2a-4139-9e1e-0c6c174ef7b4") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fc79891a-9146-4d39-ac2a-e90148526f7c") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8c379907-4ef8-494e-bd46-57762621a906") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fe5577ea-6d86-4290-8426-a8a134a680a5") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2fddd316-49a7-4c3b-b9a2-029c5f701e92") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1f1ad0d9-dcf5-4c8a-99de-60699f5dbe54") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cda97c8f-789d-483c-8fc7-a5e4ad5e621d") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "29882fad-6a19-4671-8c32-e0f084db2591") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "239d4909-d416-4c0b-8ce2-7674e9da2e41") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d0fd4bcc-0ade-4e10-8cd9-e4c036668d20") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "daf269ec-a992-43cf-94d7-b42cc53d674d") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c6c81507-7dcd-475c-8154-c440ec81dbc9") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb55e549-c294-4d70-95ae-7b216769bb8a") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3c1ebe3e-f7e0-460b-b809-5c94748567c9") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "23669f77-7d21-4665-968e-ddb0d6c3ab47") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6009f11a-c391-4a28-897f-07f8d89cf9d0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "76c85f4b-ec50-457c-a245-8a630350be09") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a6e60a46-e0b7-4934-ab10-3803edde0b58") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "22e6642c-4730-4de8-94bb-d94fed552e74") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e530d3f3-3722-4e9e-a095-5f206a6d3f22") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dc558283-fa1b-4e6e-8463-170280553b7b") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "85744547-0977-43c3-b2ce-793e79fb2b68") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "49b5c9e9-3364-47f7-b1a9-08b59ddd19e0") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4c5c83f8-d14d-4363-afdb-418e18242c1a") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "353153af-400f-4ccf-b4cc-91627a96c902") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8571e03e-8274-4516-8647-c3c00c2603fa") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "74898c5b-2fc7-4085-9ce0-d1aeb8f1b8cf") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f2d4f08f-c346-488d-98d8-b0de00eedba3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1831dcc6-b42c-441f-b697-66dc775cd33a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ad6e3b27-6a95-448d-8d9d-ec9226119569") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ab5a4bc2-a3cd-4258-bbe7-ac34881780be") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ecec1a80-02e1-4a5b-b3a7-a959742db099") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "e0e73772-3d00-4ae1-930f-9d2c65fbbbdb") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "1568bc11-1f3d-4a8b-8e8d-17b4404ac013") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "e86b81fd-f4ab-4b63-a51f-e53f61a51ef0") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "08b65c79-f898-4e75-81e3-384c1228dc47") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "a9353eff-b69d-46a9-9609-a7529ebdd4f4") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "d23acb3d-167a-4b00-9c78-32a33335eaf6") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "a988c5fc-1371-462e-ab70-d470d2a09261") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 98 "Net-(D59-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f1e28f46-1a28-41e7-8309-6e4efc9cf1c9") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 98 "Net-(D59-A)") + (pinfunction "2") + (pintype "passive") + (uuid "65e90f0d-fc80-4017-b767-2c76180c0a4b") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 98 "Net-(D59-A)") + (pinfunction "2") + (pintype "passive") + (uuid "b1647e85-aa62-48a8-ab14-7dbb44407885") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "0eff4af6-0757-4055-bff5-da8ae5bae1dc") + (at 251.9675 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_0" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "effbb709-795b-4816-a889-457d6e4bdc7f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "64f6dc93-6432-47f7-8281-b659d188ebe9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "5c953236-4583-4741-a724-d95333eea7ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "e08f6981-e5ec-4b86-b7f5-8cc0b13143e3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1acd68f4-0c4e-42ad-b96b-3e6e99a4c157") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cb728d38-72b4-4895-8b3b-e6dfe975c2af") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "15d664df-3a43-4eac-a6ff-d6db0a5a7e1f") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "16103028-041a-4c7e-8c8d-129811bd9d15") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b3a48704-1d1f-4c0a-9486-14f167309a7e") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2ffa6740-c034-49e2-9160-dda5029445c9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2d0cb642-a24d-4a3f-bf8f-517411c3aa93") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2f54c9c3-1c47-4afc-9963-3d019af32f9b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fa5421ea-d007-4ea5-9b92-4db3af42f969") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a2e6a4aa-4e1c-40d6-8142-6ae309328376") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f9e16bec-904c-4f63-856e-6955c94c0120") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "5a6b4b3f-d98b-495a-bede-658f9c09583f") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c4e6e496-3f32-4b5d-a61c-73e8e9fb5d9e") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "94ad2369-2c14-4bbf-b1d4-f3393e740571") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8553dc4c-0b83-459e-889c-4c002a38c620") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b498fef6-3525-4c66-adf3-3bb128089a91") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "881b872d-a172-4727-b406-91a1acbbf8a2") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7cc2a303-f3e6-435d-8610-8bdde0f7764b") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5b8cb624-7570-4f82-b366-c60ca15fcafb") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e90370a9-e32b-4c5b-ac88-aee79a6014fd") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ba14c30b-3df4-4dd7-8f5b-768cd49b8da4") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "04257eea-4f97-4461-9c6d-8ee2764f7dad") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8b245e5b-386b-43a2-9c4c-cb79cf1181b8") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "be43d68e-ffa3-4648-a7e8-f83590d9e37f") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "09cebc64-3b92-4224-9d51-f90067aef15d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "584ee649-4a77-473b-9561-43fd69c084f2") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "16d95db0-ea41-49ea-96ee-38a6b9b57c0d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f244a55-1c49-48dd-b447-7d61ce680b45") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bc21f525-db42-4561-a8cc-365c5b059f93") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3e52bc9a-69fa-4850-a637-1e29b955b308") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8b638169-f0a6-49cf-90b5-d9e3bc85b93f") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "40110a8e-6f01-4660-9748-3042ec21e55c") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "805416e4-2dbf-4434-a209-70165ff7ccf1") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b687d723-9122-4786-b277-7fa3126f3c40") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a295532b-d1e1-4bb1-a3c3-ff52a22fc986") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "33f5db2e-6b73-4e7b-8faf-34eeb2513e8f") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "da6b4484-1d1c-405d-9208-924728a9b44f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ef44de30-99d5-4c11-a9d4-daf471b9d14a") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e4c5c1a5-fa20-46d4-859b-1203f145331b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "fb98dec2-3e11-4b12-a5a9-719e1625bb65") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "bfc6e521-56a2-4586-b42d-a1ba154dcec1") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e8123322-0554-4c2f-a8fd-dd830fba09bd") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4a336b2e-6bce-48b0-9f75-91da66992aa3") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "2872c3d3-c50e-45a0-8733-6b6b8e43ea6d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "c904843d-250c-4b31-8a76-b150ebdec497") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "0295d4a1-e275-4037-ac4a-c43f9e5f70d1") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ae122383-6912-402b-9de9-caa7de1c31ca") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "0b28ab7d-2806-461d-969b-88b60b868a57") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "08540a55-5f93-4883-a685-ad576459fc4f") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "9fe4e92a-7095-4f22-91b6-35952a5a4700") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 14 "Net-(D13-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9cae159f-53d7-43a9-ad1e-b319cdbc6c94") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 14 "Net-(D13-A)") + (pinfunction "2") + (pintype "passive") + (uuid "04b90129-a270-4482-8447-d63ff2b21efd") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 14 "Net-(D13-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9329058d-ae5b-473b-8435-96e1a63431e4") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "0f0a302b-9e61-4803-b2bb-f2fcbddc5f00") + (at 218.6825 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_M1" + (at -4.5675 1.6212 0) + (layer "B.SilkS") + (uuid "b307628f-cb6c-4dae-a17d-839a9c8e7994") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "0efbd615-d608-4049-8bd0-8a4cea60acc8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "fe47aa3b-4960-467a-bbac-dd9e67725052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "a27c6d43-1b5f-4ee9-ba3e-4aa2f8f1823a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b20ff87f-cc7c-47cb-a7a4-4c4c1ae0d374") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a54d8611-9987-42a3-8ccd-e13f6907b661") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4b4aae94-ab15-4fa3-8d0e-14a0a6a53a30") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dc3bce80-226f-4c03-938a-157992856ae0") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a33e0a6f-d700-47e3-bd64-da874037602c") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "83dbe12d-2248-476e-89b5-63e581f9c283") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "36682d41-849e-4c3e-a018-453d79b622b8") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "04cba13d-0897-43f1-933b-b438ccbe671d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "daf23b57-87fc-40b1-9515-85c6b00a615c") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8988cb46-0b9d-4adf-a01a-4e3a112e1207") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a40f9b4f-746f-45de-8906-81720033bfe0") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "e9d16bf0-a1ea-4cb3-8bed-434df6e8190c") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f6606ac8-5e45-43df-8b09-4e4cc2cc82d8") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "266aba03-6283-4a4e-8b14-5d22412fd217") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9c9a7958-dac0-446b-bc25-ac3dbc10fe98") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "12820e4c-bd74-48b7-9bcc-c8c9abd6743b") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "df682953-14cb-49ae-8a23-510f53ad40c6") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "83dfc598-6f66-479f-b07e-9727a900f896") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e9556306-8466-449e-96f7-a27353df1901") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8bf8c3bd-422e-4c7d-8252-06957d1cec63") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "92d533c1-cc71-4ba7-98c8-eea714f3d0a2") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6dda9a98-9b65-4d1c-b16e-182a208d94b7") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f5a7eeb3-818f-4bcf-bb4b-98f2d4443ef1") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6e95cc56-59b4-4804-9bfc-9d7f2fde3803") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bc963209-ac58-4d23-84d1-8bdb86aad429") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cec57a4b-2893-46b5-8a77-c73b6afee4bd") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "605b1c96-e506-4489-b4fc-a936e589b245") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "125a7abe-1f88-4153-97fa-bf02195b31f3") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ed89bfaa-1568-48ce-bb00-e58262b06f77") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a7ca0580-f5d0-41d1-b1ab-b2d788492783") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f18b6c69-7bde-4c01-ab1e-75e831233a01") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4f7fcf53-cdc7-4785-a1ac-64fa344dd43a") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a01dd879-ee74-425c-b11e-cd7cff5d1501") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "896cebc8-13bf-412c-9f92-2928d3e3217b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d96b7822-4536-46fb-bfca-b6da8709c7fd") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "799dcaeb-f8fc-45bb-b0e0-8d5240858ed3") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3826bdb0-d9f6-4efa-b597-6d5c78b21f68") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3b26a6ef-2191-4fa9-8a16-7d0b0fb625f2") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e9af9f03-ba4b-44e3-84be-559bdd01d634") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2b559256-c53d-4445-a768-9fb69c2cc6d2") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8bb5989f-8649-490b-bb7d-125a25a5f94e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a664b11f-9504-4f79-bfdc-3366d35cd634") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9e975873-b726-45e7-bdd5-0cc34d99430b") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "42102477-da3e-455f-9664-57f33b359189") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "1722aab3-6405-4acf-b859-c941bfca77fb") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "c574cc4d-b1d9-4392-bddf-36b7ad16e40d") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "1532cd58-f1f9-44c2-a174-4bdb5661f4fc") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "29db55e5-a9ff-4d64-9b61-0eaa837236c1") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "4cbedad2-3b36-4dd9-8dc0-727d1d60b9bd") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "61020064-99dd-4835-a1c3-45ea0051ac47") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 77 "Net-(D56-A)") + (pinfunction "2") + (pintype "passive") + (uuid "abea43b5-e720-4c0e-9e69-ee4d1993d21d") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 77 "Net-(D56-A)") + (pinfunction "2") + (pintype "passive") + (uuid "dc69401b-adbe-4dc4-bb1f-c7680d09a113") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 77 "Net-(D56-A)") + (pinfunction "2") + (pintype "passive") + (uuid "db5a15a4-26ea-404a-baa1-ba356a4bf382") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "1389fbff-1b79-4d5b-b0cd-a3ac900b464d") + (at 256.7564 159.3892) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED54" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "b94d485c-33e4-41bd-bf25-f2ee5dc93c54") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "d72224a1-f056-4c2a-9831-05ecb53540be") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "eb5fd7d9-64ef-4a39-9419-b35793093219") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "50e3aeb5-8bfc-4d59-840c-ec98797a1ab3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/2e71b575-efc7-46a4-ae6a-f048788e83d5") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "8e2801e4-e3a6-4bf2-b894-4a22976d8e70") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f7942161-529b-4838-adc7-29e0c68646f6") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "73c7065a-1e4e-4213-8686-d9f7cad7efb9") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "33ed80a3-e8f3-4bd3-910c-40f3fcfec116") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9c23175a-37e9-4800-aa4a-2634372f34b6") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "58c34bbf-0d6b-4baa-a0ba-c0215736bc27") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7a3be406-4764-4bec-b226-452d1d053871") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c2e538cf-18f7-49ae-831d-50a328a2e1e6") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "60a480d6-518f-4777-9b2a-140e830cc5da") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5eb3baee-79b5-4604-8e77-40819712f4b7") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a1c30f98-f4b1-4ddf-aecd-349bc5a36ac4") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e7cb149e-bcda-4a13-9242-85eb143f33c3") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "222c28e9-f2f7-44e7-8793-b1fe65816e27") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f4ffbfbb-dbb4-41ac-ba17-3fb800facaf9") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "64171520-c8cd-4c80-8b97-7ac5e8fd618a") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bbb21b39-1f08-47a7-8c14-955e6f84ad70") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a89d4ad8-64b9-43a9-944c-181eb58fca88") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7f048df6-c531-4ece-bb1c-6ce7daaf289f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b2191c14-0a69-4368-8566-bc261daa269c") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6234b983-91cd-4670-995b-244bfc0a2c4a") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "defe7d53-4e06-413d-ad34-39379270ef68") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3b9d6ce3-1e4b-4c51-bec8-260410b1a633") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "647376fa-ddca-44ab-8e4d-17c2ffb18747") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a8c35456-33f4-41d6-902f-c7c71a205d8c") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7e302f3c-6f20-4a38-919c-bf13e740bbeb") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8bc61463-ac66-4c9f-bfeb-34a9bc212cba") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b440e051-bf33-4ac2-99f4-d420d4417c46") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2ddbf5c2-dd02-4ab6-a4eb-4f162d37f40f") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b3f7ff31-c885-444f-8faf-8139f96d3501") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b8cf48cb-a375-47fb-9f95-73aa98cc4cc7") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "63a7831f-8117-4fb3-a672-f94551a909b5") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eac7cc70-135e-4a7a-9c06-33f1cc2eba22") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b93b29ed-6f95-49ae-a5b7-c1616c99f770") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "68aade63-7284-4ce7-8add-72dae40d305e") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "dbdca673-e549-4a73-877c-4acfdbe71790") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cd3ced55-e716-4a4f-a59f-49b41b919271") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8d877367-e0ca-4430-8535-8bb0c2a61a0d") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9a51c225-8252-428f-a650-8f59cfc8fa52") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0666a820-aea9-43c7-97d2-4aceee4c86ab") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "cda0fb36-43e2-4a52-9076-80fa77921b25") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "02152307-c9f2-44c7-aa95-e260b74e4151") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "7e9a735e-097c-45f8-b9ca-8aa554959fef") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "dca4feea-1295-4260-94ad-f171b3772699") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "984f15c8-7a58-447c-a834-f0fc9821fa4a") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 188 "Net-(LED54-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "53dd4b44-1d3b-45ea-bc63-9b04ea1bd0e1") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 187 "Net-(LED53-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "e070c418-54fa-4248-a64e-f8218d03cbca") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "c3187693-d436-4996-9547-3dc81f7e9896") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "14e1ea2c-3aa2-430a-b5f6-807d40ac5552") + (at 161.5325 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_V1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "242abefc-2b21-4bef-8fd7-2ab163839961") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "05b258c6-9102-44ae-bfcb-e373edc0e4dc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "cd207db0-7275-4d96-be64-c6c7dfbdc906") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "521b9c34-4536-430c-b9a7-6911dca3cb9e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3a3cd4c8-3543-415b-a012-44b07239b42f") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "00b4de5c-d66b-4de2-b62a-2f70f40665a5") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "74f00779-d044-4d27-8ec2-093159fd58c3") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d5fcbfb6-07a5-427f-a072-f84d44995d13") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2a1d3a9d-5dc3-4d4d-bd04-d87d3c3df76b") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2920aa03-d154-4fac-800a-f2ddafe76abf") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a613e7df-7a25-42e3-89e1-210c9223e412") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c91342ad-7d04-424a-9f1a-dc8b7bb759d9") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "558f94f5-2f5e-4768-af72-ee979e7c91cc") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a5a2bde4-33c1-4598-86de-69c5cc915515") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4fff8b25-81ad-4bfd-b9bf-94ab7f7647d1") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "92a777f2-7ee8-4d92-b0d0-4c2458bb5638") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a76e7330-e406-4ce7-aa1a-f21a35b2a62a") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c057c8f9-11bf-4ef5-89e7-94edd16f4a9b") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ddb0f57a-2945-434a-bdbc-a6cef9484162") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5dce6ffe-bcbf-4f02-8be1-ff14cd8bfa31") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d4d7aa8e-a55f-4425-b2be-7c7721542348") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ce16e87e-de27-4008-89f0-755e23ffc0c9") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "234fc844-c6e4-45ed-b2ad-c929c5b110f7") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ca117f71-d230-433b-b122-acb4c10d1d82") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6a96fd13-6cf3-49a9-b67f-2b84285e0f08") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2059bb1e-3a46-44ee-a377-77176d5541cc") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e810ad0e-c1de-4a0c-905f-2d83d191da72") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f2d84542-2972-4ef7-9022-a31d7e87a873") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3ac5b256-6dc2-4c38-a8f9-ece37f01cea2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2df99d58-3245-493f-854e-0a7eb39d51eb") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "910ef196-91d5-45c6-b65a-6ce718cb04d3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b9565352-a2c0-4003-af0a-3f36ac1d1f37") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d5bb1875-80ee-427e-8e45-fc8cff575356") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d604ef55-a988-434c-80bb-529f24be0ae6") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "135a7840-1443-490a-b505-6801bf3be402") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8d1924e2-6170-4504-872c-0c9969d5e80d") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4f67364c-ef8c-4b20-90fc-d431c2cede14") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a554e2c7-ed4e-490f-a6c4-9049804b8695") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d01d8e0f-bdb6-4d07-9c48-6e346a17652c") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "76ea15d6-a9b2-49ba-a12b-aaf09310ed4c") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "88ceb841-60a7-4da8-aa41-4a0858ea6710") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "95f68c31-95b6-4493-92d1-96c9517940d1") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6d6bdf0e-8014-4cee-9506-00641dbd9eae") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "450be147-b7c4-4057-b902-17b69e8b8654") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0ef73b89-14e3-436e-b712-aafbe0a8f61c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "137d211c-ca9f-41a2-b643-32be558ba126") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2910ec80-3bba-43f9-bd3f-ecc0de86d3f6") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "b447cae7-37f3-4414-816d-c215b1bbc7fe") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "dd1f46a7-eb6d-4dc1-973e-3be31ef584a7") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "21baac9b-9737-4f39-964b-c8c84256266d") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9700ad5e-dab9-458a-811f-d697ffc8d378") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "bbf6b4e8-917e-4a51-996b-6fb2f7ad5ceb") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "65be24f7-b2e2-45c9-a389-fdf76deaea9e") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "678dcbf1-2920-4346-8263-3cd7d4c054ad") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 74 "Net-(D53-A)") + (pinfunction "2") + (pintype "passive") + (uuid "67ed79da-037c-4e11-81fb-24abfc04a591") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 74 "Net-(D53-A)") + (pinfunction "2") + (pintype "passive") + (uuid "1997eb3b-8886-4cb5-91da-6c16bd4d0803") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 74 "Net-(D53-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9d32334d-445a-4e94-8e41-7ac90e564ea7") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "15e32321-216e-4bab-b2df-d1fd509f589e") + (at 328.194 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED67" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "49123a53-9761-44eb-85da-1feb437fabe6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "0f8d25dc-b868-4390-ab6c-e61224d1773a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "a31f9745-75c7-48ce-b80d-51e2fcf41ba1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "af0a25d1-b46c-495a-84fd-3298400e0196") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/71c027fb-4ebd-421b-89d7-7870303aef5f") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "7588bde8-90cf-416a-a423-64ec057d3d10") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9aebe898-353b-4dcf-bffa-612fda702457") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "0be7c13a-62cd-4eef-a06c-30bc31763c13") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "42e817bb-ce80-47fe-a39c-f605886fa904") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "88b5dfa6-e6c0-4516-9432-fe95b2312211") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b1a42509-e533-4468-9b7c-bfdab0cfea2e") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f588a5c5-aa39-4496-bf50-8bf0f0de2a2b") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f65b76c2-2074-4bac-86d3-2c758d4605a5") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "48c7fd2f-11b5-4ab0-a361-e148985ab694") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "486971fa-494e-4f5c-9080-ffc70c63b337") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7a646302-3cd9-4da4-9c57-da392fe72931") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9f9e6390-9844-4a85-a6ea-99ca4a0f38ae") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c3fbb486-16f6-4055-94f4-ed7de95224a5") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f213c5e1-cc17-46b9-985d-a640a02a9e2b") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e13f5e16-19b3-4648-ad0e-6a3d911878cb") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3e5ca5cd-e17c-44f5-b330-8c9525083e71") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "88d24dce-153d-488f-9a4a-0c146df38b41") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "680b272e-97b2-46f8-aba8-0167b1e2b420") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "553cde7b-5f50-42a2-9d2f-c596c1032d72") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3f9c4036-7c38-4b30-b995-697cca24087f") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "65de1a8a-4e21-4572-a4b5-f0c94725320b") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "477151f5-ec1b-48ae-bc7d-bcc45e80e4b2") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "18a7e0cf-b235-4d6b-9128-1e071ca7c2a9") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "33ed90a2-c1dc-4d51-9ee6-b21043893f33") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ede015ab-3988-4725-9977-e607d3260f48") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4c930c18-187d-41dc-a422-7d740b65ab08") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e56445c6-4868-4da8-9c1c-69532a2de102") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4e57c8d2-9d0a-4355-8178-5ba211cb18bb") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0682da12-9a7c-491e-a0e8-7e89bfc07d48") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "34464d31-7624-43a8-b697-254889089a4a") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2e02c0f9-8031-4d3e-8e10-585136affbde") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "25ab32d9-1639-4115-8677-3b0c6cee286f") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "86392af3-956d-4e7c-843a-63f92ea9b3b1") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "90ca4313-bbea-4e2d-8e1d-8110c91e1db7") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7446a9b6-5176-4c95-9e49-8be14646deef") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a862a300-ccfa-47d1-a6ec-067ef860b690") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "04f680b7-c693-4b72-8434-192a729289df") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "310e64dd-bf47-4547-ba7a-e3fe4684e184") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "5d6923b0-9574-48fb-9159-634b3cf604fe") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "75b0251f-0dc0-4169-b287-321659b59a25") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3bc3584b-3f76-4556-85e7-abbba93e3a9c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "8c02faee-64b9-48bb-97cf-269727422b05") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "bc20ad3b-39c5-4c69-8f67-0f84b747b9d4") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "9b2d7e8d-d50d-4e64-8a7f-b33b36c26064") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 201 "Net-(LED67-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "fffd9cb1-7b55-4f31-9c9c-3cabaf2875de") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 200 "Net-(LED66-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "ae369625-3006-4525-8f3e-8499589dddc1") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "0524fdf1-d2e0-4838-ad6e-5488417ed20e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "16fc4da6-af1c-4fef-85e8-0a97b7874698") + (at 347.244 102.2391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED15" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "244b502a-0927-4ed9-bada-c48fa937179b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "cd0e44bf-a685-409a-ba7a-c8d0a216f195") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "48ab0717-b0aa-4ab9-91d2-0a7ddb0e4691") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "8811b4c5-ea09-4f55-92d5-d0142a69ae89") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/d9816269-938d-4f7f-bf7f-78022f2e5698") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "75f7b7fa-96c9-4d81-8720-2b087529cf01") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e13c2d87-c6fa-4f06-9328-2c7ec1c1b086") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7bbef14e-7216-4667-927d-fa7ccfea51d2") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a7a2f94d-3a1e-45fb-9d52-f2c60d3081fa") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c9a1f89d-4527-401f-b3af-80358d8ce86c") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f6e201b5-6fa4-4b76-a545-42bf6438b917") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "dd2588b4-6700-4512-ad82-51f6fbacddf6") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "01e25dee-9968-4a7a-8dcb-4933d37d7037") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2796d3f7-30bf-4387-a80b-afeda1ffbe1b") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "563c359f-a44d-451a-bd5c-26c01af0bbea") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "6aefd9ac-f756-4d48-aa28-095fec03e54e") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "60e689d1-7981-4be4-afea-b7b5ad1c7d2a") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8d4269b9-b8b6-42b8-8f5d-2ff6976cc1e1") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a4562ca7-25a4-4c3f-b4c7-4512841d36c1") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "501d2149-c1f8-4020-98fc-e7daf32d15ac") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ddcf0d6b-0ffd-4832-94a8-3609a593d9e4") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c6785c1b-8c0e-44e7-914a-605fb794d373") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "470f3294-71ad-400f-9c8e-696d87b4ee1d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0f86df2d-f0ea-4df2-b1ab-6fcc0ef06873") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1f6f3052-2648-4f6e-a58c-75234df91589") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7e594593-47c1-4390-a1de-ebaf45bdd499") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "85dc9981-52e5-4101-b0ca-f5e00c745040") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bb2c386d-e014-4e92-86e1-1950312a66e7") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "72bf0904-408b-4c12-abe2-163c5a6e0057") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ed3c60e1-d2d4-44d3-9d9a-5edbc93b0084") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "45fefd96-20e2-4903-92a8-b5e9cc21349b") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "94d2a2b2-4565-4e13-b4aa-293d53944434") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "72fa14a5-ffe7-4386-824b-903f2d889955") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d5d03bd4-2047-4a41-b59f-b72db1bbaa2f") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a8842859-bc08-437d-adca-b83fa09d600b") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6e5d4c12-36ac-439c-95b8-398b9a136128") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "89b6f873-f849-4784-abbf-47994b8d89b4") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fe7ba6e0-6f7f-40dd-9c22-d5254c89417e") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "fb03f15e-3b0a-4693-8de5-82f15316efc0") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f578b652-a6df-4cb5-94f3-f643d32c18f7") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8f175071-ef12-46ba-a6d4-96ac3218794d") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7a0b9c4a-17d5-4327-b843-e48d8f1a546a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0c5befc6-3d06-4045-83fb-1ab67fed3b41") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0d77c1a8-d877-4a54-a189-43b8bb0e436f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "f726c8be-1a6d-4d81-b606-0a50af6abf89") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "746f37a9-e3ec-45cd-9994-ba9416d1c202") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "7f00b09b-7ca3-436a-8a11-5adbb69b936b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "c5fca3e2-3688-46af-abc5-5705e6e4d2de") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "361da475-cb8e-483a-9c1d-736934fba64a") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 149 "Net-(LED15-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "13263d57-c21e-431a-8e86-5dfe92910dd7") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 148 "Net-(LED14-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "4f90a3e2-c382-4909-a548-e24e440ada88") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "1212ba2b-6360-4b85-8c23-f7cfe0e9495e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "1777b144-80f5-47d9-98f7-2e3ee6af640d") + (at 166.2689 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED21" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "e25e5745-8c74-467f-842a-7f35e355db38") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "dadf934e-be7e-472e-8e40-266413ef10f1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d5524859-c138-45c7-85db-61f8ab27ef84") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d1c8365e-fad3-43db-91c7-2674a66f2b70") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/51bd0d15-29da-4f25-afd2-e11fe08da027") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "9e9c9366-0ff6-4cf4-9a87-58eaead11e8e") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "87844964-6d96-4dfd-96ca-5916507e2e43") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a661aa03-79dd-42d7-8fcd-b6bdea52baa8") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b22d42fc-a70d-49cb-8fbd-2539989055a8") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1d5edfd0-dbbd-49b2-bde8-298db1bd7029") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "14901db2-7753-4808-ab7a-4e4992772db2") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4d86f8da-77cc-431f-a590-5ec40b41e730") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5c4c7bad-8519-4558-a0e2-efd6e1ab8d82") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "27c3a0ce-68b9-44a7-919f-40b776d22ffb") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b1fe7b3a-a59a-4c3e-be59-5f43e07bcc88") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5dd2ccec-45b4-426a-8828-b20276ce0994") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c0344dff-34ad-44d3-971b-140b6d9b07b7") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5766f733-83ac-46be-b0d6-4149921c6817") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "34ab0df4-75be-4aa9-9b16-60502a71fa46") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "97f3fdd2-6094-410a-b8ff-77f515901375") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "236b6026-b07d-42b3-bf60-bcd2f5e1afa1") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ff70f6ec-51f8-48d3-bbe6-2ba2e0e999c6") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c8e41770-ba14-44f6-a558-25817509934c") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4d1206ae-0ad5-4d0e-8c34-72d2e25fd35f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c41d5c62-64db-4ffb-9769-417c29895a12") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "86452712-e10a-4574-a7dc-533129b4c968") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "666a9dc6-3ec1-4076-a7d8-ad9d00333b28") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "19bcb259-0b0e-41ac-bd1b-443e419d7b28") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "97d326f6-3f37-48b9-b8d7-ccb265593200") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6dafb591-3fe0-43ba-a7d3-6e907c09735d") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "84f47953-6df3-4720-82a0-13a2a3a2011e") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "077b6642-2be0-4f90-b209-1b9e7714d18f") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "862f9ffc-fba2-4465-ae7d-22df85329634") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cac3637b-004e-4279-a9ed-25d55081ba03") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "30aeaff4-c63a-4b0c-93bd-1f763e1cd5cf") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "022faf7c-236e-4715-b74c-63f702039970") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ab1268db-e5ed-48c0-918d-ed0e8ea1e13b") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e641657b-ff8c-4bda-9537-2d33385638ad") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "68625528-527c-401c-a403-4ef53370b1ba") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e1f0a78b-85fa-41b7-9eee-ccc13bfa01a3") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "11554db8-2d1f-41a5-8d70-c1a309a2f865") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "75f24c6a-9d66-41c0-9a4e-d515e7644b56") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b5a26bf3-d622-4d13-a8ec-30614699b0a6") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "9bc7bf97-5bdd-4809-8003-6edbc593786d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "e0dfe53b-0adf-4a3b-943a-7f1f20168a32") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "c94714e8-7ee0-4c37-84ce-29bbba84403a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "e43ce121-5e27-4d6f-aff8-3f7efcfa74e5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "e9ee7f57-9c30-4281-93d7-a7c5cdbd5430") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "2443f5cb-89e7-42e4-8db7-8d1b1f247dc4") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 155 "Net-(LED21-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "769ec57c-4014-40cf-98a7-fd5e9af39b30") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 154 "Net-(LED20-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "946abf9e-b3f4-4a93-99eb-102d6167738f") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "13e839bd-0fb3-44ac-ad54-66437ece7f52") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "17eca004-f18e-4d3b-8a17-aa2a1ce2be31") + (at 218.4048 159.5438) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED52" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "96497de7-3f90-4958-a866-087bedeac666") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "029266b6-aef0-463e-b089-c92b29d1ca31") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "2da333b8-e5da-4c9c-acd6-76fc8651dc1c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "6e79061f-750e-4b01-8cf0-68ae6603cb8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/f90193c1-0b7d-44b9-90ea-1a0761e5bae3") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "95a283cc-d151-4c85-b315-60b6b305782c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8ed37027-51a1-48ac-b945-e865fb81acf1") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3604b6ed-2c88-46e3-999d-c22137c0412f") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "fd367e31-ccb3-4aa6-a474-2c5253da7097") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ab50831e-e88c-491d-95a5-a6cada208be3") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "988e9d76-92b2-4a75-8e87-972ef98b4b52") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b37b0bfa-ddce-45e7-8eeb-ddc9ba34e8ea") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4818562a-5e42-4b79-8190-910b5e1d1c55") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7f5b8b5d-5897-4e41-be39-de961a43df75") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "655820af-6a5d-468c-ab16-c4c9e4ce7b36") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a54e8036-0b49-4416-add0-eadb4560cf2e") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "227465b1-0aae-48b3-9f05-6be904f4e79d") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "60c91862-f033-4e8a-b0f0-91ee726471ff") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ef8f7083-5e71-4c59-a7d2-a915a495f72d") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "95edfb7d-5fc8-452f-84b5-b2a0d3c557f6") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f535dd49-6069-4400-97e9-5cf9d8525715") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "712dde3b-6ae1-40c7-83e3-cdd6f22f7107") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a46b58fb-3aaf-46d8-a369-52fbaf5c90cc") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e2d62be9-43ea-4235-ab32-60015b5a8480") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1002c23a-cffb-4489-8f81-5d221c9e4ee6") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2ca40964-3cb1-44c0-8ca8-76b206530708") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "69fdcdae-6ce6-4cd5-b8d2-2dbc3da78e7d") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "34f3e461-10bb-45fd-84ee-f6469a76871f") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f1b4ea0c-cb9a-4fd5-94e9-032f1638a2e7") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "737f9e21-1e3d-4025-b444-bba86177a144") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7eb6b7c-6c29-45c0-8840-802ee3801446") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "775f0f0e-2fef-4aed-acbc-385457376dd7") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fd2de741-5cbe-4290-82c8-92999220e6b5") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "14880b91-6122-488b-9aae-3b1cafa178a5") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9182b8ad-cec5-4e43-9eb1-081d5350f989") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3fe98440-1fe8-49d4-9b37-315b4f8cc2c4") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7e995de9-b8cb-4722-8e40-2bda8d5b726c") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "73aa180c-66f1-4c99-8198-cc353bd3030d") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a523a45e-f186-42cb-8742-3cedcea5febf") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b3082053-35d1-4564-b253-fdae1db4f213") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5c537a3d-6149-48a7-a02d-e58348a9ac71") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b0f7a635-bb02-43aa-9ae0-e2ccef90f20d") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0a17a622-9d93-4db5-97db-4de427d1f984") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "9e2ac4b0-bb0c-400c-bd50-48309483ac23") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "da719a3a-d5c9-4e64-80c2-76f549d042b4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "37c27eef-415e-478b-935c-14426bbfc89f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "52e02eec-66b0-49c9-892d-f311dd4b4185") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "686b780c-1aee-40bd-8db6-002e04dcbad9") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "3eaba23f-b8d1-4340-bc01-1000048de1ce") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 186 "Net-(LED52-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "a557683c-fb7b-48f3-8fdd-ee92dc4bb50f") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 185 "Net-(LED51-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "77b94e03-0264-4424-886e-bec4d6cff53e") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e488015b-869b-4976-9455-6162e821042a") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "1808d732-6308-4fed-9a40-4f3e83482fee") + (at 247.2575 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_L1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "c94dbbdc-95d9-421c-b1df-3c6fee4ab1fe") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "521f2301-7ad0-4b1d-8878-0e7165d3fc7f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "df7d3a6e-869d-4714-b897-7eebe374809a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "86a2f2b9-165a-473e-ae02-1cc981002b97") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/4f9b55c3-88ac-4875-9d67-a09732fedfde") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "633973ac-ed85-479f-b8e2-3e09fb965adf") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "acba92c4-eb91-47ca-b8d4-869dac545edd") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9337dba5-a2ab-48e7-822d-caf9658744cf") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8d292aea-c7f7-4a4c-a28d-580440385233") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8429e3c5-552c-41dc-a755-8902edab746a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "310fc8ee-ee04-4787-80d8-48f2236ee8e4") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a9016edf-9bb6-4c2e-8979-f162b1212d45") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b2fcec85-553d-489c-a3e1-25c890398b6d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7014587e-5ed0-491e-b3b9-ed6c476c8b56") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a9b94ebd-3f9e-4c5c-bcee-302fb47784e7") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "20bb45dd-9486-4373-9203-165eda48d162") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7ab615dd-4b3e-45e8-87e0-b2adf038b74d") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7eecc2f8-3d68-4227-8b81-44e68b78402f") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "328520e9-3fd4-495b-b40e-391848181291") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "99158f92-1bef-4807-83a1-71556b4e2e4c") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4b7d6158-6a84-48eb-9869-079786ae5b7f") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "273f41c5-c04c-4ec4-895e-10125239ff12") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9741935c-7309-4789-b126-823a4432b1ed") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4c0a09b3-2d48-4ed9-abaa-bb882037999d") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "aa7f5a6a-f600-467c-85a1-e50feadbf0fe") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "276b13e4-1837-456d-bb4d-44272d8e123a") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d6d14bf1-cd04-4bff-bda7-a62bd7867cc5") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3219d045-299a-4c07-84c5-aa8c56adccff") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ee7c8bfe-d842-4dc9-ab4e-c7044b75b991") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0eff7c27-9bec-4036-b7db-bc1954544e95") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f92f53c8-74fb-49ac-b296-96bff28ca797") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7f7381c8-f84a-41eb-9297-c1f7e8c56362") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e62be73b-5636-4d39-9c9e-852ff9b3fe89") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "79a3ad91-9667-4fe9-be62-4815357c011a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2c6b0080-8e3d-462a-a3d1-85cbcbfd89aa") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9865958c-d00f-4023-a34e-0f70f7566301") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1f454978-7c83-4d73-8e9f-08a349979c56") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a6613c5f-9bd0-4f8a-8c87-a70d2322ccdb") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9170025c-6318-4a57-8388-5f9f45790bd1") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "164b13eb-956d-4b98-855a-db1d72d94817") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a36128af-5ef3-4f07-b72c-09a995392a3a") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "08a3096e-6421-48fd-be7e-9f1d828632dc") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "799a84ea-cacd-4f6c-9b05-8413126ec448") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "92362474-c608-4c4f-8154-379cfae9cb3c") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1493be83-fbee-4453-9b3d-10eda5d18497") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7f83bb0e-65ad-4b9e-9539-8a1ac5029fed") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cf18bb29-b2ca-457e-8cb3-3981b8628705") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "75c1cd0a-f23e-4902-9b91-8fd5489c3723") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "fc960f2f-a320-4002-b3f5-e0f1bc870a41") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "ebc30498-8ee1-4ebf-8fdb-b2f6ee3e0402") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "2c4d093b-b180-4df7-a9ab-45c6788363ef") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "509c854e-c52c-459c-912b-ac3bddebde0b") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "b62fd09d-9cd4-4185-b609-c28feadc6f38") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "e861ff75-8327-4705-bf9e-ccb92ccec72f") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 66 "Net-(D44-A)") + (pinfunction "2") + (pintype "passive") + (uuid "5eed22fc-8b2a-4fae-ba2e-c8f03aabc3a1") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 66 "Net-(D44-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0845309f-7754-4298-a906-8985c7f874f6") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 66 "Net-(D44-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2437f960-3415-4689-97e0-73db422d0218") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "1abfd860-8542-4a18-a410-0d7a256e168a") + (at 204.395 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_U1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "ae997aff-4435-41f4-a63f-dae7face019a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "3018f028-dbb6-4227-afdb-4da7ac1c5b4b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "626fd5af-ad64-40c8-84d8-cf40681856cf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "07a3f153-bf30-4216-a80b-7e6f2d4f5bac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/4306a544-070b-4617-8f9f-f4ae4aaa3f27") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fbdc749f-3bbd-4ed3-a634-c467b4508aa5") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d2d4118c-c14f-476e-8903-bb301ce226dc") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7f3a7d07-7bbd-4ae6-adab-cb86366e623a") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5c68a863-a294-4531-a1cd-b6df69e191e8") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cfa03302-13af-4e5f-a00a-2d8b60f166c0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "42b0a77d-37b4-4418-8ddb-4aeb8e7a7f19") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ffb15a2f-31c1-430d-96d1-fdea48c41ef1") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b0e5b161-1b7a-49bd-b2fd-b1f317d3088c") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2f96f704-98bc-48d4-a8c2-df02960a8336") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c183694f-9346-4a1d-bca0-9af3d9cdf5df") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "e8c37b2c-8c48-4cf3-bc95-4eba8fb2b7a2") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b558f491-fd92-4c4f-a65f-0bea6c54dcc9") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4b1a58b7-b684-4a1d-8601-45f80cb14a42") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5a2f0bd2-2a9c-46c7-9cfb-d297f2ea02fc") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cbbe0f42-86c1-4a8f-977c-645384eea7b4") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2881c011-9117-4327-ba19-da7436925670") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "79c4da28-f4ae-4806-bb34-f78a96c8e6bc") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "630cba49-5f61-4644-be8b-ff7433adc2fd") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5393d144-6c54-4e01-bfa0-ca22102b4c75") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "269536e6-f8ec-4e9f-9ec3-101f41471c09") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d7e86b61-412b-4c32-ade3-65caae2698ad") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fa213fef-f6fb-49dc-b987-a75adb74bc60") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "84526f4b-d5db-421d-b3d4-834db59c9d59") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ab97c0ce-8f00-4c36-9ddf-8a44dddc4476") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8e164d43-f081-4b6b-a162-fbdf17fa05f4") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "342b05fa-8e6b-4833-86d0-6a408a6560cf") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "39a13ff7-7872-4a63-8d07-9aac8817b7ac") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "25bdeaa2-80d3-4273-8050-4260e4979bc2") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f9ed6b33-9ff4-49a4-94c4-81856ca57b3b") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3d4e81e9-8ea7-426e-8b0c-493ab2f3fac3") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ed0c17b6-1bde-4bab-bee3-0b0da2cc5b07") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b93290ac-29f8-456d-8b67-59868fd45fd0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5585fc8b-c733-4e45-8bb9-6654809956e7") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "60a09f03-6001-4f0e-9b96-25467f77c138") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "3f86707d-b3cf-488f-b83c-2a56ff67ca29") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "28cd8de3-6f1c-4916-a27f-05ec05d77376") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "505ca49a-ad6c-43a8-8375-88f74f4a174e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7d60b5ee-36a9-4fb8-bd99-48ae7c970a31") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6c130e82-854b-466b-8fd6-24a72bd77080") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "825186db-f0ac-4eba-beb7-5b9f22f57eb4") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ce64a63e-0a7e-4070-adb8-82534a2d644e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f396d2ed-6baa-4d15-a1e8-81263870e3f6") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "532d54ff-9d85-4d67-9283-47f6d5cce735") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "af903d18-374a-4a33-b175-78742aa8c09e") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "e15da508-8153-4dbd-a019-9e1046053f69") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "722cf475-6149-496d-b6c1-9f249efa7f11") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "db1861f6-b969-42d4-a958-8b965598ca6c") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "e5294609-4c23-42e4-831e-759053c4e62f") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "d33cd913-e465-4c78-b7fa-99b8f95ff5b8") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 34 "Net-(D28-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2876acf6-b36b-4163-bed4-6f4454bcfab1") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 34 "Net-(D28-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0e926353-f705-4c65-85a7-de7d81c6c49d") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 34 "Net-(D28-A)") + (pinfunction "2") + (pintype "passive") + (uuid "3451b098-e31f-49e0-9520-5bb445c7e400") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "1b28203b-60c5-46e6-9ecf-f708b792739c") + (at 190.4251 140.4938) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED37" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "f91083d3-7f8e-48e5-82af-c75e91ea0411") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "53adb95c-3df8-4c17-a3a7-0de038d7b06c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "aaf64cbd-2e8f-4530-8123-ba6f44970116") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "92faeb40-61b5-4a3e-9253-038411426572") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/9a35d3ca-c505-4475-a771-ea4de06fce88") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "41a76d64-b6c3-4432-b482-91f675f802cc") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "afbb93c3-ec22-4fb7-b37c-5a1f8674dc73") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1ca0cdb4-7307-404f-82fe-d6b35e8b1e93") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b5fe672d-b461-4c2d-9059-82b19abb3df4") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2e88f02c-12af-4849-9270-282473fb8586") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "84a573c4-8e3b-463a-b0a9-47f2aebcb42f") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "47c608e3-825d-45a6-9dd8-4721984dcae0") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e0a1ebb0-9a89-4bbb-84e6-e28cef1da1e4") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ad7bee5d-884a-4479-bcdd-ba4f3fdfe7c3") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "dbe3853b-4dc8-4254-97c5-205bd88b72b0") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9ca27ced-ab36-498c-976a-0f9b54cc35cb") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "815ba476-e5bf-4654-910e-3a1ab027a085") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8a5a7ede-8bbb-4c2c-ac63-af65114e9316") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "087d1f2d-331d-4c48-ad92-7fb10d79ffc5") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e1b3e6dc-6e9d-4595-8be2-faf8963ffe1e") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9885b9ef-c304-43c4-ba4c-7c4e2ca45187") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "69d57698-73f2-4741-817a-b144b9f1ff5e") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "54458b45-e8ec-4e53-8564-d8016e499f87") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6304acb2-0050-4bec-a351-ec23e8239db2") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d66c11f2-50e3-46aa-9ee2-984f838152d6") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4d72a99e-0428-47ec-9deb-6107b421395b") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "693ac55c-477d-4ceb-bf05-7602a3f22620") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6c9537ae-b27d-440f-affb-61938b07bef1") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8a34f263-7db1-495b-8bbb-94af9417adb3") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "886a885a-ea3f-4435-8c18-4c748ef62ae9") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9c0d5422-ec6c-43aa-8dc6-20e6708cd2df") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "14cdd761-9c47-41c2-acea-4740d3836c13") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "39b21e34-ecb9-48e2-b926-6ec6c4c1c9a6") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7e5364a4-a412-4114-9205-ffb54721a570") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ffa7db33-bdcd-4ed7-8e0a-2973b4264a29") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cd2a6951-ab0d-4cc5-a7c1-e4e542368689") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "aad21fa0-1680-49d6-b9a4-cc3a5e4f6a90") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "75c54519-7277-41b7-87bc-d5a77d9297ab") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ad396253-628f-4fd6-a784-739951432f09") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "eb18e784-d4c7-48bd-b8ec-4adc41a9bc9b") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7eca1dc4-6f22-4cef-9df1-bdb28b26d166") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e683dd0e-98bd-478c-8a48-96edc19d8706") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "75ab71f7-5348-459a-807b-9a9a9e17165f") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "025ea112-2c9a-4a36-839c-04052b1051f0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "b3203f96-1b5c-4365-adcf-df08b4c8fafd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "22bcb982-8a98-4334-8d7f-50dbd23a49e4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "253f669c-cd9e-4a70-9922-7529c38ca2a7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "d9b5d480-d0c1-4148-96dd-76b205816639") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "912e8d44-a26b-4bac-91b7-5b658ba9c650") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 171 "Net-(LED37-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "e59f2a56-d717-4a96-a8ee-7c10e86f3aac") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 170 "Net-(LED36-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "094bd81e-abf7-472b-9dce-cf169fa292c0") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "182cae11-e297-4338-b835-238942439b03") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "1f235bbc-b84f-4010-978f-5ab149c5dbf4") + (at 347.27 173.8312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_RARROW1" + (at -6.92 1.7812 0) + (layer "B.SilkS") + (uuid "7df81903-fc5d-4973-892b-a9b584aa4ba7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "cdde3bc3-5561-4717-95b0-75d37c3822e7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "6cc16bab-2824-4476-b712-20275cf1dd34") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "0b4310c3-7762-4a42-a0ab-c7e1023b0466") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/14fbde30-fcf0-45c1-8bbe-09997c5d9c7d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "24a01f78-21bc-4417-91df-64d66691e707") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7016a9ba-401b-4cd6-9180-e390cc5a47ca") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2571bd67-21d8-4d8e-8b02-cf4b7a217ed8") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "24a3db8f-95d3-478d-a9b0-93c6d0d5ee24") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "45f6d32b-473e-417f-9a86-92d37e8f4b6c") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "24f3847c-cc71-4d9e-96e9-14980fdebee0") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f7e68f89-a7b1-4163-8a26-8054579e206e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "34ea03cd-aa0e-4fd1-8a6d-7fa7bb592bb8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "af85d79a-6019-4028-95bc-f9ef4976ca86") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2cd080a3-6aff-4fe2-a393-ce249672f698") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "ca2b5313-82f5-4920-8d8f-271546acd44f") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0b106929-0c3a-40e5-9483-79ea36a81fab") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "daa2d06b-1229-4c20-a9aa-442bd6af6875") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9604e0b1-a296-4efe-b6bd-09a4e71637a1") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "045c0d18-b538-46e8-8c11-d3d180978756") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "43de8dfc-99ec-4139-b08f-8a76a9502df1") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a56e425d-aa36-4ae8-8923-b39a8bb2ffb0") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6d1d8fbe-48bb-418a-8db2-e8637bb01012") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d5753641-69da-4a00-8be3-5cea40613e8b") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "939c5a97-0222-4d2a-a901-a5b7268fc591") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e98428ce-25a2-42cb-b163-74f44891091d") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fbcdfe54-353d-4186-aa9d-3d1b7e1a7e6a") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2f316112-bf04-4f55-a03b-988494138f70") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "70602636-1da5-4291-9e1d-86a05848a3f2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ffd6a748-7f35-491a-bd5b-eddbe481a738") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bfa4a8c2-151c-403e-bddd-c1524d224478") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b7c12ed1-91fe-44ed-978d-c3d8c43158b8") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7fa9e0d3-f93a-4b27-904b-ebd40b94443c") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1de7e0d8-c48b-45b4-9619-10325db9bcc4") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eb716d32-bcac-4366-ab62-ef2455435e7c") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a5dccee2-a60f-45f1-9b91-81402c9cd9eb") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a44f8ca9-a0b5-404b-b38c-c5a504e6befc") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "28355d41-385c-4e34-8793-08896d71525c") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a5e026e7-fdf1-4c06-8965-df2a66d7251a") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "c2ebbe8a-128a-4122-b467-e5dd92eb121c") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a767db36-c23b-4ef6-99e8-7d32c7f03974") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "13e5d202-bef0-477f-a886-6d610da9f4a3") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9e30b7f0-17ad-451d-897d-a1b050eafa7a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0e135e9d-e908-49e0-bb33-354402dd27eb") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "56920fac-aeb7-4a44-b808-05a72c70848f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d464b7bc-39a9-4988-b7a5-be85761a1804") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2fc12404-66ad-4458-95c1-40229f0e4e7e") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "2ee03130-fa3f-48cc-a2da-6c5b18f2c90b") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "bb13a961-ba2e-4d7f-ae2a-fdfdeca5cab9") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "34d4c05c-6ffd-4127-be61-6450c0f883af") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4bedaa6f-43ec-4988-8943-a02707c83bd5") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "ec59be3f-f174-4363-8cda-a16a2cdd9a62") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "de71e2e3-6a67-4182-80bd-20713415a55e") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "3f562ff2-bc39-4c84-b86d-b05bbc384fb0") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 124 "Net-(D76-A)") + (pinfunction "2") + (pintype "passive") + (uuid "d4730347-f64a-43d3-a52d-01a32fb223e4") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 124 "Net-(D76-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0c573e7f-d2c5-40ac-a523-a19f8d0b6335") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 124 "Net-(D76-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ee5cb903-e7f4-483f-9864-bc95166e6a1f") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "23ab9141-c26d-4571-9387-baaccfc53ea3") + (at 113.6298 140.4938) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED33" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "13974062-3156-4d74-9432-11eb97be9b14") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "a2b988b8-7bdd-4f3e-8128-d78e5223d1f3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "fcaadf93-58fe-4a75-9320-2dd75927f169") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "6d0c93e1-9047-40f9-bbd9-34525441f5f3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/cfdf2d60-47ee-4a31-ab1a-1a9126f0f834") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "4bfa23e2-3ec9-4d6d-80b3-6c28e8589ad0") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2546b928-1eec-4041-8abb-be66c2f490ff") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "656b2692-f650-4886-80c4-fffe257d2540") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6b092c63-9608-4f60-800f-24aeac44f921") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b598da85-09fc-4c3e-9cf0-4cf3e77c694c") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d230f56a-d062-4a1f-894e-fe38d2fdd680") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1d0bf3b4-9996-4431-8c80-6d8f259d5284") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "95c0951d-5362-4355-9cce-4313352c7595") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7e48bc52-b3e3-4b3f-addd-85236bb5095a") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "14f905a5-beeb-4fa9-9701-89568980560f") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e449f590-22cf-4483-a842-f78cbf0a3fa0") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8e549230-60a9-4cae-8479-02f99ce8c581") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "231d54b5-bae9-4f73-a071-a6be277584fc") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "75fc91b7-33b7-4ddd-8f12-9cce8bb2ef99") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e4807941-28e6-4b91-b428-e5d25ef03004") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e7514cbc-3fc1-4971-8b10-e3e12247f807") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5e24a212-a5fc-4dce-9049-67798f7bdbf2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1f5a4168-147c-4dcb-bc7b-84dfcb906f6e") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7037e935-65d3-4b71-8f41-be58cf0277a7") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "21424775-bbf3-4302-bc2b-e9994de26c73") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "212ef9fc-fd76-4bba-89c9-1fa1af5185a3") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8c3b95b5-1e47-4396-a081-3f9f44e51a93") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4bbc588a-4fca-4894-9388-0c152dd4b1b1") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eac24d8b-8a62-4bdf-b2a5-a41aa003f636") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2da635f4-ab7e-430a-a5f9-16a546a74c96") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6f8bf599-3fa6-41f9-8b62-e5358d234838") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2bf9d934-86de-4d3b-84d4-62cfb6d870fa") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b149867a-cfb3-480e-9da2-4d0f04f68180") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "552d650e-aeff-4c74-a573-f7c78d690ae3") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c145e6ba-6126-46da-bdb5-b20cfc124696") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "00806726-5d21-4056-ad20-af8a1d704f86") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "702dc1b0-e054-4647-98b9-7f468d8a17ad") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3eb37f89-f672-4cb4-afc3-6878da37f0e0") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "79ac872d-ee22-4fe3-9b06-203ba50924dd") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c16d872a-54b1-433d-833c-c5cdbec9c380") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "920eb2e2-69d8-4a5e-80ce-41395963a1d9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "72e4b91e-51a4-4b53-a489-4a87d4e5dfaf") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "62c05e2c-b766-4d7c-a92d-7cb7e17be7a5") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "7a62edd8-320b-4bdb-bbd5-36630e0ac169") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "96f3e113-bfe0-4757-8be6-4f9dcd3699b8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "bb87451b-bcb9-4a04-b59f-c5a3aa0734a2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "59377630-15d7-42f3-ba1e-509a8a31a9bc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "76cc3d2e-b994-4b23-8ef6-e4dc45942bea") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "09c6059a-26bd-4381-ab50-61020e688966") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 167 "Net-(LED33-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "ecfca848-69c4-4d55-9d65-255e2a5b267b") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 166 "Net-(LED32-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "69d1892a-442b-4129-ad16-4154c93c700b") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "0604fa57-891f-43d0-ae59-912d761cab18") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "27a8fdd3-b992-44dd-ac1e-5668d165b0d9") + (at 132.9575 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_D1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "db8fa437-1e36-416c-b6ef-5e3646bdb10b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "58250f28-0fea-4a02-b25b-1211e0c6515c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "c77d3116-8dbc-4db3-9d1c-9a47014f936c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "4d767fe4-ca3d-4b11-9450-19996bdb57be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/e6440843-9ecb-4188-aeed-72cd707e2493") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "55df73c7-ac4a-462e-9973-650dbc692af6") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "53f34350-55c2-4133-a082-e632d6a839cb") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c90e8435-c155-4b30-b65e-025f3f7cbb84") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bc88c9ca-72e2-45c1-9ff0-dfd1250e3c1f") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "842ae895-b3ef-419f-918e-75dc6ad06d85") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "78256da4-7ae0-4ac4-9cab-d2b08e475f51") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4382c350-808b-47c0-910c-a6afad2983a0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3ad52396-efa4-4b0d-a406-95593f7aee38") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ad7b53d5-16dd-4f8b-80e2-5a3ac4d756c2") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4efeb388-3708-41c1-84ac-9d7509f70470") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "9c99b7b4-a28d-4a26-84ee-15ea853874b1") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "63112ed0-709f-4540-8e44-03eb57786a54") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3dce1ff7-d4fc-45ec-b3d3-be958c4752a2") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d30c4cf4-c42c-44e8-95ea-23653bddfb8a") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "20a56497-faa8-4d71-8669-b80972b9a403") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7f28b99f-1f3b-4956-96f1-8988a30aa06d") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6b302bee-d25b-4663-b579-103cde77d5ed") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "92979cf1-b2b5-4444-ae9b-7ffe10a3bcce") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "782dcdd6-a439-4666-830d-7743f06d8654") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e1c8e59b-ad9b-4690-b0db-d31ed2035241") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4e6c704-c6d1-4db0-9910-eb1fbbf4056a") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "becccfa3-1ce7-4673-ab73-9dc11f1b8b41") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3f0b1149-d02b-4a9e-9294-a9f8901e20ed") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "304e8108-75fe-4b84-a333-f3ee3f6f987e") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c356be9d-3eb2-40aa-ad26-f1f095d6af81") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9946b1e5-391c-4b5f-8990-adb1b6058d6c") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f4021fac-821e-4cf0-8adf-ede3462146b7") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bd7e25e4-ce91-48fa-ad8e-90c46e77d2b0") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "831edc80-9c25-4c20-b12e-27300a4730f6") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3b7c0867-3441-4646-a989-16dcb73133b2") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a9a9ec2-73bd-427d-b2fc-c74dd84e491a") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4fbf3cbd-fbdd-4624-bbb5-a68124937e43") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a13e9b01-d8d0-46a2-a805-e8474dabbdde") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4959098-f8a2-409f-8f3d-aeb69e556b53") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "85209507-b759-4ba1-80b0-40aa8ba4adb8") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c4e295ca-d366-4bc2-b55c-09725cfe3999") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1d71d54d-7327-43b0-b6d6-63c9b5b72d0c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7cc2813d-fac2-4bf7-930d-0f92e188d4a8") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "895d3c09-76f5-4221-9a13-8f38bfa9bcd3") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e3d75f06-cbac-421e-9fed-636b0d8df69d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0525b282-1209-4e84-ae54-ee64a5bf7a2e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3885445d-134c-4846-8f4e-d30a13f8b11d") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "4efb89d4-819e-4bd2-a986-519c33b84667") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "23a8c499-9a38-4518-bb61-76a88514f445") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "fe93e0c8-ad07-402d-b65d-333b2059e0fb") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "63c3bdc4-e258-4f87-86ab-eba00bbeb79f") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "da6e190a-341c-4662-93a0-86c873f92870") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "118db3e0-f35c-47e4-be24-0f7facca3377") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "77eed843-34f8-4661-8d1f-faebe5cd9012") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 60 "Net-(D38-A)") + (pinfunction "2") + (pintype "passive") + (uuid "c49e2c87-4d7d-4bc8-9405-677f2450a284") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 60 "Net-(D38-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0f0ac5f9-6eef-4bc7-a41f-98640cb93111") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 60 "Net-(D38-A)") + (pinfunction "2") + (pintype "passive") + (uuid "052857ea-68ea-4318-9dde-49a1b51d152c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "2a1d4740-a82a-4463-a10e-894279bde672") + (at 63.8751 178.5019) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED61" + (at 0.4299 1.5308 0) + (layer "B.SilkS") + (uuid "3eced72b-e937-4bd4-bdcb-f1a9f4af9e1a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "b775216d-c58f-47eb-ab92-f10277bd21bd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d4c73ab1-e647-4c73-ac4f-65ee7d0facf4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "0e32fd11-f0b3-4571-a9dc-a2f8bbb80bf3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/3d02d74f-b638-4c26-ac80-45d08281ef08") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "39308a31-fe7b-4032-8b27-f59e4efff983") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7cd8bb1b-283e-45c0-9143-5ba456af94a2") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "abf36a42-e01e-443a-84c1-315592c031ec") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5ef60aa1-c765-4ff3-8709-7a2d49e81224") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c06ee293-05da-4709-b439-4a61ce1a8bdb") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8d0eb625-cf48-4eb1-83e7-bc107243cebd") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c1269827-4f95-46b9-ad92-f705459409d8") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c059e550-9ddc-41a6-abb4-366bd54f4187") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5508b812-c28a-403e-9d35-539596a56ed8") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a5159bd2-e8e2-43bf-9a59-a025eae2b6c0") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4afbab12-7e92-4049-958a-dfc39c4993ed") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "39e8eec9-ae58-4028-8ecd-688f9de5b0b9") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e9c6205b-b6ce-4112-ae62-ba91d72ca676") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3077b338-9c45-4f24-9581-24767a461cfe") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e08c54a5-5cee-4416-a3e4-608b9141ec3c") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8c7640f7-cf1e-4edb-bb48-0ddc7a498390") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5ab273a6-48c6-4f0f-af97-2f165e29e800") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d1353886-4952-43bf-9d40-d2cc04ed0b78") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "52f31627-ff92-40e5-a634-eb5ccb031a41") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8e9372b8-39af-4b25-bfa8-bbf3f75b2939") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ec1b1b75-61b6-4bbe-ac77-3359ef709350") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5bc83049-bf52-4123-beea-d5f52258c7d1") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6365f3b8-37e4-4a41-abf3-4022ccce90ed") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3d388880-cc73-4c65-910f-d753c35a6f79") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2200ff7e-feb2-482e-8b14-89f8090de695") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "04f5b76d-12a4-4fb4-86a7-12329a567587") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "77aacaa1-2369-4d76-b6a2-6b3677bdfe44") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8c3c9d45-6dcf-45da-b22c-0716edf6e53b") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c40d2b0a-6a4f-484f-b264-b9f545ea5e77") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9fc09627-e27e-4e91-8e15-902622650521") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0d424541-40af-48a7-984d-68578a6f0ec2") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "67ad5685-484b-45a8-9ad0-beaf68ad4071") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c667e062-1b24-4c38-b9b8-25e4b123afcb") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "62e3f5ec-df0a-40ee-83b4-0f3aeb3e68c2") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8fb322c6-2d9a-4138-a2c1-5554ad3d39ad") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "99f5aba4-1132-467f-b202-8fd242f58945") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "09cf28aa-7d4f-494f-99ed-4792f218019c") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "df7ee793-99cc-4ad3-b5ca-5b95eec47904") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "ab2ad5d8-a2dc-4228-96d7-eb40bf673f2b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "c2f91e68-3562-478c-85e9-2fcbbfff1de8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "7dba0a39-535c-431e-a2f6-10ad3b7b7042") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "a5eec499-70d3-4b25-94a1-804c008cff9c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "0e6b039e-52e1-4407-89ef-31f4a92bbf36") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "deb4c350-a0a8-4da0-8772-f711b434eeab") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 195 "Net-(LED61-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "2b83b960-c727-440c-bdf7-46be4bde27af") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 194 "Net-(LED60-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "eec2537d-59ba-415c-a3be-b53e61341822") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "a4220c76-a501-49d0-a92f-cb0747dff2bb") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "2dda3a5c-3d4a-4bef-90c1-635907c1411d") + (at 68.6375 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED31" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "d78f7de1-6471-4bed-bae2-650a04a1e3c0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "07ea28df-a784-46e6-b955-17095a44e0fd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "91584976-6426-45a2-8847-2e65692f7649") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "bcb785d9-9358-41dc-8df0-c56eb5d668c1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/905d84dd-b4a8-4deb-aa4a-d50ea91d2951") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "cbf45382-68f4-4fea-9f5c-e2cb070d506d") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "203504b3-543c-4515-9f97-70d0244f98cd") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c3446959-e983-4677-aa95-a763d5bd3789") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e9af1a48-e7c9-409e-927f-31908dd57c6c") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5b2dc17a-4946-4c3a-a927-de4bbda64f52") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7a0c8fd7-b29a-4124-85a4-12b6a53c3dba") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9a3a27d0-5707-4942-b9b2-e7da65300caa") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "dbe3ad94-b4e1-47e7-a7eb-ace1756addbc") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d22bdd0c-9a32-4739-a953-b3abed44a6e3") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "88539643-8d9b-47f8-a370-97fd22872a99") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "bc43c8e7-8e9b-45a2-b032-235659e97498") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "eb870354-e94f-4188-911a-5052e1c1f5b9") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "fc930b90-6594-4120-8d47-3f8093fd134e") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "60c31583-8b46-4b21-a59d-f43db93439e9") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ac7f7940-d112-46b3-988a-762ec086056c") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "42da197e-993c-4e39-a3cf-916ef804feb5") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1a207929-9cbc-4613-a766-396037958a37") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6f620b77-69e4-401f-a9fc-579ab9e32c41") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "574f816f-2a1d-4f73-b732-056c958cd8a0") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8ed47154-50df-46d1-aecb-ec9fc5e030c1") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "83d6f89a-f9cd-4717-aa14-a58cfd5d2e53") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "623ee4d0-ee72-4a6b-be6e-2396016de858") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f3a8df99-a742-453c-9030-0526ca5c80ec") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "68223743-56f7-457e-b913-2bd4950d802e") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "de5d97e2-bd4d-4643-b152-11437e9a7cc0") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e7aadade-2aff-4bfb-95c3-1a1ceda71400") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e2b4ec1f-b260-4e2d-a120-40b030bf61e5") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "259d445e-caa0-4cfb-9e8c-6a20d1a46c74") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "18f607b3-8820-45dd-9a34-7a51a6f31455") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f639745d-4b83-4c55-b45c-daae1fdbf585") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "248af9be-285c-440d-bc5b-d6ed757131f5") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b1fb62b8-f033-4b36-bcab-9a4b71a82f5a") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c6bcc5fc-4842-479f-bb85-b3925cdde42e") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d5e6caa3-fcf2-4148-950e-b81b2a33a06e") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a39dae10-ff48-4701-84d0-162ee6720bb5") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0d9a1e83-8998-4954-abbb-3fd541c6e63e") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f318f1aa-efcf-4785-b200-caf63ae62b43") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e75d11fd-5511-4b39-8a2a-4382ea818c34") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "a20ff662-bcfd-46fc-814d-afaefaefced4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "c108a729-9c1d-41a7-b7fe-3ac65b7a749e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "fa7f28e0-4de4-42e6-a28c-659182610706") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "e2376549-a1a6-4a0f-ae18-250b17980b5f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "c796a603-102e-47a5-ade4-e1721bb4b77d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "8bb37c18-0e5a-4472-a2d1-d7a23a106519") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 165 "Net-(LED31-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "0e4ac2c4-aaf2-4849-b18a-7d7831a6bce3") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 164 "Net-(LED30-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "c87f5f41-e220-4bf4-9f2e-4ae763df21c6") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "5a46600a-a9b1-4363-8529-becda3a90000") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "2f8db6d0-59a6-4b43-a974-7fb59c841e29") + (at 123.4325 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_X1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "8ca0b761-89f8-4b1b-987a-39e0137f0a3a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "6072fa89-b331-464e-9b8e-e92596237fb5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "0964ac55-a906-46a3-bb84-d900aa34767f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3c282646-38eb-4455-b8ed-134f07fdd88c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/d1469439-2c96-442a-94c3-1c5ed95faebd") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "50c508c1-17ea-4053-a8b1-e52e1ba5faa8") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "daa16fa9-b3fb-46fd-9474-a32f14af7461") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bc1af465-607f-42ca-b147-5a845d14de1b") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "403f516e-48c6-4cd2-a19f-ede6432935ab") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b5747c20-289a-497e-aeb9-9c4be22c02ac") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "07eaac73-b712-40d5-92e6-9a360f6b9731") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b0cbcaa6-8bdc-406a-abb1-fd68543613a3") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f696adf8-ac6b-44b5-91da-dcbeabb46dce") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2fffc0cb-7805-4617-be51-818d356a2d13") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0b0cfb54-1e5e-45a1-ad83-2c31b58b4d9b") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "8d183bad-fcf9-4f27-ae17-ca61cbf78a2f") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "aad6f1f8-f54c-4465-bdb9-c7da8a6726b9") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e8eea28b-38fe-4b29-85ed-b1c9dcda0fa7") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2b3c0dcd-73a1-4872-bad1-cf572163b610") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0f5155a1-925a-484e-bdb1-434223891cef") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "34c84b02-5bf5-4db0-a235-40d278482e91") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e027b0ff-bbfe-4c5e-941c-92e5c0b7afbb") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1caabe41-d7c0-470b-a092-7d227a26cea3") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bbb6c1b2-2bba-4645-bbc9-fb8edcc83a96") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5f56b02c-7fb1-412c-a4f6-85ed9e64f4e3") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bae770c6-ca4c-423d-8dc9-6717022d8ead") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "da26bfb9-48a0-425a-b3b8-3ddde9ec6c2b") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "58fbd811-aa74-4333-bc8b-6f672ba8777a") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "89aaa6e3-279d-40f5-a656-344440a12d82") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "25962f32-e0bf-48d0-92b7-82cb471f27dc") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "02cba428-95f0-4653-9c67-a412fe1af15a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ff36b009-2b2e-4422-b861-551f09f30bc5") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0b8cebe4-a4eb-4fac-9055-bcc82a0d3053") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "729b00d6-0101-4202-919a-ae27e410a21e") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dd42c0b9-719e-491f-b7a3-83846194bdb9") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "99934bc6-04a0-4e11-8d49-8a41e7917a28") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f116cce1-d532-4bbd-b2cf-aae65fd60881") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "331a4b7f-1214-4e9e-9d10-f6d06c42de58") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "93de2995-4aa9-4902-8240-87c42e34b636") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "6bb80ca8-3373-45d4-adee-92f6055c0163") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a9344b7b-768a-4e63-9d4b-67700caf3796") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9667dcd6-f7bd-4fa5-b49f-5114f973eb88") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "140ad673-f283-4cb1-8721-8ec394b377eb") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dbd854d8-dc90-4109-9b2a-1642b42ad569") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b9809bd8-70d7-4ccf-8d7a-a4bf21b0a305") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "043ddeac-ff12-4b64-90b4-d04d5f8a34a9") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c7e0363f-21c6-4a47-9726-9b81d09e41c7") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "f7b8ba2d-a88a-4c80-ab95-fb5372ca5bb5") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "181bfe06-fb20-4adf-a6e5-966b8321b703") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "210c89df-5bcb-4a00-bf94-644c644f6338") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "782db546-99c8-4e9e-bc9e-3c10ac480740") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "53495bdf-32aa-4c30-80fc-db842121b288") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "ce4c919c-3430-4502-96cb-ed142b2dacb2") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "66e4903c-1655-4aa3-8aff-cb300fe67285") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 72 "Net-(D51-A)") + (pinfunction "2") + (pintype "passive") + (uuid "b229eec5-9233-461b-8100-479c883036c5") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 72 "Net-(D51-A)") + (pinfunction "2") + (pintype "passive") + (uuid "4a9bc00a-6890-48fd-aa03-8a0ca339d437") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 72 "Net-(D51-A)") + (pinfunction "2") + (pintype "passive") + (uuid "16d0d0c4-faf0-4170-b767-27b1fcf25bef") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "305fdbf2-2b63-435d-bd26-4fe917662fcb") + (at 323.4315 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED29" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "176acdf9-0f1d-432f-be56-98b8a36130ed") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "50534ae4-e49a-46cc-a82b-7cea01b6a547") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d1d746f3-1313-4795-8610-c6fd6b2ff567") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "1ab51081-f148-4d92-bb7c-58d1782a59fb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/272e3ab1-decb-4fe6-84ad-8590faff133b") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "493aba3c-796e-4ca0-8fd6-ce632c06d20e") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a26118e8-81d3-4e15-87eb-07e6734c935d") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b2fda8d5-8283-420b-9873-6a1bf73e8255") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ddaae622-cb7c-4d4a-bf64-683045a5dea4") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1003fddc-68e5-4d10-91b2-733ce96a6d83") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "77b3de4c-f141-4b71-a427-d62ca50ef1f5") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1914a4f4-107a-4f14-9b34-bb5ccca1991d") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "aa614373-69a0-4e61-8ae0-3b8def86c75f") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f253aa2d-529d-4e08-a9c2-0a6b61a66515") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "22d517dc-2fe2-417e-82a3-487919b69184") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "3b1cd971-b522-40ba-b2b6-d3c9183d4965") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "905a5e20-25cf-4b90-973c-ebea8f95386a") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7162d79b-be96-4ebd-96bf-84cb7519627e") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "504fe6ae-dd67-4113-aa82-600f06c1e3e9") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5456fd31-884d-428c-a82d-5b863a0d177d") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bb9525fd-a649-420f-a2b7-bc061dc4456e") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5dbf7115-2028-4d0c-ad0f-f787b49c6b8e") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3a494ece-20f3-4143-8265-97af6439cf10") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9562db8f-3d6d-4468-bf25-e57edb8a7059") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d67f56f6-7247-4658-a756-a989f0d6124f") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9c1af0fc-3c76-4a7f-b653-f4fd81ba3601") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bd802861-a542-4ee3-a25a-000fff3ec6c1") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d13e57e1-4c3e-4b1e-b083-c1278a1a6f35") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9aedc1dd-ca9c-4bc9-b280-419ed993295b") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "53a0aad6-a134-4557-994e-dad1645026d8") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "dcdf8acf-ac63-4baa-87fa-8348c21cc451") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4022b005-8497-42c3-94e4-0c54843662d3") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "31a96dad-0846-4209-b382-55ac80aa9cc6") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ab2afa36-e384-4dc2-b3ce-17e7b7048c3c") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a7adbb7d-9852-468e-95e4-efcb3add0c10") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "290aeb27-fde1-444d-acc2-5024a90765b8") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "df7cb764-20bd-4878-a43b-33f73f5c0fd6") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "69cd15ef-3c22-4a62-beb2-740b9db992a7") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8a41fe9b-c7d2-4e3e-a446-40b16bd28075") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2e0547ff-21f1-4a0c-9485-d7209015179c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "93c0295d-57e5-4fc8-8558-ec687eec88c5") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c3712d5f-bc90-4bfb-96b3-29b3d0379121") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b86ef06a-d980-4e95-800d-7243486527a5") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "ba75976b-e699-4587-9b18-b54961d7e5ae") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "c60b3e62-8b43-438c-a057-02deccb0c412") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "a620a106-5d20-4347-b7a3-6c619658a057") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "d2b9378c-1cf3-4737-bc3f-9c91df07cb91") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "92eaeb72-3ad4-432f-8035-6d1aaf5bda42") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "235cd30f-48ba-4ce6-8813-c28602ed53c5") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 163 "Net-(LED29-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "7a7611bd-305e-46b5-a9e0-e74d9269ec2e") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 162 "Net-(LED28-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "bfd0dfc3-b476-4874-8db3-fffb35bd793d") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "9c89755c-0ba8-4777-9c08-47b5630314e4") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "337909fb-4cf2-4ed2-8ef9-39edcc35877c") + (at 99.5675 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_2" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "66e9cc0d-017c-467f-8ea2-a5a98f0097e8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "52fc669a-dab4-4aca-9d20-61b9736acb6f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b56b283d-649c-4987-9eba-f64be0e85ef1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "899c35c7-8a6a-4061-b2e8-7d420f9d346f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/2d74cd29-2d82-437f-bd19-6aecdc773ddd") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "30d00938-5c90-4cf1-80f9-793c3a0190dd") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2cb3a041-c9df-4d93-b3a8-4266f549a78a") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4d290d14-6a01-49f5-841a-7f789ef923bf") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1540f1d6-ed41-433e-ba30-b91bd377bf8d") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "56cad646-1a29-4d89-a6b6-004fd0850368") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1b562e8d-b8ce-4382-9965-43115cb30bc3") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e316509b-de13-4647-9357-b5cd6ac6c1dd") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a2d05fe7-b278-402f-83ae-135ac72699cb") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "515ebaf3-f3e6-472a-b617-fbf20875de3a") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4193bda5-6939-44e5-a48e-7f78137821de") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "5e9bdec3-a023-43a0-9353-67753e5735fe") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "eff19c76-d631-47e7-a346-60bdf0387f85") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7eb7a460-f806-4162-b0ab-12e356fe9110") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "684a2bc1-138f-4f9f-80f6-b5efb2332f21") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "143d71c5-53b4-4578-9e52-48047218e6bf") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c84e9d8c-28af-4c50-8397-73924182324a") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e9e8a1fc-292f-410f-b075-8a6154c401b2") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c36665b6-395a-4df0-a3a1-896ed1950f50") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ab14e89d-0883-4102-b6df-bd8d5ed1ebfb") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4d9f957f-e1d9-4dfd-b441-4033047b6f64") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ac806ccb-5796-41ab-83ba-ec37bf21996f") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f26f3049-8d72-4d51-958b-748bc15b2753") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e39206f3-041d-4c7d-a8e7-19be95b02a9b") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a69be066-0a3e-4d5e-8f21-171e865d720f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e4d0cd9c-0056-4aeb-a0b8-bcd8d6d8f7b2") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "10506244-421e-4d47-9308-39285613da78") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "269be8fc-f84c-4896-b963-92207dea2ecc") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8617b058-d4d7-4195-b094-b1d8930df74b") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ed5c15a5-105f-4d45-ab40-0317c7bad18a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "47570600-dcb6-40c9-8dcf-4a4f41d2045c") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0355c3fe-6c85-4e5f-810d-7b0fad87be7f") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "25f2f0e4-101f-4835-a2eb-61e144a2a88f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "510a02f8-02b3-4f9d-b142-372fbc1553a1") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b07fd0d3-a785-4140-9691-6be851266d30") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "9a2a1bee-52b2-46f5-a171-6f4def5666db") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a6abd4d4-1286-4e25-a65b-37e59da762bd") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c1da14a0-bdfd-4886-b20b-7141ddca182b") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e8b9b553-e70c-4145-b598-5df7bf59c9bd") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "fc373d17-8a51-4150-a11b-4180f5520634") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e2d30e08-b5da-4b6e-8980-af5695b4f196") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ed8d18e9-5778-4a17-abea-d41accd1a59e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "61fb9600-ac23-4052-8396-21ae9a2608b6") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "f4d602be-8b88-4f71-bd91-8242a9dd1083") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "30002206-9f63-491f-8ce9-9ab36591dfee") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "6b409eb0-829f-4b0d-a216-b9482bc86cf6") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "3e3d6114-3331-4360-b38a-b66143028ca8") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "1e81c70e-8436-49c9-ba45-55be5be7c8d6") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "b18cc605-f011-49d4-8475-daeafd36991d") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "cd1a96c3-99bb-408a-99bf-502d124cfb73") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 6 "Net-(D5-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bdd99a67-caf8-4db3-8b7d-83693c65edba") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 6 "Net-(D5-A)") + (pinfunction "2") + (pintype "passive") + (uuid "1dad1a03-4b29-4f04-abc1-c1b394e79266") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 6 "Net-(D5-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f2766468-168a-4608-b22c-edf4dda47a8d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "33a906f8-94cf-4f4d-943a-491caed35eed") + (at 190.1075 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_H1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "bd2fd026-3e5c-4679-a3b9-524834fb9d5e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "fadccc25-90f6-4026-9b61-cdc8be0f77ee") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "8542dd99-026a-46d8-ad90-89836a9e9b0c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "ec5dc29d-3347-477f-ac28-ed38ec2569f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/5a35b730-0a11-44e1-a4e8-f548e09e8d77") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9a629522-c9be-4c68-bec2-b2c9786ce9eb") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "622ce648-857e-42f6-a49f-21213dd0d88c") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8c104a4c-4865-4ea8-9b80-e9365f2800d9") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4fa3764a-42a9-430d-a17c-83a14abe9f78") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e1fbc042-dd02-4d01-8fb8-3f05cfc86d8c") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ddd4c8a4-f41c-4b39-8738-ac03dc20aaf5") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5d3898be-9c83-4fb1-b530-8a3b527dd2aa") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dbef2ca7-b593-4c65-80ef-a680e143c19d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0d42b74d-e68e-4560-ae3f-07195fafab7e") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5c6650dc-6d99-454f-adc1-1d3c4252e656") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "978c357b-d471-45e1-86be-ecce1ca0b395") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "31d74095-5e67-476a-8b88-e73247d0995b") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8633830f-c82a-4491-836a-cdb7d6a0f342") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f7dd0751-dfef-4518-b75f-1fdbe95ad0fb") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0cc1f6a2-6c6e-49f0-9f9f-426fc580b643") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a45546d8-67e4-4e41-9e25-8a096d05e6be") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0e3e9f96-698a-4bd1-89e8-dc03643ed6ae") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "24aee98f-49b1-495f-ae8d-6997fd2de5b9") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "eda4c27f-b461-4bd5-83be-1c4339b42ad5") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c65a2153-6095-4408-82d3-56d19fa2e25a") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4679f808-0639-46f3-9eac-07cd69b7c519") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "528a22e1-1c38-4a5f-8b76-59b68f4fcb3f") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5c2fd510-6148-4272-9eda-a5f99f1a4f3c") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b7fec75b-f5a4-47a9-b70d-ded105fabf32") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9857a60f-6108-4c69-adf2-bf12a0ffe77e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "359f4f6d-29e9-4738-8544-5708871c678b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d6c5e71f-1933-4d97-ba3c-740324b4aad4") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e927cbf4-a2e4-40bd-83d9-f0229275c63d") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "db2ee6b7-2e4f-49c8-8f27-980b16a4eba7") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4e51d8f3-2df3-466a-aa36-42928a359bfa") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a9530c93-342e-4a82-b11d-8ba53544b9b8") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ff104f7c-29be-437c-b9c9-6579473b7c73") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6bf15710-4df5-4b35-9efc-d8ca28cb7a1b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e6093fcc-fbc7-4213-8df0-085f569dd454") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "bb9a70f4-0db0-4678-a396-0cb10c802eca") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "fa522499-89b1-4c12-ab30-eb13732e6f8a") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e9381565-0375-4922-acf1-6fbaa2b8dcc5") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e6ff81f7-ee69-444d-9207-c9ea63cd2bce") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8fe805a5-4f67-4bc9-954a-1024301453d5") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "58fdbefd-483c-4cf3-b6f8-4aebc31686ed") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dfc6e4d2-ea7a-46bd-ae82-4ccd3d0267a6") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3c1ac4fc-b306-448f-845d-fae17179f0e1") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "428e1fb7-3a68-42a6-8733-03b40eab915d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "d4caa09c-80ee-4c05-ac85-67f7d415288f") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "1f628fdc-c65e-4ef3-b16f-700f1d075744") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "8377e550-965b-43d7-b7b9-2a0e01f0c3fa") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "bccca72f-c2ee-4d7a-aec0-b2389c450a19") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "b664765e-4221-496a-a23f-cac60c90c9dd") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "40c2bf28-7eaa-4402-93a5-0b7a666bd0fe") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 63 "Net-(D41-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6b6e3868-4f8d-4349-99ab-dad9c1c54e20") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 63 "Net-(D41-A)") + (pinfunction "2") + (pintype "passive") + (uuid "35123837-5761-4611-abc0-51631767eced") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 63 "Net-(D41-A)") + (pinfunction "2") + (pintype "passive") + (uuid "82593279-fc64-471b-afc0-569a21a08ee0") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "36d4997c-f8b6-42fe-9687-98dc7989a848") + (at 213.8675 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_8" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "30b933f6-74c6-4536-989f-dbcc580b5fd1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "29ef7f3b-1705-46be-b301-3a363dad99db") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b58c04af-2464-41da-b217-e1f0f40963a5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "8f3de72a-dfaa-4a22-a980-554913f82cc3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/305fe994-b92b-4ddf-ae76-d7eba277037a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bf0072ef-7878-425f-aa4a-68c5bdd5e48b") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3a792014-a0b7-4853-b952-791cea4fd966") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ff87327e-632f-4017-b555-23e59723ff60") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f42bc11a-00c5-4ef5-86a0-dd4998a8b496") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "76f0ea8c-8c37-4963-8f21-2f310e0b9254") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "689b085e-7edd-429c-9f7b-817855879f59") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1320a3f7-b7b5-4d0c-b5d3-d9ace502e9f6") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "91a1de14-ed74-4370-b1ac-c3ed470a6ee8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bebc1cda-5d91-4dcd-8279-86fe9fe6e903") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "42445a4a-c3d5-47ca-a242-741ac1ea3ae0") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "0f4b0974-9255-4105-86a7-3990fe6d5888") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c453f90c-f364-47b3-9db3-bf9808f39a3b") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b4ceb461-7da5-4a0e-873e-dd1ed1db66bc") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "78f4872f-5883-471e-9e05-8e5122dc60ba") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f08ba58a-66d6-4b87-b27e-dc465411f4ea") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c72a6a20-633f-4cbe-bc3f-cf0a767d04a1") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fc9538a7-c5dc-4fb2-b913-88d950a88eec") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8253e28a-2b7f-497b-8f43-4366daa0f6e4") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fc4bf093-b601-4288-87f6-fb74f05ed156") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "aad839dd-94e5-4b1a-8e58-018ba195daa2") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b2e25ed3-beb3-434e-9439-e565440ba948") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8d1065d1-69ca-43f4-8221-e7566c626390") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "26c826d2-beb7-4cd0-9fa9-ecfc1c048b82") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "22b1a16c-d8d1-4538-a9a6-a877a45f7daf") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ebd4c0c3-841d-4b03-8b59-8b77bad2b4f5") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "844fefc5-7942-4fa7-b5e8-d824e3e2913d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "edefde25-1adc-4629-9581-2f882e6f6d68") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7c6f6740-c5c4-42f0-bc93-dfc5c2e925b3") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "01271c98-168d-4a70-af57-e974bf83440d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb091e36-fffc-4003-a617-f83a09d7250d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a442cfb2-0e8e-4820-8768-a130c2fe1a54") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f109702e-3994-4073-aecf-bf86ca13e5ad") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "95b69c71-2df3-4e97-8c14-4e21be209cd8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "69d6d635-e00c-4062-aa3d-4527a1281378") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "f1ca2da3-55b5-4da0-9980-59cd6683caee") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dc4fb121-7a36-4d7c-8321-9920279e53f7") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e855bd6e-f5fe-424c-93f2-8631e2e927ce") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7e0e8897-3f67-4b0e-a82c-65726740f84e") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1179da56-ddc3-4435-872b-6da30b20a2db") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6f97d743-052b-4200-aa67-c33e3b3cd2ea") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b63ee73c-48b3-42ad-be4e-fa491a5e6f20") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "38f11df9-dcec-4d22-aa2a-2752f9050bc6") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "1e780cb8-a56e-42d9-89a3-5287ca555ef8") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4fdf7a25-2753-4077-84e7-97097b300b1c") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "477b5447-933b-48d0-a13d-95222e75af28") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "505b3bf3-c720-41f6-bfef-2627d4216817") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "2a9ee421-66d3-4e3b-acb0-493606e01511") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "f98bdd55-ebad-4dc7-a1a0-34436da1452b") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "b129d25b-d6d2-482c-b44f-3beceb253db4") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 12 "Net-(D11-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ace8535b-731b-40ca-b877-c767473c1791") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 12 "Net-(D11-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7f7d1328-41ec-4fe6-9e5d-ca0488ee5f6a") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 12 "Net-(D11-A)") + (pinfunction "2") + (pintype "passive") + (uuid "30710bea-c0e3-43c9-8048-321e0456abf3") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "37e2e108-88a2-4d3e-82dd-d3d5af538725") + (at 223.4189 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED24" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "5491e492-6167-4ab8-a4d8-5f9cd017218b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "fa331ada-70ca-4c6f-a14b-0b49ee70ead1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "11715e54-ce84-411d-bd99-493279a66cd4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "569b32ea-8a63-4261-8577-44e3ce807a01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/71bb0882-991e-4007-8691-cab0ea025da7") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "39067a31-86f6-45f3-af5b-6ffdba9fe96c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "73bfe578-90da-473f-92c7-fb8cc7e46fdb") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "75b87e3a-df5d-4ab9-842a-120b5b8a8c51") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e59cbfb2-3d06-4eec-92d9-c8b0b2692a02") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7e7c7d72-f6b8-4f52-8092-247881259f91") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8b9ba2fd-2052-4f74-a099-4d269e913fec") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2ffdcd8a-c084-4d73-bf9a-08a35ed10b90") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7e45ca5d-5d28-4599-b852-0949b7c4db27") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d7bf129f-be09-4004-84af-939a6483a455") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ada811d5-5092-42eb-8534-af3aeb55cad0") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "06319745-82f9-4492-ad99-87a6aba2e17e") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "554388d5-087f-4752-9b31-e0dfbe09642c") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9208466c-fc86-48b3-bf2a-7566b08d20ab") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6698a2e2-dbab-4581-8ede-1aa8b84ba389") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8a933277-549d-42bb-a3a6-923da07011d7") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c9d9a4dc-37b7-4d69-9ab9-a1d622b57260") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c9bc1010-9727-41b1-bf3f-a7d98fc7a9cc") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "22a0de06-689c-4f8c-852d-6ff198d2c0e5") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2e2a669f-64aa-45dc-8231-e3b82a11362f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6c344963-acc7-4380-97cf-2efdee508511") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f99e482d-9c25-446f-b194-123df287b4a6") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "70ed29bc-0b1b-4f34-8f76-e57133e28440") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "53c1c2a4-ad54-448c-8af1-60ba11877bda") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5db55dd5-d817-483b-899a-1a126f40de39") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a90e2fce-4f8a-447e-820e-20838f3a20f4") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7afc9fd-17db-4ddb-b122-b14d45b98e9d") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "acc3416b-496f-4a96-801d-c8437cf0af07") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7b7e4f20-193d-43b5-a1d3-d64c49e5facd") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "862a21a7-8548-428f-a936-90d8e2a669de") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "612e0dc4-90d4-4053-b9c0-0c54e7957536") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c10ab8e5-9a4e-4718-be14-080ee18c2580") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ec915bea-cefd-4685-92d9-86f0a27874a7") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46c78194-ff99-4a70-af9c-d7bd9633b8b1") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "60a1f6b4-03e5-448f-b294-6c71dc1136e2") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7373b0bb-644b-48d2-ba00-e3a9b46077c7") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4f2e26ad-cb30-461d-8580-e153a251d6d4") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5de8d69b-ec41-4716-8768-4d2af2cc88f4") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "df55870f-d880-4dd3-9639-2319a1f62b31") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "acca869d-99f0-4f71-8086-fbb69fb24ef3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "f132b8fe-2552-40e6-b6c3-5082d716f72e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "bc0cc02e-fc21-4025-a09b-b7b78781e43d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "9ede45e9-fedc-4a05-a72f-4b872e56923f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "4cf88ea8-26f0-4a12-abd2-61371fe92cb5") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "0cec5de2-3337-49cf-bd57-ca84de88c764") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 158 "Net-(LED24-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "8a8d6f59-cf36-40b3-a889-86783e6cf830") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 157 "Net-(LED23-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "9309ec7d-331e-4f00-8f0b-9bb336af5329") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e364c256-1aa1-4c74-a8d9-45678680c3c5") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "38989ebb-8aa2-49da-bfd1-fd40ead62946") + (at 90.0688 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED17" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "5580516a-1dd7-4159-9f33-ae09248a8cd0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "e34aead1-61d0-434d-bbfb-7a153b9c3bc2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "954e6d8f-ee52-42fa-bc0c-92a8cddcf101") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3317bb29-05db-4827-94e8-78b7c0a16f54") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/a3a0d376-8cb8-446e-aaac-89765570e8b4") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "fa4df393-9475-40bb-baea-3bc51e35822c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "610be881-7ba2-4c62-91bc-ec492c7e14ce") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "54652584-49f4-480e-b491-3e38f3200ac2") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8045b9cd-2bdf-414b-b456-1670bb7ad7f0") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "74f84aef-890e-4501-b325-a2b9234e2297") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2d778b73-12f1-412f-a5ab-a4d71e3efe9c") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a76d3cf6-345d-402b-bd43-b6506a08139f") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "38391e97-1f4f-4bc0-8fdb-e0a537744f59") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8db1062b-3114-46fd-81a1-64d876faba8d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b791f161-3c29-45bb-9af7-03af4b34bb50") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "04fefbac-f47f-4a99-8d5b-29625740ce58") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4d303fe4-e0c3-43d0-bcbf-0702bb81c503") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "71e223dc-a427-40c3-bdcc-d08dd5b0de35") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e298c045-bbe4-4c62-81e2-cd2aa49c91a7") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e0731ea0-2710-4764-bc83-f3eabb698dfe") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e3971723-e4fb-4da0-9f37-09441a0528b7") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "008e1dad-6326-4f2d-ac90-60d007f68c4a") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d508add2-fee4-4c5c-b476-78986367d3cd") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b097eb64-bbd1-41e1-9d57-5e1f87dd82a5") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cfc1824e-f26b-4521-a4c4-de3f666ec750") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ef6fc82f-ae23-49cd-8fde-9f8fcf7ba808") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "32a589ec-7aba-4335-b448-5b72c5817126") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c270977f-d5e9-4a08-80bf-5c70c7b1882d") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5587c66c-cadc-4b76-8fc7-a7c7288fb56d") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ab53ef06-db98-4a42-b013-f62dc3ef9eca") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a5b080ae-19fa-411e-930b-c29bbcde2a98") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "29434092-f66b-4ae5-b47a-5414591fc817") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "aa53dba7-62c0-4674-b735-c31eae099525") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0ac7193d-98ba-48bf-a124-28fc56aaa3a9") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ef0d419a-bd9f-444d-afab-39e8cf009e23") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91834b3a-8839-4df0-8f87-a9b008dce9a0") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "170e83a1-7c64-4e25-958a-d9839f98fde6") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7d99b316-1e8d-470a-a9be-ef1c657612f0") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3b06cc22-786e-422b-a16f-b5dd575f4862") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2691e241-92d5-44e5-8a75-26208abf5434") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "093e651f-0f2d-4f00-926a-cf8b6916cdaf") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "59aea519-ce88-4074-bda3-b5a784c664a5") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "09064cdf-ff67-48c2-acd8-a2615902a0fa") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "2463fc47-b1a3-4c8c-b436-a9084135db39") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "c179f4c2-6718-4ff2-bf21-8781e6923a4e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "abd058ae-72f2-42c2-841c-c7251987a830") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "eabe173b-9b74-4b2a-975d-c741ec1b08f1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "98b88436-dbbf-4674-b1b6-cfd1c13bf96b") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "47eef892-8c1a-4146-bbf9-54de3672f63d") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 151 "Net-(LED17-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "70e68eb2-efc2-4b14-8e94-57b014c3a283") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 150 "Net-(LED16-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "3652a39b-7fdc-4571-8464-7708ed17be59") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "5dc34fc1-3c91-4ba3-941e-78ca8e8f4f4d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "3941d944-9532-4a7d-bb3d-43fbd3b1f8e3") + (at 175.7675 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_6" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "ea6d3a9e-ca2c-42e4-b1f0-bc9440e6ab57") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "1827f1ff-03b2-4192-a885-ee626f28de08") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3df5c383-6500-4cd4-a2a1-0eb7a1778fb3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "500c9b71-2dcd-4583-abc8-340ea633ff47") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/61323b9c-135f-4d63-be56-48f93becf527") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "00da29b1-1b02-4235-acaf-596311d6345e") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "07f572d5-8c3d-41c1-93b5-293d3a00244d") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ca02f7d4-71c6-423e-b76f-90b48a47d703") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ec9351bf-c0d6-4d39-97d1-35947377753b") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1aafbe99-ee63-45d7-a7e7-bc0c83c6013b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f6d73512-258e-4491-a997-34c623cd7a43") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7674fd83-0f2f-42c8-8a60-d412fe904cfe") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9ff7c372-f67e-4ef9-83e0-b532aeb58bdd") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "498a272b-d856-4e1c-b1bc-6070c4eba460") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b855fb0d-cceb-4d9b-9b74-49f2f347c007") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "d9cdcf9a-f4b8-4c8d-8b6e-eb8a453d86f6") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "78bad992-3bf2-47ef-86b9-2b676db3b095") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ef849939-394f-47a9-92fb-89e2ae8afc18") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "07c0f13c-8d18-46e2-b7c8-c1e7aec41039") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d1751350-43fc-4a43-ab18-f1a07b9deae3") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "79ca91bc-f0ae-47a8-b9ec-1ad35d3e96f6") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d2dad3ee-ce45-4b6b-af06-9c67cf1aee2f") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f3b03243-eb80-4357-944f-e2538aa33c6a") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "beddabba-1612-4895-a6de-eac023af92b7") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a902267f-de1a-446d-a39b-88f2694a1a55") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "73e14153-3f1a-4f56-a06e-63840f0864d2") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3513fed1-fbc1-4d45-a87f-e13b08f71040") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "566467ed-81a1-402b-91e0-90d91db28601") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "72fc8b39-dd14-47f3-811d-4963a3fcdbbc") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "53dd7edf-fc61-4bd1-aa20-1f468a1a7ad4") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "48efac86-1dc3-44da-9069-d5ff334fde02") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "07d9420c-bb9c-419f-b45b-f3308d5e1af5") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "29d407ac-f945-4429-bb63-c03ac1d7534d") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cf1155d2-4853-44e3-9c69-9b84b07e4a15") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b3684938-8a25-4800-a6fd-e0c0fdafdcd5") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "be54f17d-057f-44af-adac-0b75ac9f5753") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7065ea3b-be00-442b-ae1a-d0470a070fbf") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c3f82986-c93c-4e61-bb65-de6f7574e8f2") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eaaf0d97-fea7-4160-8d13-b434939c34c1") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "89f71f0f-f024-4cbc-abb3-1f868c81529f") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "20b19b89-0c01-4ed5-8248-e739bb516a10") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "21e77d32-60ec-47ce-981b-4f291e2c60de") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a0d4f097-dde4-4275-bea5-9c59ce434b17") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "923baacf-bffa-4581-a9a1-86d6560226e3") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "37d337c9-1939-4653-adbc-6b18eb49a0a7") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5de1c825-cbe3-4ee0-87d9-26a486faa676") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "19475baa-cd93-4c18-bb1f-347ac2bc074a") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "fb1a85f4-ce40-429f-bad7-42a9002cd3d5") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a1d38f64-9589-40c4-a598-4a93bb1b2e9c") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "6b48f5c9-4bb9-4300-9bb2-fa1869190715") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "b3899e53-cfee-41ff-888c-60c3d737f455") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "62cd74ba-8c3c-46b0-91bb-e3555cbfd5b8") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "b3661046-8ed3-4eca-bfc7-31d2111a6a32") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "11105e18-5804-429b-87a1-8c9bddf78301") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 10 "Net-(D9-A)") + (pinfunction "2") + (pintype "passive") + (uuid "23ede7e6-779f-4272-8774-013fef8105e4") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 10 "Net-(D9-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ebccc631-112f-461f-9b9f-12bd9ab14b96") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 10 "Net-(D9-A)") + (pinfunction "2") + (pintype "passive") + (uuid "1e86fb48-10e4-472d-a70a-f1edbbf5a2d9") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "3a0f52b6-696d-42a6-bd5e-fded9c27603a") + (at 80.5038 102.2887) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED2" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "1159ea81-3e42-4350-a71e-40d722e6613b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "208a1d41-a840-4bd4-b261-167873ca92d0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "972a4a29-61e0-4ed3-b9f7-0f1fdc841663") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d6f81189-8aae-451b-8d09-0bce60b3c127") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/2837a6fe-b6dd-44ff-b76a-52a8a3c71f03") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "29f51161-ed80-408d-b996-fabfe92a52ba") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9434cd15-3a6d-4005-a92e-360304da1b46") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b3ba1178-9661-4b8e-88a3-76693f93266b") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5ed9e1da-83c1-43c6-90ae-5e9b8064ffba") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6d334cb2-a88a-42de-a9fe-57ced53a8181") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "882dadfa-7da7-486a-9481-68d2b2801dbe") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "64423235-0eb4-43c7-9ab7-e17529accfe6") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "20eb6eeb-7201-4fae-999f-2fe9666891ec") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3998d45e-f640-4960-90c5-7d5036d532d3") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "642901db-904c-48ae-a479-4b23ac23af14") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "36f5529e-1b6f-4abd-84ac-adc245c43dda") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0645a292-8ee2-4ccf-85d2-6a585a0ae0c3") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ef5d9850-bc31-4761-b7c2-b07d1eec04ec") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "657c65cd-acfa-4956-925a-b02ece7bec11") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "44dbc4e6-560c-4b17-8cfc-06493405b0d4") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d44b72b6-d5fd-48c8-85b5-8f5dae89e68e") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0181e82b-7a01-42ad-956c-e9cf50165c1f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4185583e-ec90-471e-892f-83aa692be98f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c77a3822-8559-4989-8337-bcb283c4a9df") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8087346f-5b1a-4e73-805e-ae9f117443e7") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "abd300ec-2b4b-42df-938d-a6db2a21971b") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bb5956c4-934f-40bc-afb7-b15bd5df0fff") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f1d1a84d-64a6-40bd-ae82-9ffaebe1cda8") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "50b85791-d6a1-4f99-b119-46988dc50987") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d57d1694-8388-4143-88e1-ad7510a39d7d") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d888facf-0a14-4bc2-a763-481b4da278c8") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "139b0f88-271a-4b4d-a78b-0199a30a79c3") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7fd3ea7d-7b9d-4d79-b4d1-c57e98b54eb4") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "56794b33-a48b-4e83-b211-862a019e9b0a") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a462db28-4426-4d8c-8e64-62750c8631da") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "094ce64a-6060-4474-be9b-14b147e9f7a9") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "47e4e278-d14d-411a-80c9-cd005eed839a") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "42a8a479-ea00-410e-acaa-5481aafd0460") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b98ac8e2-ae4c-41b7-a1c7-a80eaff0697f") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "441228f6-ce20-4ee8-b723-15a1de38f6bd") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f69c07f5-1ec3-4e02-9023-6bd8852176ad") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ebdfc589-66d0-459b-ada4-f5ba7c23caaf") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "97392e84-08b0-4234-b895-665b396980fb") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "8ad1509a-271b-4f30-9cb0-822765e116b4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "bd990c3b-d6c1-4cc5-994e-0fa7457cc14f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "0291c703-a163-48df-b136-a7c0ef71ef28") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "3ec30f7c-c04a-40c5-b7d1-740a215922cc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "310013a8-cf7a-4951-9a6f-2aba1f8dac9f") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "e734ff24-cb3f-4bba-afbd-38262858a993") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 136 "Net-(LED2-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "69b38b1f-3606-4507-bda5-d499e7827448") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 41 "Net-(LED1-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "a97539e4-066c-41c0-8706-89a4342ac3e5") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "7be0fa93-328b-4a78-923c-3cae821272d0") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "3baf838c-6073-405e-ad81-08396b99cc1a") + (at 271.07 173.8312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_FN1" + (at -5.29 1.6112 0) + (layer "B.SilkS") + (uuid "2ecfe80c-b63e-4389-b195-cc5c60ada253") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "4c154649-80a3-4639-adba-dbd2024f1ea1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "c42d5f9d-35d7-4e5b-8fde-ae4121a4cc2e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "7b4f8908-58a3-4f8c-a612-8cff95ae0a50") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/7bb0381f-38aa-46b7-a1d3-a04770ca9b6d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e3af22e6-bbb0-4bb3-abd3-5f113abc376c") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a770b5cc-adec-4666-b523-293e4cbaa58c") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "31d266ce-567f-4252-8aca-a259d32cefec") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "276a7e1d-89b1-4cc4-9e4b-d7a17d88268d") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7a2f0e48-9509-4e17-a5b8-62dfcacd6258") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c519eead-0762-4508-a1c3-5fea996edec9") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "826f08d2-1453-4850-82e0-b243bc61d7d7") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f875e8fb-6034-4399-a6a7-0d8a93536942") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "db937a02-53d0-408c-a60a-4fe179f0cefd") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ece993d1-2c82-4621-9dd2-2ca06341d135") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "646cc1ca-5dc8-4d13-80c2-b24a096a5457") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "360ac3dc-f0bd-4469-bbe6-57a4b7232876") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "337b36b8-7d27-4618-b4c0-e33a0d790f84") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e8646fed-26e6-460a-a18b-cc34c6e1de2e") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4fa63cdf-a631-4dd8-8667-3c9858bcdb19") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7b8d06da-9de8-459c-95c0-dcfa45c7cb14") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "847c3ea8-ec2f-4338-9ed0-95bbdce52339") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c9d9e926-80ac-4a3f-a601-a5dfae43bbad") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7653b37b-c06c-4fe8-92e4-c44c284567fc") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ca890cb3-2936-4ba8-a724-3ae1e9536bb0") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "daf90cb2-c1d3-43d2-8872-b9c4397ed519") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "83d4ec90-4cfe-4e24-94db-235d340eb985") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "926e290a-4b23-4f0b-8390-2f097b10bea3") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "254b69b6-4fc7-428d-bd16-2c26ee205645") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "339e5a9a-c3b4-4f83-a359-c290c004ff2e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e40b98c0-8026-47b2-ac91-00b64073f758") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0e320a1f-39f4-4470-80e2-fb0b7d0e66f5") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4c6c465e-04fa-4291-8986-d58367c65238") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "50c59db6-4b1f-49eb-b89b-1d8b9f8aa741") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d9e3528e-0f3a-4129-800c-fbd6daf314d6") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "68d91d21-8530-4a50-a5ba-3f4086edcb51") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "902acde1-d398-4467-87a6-3cf6bb559f51") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0c90358a-5a75-4d1e-b191-60de89032760") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ff36d588-c60d-4ff9-b6ae-2e5156f7b46e") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "f0d92d4b-8c3a-40de-b13e-867b0d260301") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "20d3d530-eb0a-45ed-9b16-cc16e371158d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e037f588-2274-4aac-842e-e06b65e9efa4") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "95142e28-ec12-46bc-a046-2e1ff3df728b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6becc0ab-69d9-4d42-9b74-a1745c69fef1") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "23c3bec5-2f69-468d-897b-5ce8e74cad13") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a7ad2ae1-7fc5-45af-a9ff-7b09ca22c094") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d1fe3534-4b5d-45c3-bddb-1e3ae515aac8") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "ac0c65b7-9fce-4c8d-87ab-616cdfa5d875") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "bc346c23-7eb4-4bcb-aed7-5b571086abec") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "f512d95e-8324-4f32-9ccc-a73cce74de53") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a46d60c0-863e-4043-b770-01af146f2255") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "0dfbcc49-7cd6-4cee-8dc7-82dc88446335") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "bacf9d63-dd56-45cd-ab0f-d5449b974b17") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "3b91fee8-bdcb-47fe-a26e-a44050c61028") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 113 "Net-(D72-A)") + (pinfunction "2") + (pintype "passive") + (uuid "357644a3-a3f7-45d4-8fc3-f00f1f7fac3f") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 113 "Net-(D72-A)") + (pinfunction "2") + (pintype "passive") + (uuid "3ea95811-db26-4680-95e4-041eed2cc2f6") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 113 "Net-(D72-A)") + (pinfunction "2") + (pintype "passive") + (uuid "e0600934-5a30-4bb5-b0e9-725b66bfbe0d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "3d823b30-94ca-4765-9d16-f1b9f6d98609") + (at 61.445 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_ESC1" + (at -5.475 1.7312 0) + (layer "B.SilkS") + (uuid "857db126-6c40-4f46-b2ff-86e611ed8248") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "3d59c89a-68ba-4c23-a2b6-25e61d76b0ed") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b34e3de3-9ec9-4157-abf3-a4eb61a674ec") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "e4690160-240b-4d14-8762-58f812fb386a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/4e8d21a3-bca3-4293-acd4-2a29e96b4ab4") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "251eef71-6eda-4dd9-aa1d-6b9a56362c36") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8cb4f8e0-a6b6-4c38-a8e5-64792bcd76b3") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "96d6a710-2ff2-46ca-914f-e9651a725daa") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3d6e29af-c990-410f-81fd-13bf9ff36c8d") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e3e68d77-9839-4f88-a498-9a53a0734289") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "93f57161-f4f8-46a2-89ad-bfb977916cdc") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dca952e5-73a3-4e37-946e-1473b6d7cab1") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5b456c49-c0da-43f4-bfbb-224d581dc56f") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9740b76d-4c2d-45e8-861c-1515db8d11c5") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "288bc296-97fe-4c25-9d1c-11f6440161f5") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "ea7cc3d9-091a-45f6-8031-362cc3778bcb") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "60f18bd5-4d71-4c2c-8148-ae5108b823ff") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "562ae84c-1714-4adb-87ca-aefe7ceea31d") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "763d0f2c-ccb4-4de8-afc0-924a7c90b0c4") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a4dd61fa-3c8b-4221-bb28-3388e3901049") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2887e037-b29d-4c50-87e8-46ebfb09c9bb") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "49843cb1-f83b-4ea9-be70-62b7db54b931") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "102f3a10-deba-4c01-b9dd-64539e4a93eb") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a3c12915-f860-407f-9f5c-4f3a1539fca9") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9b86e153-bece-4a3a-9750-a073fce1cb40") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b41b5929-7e9e-49ad-8d5d-d925bdb7efaf") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6563fab4-9656-44b7-81f6-92d7ee051670") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e485f741-f366-4a80-bab5-9e3055ec2de5") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8c610423-fcf1-48ce-8334-c4ea1a583862") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4b940225-a8eb-4925-879f-1b6260bdb40e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9a46fa92-8ed4-4d43-a683-ba06c5458b04") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6c1a6230-ed84-49a1-a9aa-9aafec1347a7") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b8f17eba-bdc6-4d8f-9034-e520a2058e29") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "969d0de8-d0ba-41f6-b66f-f47ff2d5a15e") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0461d99d-1242-4dde-b7a5-d13cc0ee4740") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "30a9f188-55b9-4f71-bf62-967b70b45995") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3059a73e-5a89-41ab-8396-369f819d6e34") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9c5f2b83-1230-4adb-9c55-fc242e261099") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "72882b61-4af8-42b7-a7dc-676e5027f271") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "c15cee8f-c987-48f2-adc6-7c02c7d36775") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "86ce0c77-6663-4983-ae87-fc9f2f9a301d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "04ba8347-6c37-4b1b-9079-792b5e3fc4e8") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "efe07176-8aaa-4a58-9907-b0f191c11f13") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "61766041-2ee1-4a84-af2d-fd37a3bb5be6") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0d25bc39-38e9-4da1-b7dd-5f182e34b98f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "64071a4c-11ba-46a2-b15d-f770e454faf8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d9490497-dab9-4aac-8dcd-e3303ed92125") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "221aac65-d37b-4e57-a51a-ea0edcf06158") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "592b730a-3b6d-434a-b334-7c4b14d74143") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "877111f5-5415-4b6a-90dd-5403a514cc44") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "3723207b-a2f0-47e7-9a10-69e37dd819ed") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "08823712-d7db-495e-88e8-0f4141530ea7") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "4c3d7dbf-75a0-43a2-8fbe-5b117f8b2299") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "369253dc-98c3-4f7f-9149-ed34ec7a0eff") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 4 "Net-(D3-A)") + (pinfunction "2") + (pintype "passive") + (uuid "5cbc8716-cf1f-4d75-a60c-2cf4f271c0af") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 4 "Net-(D3-A)") + (pinfunction "2") + (pintype "passive") + (uuid "393fa13b-bd3d-4bf9-93cc-eec6f626ee3b") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 4 "Net-(D3-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7eb9ddc0-7526-49f6-9db4-06e47adbd8d3") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "3f173f58-684c-4cd1-8011-f26753dd6abc") + (at 118.6175 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_3" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "eda215d8-1a22-4a06-9170-8e6c04a952ff") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "779212a2-7264-43fd-96af-c86c15dc0a28") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b0437da7-049e-43dd-a9c6-c36c1c838b21") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "effc0062-f3aa-4d7d-9ea7-367725672268") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/52184e44-813e-453e-a209-b17b8c4ef316") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "977ea8b8-ae93-451e-98b0-219b56816360") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8ecf93d1-b643-404b-a27d-9eaef0ec36b1") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "04894da6-fac4-4753-8f4b-8126908d077f") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d5a69c92-a365-40d6-971d-54c45e7dc652") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "361dc2c0-36f0-4c45-ae37-885a3abe3394") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a6f244c0-949a-44bd-8c94-d0c271441542") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b9d23549-c353-4365-9e59-4ec7e71181f0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ba020bd1-f00d-4553-9571-28103d619861") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "082072bc-e77d-462e-9b75-c52448d52bfd") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e53586ee-dc32-4ef3-af77-bfa852d4a993") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "54ad8621-1ee9-409b-aa88-418bfa37436f") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "122aef1f-f683-436d-ad6b-0c73c1a2bc9c") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ac171461-f092-4f34-831e-ae1d4984b0dc") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d8362050-fbb6-4d32-bb6d-d6e36bb2f1aa") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a5357dd2-d70f-44fb-9d0f-56160e706679") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "45c63e77-a625-4a08-8759-46ca9fb6029b") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9b7bc4c6-4ed9-4d51-ac3a-c67fe769372b") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e93c3c01-5bda-4362-aa22-ea187571a851") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6996b780-afa9-4fcb-94b5-ea97fe6646d4") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8722fab6-8364-4c51-bf16-f694edb1aefd") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1d31e88c-7e7d-46dd-9670-856e6afeb0a0") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3ca72fcf-a33b-4a47-b10d-72f87929a15b") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "41a3126e-5038-4001-a8fb-346939d6155c") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ced826e3-479d-48b9-bab9-0fbf46381663") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "81589175-3770-4448-b8fd-699a3f80df93") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "441d6e17-a601-4a72-b5d8-e49c9c7fbd68") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bccaf05e-6158-4400-8388-b0d434017c05") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d79b058d-db29-4378-8fa4-a6280d601aff") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "24fa6060-7acd-4864-83e0-717dfe3a899b") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fa4ed3d9-0947-470b-b89c-652f2bcfcc25") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "edf4288f-5a11-40aa-ac59-2f80cf14e3cb") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a58db588-a036-4bf4-b0d8-ee87943bc56d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bb2272f8-ed18-41ab-8364-8bf2fb2318c3") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "10c51dcc-9226-445f-8550-c402f6cc028f") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "48caabf4-a64f-4dc8-a404-fe97387551ca") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0b924c2c-0878-4dd1-8d92-e82ea96573ef") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "08532c5f-8280-44e5-aece-788e5f4bf76c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c47612f5-2f49-4824-87a7-836954871524") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ca58d9ef-df72-420e-b0c3-de7bba74a2bf") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5f439817-66d8-4946-8f48-a532bdab7f5f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f8976224-4f31-48db-a42d-16ef853db4d1") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5102d480-2c8c-445d-bee4-93cc796bdb20") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "fe2f7c36-0589-48c7-bdb7-9be68039d0da") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f6286921-fb8e-4645-ac32-77413c894c8e") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "16e345a9-c45d-45e1-b1ea-6c47e139d4b4") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "808fee77-58f7-4c95-9492-e4217d1b89eb") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "b9709f4b-1b92-4138-98e8-0cf2185e2b86") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "68378d8f-d64a-4eee-901c-206b7886d15c") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "b913118e-a6ec-49fa-b918-eaae8d2d3b1a") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 7 "Net-(D6-A)") + (pinfunction "2") + (pintype "passive") + (uuid "61cbf50c-5c3f-4455-82fe-cb8ef7f47073") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 7 "Net-(D6-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f45344bd-b1e3-4f85-925e-c5e2c77fc7b2") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 7 "Net-(D6-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2c40bf67-9a50-4db2-a52a-afe70a95c10e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "3f39341c-2931-4fc8-ae09-6e0f5ae1e376") + (at 94.8575 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_A1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "47723732-ccd8-4b63-a569-48453de5b384") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "23574403-6eb9-4e8a-9339-b5f74ae299cf") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "cf14b01c-0309-4b54-9798-3457cbdf2b1b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "0712112f-e2ef-4170-8168-07ab3a5a223e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/39d05977-3390-46a5-96dd-b289ba8a83e1") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "09541826-7ad3-4816-8963-c8bb058f4340") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5a7953f1-1e24-44ab-bc6f-59c5926379a4") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8915f143-8cb6-4ebb-aa12-68836e77825d") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "409ab7a9-93f3-48d1-87f7-55f71ee68f23") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "49f995f5-2a42-4188-b71a-a0e22696c914") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "29621a21-a5e7-41f6-9622-708bf4d9a829") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7961cbbc-4a14-40b0-bfd8-2d0c2be4dc12") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f4f1d816-f2f6-487a-8259-e9fc484aa94f") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4f837de6-7eb2-4305-a0b2-b783e70bab88") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3375228c-c10c-4d03-9114-2cbe7c48d6c6") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "31cd2333-5b32-4d99-8b0f-44e2f4cb0b92") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a1fffba6-4e9d-45ed-992b-251461341d49") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "42b0e8d3-b507-4e63-958c-c3a33fc3a56b") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "64904144-3fb4-4c34-919d-98a0d04c4157") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cbe214a4-7134-492b-9355-74eb276942ef") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a8cd0b21-6ef9-498b-8efc-ea9b6500b162") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9a4ba9c5-4112-4a8f-9b79-fbc3543ac72f") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8d486f45-a732-41f7-ae1b-88da79240aa8") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1950fe0f-262b-4ac4-bd39-5abcf1c9504b") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6ba85fcc-a6a0-4463-8ea4-b0fee376aa4d") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "08bb5a95-1361-46cb-96ef-3ad1d7f16ebb") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "de75dde3-fc95-4a30-a86d-76f7e9ebf21d") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4774fd3c-3167-42e8-bb7f-281418b54209") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e848b748-b02b-4a1c-a394-b30451492198") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "41f11975-0b67-47c3-b70e-4bd13d65059d") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bff36c15-f21b-47e3-ba34-99f7694220f4") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8d1435f8-613d-4caf-acbe-9ef30001261e") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0631cbf9-7dfa-43f0-8509-c967c15712a3") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1783c3fd-64d9-43de-be3f-458fc819ac8a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "80fe6b86-495e-4904-9eb6-a8af13743e1f") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "456d6008-87f9-45f8-9728-3f197800e65e") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2743a583-e314-498e-9392-a5c72b12c423") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b47f3383-2339-4df5-b022-e91cc2e46382") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "61d4725d-d255-488b-95d3-aa4553a58c77") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "c755aa1c-0d7e-47d8-a539-81264d6a8f85") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c8a957b1-16c1-4858-a768-3c9b7b1386b4") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d747016d-2d69-4736-98df-2484e246afeb") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "741612ce-cd63-420e-967c-ad8265f613f0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9a2624d0-29b4-4977-b693-46c12f79d5c8") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f2bf8e09-9d66-4f21-9b4f-93f5a1abe838") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6077ecb8-8671-4804-b7b8-e952d0469a58") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "37c3dd85-5e96-4301-b115-5b9d9a0d0296") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d3181b89-fbd7-4dea-bafa-892c0108bc66") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "402258a1-d625-405f-a9b6-eeb82e8231fd") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "4e4fa8cf-02ce-4316-b944-0fcf31f7a35c") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "80e06e27-fb65-4613-89f6-d5fedec631f0") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "2742fdc7-6787-49c1-aaac-8e743b22caa6") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "40fddba2-0172-4d6e-aa5a-c247bda86fac") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "ceef429f-4f6b-43bf-b5c7-f38b3f34b180") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 58 "Net-(D36-A)") + (pinfunction "2") + (pintype "passive") + (uuid "cf7f0f72-48b6-4a54-b95d-6b33a59104ea") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 58 "Net-(D36-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9af62b54-e6e9-4076-bd66-704204fc71b2") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 58 "Net-(D36-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ef0e81fa-11ca-47d2-afc5-f9448ae9089e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "3f457a37-df0f-406f-bfe2-53ca2628d901") + (at 242.495 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_O1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "7a6ae808-6a7b-4a4b-bc3b-ff826c007242") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "b96a11b3-f392-4d36-87b8-907b9621bf93") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "736e7763-a37a-4db2-a8b5-a8fa8e498fde") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "7072e557-a62e-4318-ae9f-b6f3e8b61749") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/043b4c08-e75e-486b-8f3c-9976f9ff7775") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0b699379-e048-4efc-8653-d22b6b3107b2") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "05f67d90-638e-47a2-9ab1-7578825e3ad9") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "83861d0a-675b-4f77-af16-c72df57cebc6") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "55a569c0-23cb-4c28-ab83-5e168ac4a88d") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c4c6de29-b90d-4e34-90e4-a147c28bc241") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "44b1bf9f-b545-4cba-a7a5-17fce6fe3638") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d6bf18d3-42f3-46c5-8760-b8a0055390ab") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "081c4254-e086-4ebb-87d7-3d3877be7958") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f030dcfe-c98b-4c87-acb9-1e281da42a0d") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cc983b1b-a03d-450c-b610-96e65477a379") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "52f1244b-7f57-4ad8-8ef8-010ee193eb7b") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5f8c5c17-0d75-43a0-a25d-05aae8b47a65") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e7a8cc62-5ef9-4b28-9ebc-d0dfdbf3c8fe") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "25952e77-c331-4bd9-8041-94a0b4611839") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cb5bffe7-25a9-41f0-a67b-bb61bb7581c5") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1cf738ba-ee97-4772-a1c3-fa057df682bb") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a8b066f8-855d-40b9-a4d7-82c2a6f22bee") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6bdf0d86-4d6f-4d35-957b-a2a95ac1eedc") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4b87d5e1-4b16-45a4-8907-2db02e9769b6") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "604c4d6b-842b-42fd-8edb-786e25101ed8") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "52966a65-a99c-4e9e-b495-28bf753fa62a") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f3c2771a-adbb-4a3a-97e0-5f8e72e299c4") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b466c558-bb35-4829-8d83-05c306c2030f") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "132126d7-936c-497e-824b-4720440ea4e1") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4b4fc8ea-0171-46d0-9a81-162868f82b2b") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "35e79a3f-7060-424b-8aed-ce22089d43e5") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "65bc5cbd-6398-40fe-8dd7-32fa7eeffc36") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2c7355c9-eee8-4689-b81d-eba5c610a8f7") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "208d93d2-96f7-48ea-b846-1d46137f20cf") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f3ee4b48-2cc2-4101-b489-2358314f78e6") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f1b5150-3c5f-421f-bf8a-1ef14c37bb99") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c1547f31-bb37-4a18-b4ab-8589ed576207") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "708e6311-754f-41be-99a8-4077b952cdcb") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "14854da2-74ff-42c7-9dd8-692178c5e9bf") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "73d70e81-ea77-4ca7-96bc-d89e1a30c1cd") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "75c37c77-3976-446e-8ac3-228747cc2537") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "106ac1b8-527d-43aa-9a58-4e3d1625176e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "af4f34a5-3835-4593-89a6-686f1563b007") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e300d55b-b368-42c0-bb12-cc9bb019107b") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9e4a8340-2d8e-4abd-a085-b131db80401e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "76825b1a-66e3-4507-9a46-c43047fed5ee") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "38a60201-df37-45a5-89f2-7a21ff2bdc16") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d9a2d497-a55b-4ae4-8832-9cb00b030795") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "e24631f3-f5f5-42a0-9ea3-82c62a9ce753") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "cc4ff7ed-dcd6-4e9b-a1ab-0546afd33f34") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "c44bf96d-65ca-4648-aada-9b1993bbe81d") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "aecc7fd3-f8f2-4470-9dd7-cbe96ff8230b") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "92a24c45-6250-4b27-bd40-5cadd30e1603") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "9c3bbefd-6f7c-46a3-becb-f90c51e4af3e") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 26 "Net-(D30-A)") + (pinfunction "2") + (pintype "passive") + (uuid "5c9ca58b-f479-4b1f-afee-29d3b1ce2525") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 26 "Net-(D30-A)") + (pinfunction "2") + (pintype "passive") + (uuid "4b17a57f-d6aa-4aad-9f33-c8fc0cdd61f8") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 26 "Net-(D30-A)") + (pinfunction "2") + (pintype "passive") + (uuid "067b8ece-53c1-4890-9777-b8b5e0d5058e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "40e350f6-97c4-4824-988e-370180410ff1") + (at 309.17 173.8312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_DARROW1" + (at -6.82 1.7312 0) + (layer "B.SilkS") + (uuid "c0f9c84c-9bf7-4e6e-8cfa-e470cba3a576") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "b1f639ab-5fee-4346-bbc0-340279fb3028") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "e73e9439-18b3-48ad-b2fe-95ba61362cf1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "9cc56770-0905-4230-a768-dab6d93aaf42") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1dd40309-298b-4501-a09d-5becae1ca2bb") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d9f3ba3d-5461-4607-94d0-4265098b7f2b") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "22e78cfa-19c5-4a68-8495-c5b17bb1f116") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2cd3cacb-7060-4cf0-86de-f0167bbb5529") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "39093f1a-6ddf-4380-852f-b3c9ace4e7a8") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6e87953e-f830-4f4e-98ef-3683e6417161") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9dc2cfa1-c3a6-4c71-bcfd-fea3918ebbe7") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4f9bd090-d67e-4079-8799-16edbc59c7a7") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5ee3c24e-5690-4b12-ab7c-59d2c2316dfe") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5aef0e13-3338-47c6-8ebd-a48a0640dc98") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9e820223-a068-46ce-b8cc-c8a19eca2a32") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "96ec9f43-1ae9-48c6-a13b-edee73cc7ddc") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0beac8ab-c1c0-48b3-b6f1-c0d5867e9fc5") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f01e194a-57ec-44f0-891f-bf27f2e85ebb") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fb36283c-2178-430f-9879-421b6a360d0b") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "716b7c28-83da-42eb-ba9d-1b62b20ca857") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0e5250b2-2873-45de-a068-5d31fe6dd3ca") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ccb0c729-0c6a-4a5f-906c-3fc0ce14b208") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "32144fde-13df-4049-9dc9-df6a9ee1c9cc") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0ba8c3fe-ca32-4eef-b62b-3479c26a1173") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "45ea5ddc-18b3-46de-83d0-c76421072e3a") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "28d37b26-100e-43f8-80b8-e5cc5b236082") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ad9af7fe-e964-40da-9a0a-362c49b73a96") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "178108d1-f0a3-4b62-85ee-12484c005063") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bcfd59e0-1740-409c-92b5-f1a201961c82") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bfa7adb3-a804-41ca-af64-a7d827acdd48") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "704965dc-ab6f-405e-b78a-093da20d2aaa") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "77560f83-8944-4e51-b201-b5896347b458") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5534be3a-0cde-4acf-8c9e-8d89b6dbb440") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "977ff747-3180-4591-b85b-0dcc73eafb01") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f04034ca-4503-41eb-8b38-a94626442679") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bac6818e-edda-42d5-b586-e06d912299ef") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9311a35c-73f0-4ba1-b9b7-89e472881755") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d464e43a-38a0-4945-b1e8-7fa277aa0563") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d5d1d914-9b0b-4275-84da-a0027a9e4899") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "af51d48f-b3c1-4406-87ed-f72eb18b3f0d") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "abc2021f-0335-43d8-9256-3708131cceb2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "874d1154-9bc6-43ee-89ce-a6b454995893") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8f5f111a-8ecb-4c4b-8cda-38e7bec78225") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "052bd2d2-ac5b-46de-9296-3b146358b2e8") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "78652a4a-d1de-4d2e-8f32-ab0b4ad322e6") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "44da0af0-b541-4ae3-a37c-ff948bdad2c5") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "796b5108-02f8-4847-a30c-2670442bdd89") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "9bf28fc6-b073-4144-beff-8ae9f22aabee") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "36b62cd5-4736-4aad-860e-66a46f01d940") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "6bbebe12-1f26-4f8e-9c62-ecc2924931dd") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a542bb53-303c-4b4c-a290-05bd520d1b9a") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "a426b6bf-fe4e-4a52-882e-6cde9ea0cff4") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "c7d14f9f-7224-4e5f-9c60-72281ad0e336") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "6f04b2f2-0225-42ad-88d1-993c46ed76e9") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 122 "Net-(D74-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bebe1c1e-1ac9-4639-b8c1-2f0d2d2da9ab") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 122 "Net-(D74-A)") + (pinfunction "2") + (pintype "passive") + (uuid "353d9eac-7e53-497b-806e-ccf7ac4534c7") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 122 "Net-(D74-A)") + (pinfunction "2") + (pintype "passive") + (uuid "24a59028-914e-489b-a345-ba512ab7e5db") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "419ebfae-959b-442d-b911-05a9f7a2e20b") + (at 199.6325 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_N1" + (at -4.5675 1.6912 0) + (layer "B.SilkS") + (uuid "5bde04f2-8009-404a-be0c-2a4b99804af2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "a5918222-4de0-4f27-9a79-e47dff4bcf24") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b06b5bef-b009-440b-83d5-3afbbe67c16a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "212c99fe-d40b-428d-af8b-923b4324f60c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/02255c50-9541-4a4e-8128-e26d76564da5") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a300b827-04c0-4b07-a210-184fd7c5a58f") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b446c42c-15a1-4e0d-9c99-60809370bd84") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c50ab9d4-6303-44ee-99ed-a878746c5fc5") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "169096e5-353c-4646-98e2-07893b01571c") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1708ab25-3ee7-4e0d-b5e5-1fda90cae37a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c167ae5d-33b3-4ee5-a070-2753b9c44726") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5a133905-3978-44f1-9178-590fee687b79") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bf5e8a5b-fed5-4865-b4a6-aa6305898fb3") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "926390fc-ddac-4d40-b8cd-21f86fb0bb34") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "162b15d1-d4e3-4b78-acca-d879ea80b2d3") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "442bcb03-6a62-45d0-b5bf-b8ee5ad5ec68") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "33b8d6fd-877c-4dd3-8c36-c02cc813aedb") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "74e4b188-4d8d-44de-9eed-308aaf3ac709") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "13d2f47b-6975-463b-954f-7282351333e3") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b8866cc3-ad41-4c01-9de7-c24b7a4745b8") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9cc405de-36e2-4b24-b5ab-0e08f373a506") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "265979b7-8e96-4c25-9f2f-d8bf17d42ba6") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "25ff80f4-10ae-4da3-bac7-78bae501bc17") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c44e94e9-ebf5-4d8a-9039-0ff800a38915") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "29311157-c8ff-47a9-aabc-e33968c64d72") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7b882786-9fdc-46dc-bc0c-efe0c64942ba") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "375e2ff2-02b2-4cdd-afd8-ef09beed498e") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "16e58dc8-0864-4f1b-a71b-567a10dc5ade") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bf203f51-b1d8-46f5-bcc3-1c2a2636318e") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "29a27829-ae4e-44c2-b252-1f2abc469f7d") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "addf68f5-51f2-4e6c-9cbd-7eb2d603ff20") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "01e6429c-bfd8-428c-a1c4-efc35eead0c1") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4fded30e-e728-4e63-82b1-d548acad7a17") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "02a2e34e-cdf6-48ca-adc4-a41dd1282399") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "daa0f73e-3ad9-418c-b617-e111dc813157") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "57d2b24e-7aa5-40e3-ac5b-69df3dec748c") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "31274240-88ae-4cc9-b918-c05b0c8ed747") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a7b0a39-2661-42e4-aef9-555d6f4e456e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "96461533-1c93-4a1a-a975-57992c343a92") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "a1f9fded-0d17-4bb3-885e-30abfcbdaabf") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e5f3bb49-e8f6-4672-a8ef-2e0dd047178d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "030caee6-c43f-46a3-af95-b8c5352877ac") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3b9fc1ba-623c-449d-af0f-a485092e9154") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f2e81c7d-87eb-4205-a5fb-4841f0cccf63") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7175f103-499b-4e16-976a-11fce90f12ec") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "77b5e7b9-f9df-4bac-9942-dd546fafbc10") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2bc4b355-e151-48ad-bab2-d5d04e60c9e5") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "92de21f6-cc0e-4db0-bd62-f2c08258ec42") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a60786ac-933f-4406-8b75-df36b115b696") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "b93d822e-86e1-4036-99dc-c8ca45207617") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "e4602f6d-238e-47a3-be33-95c32e3c768c") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "fa43467b-8d0b-4003-9e7c-55a3c8985ac1") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "c8787775-6d7f-45b2-ab3c-4baa48191594") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "f0c37942-ed5a-4730-907c-905a812bce1c") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 76 "Net-(D55-A)") + (pinfunction "2") + (pintype "passive") + (uuid "262cb235-ae76-4f2f-9b3e-536e8f751851") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 76 "Net-(D55-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7fa2be57-9386-43a1-9449-bf86f5c4f2e1") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 76 "Net-(D55-A)") + (pinfunction "2") + (pintype "passive") + (uuid "d9862261-22c9-4f7d-966c-ba20a17d6865") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "44c1099d-4982-411c-8e17-4ae014605c87") + (at 347.27 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_DEL1" + (at -5.73 1.8212 0) + (layer "B.SilkS") + (uuid "8084d2d0-b285-4459-97e5-bbf2b8a2dd2d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "49c4d63d-8ab0-4a8f-9fcf-2e546fc1cd5d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "ab5ef856-0307-483f-92b1-cd653a10bde6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "25f768d0-c19d-4c06-8ed3-bd09b548eaf2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b0cb889c-27db-46cb-ae93-7d87c48c9a4d") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "413759d0-606f-4a75-8cb2-cebd0251ef59") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b32efec6-104e-45cd-b75d-9f81ffe14b16") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a96d2908-c5a0-4125-98eb-eada438b4dac") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "41b6289d-47b3-49dc-ae63-2c0f36df4ce9") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cd41e6b1-44aa-4320-a4dc-05b2de939507") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "51aa1d71-3160-4a96-a6cb-536fb2c8dd0d") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7e0d4806-9d4f-400a-88a6-ddfa42840466") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f6a7c8f4-f7bf-4af3-a9ea-bc69ad1d1068") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cbd82f7f-b42f-4a91-8ba7-239d566df4f6") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1cc969a1-6c29-4903-a0b5-f9fc90d64cd2") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "80cca8ce-2814-4dfe-bd4b-25b0055dc10d") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8f204061-390d-44ce-809c-0c3fc2246e42") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c826389f-f3aa-4272-8ca2-1734fe19de9d") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a5e24bea-0578-44b9-89be-6b3b3e60ab12") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9bf1c2c9-1c0c-4b42-bb97-f837355e62a0") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "266c1ed0-5d33-4ebf-b0ab-4683691688b9") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c9bcb519-503b-4ead-951e-883808c06ec2") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "461ccf6c-d558-48e9-ae37-83ec40c4e6fc") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6717d1d7-c944-4b16-9571-de20040ffb91") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6e92f3c2-ef4e-4564-8923-a58ed0e836c6") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8bd684a1-01ed-4985-8610-3e686efc89ab") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0e5a68af-caa6-471b-b05b-d6bbc1d39cb1") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5ea3b666-f2df-4de3-ae66-218fe3ae9710") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ec20954e-eb0b-40b3-904d-4552b052c35f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "69bbf101-eae4-4c40-be4c-a52afcfef91f") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "180516f7-bfc6-494d-862f-037981c7a9f4") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bf892256-f5ad-4735-b746-5bdf8049fcc3") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ac095d7d-65c4-4a07-a2b5-77fcc85a876d") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eb1b3f86-471b-466e-9a9f-97691438c2fd") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "59e01304-bfce-40bc-af98-cf8fda8c8746") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c379d296-0b6a-47bc-90f9-749211e327ab") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fc4cd326-829a-4c1d-b321-6c8b3a6d09b4") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6d4bd0a4-2928-4332-a0dd-24c44768f6d8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "17ea9646-f867-4787-a986-497687334b1d") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "f145fc9e-2066-4e30-a3e5-a66939ccac40") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "99e96f25-c103-415e-8813-94dad89c6678") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6fbab01a-337d-4470-b8d6-be06359cf8bf") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "15d22929-4737-45fd-9773-44cd07a283f3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ffc302b3-ccea-4cc3-894f-2f8e139f3fbd") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1249e668-2256-4c69-9bd6-a0077498aec3") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c2b14c9f-7158-4972-8f8c-a85e9eda3808") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "02dd8796-bb50-4497-80b3-199f1331bfac") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "015b0516-234f-4ce6-8168-fa74e786b17e") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ce5199c4-1331-4d66-9a66-4dd8f28d04ad") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "68270189-79ea-499a-b717-972ed4360e0e") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "77358799-8d39-4bec-aef0-00cc215ec3d3") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "9072daae-2c5e-491a-815d-e6bf7bd45f86") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "67cc4072-54c9-475b-b5cf-2fb6b9e4292b") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "bdd33b7e-3204-4658-ad62-a3d35d731791") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 54 "Net-(D35-A)") + (pinfunction "2") + (pintype "passive") + (uuid "c9a5d161-0dcb-4122-9cf6-1d2596833aa5") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 54 "Net-(D35-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7629b18a-f5ad-44be-870f-2c865de1bb59") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 54 "Net-(D35-A)") + (pinfunction "2") + (pintype "passive") + (uuid "47dfe99d-f1be-4a91-b52e-e851bc6c9802") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "481298cb-a1c1-4c26-8527-3ed8807b2d47") + (at 166.22 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_T1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "5faba772-2194-43fa-8dbf-07618e883458") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "e0386c4f-e0d5-4cb7-8c39-8a83d9fb050b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "792f5b20-ffc5-4d3d-b6d3-d0fd1e977789") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "e2023fae-5407-4e8c-b1a6-2b8ae5e97dc8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8b849530-a851-4c47-abbd-b8c147aca44c") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ff99578a-1a0b-48a0-b2c1-f6486de95d55") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bda76761-e558-4d8d-a754-761815852849") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ad3ee813-5bda-4ac6-94e8-e16640a3c04c") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4a4830a4-b90e-4b9c-9bb3-7f3d9084587e") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f6676f6f-5c36-4f1b-a9f1-e9e71e958311") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c3b2c42d-8608-4588-af18-c328f38816a4") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c16cd1c0-9329-45af-9d5c-240331905781") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7b9987ec-e1a3-4dcc-bfa1-a53c1681bf94") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "11febdc6-7b1e-4642-9dd8-33010ef5049d") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b13c040c-26f7-4a9f-afa4-36eee6f2552c") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "6d835bec-cb19-4aa9-bc6d-7d1982ced6e7") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b2deeb5e-3176-4aaf-b7bf-12f91fbefa9b") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7955e091-a9bb-467c-aaca-2b80f9d20cf8") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0f163193-d0f4-48ee-8653-79f06506ff8c") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "75c38134-cd1c-44a4-a29b-ed4fee4343d5") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d7cebb6c-5f57-41f7-a72d-e3dd678f3a71") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c87555fe-1e3a-46ce-8eff-b26d40209777") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "baf2da2b-07b6-4a65-8a68-2db6dc896013") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f6656ab4-6a9e-42d7-8ed2-ddc43436c215") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d46efbcc-a12f-46ad-8c2b-74dee95ff3e8") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "00267485-265d-4252-9f97-eacf755d3fc8") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "735edc76-ceed-4126-8d4a-06e4caa15108") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "262d9937-4425-4ad2-a968-eedaa56e9908") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "efe4da01-2ba2-48ec-9491-d9ea7976189e") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fc02dee1-ec23-4902-94e1-23074e8d0fa3") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "704117c7-a6a2-4b8f-88f4-efab4178170a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "06a38d08-5106-4833-97d1-7a02b71ba0bb") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "af6569cd-878e-4f95-9065-82412bf3da06") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "240e1d5f-85a7-49bf-866f-f53b072689b7") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c54969a2-5025-4001-b9b4-ba69eac3937e") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "71ef0490-596c-4eec-853c-877427e0d277") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7373495c-3f0f-452a-8fde-b129e329ec1e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "941ef21d-9b72-4645-96a3-85d89a4a24e6") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "49404f8f-025d-48c8-bb59-237f390d6062") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "aeb95fc0-1baa-4d6d-b390-ddd99522a606") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9d9be65d-28ec-43bf-9b4e-233ab9a3a272") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "80226ab6-0ec1-49e4-91ce-482eb6fb12e4") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7f0a2d49-ae15-4ed8-88b5-6abcaf2621b9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "50f7f3d0-01ef-432b-8e3d-e679abc0732e") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0f32d4b0-a6b7-40c8-a64a-7a7bd9c19a8b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6fc1a5ce-05a9-4513-817e-c5edafc0a616") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b71bd36d-df31-4224-bcf7-79c70fb111e3") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "785f4d8a-61bb-4599-bfb0-e137d560ec63") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "c229aad6-e003-4273-b869-2d201904bd04") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "658620b1-3206-49c0-9e2b-bf7ae9a35849") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "641f6875-4ab7-43cc-9e15-c55c16fc2a3d") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "ccbbfb3c-20e7-4630-9ac9-fff331ad07a7") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "af0ff157-b74c-4a99-9a0e-cf2550d57f22") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "750c88d7-281d-48ae-89e4-c374d6a69c49") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 32 "Net-(D26-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2947eb7a-c32b-42db-9fcd-3942803b2bb9") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 32 "Net-(D26-A)") + (pinfunction "2") + (pintype "passive") + (uuid "940748fe-e526-48bc-90a9-c20ded6da0cd") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 32 "Net-(D26-A)") + (pinfunction "2") + (pintype "passive") + (uuid "322c1c20-f1ea-4ae1-a159-c16bb79bf6c3") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "48e6d357-ec84-4815-9318-e35d9773dbd6") + (at 137.6675 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_4" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "0f294723-aa2a-4413-bae7-8f44f17e885c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "e9d2dba5-b4e3-4691-ac91-df921db6224c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "4a9030c5-de8e-4f82-9bbf-6814e234d072") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "2c05f48b-cc97-4c76-b42c-3deaba6eeeec") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/21f5103d-2e6f-41d2-923a-8b8578075138") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ba461427-2e00-4077-94e2-12a847521815") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9ef749fe-aa06-4c92-a1c5-df1570995202") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a722b467-9a57-4c00-aa9c-d65921d7e7d3") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "05da7d9e-043b-4427-bdee-178f59e051af") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5e729a9e-6ad1-45a4-a328-c879507c5060") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e4f60da1-edaa-4323-907d-033f0e85b5bb") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fac849a4-f705-4172-bcca-9295ff9a912d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0e7e97ac-b3c6-410d-a6c6-08da80c496b5") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ec1dc856-857e-483b-878e-976aad6f4649") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3fc21d82-f523-4f61-b397-428c356a3308") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "83031e52-14fc-4662-8da9-00e65e1334f0") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6a048187-cb7d-4653-b849-0e8e2094b8cf") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a85d9b53-0fbe-4a14-ad8f-3b33798c2ed6") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3c7d90ee-d456-4553-8cb8-5c039f48f96e") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c16ff6f9-da49-4178-9ccd-5d69532fe372") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ba7d8a49-2f83-4721-a342-89139cfbfba9") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d70c83a9-480f-439a-adb9-71ed0a39d093") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2dc9ef60-59e6-4382-b9db-85c3c55a2936") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bf13dcaf-d973-4465-b826-2fb16694b774") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ef7a3fd2-e89e-47e8-be78-4a86427c6260") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "71535c29-5a15-4db6-8e73-2212f5a3c07d") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9902c833-05c7-4f2e-b9c9-3a26bb0fce8e") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "26e50491-7682-4b1c-bbd6-7a1d938306b0") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "37b3bb08-5295-44e8-a4b5-bd20a3fc69a6") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9f7ee6b8-d7ce-4a23-a7ed-f06491cc7bfe") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3dd764db-814a-4881-a40b-47eb73cdce9a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6088435d-606b-4b3f-a0d0-dc2463501ba8") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b9f2f59b-3d9f-4549-925a-bc238e4168bc") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b894a599-6c1c-4c33-9d37-26dd9297b1ca") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f8f2851-9848-4aee-bd2b-80d73b5c6284") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f4a280e2-04c9-4c1d-82b7-c4bf54d7f1fb") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "59ff155c-1164-40ff-b33a-9d7277e79d8b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "75443d46-cbc7-4a40-80c7-d839074596ea") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ab356c18-c622-47ce-ab3d-4306b6412018") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "4cec2cec-939b-4e64-ac24-54e0ed8e824e") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "64efb366-1827-4765-a597-1c8befbdc9fd") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2a7603f6-ba95-4cbd-921d-80f0aa049f65") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "200af2e1-80df-4df3-ab90-e1717019c3cb") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cea1a9c7-6295-44d1-9a16-2bfc76fd0b7a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d06b9a04-4458-4411-b06d-0f99eebf9ea6") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "08720c18-75e8-4434-a51e-e83a01ca5766") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d101a4db-b009-4d4f-9594-72a655679efe") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "e1ae53c0-1dc4-4607-b3df-9c02b83d5d97") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ccbf65b6-aec8-4b5c-9403-24bd20335b6f") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "95cd0053-a5af-48a9-a927-30736c20a4ce") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a6b74cf6-91b0-4a4c-abf6-6c3c67dd9a31") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "43c44c85-938d-4bf7-8f20-b0556c9a91d3") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "f1564d77-54c0-42c3-9552-b07ddfcb7e34") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "b08ac893-93e8-4aa6-b562-3e332708b22b") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 8 "Net-(D7-A)") + (pinfunction "2") + (pintype "passive") + (uuid "8771467e-f728-4ff3-84ff-a2101ef00080") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 8 "Net-(D7-A)") + (pinfunction "2") + (pintype "passive") + (uuid "e13dac6b-74eb-4949-86bc-2d849fc23503") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 8 "Net-(D7-A)") + (pinfunction "2") + (pintype "passive") + (uuid "510da76a-8480-49f3-b531-04afb13aacf1") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "49a97130-bbca-478d-8b60-3f7864a0fc75") + (at 128.1688 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED19" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "7140f3fd-7f97-4442-8deb-2e8f1b021d59") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "b333a140-6071-4766-8650-35797579402c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f2cc2254-d4b9-415f-868b-a521a9d65ac4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "c3c6b2f0-9546-4682-9f33-341145dcd859") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/04745eb6-b885-4323-91f8-9c4708829c14") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "9207e786-d985-4739-aebd-84686cc343a4") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6d1bc7ae-7b43-48ee-ae30-e582fa807fea") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "70c7a36b-6f1d-4670-8a53-34a977e1fd9d") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7c792a02-b7ab-4e42-ab14-7fd1cff22c3f") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ae036283-6ead-4f88-8bd7-6c537b178fe0") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "18b22305-f0dd-438b-9519-de5966fcabe1") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "85298cb3-ba07-492c-9296-f1247ffaf102") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d35a9548-1166-45fb-b79c-44ff85ee53a7") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8ce0e0d1-35d0-4146-a427-f574211e5eae") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "142e4c54-6d45-4565-9869-4ca7455fdfa0") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5b604429-72a8-4795-9b9c-8d773df230d9") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "deeb79c9-251b-4d37-b03e-5bc4e7f7b1f6") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cfec722f-d0c3-4cad-b46c-b61f25e1d2d3") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0559785a-eded-430c-8d21-a7bfb6187bb6") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1170f288-9f0f-4276-9447-32233934848e") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ed837759-11ce-4865-b104-c5a169d23925") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bc8cd429-ec88-4306-971a-b5bc713022f2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9042f844-652b-4b96-a75f-76e762b0ccbd") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ff57d545-6e01-4b96-8177-2fbe459b212a") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bbb94112-feba-49e6-ad87-1fad1d2f5ab3") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a239c02e-0dd3-4c3c-9fd7-e7294268c0a6") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8f9869b3-341e-4b88-a6d6-125683884299") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "77d4be26-92d6-4344-a768-9455874ecf1b") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e3dcc5f5-b292-4a9f-a972-46c676d2940c") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "58a19eae-17fd-4019-8883-0281e606ee50") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3c70313a-280c-45f4-abe3-1bc37f4941d4") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4f030a47-5bd5-4b0b-b062-2ba7a2f6e9a0") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "132722d5-19a0-44cf-b2ce-8f60c355a59f") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5dbefa20-c55b-4485-818c-a3f1b5c978ba") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ac4e1156-7cce-4b6f-8831-49c97b8afd00") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fb284128-65f7-4177-84f1-c5fe25f1e057") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "96f65747-aa47-41ce-87ee-91998f23ee20") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8a202a52-ae8b-4bae-b975-67ecccb7c93e") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4566e3a2-3970-4bcd-89b6-b68c8c1221b0") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cb8f24d3-3235-4af5-b100-24e727d4b9e0") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1e592238-70b1-45cb-96a7-10e61f85b82a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c4416feb-1458-4f28-9f36-6e59901d25bb") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ab5e4317-7c62-457b-b507-6068ca2b1b9e") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "46875ee7-cc3a-47d5-ba5f-5831af4623aa") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "9203aadd-ccef-468e-ad66-1fa7869c4722") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "5798cde5-d590-46ec-ae5b-cc3da22c9d9e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "4556d573-996c-4998-9f6e-0823f3eeb8d0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "7e709b15-bd67-4d44-8501-3ef34b4890b7") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "d1da1eee-88d1-4e81-a38a-822e6deb0777") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 153 "Net-(LED19-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "24e5efb4-c2b9-4deb-aee4-e5a73e2966ba") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 152 "Net-(LED18-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "e553d6d8-5912-4116-b3d6-36419ea06e30") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "edbe27c8-9219-40df-a3aa-203b1f31cb19") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "4c4910e4-a654-4fa8-9cab-77b12763c403") + (at 151.9814 140.6485) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED35" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "ef879975-a0f2-427c-8e96-f12456ab1413") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "32537051-ee58-49cf-a16f-60280098e4af") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "36153d6e-46ff-42b6-b30f-59b7ed342d11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "02f805f9-373b-4bfc-aa72-16bc7b8b9227") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/644fd1c0-20bb-4bdb-9e28-8f60c3c9e84b") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "be39e38f-5557-4674-a6d1-90f5aa4254e7") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1f3cabb4-2053-4d04-ba44-8dca2065ed74") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1074dc7d-b888-4643-ba4f-d99b1f335ebf") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "522de67a-adcc-4610-bf3e-402d9a52ec1d") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3177838e-4f18-4e60-8e71-2a6dcfeee265") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f08fc03a-be1e-4a3b-8c85-276c697e0b7b") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7a2da2fe-f288-4df1-bd95-89a394a9e2f1") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "36147fcc-1080-40c5-8207-384c87136548") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8125005c-38f1-4774-a74d-077671b22ac5") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4d37f40b-cdc0-4f6a-aa62-2364c7c27fe8") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "97250e6b-843f-4f5c-ba86-9689e546a02e") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a85c2199-c052-4e0c-91e0-29b077da05a5") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "66ebaf5d-e439-4523-b6ef-fb4d9997ec91") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "842064c4-0f6a-4ea3-bc53-064de3f9c31d") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b4afca2-7f55-4116-88ad-cb0515ad83be") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "372000b3-a057-4cf1-a4ba-fc48afc26110") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b64ded5b-8585-460b-8ce0-95d0af0894bd") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9b11a507-0478-4766-b2c0-94aab3012b84") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a342b7df-76df-4459-b1b0-64e88943ecf2") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7e831000-a9af-45ae-81c9-9437033f6de6") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "796cc8e5-94e2-4b7c-87a8-f9d7d53d2848") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "37e7f1da-e45e-42ec-ba0c-701c74ec9566") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1f5333cb-033a-4642-9e22-4f1497752fc6") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b60ecc8e-5a41-4423-a86b-9a2df955ddef") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d11d1a9c-8731-4077-a4e4-a0e9e84e66b6") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f311b2aa-2e25-4d89-af70-65812920fd8b") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1dae42f9-fe26-4b3b-86b3-17e7b29b4f00") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f1d1e7bf-e7a6-41bf-adca-6f16b32791de") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "62d61c24-b2b7-4684-a6f4-1ed3629372a0") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0645f780-8f54-476e-9049-262a8528ddef") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a130518a-5366-4e0e-9d80-e8d9ba695f27") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "21ea997f-5acd-42f7-b9a6-39f4302be27d") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "75952949-0f7d-4a21-bffd-1127646b41cd") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e258b79d-278d-4233-9459-ed11257e8f95") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9a6f0289-fb31-4bfd-a09f-aef9ec46f255") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "30f000d9-d373-4998-91c5-a26417a73326") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3c504980-b771-415d-b02a-5b9a046c8b01") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "62de9ccc-d3ea-4b2d-a620-a077b45c22a5") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "4f7dd7bf-6962-4e4b-9381-b6b3451ccc3e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "864988e5-60b7-447b-9727-cbc7b90d129a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "16e6571e-cfa5-4a15-966e-1682356ff2ed") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "a86d8061-64b1-44d0-998a-530edb7c3fec") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "de8f4e03-d60e-4946-86ec-9020e6cfdcf0") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "801b578d-85c4-4353-9263-ac2733433b39") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 169 "Net-(LED35-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "4d43ee6d-4dd7-43e7-bf6d-ff1a8b0fb313") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 168 "Net-(LED34-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "1cdcb936-6b44-4624-a8f5-9c0aaa7445e7") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "0e066d3c-ecb7-41c0-918a-4cf35be14bf6") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "4fbcc218-f5ed-42cd-b91e-a8549fd8ed62") + (at 90.095 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_Q1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "729a1ff5-4d78-4383-9151-7ff8ee0e24c1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "fc0506dc-e7f2-4de1-99c9-419d3f2904ee") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "f933c08d-c432-4b16-b4a6-9c6d1a619987") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "ec935a89-8c98-47df-80ff-96e27cd0cf46") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/80561787-b883-41f7-b3b7-f2ffb5d53dec") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e6daa75d-0180-472a-b89c-a92510957422") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1547cc53-d862-40b9-a4e7-3ad5041969e6") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3825d9a8-e647-4f87-a4d8-eb00413a263a") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "46b2b2c2-ba16-4831-8f53-ec375f93cad0") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3064f8b0-3b61-4726-a87f-c62a24585ecd") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1de2a87e-9838-493a-bb6e-452ee2e9aa0c") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ac0bfe6a-7374-45ce-9006-504f70f1cc59") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "653a6cc1-2925-4b47-b09c-c1815ecd1f95") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4ab7c330-28b4-4f8c-8821-0ec96096a115") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d6d22e43-e902-4d5a-89e3-e99843c6fb2f") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "5b9de56d-a379-47ae-8f4b-8af5a3ff0f0e") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b0f9d2db-ac13-49a5-9d9c-9ad68100f3b9") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "decdd689-1a69-4d36-bdc2-88896465c423") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "daa0526d-0c2b-4055-85d4-bfc6c0170b1e") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ce8df431-a090-442f-b57d-b659720d9080") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4c04f031-f310-4ed6-8292-33c193ed9f68") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c0b108d5-94d2-4332-bce8-5d40e9394dc2") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "019f1a53-1aad-4b79-8d1a-c5ef441c8195") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "32827dd1-de13-472e-a6e0-508690fc9f72") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1a2be3d4-6aa3-48ed-9e94-ece3a86b490d") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "77e8adf6-bb76-4f2c-866c-9a0c4ade9739") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c364163f-da42-422e-b184-a560cc0ffe40") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "87364f64-c5d5-4223-913e-22816b6105c9") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a0201af-504f-43a7-9c21-b204e1d0a5f2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "014eb470-8274-48f2-b683-baee349deb8f") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cdd49d05-136a-4401-a315-9e818c4bbe49") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fcda1a1d-738c-4095-80ae-7c6672031e92") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c5a01572-5841-497e-b0ae-e0f4135b8580") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "114f6d8a-979f-4621-8beb-91cf39094a1f") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb3dcb99-a3ee-4da5-be7e-2e51dab0a482") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "742ace1b-56ae-4e13-874b-2915fd4bc70b") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f8f83ea2-f3b4-40ad-b6cf-32d7d13902ea") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0b353cef-049f-4624-8e87-4d13c31c3c7f") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ac024b71-db38-43d6-9bd7-ec6a14d82967") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "bb41d87b-41bc-4a4c-b6c4-ef81bae87baa") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5ba63edc-85a5-40b1-a861-112dac3b15eb") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2937e50e-4f15-49df-bd1e-ef5b2c259966") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e6f8b241-f5ab-4998-8496-cbecf5898a96") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1fc97eda-9e0d-4f5a-9338-e9736b116f18") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "012e1142-bdd8-4e2e-92b2-8c6e1b515e00") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "28c298a1-958f-4640-91b5-88ef576e4cdc") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "df3af5d9-2b5a-4f50-84be-c07b0b04b841") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "4da9ab3f-5822-4b97-b6c0-0699f5f7971d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f13234a1-b047-4616-9f5a-cae1f8ecb4f4") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "5a42e451-87dc-456b-ab1b-b72ebd071517") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4ad7feb0-8f4c-4c4b-b837-dfa41244a760") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "e3389014-fa7d-465d-b3ac-c7b4bdb35beb") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "bea524d8-a2a0-461c-8e53-0d1be9eb0d34") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "58040421-787f-4867-a734-58d9cf48606d") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 23 "Net-(D22-A)") + (pinfunction "2") + (pintype "passive") + (uuid "80b3839b-e9f6-41fc-8656-a6aead1edfef") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 23 "Net-(D22-A)") + (pinfunction "2") + (pintype "passive") + (uuid "47dfc961-7bf3-48f2-96c0-245414861ecf") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 23 "Net-(D22-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0c1fa828-bf26-4dd2-9d43-b478b877af91") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "508c8b6e-d9b1-428e-a959-5079cf26a507") + (at 328.22 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_UARROW1" + (at -6.82 1.7212 0) + (layer "B.SilkS") + (uuid "d1eedd63-40b9-4d3b-9668-87e31e6712b0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "3883e19c-92eb-4067-974b-5b0605cd5099") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "721d64b9-b08f-4ad2-ac42-02c97a29ade1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "1d4c646a-572c-45e4-b8cc-e68f9d729ecf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3f62ea02-8087-4482-8a14-2c5cf7286454") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5c63806a-0cad-4144-868e-a64d33e5599b") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f43eb54d-107f-45cb-87f3-888a66dfe139") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "81dd4135-bd01-4792-81f4-8b0beb9c0b67") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "37e19007-5e7f-496f-b8e1-56cf866e4f44") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e104671c-cf3a-4b88-9087-5879fb251fce") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7a9378e7-5270-47c3-b937-8880ea6399b1") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f1a99be3-2503-4b15-a223-efdbc72e110c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "96b288b6-6149-4f87-8d4c-3903a5a28863") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9343a209-93bd-4872-b963-68ea94f5182a") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "00d78ff3-202c-4e60-972d-27fdd4693b4a") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "f4df2443-ae59-4e02-ae67-aed07ec21e5d") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "aceaf5f6-99e4-4451-bfa4-5021faef7bc8") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "82b577f2-8032-4739-aa1d-c4ebaaccb44b") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6e17013c-19e7-4f74-af75-8cccf2b83884") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4bcc7add-4f47-4abc-a22d-c406aacf7cfe") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "95d64fdd-4743-4898-87f2-42a90d596513") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "330c1b5f-2946-47d2-9dc8-0873d6582d38") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b289b7c5-c81b-4d9f-8153-ba4bdc410b0c") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "99ec44b3-b7f5-49f5-9c64-3734e7a16cfc") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e59397f7-8df7-41fb-9d6a-e30bea552304") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "df0167f8-3ae0-4b2d-a931-061dcbaa12ea") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b7f7e1bd-d3af-4596-8d4f-508699cb1593") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e6344d13-6454-4fe7-b020-c28c7a807250") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c11cc581-c731-43ce-9b79-75b4c64d22ae") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "99828bcc-1025-4143-bd9f-16a19f2f6452") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "80a3a614-ac28-4531-ad7f-9711407f52b8") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e2acfa21-2d23-4e0a-b028-21664b2aad52") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3c60f906-8189-4144-8b9f-2b6669a699e0") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b4cd4536-2cd5-4eb6-9531-17bab86c6505") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "80cfd985-e1af-48cf-b6c0-73dec015082f") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d63b7168-c765-4516-bfe8-303ff3bae893") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "73de9204-e048-4bea-9ea6-8bc36ceb202e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b5e55867-2049-4267-8a5b-d12978af0bb4") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cdb07eb-d05f-44c1-82d5-ec180582d186") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "085a5ecc-aee5-4374-b290-78e494edd250") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c04f0f5a-55b5-44bc-b9d1-602d61aad672") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "22aee841-c57b-4abd-9249-c1e2abed700e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "29abdd10-d8e3-428c-af84-2076871ea6fb") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "516f1571-947a-4002-afc9-6cda84033232") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ccd963fd-594c-48ac-8de5-d5568e4d0e91") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0ddd42f1-ab7b-4197-be9d-aa7550fc7eb3") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "44db5eb0-27ea-41ec-81e9-9816360557f6") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "0d1c7f37-5e95-4ba8-b76a-c80bdc982717") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "7129a747-50b1-4114-b884-9beed6861e35") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "43b585a9-7243-476f-810e-1ad329c22fd9") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "d942ae4f-ff2b-442e-a2d2-98e1e95b6f62") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "2bc5ae75-e953-47c9-b62a-e4c45392851b") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "6fc32ca7-3bcf-4655-ac00-ef6c49af8a49") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "a5d0dae4-f16a-484c-a2ae-b841f4d6e096") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 103 "Net-(D61-A)") + (pinfunction "2") + (pintype "passive") + (uuid "8cc9dce1-9014-46bd-bc02-cf77d6f208a9") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 103 "Net-(D61-A)") + (pinfunction "2") + (pintype "passive") + (uuid "44b29ef1-ebc9-455a-99b7-1b9683a05d31") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 103 "Net-(D61-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9e26ddbe-ac33-4061-b250-8f5592c6a7f8") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "548c7268-71d6-4889-8a43-865b2aa2e33b") + (at 180.6486 159.6985) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED50" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "b457c3c2-47c9-471e-b967-143fb30ebc49") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "3e0e7dad-4fe8-4f7e-90e6-7f624a06aa9d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "5f5c5cbc-9a44-482a-aa47-bd3db896f39d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "a259fa1d-edfb-49e5-9397-032d75f6837e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/82b76e17-b844-4dfb-9576-c8d12d393949") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "4764317f-c33e-472e-b9dd-ef1361243432") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "61071dcd-73e5-4921-b2b4-157938353a3a") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b3a3e234-fa0d-4126-8502-824dd6d4df2e") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6060cf10-14c3-409e-80f3-a553eb08cbe6") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7c1ba528-ba95-49bb-a2df-a94d1e4915f8") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "43208edd-7f89-454a-aada-6228778060af") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e75ce18b-eeef-4c85-8c31-c7d7baf7e392") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3875633e-0943-4f7c-bfbf-353505303087") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a396ce36-48e9-48ad-b18c-a92f7fa65b7d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "152256b3-8e8e-49a3-b091-8d8ade5e231b") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "23464ca4-3045-4ed4-a27d-8c02a0a5beaf") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "59941e46-23da-4c34-8970-ed8ee4b2f612") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5585d24e-16c5-440e-9e3b-59e1786c924e") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d697e4d2-5ae1-48c9-9208-1f797ad99231") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "43780b8f-6862-46bb-a137-dd7dbb992446") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "403c2b8f-b22d-4b5f-8e41-29ced0ad8d54") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "904808e8-2309-4ca7-b951-acbee948e135") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "62fc2f66-1b7d-4ced-b98b-1ad4ef2b4bf5") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "85b9e8ac-539f-4080-a566-635b75e67e2c") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0e30d834-b090-4bdd-ac93-862bd024874a") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "39703825-1742-4ac1-bd97-a8aa55eb1c54") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7ed54f59-b33e-49c4-81f6-0328b290ede2") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2eec6a91-d718-4d56-9d52-380a0e6f8e49") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e5b876cc-e5df-4934-9c0f-834441f5a9d6") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "afc9451c-7d29-4177-a5a5-9d7ae6e3390f") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e4aaa0cf-4bf3-4959-93f8-11e258f1fcef") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f84ccb76-4abc-492f-bc69-5fb7b87b622e") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "074d5f77-b7ad-42cb-bcf0-059425003fc8") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "81c04828-3dde-4dea-84b0-40508509a5ec") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dd6719a0-decc-46ec-bbe2-111687708441") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cd52817c-bd99-4763-91e7-e262fcb0ac52") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4827c69f-ae95-46da-8ba4-714ab211397a") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a51620e1-d7c2-492f-bcc1-90592c2144c4") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2781a365-a910-49c5-8999-2775535ca084") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a1dcaeea-8aeb-4369-a916-2ff4e17673c0") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "dde27d92-caf6-406b-a551-d051bbf1dd6f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9968f522-068e-4c17-938c-dfe2030c7b06") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4296ecd0-659f-4534-b311-f1d164b637e5") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "85726f16-e7fb-4299-b970-d1b5a539dc6a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "e7a45d92-293e-462c-aed6-c0fcd720d6ff") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "39468bea-6177-44ae-b5dc-09fb76711a10") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "21c7c4de-19f9-4218-b9a9-d7f969fa8f0f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "a0d10ecc-089c-4497-a23e-4ab73ea4bb81") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "5defe500-adb7-49af-8bad-0f02a368c5e9") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 184 "Net-(LED50-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "4b156f95-756f-4002-9347-45355abf67b5") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 183 "Net-(LED49-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "454debb2-57be-4bb0-a764-8e9b959d6d92") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "a8a6b31c-3e40-4521-bf2e-a985b2b8905d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "54ed2790-2085-4825-ae9a-f57d4685d2d3") + (at 156.8038 102.3487) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED6" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "6c9e7ef7-f032-4c48-9d47-275719f4828a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "d7b4dd5d-4c93-492c-a0c1-979970686bcd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3f4e4a5a-d56d-4fbd-8967-bf0b5cc83b51") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "0f908884-9707-405b-a148-9e8ab8660d88") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/a292fa58-d9e0-4f7b-8098-871fe25b268c") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "022eee1f-3d62-406d-91e0-98e15e5a465d") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8e3f6d90-02fd-4fee-87b0-a8888cb6a6f2") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "29fb0fd4-f3c7-445f-8808-88155f6a1e5a") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c8e00e90-4dd3-4ff7-8a06-42c70e91ec2f") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "17e8ed3e-6889-4a0d-abf4-015611845508") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f858dc6e-339c-472b-a7c0-e5285477cd05") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a016ec25-372c-4597-8d21-237370b87b22") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "739b03cc-9e8d-4c55-90c6-e1c1816e6549") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3b60ed5a-2e60-4644-b6c5-7244d7d1b01c") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "812bd42d-0d7a-46ad-a98c-b8e1e9583eb4") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cd52754a-31c8-4d06-bde3-8203c9fc025e") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8d3ce3a6-8cc6-43da-a45b-91674c09bc93") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "3ca641d3-b5f1-4186-ac6a-e67df7305f23") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e031a245-341d-420e-91c1-ab8e1e7ae9a3") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "930ee1da-8e27-4566-8cdd-669dbb8cc16c") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e06c6069-5d30-4196-92a5-de55007f9772") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "183262f5-1b61-4f11-963e-b4398c3b57c2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c9cb52aa-e29c-4e2e-9c61-f4aef9f5f459") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "467c2df8-9420-4e4c-b977-15af07d7529c") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "89db69d3-3efc-47cf-8fab-54149e936e34") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ff8f83df-0094-44e5-b6fa-b7a66d2e5e21") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7dc3a0c2-0ba8-4db2-9718-08c4b9569648") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7ac632d6-c16a-4d18-896f-6dfe5179ca74") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5c395b0a-be9a-43c3-807b-9cc012dda370") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fc62bf63-73b4-4d98-a2df-9a44bcaadf9e") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0c955a49-0e5a-4104-b228-d0a4639d067a") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c4930b83-a2f8-45a4-8361-a24033e7c525") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d74fdef8-19b5-4853-90c0-3640fa246e98") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a60847f4-36a9-44cd-8e60-5c25cc9b9fff") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7c8b5c87-acbf-46a8-a48a-c21aedd1c1ae") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "261ef90a-d513-43a3-af62-8263f4b8b403") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "09967c68-30fc-44b5-b885-889d9aec8e01") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1e5790cf-8f2e-442d-952e-f8815a03268a") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "29a77878-a74c-42cf-b39e-5c4cd79f8e05") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0d3690b6-6c54-49bb-bcd1-3af06bfc303c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a734db78-24a5-43c3-9a49-042ed5500475") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2d6d44e4-34d1-42d3-9f8d-4d13edf95b3a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "17e191b3-3bb1-41b2-8c92-a59f72dc6fa5") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "410aefbc-bb5f-48c4-bcfd-563a5b6b3023") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "ce30d50b-8c1d-4d7e-9253-7b738770c2de") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "74fb1cc8-1ade-45c5-b2d8-729c4be517c9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "c2c4453d-509e-4709-99ca-a86f4963c419") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "bc792553-93e3-4154-b6d7-7ea70cdc0365") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "0f3631f4-9c0a-4213-9569-690ca2ed4e90") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 140 "Net-(LED6-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "9bf9bf44-6c7e-4feb-bdf4-187f059fde8d") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 139 "Net-(LED5-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "5c2b150d-6b24-4bdb-b93d-bf85e2ae3abb") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "19bad205-7110-4885-9031-f09685ba62ab") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "557bd635-a3e3-423a-a848-486e17bbc058") + (at 147.2189 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED20" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "c599d892-34f3-4b1c-b30d-1f2abcf3ee14") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "c94c208b-68c8-41e4-aa32-132838644361") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "bcddfe2e-9851-45e1-a605-4663e1a05954") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "7edbd476-5897-4f31-b571-788010b98e77") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/d28eaf1d-5f4c-4828-818f-1afa75fe7c2d") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "9fe7da39-08e0-430c-b220-80282887fdc5") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "20d10866-192c-4d45-ae1a-e89763055de3") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "53c62d1e-13ee-4a08-aaa3-6ec4e218d9eb") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f407178d-51d3-48a3-8a95-e90967dc64b1") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b5df5113-f247-4c29-ad2b-c858d052db95") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9090cd0c-a0fc-46b4-a0da-e6a0dbaba1ef") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "bc2689a0-2696-4483-a974-e968aee574bc") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1e43f1e5-191f-4ada-bc7f-144d854a9ee8") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "21afa019-6f96-4a6b-887b-867f421031a9") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "3c23a33a-0ac6-49df-812b-7987b65fca22") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cfac5ef4-cecb-439b-8106-45ffa3f150b8") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "98642c55-7bf0-4363-ae82-3e6f4e8466a0") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cba9a90a-2a99-4ce3-af0e-e54ed5da8e06") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fe848bdb-71a7-4184-be8f-56ce1b92d803") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "97de5cd2-0112-4079-bb28-474a316a1919") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2fb2f73e-a3da-40a0-bf63-b7807ab86aad") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c9eda191-5788-44c4-af1e-8b878ad1db36") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ba662b96-c977-4684-8a82-fa63abb5481f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f577b8ee-4ae0-485d-b665-bd16e135959f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "805bb65b-85d6-4b80-ae74-660b0eccc2f5") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1b09bb03-1000-4d53-ac86-710d2b6d7800") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7ac3bccf-19fb-41b3-b7ef-07deb59a630e") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a7093aa7-9c37-41f1-b971-7544fbeacc8f") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ddf19d2c-d2fa-41df-b7bd-c83d497cf8ba") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "847c15b9-8438-4e9e-96e2-19f63002842a") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b442e66d-a5a4-4b40-be27-452431497075") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "db79914b-1e33-4e3e-81cd-37c82d01629e") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5c925a64-d6fd-4755-8999-4ce4df8bcad9") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "288c1f2d-2114-48b3-aad1-5a49bba767a2") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "27942013-2b49-4819-a7f4-3b463da8b1c4") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6c733e24-22c2-4606-98b4-beea77831bb9") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "50200a88-40fa-47cf-a304-c0526b96f499") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5e288559-2316-470b-90df-93cfb8147eb7") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "14bbf19f-270b-4eaa-8e3f-e0eff908e0f8") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "69aeb86a-ef0a-49c9-9d4f-8044763d0f7f") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b6289f9a-bee1-4ed6-b3a8-f73e7844739a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2bb122ed-b2e1-4209-bcec-c469476deb13") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "425a4181-5881-4dcf-b858-01d73aef3a33") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "7fd38fb4-0501-4ed6-a546-030c54f1da81") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "f29a6e96-1ad1-45b4-bda5-716835c120a8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "8bb248cf-225f-41a3-a950-e406b8d77003") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "85d47159-de1e-494b-8b00-76be4f5f435e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "7589f5d8-4b20-44c7-a647-b2c4906c5745") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "c4db80f0-c0be-4354-996e-61e193eff765") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 154 "Net-(LED20-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d10e25a9-2a22-412e-868a-d2f4fb08e71e") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 153 "Net-(LED19-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "2da700d7-2905-47cc-8ac7-8e60cb7092e2") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "b2947e24-b080-4797-b00c-d0fa32dc9452") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "57adcd24-b52c-4114-b855-20ffb8b89d53") + (at 204.3689 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED23" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "6c5b092e-f900-41a3-81cc-8d6999babe09") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "2a6ffc72-78bb-4340-b291-af15a125da9d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "7c591491-360a-42ee-8ea8-7519c0fbfdf5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "e616f6b4-2733-4dfe-9200-ef14daddde0c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/be63a99d-e489-4f6c-8fb4-7bdc1036d19f") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "69e2cdcf-95aa-4a44-88c0-da1f248d966a") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f8455d94-ed06-453e-9422-68e416447b11") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "d46377ca-b7a6-4efc-bab3-bccc8644823b") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ccd13e61-9d6c-4029-843b-ea7e15b26bd5") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "78735520-9189-47b9-9274-852ff7c20ff6") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a44e89ff-2ef8-48e7-9b4a-99f1ae549342") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "416a3e9a-1657-4da4-87d9-8ef7e3fe388d") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c68c92b9-7952-4939-a4c0-5e5ac7ea7a7a") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "006436c7-78de-4cc2-a922-0f680a12d3e6") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5615c84e-1833-4108-a4de-699082c6b9c2") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a7901df6-4348-4034-8a30-0b8dc7c7c13a") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1783395e-ce2e-40da-8667-fd0244d1fee9") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "6403feca-6c80-4ae5-b664-74d5b769e006") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e3cece74-6666-4fd8-a1f1-ecd3d755d077") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e53f2efe-ae13-45ce-8013-40ae813434ea") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "720c8839-f402-40b9-b422-1c2ffc1c05fc") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "12c1ca2b-2283-4452-b1e3-b2af90ae31f2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "27aff7dd-b845-4d82-a465-2487c2f13bd2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "708f088f-d17f-47e4-aa7b-51f5e658c0e4") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cad2d5ef-0188-432a-8ccc-863f02d442da") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a1033381-3a37-45e9-be70-42c338d8f7ce") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7b39d8c4-2556-4ef7-b016-be60924a267b") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "08cc1fe7-33c7-48ae-aad4-64d8e145bec5") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3cf092c9-ad57-4aa7-bd5b-ba51e119f8fc") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b411c5de-d1a7-4f19-ab05-fcfd22cac316") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fec42f18-8bbe-4744-9542-bb13e1e27abb") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c50dd720-397f-4ecc-8819-7a6ea2604e33") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e388bd12-53e9-447c-a6f8-c0f96418db06") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f0fc4d22-0d96-4e43-a4dc-4d59ebdded9b") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9012a2ee-b1d3-4571-8ace-a74c0cc1954c") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5e4b989b-a110-4a87-a923-b1b6e23cfb01") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5d1417dc-6514-4e84-b74f-7f8d3f0d193d") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a681e458-b43f-4559-abda-39483b34b1d8") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a3e8a838-5754-4e53-be77-cf09e365212d") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "455cb23b-49b5-467c-a7dc-a6578f7fcd36") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8f478d34-6f40-4ae9-8549-c432c3924c46") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "287f5363-3e0b-4f0a-8c60-9f0552d956f9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7e021590-db2c-4f24-bba5-4b0d4c0a50cf") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "3fea9efb-4b12-407a-a420-98e7daf37505") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "b4731ea4-7136-4bd7-b472-645d76377afb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "682e981a-c1b8-4a1a-9c2e-de60cf936c6a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "04b53d71-bf1e-4125-b418-a0170db5b139") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "730e057e-65cc-4a14-b0c1-f31151eb667b") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "8063a028-d025-4bdb-96a2-a77cdb212f81") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 157 "Net-(LED23-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "58614302-e867-44f4-994a-aeef405e8fc4") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 156 "Net-(LED22-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "d7c7dbbe-7172-4bce-ac7d-83d7f00e4f7b") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "d1b3dc43-d3d2-4939-b39b-e3ee1ed24fae") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "5e0e91db-2aa3-4a32-b81d-5a3bee5c5b87") + (at 280.569 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED27" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "fbbf9b94-8561-40a2-8b6c-8cbd8836389c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "8cbfd9a9-3cd7-4113-b0f0-f85c151458f0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "894bbcc9-c0d0-4fb8-b6bd-5b08222a502b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3b2f162d-9781-4c5a-aa7a-c75ed09fed41") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/227aff0e-251a-4a76-a730-a78f5475c1e4") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "e3e20931-900d-418d-85d0-f11096802270") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c381f942-3764-480c-803d-01d6fd8f8d18") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8e1fb067-8aee-492f-9b53-64f0711eabcd") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "cabfac9f-b079-4345-8831-a6e07034df73") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "bbd733f9-52db-4deb-807c-912e8cee2246") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b56be4e4-9615-4297-90e3-c636c85358cb") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8990b4a0-4c2a-4bcf-876e-acaf43b6ccfd") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "075be395-a178-4be8-9b81-fcfa7f86d39b") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a7a0a896-17a0-4d13-b8c2-da67f4c02c86") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "31b1fa21-66e3-4b82-be26-0352dfd3f47d") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "fde56471-d3dc-42cb-88f5-c6fd9c117cbc") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "6cb394ec-88c4-4544-89dd-c9f3959e58d8") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c81ed364-803e-4df4-a067-93c7fd090697") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "41005a73-65b6-4038-b5d1-189708bcc01a") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "19d9f22e-8e13-450a-84de-83e2a6cb3258") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9a81e9f2-fd59-4bd0-9033-767389a15429") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5a1a657e-4319-4b80-b3b3-dce48914062f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8b68eac4-967e-4efd-ae96-4c933e74ab30") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b5cab925-1be9-4209-a506-05d533757e78") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0ae5b9fd-d535-4809-8637-bb0b49120933") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3bae127e-a6a2-458c-81ba-f16745ef6aa9") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "73e4a242-5d37-4346-9573-4080679b3f6e") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "70245b40-450c-44d6-bb21-eab55e172376") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4822bc4a-d47f-48d4-9042-9f76442cefb5") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b8a176d-5e60-4400-b1a9-66efcc3badfa") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "616a84dc-a93c-4c3a-a689-c0b36bc294ae") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ed161e4b-10d5-4069-843d-b3dc238fd7d2") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e12a897e-684a-43b9-a180-bd099b9f9440") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b3e160e0-979e-4294-8138-d6b559d45568") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f4d4adf-0c0c-4b6e-bd4f-e9ae0f9604a9") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b5d50e84-3a8e-4829-9120-cd22f796db0d") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "592b186f-df91-4288-b86a-47d04d9b11ce") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ef7cbf9f-9ca4-49c7-a763-f6eb25872ae7") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a95789af-b28e-4b03-bcda-b6f88d4a5e58") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "eb5c8b0c-48f2-4c55-9b15-71115fb8b228") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a92e552f-0eee-4edd-9f80-a8566d3376a3") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9bd229dd-2caa-4026-a3ff-a9ac7991917f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cc1349b6-0832-4b89-8591-2c79bfb0c37d") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "35d457ad-3266-4d6f-9e89-728ec69cd1f6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "c5e2afd3-d9f4-47d7-bed7-202530ac1c67") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "0a3606f4-05be-4680-a315-829873e967f2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "f64b57c0-3842-4378-ba94-0b2775aeee97") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "c84427a9-0b3f-4675-aa8d-b059c17e7a4a") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "9b29679d-ec24-4e1b-8602-5e4a103806f0") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 161 "Net-(LED27-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "c4684c95-8018-46ae-b037-6e7612f304d1") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 160 "Net-(LED26-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "11e231d5-a740-41eb-9a1c-86733c606043") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "6491ab25-9799-4e55-9982-d0c57c3faf54") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "Type-C.pretty-master:HRO-TYPE-C-31-M-12-HandSoldering" + (layer "B.Cu") + (uuid "600dfc2c-ac8d-4fc2-bb2f-719c203f92ed") + (at 63.4606 47.7644) + (property "Reference" "USB1" + (at 0 10.2 0) + (layer "B.SilkS") + (uuid "c5cf3189-1307-4683-b84a-1ca2183f9bcb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "HRO-TYPE-C-31-M-12" + (at 0 -1.15 0) + (layer "Dwgs.User") + (uuid "b2b109b6-1ec3-43d2-a0c9-296f2b05ee81") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3c986601-35e5-4bd8-a088-5814b42200c0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "a7a2b937-8d56-4917-b2bf-d3305a192a20") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/d9f634d1-10e6-4463-addc-35893eef8711") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr smd) + (fp_line + (start -4.47 0) + (end -4.47 7.3) + (stroke + (width 0.15) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e4ab8a1d-b19b-467f-aca6-8620f81b162f") + ) + (fp_line + (start -4.47 0) + (end 4.47 0) + (stroke + (width 0.15) + (type solid) + ) + (layer "Dwgs.User") + (uuid "368ced03-a774-4b20-835f-9a4111f7b975") + ) + (fp_line + (start -4.47 7.3) + (end 4.47 7.3) + (stroke + (width 0.15) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5f87e8d9-5a76-4ecc-8301-f0d031666dc6") + ) + (fp_line + (start 4.47 0) + (end 4.47 7.3) + (stroke + (width 0.15) + (type solid) + ) + (layer "Dwgs.User") + (uuid "72454b6d-665a-465e-a516-36029dec3800") + ) + (pad "" np_thru_hole circle + (at -2.89 6.25) + (size 0.65 0.65) + (drill 0.65) + (layers "*.Cu" "*.Mask") + (uuid "0406956d-a4f1-4c74-a240-a87e7665ef39") + ) + (pad "" np_thru_hole circle + (at 2.89 6.25) + (size 0.65 0.65) + (drill 0.65) + (layers "*.Cu" "*.Mask") + (uuid "ad1d7def-6193-42e4-8933-a0173068ca8d") + ) + (pad "1" smd rect + (at -3.225 8.195) + (size 0.6 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 1 "GND") + (pinfunction "GND") + (pintype "input") + (uuid "295a8272-02b0-4df4-97d1-d17e8687004a") + ) + (pad "2" smd rect + (at -2.45 8.195) + (size 0.6 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 117 "Net-(D2-A)") + (pinfunction "VBUS") + (pintype "input") + (uuid "2cad6e65-5f62-4b36-8fdf-594e9009e6a7") + ) + (pad "3" smd rect + (at -1.75 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 118 "unconnected-(USB1-SBU2-Pad3)") + (pinfunction "SBU2") + (pintype "input+no_connect") + (uuid "50a9127a-f98b-427c-a1ff-0da0f71eea34") + ) + (pad "4" smd rect + (at -1.25 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 83 "Net-(USB1-CC1)") + (pinfunction "CC1") + (pintype "input") + (uuid "e703ef2b-75fe-4f5e-944e-bf5aa16a64cc") + ) + (pad "5" smd rect + (at -0.75 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 48 "/D-") + (pinfunction "DN2") + (pintype "input") + (uuid "8a83359a-b888-47db-af2b-a78522d139d2") + ) + (pad "6" smd rect + (at -0.25 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 47 "/D+") + (pinfunction "DP1") + (pintype "input") + (uuid "b2047014-9ca6-4677-a30c-4ff16cc55bb4") + ) + (pad "7" smd rect + (at 0.25 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 48 "/D-") + (pinfunction "DN1") + (pintype "input") + (uuid "6407dfdc-1815-4f6b-8a9b-54dd3a9753a2") + ) + (pad "8" smd rect + (at 0.75 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 47 "/D+") + (pinfunction "DP2") + (pintype "input") + (uuid "a1c57920-6c3c-4021-9b90-f81677e0d17c") + ) + (pad "9" smd rect + (at 1.25 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 119 "unconnected-(USB1-SBU1-Pad9)") + (pinfunction "SBU1") + (pintype "input+no_connect") + (uuid "1ac60750-479c-480d-8d5b-498c684a4d0d") + ) + (pad "10" smd rect + (at 1.75 8.195) + (size 0.3 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 82 "Net-(USB1-CC2)") + (pinfunction "CC2") + (pintype "input") + (uuid "bf2794ba-0d8a-44f1-969a-4619ab59c14a") + ) + (pad "11" smd rect + (at 2.45 8.195) + (size 0.6 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 117 "Net-(D2-A)") + (pinfunction "VBUS") + (pintype "input") + (uuid "4014d169-e1ae-460d-938b-7574dc8bc373") + ) + (pad "12" smd rect + (at 3.225 8.195) + (size 0.6 2.45) + (layers "B.Cu" "B.Mask" "B.Paste") + (net 1 "GND") + (pinfunction "GND") + (pintype "input") + (uuid "1ee1c4ca-aab8-4e83-a3c5-02f07acef636") + ) + (pad "13" thru_hole oval + (at -4.32 2.6) + (size 1 1.6) + (drill oval 0.6 1.2) + (layers "*.Cu" "F.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "SHIELD") + (pintype "input") + (uuid "47611b51-6442-48e1-83ec-c9e2f484f329") + ) + (pad "13" thru_hole oval + (at -4.32 6.78) + (size 1 2.1) + (drill oval 0.6 1.7) + (layers "*.Cu" "F.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "SHIELD") + (pintype "input") + (uuid "9c09e06b-4261-4fa0-823f-30067f24b476") + ) + (pad "13" thru_hole oval + (at 4.32 2.6) + (size 1 1.6) + (drill oval 0.6 1.2) + (layers "*.Cu" "F.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "SHIELD") + (pintype "input") + (uuid "4b4483f4-d9c4-409c-bc8a-01baaa09da2a") + ) + (pad "13" thru_hole oval + (at 4.32 6.78) + (size 1 2.1) + (drill oval 0.6 1.7) + (layers "*.Cu" "F.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "SHIELD") + (pintype "input") + (uuid "f512888d-3ea0-4be3-98e5-08d4c7d762fd") + ) + (embedded_fonts no) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "61ae1025-af76-47d2-955a-e9aac616d938") + (at 246.9799 140.4938) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED40" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "79612a13-dfd1-48a3-956f-f0b953683c3b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "8e994abd-5cf3-4531-8ee5-f232a0768668") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "364bc66e-241d-4d26-84ff-194aa2411760") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "76ed47eb-e585-410d-8372-56eceb4216bd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/f05ef502-51eb-4c6c-81b0-c29bdc6b5369") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "4dec559a-4afc-479a-80e7-961929a932fa") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c01fb6a2-8c96-4d1a-a717-4ebbc1062348") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b03d9ba0-ee16-47a3-a118-962e28f7920b") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "02c8a811-189d-4367-bf7f-093e64a63312") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5fc53a29-39e5-484d-ae14-5c2ab56ca85f") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "50477e9e-7b52-4a0f-b9f2-e88eb7f72ed0") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f549774c-5baf-48d5-9e76-33d7d94a6bb6") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ab9c0cc8-038f-4784-960f-3254e0b29295") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5791dd30-3e90-44b5-b848-b5635e380b7b") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "68405231-88fe-406e-8dfd-4bae2afe09ad") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "384dedc1-cff0-4076-8733-2a2a79b3e4e1") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "dfd4ef96-3701-4f64-8981-ed4e6e2a56d5") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ca5f8cab-2cc6-465e-8364-dac1638e537d") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8a378bfd-ee10-4e15-adcf-84494f681880") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "61b9b072-a2af-43fc-957d-2ffbd625166e") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1929f9fd-4520-4096-9acd-1cd280f64759") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "16e02be7-6a0d-42bb-859c-5830a64b409c") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1608e746-742f-4570-b08d-4597633531ba") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bdbdbde3-b21c-4af6-8d1e-248aa364f0c9") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ab84a7b9-96c4-4e00-8c1e-5890ca92620e") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0a4f7be6-04a3-4e71-8758-7359fe03f628") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "378cf3d6-7c03-4d9d-a8b9-0eb89e4c4f8a") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2d8ea41e-da18-4c67-8a8c-3501a8434c58") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2acc6bc6-e9e0-4644-a4f2-292c4e564bd5") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e68ed092-c76e-4320-b63b-e83b9b8b00c0") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1a669eda-78dc-465d-afc4-d16c487ba2e1") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4e7644bf-4bbd-40ad-9ed4-7f4c9ba033b1") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "41e488dd-8e32-4fe7-a984-dc6a01d46e61") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3315e50c-188d-4d12-b33e-668df2bfe3f4") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3dcac494-f5ef-4d30-a155-e1f70c7d2d51") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d7331803-a0c2-4773-9eef-0f563d59d384") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e50174bf-51b5-462e-86d5-02aa1b721adb") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "239564b0-82c8-49f8-b1dc-3578e47576e5") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "238a0057-8df5-48ab-abd1-060526041bee") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ad79bbe4-c892-466b-9239-ba9f8c035cf3") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "6aed56d9-e77e-4665-b762-99171dc2bbe2") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "68c71903-b30a-488d-8812-160acb61034a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f6afa6be-5459-4bbd-b1eb-bc13955775f0") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "222f691c-c0f0-4efe-af51-331e29442c0f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "640884a5-664b-4206-87cc-9067dc031fe1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "e81b63c2-38e9-43a5-9692-e43479f9560a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "4cd9c930-ac0d-4edc-b4f5-f5b36aeb0c59") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "5f6dd25d-fae5-4113-a6af-edcdf0c6c559") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "fa03c6d6-933c-4b9c-9f5a-93dd67a294cb") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 174 "Net-(LED40-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "b003a534-98be-4fb0-a64c-53023fb7c533") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 173 "Net-(LED39-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "d6b4f066-f255-4f77-9f67-c4f1d2ad6723") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e922a26a-e8b1-4d3f-8ebc-02ec0ad47ab8") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "623aa135-d73c-44be-b339-ba3bb7886281") + (at 251.7424 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED63" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "814f033a-c68d-44d6-9b5a-bc9f632f8bd1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "fa66b7fa-3350-4864-b121-a3bee54f97d8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "15e2a11d-f2b2-442a-bc4e-9d1ee055c0d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "789509e1-5956-44de-a3d1-5114b31530d7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/8bff860f-7b68-43e3-a38e-62a206b00602") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "c9e84287-4505-4327-ade2-fe83494b8b81") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f9be529a-df26-4530-902a-a562b4c143b5") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f296e276-175b-4955-b6cf-4969ebfdc6c4") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4b39e28d-c372-4369-bc91-b77d09be669d") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "21964dad-9ada-48df-81fb-fb7e0e5b5261") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "144e2616-82d3-401b-8186-3c32ac9ef622") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8c70f609-8741-42ae-bf4c-21a5b317f634") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b670f654-a387-4a39-af54-02500e812ca8") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b1de9041-e0a1-47a1-a24b-045863e13e89") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b5f94e6f-4b4e-438c-9214-f6c100554475") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7f4f6517-3e7b-4bec-a5bc-2ca482ea080c") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e2e8d6d1-b603-472a-b868-7de287d7df79") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c56e5bc8-9815-4ac9-9233-fdb7eecd52f8") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "38bc7166-1976-4906-bcb4-541381487004") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0abb2b6c-d403-455b-b074-ef110091f101") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a22bb3ff-f6c7-4c01-af57-434044cfa595") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "af40cf3d-4644-40b9-bc6e-28e5f906beb5") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7dcac2e-4ec5-4b77-9e4c-db059e157930") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3da7f737-2b5b-44a6-b9cf-6683233fbf87") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "60e7d8ab-6377-459b-9f01-266b5665b431") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a4a8dd16-7903-40d4-9fa6-60147389b491") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0a6f6963-2a0a-47b8-958a-d0dc7f67163c") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cd698937-e8e2-43a2-a265-c426e36ad010") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fffe2112-0872-4530-8a03-d83c0acbda47") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2e500458-b323-4cba-9ca4-ae997c243d62") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7661e6cd-aada-4a81-bcfb-659f7d78d31a") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1f5d3283-69e1-40ce-9c06-dadd0d29c8d0") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2a515b3f-87a2-4ca5-9d0e-5c57b17defc5") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a93751dc-2a6c-47a5-a0d6-a6d5eef40edd") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b2b38a77-94bb-49ac-9d8c-ad6f18851558") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "97ecd922-2b3e-46b4-b6e6-8385eaa71a18") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8e246673-1cd1-4790-af94-6a4b8ca87c19") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "67f025f3-c35d-4551-a489-4fc6ca4f1c4d") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b5d6eee4-f45b-4438-8121-2a9c6ac8fa96") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "aac071a6-02a5-4133-bad0-9d0c6761ff18") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1bd561f7-a663-40c8-acf0-eee46f8fc9a8") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "576fd247-97fc-47cc-ae43-05f17d02be88") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c8134002-06ee-4450-8128-8b0b6af4ea73") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "e00b12dc-f5d8-41fc-b681-c042f5a5045f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "f5c193ea-bfd5-4d21-814e-90d1c3a74007") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "127191f2-ee86-47df-92e0-dc259a7d5d54") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "3c826dce-528b-4dd3-b447-856b2bd17e39") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "e4a6223a-d59f-4eac-8549-c685a9b84a97") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "2cea16fa-2b89-494b-8539-47a74475227d") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 197 "Net-(LED63-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "dcb5a7d3-e525-4f34-a1e2-fda03b19e798") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 196 "Net-(LED62-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "bbe58df7-4c8f-48fd-a7e1-dd005c50cebb") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "425fffca-6ec7-4a53-b192-6bbcb77fc06c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "630253b5-dda7-423b-a237-99ed20e5f606") + (at 104.4485 159.6985) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED46" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "f47de6bc-8188-4a2c-9f8e-dfff5f0f5f8f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "4f8f51ce-4c36-470c-9cb1-3b057caf91f4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "a98f97dc-ebd0-49be-98f2-f0a3e1c98e31") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ae1e7943-fc50-4bb8-a93b-1d08cea53f60") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/c88009aa-9812-4b18-9c25-d22e0baeb5a5") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "e1edb969-a306-42b2-ba4d-545f53c6f001") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f597dd39-e995-419c-8cad-e3f5bcc3d68d") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "97a117e5-09df-48b1-abbb-6fa69df597ee") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "30e4cbb4-1e30-44f0-8dc4-6675b23b8064") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "11e6f119-9a82-47a4-a3ad-499994780372") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "25a623a3-f3a7-47f4-b3dc-65a2bbe150c6") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e0106792-0add-401f-9dbb-dcb1d46dd96a") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "bc1f7a1f-1e50-45b7-85ee-4d4bd8c347b4") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "6c0cbbd8-435f-4d7a-b8be-351e9078c24d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "82dd51b9-84db-45aa-926d-e74401123986") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2b683f82-31be-4e3a-ba3f-75af44efddca") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "00ddb20a-dc86-4d94-a8e0-77dae22dea44") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1290199d-6a30-49a3-8250-73a9efbd1d69") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6abc247b-db69-4a3c-8899-4d5ce54164f6") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0753a33b-5f6a-4b0c-8063-84262d12afd0") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "33c7092c-e8b5-4439-a831-d9175652843b") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "181d26ec-0e7b-4cc1-89c7-89e0a5b99c66") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a004cd58-ba24-4a55-9f6e-28358e85d745") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "179a2973-e9f0-49d7-8610-1f014be95977") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b0322d6-8d48-47f1-afa5-4bac46a5438d") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8e96841f-d22b-4d45-818b-385af89a5938") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "76cf9b74-d22f-4b72-be5e-fee2c8237119") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b549ce73-a63d-4304-ac94-7532a4cf1fad") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "52344586-0ba6-4dcf-a8ed-ed5b7bfe2495") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "50eadc1a-6f69-4b7e-b348-6cc2213d7a19") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bc540310-9d3d-4007-be3a-4cdb839b2a11") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "908a8d99-9e2f-4e76-9171-4242555b9fb5") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f17d306e-1006-4dea-9857-fddcb4dc3754") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2e0a1342-0bb5-4b28-8f03-fad8fa65c6df") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6c7424f8-92a8-4053-bdc2-96bad2a7fbfe") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "26649ada-2a66-4641-8dd8-b747cab808fd") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "32beb8cd-6b93-4543-a3c1-492e19aa7978") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "09a85c35-4c7f-4f5c-9a15-9201a0bc5160") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "21eaf532-3b3a-487a-8656-b7dda965a04c") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "78cacc3f-c40e-419b-a65f-3dbfb5b62bc5") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "6b21c453-2013-465b-9e15-81b4882868c0") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "46203c88-9bef-40ec-a12e-71a187f3dcd7") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4aff7673-e104-481a-8df9-70012cdc06a7") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "affafba5-a875-4665-8b93-fd1a58356ba0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "c6d7f108-3eb5-49db-9b5e-c1a00c23adee") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "68a1c32c-6cf5-4add-8839-a5401d972386") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "a1cfb47d-3f1e-4f8e-848e-3c0cb18318f0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "342694b5-89b3-402a-906f-a783ba0b77a9") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "3413c1a4-bbf7-49c8-8112-8d52f6448159") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 180 "Net-(LED46-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "1efedc4f-f4c4-4fff-8937-7b01bd21ff5c") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 179 "Net-(LED45-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "0882aa5e-c0f7-4ed5-b11b-b03ac6cd7a14") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "aebf7b98-32a8-4c8e-95df-4c192c861b05") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "6566ca5f-c408-47f1-ab32-2232af80ff5f") + (at 147.22 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_R1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "5973a2ee-0ef9-4108-aca1-1c3ed0c71a3b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "bd291be6-5f4e-4dd4-b4c5-4887ff75cd8e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "c9813b3d-4c43-4ea9-a6c8-3e521aed0927") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b095fdba-2b6e-42d1-ac7a-4cf7c2fa4d05") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/ea4eca39-e1d9-4895-9095-4485a31f8507") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d0592e40-3b57-460d-92de-bcad821af51e") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "79a28341-5015-4e6c-8415-5765a892bdb4") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "60e41e1f-aea2-4d2a-8c65-bb284a7111b5") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8e9bc115-b204-401f-b64b-d622cc3a0182") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9402b0fe-7888-4e1e-9bbc-1bc5d944e4da") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9293c43e-56bc-4609-a854-7462b14040a0") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ba27307b-6a4a-429e-89e5-8e9940091fb6") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b0a0dad5-7d99-4b2d-998f-05afaa29857b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c559bb64-9fdf-40dd-864a-9a848f9adfa4") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "93b8614e-2955-4251-b1a6-033826efd0bc") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "bcb43224-caee-4eff-9182-0213e8729ec6") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9db8035c-0b62-496c-b0b8-74d2c1a559a6") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8cf03453-0107-4f95-9f0a-39a66fe596e5") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bcbf40b7-9b37-412a-95e1-85c098c46579") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ec56d385-1081-49cb-9f24-8c8af6422ddb") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7b624ea4-5045-4d99-a469-287aaf4ac0a9") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7b982619-5631-4c8f-84ce-d0bccda10397") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8d1afa5d-b772-4dbf-975e-6e980153320b") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9f8b6047-9cf7-4a9c-9587-dd8e574eee7a") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ccf1ec4a-7cb4-453e-ab73-9efcb1e03ffa") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "39d4ef2c-1001-4f87-b956-f276b0b094dc") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4f745ec4-e0ed-4fcb-99d9-d9a2299abd86") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8c955579-c016-4e1a-b64f-d977a50ceda7") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46092ced-19ce-40fe-8ef7-7c68e568129d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f070f2be-cb7a-497a-97fc-e40ff0748afa") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cdd0481-c52e-453d-81f8-cc6cbd1831f6") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "64eb11f3-1c36-4285-af29-16d304d347e1") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "095bb66b-ca73-4f22-ade3-ad524406f640") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6131a214-ad95-4b4a-a30f-c819db5ed4ac") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0eb4a849-2f3d-455d-bb8b-e9023709a0df") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "03f2179a-add8-4f9f-a2c0-3029b98cc7a3") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e8adbcb9-6dad-4f24-9580-b14cae7af098") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "30e25fa1-3e9b-44ef-b46c-0f41df8fa343") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "53cdace6-10f3-4bae-aca9-77cddd4346a1") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "8792721f-e1aa-4794-8fcb-96f27295b95f") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c871dde9-136a-4b1b-9f64-2b2f2649e9a9") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1e2d58a5-a13d-4cf3-85ed-8aabb484758c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f25814b6-71d0-4465-baa4-067faad7933c") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b628bc70-4f20-4803-b685-f8dc15513bd0") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7b70af4a-293b-42c7-bda2-91ba6db73eb8") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "eaca89eb-4a0d-4990-9bff-230adb86f988") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "76bf24bc-9b1e-47f9-a877-b7413f21ef63") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "5f146b41-2fe1-4f10-b049-fbc09cf782e9") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "8e234211-dddf-47a0-8022-abd93dc0f3ba") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "14ee9d9e-c469-4db5-ad8b-b30e58b00a04") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "6751c7a0-c42d-4ef3-b956-992881a47bc7") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "1b9613d6-ea9a-43e1-bedd-98229f6ba3fd") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "4f29a9ad-cb61-4bdd-911e-d9fb6fec9985") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "f1e61636-493f-49ed-a792-b8c8abc1e4fe") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 31 "Net-(D25-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7200f06f-bb82-49b9-a1d5-096ace876b93") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 31 "Net-(D25-A)") + (pinfunction "2") + (pintype "passive") + (uuid "d6c7e99a-db88-499c-bd3f-dfd534f5764e") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 31 "Net-(D25-A)") + (pinfunction "2") + (pintype "passive") + (uuid "4268d915-1d0a-4c60-9549-ebbe945fcbb7") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "6617eddb-fd24-46f7-b51c-4e59fd536bf6") + (at 280.595 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_[1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "4e91d594-5204-40ed-8b77-0328ea0eebb6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "1fffa8ed-03e9-4681-aba4-41a6e5133a48") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "7d380303-e2a1-46af-aaad-01b7de480a5b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "196b2fe4-2860-4350-9828-1afded2263a6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/1dd40309-298b-4501-a09d-5becae1ca2ba") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b38458b9-4adf-471f-8cfd-0bf98642c27a") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d5709735-b11b-428d-aed5-775d827c50a8") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4bf8fdcc-84fc-4f3f-bff6-8bcfbefa2be8") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "21ead692-fab8-42e4-9d19-eed5347af098") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5ce9373f-ea6f-4c62-b1c0-97266910c9d4") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7c6aef99-6455-4a32-a90e-7db7c14e98a5") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "88237213-d5c4-4112-ae5f-ea4485247d05") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "62a19de9-d1ee-4c88-80e5-8d68460a8879") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3a927301-bc41-4da8-a55f-31d4e2df6aee") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8816e638-7d0e-491e-a3fb-c8e89551757f") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "3062aa73-711f-4529-94fa-be28c513ba7a") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "86156c08-3aae-496d-bb44-f8353ddfd0b4") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ee2065f1-759e-4e88-b2a8-429c7348e15f") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f2aa7665-f047-4876-a9c5-a72651096de3") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e1effca4-49e0-49e7-96ca-705d96cd5932") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "54cca775-50e5-4b41-be06-ba98ec1ff3dc") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4ef01347-c936-42c6-8400-88296e692d2c") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "86ff89f7-aaff-488a-9883-76bdebab8ac5") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "85d4edbb-c1ba-4631-a2ef-811beacc4355") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "07c2ff78-24eb-41b3-ab1c-458e4511ee12") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cb00e54-d5df-4d86-8ba8-4929f5356288") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c438f24d-35bb-4cee-a698-189786761702") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d3ed33ab-712d-4495-ace1-a30f19f9857c") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7c7bc759-7d4e-4fa9-8c45-b43d27c47a0f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cf5ace89-a42c-47c7-9696-3a4331191fe0") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2c368d48-a486-46dd-b04f-bbb6bedf6476") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1a00514a-f2d3-418b-a89b-6bc213adc7ce") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f73d9646-c1fe-42cd-bb88-eb71bf34ef5a") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b16a0ccf-edfc-45cd-9c60-dffab008315c") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9ee7d730-64ef-4de2-90a1-2c22717d49ca") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a3203386-5efb-42c5-8b76-24a42db2a619") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "36fea9eb-3d84-4db7-87d3-2aead3e3ae81") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4dd72b25-6ee9-4274-9f68-ffa992090be0") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cf593c5-1ac3-41ad-b37b-1d40e01e623f") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "abb0bff7-b13f-4b7b-ac94-c826c7545d0d") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "67fb48b9-04a5-48a6-8592-4b35c907d5d2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "00a199ab-ad35-4b6b-8a81-d9963d04b60c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2dbcf6af-1f2b-4517-8d9a-9ceccd6ef567") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a62fbc3d-817f-4589-b56b-6c6d0a569c07") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4f24d4eb-95c4-4798-9182-f9cc96d9d35b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7466787d-c577-469d-96ec-c5bd26db7b1b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e68d5dd5-cb68-40d4-86e5-b01a488b1b7a") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d04f9386-8007-4f71-84a0-a5bbc6a420cd") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "06cff49d-2fe2-4afe-921e-a56807625928") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "60a3333f-4ae3-4f24-a921-80c7f709046a") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "6826c5fa-08c9-4b72-8bcc-488ca64c4661") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "96fd6cd6-4f11-4a7d-bc19-f336af229098") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "a77dc746-d795-438e-9d55-e8a211a38198") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "64bd5140-1fd6-4cd7-a102-539938202ea6") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 28 "Net-(D32-A)") + (pinfunction "2") + (pintype "passive") + (uuid "3cf7f6fb-40e6-4d3f-a801-7c96a487c513") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 28 "Net-(D32-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2b4a3fe2-ef79-4134-ba3b-2924072f9737") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 28 "Net-(D32-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ceea06a7-bca9-4e76-aa05-19f496974449") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "686dcea7-02d9-4ae2-bd2b-7a8b01fb3f23") + (at 228.2075 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_K1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "683ba4ce-28e3-49d8-851d-fb7900d95e42") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "21374a71-4cd8-4678-9231-e7248ff5f239") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "6a81a20b-673d-46fc-9155-3fba050206cf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "d15b3c45-2cf3-4b4c-b752-2b1c731040c0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/ced57a46-381c-4ead-a15e-2b8c67bf9c86") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2b1f1179-1ee0-4aa9-9979-b2b947d69fad") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bbdfae0f-7666-466e-947c-5d94025fcc60") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8f8112b7-6fff-46f3-8912-1149835011f8") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2a677a2e-c2c4-4463-ba8a-c890d1502815") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3b12e7fa-bb26-4ddd-b23f-c9c8e0f15b20") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ca5f234a-89af-4bf7-b263-fb56c24bf6bb") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b5bb97db-f409-4fd7-976b-3a75aaa91425") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "61e0d4d4-dc5e-451b-86b9-5fc70cb6158e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3598fede-7dfe-4892-9030-1defb41bd171") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bd00efe2-b34e-43aa-83b7-8534be902196") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "04b5c987-1309-47fe-962d-16989923e39a") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1d25888a-9eae-4067-95c2-21b9080b129c") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9315ef0a-1bf6-419d-bf65-2bac085e2dfc") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bd2c8aa9-3687-402a-9ae3-dd3df1f31b0f") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "efa3e3bc-9cbe-49a4-9783-199247f6fe54") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "67e3f73f-9af5-4e3c-a831-b446964be721") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3d8d8905-022a-48b7-9635-2b4bba76236e") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b0b4143f-34c3-42a2-a6df-d6238fc44ca1") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "21b0d228-7174-4313-9cb8-52fd7b5b3388") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "84065ae6-e8b4-4a3a-a5eb-93fe7911d7dd") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "08679673-b9a9-43cf-a09b-c4ad75e0540f") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "82b1458a-997a-41d4-b676-d14761defbd7") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "74b7c0cc-43da-4016-b684-208b47568d6e") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "35a4c742-09bc-4c44-968b-1894c7dad6e3") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8a783874-eb86-47f7-9f84-469e77c71cd2") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7a1e2b2b-3a5a-41e4-9f22-ea4bd8a68ef4") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "167b0c75-489c-4edc-9482-3631b93058be") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "19cd3d5d-49cf-45db-8644-5abd3e4d0e5a") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "38770e2a-e9e2-42e3-a38a-e0683b0b07ee") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0fdffff4-6e31-481b-8cfc-130f6122261c") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "90cef1ee-b821-43e1-aac1-ed8932ba84c0") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "053df570-53eb-435c-bfde-60a2be86dc15") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "64d0da62-b0a8-4e1b-b6a9-9643f4057ba0") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "74d9cadd-31c6-4603-8347-f9c11d588d43") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "fa92ccdb-b14f-4467-8332-e6a0877737c1") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4e7131b0-b507-4fb6-ba6e-f93efe3c2933") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c41c5991-3dfb-47a7-88bb-9f2607556abe") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c0bb050e-e5bf-4c9e-8ea8-041eb88e9dd3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b06e786e-566e-4076-9618-1350fd7298a2") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6cd653e8-4370-460e-87d1-539693cb9bba") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ad9cc7f9-15a1-40bb-b16e-50b096eaca30") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "11c603fd-fa27-4598-a36c-4fd585578870") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "0006cd04-8b05-41e5-a641-f7e89690765b") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "dd4761ed-8f27-4171-b24f-3b966a485826") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "83a09947-72a5-4b24-9594-62cc8054377e") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "6790aeed-af04-47a8-b584-b731e757629d") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "7b93a6d4-287f-43d1-8a16-b77cd2152c2b") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "3866ab12-ec50-4f4b-aca9-24a1ea6b9c15") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "83ed6b6f-53c6-4f56-b7a6-245950162a36") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 65 "Net-(D43-A)") + (pinfunction "2") + (pintype "passive") + (uuid "099956ba-7805-404b-9edb-329b91582343") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 65 "Net-(D43-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6371f80f-90cb-4221-babd-77720aaa9e4e") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 65 "Net-(D43-A)") + (pinfunction "2") + (pintype "passive") + (uuid "045b8ddb-739b-4a1d-a9ea-c34c82b6fb3b") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "693d4851-2194-4ec0-b237-9ea5e70f1fba") + (at 316.2877 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED43" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "6252567c-59d4-4594-816a-7206938b77a3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "db8a49d4-f24e-460e-ba8a-0e18d4159915") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "6dc3f39b-e87d-4e33-9476-69f7f7c39f0a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "053f7a1a-3017-4b23-b87c-b6aefc654495") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/b9bf3c83-754d-416f-993e-1ac3a4c6aaf9") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "32790640-2482-425c-9fd1-284cccd6c2a5") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "41b04e21-519c-4352-aee0-08a07b9f7864") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "29faac75-63a9-4087-ae3e-de71bdc8b644") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e46af58f-cbfc-42db-b6c0-e03ec6aa826e") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6acfa88b-4e3c-45db-bfe3-a91cc983f0f7") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "06f3c774-e920-4915-99d0-bc68ac3052bb") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "124c1945-c21e-47fc-a6bb-e6c24da1f543") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "91a3dec9-cdb3-4df6-9b52-a2f30e40b6c1") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "17093263-4313-40ed-af66-0b1543e8718d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2e5f5767-b40b-4fb3-b310-e3f2273dfef6") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "888b2763-c7b3-4166-803f-d13e3fecaf33") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cae32854-6b5a-484f-a21e-a5e4681b6ff0") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "99586c81-d86b-4029-abc9-f6b56869e00d") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7d02a7ff-9c1b-4098-a4ac-0751b36ed783") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3b5d2032-a07b-4cdc-9df5-19897901854f") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bd6a36b2-3846-41e1-b1b0-f6d5eeab2199") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "aca5b74f-d6bb-440c-bd77-9b5779cfd6c2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "92de7c26-b407-42e5-b839-9ece7fdcabee") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d130cd52-f87a-40f2-8c9b-c4716d46e4a5") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0f74214d-ae67-4cd8-99aa-ee95143df678") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "caa535ab-4a44-4b37-9676-ad7accba55d2") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b1e8f018-37a3-48be-bb0a-cdf5437f05ae") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "249de136-e220-4e3c-83d1-40f268f03966") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b314a74e-7f16-46f4-9237-d847d3787b60") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b33cb44c-a382-4430-b2c7-6ad258768fd3") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "17f7f2ee-c91a-48fb-93d8-bf1fc9797274") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7ad3f13d-054d-4fb8-b8a5-8b35b8e3693e") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "421e1a2b-6c2f-4074-94ff-d32f7c74f0ae") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b6c48978-c61b-413e-91f1-671afab14355") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "569c317b-9c27-4a54-b385-01bad905ea37") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e996aa16-7a75-4e22-87ec-76c237932134") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "51ee7785-a968-4b45-8a54-54c5f0e0bf45") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "796a91bc-6684-4cd7-af8d-5233bcab37ec") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "416c76fd-77a2-4cc0-80f5-4e3e56d49548") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c429e75c-7412-4177-9101-a2be3a139ae6") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d1cc1b66-e47c-463a-9df6-7d65b22be1cb") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "794d4f2f-1b4b-4e5f-bc7b-103b59329224") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "33fd1c20-d254-4200-8e29-1315bd831b07") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "37003350-4711-4ce5-8908-9cd131d6d5f0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "7b521a41-6033-4883-92c2-30f521da7b5b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3dd6c4da-6d03-4d5d-a624-cc30e495b82d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "a0f96a85-2688-407b-b423-ccaf1c30f099") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "1f0aaaf3-d1bb-4473-9ac0-125ed8fdc5ec") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "d28e3413-4217-4630-b394-62cf635e6ec3") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 177 "Net-(LED43-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "f3e1cd6b-1de4-4d62-8a8a-d36335a65768") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 176 "Net-(LED42-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "2c86b7a3-4f5e-49cb-b2d4-57be816b3917") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "005084d0-4f1f-46fd-9dfd-7837f0bddc9f") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "6b612ec1-5651-4768-99d3-3fe1517854f0") + (at 73.4263 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_SHIFT1" + (at -6.1937 1.5212 0) + (layer "B.SilkS") + (uuid "3d0147f5-2d23-44e8-870a-f236fce9a9c8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "7d2250ae-d57e-45e6-ac20-421922a8d51c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "cfa9e388-4a59-471c-b2c2-101cd6cb53dd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "405685f9-68e9-4e5a-b5a0-bf10f04b19cf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/ef3ee0cc-35c4-4832-a931-96be4e98d3ce") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2528bd6d-310f-4919-93cc-c42c91a6249f") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7314a4b0-c645-4199-a4a5-70e5284b416b") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "973efecd-7aa6-45c5-a04d-b642e3eb47d8") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "68bf298e-efa4-4cc2-ad38-cb165b3b95c1") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "db0c8347-6cd3-4312-8c74-9b22f891c46d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0e543d2f-2215-4f8d-b2e5-95906f204816") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c3508564-188e-4499-8137-d0ab1353b259") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a2e1f33d-b272-4536-938b-309b0ed792c4") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "670b54ee-a917-47fe-b2f5-139553b50213") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4533dad0-3d79-4353-9e1d-c71b2235ffd0") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "d8505e6f-7a2d-4e59-a7fa-129f6a0eed8a") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3c5fcc7d-59ed-41af-bc24-47fb71963ea0") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b6ae019b-d205-4dc8-8dfc-7da9fcad9cb3") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9c89aaca-d2e2-442f-a0cc-828550d6cc9a") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a605a382-7ba2-4367-bb00-dc10893dc0da") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e8612f6a-6474-48b9-8946-5eda471ae3ce") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "990ded9f-d169-4153-9ef8-a8cd46d1320a") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9e5d4776-4bca-4195-a3cc-f5fd467cfe67") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "906bf0f8-35a6-458a-8ce6-d8e8a445e80e") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0141149e-5bb3-4198-a854-f3ed9503f16c") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d13b7ad5-1ef8-463e-b70b-5026d794e406") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0a86a394-6727-4a41-84d3-bf6df9c1985c") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "21fe5a9e-1152-4ef0-ac72-f702c78f0f30") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4694ba2-cf29-4286-93de-64391dcb33bf") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb8d30c6-8749-402b-b1e9-93027e5107cb") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9c4a2e75-f2fb-4edc-9860-d0aaa51fbeff") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eb81c9b2-da41-4c2d-8bf9-86f10f071ad2") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cf6db94-0e74-452b-9598-08fe10923a8c") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f0996b39-38b7-4e09-a49b-a9689497c95b") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8080ca91-c4e0-4ae2-80e3-bf1ccb21ba86") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b4e212bb-9ff9-4184-927a-4db113b83150") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dac3f067-d3f5-4e52-84e0-4a6fab3db329") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1346a194-01b6-47f4-bec9-1de3c130c1fc") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cee05066-d797-445e-a319-c6111b4e287e") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "cbe937ba-0190-4997-9a00-abd74d2dac49") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "87decbbb-8766-4da3-bf3e-a3b1af862360") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6580bed1-6da3-4a9a-b4c3-ca9b00970283") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f5694223-9909-4821-8fd0-cb17f4cd92fb") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b768edb9-9348-40ff-93e1-2a5542e002b0") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "84a71b97-4795-47ea-a9e5-433a9bf54238") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "758af576-4b7e-41ba-8192-0206d1cb89b8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "384601f0-b783-4c8a-acb8-b1de3beb9895") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "dcf8bd98-0c98-44fd-b637-127ce805d9ac") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "394fb0dc-c373-4c2c-abc8-9b23389b8a28") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "4b7a25e4-cf17-4160-b335-85a03ddc84f5") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9dfcec76-4bcc-4271-88d0-9a2e7d408c63") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "9a088b85-25ba-4fe2-aa95-8d63917f5b03") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "c0f2d5cd-91c3-48d5-9338-e28cdffe4b24") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "e692fc95-fb57-44ff-85c4-3b75892ef258") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 21 "Net-(D20-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ab57b2a8-3f71-4e46-956d-a0efb27a1fcd") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 21 "Net-(D20-A)") + (pinfunction "2") + (pintype "passive") + (uuid "130e7849-5849-41b9-a206-2e550311f8a5") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 21 "Net-(D20-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6065ccd0-98bb-4566-97ca-eade43948035") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "701d2091-fc87-4be8-b2ba-55ced5939d90") + (at 66.2563 121.5985) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED16" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "83b87f15-6338-4163-9291-50b397fcf24b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "6493bb64-904e-4216-b803-db81d696e385") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "07ade686-b81d-4d6e-aeb0-d6615ae87201") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "cf72bf6f-227b-40d8-a17c-b0f0df81a219") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/034c6eb4-808e-45ee-9624-932e1c1d5bc2") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "cc100adf-703f-4b74-8ec6-4b75272d5d15") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "831343c4-884a-410b-b49b-e010ce902295") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "80195f05-8f7b-4898-9d07-a7447a0a591b") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a1e2d103-a357-4c33-bd5c-952559611acb") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4d82bbe4-01ea-42d5-bbd5-044535f229b2") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "55bed7bb-de4c-46c1-bcef-e5c3c7290c8f") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4200eb9f-b27c-4150-a75b-72c1108260b9") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e4df3ced-44fb-4482-adac-e48da8d76f97") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "420d0fdc-978b-4bca-8d6a-573647de22ca") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "086e34c1-c542-4b5e-b1cc-fed9ffc39d43") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "598f4ed4-25c0-49a7-9094-0abc50485901") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0db4ca07-a3cf-49e2-897c-5dff68fab13d") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c1a7a8e0-a7c7-46b0-92e8-51209ffc0593") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b8e77339-56d4-4b84-be93-d1c5c71c75d9") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "53ffea3c-61b8-426a-8d01-ddf3fe694f7b") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6d8817c3-7e5f-47a3-80aa-b392fafaadbf") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "193541f9-1831-4884-8880-05c321c4873a") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4baf9544-9b56-4e8a-8243-a9fb295ad872") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4f1fbea5-f6cc-47b6-98ce-ea2709107c23") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "29e51b70-281a-4c7b-9c9f-e7dcb6ed0c21") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "98b4bf1a-428f-43a6-ae8e-87f0d1a626f4") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "71b6719e-f9dc-4dd2-bbe3-6eefe6a680a1") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9191deac-d03e-431d-8ab1-66e5dd43f1cd") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ecec75a5-f3df-485a-aa29-fc7674d4d4c7") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "89f71b33-f836-4b65-a59f-437979f7fe08") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "04555ddf-0129-403f-beb8-0ecb623b1001") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8fefe0d5-eb27-47d3-be5b-91334ac46857") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3bd83f4a-af96-4e3d-8d82-e4ce83b200f0") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "27c37774-306e-419c-9de6-cb50c8f41240") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1bdcf76c-3632-4748-acf1-3e09aee87e00") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "85e8f9ad-0617-482a-b870-dd3dd6a0429e") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7ebbfe2d-7414-4e4f-ac84-4f23a3f63d08") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a05f0d71-ae9d-41b6-8e76-ff06f934d02b") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "fec5cd6b-537f-475b-9257-6ce9e4b004fd") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a7ff70ef-caab-4e5f-8bab-7e358cb6280c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9a31b5b2-3c09-428c-85c3-d6af57f8a997") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "dfd06068-6ff4-4920-bff5-c4f8f65bae5e") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5a23dcbf-108e-47c4-8d63-b24cae1755a8") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0562caf8-5eec-4d62-b77e-877421c69954") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "4402500b-ed8e-427a-b639-1d20237e97c8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "5831d8b0-4a87-4bf7-b837-20553d767094") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "cbc3b41a-3b54-4807-b004-20137a0cc4ae") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "a79087eb-e9a1-458f-9386-0c79c511d59c") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "c45399b8-0171-4546-acd9-68469b7d7ab1") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 150 "Net-(LED16-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "ae7659f5-bd78-41ad-a58e-40bab011e369") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 149 "Net-(LED15-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "a90a4ac2-e98f-41a6-91f6-e73bb707a50e") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "fb52ad22-6714-47ef-b1d2-3f030588f428") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "73109eb4-e8de-4279-8f13-c22cb08543e0") + (at 346.9925 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED68" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "97673942-2cba-4249-9c78-ba33e3bb48b6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "a3035642-f6d7-4814-85bc-8a0ea848634d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "8f89dac4-907a-40ff-a61d-932e5335be09") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "188966c7-7d3b-4840-af31-b14a1f667173") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/06cdd5a6-e042-4b7d-a4e3-37a8f66ebba0") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "3269746d-d517-4a6a-a2e7-dea3fe595bbd") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2ac49ed9-61a8-4903-b6fa-076e8f7459d6") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4cbaac77-9b06-4bed-b36a-1762432607c6") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e4d35890-5090-4a55-b69c-38207d91283b") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "96c47583-632f-4566-9fd7-4197cbe4ab8b") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d2067093-f274-47ba-9fe9-56a14860e2cf") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "96c94abd-4597-4302-a56a-a15886e6e76f") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "669886ed-5c5c-4a66-a211-2e6f9cfffa54") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "6e74bc0e-1652-45b3-b418-eee821c2b4cd") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "3fc444dd-37c4-4168-b5f8-4af21a455f5c") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "91c4b048-ee65-42f7-82ff-448bff853ce8") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "007bd00f-82b9-482d-8fcd-6dcd1fdd3945") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ef7e2e44-c458-4704-9129-c4f4b1ff0bda") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "27f17d37-f211-43d2-acb5-bbc717c4ec2b") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "991a824d-e6c5-41a0-a112-783b2965b996") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3897d59a-37d7-4d55-b99d-44b4fc0b2cdd") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b827663-57f6-49ec-ae1e-d52b15673952") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "de368c79-378d-49ce-9f27-1a4d741fae57") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1746368f-9fd7-4dfc-a2e5-5666090ca87a") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b16871b-dac4-409c-b89b-22759d74da33") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a8d101cd-728d-4362-9cb0-1faffa8c2e19") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "13774def-af68-4e1a-9a6a-bf608af9084f") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2aa52665-951f-48d6-beef-1b4953140704") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "afbbd980-f8c3-4ab8-b4aa-41215ee78bdd") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c28dab05-7978-4254-b2c1-33f146fcaf87") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ad0638df-d56e-4c0a-8dac-9bfc55a89315") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "815c76d8-ee1c-48c7-a3a4-f958d30567c5") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7d9804c7-5dbc-43dc-a324-20ef43a0128d") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c4095447-e4cd-4478-a122-7d97b2f7a853") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "07ee2636-b981-450d-8138-fa124bf2bebf") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c80b15e1-78f3-4846-a773-c1fe190149b1") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fa6f8305-533f-4f16-8b66-cef0bf28ad96") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "595182cd-a550-469f-9bd1-6e70eb999faf") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "acd99fc6-ac63-4dd8-a7ec-b8509ffe3b57") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "72a7a5f6-f7b1-4bca-a67c-cf290529b1f1") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3e73a4c1-be86-42a5-9d23-a32bad652402") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5c74c6bc-89d5-4dc1-b9e3-25efc179b55b") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "44cae708-63aa-4355-9397-b65e07208ffa") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "3e03a22a-e5ad-4678-a86f-1b9ba509bfe3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "ba8d18ad-e814-47fe-bb19-951ebeeb3134") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "10ff738c-48ea-48b2-9149-59e2548adc8f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "c5fac929-0a04-4293-9db0-ea4a9e1e552f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "07f2324d-92e6-46d1-b64d-d88dfb499ea6") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "358fc60a-65ea-49ef-862b-1bd240874531") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 202 "unconnected-(LED68-DOUT-Pad2)") + (pinfunction "DOUT") + (pintype "output") + (uuid "5628386a-d4e5-49e1-b6cb-80a1a2e211fb") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 201 "Net-(LED67-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "0a91ca4e-4bf1-46b9-86ff-3c2f06ea6932") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "49445f98-7f36-4153-80c5-d310912e0611") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "74534863-e518-455e-a45a-9ec1d1df8fd7") + (at 275.8065 159.3892) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED55" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "e28c2e1c-8ce5-4b56-9cc3-407b85d5b668") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "b38025bd-dc8e-4b22-8370-08f5cd93f79c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "2cf3b000-a7e4-44e3-bf70-6e2349af16d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "5091ce3a-5c8e-415f-a6e9-dc70212a1e9a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/19e33fbd-b96f-4cd9-9f9c-33735661330f") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "55d334ee-fc87-4cb4-9b9c-008664a3b425") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "cef041ec-9618-4052-b22c-ebfee8cdce16") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b83edb15-c7f9-42d3-9916-3c61dbfdd471") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "99ec87e8-1b4c-4c18-ac95-d00c4aa1374a") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a14d9f6b-8b10-4fd7-b0a0-007afa20f86f") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "999f3b39-6829-466b-bc45-0b1723f9e9ff") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ce310a22-2aed-46e9-ad2e-14a1473bc5b5") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "0fe7296c-f94d-4b7f-a22d-c291e57c5f21") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e1dec305-1483-4b0d-acdc-b99705a70d87") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c69b39d9-a5f6-46c1-a982-ab66af52ea16") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9e9238c9-9ebc-48f5-a136-1621b0ee9200") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "dddab2b7-64aa-45ad-8c86-34ca7821f014") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4f8bc23d-22e4-4041-ae0a-7efd317b9053") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "36799108-8cfc-4210-8d12-44362557dade") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6b46cc52-2832-43e3-b863-8a82a4b2fd1f") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "243d6278-7283-4d92-9fd8-c36aad64f470") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6c2ec039-0b4d-4b3f-b382-e78e6c87c2ae") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "86d69f66-edf9-473d-8bb9-f756f2c19e0d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "05de90f2-8827-4cee-a21a-5d6b6f2aae04") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "30d76989-e936-476e-b87a-b0f6bcc428ed") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "784a561b-e509-4fbc-a007-bccbd5fd18d9") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f831b1ef-1364-4679-a7be-8554355d1451") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ff28406f-9a6d-423a-b9a9-cafed8742dcf") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a49be013-0be0-4a63-b3a6-71d5956cf2a6") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "be322c12-fc21-41c9-8a77-65f129321ece") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7c5725e2-b205-40c4-b20a-15c52555cf65") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "21200505-fce0-4cb5-bde4-b66979e73932") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "38dd2ad6-a105-4b51-9e89-5b6450ae6884") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "40b44959-a2ab-485e-b060-1bfddf183c55") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3f7ec37f-34d7-45ea-9fff-298859d1a847") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8ef86c68-2bbc-45f3-803d-2c631fd253c5") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "defc6f32-bd9c-4110-905d-63e9d4bd1dd1") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46de2056-8a1c-404e-aff7-582935923f36") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3c24da40-3b30-4278-866b-7f8d7cf33286") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "88205f6c-ab5d-4e8d-bc81-57c5a6f77f74") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7ce7b0c2-2e64-40e5-8879-d34c33918402") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9bb89ada-9256-4261-bd29-c05dfe0fc69c") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d174b902-adb8-4eab-b956-6b7bfa8dabbf") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "ca9b7101-df35-4e83-954c-a07db2d29e09") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "f3f10e97-1113-422b-bde1-754e98f1e5bb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3e94ea81-942c-468d-acd0-b04b4b6f0a07") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "bfc895f2-21a1-4613-b610-3b33ec354861") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "ca0a4834-2178-48f7-98c8-bf93a5cbf3d3") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "400a134b-04f7-4f3e-9d25-7d66f93c820d") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 189 "Net-(LED55-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "90e7e262-5ab3-4d27-8913-0591af9e8c9b") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 188 "Net-(LED54-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "44374fad-5b2c-4a3f-8935-1940dbaf9d48") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "55471e73-4858-4f27-9f33-c8fa51afb428") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "74ae647d-9848-49b3-931d-d6eff5a0fc73") + (at 66.2075 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_TAB1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "58372ab5-8639-4e71-9045-aa0d00d25b28") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "1396fec0-3f4a-4792-84e4-ae3ad4a9df4a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "e6165ccb-73a6-4e59-a7c0-8993986dd15f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "2ba1392a-c375-45b3-a3d3-77d543aa3bb2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/de52ad2d-6e46-4b84-b175-bc1899eb0e9b") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "34663933-ed27-4415-a4b9-719c3e5be49e") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "efb6f188-d00b-4208-b8be-34dc8ff91d2f") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "742b05c5-f9d3-4333-833b-0f2cc2a00535") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dab1b711-2049-414f-aa03-84b963772876") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "77cbd0f8-65d1-45a1-a27d-b66cc72eff02") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f01b0c7e-66bb-4f4d-9457-cbbbe5f34d4a") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ee3cee85-25d0-4168-b4df-b070df5ac419") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7d81c141-67bc-45da-a756-17c93d9dc2e6") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "38ef775b-d122-454a-b97b-1e498c6f8377") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dd230f3b-9def-4b8f-9d54-c1602a224374") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "f60bc2cc-455d-490f-9dd0-22f6821266a0") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7d3b55ce-b7c3-40c4-851a-765113a16c5e") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b3979814-3c3c-41a6-a97d-91aa17a61a45") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "89600c1a-124c-4f7d-b0bc-f76a639a75b2") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "358db3a5-50c0-4a3e-b5ab-830d3769078f") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "798146a8-8620-4d07-b9b0-d18e8656cd3d") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d9583382-68ae-4408-bab1-58e323100526") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "21bf15bf-038d-4dc8-8df6-bccfca6b239d") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "52d525f1-956c-4bc5-9479-045ae308e361") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e00cf7a7-4f03-4bfe-bfa7-0359c59c8564") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9e3e4fa7-33ec-418b-869d-ec9c637bb83d") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3610255f-a442-48d0-a805-19e8cddb900b") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46239bf9-4547-4c22-a696-d493db44e10d") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "98737d0e-9715-4e58-8a07-8b7e5e4ca903") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "971aea6b-ae47-4877-b7b6-3f905eec4603") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7e4fed69-c64d-44e0-b7d6-e555e2840434") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "395a0a45-bb97-4228-b2b3-c2fbe3260557") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b61f82f5-fd49-4430-a414-e49221d02126") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "892447a0-1f21-461e-9453-e0fca474df2a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2295dbe8-1a3d-456e-b1d3-6afe8749af75") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "19809d28-81b2-4fa6-b844-e88baf44855a") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bceb92b7-95df-4422-ac3f-787384cf1f25") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "260f91d4-dad6-4cfe-a54a-8827f9f9f0f5") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cc5baa7c-516d-42af-82b1-482aff6bc7e4") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "36abe08c-26d6-4eb4-b537-ca216e3090ea") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "713578ba-991a-40cd-9664-9773e47c9415") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ba28d4b2-1b37-4af6-9a88-2577b90d37ee") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dd42f828-c7f9-47fc-ae12-6533670c1785") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "69b3f9c1-0f5e-4a14-8aab-72e569e2fd32") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "90d27076-4bb0-44d8-9dfc-93f97953a439") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c8e4537d-9b22-46f5-81b6-af892b1391c8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "98121764-5507-4786-b7b8-8ddeae6ed51f") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d8857816-b327-43cd-a9a4-70e045842024") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "36b9a019-ff7a-4924-9917-a4abefcc2cbe") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "fd9e7e47-151b-4843-95a6-21571a1994ff") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "cdb531b3-bfa7-4f53-9b35-93027528efc0") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "97791898-83e0-4a37-880d-2da1bf3f6f93") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "07961cc0-77ee-436e-836b-8662bb9fe2b8") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "9fd6747c-b87b-497a-b167-700d5546daa1") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 19 "Net-(D18-A)") + (pinfunction "2") + (pintype "passive") + (uuid "1e210325-5c19-4723-b21d-e346b2ea8ace") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 19 "Net-(D18-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7f206989-c815-4a96-a274-f2c5f2206f96") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 19 "Net-(D18-A)") + (pinfunction "2") + (pintype "passive") + (uuid "85fcfdc5-2ead-4aab-a43c-3c887be3bf44") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "79a8659a-255a-4577-9bd6-f34e692b6902") + (at 128.195 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_E1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "87a7055e-6201-48d0-a508-a84997351e4d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "ea5901f3-8281-4a80-95a9-882fd8d5fc41") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "9cd2f96e-4b41-4f80-aa93-957f8821fbed") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "59f4c79b-23fe-4475-a99c-1c5bbc59a4f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3a475896-f033-43a1-8bf2-5cdfa34f78c6") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "86d528d1-d598-45cd-93e0-0797ef1e57b9") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "79cb1cc7-2ae9-41f0-9680-0790cb319e8b") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "075bcc27-77eb-479e-acc5-839abb63bdd1") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "953ee469-c5f9-47ab-9ed6-1ebe97ead3fa") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "41511865-218a-4743-b13a-59b889d17a33") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c069c5ee-2502-4560-b4d7-e75526970abe") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ed82baa7-6b1e-4ac1-8fd9-ed3892aafdc2") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1a582fb1-5548-454d-802c-0891d1dae4d3") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f8a7fc4f-4352-4da1-a3cf-43ebbbbfbf79") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "620aa640-1fc0-41c5-becd-f72bc8b4957b") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "e22ddc09-b4a8-4c7b-8c70-49bcec61c004") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "392f9f0d-6f18-4598-88bb-6d98a8b1dc15") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "794f1ad9-8827-4d6c-8897-58f2b950c39a") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b4465a74-6d71-4b28-9dbc-712b8c0f79b6") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ad47ec51-2538-409c-9911-4139ece0f886") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0fd5d8c8-34d8-4363-bb4d-0fb510b21071") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "59e8e36b-d6d6-42f5-bf49-0340c87358d2") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "784cf8b2-925e-400d-9d9b-e8c2cd59505c") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "745eaca8-3cbc-4271-8d97-87c6a7ad5ea2") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6378d8ee-a5d2-4d0d-9f27-92beae1c270f") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9fc6ae25-f17b-4d56-9481-1f24c7c8ec41") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4bbb517e-f0b4-420c-8056-54e725b35ce6") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "39092b22-cb64-4d05-9f01-321500c409e7") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c1ff38f0-6d53-422c-9477-75739919d627") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6fa9bc21-f234-4135-a07b-cd0d9d4ec3bc") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f8fa7e66-c2ce-48bf-9f1b-e94816e2924f") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "28c6bdde-4aa8-4a4f-9917-ac9f8dc1c91b") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7398711e-924a-46f0-a7d4-570a35264f81") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "98949872-3fea-44a6-be88-ba123a9015bd") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "381ee8e4-dd1e-430e-a48b-ebeb2ad20a6d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6d925518-600d-4154-845b-009ed26eafe8") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dc28dcf6-9024-4c23-ab36-66738f8161ea") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0d1f9b63-0d37-4655-9422-67506872c234") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4ff5ce5c-3129-4313-a0e4-3f1be346f0f8") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "97214ceb-c385-4bdd-a93a-4a76b923ab36") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c01e418b-416c-4c65-aa6f-800ce540df64") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f3df777d-c923-4d76-8f03-5610a83c5d04") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "61f800a3-62f4-4d5d-9fbf-c3d3a7a94639") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8d36e36b-c3ae-451a-ae31-efa45c57cdf5") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f8fe1ac1-c117-42bb-81c0-6395f8d55bab") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "bf187c25-4a6e-42e3-b663-8c4a9bc0e651") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8cb0c7cc-45f2-44cc-a52d-331a11c97c00") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "541f7b75-900f-4e09-9fe9-97aaa53de2ed") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9e555caf-89f9-4b48-9cd2-999807e087d5") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "4f555ea7-a485-4b28-8cf0-db48ed0898d6") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f59c3ba9-8821-4945-804d-949460c5e487") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "0596dc1b-12bb-44a7-8dc0-35104e7e9e78") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "96c3ba21-1bec-42f4-b0a3-9f88cd1c7485") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "7d91ca17-665a-407f-8786-c8bb92111b1d") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 30 "Net-(D24-A)") + (pinfunction "2") + (pintype "passive") + (uuid "36425d5b-8997-4c97-a5e9-6e2697efae1b") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 30 "Net-(D24-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9bb9e876-154d-4e3e-a8cb-69704063f716") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 30 "Net-(D24-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9ff5ae32-8e24-4939-b6c8-c9313d7cce1c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "7e6301c6-2ea2-48dc-aad4-69446f3c3e64") + (at 94.8313 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED32" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "276b6f93-8cb8-4e52-8281-28e2b18e2cb9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "ac8e4121-34a7-4fc9-a6f2-c7aa29565395") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ae251d93-4f5a-4a81-b0a5-54588a6388d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f6883e2f-6c4f-4743-b7d7-83611927367b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/7e355e6d-71eb-444e-bb7a-dc4b451ff7bb") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "ed1cf253-06bd-4b3c-9a20-41528f1521bf") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4bc7a91c-0d05-401f-bded-fe415c8521d2") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "46b64394-b8e6-4ba5-a00c-09d868252103") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e993db2b-1fa3-4d77-8f5e-6b1244f5bfa9") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "708f1375-041a-45b6-b16a-0b449c69599e") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "79356c3b-8032-4649-a175-1be3fb5472da") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "fca0222e-d631-496b-bb2d-30407c2ce752") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8f264a0e-5409-48c4-ae60-a3b5f4228ddc") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a67b3775-59ed-472e-bc7c-3b30aeffbc9e") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "bf30b1ef-1c97-47d3-b005-70ab9bf2cf40") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f88e922a-68b8-4a32-b0e7-e1e76b0134fe") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c5406770-0c32-4fda-910f-afe9eea7ddb2") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "79bae1c4-46d1-4ad1-85ee-b4007663b705") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7a1a6f8f-6309-4ab9-8288-a3b64fc09c6f") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ccc6f531-3789-439b-8633-dc660e2ce1b3") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ade85306-0876-4ed5-8222-813d7c55fbdf") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "732918a2-6ece-4099-8090-ba15a10688ee") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "42906ed6-ee09-43f7-9406-1065725e1234") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2dbbd2cb-39b2-4a16-b298-c657ef8d4328") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "339782b8-0f35-448f-9a86-d972d0c70c94") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "214459a1-87f2-4c73-95e0-782580035c41") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "854f74c6-1527-41d6-93ab-8130269ae1ae") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bf91d50c-f7a9-4a1d-9ef7-0f7941e6d134") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f8ae65f9-423b-47bf-9749-97ffd81e07af") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9a8cbf69-bf2d-456f-aad7-d89f9b2a9efd") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f568aa66-e443-458a-9371-92d437557490") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "05f1e337-5748-43c2-ad3e-cf01b829c09e") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "49e28791-ea06-487d-b22d-3b3990f0ee6e") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "56c06da6-f166-4635-a9a3-1b3b98139783") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d33b12f8-1a65-491e-8d15-ac889c50f7af") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b03ad575-ce46-421a-91c9-0690592df7b3") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b544d440-5b6f-409b-b00c-2974da65d310") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ab4e7055-783d-41af-bcc0-cd809a5654bc") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3059ebe9-c043-4b13-8555-318e63dfe7c2") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5f93bbbc-ad39-4c9c-845f-1977659d6b6c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "bb9f0cce-5ae5-492a-90ca-e54135e8b39c") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1d2a5919-56b7-4452-8cd4-6ce8cddf9c02") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2f5d84e1-2999-431f-a365-72b6d6e3b50b") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "1eb1cafc-0ad7-4077-ac9c-17a75b157ead") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "2bfff31e-0abb-4a06-9177-e2352579ca49") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3ac355ae-04db-48c2-b58a-3f4dbc8c0f11") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "02c6bc97-7187-4edd-bfe0-77a19cb29532") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "8b19c763-6b01-4fd1-a9b6-162b2b53ec3e") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "78041c48-ca95-4afc-aba3-7c46c40dbd80") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 166 "Net-(LED32-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "df262c5a-ff37-4b4a-98d2-dd89cacd2e0f") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 165 "Net-(LED31-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "e6f6f187-4533-461f-9e7b-79dad0e5e8c0") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "02d80036-5b3b-4a2b-8f9f-cc0166c1d664") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "83ee422c-65e6-4638-80c8-1a11d2b7e6a4") + (at 180.5825 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_B1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "057ed8c8-c44b-4e33-bb65-28b763838797") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "e6387210-3f5b-4876-a97a-375fbf6a3f5f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "cdd034ab-41c5-4725-bfff-c27a644b2557") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "24366b72-7f44-4bd6-85e5-0cc92bf0f1d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/feed4865-ac4b-4190-accf-0846ac45530a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f7946291-3cdd-4467-b8de-d3b921461f5e") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0400e81b-6906-4bbe-a6f1-9770a42af77f") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "356d583b-97d5-44be-8af8-9198be9c7094") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b50b88b5-8197-472c-ae40-cc4fa0e35643") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "38fee791-c720-4af2-90f5-4ddc3fe79439") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "641d8724-5ef0-4550-9159-f6c5d0f1bc64") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fe54fec8-c048-4a49-aa89-6e0a5d17030e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "557bec0e-c81d-4e97-951c-8d9042c0e834") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1e0a3e1a-3582-4f21-b402-8b234c12dacc") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0888a655-d8e5-405f-b3a2-c9ac353a9eea") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "4550f6fc-8141-4d7d-91bf-f27b06f6b599") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0a9979c7-7bc5-41db-8ed2-86c25942d502") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "54d3b623-99d3-4fd3-9f88-ff95f84d526c") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5606b212-ed63-45ff-8e20-02432bd40ecf") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4378d4aa-254d-4c9d-ad95-53f0992dc125") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cb62d295-3589-429c-a276-8bb77c025aeb") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ae65c30c-406e-42d4-bf58-e4a5309153fe") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ba26340f-68a8-4775-a9db-6d5aad26d565") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "65b102f0-fadb-4463-b2cd-c434dfaf9201") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a5c5a095-3e11-4e7d-be48-c40f7ed9cc16") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6098c97e-37b7-4317-991a-7fb2f1253931") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5e6f5643-a046-43f7-b1cd-7fbd5b9b0d02") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "859167a1-745d-4efc-af60-9b9b121a1417") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "763847b5-1373-412e-815e-fe49bb4e7e2f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b8b48b03-a08c-40bf-9a5e-f4c7e8baec63") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0bece962-e23b-436c-aa67-44c040dcd6dc") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "45889dee-cc24-4f6f-8a59-8a508aecb8a6") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fdbfd3aa-42f9-41f1-842f-9fbaaeb10846") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e8fc912b-983b-46ea-bbf2-e8b353f21337") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fb003986-d209-4956-a0ca-ec760b60c115") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a46f2e81-6216-4d20-b904-231c4591345c") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "65ea611e-b070-4d03-bcf6-4a3d8920ec0c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ff281542-0a06-44d5-a3f7-03f216363c57") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "98a5d1a8-4317-4661-abe9-1feb5542ddb6") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "3f40009a-d67d-4db2-859d-ed26f62ceded") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a4e85bbd-8269-40eb-9044-96c91476ab5b") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "965860c1-aca0-4ab3-b6cd-0f95e3803fcb") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a56e281d-eb9d-4867-949c-47329a95d031") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7d4351b7-6483-42c2-973e-4aa9c58ac607") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "396955f6-d809-4d40-9b89-14daecc4bc83") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b9eded02-b8b5-4b55-8c20-a43a01ad4a14") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "fd184c1b-1315-4906-a4e8-2f203b5d1789") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "8143b067-6aaf-4252-bc82-70a4a9353721") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "814b0ae9-fed7-4cf6-a1b2-d9242fd35315") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "003b74bf-ceca-4840-93e0-64f05e4a36ce") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "85397d06-000c-4d41-ad28-08450963dbce") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "d8aaf34f-4919-46ca-b99d-93444de8411f") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "6bd6571f-3e3a-497e-99d8-3a247c22f1c0") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "a46f7e65-ece5-469e-81af-3b2b1c9a13c1") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 75 "Net-(D54-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f030bd7f-95bb-400a-8a5e-e6c40fc215ef") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 75 "Net-(D54-A)") + (pinfunction "2") + (pintype "passive") + (uuid "8d69243b-6e88-4126-bf1f-ffa3ff95ffee") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 75 "Net-(D54-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7ccc8340-881b-476f-af6a-49d87ccf9fb1") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "854e69ce-3c90-4d93-9a43-5dc62dd83b4c") + (at 290.12 173.8312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_CTRL2" + (at -5.81 1.7112 0) + (layer "B.SilkS") + (uuid "1940686a-e6d8-490e-9974-93426c5be1f1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "e5a68714-c666-4619-8b2a-5462c5d272f7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "351b682f-d82d-4753-9eca-87bf989477b8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "716ade33-65e9-4150-b4c3-016fed1f34ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/c9c00c12-155c-4602-97fa-283720761fbc") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ae329a33-75ca-43c5-b518-66407d9473e3") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6c48b692-d97a-4f6b-9081-460a775a7c7c") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8fce12f9-22ce-400f-acb3-132c3b5a6839") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bce53b73-0ff5-4063-b0fb-e53a78a04e01") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "410ab743-0e8b-4b83-9533-2e81de1907ce") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f8cc20d3-91c9-43bc-b225-186ecd2b3176") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b26186bd-cc88-4c05-a333-fb3401b4978d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5ecbac9c-16d7-4676-af66-8d255fc92f84") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8ef3eb41-6518-45f4-90b4-0e4816eace9c") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4c5fbef1-dcbb-4342-b178-c3f59b42e22c") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "4d96fe65-5e05-4b6d-8800-b0c1230852ec") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ce151ee9-4d48-4c60-a87e-d30164febd16") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0542a33d-cb53-4ccb-a77c-df2ff7f2aa80") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "51b6e007-2fb5-4562-a80a-5e4a081fab81") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2b8671ad-15c6-4df1-bf71-58aa1a0bb3ce") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6d0e83d3-5e16-4f9f-808c-b230b66ddd8b") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c75fa32f-bbb5-47c9-bb61-d95a4df6842e") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a4560598-c023-4d37-a765-2e7482097e6b") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8eeedcc2-7d40-4025-b9d6-388ce40b8a37") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6e06b600-7800-4483-8158-8e260793917b") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5723a29e-4f51-4b01-abab-678d7669aece") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "32c29e30-1404-4ae6-b5b9-edc1ec02bd07") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c1d9ff2a-3c62-4338-9d7d-e23fb4dbb41e") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4d2d500b-d787-4b46-b4b7-102068b87800") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a0c0d4c9-4c5f-49dd-8dce-f0dafa713417") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "aac969bb-820d-4999-9f46-69988248d9dc") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dd9e22de-2918-4239-b405-a5e5614aeb41") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "29e128cd-1d4e-4ff7-a459-50621f2c1fb9") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91d41d36-3c1f-470a-8e2a-ccefeb6d6d46") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4f90337c-d6cb-480d-9add-95e9d5a2776c") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eebb32f6-2fde-40b8-88a8-71941944a555") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ce4d214f-826c-44cb-b70f-9cd301a107e4") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e9301a7f-db87-4297-b0c6-5f395459a246") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6e775410-85cb-4f5c-9d4c-bad3afb3cd4a") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "4207fdd7-318f-484e-93b9-37b70b1aa66b") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "74d38683-457d-45ff-9a1a-536b88f4decd") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6dd605ef-bb89-45a6-8a93-cdec13387444") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "783252f7-97ce-48f7-a251-3d796797deb4") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3875c02a-01e5-42f6-8c87-55b718bcba98") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "43d605bf-81e4-4281-b1f4-29eea52a61ab") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dd80b8f5-b18b-43fb-a7a0-d98272f4fcef") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f6e27087-f82b-4560-8cac-a2af5b5ca249") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "ab6e0fd8-d47d-4366-afe3-2d73fd898029") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4e02a928-4167-41f0-9296-3ddc60f4ddeb") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "abc0bbf3-b3ac-41fb-a337-c24d500ea1f4") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "22d4b62e-dc24-4af9-ade7-4e67aa5b314f") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "5002509c-6e1e-4e56-83fa-ac6cac92a0ad") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "ea4ee3ed-be9e-4e10-9a3c-bd883c07a9f3") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "72c280a8-24f1-4f9d-baaf-fc6fa79df96e") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 114 "Net-(D73-A)") + (pinfunction "2") + (pintype "passive") + (uuid "46e7a6cf-cc55-4232-8679-abe9ce8062f4") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 114 "Net-(D73-A)") + (pinfunction "2") + (pintype "passive") + (uuid "495d2b20-00b2-4ded-a183-80b2749d5f29") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 114 "Net-(D73-A)") + (pinfunction "2") + (pintype "passive") + (uuid "cd56e90f-091d-4a4a-a596-dc1a121fb450") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "8609121a-01cf-4f09-a961-8ba1f5a4a834") + (at 171.0575 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_G1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "bd9ae8ef-477c-4b42-af7f-bc1e8638a1d2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "fe11e51d-6311-471b-9edd-4e9d1745ed8f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "289955f5-80b7-4d65-a23e-be06182a5e87") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "20db3a73-3394-439d-8214-3426def896ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/898b4b3a-d7ad-4f6e-9f2a-c5cc8f257216") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "46a2d4bf-6b90-4ce5-97c6-a562b6436daf") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1fdff030-a4fa-45b4-82ca-422a9df951f4") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "53d45663-a7c3-40b1-a40c-1cbaf99f425d") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0cf0dde0-1dd9-45ef-a23f-110c5928c795") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0a37b8e5-cf05-4c86-bae4-febe2e97de9e") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "695f5e58-eeb5-4d7f-9f42-b48489abc820") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ec90993e-ddde-4691-b7f9-0b98898db0ad") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "76d6677e-7ec5-4a49-9aa5-e31cdba81bf0") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "02a62d32-dd16-418d-a03f-7d1e0837fc2f") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "97804564-2380-469f-9a1b-3ac18c849a5f") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "e53f8290-a1d6-45ec-b93f-78508a77a840") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "54e29d35-f212-403e-b4b7-27b699160c64") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "04f5cd42-fe34-49ac-ba78-d9f377d21756") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "374765ba-a4b8-4acd-b8ef-ca534bcde750") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c33996ca-24ac-485d-8de6-432fede39af8") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5be1b065-f6fe-42a5-b7b6-ba938df3a166") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "31f765f0-be27-4977-bac3-d139e74b4c22") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a7f898b0-dc46-4ae9-ad85-db52de0eb1bd") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4f7ace65-7731-4727-9c6c-80929e996728") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b265da9d-ac7e-45ac-af74-488095c93d8b") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0a69d45f-738a-4807-a5e4-6a9a40e94a6d") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0ac0bb38-7f46-4518-9f04-522a36c4672f") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "de406669-0f51-4b09-9f60-ef23523af96e") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "41b10bf5-27dc-4e5a-8680-b761f097146f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "893a925f-2e2b-44ea-a99b-bead655986d9") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8427b259-7feb-48e9-8e52-cd8ff081edaa") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "57875bf9-a31a-45bb-a78e-61e9ed5fccd0") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9cae0186-8ff8-46fd-9b2c-8a4fdc99c1ac") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "478b1c0c-02bf-4558-a275-5a97814c0088") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1b714c6d-7253-4ca7-a525-6b1a15ad93fb") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4dbb370b-e4f4-4b2f-b43b-950da7066cf5") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ac3ed7f9-cfb6-4501-9758-82f0a63ef901") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dc53d9ac-65e7-47e4-881e-66dd9e200f66") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "077e850d-58d2-4f51-b59f-3b61aaaf3412") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "9ab45cfe-0054-4132-872b-15af8f55805c") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "21e475b5-9a8b-4e4b-8dc1-d56d9179d370") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1cc9611d-9178-4f95-9a09-0ff5e86d5467") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2ec92aa3-5a89-4d4e-b75d-5683d64ba4e0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0a73ecca-525f-49d9-9db0-eb87c87b720f") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8d747a27-0ef8-4b06-addc-6e0b41ce870c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9d76003b-672f-489d-af4f-550580cdbcf8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "94c4d81b-c734-4544-b6c3-bed70b6e93a9") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "20836a22-0ad4-4cc3-8853-d18ee9062e1a") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "fcd5c2b1-c2c8-493d-a4d9-495060464438") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "cd8b0e40-c48e-4534-94ab-9174347eb9e2") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "807e4ac7-ffd8-4a91-86c2-e7cc319856d0") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "99ea887b-873e-4a21-be0c-d70640156cd7") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "c0af7050-3dc3-4577-a6e6-e31ed1590d18") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "c3d78e90-cda5-4398-9da8-7a4c8400ec46") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 62 "Net-(D40-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ce1b796c-a3c7-4c78-8cab-c4e473d85487") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 62 "Net-(D40-A)") + (pinfunction "2") + (pintype "passive") + (uuid "310fa45f-3666-4291-85e0-90a9893142ca") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 62 "Net-(D40-A)") + (pinfunction "2") + (pintype "passive") + (uuid "c278b9cf-2bf4-4226-8c24-4d89edbee251") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "861476ea-0187-49db-8716-185602d25457") + (at 109.1188 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED18" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "e462476b-bd66-496d-9baf-0f8c52720a25") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "04026daa-53bc-4573-9655-a9698db7fe33") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "82b556da-7fa7-4e50-8e9d-51d013d59a95") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "9a94c1b7-b540-4173-8fc2-980f5225f359") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/e798095a-03d3-4973-a3cd-19877a5e052d") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "7f489905-b019-4131-b2c3-b7cf9f849b95") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f043e029-c26a-4391-8552-431e668cf223") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ef4fa94e-7025-4dc6-8079-2bff8dbc2255") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7604b0ce-eb84-4c69-9f4c-74a3b0e796c6") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8e5a4b10-ffb4-4da4-a787-ccef07a88656") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "32ae6444-46b7-44ce-bfb9-ba16fd909c3e") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "85559af7-7788-4385-b3d8-7b0bba2b89e0") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9cc5d79d-0944-466a-93f0-3f24fee41b32") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2143e104-5d68-432e-93b3-d8720aa7c9b6") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a2b8def5-fa12-4896-bf6a-374e9b74a8e4") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cb591ce6-c6f4-43b8-a9fa-8c843b5ced16") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ab4766f1-765b-41db-b078-39464d18cf23") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "881791de-955e-492f-9340-36deeb8bdb20") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5d9e69cd-de2e-434a-9535-9efe0338f577") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6b21f1a3-62ea-4668-8841-a5635cb2ad08") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7785b67b-6edd-4111-bab5-1be911c0038c") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "19582aa1-1075-4871-a3fd-08b4e7cffcc4") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "572b43a5-df2a-4f50-bc86-8c76793624a4") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "55eacd87-1f6e-4185-a585-9efbfc443fa7") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f867c1fd-1c5d-4c39-9543-a9d3fcffb047") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ff2495ee-364b-4f59-85a6-6ec875b219c2") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "700e3e40-2c02-4cc4-81f4-097826be776e") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8003c36a-b74b-4748-8f93-3cb85624f4cb") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bf7508e7-5e18-43e1-829f-753595923022") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "01232595-0263-420f-9170-270a9dea50e0") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "414eb8bd-f2b7-4ef7-869d-9a41026e9d0f") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4ebf9225-a0cc-4476-9b72-f063330e6949") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "69ae2eae-1424-4f31-b1b6-074cd1d5c81a") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0d471a8e-a379-4171-8035-7fab15b13058") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "803bd1cc-af1a-48e8-8799-94cbcdad1325") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5170e623-8f92-4921-bbb6-329f31c05059") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d2f7487f-91a7-4882-96b0-c3ba6f75ad46") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "807b0c0c-2c94-4fe7-a120-9384fd937560") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "91c21f81-6e44-4298-87d6-731b671be73f") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "15c99ba7-a9df-42e0-a94d-3dd0b0812a0b") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "11118ee9-5c01-4bcf-b115-5635b74329a8") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "15511143-6fd2-4e89-920a-b3e62f593eb9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "82e9729d-d157-4e1e-accd-4a7ffcdaa2b2") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "2789e1f2-d3e6-4b43-8f09-8b46c19f3178") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "b30a9bc5-2db8-49a6-8e68-5ad5f7bd9e7c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "4ec41304-e6ab-4942-b46d-5fc0fe0fbc10") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "0e1f9e34-a1c8-4db2-ace9-3e68eb1da9f6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "e8fc55c5-67a1-45ed-afe6-f65da70c63fb") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "2acfc44e-c294-4d07-b4b6-b166ec5c5a77") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 152 "Net-(LED18-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d40b82a5-beed-4b1b-85bf-0f1812161638") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 151 "Net-(LED17-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "7aac4704-1b57-4da5-af4d-068c2f23d03e") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "ba4cff3a-9fa2-4029-b009-b0e4296fb31d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "89b77ee6-8248-4609-9944-eb5bb8ddbd7c") + (at 113.9075 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_S1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "7b43d23c-dd7e-4aff-b501-fbb33f003872") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "ab1dccc6-7237-4adb-8407-bbb4fe33605f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "119353d3-94a7-4756-bc53-27b4f672ff55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "90cfd12c-5658-4037-ae1c-1f6c1ef31356") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/96531bac-f062-4e6f-90d0-203332849f6c") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b685f9c5-6797-4092-bca7-012bb8f851c9") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "07654528-0e09-44e6-9de0-cb882170d364") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ce3460a0-28b9-4feb-ac57-2dd15b403fc8") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4ac112d9-41b2-44bf-a033-ff095d749787") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f91fb40b-d4d6-44dd-8d3e-dc7b666a39f6") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "55f06853-414f-419b-b95d-c17c3d18bb09") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "26cccb4f-3b97-4a04-a58f-e8de2a95ce4d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "98d4b6f1-f538-4ba3-9ce2-2b294933c56e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2ccd4b04-2dd9-4f12-990b-4c2d03c7f5f5") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4adae56c-9ed4-43be-b0c4-a421f10ba029") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "ac85f214-10a9-4f37-a8c1-d75f6b3eba71") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4f5b4c97-474a-41c7-b8dc-05a9c539f30f") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c9d1f51c-86cc-4fcf-b50a-67411251683d") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5dbe9cfa-aa69-434c-8306-b2d99b966370") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "23b2bc3e-10ec-43f5-9deb-e4888c33bee3") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a915e45a-b1c4-45ba-8bec-35245a1b7a21") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1d388fe0-d7ad-488d-81fe-7724d8be404c") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "28c44fe9-024e-47fb-8bd2-f5d00b2abfdc") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0fec142b-a444-411e-b3f3-b8f9707b82f2") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "75d38466-52ef-4848-97f6-2403544bf839") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4a1edbee-58d1-4a3c-a735-756369834e5a") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "21611124-cdf3-45e2-a5a9-cc812c7f22a7") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cfb84d7a-1a6b-4f30-8d83-79d4b49c29b2") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bfd772eb-2d45-4c84-a9eb-20980fc2df66") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "389f8301-d1eb-4f89-b88d-1188534b4357") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c9c10aa5-ee44-4a1e-9d88-21c8ac4387f2") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "37111120-cb68-45f5-b7bf-fe14afba9e12") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5b289f5a-5100-48cb-a065-21dcba2229cf") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "20cb00e4-d926-4383-83d0-c3db14ae336a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f28b941-47c9-40d6-bdaf-e381299b43c4") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c9df196b-4572-4207-a876-5d51164602aa") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8412cd88-1ed8-487c-ae41-7397bf924c9d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eb2d7ec0-00a8-4612-9ba4-9f781af411e0") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1ae4ab3b-bbcc-42d0-b671-cd9cc0dcbed9") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "b9baf568-b22c-4254-8753-9a5a2d3510e6") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "64adb94a-038e-4597-b9e7-6d7c0169eeca") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ea12c4fe-7af8-4d88-9700-033b70bb780c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3c036885-f57c-4a31-8ed2-369d8347e9f1") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "26a04511-8e71-4ddc-af1e-6b683d41bab1") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d8de7845-6d37-47be-83f7-ec31fa43ab9a") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3cd30ea7-45a0-4e5b-b873-e626f0e52ea5") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "da0c6da1-4868-4772-93d7-7176bcbc7566") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "b5d41fa5-39e5-4b94-9e8b-0ee4195cda8d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "0d19d49f-cc69-4877-86fd-f200f04ca50a") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "4e1f2036-5efd-42e7-8219-2751d1c70430") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "b6b0bf11-0496-424c-b034-c46d4f53bcd2") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "0682b4fd-790d-4f02-8662-e6a4941482a6") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "d1ead028-1a50-4d3a-8599-2b7afae915e5") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "11dadef1-3ed1-48aa-8eac-658de570647f") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 59 "Net-(D37-A)") + (pinfunction "2") + (pintype "passive") + (uuid "265a51ad-78c5-45b6-b537-230f2600f5a3") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 59 "Net-(D37-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6213c829-66a8-40e0-b49a-05155a2daa18") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 59 "Net-(D37-A)") + (pinfunction "2") + (pintype "passive") + (uuid "43517e63-746e-418b-930e-d356d5d03c9e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "909d58ba-5faf-40ae-9994-0f2448d572a5") + (at 347.27 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_PGDN1" + (at -6.33 1.7612 0) + (layer "B.SilkS") + (uuid "164e8e15-aa03-45b7-844c-8c9f2bc4c912") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "15c18442-f59b-43ca-a993-be236c3579b6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "31d75d51-19b0-4e42-ada5-a4aa143d1ad1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "6c7c58e8-ba2f-4a0b-95c7-e47e7c7ce398") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/14fbde30-fcf0-45c1-8bbe-09997c5d9c7c") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6f275442-d166-42ca-b477-3d7eb7837d32") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "67899a07-fa81-4b52-aab1-f1bb7fd7e98e") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "47d5c62e-f27b-434c-85f9-f90a1d8e6d28") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1b1f4c29-5343-4731-9f66-15c9be56353b") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "718b3c84-7f4c-4d0d-a3e9-abf01718c0f7") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5aebea14-0a6f-41ba-a57f-57f6ccdbe7e7") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4257212f-ca55-43f1-ace8-70637018cc80") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b2396f69-3736-4d6b-a32d-562acc8ca9f2") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ce25d92d-4b44-4d51-9561-e1f37c770958") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fae8f2ed-3aeb-4bce-b854-9fba3f8a8583") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "a84324db-a29a-4a06-b1f9-31ef171f9f64") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cda36bef-0125-4f97-9fd2-afdea2a186bf") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4bca9032-9fcc-4ea0-8531-a93d548f1bd1") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8596080b-7338-41fe-aad5-5fb28353eede") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "63a435c6-b7da-47c7-812d-efa20f67cae3") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "762273eb-a181-416e-b999-056ca6486cf3") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c43ba703-3e12-4ab6-8585-3606281454ff") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ebcdcbed-57c1-40b6-8dc0-eaecfbbab933") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "300ab502-15d0-43e2-b338-e8d12f57e8f0") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5c683f91-3a42-4c7a-b4aa-13ddb2f3535d") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "747454c3-7de4-4636-821d-ffb75287f595") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f3d004f7-aedb-4b9a-ac6b-24280ba7643c") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fcf5a0f5-0a57-4eaf-8d37-2b9427550e87") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7697882c-5ad1-416b-a97b-953285e79e26") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d100be91-b136-4fb4-acf8-3bb9b4c5aeb1") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9aa2458c-8194-4f22-a8d0-db63bc2860ba") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2289137b-4764-4e9a-8208-c458a8c61a29") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4d793dc2-aa64-4d8e-a72d-e50d961f1cdc") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "02d0cf5d-7e30-4f91-ba26-762829b4815d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb6fdb28-0e0b-4bba-940b-63d5e58a3b15") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "96e3b34e-5297-45b1-afd4-37ec508176c5") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a33ec128-02de-4d5c-b6f9-58344c25ab9a") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6db9994a-072d-494f-85b4-516afa974410") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a0bf5ace-5129-4b9b-b05d-25e667163203") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "009a627f-6927-4f65-a243-16d796181c42") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ce625a99-a9ab-4036-8e6a-ba3ebf15456e") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4fcda580-2030-4729-a6d9-6e42764a28eb") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "da16ecbe-5498-404d-84b2-a247250fd52d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2dc7ab1d-8f29-424a-8847-a05412baff45") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b30c924f-4160-4f95-ad83-bec390484d81") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "03e20422-def5-4619-8ac2-eef6aa2491f8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "74c744d4-76c2-49eb-b57e-f3c8982bf637") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "c4f9ac52-583d-4dd9-873a-3ac14e3d8019") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "1d4ac05e-c633-4212-a953-1709bff027d3") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "36cbaadc-a99f-46c6-a127-afcefbdf5544") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "cb6629fe-71ee-4c3a-b0a2-3e2a1e10ab69") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "1eeaaf6a-3e9c-4fea-a5a8-739fae6eb77a") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "08212f6d-9c84-48ea-92cd-b8a8d61570e9") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "1300536a-27fd-461e-88dc-59c38d84f793") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 104 "Net-(D62-A)") + (pinfunction "2") + (pintype "passive") + (uuid "cfcb1056-4fb5-483d-a007-7fcaab3d2554") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 104 "Net-(D62-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ad1f9548-b5e8-43fd-94c4-235de314251b") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 104 "Net-(D62-A)") + (pinfunction "2") + (pintype "passive") + (uuid "300bb686-1486-4111-a9e2-d4fce632314c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "91d712bb-0171-4886-bc0f-383c0733e07a") + (at 266.2815 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED41" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "d5d06e20-d9e7-404f-9b3a-06d918c94c05") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "1b8991ea-a9f6-47b1-a5d6-d9b90ab09438") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "e71b3f4f-bacd-4635-8a65-3442d92f74ae") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "e1ca8420-9dd4-4793-9fb5-cfea43f7e810") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/062dd2c8-30ff-491a-bc07-0b6451b2e35b") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "59942b0a-65e8-4219-b399-2aa286d2766a") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1a19eecd-582e-4d45-8b03-82a9615aea92") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "eb0a2db7-a5af-4ecb-a59c-eadd5c8691e3") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e9362a6f-615e-44be-9e53-67471e75a8d4") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "bb8b1682-828e-4ab2-884b-288df1e566c9") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3469c4d0-2e0c-40de-8c24-e879db2f0da4") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8a7b02f0-cc4a-4572-94ac-3050dab03199") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7ca3a1f3-5b8e-4884-8ac6-1e02c8174c66") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "70bb1068-c0fe-4029-9248-7c157e5adc7d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b60ca60f-ee1a-4824-8a0b-87d7e173aba2") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9a78cad6-59af-400c-8128-c204bba5eb2c") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "80f312b2-07c7-4ece-80a0-3fbf69f5e9a7") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b2d6f441-6189-40f0-a167-7c1b1f67890f") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "01e2691d-9284-4195-9e19-751cd2d06547") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cd5fb68b-ac6e-4d0b-80b0-9702c40e934a") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1377382b-d92b-4473-9167-f292a90547be") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "50678938-cb44-4039-904f-dc0dd53ec54f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c18687b8-7a4f-4b26-9540-bccc0ff3e6cf") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4515fc80-624a-4924-8f7c-ed73a7bf194f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e595abc4-c4fc-4bb5-94f0-3e163cfc95f6") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "27783f8c-725f-40b5-8640-9148902c12ce") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e147308a-4026-4376-b73f-55c25bd864b3") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0136a4b2-4e4c-4200-ba7a-495ebffcff6d") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "80af74b9-f647-4a45-8a44-ff97c1b7a0d1") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5803ece8-8578-4fd7-9278-3676098ec75b") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e8c76016-3229-49fc-97a1-c074eb0ee9ff") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7f54b85c-d33b-4a5c-8071-834c26922005") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "69e3c45b-1cb2-4bf4-9650-504247b8bb11") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2bd30925-9f60-4914-831d-19f657a778ce") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "21d686fd-de4e-4c8d-ad3e-a6a03a30d1af") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "173bb0ba-c371-4362-801f-34003a780493") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ffd1be85-176b-4dbe-a53a-a8dfb3801e73") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c1b743c9-1bc4-46b5-83c8-a30a0d454bab") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a2b0b315-fed2-44a7-9fbc-8d83b5f54d10") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9218e96f-80c3-46dc-a2da-8d5b38b291d6") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8212a050-ff0e-49c9-bdc0-66e0ad47df09") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "6394df6b-655c-4e06-a749-4f8816b443a5") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4288e1d4-9895-417e-8e2a-b479d7900186") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "8ce28060-a93c-499d-bbd5-ee416b6cf279") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "cc231ba4-2e6e-48b2-b413-5b6f9298a99a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "455abc58-956b-49f2-80f8-6f8902d034af") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "94602ec1-927e-4ac7-8857-b9b29eb1e811") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "f6c29e57-3d47-4e41-96a3-17f9dc4a3745") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "e341562b-754b-4975-843b-c93754f7492b") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 175 "Net-(LED41-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d9d3e663-7b6e-408d-b9da-ad0683409e8c") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 174 "Net-(LED40-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "04baca0b-6d54-4d2e-ac6c-2b7de2c8368a") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "65746dbe-3e68-4a3e-bf45-0fb3b05dda55") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "93459440-f6cf-40f4-8fbd-0e25a0f8d282") + (at 68.6638 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_CAPS1" + (at -6.1362 1.6312 0) + (layer "B.SilkS") + (uuid "b39cf3d7-c208-4c62-8c2c-6434a355e788") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "8be0f9f0-f9f6-4c64-a1fe-b9c6a48b52bf") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "2f746886-5f9c-4a83-8126-01013614d0d1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "89218552-7b26-4d90-a37c-6029d7c0886d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/df46196a-a2d2-48fa-bf10-86a6d9019058") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4978b1e4-fb43-4d5d-b909-6d6f5a13f6fa") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2c0f4eac-cb6f-4f9b-b072-b53ccd4b3b5f") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b8d4f060-0eb8-490e-bbd7-a646f00a24c5") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fba2e838-77f5-49b2-81f7-4e3fcb598bb6") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "37cf5bcd-b578-4850-9089-934c8099566d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "899d3a8a-89e0-4d33-9d43-9e9b9859c2b5") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "803c2592-307c-4a53-bcf7-2b8d46abb67d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "774d45cc-d209-4e04-b3a3-770aec8ac7b6") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0079010b-0f19-438a-ad86-f8a56ef238e9") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4b5860c1-30c2-4550-a368-d04c332cbdf2") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "b1e9687d-192a-4975-9eea-9474780b7ade") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "210126ca-3af0-4f18-a00c-ab76a7d331e3") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9b05e4af-fa3d-412e-b552-a821300e88ca") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "87e54edf-4d0b-4668-a6a1-759feaca19d1") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8b6d1d94-bfe7-48f2-8979-255e76764fc4") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "41b99a22-e3e1-477c-83ce-6af5dcccd531") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c767ed5c-2553-4866-8f78-d1717023d213") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "13625d0a-ea9b-4001-92a2-ac9e7b85c5c4") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3478be2e-ae91-4314-98cf-f0859a63b9c0") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "314ab832-26d9-4e43-bfd9-4c1f35e7ac82") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "92d5a5dd-4e14-40ba-966b-eb425741b437") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6ec3e9e8-be53-4134-885f-546856c9e588") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f1f68596-3f7f-4116-bab5-cde69d8db94a") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "934b6c93-52f0-4040-bf01-51dd5baf5a66") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ffcb6725-4321-4918-8515-28cbd778b64c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "df88cb70-5ff5-4bf3-8b08-fe7610830ef9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4b1663a2-0672-4257-9151-8a21f3735b2a") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "34316eac-1cd3-49f5-addf-f2115b35372c") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b542ba3e-3d1d-4513-86c3-2fcc168763ff") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6fdd20c7-3b65-466b-93e0-86f6ceb7d7d1") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bca5667e-9603-403f-8d49-0e8a94b55c7a") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bcde9be2-fdaa-4a84-9f9e-7af9f484a713") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b6224a50-8d10-4a70-97af-219bd36344ff") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "93d491c2-b7be-43a7-afbb-595dea2345c2") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "f485dff6-e930-410c-8207-53cc2683f91b") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "29143124-fa2d-4362-846d-5cadc465b2e4") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "162ad535-0e77-4fcd-bbb1-421f18aa34af") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cf996859-6425-41de-8d10-1f77ca3c13b3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d4162d66-b046-4d8d-ab45-21fb02202478") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6ba8dfcc-9212-45c1-9218-765a42251a01") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d0054154-fe64-438e-ac50-940d662a777b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4da0962b-a6ca-4697-aa8f-d4cdb75b8b7d") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "82eab0cd-8067-4c85-b194-372d3beb33d8") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f89192ce-721a-4e07-adb7-a55321d5623e") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "f7c733a7-a04e-4ef6-8d56-5254ef6bb6b8") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "71266a11-6009-4f68-8b70-8ece341687c0") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "d63d16be-178b-41fd-ac13-4692c86fecad") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "d4a2dcc5-48c9-462e-9673-890367d4b3e4") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 40 "/COL1") + (pinfunction "1") + (pintype "passive") + (uuid "bc975f29-f6c5-4bec-be2b-bc1c14e50066") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 20 "Net-(D19-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bd2c48c3-7268-445e-84a0-5fce13515e0c") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 20 "Net-(D19-A)") + (pinfunction "2") + (pintype "passive") + (uuid "b1c10296-b3e1-4784-a2a9-d0a15f3723b4") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 20 "Net-(D19-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6e7f6c1e-92e6-413f-81ee-52a955aca812") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "93ea48e2-004d-45e2-a607-21957392ba33") + (at 183.0298 178.4392) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED62" + (at 0.0202 1.7508 0) + (layer "B.SilkS") + (uuid "f0700c08-08d4-41bc-95be-13dfdb87a3fc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "2d8b0f26-8868-4fe6-8d44-940621257487") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "31f69470-b783-47f3-af2f-d625f5e0922b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "2a9397ad-4adc-4680-870e-1af804017577") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/59974637-14b2-4d58-9e2a-fa9ddac1dcda") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "ddd0ee5d-277f-4918-af5b-c3f46acf8987") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "d7fa607d-029b-49bb-997c-0b82ba8764ee") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e577c689-69bc-4518-96fe-53c68f361dec") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7e0a5f21-4a0d-4557-b992-933257679f26") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "fdf30cc4-e213-49d7-b70c-3615cef83b54") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "80435498-854a-4692-af64-c04345a1197a") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d4067fcb-0ce6-4b73-906c-c394fd263127") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "af6a0140-0ca5-4523-b4bc-c340a6b664b3") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ffd617cc-a6e9-468a-905d-8edaea0536cb") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1f77d736-921b-42db-b7ad-84b77721e61c") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1d84cd84-efeb-4d7b-8dc6-2498db45bda8") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "836bc2f0-d65b-4f5d-aabe-27acf1149201") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "241355fe-feb7-4f43-b756-41e486fba13b") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eda52983-cd5f-4b5e-a492-ba0911a16ca3") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "abc9ca7d-461e-4089-a0f1-4fe3c4631ecf") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e4bebb34-ed38-433b-a62a-99391c22fbfe") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "71450f8a-c144-4a52-9bc8-330262d23a27") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "df9dba84-0912-40fa-b191-57a6a0a1dedc") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "17376f37-f65d-4cbd-b4a6-c8944b38e3ba") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3efe7486-836e-4be7-8c8a-f87793462486") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0dda9132-6287-43ff-89d7-f9689bc0c914") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f4788199-c482-4fb8-8892-6fd3067fccd0") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ccb66f88-cbc6-4a38-aa8b-2fd1f0ca3865") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cd077a35-0de5-46cd-8f27-afa612533591") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b5768be3-858d-4a3c-92c4-1f03e0baa906") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d30f61f7-9c94-4281-9331-fa13acfdeb5f") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bc652c13-a059-4649-b6f8-451456c33b04") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "500994ca-676c-4305-bebc-1d64abfbd7cb") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a5f07f39-f487-4a18-a37b-d94eaa48df02") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "05fa3a21-4fe0-4c56-a867-06c4fa26b5b0") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9fd9a1ce-48c4-4954-9f1c-e860d3b26fb6") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bed8eced-5e42-493c-8468-69eabbb48642") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "091c2253-f3ff-440b-b598-f2f0ab845e86") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "dcb90b29-8d38-4680-b734-eda435ff4f8e") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7ad50416-79eb-4631-b2f0-38c3f57dd26c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f813a447-91c1-47f7-b992-b7d8321d5c3d") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "577a27d7-02d6-4f6a-8c77-d3735b03a0fe") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0db0af5d-0197-459a-9e9a-965753f12e9b") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "27b80d7d-5661-4e7d-aaa8-e7925e0157f4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "64612e76-af90-4f39-aee5-7a5c642ba507") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "5a693995-b8eb-4811-8f0d-2cfa68f85a3d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "7993857d-b3b9-4cc6-8b54-f4ccbff521e1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "946d8a84-dd7a-478d-bcce-d48818b162c8") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "6fe1e6a1-c7d4-40a3-b57c-eef4b1c0d80f") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 196 "Net-(LED62-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "bdd7b8de-3c3c-4544-a801-7dd5cecab1d0") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 195 "Net-(LED61-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "91aeb393-6f41-4141-bfec-5663763abc61") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "a71ce26a-70d9-47c6-9c80-4c5c2b1144f0") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "93f7b841-8ee1-4465-b878-a4054c12fbd4") + (at 152.0075 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_F1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "e1810642-3323-47f8-be7c-e63bb0913224") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "ae641672-f047-4d41-99a6-ae511abd2ff0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3f75727d-a060-406a-94d1-d7614cad74f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "5ff10562-53db-4013-85f9-5122980d55e3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3e9a8615-c20c-4dae-b43f-78355668bbeb") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bc30cb4f-92da-471d-a94a-291547775aac") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "267fb9a2-deab-46d3-80a3-97afc67fb796") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "268b9ae4-40eb-4ee4-afdd-d1bcd0c4e9a6") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "31dbac82-0cea-42d4-bf38-82b5e88991d9") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2ffe23e9-3c7a-4903-b88e-f11c26f28a17") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4a9636ff-3ba0-4e97-9919-93b62e04f8ea") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d8aa47ed-2094-4041-95c5-cb4c35e0e964") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b6a33c6d-609f-42a2-b4c2-e7f4b116cf63") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "742fd292-1eea-464c-becc-8fa6cbd1b2ee") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f17ef2fc-dc45-4082-8474-08fdf4d5e032") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "572b696f-7ee4-40fe-8de9-0a1b12972c9d") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "65769307-7fc6-4fd3-b6fb-7f8251e1f5f5") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "869c41e4-f450-4695-88ad-e755573a64ef") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8ddefd82-356a-4f94-9a26-a625722563a6") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b3c3002a-1cb3-42d7-b59a-f8dc48130e93") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5d399387-7406-45a4-87eb-bd9dd8834e2e") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c046732b-a560-4df8-b3ca-5a6bea053b49") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a7ceebb2-2b36-4f97-bff4-4b759e01ba9d") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "79bcc58a-052f-4579-9f06-0c133606eb5d") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a29dfa4f-b0d0-4c1a-b945-aeff884bbf96") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cfd387bc-c4d6-4e77-83a0-2698492d82a6") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d444a8ee-7fc8-4298-adeb-49131a7849b1") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "efb198ed-fc19-4640-a7fd-ab77f0f4e5d0") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "27169f93-da4f-45d8-81f3-f06b20c0d4a2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a371fed1-efc7-4593-9cd5-1a82663ea72c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ec5f36b1-c2d0-4d45-8ffb-3d979afc9b3f") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fefbcc81-50c3-4b92-923b-8e0e47e50d08") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "64a46398-c414-4165-9912-c08fd79314de") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "84ac6f6c-9468-4759-aceb-d62c16fb42de") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d618970f-4c73-47ba-810a-4ed2274dc03b") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "67e1b88c-7543-44fa-a9df-8cfbbae0c7eb") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c501ba1d-e2d7-4db8-8e4d-400ee5d1ca80") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ce06334b-fa1d-41d7-9a1b-55d33b04c742") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4d3d4756-bd87-4efe-997e-8f4ea8042e22") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "67c6b25c-f5ad-4769-bfe8-3b641a1cf393") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "517e0ca3-5467-415d-9a29-03415a75ad04") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b56e01a3-bce5-4625-9c74-79ae46c5a872") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "193071f2-c069-420f-9bca-2ef51b47249d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "44efcf89-82dd-453b-a8ce-c888c04add20") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "651e48cc-7903-40e5-8617-a52be1f8ca72") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4794d225-1ab0-47c4-a9f6-1c427a3d0c6d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "87b53e53-76c8-4e89-9cb4-4189edb08303") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "766d5982-56d1-42d8-886f-e5f46794bc1e") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "5bc9f945-88d6-4194-9baa-06b8a844ccbb") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "40e79886-5bcd-4c06-9d56-017c700e4f79") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4736d521-2257-4be6-998d-57d666448524") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "2dcdc05f-9b0d-4432-9e12-8527075e06cb") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "7d84b3ed-2826-4025-b97f-a1feab231ae2") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 39 "/COL5") + (pinfunction "1") + (pintype "passive") + (uuid "cbfea9a4-acc8-4e14-842e-c46b98ce815f") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 61 "Net-(D39-A)") + (pinfunction "2") + (pintype "passive") + (uuid "cda38053-f594-4143-a6b8-7fdf5b4386d5") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 61 "Net-(D39-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0dc0e18d-6f66-4653-93e8-abbc0515665b") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 61 "Net-(D39-A)") + (pinfunction "2") + (pintype "passive") + (uuid "b95068d3-5238-425a-b706-27e8cef04b89") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "9413a74b-731c-4c21-8f74-9930c0b9f0f6") + (at 223.42 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_I1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "7d9ce432-71b1-4378-b385-6c9c8b7bac17") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "c3302c14-64ea-4d52-955d-21d0538edd7a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "c4654b69-e6da-4a22-b7e5-17850685ece9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "bbe421ef-c1b1-4951-973d-090c659e1fc5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/2b0de133-597f-4400-b031-7a366dcf2cd4") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0e3065df-79c6-4251-8f96-5b3bac512768") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b27be3df-c85c-4b52-9d9d-c69c693b4dc8") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1b90026c-297c-49fb-b829-458dc5d238f2") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cfc94775-6001-4c50-b6e8-6267a2aa8185") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1ba4149c-829b-40c5-8f67-eb1cad0cdc13") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a250346d-b14f-4cb8-ba15-9ab1c2d8d4cb") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "46ddc298-6bf5-4874-873d-989f3040a93f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "92caca99-3913-43cc-9a5f-3ab7b22f4aef") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "60cf3b74-a133-4b43-9acb-5f0f604f4121") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1b23ffb3-d8bd-47b3-a2e7-361d5b338e60") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "758ebd57-a3cb-45e0-ae67-9b0bd1bd825c") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f9d623e3-f530-49e4-87d0-96ac972a4cd3") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3e240a99-d985-4840-857a-124b9d6d6820") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0a365618-d9bc-4ec3-9ce4-4efc61926153") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "55c4167c-88f4-44f5-ad79-f6a45f04e543") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "53f96abc-d5f7-4647-8f71-e039c7e62d9b") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a6a81bb7-5b4d-4c4f-9608-e94e34c3a58d") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4c6e32ab-9f05-476e-a6f6-cbba5f3f1de7") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "098734fc-4a69-479f-ad62-cdebf7d3bd34") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dfe03e19-e323-44ec-bac1-9970d23db2f2") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a7df4d23-3d84-4f3c-9e77-f1c2aceb6636") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1c43b16e-6482-4023-b31f-ef0afbebe8fb") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a9ec0b87-5208-47c5-88b8-fcdb732f8fec") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5913efb7-2235-40c3-be7f-1b7e38b35c15") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9d722166-ada0-4e1a-8a8a-56e9f26e1efd") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c5e8262c-f179-4072-9044-b9592bf346df") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "95539380-3687-4f60-8487-da1edf28a7bb") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c6ddfe53-7ff4-4244-b2f1-2f6366c7e6d9") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "24056976-d6fb-496c-a2d6-4bdf38a91760") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8aa96bd9-4382-41ea-8f71-97a59eec739d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "86cf332c-aad7-401a-8f63-d6dec43e0020") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "188e82fe-4549-4d4a-8006-9382cbd9049e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "918cc524-63f8-4463-997d-b9f4603ea988") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7e22f63b-b39d-4a36-8300-b092b119a6d7") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "0c77e297-f72c-429e-81b9-bd09aae4678e") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "49dfa82d-66a9-4f69-be6d-40e94b164f03") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2632cb2e-0cc2-4225-b98c-d3a9c000d86e") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9295a83f-4c2f-447b-82de-605e166971b3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "139558b6-5eb2-4ed2-877d-8cc46792c351") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a23d25c8-7ea8-42f1-8be6-5d9ffb8d478a") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "566f80ed-ccf6-46f1-b922-924f676863df") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f6897dd7-291e-4d24-bcd1-b55084b52527") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "ac440231-500f-45db-af76-ed1bb94dd427") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9062c505-242a-4588-a341-780c761184e5") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "ca218fb6-e1a5-4924-aa10-1f6b5da8b265") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "5e7c0897-7e15-4399-af6e-c228f601628a") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "0fea3f47-eef8-468d-8eef-6505b85f93e1") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "1c3e4531-aca3-444b-99dd-ff2f59d8808e") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "ee662581-dbb3-4dbe-a1dd-7885cd8296b9") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 25 "Net-(D29-A)") + (pinfunction "2") + (pintype "passive") + (uuid "79c43af5-7e01-4ec3-bc2a-21b2e21f53a7") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 25 "Net-(D29-A)") + (pinfunction "2") + (pintype "passive") + (uuid "b047fb78-c0cc-4293-a14e-a219ab546810") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 25 "Net-(D29-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2cf84d71-8c85-4884-991c-a1911777de77") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "96e00257-efb2-4818-ad89-38a87403eb2d") + (at 347.244 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED44" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "00ca6485-0b30-45d0-97a6-55449240781d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "f82734bc-c115-4cad-81ae-04bc2c608525") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "8e1c366e-7425-4348-824f-c20bf711d2d4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "b3326934-d32e-4eca-a9b1-3330c44e1717") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/f519faac-684e-4ebb-aaab-b64638955abc") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "e0c4e037-3f5f-4261-bfed-acad0eaad939") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7e9c02f6-9b53-471d-923d-b152341b8e95") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a1073e66-4550-4ff3-a502-aca68485ae59") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "fa22a1f5-5129-4661-a828-b712c01e820d") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "391dbdff-e966-4cb0-bd1e-7d947e017cf6") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "912e0be6-d6e3-4fac-bc59-17133278574e") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "233f9425-f62f-44e4-ad76-fb2c4b32e95b") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "289ddfd3-4488-48f9-851c-05437dbc4170") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8d3cb03f-6200-42e4-a367-57ba5d55e576") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "fecbe165-27aa-4449-be33-3d7eb6cfb7b3") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0af4565b-26b6-42ae-b967-0aa348ff9850") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "553ce8dc-7542-4195-ad17-51107edf7319") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "262a0e35-9fad-478f-a734-117a94b81479") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bb4f6a4e-4d7d-483a-b8ad-cbf66e349099") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2912350d-652b-4174-bf6b-9e938b5aa322") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "14e7bfff-2547-49ec-8a52-8cc9354d313d") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3f694935-1fa0-4dfc-9981-d92bc9f387e9") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4754ef39-45b8-4b34-a403-3423b76f7943") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e7952db4-43fd-4476-a228-376a63486c5c") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f284eada-dce9-4a6a-8cda-70e7bbc2ddee") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bc98289f-565b-4f26-aed7-54ed64b0256a") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6a669000-59d5-4460-b61b-5db9ebe1b683") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b5d97ba6-1cf0-424f-88f2-1e4eb77a6adb") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b3b7d824-4c18-48ad-8000-e2cb382ea138") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ca08b0bc-b489-4a09-964b-ff4863054155") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c434de54-4ae9-44ee-9872-d28976fb2a35") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9895ff00-f38b-44ab-bed8-107a86e4bb0f") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6b517785-ec82-415c-919b-da160ce496d6") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7430a9fd-33ed-4973-8a42-65be0d5d6a98") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "27692c7a-9c3d-4254-bc06-66b7b3ad5256") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c02d790b-6ab0-4e17-af9a-3c960ca31bd5") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0111dd4c-1655-4e61-a7ba-01e2d61c7db5") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0d1b6cf0-604b-452e-9461-7877b7c6ea27") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "02733307-e4f0-481d-a520-6f697c7a81af") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "64549fe1-69e1-4083-a63f-e72c389ae717") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "be386c3c-7b9e-4333-99a6-77bc042dd89c") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ac3bcc61-a7cf-43b3-b1c0-da2166fa77b4") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f98da1c4-7de2-4f7e-96ac-6a2f6608d287") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0defbf80-6bbb-4b5a-937a-5205fd8ca1a8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "7e39a7bc-b360-4e7c-a11f-7e051af876b0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "4dd1aa15-1fe0-4a56-a423-e61ac8e04bdd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "b4004523-60c6-425a-a445-6838d1b36cc5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "3b1a71aa-61aa-435e-bc82-13680ff8a8c9") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "a6eb9010-d1f8-43c9-9875-422a7c76732a") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 178 "Net-(LED44-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "5fd6a128-d41d-44aa-a84e-3886475a88e1") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 177 "Net-(LED43-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "ca9d4864-eba3-4bb6-83bd-8306f80cb836") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "82124b01-b080-4b86-85d8-430fa3703e46") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "97a40b9f-a474-44e3-98ba-6535eef248e9") + (at 228.1814 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED39" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "41462622-c592-4459-a607-688b42b622fc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "d8f87c27-cf4b-4fb4-8ec0-88716ec37513") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ae2792b9-23b2-495d-9678-5ef26017d9cc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ca455a84-f014-4d19-8631-6c60454e81eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/9a2dc378-e2ca-4c8b-bec7-09b0b21b7d27") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "b00e47a0-4028-4bcd-ad2a-670b0b193a1f") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ec60efc2-637e-458b-b237-5206508a57e9") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "713f3489-ab96-408d-8046-1169d3432e0a") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2b7a473f-fc48-4688-8a5f-7d96874bbd87") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "38bf46be-53af-47aa-864a-b6af9b729a96") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "cbf17de2-6de2-4fd1-a029-e95534b5e694") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3ecb9ca0-e209-4707-abc4-0c4352eff270") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "832ae6aa-d779-401a-9879-3e6d21802241") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ca298010-9300-42b7-9348-5d5271fa1f0e") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "6158e0ac-d031-44b4-9c39-956a34eb30c7") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "057e5299-e263-417f-b21c-5cb54c621a0a") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "71b7eebb-ea9c-4b7d-9d3f-d757bdf358d7") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d77bd925-7c9d-4810-b99e-4d9b9c7e47a9") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e97b4a4f-5a7e-491c-aab1-f516acf8e99d") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a2872965-86fe-4936-9ef2-a2741a77d023") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8113f8d6-188e-44f3-8b19-2b89c8768661") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0e8d3c61-c537-457a-9cbd-7a8136fa32df") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "89c30a31-f3eb-4569-bfb2-6d6126e5c4a5") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a7b34fb0-aedc-499a-89f7-7f54a65fc30f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0312bfa9-6777-44b3-9738-53eb8ea23c59") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9cd5d8f5-bebe-43b0-9f39-3e8c920bb30c") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "31b5e4fa-f4ba-4cb0-bb17-9035d2c347c2") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a6bfe32a-2491-4b08-bf28-e399dfd664d1") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "227897f3-df56-44a8-a00e-90a7e00cdd16") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d8bb20f8-ccf9-4eef-b7df-6d2f4b05a5bd") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "213e23f0-3d6d-4e2c-b4c5-5b45f37f4ab2") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ec41406b-87c8-4fbd-895a-4e01fb654574") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ed70bf9b-dec6-4125-ac7e-3821091ad1d8") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b0cd045-4eb6-475c-8ad3-95e6a60f3639") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c139b774-0131-4df5-a428-6419f3590f0d") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "71bde023-5b7d-4c0a-83c0-66340c812287") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a628999b-8cd3-4e17-950a-43b726948a1c") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e19976ec-3b19-4bc7-a84b-bf64fe2a5709") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7b5a605c-44b1-4056-9fde-e186298fa326") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "791bb80c-0b4c-4023-a394-66f120a0182f") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5d703b8f-5e46-4291-9cac-46ff39f9a514") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c37819eb-269c-4411-850d-a73b687967c1") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a6a90883-36e1-45db-b0d7-62e33abb7f78") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "2c6c2140-b4de-43f9-9677-fb70b9b0a054") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "5130cc69-f233-4d15-a345-8c91d32d6517") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3c02aa9d-f16c-464c-a101-2fd19038b191") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "59612ef7-989c-4e85-ab98-c3387edbcb8c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "9a4d998e-0029-468a-90fc-f97ac70f9f92") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "990c5379-8b51-4384-8606-e07c1d309b0e") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 173 "Net-(LED39-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "be3f5ded-4cb5-4590-b530-375ba56d94d3") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 172 "Net-(LED38-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "fcaf8d62-f2f8-42c3-807b-b53c91d351d6") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "dad512c8-7a5d-4f9c-be52-a482ae820272") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "9873c447-a720-47a6-85c7-346ac6025b4a") + (at 309.144 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED66" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "3d128fab-94d0-4c02-8d44-24fc40278c46") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "ef7d3b52-31cb-4dbd-8f7f-4dbe218bd303") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ad9b5661-9e6d-4f6d-9271-66555073dd87") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "26f9f7ec-380a-4aa8-af23-9880bce37ae4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/83bf5744-1dfe-4328-9ace-1b3d48de41e2") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "9ef5469b-0480-43d3-b490-7a7026197151") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a5dfa437-13a1-4a9c-a6cb-3858f6710529") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2064bf42-92a0-4782-b895-756b47a25789") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3d4f36e8-bcb7-4f81-a4ac-3793cda4f292") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "71479f46-95e5-421b-8e9f-c562f2a8ec2b") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "def2bc9d-7193-407a-bb90-aaf31d135a33") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e05c4461-cbed-4c18-a0f4-cf4504c1bf66") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1c4c54f3-6fff-4874-a732-93e31544ab87") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2c76ee20-d230-46d9-a268-b79a8801673e") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0c5bbb6c-34bb-4526-b9c8-6fcddec4dc7a") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "35c6a717-7da6-4287-8a53-252a9ace6782") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "3303cfdd-2b9a-446a-8b1a-742360bb0049") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7b634742-33c0-4aac-94e6-f62ceae6cae6") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "400a3622-1f55-411d-82b0-7d3d1a27aab6") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c109ef1b-4aef-4ba8-9123-a2eb37edc166") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "74cb409e-9ceb-4324-aef9-668fae4bbed6") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f40554c9-be0f-4edb-8f63-a07116804f3a") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f465dc4d-14b6-4202-ab74-0ddb266ae609") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b919b2d3-ecaa-4bd2-b0ac-2780da3d96d4") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a44e8c8c-17be-452e-b075-3c0d11bef15f") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "297f0af2-3b7e-48f6-a81e-7421aab97b32") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ff69b3b3-c0a3-489d-abe3-341c0ee09cd3") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d3a45771-92c6-4083-b017-cad767a802cb") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "742420a8-5bdb-4961-8cca-4d672e9ca0c4") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0403ebd1-ce08-4ec4-82ef-e4c1aa348718") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7715b075-3d9b-4dd3-9c8f-7c964cd2251c") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "920002fb-eef4-4a5b-8171-4c99c5f7f732") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d08faf05-0c17-4c31-b8d1-434867c7ef69") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bc327bf7-25ec-4d9b-8f48-7e6fe13c5cbd") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cc068527-de94-4de5-941c-1f6702fc05a9") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3bca5d71-c2bf-4dcf-a457-b574880fa227") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a5835413-5133-42fb-9d0d-bb0a05043731") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7240e1d5-94e9-4576-9dd9-1528a6026fa4") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1a573bda-6804-47d3-bf45-82f7ba41692a") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e8b785ae-102e-45ef-8e07-4d00e9696828") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2e539069-9fb4-4cab-b211-a400bef0de96") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "08d5c523-bfdb-4329-b21c-1e50cd7c5876") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8ca64e89-c836-4b82-976a-94f49bff9bf1") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0a0c20e8-7fc8-4fb0-9a86-688823908d0b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "b34fdef9-23db-4802-a50e-ea561af4a3a9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "de16620f-10b5-4eca-9df2-29ee45978b64") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "77fa22a1-047c-40ea-b55a-45df7c57f222") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "feef3c92-5186-49bb-955e-fcec298466b6") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "b695a364-75e8-43a5-bc01-053456401b16") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 200 "Net-(LED66-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "992a7a25-cca9-4111-88b4-b6e3b291e401") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 199 "Net-(LED65-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "f3c29311-ec6c-48c5-93e1-a6a0254e59dc") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "24584714-9005-49c9-8fcf-bf9e930bed47") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "9e4448f5-0b64-46b1-8fdc-0d1ad6c052c4") + (at 242.4689 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED25" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "3d5ce460-b540-4650-adec-a23a4fcf3c21") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "b6d84ce5-865c-4f4c-aebd-71859e9173fb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3928aded-6e1c-44df-832a-c28f553e8442") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "53c3f2f8-fadc-4eed-9b87-634b59278452") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/20a71778-925c-41a1-aae6-f7fc33938a41") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "55af473d-9089-40ab-8e5c-5f102977946c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "443853a1-8a36-4783-8751-e2c868693d51") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7491441e-f40c-41f8-907f-0a090920229f") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "23f0f195-9814-4c72-ac3e-ec8c6c7b0c35") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "42b393a7-ad08-4d5f-8362-3506c2dd3f75") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7710755e-2190-433c-a8f8-6a86210011f0") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1cc3ab91-8d61-4373-a477-b7a689be8aab") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "64aa0933-7495-4c3b-9d7d-c5a358624831") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "92e33ff1-ac5d-43e0-b45f-ef10e39d5b36") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "bace4ccf-0bf7-48fc-b6a0-4c0092af07a7") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "859d85c1-aafc-466a-ad9b-4f78cb9c97a7") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9b5b341a-13f5-4ead-84b6-e96e6b3c5617") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "91e51f41-d474-4f38-945f-fc4b6dffd848") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b7a72e4c-202e-4387-8dcb-b538b06c5f82") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6bf854f4-288d-4da3-bf55-08ca9290ffd5") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "359051a7-4a3c-440d-98cc-0c406a4fb625") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6da20530-fdab-4bce-b583-738e673ec837") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "591ad938-9ddd-4bf9-88cb-74b4adf3c62d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "06973d40-7ecf-4c34-9e7b-30372e0eb6fe") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "dffd16d1-6cbd-40aa-82be-16d6350ba4e2") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8cf597e5-ac04-4de3-9786-116338bb0af7") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3673415f-e66b-4a8d-ad6d-79baed04b574") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2c48bad9-3bc2-404c-bb46-01fa18a2c94e") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1145ffda-506d-4102-aa20-e6988a23c323") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "344c31c7-4325-4f90-b4af-df9e71c93944") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9163c2ff-e3d3-4d05-a4dc-7a1efd43643b") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2ed21c97-ae97-471d-81cd-ffbb03a14a5c") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4a1ff954-e61c-4149-a2ae-94c8a858bb21") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ce66ab4f-9a5c-40f8-b6db-38433a80b356") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bfcce511-6221-4471-871e-dbd0e78093b2") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4e14da30-7c74-414a-92b1-bf1dfc70a1bf") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb39a72a-f6f8-4c17-a56a-493449c597a7") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "36f4eca8-9270-49b4-b06c-07ee3461ab6f") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8c283df5-0ee0-4fc7-bd93-57cc490883f2") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5566e1c7-584e-4c76-882c-db34d1546a6f") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3e8224d6-1bfa-484c-875f-0a79c3027796") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "16b4ab7f-9613-4b98-856b-0a2814a09e4f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7f21c649-8cb0-4e85-9c40-0b3fdb530b28") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "9b312742-bddd-40c8-b7f5-35f43465b199") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "ca3e61c9-2089-4340-8daf-86191e977d7a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "bbeeecca-1bcf-4b6d-9207-e2f63483cc80") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "f72212b2-e44c-4a40-9b3a-99229211251b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "f4b26df5-773a-4c89-9dcc-e8951bb322f4") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "5f2537a4-23c8-4d0e-9056-4552f3b45008") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 159 "Net-(LED25-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "e735edac-96c6-47c7-8961-300af3423164") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 158 "Net-(LED24-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "b6f2adff-dcf8-4ac8-9e83-36ebd89f22c7") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "08fcb5f1-68f1-4cf5-8aaf-fd42944927c3") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "a03dbe7b-61f2-4aab-b05c-30ccac72195d") + (at 318.695 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_BKSP1" + (at -6.425 1.6612 0) + (layer "B.SilkS") + (uuid "f2d2594a-2aac-4a53-b8cb-efcdaac6d71a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "828f1c08-877c-49bb-971e-562f816a4099") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "949e3815-0ec7-4b8c-94d5-c4b3b25e23f0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b394258d-4cd7-4299-a751-a2c3c4dd8cc4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3726ef7e-8afd-459b-884b-3e88792abe5b") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "041ae55f-c391-48c6-bd71-ffd9702733e4") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4d90683d-08ec-4683-b151-6b138100719c") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7e365bcd-bbfc-4834-bfd5-f86f4327effc") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "24cbb320-1f26-45da-87e0-51240214f49f") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6669d5d2-41e2-4150-9f6c-a4008884dd27") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "24de5497-00d9-4eb2-877d-96de95c24996") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9fd8d502-b20b-46ac-9abb-973f61281001") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3d82ea69-2b68-4997-aab6-dc0a9bac8b22") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "710c8e09-813f-4ecd-9e1c-1da19db57e97") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e02fb2bb-21a5-452f-b2e7-5873789f7025") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "116642d4-c209-4a7a-84fe-c56e08447a2a") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "efdb4b11-153c-47f9-b798-c7cb9a89a7d8") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "38de8c47-419f-41eb-9970-827f97e9a965") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e838b42b-be9f-4b02-9230-3183384504c1") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8b60dc2b-420a-4210-bb2b-cace679a0d57") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9db62661-418a-498a-b665-3f132ece4c14") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b2e19550-8633-4a6e-b755-09aba43a962f") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d314ba6f-eb55-4f72-992f-cd4952b2723b") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d63f7449-0eff-4162-af97-f5a082158552") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "94de3baa-629e-4a99-81d6-68e280f7fa9a") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "88d8b855-50be-408d-8a9a-076c78fc66df") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5d64172d-8920-4143-a194-c1368cfc3ccb") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eefff2e8-1945-451c-bd2b-9da88de68ee4") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "454134a6-b77c-41e5-9bcc-4fd7f01a7d18") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5ccea1b0-c61c-4cd1-89b9-84b08e3aedf7") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e2113d9d-4c30-4734-9fc9-d74f62ee329d") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dcf70250-9bea-4ead-ac0a-b32220f41b84") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "22c2bb7d-9fd8-42fd-9e2f-73908d5f18f8") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "50ee2063-7b50-4e5b-b4df-261a21a772b8") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "92b55654-11be-4f8e-abeb-16292fc0cf3f") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d562bee2-16ee-4dad-bb10-3d866fdeb476") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d8a85531-8e71-417d-9e15-e8c244e85bd7") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f668d53-1671-44b3-bdf9-ccde1871db91") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9a1df9ef-a9a7-4c3b-9062-1db87891c00f") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "cafeea82-7fd7-4bf2-a762-162010d07512") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1846edae-938a-4994-acc1-015a65829e2f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6968e84e-1b67-4b74-9cbe-59772c34333a") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cb530402-ad20-4802-ba11-ddd9fa9085c8") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f2321344-00db-48ce-b6df-0e9b8281060d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0e73ade4-dca5-446d-8f3a-cb9fa6cc722b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d57cc145-3acb-46ba-9579-48f90a07e250") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e1f15287-770a-4a4a-8b15-a83e8d649c06") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d26ffa8b-e4ea-4420-97d1-95172511a49b") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "92749361-0d07-41a7-8894-7b97efa9e13e") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "79c26090-6fa2-4c6c-8dae-c6647faeba28") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a042ea8e-f418-4f9a-9184-be1d1f5224a2") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "0a4e832e-a1fb-40d6-9cc0-bfa10c77f436") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "21a935f6-4e67-49dd-9c52-1d6c3f7dfc3c") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "677a42e1-a014-4162-82f1-19775ae5d614") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 17 "Net-(D16-A)") + (pinfunction "2") + (pintype "passive") + (uuid "b734b3a5-89ab-4785-b0ad-991099a104d8") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 17 "Net-(D16-A)") + (pinfunction "2") + (pintype "passive") + (uuid "038e0450-84f9-48c0-a38b-9687dc634828") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 17 "Net-(D16-A)") + (pinfunction "2") + (pintype "passive") + (uuid "59a56719-70d8-4d7c-8036-e93896ce2d49") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "a0864ca2-7f49-4a8f-9dc3-d01cedb3e2a7") + (at 327.9424 159.5438) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED57" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "a8bc05be-b493-4e3d-8f72-771d0a323d3b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "108ffb94-c41b-4d1a-956c-7a78d57b4d28") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "7046b8f9-061b-4dca-ab23-214cd0aed625") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "14f74221-c84c-4002-ba3d-de82c21a95e5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/22f0e12f-157b-4433-a5cd-dbd38f3d0f54") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "2de8d13b-83c8-4cab-aea5-709ea415f689") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "613af8ce-0b1e-4c7c-af90-410e088a872a") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "fd7409c5-b449-48e3-9ba8-847c02b26336") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e9894ddc-a826-4916-b0fc-8678afb9431d") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b7fa0ccb-b8b9-45e5-9692-8d8e0490f5cb") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "51b92138-afae-4923-93eb-c906fe45d4eb") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9b35d71d-2084-4f11-bbaa-e743c839735e") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "562e360d-4143-40ec-ac4a-ad1e0850bc8d") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "46e2b25d-5d37-402d-9d8a-fb807b492e1b") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d7218057-8b88-4354-81b1-363ce79e95fd") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d71c8046-5309-48d0-9455-b0814b445efc") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c7a3daab-6985-4013-bda6-36172ccd9e19") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d594d6d6-dc35-4699-95c8-d79edc442eaf") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3c3b3639-3ec3-4faf-ad9c-108c136dac34") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0918b664-abbf-4c21-b43d-2e6265d6dbfb") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e1913a63-a1c8-417e-b25e-00d31856b750") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "26c210e4-a97a-425a-982b-dafb89aef350") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4cd0a2dd-84d4-4bef-8e13-8d740d852346") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "abd1c2d1-4f94-4585-b4ab-fb08fffdabbd") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eacb970d-3cb0-4889-946a-b6a9732ad37f") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "81497b3c-6792-48c8-bd4f-20d50cb8ec1d") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9c75e801-5177-4e44-9ae8-f1607ca84ad5") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e54217f2-5e68-4cda-8c6d-259ae7db7b87") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ea312ea0-e971-4cf3-9bcc-11936d1cb0af") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3eba0512-7aa8-4f99-9394-f8038f041c5b") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3b32da63-dba9-41c6-a2c7-4b09f5ff4d32") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a22710a5-380d-4b77-9b37-6197af042033") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6940e138-52f9-4a1a-b7d7-73692571e69e") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fa6f5b29-e8e9-443d-881e-de2a3885de2f") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c592cb61-810a-4c41-9744-289ccb3a9b10") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0e1f76d7-d180-46d1-945e-2353bd42f4ff") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c6794cc3-c253-424e-897b-92668e34fa12") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6a906513-d7aa-4424-92f8-5ece6488a237") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "173e7864-ab76-4ca9-81c6-ec247d8625e9") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f87b855e-09cb-4b83-9de2-19f057957738") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c3039c5f-f673-411e-8e95-e9d539b16217") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "82743614-36ff-44f7-ba55-6102e0d4dc54") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a839c8a0-475d-4e6a-bce3-6e6454f01a7a") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "1e15f914-0108-45e8-b4dc-fd321e94fa3d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "ce715411-4431-4dae-9c0b-3fcc358a4382") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "5681f34d-3374-4e17-8094-1d3e8634ba66") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "14e74202-4381-4da1-8936-7261f117646a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "ca6e273b-7693-4ff4-befe-70759120c294") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "051f549a-b099-4806-be55-1e211ec45c88") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 191 "Net-(LED57-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "6784bea0-12ee-409c-a07a-121b1ac183f3") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 190 "Net-(LED56-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "9879131c-b655-4d30-b1fb-55e305e793a6") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "ecb187df-6c7c-44ff-987e-7cf7c0b8da17") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "a12d1468-3f39-4702-9fbe-c164176f53cc") + (at 290.094 102.2391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED13" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "b0841781-fbd8-433f-b4c4-133e2c184fac") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "6d89007f-5028-40af-a22b-c5b173be0b37") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "48673b50-74b7-4c1f-8938-52572f1da7db") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "c6091a3d-6303-4a92-87a2-62b182d8c2b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/247d5e9b-1335-47d1-807c-8161b5f97618") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "bdc434c5-98cb-444f-bcd6-84ba14358d40") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "29475147-2eb0-467b-a941-3e5ff9176d77") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "15dc200d-2035-464c-8342-bd137c754794") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "64934922-2bdb-4be3-b672-9d68f5c5c1e9") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "223d3910-58f5-4a56-adb9-7a124c72e086") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "0526ef2b-7830-47cb-853d-429824104838") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e7b116a8-6171-48f7-870e-a1722eabd004") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "27f9df97-24e2-40d3-94ae-14000d2c2ee0") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4e73d5c5-9b03-48e6-94ac-2c830c3a07e8") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "79932f0a-8453-4108-ae4e-5457f726ea75") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e76238d4-6758-45b0-8de4-0343fe892fee") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5590a9a2-7b5f-4eb3-9940-debae84b0a7a") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "adfc8371-b01a-4ec3-8fe2-7a769b97a0ae") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "01def775-f1a3-45ff-9af6-f5394a588313") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "21e4b065-cfa4-4814-98d1-fd951b3ee84d") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eb5a6612-a0a6-40f9-89d8-60b41c3f170e") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d8773027-1be1-44d2-93b4-8c580b664ed2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8371ed69-2d01-4930-8f66-aded5e7491e0") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5a5b178b-bcd3-467f-9d96-a2d16449088c") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cf990451-68c0-4542-8463-d42749bf1d36") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c22ca6d7-2fde-43c4-9720-07e4e0a01b5c") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "74c7969f-0cfa-448c-9db1-e97d9ef0cdaf") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9a4fe53c-1b3d-4e3f-8ed8-a241fe564f72") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c69bc9d1-46cd-4d23-9c7f-5285457d14b2") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "549220d0-fa10-477f-9c70-a4a6a17b1ffc") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d79c2bdc-90db-42d0-92bd-a39c9bd97c27") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "64e9aaad-8a36-40e0-998b-fac33e060fff") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9d17e7d9-0135-432b-9ed8-f13bf2bbfe03") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0a53432b-335c-497d-9849-b8d9ea7af26a") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3b8c4516-68ba-4df5-b3ca-58b9d4211691") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "132f3aab-26ac-46b9-9332-1a14f3579225") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b494b425-7bf6-492d-a1a2-e4ac4809e51b") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c5444a49-3905-42d1-9510-655c0a6be112") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a01303f4-2630-421e-906e-d1c4bb2756e2") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7174f4f8-768a-4317-a15c-5d77c6885941") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7289cd4d-359f-4f6f-8946-6f2b2525fdd9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "428e4d1b-276f-48e5-b3de-8333c585c540") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2a2f0034-dbff-45fb-a13a-7e989adc0878") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "498d595a-6e5c-4f90-b6b5-accfc4883f50") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "a3f9fbd8-319c-4ed3-ab2d-dc058959435a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "1a5455bf-9fc2-4d01-be50-c6150bc8c7e6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "15497fbe-f576-4586-842f-c68dfce6091f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "3967dfdf-0dc0-467a-ac95-072fe3b71f4c") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "e7575763-69db-4a20-adb0-14d978478c0a") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 147 "Net-(LED13-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "90bc8987-48ef-47db-a94f-82503672e401") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 146 "Net-(LED12-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "519febb8-601d-47c6-b202-29d2fd67a1d6") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e5765bea-e908-4e6d-8a1c-07dc32b978e2") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "a360deb8-aa2b-476a-ae3f-753e1a2c9e4d") + (at 301.7487 159.5438) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED56" + (at 0.1813 1.1262 0) + (layer "B.SilkS") + (uuid "80e67820-2011-4dfd-8463-0cee747d911a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "ce518a24-bfb4-487a-a536-c96bbdcb727a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "79565e31-7a36-4942-884d-0535e522cd18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ddba0725-46be-43b1-9167-bde6634f3de8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/cffbc227-613c-4c83-b97a-3f097d8cd1b8") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "5b3d3023-1c47-4771-a905-3609364b4a22") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9c8557d4-0e66-4921-9afd-179968cd6265") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7a6b0dd2-1404-462b-b7df-b4bbbcce2454") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "811f8a0e-2eff-42dd-a23e-6c4b77f67b49") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "16b38358-a0a3-4549-b712-e9e9058f7217") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a6409e86-d0e0-4035-9a94-5548ca693547") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "cce7363c-ba3f-422d-9f82-0f9cbf4d404a") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "483c0388-c950-4ef5-bddf-7f45a1d6faad") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4357f28e-2760-4bdb-9201-b30d055ffdc4") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1b3c1b4c-b6c7-4e9c-a4ae-18be06841376") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "073bfc9e-6b85-4570-9b1d-c939fe576f17") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "341f166a-16cd-4e8a-bd90-1760a7411094") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cfa3078b-391d-496d-aefd-0c5fa9ab6a73") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "06d30e46-f689-4419-b51c-4211dc610aff") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f4396707-9e2e-4184-bc94-4a9b7f21047c") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5187ab54-8879-4821-addb-77fefcd1a3d8") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "75e8020e-c43c-453b-baba-c3458902f7b1") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "667f156a-0556-4914-aa17-227cf9a05472") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d92b1a64-d9cf-4cdb-b82f-88a35f009522") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d7591467-df37-475b-abab-4d0111d629c1") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8c1e08ef-6f6a-477a-a4df-f49322a49c22") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "be1de741-bf17-4632-83ba-89c62486f41e") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6c179305-2963-4ef4-8b07-3c26fa20a6e7") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4211a361-fa07-44e5-9a36-1492a2c858b6") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "09912e18-b98a-4b6c-9731-13a440e3b67e") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "148a6882-07ba-4dc7-a492-574b28311b87") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ac2af626-a8e4-4829-96bb-3c81740c9e99") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "12c527be-41c1-4184-8fa0-39e17d58f820") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d4e94d2a-72b0-4567-a3ff-5fde18379ee2") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4f27b589-3826-4595-960f-78e750d35739") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "23d7b536-003e-4d94-bf02-f70164dc3fb3") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4dfa6fbc-d471-4338-a501-a93249b846ce") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "547e58ea-3c3e-4213-8fe6-5b2ca645f957") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "20e9252b-a22c-4454-91e8-6e00fa515ac7") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5fb37911-9ff2-408b-a957-4b44069a5748") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "538779d7-5024-473c-8b3d-93e24a9a277a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "eaaf01d7-dbd4-47b4-837c-5a84986255e9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "019898de-403d-42ba-96ce-2eedd29b6401") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "48d674a0-0b36-4e70-a479-a5b75ef597fe") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "994b2247-4f09-4505-b142-c66df00a8839") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "c5f370e6-5764-439a-bd10-365a81eb5d30") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "c1409931-0b92-4475-96e1-2f27af4219fd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "b57a7de8-cf26-46de-b156-651ac5b01085") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "0abd3775-95bb-49b1-8bdb-320ddc942268") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 190 "Net-(LED56-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "4e04c434-518f-4717-bc47-15525c9dcf7c") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 189 "Net-(LED55-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "459d4f13-0d32-466d-a73e-78661cd96288") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "63493de7-1d6d-4794-9b81-968efb69d747") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "a4d613e2-f9f3-4a31-a96e-c464caf584ef") + (at 271.0175 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_MINUS1" + (at -6.4625 1.7912 0) + (layer "B.SilkS") + (uuid "70273548-7720-4ce4-ba2a-e3118aec5cd5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "e50c0b81-82ec-49e7-bc06-7a439811367c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "a80e547e-09ab-4da3-976b-3d6e5fc5c504") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "3169d312-aebd-4ef8-bdbb-709c6ae9a13d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/cb107d31-4050-4821-a981-f264d1ca1589") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8d77dcda-9e46-447e-9ae8-16ca226dfc44") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e397f0c6-33ad-4b5b-952b-e2d350f97164") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "bbff6a47-d2ef-469b-86b7-dd2b936b0fa5") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "fdbf271b-d0c2-4eaa-bf32-2e281a1ad60b") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "81f33cd2-be25-4da8-8117-5a6415f03d54") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4c3c50b1-b46e-42ca-adcc-0de2fe219a79") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "78520472-005a-47ac-a72a-4fcaae11f3a9") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8e938969-6597-4999-983b-9b85c4716036") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "265d4bb2-d69a-4ee3-bb4a-72eaaf1584c2") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9380de41-7a3a-47e8-8dda-407e9272f9ad") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "f1961b3c-7e4d-428d-b69c-3b8c2e3d58ad") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2c2abfe6-2408-4ef0-9194-210158fd9028") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "152ffe57-fa80-407a-86f7-139add3bb763") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7d1ba465-315e-455c-8405-e055378b1205") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0fc3b3cb-a08b-4bdc-b9be-be8de9b8bd5b") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4f7ab68e-220f-4e44-ae61-caa1a296bb91") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "58096d57-8de5-4679-9bbf-9841d18b36a8") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c2dfbd7f-32c5-4356-9128-82f952cdd13a") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "24a97ce8-1ac8-46e0-9252-be2f6b4ad808") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d420093c-8abd-4002-afb4-48449e1e93b1") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a9b5bb22-4668-4f0c-99e0-de00e64cc5bb") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0ab2933e-5a6c-4c85-bafb-aaf77b031dd4") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "11df1028-ce73-4c62-bb51-2c9003713e6f") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "166669c0-7842-4411-83d9-367a2cbcffac") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6b49c966-f400-4f55-82ba-74325250b028") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "05abe1d4-230e-43f9-9028-a549e193aad7") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9f61883a-7ed8-4840-80c6-da57763eb89c") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b6751877-d29e-466e-a575-a97fc5d4dd71") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a6552118-f885-4b7f-83a5-a6afa4202694") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e082204f-eee9-4793-a4c7-9a2ed34bb536") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "57260ade-31b3-43c3-8386-183de8f25f9a") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0f4974c3-c97f-4b54-9fb5-d8782635213c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1772e637-2c3e-4057-89fd-d135c76a8904") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "72fddeef-87af-408f-b2ae-4150c696b4db") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "8eeac2df-2487-4437-9405-1358ef490bbe") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "25d76639-7074-4414-bd3e-672e757ce74d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f34ca04f-6b1d-4b9b-8237-ee5fe1ebb563") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6eda009a-bf73-4c75-be13-b9b0d59ccfb6") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4c629fcf-bc41-46f0-8446-479e841881dd") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a9043f77-442d-49fe-9296-2eed7419cb1b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1c9c8faa-1987-4af6-bc70-7211fa51740d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0c90b3cc-7cd7-4908-8e8e-4b9cc1fef8c2") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d425530c-7d4d-4efb-9cc5-48b28d0eb6d2") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "3ae68948-4352-43f9-9604-e4b374e642a3") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "a5c831d4-a866-469c-9b50-60268a0c1146") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "cb67e124-6714-46f3-bbbf-7633e5bec74a") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "4ad849f6-98c6-45c2-a7bf-17aeb387de04") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "962b29fe-9123-4aac-9991-a9375ae6e39b") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "cb0871aa-7ea3-4003-8c51-133d52ce4b5b") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 15 "Net-(D14-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ad1a5369-47e6-4dc2-91f5-d9d2eaeb5824") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 15 "Net-(D14-A)") + (pinfunction "2") + (pintype "passive") + (uuid "eb540f6b-bc95-4706-a632-800dc3058407") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 15 "Net-(D14-A)") + (pinfunction "2") + (pintype "passive") + (uuid "afda9c20-3b02-4d9e-a726-fb3bd6e1feef") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "a52d6e56-b285-43c6-ad8b-492b8ac83627") + (at 185.3189 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED22" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "85527527-0854-4957-8ff5-f9b240e0419f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "787c4a24-3f93-4374-b956-3569117098c7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "11b6407e-cd1e-4d0f-8cb4-825d658955d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ccca6098-6740-476f-b1e3-b4dbf089633d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/8e8d6b99-053c-47d7-9419-d129d85f096b") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "5804903d-8316-4637-b83e-770aa55df7c0") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b34b7c30-ea70-4209-8361-245965bb5889") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2e7662a9-290d-4f52-8fab-ed3c38055189") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "bb4d6c8e-b670-4615-94bc-154f7873e056") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "dbc6f027-5818-4a70-8979-f298ea6b1d83") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c13219ed-42ce-48f7-97c7-049fbbd0d5cc") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ec37c20e-0c80-47e4-91a4-45a42c761b79") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "43d5c5ec-1058-46fe-83e0-2178f4544ab1") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2ac3d409-7457-40d9-ad85-99a0090dbb15") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9cdba068-34b2-411a-b313-0c038ad11c8f") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1832f8ce-be14-4595-91f2-7fd90061c162") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9d1efa71-0b6f-435c-96aa-015f76c8f7f6") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1730b6d9-3771-447e-bd2f-8b9af6335d61") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "31e29d7e-8ce1-4306-b233-c0b6661ce2bb") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5a294dbc-8062-49b0-9103-dca445fad55b") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7a2d88f7-9d08-4584-9033-ec0c18501c5d") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5b92f331-b75d-4385-a3a3-42415a1bd656") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "92313239-2a7a-45a5-b477-57c6245736a2") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "11fd5e87-f362-405a-842d-8ba420c94ce6") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f1a96a9d-eb05-4932-9ce1-37cbd09fb23a") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a73171f8-6d1c-4f83-bc1c-613f08f0b5fd") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cbc514af-fdab-40f3-848d-7314d42d73a3") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "915ad06b-741d-4c27-a1cf-b41136e7879e") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f9fece11-59d3-4f10-a15f-17e52f00cfd7") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e4e25691-7beb-41cb-aea2-3142aa97724c") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "647be5bf-43dc-4e42-9f32-bcf65a795557") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eaf446f5-8dcc-44fe-b10f-c28598c4f4be") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "50c24587-69b2-4eb4-8e07-973305f9f203") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d448d2d2-220c-4506-b57f-9a1fabf08faa") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ba30471d-f624-459e-8ea1-5f1a9c2b95e2") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7a6a316d-49b1-45c7-ae6c-54868bff8a8d") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f9d38c12-3dd8-495c-8992-a8b6d6c84f13") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d2935b4a-cfd1-4c02-97eb-61cb5955ab45") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f0147d4a-26d7-435c-b57f-58ef54579b13") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a896aa28-ca07-4614-a05f-a97384326146") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3ffb680f-fd3a-473d-b636-df7ab6ab2bed") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4231534c-d2fc-46ea-b2bd-b884b118bb8a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9fa06f19-5957-4f7d-b2f5-05c687c424dd") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "70819fde-7c24-402c-9a1b-cabe002ba536") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "83d72e59-e4ed-45c9-88c1-23870b9da235") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "114bc3d1-2946-446e-b231-749e2505d9fc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "aee3b8db-5789-4427-a585-65d2be50961d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "a2a3108d-290b-45d8-846a-5962e819d64f") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "be08e162-63ea-4774-a5e9-701c47b3622c") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 156 "Net-(LED22-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "8d4b7cbc-6e48-466c-a336-781301d45334") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 155 "Net-(LED21-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "a13516b6-4af2-4372-9a8d-5e0401cd28f5") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "207c9a23-edd7-47e2-96ca-71cd5c4dda8c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "a5a5723b-f22a-4ffc-9c21-c60ed63a2d5f") + (at 87.436 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED60" + (at 0.294 1.3761 0) + (layer "B.SilkS") + (uuid "cb3c14cf-5324-4c59-84c6-7369a8d8063c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "48e82b27-cf46-49f5-8ab9-fb55236fa378") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f59c1fe0-b576-497e-9074-2bb22939b27b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d5f006d1-653d-492c-9313-a9464c717cc6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/ce6b0646-a10f-4aa1-85f2-4cbd0f59eb64") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "1ebd65d5-d026-4921-bcee-7bb0a96cfc7c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ae4448cc-21eb-4c42-89e9-af203bffc252") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ee894116-6f2d-49ec-93e3-ef9a3e6e7c42") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e3383f1f-5afd-47d1-a36e-bec8060f129f") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3884a982-f987-4323-beb2-e5179d840671") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "48d9b73f-4b41-4b47-b079-33e4a82a1f14") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9e0f3f64-58a9-4844-9099-fe581967a050") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "bdce4ba1-7cb5-4612-ab07-e27c0ec5fa8f") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8abc0b24-eabc-4f28-9caa-db321a47d76a") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f07e87bd-35d7-4175-b0b3-b5e2145c8ea0") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "03a1eb10-6442-427f-98a3-980da363f9ee") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "958a52dc-0283-4470-9b10-c969cd132b33") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "254b5282-d106-4d28-a74b-583b0b0425e5") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d42f2d3f-8bdf-4102-aa77-539a31118cce") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "98c7abac-3249-4c1f-89bc-7621669ccc14") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "280aee4b-022e-4b73-8248-fe0b9385423d") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d2b30023-4d19-43cb-be9b-ae80e8c7fc95") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f652b264-97e3-4f64-88bc-1285a81fd1c1") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "53a95bc2-5527-449c-ac7b-fa167f425284") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a250085c-e893-4f19-872d-0445fa4f8569") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "dcd62f89-5c79-44e1-8be6-2ca87425cce3") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "47fdd850-5c13-4d3f-a891-836cbe272515") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b380384e-91e4-4588-810a-8f5824acea2c") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a23ecfa4-f5aa-4797-9df9-1faf7f6f6654") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "23195985-b4f1-46fd-91a0-740e453ed02a") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d43bcb61-6741-4d59-b090-d62fdea7c9b6") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e011951d-8848-4cb4-8a25-436d1e14b50e") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0f3a952c-0fdf-4410-9a24-0a8837544dcf") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3803d535-8ab5-4d41-9535-58f813b98610") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "24dc6028-9e33-417b-8b86-64fed66f0d17") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b32e4eb5-b76e-4f4b-a228-3949bf6106cc") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ea626535-6355-4476-be44-77bfaf5187bf") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ddbdac8d-d38d-4162-981d-c5dd416a7fb1") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "bfdc1532-0dd0-4cf3-9318-55ba23bf384a") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4c320e01-62c4-4b00-894d-8c6acd1b1b61") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b99bf06d-256e-4a7b-9394-86a17bd5379b") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8c24d886-30dc-4298-9d41-84968aaf0e28") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "66418fec-9855-40b8-b0ca-898c8c51f6bd") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "14d015b1-30dd-4029-810d-19558ba21e0a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "8823ed38-e112-4602-bbd7-0160dea1fb29") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "ecf3b3b8-cd4c-4f11-aeba-a637187501c5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "7c3ae88e-053a-4068-ae55-fe7186e8f573") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "1de4e017-b1a5-4b73-b7f6-2f872296d029") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "8db699a4-3f67-4638-a28f-0af31a800037") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 194 "Net-(LED60-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "75812926-c9cb-439e-8321-32a014521f33") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 193 "Net-(LED59-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "652f43cc-e530-43a6-ace4-b3441a25957d") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "bdd5c01c-da1c-4e05-90f6-18cf650f325d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "a92325fe-00dd-46e5-a2ac-b8141a8d1146") + (at 237.7325 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_,1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "6de3f0ed-384a-43dc-b0cd-574d091598f1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "31aee81b-dc4b-4a15-a1cc-3d770f741306") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "9b1dd6d2-9fa8-4b65-a7f1-17706b35ffb7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "a98c4115-a07b-454e-9aeb-7546e6dc7392") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/8fdda033-c0f1-4c53-bec7-e3847dba47ce") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0d35ea5e-f55e-49db-881c-9f9ccaef990e") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e00b08f2-db6b-4cb8-bed2-8916f3976fe1") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "93c818b1-ce5a-4574-b230-542243aa1a6b") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f771ac0a-e0bd-46fd-8485-05fef0500392") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d3718e93-9857-4a24-ae06-86f3f901839e") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dc31eb54-ca6d-4b25-b7db-4db5cac5787f") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c1094c10-8822-46fb-8886-cb58f5c6b902") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "11f9b89d-865b-41a1-aa49-9c67e8b6dc26") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5f35d071-5a18-4d2f-ab30-5ff43526e2c5") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2807af48-b0f4-4d86-b4e7-a804a892ca34") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "cd9e5509-be92-497e-b08b-f6dbdcafc6a9") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "17b0b0d3-5f59-4631-93b9-30048c3d7b91") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8c0c14c5-2b41-4d7d-bad6-a6128326f21d") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "65d5b875-7bb2-4301-930c-ddbe52bea66e") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8b495550-6a54-4dc0-ab7f-b6006c84d166") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "985208dc-d5e6-449a-875f-feb9691c0913") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "50e3ae7f-2635-4360-bbc8-67e50cfd4026") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "77047c98-c642-409e-b713-8ca2e28fce1c") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1755cfd5-4610-4f9b-9dfb-4a7962e7b97e") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1f0710ae-47c3-45a4-92de-f98c191c2eb8") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6a728f5e-80e2-4d31-8061-6f4d077243d8") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "28888cf0-8b03-49c3-bd99-a0a0b3b5e29f") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "450c2863-c517-44d9-8d12-2a98b7331031") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4a2ca00-6bb7-4323-94a0-83e4dd307cbf") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fc906629-4c1e-4cee-afa9-98b8df7df605") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "11735833-4e8d-49b2-ab42-7c1e78ae258c") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "29460b91-fcb5-4cb2-ac1b-db76666221ee") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f8da757-9071-44a2-8346-16ad22f65319") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "696ff0a8-ec9f-4b6e-baeb-2de5447e8508") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f668bcdf-130d-4fd6-a796-f23756e366a6") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a25b2cf6-ef3d-40e0-99bd-f1ff199a8a23") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1426619a-1cc5-42f3-8d08-e7f2807f24a0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "77550cd5-3efe-4198-80e2-e6e8b48d88da") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b60ec2d0-0c73-459a-be08-b1425fa42438") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "eabecc06-c2aa-4699-bc1c-5fb57edde74c") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "74e9bc98-343b-40b6-8f6f-e7ae67987b26") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "fcf09a89-4314-490b-aaca-f6bd8065c286") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "170de16b-1f43-47a5-9958-ee299d1ec45e") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2a40b057-98f3-4e51-b7e6-2e7009f055c1") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8015e03b-1a93-4373-9e3d-2bbeaa67ecf0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4a0bb7a8-d63c-4bce-829b-e9d6229ad6af") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d08b6fef-a0ec-4156-a04a-82b18e71a446") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "f4d92b31-b014-45df-a7da-166fcedfa906") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "93abc9eb-b9a8-498d-aae4-5582ae128eb2") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "0194674a-6c2c-4b63-a0a4-00a47700ca5b") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "5610c6cb-f7a4-486c-a696-ce19231a37e2") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "32276c26-1ef1-479f-8ee7-7547688c8e2d") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "3dd78cdf-5245-437b-b491-450560b6b7a5") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 126 "/COL9") + (pinfunction "1") + (pintype "passive") + (uuid "2096c0a6-7aa4-40be-ab54-3627df50336d") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 78 "Net-(D57-A)") + (pinfunction "2") + (pintype "passive") + (uuid "59316ff4-ddfb-423b-98b9-7557ee589b60") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 78 "Net-(D57-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6d302fc8-d86b-4450-be29-921cdfe9cf3d") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 78 "Net-(D57-A)") + (pinfunction "2") + (pintype "passive") + (uuid "87dd9a5d-ee88-4318-87cf-55b5a3abb00b") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "aade2709-d79d-4516-9744-f90a60d87bb6") + (at 142.5485 159.6985) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED48" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "e102f29e-392b-4b8c-8a83-4a3d5adc8e15") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "1d6b51aa-4460-4713-986a-c52319ea0de9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "b6d1f854-0307-4326-90b5-4c8df28aa33e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3e71c7ae-df7a-4bf6-bcf1-8d26e0b649d6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/af3a4e04-075e-4754-8c7f-ecee21817b7a") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "643fe17c-322e-4e94-a601-bbd12740936d") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ffa94a01-fcb3-4cba-9139-fc0c270de3d8") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "0f94dcaf-413a-425b-8d59-39f6b7f256f3") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "785d7b17-b140-43d2-a7cd-110324a84057") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "eedb1072-0db7-4591-b13d-301d4ff4a445") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "cf3d7a8c-aac8-4b9d-a5a1-f716d0b3732a") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "34cbc0b1-b8b2-455a-b77a-92a81c443879") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3e225442-56ce-4986-a4ac-10ba1f7996dc") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2eca731d-ecb9-4ae2-96b9-e5d737269683") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b6b8105b-1fbc-42fd-ad24-f0c373e2ea61") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b9ddf117-8054-4a86-86cc-a9c8bd57c2e4") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d93ae6cd-3f7c-43d3-91ef-62280a811f50") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2d39cc59-d800-413f-80ae-41710a3e9bf0") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "34b09551-77a3-4523-8b9f-18f327bd478e") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0f286cb1-e851-467f-bb40-1035eefb88cc") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a3ca156f-a3d1-444e-9ca8-c54eda54eea4") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "06e8432e-c932-49c3-a985-3669af74c1d8") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ba1d344b-5554-4c00-ad35-498a75cc4977") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "986bf6b7-a11e-4369-bc9e-935833cb976d") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "20507da8-5af1-475b-b3aa-75c3913beab7") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9fd801ff-4f42-4801-861d-d756786cab93") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "55b3d767-ffa9-4550-8ca5-078a911bf166") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "22d797c0-c643-4efe-9595-e1905a62b35c") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a6ac76c0-54d6-4871-8c94-95ad161aa4cf") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "526ced4f-d065-4c16-8e6c-0fb0255e69de") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f5c16ee0-c77a-49c1-9275-c92515db399a") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "322c8bc7-ab6e-4d73-9af2-338cb735b84a") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7340f4ab-f748-45ba-bec2-1de8b9e19756") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8b749be5-1467-448e-9650-9a3e9897bfa8") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2f8dcfdb-f337-4d70-95dd-2db54e82a8e5") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b2da463b-9e43-4011-b322-c149633c3f32") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3fcb8fdb-62f7-4ef9-a230-d2cd24c9a33f") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f9b989c1-b6c8-4fdd-9854-cb5948ee88bf") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "be9e0798-011f-4449-9305-5eabb5fdbe5c") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ae52a64b-348e-4bab-9e4e-1353b75611fd") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "639934f1-d71c-4851-9192-0ef80f46dc3e") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e079c322-a30f-40fe-91d3-9c763e0e9dbe") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8039ed5e-edc2-495a-81ac-32c770639bc3") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "6a795277-731a-43a3-aa3c-e9dd77e6dab3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "9b173e24-d850-42f8-8f2e-f6a8334eafdc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "fd7be6e2-479b-4bae-88ae-ad1ff02a2359") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "12fef87e-ee6a-458d-93e8-4c19602a2408") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "954e6368-dd32-48a7-ae70-a6b188839228") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "47a6c58a-4c64-44c1-b414-3224e0690b60") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 182 "Net-(LED48-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "ffe586f4-f097-4204-a17d-8681dfced110") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 181 "Net-(LED47-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "c97f9841-73aa-47d1-a0a5-953ade1df035") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "f5575cd9-4cc3-4f8e-93a4-93aafd5f2235") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "ab490fc1-bbd1-4a40-a095-5076e73deb01") + (at 232.9013 102.3388) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED10" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "49eea383-40fd-4546-9e92-a1987059869b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "a12a0ce9-9fc5-49b5-92de-7ac6c44d15c0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f651899e-4e42-44d6-ad0f-e2002d31e7f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "da75a45c-4b86-41ce-ac9d-2ce35d110e52") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/4e0a570d-3fa0-45c5-91ee-37dcaa695237") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "142e3bb9-8e67-4182-951c-40cd113e2ba2") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4d88d019-f65d-4386-a74b-3a8e7f10262e") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3fbbd58b-9d43-44d9-ad0d-f7ea084c7155") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "abf3a158-a3e7-4600-8bf3-a1abbf2a1b75") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "8178eb19-0d7b-4b44-8532-ca0fa14234ef") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c64f080c-2e61-4749-b62a-bded225210f1") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b03ec94c-b735-4545-a222-377362156448") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e8645374-8fde-4054-988e-cda0d0387d1b") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f28e471e-9a24-4ae2-afec-2bde08d169a2") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d21f3921-5393-45a9-a7e1-d84fbcf2ed20") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "40b77c6f-c37d-456b-9418-6c1fd57ed635") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "55b46415-30bf-42db-908c-989913c4eeef") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8ab6970e-2e5b-4236-8f81-656c19fb9c33") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "89b5c412-4ab1-48b0-a719-d3769351b1d3") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f14e7b67-6741-431b-8699-d145e1699823") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a086b444-45c2-4fe2-9510-31833efacf1f") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "76fcae7b-487c-434e-9171-34e9cd17f8a8") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3e8956f0-8e38-42c0-8615-c72adc69c9f3") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "08991f55-4bcc-4433-9757-7585077e5f25") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1c83a4b5-73f8-4a9b-85b5-02fb141d6d81") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f60eb147-95ae-4cb7-8c6a-7cee064b1caf") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0b07fbc6-4646-4505-921d-555d05f2b623") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3f410fd6-65d9-46d4-90bc-a2bb147291a0") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e4c05929-0f21-489c-8dfb-a82d968fd6ef") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b0b77551-1b3c-4952-86c3-451b4afdd649") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9b955cf1-bf4f-487f-88fe-61a0b3faf1bf") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2e750015-5466-4e1b-98c1-e948cb475555") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "896c37e8-5d5b-4bbd-bdb0-f5532233c05e") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "67768440-7f8f-4d3d-9389-cb47e6c2a713") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0919e729-4b6b-4553-b7cf-86dc80e9f394") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5cbd2baa-65ef-4d55-9e48-0e6d6cd24ada") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "aa3b75ad-7612-4aef-9960-8a12b5a88e4f") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "478b7a56-56c5-49c1-aea4-e57480c3199d") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1749e457-6532-44fe-aeca-7bfbeef17f71") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "fc0b22dc-7678-4ae7-aeb7-0f143fa5d594") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a28cf826-799a-4d75-aabc-d9be4ccc9ca5") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "adf590be-cbd5-42f5-aace-ba50ceaf9552") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "14541444-fbbc-4425-920a-a849bdb971c3") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "2d13994e-0359-4a28-80ee-00edd396511e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "87c8a545-6de4-415f-b40e-0f83a735215c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "dc38a09e-6056-4b4b-aaa8-aa5e4ea99a5c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "a2ce2c3a-5b13-43c3-ad12-26819bc9f7f8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "1a2a1067-c0a9-4ede-96d6-777c574adc4a") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "c2744e2d-b0e8-4fd5-a19e-8a92592383f7") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 144 "Net-(LED10-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "bd544556-5b72-4660-962a-f265dbcefa68") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 143 "Net-(LED10-DIN)") + (pinfunction "DIN") + (pintype "input") + (uuid "4046a296-8a29-4634-a48a-6230b0f3e09c") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "fe5c3908-8989-4222-9e38-4ef5632a28aa") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "ac63ea69-ebaf-4b93-9431-6999ffd34dc8") + (at 266.3075 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_;1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "16465d16-66c0-4753-85f2-ed105a6bfbad") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "e70173d2-05f0-4271-8135-a2a19d7b271c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "2fd615cb-411a-4326-a2d9-277d2c55ce02") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "db7062a1-823f-4f2f-aa46-cb74d1e641a1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/6ed96fd9-9df8-42c9-ac6e-ab987e9697f0") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dc976e12-b04d-4d10-ae87-06dcf000ae81") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3e8d360e-548c-4faf-8f67-cc3474d3106c") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "17cefa8f-c456-4325-887d-e8a4ff5843a2") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "72e673d8-5714-4471-bd48-6fe83bf974cc") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "727df551-1eb4-400a-aaa2-c63e315a62cc") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9407d10d-4fda-4fbb-8629-df56e6819c76") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "634fa04c-c5f4-4053-a5d4-2ba53f0227e2") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a7acb767-8dda-43cb-98bc-9bb629aed25a") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c53a8282-41ba-4ceb-8f3c-5faae0578b7c") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "84520bc8-bd03-4585-8588-05f9403c294f") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "725eaceb-a2e6-4784-a4bf-f8e7e32c9ac6") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "939e166c-efff-42d0-aaff-2576834cd98a") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e6e4707e-27ba-4cd2-8dd1-8b0d2a7170e9") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "396e165c-46e0-4a5c-883e-0f35f095cfb9") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b068e518-3b30-44a2-9be8-f5d688658781") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8e9dbf62-5bc4-4314-a7a3-e7046397ebc5") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1a4572aa-ee5c-4252-b5c5-2c16c4a7d4ed") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4b5cae05-fe82-4ed3-b252-ba667e0499d3") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d6545bf2-a755-4c28-bba3-bde70daf2d00") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "930687b1-ef88-47e8-8224-1651c5c52801") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "89b9ac1a-40a5-4058-9d0b-f0921b9356ee") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8282e201-bf50-4b4f-96ab-3f7a2927cbfb") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3d7a9cee-6ef6-4d4b-8602-e2d07bfa33f9") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a53a3a5-4bb5-42a3-801e-9f036bc75169") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0c14a526-c440-44e0-9743-ba0c016bb5be") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "516faf81-3060-4487-91ec-ed4f0ae2a5b9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a48079b0-de84-402a-adfc-219d11180920") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "47c4024d-f0e8-4917-9962-a488cafe84a3") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2df878f7-856f-4b0c-8639-97548c2761b6") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7b2d50cd-5a08-4a3f-b51e-507188e858b1") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6adf5e7b-7d4f-4561-b33a-a0ded6dc20f5") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c0b0d842-fee6-4ec4-9fa6-4d8d98353cfc") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "11a4c497-b89e-4629-92fd-f06af335adeb") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3673f05e-0572-452d-ac2a-692cdff60559") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "ca19d2f4-7965-4fa7-a1bb-e215649a41da") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c0df53ef-10c6-4503-bceb-ffa7934c2ff3") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6c5ea037-7601-4413-b14f-cb2dc4e80b6b") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b01dbd72-6517-42b0-9607-74c445de7bff") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "04d242f6-a611-4e46-a425-8117bd509130") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3d412352-11e1-430d-8b4d-b6e3ee1a69d8") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "40fe3f01-5287-41a3-9e5d-92631688bde8") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c2cb3528-902c-4662-9228-b6b3677832cc") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "fe44f792-2936-4a22-840b-0de804cccba1") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "02a0abc3-88e8-4f9e-a4e5-ffd32fdadd66") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "77b371d1-16ac-45af-a6a6-f044aa6094f4") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "dd3b5ccd-3f37-4a2c-944d-dd0fd28169f4") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "e4cf56c9-8ff8-43c7-ad6c-4a0c058845b5") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "4c090d09-055e-453c-a8d5-eb1f293cd070") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 128 "/COL11") + (pinfunction "1") + (pintype "passive") + (uuid "30be3249-3818-401e-a3c1-7f5b6f00f431") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 67 "Net-(D45-A)") + (pinfunction "2") + (pintype "passive") + (uuid "130e019e-c034-4ac5-bb48-82a3438830ee") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 67 "Net-(D45-A)") + (pinfunction "2") + (pintype "passive") + (uuid "e803b855-7e45-4b03-9479-1b8f71e75eb8") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 67 "Net-(D45-A)") + (pinfunction "2") + (pintype "passive") + (uuid "53625832-2ee8-4ae0-93c8-294e6395f65c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "ad577c37-bce4-498f-b923-861f152c31c4") + (at 185.345 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_Y1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "6839620f-a77e-4e84-8659-540ef9deeb4b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "0658bbe3-2220-440f-a644-f1fe9ffd86af") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "d9df7900-e31f-4d6f-8f45-d2448730fd21") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "cb3d086e-9468-4638-9f6b-411455e19dd1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b3f8c532-e54d-4da0-8cae-5683cd5381d8") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "de1d0d6e-ba80-4c93-8a07-cca709cd71f9") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "92167235-e70a-4eef-b21d-a21b7371b7ec") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ea1213c3-fb4c-4580-8c2a-c63075578467") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e7f60b6f-09b8-46da-878b-5acf7e173809") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8d9ca8e0-9d8b-4364-bd09-c04c9527ce56") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5b67e28a-7b90-4b8b-856a-4412445ac2c1") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b3c4e936-6502-4958-87d9-bbe1e54d7df4") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "eb1b011c-0902-43f7-8821-ac27efad558e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e6d4286a-a5c8-420f-9566-662b6d87d36d") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d6cc06b6-66f4-4014-845c-5b903ced04ff") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "80502519-a4a9-4f4e-9ed7-5efb1a504716") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cbc70486-e9f0-4a65-8139-c19e4a23ac60") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b877af7c-fa97-4f87-b43d-7a577dd6a361") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "2f312f79-3a99-482b-8d27-99420a34149e") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "302f298d-91e3-41c8-b4b4-fbd4ff93691c") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ed8cc177-8b43-4a25-9d8e-45d7ec371391") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "67b836d8-0aca-4e70-9780-08cef8676c6b") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bbe0140b-e23b-4c7f-9360-375f2ad9690c") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f6016fe7-dfa9-4ee6-9960-db36e62e11e6") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cc68dd79-38d8-4e43-8e94-ecb64e24d9b9") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0b14d94a-b257-4671-8b0f-31c23657b263") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2b6f6dc1-6536-4a91-8b1c-4412595b9c6d") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e69ae333-13c1-4712-9aab-51059856a7ae") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f7ad1032-91f0-4cd6-9889-f769e966b983") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bac80a75-a91b-49c7-9724-e47fabd29811") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a1a9b6a4-d7e7-4950-b89a-53bdf9796080") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "49eaa870-5297-425d-a77b-e4171021540e") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c79278f1-06af-48ce-966d-3cfe40f9366d") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a8c72d83-5668-413c-92dc-66106152d03b") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d8cfffe3-6e5c-42ba-8067-b3058f32ba9d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "acdb3507-eb3a-4da3-a190-78c466388e67") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6f1a89f8-3402-4fed-90c7-1de148392041") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dc62e58f-1559-4542-8dfc-f3c3b373f35e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "317f4782-ee2c-4d46-bb89-da67d51d43ef") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "f7c92d3a-10c4-4291-a8bc-955c34e1eaa9") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f7236bab-dc3e-4085-9909-b2e53622a848") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "adbdb595-a19c-4180-a7f1-95ef35a98251") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9a7bef0a-97cc-408f-a32e-8a7de4d027ad") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "21c34df9-f39e-4458-b2fd-7ee18c3188f1") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8809e26d-b186-4ff2-bb5f-6a3ff7b2d54a") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "39236827-3815-4651-9581-64b01ef576c9") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4fc69135-7e4b-4167-a227-65b6c449ff57") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "5ca4cc14-e371-4233-900c-270dcbbdc73b") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "8305e72b-3384-4fa5-bc2b-af18f1ea73f1") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "ac7cac07-b2c8-426b-a7a5-47b7ff5bfcfe") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ac44172c-bd74-4bff-a4eb-b6969ed6af5b") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "9faf64de-c04c-4af1-b0a0-acaf2b5465fe") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "26f477d3-e438-4378-be01-d422360e9716") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 130 "/COL7") + (pinfunction "1") + (pintype "passive") + (uuid "32d5c4c7-130a-4c11-8c53-4ce29c8c1494") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 33 "Net-(D27-A)") + (pinfunction "2") + (pintype "passive") + (uuid "7a3d0c74-8e2a-4ccd-b6fc-01e52c2613dc") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 33 "Net-(D27-A)") + (pinfunction "2") + (pintype "passive") + (uuid "78eb8ad8-2d73-4771-a1b5-814a4dde0daa") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 33 "Net-(D27-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bc2743f2-3b0c-4367-b122-81ad58aeb970") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "ad8a37f9-92d2-4a56-99b8-13f96d393a90") + (at 271.0438 102.3938) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED12" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "55a509b9-7db2-4938-bf70-202c52bc8c62") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "0e1443ae-f89d-430f-9ea4-d4791b827ad2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "dc70512f-b126-461e-90df-59faa00863f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "018735c9-25f1-4dde-8a13-d79e9230921d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/a5872574-e618-46f2-90d6-b089857205cd") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "081081b2-f990-4e35-a6d9-e0068975dd27") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "550a1b40-a509-4294-be68-a2b577a089ac") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "53602efa-f367-4d4f-9d0b-d750c8b2a8b0") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7d83dab7-1ff9-4170-921a-5f9c49c8b2ef") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "28e42d97-2c45-4a75-88b1-07b5d7af31ee") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3d518f9a-b67a-4940-b896-2dab36cb9d7d") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "99bf7263-f279-4988-b9a3-844c60570221") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "78fca2aa-2e6a-4d02-82da-1aede5e6ff53") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "49df8d66-9d82-489e-bea6-f7281c31fc24") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f5cd023b-2531-4fa2-b5fb-793b23799556") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7ed51cb9-9fe4-46ab-8d58-5c1593c94d68") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "313c7229-4897-49f8-a29e-821f588b150f") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "64c8aad0-8169-4441-ac31-9b3e930b0b32") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1dedb8e6-627f-429d-91bb-058f649c00cf") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b411fd49-b9f6-40e3-a223-634fa98206f7") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cbfa8212-8fd2-4d34-a5c4-cc7fb370b39f") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1b117274-a929-4435-8219-78de1de6fb5f") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "24708a37-6726-4796-90f6-f46e9f38cfff") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "39e35e8a-9606-4f4a-abf8-f9e7791e0779") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "54f7262b-c6e9-45bb-b3cd-13588fcaf66e") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5db0a76a-38b7-4232-bddc-abc74c84b7d5") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6ed7df43-fd36-4034-88fb-63530534426b") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2017f852-593f-472d-be2d-240eb11e593f") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "34930716-5a9b-4123-a716-97cdb9af60df") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "75b0d83a-de6d-4753-b621-7425a4f4f5e1") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "61242da9-840f-432f-9815-3153a7a03e5e") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "413a8ae6-d380-4aa1-bee2-f77ca945e346") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6bb9ee50-fb3e-4f48-aed0-04f695649d99") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9cb42629-6929-4eee-bb93-642590359619") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "23d8732f-1559-4c9e-a6c2-29c4db180ca8") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2cd69c52-b857-4038-af49-af9427ec5a64") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8ca3d561-d286-40b3-abea-5c8241f67272") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bca447fc-f36f-4219-b044-d5988810c20f") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3ded3c42-00de-498a-92fe-0fd45b22eecf") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9bf49250-e7bb-4a1c-a68c-50c768a481ab") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "db22d6ed-dc12-46eb-888e-8c5eeea14e6d") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c9831201-5d33-4044-b33b-e23bcbd59825") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2bb72d5b-f042-425d-8082-c17401130084") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "6618f4a5-15d1-47aa-98f7-7d1bb0b621c1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "b3b196d2-85f2-4dbd-ba0c-dc36aedfc5ef") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "0c8dd339-2196-4c70-917b-086e2fd05e25") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "c4b0c7d8-aee8-4954-b80c-20657a2810ab") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "be319352-59a6-421e-bb49-25602db3b6b5") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "a5d8386a-1864-4868-8297-5de1906495ef") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 146 "Net-(LED12-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "f3bc21fd-c57d-46b0-a022-56833d01e728") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 145 "Net-(LED11-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "d00fac4c-6012-4c49-800f-82ccaa563647") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e4cd009a-335f-4712-a400-238c3be891f0") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "ae337834-8fa8-4461-b45b-553dad7b149b") + (at 194.9038 102.2787) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED8" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "7330a471-568d-43e4-a216-d47b6129228d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "596a852b-4501-43b3-a514-fddbd6d23a09") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "cb28d2a6-ce21-4d51-89e5-c574707c634b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "9e76be97-2c6a-4c10-9f56-b86a168866fa") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/6b1a0b69-9d64-4348-8ddc-ffbb0050a1cf") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "2f04185b-4c46-49ab-afb0-c886d6400a36") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "417f044b-b835-4744-8934-019973f6c4bc") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "64b28b11-84a5-4d86-9e01-fe5bc0b48685") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9496b74b-c99d-4cea-9596-82b3bf105a4e") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "84f7ea96-fc97-4a7c-8f3f-f938e50ac6f2") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "fd24fb8c-a30a-4788-a17a-8e088d058a7d") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "0da52123-56a3-443a-9ee5-fb6ab9985b63") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "17b400c2-0b54-40fa-875b-cbe420691460") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "bfa98e70-32ab-40d3-b2e6-ef3cbe1b98aa") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9d4724c4-a56f-4383-8d36-1e9d5b80a24d") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8fe3f766-0fc4-49bf-9ae0-5514c97fe4a7") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "702f9c7d-d036-416f-af95-a362954db8ec") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "95f1d2ba-5456-4216-adcf-69e79b43e950") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6563120d-5e76-4e7a-8392-9f0e25d97e38") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "dfe99f78-02cb-4af7-ad1a-fc96339c5dda") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2f207551-e9a6-48b4-b22e-84ddddd84256") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "638049e6-ce74-4b68-9b60-245ec37608af") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "24a396ac-bf37-46b0-9b15-08e0c878110b") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1725f679-ad66-442d-9e01-10e467919cfa") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "79f5f1fc-5f0c-4d4e-bd3a-a5f97ad6c394") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f09c7086-3e93-4932-b068-23ac1540785c") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9dfcb76e-851e-4b58-8f83-176bb1311196") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0403954b-4c0e-4574-9121-437d12d0218f") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a94e0d6f-f4cc-4f02-8916-52456d289983") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d3b9a586-6dc6-4c4e-a223-73dee3212040") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2a979d41-5fa6-4c9b-96eb-75226673baaf") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a8b311a7-956c-4f65-aac9-cb902f2bcfc6") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "375af507-598e-405e-97b3-c2c405686669") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fc443f5b-1c6d-4c85-bd33-bb9e1dccb4b0") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "79b51fd8-2c4c-4e85-8a70-66a57b98a9a8") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "be46dbee-20f1-4a1d-9952-2d9b03a4eb0c") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1e0d9631-f09f-4327-b90d-d9ed5476108f") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "07a21569-9952-469b-9dbf-090e668f54ca") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "49477f6b-c9f2-4a41-bcbe-8a56e0520ae4") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "5a50aa1c-c13e-4f73-a7eb-d132589ce61f") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4ed0112b-d840-47fa-88d7-8152772b5704") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "412b7c80-0bae-498b-a7ad-dffc5628d367") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7d8bba7b-8272-4c5d-bd0f-d73715cfdc69") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "d04e27f9-3c39-4de6-9b8c-8f9ca5cc142a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "db324796-6537-4e09-a20c-ca2e294ce4e3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "fe77c536-cb1f-48bc-af26-eb10e181d30d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "4d0de21e-a9b4-4a56-aa6a-0a02de3337d7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "fd4e22a2-589f-4c09-94a3-b18a02101a3d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "7689cde6-2047-4023-a344-52a23861f31d") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 142 "Net-(LED8-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "5833824c-83b1-4186-b68b-e31a2401e90c") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 141 "Net-(LED7-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "9679bd9f-cf43-455f-8ff3-59b7dac3a015") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "f7e23c90-b80e-4049-bb4e-8d3bc32a6d78") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Horizontal" + (layer "B.Cu") + (uuid "b13cea87-10e3-4372-8250-25d430b3bdcd") + (at 340.9994 58.3406 -90) + (descr "Through hole angled socket strip, 1x06, 2.54mm pitch, 8.51mm socket length, single row (from Kicad 4.0.7), script generated") + (tags "Through hole angled socket strip THT 1x06 2.54mm single row") + (property "Reference" "J1" + (at -4.38 2.77 90) + (layer "B.SilkS") + (uuid "0aa2db43-cb4d-45a5-ae7e-7b300d745736") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "Conn_01x06" + (at -4.38 -15.47 90) + (layer "B.Fab") + (uuid "f2023111-f37d-42b1-8b55-cb0c7b911d49") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (layer "B.Fab") + (hide yes) + (uuid "9cd61d9d-71f2-432f-9e54-6db5b6aaa84e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 0 0 90) + (layer "B.Fab") + (hide yes) + (uuid "f117db13-c851-446e-8e9b-64ec0a453807") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 0 0 90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "14678b9c-0cee-4a87-8a37-0bc1b7173d95") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Manufacturer" "TAD" + (at 0 0 90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3a9fddd6-a41b-40e6-bc52-fba4747c1d50") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Part Number" "1-0601FBV0T" + (at 0 0 90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "c67fee67-faf6-4a87-a80a-6f555e9b2c46") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property ki_fp_filters "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*") + (path "/b0e5479b-55c8-4df5-bbc5-a0d68647dbd2") + (sheetname "/") + (sheetfile "68percent.kicad_sch") + (attr through_hole) + (fp_line + (start -10.09 1.33) + (end -1.46 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "b01472ef-a82a-4461-b12a-46edbcc0fff7") + ) + (fp_line + (start -10.09 1.33) + (end -10.09 -14.03) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "03649d5b-f72c-4c58-a8df-faf0ed98079c") + ) + (fp_line + (start -1.46 1.33) + (end -1.46 -14.03) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "fa931e3b-de87-4064-ba91-0a3a33168056") + ) + (fp_line + (start 0 1.33) + (end 1.11 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "c91404ba-4df3-445f-b3e8-1f05fca4daf1") + ) + (fp_line + (start 1.11 1.33) + (end 1.11 0) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "69fb59ea-1d20-4eb6-b4fd-a3b2776c6ce5") + ) + (fp_line + (start -10.09 1.21) + (end -1.46 1.21) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "5eaba43e-6b33-490c-883a-8800abfb43e9") + ) + (fp_line + (start -10.09 1.091905) + (end -1.46 1.091905) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "74579a4c-fbfc-4495-822c-ae65004bdf9c") + ) + (fp_line + (start -10.09 0.97381) + (end -1.46 0.97381) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "2757f5e0-253a-4e37-8ff7-dd2570bd5319") + ) + (fp_line + (start -10.09 0.855715) + (end -1.46 0.855715) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "38ef1544-7702-4cd6-ae49-9fc59c4cb29a") + ) + (fp_line + (start -10.09 0.73762) + (end -1.46 0.73762) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "9b8fd19a-6daa-491b-ba1e-1dd236adbcf9") + ) + (fp_line + (start -10.09 0.619525) + (end -1.46 0.619525) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "4355474c-bb02-49b0-a776-d8a1ff8eb5ae") + ) + (fp_line + (start -10.09 0.50143) + (end -1.46 0.50143) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "591651d7-0b5f-4d18-a49f-56652338951b") + ) + (fp_line + (start -10.09 0.383335) + (end -1.46 0.383335) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "75e97003-47f6-4f03-9293-8c4b3f4fce3f") + ) + (fp_line + (start -1.46 0.36) + (end -1.11 0.36) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "a7c3f72f-44d4-4d9d-bfee-98763bd10da0") + ) + (fp_line + (start -10.09 0.26524) + (end -1.46 0.26524) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "cd319b65-df76-49ef-acdc-c78fc0854ff0") + ) + (fp_line + (start -10.09 0.147145) + (end -1.46 0.147145) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "6a7f06ca-a870-4469-af60-bde85a1e1b06") + ) + (fp_line + (start -10.09 0.02905) + (end -1.46 0.02905) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "12a25ed2-3ad3-4d18-a84e-1504cd99df78") + ) + (fp_line + (start -10.09 -0.089045) + (end -1.46 -0.089045) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "6cbd0049-c15e-4184-a5ea-4d7ce91efdae") + ) + (fp_line + (start -10.09 -0.20714) + (end -1.46 -0.20714) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "5c543355-6bb6-4acf-a5ef-cdd5e3bb8415") + ) + (fp_line + (start -10.09 -0.325235) + (end -1.46 -0.325235) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "1f6b8c2b-18d2-43d0-9219-f1ac28f67bdb") + ) + (fp_line + (start -1.46 -0.36) + (end -1.11 -0.36) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "8a335e68-08f2-4cbf-bb81-9ade7afdf617") + ) + (fp_line + (start -10.09 -0.44333) + (end -1.46 -0.44333) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "c64a2ed0-fee9-4c13-84c9-3cf856e71620") + ) + (fp_line + (start -10.09 -0.561425) + (end -1.46 -0.561425) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "9defd7e9-f8ec-4943-87b2-f6ef960f95d4") + ) + (fp_line + (start -10.09 -0.67952) + (end -1.46 -0.67952) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "1b485dea-25e4-4d96-8fdc-543002f87249") + ) + (fp_line + (start -10.09 -0.797615) + (end -1.46 -0.797615) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "b6ef9254-d345-4a51-8fc5-d399a8ed137a") + ) + (fp_line + (start -10.09 -0.91571) + (end -1.46 -0.91571) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "bed5d485-87db-4d84-ac24-5176bd618532") + ) + (fp_line + (start -10.09 -1.033805) + (end -1.46 -1.033805) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d99613b0-8148-402c-8f6a-4b2dd1afc6e9") + ) + (fp_line + (start -10.09 -1.1519) + (end -1.46 -1.1519) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "3d800a08-fed0-469b-87a3-1789f7316401") + ) + (fp_line + (start -10.09 -1.27) + (end -1.46 -1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "50a34697-8293-41d8-9bec-491b9c6565a3") + ) + (fp_line + (start -1.46 -2.18) + (end -1.05 -2.18) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "429b0116-31c3-4ec2-bce2-1441c070e827") + ) + (fp_line + (start -1.46 -2.9) + (end -1.05 -2.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "02c11bde-f227-4302-8d0c-86d7bf8b949d") + ) + (fp_line + (start -10.09 -3.81) + (end -1.46 -3.81) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "763fa166-5bb4-4128-878c-59c8892eb185") + ) + (fp_line + (start -1.46 -4.72) + (end -1.05 -4.72) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "a222ee79-f3eb-475f-a065-8feb421db03b") + ) + (fp_line + (start -1.46 -5.44) + (end -1.05 -5.44) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d03d5904-1cfa-4600-91c2-a5477375758d") + ) + (fp_line + (start -10.09 -6.35) + (end -1.46 -6.35) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "b4bb438c-15c7-44f5-8c3b-307ef2018bc9") + ) + (fp_line + (start -1.46 -7.26) + (end -1.05 -7.26) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "cbb69d55-e5fd-4590-a63c-d087e8157c76") + ) + (fp_line + (start -1.46 -7.98) + (end -1.05 -7.98) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "8d5beb64-b5fd-4062-8698-ca09019c53ff") + ) + (fp_line + (start -10.09 -8.89) + (end -1.46 -8.89) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "2c0d77c6-b534-45ad-95b9-6070279d2b3f") + ) + (fp_line + (start -1.46 -9.8) + (end -1.05 -9.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "2e8fc60b-41e8-4148-b70e-11105e4069e0") + ) + (fp_line + (start -1.46 -10.52) + (end -1.05 -10.52) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "4d2ab966-e577-4d86-9dbf-4e481ef241c0") + ) + (fp_line + (start -10.09 -11.43) + (end -1.46 -11.43) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "6d8aae62-5d3a-4841-81c6-f97a1cfae997") + ) + (fp_line + (start -1.46 -12.34) + (end -1.05 -12.34) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d29731b0-e23d-456a-a9c1-59ac66fdaaa2") + ) + (fp_line + (start -1.46 -13.06) + (end -1.05 -13.06) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "447f0346-fb94-446c-9404-25ebe0998bca") + ) + (fp_line + (start -10.09 -14.03) + (end -1.46 -14.03) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "2a150e00-a332-4299-b5dd-7cf01cd0a317") + ) + (fp_line + (start -10.55 1.8) + (end -10.55 -14.45) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c85e3370-cec3-468a-b820-ec7c3005dd49") + ) + (fp_line + (start 1.75 1.8) + (end -10.55 1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "48680505-964c-4094-b31e-ba5372d603a6") + ) + (fp_line + (start -10.55 -14.45) + (end 1.75 -14.45) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ad3e0d1b-d578-48d4-8221-a96ee1d41d0c") + ) + (fp_line + (start 1.75 -14.45) + (end 1.75 1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b62dc7a1-fc8c-4fd6-9631-553fbca9638e") + ) + (fp_line + (start -10.03 1.27) + (end -2.49 1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "d992409c-51f9-4b96-9d6f-34cbf25e46a2") + ) + (fp_line + (start -2.49 1.27) + (end -1.52 0.3) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "2626647d-b406-4f6a-abec-4796aec81fb1") + ) + (fp_line + (start -1.52 0.3) + (end -1.52 -13.97) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "de671fab-477c-4519-99e5-e94d74912774") + ) + (fp_line + (start 0 0.3) + (end -1.52 0.3) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "82732650-9e2c-4780-afd6-f24c61847138") + ) + (fp_line + (start -1.52 -0.3) + (end 0 -0.3) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "9db63827-5fe7-4fe3-bd07-6ef61e019e44") + ) + (fp_line + (start 0 -0.3) + (end 0 0.3) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "c49c7c6f-4edf-4bda-a069-ece4335e6302") + ) + (fp_line + (start 0 -2.24) + (end -1.52 -2.24) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "8a44372d-3cb5-46ce-ac04-5f882ac44171") + ) + (fp_line + (start -1.52 -2.84) + (end 0 -2.84) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "fe7025ba-7510-409c-9faf-9a6682b47b37") + ) + (fp_line + (start 0 -2.84) + (end 0 -2.24) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "0d6099f5-69dd-4b64-9708-cae0acb401bf") + ) + (fp_line + (start 0 -4.78) + (end -1.52 -4.78) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "136b0abc-bbe3-4e83-886c-1b727bf82544") + ) + (fp_line + (start -1.52 -5.38) + (end 0 -5.38) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "71053db4-f9f7-4280-a6a2-099f26db7197") + ) + (fp_line + (start 0 -5.38) + (end 0 -4.78) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "22bbaff5-ba4f-4368-ade3-241fcb399011") + ) + (fp_line + (start 0 -7.32) + (end -1.52 -7.32) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "14db3e4d-b9ca-4ce9-869a-bb8e0ca7e340") + ) + (fp_line + (start -1.52 -7.92) + (end 0 -7.92) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "89b33d40-cc2b-4d76-b00f-bd6bd3624fce") + ) + (fp_line + (start 0 -7.92) + (end 0 -7.32) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "1ded071f-474a-49b1-a802-f4b7ba4dfc19") + ) + (fp_line + (start 0 -9.86) + (end -1.52 -9.86) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "0399f448-db9b-45b2-bd78-046c575d99f2") + ) + (fp_line + (start -1.52 -10.46) + (end 0 -10.46) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "f5a6cf24-674f-47fc-922b-046d8ce7dc68") + ) + (fp_line + (start 0 -10.46) + (end 0 -9.86) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "3b49d2c8-4351-41e5-9417-03b1aba05a52") + ) + (fp_line + (start 0 -12.4) + (end -1.52 -12.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "55b29410-a970-4a31-aa29-e21703a161b1") + ) + (fp_line + (start -1.52 -13) + (end 0 -13) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "7590c391-0796-4fd0-a9eb-12a5fc407b69") + ) + (fp_line + (start 0 -13) + (end 0 -12.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "ac7b3558-57a9-439e-ba54-27aeaba1f78d") + ) + (fp_line + (start -10.03 -13.97) + (end -10.03 1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "c3cb9d76-33a5-4f1f-b2f2-f2eb429ccecb") + ) + (fp_line + (start -1.52 -13.97) + (end -10.03 -13.97) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "32726c86-352c-4ffa-88b4-4c44cb7e76a8") + ) + (fp_text user "${REFERENCE}" + (at -5.775 -6.35 0) + (layer "B.Fab") + (uuid "c4fd8aec-1f00-4ea5-a1b2-07e2a1be5223") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (pad "1" thru_hole rect + (at 0 0 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "+3.3V") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "b53a76bf-f07d-4135-8cec-95305baf4e3b") + ) + (pad "2" thru_hole circle + (at 0 -2.54 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 88 "Net-(J1-Pin_2)") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "f97823e3-ccec-4b4c-a30a-6220bec2a3c6") + ) + (pad "3" thru_hole circle + (at 0 -5.08 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "GND") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "93939e3b-fb12-4c30-aa0f-c9bb0536ba59") + ) + (pad "4" thru_hole circle + (at 0 -7.62 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 90 "Net-(J1-Pin_4)") + (pinfunction "Pin_4") + (pintype "passive") + (uuid "25e60d96-bb0f-4d64-94f1-44d89c7e04a0") + ) + (pad "5" thru_hole circle + (at 0 -10.16 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 91 "Net-(J1-Pin_5)") + (pinfunction "Pin_5") + (pintype "passive") + (uuid "cad179eb-6e19-4af4-8431-1aab46efe093") + ) + (pad "6" thru_hole circle + (at 0 -12.7 270) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 92 "Net-(J1-Pin_6)") + (pinfunction "Pin_6") + (pintype "passive") + (uuid "a0cc9078-df74-4a0a-8e75-736ba8f21e72") + ) + (embedded_fonts no) + (model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x06_P2.54mm_Horizontal.step" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "b19ea63f-ed8d-4f01-877d-87a917754c9a") + (at 111.2485 178.5941) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED59" + (at 0.1965 1.2861 0) + (layer "B.SilkS") + (uuid "bf58ae49-c9ce-4d5d-b859-0a37acad2b1a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "0aefe8c6-7d8d-4616-9a8c-d9277fdcb76c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ea961d02-b1d5-438c-8d5b-8e8ff10378a1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3efb9f6d-67da-4b4f-9297-a6722be24880") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/6f5ef4b4-9c17-4c4e-b3d3-4dd618263f2e") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "ccd92fca-9e1f-4732-a2b4-1ef9ec25dbb8") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "57c274ff-422f-4a59-9a95-94058990a2f3") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "d3b5a2dd-2c13-4d03-983e-5caad8d875c5") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "51236f42-745e-4423-9d06-b7a43d416292") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a0da8aad-1b9d-4fda-9a91-d83c340a9774") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "aadd1499-11c3-41eb-a20e-0decf47b6783") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2ed578e8-bd6d-4a4b-9371-a986b7d7f312") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "95406a47-118e-4043-a40c-0b29d1538914") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3aa98410-8348-4726-9cc4-5ba42b6d7fe3") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2942ef94-4174-49a5-8544-955c7d3688e3") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "52b9bf5c-2be4-49cc-9010-607e0a2e25a6") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f8b86fd8-ba78-45f4-82b1-1dfd99e24db4") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "44d68ed1-ef9f-4cf9-aec9-1d6a7bbfbc73") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8f3494de-9bef-4651-8642-a1746d733e99") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "49d72034-da10-4723-80de-829fac73db29") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "31d6fe50-b847-4853-a12e-1f703e939a22") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9565b87a-07bb-4022-bba1-9e22596cadf4") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "38ad196b-a0c9-4871-9313-c35ee6914081") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "973206f4-5b60-4a5b-b9f4-a1942b157b4f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "12e51e6d-dd19-4c6d-8df1-79f81495e180") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "61a2637e-b53d-4d54-9671-5a408370a09e") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d35bd773-2218-4b89-a3ed-06112ddc0298") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d9dfb265-a69d-4c40-8ca6-13f3e863ea59") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "29b168c7-a4a6-49d4-9026-c7a4010a2e16") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "49fa3667-c49b-4f85-89f7-6735491981f1") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "49cf4fbe-9b86-4987-a2cd-b77800ad21da") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5cada4e1-423b-472b-815a-e9661e7f939b") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e6bd683a-6fb3-4040-8716-2301fe95ceab") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e457e96d-6692-4ba5-8b2f-42164ef8f8fc") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f478a4af-43b4-4f1b-9424-3a833ba96fac") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0217da55-cc0d-495a-8971-8240c0c57460") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "86de7b34-e326-4460-bda9-6329744083a5") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c809ba15-57d4-441b-8c31-8fe9b5b7f2f6") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "617a0cae-3b4f-4114-83d8-dcd54bfb3590") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0fea1a65-ff70-4878-8728-9e91153e219a") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "885c2a4a-0b39-42cb-8c4f-08bc1fcc2ee1") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "62ac5373-00d0-4935-843c-155c7edf9cf6") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2e738ada-7dce-4e0a-a0ff-d58fb573593a") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0073d99c-00d4-4803-9d56-128859e3970a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "b0821a2f-767b-482e-a5cd-9ca39485d173") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "ee5c4401-edbd-4471-adb9-72b55e857a0c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "5a96d0b5-d886-4ee9-95d5-20f977289a8d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "a84a84d3-75f7-482e-a3ee-94cf9ae7798f") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "11a1d7dc-0e5a-471f-b78b-64f6b2f399a5") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 193 "Net-(LED59-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "58f99dee-cbac-445e-9086-d072e07ea3ea") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 192 "Net-(LED58-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "1e208571-be44-42cb-9d55-8e91149c4f76") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e6c92124-0e4e-4dec-b204-ebe9019b1870") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "b2b5f8d1-ddd7-476e-bf54-ea865183f81a") + (at 290.045 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_PLUS1" + (at -6.215 1.6412 0) + (layer "B.SilkS") + (uuid "808ecd63-199f-4e6e-a5bf-9e6bfaf0c8b2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "64d16ab7-d3f8-466e-bf2f-4cc604e788a1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "f7df4d29-350b-409c-ac97-6f2cbcb171bf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "1a10618c-e45c-400a-a517-33860f9937c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/f6b74e08-f28d-43e8-9e16-4c41433d8357") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a45b0095-06ae-420a-86f7-6fecd6e842aa") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "65c92824-6ee6-4fef-99d1-58dbb476f621") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "278a0058-b777-4cab-94a2-32ff3e2352a5") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "973d7b40-1fec-4cba-a790-3e26036c7c09") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b29db2d1-e72c-4915-93a8-b20d05eb5ce5") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "126cbde5-d331-4bce-9e03-5d34553eddf7") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f810905f-caef-4bd7-a586-1ab55a49641e") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c28d1c91-6a52-4e4b-86f6-8fa9bab9b637") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6f800b21-c528-498c-b8d4-88dba4f466b5") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "94340595-502a-443b-8d45-19f7be3412bb") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "23fc0a32-6c3e-49fd-8ab7-1166e158e2ec") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4128e08d-90ac-4fd9-934a-877c6fdfe44d") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0712a45c-88ac-4f23-b4bb-1820ff4babb4") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7c982364-6f3d-4612-898c-4d935cac048b") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ca9c5d11-9cda-40d6-a240-3552257a3063") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7a121372-51bd-43b5-a131-b62cd865b194") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "606e6638-7c46-47d0-8c35-4e8d41a81620") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b605c631-c00c-406a-a310-a87ab85a15f5") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "30f40ce1-59f7-431c-ac2a-a82088cb8f49") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "44e62257-0563-4577-b110-48fa4d3e5790") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6b26daba-e257-48aa-bab4-2c1b35a60af4") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "54b47730-c028-4e31-a5cf-d075b83c09d0") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0260c486-0727-43d8-9c2b-d859be611460") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8f5cc761-6ce6-43fe-98cd-9d5da3d54d94") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "935e5168-7d8f-47b4-97a2-317b4d961fa2") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9f80224e-79a6-4c88-89b6-a19651511cf9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c2a2c978-addd-4c3b-8d29-f541d8488127") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a57336aa-4375-4486-820c-f808f9437c07") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "edeb7d05-5f9d-431b-956b-84662414f983") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d39a0f68-6252-455f-bf6a-fd57c2b14cbe") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "308d6eb2-5318-46cb-9c32-3b997ac6d0f1") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f21afcda-0e83-46f5-b615-f467207a10c0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "83acc5ae-3f4c-42ec-a230-cc2b718fb683") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cf835f4e-a720-43e1-a338-65226369088b") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "c0adac03-ffc4-4321-9605-1dc98f080d9e") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5ec09bdf-6bd8-4295-a125-0ba2ecd3b11f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cc7b1061-6006-487a-b79e-c5112bb88c7d") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "100ddcf6-4f96-4f34-9116-272327e6152a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "632100a6-9a5a-482f-938f-ff24746cc430") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dac4d711-efb4-4683-b5f8-ac309158f5c5") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1e2f2459-c71e-46bc-baff-ccbd2bf858dd") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "bb75727c-fef7-4448-8228-5957beb7c95f") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "f918cb29-f53a-4f6c-aa11-837cb716bf37") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "c57bd0fd-30f6-4276-9f26-65c89d3fb91f") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "bbe955e5-c566-441c-bad4-9f65fac157ec") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9cd080fe-3f72-441a-9537-6a30e44f67d4") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "3b21d0b3-ff0b-4288-936b-e94b7b7313b2") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "f89c5c03-742b-4c1b-ba2d-67d20d8b98b7") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "b7045f0f-f878-4873-9e97-03b8c92472a0") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 16 "Net-(D15-A)") + (pinfunction "2") + (pintype "passive") + (uuid "85a1f908-443f-4f80-b620-b95a6b58b637") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 16 "Net-(D15-A)") + (pinfunction "2") + (pintype "passive") + (uuid "62663db9-52cc-47b3-9a5e-42798d6a12bd") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 16 "Net-(D15-A)") + (pinfunction "2") + (pintype "passive") + (uuid "42c85341-f2b1-4f40-812a-7c3c42b4ffd8") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "b5093143-7f50-4155-90ec-674e59897cb3") + (at 142.4825 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_C1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "d2f7a0cb-ac4a-4ddb-9a71-507d5e258d8f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "a1586b42-8271-401d-b10b-62eeb378e143") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "e17fadf2-e56e-4135-9056-965e2ed149a7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "89f93b75-49af-427c-9c4c-3d2ca194687f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/dabc80f7-7725-4e96-a790-331cb22c86d4") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1321d14c-8e80-4457-ac2c-9f184e9ad949") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "110c31c9-39c3-42da-b1c0-dec47cf0f2a6") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8bed9eb7-8fec-469e-874d-124a91448356") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a59f4cd7-2ab6-442a-8213-46af8f3cfd8e") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "995977bf-a589-4b58-b800-3f928d303396") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b7389a17-12e5-4280-8244-be3c1eabef67") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "819ac04b-d610-48cb-a0e7-71e452647f17") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cab185fa-d594-4916-adce-bced620f4e09") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "44a65a63-d8ab-4eed-87f4-cbd4af42eeb5") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "219eba75-51c6-4232-a6b4-f060cc5f91ce") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "2080d237-2f77-4fdb-8cb2-4327136213f4") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "584563c5-db6f-4be3-a40e-ade7ce77c4b6") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "288f25a6-df7e-40ff-83e2-5184838cd05c") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a099b92a-0b57-4493-a2f0-6f60a250d699") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8689a621-e44a-4d8b-928d-33db22874e2b") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1cca15df-c9fd-4546-8236-9a67fe4d8c85") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "39877350-8d45-481a-88c3-9073276151d5") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "952bc7f4-6fd1-4d48-8ab4-b4d26dfe4b54") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "222fe760-b67d-4a21-ab43-8ec58f7bac71") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5bf7a114-47bf-4937-964c-a1000db017f1") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b992622a-e8e8-4de3-8e23-3851a3773edc") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c23ef011-e952-45bf-a649-48fbe77b3095") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3a8f639a-7c89-423e-85d2-775312a7b58b") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fcb6d1f2-cbde-49a2-a349-e1403831190e") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d4bfcfa3-d796-4961-aaa0-76427b98cba9") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bcc7f941-e498-4bf1-936a-60ef91899d48") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f58bb885-c82c-4d15-8989-3583e9c18a2e") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e7993261-6f02-4f04-89eb-2a36b59e838a") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "27ac644b-a4ed-42eb-a689-c23ad1dbb263") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e151ca24-372a-4f76-9e9c-3d4cd9af096d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5b4275fa-889a-4ece-b4c1-a5fe322fd1b6") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "69c271e3-1200-4bf3-a745-fd054f549260") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bb1a0a02-c2e6-42e5-976b-09105d0e4770") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2689067a-f8bf-402d-ab7e-e99bcad6ba85") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "91bb27e0-52db-4700-a3b2-6bcb8d89e198") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3d75a5fc-627a-428d-82a0-cecfd8e56c7c") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d8d37ec8-8c4f-4885-abfe-dc24947664ae") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ad907304-098e-4a29-8313-b976c26f7174") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "30f2793a-b669-4fe1-a1ef-a166f7476e6d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "44e608f6-2f9d-49eb-8c51-130de40f8ad2") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9549f706-1ccd-4cec-b80e-4a878c501c52") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "60836a8a-821e-4177-b5f2-eded95b34eb5") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "4dbb2d0f-dd83-4499-a6f7-c9698826ad83") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "bf88ea6c-bfa2-4bc7-b4fd-2826d4875377") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "7c5c38d4-1bbe-4435-a95a-ca2cb53f4180") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "0148f1bc-469c-4c67-b64c-f92e9d6b9875") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "74f03469-0417-48ba-99ee-fbbcba670a6d") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "35390e1c-6750-4532-b0ec-471fa2ad2c7a") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 38 "/COL4") + (pinfunction "1") + (pintype "passive") + (uuid "90231850-23d3-4d1c-84b1-d043991e885d") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 73 "Net-(D52-A)") + (pinfunction "2") + (pintype "passive") + (uuid "03a8609b-0b04-47af-8155-dd4f60b95d99") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 73 "Net-(D52-A)") + (pinfunction "2") + (pintype "passive") + (uuid "334ab741-b02d-4d0e-a4b3-7135751e1caf") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 73 "Net-(D52-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bb7e06c0-ddee-44bd-9dda-d2bf137c1c34") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "b707b566-333e-4ffc-ab5f-f0fc450f84fb") + (at 194.8175 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_7" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "ccb440af-ff4a-4fe5-8a0b-0290506294bd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "910bdbdc-ec67-43c3-bc11-260723f0ad42") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "6f8463b6-831f-4697-a913-226587975c7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "1631f5a1-abee-4754-942a-30e196a046b6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/344142d6-2fc2-4166-99ca-dda54f2708af") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2111e569-077a-4bfa-aeb0-4e902473850d") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c41f9368-10a8-4145-98d5-350e90c54b8f") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2a411dc2-4065-4118-9dfe-e9e103ccb474") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "27deefa2-f986-4521-ab58-aed3eeb6ea6f") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ab01a5ce-73fb-4c26-8174-9d908eefd961") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "de3f70d6-adcd-456d-ad72-f71cdf60ec84") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "42678f67-7a7e-4bcb-be75-57d3d221c294") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "de9f3f5e-d1fb-46ff-b55e-d1470d95d51a") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c6c98709-63a3-44b8-a695-946c72c16664") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d95e8e3e-52c5-49d3-81b0-4c2d3ae5e5f9") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "b2cbe0a4-dc2d-40f1-afc3-8e4fd31ed741") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "03bef310-ce90-4f2a-9d37-a01c456d041c") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4a665245-263c-4573-8960-1615de576be9") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6686cc81-e578-47f4-a9a5-caf67f42bc75") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1afff3c5-c7d4-41ce-ae87-d96a68a71ee3") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3c6e428a-a7a7-46b4-ad0e-53c526c845c9") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "af5fcf9b-b5bc-4384-8756-079af0521d45") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "947ea1f2-8628-4670-8c0c-647f137128a0") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f5f3c40d-3d42-4a2b-a1c2-4a20854b53b0") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b5228278-0d55-4192-8274-14021e771186") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "489d9366-7f44-4984-9871-4338b1b2a125") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7d42904f-f6ba-41c8-abed-d77ef613fc56") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fd5044be-4390-47a5-9108-30fce14bfed1") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9ff54c24-0987-433b-8a8b-0bc01d72e08c") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "505c3513-a414-4560-b259-5301be682691") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3f4f815b-617e-4c22-b520-984d1a5fe598") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7aa9e4c9-a2bc-4daa-b54e-28e1eb221c26") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "92358a82-6237-4c43-814b-b2d0c0fcbfb2") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "acc3a716-bc0d-42d5-9a9b-72b3cf186c27") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fde35e6b-05e0-4e7a-bd53-44524671ac8d") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a2003f35-0d22-4b44-a00b-cfe5545e3861") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "96d40f66-fa0d-4009-9e19-121cabef832d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c91ff58b-b9af-415f-aacc-ad02a7e2fd6b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8a371a19-aa75-4b2b-868f-fcb4ad2b8212") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "10a1ed08-d3f3-49ec-965a-65e6aa456142") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "69ad1021-4598-4848-af8c-08ef4b9030a9") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "dfccc41e-e028-4ada-8361-14e862abed76") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e03bbf31-136f-4658-a74e-32277e02c393") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "351fadd4-3db9-4833-84ff-142bb09b6640") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "658f335a-1705-40c3-8e15-77763f8f6a8d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a40d747a-61ab-4fea-86a1-5f909248c163") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "acee0475-82e5-4f11-9682-20fa9708b730") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "116043a1-b4ab-495c-9740-057edb7c12c1") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f1f0ecab-ee20-4497-a99e-7a40e423ecdf") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "d48345f7-7bb3-4445-9ca9-09d8e588fed9") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "a76b95e2-7f2f-4677-b49b-21a1e71460bb") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "9c2cbd6f-65f4-4441-8fc2-e7ec98d9f88a") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "d3e3f826-b9b5-4c8d-85a3-3eca9598c981") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "ed04b90d-17c4-40d3-89b7-58e773162539") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 11 "Net-(D10-A)") + (pinfunction "2") + (pintype "passive") + (uuid "1da53258-abe8-4ea4-aa58-761c00ac5ce9") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 11 "Net-(D10-A)") + (pinfunction "2") + (pintype "passive") + (uuid "c48e0c69-3c01-45c2-9b91-ac0215ad8a75") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 11 "Net-(D10-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2fa86eed-366d-4add-984b-6719368666f9") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "b91207bf-45a2-4819-b8bb-1b3b7b7305d0") + (at 237.4549 159.5438) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED53" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "87bdde5b-a19a-4200-8317-c5965e556c65") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "a002a630-381c-41a1-9cef-1fbb27210077") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ca4d431e-8840-46ba-b809-8746f116bbca") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "56a593e3-ad13-4b4b-8076-d92260796179") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/8ba201a3-e229-430a-ae78-b5d27fd30156") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "4cef891f-89fb-4406-a60d-a9a31f9039d7") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a231b314-0aa3-4e90-95e4-dad807cd7826") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a693cef2-a19b-4e50-8493-e4c551e9af8a") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "60e91e4d-7f7e-4b30-8431-e88e96a5dba1") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "0aec244b-35dc-4ec6-bc9a-12d63f93ca9a") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7c05d31b-75f6-4681-83b0-54d852c75032") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "0c90c877-e14d-4985-9a8f-d3258c3804fb") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "40dd30df-d595-4aea-a91f-45a18a9ee50e") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "fa49b3f4-d13a-454f-b622-2a14588876d2") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9ac00391-2be0-4136-b939-581474b1d387") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cf44e8d4-4fac-4260-beeb-7a26c8e36a47") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4e5316e5-6b9d-4d4d-bd1a-ceab02beffa2") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "390d5d20-8767-4e7f-95cc-fc1e69ac2367") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "aa65e018-154a-4949-b6ea-19eaa4bb3b2e") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ad592db3-7400-4f30-ae10-e9c124211235") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "05ac0725-b47d-4de3-a225-fcc032e5264e") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bad7d21e-bb18-4820-98f9-50f77d2ba91a") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9c88b5ba-45fe-49f1-a430-532a4cef32fc") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "478d5262-85f0-44d3-ad6d-4bd2f5215a50") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3e2d09fd-741d-45c9-b283-964d34ce531a") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3be396c2-bbf7-4bbb-8ceb-d8e2cd179a23") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "53e6e782-23cb-410d-996b-1e2d603d0a3b") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "38d63feb-a0c0-4589-9750-0a45ca24cac7") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e03aa807-1804-4195-bfbc-1a60a73a3dfc") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "be2b34bb-631c-4b7f-b063-f8d7c6f692f4") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f5806ddd-3300-4d7c-97fd-77ba9c138361") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ec5e5f3b-def1-4579-bd7a-eab0f4fea010") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e03817dd-b347-4e5f-a167-1df074f84fde") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d5ab184c-9290-43cf-8610-1b4ba6b314a0") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2eccfb32-b6f8-4bf7-aa77-56775581b10e") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "796faf35-26ac-4f62-9b98-47fab9594caa") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "160a3da4-61ea-4c35-9cc7-7c3de51bec45") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2ff281ba-fe7a-40db-8479-35036e47e4f9") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "97626baf-0eb4-4320-bd03-041176b59447") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "843315b0-b666-442d-ac1c-8c270c889197") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4b6252e9-a317-4d59-bc63-b69ee28ef0a9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c3529151-86fe-414e-b096-b1677f473ddf") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "53d482d0-fdfb-42d6-b5ea-a8f4a4a6c3c0") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "b9b07d6a-693b-4527-ad84-a43e11ae55ea") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "ef2403a9-8c57-4f99-b786-327f8f35cacf") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "5e99ddec-d322-40f0-8484-10dd9da2c260") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "24fba02b-a939-48c8-a88b-a8654d1b2553") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "609d76e4-7874-4c6e-a042-cb8e5be08c00") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "28067332-8f0f-456e-9a77-bfeee6e6a849") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 187 "Net-(LED53-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "fa28dcfb-7803-4f22-87b6-8b2869fa5ac3") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 186 "Net-(LED52-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "9cf7fd02-c5f7-44e7-b67e-c6b5c3650f22") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "7f667029-060a-4d93-93b7-1bdfd46d4102") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "bac3c50c-5c3a-4098-899b-baa029d73831") + (at 104.3825 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_Z1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "fdedc040-fe6f-4846-92db-0fa53e492a28") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "3ade7b50-cb3c-4a1d-8c47-3a0308489269") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "ecb62a9b-c618-4441-8020-c74233ae207f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "c419b77a-d1fa-4fc5-8b3e-defb73c1ad37") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b92661c0-19a5-4ae5-86a1-463b554d30b7") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "36b97539-0b87-4a47-b3f6-c66250bf414a") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e9398a9d-aa85-44bc-ae65-a42f473ab6f4") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "102d242b-77fa-4985-afe1-767ce9ea8900") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b16f2c93-467a-48ed-b0aa-7301529dff59") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d6221291-ca34-4001-8295-4a6312fd4b02") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "424162d9-8a71-4458-806c-449cb64d8387") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "651ad121-14e5-481a-a0dc-63dcefc0543a") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0d540c47-fd4d-48d4-9efa-fab1f02e0837") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "edbb1acc-fd44-4d04-abe3-0fa19e10bce7") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0b2b29e8-7838-4566-82a1-963241147b53") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "06a161e4-510d-4338-af00-57efefc0c04b") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "82828a48-7402-481c-a02c-8452201f03ab") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "49b0fe9a-d72f-4bbd-a58e-071527958dac") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0587301d-86b3-4b14-8395-95ea265635c6") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ccce7b42-10f4-4cee-9009-0dae3c7806a6") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "3ae8bb59-b613-4b6b-a86e-a2e88ee32bf2") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "61ab15ca-6bf9-47b9-9ae9-7e061291f57b") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "974293dc-1d7a-409c-88e9-50cd2acde678") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "36681e7f-928c-49d2-b37c-ffc912130ee5") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "be1135e3-a886-4242-a5b2-66d08830636f") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8803eb48-bfa1-4747-8fb6-95161e86dacb") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "39312ec5-eccc-4aed-9a73-5a0b4b3b65f2") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "70cf5d4a-b51f-46a3-807b-aeeaddb63ee6") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7891f68e-7a2c-4b66-82aa-c4e6d43bfd42") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1866f3c5-eef2-40ed-b5ad-8e4a9ecbbe1f") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "03dba221-45f5-4a14-b19b-3cebce46cf5a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2bb70013-d905-4023-8b7e-b7a4671c65bc") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4227db4f-60a7-40ba-8c6b-bc16d2f565fd") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5cebdddd-8add-4448-b729-15645f2608e8") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "24de61ed-59bb-40ee-8790-e6ee42f8fbae") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "249f70a1-9dcf-49c9-9549-5533091b8861") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9d2a39d3-56f2-490e-aab2-83c76fcd489f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5558aaa4-85b8-4fda-a614-842f4c3d3cf3") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c9582475-00a6-4343-8ea1-b51cd9ef0fbf") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "a3cecc65-1d04-4c7b-8c5a-4dcaa489efd0") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3fa99c38-1df1-455f-b35e-c761bcba9308") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1e9abf90-9602-48ed-9a3c-1f4ec3cdbe93") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f2ba444d-1412-47a8-bb3e-31e736fc1fae") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "73ea6cb1-5a5d-4337-b6c2-3747fa8ac779") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ee1aef4a-f638-4eba-8ddc-427691a9d080") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "acbb3817-1ee5-4436-9ba6-4b71de0976d1") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7606a102-8e3d-4f40-825d-14c3c4b19252") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "4ad63433-083b-434b-afbc-64a8a66e5fb2") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "62907f2f-471b-43da-8f0a-0749df1a159b") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "61a4114a-be02-4de0-b5cb-9d0c9aa1222b") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "e036c085-52a5-4e26-8450-7029297e927a") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "c00fe53e-0c4b-4a12-bd74-f02bac54d3dd") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "e7f8b4f6-0542-402b-90a7-eb0350799684") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 36 "/COL2") + (pinfunction "1") + (pintype "passive") + (uuid "74988bf0-b1ab-48c4-b689-a529ab2b5840") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 71 "Net-(D50-A)") + (pinfunction "2") + (pintype "passive") + (uuid "bef94f19-07c8-4c49-8082-263a8e9f8724") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 71 "Net-(D50-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0c850cbc-ff0c-4ca7-a5a8-b0a0a0cb7010") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 71 "Net-(D50-A)") + (pinfunction "2") + (pintype "passive") + (uuid "32fbfac1-a786-496c-8292-2adca57ef16c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "bcbde332-b362-49e6-8710-d67c620fa79d") + (at 270.7924 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED64" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "603dc9f0-8386-48aa-8fc5-9e9271e550f4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "9913fd8a-cdee-4e13-8c98-41cec59c6a53") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f971f36b-5bda-4bdf-b47a-0582733e5e86") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "30a6b235-9eed-43c9-a1e7-feea0acb44f0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/5dd61d0f-9ad3-478b-9795-fcab450a26f0") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "9b19eff5-fd77-4a27-8ea4-7ad974e2b760") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2efb8b46-3554-4683-85e5-2b3ff087de8b") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6fc67262-9838-481c-8b57-3547829e2856") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "308d66ed-b0fc-45c1-8364-ac0feb2d8400") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "1bc8e56d-b9da-486e-aa0e-385b35435c6f") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "022c9da0-1a90-404d-9b2e-ec2b08ef15f7") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "eb4cd78d-8e48-4728-84ac-3b1b6cbd9d72") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "880c7c17-22c4-4f14-a0d2-fb0aff582cd0") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "64785b5c-b4ea-41bc-93de-b1d47b6cac39") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "6d4df271-daee-46e9-b88f-fbb56b9d801a") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d9fe0b30-015b-4761-b7d4-443e31382645") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c46bb75c-a990-4243-b52d-07f42da46d43") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e35921ce-00bf-4e14-b2df-7a470be3af89") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f232e2b8-f4b9-4ac1-8614-621511e1eb25") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "db7958f6-afce-45d6-9e2b-14abd943dfb4") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ef79682b-a6a9-4b01-87a8-9e207eb84ccf") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1a6423a5-5591-4c77-8dcf-f99e79528b56") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "04975199-dd30-4870-a747-ec1951492d17") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "01144447-ff70-4bea-b5d6-d45094cc6694") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eb98fc8c-594f-4651-85b2-80aa86d7f0ef") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "be44dcb6-ac01-4636-a250-51ab839efb50") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "28ddc481-708b-4384-8114-5ec642b3c5d1") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9bf90ca7-274c-457c-bf1e-779ff7cd5224") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4759f175-1c7a-493f-878d-aa84a69c8f47") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f53efb43-c76f-4b32-90e2-b821e89f468d") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d14dcc88-d249-4a1b-a5ea-435831798494") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9480d862-f605-4751-b430-2b90b9e2cca1") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b7272aed-c3e9-4113-b1fa-334edc2780ba") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8bee0366-3dd0-4f16-9a2b-ee0d34cf0c92") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5f0fbf35-c629-4516-9fb2-1f707998e134") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f8423796-3715-4e40-a31e-fb57d899d8fe") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "efa701f9-7f1e-4e7f-a6f4-bbcc1f10bbee") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "93d82886-90b7-424b-aba8-3523216880f0") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a5a02e6a-47d8-41d2-b4b9-d59d97000c07") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "03badbdb-bc68-417b-ba2a-8f760e0a8f65") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e3eb7831-921a-4675-9e50-31937d33d7d3") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8a3897b2-f9ec-4570-9939-7a699d2be2a1") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4452cf69-c012-420f-8701-02aef8462a9d") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "18acef5a-cd7c-4b2c-9fda-d1028e3c4cff") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "66e44170-25fd-4fc7-b6e5-fc8018b2bf3b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "3585ec73-0f4e-453b-90da-cf8d530cea79") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "53444250-cd1e-45fc-b982-5575f908b91f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "694ae7a8-8393-4689-b836-de5b252d4881") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "18f44594-3619-4df3-ad9d-428049e15761") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 198 "Net-(LED64-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "6240820d-4f8e-457f-bcf4-bff3da26417f") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 197 "Net-(LED63-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "85f6d024-9548-4d4c-9821-24a621d1fa8b") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "45ccd132-6bed-4bcd-ad24-1f11795f3856") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "bef022d4-b18c-4142-95c6-70b230c2c5f3") + (at 285.3315 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED42" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "86c16ece-94f7-4208-80eb-3f65d369df02") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "3c1a87c4-63e1-4db5-aaf7-46a18618bab0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "14f8a106-ae34-4a4e-b726-5775ac54c79e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "53d5ad21-6a3f-45b6-8f5e-99f32d8d2f9f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/00cf9beb-8b6f-4e92-b017-877003886752") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "6015d6df-2a79-4b2b-a6ca-0bb0f192833c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "55c4e0fe-bd5b-44ee-8ddb-9430a7ff1c0a") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "93b4cc12-9bcc-49fd-9ebd-ad03de453e2c") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "09fede0c-a789-4f43-bf5c-41d90490942d") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c040b043-30ce-45c9-8226-ddd95c875161") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2b644344-8afe-4085-8896-ff2769fde3a7") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f868f1a1-cdfd-46ae-9962-4ad0bba3c588") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "78229085-aa52-4e6a-845f-10df57c6ace1") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "75af1e8b-472d-4966-a12f-72b79897a862") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5bb98993-2943-49f0-86ec-6982d74a579a") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "69dfddfb-8286-4325-baf1-cadc478f98ac") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "43ec1037-11c1-4eda-b9b4-0b343deec3cb") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "24687763-104a-40e8-91cc-6a0340dd09b9") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4f101934-40db-4193-80bb-bca51b431867") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fec10c68-333e-4609-a180-4ac9097d884d") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b09b7f26-a3cc-48ce-962d-291ffbbdda86") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e2471470-244a-4fdf-9069-8f93ca493bf8") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f9a3b9b9-0c7b-45a4-afbc-a148b4594dff") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0a346a01-b878-4fc7-a3d2-9f759b94fce8") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a6207f5e-4e4d-4c14-bfbe-3010ac8f7351") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a67aa343-26bf-4466-86dd-8d987ebe4db6") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "45574c0b-3619-4c41-908d-1029d987f7e9") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7ab5072f-8923-4262-bcf4-cb0ed44a4e08") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7db9c7f8-8947-4821-b9fe-4e6cdf69fe59") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "574b5554-485f-4c27-9ba1-c375f9bc056e") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a2d4bc4f-8158-47fe-882f-66b8ab5d4d95") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2b9a29f7-f3bb-49bd-8321-c23589a4ecce") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "81931512-276f-49ca-8a5e-782ebc455c2e") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d17506f3-f5a8-4fa4-81ea-f45ac6672b3c") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3037cf86-ecdd-40ab-9f84-86f02c601b27") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f2e547e1-cb78-4adf-992b-66c5fbf5a798") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ea2867f5-14da-4f13-82d3-036cadf61ef6") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4e7e0b9-0c9f-4667-b7e5-c5eb3ee0e504") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "37fea5c0-1c36-4d9b-8ae1-aec3a7335104") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2d0ee6b5-64d7-4e99-a651-115d3f708c4a") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "baec0429-7b27-465f-acdc-9de0fa715200") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e7433565-471c-40bd-bc17-ff7c3b22e03f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f455d5c0-5077-46e5-b8b3-8c4e2d73dadd") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "180b2f83-390d-4445-9354-9947ba166ebc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "4ddde66c-82eb-48f5-a7b4-da4c6aa5a778") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "4b434efb-1ac9-4f73-9d9e-47ba8f5cc568") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "f8b9bf30-5759-408b-a652-543876c5ca5d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "e0e043e3-c75c-46a6-841a-b4baba4166da") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "3f97243d-db90-4b71-8ccd-eac230d5ee3c") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 176 "Net-(LED42-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "a6795e9d-c292-46dc-8ae1-914918270833") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 175 "Net-(LED41-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "7016351f-14a7-4457-b99f-44cf93b4eb27") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "4bbe8817-2525-4310-b97b-57d0bc4b76ef") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "bfa1d042-587f-4da5-b086-d609cb60162c") + (at 156.7175 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_5" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "3d1d7b71-36ee-4b61-9001-5e080abb1350") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "662de258-04db-4e1b-b239-f40f1a8aa33a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "bfe96628-d701-42a7-aefe-680a042259b3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "070d6b06-6e19-4adc-a959-ec1267ee0885") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b503f3c0-457c-476e-9903-51d783bbc905") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "706fea2a-b228-4a5a-becd-3ea0c87fb763") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7ed6309b-b88a-43ad-a7a9-f6a70af05224") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5c51a253-e25e-4e36-b7de-c42f4c699226") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "34acd0d5-2407-437a-b683-5b9faa0e6544") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a0de1af1-3a7a-4697-832d-f4ef1f9c9920") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "47bad759-8384-495b-aa37-8133ba086b91") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5ef2c1d4-e91b-4c79-bb07-ca06776a2812") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ec4ce5ff-378b-4bf2-941b-389a9525d809") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a584399a-990e-4adb-8530-244618dee2bc") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6ab730b4-c5cd-4758-8608-028431a178dd") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "f1eaebd2-4add-4892-857d-eec46e8e104b") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "70244e36-73b2-40d6-b471-f57373e6f44b") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "cde7ca8d-3f3d-4b14-a66c-37235f65a2f4") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6a86dd8f-6704-461a-b936-fbf08c5fc1e6") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ea7c2663-03d5-4757-a512-c8dbac8f178d") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4630d1db-acb9-45e8-9d06-3b024b9bde8e") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a31abfb1-0681-4d49-9136-f91a891dcfd9") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6b2b1162-ef83-442c-974c-fade5040a8f5") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b3de887f-c803-4101-afc8-b8b9eb6c6ae4") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "94884117-b8f1-4640-9f3b-94de01cf5922") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ded59f2c-1d2a-4026-b6a4-c44cadcff603") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ad086833-39e2-4ddc-9f75-ffdd049d3a01") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ba6771af-93f2-4221-9f4f-95bcc83a8668") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3b725295-517f-4530-b8fc-855422aed46d") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a7e20760-d63a-443f-8d16-479b8da98a98") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4c049b0d-528b-477c-afec-0e1dda600247") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "97292df3-1710-44eb-b91f-38dd011f0f10") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5543bbb5-9df8-4e7e-b672-6170efb6c44f") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e5caaa59-4922-4425-b693-8bd7a14ede46") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "116374b0-2e32-4037-863d-df90da155f9e") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "637434c3-e4f7-4429-85e4-f1695e192270") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "330de7ea-c155-4b9e-a291-c522e88b43b1") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4b9a4bb8-8dbf-4344-8e24-3f5d31c0c84b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "640eb09b-bdfa-490e-a366-5cd48c572bbd") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "f73d81d4-030b-4be9-9e61-3b63db896251") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0b56af9b-5bd8-43e1-9b41-c845db7cbbf0") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f65d0afc-e170-43e6-9ed3-c353d262c9f9") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "196694f1-0b03-42b5-82c4-18b5f2ea6268") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f5159852-c825-4c29-9769-615784cc4b52") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "968ee5be-3b6b-4163-b374-437fc4ce1b63") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a584f3dd-f1c6-404d-8d88-d18946c533b2") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3364a1a9-69cb-4d19-89cd-4a7a14a455dd") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "4fb6d141-79b7-405a-a1c4-41219f7e18e7") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "715297ae-8622-4e51-95cb-ee056922d9b2") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "36bff887-18cf-47f5-b9c3-8d7064a12bab") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "30dcd889-74fd-48e8-94c3-38e6cd9e88be") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "bc27a1f3-9237-4b64-94d9-73db6a97dabe") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "b257b44e-f3dd-438f-9f5e-088b78bb232b") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 129 "/COL6") + (pinfunction "1") + (pintype "passive") + (uuid "77a5827c-d568-4f66-8b8b-0b02890562f8") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 9 "Net-(D8-A)") + (pinfunction "2") + (pintype "passive") + (uuid "57a1d596-a7a5-4539-a0b4-e0b31b8cda58") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 9 "Net-(D8-A)") + (pinfunction "2") + (pintype "passive") + (uuid "fc6eaa02-2a01-46df-8f77-68184fb2adb4") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 9 "Net-(D8-A)") + (pinfunction "2") + (pintype "passive") + (uuid "fad237d2-f6ad-4598-9504-4f6194dd994c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "c2cb3807-878d-4f5b-9505-4c089dadb3aa") + (at 213.9188 102.2687) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED9" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "849d37da-2f35-4994-a959-256c7268bc58") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "2ebb4869-9833-4c5a-994f-bc70880df8c8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "27a6c5b1-3beb-4f2c-b745-fd8ddadee58e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "54214e1d-6c8a-4169-9816-64c83765913f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/e48d8c67-7e0c-46f7-b682-efb9e1b73fd9") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "72077ec0-09d6-405d-bc6f-6ac2c1fd416b") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3bf33b9f-4cd3-418f-bbe0-dee603fff540") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ad520fb1-f1c0-45a5-a80f-ad8b4379df6d") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9d775feb-3dce-4839-a1f9-cd96f9b36060") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ceda7f72-5fe4-4757-a49c-3c92652a60ea") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8ed713d9-6fbb-4aee-8059-4eb0a4ee2dcc") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1c1d557c-ab82-4a50-9e29-f7ac8c20a349") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "cdeacc1e-06fa-473a-997c-74a2f629b0c2") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8f75ba43-3bd5-4735-94e2-aaef679a4567") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f59a072b-04dc-4335-b980-dc0bc36a16a7") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "96157181-960c-4fb3-b768-6300ae8e2d36") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e61d560e-890e-4fa4-8ea7-9a9bebb10653") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "e3db6e50-b8a4-445d-83b3-9c53548ef8dd") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6c1e5bd1-7523-4d4c-afde-3c6ee9f06ad3") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8b0df00b-fa6a-440b-95e4-e8fba701ed5b") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "08e6b9f1-0d71-4706-b3b4-bfea516382eb") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2a1be3c2-5578-4f48-8a0c-d9deb1a6cc61") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "771ad2dd-c35c-45ca-86ae-289aa7995bbe") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "919054e2-b085-47de-b99a-e0a3a0d1d8fe") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e2d455fb-839f-4143-b3c1-a9e597c98bf1") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a16a15cc-026e-4adb-95e8-9ea2dda6e5e1") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0d2cd9d3-1e68-40a0-9de3-a3b63cee9f0d") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3d19c002-a79b-4a86-8b0f-6f33b812bb9a") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "73fecaef-7ec9-49e5-952c-d75afd9f4043") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "370d287b-b1a4-479a-8ca6-690dc855c276") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2efd5991-006e-4494-af38-112979e2c055") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "853ccbd6-38d6-4d0a-ba3a-71a36298efc4") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eaabd56f-b390-4dab-8fd1-3c962a643b3e") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "86d84f34-ee94-4394-a4a6-7bca3d473963") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0bae50e3-aa16-46ae-afa6-a78aa7edbcb4") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8d243f4c-79e4-4c38-ad95-30dc4374f69e") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "45afd5db-93f2-4270-b05b-579e52fc68fd") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ab32006c-7315-43b2-bd36-4b9b95c3a03c") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "31081393-e963-4c99-ab93-f7f62fdd068a") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "61a3e9bd-749a-4fbd-8c91-c7a3ff5d381a") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2eedf6d8-a2b0-44cf-a2e7-ad6216c273cc") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f6ed4cb5-6f22-4152-9f9a-0e1d3705a322") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c35b2cb7-09ee-48c5-8645-9c54c6386b90") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "77688b00-b1a0-4b5e-893f-55666a5b6eed") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "9cbf7654-1b45-4bf3-8916-3c4fef4bce4e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "95b30470-a847-4a77-a243-2ffac150d8cc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "e1436058-8e62-4a5e-8941-0c31ac3bb04c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "a4ea9a9d-90cc-44dc-87ec-6063eb057779") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "aa1fed19-977e-4c66-9cb6-cebacb9a5129") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 143 "Net-(LED10-DIN)") + (pinfunction "DOUT") + (pintype "output") + (uuid "2c02ab06-f8ae-45db-8f0f-7a21d3b6bbbc") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 142 "Net-(LED8-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "0e7dcccb-6005-48fb-9af1-7fa81c9912eb") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "d823c3d1-0b8e-4dc9-b5de-017839745601") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "c43f9c7f-6448-43e7-ab8e-8fcbef98e2dd") + (at 347.244 159.3892) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED58" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "1860ffdb-87d7-4c04-9ed7-3679a3037477") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "3b43cf54-4535-463e-8af3-3c6b0d5b1990") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "1797591d-348c-438a-a998-d2e2d0b98f15") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "0d29fdeb-b45b-4bda-bbbd-049230a84de0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/817e0f0b-a0a5-4132-9c38-9330e9087e85") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "6679f35a-0159-471b-ac14-fbbd0d7d73ea") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "997e5979-763f-47ab-86f4-da0d288ce085") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2c9d6274-0a8f-4896-bd1d-72a35fb22058") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "93c3d3bb-4278-4824-8bcb-beb1502a6e18") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "35845965-eb69-4806-ab31-49ad60e69849") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "799730c8-c276-45bb-a19b-cfdcc6803287") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "2b7c4ece-ac7b-4e48-a706-30987aecdb60") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1c2147f3-07cf-415f-9908-09e77ba00b9d") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "69620eec-2aae-4334-a871-3abd1693499e") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b55ff46e-44e8-48e7-b188-5b59d9b59838") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "85e54c90-4a81-4ada-a47f-9178e208623a") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "44636991-a824-423b-ab36-35fdab65e865") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2933b287-16c6-4f3b-aa7d-65164182c43f") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5eb911c3-ca05-4608-b915-0e83b203f26d") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "64bdfad8-ff41-4f93-877a-d304f80c9a57") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "dc8b5395-208a-48a4-a735-b0f5736aaf4f") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "aac18fbf-7d71-4983-a05c-909184ae25cd") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "83868eee-8d79-40b9-8265-5a6f3f966893") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5edd223a-d468-4cc0-9a0e-cc8bdcdfd2fa") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "96042bec-ca55-4e8f-9a80-81ec6deebe18") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0cd9fc0b-2b49-48fa-b4c2-1d00012ed919") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6df51655-990c-4225-a01b-57a7945e557b") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7af5d93-ddca-4812-bd74-fa3e3d596440") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8f43594d-9d82-40dc-9a0e-8dfeb17ac289") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e1085eea-5dfd-4fc2-9a34-b14d1cd67fad") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "768b3758-be7e-4a22-8c1f-140ea1bb3a25") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3e4796fe-a525-4c98-9cf2-c2a815e1d0b0") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "33dcaf10-f8d6-4e3f-8347-2f8da11b8982") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1b4daa8f-1e27-408b-abd4-14e494b48c60") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "715a0592-bc86-44be-8504-4813532e3d6e") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2b3de6b4-55de-413a-9716-40d4ee597be2") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "857f27e3-dbd7-4b5b-920b-d2ae59111dee") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0eb72c8e-eac0-42c7-b841-b5c7feca1607") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0baa930f-5843-4545-b0f0-9f9170482a69") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e46c4e9a-7835-4dea-8b5b-69a3b687d533") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8cf2ff41-0357-4398-8891-5ec0da14bccd") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ecbd7c10-7a74-4949-b138-e43a66028be0") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d8c956c5-c5cb-4c5c-8ac2-3da43463a84d") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "15380fb7-2ba4-4bc3-a8b9-53c8193984c0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "a366fb9e-a887-455a-820b-eeb4dff914dd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "ba615b60-2f95-4648-a300-9fa4c9be7390") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "86e9ddf9-fd97-4809-a2fa-144a54c87409") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "9b9344d3-12c3-4046-878a-1ed8f74709bb") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "816c896c-5ab7-48f3-a569-c3ab7b9dd32c") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 192 "Net-(LED58-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "300cffbb-c15b-4bdd-8438-57fab87d4ffd") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 191 "Net-(LED57-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "128681bc-030c-4420-b46e-4cfda2cd89fa") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "def779aa-a959-4df9-8904-63315512bb13") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "c6196530-3fc2-49e8-ab04-9ee73cd47eb6") + (at 161.5985 159.6985) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED49" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "c991e4c9-2c80-43c9-80bd-e93e3afe0173") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "3d36fd0e-3ece-4c46-90ea-0b329c6f51f8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "a47c023a-f38e-4ea1-8cbb-f8e627a7789d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "80a8cb13-11d9-437c-99b4-f1be90b507f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/c9b30116-3367-4e7a-a031-560c6cb6056a") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "b0636870-bbf2-444d-97e2-ba5716e97cc4") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "049132c5-bc87-4d57-af66-2270bf1f2e9a") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b989e860-7c5c-45ed-9b05-e9e2894d2937") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4b799699-a06e-4cca-bf90-02f1e60a7497") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c0e88554-ae44-4ddd-b25b-032abcb63d64") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a0073482-3074-4362-b219-b2a69ac63781") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "83de4bfc-14f3-4118-8d1d-c49cdfa1c9c5") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "cd98177e-7e6c-4797-ae0d-07c8c183fe2b") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "86bdb55e-6ff4-46dc-9bee-de57e2b252b1") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ae8f8945-6dda-41b9-b730-5eb98d5dca69") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "45ff44c3-74d1-4975-85b1-b31e811afe64") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "31776d5c-1ea8-47ae-a231-c4284101e28b") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a410795c-3847-43d8-9a71-963138b8b395") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3c5889b9-9272-40ee-b81b-4299b5721108") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b22762f9-bec7-408b-b74d-6c5af94df0e2") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9a06e23f-f942-4a5f-98f4-86c7afef9469") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "847a15f8-9297-40b7-a02d-918884123437") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "86222a15-d10d-4c40-86e6-dfcab76e93f3") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ba5f11cc-53d0-4ee0-9b22-aab6bd2d9a54") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d75e45e1-5598-49cc-b0a6-1ab382171250") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "71169b9b-5202-424b-bb4b-b3b059480c8f") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7a06fe22-fee4-4d85-8e2d-e71f1668eda7") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cb07ac8e-8f5d-448e-8179-954eb62e428c") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "301126f6-e622-40b0-9fca-fb822a8d31a0") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0b8ff84f-ad1b-4de0-ae39-133fe0b5430a") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c98328fe-41f4-4f76-973c-acb2622d0f8d") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "792ac04b-5b7c-451b-a254-8d8c54e869c9") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a854fdf6-9e0d-4d77-8d27-82f1be8b3fd5") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b1d345c4-783b-4f40-9035-7dad41480657") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5ccc4741-5008-45c6-98b9-b526e2904d0b") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ffc09a17-95b8-46d3-8027-084e808b8b05") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9a50ceea-a734-4d86-b10e-f04666338915") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8e59b618-4993-4dfb-89e3-222cccb7e4a1") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ff1df7c8-1c23-4902-a307-939ec5c52f5d") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "3ef2f46c-8776-4ce9-a51a-79232f4fd764") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "dbbb4c1e-983b-49e9-a598-1c182fb881c1") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b27b9d0f-f5b2-427b-97c4-10d18c5333a6") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "54d7623b-64fe-4977-87e1-b2b7d6095bc2") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "0d8991cd-7406-464e-a886-d3f62e52d970") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "ca4efc42-fc37-45c8-a8b1-201e9bf975f8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "9371471c-e7c9-4ffa-9ae7-5ce736f518db") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "b00df795-69f4-4c1a-a08c-6d4f7e8c509e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "d32b9e08-79dc-421e-92ef-91c2de5c1e09") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "0eaae155-c317-4eb5-9184-bb09154735e0") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 183 "Net-(LED49-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "fbb47756-c0ec-4847-97c7-73efa9ea85b5") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 182 "Net-(LED48-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "f8fecd37-9ab2-4cdb-bd6f-dd36f5cdcc9e") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "d832dca0-de1b-4702-aea0-ad3e4a82171e") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "c7637f73-2f5c-43a3-9a08-4ac6958767a7") + (at 251.9538 102.3487) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED11" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "d31b1c1f-f139-4775-a2ad-af126cbf9e12") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "f472c20b-eff6-4707-b98c-dcb2f690a4d8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "477c8935-0a48-435a-b173-3d21355fd6e5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "617dadc7-af5b-4bfd-b046-5e39f6e559b8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/1c8283bb-9d9c-492d-873b-7aa96a010252") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "02c89f3e-bc76-48f7-b8da-e49571f66083") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "43b3f3e6-81c3-4b34-b779-7cd3471c0c6d") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ee4b9026-b051-4699-af5c-a00d83290a62") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6c17e0e8-8fb5-443d-8b83-e57a9c69616f") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "22e76ed4-ab39-4461-8d29-c0514b0c322a") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "400f7851-ee0c-4c73-8417-2910b97d36e7") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d8d1e37a-82f7-410e-a340-d78faecbffab") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "169bfd08-5f00-45e9-ad0d-ac893aaab0f7") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5d6cc9ac-a081-4acc-84c9-28a567692a8d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9cdebd20-03a2-4a93-8cb3-fc0042bd1e80") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "a1a165c4-ec9f-4989-8a73-81a27ffc824f") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ea188577-ba9f-4b58-8d7e-0e5caeff5551") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d18b9845-a2d6-4dfb-b40b-1dcbe46e9226") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bf14a076-1948-457f-8c82-fc72ed58e8dd") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8263abce-521d-4d9b-8ff5-54b62ca39686") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c36922ad-4001-423e-8f50-ace27db6170a") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "19c982bb-6957-477c-a084-998a9e660593") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d8c6d783-1aa9-4bd5-a219-0f7088a20637") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e96b558e-bad6-4784-ac2b-dab12319f17a") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ee66a2fb-2802-4aa3-89dd-ef589f448851") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "075f9cdd-af45-4fc1-83cf-fb0991f99953") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "072b4f82-09cd-4bc8-9aad-d21c10dc09c5") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5788cd62-3d74-4ece-969b-4a18569410ec") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "52d09756-2287-4705-8df1-a318b070c4af") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b9bb69ed-d8a7-4398-b51b-09aa78d8a8a1") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "589355bd-6936-4a31-84e5-ac9d9103a81b") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ebe2ce87-f605-47b4-9bbc-1ce46f97b2df") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "08e4897f-2c49-471f-b619-d7eca3501d09") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5d2f602f-804c-4e1b-85f6-5abfd224f7ba") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e6126434-e7a6-4fce-85a6-63a705997c82") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2af3256e-2996-4123-ae6a-fcc15b57c9fb") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9f7479b6-09fd-4363-9622-9575bacbe830") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "92c2ac8b-6a36-40bf-9a85-acced05e74a5") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "59502882-813e-4c6e-81a6-93f6f4bfaaeb") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "31159f1e-73df-46b2-800b-4f968309f19c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "8881ddb5-234a-4ca2-853a-e59b227acac2") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d671008e-d6ea-4433-a73b-a91dbb714610") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "df87fde3-c044-40d2-800a-05f5f1e5aa57") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "1a5249cc-6602-42c9-9055-b4c234bd5fa5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "afa634b2-0abc-4806-81d2-3c8f6201cb4c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "82b2a9b6-7946-4711-831f-9d913ada4840") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "4ac3708c-ffb3-4d28-8cd4-24075ec7de01") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "0e8483a6-7b04-4892-bda7-4a50a0b6c2b7") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "49627686-3cd6-4c68-beac-fd2646b604b9") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 145 "Net-(LED11-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "3739c30d-bd0d-432d-bf9b-e6404a27ab84") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 144 "Net-(LED10-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "8513d843-cc4b-4a83-835b-2e6b0266c05f") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "c3e1fd49-81df-47eb-8747-d29605161c15") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "ca9a9043-842d-4d3f-862f-6c7ff332ca6d") + (at 73.7438 159.5438) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED45" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "b8dabc18-75dc-4d8a-bfa3-dfb4d0e621c3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "a1b9d368-e550-434b-b013-13c61cf95c98") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "edd4f5bf-6d6c-4255-a468-9de7bd0d98e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "bfbfe832-e332-4880-9a53-31e2dfcb82ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/81701e4c-fd70-44fd-bb17-59445b617227") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "c3b5f949-923f-4f65-8ae9-696f9a08c35b") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "6fcfd3e3-3758-436d-827d-1da7faf5500a") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "351f6dfe-a10a-4362-8fb5-01e2cc45379c") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9ae0fdda-989e-458f-b3c2-7b0987dc84be") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "28e32f6c-6e65-4155-87c2-e93c87e987d3") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "17d75cb9-5fe1-4aef-9cc2-7c7937987ef6") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3ee085d5-4981-4e3c-81e9-b9f3a10eb1c1") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "fc455ae3-3a46-4635-911b-7d572dc3b1f4") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d0870775-04a2-4075-89d6-248381b1989f") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5133a625-8366-4759-9860-c1224882bfa1") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f3e7fba9-e753-4173-9db5-f000ebb571c4") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "5d676014-69ac-44f6-aaac-9b6447698b98") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cedc4454-5bbf-4b52-9d68-5a1c6c314399") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "08b0f13a-1960-42d3-9ca9-cf0a2bee3376") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "492a3bda-e42a-4e4b-85da-ad4e8817ddca") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "80cab17f-7c3b-4487-a4b2-a45271faf360") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "17c9dffb-a6f9-4d37-90df-2b27d97d27bf") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "aa33e4fc-96a1-4f86-8bdf-71cccfaf8116") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d4938d0e-9d39-44e6-b19b-f44b9232876a") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "20a10bcd-5736-455c-a77e-2e94be027eb6") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5ea972e0-7f7d-442d-9600-5eb47eefa3db") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7009b9a6-6ba2-4c94-a235-0d4b406517e7") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a2018f89-f766-45fc-9463-6e966b39b028") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5ac1c9f2-7ad0-4bc9-b93a-1db2d0bcc70a") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a8178129-f6b9-43d5-a1a9-064e720b92fc") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "eec0297f-41d0-42e9-9e81-1025f7e8f00e") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e26dff97-1582-4d22-bf76-83ffdec429b2") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b2a53fda-4bfc-4bfd-a12e-2d6ac9d368ad") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6094d548-3658-46a4-9a81-0f0c84e67c5a") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "914c83b4-7a9d-44f2-973f-5c40559626bc") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1e4c6a96-b43a-4098-aa79-74226fbed8d8") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "117a4224-6ce1-4594-b43d-b32a5c7ad542") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c25fe378-fd98-48e6-8e25-4eb6932d099b") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9fb0e19d-5c2c-47b7-96d0-65400fb98080") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e281a3b0-794e-415e-bdc1-a287954dee3c") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "896580bd-3369-45e7-94ed-f3d19ca5c13f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "04a4288c-3b8f-49af-90cf-78100c403cc7") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9bf05bc0-07c8-4af3-9525-6b462a48fb5c") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "1d54d732-f5b6-40e8-9b47-35c69c173f73") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "8a246455-5aa3-44d8-bb0e-414bc457b255") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "4cefd8c8-372a-43aa-8987-6dfdde3c6b53") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "2e71cb90-696c-48ba-ae2a-0e3f724052c4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "cef5b9d1-8f63-463a-b743-3813451d7adc") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "dc84e08a-5006-482d-a6a7-5c5f7ab887ee") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 179 "Net-(LED45-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "470896a3-ceb6-4a9e-bf47-abb9e230e147") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 178 "Net-(LED44-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "ca2125a0-45a5-47e4-99a0-a9fac346d142") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "c4b7fec0-9a50-4cba-8cae-3b12deced0e3") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "cab91e48-32be-4aa5-a581-6301cf6b11d8") + (at 123.4985 159.6985) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED47" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "cba47ca2-2196-45b9-ac92-d12b3f59dbff") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "5a3c85e1-74b1-4998-97b5-21b4796f3851") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3bedb254-0382-40ea-857a-89f4e4ad06de") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "a0f3465f-934c-4375-ae80-a2cf647eed73") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/214fb3dd-9c16-4635-8334-6ed4a2f33340") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "d05cb891-f319-44e6-8b64-bf1537c6fdbb") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b207fee7-d1bc-4865-8925-ac18de06e64b") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "a388a158-27d1-4b30-afbc-e02a374ecd57") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7c69b0be-e0a4-4d6f-9b7b-36f2ac2adb12") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "cd53b62e-9f49-4e85-9d6d-0312dfb2d87f") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a8990851-5b90-4577-9a25-4b073c38d66a") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "3c83e250-9db4-4616-9431-3f3926024c22") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4c4b7c96-7914-4392-90bc-c4fc6a1e312c") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e069bef2-05bb-4616-8153-2d06d4d02abc") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "cfdc34d5-dad1-4fe6-bb49-a2db829034d5") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0cd986e1-d3a1-4cb8-ba26-20523d99adf7") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "87ccd4bf-36d8-4fe5-ba36-34c19be38fc9") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "381468a5-2638-47a2-9f56-1cef8559fde0") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3426eab8-6ebd-4d2c-8ed4-647cf26df2f4") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e42b3cca-2d0c-40aa-bf49-0985c9e4b713") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2b8e18b7-7fc7-4eda-a0e1-11554beb9541") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d7ab576f-8fa7-4813-a27f-183411538d65") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9bf6067f-d035-4b3d-8db1-a363c64464fa") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "62576554-4d8e-4e7d-9af9-5d6c81c17b9f") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b1607cc3-4035-444c-93cf-d3a9769326d4") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d64fd955-eab6-4e3f-a9b3-f44250424501") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f8c655c6-f55c-444c-aa44-79f93e9c8642") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7dd7ac4a-7a67-4d53-b814-e827cc9f51e9") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "be74694a-5ee0-4659-8df0-1dc4b9149051") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d496ffc2-efff-47e8-9f5d-308109e3e3d6") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "156428c0-0d6f-441c-b77c-f56642c14d94") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "62d57c21-3c1c-47c1-81c5-a0b64065dc25") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "32eecbe5-bede-4bb6-9045-950c8efa7da2") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "468c6717-b1cf-4be9-9caf-a39bc57a4e2e") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7b6c2d6a-5f85-4612-90d0-b1f385ba7632") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "efb4ad0a-fe00-433d-9206-e1857bc16cdf") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f8f76d12-07ae-4dab-9145-0a91a2f39dbf") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1867b57d-8b21-443e-93c0-c54615165e0e") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a381d075-4a7b-40b1-a7a2-02d412775232") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cf5616f7-820a-4346-ae36-8dc056d222be") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c9466725-b4f1-4afe-a8f3-c6a61f40ccf2") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b0b073cb-b2fc-48ad-9cf0-7ca885eaf2cd") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0c9c203e-be4e-4bb3-ad80-7b27c49f74ba") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "2cadbe5e-5a95-42df-ae93-4bf693821bfc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "50e0f7d8-0a4f-44b6-ac83-b6ea33832ec6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "29599732-c4ad-461c-84be-ea8c133bdc68") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "17977d8e-eec6-424e-b573-4b19bc54acbb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "bc7e2d42-e501-4f41-aeb2-2d4a3b576cb3") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "aea1c9a7-bece-43dc-ae15-ce3a2ba46ceb") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 181 "Net-(LED47-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "138bed05-373f-4860-a16a-42587ad3f36d") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 180 "Net-(LED46-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "3d0b6d6b-a277-4b7d-a742-3b8c314c2486") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "3bd661ae-87f0-4965-b288-41df08b1a6a3") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "cad918ca-07d6-4dbc-a5b5-56ed0df4e92f") + (at 347.244 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED30" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "f9602866-f260-4e17-8334-31509a2fd257") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "ae1a2a25-669a-4877-8a5b-db84509a91d2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "89d5cf21-7445-4129-b9ee-d89d60b564a6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "7c696ffa-8f2c-4ac3-8293-c99aca48b03d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/7ddbc399-a765-4f10-b0b3-da4d1a32c9d8") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "7fb89dec-a3d3-4a0c-a844-511f6a9579fd") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3a16ff88-057b-44a4-80a2-fa01c59c97b2") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ac389e6c-a62d-441e-90a8-0aec9aff0800") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "5bead404-3a87-47b4-91bc-bb8b77e41754") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e324b83a-2f20-453c-9927-27dca468049a") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ca57f7cd-0953-4d62-b4dd-1e61495fdf41") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7e1e510e-7dd0-4e98-96b8-df3558c09490") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "5a933f4c-eb15-4349-add1-77cb52780f71") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "722cbca1-6dda-4813-a063-d747c1c1ccb8") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c20df77b-65ab-4473-9a96-33f0949657be") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4a9ff029-1ad2-4e5f-bb21-b2fa84431376") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "498ea280-76c2-4651-8913-41145e34746c") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "95ce673b-e38e-4491-8489-7938daa8a95e") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b7cf0cc6-18c7-49e6-819f-33f5e11d6fc4") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "10ab0a06-d188-416c-b5c7-0d31bf73af76") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8bca634a-6af6-4ada-97bc-c56379e4e0af") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8ded4684-0112-4e76-b3b0-28ac6c2d0a3d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "912a1e74-61e6-4685-823f-0e76bb081e41") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6387151d-7977-4dc2-9fa2-557263e8118d") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4ce43681-23d8-4d1b-8541-0ee7b85a5b58") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ece9bbd8-fa96-4f22-bab7-5246c2615284") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ba8da1df-3ad5-485e-b826-cfb87f90654b") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7eb90013-f069-4d2c-b1b7-abbc07640a1f") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8e476c65-0ffe-40c6-ac3e-305eb6341bf7") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9f0c16ab-776d-4738-9177-1e5421c36378") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4979b574-5bec-4cca-8769-a39686da2476") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ed7a1fb5-15eb-482d-9236-03c9bad99c59") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b2f07b9b-3296-4d5e-bcfe-94bfa7400bae") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1359e8af-dc18-49ab-b7be-a7ef17f07b2f") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b41c6388-8d23-4207-bdef-9e0d23180f33") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d083cf02-16b3-4448-a895-168c68802ca7") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "57ae6af5-562b-48e8-b65d-cb9582761dc0") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "66fdd790-d6d9-4a79-adc7-0b286cdf8509") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "527ec33b-0a98-4524-bf4f-64b42a5a93ae") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f26fbd61-d9a9-4de2-9847-63756006fbf3") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "4758df5a-4b56-4376-b6e7-83831889e010") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "63eece33-0713-49aa-bd08-e25f923444b9") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1389c111-6ff6-4c27-bbfb-2952311db584") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "699a1bdb-b989-4784-bcb0-56d3ff1c4477") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "be17e38b-a66a-47a5-a25d-c25442eeee93") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "92b3597b-820f-42bd-81c6-b73639135a9c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "ab98972a-e0fd-4cbe-8ea7-3359afa3ecc9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "61b78218-1546-457c-bfa0-fa2741dfd713") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "fcfa2bf5-796a-4735-8bab-a4a4ad40bd59") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 164 "Net-(LED30-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "34af4802-7d65-4cd6-abbe-2aa114d7ce62") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 163 "Net-(LED29-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "006d7e63-bfab-4629-b244-14e75e4fe56f") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "439aa65a-3dd3-4d65-8dce-3241f231d47a") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "cb0ab57f-fedb-4bf5-be24-3eee9693c3fe") + (at 99.5938 102.3937) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED3" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "a65ad225-5d82-4c04-81b8-102765c3f144") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "53530dc1-6f4f-4771-b436-9bd2ea7127b5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3cd4bea2-548f-468b-93a4-dbbb25c6e385") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "11b4affe-69c0-4f18-b919-f2238d545ab6") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/d5cb79b7-1add-4c53-bde6-bda769843ef3") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "4366bbdf-93d1-4eeb-8e3c-3b199e001486") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3d2f15c3-17cc-43b5-bf80-811dda9e5c80") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "02f8ab19-d30b-4731-a297-554cca8342a4") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "658cdbbe-e40c-4a7c-8a28-d869464b8f41") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "4ec2c48e-bdb5-4756-accb-68a5d9a9087c") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "22a606a8-f98a-44e8-9b57-91fdeb56dad6") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a211a7fc-4e09-42a2-b496-05677d01022b") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "4cb0954c-75cc-467b-9a37-c455bfe23e98") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ef1e24ce-4abe-48a4-ad57-c85533021f13") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b6982ab5-5689-4092-9a7d-8ef0610b10e2") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1256aede-2e47-40cd-bba2-668e21df6434") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "9b250e35-1d46-4358-bd1c-c5705ac3f608") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "6b8b8198-9a49-4f2f-b874-42d8b2a08328") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3ad40509-194d-4325-b9fc-cd804da20d72") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0e1850f6-7020-40f5-9631-b1efcedfb562") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7c8ce21d-3d61-45f2-9525-cdd10057739c") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "37f4b70d-b36c-4af4-9cc3-992ecbfb6451") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ec51a15d-3fd3-4c2b-ae37-e38b4a99a00c") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9ee05e7a-a22f-4e9a-a5d6-e1771cc8ebcd") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b541e05a-f476-42d7-82ef-72570aa4515a") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5ec30b7f-2d60-4ac0-bf82-4efac10dad8d") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "282e6d61-752a-4f96-a314-47d135b65f30") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4bbc3310-55d9-4116-915c-c3c3b747647c") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ced4daa8-bd4a-43d9-ab4b-2ad486918a80") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "14551244-0d84-49ff-9b58-c2c914d74d65") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0c3f4c0e-a16e-46e9-ab7c-173e13b1068f") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a5b7a37a-32c4-41de-bd35-280a13463c30") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bb6619a3-dfe7-4659-b8b1-a1e42391e76f") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0793ce50-5504-4e3a-b353-d40289fd6fc5") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1f6c6d6e-fb36-4a76-8cce-49bc54e4d5bc") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "805a8f40-f890-4f5c-953b-d3c2e2ce5e78") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "77998133-38e1-44f2-9f77-bc01f7d8a89c") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0396fc62-8c3b-462b-b9a1-ebee46e5b587") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0fb1814f-9f21-4883-a177-558b25622962") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "c13c8054-177c-4177-9463-748dabf99fc3") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "03d91046-72d4-4809-83bc-6d3b85a89fad") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "790d7646-033e-409b-84fc-627d056e6a82") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d47a6241-d463-4ff0-8830-0a582170faa9") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "6acb9d43-85f2-459f-aafd-7fae1e9eaa17") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "c0169168-71bc-438c-9735-2835b8849734") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "36799a94-279e-4f5d-b1e3-a45eb71356f5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "d92c5af5-9810-4f6e-952e-d1f778b6ea13") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "acced2d0-ff1c-4b85-93c2-b73d25f4dfc0") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "56a221c4-f259-433f-bf32-2f25d7d94800") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 137 "Net-(LED3-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "bde5ff79-bea9-4124-9e22-a06e09925a3b") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 136 "Net-(LED2-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "b2b4777e-d35e-4561-a593-e0e822c51b82") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "287b7e9a-76b6-461f-ae0b-4ed4d4f54174") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "cb75fc20-8c80-420e-adc0-6d059d2f7152") + (at 285.3575 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_'1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "e1bcc976-4e5f-4f13-9365-a4c08bbe6695") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "30d89d92-0d45-41bc-bc6a-aed23d1a1f55") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "abe1cccb-e03f-4162-844d-46f37600d405") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "1c615507-6a90-4db8-bb63-69f4e74c349c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/4d3d51a0-9b43-4fb6-b8b4-a7e468fb32ed") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5da360b6-2bed-4239-a416-f47f20ec0709") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e22c48c6-3320-42fb-90c1-0c1cd9e607ae") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "59a5c0bc-b601-4ede-864d-7fd1aae97930") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f4b92912-bd94-459f-a428-ed5972eb95d8") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4c6554d0-f661-4263-90b2-1eaa5dbfdd39") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "aceb8c68-2366-4f2b-b8d0-78efe15f0f77") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e9b719d3-aae6-4d54-b1e2-6c145837cabc") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e0c1f43c-becb-41b9-89cc-7c71ff36a4a7") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7100cf03-c92f-4886-abbb-0cd4755f0631") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f48e0fa2-dd63-480a-8fdc-00afb5534b84") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "b2c8d961-d0fb-4770-8a99-3e80a02ae90c") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c55fe237-6adb-46cc-b7d5-b76581e0c107") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c0107ece-9429-449e-aba3-a66ec8871ab9") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "330e703d-3277-4cfd-be31-8324bc1e3e72") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0b3c9d44-773f-425d-930b-34324e58b391") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "694eaea7-c226-4cd7-aeaa-f64e933aabd9") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1bfd5e95-e686-4c20-8c95-3689320e1b92") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5aa33bc0-d539-4acd-a125-c877710b680f") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fb12a320-c469-4a0a-8784-0f0b52a0dc96") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "40e159b6-e758-4172-8d97-268dd6a61f4f") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c3fbee55-485c-402c-9196-6d69313542b0") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2fe79cd0-c67b-438b-acff-4b0af1957e94") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d0fe8419-ab32-4955-9a92-6fba7306dfec") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6a3f092a-750c-44f2-8c6a-9e6b9bc1af51") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "89485577-4268-4712-9419-80290f6d5474") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "78a70195-0387-4ae1-817d-8ad5339ccd1a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7f241171-4746-4e27-9c07-2abfbaf27f50") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8bb97d8e-161b-4ad4-bd6e-dabf792f3536") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cc99003d-66dc-4cf0-9874-1c484d437ad0") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46204442-abcd-4cf9-850e-17b1cb5e77f2") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d2e01562-ce67-4922-ab58-533112c6e132") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eb8c2f50-75f4-4a78-9920-6aac406df485") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4ea51a17-a8a2-4690-8c47-7474dac91028") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d43bd2b8-6e2a-4061-921d-2cccf42e5482") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "36d54609-68b5-4545-9219-53f74c3fd140") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7b4b16a4-f68d-4432-95f9-ddaff05f9dcf") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6988a48e-3a07-441b-9311-456662e66033") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0d36cae4-9e48-4b64-a4c2-82923ccfb2c5") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "de817e7a-74d5-476d-a7ba-7345720ca4e0") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e71d2108-8ab5-40eb-9fda-037b814429cb") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4bbd41c1-169a-413c-9d49-32fa6e19b944") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d2d06a41-d12a-49d4-ba2c-f65dcca50615") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "6215a2ee-5f48-44e9-ac2d-b5122a5b4092") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f440acd5-3933-43f9-9c37-f612875dccf3") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "717d168c-9716-4930-9b93-fbd1241a0d52") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9592bdaf-68dc-4950-bb63-df44c63c68ad") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "43ceadf2-b5c9-4256-a657-786493f2253a") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "850d2124-d5ba-4b2d-934b-0694cc3f05f8") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 125 "/COL12") + (pinfunction "1") + (pintype "passive") + (uuid "0d90e2f1-6897-4b85-8b59-5a6f8183b68a") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 68 "Net-(D46-A)") + (pinfunction "2") + (pintype "passive") + (uuid "2fd23fbc-fa9d-428e-8210-924e21968f44") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 68 "Net-(D46-A)") + (pinfunction "2") + (pintype "passive") + (uuid "e0007fcf-a7ad-474a-b418-da15cd3ac795") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 68 "Net-(D46-A)") + (pinfunction "2") + (pintype "passive") + (uuid "267de1f6-bf1e-423f-9ed5-ef60d3c75d90") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "ce7b7a75-8dd0-4229-9949-2819d3b30d67") + (at 252.02 173.8312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_ALT2" + (at -5.35 1.5812 0) + (layer "B.SilkS") + (uuid "734dce4d-a7c9-4cb7-8020-9b62f55649b5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "d239384d-570c-4375-9714-9b74c6acc0d5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "61adf48e-e24d-474b-8e16-2fee4b651d50") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "03d6d8d2-2eaf-41fe-9db1-c4b4d6e2867f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/09d4b3fe-3b61-4b67-9444-73d0f0442f56") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f8b851b0-450d-4951-8100-2c37d37a1517") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7da7ae08-ba55-4cd8-aac1-729e2bd3f095") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "aaa06ff8-77eb-4ab3-89ab-a2c05566dce7") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "45903bdf-0ce6-47c8-975f-6b25f1cb702a") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ca071e00-5add-4ca6-995a-684558e09fe7") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "519207c7-eb6c-4c54-a470-dd7643108a05") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "ee12bf1b-f35d-4d81-b7bb-c88be7099380") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "48af8f91-b5f2-4d78-9577-fc0f6fd5f30b") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "485db5c5-4c54-4a8c-a810-f96a27f17cee") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4391a76c-137f-4731-971d-048c735ae7b6") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "749b2f01-0d16-4881-955c-9cc0c545ea6b") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d2bf8709-ad20-4e5c-b291-bbc0da345835") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "723b3555-4daa-420d-9628-210b57287f6b") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f7c00e94-7f9f-48ff-a9d3-7722286960eb") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "13050dc3-efb8-4407-965e-be9377c0da8d") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e2457cdd-193e-46f0-a881-4b45545f4d9e") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "70c034ac-e09d-450b-9190-479375a4592c") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "da3dbdd8-4f97-4b1f-ba68-c84ce2a20116") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "02b5616f-521c-417f-8ffa-6ec671fd68a6") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a32e1156-e379-4498-b988-145a5ed3acf3") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eec15dc6-4487-48f3-9685-0b345cac91d7") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "68b76992-7366-4384-b7c8-a216d1570f7e") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "55b967dc-e8e5-469d-8907-934e0032c614") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1bcffb86-f7ea-460f-bb10-4ca29c717def") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "80061c87-a5ca-4591-aca3-06b5d84cdb88") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b692b83e-4ba2-42b7-bb62-193deba0f134") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "99c42908-0594-454d-9bff-a1c463caac81") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b225acce-1dc2-4d4b-9a21-c226a846f04a") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1e83df01-ea86-4ae8-bf0d-93712054ee2a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "94c01235-65c1-4b90-8f3e-b1b279c6f2a0") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "433cab38-b921-4ef9-9244-7e1f9bca03cf") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7b948747-70f7-4896-a720-6a0af59da9ed") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "461fc5ab-1c90-4bbe-bf4c-48939252caa3") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6370a977-f01f-4278-bde5-3c3ee0c3666c") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "17077596-9b59-4f4a-893b-7a6f18206252") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e4d6bab2-c2b9-472c-a407-3fc10b8614d4") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2f3d788d-5c8b-406c-b571-5ae4fb77c128") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "88359178-dfdf-4dce-8c69-e719845f38e3") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "1902c07f-504d-453d-bfc7-fb82fe74df85") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0c0e4589-23b1-4deb-9378-2124dcfea251") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "53db07ed-d1ad-4455-af43-645494ae3b92") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f8c8b859-0e64-4bbc-84d2-35fc24c9e7ce") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "3e175d5f-1b2f-4a8c-bb6f-b048efd3e0f5") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "37400f85-e506-4de2-90e9-5a73b64e2471") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "0e4a0dda-9a99-4455-a721-78878e21d39b") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "9a7c36e7-177f-478d-8c73-f129c2ae13e9") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "7fcf7887-f9de-4814-8ba9-7692b598e285") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "f8d56728-03ae-46d7-9c90-07f532390ea6") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "64d72525-dcf6-45c0-b902-f9c6aa512e4e") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 112 "Net-(D71-A)") + (pinfunction "2") + (pintype "passive") + (uuid "17c01de2-a144-46b4-a409-5dc74559587b") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 112 "Net-(D71-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9b0ed941-d50b-4bb4-9f69-548df7b62d58") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 112 "Net-(D71-A)") + (pinfunction "2") + (pintype "passive") + (uuid "39258972-1c3b-4348-9420-3994275a2ed6") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "ceec849f-e6a6-43e5-b182-3fb1dd686cc6") + (at 209.1575 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_J1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "40357391-52bb-4624-b275-c5c4b33a51b1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "fae24f34-081d-447a-b6ec-f8748939f3db") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "1706ac6f-b15a-4820-8575-360170bb5716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "6ca8fb07-6f07-41da-a330-b8c17c1709b2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/0597a794-f525-4b57-abfb-465b30ce6bc3") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7a4cc8c7-652a-46cc-9c07-678aa606c595") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "923cb6a5-e76e-4880-a98b-f77af1004cd9") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8a917fe1-328b-4d8d-b0c7-05afd320775c") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a1f5649f-b8e2-4d33-a6a3-65c355718e93") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "77066441-d34e-4ff7-b79f-3b0394c32672") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5fbf1c63-7cba-4a6c-8da5-8608b585faf5") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "cb7831a6-fa87-4089-b6c5-92dc023cf5e0") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f8fabfb6-5939-4425-b473-9d3c8b85452d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3817c3de-a539-4cae-9a31-ae88ade0a32f") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "e8067c16-2f3d-4292-9650-2f95f7b29825") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "0d5844d5-a1c2-4caf-8126-80d1d0ba4d75") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "eae355ee-51a6-4a16-bf65-be27fd3fd770") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ff6c0815-571e-4e68-a886-e4d840c09ea0") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4e0a6096-042d-4d83-9e4a-3e0fccfb4027") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "06c3713e-5984-4bde-9de8-560551af0f4e") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fda57252-b15b-49e3-b4cf-6b62c960fd8a") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "07e90bdf-813c-40ff-b705-79bedcb50390") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f849785c-5de3-4294-ae9e-fbfdd2e6c29e") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "daf33a74-2205-45e9-bee8-45754318a863") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4c5bd79e-e967-4f29-af8e-f2cc922dbf82") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "45aaf9b7-0156-4c00-a9de-60f031ccff36") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8fb2f327-ab74-4c58-94b6-c5569a44f318") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9f4650e0-e3d7-4cf1-99da-c9ca962e9362") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "76b5356c-4957-4d6b-9833-0a041e76c349") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9ac187f4-23c5-4860-b417-6a928b107736") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1279fb9c-a1bd-408e-9264-a95869f316f0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e4a22d15-baf3-48d4-a05b-ffd9e9d05718") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f48da94f-d6e5-487a-a274-44a27ae04015") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2d44e7a1-b5c4-4eb7-8036-a8a0ab474764") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4a53b88f-0de1-4120-ae33-0dfffc19e56e") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cd463ea2-0150-48f2-8768-6ed97dffe369") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "05e7cbc8-57b7-4837-939d-a31a6bc3cd70") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b7085ef1-cfe4-4fe7-80ad-59207683a8b4") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e6fd6c1b-0f3c-4c02-b45c-c7387933faed") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "54d84fbd-7ccb-4b03-8713-7671614034ac") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "834536c0-dac8-4ae5-9331-e630e4f49108") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ecc32317-5dc0-4a42-a13d-a530644ddd22") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d8b53fac-f890-4bf9-9b2b-8120c5544378") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "77c76642-21c4-42fc-9f57-48f165a1e813") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b2721505-9df3-4b8f-b720-c217801e6e2c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2b00a7c7-98db-4be9-9a1c-a8bdd8238425") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "53dd2e82-b134-4ea1-a9e0-da791cab1696") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "442be112-7682-435e-b4fc-6099e3e0f6f0") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "37a0c94f-660b-41d6-aff3-fda99cae1bd0") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "54461857-7897-4f8e-a5bb-0ca40d523451") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4d7e0a72-7add-475c-9cc5-32ff759f9124") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "e0f518d2-a23b-49b2-8291-544056e9bc33") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "317c3c5a-67dc-4904-bfa9-a5d085c2cfd8") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 131 "/COL8") + (pinfunction "1") + (pintype "passive") + (uuid "a3217915-ddeb-4cc5-88df-07f4fce97daa") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 64 "Net-(D42-A)") + (pinfunction "2") + (pintype "passive") + (uuid "fe6a2422-c78c-49ff-9963-a91cd4525910") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 64 "Net-(D42-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9f07f1f0-67c1-4b7e-9144-29ee98f16771") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 64 "Net-(D42-A)") + (pinfunction "2") + (pintype "passive") + (uuid "be47f51b-94c0-4ccc-9449-9add13b1066c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "d13ea200-9376-4129-b5a6-78e07413c2b8") + (at 232.9175 97.6312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_9" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "adec40b2-ffc7-4d0d-8a23-74ba6633caf0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "a8259964-e1ba-441d-908a-8494447e0b1a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "fcd33e94-ae3c-4460-b31f-9e336981418a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "c0bc430b-ea97-414b-8a3a-8f5823739741") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/aaf3cc16-abb8-464c-b8f5-0221b4aebdfd") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7726a965-8f06-4e58-84a9-efeac808160d") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "518fe6e6-d923-44be-a7b4-cc233d43d878") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8ae8ee54-3ca8-441f-88a2-e73bd21c34f0") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f5368fab-3f97-438c-9a6f-673d110e3dac") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8cd9c03f-315d-40d9-918a-a27a9183f6ac") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d2905d2b-98f5-48dd-ba39-b4e7b7a239c2") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "225943dd-05ef-4438-b4ef-eaa4d16e8113") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0912f940-8ac1-4f36-b150-a8a940e26b3d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f688dc30-fc61-44d6-9b18-0f38b2679b97") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "318760a3-4572-4997-9f0c-98519d954df6") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "ea88dbdd-7a2f-4ad0-95fd-696e3a9d1075") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "53bcbf2b-7e7a-42b9-91ba-38e328e1fa9a") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "236f87fc-09cd-4fc5-95a4-18c11a90b889") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8f87b164-0fec-4261-b62b-b631cc3d4e2c") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bc4828b1-43f1-4c53-b31f-61fdca58ec8e") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bff986be-1945-485a-a442-e4a78fb3f595") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "03128f2c-c186-4465-904f-edd300d4d7b6") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a2e08738-79b5-4c89-af97-2949bfe5bbe4") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8ebf02be-bcfb-4385-a70f-d3ae89e51279") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4710afac-f161-426e-9529-bc54f8af8602") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ed37ac4d-cfdc-43bd-b46a-82a476eefde1") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0926e6cb-1569-4972-b945-9d44dae6bdc5") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8b33111c-63c1-4b93-8c80-680e32cf5cb4") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "626d8b42-d316-493c-853f-cb57ab79bfc2") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c9fc7b15-1ae6-4748-93c0-84b68a7a4a1c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cb1bd020-77f4-4c00-8f62-a16798638ad1") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "05380b6a-59f0-4cbe-8a61-f75bf0b77b1d") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "67bcb316-780f-46e3-971d-387217236c9f") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b7be1f52-d312-4eb2-bbfa-c36605174f2a") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "65eb1390-87df-4c4a-9edf-ac1f8492dcf0") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "dcb4ef5c-36fd-4fab-b0aa-89beccf2746a") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "324a3cdb-2680-4a50-8b0b-ac142d810cce") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7be3c09a-0deb-4450-ba0a-478a0128a72c") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "59634dd7-87fe-4144-b010-f70ba717248c") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "73bb8be6-dd43-4cdb-a572-4a219cc07ac7") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "38d1c66a-b3f8-4927-a918-da158f8477b9") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "36f4d09c-3d8c-490f-b7e3-68292b442ebf") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "09ee9f3d-1ad5-4ae9-b3bc-089538fef503") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ed101457-a7fe-4028-93a3-62473348df31") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "16e1fc3e-3b35-4d6b-b7fc-c0b76d404921") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f1aeca86-536e-45ae-b589-2f7c189db669") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c60b1589-a5dd-40f4-b495-123f7d345f93") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "3d1cba95-4789-456a-88d3-11a9839c84c5") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "61989060-6fd5-408c-b0de-98176dba9310") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "9dded970-cf73-4353-a037-9e06c8f2ed0a") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "d96ddf41-34ed-4369-b264-70283d23f2a6") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "31cada3b-2899-41d8-bb7b-5e79f596e419") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "1fdd4cf1-c3ef-4a43-938d-2e864f6e0813") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "3649a695-7dfa-4b03-99cb-ee2f21037b2b") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 13 "Net-(D12-A)") + (pinfunction "2") + (pintype "passive") + (uuid "62068983-cdfd-45cf-bbad-3ab62ed8c7fb") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 13 "Net-(D12-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6c605d9f-33b9-41a9-a530-4f0867b00795") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 13 "Net-(D12-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6700d2d1-c65b-4f95-98ab-9b6cf1a18e90") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1.5u" + (layer "B.Cu") + (uuid "d22ea1e8-d618-488c-a9b5-3f350c79bc22") + (at 323.4575 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_\\1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "48812abc-2988-436a-b4d4-0fd9c7aabd85") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "fb355dbe-c614-4f99-b5f5-136186147bc2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "716f6447-7500-4047-b78e-1a5b20189ab4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "29f7278d-8f5e-435d-909d-7cfe08a8fe26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/14fbde30-fcf0-45c1-8bbe-09997c5d9c7b") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "818090d3-61a3-47f1-bd72-9b1e38c90440") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6c1dac53-b200-47ce-a886-5df300c6ebf4") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6c1b976f-808d-4778-9522-eb3b1e71d5d3") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dcecaf84-b9a6-4733-bc51-c6a1dcb87422") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "899e61e7-65ae-48b1-860e-adf8b71743bf") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "96024d07-466e-482e-bfd7-3d8d350cf74b") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0f216bde-895f-48f6-9145-a904d8b92b5d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d6117914-2682-4ee9-8413-898bf9976e5e") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "55bec442-a4da-4a7b-a497-62602b331110") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "005a8981-ee8b-4a78-8710-a4491f9be7fe") + ) + (fp_rect + (start -14.2875 9.525) + (end 14.2875 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "2db6f214-5627-43bf-a279-378b77c551b9") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c516aed0-ee1d-43f0-b463-b33d56852a07") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0b2d11d7-ac58-4fc1-826b-e3aec44972f4") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9f35164b-0a3f-4c9f-a3bd-6272954f50da") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9c7a007d-c7de-4494-93bb-0321647f2074") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "c2ec5cc2-1865-444a-9458-f36240ae86d9") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4c21f2c4-2fd4-43ea-aa1f-107b74d635aa") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "86d1a6af-229b-467e-ab93-2efa0d9b30c2") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4d469fb9-e52e-4146-868d-75def915bdce") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "92ed24b3-adde-43c9-86c4-64f7f002215a") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "93b637ec-413d-431e-a8ea-16250afe62e4") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6642285a-6ac0-4b7f-b2e6-ea6c7cd1250d") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3171c00c-0250-4785-901e-c9a81d9c9186") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "904178d8-ea81-417e-ab08-220002e595ed") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5649a55e-b343-40a4-85de-27a8f0a8680c") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b2dcd34e-148a-46a4-9d99-6e9e0b860fa9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "227f7386-2411-4039-a5a7-bd6f70316c7b") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "256c42d7-bcb9-4297-8830-fc373beaa836") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c8d1f85f-7cd6-4875-bb31-03753b5c1a2d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5dcfc34c-936f-4af9-9b61-fca6f526c5b4") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "343fad90-4ab7-47cc-b86f-f029472984b2") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8f2427e1-1a99-434d-b15a-4933f7166185") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4af75b3-f07c-455d-85d2-146fa2f3a06f") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "44e7fd06-a8d9-4242-b022-b4ac36601388") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "3cb3dab9-2ff7-429b-8031-094911b84026") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d97ba18a-5087-450f-b3f4-1762ed9c95ca") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7df8bfc4-f617-47a0-8b05-8b3fbb81d9bd") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9e2c0563-b52f-4367-a81f-33fbd036ad3e") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "53fc92d9-24b9-4e8a-8144-f1fd26e8fd8b") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "681c5b72-0e16-48b4-9514-10dfddd2fa9d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ca9f7c46-515a-4e8c-bbae-e0d2bbbadbca") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "bc09566b-bd4c-48a2-88d9-23b7fe85e3ee") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "c51989ca-0dab-4ea8-8eca-2215ad119f32") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ef6997de-b59c-4254-97dc-d7cdc4cbf7e4") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "d2d9fc13-aeae-4b4d-8728-f9e4e83c0cc9") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "146ee49f-f674-4c8d-92fc-d711fd332c6e") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "446f544b-b7db-432b-a277-d9941e227e2a") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "ae447fd0-b0c2-4af2-86be-a65e4f379ba5") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "c712470c-f795-46f8-a73b-2217d236c853") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 35 "Net-(D34-A)") + (pinfunction "2") + (pintype "passive") + (uuid "784b26e5-bac5-42d5-81ad-e09377325afd") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 35 "Net-(D34-A)") + (pinfunction "2") + (pintype "passive") + (uuid "10152fa1-ea82-4c5c-aa19-1132b7a99d12") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 35 "Net-(D34-A)") + (pinfunction "2") + (pintype "passive") + (uuid "6c0e9f58-180d-4cb1-a650-69605fb5ddfc") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "d6f1209c-b574-4432-ab42-639930c4ac89") + (at 299.645 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_]1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "03a37709-5951-469e-9aa7-173f74d7ac30") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "0ad2d149-1671-4542-88b4-3609e5632598") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "9974176c-f1fe-44ee-b210-aab2a44de956") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "4918ceba-041b-465b-ab37-bf81f75e029e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3f62ea02-8087-4482-8a14-2c5cf7286453") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "06a54073-2f18-4a97-a9f1-16caeb4bc08d") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "7f8cefc6-afef-4b61-8129-fef721171351") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "5420b000-6364-497b-bb9c-f7575524239e") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9e19e976-eacd-4f2f-903b-123fc8088d7b") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "1aa526b5-edeb-4d6b-87f9-fd8b55353b02") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c32a8706-b1d6-4ec8-9add-15c3efec389f") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b3c8665b-9671-4e29-a00e-f97b2852182f") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2f80f7b4-3af2-4bd3-9537-3a7232f72004") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0f50b9f2-9919-47e3-815e-2a8fc1d98bf7") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "6a4c92aa-d6a2-48af-bd01-3db268ce253c") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "1b9dd1ac-4b00-463a-86a0-24e5f2f66490") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f357904d-b2fc-4602-868f-f6eb59fbdf3b") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0aec137b-2b66-416a-8b4e-346ea0897407") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6a111760-d465-4ba5-a121-89ec2d7b09e6") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d8eebfa1-1108-408f-b156-eda728743252") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6d5a46e7-7a41-47af-b6fd-2ff47081f93b") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a00e5540-5208-45f9-b965-47140e28a77f") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "a636d4d1-92e6-49dd-9c68-e7ae07880c58") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "842adc87-1bd6-44e6-8078-9884e228fcd2") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46a3d652-2408-4a6d-93f7-75b17027476a") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6edfacae-8473-407a-be78-cdd8ce2bcd1b") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f7fbad61-47c1-40e3-b04e-d8c7ee8a7c88") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91bc5f9f-cef7-483c-99f2-5dcf03c04da0") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "905cc187-e443-466f-b0ac-4046781281c1") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b4afd632-e8c2-490a-a65d-1907ebf2da28") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "a45b3783-0538-462a-9511-f68cb7df5c1a") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "bbecaf9f-aa8e-4473-ba57-7102be334de7") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6c97a8dc-05af-4c4b-a724-a6fea7289219") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7812223c-abd7-4c59-be62-d832ed103d04") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "23db6938-f62d-4371-ac4a-40516d5ce075") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "64ccd04e-9a26-442f-88fc-d16ee257c64f") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ce3d2a34-16b8-4e14-bdc9-6de3d05b3c6d") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f2292830-50a8-43b5-9777-3e04213bce69") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3036877d-be5e-47df-94bd-2e30ebac4c5a") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "07b547f8-47a1-41a4-9274-f0bc7e2768a2") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0f7a41a2-9f4d-4d86-a67a-9d115d63861a") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4d1dc5a9-9345-4519-8c3a-6201c0871798") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9356fdf1-69ad-417c-bbea-0a37865a64a0") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2e39732b-e18e-4628-9b95-08ddac8ed105") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d72eef14-f641-468f-9ade-f9c23a48fdb3") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "02f724e1-8731-48e4-bd66-195fe2ed551c") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "14694ba4-70de-494c-95b8-c8680f9f4a22") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "d799e1a9-b75e-44f9-a03a-9e8ebeb1cac1") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f2858d7e-c590-4f42-b1e2-0c6cdfd1d77d") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "5ff35834-62fd-453b-9fa7-4b7141f34f6c") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "1b28cd89-9917-4e7d-bf86-b5542f655ca7") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "69745a89-0acb-4937-831c-a4280c803279") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "d1a99e96-a2d8-4fe3-8639-190987a78193") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "4be88ff6-bbe3-463a-b042-05a8135b2f63") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 29 "Net-(D33-A)") + (pinfunction "2") + (pintype "passive") + (uuid "4e3acb5e-c3fd-4a9b-908a-6071d9237b01") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 29 "Net-(D33-A)") + (pinfunction "2") + (pintype "passive") + (uuid "8af5ebb3-7e27-4d7b-b4ba-d0656b1a0953") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 29 "Net-(D33-A)") + (pinfunction "2") + (pintype "passive") + (uuid "fc279d04-7a3a-4060-82ea-b08b20871aa4") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "d8b11ef3-0012-4873-8701-575f6ea139b0") + (at 328.22 173.8312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_DARROW2" + (at -6.91 1.7012 0) + (layer "B.SilkS") + (uuid "6e0e3e26-dc27-45c0-baa1-13d13d3d86e2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "639534ce-e6f4-424b-b4a9-a9fb5ba3b9d0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "8ac117f9-f857-4c82-b151-75afda567ebc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "4d3e24f1-e5f7-40f6-9789-33fb31d21218") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3f62ea02-8087-4482-8a14-2c5cf7286455") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "8f02f4a4-adfd-45b3-aec4-4938decdbab8") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f50e4cb0-d7cb-4651-889a-15e95d85fbab") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a5a8dcc0-e2d7-44dd-8f93-8619f85a9baf") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "80810f3d-85f8-4332-ad26-2b1ca28e6ca3") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f3939fc0-bf5a-4ce3-8475-5478527f6a74") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a190bb39-5b83-47fb-8df7-b7d1d54d0b72") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3216ea5c-08a8-49a1-9d93-f25437e34913") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b45bfee6-c2a0-47c0-b7f2-be729bf0723d") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c17ffd8c-fc48-4365-a7a9-564d0176c16a") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c2b2320f-d70e-46ff-b506-fca6a5f9f677") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "fb31d451-fd50-4af4-9ea5-70dc28f1d1f3") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "bf63beda-8387-4192-ae57-ed20c3264975") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "19ca1cac-862e-49fc-8f12-b1e60b52cfb5") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6bf91a71-4535-49f6-a930-19339e07044d") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5e2c701a-d5d2-4d49-8039-a297410d1bab") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5277c299-b855-4f78-a52a-e16b1dadd15e") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "dede3bbd-230d-4822-ae88-5f994bf71073") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d332f980-687d-4816-8784-718caa07c0de") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "899d7e09-12a3-4e64-a839-7cd37b3fde7a") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4df3c0bb-b884-44dd-b257-f71d8be0012d") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5424161e-e05f-44c6-a33f-7169346af83b") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4e52fd52-76ab-4b9b-a2fc-b0826125ec9c") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7801ffe3-e086-4a33-9de6-06a73baffe36") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "30c607bb-8873-4076-b8d7-ad163c92ad5b") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "37ed5067-d75e-4a5f-832d-15140e556285") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "363562e0-6dc1-4ffb-9a38-7c3febab248b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "019e1a6d-911e-4ade-a7a5-491ac15cdc70") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "84dde127-8c46-4e8b-86f3-a167209ed958") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b6c38f61-a8d3-4d42-a1fc-a3abd3e5ce9c") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "977b84d0-a69b-4bdb-85a1-4d4e2f18d355") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ba9a8e30-da64-46bd-9319-0c32deae5e57") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "216e6ecc-c89d-4013-8cb2-b6715ce913ef") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7c43631b-d5ec-4472-8e5d-8729e7c30e13") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "23eebba5-bde5-4271-89b7-52d819a5ab4e") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "8fbd6bfa-e404-4d57-be3e-e99148f636c5") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5ed72313-c146-4a7e-9d24-22bfe18d6232") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "84588090-8a76-42db-b465-301d03b8af3a") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2d536965-aad9-4d7d-ac55-c8e2815d86f9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "ce33187e-83a0-4ed8-929c-0e08fc1ef4df") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "40d5cede-b466-4d80-bc22-0d07ea8b5c18") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "abfa488d-98c3-453c-a6c0-fb5503deb4ed") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "59f8c249-62d0-4229-9f4d-521c884df832") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "856d58dc-5214-4424-b015-0651de784b85") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "88173f4f-6082-4f15-aa68-48e676c017c3") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "2b343af4-221c-4db6-a4bf-1a6a0fe15618") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "71a29094-0922-491a-936a-c8bfbec2cbf6") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "7b7c23d5-cd1f-4908-8b5a-c0a49f300e5a") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "ff136bd1-bbd1-4bdf-b17a-57489a34b522") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 132 "/COL14") + (pinfunction "1") + (pintype "passive") + (uuid "247e9fe0-7ce0-4176-964f-641cd581f383") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 123 "Net-(D75-A)") + (pinfunction "2") + (pintype "passive") + (uuid "e318239a-6979-4dd4-bf5c-aa74c575215e") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 123 "Net-(D75-A)") + (pinfunction "2") + (pintype "passive") + (uuid "d970cc92-38b1-4822-84d7-aa55d6b78765") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 123 "Net-(D75-A)") + (pinfunction "2") + (pintype "passive") + (uuid "faa4e38e-79f4-42c0-ba82-55158633f104") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "e06186de-fa36-4941-944d-f56b5e1b7481") + (at 171.0314 140.3391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED36" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "b02fba09-051f-4a78-8963-b8dee0ad3313") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "85297f77-11dd-42ce-8ca0-4ff5cb40ad15") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "bc40ca27-20a6-4351-96db-5c0f28665922") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3bc28e54-5adf-476f-87de-00df835ff0b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/3ad26ec8-b6ff-4f2d-988c-e12db44e19af") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "7aee9330-812e-441e-95c3-bc52328b3730") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "827824cd-6553-47f6-bf15-e793a08628b0") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "cf7721df-3038-4095-95da-af4807d53540") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b24ace77-1d8e-489d-a421-d3df6b9d7fa4") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "62cf5926-c9cf-4d1b-ba0c-25ee8bb7023d") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "79465c5a-98bc-4dfe-8b30-32f68a7b93c6") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "280f3e0f-f2b7-4174-a05e-b96c5e989a07") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d715ac0a-348c-4081-9de4-9bf4e43de124") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d709947d-08bc-4592-9622-c8f44f25f52e") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "37d7a0d1-af98-4e72-88f8-b7d454ed0f92") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "4150ce7d-ec2c-48ab-843b-58db964a3776") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "91f30b69-b35b-481a-a645-4435c201a437") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d05c4c3a-61ae-4cef-8875-9618a8653ed4") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f8179397-26a0-46c3-a774-1e44050a7a89") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fef84897-717c-4edb-84a5-d924d093a91e") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "753a2410-c15d-4c08-a147-d48875f3cbad") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "baa35a75-fc53-451a-a222-1e77ee896c05") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ef5c8f32-507e-45cb-bfdc-8f47bcc73972") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9e309e1a-9823-4499-904a-10aba82ad442") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "58230df5-f936-4609-b6b8-a97f767cb6ca") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0bb8e70f-e663-4a36-83c9-cbaa2843155f") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "891ff68e-9cd0-45d2-ba4d-0ab2540053af") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9e8014f2-fdb5-4262-974f-a5cf289b675d") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3ce1a855-9027-492c-b29e-4c73eafc972f") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4c3cc24e-1a9c-4040-b92f-9eae4c52b827") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a64d3bb1-0996-4c02-a634-1f59347f3f42") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cfe0f649-0855-4ee5-9637-df0721fd4ce0") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "db04bb54-6f1a-4cca-b9c1-dc36050b4cc9") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a66f06ed-91cd-4992-b8c1-8fed8d7db9b3") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "27325057-438a-48f9-b699-4b4eea55a1d7") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "627cb613-415a-445e-84f4-e291496c8fbf") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c4e86232-8a21-4560-8ebc-4c736ac8fd4a") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "24e4cb85-0441-4ebf-b11e-f3b468515e96") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "381d2726-acba-4290-8699-5bad903dd2d9") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "1b2a0bbf-7ef6-44a2-be1f-f1f39bdaa9e9") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0b1011e2-16be-44e0-9a0f-1630bbbd3537") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "90720b0d-da5f-47fd-8d3d-0f6907280882") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "769b12d1-062c-4f57-a374-bb1489d21e16") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "254f99d8-0447-4ed9-9221-d1ed34e1ad67") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "c057d198-fc17-48a6-be02-b217c3ead5a4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "955d2c92-26ff-4c48-97f4-eadb7e9f410b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "0fceecdd-e5b3-4cd3-a741-583117b80ede") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "b81efddc-3ded-4a96-9ea2-5290e75a1d76") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "859d89a7-198d-4a00-9313-36b9ce28e77d") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 170 "Net-(LED36-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "19ed4049-8066-417c-8a52-c78de1e1e931") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 169 "Net-(LED35-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "8480ff0c-e4dc-4737-bda2-8a60da80696e") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "9e7e87fa-dc7e-496a-bb0e-2eb2664be5e5") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "e78f9c27-6e4c-490b-96ff-067d2ffa6bef") + (at 261.519 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED26" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "23f2076d-652c-490f-9a0f-60688879684a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "15001db8-9571-4682-9d97-c2aa5836d466") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f424e65f-52d6-4d2d-a3c7-bac2b58eb160") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "76c0896e-7fbe-4bea-a3c6-6da62a183fa2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/da6b6809-5afc-4652-bf7e-e83f0a60c65b") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "64fee21f-b1f9-47ee-9776-127f741dc58e") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "283f3f42-12dd-4f2f-b8e5-b15472ea9bf9") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e803dc4c-8b85-496d-a77a-d964daa67665") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "67c71e15-1af7-48e1-a726-dbe53bf3ae4f") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "16f0b097-0a83-4a86-80c3-e6dbdeb4b0cf") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7cc26246-fa4e-4da0-bdcb-53bf2659506f") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8cd540d1-b463-40e2-84f3-03f63541ca1a") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c65dc5aa-2f78-4ba6-9aa0-a556b76d280c") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1678fbcb-d8be-44e7-9451-225517244f03") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0426da61-ae9b-4c9d-a834-c6c891376356") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d38c4597-bcf6-45c5-9c99-0b538b6090f0") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "44f21cf3-eb7c-41a6-935b-9bbc7812b391") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "7ef376b7-298b-46ac-bc0a-0450a91b172a") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "57ca3c0f-767b-4ddc-b5cc-c8241a73e8b7") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bf1fa19c-7cea-4332-9476-6da114dc074e") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3e289d3b-10ed-4889-b296-e04d61d12cd6") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "488f7fd9-bbe0-4682-add4-0f5e7e16a42b") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8d62570e-1396-4981-af38-65593b3c062b") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c080c5df-cc64-472b-ab8e-a0d8c99668f3") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7fe58bb-359f-4950-afa6-a37aa7781652") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d85919e0-990b-4b4b-b5c8-e3c396b1b91f") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e2999195-e13a-413f-9ad1-67e345cb665b") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ba01efc5-0dad-43d7-972c-2e56c2c2a6e6") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ce2e50fc-5a90-4b45-8c18-c69a58b9da35") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9019e1a5-9755-4064-af17-6732c0f78bb5") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "65987eae-1db3-4e92-91dd-549b6311a252") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4e0e1729-0245-4143-a637-b5d08aabac26") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2d68a980-bd6f-455f-9321-c8c49cad0fd8") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e27c1248-c491-44d6-b6fd-8de911d4b2f2") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "acd0a888-52cd-48fa-ac21-8c82dad52c89") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4a4dc5a3-a560-42ba-96c6-4349fb4e7c19") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b457a5aa-0b86-4235-bc0d-692089c03c4e") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9c6c840e-c424-4fa6-bcc9-a5235fae5585") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "bf864855-c7f7-479a-ac01-548a202bdfc0") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b71f4995-5ea6-4d8e-af5a-7486825604b7") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0bd68cfd-a484-4b34-b433-a0e8003086cb") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "b6b98b3f-eae2-4363-b7f9-4ef8af6dfe5b") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e2b84634-3a0a-41a1-be6c-1c2e982c58d4") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "89bfa41a-6d39-482c-8e2e-3bd6d96f4708") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "91a32d7a-a672-4dca-8208-f4533f6298ea") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "71f63ce3-f748-432e-8b16-394fa4348f12") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "3d0a226b-e103-4a64-b9f5-55d05a75a7b5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "20b3604b-405f-4de7-8fed-9f454afc9640") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "c3f9c5bc-6f02-40cc-a4fb-b9f76b959317") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 160 "Net-(LED26-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "1409d630-8972-4bb8-b0e1-b90f4f21553c") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 159 "Net-(LED25-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "255cc877-04d3-4dae-9fed-37cf79d0e248") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "5bc16e19-2c48-4486-89d4-8c11b9ec92bd") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "eb4f14f0-b107-4a94-a17d-02466bb661f6") + (at 316.3138 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_ENTER1" + (at -6.6062 1.7812 0) + (layer "B.SilkS") + (uuid "3a8d9f1f-8bbf-4d3e-bb06-93a98fd58d10") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "4e7fcc8b-9a8c-4267-ad48-06ed80bd03d5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "bd405486-9dc8-4309-b539-9901fb4e5d32") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "57361e8f-d3fa-480e-b0e0-249c10e79b01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/3cf9fbea-b5dc-4161-a2f5-9f1be7e51bb2") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f6c5bdac-115f-4d8a-a5aa-717863557d67") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f26f39bd-f779-4863-971f-ffed1e7d67ed") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "83b6d156-2c7b-4ad8-a9d7-0d709afe7c43") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "eca4bb03-b864-4b91-871a-9208e16b8122") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "889c36c0-12c1-4172-8a2a-790049292510") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "dfbfd74a-3974-43ae-a944-3331c55410f5") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "01676377-c833-415d-8fd4-ec221a75eb09") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "44c82495-7d39-4cbc-a67c-11b75ce4a3c7") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b692e3fb-b67a-4622-bdab-2b5e7c446b33") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "a9298830-0a81-4902-a7b5-e57e7b5c6020") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "51a54236-487d-4c74-87ce-e8484e347acc") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "48646462-9828-4a7e-88fb-e10f372c563b") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "d4ece006-fda0-486a-98c1-4242bbdb7d13") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0016c264-e6f1-4f7e-822c-11a4335c7915") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "194751a9-910e-40f1-b164-f6822c30c91d") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0b44fb97-ff1b-4542-a596-097cdf3ee7af") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "8ec25c2f-8ec4-43dd-99d6-70f3838e4073") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4d28c421-9008-4870-93dd-3b269c3a54f1") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5849dfa6-6311-4f99-847d-6baab7293f22") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "60a1f01b-e105-492e-92be-4e0eaed1a239") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2dd40745-665e-4813-83f3-160c70c8e91c") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1f6697d0-2e13-42c4-a068-5fe3c34ce1ac") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "830b0bdc-2a99-46c3-a681-5bf6aed00ea3") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8ab37d53-fcbf-4286-9988-3829b8f89605") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "36cd0cb3-d00a-4950-bef0-40cb7ec5710a") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "065ae92c-7bea-4af1-a69a-447214ee7d56") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "18b3a24e-a553-4fb8-9e33-e093e3fa7d16") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0bbe6afc-86c6-4bf7-9a44-19fb756706b0") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5f4cac90-05e2-40c6-8306-99c8ecdf73a9") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "05494df0-68a6-4cfa-8fd6-9c22b8be67d9") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fb04c373-f761-4797-a56d-e00a6baf79b5") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ce32669d-66b6-4ae8-a6a5-524acc3cb9dd") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "62352e78-138c-4d7d-89f9-a2310e8d66a9") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "827e7a43-95bb-4ecb-819d-3c16b233a7b0") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "4f93cb18-ec2b-4ccd-ae23-b303c66db26f") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "b2c2fee0-ea1b-4e63-9da5-9f6639fce162") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5b6d7f14-7368-49c1-9e94-80f77a1a1b6d") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "13549ba5-6b10-4e2d-b3c7-42e22e7c520b") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "f4863c73-6660-4eb5-af2f-b37b839ae7a5") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "d0f6659c-c6c4-40fe-bb88-c1bceb6d3801") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "66c5113e-723f-452a-9f32-878424514ada") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "81cfebf6-919e-41db-bb3a-19072c2dfb5b") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "3533c87d-a257-4469-8f0c-997dd1b8ffb9") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ceceebf9-4faf-4cbb-a8a7-dde4a962a918") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "23c6457c-a962-4a4e-a588-50095da33e3b") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "c58b7705-3809-47f1-a10b-22fa0b3536ff") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "549699e7-ce92-409e-9e1f-2e546a62af87") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "6053cc18-6ddd-4ffb-b586-0de7ae1d88f7") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 133 "/COL13") + (pinfunction "1") + (pintype "passive") + (uuid "b8edb5c1-e218-4728-b86b-f460d152169d") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 69 "Net-(D47-A)") + (pinfunction "2") + (pintype "passive") + (uuid "cb81f125-dd20-4dfc-abf9-b79cd9bf4c14") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 69 "Net-(D47-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0a21f690-b701-4043-b71b-a36101083b44") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 69 "Net-(D47-A)") + (pinfunction "2") + (pintype "passive") + (uuid "a54b3b72-4519-4959-8b13-533465b1a575") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "ed4c78bd-4da1-4f51-89bf-fcad28e9e8de") + (at 175.9338 102.1287) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED7" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "c14079bf-c25b-475f-8731-da36efa9cf44") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "044c785b-11d3-4ab8-be82-475b4855d8be") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "526b6301-17e0-481c-9fbc-eb322cb6a460") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "bbf2714b-a854-4401-b1b6-2149ce96f7c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/350a75c8-8a5c-47ac-aa8e-24cbeab2e57e") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "d00f9538-535d-497e-9843-dea47c56cc55") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "85116065-8438-4b4a-8c34-ce2e168cf3e7") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ef7a8647-9fb1-4601-8467-41e9b8f5b59e") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "91a6e1c8-b00a-47fd-8adc-6ee22bb785bb") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2512cf53-2262-46cc-87f1-ce5bad666254") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9d96fe74-924d-4a38-b38f-eb4d1d762fe8") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "a7b47fe3-7390-4134-9391-6cf34ed2c966") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "c1221622-92b6-40b7-9633-d846f4b1f742") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1e7bd014-0402-4b45-906e-d26edc2dceb3") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "88673eef-6359-41ff-a1d9-c4aa2925645d") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "f4866cac-6d2f-4ecb-9d0b-0bdf8dd38e50") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c9bd1a54-29d7-43b9-b0d5-ac833618a849") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c8edda33-57ca-4716-b301-e018e232471e") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "941b3b39-4409-4963-b573-531d23f634b6") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6df006e9-8f72-4592-8f13-9897cb8b2759") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f9b73fb6-cc05-4b93-a459-9462e7327fba") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "30e767d1-3221-4dc7-913f-aadd6764bd06") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "02b3e97d-8696-4dcb-b3e6-849dbfa48995") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ddc9e02f-2b7d-47c3-8065-5313853a86f4") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d5242d53-cb76-4c8a-a0dc-e0aa24c81716") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "356711f1-bf7f-41cb-aa5f-2ff296cb3c72") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7e4af64-251f-4f9d-aa54-72b1e3603ec6") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ffd33557-0cd9-440c-bb36-eec6af57cdb3") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7ad1e5b9-51b7-4300-83bb-a134fef1a2d2") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ab5f9be4-9e26-4fe6-9df1-478a088f0ee6") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "72ae0eac-9480-4030-bf29-8f291e1e27c8") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cf1f74da-24b5-4190-aaea-c14296f85270") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c90789d2-e2d7-4d14-9607-7868ad2bb53a") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6f434c63-61bb-43f5-aa25-591bf3ce4e91") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cf37c62f-db74-4be7-9c6a-7af4c0c669db") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5c6e4f96-fd69-464e-a35f-5c5236aee015") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "108db44f-3648-4d03-9679-3779c9d9a116") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "6aebdd5b-7cfd-4dc6-ab90-2e8bcd54512a") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f4d4f813-02b2-4a52-8eaf-20a49669fa6b") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cdf46cc8-2938-4ddc-becc-c5ef383b97c0") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cb79a610-be5a-4ab2-a720-c042f24fba1f") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "2d2d4c3f-573b-433d-8bcd-66c48d5548e2") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "cfab9f94-d74b-4ef2-a372-88531643df17") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "2ec7e264-9770-43d7-b497-6adbf096ae38") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "31df5025-43aa-44d2-b6ee-192f2031633a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "f296d0e8-91a4-47b7-8158-f836fa95866a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "05efd949-f07e-402e-8837-0769c5e56ba9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "42ea3374-00e7-4206-98f0-77ba351f77d0") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "9835209e-f1b2-49d2-b530-a29376ff3874") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 141 "Net-(LED7-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d08019b4-62f5-4f72-8281-8df34ca66667") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 140 "Net-(LED6-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "b8e55fe1-e662-4412-be98-6914fb70edc6") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "cf362f5f-48c2-49e7-93ea-b19ccf86149d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "f1b1f6fe-700c-4261-ab66-1cfcf855f904") + (at 318.669 102.2391) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED14" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "0b7dcc92-cbed-42de-b660-1209bf033c99") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "dd4f1215-5eb0-4696-8efe-328657f9e46a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "ddc11003-51c6-434e-94ca-86c1fdb03d5c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "788cb86a-bc7b-4456-a5bc-d29a36e1e9db") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/24f892e7-475f-467e-acc5-b7beb1d682b4") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "dae19321-90aa-45e2-b7ff-d03395eef68c") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "30c4a436-807b-4881-a531-0721de1812d4") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "f179725f-9725-45ff-9ae8-ce7f3d60ac9f") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "80d54ae7-fb3d-4495-a495-f27bd7108744") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "fd480ea3-3b28-40ca-bdad-7e51410ae9b4") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "cd02df36-5a46-48ae-b777-306cc53ad06d") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "6c871918-dfd2-4297-87da-ae10c5b8961c") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e6ed07f8-28aa-4b67-87ff-e1159dc04705") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "99f9109e-4d45-40b7-bfff-40f302c2bcab") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d08ae48f-22b9-4fa4-983c-668eaa02057f") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "26413448-3671-4bfd-845a-d7ba596240b4") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2ee2aab0-342a-4c2b-ac01-1eb7c8707a87") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "8052b15e-3910-4a15-9c57-52cbed86446e") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1cbdab7d-ae32-44f8-98f7-4cfe6b0ad6e0") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e3a4624d-81a5-4648-be9f-18222960ecb4") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f80685ce-f0da-41b4-b70c-e1b3369dcd6c") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "704cb94c-1069-4fe4-9f83-cb0225454985") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "35964152-7e68-4905-b879-8d47c410c79d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "28f3e328-f797-42c3-be3c-4434e29b15aa") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f0f04d88-a761-43e7-8904-0f027b34d9c9") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "82b7fbe0-f636-48d0-9e0b-128db3c97aa7") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "204b260f-3a0e-4315-85b4-d2b7127a3c11") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "de8a34f7-138f-4bab-8ced-31f374b95581") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1fd9e6f4-5cec-4a13-ad8f-bbe18dc7ae00") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "04d2b696-3fb7-4bfe-8bcf-b550d0b112d3") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b45cb5e8-908b-407d-850d-2ac4c2aa9325") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "084900d1-ee00-447b-989d-bf9d0a197d61") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "69bb6757-5f45-4ae1-ac26-b643fee99fa0") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "835b0de7-5be2-4e46-aa13-0c80d45d778d") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e65d4c36-a40c-4121-9bce-b13e30c5d0a9") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0f97679f-eb07-4b44-9a1f-c4f9771e4d80") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "46627b03-f1e0-45c5-85c4-9e32252eb66d") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "da413864-68cd-4e06-bfb2-d40cab1313ed") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "547794d8-6ad1-4690-bfa4-40c1014a7517") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "dea5eb05-323f-4571-9a67-d1d93e3df6b2") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "37ddbedd-baea-431f-9a4d-2639c6461b79") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "be73fa9c-2c08-4196-9340-c560df4dfa38") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0118bfcb-0d33-4d95-ac9e-eff149c6de19") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "4f7a64ae-013b-472b-9f41-544aaaf2ab9b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "a4adc1de-2350-409d-b4ff-1c2b8ca873ec") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "fba46c22-3249-43f8-9996-7783136198dd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "41ed41dc-49cd-4e26-9df5-851f30717ef0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "e62f3f8e-132d-4d92-89f3-d046ff78b0d8") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "40fbd8ec-557a-464d-b342-52d7178db900") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 148 "Net-(LED14-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d27b993c-e774-40ef-b037-a2238a61dc57") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 147 "Net-(LED13-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "2c46ee17-82b9-4575-847a-8b385fea0a34") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "e9274039-84ad-4620-870d-e1aed9d0565c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "f3cd5f2c-8900-48f6-9dc6-e146955c038a") + (at 137.6938 102.3987) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED5" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "f96f5994-7cec-4d69-8783-8d13e6d969f4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "0a8ed307-7984-4850-a54b-14fac1fa2f4b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "e02a962b-09c0-4ae3-be52-1ec603f586a2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "90c25220-ac5e-4906-acf5-60f6e36f4b37") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/a7d89747-97c8-4778-ab96-c30431500c17") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "72f22bfe-ce04-44c0-bd3e-ad4a7c4ce6b4") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "902bdf5c-0b10-4b40-bdc2-07f6dd978504") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "aa27ff0c-7d90-4410-9ec9-5c5fa7e3981d") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "64022233-b55a-4617-94e4-8aa3d0d6004d") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "706d5968-7af3-4315-b858-67a01a98ecca") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "ccae1d56-8487-4ee7-be44-7a47ad3385ce") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "1c0c7bd4-4c6d-48b1-80d5-a95a76421de2") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "67611862-2176-416a-aa2f-abf11971f5b3") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "256b4f7e-6993-4c85-bbf7-89c126673c3c") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "2ae7f28f-5c37-4c59-a272-74a8cb36b797") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "d4303f9a-6f12-40c0-a3bf-c501e9b68226") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "1d5c8fca-5ddf-4186-8296-e7285a8d8db0") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "34fb58f5-4c06-4386-ba5e-0c9f252ecb91") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d1d91ea9-5bc1-401f-b4af-b0d762008c92") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ab92513a-1d03-4f48-a75b-cbd7916369ca") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ced8f4d3-4cd0-4508-9703-c2fd280f28a2") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "16e8c3ac-9f7b-49fb-b1d0-06226489984d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "582143a1-6496-4c14-84a7-d31d1679b582") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "31b19b34-6cf7-4b28-aa76-326e2acab6f1") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "29d45cc2-8b86-42a4-9eb2-ded8ed97849c") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "86ace528-f208-42ec-a874-0221ddc3c30d") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "84650e1f-5933-4c0c-9f0d-40be238f4a73") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "50c7989b-05d8-4df9-b11e-daa7ebac74ec") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "2b324de2-cac0-4b0b-8635-73d1429be11b") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a9452b34-61e2-4e85-bac8-1607d8d98368") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "03d5daa0-f42b-4e3e-9c62-8a13f4d98409") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "cd417195-b5f9-4674-b49d-5fd42250c41b") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "11d77024-14be-4f71-9314-7e7ce0d18fd4") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "87912ca5-bd41-44c9-9a01-53afacaf3159") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b4e14fd3-5812-4fc7-b388-0b53f33233c7") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f314241b-b64a-4adc-8d8d-f327d1e8b508") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "78c797b2-75db-46c5-b8fa-a7dce6e359c2") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91302106-c4b2-4a0f-9925-1902d3fbf447") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d7706d29-9dfd-4fab-9706-b43871a2715b") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "a5a46514-8fa1-4b91-94cd-a8129cb55177") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "55a4e51e-6f85-43d2-89ba-382722de5be3") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0026a1f0-e552-4b04-9ba9-8d535b86c956") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "581a042f-7b87-4cb2-b64d-f6ce70f4f1a1") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "7fcfc323-f534-4fd7-9bc6-2541dee44b04") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "8f2c4d86-95b2-4068-8c10-cf84bc1283b2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "46df4b32-9157-4312-9485-85726ed85d31") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "d023f19d-1ee7-40ae-8364-b53bcc43459a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "496308c9-d9a8-4e8c-ade4-8e0001fc98d8") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "084a63f1-f7b0-4f46-8705-dc81095b8b44") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 139 "Net-(LED5-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "1dc279fb-4587-49cc-8fdd-843c21614948") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 138 "Net-(LED4-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "63006384-a87f-4ae9-8661-1be226f71729") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "b67819b0-83d4-4c71-ab08-6336316c23d5") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "f790a006-3463-4190-a5c5-bead8d6c7229") + (at 347.27 135.7312 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_PGUP1" + (at -6.88 1.7612 0) + (layer "B.SilkS") + (uuid "7913642f-30c8-4f92-926a-570457b797f9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "dcf98bf1-7829-406c-8d5d-b8a247783484") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "4a08e6fe-5364-4cbe-8728-53521da68c0c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "0c24ed53-e527-4348-9bba-aad4823848cd") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/31fef54c-7cf1-41c0-a9c3-938a5f3bde9a") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "067cb19c-5d3d-4985-a21d-4d1e62ff3812") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3b2c2607-7de0-4025-a231-935df56fc7f3") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "d188ee93-2899-4268-9108-680bf71bad34") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4217405f-f49f-44af-898f-0abf61b2745a") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "50c42c93-fef1-470e-8413-6586b50747d1") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "642e5c47-9b82-4984-9829-9d3cd0044c3d") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "56e80284-4f86-44eb-a27d-397e66576938") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "20380b53-a99c-4d41-a6e8-70554ad014b5") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2c49a29c-96c1-4347-8687-10c44449e79f") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2a64a16f-0498-4915-9c08-088677d55078") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "5b85c89d-7c09-412b-ba4d-606f0199e36a") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "0e6e48f5-3a69-4c93-8d50-7cbae7823826") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "e05f6285-728e-4909-8b4b-5a81706ef9de") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "60f6dba0-2440-4940-b102-58f6747d2ddd") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7f1964de-3c04-4d69-a9f3-4fa4e03ee59d") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "37195934-a802-4297-bcdb-b6df5de33e98") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "ea68f79b-d7ba-4340-a52e-a2e380616f22") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "5c682c94-37a2-4aba-b678-ff9d931082f2") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b00bbb19-e916-41e9-8832-e35bc69c146e") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c15f5150-e423-4171-bb3c-2a131a3d3f74") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7854745d-ade3-4160-a603-cfdfe7483279") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f768e654-0280-49fd-b3ba-cc8eea611702") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "25f264dc-de5c-46a8-a8a1-4698084a4df8") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "917f99d9-94c6-41b2-88fc-0676ca7a1b18") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d2c6422a-3c43-40cd-bfc3-86e02e9265d8") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "35e97266-e355-40e5-b543-a1a2add25107") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ad3bae8c-0921-447f-a897-6273f6888790") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b6f135eb-ae70-49df-82ca-0c6fb751f1d4") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "91bbd271-a4b0-42e1-8e3d-1841527dc4d8") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0388effc-4131-4c56-9495-5cd3c2f513fe") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "de7af083-84cb-4460-afdb-3b484fd5dccd") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0139ca29-2657-4d66-906e-81c5ef6e2389") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9b888bfc-2100-4aa1-bcf0-dd996bc0a078") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d1999034-7269-4ad9-803c-648590837319") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "ea281125-5ce2-4d04-8b1d-4d1318289ace") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "c4111102-2621-4e5b-bdb4-313f70a6120c") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "cc40e6d6-e070-4c73-8b42-8a6e429d388b") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3920b1f9-8e60-4fc5-b98a-03f3c7b7ab61") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "2cdb24b0-9db3-4b1a-be27-90cf181c978d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "fa8091a6-d923-4f25-8657-6b305a4e7746") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "0856531e-516b-4427-aea4-5165dceb90fa") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4aa63f0e-c7a4-4677-b584-bfcc554cbc5a") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "8960847d-14e4-44fe-bf28-9aa7586284f6") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "ac396c28-546a-4d6e-a585-ad45103d5f15") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "f9f1df83-ddb4-47d9-88be-486de5d0b0fb") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "4f920bcb-14ef-4cfd-aeec-93417b595d8c") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "939ed30f-05d5-4ebb-b81b-e055208e2759") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "35f719bb-4eb3-4507-8bca-d72403c8eea8") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 134 "/COL15") + (pinfunction "1") + (pintype "passive") + (uuid "9bf5a41e-ae84-45ea-96b2-8e5b7a8c1e37") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 70 "Net-(D48-A)") + (pinfunction "2") + (pintype "passive") + (uuid "115af180-daa0-445a-b747-8b5f9d3bbbf2") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 70 "Net-(D48-A)") + (pinfunction "2") + (pintype "passive") + (uuid "617f30fc-6d40-438e-8d5d-126e4c0a5ef6") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 70 "Net-(D48-A)") + (pinfunction "2") + (pintype "passive") + (uuid "3b531f8a-982a-4056-91ba-6ec01d9ec36d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "f96d4494-db05-42ca-9624-98711878494b") + (at 209.1314 140.4938) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED38" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "fd90e53d-ad40-42fd-b66c-6bfc2ff732d7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "0ddaf2b9-6c67-4109-b77a-e2703d136401") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "23e51e3e-8f51-42bd-9649-e775fe1f22d5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "b41a91b1-b3fa-475e-9e20-6e3435e5dca1") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/44918a5d-3d1a-4836-bcdd-78bffaa0f2aa") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "0dfe51ee-3787-4527-8473-e9b709fcb83d") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "c07174c5-5112-44a9-b7b0-4fed352c14a6") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "09c66979-4bae-4007-b6b1-4670de89664a") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "92c5b7a0-7440-4d5c-a1c1-b0c514a8f36a") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "65e6a5ec-a991-4716-8791-6e71d36932f2") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "7ab6e49c-33c4-45d0-a651-d989b28dc960") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "51ad3ee9-0d51-4f9c-a5f1-e3b7888f479a") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "89264355-447c-4fdc-97fb-27e9d050ffaf") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e3b9a108-e4cf-4661-a7a4-8fa0f7e39804") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "afc85a69-b49b-4dab-a00b-31e39d023329") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "12bd1c15-5679-43b6-93f9-e9ebe96c075d") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "b58162e5-30ae-4cea-b6f3-c12ceae7873c") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "940bf64c-4efb-4391-be72-2becf64fe9c0") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f2db9287-c18e-4c3a-8d15-d5d5af91f335") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "efdc00f1-df06-4d82-a056-5159c6c26a96") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5359cd80-646b-4d79-a6c2-5b39edb6f8a7") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5dbc5885-2b3d-4673-93e2-0be6dff98e31") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7a5e713d-29f5-4ff7-b442-611339af3552") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ed78308c-8547-40ff-b9cd-19593c6359c6") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "099836df-7add-437d-b719-7c3ae4072c9d") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8612e96f-9ea2-4db1-9a04-b27eb206768c") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "14990bae-b0e0-42e1-b6bf-31dbc5c9470d") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d40fb07a-e1b4-4d11-b967-9287f71b5002") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "73ac1f92-6a06-4419-bfb0-49c4cee08947") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "60950612-092d-4e4f-913c-dad60913004b") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a3489c44-3b90-4c75-aa6e-8208a89d65a7") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "35493237-5f6b-47ed-97e9-f77935c1fd99") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "78737fcb-2bdb-41cf-b4ed-31f37386df71") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f1bc8da0-dd1e-4150-a439-3bd1e637c2d7") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "ff92fc41-ca35-4902-8d2e-f51b422b16ca") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "970296e8-1502-4e9d-9333-f3e39bccaf21") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d8996b2e-7e6e-4c20-92ab-3fa6b8a791d5") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "22559c24-1797-43e6-9254-0ee248e8b173") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "269ab161-fa76-4e3b-82e2-5c5b96b56543") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "f9a56231-63ae-4247-866c-e73ba604dd25") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "da406cdb-10d7-448f-b24a-3f04642caddb") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ef88b8a9-4517-4926-aaa6-1c041ab8cb45") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "782cab99-c813-4d78-95ec-3b2fb5ce6851") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "03a7109d-5a59-48a2-b23a-925bd34eee23") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "f213c00f-dda5-492e-a9a1-553fe2480e23") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "dea40ed0-a282-40e1-ba0f-8d3e53c94c49") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "fc051bfa-ab64-44af-ab66-4e59847c7beb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "946ba99b-41f3-4f51-9a00-4f3fb3ec702c") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "a62f89a7-07c0-4502-a984-bce48469065e") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 172 "Net-(LED38-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "b2a49ae9-6ed8-4cc5-8759-83b744304991") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 171 "Net-(LED37-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "2abd2b88-ad4d-4c56-bd52-f932e43b971b") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "6dc6c035-5157-452a-916f-b21694fcd657") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "f9d6d760-96be-4c80-bada-910c6a5fb714") + (at 290.094 178.5939) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED65" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "25af0c68-54a5-4e3f-9068-2b2422a146bd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "283cbcca-ce82-4dcc-84da-f19ec75f5274") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "a6cb1668-ada1-4321-a794-d5ea3e51af75") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "2bdf414f-8f95-4f07-9268-518560d18b09") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/b56c8504-c0d6-46e6-9997-24233c29f427") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "8612ded4-11e8-4407-a9bd-59ef81157400") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "0b4ee9ce-e674-49c0-ac37-4c308446dd87") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "003f44a1-2efb-41f3-a082-ea4cf2f8d103") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "e970326e-b894-4246-807d-0d51b031d6a9") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "9fba20ee-c4e5-48ee-adf8-11a4f298347d") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "8d0b1009-9e1f-47b7-ad71-c55eac4a595f") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "9f6adb78-29bd-47e8-ba69-95cfcedea18d") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "0932725a-21d6-42a8-819f-4d61a21695f1") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "058defde-4715-4f00-99e8-497dea816e1a") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "94cdec0b-358d-4ca4-bf10-25837e90bec9") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0a565162-d6d6-4dcd-b6e3-ec28539f09eb") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "17f3ec31-8e60-4c03-83bb-4f5aec31d831") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "78fbcb3b-c3b5-4ac7-b211-9ddbeebd227d") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4b82c3cd-20c7-4856-9e82-42f264ee16cb") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "014bbec5-0afe-46be-81c1-30f850400f46") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "098645ba-c485-4982-895a-1bd623564d0c") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8e08fc44-6b0d-4f10-88c7-12d6593ae0be") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "905657cd-e96f-4ca8-a14e-9e9677691610") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5e9ab628-051b-4a03-8f65-d8f290336848") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ccc49ced-dfe6-4141-9043-377143cecbae") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f0276ee1-914c-4a06-9449-29b91d122d65") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4eeb5c95-049d-4832-bde8-d045b4d9ac08") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "a52d0532-4f04-4555-9e01-c7b27841045f") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3dd76dd0-78af-4e35-85c5-57c9e6a46101") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ddb89d53-565d-4598-9838-1eaf47a80a60") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "01641f08-80b6-422c-952b-fc0f8494a1dd") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d955a2fe-0595-42d9-b1fe-06c2c8cef6c8") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e723c256-f27b-48bd-8b1b-bf6a49a61e8f") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "5d38f7f3-1db1-4880-8d29-6b6ae0b00779") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "3dbd9778-6f8f-400c-bf92-720b358ca1e9") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0ec991ca-ef8b-4ddc-95e0-339c231e5644") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e8c0a617-76cf-43ee-bc87-605f2f869c68") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0227e989-2f08-41f0-8386-714f892e1526") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e593d0e5-5142-42af-b3fe-e629141c60cb") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "78b61f0e-11eb-4173-b2ea-299e29a1f11e") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "0f1b58a1-3e47-44fe-ba9d-e38696e7b97a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "6e859c5a-0e5c-4d8f-bd75-8b70d6e9478a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "9185785d-1d06-4bca-b639-49d799ac831c") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "6613c3d0-1667-4291-a50b-4e6e82c3519e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "caa895f6-e430-4edc-a52b-a488a5c058f5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "4ed7c1aa-2c6b-4544-a0c4-122075c1d51d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "3cee7a40-2a9b-4aa3-baa1-384da149b256") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "9b80f8b4-47da-4c89-b344-3119eabb1b08") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "07ebd416-19e9-44b2-a2a6-5fafd72e87d2") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 199 "Net-(LED65-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "3ca6d345-3a38-42a9-8b2b-85b65941d5e1") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 198 "Net-(LED64-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "3204ff43-2e32-4b21-a91e-c813dd2ae206") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "6b0eb073-abc5-442d-93dc-a2c0e916f55c") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "fa5390f2-3b84-41df-b8ff-d18cccde8d99") + (at 256.7825 154.7812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_.1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "6dd74091-4955-4113-8632-847a43df4f9f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "cdc2e4e0-0196-4a84-84b8-1c9460a3a118") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "1faf3267-4ad1-4f18-8465-8bc1a5818d93") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "49d74f29-4b47-4c27-aa6d-0f6461471247") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/f4e317c7-fff8-4045-a140-862fa71370c3") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "30f2822e-be7c-4e7d-834a-85979a25e6eb") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "2d3769ce-7628-44ad-8982-a7793fe5b852") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "aaf35f7a-a047-4842-81a4-75c5f661f261") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c4afe483-b96c-4242-a4e9-6152213a07df") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "4c6c51c1-37a8-41c3-86ac-bf8cf86cb7cf") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3ea483fd-d87c-47e6-8911-474cc093e93c") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "423d234a-1d23-48cb-827b-bc8f562fe6e9") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "47e47dc8-f658-4644-9123-c7b41850c8cc") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "b74caa00-8e2c-4fba-99c0-f311409a065b") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "c280ba09-4369-4e8b-bf03-6d4faf226835") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "47ce973d-5b03-4fcd-aa0d-9d6e535cd96f") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "7f17ed66-544b-442a-8270-323ad883d173") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "b0c8c838-ca92-4d82-b13a-10f8c13b92af") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "9fe9d86c-d1de-4b65-90cc-5a877a514e3d") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "df04c180-35be-4cc4-b27a-db36bd3a3b66") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "fd37d2f4-81cb-42ef-b719-fdaf38a82426") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "da289f65-b884-4a46-b9ba-56365fff914a") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "dabca58c-ed80-46a9-92f5-642ce7461273") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "116ed44e-7b9b-4897-8529-ca228620e7c7") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0fffd359-6049-4c65-a541-40017ab38158") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0c28201a-9255-4019-8f2c-498e8c85bd0b") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1665961d-5228-4e3f-b29b-450c1b86e5f5") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d1d99c40-1816-4a18-9dcd-242f6df6025d") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "99232c47-c19e-4f18-acba-d8195a79e3fc") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d31323bf-361d-445a-ae61-62cfad8bc026") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "aa3e1396-f6d7-43dc-b5ee-37ba98aba563") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1cf8f039-923c-4aee-8aeb-97e2afde2411") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "70678a1a-3dba-481f-a05b-2c02af4413e9") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c16ef972-64f1-4f64-93a2-b0c6514bb5f1") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4a5c9ce9-66da-471d-b635-dde6ef742e0e") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "63d37e8f-d16e-4093-be46-9537b07d1899") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "75b3ca25-a1a6-40ab-9620-c5f3852f97b8") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "efcf5833-7296-405a-a512-64483009cb8f") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4792ff27-a142-4337-8f71-1309006cbe41") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "43145e41-813c-4210-90d5-880e4345fba3") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "a9926be2-d3c5-49fe-abc8-d7503bf16099") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5fcd62ab-fe58-46a1-96e0-d99b10a8fb68") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "3ad81a86-eaea-46cb-9c63-7fc4e39ebf08") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "84c539a5-b220-481b-8b37-48081fecff80") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8fcff013-118a-48e0-a8b8-7eceb9e1140b") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9b209cc2-0a37-42d5-86a2-b50c2dca2bdb") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "e9f1b87b-30bb-4c19-9b9c-f290e45cbac7") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "fbf0de9f-c820-4272-83cb-48170b303f4e") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "346c306f-d8a6-4255-bf17-e6ccf6d8561e") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "b8c2dfb7-097c-41b4-b833-c00cdb1d5ddc") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "6b1980cc-8bf6-446f-afaf-ee24bcc7d3cc") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "b6a3c657-8122-48fa-bcfd-8f23b3654b78") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "ec3c4bbc-3f0c-48ae-bb53-e66b721abe9a") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 127 "/COL10") + (pinfunction "1") + (pintype "passive") + (uuid "5548de6c-7d2f-42fd-8a40-62b552e5aca3") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 79 "Net-(D58-A)") + (pinfunction "2") + (pintype "passive") + (uuid "ccd16cd5-4c95-4ec6-9f20-0c78400421dd") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 79 "Net-(D58-A)") + (pinfunction "2") + (pintype "passive") + (uuid "f8949821-c4fb-4435-80d4-65dcc4b81306") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 79 "Net-(D58-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0e47e28f-154f-47e5-b612-bc5746c31f7d") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "fd0de0b4-9e51-4621-ac3b-c2a4cb45330a") + (at 199.3548 159.5438) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED51" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "d5cdc3f1-da72-4691-a4ab-e989a1dac1fa") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "c9bd53d6-9548-411a-b1b9-155d6aacc602") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "eb545000-b5b0-4c96-be5f-e1830f4a9206") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "233e4285-fb75-4993-a492-51ae16fbfb6a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/a3d14776-6fa9-47c5-b30e-3892ecafee29") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "41c52979-1883-4633-b41e-d2ba8873ff74") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "549f0075-429b-45bb-8c65-0b20466a9673") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "b65e0340-4e8f-4041-baa7-e9502aa8bc28") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "434c42da-267c-401a-9051-7348e33dee55") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "2ef8f345-1b24-49d4-bf43-c7815cf8b802") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "366cf149-60c2-4ce1-97f2-0d1de6954cf0") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "6fabf1b9-a126-48a2-8f50-775e45631b80") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "937a402d-f917-4557-9d70-0d4530e06b4e") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "b46bac7d-5d6f-4547-93bc-ad30d3e4fb50") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "edfa881d-e097-4fde-90b7-fd335e95615e") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "59d65368-b094-473d-9c14-f830c9546894") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "bf16a9d6-f8f1-405f-9578-935ce2577a80") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "c82b7b7f-2aa1-47d3-b9c4-0d0c518f2406") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "3d904609-8d7d-49df-b6bf-6e263071eade") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "6a91cee4-1ecf-409a-817a-6da1ee78b25c") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b5416403-6fc8-4f84-8986-7367cb72e085") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "c9f8beb4-a55e-4ea9-bf6d-9b27808a84fa") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "f7a8bba1-9555-4bf6-b196-82a9ab11da1b") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "8630ccc2-2987-4376-ab1a-441effb8de3e") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "4d0e886e-b0b9-4df7-a098-ca9e3fd0b234") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0d4a3297-5483-4544-8db6-a64ec3327f21") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9b584775-6cfd-40c5-9953-0e6abdca5b5d") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "1629d656-dd85-43fa-b75d-0a825c1c9e90") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "20746cd5-97aa-4126-bbdf-e39ca565e7e0") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "071ef6e8-f924-4d1d-9863-59d5e2115846") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "55eb8c54-e079-4589-831b-f08583ebb158") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bb5b0bc2-02a5-4045-88b7-b5b3f7b1775c") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "e46cb6ef-ffd4-4111-8c7b-7115ab96511d") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "7864a03d-eefc-4360-8176-5279fc05026d") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "c20c0b11-1abc-45e6-a188-abe66888876f") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0edb734f-cff5-4dbd-bcea-5cd961806a88") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "2a7a88c1-3a09-48cd-92e5-1496a944c6b0") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "632b9bc8-892d-4e74-b80a-4f1cdee08ec8") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "426c1e16-1822-42fc-9a11-4725aad50798") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "77c777d0-554e-4801-b269-240df3203db2") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "d79479cc-dd0e-4516-8548-61e579278d89") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "ea7e5d44-3ea0-4322-8d9f-2c4470b694d5") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "57492d93-210f-4704-89de-c9d00d52b094") + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "1105392a-e40e-47b1-8a14-df546b7ea22d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "be537c2d-84c7-4c8b-b171-13b6b801cc0b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "6f538528-77b5-4f1b-a175-2341157fc2e3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "2b1426fc-6232-4ac7-a397-53c6f8463de9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "c1801567-3905-4634-aae3-e54b8990d72d") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "038319c9-0b62-4e21-a53f-58ac96284b53") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 185 "Net-(LED51-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "d66d9219-2165-44b6-83da-c25677f2c3d2") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 184 "Net-(LED50-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "c935c238-dcbf-4244-b0bd-79fa5407abf9") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "7ba952c7-5903-4cde-8bd5-9cb0930c0825") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-choc:LED_choc_6028R" + (layer "B.Cu") + (uuid "feb14d2a-832d-4f2d-a095-89104c16e3b7") + (at 299.619 121.2891) + (descr "Add-on for regular choc-footprints with 6028 reverse mount LED") + (tags "kailh choc 6028 rearmount rear mount led rgb backlight") + (property "Reference" "LED28" + (at 0 2.6 0) + (layer "B.SilkS") + (uuid "bc238a77-34f6-4358-96d9-77de94554ec2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 0 3 0) + (layer "B.Fab") + (uuid "134d4048-63ce-446c-b009-93ad54465af3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "b97ac503-cdf2-45f1-a75c-bd3e69953b1d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "5e5ca1ba-f405-4112-8a29-cd8236bbf12e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/0330dd45-2776-4667-9e47-eb2dbca2bb32/3ecd9002-f2ad-4edd-a300-56bb92870ae0") + (sheetname "/RGB Lights/") + (sheetfile "untitled.kicad_sch") + (attr smd) + (fp_poly + (pts + (xy 3.5 1.25) (xy 3.5 1.73) (xy 3.98 1.25) (xy 3.5 1.25) + ) + (stroke + (width 0.12) + (type solid) + ) + (fill yes) + (layer "B.SilkS") + (uuid "924f48c1-1097-4c08-a832-b72d18d8360f") + ) + (fp_line + (start -9 -13.2) + (end 9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "3e5a2e87-4dcf-4b75-926f-7cae92ea7a60") + ) + (fp_line + (start -9 3.8) + (end -9 -13.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "29ec100d-ed01-4120-9724-5066021609eb") + ) + (fp_line + (start 9 -13.2) + (end 9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "7e8ef971-a6bc-4333-bf4f-9bb22a976631") + ) + (fp_line + (start 9 3.8) + (end -9 3.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "Dwgs.User") + (uuid "ad42e525-1f38-459c-bb95-18fdad138270") + ) + (fp_line + (start -0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "f760dcfb-30e3-4177-9f9d-00e8e5139cef") + ) + (fp_line + (start 0 -4.7) + (end -0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d57c475a-e317-45c4-a9de-ecad02f75fa4") + ) + (fp_line + (start 0 -4.7) + (end 0.25 -4.95) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "d9deaff8-827e-40ae-b01b-e7c43f4af440") + ) + (fp_line + (start 0.25 -4.45) + (end 0 -4.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "Cmts.User") + (uuid "e5a6b11d-d42c-43af-bdd5-239ccc0ef67d") + ) + (fp_line + (start -9.525 -14.225) + (end -9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "363cad0b-9bd3-4131-b6f7-f133228207f1") + ) + (fp_line + (start -9.525 4.825) + (end 9.525 4.825) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "0e6188cb-fe34-4544-9a9e-eadc07bcd26a") + ) + (fp_line + (start 9.525 -14.225) + (end -9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "ba55c6f1-0c5f-4b79-ae75-dda52e29025b") + ) + (fp_line + (start 9.525 4.825) + (end 9.525 -14.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "Eco1.User") + (uuid "61977bd0-64a8-4702-84e5-e64b19942e56") + ) + (fp_line + (start -1.699999 0.702841) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "37b32f3d-b5e1-4b2b-a12d-749ddfeac502") + ) + (fp_line + (start -0.794452 -1.5) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "b08c3849-d54a-451c-b735-db9adf1838b3") + ) + (fp_line + (start 0.794452 1.499999) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "bdbe7da6-42b7-447f-9f1c-b96dda869a5e") + ) + (fp_line + (start 1.699999 -0.702843) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fc3d4839-dc14-4bb1-a891-fdc357344f8d") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.712527 -0.814069) + (end -1.699999 -0.702843) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0e04a6da-0694-4e71-9df2-06e26de82fe3") + ) + (fp_arc + (start -1.749484 -0.919721) + (mid -1.638071 -1.504036) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "9129e151-1614-4397-ab6f-1128728bd350") + ) + (fp_arc + (start -1.699999 0.702842) + (mid -1.712527 0.814067) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "182d15f1-999a-4d38-a481-532807734962") + ) + (fp_arc + (start -1.046711 1.568296) + (mid -1.63807 1.504033) + (end -1.749484 0.919719) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fe5cf4c9-c589-48fa-acfc-f85a60d972b2") + ) + (fp_arc + (start -1.04671 1.568298) + (mid -0.925122 1.517376) + (end -0.794452 1.499999) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "82ccbdee-98ed-49e0-a5dd-0b508d3e9240") + ) + (fp_arc + (start -0.794453 -1.500001) + (mid -0.925123 -1.517378) + (end -1.046711 -1.5683) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fe750bb8-e06d-4957-b6d0-0c222579f91c") + ) + (fp_arc + (start 0.794452 1.499999) + (mid 0.925123 1.517376) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "000bdc36-fe2f-405b-be3e-2b2488231038") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 0.925123 -1.517377) + (end 0.794453 -1.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "07f9f36a-e39e-4643-8b40-d8647a12c1b3") + ) + (fp_arc + (start 1.046711 -1.568299) + (mid 1.638071 -1.504036) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "ebd1b88f-5b27-4dc0-9ede-46f8cce959d5") + ) + (fp_arc + (start 1.699999 -0.702844) + (mid 1.712536 -0.814066) + (end 1.749484 -0.919721) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "fff2f8bf-136b-4b7a-aa49-aa27a5bf8c02") + ) + (fp_arc + (start 1.749484 0.919718) + (mid 1.638073 1.504037) + (end 1.046711 1.568298) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "d4297e18-7d42-49ab-b874-91b390460558") + ) + (fp_arc + (start 1.749484 0.919719) + (mid 1.712526 0.814067) + (end 1.699999 0.702841) + (stroke + (width 0.1) + (type solid) + ) + (layer "Edge.Cuts") + (uuid "0c40856e-ad4f-484a-b26c-1d8ffa50b83d") + ) + (fp_line + (start -3.8 -2.000001) + (end -3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "eb4da0a2-a1bd-4339-a077-4e82c34dcbbe") + ) + (fp_line + (start -3.8 1.999999) + (end 3.8 1.999999) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "52e9ef4c-5db8-4ffd-8d95-17abf9ed659a") + ) + (fp_line + (start 3.8 -2.000001) + (end -3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "7d447273-9f8e-42ed-9352-05eb666c0ff3") + ) + (fp_line + (start 3.8 1.999999) + (end 3.8 -2.000001) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4008c791-34de-46b8-81c1-819ec5d0cd71") + ) + (fp_line + (start -1.6 -1.400001) + (end -1.6 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "80cfba88-bd34-4759-9efd-996700d3059e") + ) + (fp_line + (start -1.6 1.399999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "e63f37b1-a838-46f2-8479-1ca269322568") + ) + (fp_line + (start 1.6 -1.400001) + (end -1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7fd6f5ff-4432-46de-b1ec-5d08aec6799a") + ) + (fp_line + (start 1.6 0.899999) + (end 1.1 1.399999) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "7b035135-a9c8-40bf-a06e-209cbf02851c") + ) + (fp_line + (start 1.6 0.899999) + (end 1.6 -1.400001) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.Fab") + (uuid "90ca9b26-5bb7-4498-b68d-a77a5eca2db2") + ) + (fp_text user "18x17 spacing" + (at 0 -12.3 0) + (layer "Dwgs.User") + (uuid "c7739134-97b1-47a2-aaaa-1ea206a5d031") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "offset: 4.7" + (at 0 -3 0) + (layer "Dwgs.User") + (uuid "efea3dbf-cd48-420e-a4a1-211a6199ed00") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "switch center" + (at 0 -6.25 0) + (layer "Cmts.User") + (uuid "21a4d899-c249-4302-a5c6-e8d6104a387a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "19.05 spacing" + (at 0 -13.4 0) + (layer "Eco1.User") + (uuid "17a34311-dfee-4cce-a168-98e43c3c11e6") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "B.Fab") + (uuid "6bde948a-9341-455b-a9e6-5b32a818514c") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "1" smd roundrect + (at -2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 3 "+5V") + (pinfunction "VDD") + (pintype "power_in") + (uuid "dc6759a4-089b-47a4-8563-6977a9d7d76c") + ) + (pad "2" smd roundrect + (at -2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 162 "Net-(LED28-DOUT)") + (pinfunction "DOUT") + (pintype "output") + (uuid "e2e23df4-0857-4518-a320-4da5edd30be7") + ) + (pad "3" smd roundrect + (at 2.725 -0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 161 "Net-(LED27-DOUT)") + (pinfunction "DIN") + (pintype "input") + (uuid "82657391-f9ba-4f57-bd78-436c08da1f5a") + ) + (pad "4" smd roundrect + (at 2.725 0.75 90) + (size 0.82 1.35) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (chamfer_ratio 0.5) + (chamfer bottom_left) + (net 1 "GND") + (pinfunction "VSS") + (pintype "power_in") + (uuid "9aef057b-879b-4c9d-8192-e8cf43733438") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/LED_SK6812MINI-E.step" + (offset + (xyz 0 -5.08 -1.76) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (footprint "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (layer "B.Cu") + (uuid "ff83d47c-b711-4775-8c41-3b97cac217e1") + (at 109.145 116.6812 180) + (descr "Footprint for Cherry MX style switches with Kailh hotswap socket") + (property "Reference" "KEY_W1" + (at -4.25 1.75 0) + (layer "B.SilkS") + (uuid "92cfcd98-46dc-4c0e-b398-599beacea21f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 0 0) + (layer "B.Fab") + (uuid "b51cedf8-226c-40f5-a06e-e1979c052d84") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "b1cd2c17-c6ca-46ef-9410-d3340dd38bd8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (layer "B.Fab") + (hide yes) + (uuid "ad476a6c-b9fa-402a-96d5-8f04ad626314") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (path "/1d905906-6e74-4741-8b2e-53dc470a7c79/b15979eb-cf5e-4f45-86fb-48bdb423a7ca") + (sheetname "/Keymatrix/") + (sheetfile "matrixrot.kicad_sch") + (attr smd) + (fp_line + (start 6.085176 3.95022) + (end 6.085176 4.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "78f91f0b-3e5f-412a-8d1c-8d75b4f22f9e") + ) + (fp_line + (start 6.085176 1.10022) + (end 6.085176 0.86022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "225df50a-d1aa-4973-a17f-a3709f2d563b") + ) + (fp_line + (start 4.085176 6.75022) + (end -1.814824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "0f2fb720-c2d2-4ea7-8132-44325808925e") + ) + (fp_line + (start -3.314824 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9840734e-8f19-4989-a339-cec01ece356a") + ) + (fp_line + (start -4.364824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "24e06a70-5f2e-457b-a497-94c8ae74613c") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.52022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "3e931389-bccc-432b-b02a-04613892182d") + ) + (fp_line + (start -4.864824 3.67022) + (end -4.864824 3.20022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "9f4a16a3-2316-4062-a8ad-0814a0f39de5") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "f39eec6c-6451-4dc8-a23d-f9f32c7f2f11") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670693 2.183637) + (end 0.2 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "26410e14-1a46-43fc-bfd9-3f06b614e1af") + ) + (fp_arc + (start -4.864824 3.20022) + (mid -4.718377 2.846667) + (end -4.364824 2.70022) + (stroke + (width 0.15) + (type solid) + ) + (layer "B.SilkS") + (uuid "93335bf0-3de2-481c-86f1-e84d2b78bf8c") + ) + (fp_rect + (start -9.525 9.525) + (end 9.525 -9.525) + (stroke + (width 0.1) + (type default) + ) + (fill no) + (layer "Dwgs.User") + (uuid "bbf8ff3b-c359-4362-83f3-434921066fb3") + ) + (fp_line + (start 7 -6.5) + (end 7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "72d34b44-8aec-4182-a04a-b275832b1d4e") + ) + (fp_line + (start 6.5 7) + (end -6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "461f2b86-e2ef-4ce9-98ae-ae3a91973639") + ) + (fp_line + (start -6.5 -7) + (end 6.5 -7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "4880a985-b009-48ee-bb2e-2927493184a4") + ) + (fp_line + (start -7 6.5) + (end -7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "f86fa520-6f8a-4a5f-b76b-c6e66d291c3e") + ) + (fp_arc + (start 7 6.5) + (mid 6.853553 6.853553) + (end 6.5 7) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "299a10de-ca7a-438d-b4c3-8a6b72422bdf") + ) + (fp_arc + (start 6.5 -7) + (mid 6.853553 -6.853553) + (end 7 -6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "6ad81c61-2bdb-4e51-83c2-b63c01b335ba") + ) + (fp_arc + (start -6.5 7) + (mid -6.853553 6.853553) + (end -7 6.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "35200e6d-5d88-4c5c-a3c7-b0f6fe6182ac") + ) + (fp_arc + (start -6.997236 -6.498884) + (mid -6.850789 -6.852437) + (end -6.497236 -6.998884) + (stroke + (width 0.05) + (type solid) + ) + (layer "Eco2.User") + (uuid "1605d8f8-1e0b-4112-80b2-e3d325917642") + ) + (fp_line + (start 8.685176 3.75022) + (end 8.685176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9e518ba6-8ce6-498d-91d7-26a159160f89") + ) + (fp_line + (start 8.685176 1.30022) + (end 6.085176 1.30022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e8568182-ce19-4377-a946-bf55689a7b37") + ) + (fp_line + (start 6.085176 3.75022) + (end 8.685176 3.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "519cc495-09d7-4064-b644-306165aa630b") + ) + (fp_line + (start 6.085176 3.75022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0383285a-f867-4ac9-9753-f42ff4468e03") + ) + (fp_line + (start 6.085176 1.30022) + (end 6.085176 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fe620cbc-6060-4641-8a56-1eced1db6b9f") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5113c296-fa87-462d-bb8c-7622fa774c65") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "8b043b47-6629-470b-b5db-b6b844ceaf20") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "01192d92-e58f-43a9-a755-cc12c7ac554d") + ) + (fp_line + (start -4.864824 3.87022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "21fe0886-fbd7-44d0-a616-089fef278c57") + ) + (fp_line + (start -4.864824 3.87022) + (end -7.414824 3.87022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0fe9a6d2-9928-43dc-a2fe-fee933fbe5c0") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d02b752f-01a2-47df-b432-29b7ae169db2") + ) + (fp_line + (start -7.414824 6.32022) + (end -4.864824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "97af1ab5-a06a-4f73-91e9-246799dd1769") + ) + (fp_line + (start -7.414824 3.87022) + (end -7.414824 6.32022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "51338307-42be-4e81-8911-092c0b7c081c") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f85e8075-8b5c-4798-a03d-e0c6fbd5c6ed") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "d59e3ad2-ae8b-4a94-9127-03bf20049466") + ) + (fp_rect + (start -7 7) + (end 7 -7) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "F.CrtYd") + (uuid "38f1f5ce-8e91-47ff-aadf-d9c25836bbdd") + ) + (fp_line + (start 6.085176 0.86022) + (end 6.085176 4.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "65fa0fe6-3caa-4955-8dbb-30abf7559873") + ) + (fp_line + (start 6.085176 0.86022) + (end 2.494322 0.86022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "9d534932-6894-4a09-a768-f29f587cf648") + ) + (fp_line + (start 4.085176 6.75022) + (end -4.864824 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "6ab90945-dc9d-45a2-8541-8b83c6f337e9") + ) + (fp_line + (start -4.864824 6.75022) + (end -4.864824 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "5ebf649e-7f54-4577-a8da-4cd9a7f8c71d") + ) + (fp_line + (start -4.864824 2.70022) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "4b713d91-cae2-4fb2-9c89-b1eeaa517586") + ) + (fp_arc + (start 6.085176 4.75022) + (mid 5.499389 6.164432) + (end 4.085176 6.75022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "7fa37df1-efd7-4999-a2d5-aa007f9f59a9") + ) + (fp_arc + (start 2.494322 0.86022) + (mid 1.670503 2.1834) + (end 0.2 2.70022) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.Fab") + (uuid "8fe0025b-4e6b-4536-9690-0d8c0350a4bd") + ) + (fp_text user "${REFERENCE}" + (at 0.5 4.5 0) + (layer "B.Fab") + (uuid "cbbbbc92-5adf-4b6f-a240-43ebc7a5e786") + (effects + (font + (size 0.8 0.8) + (thickness 0.12) + ) + (justify mirror) + ) + ) + (pad "" np_thru_hole circle + (at -5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f1ba6701-826a-42c2-991d-545577971a55") + ) + (pad "" np_thru_hole circle + (at 0 0 180) + (size 3.9878 3.9878) + (drill 3.9878) + (layers "*.Cu" "*.Mask") + (uuid "f9c30450-546f-4583-99ab-7a14c41f1589") + ) + (pad "" np_thru_hole circle + (at 5.08 0 180) + (size 1.75 1.75) + (drill 1.75) + (layers "*.Cu" "*.Mask") + (uuid "f9f6be5d-34b6-4730-be7c-25a6d1c34a29") + ) + (pad "1" thru_hole circle + (at 3.81 2.54 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "c775f113-722b-49c3-a82e-d09c9047ade5") + ) + (pad "1" smd rect + (at 5.635 2.54) + (size 1.65 2.5) + (layers "B.Cu") + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "38fe194d-81c0-4432-a57b-727b99573f14") + ) + (pad "1" smd roundrect + (at 7.36 2.54 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 37 "/COL3") + (pinfunction "1") + (pintype "passive") + (uuid "90439ae9-391e-4079-bc09-c8165d8424fe") + ) + (pad "2" smd roundrect + (at -6.09 5.08 180) + (size 2.55 2.5) + (layers "B.Cu" "B.Mask" "B.Paste") + (roundrect_rratio 0.1) + (net 24 "Net-(D23-A)") + (pinfunction "2") + (pintype "passive") + (uuid "0c2e52db-37f8-4b81-ad2c-af86af40ef13") + ) + (pad "2" smd rect + (at -4.34 5.08 180) + (size 1.65 2.5) + (layers "B.Cu") + (net 24 "Net-(D23-A)") + (pinfunction "2") + (pintype "passive") + (uuid "c5303f2d-25fd-4025-b367-42e0294fd023") + ) + (pad "2" thru_hole circle + (at -2.54 5.08 180) + (size 3.3 3.3) + (drill 3) + (property pad_prop_mechanical) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 24 "Net-(D23-A)") + (pinfunction "2") + (pintype "passive") + (uuid "9b58eebe-0407-4546-a1c2-6030cbad8a25") + ) + (embedded_fonts no) + (model "${KICAD8_3RD_PARTY}/3dmodels/com_github_ebastler_marbastlib/HS_CPG151101S11_MX.step" + (offset + (xyz -4.82 6.74 1.82) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 180 0 0) + ) + ) + ) + (gr_line + (start 51.995 54.76875) + (end 356.795 54.76875) + (stroke + (width 0.1) + (type default) + ) + (layer "F.SilkS") + (uuid "5649d8f6-0a66-43ec-867a-a3bbb2b7936a") + ) + (gr_line + (start 51.995 80.9625) + (end 356.795 80.9625) + (stroke + (width 0.1) + (type default) + ) + (layer "F.SilkS") + (uuid "c60dbf18-5f68-4fee-adae-f72d733ecf3d") + ) + (gr_line + (start 51.995 80.9625) + (end 51.995 54.76875) + (stroke + (width 0.1) + (type default) + ) + (layer "F.SilkS") + (uuid "d35359e1-136b-4fdd-918a-614d4e5f45de") + ) + (gr_line + (start 356.795 54.76875) + (end 356.795 80.9625) + (stroke + (width 0.1) + (type default) + ) + (layer "F.SilkS") + (uuid "f83e8eed-b2a0-4a75-9444-74a22d6e3c83") + ) + (gr_line + (start 44.85125 47.625) + (end 44.85125 190.5) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "1bf80608-3a6e-4ab1-8545-5e816e46f191") + ) + (gr_line + (start 44.85125 190.5) + (end 363.93875 190.5) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "6eaa6037-100f-405f-ae8c-02ac3c7e9dc0") + ) + (gr_line + (start 363.93875 190.5) + (end 363.93875 47.625) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "7819ba9e-778a-4741-be02-0f3594d2606e") + ) + (gr_line + (start 363.93875 47.625) + (end 44.85125 47.625) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "bbafe562-c972-4550-9499-3ae9fc79fd52") + ) + (gr_text "Oliver Nolan Adrian\nChristian Jason" + (at 77.30125 60.925 0) + (layer "F.SilkS") + (uuid "617de194-5d03-4c18-acf4-1260665cca1b") + (effects + (font + (face "Ndot 57") + (size 1 1) + (thickness 0.1524) + ) + (justify bottom) + ) + (render_cache "Oliver Nolan Adrian\nChristian Jason" 0 + (polygon + (pts + (xy 70.447857 58.234804) (xy 70.479384 58.227539) (xy 70.504108 58.206915) (xy 70.51228 58.192614) + (xy 70.516928 58.176337) (xy 70.517832 58.164829) (xy 70.510567 58.133302) (xy 70.489944 58.108577) + (xy 70.475642 58.100406) (xy 70.459365 58.095758) (xy 70.447857 58.094853) (xy 70.41633 58.102118) + (xy 70.391606 58.122742) (xy 70.383434 58.137043) (xy 70.378786 58.15332) (xy 70.377881 58.164829) + (xy 70.385147 58.196355) (xy 70.40577 58.22108) (xy 70.420071 58.229251) (xy 70.436348 58.233899) + ) + ) + (polygon + (pts + (xy 70.237869 58.86434) (xy 70.245134 58.895867) (xy 70.265758 58.920591) (xy 70.280059 58.928763) + (xy 70.296336 58.933411) (xy 70.307845 58.934316) (xy 70.339384 58.92705) (xy 70.364139 58.906421) + (xy 70.37232 58.892122) (xy 70.376975 58.875848) (xy 70.377881 58.86434) (xy 70.370617 58.832841) + (xy 70.34999 58.808116) (xy 70.335681 58.799934) (xy 70.319398 58.795276) (xy 70.307845 58.794364) + (xy 70.276318 58.80163) (xy 70.251594 58.822253) (xy 70.243422 58.836555) (xy 70.238774 58.852832) + ) + ) + (polygon + (pts + (xy 70.237869 58.725244) (xy 70.245134 58.756381) (xy 70.265792 58.78083) (xy 70.28016 58.78892) + (xy 70.296517 58.793499) (xy 70.307845 58.794364) (xy 70.339554 58.787103) (xy 70.364349 58.766526) + (xy 70.372473 58.752323) (xy 70.377044 58.736173) (xy 70.377881 58.725244) (xy 70.370617 58.694173) + (xy 70.349948 58.669735) (xy 70.335564 58.661638) (xy 70.319193 58.657053) (xy 70.307845 58.656184) + (xy 70.276148 58.663444) (xy 70.251378 58.684012) (xy 70.243263 58.698211) (xy 70.238701 58.714352) + ) + ) + (polygon + (pts + (xy 70.237869 58.586209) (xy 70.245134 58.617735) (xy 70.265758 58.64246) (xy 70.280059 58.650631) + (xy 70.296336 58.655279) (xy 70.307845 58.656184) (xy 70.339384 58.648919) (xy 70.364139 58.62829) + (xy 70.37232 58.61399) (xy 70.376975 58.597716) (xy 70.377881 58.586209) (xy 70.370617 58.554697) + (xy 70.349985 58.529942) (xy 70.335677 58.52175) (xy 70.319396 58.517085) (xy 70.307845 58.516172) + (xy 70.276346 58.523436) (xy 70.251621 58.544063) (xy 70.243439 58.558373) (xy 70.23878 58.574656) + ) + ) + (polygon + (pts + (xy 70.237869 58.44583) (xy 70.245134 58.477539) (xy 70.265736 58.50237) (xy 70.280006 58.510573) + (xy 70.296246 58.515249) (xy 70.307845 58.516172) (xy 70.339328 58.508903) (xy 70.364062 58.488252) + (xy 70.372261 58.473913) (xy 70.376947 58.457583) (xy 70.377881 58.44583) (xy 70.370617 58.414122) + (xy 70.350026 58.389309) (xy 70.335753 58.381103) (xy 70.319511 58.37642) (xy 70.307845 58.375488) + (xy 70.276346 58.382752) (xy 70.251621 58.403379) (xy 70.243439 58.417689) (xy 70.23878 58.433972) + (xy 70.237869 58.445525) + ) + ) + (polygon + (pts + (xy 70.237869 58.305146) (xy 70.245134 58.336855) (xy 70.265736 58.361687) (xy 70.280006 58.369889) + (xy 70.296246 58.374565) (xy 70.307845 58.375488) (xy 70.339328 58.368219) (xy 70.364062 58.347568) + (xy 70.372261 58.33323) (xy 70.376947 58.316899) (xy 70.377881 58.305146) (xy 70.370617 58.273492) + (xy 70.349999 58.248641) (xy 70.335715 58.240421) (xy 70.319463 58.235732) (xy 70.307845 58.234804) + (xy 70.276402 58.24207) (xy 70.251692 58.262715) (xy 70.243492 58.277059) (xy 70.238805 58.293387) + ) + ) + (polygon + (pts + (xy 70.377881 59.004352) (xy 70.385147 59.036311) (xy 70.40568 59.061162) (xy 70.419906 59.069366) + (xy 70.436097 59.074054) (xy 70.447857 59.075) (xy 70.479384 59.067734) (xy 70.504108 59.047111) + (xy 70.51228 59.032809) (xy 70.516928 59.016532) (xy 70.517832 59.005024) (xy 70.510567 58.973052) + (xy 70.490029 58.948171) (xy 70.475804 58.939958) (xy 70.459615 58.935263) (xy 70.447857 58.934316) + (xy 70.416358 58.94158) (xy 70.391633 58.962207) (xy 70.383451 58.976516) (xy 70.378793 58.992799) + ) + ) + (polygon + (pts + (xy 70.517832 59.004352) (xy 70.525096 59.036283) (xy 70.545633 59.061135) (xy 70.559867 59.069348) + (xy 70.576065 59.074047) (xy 70.587869 59.075) (xy 70.619396 59.067734) (xy 70.64412 59.047111) + (xy 70.652292 59.032809) (xy 70.65694 59.016532) (xy 70.657845 59.005024) (xy 70.650579 58.973052) + (xy 70.630041 58.948171) (xy 70.615816 58.939958) (xy 70.599627 58.935263) (xy 70.587869 58.934316) + (xy 70.556358 58.94158) (xy 70.531602 58.962212) (xy 70.523411 58.97652) (xy 70.518745 58.9928) + ) + ) + (polygon + (pts + (xy 70.517832 58.164829) (xy 70.525096 58.196327) (xy 70.545723 58.221052) (xy 70.560033 58.229234) + (xy 70.576316 58.233893) (xy 70.587869 58.234804) (xy 70.619396 58.227539) (xy 70.64412 58.206915) + (xy 70.652292 58.192614) (xy 70.65694 58.176337) (xy 70.657845 58.164829) (xy 70.650579 58.133302) + (xy 70.629956 58.108577) (xy 70.615655 58.100406) (xy 70.599378 58.095758) (xy 70.587869 58.094853) + (xy 70.55633 58.102118) (xy 70.531575 58.122747) (xy 70.523393 58.137047) (xy 70.518739 58.153321) + ) + ) + (polygon + (pts + (xy 70.657845 59.004352) (xy 70.665109 59.036283) (xy 70.685645 59.061135) (xy 70.69988 59.069348) + (xy 70.716077 59.074047) (xy 70.727881 59.075) (xy 70.759408 59.067734) (xy 70.784132 59.047111) + (xy 70.792304 59.032809) (xy 70.796952 59.016532) (xy 70.797857 59.005024) (xy 70.790592 58.973052) + (xy 70.770053 58.948171) (xy 70.755829 58.939958) (xy 70.73964 58.935263) (xy 70.727881 58.934316) + (xy 70.69637 58.94158) (xy 70.671614 58.962212) (xy 70.663423 58.97652) (xy 70.658758 58.9928) + ) + ) + (polygon + (pts + (xy 70.657845 58.164829) (xy 70.665109 58.196327) (xy 70.685736 58.221052) (xy 70.700045 58.229234) + (xy 70.716328 58.233893) (xy 70.727881 58.234804) (xy 70.759408 58.227539) (xy 70.784132 58.206915) + (xy 70.792304 58.192614) (xy 70.796952 58.176337) (xy 70.797857 58.164829) (xy 70.790592 58.133302) + (xy 70.769968 58.108577) (xy 70.755667 58.100406) (xy 70.73939 58.095758) (xy 70.727881 58.094853) + (xy 70.696342 58.102118) (xy 70.671587 58.122747) (xy 70.663406 58.137047) (xy 70.658751 58.153321) + ) + ) + (polygon + (pts + (xy 70.797857 58.86434) (xy 70.805122 58.895867) (xy 70.825746 58.920591) (xy 70.840047 58.928763) + (xy 70.856324 58.933411) (xy 70.867832 58.934316) (xy 70.899372 58.92705) (xy 70.924127 58.906421) + (xy 70.932308 58.892122) (xy 70.936963 58.875848) (xy 70.937869 58.86434) (xy 70.930605 58.832841) + (xy 70.909978 58.808116) (xy 70.895668 58.799934) (xy 70.879385 58.795276) (xy 70.867832 58.794364) + (xy 70.836306 58.80163) (xy 70.811581 58.822253) (xy 70.80341 58.836555) (xy 70.798761 58.852832) + ) + ) + (polygon + (pts + (xy 70.797857 58.725244) (xy 70.805122 58.756381) (xy 70.82578 58.78083) (xy 70.840148 58.78892) + (xy 70.856505 58.793499) (xy 70.867832 58.794364) (xy 70.899542 58.787103) (xy 70.924337 58.766526) + (xy 70.932461 58.752323) (xy 70.937032 58.736173) (xy 70.937869 58.725244) (xy 70.930605 58.694173) + (xy 70.909935 58.669735) (xy 70.895552 58.661638) (xy 70.879181 58.657053) (xy 70.867832 58.656184) + (xy 70.836136 58.663444) (xy 70.811366 58.684012) (xy 70.803251 58.698211) (xy 70.798689 58.714352) + ) + ) + (polygon + (pts + (xy 70.797857 58.586209) (xy 70.805122 58.617735) (xy 70.825746 58.64246) (xy 70.840047 58.650631) + (xy 70.856324 58.655279) (xy 70.867832 58.656184) (xy 70.899372 58.648919) (xy 70.924127 58.62829) + (xy 70.932308 58.61399) (xy 70.936963 58.597716) (xy 70.937869 58.586209) (xy 70.930605 58.554697) + (xy 70.909972 58.529942) (xy 70.895665 58.52175) (xy 70.879384 58.517085) (xy 70.867832 58.516172) + (xy 70.836334 58.523436) (xy 70.811609 58.544063) (xy 70.803427 58.558373) (xy 70.798768 58.574656) + ) + ) + (polygon + (pts + (xy 70.797857 58.44583) (xy 70.805122 58.477539) (xy 70.825724 58.50237) (xy 70.839994 58.510573) + (xy 70.856234 58.515249) (xy 70.867832 58.516172) (xy 70.899316 58.508903) (xy 70.92405 58.488252) + (xy 70.932249 58.473913) (xy 70.936935 58.457583) (xy 70.937869 58.44583) (xy 70.930605 58.414122) + (xy 70.910014 58.389309) (xy 70.89574 58.381103) (xy 70.879499 58.37642) (xy 70.867832 58.375488) + (xy 70.836334 58.382752) (xy 70.811609 58.403379) (xy 70.803427 58.417689) (xy 70.798768 58.433972) + (xy 70.797857 58.445525) + ) + ) + (polygon + (pts + (xy 70.797857 58.305146) (xy 70.805122 58.336855) (xy 70.825724 58.361687) (xy 70.839994 58.369889) + (xy 70.856234 58.374565) (xy 70.867832 58.375488) (xy 70.899316 58.368219) (xy 70.92405 58.347568) + (xy 70.932249 58.33323) (xy 70.936935 58.316899) (xy 70.937869 58.305146) (xy 70.930605 58.273492) + (xy 70.909986 58.248641) (xy 70.895703 58.240421) (xy 70.879451 58.235732) (xy 70.867832 58.234804) + (xy 70.836389 58.24207) (xy 70.81168 58.262715) (xy 70.803479 58.277059) (xy 70.798793 58.293387) + ) + ) + (polygon + (pts + (xy 71.147063 58.234804) (xy 71.115564 58.242068) (xy 71.090839 58.262695) (xy 71.082657 58.277005) + (xy 71.077999 58.293288) (xy 71.077087 58.304841) (xy 71.084353 58.336368) (xy 71.104976 58.361092) + (xy 71.119278 58.369264) (xy 71.135555 58.373912) (xy 71.147063 58.374816) (xy 71.178602 58.367551) + (xy 71.203357 58.346922) (xy 71.211539 58.332622) (xy 71.216194 58.316348) (xy 71.2171 58.304841) + (xy 71.209836 58.273329) (xy 71.189203 58.248574) (xy 71.174895 58.240382) (xy 71.158615 58.235717) + ) + ) + (polygon + (pts + (xy 71.077087 59.004352) (xy 71.084353 59.036311) (xy 71.104886 59.061162) (xy 71.119112 59.069366) + (xy 71.135304 59.074054) (xy 71.147063 59.075) (xy 71.178602 59.067734) (xy 71.203357 59.047105) + (xy 71.211539 59.032806) (xy 71.216194 59.016531) (xy 71.2171 59.005024) (xy 71.209836 58.973081) + (xy 71.189294 58.948198) (xy 71.175061 58.939975) (xy 71.158866 58.93527) (xy 71.147063 58.934316) + (xy 71.115564 58.94158) (xy 71.090839 58.962207) (xy 71.082657 58.976516) (xy 71.077999 58.992799) + ) + ) + (polygon + (pts + (xy 71.077087 58.86434) (xy 71.084353 58.895867) (xy 71.104976 58.920591) (xy 71.119278 58.928763) + (xy 71.135555 58.933411) (xy 71.147063 58.934316) (xy 71.178602 58.92705) (xy 71.203357 58.906421) + (xy 71.211539 58.892122) (xy 71.216194 58.875848) (xy 71.2171 58.86434) (xy 71.209836 58.832841) + (xy 71.189209 58.808116) (xy 71.174899 58.799934) (xy 71.158616 58.795276) (xy 71.147063 58.794364) + (xy 71.115536 58.80163) (xy 71.090812 58.822253) (xy 71.08264 58.836555) (xy 71.077992 58.852832) + ) + ) + (polygon + (pts + (xy 71.077087 58.725244) (xy 71.084353 58.756381) (xy 71.10501 58.78083) (xy 71.119379 58.78892) + (xy 71.135736 58.793499) (xy 71.147063 58.794364) (xy 71.178772 58.787103) (xy 71.203568 58.766526) + (xy 71.211692 58.752323) (xy 71.216262 58.736173) (xy 71.2171 58.725244) (xy 71.209836 58.694173) + (xy 71.189166 58.669735) (xy 71.174782 58.661638) (xy 71.158411 58.657053) (xy 71.147063 58.656184) + (xy 71.115366 58.663444) (xy 71.090596 58.684012) (xy 71.082482 58.698211) (xy 71.07792 58.714352) + ) + ) + (polygon + (pts + (xy 71.077087 58.586209) (xy 71.084353 58.617735) (xy 71.104976 58.64246) (xy 71.119278 58.650631) + (xy 71.135555 58.655279) (xy 71.147063 58.656184) (xy 71.178602 58.648919) (xy 71.203357 58.62829) + (xy 71.211539 58.61399) (xy 71.216194 58.597716) (xy 71.2171 58.586209) (xy 71.209836 58.554697) + (xy 71.189203 58.529942) (xy 71.174895 58.52175) (xy 71.158615 58.517085) (xy 71.147063 58.516172) + (xy 71.115564 58.523436) (xy 71.090839 58.544063) (xy 71.082657 58.558373) (xy 71.077999 58.574656) + ) + ) + (polygon + (pts + (xy 71.077087 58.445525) (xy 71.084353 58.47735) (xy 71.104954 58.502296) (xy 71.119206 58.510534) + (xy 71.135423 58.515237) (xy 71.147063 58.516172) (xy 71.178463 58.508904) (xy 71.203187 58.488235) + (xy 71.211416 58.47386) (xy 71.216137 58.45749) (xy 71.2171 58.445525) (xy 71.209836 58.413715) + (xy 71.189225 58.388738) (xy 71.174967 58.38048) (xy 71.158747 58.37576) (xy 71.147063 58.374816) + (xy 71.115703 58.382082) (xy 71.091009 58.40275) (xy 71.08278 58.417135) (xy 71.078055 58.433514) + ) + ) + (polygon + (pts + (xy 71.077087 58.164829) (xy 71.084353 58.196355) (xy 71.104976 58.22108) (xy 71.119278 58.229251) + (xy 71.135555 58.233899) (xy 71.147063 58.234804) (xy 71.178602 58.227539) (xy 71.203357 58.20691) + (xy 71.211539 58.19261) (xy 71.216194 58.176336) (xy 71.2171 58.164829) (xy 71.209836 58.13333) + (xy 71.189209 58.108605) (xy 71.174899 58.100423) (xy 71.158616 58.095764) (xy 71.147063 58.094853) + (xy 71.115536 58.102118) (xy 71.090812 58.122742) (xy 71.08264 58.137043) (xy 71.077992 58.15332) + ) + ) + (polygon + (pts + (xy 71.2171 59.004352) (xy 71.224365 59.036311) (xy 71.244898 59.061162) (xy 71.259124 59.069366) + (xy 71.275316 59.074054) (xy 71.287075 59.075) (xy 71.318602 59.067734) (xy 71.343326 59.047111) + (xy 71.351498 59.032809) (xy 71.356146 59.016532) (xy 71.357051 59.005024) (xy 71.349786 58.973052) + (xy 71.329247 58.948171) (xy 71.315023 58.939958) (xy 71.298834 58.935263) (xy 71.287075 58.934316) + (xy 71.255576 58.94158) (xy 71.230852 58.962207) (xy 71.22267 58.976516) (xy 71.218011 58.992799) + ) + ) + (polygon + (pts + (xy 71.357051 59.004352) (xy 71.364315 59.036283) (xy 71.384851 59.061135) (xy 71.399086 59.069348) + (xy 71.415283 59.074047) (xy 71.427087 59.075) (xy 71.458614 59.067734) (xy 71.483339 59.047111) + (xy 71.49151 59.032809) (xy 71.496158 59.016532) (xy 71.497063 59.005024) (xy 71.489798 58.973052) + (xy 71.469259 58.948171) (xy 71.455035 58.939958) (xy 71.438846 58.935263) (xy 71.427087 58.934316) + (xy 71.395576 58.94158) (xy 71.370821 58.962212) (xy 71.362629 58.97652) (xy 71.357964 58.9928) + ) + ) + (polygon + (pts + (xy 71.497063 59.004352) (xy 71.504327 59.036283) (xy 71.524864 59.061135) (xy 71.539098 59.069348) + (xy 71.555296 59.074047) (xy 71.5671 59.075) (xy 71.598627 59.067734) (xy 71.623351 59.047111) + (xy 71.631523 59.032809) (xy 71.636171 59.016532) (xy 71.637075 59.005024) (xy 71.62981 58.973052) + (xy 71.609271 58.948171) (xy 71.595047 58.939958) (xy 71.578858 58.935263) (xy 71.5671 58.934316) + (xy 71.535588 58.94158) (xy 71.510833 58.962212) (xy 71.502641 58.97652) (xy 71.497976 58.9928) + ) + ) + (polygon + (pts + (xy 71.637075 59.004352) (xy 71.644341 59.036311) (xy 71.664874 59.061162) (xy 71.6791 59.069366) + (xy 71.695291 59.074054) (xy 71.707051 59.075) (xy 71.73859 59.067734) (xy 71.763345 59.047105) + (xy 71.771527 59.032806) (xy 71.776181 59.016531) (xy 71.777087 59.005024) (xy 71.769824 58.973081) + (xy 71.749282 58.948198) (xy 71.735049 58.939975) (xy 71.718854 58.93527) (xy 71.707051 58.934316) + (xy 71.675552 58.94158) (xy 71.650827 58.962207) (xy 71.642645 58.976516) (xy 71.637987 58.992799) + ) + ) + (polygon + (pts + (xy 71.986281 58.234804) (xy 72.017821 58.227539) (xy 72.042576 58.20691) (xy 72.050757 58.19261) + (xy 72.055412 58.176336) (xy 72.056318 58.164829) (xy 72.049054 58.13333) (xy 72.028427 58.108605) + (xy 72.014117 58.100423) (xy 71.997834 58.095764) (xy 71.986281 58.094853) (xy 71.954755 58.102118) + (xy 71.93003 58.122742) (xy 71.921859 58.137043) (xy 71.917211 58.15332) (xy 71.916306 58.164829) + (xy 71.923571 58.196355) (xy 71.944195 58.22108) (xy 71.958496 58.229251) (xy 71.974773 58.233899) + ) + ) + (polygon + (pts + (xy 71.916306 59.005024) (xy 71.923571 59.036551) (xy 71.944195 59.061275) (xy 71.958496 59.069447) + (xy 71.974773 59.074095) (xy 71.986281 59.075) (xy 72.017821 59.067734) (xy 72.042576 59.047105) + (xy 72.050757 59.032806) (xy 72.055412 59.016531) (xy 72.056318 59.005024) (xy 72.049054 58.973525) + (xy 72.028427 58.9488) (xy 72.014117 58.940618) (xy 71.997834 58.93596) (xy 71.986281 58.935048) + (xy 71.954755 58.942314) (xy 71.93003 58.962937) (xy 71.921859 58.977238) (xy 71.917211 58.993515) + ) + ) + (polygon + (pts + (xy 72.056318 59.005024) (xy 72.063583 59.036551) (xy 72.084207 59.061275) (xy 72.098508 59.069447) + (xy 72.114785 59.074095) (xy 72.126294 59.075) (xy 72.157821 59.067734) (xy 72.182545 59.047111) + (xy 72.190717 59.032809) (xy 72.195365 59.016532) (xy 72.196269 59.005024) (xy 72.189004 58.973497) + (xy 72.16838 58.948773) (xy 72.154079 58.940601) (xy 72.137802 58.935953) (xy 72.126294 58.935048) + (xy 72.094767 58.942314) (xy 72.070043 58.962937) (xy 72.061871 58.977238) (xy 72.057223 58.993515) + ) + ) + (polygon + (pts + (xy 72.056318 58.86434) (xy 72.063583 58.896178) (xy 72.084191 58.921155) (xy 72.09844 58.929402) + (xy 72.114655 58.934112) (xy 72.126294 58.935048) (xy 72.157654 58.927782) (xy 72.182348 58.907115) + (xy 72.190577 58.89273) (xy 72.195302 58.876351) (xy 72.196269 58.86434) (xy 72.189004 58.832502) + (xy 72.168397 58.807525) (xy 72.154147 58.799278) (xy 72.137933 58.794568) (xy 72.126294 58.793632) + (xy 72.094934 58.800898) (xy 72.070239 58.821565) (xy 72.062011 58.83595) (xy 72.057286 58.852329) + ) + ) + (polygon + (pts + (xy 72.056318 58.723656) (xy 72.063583 58.755183) (xy 72.084207 58.779907) (xy 72.098508 58.788079) + (xy 72.114785 58.792727) (xy 72.126294 58.793632) (xy 72.157821 58.786366) (xy 72.182545 58.765743) + (xy 72.190717 58.751442) (xy 72.195365 58.735165) (xy 72.196269 58.723656) (xy 72.189004 58.692129) + (xy 72.16838 58.667405) (xy 72.154079 58.659233) (xy 72.137802 58.654585) (xy 72.126294 58.653681) + (xy 72.094767 58.660946) (xy 72.070043 58.681569) (xy 72.061871 58.695871) (xy 72.057223 58.712148) + ) + ) + (polygon + (pts + (xy 72.056318 58.583949) (xy 72.063583 58.615346) (xy 72.084227 58.640005) (xy 72.09855 58.648158) + (xy 72.114854 58.652789) (xy 72.126294 58.653681) (xy 72.157849 58.646418) (xy 72.182589 58.62581) + (xy 72.190752 58.611534) (xy 72.195382 58.595296) (xy 72.196269 58.583949) (xy 72.189004 58.553864) + (xy 72.168049 58.529526) (xy 72.153487 58.521453) (xy 72.136915 58.51694) (xy 72.126294 58.516172) + (xy 72.094795 58.523436) (xy 72.07007 58.544063) (xy 72.061888 58.558373) (xy 72.05723 58.574656) + (xy 72.056318 58.586209) + ) + ) + (polygon + (pts + (xy 72.056318 58.445525) (xy 72.063583 58.47735) (xy 72.084185 58.502296) (xy 72.098436 58.510534) + (xy 72.114653 58.515237) (xy 72.126294 58.516172) (xy 72.157681 58.508904) (xy 72.182375 58.488241) + (xy 72.190594 58.473864) (xy 72.195309 58.457491) (xy 72.196269 58.445525) (xy 72.189004 58.413687) + (xy 72.168397 58.38871) (xy 72.154147 58.380463) (xy 72.137933 58.375753) (xy 72.126294 58.374816) + (xy 72.094934 58.382082) (xy 72.070239 58.40275) (xy 72.062011 58.417135) (xy 72.057286 58.433514) + ) + ) + (polygon + (pts + (xy 72.056318 58.304841) (xy 72.063583 58.336368) (xy 72.084207 58.361092) (xy 72.098508 58.369264) + (xy 72.114785 58.373912) (xy 72.126294 58.374816) (xy 72.157821 58.367551) (xy 72.182545 58.346927) + (xy 72.190717 58.332626) (xy 72.195365 58.316349) (xy 72.196269 58.304841) (xy 72.189004 58.273301) + (xy 72.168375 58.248546) (xy 72.154075 58.240365) (xy 72.137801 58.23571) (xy 72.126294 58.234804) + (xy 72.094795 58.242068) (xy 72.07007 58.262695) (xy 72.061888 58.277005) (xy 72.05723 58.293288) + ) + ) + (polygon + (pts + (xy 72.056318 58.164829) (xy 72.063583 58.196355) (xy 72.084207 58.22108) (xy 72.098508 58.229251) + (xy 72.114785 58.233899) (xy 72.126294 58.234804) (xy 72.157821 58.227539) (xy 72.182545 58.206915) + (xy 72.190717 58.192614) (xy 72.195365 58.176337) (xy 72.196269 58.164829) (xy 72.189004 58.133302) + (xy 72.16838 58.108577) (xy 72.154079 58.100406) (xy 72.137802 58.095758) (xy 72.126294 58.094853) + (xy 72.094767 58.102118) (xy 72.070043 58.122742) (xy 72.061871 58.137043) (xy 72.057223 58.15332) + ) + ) + (polygon + (pts + (xy 72.196269 59.005024) (xy 72.203533 59.036523) (xy 72.22416 59.061248) (xy 72.23847 59.06943) + (xy 72.254753 59.074088) (xy 72.266306 59.075) (xy 72.297833 59.067734) (xy 72.322557 59.047111) + (xy 72.330729 59.032809) (xy 72.335377 59.016532) (xy 72.336281 59.005024) (xy 72.329016 58.973497) + (xy 72.308393 58.948773) (xy 72.294091 58.940601) (xy 72.277814 58.935953) (xy 72.266306 58.935048) + (xy 72.234767 58.942314) (xy 72.210012 58.962943) (xy 72.20183 58.977242) (xy 72.197175 58.993516) + ) + ) + (polygon + (pts + (xy 72.196269 58.164829) (xy 72.203533 58.196327) (xy 72.22416 58.221052) (xy 72.23847 58.229234) + (xy 72.254753 58.233893) (xy 72.266306 58.234804) (xy 72.297833 58.227539) (xy 72.322557 58.206915) + (xy 72.330729 58.192614) (xy 72.335377 58.176337) (xy 72.336281 58.164829) (xy 72.329016 58.133302) + (xy 72.308393 58.108577) (xy 72.294091 58.100406) (xy 72.277814 58.095758) (xy 72.266306 58.094853) + (xy 72.234767 58.102118) (xy 72.210012 58.122747) (xy 72.20183 58.137047) (xy 72.197175 58.153321) + ) + ) + (polygon + (pts + (xy 72.546086 58.234804) (xy 72.514643 58.24207) (xy 72.489934 58.262715) (xy 72.481733 58.277059) + (xy 72.477047 58.293387) (xy 72.476111 58.305146) (xy 72.483376 58.336855) (xy 72.503977 58.361687) + (xy 72.518247 58.369889) (xy 72.534488 58.374565) (xy 72.546086 58.375488) (xy 72.57757 58.368219) + (xy 72.602303 58.347568) (xy 72.610503 58.33323) (xy 72.615188 58.316899) (xy 72.616123 58.305146) + (xy 72.608859 58.273492) (xy 72.58824 58.248641) (xy 72.573956 58.240421) (xy 72.557705 58.235732) + ) + ) + (polygon + (pts + (xy 72.476111 58.723656) (xy 72.483376 58.755183) (xy 72.503999 58.779907) (xy 72.518301 58.788079) + (xy 72.534578 58.792727) (xy 72.546086 58.793632) (xy 72.577626 58.786366) (xy 72.60238 58.765737) + (xy 72.610562 58.751438) (xy 72.615217 58.735164) (xy 72.616123 58.723656) (xy 72.608859 58.692157) + (xy 72.588232 58.667432) (xy 72.573922 58.65925) (xy 72.557639 58.654592) (xy 72.546086 58.653681) + (xy 72.514559 58.660946) (xy 72.489835 58.681569) (xy 72.481663 58.695871) (xy 72.477015 58.712148) + ) + ) + (polygon + (pts + (xy 72.476111 58.58456) (xy 72.483376 58.615697) (xy 72.504033 58.640146) (xy 72.518402 58.648236) + (xy 72.534759 58.652815) (xy 72.546086 58.653681) (xy 72.577795 58.646419) (xy 72.602591 58.625842) + (xy 72.610715 58.611639) (xy 72.615286 58.595489) (xy 72.616123 58.58456) (xy 72.608859 58.553489) + (xy 72.588189 58.529052) (xy 72.573805 58.520954) (xy 72.557434 58.516369) (xy 72.546086 58.5155) + (xy 72.514389 58.52276) (xy 72.489619 58.543328) (xy 72.481505 58.557527) (xy 72.476943 58.573668) + ) + ) + (polygon + (pts + (xy 72.476111 58.445525) (xy 72.483376 58.477052) (xy 72.503999 58.501776) (xy 72.518301 58.509948) + (xy 72.534578 58.514596) (xy 72.546086 58.5155) (xy 72.577626 58.508235) (xy 72.60238 58.487606) + (xy 72.610562 58.473306) (xy 72.615217 58.457032) (xy 72.616123 58.445525) (xy 72.608859 58.414013) + (xy 72.588226 58.389258) (xy 72.573918 58.381066) (xy 72.557638 58.376401) (xy 72.546086 58.375488) + (xy 72.514587 58.382752) (xy 72.489862 58.403379) (xy 72.48168 58.417689) (xy 72.477022 58.433972) + ) + ) + (polygon + (pts + (xy 72.476111 58.164829) (xy 72.483376 58.196355) (xy 72.503999 58.22108) (xy 72.518301 58.229251) + (xy 72.534578 58.233899) (xy 72.546086 58.234804) (xy 72.577626 58.227539) (xy 72.60238 58.20691) + (xy 72.610562 58.19261) (xy 72.615217 58.176336) (xy 72.616123 58.164829) (xy 72.608859 58.13333) + (xy 72.588232 58.108605) (xy 72.573922 58.100423) (xy 72.557639 58.095764) (xy 72.546086 58.094853) + (xy 72.514559 58.102118) (xy 72.489835 58.122742) (xy 72.481663 58.137043) (xy 72.477015 58.15332) + ) + ) + (polygon + (pts + (xy 72.616123 58.86434) (xy 72.623388 58.896178) (xy 72.643995 58.921155) (xy 72.658245 58.929402) + (xy 72.674459 58.934112) (xy 72.686098 58.935048) (xy 72.717458 58.927782) (xy 72.742153 58.907115) + (xy 72.750381 58.89273) (xy 72.755106 58.876351) (xy 72.756074 58.86434) (xy 72.748809 58.832502) + (xy 72.728201 58.807525) (xy 72.713952 58.799278) (xy 72.697737 58.794568) (xy 72.686098 58.793632) + (xy 72.654738 58.800898) (xy 72.630044 58.821565) (xy 72.621815 58.83595) (xy 72.61709 58.852329) + ) + ) + (polygon + (pts + (xy 72.756074 59.005024) (xy 72.763338 59.036523) (xy 72.783965 59.061248) (xy 72.798275 59.06943) + (xy 72.814558 59.074088) (xy 72.826111 59.075) (xy 72.857637 59.067734) (xy 72.882362 59.047111) + (xy 72.890533 59.032809) (xy 72.895181 59.016532) (xy 72.896086 59.005024) (xy 72.888821 58.973497) + (xy 72.868197 58.948773) (xy 72.853896 58.940601) (xy 72.837619 58.935953) (xy 72.826111 58.935048) + (xy 72.794571 58.942314) (xy 72.769816 58.962943) (xy 72.761635 58.977242) (xy 72.75698 58.993516) + ) + ) + (polygon + (pts + (xy 72.896086 58.86434) (xy 72.90335 58.896149) (xy 72.923961 58.921127) (xy 72.938218 58.929385) + (xy 72.954439 58.934105) (xy 72.966123 58.935048) (xy 72.997483 58.927782) (xy 73.022177 58.907115) + (xy 73.030406 58.89273) (xy 73.035131 58.876351) (xy 73.036098 58.86434) (xy 73.028833 58.832502) + (xy 73.008226 58.807525) (xy 72.993977 58.799278) (xy 72.977762 58.794568) (xy 72.966123 58.793632) + (xy 72.93475 58.800898) (xy 72.910026 58.821571) (xy 72.901787 58.835954) (xy 72.897055 58.85233) + ) + ) + (polygon + (pts + (xy 73.036098 58.723656) (xy 73.043364 58.755183) (xy 73.063987 58.779907) (xy 73.078288 58.788079) + (xy 73.094565 58.792727) (xy 73.106074 58.793632) (xy 73.137613 58.786366) (xy 73.162368 58.765737) + (xy 73.17055 58.751438) (xy 73.175204 58.735164) (xy 73.176111 58.723656) (xy 73.168847 58.692157) + (xy 73.14822 58.667432) (xy 73.13391 58.65925) (xy 73.117627 58.654592) (xy 73.106074 58.653681) + (xy 73.074547 58.660946) (xy 73.049823 58.681569) (xy 73.041651 58.695871) (xy 73.037003 58.712148) + ) + ) + (polygon + (pts + (xy 73.036098 58.58456) (xy 73.043364 58.615697) (xy 73.064021 58.640146) (xy 73.07839 58.648236) + (xy 73.094746 58.652815) (xy 73.106074 58.653681) (xy 73.137783 58.646419) (xy 73.162578 58.625842) + (xy 73.170702 58.611639) (xy 73.175273 58.595489) (xy 73.176111 58.58456) (xy 73.168847 58.553489) + (xy 73.148177 58.529052) (xy 73.133793 58.520954) (xy 73.117422 58.516369) (xy 73.106074 58.5155) + (xy 73.074377 58.52276) (xy 73.049607 58.543328) (xy 73.041492 58.557527) (xy 73.036931 58.573668) + ) + ) + (polygon + (pts + (xy 73.036098 58.445525) (xy 73.043364 58.477052) (xy 73.063987 58.501776) (xy 73.078288 58.509948) + (xy 73.094565 58.514596) (xy 73.106074 58.5155) (xy 73.137613 58.508235) (xy 73.162368 58.487606) + (xy 73.17055 58.473306) (xy 73.175204 58.457032) (xy 73.176111 58.445525) (xy 73.168847 58.414013) + (xy 73.148214 58.389258) (xy 73.133906 58.381066) (xy 73.117626 58.376401) (xy 73.106074 58.375488) + (xy 73.074575 58.382752) (xy 73.04985 58.403379) (xy 73.041668 58.417689) (xy 73.03701 58.433972) + ) + ) + (polygon + (pts + (xy 73.036098 58.305146) (xy 73.043364 58.336855) (xy 73.063965 58.361687) (xy 73.078235 58.369889) + (xy 73.094476 58.374565) (xy 73.106074 58.375488) (xy 73.137557 58.368219) (xy 73.162291 58.347568) + (xy 73.170491 58.33323) (xy 73.175176 58.316899) (xy 73.176111 58.305146) (xy 73.168847 58.273492) + (xy 73.148228 58.248641) (xy 73.133944 58.240421) (xy 73.117693 58.235732) (xy 73.106074 58.234804) + (xy 73.074631 58.24207) (xy 73.049921 58.262715) (xy 73.041721 58.277059) (xy 73.037034 58.293387) + ) + ) + (polygon + (pts + (xy 73.036098 58.164829) (xy 73.043364 58.196355) (xy 73.063987 58.22108) (xy 73.078288 58.229251) + (xy 73.094565 58.233899) (xy 73.106074 58.234804) (xy 73.137613 58.227539) (xy 73.162368 58.20691) + (xy 73.17055 58.19261) (xy 73.175204 58.176336) (xy 73.176111 58.164829) (xy 73.168847 58.13333) + (xy 73.14822 58.108605) (xy 73.13391 58.100423) (xy 73.117627 58.095764) (xy 73.106074 58.094853) + (xy 73.074547 58.102118) (xy 73.049823 58.122742) (xy 73.041651 58.137043) (xy 73.037003 58.15332) + ) + ) + (polygon + (pts + (xy 73.385305 58.234804) (xy 73.353861 58.24207) (xy 73.329152 58.262715) (xy 73.320952 58.277059) + (xy 73.316265 58.293387) (xy 73.315329 58.305146) (xy 73.322594 58.336855) (xy 73.343196 58.361687) + (xy 73.357466 58.369889) (xy 73.373706 58.374565) (xy 73.385305 58.375488) (xy 73.416788 58.368219) + (xy 73.441522 58.347568) (xy 73.449721 58.33323) (xy 73.454407 58.316899) (xy 73.455341 58.305146) + (xy 73.448077 58.273492) (xy 73.427458 58.248641) (xy 73.413175 58.240421) (xy 73.396923 58.235732) + ) + ) + (polygon + (pts + (xy 73.315329 59.005024) (xy 73.322594 59.036551) (xy 73.343218 59.061275) (xy 73.357519 59.069447) + (xy 73.373796 59.074095) (xy 73.385305 59.075) (xy 73.416844 59.067734) (xy 73.441599 59.047105) + (xy 73.44978 59.032806) (xy 73.454435 59.016531) (xy 73.455341 59.005024) (xy 73.448077 58.973525) + (xy 73.42745 58.9488) (xy 73.41314 58.940618) (xy 73.396857 58.93596) (xy 73.385305 58.935048) + (xy 73.353778 58.942314) (xy 73.329053 58.962937) (xy 73.320882 58.977238) (xy 73.316234 58.993515) + ) + ) + (polygon + (pts + (xy 73.315329 58.86434) (xy 73.322594 58.896178) (xy 73.343201 58.921155) (xy 73.357451 58.929402) + (xy 73.373665 58.934112) (xy 73.385305 58.935048) (xy 73.416677 58.927782) (xy 73.441402 58.907109) + (xy 73.44964 58.892726) (xy 73.454372 58.87635) (xy 73.455341 58.86434) (xy 73.448077 58.832531) + (xy 73.427467 58.807553) (xy 73.413209 58.799296) (xy 73.396988 58.794575) (xy 73.385305 58.793632) + (xy 73.353945 58.800898) (xy 73.32925 58.821565) (xy 73.321021 58.83595) (xy 73.316297 58.852329) + ) + ) + (polygon + (pts + (xy 73.315329 58.723656) (xy 73.322594 58.755183) (xy 73.343218 58.779907) (xy 73.357519 58.788079) + (xy 73.373796 58.792727) (xy 73.385305 58.793632) (xy 73.416844 58.786366) (xy 73.441599 58.765737) + (xy 73.44978 58.751438) (xy 73.454435 58.735164) (xy 73.455341 58.723656) (xy 73.448077 58.692157) + (xy 73.42745 58.667432) (xy 73.41314 58.65925) (xy 73.396857 58.654592) (xy 73.385305 58.653681) + (xy 73.353778 58.660946) (xy 73.329053 58.681569) (xy 73.320882 58.695871) (xy 73.316234 58.712148) + ) + ) + (polygon + (pts + (xy 73.315329 58.58456) (xy 73.322594 58.615697) (xy 73.343252 58.640146) (xy 73.35762 58.648236) + (xy 73.373977 58.652815) (xy 73.385305 58.653681) (xy 73.417014 58.646419) (xy 73.441809 58.625842) + (xy 73.449933 58.611639) (xy 73.454504 58.595489) (xy 73.455341 58.58456) (xy 73.448077 58.553489) + (xy 73.427408 58.529052) (xy 73.413024 58.520954) (xy 73.396653 58.516369) (xy 73.385305 58.5155) + (xy 73.353608 58.52276) (xy 73.328838 58.543328) (xy 73.320723 58.557527) (xy 73.316161 58.573668) + ) + ) + (polygon + (pts + (xy 73.315329 58.445525) (xy 73.322594 58.477052) (xy 73.343218 58.501776) (xy 73.357519 58.509948) + (xy 73.373796 58.514596) (xy 73.385305 58.5155) (xy 73.416844 58.508235) (xy 73.441599 58.487606) + (xy 73.44978 58.473306) (xy 73.454435 58.457032) (xy 73.455341 58.445525) (xy 73.448077 58.414013) + (xy 73.427445 58.389258) (xy 73.413137 58.381066) (xy 73.396856 58.376401) (xy 73.385305 58.375488) + (xy 73.353806 58.382752) (xy 73.329081 58.403379) (xy 73.320899 58.417689) (xy 73.31624 58.433972) + ) + ) + (polygon + (pts + (xy 73.315329 58.164829) (xy 73.322594 58.196355) (xy 73.343218 58.22108) (xy 73.357519 58.229251) + (xy 73.373796 58.233899) (xy 73.385305 58.234804) (xy 73.416844 58.227539) (xy 73.441599 58.20691) + (xy 73.44978 58.19261) (xy 73.454435 58.176336) (xy 73.455341 58.164829) (xy 73.448077 58.13333) + (xy 73.42745 58.108605) (xy 73.41314 58.100423) (xy 73.396857 58.095764) (xy 73.385305 58.094853) + (xy 73.353778 58.102118) (xy 73.329053 58.122742) (xy 73.320882 58.137043) (xy 73.316234 58.15332) + ) + ) + (polygon + (pts + (xy 73.455341 59.005024) (xy 73.462606 59.036551) (xy 73.48323 59.061275) (xy 73.497531 59.069447) + (xy 73.513808 59.074095) (xy 73.525317 59.075) (xy 73.556844 59.067734) (xy 73.581568 59.047111) + (xy 73.58974 59.032809) (xy 73.594388 59.016532) (xy 73.595292 59.005024) (xy 73.588027 58.973497) + (xy 73.567403 58.948773) (xy 73.553102 58.940601) (xy 73.536825 58.935953) (xy 73.525317 58.935048) + (xy 73.49379 58.942314) (xy 73.469066 58.962937) (xy 73.460894 58.977238) (xy 73.456246 58.993515) + ) + ) + (polygon + (pts + (xy 73.455341 58.58456) (xy 73.462606 58.615697) (xy 73.483264 58.640146) (xy 73.497632 58.648236) + (xy 73.513989 58.652815) (xy 73.525317 58.653681) (xy 73.557013 58.646419) (xy 73.581778 58.625848) + (xy 73.589892 58.611642) (xy 73.594457 58.59549) (xy 73.595292 58.58456) (xy 73.588027 58.553462) + (xy 73.567361 58.529025) (xy 73.552985 58.520937) (xy 73.536621 58.516362) (xy 73.525317 58.5155) + (xy 73.49362 58.52276) (xy 73.46885 58.543328) (xy 73.460735 58.557527) (xy 73.456173 58.573668) + ) + ) + (polygon + (pts + (xy 73.455341 58.164829) (xy 73.462606 58.196355) (xy 73.48323 58.22108) (xy 73.497531 58.229251) + (xy 73.513808 58.233899) (xy 73.525317 58.234804) (xy 73.556844 58.227539) (xy 73.581568 58.206915) + (xy 73.58974 58.192614) (xy 73.594388 58.176337) (xy 73.595292 58.164829) (xy 73.588027 58.133302) + (xy 73.567403 58.108577) (xy 73.553102 58.100406) (xy 73.536825 58.095758) (xy 73.525317 58.094853) + (xy 73.49379 58.102118) (xy 73.469066 58.122742) (xy 73.460894 58.137043) (xy 73.456246 58.15332) + ) + ) + (polygon + (pts + (xy 73.595292 59.005024) (xy 73.602556 59.036523) (xy 73.623183 59.061248) (xy 73.637493 59.06943) + (xy 73.653776 59.074088) (xy 73.665329 59.075) (xy 73.696856 59.067734) (xy 73.72158 59.047111) + (xy 73.729752 59.032809) (xy 73.7344 59.016532) (xy 73.735305 59.005024) (xy 73.728039 58.973497) + (xy 73.707416 58.948773) (xy 73.693114 58.940601) (xy 73.676837 58.935953) (xy 73.665329 58.935048) + (xy 73.63379 58.942314) (xy 73.609035 58.962943) (xy 73.600853 58.977242) (xy 73.596198 58.993516) + ) + ) + (polygon + (pts + (xy 73.595292 58.58456) (xy 73.602556 58.61567) (xy 73.623217 58.640119) (xy 73.637594 58.64822) + (xy 73.653957 58.652808) (xy 73.665329 58.653681) (xy 73.697026 58.646419) (xy 73.72179 58.625848) + (xy 73.729904 58.611642) (xy 73.734469 58.59549) (xy 73.735305 58.58456) (xy 73.728039 58.553462) + (xy 73.707373 58.529025) (xy 73.692998 58.520937) (xy 73.676633 58.516362) (xy 73.665329 58.5155) + (xy 73.63362 58.52276) (xy 73.608819 58.543333) (xy 73.600694 58.557531) (xy 73.596126 58.573669) + ) + ) + (polygon + (pts + (xy 73.595292 58.164829) (xy 73.602556 58.196327) (xy 73.623183 58.221052) (xy 73.637493 58.229234) + (xy 73.653776 58.233893) (xy 73.665329 58.234804) (xy 73.696856 58.227539) (xy 73.72158 58.206915) + (xy 73.729752 58.192614) (xy 73.7344 58.176337) (xy 73.735305 58.164829) (xy 73.728039 58.133302) + (xy 73.707416 58.108577) (xy 73.693114 58.100406) (xy 73.676837 58.095758) (xy 73.665329 58.094853) + (xy 73.63379 58.102118) (xy 73.609035 58.122747) (xy 73.600853 58.137047) (xy 73.596198 58.153321) + ) + ) + (polygon + (pts + (xy 73.735305 59.005024) (xy 73.742568 59.036523) (xy 73.763196 59.061248) (xy 73.777505 59.06943) + (xy 73.793788 59.074088) (xy 73.805341 59.075) (xy 73.836868 59.067734) (xy 73.861592 59.047111) + (xy 73.869764 59.032809) (xy 73.874412 59.016532) (xy 73.875317 59.005024) (xy 73.868051 58.973497) + (xy 73.847428 58.948773) (xy 73.833127 58.940601) (xy 73.81685 58.935953) (xy 73.805341 58.935048) + (xy 73.773802 58.942314) (xy 73.749047 58.962943) (xy 73.740865 58.977242) (xy 73.736211 58.993516) + ) + ) + (polygon + (pts + (xy 73.735305 58.58456) (xy 73.742568 58.61567) (xy 73.76323 58.640119) (xy 73.777606 58.64822) + (xy 73.793969 58.652808) (xy 73.805341 58.653681) (xy 73.837038 58.646419) (xy 73.861802 58.625848) + (xy 73.869917 58.611642) (xy 73.874481 58.59549) (xy 73.875317 58.58456) (xy 73.868051 58.553462) + (xy 73.847385 58.529025) (xy 73.83301 58.520937) (xy 73.816645 58.516362) (xy 73.805341 58.5155) + (xy 73.773632 58.52276) (xy 73.748831 58.543333) (xy 73.740707 58.557531) (xy 73.736138 58.573669) + ) + ) + (polygon + (pts + (xy 73.735305 58.164829) (xy 73.742568 58.196327) (xy 73.763196 58.221052) (xy 73.777505 58.229234) + (xy 73.793788 58.233893) (xy 73.805341 58.234804) (xy 73.836868 58.227539) (xy 73.861592 58.206915) + (xy 73.869764 58.192614) (xy 73.874412 58.176337) (xy 73.875317 58.164829) (xy 73.868051 58.133302) + (xy 73.847428 58.108577) (xy 73.833127 58.100406) (xy 73.81685 58.095758) (xy 73.805341 58.094853) + (xy 73.773802 58.102118) (xy 73.749047 58.122747) (xy 73.740865 58.137047) (xy 73.736211 58.153321) + ) + ) + (polygon + (pts + (xy 73.875317 59.005024) (xy 73.882582 59.036551) (xy 73.903206 59.061275) (xy 73.917507 59.069447) + (xy 73.933784 59.074095) (xy 73.945292 59.075) (xy 73.976832 59.067734) (xy 74.001587 59.047105) + (xy 74.009768 59.032806) (xy 74.014423 59.016531) (xy 74.015329 59.005024) (xy 74.008065 58.973525) + (xy 73.987438 58.9488) (xy 73.973128 58.940618) (xy 73.956845 58.93596) (xy 73.945292 58.935048) + (xy 73.913765 58.942314) (xy 73.889041 58.962937) (xy 73.880869 58.977238) (xy 73.876221 58.993515) + ) + ) + (polygon + (pts + (xy 73.875317 58.164829) (xy 73.882582 58.196355) (xy 73.903206 58.22108) (xy 73.917507 58.229251) + (xy 73.933784 58.233899) (xy 73.945292 58.234804) (xy 73.976832 58.227539) (xy 74.001587 58.20691) + (xy 74.009768 58.19261) (xy 74.014423 58.176336) (xy 74.015329 58.164829) (xy 74.008065 58.13333) + (xy 73.987438 58.108605) (xy 73.973128 58.100423) (xy 73.956845 58.095764) (xy 73.945292 58.094853) + (xy 73.913765 58.102118) (xy 73.889041 58.122742) (xy 73.880869 58.137043) (xy 73.876221 58.15332) + ) + ) + (polygon + (pts + (xy 74.224523 58.234804) (xy 74.193024 58.242068) (xy 74.168299 58.262695) (xy 74.160117 58.277005) + (xy 74.155459 58.293288) (xy 74.154547 58.304841) (xy 74.161813 58.336368) (xy 74.182436 58.361092) + (xy 74.196737 58.369264) (xy 74.213014 58.373912) (xy 74.224523 58.374816) (xy 74.256062 58.367551) + (xy 74.280817 58.346922) (xy 74.288999 58.332622) (xy 74.293653 58.316348) (xy 74.29456 58.304841) + (xy 74.287296 58.273329) (xy 74.266663 58.248574) (xy 74.252355 58.240382) (xy 74.236075 58.235717) + ) + ) + (polygon + (pts + (xy 74.154547 59.005024) (xy 74.161813 59.036551) (xy 74.182436 59.061275) (xy 74.196737 59.069447) + (xy 74.213014 59.074095) (xy 74.224523 59.075) (xy 74.256062 59.067734) (xy 74.280817 59.047105) + (xy 74.288999 59.032806) (xy 74.293653 59.016531) (xy 74.29456 59.005024) (xy 74.287296 58.973525) + (xy 74.266669 58.9488) (xy 74.252359 58.940618) (xy 74.236076 58.93596) (xy 74.224523 58.935048) + (xy 74.192996 58.942314) (xy 74.168272 58.962937) (xy 74.1601 58.977238) (xy 74.155452 58.993515) + ) + ) + (polygon + (pts + (xy 74.154547 58.865317) (xy 74.161813 58.896714) (xy 74.182456 58.921373) (xy 74.19678 58.929526) + (xy 74.213083 58.934156) (xy 74.224523 58.935048) (xy 74.25609 58.927786) (xy 74.280861 58.907172) + (xy 74.289034 58.892898) (xy 74.293671 58.876663) (xy 74.29456 58.865317) (xy 74.287296 58.83319) + (xy 74.266799 58.80828) (xy 74.252599 58.800053) (xy 74.236439 58.795336) (xy 74.224523 58.794364) + (xy 74.192996 58.80163) (xy 74.168272 58.822253) (xy 74.1601 58.836555) (xy 74.155452 58.852832) + (xy 74.154547 58.86434) + ) + ) + (polygon + (pts + (xy 74.154547 58.725244) (xy 74.161813 58.756381) (xy 74.18247 58.78083) (xy 74.196839 58.78892) + (xy 74.213195 58.793499) (xy 74.224523 58.794364) (xy 74.256232 58.787103) (xy 74.281028 58.766526) + (xy 74.289151 58.752323) (xy 74.293722 58.736173) (xy 74.29456 58.725244) (xy 74.287296 58.694173) + (xy 74.266626 58.669735) (xy 74.252242 58.661638) (xy 74.235871 58.657053) (xy 74.224523 58.656184) + (xy 74.192826 58.663444) (xy 74.168056 58.684012) (xy 74.159941 58.698211) (xy 74.15538 58.714352) + ) + ) + (polygon + (pts + (xy 74.154547 58.586209) (xy 74.161813 58.617735) (xy 74.182436 58.64246) (xy 74.196737 58.650631) + (xy 74.213014 58.655279) (xy 74.224523 58.656184) (xy 74.256062 58.648919) (xy 74.280817 58.62829) + (xy 74.288999 58.61399) (xy 74.293653 58.597716) (xy 74.29456 58.586209) (xy 74.287296 58.554697) + (xy 74.266663 58.529942) (xy 74.252355 58.52175) (xy 74.236075 58.517085) (xy 74.224523 58.516172) + (xy 74.193024 58.523436) (xy 74.168299 58.544063) (xy 74.160117 58.558373) (xy 74.155459 58.574656) + ) + ) + (polygon + (pts + (xy 74.154547 58.445525) (xy 74.161813 58.47735) (xy 74.182414 58.502296) (xy 74.196665 58.510534) + (xy 74.212883 58.515237) (xy 74.224523 58.516172) (xy 74.255923 58.508904) (xy 74.280647 58.488235) + (xy 74.288876 58.47386) (xy 74.293597 58.45749) (xy 74.29456 58.445525) (xy 74.287296 58.413715) + (xy 74.266685 58.388738) (xy 74.252427 58.38048) (xy 74.236206 58.37576) (xy 74.224523 58.374816) + (xy 74.193163 58.382082) (xy 74.168469 58.40275) (xy 74.16024 58.417135) (xy 74.155515 58.433514) + ) + ) + (polygon + (pts + (xy 74.154547 58.164829) (xy 74.161813 58.196355) (xy 74.182436 58.22108) (xy 74.196737 58.229251) + (xy 74.213014 58.233899) (xy 74.224523 58.234804) (xy 74.256062 58.227539) (xy 74.280817 58.20691) + (xy 74.288999 58.19261) (xy 74.293653 58.176336) (xy 74.29456 58.164829) (xy 74.287296 58.13333) + (xy 74.266669 58.108605) (xy 74.252359 58.100423) (xy 74.236076 58.095764) (xy 74.224523 58.094853) + (xy 74.192996 58.102118) (xy 74.168272 58.122742) (xy 74.1601 58.137043) (xy 74.155452 58.15332) + ) + ) + (polygon + (pts + (xy 74.29456 58.586209) (xy 74.301825 58.617735) (xy 74.322448 58.64246) (xy 74.33675 58.650631) + (xy 74.353027 58.655279) (xy 74.364535 58.656184) (xy 74.396062 58.648919) (xy 74.420786 58.628295) + (xy 74.428958 58.613994) (xy 74.433606 58.597717) (xy 74.434511 58.586209) (xy 74.427245 58.554669) + (xy 74.406616 58.529914) (xy 74.392317 58.521733) (xy 74.376043 58.517078) (xy 74.364535 58.516172) + (xy 74.333036 58.523436) (xy 74.308311 58.544063) (xy 74.300129 58.558373) (xy 74.295471 58.574656) + ) + ) + (polygon + (pts + (xy 74.29456 58.164829) (xy 74.301825 58.196355) (xy 74.322448 58.22108) (xy 74.33675 58.229251) + (xy 74.353027 58.233899) (xy 74.364535 58.234804) (xy 74.396062 58.227539) (xy 74.420786 58.206915) + (xy 74.428958 58.192614) (xy 74.433606 58.176337) (xy 74.434511 58.164829) (xy 74.427245 58.133302) + (xy 74.406622 58.108577) (xy 74.392321 58.100406) (xy 74.376044 58.095758) (xy 74.364535 58.094853) + (xy 74.333008 58.102118) (xy 74.308284 58.122742) (xy 74.300112 58.137043) (xy 74.295464 58.15332) + ) + ) + (polygon + (pts + (xy 74.434511 58.725915) (xy 74.441775 58.756593) (xy 74.462531 58.780917) (xy 74.476986 58.788986) + (xy 74.493438 58.793533) (xy 74.504547 58.794364) (xy 74.536244 58.787103) (xy 74.561008 58.766531) + (xy 74.569123 58.752326) (xy 74.573687 58.736174) (xy 74.574523 58.725244) (xy 74.567258 58.694145) + (xy 74.546592 58.669708) (xy 74.532216 58.661621) (xy 74.515851 58.657046) (xy 74.504547 58.656184) + (xy 74.472838 58.663444) (xy 74.448037 58.684017) (xy 74.439913 58.698215) (xy 74.435344 58.714353) + (xy 74.434511 58.725244) + ) + ) + (polygon + (pts + (xy 74.434511 58.586209) (xy 74.441775 58.617707) (xy 74.462402 58.642432) (xy 74.476711 58.650614) + (xy 74.492994 58.655273) (xy 74.504547 58.656184) (xy 74.536074 58.648919) (xy 74.560798 58.628295) + (xy 74.56897 58.613994) (xy 74.573618 58.597717) (xy 74.574523 58.586209) (xy 74.567258 58.554669) + (xy 74.546629 58.529914) (xy 74.532329 58.521733) (xy 74.516055 58.517078) (xy 74.504547 58.516172) + (xy 74.473036 58.523436) (xy 74.448281 58.544068) (xy 74.440089 58.558376) (xy 74.435424 58.574657) + ) + ) + (polygon + (pts + (xy 74.434511 58.164829) (xy 74.441775 58.196327) (xy 74.462402 58.221052) (xy 74.476711 58.229234) + (xy 74.492994 58.233893) (xy 74.504547 58.234804) (xy 74.536074 58.227539) (xy 74.560798 58.206915) + (xy 74.56897 58.192614) (xy 74.573618 58.176337) (xy 74.574523 58.164829) (xy 74.567258 58.133302) + (xy 74.546634 58.108577) (xy 74.532333 58.100406) (xy 74.516056 58.095758) (xy 74.504547 58.094853) + (xy 74.473008 58.102118) (xy 74.448253 58.122747) (xy 74.440072 58.137047) (xy 74.435417 58.153321) + ) + ) + (polygon + (pts + (xy 74.574523 58.865317) (xy 74.581787 58.896686) (xy 74.602434 58.921345) (xy 74.616766 58.929509) + (xy 74.633075 58.93415) (xy 74.64456 58.935048) (xy 74.676115 58.927786) (xy 74.700855 58.907178) + (xy 74.709018 58.892902) (xy 74.713648 58.876664) (xy 74.714535 58.865317) (xy 74.70727 58.833161) + (xy 74.686777 58.808252) (xy 74.672585 58.800035) (xy 74.656431 58.795329) (xy 74.64456 58.794364) + (xy 74.61302 58.80163) (xy 74.588265 58.822259) (xy 74.580084 58.836558) (xy 74.575429 58.852833) + (xy 74.574523 58.86434) + ) + ) + (polygon + (pts + (xy 74.574523 58.586209) (xy 74.581787 58.617707) (xy 74.602414 58.642432) (xy 74.616724 58.650614) + (xy 74.633007 58.655273) (xy 74.64456 58.656184) (xy 74.676087 58.648919) (xy 74.700811 58.628295) + (xy 74.708982 58.613994) (xy 74.713631 58.597717) (xy 74.714535 58.586209) (xy 74.70727 58.554669) + (xy 74.686641 58.529914) (xy 74.672341 58.521733) (xy 74.656067 58.517078) (xy 74.64456 58.516172) + (xy 74.613048 58.523436) (xy 74.588293 58.544068) (xy 74.580101 58.558376) (xy 74.575436 58.574657) + ) + ) + (polygon + (pts + (xy 74.574523 58.164829) (xy 74.581787 58.196327) (xy 74.602414 58.221052) (xy 74.616724 58.229234) + (xy 74.633007 58.233893) (xy 74.64456 58.234804) (xy 74.676087 58.227539) (xy 74.700811 58.206915) + (xy 74.708982 58.192614) (xy 74.713631 58.176337) (xy 74.714535 58.164829) (xy 74.70727 58.133302) + (xy 74.686646 58.108577) (xy 74.672345 58.100406) (xy 74.656068 58.095758) (xy 74.64456 58.094853) + (xy 74.61302 58.102118) (xy 74.588265 58.122747) (xy 74.580084 58.137047) (xy 74.575429 58.153321) + ) + ) + (polygon + (pts + (xy 74.714535 59.005024) (xy 74.7218 59.036551) (xy 74.742424 59.061275) (xy 74.756725 59.069447) + (xy 74.773002 59.074095) (xy 74.784511 59.075) (xy 74.81605 59.067734) (xy 74.840805 59.047105) + (xy 74.848987 59.032806) (xy 74.853641 59.016531) (xy 74.854547 59.005024) (xy 74.847283 58.973525) + (xy 74.826656 58.9488) (xy 74.812347 58.940618) (xy 74.796064 58.93596) (xy 74.784511 58.935048) + (xy 74.752984 58.942314) (xy 74.72826 58.962937) (xy 74.720088 58.977238) (xy 74.71544 58.993515) + ) + ) + (polygon + (pts + (xy 74.714535 58.44583) (xy 74.7218 58.477539) (xy 74.742402 58.50237) (xy 74.756672 58.510573) + (xy 74.772913 58.515249) (xy 74.784511 58.516172) (xy 74.815994 58.508903) (xy 74.840728 58.488252) + (xy 74.848928 58.473913) (xy 74.853613 58.457583) (xy 74.854547 58.44583) (xy 74.847283 58.413824) + (xy 74.826714 58.388789) (xy 74.81249 58.380517) (xy 74.796307 58.375779) (xy 74.784511 58.374816) + (xy 74.753151 58.382082) (xy 74.728457 58.40275) (xy 74.720228 58.417135) (xy 74.715503 58.433514) + (xy 74.714535 58.445525) + ) + ) + (polygon + (pts + (xy 74.714535 58.304841) (xy 74.7218 58.336368) (xy 74.742424 58.361092) (xy 74.756725 58.369264) + (xy 74.773002 58.373912) (xy 74.784511 58.374816) (xy 74.81605 58.367551) (xy 74.840805 58.346922) + (xy 74.848987 58.332622) (xy 74.853641 58.316348) (xy 74.854547 58.304841) (xy 74.847283 58.273329) + (xy 74.826651 58.248574) (xy 74.812343 58.240382) (xy 74.796063 58.235717) (xy 74.784511 58.234804) + (xy 74.753012 58.242068) (xy 74.728287 58.262695) (xy 74.720105 58.277005) (xy 74.715447 58.293288) + ) + ) + (polygon + (pts + (xy 75.343155 58.234804) (xy 75.311712 58.24207) (xy 75.287003 58.262715) (xy 75.278802 58.277059) + (xy 75.274116 58.293387) (xy 75.27318 58.305146) (xy 75.280445 58.336855) (xy 75.301046 58.361687) + (xy 75.315317 58.369889) (xy 75.331557 58.374565) (xy 75.343155 58.375488) (xy 75.374639 58.368219) + (xy 75.399372 58.347568) (xy 75.407572 58.33323) (xy 75.412257 58.316899) (xy 75.413192 58.305146) + (xy 75.405928 58.273492) (xy 75.385309 58.248641) (xy 75.371026 58.240421) (xy 75.354774 58.235732) + ) + ) + (polygon + (pts + (xy 75.27318 59.005024) (xy 75.280445 59.036551) (xy 75.301068 59.061275) (xy 75.31537 59.069447) + (xy 75.331647 59.074095) (xy 75.343155 59.075) (xy 75.374695 59.067734) (xy 75.399449 59.047105) + (xy 75.407631 59.032806) (xy 75.412286 59.016531) (xy 75.413192 59.005024) (xy 75.405928 58.973525) + (xy 75.385301 58.9488) (xy 75.370991 58.940618) (xy 75.354708 58.93596) (xy 75.343155 58.935048) + (xy 75.311628 58.942314) (xy 75.286904 58.962937) (xy 75.278732 58.977238) (xy 75.274084 58.993515) + ) + ) + (polygon + (pts + (xy 75.27318 58.86434) (xy 75.280445 58.896178) (xy 75.301052 58.921155) (xy 75.315301 58.929402) + (xy 75.331516 58.934112) (xy 75.343155 58.935048) (xy 75.374527 58.927782) (xy 75.399252 58.907109) + (xy 75.407491 58.892726) (xy 75.412222 58.87635) (xy 75.413192 58.86434) (xy 75.405928 58.832531) + (xy 75.385317 58.807553) (xy 75.371059 58.799296) (xy 75.354839 58.794575) (xy 75.343155 58.793632) + (xy 75.311795 58.800898) (xy 75.287101 58.821565) (xy 75.278872 58.83595) (xy 75.274147 58.852329) + ) + ) + (polygon + (pts + (xy 75.27318 58.723656) (xy 75.280445 58.755183) (xy 75.301068 58.779907) (xy 75.31537 58.788079) + (xy 75.331647 58.792727) (xy 75.343155 58.793632) (xy 75.374695 58.786366) (xy 75.399449 58.765737) + (xy 75.407631 58.751438) (xy 75.412286 58.735164) (xy 75.413192 58.723656) (xy 75.405928 58.692157) + (xy 75.385301 58.667432) (xy 75.370991 58.65925) (xy 75.354708 58.654592) (xy 75.343155 58.653681) + (xy 75.311628 58.660946) (xy 75.286904 58.681569) (xy 75.278732 58.695871) (xy 75.274084 58.712148) + ) + ) + (polygon + (pts + (xy 75.27318 58.58456) (xy 75.280445 58.615697) (xy 75.301102 58.640146) (xy 75.315471 58.648236) + (xy 75.331828 58.652815) (xy 75.343155 58.653681) (xy 75.374864 58.646419) (xy 75.39966 58.625842) + (xy 75.407784 58.611639) (xy 75.412355 58.595489) (xy 75.413192 58.58456) (xy 75.405928 58.553489) + (xy 75.385258 58.529052) (xy 75.370874 58.520954) (xy 75.354503 58.516369) (xy 75.343155 58.5155) + (xy 75.311459 58.52276) (xy 75.286688 58.543328) (xy 75.278574 58.557527) (xy 75.274012 58.573668) + ) + ) + (polygon + (pts + (xy 75.27318 58.445525) (xy 75.280445 58.477052) (xy 75.301068 58.501776) (xy 75.31537 58.509948) + (xy 75.331647 58.514596) (xy 75.343155 58.5155) (xy 75.374695 58.508235) (xy 75.399449 58.487606) + (xy 75.407631 58.473306) (xy 75.412286 58.457032) (xy 75.413192 58.445525) (xy 75.405928 58.414013) + (xy 75.385295 58.389258) (xy 75.370987 58.381066) (xy 75.354707 58.376401) (xy 75.343155 58.375488) + (xy 75.311656 58.382752) (xy 75.286932 58.403379) (xy 75.278749 58.417689) (xy 75.274091 58.433972) + ) + ) + (polygon + (pts + (xy 75.27318 58.164829) (xy 75.280445 58.196355) (xy 75.301068 58.22108) (xy 75.31537 58.229251) + (xy 75.331647 58.233899) (xy 75.343155 58.234804) (xy 75.374695 58.227539) (xy 75.399449 58.20691) + (xy 75.407631 58.19261) (xy 75.412286 58.176336) (xy 75.413192 58.164829) (xy 75.405928 58.13333) + (xy 75.385301 58.108605) (xy 75.370991 58.100423) (xy 75.354708 58.095764) (xy 75.343155 58.094853) + (xy 75.311628 58.102118) (xy 75.286904 58.122742) (xy 75.278732 58.137043) (xy 75.274084 58.15332) + ) + ) + (polygon + (pts + (xy 75.413192 58.445525) (xy 75.420457 58.477052) (xy 75.441081 58.501776) (xy 75.455382 58.509948) + (xy 75.471659 58.514596) (xy 75.483167 58.5155) (xy 75.514694 58.508235) (xy 75.539418 58.487611) + (xy 75.54759 58.47331) (xy 75.552238 58.457033) (xy 75.553143 58.445525) (xy 75.545878 58.413985) + (xy 75.525249 58.38923) (xy 75.510949 58.381049) (xy 75.494675 58.376394) (xy 75.483167 58.375488) + (xy 75.451669 58.382752) (xy 75.426944 58.403379) (xy 75.418762 58.417689) (xy 75.414103 58.433972) + ) + ) + (polygon + (pts + (xy 75.553143 58.58456) (xy 75.560407 58.61567) (xy 75.581068 58.640119) (xy 75.595445 58.64822) + (xy 75.611808 58.652808) (xy 75.62318 58.653681) (xy 75.654876 58.646419) (xy 75.679641 58.625848) + (xy 75.687755 58.611642) (xy 75.692319 58.59549) (xy 75.693155 58.58456) (xy 75.68589 58.553462) + (xy 75.665224 58.529025) (xy 75.650848 58.520937) (xy 75.634484 58.516362) (xy 75.62318 58.5155) + (xy 75.59147 58.52276) (xy 75.566669 58.543333) (xy 75.558545 58.557531) (xy 75.553977 58.573669) + ) + ) + (polygon + (pts + (xy 75.693155 58.723656) (xy 75.700419 58.755155) (xy 75.721046 58.77988) (xy 75.735356 58.788062) + (xy 75.751639 58.79272) (xy 75.763192 58.793632) (xy 75.794719 58.786366) (xy 75.819443 58.765743) + (xy 75.827615 58.751442) (xy 75.832263 58.735165) (xy 75.833167 58.723656) (xy 75.825902 58.692129) + (xy 75.805279 58.667405) (xy 75.790977 58.659233) (xy 75.7747 58.654585) (xy 75.763192 58.653681) + (xy 75.731652 58.660946) (xy 75.706898 58.681575) (xy 75.698716 58.695874) (xy 75.694061 58.712149) + ) + ) + (polygon + (pts + (xy 75.833167 59.005024) (xy 75.840433 59.036551) (xy 75.861056 59.061275) (xy 75.875358 59.069447) + (xy 75.891634 59.074095) (xy 75.903143 59.075) (xy 75.934682 59.067734) (xy 75.959437 59.047105) + (xy 75.967619 59.032806) (xy 75.972273 59.016531) (xy 75.97318 59.005024) (xy 75.965916 58.973525) + (xy 75.945289 58.9488) (xy 75.930979 58.940618) (xy 75.914696 58.93596) (xy 75.903143 58.935048) + (xy 75.871616 58.942314) (xy 75.846892 58.962937) (xy 75.83872 58.977238) (xy 75.834072 58.993515) + ) + ) + (polygon + (pts + (xy 75.833167 58.86434) (xy 75.840433 58.896178) (xy 75.86104 58.921155) (xy 75.875289 58.929402) + (xy 75.891504 58.934112) (xy 75.903143 58.935048) (xy 75.934515 58.927782) (xy 75.95924 58.907109) + (xy 75.967479 58.892726) (xy 75.97221 58.87635) (xy 75.97318 58.86434) (xy 75.965916 58.832531) + (xy 75.945305 58.807553) (xy 75.931047 58.799296) (xy 75.914826 58.794575) (xy 75.903143 58.793632) + (xy 75.871783 58.800898) (xy 75.847089 58.821565) (xy 75.83886 58.83595) (xy 75.834135 58.852329) + ) + ) + (polygon + (pts + (xy 75.833167 58.723656) (xy 75.840433 58.755183) (xy 75.861056 58.779907) (xy 75.875358 58.788079) + (xy 75.891634 58.792727) (xy 75.903143 58.793632) (xy 75.934682 58.786366) (xy 75.959437 58.765737) + (xy 75.967619 58.751438) (xy 75.972273 58.735164) (xy 75.97318 58.723656) (xy 75.965916 58.692157) + (xy 75.945289 58.667432) (xy 75.930979 58.65925) (xy 75.914696 58.654592) (xy 75.903143 58.653681) + (xy 75.871616 58.660946) (xy 75.846892 58.681569) (xy 75.83872 58.695871) (xy 75.834072 58.712148) + ) + ) + (polygon + (pts + (xy 75.833167 58.58456) (xy 75.840433 58.615697) (xy 75.86109 58.640146) (xy 75.875459 58.648236) + (xy 75.891815 58.652815) (xy 75.903143 58.653681) (xy 75.934852 58.646419) (xy 75.959648 58.625842) + (xy 75.967771 58.611639) (xy 75.972342 58.595489) (xy 75.97318 58.58456) (xy 75.965916 58.553489) + (xy 75.945246 58.529052) (xy 75.930862 58.520954) (xy 75.914491 58.516369) (xy 75.903143 58.5155) + (xy 75.871446 58.52276) (xy 75.846676 58.543328) (xy 75.838561 58.557527) (xy 75.834 58.573668) + ) + ) + (polygon + (pts + (xy 75.833167 58.445525) (xy 75.840433 58.477052) (xy 75.861056 58.501776) (xy 75.875358 58.509948) + (xy 75.891634 58.514596) (xy 75.903143 58.5155) (xy 75.934682 58.508235) (xy 75.959437 58.487606) + (xy 75.967619 58.473306) (xy 75.972273 58.457032) (xy 75.97318 58.445525) (xy 75.965916 58.414013) + (xy 75.945283 58.389258) (xy 75.930975 58.381066) (xy 75.914695 58.376401) (xy 75.903143 58.375488) + (xy 75.871644 58.382752) (xy 75.846919 58.403379) (xy 75.838737 58.417689) (xy 75.834079 58.433972) + ) + ) + (polygon + (pts + (xy 75.833167 58.305146) (xy 75.840433 58.336855) (xy 75.861034 58.361687) (xy 75.875304 58.369889) + (xy 75.891545 58.374565) (xy 75.903143 58.375488) (xy 75.934626 58.368219) (xy 75.95936 58.347568) + (xy 75.96756 58.33323) (xy 75.972245 58.316899) (xy 75.97318 58.305146) (xy 75.965916 58.273492) + (xy 75.945297 58.248641) (xy 75.931013 58.240421) (xy 75.914762 58.235732) (xy 75.903143 58.234804) + (xy 75.8717 58.24207) (xy 75.846991 58.262715) (xy 75.83879 58.277059) (xy 75.834103 58.293387) + ) + ) + (polygon + (pts + (xy 75.833167 58.164829) (xy 75.840433 58.196355) (xy 75.861056 58.22108) (xy 75.875358 58.229251) + (xy 75.891634 58.233899) (xy 75.903143 58.234804) (xy 75.934682 58.227539) (xy 75.959437 58.20691) + (xy 75.967619 58.19261) (xy 75.972273 58.176336) (xy 75.97318 58.164829) (xy 75.965916 58.13333) + (xy 75.945289 58.108605) (xy 75.930979 58.100423) (xy 75.914696 58.095764) (xy 75.903143 58.094853) + (xy 75.871616 58.102118) (xy 75.846892 58.122742) (xy 75.83872 58.137043) (xy 75.834072 58.15332) + ) + ) + (polygon + (pts + (xy 76.322386 58.234804) (xy 76.353913 58.227539) (xy 76.378637 58.206915) (xy 76.386809 58.192614) + (xy 76.391457 58.176337) (xy 76.392361 58.164829) (xy 76.385096 58.133302) (xy 76.364473 58.108577) + (xy 76.350171 58.100406) (xy 76.333894 58.095758) (xy 76.322386 58.094853) (xy 76.290859 58.102118) + (xy 76.266135 58.122742) (xy 76.257963 58.137043) (xy 76.253315 58.15332) (xy 76.25241 58.164829) + (xy 76.259676 58.196355) (xy 76.280299 58.22108) (xy 76.2946 58.229251) (xy 76.310877 58.233899) + ) + ) + (polygon + (pts + (xy 76.112398 58.86434) (xy 76.119663 58.896178) (xy 76.14027 58.921155) (xy 76.15452 58.929402) + (xy 76.170734 58.934112) (xy 76.182374 58.935048) (xy 76.213746 58.927782) (xy 76.238471 58.907109) + (xy 76.246709 58.892726) (xy 76.251441 58.87635) (xy 76.25241 58.86434) (xy 76.245146 58.832531) + (xy 76.224536 58.807553) (xy 76.210278 58.799296) (xy 76.194057 58.794575) (xy 76.182374 58.793632) + (xy 76.151014 58.800898) (xy 76.126319 58.821565) (xy 76.118091 58.83595) (xy 76.113366 58.852329) + ) + ) + (polygon + (pts + (xy 76.112398 58.723656) (xy 76.119663 58.755183) (xy 76.140287 58.779907) (xy 76.154588 58.788079) + (xy 76.170865 58.792727) (xy 76.182374 58.793632) (xy 76.213913 58.786366) (xy 76.238668 58.765737) + (xy 76.246849 58.751438) (xy 76.251504 58.735164) (xy 76.25241 58.723656) (xy 76.245146 58.692157) + (xy 76.224519 58.667432) (xy 76.21021 58.65925) (xy 76.193927 58.654592) (xy 76.182374 58.653681) + (xy 76.150847 58.660946) (xy 76.126123 58.681569) (xy 76.117951 58.695871) (xy 76.113303 58.712148) + ) + ) + (polygon + (pts + (xy 76.112398 58.583888) (xy 76.119663 58.615324) (xy 76.140298 58.639995) (xy 76.154615 58.648151) + (xy 76.17091 58.652785) (xy 76.182374 58.653681) (xy 76.213941 58.646417) (xy 76.238706 58.625799) + (xy 76.246879 58.611519) (xy 76.251518 58.595273) (xy 76.25241 58.583888) (xy 76.245146 58.553869) + (xy 76.224178 58.529542) (xy 76.2096 58.521462) (xy 76.193014 58.516943) (xy 76.182374 58.516172) + (xy 76.150875 58.523436) (xy 76.12615 58.544063) (xy 76.117968 58.558373) (xy 76.113309 58.574656) + (xy 76.112398 58.586209) + ) + ) + (polygon + (pts + (xy 76.112398 58.44583) (xy 76.119663 58.477539) (xy 76.140265 58.50237) (xy 76.154535 58.510573) + (xy 76.170775 58.515249) (xy 76.182374 58.516172) (xy 76.213857 58.508903) (xy 76.238591 58.488252) + (xy 76.24679 58.473913) (xy 76.251476 58.457583) (xy 76.25241 58.44583) (xy 76.245146 58.413637) + (xy 76.224671 58.388734) (xy 76.210483 58.380511) (xy 76.194336 58.375794) (xy 76.182374 58.374816) + (xy 76.150819 58.382078) (xy 76.126078 58.402687) (xy 76.117915 58.416963) (xy 76.113285 58.433201) + (xy 76.112398 58.444548) + ) + ) + (polygon + (pts + (xy 76.112398 58.304841) (xy 76.119663 58.336368) (xy 76.140287 58.361092) (xy 76.154588 58.369264) + (xy 76.170865 58.373912) (xy 76.182374 58.374816) (xy 76.213913 58.367551) (xy 76.238668 58.346922) + (xy 76.246849 58.332622) (xy 76.251504 58.316348) (xy 76.25241 58.304841) (xy 76.245146 58.273276) + (xy 76.224541 58.248559) (xy 76.210244 58.240381) (xy 76.193974 58.235721) (xy 76.182374 58.234804) + (xy 76.150819 58.242069) (xy 76.12609 58.262685) (xy 76.117927 58.276973) (xy 76.113292 58.293233) + (xy 76.112398 58.304658) + ) + ) + (polygon + (pts + (xy 76.25241 59.005024) (xy 76.259676 59.036551) (xy 76.280299 59.061275) (xy 76.2946 59.069447) + (xy 76.310877 59.074095) (xy 76.322386 59.075) (xy 76.353913 59.067734) (xy 76.378637 59.047111) + (xy 76.386809 59.032809) (xy 76.391457 59.016532) (xy 76.392361 59.005024) (xy 76.385096 58.973497) + (xy 76.364473 58.948773) (xy 76.350171 58.940601) (xy 76.333894 58.935953) (xy 76.322386 58.935048) + (xy 76.290859 58.942314) (xy 76.266135 58.962937) (xy 76.257963 58.977238) (xy 76.253315 58.993515) + ) + ) + (polygon + (pts + (xy 76.392361 59.005024) (xy 76.399625 59.036523) (xy 76.420252 59.061248) (xy 76.434562 59.06943) + (xy 76.450845 59.074088) (xy 76.462398 59.075) (xy 76.493925 59.067734) (xy 76.518649 59.047111) + (xy 76.526821 59.032809) (xy 76.531469 59.016532) (xy 76.532374 59.005024) (xy 76.525108 58.973497) + (xy 76.504485 58.948773) (xy 76.490183 58.940601) (xy 76.473907 58.935953) (xy 76.462398 58.935048) + (xy 76.430859 58.942314) (xy 76.406104 58.962943) (xy 76.397922 58.977242) (xy 76.393268 58.993516) + ) + ) + (polygon + (pts + (xy 76.392361 58.164829) (xy 76.399625 58.196327) (xy 76.420252 58.221052) (xy 76.434562 58.229234) + (xy 76.450845 58.233893) (xy 76.462398 58.234804) (xy 76.493925 58.227539) (xy 76.518649 58.206915) + (xy 76.526821 58.192614) (xy 76.531469 58.176337) (xy 76.532374 58.164829) (xy 76.525108 58.133302) + (xy 76.504485 58.108577) (xy 76.490183 58.100406) (xy 76.473907 58.095758) (xy 76.462398 58.094853) + (xy 76.430859 58.102118) (xy 76.406104 58.122747) (xy 76.397922 58.137047) (xy 76.393268 58.153321) + ) + ) + (polygon + (pts + (xy 76.532374 59.005024) (xy 76.539638 59.036523) (xy 76.560265 59.061248) (xy 76.574574 59.06943) + (xy 76.590857 59.074088) (xy 76.60241 59.075) (xy 76.633937 59.067734) (xy 76.658661 59.047111) + (xy 76.666833 59.032809) (xy 76.671481 59.016532) (xy 76.672386 59.005024) (xy 76.665121 58.973497) + (xy 76.644497 58.948773) (xy 76.630196 58.940601) (xy 76.613919 58.935953) (xy 76.60241 58.935048) + (xy 76.570871 58.942314) (xy 76.546116 58.962943) (xy 76.537934 58.977242) (xy 76.53328 58.993516) + ) + ) + (polygon + (pts + (xy 76.532374 58.164829) (xy 76.539638 58.196327) (xy 76.560265 58.221052) (xy 76.574574 58.229234) + (xy 76.590857 58.233893) (xy 76.60241 58.234804) (xy 76.633937 58.227539) (xy 76.658661 58.206915) + (xy 76.666833 58.192614) (xy 76.671481 58.176337) (xy 76.672386 58.164829) (xy 76.665121 58.133302) + (xy 76.644497 58.108577) (xy 76.630196 58.100406) (xy 76.613919 58.095758) (xy 76.60241 58.094853) + (xy 76.570871 58.102118) (xy 76.546116 58.122747) (xy 76.537934 58.137047) (xy 76.53328 58.153321) + ) + ) + (polygon + (pts + (xy 76.672386 58.86434) (xy 76.679651 58.896178) (xy 76.700258 58.921155) (xy 76.714508 58.929402) + (xy 76.730722 58.934112) (xy 76.742361 58.935048) (xy 76.773734 58.927782) (xy 76.798459 58.907109) + (xy 76.806697 58.892726) (xy 76.811429 58.87635) (xy 76.812398 58.86434) (xy 76.805134 58.832531) + (xy 76.784524 58.807553) (xy 76.770266 58.799296) (xy 76.754045 58.794575) (xy 76.742361 58.793632) + (xy 76.711001 58.800898) (xy 76.686307 58.821565) (xy 76.678078 58.83595) (xy 76.673354 58.852329) + ) + ) + (polygon + (pts + (xy 76.672386 58.723656) (xy 76.679651 58.755183) (xy 76.700275 58.779907) (xy 76.714576 58.788079) + (xy 76.730853 58.792727) (xy 76.742361 58.793632) (xy 76.773901 58.786366) (xy 76.798656 58.765737) + (xy 76.806837 58.751438) (xy 76.811492 58.735164) (xy 76.812398 58.723656) (xy 76.805134 58.692157) + (xy 76.784507 58.667432) (xy 76.770197 58.65925) (xy 76.753914 58.654592) (xy 76.742361 58.653681) + (xy 76.710834 58.660946) (xy 76.68611 58.681569) (xy 76.677938 58.695871) (xy 76.67329 58.712148) + ) + ) + (polygon + (pts + (xy 76.672386 58.583888) (xy 76.679651 58.615324) (xy 76.700286 58.639995) (xy 76.714603 58.648151) + (xy 76.730898 58.652785) (xy 76.742361 58.653681) (xy 76.773929 58.646417) (xy 76.798694 58.625799) + (xy 76.806867 58.611519) (xy 76.811506 58.595273) (xy 76.812398 58.583888) (xy 76.805134 58.553869) + (xy 76.784166 58.529542) (xy 76.769588 58.521462) (xy 76.753002 58.516943) (xy 76.742361 58.516172) + (xy 76.710863 58.523436) (xy 76.686138 58.544063) (xy 76.677956 58.558373) (xy 76.673297 58.574656) + (xy 76.672386 58.586209) + ) + ) + (polygon + (pts + (xy 76.672386 58.44583) (xy 76.679651 58.477539) (xy 76.700253 58.50237) (xy 76.714523 58.510573) + (xy 76.730763 58.515249) (xy 76.742361 58.516172) (xy 76.773845 58.508903) (xy 76.798579 58.488252) + (xy 76.806778 58.473913) (xy 76.811464 58.457583) (xy 76.812398 58.44583) (xy 76.805134 58.413637) + (xy 76.784659 58.388734) (xy 76.77047 58.380511) (xy 76.754324 58.375794) (xy 76.742361 58.374816) + (xy 76.710806 58.382078) (xy 76.686066 58.402687) (xy 76.677903 58.416963) (xy 76.673273 58.433201) + (xy 76.672386 58.444548) + ) + ) + (polygon + (pts + (xy 76.672386 58.304841) (xy 76.679651 58.336368) (xy 76.700275 58.361092) (xy 76.714576 58.369264) + (xy 76.730853 58.373912) (xy 76.742361 58.374816) (xy 76.773901 58.367551) (xy 76.798656 58.346922) + (xy 76.806837 58.332622) (xy 76.811492 58.316348) (xy 76.812398 58.304841) (xy 76.805134 58.273276) + (xy 76.784529 58.248559) (xy 76.770232 58.240381) (xy 76.753961 58.235721) (xy 76.742361 58.234804) + (xy 76.710806 58.242069) (xy 76.686077 58.262685) (xy 76.677915 58.276973) (xy 76.67328 58.293233) + (xy 76.672386 58.304658) + ) + ) + (polygon + (pts + (xy 77.021592 58.234804) (xy 76.990093 58.242068) (xy 76.965368 58.262695) (xy 76.957186 58.277005) + (xy 76.952528 58.293288) (xy 76.951616 58.304841) (xy 76.958882 58.336368) (xy 76.979505 58.361092) + (xy 76.993807 58.369264) (xy 77.010084 58.373912) (xy 77.021592 58.374816) (xy 77.053131 58.367551) + (xy 77.077886 58.346922) (xy 77.086068 58.332622) (xy 77.090723 58.316348) (xy 77.091629 58.304841) + (xy 77.084365 58.273329) (xy 77.063732 58.248574) (xy 77.049424 58.240382) (xy 77.033144 58.235717) + ) + ) + (polygon + (pts + (xy 76.951616 59.004352) (xy 76.958882 59.036311) (xy 76.979415 59.061162) (xy 76.993641 59.069366) + (xy 77.009833 59.074054) (xy 77.021592 59.075) (xy 77.053131 59.067734) (xy 77.077886 59.047105) + (xy 77.086068 59.032806) (xy 77.090723 59.016531) (xy 77.091629 59.005024) (xy 77.084365 58.973081) + (xy 77.063823 58.948198) (xy 77.04959 58.939975) (xy 77.033395 58.93527) (xy 77.021592 58.934316) + (xy 76.990093 58.94158) (xy 76.965368 58.962207) (xy 76.957186 58.976516) (xy 76.952528 58.992799) + ) + ) + (polygon + (pts + (xy 76.951616 58.86434) (xy 76.958882 58.895867) (xy 76.979505 58.920591) (xy 76.993807 58.928763) + (xy 77.010084 58.933411) (xy 77.021592 58.934316) (xy 77.053131 58.92705) (xy 77.077886 58.906421) + (xy 77.086068 58.892122) (xy 77.090723 58.875848) (xy 77.091629 58.86434) (xy 77.084365 58.832841) + (xy 77.063738 58.808116) (xy 77.049428 58.799934) (xy 77.033145 58.795276) (xy 77.021592 58.794364) + (xy 76.990065 58.80163) (xy 76.965341 58.822253) (xy 76.957169 58.836555) (xy 76.952521 58.852832) + ) + ) + (polygon + (pts + (xy 76.951616 58.725244) (xy 76.958882 58.756381) (xy 76.979539 58.78083) (xy 76.993908 58.78892) + (xy 77.010265 58.793499) (xy 77.021592 58.794364) (xy 77.053301 58.787103) (xy 77.078097 58.766526) + (xy 77.08622 58.752323) (xy 77.090791 58.736173) (xy 77.091629 58.725244) (xy 77.084365 58.694173) + (xy 77.063695 58.669735) (xy 77.049311 58.661638) (xy 77.03294 58.657053) (xy 77.021592 58.656184) + (xy 76.989895 58.663444) (xy 76.965125 58.684012) (xy 76.95701 58.698211) (xy 76.952449 58.714352) + ) + ) + (polygon + (pts + (xy 76.951616 58.586209) (xy 76.958882 58.617735) (xy 76.979505 58.64246) (xy 76.993807 58.650631) + (xy 77.010084 58.655279) (xy 77.021592 58.656184) (xy 77.053131 58.648919) (xy 77.077886 58.62829) + (xy 77.086068 58.61399) (xy 77.090723 58.597716) (xy 77.091629 58.586209) (xy 77.084365 58.554697) + (xy 77.063732 58.529942) (xy 77.049424 58.52175) (xy 77.033144 58.517085) (xy 77.021592 58.516172) + (xy 76.990093 58.523436) (xy 76.965368 58.544063) (xy 76.957186 58.558373) (xy 76.952528 58.574656) + ) + ) + (polygon + (pts + (xy 76.951616 58.445525) (xy 76.958882 58.47735) (xy 76.979483 58.502296) (xy 76.993735 58.510534) + (xy 77.009952 58.515237) (xy 77.021592 58.516172) (xy 77.052992 58.508904) (xy 77.077716 58.488235) + (xy 77.085945 58.47386) (xy 77.090666 58.45749) (xy 77.091629 58.445525) (xy 77.084365 58.413715) + (xy 77.063754 58.388738) (xy 77.049496 58.38048) (xy 77.033276 58.37576) (xy 77.021592 58.374816) + (xy 76.990232 58.382082) (xy 76.965538 58.40275) (xy 76.957309 58.417135) (xy 76.952584 58.433514) + ) + ) + (polygon + (pts + (xy 76.951616 58.164829) (xy 76.958882 58.196355) (xy 76.979505 58.22108) (xy 76.993807 58.229251) + (xy 77.010084 58.233899) (xy 77.021592 58.234804) (xy 77.053131 58.227539) (xy 77.077886 58.20691) + (xy 77.086068 58.19261) (xy 77.090723 58.176336) (xy 77.091629 58.164829) (xy 77.084365 58.13333) + (xy 77.063738 58.108605) (xy 77.049428 58.100423) (xy 77.033145 58.095764) (xy 77.021592 58.094853) + (xy 76.990065 58.102118) (xy 76.965341 58.122742) (xy 76.957169 58.137043) (xy 76.952521 58.15332) + ) + ) + (polygon + (pts + (xy 77.091629 59.004352) (xy 77.098894 59.036311) (xy 77.119427 59.061162) (xy 77.133653 59.069366) + (xy 77.149845 59.074054) (xy 77.161604 59.075) (xy 77.193131 59.067734) (xy 77.217855 59.047111) + (xy 77.226027 59.032809) (xy 77.230675 59.016532) (xy 77.23158 59.005024) (xy 77.224315 58.973052) + (xy 77.203776 58.948171) (xy 77.189552 58.939958) (xy 77.173362 58.935263) (xy 77.161604 58.934316) + (xy 77.130105 58.94158) (xy 77.105381 58.962207) (xy 77.097199 58.976516) (xy 77.09254 58.992799) + ) + ) + (polygon + (pts + (xy 77.23158 59.004352) (xy 77.238844 59.036283) (xy 77.25938 59.061135) (xy 77.273615 59.069348) + (xy 77.289812 59.074047) (xy 77.301616 59.075) (xy 77.333143 59.067734) (xy 77.357868 59.047111) + (xy 77.366039 59.032809) (xy 77.370687 59.016532) (xy 77.371592 59.005024) (xy 77.364327 58.973052) + (xy 77.343788 58.948171) (xy 77.329564 58.939958) (xy 77.313375 58.935263) (xy 77.301616 58.934316) + (xy 77.270105 58.94158) (xy 77.24535 58.962212) (xy 77.237158 58.97652) (xy 77.232493 58.9928) + ) + ) + (polygon + (pts + (xy 77.371592 59.004352) (xy 77.378856 59.036283) (xy 77.399392 59.061135) (xy 77.413627 59.069348) + (xy 77.429825 59.074047) (xy 77.441629 59.075) (xy 77.473156 59.067734) (xy 77.49788 59.047111) + (xy 77.506052 59.032809) (xy 77.5107 59.016532) (xy 77.511604 59.005024) (xy 77.504339 58.973052) + (xy 77.4838 58.948171) (xy 77.469576 58.939958) (xy 77.453387 58.935263) (xy 77.441629 58.934316) + (xy 77.410117 58.94158) (xy 77.385362 58.962212) (xy 77.37717 58.97652) (xy 77.372505 58.9928) + ) + ) + (polygon + (pts + (xy 77.511604 59.004352) (xy 77.51887 59.036311) (xy 77.539403 59.061162) (xy 77.553629 59.069366) + (xy 77.56982 59.074054) (xy 77.58158 59.075) (xy 77.613119 59.067734) (xy 77.637874 59.047105) + (xy 77.646056 59.032806) (xy 77.65071 59.016531) (xy 77.651616 59.005024) (xy 77.644353 58.973081) + (xy 77.62381 58.948198) (xy 77.609578 58.939975) (xy 77.593383 58.93527) (xy 77.58158 58.934316) + (xy 77.550081 58.94158) (xy 77.525356 58.962207) (xy 77.517174 58.976516) (xy 77.512516 58.992799) + ) + ) + (polygon + (pts + (xy 78.140835 58.234804) (xy 78.172362 58.227539) (xy 78.197086 58.206915) (xy 78.205258 58.192614) + (xy 78.209906 58.176337) (xy 78.21081 58.164829) (xy 78.203545 58.133302) (xy 78.182922 58.108577) + (xy 78.16862 58.100406) (xy 78.152343 58.095758) (xy 78.140835 58.094853) (xy 78.109295 58.102118) + (xy 78.084541 58.122747) (xy 78.076359 58.137047) (xy 78.071704 58.153321) (xy 78.070798 58.164829) + (xy 78.078062 58.196327) (xy 78.098689 58.221052) (xy 78.112999 58.229234) (xy 78.129282 58.233893) + ) + ) + (polygon + (pts + (xy 77.790835 59.004352) (xy 77.7981 59.036311) (xy 77.818633 59.061162) (xy 77.832859 59.069366) + (xy 77.849051 59.074054) (xy 77.86081 59.075) (xy 77.89235 59.067734) (xy 77.917105 59.047105) + (xy 77.925286 59.032806) (xy 77.929941 59.016531) (xy 77.930847 59.005024) (xy 77.923583 58.973081) + (xy 77.903041 58.948198) (xy 77.888808 58.939975) (xy 77.872613 58.93527) (xy 77.86081 58.934316) + (xy 77.829312 58.94158) (xy 77.804587 58.962207) (xy 77.796405 58.976516) (xy 77.791746 58.992799) + ) + ) + (polygon + (pts + (xy 77.790835 58.86434) (xy 77.7981 58.895867) (xy 77.818724 58.920591) (xy 77.833025 58.928763) + (xy 77.849302 58.933411) (xy 77.86081 58.934316) (xy 77.89235 58.92705) (xy 77.917105 58.906421) + (xy 77.925286 58.892122) (xy 77.929941 58.875848) (xy 77.930847 58.86434) (xy 77.923583 58.832841) + (xy 77.902956 58.808116) (xy 77.888646 58.799934) (xy 77.872363 58.795276) (xy 77.86081 58.794364) + (xy 77.829284 58.80163) (xy 77.804559 58.822253) (xy 77.796388 58.836555) (xy 77.791739 58.852832) + ) + ) + (polygon + (pts + (xy 77.790835 58.725244) (xy 77.7981 58.756381) (xy 77.818758 58.78083) (xy 77.833126 58.78892) + (xy 77.849483 58.793499) (xy 77.86081 58.794364) (xy 77.89252 58.787103) (xy 77.917315 58.766526) + (xy 77.925439 58.752323) (xy 77.93001 58.736173) (xy 77.930847 58.725244) (xy 77.923583 58.694173) + (xy 77.902914 58.669735) (xy 77.88853 58.661638) (xy 77.872159 58.657053) (xy 77.86081 58.656184) + (xy 77.829114 58.663444) (xy 77.804344 58.684012) (xy 77.796229 58.698211) (xy 77.791667 58.714352) + ) + ) + (polygon + (pts + (xy 77.790835 58.586209) (xy 77.7981 58.617735) (xy 77.818724 58.64246) (xy 77.833025 58.650631) + (xy 77.849302 58.655279) (xy 77.86081 58.656184) (xy 77.89235 58.648919) (xy 77.917105 58.62829) + (xy 77.925286 58.61399) (xy 77.929941 58.597716) (xy 77.930847 58.586209) (xy 77.923583 58.554697) + (xy 77.902951 58.529942) (xy 77.888643 58.52175) (xy 77.872362 58.517085) (xy 77.86081 58.516172) + (xy 77.829312 58.523436) (xy 77.804587 58.544063) (xy 77.796405 58.558373) (xy 77.791746 58.574656) + ) + ) + (polygon + (pts + (xy 77.790835 58.445525) (xy 77.7981 58.47735) (xy 77.818702 58.502296) (xy 77.832953 58.510534) + (xy 77.84917 58.515237) (xy 77.86081 58.516172) (xy 77.89221 58.508904) (xy 77.916935 58.488235) + (xy 77.925163 58.47386) (xy 77.929885 58.45749) (xy 77.930847 58.445525) (xy 77.923583 58.413715) + (xy 77.902973 58.388738) (xy 77.888715 58.38048) (xy 77.872494 58.37576) (xy 77.86081 58.374816) + (xy 77.829451 58.382082) (xy 77.804756 58.40275) (xy 77.796527 58.417135) (xy 77.791803 58.433514) + ) + ) + (polygon + (pts + (xy 77.930847 58.725244) (xy 77.938112 58.756381) (xy 77.95877 58.78083) (xy 77.973138 58.78892) + (xy 77.989495 58.793499) (xy 78.000823 58.794364) (xy 78.032519 58.787103) (xy 78.057284 58.766531) + (xy 78.065398 58.752326) (xy 78.069962 58.736174) (xy 78.070798 58.725244) (xy 78.063533 58.694145) + (xy 78.042867 58.669708) (xy 78.028491 58.661621) (xy 78.012127 58.657046) (xy 78.000823 58.656184) + (xy 77.969126 58.663444) (xy 77.944356 58.684012) (xy 77.936241 58.698211) (xy 77.931679 58.714352) + ) + ) + (polygon + (pts + (xy 77.930847 58.304841) (xy 77.938112 58.336368) (xy 77.958736 58.361092) (xy 77.973037 58.369264) + (xy 77.989314 58.373912) (xy 78.000823 58.374816) (xy 78.03235 58.367551) (xy 78.057074 58.346927) + (xy 78.065246 58.332626) (xy 78.069894 58.316349) (xy 78.070798 58.304841) (xy 78.063533 58.273301) + (xy 78.042904 58.248546) (xy 78.028604 58.240365) (xy 78.01233 58.23571) (xy 78.000823 58.234804) + (xy 77.969324 58.242068) (xy 77.944599 58.262695) (xy 77.936417 58.277005) (xy 77.931759 58.293288) + ) + ) + (polygon + (pts + (xy 78.070798 58.725244) (xy 78.078062 58.756354) (xy 78.098723 58.780803) (xy 78.1131 58.788903) + (xy 78.129463 58.793492) (xy 78.140835 58.794364) (xy 78.172532 58.787103) (xy 78.197296 58.766531) + (xy 78.20541 58.752326) (xy 78.209975 58.736174) (xy 78.21081 58.725244) (xy 78.203545 58.694145) + (xy 78.182879 58.669708) (xy 78.168504 58.661621) (xy 78.152139 58.657046) (xy 78.140835 58.656184) + (xy 78.109126 58.663444) (xy 78.084325 58.684017) (xy 78.0762 58.698215) (xy 78.071632 58.714353) + ) + ) + (polygon + (pts + (xy 78.21081 58.725244) (xy 78.218074 58.756354) (xy 78.238736 58.780803) (xy 78.253112 58.788903) + (xy 78.269475 58.793492) (xy 78.280847 58.794364) (xy 78.312544 58.787103) (xy 78.337308 58.766531) + (xy 78.345422 58.752326) (xy 78.349987 58.736174) (xy 78.350823 58.725244) (xy 78.343557 58.694145) + (xy 78.322891 58.669708) (xy 78.308516 58.661621) (xy 78.292151 58.657046) (xy 78.280847 58.656184) + (xy 78.249138 58.663444) (xy 78.224337 58.684017) (xy 78.216212 58.698215) (xy 78.211644 58.714353) + ) + ) + (polygon + (pts + (xy 78.21081 58.304841) (xy 78.218074 58.33634) (xy 78.238701 58.361064) (xy 78.253011 58.369246) + (xy 78.269294 58.373905) (xy 78.280847 58.374816) (xy 78.312374 58.367551) (xy 78.337098 58.346927) + (xy 78.34527 58.332626) (xy 78.349918 58.316349) (xy 78.350823 58.304841) (xy 78.343557 58.273301) + (xy 78.322928 58.248546) (xy 78.308629 58.240365) (xy 78.292355 58.23571) (xy 78.280847 58.234804) + (xy 78.249336 58.242068) (xy 78.22458 58.262701) (xy 78.216389 58.277009) (xy 78.211723 58.293289) + ) + ) + (polygon + (pts + (xy 78.350823 59.004352) (xy 78.358088 59.036311) (xy 78.378621 59.061162) (xy 78.392847 59.069366) + (xy 78.409039 59.074054) (xy 78.420798 59.075) (xy 78.452338 59.067734) (xy 78.477093 59.047105) + (xy 78.485274 59.032806) (xy 78.489929 59.016531) (xy 78.490835 59.005024) (xy 78.483571 58.973081) + (xy 78.463029 58.948198) (xy 78.448796 58.939975) (xy 78.432601 58.93527) (xy 78.420798 58.934316) + (xy 78.389299 58.94158) (xy 78.364575 58.962207) (xy 78.356393 58.976516) (xy 78.351734 58.992799) + ) + ) + (polygon + (pts + (xy 78.350823 58.86434) (xy 78.358088 58.895867) (xy 78.378712 58.920591) (xy 78.393013 58.928763) + (xy 78.40929 58.933411) (xy 78.420798 58.934316) (xy 78.452338 58.92705) (xy 78.477093 58.906421) + (xy 78.485274 58.892122) (xy 78.489929 58.875848) (xy 78.490835 58.86434) (xy 78.483571 58.832841) + (xy 78.462944 58.808116) (xy 78.448634 58.799934) (xy 78.432351 58.795276) (xy 78.420798 58.794364) + (xy 78.389271 58.80163) (xy 78.364547 58.822253) (xy 78.356375 58.836555) (xy 78.351727 58.852832) + ) + ) + (polygon + (pts + (xy 78.350823 58.725244) (xy 78.358088 58.756381) (xy 78.378746 58.78083) (xy 78.393114 58.78892) + (xy 78.409471 58.793499) (xy 78.420798 58.794364) (xy 78.452508 58.787103) (xy 78.477303 58.766526) + (xy 78.485427 58.752323) (xy 78.489998 58.736173) (xy 78.490835 58.725244) (xy 78.483571 58.694173) + (xy 78.462901 58.669735) (xy 78.448517 58.661638) (xy 78.432146 58.657053) (xy 78.420798 58.656184) + (xy 78.389102 58.663444) (xy 78.364331 58.684012) (xy 78.356217 58.698211) (xy 78.351655 58.714352) + ) + ) + (polygon + (pts + (xy 78.350823 58.586209) (xy 78.358088 58.617735) (xy 78.378712 58.64246) (xy 78.393013 58.650631) + (xy 78.40929 58.655279) (xy 78.420798 58.656184) (xy 78.452338 58.648919) (xy 78.477093 58.62829) + (xy 78.485274 58.61399) (xy 78.489929 58.597716) (xy 78.490835 58.586209) (xy 78.483571 58.554697) + (xy 78.462938 58.529942) (xy 78.44863 58.52175) (xy 78.43235 58.517085) (xy 78.420798 58.516172) + (xy 78.389299 58.523436) (xy 78.364575 58.544063) (xy 78.356393 58.558373) (xy 78.351734 58.574656) + ) + ) + (polygon + (pts + (xy 78.350823 58.445525) (xy 78.358088 58.47735) (xy 78.37869 58.502296) (xy 78.392941 58.510534) + (xy 78.409158 58.515237) (xy 78.420798 58.516172) (xy 78.452198 58.508904) (xy 78.476923 58.488235) + (xy 78.485151 58.47386) (xy 78.489872 58.45749) (xy 78.490835 58.445525) (xy 78.483571 58.413715) + (xy 78.46296 58.388738) (xy 78.448703 58.38048) (xy 78.432482 58.37576) (xy 78.420798 58.374816) + (xy 78.389438 58.382082) (xy 78.364744 58.40275) (xy 78.356515 58.417135) (xy 78.35179 58.433514) + ) + ) + (polygon + (pts + (xy 78.700029 58.234804) (xy 78.66853 58.242068) (xy 78.643805 58.262695) (xy 78.635623 58.277005) + (xy 78.630965 58.293288) (xy 78.630053 58.304841) (xy 78.637319 58.336368) (xy 78.657942 58.361092) + (xy 78.672243 58.369264) (xy 78.68852 58.373912) (xy 78.700029 58.374816) (xy 78.731568 58.367551) + (xy 78.756323 58.346922) (xy 78.764505 58.332622) (xy 78.769159 58.316348) (xy 78.770066 58.304841) + (xy 78.762802 58.273329) (xy 78.742169 58.248574) (xy 78.727861 58.240382) (xy 78.711581 58.235717) + ) + ) + (polygon + (pts + (xy 78.630053 59.005024) (xy 78.637319 59.036551) (xy 78.657942 59.061275) (xy 78.672243 59.069447) + (xy 78.68852 59.074095) (xy 78.700029 59.075) (xy 78.731568 59.067734) (xy 78.756323 59.047105) + (xy 78.764505 59.032806) (xy 78.769159 59.016531) (xy 78.770066 59.005024) (xy 78.762802 58.973525) + (xy 78.742175 58.9488) (xy 78.727865 58.940618) (xy 78.711582 58.93596) (xy 78.700029 58.935048) + (xy 78.668502 58.942314) (xy 78.643778 58.962937) (xy 78.635606 58.977238) (xy 78.630958 58.993515) + ) + ) + (polygon + (pts + (xy 78.630053 58.865317) (xy 78.637319 58.896714) (xy 78.657962 58.921373) (xy 78.672286 58.929526) + (xy 78.688589 58.934156) (xy 78.700029 58.935048) (xy 78.731596 58.927786) (xy 78.756367 58.907172) + (xy 78.76454 58.892898) (xy 78.769177 58.876663) (xy 78.770066 58.865317) (xy 78.762802 58.832879) + (xy 78.74232 58.807717) (xy 78.728169 58.799414) (xy 78.71207 58.794636) (xy 78.700029 58.793632) + (xy 78.668669 58.800898) (xy 78.643975 58.821565) (xy 78.635746 58.83595) (xy 78.631021 58.852329) + (xy 78.630053 58.86434) + ) + ) + (polygon + (pts + (xy 78.630053 58.723656) (xy 78.637319 58.755183) (xy 78.657942 58.779907) (xy 78.672243 58.788079) + (xy 78.68852 58.792727) (xy 78.700029 58.793632) (xy 78.731568 58.786366) (xy 78.756323 58.765737) + (xy 78.764505 58.751438) (xy 78.769159 58.735164) (xy 78.770066 58.723656) (xy 78.762802 58.69374) + (xy 78.741826 58.669498) (xy 78.727229 58.661442) (xy 78.710619 58.656945) (xy 78.700029 58.656184) + (xy 78.668474 58.663446) (xy 78.643734 58.684055) (xy 78.63557 58.698331) (xy 78.63094 58.714569) + (xy 78.630053 58.725915) + ) + ) + (polygon + (pts + (xy 78.630053 58.586209) (xy 78.637319 58.617735) (xy 78.657942 58.64246) (xy 78.672243 58.650631) + (xy 78.68852 58.655279) (xy 78.700029 58.656184) (xy 78.731568 58.648919) (xy 78.756323 58.62829) + (xy 78.764505 58.61399) (xy 78.769159 58.597716) (xy 78.770066 58.586209) (xy 78.762802 58.554697) + (xy 78.742169 58.529942) (xy 78.727861 58.52175) (xy 78.711581 58.517085) (xy 78.700029 58.516172) + (xy 78.66853 58.523436) (xy 78.643805 58.544063) (xy 78.635623 58.558373) (xy 78.630965 58.574656) + ) + ) + (polygon + (pts + (xy 78.630053 58.445525) (xy 78.637319 58.47735) (xy 78.65792 58.502296) (xy 78.672171 58.510534) + (xy 78.688389 58.515237) (xy 78.700029 58.516172) (xy 78.731429 58.508904) (xy 78.756153 58.488235) + (xy 78.764382 58.47386) (xy 78.769103 58.45749) (xy 78.770066 58.445525) (xy 78.762802 58.413715) + (xy 78.742191 58.388738) (xy 78.727933 58.38048) (xy 78.711712 58.37576) (xy 78.700029 58.374816) + (xy 78.668669 58.382082) (xy 78.643975 58.40275) (xy 78.635746 58.417135) (xy 78.631021 58.433514) + ) + ) + (polygon + (pts + (xy 78.630053 58.164829) (xy 78.637319 58.196355) (xy 78.657942 58.22108) (xy 78.672243 58.229251) + (xy 78.68852 58.233899) (xy 78.700029 58.234804) (xy 78.731568 58.227539) (xy 78.756323 58.20691) + (xy 78.764505 58.19261) (xy 78.769159 58.176336) (xy 78.770066 58.164829) (xy 78.762802 58.13333) + (xy 78.742175 58.108605) (xy 78.727865 58.100423) (xy 78.711582 58.095764) (xy 78.700029 58.094853) + (xy 78.668502 58.102118) (xy 78.643778 58.122742) (xy 78.635606 58.137043) (xy 78.630958 58.15332) + ) + ) + (polygon + (pts + (xy 78.770066 58.44583) (xy 78.777331 58.477539) (xy 78.797932 58.50237) (xy 78.812202 58.510573) + (xy 78.828443 58.515249) (xy 78.840041 58.516172) (xy 78.871512 58.508903) (xy 78.896215 58.488258) + (xy 78.904405 58.473917) (xy 78.909084 58.457584) (xy 78.910017 58.44583) (xy 78.902751 58.413796) + (xy 78.882185 58.388761) (xy 78.867969 58.3805) (xy 78.851793 58.375772) (xy 78.840041 58.374816) + (xy 78.808681 58.382082) (xy 78.783987 58.40275) (xy 78.775758 58.417135) (xy 78.771033 58.433514) + (xy 78.770066 58.445525) + ) + ) + (polygon + (pts + (xy 78.910017 58.586209) (xy 78.917281 58.617707) (xy 78.937908 58.642432) (xy 78.952217 58.650614) + (xy 78.9685 58.655273) (xy 78.980053 58.656184) (xy 79.01158 58.648919) (xy 79.036304 58.628295) + (xy 79.044476 58.613994) (xy 79.049124 58.597717) (xy 79.050029 58.586209) (xy 79.042764 58.554669) + (xy 79.022134 58.529914) (xy 79.007835 58.521733) (xy 78.991561 58.517078) (xy 78.980053 58.516172) + (xy 78.948542 58.523436) (xy 78.923786 58.544068) (xy 78.915595 58.558376) (xy 78.91093 58.574657) + ) + ) + (polygon + (pts + (xy 79.050029 58.725915) (xy 79.057293 58.755961) (xy 79.078246 58.780268) (xy 79.092819 58.788342) + (xy 79.1094 58.792858) (xy 79.120066 58.793632) (xy 79.151592 58.786366) (xy 79.176317 58.765743) + (xy 79.184488 58.751442) (xy 79.189136 58.735165) (xy 79.190041 58.723656) (xy 79.182776 58.693714) + (xy 79.161804 58.669471) (xy 79.147215 58.661426) (xy 79.130613 58.656939) (xy 79.120066 58.656184) + (xy 79.088498 58.663446) (xy 79.063727 58.68406) (xy 79.055554 58.698334) (xy 79.050917 58.71457) + ) + ) + (polygon + (pts + (xy 79.190041 59.005024) (xy 79.197306 59.036551) (xy 79.21793 59.061275) (xy 79.232231 59.069447) + (xy 79.248508 59.074095) (xy 79.260017 59.075) (xy 79.291556 59.067734) (xy 79.316311 59.047105) + (xy 79.324492 59.032806) (xy 79.329147 59.016531) (xy 79.330053 59.005024) (xy 79.322789 58.973525) + (xy 79.302162 58.9488) (xy 79.287853 58.940618) (xy 79.27157 58.93596) (xy 79.260017 58.935048) + (xy 79.22849 58.942314) (xy 79.203766 58.962937) (xy 79.195594 58.977238) (xy 79.190946 58.993515) + ) + ) + (polygon + (pts + (xy 79.190041 58.865317) (xy 79.197306 58.896714) (xy 79.21795 58.921373) (xy 79.232273 58.929526) + (xy 79.248577 58.934156) (xy 79.260017 58.935048) (xy 79.291584 58.927786) (xy 79.316355 58.907172) + (xy 79.324528 58.892898) (xy 79.329165 58.876663) (xy 79.330053 58.865317) (xy 79.322789 58.832879) + (xy 79.302308 58.807717) (xy 79.288157 58.799414) (xy 79.272058 58.794636) (xy 79.260017 58.793632) + (xy 79.228657 58.800898) (xy 79.203962 58.821565) (xy 79.195734 58.83595) (xy 79.191009 58.852329) + (xy 79.190041 58.86434) + ) + ) + (polygon + (pts + (xy 79.190041 58.723656) (xy 79.197306 58.755183) (xy 79.21793 58.779907) (xy 79.232231 58.788079) + (xy 79.248508 58.792727) (xy 79.260017 58.793632) (xy 79.291556 58.786366) (xy 79.316311 58.765737) + (xy 79.324492 58.751438) (xy 79.329147 58.735164) (xy 79.330053 58.723656) (xy 79.322789 58.69374) + (xy 79.301814 58.669498) (xy 79.287216 58.661442) (xy 79.270607 58.656945) (xy 79.260017 58.656184) + (xy 79.228462 58.663446) (xy 79.203721 58.684055) (xy 79.195558 58.698331) (xy 79.190928 58.714569) + (xy 79.190041 58.725915) + ) + ) + (polygon + (pts + (xy 79.190041 58.586209) (xy 79.197306 58.617735) (xy 79.21793 58.64246) (xy 79.232231 58.650631) + (xy 79.248508 58.655279) (xy 79.260017 58.656184) (xy 79.291556 58.648919) (xy 79.316311 58.62829) + (xy 79.324492 58.61399) (xy 79.329147 58.597716) (xy 79.330053 58.586209) (xy 79.322789 58.554697) + (xy 79.302157 58.529942) (xy 79.287849 58.52175) (xy 79.271569 58.517085) (xy 79.260017 58.516172) + (xy 79.228518 58.523436) (xy 79.203793 58.544063) (xy 79.195611 58.558373) (xy 79.190953 58.574656) + ) + ) + (polygon + (pts + (xy 79.190041 58.445525) (xy 79.197306 58.47735) (xy 79.217908 58.502296) (xy 79.232159 58.510534) + (xy 79.248376 58.515237) (xy 79.260017 58.516172) (xy 79.291417 58.508904) (xy 79.316141 58.488235) + (xy 79.32437 58.47386) (xy 79.329091 58.45749) (xy 79.330053 58.445525) (xy 79.322789 58.413715) + (xy 79.302179 58.388738) (xy 79.287921 58.38048) (xy 79.2717 58.37576) (xy 79.260017 58.374816) + (xy 79.228657 58.382082) (xy 79.203962 58.40275) (xy 79.195734 58.417135) (xy 79.191009 58.433514) + ) + ) + (polygon + (pts + (xy 79.190041 58.304841) (xy 79.197306 58.336368) (xy 79.21793 58.361092) (xy 79.232231 58.369264) + (xy 79.248508 58.373912) (xy 79.260017 58.374816) (xy 79.291556 58.367551) (xy 79.316311 58.346922) + (xy 79.324492 58.332622) (xy 79.329147 58.316348) (xy 79.330053 58.304841) (xy 79.322789 58.273329) + (xy 79.302157 58.248574) (xy 79.287849 58.240382) (xy 79.271569 58.235717) (xy 79.260017 58.234804) + (xy 79.228518 58.242068) (xy 79.203793 58.262695) (xy 79.195611 58.277005) (xy 79.190953 58.293288) + ) + ) + (polygon + (pts + (xy 79.190041 58.164829) (xy 79.197306 58.196355) (xy 79.21793 58.22108) (xy 79.232231 58.229251) + (xy 79.248508 58.233899) (xy 79.260017 58.234804) (xy 79.291556 58.227539) (xy 79.316311 58.20691) + (xy 79.324492 58.19261) (xy 79.329147 58.176336) (xy 79.330053 58.164829) (xy 79.322789 58.13333) + (xy 79.302162 58.108605) (xy 79.287853 58.100423) (xy 79.27157 58.095764) (xy 79.260017 58.094853) + (xy 79.22849 58.102118) (xy 79.203766 58.122742) (xy 79.195594 58.137043) (xy 79.190946 58.15332) + ) + ) + (polygon + (pts + (xy 80.098686 58.234804) (xy 80.130212 58.227539) (xy 80.154937 58.206915) (xy 80.163108 58.192614) + (xy 80.167757 58.176337) (xy 80.168661 58.164829) (xy 80.161396 58.133302) (xy 80.140772 58.108577) + (xy 80.126471 58.100406) (xy 80.110194 58.095758) (xy 80.098686 58.094853) (xy 80.067146 58.102118) + (xy 80.042391 58.122747) (xy 80.03421 58.137047) (xy 80.029555 58.153321) (xy 80.028649 58.164829) + (xy 80.035913 58.196327) (xy 80.05654 58.221052) (xy 80.07085 58.229234) (xy 80.087133 58.233893) + ) + ) + (polygon + (pts + (xy 79.748686 59.005024) (xy 79.755951 59.036551) (xy 79.776574 59.061275) (xy 79.790876 59.069447) + (xy 79.807153 59.074095) (xy 79.818661 59.075) (xy 79.850201 59.067734) (xy 79.874955 59.047105) + (xy 79.883137 59.032806) (xy 79.887792 59.016531) (xy 79.888698 59.005024) (xy 79.881434 58.973525) + (xy 79.860807 58.9488) (xy 79.846497 58.940618) (xy 79.830214 58.93596) (xy 79.818661 58.935048) + (xy 79.787134 58.942314) (xy 79.76241 58.962937) (xy 79.754238 58.977238) (xy 79.74959 58.993515) + ) + ) + (polygon + (pts + (xy 79.748686 58.86434) (xy 79.755951 58.896178) (xy 79.776558 58.921155) (xy 79.790807 58.929402) + (xy 79.807022 58.934112) (xy 79.818661 58.935048) (xy 79.850033 58.927782) (xy 79.874758 58.907109) + (xy 79.882997 58.892726) (xy 79.887728 58.87635) (xy 79.888698 58.86434) (xy 79.881434 58.832531) + (xy 79.860823 58.807553) (xy 79.846565 58.799296) (xy 79.830345 58.794575) (xy 79.818661 58.793632) + (xy 79.787301 58.800898) (xy 79.762607 58.821565) (xy 79.754378 58.83595) (xy 79.749653 58.852329) + ) + ) + (polygon + (pts + (xy 79.748686 58.723656) (xy 79.755951 58.755183) (xy 79.776574 58.779907) (xy 79.790876 58.788079) + (xy 79.807153 58.792727) (xy 79.818661 58.793632) (xy 79.850201 58.786366) (xy 79.874955 58.765737) + (xy 79.883137 58.751438) (xy 79.887792 58.735164) (xy 79.888698 58.723656) (xy 79.881434 58.692157) + (xy 79.860807 58.667432) (xy 79.846497 58.65925) (xy 79.830214 58.654592) (xy 79.818661 58.653681) + (xy 79.787134 58.660946) (xy 79.76241 58.681569) (xy 79.754238 58.695871) (xy 79.74959 58.712148) + ) + ) + (polygon + (pts + (xy 79.748686 58.58456) (xy 79.755951 58.615697) (xy 79.776608 58.640146) (xy 79.790977 58.648236) + (xy 79.807334 58.652815) (xy 79.818661 58.653681) (xy 79.85037 58.646419) (xy 79.875166 58.625842) + (xy 79.88329 58.611639) (xy 79.887861 58.595489) (xy 79.888698 58.58456) (xy 79.881434 58.553489) + (xy 79.860764 58.529052) (xy 79.84638 58.520954) (xy 79.830009 58.516369) (xy 79.818661 58.5155) + (xy 79.786964 58.52276) (xy 79.762194 58.543328) (xy 79.75408 58.557527) (xy 79.749518 58.573668) + ) + ) + (polygon + (pts + (xy 79.748686 58.445525) (xy 79.755951 58.477052) (xy 79.776574 58.501776) (xy 79.790876 58.509948) + (xy 79.807153 58.514596) (xy 79.818661 58.5155) (xy 79.850201 58.508235) (xy 79.874955 58.487606) + (xy 79.883137 58.473306) (xy 79.887792 58.457032) (xy 79.888698 58.445525) (xy 79.881434 58.414013) + (xy 79.860801 58.389258) (xy 79.846493 58.381066) (xy 79.830213 58.376401) (xy 79.818661 58.375488) + (xy 79.787162 58.382752) (xy 79.762437 58.403379) (xy 79.754255 58.417689) (xy 79.749597 58.433972) + ) + ) + (polygon + (pts + (xy 79.888698 58.723656) (xy 79.895963 58.755183) (xy 79.916587 58.779907) (xy 79.930888 58.788079) + (xy 79.947165 58.792727) (xy 79.958673 58.793632) (xy 79.9902 58.786366) (xy 80.014924 58.765743) + (xy 80.023096 58.751442) (xy 80.027744 58.735165) (xy 80.028649 58.723656) (xy 80.021384 58.692129) + (xy 80.00076 58.667405) (xy 79.986459 58.659233) (xy 79.970182 58.654585) (xy 79.958673 58.653681) + (xy 79.927146 58.660946) (xy 79.902422 58.681569) (xy 79.89425 58.695871) (xy 79.889602 58.712148) + ) + ) + (polygon + (pts + (xy 79.888698 58.305146) (xy 79.895963 58.336855) (xy 79.916564 58.361687) (xy 79.930835 58.369889) + (xy 79.947075 58.374565) (xy 79.958673 58.375488) (xy 79.990144 58.368219) (xy 80.014848 58.347574) + (xy 80.023037 58.333233) (xy 80.027716 58.3169) (xy 80.028649 58.305146) (xy 80.021384 58.273464) + (xy 80.000768 58.248613) (xy 79.986493 58.240404) (xy 79.970248 58.235725) (xy 79.958673 58.234804) + (xy 79.92723 58.24207) (xy 79.902521 58.262715) (xy 79.89432 58.277059) (xy 79.889634 58.293387) + ) + ) + (polygon + (pts + (xy 80.028649 58.723656) (xy 80.035913 58.755155) (xy 80.05654 58.77988) (xy 80.07085 58.788062) + (xy 80.087133 58.79272) (xy 80.098686 58.793632) (xy 80.130212 58.786366) (xy 80.154937 58.765743) + (xy 80.163108 58.751442) (xy 80.167757 58.735165) (xy 80.168661 58.723656) (xy 80.161396 58.692129) + (xy 80.140772 58.667405) (xy 80.126471 58.659233) (xy 80.110194 58.654585) (xy 80.098686 58.653681) + (xy 80.067146 58.660946) (xy 80.042391 58.681575) (xy 80.03421 58.695874) (xy 80.029555 58.712149) + ) + ) + (polygon + (pts + (xy 80.168661 58.723656) (xy 80.175925 58.755155) (xy 80.196552 58.77988) (xy 80.210862 58.788062) + (xy 80.227145 58.79272) (xy 80.238698 58.793632) (xy 80.270225 58.786366) (xy 80.294949 58.765743) + (xy 80.303121 58.751442) (xy 80.307769 58.735165) (xy 80.308673 58.723656) (xy 80.301408 58.692129) + (xy 80.280784 58.667405) (xy 80.266483 58.659233) (xy 80.250206 58.654585) (xy 80.238698 58.653681) + (xy 80.207158 58.660946) (xy 80.182403 58.681575) (xy 80.174222 58.695874) (xy 80.169567 58.712149) + ) + ) + (polygon + (pts + (xy 80.168661 58.305146) (xy 80.175925 58.336827) (xy 80.19653 58.361659) (xy 80.210809 58.369872) + (xy 80.227055 58.374558) (xy 80.238698 58.375488) (xy 80.270169 58.368219) (xy 80.294872 58.347574) + (xy 80.303062 58.333233) (xy 80.307741 58.3169) (xy 80.308673 58.305146) (xy 80.301408 58.273464) + (xy 80.280793 58.248613) (xy 80.266518 58.240404) (xy 80.250272 58.235725) (xy 80.238698 58.234804) + (xy 80.207242 58.24207) (xy 80.182502 58.262721) (xy 80.174292 58.277062) (xy 80.169599 58.293388) + ) + ) + (polygon + (pts + (xy 80.308673 59.005024) (xy 80.315939 59.036551) (xy 80.336562 59.061275) (xy 80.350863 59.069447) + (xy 80.36714 59.074095) (xy 80.378649 59.075) (xy 80.410188 59.067734) (xy 80.434943 59.047105) + (xy 80.443125 59.032806) (xy 80.447779 59.016531) (xy 80.448686 59.005024) (xy 80.441422 58.973525) + (xy 80.420795 58.9488) (xy 80.406485 58.940618) (xy 80.390202 58.93596) (xy 80.378649 58.935048) + (xy 80.347122 58.942314) (xy 80.322398 58.962937) (xy 80.314226 58.977238) (xy 80.309578 58.993515) + ) + ) + (polygon + (pts + (xy 80.308673 58.86434) (xy 80.315939 58.896178) (xy 80.336546 58.921155) (xy 80.350795 58.929402) + (xy 80.36701 58.934112) (xy 80.378649 58.935048) (xy 80.410021 58.927782) (xy 80.434746 58.907109) + (xy 80.442985 58.892726) (xy 80.447716 58.87635) (xy 80.448686 58.86434) (xy 80.441422 58.832531) + (xy 80.420811 58.807553) (xy 80.406553 58.799296) (xy 80.390332 58.794575) (xy 80.378649 58.793632) + (xy 80.347289 58.800898) (xy 80.322595 58.821565) (xy 80.314366 58.83595) (xy 80.309641 58.852329) + ) + ) + (polygon + (pts + (xy 80.308673 58.723656) (xy 80.315939 58.755183) (xy 80.336562 58.779907) (xy 80.350863 58.788079) + (xy 80.36714 58.792727) (xy 80.378649 58.793632) (xy 80.410188 58.786366) (xy 80.434943 58.765737) + (xy 80.443125 58.751438) (xy 80.447779 58.735164) (xy 80.448686 58.723656) (xy 80.441422 58.692157) + (xy 80.420795 58.667432) (xy 80.406485 58.65925) (xy 80.390202 58.654592) (xy 80.378649 58.653681) + (xy 80.347122 58.660946) (xy 80.322398 58.681569) (xy 80.314226 58.695871) (xy 80.309578 58.712148) + ) + ) + (polygon + (pts + (xy 80.308673 58.58456) (xy 80.315939 58.615697) (xy 80.336596 58.640146) (xy 80.350965 58.648236) + (xy 80.367321 58.652815) (xy 80.378649 58.653681) (xy 80.410358 58.646419) (xy 80.435153 58.625842) + (xy 80.443277 58.611639) (xy 80.447848 58.595489) (xy 80.448686 58.58456) (xy 80.441422 58.553489) + (xy 80.420752 58.529052) (xy 80.406368 58.520954) (xy 80.389997 58.516369) (xy 80.378649 58.5155) + (xy 80.346952 58.52276) (xy 80.322182 58.543328) (xy 80.314067 58.557527) (xy 80.309506 58.573668) + ) + ) + (polygon + (pts + (xy 80.308673 58.445525) (xy 80.315939 58.477052) (xy 80.336562 58.501776) (xy 80.350863 58.509948) + (xy 80.36714 58.514596) (xy 80.378649 58.5155) (xy 80.410188 58.508235) (xy 80.434943 58.487606) + (xy 80.443125 58.473306) (xy 80.447779 58.457032) (xy 80.448686 58.445525) (xy 80.441422 58.414013) + (xy 80.420789 58.389258) (xy 80.406481 58.381066) (xy 80.390201 58.376401) (xy 80.378649 58.375488) + (xy 80.34715 58.382752) (xy 80.322425 58.403379) (xy 80.314243 58.417689) (xy 80.309585 58.433972) + ) + ) + (polygon + (pts + (xy 80.65788 58.234804) (xy 80.626436 58.24207) (xy 80.601727 58.262715) (xy 80.593527 58.277059) + (xy 80.58884 58.293387) (xy 80.587904 58.305146) (xy 80.595169 58.336476) (xy 80.615835 58.361143) + (xy 80.630171 58.369301) (xy 80.646487 58.37393) (xy 80.65788 58.374816) (xy 80.689419 58.367551) + (xy 80.714174 58.346922) (xy 80.722355 58.332622) (xy 80.72701 58.316348) (xy 80.727916 58.304841) + (xy 80.720652 58.273383) (xy 80.699992 58.248589) (xy 80.685674 58.240384) (xy 80.669383 58.235713) + ) + ) + (polygon + (pts + (xy 80.587904 59.004352) (xy 80.595169 59.036311) (xy 80.615702 59.061162) (xy 80.629928 59.069366) + (xy 80.64612 59.074054) (xy 80.65788 59.075) (xy 80.689419 59.067734) (xy 80.714174 59.047105) + (xy 80.722355 59.032806) (xy 80.72701 59.016531) (xy 80.727916 59.005024) (xy 80.720652 58.973081) + (xy 80.70011 58.948198) (xy 80.685877 58.939975) (xy 80.669682 58.93527) (xy 80.65788 58.934316) + (xy 80.626381 58.94158) (xy 80.601656 58.962207) (xy 80.593474 58.976516) (xy 80.588815 58.992799) + ) + ) + (polygon + (pts + (xy 80.587904 58.86434) (xy 80.595169 58.895867) (xy 80.615793 58.920591) (xy 80.630094 58.928763) + (xy 80.646371 58.933411) (xy 80.65788 58.934316) (xy 80.689419 58.92705) (xy 80.714174 58.906421) + (xy 80.722355 58.892122) (xy 80.72701 58.875848) (xy 80.727916 58.86434) (xy 80.720652 58.832841) + (xy 80.700025 58.808116) (xy 80.685715 58.799934) (xy 80.669432 58.795276) (xy 80.65788 58.794364) + (xy 80.626353 58.80163) (xy 80.601628 58.822253) (xy 80.593457 58.836555) (xy 80.588809 58.852832) + ) + ) + (polygon + (pts + (xy 80.587904 58.725244) (xy 80.595169 58.756381) (xy 80.615827 58.78083) (xy 80.630195 58.78892) + (xy 80.646552 58.793499) (xy 80.65788 58.794364) (xy 80.689589 58.787103) (xy 80.714384 58.766526) + (xy 80.722508 58.752323) (xy 80.727079 58.736173) (xy 80.727916 58.725244) (xy 80.720652 58.694173) + (xy 80.699983 58.669735) (xy 80.685599 58.661638) (xy 80.669228 58.657053) (xy 80.65788 58.656184) + (xy 80.626183 58.663444) (xy 80.601413 58.684012) (xy 80.593298 58.698211) (xy 80.588736 58.714352) + ) + ) + (polygon + (pts + (xy 80.587904 58.586209) (xy 80.595169 58.617735) (xy 80.615793 58.64246) (xy 80.630094 58.650631) + (xy 80.646371 58.655279) (xy 80.65788 58.656184) (xy 80.689419 58.648919) (xy 80.714174 58.62829) + (xy 80.722355 58.61399) (xy 80.72701 58.597716) (xy 80.727916 58.586209) (xy 80.720652 58.554697) + (xy 80.70002 58.529942) (xy 80.685712 58.52175) (xy 80.669431 58.517085) (xy 80.65788 58.516172) + (xy 80.626381 58.523436) (xy 80.601656 58.544063) (xy 80.593474 58.558373) (xy 80.588815 58.574656) + ) + ) + (polygon + (pts + (xy 80.587904 58.44583) (xy 80.595169 58.477539) (xy 80.615771 58.50237) (xy 80.630041 58.510573) + (xy 80.646281 58.515249) (xy 80.65788 58.516172) (xy 80.689363 58.508903) (xy 80.714097 58.488252) + (xy 80.722296 58.473913) (xy 80.726982 58.457583) (xy 80.727916 58.44583) (xy 80.720652 58.413824) + (xy 80.700083 58.388789) (xy 80.685858 58.380517) (xy 80.669676 58.375779) (xy 80.65788 58.374816) + (xy 80.62652 58.382082) (xy 80.601825 58.40275) (xy 80.593596 58.417135) (xy 80.588872 58.433514) + (xy 80.587904 58.445525) + ) + ) + (polygon + (pts + (xy 80.587904 58.164829) (xy 80.595169 58.196355) (xy 80.615793 58.22108) (xy 80.630094 58.229251) + (xy 80.646371 58.233899) (xy 80.65788 58.234804) (xy 80.689419 58.227539) (xy 80.714174 58.20691) + (xy 80.722355 58.19261) (xy 80.72701 58.176336) (xy 80.727916 58.164829) (xy 80.720652 58.13333) + (xy 80.700025 58.108605) (xy 80.685715 58.100423) (xy 80.669432 58.095764) (xy 80.65788 58.094853) + (xy 80.626353 58.102118) (xy 80.601628 58.122742) (xy 80.593457 58.137043) (xy 80.588809 58.15332) + ) + ) + (polygon + (pts + (xy 80.727916 59.004352) (xy 80.735181 59.036311) (xy 80.755715 59.061162) (xy 80.769941 59.069366) + (xy 80.786132 59.074054) (xy 80.797892 59.075) (xy 80.829419 59.067734) (xy 80.854143 59.047111) + (xy 80.862315 59.032809) (xy 80.866963 59.016532) (xy 80.867867 59.005024) (xy 80.860602 58.973052) + (xy 80.840063 58.948171) (xy 80.825839 58.939958) (xy 80.80965 58.935263) (xy 80.797892 58.934316) + (xy 80.766393 58.94158) (xy 80.741668 58.962207) (xy 80.733486 58.976516) (xy 80.728828 58.992799) + ) + ) + (polygon + (pts + (xy 80.727916 58.164829) (xy 80.735181 58.196355) (xy 80.755805 58.22108) (xy 80.770106 58.229251) + (xy 80.786383 58.233899) (xy 80.797892 58.234804) (xy 80.829419 58.227539) (xy 80.854143 58.206915) + (xy 80.862315 58.192614) (xy 80.866963 58.176337) (xy 80.867867 58.164829) (xy 80.860602 58.133302) + (xy 80.839978 58.108577) (xy 80.825677 58.100406) (xy 80.8094 58.095758) (xy 80.797892 58.094853) + (xy 80.766365 58.102118) (xy 80.741641 58.122742) (xy 80.733469 58.137043) (xy 80.728821 58.15332) + ) + ) + (polygon + (pts + (xy 80.867867 59.004352) (xy 80.875131 59.036283) (xy 80.895668 59.061135) (xy 80.909902 59.069348) + (xy 80.9261 59.074047) (xy 80.937904 59.075) (xy 80.969431 59.067734) (xy 80.994155 59.047111) + (xy 81.002327 59.032809) (xy 81.006975 59.016532) (xy 81.00788 59.005024) (xy 81.000614 58.973052) + (xy 80.980076 58.948171) (xy 80.965851 58.939958) (xy 80.949662 58.935263) (xy 80.937904 58.934316) + (xy 80.906393 58.94158) (xy 80.881637 58.962212) (xy 80.873445 58.97652) (xy 80.86878 58.9928) + ) + ) + (polygon + (pts + (xy 80.867867 58.164829) (xy 80.875131 58.196327) (xy 80.895758 58.221052) (xy 80.910068 58.229234) + (xy 80.926351 58.233893) (xy 80.937904 58.234804) (xy 80.969431 58.227539) (xy 80.994155 58.206915) + (xy 81.002327 58.192614) (xy 81.006975 58.176337) (xy 81.00788 58.164829) (xy 81.000614 58.133302) + (xy 80.979991 58.108577) (xy 80.965689 58.100406) (xy 80.949412 58.095758) (xy 80.937904 58.094853) + (xy 80.906365 58.102118) (xy 80.88161 58.122747) (xy 80.873428 58.137047) (xy 80.868773 58.153321) + ) + ) + (polygon + (pts + (xy 81.00788 59.004352) (xy 81.015143 59.036283) (xy 81.03568 59.061135) (xy 81.049914 59.069348) + (xy 81.066112 59.074047) (xy 81.077916 59.075) (xy 81.109443 59.067734) (xy 81.134167 59.047111) + (xy 81.142339 59.032809) (xy 81.146987 59.016532) (xy 81.147892 59.005024) (xy 81.140626 58.973052) + (xy 81.120088 58.948171) (xy 81.105863 58.939958) (xy 81.089674 58.935263) (xy 81.077916 58.934316) + (xy 81.046405 58.94158) (xy 81.021649 58.962212) (xy 81.013458 58.97652) (xy 81.008793 58.9928) + ) + ) + (polygon + (pts + (xy 81.00788 58.164829) (xy 81.015143 58.196327) (xy 81.035771 58.221052) (xy 81.05008 58.229234) + (xy 81.066363 58.233893) (xy 81.077916 58.234804) (xy 81.109443 58.227539) (xy 81.134167 58.206915) + (xy 81.142339 58.192614) (xy 81.146987 58.176337) (xy 81.147892 58.164829) (xy 81.140626 58.133302) + (xy 81.120003 58.108577) (xy 81.105702 58.100406) (xy 81.089425 58.095758) (xy 81.077916 58.094853) + (xy 81.046377 58.102118) (xy 81.021622 58.122747) (xy 81.01344 58.137047) (xy 81.008786 58.153321) + ) + ) + (polygon + (pts + (xy 81.147892 58.86434) (xy 81.155157 58.895867) (xy 81.175781 58.920591) (xy 81.190082 58.928763) + (xy 81.206359 58.933411) (xy 81.217867 58.934316) (xy 81.249407 58.92705) (xy 81.274162 58.906421) + (xy 81.282343 58.892122) (xy 81.286998 58.875848) (xy 81.287904 58.86434) (xy 81.28064 58.832841) + (xy 81.260013 58.808116) (xy 81.245703 58.799934) (xy 81.22942 58.795276) (xy 81.217867 58.794364) + (xy 81.18634 58.80163) (xy 81.161616 58.822253) (xy 81.153444 58.836555) (xy 81.148796 58.852832) + ) + ) + (polygon + (pts + (xy 81.147892 58.725244) (xy 81.155157 58.756381) (xy 81.175815 58.78083) (xy 81.190183 58.78892) + (xy 81.20654 58.793499) (xy 81.217867 58.794364) (xy 81.249577 58.787103) (xy 81.274372 58.766526) + (xy 81.282496 58.752323) (xy 81.287067 58.736173) (xy 81.287904 58.725244) (xy 81.28064 58.694173) + (xy 81.25997 58.669735) (xy 81.245586 58.661638) (xy 81.229216 58.657053) (xy 81.217867 58.656184) + (xy 81.186171 58.663444) (xy 81.161401 58.684012) (xy 81.153286 58.698211) (xy 81.148724 58.714352) + ) + ) + (polygon + (pts + (xy 81.147892 58.586209) (xy 81.155157 58.617735) (xy 81.175781 58.64246) (xy 81.190082 58.650631) + (xy 81.206359 58.655279) (xy 81.217867 58.656184) (xy 81.249407 58.648919) (xy 81.274162 58.62829) + (xy 81.282343 58.61399) (xy 81.286998 58.597716) (xy 81.287904 58.586209) (xy 81.28064 58.554697) + (xy 81.260007 58.529942) (xy 81.2457 58.52175) (xy 81.229419 58.517085) (xy 81.217867 58.516172) + (xy 81.186368 58.523436) (xy 81.161644 58.544063) (xy 81.153462 58.558373) (xy 81.148803 58.574656) + ) + ) + (polygon + (pts + (xy 81.147892 58.44583) (xy 81.155157 58.477539) (xy 81.175758 58.50237) (xy 81.190029 58.510573) + (xy 81.206269 58.515249) (xy 81.217867 58.516172) (xy 81.249351 58.508903) (xy 81.274085 58.488252) + (xy 81.282284 58.473913) (xy 81.28697 58.457583) (xy 81.287904 58.44583) (xy 81.28064 58.413824) + (xy 81.26007 58.388789) (xy 81.245846 58.380517) (xy 81.229664 58.375779) (xy 81.217867 58.374816) + (xy 81.186507 58.382082) (xy 81.161813 58.40275) (xy 81.153584 58.417135) (xy 81.148859 58.433514) + (xy 81.147892 58.445525) + ) + ) + (polygon + (pts + (xy 81.147892 58.304841) (xy 81.155157 58.336368) (xy 81.175781 58.361092) (xy 81.190082 58.369264) + (xy 81.206359 58.373912) (xy 81.217867 58.374816) (xy 81.249407 58.367551) (xy 81.274162 58.346922) + (xy 81.282343 58.332622) (xy 81.286998 58.316348) (xy 81.287904 58.304841) (xy 81.28064 58.273383) + (xy 81.259979 58.248589) (xy 81.245662 58.240384) (xy 81.229371 58.235713) (xy 81.217867 58.234804) + (xy 81.186424 58.24207) (xy 81.161715 58.262715) (xy 81.153514 58.277059) (xy 81.148828 58.293387) + (xy 81.147892 58.305146) + ) + ) + (polygon + (pts + (xy 81.497098 58.234804) (xy 81.465599 58.242068) (xy 81.440874 58.262695) (xy 81.432692 58.277005) + (xy 81.428034 58.293288) (xy 81.427122 58.304841) (xy 81.434388 58.336368) (xy 81.455011 58.361092) + (xy 81.469313 58.369264) (xy 81.485589 58.373912) (xy 81.497098 58.374816) (xy 81.528637 58.367551) + (xy 81.553392 58.346922) (xy 81.561574 58.332622) (xy 81.566228 58.316348) (xy 81.567135 58.304841) + (xy 81.559871 58.273329) (xy 81.539238 58.248574) (xy 81.52493 58.240382) (xy 81.50865 58.235717) + ) + ) + (polygon + (pts + (xy 81.427122 59.005024) (xy 81.434388 59.036551) (xy 81.455011 59.061275) (xy 81.469313 59.069447) + (xy 81.485589 59.074095) (xy 81.497098 59.075) (xy 81.528637 59.067734) (xy 81.553392 59.047105) + (xy 81.561574 59.032806) (xy 81.566228 59.016531) (xy 81.567135 59.005024) (xy 81.559871 58.973525) + (xy 81.539244 58.9488) (xy 81.524934 58.940618) (xy 81.508651 58.93596) (xy 81.497098 58.935048) + (xy 81.465571 58.942314) (xy 81.440847 58.962937) (xy 81.432675 58.977238) (xy 81.428027 58.993515) + ) + ) + (polygon + (pts + (xy 81.427122 58.865317) (xy 81.434388 58.896714) (xy 81.455031 58.921373) (xy 81.469355 58.929526) + (xy 81.485658 58.934156) (xy 81.497098 58.935048) (xy 81.528666 58.927786) (xy 81.553436 58.907172) + (xy 81.561609 58.892898) (xy 81.566246 58.876663) (xy 81.567135 58.865317) (xy 81.559871 58.83319) + (xy 81.539374 58.80828) (xy 81.525174 58.800053) (xy 81.509014 58.795336) (xy 81.497098 58.794364) + (xy 81.465571 58.80163) (xy 81.440847 58.822253) (xy 81.432675 58.836555) (xy 81.428027 58.852832) + (xy 81.427122 58.86434) + ) + ) + (polygon + (pts + (xy 81.427122 58.725244) (xy 81.434388 58.756381) (xy 81.455045 58.78083) (xy 81.469414 58.78892) + (xy 81.48577 58.793499) (xy 81.497098 58.794364) (xy 81.528807 58.787103) (xy 81.553603 58.766526) + (xy 81.561726 58.752323) (xy 81.566297 58.736173) (xy 81.567135 58.725244) (xy 81.559871 58.694173) + (xy 81.539201 58.669735) (xy 81.524817 58.661638) (xy 81.508446 58.657053) (xy 81.497098 58.656184) + (xy 81.465401 58.663444) (xy 81.440631 58.684012) (xy 81.432516 58.698211) (xy 81.427955 58.714352) + ) + ) + (polygon + (pts + (xy 81.427122 58.586209) (xy 81.434388 58.617735) (xy 81.455011 58.64246) (xy 81.469313 58.650631) + (xy 81.485589 58.655279) (xy 81.497098 58.656184) (xy 81.528637 58.648919) (xy 81.553392 58.62829) + (xy 81.561574 58.61399) (xy 81.566228 58.597716) (xy 81.567135 58.586209) (xy 81.559871 58.554697) + (xy 81.539238 58.529942) (xy 81.52493 58.52175) (xy 81.50865 58.517085) (xy 81.497098 58.516172) + (xy 81.465599 58.523436) (xy 81.440874 58.544063) (xy 81.432692 58.558373) (xy 81.428034 58.574656) + ) + ) + (polygon + (pts + (xy 81.427122 58.445525) (xy 81.434388 58.47735) (xy 81.454989 58.502296) (xy 81.46924 58.510534) + (xy 81.485458 58.515237) (xy 81.497098 58.516172) (xy 81.528498 58.508904) (xy 81.553222 58.488235) + (xy 81.561451 58.47386) (xy 81.566172 58.45749) (xy 81.567135 58.445525) (xy 81.559871 58.413715) + (xy 81.53926 58.388738) (xy 81.525002 58.38048) (xy 81.508781 58.37576) (xy 81.497098 58.374816) + (xy 81.465738 58.382082) (xy 81.441044 58.40275) (xy 81.432815 58.417135) (xy 81.42809 58.433514) + ) + ) + (polygon + (pts + (xy 81.427122 58.164829) (xy 81.434388 58.196355) (xy 81.455011 58.22108) (xy 81.469313 58.229251) + (xy 81.485589 58.233899) (xy 81.497098 58.234804) (xy 81.528637 58.227539) (xy 81.553392 58.20691) + (xy 81.561574 58.19261) (xy 81.566228 58.176336) (xy 81.567135 58.164829) (xy 81.559871 58.13333) + (xy 81.539244 58.108605) (xy 81.524934 58.100423) (xy 81.508651 58.095764) (xy 81.497098 58.094853) + (xy 81.465571 58.102118) (xy 81.440847 58.122742) (xy 81.432675 58.137043) (xy 81.428027 58.15332) + ) + ) + (polygon + (pts + (xy 81.567135 58.586209) (xy 81.5744 58.617735) (xy 81.595023 58.64246) (xy 81.609325 58.650631) + (xy 81.625602 58.655279) (xy 81.63711 58.656184) (xy 81.668637 58.648919) (xy 81.693361 58.628295) + (xy 81.701533 58.613994) (xy 81.706181 58.597717) (xy 81.707086 58.586209) (xy 81.69982 58.554669) + (xy 81.679191 58.529914) (xy 81.664892 58.521733) (xy 81.648618 58.517078) (xy 81.63711 58.516172) + (xy 81.605611 58.523436) (xy 81.580886 58.544063) (xy 81.572704 58.558373) (xy 81.568046 58.574656) + ) + ) + (polygon + (pts + (xy 81.567135 58.164829) (xy 81.5744 58.196355) (xy 81.595023 58.22108) (xy 81.609325 58.229251) + (xy 81.625602 58.233899) (xy 81.63711 58.234804) (xy 81.668637 58.227539) (xy 81.693361 58.206915) + (xy 81.701533 58.192614) (xy 81.706181 58.176337) (xy 81.707086 58.164829) (xy 81.69982 58.133302) + (xy 81.679197 58.108577) (xy 81.664896 58.100406) (xy 81.648619 58.095758) (xy 81.63711 58.094853) + (xy 81.605583 58.102118) (xy 81.580859 58.122742) (xy 81.572687 58.137043) (xy 81.568039 58.15332) + ) + ) + (polygon + (pts + (xy 81.707086 58.725915) (xy 81.71435 58.756593) (xy 81.735106 58.780917) (xy 81.749561 58.788986) + (xy 81.766013 58.793533) (xy 81.777122 58.794364) (xy 81.808819 58.787103) (xy 81.833583 58.766531) + (xy 81.841698 58.752326) (xy 81.846262 58.736174) (xy 81.847098 58.725244) (xy 81.839833 58.694145) + (xy 81.819167 58.669708) (xy 81.804791 58.661621) (xy 81.788426 58.657046) (xy 81.777122 58.656184) + (xy 81.745413 58.663444) (xy 81.720612 58.684017) (xy 81.712488 58.698215) (xy 81.707919 58.714353) + (xy 81.707086 58.725244) + ) + ) + (polygon + (pts + (xy 81.707086 58.586209) (xy 81.71435 58.617707) (xy 81.734977 58.642432) (xy 81.749286 58.650614) + (xy 81.765569 58.655273) (xy 81.777122 58.656184) (xy 81.808649 58.648919) (xy 81.833373 58.628295) + (xy 81.841545 58.613994) (xy 81.846193 58.597717) (xy 81.847098 58.586209) (xy 81.839833 58.554669) + (xy 81.819204 58.529914) (xy 81.804904 58.521733) (xy 81.78863 58.517078) (xy 81.777122 58.516172) + (xy 81.745611 58.523436) (xy 81.720856 58.544068) (xy 81.712664 58.558376) (xy 81.707999 58.574657) + ) + ) + (polygon + (pts + (xy 81.707086 58.164829) (xy 81.71435 58.196327) (xy 81.734977 58.221052) (xy 81.749286 58.229234) + (xy 81.765569 58.233893) (xy 81.777122 58.234804) (xy 81.808649 58.227539) (xy 81.833373 58.206915) + (xy 81.841545 58.192614) (xy 81.846193 58.176337) (xy 81.847098 58.164829) (xy 81.839833 58.133302) + (xy 81.819209 58.108577) (xy 81.804908 58.100406) (xy 81.788631 58.095758) (xy 81.777122 58.094853) + (xy 81.745583 58.102118) (xy 81.720828 58.122747) (xy 81.712647 58.137047) (xy 81.707992 58.153321) + ) + ) + (polygon + (pts + (xy 81.847098 58.865317) (xy 81.854362 58.896686) (xy 81.875009 58.921345) (xy 81.889341 58.929509) + (xy 81.90565 58.93415) (xy 81.917135 58.935048) (xy 81.94869 58.927786) (xy 81.97343 58.907178) + (xy 81.981593 58.892902) (xy 81.986223 58.876664) (xy 81.98711 58.865317) (xy 81.979845 58.833161) + (xy 81.959352 58.808252) (xy 81.94516 58.800035) (xy 81.929006 58.795329) (xy 81.917135 58.794364) + (xy 81.885595 58.80163) (xy 81.86084 58.822259) (xy 81.852659 58.836558) (xy 81.848004 58.852833) + (xy 81.847098 58.86434) + ) + ) + (polygon + (pts + (xy 81.847098 58.586209) (xy 81.854362 58.617707) (xy 81.874989 58.642432) (xy 81.889299 58.650614) + (xy 81.905582 58.655273) (xy 81.917135 58.656184) (xy 81.948662 58.648919) (xy 81.973386 58.628295) + (xy 81.981558 58.613994) (xy 81.986206 58.597717) (xy 81.98711 58.586209) (xy 81.979845 58.554669) + (xy 81.959216 58.529914) (xy 81.944916 58.521733) (xy 81.928642 58.517078) (xy 81.917135 58.516172) + (xy 81.885623 58.523436) (xy 81.860868 58.544068) (xy 81.852676 58.558376) (xy 81.848011 58.574657) + ) + ) + (polygon + (pts + (xy 81.847098 58.164829) (xy 81.854362 58.196327) (xy 81.874989 58.221052) (xy 81.889299 58.229234) + (xy 81.905582 58.233893) (xy 81.917135 58.234804) (xy 81.948662 58.227539) (xy 81.973386 58.206915) + (xy 81.981558 58.192614) (xy 81.986206 58.176337) (xy 81.98711 58.164829) (xy 81.979845 58.133302) + (xy 81.959221 58.108577) (xy 81.94492 58.100406) (xy 81.928643 58.095758) (xy 81.917135 58.094853) + (xy 81.885595 58.102118) (xy 81.86084 58.122747) (xy 81.852659 58.137047) (xy 81.848004 58.153321) + ) + ) + (polygon + (pts + (xy 81.98711 59.005024) (xy 81.994375 59.036551) (xy 82.014999 59.061275) (xy 82.0293 59.069447) + (xy 82.045577 59.074095) (xy 82.057086 59.075) (xy 82.088625 59.067734) (xy 82.11338 59.047105) + (xy 82.121562 59.032806) (xy 82.126216 59.016531) (xy 82.127122 59.005024) (xy 82.119858 58.973525) + (xy 82.099231 58.9488) (xy 82.084922 58.940618) (xy 82.068639 58.93596) (xy 82.057086 58.935048) + (xy 82.025559 58.942314) (xy 82.000835 58.962937) (xy 81.992663 58.977238) (xy 81.988015 58.993515) + ) + ) + (polygon + (pts + (xy 81.98711 58.44583) (xy 81.994375 58.477539) (xy 82.014977 58.50237) (xy 82.029247 58.510573) + (xy 82.045488 58.515249) (xy 82.057086 58.516172) (xy 82.088569 58.508903) (xy 82.113303 58.488252) + (xy 82.121503 58.473913) (xy 82.126188 58.457583) (xy 82.127122 58.44583) (xy 82.119858 58.413824) + (xy 82.099289 58.388789) (xy 82.085065 58.380517) (xy 82.068882 58.375779) (xy 82.057086 58.374816) + (xy 82.025726 58.382082) (xy 82.001032 58.40275) (xy 81.992803 58.417135) (xy 81.988078 58.433514) + (xy 81.98711 58.445525) + ) + ) + (polygon + (pts + (xy 81.98711 58.304841) (xy 81.994375 58.336368) (xy 82.014999 58.361092) (xy 82.0293 58.369264) + (xy 82.045577 58.373912) (xy 82.057086 58.374816) (xy 82.088625 58.367551) (xy 82.11338 58.346922) + (xy 82.121562 58.332622) (xy 82.126216 58.316348) (xy 82.127122 58.304841) (xy 82.119858 58.273329) + (xy 82.099226 58.248574) (xy 82.084918 58.240382) (xy 82.068638 58.235717) (xy 82.057086 58.234804) + (xy 82.025587 58.242068) (xy 82.000862 58.262695) (xy 81.99268 58.277005) (xy 81.988022 58.293288) + ) + ) + (polygon + (pts + (xy 82.336316 58.234804) (xy 82.367856 58.227539) (xy 82.392611 58.20691) (xy 82.400792 58.19261) + (xy 82.405447 58.176336) (xy 82.406353 58.164829) (xy 82.399089 58.13333) (xy 82.378462 58.108605) + (xy 82.364152 58.100423) (xy 82.347869 58.095764) (xy 82.336316 58.094853) (xy 82.304789 58.102118) + (xy 82.280065 58.122742) (xy 82.271893 58.137043) (xy 82.267245 58.15332) (xy 82.266341 58.164829) + (xy 82.273606 58.196355) (xy 82.29423 58.22108) (xy 82.308531 58.229251) (xy 82.324808 58.233899) + ) + ) + (polygon + (pts + (xy 82.266341 59.005024) (xy 82.273606 59.036551) (xy 82.29423 59.061275) (xy 82.308531 59.069447) + (xy 82.324808 59.074095) (xy 82.336316 59.075) (xy 82.367856 59.067734) (xy 82.392611 59.047105) + (xy 82.400792 59.032806) (xy 82.405447 59.016531) (xy 82.406353 59.005024) (xy 82.399089 58.973525) + (xy 82.378462 58.9488) (xy 82.364152 58.940618) (xy 82.347869 58.93596) (xy 82.336316 58.935048) + (xy 82.304789 58.942314) (xy 82.280065 58.962937) (xy 82.271893 58.977238) (xy 82.267245 58.993515) + ) + ) + (polygon + (pts + (xy 82.406353 59.005024) (xy 82.413618 59.036551) (xy 82.434242 59.061275) (xy 82.448543 59.069447) + (xy 82.46482 59.074095) (xy 82.476329 59.075) (xy 82.507856 59.067734) (xy 82.53258 59.047111) + (xy 82.540752 59.032809) (xy 82.5454 59.016532) (xy 82.546304 59.005024) (xy 82.539039 58.973497) + (xy 82.518415 58.948773) (xy 82.504114 58.940601) (xy 82.487837 58.935953) (xy 82.476329 58.935048) + (xy 82.444802 58.942314) (xy 82.420078 58.962937) (xy 82.411906 58.977238) (xy 82.407258 58.993515) + ) + ) + (polygon + (pts + (xy 82.406353 58.86434) (xy 82.413618 58.896178) (xy 82.434225 58.921155) (xy 82.448475 58.929402) + (xy 82.464689 58.934112) (xy 82.476329 58.935048) (xy 82.507689 58.927782) (xy 82.532383 58.907115) + (xy 82.540612 58.89273) (xy 82.545336 58.876351) (xy 82.546304 58.86434) (xy 82.539039 58.832502) + (xy 82.518432 58.807525) (xy 82.504182 58.799278) (xy 82.487968 58.794568) (xy 82.476329 58.793632) + (xy 82.444969 58.800898) (xy 82.420274 58.821565) (xy 82.412046 58.83595) (xy 82.407321 58.852329) + ) + ) + (polygon + (pts + (xy 82.406353 58.723656) (xy 82.413618 58.755183) (xy 82.434242 58.779907) (xy 82.448543 58.788079) + (xy 82.46482 58.792727) (xy 82.476329 58.793632) (xy 82.507856 58.786366) (xy 82.53258 58.765743) + (xy 82.540752 58.751442) (xy 82.5454 58.735165) (xy 82.546304 58.723656) (xy 82.539039 58.692129) + (xy 82.518415 58.667405) (xy 82.504114 58.659233) (xy 82.487837 58.654585) (xy 82.476329 58.653681) + (xy 82.444802 58.660946) (xy 82.420078 58.681569) (xy 82.411906 58.695871) (xy 82.407258 58.712148) + ) + ) + (polygon + (pts + (xy 82.406353 58.583949) (xy 82.413618 58.615346) (xy 82.434261 58.640005) (xy 82.448585 58.648158) + (xy 82.464889 58.652789) (xy 82.476329 58.653681) (xy 82.507884 58.646418) (xy 82.532624 58.62581) + (xy 82.540787 58.611534) (xy 82.545417 58.595296) (xy 82.546304 58.583949) (xy 82.539039 58.553864) + (xy 82.518083 58.529526) (xy 82.503522 58.521453) (xy 82.48695 58.51694) (xy 82.476329 58.516172) + (xy 82.44483 58.523436) (xy 82.420105 58.544063) (xy 82.411923 58.558373) (xy 82.407264 58.574656) + (xy 82.406353 58.586209) + ) + ) + (polygon + (pts + (xy 82.406353 58.445525) (xy 82.413618 58.47735) (xy 82.43422 58.502296) (xy 82.448471 58.510534) + (xy 82.464688 58.515237) (xy 82.476329 58.516172) (xy 82.507716 58.508904) (xy 82.53241 58.488241) + (xy 82.540629 58.473864) (xy 82.545343 58.457491) (xy 82.546304 58.445525) (xy 82.539039 58.413687) + (xy 82.518432 58.38871) (xy 82.504182 58.380463) (xy 82.487968 58.375753) (xy 82.476329 58.374816) + (xy 82.444969 58.382082) (xy 82.420274 58.40275) (xy 82.412046 58.417135) (xy 82.407321 58.433514) + ) + ) + (polygon + (pts + (xy 82.406353 58.304841) (xy 82.413618 58.336368) (xy 82.434242 58.361092) (xy 82.448543 58.369264) + (xy 82.46482 58.373912) (xy 82.476329 58.374816) (xy 82.507856 58.367551) (xy 82.53258 58.346927) + (xy 82.540752 58.332626) (xy 82.5454 58.316349) (xy 82.546304 58.304841) (xy 82.539039 58.273301) + (xy 82.51841 58.248546) (xy 82.50411 58.240365) (xy 82.487836 58.23571) (xy 82.476329 58.234804) + (xy 82.44483 58.242068) (xy 82.420105 58.262695) (xy 82.411923 58.277005) (xy 82.407264 58.293288) + ) + ) + (polygon + (pts + (xy 82.406353 58.164829) (xy 82.413618 58.196355) (xy 82.434242 58.22108) (xy 82.448543 58.229251) + (xy 82.46482 58.233899) (xy 82.476329 58.234804) (xy 82.507856 58.227539) (xy 82.53258 58.206915) + (xy 82.540752 58.192614) (xy 82.5454 58.176337) (xy 82.546304 58.164829) (xy 82.539039 58.133302) + (xy 82.518415 58.108577) (xy 82.504114 58.100406) (xy 82.487837 58.095758) (xy 82.476329 58.094853) + (xy 82.444802 58.102118) (xy 82.420078 58.122742) (xy 82.411906 58.137043) (xy 82.407258 58.15332) + ) + ) + (polygon + (pts + (xy 82.546304 59.005024) (xy 82.553568 59.036523) (xy 82.574195 59.061248) (xy 82.588505 59.06943) + (xy 82.604788 59.074088) (xy 82.616341 59.075) (xy 82.647868 59.067734) (xy 82.672592 59.047111) + (xy 82.680764 59.032809) (xy 82.685412 59.016532) (xy 82.686316 59.005024) (xy 82.679051 58.973497) + (xy 82.658428 58.948773) (xy 82.644126 58.940601) (xy 82.627849 58.935953) (xy 82.616341 58.935048) + (xy 82.584801 58.942314) (xy 82.560047 58.962943) (xy 82.551865 58.977242) (xy 82.54721 58.993516) + ) + ) + (polygon + (pts + (xy 82.546304 58.164829) (xy 82.553568 58.196327) (xy 82.574195 58.221052) (xy 82.588505 58.229234) + (xy 82.604788 58.233893) (xy 82.616341 58.234804) (xy 82.647868 58.227539) (xy 82.672592 58.206915) + (xy 82.680764 58.192614) (xy 82.685412 58.176337) (xy 82.686316 58.164829) (xy 82.679051 58.133302) + (xy 82.658428 58.108577) (xy 82.644126 58.100406) (xy 82.627849 58.095758) (xy 82.616341 58.094853) + (xy 82.584801 58.102118) (xy 82.560047 58.122747) (xy 82.551865 58.137047) (xy 82.54721 58.153321) + ) + ) + (polygon + (pts + (xy 83.176145 58.234804) (xy 83.207672 58.227539) (xy 83.232397 58.206915) (xy 83.240568 58.192614) + (xy 83.245216 58.176337) (xy 83.246121 58.164829) (xy 83.238856 58.133302) (xy 83.218232 58.108577) + (xy 83.203931 58.100406) (xy 83.187654 58.095758) (xy 83.176145 58.094853) (xy 83.144606 58.102118) + (xy 83.119851 58.122747) (xy 83.11167 58.137047) (xy 83.107015 58.153321) (xy 83.106109 58.164829) + (xy 83.113373 58.196327) (xy 83.134 58.221052) (xy 83.148309 58.229234) (xy 83.164593 58.233893) + ) + ) + (polygon + (pts + (xy 82.826145 59.004352) (xy 82.833411 59.036311) (xy 82.853944 59.061162) (xy 82.86817 59.069366) + (xy 82.884362 59.074054) (xy 82.896121 59.075) (xy 82.92766 59.067734) (xy 82.952415 59.047105) + (xy 82.960597 59.032806) (xy 82.965251 59.016531) (xy 82.966158 59.005024) (xy 82.958894 58.973081) + (xy 82.938352 58.948198) (xy 82.924119 58.939975) (xy 82.907924 58.93527) (xy 82.896121 58.934316) + (xy 82.864622 58.94158) (xy 82.839897 58.962207) (xy 82.831715 58.976516) (xy 82.827057 58.992799) + ) + ) + (polygon + (pts + (xy 82.826145 58.86434) (xy 82.833411 58.895867) (xy 82.854034 58.920591) (xy 82.868336 58.928763) + (xy 82.884612 58.933411) (xy 82.896121 58.934316) (xy 82.92766 58.92705) (xy 82.952415 58.906421) + (xy 82.960597 58.892122) (xy 82.965251 58.875848) (xy 82.966158 58.86434) (xy 82.958894 58.832841) + (xy 82.938267 58.808116) (xy 82.923957 58.799934) (xy 82.907674 58.795276) (xy 82.896121 58.794364) + (xy 82.864594 58.80163) (xy 82.83987 58.822253) (xy 82.831698 58.836555) (xy 82.82705 58.852832) + ) + ) + (polygon + (pts + (xy 82.826145 58.725244) (xy 82.833411 58.756381) (xy 82.854068 58.78083) (xy 82.868437 58.78892) + (xy 82.884793 58.793499) (xy 82.896121 58.794364) (xy 82.92783 58.787103) (xy 82.952626 58.766526) + (xy 82.960749 58.752323) (xy 82.96532 58.736173) (xy 82.966158 58.725244) (xy 82.958894 58.694173) + (xy 82.938224 58.669735) (xy 82.92384 58.661638) (xy 82.907469 58.657053) (xy 82.896121 58.656184) + (xy 82.864424 58.663444) (xy 82.839654 58.684012) (xy 82.831539 58.698211) (xy 82.826978 58.714352) + ) + ) + (polygon + (pts + (xy 82.826145 58.586209) (xy 82.833411 58.617735) (xy 82.854034 58.64246) (xy 82.868336 58.650631) + (xy 82.884612 58.655279) (xy 82.896121 58.656184) (xy 82.92766 58.648919) (xy 82.952415 58.62829) + (xy 82.960597 58.61399) (xy 82.965251 58.597716) (xy 82.966158 58.586209) (xy 82.958894 58.554697) + (xy 82.938261 58.529942) (xy 82.923953 58.52175) (xy 82.907673 58.517085) (xy 82.896121 58.516172) + (xy 82.864622 58.523436) (xy 82.839897 58.544063) (xy 82.831715 58.558373) (xy 82.827057 58.574656) + ) + ) + (polygon + (pts + (xy 82.826145 58.445525) (xy 82.833411 58.47735) (xy 82.854012 58.502296) (xy 82.868263 58.510534) + (xy 82.884481 58.515237) (xy 82.896121 58.516172) (xy 82.927521 58.508904) (xy 82.952245 58.488235) + (xy 82.960474 58.47386) (xy 82.965195 58.45749) (xy 82.966158 58.445525) (xy 82.958894 58.413715) + (xy 82.938283 58.388738) (xy 82.924025 58.38048) (xy 82.907805 58.37576) (xy 82.896121 58.374816) + (xy 82.864761 58.382082) (xy 82.840067 58.40275) (xy 82.831838 58.417135) (xy 82.827113 58.433514) + ) + ) + (polygon + (pts + (xy 82.966158 58.725244) (xy 82.973423 58.756381) (xy 82.994081 58.78083) (xy 83.008449 58.78892) + (xy 83.024806 58.793499) (xy 83.036133 58.794364) (xy 83.06783 58.787103) (xy 83.092594 58.766531) + (xy 83.100709 58.752326) (xy 83.105273 58.736174) (xy 83.106109 58.725244) (xy 83.098843 58.694145) + (xy 83.078177 58.669708) (xy 83.063802 58.661621) (xy 83.047437 58.657046) (xy 83.036133 58.656184) + (xy 83.004437 58.663444) (xy 82.979666 58.684012) (xy 82.971552 58.698211) (xy 82.96699 58.714352) + ) + ) + (polygon + (pts + (xy 82.966158 58.304841) (xy 82.973423 58.336368) (xy 82.994046 58.361092) (xy 83.008348 58.369264) + (xy 83.024625 58.373912) (xy 83.036133 58.374816) (xy 83.06766 58.367551) (xy 83.092384 58.346927) + (xy 83.100556 58.332626) (xy 83.105204 58.316349) (xy 83.106109 58.304841) (xy 83.098843 58.273301) + (xy 83.078214 58.248546) (xy 83.063915 58.240365) (xy 83.047641 58.23571) (xy 83.036133 58.234804) + (xy 83.004634 58.242068) (xy 82.97991 58.262695) (xy 82.971728 58.277005) (xy 82.967069 58.293288) + ) + ) + (polygon + (pts + (xy 83.106109 58.725244) (xy 83.113373 58.756354) (xy 83.134034 58.780803) (xy 83.148411 58.788903) + (xy 83.164774 58.793492) (xy 83.176145 58.794364) (xy 83.207842 58.787103) (xy 83.232607 58.766531) + (xy 83.240721 58.752326) (xy 83.245285 58.736174) (xy 83.246121 58.725244) (xy 83.238856 58.694145) + (xy 83.21819 58.669708) (xy 83.203814 58.661621) (xy 83.187449 58.657046) (xy 83.176145 58.656184) + (xy 83.144436 58.663444) (xy 83.119635 58.684017) (xy 83.111511 58.698215) (xy 83.106942 58.714353) + ) + ) + (polygon + (pts + (xy 83.246121 58.725244) (xy 83.253385 58.756354) (xy 83.274046 58.780803) (xy 83.288423 58.788903) + (xy 83.304786 58.793492) (xy 83.316158 58.794364) (xy 83.347854 58.787103) (xy 83.372619 58.766531) + (xy 83.380733 58.752326) (xy 83.385297 58.736174) (xy 83.386133 58.725244) (xy 83.378868 58.694145) + (xy 83.358202 58.669708) (xy 83.343826 58.661621) (xy 83.327462 58.657046) (xy 83.316158 58.656184) + (xy 83.284448 58.663444) (xy 83.259647 58.684017) (xy 83.251523 58.698215) (xy 83.246955 58.714353) + ) + ) + (polygon + (pts + (xy 83.246121 58.304841) (xy 83.253385 58.33634) (xy 83.274012 58.361064) (xy 83.288322 58.369246) + (xy 83.304605 58.373905) (xy 83.316158 58.374816) (xy 83.347685 58.367551) (xy 83.372409 58.346927) + (xy 83.380581 58.332626) (xy 83.385229 58.316349) (xy 83.386133 58.304841) (xy 83.378868 58.273301) + (xy 83.358239 58.248546) (xy 83.343939 58.240365) (xy 83.327665 58.23571) (xy 83.316158 58.234804) + (xy 83.284646 58.242068) (xy 83.259891 58.262701) (xy 83.251699 58.277009) (xy 83.247034 58.293289) + ) + ) + (polygon + (pts + (xy 83.386133 59.004352) (xy 83.393399 59.036311) (xy 83.413932 59.061162) (xy 83.428158 59.069366) + (xy 83.444349 59.074054) (xy 83.456109 59.075) (xy 83.487648 59.067734) (xy 83.512403 59.047105) + (xy 83.520585 59.032806) (xy 83.525239 59.016531) (xy 83.526145 59.005024) (xy 83.518881 58.973081) + (xy 83.498339 58.948198) (xy 83.484107 58.939975) (xy 83.467912 58.93527) (xy 83.456109 58.934316) + (xy 83.42461 58.94158) (xy 83.399885 58.962207) (xy 83.391703 58.976516) (xy 83.387045 58.992799) + ) + ) + (polygon + (pts + (xy 83.386133 58.86434) (xy 83.393399 58.895867) (xy 83.414022 58.920591) (xy 83.428323 58.928763) + (xy 83.4446 58.933411) (xy 83.456109 58.934316) (xy 83.487648 58.92705) (xy 83.512403 58.906421) + (xy 83.520585 58.892122) (xy 83.525239 58.875848) (xy 83.526145 58.86434) (xy 83.518881 58.832841) + (xy 83.498254 58.808116) (xy 83.483945 58.799934) (xy 83.467662 58.795276) (xy 83.456109 58.794364) + (xy 83.424582 58.80163) (xy 83.399858 58.822253) (xy 83.391686 58.836555) (xy 83.387038 58.852832) + ) + ) + (polygon + (pts + (xy 83.386133 58.725244) (xy 83.393399 58.756381) (xy 83.414056 58.78083) (xy 83.428425 58.78892) + (xy 83.444781 58.793499) (xy 83.456109 58.794364) (xy 83.487818 58.787103) (xy 83.512613 58.766526) + (xy 83.520737 58.752323) (xy 83.525308 58.736173) (xy 83.526145 58.725244) (xy 83.518881 58.694173) + (xy 83.498212 58.669735) (xy 83.483828 58.661638) (xy 83.467457 58.657053) (xy 83.456109 58.656184) + (xy 83.424412 58.663444) (xy 83.399642 58.684012) (xy 83.391527 58.698211) (xy 83.386965 58.714352) + ) + ) + (polygon + (pts + (xy 83.386133 58.586209) (xy 83.393399 58.617735) (xy 83.414022 58.64246) (xy 83.428323 58.650631) + (xy 83.4446 58.655279) (xy 83.456109 58.656184) (xy 83.487648 58.648919) (xy 83.512403 58.62829) + (xy 83.520585 58.61399) (xy 83.525239 58.597716) (xy 83.526145 58.586209) (xy 83.518881 58.554697) + (xy 83.498249 58.529942) (xy 83.483941 58.52175) (xy 83.467661 58.517085) (xy 83.456109 58.516172) + (xy 83.42461 58.523436) (xy 83.399885 58.544063) (xy 83.391703 58.558373) (xy 83.387045 58.574656) + ) + ) + (polygon + (pts + (xy 83.386133 58.445525) (xy 83.393399 58.47735) (xy 83.414 58.502296) (xy 83.428251 58.510534) + (xy 83.444468 58.515237) (xy 83.456109 58.516172) (xy 83.487509 58.508904) (xy 83.512233 58.488235) + (xy 83.520462 58.47386) (xy 83.525183 58.45749) (xy 83.526145 58.445525) (xy 83.518881 58.413715) + (xy 83.498271 58.388738) (xy 83.484013 58.38048) (xy 83.467792 58.37576) (xy 83.456109 58.374816) + (xy 83.424749 58.382082) (xy 83.400055 58.40275) (xy 83.391826 58.417135) (xy 83.387101 58.433514) + ) + ) + (polygon + (pts + (xy 83.735339 58.234804) (xy 83.703841 58.242068) (xy 83.679116 58.262695) (xy 83.670934 58.277005) + (xy 83.666275 58.293288) (xy 83.665364 58.304841) (xy 83.672629 58.336368) (xy 83.693253 58.361092) + (xy 83.707554 58.369264) (xy 83.723831 58.373912) (xy 83.735339 58.374816) (xy 83.766879 58.367551) + (xy 83.791634 58.346922) (xy 83.799815 58.332622) (xy 83.80447 58.316348) (xy 83.805376 58.304841) + (xy 83.798112 58.273329) (xy 83.777479 58.248574) (xy 83.763172 58.240382) (xy 83.746891 58.235717) + ) + ) + (polygon + (pts + (xy 83.665364 59.005024) (xy 83.672629 59.036551) (xy 83.693253 59.061275) (xy 83.707554 59.069447) + (xy 83.723831 59.074095) (xy 83.735339 59.075) (xy 83.766879 59.067734) (xy 83.791634 59.047105) + (xy 83.799815 59.032806) (xy 83.80447 59.016531) (xy 83.805376 59.005024) (xy 83.798112 58.973525) + (xy 83.777485 58.9488) (xy 83.763175 58.940618) (xy 83.746892 58.93596) (xy 83.735339 58.935048) + (xy 83.703812 58.942314) (xy 83.679088 58.962937) (xy 83.670917 58.977238) (xy 83.666268 58.993515) + ) + ) + (polygon + (pts + (xy 83.665364 58.865317) (xy 83.672629 58.896714) (xy 83.693272 58.921373) (xy 83.707596 58.929526) + (xy 83.723899 58.934156) (xy 83.735339 58.935048) (xy 83.766907 58.927786) (xy 83.791678 58.907172) + (xy 83.799851 58.892898) (xy 83.804487 58.876663) (xy 83.805376 58.865317) (xy 83.798112 58.832879) + (xy 83.77763 58.807717) (xy 83.76348 58.799414) (xy 83.74738 58.794636) (xy 83.735339 58.793632) + (xy 83.70398 58.800898) (xy 83.679285 58.821565) (xy 83.671056 58.83595) (xy 83.666332 58.852329) + (xy 83.665364 58.86434) + ) + ) + (polygon + (pts + (xy 83.665364 58.723656) (xy 83.672629 58.755183) (xy 83.693253 58.779907) (xy 83.707554 58.788079) + (xy 83.723831 58.792727) (xy 83.735339 58.793632) (xy 83.766879 58.786366) (xy 83.791634 58.765737) + (xy 83.799815 58.751438) (xy 83.80447 58.735164) (xy 83.805376 58.723656) (xy 83.798112 58.69374) + (xy 83.777136 58.669498) (xy 83.762539 58.661442) (xy 83.74593 58.656945) (xy 83.735339 58.656184) + (xy 83.703784 58.663446) (xy 83.679044 58.684055) (xy 83.670881 58.698331) (xy 83.666251 58.714569) + (xy 83.665364 58.725915) + ) + ) + (polygon + (pts + (xy 83.665364 58.586209) (xy 83.672629 58.617735) (xy 83.693253 58.64246) (xy 83.707554 58.650631) + (xy 83.723831 58.655279) (xy 83.735339 58.656184) (xy 83.766879 58.648919) (xy 83.791634 58.62829) + (xy 83.799815 58.61399) (xy 83.80447 58.597716) (xy 83.805376 58.586209) (xy 83.798112 58.554697) + (xy 83.777479 58.529942) (xy 83.763172 58.52175) (xy 83.746891 58.517085) (xy 83.735339 58.516172) + (xy 83.703841 58.523436) (xy 83.679116 58.544063) (xy 83.670934 58.558373) (xy 83.666275 58.574656) + ) + ) + (polygon + (pts + (xy 83.665364 58.445525) (xy 83.672629 58.47735) (xy 83.693231 58.502296) (xy 83.707482 58.510534) + (xy 83.723699 58.515237) (xy 83.735339 58.516172) (xy 83.766739 58.508904) (xy 83.791464 58.488235) + (xy 83.799692 58.47386) (xy 83.804414 58.45749) (xy 83.805376 58.445525) (xy 83.798112 58.413715) + (xy 83.777502 58.388738) (xy 83.763244 58.38048) (xy 83.747023 58.37576) (xy 83.735339 58.374816) + (xy 83.70398 58.382082) (xy 83.679285 58.40275) (xy 83.671056 58.417135) (xy 83.666332 58.433514) + ) + ) + (polygon + (pts + (xy 83.665364 58.164829) (xy 83.672629 58.196355) (xy 83.693253 58.22108) (xy 83.707554 58.229251) + (xy 83.723831 58.233899) (xy 83.735339 58.234804) (xy 83.766879 58.227539) (xy 83.791634 58.20691) + (xy 83.799815 58.19261) (xy 83.80447 58.176336) (xy 83.805376 58.164829) (xy 83.798112 58.13333) + (xy 83.777485 58.108605) (xy 83.763175 58.100423) (xy 83.746892 58.095764) (xy 83.735339 58.094853) + (xy 83.703812 58.102118) (xy 83.679088 58.122742) (xy 83.670917 58.137043) (xy 83.666268 58.15332) + ) + ) + (polygon + (pts + (xy 83.805376 58.44583) (xy 83.812641 58.477539) (xy 83.833243 58.50237) (xy 83.847513 58.510573) + (xy 83.863753 58.515249) (xy 83.875352 58.516172) (xy 83.906823 58.508903) (xy 83.931526 58.488258) + (xy 83.939716 58.473917) (xy 83.944394 58.457584) (xy 83.945327 58.44583) (xy 83.938062 58.413796) + (xy 83.917496 58.388761) (xy 83.90328 58.3805) (xy 83.887104 58.375772) (xy 83.875352 58.374816) + (xy 83.843992 58.382082) (xy 83.819297 58.40275) (xy 83.811069 58.417135) (xy 83.806344 58.433514) + (xy 83.805376 58.445525) + ) + ) + (polygon + (pts + (xy 83.945327 58.586209) (xy 83.952591 58.617707) (xy 83.973218 58.642432) (xy 83.987528 58.650614) + (xy 84.003811 58.655273) (xy 84.015364 58.656184) (xy 84.046891 58.648919) (xy 84.071615 58.628295) + (xy 84.079787 58.613994) (xy 84.084435 58.597717) (xy 84.085339 58.586209) (xy 84.078074 58.554669) + (xy 84.057445 58.529914) (xy 84.043146 58.521733) (xy 84.026871 58.517078) (xy 84.015364 58.516172) + (xy 83.983852 58.523436) (xy 83.959097 58.544068) (xy 83.950905 58.558376) (xy 83.94624 58.574657) + ) + ) + (polygon + (pts + (xy 84.085339 58.725915) (xy 84.092603 58.755961) (xy 84.113557 58.780268) (xy 84.12813 58.788342) + (xy 84.144711 58.792858) (xy 84.155376 58.793632) (xy 84.186903 58.786366) (xy 84.211627 58.765743) + (xy 84.219799 58.751442) (xy 84.224447 58.735165) (xy 84.225352 58.723656) (xy 84.218086 58.693714) + (xy 84.197114 58.669471) (xy 84.182526 58.661426) (xy 84.165923 58.656939) (xy 84.155376 58.656184) + (xy 84.123809 58.663446) (xy 84.099038 58.68406) (xy 84.090865 58.698334) (xy 84.086228 58.71457) + ) + ) + (polygon + (pts + (xy 84.225352 59.005024) (xy 84.232617 59.036551) (xy 84.25324 59.061275) (xy 84.267542 59.069447) + (xy 84.283819 59.074095) (xy 84.295327 59.075) (xy 84.326867 59.067734) (xy 84.351621 59.047105) + (xy 84.359803 59.032806) (xy 84.364458 59.016531) (xy 84.365364 59.005024) (xy 84.3581 58.973525) + (xy 84.337473 58.9488) (xy 84.323163 58.940618) (xy 84.30688 58.93596) (xy 84.295327 58.935048) + (xy 84.2638 58.942314) (xy 84.239076 58.962937) (xy 84.230904 58.977238) (xy 84.226256 58.993515) + ) + ) + (polygon + (pts + (xy 84.225352 58.865317) (xy 84.232617 58.896714) (xy 84.25326 58.921373) (xy 84.267584 58.929526) + (xy 84.283887 58.934156) (xy 84.295327 58.935048) (xy 84.326895 58.927786) (xy 84.351666 58.907172) + (xy 84.359839 58.892898) (xy 84.364475 58.876663) (xy 84.365364 58.865317) (xy 84.3581 58.832879) + (xy 84.337618 58.807717) (xy 84.323467 58.799414) (xy 84.307368 58.794636) (xy 84.295327 58.793632) + (xy 84.263967 58.800898) (xy 84.239273 58.821565) (xy 84.231044 58.83595) (xy 84.226319 58.852329) + (xy 84.225352 58.86434) + ) + ) + (polygon + (pts + (xy 84.225352 58.723656) (xy 84.232617 58.755183) (xy 84.25324 58.779907) (xy 84.267542 58.788079) + (xy 84.283819 58.792727) (xy 84.295327 58.793632) (xy 84.326867 58.786366) (xy 84.351621 58.765737) + (xy 84.359803 58.751438) (xy 84.364458 58.735164) (xy 84.365364 58.723656) (xy 84.3581 58.69374) + (xy 84.337124 58.669498) (xy 84.322527 58.661442) (xy 84.305918 58.656945) (xy 84.295327 58.656184) + (xy 84.263772 58.663446) (xy 84.239032 58.684055) (xy 84.230869 58.698331) (xy 84.226239 58.714569) + (xy 84.225352 58.725915) + ) + ) + (polygon + (pts + (xy 84.225352 58.586209) (xy 84.232617 58.617735) (xy 84.25324 58.64246) (xy 84.267542 58.650631) + (xy 84.283819 58.655279) (xy 84.295327 58.656184) (xy 84.326867 58.648919) (xy 84.351621 58.62829) + (xy 84.359803 58.61399) (xy 84.364458 58.597716) (xy 84.365364 58.586209) (xy 84.3581 58.554697) + (xy 84.337467 58.529942) (xy 84.323159 58.52175) (xy 84.306879 58.517085) (xy 84.295327 58.516172) + (xy 84.263828 58.523436) (xy 84.239104 58.544063) (xy 84.230922 58.558373) (xy 84.226263 58.574656) + ) + ) + (polygon + (pts + (xy 84.225352 58.445525) (xy 84.232617 58.47735) (xy 84.253218 58.502296) (xy 84.26747 58.510534) + (xy 84.283687 58.515237) (xy 84.295327 58.516172) (xy 84.326727 58.508904) (xy 84.351452 58.488235) + (xy 84.35968 58.47386) (xy 84.364401 58.45749) (xy 84.365364 58.445525) (xy 84.3581 58.413715) + (xy 84.337489 58.388738) (xy 84.323231 58.38048) (xy 84.307011 58.37576) (xy 84.295327 58.374816) + (xy 84.263967 58.382082) (xy 84.239273 58.40275) (xy 84.231044 58.417135) (xy 84.226319 58.433514) + ) + ) + (polygon + (pts + (xy 84.225352 58.304841) (xy 84.232617 58.336368) (xy 84.25324 58.361092) (xy 84.267542 58.369264) + (xy 84.283819 58.373912) (xy 84.295327 58.374816) (xy 84.326867 58.367551) (xy 84.351621 58.346922) + (xy 84.359803 58.332622) (xy 84.364458 58.316348) (xy 84.365364 58.304841) (xy 84.3581 58.273329) + (xy 84.337467 58.248574) (xy 84.323159 58.240382) (xy 84.306879 58.235717) (xy 84.295327 58.234804) + (xy 84.263828 58.242068) (xy 84.239104 58.262695) (xy 84.230922 58.277005) (xy 84.226263 58.293288) + ) + ) + (polygon + (pts + (xy 84.225352 58.164829) (xy 84.232617 58.196355) (xy 84.25324 58.22108) (xy 84.267542 58.229251) + (xy 84.283819 58.233899) (xy 84.295327 58.234804) (xy 84.326867 58.227539) (xy 84.351621 58.20691) + (xy 84.359803 58.19261) (xy 84.364458 58.176336) (xy 84.365364 58.164829) (xy 84.3581 58.13333) + (xy 84.337473 58.108605) (xy 84.323163 58.100423) (xy 84.30688 58.095764) (xy 84.295327 58.094853) + (xy 84.2638 58.102118) (xy 84.239076 58.122742) (xy 84.230904 58.137043) (xy 84.226256 58.15332) + ) + ) + (polygon + (pts + (xy 71.846391 59.914804) (xy 71.877918 59.907539) (xy 71.902642 59.886915) (xy 71.910814 59.872614) + (xy 71.915462 59.856337) (xy 71.916366 59.844829) (xy 71.909101 59.813302) (xy 71.888478 59.788577) + (xy 71.874176 59.780406) (xy 71.857899 59.775758) (xy 71.846391 59.774853) (xy 71.814864 59.782118) + (xy 71.79014 59.802742) (xy 71.781968 59.817043) (xy 71.77732 59.83332) (xy 71.776415 59.844829) + (xy 71.783681 59.876355) (xy 71.804304 59.90108) (xy 71.818605 59.909251) (xy 71.834882 59.913899) + ) + ) + (polygon + (pts + (xy 71.636403 60.54434) (xy 71.643668 60.575867) (xy 71.664292 60.600591) (xy 71.678593 60.608763) + (xy 71.69487 60.613411) (xy 71.706379 60.614316) (xy 71.737918 60.60705) (xy 71.762673 60.586421) + (xy 71.770854 60.572122) (xy 71.775509 60.555848) (xy 71.776415 60.54434) (xy 71.769151 60.512841) + (xy 71.748524 60.488116) (xy 71.734215 60.479934) (xy 71.717932 60.475276) (xy 71.706379 60.474364) + (xy 71.674852 60.48163) (xy 71.650128 60.502253) (xy 71.641956 60.516555) (xy 71.637308 60.532832) + ) + ) + (polygon + (pts + (xy 71.636403 60.405244) (xy 71.643668 60.436381) (xy 71.664326 60.46083) (xy 71.678694 60.46892) + (xy 71.695051 60.473499) (xy 71.706379 60.474364) (xy 71.738088 60.467103) (xy 71.762883 60.446526) + (xy 71.771007 60.432323) (xy 71.775578 60.416173) (xy 71.776415 60.405244) (xy 71.769151 60.374173) + (xy 71.748482 60.349735) (xy 71.734098 60.341638) (xy 71.717727 60.337053) (xy 71.706379 60.336184) + (xy 71.674682 60.343444) (xy 71.649912 60.364012) (xy 71.641797 60.378211) (xy 71.637235 60.394352) + ) + ) + (polygon + (pts + (xy 71.636403 60.266209) (xy 71.643668 60.297735) (xy 71.664292 60.32246) (xy 71.678593 60.330631) + (xy 71.69487 60.335279) (xy 71.706379 60.336184) (xy 71.737918 60.328919) (xy 71.762673 60.30829) + (xy 71.770854 60.29399) (xy 71.775509 60.277716) (xy 71.776415 60.266209) (xy 71.769151 60.234697) + (xy 71.748519 60.209942) (xy 71.734211 60.20175) (xy 71.71793 60.197085) (xy 71.706379 60.196172) + (xy 71.67488 60.203436) (xy 71.650155 60.224063) (xy 71.641973 60.238373) (xy 71.637314 60.254656) + ) + ) + (polygon + (pts + (xy 71.636403 60.125525) (xy 71.643668 60.15735) (xy 71.66427 60.182296) (xy 71.678521 60.190534) + (xy 71.694738 60.195237) (xy 71.706379 60.196172) (xy 71.737779 60.188904) (xy 71.762503 60.168235) + (xy 71.770732 60.15386) (xy 71.775453 60.13749) (xy 71.776415 60.125525) (xy 71.769151 60.093715) + (xy 71.748541 60.068738) (xy 71.734283 60.06048) (xy 71.718062 60.05576) (xy 71.706379 60.054816) + (xy 71.675019 60.062082) (xy 71.650324 60.08275) (xy 71.642096 60.097135) (xy 71.637371 60.113514) + ) + ) + (polygon + (pts + (xy 71.636403 59.984841) (xy 71.643668 60.016368) (xy 71.664292 60.041092) (xy 71.678593 60.049264) + (xy 71.69487 60.053912) (xy 71.706379 60.054816) (xy 71.737918 60.047551) (xy 71.762673 60.026922) + (xy 71.770854 60.012622) (xy 71.775509 59.996348) (xy 71.776415 59.984841) (xy 71.769151 59.953329) + (xy 71.748519 59.928574) (xy 71.734211 59.920382) (xy 71.71793 59.915717) (xy 71.706379 59.914804) + (xy 71.67488 59.922068) (xy 71.650155 59.942695) (xy 71.641973 59.957005) (xy 71.637314 59.973288) + ) + ) + (polygon + (pts + (xy 71.776415 60.684352) (xy 71.783681 60.716311) (xy 71.804214 60.741162) (xy 71.81844 60.749366) + (xy 71.834631 60.754054) (xy 71.846391 60.755) (xy 71.877918 60.747734) (xy 71.902642 60.727111) + (xy 71.910814 60.712809) (xy 71.915462 60.696532) (xy 71.916366 60.685024) (xy 71.909101 60.653052) + (xy 71.888563 60.628171) (xy 71.874338 60.619958) (xy 71.858149 60.615263) (xy 71.846391 60.614316) + (xy 71.814892 60.62158) (xy 71.790167 60.642207) (xy 71.781985 60.656516) (xy 71.777327 60.672799) + ) + ) + (polygon + (pts + (xy 71.916366 60.684352) (xy 71.92363 60.716283) (xy 71.944167 60.741135) (xy 71.958401 60.749348) + (xy 71.974599 60.754047) (xy 71.986403 60.755) (xy 72.01793 60.747734) (xy 72.042654 60.727111) + (xy 72.050826 60.712809) (xy 72.055474 60.696532) (xy 72.056379 60.685024) (xy 72.049113 60.653052) + (xy 72.028575 60.628171) (xy 72.01435 60.619958) (xy 71.998161 60.615263) (xy 71.986403 60.614316) + (xy 71.954892 60.62158) (xy 71.930136 60.642212) (xy 71.921945 60.65652) (xy 71.917279 60.6728) + ) + ) + (polygon + (pts + (xy 71.916366 59.844829) (xy 71.92363 59.876327) (xy 71.944257 59.901052) (xy 71.958567 59.909234) + (xy 71.97485 59.913893) (xy 71.986403 59.914804) (xy 72.01793 59.907539) (xy 72.042654 59.886915) + (xy 72.050826 59.872614) (xy 72.055474 59.856337) (xy 72.056379 59.844829) (xy 72.049113 59.813302) + (xy 72.02849 59.788577) (xy 72.014189 59.780406) (xy 71.997912 59.775758) (xy 71.986403 59.774853) + (xy 71.954864 59.782118) (xy 71.930109 59.802747) (xy 71.921927 59.817047) (xy 71.917273 59.833321) + ) + ) + (polygon + (pts + (xy 72.056379 60.684352) (xy 72.063643 60.716283) (xy 72.084179 60.741135) (xy 72.098414 60.749348) + (xy 72.114611 60.754047) (xy 72.126415 60.755) (xy 72.157942 60.747734) (xy 72.182666 60.727111) + (xy 72.190838 60.712809) (xy 72.195486 60.696532) (xy 72.196391 60.685024) (xy 72.189126 60.653052) + (xy 72.168587 60.628171) (xy 72.154363 60.619958) (xy 72.138174 60.615263) (xy 72.126415 60.614316) + (xy 72.094904 60.62158) (xy 72.070148 60.642212) (xy 72.061957 60.65652) (xy 72.057292 60.6728) + ) + ) + (polygon + (pts + (xy 72.056379 59.844829) (xy 72.063643 59.876327) (xy 72.08427 59.901052) (xy 72.098579 59.909234) + (xy 72.114862 59.913893) (xy 72.126415 59.914804) (xy 72.157942 59.907539) (xy 72.182666 59.886915) + (xy 72.190838 59.872614) (xy 72.195486 59.856337) (xy 72.196391 59.844829) (xy 72.189126 59.813302) + (xy 72.168502 59.788577) (xy 72.154201 59.780406) (xy 72.137924 59.775758) (xy 72.126415 59.774853) + (xy 72.094876 59.782118) (xy 72.070121 59.802747) (xy 72.06194 59.817047) (xy 72.057285 59.833321) + ) + ) + (polygon + (pts + (xy 72.196391 60.54434) (xy 72.203656 60.575867) (xy 72.22428 60.600591) (xy 72.238581 60.608763) + (xy 72.254858 60.613411) (xy 72.266366 60.614316) (xy 72.297906 60.60705) (xy 72.322661 60.586421) + (xy 72.330842 60.572122) (xy 72.335497 60.555848) (xy 72.336403 60.54434) (xy 72.329139 60.512841) + (xy 72.308512 60.488116) (xy 72.294202 60.479934) (xy 72.277919 60.475276) (xy 72.266366 60.474364) + (xy 72.23484 60.48163) (xy 72.210115 60.502253) (xy 72.201944 60.516555) (xy 72.197295 60.532832) + ) + ) + (polygon + (pts + (xy 72.196391 59.985146) (xy 72.203656 60.016476) (xy 72.224322 60.041143) (xy 72.238658 60.049301) + (xy 72.254974 60.05393) (xy 72.266366 60.054816) (xy 72.297906 60.047551) (xy 72.322661 60.026922) + (xy 72.330842 60.012622) (xy 72.335497 59.996348) (xy 72.336403 59.984841) (xy 72.329139 59.953329) + (xy 72.308506 59.928574) (xy 72.294199 59.920382) (xy 72.277918 59.915717) (xy 72.266366 59.914804) + (xy 72.234868 59.922068) (xy 72.210143 59.942695) (xy 72.201961 59.957005) (xy 72.197302 59.973288) + (xy 72.196391 59.984841) + ) + ) + (polygon + (pts + (xy 72.545597 59.914804) (xy 72.514154 59.92207) (xy 72.489445 59.942715) (xy 72.481244 59.957059) + (xy 72.476557 59.973387) (xy 72.475621 59.985146) (xy 72.482887 60.016855) (xy 72.503488 60.041687) + (xy 72.517758 60.049889) (xy 72.533999 60.054565) (xy 72.545597 60.055488) (xy 72.57708 60.048219) + (xy 72.601814 60.027568) (xy 72.610014 60.01323) (xy 72.614699 59.996899) (xy 72.615634 59.985146) + (xy 72.60837 59.953492) (xy 72.587751 59.928641) (xy 72.573467 59.920421) (xy 72.557216 59.915732) + ) + ) + (polygon + (pts + (xy 72.475621 60.684352) (xy 72.482887 60.716311) (xy 72.50342 60.741162) (xy 72.517646 60.749366) + (xy 72.533838 60.754054) (xy 72.545597 60.755) (xy 72.577136 60.747734) (xy 72.601891 60.727105) + (xy 72.610073 60.712806) (xy 72.614728 60.696531) (xy 72.615634 60.685024) (xy 72.60837 60.653081) + (xy 72.587828 60.628198) (xy 72.573595 60.619975) (xy 72.5574 60.61527) (xy 72.545597 60.614316) + (xy 72.514098 60.62158) (xy 72.489373 60.642207) (xy 72.481191 60.656516) (xy 72.476533 60.672799) + ) + ) + (polygon + (pts + (xy 72.475621 60.54434) (xy 72.482887 60.575867) (xy 72.50351 60.600591) (xy 72.517812 60.608763) + (xy 72.534089 60.613411) (xy 72.545597 60.614316) (xy 72.577136 60.60705) (xy 72.601891 60.586421) + (xy 72.610073 60.572122) (xy 72.614728 60.555848) (xy 72.615634 60.54434) (xy 72.60837 60.512841) + (xy 72.587743 60.488116) (xy 72.573433 60.479934) (xy 72.55715 60.475276) (xy 72.545597 60.474364) + (xy 72.51407 60.48163) (xy 72.489346 60.502253) (xy 72.481174 60.516555) (xy 72.476526 60.532832) + ) + ) + (polygon + (pts + (xy 72.475621 60.405244) (xy 72.482887 60.436381) (xy 72.503544 60.46083) (xy 72.517913 60.46892) + (xy 72.53427 60.473499) (xy 72.545597 60.474364) (xy 72.577306 60.467103) (xy 72.602102 60.446526) + (xy 72.610226 60.432323) (xy 72.614796 60.416173) (xy 72.615634 60.405244) (xy 72.60837 60.374173) + (xy 72.5877 60.349735) (xy 72.573316 60.341638) (xy 72.556945 60.337053) (xy 72.545597 60.336184) + (xy 72.5139 60.343444) (xy 72.48913 60.364012) (xy 72.481016 60.378211) (xy 72.476454 60.394352) + ) + ) + (polygon + (pts + (xy 72.475621 60.266209) (xy 72.482887 60.297735) (xy 72.50351 60.32246) (xy 72.517812 60.330631) + (xy 72.534089 60.335279) (xy 72.545597 60.336184) (xy 72.577136 60.328919) (xy 72.601891 60.30829) + (xy 72.610073 60.29399) (xy 72.614728 60.277716) (xy 72.615634 60.266209) (xy 72.60837 60.234697) + (xy 72.587737 60.209942) (xy 72.573429 60.20175) (xy 72.557149 60.197085) (xy 72.545597 60.196172) + (xy 72.514098 60.203436) (xy 72.489373 60.224063) (xy 72.481191 60.238373) (xy 72.476533 60.254656) + ) + ) + (polygon + (pts + (xy 72.475621 60.12583) (xy 72.482887 60.157539) (xy 72.503488 60.18237) (xy 72.517758 60.190573) + (xy 72.533999 60.195249) (xy 72.545597 60.196172) (xy 72.57708 60.188903) (xy 72.601814 60.168252) + (xy 72.610014 60.153913) (xy 72.614699 60.137583) (xy 72.615634 60.12583) (xy 72.60837 60.094122) + (xy 72.587779 60.069309) (xy 72.573505 60.061103) (xy 72.557264 60.05642) (xy 72.545597 60.055488) + (xy 72.514098 60.062752) (xy 72.489373 60.083379) (xy 72.481191 60.097689) (xy 72.476533 60.113972) + (xy 72.475621 60.125525) + ) + ) + (polygon + (pts + (xy 72.475621 59.844829) (xy 72.482887 59.876355) (xy 72.50351 59.90108) (xy 72.517812 59.909251) + (xy 72.534089 59.913899) (xy 72.545597 59.914804) (xy 72.577136 59.907539) (xy 72.601891 59.88691) + (xy 72.610073 59.87261) (xy 72.614728 59.856336) (xy 72.615634 59.844829) (xy 72.60837 59.81333) + (xy 72.587743 59.788605) (xy 72.573433 59.780423) (xy 72.55715 59.775764) (xy 72.545597 59.774853) + (xy 72.51407 59.782118) (xy 72.489346 59.802742) (xy 72.481174 59.817043) (xy 72.476526 59.83332) + ) + ) + (polygon + (pts + (xy 72.615634 60.265232) (xy 72.622899 60.297387) (xy 72.643392 60.322296) (xy 72.657584 60.330513) + (xy 72.673738 60.33522) (xy 72.685609 60.336184) (xy 72.717136 60.328919) (xy 72.74186 60.308295) + (xy 72.750032 60.293994) (xy 72.75468 60.277717) (xy 72.755585 60.266209) (xy 72.74832 60.234669) + (xy 72.72769 60.209914) (xy 72.713391 60.201733) (xy 72.697117 60.197078) (xy 72.685609 60.196172) + (xy 72.65411 60.203436) (xy 72.629386 60.224063) (xy 72.621204 60.238373) (xy 72.616545 60.254656) + (xy 72.615634 60.266209) + ) + ) + (polygon + (pts + (xy 72.755585 60.266209) (xy 72.762849 60.297707) (xy 72.783476 60.322432) (xy 72.797786 60.330614) + (xy 72.814069 60.335273) (xy 72.825621 60.336184) (xy 72.857148 60.328919) (xy 72.881873 60.308295) + (xy 72.890044 60.293994) (xy 72.894692 60.277717) (xy 72.895597 60.266209) (xy 72.888332 60.234669) + (xy 72.867703 60.209914) (xy 72.853403 60.201733) (xy 72.837129 60.197078) (xy 72.825621 60.196172) + (xy 72.79411 60.203436) (xy 72.769355 60.224068) (xy 72.761163 60.238376) (xy 72.756498 60.254657) + ) + ) + (polygon + (pts + (xy 72.895597 60.266209) (xy 72.902861 60.297707) (xy 72.923488 60.322432) (xy 72.937798 60.330614) + (xy 72.954081 60.335273) (xy 72.965634 60.336184) (xy 72.997161 60.328919) (xy 73.021885 60.308295) + (xy 73.030057 60.293994) (xy 73.034705 60.277717) (xy 73.035609 60.266209) (xy 73.028344 60.234669) + (xy 73.007715 60.209914) (xy 72.993415 60.201733) (xy 72.977141 60.197078) (xy 72.965634 60.196172) + (xy 72.934122 60.203436) (xy 72.909367 60.224068) (xy 72.901175 60.238376) (xy 72.89651 60.254657) + ) + ) + (polygon + (pts + (xy 73.035609 60.684352) (xy 73.042875 60.716311) (xy 73.063408 60.741162) (xy 73.077634 60.749366) + (xy 73.093825 60.754054) (xy 73.105585 60.755) (xy 73.137124 60.747734) (xy 73.161879 60.727105) + (xy 73.170061 60.712806) (xy 73.174715 60.696531) (xy 73.175621 60.685024) (xy 73.168358 60.653081) + (xy 73.147816 60.628198) (xy 73.133583 60.619975) (xy 73.117388 60.61527) (xy 73.105585 60.614316) + (xy 73.074086 60.62158) (xy 73.049361 60.642207) (xy 73.041179 60.656516) (xy 73.036521 60.672799) + ) + ) + (polygon + (pts + (xy 73.035609 60.54434) (xy 73.042875 60.575867) (xy 73.063498 60.600591) (xy 73.077799 60.608763) + (xy 73.094076 60.613411) (xy 73.105585 60.614316) (xy 73.137124 60.60705) (xy 73.161879 60.586421) + (xy 73.170061 60.572122) (xy 73.174715 60.555848) (xy 73.175621 60.54434) (xy 73.168358 60.512841) + (xy 73.14773 60.488116) (xy 73.133421 60.479934) (xy 73.117138 60.475276) (xy 73.105585 60.474364) + (xy 73.074058 60.48163) (xy 73.049334 60.502253) (xy 73.041162 60.516555) (xy 73.036514 60.532832) + ) + ) + (polygon + (pts + (xy 73.035609 60.405244) (xy 73.042875 60.436381) (xy 73.063532 60.46083) (xy 73.077901 60.46892) + (xy 73.094257 60.473499) (xy 73.105585 60.474364) (xy 73.137294 60.467103) (xy 73.162089 60.446526) + (xy 73.170213 60.432323) (xy 73.174784 60.416173) (xy 73.175621 60.405244) (xy 73.168358 60.374173) + (xy 73.147688 60.349735) (xy 73.133304 60.341638) (xy 73.116933 60.337053) (xy 73.105585 60.336184) + (xy 73.073888 60.343444) (xy 73.049118 60.364012) (xy 73.041003 60.378211) (xy 73.036442 60.394352) + ) + ) + (polygon + (pts + (xy 73.035609 60.266209) (xy 73.042875 60.297735) (xy 73.063498 60.32246) (xy 73.077799 60.330631) + (xy 73.094076 60.335279) (xy 73.105585 60.336184) (xy 73.137124 60.328919) (xy 73.161879 60.30829) + (xy 73.170061 60.29399) (xy 73.174715 60.277716) (xy 73.175621 60.266209) (xy 73.168358 60.234697) + (xy 73.147725 60.209942) (xy 73.133417 60.20175) (xy 73.117137 60.197085) (xy 73.105585 60.196172) + (xy 73.074086 60.203436) (xy 73.049361 60.224063) (xy 73.041179 60.238373) (xy 73.036521 60.254656) + ) + ) + (polygon + (pts + (xy 73.035609 60.12583) (xy 73.042875 60.157539) (xy 73.063476 60.18237) (xy 73.077746 60.190573) + (xy 73.093987 60.195249) (xy 73.105585 60.196172) (xy 73.137068 60.188903) (xy 73.161802 60.168252) + (xy 73.170002 60.153913) (xy 73.174687 60.137583) (xy 73.175621 60.12583) (xy 73.168358 60.094122) + (xy 73.147766 60.069309) (xy 73.133493 60.061103) (xy 73.117251 60.05642) (xy 73.105585 60.055488) + (xy 73.074086 60.062752) (xy 73.049361 60.083379) (xy 73.041179 60.097689) (xy 73.036521 60.113972) + (xy 73.035609 60.125525) + ) + ) + (polygon + (pts + (xy 73.035609 59.985146) (xy 73.042875 60.016855) (xy 73.063476 60.041687) (xy 73.077746 60.049889) + (xy 73.093987 60.054565) (xy 73.105585 60.055488) (xy 73.137068 60.048219) (xy 73.161802 60.027568) + (xy 73.170002 60.01323) (xy 73.174687 59.996899) (xy 73.175621 59.985146) (xy 73.168358 59.953492) + (xy 73.147739 59.928641) (xy 73.133455 59.920421) (xy 73.117203 59.915732) (xy 73.105585 59.914804) + (xy 73.074142 59.92207) (xy 73.049432 59.942715) (xy 73.041232 59.957059) (xy 73.036545 59.973387) + ) + ) + (polygon + (pts + (xy 73.035609 59.844829) (xy 73.042875 59.876355) (xy 73.063498 59.90108) (xy 73.077799 59.909251) + (xy 73.094076 59.913899) (xy 73.105585 59.914804) (xy 73.137124 59.907539) (xy 73.161879 59.88691) + (xy 73.170061 59.87261) (xy 73.174715 59.856336) (xy 73.175621 59.844829) (xy 73.168358 59.81333) + (xy 73.14773 59.788605) (xy 73.133421 59.780423) (xy 73.117138 59.775764) (xy 73.105585 59.774853) + (xy 73.074058 59.782118) (xy 73.049334 59.802742) (xy 73.041162 59.817043) (xy 73.036514 59.83332) + ) + ) + (polygon + (pts + (xy 73.384815 59.914804) (xy 73.353317 59.922068) (xy 73.328592 59.942695) (xy 73.32041 59.957005) + (xy 73.315751 59.973288) (xy 73.31484 59.984841) (xy 73.322105 60.016368) (xy 73.342729 60.041092) + (xy 73.35703 60.049264) (xy 73.373307 60.053912) (xy 73.384815 60.054816) (xy 73.416355 60.047551) + (xy 73.44111 60.026922) (xy 73.449291 60.012622) (xy 73.453946 59.996348) (xy 73.454852 59.984841) + (xy 73.447588 59.953329) (xy 73.426956 59.928574) (xy 73.412648 59.920382) (xy 73.396367 59.915717) + ) + ) + (polygon + (pts + (xy 73.31484 60.685024) (xy 73.322105 60.716551) (xy 73.342729 60.741275) (xy 73.35703 60.749447) + (xy 73.373307 60.754095) (xy 73.384815 60.755) (xy 73.416355 60.747734) (xy 73.44111 60.727105) + (xy 73.449291 60.712806) (xy 73.453946 60.696531) (xy 73.454852 60.685024) (xy 73.447588 60.653525) + (xy 73.426961 60.6288) (xy 73.412651 60.620618) (xy 73.396368 60.61596) (xy 73.384815 60.615048) + (xy 73.353289 60.622314) (xy 73.328564 60.642937) (xy 73.320393 60.657238) (xy 73.315745 60.673515) + ) + ) + (polygon + (pts + (xy 73.31484 60.545317) (xy 73.322105 60.576714) (xy 73.342748 60.601373) (xy 73.357072 60.609526) + (xy 73.373375 60.614156) (xy 73.384815 60.615048) (xy 73.416383 60.607786) (xy 73.441154 60.587172) + (xy 73.449327 60.572898) (xy 73.453964 60.556663) (xy 73.454852 60.545317) (xy 73.447588 60.51319) + (xy 73.427092 60.48828) (xy 73.412891 60.480053) (xy 73.396732 60.475336) (xy 73.384815 60.474364) + (xy 73.353289 60.48163) (xy 73.328564 60.502253) (xy 73.320393 60.516555) (xy 73.315745 60.532832) + (xy 73.31484 60.54434) + ) + ) + (polygon + (pts + (xy 73.31484 60.405244) (xy 73.322105 60.436381) (xy 73.342763 60.46083) (xy 73.357131 60.46892) + (xy 73.373488 60.473499) (xy 73.384815 60.474364) (xy 73.416525 60.467103) (xy 73.44132 60.446526) + (xy 73.449444 60.432323) (xy 73.454015 60.416173) (xy 73.454852 60.405244) (xy 73.447588 60.374173) + (xy 73.426919 60.349735) (xy 73.412535 60.341638) (xy 73.396164 60.337053) (xy 73.384815 60.336184) + (xy 73.353119 60.343444) (xy 73.328349 60.364012) (xy 73.320234 60.378211) (xy 73.315672 60.394352) + ) + ) + (polygon + (pts + (xy 73.31484 60.266209) (xy 73.322105 60.297735) (xy 73.342729 60.32246) (xy 73.35703 60.330631) + (xy 73.373307 60.335279) (xy 73.384815 60.336184) (xy 73.416355 60.328919) (xy 73.44111 60.30829) + (xy 73.449291 60.29399) (xy 73.453946 60.277716) (xy 73.454852 60.266209) (xy 73.447588 60.234697) + (xy 73.426956 60.209942) (xy 73.412648 60.20175) (xy 73.396367 60.197085) (xy 73.384815 60.196172) + (xy 73.353317 60.203436) (xy 73.328592 60.224063) (xy 73.32041 60.238373) (xy 73.315751 60.254656) + ) + ) + (polygon + (pts + (xy 73.31484 60.125525) (xy 73.322105 60.15735) (xy 73.342707 60.182296) (xy 73.356958 60.190534) + (xy 73.373175 60.195237) (xy 73.384815 60.196172) (xy 73.416215 60.188904) (xy 73.44094 60.168235) + (xy 73.449168 60.15386) (xy 73.45389 60.13749) (xy 73.454852 60.125525) (xy 73.447588 60.093715) + (xy 73.426978 60.068738) (xy 73.41272 60.06048) (xy 73.396499 60.05576) (xy 73.384815 60.054816) + (xy 73.353456 60.062082) (xy 73.328761 60.08275) (xy 73.320532 60.097135) (xy 73.315808 60.113514) + ) + ) + (polygon + (pts + (xy 73.31484 59.844829) (xy 73.322105 59.876355) (xy 73.342729 59.90108) (xy 73.35703 59.909251) + (xy 73.373307 59.913899) (xy 73.384815 59.914804) (xy 73.416355 59.907539) (xy 73.44111 59.88691) + (xy 73.449291 59.87261) (xy 73.453946 59.856336) (xy 73.454852 59.844829) (xy 73.447588 59.81333) + (xy 73.426961 59.788605) (xy 73.412651 59.780423) (xy 73.396368 59.775764) (xy 73.384815 59.774853) + (xy 73.353289 59.782118) (xy 73.328564 59.802742) (xy 73.320393 59.817043) (xy 73.315745 59.83332) + ) + ) + (polygon + (pts + (xy 73.454852 60.266209) (xy 73.462117 60.297735) (xy 73.482741 60.32246) (xy 73.497042 60.330631) + (xy 73.513319 60.335279) (xy 73.524828 60.336184) (xy 73.556355 60.328919) (xy 73.581079 60.308295) + (xy 73.589251 60.293994) (xy 73.593899 60.277717) (xy 73.594803 60.266209) (xy 73.587538 60.234669) + (xy 73.566909 60.209914) (xy 73.552609 60.201733) (xy 73.536335 60.197078) (xy 73.524828 60.196172) + (xy 73.493329 60.203436) (xy 73.468604 60.224063) (xy 73.460422 60.238373) (xy 73.455764 60.254656) + ) + ) + (polygon + (pts + (xy 73.454852 59.844829) (xy 73.462117 59.876355) (xy 73.482741 59.90108) (xy 73.497042 59.909251) + (xy 73.513319 59.913899) (xy 73.524828 59.914804) (xy 73.556355 59.907539) (xy 73.581079 59.886915) + (xy 73.589251 59.872614) (xy 73.593899 59.856337) (xy 73.594803 59.844829) (xy 73.587538 59.813302) + (xy 73.566914 59.788577) (xy 73.552613 59.780406) (xy 73.536336 59.775758) (xy 73.524828 59.774853) + (xy 73.493301 59.782118) (xy 73.468577 59.802742) (xy 73.460405 59.817043) (xy 73.455757 59.83332) + ) + ) + (polygon + (pts + (xy 73.594803 60.405915) (xy 73.602067 60.436593) (xy 73.622824 60.460917) (xy 73.637279 60.468986) + (xy 73.653731 60.473533) (xy 73.66484 60.474364) (xy 73.696537 60.467103) (xy 73.721301 60.446531) + (xy 73.729415 60.432326) (xy 73.73398 60.416174) (xy 73.734815 60.405244) (xy 73.72755 60.374145) + (xy 73.706884 60.349708) (xy 73.692509 60.341621) (xy 73.676144 60.337046) (xy 73.66484 60.336184) + (xy 73.633131 60.343444) (xy 73.60833 60.364017) (xy 73.600205 60.378215) (xy 73.595637 60.394353) + (xy 73.594803 60.405244) + ) + ) + (polygon + (pts + (xy 73.594803 60.266209) (xy 73.602067 60.297707) (xy 73.622694 60.322432) (xy 73.637004 60.330614) + (xy 73.653287 60.335273) (xy 73.66484 60.336184) (xy 73.696367 60.328919) (xy 73.721091 60.308295) + (xy 73.729263 60.293994) (xy 73.733911 60.277717) (xy 73.734815 60.266209) (xy 73.72755 60.234669) + (xy 73.706921 60.209914) (xy 73.692622 60.201733) (xy 73.676347 60.197078) (xy 73.66484 60.196172) + (xy 73.633329 60.203436) (xy 73.608573 60.224068) (xy 73.600381 60.238376) (xy 73.595716 60.254657) + ) + ) + (polygon + (pts + (xy 73.594803 59.844829) (xy 73.602067 59.876327) (xy 73.622694 59.901052) (xy 73.637004 59.909234) + (xy 73.653287 59.913893) (xy 73.66484 59.914804) (xy 73.696367 59.907539) (xy 73.721091 59.886915) + (xy 73.729263 59.872614) (xy 73.733911 59.856337) (xy 73.734815 59.844829) (xy 73.72755 59.813302) + (xy 73.706927 59.788577) (xy 73.692625 59.780406) (xy 73.676348 59.775758) (xy 73.66484 59.774853) + (xy 73.633301 59.782118) (xy 73.608546 59.802747) (xy 73.600364 59.817047) (xy 73.595709 59.833321) + ) + ) + (polygon + (pts + (xy 73.734815 60.545317) (xy 73.742079 60.576686) (xy 73.762726 60.601345) (xy 73.777058 60.609509) + (xy 73.793368 60.61415) (xy 73.804852 60.615048) (xy 73.836407 60.607786) (xy 73.861147 60.587178) + (xy 73.869311 60.572902) (xy 73.873941 60.556664) (xy 73.874828 60.545317) (xy 73.867562 60.513161) + (xy 73.84707 60.488252) (xy 73.832877 60.480035) (xy 73.816724 60.475329) (xy 73.804852 60.474364) + (xy 73.773313 60.48163) (xy 73.748558 60.502259) (xy 73.740376 60.516558) (xy 73.735722 60.532833) + (xy 73.734815 60.54434) + ) + ) + (polygon + (pts + (xy 73.734815 60.266209) (xy 73.742079 60.297707) (xy 73.762707 60.322432) (xy 73.777016 60.330614) + (xy 73.793299 60.335273) (xy 73.804852 60.336184) (xy 73.836379 60.328919) (xy 73.861103 60.308295) + (xy 73.869275 60.293994) (xy 73.873923 60.277717) (xy 73.874828 60.266209) (xy 73.867562 60.234669) + (xy 73.846933 60.209914) (xy 73.832634 60.201733) (xy 73.81636 60.197078) (xy 73.804852 60.196172) + (xy 73.773341 60.203436) (xy 73.748585 60.224068) (xy 73.740394 60.238376) (xy 73.735728 60.254657) + ) + ) + (polygon + (pts + (xy 73.734815 59.844829) (xy 73.742079 59.876327) (xy 73.762707 59.901052) (xy 73.777016 59.909234) + (xy 73.793299 59.913893) (xy 73.804852 59.914804) (xy 73.836379 59.907539) (xy 73.861103 59.886915) + (xy 73.869275 59.872614) (xy 73.873923 59.856337) (xy 73.874828 59.844829) (xy 73.867562 59.813302) + (xy 73.846939 59.788577) (xy 73.832638 59.780406) (xy 73.816361 59.775758) (xy 73.804852 59.774853) + (xy 73.773313 59.782118) (xy 73.748558 59.802747) (xy 73.740376 59.817047) (xy 73.735722 59.833321) + ) + ) + (polygon + (pts + (xy 73.874828 60.685024) (xy 73.882093 60.716551) (xy 73.902717 60.741275) (xy 73.917018 60.749447) + (xy 73.933295 60.754095) (xy 73.944803 60.755) (xy 73.976343 60.747734) (xy 74.001098 60.727105) + (xy 74.009279 60.712806) (xy 74.013934 60.696531) (xy 74.01484 60.685024) (xy 74.007576 60.653525) + (xy 73.986949 60.6288) (xy 73.972639 60.620618) (xy 73.956356 60.61596) (xy 73.944803 60.615048) + (xy 73.913276 60.622314) (xy 73.888552 60.642937) (xy 73.88038 60.657238) (xy 73.875732 60.673515) + ) + ) + (polygon + (pts + (xy 73.874828 60.12583) (xy 73.882093 60.157539) (xy 73.902694 60.18237) (xy 73.916965 60.190573) + (xy 73.933205 60.195249) (xy 73.944803 60.196172) (xy 73.976287 60.188903) (xy 74.001021 60.168252) + (xy 74.00922 60.153913) (xy 74.013906 60.137583) (xy 74.01484 60.12583) (xy 74.007576 60.093824) + (xy 73.987006 60.068789) (xy 73.972782 60.060517) (xy 73.9566 60.055779) (xy 73.944803 60.054816) + (xy 73.913443 60.062082) (xy 73.888749 60.08275) (xy 73.88052 60.097135) (xy 73.875795 60.113514) + (xy 73.874828 60.125525) + ) + ) + (polygon + (pts + (xy 73.874828 59.984841) (xy 73.882093 60.016368) (xy 73.902717 60.041092) (xy 73.917018 60.049264) + (xy 73.933295 60.053912) (xy 73.944803 60.054816) (xy 73.976343 60.047551) (xy 74.001098 60.026922) + (xy 74.009279 60.012622) (xy 74.013934 59.996348) (xy 74.01484 59.984841) (xy 74.007576 59.953329) + (xy 73.986943 59.928574) (xy 73.972635 59.920382) (xy 73.956355 59.915717) (xy 73.944803 59.914804) + (xy 73.913304 59.922068) (xy 73.88858 59.942695) (xy 73.880398 59.957005) (xy 73.875739 59.973288) + ) + ) + (polygon + (pts + (xy 74.224034 59.914804) (xy 74.255573 59.907539) (xy 74.280328 59.88691) (xy 74.28851 59.87261) + (xy 74.293164 59.856336) (xy 74.294071 59.844829) (xy 74.286807 59.81333) (xy 74.26618 59.788605) + (xy 74.25187 59.780423) (xy 74.235587 59.775764) (xy 74.224034 59.774853) (xy 74.192507 59.782118) + (xy 74.167783 59.802742) (xy 74.159611 59.817043) (xy 74.154963 59.83332) (xy 74.154058 59.844829) + (xy 74.161324 59.876355) (xy 74.181947 59.90108) (xy 74.196248 59.909251) (xy 74.212525 59.913899) + ) + ) + (polygon + (pts + (xy 74.154058 60.685024) (xy 74.161324 60.716551) (xy 74.181947 60.741275) (xy 74.196248 60.749447) + (xy 74.212525 60.754095) (xy 74.224034 60.755) (xy 74.255573 60.747734) (xy 74.280328 60.727105) + (xy 74.28851 60.712806) (xy 74.293164 60.696531) (xy 74.294071 60.685024) (xy 74.286807 60.653525) + (xy 74.26618 60.6288) (xy 74.25187 60.620618) (xy 74.235587 60.61596) (xy 74.224034 60.615048) + (xy 74.192507 60.622314) (xy 74.167783 60.642937) (xy 74.159611 60.657238) (xy 74.154963 60.673515) + ) + ) + (polygon + (pts + (xy 74.294071 60.685024) (xy 74.301336 60.716551) (xy 74.321959 60.741275) (xy 74.336261 60.749447) + (xy 74.352538 60.754095) (xy 74.364046 60.755) (xy 74.395573 60.747734) (xy 74.420297 60.727111) + (xy 74.428469 60.712809) (xy 74.433117 60.696532) (xy 74.434022 60.685024) (xy 74.426756 60.653497) + (xy 74.406133 60.628773) (xy 74.391832 60.620601) (xy 74.375555 60.615953) (xy 74.364046 60.615048) + (xy 74.332519 60.622314) (xy 74.307795 60.642937) (xy 74.299623 60.657238) (xy 74.294975 60.673515) + ) + ) + (polygon + (pts + (xy 74.294071 60.54434) (xy 74.301336 60.576178) (xy 74.321943 60.601155) (xy 74.336192 60.609402) + (xy 74.352407 60.614112) (xy 74.364046 60.615048) (xy 74.395406 60.607782) (xy 74.4201 60.587115) + (xy 74.428329 60.57273) (xy 74.433054 60.556351) (xy 74.434022 60.54434) (xy 74.426756 60.512502) + (xy 74.406149 60.487525) (xy 74.3919 60.479278) (xy 74.375685 60.474568) (xy 74.364046 60.473632) + (xy 74.332686 60.480898) (xy 74.307992 60.501565) (xy 74.299763 60.51595) (xy 74.295038 60.532329) + ) + ) + (polygon + (pts + (xy 74.294071 60.403656) (xy 74.301336 60.435183) (xy 74.321959 60.459907) (xy 74.336261 60.468079) + (xy 74.352538 60.472727) (xy 74.364046 60.473632) (xy 74.395573 60.466366) (xy 74.420297 60.445743) + (xy 74.428469 60.431442) (xy 74.433117 60.415165) (xy 74.434022 60.403656) (xy 74.426756 60.372129) + (xy 74.406133 60.347405) (xy 74.391832 60.339233) (xy 74.375555 60.334585) (xy 74.364046 60.333681) + (xy 74.332519 60.340946) (xy 74.307795 60.361569) (xy 74.299623 60.375871) (xy 74.294975 60.392148) + ) + ) + (polygon + (pts + (xy 74.294071 60.263949) (xy 74.301336 60.295346) (xy 74.321979 60.320005) (xy 74.336303 60.328158) + (xy 74.352606 60.332789) (xy 74.364046 60.333681) (xy 74.395601 60.326418) (xy 74.420341 60.30581) + (xy 74.428505 60.291534) (xy 74.433135 60.275296) (xy 74.434022 60.263949) (xy 74.426756 60.233864) + (xy 74.405801 60.209526) (xy 74.391239 60.201453) (xy 74.374668 60.19694) (xy 74.364046 60.196172) + (xy 74.332547 60.203436) (xy 74.307822 60.224063) (xy 74.29964 60.238373) (xy 74.294982 60.254656) + (xy 74.294071 60.266209) + ) + ) + (polygon + (pts + (xy 74.294071 60.125525) (xy 74.301336 60.15735) (xy 74.321937 60.182296) (xy 74.336189 60.190534) + (xy 74.352406 60.195237) (xy 74.364046 60.196172) (xy 74.395434 60.188904) (xy 74.420128 60.168241) + (xy 74.428346 60.153864) (xy 74.433061 60.137491) (xy 74.434022 60.125525) (xy 74.426756 60.093687) + (xy 74.406149 60.06871) (xy 74.3919 60.060463) (xy 74.375685 60.055753) (xy 74.364046 60.054816) + (xy 74.332686 60.062082) (xy 74.307992 60.08275) (xy 74.299763 60.097135) (xy 74.295038 60.113514) + ) + ) + (polygon + (pts + (xy 74.294071 59.984841) (xy 74.301336 60.016368) (xy 74.321959 60.041092) (xy 74.336261 60.049264) + (xy 74.352538 60.053912) (xy 74.364046 60.054816) (xy 74.395573 60.047551) (xy 74.420297 60.026927) + (xy 74.428469 60.012626) (xy 74.433117 59.996349) (xy 74.434022 59.984841) (xy 74.426756 59.953301) + (xy 74.406127 59.928546) (xy 74.391828 59.920365) (xy 74.375554 59.91571) (xy 74.364046 59.914804) + (xy 74.332547 59.922068) (xy 74.307822 59.942695) (xy 74.29964 59.957005) (xy 74.294982 59.973288) + ) + ) + (polygon + (pts + (xy 74.294071 59.844829) (xy 74.301336 59.876355) (xy 74.321959 59.90108) (xy 74.336261 59.909251) + (xy 74.352538 59.913899) (xy 74.364046 59.914804) (xy 74.395573 59.907539) (xy 74.420297 59.886915) + (xy 74.428469 59.872614) (xy 74.433117 59.856337) (xy 74.434022 59.844829) (xy 74.426756 59.813302) + (xy 74.406133 59.788577) (xy 74.391832 59.780406) (xy 74.375555 59.775758) (xy 74.364046 59.774853) + (xy 74.332519 59.782118) (xy 74.307795 59.802742) (xy 74.299623 59.817043) (xy 74.294975 59.83332) + ) + ) + (polygon + (pts + (xy 74.434022 60.685024) (xy 74.441286 60.716523) (xy 74.461913 60.741248) (xy 74.476222 60.74943) + (xy 74.492505 60.754088) (xy 74.504058 60.755) (xy 74.535585 60.747734) (xy 74.560309 60.727111) + (xy 74.568481 60.712809) (xy 74.573129 60.696532) (xy 74.574034 60.685024) (xy 74.566769 60.653497) + (xy 74.546145 60.628773) (xy 74.531844 60.620601) (xy 74.515567 60.615953) (xy 74.504058 60.615048) + (xy 74.472519 60.622314) (xy 74.447764 60.642943) (xy 74.439583 60.657242) (xy 74.434928 60.673516) + ) + ) + (polygon + (pts + (xy 74.434022 59.844829) (xy 74.441286 59.876327) (xy 74.461913 59.901052) (xy 74.476222 59.909234) + (xy 74.492505 59.913893) (xy 74.504058 59.914804) (xy 74.535585 59.907539) (xy 74.560309 59.886915) + (xy 74.568481 59.872614) (xy 74.573129 59.856337) (xy 74.574034 59.844829) (xy 74.566769 59.813302) + (xy 74.546145 59.788577) (xy 74.531844 59.780406) (xy 74.515567 59.775758) (xy 74.504058 59.774853) + (xy 74.472519 59.782118) (xy 74.447764 59.802747) (xy 74.439583 59.817047) (xy 74.434928 59.833321) + ) + ) + (polygon + (pts + (xy 74.923851 59.914804) (xy 74.955378 59.907539) (xy 74.980102 59.886915) (xy 74.988274 59.872614) + (xy 74.992922 59.856337) (xy 74.993826 59.844829) (xy 74.986561 59.813302) (xy 74.965937 59.788577) + (xy 74.951636 59.780406) (xy 74.935359 59.775758) (xy 74.923851 59.774853) (xy 74.892324 59.782118) + (xy 74.8676 59.802742) (xy 74.859428 59.817043) (xy 74.85478 59.83332) (xy 74.853875 59.844829) + (xy 74.86114 59.876355) (xy 74.881764 59.90108) (xy 74.896065 59.909251) (xy 74.912342 59.913899) + ) + ) + (polygon + (pts + (xy 74.713863 60.545317) (xy 74.721128 60.576714) (xy 74.741771 60.601373) (xy 74.756095 60.609526) + (xy 74.772398 60.614156) (xy 74.783839 60.615048) (xy 74.815406 60.607786) (xy 74.840177 60.587172) + (xy 74.84835 60.572898) (xy 74.852987 60.556663) (xy 74.853875 60.545317) (xy 74.846611 60.51319) + (xy 74.826115 60.48828) (xy 74.811914 60.480053) (xy 74.795755 60.475336) (xy 74.783839 60.474364) + (xy 74.752312 60.48163) (xy 74.727587 60.502253) (xy 74.719416 60.516555) (xy 74.714768 60.532832) + (xy 74.713863 60.54434) + ) + ) + (polygon + (pts + (xy 74.713863 60.12583) (xy 74.721128 60.157539) (xy 74.74173 60.18237) (xy 74.756 60.190573) (xy 74.77224 60.195249) + (xy 74.783839 60.196172) (xy 74.815322 60.188903) (xy 74.840056 60.168252) (xy 74.848255 60.153913) + (xy 74.852941 60.137583) (xy 74.853875 60.12583) (xy 74.846611 60.094122) (xy 74.82602 60.069309) + (xy 74.811747 60.061103) (xy 74.795505 60.05642) (xy 74.783839 60.055488) (xy 74.75234 60.062752) + (xy 74.727615 60.083379) (xy 74.719433 60.097689) (xy 74.714774 60.113972) (xy 74.713863 60.125525) + ) + ) + (polygon + (pts + (xy 74.713863 59.985146) (xy 74.721128 60.016855) (xy 74.74173 60.041687) (xy 74.756 60.049889) + (xy 74.77224 60.054565) (xy 74.783839 60.055488) (xy 74.815322 60.048219) (xy 74.840056 60.027568) + (xy 74.848255 60.01323) (xy 74.852941 59.996899) (xy 74.853875 59.985146) (xy 74.846611 59.953492) + (xy 74.825992 59.928641) (xy 74.811709 59.920421) (xy 74.795457 59.915732) (xy 74.783839 59.914804) + (xy 74.752395 59.92207) (xy 74.727686 59.942715) (xy 74.719486 59.957059) (xy 74.714799 59.973387) + ) + ) + (polygon + (pts + (xy 74.853875 60.685024) (xy 74.86114 60.716551) (xy 74.881764 60.741275) (xy 74.896065 60.749447) + (xy 74.912342 60.754095) (xy 74.923851 60.755) (xy 74.955378 60.747734) (xy 74.980102 60.727111) + (xy 74.988274 60.712809) (xy 74.992922 60.696532) (xy 74.993826 60.685024) (xy 74.986561 60.653497) + (xy 74.965937 60.628773) (xy 74.951636 60.620601) (xy 74.935359 60.615953) (xy 74.923851 60.615048) + (xy 74.892324 60.622314) (xy 74.8676 60.642937) (xy 74.859428 60.657238) (xy 74.85478 60.673515) + ) + ) + (polygon + (pts + (xy 74.853875 60.265415) (xy 74.86114 60.297452) (xy 74.881657 60.322327) (xy 74.89587 60.330535) + (xy 74.912046 60.335231) (xy 74.923851 60.336184) (xy 74.955378 60.328919) (xy 74.980102 60.308295) + (xy 74.988274 60.293994) (xy 74.992922 60.277717) (xy 74.993826 60.266209) (xy 74.986561 60.234669) + (xy 74.965932 60.209914) (xy 74.951632 60.201733) (xy 74.935358 60.197078) (xy 74.923851 60.196172) + (xy 74.892352 60.203436) (xy 74.867627 60.224063) (xy 74.859445 60.238373) (xy 74.854787 60.254656) + (xy 74.853875 60.266209) + ) + ) + (polygon + (pts + (xy 74.993826 60.685024) (xy 75.00109 60.716523) (xy 75.021717 60.741248) (xy 75.036027 60.74943) + (xy 75.05231 60.754088) (xy 75.063863 60.755) (xy 75.09539 60.747734) (xy 75.120114 60.727111) + (xy 75.128286 60.712809) (xy 75.132934 60.696532) (xy 75.133839 60.685024) (xy 75.126573 60.653497) + (xy 75.10595 60.628773) (xy 75.091648 60.620601) (xy 75.075371 60.615953) (xy 75.063863 60.615048) + (xy 75.032324 60.622314) (xy 75.007569 60.642943) (xy 74.999387 60.657242) (xy 74.994732 60.673516) + ) + ) + (polygon + (pts + (xy 74.993826 60.266209) (xy 75.00109 60.297707) (xy 75.021717 60.322432) (xy 75.036027 60.330614) + (xy 75.05231 60.335273) (xy 75.063863 60.336184) (xy 75.09539 60.328919) (xy 75.120114 60.308295) + (xy 75.128286 60.293994) (xy 75.132934 60.277717) (xy 75.133839 60.266209) (xy 75.126573 60.234669) + (xy 75.105944 60.209914) (xy 75.091645 60.201733) (xy 75.07537 60.197078) (xy 75.063863 60.196172) + (xy 75.032352 60.203436) (xy 75.007596 60.224068) (xy 74.999404 60.238376) (xy 74.994739 60.254657) + ) + ) + (polygon + (pts + (xy 74.993826 59.844829) (xy 75.00109 59.876327) (xy 75.021717 59.901052) (xy 75.036027 59.909234) + (xy 75.05231 59.913893) (xy 75.063863 59.914804) (xy 75.09539 59.907539) (xy 75.120114 59.886915) + (xy 75.128286 59.872614) (xy 75.132934 59.856337) (xy 75.133839 59.844829) (xy 75.126573 59.813302) + (xy 75.10595 59.788577) (xy 75.091648 59.780406) (xy 75.075371 59.775758) (xy 75.063863 59.774853) + (xy 75.032324 59.782118) (xy 75.007569 59.802747) (xy 74.999387 59.817047) (xy 74.994732 59.833321) + ) + ) + (polygon + (pts + (xy 75.133839 60.685024) (xy 75.141102 60.716523) (xy 75.16173 60.741248) (xy 75.176039 60.74943) + (xy 75.192322 60.754088) (xy 75.203875 60.755) (xy 75.235402 60.747734) (xy 75.260126 60.727111) + (xy 75.268298 60.712809) (xy 75.272946 60.696532) (xy 75.273851 60.685024) (xy 75.266585 60.653497) + (xy 75.245962 60.628773) (xy 75.231661 60.620601) (xy 75.215384 60.615953) (xy 75.203875 60.615048) + (xy 75.172336 60.622314) (xy 75.147581 60.642943) (xy 75.139399 60.657242) (xy 75.134745 60.673516) + ) + ) + (polygon + (pts + (xy 75.133839 60.266209) (xy 75.141102 60.297707) (xy 75.16173 60.322432) (xy 75.176039 60.330614) + (xy 75.192322 60.335273) (xy 75.203875 60.336184) (xy 75.235402 60.328919) (xy 75.260126 60.308295) + (xy 75.268298 60.293994) (xy 75.272946 60.277717) (xy 75.273851 60.266209) (xy 75.266585 60.234669) + (xy 75.245956 60.209914) (xy 75.231657 60.201733) (xy 75.215383 60.197078) (xy 75.203875 60.196172) + (xy 75.172364 60.203436) (xy 75.147608 60.224068) (xy 75.139417 60.238376) (xy 75.134752 60.254657) + ) + ) + (polygon + (pts + (xy 75.133839 59.844829) (xy 75.141102 59.876327) (xy 75.16173 59.901052) (xy 75.176039 59.909234) + (xy 75.192322 59.913893) (xy 75.203875 59.914804) (xy 75.235402 59.907539) (xy 75.260126 59.886915) + (xy 75.268298 59.872614) (xy 75.272946 59.856337) (xy 75.273851 59.844829) (xy 75.266585 59.813302) + (xy 75.245962 59.788577) (xy 75.231661 59.780406) (xy 75.215384 59.775758) (xy 75.203875 59.774853) + (xy 75.172336 59.782118) (xy 75.147581 59.802747) (xy 75.139399 59.817047) (xy 75.134745 59.833321) + ) + ) + (polygon + (pts + (xy 75.273851 60.545317) (xy 75.281116 60.576714) (xy 75.301759 60.601373) (xy 75.316083 60.609526) + (xy 75.332386 60.614156) (xy 75.343826 60.615048) (xy 75.375394 60.607786) (xy 75.400165 60.587172) + (xy 75.408338 60.572898) (xy 75.412974 60.556663) (xy 75.413863 60.545317) (xy 75.406599 60.51319) + (xy 75.386103 60.48828) (xy 75.371902 60.480053) (xy 75.355743 60.475336) (xy 75.343826 60.474364) + (xy 75.312299 60.48163) (xy 75.287575 60.502253) (xy 75.279403 60.516555) (xy 75.274755 60.532832) + (xy 75.273851 60.54434) + ) + ) + (polygon + (pts + (xy 75.273851 60.405244) (xy 75.281116 60.436381) (xy 75.301774 60.46083) (xy 75.316142 60.46892) + (xy 75.332499 60.473499) (xy 75.343826 60.474364) (xy 75.375536 60.467103) (xy 75.400331 60.446526) + (xy 75.408455 60.432323) (xy 75.413026 60.416173) (xy 75.413863 60.405244) (xy 75.406599 60.374173) + (xy 75.385929 60.349735) (xy 75.371545 60.341638) (xy 75.355175 60.337053) (xy 75.343826 60.336184) + (xy 75.31213 60.343444) (xy 75.28736 60.364012) (xy 75.279245 60.378211) (xy 75.274683 60.394352) + ) + ) + (polygon + (pts + (xy 75.273851 59.985146) (xy 75.281116 60.016855) (xy 75.301717 60.041687) (xy 75.315988 60.049889) + (xy 75.332228 60.054565) (xy 75.343826 60.055488) (xy 75.37531 60.048219) (xy 75.400044 60.027568) + (xy 75.408243 60.01323) (xy 75.412929 59.996899) (xy 75.413863 59.985146) (xy 75.406599 59.953492) + (xy 75.38598 59.928641) (xy 75.371697 59.920421) (xy 75.355445 59.915732) (xy 75.343826 59.914804) + (xy 75.312383 59.92207) (xy 75.287674 59.942715) (xy 75.279473 59.957059) (xy 75.274787 59.973387) + ) + ) + (polygon + (pts + (xy 75.623057 59.914804) (xy 75.654596 59.907539) (xy 75.679351 59.88691) (xy 75.687533 59.87261) + (xy 75.692187 59.856336) (xy 75.693094 59.844829) (xy 75.68583 59.81333) (xy 75.665203 59.788605) + (xy 75.650893 59.780423) (xy 75.63461 59.775764) (xy 75.623057 59.774853) (xy 75.59153 59.782118) + (xy 75.566806 59.802742) (xy 75.558634 59.817043) (xy 75.553986 59.83332) (xy 75.553081 59.844829) + (xy 75.560347 59.876355) (xy 75.58097 59.90108) (xy 75.595271 59.909251) (xy 75.611548 59.913899) + ) + ) + (polygon + (pts + (xy 75.693094 59.844829) (xy 75.700359 59.876355) (xy 75.720982 59.90108) (xy 75.735284 59.909251) + (xy 75.751561 59.913899) (xy 75.763069 59.914804) (xy 75.794596 59.907539) (xy 75.81932 59.886915) + (xy 75.827492 59.872614) (xy 75.83214 59.856337) (xy 75.833045 59.844829) (xy 75.825779 59.813302) + (xy 75.805156 59.788577) (xy 75.790855 59.780406) (xy 75.774578 59.775758) (xy 75.763069 59.774853) + (xy 75.731542 59.782118) (xy 75.706818 59.802742) (xy 75.698646 59.817043) (xy 75.693998 59.83332) + ) + ) + (polygon + (pts + (xy 75.833045 60.685024) (xy 75.840309 60.716523) (xy 75.860936 60.741248) (xy 75.875245 60.74943) + (xy 75.891528 60.754088) (xy 75.903081 60.755) (xy 75.934608 60.747734) (xy 75.959332 60.727111) + (xy 75.967504 60.712809) (xy 75.972152 60.696532) (xy 75.973057 60.685024) (xy 75.965792 60.653497) + (xy 75.945168 60.628773) (xy 75.930867 60.620601) (xy 75.91459 60.615953) (xy 75.903081 60.615048) + (xy 75.871542 60.622314) (xy 75.846787 60.642943) (xy 75.838606 60.657242) (xy 75.833951 60.673516) + ) + ) + (polygon + (pts + (xy 75.833045 60.54434) (xy 75.840309 60.576149) (xy 75.860919 60.601127) (xy 75.875177 60.609385) + (xy 75.891398 60.614105) (xy 75.903081 60.615048) (xy 75.934441 60.607782) (xy 75.959136 60.587115) + (xy 75.967364 60.57273) (xy 75.972089 60.556351) (xy 75.973057 60.54434) (xy 75.965792 60.512502) + (xy 75.945185 60.487525) (xy 75.930935 60.479278) (xy 75.914721 60.474568) (xy 75.903081 60.473632) + (xy 75.871709 60.480898) (xy 75.846984 60.501571) (xy 75.838746 60.515954) (xy 75.834014 60.53233) + ) + ) + (polygon + (pts + (xy 75.833045 60.403656) (xy 75.840309 60.435155) (xy 75.860936 60.45988) (xy 75.875245 60.468062) + (xy 75.891528 60.47272) (xy 75.903081 60.473632) (xy 75.934608 60.466366) (xy 75.959332 60.445743) + (xy 75.967504 60.431442) (xy 75.972152 60.415165) (xy 75.973057 60.403656) (xy 75.965792 60.372129) + (xy 75.945168 60.347405) (xy 75.930867 60.339233) (xy 75.91459 60.334585) (xy 75.903081 60.333681) + (xy 75.871542 60.340946) (xy 75.846787 60.361575) (xy 75.838606 60.375874) (xy 75.833951 60.392149) + ) + ) + (polygon + (pts + (xy 75.833045 60.26456) (xy 75.840309 60.29567) (xy 75.86097 60.320119) (xy 75.875347 60.32822) + (xy 75.89171 60.332808) (xy 75.903081 60.333681) (xy 75.934778 60.326419) (xy 75.959542 60.305848) + (xy 75.967657 60.291642) (xy 75.972221 60.27549) (xy 75.973057 60.26456) (xy 75.965792 60.233462) + (xy 75.945126 60.209025) (xy 75.93075 60.200937) (xy 75.914385 60.196362) (xy 75.903081 60.1955) + (xy 75.871372 60.20276) (xy 75.846571 60.223333) (xy 75.838447 60.237531) (xy 75.833878 60.253669) + ) + ) + (polygon + (pts + (xy 75.833045 60.125525) (xy 75.840309 60.157024) (xy 75.860936 60.181748) (xy 75.875245 60.18993) + (xy 75.891528 60.194589) (xy 75.903081 60.1955) (xy 75.934608 60.188235) (xy 75.959332 60.167611) + (xy 75.967504 60.15331) (xy 75.972152 60.137033) (xy 75.973057 60.125525) (xy 75.965792 60.093985) + (xy 75.945163 60.06923) (xy 75.930863 60.061049) (xy 75.914589 60.056394) (xy 75.903081 60.055488) + (xy 75.87157 60.062752) (xy 75.846815 60.083385) (xy 75.838623 60.097692) (xy 75.833958 60.113973) + ) + ) + (polygon + (pts + (xy 75.833045 59.985146) (xy 75.840309 60.016827) (xy 75.860914 60.041659) (xy 75.875192 60.049872) + (xy 75.891439 60.054558) (xy 75.903081 60.055488) (xy 75.934552 60.048219) (xy 75.959256 60.027574) + (xy 75.967445 60.013233) (xy 75.972124 59.9969) (xy 75.973057 59.985146) (xy 75.965792 59.953464) + (xy 75.945176 59.928613) (xy 75.930901 59.920404) (xy 75.914656 59.915725) (xy 75.903081 59.914804) + (xy 75.871626 59.92207) (xy 75.846886 59.942721) (xy 75.838676 59.957062) (xy 75.833982 59.973388) + ) + ) + (polygon + (pts + (xy 75.833045 59.844829) (xy 75.840309 59.876327) (xy 75.860936 59.901052) (xy 75.875245 59.909234) + (xy 75.891528 59.913893) (xy 75.903081 59.914804) (xy 75.934608 59.907539) (xy 75.959332 59.886915) + (xy 75.967504 59.872614) (xy 75.972152 59.856337) (xy 75.973057 59.844829) (xy 75.965792 59.813302) + (xy 75.945168 59.788577) (xy 75.930867 59.780406) (xy 75.91459 59.775758) (xy 75.903081 59.774853) + (xy 75.871542 59.782118) (xy 75.846787 59.802747) (xy 75.838606 59.817047) (xy 75.833951 59.833321) + ) + ) + (polygon + (pts + (xy 75.973057 59.844829) (xy 75.980321 59.876327) (xy 76.000948 59.901052) (xy 76.015258 59.909234) + (xy 76.031541 59.913893) (xy 76.043094 59.914804) (xy 76.074621 59.907539) (xy 76.099345 59.886915) + (xy 76.107516 59.872614) (xy 76.112165 59.856337) (xy 76.113069 59.844829) (xy 76.105804 59.813302) + (xy 76.08518 59.788577) (xy 76.070879 59.780406) (xy 76.054602 59.775758) (xy 76.043094 59.774853) + (xy 76.011554 59.782118) (xy 75.986799 59.802747) (xy 75.978618 59.817047) (xy 75.973963 59.833321) + ) + ) + (polygon + (pts + (xy 76.113069 59.844829) (xy 76.120334 59.876355) (xy 76.140958 59.90108) (xy 76.155259 59.909251) + (xy 76.171536 59.913899) (xy 76.183045 59.914804) (xy 76.214584 59.907539) (xy 76.239339 59.88691) + (xy 76.247521 59.87261) (xy 76.252175 59.856336) (xy 76.253081 59.844829) (xy 76.245817 59.81333) + (xy 76.22519 59.788605) (xy 76.210881 59.780423) (xy 76.194598 59.775764) (xy 76.183045 59.774853) + (xy 76.151518 59.782118) (xy 76.126794 59.802742) (xy 76.118622 59.817043) (xy 76.113974 59.83332) + ) + ) + (polygon + (pts + (xy 76.462275 59.914804) (xy 76.493815 59.907539) (xy 76.51857 59.88691) (xy 76.526751 59.87261) + (xy 76.531406 59.856336) (xy 76.532312 59.844829) (xy 76.525048 59.81333) (xy 76.504421 59.788605) + (xy 76.490111 59.780423) (xy 76.473828 59.775764) (xy 76.462275 59.774853) (xy 76.430748 59.782118) + (xy 76.406024 59.802742) (xy 76.397852 59.817043) (xy 76.393204 59.83332) (xy 76.3923 59.844829) + (xy 76.399565 59.876355) (xy 76.420189 59.90108) (xy 76.43449 59.909251) (xy 76.450767 59.913899) + ) + ) + (polygon + (pts + (xy 76.3923 60.685024) (xy 76.399565 60.716551) (xy 76.420189 60.741275) (xy 76.43449 60.749447) + (xy 76.450767 60.754095) (xy 76.462275 60.755) (xy 76.493815 60.747734) (xy 76.51857 60.727105) + (xy 76.526751 60.712806) (xy 76.531406 60.696531) (xy 76.532312 60.685024) (xy 76.525048 60.653525) + (xy 76.504421 60.6288) (xy 76.490111 60.620618) (xy 76.473828 60.61596) (xy 76.462275 60.615048) + (xy 76.430748 60.622314) (xy 76.406024 60.642937) (xy 76.397852 60.657238) (xy 76.393204 60.673515) + ) + ) + (polygon + (pts + (xy 76.532312 60.685024) (xy 76.539577 60.716551) (xy 76.560201 60.741275) (xy 76.574502 60.749447) + (xy 76.590779 60.754095) (xy 76.602288 60.755) (xy 76.633815 60.747734) (xy 76.658539 60.727111) + (xy 76.66671 60.712809) (xy 76.671359 60.696532) (xy 76.672263 60.685024) (xy 76.664998 60.653497) + (xy 76.644374 60.628773) (xy 76.630073 60.620601) (xy 76.613796 60.615953) (xy 76.602288 60.615048) + (xy 76.570761 60.622314) (xy 76.546036 60.642937) (xy 76.537865 60.657238) (xy 76.533217 60.673515) + ) + ) + (polygon + (pts + (xy 76.532312 60.54434) (xy 76.539577 60.576178) (xy 76.560184 60.601155) (xy 76.574434 60.609402) + (xy 76.590648 60.614112) (xy 76.602288 60.615048) (xy 76.633647 60.607782) (xy 76.658342 60.587115) + (xy 76.666571 60.57273) (xy 76.671295 60.556351) (xy 76.672263 60.54434) (xy 76.664998 60.512502) + (xy 76.644391 60.487525) (xy 76.630141 60.479278) (xy 76.613927 60.474568) (xy 76.602288 60.473632) + (xy 76.570928 60.480898) (xy 76.546233 60.501565) (xy 76.538004 60.51595) (xy 76.53328 60.532329) + ) + ) + (polygon + (pts + (xy 76.532312 60.403656) (xy 76.539577 60.435183) (xy 76.560201 60.459907) (xy 76.574502 60.468079) + (xy 76.590779 60.472727) (xy 76.602288 60.473632) (xy 76.633815 60.466366) (xy 76.658539 60.445743) + (xy 76.66671 60.431442) (xy 76.671359 60.415165) (xy 76.672263 60.403656) (xy 76.664998 60.372129) + (xy 76.644374 60.347405) (xy 76.630073 60.339233) (xy 76.613796 60.334585) (xy 76.602288 60.333681) + (xy 76.570761 60.340946) (xy 76.546036 60.361569) (xy 76.537865 60.375871) (xy 76.533217 60.392148) + ) + ) + (polygon + (pts + (xy 76.532312 60.263949) (xy 76.539577 60.295346) (xy 76.56022 60.320005) (xy 76.574544 60.328158) + (xy 76.590848 60.332789) (xy 76.602288 60.333681) (xy 76.633843 60.326418) (xy 76.658583 60.30581) + (xy 76.666746 60.291534) (xy 76.671376 60.275296) (xy 76.672263 60.263949) (xy 76.664998 60.233864) + (xy 76.644042 60.209526) (xy 76.629481 60.201453) (xy 76.612909 60.19694) (xy 76.602288 60.196172) + (xy 76.570789 60.203436) (xy 76.546064 60.224063) (xy 76.537882 60.238373) (xy 76.533223 60.254656) + (xy 76.532312 60.266209) + ) + ) + (polygon + (pts + (xy 76.532312 60.125525) (xy 76.539577 60.15735) (xy 76.560179 60.182296) (xy 76.57443 60.190534) + (xy 76.590647 60.195237) (xy 76.602288 60.196172) (xy 76.633675 60.188904) (xy 76.658369 60.168241) + (xy 76.666588 60.153864) (xy 76.671302 60.137491) (xy 76.672263 60.125525) (xy 76.664998 60.093687) + (xy 76.644391 60.06871) (xy 76.630141 60.060463) (xy 76.613927 60.055753) (xy 76.602288 60.054816) + (xy 76.570928 60.062082) (xy 76.546233 60.08275) (xy 76.538004 60.097135) (xy 76.53328 60.113514) + ) + ) + (polygon + (pts + (xy 76.532312 59.984841) (xy 76.539577 60.016368) (xy 76.560201 60.041092) (xy 76.574502 60.049264) + (xy 76.590779 60.053912) (xy 76.602288 60.054816) (xy 76.633815 60.047551) (xy 76.658539 60.026927) + (xy 76.66671 60.012626) (xy 76.671359 59.996349) (xy 76.672263 59.984841) (xy 76.664998 59.953301) + (xy 76.644369 59.928546) (xy 76.630069 59.920365) (xy 76.613795 59.91571) (xy 76.602288 59.914804) + (xy 76.570789 59.922068) (xy 76.546064 59.942695) (xy 76.537882 59.957005) (xy 76.533223 59.973288) + ) + ) + (polygon + (pts + (xy 76.532312 59.844829) (xy 76.539577 59.876355) (xy 76.560201 59.90108) (xy 76.574502 59.909251) + (xy 76.590779 59.913899) (xy 76.602288 59.914804) (xy 76.633815 59.907539) (xy 76.658539 59.886915) + (xy 76.66671 59.872614) (xy 76.671359 59.856337) (xy 76.672263 59.844829) (xy 76.664998 59.813302) + (xy 76.644374 59.788577) (xy 76.630073 59.780406) (xy 76.613796 59.775758) (xy 76.602288 59.774853) + (xy 76.570761 59.782118) (xy 76.546036 59.802742) (xy 76.537865 59.817043) (xy 76.533217 59.83332) + ) + ) + (polygon + (pts + (xy 76.672263 60.685024) (xy 76.679527 60.716523) (xy 76.700154 60.741248) (xy 76.714464 60.74943) + (xy 76.730747 60.754088) (xy 76.7423 60.755) (xy 76.773827 60.747734) (xy 76.798551 60.727111) + (xy 76.806723 60.712809) (xy 76.811371 60.696532) (xy 76.812275 60.685024) (xy 76.80501 60.653497) + (xy 76.784387 60.628773) (xy 76.770085 60.620601) (xy 76.753808 60.615953) (xy 76.7423 60.615048) + (xy 76.71076 60.622314) (xy 76.686006 60.642943) (xy 76.677824 60.657242) (xy 76.673169 60.673516) + ) + ) + (polygon + (pts + (xy 76.672263 59.844829) (xy 76.679527 59.876327) (xy 76.700154 59.901052) (xy 76.714464 59.909234) + (xy 76.730747 59.913893) (xy 76.7423 59.914804) (xy 76.773827 59.907539) (xy 76.798551 59.886915) + (xy 76.806723 59.872614) (xy 76.811371 59.856337) (xy 76.812275 59.844829) (xy 76.80501 59.813302) + (xy 76.784387 59.788577) (xy 76.770085 59.780406) (xy 76.753808 59.775758) (xy 76.7423 59.774853) + (xy 76.71076 59.782118) (xy 76.686006 59.802747) (xy 76.677824 59.817047) (xy 76.673169 59.833321) + ) + ) + (polygon + (pts + (xy 77.302104 59.914804) (xy 77.333631 59.907539) (xy 77.358355 59.886915) (xy 77.366527 59.872614) + (xy 77.371175 59.856337) (xy 77.37208 59.844829) (xy 77.364815 59.813302) (xy 77.344191 59.788577) + (xy 77.32989 59.780406) (xy 77.313613 59.775758) (xy 77.302104 59.774853) (xy 77.270565 59.782118) + (xy 77.24581 59.802747) (xy 77.237629 59.817047) (xy 77.232974 59.833321) (xy 77.232068 59.844829) + (xy 77.239332 59.876327) (xy 77.259959 59.901052) (xy 77.274268 59.909234) (xy 77.290552 59.913893) + ) + ) + (polygon + (pts + (xy 76.952104 60.684352) (xy 76.95937 60.716311) (xy 76.979903 60.741162) (xy 76.994129 60.749366) + (xy 77.010321 60.754054) (xy 77.02208 60.755) (xy 77.053619 60.747734) (xy 77.078374 60.727105) + (xy 77.086556 60.712806) (xy 77.09121 60.696531) (xy 77.092117 60.685024) (xy 77.084853 60.653081) + (xy 77.064311 60.628198) (xy 77.050078 60.619975) (xy 77.033883 60.61527) (xy 77.02208 60.614316) + (xy 76.990581 60.62158) (xy 76.965856 60.642207) (xy 76.957674 60.656516) (xy 76.953016 60.672799) + ) + ) + (polygon + (pts + (xy 76.952104 60.54434) (xy 76.95937 60.575867) (xy 76.979993 60.600591) (xy 76.994295 60.608763) + (xy 77.010571 60.613411) (xy 77.02208 60.614316) (xy 77.053619 60.60705) (xy 77.078374 60.586421) + (xy 77.086556 60.572122) (xy 77.09121 60.555848) (xy 77.092117 60.54434) (xy 77.084853 60.512841) + (xy 77.064226 60.488116) (xy 77.049916 60.479934) (xy 77.033633 60.475276) (xy 77.02208 60.474364) + (xy 76.990553 60.48163) (xy 76.965829 60.502253) (xy 76.957657 60.516555) (xy 76.953009 60.532832) + ) + ) + (polygon + (pts + (xy 76.952104 60.405244) (xy 76.95937 60.436381) (xy 76.980027 60.46083) (xy 76.994396 60.46892) + (xy 77.010752 60.473499) (xy 77.02208 60.474364) (xy 77.053789 60.467103) (xy 77.078585 60.446526) + (xy 77.086708 60.432323) (xy 77.091279 60.416173) (xy 77.092117 60.405244) (xy 77.084853 60.374173) + (xy 77.064183 60.349735) (xy 77.049799 60.341638) (xy 77.033428 60.337053) (xy 77.02208 60.336184) + (xy 76.990383 60.343444) (xy 76.965613 60.364012) (xy 76.957498 60.378211) (xy 76.952937 60.394352) + ) + ) + (polygon + (pts + (xy 76.952104 60.266209) (xy 76.95937 60.297735) (xy 76.979993 60.32246) (xy 76.994295 60.330631) + (xy 77.010571 60.335279) (xy 77.02208 60.336184) (xy 77.053619 60.328919) (xy 77.078374 60.30829) + (xy 77.086556 60.29399) (xy 77.09121 60.277716) (xy 77.092117 60.266209) (xy 77.084853 60.234697) + (xy 77.06422 60.209942) (xy 77.049912 60.20175) (xy 77.033632 60.197085) (xy 77.02208 60.196172) + (xy 76.990581 60.203436) (xy 76.965856 60.224063) (xy 76.957674 60.238373) (xy 76.953016 60.254656) + ) + ) + (polygon + (pts + (xy 76.952104 60.125525) (xy 76.95937 60.15735) (xy 76.979971 60.182296) (xy 76.994222 60.190534) + (xy 77.01044 60.195237) (xy 77.02208 60.196172) (xy 77.05348 60.188904) (xy 77.078204 60.168235) + (xy 77.086433 60.15386) (xy 77.091154 60.13749) (xy 77.092117 60.125525) (xy 77.084853 60.093715) + (xy 77.064242 60.068738) (xy 77.049984 60.06048) (xy 77.033763 60.05576) (xy 77.02208 60.054816) + (xy 76.99072 60.062082) (xy 76.966026 60.08275) (xy 76.957797 60.097135) (xy 76.953072 60.113514) + ) + ) + (polygon + (pts + (xy 77.092117 60.405244) (xy 77.099382 60.436381) (xy 77.120039 60.46083) (xy 77.134408 60.46892) + (xy 77.150765 60.473499) (xy 77.162092 60.474364) (xy 77.193789 60.467103) (xy 77.218553 60.446531) + (xy 77.226668 60.432326) (xy 77.231232 60.416174) (xy 77.232068 60.405244) (xy 77.224802 60.374145) + (xy 77.204136 60.349708) (xy 77.189761 60.341621) (xy 77.173396 60.337046) (xy 77.162092 60.336184) + (xy 77.130396 60.343444) (xy 77.105625 60.364012) (xy 77.097511 60.378211) (xy 77.092949 60.394352) + ) + ) + (polygon + (pts + (xy 77.092117 59.984841) (xy 77.099382 60.016368) (xy 77.120005 60.041092) (xy 77.134307 60.049264) + (xy 77.150584 60.053912) (xy 77.162092 60.054816) (xy 77.193619 60.047551) (xy 77.218343 60.026927) + (xy 77.226515 60.012626) (xy 77.231163 59.996349) (xy 77.232068 59.984841) (xy 77.224802 59.953301) + (xy 77.204173 59.928546) (xy 77.189874 59.920365) (xy 77.1736 59.91571) (xy 77.162092 59.914804) + (xy 77.130593 59.922068) (xy 77.105869 59.942695) (xy 77.097686 59.957005) (xy 77.093028 59.973288) + ) + ) + (polygon + (pts + (xy 77.232068 60.405244) (xy 77.239332 60.436354) (xy 77.259993 60.460803) (xy 77.27437 60.468903) + (xy 77.290733 60.473492) (xy 77.302104 60.474364) (xy 77.333801 60.467103) (xy 77.358566 60.446531) + (xy 77.36668 60.432326) (xy 77.371244 60.416174) (xy 77.37208 60.405244) (xy 77.364815 60.374145) + (xy 77.344149 60.349708) (xy 77.329773 60.341621) (xy 77.313408 60.337046) (xy 77.302104 60.336184) + (xy 77.270395 60.343444) (xy 77.245594 60.364017) (xy 77.23747 60.378215) (xy 77.232901 60.394353) + ) + ) + (polygon + (pts + (xy 77.37208 60.405244) (xy 77.379344 60.436354) (xy 77.400005 60.460803) (xy 77.414382 60.468903) + (xy 77.430745 60.473492) (xy 77.442117 60.474364) (xy 77.473813 60.467103) (xy 77.498578 60.446531) + (xy 77.506692 60.432326) (xy 77.511256 60.416174) (xy 77.512092 60.405244) (xy 77.504827 60.374145) + (xy 77.484161 60.349708) (xy 77.469785 60.341621) (xy 77.453421 60.337046) (xy 77.442117 60.336184) + (xy 77.410407 60.343444) (xy 77.385606 60.364017) (xy 77.377482 60.378215) (xy 77.372914 60.394353) + ) + ) + (polygon + (pts + (xy 77.37208 59.984841) (xy 77.379344 60.01634) (xy 77.399971 60.041064) (xy 77.414281 60.049246) + (xy 77.430564 60.053905) (xy 77.442117 60.054816) (xy 77.473644 60.047551) (xy 77.498368 60.026927) + (xy 77.50654 60.012626) (xy 77.511188 59.996349) (xy 77.512092 59.984841) (xy 77.504827 59.953301) + (xy 77.484198 59.928546) (xy 77.469898 59.920365) (xy 77.453624 59.91571) (xy 77.442117 59.914804) + (xy 77.410605 59.922068) (xy 77.38585 59.942701) (xy 77.377658 59.957009) (xy 77.372993 59.973289) + ) + ) + (polygon + (pts + (xy 77.512092 60.684352) (xy 77.519357 60.716311) (xy 77.539891 60.741162) (xy 77.554117 60.749366) + (xy 77.570308 60.754054) (xy 77.582068 60.755) (xy 77.613607 60.747734) (xy 77.638362 60.727105) + (xy 77.646544 60.712806) (xy 77.651198 60.696531) (xy 77.652104 60.685024) (xy 77.64484 60.653081) + (xy 77.624298 60.628198) (xy 77.610066 60.619975) (xy 77.593871 60.61527) (xy 77.582068 60.614316) + (xy 77.550569 60.62158) (xy 77.525844 60.642207) (xy 77.517662 60.656516) (xy 77.513004 60.672799) + ) + ) + (polygon + (pts + (xy 77.512092 60.54434) (xy 77.519357 60.575867) (xy 77.539981 60.600591) (xy 77.554282 60.608763) + (xy 77.570559 60.613411) (xy 77.582068 60.614316) (xy 77.613607 60.60705) (xy 77.638362 60.586421) + (xy 77.646544 60.572122) (xy 77.651198 60.555848) (xy 77.652104 60.54434) (xy 77.64484 60.512841) + (xy 77.624213 60.488116) (xy 77.609904 60.479934) (xy 77.593621 60.475276) (xy 77.582068 60.474364) + (xy 77.550541 60.48163) (xy 77.525817 60.502253) (xy 77.517645 60.516555) (xy 77.512997 60.532832) + ) + ) + (polygon + (pts + (xy 77.512092 60.405244) (xy 77.519357 60.436381) (xy 77.540015 60.46083) (xy 77.554383 60.46892) + (xy 77.57074 60.473499) (xy 77.582068 60.474364) (xy 77.613777 60.467103) (xy 77.638572 60.446526) + (xy 77.646696 60.432323) (xy 77.651267 60.416173) (xy 77.652104 60.405244) (xy 77.64484 60.374173) + (xy 77.624171 60.349735) (xy 77.609787 60.341638) (xy 77.593416 60.337053) (xy 77.582068 60.336184) + (xy 77.550371 60.343444) (xy 77.525601 60.364012) (xy 77.517486 60.378211) (xy 77.512924 60.394352) + ) + ) + (polygon + (pts + (xy 77.512092 60.266209) (xy 77.519357 60.297735) (xy 77.539981 60.32246) (xy 77.554282 60.330631) + (xy 77.570559 60.335279) (xy 77.582068 60.336184) (xy 77.613607 60.328919) (xy 77.638362 60.30829) + (xy 77.646544 60.29399) (xy 77.651198 60.277716) (xy 77.652104 60.266209) (xy 77.64484 60.234697) + (xy 77.624208 60.209942) (xy 77.6099 60.20175) (xy 77.59362 60.197085) (xy 77.582068 60.196172) + (xy 77.550569 60.203436) (xy 77.525844 60.224063) (xy 77.517662 60.238373) (xy 77.513004 60.254656) + ) + ) + (polygon + (pts + (xy 77.512092 60.125525) (xy 77.519357 60.15735) (xy 77.539959 60.182296) (xy 77.55421 60.190534) + (xy 77.570427 60.195237) (xy 77.582068 60.196172) (xy 77.613468 60.188904) (xy 77.638192 60.168235) + (xy 77.646421 60.15386) (xy 77.651142 60.13749) (xy 77.652104 60.125525) (xy 77.64484 60.093715) + (xy 77.62423 60.068738) (xy 77.609972 60.06048) (xy 77.593751 60.05576) (xy 77.582068 60.054816) + (xy 77.550708 60.062082) (xy 77.526014 60.08275) (xy 77.517785 60.097135) (xy 77.51306 60.113514) + ) + ) + (polygon + (pts + (xy 77.861298 59.914804) (xy 77.8298 59.922068) (xy 77.805075 59.942695) (xy 77.796893 59.957005) + (xy 77.792234 59.973288) (xy 77.791323 59.984841) (xy 77.798588 60.016368) (xy 77.819212 60.041092) + (xy 77.833513 60.049264) (xy 77.84979 60.053912) (xy 77.861298 60.054816) (xy 77.892838 60.047551) + (xy 77.917593 60.026922) (xy 77.925774 60.012622) (xy 77.930429 59.996348) (xy 77.931335 59.984841) + (xy 77.924071 59.953329) (xy 77.903438 59.928574) (xy 77.889131 59.920382) (xy 77.87285 59.915717) + ) + ) + (polygon + (pts + (xy 77.791323 60.685024) (xy 77.798588 60.716551) (xy 77.819212 60.741275) (xy 77.833513 60.749447) + (xy 77.84979 60.754095) (xy 77.861298 60.755) (xy 77.892838 60.747734) (xy 77.917593 60.727105) + (xy 77.925774 60.712806) (xy 77.930429 60.696531) (xy 77.931335 60.685024) (xy 77.924071 60.653525) + (xy 77.903444 60.6288) (xy 77.889134 60.620618) (xy 77.872851 60.61596) (xy 77.861298 60.615048) + (xy 77.829771 60.622314) (xy 77.805047 60.642937) (xy 77.796876 60.657238) (xy 77.792227 60.673515) + ) + ) + (polygon + (pts + (xy 77.791323 60.545317) (xy 77.798588 60.576714) (xy 77.819231 60.601373) (xy 77.833555 60.609526) + (xy 77.849858 60.614156) (xy 77.861298 60.615048) (xy 77.892866 60.607786) (xy 77.917637 60.587172) + (xy 77.92581 60.572898) (xy 77.930446 60.556663) (xy 77.931335 60.545317) (xy 77.924071 60.512879) + (xy 77.903589 60.487717) (xy 77.889439 60.479414) (xy 77.873339 60.474636) (xy 77.861298 60.473632) + (xy 77.829938 60.480898) (xy 77.805244 60.501565) (xy 77.797015 60.51595) (xy 77.792291 60.532329) + (xy 77.791323 60.54434) + ) + ) + (polygon + (pts + (xy 77.791323 60.403656) (xy 77.798588 60.435183) (xy 77.819212 60.459907) (xy 77.833513 60.468079) + (xy 77.84979 60.472727) (xy 77.861298 60.473632) (xy 77.892838 60.466366) (xy 77.917593 60.445737) + (xy 77.925774 60.431438) (xy 77.930429 60.415164) (xy 77.931335 60.403656) (xy 77.924071 60.37374) + (xy 77.903095 60.349498) (xy 77.888498 60.341442) (xy 77.871889 60.336945) (xy 77.861298 60.336184) + (xy 77.829743 60.343446) (xy 77.805003 60.364055) (xy 77.79684 60.378331) (xy 77.79221 60.394569) + (xy 77.791323 60.405915) + ) + ) + (polygon + (pts + (xy 77.791323 60.266209) (xy 77.798588 60.297735) (xy 77.819212 60.32246) (xy 77.833513 60.330631) + (xy 77.84979 60.335279) (xy 77.861298 60.336184) (xy 77.892838 60.328919) (xy 77.917593 60.30829) + (xy 77.925774 60.29399) (xy 77.930429 60.277716) (xy 77.931335 60.266209) (xy 77.924071 60.234697) + (xy 77.903438 60.209942) (xy 77.889131 60.20175) (xy 77.87285 60.197085) (xy 77.861298 60.196172) + (xy 77.8298 60.203436) (xy 77.805075 60.224063) (xy 77.796893 60.238373) (xy 77.792234 60.254656) + ) + ) + (polygon + (pts + (xy 77.791323 60.125525) (xy 77.798588 60.15735) (xy 77.81919 60.182296) (xy 77.833441 60.190534) + (xy 77.849658 60.195237) (xy 77.861298 60.196172) (xy 77.892698 60.188904) (xy 77.917423 60.168235) + (xy 77.925651 60.15386) (xy 77.930373 60.13749) (xy 77.931335 60.125525) (xy 77.924071 60.093715) + (xy 77.903461 60.068738) (xy 77.889203 60.06048) (xy 77.872982 60.05576) (xy 77.861298 60.054816) + (xy 77.829938 60.062082) (xy 77.805244 60.08275) (xy 77.797015 60.097135) (xy 77.792291 60.113514) + ) + ) + (polygon + (pts + (xy 77.791323 59.844829) (xy 77.798588 59.876355) (xy 77.819212 59.90108) (xy 77.833513 59.909251) + (xy 77.84979 59.913899) (xy 77.861298 59.914804) (xy 77.892838 59.907539) (xy 77.917593 59.88691) + (xy 77.925774 59.87261) (xy 77.930429 59.856336) (xy 77.931335 59.844829) (xy 77.924071 59.81333) + (xy 77.903444 59.788605) (xy 77.889134 59.780423) (xy 77.872851 59.775764) (xy 77.861298 59.774853) + (xy 77.829771 59.782118) (xy 77.805047 59.802742) (xy 77.796876 59.817043) (xy 77.792227 59.83332) + ) + ) + (polygon + (pts + (xy 77.931335 60.12583) (xy 77.9386 60.157539) (xy 77.959202 60.18237) (xy 77.973472 60.190573) + (xy 77.989712 60.195249) (xy 78.001311 60.196172) (xy 78.032782 60.188903) (xy 78.057485 60.168258) + (xy 78.065675 60.153917) (xy 78.070353 60.137584) (xy 78.071286 60.12583) (xy 78.064021 60.093796) + (xy 78.043455 60.068761) (xy 78.029239 60.0605) (xy 78.013063 60.055772) (xy 78.001311 60.054816) + (xy 77.969951 60.062082) (xy 77.945256 60.08275) (xy 77.937028 60.097135) (xy 77.932303 60.113514) + (xy 77.931335 60.125525) + ) + ) + (polygon + (pts + (xy 78.071286 60.266209) (xy 78.07855 60.297707) (xy 78.099177 60.322432) (xy 78.113487 60.330614) + (xy 78.12977 60.335273) (xy 78.141323 60.336184) (xy 78.17285 60.328919) (xy 78.197574 60.308295) + (xy 78.205746 60.293994) (xy 78.210394 60.277717) (xy 78.211298 60.266209) (xy 78.204033 60.234669) + (xy 78.183404 60.209914) (xy 78.169105 60.201733) (xy 78.15283 60.197078) (xy 78.141323 60.196172) + (xy 78.109811 60.203436) (xy 78.085056 60.224068) (xy 78.076864 60.238376) (xy 78.072199 60.254657) + ) + ) + (polygon + (pts + (xy 78.211298 60.405915) (xy 78.218562 60.435961) (xy 78.239516 60.460268) (xy 78.254089 60.468342) + (xy 78.27067 60.472858) (xy 78.281335 60.473632) (xy 78.312862 60.466366) (xy 78.337586 60.445743) + (xy 78.345758 60.431442) (xy 78.350406 60.415165) (xy 78.351311 60.403656) (xy 78.344045 60.373714) + (xy 78.323073 60.349471) (xy 78.308485 60.341426) (xy 78.291882 60.336939) (xy 78.281335 60.336184) + (xy 78.249767 60.343446) (xy 78.224997 60.36406) (xy 78.216824 60.378334) (xy 78.212187 60.39457) + ) + ) + (polygon + (pts + (xy 78.351311 60.685024) (xy 78.358576 60.716551) (xy 78.379199 60.741275) (xy 78.393501 60.749447) + (xy 78.409778 60.754095) (xy 78.421286 60.755) (xy 78.452826 60.747734) (xy 78.47758 60.727105) + (xy 78.485762 60.712806) (xy 78.490417 60.696531) (xy 78.491323 60.685024) (xy 78.484059 60.653525) + (xy 78.463432 60.6288) (xy 78.449122 60.620618) (xy 78.432839 60.61596) (xy 78.421286 60.615048) + (xy 78.389759 60.622314) (xy 78.365035 60.642937) (xy 78.356863 60.657238) (xy 78.352215 60.673515) + ) + ) + (polygon + (pts + (xy 78.351311 60.545317) (xy 78.358576 60.576714) (xy 78.379219 60.601373) (xy 78.393543 60.609526) + (xy 78.409846 60.614156) (xy 78.421286 60.615048) (xy 78.452854 60.607786) (xy 78.477625 60.587172) + (xy 78.485798 60.572898) (xy 78.490434 60.556663) (xy 78.491323 60.545317) (xy 78.484059 60.512879) + (xy 78.463577 60.487717) (xy 78.449426 60.479414) (xy 78.433327 60.474636) (xy 78.421286 60.473632) + (xy 78.389926 60.480898) (xy 78.365232 60.501565) (xy 78.357003 60.51595) (xy 78.352278 60.532329) + (xy 78.351311 60.54434) + ) + ) + (polygon + (pts + (xy 78.351311 60.403656) (xy 78.358576 60.435183) (xy 78.379199 60.459907) (xy 78.393501 60.468079) + (xy 78.409778 60.472727) (xy 78.421286 60.473632) (xy 78.452826 60.466366) (xy 78.47758 60.445737) + (xy 78.485762 60.431438) (xy 78.490417 60.415164) (xy 78.491323 60.403656) (xy 78.484059 60.37374) + (xy 78.463083 60.349498) (xy 78.448486 60.341442) (xy 78.431877 60.336945) (xy 78.421286 60.336184) + (xy 78.389731 60.343446) (xy 78.364991 60.364055) (xy 78.356828 60.378331) (xy 78.352198 60.394569) + (xy 78.351311 60.405915) + ) + ) + (polygon + (pts + (xy 78.351311 60.266209) (xy 78.358576 60.297735) (xy 78.379199 60.32246) (xy 78.393501 60.330631) + (xy 78.409778 60.335279) (xy 78.421286 60.336184) (xy 78.452826 60.328919) (xy 78.47758 60.30829) + (xy 78.485762 60.29399) (xy 78.490417 60.277716) (xy 78.491323 60.266209) (xy 78.484059 60.234697) + (xy 78.463426 60.209942) (xy 78.449118 60.20175) (xy 78.432838 60.197085) (xy 78.421286 60.196172) + (xy 78.389787 60.203436) (xy 78.365063 60.224063) (xy 78.35688 60.238373) (xy 78.352222 60.254656) + ) + ) + (polygon + (pts + (xy 78.351311 60.125525) (xy 78.358576 60.15735) (xy 78.379177 60.182296) (xy 78.393429 60.190534) + (xy 78.409646 60.195237) (xy 78.421286 60.196172) (xy 78.452686 60.188904) (xy 78.477411 60.168235) + (xy 78.485639 60.15386) (xy 78.49036 60.13749) (xy 78.491323 60.125525) (xy 78.484059 60.093715) + (xy 78.463448 60.068738) (xy 78.44919 60.06048) (xy 78.43297 60.05576) (xy 78.421286 60.054816) + (xy 78.389926 60.062082) (xy 78.365232 60.08275) (xy 78.357003 60.097135) (xy 78.352278 60.113514) + ) + ) + (polygon + (pts + (xy 78.351311 59.984841) (xy 78.358576 60.016368) (xy 78.379199 60.041092) (xy 78.393501 60.049264) + (xy 78.409778 60.053912) (xy 78.421286 60.054816) (xy 78.452826 60.047551) (xy 78.47758 60.026922) + (xy 78.485762 60.012622) (xy 78.490417 59.996348) (xy 78.491323 59.984841) (xy 78.484059 59.953329) + (xy 78.463426 59.928574) (xy 78.449118 59.920382) (xy 78.432838 59.915717) (xy 78.421286 59.914804) + (xy 78.389787 59.922068) (xy 78.365063 59.942695) (xy 78.35688 59.957005) (xy 78.352222 59.973288) + ) + ) + (polygon + (pts + (xy 78.351311 59.844829) (xy 78.358576 59.876355) (xy 78.379199 59.90108) (xy 78.393501 59.909251) + (xy 78.409778 59.913899) (xy 78.421286 59.914804) (xy 78.452826 59.907539) (xy 78.47758 59.88691) + (xy 78.485762 59.87261) (xy 78.490417 59.856336) (xy 78.491323 59.844829) (xy 78.484059 59.81333) + (xy 78.463432 59.788605) (xy 78.449122 59.780423) (xy 78.432839 59.775764) (xy 78.421286 59.774853) + (xy 78.389759 59.782118) (xy 78.365035 59.802742) (xy 78.356863 59.817043) (xy 78.352215 59.83332) + ) + ) + (polygon + (pts + (xy 79.259955 59.914804) (xy 79.291482 59.907539) (xy 79.316206 59.886915) (xy 79.324378 59.872614) + (xy 79.329026 59.856337) (xy 79.329931 59.844829) (xy 79.322665 59.813302) (xy 79.302042 59.788577) + (xy 79.287741 59.780406) (xy 79.271464 59.775758) (xy 79.259955 59.774853) (xy 79.228416 59.782118) + (xy 79.203661 59.802747) (xy 79.195479 59.817047) (xy 79.190825 59.833321) (xy 79.189918 59.844829) + (xy 79.197182 59.876327) (xy 79.217809 59.901052) (xy 79.232119 59.909234) (xy 79.248402 59.913893) + ) + ) + (polygon + (pts + (xy 78.909955 60.54434) (xy 78.91722 60.575867) (xy 78.937844 60.600591) (xy 78.952145 60.608763) + (xy 78.968422 60.613411) (xy 78.979931 60.614316) (xy 79.01147 60.60705) (xy 79.036225 60.586421) + (xy 79.044406 60.572122) (xy 79.049061 60.555848) (xy 79.049967 60.54434) (xy 79.042703 60.512841) + (xy 79.022076 60.488116) (xy 79.007767 60.479934) (xy 78.991484 60.475276) (xy 78.979931 60.474364) + (xy 78.948404 60.48163) (xy 78.92368 60.502253) (xy 78.915508 60.516555) (xy 78.91086 60.532832) + ) + ) + (polygon + (pts + (xy 79.049967 60.684352) (xy 79.057233 60.716311) (xy 79.077766 60.741162) (xy 79.091992 60.749366) + (xy 79.108183 60.754054) (xy 79.119943 60.755) (xy 79.15147 60.747734) (xy 79.176194 60.727111) + (xy 79.184366 60.712809) (xy 79.189014 60.696532) (xy 79.189918 60.685024) (xy 79.182653 60.653052) + (xy 79.162115 60.628171) (xy 79.14789 60.619958) (xy 79.131701 60.615263) (xy 79.119943 60.614316) + (xy 79.088444 60.62158) (xy 79.063719 60.642207) (xy 79.055537 60.656516) (xy 79.050879 60.672799) + ) + ) + (polygon + (pts + (xy 79.189918 60.684352) (xy 79.197182 60.716283) (xy 79.217719 60.741135) (xy 79.231953 60.749348) + (xy 79.248151 60.754047) (xy 79.259955 60.755) (xy 79.291482 60.747734) (xy 79.316206 60.727111) + (xy 79.324378 60.712809) (xy 79.329026 60.696532) (xy 79.329931 60.685024) (xy 79.322665 60.653052) + (xy 79.302127 60.628171) (xy 79.287902 60.619958) (xy 79.271713 60.615263) (xy 79.259955 60.614316) + (xy 79.228444 60.62158) (xy 79.203688 60.642212) (xy 79.195497 60.65652) (xy 79.190831 60.6728) + ) + ) + (polygon + (pts + (xy 79.329931 60.54434) (xy 79.337195 60.575839) (xy 79.357822 60.600564) (xy 79.372131 60.608746) + (xy 79.388414 60.613404) (xy 79.399967 60.614316) (xy 79.431494 60.60705) (xy 79.456218 60.586427) + (xy 79.46439 60.572126) (xy 79.469038 60.555849) (xy 79.469943 60.54434) (xy 79.462678 60.512813) + (xy 79.442054 60.488089) (xy 79.427753 60.479917) (xy 79.411476 60.475269) (xy 79.399967 60.474364) + (xy 79.368428 60.48163) (xy 79.343673 60.502259) (xy 79.335492 60.516558) (xy 79.330837 60.532833) + ) + ) + (polygon + (pts + (xy 79.329931 60.405244) (xy 79.337195 60.436354) (xy 79.357856 60.460803) (xy 79.372233 60.468903) + (xy 79.388595 60.473492) (xy 79.399967 60.474364) (xy 79.431664 60.467103) (xy 79.456428 60.446531) + (xy 79.464543 60.432326) (xy 79.469107 60.416174) (xy 79.469943 60.405244) (xy 79.462678 60.374145) + (xy 79.442011 60.349708) (xy 79.427636 60.341621) (xy 79.411271 60.337046) (xy 79.399967 60.336184) + (xy 79.368258 60.343444) (xy 79.343457 60.364017) (xy 79.335333 60.378215) (xy 79.330764 60.394353) + ) + ) + (polygon + (pts + (xy 79.329931 60.266209) (xy 79.337195 60.297707) (xy 79.357822 60.322432) (xy 79.372131 60.330614) + (xy 79.388414 60.335273) (xy 79.399967 60.336184) (xy 79.431494 60.328919) (xy 79.456218 60.308295) + (xy 79.46439 60.293994) (xy 79.469038 60.277717) (xy 79.469943 60.266209) (xy 79.462678 60.234669) + (xy 79.442048 60.209914) (xy 79.427749 60.201733) (xy 79.411475 60.197078) (xy 79.399967 60.196172) + (xy 79.368456 60.203436) (xy 79.3437 60.224068) (xy 79.335509 60.238376) (xy 79.330844 60.254657) + ) + ) + (polygon + (pts + (xy 79.329931 60.12583) (xy 79.337195 60.157511) (xy 79.3578 60.182343) (xy 79.372078 60.190556) + (xy 79.388325 60.195242) (xy 79.399967 60.196172) (xy 79.431438 60.188903) (xy 79.456142 60.168258) + (xy 79.464331 60.153917) (xy 79.46901 60.137584) (xy 79.469943 60.12583) (xy 79.462678 60.094094) + (xy 79.44209 60.069282) (xy 79.427825 60.061086) (xy 79.411589 60.056413) (xy 79.399967 60.055488) + (xy 79.368456 60.062752) (xy 79.3437 60.083385) (xy 79.335509 60.097692) (xy 79.330844 60.113973) + (xy 79.329931 60.125525) + ) + ) + (polygon + (pts + (xy 79.329931 59.985146) (xy 79.337195 60.016827) (xy 79.3578 60.041659) (xy 79.372078 60.049872) + (xy 79.388325 60.054558) (xy 79.399967 60.055488) (xy 79.431438 60.048219) (xy 79.456142 60.027574) + (xy 79.464331 60.013233) (xy 79.46901 59.9969) (xy 79.469943 59.985146) (xy 79.462678 59.953464) + (xy 79.442062 59.928613) (xy 79.427787 59.920404) (xy 79.411542 59.915725) (xy 79.399967 59.914804) + (xy 79.368512 59.92207) (xy 79.343772 59.942721) (xy 79.335562 59.957062) (xy 79.330868 59.973388) + ) + ) + (polygon + (pts + (xy 79.329931 59.844829) (xy 79.337195 59.876327) (xy 79.357822 59.901052) (xy 79.372131 59.909234) + (xy 79.388414 59.913893) (xy 79.399967 59.914804) (xy 79.431494 59.907539) (xy 79.456218 59.886915) + (xy 79.46439 59.872614) (xy 79.469038 59.856337) (xy 79.469943 59.844829) (xy 79.462678 59.813302) + (xy 79.442054 59.788577) (xy 79.427753 59.780406) (xy 79.411476 59.775758) (xy 79.399967 59.774853) + (xy 79.368428 59.782118) (xy 79.343673 59.802747) (xy 79.335492 59.817047) (xy 79.330837 59.833321) + ) + ) + (polygon + (pts + (xy 79.469943 59.844829) (xy 79.477208 59.876355) (xy 79.497832 59.90108) (xy 79.512133 59.909251) + (xy 79.52841 59.913899) (xy 79.539918 59.914804) (xy 79.571458 59.907539) (xy 79.596213 59.88691) + (xy 79.604394 59.87261) (xy 79.609049 59.856336) (xy 79.609955 59.844829) (xy 79.602691 59.81333) + (xy 79.582064 59.788605) (xy 79.567754 59.780423) (xy 79.551471 59.775764) (xy 79.539918 59.774853) + (xy 79.508392 59.782118) (xy 79.483667 59.802742) (xy 79.475496 59.817043) (xy 79.470847 59.83332) + ) + ) + (polygon + (pts + (xy 80.099173 59.914804) (xy 80.1307 59.907539) (xy 80.155425 59.886915) (xy 80.163596 59.872614) + (xy 80.168244 59.856337) (xy 80.169149 59.844829) (xy 80.161884 59.813302) (xy 80.14126 59.788577) + (xy 80.126959 59.780406) (xy 80.110682 59.775758) (xy 80.099173 59.774853) (xy 80.067634 59.782118) + (xy 80.042879 59.802747) (xy 80.034698 59.817047) (xy 80.030043 59.833321) (xy 80.029137 59.844829) + (xy 80.036401 59.876327) (xy 80.057028 59.901052) (xy 80.071338 59.909234) (xy 80.087621 59.913893) + ) + ) + (polygon + (pts + (xy 79.749173 60.684352) (xy 79.756439 60.716311) (xy 79.776972 60.741162) (xy 79.791198 60.749366) + (xy 79.80739 60.754054) (xy 79.819149 60.755) (xy 79.850688 60.747734) (xy 79.875443 60.727105) + (xy 79.883625 60.712806) (xy 79.88828 60.696531) (xy 79.889186 60.685024) (xy 79.881922 60.653081) + (xy 79.86138 60.628198) (xy 79.847147 60.619975) (xy 79.830952 60.61527) (xy 79.819149 60.614316) + (xy 79.78765 60.62158) (xy 79.762925 60.642207) (xy 79.754743 60.656516) (xy 79.750085 60.672799) + ) + ) + (polygon + (pts + (xy 79.749173 60.54434) (xy 79.756439 60.575867) (xy 79.777062 60.600591) (xy 79.791364 60.608763) + (xy 79.807641 60.613411) (xy 79.819149 60.614316) (xy 79.850688 60.60705) (xy 79.875443 60.586421) + (xy 79.883625 60.572122) (xy 79.88828 60.555848) (xy 79.889186 60.54434) (xy 79.881922 60.512841) + (xy 79.861295 60.488116) (xy 79.846985 60.479934) (xy 79.830702 60.475276) (xy 79.819149 60.474364) + (xy 79.787622 60.48163) (xy 79.762898 60.502253) (xy 79.754726 60.516555) (xy 79.750078 60.532832) + ) + ) + (polygon + (pts + (xy 79.749173 60.405244) (xy 79.756439 60.436381) (xy 79.777096 60.46083) (xy 79.791465 60.46892) + (xy 79.807822 60.473499) (xy 79.819149 60.474364) (xy 79.850858 60.467103) (xy 79.875654 60.446526) + (xy 79.883778 60.432323) (xy 79.888348 60.416173) (xy 79.889186 60.405244) (xy 79.881922 60.374173) + (xy 79.861252 60.349735) (xy 79.846868 60.341638) (xy 79.830497 60.337053) (xy 79.819149 60.336184) + (xy 79.787452 60.343444) (xy 79.762682 60.364012) (xy 79.754568 60.378211) (xy 79.750006 60.394352) + ) + ) + (polygon + (pts + (xy 79.749173 60.266209) (xy 79.756439 60.297735) (xy 79.777062 60.32246) (xy 79.791364 60.330631) + (xy 79.807641 60.335279) (xy 79.819149 60.336184) (xy 79.850688 60.328919) (xy 79.875443 60.30829) + (xy 79.883625 60.29399) (xy 79.88828 60.277716) (xy 79.889186 60.266209) (xy 79.881922 60.234697) + (xy 79.861289 60.209942) (xy 79.846981 60.20175) (xy 79.830701 60.197085) (xy 79.819149 60.196172) + (xy 79.78765 60.203436) (xy 79.762925 60.224063) (xy 79.754743 60.238373) (xy 79.750085 60.254656) + ) + ) + (polygon + (pts + (xy 79.749173 60.125525) (xy 79.756439 60.15735) (xy 79.77704 60.182296) (xy 79.791292 60.190534) + (xy 79.807509 60.195237) (xy 79.819149 60.196172) (xy 79.850549 60.188904) (xy 79.875273 60.168235) + (xy 79.883502 60.15386) (xy 79.888223 60.13749) (xy 79.889186 60.125525) (xy 79.881922 60.093715) + (xy 79.861311 60.068738) (xy 79.847053 60.06048) (xy 79.830833 60.05576) (xy 79.819149 60.054816) + (xy 79.787789 60.062082) (xy 79.763095 60.08275) (xy 79.754866 60.097135) (xy 79.750141 60.113514) + ) + ) + (polygon + (pts + (xy 79.889186 60.405244) (xy 79.896451 60.436381) (xy 79.917109 60.46083) (xy 79.931477 60.46892) + (xy 79.947834 60.473499) (xy 79.959161 60.474364) (xy 79.990858 60.467103) (xy 80.015622 60.446531) + (xy 80.023737 60.432326) (xy 80.028301 60.416174) (xy 80.029137 60.405244) (xy 80.021872 60.374145) + (xy 80.001205 60.349708) (xy 79.98683 60.341621) (xy 79.970465 60.337046) (xy 79.959161 60.336184) + (xy 79.927465 60.343444) (xy 79.902695 60.364012) (xy 79.89458 60.378211) (xy 79.890018 60.394352) + ) + ) + (polygon + (pts + (xy 79.889186 59.984841) (xy 79.896451 60.016368) (xy 79.917075 60.041092) (xy 79.931376 60.049264) + (xy 79.947653 60.053912) (xy 79.959161 60.054816) (xy 79.990688 60.047551) (xy 80.015412 60.026927) + (xy 80.023584 60.012626) (xy 80.028232 59.996349) (xy 80.029137 59.984841) (xy 80.021872 59.953301) + (xy 80.001242 59.928546) (xy 79.986943 59.920365) (xy 79.970669 59.91571) (xy 79.959161 59.914804) + (xy 79.927662 59.922068) (xy 79.902938 59.942695) (xy 79.894756 59.957005) (xy 79.890097 59.973288) + ) + ) + (polygon + (pts + (xy 80.029137 60.405244) (xy 80.036401 60.436354) (xy 80.057062 60.460803) (xy 80.071439 60.468903) + (xy 80.087802 60.473492) (xy 80.099173 60.474364) (xy 80.13087 60.467103) (xy 80.155635 60.446531) + (xy 80.163749 60.432326) (xy 80.168313 60.416174) (xy 80.169149 60.405244) (xy 80.161884 60.374145) + (xy 80.141218 60.349708) (xy 80.126842 60.341621) (xy 80.110477 60.337046) (xy 80.099173 60.336184) + (xy 80.067464 60.343444) (xy 80.042663 60.364017) (xy 80.034539 60.378215) (xy 80.029971 60.394353) + ) + ) + (polygon + (pts + (xy 80.169149 60.405244) (xy 80.176413 60.436354) (xy 80.197074 60.460803) (xy 80.211451 60.468903) + (xy 80.227814 60.473492) (xy 80.239186 60.474364) (xy 80.270882 60.467103) (xy 80.295647 60.446531) + (xy 80.303761 60.432326) (xy 80.308325 60.416174) (xy 80.309161 60.405244) (xy 80.301896 60.374145) + (xy 80.28123 60.349708) (xy 80.266854 60.341621) (xy 80.25049 60.337046) (xy 80.239186 60.336184) + (xy 80.207476 60.343444) (xy 80.182675 60.364017) (xy 80.174551 60.378215) (xy 80.169983 60.394353) + ) + ) + (polygon + (pts + (xy 80.169149 59.984841) (xy 80.176413 60.01634) (xy 80.19704 60.041064) (xy 80.21135 60.049246) + (xy 80.227633 60.053905) (xy 80.239186 60.054816) (xy 80.270713 60.047551) (xy 80.295437 60.026927) + (xy 80.303609 60.012626) (xy 80.308257 59.996349) (xy 80.309161 59.984841) (xy 80.301896 59.953301) + (xy 80.281267 59.928546) (xy 80.266967 59.920365) (xy 80.250693 59.91571) (xy 80.239186 59.914804) + (xy 80.207674 59.922068) (xy 80.182919 59.942701) (xy 80.174727 59.957009) (xy 80.170062 59.973289) + ) + ) + (polygon + (pts + (xy 80.309161 60.684352) (xy 80.316427 60.716311) (xy 80.33696 60.741162) (xy 80.351186 60.749366) + (xy 80.367377 60.754054) (xy 80.379137 60.755) (xy 80.410676 60.747734) (xy 80.435431 60.727105) + (xy 80.443613 60.712806) (xy 80.448267 60.696531) (xy 80.449173 60.685024) (xy 80.44191 60.653081) + (xy 80.421367 60.628198) (xy 80.407135 60.619975) (xy 80.39094 60.61527) (xy 80.379137 60.614316) + (xy 80.347638 60.62158) (xy 80.322913 60.642207) (xy 80.314731 60.656516) (xy 80.310073 60.672799) + ) + ) + (polygon + (pts + (xy 80.309161 60.54434) (xy 80.316427 60.575867) (xy 80.33705 60.600591) (xy 80.351351 60.608763) + (xy 80.367628 60.613411) (xy 80.379137 60.614316) (xy 80.410676 60.60705) (xy 80.435431 60.586421) + (xy 80.443613 60.572122) (xy 80.448267 60.555848) (xy 80.449173 60.54434) (xy 80.44191 60.512841) + (xy 80.421282 60.488116) (xy 80.406973 60.479934) (xy 80.39069 60.475276) (xy 80.379137 60.474364) + (xy 80.34761 60.48163) (xy 80.322886 60.502253) (xy 80.314714 60.516555) (xy 80.310066 60.532832) + ) + ) + (polygon + (pts + (xy 80.309161 60.405244) (xy 80.316427 60.436381) (xy 80.337084 60.46083) (xy 80.351453 60.46892) + (xy 80.367809 60.473499) (xy 80.379137 60.474364) (xy 80.410846 60.467103) (xy 80.435641 60.446526) + (xy 80.443765 60.432323) (xy 80.448336 60.416173) (xy 80.449173 60.405244) (xy 80.44191 60.374173) + (xy 80.42124 60.349735) (xy 80.406856 60.341638) (xy 80.390485 60.337053) (xy 80.379137 60.336184) + (xy 80.34744 60.343444) (xy 80.32267 60.364012) (xy 80.314555 60.378211) (xy 80.309994 60.394352) + ) + ) + (polygon + (pts + (xy 80.309161 60.266209) (xy 80.316427 60.297735) (xy 80.33705 60.32246) (xy 80.351351 60.330631) + (xy 80.367628 60.335279) (xy 80.379137 60.336184) (xy 80.410676 60.328919) (xy 80.435431 60.30829) + (xy 80.443613 60.29399) (xy 80.448267 60.277716) (xy 80.449173 60.266209) (xy 80.44191 60.234697) + (xy 80.421277 60.209942) (xy 80.406969 60.20175) (xy 80.390689 60.197085) (xy 80.379137 60.196172) + (xy 80.347638 60.203436) (xy 80.322913 60.224063) (xy 80.314731 60.238373) (xy 80.310073 60.254656) + ) + ) + (polygon + (pts + (xy 80.309161 60.125525) (xy 80.316427 60.15735) (xy 80.337028 60.182296) (xy 80.351279 60.190534) + (xy 80.367497 60.195237) (xy 80.379137 60.196172) (xy 80.410537 60.188904) (xy 80.435261 60.168235) + (xy 80.44349 60.15386) (xy 80.448211 60.13749) (xy 80.449173 60.125525) (xy 80.44191 60.093715) + (xy 80.421299 60.068738) (xy 80.407041 60.06048) (xy 80.39082 60.05576) (xy 80.379137 60.054816) + (xy 80.347777 60.062082) (xy 80.323083 60.08275) (xy 80.314854 60.097135) (xy 80.310129 60.113514) + ) + ) + (polygon + (pts + (xy 80.79838 59.914804) (xy 80.829907 59.907539) (xy 80.854631 59.886915) (xy 80.862803 59.872614) + (xy 80.867451 59.856337) (xy 80.868355 59.844829) (xy 80.86109 59.813302) (xy 80.840466 59.788577) + (xy 80.826165 59.780406) (xy 80.809888 59.775758) (xy 80.79838 59.774853) (xy 80.766853 59.782118) + (xy 80.742129 59.802742) (xy 80.733957 59.817043) (xy 80.729309 59.83332) (xy 80.728404 59.844829) + (xy 80.735669 59.876355) (xy 80.756293 59.90108) (xy 80.770594 59.909251) (xy 80.786871 59.913899) + ) + ) + (polygon + (pts + (xy 80.588392 60.545317) (xy 80.595657 60.576714) (xy 80.6163 60.601373) (xy 80.630624 60.609526) + (xy 80.646927 60.614156) (xy 80.658367 60.615048) (xy 80.689935 60.607786) (xy 80.714706 60.587172) + (xy 80.722879 60.572898) (xy 80.727516 60.556663) (xy 80.728404 60.545317) (xy 80.72114 60.51319) + (xy 80.700644 60.48828) (xy 80.686443 60.480053) (xy 80.670284 60.475336) (xy 80.658367 60.474364) + (xy 80.626841 60.48163) (xy 80.602116 60.502253) (xy 80.593945 60.516555) (xy 80.589297 60.532832) + (xy 80.588392 60.54434) + ) + ) + (polygon + (pts + (xy 80.588392 60.12583) (xy 80.595657 60.157539) (xy 80.616259 60.18237) (xy 80.630529 60.190573) + (xy 80.646769 60.195249) (xy 80.658367 60.196172) (xy 80.689851 60.188903) (xy 80.714585 60.168252) + (xy 80.722784 60.153913) (xy 80.72747 60.137583) (xy 80.728404 60.12583) (xy 80.72114 60.094122) + (xy 80.700549 60.069309) (xy 80.686276 60.061103) (xy 80.670034 60.05642) (xy 80.658367 60.055488) + (xy 80.626869 60.062752) (xy 80.602144 60.083379) (xy 80.593962 60.097689) (xy 80.589303 60.113972) + (xy 80.588392 60.125525) + ) + ) + (polygon + (pts + (xy 80.588392 59.985146) (xy 80.595657 60.016855) (xy 80.616259 60.041687) (xy 80.630529 60.049889) + (xy 80.646769 60.054565) (xy 80.658367 60.055488) (xy 80.689851 60.048219) (xy 80.714585 60.027568) + (xy 80.722784 60.01323) (xy 80.72747 59.996899) (xy 80.728404 59.985146) (xy 80.72114 59.953492) + (xy 80.700521 59.928641) (xy 80.686238 59.920421) (xy 80.669986 59.915732) (xy 80.658367 59.914804) + (xy 80.626924 59.92207) (xy 80.602215 59.942715) (xy 80.594015 59.957059) (xy 80.589328 59.973387) + ) + ) + (polygon + (pts + (xy 80.728404 60.685024) (xy 80.735669 60.716551) (xy 80.756293 60.741275) (xy 80.770594 60.749447) + (xy 80.786871 60.754095) (xy 80.79838 60.755) (xy 80.829907 60.747734) (xy 80.854631 60.727111) + (xy 80.862803 60.712809) (xy 80.867451 60.696532) (xy 80.868355 60.685024) (xy 80.86109 60.653497) + (xy 80.840466 60.628773) (xy 80.826165 60.620601) (xy 80.809888 60.615953) (xy 80.79838 60.615048) + (xy 80.766853 60.622314) (xy 80.742129 60.642937) (xy 80.733957 60.657238) (xy 80.729309 60.673515) + ) + ) + (polygon + (pts + (xy 80.728404 60.265415) (xy 80.735669 60.297452) (xy 80.756186 60.322327) (xy 80.770399 60.330535) + (xy 80.786575 60.335231) (xy 80.79838 60.336184) (xy 80.829907 60.328919) (xy 80.854631 60.308295) + (xy 80.862803 60.293994) (xy 80.867451 60.277717) (xy 80.868355 60.266209) (xy 80.86109 60.234669) + (xy 80.840461 60.209914) (xy 80.826161 60.201733) (xy 80.809887 60.197078) (xy 80.79838 60.196172) + (xy 80.766881 60.203436) (xy 80.742156 60.224063) (xy 80.733974 60.238373) (xy 80.729316 60.254656) + (xy 80.728404 60.266209) + ) + ) + (polygon + (pts + (xy 80.868355 60.685024) (xy 80.875619 60.716523) (xy 80.896246 60.741248) (xy 80.910556 60.74943) + (xy 80.926839 60.754088) (xy 80.938392 60.755) (xy 80.969919 60.747734) (xy 80.994643 60.727111) + (xy 81.002815 60.712809) (xy 81.007463 60.696532) (xy 81.008367 60.685024) (xy 81.001102 60.653497) + (xy 80.980479 60.628773) (xy 80.966177 60.620601) (xy 80.9499 60.615953) (xy 80.938392 60.615048) + (xy 80.906852 60.622314) (xy 80.882098 60.642943) (xy 80.873916 60.657242) (xy 80.869261 60.673516) + ) + ) + (polygon + (pts + (xy 80.868355 60.266209) (xy 80.875619 60.297707) (xy 80.896246 60.322432) (xy 80.910556 60.330614) + (xy 80.926839 60.335273) (xy 80.938392 60.336184) (xy 80.969919 60.328919) (xy 80.994643 60.308295) + (xy 81.002815 60.293994) (xy 81.007463 60.277717) (xy 81.008367 60.266209) (xy 81.001102 60.234669) + (xy 80.980473 60.209914) (xy 80.966174 60.201733) (xy 80.949899 60.197078) (xy 80.938392 60.196172) + (xy 80.906881 60.203436) (xy 80.882125 60.224068) (xy 80.873933 60.238376) (xy 80.869268 60.254657) + ) + ) + (polygon + (pts + (xy 80.868355 59.844829) (xy 80.875619 59.876327) (xy 80.896246 59.901052) (xy 80.910556 59.909234) + (xy 80.926839 59.913893) (xy 80.938392 59.914804) (xy 80.969919 59.907539) (xy 80.994643 59.886915) + (xy 81.002815 59.872614) (xy 81.007463 59.856337) (xy 81.008367 59.844829) (xy 81.001102 59.813302) + (xy 80.980479 59.788577) (xy 80.966177 59.780406) (xy 80.9499 59.775758) (xy 80.938392 59.774853) + (xy 80.906852 59.782118) (xy 80.882098 59.802747) (xy 80.873916 59.817047) (xy 80.869261 59.833321) + ) + ) + (polygon + (pts + (xy 81.008367 60.685024) (xy 81.015631 60.716523) (xy 81.036258 60.741248) (xy 81.050568 60.74943) + (xy 81.066851 60.754088) (xy 81.078404 60.755) (xy 81.109931 60.747734) (xy 81.134655 60.727111) + (xy 81.142827 60.712809) (xy 81.147475 60.696532) (xy 81.14838 60.685024) (xy 81.141114 60.653497) + (xy 81.120491 60.628773) (xy 81.10619 60.620601) (xy 81.089913 60.615953) (xy 81.078404 60.615048) + (xy 81.046865 60.622314) (xy 81.02211 60.642943) (xy 81.013928 60.657242) (xy 81.009274 60.673516) + ) + ) + (polygon + (pts + (xy 81.008367 60.266209) (xy 81.015631 60.297707) (xy 81.036258 60.322432) (xy 81.050568 60.330614) + (xy 81.066851 60.335273) (xy 81.078404 60.336184) (xy 81.109931 60.328919) (xy 81.134655 60.308295) + (xy 81.142827 60.293994) (xy 81.147475 60.277717) (xy 81.14838 60.266209) (xy 81.141114 60.234669) + (xy 81.120485 60.209914) (xy 81.106186 60.201733) (xy 81.089912 60.197078) (xy 81.078404 60.196172) + (xy 81.046893 60.203436) (xy 81.022137 60.224068) (xy 81.013946 60.238376) (xy 81.00928 60.254657) + ) + ) + (polygon + (pts + (xy 81.008367 59.844829) (xy 81.015631 59.876327) (xy 81.036258 59.901052) (xy 81.050568 59.909234) + (xy 81.066851 59.913893) (xy 81.078404 59.914804) (xy 81.109931 59.907539) (xy 81.134655 59.886915) + (xy 81.142827 59.872614) (xy 81.147475 59.856337) (xy 81.14838 59.844829) (xy 81.141114 59.813302) + (xy 81.120491 59.788577) (xy 81.10619 59.780406) (xy 81.089913 59.775758) (xy 81.078404 59.774853) + (xy 81.046865 59.782118) (xy 81.02211 59.802747) (xy 81.013928 59.817047) (xy 81.009274 59.833321) + ) + ) + (polygon + (pts + (xy 81.14838 60.545317) (xy 81.155645 60.576714) (xy 81.176288 60.601373) (xy 81.190612 60.609526) + (xy 81.206915 60.614156) (xy 81.218355 60.615048) (xy 81.249923 60.607786) (xy 81.274694 60.587172) + (xy 81.282867 60.572898) (xy 81.287503 60.556663) (xy 81.288392 60.545317) (xy 81.281128 60.51319) + (xy 81.260632 60.48828) (xy 81.246431 60.480053) (xy 81.230272 60.475336) (xy 81.218355 60.474364) + (xy 81.186828 60.48163) (xy 81.162104 60.502253) (xy 81.153932 60.516555) (xy 81.149284 60.532832) + (xy 81.14838 60.54434) + ) + ) + (polygon + (pts + (xy 81.14838 60.405244) (xy 81.155645 60.436381) (xy 81.176303 60.46083) (xy 81.190671 60.46892) + (xy 81.207028 60.473499) (xy 81.218355 60.474364) (xy 81.250065 60.467103) (xy 81.27486 60.446526) + (xy 81.282984 60.432323) (xy 81.287555 60.416173) (xy 81.288392 60.405244) (xy 81.281128 60.374173) + (xy 81.260458 60.349735) (xy 81.246074 60.341638) (xy 81.229703 60.337053) (xy 81.218355 60.336184) + (xy 81.186659 60.343444) (xy 81.161889 60.364012) (xy 81.153774 60.378211) (xy 81.149212 60.394352) + ) + ) + (polygon + (pts + (xy 81.14838 59.985146) (xy 81.155645 60.016855) (xy 81.176246 60.041687) (xy 81.190517 60.049889) + (xy 81.206757 60.054565) (xy 81.218355 60.055488) (xy 81.249839 60.048219) (xy 81.274573 60.027568) + (xy 81.282772 60.01323) (xy 81.287458 59.996899) (xy 81.288392 59.985146) (xy 81.281128 59.953492) + (xy 81.260509 59.928641) (xy 81.246226 59.920421) (xy 81.229974 59.915732) (xy 81.218355 59.914804) + (xy 81.186912 59.92207) (xy 81.162203 59.942715) (xy 81.154002 59.957059) (xy 81.149316 59.973387) + ) + ) + (polygon + (pts + (xy 81.637598 59.914804) (xy 81.669125 59.907539) (xy 81.693849 59.886915) (xy 81.702021 59.872614) + (xy 81.706669 59.856337) (xy 81.707574 59.844829) (xy 81.700308 59.813302) (xy 81.679685 59.788577) + (xy 81.665384 59.780406) (xy 81.649107 59.775758) (xy 81.637598 59.774853) (xy 81.606071 59.782118) + (xy 81.581347 59.802742) (xy 81.573175 59.817043) (xy 81.568527 59.83332) (xy 81.567623 59.844829) + (xy 81.574888 59.876355) (xy 81.595511 59.90108) (xy 81.609813 59.909251) (xy 81.62609 59.913899) + ) + ) + (polygon + (pts + (xy 81.42761 60.54434) (xy 81.434876 60.576178) (xy 81.455483 60.601155) (xy 81.469732 60.609402) + (xy 81.485947 60.614112) (xy 81.497586 60.615048) (xy 81.528958 60.607782) (xy 81.553683 60.587109) + (xy 81.561922 60.572726) (xy 81.566653 60.55635) (xy 81.567623 60.54434) (xy 81.560359 60.512531) + (xy 81.539748 60.487553) (xy 81.52549 60.479296) (xy 81.509269 60.474575) (xy 81.497586 60.473632) + (xy 81.466226 60.480898) (xy 81.441532 60.501565) (xy 81.433303 60.51595) (xy 81.428578 60.532329) + ) + ) + (polygon + (pts + (xy 81.42761 60.403656) (xy 81.434876 60.435183) (xy 81.455499 60.459907) (xy 81.4698 60.468079) + (xy 81.486077 60.472727) (xy 81.497586 60.473632) (xy 81.529125 60.466366) (xy 81.55388 60.445737) + (xy 81.562062 60.431438) (xy 81.566716 60.415164) (xy 81.567623 60.403656) (xy 81.560359 60.372157) + (xy 81.539732 60.347432) (xy 81.525422 60.33925) (xy 81.509139 60.334592) (xy 81.497586 60.333681) + (xy 81.466059 60.340946) (xy 81.441335 60.361569) (xy 81.433163 60.375871) (xy 81.428515 60.392148) + ) + ) + (polygon + (pts + (xy 81.42761 60.263888) (xy 81.434876 60.295324) (xy 81.45551 60.319995) (xy 81.469827 60.328151) + (xy 81.486123 60.332785) (xy 81.497586 60.333681) (xy 81.529153 60.326417) (xy 81.553919 60.305799) + (xy 81.562091 60.291519) (xy 81.56673 60.275273) (xy 81.567623 60.263888) (xy 81.560359 60.233869) + (xy 81.53939 60.209542) (xy 81.524812 60.201462) (xy 81.508226 60.196943) (xy 81.497586 60.196172) + (xy 81.466087 60.203436) (xy 81.441362 60.224063) (xy 81.43318 60.238373) (xy 81.428522 60.254656) + (xy 81.42761 60.266209) + ) + ) + (polygon + (pts + (xy 81.42761 60.12583) (xy 81.434876 60.157539) (xy 81.455477 60.18237) (xy 81.469747 60.190573) + (xy 81.485988 60.195249) (xy 81.497586 60.196172) (xy 81.529069 60.188903) (xy 81.553803 60.168252) + (xy 81.562003 60.153913) (xy 81.566688 60.137583) (xy 81.567623 60.12583) (xy 81.560359 60.093637) + (xy 81.539884 60.068734) (xy 81.525695 60.060511) (xy 81.509548 60.055794) (xy 81.497586 60.054816) + (xy 81.466031 60.062078) (xy 81.441291 60.082687) (xy 81.433127 60.096963) (xy 81.428497 60.113201) + (xy 81.42761 60.124548) + ) + ) + (polygon + (pts + (xy 81.42761 59.984841) (xy 81.434876 60.016368) (xy 81.455499 60.041092) (xy 81.4698 60.049264) + (xy 81.486077 60.053912) (xy 81.497586 60.054816) (xy 81.529125 60.047551) (xy 81.55388 60.026922) + (xy 81.562062 60.012622) (xy 81.566716 59.996348) (xy 81.567623 59.984841) (xy 81.560359 59.953276) + (xy 81.539754 59.928559) (xy 81.525456 59.920381) (xy 81.509186 59.915721) (xy 81.497586 59.914804) + (xy 81.466031 59.922069) (xy 81.441302 59.942685) (xy 81.43314 59.956973) (xy 81.428505 59.973233) + (xy 81.42761 59.984658) + ) + ) + (polygon + (pts + (xy 81.567623 60.685024) (xy 81.574888 60.716551) (xy 81.595511 60.741275) (xy 81.609813 60.749447) + (xy 81.62609 60.754095) (xy 81.637598 60.755) (xy 81.669125 60.747734) (xy 81.693849 60.727111) + (xy 81.702021 60.712809) (xy 81.706669 60.696532) (xy 81.707574 60.685024) (xy 81.700308 60.653497) + (xy 81.679685 60.628773) (xy 81.665384 60.620601) (xy 81.649107 60.615953) (xy 81.637598 60.615048) + (xy 81.606071 60.622314) (xy 81.581347 60.642937) (xy 81.573175 60.657238) (xy 81.568527 60.673515) + ) + ) + (polygon + (pts + (xy 81.707574 60.685024) (xy 81.714838 60.716523) (xy 81.735465 60.741248) (xy 81.749774 60.74943) + (xy 81.766057 60.754088) (xy 81.77761 60.755) (xy 81.809137 60.747734) (xy 81.833861 60.727111) + (xy 81.842033 60.712809) (xy 81.846681 60.696532) (xy 81.847586 60.685024) (xy 81.840321 60.653497) + (xy 81.819697 60.628773) (xy 81.805396 60.620601) (xy 81.789119 60.615953) (xy 81.77761 60.615048) + (xy 81.746071 60.622314) (xy 81.721316 60.642943) (xy 81.713135 60.657242) (xy 81.70848 60.673516) + ) + ) + (polygon + (pts + (xy 81.707574 59.844829) (xy 81.714838 59.876327) (xy 81.735465 59.901052) (xy 81.749774 59.909234) + (xy 81.766057 59.913893) (xy 81.77761 59.914804) (xy 81.809137 59.907539) (xy 81.833861 59.886915) + (xy 81.842033 59.872614) (xy 81.846681 59.856337) (xy 81.847586 59.844829) (xy 81.840321 59.813302) + (xy 81.819697 59.788577) (xy 81.805396 59.780406) (xy 81.789119 59.775758) (xy 81.77761 59.774853) + (xy 81.746071 59.782118) (xy 81.721316 59.802747) (xy 81.713135 59.817047) (xy 81.70848 59.833321) + ) + ) + (polygon + (pts + (xy 81.847586 60.685024) (xy 81.85485 60.716523) (xy 81.875477 60.741248) (xy 81.889787 60.74943) + (xy 81.90607 60.754088) (xy 81.917623 60.755) (xy 81.949149 60.747734) (xy 81.973874 60.727111) + (xy 81.982045 60.712809) (xy 81.986694 60.696532) (xy 81.987598 60.685024) (xy 81.980333 60.653497) + (xy 81.959709 60.628773) (xy 81.945408 60.620601) (xy 81.929131 60.615953) (xy 81.917623 60.615048) + (xy 81.886083 60.622314) (xy 81.861328 60.642943) (xy 81.853147 60.657242) (xy 81.848492 60.673516) + ) + ) + (polygon + (pts + (xy 81.847586 59.844829) (xy 81.85485 59.876327) (xy 81.875477 59.901052) (xy 81.889787 59.909234) + (xy 81.90607 59.913893) (xy 81.917623 59.914804) (xy 81.949149 59.907539) (xy 81.973874 59.886915) + (xy 81.982045 59.872614) (xy 81.986694 59.856337) (xy 81.987598 59.844829) (xy 81.980333 59.813302) + (xy 81.959709 59.788577) (xy 81.945408 59.780406) (xy 81.929131 59.775758) (xy 81.917623 59.774853) + (xy 81.886083 59.782118) (xy 81.861328 59.802747) (xy 81.853147 59.817047) (xy 81.848492 59.833321) + ) + ) + (polygon + (pts + (xy 81.987598 60.54434) (xy 81.994863 60.576178) (xy 82.015471 60.601155) (xy 82.02972 60.609402) + (xy 82.045935 60.614112) (xy 82.057574 60.615048) (xy 82.088946 60.607782) (xy 82.113671 60.587109) + (xy 82.121909 60.572726) (xy 82.126641 60.55635) (xy 82.12761 60.54434) (xy 82.120346 60.512531) + (xy 82.099736 60.487553) (xy 82.085478 60.479296) (xy 82.069257 60.474575) (xy 82.057574 60.473632) + (xy 82.026214 60.480898) (xy 82.001519 60.501565) (xy 81.993291 60.51595) (xy 81.988566 60.532329) + ) + ) + (polygon + (pts + (xy 81.987598 60.403656) (xy 81.994863 60.435183) (xy 82.015487 60.459907) (xy 82.029788 60.468079) + (xy 82.046065 60.472727) (xy 82.057574 60.473632) (xy 82.089113 60.466366) (xy 82.113868 60.445737) + (xy 82.122049 60.431438) (xy 82.126704 60.415164) (xy 82.12761 60.403656) (xy 82.120346 60.372157) + (xy 82.099719 60.347432) (xy 82.08541 60.33925) (xy 82.069127 60.334592) (xy 82.057574 60.333681) + (xy 82.026047 60.340946) (xy 82.001323 60.361569) (xy 81.993151 60.375871) (xy 81.988503 60.392148) + ) + ) + (polygon + (pts + (xy 81.987598 60.263888) (xy 81.994863 60.295324) (xy 82.015498 60.319995) (xy 82.029815 60.328151) + (xy 82.04611 60.332785) (xy 82.057574 60.333681) (xy 82.089141 60.326417) (xy 82.113907 60.305799) + (xy 82.122079 60.291519) (xy 82.126718 60.275273) (xy 82.12761 60.263888) (xy 82.120346 60.233869) + (xy 82.099378 60.209542) (xy 82.0848 60.201462) (xy 82.068214 60.196943) (xy 82.057574 60.196172) + (xy 82.026075 60.203436) (xy 82.00135 60.224063) (xy 81.993168 60.238373) (xy 81.98851 60.254656) + (xy 81.987598 60.266209) + ) + ) + (polygon + (pts + (xy 81.987598 60.12583) (xy 81.994863 60.157539) (xy 82.015465 60.18237) (xy 82.029735 60.190573) + (xy 82.045975 60.195249) (xy 82.057574 60.196172) (xy 82.089057 60.188903) (xy 82.113791 60.168252) + (xy 82.121991 60.153913) (xy 82.126676 60.137583) (xy 82.12761 60.12583) (xy 82.120346 60.093637) + (xy 82.099872 60.068734) (xy 82.085683 60.060511) (xy 82.069536 60.055794) (xy 82.057574 60.054816) + (xy 82.026019 60.062078) (xy 82.001278 60.082687) (xy 81.993115 60.096963) (xy 81.988485 60.113201) + (xy 81.987598 60.124548) + ) + ) + (polygon + (pts + (xy 81.987598 59.984841) (xy 81.994863 60.016368) (xy 82.015487 60.041092) (xy 82.029788 60.049264) + (xy 82.046065 60.053912) (xy 82.057574 60.054816) (xy 82.089113 60.047551) (xy 82.113868 60.026922) + (xy 82.122049 60.012622) (xy 82.126704 59.996348) (xy 82.12761 59.984841) (xy 82.120346 59.953276) + (xy 82.099742 59.928559) (xy 82.085444 59.920381) (xy 82.069174 59.915721) (xy 82.057574 59.914804) + (xy 82.026019 59.922069) (xy 82.00129 59.942685) (xy 81.993127 59.956973) (xy 81.988492 59.973233) + (xy 81.987598 59.984658) + ) + ) + (polygon + (pts + (xy 82.336804 59.914804) (xy 82.305305 59.922068) (xy 82.280581 59.942695) (xy 82.272399 59.957005) + (xy 82.26774 59.973288) (xy 82.266829 59.984841) (xy 82.274094 60.016368) (xy 82.294718 60.041092) + (xy 82.309019 60.049264) (xy 82.325296 60.053912) (xy 82.336804 60.054816) (xy 82.368344 60.047551) + (xy 82.393099 60.026922) (xy 82.40128 60.012622) (xy 82.405935 59.996348) (xy 82.406841 59.984841) + (xy 82.399577 59.953329) (xy 82.378944 59.928574) (xy 82.364637 59.920382) (xy 82.348356 59.915717) + ) + ) + (polygon + (pts + (xy 82.266829 60.685024) (xy 82.274094 60.716551) (xy 82.294718 60.741275) (xy 82.309019 60.749447) + (xy 82.325296 60.754095) (xy 82.336804 60.755) (xy 82.368344 60.747734) (xy 82.393099 60.727105) + (xy 82.40128 60.712806) (xy 82.405935 60.696531) (xy 82.406841 60.685024) (xy 82.399577 60.653525) + (xy 82.37895 60.6288) (xy 82.36464 60.620618) (xy 82.348357 60.61596) (xy 82.336804 60.615048) + (xy 82.305277 60.622314) (xy 82.280553 60.642937) (xy 82.272381 60.657238) (xy 82.267733 60.673515) + ) + ) + (polygon + (pts + (xy 82.266829 60.545317) (xy 82.274094 60.576714) (xy 82.294737 60.601373) (xy 82.309061 60.609526) + (xy 82.325364 60.614156) (xy 82.336804 60.615048) (xy 82.368372 60.607786) (xy 82.393143 60.587172) + (xy 82.401316 60.572898) (xy 82.405952 60.556663) (xy 82.406841 60.545317) (xy 82.399577 60.512879) + (xy 82.379095 60.487717) (xy 82.364944 60.479414) (xy 82.348845 60.474636) (xy 82.336804 60.473632) + (xy 82.305444 60.480898) (xy 82.28075 60.501565) (xy 82.272521 60.51595) (xy 82.267796 60.532329) + (xy 82.266829 60.54434) + ) + ) + (polygon + (pts + (xy 82.266829 60.403656) (xy 82.274094 60.435183) (xy 82.294718 60.459907) (xy 82.309019 60.468079) + (xy 82.325296 60.472727) (xy 82.336804 60.473632) (xy 82.368344 60.466366) (xy 82.393099 60.445737) + (xy 82.40128 60.431438) (xy 82.405935 60.415164) (xy 82.406841 60.403656) (xy 82.399577 60.37374) + (xy 82.378601 60.349498) (xy 82.364004 60.341442) (xy 82.347395 60.336945) (xy 82.336804 60.336184) + (xy 82.305249 60.343446) (xy 82.280509 60.364055) (xy 82.272346 60.378331) (xy 82.267716 60.394569) + (xy 82.266829 60.405915) + ) + ) + (polygon + (pts + (xy 82.266829 60.266209) (xy 82.274094 60.297735) (xy 82.294718 60.32246) (xy 82.309019 60.330631) + (xy 82.325296 60.335279) (xy 82.336804 60.336184) (xy 82.368344 60.328919) (xy 82.393099 60.30829) + (xy 82.40128 60.29399) (xy 82.405935 60.277716) (xy 82.406841 60.266209) (xy 82.399577 60.234697) + (xy 82.378944 60.209942) (xy 82.364637 60.20175) (xy 82.348356 60.197085) (xy 82.336804 60.196172) + (xy 82.305305 60.203436) (xy 82.280581 60.224063) (xy 82.272399 60.238373) (xy 82.26774 60.254656) + ) + ) + (polygon + (pts + (xy 82.266829 60.125525) (xy 82.274094 60.15735) (xy 82.294696 60.182296) (xy 82.308947 60.190534) + (xy 82.325164 60.195237) (xy 82.336804 60.196172) (xy 82.368204 60.188904) (xy 82.392929 60.168235) + (xy 82.401157 60.15386) (xy 82.405879 60.13749) (xy 82.406841 60.125525) (xy 82.399577 60.093715) + (xy 82.378966 60.068738) (xy 82.364709 60.06048) (xy 82.348488 60.05576) (xy 82.336804 60.054816) + (xy 82.305444 60.062082) (xy 82.28075 60.08275) (xy 82.272521 60.097135) (xy 82.267796 60.113514) + ) + ) + (polygon + (pts + (xy 82.266829 59.844829) (xy 82.274094 59.876355) (xy 82.294718 59.90108) (xy 82.309019 59.909251) + (xy 82.325296 59.913899) (xy 82.336804 59.914804) (xy 82.368344 59.907539) (xy 82.393099 59.88691) + (xy 82.40128 59.87261) (xy 82.405935 59.856336) (xy 82.406841 59.844829) (xy 82.399577 59.81333) + (xy 82.37895 59.788605) (xy 82.36464 59.780423) (xy 82.348357 59.775764) (xy 82.336804 59.774853) + (xy 82.305277 59.782118) (xy 82.280553 59.802742) (xy 82.272381 59.817043) (xy 82.267733 59.83332) + ) + ) + (polygon + (pts + (xy 82.406841 60.12583) (xy 82.414106 60.157539) (xy 82.434708 60.18237) (xy 82.448978 60.190573) + (xy 82.465218 60.195249) (xy 82.476817 60.196172) (xy 82.508287 60.188903) (xy 82.532991 60.168258) + (xy 82.541181 60.153917) (xy 82.545859 60.137584) (xy 82.546792 60.12583) (xy 82.539527 60.093796) + (xy 82.518961 60.068761) (xy 82.504745 60.0605) (xy 82.488568 60.055772) (xy 82.476817 60.054816) + (xy 82.445457 60.062082) (xy 82.420762 60.08275) (xy 82.412533 60.097135) (xy 82.407809 60.113514) + (xy 82.406841 60.125525) + ) + ) + (polygon + (pts + (xy 82.546792 60.266209) (xy 82.554056 60.297707) (xy 82.574683 60.322432) (xy 82.588993 60.330614) + (xy 82.605276 60.335273) (xy 82.616829 60.336184) (xy 82.648356 60.328919) (xy 82.67308 60.308295) + (xy 82.681252 60.293994) (xy 82.6859 60.277717) (xy 82.686804 60.266209) (xy 82.679539 60.234669) + (xy 82.65891 60.209914) (xy 82.644611 60.201733) (xy 82.628336 60.197078) (xy 82.616829 60.196172) + (xy 82.585317 60.203436) (xy 82.560562 60.224068) (xy 82.55237 60.238376) (xy 82.547705 60.254657) + ) + ) + (polygon + (pts + (xy 82.686804 60.405915) (xy 82.694068 60.435961) (xy 82.715022 60.460268) (xy 82.729595 60.468342) + (xy 82.746176 60.472858) (xy 82.756841 60.473632) (xy 82.788368 60.466366) (xy 82.813092 60.445743) + (xy 82.821264 60.431442) (xy 82.825912 60.415165) (xy 82.826817 60.403656) (xy 82.819551 60.373714) + (xy 82.798579 60.349471) (xy 82.783991 60.341426) (xy 82.767388 60.336939) (xy 82.756841 60.336184) + (xy 82.725273 60.343446) (xy 82.700503 60.36406) (xy 82.69233 60.378334) (xy 82.687693 60.39457) + ) + ) + (polygon + (pts + (xy 82.826817 60.685024) (xy 82.834082 60.716551) (xy 82.854705 60.741275) (xy 82.869007 60.749447) + (xy 82.885284 60.754095) (xy 82.896792 60.755) (xy 82.928332 60.747734) (xy 82.953086 60.727105) + (xy 82.961268 60.712806) (xy 82.965923 60.696531) (xy 82.966829 60.685024) (xy 82.959565 60.653525) + (xy 82.938938 60.6288) (xy 82.924628 60.620618) (xy 82.908345 60.61596) (xy 82.896792 60.615048) + (xy 82.865265 60.622314) (xy 82.840541 60.642937) (xy 82.832369 60.657238) (xy 82.827721 60.673515) + ) + ) + (polygon + (pts + (xy 82.826817 60.545317) (xy 82.834082 60.576714) (xy 82.854725 60.601373) (xy 82.869049 60.609526) + (xy 82.885352 60.614156) (xy 82.896792 60.615048) (xy 82.92836 60.607786) (xy 82.953131 60.587172) + (xy 82.961304 60.572898) (xy 82.96594 60.556663) (xy 82.966829 60.545317) (xy 82.959565 60.512879) + (xy 82.939083 60.487717) (xy 82.924932 60.479414) (xy 82.908833 60.474636) (xy 82.896792 60.473632) + (xy 82.865432 60.480898) (xy 82.840738 60.501565) (xy 82.832509 60.51595) (xy 82.827784 60.532329) + (xy 82.826817 60.54434) + ) + ) + (polygon + (pts + (xy 82.826817 60.403656) (xy 82.834082 60.435183) (xy 82.854705 60.459907) (xy 82.869007 60.468079) + (xy 82.885284 60.472727) (xy 82.896792 60.473632) (xy 82.928332 60.466366) (xy 82.953086 60.445737) + (xy 82.961268 60.431438) (xy 82.965923 60.415164) (xy 82.966829 60.403656) (xy 82.959565 60.37374) + (xy 82.938589 60.349498) (xy 82.923992 60.341442) (xy 82.907383 60.336945) (xy 82.896792 60.336184) + (xy 82.865237 60.343446) (xy 82.840497 60.364055) (xy 82.832334 60.378331) (xy 82.827704 60.394569) + (xy 82.826817 60.405915) + ) + ) + (polygon + (pts + (xy 82.826817 60.266209) (xy 82.834082 60.297735) (xy 82.854705 60.32246) (xy 82.869007 60.330631) + (xy 82.885284 60.335279) (xy 82.896792 60.336184) (xy 82.928332 60.328919) (xy 82.953086 60.30829) + (xy 82.961268 60.29399) (xy 82.965923 60.277716) (xy 82.966829 60.266209) (xy 82.959565 60.234697) + (xy 82.938932 60.209942) (xy 82.924624 60.20175) (xy 82.908344 60.197085) (xy 82.896792 60.196172) + (xy 82.865293 60.203436) (xy 82.840568 60.224063) (xy 82.832386 60.238373) (xy 82.827728 60.254656) + ) + ) + (polygon + (pts + (xy 82.826817 60.125525) (xy 82.834082 60.15735) (xy 82.854683 60.182296) (xy 82.868935 60.190534) + (xy 82.885152 60.195237) (xy 82.896792 60.196172) (xy 82.928192 60.188904) (xy 82.952916 60.168235) + (xy 82.961145 60.15386) (xy 82.965866 60.13749) (xy 82.966829 60.125525) (xy 82.959565 60.093715) + (xy 82.938954 60.068738) (xy 82.924696 60.06048) (xy 82.908476 60.05576) (xy 82.896792 60.054816) + (xy 82.865432 60.062082) (xy 82.840738 60.08275) (xy 82.832509 60.097135) (xy 82.827784 60.113514) + ) + ) + (polygon + (pts + (xy 82.826817 59.984841) (xy 82.834082 60.016368) (xy 82.854705 60.041092) (xy 82.869007 60.049264) + (xy 82.885284 60.053912) (xy 82.896792 60.054816) (xy 82.928332 60.047551) (xy 82.953086 60.026922) + (xy 82.961268 60.012622) (xy 82.965923 59.996348) (xy 82.966829 59.984841) (xy 82.959565 59.953329) + (xy 82.938932 59.928574) (xy 82.924624 59.920382) (xy 82.908344 59.915717) (xy 82.896792 59.914804) + (xy 82.865293 59.922068) (xy 82.840568 59.942695) (xy 82.832386 59.957005) (xy 82.827728 59.973288) + ) + ) + (polygon + (pts + (xy 82.826817 59.844829) (xy 82.834082 59.876355) (xy 82.854705 59.90108) (xy 82.869007 59.909251) + (xy 82.885284 59.913899) (xy 82.896792 59.914804) (xy 82.928332 59.907539) (xy 82.953086 59.88691) + (xy 82.961268 59.87261) (xy 82.965923 59.856336) (xy 82.966829 59.844829) (xy 82.959565 59.81333) + (xy 82.938938 59.788605) (xy 82.924628 59.780423) (xy 82.908345 59.775764) (xy 82.896792 59.774853) + (xy 82.865265 59.782118) (xy 82.840541 59.802742) (xy 82.832369 59.817043) (xy 82.827721 59.83332) + ) + ) + ) + ) + (gr_text "this is pin one btw v" + (at 108.05125 72.375 180) + (layer "F.SilkS") + (uuid "9bb220f1-cbec-43d9-a37c-bd77ed6ffba6") + (effects + (font + (face "NType 82 Headline") + (size 1 1) + (thickness 0.1) + ) + (justify left bottom) + ) + (render_cache "this is pin one btw v" 180 + (polygon + (pts + (xy 107.643913 72.529368) (xy 107.613444 72.531301) (xy 107.585542 72.537019) (xy 107.561159 72.545969) + (xy 107.539184 72.558192) (xy 107.502809 72.591669) (xy 107.475491 72.638156) (xy 107.457883 72.699643) + (xy 107.452061 72.77184) (xy 107.452061 72.87143) (xy 107.508114 72.87143) (xy 107.508114 72.770436) + (xy 107.510056 72.72844) (xy 107.515829 72.692931) (xy 107.523961 72.667035) (xy 107.534917 72.645828) + (xy 107.547162 72.630632) (xy 107.56162 72.619042) (xy 107.595938 72.606477) (xy 107.615887 72.604961) + (xy 107.638291 72.606902) (xy 107.658653 72.612676) (xy 107.676038 72.621681) (xy 107.691313 72.634037) + (xy 107.715042 72.668545) (xy 107.729217 72.718089) (xy 107.732085 72.7592) (xy 107.732085 73.097233) + (xy 107.730148 73.115471) (xy 107.724405 73.13025) (xy 107.716235 73.140358) (xy 107.705237 73.147613) + (xy 107.676092 73.153286) (xy 107.508114 73.153286) (xy 107.508114 73.20934) (xy 107.732085 73.20934) + (xy 107.732085 73.452911) (xy 107.802061 73.452911) (xy 107.82447 73.312899) (xy 107.830315 73.288718) + (xy 107.839495 73.267812) (xy 107.851094 73.251101) (xy 107.865487 73.237235) (xy 107.90241 73.21791) + (xy 107.953106 73.209527) (xy 107.963078 73.20934) (xy 108.042884 73.20934) (xy 108.042884 73.153286) + (xy 107.92809 73.153286) (xy 107.909879 73.151349) (xy 107.895118 73.145604) (xy 107.885019 73.137428) + (xy 107.87777 73.126421) (xy 107.872097 73.097233) (xy 107.872097 72.764818) (xy 107.870186 72.726081) + (xy 107.864621 72.691284) (xy 107.855961 72.661129) (xy 107.844328 72.634436) (xy 107.830082 72.611258) + (xy 107.81337 72.59124) (xy 107.772375 72.559583) (xy 107.720731 72.538761) (xy 107.657491 72.529628) + ) + ) + (polygon + (pts + (xy 107.07153 72.545) (xy 107.07153 72.600992) (xy 107.112136 72.600992) (xy 107.130372 72.60293) + (xy 107.145148 72.608677) (xy 107.155243 72.616849) (xy 107.162484 72.627852) (xy 107.168128 72.656924) + (xy 107.168128 72.9549) (xy 107.150437 72.999978) (xy 107.130156 73.040038) (xy 107.110168 73.070678) + (xy 107.088205 73.096532) (xy 107.067259 73.11499) (xy 107.044806 73.129133) (xy 107.023208 73.13797) + (xy 107.000395 73.142832) (xy 106.984702 73.143761) (xy 106.959789 73.141839) (xy 106.938578 73.136198) + (xy 106.922048 73.127813) (xy 106.908368 73.116547) (xy 106.888777 73.085625) (xy 106.878276 73.039707) + (xy 106.87693 73.010832) (xy 106.87693 72.656924) (xy 106.878867 72.638718) (xy 106.88461 72.623971) + (xy 106.892781 72.613884) (xy 106.90378 72.606648) (xy 106.932923 72.600992) (xy 106.973528 72.600992) + (xy 106.973528 72.545) (xy 106.626337 72.545) (xy 106.626337 72.600992) (xy 106.680925 72.600992) + (xy 106.699162 72.60293) (xy 106.713937 72.608677) (xy 106.724032 72.616849) (xy 106.731274 72.627852) + (xy 106.736918 72.656924) (xy 106.736918 73.010832) (xy 106.738905 73.053947) (xy 106.744997 73.092463) + (xy 106.753718 73.121959) (xy 106.765777 73.147882) (xy 106.779609 73.168129) (xy 106.796348 73.185377) + (xy 106.815176 73.19903) (xy 106.836834 73.209852) (xy 106.890118 73.222974) (xy 106.925962 73.224972) + (xy 106.986541 73.217732) (xy 107.040478 73.196961) (xy 107.088054 73.163531) (xy 107.128025 73.118668) + (xy 107.156589 73.067127) (xy 107.158359 73.062611) (xy 107.168128 73.062611) (xy 107.168128 73.525879) + (xy 107.418722 73.525879) (xy 107.418722 73.469825) (xy 107.364133 73.469825) (xy 107.345948 73.467887) + (xy 107.331202 73.462139) (xy 107.321106 73.453956) (xy 107.313851 73.442934) (xy 107.308141 73.413527) + (xy 107.308141 72.656924) (xy 107.310078 72.638718) (xy 107.31582 72.623971) (xy 107.323992 72.613884) + (xy 107.334991 72.606648) (xy 107.364133 72.600992) (xy 107.418722 72.600992) (xy 107.418722 72.545) + ) + ) + (polygon + (pts + (xy 106.395344 73.333232) (xy 106.35976 73.340528) (xy 106.328992 73.361804) (xy 106.317119 73.376957) + (xy 106.308552 73.394326) (xy 106.302959 73.425617) (xy 106.310257 73.461235) (xy 106.331537 73.492029) + (xy 106.346686 73.503905) (xy 106.364055 73.512473) (xy 106.395344 73.518063) (xy 106.430903 73.510766) + (xy 106.461679 73.489477) (xy 106.473559 73.474316) (xy 106.482132 73.456933) (xy 106.487729 73.425617) + (xy 106.480433 73.390058) (xy 106.459146 73.359277) (xy 106.443987 73.347395) (xy 106.426611 73.338822) + ) + ) + (polygon + (pts + (xy 106.186761 72.545) (xy 106.186761 72.600992) (xy 106.269315 72.600992) (xy 106.287526 72.602929) + (xy 106.302286 72.608675) (xy 106.312385 72.61685) (xy 106.319635 72.627858) (xy 106.325307 72.657046) + (xy 106.325307 73.20934) (xy 106.594158 73.20934) (xy 106.594158 73.153286) (xy 106.521312 73.153286) + (xy 106.503102 73.151349) (xy 106.488341 73.145604) (xy 106.478242 73.137428) (xy 106.470992 73.126421) + (xy 106.46532 73.097233) (xy 106.46532 72.657046) (xy 106.467257 72.638807) (xy 106.472999 72.624029) + (xy 106.48117 72.61392) (xy 106.492167 72.606666) (xy 106.521312 72.600992) (xy 106.603927 72.600992) + (xy 106.603927 72.545) + ) + ) + (polygon + (pts + (xy 105.867047 72.529368) (xy 105.833617 72.53128) (xy 105.80232 72.536846) (xy 105.77302 72.545911) + (xy 105.746143 72.55818) (xy 105.699595 72.591829) (xy 105.664133 72.636164) (xy 105.641488 72.689151) + (xy 105.635504 72.718096) (xy 105.633314 72.748204) (xy 105.633306 72.750102) (xy 105.635237 72.782376) + (xy 105.640935 72.811006) (xy 105.64962 72.834861) (xy 105.661404 72.855926) (xy 105.693776 72.890518) + (xy 105.740762 72.91816) (xy 105.806902 72.93994) (xy 105.911865 72.965097) (xy 105.962338 72.979634) + (xy 105.999852 72.99718) (xy 106.016097 73.009879) (xy 106.028 73.024859) (xy 106.038617 73.058068) + (xy 106.039299 73.071221) (xy 106.037384 73.088701) (xy 106.031796 73.104904) (xy 106.009872 73.133404) + (xy 105.972977 73.155469) (xy 105.920965 73.16772) (xy 105.896478 73.168918) (xy 105.866787 73.167009) + (xy 105.839801 73.161466) (xy 105.815581 73.152619) (xy 105.793893 73.140717) (xy 105.756872 73.107687) + (xy 105.728106 73.061847) (xy 105.711647 73.01535) (xy 105.700473 72.974134) (xy 105.647289 72.974134) + (xy 105.647289 73.20934) (xy 105.700473 73.20934) (xy 105.700473 73.145226) (xy 105.710304 73.135457) + (xy 105.737601 73.164466) (xy 105.768698 73.189059) (xy 105.79428 73.203406) (xy 105.823132 73.214442) + (xy 105.852825 73.221273) (xy 105.886118 73.224656) (xy 105.900691 73.224972) (xy 105.940887 73.223053) + (xy 105.977866 73.217439) (xy 106.010788 73.208585) (xy 106.04042 73.196603) (xy 106.066033 73.182104) + (xy 106.088321 73.165006) (xy 106.106818 73.145933) (xy 106.121944 73.124719) (xy 106.141593 73.077043) + (xy 106.147071 73.030737) (xy 106.14516 73.001526) (xy 106.139595 72.974745) (xy 106.11857 72.928329) + (xy 106.084707 72.889832) (xy 106.037229 72.858798) (xy 105.974951 72.836272) (xy 105.970667 72.835221) + (xy 105.878282 72.812934) (xy 105.835318 72.800138) (xy 105.801403 72.785203) (xy 105.780847 72.771717) + (xy 105.765222 72.756375) (xy 105.755262 72.740988) (xy 105.748806 72.723774) (xy 105.745292 72.694232) + (xy 105.747246 72.67041) (xy 105.753107 72.649118) (xy 105.761934 72.631952) (xy 105.774057 72.617236) + (xy 105.806931 72.596255) (xy 105.853793 72.586005) (xy 105.87126 72.585361) (xy 105.904597 72.587294) + (xy 105.936034 72.593011) (xy 105.964754 72.602163) (xy 105.991177 72.614712) (xy 106.014531 72.630128) + (xy 106.035256 72.648561) (xy 106.052805 72.669448) (xy 106.067414 72.693025) (xy 106.07878 72.718917) + (xy 106.086866 72.747247) (xy 106.08827 72.754255) (xy 106.096696 72.799745) (xy 106.14988 72.799745) + (xy 106.14988 72.545) (xy 106.096696 72.545) (xy 106.096696 72.625844) (xy 106.086865 72.635614) + (xy 106.066223 72.608981) (xy 106.043693 72.586507) (xy 106.02042 72.568844) (xy 105.995231 72.554637) + (xy 105.938277 72.535912) + ) + ) + (polygon + (pts + (xy 105.166314 73.333232) (xy 105.13073 73.340528) (xy 105.099962 73.361804) (xy 105.088089 73.376957) + (xy 105.079522 73.394326) (xy 105.073929 73.425617) (xy 105.081227 73.461235) (xy 105.102507 73.492029) + (xy 105.117656 73.503905) (xy 105.135025 73.512473) (xy 105.166314 73.518063) (xy 105.201873 73.510766) + (xy 105.232649 73.489477) (xy 105.244529 73.474316) (xy 105.253102 73.456933) (xy 105.258699 73.425617) + (xy 105.251403 73.390058) (xy 105.230116 73.359277) (xy 105.214957 73.347395) (xy 105.197581 73.338822) + ) + ) + (polygon + (pts + (xy 104.957731 72.545) (xy 104.957731 72.600992) (xy 105.040285 72.600992) (xy 105.058496 72.602929) + (xy 105.073256 72.608675) (xy 105.083355 72.61685) (xy 105.090605 72.627858) (xy 105.096277 72.657046) + (xy 105.096277 73.20934) (xy 105.365128 73.20934) (xy 105.365128 73.153286) (xy 105.292282 73.153286) + (xy 105.274072 73.151349) (xy 105.259311 73.145604) (xy 105.249212 73.137428) (xy 105.241962 73.126421) + (xy 105.23629 73.097233) (xy 105.23629 72.657046) (xy 105.238227 72.638807) (xy 105.243969 72.624029) + (xy 105.25214 72.61392) (xy 105.263137 72.606666) (xy 105.292282 72.600992) (xy 105.374897 72.600992) + (xy 105.374897 72.545) + ) + ) + (polygon + (pts + (xy 104.638017 72.529368) (xy 104.604587 72.53128) (xy 104.57329 72.536846) (xy 104.54399 72.545911) + (xy 104.517113 72.55818) (xy 104.470565 72.591829) (xy 104.435103 72.636164) (xy 104.412458 72.689151) + (xy 104.406474 72.718096) (xy 104.404284 72.748204) (xy 104.404276 72.750102) (xy 104.406207 72.782376) + (xy 104.411905 72.811006) (xy 104.42059 72.834861) (xy 104.432374 72.855926) (xy 104.464746 72.890518) + (xy 104.511732 72.91816) (xy 104.577872 72.93994) (xy 104.682835 72.965097) (xy 104.733308 72.979634) + (xy 104.770822 72.99718) (xy 104.787067 73.009879) (xy 104.79897 73.024859) (xy 104.809587 73.058068) + (xy 104.810269 73.071221) (xy 104.808354 73.088701) (xy 104.802766 73.104904) (xy 104.780842 73.133404) + (xy 104.743947 73.155469) (xy 104.691935 73.16772) (xy 104.667448 73.168918) (xy 104.637757 73.167009) + (xy 104.610771 73.161466) (xy 104.586551 73.152619) (xy 104.564863 73.140717) (xy 104.527842 73.107687) + (xy 104.499076 73.061847) (xy 104.482617 73.01535) (xy 104.471443 72.974134) (xy 104.418259 72.974134) + (xy 104.418259 73.20934) (xy 104.471443 73.20934) (xy 104.471443 73.145226) (xy 104.481274 73.135457) + (xy 104.508571 73.164466) (xy 104.539668 73.189059) (xy 104.56525 73.203406) (xy 104.594102 73.214442) + (xy 104.623795 73.221273) (xy 104.657088 73.224656) (xy 104.671661 73.224972) (xy 104.711857 73.223053) + (xy 104.748836 73.217439) (xy 104.781758 73.208585) (xy 104.81139 73.196603) (xy 104.837002 73.182104) + (xy 104.859291 73.165006) (xy 104.877788 73.145933) (xy 104.892914 73.124719) (xy 104.912563 73.077043) + (xy 104.918041 73.030737) (xy 104.91613 73.001526) (xy 104.910565 72.974745) (xy 104.88954 72.928329) + (xy 104.855677 72.889832) (xy 104.808199 72.858798) (xy 104.745921 72.836272) (xy 104.741637 72.835221) + (xy 104.649252 72.812934) (xy 104.606288 72.800138) (xy 104.572373 72.785203) (xy 104.551817 72.771717) + (xy 104.536192 72.756375) (xy 104.526232 72.740988) (xy 104.519776 72.723774) (xy 104.516262 72.694232) + (xy 104.518216 72.67041) (xy 104.524077 72.649118) (xy 104.532904 72.631952) (xy 104.545027 72.617236) + (xy 104.577901 72.596255) (xy 104.624763 72.586005) (xy 104.64223 72.585361) (xy 104.675567 72.587294) + (xy 104.707004 72.593011) (xy 104.735724 72.602163) (xy 104.762147 72.614712) (xy 104.785501 72.630128) + (xy 104.806226 72.648561) (xy 104.823775 72.669448) (xy 104.838384 72.693025) (xy 104.84975 72.718917) + (xy 104.857836 72.747247) (xy 104.85924 72.754255) (xy 104.867666 72.799745) (xy 104.92085 72.799745) + (xy 104.92085 72.545) (xy 104.867666 72.545) (xy 104.867666 72.625844) (xy 104.857835 72.635614) + (xy 104.837193 72.608981) (xy 104.814663 72.586507) (xy 104.79139 72.568844) (xy 104.766201 72.554637) + (xy 104.709247 72.535912) + ) + ) + (polygon + (pts + (xy 104.145867 72.335256) (xy 104.091279 72.335256) (xy 104.062123 72.340953) (xy 104.051132 72.348229) + (xy 104.042966 72.358367) (xy 104.037223 72.373194) (xy 104.035286 72.391493) (xy 104.035286 73.097355) + (xy 104.040931 73.126426) (xy 104.048172 73.137429) (xy 104.058267 73.145601) (xy 104.073043 73.151349) + (xy 104.091279 73.153286) (xy 104.145867 73.153286) (xy 104.145867 73.20934) (xy 103.903701 73.20934) + (xy 103.903701 73.103339) (xy 103.89387 73.103339) (xy 103.885192 73.120966) (xy 103.854019 73.165557) + (xy 103.815158 73.197265) (xy 103.791887 73.208862) (xy 103.765552 73.217504) (xy 103.734992 73.223061) + (xy 103.700674 73.224972) (xy 103.638565 73.217876) (xy 103.60784 73.208471) (xy 103.579219 73.195508) + (xy 103.551314 73.178251) (xy 103.525844 73.157646) (xy 103.501457 73.132394) (xy 103.479937 73.104097) + (xy 103.460379 73.071332) (xy 103.444144 73.036058) (xy 103.430935 72.997484) (xy 103.421409 72.957223) + (xy 103.413688 72.873506) (xy 103.413901 72.860574) (xy 103.415066 72.846456) (xy 103.570492 72.846456) + (xy 103.570492 72.889687) (xy 103.575296 72.983251) (xy 103.589804 73.056203) (xy 103.611811 73.106431) + (xy 103.640759 73.140309) (xy 103.658405 73.152384) (xy 103.678355 73.161225) (xy 103.702126 73.166979) + (xy 103.728701 73.168918) (xy 103.757326 73.166674) (xy 103.780031 73.161053) (xy 103.800485 73.152098) + (xy 103.819486 73.13929) (xy 103.836166 73.123029) (xy 103.852015 73.101085) (xy 103.865182 73.075131) + (xy 103.877122 73.040482) (xy 103.885766 73.000874) (xy 103.89188 72.948411) (xy 103.89387 72.889687) + (xy 103.89387 72.846456) (xy 103.889946 72.775522) (xy 103.874878 72.704707) (xy 103.851051 72.653912) + (xy 103.819612 72.618913) (xy 103.800669 72.60639) (xy 103.779701 72.597314) (xy 103.755296 72.591465) + (xy 103.728701 72.589513) (xy 103.705411 72.591011) (xy 103.662336 72.60402) (xy 103.643586 72.61578) + (xy 103.626997 72.630986) (xy 103.611473 72.651309) (xy 103.598455 72.675639) (xy 103.586843 72.707611) + (xy 103.578341 72.744568) (xy 103.57245 72.79235) (xy 103.570492 72.846456) (xy 103.415066 72.846456) + (xy 103.417191 72.820719) (xy 103.424378 72.781273) (xy 103.449255 72.707472) (xy 103.48563 72.644354) + (xy 103.530522 72.59452) (xy 103.581819 72.558678) (xy 103.638546 72.536852) (xy 103.668794 72.53128) + (xy 103.700674 72.529368) (xy 103.742415 72.532693) (xy 103.77159 72.539696) (xy 103.797295 72.549992) + (xy 103.822726 72.565117) (xy 103.844303 72.583079) (xy 103.867545 72.609883) (xy 103.885505 72.638483) + (xy 103.895274 72.638483) (xy 103.895274 72.391493) (xy 103.889568 72.362137) (xy 103.882312 72.35112) + (xy 103.872213 72.342939) (xy 103.857467 72.337193) (xy 103.839282 72.335256) (xy 103.742684 72.335256) + (xy 103.742684 72.279263) (xy 104.145867 72.279263) + ) + ) + (polygon + (pts + (xy 103.173292 73.333232) (xy 103.137708 73.340528) (xy 103.10694 73.361804) (xy 103.095067 73.376957) + (xy 103.0865 73.394326) (xy 103.080908 73.425617) (xy 103.088205 73.461235) (xy 103.109486 73.492029) + (xy 103.124634 73.503905) (xy 103.142003 73.512473) (xy 103.173292 73.518063) (xy 103.208851 73.510766) + (xy 103.239628 73.489477) (xy 103.251507 73.474316) (xy 103.260081 73.456933) (xy 103.265677 73.425617) + (xy 103.258381 73.390058) (xy 103.237094 73.359277) (xy 103.221936 73.347395) (xy 103.204559 73.338822) + ) + ) + (polygon + (pts + (xy 102.964709 72.545) (xy 102.964709 72.600992) (xy 103.047263 72.600992) (xy 103.065474 72.602929) + (xy 103.080235 72.608675) (xy 103.090334 72.61685) (xy 103.097583 72.627858) (xy 103.103256 72.657046) + (xy 103.103256 73.20934) (xy 103.372106 73.20934) (xy 103.372106 73.153286) (xy 103.299261 73.153286) + (xy 103.28105 73.151349) (xy 103.266289 73.145604) (xy 103.25619 73.137428) (xy 103.248941 73.126421) + (xy 103.243268 73.097233) (xy 103.243268 72.657046) (xy 103.245205 72.638807) (xy 103.250948 72.624029) + (xy 103.259118 72.61392) (xy 103.270116 72.606666) (xy 103.299261 72.600992) (xy 103.381876 72.600992) + (xy 103.381876 72.545) + ) + ) + (polygon + (pts + (xy 102.596024 72.545) (xy 102.596024 72.600992) (xy 102.63663 72.600992) (xy 102.654841 72.602929) + (xy 102.669601 72.608675) (xy 102.6797 72.61685) (xy 102.68695 72.627858) (xy 102.692622 72.657046) + (xy 102.692622 72.955633) (xy 102.673496 73.004391) (xy 102.65182 73.047169) (xy 102.631985 73.077226) + (xy 102.610179 73.102256) (xy 102.589941 73.119288) (xy 102.568113 73.132056) (xy 102.547041 73.139674) + (xy 102.524569 73.143403) (xy 102.514814 73.143761) (xy 102.489884 73.141839) (xy 102.468665 73.136198) + (xy 102.452136 73.127815) (xy 102.43846 73.116553) (xy 102.41888 73.085642) (xy 102.408388 73.039732) + (xy 102.407042 73.010832) (xy 102.407042 72.656924) (xy 102.408978 72.638718) (xy 102.414721 72.623971) + (xy 102.422893 72.613884) (xy 102.433892 72.606648) (xy 102.463034 72.600992) (xy 102.50364 72.600992) + (xy 102.50364 72.545) (xy 102.156448 72.545) (xy 102.156448 72.600992) (xy 102.211037 72.600992) + (xy 102.229273 72.60293) (xy 102.244049 72.608677) (xy 102.254144 72.616849) (xy 102.261385 72.627852) + (xy 102.267029 72.656924) (xy 102.267029 73.010832) (xy 102.269002 73.052342) (xy 102.274996 73.089533) + (xy 102.283725 73.118743) (xy 102.295758 73.144499) (xy 102.309726 73.165001) (xy 102.326584 73.182549) + (xy 102.367549 73.207961) (xy 102.421318 73.222204) (xy 102.464439 73.224972) (xy 102.519337 73.217678) + (xy 102.569433 73.19644) (xy 102.615073 73.161437) (xy 102.655032 73.11296) (xy 102.685631 73.054448) + (xy 102.692622 73.034645) (xy 102.702453 73.034645) (xy 102.702453 73.20934) (xy 102.943216 73.20934) + (xy 102.943216 73.153286) (xy 102.888627 73.153286) (xy 102.870417 73.151349) (xy 102.855656 73.145604) + (xy 102.845557 73.137428) (xy 102.838307 73.126421) (xy 102.832635 73.097233) (xy 102.832635 72.657046) + (xy 102.834572 72.638807) (xy 102.840314 72.624029) (xy 102.848485 72.61392) (xy 102.859483 72.606666) + (xy 102.888627 72.600992) (xy 102.943216 72.600992) (xy 102.943216 72.545) + ) + ) + (polygon + (pts + (xy 101.602628 72.52965) (xy 101.638448 72.533079) (xy 101.672447 72.54024) (xy 101.705183 72.551193) + (xy 101.735811 72.565608) (xy 101.764961 72.583787) (xy 101.791664 72.605154) (xy 101.816416 72.630164) + (xy 101.838343 72.658031) (xy 101.857672 72.689138) (xy 101.873803 72.722683) (xy 101.886704 72.758729) + (xy 101.89608 72.796703) (xy 101.901786 72.836223) (xy 101.903718 72.877109) (xy 101.902995 72.902227) + (xy 101.898736 72.942367) (xy 101.890776 72.98097) (xy 101.8647 73.051623) (xy 101.826712 73.111841) + (xy 101.778785 73.1601) (xy 101.722523 73.195513) (xy 101.658976 73.217417) (xy 101.624709 73.22305) + (xy 101.588706 73.224972) (xy 101.57475 73.224688) (xy 101.538937 73.221255) (xy 101.504945 73.21409) + (xy 101.472215 73.203132) (xy 101.441592 73.188713) (xy 101.412444 73.170527) (xy 101.385745 73.149154) + (xy 101.360994 73.124136) (xy 101.339068 73.09626) (xy 101.319739 73.065142) (xy 101.303609 73.031586) + (xy 101.290708 72.995527) (xy 101.281332 72.95754) (xy 101.275625 72.918007) (xy 101.273694 72.877109) + (xy 101.274414 72.852056) (xy 101.274716 72.849204) (xy 101.430498 72.849204) (xy 101.430498 72.905075) + (xy 101.43277 72.974658) (xy 101.444403 73.053919) (xy 101.463651 73.105308) (xy 101.490351 73.139067) + (xy 101.508075 73.151516) (xy 101.528262 73.160407) (xy 101.556532 73.166877) (xy 101.588706 73.168918) + (xy 101.616188 73.167466) (xy 101.660054 73.156167) (xy 101.677789 73.146251) (xy 101.693391 73.133112) + (xy 101.707737 73.115282) (xy 101.71976 73.093244) (xy 101.730794 73.062298) (xy 101.738902 73.02498) + (xy 101.744936 72.97043) (xy 101.746914 72.905075) (xy 101.746914 72.849204) (xy 101.74389 72.77453) + (xy 101.731049 72.699079) (xy 101.710394 72.648465) (xy 101.682271 72.614616) (xy 101.664299 72.602299) + (xy 101.643961 72.593419) (xy 101.617929 72.587345) (xy 101.588706 72.585361) (xy 101.563306 72.586834) + (xy 101.519685 72.598936) (xy 101.501467 72.609687) (xy 101.485442 72.623739) (xy 101.470565 72.642724) + (xy 101.458126 72.665822) (xy 101.446798 72.697527) (xy 101.438509 72.735031) (xy 101.432476 72.787657) + (xy 101.430498 72.849204) (xy 101.274716 72.849204) (xy 101.278667 72.811927) (xy 101.286622 72.773334) + (xy 101.31269 72.702697) (xy 101.350673 72.64249) (xy 101.398599 72.594237) (xy 101.454866 72.558826) + (xy 101.518423 72.536922) (xy 101.552696 72.531289) (xy 101.588706 72.529368) + ) + ) + (polygon + (pts + (xy 100.922472 72.545) (xy 100.922472 72.600992) (xy 100.963078 72.600992) (xy 100.981289 72.602929) + (xy 100.996049 72.608675) (xy 101.006148 72.61685) (xy 101.013398 72.627858) (xy 101.019071 72.657046) + (xy 101.019071 72.955633) (xy 100.999944 73.004391) (xy 100.978268 73.047169) (xy 100.958433 73.077226) + (xy 100.936627 73.102256) (xy 100.916389 73.119288) (xy 100.894561 73.132056) (xy 100.873489 73.139674) + (xy 100.851017 73.143403) (xy 100.841262 73.143761) (xy 100.816332 73.141839) (xy 100.795113 73.136198) + (xy 100.778584 73.127815) (xy 100.764908 73.116553) (xy 100.745328 73.085642) (xy 100.734836 73.039732) + (xy 100.73349 73.010832) (xy 100.73349 72.656924) (xy 100.735426 72.638718) (xy 100.741169 72.623971) + (xy 100.749341 72.613884) (xy 100.76034 72.606648) (xy 100.789482 72.600992) (xy 100.830088 72.600992) + (xy 100.830088 72.545) (xy 100.482896 72.545) (xy 100.482896 72.600992) (xy 100.537485 72.600992) + (xy 100.555721 72.60293) (xy 100.570497 72.608677) (xy 100.580592 72.616849) (xy 100.587833 72.627852) + (xy 100.593477 72.656924) (xy 100.593477 73.010832) (xy 100.59545 73.052342) (xy 100.601444 73.089533) + (xy 100.610173 73.118743) (xy 100.622206 73.144499) (xy 100.636174 73.165001) (xy 100.653032 73.182549) + (xy 100.693997 73.207961) (xy 100.747766 73.222204) (xy 100.790887 73.224972) (xy 100.845785 73.217678) + (xy 100.895881 73.19644) (xy 100.941521 73.161437) (xy 100.98148 73.11296) (xy 101.012079 73.054448) + (xy 101.019071 73.034645) (xy 101.028901 73.034645) (xy 101.028901 73.20934) (xy 101.269664 73.20934) + (xy 101.269664 73.153286) (xy 101.215075 73.153286) (xy 101.196865 73.151349) (xy 101.182104 73.145604) + (xy 101.172005 73.137428) (xy 101.164755 73.126421) (xy 101.159083 73.097233) (xy 101.159083 72.657046) + (xy 101.16102 72.638807) (xy 101.166762 72.624029) (xy 101.174933 72.61392) (xy 101.185931 72.606666) + (xy 101.215075 72.600992) (xy 101.269664 72.600992) (xy 101.269664 72.545) + ) + ) + (polygon + (pts + (xy 100.182038 72.529673) (xy 100.218342 72.533082) (xy 100.252776 72.540156) (xy 100.28532 72.550783) + (xy 100.315755 72.564802) (xy 100.344237 72.582252) (xy 100.370334 72.602859) (xy 100.394268 72.626852) + (xy 100.415499 72.653782) (xy 100.434193 72.68402) (xy 100.449834 72.716962) (xy 100.462457 72.753002) + (xy 100.471664 72.791481) (xy 100.477363 72.832679) (xy 100.479294 72.87601) (xy 100.478913 72.894331) + (xy 100.475246 72.935257) (xy 100.467826 72.974649) (xy 100.442576 73.04733) (xy 100.405302 73.109481) + (xy 100.358415 73.159146) (xy 100.304046 73.195296) (xy 100.243706 73.217417) (xy 100.211688 73.22305) + (xy 100.178265 73.224972) (xy 100.120166 73.219846) (xy 100.058515 73.200874) (xy 100.03097 73.186392) + (xy 100.005769 73.16874) (xy 99.982694 73.147711) (xy 99.96223 73.123662) (xy 99.944077 73.096017) + (xy 99.928877 73.06546) (xy 99.916438 73.031137) (xy 99.907353 72.994015) (xy 99.902215 72.957281) + (xy 100.045274 72.957281) (xy 100.045484 72.976088) (xy 100.053017 73.055454) (xy 100.069115 73.106677) + (xy 100.092809 73.140059) (xy 100.108501 73.152134) (xy 100.126672 73.160871) (xy 100.150713 73.166935) + (xy 100.178265 73.168918) (xy 100.184687 73.168835) (xy 100.230479 73.161657) (xy 100.264413 73.142962) + (xy 100.278963 73.127777) (xy 100.291292 73.108559) (xy 100.302895 73.080899) (xy 100.311735 73.04703) + (xy 100.319038 72.995736) (xy 100.32249 72.933407) (xy 100.045274 72.933407) (xy 100.045274 72.957281) + (xy 99.902215 72.957281) (xy 99.901638 72.953156) (xy 99.899706 72.909654) (xy 99.899706 72.873262) + (xy 100.32249 72.873262) (xy 100.32249 72.848227) (xy 100.319158 72.766213) (xy 100.306633 72.69406) + (xy 100.286541 72.646272) (xy 100.258453 72.614056) (xy 100.239845 72.602088) (xy 100.21843 72.593419) + (xy 100.189926 72.587345) (xy 100.15726 72.585361) (xy 100.101374 72.591505) (xy 100.076335 72.599532) + (xy 100.054327 72.610611) (xy 100.033795 72.625714) (xy 100.016265 72.64388) (xy 99.999098 72.668901) + (xy 99.98531 72.697444) (xy 99.971039 72.741868) (xy 99.961255 72.791196) (xy 99.905262 72.791196) + (xy 99.906734 72.778056) (xy 99.923412 72.70027) (xy 99.950426 72.639699) (xy 99.967534 72.61484) + (xy 99.987 72.593285) (xy 100.009273 72.574579) (xy 100.03383 72.559201) (xy 100.062209 72.546473) + (xy 100.092929 72.53732) (xy 100.128769 72.531339) (xy 100.16709 72.529368) + ) + ) + (polygon + (pts + (xy 99.238443 72.530547) (xy 99.266821 72.535428) (xy 99.29263 72.543799) (xy 99.316832 72.55592) + (xy 99.338211 72.571131) (xy 99.357829 72.59028) (xy 99.37423 72.612069) (xy 99.388071 72.637524) + (xy 99.398275 72.664923) (xy 99.408106 72.664923) (xy 99.468251 72.545) (xy 99.538287 72.545) (xy 99.538287 73.413527) + (xy 99.543998 73.442934) (xy 99.551253 73.453956) (xy 99.561349 73.462139) (xy 99.576095 73.467887) + (xy 99.59428 73.469825) (xy 99.648868 73.469825) (xy 99.648868 73.525879) (xy 99.398275 73.525879) + (xy 99.398275 73.115856) (xy 99.388505 73.115856) (xy 99.383984 73.124728) (xy 99.353623 73.165862) + (xy 99.312955 73.197508) (xy 99.263102 73.217747) (xy 99.234821 73.223092) (xy 99.203674 73.224972) + (xy 99.14446 73.218213) (xy 99.113589 73.208801) (xy 99.084691 73.195738) (xy 99.056185 73.178178) + (xy 99.030065 73.157206) (xy 99.004953 73.13153) (xy 98.982733 73.102853) (xy 98.962658 73.070078) + (xy 98.945971 73.035019) (xy 98.932603 72.997602) (xy 98.922956 72.958901) (xy 98.915285 72.881322) + (xy 98.915982 72.856165) (xy 99.072089 72.856165) (xy 99.072089 72.898053) (xy 99.07684 72.981563) + (xy 99.092272 73.053852) (xy 99.115811 73.105002) (xy 99.146378 73.13984) (xy 99.164627 73.152195) + (xy 99.184949 73.161199) (xy 99.208535 73.166976) (xy 99.234449 73.168918) (xy 99.261333 73.166823) + (xy 99.303982 73.152374) (xy 99.322881 73.139579) (xy 99.339579 73.123261) (xy 99.355368 73.101425) + (xy 99.368571 73.075537) (xy 99.38037 73.04168) (xy 99.388975 73.002939) (xy 99.394907 72.953438) + (xy 99.396871 72.898053) (xy 99.396871 72.856165) (xy 99.392116 72.772657) (xy 99.376681 72.700399) + (xy 99.353137 72.649267) (xy 99.322561 72.614436) (xy 99.304305 72.602082) (xy 99.283974 72.593079) + (xy 99.260377 72.587302) (xy 99.234449 72.585361) (xy 99.207617 72.587449) (xy 99.164976 72.60189) + (xy 99.146077 72.614682) (xy 99.12938 72.630999) (xy 99.113591 72.652833) (xy 99.100388 72.67872) + (xy 99.088589 72.712574) (xy 99.079984 72.751311) (xy 99.074052 72.800798) (xy 99.072089 72.856165) + (xy 98.915982 72.856165) (xy 98.915992 72.855786) (xy 98.928021 72.774479) (xy 98.953315 72.701934) + (xy 98.989446 72.641146) (xy 99.034376 72.593248) (xy 99.08695 72.558432) (xy 99.146946 72.536874) + (xy 99.179848 72.531283) (xy 99.214849 72.529368) + ) + ) + (polygon + (pts + (xy 98.560034 72.529368) (xy 98.529564 72.531301) (xy 98.501662 72.537019) (xy 98.477279 72.545969) + (xy 98.455304 72.558192) (xy 98.418929 72.591669) (xy 98.391611 72.638156) (xy 98.374003 72.699643) + (xy 98.368181 72.77184) (xy 98.368181 72.87143) (xy 98.424234 72.87143) (xy 98.424234 72.770436) + (xy 98.426176 72.72844) (xy 98.431949 72.692931) (xy 98.440081 72.667035) (xy 98.451037 72.645828) + (xy 98.463283 72.630632) (xy 98.47774 72.619042) (xy 98.512058 72.606477) (xy 98.532007 72.604961) + (xy 98.554411 72.606902) (xy 98.574773 72.612676) (xy 98.592158 72.621681) (xy 98.607433 72.634037) + (xy 98.631162 72.668545) (xy 98.645337 72.718089) (xy 98.648205 72.7592) (xy 98.648205 73.097233) + (xy 98.646268 73.115471) (xy 98.640526 73.13025) (xy 98.632355 73.140358) (xy 98.621357 73.147613) + (xy 98.592213 73.153286) (xy 98.424234 73.153286) (xy 98.424234 73.20934) (xy 98.648205 73.20934) + (xy 98.648205 73.452911) (xy 98.718181 73.452911) (xy 98.74059 73.312899) (xy 98.746435 73.288718) + (xy 98.755615 73.267812) (xy 98.767214 73.251101) (xy 98.781607 73.237235) (xy 98.81853 73.21791) + (xy 98.869226 73.209527) (xy 98.879198 73.20934) (xy 98.959004 73.20934) (xy 98.959004 73.153286) + (xy 98.84421 73.153286) (xy 98.825999 73.151349) (xy 98.811238 73.145604) (xy 98.801139 73.137428) + (xy 98.79389 73.126421) (xy 98.788217 73.097233) (xy 98.788217 72.764818) (xy 98.786306 72.726081) + (xy 98.780741 72.691284) (xy 98.772081 72.661129) (xy 98.760448 72.634436) (xy 98.746202 72.611258) + (xy 98.72949 72.59124) (xy 98.688495 72.559583) (xy 98.636851 72.538761) (xy 98.573611 72.529628) + ) + ) + (polygon + (pts + (xy 97.761359 73.20934) (xy 97.761359 73.153286) (xy 97.723563 73.153286) (xy 97.706252 73.151383) + (xy 97.692077 73.145875) (xy 97.682136 73.137886) (xy 97.675468 73.127339) (xy 97.672957 73.100606) + (xy 97.674592 73.093019) (xy 97.758612 72.761948) (xy 97.765573 72.761948) (xy 97.897158 73.20934) + (xy 97.953212 73.20934) (xy 98.076372 72.761948) (xy 98.083394 72.761948) (xy 98.161796 73.091615) + (xy 98.164004 73.11061) (xy 98.161606 73.126542) (xy 98.155967 73.137395) (xy 98.147017 73.145596) + (xy 98.120368 73.153162) (xy 98.115573 73.153286) (xy 98.089011 73.153286) (xy 98.089011 73.20934) + (xy 98.392788 73.20934) (xy 98.392788 73.153286) (xy 98.364761 73.153286) (xy 98.346383 73.151343) + (xy 98.330935 73.145553) (xy 98.319438 73.137004) (xy 98.310366 73.125375) (xy 98.301808 73.104255) + (xy 98.157582 72.545) (xy 98.081989 72.545) (xy 97.967195 72.966868) (xy 97.958769 72.966868) (xy 97.835609 72.545) + (xy 97.760016 72.545) (xy 97.621408 73.10285) (xy 97.614974 73.121287) (xy 97.605618 73.135352) + (xy 97.594877 73.144326) (xy 97.581837 73.150152) (xy 97.558394 73.153286) (xy 97.516384 73.153286) + (xy 97.516384 73.20934) + ) + ) + (polygon + (pts + (xy 95.981562 73.20934) (xy 95.981562 73.153286) (xy 95.9354 73.153286) (xy 95.917725 73.15137) + (xy 95.9038 73.145773) (xy 95.894904 73.138002) (xy 95.889339 73.12772) (xy 95.888858 73.100996) + (xy 95.891986 73.090211) (xy 96.008184 72.752423) (xy 96.018015 72.752423) (xy 96.142579 73.090211) + (xy 96.146877 73.107937) (xy 96.146451 73.123051) (xy 96.142307 73.134166) (xy 96.134821 73.142884) + (xy 96.110826 73.152505) (xy 96.099165 73.153286) (xy 96.045981 73.153286) (xy 96.045981 73.20934) + (xy 96.39879 73.20934) (xy 96.39879 73.153286) (xy 96.372167 73.153286) (xy 96.34994 73.151289) + (xy 96.33111 73.145124) (xy 96.317593 73.136383) (xy 96.306276 73.124265) (xy 96.292361 73.097233) + (xy 96.087991 72.545) (xy 96.020763 72.545) (xy 95.830375 73.097233) (xy 95.821183 73.117178) (xy 95.809399 73.13251) + (xy 95.796758 73.142366) (xy 95.781865 73.148991) (xy 95.750569 73.153286) (xy 95.724008 73.153286) + (xy 95.724008 73.20934) + ) + ) + ) + ) + (gr_text "私はミク、ミク (うーいーう)\n私はミク、ミク (うーいーう)\n私はミク、ミク (うーいーう)\n私はミク、ミク (うーいーう)" + (at 212.55125 174.425 0) + (layer "F.SilkS") + (uuid "9f71d5ac-8bd5-4c9a-8c5a-cca15f4b6bc4") + (effects + (font + (size 1.5 1.5) + (thickness 0.25) + (bold yes) + ) + ) + ) + (gr_text "67 Percent" + (at 61.05125 76.825 0) + (layer "F.SilkS") + (uuid "e2314702-b815-4387-b4ab-3770eda873e9") + (effects + (font + (face "Ndot 57") + (size 2.5 2.5) + (thickness 0.3) + (bold yes) + ) + (justify left bottom) + ) + (render_cache "67 Percent" 0 + (polygon + (pts + (xy 62.106073 74.299511) (xy 62.185427 74.281362) (xy 62.24889 74.229525) (xy 62.270332 74.193498) + (xy 62.282959 74.152535) (xy 62.285897 74.119687) (xy 62.267748 74.040334) (xy 62.215911 73.976871) + (xy 62.179884 73.955428) (xy 62.138921 73.942801) (xy 62.106073 73.939863) (xy 62.02669 73.958012) + (xy 61.963151 74.009863) (xy 61.941683 74.045886) (xy 61.929039 74.086844) (xy 61.926097 74.119687) + (xy 61.944242 74.198972) (xy 61.996089 74.262434) (xy 62.032136 74.283902) (xy 62.073115 74.296554) + ) + ) + (polygon + (pts + (xy 61.226188 75.868466) (xy 61.244337 75.948583) (xy 61.296134 76.012675) (xy 61.332037 76.034309) + (xy 61.372852 76.047093) (xy 61.406012 76.050122) (xy 61.484988 76.03197) (xy 61.548439 75.980014) + (xy 61.570041 75.943788) (xy 61.58287 75.902581) (xy 61.585989 75.868466) (xy 61.567843 75.788418) + (xy 61.516037 75.724327) (xy 61.480113 75.702668) (xy 61.439283 75.689858) (xy 61.406012 75.68681) + (xy 61.327067 75.704962) (xy 61.263691 75.756904) (xy 61.242114 75.793134) (xy 61.229302 75.834347) + ) + ) + (polygon + (pts + (xy 61.226188 75.516756) (xy 61.244337 75.59611) (xy 61.296175 75.659573) (xy 61.332201 75.681015) + (xy 61.373164 75.693642) (xy 61.406012 75.69658) (xy 61.485396 75.678431) (xy 61.548935 75.62658) + (xy 61.570402 75.590557) (xy 61.583046 75.5496) (xy 61.585989 75.516756) (xy 61.567843 75.437471) + (xy 61.515997 75.374009) (xy 61.479949 75.352542) (xy 61.43897 75.339889) (xy 61.406012 75.336933) + (xy 61.326659 75.355081) (xy 61.263196 75.406919) (xy 61.241753 75.442945) (xy 61.229126 75.483909) + ) + ) + (polygon + (pts + (xy 61.231073 75.167336) (xy 61.245373 75.244817) (xy 61.293785 75.307607) (xy 61.328765 75.329549) + (xy 61.368901 75.342943) (xy 61.406012 75.346702) (xy 61.485465 75.328558) (xy 61.549032 75.276733) + (xy 61.570478 75.240757) (xy 61.583086 75.199867) (xy 61.585989 75.167336) (xy 61.567843 75.091705) + (xy 61.515159 75.029249) (xy 61.478446 75.008033) (xy 61.436717 74.99572) (xy 61.406012 74.993161) + (xy 61.326841 75.011306) (xy 61.264448 75.062874) (xy 61.244129 75.098281) (xy 61.232804 75.138498) + (xy 61.231073 75.173137) + ) + ) + (polygon + (pts + (xy 61.226188 74.822191) (xy 61.244337 74.901993) (xy 61.29612 74.965723) (xy 61.332071 74.987244) + (xy 61.372946 74.999941) (xy 61.406012 75.00293) (xy 61.485259 74.984774) (xy 61.548741 74.93287) + (xy 61.57025 74.896753) (xy 61.582968 74.855661) (xy 61.585989 74.822191) (xy 61.567843 74.741191) + (xy 61.516371 74.677278) (xy 61.480623 74.655709) (xy 61.439983 74.642914) (xy 61.406012 74.639772) + (xy 61.32659 74.657913) (xy 61.263085 74.709715) (xy 61.241661 74.745681) (xy 61.229077 74.786551) + (xy 61.226188 74.818985) + ) + ) + (polygon + (pts + (xy 61.576219 76.220176) (xy 61.594368 76.299529) (xy 61.646205 76.362992) (xy 61.682232 76.384435) + (xy 61.723195 76.397062) (xy 61.756043 76.4) (xy 61.835396 76.381851) (xy 61.898859 76.330013) + (xy 61.920302 76.293987) (xy 61.932929 76.253023) (xy 61.935867 76.220176) (xy 61.917718 76.140822) + (xy 61.86588 76.077359) (xy 61.829854 76.055917) (xy 61.788891 76.04329) (xy 61.756043 76.040352) + (xy 61.676689 76.058501) (xy 61.613226 76.110338) (xy 61.591784 76.146365) (xy 61.579157 76.187328) + ) + ) + (polygon + (pts + (xy 61.581104 75.167489) (xy 61.595402 75.244872) (xy 61.643831 75.307632) (xy 61.678827 75.329567) + (xy 61.718982 75.342954) (xy 61.756043 75.346702) (xy 61.835465 75.328561) (xy 61.89897 75.276759) + (xy 61.920394 75.240793) (xy 61.932978 75.199923) (xy 61.935867 75.167489) (xy 61.917718 75.091694) + (xy 61.865066 75.02921) (xy 61.828393 75.008011) (xy 61.786701 74.995713) (xy 61.756043 74.993161) + (xy 61.676871 75.011306) (xy 61.614479 75.062874) (xy 61.594159 75.098281) (xy 61.582834 75.138498) + (xy 61.581104 75.173137) + ) + ) + (polygon + (pts + (xy 61.576219 74.470481) (xy 61.594368 74.549349) (xy 61.646309 74.612668) (xy 61.682421 74.634075) + (xy 61.723481 74.646657) (xy 61.756043 74.649542) (xy 61.835396 74.631393) (xy 61.898859 74.579555) + (xy 61.920302 74.543529) (xy 61.932929 74.502566) (xy 61.935867 74.469718) (xy 61.917718 74.390201) + (xy 61.865935 74.326755) (xy 61.829939 74.305323) (xy 61.789009 74.292695) (xy 61.756043 74.289741) + (xy 61.676621 74.30789) (xy 61.613143 74.359709) (xy 61.591723 74.395702) (xy 61.579128 74.436623) + (xy 61.576219 74.46926) + ) + ) + (polygon + (pts + (xy 61.926097 76.220176) (xy 61.944242 76.299461) (xy 61.996089 76.362923) (xy 62.032136 76.38439) + (xy 62.073115 76.397043) (xy 62.106073 76.4) (xy 62.185427 76.381851) (xy 62.24889 76.330013) (xy 62.270332 76.293987) + (xy 62.282959 76.253023) (xy 62.285897 76.220176) (xy 62.267748 76.140822) (xy 62.215911 76.077359) + (xy 62.179884 76.055917) (xy 62.138921 76.04329) (xy 62.106073 76.040352) (xy 62.02669 76.058501) + (xy 61.963151 76.110352) (xy 61.941683 76.146375) (xy 61.929039 76.187332) + ) + ) + (polygon + (pts + (xy 61.930982 75.167336) (xy 61.945282 75.244753) (xy 61.993702 75.30754) (xy 62.028702 75.329504) + (xy 62.068854 75.342923) (xy 62.106073 75.346702) (xy 62.185495 75.328558) (xy 62.248987 75.276747) + (xy 62.270408 75.240767) (xy 62.282999 75.199872) (xy 62.285897 75.167336) (xy 62.267748 75.091639) + (xy 62.215073 75.029182) (xy 62.178382 75.00799) (xy 62.13667 74.995703) (xy 62.106073 74.993161) + (xy 62.026872 75.011306) (xy 61.964404 75.062887) (xy 61.94406 75.098291) (xy 61.932717 75.138503) + (xy 61.930982 75.173137) + ) + ) + (polygon + (pts + (xy 62.276127 76.220176) (xy 62.294273 76.299461) (xy 62.346119 76.362923) (xy 62.382167 76.38439) + (xy 62.423146 76.397043) (xy 62.456104 76.4) (xy 62.535457 76.381851) (xy 62.59892 76.330013) (xy 62.620363 76.293987) + (xy 62.63299 76.253023) (xy 62.635928 76.220176) (xy 62.617779 76.140822) (xy 62.565941 76.077359) + (xy 62.529915 76.055917) (xy 62.488952 76.04329) (xy 62.456104 76.040352) (xy 62.37672 76.058501) + (xy 62.313181 76.110352) (xy 62.291714 76.146375) (xy 62.27907 76.187332) + ) + ) + (polygon + (pts + (xy 62.276127 75.173137) (xy 62.294273 75.248515) (xy 62.346975 75.310761) (xy 62.383734 75.331913) + (xy 62.425518 75.344173) (xy 62.456104 75.346702) (xy 62.535526 75.328558) (xy 62.599017 75.276747) + (xy 62.620439 75.240767) (xy 62.633029 75.199872) (xy 62.635928 75.167336) (xy 62.617779 75.091639) + (xy 62.565104 75.029182) (xy 62.528413 75.00799) (xy 62.4867 74.995703) (xy 62.456104 74.993161) + (xy 62.376789 75.011306) (xy 62.313251 75.063166) (xy 62.291758 75.09921) (xy 62.279089 75.140183) + ) + ) + (polygon + (pts + (xy 62.276127 74.119687) (xy 62.294273 74.198972) (xy 62.346119 74.262434) (xy 62.382167 74.283902) + (xy 62.423146 74.296554) (xy 62.456104 74.299511) (xy 62.535457 74.281362) (xy 62.59892 74.229525) + (xy 62.620363 74.193498) (xy 62.63299 74.152535) (xy 62.635928 74.119687) (xy 62.617779 74.040334) + (xy 62.565941 73.976871) (xy 62.529915 73.955428) (xy 62.488952 73.942801) (xy 62.456104 73.939863) + (xy 62.37672 73.958012) (xy 62.313181 74.009863) (xy 62.291714 74.045886) (xy 62.27907 74.086844) + ) + ) + (polygon + (pts + (xy 62.626158 75.870908) (xy 62.644307 75.949941) (xy 62.696192 76.013241) (xy 62.732274 76.034637) + (xy 62.773301 76.04722) (xy 62.805982 76.050122) (xy 62.885434 76.031981) (xy 62.949015 75.980165) + (xy 62.970464 75.944202) (xy 62.983065 75.903338) (xy 62.985958 75.870908) (xy 62.967813 75.78931) + (xy 62.916324 75.724751) (xy 62.880665 75.702979) (xy 62.840135 75.690029) (xy 62.805982 75.68681) + (xy 62.727036 75.704962) (xy 62.663661 75.756904) (xy 62.642084 75.793134) (xy 62.629271 75.834347) + (xy 62.626158 75.868466) + ) + ) + (polygon + (pts + (xy 62.626158 75.516756) (xy 62.644307 75.59611) (xy 62.696144 75.659573) (xy 62.732171 75.681015) + (xy 62.773134 75.693642) (xy 62.805982 75.69658) (xy 62.885365 75.678431) (xy 62.948904 75.62658) + (xy 62.970372 75.590557) (xy 62.983016 75.5496) (xy 62.985958 75.516756) (xy 62.967813 75.437471) + (xy 62.915967 75.374009) (xy 62.879919 75.352542) (xy 62.83894 75.339889) (xy 62.805982 75.336933) + (xy 62.726628 75.355081) (xy 62.663165 75.406919) (xy 62.641723 75.442945) (xy 62.629096 75.483909) + ) + ) + (polygon + (pts + (xy 62.626158 74.119687) (xy 62.644307 74.199041) (xy 62.696144 74.262504) (xy 62.732171 74.283946) + (xy 62.773134 74.296573) (xy 62.805982 74.299511) (xy 62.885365 74.281362) (xy 62.948904 74.229511) + (xy 62.970372 74.193488) (xy 62.983016 74.152531) (xy 62.985958 74.119687) (xy 62.967813 74.040402) + (xy 62.915967 73.97694) (xy 62.879919 73.955473) (xy 62.83894 73.94282) (xy 62.805982 73.939863) + (xy 62.726628 73.958012) (xy 62.663165 74.00985) (xy 62.641723 74.045876) (xy 62.629096 74.086839) + ) + ) + (polygon + (pts + (xy 63.504058 74.299511) (xy 63.583442 74.281362) (xy 63.646981 74.229511) (xy 63.668448 74.193488) + (xy 63.681093 74.152531) (xy 63.684035 74.119687) (xy 63.665889 74.040402) (xy 63.614043 73.97694) + (xy 63.577995 73.955473) (xy 63.537016 73.94282) (xy 63.504058 73.939863) (xy 63.424705 73.958012) + (xy 63.361242 74.00985) (xy 63.339799 74.045876) (xy 63.327172 74.086839) (xy 63.324234 74.119687) + (xy 63.342383 74.199041) (xy 63.394221 74.262504) (xy 63.430247 74.283946) (xy 63.471211 74.296573) + ) + ) + (polygon + (pts + (xy 63.674265 76.218497) (xy 63.692414 76.298917) (xy 63.744029 76.3627) (xy 63.779869 76.384221) + (xy 63.820622 76.396946) (xy 63.854089 76.4) (xy 63.933442 76.381851) (xy 63.996905 76.330013) + (xy 64.018348 76.293987) (xy 64.030975 76.253023) (xy 64.033913 76.220176) (xy 64.015764 76.139725) + (xy 63.964135 76.075866) (xy 63.928298 76.054321) (xy 63.887551 76.041578) (xy 63.854089 76.03852) + (xy 63.774804 76.056666) (xy 63.711342 76.108512) (xy 63.689874 76.14456) (xy 63.677222 76.185539) + ) + ) + (polygon + (pts + (xy 63.674265 75.868466) (xy 63.692414 75.947819) (xy 63.744251 76.011282) (xy 63.780278 76.032725) + (xy 63.821241 76.045352) (xy 63.854089 76.04829) (xy 63.933442 76.030141) (xy 63.996905 75.978304) + (xy 64.018348 75.942277) (xy 64.030975 75.901314) (xy 64.033913 75.868466) (xy 64.015764 75.789113) + (xy 63.963926 75.72565) (xy 63.9279 75.704207) (xy 63.886937 75.69158) (xy 63.854089 75.688642) + (xy 63.774735 75.706791) (xy 63.711272 75.758628) (xy 63.68983 75.794655) (xy 63.677203 75.835618) + ) + ) + (polygon + (pts + (xy 63.674265 75.520725) (xy 63.692414 75.599121) (xy 63.744335 75.661898) (xy 63.780523 75.683135) + (xy 63.821677 75.695586) (xy 63.854089 75.698412) (xy 63.933856 75.680273) (xy 63.997433 75.62856) + (xy 64.018742 75.592765) (xy 64.031168 75.552106) (xy 64.033913 75.520725) (xy 64.015764 75.442426) + (xy 63.963822 75.379679) (xy 63.927616 75.358449) (xy 63.886442 75.346007) (xy 63.854089 75.343191) + (xy 63.774321 75.361326) (xy 63.71073 75.41303) (xy 63.68942 75.448812) (xy 63.677 75.489445) + ) + ) + (polygon + (pts + (xy 63.674265 74.119687) (xy 63.692414 74.199041) (xy 63.744251 74.262504) (xy 63.780278 74.283946) + (xy 63.821241 74.296573) (xy 63.854089 74.299511) (xy 63.933442 74.281362) (xy 63.996905 74.229525) + (xy 64.018348 74.193498) (xy 64.030975 74.152535) (xy 64.033913 74.119687) (xy 64.015764 74.040334) + (xy 63.963926 73.976871) (xy 63.9279 73.955428) (xy 63.886937 73.942801) (xy 63.854089 73.939863) + (xy 63.774735 73.958012) (xy 63.711272 74.00985) (xy 63.68983 74.045876) (xy 63.677203 74.086839) + ) + ) + (polygon + (pts + (xy 64.024143 75.173137) (xy 64.042288 75.252422) (xy 64.094135 75.315884) (xy 64.130182 75.337352) + (xy 64.171161 75.350004) (xy 64.204119 75.352961) (xy 64.283473 75.334812) (xy 64.346936 75.282975) + (xy 64.368378 75.246948) (xy 64.381005 75.205985) (xy 64.383943 75.173137) (xy 64.365795 75.093753) + (xy 64.313943 75.030215) (xy 64.27792 75.008747) (xy 64.236963 74.996103) (xy 64.204119 74.993161) + (xy 64.124804 75.011306) (xy 64.061266 75.063166) (xy 64.039774 75.09921) (xy 64.027104 75.140183) + ) + ) + (polygon + (pts + (xy 64.024143 74.119687) (xy 64.042288 74.198972) (xy 64.094135 74.262434) (xy 64.130182 74.283902) + (xy 64.171161 74.296554) (xy 64.204119 74.299511) (xy 64.283473 74.281362) (xy 64.346936 74.229525) + (xy 64.368378 74.193498) (xy 64.381005 74.152535) (xy 64.383943 74.119687) (xy 64.365795 74.040334) + (xy 64.313957 73.976871) (xy 64.27793 73.955428) (xy 64.236967 73.942801) (xy 64.204119 73.939863) + (xy 64.124736 73.958012) (xy 64.061197 74.009863) (xy 64.039729 74.045886) (xy 64.027085 74.086844) + ) + ) + (polygon + (pts + (xy 64.374173 74.822191) (xy 64.392319 74.901924) (xy 64.444111 74.965654) (xy 64.480083 74.987199) + (xy 64.520974 74.999922) (xy 64.55415 75.00293) (xy 64.633367 74.984774) (xy 64.696773 74.932883) + (xy 64.718257 74.896763) (xy 64.730958 74.855665) (xy 64.733974 74.822191) (xy 64.715825 74.741589) + (xy 64.664128 74.677352) (xy 64.628309 74.655682) (xy 64.587589 74.642853) (xy 64.55415 74.639772) + (xy 64.475174 74.657923) (xy 64.411723 74.709879) (xy 64.390121 74.746106) (xy 64.377292 74.787313) + (xy 64.374173 74.821427) + ) + ) + (polygon + (pts + (xy 64.374173 74.119687) (xy 64.392319 74.198972) (xy 64.444165 74.262434) (xy 64.480213 74.283902) + (xy 64.521192 74.296554) (xy 64.55415 74.299511) (xy 64.633503 74.281362) (xy 64.696966 74.229525) + (xy 64.718409 74.193498) (xy 64.731036 74.152535) (xy 64.733974 74.119687) (xy 64.715825 74.040334) + (xy 64.663987 73.976871) (xy 64.627961 73.955428) (xy 64.586998 73.942801) (xy 64.55415 73.939863) + (xy 64.474766 73.958012) (xy 64.411227 74.009863) (xy 64.38976 74.045886) (xy 64.377116 74.086844) + ) + ) + (polygon + (pts + (xy 64.724204 74.470481) (xy 64.742353 74.549349) (xy 64.794294 74.612668) (xy 64.830406 74.634075) + (xy 64.871466 74.646657) (xy 64.904028 74.649542) (xy 64.983411 74.631393) (xy 65.04695 74.579542) + (xy 65.068418 74.543519) (xy 65.081062 74.502561) (xy 65.084004 74.469718) (xy 65.065859 74.390403) + (xy 65.013999 74.326865) (xy 64.977955 74.305372) (xy 64.936981 74.292703) (xy 64.904028 74.289741) + (xy 64.824743 74.307887) (xy 64.761281 74.359733) (xy 64.739813 74.395781) (xy 64.727161 74.43676) + (xy 64.724204 74.469718) + ) + ) + (polygon + (pts + (xy 64.724204 74.119687) (xy 64.742353 74.199041) (xy 64.79419 74.262504) (xy 64.830217 74.283946) + (xy 64.87118 74.296573) (xy 64.904028 74.299511) (xy 64.983411 74.281362) (xy 65.04695 74.229511) + (xy 65.068418 74.193488) (xy 65.081062 74.152531) (xy 65.084004 74.119687) (xy 65.065859 74.040402) + (xy 65.014013 73.97694) (xy 64.977965 73.955473) (xy 64.936986 73.94282) (xy 64.904028 73.939863) + (xy 64.824674 73.958012) (xy 64.761211 74.00985) (xy 64.739769 74.045876) (xy 64.727142 74.086839) + ) + ) + (polygon + (pts + (xy 66.300639 74.289741) (xy 66.22149 74.307891) (xy 66.158071 74.359781) (xy 66.13656 74.39591) + (xy 66.12384 74.436998) (xy 66.120815 74.470481) (xy 66.138964 74.550283) (xy 66.190747 74.614014) + (xy 66.226698 74.635534) (xy 66.267573 74.648232) (xy 66.300639 74.651221) (xy 66.379886 74.633064) + (xy 66.443368 74.58116) (xy 66.464877 74.545043) (xy 66.477594 74.503951) (xy 66.480615 74.470481) + (xy 66.46247 74.390815) (xy 66.410644 74.327038) (xy 66.374659 74.305475) (xy 66.333754 74.292744) + ) + ) + (polygon + (pts + (xy 66.120815 76.220176) (xy 66.138964 76.299529) (xy 66.190801 76.362992) (xy 66.226828 76.384435) + (xy 66.267791 76.397062) (xy 66.300639 76.4) (xy 66.380023 76.381851) (xy 66.443561 76.33) (xy 66.465029 76.293977) + (xy 66.477673 76.253019) (xy 66.480615 76.220176) (xy 66.46247 76.140891) (xy 66.410624 76.077428) + (xy 66.374576 76.055961) (xy 66.333597 76.043309) (xy 66.300639 76.040352) (xy 66.221285 76.058501) + (xy 66.157823 76.110338) (xy 66.13638 76.146365) (xy 66.123753 76.187328) + ) + ) + (polygon + (pts + (xy 66.120815 75.868466) (xy 66.138964 75.948583) (xy 66.190761 76.012675) (xy 66.226664 76.034309) + (xy 66.267479 76.047093) (xy 66.300639 76.050122) (xy 66.379615 76.03197) (xy 66.443065 75.980014) + (xy 66.464667 75.943788) (xy 66.477497 75.902581) (xy 66.480615 75.868466) (xy 66.46247 75.788418) + (xy 66.410664 75.724327) (xy 66.37474 75.702668) (xy 66.333909 75.689858) (xy 66.300639 75.68681) + (xy 66.221693 75.704962) (xy 66.158318 75.756904) (xy 66.136741 75.793134) (xy 66.123929 75.834347) + ) + ) + (polygon + (pts + (xy 66.120815 75.516756) (xy 66.138964 75.59611) (xy 66.190801 75.659573) (xy 66.226828 75.681015) + (xy 66.267791 75.693642) (xy 66.300639 75.69658) (xy 66.380023 75.678431) (xy 66.443561 75.62658) + (xy 66.465029 75.590557) (xy 66.477673 75.5496) (xy 66.480615 75.516756) (xy 66.46247 75.437471) + (xy 66.410624 75.374009) (xy 66.374576 75.352542) (xy 66.333597 75.339889) (xy 66.300639 75.336933) + (xy 66.221285 75.355081) (xy 66.157823 75.406919) (xy 66.13638 75.442945) (xy 66.123753 75.483909) + ) + ) + (polygon + (pts + (xy 66.120815 75.169016) (xy 66.138964 75.247411) (xy 66.190885 75.310188) (xy 66.227073 75.331425) + (xy 66.268227 75.343876) (xy 66.300639 75.346702) (xy 66.380437 75.328563) (xy 66.44409 75.276837) + (xy 66.465423 75.241046) (xy 66.477866 75.200392) (xy 66.480615 75.169016) (xy 66.46247 75.090784) + (xy 66.410519 75.028037) (xy 66.374292 75.006783) (xy 66.333102 74.994316) (xy 66.300639 74.991482) + (xy 66.220871 75.009617) (xy 66.15728 75.061321) (xy 66.13597 75.097102) (xy 66.12355 75.137735) + ) + ) + (polygon + (pts + (xy 66.120815 74.821427) (xy 66.138964 74.900781) (xy 66.190801 74.964244) (xy 66.226828 74.985687) + (xy 66.267791 74.998314) (xy 66.300639 75.001251) (xy 66.380023 74.983103) (xy 66.443561 74.931251) + (xy 66.465029 74.895229) (xy 66.477673 74.854271) (xy 66.480615 74.821427) (xy 66.46247 74.742112) + (xy 66.41061 74.678574) (xy 66.374566 74.657082) (xy 66.333593 74.644412) (xy 66.300639 74.641451) + (xy 66.221354 74.659597) (xy 66.157892 74.711443) (xy 66.136424 74.74749) (xy 66.123772 74.788469) + ) + ) + (polygon + (pts + (xy 66.120815 74.119687) (xy 66.138964 74.199041) (xy 66.190801 74.262504) (xy 66.226828 74.283946) + (xy 66.267791 74.296573) (xy 66.300639 74.299511) (xy 66.380023 74.281362) (xy 66.443561 74.229511) + (xy 66.465029 74.193488) (xy 66.477673 74.152531) (xy 66.480615 74.119687) (xy 66.46247 74.040402) + (xy 66.410624 73.97694) (xy 66.374576 73.955473) (xy 66.333597 73.94282) (xy 66.300639 73.939863) + (xy 66.221285 73.958012) (xy 66.157823 74.00985) (xy 66.13638 74.045876) (xy 66.123753 74.086839) + ) + ) + (polygon + (pts + (xy 66.470846 75.169016) (xy 66.488994 75.247411) (xy 66.540915 75.310188) (xy 66.577103 75.331425) + (xy 66.618258 75.343876) (xy 66.650669 75.346702) (xy 66.730437 75.328563) (xy 66.794014 75.27685) + (xy 66.815322 75.241056) (xy 66.827748 75.200396) (xy 66.830493 75.169016) (xy 66.812345 75.090717) + (xy 66.760403 75.027969) (xy 66.724197 75.006739) (xy 66.683023 74.994297) (xy 66.650669 74.991482) + (xy 66.570902 75.009617) (xy 66.507311 75.061321) (xy 66.486001 75.097102) (xy 66.473581 75.137735) + ) + ) + (polygon + (pts + (xy 66.470846 74.119687) (xy 66.488994 74.199041) (xy 66.540832 74.262504) (xy 66.576858 74.283946) + (xy 66.617822 74.296573) (xy 66.650669 74.299511) (xy 66.730023 74.281362) (xy 66.793486 74.229525) + (xy 66.814929 74.193498) (xy 66.827556 74.152535) (xy 66.830493 74.119687) (xy 66.812345 74.040334) + (xy 66.760507 73.976871) (xy 66.72448 73.955428) (xy 66.683517 73.942801) (xy 66.650669 73.939863) + (xy 66.571316 73.958012) (xy 66.507853 74.00985) (xy 66.48641 74.045876) (xy 66.473783 74.086839) + ) + ) + (polygon + (pts + (xy 66.820724 75.169016) (xy 66.838869 75.247344) (xy 66.890799 75.31012) (xy 66.927008 75.331381) + (xy 66.968179 75.343858) (xy 67.0007 75.346702) (xy 67.080468 75.328563) (xy 67.144044 75.27685) + (xy 67.165353 75.241056) (xy 67.177779 75.200396) (xy 67.180524 75.169016) (xy 67.162375 75.090717) + (xy 67.110433 75.027969) (xy 67.074227 75.006739) (xy 67.033053 74.994297) (xy 67.0007 74.991482) + (xy 66.920902 75.009617) (xy 66.857235 75.061334) (xy 66.8359 75.097112) (xy 66.823463 75.13774) + ) + ) + (polygon + (pts + (xy 66.820724 74.119687) (xy 66.838869 74.198972) (xy 66.890715 74.262434) (xy 66.926763 74.283902) + (xy 66.967742 74.296554) (xy 67.0007 74.299511) (xy 67.080053 74.281362) (xy 67.143516 74.229525) + (xy 67.164959 74.193498) (xy 67.177586 74.152535) (xy 67.180524 74.119687) (xy 67.162375 74.040334) + (xy 67.110538 73.976871) (xy 67.074511 73.955428) (xy 67.033548 73.942801) (xy 67.0007 73.939863) + (xy 66.921316 73.958012) (xy 66.857778 74.009863) (xy 66.83631 74.045886) (xy 66.823666 74.086844) + ) + ) + (polygon + (pts + (xy 67.170754 75.169016) (xy 67.1889 75.247344) (xy 67.240829 75.31012) (xy 67.277039 75.331381) + (xy 67.318209 75.343858) (xy 67.35073 75.346702) (xy 67.430498 75.328563) (xy 67.494075 75.27685) + (xy 67.515383 75.241056) (xy 67.527809 75.200396) (xy 67.530554 75.169016) (xy 67.512406 75.090717) + (xy 67.460464 75.027969) (xy 67.424258 75.006739) (xy 67.383084 74.994297) (xy 67.35073 74.991482) + (xy 67.270932 75.009617) (xy 67.207265 75.061334) (xy 67.18593 75.097112) (xy 67.173493 75.13774) + ) + ) + (polygon + (pts + (xy 67.170754 74.119687) (xy 67.1889 74.198972) (xy 67.240746 74.262434) (xy 67.276793 74.283902) + (xy 67.317773 74.296554) (xy 67.35073 74.299511) (xy 67.430084 74.281362) (xy 67.493547 74.229525) + (xy 67.51499 74.193498) (xy 67.527617 74.152535) (xy 67.530554 74.119687) (xy 67.512406 74.040334) + (xy 67.460568 73.976871) (xy 67.424541 73.955428) (xy 67.383578 73.942801) (xy 67.35073 73.939863) + (xy 67.271347 73.958012) (xy 67.207808 74.009863) (xy 67.186341 74.045886) (xy 67.173696 74.086844) + ) + ) + (polygon + (pts + (xy 67.520785 74.821427) (xy 67.538933 74.900781) (xy 67.590771 74.964244) (xy 67.626797 74.985687) + (xy 67.667761 74.998314) (xy 67.700608 75.001251) (xy 67.779992 74.983103) (xy 67.843531 74.931251) + (xy 67.864998 74.895229) (xy 67.877643 74.854271) (xy 67.880585 74.821427) (xy 67.862439 74.742112) + (xy 67.810579 74.678574) (xy 67.774535 74.657082) (xy 67.733562 74.644412) (xy 67.700608 74.641451) + (xy 67.621323 74.659597) (xy 67.557861 74.711443) (xy 67.536394 74.74749) (xy 67.523741 74.788469) + ) + ) + (polygon + (pts + (xy 67.520785 74.470481) (xy 67.538933 74.550283) (xy 67.590716 74.614014) (xy 67.626668 74.635534) + (xy 67.667543 74.648232) (xy 67.700608 74.651221) (xy 67.779855 74.633064) (xy 67.843337 74.58116) + (xy 67.864846 74.545043) (xy 67.877564 74.503951) (xy 67.880585 74.470481) (xy 67.862439 74.390815) + (xy 67.810614 74.327038) (xy 67.774628 74.305475) (xy 67.733724 74.292744) (xy 67.700608 74.289741) + (xy 67.62146 74.307891) (xy 67.55804 74.359781) (xy 67.53653 74.39591) (xy 67.52381 74.436998) + ) + ) + (polygon + (pts + (xy 68.398685 74.289741) (xy 68.319536 74.307891) (xy 68.256117 74.359781) (xy 68.234606 74.39591) + (xy 68.221886 74.436998) (xy 68.218861 74.470481) (xy 68.23701 74.550283) (xy 68.288793 74.614014) + (xy 68.324744 74.635534) (xy 68.365619 74.648232) (xy 68.398685 74.651221) (xy 68.477932 74.633064) + (xy 68.541414 74.58116) (xy 68.562923 74.545043) (xy 68.575641 74.503951) (xy 68.578661 74.470481) + (xy 68.560516 74.390815) (xy 68.50869 74.327038) (xy 68.472705 74.305475) (xy 68.4318 74.292744) + ) + ) + (polygon + (pts + (xy 68.218861 76.220176) (xy 68.23701 76.299529) (xy 68.288847 76.362992) (xy 68.324874 76.384435) + (xy 68.365837 76.397062) (xy 68.398685 76.4) (xy 68.478069 76.381851) (xy 68.541607 76.33) (xy 68.563075 76.293977) + (xy 68.575719 76.253019) (xy 68.578661 76.220176) (xy 68.560516 76.140891) (xy 68.50867 76.077428) + (xy 68.472622 76.055961) (xy 68.431643 76.043309) (xy 68.398685 76.040352) (xy 68.319332 76.058501) + (xy 68.255869 76.110338) (xy 68.234426 76.146365) (xy 68.221799 76.187328) + ) + ) + (polygon + (pts + (xy 68.218861 75.868466) (xy 68.23701 75.948583) (xy 68.288807 76.012675) (xy 68.32471 76.034309) + (xy 68.365525 76.047093) (xy 68.398685 76.050122) (xy 68.477661 76.03197) (xy 68.541111 75.980014) + (xy 68.562713 75.943788) (xy 68.575543 75.902581) (xy 68.578661 75.868466) (xy 68.560516 75.788418) + (xy 68.50871 75.724327) (xy 68.472786 75.702668) (xy 68.431955 75.689858) (xy 68.398685 75.68681) + (xy 68.319739 75.704962) (xy 68.256364 75.756904) (xy 68.234787 75.793134) (xy 68.221975 75.834347) + ) + ) + (polygon + (pts + (xy 68.218861 75.516756) (xy 68.23701 75.59611) (xy 68.288847 75.659573) (xy 68.324874 75.681015) + (xy 68.365837 75.693642) (xy 68.398685 75.69658) (xy 68.478069 75.678431) (xy 68.541607 75.62658) + (xy 68.563075 75.590557) (xy 68.575719 75.5496) (xy 68.578661 75.516756) (xy 68.560516 75.437471) + (xy 68.50867 75.374009) (xy 68.472622 75.352542) (xy 68.431643 75.339889) (xy 68.398685 75.336933) + (xy 68.319332 75.355081) (xy 68.255869 75.406919) (xy 68.234426 75.442945) (xy 68.221799 75.483909) + ) + ) + (polygon + (pts + (xy 68.218861 75.169016) (xy 68.23701 75.247411) (xy 68.288931 75.310188) (xy 68.325119 75.331425) + (xy 68.366274 75.343876) (xy 68.398685 75.346702) (xy 68.478483 75.328563) (xy 68.542136 75.276837) + (xy 68.563469 75.241046) (xy 68.575912 75.200392) (xy 68.578661 75.169016) (xy 68.560516 75.090784) + (xy 68.508565 75.028037) (xy 68.472338 75.006783) (xy 68.431148 74.994316) (xy 68.398685 74.991482) + (xy 68.318917 75.009617) (xy 68.255326 75.061321) (xy 68.234016 75.097102) (xy 68.221596 75.137735) + ) + ) + (polygon + (pts + (xy 68.218861 74.821427) (xy 68.23701 74.900781) (xy 68.288847 74.964244) (xy 68.324874 74.985687) + (xy 68.365837 74.998314) (xy 68.398685 75.001251) (xy 68.478069 74.983103) (xy 68.541607 74.931251) + (xy 68.563075 74.895229) (xy 68.575719 74.854271) (xy 68.578661 74.821427) (xy 68.560516 74.742112) + (xy 68.508656 74.678574) (xy 68.472612 74.657082) (xy 68.431639 74.644412) (xy 68.398685 74.641451) + (xy 68.3194 74.659597) (xy 68.255938 74.711443) (xy 68.23447 74.74749) (xy 68.221818 74.788469) + ) + ) + (polygon + (pts + (xy 68.218861 74.119687) (xy 68.23701 74.199041) (xy 68.288847 74.262504) (xy 68.324874 74.283946) + (xy 68.365837 74.296573) (xy 68.398685 74.299511) (xy 68.478069 74.281362) (xy 68.541607 74.229511) + (xy 68.563075 74.193488) (xy 68.575719 74.152531) (xy 68.578661 74.119687) (xy 68.560516 74.040402) + (xy 68.50867 73.97694) (xy 68.472622 73.955473) (xy 68.431643 73.94282) (xy 68.398685 73.939863) + (xy 68.319332 73.958012) (xy 68.255869 74.00985) (xy 68.234426 74.045876) (xy 68.221799 74.086839) + ) + ) + (polygon + (pts + (xy 68.568892 76.220176) (xy 68.58704 76.299529) (xy 68.638878 76.362992) (xy 68.674905 76.384435) + (xy 68.715868 76.397062) (xy 68.748715 76.4) (xy 68.828069 76.381851) (xy 68.891532 76.330013) + (xy 68.912975 76.293987) (xy 68.925602 76.253023) (xy 68.928539 76.220176) (xy 68.910391 76.140822) + (xy 68.858553 76.077359) (xy 68.822526 76.055917) (xy 68.781563 76.04329) (xy 68.748715 76.040352) + (xy 68.669362 76.058501) (xy 68.605899 76.110338) (xy 68.584456 76.146365) (xy 68.571829 76.187328) + ) + ) + (polygon + (pts + (xy 68.568892 75.169016) (xy 68.58704 75.247411) (xy 68.638961 75.310188) (xy 68.67515 75.331425) + (xy 68.716304 75.343876) (xy 68.748715 75.346702) (xy 68.828483 75.328563) (xy 68.89206 75.27685) + (xy 68.913368 75.241056) (xy 68.925794 75.200396) (xy 68.928539 75.169016) (xy 68.910391 75.090717) + (xy 68.858449 75.027969) (xy 68.822243 75.006739) (xy 68.781069 74.994297) (xy 68.748715 74.991482) + (xy 68.668948 75.009617) (xy 68.605357 75.061321) (xy 68.584047 75.097102) (xy 68.571627 75.137735) + ) + ) + (polygon + (pts + (xy 68.568892 74.119687) (xy 68.58704 74.199041) (xy 68.638878 74.262504) (xy 68.674905 74.283946) + (xy 68.715868 74.296573) (xy 68.748715 74.299511) (xy 68.828069 74.281362) (xy 68.891532 74.229525) + (xy 68.912975 74.193498) (xy 68.925602 74.152535) (xy 68.928539 74.119687) (xy 68.910391 74.040334) + (xy 68.858553 73.976871) (xy 68.822526 73.955428) (xy 68.781563 73.942801) (xy 68.748715 73.939863) + (xy 68.669362 73.958012) (xy 68.605899 74.00985) (xy 68.584456 74.045876) (xy 68.571829 74.086839) + ) + ) + (polygon + (pts + (xy 68.91877 76.220176) (xy 68.936915 76.299461) (xy 68.988761 76.362923) (xy 69.024809 76.38439) + (xy 69.065788 76.397043) (xy 69.098746 76.4) (xy 69.178099 76.381851) (xy 69.241562 76.330013) + (xy 69.263005 76.293987) (xy 69.275632 76.253023) (xy 69.27857 76.220176) (xy 69.260421 76.140822) + (xy 69.208584 76.077359) (xy 69.172557 76.055917) (xy 69.131594 76.04329) (xy 69.098746 76.040352) + (xy 69.019362 76.058501) (xy 68.955824 76.110352) (xy 68.934356 76.146375) (xy 68.921712 76.187332) + ) + ) + (polygon + (pts + (xy 68.91877 75.169016) (xy 68.936915 75.247344) (xy 68.988845 75.31012) (xy 69.025054 75.331381) + (xy 69.066225 75.343858) (xy 69.098746 75.346702) (xy 69.178514 75.328563) (xy 69.242091 75.27685) + (xy 69.263399 75.241056) (xy 69.275825 75.200396) (xy 69.27857 75.169016) (xy 69.260421 75.090717) + (xy 69.208479 75.027969) (xy 69.172274 75.006739) (xy 69.131099 74.994297) (xy 69.098746 74.991482) + (xy 69.018948 75.009617) (xy 68.955281 75.061334) (xy 68.933946 75.097112) (xy 68.921509 75.13774) + ) + ) + (polygon + (pts + (xy 68.91877 74.119687) (xy 68.936915 74.198972) (xy 68.988761 74.262434) (xy 69.024809 74.283902) + (xy 69.065788 74.296554) (xy 69.098746 74.299511) (xy 69.178099 74.281362) (xy 69.241562 74.229525) + (xy 69.263005 74.193498) (xy 69.275632 74.152535) (xy 69.27857 74.119687) (xy 69.260421 74.040334) + (xy 69.208584 73.976871) (xy 69.172557 73.955428) (xy 69.131594 73.942801) (xy 69.098746 73.939863) + (xy 69.019362 73.958012) (xy 68.955824 74.009863) (xy 68.934356 74.045886) (xy 68.921712 74.086844) + ) + ) + (polygon + (pts + (xy 69.2688 76.220176) (xy 69.286946 76.299461) (xy 69.338792 76.362923) (xy 69.37484 76.38439) + (xy 69.415819 76.397043) (xy 69.448777 76.4) (xy 69.52813 76.381851) (xy 69.591593 76.330013) (xy 69.613036 76.293987) + (xy 69.625663 76.253023) (xy 69.6286 76.220176) (xy 69.610452 76.140822) (xy 69.558614 76.077359) + (xy 69.522588 76.055917) (xy 69.481624 76.04329) (xy 69.448777 76.040352) (xy 69.369393 76.058501) + (xy 69.305854 76.110352) (xy 69.284387 76.146375) (xy 69.271742 76.187332) + ) + ) + (polygon + (pts + (xy 69.2688 75.169016) (xy 69.286946 75.247344) (xy 69.338875 75.31012) (xy 69.375085 75.331381) + (xy 69.416255 75.343858) (xy 69.448777 75.346702) (xy 69.528544 75.328563) (xy 69.592121 75.27685) + (xy 69.613429 75.241056) (xy 69.625855 75.200396) (xy 69.6286 75.169016) (xy 69.610452 75.090717) + (xy 69.55851 75.027969) (xy 69.522304 75.006739) (xy 69.48113 74.994297) (xy 69.448777 74.991482) + (xy 69.368978 75.009617) (xy 69.305311 75.061334) (xy 69.283976 75.097112) (xy 69.271539 75.13774) + ) + ) + (polygon + (pts + (xy 69.2688 74.119687) (xy 69.286946 74.198972) (xy 69.338792 74.262434) (xy 69.37484 74.283902) + (xy 69.415819 74.296554) (xy 69.448777 74.299511) (xy 69.52813 74.281362) (xy 69.591593 74.229525) + (xy 69.613036 74.193498) (xy 69.625663 74.152535) (xy 69.6286 74.119687) (xy 69.610452 74.040334) + (xy 69.558614 73.976871) (xy 69.522588 73.955428) (xy 69.481624 73.942801) (xy 69.448777 73.939863) + (xy 69.369393 73.958012) (xy 69.305854 74.009863) (xy 69.284387 74.045886) (xy 69.271742 74.086844) + ) + ) + (polygon + (pts + (xy 69.618831 76.220176) (xy 69.636979 76.299529) (xy 69.688817 76.362992) (xy 69.724843 76.384435) + (xy 69.765807 76.397062) (xy 69.798654 76.4) (xy 69.878038 76.381851) (xy 69.941577 76.33) (xy 69.963044 76.293977) + (xy 69.975689 76.253019) (xy 69.978631 76.220176) (xy 69.960485 76.140891) (xy 69.908639 76.077428) + (xy 69.872591 76.055961) (xy 69.831612 76.043309) (xy 69.798654 76.040352) (xy 69.719301 76.058501) + (xy 69.655838 76.110338) (xy 69.634395 76.146365) (xy 69.621768 76.187328) + ) + ) + (polygon + (pts + (xy 69.618831 74.119687) (xy 69.636979 74.199041) (xy 69.688817 74.262504) (xy 69.724843 74.283946) + (xy 69.765807 74.296573) (xy 69.798654 74.299511) (xy 69.878038 74.281362) (xy 69.941577 74.229511) + (xy 69.963044 74.193488) (xy 69.975689 74.152531) (xy 69.978631 74.119687) (xy 69.960485 74.040402) + (xy 69.908639 73.97694) (xy 69.872591 73.955473) (xy 69.831612 73.94282) (xy 69.798654 73.939863) + (xy 69.719301 73.958012) (xy 69.655838 74.00985) (xy 69.634395 74.045876) (xy 69.621768 74.086839) + ) + ) + (polygon + (pts + (xy 70.496731 74.289741) (xy 70.417446 74.307887) (xy 70.353984 74.359733) (xy 70.332516 74.395781) + (xy 70.319864 74.43676) (xy 70.316907 74.469718) (xy 70.335056 74.549071) (xy 70.386893 74.612534) + (xy 70.42292 74.633977) (xy 70.463883 74.646604) (xy 70.496731 74.649542) (xy 70.576115 74.631393) + (xy 70.639653 74.579542) (xy 70.661121 74.543519) (xy 70.673765 74.502561) (xy 70.676707 74.469718) + (xy 70.658562 74.390403) (xy 70.606702 74.326865) (xy 70.570658 74.305372) (xy 70.529685 74.292703) + ) + ) + (polygon + (pts + (xy 70.316907 76.220176) (xy 70.335056 76.299529) (xy 70.386893 76.362992) (xy 70.42292 76.384435) + (xy 70.463883 76.397062) (xy 70.496731 76.4) (xy 70.576115 76.381851) (xy 70.639653 76.33) (xy 70.661121 76.293977) + (xy 70.673765 76.253019) (xy 70.676707 76.220176) (xy 70.658562 76.140891) (xy 70.606716 76.077428) + (xy 70.570668 76.055961) (xy 70.529689 76.043309) (xy 70.496731 76.040352) (xy 70.417378 76.058501) + (xy 70.353915 76.110338) (xy 70.332472 76.146365) (xy 70.319845 76.187328) + ) + ) + (polygon + (pts + (xy 70.316907 75.870908) (xy 70.335056 75.949941) (xy 70.386942 76.013241) (xy 70.423023 76.034637) + (xy 70.46405 76.04722) (xy 70.496731 76.050122) (xy 70.576183 76.031981) (xy 70.639764 75.980165) + (xy 70.661213 75.944202) (xy 70.673814 75.903338) (xy 70.676707 75.870908) (xy 70.658562 75.790072) + (xy 70.607037 75.726143) (xy 70.571259 75.704563) (xy 70.530586 75.691768) (xy 70.496731 75.688642) + (xy 70.417378 75.706791) (xy 70.353915 75.758628) (xy 70.332472 75.794655) (xy 70.319845 75.835618) + (xy 70.316907 75.868466) + ) + ) + (polygon + (pts + (xy 70.316907 75.520725) (xy 70.335056 75.599121) (xy 70.386977 75.661898) (xy 70.423165 75.683135) + (xy 70.46432 75.695586) (xy 70.496731 75.698412) (xy 70.576529 75.680273) (xy 70.640182 75.628546) + (xy 70.661515 75.592755) (xy 70.673958 75.552102) (xy 70.676707 75.520725) (xy 70.658562 75.442494) + (xy 70.606611 75.379747) (xy 70.570384 75.358492) (xy 70.529194 75.346025) (xy 70.496731 75.343191) + (xy 70.416963 75.361326) (xy 70.353372 75.41303) (xy 70.332062 75.448812) (xy 70.319642 75.489445) + ) + ) + (polygon + (pts + (xy 70.316907 75.173137) (xy 70.335056 75.252491) (xy 70.386893 75.315954) (xy 70.42292 75.337396) + (xy 70.463883 75.350023) (xy 70.496731 75.352961) (xy 70.576115 75.334812) (xy 70.639653 75.282961) + (xy 70.661121 75.246938) (xy 70.673765 75.205981) (xy 70.676707 75.173137) (xy 70.658562 75.093822) + (xy 70.606702 75.030284) (xy 70.570658 75.008792) (xy 70.529685 74.996122) (xy 70.496731 74.993161) + (xy 70.417446 75.011306) (xy 70.353984 75.063152) (xy 70.332516 75.0992) (xy 70.319864 75.140179) + ) + ) + (polygon + (pts + (xy 70.316907 74.821427) (xy 70.335056 74.901514) (xy 70.386839 74.96553) (xy 70.422746 74.987139) + (xy 70.463566 74.999906) (xy 70.496731 75.00293) (xy 70.575774 74.984776) (xy 70.639226 74.932828) + (xy 70.660804 74.896623) (xy 70.673608 74.855432) (xy 70.676707 74.821427) (xy 70.658562 74.74138) + (xy 70.606756 74.677289) (xy 70.570832 74.65563) (xy 70.530001 74.64282) (xy 70.496731 74.639772) + (xy 70.417785 74.657923) (xy 70.35441 74.709866) (xy 70.332833 74.746096) (xy 70.320021 74.787308) + ) + ) + (polygon + (pts + (xy 70.316907 74.119687) (xy 70.335056 74.199041) (xy 70.386893 74.262504) (xy 70.42292 74.283946) + (xy 70.463883 74.296573) (xy 70.496731 74.299511) (xy 70.576115 74.281362) (xy 70.639653 74.229511) + (xy 70.661121 74.193488) (xy 70.673765 74.152531) (xy 70.676707 74.119687) (xy 70.658562 74.040402) + (xy 70.606716 73.97694) (xy 70.570668 73.955473) (xy 70.529689 73.94282) (xy 70.496731 73.939863) + (xy 70.417378 73.958012) (xy 70.353915 74.00985) (xy 70.332472 74.045876) (xy 70.319845 74.086839) + ) + ) + (polygon + (pts + (xy 70.666938 75.173137) (xy 70.685086 75.252491) (xy 70.736924 75.315954) (xy 70.772951 75.337396) + (xy 70.813914 75.350023) (xy 70.846762 75.352961) (xy 70.926115 75.334812) (xy 70.989578 75.282975) + (xy 71.011021 75.246948) (xy 71.023648 75.205985) (xy 71.026585 75.173137) (xy 71.008437 75.093753) + (xy 70.956585 75.030215) (xy 70.920563 75.008747) (xy 70.879605 74.996103) (xy 70.846762 74.993161) + (xy 70.767477 75.011306) (xy 70.704014 75.063152) (xy 70.682547 75.0992) (xy 70.669894 75.140179) + ) + ) + (polygon + (pts + (xy 70.666938 74.119687) (xy 70.685086 74.199041) (xy 70.736924 74.262504) (xy 70.772951 74.283946) + (xy 70.813914 74.296573) (xy 70.846762 74.299511) (xy 70.926115 74.281362) (xy 70.989578 74.229525) + (xy 71.011021 74.193498) (xy 71.023648 74.152535) (xy 71.026585 74.119687) (xy 71.008437 74.040334) + (xy 70.956599 73.976871) (xy 70.920573 73.955428) (xy 70.879609 73.942801) (xy 70.846762 73.939863) + (xy 70.767408 73.958012) (xy 70.703945 74.00985) (xy 70.682502 74.045876) (xy 70.669875 74.086839) + ) + ) + (polygon + (pts + (xy 71.016816 75.522404) (xy 71.034961 75.599666) (xy 71.087125 75.662126) (xy 71.123528 75.683308) + (xy 71.164918 75.695683) (xy 71.196792 75.698412) (xy 71.27656 75.680273) (xy 71.340137 75.62856) + (xy 71.361445 75.592765) (xy 71.373871 75.552106) (xy 71.376616 75.520725) (xy 71.358467 75.442426) + (xy 71.306525 75.379679) (xy 71.27032 75.358449) (xy 71.229145 75.346007) (xy 71.196792 75.343191) + (xy 71.116994 75.361326) (xy 71.053327 75.413044) (xy 71.031992 75.448822) (xy 71.019555 75.489449) + (xy 71.016816 75.520725) + ) + ) + (polygon + (pts + (xy 71.016816 75.173137) (xy 71.034961 75.252422) (xy 71.086807 75.315884) (xy 71.122855 75.337352) + (xy 71.163834 75.350004) (xy 71.196792 75.352961) (xy 71.276145 75.334812) (xy 71.339608 75.282975) + (xy 71.361051 75.246948) (xy 71.373678 75.205985) (xy 71.376616 75.173137) (xy 71.358467 75.093753) + (xy 71.306616 75.030215) (xy 71.270593 75.008747) (xy 71.229636 74.996103) (xy 71.196792 74.993161) + (xy 71.117477 75.011306) (xy 71.053939 75.063166) (xy 71.032447 75.09921) (xy 71.019777 75.140183) + ) + ) + (polygon + (pts + (xy 71.016816 74.119687) (xy 71.034961 74.198972) (xy 71.086807 74.262434) (xy 71.122855 74.283902) + (xy 71.163834 74.296554) (xy 71.196792 74.299511) (xy 71.276145 74.281362) (xy 71.339608 74.229525) + (xy 71.361051 74.193498) (xy 71.373678 74.152535) (xy 71.376616 74.119687) (xy 71.358467 74.040334) + (xy 71.30663 73.976871) (xy 71.270603 73.955428) (xy 71.22964 73.942801) (xy 71.196792 73.939863) + (xy 71.117408 73.958012) (xy 71.05387 74.009863) (xy 71.032402 74.045886) (xy 71.019758 74.086844) + ) + ) + (polygon + (pts + (xy 71.366846 75.870908) (xy 71.384992 75.949872) (xy 71.436886 76.013172) (xy 71.472989 76.034593) + (xy 71.514032 76.047201) (xy 71.546823 76.050122) (xy 71.626245 76.031981) (xy 71.68975 75.980179) + (xy 71.711174 75.944212) (xy 71.723758 75.903343) (xy 71.726646 75.870908) (xy 71.708498 75.790003) + (xy 71.656982 75.726073) (xy 71.621224 75.704517) (xy 71.580567 75.691749) (xy 71.546823 75.688642) + (xy 71.467439 75.706791) (xy 71.4039 75.758642) (xy 71.382433 75.794665) (xy 71.369788 75.835622) + (xy 71.366846 75.868466) + ) + ) + (polygon + (pts + (xy 71.366846 75.173137) (xy 71.384992 75.252422) (xy 71.436838 75.315884) (xy 71.472886 75.337352) + (xy 71.513865 75.350004) (xy 71.546823 75.352961) (xy 71.626176 75.334812) (xy 71.689639 75.282975) + (xy 71.711082 75.246948) (xy 71.723709 75.205985) (xy 71.726646 75.173137) (xy 71.708498 75.093753) + (xy 71.656647 75.030215) (xy 71.620624 75.008747) (xy 71.579666 74.996103) (xy 71.546823 74.993161) + (xy 71.467507 75.011306) (xy 71.403969 75.063166) (xy 71.382477 75.09921) (xy 71.369807 75.140183) + ) + ) + (polygon + (pts + (xy 71.366846 74.119687) (xy 71.384992 74.198972) (xy 71.436838 74.262434) (xy 71.472886 74.283902) + (xy 71.513865 74.296554) (xy 71.546823 74.299511) (xy 71.626176 74.281362) (xy 71.689639 74.229525) + (xy 71.711082 74.193498) (xy 71.723709 74.152535) (xy 71.726646 74.119687) (xy 71.708498 74.040334) + (xy 71.65666 73.976871) (xy 71.620634 73.955428) (xy 71.57967 73.942801) (xy 71.546823 73.939863) + (xy 71.467439 73.958012) (xy 71.4039 74.009863) (xy 71.382433 74.045886) (xy 71.369788 74.086844) + ) + ) + (polygon + (pts + (xy 71.716877 76.220176) (xy 71.735025 76.299529) (xy 71.786863 76.362992) (xy 71.82289 76.384435) + (xy 71.863853 76.397062) (xy 71.8967 76.4) (xy 71.976084 76.381851) (xy 72.039623 76.33) (xy 72.06109 76.293977) + (xy 72.073735 76.253019) (xy 72.076677 76.220176) (xy 72.058531 76.140891) (xy 72.006685 76.077428) + (xy 71.970637 76.055961) (xy 71.929658 76.043309) (xy 71.8967 76.040352) (xy 71.817347 76.058501) + (xy 71.753884 76.110338) (xy 71.732441 76.146365) (xy 71.719814 76.187328) + ) + ) + (polygon + (pts + (xy 71.716877 74.822191) (xy 71.735025 74.901993) (xy 71.786809 74.965723) (xy 71.82276 74.987244) + (xy 71.863635 74.999941) (xy 71.8967 75.00293) (xy 71.975947 74.984774) (xy 72.03943 74.93287) + (xy 72.060938 74.896753) (xy 72.073656 74.855661) (xy 72.076677 74.822191) (xy 72.058531 74.741658) + (xy 72.006826 74.677422) (xy 71.970986 74.655728) (xy 71.93025 74.642873) (xy 71.8967 74.639772) + (xy 71.817755 74.657923) (xy 71.754379 74.709866) (xy 71.732802 74.746096) (xy 71.71999 74.787308) + (xy 71.716877 74.821427) + ) + ) + (polygon + (pts + (xy 71.716877 74.469718) (xy 71.735025 74.549071) (xy 71.786863 74.612534) (xy 71.82289 74.633977) + (xy 71.863853 74.646604) (xy 71.8967 74.649542) (xy 71.976084 74.631393) (xy 72.039623 74.579542) + (xy 72.06109 74.543519) (xy 72.073735 74.502561) (xy 72.076677 74.469718) (xy 72.058531 74.390403) + (xy 72.006672 74.326865) (xy 71.970628 74.305372) (xy 71.929654 74.292703) (xy 71.8967 74.289741) + (xy 71.817415 74.307887) (xy 71.753953 74.359733) (xy 71.732486 74.395781) (xy 71.719833 74.43676) + ) + ) + (polygon + (pts + (xy 72.944808 74.299511) (xy 73.024161 74.281362) (xy 73.087624 74.229525) (xy 73.109067 74.193498) + (xy 73.121694 74.152535) (xy 73.124631 74.119687) (xy 73.106483 74.040334) (xy 73.054645 73.976871) + (xy 73.018619 73.955428) (xy 72.977655 73.942801) (xy 72.944808 73.939863) (xy 72.865454 73.958012) + (xy 72.801991 74.00985) (xy 72.780549 74.045876) (xy 72.767921 74.086839) (xy 72.764984 74.119687) + (xy 72.783132 74.199041) (xy 72.83497 74.262504) (xy 72.870997 74.283946) (xy 72.91196 74.296573) + ) + ) + (polygon + (pts + (xy 72.414953 75.868466) (xy 72.433102 75.947819) (xy 72.484939 76.011282) (xy 72.520966 76.032725) + (xy 72.561929 76.045352) (xy 72.594777 76.04829) (xy 72.674161 76.030141) (xy 72.7377 75.97829) + (xy 72.759167 75.942267) (xy 72.771811 75.90131) (xy 72.774754 75.868466) (xy 72.756608 75.789181) + (xy 72.704762 75.725719) (xy 72.668714 75.704251) (xy 72.627735 75.691599) (xy 72.594777 75.688642) + (xy 72.515424 75.706791) (xy 72.451961 75.758628) (xy 72.430518 75.794655) (xy 72.417891 75.835618) + ) + ) + (polygon + (pts + (xy 72.414953 75.520725) (xy 72.433102 75.599121) (xy 72.485023 75.661898) (xy 72.521211 75.683135) + (xy 72.562366 75.695586) (xy 72.594777 75.698412) (xy 72.674575 75.680273) (xy 72.738228 75.628546) + (xy 72.759561 75.592755) (xy 72.772004 75.552102) (xy 72.774754 75.520725) (xy 72.756608 75.442494) + (xy 72.704657 75.379747) (xy 72.66843 75.358492) (xy 72.62724 75.346025) (xy 72.594777 75.343191) + (xy 72.515009 75.361326) (xy 72.451419 75.41303) (xy 72.430108 75.448812) (xy 72.417688 75.489445) + ) + ) + (polygon + (pts + (xy 72.414953 75.173137) (xy 72.433102 75.252491) (xy 72.484939 75.315954) (xy 72.520966 75.337396) + (xy 72.561929 75.350023) (xy 72.594777 75.352961) (xy 72.674161 75.334812) (xy 72.7377 75.282961) + (xy 72.759167 75.246938) (xy 72.771811 75.205981) (xy 72.774754 75.173137) (xy 72.756608 75.093822) + (xy 72.704748 75.030284) (xy 72.668704 75.008792) (xy 72.627731 74.996122) (xy 72.594777 74.993161) + (xy 72.515492 75.011306) (xy 72.45203 75.063152) (xy 72.430562 75.0992) (xy 72.41791 75.140179) + ) + ) + (polygon + (pts + (xy 72.414953 74.822191) (xy 72.433102 74.901993) (xy 72.484885 74.965723) (xy 72.520836 74.987244) + (xy 72.561711 74.999941) (xy 72.594777 75.00293) (xy 72.674024 74.984774) (xy 72.737506 74.93287) + (xy 72.759015 74.896753) (xy 72.771733 74.855661) (xy 72.774754 74.822191) (xy 72.756608 74.742391) + (xy 72.70485 74.678708) (xy 72.668891 74.65718) (xy 72.628014 74.644465) (xy 72.594777 74.641451) + (xy 72.515492 74.659597) (xy 72.45203 74.711443) (xy 72.430562 74.74749) (xy 72.41791 74.788469) + (xy 72.414953 74.821427) + ) + ) + (polygon + (pts + (xy 72.414953 74.470481) (xy 72.433102 74.550283) (xy 72.484885 74.614014) (xy 72.520836 74.635534) + (xy 72.561711 74.648232) (xy 72.594777 74.651221) (xy 72.674024 74.633064) (xy 72.737506 74.58116) + (xy 72.759015 74.545043) (xy 72.771733 74.503951) (xy 72.774754 74.470481) (xy 72.756608 74.390815) + (xy 72.704782 74.327038) (xy 72.668797 74.305475) (xy 72.627892 74.292744) (xy 72.594777 74.289741) + (xy 72.515628 74.307891) (xy 72.452209 74.359781) (xy 72.430699 74.39591) (xy 72.417979 74.436998) + ) + ) + (polygon + (pts + (xy 72.764984 76.218497) (xy 72.783132 76.298917) (xy 72.834748 76.3627) (xy 72.870588 76.384221) + (xy 72.91134 76.396946) (xy 72.944808 76.4) (xy 73.024161 76.381851) (xy 73.087624 76.330013) (xy 73.109067 76.293987) + (xy 73.121694 76.253023) (xy 73.124631 76.220176) (xy 73.106483 76.139725) (xy 73.054854 76.075866) + (xy 73.019017 76.054321) (xy 72.97827 76.041578) (xy 72.944808 76.03852) (xy 72.865523 76.056666) + (xy 72.80206 76.108512) (xy 72.780593 76.14456) (xy 72.76794 76.185539) + ) + ) + (polygon + (pts + (xy 73.114862 76.218497) (xy 73.133007 76.298848) (xy 73.184631 76.36263) (xy 73.220492 76.384176) + (xy 73.26126 76.396926) (xy 73.294838 76.4) (xy 73.374192 76.381851) (xy 73.437654 76.330013) (xy 73.459097 76.293987) + (xy 73.471724 76.253023) (xy 73.474662 76.220176) (xy 73.456513 76.139725) (xy 73.404885 76.075866) + (xy 73.369048 76.054321) (xy 73.328301 76.041578) (xy 73.294838 76.03852) (xy 73.215523 76.056666) + (xy 73.151985 76.108525) (xy 73.130493 76.144569) (xy 73.117823 76.185543) + ) + ) + (polygon + (pts + (xy 73.114862 74.119687) (xy 73.133007 74.198972) (xy 73.184853 74.262434) (xy 73.220901 74.283902) + (xy 73.26188 74.296554) (xy 73.294838 74.299511) (xy 73.374192 74.281362) (xy 73.437654 74.229525) + (xy 73.459097 74.193498) (xy 73.471724 74.152535) (xy 73.474662 74.119687) (xy 73.456513 74.040334) + (xy 73.404676 73.976871) (xy 73.368649 73.955428) (xy 73.327686 73.942801) (xy 73.294838 73.939863) + (xy 73.215454 73.958012) (xy 73.151916 74.009863) (xy 73.130448 74.045886) (xy 73.117804 74.086844) + ) + ) + (polygon + (pts + (xy 73.464892 76.218497) (xy 73.483038 76.298848) (xy 73.534661 76.36263) (xy 73.570523 76.384176) + (xy 73.611291 76.396926) (xy 73.644869 76.4) (xy 73.724222 76.381851) (xy 73.787685 76.330013) + (xy 73.809128 76.293987) (xy 73.821755 76.253023) (xy 73.824692 76.220176) (xy 73.806544 76.139725) + (xy 73.754915 76.075866) (xy 73.719078 76.054321) (xy 73.678331 76.041578) (xy 73.644869 76.03852) + (xy 73.565553 76.056666) (xy 73.502015 76.108525) (xy 73.480523 76.144569) (xy 73.467854 76.185543) + ) + ) + (polygon + (pts + (xy 73.464892 74.119687) (xy 73.483038 74.198972) (xy 73.534884 74.262434) (xy 73.570932 74.283902) + (xy 73.611911 74.296554) (xy 73.644869 74.299511) (xy 73.724222 74.281362) (xy 73.787685 74.229525) + (xy 73.809128 74.193498) (xy 73.821755 74.152535) (xy 73.824692 74.119687) (xy 73.806544 74.040334) + (xy 73.754706 73.976871) (xy 73.71868 73.955428) (xy 73.677716 73.942801) (xy 73.644869 73.939863) + (xy 73.565485 73.958012) (xy 73.501946 74.009863) (xy 73.480479 74.045886) (xy 73.467834 74.086844) + ) + ) + (polygon + (pts + (xy 73.814923 75.868466) (xy 73.833071 75.947819) (xy 73.884909 76.011282) (xy 73.920936 76.032725) + (xy 73.961899 76.045352) (xy 73.994747 76.04829) (xy 74.07413 76.030141) (xy 74.137669 75.97829) + (xy 74.159136 75.942267) (xy 74.171781 75.90131) (xy 74.174723 75.868466) (xy 74.156577 75.789181) + (xy 74.104731 75.725719) (xy 74.068684 75.704251) (xy 74.027704 75.691599) (xy 73.994747 75.688642) + (xy 73.915393 75.706791) (xy 73.85193 75.758628) (xy 73.830487 75.794655) (xy 73.81786 75.835618) + ) + ) + (polygon + (pts + (xy 73.814923 74.470481) (xy 73.833071 74.550283) (xy 73.884855 74.614014) (xy 73.920806 74.635534) + (xy 73.961681 74.648232) (xy 73.994747 74.651221) (xy 74.073993 74.633064) (xy 74.137476 74.58116) + (xy 74.158984 74.545043) (xy 74.171702 74.503951) (xy 74.174723 74.470481) (xy 74.156577 74.390815) + (xy 74.104752 74.327038) (xy 74.068766 74.305475) (xy 74.027862 74.292744) (xy 73.994747 74.289741) + (xy 73.915598 74.307891) (xy 73.852178 74.359781) (xy 73.830668 74.39591) (xy 73.817948 74.436998) + ) + ) + (polygon + (pts + (xy 74.692823 74.289741) (xy 74.613674 74.307891) (xy 74.550255 74.359781) (xy 74.528745 74.39591) + (xy 74.516025 74.436998) (xy 74.512999 74.470481) (xy 74.531148 74.550283) (xy 74.582931 74.614014) + (xy 74.618882 74.635534) (xy 74.659757 74.648232) (xy 74.692823 74.651221) (xy 74.77207 74.633064) + (xy 74.835552 74.58116) (xy 74.857061 74.545043) (xy 74.869779 74.503951) (xy 74.8728 74.470481) + (xy 74.854654 74.390815) (xy 74.802828 74.327038) (xy 74.766843 74.305475) (xy 74.725938 74.292744) + ) + ) + (polygon + (pts + (xy 74.512999 76.220176) (xy 74.531148 76.299529) (xy 74.582986 76.362992) (xy 74.619012 76.384435) + (xy 74.659975 76.397062) (xy 74.692823 76.4) (xy 74.772207 76.381851) (xy 74.835746 76.33) (xy 74.857213 76.293977) + (xy 74.869857 76.253019) (xy 74.8728 76.220176) (xy 74.854654 76.140891) (xy 74.802808 76.077428) + (xy 74.76676 76.055961) (xy 74.725781 76.043309) (xy 74.692823 76.040352) (xy 74.61347 76.058501) + (xy 74.550007 76.110338) (xy 74.528564 76.146365) (xy 74.515937 76.187328) + ) + ) + (polygon + (pts + (xy 74.512999 75.868466) (xy 74.531148 75.948583) (xy 74.582945 76.012675) (xy 74.618848 76.034309) + (xy 74.659663 76.047093) (xy 74.692823 76.050122) (xy 74.771799 76.03197) (xy 74.83525 75.980014) + (xy 74.856852 75.943788) (xy 74.869681 75.902581) (xy 74.8728 75.868466) (xy 74.854654 75.788418) + (xy 74.802848 75.724327) (xy 74.766924 75.702668) (xy 74.726094 75.689858) (xy 74.692823 75.68681) + (xy 74.613877 75.704962) (xy 74.550502 75.756904) (xy 74.528925 75.793134) (xy 74.516113 75.834347) + ) + ) + (polygon + (pts + (xy 74.512999 75.516756) (xy 74.531148 75.59611) (xy 74.582986 75.659573) (xy 74.619012 75.681015) + (xy 74.659975 75.693642) (xy 74.692823 75.69658) (xy 74.772207 75.678431) (xy 74.835746 75.62658) + (xy 74.857213 75.590557) (xy 74.869857 75.5496) (xy 74.8728 75.516756) (xy 74.854654 75.437471) + (xy 74.802808 75.374009) (xy 74.76676 75.352542) (xy 74.725781 75.339889) (xy 74.692823 75.336933) + (xy 74.61347 75.355081) (xy 74.550007 75.406919) (xy 74.528564 75.442945) (xy 74.515937 75.483909) + ) + ) + (polygon + (pts + (xy 74.512999 75.169016) (xy 74.531148 75.247411) (xy 74.583069 75.310188) (xy 74.619257 75.331425) + (xy 74.660412 75.343876) (xy 74.692823 75.346702) (xy 74.772621 75.328563) (xy 74.836274 75.276837) + (xy 74.857607 75.241046) (xy 74.87005 75.200392) (xy 74.8728 75.169016) (xy 74.854654 75.090784) + (xy 74.802703 75.028037) (xy 74.766477 75.006783) (xy 74.725286 74.994316) (xy 74.692823 74.991482) + (xy 74.613056 75.009617) (xy 74.549465 75.061321) (xy 74.528154 75.097102) (xy 74.515734 75.137735) + ) + ) + (polygon + (pts + (xy 74.512999 74.821427) (xy 74.531148 74.900781) (xy 74.582986 74.964244) (xy 74.619012 74.985687) + (xy 74.659975 74.998314) (xy 74.692823 75.001251) (xy 74.772207 74.983103) (xy 74.835746 74.931251) + (xy 74.857213 74.895229) (xy 74.869857 74.854271) (xy 74.8728 74.821427) (xy 74.854654 74.742112) + (xy 74.802794 74.678574) (xy 74.76675 74.657082) (xy 74.725777 74.644412) (xy 74.692823 74.641451) + (xy 74.613538 74.659597) (xy 74.550076 74.711443) (xy 74.528608 74.74749) (xy 74.515956 74.788469) + ) + ) + (polygon + (pts + (xy 74.512999 74.119687) (xy 74.531148 74.199041) (xy 74.582986 74.262504) (xy 74.619012 74.283946) + (xy 74.659975 74.296573) (xy 74.692823 74.299511) (xy 74.772207 74.281362) (xy 74.835746 74.229511) + (xy 74.857213 74.193488) (xy 74.869857 74.152531) (xy 74.8728 74.119687) (xy 74.854654 74.040402) + (xy 74.802808 73.97694) (xy 74.76676 73.955473) (xy 74.725781 73.94282) (xy 74.692823 73.939863) + (xy 74.61347 73.958012) (xy 74.550007 74.00985) (xy 74.528564 74.045876) (xy 74.515937 74.086839) + ) + ) + (polygon + (pts + (xy 74.86303 76.220176) (xy 74.881179 76.299529) (xy 74.933016 76.362992) (xy 74.969043 76.384435) + (xy 75.010006 76.397062) (xy 75.042854 76.4) (xy 75.122207 76.381851) (xy 75.18567 76.330013) (xy 75.207113 76.293987) + (xy 75.21974 76.253023) (xy 75.222677 76.220176) (xy 75.204529 76.140822) (xy 75.152691 76.077359) + (xy 75.116665 76.055917) (xy 75.075701 76.04329) (xy 75.042854 76.040352) (xy 74.9635 76.058501) + (xy 74.900037 76.110338) (xy 74.878595 76.146365) (xy 74.865968 76.187328) + ) + ) + (polygon + (pts + (xy 74.86303 75.169016) (xy 74.881179 75.247411) (xy 74.933099 75.310188) (xy 74.969288 75.331425) + (xy 75.010442 75.343876) (xy 75.042854 75.346702) (xy 75.122621 75.328563) (xy 75.186198 75.27685) + (xy 75.207506 75.241056) (xy 75.219933 75.200396) (xy 75.222677 75.169016) (xy 75.204529 75.090717) + (xy 75.152587 75.027969) (xy 75.116381 75.006739) (xy 75.075207 74.994297) (xy 75.042854 74.991482) + (xy 74.963086 75.009617) (xy 74.899495 75.061321) (xy 74.878185 75.097102) (xy 74.865765 75.137735) + ) + ) + (polygon + (pts + (xy 74.86303 74.119687) (xy 74.881179 74.199041) (xy 74.933016 74.262504) (xy 74.969043 74.283946) + (xy 75.010006 74.296573) (xy 75.042854 74.299511) (xy 75.122207 74.281362) (xy 75.18567 74.229525) + (xy 75.207113 74.193498) (xy 75.21974 74.152535) (xy 75.222677 74.119687) (xy 75.204529 74.040334) + (xy 75.152691 73.976871) (xy 75.116665 73.955428) (xy 75.075701 73.942801) (xy 75.042854 73.939863) + (xy 74.9635 73.958012) (xy 74.900037 74.00985) (xy 74.878595 74.045876) (xy 74.865968 74.086839) + ) + ) + (polygon + (pts + (xy 75.212908 76.220176) (xy 75.231053 76.299461) (xy 75.282899 76.362923) (xy 75.318947 76.38439) + (xy 75.359926 76.397043) (xy 75.392884 76.4) (xy 75.472238 76.381851) (xy 75.535701 76.330013) + (xy 75.557143 76.293987) (xy 75.56977 76.253023) (xy 75.572708 76.220176) (xy 75.554559 76.140822) + (xy 75.502722 76.077359) (xy 75.466695 76.055917) (xy 75.425732 76.04329) (xy 75.392884 76.040352) + (xy 75.313501 76.058501) (xy 75.249962 76.110352) (xy 75.228494 76.146375) (xy 75.21585 76.187332) + ) + ) + (polygon + (pts + (xy 75.212908 75.169016) (xy 75.231053 75.247344) (xy 75.282983 75.31012) (xy 75.319192 75.331381) + (xy 75.360363 75.343858) (xy 75.392884 75.346702) (xy 75.472652 75.328563) (xy 75.536229 75.27685) + (xy 75.557537 75.241056) (xy 75.569963 75.200396) (xy 75.572708 75.169016) (xy 75.554559 75.090717) + (xy 75.502617 75.027969) (xy 75.466412 75.006739) (xy 75.425237 74.994297) (xy 75.392884 74.991482) + (xy 75.313086 75.009617) (xy 75.249419 75.061334) (xy 75.228084 75.097112) (xy 75.215647 75.13774) + ) + ) + (polygon + (pts + (xy 75.212908 74.119687) (xy 75.231053 74.198972) (xy 75.282899 74.262434) (xy 75.318947 74.283902) + (xy 75.359926 74.296554) (xy 75.392884 74.299511) (xy 75.472238 74.281362) (xy 75.535701 74.229525) + (xy 75.557143 74.193498) (xy 75.56977 74.152535) (xy 75.572708 74.119687) (xy 75.554559 74.040334) + (xy 75.502722 73.976871) (xy 75.466695 73.955428) (xy 75.425732 73.942801) (xy 75.392884 73.939863) + (xy 75.313501 73.958012) (xy 75.249962 74.009863) (xy 75.228494 74.045886) (xy 75.21585 74.086844) + ) + ) + (polygon + (pts + (xy 75.562938 76.220176) (xy 75.581084 76.299461) (xy 75.63293 76.362923) (xy 75.668978 76.38439) + (xy 75.709957 76.397043) (xy 75.742915 76.4) (xy 75.822268 76.381851) (xy 75.885731 76.330013) + (xy 75.907174 76.293987) (xy 75.919801 76.253023) (xy 75.922739 76.220176) (xy 75.90459 76.140822) + (xy 75.852752 76.077359) (xy 75.816726 76.055917) (xy 75.775763 76.04329) (xy 75.742915 76.040352) + (xy 75.663531 76.058501) (xy 75.599992 76.110352) (xy 75.578525 76.146375) (xy 75.56588 76.187332) + ) + ) + (polygon + (pts + (xy 75.562938 75.169016) (xy 75.581084 75.247344) (xy 75.633013 75.31012) (xy 75.669223 75.331381) + (xy 75.710393 75.343858) (xy 75.742915 75.346702) (xy 75.822682 75.328563) (xy 75.886259 75.27685) + (xy 75.907568 75.241056) (xy 75.919994 75.200396) (xy 75.922739 75.169016) (xy 75.90459 75.090717) + (xy 75.852648 75.027969) (xy 75.816442 75.006739) (xy 75.775268 74.994297) (xy 75.742915 74.991482) + (xy 75.663117 75.009617) (xy 75.599449 75.061334) (xy 75.578115 75.097112) (xy 75.565677 75.13774) + ) + ) + (polygon + (pts + (xy 75.562938 74.119687) (xy 75.581084 74.198972) (xy 75.63293 74.262434) (xy 75.668978 74.283902) + (xy 75.709957 74.296554) (xy 75.742915 74.299511) (xy 75.822268 74.281362) (xy 75.885731 74.229525) + (xy 75.907174 74.193498) (xy 75.919801 74.152535) (xy 75.922739 74.119687) (xy 75.90459 74.040334) + (xy 75.852752 73.976871) (xy 75.816726 73.955428) (xy 75.775763 73.942801) (xy 75.742915 73.939863) + (xy 75.663531 73.958012) (xy 75.599992 74.009863) (xy 75.578525 74.045886) (xy 75.56588 74.086844) + ) + ) + (polygon + (pts + (xy 75.912969 76.220176) (xy 75.931117 76.299529) (xy 75.982955 76.362992) (xy 76.018982 76.384435) + (xy 76.059945 76.397062) (xy 76.092793 76.4) (xy 76.172176 76.381851) (xy 76.235715 76.33) (xy 76.257182 76.293977) + (xy 76.269827 76.253019) (xy 76.272769 76.220176) (xy 76.254624 76.140891) (xy 76.202777 76.077428) + (xy 76.16673 76.055961) (xy 76.125751 76.043309) (xy 76.092793 76.040352) (xy 76.013439 76.058501) + (xy 75.949976 76.110338) (xy 75.928534 76.146365) (xy 75.915906 76.187328) + ) + ) + (polygon + (pts + (xy 75.912969 74.119687) (xy 75.931117 74.199041) (xy 75.982955 74.262504) (xy 76.018982 74.283946) + (xy 76.059945 74.296573) (xy 76.092793 74.299511) (xy 76.172176 74.281362) (xy 76.235715 74.229511) + (xy 76.257182 74.193488) (xy 76.269827 74.152531) (xy 76.272769 74.119687) (xy 76.254624 74.040402) + (xy 76.202777 73.97694) (xy 76.16673 73.955473) (xy 76.125751 73.94282) (xy 76.092793 73.939863) + (xy 76.013439 73.958012) (xy 75.949976 74.00985) (xy 75.928534 74.045876) (xy 75.915906 74.086839) + ) + ) + (polygon + (pts + (xy 76.790869 74.289741) (xy 76.711584 74.307887) (xy 76.648122 74.359733) (xy 76.626655 74.395781) + (xy 76.614002 74.43676) (xy 76.611045 74.469718) (xy 76.629194 74.549071) (xy 76.681032 74.612534) + (xy 76.717058 74.633977) (xy 76.758021 74.646604) (xy 76.790869 74.649542) (xy 76.870253 74.631393) + (xy 76.933792 74.579542) (xy 76.955259 74.543519) (xy 76.967903 74.502561) (xy 76.970846 74.469718) + (xy 76.9527 74.390403) (xy 76.90084 74.326865) (xy 76.864796 74.305372) (xy 76.823823 74.292703) + ) + ) + (polygon + (pts + (xy 76.611045 76.220176) (xy 76.629194 76.299529) (xy 76.681032 76.362992) (xy 76.717058 76.384435) + (xy 76.758021 76.397062) (xy 76.790869 76.4) (xy 76.870253 76.381851) (xy 76.933792 76.33) (xy 76.955259 76.293977) + (xy 76.967903 76.253019) (xy 76.970846 76.220176) (xy 76.9527 76.140891) (xy 76.900854 76.077428) + (xy 76.864806 76.055961) (xy 76.823827 76.043309) (xy 76.790869 76.040352) (xy 76.711516 76.058501) + (xy 76.648053 76.110338) (xy 76.62661 76.146365) (xy 76.613983 76.187328) + ) + ) + (polygon + (pts + (xy 76.611045 75.870908) (xy 76.629194 75.949941) (xy 76.68108 76.013241) (xy 76.717162 76.034637) + (xy 76.758189 76.04722) (xy 76.790869 76.050122) (xy 76.870321 76.031981) (xy 76.933902 75.980165) + (xy 76.955351 75.944202) (xy 76.967953 75.903338) (xy 76.970846 75.870908) (xy 76.9527 75.78931) + (xy 76.901211 75.724751) (xy 76.865553 75.702979) (xy 76.825022 75.690029) (xy 76.790869 75.68681) + (xy 76.711923 75.704962) (xy 76.648548 75.756904) (xy 76.626971 75.793134) (xy 76.614159 75.834347) + (xy 76.611045 75.868466) + ) + ) + (polygon + (pts + (xy 76.61593 75.516756) (xy 76.63023 75.594458) (xy 76.67862 75.657384) (xy 76.713564 75.679364) + (xy 76.753658 75.692793) (xy 76.790869 75.69658) (xy 76.870253 75.678431) (xy 76.933792 75.62658) + (xy 76.955259 75.590557) (xy 76.967903 75.5496) (xy 76.970846 75.516756) (xy 76.9527 75.441379) + (xy 76.899998 75.379133) (xy 76.863239 75.35798) (xy 76.821455 75.345721) (xy 76.790869 75.343191) + (xy 76.711561 75.361332) (xy 76.649132 75.412854) (xy 76.628859 75.448179) (xy 76.617606 75.488285) + (xy 76.61593 75.522404) + ) + ) + (polygon + (pts + (xy 76.611045 75.173137) (xy 76.629194 75.252491) (xy 76.681032 75.315954) (xy 76.717058 75.337396) + (xy 76.758021 75.350023) (xy 76.790869 75.352961) (xy 76.870253 75.334812) (xy 76.933792 75.282961) + (xy 76.955259 75.246938) (xy 76.967903 75.205981) (xy 76.970846 75.173137) (xy 76.9527 75.093822) + (xy 76.90084 75.030284) (xy 76.864796 75.008792) (xy 76.823823 74.996122) (xy 76.790869 74.993161) + (xy 76.711584 75.011306) (xy 76.648122 75.063152) (xy 76.626655 75.0992) (xy 76.614002 75.140179) + ) + ) + (polygon + (pts + (xy 76.611045 74.821427) (xy 76.629194 74.901514) (xy 76.680978 74.96553) (xy 76.716884 74.987139) + (xy 76.757704 74.999906) (xy 76.790869 75.00293) (xy 76.869912 74.984776) (xy 76.933364 74.932828) + (xy 76.954942 74.896623) (xy 76.967747 74.855432) (xy 76.970846 74.821427) (xy 76.9527 74.74138) + (xy 76.900894 74.677289) (xy 76.86497 74.65563) (xy 76.82414 74.64282) (xy 76.790869 74.639772) + (xy 76.711923 74.657923) (xy 76.648548 74.709866) (xy 76.626971 74.746096) (xy 76.614159 74.787308) + ) + ) + (polygon + (pts + (xy 76.611045 74.119687) (xy 76.629194 74.199041) (xy 76.681032 74.262504) (xy 76.717058 74.283946) + (xy 76.758021 74.296573) (xy 76.790869 74.299511) (xy 76.870253 74.281362) (xy 76.933792 74.229511) + (xy 76.955259 74.193488) (xy 76.967903 74.152531) (xy 76.970846 74.119687) (xy 76.9527 74.040402) + (xy 76.900854 73.97694) (xy 76.864806 73.955473) (xy 76.823827 73.94282) (xy 76.790869 73.939863) + (xy 76.711516 73.958012) (xy 76.648053 74.00985) (xy 76.62661 74.045876) (xy 76.613983 74.086839) + ) + ) + (polygon + (pts + (xy 76.961076 74.822191) (xy 76.979225 74.901993) (xy 77.031008 74.965723) (xy 77.066959 74.987244) + (xy 77.107834 74.999941) (xy 77.1409 75.00293) (xy 77.220117 74.984774) (xy 77.283523 74.932883) + (xy 77.305007 74.896763) (xy 77.317707 74.855665) (xy 77.320724 74.822191) (xy 77.302575 74.741589) + (xy 77.250878 74.677352) (xy 77.215059 74.655682) (xy 77.174339 74.642853) (xy 77.1409 74.639772) + (xy 77.061954 74.657923) (xy 76.998579 74.709866) (xy 76.977002 74.746096) (xy 76.964189 74.787308) + (xy 76.961076 74.821427) + ) + ) + (polygon + (pts + (xy 77.310954 75.173137) (xy 77.329099 75.252422) (xy 77.380945 75.315884) (xy 77.416993 75.337352) + (xy 77.457972 75.350004) (xy 77.49093 75.352961) (xy 77.570284 75.334812) (xy 77.633747 75.282975) + (xy 77.655189 75.246948) (xy 77.667816 75.205985) (xy 77.670754 75.173137) (xy 77.652605 75.093753) + (xy 77.600754 75.030215) (xy 77.564731 75.008747) (xy 77.523774 74.996103) (xy 77.49093 74.993161) + (xy 77.411615 75.011306) (xy 77.348077 75.063166) (xy 77.326585 75.09921) (xy 77.313915 75.140183) + ) + ) + (polygon + (pts + (xy 77.660984 75.522404) (xy 77.67913 75.598103) (xy 77.731777 75.660509) (xy 77.768477 75.681709) + (xy 77.810193 75.694015) (xy 77.840961 75.69658) (xy 77.920314 75.678431) (xy 77.983777 75.626594) + (xy 78.00522 75.590567) (xy 78.017847 75.549604) (xy 78.020785 75.516756) (xy 78.002636 75.441313) + (xy 77.949943 75.379066) (xy 77.913206 75.357938) (xy 77.871438 75.345704) (xy 77.840961 75.343191) + (xy 77.761508 75.361332) (xy 77.697927 75.413148) (xy 77.676479 75.449111) (xy 77.663877 75.489975) + ) + ) + (polygon + (pts + (xy 78.011015 76.220176) (xy 78.029163 76.299529) (xy 78.081001 76.362992) (xy 78.117028 76.384435) + (xy 78.157991 76.397062) (xy 78.190839 76.4) (xy 78.270222 76.381851) (xy 78.333761 76.33) (xy 78.355229 76.293977) + (xy 78.367873 76.253019) (xy 78.370815 76.220176) (xy 78.35267 76.140891) (xy 78.300823 76.077428) + (xy 78.264776 76.055961) (xy 78.223797 76.043309) (xy 78.190839 76.040352) (xy 78.111485 76.058501) + (xy 78.048022 76.110338) (xy 78.02658 76.146365) (xy 78.013953 76.187328) + ) + ) + (polygon + (pts + (xy 78.011015 75.870908) (xy 78.029163 75.949941) (xy 78.081049 76.013241) (xy 78.117131 76.034637) + (xy 78.158158 76.04722) (xy 78.190839 76.050122) (xy 78.270291 76.031981) (xy 78.333872 75.980165) + (xy 78.355321 75.944202) (xy 78.367922 75.903338) (xy 78.370815 75.870908) (xy 78.35267 75.78931) + (xy 78.301181 75.724751) (xy 78.265522 75.702979) (xy 78.224992 75.690029) (xy 78.190839 75.68681) + (xy 78.111893 75.704962) (xy 78.048518 75.756904) (xy 78.02694 75.793134) (xy 78.014128 75.834347) + (xy 78.011015 75.868466) + ) + ) + (polygon + (pts + (xy 78.0159 75.516756) (xy 78.0302 75.594458) (xy 78.07859 75.657384) (xy 78.113534 75.679364) + (xy 78.153628 75.692793) (xy 78.190839 75.69658) (xy 78.270222 75.678431) (xy 78.333761 75.62658) + (xy 78.355229 75.590557) (xy 78.367873 75.5496) (xy 78.370815 75.516756) (xy 78.35267 75.441379) + (xy 78.299968 75.379133) (xy 78.263208 75.35798) (xy 78.221424 75.345721) (xy 78.190839 75.343191) + (xy 78.111531 75.361332) (xy 78.049101 75.412854) (xy 78.028829 75.448179) (xy 78.017575 75.488285) + (xy 78.0159 75.522404) + ) + ) + (polygon + (pts + (xy 78.011015 75.173137) (xy 78.029163 75.252491) (xy 78.081001 75.315954) (xy 78.117028 75.337396) + (xy 78.157991 75.350023) (xy 78.190839 75.352961) (xy 78.270222 75.334812) (xy 78.333761 75.282961) + (xy 78.355229 75.246938) (xy 78.367873 75.205981) (xy 78.370815 75.173137) (xy 78.35267 75.093822) + (xy 78.30081 75.030284) (xy 78.264766 75.008792) (xy 78.223792 74.996122) (xy 78.190839 74.993161) + (xy 78.111554 75.011306) (xy 78.048091 75.063152) (xy 78.026624 75.0992) (xy 78.013972 75.140179) + ) + ) + (polygon + (pts + (xy 78.011015 74.821427) (xy 78.029163 74.901514) (xy 78.080947 74.96553) (xy 78.116854 74.987139) + (xy 78.157674 74.999906) (xy 78.190839 75.00293) (xy 78.269882 74.984776) (xy 78.333334 74.932828) + (xy 78.354912 74.896623) (xy 78.367716 74.855432) (xy 78.370815 74.821427) (xy 78.35267 74.74138) + (xy 78.300864 74.677289) (xy 78.26494 74.65563) (xy 78.224109 74.64282) (xy 78.190839 74.639772) + (xy 78.111893 74.657923) (xy 78.048518 74.709866) (xy 78.02694 74.746096) (xy 78.014128 74.787308) + ) + ) + (polygon + (pts + (xy 78.011015 74.469718) (xy 78.029163 74.549071) (xy 78.081001 74.612534) (xy 78.117028 74.633977) + (xy 78.157991 74.646604) (xy 78.190839 74.649542) (xy 78.270222 74.631393) (xy 78.333761 74.579542) + (xy 78.355229 74.543519) (xy 78.367873 74.502561) (xy 78.370815 74.469718) (xy 78.35267 74.390403) + (xy 78.30081 74.326865) (xy 78.264766 74.305372) (xy 78.223792 74.292703) (xy 78.190839 74.289741) + (xy 78.111554 74.307887) (xy 78.048091 74.359733) (xy 78.026624 74.395781) (xy 78.013972 74.43676) + ) + ) + (polygon + (pts + (xy 78.011015 74.119687) (xy 78.029163 74.199041) (xy 78.081001 74.262504) (xy 78.117028 74.283946) + (xy 78.157991 74.296573) (xy 78.190839 74.299511) (xy 78.270222 74.281362) (xy 78.333761 74.229511) + (xy 78.355229 74.193488) (xy 78.367873 74.152531) (xy 78.370815 74.119687) (xy 78.35267 74.040402) + (xy 78.300823 73.97694) (xy 78.264776 73.955473) (xy 78.223797 73.94282) (xy 78.190839 73.939863) + (xy 78.111485 73.958012) (xy 78.048022 74.00985) (xy 78.02658 74.045876) (xy 78.013953 74.086839) + ) + ) + (polygon + (pts + (xy 78.888915 74.299511) (xy 78.968299 74.281362) (xy 79.031838 74.229511) (xy 79.053305 74.193488) + (xy 79.065949 74.152531) (xy 79.068892 74.119687) (xy 79.050746 74.040402) (xy 78.9989 73.97694) + (xy 78.962852 73.955473) (xy 78.921873 73.94282) (xy 78.888915 73.939863) (xy 78.809562 73.958012) + (xy 78.746099 74.00985) (xy 78.724656 74.045876) (xy 78.712029 74.086839) (xy 78.709091 74.119687) + (xy 78.72724 74.199041) (xy 78.779078 74.262504) (xy 78.815104 74.283946) (xy 78.856067 74.296573) + ) + ) + (polygon + (pts + (xy 79.059122 74.119687) (xy 79.077271 74.199041) (xy 79.129108 74.262504) (xy 79.165135 74.283946) + (xy 79.206098 74.296573) (xy 79.238946 74.299511) (xy 79.318299 74.281362) (xy 79.381762 74.229525) + (xy 79.403205 74.193498) (xy 79.415832 74.152535) (xy 79.41877 74.119687) (xy 79.400621 74.040334) + (xy 79.348783 73.976871) (xy 79.312757 73.955428) (xy 79.271794 73.942801) (xy 79.238946 73.939863) + (xy 79.159592 73.958012) (xy 79.096129 74.00985) (xy 79.074687 74.045876) (xy 79.06206 74.086839) + ) + ) + (polygon + (pts + (xy 79.409 76.220176) (xy 79.427145 76.299461) (xy 79.478992 76.362923) (xy 79.515039 76.38439) + (xy 79.556018 76.397043) (xy 79.588976 76.4) (xy 79.66833 76.381851) (xy 79.731793 76.330013) (xy 79.753235 76.293987) + (xy 79.765862 76.253023) (xy 79.7688 76.220176) (xy 79.750651 76.140822) (xy 79.698814 76.077359) + (xy 79.662787 76.055917) (xy 79.621824 76.04329) (xy 79.588976 76.040352) (xy 79.509593 76.058501) + (xy 79.446054 76.110352) (xy 79.424586 76.146375) (xy 79.411942 76.187332) + ) + ) + (polygon + (pts + (xy 79.409 75.868466) (xy 79.427145 75.948514) (xy 79.478951 76.012605) (xy 79.514875 76.034264) + (xy 79.555706 76.047074) (xy 79.588976 76.050122) (xy 79.667922 76.03197) (xy 79.731297 75.980028) + (xy 79.752874 75.943798) (xy 79.765687 75.902585) (xy 79.7688 75.868466) (xy 79.750651 75.788349) + (xy 79.698854 75.724257) (xy 79.662951 75.702623) (xy 79.622137 75.689839) (xy 79.588976 75.68681) + (xy 79.510001 75.704962) (xy 79.44655 75.756918) (xy 79.424948 75.793144) (xy 79.412118 75.834351) + ) + ) + (polygon + (pts + (xy 79.409 75.516756) (xy 79.427145 75.596041) (xy 79.478992 75.659504) (xy 79.515039 75.680971) + (xy 79.556018 75.693623) (xy 79.588976 75.69658) (xy 79.66833 75.678431) (xy 79.731793 75.626594) + (xy 79.753235 75.590567) (xy 79.765862 75.549604) (xy 79.7688 75.516756) (xy 79.750651 75.437403) + (xy 79.698814 75.37394) (xy 79.662787 75.352497) (xy 79.621824 75.33987) (xy 79.588976 75.336933) + (xy 79.509593 75.355081) (xy 79.446054 75.406932) (xy 79.424586 75.442955) (xy 79.411942 75.483913) + ) + ) + (polygon + (pts + (xy 79.409 75.169016) (xy 79.427145 75.247344) (xy 79.479075 75.31012) (xy 79.515284 75.331381) + (xy 79.556455 75.343858) (xy 79.588976 75.346702) (xy 79.668744 75.328563) (xy 79.732321 75.27685) + (xy 79.753629 75.241056) (xy 79.766055 75.200396) (xy 79.7688 75.169016) (xy 79.750651 75.090717) + (xy 79.69871 75.027969) (xy 79.662504 75.006739) (xy 79.621329 74.994297) (xy 79.588976 74.991482) + (xy 79.509178 75.009617) (xy 79.445511 75.061334) (xy 79.424176 75.097112) (xy 79.411739 75.13774) + ) + ) + (polygon + (pts + (xy 79.409 74.821427) (xy 79.427145 74.900712) (xy 79.478992 74.964175) (xy 79.515039 74.985642) + (xy 79.556018 74.998295) (xy 79.588976 75.001251) (xy 79.66833 74.983103) (xy 79.731793 74.931265) + (xy 79.753235 74.895238) (xy 79.765862 74.854275) (xy 79.7688 74.821427) (xy 79.750651 74.742044) + (xy 79.6988 74.678505) (xy 79.662777 74.657038) (xy 79.62182 74.644393) (xy 79.588976 74.641451) + (xy 79.509661 74.659597) (xy 79.446123 74.711456) (xy 79.424631 74.7475) (xy 79.411961 74.788474) + ) + ) + (polygon + (pts + (xy 79.409 74.470481) (xy 79.427145 74.550214) (xy 79.478937 74.613944) (xy 79.514909 74.635489) + (xy 79.5558 74.648212) (xy 79.588976 74.651221) (xy 79.668193 74.633064) (xy 79.7316 74.581174) + (xy 79.753084 74.545053) (xy 79.765784 74.503955) (xy 79.7688 74.470481) (xy 79.750651 74.390746) + (xy 79.698834 74.326968) (xy 79.66287 74.30543) (xy 79.621981 74.292724) (xy 79.588976 74.289741) + (xy 79.509797 74.307891) (xy 79.446302 74.359795) (xy 79.424767 74.39592) (xy 79.41203 74.437002) + ) + ) + (polygon + (pts + (xy 79.409 74.119687) (xy 79.427145 74.198972) (xy 79.478992 74.262434) (xy 79.515039 74.283902) + (xy 79.556018 74.296554) (xy 79.588976 74.299511) (xy 79.66833 74.281362) (xy 79.731793 74.229525) + (xy 79.753235 74.193498) (xy 79.765862 74.152535) (xy 79.7688 74.119687) (xy 79.750651 74.040334) + (xy 79.698814 73.976871) (xy 79.662787 73.955428) (xy 79.621824 73.942801) (xy 79.588976 73.939863) + (xy 79.509593 73.958012) (xy 79.446054 74.009863) (xy 79.424586 74.045886) (xy 79.411942 74.086844) + ) + ) + (polygon + (pts + (xy 79.75903 74.119687) (xy 79.777176 74.198972) (xy 79.829022 74.262434) (xy 79.86507 74.283902) + (xy 79.906049 74.296554) (xy 79.939007 74.299511) (xy 80.01836 74.281362) (xy 80.081823 74.229525) + (xy 80.103266 74.193498) (xy 80.115893 74.152535) (xy 80.118831 74.119687) (xy 80.100682 74.040334) + (xy 80.048844 73.976871) (xy 80.012818 73.955428) (xy 79.971855 73.942801) (xy 79.939007 73.939863) + (xy 79.859623 73.958012) (xy 79.796084 74.009863) (xy 79.774617 74.045886) (xy 79.761973 74.086844) + ) + ) + (polygon + (pts + (xy 80.109061 74.119687) (xy 80.12721 74.199041) (xy 80.179047 74.262504) (xy 80.215074 74.283946) + (xy 80.256037 74.296573) (xy 80.288885 74.299511) (xy 80.368268 74.281362) (xy 80.431807 74.229511) + (xy 80.453275 74.193488) (xy 80.465919 74.152531) (xy 80.468861 74.119687) (xy 80.450716 74.040402) + (xy 80.39887 73.97694) (xy 80.362822 73.955473) (xy 80.321843 73.94282) (xy 80.288885 73.939863) + (xy 80.209531 73.958012) (xy 80.146068 74.00985) (xy 80.124626 74.045876) (xy 80.111999 74.086839) + ) + ) + ) + ) + (gr_text "Shoutout to \nProfessor Eric Hernandez\nand \nHatsune Miku" + (at 152.65125 179.075 0) + (layer "F.SilkS") + (uuid "f87c3cd7-5c59-425e-9cec-d22a270de6ae") + (effects + (font + (face "NType 82 Headline") + (size 1.5 1.5) + (thickness 0.3) + (bold yes) + ) + (justify bottom) + ) + (render_cache "Shoutout to \nProfessor Eric Hernandez\nand \nHatsune Miku" + 0 + (polygon + (pts + (xy 147.784742 171.283447 + ) (xy 147.843468 171.280525) (xy 147.899902 171.271797) (xy 147.952139 171.257793) (xy 148.001323 171.2384) + (xy 148.045435 171.214656) (xy 148.085917 171.185999) (xy 148.121128 171.153779) (xy 148.152256 171.11708) + (xy 148.178268 171.077157) (xy 148.199771 171.03308) (xy 148.216239 170.985622) (xy 148.227711 170.934203) + (xy 148.234912 170.84381) (xy 148.232035 170.794071) (xy 148.22362 170.748023) (xy 148.191608 170.666362) + (xy 148.139136 170.594225) (xy 148.063066 170.528154) (xy 147.956572 170.465389) (xy 147.916083 170.446304) + (xy 147.70405 170.351874) (xy 147.64552 170.32223) (xy 147.594605 170.288992) (xy 147.557562 170.257504) + (xy 147.52678 170.222916) (xy 147.504726 170.188999) (xy 147.488234 170.152237) (xy 147.47792 170.114461) + (xy 147.473064 170.073825) (xy 147.472691 170.058416) (xy 147.475539 170.023009) (xy 147.483753 169.990865) + (xy 147.514917 169.935626) (xy 147.565192 169.891914) (xy 147.63445 169.861664) (xy 147.719542 169.849371) + (xy 147.72594 169.849314) (xy 147.76753 169.852181) (xy 147.806382 169.860529) (xy 147.877591 169.892964) + (xy 147.942491 169.947341) (xy 148.002554 170.027175) (xy 148.057768 170.137684) (xy 148.107417 170.285928) + (xy 148.114195 170.311208) (xy 148.203405 170.311208) (xy 148.203405 169.782819) (xy 148.113554 169.782819) + (xy 148.113554 169.907749) (xy 148.083604 169.928357) (xy 148.045494 169.883487) (xy 148.00287 169.844542) + (xy 147.963608 169.817398) (xy 147.919839 169.79503) (xy 147.874403 169.778786) (xy 147.823948 169.767276) + (xy 147.723834 169.759371) (xy 147.666317 169.762284) (xy 147.610574 169.770945) (xy 147.55784 169.785038) + (xy 147.508013 169.804523) (xy 147.463117 169.82841) (xy 147.422021 169.857148) (xy 147.386777 169.889062) + (xy 147.355952 169.925233) (xy 147.331028 169.963736) (xy 147.310977 170.005981) (xy 147.296591 170.050362) + (xy 147.287517 170.09811) (xy 147.284105 170.152938) (xy 147.28697 170.205509) (xy 147.2953 170.254236) + (xy 147.327082 170.341431) (xy 147.378538 170.417747) (xy 147.450973 170.485316) (xy 147.547385 170.545004) + (xy 147.571335 170.556672) (xy 147.787764 170.657422) (xy 147.922232 170.727013) (xy 147.971221 170.763261) + (xy 148.008009 170.804455) (xy 148.025007 170.834506) (xy 148.037078 170.868509) (xy 148.046418 170.948773) + (xy 148.035226 171.018989) (xy 148.002524 171.081898) (xy 147.949272 171.134815) (xy 147.877526 171.173294) + (xy 147.836034 171.185515) (xy 147.791922 171.192291) (xy 147.761661 171.193596) (xy 147.708181 171.190708) + (xy 147.659057 171.182216) (xy 147.615288 171.168806) (xy 147.575412 171.150565) (xy 147.506746 171.100419) + (xy 147.450523 171.030935) (xy 147.406063 170.939128) (xy 147.374568 170.820739) (xy 147.36553 170.759454) + (xy 147.356828 170.685449) (xy 147.267252 170.685449) (xy 147.267252 171.26) (xy 147.357195 171.26) + (xy 147.357195 171.141114) (xy 147.379268 171.120873) (xy 147.426309 171.168094) (xy 147.476047 171.207118) + (xy 147.51846 171.232058) (xy 147.565044 171.252034) (xy 147.669747 171.276554) + ) + ) + (polygon + (pts + (xy 148.830529 171.26) (xy 148.830529 171.170149) (xy 148.76669 171.170149) (xy 148.739283 171.167229) + (xy 148.717425 171.158518) (xy 148.703036 171.146344) (xy 148.692919 171.129922) (xy 148.685632 171.089182) + (xy 148.685632 170.642676) (xy 148.712149 170.575098) (xy 148.742513 170.515171) (xy 148.772348 170.469544) + (xy 148.805118 170.431137) (xy 148.836338 170.403822) (xy 148.869801 170.38298) (xy 148.902013 170.370045) + (xy 148.936045 170.363062) (xy 148.95784 170.361857) (xy 148.995137 170.364744) (xy 149.026771 170.373228) + (xy 149.051185 170.385774) (xy 149.071311 170.402642) (xy 149.099883 170.448979) (xy 149.114883 170.518327) + (xy 149.116568 170.55832) (xy 149.116568 171.089182) (xy 149.113649 171.11654) (xy 149.104946 171.138355) + (xy 149.092773 171.152732) (xy 149.076357 171.162842) (xy 149.03551 171.170149) (xy 148.971671 171.170149) + (xy 148.971671 171.26) (xy 149.498319 171.26) (xy 149.498319 171.170149) (xy 149.413506 171.170149) + (xy 149.386099 171.167229) (xy 149.364241 171.158518) (xy 149.349853 171.146344) (xy 149.339736 171.129922) + (xy 149.332448 171.089182) (xy 149.332448 170.55832) (xy 149.329471 170.493857) (xy 149.320354 170.436114) + (xy 149.307247 170.39157) (xy 149.289122 170.35233) (xy 149.268299 170.321554) (xy 149.243106 170.295275) + (xy 149.214805 170.274426) (xy 149.18227 170.257835) (xy 149.102549 170.237522) (xy 149.045951 170.23418) + (xy 148.954817 170.245033) (xy 148.873492 170.276195) (xy 148.801635 170.32635) (xy 148.741238 170.393556) + (xy 148.698241 170.470355) (xy 148.69534 170.47772) (xy 148.685632 170.47772) (xy 148.685632 169.782819) + (xy 148.30388 169.782819) (xy 148.30388 169.872761) (xy 148.388693 169.872761) (xy 148.416019 169.875681) + (xy 148.437832 169.884393) (xy 148.452226 169.896584) (xy 148.462367 169.913035) (xy 148.469752 169.954277) + (xy 148.469752 171.089182) (xy 148.466833 171.11654) (xy 148.45813 171.138355) (xy 148.445957 171.152732) + (xy 148.429541 171.162842) (xy 148.388693 171.170149) (xy 148.30388 171.170149) (xy 148.30388 171.26) + ) + ) + (polygon + (pts + (xy 149.996922 170.234704) (xy 150.050653 170.240101) (xy 150.101664 170.251096) (xy 150.150827 170.267794) + (xy 150.196832 170.289687) (xy 150.240645 170.317245) (xy 150.280781 170.349584) (xy 150.317988 170.387389) + (xy 150.350949 170.429471) (xy 150.379993 170.476383) (xy 150.404229 170.52693) (xy 150.423596 170.581163) + (xy 150.437671 170.638255) (xy 150.446229 170.697576) (xy 150.449126 170.758905) (xy 150.447892 170.799047) + (xy 150.441264 170.859222) (xy 150.429085 170.917108) (xy 150.389477 171.023147) (xy 150.331996 171.11358) + (xy 150.259636 171.186065) (xy 150.17484 171.239243) (xy 150.079228 171.272117) (xy 150.027744 171.280565) + (xy 149.973677 171.283447) (xy 149.950483 171.282925) (xy 149.89674 171.277533) (xy 149.845719 171.266545) + (xy 149.796548 171.249854) (xy 149.750535 171.227968) (xy 149.706718 171.200419) (xy 149.666577 171.16809) + (xy 149.629368 171.130298) (xy 149.596405 171.088229) (xy 149.567361 171.041333) (xy 149.543125 170.990802) + (xy 149.523757 170.936588) (xy 149.509682 170.879515) (xy 149.501125 170.820214) (xy 149.498228 170.758905) + (xy 149.499467 170.718663) (xy 149.499655 170.716956) (xy 149.739295 170.716956) (xy 149.739295 170.800762) + (xy 149.743421 170.908511) (xy 149.762134 171.022718) (xy 149.792551 171.098917) (xy 149.834118 171.149694) + (xy 149.860774 171.168165) (xy 149.890986 171.181475) (xy 149.929905 171.190615) (xy 149.973677 171.193596) + (xy 150.009237 171.191678) (xy 150.074717 171.174194) (xy 150.101946 171.158466) (xy 150.12589 171.137805) + (xy 150.148102 171.109803) (xy 150.166672 171.075632) (xy 150.183619 171.028495) (xy 150.19602 170.972583) + (xy 150.205088 170.89352) (xy 150.208058 170.800762) (xy 150.208058 170.716956) (xy 150.205019 170.61736) + (xy 150.188132 170.497092) (xy 150.15984 170.419615) (xy 150.120453 170.368948) (xy 150.094216 170.350278) + (xy 150.064278 170.336947) (xy 150.021962 170.327191) (xy 149.973677 170.324122) (xy 149.935171 170.326004) + (xy 149.8692 170.342287) (xy 149.819351 170.376043) (xy 149.79793 170.402294) (xy 149.779983 170.434844) + (xy 149.763473 170.480803) (xy 149.751342 170.536387) (xy 149.742267 170.61838) (xy 149.739295 170.716956) + (xy 149.499655 170.716956) (xy 149.506102 170.658472) (xy 149.51829 170.600571) (xy 149.55791 170.494508) + (xy 149.615398 170.404059) (xy 149.687759 170.331565) (xy 149.772547 170.278385) (xy 149.868145 170.24551) + (xy 149.91962 170.237061) (xy 149.973677 170.23418) + ) + ) + (polygon + (pts + (xy 150.879421 171.283447) (xy 150.926877 171.280606) (xy 150.970351 171.272442) (xy 151.047939 171.241313) + (xy 151.11545 171.190902) (xy 151.174903 171.119825) (xy 151.227175 171.025615) (xy 151.232047 171.01481) + (xy 151.242213 171.01481) (xy 151.263187 171.26) (xy 151.608944 171.26) (xy 151.608944 171.170149) + (xy 151.52413 171.170149) (xy 151.496764 171.16723) (xy 151.474929 171.158522) (xy 151.460532 171.146343) + (xy 151.450401 171.129914) (xy 151.443072 171.088999) (xy 151.443072 170.257627) (xy 151.061321 170.257627) + (xy 151.061321 170.347569) (xy 151.146134 170.347569) (xy 151.1735 170.350488) (xy 151.195336 170.359196) + (xy 151.209732 170.371375) (xy 151.219863 170.387804) (xy 151.227192 170.428719) (xy 151.227192 170.784092) + (xy 151.221983 170.877996) (xy 151.211388 170.923608) (xy 151.191838 170.970663) (xy 151.153279 171.039188) + (xy 151.113576 171.091789) (xy 151.085367 171.117964) (xy 151.054595 171.137491) (xy 151.024297 171.149395) + (xy 150.99072 171.156175) (xy 150.959288 171.157967) (xy 150.919891 171.154999) (xy 150.886333 171.145945) + (xy 150.862234 171.133199) (xy 150.842367 171.115694) (xy 150.816076 171.068424) (xy 150.804863 170.996775) + (xy 150.804683 170.984585) (xy 150.804683 170.257627) (xy 150.422931 170.257627) (xy 150.422931 170.347569) + (xy 150.507744 170.347569) (xy 150.535151 170.350489) (xy 150.557009 170.3592) (xy 150.571398 170.371374) + (xy 150.581515 170.387796) (xy 150.588802 170.428536) (xy 150.588802 170.959398) (xy 150.591758 171.022182) + (xy 150.60072 171.078485) (xy 150.613808 171.122898) (xy 150.631834 171.162058) (xy 150.652737 171.193219) + (xy 150.677935 171.219864) (xy 150.738847 171.258248) (xy 150.818187 171.279503) + ) + ) + (polygon + (pts + (xy 152.11187 171.283447) (xy 152.157625 171.280548) (xy 152.19958 171.271979) (xy 152.236372 171.25854) + (xy 152.269576 171.240188) (xy 152.324726 171.189883) (xy 152.366307 171.120097) (xy 152.393301 171.028041) + (xy 152.40258 170.916808) (xy 152.40258 170.764492) (xy 152.312638 170.764492) (xy 152.312638 170.918914) + (xy 152.309723 170.982229) (xy 152.301045 171.035502) (xy 152.288898 171.073909) (xy 152.272536 171.105212) + (xy 152.254294 171.127459) (xy 152.232749 171.144313) (xy 152.181393 171.162283) (xy 152.153911 171.164195) + (xy 152.120381 171.16128) (xy 152.089989 171.152598) (xy 152.064241 171.139113) (xy 152.041683 171.120602) + (xy 152.006877 171.068895) (xy 151.98637 170.994289) (xy 151.982544 170.935767) (xy 151.982544 170.428719) + (xy 151.985462 170.40131) (xy 151.994165 170.379448) (xy 152.006336 170.365037) (xy 152.02275 170.354899) + (xy 152.063602 170.347569) (xy 152.3185 170.347569) (xy 152.3185 170.257627) (xy 151.982544 170.257627) + (xy 151.982544 169.89227) (xy 151.872176 169.89227) (xy 151.838105 170.104761) (xy 151.82937 170.140957) + (xy 151.815627 170.172147) (xy 151.798328 170.196863) (xy 151.77684 170.217298) (xy 151.721631 170.24554) + (xy 151.645272 170.257444) (xy 151.633124 170.257627) (xy 151.510483 170.257627) (xy 151.510483 170.347569) + (xy 151.685605 170.347569) (xy 151.712972 170.350488) (xy 151.734807 170.359196) (xy 151.749204 170.371375) + (xy 151.759335 170.387804) (xy 151.766664 170.428719) (xy 151.766664 170.927341) (xy 151.76953 170.985461) + (xy 151.777875 171.037733) (xy 151.790882 171.083153) (xy 151.808354 171.123409) (xy 151.829774 171.158455) + (xy 151.854902 171.188767) (xy 151.916546 171.236861) (xy 151.994095 171.268681) (xy 152.088783 171.282942) + ) + ) + (polygon + (pts + (xy 153.009901 170.234704) (xy 153.063633 170.240101) (xy 153.114644 170.251096) (xy 153.163807 170.267794) + (xy 153.209812 170.289687) (xy 153.253624 170.317245) (xy 153.293761 170.349584) (xy 153.330968 170.387389) + (xy 153.363929 170.429471) (xy 153.392972 170.476383) (xy 153.417208 170.52693) (xy 153.436576 170.581163) + (xy 153.450651 170.638255) (xy 153.459209 170.697576) (xy 153.462106 170.758905) (xy 153.460872 170.799047) + (xy 153.454244 170.859222) (xy 153.442065 170.917108) (xy 153.402456 171.023147) (xy 153.344976 171.11358) + (xy 153.272616 171.186065) (xy 153.18782 171.239243) (xy 153.092208 171.272117) (xy 153.040723 171.280565) + (xy 152.986657 171.283447) (xy 152.963463 171.282925) (xy 152.90972 171.277533) (xy 152.858699 171.266545) + (xy 152.809528 171.249854) (xy 152.763515 171.227968) (xy 152.719698 171.200419) (xy 152.679557 171.16809) + (xy 152.642348 171.130298) (xy 152.609385 171.088229) (xy 152.580341 171.041333) (xy 152.556105 170.990802) + (xy 152.536737 170.936588) (xy 152.522662 170.879515) (xy 152.514105 170.820214) (xy 152.511207 170.758905) + (xy 152.512447 170.718663) (xy 152.512635 170.716956) (xy 152.752275 170.716956) (xy 152.752275 170.800762) + (xy 152.756401 170.908511) (xy 152.775113 171.022718) (xy 152.80553 171.098917) (xy 152.847097 171.149694) + (xy 152.873753 171.168165) (xy 152.903965 171.181475) (xy 152.942885 171.190615) (xy 152.986657 171.193596) + (xy 153.022217 171.191678) (xy 153.087697 171.174194) (xy 153.114926 171.158466) (xy 153.13887 171.137805) + (xy 153.161082 171.109803) (xy 153.179652 171.075632) (xy 153.196599 171.028495) (xy 153.209 170.972583) + (xy 153.218068 170.89352) (xy 153.221038 170.800762) (xy 153.221038 170.716956) (xy 153.217999 170.61736) + (xy 153.201112 170.497092) (xy 153.17282 170.419615) (xy 153.133432 170.368948) (xy 153.107196 170.350278) + (xy 153.077257 170.336947) (xy 153.034942 170.327191) (xy 152.986657 170.324122) (xy 152.948151 170.326004) + (xy 152.882179 170.342287) (xy 152.832331 170.376043) (xy 152.81091 170.402294) (xy 152.792962 170.434844) + (xy 152.776453 170.480803) (xy 152.764321 170.536387) (xy 152.755246 170.61838) (xy 152.752275 170.716956) + (xy 152.512635 170.716956) (xy 152.519082 170.658472) (xy 152.531269 170.600571) (xy 152.57089 170.494508) + (xy 152.628377 170.404059) (xy 152.700738 170.331565) (xy 152.785527 170.278385) (xy 152.881125 170.24551) + (xy 152.9326 170.237061) (xy 152.986657 170.23418) + ) + ) + (polygon + (pts + (xy 153.892401 171.283447) (xy 153.939857 171.280606) (xy 153.983331 171.272442) (xy 154.060919 171.241313) + (xy 154.12843 171.190902) (xy 154.187883 171.119825) (xy 154.240155 171.025615) (xy 154.245026 171.01481) + (xy 154.255193 171.01481) (xy 154.276167 171.26) (xy 154.621924 171.26) (xy 154.621924 171.170149) + (xy 154.53711 171.170149) (xy 154.509744 171.16723) (xy 154.487909 171.158522) (xy 154.473512 171.146343) + (xy 154.463381 171.129914) (xy 154.456052 171.088999) (xy 154.456052 170.257627) (xy 154.074301 170.257627) + (xy 154.074301 170.347569) (xy 154.159114 170.347569) (xy 154.18648 170.350488) (xy 154.208315 170.359196) + (xy 154.222712 170.371375) (xy 154.232843 170.387804) (xy 154.240172 170.428719) (xy 154.240172 170.784092) + (xy 154.234963 170.877996) (xy 154.224368 170.923608) (xy 154.204818 170.970663) (xy 154.166258 171.039188) + (xy 154.126556 171.091789) (xy 154.098347 171.117964) (xy 154.067574 171.137491) (xy 154.037277 171.149395) + (xy 154.003699 171.156175) (xy 153.972268 171.157967) (xy 153.93287 171.154999) (xy 153.899313 171.145945) + (xy 153.875214 171.133199) (xy 153.855347 171.115694) (xy 153.829056 171.068424) (xy 153.817843 170.996775) + (xy 153.817662 170.984585) (xy 153.817662 170.257627) (xy 153.435911 170.257627) (xy 153.435911 170.347569) + (xy 153.520724 170.347569) (xy 153.548131 170.350489) (xy 153.569989 170.3592) (xy 153.584377 170.371374) + (xy 153.594494 170.387796) (xy 153.601782 170.428536) (xy 153.601782 170.959398) (xy 153.604737 171.022182) + (xy 153.6137 171.078485) (xy 153.626788 171.122898) (xy 153.644814 171.162058) (xy 153.665717 171.193219) + (xy 153.690915 171.219864) (xy 153.751827 171.258248) (xy 153.831167 171.279503) + ) + ) + (polygon + (pts + (xy 155.12485 171.283447) (xy 155.170605 171.280548) (xy 155.212559 171.271979) (xy 155.249352 171.25854) + (xy 155.282555 171.240188) (xy 155.337706 171.189883) (xy 155.379286 171.120097) (xy 155.406281 171.028041) + (xy 155.41556 170.916808) (xy 155.41556 170.764492) (xy 155.325618 170.764492) (xy 155.325618 170.918914) + (xy 155.322703 170.982229) (xy 155.314025 171.035502) (xy 155.301878 171.073909) (xy 155.285516 171.105212) + (xy 155.267274 171.127459) (xy 155.245729 171.144313) (xy 155.194373 171.162283) (xy 155.16689 171.164195) + (xy 155.133361 171.16128) (xy 155.102969 171.152598) (xy 155.077221 171.139113) (xy 155.054663 171.120602) + (xy 155.019857 171.068895) (xy 154.99935 170.994289) (xy 154.995523 170.935767) (xy 154.995523 170.428719) + (xy 154.998442 170.40131) (xy 155.007145 170.379448) (xy 155.019316 170.365037) (xy 155.03573 170.354899) + (xy 155.076582 170.347569) (xy 155.33148 170.347569) (xy 155.33148 170.257627) (xy 154.995523 170.257627) + (xy 154.995523 169.89227) (xy 154.885156 169.89227) (xy 154.851084 170.104761) (xy 154.84235 170.140957) + (xy 154.828607 170.172147) (xy 154.811308 170.196863) (xy 154.78982 170.217298) (xy 154.734611 170.24554) + (xy 154.658252 170.257444) (xy 154.646104 170.257627) (xy 154.523463 170.257627) (xy 154.523463 170.347569) + (xy 154.698585 170.347569) (xy 154.725951 170.350488) (xy 154.747787 170.359196) (xy 154.762183 170.371375) + (xy 154.772314 170.387804) (xy 154.779643 170.428719) (xy 154.779643 170.927341) (xy 154.78251 170.985461) + (xy 154.790855 171.037733) (xy 154.803861 171.083153) (xy 154.821333 171.123409) (xy 154.842753 171.158455) + (xy 154.867882 171.188767) (xy 154.929526 171.236861) (xy 155.007074 171.268681) (xy 155.101763 171.282942) + ) + ) + (polygon + (pts + (xy 156.388074 171.283447) (xy 156.433829 171.280548) (xy 156.475783 171.271979) (xy 156.512576 171.25854) + (xy 156.54578 171.240188) (xy 156.60093 171.189883) (xy 156.64251 171.120097) (xy 156.669505 171.028041) + (xy 156.678784 170.916808) (xy 156.678784 170.764492) (xy 156.588842 170.764492) (xy 156.588842 170.918914) + (xy 156.585927 170.982229) (xy 156.577249 171.035502) (xy 156.565102 171.073909) (xy 156.54874 171.105212) + (xy 156.530498 171.127459) (xy 156.508953 171.144313) (xy 156.457597 171.162283) (xy 156.430114 171.164195) + (xy 156.396585 171.16128) (xy 156.366193 171.152598) (xy 156.340445 171.139113) (xy 156.317887 171.120602) + (xy 156.283081 171.068895) (xy 156.262574 170.994289) (xy 156.258747 170.935767) (xy 156.258747 170.428719) + (xy 156.261666 170.40131) (xy 156.270369 170.379448) (xy 156.28254 170.365037) (xy 156.298954 170.354899) + (xy 156.339806 170.347569) (xy 156.594704 170.347569) (xy 156.594704 170.257627) (xy 156.258747 170.257627) + (xy 156.258747 169.89227) (xy 156.14838 169.89227) (xy 156.114308 170.104761) (xy 156.105574 170.140957) + (xy 156.091831 170.172147) (xy 156.074532 170.196863) (xy 156.053044 170.217298) (xy 155.997835 170.24554) + (xy 155.921476 170.257444) (xy 155.909328 170.257627) (xy 155.786687 170.257627) (xy 155.786687 170.347569) + (xy 155.961809 170.347569) (xy 155.989175 170.350488) (xy 156.011011 170.359196) (xy 156.025407 170.371375) + (xy 156.035538 170.387804) (xy 156.042867 170.428719) (xy 156.042867 170.927341) (xy 156.045734 170.985461) + (xy 156.054079 171.037733) (xy 156.067085 171.083153) (xy 156.084557 171.123409) (xy 156.105977 171.158455) + (xy 156.131106 171.188767) (xy 156.19275 171.236861) (xy 156.270299 171.268681) (xy 156.364987 171.282942) + ) + ) + (polygon + (pts + (xy 157.286105 170.234704) (xy 157.339837 170.240101) (xy 157.390847 170.251096) (xy 157.440011 170.267794) + (xy 157.486016 170.289687) (xy 157.529828 170.317245) (xy 157.569965 170.349584) (xy 157.607172 170.387389) + (xy 157.640133 170.429471) (xy 157.669176 170.476383) (xy 157.693412 170.52693) (xy 157.71278 170.581163) + (xy 157.726855 170.638255) (xy 157.735412 170.697576) (xy 157.73831 170.758905) (xy 157.737075 170.799047) + (xy 157.730448 170.859222) (xy 157.718268 170.917108) (xy 157.67866 171.023147) (xy 157.62118 171.11358) + (xy 157.548819 171.186065) (xy 157.464024 171.239243) (xy 157.368412 171.272117) (xy 157.316927 171.280565) + (xy 157.26286 171.283447) (xy 157.239667 171.282925) (xy 157.185924 171.277533) (xy 157.134903 171.266545) + (xy 157.085732 171.249854) (xy 157.039719 171.227968) (xy 156.995902 171.200419) (xy 156.955761 171.16809) + (xy 156.918552 171.130298) (xy 156.885589 171.088229) (xy 156.856545 171.041333) (xy 156.832309 170.990802) + (xy 156.812941 170.936588) (xy 156.798866 170.879515) (xy 156.790308 170.820214) (xy 156.787411 170.758905) + (xy 156.788651 170.718663) (xy 156.788839 170.716956) (xy 157.028479 170.716956) (xy 157.028479 170.800762) + (xy 157.032605 170.908511) (xy 157.051317 171.022718) (xy 157.081734 171.098917) (xy 157.123301 171.149694) + (xy 157.149957 171.168165) (xy 157.180169 171.181475) (xy 157.219088 171.190615) (xy 157.26286 171.193596) + (xy 157.298421 171.191678) (xy 157.363901 171.174194) (xy 157.39113 171.158466) (xy 157.415073 171.137805) + (xy 157.437286 171.109803) (xy 157.455856 171.075632) (xy 157.472802 171.028495) (xy 157.485204 170.972583) + (xy 157.494272 170.89352) (xy 157.497242 170.800762) (xy 157.497242 170.716956) (xy 157.494202 170.61736) + (xy 157.477316 170.497092) (xy 157.449024 170.419615) (xy 157.409636 170.368948) (xy 157.383399 170.350278) + (xy 157.353461 170.336947) (xy 157.311146 170.327191) (xy 157.26286 170.324122) (xy 157.224354 170.326004) + (xy 157.158383 170.342287) (xy 157.108534 170.376043) (xy 157.087114 170.402294) (xy 157.069166 170.434844) + (xy 157.052656 170.480803) (xy 157.040525 170.536387) (xy 157.03145 170.61838) (xy 157.028479 170.716956) + (xy 156.788839 170.716956) (xy 156.795286 170.658472) (xy 156.807473 170.600571) (xy 156.847094 170.494508) + (xy 156.904581 170.404059) (xy 156.976942 170.331565) (xy 157.06173 170.278385) (xy 157.157328 170.24551) + (xy 157.208804 170.237061) (xy 157.26286 170.23418) + ) + ) + (polygon + (pts + (xy 142.461856 172.304909) (xy 142.51308 172.312636) (xy 142.561443 172.325776) (xy 142.606596 172.344017) + (xy 142.648243 172.367067) (xy 142.719295 172.42594) (xy 142.772207 172.499358) (xy 142.805134 172.584495) + (xy 142.813593 172.630603) (xy 142.816476 172.678983) (xy 142.81469 172.717179) (xy 142.80725 172.764483) + (xy 142.794301 172.809227) (xy 142.775882 172.851643) (xy 142.752433 172.890863) (xy 142.723964 172.926937) + (xy 142.691002 172.959162) (xy 142.653703 172.987354) (xy 142.612521 173.011067) (xy 142.56788 173.029967) + (xy 142.520018 173.043813) (xy 142.46962 173.052265) (xy 142.416681 173.055148) (xy 142.018535 173.055148) + (xy 142.018535 173.608816) (xy 142.025905 173.649906) (xy 142.03605 173.666342) (xy 142.050454 173.678527) + (xy 142.072267 173.68723) (xy 142.099593 173.690149) (xy 142.201259 173.690149) (xy 142.201259 173.78) + (xy 141.61993 173.78) (xy 141.61993 173.690149) (xy 141.721596 173.690149) (xy 141.762453 173.682795) + (xy 141.778864 173.67263) (xy 141.791033 173.658185) (xy 141.799736 173.636276) (xy 141.802654 173.608816) + (xy 141.802654 172.473636) (xy 142.018535 172.473636) (xy 142.018535 172.965205) (xy 142.378854 172.965205) + (xy 142.445918 172.958334) (xy 142.510238 172.933132) (xy 142.53617 172.913918) (xy 142.557789 172.890564) + (xy 142.57585 172.861693) (xy 142.589039 172.828646) (xy 142.597766 172.788464) (xy 142.600687 172.743921) + (xy 142.600687 172.614045) (xy 142.593082 172.544253) (xy 142.567417 172.481289) (xy 142.524838 172.434732) + (xy 142.496304 172.417153) (xy 142.46333 172.404175) (xy 142.423543 172.395653) (xy 142.378854 172.392761) + (xy 142.099593 172.392761) (xy 142.058758 172.400059) (xy 142.042334 172.410165) (xy 142.030156 172.424533) + (xy 142.021453 172.446321) (xy 142.018535 172.473636) (xy 141.802654 172.473636) (xy 141.795374 172.432972) + (xy 141.785255 172.416558) (xy 141.770861 172.404387) (xy 141.749003 172.39568) (xy 141.721596 172.392761) + (xy 141.61993 172.392761) (xy 141.61993 172.302819) (xy 142.416681 172.302819) + ) + ) + (polygon + (pts + (xy 143.505058 173.78) (xy 143.505058 173.690149) (xy 143.315189 173.690149) (xy 143.287823 173.68723) + (xy 143.265988 173.678522) (xy 143.251591 173.666343) (xy 143.24146 173.649914) (xy 143.234131 173.608999) + (xy 143.234131 173.174033) (xy 143.251298 173.101855) (xy 143.272476 173.037991) (xy 143.296065 172.984991) + (xy 143.322677 172.939752) (xy 143.350108 172.904477) (xy 143.379685 172.876203) (xy 143.409069 172.85617) + (xy 143.439909 172.842407) (xy 143.4937 172.833589) (xy 143.528332 172.836214) (xy 143.550996 172.842864) + (xy 143.551677 172.843114) (xy 143.551677 172.854289) (xy 143.521852 172.887261) (xy 143.508807 172.914334) + (xy 143.50185 172.944032) (xy 143.501302 172.954489) (xy 143.504108 172.981591) (xy 143.512022 173.005166) + (xy 143.541371 173.042365) (xy 143.586241 173.064251) (xy 143.64002 173.065681) (xy 143.665792 173.057699) + (xy 143.689418 173.043784) (xy 143.70828 173.025535) (xy 143.72331 173.001991) (xy 143.733063 172.975028) + (xy 143.737818 172.943227) (xy 143.738157 172.931408) (xy 143.735293 172.896717) (xy 143.726972 172.865744) + (xy 143.713838 172.838897) (xy 143.69619 172.815699) (xy 143.647237 172.779493) (xy 143.579196 172.758207) + (xy 143.527314 172.75418) (xy 143.484206 172.757016) (xy 143.444612 172.765149) (xy 143.373632 172.796326) + (xy 143.313316 172.846496) (xy 143.264753 172.914945) (xy 143.231859 172.997948) (xy 143.228819 173.010268) + (xy 143.219385 173.010268) (xy 143.219385 172.777627) (xy 142.85238 172.777627) (xy 142.85238 172.867569) + (xy 142.937193 172.867569) (xy 142.964559 172.870488) (xy 142.986395 172.879196) (xy 143.000791 172.891375) + (xy 143.010922 172.907804) (xy 143.018251 172.948719) (xy 143.018251 173.608999) (xy 143.015333 173.636408) + (xy 143.00663 173.65827) (xy 142.994458 173.672681) (xy 142.978045 173.682819) (xy 142.937193 173.690149) + (xy 142.85238 173.690149) (xy 142.85238 173.78) + ) + ) + (polygon + (pts + (xy 144.26845 172.754704) (xy 144.322182 172.760101) (xy 144.373192 172.771096) (xy 144.422355 172.787794) + (xy 144.468361 172.809687) (xy 144.512173 172.837245) (xy 144.552309 172.869584) (xy 144.589516 172.907389) + (xy 144.622478 172.949471) (xy 144.651521 172.996383) (xy 144.675757 173.04693) (xy 144.695125 173.101163) + (xy 144.709199 173.158255) (xy 144.717757 173.217576) (xy 144.720654 173.278905) (xy 144.71942 173.319047) + (xy 144.712793 173.379222) (xy 144.700613 173.437108) (xy 144.661005 173.543147) (xy 144.603525 173.63358) + (xy 144.531164 173.706065) (xy 144.446368 173.759243) (xy 144.350756 173.792117) (xy 144.299272 173.800565) + (xy 144.245205 173.803447) (xy 144.222011 173.802925) (xy 144.168268 173.797533) (xy 144.117248 173.786545) + (xy 144.068076 173.769854) (xy 144.022063 173.747968) (xy 143.978246 173.720419) (xy 143.938106 173.68809) + (xy 143.900897 173.650298) (xy 143.867933 173.608229) (xy 143.83889 173.561333) (xy 143.814653 173.510802) + (xy 143.795285 173.456588) (xy 143.781211 173.399515) (xy 143.772653 173.340214) (xy 143.769756 173.278905) + (xy 143.770995 173.238663) (xy 143.771183 173.236956) (xy 144.010823 173.236956) (xy 144.010823 173.320762) + (xy 144.014949 173.428511) (xy 144.033662 173.542718) (xy 144.064079 173.618917) (xy 144.105646 173.669694) + (xy 144.132302 173.688165) (xy 144.162514 173.701475) (xy 144.201433 173.710615) (xy 144.245205 173.713596) + (xy 144.280765 173.711678) (xy 144.346245 173.694194) (xy 144.373474 173.678466) (xy 144.397418 173.657805) + (xy 144.41963 173.629803) (xy 144.4382 173.595632) (xy 144.455147 173.548495) (xy 144.467549 173.492583) + (xy 144.476616 173.41352) (xy 144.479587 173.320762) (xy 144.479587 173.236956) (xy 144.476547 173.13736) + (xy 144.45966 173.017092) (xy 144.431369 172.939615) (xy 144.391981 172.888948) (xy 144.365744 172.870278) + (xy 144.335806 172.856947) (xy 144.293491 172.847191) (xy 144.245205 172.844122) (xy 144.206699 172.846004) + (xy 144.140728 172.862287) (xy 144.090879 172.896043) (xy 144.069458 172.922294) (xy 144.051511 172.954844) + (xy 144.035001 173.000803) (xy 144.02287 173.056387) (xy 144.013795 173.13838) (xy 144.010823 173.236956) + (xy 143.771183 173.236956) (xy 143.777631 173.178472) (xy 143.789818 173.120571) (xy 143.829438 173.014508) + (xy 143.886926 172.924059) (xy 143.959287 172.851565) (xy 144.044075 172.798385) (xy 144.139673 172.76551) + (xy 144.191149 172.757061) (xy 144.245205 172.75418) + ) + ) + (polygon + (pts + (xy 145.418853 173.78) (xy 145.418853 173.690149) (xy 145.229076 173.690149) (xy 145.20171 173.68723) + (xy 145.179875 173.678522) (xy 145.165478 173.666343) (xy 145.155347 173.649914) (xy 145.148018 173.608999) + (xy 145.148018 172.948719) (xy 145.150936 172.92131) (xy 145.15964 172.899448) (xy 145.171811 172.885037) + (xy 145.188224 172.874899) (xy 145.229076 172.867569) (xy 145.460893 172.867569) (xy 145.460893 172.777627) + (xy 145.148018 172.777627) (xy 145.148018 172.546085) (xy 145.150884 172.487538) (xy 145.159223 172.437581) + (xy 145.171502 172.398495) (xy 145.187839 172.365947) (xy 145.206958 172.340579) (xy 145.229229 172.320457) + (xy 145.283246 172.294213) (xy 145.352999 172.285233) (xy 145.39989 172.288048) (xy 145.435529 172.29603) + (xy 145.461351 172.307124) (xy 145.461351 172.318023) (xy 145.438157 172.329978) (xy 145.417113 172.347489) + (xy 145.399826 172.369697) (xy 145.387139 172.396496) (xy 145.379469 172.443503) (xy 145.382308 172.474876) + (xy 145.39046 172.502468) (xy 145.403321 172.526056) (xy 145.420368 172.545599) (xy 145.466243 172.572449) + (xy 145.516764 172.580431) (xy 145.546967 172.577525) (xy 145.575107 172.568903) (xy 145.599683 172.555226) + (xy 145.620881 172.536448) (xy 145.637392 172.513753) (xy 145.649511 172.486599) (xy 145.658272 172.428848) + (xy 145.655383 172.390544) (xy 145.64688 172.355158) (xy 145.633287 172.323367) (xy 145.614744 172.294716) + (xy 145.563156 172.247068) (xy 145.491567 172.21331) (xy 145.399148 172.196496) (xy 145.365547 172.195382) + (xy 145.306321 172.198296) (xy 145.250015 172.206971) (xy 145.198508 172.220808) (xy 145.15047 172.239887) + (xy 145.107704 172.2632) (xy 145.068821 172.291232) (xy 145.035168 172.322799) (xy 145.005745 172.358638) + (xy 144.981321 172.397781) (xy 144.961499 172.440872) (xy 144.946637 172.487501) (xy 144.936847 172.537884) + (xy 144.932138 172.608916) (xy 144.932138 172.654986) (xy 144.928956 172.693779) (xy 144.918407 172.726213) + (xy 144.905311 172.745259) (xy 144.886986 172.76021) (xy 144.837057 172.776029) (xy 144.80904 172.777627) + (xy 144.690612 172.777627) (xy 144.690612 172.867569) (xy 144.85108 172.867569) (xy 144.878446 172.870488) + (xy 144.900281 172.879196) (xy 144.914678 172.891375) (xy 144.924809 172.907804) (xy 144.932138 172.948719) + (xy 144.932138 173.608999) (xy 144.92922 173.636408) (xy 144.920517 173.65827) (xy 144.908345 173.672681) + (xy 144.891932 173.682819) (xy 144.85108 173.690149) (xy 144.766267 173.690149) (xy 144.766267 173.78) + ) + ) + (polygon + (pts + (xy 146.054756 172.7623) (xy 146.147299 172.791286) (xy 146.188695 172.813293) (xy 146.226575 172.840056) + (xy 146.261272 172.871893) (xy 146.292044 172.908257) (xy 146.31933 172.949991) (xy 146.342176 172.996073) + (xy 146.360854 173.047736) (xy 146.374495 173.103558) (xy 146.383064 173.164869) (xy 146.385963 173.230087) + (xy 146.385963 173.287606) (xy 145.751786 173.287606) (xy 145.751786 173.322227) (xy 145.756359 173.441056) + (xy 145.774609 173.550304) (xy 145.804178 173.622231) (xy 145.845672 173.670538) (xy 145.873267 173.688481) + (xy 145.905079 173.701473) (xy 145.947725 173.710615) (xy 145.996701 173.713596) (xy 146.078536 173.70479) + (xy 146.115922 173.693008) (xy 146.148777 173.676649) (xy 146.179372 173.654302) (xy 146.205509 173.627332) + (xy 146.23114 173.590043) (xy 146.251766 173.547349) (xy 146.273343 173.480041) (xy 146.288235 173.404842) + (xy 146.377903 173.404842) (xy 146.375092 173.429382) (xy 146.349375 173.546352) (xy 146.308233 173.6375) + (xy 146.282281 173.674921) (xy 146.252817 173.707359) (xy 146.21916 173.735504) (xy 146.182111 173.758634) + (xy 146.139375 173.777763) (xy 146.093177 173.791515) (xy 146.039388 173.80049) (xy 145.981955 173.803447) + (xy 145.957141 173.802886) (xy 145.902691 173.797527) (xy 145.851033 173.786673) (xy 145.802161 173.770475) + (xy 145.756448 173.74919) (xy 145.713641 173.722742) (xy 145.674415 173.69156) (xy 145.638438 173.655298) + (xy 145.606523 173.614639) (xy 145.578435 173.569046) (xy 145.554934 173.519415) (xy 145.535984 173.465202) + (xy 145.522161 173.407362) (xy 145.513615 173.345535) (xy 145.510719 173.280553) (xy 145.511405 173.250456) + (xy 145.516929 173.191527) (xy 145.751878 173.191527) (xy 146.161748 173.191527) (xy 146.161748 173.158646) + (xy 146.161544 173.135646) (xy 146.150867 173.014852) (xy 146.127341 172.937537) (xy 146.092487 172.887433) + (xy 146.069297 172.869327) (xy 146.042385 172.856235) (xy 146.006467 172.847102) (xy 145.965194 172.844122) + (xy 145.959141 172.84417) (xy 145.889749 172.85414) (xy 145.838783 172.881221) (xy 145.817025 172.903359) + (xy 145.798599 172.931481) (xy 145.781242 172.972152) (xy 145.768025 173.022091) (xy 145.757051 173.098441) + (xy 145.751878 173.191527) (xy 145.516929 173.191527) (xy 145.517157 173.189091) (xy 145.528538 173.13001) + (xy 145.566924 173.020918) (xy 145.623339 172.927581) (xy 145.694137 172.852989) (xy 145.776084 172.798709) + (xy 145.866879 172.765511) (xy 145.965194 172.75418) + ) + ) + (polygon + (pts + (xy 146.875426 173.803447) (xy 146.925592 173.800579) (xy 146.972606 173.792232) (xy 147.016721 173.778618) + (xy 147.057233 173.760191) (xy 147.12761 173.709596) (xy 147.181447 173.642901) (xy 147.216059 173.56323) + (xy 147.225342 173.519769) (xy 147.22893 173.474578) (xy 147.228967 173.469414) (xy 147.226073 173.420952) + (xy 147.217538 173.377887) (xy 147.204495 173.341835) (xy 147.186804 173.309958) (xy 147.138195 173.257466) + (xy 147.067858 173.215507) (xy 146.966376 173.181818) (xy 146.808839 173.144083) (xy 146.732533 173.122099) + (xy 146.676491 173.095668) (xy 146.652863 173.076819) (xy 146.635707 173.054578) (xy 146.620748 173.004882) + (xy 146.619978 172.987737) (xy 146.622852 172.961711) (xy 146.631246 172.93763) (xy 146.664121 172.895514) + (xy 146.719495 172.863167) (xy 146.79783 172.845597) (xy 146.831279 172.844122) (xy 146.875743 172.846986) + (xy 146.916097 172.855307) (xy 146.95219 172.86856) (xy 146.984467 172.886393) (xy 147.039394 172.935854) + (xy 147.081964 173.004609) (xy 147.105686 173.072275) (xy 147.123088 173.136297) (xy 147.207993 173.136297) + (xy 147.207993 172.777627) (xy 147.122355 172.777627) (xy 147.122355 172.875538) (xy 147.110723 172.887078) + (xy 147.070907 172.844846) (xy 147.024963 172.808616) (xy 146.986406 172.787) (xy 146.942758 172.770272) + (xy 146.897888 172.759883) (xy 146.847566 172.754685) (xy 146.824959 172.75418) (xy 146.764745 172.757057) + (xy 146.709266 172.765476) (xy 146.659709 172.778778) (xy 146.615032 172.796783) (xy 146.576293 172.818604) + (xy 146.542519 172.844339) (xy 146.514411 172.87306) (xy 146.491359 172.905003) (xy 146.473666 172.939535) + (xy 146.461213 172.976711) (xy 146.452458 173.048462) (xy 146.455325 173.092355) (xy 146.463667 173.132646) + (xy 146.495235 173.202712) (xy 146.546104 173.261012) (xy 146.617342 173.30812) (xy 146.7105 173.342381) + (xy 146.719355 173.344576) (xy 146.85784 173.378006) (xy 146.922685 173.397296) (xy 146.973506 173.419727) + (xy 147.003791 173.439763) (xy 147.026667 173.462559) (xy 147.041123 173.485445) (xy 147.050367 173.511083) + (xy 147.055127 173.55322) (xy 147.052192 173.588957) (xy 147.043368 173.620764) (xy 147.030165 173.64611) + (xy 147.012023 173.667747) (xy 146.962803 173.698308) (xy 146.892114 173.712862) (xy 146.869106 173.713596) + (xy 146.819093 173.710695) (xy 146.772 173.702113) (xy 146.729135 173.688404) (xy 146.689754 173.669606) + (xy 146.655044 173.646543) (xy 146.624289 173.618961) (xy 146.598295 173.587698) (xy 146.576703 173.552393) + (xy 146.559939 173.513551) (xy 146.548086 173.471025) (xy 146.546431 173.462636) (xy 146.533425 173.39202) + (xy 146.448245 173.39202) (xy 146.448245 173.78) (xy 146.533883 173.78) (xy 146.533883 173.656993) + (xy 146.54524 173.645727) (xy 146.575582 173.684751) (xy 146.608943 173.717831) (xy 146.643829 173.744126) + (xy 146.681724 173.765357) (xy 146.767927 173.793561) + ) + ) + (polygon + (pts + (xy 147.729787 173.803447) (xy 147.779954 173.800579) (xy 147.826968 173.792232) (xy 147.871082 173.778618) + (xy 147.911595 173.760191) (xy 147.981972 173.709596) (xy 148.035809 173.642901) (xy 148.070421 173.56323) + (xy 148.079704 173.519769) (xy 148.083291 173.474578) (xy 148.083329 173.469414) (xy 148.080435 173.420952) + (xy 148.0719 173.377887) (xy 148.058857 173.341835) (xy 148.041165 173.309958) (xy 147.992556 173.257466) + (xy 147.92222 173.215507) (xy 147.820737 173.181818) (xy 147.6632 173.144083) (xy 147.586895 173.122099) + (xy 147.530852 173.095668) (xy 147.507224 173.076819) (xy 147.490068 173.054578) (xy 147.47511 173.004882) + (xy 147.47434 172.987737) (xy 147.477214 172.961711) (xy 147.485607 172.93763) (xy 147.518482 172.895514) + (xy 147.573856 172.863167) (xy 147.652192 172.845597) (xy 147.68564 172.844122) (xy 147.730105 172.846986) + (xy 147.770458 172.855307) (xy 147.806552 172.86856) (xy 147.838829 172.886393) (xy 147.893755 172.935854) + (xy 147.936326 173.004609) (xy 147.960047 173.072275) (xy 147.977449 173.136297) (xy 148.062354 173.136297) + (xy 148.062354 172.777627) (xy 147.976717 172.777627) (xy 147.976717 172.875538) (xy 147.965085 172.887078) + (xy 147.925268 172.844846) (xy 147.879325 172.808616) (xy 147.840767 172.787) (xy 147.797119 172.770272) + (xy 147.752249 172.759883) (xy 147.701928 172.754685) (xy 147.679321 172.75418) (xy 147.619106 172.757057) + (xy 147.563627 172.765476) (xy 147.514071 172.778778) (xy 147.469393 172.796783) (xy 147.430655 172.818604) + (xy 147.396881 172.844339) (xy 147.368772 172.87306) (xy 147.34572 172.905003) (xy 147.328027 172.939535) + (xy 147.315575 172.976711) (xy 147.30682 173.048462) (xy 147.309686 173.092355) (xy 147.318028 173.132646) + (xy 147.349597 173.202712) (xy 147.400465 173.261012) (xy 147.471704 173.30812) (xy 147.564861 173.342381) + (xy 147.573716 173.344576) (xy 147.712202 173.378006) (xy 147.777046 173.397296) (xy 147.827867 173.419727) + (xy 147.858153 173.439763) (xy 147.881028 173.462559) (xy 147.895485 173.485445) (xy 147.904729 173.511083) + (xy 147.909489 173.55322) (xy 147.906554 173.588957) (xy 147.89773 173.620764) (xy 147.884527 173.64611) + (xy 147.866384 173.667747) (xy 147.817165 173.698308) (xy 147.746476 173.712862) (xy 147.723467 173.713596) + (xy 147.673455 173.710695) (xy 147.626362 173.702113) (xy 147.583496 173.688404) (xy 147.544115 173.669606) + (xy 147.509405 173.646543) (xy 147.478651 173.618961) (xy 147.452657 173.587698) (xy 147.431065 173.552393) + (xy 147.414301 173.513551) (xy 147.402447 173.471025) (xy 147.400792 173.462636) (xy 147.387786 173.39202) + (xy 147.302606 173.39202) (xy 147.302606 173.78) (xy 147.388244 173.78) (xy 147.388244 173.656993) + (xy 147.399601 173.645727) (xy 147.429943 173.684751) (xy 147.463305 173.717831) (xy 147.498191 173.744126) + (xy 147.536086 173.765357) (xy 147.622288 173.793561) + ) + ) + (polygon + (pts + (xy 148.647236 172.754704) (xy 148.700967 172.760101) (xy 148.751978 172.771096) (xy 148.801141 172.787794) + (xy 148.847146 172.809687) (xy 148.890959 172.837245) (xy 148.931095 172.869584) (xy 148.968302 172.907389) + (xy 149.001263 172.949471) (xy 149.030307 172.996383) (xy 149.054542 173.04693) (xy 149.07391 173.101163) + (xy 149.087985 173.158255) (xy 149.096543 173.217576) (xy 149.09944 173.278905) (xy 149.098206 173.319047) + (xy 149.091578 173.379222) (xy 149.079399 173.437108) (xy 149.039791 173.543147) (xy 148.98231 173.63358) + (xy 148.90995 173.706065) (xy 148.825154 173.759243) (xy 148.729542 173.792117) (xy 148.678057 173.800565) + (xy 148.623991 173.803447) (xy 148.600797 173.802925) (xy 148.547054 173.797533) (xy 148.496033 173.786545) + (xy 148.446862 173.769854) (xy 148.400849 173.747968) (xy 148.357032 173.720419) (xy 148.316891 173.68809) + (xy 148.279682 173.650298) (xy 148.246719 173.608229) (xy 148.217675 173.561333) (xy 148.193439 173.510802) + (xy 148.174071 173.456588) (xy 148.159996 173.399515) (xy 148.151439 173.340214) (xy 148.148542 173.278905) + (xy 148.149781 173.238663) (xy 148.149969 173.236956) (xy 148.389609 173.236956) (xy 148.389609 173.320762) + (xy 148.393735 173.428511) (xy 148.412448 173.542718) (xy 148.442865 173.618917) (xy 148.484432 173.669694) + (xy 148.511087 173.688165) (xy 148.541299 173.701475) (xy 148.580219 173.710615) (xy 148.623991 173.713596) + (xy 148.659551 173.711678) (xy 148.725031 173.694194) (xy 148.75226 173.678466) (xy 148.776204 173.657805) + (xy 148.798416 173.629803) (xy 148.816986 173.595632) (xy 148.833933 173.548495) (xy 148.846334 173.492583) + (xy 148.855402 173.41352) (xy 148.858372 173.320762) (xy 148.858372 173.236956) (xy 148.855333 173.13736) + (xy 148.838446 173.017092) (xy 148.810154 172.939615) (xy 148.770767 172.888948) (xy 148.74453 172.870278) + (xy 148.714592 172.856947) (xy 148.672276 172.847191) (xy 148.623991 172.844122) (xy 148.585485 172.846004) + (xy 148.519514 172.862287) (xy 148.469665 172.896043) (xy 148.448244 172.922294) (xy 148.430296 172.954844) + (xy 148.413787 173.000803) (xy 148.401656 173.056387) (xy 148.39258 173.13838) (xy 148.389609 173.236956) + (xy 148.149969 173.236956) (xy 148.156416 173.178472) (xy 148.168603 173.120571) (xy 148.208224 173.014508) + (xy 148.265712 172.924059) (xy 148.338073 172.851565) (xy 148.422861 172.798385) (xy 148.518459 172.76551) + (xy 148.569934 172.757061) (xy 148.623991 172.75418) + ) + ) + (polygon + (pts + (xy 149.752301 173.78) (xy 149.752301 173.690149) (xy 149.562433 173.690149) (xy 149.535067 173.68723) + (xy 149.513231 173.678522) (xy 149.498835 173.666343) (xy 149.488704 173.649914) (xy 149.481375 173.608999) + (xy 149.481375 173.174033) (xy 149.498542 173.101855) (xy 149.519719 173.037991) (xy 149.543308 172.984991) + (xy 149.569921 172.939752) (xy 149.597352 172.904477) (xy 149.626929 172.876203) (xy 149.656312 172.85617) + (xy 149.687153 172.842407) (xy 149.740944 172.833589) (xy 149.775575 172.836214) (xy 149.798239 172.842864) + (xy 149.798921 172.843114) (xy 149.798921 172.854289) (xy 149.769095 172.887261) (xy 149.75605 172.914334) + (xy 149.749094 172.944032) (xy 149.748546 172.954489) (xy 149.751351 172.981591) (xy 149.759266 173.005166) + (xy 149.788614 173.042365) (xy 149.833484 173.064251) (xy 149.887263 173.065681) (xy 149.913035 173.057699) + (xy 149.936661 173.043784) (xy 149.955523 173.025535) (xy 149.970554 173.001991) (xy 149.980306 172.975028) + (xy 149.985062 172.943227) (xy 149.9854 172.931408) (xy 149.982537 172.896717) (xy 149.974216 172.865744) + (xy 149.961082 172.838897) (xy 149.943433 172.815699) (xy 149.894481 172.779493) (xy 149.826439 172.758207) + (xy 149.774558 172.75418) (xy 149.731449 172.757016) (xy 149.691856 172.765149) (xy 149.620875 172.796326) + (xy 149.560559 172.846496) (xy 149.511997 172.914945) (xy 149.479103 172.997948) (xy 149.476062 173.010268) + (xy 149.466629 173.010268) (xy 149.466629 172.777627) (xy 149.099623 172.777627) (xy 149.099623 172.867569) + (xy 149.184437 172.867569) (xy 149.211803 172.870488) (xy 149.233638 172.879196) (xy 149.248035 172.891375) + (xy 149.258166 172.907804) (xy 149.265495 172.948719) (xy 149.265495 173.608999) (xy 149.262576 173.636408) + (xy 149.253873 173.65827) (xy 149.241702 173.672681) (xy 149.225288 173.682819) (xy 149.184437 173.690149) + (xy 149.099623 173.690149) (xy 149.099623 173.78) + ) + ) + (polygon + (pts + (xy 151.414587 173.78) (xy 151.414587 173.304642) (xy 151.320523 173.304642) (xy 151.320523 173.357856) + (xy 151.317543 173.420672) (xy 151.308401 173.477143) (xy 151.295202 173.52105) (xy 151.276916 173.560031) + (xy 151.255661 173.591208) (xy 151.22987 173.618206) (xy 151.166562 173.658402) (xy 151.082279 173.682889) + (xy 150.987498 173.690149) (xy 150.827855 173.690149) (xy 150.800448 173.68723) (xy 150.77859 173.678523) + (xy 150.764196 173.666352) (xy 150.754078 173.649938) (xy 150.746797 173.609274) (xy 150.746797 173.058995) + (xy 150.903418 173.058995) (xy 150.943239 173.061912) (xy 150.97773 173.070608) (xy 151.004204 173.083343) + (xy 151.026213 173.100653) (xy 151.055686 173.146362) (xy 151.068277 173.210935) (xy 151.068556 173.223767) + (xy 151.068556 173.272768) (xy 151.16262 173.272768) (xy 151.16262 172.75418) (xy 151.068556 172.75418) + (xy 151.068556 172.803547) (xy 151.065639 172.843442) (xy 151.056941 172.878003) (xy 151.044204 172.904536) + (xy 151.026889 172.926602) (xy 150.981181 172.956167) (xy 150.916631 172.968847) (xy 150.903418 172.969144) + (xy 150.746797 172.969144) (xy 150.746797 172.474277) (xy 150.749715 172.446732) (xy 150.758418 172.424769) + (xy 150.770578 172.410307) (xy 150.786973 172.400131) (xy 150.827855 172.392761) (xy 150.987498 172.392761) + (xy 151.049357 172.395681) (xy 151.104237 172.404398) (xy 151.148303 172.417315) (xy 151.186937 172.43493) + (xy 151.218481 172.455754) (xy 151.245502 172.480654) (xy 151.286256 172.541945) (xy 151.311668 172.623068) + (xy 151.320523 172.727618) (xy 151.320523 172.781199) (xy 151.414587 172.781199) (xy 151.414587 172.302819) + (xy 150.348193 172.302819) (xy 150.348193 172.392761) (xy 150.449859 172.392761) (xy 150.477184 172.395681) + (xy 150.498997 172.404393) (xy 150.513391 172.416584) (xy 150.523533 172.433035) (xy 150.530917 172.474277) + (xy 150.530917 173.609274) (xy 150.527999 173.636589) (xy 150.519295 173.658377) (xy 150.507117 173.672745) + (xy 150.490693 173.68285) (xy 150.449859 173.690149) (xy 150.348193 173.690149) (xy 150.348193 173.78) + ) + ) + (polygon + (pts + (xy 152.108756 173.78) (xy 152.108756 173.690149) (xy 151.918888 173.690149) (xy 151.891522 173.68723) + (xy 151.869686 173.678522) (xy 151.85529 173.666343) (xy 151.845159 173.649914) (xy 151.83783 173.608999) + (xy 151.83783 173.174033) (xy 151.854997 173.101855) (xy 151.876174 173.037991) (xy 151.899763 172.984991) + (xy 151.926376 172.939752) (xy 151.953807 172.904477) (xy 151.983384 172.876203) (xy 152.012767 172.85617) + (xy 152.043608 172.842407) (xy 152.097399 172.833589) (xy 152.13203 172.836214) (xy 152.154694 172.842864) + (xy 152.155376 172.843114) (xy 152.155376 172.854289) (xy 152.12555 172.887261) (xy 152.112505 172.914334) + (xy 152.105549 172.944032) (xy 152.105001 172.954489) (xy 152.107806 172.981591) (xy 152.115721 173.005166) + (xy 152.145069 173.042365) (xy 152.189939 173.064251) (xy 152.243718 173.065681) (xy 152.26949 173.057699) + (xy 152.293116 173.043784) (xy 152.311978 173.025535) (xy 152.327009 173.001991) (xy 152.336761 172.975028) + (xy 152.341517 172.943227) (xy 152.341855 172.931408) (xy 152.338992 172.896717) (xy 152.330671 172.865744) + (xy 152.317537 172.838897) (xy 152.299888 172.815699) (xy 152.250936 172.779493) (xy 152.182894 172.758207) + (xy 152.131013 172.75418) (xy 152.087904 172.757016) (xy 152.048311 172.765149) (xy 151.97733 172.796326) + (xy 151.917014 172.846496) (xy 151.868452 172.914945) (xy 151.835558 172.997948) (xy 151.832517 173.010268) + (xy 151.823084 173.010268) (xy 151.823084 172.777627) (xy 151.456078 172.777627) (xy 151.456078 172.867569) + (xy 151.540892 172.867569) (xy 151.568258 172.870488) (xy 151.590093 172.879196) (xy 151.60449 172.891375) + (xy 151.614621 172.907804) (xy 151.62195 172.948719) (xy 151.62195 173.608999) (xy 151.619031 173.636408) + (xy 151.610328 173.65827) (xy 151.598157 173.672681) (xy 151.581743 173.682819) (xy 151.540892 173.690149) + (xy 151.456078 173.690149) (xy 151.456078 173.78) + ) + ) + (polygon + (pts + (xy 152.674606 172.59765) (xy 152.728255 172.586709) (xy 152.775165 172.55468) (xy 152.793487 172.531808) + (xy 152.806865 172.505594) (xy 152.816114 172.456142) (xy 152.80517 172.402443) (xy 152.773135 172.355493) + (xy 152.750269 172.337168) (xy 152.724055 172.323787) (xy 152.674606 172.314542) (xy 152.620994 172.325485) + (xy 152.574072 172.357533) (xy 152.555741 172.380418) (xy 152.542353 172.406652) (xy 152.533098 172.456142) + (xy 152.544039 172.509753) (xy 152.576083 172.556683) (xy 152.598966 172.575018) (xy 152.625191 172.588405) + ) + ) + (polygon + (pts + (xy 152.990412 173.78) (xy 152.990412 173.690149) (xy 152.86365 173.690149) (xy 152.836284 173.68723) + (xy 152.814448 173.678522) (xy 152.800052 173.666343) (xy 152.789921 173.649914) (xy 152.782592 173.608999) + (xy 152.782592 172.777627) (xy 152.373454 172.777627) (xy 152.373454 172.867569) (xy 152.485653 172.867569) + (xy 152.51302 172.870488) (xy 152.534855 172.879196) (xy 152.549251 172.891375) (xy 152.559382 172.907804) + (xy 152.566711 172.948719) (xy 152.566711 173.608999) (xy 152.563793 173.636408) (xy 152.55509 173.65827) + (xy 152.542919 173.672681) (xy 152.526505 173.682819) (xy 152.485653 173.690149) (xy 152.3588 173.690149) + (xy 152.3588 173.78) + ) + ) + (polygon + (pts + (xy 153.76344 173.403652) (xy 153.75667 173.464313) (xy 153.743525 173.520714) (xy 153.727049 173.564051) + (xy 153.70517 173.603067) (xy 153.681127 173.633339) (xy 153.6523 173.659394) (xy 153.620879 173.67952) + (xy 153.584829 173.695298) (xy 153.544511 173.706278) (xy 153.499247 173.712386) (xy 153.465861 173.713596) + (xy 153.425467 173.710616) (xy 153.388604 173.70148) (xy 153.358631 173.687808) (xy 153.331646 173.668737) + (xy 153.288139 173.61565) (xy 153.255652 173.53662) (xy 153.23569 173.421703) (xy 153.231479 173.320762) + (xy 153.231479 173.236956) (xy 153.234363 173.15042) (xy 153.242823 173.076492) (xy 153.255068 173.019726) + (xy 153.271447 172.97208) (xy 153.289957 172.935838) (xy 153.311614 172.906343) (xy 153.335137 172.884012) + (xy 153.361247 172.867047) (xy 153.42253 172.847314) (xy 153.465861 172.844122) (xy 153.518079 172.847042) + (xy 153.564651 172.855761) (xy 153.602084 172.868727) (xy 153.634536 172.886422) (xy 153.643548 172.892848) + (xy 153.643548 172.906495) (xy 153.611526 172.938894) (xy 153.595784 172.967545) (xy 153.585253 173.001914) + (xy 153.58264 173.029685) (xy 153.585462 173.059623) (xy 153.593494 173.08615) (xy 153.623419 173.128938) + (xy 153.668948 173.155598) (xy 153.7116 173.162401) (xy 153.741823 173.159468) (xy 153.770059 173.150661) + (xy 153.793885 173.136988) (xy 153.814135 173.118086) (xy 153.828981 173.095818) (xy 153.83927 173.069015) + (xy 153.844682 173.025472) (xy 153.833246 172.958046) (xy 153.79881 172.893798) (xy 153.741098 172.836375) + (xy 153.703553 172.811666) (xy 153.660936 172.790741) (xy 153.613205 172.77399) (xy 153.560901 172.762051) + (xy 153.465861 172.75418) (xy 153.4119 172.757059) (xy 153.36057 172.765494) (xy 153.265248 172.798311) + (xy 153.180629 172.851423) (xy 153.108256 172.923896) (xy 153.050591 173.014392) (xy 153.010727 173.120452) + (xy 152.998427 173.178253) (xy 152.991703 173.238165) (xy 152.990412 173.278905) (xy 152.993311 173.34723) + (xy 153.001881 173.411518) (xy 153.015539 173.470229) (xy 153.034245 173.524754) (xy 153.057216 173.573809) + (xy 153.084667 173.618559) (xy 153.115797 173.658138) (xy 153.150924 173.693278) (xy 153.189494 173.723559) + (xy 153.231677 173.749204) (xy 153.326443 173.786062) (xy 153.43527 173.80268) (xy 153.465861 173.803447) + (xy 153.519489 173.800478) (xy 153.571132 173.791418) (xy 153.617007 173.777281) (xy 153.660208 173.757462) + (xy 153.697933 173.733517) (xy 153.732519 173.704246) (xy 153.762379 173.671045) (xy 153.788674 173.632675) + (xy 153.810733 173.589771) (xy 153.828707 173.541609) (xy 153.842335 173.487781) (xy 153.851195 173.428382) + (xy 153.853291 173.403652) + ) + ) + (polygon + (pts + (xy 155.570166 172.302819) (xy 154.988929 172.302819) (xy 154.988929 172.392761) (xy 155.090595 172.392761) + (xy 155.118002 172.39568) (xy 155.13986 172.404387) (xy 155.154254 172.416558) (xy 155.164372 172.432972) + (xy 155.171653 172.473636) (xy 155.171653 172.965205) (xy 154.627327 172.965205) (xy 154.627327 172.473636) + (xy 154.630245 172.446321) (xy 154.638949 172.424533) (xy 154.651127 172.410165) (xy 154.667551 172.400059) + (xy 154.708385 172.392761) (xy 154.810051 172.392761) (xy 154.810051 172.302819) (xy 154.228723 172.302819) + (xy 154.228723 172.392761) (xy 154.330389 172.392761) (xy 154.357796 172.39568) (xy 154.379654 172.404387) + (xy 154.394048 172.416558) (xy 154.404166 172.432972) (xy 154.411447 172.473636) (xy 154.411447 173.608816) + (xy 154.408529 173.636276) (xy 154.399826 173.658185) (xy 154.387656 173.67263) (xy 154.371245 173.682795) + (xy 154.330389 173.690149) (xy 154.228723 173.690149) (xy 154.228723 173.78) (xy 154.810051 173.78) + (xy 154.810051 173.690149) (xy 154.708385 173.690149) (xy 154.68106 173.68723) (xy 154.659247 173.678527) + (xy 154.644842 173.666342) (xy 154.634698 173.649906) (xy 154.627327 173.608816) (xy 154.627327 173.055148) + (xy 155.171653 173.055148) (xy 155.171653 173.608816) (xy 155.168735 173.636276) (xy 155.160032 173.658185) + (xy 155.147862 173.67263) (xy 155.131451 173.682795) (xy 155.090595 173.690149) (xy 154.988929 173.690149) + (xy 154.988929 173.78) (xy 155.570166 173.78) (xy 155.570166 173.690149) (xy 155.468591 173.690149) + (xy 155.441266 173.68723) (xy 155.419453 173.678527) (xy 155.405048 173.666342) (xy 155.394903 173.649906) + (xy 155.387533 173.608816) (xy 155.387533 172.473636) (xy 155.390451 172.446321) (xy 155.399155 172.424533) + (xy 155.411332 172.410165) (xy 155.427757 172.400059) (xy 155.468591 172.392761) (xy 155.570166 172.392761) + ) + ) + (polygon + (pts + (xy 156.128308 172.7623) (xy 156.220851 172.791286) (xy 156.262247 172.813293) (xy 156.300127 172.840056) + (xy 156.334823 172.871893) (xy 156.365595 172.908257) (xy 156.392882 172.949991) (xy 156.415728 172.996073) + (xy 156.434406 173.047736) (xy 156.448047 173.103558) (xy 156.456616 173.164869) (xy 156.459515 173.230087) + (xy 156.459515 173.287606) (xy 155.825338 173.287606) (xy 155.825338 173.322227) (xy 155.829911 173.441056) + (xy 155.848161 173.550304) (xy 155.87773 173.622231) (xy 155.919224 173.670538) (xy 155.946819 173.688481) + (xy 155.978631 173.701473) (xy 156.021277 173.710615) (xy 156.070253 173.713596) (xy 156.152088 173.70479) + (xy 156.189474 173.693008) (xy 156.222329 173.676649) (xy 156.252924 173.654302) (xy 156.279061 173.627332) + (xy 156.304692 173.590043) (xy 156.325318 173.547349) (xy 156.346895 173.480041) (xy 156.361787 173.404842) + (xy 156.451455 173.404842) (xy 156.448644 173.429382) (xy 156.422927 173.546352) (xy 156.381785 173.6375) + (xy 156.355833 173.674921) (xy 156.326369 173.707359) (xy 156.292712 173.735504) (xy 156.255663 173.758634) + (xy 156.212927 173.777763) (xy 156.166729 173.791515) (xy 156.11294 173.80049) (xy 156.055507 173.803447) + (xy 156.030693 173.802886) (xy 155.976243 173.797527) (xy 155.924585 173.786673) (xy 155.875713 173.770475) + (xy 155.83 173.74919) (xy 155.787193 173.722742) (xy 155.747967 173.69156) (xy 155.71199 173.655298) + (xy 155.680075 173.614639) (xy 155.651986 173.569046) (xy 155.628486 173.519415) (xy 155.609536 173.465202) + (xy 155.595713 173.407362) (xy 155.587167 173.345535) (xy 155.584271 173.280553) (xy 155.584957 173.250456) + (xy 155.590481 173.191527) (xy 155.82543 173.191527) (xy 156.2353 173.191527) (xy 156.2353 173.158646) + (xy 156.235096 173.135646) (xy 156.224419 173.014852) (xy 156.200893 172.937537) (xy 156.166039 172.887433) + (xy 156.142849 172.869327) (xy 156.115937 172.856235) (xy 156.080019 172.847102) (xy 156.038746 172.844122) + (xy 156.032693 172.84417) (xy 155.963301 172.85414) (xy 155.912335 172.881221) (xy 155.890577 172.903359) + (xy 155.872151 172.931481) (xy 155.854794 172.972152) (xy 155.841577 173.022091) (xy 155.830603 173.098441) + (xy 155.82543 173.191527) (xy 155.590481 173.191527) (xy 155.590709 173.189091) (xy 155.60209 173.13001) + (xy 155.640476 173.020918) (xy 155.696891 172.927581) (xy 155.767689 172.852989) (xy 155.849636 172.798709) + (xy 155.940431 172.765511) (xy 156.038746 172.75418) + ) + ) + (polygon + (pts + (xy 157.151394 173.78) (xy 157.151394 173.690149) (xy 156.961526 173.690149) (xy 156.934159 173.68723) + (xy 156.912324 173.678522) (xy 156.897928 173.666343) (xy 156.887797 173.649914) (xy 156.880468 173.608999) + (xy 156.880468 173.174033) (xy 156.897634 173.101855) (xy 156.918812 173.037991) (xy 156.942401 172.984991) + (xy 156.969013 172.939752) (xy 156.996445 172.904477) (xy 157.026022 172.876203) (xy 157.055405 172.85617) + (xy 157.086245 172.842407) (xy 157.140037 172.833589) (xy 157.174668 172.836214) (xy 157.197332 172.842864) + (xy 157.198014 172.843114) (xy 157.198014 172.854289) (xy 157.168188 172.887261) (xy 157.155143 172.914334) + (xy 157.148187 172.944032) (xy 157.147639 172.954489) (xy 157.150444 172.981591) (xy 157.158358 173.005166) + (xy 157.187707 173.042365) (xy 157.232577 173.064251) (xy 157.286356 173.065681) (xy 157.312128 173.057699) + (xy 157.335754 173.043784) (xy 157.354616 173.025535) (xy 157.369647 173.001991) (xy 157.379399 172.975028) + (xy 157.384155 172.943227) (xy 157.384493 172.931408) (xy 157.38163 172.896717) (xy 157.373309 172.865744) + (xy 157.360174 172.838897) (xy 157.342526 172.815699) (xy 157.293574 172.779493) (xy 157.225532 172.758207) + (xy 157.173651 172.75418) (xy 157.130542 172.757016) (xy 157.090949 172.765149) (xy 157.019968 172.796326) + (xy 156.959652 172.846496) (xy 156.911089 172.914945) (xy 156.878195 172.997948) (xy 156.875155 173.010268) + (xy 156.865721 173.010268) (xy 156.865721 172.777627) (xy 156.498716 172.777627) (xy 156.498716 172.867569) + (xy 156.583529 172.867569) (xy 156.610896 172.870488) (xy 156.632731 172.879196) (xy 156.647127 172.891375) + (xy 156.657258 172.907804) (xy 156.664587 172.948719) (xy 156.664587 173.608999) (xy 156.661669 173.636408) + (xy 156.652966 173.65827) (xy 156.640795 173.672681) (xy 156.624381 173.682819) (xy 156.583529 173.690149) + (xy 156.498716 173.690149) (xy 156.498716 173.78) + ) + ) + (polygon + (pts + (xy 157.948603 173.78) (xy 157.948603 173.690149) (xy 157.884764 173.690149) (xy 157.857397 173.68723) + (xy 157.835562 173.678522) (xy 157.821166 173.666343) (xy 157.811035 173.649914) (xy 157.803706 173.608999) + (xy 157.803706 173.161577) (xy 157.832443 173.088365) (xy 157.86495 173.024319) (xy 157.894552 172.979617) + (xy 157.927078 172.942503) (xy 157.95723 172.917365) (xy 157.989748 172.898617) (xy 158.021184 172.887532) + (xy 158.054717 172.882269) (xy 158.067488 172.881857) (xy 158.104809 172.884744) (xy 158.136456 172.893228) + (xy 158.160868 172.905771) (xy 158.180989 172.922633) (xy 158.209542 172.968952) (xy 158.22453 173.03829) + (xy 158.226215 173.07832) (xy 158.226215 173.609182) (xy 158.223297 173.63654) (xy 158.214594 173.658355) + (xy 158.202421 173.672732) (xy 158.186005 173.682842) (xy 158.145157 173.690149) (xy 158.081318 173.690149) + (xy 158.081318 173.78) (xy 158.607967 173.78) (xy 158.607967 173.690149) (xy 158.523153 173.690149) + (xy 158.495746 173.687229) (xy 158.473889 173.678518) (xy 158.4595 173.666344) (xy 158.449383 173.649922) + (xy 158.442095 173.609182) (xy 158.442095 173.07832) (xy 158.439139 173.01622) (xy 158.430166 172.960448) + (xy 158.417047 172.916355) (xy 158.398966 172.877395) (xy 158.377941 172.846255) (xy 158.352574 172.819545) + (xy 158.291014 172.780715) (xy 158.210534 172.758729) (xy 158.14305 172.75418) (xy 158.060403 172.765115) + (xy 157.984846 172.796971) (xy 157.915913 172.849469) (xy 157.855521 172.922082) (xy 157.809345 173.0094) + (xy 157.798576 173.039669) (xy 157.788959 173.039669) (xy 157.788959 172.777627) (xy 157.421954 172.777627) + (xy 157.421954 172.867569) (xy 157.506767 172.867569) (xy 157.534133 172.870488) (xy 157.555969 172.879196) + (xy 157.570365 172.891375) (xy 157.580496 172.907804) (xy 157.587825 172.948719) (xy 157.587825 173.608999) + (xy 157.584907 173.636408) (xy 157.576204 173.65827) (xy 157.564033 173.672681) (xy 157.547619 173.682819) + (xy 157.506767 173.690149) (xy 157.421954 173.690149) (xy 157.421954 173.78) + ) + ) + (polygon + (pts + (xy 159.0827 172.755141) (xy 159.201458 172.771006) (xy 159.293902 172.803346) (xy 159.363938 172.849642) + (xy 159.414538 172.909512) (xy 159.433057 172.945325) (xy 159.446566 172.984709) (xy 159.455206 173.029652) + (xy 159.458115 173.078412) (xy 159.458115 173.618433) (xy 159.461434 173.659017) (xy 159.476566 173.692339) + (xy 159.491865 173.70218) (xy 159.511879 173.705261) (xy 159.52931 173.703018) (xy 159.543226 173.695949) + (xy 159.553754 173.683497) (xy 159.562691 173.657093) (xy 159.565643 173.618433) (xy 159.565643 173.369122) + (xy 159.655494 173.369122) (xy 159.655494 173.610098) (xy 159.653506 173.644094) (xy 159.646433 173.679465) + (xy 159.634612 173.710404) (xy 159.618142 173.737298) (xy 159.597587 173.759617) (xy 159.571886 173.778225) + (xy 159.542566 173.791725) (xy 159.507703 173.800516) (xy 159.469839 173.803447) (xy 159.430179 173.801419) + (xy 159.358838 173.783664) (xy 159.330399 173.768405) (xy 159.306132 173.748904) (xy 159.284987 173.723809) + (xy 159.26831 173.694119) (xy 159.254825 173.655461) (xy 159.246723 173.611197) (xy 159.240495 173.611197) + (xy 159.225857 173.6345) (xy 159.168071 173.705025) (xy 159.102295 173.755605) (xy 159.027924 173.786691) + (xy 158.987128 173.794758) (xy 158.942732 173.797585) (xy 158.882996 173.794335) (xy 158.796829 173.774412) + (xy 158.73171 173.738786) (xy 158.705806 173.715218) (xy 158.684081 173.687594) (xy 158.666255 173.654934) + (xy 158.653149 173.617908) (xy 158.644572 173.573784) (xy 158.641672 173.524644) (xy 158.642694 173.516309) + (xy 158.878527 173.516309) (xy 158.878527 173.524644) (xy 158.878669 173.534292) (xy 158.889833 173.601668) + (xy 158.916046 173.648267) (xy 158.934617 173.665094) (xy 158.957259 173.677718) (xy 158.985426 173.686007) + (xy 159.018386 173.688866) (xy 159.050279 173.686375) (xy 159.082208 173.678203) (xy 159.112342 173.664252) + (xy 159.14396 173.641909) (xy 159.174006 173.612222) (xy 159.20873 173.566314) (xy 159.242235 173.509256) + (xy 159.242235 173.322777) (xy 159.102375 173.322777) (xy 159.036722 173.326987) (xy 158.967626 173.346227) + (xy 158.920893 173.379702) (xy 158.903332 173.403658) (xy 158.890552 173.432071) (xy 158.881495 173.470998) + (xy 158.878527 173.516309) (xy 158.642694 173.516309) (xy 158.651257 173.446485) (xy 158.663661 173.410615) + (xy 158.68103 173.377973) (xy 158.704015 173.347757) (xy 158.73208 173.32101) (xy 158.767564 173.296301) + (xy 158.808624 173.275606) (xy 158.859495 173.257684) (xy 158.916687 173.244585) (xy 158.985997 173.235849) + (xy 159.062442 173.232926) (xy 159.242235 173.232926) (xy 159.242235 173.141427) (xy 159.24053 173.087663) + (xy 159.226055 172.996219) (xy 159.198549 172.930809) (xy 159.158233 172.884804) (xy 159.132302 172.867923) + (xy 159.101843 172.855256) (xy 159.06503 172.846979) (xy 159.022599 172.844122) (xy 158.967976 172.847855) + (xy 158.898625 172.868515) (xy 158.870501 172.885795) (xy 158.847019 172.90732) (xy 158.847019 172.918769) + (xy 158.852532 172.92043) (xy 158.897324 172.945696) (xy 158.926464 172.986727) (xy 158.934505 173.01361) + (xy 158.937328 173.044798) (xy 158.934079 173.074761) (xy 158.924854 173.100935) (xy 158.910606 173.122945) + (xy 158.890497 173.142042) (xy 158.866795 173.15592) (xy 158.812581 173.167438) (xy 158.76326 173.158258) + (xy 158.719276 173.129754) (xy 158.690173 173.084902) (xy 158.682219 173.056477) (xy 158.679408 173.023824) + (xy 158.684742 172.977221) (xy 158.696126 172.94214) (xy 158.713418 172.908911) (xy 158.737399 172.876551) + (xy 158.766975 172.847054) (xy 158.80255 172.820295) (xy 158.843041 172.797437) (xy 158.887813 172.778995) + (xy 158.936529 172.765337) (xy 159.041467 172.75418) + ) + ) + (polygon + (pts + (xy 160.224457 173.78) (xy 160.224457 173.690149) (xy 160.160618 173.690149) (xy 160.133252 173.68723) + (xy 160.111417 173.678522) (xy 160.09702 173.666343) (xy 160.086889 173.649914) (xy 160.07956 173.608999) + (xy 160.07956 173.161577) (xy 160.108298 173.088365) (xy 160.140805 173.024319) (xy 160.170407 172.979617) + (xy 160.202933 172.942503) (xy 160.233085 172.917365) (xy 160.265603 172.898617) (xy 160.297039 172.887532) + (xy 160.330572 172.882269) (xy 160.343343 172.881857) (xy 160.380664 172.884744) (xy 160.412311 172.893228) + (xy 160.436723 172.905771) (xy 160.456843 172.922633) (xy 160.485397 172.968952) (xy 160.500385 173.03829) + (xy 160.50207 173.07832) (xy 160.50207 173.609182) (xy 160.499152 173.63654) (xy 160.490448 173.658355) + (xy 160.478276 173.672732) (xy 160.461859 173.682842) (xy 160.421012 173.690149) (xy 160.357173 173.690149) + (xy 160.357173 173.78) (xy 160.883822 173.78) (xy 160.883822 173.690149) (xy 160.799008 173.690149) + (xy 160.771601 173.687229) (xy 160.749744 173.678518) (xy 160.735355 173.666344) (xy 160.725238 173.649922) + (xy 160.71795 173.609182) (xy 160.71795 173.07832) (xy 160.714993 173.01622) (xy 160.706021 172.960448) + (xy 160.692902 172.916355) (xy 160.67482 172.877395) (xy 160.653796 172.846255) (xy 160.628429 172.819545) + (xy 160.566868 172.780715) (xy 160.486388 172.758729) (xy 160.418905 172.75418) (xy 160.336258 172.765115) + (xy 160.260701 172.796971) (xy 160.191768 172.849469) (xy 160.131376 172.922082) (xy 160.085199 173.0094) + (xy 160.074431 173.039669) (xy 160.064814 173.039669) (xy 160.064814 172.777627) (xy 159.697809 172.777627) + (xy 159.697809 172.867569) (xy 159.782622 172.867569) (xy 159.809988 172.870488) (xy 159.831824 172.879196) + (xy 159.84622 172.891375) (xy 159.856351 172.907804) (xy 159.86368 172.948719) (xy 159.86368 173.608999) + (xy 159.860762 173.636408) (xy 159.852059 173.65827) (xy 159.839888 173.672681) (xy 159.823474 173.682819) + (xy 159.782622 173.690149) (xy 159.697809 173.690149) (xy 159.697809 173.78) + ) + ) + (polygon + (pts + (xy 161.823729 173.609182) (xy 161.831017 173.649922) (xy 161.841134 173.666344) (xy 161.855522 173.678518) + (xy 161.87738 173.687229) (xy 161.904787 173.690149) (xy 161.989692 173.690149) (xy 161.989692 173.78) + (xy 161.622595 173.78) (xy 161.622595 173.600115) (xy 161.612978 173.600115) (xy 161.594852 173.647016) + (xy 161.550711 173.712042) (xy 161.491072 173.761238) (xy 161.417914 173.792416) (xy 161.376529 173.800602) + (xy 161.331519 173.803447) (xy 161.327138 173.803428) (xy 161.274326 173.800033) (xy 161.224797 173.791048) + (xy 161.177206 173.776321) (xy 161.133128 173.756433) (xy 161.090608 173.730403) (xy 161.052001 173.699566) + (xy 161.015242 173.661996) (xy 160.982953 173.620053) (xy 160.953566 173.571321) (xy 160.929271 173.518936) + (xy 160.909356 173.46104) (xy 160.895049 173.400634) (xy 160.88629 173.337533) (xy 160.883364 173.273409) + (xy 160.883796 173.250945) (xy 160.884102 173.247489) (xy 161.124431 173.247489) (xy 161.124431 173.310321) + (xy 161.131069 173.431839) (xy 161.153688 173.540851) (xy 161.188475 173.617726) (xy 161.2338 173.669977) + (xy 161.260931 173.688507) (xy 161.291178 173.702005) (xy 161.326396 173.710682) (xy 161.365133 173.713596) + (xy 161.403148 173.710794) (xy 161.466988 173.689795) (xy 161.495215 173.670995) (xy 161.520153 173.646918) + (xy 161.543732 173.614601) (xy 161.563452 173.576189) (xy 161.581106 173.525757) (xy 161.593984 173.467919) + (xy 161.602887 173.393635) (xy 161.605834 173.310321) (xy 161.605834 173.247489) (xy 161.599192 173.125902) + (xy 161.576572 173.016876) (xy 161.541786 172.939995) (xy 161.496463 172.887742) (xy 161.469332 172.869212) + (xy 161.439087 172.855713) (xy 161.40387 172.847036) (xy 161.365133 172.844122) (xy 161.327101 172.846927) + (xy 161.263267 172.86793) (xy 161.235043 172.886731) (xy 161.210108 172.910812) (xy 161.186531 172.943132) + (xy 161.166812 172.981549) (xy 161.149159 173.031991) (xy 161.136282 173.089841) (xy 161.127378 173.164147) + (xy 161.124431 173.247489) (xy 160.884102 173.247489) (xy 160.889074 173.191374) (xy 160.900214 173.132406) + (xy 160.938336 173.021804) (xy 160.993791 172.927013) (xy 161.062029 172.852085) (xy 161.13978 172.798193) + (xy 161.225474 172.765405) (xy 161.318971 172.75418) (xy 161.383211 172.759432) (xy 161.427221 172.770194) + (xy 161.466 172.7859) (xy 161.504421 172.8089) (xy 161.536945 172.836077) (xy 161.571435 172.875869) + (xy 161.597866 172.917944) (xy 161.607849 172.917944) (xy 161.607849 172.474277) (xy 161.600465 172.433035) + (xy 161.590323 172.416584) (xy 161.575929 172.404393) (xy 161.554116 172.395681) (xy 161.526791 172.392761) + (xy 161.441978 172.392761) (xy 161.441978 172.302819) (xy 161.823729 172.302819) + ) + ) + (polygon + (pts + (xy 162.533821 172.7623) (xy 162.626363 172.791286) (xy 162.66776 172.813293) (xy 162.70564 172.840056) + (xy 162.740336 172.871893) (xy 162.771108 172.908257) (xy 162.798395 172.949991) (xy 162.821241 172.996073) + (xy 162.839919 173.047736) (xy 162.853559 173.103558) (xy 162.862129 173.164869) (xy 162.865028 173.230087) + (xy 162.865028 173.287606) (xy 162.230851 173.287606) (xy 162.230851 173.322227) (xy 162.235424 173.441056) + (xy 162.253674 173.550304) (xy 162.283243 173.622231) (xy 162.324737 173.670538) (xy 162.352332 173.688481) + (xy 162.384144 173.701473) (xy 162.426789 173.710615) (xy 162.475766 173.713596) (xy 162.557601 173.70479) + (xy 162.594987 173.693008) (xy 162.627842 173.676649) (xy 162.658437 173.654302) (xy 162.684574 173.627332) + (xy 162.710205 173.590043) (xy 162.73083 173.547349) (xy 162.752408 173.480041) (xy 162.7673 173.404842) + (xy 162.856968 173.404842) (xy 162.854157 173.429382) (xy 162.82844 173.546352) (xy 162.787298 173.6375) + (xy 162.761346 173.674921) (xy 162.731882 173.707359) (xy 162.698225 173.735504) (xy 162.661176 173.758634) + (xy 162.61844 173.777763) (xy 162.572242 173.791515) (xy 162.518453 173.80049) (xy 162.46102 173.803447) + (xy 162.436206 173.802886) (xy 162.381755 173.797527) (xy 162.330098 173.786673) (xy 162.281226 173.770475) + (xy 162.235513 173.74919) (xy 162.192706 173.722742) (xy 162.15348 173.69156) (xy 162.117503 173.655298) + (xy 162.085588 173.614639) (xy 162.057499 173.569046) (xy 162.033999 173.519415) (xy 162.015048 173.465202) + (xy 162.001226 173.407362) (xy 161.992679 173.345535) (xy 161.989784 173.280553) (xy 161.99047 173.250456) + (xy 161.995994 173.191527) (xy 162.230943 173.191527) (xy 162.640813 173.191527) (xy 162.640813 173.158646) + (xy 162.640609 173.135646) (xy 162.629931 173.014852) (xy 162.606406 172.937537) (xy 162.571552 172.887433) + (xy 162.548362 172.869327) (xy 162.52145 172.856235) (xy 162.485531 172.847102) (xy 162.444259 172.844122) + (xy 162.438205 172.84417) (xy 162.368814 172.85414) (xy 162.317848 172.881221) (xy 162.29609 172.903359) + (xy 162.277663 172.931481) (xy 162.260307 172.972152) (xy 162.24709 173.022091) (xy 162.236116 173.098441) + (xy 162.230943 173.191527) (xy 161.995994 173.191527) (xy 161.996222 173.189091) (xy 162.007603 173.13001) + (xy 162.045989 173.020918) (xy 162.102404 172.927581) (xy 162.173202 172.852989) (xy 162.255149 172.798709) + (xy 162.345944 172.765511) (xy 162.444259 172.75418) + ) + ) + (polygon + (pts + (xy 162.910549 172.777627) (xy 162.910549 173.136297) (xy 163.008826 173.136297) (xy 163.008826 172.957145) + (xy 163.011744 172.929728) (xy 163.020447 172.907845) (xy 163.032622 172.89341) (xy 163.04904 172.88325) + (xy 163.089884 172.875904) (xy 163.466415 172.875904) (xy 162.908442 173.683829) (xy 162.908442 173.78) + (xy 163.693378 173.78) (xy 163.693378 173.42142) (xy 163.5951 173.42142) (xy 163.5951 173.600573) + (xy 163.592182 173.62799) (xy 163.583479 173.649873) (xy 163.571305 173.664308) (xy 163.554886 173.674468) + (xy 163.514042 173.681814) (xy 163.13742 173.681814) (xy 163.699697 172.869676) (xy 163.699697 172.777627) + ) + ) + (polygon + (pts + (xy 151.259357 175.275141) (xy 151.378116 175.291006) (xy 151.470559 175.323346) (xy 151.540596 175.369642) + (xy 151.591195 175.429512) (xy 151.609714 175.465325) (xy 151.623223 175.504709) (xy 151.631863 175.549652) + (xy 151.634772 175.598412) (xy 151.634772 176.138433) (xy 151.638092 176.179017) (xy 151.653223 176.212339) + (xy 151.668522 176.22218) (xy 151.688536 176.225261) (xy 151.705967 176.223018) (xy 151.719883 176.215949) + (xy 151.730411 176.203497) (xy 151.739349 176.177093) (xy 151.7423 176.138433) (xy 151.7423 175.889122) + (xy 151.832151 175.889122) (xy 151.832151 176.130098) (xy 151.830164 176.164094) (xy 151.82309 176.199465) + (xy 151.811269 176.230404) (xy 151.794799 176.257298) (xy 151.774244 176.279617) (xy 151.748543 176.298225) + (xy 151.719223 176.311725) (xy 151.68436 176.320516) (xy 151.646496 176.323447) (xy 151.606836 176.321419) + (xy 151.535495 176.303664) (xy 151.507056 176.288405) (xy 151.482789 176.268904) (xy 151.461644 176.243809) + (xy 151.444968 176.214119) (xy 151.431482 176.175461) (xy 151.42338 176.131197) (xy 151.417152 176.131197) + (xy 151.402514 176.1545) (xy 151.344728 176.225025) (xy 151.278953 176.275605) (xy 151.204581 176.306691) + (xy 151.163785 176.314758) (xy 151.119389 176.317585) (xy 151.059653 176.314335) (xy 150.973486 176.294412) + (xy 150.908367 176.258786) (xy 150.882464 176.235218) (xy 150.860738 176.207594) (xy 150.842913 176.174934) + (xy 150.829806 176.137908) (xy 150.821229 176.093784) (xy 150.818329 176.044644) (xy 150.819351 176.036309) + (xy 151.055184 176.036309) (xy 151.055184 176.044644) (xy 151.055326 176.054292) (xy 151.06649 176.121668) + (xy 151.092703 176.168267) (xy 151.111275 176.185094) (xy 151.133916 176.197718) (xy 151.162083 176.206007) + (xy 151.195044 176.208866) (xy 151.226936 176.206375) (xy 151.258865 176.198203) (xy 151.289 176.184252) + (xy 151.320617 176.161909) (xy 151.350664 176.132222) (xy 151.385387 176.086314) (xy 151.418892 176.029256) + (xy 151.418892 175.842777) (xy 151.279033 175.842777) (xy 151.213379 175.846987) (xy 151.144283 175.866227) + (xy 151.09755 175.899702) (xy 151.079989 175.923658) (xy 151.067209 175.952071) (xy 151.058153 175.990998) + (xy 151.055184 176.036309) (xy 150.819351 176.036309) (xy 150.827914 175.966485) (xy 150.840318 175.930615) + (xy 150.857687 175.897973) (xy 150.880672 175.867757) (xy 150.908738 175.84101) (xy 150.944221 175.816301) + (xy 150.985281 175.795606) (xy 151.036153 175.777684) (xy 151.093344 175.764585) (xy 151.162654 175.755849) + (xy 151.239099 175.752926) (xy 151.418892 175.752926) (xy 151.418892 175.661427) (xy 151.417187 175.607663) + (xy 151.402712 175.516219) (xy 151.375207 175.450809) (xy 151.33489 175.404804) (xy 151.30896 175.387923) + (xy 151.2785 175.375256) (xy 151.241687 175.366979) (xy 151.199257 175.364122) (xy 151.144634 175.367855) + (xy 151.075283 175.388515) (xy 151.047158 175.405795) (xy 151.023677 175.42732) (xy 151.023677 175.438769) + (xy 151.029189 175.44043) (xy 151.073981 175.465696) (xy 151.103121 175.506727) (xy 151.111162 175.53361) + (xy 151.113985 175.564798) (xy 151.110736 175.594761) (xy 151.101511 175.620935) (xy 151.087264 175.642945) + (xy 151.067154 175.662042) (xy 151.043452 175.67592) (xy 150.989238 175.687438) (xy 150.939918 175.678258) + (xy 150.895933 175.649754) (xy 150.86683 175.604902) (xy 150.858876 175.576477) (xy 150.856065 175.543824) + (xy 150.861399 175.497221) (xy 150.872783 175.46214) (xy 150.890075 175.428911) (xy 150.914056 175.396551) + (xy 150.943632 175.367054) (xy 150.979207 175.340295) (xy 151.019698 175.317437) (xy 151.06447 175.298995) + (xy 151.113186 175.285337) (xy 151.218124 175.27418) + ) + ) + (polygon + (pts + (xy 152.401115 176.3) (xy 152.401115 176.210149) (xy 152.337276 176.210149) (xy 152.30991 176.20723) + (xy 152.288074 176.198522) (xy 152.273678 176.186343) (xy 152.263547 176.169914) (xy 152.256218 176.128999) + (xy 152.256218 175.681577) (xy 152.284955 175.608365) (xy 152.317462 175.544319) (xy 152.347064 175.499617) + (xy 152.37959 175.462503) (xy 152.409742 175.437365) (xy 152.44226 175.418617) (xy 152.473696 175.407532) + (xy 152.50723 175.402269) (xy 152.52 175.401857) (xy 152.557321 175.404744) (xy 152.588968 175.413228) + (xy 152.61338 175.425771) (xy 152.633501 175.442633) (xy 152.662054 175.488952) (xy 152.677042 175.55829) + (xy 152.678727 175.59832) (xy 152.678727 176.129182) (xy 152.675809 176.15654) (xy 152.667106 176.178355) + (xy 152.654933 176.192732) (xy 152.638517 176.202842) (xy 152.597669 176.210149) (xy 152.53383 176.210149) + (xy 152.53383 176.3) (xy 153.060479 176.3) (xy 153.060479 176.210149) (xy 152.975665 176.210149) + (xy 152.948258 176.207229) (xy 152.926401 176.198518) (xy 152.912012 176.186344) (xy 152.901895 176.169922) + (xy 152.894607 176.129182) (xy 152.894607 175.59832) (xy 152.891651 175.53622) (xy 152.882678 175.480448) + (xy 152.869559 175.436355) (xy 152.851478 175.397395) (xy 152.830453 175.366255) (xy 152.805086 175.339545) + (xy 152.743526 175.300715) (xy 152.663046 175.278729) (xy 152.595563 175.27418) (xy 152.512915 175.285115) + (xy 152.437358 175.316971) (xy 152.368425 175.369469) (xy 152.308033 175.442082) (xy 152.261857 175.5294) + (xy 152.251089 175.559669) (xy 152.241471 175.559669) (xy 152.241471 175.297627) (xy 151.874466 175.297627) + (xy 151.874466 175.387569) (xy 151.959279 175.387569) (xy 151.986646 175.390488) (xy 152.008481 175.399196) + (xy 152.022877 175.411375) (xy 152.033008 175.427804) (xy 152.040337 175.468719) (xy 152.040337 176.128999) + (xy 152.037419 176.156408) (xy 152.028716 176.17827) (xy 152.016545 176.192681) (xy 152.000131 176.202819) + (xy 151.959279 176.210149) (xy 151.874466 176.210149) (xy 151.874466 176.3) + ) + ) + (polygon + (pts + (xy 154.000386 176.129182) (xy 154.007674 176.169922) (xy 154.017791 176.186344) (xy 154.03218 176.198518) + (xy 154.054037 176.207229) (xy 154.081444 176.210149) (xy 154.166349 176.210149) (xy 154.166349 176.3) + (xy 153.799252 176.3) (xy 153.799252 176.120115) (xy 153.789635 176.120115) (xy 153.771509 176.167016) + (xy 153.727369 176.232042) (xy 153.667729 176.281238) (xy 153.594571 176.312416) (xy 153.553186 176.320602) + (xy 153.508176 176.323447) (xy 153.503795 176.323428) (xy 153.450984 176.320033) (xy 153.401454 176.311048) + (xy 153.353863 176.296321) (xy 153.309786 176.276433) (xy 153.267265 176.250403) (xy 153.228658 176.219566) + (xy 153.1919 176.181996) (xy 153.15961 176.140053) (xy 153.130224 176.091321) (xy 153.105928 176.038936) + (xy 153.086013 175.98104) (xy 153.071706 175.920634) (xy 153.062947 175.857533) (xy 153.060021 175.793409) + (xy 153.060453 175.770945) (xy 153.060759 175.767489) (xy 153.301089 175.767489) (xy 153.301089 175.830321) + (xy 153.307727 175.951839) (xy 153.330345 176.060851) (xy 153.365132 176.137726) (xy 153.410457 176.189977) + (xy 153.437589 176.208507) (xy 153.467835 176.222005) (xy 153.503053 176.230682) (xy 153.54179 176.233596) + (xy 153.579805 176.230794) (xy 153.643646 176.209795) (xy 153.671873 176.190995) (xy 153.69681 176.166918) + (xy 153.720389 176.134601) (xy 153.740109 176.096189) (xy 153.757763 176.045757) (xy 153.770641 175.987919) + (xy 153.779544 175.913635) (xy 153.782491 175.830321) (xy 153.782491 175.767489) (xy 153.77585 175.645902) + (xy 153.753229 175.536876) (xy 153.718443 175.459995) (xy 153.67312 175.407742) (xy 153.64599 175.389212) + (xy 153.615745 175.375713) (xy 153.580527 175.367036) (xy 153.54179 175.364122) (xy 153.503758 175.366927) + (xy 153.439924 175.38793) (xy 153.4117 175.406731) (xy 153.386765 175.430812) (xy 153.363188 175.463132) + (xy 153.343469 175.501549) (xy 153.325816 175.551991) (xy 153.312939 175.609841) (xy 153.304035 175.684147) + (xy 153.301089 175.767489) (xy 153.060759 175.767489) (xy 153.065731 175.711374) (xy 153.076871 175.652406) + (xy 153.114993 175.541804) (xy 153.170448 175.447013) (xy 153.238686 175.372085) (xy 153.316437 175.318193) + (xy 153.402132 175.285405) (xy 153.495628 175.27418) (xy 153.559869 175.279432) (xy 153.603878 175.290194) + (xy 153.642658 175.3059) (xy 153.681078 175.3289) (xy 153.713602 175.356077) (xy 153.748092 175.395869) + (xy 153.774523 175.437944) (xy 153.784506 175.437944) (xy 153.784506 174.994277) (xy 153.777122 174.953035) + (xy 153.766981 174.936584) (xy 153.752587 174.924393) (xy 153.730774 174.915681) (xy 153.703448 174.912761) + (xy 153.618635 174.912761) (xy 153.618635 174.822819) (xy 154.000386 174.822819) + ) + ) + (polygon + (pts + (xy 147.875051 177.342819) (xy 147.293814 177.342819) (xy 147.293814 177.432761) (xy 147.39548 177.432761) + (xy 147.422887 177.43568) (xy 147.444745 177.444387) (xy 147.459139 177.456558) (xy 147.469257 177.472972) + (xy 147.476538 177.513636) (xy 147.476538 178.005205) (xy 146.932213 178.005205) (xy 146.932213 177.513636) + (xy 146.935131 177.486321) (xy 146.943834 177.464533) (xy 146.956012 177.450165) (xy 146.972436 177.440059) + (xy 147.013271 177.432761) (xy 147.114937 177.432761) (xy 147.114937 177.342819) (xy 146.533608 177.342819) + (xy 146.533608 177.432761) (xy 146.635274 177.432761) (xy 146.662681 177.43568) (xy 146.684539 177.444387) + (xy 146.698933 177.456558) (xy 146.709052 177.472972) (xy 146.716332 177.513636) (xy 146.716332 178.648816) + (xy 146.713414 178.676276) (xy 146.704711 178.698185) (xy 146.692542 178.71263) (xy 146.676131 178.722795) + (xy 146.635274 178.730149) (xy 146.533608 178.730149) (xy 146.533608 178.82) (xy 147.114937 178.82) + (xy 147.114937 178.730149) (xy 147.013271 178.730149) (xy 146.985945 178.72723) (xy 146.964132 178.718527) + (xy 146.949728 178.706342) (xy 146.939583 178.689906) (xy 146.932213 178.648816) (xy 146.932213 178.095148) + (xy 147.476538 178.095148) (xy 147.476538 178.648816) (xy 147.47362 178.676276) (xy 147.464917 178.698185) + (xy 147.452747 178.71263) (xy 147.436337 178.722795) (xy 147.39548 178.730149) (xy 147.293814 178.730149) + (xy 147.293814 178.82) (xy 147.875051 178.82) (xy 147.875051 178.730149) (xy 147.773477 178.730149) + (xy 147.746151 178.72723) (xy 147.724338 178.718527) (xy 147.709934 178.706342) (xy 147.699789 178.689906) + (xy 147.692418 178.648816) (xy 147.692418 177.513636) (xy 147.695337 177.486321) (xy 147.70404 177.464533) + (xy 147.716218 177.450165) (xy 147.732642 177.440059) (xy 147.773477 177.432761) (xy 147.875051 177.432761) + ) + ) + (polygon + (pts + (xy 148.339435 177.795141) (xy 148.458193 177.811006) (xy 148.550637 177.843346) (xy 148.620673 177.889642) + (xy 148.671272 177.949512) (xy 148.689792 177.985325) (xy 148.7033 178.024709) (xy 148.71194 178.069652) + (xy 148.71485 178.118412) (xy 148.71485 178.658433) (xy 148.718169 178.699017) (xy 148.733301 178.732339) + (xy 148.7486 178.74218) (xy 148.768613 178.745261) (xy 148.786044 178.743018) (xy 148.799961 178.735949) + (xy 148.810488 178.723497) (xy 148.819426 178.697093) (xy 148.822377 178.658433) (xy 148.822377 178.409122) + (xy 148.912228 178.409122) (xy 148.912228 178.650098) (xy 148.910241 178.684094) (xy 148.903168 178.719465) + (xy 148.891346 178.750404) (xy 148.874877 178.777298) (xy 148.854321 178.799617) (xy 148.82862 178.818225) + (xy 148.7993 178.831725) (xy 148.764437 178.840516) (xy 148.726573 178.843447) (xy 148.686913 178.841419) + (xy 148.615573 178.823664) (xy 148.587133 178.808405) (xy 148.562866 178.788904) (xy 148.541721 178.763809) + (xy 148.525045 178.734119) (xy 148.51156 178.695461) (xy 148.503457 178.651197) (xy 148.497229 178.651197) + (xy 148.482592 178.6745) (xy 148.424805 178.745025) (xy 148.35903 178.795605) (xy 148.284658 178.826691) + (xy 148.243862 178.834758) (xy 148.199467 178.837585) (xy 148.13973 178.834335) (xy 148.053563 178.814412) + (xy 147.988444 178.778786) (xy 147.962541 178.755218) (xy 147.940815 178.727594) (xy 147.92299 178.694934) + (xy 147.909883 178.657908) (xy 147.901307 178.613784) (xy 147.898407 178.564644) (xy 147.899429 178.556309) + (xy 148.135261 178.556309) (xy 148.135261 178.564644) (xy 148.135404 178.574292) (xy 148.146568 178.641668) + (xy 148.17278 178.688267) (xy 148.191352 178.705094) (xy 148.213993 178.717718) (xy 148.24216 178.726007) + (xy 148.275121 178.728866) (xy 148.307013 178.726375) (xy 148.338942 178.718203) (xy 148.369077 178.704252) + (xy 148.400695 178.681909) (xy 148.430741 178.652222) (xy 148.465465 178.606314) (xy 148.498969 178.549256) + (xy 148.498969 178.362777) (xy 148.35911 178.362777) (xy 148.293457 178.366987) (xy 148.22436 178.386227) + (xy 148.177627 178.419702) (xy 148.160066 178.443658) (xy 148.147287 178.472071) (xy 148.13823 178.510998) + (xy 148.135261 178.556309) (xy 147.899429 178.556309) (xy 147.907991 178.486485) (xy 147.920395 178.450615) + (xy 147.937765 178.417973) (xy 147.960749 178.387757) (xy 147.988815 178.36101) (xy 148.024298 178.336301) + (xy 148.065358 178.315606) (xy 148.11623 178.297684) (xy 148.173421 178.284585) (xy 148.242731 178.275849) + (xy 148.319176 178.272926) (xy 148.498969 178.272926) (xy 148.498969 178.181427) (xy 148.497264 178.127663) + (xy 148.48279 178.036219) (xy 148.455284 177.970809) (xy 148.414967 177.924804) (xy 148.389037 177.907923) + (xy 148.358577 177.895256) (xy 148.321764 177.886979) (xy 148.279334 177.884122) (xy 148.224711 177.887855) + (xy 148.15536 177.908515) (xy 148.127235 177.925795) (xy 148.103754 177.94732) (xy 148.103754 177.958769) + (xy 148.109266 177.96043) (xy 148.154058 177.985696) (xy 148.183198 178.026727) (xy 148.191239 178.05361) + (xy 148.194063 178.084798) (xy 148.190813 178.114761) (xy 148.181588 178.140935) (xy 148.167341 178.162945) + (xy 148.147232 178.182042) (xy 148.123529 178.19592) (xy 148.069316 178.207438) (xy 148.019995 178.198258) + (xy 147.976011 178.169754) (xy 147.946908 178.124902) (xy 147.938953 178.096477) (xy 147.936142 178.063824) + (xy 147.941476 178.017221) (xy 147.95286 177.98214) (xy 147.970152 177.948911) (xy 147.994134 177.916551) + (xy 148.02371 177.887054) (xy 148.059284 177.860295) (xy 148.099775 177.837437) (xy 148.144547 177.818995) + (xy 148.193263 177.805337) (xy 148.298202 177.79418) + ) + ) + (polygon + (pts + (xy 149.35388 178.843447) (xy 149.399635 178.840548) (xy 149.44159 178.831979) (xy 149.478382 178.81854) + (xy 149.511586 178.800188) (xy 149.566736 178.749883) (xy 149.608317 178.680097) (xy 149.635311 178.588041) + (xy 149.64459 178.476808) (xy 149.64459 178.324492) (xy 149.554648 178.324492) (xy 149.554648 178.478914) + (xy 149.551733 178.542229) (xy 149.543055 178.595502) (xy 149.530908 178.633909) (xy 149.514546 178.665212) + (xy 149.496304 178.687459) (xy 149.474759 178.704313) (xy 149.423403 178.722283) (xy 149.395921 178.724195) + (xy 149.362391 178.72128) (xy 149.331999 178.712598) (xy 149.306251 178.699113) (xy 149.283693 178.680602) + (xy 149.248887 178.628895) (xy 149.22838 178.554289) (xy 149.224554 178.495767) (xy 149.224554 177.988719) + (xy 149.227472 177.96131) (xy 149.236175 177.939448) (xy 149.248346 177.925037) (xy 149.26476 177.914899) + (xy 149.305612 177.907569) (xy 149.56051 177.907569) (xy 149.56051 177.817627) (xy 149.224554 177.817627) + (xy 149.224554 177.45227) (xy 149.114187 177.45227) (xy 149.080115 177.664761) (xy 149.07138 177.700957) + (xy 149.057638 177.732147) (xy 149.040339 177.756863) (xy 149.01885 177.777298) (xy 148.963642 177.80554) + (xy 148.887282 177.817444) (xy 148.875134 177.817627) (xy 148.752493 177.817627) (xy 148.752493 177.907569) + (xy 148.927616 177.907569) (xy 148.954982 177.910488) (xy 148.976817 177.919196) (xy 148.991214 177.931375) + (xy 149.001345 177.947804) (xy 149.008674 177.988719) (xy 149.008674 178.487341) (xy 149.011541 178.545461) + (xy 149.019885 178.597733) (xy 149.032892 178.643153) (xy 149.050364 178.683409) (xy 149.071784 178.718455) + (xy 149.096912 178.748767) (xy 149.158556 178.796861) (xy 149.236105 178.828681) (xy 149.330793 178.842942) + ) + ) + (polygon + (pts + (xy 150.163912 178.843447) (xy 150.214078 178.840579) (xy 150.261092 178.832232) (xy 150.305207 178.818618) + (xy 150.34572 178.800191) (xy 150.416096 178.749596) (xy 150.469933 178.682901) (xy 150.504545 178.60323) + (xy 150.513828 178.559769) (xy 150.517416 178.514578) (xy 150.517453 178.509414) (xy 150.514559 178.460952) + (xy 150.506024 178.417887) (xy 150.492982 178.381835) (xy 150.47529 178.349958) (xy 150.426681 178.297466) + (xy 150.356345 178.255507) (xy 150.254862 178.221818) (xy 150.097325 178.184083) (xy 150.021019 178.162099) + (xy 149.964977 178.135668) (xy 149.941349 178.116819) (xy 149.924193 178.094578) (xy 149.909234 178.044882) + (xy 149.908464 178.027737) (xy 149.911338 178.001711) (xy 149.919732 177.97763) (xy 149.952607 177.935514) + (xy 150.007981 177.903167) (xy 150.086316 177.885597) (xy 150.119765 177.884122) (xy 150.164229 177.886986) + (xy 150.204583 177.895307) (xy 150.240676 177.90856) (xy 150.272953 177.926393) (xy 150.32788 177.975854) + (xy 150.37045 178.044609) (xy 150.394172 178.112275) (xy 150.411574 178.176297) (xy 150.496479 178.176297) + (xy 150.496479 177.817627) (xy 150.410841 177.817627) (xy 150.410841 177.915538) (xy 150.399209 177.927078) + (xy 150.359393 177.884846) (xy 150.313449 177.848616) (xy 150.274892 177.827) (xy 150.231244 177.810272) + (xy 150.186374 177.799883) (xy 150.136052 177.794685) (xy 150.113445 177.79418) (xy 150.053231 177.797057) + (xy 149.997752 177.805476) (xy 149.948195 177.818778) (xy 149.903518 177.836783) (xy 149.864779 177.858604) + (xy 149.831005 177.884339) (xy 149.802897 177.91306) (xy 149.779845 177.945003) (xy 149.762152 177.979535) + (xy 149.749699 178.016711) (xy 149.740944 178.088462) (xy 149.743811 178.132355) (xy 149.752153 178.172646) + (xy 149.783722 178.242712) (xy 149.83459 178.301012) (xy 149.905828 178.34812) (xy 149.998986 178.382381) + (xy 150.007841 178.384576) (xy 150.146326 178.418006) (xy 150.211171 178.437296) (xy 150.261992 178.459727) + (xy 150.292278 178.479763) (xy 150.315153 178.502559) (xy 150.329609 178.525445) (xy 150.338853 178.551083) + (xy 150.343613 178.59322) (xy 150.340678 178.628957) (xy 150.331854 178.660764) (xy 150.318651 178.68611) + (xy 150.300509 178.707747) (xy 150.25129 178.738308) (xy 150.180601 178.752862) (xy 150.157592 178.753596) + (xy 150.107579 178.750695) (xy 150.060486 178.742113) (xy 150.017621 178.728404) (xy 149.97824 178.709606) + (xy 149.94353 178.686543) (xy 149.912775 178.658961) (xy 149.886781 178.627698) (xy 149.865189 178.592393) + (xy 149.848425 178.553551) (xy 149.836572 178.511025) (xy 149.834917 178.502636) (xy 149.821911 178.43202) + (xy 149.736731 178.43202) (xy 149.736731 178.82) (xy 149.822369 178.82) (xy 149.822369 178.696993) + (xy 149.833726 178.685727) (xy 149.864068 178.724751) (xy 149.897429 178.757831) (xy 149.932315 178.784126) + (xy 149.97021 178.805357) (xy 150.056413 178.833561) + ) + ) + (polygon + (pts + (xy 151.024501 178.843447) (xy 151.071958 178.840606) (xy 151.115431 178.832442) (xy 151.19302 178.801313) + (xy 151.260531 178.750902) (xy 151.319984 178.679825) (xy 151.372256 178.585615) (xy 151.377127 178.57481) + (xy 151.387294 178.57481) (xy 151.408268 178.82) (xy 151.754024 178.82) (xy 151.754024 178.730149) + (xy 151.669211 178.730149) (xy 151.641845 178.72723) (xy 151.620009 178.718522) (xy 151.605613 178.706343) + (xy 151.595482 178.689914) (xy 151.588153 178.648999) (xy 151.588153 177.817627) (xy 151.206401 177.817627) + (xy 151.206401 177.907569) (xy 151.291215 177.907569) (xy 151.318581 177.910488) (xy 151.340416 177.919196) + (xy 151.354813 177.931375) (xy 151.364944 177.947804) (xy 151.372273 177.988719) (xy 151.372273 178.344092) + (xy 151.367064 178.437996) (xy 151.356469 178.483608) (xy 151.336919 178.530663) (xy 151.298359 178.599188) + (xy 151.258657 178.651789) (xy 151.230448 178.677964) (xy 151.199675 178.697491) (xy 151.169378 178.709395) + (xy 151.1358 178.716175) (xy 151.104369 178.717967) (xy 151.064971 178.714999) (xy 151.031414 178.705945) + (xy 151.007315 178.693199) (xy 150.987448 178.675694) (xy 150.961156 178.628424) (xy 150.949943 178.556775) + (xy 150.949763 178.544585) (xy 150.949763 177.817627) (xy 150.568012 177.817627) (xy 150.568012 177.907569) + (xy 150.652825 177.907569) (xy 150.680232 177.910489) (xy 150.70209 177.9192) (xy 150.716478 177.931374) + (xy 150.726595 177.947796) (xy 150.733883 177.988536) (xy 150.733883 178.519398) (xy 150.736838 178.582182) + (xy 150.745801 178.638485) (xy 150.758888 178.682898) (xy 150.776915 178.722058) (xy 150.797817 178.753219) + (xy 150.823016 178.779864) (xy 150.883928 178.818248) (xy 150.963267 178.839503) + ) + ) + (polygon + (pts + (xy 152.308059 178.82) (xy 152.308059 178.730149) (xy 152.24422 178.730149) (xy 152.216854 178.72723) + (xy 152.195018 178.718522) (xy 152.180622 178.706343) (xy 152.170491 178.689914) (xy 152.163162 178.648999) + (xy 152.163162 178.201577) (xy 152.191899 178.128365) (xy 152.224406 178.064319) (xy 152.254008 178.019617) + (xy 152.286534 177.982503) (xy 152.316686 177.957365) (xy 152.349204 177.938617) (xy 152.38064 177.927532) + (xy 152.414174 177.922269) (xy 152.426944 177.921857) (xy 152.464265 177.924744) (xy 152.495912 177.933228) + (xy 152.520324 177.945771) (xy 152.540445 177.962633) (xy 152.568998 178.008952) (xy 152.583986 178.07829) + (xy 152.585671 178.11832) (xy 152.585671 178.649182) (xy 152.582753 178.67654) (xy 152.57405 178.698355) + (xy 152.561877 178.712732) (xy 152.545461 178.722842) (xy 152.504613 178.730149) (xy 152.440774 178.730149) + (xy 152.440774 178.82) (xy 152.967423 178.82) (xy 152.967423 178.730149) (xy 152.882609 178.730149) + (xy 152.855202 178.727229) (xy 152.833345 178.718518) (xy 152.818956 178.706344) (xy 152.808839 178.689922) + (xy 152.801551 178.649182) (xy 152.801551 178.11832) (xy 152.798595 178.05622) (xy 152.789622 178.000448) + (xy 152.776503 177.956355) (xy 152.758422 177.917395) (xy 152.737397 177.886255) (xy 152.71203 177.859545) + (xy 152.65047 177.820715) (xy 152.56999 177.798729) (xy 152.502507 177.79418) (xy 152.419859 177.805115) + (xy 152.344302 177.836971) (xy 152.275369 177.889469) (xy 152.214977 177.962082) (xy 152.168801 178.0494) + (xy 152.158033 178.079669) (xy 152.148415 178.079669) (xy 152.148415 177.817627) (xy 151.78141 177.817627) + (xy 151.78141 177.907569) (xy 151.866223 177.907569) (xy 151.89359 177.910488) (xy 151.915425 177.919196) + (xy 151.929821 177.931375) (xy 151.939952 177.947804) (xy 151.947281 177.988719) (xy 151.947281 178.648999) + (xy 151.944363 178.676408) (xy 151.93566 178.69827) (xy 151.923489 178.712681) (xy 151.907075 178.722819) + (xy 151.866223 178.730149) (xy 151.78141 178.730149) (xy 151.78141 178.82) + ) + ) + (polygon + (pts + (xy 153.511002 177.8023) (xy 153.603545 177.831286) (xy 153.644941 177.853293) (xy 153.682821 177.880056) + (xy 153.717518 177.911893) (xy 153.74829 177.948257) (xy 153.775576 177.989991) (xy 153.798423 178.036073) + (xy 153.8171 178.087736) (xy 153.830741 178.143558) (xy 153.83931 178.204869) (xy 153.842209 178.270087) + (xy 153.842209 178.327606) (xy 153.208033 178.327606) (xy 153.208033 178.362227) (xy 153.212605 178.481056) + (xy 153.230855 178.590304) (xy 153.260424 178.662231) (xy 153.301918 178.710538) (xy 153.329513 178.728481) + (xy 153.361325 178.741473) (xy 153.403971 178.750615) (xy 153.452947 178.753596) (xy 153.534783 178.74479) + (xy 153.572168 178.733008) (xy 153.605023 178.716649) (xy 153.635618 178.694302) (xy 153.661755 178.667332) + (xy 153.687386 178.630043) (xy 153.708012 178.587349) (xy 153.729589 178.520041) (xy 153.744481 178.444842) + (xy 153.834149 178.444842) (xy 153.831338 178.469382) (xy 153.805621 178.586352) (xy 153.764479 178.6775) + (xy 153.738527 178.714921) (xy 153.709063 178.747359) (xy 153.675406 178.775504) (xy 153.638357 178.798634) + (xy 153.595621 178.817763) (xy 153.549423 178.831515) (xy 153.495634 178.84049) (xy 153.438201 178.843447) + (xy 153.413387 178.842886) (xy 153.358937 178.837527) (xy 153.307279 178.826673) (xy 153.258407 178.810475) + (xy 153.212694 178.78919) (xy 153.169887 178.762742) (xy 153.130661 178.73156) (xy 153.094684 178.695298) + (xy 153.062769 178.654639) (xy 153.034681 178.609046) (xy 153.01118 178.559415) (xy 152.99223 178.505202) + (xy 152.978407 178.447362) (xy 152.969861 178.385535) (xy 152.966965 178.320553) (xy 152.967651 178.290456) + (xy 152.973175 178.231527) (xy 153.208124 178.231527) (xy 153.617994 178.231527) (xy 153.617994 178.198646) + (xy 153.61779 178.175646) (xy 153.607113 178.054852) (xy 153.583587 177.977537) (xy 153.548733 177.927433) + (xy 153.525543 177.909327) (xy 153.498631 177.896235) (xy 153.462713 177.887102) (xy 153.42144 177.884122) + (xy 153.415387 177.88417) (xy 153.345995 177.89414) (xy 153.295029 177.921221) (xy 153.273271 177.943359) + (xy 153.254845 177.971481) (xy 153.237488 178.012152) (xy 153.224271 178.062091) (xy 153.213297 178.138441) + (xy 153.208124 178.231527) (xy 152.973175 178.231527) (xy 152.973403 178.229091) (xy 152.984784 178.17001) + (xy 153.02317 178.060918) (xy 153.079585 177.967581) (xy 153.150384 177.892989) (xy 153.23233 177.838709) + (xy 153.323125 177.805511) (xy 153.42144 177.79418) + ) + ) + (polygon + (pts + (xy 154.690983 178.82) (xy 154.690983 178.730149) (xy 154.589317 178.730149) (xy 154.561951 178.72723) + (xy 154.540116 178.718522) (xy 154.525719 178.706343) (xy 154.515588 178.689914) (xy 154.508259 178.648999) + (xy 154.508259 177.605136) (xy 154.51577 177.605136) (xy 154.870594 178.82) (xy 154.948538 178.82) + (xy 155.305468 177.605136) (xy 155.312978 177.605136) (xy 155.312978 178.648999) (xy 155.31006 178.676408) + (xy 155.301357 178.69827) (xy 155.289186 178.712681) (xy 155.272772 178.722819) (xy 155.23192 178.730149) + (xy 155.130254 178.730149) (xy 155.130254 178.82) (xy 155.711583 178.82) (xy 155.711583 178.730149) + (xy 155.609917 178.730149) (xy 155.582551 178.72723) (xy 155.560715 178.718522) (xy 155.546319 178.706343) + (xy 155.536188 178.689914) (xy 155.528859 178.648999) (xy 155.528859 177.513911) (xy 155.531777 177.486502) + (xy 155.54048 177.46464) (xy 155.552651 177.450229) (xy 155.569065 177.440091) (xy 155.609917 177.432761) + (xy 155.711583 177.432761) (xy 155.711583 177.342819) (xy 155.280097 177.342819) (xy 154.973542 178.389613) + (xy 154.965299 178.389613) (xy 154.658743 177.342819) (xy 154.227258 177.342819) (xy 154.227258 177.432761) + (xy 154.328924 177.432761) (xy 154.35629 177.43568) (xy 154.378126 177.444388) (xy 154.392522 177.456567) + (xy 154.402653 177.472996) (xy 154.409982 177.513911) (xy 154.409982 178.648999) (xy 154.407064 178.676408) + (xy 154.398361 178.69827) (xy 154.38619 178.712681) (xy 154.369776 178.722819) (xy 154.328924 178.730149) + (xy 154.227258 178.730149) (xy 154.227258 178.82) + ) + ) + (polygon + (pts + (xy 156.068605 177.63765) (xy 156.122254 177.626709) (xy 156.169164 177.59468) (xy 156.187486 177.571808) + (xy 156.200864 177.545594) (xy 156.210113 177.496142) (xy 156.199169 177.442443) (xy 156.167134 177.395493) + (xy 156.144268 177.377168) (xy 156.118054 177.363787) (xy 156.068605 177.354542) (xy 156.014993 177.365485) + (xy 155.968071 177.397533) (xy 155.94974 177.420418) (xy 155.936352 177.446652) (xy 155.927097 177.496142) + (xy 155.938038 177.549753) (xy 155.970082 177.596683) (xy 155.992965 177.615018) (xy 156.01919 177.628405) + ) + ) + (polygon + (pts + (xy 156.384411 178.82) (xy 156.384411 178.730149) (xy 156.257649 178.730149) (xy 156.230283 178.72723) + (xy 156.208447 178.718522) (xy 156.194051 178.706343) (xy 156.18392 178.689914) (xy 156.176591 178.648999) + (xy 156.176591 177.817627) (xy 155.767453 177.817627) (xy 155.767453 177.907569) (xy 155.879652 177.907569) + (xy 155.907019 177.910488) (xy 155.928854 177.919196) (xy 155.94325 177.931375) (xy 155.953381 177.947804) + (xy 155.96071 177.988719) (xy 155.96071 178.648999) (xy 155.957792 178.676408) (xy 155.949089 178.69827) + (xy 155.936918 178.712681) (xy 155.920504 178.722819) (xy 155.879652 178.730149) (xy 155.752799 178.730149) + (xy 155.752799 178.82) + ) + ) + (polygon + (pts + (xy 156.937438 178.82) (xy 156.937438 178.730149) (xy 156.873599 178.730149) (xy 156.846192 178.727231) + (xy 156.824334 178.718528) (xy 156.809935 178.70636) (xy 156.799814 178.689953) (xy 156.792541 178.649365) + (xy 156.792541 178.327606) (xy 156.893016 178.327606) (xy 157.119063 178.651014) (xy 157.13115 178.67333) + (xy 157.134872 178.692703) (xy 157.131745 178.706567) (xy 157.123084 178.717542) (xy 157.090205 178.729492) + (xy 157.077297 178.730149) (xy 157.021885 178.730149) (xy 157.021885 178.82) (xy 157.588467 178.82) + (xy 157.588467 178.730149) (xy 157.537176 178.730149) (xy 157.501213 178.727225) (xy 157.469375 178.718482) + (xy 157.41877 178.686549) (xy 157.38834 178.651747) (xy 157.072626 178.207164) (xy 157.274768 177.984872) + (xy 157.304251 177.957029) (xy 157.335181 177.936001) (xy 157.40011 177.912487) (xy 157.455294 177.907569) + (xy 157.529665 177.907569) (xy 157.529665 177.817627) (xy 157.059712 177.817627) (xy 157.059712 177.907569) + (xy 157.115124 177.907569) (xy 157.133238 177.910335) (xy 157.147364 177.917969) (xy 157.162022 177.944082) + (xy 157.161504 177.961006) (xy 157.154896 177.978842) (xy 157.144433 177.993573) (xy 156.926905 178.231527) + (xy 156.792541 178.231527) (xy 156.792541 177.342819) (xy 156.410789 177.342819) (xy 156.410789 177.432761) + (xy 156.495602 177.432761) (xy 156.522968 177.435679) (xy 156.544804 177.444383) (xy 156.559206 177.456559) + (xy 156.569338 177.47298) (xy 156.57666 177.513819) (xy 156.57666 178.649365) (xy 156.573742 178.676638) + (xy 156.565039 178.698399) (xy 156.552856 178.712758) (xy 156.536424 178.722858) (xy 156.495602 178.730149) + (xy 156.410789 178.730149) (xy 156.410789 178.82) + ) + ) + (polygon + (pts + (xy 158.060161 178.843447) (xy 158.107617 178.840606) (xy 158.151091 178.832442) (xy 158.228679 178.801313) + (xy 158.29619 178.750902) (xy 158.355643 178.679825) (xy 158.407915 178.585615) (xy 158.412787 178.57481) + (xy 158.422953 178.57481) (xy 158.443927 178.82) (xy 158.789684 178.82) (xy 158.789684 178.730149) + (xy 158.70487 178.730149) (xy 158.677504 178.72723) (xy 158.655669 178.718522) (xy 158.641272 178.706343) + (xy 158.631141 178.689914) (xy 158.623812 178.648999) (xy 158.623812 177.817627) (xy 158.242061 177.817627) + (xy 158.242061 177.907569) (xy 158.326874 177.907569) (xy 158.35424 177.910488) (xy 158.376076 177.919196) + (xy 158.390472 177.931375) (xy 158.400603 177.947804) (xy 158.407932 177.988719) (xy 158.407932 178.344092) + (xy 158.402723 178.437996) (xy 158.392128 178.483608) (xy 158.372578 178.530663) (xy 158.334019 178.599188) + (xy 158.294316 178.651789) (xy 158.266107 178.677964) (xy 158.235335 178.697491) (xy 158.205037 178.709395) + (xy 158.17146 178.716175) (xy 158.140028 178.717967) (xy 158.100631 178.714999) (xy 158.067073 178.705945) + (xy 158.042974 178.693199) (xy 158.023107 178.675694) (xy 157.996816 178.628424) (xy 157.985603 178.556775) + (xy 157.985423 178.544585) (xy 157.985423 177.817627) (xy 157.603671 177.817627) (xy 157.603671 177.907569) + (xy 157.688484 177.907569) (xy 157.715891 177.910489) (xy 157.737749 177.9192) (xy 157.752138 177.931374) + (xy 157.762255 177.947796) (xy 157.769542 177.988536) (xy 157.769542 178.519398) (xy 157.772498 178.582182) + (xy 157.78146 178.638485) (xy 157.794548 178.682898) (xy 157.812574 178.722058) (xy 157.833477 178.753219) + (xy 157.858675 178.779864) (xy 157.919587 178.818248) (xy 157.998927 178.839503) + ) + ) + ) + ) + (gr_text "67% Chance that\nwill not make it by the end\nof the semester" + (at 355.05125 67.975 0) + (layer "F.SilkS") + (uuid "ff65ca72-af76-4825-af07-60d4f7c3dc1e") + (effects + (font + (face "NType 82 Headline") + (size 1.5 1.5) + (thickness 0.3) + (bold yes) + ) + (justify right) + ) + (render_cache "67% Chance that\nwill not make it by the end\nof the semester" + 0 + (polygon + (pts + (xy 341.448076 64.586246 + ) (xy 341.550088 64.615694) (xy 341.630041 64.660691) (xy 341.686778 64.716544) (xy 341.72066 64.779679) + (xy 341.732077 64.848164) (xy 341.72434 64.904901) (xy 341.713335 64.931959) (xy 341.69809 64.954587) + (xy 341.67866 64.972921) (xy 341.65575 64.986343) (xy 341.628701 64.994923) (xy 341.598903 64.997824) + (xy 341.557975 64.992228) (xy 341.51005 64.966896) (xy 341.478954 64.925772) (xy 341.470772 64.900847) + (xy 341.467928 64.873352) (xy 341.471884 64.837281) (xy 341.495071 64.786099) (xy 341.514797 64.764235) + (xy 341.539919 64.745582) (xy 341.545048 64.733492) (xy 341.514094 64.707931) (xy 341.480354 64.69082) + (xy 341.440311 64.678066) (xy 341.392135 64.669686) (xy 341.33851 64.666814) (xy 341.281483 64.671969) + (xy 341.243757 64.68204) (xy 341.208966 64.69732) (xy 341.175766 64.718681) (xy 341.145636 64.745476) + (xy 341.116256 64.780681) (xy 341.090361 64.822037) (xy 341.065434 64.875385) (xy 341.044656 64.936027) + (xy 341.025999 65.01323) (xy 341.012359 65.099213) (xy 341.002739 65.207298) (xy 340.999165 65.325903) + (xy 341.013087 65.329017) (xy 341.032699 65.283852) (xy 341.054775 65.250462) (xy 341.082405 65.219432) + (xy 341.150428 65.168888) (xy 341.230879 65.136962) (xy 341.319642 65.12596) (xy 341.325035 65.12599) + (xy 341.378373 65.129614) (xy 341.429398 65.139022) (xy 341.47944 65.154419) (xy 341.52656 65.175191) + (xy 341.571874 65.201831) (xy 341.613576 65.233322) (xy 341.652205 65.270063) (xy 341.686522 65.310935) + (xy 341.716425 65.355751) (xy 341.74141 65.403789) (xy 341.775274 65.506447) (xy 341.786665 65.613499) + (xy 341.786052 65.638309) (xy 341.780365 65.692604) (xy 341.768917 65.745259) (xy 341.751815 65.796214) + (xy 341.72937 65.844675) (xy 341.669803 65.932045) (xy 341.593367 66.003619) (xy 341.503287 66.056747) + (xy 341.402282 66.089658) (xy 341.292348 66.100947) (xy 341.189732 66.091589) (xy 341.137608 66.078733) + (xy 341.088609 66.060663) (xy 341.041948 66.037097) (xy 340.998635 66.008542) (xy 340.957427 65.973996) + (xy 340.919914 65.934581) (xy 340.884762 65.888502) (xy 340.853764 65.837644) (xy 340.825856 65.779623) + (xy 340.802642 65.716975) (xy 340.783542 65.647171) (xy 340.777253 65.613499) (xy 341.04322 65.613499) + (xy 341.05034 65.745546) (xy 341.071908 65.848124) (xy 341.105149 65.919627) (xy 341.149847 65.968743) + (xy 341.177619 65.986535) (xy 341.209264 65.999621) (xy 341.247347 66.008196) (xy 341.290241 66.011096) + (xy 341.32926 66.008726) (xy 341.398104 65.989163) (xy 341.427582 65.971685) (xy 341.453216 65.949396) + (xy 341.477366 65.919255) (xy 341.497251 65.883632) (xy 341.51553 65.834976) (xy 341.528637 65.779411) + (xy 341.538325 65.701159) (xy 341.541384 65.613499) (xy 341.533808 65.481132) (xy 341.511484 65.379236) + (xy 341.477331 65.30764) (xy 341.431671 65.258285) (xy 341.403467 65.240419) (xy 341.371448 65.227285) + (xy 341.333179 65.218711) (xy 341.290241 65.215811) (xy 341.255521 65.217673) (xy 341.186411 65.236087) + (xy 341.157006 65.252902) (xy 341.131485 65.274493) (xy 341.107433 65.303894) (xy 341.087662 65.338764) + (xy 341.069342 65.387043) (xy 341.056231 65.442356) (xy 341.046312 65.522871) (xy 341.04322 65.613499) + (xy 340.777253 65.613499) (xy 340.769696 65.573033) (xy 340.761013 65.492429) (xy 340.758097 65.407969) + (xy 340.762874 65.288959) (xy 340.787733 65.121143) (xy 340.831087 64.975034) (xy 340.889674 64.852253) + (xy 340.960551 64.752975) (xy 341.041558 64.676447) (xy 341.131549 64.621715) (xy 341.230352 64.588332) + (xy 341.283287 64.579769) (xy 341.33851 64.576871) + ) + ) + (polygon + (pts + (xy 342.261565 66.100947) (xy 342.288765 66.098056) (xy 342.313069 66.089542) (xy 342.351059 66.057852) + (xy 342.375868 66.005865) (xy 342.384205 65.938556) (xy 342.376425 65.786136) (xy 342.36869 65.65383) + (xy 342.374998 65.511771) (xy 342.387868 65.434824) (xy 342.409587 65.352727) (xy 342.441937 65.264576) + (xy 342.486695 65.169466) (xy 342.749562 64.666997) (xy 342.749562 64.600319) (xy 341.886957 64.600319) + (xy 341.886957 64.963203) (xy 341.976808 64.963203) (xy 341.979826 64.918092) (xy 341.989231 64.882049) + (xy 342.001381 64.859792) (xy 342.018011 64.842439) (xy 342.062584 64.822031) (xy 342.120881 64.816199) + (xy 342.556305 64.816199) (xy 342.562624 64.824076) (xy 342.393364 65.128799) (xy 342.331371 65.246655) + (xy 342.276372 65.36414) (xy 342.231122 65.474719) (xy 342.193482 65.582963) (xy 342.165976 65.680161) + (xy 342.145994 65.773758) (xy 342.134789 65.854842) (xy 342.130528 65.931761) (xy 342.130498 65.938556) + (xy 342.133378 65.978795) (xy 342.141812 66.013885) (xy 342.154415 66.041689) (xy 342.171335 66.064475) + (xy 342.191041 66.081143) (xy 342.21416 66.09289) + ) + ) + (polygon + (pts + (xy 343.75852 65.399571) (xy 343.798457 65.411916) (xy 343.83549 65.429546) (xy 343.870053 65.452662) + (xy 343.901022 65.480568) (xy 343.928552 65.513501) (xy 343.95177 65.550628) (xy 343.9705 65.591883) + (xy 343.984246 65.636609) (xy 343.992686 65.684263) (xy 343.995567 65.734583) (xy 343.986395 65.823146) + (xy 343.956202 65.910021) (xy 343.908183 65.980934) (xy 343.845762 66.033515) (xy 343.771769 66.066198) + (xy 343.731148 66.074621) (xy 343.688187 66.0775) (xy 343.617767 66.069579) (xy 343.577824 66.057227) + (xy 343.540785 66.039591) (xy 343.506221 66.016475) (xy 343.47525 65.988568) (xy 343.447724 65.955642) + (xy 343.424508 65.918521) (xy 343.405781 65.877274) (xy 343.392036 65.832555) (xy 343.383596 65.784904) + (xy 343.380716 65.734583) (xy 343.383318 65.709487) (xy 343.552541 65.709487) (xy 343.552541 65.75977) + (xy 343.553907 65.815775) (xy 343.566696 65.907892) (xy 343.59013 65.961113) (xy 343.606431 65.979152) + (xy 343.626142 65.992164) (xy 343.654423 66.001494) (xy 343.688187 66.004501) (xy 343.692652 66.004457) + (xy 343.74536 65.994404) (xy 343.765965 65.982392) (xy 343.783077 65.965354) (xy 343.799131 65.938236) + (xy 343.810889 65.903193) (xy 343.82075 65.840251) (xy 343.823833 65.75977) (xy 343.823833 65.709487) + (xy 343.822467 65.653482) (xy 343.809678 65.561365) (xy 343.786245 65.508144) (xy 343.769943 65.490105) + (xy 343.750232 65.477092) (xy 343.721951 65.467763) (xy 343.688187 65.464755) (xy 343.683722 65.4648) + (xy 343.631014 65.474853) (xy 343.610409 65.486865) (xy 343.593297 65.503903) (xy 343.577243 65.531021) + (xy 343.565485 65.566063) (xy 343.555624 65.629006) (xy 343.552541 65.709487) (xy 343.383318 65.709487) + (xy 343.389898 65.646029) (xy 343.420114 65.559165) (xy 343.468166 65.488242) (xy 343.530617 65.435652) + (xy 343.604623 65.402966) (xy 343.645238 65.394544) (xy 343.688187 65.391666) + ) + ) + (polygon + (pts + (xy 343.910753 64.943419) (xy 342.940438 65.797506) (xy 342.881728 65.734399) (xy 343.852135 64.880404) + ) + ) + (polygon + (pts + (xy 343.174718 64.608224) (xy 343.214656 64.62057) (xy 343.251688 64.6382) (xy 343.286251 64.661315) + (xy 343.317221 64.689222) (xy 343.34475 64.722154) (xy 343.367968 64.759281) (xy 343.386698 64.800537) + (xy 343.400445 64.845263) (xy 343.408885 64.892916) (xy 343.411765 64.943236) (xy 343.402593 65.031799) + (xy 343.372401 65.118674) (xy 343.324381 65.189587) (xy 343.261961 65.242168) (xy 343.187968 65.274851) + (xy 343.147346 65.283275) (xy 343.104386 65.286153) (xy 343.033966 65.278233) (xy 342.994022 65.26588) + (xy 342.956983 65.248244) (xy 342.92242 65.225128) (xy 342.891449 65.197221) (xy 342.863923 65.164295) + (xy 342.840707 65.127174) (xy 342.821979 65.085927) (xy 342.808234 65.041208) (xy 342.799795 64.993557) + (xy 342.796914 64.943236) (xy 342.799516 64.91814) (xy 342.968739 64.91814) (xy 342.968739 64.968423) + (xy 342.970105 65.024428) (xy 342.982895 65.116545) (xy 343.006328 65.169766) (xy 343.02263 65.187805) + (xy 343.042341 65.200817) (xy 343.070621 65.210147) (xy 343.104386 65.213155) (xy 343.108851 65.21311) + (xy 343.161559 65.203057) (xy 343.182163 65.191045) (xy 343.199275 65.174007) (xy 343.21533 65.146889) + (xy 343.227088 65.111846) (xy 343.236948 65.048904) (xy 343.240032 64.968423) (xy 343.240032 64.91814) + (xy 343.238666 64.862135) (xy 343.225876 64.770018) (xy 343.202443 64.716797) (xy 343.186142 64.698758) + (xy 343.16643 64.685746) (xy 343.13815 64.676416) (xy 343.104386 64.673408) (xy 343.099921 64.673453) + (xy 343.047212 64.683506) (xy 343.026608 64.695518) (xy 343.009496 64.712556) (xy 342.993442 64.739674) + (xy 342.981683 64.774717) (xy 342.971823 64.837659) (xy 342.968739 64.91814) (xy 342.799516 64.91814) + (xy 342.806097 64.854682) (xy 342.836313 64.767818) (xy 342.884365 64.696896) (xy 342.946816 64.644305) + (xy 343.020821 64.61162) (xy 343.061436 64.603197) (xy 343.104386 64.600319) + ) + ) + (polygon + (pts + (xy 344.967348 66.100947) (xy 345.025584 66.097912) (xy 345.083584 66.088391) (xy 345.134838 66.07373) + (xy 345.184333 66.052831) (xy 345.227136 66.028062) (xy 345.267317 65.997429) (xy 345.301871 65.96335) + (xy 345.333224 65.923619) (xy 345.359859 65.879969) (xy 345.382745 65.830628) (xy 345.401225 65.776269) + (xy 345.415313 65.715928) (xy 345.428234 65.596005) (xy 345.338383 65.596005) (xy 345.332984 65.668283) + (xy 345.32225 65.732767) (xy 345.307446 65.78675) (xy 345.28832 65.834275) (xy 345.266147 65.873955) + (xy 345.240389 65.908139) (xy 345.211682 65.936649) (xy 345.179851 65.960226) (xy 345.105552 65.993986) + (xy 345.014251 66.010001) (xy 344.979987 66.011096) (xy 344.928439 66.008073) (xy 344.88188 65.998637) + (xy 344.846007 65.985099) (xy 344.813615 65.966146) (xy 344.786347 65.943155) (xy 344.762021 65.914822) + (xy 344.721341 65.839445) (xy 344.6903 65.729227) (xy 344.670666 65.567086) (xy 344.66583 65.401832) + (xy 344.66583 65.276078) (xy 344.668759 65.140762) (xy 344.677538 65.026058) (xy 344.689765 64.942691) + (xy 344.706307 64.872479) (xy 344.72445 64.820743) (xy 344.745932 64.777795) (xy 344.768468 64.745679) + (xy 344.793781 64.719831) (xy 344.851051 64.685559) (xy 344.923549 64.668883) (xy 344.967348 64.666814) + (xy 345.013456 64.669735) (xy 345.054915 64.678462) (xy 345.089864 64.691823) (xy 345.121498 64.710164) + (xy 345.176798 64.762257) (xy 345.22709 64.842076) (xy 345.27793 64.966677) (xy 345.332705 65.149041) + (xy 345.421823 65.149041) (xy 345.421823 64.600319) (xy 345.331972 64.600319) (xy 345.331972 64.704275) + (xy 345.306052 64.720853) (xy 345.270838 64.683989) (xy 345.228905 64.650445) (xy 345.187356 64.625515) + (xy 345.14 64.604846) (xy 345.090956 64.590331) (xy 345.036308 64.580803) (xy 344.967348 64.576871) + (xy 344.914069 64.579766) (xy 344.862542 64.588303) (xy 344.76408 64.622017) (xy 344.672591 64.677741) + (xy 344.589515 64.755634) (xy 344.517223 64.855643) (xy 344.458849 64.97684) (xy 344.417823 65.116992) + (xy 344.40481 65.193202) (xy 344.39728 65.272595) (xy 344.395362 65.339001) (xy 344.398255 65.423196) + (xy 344.406783 65.503839) (xy 344.42067 65.58042) (xy 344.439708 65.652905) (xy 344.463384 65.72029) + (xy 344.491662 65.78312) (xy 344.523669 65.840072) (xy 344.559691 65.892119) (xy 344.598485 65.937898) + (xy 344.640711 65.978529) (xy 344.684898 66.012885) (xy 344.731977 66.041923) (xy 344.78051 66.064911) + (xy 344.831465 66.082428) (xy 344.883717 66.09411) (xy 344.937995 66.100124) + ) + ) + (polygon + (pts + (xy 346.004708 66.0775) (xy 346.004708 65.987649) (xy 345.940869 65.987649) (xy 345.913462 65.984729) + (xy 345.891605 65.976018) (xy 345.877216 65.963844) (xy 345.867099 65.947422) (xy 345.859811 65.906682) + (xy 345.859811 65.460176) (xy 345.886329 65.392598) (xy 345.916692 65.332671) (xy 345.946528 65.287044) + (xy 345.979298 65.248637) (xy 346.010517 65.221322) (xy 346.043981 65.20048) (xy 346.076193 65.187545) + (xy 346.110225 65.180562) (xy 346.13202 65.179357) (xy 346.169317 65.182244) (xy 346.200951 65.190728) + (xy 346.225365 65.203274) (xy 346.245491 65.220142) (xy 346.274063 65.266479) (xy 346.289062 65.335827) + (xy 346.290747 65.37582) (xy 346.290747 65.906682) (xy 346.287829 65.93404) (xy 346.279126 65.955855) + (xy 346.266953 65.970232) (xy 346.250537 65.980342) (xy 346.209689 65.987649) (xy 346.14585 65.987649) + (xy 346.14585 66.0775) (xy 346.672499 66.0775) (xy 346.672499 65.987649) (xy 346.587685 65.987649) + (xy 346.560278 65.984729) (xy 346.538421 65.976018) (xy 346.524032 65.963844) (xy 346.513915 65.947422) + (xy 346.506627 65.906682) (xy 346.506627 65.37582) (xy 346.50365 65.311357) (xy 346.494534 65.253614) + (xy 346.481426 65.20907) (xy 346.463301 65.16983) (xy 346.442479 65.139054) (xy 346.417285 65.112775) + (xy 346.388985 65.091926) (xy 346.356449 65.075335) (xy 346.276728 65.055022) (xy 346.220131 65.05168) + (xy 346.128997 65.062533) (xy 346.047672 65.093695) (xy 345.975815 65.14385) (xy 345.915418 65.211056) + (xy 345.87242 65.287855) (xy 345.86952 65.29522) (xy 345.859811 65.29522) (xy 345.859811 64.600319) + (xy 345.47806 64.600319) (xy 345.47806 64.690261) (xy 345.562873 64.690261) (xy 345.590199 64.693181) + (xy 345.612012 64.701893) (xy 345.626405 64.714084) (xy 345.636547 64.730535) (xy 345.643931 64.771777) + (xy 345.643931 65.906682) (xy 345.641013 65.93404) (xy 345.63231 65.955855) (xy 345.620137 65.970232) + (xy 345.60372 65.980342) (xy 345.562873 65.987649) (xy 345.47806 65.987649) (xy 345.47806 66.0775) + ) + ) + (polygon + (pts + (xy 347.147599 65.052641) (xy 347.266357 65.068506) (xy 347.358801 65.100846) (xy 347.428837 65.147142) + (xy 347.479436 65.207012) (xy 347.497955 65.242825) (xy 347.511464 65.282209) (xy 347.520104 65.327152) + (xy 347.523013 65.375912) (xy 347.523013 65.915933) (xy 347.526333 65.956517) (xy 347.541465 65.989839) + (xy 347.556763 65.99968) (xy 347.576777 66.002761) (xy 347.594208 66.000518) (xy 347.608125 65.993449) + (xy 347.618652 65.980997) (xy 347.62759 65.954593) (xy 347.630541 65.915933) (xy 347.630541 65.666622) + (xy 347.720392 65.666622) (xy 347.720392 65.907598) (xy 347.718405 65.941594) (xy 347.711331 65.976965) + (xy 347.69951 66.007904) (xy 347.683041 66.034798) (xy 347.662485 66.057117) (xy 347.636784 66.075725) + (xy 347.607464 66.089225) (xy 347.572601 66.098016) (xy 347.534737 66.100947) (xy 347.495077 66.098919) + (xy 347.423737 66.081164) (xy 347.395297 66.065905) (xy 347.37103 66.046404) (xy 347.349885 66.021309) + (xy 347.333209 65.991619) (xy 347.319724 65.952961) (xy 347.311621 65.908697) (xy 347.305393 65.908697) + (xy 347.290756 65.932) (xy 347.232969 66.002525) (xy 347.167194 66.053105) (xy 347.092822 66.084191) + (xy 347.052026 66.092258) (xy 347.007631 66.095085) (xy 346.947894 66.091835) (xy 346.861727 66.071912) + (xy 346.796608 66.036286) (xy 346.770705 66.012718) (xy 346.748979 65.985094) (xy 346.731154 65.952434) + (xy 346.718047 65.915408) (xy 346.709471 65.871284) (xy 346.706571 65.822144) (xy 346.707593 65.813809) + (xy 346.943425 65.813809) (xy 346.943425 65.822144) (xy 346.943568 65.831792) (xy 346.954732 65.899168) + (xy 346.980944 65.945767) (xy 346.999516 65.962594) (xy 347.022157 65.975218) (xy 347.050324 65.983507) + (xy 347.083285 65.986366) (xy 347.115177 65.983875) (xy 347.147106 65.975703) (xy 347.177241 65.961752) + (xy 347.208859 65.939409) (xy 347.238905 65.909722) (xy 347.273629 65.863814) (xy 347.307133 65.806756) + (xy 347.307133 65.620277) (xy 347.167274 65.620277) (xy 347.101621 65.624487) (xy 347.032524 65.643727) + (xy 346.985791 65.677202) (xy 346.96823 65.701158) (xy 346.955451 65.729571) (xy 346.946394 65.768498) + (xy 346.943425 65.813809) (xy 346.707593 65.813809) (xy 346.716155 65.743985) (xy 346.728559 65.708115) + (xy 346.745929 65.675473) (xy 346.768913 65.645257) (xy 346.796979 65.61851) (xy 346.832462 65.593801) + (xy 346.873522 65.573106) (xy 346.924394 65.555184) (xy 346.981585 65.542085) (xy 347.050895 65.533349) + (xy 347.12734 65.530426) (xy 347.307133 65.530426) (xy 347.307133 65.438927) (xy 347.305428 65.385163) + (xy 347.290954 65.293719) (xy 347.263448 65.228309) (xy 347.223131 65.182304) (xy 347.197201 65.165423) + (xy 347.166741 65.152756) (xy 347.129928 65.144479) (xy 347.087498 65.141622) (xy 347.032875 65.145355) + (xy 346.963524 65.166015) (xy 346.935399 65.183295) (xy 346.911918 65.20482) (xy 346.911918 65.216269) + (xy 346.91743 65.21793) (xy 346.962222 65.243196) (xy 346.991362 65.284227) (xy 346.999403 65.31111) + (xy 347.002227 65.342298) (xy 346.998977 65.372261) (xy 346.989752 65.398435) (xy 346.975505 65.420445) + (xy 346.955396 65.439542) (xy 346.931693 65.45342) (xy 346.87748 65.464938) (xy 346.828159 65.455758) + (xy 346.784175 65.427254) (xy 346.755072 65.382402) (xy 346.747117 65.353977) (xy 346.744306 65.321324) + (xy 346.74964 65.274721) (xy 346.761024 65.23964) (xy 346.778316 65.206411) (xy 346.802298 65.174051) + (xy 346.831874 65.144554) (xy 346.867448 65.117795) (xy 346.907939 65.094937) (xy 346.952711 65.076495) + (xy 347.001427 65.062837) (xy 347.106366 65.05168) + ) + ) + (polygon + (pts + (xy 348.289356 66.0775) (xy 348.289356 65.987649) (xy 348.225517 65.987649) (xy 348.198151 65.98473) + (xy 348.176315 65.976022) (xy 348.161919 65.963843) (xy 348.151788 65.947414) (xy 348.144459 65.906499) + (xy 348.144459 65.459077) (xy 348.173197 65.385865) (xy 348.205703 65.321819) (xy 348.235305 65.277117) + (xy 348.267832 65.240003) (xy 348.297983 65.214865) (xy 348.330502 65.196117) (xy 348.361937 65.185032) + (xy 348.395471 65.179769) (xy 348.408241 65.179357) (xy 348.445563 65.182244) (xy 348.477209 65.190728) + (xy 348.501621 65.203271) (xy 348.521742 65.220133) (xy 348.550295 65.266452) (xy 348.565283 65.33579) + (xy 348.566968 65.37582) (xy 348.566968 65.906682) (xy 348.56405 65.93404) (xy 348.555347 65.955855) + (xy 348.543174 65.970232) (xy 348.526758 65.980342) (xy 348.48591 65.987649) (xy 348.422071 65.987649) + (xy 348.422071 66.0775) (xy 348.94872 66.0775) (xy 348.94872 65.987649) (xy 348.863907 65.987649) + (xy 348.8365 65.984729) (xy 348.814642 65.976018) (xy 348.800253 65.963844) (xy 348.790136 65.947422) + (xy 348.782849 65.906682) (xy 348.782849 65.37582) (xy 348.779892 65.31372) (xy 348.770919 65.257948) + (xy 348.757801 65.213855) (xy 348.739719 65.174895) (xy 348.718695 65.143755) (xy 348.693327 65.117045) + (xy 348.631767 65.078215) (xy 348.551287 65.056229) (xy 348.483804 65.05168) (xy 348.401156 65.062615) + (xy 348.3256 65.094471) (xy 348.256667 65.146969) (xy 348.196274 65.219582) (xy 348.150098 65.3069) + (xy 348.13933 65.337169) (xy 348.129713 65.337169) (xy 348.129713 65.075127) (xy 347.762707 65.075127) + (xy 347.762707 65.165069) (xy 347.847521 65.165069) (xy 347.874887 65.167988) (xy 347.896722 65.176696) + (xy 347.911119 65.188875) (xy 347.92125 65.205304) (xy 347.928579 65.246219) (xy 347.928579 65.906499) + (xy 347.925661 65.933908) (xy 347.916957 65.95577) (xy 347.904786 65.970181) (xy 347.888373 65.980319) + (xy 347.847521 65.987649) (xy 347.762707 65.987649) (xy 347.762707 66.0775) + ) + ) + (polygon + (pts + (xy 349.721291 65.701152) (xy 349.71452 65.761813) (xy 349.701376 65.818214) (xy 349.6849 65.861551) + (xy 349.66302 65.900567) (xy 349.638977 65.930839) (xy 349.61015 65.956894) (xy 349.578729 65.97702) + (xy 349.542679 65.992798) (xy 349.502361 66.003778) (xy 349.457098 66.009886) (xy 349.423711 66.011096) + (xy 349.383317 66.008116) (xy 349.346455 65.99898) (xy 349.316481 65.985308) (xy 349.289496 65.966237) + (xy 349.24599 65.91315) (xy 349.213502 65.83412) (xy 349.19354 65.719203) (xy 349.18933 65.618262) + (xy 349.18933 65.534456) (xy 349.192213 65.44792) (xy 349.200673 65.373992) (xy 349.212919 65.317226) + (xy 349.229297 65.26958) (xy 349.247808 65.233338) (xy 349.269464 65.203843) (xy 349.292987 65.181512) + (xy 349.319098 65.164547) (xy 349.38038 65.144814) (xy 349.423711 65.141622) (xy 349.475929 65.144542) + (xy 349.522502 65.153261) (xy 349.559935 65.166227) (xy 349.592386 65.183922) (xy 349.601398 65.190348) + (xy 349.601398 65.203995) (xy 349.569376 65.236394) (xy 349.553635 65.265045) (xy 349.543104 65.299414) + (xy 349.54049 65.327185) (xy 349.543312 65.357123) (xy 349.551345 65.38365) (xy 349.581269 65.426438) + (xy 349.626798 65.453098) (xy 349.66945 65.459901) (xy 349.699673 65.456968) (xy 349.727909 65.448161) + (xy 349.751736 65.434488) (xy 349.771986 65.415586) (xy 349.786831 65.393318) (xy 349.797121 65.366515) + (xy 349.802532 65.322972) (xy 349.791096 65.255546) (xy 349.75666 65.191298) (xy 349.698948 65.133875) + (xy 349.661403 65.109166) (xy 349.618787 65.088241) (xy 349.571055 65.07149) (xy 349.518751 65.059551) + (xy 349.423711 65.05168) (xy 349.36975 65.054559) (xy 349.318421 65.062994) (xy 349.223098 65.095811) + (xy 349.138479 65.148923) (xy 349.066106 65.221396) (xy 349.008442 65.311892) (xy 348.968577 65.417952) + (xy 348.956278 65.475753) (xy 348.949553 65.535665) (xy 348.948262 65.576405) (xy 348.951161 65.64473) + (xy 348.959731 65.709018) (xy 348.973389 65.767729) (xy 348.992095 65.822254) (xy 349.015067 65.871309) + (xy 349.042517 65.916059) (xy 349.073647 65.955638) (xy 349.108775 65.990778) (xy 349.147344 66.021059) + (xy 349.189528 66.046704) (xy 349.284293 66.083562) (xy 349.393121 66.10018) (xy 349.423711 66.100947) + (xy 349.47734 66.097978) (xy 349.528983 66.088918) (xy 349.574857 66.074781) (xy 349.618059 66.054962) + (xy 349.655783 66.031017) (xy 349.69037 66.001746) (xy 349.720229 65.968545) (xy 349.746525 65.930175) + (xy 349.768584 65.887271) (xy 349.786557 65.839109) (xy 349.800185 65.785281) (xy 349.809046 65.725882) + (xy 349.811142 65.701152) + ) + ) + (polygon + (pts + (xy 350.415537 65.0598) (xy 350.50808 65.088786) (xy 350.549476 65.110793) (xy 350.587356 65.137556) + (xy 350.622053 65.169393) (xy 350.652825 65.205757) (xy 350.680111 65.247491) (xy 350.702958 65.293573) + (xy 350.721635 65.345236) (xy 350.735276 65.401058) (xy 350.743845 65.462369) (xy 350.746744 65.527587) + (xy 350.746744 65.585106) (xy 350.112568 65.585106) (xy 350.112568 65.619727) (xy 350.11714 65.738556) + (xy 350.135391 65.847804) (xy 350.164959 65.919731) (xy 350.206453 65.968038) (xy 350.234048 65.985981) + (xy 350.26586 65.998973) (xy 350.308506 66.008115) (xy 350.357482 66.011096) (xy 350.439318 66.00229) + (xy 350.476703 65.990508) (xy 350.509558 65.974149) (xy 350.540154 65.951802) (xy 350.56629 65.924832) + (xy 350.591921 65.887543) (xy 350.612547 65.844849) (xy 350.634124 65.777541) (xy 350.649017 65.702342) + (xy 350.738684 65.702342) (xy 350.735873 65.726882) (xy 350.710157 65.843852) (xy 350.669014 65.935) + (xy 350.643062 65.972421) (xy 350.613598 66.004859) (xy 350.579941 66.033004) (xy 350.542892 66.056134) + (xy 350.500156 66.075263) (xy 350.453958 66.089015) (xy 350.400169 66.09799) (xy 350.342736 66.100947) + (xy 350.317922 66.100386) (xy 350.263472 66.095027) (xy 350.211815 66.084173) (xy 350.162942 66.067975) + (xy 350.117229 66.04669) (xy 350.074422 66.020242) (xy 350.035197 65.98906) (xy 349.999219 65.952798) + (xy 349.967304 65.912139) (xy 349.939216 65.866546) (xy 349.915715 65.816915) (xy 349.896765 65.762702) + (xy 349.882942 65.704862) (xy 349.874396 65.643035) (xy 349.8715 65.578053) (xy 349.872186 65.547956) + (xy 349.87771 65.489027) (xy 350.112659 65.489027) (xy 350.522529 65.489027) (xy 350.522529 65.456146) + (xy 350.522325 65.433146) (xy 350.511648 65.312352) (xy 350.488122 65.235037) (xy 350.453268 65.184933) + (xy 350.430078 65.166827) (xy 350.403166 65.153735) (xy 350.367248 65.144602) (xy 350.325975 65.141622) + (xy 350.319922 65.14167) (xy 350.25053 65.15164) (xy 350.199564 65.178721) (xy 350.177806 65.200859) + (xy 350.15938 65.228981) (xy 350.142024 65.269652) (xy 350.128806 65.319591) (xy 350.117832 65.395941) + (xy 350.112659 65.489027) (xy 349.87771 65.489027) (xy 349.877938 65.486591) (xy 349.889319 65.42751) + (xy 349.927705 65.318418) (xy 349.98412 65.225081) (xy 350.054919 65.150489) (xy 350.136865 65.096209) + (xy 350.22766 65.063011) (xy 350.325975 65.05168) + ) + ) + (polygon + (pts + (xy 351.714312 66.100947) (xy 351.760067 66.098048) (xy 351.802022 66.089479) (xy 351.838814 66.07604) + (xy 351.872018 66.057688) (xy 351.927168 66.007383) (xy 351.968749 65.937597) (xy 351.995743 65.845541) + (xy 352.005022 65.734308) (xy 352.005022 65.581992) (xy 351.91508 65.581992) (xy 351.91508 65.736414) + (xy 351.912165 65.799729) (xy 351.903487 65.853002) (xy 351.89134 65.891409) (xy 351.874978 65.922712) + (xy 351.856736 65.944959) (xy 351.835191 65.961813) (xy 351.783835 65.979783) (xy 351.756353 65.981695) + (xy 351.722823 65.97878) (xy 351.692431 65.970098) (xy 351.666683 65.956613) (xy 351.644125 65.938102) + (xy 351.609319 65.886395) (xy 351.588812 65.811789) (xy 351.584986 65.753267) (xy 351.584986 65.246219) + (xy 351.587904 65.21881) (xy 351.596607 65.196948) (xy 351.608778 65.182537) (xy 351.625192 65.172399) + (xy 351.666044 65.165069) (xy 351.920942 65.165069) (xy 351.920942 65.075127) (xy 351.584986 65.075127) + (xy 351.584986 64.70977) (xy 351.474618 64.70977) (xy 351.440547 64.922261) (xy 351.431812 64.958457) + (xy 351.418069 64.989647) (xy 351.40077 65.014363) (xy 351.379282 65.034798) (xy 351.324073 65.06304) + (xy 351.247714 65.074944) (xy 351.235566 65.075127) (xy 351.112925 65.075127) (xy 351.112925 65.165069) + (xy 351.288047 65.165069) (xy 351.315414 65.167988) (xy 351.337249 65.176696) (xy 351.351646 65.188875) + (xy 351.361777 65.205304) (xy 351.369106 65.246219) (xy 351.369106 65.744841) (xy 351.371972 65.802961) + (xy 351.380317 65.855233) (xy 351.393324 65.900653) (xy 351.410796 65.940909) (xy 351.432216 65.975955) + (xy 351.457344 66.006267) (xy 351.518988 66.054361) (xy 351.596537 66.086181) (xy 351.691225 66.100442) + ) + ) + (polygon + (pts + (xy 352.575818 66.0775) (xy 352.575818 65.987649) (xy 352.511979 65.987649) (xy 352.484572 65.984729) + (xy 352.462714 65.976018) (xy 352.448326 65.963844) (xy 352.438209 65.947422) (xy 352.430921 65.906682) + (xy 352.430921 65.460176) (xy 352.457438 65.392598) (xy 352.487802 65.332671) (xy 352.517637 65.287044) + (xy 352.550407 65.248637) (xy 352.581627 65.221322) (xy 352.61509 65.20048) (xy 352.647302 65.187545) + (xy 352.681335 65.180562) (xy 352.703129 65.179357) (xy 352.740426 65.182244) (xy 352.77206 65.190728) + (xy 352.796474 65.203274) (xy 352.8166 65.220142) (xy 352.845172 65.266479) (xy 352.860172 65.335827) + (xy 352.861857 65.37582) (xy 352.861857 65.906682) (xy 352.858939 65.93404) (xy 352.850235 65.955855) + (xy 352.838062 65.970232) (xy 352.821646 65.980342) (xy 352.780799 65.987649) (xy 352.71696 65.987649) + (xy 352.71696 66.0775) (xy 353.243608 66.0775) (xy 353.243608 65.987649) (xy 353.158795 65.987649) + (xy 353.131388 65.984729) (xy 353.10953 65.976018) (xy 353.095142 65.963844) (xy 353.085025 65.947422) + (xy 353.077737 65.906682) (xy 353.077737 65.37582) (xy 353.07476 65.311357) (xy 353.065643 65.253614) + (xy 353.052536 65.20907) (xy 353.034411 65.16983) (xy 353.013588 65.139054) (xy 352.988395 65.112775) + (xy 352.960094 65.091926) (xy 352.927559 65.075335) (xy 352.847838 65.055022) (xy 352.79124 65.05168) + (xy 352.700106 65.062533) (xy 352.618781 65.093695) (xy 352.546924 65.14385) (xy 352.486528 65.211056) + (xy 352.44353 65.287855) (xy 352.440629 65.29522) (xy 352.430921 65.29522) (xy 352.430921 64.600319) + (xy 352.049169 64.600319) (xy 352.049169 64.690261) (xy 352.133983 64.690261) (xy 352.161308 64.693181) + (xy 352.183121 64.701893) (xy 352.197515 64.714084) (xy 352.207657 64.730535) (xy 352.215041 64.771777) + (xy 352.215041 65.906682) (xy 352.212123 65.93404) (xy 352.203419 65.955855) (xy 352.191246 65.970232) + (xy 352.17483 65.980342) (xy 352.133983 65.987649) (xy 352.049169 65.987649) (xy 352.049169 66.0775) + ) + ) + (polygon + (pts + (xy 353.718708 65.052641) (xy 353.837466 65.068506) (xy 353.92991 65.100846) (xy 353.999946 65.147142) + (xy 354.050546 65.207012) (xy 354.069065 65.242825) (xy 354.082574 65.282209) (xy 354.091214 65.327152) + (xy 354.094123 65.375912) (xy 354.094123 65.915933) (xy 354.097443 65.956517) (xy 354.112574 65.989839) + (xy 354.127873 65.99968) (xy 354.147887 66.002761) (xy 354.165318 66.000518) (xy 354.179234 65.993449) + (xy 354.189762 65.980997) (xy 354.198699 65.954593) (xy 354.201651 65.915933) (xy 354.201651 65.666622) + (xy 354.291502 65.666622) (xy 354.291502 65.907598) (xy 354.289514 65.941594) (xy 354.282441 65.976965) + (xy 354.27062 66.007904) (xy 354.25415 66.034798) (xy 354.233595 66.057117) (xy 354.207894 66.075725) + (xy 354.178574 66.089225) (xy 354.143711 66.098016) (xy 354.105847 66.100947) (xy 354.066187 66.098919) + (xy 353.994846 66.081164) (xy 353.966407 66.065905) (xy 353.94214 66.046404) (xy 353.920995 66.021309) + (xy 353.904319 65.991619) (xy 353.890833 65.952961) (xy 353.882731 65.908697) (xy 353.876503 65.908697) + (xy 353.861865 65.932) (xy 353.804079 66.002525) (xy 353.738303 66.053105) (xy 353.663932 66.084191) + (xy 353.623136 66.092258) (xy 353.57874 66.095085) (xy 353.519004 66.091835) (xy 353.432837 66.071912) + (xy 353.367718 66.036286) (xy 353.341815 66.012718) (xy 353.320089 65.985094) (xy 353.302263 65.952434) + (xy 353.289157 65.915408) (xy 353.28058 65.871284) (xy 353.27768 65.822144) (xy 353.278702 65.813809) + (xy 353.514535 65.813809) (xy 353.514535 65.822144) (xy 353.514677 65.831792) (xy 353.525841 65.899168) + (xy 353.552054 65.945767) (xy 353.570626 65.962594) (xy 353.593267 65.975218) (xy 353.621434 65.983507) + (xy 353.654394 65.986366) (xy 353.686287 65.983875) (xy 353.718216 65.975703) (xy 353.748351 65.961752) + (xy 353.779968 65.939409) (xy 353.810014 65.909722) (xy 353.844738 65.863814) (xy 353.878243 65.806756) + (xy 353.878243 65.620277) (xy 353.738383 65.620277) (xy 353.67273 65.624487) (xy 353.603634 65.643727) + (xy 353.556901 65.677202) (xy 353.53934 65.701158) (xy 353.52656 65.729571) (xy 353.517503 65.768498) + (xy 353.514535 65.813809) (xy 353.278702 65.813809) (xy 353.287265 65.743985) (xy 353.299669 65.708115) + (xy 353.317038 65.675473) (xy 353.340023 65.645257) (xy 353.368089 65.61851) (xy 353.403572 65.593801) + (xy 353.444632 65.573106) (xy 353.495503 65.555184) (xy 353.552695 65.542085) (xy 353.622005 65.533349) + (xy 353.69845 65.530426) (xy 353.878243 65.530426) (xy 353.878243 65.438927) (xy 353.876538 65.385163) + (xy 353.862063 65.293719) (xy 353.834558 65.228309) (xy 353.794241 65.182304) (xy 353.76831 65.165423) + (xy 353.737851 65.152756) (xy 353.701038 65.144479) (xy 353.658608 65.141622) (xy 353.603984 65.145355) + (xy 353.534633 65.166015) (xy 353.506509 65.183295) (xy 353.483027 65.20482) (xy 353.483027 65.216269) + (xy 353.48854 65.21793) (xy 353.533332 65.243196) (xy 353.562472 65.284227) (xy 353.570513 65.31111) + (xy 353.573336 65.342298) (xy 353.570087 65.372261) (xy 353.560862 65.398435) (xy 353.546614 65.420445) + (xy 353.526505 65.439542) (xy 353.502803 65.45342) (xy 353.448589 65.464938) (xy 353.399268 65.455758) + (xy 353.355284 65.427254) (xy 353.326181 65.382402) (xy 353.318227 65.353977) (xy 353.315416 65.321324) + (xy 353.32075 65.274721) (xy 353.332134 65.23964) (xy 353.349426 65.206411) (xy 353.373407 65.174051) + (xy 353.402983 65.144554) (xy 353.438558 65.117795) (xy 353.479049 65.094937) (xy 353.523821 65.076495) + (xy 353.572537 65.062837) (xy 353.677475 65.05168) + ) + ) + (polygon + (pts + (xy 354.733154 66.100947) (xy 354.778908 66.098048) (xy 354.820863 66.089479) (xy 354.857656 66.07604) + (xy 354.890859 66.057688) (xy 354.94601 66.007383) (xy 354.98759 65.937597) (xy 355.014584 65.845541) + (xy 355.023864 65.734308) (xy 355.023864 65.581992) (xy 354.933922 65.581992) (xy 354.933922 65.736414) + (xy 354.931007 65.799729) (xy 354.922329 65.853002) (xy 354.910182 65.891409) (xy 354.893819 65.922712) + (xy 354.875578 65.944959) (xy 354.854033 65.961813) (xy 354.802676 65.979783) (xy 354.775194 65.981695) + (xy 354.741664 65.97878) (xy 354.711273 65.970098) (xy 354.685525 65.956613) (xy 354.662966 65.938102) + (xy 354.62816 65.886395) (xy 354.607654 65.811789) (xy 354.603827 65.753267) (xy 354.603827 65.246219) + (xy 354.606745 65.21881) (xy 354.615449 65.196948) (xy 354.62762 65.182537) (xy 354.644033 65.172399) + (xy 354.684885 65.165069) (xy 354.939783 65.165069) (xy 354.939783 65.075127) (xy 354.603827 65.075127) + (xy 354.603827 64.70977) (xy 354.49346 64.70977) (xy 354.459388 64.922261) (xy 354.450654 64.958457) + (xy 354.436911 64.989647) (xy 354.419612 65.014363) (xy 354.398124 65.034798) (xy 354.342915 65.06304) + (xy 354.266556 65.074944) (xy 354.254407 65.075127) (xy 354.131767 65.075127) (xy 354.131767 65.165069) + (xy 354.306889 65.165069) (xy 354.334255 65.167988) (xy 354.356091 65.176696) (xy 354.370487 65.188875) + (xy 354.380618 65.205304) (xy 354.387947 65.246219) (xy 354.387947 65.744841) (xy 354.390814 65.802961) + (xy 354.399159 65.855233) (xy 354.412165 65.900653) (xy 354.429637 65.940909) (xy 354.451057 65.975955) + (xy 354.476186 66.006267) (xy 354.53783 66.054361) (xy 354.615378 66.086181) (xy 354.710067 66.100442) + ) + ) + (polygon + (pts + (xy 333.276664 67.595127) (xy 333.276664 67.685069) (xy 333.33629 67.685069) (xy 333.362321 67.687931) + (xy 333.383294 67.696242) (xy 333.397433 67.708081) (xy 333.406611 67.72372) (xy 333.40879 67.763695) + (xy 333.406907 67.771806) (xy 333.281427 68.266215) (xy 333.275473 68.266215) (xy 333.078095 67.595127) + (xy 332.989618 67.595127) (xy 332.804879 68.266215) (xy 332.798834 68.266215) (xy 332.68178 67.774004) + (xy 332.678452 67.745347) (xy 332.682222 67.721744) (xy 332.690748 67.706358) (xy 332.704214 67.694958) + (xy 332.744846 67.68511) (xy 332.748275 67.685069) (xy 332.791048 67.685069) (xy 332.791048 67.595127) + (xy 332.329521 67.595127) (xy 332.329521 67.685069) (xy 332.374492 67.685069) (xy 332.402066 67.687997) + (xy 332.424965 67.696769) (xy 332.454532 67.726968) (xy 332.466083 67.756419) (xy 332.682971 68.5975) + (xy 332.800849 68.5975) (xy 332.97304 67.964697) (xy 332.981283 67.964697) (xy 333.166022 68.5975) + (xy 333.2839 68.5975) (xy 333.492361 67.758525) (xy 333.502016 67.730839) (xy 333.51606 67.710036) + (xy 333.531962 67.697218) (xy 333.551347 67.689082) (xy 333.584044 67.685069) (xy 333.649989 67.685069) + (xy 333.649989 67.595127) + ) + ) + (polygon + (pts + (xy 333.986678 67.41515) (xy 334.040328 67.404209) (xy 334.087238 67.37218) (xy 334.105559 67.349308) + (xy 334.118938 67.323094) (xy 334.128186 67.273642) (xy 334.117242 67.219943) (xy 334.085208 67.172993) + (xy 334.062341 67.154668) (xy 334.036127 67.141287) (xy 333.986678 67.132042) (xy 333.933067 67.142985) + (xy 333.886144 67.175033) (xy 333.867813 67.197918) (xy 333.854425 67.224152) (xy 333.84517 67.273642) + (xy 333.856111 67.327253) (xy 333.888156 67.374183) (xy 333.911038 67.392518) (xy 333.937263 67.405905) + ) + ) + (polygon + (pts + (xy 334.302484 68.5975) (xy 334.302484 68.507649) (xy 334.175722 68.507649) (xy 334.148356 68.50473) + (xy 334.126521 68.496022) (xy 334.112124 68.483843) (xy 334.101993 68.467414) (xy 334.094664 68.426499) + (xy 334.094664 67.595127) (xy 333.685527 67.595127) (xy 333.685527 67.685069) (xy 333.797726 67.685069) + (xy 333.825092 67.687988) (xy 333.846927 67.696696) (xy 333.861324 67.708875) (xy 333.871455 67.725304) + (xy 333.878784 67.766219) (xy 333.878784 68.426499) (xy 333.875866 68.453908) (xy 333.867162 68.47577) + (xy 333.854991 68.490181) (xy 333.838578 68.500319) (xy 333.797726 68.507649) (xy 333.670872 68.507649) + (xy 333.670872 68.5975) + ) + ) + (polygon + (pts + (xy 334.876485 68.5975) (xy 334.876485 68.507649) (xy 334.791672 68.507649) (xy 334.764306 68.50473) + (xy 334.74247 68.496022) (xy 334.728074 68.483843) (xy 334.717943 68.467414) (xy 334.710614 68.426499) + (xy 334.710614 67.120319) (xy 334.328862 67.120319) (xy 334.328862 67.210261) (xy 334.413676 67.210261) + (xy 334.441042 67.21318) (xy 334.462877 67.221888) (xy 334.477274 67.234067) (xy 334.487405 67.250496) + (xy 334.494734 67.291411) (xy 334.494734 68.426499) (xy 334.491816 68.453908) (xy 334.483112 68.47577) + (xy 334.470941 68.490181) (xy 334.454528 68.500319) (xy 334.413676 68.507649) (xy 334.328862 68.507649) + (xy 334.328862 68.5975) + ) + ) + (polygon + (pts + (xy 335.450944 68.5975) (xy 335.450944 68.507649) (xy 335.366131 68.507649) (xy 335.338765 68.50473) + (xy 335.31693 68.496022) (xy 335.302533 68.483843) (xy 335.292402 68.467414) (xy 335.285073 68.426499) + (xy 335.285073 67.120319) (xy 334.903321 67.120319) (xy 334.903321 67.210261) (xy 334.988135 67.210261) + (xy 335.015501 67.21318) (xy 335.037336 67.221888) (xy 335.051733 67.234067) (xy 335.061864 67.250496) + (xy 335.069193 67.291411) (xy 335.069193 68.426499) (xy 335.066275 68.453908) (xy 335.057571 68.47577) + (xy 335.0454 68.490181) (xy 335.028987 68.500319) (xy 334.988135 68.507649) (xy 334.903321 68.507649) + (xy 334.903321 68.5975) + ) + ) + (polygon + (pts + (xy 336.335623 68.5975) (xy 336.335623 68.507649) (xy 336.271784 68.507649) (xy 336.244417 68.50473) + (xy 336.222582 68.496022) (xy 336.208186 68.483843) (xy 336.198055 68.467414) (xy 336.190726 68.426499) + (xy 336.190726 67.979077) (xy 336.219463 67.905865) (xy 336.25197 67.841819) (xy 336.281572 67.797117) + (xy 336.314098 67.760003) (xy 336.34425 67.734865) (xy 336.376768 67.716117) (xy 336.408204 67.705032) + (xy 336.441737 67.699769) (xy 336.454508 67.699357) (xy 336.491829 67.702244) (xy 336.523476 67.710728) + (xy 336.547888 67.723271) (xy 336.568009 67.740133) (xy 336.596562 67.786452) (xy 336.61155 67.85579) + (xy 336.613235 67.89582) (xy 336.613235 68.426682) (xy 336.610317 68.45404) (xy 336.601614 68.475855) + (xy 336.589441 68.490232) (xy 336.573024 68.500342) (xy 336.532177 68.507649) (xy 336.468338 68.507649) + (xy 336.468338 68.5975) (xy 336.994987 68.5975) (xy 336.994987 68.507649) (xy 336.910173 68.507649) + (xy 336.882766 68.504729) (xy 336.860909 68.496018) (xy 336.84652 68.483844) (xy 336.836403 68.467422) + (xy 336.829115 68.426682) (xy 336.829115 67.89582) (xy 336.826159 67.83372) (xy 336.817186 67.777948) + (xy 336.804067 67.733855) (xy 336.785986 67.694895) (xy 336.764961 67.663755) (xy 336.739594 67.637045) + (xy 336.678034 67.598215) (xy 336.597554 67.576229) (xy 336.53007 67.57168) (xy 336.447423 67.582615) + (xy 336.371866 67.614471) (xy 336.302933 67.666969) (xy 336.242541 67.739582) (xy 336.196365 67.8269) + (xy 336.185596 67.857169) (xy 336.175979 67.857169) (xy 336.175979 67.595127) (xy 335.808974 67.595127) + (xy 335.808974 67.685069) (xy 335.893787 67.685069) (xy 335.921153 67.687988) (xy 335.942989 67.696696) + (xy 335.957385 67.708875) (xy 335.967516 67.725304) (xy 335.974845 67.766219) (xy 335.974845 68.426499) + (xy 335.971927 68.453908) (xy 335.963224 68.47577) (xy 335.951053 68.490181) (xy 335.934639 68.500319) + (xy 335.893787 68.507649) (xy 335.808974 68.507649) (xy 335.808974 68.5975) + ) + ) + (polygon + (pts + (xy 337.493223 67.572204) (xy 337.546955 67.577601) (xy 337.597965 67.588596) (xy 337.647128 67.605294) + (xy 337.693134 67.627187) (xy 337.736946 67.654745) (xy 337.777082 67.687084) (xy 337.814289 67.724889) + (xy 337.847251 67.766971) (xy 337.876294 67.813883) (xy 337.90053 67.86443) (xy 337.919898 67.918663) + (xy 337.933972 67.975755) (xy 337.94253 68.035076) (xy 337.945427 68.096405) (xy 337.944193 68.136547) + (xy 337.937566 68.196722) (xy 337.925386 68.254608) (xy 337.885778 68.360647) (xy 337.828298 68.45108) + (xy 337.755937 68.523565) (xy 337.671141 68.576743) (xy 337.575529 68.609617) (xy 337.524045 68.618065) + (xy 337.469978 68.620947) (xy 337.446784 68.620425) (xy 337.393041 68.615033) (xy 337.342021 68.604045) + (xy 337.292849 68.587354) (xy 337.246836 68.565468) (xy 337.203019 68.537919) (xy 337.162879 68.50559) + (xy 337.12567 68.467798) (xy 337.092706 68.425729) (xy 337.063663 68.378833) (xy 337.039426 68.328302) + (xy 337.020058 68.274088) (xy 337.005984 68.217015) (xy 336.997426 68.157714) (xy 336.994529 68.096405) + (xy 336.995768 68.056163) (xy 336.995956 68.054456) (xy 337.235596 68.054456) (xy 337.235596 68.138262) + (xy 337.239722 68.246011) (xy 337.258435 68.360218) (xy 337.288852 68.436417) (xy 337.330419 68.487194) + (xy 337.357075 68.505665) (xy 337.387287 68.518975) (xy 337.426206 68.528115) (xy 337.469978 68.531096) + (xy 337.505538 68.529178) (xy 337.571018 68.511694) (xy 337.598247 68.495966) (xy 337.622191 68.475305) + (xy 337.644403 68.447303) (xy 337.662973 68.413132) (xy 337.67992 68.365995) (xy 337.692322 68.310083) + (xy 337.701389 68.23102) (xy 337.70436 68.138262) (xy 337.70436 68.054456) (xy 337.70132 67.95486) + (xy 337.684433 67.834592) (xy 337.656142 67.757115) (xy 337.616754 67.706448) (xy 337.590517 67.687778) + (xy 337.560579 67.674447) (xy 337.518263 67.664691) (xy 337.469978 67.661622) (xy 337.431472 67.663504) + (xy 337.365501 67.679787) (xy 337.315652 67.713543) (xy 337.294231 67.739794) (xy 337.276284 67.772344) + (xy 337.259774 67.818303) (xy 337.247643 67.873887) (xy 337.238568 67.95588) (xy 337.235596 68.054456) + (xy 336.995956 68.054456) (xy 337.002404 67.995972) (xy 337.014591 67.938071) (xy 337.054211 67.832008) + (xy 337.111699 67.741559) (xy 337.18406 67.669065) (xy 337.268848 67.615885) (xy 337.364446 67.58301) + (xy 337.415921 67.574561) (xy 337.469978 67.57168) + ) + ) + (polygon + (pts + (xy 338.475373 68.620947) (xy 338.521128 68.618048) (xy 338.563082 68.609479) (xy 338.599875 68.59604) + (xy 338.633079 68.577688) (xy 338.688229 68.527383) (xy 338.729809 68.457597) (xy 338.756804 68.365541) + (xy 338.766083 68.254308) (xy 338.766083 68.101992) (xy 338.676141 68.101992) (xy 338.676141 68.256414) + (xy 338.673226 68.319729) (xy 338.664548 68.373002) (xy 338.652401 68.411409) (xy 338.636039 68.442712) + (xy 338.617797 68.464959) (xy 338.596252 68.481813) (xy 338.544896 68.499783) (xy 338.517413 68.501695) + (xy 338.483884 68.49878) (xy 338.453492 68.490098) (xy 338.427744 68.476613) (xy 338.405186 68.458102) + (xy 338.37038 68.406395) (xy 338.349873 68.331789) (xy 338.346047 68.273267) (xy 338.346047 67.766219) + (xy 338.348965 67.73881) (xy 338.357668 67.716948) (xy 338.369839 67.702537) (xy 338.386253 67.692399) + (xy 338.427105 67.685069) (xy 338.682003 67.685069) (xy 338.682003 67.595127) (xy 338.346047 67.595127) + (xy 338.346047 67.22977) (xy 338.235679 67.22977) (xy 338.201607 67.442261) (xy 338.192873 67.478457) + (xy 338.17913 67.509647) (xy 338.161831 67.534363) (xy 338.140343 67.554798) (xy 338.085134 67.58304) + (xy 338.008775 67.594944) (xy 337.996627 67.595127) (xy 337.873986 67.595127) (xy 337.873986 67.685069) + (xy 338.049108 67.685069) (xy 338.076474 67.687988) (xy 338.09831 67.696696) (xy 338.112706 67.708875) + (xy 338.122837 67.725304) (xy 338.130166 67.766219) (xy 338.130166 68.264841) (xy 338.133033 68.322961) + (xy 338.141378 68.375233) (xy 338.154384 68.420653) (xy 338.171856 68.460909) (xy 338.193276 68.495955) + (xy 338.218405 68.526267) (xy 338.280049 68.574361) (xy 338.357598 68.606181) (xy 338.452286 68.620442) + ) + ) + (polygon + (pts + (xy 339.668072 68.5975) (xy 339.668072 68.507649) (xy 339.604233 68.507649) (xy 339.576867 68.50473) + (xy 339.555031 68.496022) (xy 339.540635 68.483843) (xy 339.530504 68.467414) (xy 339.523175 68.426499) + (xy 339.523175 67.833538) (xy 339.548424 67.793231) (xy 339.578246 67.757305) (xy 339.608683 67.730044) + (xy 339.641736 67.70935) (xy 339.671577 67.697946) (xy 339.702579 67.693211) (xy 339.707181 67.693129) + (xy 339.744223 67.696047) (xy 339.775193 67.704744) (xy 339.797871 67.717233) (xy 339.816293 67.734149) + (xy 339.84132 67.780915) (xy 339.852835 67.853817) (xy 339.853269 67.874846) (xy 339.853269 68.426682) + (xy 339.850351 68.45404) (xy 339.841648 68.475855) (xy 339.829475 68.490232) (xy 339.813059 68.500342) + (xy 339.772211 68.507649) (xy 339.729438 68.507649) (xy 339.729438 68.5975) (xy 340.193072 68.5975) + (xy 340.193072 68.507649) (xy 340.150207 68.507649) (xy 340.1228 68.504729) (xy 340.100943 68.496018) + (xy 340.086554 68.483844) (xy 340.076437 68.467422) (xy 340.069149 68.426682) (xy 340.069149 67.833447) + (xy 340.090841 67.794686) (xy 340.115682 67.761929) (xy 340.142726 67.735662) (xy 340.171763 67.715546) + (xy 340.201399 67.702031) (xy 340.231929 67.694616) (xy 340.253156 67.693129) (xy 340.290202 67.696047) + (xy 340.321182 67.704744) (xy 340.343875 67.717235) (xy 340.362314 67.734155) (xy 340.387368 67.780924) + (xy 340.3989 67.853797) (xy 340.399335 67.874846) (xy 340.399335 68.426682) (xy 340.396417 68.45404) + (xy 340.387714 68.475855) (xy 340.375541 68.490232) (xy 340.359124 68.500342) (xy 340.318277 68.507649) + (xy 340.254438 68.507649) (xy 340.254438 68.5975) (xy 340.760021 68.5975) (xy 340.760021 68.507649) + (xy 340.696273 68.507649) (xy 340.668824 68.504729) (xy 340.646939 68.496018) (xy 340.632542 68.483849) + (xy 340.622419 68.467435) (xy 340.615124 68.426682) (xy 340.615124 67.89582) (xy 340.612119 67.829988) + (xy 340.602812 67.77091) (xy 340.589639 67.726292) (xy 340.571337 67.686941) (xy 340.550503 67.656478) + (xy 340.525197 67.630468) (xy 340.496885 67.610026) (xy 340.464215 67.593819) (xy 340.38405 67.574423) + (xy 340.332932 67.57168) (xy 340.254444 67.582532) (xy 340.181188 67.614408) (xy 340.115209 67.666414) + (xy 340.062485 67.734644) (xy 340.053945 67.750191) (xy 340.043046 67.750191) (xy 340.026727 67.713962) + (xy 340.004495 67.679333) (xy 339.977549 67.648514) (xy 339.945412 67.62142) (xy 339.911199 67.600625) + (xy 339.872815 67.584826) (xy 339.83362 67.575401) (xy 339.791057 67.571707) (xy 339.786957 67.57168) + (xy 339.707944 67.582506) (xy 339.639219 67.613382) (xy 339.579167 67.663481) (xy 339.528467 67.732197) + (xy 339.518504 67.750191) (xy 339.508429 67.750191) (xy 339.508429 67.595127) (xy 339.141423 67.595127) + (xy 339.141423 67.685069) (xy 339.226237 67.685069) (xy 339.253603 67.687988) (xy 339.275438 67.696696) + (xy 339.289835 67.708875) (xy 339.299966 67.725304) (xy 339.307295 67.766219) (xy 339.307295 68.426499) + (xy 339.304377 68.453908) (xy 339.295673 68.47577) (xy 339.283502 68.490181) (xy 339.267089 68.500319) + (xy 339.226237 68.507649) (xy 339.141423 68.507649) (xy 339.141423 68.5975) + ) + ) + (polygon + (pts + (xy 341.234479 67.572641) (xy 341.353238 67.588506) (xy 341.445681 67.620846) (xy 341.515718 67.667142) + (xy 341.566317 67.727012) (xy 341.584836 67.762825) (xy 341.598345 67.802209) (xy 341.606985 67.847152) + (xy 341.609894 67.895912) (xy 341.609894 68.435933) (xy 341.613214 68.476517) (xy 341.628345 68.509839) + (xy 341.643644 68.51968) (xy 341.663658 68.522761) (xy 341.681089 68.520518) (xy 341.695005 68.513449) + (xy 341.705533 68.500997) (xy 341.714471 68.474593) (xy 341.717422 68.435933) (xy 341.717422 68.186622) + (xy 341.807273 68.186622) (xy 341.807273 68.427598) (xy 341.805286 68.461594) (xy 341.798212 68.496965) + (xy 341.786391 68.527904) (xy 341.769921 68.554798) (xy 341.749366 68.577117) (xy 341.723665 68.595725) + (xy 341.694345 68.609225) (xy 341.659482 68.618016) (xy 341.621618 68.620947) (xy 341.581958 68.618919) + (xy 341.510617 68.601164) (xy 341.482178 68.585905) (xy 341.457911 68.566404) (xy 341.436766 68.541309) + (xy 341.42009 68.511619) (xy 341.406604 68.472961) (xy 341.398502 68.428697) (xy 341.392274 68.428697) + (xy 341.377636 68.452) (xy 341.31985 68.522525) (xy 341.254075 68.573105) (xy 341.179703 68.604191) + (xy 341.138907 68.612258) (xy 341.094511 68.615085) (xy 341.034775 68.611835) (xy 340.948608 68.591912) + (xy 340.883489 68.556286) (xy 340.857586 68.532718) (xy 340.83586 68.505094) (xy 340.818035 68.472434) + (xy 340.804928 68.435408) (xy 340.796351 68.391284) (xy 340.793451 68.342144) (xy 340.794473 68.333809) + (xy 341.030306 68.333809) (xy 341.030306 68.342144) (xy 341.030448 68.351792) (xy 341.041612 68.419168) + (xy 341.067825 68.465767) (xy 341.086397 68.482594) (xy 341.109038 68.495218) (xy 341.137205 68.503507) + (xy 341.170166 68.506366) (xy 341.202058 68.503875) (xy 341.233987 68.495703) (xy 341.264122 68.481752) + (xy 341.295739 68.459409) (xy 341.325786 68.429722) (xy 341.360509 68.383814) (xy 341.394014 68.326756) + (xy 341.394014 68.140277) (xy 341.254155 68.140277) (xy 341.188501 68.144487) (xy 341.119405 68.163727) + (xy 341.072672 68.197202) (xy 341.055111 68.221158) (xy 341.042331 68.249571) (xy 341.033275 68.288498) + (xy 341.030306 68.333809) (xy 340.794473 68.333809) (xy 340.803036 68.263985) (xy 340.81544 68.228115) + (xy 340.832809 68.195473) (xy 340.855794 68.165257) (xy 340.88386 68.13851) (xy 340.919343 68.113801) + (xy 340.960403 68.093106) (xy 341.011275 68.075184) (xy 341.068466 68.062085) (xy 341.137776 68.053349) + (xy 341.214221 68.050426) (xy 341.394014 68.050426) (xy 341.394014 67.958927) (xy 341.392309 67.905163) + (xy 341.377834 67.813719) (xy 341.350329 67.748309) (xy 341.310012 67.702304) (xy 341.284082 67.685423) + (xy 341.253622 67.672756) (xy 341.216809 67.664479) (xy 341.174379 67.661622) (xy 341.119756 67.665355) + (xy 341.050405 67.686015) (xy 341.02228 67.703295) (xy 340.998799 67.72482) (xy 340.998799 67.736269) + (xy 341.004311 67.73793) (xy 341.049103 67.763196) (xy 341.078243 67.804227) (xy 341.086284 67.83111) + (xy 341.089107 67.862298) (xy 341.085858 67.892261) (xy 341.076633 67.918435) (xy 341.062386 67.940445) + (xy 341.042276 67.959542) (xy 341.018574 67.97342) (xy 340.96436 67.984938) (xy 340.91504 67.975758) + (xy 340.871055 67.947254) (xy 340.841952 67.902402) (xy 340.833998 67.873977) (xy 340.831187 67.841324) + (xy 340.836521 67.794721) (xy 340.847905 67.75964) (xy 340.865197 67.726411) (xy 340.889178 67.694051) + (xy 340.918754 67.664554) (xy 340.954329 67.637795) (xy 340.99482 67.614937) (xy 341.039592 67.596495) + (xy 341.088308 67.582837) (xy 341.193246 67.57168) + ) + ) + (polygon + (pts + (xy 342.376237 68.5975) (xy 342.376237 68.507649) (xy 342.312398 68.507649) (xy 342.284991 68.504731) + (xy 342.263133 68.496028) (xy 342.248734 68.48386) (xy 342.238614 68.467453) (xy 342.23134 68.426865) + (xy 342.23134 68.105106) (xy 342.331815 68.105106) (xy 342.557862 68.428514) (xy 342.569949 68.45083) + (xy 342.573671 68.470203) (xy 342.570544 68.484067) (xy 342.561883 68.495042) (xy 342.529004 68.506992) + (xy 342.516096 68.507649) (xy 342.460684 68.507649) (xy 342.460684 68.5975) (xy 343.027266 68.5975) + (xy 343.027266 68.507649) (xy 342.975975 68.507649) (xy 342.940012 68.504725) (xy 342.908174 68.495982) + (xy 342.857569 68.464049) (xy 342.82714 68.429247) (xy 342.511425 67.984664) (xy 342.713567 67.762372) + (xy 342.74305 67.734529) (xy 342.77398 67.713501) (xy 342.838909 67.689987) (xy 342.894093 67.685069) + (xy 342.968465 67.685069) (xy 342.968465 67.595127) (xy 342.498511 67.595127) (xy 342.498511 67.685069) + (xy 342.553923 67.685069) (xy 342.572037 67.687835) (xy 342.586163 67.695469) (xy 342.600821 67.721582) + (xy 342.600303 67.738506) (xy 342.593696 67.756342) (xy 342.583233 67.771073) (xy 342.365704 68.009027) + (xy 342.23134 68.009027) (xy 342.23134 67.120319) (xy 341.849588 67.120319) (xy 341.849588 67.210261) + (xy 341.934401 67.210261) (xy 341.961768 67.213179) (xy 341.983603 67.221883) (xy 341.998005 67.234059) + (xy 342.008137 67.25048) (xy 342.015459 67.291319) (xy 342.015459 68.426865) (xy 342.012541 68.454138) + (xy 342.003838 68.475899) (xy 341.991655 68.490258) (xy 341.975223 68.500358) (xy 341.934401 68.507649) + (xy 341.849588 68.507649) (xy 341.849588 68.5975) + ) + ) + (polygon + (pts + (xy 343.504441 67.5798) (xy 343.596984 67.608786) (xy 343.638381 67.630793) (xy 343.676261 67.657556) + (xy 343.710957 67.689393) (xy 343.741729 67.725757) (xy 343.769015 67.767491) (xy 343.791862 67.813573) + (xy 343.810539 67.865236) (xy 343.82418 67.921058) (xy 343.83275 67.982369) (xy 343.835649 68.047587) + (xy 343.835649 68.105106) (xy 343.201472 68.105106) (xy 343.201472 68.139727) (xy 343.206045 68.258556) + (xy 343.224295 68.367804) (xy 343.253864 68.439731) (xy 343.295358 68.488038) (xy 343.322953 68.505981) + (xy 343.354765 68.518973) (xy 343.39741 68.528115) (xy 343.446387 68.531096) (xy 343.528222 68.52229) + (xy 343.565607 68.510508) (xy 343.598463 68.494149) (xy 343.629058 68.471802) (xy 343.655195 68.444832) + (xy 343.680826 68.407543) (xy 343.701451 68.364849) (xy 343.723029 68.297541) (xy 343.737921 68.222342) + (xy 343.827589 68.222342) (xy 343.824778 68.246882) (xy 343.799061 68.363852) (xy 343.757919 68.455) + (xy 343.731967 68.492421) (xy 343.702502 68.524859) (xy 343.668846 68.553004) (xy 343.631797 68.576134) + (xy 343.589061 68.595263) (xy 343.542863 68.609015) (xy 343.489074 68.61799) (xy 343.431641 68.620947) + (xy 343.406827 68.620386) (xy 343.352376 68.615027) (xy 343.300719 68.604173) (xy 343.251846 68.587975) + (xy 343.206134 68.56669) (xy 343.163327 68.540242) (xy 343.124101 68.50906) (xy 343.088123 68.472798) + (xy 343.056209 68.432139) (xy 343.02812 68.386546) (xy 343.00462 68.336915) (xy 342.985669 68.282702) + (xy 342.971847 68.224862) (xy 342.9633 68.163035) (xy 342.960405 68.098053) (xy 342.96109 68.067956) + (xy 342.966615 68.009027) (xy 343.201564 68.009027) (xy 343.611434 68.009027) (xy 343.611434 67.976146) + (xy 343.61123 67.953146) (xy 343.600552 67.832352) (xy 343.577027 67.755037) (xy 343.542173 67.704933) + (xy 343.518983 67.686827) (xy 343.492071 67.673735) (xy 343.456152 67.664602) (xy 343.414879 67.661622) + (xy 343.408826 67.66167) (xy 343.339435 67.67164) (xy 343.288469 67.698721) (xy 343.26671 67.720859) + (xy 343.248284 67.748981) (xy 343.230928 67.789652) (xy 343.217711 67.839591) (xy 343.206736 67.915941) + (xy 343.201564 68.009027) (xy 342.966615 68.009027) (xy 342.966843 68.006591) (xy 342.978224 67.94751) + (xy 343.01661 67.838418) (xy 343.073025 67.745081) (xy 343.143823 67.670489) (xy 343.22577 67.616209) + (xy 343.316564 67.583011) (xy 343.414879 67.57168) + ) + ) + (polygon + (pts + (xy 344.521849 67.41515) (xy 344.575499 67.404209) (xy 344.622408 67.37218) (xy 344.64073 67.349308) + (xy 344.654109 67.323094) (xy 344.663357 67.273642) (xy 344.652413 67.219943) (xy 344.620379 67.172993) + (xy 344.597512 67.154668) (xy 344.571298 67.141287) (xy 344.521849 67.132042) (xy 344.468238 67.142985) + (xy 344.421315 67.175033) (xy 344.402984 67.197918) (xy 344.389596 67.224152) (xy 344.380341 67.273642) + (xy 344.391282 67.327253) (xy 344.423327 67.374183) (xy 344.446209 67.392518) (xy 344.472434 67.405905) + ) + ) + (polygon + (pts + (xy 344.837655 68.5975) (xy 344.837655 68.507649) (xy 344.710893 68.507649) (xy 344.683527 68.50473) + (xy 344.661691 68.496022) (xy 344.647295 68.483843) (xy 344.637164 68.467414) (xy 344.629835 68.426499) + (xy 344.629835 67.595127) (xy 344.220698 67.595127) (xy 344.220698 67.685069) (xy 344.332897 67.685069) + (xy 344.360263 67.687988) (xy 344.382098 67.696696) (xy 344.396495 67.708875) (xy 344.406626 67.725304) + (xy 344.413955 67.766219) (xy 344.413955 68.426499) (xy 344.411037 68.453908) (xy 344.402333 68.47577) + (xy 344.390162 68.490181) (xy 344.373749 68.500319) (xy 344.332897 68.507649) (xy 344.206043 68.507649) + (xy 344.206043 68.5975) + ) + ) + (polygon + (pts + (xy 345.352763 68.620947) (xy 345.398518 68.618048) (xy 345.440472 68.609479) (xy 345.477265 68.59604) + (xy 345.510469 68.577688) (xy 345.565619 68.527383) (xy 345.607199 68.457597) (xy 345.634194 68.365541) + (xy 345.643473 68.254308) (xy 345.643473 68.101992) (xy 345.553531 68.101992) (xy 345.553531 68.256414) + (xy 345.550616 68.319729) (xy 345.541938 68.373002) (xy 345.529791 68.411409) (xy 345.513429 68.442712) + (xy 345.495187 68.464959) (xy 345.473642 68.481813) (xy 345.422286 68.499783) (xy 345.394804 68.501695) + (xy 345.361274 68.49878) (xy 345.330882 68.490098) (xy 345.305134 68.476613) (xy 345.282576 68.458102) + (xy 345.24777 68.406395) (xy 345.227263 68.331789) (xy 345.223437 68.273267) (xy 345.223437 67.766219) + (xy 345.226355 67.73881) (xy 345.235058 67.716948) (xy 345.247229 67.702537) (xy 345.263643 67.692399) + (xy 345.304495 67.685069) (xy 345.559393 67.685069) (xy 345.559393 67.595127) (xy 345.223437 67.595127) + (xy 345.223437 67.22977) (xy 345.113069 67.22977) (xy 345.078998 67.442261) (xy 345.070263 67.478457) + (xy 345.05652 67.509647) (xy 345.039221 67.534363) (xy 345.017733 67.554798) (xy 344.962524 67.58304) + (xy 344.886165 67.594944) (xy 344.874017 67.595127) (xy 344.751376 67.595127) (xy 344.751376 67.685069) + (xy 344.926498 67.685069) (xy 344.953865 67.687988) (xy 344.9757 67.696696) (xy 344.990096 67.708875) + (xy 345.000227 67.725304) (xy 345.007556 67.766219) (xy 345.007556 68.264841) (xy 345.010423 68.322961) + (xy 345.018768 68.375233) (xy 345.031774 68.420653) (xy 345.049246 68.460909) (xy 345.070666 68.495955) + (xy 345.095795 68.526267) (xy 345.157439 68.574361) (xy 345.234988 68.606181) (xy 345.329676 68.620442) + ) + ) + (polygon + (pts + (xy 346.400565 67.735353) (xy 346.410457 67.735353) (xy 346.417514 67.721582) (xy 346.463293 67.6603) + (xy 346.524889 67.612861) (xy 346.600211 67.582499) (xy 346.642747 67.574497) (xy 346.689535 67.57168) + (xy 346.780588 67.582295) (xy 346.82699 67.596683) (xy 346.87043 67.616545) (xy 346.913296 67.643177) + (xy 346.952576 67.674923) (xy 346.990336 67.713732) (xy 347.023746 67.75703) (xy 347.053915 67.806444) + (xy 347.07899 67.859258) (xy 347.099062 67.915538) (xy 347.113544 67.973706) (xy 347.12505 68.090085) + (xy 347.123834 68.131069) (xy 347.105293 68.253009) (xy 347.066861 68.361881) (xy 347.012194 68.453145) + (xy 346.944365 68.525067) (xy 346.865125 68.577337) (xy 346.774828 68.609688) (xy 346.725367 68.618074) + (xy 346.672774 68.620947) (xy 346.63627 68.619069) (xy 346.59345 68.611568) (xy 346.554484 68.598815) + (xy 346.517849 68.580391) (xy 346.485503 68.557354) (xy 346.455895 68.528502) (xy 346.431195 68.495809) + (xy 346.410556 68.458044) (xy 346.395436 68.417615) (xy 346.38472 68.417615) (xy 346.294503 68.5975) + (xy 346.184685 68.5975) (xy 346.184685 68.064989) (xy 346.402672 68.064989) (xy 346.402672 68.127821) + (xy 346.409309 68.249391) (xy 346.431919 68.358391) (xy 346.466692 68.435246) (xy 346.512006 68.487483) + (xy 346.539137 68.506009) (xy 346.569387 68.519505) (xy 346.604617 68.528182) (xy 346.643373 68.531096) + (xy 346.681313 68.528305) (xy 346.745151 68.50733) (xy 346.773374 68.488544) (xy 346.798306 68.46448) + (xy 346.821882 68.432176) (xy 346.841599 68.393776) (xy 346.859253 68.343344) (xy 346.87213 68.285503) + (xy 346.881036 68.211182) (xy 346.883983 68.127821) (xy 346.883983 68.064989) (xy 346.87735 67.943416) + (xy 346.854745 67.834369) (xy 346.819979 67.757487) (xy 346.774678 67.705239) (xy 346.747557 67.686711) + (xy 346.717321 67.673213) (xy 346.682108 67.664536) (xy 346.643373 67.661622) (xy 346.605356 67.664422) + (xy 346.541506 67.68541) (xy 346.513282 67.7042) (xy 346.488348 67.728266) (xy 346.464772 67.760572) + (xy 346.445056 67.798973) (xy 346.427402 67.84941) (xy 346.414525 67.907258) (xy 346.405619 67.9816) + (xy 346.402672 68.064989) (xy 346.184685 68.064989) (xy 346.184685 67.291777) (xy 346.177301 67.250535) + (xy 346.167159 67.234084) (xy 346.152765 67.221893) (xy 346.130952 67.213181) (xy 346.103627 67.210261) + (xy 346.018813 67.210261) (xy 346.018813 67.120319) (xy 346.400565 67.120319) + ) + ) + (polygon + (pts + (xy 347.339465 68.996104) (xy 347.384397 68.993143) (xy 347.426634 68.984141) (xy 347.463711 68.970111) + (xy 347.498527 68.950504) (xy 347.560904 68.894724) (xy 347.616937 68.811747) (xy 347.667615 68.692564) + (xy 347.674139 68.672696) (xy 347.9534 67.783896) (xy 347.966524 67.75174) (xy 347.983982 67.725955) + (xy 348.003091 67.70849) (xy 348.025845 67.695884) (xy 348.0826 67.685113) (xy 348.087031 67.685069) + (xy 348.113135 67.685069) (xy 348.113135 67.595127) (xy 347.725063 67.595127) (xy 347.725063 67.685069) + (xy 347.793024 67.685069) (xy 347.820821 67.687958) (xy 347.842676 67.696454) (xy 347.856543 67.708147) + (xy 347.865482 67.723691) (xy 347.86787 67.764699) (xy 347.863732 67.782156) (xy 347.692182 68.332618) + (xy 347.681741 68.332618) (xy 347.491323 67.784171) (xy 347.484681 67.754976) (xy 347.485489 67.730361) + (xy 347.491912 67.713359) (xy 347.503521 67.700138) (xy 347.540236 67.686153) (xy 347.55791 67.685069) + (xy 347.630084 67.685069) (xy 347.630084 67.595127) (xy 347.095008 67.595127) (xy 347.095008 67.685069) + (xy 347.125234 67.685069) (xy 347.160918 67.688061) (xy 347.191828 67.697279) (xy 347.21477 67.710505) + (xy 347.234386 67.728865) (xy 347.263261 67.779774) (xy 347.487934 68.366049) (xy 347.517293 68.449382) + (xy 347.536013 68.52358) (xy 347.546552 68.633953) (xy 347.535036 68.730186) (xy 347.520889 68.775999) + (xy 347.501355 68.818249) (xy 347.478978 68.85237) (xy 347.45237 68.881082) (xy 347.425689 68.900861) + (xy 347.395934 68.914814) (xy 347.345785 68.923106) (xy 347.303587 68.920075) (xy 347.268216 68.910585) + (xy 347.231113 68.888942) (xy 347.231113 68.877768) (xy 347.259813 68.865827) (xy 347.284065 68.84893) + (xy 347.301402 68.829484) (xy 347.313733 68.806124) (xy 347.321422 68.762089) (xy 347.318624 68.734294) + (xy 347.310763 68.71063) (xy 347.282171 68.674607) (xy 347.238398 68.653637) (xy 347.207208 68.64989) + (xy 347.180339 68.652824) (xy 347.154378 68.661638) (xy 347.131439 68.675737) (xy 347.111796 68.695346) + (xy 347.097693 68.718218) (xy 347.088314 68.745761) (xy 347.084567 68.781048) (xy 347.087416 68.819204) + (xy 347.095635 68.85335) (xy 347.126202 68.909976) (xy 347.174749 68.953283) (xy 347.241816 68.982989) + (xy 347.326672 68.995898) + ) + ) + (polygon + (pts + (xy 349.045715 68.620947) (xy 349.09147 68.618048) (xy 349.133424 68.609479) (xy 349.170217 68.59604) + (xy 349.20342 68.577688) (xy 349.258571 68.527383) (xy 349.300151 68.457597) (xy 349.327146 68.365541) + (xy 349.336425 68.254308) (xy 349.336425 68.101992) (xy 349.246483 68.101992) (xy 349.246483 68.256414) + (xy 349.243568 68.319729) (xy 349.23489 68.373002) (xy 349.222743 68.411409) (xy 349.206381 68.442712) + (xy 349.188139 68.464959) (xy 349.166594 68.481813) (xy 349.115238 68.499783) (xy 349.087755 68.501695) + (xy 349.054225 68.49878) (xy 349.023834 68.490098) (xy 348.998086 68.476613) (xy 348.975528 68.458102) + (xy 348.940722 68.406395) (xy 348.920215 68.331789) (xy 348.916388 68.273267) (xy 348.916388 67.766219) + (xy 348.919307 67.73881) (xy 348.92801 67.716948) (xy 348.940181 67.702537) (xy 348.956595 67.692399) + (xy 348.997447 67.685069) (xy 349.252345 67.685069) (xy 349.252345 67.595127) (xy 348.916388 67.595127) + (xy 348.916388 67.22977) (xy 348.806021 67.22977) (xy 348.771949 67.442261) (xy 348.763215 67.478457) + (xy 348.749472 67.509647) (xy 348.732173 67.534363) (xy 348.710685 67.554798) (xy 348.655476 67.58304) + (xy 348.579117 67.594944) (xy 348.566969 67.595127) (xy 348.444328 67.595127) (xy 348.444328 67.685069) + (xy 348.61945 67.685069) (xy 348.646816 67.687988) (xy 348.668652 67.696696) (xy 348.683048 67.708875) + (xy 348.693179 67.725304) (xy 348.700508 67.766219) (xy 348.700508 68.264841) (xy 348.703375 68.322961) + (xy 348.71172 68.375233) (xy 348.724726 68.420653) (xy 348.742198 68.460909) (xy 348.763618 68.495955) + (xy 348.788747 68.526267) (xy 348.850391 68.574361) (xy 348.927939 68.606181) (xy 349.022628 68.620442) + ) + ) + (polygon + (pts + (xy 349.907221 68.5975) (xy 349.907221 68.507649) (xy 349.843382 68.507649) (xy 349.815975 68.504729) + (xy 349.794117 68.496018) (xy 349.779728 68.483844) (xy 349.769611 68.467422) (xy 349.762324 68.426682) + (xy 349.762324 67.980176) (xy 349.788841 67.912598) (xy 349.819204 67.852671) (xy 349.84904 67.807044) + (xy 349.88181 67.768637) (xy 349.91303 67.741322) (xy 349.946493 67.72048) (xy 349.978705 67.707545) + (xy 350.012737 67.700562) (xy 350.034532 67.699357) (xy 350.071829 67.702244) (xy 350.103463 67.710728) + (xy 350.127877 67.723274) (xy 350.148003 67.740142) (xy 350.176575 67.786479) (xy 350.191575 67.855827) + (xy 350.19326 67.89582) (xy 350.19326 68.426682) (xy 350.190341 68.45404) (xy 350.181638 68.475855) + (xy 350.169465 68.490232) (xy 350.153049 68.500342) (xy 350.112201 68.507649) (xy 350.048362 68.507649) + (xy 350.048362 68.5975) (xy 350.575011 68.5975) (xy 350.575011 68.507649) (xy 350.490198 68.507649) + (xy 350.462791 68.504729) (xy 350.440933 68.496018) (xy 350.426544 68.483844) (xy 350.416427 68.467422) + (xy 350.40914 68.426682) (xy 350.40914 67.89582) (xy 350.406163 67.831357) (xy 350.397046 67.773614) + (xy 350.383938 67.72907) (xy 350.365814 67.68983) (xy 350.344991 67.659054) (xy 350.319798 67.632775) + (xy 350.291497 67.611926) (xy 350.258962 67.595335) (xy 350.179241 67.575022) (xy 350.122643 67.57168) + (xy 350.031509 67.582533) (xy 349.950184 67.613695) (xy 349.878327 67.66385) (xy 349.81793 67.731056) + (xy 349.774933 67.807855) (xy 349.772032 67.81522) (xy 349.762324 67.81522) (xy 349.762324 67.120319) + (xy 349.380572 67.120319) (xy 349.380572 67.210261) (xy 349.465385 67.210261) (xy 349.492711 67.213181) + (xy 349.514524 67.221893) (xy 349.528918 67.234084) (xy 349.539059 67.250535) (xy 349.546443 67.291777) + (xy 349.546443 68.426682) (xy 349.543525 68.45404) (xy 349.534822 68.475855) (xy 349.522649 68.490232) + (xy 349.506233 68.500342) (xy 349.465385 68.507649) (xy 349.380572 68.507649) (xy 349.380572 68.5975) + ) + ) + (polygon + (pts + (xy 351.118956 67.5798) (xy 351.211499 67.608786) (xy 351.252896 67.630793) (xy 351.290776 67.657556) + (xy 351.325472 67.689393) (xy 351.356244 67.725757) (xy 351.38353 67.767491) (xy 351.406377 67.813573) + (xy 351.425054 67.865236) (xy 351.438695 67.921058) (xy 351.447265 67.982369) (xy 351.450164 68.047587) + (xy 351.450164 68.105106) (xy 350.815987 68.105106) (xy 350.815987 68.139727) (xy 350.82056 68.258556) + (xy 350.83881 68.367804) (xy 350.868379 68.439731) (xy 350.909873 68.488038) (xy 350.937468 68.505981) + (xy 350.96928 68.518973) (xy 351.011925 68.528115) (xy 351.060902 68.531096) (xy 351.142737 68.52229) + (xy 351.180122 68.510508) (xy 351.212978 68.494149) (xy 351.243573 68.471802) (xy 351.26971 68.444832) + (xy 351.295341 68.407543) (xy 351.315966 68.364849) (xy 351.337544 68.297541) (xy 351.352436 68.222342) + (xy 351.442104 68.222342) (xy 351.439293 68.246882) (xy 351.413576 68.363852) (xy 351.372434 68.455) + (xy 351.346482 68.492421) (xy 351.317017 68.524859) (xy 351.283361 68.553004) (xy 351.246312 68.576134) + (xy 351.203576 68.595263) (xy 351.157378 68.609015) (xy 351.103589 68.61799) (xy 351.046156 68.620947) + (xy 351.021342 68.620386) (xy 350.966891 68.615027) (xy 350.915234 68.604173) (xy 350.866361 68.587975) + (xy 350.820649 68.56669) (xy 350.777842 68.540242) (xy 350.738616 68.50906) (xy 350.702638 68.472798) + (xy 350.670724 68.432139) (xy 350.642635 68.386546) (xy 350.619135 68.336915) (xy 350.600184 68.282702) + (xy 350.586362 68.224862) (xy 350.577815 68.163035) (xy 350.57492 68.098053) (xy 350.575605 68.067956) + (xy 350.58113 68.009027) (xy 350.816079 68.009027) (xy 351.225949 68.009027) (xy 351.225949 67.976146) + (xy 351.225745 67.953146) (xy 351.215067 67.832352) (xy 351.191542 67.755037) (xy 351.156688 67.704933) + (xy 351.133498 67.686827) (xy 351.106586 67.673735) (xy 351.070667 67.664602) (xy 351.029394 67.661622) + (xy 351.023341 67.66167) (xy 350.95395 67.67164) (xy 350.902984 67.698721) (xy 350.881225 67.720859) + (xy 350.862799 67.748981) (xy 350.845443 67.789652) (xy 350.832226 67.839591) (xy 350.821251 67.915941) + (xy 350.816079 68.009027) (xy 350.58113 68.009027) (xy 350.581358 68.006591) (xy 350.592739 67.94751) + (xy 350.631125 67.838418) (xy 350.68754 67.745081) (xy 350.758338 67.670489) (xy 350.840285 67.616209) + (xy 350.931079 67.583011) (xy 351.029394 67.57168) + ) + ) + (polygon + (pts + (xy 352.37925 67.5798) (xy 352.471792 67.608786) (xy 352.513189 67.630793) (xy 352.551069 67.657556) + (xy 352.585765 67.689393) (xy 352.616537 67.725757) (xy 352.643823 67.767491) (xy 352.66667 67.813573) + (xy 352.685348 67.865236) (xy 352.698988 67.921058) (xy 352.707558 67.982369) (xy 352.710457 68.047587) + (xy 352.710457 68.105106) (xy 352.07628 68.105106) (xy 352.07628 68.139727) (xy 352.080853 68.258556) + (xy 352.099103 68.367804) (xy 352.128672 68.439731) (xy 352.170166 68.488038) (xy 352.197761 68.505981) + (xy 352.229573 68.518973) (xy 352.272218 68.528115) (xy 352.321195 68.531096) (xy 352.40303 68.52229) + (xy 352.440415 68.510508) (xy 352.473271 68.494149) (xy 352.503866 68.471802) (xy 352.530003 68.444832) + (xy 352.555634 68.407543) (xy 352.576259 68.364849) (xy 352.597837 68.297541) (xy 352.612729 68.222342) + (xy 352.702397 68.222342) (xy 352.699586 68.246882) (xy 352.673869 68.363852) (xy 352.632727 68.455) + (xy 352.606775 68.492421) (xy 352.577311 68.524859) (xy 352.543654 68.553004) (xy 352.506605 68.576134) + (xy 352.463869 68.595263) (xy 352.417671 68.609015) (xy 352.363882 68.61799) (xy 352.306449 68.620947) + (xy 352.281635 68.620386) (xy 352.227184 68.615027) (xy 352.175527 68.604173) (xy 352.126655 68.587975) + (xy 352.080942 68.56669) (xy 352.038135 68.540242) (xy 351.998909 68.50906) (xy 351.962932 68.472798) + (xy 351.931017 68.432139) (xy 351.902928 68.386546) (xy 351.879428 68.336915) (xy 351.860477 68.282702) + (xy 351.846655 68.224862) (xy 351.838108 68.163035) (xy 351.835213 68.098053) (xy 351.835898 68.067956) + (xy 351.841423 68.009027) (xy 352.076372 68.009027) (xy 352.486242 68.009027) (xy 352.486242 67.976146) + (xy 352.486038 67.953146) (xy 352.47536 67.832352) (xy 352.451835 67.755037) (xy 352.416981 67.704933) + (xy 352.393791 67.686827) (xy 352.366879 67.673735) (xy 352.33096 67.664602) (xy 352.289687 67.661622) + (xy 352.283634 67.66167) (xy 352.214243 67.67164) (xy 352.163277 67.698721) (xy 352.141518 67.720859) + (xy 352.123092 67.748981) (xy 352.105736 67.789652) (xy 352.092519 67.839591) (xy 352.081545 67.915941) + (xy 352.076372 68.009027) (xy 351.841423 68.009027) (xy 351.841651 68.006591) (xy 351.853032 67.94751) + (xy 351.891418 67.838418) (xy 351.947833 67.745081) (xy 352.018631 67.670489) (xy 352.100578 67.616209) + (xy 352.191372 67.583011) (xy 352.289687 67.57168) + ) + ) + (polygon + (pts + (xy 353.276306 68.5975) (xy 353.276306 68.507649) (xy 353.212467 68.507649) (xy 353.185101 68.50473) + (xy 353.163266 68.496022) (xy 353.148869 68.483843) (xy 353.138738 68.467414) (xy 353.131409 68.426499) + (xy 353.131409 67.979077) (xy 353.160147 67.905865) (xy 353.192654 67.841819) (xy 353.222256 67.797117) + (xy 353.254782 67.760003) (xy 353.284934 67.734865) (xy 353.317452 67.716117) (xy 353.348888 67.705032) + (xy 353.382421 67.699769) (xy 353.395192 67.699357) (xy 353.432513 67.702244) (xy 353.46416 67.710728) + (xy 353.488572 67.723271) (xy 353.508692 67.740133) (xy 353.537246 67.786452) (xy 353.552234 67.85579) + (xy 353.553919 67.89582) (xy 353.553919 68.426682) (xy 353.551001 68.45404) (xy 353.542297 68.475855) + (xy 353.530125 68.490232) (xy 353.513708 68.500342) (xy 353.472861 68.507649) (xy 353.409022 68.507649) + (xy 353.409022 68.5975) (xy 353.935671 68.5975) (xy 353.935671 68.507649) (xy 353.850857 68.507649) + (xy 353.82345 68.504729) (xy 353.801593 68.496018) (xy 353.787204 68.483844) (xy 353.777087 68.467422) + (xy 353.769799 68.426682) (xy 353.769799 67.89582) (xy 353.766843 67.83372) (xy 353.75787 67.777948) + (xy 353.744751 67.733855) (xy 353.72667 67.694895) (xy 353.705645 67.663755) (xy 353.680278 67.637045) + (xy 353.618717 67.598215) (xy 353.538238 67.576229) (xy 353.470754 67.57168) (xy 353.388107 67.582615) + (xy 353.31255 67.614471) (xy 353.243617 67.666969) (xy 353.183225 67.739582) (xy 353.137048 67.8269) + (xy 353.12628 67.857169) (xy 353.116663 67.857169) (xy 353.116663 67.595127) (xy 352.749658 67.595127) + (xy 352.749658 67.685069) (xy 352.834471 67.685069) (xy 352.861837 67.687988) (xy 352.883673 67.696696) + (xy 352.898069 67.708875) (xy 352.9082 67.725304) (xy 352.915529 67.766219) (xy 352.915529 68.426499) + (xy 352.912611 68.453908) (xy 352.903908 68.47577) (xy 352.891737 68.490181) (xy 352.875323 68.500319) + (xy 352.834471 68.507649) (xy 352.749658 68.507649) (xy 352.749658 68.5975) + ) + ) + (polygon + (pts + (xy 354.875578 68.426682) (xy 354.882866 68.467422) (xy 354.892983 68.483844) (xy 354.907371 68.496018) + (xy 354.929229 68.504729) (xy 354.956636 68.507649) (xy 355.041541 68.507649) (xy 355.041541 68.5975) + (xy 354.674444 68.5975) (xy 354.674444 68.417615) (xy 354.664827 68.417615) (xy 354.646701 68.464516) + (xy 354.60256 68.529542) (xy 354.542921 68.578738) (xy 354.469763 68.609916) (xy 354.428378 68.618102) + (xy 354.383368 68.620947) (xy 354.378987 68.620928) (xy 354.326175 68.617533) (xy 354.276646 68.608548) + (xy 354.229055 68.593821) (xy 354.184977 68.573933) (xy 354.142457 68.547903) (xy 354.10385 68.517066) + (xy 354.067091 68.479496) (xy 354.034802 68.437553) (xy 354.005415 68.388821) (xy 353.98112 68.336436) + (xy 353.961205 68.27854) (xy 353.946898 68.218134) (xy 353.938139 68.155033) (xy 353.935213 68.090909) + (xy 353.935645 68.068445) (xy 353.935951 68.064989) (xy 354.17628 68.064989) (xy 354.17628 68.127821) + (xy 354.182918 68.249339) (xy 354.205537 68.358351) (xy 354.240324 68.435226) (xy 354.285649 68.487477) + (xy 354.31278 68.506007) (xy 354.343027 68.519505) (xy 354.378245 68.528182) (xy 354.416982 68.531096) + (xy 354.454997 68.528294) (xy 354.518837 68.507295) (xy 354.547064 68.488495) (xy 354.572002 68.464418) + (xy 354.595581 68.432101) (xy 354.615301 68.393689) (xy 354.632955 68.343257) (xy 354.645833 68.285419) + (xy 354.654736 68.211135) (xy 354.657683 68.127821) (xy 354.657683 68.064989) (xy 354.651041 67.943402) + (xy 354.628421 67.834376) (xy 354.593635 67.757495) (xy 354.548312 67.705242) (xy 354.521181 67.686712) + (xy 354.490936 67.673213) (xy 354.455719 67.664536) (xy 354.416982 67.661622) (xy 354.37895 67.664427) + (xy 354.315116 67.68543) (xy 354.286892 67.704231) (xy 354.261957 67.728312) (xy 354.23838 67.760632) + (xy 354.218661 67.799049) (xy 354.201008 67.849491) (xy 354.188131 67.907341) (xy 354.179227 67.981647) + (xy 354.17628 68.064989) (xy 353.935951 68.064989) (xy 353.940923 68.008874) (xy 353.952063 67.949906) + (xy 353.990185 67.839304) (xy 354.04564 67.744513) (xy 354.113878 67.669585) (xy 354.191629 67.615693) + (xy 354.277323 67.582905) (xy 354.37082 67.57168) (xy 354.43506 67.576932) (xy 354.47907 67.587694) + (xy 354.517849 67.6034) (xy 354.55627 67.6264) (xy 354.588794 67.653577) (xy 354.623284 67.693369) + (xy 354.649715 67.735444) (xy 354.659698 67.735444) (xy 354.659698 67.291777) (xy 354.652314 67.250535) + (xy 354.642172 67.234084) (xy 354.627778 67.221893) (xy 354.605965 67.213181) (xy 354.57864 67.210261) + (xy 354.493827 67.210261) (xy 354.493827 67.120319) (xy 354.875578 67.120319) + ) + ) + (polygon + (pts + (xy 342.153376 70.092204) (xy 342.207108 70.097601) (xy 342.258118 70.108596) (xy 342.307282 70.125294) + (xy 342.353287 70.147187) (xy 342.397099 70.174745) (xy 342.437236 70.207084) (xy 342.474443 70.244889) + (xy 342.507404 70.286971) (xy 342.536447 70.333883) (xy 342.560683 70.38443) (xy 342.580051 70.438663) + (xy 342.594126 70.495755) (xy 342.602683 70.555076) (xy 342.605581 70.616405) (xy 342.604346 70.656547) + (xy 342.597719 70.716722) (xy 342.58554 70.774608) (xy 342.545931 70.880647) (xy 342.488451 70.97108) + (xy 342.41609 71.043565) (xy 342.331295 71.096743) (xy 342.235683 71.129617) (xy 342.184198 71.138065) + (xy 342.130131 71.140947) (xy 342.106938 71.140425) (xy 342.053195 71.135033) (xy 342.002174 71.124045) + (xy 341.953003 71.107354) (xy 341.90699 71.085468) (xy 341.863173 71.057919) (xy 341.823032 71.02559) + (xy 341.785823 70.987798) (xy 341.75286 70.945729) (xy 341.723816 70.898833) (xy 341.69958 70.848302) + (xy 341.680212 70.794088) (xy 341.666137 70.737015) (xy 341.65758 70.677714) (xy 341.654682 70.616405) + (xy 341.655922 70.576163) (xy 341.65611 70.574456) (xy 341.89575 70.574456) (xy 341.89575 70.658262) + (xy 341.899876 70.766011) (xy 341.918588 70.880218) (xy 341.949005 70.956417) (xy 341.990572 71.007194) + (xy 342.017228 71.025665) (xy 342.04744 71.038975) (xy 342.08636 71.048115) (xy 342.130131 71.051096) + (xy 342.165692 71.049178) (xy 342.231172 71.031694) (xy 342.258401 71.015966) (xy 342.282345 70.995305) + (xy 342.304557 70.967303) (xy 342.323127 70.933132) (xy 342.340074 70.885995) (xy 342.352475 70.830083) + (xy 342.361543 70.75102) (xy 342.364513 70.658262) (xy 342.364513 70.574456) (xy 342.361474 70.47486) + (xy 342.344587 70.354592) (xy 342.316295 70.277115) (xy 342.276907 70.226448) (xy 342.25067 70.207778) + (xy 342.220732 70.194447) (xy 342.178417 70.184691) (xy 342.130131 70.181622) (xy 342.091625 70.183504) + (xy 342.025654 70.199787) (xy 341.975805 70.233543) (xy 341.954385 70.259794) (xy 341.936437 70.292344) + (xy 341.919927 70.338303) (xy 341.907796 70.393887) (xy 341.898721 70.47588) (xy 341.89575 70.574456) + (xy 341.65611 70.574456) (xy 341.662557 70.515972) (xy 341.674744 70.458071) (xy 341.714365 70.352008) + (xy 341.771852 70.261559) (xy 341.844213 70.189065) (xy 341.929002 70.135885) (xy 342.024599 70.10301) + (xy 342.076075 70.094561) (xy 342.130131 70.09168) + ) + ) + (polygon + (pts + (xy 343.303779 71.1175) (xy 343.303779 71.027649) (xy 343.114003 71.027649) (xy 343.086637 71.02473) + (xy 343.064801 71.016022) (xy 343.050405 71.003843) (xy 343.040274 70.987414) (xy 343.032945 70.946499) + (xy 343.032945 70.286219) (xy 343.035863 70.25881) (xy 343.044566 70.236948) (xy 343.056737 70.222537) + (xy 343.073151 70.212399) (xy 343.114003 70.205069) (xy 343.34582 70.205069) (xy 343.34582 70.115127) + (xy 343.032945 70.115127) (xy 343.032945 69.883585) (xy 343.035811 69.825038) (xy 343.044149 69.775081) + (xy 343.056428 69.735995) (xy 343.072766 69.703447) (xy 343.091885 69.678079) (xy 343.114156 69.657957) + (xy 343.168173 69.631713) (xy 343.237925 69.622733) (xy 343.284816 69.625548) (xy 343.320455 69.63353) + (xy 343.346278 69.644624) (xy 343.346278 69.655523) (xy 343.323083 69.667478) (xy 343.302039 69.684989) + (xy 343.284753 69.707197) (xy 343.272066 69.733996) (xy 343.264395 69.781003) (xy 343.267235 69.812376) + (xy 343.275386 69.839968) (xy 343.288248 69.863556) (xy 343.305295 69.883099) (xy 343.35117 69.909949) + (xy 343.40169 69.917931) (xy 343.431894 69.915025) (xy 343.460034 69.906403) (xy 343.48461 69.892726) + (xy 343.505808 69.873948) (xy 343.522318 69.851253) (xy 343.534438 69.824099) (xy 343.543198 69.766348) + (xy 343.540309 69.728044) (xy 343.531807 69.692658) (xy 343.518214 69.660867) (xy 343.499671 69.632216) + (xy 343.448082 69.584568) (xy 343.376494 69.55081) (xy 343.284075 69.533996) (xy 343.250473 69.532882) + (xy 343.191248 69.535796) (xy 343.134941 69.544471) (xy 343.083434 69.558308) (xy 343.035397 69.577387) + (xy 342.99263 69.6007) (xy 342.953748 69.628732) (xy 342.920094 69.660299) (xy 342.890671 69.696138) + (xy 342.866247 69.735281) (xy 342.846426 69.778372) (xy 342.831564 69.825001) (xy 342.821773 69.875384) + (xy 342.817064 69.946416) (xy 342.817064 69.992486) (xy 342.813883 70.031279) (xy 342.803333 70.063713) + (xy 342.790237 70.082759) (xy 342.771913 70.09771) (xy 342.721984 70.113529) (xy 342.693966 70.115127) + (xy 342.575539 70.115127) (xy 342.575539 70.205069) (xy 342.736006 70.205069) (xy 342.763373 70.207988) + (xy 342.785208 70.216696) (xy 342.799604 70.228875) (xy 342.809735 70.245304) (xy 342.817064 70.286219) + (xy 342.817064 70.946499) (xy 342.814146 70.973908) (xy 342.805443 70.99577) (xy 342.793272 71.010181) + (xy 342.776858 71.020319) (xy 342.736006 71.027649) (xy 342.651193 71.027649) (xy 342.651193 71.1175) + ) + ) + (polygon + (pts + (xy 344.309358 71.140947) (xy 344.355112 71.138048) (xy 344.397067 71.129479) (xy 344.43386 71.11604) + (xy 344.467063 71.097688) (xy 344.522213 71.047383) (xy 344.563794 70.977597) (xy 344.590788 70.885541) + (xy 344.600068 70.774308) (xy 344.600068 70.621992) (xy 344.510125 70.621992) (xy 344.510125 70.776414) + (xy 344.507211 70.839729) (xy 344.498533 70.893002) (xy 344.486385 70.931409) (xy 344.470023 70.962712) + (xy 344.451782 70.984959) (xy 344.430237 71.001813) (xy 344.37888 71.019783) (xy 344.351398 71.021695) + (xy 344.317868 71.01878) (xy 344.287477 71.010098) (xy 344.261728 70.996613) (xy 344.23917 70.978102) + (xy 344.204364 70.926395) (xy 344.183857 70.851789) (xy 344.180031 70.793267) (xy 344.180031 70.286219) + (xy 344.182949 70.25881) (xy 344.191653 70.236948) (xy 344.203824 70.222537) (xy 344.220237 70.212399) + (xy 344.261089 70.205069) (xy 344.515987 70.205069) (xy 344.515987 70.115127) (xy 344.180031 70.115127) + (xy 344.180031 69.74977) (xy 344.069664 69.74977) (xy 344.035592 69.962261) (xy 344.026858 69.998457) + (xy 344.013115 70.029647) (xy 343.995816 70.054363) (xy 343.974328 70.074798) (xy 343.919119 70.10304) + (xy 343.84276 70.114944) (xy 343.830611 70.115127) (xy 343.707971 70.115127) (xy 343.707971 70.205069) + (xy 343.883093 70.205069) (xy 343.910459 70.207988) (xy 343.932294 70.216696) (xy 343.946691 70.228875) + (xy 343.956822 70.245304) (xy 343.964151 70.286219) (xy 343.964151 70.784841) (xy 343.967018 70.842961) + (xy 343.975363 70.895233) (xy 343.988369 70.940653) (xy 344.005841 70.980909) (xy 344.027261 71.015955) + (xy 344.05239 71.046267) (xy 344.114034 71.094361) (xy 344.191582 71.126181) (xy 344.28627 71.140442) + ) + ) + (polygon + (pts + (xy 345.170863 71.1175) (xy 345.170863 71.027649) (xy 345.107024 71.027649) (xy 345.079617 71.024729) + (xy 345.05776 71.016018) (xy 345.043371 71.003844) (xy 345.033254 70.987422) (xy 345.025966 70.946682) + (xy 345.025966 70.500176) (xy 345.052484 70.432598) (xy 345.082847 70.372671) (xy 345.112683 70.327044) + (xy 345.145453 70.288637) (xy 345.176672 70.261322) (xy 345.210136 70.24048) (xy 345.242348 70.227545) + (xy 345.27638 70.220562) (xy 345.298175 70.219357) (xy 345.335472 70.222244) (xy 345.367106 70.230728) + (xy 345.39152 70.243274) (xy 345.411646 70.260142) (xy 345.440218 70.306479) (xy 345.455217 70.375827) + (xy 345.456902 70.41582) (xy 345.456902 70.946682) (xy 345.453984 70.97404) (xy 345.445281 70.995855) + (xy 345.433108 71.010232) (xy 345.416692 71.020342) (xy 345.375844 71.027649) (xy 345.312005 71.027649) + (xy 345.312005 71.1175) (xy 345.838654 71.1175) (xy 345.838654 71.027649) (xy 345.75384 71.027649) + (xy 345.726433 71.024729) (xy 345.704576 71.016018) (xy 345.690187 71.003844) (xy 345.68007 70.987422) + (xy 345.672782 70.946682) (xy 345.672782 70.41582) (xy 345.669805 70.351357) (xy 345.660689 70.293614) + (xy 345.647581 70.24907) (xy 345.629456 70.20983) (xy 345.608634 70.179054) (xy 345.58344 70.152775) + (xy 345.55514 70.131926) (xy 345.522604 70.115335) (xy 345.442883 70.095022) (xy 345.386286 70.09168) + (xy 345.295152 70.102533) (xy 345.213827 70.133695) (xy 345.14197 70.18385) (xy 345.081573 70.251056) + (xy 345.038575 70.327855) (xy 345.035675 70.33522) (xy 345.025966 70.33522) (xy 345.025966 69.640319) + (xy 344.644215 69.640319) (xy 344.644215 69.730261) (xy 344.729028 69.730261) (xy 344.756354 69.733181) + (xy 344.778167 69.741893) (xy 344.79256 69.754084) (xy 344.802702 69.770535) (xy 344.810086 69.811777) + (xy 344.810086 70.946682) (xy 344.807168 70.97404) (xy 344.798465 70.995855) (xy 344.786292 71.010232) + (xy 344.769875 71.020342) (xy 344.729028 71.027649) (xy 344.644215 71.027649) (xy 344.644215 71.1175) + ) + ) + (polygon + (pts + (xy 346.382599 70.0998) (xy 346.475142 70.128786) (xy 346.516539 70.150793) (xy 346.554419 70.177556) + (xy 346.589115 70.209393) (xy 346.619887 70.245757) (xy 346.647173 70.287491) (xy 346.67002 70.333573) + (xy 346.688697 70.385236) (xy 346.702338 70.441058) (xy 346.710907 70.502369) (xy 346.713806 70.567587) + (xy 346.713806 70.625106) (xy 346.07963 70.625106) (xy 346.07963 70.659727) (xy 346.084202 70.778556) + (xy 346.102453 70.887804) (xy 346.132022 70.959731) (xy 346.173516 71.008038) (xy 346.201111 71.025981) + (xy 346.232922 71.038973) (xy 346.275568 71.048115) (xy 346.324544 71.051096) (xy 346.40638 71.04229) + (xy 346.443765 71.030508) (xy 346.47662 71.014149) (xy 346.507216 70.991802) (xy 346.533352 70.964832) + (xy 346.558983 70.927543) (xy 346.579609 70.884849) (xy 346.601186 70.817541) (xy 346.616079 70.742342) + (xy 346.705746 70.742342) (xy 346.702935 70.766882) (xy 346.677219 70.883852) (xy 346.636076 70.975) + (xy 346.610125 71.012421) (xy 346.58066 71.044859) (xy 346.547003 71.073004) (xy 346.509955 71.096134) + (xy 346.467218 71.115263) (xy 346.42102 71.129015) (xy 346.367231 71.13799) (xy 346.309798 71.140947) + (xy 346.284984 71.140386) (xy 346.230534 71.135027) (xy 346.178877 71.124173) (xy 346.130004 71.107975) + (xy 346.084291 71.08669) (xy 346.041484 71.060242) (xy 346.002259 71.02906) (xy 345.966281 70.992798) + (xy 345.934366 70.952139) (xy 345.906278 70.906546) (xy 345.882778 70.856915) (xy 345.863827 70.802702) + (xy 345.850005 70.744862) (xy 345.841458 70.683035) (xy 345.838562 70.618053) (xy 345.839248 70.587956) + (xy 345.844772 70.529027) (xy 346.079721 70.529027) (xy 346.489592 70.529027) (xy 346.489592 70.496146) + (xy 346.489387 70.473146) (xy 346.47871 70.352352) (xy 346.455185 70.275037) (xy 346.42033 70.224933) + (xy 346.397141 70.206827) (xy 346.370228 70.193735) (xy 346.33431 70.184602) (xy 346.293037 70.181622) + (xy 346.286984 70.18167) (xy 346.217592 70.19164) (xy 346.166627 70.218721) (xy 346.144868 70.240859) + (xy 346.126442 70.268981) (xy 346.109086 70.309652) (xy 346.095868 70.359591) (xy 346.084894 70.435941) + (xy 346.079721 70.529027) (xy 345.844772 70.529027) (xy 345.845 70.526591) (xy 345.856382 70.46751) + (xy 345.894767 70.358418) (xy 345.951182 70.265081) (xy 346.021981 70.190489) (xy 346.103927 70.136209) + (xy 346.194722 70.103011) (xy 346.293037 70.09168) + ) + ) + (polygon + (pts + (xy 347.534462 71.140947) (xy 347.584629 71.138079) (xy 347.631643 71.129732) (xy 347.675758 71.116118) + (xy 347.71627 71.097691) (xy 347.786647 71.047096) (xy 347.840484 70.980401) (xy 347.875096 70.90073) + (xy 347.884379 70.857269) (xy 347.887967 70.812078) (xy 347.888004 70.806914) (xy 347.88511 70.758452) + (xy 347.876575 70.715387) (xy 347.863532 70.679335) (xy 347.84584 70.647458) (xy 347.797231 70.594966) + (xy 347.726895 70.553007) (xy 347.625412 70.519318) (xy 347.467876 70.481583) (xy 347.39157 70.459599) + (xy 347.335527 70.433168) (xy 347.311899 70.414319) (xy 347.294744 70.392078) (xy 347.279785 70.342382) + (xy 347.279015 70.325237) (xy 347.281889 70.299211) (xy 347.290282 70.27513) (xy 347.323158 70.233014) + (xy 347.378531 70.200667) (xy 347.456867 70.183097) (xy 347.490316 70.181622) (xy 347.53478 70.184486) + (xy 347.575134 70.192807) (xy 347.611227 70.20606) (xy 347.643504 70.223893) (xy 347.698431 70.273354) + (xy 347.741001 70.342109) (xy 347.764722 70.409775) (xy 347.782125 70.473797) (xy 347.86703 70.473797) + (xy 347.86703 70.115127) (xy 347.781392 70.115127) (xy 347.781392 70.213038) (xy 347.76976 70.224578) + (xy 347.729943 70.182346) (xy 347.684 70.146116) (xy 347.645442 70.1245) (xy 347.601794 70.107772) + (xy 347.556924 70.097383) (xy 347.506603 70.092185) (xy 347.483996 70.09168) (xy 347.423781 70.094557) + (xy 347.368303 70.102976) (xy 347.318746 70.116278) (xy 347.274069 70.134283) (xy 347.23533 70.156104) + (xy 347.201556 70.181839) (xy 347.173447 70.21056) (xy 347.150396 70.242503) (xy 347.132702 70.277035) + (xy 347.12025 70.314211) (xy 347.111495 70.385962) (xy 347.114361 70.429855) (xy 347.122703 70.470146) + (xy 347.154272 70.540212) (xy 347.205141 70.598512) (xy 347.276379 70.64562) (xy 347.369536 70.679881) + (xy 347.378391 70.682076) (xy 347.516877 70.715506) (xy 347.581721 70.734796) (xy 347.632542 70.757227) + (xy 347.662828 70.777263) (xy 347.685703 70.800059) (xy 347.70016 70.822945) (xy 347.709404 70.848583) + (xy 347.714164 70.89072) (xy 347.711229 70.926457) (xy 347.702405 70.958264) (xy 347.689202 70.98361) + (xy 347.671059 71.005247) (xy 347.62184 71.035808) (xy 347.551151 71.050362) (xy 347.528143 71.051096) + (xy 347.47813 71.048195) (xy 347.431037 71.039613) (xy 347.388172 71.025904) (xy 347.348791 71.007106) + (xy 347.314081 70.984043) (xy 347.283326 70.956461) (xy 347.257332 70.925198) (xy 347.23574 70.889893) + (xy 347.218976 70.851051) (xy 347.207123 70.808525) (xy 347.205467 70.800136) (xy 347.192461 70.72952) + (xy 347.107282 70.72952) (xy 347.107282 71.1175) (xy 347.192919 71.1175) (xy 347.192919 70.994493) + (xy 347.204277 70.983227) (xy 347.234618 71.022251) (xy 347.26798 71.055331) (xy 347.302866 71.081626) + (xy 347.340761 71.102857) (xy 347.426964 71.131061) + ) + ) + (polygon + (pts + (xy 348.497254 70.0998) (xy 348.589797 70.128786) (xy 348.631193 70.150793) (xy 348.669073 70.177556) + (xy 348.703769 70.209393) (xy 348.734541 70.245757) (xy 348.761828 70.287491) (xy 348.784674 70.333573) + (xy 348.803352 70.385236) (xy 348.816993 70.441058) (xy 348.825562 70.502369) (xy 348.828461 70.567587) + (xy 348.828461 70.625106) (xy 348.194284 70.625106) (xy 348.194284 70.659727) (xy 348.198857 70.778556) + (xy 348.217107 70.887804) (xy 348.246676 70.959731) (xy 348.28817 71.008038) (xy 348.315765 71.025981) + (xy 348.347577 71.038973) (xy 348.390223 71.048115) (xy 348.439199 71.051096) (xy 348.521034 71.04229) + (xy 348.55842 71.030508) (xy 348.591275 71.014149) (xy 348.62187 70.991802) (xy 348.648007 70.964832) + (xy 348.673638 70.927543) (xy 348.694264 70.884849) (xy 348.715841 70.817541) (xy 348.730733 70.742342) + (xy 348.820401 70.742342) (xy 348.81759 70.766882) (xy 348.791873 70.883852) (xy 348.750731 70.975) + (xy 348.724779 71.012421) (xy 348.695315 71.044859) (xy 348.661658 71.073004) (xy 348.624609 71.096134) + (xy 348.581873 71.115263) (xy 348.535675 71.129015) (xy 348.481886 71.13799) (xy 348.424453 71.140947) + (xy 348.399639 71.140386) (xy 348.345189 71.135027) (xy 348.293531 71.124173) (xy 348.244659 71.107975) + (xy 348.198946 71.08669) (xy 348.156139 71.060242) (xy 348.116913 71.02906) (xy 348.080936 70.992798) + (xy 348.049021 70.952139) (xy 348.020932 70.906546) (xy 347.997432 70.856915) (xy 347.978482 70.802702) + (xy 347.964659 70.744862) (xy 347.956113 70.683035) (xy 347.953217 70.618053) (xy 347.953903 70.587956) + (xy 347.959427 70.529027) (xy 348.194376 70.529027) (xy 348.604246 70.529027) (xy 348.604246 70.496146) + (xy 348.604042 70.473146) (xy 348.593365 70.352352) (xy 348.569839 70.275037) (xy 348.534985 70.224933) + (xy 348.511795 70.206827) (xy 348.484883 70.193735) (xy 348.448965 70.184602) (xy 348.407692 70.181622) + (xy 348.401639 70.18167) (xy 348.332247 70.19164) (xy 348.281281 70.218721) (xy 348.259523 70.240859) + (xy 348.241097 70.268981) (xy 348.22374 70.309652) (xy 348.210523 70.359591) (xy 348.199549 70.435941) + (xy 348.194376 70.529027) (xy 347.959427 70.529027) (xy 347.959655 70.526591) (xy 347.971036 70.46751) + (xy 348.009422 70.358418) (xy 348.065837 70.265081) (xy 348.136635 70.190489) (xy 348.218582 70.136209) + (xy 348.309377 70.103011) (xy 348.407692 70.09168) + ) + ) + (polygon + (pts + (xy 349.394311 71.1175) (xy 349.394311 71.027649) (xy 349.330472 71.027649) (xy 349.303105 71.02473) + (xy 349.28127 71.016022) (xy 349.266874 71.003843) (xy 349.256743 70.987414) (xy 349.249414 70.946499) + (xy 349.249414 70.353538) (xy 349.274662 70.313231) (xy 349.304485 70.277305) (xy 349.334921 70.250044) + (xy 349.367974 70.22935) (xy 349.397815 70.217946) (xy 349.428817 70.213211) (xy 349.43342 70.213129) + (xy 349.470462 70.216047) (xy 349.501432 70.224744) (xy 349.524109 70.237233) (xy 349.542532 70.254149) + (xy 349.567559 70.300915) (xy 349.579074 70.373817) (xy 349.579508 70.394846) (xy 349.579508 70.946682) + (xy 349.57659 70.97404) (xy 349.567886 70.995855) (xy 349.555713 71.010232) (xy 349.539297 71.020342) + (xy 349.49845 71.027649) (xy 349.455677 71.027649) (xy 349.455677 71.1175) (xy 349.919311 71.1175) + (xy 349.919311 71.027649) (xy 349.876446 71.027649) (xy 349.849039 71.024729) (xy 349.827181 71.016018) + (xy 349.812793 71.003844) (xy 349.802676 70.987422) (xy 349.795388 70.946682) (xy 349.795388 70.353447) + (xy 349.81708 70.314686) (xy 349.841921 70.281929) (xy 349.868965 70.255662) (xy 349.898002 70.235546) + (xy 349.927638 70.222031) (xy 349.958167 70.214616) (xy 349.979394 70.213129) (xy 350.01644 70.216047) + (xy 350.04742 70.224744) (xy 350.070114 70.237235) (xy 350.088553 70.254155) (xy 350.113607 70.300924) + (xy 350.125138 70.373797) (xy 350.125574 70.394846) (xy 350.125574 70.946682) (xy 350.122656 70.97404) + (xy 350.113952 70.995855) (xy 350.101779 71.010232) (xy 350.085363 71.020342) (xy 350.044516 71.027649) + (xy 349.980677 71.027649) (xy 349.980677 71.1175) (xy 350.486259 71.1175) (xy 350.486259 71.027649) + (xy 350.422512 71.027649) (xy 350.395062 71.024729) (xy 350.373178 71.016018) (xy 350.35878 71.003849) + (xy 350.348658 70.987435) (xy 350.341362 70.946682) (xy 350.341362 70.41582) (xy 350.338358 70.349988) + (xy 350.32905 70.29091) (xy 350.315877 70.246292) (xy 350.297576 70.206941) (xy 350.276742 70.176478) + (xy 350.251436 70.150468) (xy 350.223124 70.130026) (xy 350.190454 70.113819) (xy 350.110288 70.094423) + (xy 350.05917 70.09168) (xy 349.980683 70.102532) (xy 349.907426 70.134408) (xy 349.841448 70.186414) + (xy 349.788724 70.254644) (xy 349.780184 70.270191) (xy 349.769284 70.270191) (xy 349.752966 70.233962) + (xy 349.730734 70.199333) (xy 349.703788 70.168514) (xy 349.671651 70.14142) (xy 349.637438 70.120625) + (xy 349.599054 70.104826) (xy 349.559859 70.095401) (xy 349.517296 70.091707) (xy 349.513196 70.09168) + (xy 349.434183 70.102506) (xy 349.365457 70.133382) (xy 349.305406 70.183481) (xy 349.254705 70.252197) + (xy 349.244742 70.270191) (xy 349.234667 70.270191) (xy 349.234667 70.115127) (xy 348.867662 70.115127) + (xy 348.867662 70.205069) (xy 348.952475 70.205069) (xy 348.979842 70.207988) (xy 349.001677 70.216696) + (xy 349.016073 70.228875) (xy 349.026204 70.245304) (xy 349.033533 70.286219) (xy 349.033533 70.946499) + (xy 349.030615 70.973908) (xy 349.021912 70.99577) (xy 349.009741 71.010181) (xy 348.993327 71.020319) + (xy 348.952475 71.027649) (xy 348.867662 71.027649) (xy 348.867662 71.1175) + ) + ) + (polygon + (pts + (xy 351.029564 70.0998) (xy 351.122106 70.128786) (xy 351.163503 70.150793) (xy 351.201383 70.177556) + (xy 351.236079 70.209393) (xy 351.266851 70.245757) (xy 351.294137 70.287491) (xy 351.316984 70.333573) + (xy 351.335662 70.385236) (xy 351.349302 70.441058) (xy 351.357872 70.502369) (xy 351.360771 70.567587) + (xy 351.360771 70.625106) (xy 350.726594 70.625106) (xy 350.726594 70.659727) (xy 350.731167 70.778556) + (xy 350.749417 70.887804) (xy 350.778986 70.959731) (xy 350.82048 71.008038) (xy 350.848075 71.025981) + (xy 350.879887 71.038973) (xy 350.922532 71.048115) (xy 350.971509 71.051096) (xy 351.053344 71.04229) + (xy 351.09073 71.030508) (xy 351.123585 71.014149) (xy 351.15418 70.991802) (xy 351.180317 70.964832) + (xy 351.205948 70.927543) (xy 351.226573 70.884849) (xy 351.248151 70.817541) (xy 351.263043 70.742342) + (xy 351.352711 70.742342) (xy 351.3499 70.766882) (xy 351.324183 70.883852) (xy 351.283041 70.975) + (xy 351.257089 71.012421) (xy 351.227625 71.044859) (xy 351.193968 71.073004) (xy 351.156919 71.096134) + (xy 351.114183 71.115263) (xy 351.067985 71.129015) (xy 351.014196 71.13799) (xy 350.956763 71.140947) + (xy 350.931949 71.140386) (xy 350.877498 71.135027) (xy 350.825841 71.124173) (xy 350.776969 71.107975) + (xy 350.731256 71.08669) (xy 350.688449 71.060242) (xy 350.649223 71.02906) (xy 350.613246 70.992798) + (xy 350.581331 70.952139) (xy 350.553242 70.906546) (xy 350.529742 70.856915) (xy 350.510791 70.802702) + (xy 350.496969 70.744862) (xy 350.488422 70.683035) (xy 350.485527 70.618053) (xy 350.486212 70.587956) + (xy 350.491737 70.529027) (xy 350.726686 70.529027) (xy 351.136556 70.529027) (xy 351.136556 70.496146) + (xy 351.136352 70.473146) (xy 351.125674 70.352352) (xy 351.102149 70.275037) (xy 351.067295 70.224933) + (xy 351.044105 70.206827) (xy 351.017193 70.193735) (xy 350.981274 70.184602) (xy 350.940001 70.181622) + (xy 350.933948 70.18167) (xy 350.864557 70.19164) (xy 350.813591 70.218721) (xy 350.791832 70.240859) + (xy 350.773406 70.268981) (xy 350.75605 70.309652) (xy 350.742833 70.359591) (xy 350.731859 70.435941) + (xy 350.726686 70.529027) (xy 350.491737 70.529027) (xy 350.491965 70.526591) (xy 350.503346 70.46751) + (xy 350.541732 70.358418) (xy 350.598147 70.265081) (xy 350.668945 70.190489) (xy 350.750892 70.136209) + (xy 350.841686 70.103011) (xy 350.940001 70.09168) + ) + ) + (polygon + (pts + (xy 351.850234 71.140947) (xy 351.9004 71.138079) (xy 351.947414 71.129732) (xy 351.991529 71.116118) + (xy 352.032041 71.097691) (xy 352.102418 71.047096) (xy 352.156255 70.980401) (xy 352.190867 70.90073) + (xy 352.20015 70.857269) (xy 352.203738 70.812078) (xy 352.203775 70.806914) (xy 352.200881 70.758452) + (xy 352.192346 70.715387) (xy 352.179303 70.679335) (xy 352.161611 70.647458) (xy 352.113002 70.594966) + (xy 352.042666 70.553007) (xy 351.941183 70.519318) (xy 351.783647 70.481583) (xy 351.707341 70.459599) + (xy 351.651298 70.433168) (xy 351.627671 70.414319) (xy 351.610515 70.392078) (xy 351.595556 70.342382) + (xy 351.594786 70.325237) (xy 351.59766 70.299211) (xy 351.606053 70.27513) (xy 351.638929 70.233014) + (xy 351.694302 70.200667) (xy 351.772638 70.183097) (xy 351.806087 70.181622) (xy 351.850551 70.184486) + (xy 351.890905 70.192807) (xy 351.926998 70.20606) (xy 351.959275 70.223893) (xy 352.014202 70.273354) + (xy 352.056772 70.342109) (xy 352.080493 70.409775) (xy 352.097896 70.473797) (xy 352.182801 70.473797) + (xy 352.182801 70.115127) (xy 352.097163 70.115127) (xy 352.097163 70.213038) (xy 352.085531 70.224578) + (xy 352.045715 70.182346) (xy 351.999771 70.146116) (xy 351.961214 70.1245) (xy 351.917566 70.107772) + (xy 351.872696 70.097383) (xy 351.822374 70.092185) (xy 351.799767 70.09168) (xy 351.739552 70.094557) + (xy 351.684074 70.102976) (xy 351.634517 70.116278) (xy 351.58984 70.134283) (xy 351.551101 70.156104) + (xy 351.517327 70.181839) (xy 351.489218 70.21056) (xy 351.466167 70.242503) (xy 351.448473 70.277035) + (xy 351.436021 70.314211) (xy 351.427266 70.385962) (xy 351.430133 70.429855) (xy 351.438475 70.470146) + (xy 351.470043 70.540212) (xy 351.520912 70.598512) (xy 351.59215 70.64562) (xy 351.685307 70.679881) + (xy 351.694162 70.682076) (xy 351.832648 70.715506) (xy 351.897492 70.734796) (xy 351.948313 70.757227) + (xy 351.978599 70.777263) (xy 352.001474 70.800059) (xy 352.015931 70.822945) (xy 352.025175 70.848583) + (xy 352.029935 70.89072) (xy 352.027 70.926457) (xy 352.018176 70.958264) (xy 352.004973 70.98361) + (xy 351.986831 71.005247) (xy 351.937611 71.035808) (xy 351.866922 71.050362) (xy 351.843914 71.051096) + (xy 351.793901 71.048195) (xy 351.746808 71.039613) (xy 351.703943 71.025904) (xy 351.664562 71.007106) + (xy 351.629852 70.984043) (xy 351.599097 70.956461) (xy 351.573103 70.925198) (xy 351.551511 70.889893) + (xy 351.534747 70.851051) (xy 351.522894 70.808525) (xy 351.521238 70.800136) (xy 351.508232 70.72952) + (xy 351.423053 70.72952) (xy 351.423053 71.1175) (xy 351.50869 71.1175) (xy 351.50869 70.994493) + (xy 351.520048 70.983227) (xy 351.550389 71.022251) (xy 351.583751 71.055331) (xy 351.618637 71.081626) + (xy 351.656532 71.102857) (xy 351.742735 71.131061) + ) + ) + (polygon + (pts + (xy 352.851507 71.140947) (xy 352.897262 71.138048) (xy 352.939216 71.129479) (xy 352.976009 71.11604) + (xy 353.009213 71.097688) (xy 353.064363 71.047383) (xy 353.105943 70.977597) (xy 353.132938 70.885541) + (xy 353.142217 70.774308) (xy 353.142217 70.621992) (xy 353.052275 70.621992) (xy 353.052275 70.776414) + (xy 353.04936 70.839729) (xy 353.040682 70.893002) (xy 353.028535 70.931409) (xy 353.012173 70.962712) + (xy 352.993931 70.984959) (xy 352.972386 71.001813) (xy 352.92103 71.019783) (xy 352.893547 71.021695) + (xy 352.860018 71.01878) (xy 352.829626 71.010098) (xy 352.803878 70.996613) (xy 352.78132 70.978102) + (xy 352.746514 70.926395) (xy 352.726007 70.851789) (xy 352.72218 70.793267) (xy 352.72218 70.286219) + (xy 352.725099 70.25881) (xy 352.733802 70.236948) (xy 352.745973 70.222537) (xy 352.762387 70.212399) + (xy 352.803239 70.205069) (xy 353.058137 70.205069) (xy 353.058137 70.115127) (xy 352.72218 70.115127) + (xy 352.72218 69.74977) (xy 352.611813 69.74977) (xy 352.577741 69.962261) (xy 352.569007 69.998457) + (xy 352.555264 70.029647) (xy 352.537965 70.054363) (xy 352.516477 70.074798) (xy 352.461268 70.10304) + (xy 352.384909 70.114944) (xy 352.372761 70.115127) (xy 352.25012 70.115127) (xy 352.25012 70.205069) + (xy 352.425242 70.205069) (xy 352.452608 70.207988) (xy 352.474444 70.216696) (xy 352.48884 70.228875) + (xy 352.498971 70.245304) (xy 352.5063 70.286219) (xy 352.5063 70.784841) (xy 352.509167 70.842961) + (xy 352.517512 70.895233) (xy 352.530518 70.940653) (xy 352.54799 70.980909) (xy 352.56941 71.015955) + (xy 352.594539 71.046267) (xy 352.656183 71.094361) (xy 352.733732 71.126181) (xy 352.82842 71.140442) + ) + ) + (polygon + (pts + (xy 353.794881 70.0998) (xy 353.887424 70.128786) (xy 353.92882 70.150793) (xy 353.966701 70.177556) + (xy 354.001397 70.209393) (xy 354.032169 70.245757) (xy 354.059455 70.287491) (xy 354.082302 70.333573) + (xy 354.100979 70.385236) (xy 354.11462 70.441058) (xy 354.123189 70.502369) (xy 354.126088 70.567587) + (xy 354.126088 70.625106) (xy 353.491912 70.625106) (xy 353.491912 70.659727) (xy 353.496484 70.778556) + (xy 353.514735 70.887804) (xy 353.544303 70.959731) (xy 353.585797 71.008038) (xy 353.613393 71.025981) + (xy 353.645204 71.038973) (xy 353.68785 71.048115) (xy 353.736826 71.051096) (xy 353.818662 71.04229) + (xy 353.856047 71.030508) (xy 353.888902 71.014149) (xy 353.919498 70.991802) (xy 353.945634 70.964832) + (xy 353.971265 70.927543) (xy 353.991891 70.884849) (xy 354.013468 70.817541) (xy 354.028361 70.742342) + (xy 354.118028 70.742342) (xy 354.115217 70.766882) (xy 354.089501 70.883852) (xy 354.048358 70.975) + (xy 354.022406 71.012421) (xy 353.992942 71.044859) (xy 353.959285 71.073004) (xy 353.922237 71.096134) + (xy 353.8795 71.115263) (xy 353.833302 71.129015) (xy 353.779513 71.13799) (xy 353.72208 71.140947) + (xy 353.697266 71.140386) (xy 353.642816 71.135027) (xy 353.591159 71.124173) (xy 353.542286 71.107975) + (xy 353.496573 71.08669) (xy 353.453766 71.060242) (xy 353.414541 71.02906) (xy 353.378563 70.992798) + (xy 353.346648 70.952139) (xy 353.31856 70.906546) (xy 353.295059 70.856915) (xy 353.276109 70.802702) + (xy 353.262286 70.744862) (xy 353.25374 70.683035) (xy 353.250844 70.618053) (xy 353.25153 70.587956) + (xy 353.257054 70.529027) (xy 353.492003 70.529027) (xy 353.901873 70.529027) (xy 353.901873 70.496146) + (xy 353.901669 70.473146) (xy 353.890992 70.352352) (xy 353.867466 70.275037) (xy 353.832612 70.224933) + (xy 353.809422 70.206827) (xy 353.78251 70.193735) (xy 353.746592 70.184602) (xy 353.705319 70.181622) + (xy 353.699266 70.18167) (xy 353.629874 70.19164) (xy 353.578909 70.218721) (xy 353.55715 70.240859) + (xy 353.538724 70.268981) (xy 353.521368 70.309652) (xy 353.50815 70.359591) (xy 353.497176 70.435941) + (xy 353.492003 70.529027) (xy 353.257054 70.529027) (xy 353.257282 70.526591) (xy 353.268663 70.46751) + (xy 353.307049 70.358418) (xy 353.363464 70.265081) (xy 353.434263 70.190489) (xy 353.516209 70.136209) + (xy 353.607004 70.103011) (xy 353.705319 70.09168) + ) + ) + (polygon + (pts + (xy 354.817967 71.1175) (xy 354.817967 71.027649) (xy 354.628099 71.027649) (xy 354.600733 71.02473) + (xy 354.578897 71.016022) (xy 354.564501 71.003843) (xy 354.55437 70.987414) (xy 354.547041 70.946499) + (xy 354.547041 70.511533) (xy 354.564208 70.439355) (xy 354.585385 70.375491) (xy 354.608974 70.322491) + (xy 354.635587 70.277252) (xy 354.663018 70.241977) (xy 354.692595 70.213703) (xy 354.721979 70.19367) + (xy 354.752819 70.179907) (xy 354.80661 70.171089) (xy 354.841242 70.173714) (xy 354.863905 70.180364) + (xy 354.864587 70.180614) (xy 354.864587 70.191789) (xy 354.834761 70.224761) (xy 354.821717 70.251834) + (xy 354.81476 70.281532) (xy 354.814212 70.291989) (xy 354.817017 70.319091) (xy 354.824932 70.342666) + (xy 354.85428 70.379865) (xy 354.899151 70.401751) (xy 354.952929 70.403181) (xy 354.978701 70.395199) + (xy 355.002327 70.381284) (xy 355.02119 70.363035) (xy 355.03622 70.339491) (xy 355.045972 70.312528) + (xy 355.050728 70.280727) (xy 355.051067 70.268908) (xy 355.048203 70.234217) (xy 355.039882 70.203244) + (xy 355.026748 70.176397) (xy 355.009099 70.153199) (xy 354.960147 70.116993) (xy 354.892106 70.095707) + (xy 354.840224 70.09168) (xy 354.797116 70.094516) (xy 354.757522 70.102649) (xy 354.686542 70.133826) + (xy 354.626225 70.183996) (xy 354.577663 70.252445) (xy 354.544769 70.335448) (xy 354.541729 70.347768) + (xy 354.532295 70.347768) (xy 354.532295 70.115127) (xy 354.165289 70.115127) (xy 354.165289 70.205069) + (xy 354.250103 70.205069) (xy 354.277469 70.207988) (xy 354.299304 70.216696) (xy 354.313701 70.228875) + (xy 354.323832 70.245304) (xy 354.331161 70.286219) (xy 354.331161 70.946499) (xy 354.328243 70.973908) + (xy 354.319539 70.99577) (xy 354.307368 71.010181) (xy 354.290955 71.020319) (xy 354.250103 71.027649) + (xy 354.165289 71.027649) (xy 354.165289 71.1175) + ) + ) + ) + ) + (gr_text "ur not safe" + (at 65.484375 186.928125 -0) + (layer "B.SilkS") + (uuid "4111a6de-642e-4ce4-9bc6-da6dd5fae401") + (effects + (font + (size 1.5 1.5) + (thickness 0.3) + (bold yes) + ) + (justify left bottom mirror) + ) + ) + (segment + (start 109.1913 71.225) + (end 110.21 71.225) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "02bd8924-3e91-46d2-92a8-8804b3afc9f7") + ) + (segment + (start 63.3623 61.4673) + (end 63.3623 61.155) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "0465db8c-4e51-45e2-a433-430e15396cda") + ) + (segment + (start 54.8513 75.5056) + (end 54.8513 74.45) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "09138e06-e4cf-4385-9784-5e61cfa46cba") + ) + (segment + (start 82.8341 77.0125) + (end 82.8635 76.9831) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "1d358214-034e-42e8-80db-54a948315bdf") + ) + (segment + (start 93.345 74.5142) + (end 93.2622 74.5142) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "2572a961-7446-4625-8409-33f5b6fae881") + ) + (segment + (start 322.267117 102.9891) + (end 324.053047 101.20317) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "2b3bbdbd-4987-473e-bf8b-c2f666ce4fbc") + ) + (segment + (start 92.9037 79.0329) + (end 92.7083 78.8375) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "2ecbc75d-5141-4940-9f77-cc0bdaa1668d") + ) + (segment + (start 93.9872 60.4817) + (end 93.345 61.1239) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "3461d1b6-1424-47e1-a44e-1965f7240e45") + ) + (segment + (start 110.0102 63.3354) + (end 109.1913 64.1543) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "352a759a-1903-4381-a6a0-2bca182363f1") + ) + (segment + (start 85.8023 78.8716) + (end 84.3547 78.8716) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "372375ad-f3be-453f-9e2a-801cebe23e03") + ) + (segment + (start 85.5917 71.1156) + (end 84.345 71.1156) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "3b59c252-c4c2-47e1-bd47-6a0598404635") + ) + (segment + (start 100.8313 58.645) + (end 100.9513 58.525) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "3e723ae8-3d2f-4e44-b539-29d7cb32b584") + ) + (segment + (start 95.7434 79.0329) + (end 95.8763 78.9) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "5374a8f8-8a0d-4334-a159-b6c18f1a02ac") + ) + (segment + (start 86.845 62.1156) + (end 86.845 63.0142) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "64917b4b-1f15-4811-a5b0-cbf943d15375") + ) + (segment + (start 94.8033 57.0546) + (end 93.7559 57.0546) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "64e57a1e-ae05-468c-9492-1d697fe25399") + ) + (segment + (start 86.2306 63.6286) + (end 86.845 63.0142) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "6543c441-7a1f-4a38-bce3-8a85169d9f2a") + ) + (segment + (start 67.2555 62.5054) + (end 66.7376 61.9875) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "6581fbb1-0f99-4dab-92c9-20685f51e245") + ) + (segment + (start 55.1952 75.8495) + (end 54.8513 75.5056) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "6c335eda-3644-4b2f-90cc-0ecd73e5a0ae") + ) + (segment + (start 115.4277 69.075) + (end 114.4763 69.075) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "6da3923b-d51b-4faa-8e8c-c7f6b052f8f2") + ) + (segment + (start 81.4763 77.0125) + (end 82.8341 77.0125) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "70242d8f-2a65-49ab-896f-f534941bcfc6") + ) + (segment + (start 84.3547 78.8716) + (end 84.3513 78.875) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "70282887-fd4b-42d8-be1f-c46261842c71") + ) + (segment + (start 89.7188 56.8325) + (end 89.8513 56.7) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "7256a411-c777-45f7-b0f6-ebda1f0b1607") + ) + (segment + (start 66.877831 104.179735) + (end 66.877831 105.965674) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "749ebfa8-6716-4652-b782-a29d93dbcfbe") + ) + (segment + (start 110.21 71.225) + (end 111.8912 69.5438) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "77eb148c-996f-4667-9648-cf28fdf9bf2f") + ) + (segment + (start 88.3263 56.8325) + (end 89.7188 56.8325) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "7a503e1f-af4b-4d32-adf0-86e3ae6a4efe") + ) + (segment + (start 98.6763 78.9) + (end 98.6948 78.8815) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "84b16a5c-7c1d-4c7f-b1b9-cfa52a00a4c4") + ) + (segment + (start 67.2555 62.9003) + (end 67.2555 62.5054) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "85de7041-ef33-45a9-8941-eb59ea34b27f") + ) + (segment + (start 93.7559 57.0546) + (end 93.4013 56.7) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "95029695-9672-4bfc-9864-612bce9c9124") + ) + (segment + (start 109.1913 64.1543) + (end 109.1913 65.025) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "9bed4830-266a-4578-96bc-5f05454c2461") + ) + (segment + (start 168.9939 122.0391) + (end 170.41535 122.0391) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "9c9d4361-464e-482c-8e6c-3206dfac52e6") + ) + (segment + (start 94.393 79.0329) + (end 92.9037 79.0329) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "9fc3e471-c9af-4836-a3c2-3407c8d321e9") + ) + (segment + (start 93.2622 74.5142) + (end 92.3868 75.3896) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "a10975c9-c9d5-46cd-ab08-9aa837781a5b") + ) + (segment + (start 93.345 73.6156) + (end 93.345 74.5142) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "ad8aa06c-52ef-4964-9de6-4e2ecd5f1709") + ) + (segment + (start 63.8825 61.9875) + (end 63.3623 61.4673) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "afd9b5b2-5fe6-41ce-a464-b16381384d87") + ) + (segment + (start 86.8013 56.7) + (end 86.9338 56.8325) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "b3f2ac64-3f39-42c9-b34d-084ec882bdba") + ) + (segment + (start 99.3443 58.645) + (end 100.8313 58.645) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "b6cc5a5b-387a-46c7-902e-e3a58dc0e88d") + ) + (segment + (start 98.6948 78.8815) + (end 100.4274 78.8815) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "bfc72de1-250a-4aa1-b9bc-bad3e228fdf4") + ) + (segment + (start 61.6606 61.155) + (end 63.3623 61.155) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "c33c4827-3ae8-4646-a749-25cc2864b5c0") + ) + (segment + (start 66.7376 61.9875) + (end 63.8825 61.9875) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "d2a58712-2333-4c79-b34a-5869893e05a5") + ) + (segment + (start 94.393 79.0329) + (end 95.7434 79.0329) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "d613743c-f9aa-47a1-a95a-360484ca7635") + ) + (segment + (start 86.9338 56.8325) + (end 88.3263 56.8325) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "d7c7a69c-755e-49f7-b1cc-d343fd4a8342") + ) + (segment + (start 114.6213 58.645) + (end 114.4513 58.475) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "dcf76a48-361e-4fb2-834e-4d90750decb8") + ) + (segment + (start 85.7346 70.9727) + (end 85.5917 71.1156) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "e30f93a2-9396-4ac3-a946-4f132d15be08") + ) + (segment + (start 321.394 102.9891) + (end 322.267117 102.9891) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "e96cc182-7087-4fd0-b1a9-9b9c712e02a2") + ) + (segment + (start 85.9457 63.6286) + (end 86.2306 63.6286) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "e97b6347-dad4-40a0-bd3d-9ecfbddc170f") + ) + (segment + (start 170.41535 122.0391) + (end 171.05125 122.675) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "edf0cbf1-1234-4305-9d7a-4ea28a362b1a") + ) + (segment + (start 93.345 61.1239) + (end 93.345 62.1156) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "f69cdf47-6536-43d4-af0b-58e2f402c0f2") + ) + (segment + (start 115.7723 58.645) + (end 114.6213 58.645) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "f990f822-97f0-43cc-9edb-bdb150deb3e6") + ) + (segment + (start 115.7848 69.4321) + (end 115.4277 69.075) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "ff82bea1-8889-4bda-afb9-5bf0f16422fa") + ) + (via + (at 58.3513 62.8375) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "04faa7df-454c-44fa-9ee5-15debc6f4079") + ) + (via + (at 115.7723 58.645) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "0ab3480b-be37-4d81-b8f5-76dce6823eb6") + ) + (via + (at 66.877831 105.965674) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 1) + (uuid "25f432a2-3de6-45a3-8f52-0597af7eb7c9") + ) + (via + (at 68.5513 62.8375) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "414068bb-8a8b-480f-b5a1-594222f26e0d") + ) + (via + (at 92.3868 75.3896) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "447eb649-5129-461a-b281-5f7120af1850") + ) + (via + (at 321.394 102.9891) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "5245bcd8-0501-4eb6-9a35-a258ffc25b24") + ) + (via + (at 67.2555 62.9003) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "563777fa-0fe2-4d7c-9ca0-b7cd8d8ae10d") + ) + (via + (at 54.8513 78.9) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "5ee4959e-d423-48d4-ae86-2539c3720ca7") + ) + (via + (at 55.1952 75.8495) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "6b6e9551-8963-419e-88e2-718ee7c5b1e6") + ) + (via + (at 93.9872 60.4817) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "6c7857d8-77e7-46c6-acd0-f2a0a0778eb5") + ) + (via + (at 99.3443 58.645) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "75bf7992-ae13-4b95-b6b7-38c00c110c8a") + ) + (via + (at 85.9457 63.6286) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "75ca7fe4-31d3-468a-b74b-58c5e4a02b7f") + ) + (via + (at 115.7848 69.4321) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "78583875-08e8-4049-be3c-ee280b3eccd8") + ) + (via + (at 88.3263 56.8325) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "84ea796b-d967-45f1-b209-ff976ca6c9a6") + ) + (via + (at 94.393 79.0329) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "8d9e793f-51df-4329-b78e-ae86eba800db") + ) + (via + (at 94.8033 57.0546) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "8dd353f8-e52a-4741-a7f8-1bf3ab33c906") + ) + (via + (at 66.877831 104.179735) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 1) + (uuid "8e06a462-2fd3-40e7-b545-b0e4deb93158") + ) + (via + (at 110.0102 63.3354) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "8f4a0879-a5c0-4944-a709-5a6eb70934f0") + ) + (via + (at 324.053047 101.20317) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "902bd782-1725-448b-806c-abd31b2d3a8a") + ) + (via + (at 85.8023 78.8716) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "91a181e9-125e-402b-b5c6-dec23e456469") + ) + (via + (at 100.4274 78.8815) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "96bb1bb4-4d51-421a-9aea-be643e41f72c") + ) + (via + (at 346.079628 52.982817) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "99ec8e4e-5bbd-4b34-a4fe-dcb88e4bf3bb") + ) + (via + (at 171.05125 122.675) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "9e3aabea-fbeb-4a70-ab48-82a908689e05") + ) + (via + (at 85.7346 70.9727) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "9f2aab55-6719-4f07-89ef-469cd9721d82") + ) + (via + (at 82.8635 76.9831) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "a7494534-b356-478e-8b86-18a7e1667ee1") + ) + (via + (at 168.9939 122.0391) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "b1816d3c-5c14-4a25-a074-6f9f888afade") + ) + (via + (at 59.3763 78.925) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "bfacecc9-9abc-4a1c-b241-08c5470bed71") + ) + (via + (at 111.8912 69.5438) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "e55de99f-8456-406c-b74f-c58be1f89036") + ) + (via + (at 59.138762 57.150008) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "f8042ad3-ff6b-4fb2-8cfd-cac5a05135e9") + ) + (segment + (start 60.2356 55.9594) + (end 60.2356 56.05317) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "2ba7ea08-ac7a-4467-9288-5ff4bdd0c0c5") + ) + (segment + (start 60.2356 56.05317) + (end 59.138762 57.150008) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "5778cc68-20bb-4c8d-a82f-52163365ff28") + ) + (segment + (start 60.2356 55.6394) + (end 59.1406 54.5444) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "80cbe968-1924-400f-a222-50509396789a") + ) + (segment + (start 346.0794 58.3406) + (end 346.0794 52.983045) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "8c15b922-675f-41c2-8cb9-502c6c3ba622") + ) + (segment + (start 66.6856 55.9594) + (end 66.6856 55.6394) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "a4fc7e13-f723-4b91-bad3-64622942e8e1") + ) + (segment + (start 66.6856 55.6394) + (end 67.7806 54.5444) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "a6375b47-31ed-4b2f-a6ea-a8958a6393ca") + ) + (segment + (start 60.2356 55.9594) + (end 60.2356 55.6394) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "f3c9722a-6579-4110-a437-dc960d349f77") + ) + (segment + (start 346.0794 52.983045) + (end 346.079628 52.982817) + (width 0.2) + (layer "B.Cu") + (net 1) + (uuid "fefbddd4-ae48-44db-9690-6ad99d0f776b") + ) + (segment + (start 95.035622 71.6156) + (end 95.844999 71.6156) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "0cf2d579-88d5-422b-a945-30aaae76a136") + ) + (segment + (start 96.6013 77) + (end 98.1429 75.4584) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "13200032-0574-4f9b-836e-13a00428d7fb") + ) + (segment + (start 94.262229 71.43752) + (end 94.857542 71.43752) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "13b9a5f6-c24a-4e95-a28d-acad9626ef5c") + ) + (segment + (start 99.024733 75.604711) + (end 98.6763 75.953144) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "1fa1bfe2-30d2-4878-adf8-4402167f1dc9") + ) + (segment + (start 98.6763 77) + (end 101.015335 77) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "2d581a5e-bd36-4619-8e9b-745c95af087b") + ) + (segment + (start 99.024733 75.009398) + (end 99.024733 75.604711) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "3662da7c-a55a-4cab-889c-745a09818870") + ) + (segment + (start 96.897504 73.615599) + (end 93.845 73.615599) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "498ad812-eaab-49ac-bc04-d3a8faf00906") + ) + (segment + (start 86.345 59.0563) + (end 86.8013 58.6) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "4eac1c29-ae7c-4a6e-826e-c039f1ea8998") + ) + (segment + (start 101.015335 77) + (end 102.001298 77.985963) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "4f8ae1ee-91a1-4446-934a-d1cda983d59d") + ) + (segment + (start 92.845 59.1563) + (end 92.845 62.115601) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "67075f22-56d4-4ba1-853d-9928b237aec0") + ) + (segment + (start 84.3513 76.975) + (end 84.3513 71.621899) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "6bfd1098-bc3a-49f1-b5e6-3ba9eb505e61") + ) + (segment + (start 84.3513 71.621899) + (end 84.345001 71.6156) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "898ad9b7-4233-403b-9f11-d01bca07b00e") + ) + (segment + (start 98.6763 75.953144) + (end 98.6763 77) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "8d9a1c9c-ab05-4f00-a67a-5c4d5fd94573") + ) + (segment + (start 98.1429 75.4584) + (end 98.1429 74.860995) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "92216cbd-ea4a-4606-be8b-a5cf878e17df") + ) + (segment + (start 86.345 62.115601) + (end 86.345 59.0563) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "958f426d-d452-4c91-b080-e0b531ce1b6c") + ) + (segment + (start 95.8763 77) + (end 96.6013 77) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "b9f11086-e608-4f2e-96b9-2febe17cc746") + ) + (segment + (start 94.857542 71.43752) + (end 95.035622 71.6156) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "d43aabef-9a74-423b-b746-a1c010b6e6bb") + ) + (segment + (start 98.1429 74.860995) + (end 96.897504 73.615599) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "d7a45dc6-6395-42e8-bd18-20f98c21c8c6") + ) + (segment + (start 93.4013 58.6) + (end 92.845 59.1563) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "fa793932-de04-4170-990a-b2a043ac6dc1") + ) + (via + (at 103.60125 69.375) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 2) + (uuid "4ccc758b-eb1e-4a25-8378-30e0426a34a4") + ) + (via + (at 80.65125 71.525) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 2) + (uuid "56a0b55a-433b-434a-863f-17c336429304") + ) + (via + (at 94.262229 71.43752) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "7ac9c11e-1c2e-4669-82ac-e09810d1c64b") + ) + (via + (at 99.024733 75.009398) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "7ade0f9c-ac54-4ad0-a655-76b423f9e5c7") + ) + (via + (at 102.001298 77.985963) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "9334b3d3-0b5f-4c46-9e1b-6f303984418a") + ) + (via + (at 101.85125 63.225) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 2) + (uuid "b6bc3690-a2f7-465d-a8b1-ee34848f6f2c") + ) + (via + (at 80.65125 67.625) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 2) + (uuid "e382b41e-f397-4e7b-8eb4-6680299f8c11") + ) + (segment + (start 103.60125 64.975) + (end 103.60125 69.375) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "427f5a88-b5ec-4d5a-8ab8-361bec3219eb") + ) + (segment + (start 94.262229 72.628146) + (end 94.262229 71.43752) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "5aed0dd4-b895-4940-8a03-d478dd570d4b") + ) + (segment + (start 101.85125 63.225) + (end 103.60125 64.975) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "76feee8e-8296-4425-b52f-3ad5d987a0dd") + ) + (segment + (start 94.857542 73.223459) + (end 94.262229 72.628146) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "c6dd35be-a1cf-42c8-a579-a1f362bde211") + ) + (segment + (start 99.024733 75.009398) + (end 97.238794 73.223459) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "f6613b62-d5b6-497d-86ef-894533763112") + ) + (segment + (start 97.238794 73.223459) + (end 94.857542 73.223459) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "ff7f52db-569a-40b0-a723-11428db3f897") + ) + (segment + (start 80.65125 67.625) + (end 80.65125 71.525) + (width 0.2) + (layer "In2.Cu") + (net 2) + (uuid "fe63318b-147d-4e4e-980c-067f3539592d") + ) + (segment + (start 59.3513 74.45) + (end 56.3388 71.4375) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "1429c1dc-e592-4364-ad0b-cfa6ee3ec95e") + ) + (segment + (start 56.3388 71.4375) + (end 50.2091 71.4375) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "1e08c76e-1ac8-443b-9bdd-443b1b71fb4c") + ) + (segment + (start 59.3513 74.45) + (end 59.3513 77) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "2e07b8e9-2f85-4325-adea-f90bb20fe267") + ) + (segment + (start 59.7341 66.2922) + (end 59.3513 66.675) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "3d2082cb-756a-430e-a809-e75fcbb1f25a") + ) + (segment + (start 60.0846 59.875) + (end 59.7341 60.2255) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "6193a9fd-63fe-4432-a258-d7d8deaec6f7") + ) + (segment + (start 55.6513 62.975) + (end 59.3513 66.675) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "7b097f8c-5f94-461a-b90f-9d6e5df52baf") + ) + (segment + (start 59.3513 66.675) + (end 59.3513 74.45) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "8b862d73-7b0c-4e5f-b9d3-8b88c28c7cc9") + ) + (segment + (start 59.7341 60.2255) + (end 59.7341 66.2922) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "9791cc7f-6f28-4f47-a1b4-155ccc6531c4") + ) + (segment + (start 64.1606 59.875) + (end 60.0846 59.875) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "9b874c1f-dea6-431e-8db2-8dfb61458cf9") + ) + (segment + (start 59.3513 77) + (end 59.3763 77.025) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "a0060136-7024-46cb-8798-e9d102185de4") + ) + (segment + (start 65.2606 60.975) + (end 64.1606 59.875) + (width 0.6) + (layer "F.Cu") + (net 3) + (uuid "f69ad717-f475-48b2-8c3a-2b7b6686757d") + ) + (via + (at 258.794 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "00846f19-97e6-4417-9fca-c6f80da310de") + ) + (via + (at 144.494 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "0105820d-09dd-4de4-bc91-cf493122bc71") + ) + (via + (at 234.73 158.794) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "0d8d2108-ef03-43ca-a54f-e1d768ced020") + ) + (via + (at 206.406 139.744) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "0f46bb17-7f16-4ce4-ad0e-bd57a4527e83") + ) + (via + (at 96.8688 101.644) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "1838c0bb-79ad-4d18-bc4a-99c85636a04e") + ) + (via + (at 84.711 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "1e1dab87-a988-4735-a252-6d2b09f5dba3") + ) + (via + (at 296.894 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "21944078-28cc-4d37-b33e-0805d24d93ae") + ) + (via + (at 344.268 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "22d3eb93-76b0-429e-a701-a09783682977") + ) + (via + (at 191.60125 143.096749) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 3) + (uuid "24b7058e-fe81-4226-97a0-c428d4c663fe") + ) + (via + (at 299.024 158.794) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "2bf2bdfa-f326-4bae-b923-c7df368ae8a9") + ) + (via + (at 180.305 177.689) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "2ef1d9ca-79e2-40c2-a3fa-c46792ee128b") + ) + (via + (at 192.179 101.529) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "363283f1-7486-4651-a6e3-7f10cd4daeb9") + ) + (via + (at 77.7788 101.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "3a62f350-a6d1-4708-b6b8-15ebee538022") + ) + (via + (at 63.5313 120.848) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "3e958382-6e56-47b7-8718-f8564adb247e") + ) + (via + (at 254.031 158.639) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "4071836d-ac43-4428-8fe2-9ff202399f8a") + ) + (via + (at 287.369 101.489) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "46d3f7da-e694-474a-a969-c6485ab9547f") + ) + (via + (at 106.394 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "4751a4b1-1400-4427-a178-4335e3dafabd") + ) + (via + (at 211.194 101.519) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "47fc2b5b-f122-4ee7-9880-d21b9b7e7ee2") + ) + (via + (at 320.706 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "48b94a79-31e2-4f28-a8fd-b0450391a2b5") + ) + (via + (at 230.176 101.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "4aaca43b-5d16-4eb3-a0f6-504d87fb67bb") + ) + (via + (at 282.606 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "4dfb2747-8c0d-49af-9035-650add2be07e") + ) + (via + (at 173.209 101.379) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "4f83138c-b597-43d6-bc2c-b2fc46a9d8e2") + ) + (via + (at 110.905 139.744) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "5055d331-4aab-443f-a727-ffa65bee9f67") + ) + (via + (at 134.35125 149.625) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 3) + (uuid "5117c67e-0483-4665-9a02-f368e9fe7409") + ) + (via + (at 61.1501 177.752) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "5814a8d3-373f-4715-9a75-185bec20a882") + ) + (via + (at 154.079 101.599) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "581a2069-e41f-41bf-aa7f-0daac69cd4f4") + ) + (via + (at 65.9125 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "58d91677-6e13-449e-964e-4c80f2efd39f") + ) + (via + (at 225.456 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "5a70ba4a-e3df-46f7-9152-d1aa07d720d8") + ) + (via + (at 273.082 158.639) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "5d59b454-4ec8-4f68-aa5d-e6381478f80d") + ) + (via + (at 344.519 158.639) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "5e1684ec-4741-4c63-b961-45014b3b3a2d") + ) + (via + (at 158.874 158.948) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "6188a545-5926-40c5-b122-cb37acc16af5") + ) + (via + (at 201.644 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "6acdaa6b-818d-491d-9a91-61799f300a1d") + ) + (via + (at 115.959 101.619) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "6ca17567-f901-41df-a465-45a69f13e818") + ) + (via + (at 268.067 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "70222867-7205-4fcc-acc9-496aecee51a3") + ) + (via + (at 163.544 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "74ea906a-78dd-4071-a88a-ebf8ee1a4cae") + ) + (via + (at 344.519 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "7df7c7b4-9709-4121-a0c9-aff8c43c2683") + ) + (via + (at 139.824 158.948) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "7e538454-af65-4630-a22f-3050888fcd57") + ) + (via + (at 182.594 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "7ec9f647-7fb7-440b-a7fe-79b75fa5bd85") + ) + (via + (at 249.017 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "835b4f0b-6244-4f8d-9db8-630221f573a3") + ) + (via + (at 168.306 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "84e13a4f-6089-4aba-86ef-56c984ef9795") + ) + (via + (at 244.255 139.744) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "88e93286-ffbe-4656-aa4f-8a98ab161d7f") + ) + (via + (at 149.256 139.898) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "8a55df39-59f7-4440-bb9c-b9e159e70fbc") + ) + (via + (at 196.63 158.794) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "8c5793e6-a7d8-41f1-a9e8-86a4be1715a5") + ) + (via + (at 220.694 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "9ad13fde-17fc-4a85-8efd-0f6a29591e6c") + ) + (via + (at 134.969 101.649) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "a1ba34be-2b6f-4b51-bfbf-e8bd5c47c4b1") + ) + (via + (at 325.217 158.794) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "a238d45f-f676-4e75-9f5e-d8d9535e68f7") + ) + (via + (at 313.563 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "a5f0e233-e83f-4aaf-bf91-97f47a6e4ede") + ) + (via + (at 120.774 158.948) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "afea9b59-e220-4b38-8580-bfb935b62e30") + ) + (via + (at 341.659 139.187) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "b1450d45-fff1-4dc1-93b7-e1d5247a978c") + ) + (via + (at 58.6788 101.499) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "b623a148-c83e-4739-8bd5-cd17cd650fa8") + ) + (via + (at 130.206 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "bb9c6c0d-4973-46d4-b4db-9672e057055b") + ) + (via + (at 202.85125 138.075) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 3) + (uuid "c3f78777-bef8-4ac7-85fd-153e2c47a469") + ) + (via + (at 215.68 158.794) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "c612e57d-f2d3-41cc-af4f-c589029c698b") + ) + (via + (at 50.2091 71.4375) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "c6170163-7a3d-4516-9459-393ea85dcce3") + ) + (via + (at 187.7 139.744) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "ccdf4fb2-1d28-45e4-8f44-68c69b95815e") + ) + (via + (at 277.844 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "d28b07d3-3187-41d6-b480-97f65fd4a4c5") + ) + (via + (at 137.40125 149.625) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (free yes) + (net 3) + (uuid "d943e673-dfbc-4e90-8fd5-63037920eb91") + ) + (via + (at 287.369 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "ddb11ff5-9501-4a69-a732-61e84c4823bc") + ) + (via + (at 177.924 158.948) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e05191b0-7c6a-48c0-baca-26414390948b") + ) + (via + (at 87.3438 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e3da479d-6e92-432a-bb5c-460810fef5d8") + ) + (via + (at 342.5551 139.4945) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e449c8d8-9ca3-4e9b-a066-fc0d0c743dcf") + ) + (via + (at 263.556 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e4cde487-2f89-4bcb-a78b-84ae941a85f7") + ) + (via + (at 325.469 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e5053a39-60af-48ad-97bc-12c844d60779") + ) + (via + (at 315.944 101.489) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e6637991-b803-4d45-8de8-315c767998fc") + ) + (via + (at 239.744 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e668a151-a66f-416e-88b7-55c6294d5cc6") + ) + (via + (at 101.724 158.948) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "e84b431b-302e-4717-b256-79ff3b2b9498") + ) + (via + (at 92.1063 139.589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "ed858738-4eb2-4ef7-bb2c-6d8a1b0d2ebb") + ) + (via + (at 71.0188 158.794) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "f0005c58-7598-424d-a5b9-e33e7a86c06d") + ) + (via + (at 108.524 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "f4daee4b-33f5-4762-920f-9ce9d1be026f") + ) + (via + (at 249.229 101.599) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "f68991f5-60f2-4a74-b571-e86ff04423c7") + ) + (via + (at 344.519 101.489) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "fc5239ad-4467-4e85-b9cb-30f91f63e369") + ) + (via + (at 125.444 120.539) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "fd855f64-65fa-49cd-b626-1e0923076fe2") + ) + (via + (at 306.419 177.844) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "fe052efa-98fe-4125-bb31-9d186dc3a14f") + ) + (via + (at 268.319 101.644) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 3) + (uuid "fe944655-bb8c-4fce-98dd-2e27d41d03aa") + ) + (segment + (start 195.579501 143.096749) + (end 200.60125 138.075) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "00dd73b4-14ce-447d-8b59-d24b72129395") + ) + (segment + (start 92.1063 139.589) + (end 92.1063 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "034a7aba-481f-40bd-b390-4b46402db3cb") + ) + (segment + (start 192.1788 101.5288) + (end 192.1788 101.5287) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "04e62b8c-f41f-4886-becd-5a02de1d1242") + ) + (segment + (start 108.524 177.844) + (end 108.5236 177.844) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "06adb6a6-27bd-4437-b63a-5a9ac353e1e7") + ) + (segment + (start 65.9125 139.589) + (end 65.9125 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "093b0b44-5300-41c8-8c0d-69ebc1bae00a") + ) + (segment + (start 201.644 120.539) + (end 201.6439 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "093c111c-46d0-4336-b64f-545b65bc43bb") + ) + (segment + (start 263.5564 139.589) + (end 263.5565 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "0d165e80-1ec8-4f1d-9f04-8e23f2ae7590") + ) + (segment + (start 63.5313 120.848) + (end 63.5313 120.8485) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "107f8074-0b91-4c2e-acc3-85cb0a433e60") + ) + (segment + (start 87.3438 120.539) + (end 87.3438 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "142318a8-2527-4b50-9fdb-c5583d53c091") + ) + (segment + (start 106.3939 120.539) + (end 106.3938 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "14a18830-6456-46c2-b6af-59fa06bff6d3") + ) + (segment + (start 115.9588 101.6188) + (end 115.9588 101.6187) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "16d6f577-62ba-4bdd-a002-3a5875fb2109") + ) + (segment + (start 315.944 101.489) + (end 315.944 101.4891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "1a2402b7-a2fd-420c-9d50-072c75e58e54") + ) + (segment + (start 200.60125 138.075) + (end 202.85125 138.075) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "1a90600d-ed35-4b13-a9d0-fafb9d7adce8") + ) + (segment + (start 144.494 120.539) + (end 144.4939 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "1b5eec5a-fda0-47df-ad6a-c71a010856db") + ) + (segment + (start 325.217 158.794) + (end 325.2172 158.794) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "1f81b90e-e62b-41ef-9d29-422d58e0f332") + ) + (segment + (start 115.959 101.619) + (end 115.9588 101.6188) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "29da6a2c-90fe-4d2b-bc3a-f345313355f3") + ) + (segment + (start 306.419 177.844) + (end 306.419 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "2cf38c9a-0fc5-4869-8e96-e32158327027") + ) + (segment + (start 211.1938 101.5188) + (end 211.1938 101.5187) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "3561362f-d6d0-4703-94da-8e79ca2b5710") + ) + (segment + (start 320.7064 120.539) + (end 320.7065 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "3656b678-ebc4-4a39-8766-0f6de93e6bd0") + ) + (segment + (start 344.519 158.639) + (end 344.519 158.6392) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "379e1ffa-0233-4f46-a552-ce3439a53ad6") + ) + (segment + (start 130.2062 139.589) + (end 130.2063 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "38dc81fb-1053-41c2-a427-505eec7dd3ba") + ) + (segment + (start 182.594 120.539) + (end 182.5939 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "38e5a731-640f-479e-ac9a-4f0eb9910c8d") + ) + (segment + (start 96.8688 101.644) + (end 96.8688 101.6437) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "3f338169-cdd8-4290-9028-f747581abc23") + ) + (segment + (start 313.5628 139.589) + (end 313.5627 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "483ff24a-325e-4661-b941-e95d51df78e8") + ) + (segment + (start 230.176 101.589) + (end 230.1761 101.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "492bd9d3-7de9-41c0-9187-073ac050a2c1") + ) + (segment + (start 249.2288 101.5988) + (end 249.2288 101.5987) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "4a975c8b-7419-4e00-be5e-7abeb7609e65") + ) + (segment + (start 180.305 177.689) + (end 180.3048 177.6892) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "4a9a4bbb-fb7c-4186-a06e-0108e9c2cfdb") + ) + (segment + (start 296.894 120.539) + (end 296.894 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "4bfd6ac7-9caa-499f-9380-96f7ffefcf5d") + ) + (segment + (start 187.7 139.744) + (end 187.7001 139.7439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "4dc7a8a9-1a56-429b-afa8-114d8d932197") + ) + (segment + (start 344.2676 177.844) + (end 344.2675 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "518eef0d-04d8-4556-9245-30260a7c41e9") + ) + (segment + (start 244.255 139.744) + (end 244.2549 139.7439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "5363d06c-5e5a-41c1-a50c-df378d9d2167") + ) + (segment + (start 254.0312 158.639) + (end 254.0314 158.6392) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "58436f94-ef9b-4310-bd5c-b73d773fcfd6") + ) + (segment + (start 313.563 139.589) + (end 313.5628 139.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "5884caca-d659-4798-b0ff-091e2f89242d") + ) + (segment + (start 125.444 120.539) + (end 125.4439 120.539) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "5ec07972-8d6f-48bb-ad1b-e207a65ee58e") + ) + (segment + (start 215.68 158.794) + (end 215.6798 158.7938) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "5ec0a888-0cf2-480e-a1b5-6aefe12b8a8d") + ) + (segment + (start 134.969 101.649) + (end 134.9688 101.6488) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "63188b38-8b66-4f58-84af-fe232cb8a78c") + ) + (segment + (start 77.7788 101.539) + (end 77.7788 101.5387) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "644acde0-d955-4b7b-883d-5907831ff8bd") + ) + (segment + (start 191.60125 143.096749) + (end 195.579501 143.096749) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "6662eaab-2e2a-444d-a624-e15fe1e823ef") + ) + (segment + (start 320.706 120.539) + (end 320.7064 120.539) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "67d2c467-5f8a-41d6-963c-a18eec84e456") + ) + (segment + (start 58.6788 101.499) + (end 58.6788 101.4987) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "68910ef3-a71f-469d-8bd0-1d4b002e26e2") + ) + (segment + (start 149.2564 139.8984) + (end 149.2564 139.8985) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "68e9db22-281a-4bf2-a618-b94babcbf7af") + ) + (segment + (start 273.082 158.639) + (end 273.0817 158.639) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "6902a5fd-aa25-46bf-acdb-ab1e5b8ef197") + ) + (segment + (start 163.544 120.539) + (end 163.5439 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "6ab7c8aa-cc26-4b80-9822-67ceeace9828") + ) + (segment + (start 125.4439 120.539) + (end 125.4438 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "6d95f13f-141f-4dda-ae8a-c6ddbf263f1c") + ) + (segment + (start 192.179 101.529) + (end 192.1788 101.5288) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "6fea9cfe-62c0-4012-b37c-b4966b404821") + ) + (segment + (start 139.824 158.948) + (end 139.8235 158.9485) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "72186020-f89e-4cc9-85f7-5eea222f386c") + ) + (segment + (start 168.3063 139.589) + (end 168.3064 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "7935a5ec-753a-4c9f-a0de-269bc7e6b159") + ) + (segment + (start 299.024 158.794) + (end 299.0239 158.794) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "795bd634-896b-45d8-ae57-64ffbe3c3d98") + ) + (segment + (start 282.606 139.589) + (end 282.6064 139.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "7c812d26-9e27-483f-84a8-3928b77ba862") + ) + (segment + (start 110.905 139.744) + (end 110.9048 139.7438) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "7f5fd567-dc6d-4de0-8345-e23856cd1f30") + ) + (segment + (start 344.519 120.539) + (end 344.519 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "80ec3d23-ab34-48bf-b918-a6f8c27eef48") + ) + (segment + (start 268.0673 177.844) + (end 268.0674 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "8bb9c632-9aeb-47ea-a408-a73d0a811aee") + ) + (segment + (start 249.229 101.599) + (end 249.2288 101.5988) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "8bc3a724-09c6-4745-82cc-24669f854b41") + ) + (segment + (start 173.209 101.379) + (end 173.2088 101.3788) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "95450542-e9dc-492b-8fdc-045707cfcd71") + ) + (segment + (start 299.0239 158.794) + (end 299.0237 158.7938) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "9574d0e5-dd0e-4ba9-aa42-d22b829c9292") + ) + (segment + (start 244.2549 139.7439) + (end 244.2549 139.7438) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "9679a172-353e-4024-ae6e-591dc1ed9191") + ) + (segment + (start 325.469 177.844) + (end 325.469 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "9716286b-27ae-4faa-bab9-cf245e3a19ee") + ) + (segment + (start 84.711 177.844) + (end 84.711 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "99e168bb-19a5-469a-815d-b3e8c4d9ea98") + ) + (segment + (start 154.079 101.599) + (end 154.0788 101.5988) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "99f58728-cb5e-40ba-aa4a-c239a912e9e7") + ) + (segment + (start 211.194 101.519) + (end 211.1938 101.5188) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "9bb221c5-50de-48fe-93b8-3738cf7da562") + ) + (segment + (start 268.319 101.644) + (end 268.3188 101.6438) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "9e97d578-9aa1-4dfe-bd6a-f78f55f453f6") + ) + (segment + (start 254.031 158.639) + (end 254.0312 158.639) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "a7c05fee-dc3f-4537-87f6-6fa9bb9280e1") + ) + (segment + (start 168.306 139.589) + (end 168.3063 139.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "a7e2f16e-b120-4dcd-846c-b48801cae025") + ) + (segment + (start 177.924 158.948) + (end 177.9236 158.9484) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "aca9cfb6-4498-451d-a7fb-91d6afeaf859") + ) + (segment + (start 249.0173 177.844) + (end 249.0174 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "b0a2d213-5310-445d-b3b8-e8f6982d0b3c") + ) + (segment + (start 344.4244 139.4945) + (end 344.519 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "b0f0a536-f7f0-4355-8d1c-5aec695f9532") + ) + (segment + (start 108.5236 177.844) + (end 108.5235 177.8441) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "b0fd7d73-3623-4313-b1a7-57b25dab8283") + ) + (segment + (start 61.1501 177.752) + (end 61.1501 177.7519) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "b2f0a7df-2142-400c-8102-8c3a556f3734") + ) + (segment + (start 277.844 120.539) + (end 277.844 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "b70dfbab-0513-44b5-a5e0-8464522c84f1") + ) + (segment + (start 325.2172 158.794) + (end 325.2174 158.7938) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "b7c4b399-973e-4164-a314-c07ef6a1488c") + ) + (segment + (start 206.4062 139.744) + (end 206.4064 139.7438) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "ba3c620c-80af-4ce8-aae7-ebffaf472787") + ) + (segment + (start 106.394 120.539) + (end 106.3939 120.539) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "ba888e0c-69ac-4963-beaf-46ddee133e29") + ) + (segment + (start 134.9688 101.6488) + (end 134.9688 101.6487) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "bea3568a-2678-4a6f-b569-dd9e60bdc1fd") + ) + (segment + (start 234.7299 158.7939) + (end 234.7299 158.7938) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "bed063eb-4a53-42f3-8d82-8d94ecdf666f") + ) + (segment + (start 225.456 139.589) + (end 225.4563 139.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "c21c40fb-60e1-47dc-bbf0-e0b43baaf933") + ) + (segment + (start 187.7001 139.7439) + (end 187.7001 139.7438) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "c47c756b-6fcf-4986-bc74-aa623e1d5623") + ) + (segment + (start 196.63 158.794) + (end 196.6298 158.7938) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "c4d2e96c-fdf3-4e6a-aa46-a8ac90a9c087") + ) + (segment + (start 101.724 158.948) + (end 101.7235 158.9485) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "c6afde10-5a07-4a97-a299-ae24246dd1ce") + ) + (segment + (start 263.556 139.589) + (end 263.5564 139.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "c7a02a37-36f9-488a-9a6b-e0fcf870dbf0") + ) + (segment + (start 234.73 158.794) + (end 234.7299 158.7939) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "c7eac5c6-ee46-4882-ad5d-8a9e560a461e") + ) + (segment + (start 258.794 120.539) + (end 258.794 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "cb565caf-47f6-4f19-84b2-fdf833b619df") + ) + (segment + (start 173.2088 101.3788) + (end 173.2088 101.3787) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "ceb12f6c-d74c-49cb-a7d6-3d3669b5c93a") + ) + (segment + (start 239.744 120.539) + (end 239.7439 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "d197ea3f-58e4-40ec-8777-acbf227ad5c5") + ) + (segment + (start 177.9236 158.9484) + (end 177.9236 158.9485) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "d40f7258-ff37-4d23-aaee-3213367a6320") + ) + (segment + (start 154.0788 101.5988) + (end 154.0788 101.5987) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "d4255d2d-57cf-442e-baa4-113eeda4012a") + ) + (segment + (start 282.6064 139.589) + (end 282.6065 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "d5f0854d-c643-416b-9fc3-79ae7dfe1121") + ) + (segment + (start 287.369 101.489) + (end 287.369 101.4891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "dbd8b468-5479-4b75-bbc2-26361d4443e6") + ) + (segment + (start 249.017 177.844) + (end 249.0173 177.844) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "dc7a3946-2ff7-411f-b146-7680308fe47e") + ) + (segment + (start 344.519 101.489) + (end 344.519 101.4891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "dd7e82e3-38f4-4f37-8697-d70eee1d3658") + ) + (segment + (start 149.256 139.898) + (end 149.2564 139.8984) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "dd960b37-ecd5-41d5-83e8-a331fe9e912a") + ) + (segment + (start 230.1761 101.589) + (end 230.1763 101.5888) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "df9d3e70-9b9d-4fc5-b5ee-8f2eaffb634b") + ) + (segment + (start 220.694 120.539) + (end 220.6939 120.5391) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "e0d01b43-57f6-4368-a9f8-e3cbd91eb87d") + ) + (segment + (start 206.406 139.744) + (end 206.4062 139.744) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "e5cc4c2e-f2c6-41e6-bcb4-49de66609da3") + ) + (segment + (start 134.35125 149.625) + (end 137.40125 149.625) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "e794e673-c240-481a-988c-6ab9e3138ebd") + ) + (segment + (start 130.206 139.589) + (end 130.2062 139.589) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "e84dabab-9fa1-4ae6-8898-67801e917eb2") + ) + (segment + (start 120.774 158.948) + (end 120.7735 158.9485) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "ec1333cc-db0d-47bb-b65a-2ee6ea990952") + ) + (segment + (start 71.0188 158.794) + (end 71.0188 158.7938) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "eda1895d-7f42-4ab4-b92e-d9f992b968b5") + ) + (segment + (start 268.067 177.844) + (end 268.0673 177.844) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "f03f3e98-19b7-4f4f-a7ef-c721a3491934") + ) + (segment + (start 158.874 158.948) + (end 158.8735 158.9485) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "f3f665aa-fed5-41ac-bca5-886c41d4fca5") + ) + (segment + (start 344.268 177.844) + (end 344.2676 177.844) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "f42fa3aa-a7e9-4aa6-ad8d-4a617f7e316c") + ) + (segment + (start 225.4563 139.589) + (end 225.4564 139.5891) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "f55bfacf-3776-413b-92a0-a2f7ac7e80fb") + ) + (segment + (start 342.5551 139.4945) + (end 344.4244 139.4945) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "f94b8406-a67e-442a-9b14-e351ecf3e4e2") + ) + (segment + (start 287.369 177.844) + (end 287.369 177.8439) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "fa9868d7-c623-43b4-bfbb-eb1579be4312") + ) + (segment + (start 273.0817 158.639) + (end 273.0815 158.6392) + (width 0.2) + (layer "B.Cu") + (net 3) + (uuid "fc179071-d3ed-4c95-9445-742866b77bf0") + ) + (segment + (start 79.3794 80.3672) + (end 119.265 80.3672) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "0a55cd50-a442-4e69-ba5b-3fb57134769c") + ) + (segment + (start 121.051 71.6756) + (end 121.051 72.7758) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "1d130dc7-caaf-408d-aff3-9ba19fab55ea") + ) + (segment + (start 121.0513 71.6756) + (end 121.051 71.6756) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "2968c1bc-59ae-4dbc-a55a-2ce410d2f633") + ) + (segment + (start 121.051 72.7758) + (end 121.051 71.6756) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "bb94f206-f233-4f2f-a765-85c1698a4239") + ) + (segment + (start 119.265 80.3672) + (end 121.051 78.5813) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "d457185a-8da3-4b43-ac18-f4912cd73f47") + ) + (segment + (start 121.051 78.5813) + (end 121.051 72.7758) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "f22b93fa-047f-455c-a8be-d22ce18b9626") + ) + (segment + (start 67.4731 92.2735) + (end 79.3794 80.3672) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "f390eaeb-a97d-4ce7-ae5c-d208d91fcc76") + ) + (via + (at 67.4731 92.2735) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 4) + (uuid "9e1fb819-ef65-4a58-93d4-c8b761672b40") + ) + (segment + (start 67.535 92.3354) + (end 67.535 92.5512) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "3be9998a-a44f-479f-89a0-c68f4218f026") + ) + (segment + (start 66.9749 91.7753) + (end 67.4731 92.2735) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "4659fc8b-033c-472c-9e3f-e1b2988ee7c0") + ) + (segment + (start 65.785 91.7753) + (end 66.9749 91.7753) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "7a8744b4-a446-4c6e-a739-24bbb2bdcf05") + ) + (segment + (start 67.4731 92.2735) + (end 67.535 92.3354) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "7f9f6b1e-46f0-442b-8ea0-2242b4e12152") + ) + (segment + (start 65.785 91.7753) + (end 65.785 90.9995) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "918e5d76-ba79-4d98-bc80-8674f4401450") + ) + (segment + (start 65.785 92.5512) + (end 65.785 91.7753) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "c0c85b00-c5fe-4898-bddf-977e44ad9cd1") + ) + (segment + (start 63.985 92.5512) + (end 63.985 91.7753) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "cad05c19-156c-4158-818a-ab34e7dcf2c0") + ) + (segment + (start 63.985 91.7753) + (end 64.7608 90.9995) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "cd7daa58-d035-4dd5-adc7-6233d0067a2a") + ) + (segment + (start 64.7608 90.9995) + (end 65.785 90.9995) + (width 0.2) + (layer "B.Cu") + (net 4) + (uuid "d26ba98c-adfe-4165-b3d0-7b9b555ea829") + ) + (segment + (start 136.529 74.38) + (end 136.5294 74.3796) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "00213e39-bf19-4104-a5d4-288ef35b4d21") + ) + (segment + (start 86.6075 92.5512) + (end 97.1515 82.0072) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "03d10529-8001-4bd8-9d1d-8dc10f1a80cc") + ) + (segment + (start 133.104 82.0072) + (end 136.529 78.5813) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "37756252-c5fe-4dd2-ab1f-9b767361d86d") + ) + (segment + (start 97.1515 82.0072) + (end 133.104 82.0072) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "77b44217-0f23-4070-a2b8-becbbd3ec25f") + ) + (segment + (start 136.5294 74.3796) + (end 136.5294 71.6756) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "81371828-4a00-40dc-8296-baf3a4dcfb6e") + ) + (segment + (start 136.529 78.5813) + (end 136.529 74.38) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "8366c69a-7230-4cbd-bd33-f5005551a8b7") + ) + (segment + (start 136.529 74.38) + (end 136.529 71.6756) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "ec6f5fc7-7664-481b-9f30-b72785bb29b6") + ) + (via + (at 86.6075 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 5) + (uuid "60bc6541-db6b-4a65-9a92-9171d63f78ce") + ) + (segment + (start 84.8575 92.5512) + (end 84.8575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "20a9d968-8813-45ae-90b5-aee0a4c588f3") + ) + (segment + (start 86.6075 91.7753) + (end 85.8317 90.9995) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "2789b070-862f-4000-b287-0cde63f7413b") + ) + (segment + (start 85.8317 90.9995) + (end 84.8575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "3b0879ad-7d3a-421a-9560-45d8f4b4b398") + ) + (segment + (start 83.0575 92.5512) + (end 83.0575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "4d09c036-e796-4a86-8d7b-201b4242f1a2") + ) + (segment + (start 86.6075 92.5512) + (end 86.6075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "a6adf913-4ca3-47ab-a420-d93bc44701ef") + ) + (segment + (start 83.8333 90.9995) + (end 84.8575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "a7a4a085-21a7-415e-bf87-f4db88bf7f72") + ) + (segment + (start 84.8575 92.5512) + (end 84.8575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "d51a0513-bbf1-4b8a-8624-db4b6cfda0ee") + ) + (segment + (start 83.0575 91.7753) + (end 83.8333 90.9995) + (width 0.2) + (layer "B.Cu") + (net 5) + (uuid "f39f72d5-dc50-4474-9b69-299b5d36425f") + ) + (segment + (start 146.917 83.6718) + (end 152.008 78.5813) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "0617a292-4002-4b8b-83d5-6c9fccf2488c") + ) + (segment + (start 105.658 90.9985) + (end 107.031 89.6249) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "3ed06210-d40c-4ce5-8c93-db845aaf9ee6") + ) + (segment + (start 105.658 92.5512) + (end 105.658 90.9985) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "60609fee-f476-42db-bfd0-39f99a3e3fcf") + ) + (segment + (start 152.008 78.5813) + (end 152.008 71.6756) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "940505ff-888d-477b-b045-f6c4acbf6e09") + ) + (segment + (start 107.031 84.8624) + (end 108.222 83.6718) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "a1554330-7ab0-4e43-a833-0c4a2f50949c") + ) + (segment + (start 107.031 89.6249) + (end 107.031 84.8624) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "c22ec258-7f24-4182-bb13-4e4f3a5c1b6b") + ) + (segment + (start 108.222 83.6718) + (end 146.917 83.6718) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "f0c24f2d-9ca2-42b5-a604-95da5daeed18") + ) + (segment + (start 152.0075 71.6756) + (end 152.008 71.6756) + (width 0.2) + (layer "F.Cu") + (net 6) + (uuid "fedf50d2-c251-4d92-b081-83debe2eecc3") + ) + (via + (at 105.658 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 6) + (uuid "a6b3fd9d-ff2a-440d-a2d7-63234c382174") + ) + (segment + (start 102.1075 92.5512) + (end 102.1075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "34e2450b-c867-4ad6-80ea-6cfc27e42b1a") + ) + (segment + (start 102.1075 91.7753) + (end 102.8833 90.9995) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "4089308b-9511-429e-88f8-4ed70c23b654") + ) + (segment + (start 105.6575 91.7753) + (end 105.6575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "639e25ac-c41b-4aa0-b3ba-deb15d866b34") + ) + (segment + (start 105.658 92.5512) + (end 105.6575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "77e725b2-6f89-435f-8ede-deac6f55bf02") + ) + (segment + (start 104.8817 90.9995) + (end 105.6575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "83ced46c-b850-4cb6-abcf-1aaee736d3d3") + ) + (segment + (start 103.9075 90.9995) + (end 104.8817 90.9995) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "84bca33a-0cf0-4d71-bb74-af9c22fc2abd") + ) + (segment + (start 103.9075 92.5512) + (end 103.9075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "dd1efc3e-24cb-474d-b819-82f6531b4e66") + ) + (segment + (start 102.8833 90.9995) + (end 103.9075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 6) + (uuid "eb4ba9a9-bff1-4cb1-9d72-cb67bd333201") + ) + (segment + (start 124.708 92.5512) + (end 124.708 90.5853) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "5867a862-2fa8-4969-acc9-9d011d537b5f") + ) + (segment + (start 167.4856 71.6756) + (end 167.486 71.6756) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "6d600542-0b96-4889-884a-33bb1716723f") + ) + (segment + (start 167.486 71.6756) + (end 167.486 72.7777) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "7cf1cbae-f56a-40fc-b53a-fe77249ecce6") + ) + (segment + (start 129.981 85.3118) + (end 160.755 85.3118) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "8badd1dc-dc61-4aaf-a151-0da015cb80a9") + ) + (segment + (start 160.755 85.3118) + (end 167.486 78.5813) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "8da373ae-2d96-4f5f-88b0-1b0d0688fc72") + ) + (segment + (start 124.708 90.5853) + (end 129.981 85.3118) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "c73a8921-a722-4e19-8808-2f97af6a8792") + ) + (segment + (start 167.486 78.5813) + (end 167.486 71.6756) + (width 0.2) + (layer "F.Cu") + (net 7) + (uuid "e9fa0f51-bf79-4097-a84a-7d0c0da79bca") + ) + (via + (at 124.708 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 7) + (uuid "213bd86c-fbe3-46f0-af33-07cfbbd3b9d7") + ) + (segment + (start 122.9575 90.9995) + (end 123.9317 90.9995) + (width 0.2) + (layer "B.Cu") + (net 7) + (uuid "13a94bc9-9fb5-4e5c-831f-ea87d46adf22") + ) + (segment + (start 122.9575 92.5512) + (end 122.9575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 7) + (uuid "1e95d4bf-2ae0-4021-b29a-8bbb31dbe4ce") + ) + (segment + (start 124.7075 92.5512) + (end 124.708 92.5512) + (width 0.2) + (layer "B.Cu") + (net 7) + (uuid "70526fb8-6772-4956-9a40-547e8273ef35") + ) + (segment + (start 124.7075 91.7753) + (end 124.7075 92.5512) + (width 0.2) + (layer "B.Cu") + (net 7) + (uuid "766cc5a3-d6ef-4fc4-91b9-73d10ed2c279") + ) + (segment + (start 123.9317 90.9995) + (end 124.7075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 7) + (uuid "c4e16014-c92c-454a-b6f4-0dda2e4de2ae") + ) + (segment + (start 121.1575 92.5512) + (end 124.708 92.5512) + (width 0.2) + (layer "In1.Cu") + (net 7) + (uuid "5241af0a-0cee-4450-b9b5-cd4de18d549d") + ) + (segment + (start 143.758 92.5512) + (end 143.758 90.1359) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "00188e6c-8000-4647-871a-59f8ec12e379") + ) + (segment + (start 180.5825 71.6756) + (end 180.5825 75.1279) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "137c7560-6c6b-433f-a36f-1468120d0385") + ) + (segment + (start 143.758 90.1359) + (end 147.245 86.6483) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "182289b3-24fd-41f0-a202-48c918e4fcd2") + ) + (segment + (start 180.5825 75.1279) + (end 180.582 75.1284) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "48da9777-22a7-4b5b-924d-12d983cfdd84") + ) + (segment + (start 180.583 78.5813) + (end 180.582 78.5812) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "7464c6af-2867-481b-bfee-b22165cb3cf0") + ) + (segment + (start 172.516 86.6483) + (end 180.583 78.5813) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "7729cc77-ad40-413b-8028-7c8c3bc1aba7") + ) + (segment + (start 180.582 78.5812) + (end 180.582 75.1284) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "d55092b6-be98-4aba-841c-a6bd12bbdcc8") + ) + (segment + (start 147.245 86.6483) + (end 172.516 86.6483) + (width 0.2) + (layer "F.Cu") + (net 8) + (uuid "ddeb612d-cdf6-4da8-9f6e-19e80c3ab9ea") + ) + (via + (at 143.758 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 8) + (uuid "7d2458d8-4ff9-4edf-bbde-cd26f3811292") + ) + (segment + (start 142.0075 91.7753) + (end 142.0075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "2472e993-a0ea-41c0-919f-899092c81a17") + ) + (segment + (start 142.9816 91.7753) + (end 143.7575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "3e590837-6f69-4900-97ed-5a8093fab8fa") + ) + (segment + (start 143.7575 92.5512) + (end 143.758 92.5512) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "4bf3889e-735e-4dc8-aafd-ae2d8c9d0ae5") + ) + (segment + (start 140.2075 91.7753) + (end 140.9833 90.9995) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "76b8a84d-7ea2-426a-90ed-09226f652bd8") + ) + (segment + (start 142.0075 91.7753) + (end 142.9816 91.7753) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "83d0ff1a-1fe5-46b8-bea9-e6891bc2b7ad") + ) + (segment + (start 142.0075 92.5512) + (end 142.0075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "889e6b32-dae5-42ef-bdc0-11c11aa7e171") + ) + (segment + (start 140.9833 90.9995) + (end 142.0075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "eb0e4543-c83a-40c3-bf2b-024120360631") + ) + (segment + (start 140.2075 92.5512) + (end 140.2075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 8) + (uuid "ecde3e1a-0473-4af7-8338-8fba2714050b") + ) + (segment + (start 184.263 87.9979) + (end 193.68 78.5813) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "01f820ad-80ec-4cfb-a976-be8023784828") + ) + (segment + (start 165.104 87.9979) + (end 184.263 87.9979) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "247eeb7a-a624-4c3c-9a66-164867f03063") + ) + (segment + (start 193.6794 73.4014) + (end 193.6794 71.6756) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "3e1edddb-8650-476d-825e-b06c74f4ba51") + ) + (segment + (start 162.808 92.5512) + (end 162.808 90.2949) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "9ca30b4e-c318-4f37-bdec-b691258c4ce2") + ) + (segment + (start 193.679 78.5812) + (end 193.679 75.1284) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "b1a1144d-5b6c-4d0f-8a25-2fb973f8166f") + ) + (segment + (start 193.679 73.4018) + (end 193.6794 73.4014) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "b1c24b20-8c11-431e-8d87-deaa557c9493") + ) + (segment + (start 193.679 75.1284) + (end 193.679 73.4018) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "bab4304f-f96b-44cc-ba3c-428b209bb511") + ) + (segment + (start 162.808 90.2949) + (end 165.104 87.9979) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "babc60a3-9b6e-49a2-8653-99ef25283b7b") + ) + (segment + (start 193.68 78.5813) + (end 193.679 78.5812) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "d84edf74-8c1c-4327-b280-9104787c644c") + ) + (segment + (start 193.679 75.1284) + (end 193.679 73.4018) + (width 0.2) + (layer "F.Cu") + (net 9) + (uuid "fdc9cfdd-fd12-4b53-8c9f-caa61e793ac4") + ) + (via + (at 162.808 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 9) + (uuid "9567f190-9c83-4efe-a741-8a18125f063d") + ) + (segment + (start 162.8075 91.7753) + (end 162.8075 92.5512) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "0908f146-43a3-4bf1-bae4-6c0d497cff14") + ) + (segment + (start 161.0575 90.9995) + (end 162.0317 90.9995) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "2c368f88-2003-4dcc-aa39-dddc9e48b97f") + ) + (segment + (start 159.2575 91.7753) + (end 160.0333 90.9995) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "421632c8-1eb3-41c8-8fb1-46fb9f92fcc6") + ) + (segment + (start 160.0333 90.9995) + (end 161.0575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "72d91715-e175-46e1-8f66-ee352e3f841a") + ) + (segment + (start 161.0575 92.5512) + (end 161.0575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "a34f166a-b6b6-4f3c-8135-ab0ead755795") + ) + (segment + (start 162.0317 90.9995) + (end 162.8075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "b6a25af2-12be-4e70-b80f-55664e35037c") + ) + (segment + (start 162.8075 92.5512) + (end 162.808 92.5512) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "c176762b-7cf2-4f43-8273-d083f7714aea") + ) + (segment + (start 159.2575 92.5512) + (end 159.2575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 9) + (uuid "fb16780f-a9de-485c-b7a7-e3a2c6d15a3b") + ) + (segment + (start 209.158 72.7778) + (end 209.158 71.6756) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "00cd37fa-f23a-4c7c-87b7-d6f9997b853b") + ) + (segment + (start 204.583 82.9551) + (end 204.784 82.9551) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "0670469a-10c6-47cc-9741-f6a485835e22") + ) + (segment + (start 197.922 89.6162) + (end 204.583 82.9551) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "0f977b86-0892-4374-8680-25b5d380ea67") + ) + (segment + (start 209.1575 71.6756) + (end 209.1575 72.7773) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "2a86bb1d-2365-433b-b394-d9a7271195a6") + ) + (segment + (start 196.142 89.6162) + (end 197.922 89.6162) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "85c010f8-a272-4790-a34d-23f96bbd027d") + ) + (segment + (start 184.771 89.6379) + (end 196.12 89.6379) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "894210cc-8546-46d0-837d-add2e45841a4") + ) + (segment + (start 209.1575 72.7773) + (end 209.158 72.7778) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "8c7a7c8c-ccea-41ab-8e9b-7e9d5b74fea5") + ) + (segment + (start 196.12 89.6379) + (end 196.142 89.6162) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "c1055191-9063-4e90-9bcb-d9776297309d") + ) + (segment + (start 204.784 82.9551) + (end 209.158 78.5813) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "cdb285a3-89db-42bc-a4a9-2a54458ffd9b") + ) + (segment + (start 181.858 92.5512) + (end 184.771 89.6379) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "d35fb2b9-0dbd-4606-a59f-66dfab630571") + ) + (segment + (start 209.158 78.5813) + (end 209.158 72.7778) + (width 0.2) + (layer "F.Cu") + (net 10) + (uuid "fc96bbd9-016d-4c0d-a3bb-5ddbc68fdef9") + ) + (via + (at 181.858 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 10) + (uuid "f3c00606-a333-43e7-894b-5702a5c5c0c7") + ) + (segment + (start 181.0817 90.9995) + (end 181.8575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "3d498cf0-51c2-49f9-b4d5-de6b39c71c6c") + ) + (segment + (start 180.1075 91.7753) + (end 179.0834 91.7753) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "423cdb5d-4a0d-4214-a878-afcf9438505b") + ) + (segment + (start 180.1075 92.5512) + (end 180.1075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "595e511b-cffe-4acf-a3eb-8f96f19b7a53") + ) + (segment + (start 180.1075 90.9995) + (end 181.0817 90.9995) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "9661a60d-116a-4be6-a900-b77e3f37e306") + ) + (segment + (start 181.8575 91.7753) + (end 181.8575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "cb7fd5f9-b06f-42bc-825b-82dd55b06e3d") + ) + (segment + (start 181.8575 92.5512) + (end 181.858 92.5512) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "dc802e3a-8168-47e3-8fd3-f32488366e22") + ) + (segment + (start 180.1075 91.7753) + (end 180.1075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "edae8873-7ad0-4b2f-9dc0-2c3f3059892f") + ) + (segment + (start 179.0834 91.7753) + (end 178.3075 92.5512) + (width 0.2) + (layer "B.Cu") + (net 10) + (uuid "ee576e73-eacf-405f-94bd-5fb4730d2130") + ) + (segment + (start 222.254 72.2937) + (end 222.254 72.9119) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "02aec888-a3c6-45f4-91db-d878f9c35743") + ) + (segment + (start 222.2544 72.2933) + (end 222.2544 71.6756) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "0775d088-8e23-41dc-958a-b0065d15b879") + ) + (segment + (start 222.254 72.2937) + (end 222.2544 72.2933) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "0d7a3386-2f81-42e1-9fdb-c8a0fb6abdbd") + ) + (segment + (start 222.254 72.9119) + (end 222.254 72.2937) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "16ed1491-c25f-4258-9bb7-10ff7f3cac65") + ) + (segment + (start 206.964 85.3363) + (end 215.499 85.3363) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "421814cc-4b59-42e4-ad04-14d83fb9c2d3") + ) + (segment + (start 222.254 78.5812) + (end 222.254 72.9119) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "43c41781-2e8c-4a09-82c9-64c59454bfef") + ) + (segment + (start 200.908 92.5512) + (end 201.108 92.5512) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "4c9a58e6-2035-40df-9166-11835185253e") + ) + (segment + (start 201.108 91.193) + (end 206.964 85.3363) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "a20853d9-c643-4862-8c0e-4d8890e826fd") + ) + (segment + (start 222.255 78.5813) + (end 222.254 78.5812) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "cac806a0-cf3e-4fd8-b9b7-dce8a5854704") + ) + (segment + (start 215.499 85.3363) + (end 222.255 78.5813) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "dd8bd469-f81c-4877-ad91-b2f541503dae") + ) + (segment + (start 201.108 92.5512) + (end 201.108 91.193) + (width 0.2) + (layer "F.Cu") + (net 11) + (uuid "e5e8073b-07a8-4da4-a462-cad11fe6a32e") + ) + (via + (at 200.908 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 11) + (uuid "6edbc272-9b72-4815-8fdc-c532261e82d3") + ) + (segment + (start 198.1333 90.9995) + (end 199.1575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "11eb8df4-a8b6-4f9e-901e-a96e9593c45a") + ) + (segment + (start 199.1575 90.9995) + (end 200.1317 90.9995) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "25275356-6388-4d21-bcec-3d2d5a4b6af0") + ) + (segment + (start 200.1317 90.9995) + (end 200.9075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "45d93ed5-8729-4e7d-81d4-a6d81b1a50cb") + ) + (segment + (start 200.9075 91.7753) + (end 200.9075 92.5512) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "638819e0-cc8f-469f-8ab2-0ae746b3f20d") + ) + (segment + (start 197.3575 91.7753) + (end 198.1333 90.9995) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "8dbcf3bb-00a0-4d29-90ee-69a5fd9538c2") + ) + (segment + (start 199.1575 92.5512) + (end 199.1575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "9b42f728-8e4c-42e6-8f20-a35d0e45e648") + ) + (segment + (start 200.9075 92.5512) + (end 200.908 92.5512) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "c4281d0c-fe21-48ff-a8db-d2160f2027c7") + ) + (segment + (start 197.3575 92.5512) + (end 197.3575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 11) + (uuid "f0d964bf-660d-4de6-a007-7602e350f5f2") + ) + (segment + (start 224.636 84.5344) + (end 229.398 84.5344) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "13fc4c7a-18a2-4438-b331-91a76ba201cf") + ) + (segment + (start 229.398 84.5344) + (end 235.351 78.5813) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "28c756bb-04dd-422f-851c-475635f48d04") + ) + (segment + (start 219.958 92.5512) + (end 219.958 89.2127) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "3a2ca98d-a06d-4492-b9c0-d7804d8f8e59") + ) + (segment + (start 235.351 78.5813) + (end 235.351 75.1284) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "62c94d5b-b26f-4b79-8356-bfe0e9072964") + ) + (segment + (start 235.351 75.1284) + (end 235.351 71.6756) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "70a09b69-4b10-4185-be14-cac1d7cb1d73") + ) + (segment + (start 219.958 89.2127) + (end 224.636 84.5344) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "76a94b50-5272-4579-84e5-4b223681ba2f") + ) + (segment + (start 235.351 75.1284) + (end 235.351 71.6756) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "83e6ee81-9802-4c25-a04a-566c508dd2c4") + ) + (segment + (start 235.3513 71.6756) + (end 235.351 71.6756) + (width 0.2) + (layer "F.Cu") + (net 12) + (uuid "bd3356fe-9290-4c7d-8499-a85e860c05b2") + ) + (via + (at 219.958 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 12) + (uuid "8f6adbc0-9490-4965-a540-389a9282fdd0") + ) + (segment + (start 219.958 92.5512) + (end 219.9575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "0b8d8c53-90d5-467d-951d-96b2675e0742") + ) + (segment + (start 218.2075 91.7753) + (end 219.1816 91.7753) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "2b442202-9a29-4f9c-b1f6-5537b38fb35f") + ) + (segment + (start 216.4075 91.7753) + (end 217.1833 90.9995) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "4acb0ad9-35f0-49f6-b182-66524cbfa461") + ) + (segment + (start 218.2075 91.7753) + (end 218.2075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "549bb7eb-a749-4ed5-82a0-b7eaae5a1bc9") + ) + (segment + (start 216.4075 92.5512) + (end 216.4075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "6ccb0953-39e7-4fcd-b809-1a3d7aa26211") + ) + (segment + (start 218.2075 92.5512) + (end 218.2075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "b1fff76a-3fad-42af-9c7d-fcfaf9e6e8c1") + ) + (segment + (start 219.1816 91.7753) + (end 219.9575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "b3ed8d13-d336-43fe-832d-608136622a39") + ) + (segment + (start 217.1833 90.9995) + (end 218.2075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 12) + (uuid "c9520e89-2b79-49be-99d7-b9a174e9d789") + ) + (segment + (start 248.448 74.5343) + (end 248.448 83.1106) + (width 0.2) + (layer "F.Cu") + (net 13) + (uuid "03fc1330-98c1-4b70-a8da-e5f920ad3234") + ) + (segment + (start 248.448 74.5343) + (end 248.4481 74.5342) + (width 0.2) + (layer "F.Cu") + (net 13) + (uuid "14b839f1-aac2-415b-b512-9ee5ff9e5373") + ) + (segment + (start 248.448 83.1106) + (end 239.008 92.5512) + (width 0.2) + (layer "F.Cu") + (net 13) + (uuid "a7891530-09a6-46c0-ac45-31baff2c1962") + ) + (segment + (start 248.448 77.3931) + (end 248.448 74.5343) + (width 0.2) + (layer "F.Cu") + (net 13) + (uuid "c2d5c260-e1a1-4a54-abcb-6b0519921831") + ) + (segment + (start 248.4481 74.5342) + (end 248.4481 71.6756) + (width 0.2) + (layer "F.Cu") + (net 13) + (uuid "ec824542-3a11-4115-a039-5046511263cc") + ) + (via + (at 239.008 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 13) + (uuid "bf08c508-4ad8-4584-b8e0-d203a6f6908d") + ) + (segment + (start 238.2316 91.7753) + (end 239.0075 92.5512) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "0e991c00-243d-4a9b-b572-8e466a051fc9") + ) + (segment + (start 239.0075 92.5512) + (end 239.008 92.5512) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "1d013632-5ec1-4dcc-9022-902df6ebd445") + ) + (segment + (start 235.4575 92.5512) + (end 235.4575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "23549515-5162-4145-b5ca-2cfb9790d0b7") + ) + (segment + (start 237.2575 91.7753) + (end 238.2316 91.7753) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "79d97928-3996-46f6-baf4-a937a0d54a97") + ) + (segment + (start 237.2575 91.7753) + (end 237.2575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "a27e9317-ce2d-435a-8e7e-352116da9ee8") + ) + (segment + (start 235.4575 91.7753) + (end 236.2333 90.9995) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "cf7ca582-151f-4c44-9fd5-28bdf6134859") + ) + (segment + (start 237.2575 92.5512) + (end 237.2575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "cf98474a-424a-438d-8844-1f15ee731ba5") + ) + (segment + (start 236.2333 90.9995) + (end 237.2575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 13) + (uuid "d11cc469-9e89-4ebc-8698-0e4a89cfddc4") + ) + (segment + (start 263.926 77.3683) + (end 263.926 86.6824) + (width 0.2) + (layer "F.Cu") + (net 14) + (uuid "1d33bbb1-85b3-4252-9ff3-4b1b5ea47d6e") + ) + (segment + (start 263.9263 77.368) + (end 263.9263 71.6756) + (width 0.2) + (layer "F.Cu") + (net 14) + (uuid "7b882f42-fc47-4dd0-8fa2-bdea282f4ecc") + ) + (segment + (start 263.926 71.6756) + (end 263.926 77.3683) + (width 0.2) + (layer "F.Cu") + (net 14) + (uuid "cd0d342a-baed-4899-bf07-dda7566a3cc2") + ) + (segment + (start 263.926 77.3683) + (end 263.9263 77.368) + (width 0.2) + (layer "F.Cu") + (net 14) + (uuid "f39defcf-8d00-4472-8b14-7178620ac988") + ) + (segment + (start 263.926 86.6824) + (end 258.058 92.5512) + (width 0.2) + (layer "F.Cu") + (net 14) + (uuid "f5dde07c-97c3-449f-ae37-e2526d79eb10") + ) + (via + (at 258.058 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 14) + (uuid "9ca43591-7519-4e4b-936b-8a48aa0c4c0d") + ) + (segment + (start 254.5075 92.5512) + (end 254.5075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "33efcad1-e052-4584-9e41-020785fcdabf") + ) + (segment + (start 256.3075 91.7753) + (end 256.3075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "533f0523-66b1-48e6-b2d1-17748fea99b3") + ) + (segment + (start 255.2833 90.9995) + (end 256.3075 90.9995) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "68210cc5-58fa-4d51-b543-a8336e9c8ce3") + ) + (segment + (start 256.3075 91.7753) + (end 257.2816 91.7753) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "7f96d53d-e0a3-4811-a747-7ed08e72578b") + ) + (segment + (start 257.2816 91.7753) + (end 258.0575 92.5512) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "95c1b34b-42ca-49a6-93fc-7d2075c2c1f9") + ) + (segment + (start 258.0575 92.5512) + (end 258.058 92.5512) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "a123cccd-af75-4faf-ac14-498530cd977d") + ) + (segment + (start 254.5075 91.7753) + (end 255.2833 90.9995) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "d65fa096-9d8a-4e77-a155-9906cc42ce2c") + ) + (segment + (start 256.3075 92.5512) + (end 256.3075 91.7753) + (width 0.2) + (layer "B.Cu") + (net 14) + (uuid "fc033cd4-cb42-44bb-bfbd-a8ca6125d0ea") + ) + (segment + (start 279.404 76.319) + (end 279.404 73.9973) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "00c1db30-2091-4420-a67f-5779cd0cffeb") + ) + (segment + (start 279.404 73.9973) + (end 279.4044 73.9969) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "4908d005-dfad-4e3c-9643-1bc6ebb7667a") + ) + (segment + (start 277.108 92.5512) + (end 277.108 83.2596) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "4e63d9b1-4905-4d18-98b0-0e552048c820") + ) + (segment + (start 277.108 83.2596) + (end 279.405 80.9625) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "6003abe5-1cca-4985-8cc5-8138a4f2b779") + ) + (segment + (start 279.405 80.9625) + (end 279.404 80.9624) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "7194209c-09c6-4f9b-96b4-cbbf636e2c09") + ) + (segment + (start 279.404 76.319) + (end 279.404 73.9973) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "997de8cd-feb3-4160-a2ff-868fb00e74dc") + ) + (segment + (start 279.4044 73.9969) + (end 279.4044 71.6756) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "d6392ad7-9287-45ab-83ee-9b08ffabf74c") + ) + (segment + (start 279.404 80.9624) + (end 279.404 76.319) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "ebd40207-7eda-4293-b35d-bd01799ba8fb") + ) + (via + (at 277.108 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 15) + (uuid "2f339160-0ee9-4bcc-9087-83c61b08d5c3") + ) + (segment + (start 275.3575 92.5512) + (end 275.3575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "0714beef-d62b-4bef-8c5d-bee5a7457d67") + ) + (segment + (start 273.5575 92.5512) + (end 273.5575 91.7753) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "11811f3e-aaae-428d-a9d8-8d2bb32517d0") + ) + (segment + (start 275.3575 91.7753) + (end 276.3316 91.7753) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "1fe6eed4-5787-486d-96fb-da324a7ce46f") + ) + (segment + (start 273.5575 91.7753) + (end 274.3333 90.9995) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "27f7edfa-33fb-43ee-8e3f-086f11115dd9") + ) + (segment + (start 276.3316 91.7753) + (end 277.1075 92.5512) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "4c7702d9-97c3-4c39-a75d-d071af85022d") + ) + (segment + (start 275.3575 91.7753) + (end 275.3575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "58416559-3229-4bcb-b8ad-c19f39e4bf40") + ) + (segment + (start 277.1075 92.5512) + (end 277.108 92.5512) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "6507948d-3960-401e-abb1-3de587735996") + ) + (segment + (start 274.3333 90.9995) + (end 275.3575 90.9995) + (width 0.2) + (layer "B.Cu") + (net 15) + (uuid "eae2c145-63a1-43e7-a748-9067da0eca0d") + ) + (segment + (start 296.135 82.2148) + (end 294.882 80.9623) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "17d86744-f173-41d9-9d97-ce20f83ce194") + ) + (segment + (start 296.135 92.5512) + (end 296.135 82.2148) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "26df1cbe-0f74-427c-8fb3-9bf47fbaed81") + ) + (segment + (start 294.882 76.3189) + (end 294.882 73.997) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "28924398-f6cf-4c21-8e68-374b5394521a") + ) + (segment + (start 294.882 73.997) + (end 294.8825 73.9965) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "72670b72-a88d-4e0c-a33f-c7163dc8c377") + ) + (segment + (start 294.8825 73.9965) + (end 294.8825 71.6756) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "7b1bbb1c-0cc4-48e9-ac1c-157f32ad7123") + ) + (segment + (start 294.882 76.3189) + (end 294.882 73.997) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "d240c4b5-e035-49cb-a1cd-81b5de57cb2c") + ) + (segment + (start 294.882 80.9623) + (end 294.882 76.3189) + (width 0.2) + (layer "F.Cu") + (net 16) + (uuid "e197faa8-69db-4ca5-8ee6-2fdf09cc769d") + ) + (via + (at 296.135 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 16) + (uuid "b2089056-7c7e-4f2e-9b81-914a597360e6") + ) + (segment + (start 296.135 91.7753) + (end 295.3592 90.9995) + (width 0.2) + (layer "B.Cu") + (net 16) + (uuid "5cca6470-7f99-4d24-bfb5-cc7735566bb7") + ) + (segment + (start 296.135 92.5512) + (end 296.135 91.7753) + (width 0.2) + (layer "B.Cu") + (net 16) + (uuid "88239cd1-0ad5-4cfe-8fda-57e7225f57e9") + ) + (segment + (start 294.385 92.5512) + (end 294.385 90.9995) + (width 0.2) + (layer "B.Cu") + (net 16) + (uuid "93456785-5740-4626-88cd-592f5525ed29") + ) + (segment + (start 295.3592 90.9995) + (end 294.385 90.9995) + (width 0.2) + (layer "B.Cu") + (net 16) + (uuid "e4d54fad-9595-49b0-903c-ced336467006") + ) + (segment + (start 292.585 92.5512) + (end 296.135 92.5512) + (width 0.2) + (layer "In2.Cu") + (net 16) + (uuid "bf0cd18a-8f18-4d67-87b7-9dc263be5285") + ) + (segment + (start 317.364 85.1297) + (end 324.785 92.5512) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "55cdc110-60bb-4c84-b75b-feff7da703b7") + ) + (segment + (start 314.528 85.1297) + (end 317.364 85.1297) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "5707635d-1990-4d48-b5a4-e6d75d13a027") + ) + (segment + (start 307.9794 75.1279) + (end 307.9794 71.6756) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "62c60232-12fc-4fc2-9a9c-a60df26f986d") + ) + (segment + (start 307.979 78.5811) + (end 314.528 85.1297) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "7beac8ed-ebf8-4515-ab45-c99900699039") + ) + (segment + (start 307.979 75.1283) + (end 307.9794 75.1279) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "a240517e-381a-433d-89db-636bf7b59bae") + ) + (segment + (start 307.979 75.1283) + (end 307.979 78.5811) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "d6ee3fa4-8d78-4f14-9aaf-5471d6dfe9f2") + ) + (segment + (start 307.979 71.6756) + (end 307.979 75.1283) + (width 0.2) + (layer "F.Cu") + (net 17) + (uuid "eb62eb60-79d4-4461-8694-f9c1a15bc0e6") + ) + (via + (at 324.785 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 17) + (uuid "a8336ce6-8306-49da-b904-868a846b010c") + ) + (segment + (start 323.035 92.5512) + (end 323.035 90.9995) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "0ccd0877-b53a-46fb-977f-1edfb359301f") + ) + (segment + (start 323.035 92.5512) + (end 323.035 90.9995) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "37a96ef7-0042-4cc9-81bd-69fffed261d2") + ) + (segment + (start 323.035 90.9995) + (end 324.0092 90.9995) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "5f11b19a-f99b-4237-8598-f4ab8de76157") + ) + (segment + (start 324.0092 90.9995) + (end 324.785 91.7753) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "810a9deb-277c-4719-b4d4-9a5fd88dd8e2") + ) + (segment + (start 322.0108 90.9995) + (end 323.035 90.9995) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "86495374-d674-4fb8-9b21-686144f222de") + ) + (segment + (start 324.785 91.7753) + (end 324.785 92.5512) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "ae76924e-f503-4966-9526-c1722520dd14") + ) + (segment + (start 321.235 92.5512) + (end 321.235 91.7753) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "b7c93e1c-6467-4d18-8c67-af10885f5165") + ) + (segment + (start 321.235 91.7753) + (end 322.0108 90.9995) + (width 0.2) + (layer "B.Cu") + (net 17) + (uuid "ea2a148f-5cb5-47be-9eb2-9a1fff140743") + ) + (segment + (start 321.076 77.986) + (end 321.076 74.8308) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "04197c28-3b5d-46db-ae2f-13640ec32427") + ) + (segment + (start 321.0763 73.2529) + (end 321.0763 71.6756) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "34378c52-5ae2-4035-a418-57f38b7bb5bc") + ) + (segment + (start 353.36 92.5512) + (end 353.36 92.4101) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "496e1da7-4672-423f-9221-7664c7e0d233") + ) + (segment + (start 353.36 92.4101) + (end 344.622 83.6718) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "4e48f37e-4c28-46d1-84fe-cbabd9d81b17") + ) + (segment + (start 321.076 73.2532) + (end 321.0763 73.2529) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "b1d6030e-585d-44af-b9d4-e6a627fa9064") + ) + (segment + (start 321.076 74.8308) + (end 321.076 73.2532) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "bf672366-e153-4b6a-9e8c-fc8540e16021") + ) + (segment + (start 321.076 74.8308) + (end 321.076 73.2532) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "c5abe07f-1152-457d-996a-9c4cf6587006") + ) + (segment + (start 344.622 83.6718) + (end 326.762 83.6718) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "e2842c02-39db-41ef-96da-0d0cac7eb9d0") + ) + (segment + (start 326.762 83.6718) + (end 321.076 77.986) + (width 0.2) + (layer "F.Cu") + (net 18) + (uuid "f0b4a22e-96f0-4f89-a963-1e60ee1c24f1") + ) + (via + (at 353.36 92.5512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 18) + (uuid "6da3b687-b784-4fce-b747-5d296c6b0a05") + ) + (segment + (start 350.5858 90.9995) + (end 351.61 90.9995) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "31d7bc5e-96a2-4883-9ae9-da76c37d3510") + ) + (segment + (start 351.61 92.5512) + (end 351.61 91.7753) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "366728db-ee87-4172-86b7-2c62c6f81563") + ) + (segment + (start 351.61 91.7753) + (end 352.5841 91.7753) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "5b16d5aa-85f5-4442-91f3-0e578231f8b5") + ) + (segment + (start 349.81 91.7753) + (end 350.5858 90.9995) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "6f3c2c15-6272-4d70-b66b-16b9f2f1c420") + ) + (segment + (start 352.5841 91.7753) + (end 353.36 92.5512) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "92f1b68a-a934-4c5c-a253-a0e6a148cb69") + ) + (segment + (start 351.61 91.7753) + (end 351.61 90.9995) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "9c78d1ef-4dd0-4500-8146-7939e70afaf9") + ) + (segment + (start 349.81 92.5512) + (end 349.81 91.7753) + (width 0.2) + (layer "B.Cu") + (net 18) + (uuid "c36b572e-1dc5-45bf-856e-4ec9370ec782") + ) + (segment + (start 123.432 71.6758) + (end 123.4323 71.6758) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "026fe39f-5143-4a7c-b234-6f44770b0256") + ) + (segment + (start 70.0863 90.1242) + (end 79.5153 80.6952) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "04ccbc2b-f5a0-4bc4-81b2-06f9cb248485") + ) + (segment + (start 70.0863 109.39) + (end 70.0863 90.1242) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "099458b8-9e2a-4314-9bd7-9e9b567cc414") + ) + (segment + (start 123.4323 71.6758) + (end 123.4325 71.6756) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "174aa4ac-ab44-45e2-8e3e-1b6a0b7e9918") + ) + (segment + (start 121.319 80.6952) + (end 123.433 78.5813) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "18f0bcc0-1bda-4574-b425-1558c693c778") + ) + (segment + (start 123.433 78.5813) + (end 123.432 78.5812) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "20174605-d5ac-4ac1-bf23-41ea6975f5b9") + ) + (segment + (start 123.432 72.7758) + (end 123.432 71.6758) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "456de399-873b-4a69-8a8a-6d77bdd1d9be") + ) + (segment + (start 79.5153 80.6952) + (end 121.319 80.6952) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "6537a320-a74b-4f53-950c-afdc16eb81a1") + ) + (segment + (start 123.432 71.6758) + (end 123.432 72.7758) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "801ed759-5b6b-43af-8489-1100c81e7c60") + ) + (segment + (start 123.432 78.5812) + (end 123.432 72.7758) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "828b0693-5ec2-4170-ae4f-b25cee942577") + ) + (segment + (start 72.2975 111.601) + (end 70.0863 109.39) + (width 0.2) + (layer "F.Cu") + (net 19) + (uuid "e5a3ae1b-e54b-4c76-bc34-64006daa54af") + ) + (via + (at 72.2975 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 19) + (uuid "64444dc8-445d-477c-8447-e861d2ce7d1c") + ) + (segment + (start 70.5475 111.6012) + (end 70.5475 110.0495) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "2a9ba119-ecfc-495c-8103-7dc514f8c0bb") + ) + (segment + (start 68.7475 111.6012) + (end 68.7475 110.8253) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "372e6ff7-d49b-4135-9111-7fbb69c0c0e4") + ) + (segment + (start 68.7475 110.8253) + (end 69.5233 110.0495) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "7d02f88c-7edb-4142-953e-3ee21b447c84") + ) + (segment + (start 72.2975 110.8252) + (end 71.5218 110.0495) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "d363d210-3c8e-46ca-b8e2-84b44cbcd37e") + ) + (segment + (start 71.5218 110.0495) + (end 70.5475 110.0495) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "db1c8fa5-02df-4cb9-addb-2438fa2c8fde") + ) + (segment + (start 72.2975 111.6012) + (end 72.2975 111.601) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "dd283093-5b10-4c61-b89d-4a95431fca69") + ) + (segment + (start 72.2975 111.601) + (end 72.2975 110.8252) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "e42c9a4e-0ce4-4656-9607-61ea61deca3f") + ) + (segment + (start 69.5233 110.0495) + (end 70.5475 110.0495) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "ec6607d1-9f19-402e-bfbd-21d868e64a72") + ) + (segment + (start 70.5475 111.6012) + (end 70.5475 110.0495) + (width 0.2) + (layer "B.Cu") + (net 19) + (uuid "f3c92cc2-e266-4f26-9158-7118effefb35") + ) + (segment + (start 125.8138 71.6756) + (end 125.814 71.6756) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "0ee8f703-0ab2-4929-aab4-6489abe72c9b") + ) + (segment + (start 125.814 75.1284) + (end 125.814 71.6756) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "5d5ad4b1-b29a-436c-8730-c4e287a2edb2") + ) + (segment + (start 79.6511 81.0232) + (end 123.372 81.0232) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "6dd27e78-30eb-4ade-ab6a-44ed2affd0e8") + ) + (segment + (start 125.814 78.5813) + (end 125.814 75.1284) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "9e80dbde-2eef-492e-8bf7-09303154631a") + ) + (segment + (start 74.7538 130.651) + (end 74.7538 113.311) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "a93b81a7-5f22-4064-b66e-3580373643a5") + ) + (segment + (start 71.045 109.602) + (end 71.045 89.6293) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "bec5ccb9-d417-4a11-a573-5b081febaa3f") + ) + (segment + (start 74.7538 113.311) + (end 71.045 109.602) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "c3df5d2a-2287-4e70-9022-a1085246f0bd") + ) + (segment + (start 123.372 81.0232) + (end 125.814 78.5813) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "d65f7960-aca1-4950-9749-271ffbbaa0e1") + ) + (segment + (start 125.814 75.1284) + (end 125.814 71.6756) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "f807b1e9-304b-4018-84d9-81e83f5018ea") + ) + (segment + (start 71.045 89.6293) + (end 79.6511 81.0232) + (width 0.2) + (layer "F.Cu") + (net 20) + (uuid "ff76963f-565a-49de-87c1-b278ef47238d") + ) + (via + (at 74.7538 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 20) + (uuid "9da593fb-c62d-41b2-b21d-b7cf6f68a939") + ) + (segment + (start 73.0038 130.6512) + (end 73.0038 129.0995) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "1d6fdd7e-fbf5-410a-be29-436611185fc3") + ) + (segment + (start 71.2038 130.6512) + (end 71.2038 129.8753) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "44094c48-48f3-464a-9334-6e7dcd188ac1") + ) + (segment + (start 73.0038 129.0995) + (end 73.978 129.0995) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "44623fef-e330-4e02-ae63-9892381ebe25") + ) + (segment + (start 73.978 129.0995) + (end 74.7538 129.8753) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "93ee4063-44f5-4793-b0bc-b01d656a2f15") + ) + (segment + (start 71.2038 129.8753) + (end 71.9796 129.0995) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "a654ccd2-06c1-442a-91cf-fb28026aa40a") + ) + (segment + (start 74.7538 130.651) + (end 74.7538 130.6512) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "c43f9b71-18a4-4432-914c-1813cb3e77a5") + ) + (segment + (start 71.9796 129.0995) + (end 73.0038 129.0995) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "dc053eea-1a37-436d-9f94-e7791e907d77") + ) + (segment + (start 74.7538 129.8753) + (end 74.7538 130.651) + (width 0.2) + (layer "B.Cu") + (net 20) + (uuid "e0ca4f81-be6b-47c0-85db-a8f377f340b2") + ) + (segment + (start 71.373 109.27) + (end 71.373 89.7652) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "108d1ed1-727f-416a-afbb-9b5b731a72a0") + ) + (segment + (start 71.373 89.7652) + (end 79.787 81.3512) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "375c5f06-6a4b-40c6-9502-47430f4927a8") + ) + (segment + (start 79.787 81.3512) + (end 125.425 81.3512) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "4d8704dc-cfa4-44d1-925d-fb78dca085aa") + ) + (segment + (start 128.195 78.5813) + (end 128.195 71.6756) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "7531ed70-c694-4953-87a9-e21d63d8d482") + ) + (segment + (start 79.5163 149.701) + (end 79.5163 117.414) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "859d3a3b-e66f-4b5e-89fd-5fa2a9995ea9") + ) + (segment + (start 79.5163 117.414) + (end 71.373 109.27) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "b61890e2-e5aa-407a-a156-ab2e5d2c6d95") + ) + (segment + (start 125.425 81.3512) + (end 128.195 78.5813) + (width 0.2) + (layer "F.Cu") + (net 21) + (uuid "f2c904fe-6299-42fb-9730-7d7a54106da5") + ) + (via + (at 79.5163 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 21) + (uuid "75d8f152-5076-488d-8815-50c25f624eb5") + ) + (segment + (start 77.7663 148.9253) + (end 77.7663 148.1495) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "12cd29a0-c40e-4354-88db-f679a88c1a9d") + ) + (segment + (start 77.7663 149.7012) + (end 77.7663 148.9253) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "48c0e52f-8d5b-4b7e-92a7-0ca79b751cfb") + ) + (segment + (start 77.7663 148.9253) + (end 76.7422 148.9253) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "4e6834b2-2e60-4f16-ad1a-f7e767b5ef08") + ) + (segment + (start 79.5163 148.9253) + (end 79.5163 149.701) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "61079b86-085a-4bca-afea-529d0e34bf72") + ) + (segment + (start 78.7405 148.1495) + (end 79.5163 148.9253) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "6acfd25c-0c8d-4645-b887-2cd479618724") + ) + (segment + (start 79.5163 149.701) + (end 79.5163 149.7012) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "df7d470d-5fc9-4218-8fce-bab0fc78f785") + ) + (segment + (start 77.7663 148.1495) + (end 78.7405 148.1495) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "ebfa9883-707c-43fa-872e-7ae3ee02cec7") + ) + (segment + (start 76.7422 148.9253) + (end 75.9663 149.7012) + (width 0.2) + (layer "B.Cu") + (net 21) + (uuid "fd0429ae-764a-42c6-8e5f-e9682b4ea53a") + ) + (segment + (start 130.576 75.1284) + (end 130.576 71.6756) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "218a1947-2532-40a5-bd7d-8126e1f38fff") + ) + (segment + (start 71.701 109.134) + (end 71.701 89.901) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "2302f3dd-7ed3-4ca2-902a-e2cede7329ae") + ) + (segment + (start 80.0443 157.991) + (end 80.0443 117.478) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "24663e66-8bb2-4644-ba61-ea8376aa6f04") + ) + (segment + (start 80.0443 117.478) + (end 71.701 109.134) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "4743bc4d-2d29-4df9-8a49-953728f3386b") + ) + (segment + (start 127.478 81.6792) + (end 130.576 78.5813) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "6fbafc74-6d78-4ae9-a84c-0611f437cce9") + ) + (segment + (start 79.9229 81.6792) + (end 127.478 81.6792) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "7684f148-2b7c-40da-b24f-dce5d390324d") + ) + (segment + (start 130.576 78.5813) + (end 130.576 75.1284) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "7f61ac1e-b8a0-43de-a67f-f5f4cd2fa27e") + ) + (segment + (start 71.701 89.901) + (end 79.9229 81.6792) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "7f8312f9-77a3-49f1-85f3-e509ed26e83c") + ) + (segment + (start 69.2213 168.814) + (end 80.0443 157.991) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "af934c0c-0fbd-4adb-b34d-086df47fdf75") + ) + (segment + (start 130.576 75.1284) + (end 130.576 71.6756) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "fad0b60e-daff-4e37-8595-fa4a7081d1a3") + ) + (segment + (start 130.5763 71.6756) + (end 130.576 71.6756) + (width 0.2) + (layer "F.Cu") + (net 22) + (uuid "ff7e866c-d31c-4660-8ac0-342f8c88be0c") + ) + (via + (at 69.2213 168.814) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 22) + (uuid "dacfb76f-81de-42f3-95e7-ecfe60ee9dad") + ) + (segment + (start 69.2213 168.8139) + (end 69.2213 168.814) + (width 0.2) + (layer "B.Cu") + (net 22) + (uuid "ae21bbd6-e010-49ea-922d-d45f4b112f8f") + ) + (segment + (start 69.2212 168.8139) + (end 69.2213 168.814) + (width 0.2) + (layer "In1.Cu") + (net 22) + (uuid "053fb11f-89a3-4aa5-8cd7-19cd690fc2f0") + ) + (segment + (start 66.4413 168.8139) + (end 69.2212 168.8139) + (width 0.2) + (layer "In1.Cu") + (net 22) + (uuid "51d5a803-87c2-4aa7-8562-7871312aa94a") + ) + (segment + (start 138.911 75.1285) + (end 138.911 71.6756) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "1fb17f39-e06d-472c-aa38-d9e5eab447b0") + ) + (segment + (start 87.8291 91.7935) + (end 97.2873 82.3352) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "346cc476-f8ff-45a1-9d44-559783c3e6d1") + ) + (segment + (start 138.911 75.1285) + (end 138.911 71.6756) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "34e23a00-e2af-43d9-9c07-60c9854ccfa8") + ) + (segment + (start 135.157 82.3352) + (end 138.911 78.5814) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "3fb9237d-06e1-4ea4-b094-bcb211ac9ca4") + ) + (segment + (start 138.911 78.5814) + (end 138.911 75.1285) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "4c3b707b-7752-48c3-a471-902866a4df84") + ) + (segment + (start 96.185 111.601) + (end 87.8291 103.245) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "9b54cee5-fd67-4cc1-836d-27bbcb60a6ec") + ) + (segment + (start 138.9106 71.6756) + (end 138.911 71.6756) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "c6d9ec04-4a36-49d9-99fd-b07fc0439f7b") + ) + (segment + (start 87.8291 103.245) + (end 87.8291 91.7935) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "c78c04c2-7833-4edb-9130-d6482b635eff") + ) + (segment + (start 97.2873 82.3352) + (end 135.157 82.3352) + (width 0.2) + (layer "F.Cu") + (net 23) + (uuid "c90da361-4794-4bed-a798-7c001c2467e4") + ) + (via + (at 96.185 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 23) + (uuid "a42a6604-ce42-4281-965b-35bf0f779bdb") + ) + (segment + (start 92.635 111.6012) + (end 92.635 110.8253) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "07e99f94-0b08-4c8e-abf8-c3d9a941154e") + ) + (segment + (start 95.4093 110.8253) + (end 96.185 111.601) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "1745f876-e723-4226-8856-6eef65c2ddb4") + ) + (segment + (start 94.435 111.6012) + (end 94.435 110.8253) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "1837c4d0-51b2-42ca-985b-7793b6cd5b91") + ) + (segment + (start 92.635 110.8253) + (end 93.4108 110.0495) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "6525d406-6df4-4761-a6f4-60b3dc6c5e7d") + ) + (segment + (start 94.435 110.8253) + (end 95.4093 110.8253) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "6e94f6e2-3280-41fc-9519-d8cfa11aa3bb") + ) + (segment + (start 94.435 110.8253) + (end 94.435 110.0495) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "72794077-c726-4c29-823d-43def82f8c98") + ) + (segment + (start 96.185 111.601) + (end 96.185 111.6012) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "bf7e12cf-7a7e-4a03-92a3-f82d9fe098b4") + ) + (segment + (start 93.4108 110.0495) + (end 94.435 110.0495) + (width 0.2) + (layer "B.Cu") + (net 23) + (uuid "d47e00eb-2e91-4434-992f-cddbf6c632dc") + ) + (segment + (start 154.3888 73.4017) + (end 154.3888 71.6756) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "0f17a55f-657a-4817-8c60-9b642f4c8582") + ) + (segment + (start 154.389 73.4019) + (end 154.3888 73.4017) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "2726e88b-c1b9-469e-abbe-3a05d9f6a43f") + ) + (segment + (start 107.359 84.9983) + (end 108.358 83.9998) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "27755711-e2b5-4200-a1a9-77eaa749c0c5") + ) + (segment + (start 148.97 83.9998) + (end 154.389 78.5813) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "352f5fdd-07e6-489c-852f-bb564959ad42") + ) + (segment + (start 115.235 111.601) + (end 115.235 110.27) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "4ebfb63e-9cc5-48fc-bce4-d7c8d41a4888") + ) + (segment + (start 107.359 102.394) + (end 107.359 84.9983) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "4fa7411f-bda9-4160-8d5f-ff81c79c379d") + ) + (segment + (start 154.389 78.5813) + (end 154.389 75.1284) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "684fe9dc-0c17-4dbb-aae9-61c31488a10a") + ) + (segment + (start 154.389 75.1284) + (end 154.389 73.4019) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "b5f5b94b-08ff-460e-91db-becb18c163d4") + ) + (segment + (start 108.358 83.9998) + (end 148.97 83.9998) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "d08e9cba-9422-4b12-8053-f9475a5010e2") + ) + (segment + (start 154.389 75.1284) + (end 154.389 73.4019) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "e5d2d4fa-1bdc-4d72-8b11-053cc3c65cfa") + ) + (segment + (start 115.235 110.27) + (end 107.359 102.394) + (width 0.2) + (layer "F.Cu") + (net 24) + (uuid "feaebb2c-0f28-4b88-a40b-af2256b63cea") + ) + (via + (at 115.235 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 24) + (uuid "6419e6c5-050f-498e-a24f-b7e90c641684") + ) + (segment + (start 115.235 111.601) + (end 115.235 111.6012) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "46352844-ff56-41dc-8b3f-7a17b90114a6") + ) + (segment + (start 115.235 110.8253) + (end 115.235 111.601) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "4e138103-d04f-4b95-a6ef-740bed58bb5b") + ) + (segment + (start 113.485 110.0495) + (end 114.4592 110.0495) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "641981a7-cf6c-4060-af06-00db91498a2d") + ) + (segment + (start 114.4592 110.0495) + (end 115.235 110.8253) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "6563d9f7-6211-4b71-a7c3-7aee5fc383e6") + ) + (segment + (start 113.485 110.8253) + (end 113.485 110.0495) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "6ce9b06e-2bf9-41c0-bdcf-fcf1d23608d2") + ) + (segment + (start 112.4609 110.8253) + (end 111.685 111.6012) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "7ee492e2-2fb6-41e5-b127-ab60432bc4b3") + ) + (segment + (start 113.485 111.6012) + (end 113.485 110.8253) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "c855d872-6c43-4959-a2c2-92aca62a4dc4") + ) + (segment + (start 113.485 110.8253) + (end 112.4609 110.8253) + (width 0.2) + (layer "B.Cu") + (net 24) + (uuid "d82a3230-2673-400d-922f-ccf232b70068") + ) + (segment + (start 237.733 78.5813) + (end 237.732 78.5811) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "3090b019-00dc-4c5f-9e69-d61bd6773451") + ) + (segment + (start 231.452 84.8624) + (end 237.733 78.5813) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "3650e34c-a050-4c12-83b9-e41b80447b64") + ) + (segment + (start 224.903 84.8624) + (end 231.452 84.8624) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "4c862104-3063-4f9a-b9bb-41801c057d3a") + ) + (segment + (start 220.486 92.8519) + (end 220.486 89.3138) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "5698136c-916d-4be2-b548-2dc21b108acd") + ) + (segment + (start 220.486 89.3138) + (end 220.469 89.2969) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "598bf1ac-fb70-4057-8f28-e2d249fad77d") + ) + (segment + (start 229.51 111.601) + (end 220.469 102.56) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "886a7dc3-18d5-4661-948a-167e312228b6") + ) + (segment + (start 220.469 102.56) + (end 220.469 92.8688) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "91345e6c-b15f-4213-8353-b2d0b0e67c4e") + ) + (segment + (start 237.7325 71.6756) + (end 237.732 71.6756) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "a7548eb0-337c-4937-a3f6-8330815f5fac") + ) + (segment + (start 220.469 92.8688) + (end 220.486 92.8519) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "b72ffb18-bebb-4e72-b6ec-e5b0a225496f") + ) + (segment + (start 220.469 89.2969) + (end 224.903 84.8624) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "ba500b7f-cd80-444f-9eab-ec5c55f3657d") + ) + (segment + (start 237.732 78.5811) + (end 237.732 71.6756) + (width 0.2) + (layer "F.Cu") + (net 25) + (uuid "ff310613-e6ef-4f3c-abaa-4f4b47748460") + ) + (via + (at 229.51 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 25) + (uuid "8d6a9724-d43f-4c55-bc4e-55b68590ace9") + ) + (segment + (start 228.7342 110.0495) + (end 229.51 110.8253) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "269dcb54-5d86-4a0c-bbbd-0058abe1c31c") + ) + (segment + (start 227.76 110.0495) + (end 228.7342 110.0495) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "29267219-112f-4d50-8133-b213d19fea25") + ) + (segment + (start 225.96 110.8253) + (end 226.7358 110.0495) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "46bb0c8b-baff-4639-8250-93862db82d70") + ) + (segment + (start 227.76 111.6012) + (end 227.76 110.0495) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "518ef1bf-a358-4c41-ae75-6e49cac9e9ef") + ) + (segment + (start 229.51 111.601) + (end 229.51 111.6012) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "5f2c442b-4018-4b16-acd4-d0cce9664266") + ) + (segment + (start 229.51 110.8253) + (end 229.51 111.601) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "b8902f9b-802b-4976-8847-77fb42edb2ee") + ) + (segment + (start 225.96 111.6012) + (end 225.96 110.8253) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "d63babb9-50e0-490e-86b8-de37307921ff") + ) + (segment + (start 226.7358 110.0495) + (end 227.76 110.0495) + (width 0.2) + (layer "B.Cu") + (net 25) + (uuid "d9a5dccf-aa4c-4178-98d8-51f63b01db86") + ) + (segment + (start 240.824 91.1981) + (end 240.824 103.841) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "155ff7b6-f373-408e-adeb-d83744367d27") + ) + (segment + (start 250.8294 71.6756) + (end 250.829 71.6756) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "4a2e4640-eb19-4ab5-9ca8-e1fdbd56cd58") + ) + (segment + (start 250.829 80.9624) + (end 250.83 80.9625) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "544ed323-9088-4feb-96c3-93c7d4752d4b") + ) + (segment + (start 250.829 71.6756) + (end 250.829 75.4358) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "63e6f826-1913-4193-b480-ea3080606e02") + ) + (segment + (start 250.83 80.9625) + (end 250.83 81.193) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "6452625a-b2c2-4fb6-bce8-3b4c616a0274") + ) + (segment + (start 250.829 75.4358) + (end 250.829 80.9624) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "7f1f2eea-0eb1-4588-9f8a-98760ac3e2c8") + ) + (segment + (start 250.83 81.193) + (end 240.824 91.1981) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "a05e5ece-dbbd-4601-90c0-1ab434401955") + ) + (segment + (start 250.829 71.6756) + (end 250.829 75.4358) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "bbeff431-1e4a-4038-81d7-8567a1a96be4") + ) + (segment + (start 240.824 103.841) + (end 248.585 111.601) + (width 0.2) + (layer "F.Cu") + (net 26) + (uuid "d3d97bc1-8e4b-4ed0-8781-77d6438fe2d1") + ) + (via + (at 248.585 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 26) + (uuid "2917070d-d237-47fd-bf09-8eeca71b1d96") + ) + (segment + (start 245.035 110.8253) + (end 245.8108 110.0495) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "126724c0-417a-49ca-93ab-cb52c6e38799") + ) + (segment + (start 246.835 110.0495) + (end 247.8092 110.0495) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "1eff15f7-6631-4766-901a-3acecfd53b91") + ) + (segment + (start 248.585 110.8253) + (end 248.585 111.601) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "458dfeb1-5d33-457e-8b3d-6b2c87812f12") + ) + (segment + (start 245.8108 110.0495) + (end 246.835 110.0495) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "4822107b-dec1-4362-ae1f-a8e097b6a39a") + ) + (segment + (start 247.8092 110.0495) + (end 248.585 110.8253) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "9779e2d7-ec5f-49a6-b4e8-b949b9ab6513") + ) + (segment + (start 245.035 111.6012) + (end 245.035 110.8253) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "9df8b955-0b3c-451c-a167-ca9f91ece03d") + ) + (segment + (start 248.585 111.601) + (end 248.585 111.6012) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "c46ee0ae-868c-42fc-bf27-336fa2cb2abf") + ) + (segment + (start 246.835 111.6012) + (end 246.835 110.0495) + (width 0.2) + (layer "B.Cu") + (net 26) + (uuid "e2da328f-de8f-43b9-a85c-7ae5f4af31fa") + ) + (segment + (start 258.684 92.3887) + (end 264.254 86.8183) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "0493ce46-e424-4cdc-89b3-d461e149df70") + ) + (segment + (start 267.635 110.865) + (end 258.684 101.914) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "1b16f6af-1207-4bc7-8fff-de58084db687") + ) + (segment + (start 267.635 111.601) + (end 267.635 110.865) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "620c862d-0069-48ba-90c9-45ac6eea6406") + ) + (segment + (start 264.254 86.8183) + (end 264.254 83.0159) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "7337d1d3-9ad0-4400-a5ad-d48cf609ee32") + ) + (segment + (start 266.308 73.3163) + (end 266.308 74.957) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "8366a12c-9455-4ffc-a749-3571d94c0052") + ) + (segment + (start 264.254 83.0159) + (end 266.308 80.9625) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "a17943aa-ed9b-4b97-9329-e6d83cf751ab") + ) + (segment + (start 266.308 74.957) + (end 266.308 73.3163) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "a950cf3a-76d2-4188-af17-951a4ba2f8f3") + ) + (segment + (start 258.684 101.914) + (end 258.684 92.3887) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "cbd4c786-4b15-4da6-8f79-512cfb1ed89e") + ) + (segment + (start 266.3075 73.3158) + (end 266.3075 71.6756) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "d93e4079-9b58-4789-acf6-78dce2a952ea") + ) + (segment + (start 266.308 73.3163) + (end 266.3075 73.3158) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "e1a9ac18-f053-49ce-b22a-0aa876b9aa1b") + ) + (segment + (start 266.308 80.9625) + (end 266.308 74.957) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "f92a6647-e4f7-44b3-b21a-e8de10918865") + ) + (via + (at 267.635 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 27) + (uuid "724aaa06-7bfc-48f6-90b8-8e443751605f") + ) + (segment + (start 264.085 110.8253) + (end 264.8608 110.0495) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "39e98e04-8565-4b12-935d-b589f3cee10e") + ) + (segment + (start 265.885 111.6012) + (end 265.885 110.8253) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "47434610-222e-4d0f-954f-bf987da5b1b6") + ) + (segment + (start 265.885 110.8253) + (end 265.885 110.0495) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "a089b988-b7b0-4b23-8b64-2f2f857a003f") + ) + (segment + (start 264.085 111.6012) + (end 264.085 110.8253) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "a0bbeae1-5c0f-4734-86cd-e810b4f06804") + ) + (segment + (start 265.885 110.8253) + (end 266.8591 110.8253) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "b367093e-46a3-44c8-b055-60129631500b") + ) + (segment + (start 264.8608 110.0495) + (end 265.885 110.0495) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "d343fa30-8abd-4810-8078-40bc6281d32d") + ) + (segment + (start 267.635 111.601) + (end 267.635 111.6012) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "d4e60346-8613-434f-8ee3-9188158e3526") + ) + (segment + (start 266.8591 110.8253) + (end 267.635 111.6012) + (width 0.2) + (layer "B.Cu") + (net 27) + (uuid "e6145ba9-9a2f-4262-8d94-84cc78ff1462") + ) + (segment + (start 277.636 101.782) + (end 277.636 83.3269) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "102108d7-b2e0-4a86-a1c3-0c34bd8e72e1") + ) + (segment + (start 277.619 102.535) + (end 277.619 101.798) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "1d287509-aff9-4ea0-baf7-079c248be9c4") + ) + (segment + (start 281.786 79.1768) + (end 281.786 71.6756) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "1da06f71-b203-4ba3-aeec-ccbc664d886c") + ) + (segment + (start 281.7856 71.6756) + (end 281.786 71.6756) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "2e836c1a-d7ef-4b3d-8ce4-faf5339d4075") + ) + (segment + (start 277.619 101.798) + (end 277.636 101.782) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "6d877f0c-e4e8-4e5a-9eaa-178a4acc399f") + ) + (segment + (start 286.685 111.601) + (end 277.619 102.535) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "72df4461-f6e9-4e26-9f7f-59ff070d5922") + ) + (segment + (start 281.786 75.4262) + (end 281.786 71.6756) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "d9ba0b5a-b3c2-4f4c-b1a1-cc54abdf798a") + ) + (segment + (start 277.636 83.3269) + (end 281.786 79.1768) + (width 0.2) + (layer "F.Cu") + (net 28) + (uuid "ee61d45b-e879-4e6a-b8ed-1edd5522cf20") + ) + (via + (at 286.685 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 28) + (uuid "7d7316fc-6b70-499b-9be4-80440dcd2b42") + ) + (segment + (start 284.935 110.8253) + (end 284.935 110.0495) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "082fadd7-c164-4a78-ba3f-96f6ec86fd77") + ) + (segment + (start 285.9091 110.8253) + (end 286.685 111.6012) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "194bb8d3-e2d7-4f53-a7c5-0cf11269c679") + ) + (segment + (start 283.135 111.6012) + (end 283.135 110.8253) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "21d7ec10-f569-4437-bb2f-98dc223e78c2") + ) + (segment + (start 284.935 110.8253) + (end 285.9091 110.8253) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "5d37cdad-e85d-4d06-9568-04ba02572de4") + ) + (segment + (start 283.135 110.8253) + (end 283.9108 110.0495) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "9733445d-09c5-4043-abaf-775264aec6e2") + ) + (segment + (start 283.9108 110.0495) + (end 284.935 110.0495) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "b907b327-c97a-4ab6-bb0e-0453b5760c2e") + ) + (segment + (start 284.935 111.6012) + (end 284.935 110.8253) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "b98c75ed-2188-4341-9af0-75eb0d22e3e7") + ) + (segment + (start 286.685 111.6012) + (end 286.685 111.601) + (width 0.2) + (layer "B.Cu") + (net 28) + (uuid "c4d5cefd-3b61-4a75-9a88-c9ab32bb3d49") + ) + (segment + (start 305.735 111.601) + (end 297.264 103.13) + (width 0.2) + (layer "F.Cu") + (net 29) + (uuid "203150e0-227c-488f-b8c0-8ce21130b3ab") + ) + (segment + (start 297.2638 77.3681) + (end 297.2638 71.6756) + (width 0.2) + (layer "F.Cu") + (net 29) + (uuid "45c9504c-1dec-451e-a22b-0d706bc30cb0") + ) + (segment + (start 297.264 77.3683) + (end 297.2638 77.3681) + (width 0.2) + (layer "F.Cu") + (net 29) + (uuid "69cd66d6-f8bd-4e3d-9a64-80f11901edb2") + ) + (segment + (start 297.264 103.13) + (end 297.264 77.3683) + (width 0.2) + (layer "F.Cu") + (net 29) + (uuid "7d723e9a-3d46-4015-973e-8d45fb7233c9") + ) + (segment + (start 297.264 77.3683) + (end 297.264 71.6756) + (width 0.2) + (layer "F.Cu") + (net 29) + (uuid "941a3632-fc57-4d98-b89d-884685e772b1") + ) + (via + (at 305.735 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 29) + (uuid "0ae3cc3f-12a6-439c-b2ff-2bf5dd65004e") + ) + (segment + (start 302.185 110.8253) + (end 302.9608 110.0495) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "084b4bf3-e514-4b27-aef3-2f58985a8b22") + ) + (segment + (start 304.9592 110.0495) + (end 305.735 110.8253) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "44e2a883-ad27-464a-a832-7b71ad17f2ba") + ) + (segment + (start 303.985 110.0495) + (end 304.9592 110.0495) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "5e76be1f-bdc2-4d00-9ff7-6fb400828584") + ) + (segment + (start 302.185 111.6012) + (end 302.185 110.8253) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "5f6e6a21-fe53-434e-bbeb-37f8a98668e5") + ) + (segment + (start 305.735 111.601) + (end 305.735 111.6012) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "6807bcba-a337-4e76-9c71-2a941bc399c1") + ) + (segment + (start 302.9608 110.0495) + (end 303.985 110.0495) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "6fb7a08d-0fa2-46ed-b8c0-215cb9930603") + ) + (segment + (start 303.985 111.6012) + (end 303.985 110.0495) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "adb30434-107e-490d-a8f1-b4b235cf3780") + ) + (segment + (start 305.735 110.8253) + (end 305.735 111.601) + (width 0.2) + (layer "B.Cu") + (net 29) + (uuid "d5b647a3-1e5d-4ca6-b328-9ed42b1ca5f1") + ) + (segment + (start 169.8669 71.6756) + (end 169.867 71.6756) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "1d5a5166-3564-4f99-835e-444e444c7934") + ) + (segment + (start 162.808 85.6398) + (end 169.867 78.5813) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "5573db2a-5c1b-4479-acf6-4013dc962c7c") + ) + (segment + (start 130.117 85.6398) + (end 162.808 85.6398) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "692ef68f-6ed1-4f59-9005-3cef5ef01291") + ) + (segment + (start 134.285 111.601) + (end 134.285 111.46) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "750a98c2-c9d9-49cc-8904-de4f8ec8c909") + ) + (segment + (start 169.867 75.1284) + (end 169.867 71.6756) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "83c537fe-16e6-43c3-b1f6-af237e7f3268") + ) + (segment + (start 169.867 75.1284) + (end 169.867 71.6756) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "9127c874-b3fe-48ef-8d54-372e8e65de8f") + ) + (segment + (start 169.867 78.5813) + (end 169.867 75.1284) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "9b4626ac-eff7-4fe4-9bf5-0f1eff772d18") + ) + (segment + (start 134.285 111.46) + (end 125.236 102.411) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "c1a3cb74-0514-4c15-971e-1d5c374e77d2") + ) + (segment + (start 125.236 90.5212) + (end 130.117 85.6398) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "cca4d710-10de-49d8-ac26-61c2ff8dc359") + ) + (segment + (start 125.236 102.411) + (end 125.236 90.5212) + (width 0.2) + (layer "F.Cu") + (net 30) + (uuid "ee94956f-dad3-41ef-a3e3-9b1b3b96c77b") + ) + (via + (at 134.285 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 30) + (uuid "941b3a87-038d-47d4-8edd-c615cb52cd29") + ) + (segment + (start 130.735 110.8253) + (end 131.5108 110.0495) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "036bbabc-5f3e-49da-a465-774930564b46") + ) + (segment + (start 132.535 110.0495) + (end 133.5092 110.0495) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "5bd53882-be0d-4bfe-971c-b4736c0c28d5") + ) + (segment + (start 134.285 110.8253) + (end 134.285 111.601) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "71009ddb-2359-41de-91d4-904c69876e44") + ) + (segment + (start 130.735 111.6012) + (end 130.735 110.8253) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "7367f8bb-fbd8-4007-b71a-243de180ab58") + ) + (segment + (start 133.5092 110.0495) + (end 134.285 110.8253) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "a555467e-2cb5-4deb-94f7-3c93ee9194d0") + ) + (segment + (start 134.285 111.601) + (end 134.285 111.6012) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "a6da027d-65c7-4bb2-9722-4738c988153e") + ) + (segment + (start 132.535 111.6012) + (end 132.535 110.0495) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "a778c48e-89d0-479d-9b01-b84ab90541a2") + ) + (segment + (start 131.5108 110.0495) + (end 132.535 110.0495) + (width 0.2) + (layer "B.Cu") + (net 30) + (uuid "ccf8f3e7-5e3d-42a2-a453-7a0b0f6942eb") + ) + (segment + (start 144.864 92.8688) + (end 144.269 92.2735) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "1b057499-0919-4672-ba58-aea6d03c0af0") + ) + (segment + (start 144.269 90.0888) + (end 147.343 87.0139) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "1f53f17c-da60-4b9d-9198-c9682293af22") + ) + (segment + (start 153.31 111.601) + (end 153.31 111.435) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "2500cc15-ae44-4f79-8952-db7cfc250d8c") + ) + (segment + (start 174.531 87.0139) + (end 182.964 78.5813) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "506838b6-df4f-4927-97a1-4211621f2b4d") + ) + (segment + (start 182.964 78.5813) + (end 182.95 78.5674) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "741473df-f44f-472d-9829-29fc8299eaeb") + ) + (segment + (start 144.269 92.2735) + (end 144.269 90.0888) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "8ced1356-5231-4137-8923-d658176bfcfc") + ) + (segment + (start 144.864 102.989) + (end 144.864 92.8688) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "ab850a6a-65fb-4b64-8730-767a65b959a3") + ) + (segment + (start 182.95 78.5674) + (end 182.95 71.67) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "c0520d6c-404b-4b5c-ac11-73ac757be948") + ) + (segment + (start 153.31 111.435) + (end 144.864 102.989) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "c771e84b-c5e4-43ce-89e1-922b5334c289") + ) + (segment + (start 147.343 87.0139) + (end 174.531 87.0139) + (width 0.2) + (layer "F.Cu") + (net 31) + (uuid "deea8e5a-d1fa-4cd0-a07f-394633cd26c5") + ) + (via + (at 153.31 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 31) + (uuid "58b12b31-01ab-457a-8432-f86a25d40ee2") + ) + (segment + (start 150.5358 110.0495) + (end 151.56 110.0495) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "0e0eca8d-ef32-4835-b248-7284615f34f8") + ) + (segment + (start 152.5343 110.0495) + (end 151.56 110.0495) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "11068b69-264c-4071-9712-ed4d345d882e") + ) + (segment + (start 151.56 111.6012) + (end 151.56 110.0495) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "342fe905-59f7-46a6-a02e-36980b6eb5e4") + ) + (segment + (start 153.31 111.6012) + (end 153.31 111.601) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "625aaef5-acb0-4b67-9d69-177422f78c93") + ) + (segment + (start 149.76 111.6012) + (end 149.76 110.8253) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "7902122f-f8fa-4bf5-8054-cb5321be0872") + ) + (segment + (start 153.31 110.8252) + (end 152.5343 110.0495) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "811301e1-49d2-4803-8890-d470e0846777") + ) + (segment + (start 151.56 111.6012) + (end 151.56 110.0495) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "c40034a9-6526-4f6c-bec7-99f181b9dc73") + ) + (segment + (start 149.76 110.8253) + (end 150.5358 110.0495) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "cf116825-10f1-4812-a551-0024d7eefd08") + ) + (segment + (start 153.31 111.601) + (end 153.31 110.8252) + (width 0.2) + (layer "B.Cu") + (net 31) + (uuid "f4fd1ae5-104d-46c8-9189-4a547435e102") + ) + (segment + (start 163.319 92.3155) + (end 163.319 90.2477) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "1c2244ae-bee7-4d68-bd3a-11b902ca2b9a") + ) + (segment + (start 163.336 92.7699) + (end 163.336 92.3325) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "85750279-16e6-4e88-9c8d-593da5ebd9df") + ) + (segment + (start 163.319 90.2477) + (end 165.24 88.3259) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "9cf976ba-9304-43d6-b9c6-211af79e9840") + ) + (segment + (start 163.319 102.989) + (end 163.319 92.7869) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "9edf870c-f788-43af-a571-7bce24d24d2d") + ) + (segment + (start 172.31 111.601) + (end 171.931 111.601) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "af53fffc-b915-4137-89d0-ba29509d05ea") + ) + (segment + (start 196.0606 71.6756) + (end 196.061 71.6756) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "afbc4316-8793-48c3-82e5-d0f54e95f97d") + ) + (segment + (start 165.24 88.3259) + (end 186.316 88.3259) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "b2a6a6da-0960-4374-b303-117152054c0b") + ) + (segment + (start 163.336 92.3325) + (end 163.319 92.3155) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "b7ccd06c-f88a-443f-ae6c-8a2dfab18e43") + ) + (segment + (start 163.319 92.7869) + (end 163.336 92.7699) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "bd236894-ee02-47b4-9837-9e508f2f0496") + ) + (segment + (start 196.061 78.5813) + (end 196.061 71.6756) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "bea173e3-c920-4c05-a3a8-0919b007d534") + ) + (segment + (start 186.316 88.3259) + (end 196.061 78.5813) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "eca94e64-2e3c-49d9-847b-66656c8a0c4c") + ) + (segment + (start 171.931 111.601) + (end 163.319 102.989) + (width 0.2) + (layer "F.Cu") + (net 32) + (uuid "f87b8040-b87f-4387-95a4-caaee7b9e96f") + ) + (via + (at 172.31 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 32) + (uuid "73f9179d-a2f9-4013-b677-5cabc555cb43") + ) + (segment + (start 171.5342 110.0495) + (end 172.31 110.8253) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "084001f8-574c-46a3-9bce-4ed0f3a16fbc") + ) + (segment + (start 172.31 110.8253) + (end 172.31 111.601) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "26c90e81-e37e-47fb-8bf8-1c7ce63c4fba") + ) + (segment + (start 168.76 111.6012) + (end 168.76 110.8253) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "67a16859-bb1e-4b8e-8ac1-b2f47504320c") + ) + (segment + (start 168.76 110.8253) + (end 169.5358 110.0495) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "a427ce05-67a7-4dc3-9e3a-5ebfe367b5ab") + ) + (segment + (start 170.56 110.0495) + (end 171.5342 110.0495) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "daa95253-cadf-4693-b4ad-1ff4a328cfa0") + ) + (segment + (start 170.56 111.6012) + (end 170.56 110.0495) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "dc1c75e4-745a-49e9-afcb-7a54d34c63f3") + ) + (segment + (start 169.5358 110.0495) + (end 170.56 110.0495) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "dc7306f2-12f2-4ae6-abf3-1f69acf5dbcc") + ) + (segment + (start 172.31 111.601) + (end 172.31 111.6012) + (width 0.2) + (layer "B.Cu") + (net 32) + (uuid "e3ecf356-2d07-4df0-8841-7efa8a3c9968") + ) + (segment + (start 204.719 83.2831) + (end 206.837 83.2831) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "46206fdc-940c-402c-801a-ff10bd8efb0c") + ) + (segment + (start 211.539 78.5813) + (end 211.539 75.1284) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "5116f1c9-522c-42af-90e8-387a5a5c275c") + ) + (segment + (start 182.964 103.13) + (end 182.964 91.9087) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "590854bb-b12b-4e34-bc43-d4b555685f47") + ) + (segment + (start 191.435 111.601) + (end 182.964 103.13) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "6466e58b-24f3-4d55-b410-eaed0b4e5aed") + ) + (segment + (start 182.964 91.9087) + (end 184.907 89.9659) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "6592fb60-bf1d-4cd5-b964-25d8b7f23c96") + ) + (segment + (start 198.058 89.9442) + (end 204.719 83.2831) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "93f7dd2d-7c3f-4139-8ef3-bd5b5d8046f6") + ) + (segment + (start 196.256 89.9659) + (end 196.278 89.9442) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "962f9f61-b380-4ecc-b6e9-06b38ece6b41") + ) + (segment + (start 196.278 89.9442) + (end 198.058 89.9442) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "bdb2c86e-2407-437b-867d-dd81babb2f60") + ) + (segment + (start 184.907 89.9659) + (end 196.256 89.9659) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "bf43de30-d5e1-4b27-b8b3-4db946dae6a7") + ) + (segment + (start 211.539 75.1284) + (end 211.5388 75.1282) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "e34ea220-873c-449e-a331-2bfcf370d9bf") + ) + (segment + (start 206.837 83.2831) + (end 211.539 78.5813) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "e5e54e26-a679-41f6-8920-69b693e134b4") + ) + (segment + (start 211.539 75.1284) + (end 211.539 71.6756) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "ef07cc71-99f3-4905-ad35-e9922b598241") + ) + (segment + (start 211.5388 75.1282) + (end 211.5388 71.6756) + (width 0.2) + (layer "F.Cu") + (net 33) + (uuid "fab0a8b8-b7f8-4cb0-821e-0e948e2e2d31") + ) + (via + (at 191.435 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 33) + (uuid "bf0f0e8b-cf83-4c32-9145-286a953285de") + ) + (segment + (start 189.685 111.6012) + (end 189.685 110.0495) + (width 0.2) + (layer "B.Cu") + (net 33) + (uuid "439ffd00-7fd3-4c32-a18e-57fffcedb787") + ) + (segment + (start 189.685 110.0495) + (end 190.6592 110.0495) + (width 0.2) + (layer "B.Cu") + (net 33) + (uuid "50a2deea-833b-414a-973d-85fdd2745c09") + ) + (segment + (start 191.435 110.8253) + (end 191.435 111.601) + (width 0.2) + (layer "B.Cu") + (net 33) + (uuid "531ce804-0902-4112-a4d5-5873e1b85949") + ) + (segment + (start 191.435 111.601) + (end 191.435 111.6012) + (width 0.2) + (layer "B.Cu") + (net 33) + (uuid "9317d7d0-a62a-4fd4-b2b9-4d1d89a3d03b") + ) + (segment + (start 190.6592 110.0495) + (end 191.435 110.8253) + (width 0.2) + (layer "B.Cu") + (net 33) + (uuid "d8927bfa-78a2-44d2-8d73-922ccf468f94") + ) + (segment + (start 187.885 111.6012) + (end 191.4348 111.6012) + (width 0.2) + (layer "In1.Cu") + (net 33) + (uuid "0c08bc7c-44b5-4bf0-8565-572a1cbc2711") + ) + (segment + (start 191.4348 111.6012) + (end 191.435 111.601) + (width 0.2) + (layer "In1.Cu") + (net 33) + (uuid "d7dc6da4-d3c0-4ba0-a5e9-f2c394255321") + ) + (segment + (start 201.436 102.552) + (end 201.436 91.464712) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "1bd5049f-5117-466f-b4a2-b8a9e8417627") + ) + (segment + (start 224.6356 75.128) + (end 224.6356 71.6756) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "23321ef5-d3ed-484b-b8d6-e29e04a71d42") + ) + (segment + (start 201.436 91.328844) + (end 201.436 91.3288) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "282de6bd-98cf-4ac8-b328-8c445b6622c6") + ) + (segment + (start 207.371851 85.664295) + (end 207.371856 85.6643) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "4076c6c0-e435-4202-a06f-8b550a8b48c5") + ) + (segment + (start 201.436 91.3288) + (end 207.1 85.6643) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "4978ad9c-c48e-464b-9384-dfeb0a37cd36") + ) + (segment + (start 224.636 75.1284) + (end 224.6356 75.128) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "51dc9e1e-0494-405d-9a87-590eaa1317aa") + ) + (segment + (start 217.553 85.6643) + (end 224.636 78.5813) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "5d00d378-e7e3-497a-9c5e-74427b06ec09") + ) + (segment + (start 201.436 91.464712) + (end 201.435995 91.328849) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "679dd75d-cb7a-49fb-9b50-8ecb8ad7f7d9") + ) + (segment + (start 207.371856 85.6643) + (end 217.553 85.6643) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "76508e5c-81ff-4d7f-a54f-9b2455ffbaf8") + ) + (segment + (start 207.235988 85.6643) + (end 207.371851 85.664295) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "96248b72-7e53-44d6-90fc-009b692b46b3") + ) + (segment + (start 210.485 111.601) + (end 201.436 102.552) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "a10eb5b6-f677-41d4-ad6b-1844e5aabece") + ) + (segment + (start 224.636 75.1284) + (end 224.636 71.6756) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "b2a2dcf2-022e-4bdc-81eb-64c36a9c7564") + ) + (segment + (start 207.1 85.6643) + (end 207.235988 85.6643) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "b89d05d8-74eb-4a87-858a-644693a20ed4") + ) + (segment + (start 201.435995 91.328849) + (end 201.436 91.328844) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "da30dfda-00d1-4bc6-91f3-75e9aab31659") + ) + (segment + (start 224.636 78.5813) + (end 224.636 75.1284) + (width 0.2) + (layer "F.Cu") + (net 34) + (uuid "f215ef8f-742a-49e1-8fe9-b77dd0c4e990") + ) + (via + (at 210.485 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 34) + (uuid "d55ed9da-fd26-4086-9c1a-4be0d9b620b5") + ) + (segment + (start 208.735 110.0495) + (end 209.7092 110.0495) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "18229dc2-3507-4096-8561-476c603ef82e") + ) + (segment + (start 210.485 111.601) + (end 210.485 111.6012) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "398b50e7-5541-4de6-a5f9-8314c76d9c09") + ) + (segment + (start 209.7092 110.0495) + (end 210.485 110.8253) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "3e01b51d-2f62-462c-9ae1-7469c3dda22c") + ) + (segment + (start 206.935 110.8253) + (end 207.7108 110.0495) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "8276fb05-65bb-44e4-b5e7-c9a9954fc9ec") + ) + (segment + (start 206.935 111.6012) + (end 206.935 110.8253) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "8388d3db-2b8c-4f61-a0b6-dc956141994c") + ) + (segment + (start 208.735 111.6012) + (end 208.735 110.0495) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "8c9d354b-f1a4-410f-98a3-6dd7d3c020e8") + ) + (segment + (start 208.735 111.6012) + (end 208.735 110.0495) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "a7fa0286-c712-46b2-847e-ee403f9eba43") + ) + (segment + (start 210.485 110.8253) + (end 210.485 111.601) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "ae4f216b-2dd0-4b97-93ad-0754db11b68d") + ) + (segment + (start 207.7108 110.0495) + (end 208.735 110.0495) + (width 0.2) + (layer "B.Cu") + (net 34) + (uuid "f223f7be-cd5b-47a9-b7dd-3235eb5f8a36") + ) + (segment + (start 310.361 78.581) + (end 316.314 84.5344) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "1263826f-36e0-4ab2-b635-1b47a06623e0") + ) + (segment + (start 310.361 75.1283) + (end 310.361 78.581) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "2440ae18-17c1-44d8-915c-3a644f6de437") + ) + (segment + (start 316.314 84.5344) + (end 317.515 84.5344) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "31a59f20-b040-4579-adc5-a4223860fe49") + ) + (segment + (start 310.3606 75.1279) + (end 310.3606 71.6756) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "42a7916b-2df2-4bc9-896d-e7323be77246") + ) + (segment + (start 325.313 107.087) + (end 325.244 107.156) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "6599ce77-5ecb-4c30-9aaa-9ef1913b1f00") + ) + (segment + (start 329.548 111.46) + (end 329.548 111.601) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "ae578a80-5c41-47ff-b0bd-467b3657642c") + ) + (segment + (start 310.361 75.1283) + (end 310.3606 75.1279) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "be99a294-6fd2-4c9c-a600-52dc848240bc") + ) + (segment + (start 317.515 84.5344) + (end 325.313 92.3325) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "cb576d1a-be6b-40ac-b7c6-0b9299658a4a") + ) + (segment + (start 310.361 71.6756) + (end 310.361 75.1283) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "d04b33ef-667f-4ee3-96ca-86053643abce") + ) + (segment + (start 325.244 107.156) + (end 329.548 111.46) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "ef887f65-563f-4474-b479-bff348a04adf") + ) + (segment + (start 325.313 92.3325) + (end 325.313 107.087) + (width 0.2) + (layer "F.Cu") + (net 35) + (uuid "fdef9a9e-b64f-4d53-881a-2ddb6fc3cbfc") + ) + (via + (at 329.548 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 35) + (uuid "a9edbbc1-fbe9-4cd3-b66c-10f8bcffcbc8") + ) + (segment + (start 326.7733 110.0495) + (end 327.7975 110.0495) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "0d56c04e-468b-44a7-b6a2-2815c67685c8") + ) + (segment + (start 325.9975 110.8253) + (end 326.7733 110.0495) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "0fe8ca60-8429-4f90-bc17-1bb9c0cee919") + ) + (segment + (start 328.7717 110.0495) + (end 329.5475 110.8253) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "4dbc94e7-61c4-4969-99a1-0084a7f63a12") + ) + (segment + (start 329.5475 110.8253) + (end 329.5475 111.601) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "568db365-4d75-4848-bcb8-5696e3f0f131") + ) + (segment + (start 327.7975 111.6012) + (end 327.7975 110.0495) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "5e30ab91-5de2-4432-8716-1ae381bd2642") + ) + (segment + (start 329.5475 111.601) + (end 329.5475 111.6012) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "6ea2eadc-1ed5-448c-8f9b-a552ed7c54a4") + ) + (segment + (start 327.7975 110.0495) + (end 328.7717 110.0495) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "b89398e8-d64f-4015-be0d-b615326bc0c7") + ) + (segment + (start 325.9975 111.6012) + (end 325.9975 110.8253) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "ca1333b8-5304-478e-ac21-f84c6bc9f046") + ) + (segment + (start 327.7975 111.6012) + (end 327.7975 110.0495) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "ef8126d5-025f-49d5-bf82-0a70688c76ee") + ) + (segment + (start 329.5475 111.601) + (end 329.548 111.601) + (width 0.2) + (layer "B.Cu") + (net 35) + (uuid "f747a85d-4aca-48a6-82e0-bf86381cc63e") + ) + (segment + (start 73.1575 90.7046) + (end 72.9377 90.4848) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "00ae4b51-8239-4b85-8c29-55797b8b81b0") + ) + (segment + (start 82.735 114.141) + (end 82.735 128.429) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "02651cf5-4721-4b5f-9763-d9ffdd40ddee") + ) + (segment + (start 73.1575 95.0912) + (end 73.1575 90.7046) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "033edb71-41ee-4e20-86ac-3c1d4b241712") + ) + (segment + (start 84.345 65.1156) + (end 81.9331 65.1156) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "2ef36103-29d9-46b9-b7aa-79c41dd90761") + ) + (segment + (start 87.4975 142.716) + (end 97.0225 152.241) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "3cc2ffcb-ad0c-4b1d-be67-2ce7c8011f6c") + ) + (segment + (start 81.9331 65.1156) + (end 81.8926 65.0751) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "61bc08c6-6cf8-4bd4-b0cd-c516070a948e") + ) + (segment + (start 95.4529 155.972) + (end 85.9278 155.972) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "689c2068-0c69-49a7-ad6f-0da0e514542a") + ) + (segment + (start 82.735 128.429) + (end 87.4975 133.191) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "79625169-3660-4c17-9123-40c46ff3ea08") + ) + (segment + (start 97.0225 154.402) + (end 95.4529 155.972) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "8c137bdb-ca48-4952-8d85-5ac6c562225b") + ) + (segment + (start 85.9278 155.972) + (end 81.1288 160.771) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "999e6dbb-919e-4867-a7af-49e1f03f87d7") + ) + (segment + (start 87.4975 133.191) + (end 87.4975 142.716) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "9c05c312-2cf9-4ecb-bfbb-1ddc5ed55c9d") + ) + (segment + (start 81.1288 160.771) + (end 81.1288 171.291) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "b6cc7d14-b614-4d06-be9c-293a219307e9") + ) + (segment + (start 97.0225 152.241) + (end 97.0225 154.402) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "c02a33e5-85f3-47c0-9c9f-2cb47350ccd1") + ) + (segment + (start 73.1575 104.564) + (end 82.735 114.141) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "dd98860c-f0a1-4d90-be02-08bddc084174") + ) + (segment + (start 73.1575 95.0912) + (end 73.1575 104.564) + (width 0.2) + (layer "F.Cu") + (net 36) + (uuid "e46eb95c-cbf2-4433-93b4-7abc21fda04d") + ) + (via + (at 73.1575 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "155d47af-d580-4d23-947a-226fe17c4736") + ) + (via + (at 81.8926 65.0751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "19d222fd-856b-4896-b6f4-22305e27fd92") + ) + (via + (at 97.0225 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "1f8b598e-d51c-4375-b962-49a6dfac3723") + ) + (via + (at 87.4975 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "31b8ff37-b126-46ea-b804-647498eee1fe") + ) + (via + (at 81.1288 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "76b1412a-1df6-4f0e-8936-3d95aaaa188d") + ) + (via + (at 82.735 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "a92ac6f2-e21d-4bf6-9f75-7241e2319b7f") + ) + (via + (at 72.9377 90.4848) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 36) + (uuid "e44b5ea3-f5d9-4d40-aa4b-eb9f87c0788d") + ) + (segment + (start 91.0475 133.1912) + (end 89.2225 133.1912) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "017ca0cb-eeef-4cad-9acd-284800880c68") + ) + (segment + (start 97.0227 152.2412) + (end 97.0225 152.241) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "0abb772e-1c2d-4c6e-ad26-ea621a4ff6a4") + ) + (segment + (start 97.885 152.2412) + (end 97.0225 152.2412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "1070a983-9c8e-4727-9461-c42611af00e8") + ) + (segment + (start 74.8825 95.0912) + (end 73.1575 95.0912) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "14182cac-4699-437e-8266-15fd22b3bfa3") + ) + (segment + (start 97.885 152.2412) + (end 97.0227 152.2412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "5900300e-cd06-4956-b70b-d38c393efa72") + ) + (segment + (start 98.7475 152.2412) + (end 97.885 152.2412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "5e26c2b7-3978-48a8-a50d-45fec7eaf527") + ) + (segment + (start 81.1288 171.2912) + (end 81.1288 171.291) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "6ec1db2a-1956-46c4-adce-2dcfa3373da6") + ) + (segment + (start 84.46 114.1412) + (end 86.285 114.1412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "6f6f1ff8-913d-4b0e-b57b-0668f2ca4244") + ) + (segment + (start 84.46 114.1412) + (end 82.735 114.1412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "9b0ce994-e8aa-4ef5-bb4b-4466479b0d81") + ) + (segment + (start 100.5725 152.2412) + (end 98.7475 152.2412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "bbab2d01-53f0-4316-8787-2b5083a4a483") + ) + (segment + (start 76.7075 95.0912) + (end 74.8825 95.0912) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "c022e6c8-af6c-4ed6-acf4-49c5c67cd064") + ) + (segment + (start 89.2225 133.1912) + (end 87.4975 133.1912) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "c052ada7-0331-4e7f-a512-1e43377d8f33") + ) + (segment + (start 82.735 114.141) + (end 82.735 114.1412) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "d9131da1-bd40-46c6-9c57-dab26c912128") + ) + (segment + (start 87.4975 133.191) + (end 87.4975 133.1912) + (width 0.2) + (layer "B.Cu") + (net 36) + (uuid "f51ab278-ef08-44a3-b520-f08ee0a037d3") + ) + (segment + (start 81.129 171.2912) + (end 81.1288 171.291) + (width 0.2) + (layer "In1.Cu") + (net 36) + (uuid "364a1df1-750b-4789-b3b8-c405c4c66100") + ) + (segment + (start 83.9038 171.2912) + (end 81.129 171.2912) + (width 0.2) + (layer "In1.Cu") + (net 36) + (uuid "9f431a79-4d6d-474c-974b-34adf4fe2103") + ) + (segment + (start 81.8926 65.0751) + (end 76.7075 70.2602) + (width 0.2) + (layer "In2.Cu") + (net 36) + (uuid "1afd403e-39d2-4b65-b8ef-2b68d7b66569") + ) + (segment + (start 76.7075 70.2602) + (end 76.7075 95.0912) + (width 0.2) + (layer "In2.Cu") + (net 36) + (uuid "bb5bdbdc-8fd1-48b5-9691-23874bb052da") + ) + (segment + (start 102.062 114.418) + (end 102.062 128.706) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "174dddd7-49cd-46af-8b4b-885f064d72ea") + ) + (segment + (start 102.062 128.706) + (end 106.548 133.191) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "49e27710-601d-44af-9d93-16f8061ef6b2") + ) + (segment + (start 92.2075 95.0912) + (end 92.2075 104.564) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "65e6413a-9dea-49b5-9ee6-5b297afc6ef4") + ) + (segment + (start 82.7458 65.6156) + (end 82.6415 65.7199) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "6ba13e42-bb71-4eb1-ba7c-8adbd4af033d") + ) + (segment + (start 106.548 142.716) + (end 116.072 152.241) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "8e46541c-864c-4f58-af38-02b6e195b3cf") + ) + (segment + (start 106.548 133.191) + (end 106.548 142.716) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "8fd6a01c-6a2d-4020-a529-8a293e5a5a6c") + ) + (segment + (start 116.072 152.241) + (end 116.072 160.16) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "ab23ba6b-fdbf-4fdb-8cd0-4eb9a2f4762f") + ) + (segment + (start 92.2075 104.564) + (end 101.785 114.141) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "d7f4f731-9139-43ab-8c83-5268eecf03f9") + ) + (segment + (start 116.072 160.16) + (end 104.941 171.291) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "dc6dbe47-5dd5-47bc-84d7-59e976f601a2") + ) + (segment + (start 101.785 114.141) + (end 102.062 114.418) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "dfe5cb52-89eb-4df4-a996-a9fd964199a3") + ) + (segment + (start 84.345 65.6156) + (end 82.7458 65.6156) + (width 0.2) + (layer "F.Cu") + (net 37) + (uuid "fc43baff-3ba4-4d19-be9e-57a74ccd1904") + ) + (via + (at 116.072 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "0b63df38-0146-49f5-8df9-ddd5e51db156") + ) + (via + (at 91.9655 65.8265) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "1af27adc-04f7-4af0-a39c-31197f2a505f") + ) + (via + (at 104.941 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "79a594b8-f0f4-4fae-91a8-50acea9ca6b9") + ) + (via + (at 92.2075 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "954ba5d7-2569-4d8f-a332-6a9f25381859") + ) + (via + (at 101.785 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "99e4eece-4aa6-49d3-b77a-7d4a9704be9b") + ) + (via + (at 106.548 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "d485ebc4-313b-445a-ab29-c82a73fdc19f") + ) + (via + (at 82.6415 65.7199) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 37) + (uuid "efcc015a-e496-440b-8c04-758f825a22a2") + ) + (segment + (start 106.5478 133.1912) + (end 106.548 133.191) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "0150b97b-2d1d-4f12-bde4-8cb44bba1b79") + ) + (segment + (start 106.5475 133.1912) + (end 106.5478 133.1912) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "1673e403-5d4a-488b-aa35-cd581efc46c3") + ) + (segment + (start 104.941 171.2911) + (end 104.941 171.291) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "26f577c5-1a90-4f73-abc1-e43591d4b1d1") + ) + (segment + (start 109.3216 132.4153) + (end 110.0975 133.1912) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "2da280b5-408f-483c-b0f4-b4b01451a8f8") + ) + (segment + (start 119.6225 152.2412) + (end 117.7975 152.2412) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "3ee0c532-73a6-4f36-912f-75e7254488c0") + ) + (segment + (start 116.0722 152.2412) + (end 116.072 152.241) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "43aef7d5-3f52-486f-ad2f-d379305a4fef") + ) + (segment + (start 116.0725 152.2412) + (end 116.0722 152.2412) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "46e1ee7a-fcb6-41ee-9236-65a0c77bebd0") + ) + (segment + (start 108.2725 132.4153) + (end 108.2725 131.6395) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "4c50cc22-0ee6-4a78-b76b-23a8ebcaf613") + ) + (segment + (start 108.2725 132.4153) + (end 109.3216 132.4153) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "6410c497-a6ef-49b1-9532-b097780f962e") + ) + (segment + (start 101.785 114.1412) + (end 101.785 114.141) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "79a80ee8-14a4-41bf-a1f5-60baa613acd2") + ) + (segment + (start 104.9413 171.2914) + (end 104.941 171.2911) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "8a94cbb9-be29-4ccc-adbb-40b6b699fe7f") + ) + (segment + (start 95.7575 95.0912) + (end 93.9325 95.0912) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "a76c4fdc-dcf8-4ff1-9a2d-a59e566ca86b") + ) + (segment + (start 117.7975 152.2412) + (end 116.0725 152.2412) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "a8892a69-b8d9-4a43-9902-9afeb3465204") + ) + (segment + (start 107.227 131.6395) + (end 106.548 132.3185) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "ac213302-4939-4f5e-be6d-6bdfeacbffa5") + ) + (segment + (start 108.2725 133.1912) + (end 108.2725 132.4153) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "b27979b1-76c7-42e8-93ac-31dc732565ab") + ) + (segment + (start 103.51 114.1412) + (end 101.785 114.1412) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "d3592f5e-ec60-4b00-b840-6c7d03e3f9c8") + ) + (segment + (start 93.9325 95.0912) + (end 92.2075 95.0912) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "ea781ae4-e44b-4053-b4fa-cfcea0001c3a") + ) + (segment + (start 106.548 132.3185) + (end 106.548 133.191) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "edd54904-649a-4301-82d0-cce4b3684b8f") + ) + (segment + (start 108.2725 131.6395) + (end 107.227 131.6395) + (width 0.2) + (layer "B.Cu") + (net 37) + (uuid "f50fa091-059d-4428-bf98-354b2a988593") + ) + (segment + (start 105.3348 114.141) + (end 101.785 114.141) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "0d7a1ec7-a4c4-4c66-80d8-c93882c6c988") + ) + (segment + (start 107.7163 171.2914) + (end 104.9414 171.2914) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "146a01a1-f15b-4c02-80a6-bbcd3fb7fc6f") + ) + (segment + (start 91.7351 65.5961) + (end 91.9655 65.8265) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "2053b9f9-62a1-4057-9e67-24c416ebe2e8") + ) + (segment + (start 82.7653 65.5961) + (end 91.7351 65.5961) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "22006b1b-cb30-4c34-b713-b08722e4dd48") + ) + (segment + (start 82.6415 65.7199) + (end 82.7653 65.5961) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "28d78aa9-cf41-414c-8a62-57c460783c5b") + ) + (segment + (start 104.9414 171.2914) + (end 104.941 171.291) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "61f8325f-2a1c-41d5-bc76-46aa014255ce") + ) + (segment + (start 105.335 114.1412) + (end 105.3348 114.141) + (width 0.2) + (layer "In1.Cu") + (net 37) + (uuid "b50dba36-28e8-4c5d-b008-e7bbe442f657") + ) + (segment + (start 91.9656 66.4996) + (end 91.9656 65.8266) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "3cdff0c2-2ae1-4325-a0ae-237157445594") + ) + (segment + (start 92.2075 95.0912) + (end 93.3192 93.9795) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "628b02b6-5194-4078-a25d-e1b612081de8") + ) + (segment + (start 93.0398 67.5738) + (end 91.9656 66.4996) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "72401531-dd27-4fdf-bc2c-66ca6c91ace1") + ) + (segment + (start 93.3192 70.5442) + (end 93.0398 70.2648) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "d395b510-8138-42a5-9b6a-8ce7da1b7ff8") + ) + (segment + (start 93.0398 70.2648) + (end 93.0398 67.5738) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "e44bc8e9-3257-4d66-ac53-c07f81654cf1") + ) + (segment + (start 93.3192 93.9795) + (end 93.3192 70.5442) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "ef95b514-a772-40ef-8152-6a1d7965e043") + ) + (segment + (start 91.9656 65.8266) + (end 91.9655 65.8265) + (width 0.2) + (layer "In2.Cu") + (net 37) + (uuid "fad4dc51-b9c4-4cc5-b98c-2dbde630558c") + ) + (segment + (start 124.385 114.141) + (end 122.757 114.141) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "08385239-c497-4485-bdfc-0cccede1facf") + ) + (segment + (start 87.2299 66.6589) + (end 86.6866 66.1156) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "323ca158-d6d9-4c5d-a780-3d931cb11c4d") + ) + (segment + (start 124.3848 114.141) + (end 124.385 114.1412) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "447c009b-4f07-4fca-99d5-0c84178cdc46") + ) + (segment + (start 111.258 104.249) + (end 120.835 113.827) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "4e04de64-7306-48c0-9e36-3783097f1368") + ) + (segment + (start 86.6866 66.1156) + (end 84.345 66.1156) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "517e7f9e-ccd8-43d1-8d01-0ffc5e00822a") + ) + (segment + (start 125.598 131.941) + (end 125.598 133.191) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "5557df40-d719-42a2-8159-f78957406b1b") + ) + (segment + (start 122.757 114.141) + (end 121.129 114.141) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "703e281c-82aa-4ea8-a887-152472f564a9") + ) + (segment + (start 125.598 142.716) + (end 135.122 152.241) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "73b0be94-79e4-4c20-87b4-737fa647a21d") + ) + (segment + (start 120.835 113.827) + (end 120.835 114.141) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "7a1cc0b6-9e02-413a-b14b-6e7fc138fa02") + ) + (segment + (start 125.598 133.191) + (end 125.598 142.716) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "7d7e0448-9963-4f87-84cf-406903116cc1") + ) + (segment + (start 120.982 114.288) + (end 120.982 127.325) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "9986c728-9241-49df-8ba4-a28311ad4b1e") + ) + (segment + (start 120.982 127.325) + (end 125.598 131.941) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "99e2eee7-066a-453e-9552-2e87f965e4a9") + ) + (segment + (start 120.835 114.141) + (end 120.982 114.288) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "9c37dde4-16a0-4d46-9490-4829b5198f9c") + ) + (segment + (start 122.757 114.141) + (end 124.3848 114.141) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "c4721099-8264-498f-9612-4646146b8313") + ) + (segment + (start 121.129 114.141) + (end 120.982 114.288) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "cdc9db61-ff56-4e06-bb2f-a1db9373b9ea") + ) + (segment + (start 111.258 95.0912) + (end 111.258 104.249) + (width 0.2) + (layer "F.Cu") + (net 38) + (uuid "f444eaee-5b99-46dc-998c-3d5f928be56e") + ) + (via + (at 111.258 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 38) + (uuid "213fdefb-dcc5-47d4-9d45-450452b2bf67") + ) + (via + (at 87.2299 66.6589) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 38) + (uuid "25fa903b-d71c-4ca3-9a9b-418ef9bf3748") + ) + (via + (at 135.122 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 38) + (uuid "472300a9-0d97-466e-b3fb-265d4e837003") + ) + (via + (at 90.1103 93.6417) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 38) + (uuid "66affec3-ed03-4ba6-bfe7-df18fe32a3d5") + ) + (via + (at 125.598 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 38) + (uuid "e41dfb03-534b-4ed0-8aea-9ea47dda8f2c") + ) + (via + (at 120.835 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 38) + (uuid "fdaa2852-5f43-442e-84d1-e15c43006b1e") + ) + (segment + (start 120.835 114.141) + (end 120.835 114.1412) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "170af821-b76c-4876-8d86-595d4f8bf6f3") + ) + (segment + (start 126.277 131.6395) + (end 125.598 132.3185) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "218903a6-5ef2-41f4-ab08-1ac43e815116") + ) + (segment + (start 98.6131 93.0797) + (end 90.6723 93.0797) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "24ffe8a1-e51b-43ab-b874-5d8dafe5daa3") + ) + (segment + (start 111.2575 95.0912) + (end 110.7355 94.5692) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "2a2ee57d-379e-487c-97a3-9a22c41b021a") + ) + (segment + (start 136.8475 152.2412) + (end 135.1225 152.2412) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "38bc6215-126b-41f1-8820-d21fd9eb4ed7") + ) + (segment + (start 110.7355 94.5692) + (end 100.1026 94.5692) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "5c5f89a0-a471-4896-9ec6-a7d4852d19e5") + ) + (segment + (start 122.56 114.1412) + (end 120.835 114.1412) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "74c5db29-20c0-463d-bc7a-9c5f5e0ac605") + ) + (segment + (start 112.9825 95.0912) + (end 111.258 95.0912) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "7cf3c88e-698e-457a-87a1-179a335cf2c4") + ) + (segment + (start 111.258 95.0912) + (end 111.2575 95.0912) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "82bcbc56-7019-4971-b26f-ab5e631f560d") + ) + (segment + (start 125.5978 133.1912) + (end 125.598 133.191) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "8afcf993-0c68-42d0-b3e2-d1a4c49a6a47") + ) + (segment + (start 90.6723 93.0797) + (end 90.1103 93.6417) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "96257815-ff5d-442a-8a4d-40f14130546f") + ) + (segment + (start 135.1222 152.2412) + (end 135.122 152.241) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "aabc44ab-0fee-4407-8148-76a8b0fe5d41") + ) + (segment + (start 100.1026 94.5692) + (end 98.6131 93.0797) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "b4e91003-1665-4121-8426-faaae6881b6d") + ) + (segment + (start 127.3225 133.1912) + (end 127.3225 131.6395) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "c80cbd38-25d8-4206-896b-e4f266a5547d") + ) + (segment + (start 129.1475 133.1912) + (end 127.3225 133.1912) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "c8314450-70f8-4495-b8b1-0732a1fe1996") + ) + (segment + (start 125.598 132.3185) + (end 125.598 133.191) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "cb3c8ffe-8c1b-44e6-85f5-7efdc2a505a3") + ) + (segment + (start 125.5975 133.1912) + (end 125.5978 133.1912) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "d4e9ee87-6482-4e85-bb25-e164b6a8530f") + ) + (segment + (start 135.1225 152.2412) + (end 135.1222 152.2412) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "f5185cc2-b193-4d71-ad3e-f2ab812d6f3b") + ) + (segment + (start 127.3225 131.6395) + (end 126.277 131.6395) + (width 0.2) + (layer "B.Cu") + (net 38) + (uuid "fd6d87d9-6f2e-43e5-86d6-64feaee74cf2") + ) + (segment + (start 114.8075 95.0912) + (end 111.258 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 38) + (uuid "ab37dbed-8bca-4a7b-8ec6-fb7ec7a88f72") + ) + (segment + (start 138.6725 152.2412) + (end 138.6723 152.241) + (width 0.2) + (layer "In1.Cu") + (net 38) + (uuid "bf1fe82a-d81d-4c8e-9c83-5537ee19027b") + ) + (segment + (start 138.6723 152.241) + (end 135.122 152.241) + (width 0.2) + (layer "In1.Cu") + (net 38) + (uuid "eb5d989d-9d76-4991-8719-2c5cffe143f9") + ) + (segment + (start 87.8823 67.3113) + (end 87.8823 73.2513) + (width 0.2) + (layer "In2.Cu") + (net 38) + (uuid "11e6a5c1-00d3-4a79-a3bb-505c54a6d2bf") + ) + (segment + (start 87.7297 91.2611) + (end 90.1103 93.6417) + (width 0.2) + (layer "In2.Cu") + (net 38) + (uuid "5e1d62d6-9102-4950-9ad4-226cfd4c328f") + ) + (segment + (start 87.8823 73.2513) + (end 87.7297 73.4039) + (width 0.2) + (layer "In2.Cu") + (net 38) + (uuid "79e8019c-99ff-4ab8-969a-ca68366c5bf9") + ) + (segment + (start 87.7297 73.4039) + (end 87.7297 91.2611) + (width 0.2) + (layer "In2.Cu") + (net 38) + (uuid "a87ce732-cdd1-4454-b545-654d728d9c27") + ) + (segment + (start 87.2299 66.6589) + (end 87.8823 67.3113) + (width 0.2) + (layer "In2.Cu") + (net 38) + (uuid "eac28eed-fbe7-454f-bf8d-ea22f7330e8a") + ) + (segment + (start 83.4464 66.6156) + (end 83.4464 66.6678) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "14395563-9285-4ae4-b2a5-714f6326e2eb") + ) + (segment + (start 139.86 114.141) + (end 139.86 128.404) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "1bd22e1d-e78d-4f54-824c-d6cbf8bdf524") + ) + (segment + (start 130.308 104.589) + (end 139.86 114.141) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "279d90bb-bf7f-460b-9d3c-222476e9e3ae") + ) + (segment + (start 144.648 142.716) + (end 154.172 152.241) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "2f8d942f-6059-4ada-b971-5b8ac096f874") + ) + (segment + (start 83.4464 66.6678) + (end 83.071 67.0432) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "3a59c35b-12ed-4e69-abcb-dc530dffe875") + ) + (segment + (start 119.99925 100.177) + (end 116.124 100.177) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "554fb04a-c640-4053-a469-1f31d68b4894") + ) + (segment + (start 144.648 133.191) + (end 144.648 142.716) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "61dce65b-e9a1-422d-858a-e20add67e6b8") + ) + (segment + (start 84.345 66.6156) + (end 83.4464 66.6156) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "97908d64-a38f-40d1-8ed8-11d99f461521") + ) + (segment + (start 120.75125 99.425) + (end 119.99925 100.177) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "9c83e0f6-d39a-4b94-be47-b0662b80985c") + ) + (segment + (start 130.308 95.0912) + (end 130.308 104.589) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "b8b11573-7b8b-41ef-b1be-27f8e84df4f0") + ) + (segment + (start 116.124 100.177) + (end 115.256 99.308) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "d115b645-abd8-43a5-a349-aa19bdee4178") + ) + (segment + (start 139.86 128.404) + (end 144.648 133.191) + (width 0.2) + (layer "F.Cu") + (net 39) + (uuid "e41064be-4cc8-4a5a-beb4-032448a9d41e") + ) + (via + (at 85.0352 87.7624) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "032d8af9-7d93-4617-af73-752a10b91b15") + ) + (via + (at 130.308 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "4b53285f-8e98-4633-8a1a-addfdf1490ab") + ) + (via + (at 139.86 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "583883fd-dab1-4508-8c19-898a2cb19cff") + ) + (via + (at 120.75125 99.425) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "6e004fe9-113a-4cc3-8a3b-7538a7fd9dfd") + ) + (via + (at 144.648 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "95507717-e05b-46eb-9923-c05eda6f3b05") + ) + (via + (at 83.071 67.0432) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "b9fa936b-1918-4649-b153-520b7d54968d") + ) + (via + (at 115.256 99.308) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "e96ab806-cf67-4c92-94f1-9c18a4b87cf5") + ) + (via + (at 154.172 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 39) + (uuid "eb81529a-0eb7-49cb-a8bc-a8b225a902a9") + ) + (segment + (start 154.1725 152.2412) + (end 154.1722 152.2412) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "13aacd17-1827-491c-9578-6614d05871a5") + ) + (segment + (start 130.3075 95.0912) + (end 130.308 95.0912) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "14941629-5171-4251-b33e-daac8a73313e") + ) + (segment + (start 144.6478 133.1912) + (end 144.648 133.191) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "23f8848e-8c8f-41f3-a3f9-6e2bc56f94f9") + ) + (segment + (start 155.8973 152.241) + (end 155.8975 152.2412) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "2a802b3f-111f-4881-8342-b2d3b8e7446f") + ) + (segment + (start 154.1722 152.2412) + (end 154.172 152.241) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "3d0ec495-10a0-421b-9dc3-d8488f831b35") + ) + (segment + (start 155.035 152.241) + (end 155.8973 152.241) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "433a351c-9c16-439f-bd07-22431f8ca67a") + ) + (segment + (start 141.585 114.1412) + (end 141.585 112.5895) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "4b042d48-fbcd-4066-81f2-3f97389e8974") + ) + (segment + (start 139.86 114.141) + (end 139.86 113.2683) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "50118075-11d5-4b25-aec0-0f3ae36ef4be") + ) + (segment + (start 139.86 114.1412) + (end 139.86 114.141) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "6f026b55-2b43-4c2e-a0f1-ad5e52fbd92c") + ) + (segment + (start 146.3725 131.6395) + (end 145.327 131.6395) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "802f6935-ba82-4e27-90cc-1ca62f7b7129") + ) + (segment + (start 146.3725 133.1912) + (end 146.3725 131.6395) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "9389a1b1-6deb-4c2b-9770-f23c34850afd") + ) + (segment + (start 140.5388 112.5895) + (end 141.585 112.5895) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "bbfcd7b7-9758-41db-aae3-1823faf4d00c") + ) + (segment + (start 155.898 152.241) + (end 155.035 152.241) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "bd35b727-3a7c-4b95-bb94-27f3b6a55c2f") + ) + (segment + (start 132.0325 95.0912) + (end 130.308 95.0912) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "c22ae64a-64d4-4b92-b0ef-b9b21ec52c90") + ) + (segment + (start 139.86 113.2683) + (end 140.5388 112.5895) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "d0112832-5d44-4089-9d55-816512cd2769") + ) + (segment + (start 148.1975 133.1912) + (end 146.3725 133.1912) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "dcbfd1b9-d834-48f6-9340-88518e89d8c9") + ) + (segment + (start 145.327 131.6395) + (end 144.648 132.3185) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "ecf22e2b-f9c8-4353-ab38-1a9baa2e497c") + ) + (segment + (start 143.41 114.1412) + (end 141.585 114.1412) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "ed35e11a-6292-454d-878e-477f2406a9e1") + ) + (segment + (start 155.035 152.241) + (end 154.172 152.241) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "ed6aca4b-79d3-4c89-bce6-ac24a7bea6a5") + ) + (segment + (start 144.6475 133.1912) + (end 144.6478 133.1912) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "f45b61f1-1166-4add-a270-fb138fc9e35f") + ) + (segment + (start 144.648 132.3185) + (end 144.648 133.191) + (width 0.2) + (layer "B.Cu") + (net 39) + (uuid "f86d0eaa-675c-40f4-8fd9-de707e710f27") + ) + (segment + (start 120.80125 99.375) + (end 126.0242 99.375) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "1860303e-e117-4c31-88e0-7e375d26bd69") + ) + (segment + (start 110.1082 99.308) + (end 105.8914 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "2fa9d6a5-b916-4fe2-a2f3-46a56935b76b") + ) + (segment + (start 157.7223 152.241) + (end 154.172 152.241) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "3dd54a58-a586-4bb3-bfb1-5e88a671a762") + ) + (segment + (start 93.8157 87.7624) + (end 85.0352 87.7624) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "41878060-b9f0-4bfa-afb1-ae8d213d59af") + ) + (segment + (start 133.8575 95.0912) + (end 130.308 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "48bbfe87-0a09-4680-a4d0-2a45f9868821") + ) + (segment + (start 105.8914 95.0912) + (end 101.1445 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "602c4e2e-5469-4331-bb90-d735c4d1de80") + ) + (segment + (start 115.256 99.308) + (end 110.1082 99.308) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "7c7364da-febb-49a8-b055-77e4dc8cd4f0") + ) + (segment + (start 126.0242 99.375) + (end 130.308 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "ba9c5bef-9677-4acb-bb54-69efca355a73") + ) + (segment + (start 101.1445 95.0912) + (end 93.8157 87.7624) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "e5c7e5ec-97c4-4e77-82c1-fef45b13ef6a") + ) + (segment + (start 157.7225 152.2412) + (end 157.7223 152.241) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "eba50231-6ac3-481f-8e3f-72fcb9fbabd6") + ) + (segment + (start 120.75125 99.425) + (end 120.80125 99.375) + (width 0.2) + (layer "In1.Cu") + (net 39) + (uuid "f74ea4fe-6375-418a-8025-6c7d4aa2b5fc") + ) + (segment + (start 85.0352 87.7624) + (end 85.0352 69.0074) + (width 0.2) + (layer "In2.Cu") + (net 39) + (uuid "3d100d97-dbdc-4ced-8d85-8daed4dcc7c0") + ) + (segment + (start 85.0352 69.0074) + (end 83.071 67.0432) + (width 0.2) + (layer "In2.Cu") + (net 39) + (uuid "6e0c915b-ff8f-4e70-aea0-467de899aa4d") + ) + (segment + (start 61.3038 144.923) + (end 66.0663 149.685) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "0cb9eee3-2313-4f5a-b10a-4106e333a932") + ) + (segment + (start 85.2436 63.5701) + (end 85.1262 63.4527) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "1bd79fde-f834-4484-bee5-50f162ae430e") + ) + (segment + (start 84.345 64.6156) + (end 85.2436 64.6156) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "72b181c4-4dbc-497c-8e09-84ef060389af") + ) + (segment + (start 66.0663 152.241) + (end 57.3163 160.991) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "941fa40c-9ab8-4769-bb63-614c53b53718") + ) + (segment + (start 58.8475 114.141) + (end 58.8475 130.735) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "9511f4c5-5c9b-42d1-b3c2-845f6feca85b") + ) + (segment + (start 85.2436 64.6156) + (end 85.2436 63.5701) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "99d8abd2-be87-495a-b346-bde217c12ae9") + ) + (segment + (start 61.3038 133.191) + (end 61.3038 144.923) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "c295cb87-bce9-452c-adbb-e6ebad030aa2") + ) + (segment + (start 57.3163 160.991) + (end 57.3163 171.354) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "c3c9d726-17a6-4fbf-9bb4-681de1dc332e") + ) + (segment + (start 54.085 109.379) + (end 58.8475 114.141) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "d049399e-4347-416d-901a-ee06c90fb5a8") + ) + (segment + (start 54.085 95.0912) + (end 54.085 109.379) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "dd3974bb-c8c8-4ee3-b43a-cb4c461a0e02") + ) + (segment + (start 66.0663 149.685) + (end 66.0663 152.241) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "e86962b7-cf93-4a97-931c-65b07fdb381b") + ) + (segment + (start 58.8475 130.735) + (end 61.3038 133.191) + (width 0.2) + (layer "F.Cu") + (net 40) + (uuid "ffc3f6f3-e49f-46d4-92b0-197fba742f29") + ) + (via + (at 85.1262 63.4527) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "0ffa386b-1e92-4f9d-ab73-2cb060ceca09") + ) + (via + (at 61.3038 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "163141c2-3a4d-4336-97ba-67a76cdc8022") + ) + (via + (at 54.085 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "22caddf8-7a67-4f1f-9e1d-72ae44f3ff2a") + ) + (via + (at 57.3163 171.354) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "4a9e4c80-c552-4502-b3b6-c28eac16c6fb") + ) + (via + (at 66.0663 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "52c5f95d-4440-4b07-99d0-ee8ed094191b") + ) + (via + (at 58.8475 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "539111a7-8c77-40e3-8b9c-ee551867a323") + ) + (via + (at 63.0288 131.4164) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "6efd76b5-f0b1-48b1-9d64-069990b95980") + ) + (via + (at 58.2881 64.1512) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 40) + (uuid "937798cb-a4ae-4ff5-bc86-ca05739a5ad0") + ) + (segment + (start 63.0288 133.1912) + (end 63.0288 131.4164) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "10530349-9ca7-4847-b3ed-8780b89e3b0d") + ) + (segment + (start 58.8475 114.1412) + (end 58.8475 114.141) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "34ab5b82-08b5-47a2-a4eb-fcbb552a1da5") + ) + (segment + (start 63.0288 133.1912) + (end 61.3038 133.1912) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "3a5e2a09-a654-48e1-922f-d52e85f02a9c") + ) + (segment + (start 57.3163 171.354) + (end 57.3163 171.3539) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "4adfda3e-7bdb-4650-b425-2a692bdc01f9") + ) + (segment + (start 55.81 95.0912) + (end 54.085 95.0912) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "51979b8f-3f41-4e87-9538-f7bfbcac3cdb") + ) + (segment + (start 67.7913 152.2412) + (end 66.0663 152.2412) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "7979c587-6289-4e5e-9768-1aa360ed5785") + ) + (segment + (start 61.3038 133.1912) + (end 61.3038 133.191) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "7eab2dc8-89a3-47b3-bd7f-5b31234e2354") + ) + (segment + (start 57.635 95.0912) + (end 55.81 95.0912) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "824a93d7-1312-46e3-aea1-b896ab1e4528") + ) + (segment + (start 62.3975 114.1412) + (end 60.5725 114.1412) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "9e8265f5-b7fb-4494-a702-33785fb05741") + ) + (segment + (start 60.5725 114.1412) + (end 58.8475 114.1412) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "ac5b261c-7246-4db4-8b0f-1d8cc36dcf03") + ) + (segment + (start 66.0663 152.241) + (end 66.0663 152.2412) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "c4224462-aa8f-481a-9bc5-0113edee9959") + ) + (segment + (start 69.6163 152.2412) + (end 67.7913 152.2412) + (width 0.2) + (layer "B.Cu") + (net 40) + (uuid "d635dfe7-4164-4e80-85fe-3f65113ede7a") + ) + (segment + (start 57.3164 171.3539) + (end 57.3163 171.354) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "4b5a0704-56f9-478e-8e56-f0b4419c3d27") + ) + (segment + (start 64.8538 133.1912) + (end 63.079 131.4164) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "65a2d397-9a04-4bf9-8260-7f046922313a") + ) + (segment + (start 63.079 131.4164) + (end 63.0288 131.4164) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "98eb4093-19a7-4d58-9aad-2b62aa364ad0") + ) + (segment + (start 82.6475 63.4527) + (end 81.1392 64.961) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "a0819884-20db-43e2-afd2-66e9abebd58a") + ) + (segment + (start 59.0979 64.961) + (end 58.2881 64.1512) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "a4d05583-10d3-48b0-81ec-1900c38e0411") + ) + (segment + (start 85.1262 63.4527) + (end 82.6475 63.4527) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "bd4a1b2e-7e61-4d77-b783-50c5baf1a6a8") + ) + (segment + (start 81.1392 64.961) + (end 59.0979 64.961) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "bd768974-68f1-47a9-a92a-f8b63b7780c8") + ) + (segment + (start 60.0913 171.3539) + (end 57.3164 171.3539) + (width 0.2) + (layer "In1.Cu") + (net 40) + (uuid "e47f48d5-99bf-4eac-8b2f-fc31a57a60c6") + ) + (segment + (start 58.2881 64.1512) + (end 58.2881 94.4381) + (width 0.2) + (layer "In2.Cu") + (net 40) + (uuid "559a1ec5-73b6-4788-b5a2-e08a725fde62") + ) + (segment + (start 58.2881 94.4381) + (end 57.635 95.0912) + (width 0.2) + (layer "In2.Cu") + (net 40) + (uuid "fc3a5b19-5109-4a50-adde-d7e50eb86466") + ) + (segment + (start 85.15125 102.375) + (end 85.15125 103.725) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "19e4188d-55e0-4aed-ac51-95f23c69737c") + ) + (segment + (start 59.75125 105.125) + (end 58.6788 104.05255) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "324626ab-d6ac-4fd7-a65c-ab9b9fed68e4") + ) + (segment + (start 83.2288 101.5387) + (end 84.31495 101.5387) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "592e0739-d644-46aa-b2ac-ff446e5fd2a8") + ) + (segment + (start 58.6788 104.05255) + (end 58.6788 102.9987) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "6dee84bf-6a88-476a-be7e-3e3ea5c370be") + ) + (segment + (start 84.31495 101.5387) + (end 85.15125 102.375) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "8c29d3b8-43a5-4aef-af41-a38840f7e0a3") + ) + (segment + (start 85.15125 103.725) + (end 83.75125 105.125) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "bbc52f13-a3c4-4b17-aa94-c7a20f41a8a1") + ) + (segment + (start 83.75125 105.125) + (end 59.75125 105.125) + (width 0.2) + (layer "B.Cu") + (net 41) + (uuid "dfce8234-f260-4fad-9ad0-bc5108f9a366") + ) + (segment + (start 91.845 62.1156) + (end 91.845 63.1871) + (width 0.2) + (layer "F.Cu") + (net 42) + (uuid "36d101ae-e71e-4bfb-8296-6d2a1f65cdd4") + ) + (segment + (start 91.845 63.1871) + (end 91.5019 63.5302) + (width 0.2) + (layer "F.Cu") + (net 42) + (uuid "715bead9-1119-4e5e-b69e-c2303f89273b") + ) + (via + (at 90.8094 99.684) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 42) + (uuid "92389848-0d1c-4b88-95cb-9510dd2f4ce6") + ) + (via + (at 91.5019 63.5302) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 42) + (uuid "96d7ed2c-db86-48af-993e-e8bb0b4ea0ce") + ) + (segment + (start 65.5525 100.075) + (end 90.4184 100.075) + (width 0.2) + (layer "B.Cu") + (net 42) + (uuid "14c5b931-5aad-4126-b901-41e3f228aedf") + ) + (segment + (start 64.1288 101.4987) + (end 65.5525 100.075) + (width 0.2) + (layer "B.Cu") + (net 42) + (uuid "8f39af0e-1190-4e2f-915a-31c87296e1a7") + ) + (segment + (start 90.4184 100.075) + (end 90.8094 99.684) + (width 0.2) + (layer "B.Cu") + (net 42) + (uuid "ebb61271-4c1f-4ba7-9a6b-9ad66692a09d") + ) + (segment + (start 91.7815 71.7593) + (end 91.7815 77.1949) + (width 0.2) + (layer "In2.Cu") + (net 42) + (uuid "10269004-788f-4f9e-aaa5-4212098adbf2") + ) + (segment + (start 91.7815 77.1949) + (end 90.8094 78.167) + (width 0.2) + (layer "In2.Cu") + (net 42) + (uuid "1acf6916-e96e-40fe-b5a4-819d2b95d0a8") + ) + (segment + (start 90.8094 78.167) + (end 90.8094 99.684) + (width 0.2) + (layer "In2.Cu") + (net 42) + (uuid "1c7651b8-1115-429c-a988-da08d1e185c8") + ) + (segment + (start 91.3123 63.7198) + (end 91.3123 71.2901) + (width 0.2) + (layer "In2.Cu") + (net 42) + (uuid "1d7c0f3b-72e5-4182-baa7-405a222c6126") + ) + (segment + (start 91.3123 71.2901) + (end 91.7815 71.7593) + (width 0.2) + (layer "In2.Cu") + (net 42) + (uuid "7563ad88-f54a-4bed-b83d-854ebb4ed1fb") + ) + (segment + (start 91.5019 63.5302) + (end 91.3123 63.7198) + (width 0.2) + (layer "In2.Cu") + (net 42) + (uuid "822499da-7cd4-4458-83d3-22a0dfd49ac7") + ) + (segment + (start 108.9072 72.903) + (end 100.1022 72.903) + (width 0.2) + (layer "F.Cu") + (net 43) + (uuid "12599aef-a2ba-44bc-a332-49e9b1e99f19") + ) + (segment + (start 96.8148 69.6156) + (end 95.845 69.6156) + (width 0.2) + (layer "F.Cu") + (net 43) + (uuid "17e7a8b4-d595-4ca4-9cb2-d2af3ef6d969") + ) + (segment + (start 114.4513 60.375) + (end 110.1753 60.375) + (width 0.2) + (layer "F.Cu") + (net 43) + (uuid "3f59fe92-c6da-4c6e-a0c3-a35218c77754") + ) + (segment + (start 110.1753 60.375) + (end 109.2233 59.423) + (width 0.2) + (layer "F.Cu") + (net 43) + (uuid "acabc05a-866b-4a3f-a5e9-2318d2196aa5") + ) + (segment + (start 100.1022 72.903) + (end 96.8148 69.6156) + (width 0.2) + (layer "F.Cu") + (net 43) + (uuid "f33d695b-0ca5-4169-8dc8-b3fec0301011") + ) + (via + (at 108.9072 72.903) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 43) + (uuid "6fcb87c9-8248-4704-84c1-7579c975058d") + ) + (segment + (start 108.9072 72.903) + (end 108.9072 59.7391) + (width 0.2) + (layer "In2.Cu") + (net 43) + (uuid "927e83cf-9ded-4882-bd78-0391ba02bd17") + ) + (segment + (start 108.9072 59.7391) + (end 109.2233 59.423) + (width 0.2) + (layer "In2.Cu") + (net 43) + (uuid "c683afdd-1d9d-4a86-8507-f6ee1ee51b97") + ) + (segment + (start 98.6551 60.171) + (end 97.9149 60.171) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "4748a81d-9316-40e2-ba73-1f7aaed58031") + ) + (segment + (start 100.9513 60.425) + (end 100.8897 60.4866) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "8b9c6ebf-6ae6-49e7-9424-25892e0228d3") + ) + (segment + (start 98.9707 60.4866) + (end 98.6551 60.171) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "8d135398-8965-4902-a7d1-c44eeec05b2c") + ) + (segment + (start 97.9149 60.171) + (end 94.5005 63.5854) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "91b58bfa-9682-4293-9b1e-7039ded514a3") + ) + (segment + (start 94.5005 68.6697) + (end 94.9464 69.1156) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "9f526b1f-ddf2-4f2a-b381-51e50ba24c8a") + ) + (segment + (start 94.5005 63.5854) + (end 94.5005 68.6697) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "a06d102b-4aaf-4b24-8a1a-8ce93b804251") + ) + (segment + (start 101.9533 59.423) + (end 100.9513 60.425) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "b8874308-2e3e-4129-abd5-4c281637565b") + ) + (segment + (start 105.4233 59.423) + (end 101.9533 59.423) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "c8811c20-0f70-44d5-ba4b-d2e9bf34bcf8") + ) + (segment + (start 95.845 69.1156) + (end 94.9464 69.1156) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "d33a5548-86d1-4345-ab04-2f897d82e51e") + ) + (segment + (start 100.8897 60.4866) + (end 98.9707 60.4866) + (width 0.2) + (layer "F.Cu") + (net 44) + (uuid "e71cb89a-c806-4b30-b0cb-7d8e6fd60d98") + ) + (segment + (start 89.8513 58.6) + (end 89.1563 58.6) + (width 0.2) + (layer "F.Cu") + (net 45) + (uuid "5e292906-0f1e-4108-b17d-7bd4f5b07445") + ) + (segment + (start 87.345 60.4113) + (end 87.345 62.1156) + (width 0.2) + (layer "F.Cu") + (net 45) + (uuid "872a4ed5-eb2d-4a1c-987f-0cc492dc9b7c") + ) + (segment + (start 89.1563 58.6) + (end 87.345 60.4113) + (width 0.2) + (layer "F.Cu") + (net 45) + (uuid "e39b75ac-de23-4347-a315-5afabd7de0b5") + ) + (segment + (start 105.622 67.4719) + (end 105.622 68.7954) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "0f20ebdb-54ce-42a5-a89d-27d243958ba5") + ) + (segment + (start 114.1794 67.4719) + (end 105.622 67.4719) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "10198bf1-b8cf-43ce-be3e-34f5b0fc2f5c") + ) + (segment + (start 97.4294 68.6156) + (end 95.845 68.6156) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "1a1d6878-e291-44dc-8c00-1971b31f2166") + ) + (segment + (start 105.622 68.7954) + (end 104.4626 69.9548) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "273825af-a154-45c9-a115-cda6e54286fe") + ) + (segment + (start 105.622 67.1667) + (end 105.622 67.4719) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "42b5712e-c026-4c60-882d-1e9af88c6473") + ) + (segment + (start 104.4626 69.9548) + (end 101.309 69.9548) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "5d747290-0437-439e-b274-59342bd77c6c") + ) + (segment + (start 100.0388 65.025) + (end 101.0443 66.0305) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "7301790e-30fc-4e41-b2e1-80c3c7c49c38") + ) + (segment + (start 105.4913 71.225) + (end 105.4913 70.9835) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "792c9c6b-2a6a-424f-afc9-1f8d53abebb2") + ) + (segment + (start 104.4858 66.0305) + (end 105.4913 65.025) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "981d6a4a-0c54-4a59-8108-50d743ab6061") + ) + (segment + (start 105.4913 70.9835) + (end 104.4626 69.9548) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "c947299d-dc94-4c4d-9a76-07d433a858e4") + ) + (segment + (start 104.4858 66.0305) + (end 105.622 67.1667) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "d02bd7e6-fc1d-4523-9a1a-250d1cde7bec") + ) + (segment + (start 100.0388 71.225) + (end 97.4294 68.6156) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "de1c3587-8bc1-47cc-adad-25ce33b21a0a") + ) + (segment + (start 101.309 69.9548) + (end 100.0388 71.225) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "df5195ff-8aed-4a81-8000-d091accbee99") + ) + (segment + (start 101.0443 66.0305) + (end 104.4858 66.0305) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "ec1ddd6a-8efb-4dc0-9605-e24449fb5682") + ) + (segment + (start 114.4763 67.175) + (end 114.1794 67.4719) + (width 0.2) + (layer "F.Cu") + (net 46) + (uuid "f7c0ef8e-f480-4103-8548-5d5fc71873d2") + ) + (segment + (start 73.9138 65.4844) + (end 74.9638 65.4844) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "24e9956a-5dc7-426f-914a-d4a3627c01df") + ) + (segment + (start 65.2606 64.9901) + (end 66.4205 66.15) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "3da78a83-808d-4a9c-b542-0cf6d3edafe7") + ) + (segment + (start 73.2482 66.15) + (end 73.9138 65.4844) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "8917a000-28c8-448a-91fe-c8cbb8b675c5") + ) + (segment + (start 65.2606 64.5904) + (end 65.2606 64.9901) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "8eef0630-b4fc-4601-b65d-1005c05d99d9") + ) + (segment + (start 66.4205 66.15) + (end 73.2482 66.15) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "8fce2ec9-bb5e-4006-a545-cec9e73a3451") + ) + (segment + (start 65.2606 64.5904) + (end 65.019 64.5904) + (width 0.2) + (layer "F.Cu") + (net 47) + (uuid "a364e8bd-0822-4870-8ecf-8ecdd0ff0838") + ) + (segment + (start 65.2606 62.875) + (end 65.2606 62.925) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "a71c117c-24f1-4294-891f-6908c401494e") + ) + (segment + (start 65.2606 62.925) + (end 65.2606 64.5904) + (width 0.8) + (layer "F.Cu") + (net 47) + (uuid "c7e7cc16-91dd-41c1-b2df-5ac92a42040e") + ) + (via + (at 65.2606 62.925) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 47) + (uuid "e8675121-39fe-4cac-9a68-481e4c7a9ac9") + ) + (segment + (start 64.2106 61.875) + (end 64.2106 57.6668) + (width 0.2) + (layer "B.Cu") + (net 47) + (uuid "082cfbe6-e498-4926-ada0-14f7ca73ce7e") + ) + (segment + (start 63.2106 55.9594) + (end 63.2106 57.4861) + (width 0.2) + (layer "B.Cu") + (net 47) + (uuid "227a2e7c-cdfc-49d4-bb88-fef302c52aa4") + ) + (segment + (start 64.2106 57.6668) + (end 64.2106 55.9594) + (width 0.2) + (layer "B.Cu") + (net 47) + (uuid "6a7b6e6c-493d-4a22-8a0c-fc3b5e8005f2") + ) + (segment + (start 64.0299 57.4861) + (end 64.2106 57.6668) + (width 0.2) + (layer "B.Cu") + (net 47) + (uuid "9daf5acf-6eec-4ab9-a69b-8111b4de138f") + ) + (segment + (start 65.2606 62.925) + (end 64.2106 61.875) + (width 0.2) + (layer "B.Cu") + (net 47) + (uuid "bd9a8aa0-558b-4765-8155-4f63006b67bb") + ) + (segment + (start 63.2106 57.4861) + (end 64.0299 57.4861) + (width 0.2) + (layer "B.Cu") + (net 47) + (uuid "d74ff566-ff45-4205-82ad-f5b04f1f7299") + ) + (segment + (start 65.9856 67.2) + (end 73.2482 67.2) + (width 0.8) + (layer "F.Cu") + (net 48) + (uuid "13cf622f-6000-4273-a5ae-60333a7f0382") + ) + (segment + (start 73.2482 67.2) + (end 73.9138 67.8656) + (width 0.8) + (layer "F.Cu") + (net 48) + (uuid "444627f6-a2ac-435f-807b-2859807085c6") + ) + (segment + (start 61.6606 62.875) + (end 63.2197 64.4341) + (width 0.8) + (layer "F.Cu") + (net 48) + (uuid "7b0a487b-3924-448f-9017-8e0ddd6ea86a") + ) + (segment + (start 63.2197 64.4341) + (end 65.9856 67.2) + (width 0.8) + (layer "F.Cu") + (net 48) + (uuid "88f40b61-17f4-4879-96a4-1f06c77477b4") + ) + (segment + (start 73.9138 67.8656) + (end 74.9638 67.8656) + (width 0.8) + (layer "F.Cu") + (net 48) + (uuid "ef86181a-2d8b-4160-92a3-d1e63ba3e6c4") + ) + (via + (at 61.6606 62.875) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 48) + (uuid "bf5fef09-a673-4322-89d1-8ee642f553f9") + ) + (segment + (start 63.7106 55.9594) + (end 63.7106 54.5335) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "2352f583-b888-4fa5-9495-09416471a712") + ) + (segment + (start 62.30125 62.925) + (end 63.3829 61.84335) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "613d1b66-b7c3-46fa-bd01-f0b7f07217c1") + ) + (segment + (start 63.3829 58.5727) + (end 62.7106 57.9004) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "753c2038-efe8-48cb-ab2b-18585b00ab67") + ) + (segment + (start 61.80125 62.925) + (end 62.30125 62.925) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "8dbd9fec-c5b8-47f9-998a-ce46c03f823a") + ) + (segment + (start 62.7106 55.9594) + (end 62.7106 54.4327) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "a714ac6d-0188-4a8f-8446-c6e50f826795") + ) + (segment + (start 62.7106 57.9004) + (end 62.7106 55.9594) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "ae1768b4-dcf7-475f-b122-71f04980d8a7") + ) + (segment + (start 63.3829 61.84335) + (end 63.3829 58.5727) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "b59415a4-92c9-4d56-bcdf-b2d6ae3cf505") + ) + (segment + (start 63.7106 54.4327) + (end 62.7106 54.4327) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "bebaf9ae-7885-4ca2-88e6-feceaf9ec8bb") + ) + (segment + (start 63.7106 54.5335) + (end 63.7106 54.4342) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "f6a55972-2b1e-4b2e-886c-9ce46c03afc8") + ) + (segment + (start 63.7106 54.4342) + (end 63.7106 54.4327) + (width 0.2) + (layer "B.Cu") + (net 48) + (uuid "fe9ff979-02d2-4066-971e-86c5031d5882") + ) + (segment + (start 248.448 63.1033) + (end 248.448 63.5792) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "01b70170-f531-4dd9-84da-84a3a90dbc36") + ) + (segment + (start 306.789 61.9129) + (end 306.789 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "073d2088-360c-4d0c-9f15-ffdcadf4f954") + ) + (segment + (start 307.98 63.1031) + (end 307.979 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "08852414-d3e9-4910-976f-0999c154c5d2") + ) + (segment + (start 221.064 61.9125) + (end 210.348 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "106059ac-0d57-4a6c-952c-efbef8bb0621") + ) + (segment + (start 87.845 63.5034) + (end 89.1602 64.8186) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "12b55643-a79f-4ef1-bbec-488ab6f13787") + ) + (segment + (start 248.448 63.8174) + (end 248.4481 63.8175) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "17a8e8b5-699f-4d46-ad9d-fcf777875ebb") + ) + (segment + (start 263.926 63.5793) + (end 263.9263 63.5796) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "1ba367a5-9794-4c69-8e26-24f267b31742") + ) + (segment + (start 168.676 61.9125) + (end 167.486 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "1e84eeb7-87bb-445f-89ad-bdb8821cd003") + ) + (segment + (start 153.198 61.9125) + (end 152.008 63.1032) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "215280bc-a688-4c0d-8e1d-2c16624df9d7") + ) + (segment + (start 321.076 63.5794) + (end 321.076 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "22c4ce7c-869d-4c3f-90ef-63d35f0d7674") + ) + (segment + (start 293.692 61.9125) + (end 280.595 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "23ae35b8-ba7c-4cbe-8055-6af0e295403b") + ) + (segment + (start 137.72 61.9125) + (end 150.817 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "27634a08-a300-4923-bd2d-8a36d828228a") + ) + (segment + (start 296.073 61.9125) + (end 294.882 63.1029) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "2e79d32e-7d63-40f5-8f8b-e8d868876bdc") + ) + (segment + (start 193.679 63.103) + (end 193.679 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "33bdc28c-7469-499a-8273-eb4899ba0323") + ) + (segment + (start 294.882 64.0556) + (end 294.882 63.1029) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "3456fca5-21ef-43d5-af74-b8b127f7d0ae") + ) + (segment + (start 152.008 63.5794) + (end 152.0075 63.5799) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "3c9b5e2b-d11d-4fb5-8369-33b432da904a") + ) + (segment + (start 179.392 61.9125) + (end 168.676 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "3cbda146-8257-4302-8c52-a8bd44e8f21e") + ) + (segment + (start 193.6794 64.0556) + (end 193.679 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "3de5fef5-6060-45a0-87bf-24960d6d3c71") + ) + (segment + (start 194.87 61.9125) + (end 193.679 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "3e0f61e7-0e04-457a-95a4-42a4615ae14d") + ) + (segment + (start 280.595 61.9125) + (end 279.405 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "4aa5fe6d-533d-45e1-8f96-3d38055dce08") + ) + (segment + (start 279.404 63.1033) + (end 279.405 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "4cbc3512-ff76-4655-928b-a20da79071dc") + ) + (segment + (start 180.582 64.0556) + (end 180.582 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "513c1862-620e-4b2d-807b-269780b84a9e") + ) + (segment + (start 321.076 63.5794) + (end 321.076 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "52ab6d07-45b1-426e-83cf-cae3f4e94e06") + ) + (segment + (start 192.489 61.9125) + (end 181.773 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "53656eaa-7606-4121-bc91-38e9080aff60") + ) + (segment + (start 121.051 63.1031) + (end 122.242 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "55726ba3-6577-435b-8432-f679e46e8478") + ) + (segment + (start 294.8825 64.0556) + (end 294.882 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "59a04a76-0692-45d8-8f78-d5e61f9ddd9e") + ) + (segment + (start 235.351 64.0556) + (end 235.351 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "5e2c0542-58e3-4390-ac89-d578d1f9daf0") + ) + (segment + (start 248.448 63.1033) + (end 248.448 63.1029) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "5f870d0f-a48e-4d3a-af4c-a88101c5813c") + ) + (segment + (start 263.926 63.1031) + (end 262.736 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "62468c66-eb56-4656-ae22-6fab90f67a8f") + ) + (segment + (start 180.5825 64.0556) + (end 180.582 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "6532b60c-e039-4ebf-a3c4-265ba1bb2a22") + ) + (segment + (start 248.4481 63.8175) + (end 248.4481 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "6dc39939-793c-482f-8121-08630ee17813") + ) + (segment + (start 321.076 63.5794) + (end 321.076 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "6f75c9e7-c3db-43cf-acbb-18003ce49134") + ) + (segment + (start 235.3513 64.0556) + (end 235.351 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "74854ba9-1b44-4b51-b20f-60a749d73906") + ) + (segment + (start 121.0513 64.0556) + (end 121.051 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "7533c229-8b40-4ca8-803b-eb30af1a1ef2") + ) + (segment + (start 248.448 63.5792) + (end 248.448 63.8174) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "76a9a10e-91ff-4ff6-bc8d-39eae8a71100") + ) + (segment + (start 152.008 63.103) + (end 152.008 63.1032) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "7fb348a6-9d24-4cd3-87dd-6084123ffd49") + ) + (segment + (start 307.979 63.1033) + (end 307.98 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "811d9ef0-892a-4603-b9c6-1376e24cdac9") + ) + (segment + (start 222.254 63.103) + (end 222.254 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "86d76206-9d6c-45be-a8a9-982f03c927ba") + ) + (segment + (start 166.295 61.9125) + (end 153.198 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "86fabc30-5bf3-488e-97f2-899ce1ee630b") + ) + (segment + (start 307.979 63.5794) + (end 307.979 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "8879ce56-fec8-4750-82fb-9d0fb7f25f7f") + ) + (segment + (start 150.817 61.9125) + (end 152.008 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "8c07cc21-5702-4754-8f70-e1600ff2932d") + ) + (segment + (start 248.448 63.1029) + (end 247.258 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "8c5d13d7-37e6-4888-a85e-c461a8d392a0") + ) + (segment + (start 263.926 63.5793) + (end 263.926 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "8e029de3-345f-4ea7-820b-eb7ec991dde4") + ) + (segment + (start 249.639 61.9125) + (end 248.448 63.1033) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "939477eb-30ce-4370-a9a8-89c69e5535db") + ) + (segment + (start 222.254 63.103) + (end 221.064 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "93e899aa-c0ea-4d8b-b769-3934eaba0e9f") + ) + (segment + (start 207.967 61.9125) + (end 194.87 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "952c7f6b-0539-47b4-8fc9-954c843b2016") + ) + (segment + (start 209.158 63.103) + (end 209.158 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "9559defc-33af-4085-b179-dcc03622bcd9") + ) + (segment + (start 309.17 61.9125) + (end 307.979 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "98cc879d-bb06-42fa-bc5c-451de6b8b4ba") + ) + (segment + (start 279.4044 64.0556) + (end 279.404 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "9921c43a-5644-4358-90a0-98e6c5941b9c") + ) + (segment + (start 122.242 61.9125) + (end 135.339 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "9be6f92d-d816-4324-a974-f22d33718cc5") + ) + (segment + (start 234.161 61.9125) + (end 223.445 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "9bf886d5-c84b-42eb-b51c-9c2d062770be") + ) + (segment + (start 136.529 63.1031) + (end 136.529 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "9dbb632f-f8ba-4dc9-bc88-37f02a870693") + ) + (segment + (start 319.886 61.9125) + (end 309.17 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "a226a141-77f6-4556-b7f6-9a3fc4a5d72b") + ) + (segment + (start 121.051 64.0556) + (end 121.051 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "a6ad6307-028c-46d3-b32b-68134931e8d2") + ) + (segment + (start 223.445 61.9125) + (end 222.254 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "a9664ce3-e44e-4efd-8ff0-74127883f598") + ) + (segment + (start 209.158 63.103) + (end 207.967 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "abf183a3-2495-4470-bb92-248277b1210e") + ) + (segment + (start 136.5294 64.0556) + (end 136.529 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "acc4dd3e-567f-4447-93b1-674e3c9b97fd") + ) + (segment + (start 181.773 61.9125) + (end 180.582 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "ae9d4a38-7ea0-4f1d-ba66-e69cd2a17ced") + ) + (segment + (start 222.2544 64.0556) + (end 222.254 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "b18fed58-d477-423e-8ca8-2c4c24a12caa") + ) + (segment + (start 279.404 63.5794) + (end 279.404 63.1033) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "b65bfa01-4321-4e97-a977-9a99d8b9a62e") + ) + (segment + (start 321.0763 64.0556) + (end 321.076 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "bca71a51-b009-460f-9039-77adf5f853d1") + ) + (segment + (start 265.117 61.9125) + (end 263.926 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "bcc114a2-af45-4ce1-a331-1c6c45b03553") + ) + (segment + (start 93.2817 64.8186) + (end 93.4479 64.6524) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "c08fa73f-3563-48d6-8bcd-d3218844a9f4") + ) + (segment + (start 152.008 63.1032) + (end 152.008 63.5794) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "c7ce3d07-8374-432e-b32b-03f460c09010") + ) + (segment + (start 135.339 61.9125) + (end 136.529 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "cad5a64d-28b2-41cc-8562-6d7147f7ad8a") + ) + (segment + (start 279.404 63.5794) + (end 279.404 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "cb0264bf-4fd6-48ec-aa92-afde9ae72760") + ) + (segment + (start 321.076 63.1031) + (end 321.076 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "cf02d8f1-bc9e-42bf-b588-ff118c43e037") + ) + (segment + (start 248.448 63.5792) + (end 248.448 63.1033) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "cfbcd971-d095-4d58-a738-4ff361704cab") + ) + (segment + (start 279.405 63.1031) + (end 278.214 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d13cd0ad-52d2-4d27-aec9-641b44cbd73e") + ) + (segment + (start 279.404 64.0556) + (end 279.404 63.5794) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d454c223-1a0b-46ac-8e3f-5bff9d815e34") + ) + (segment + (start 193.679 63.103) + (end 192.489 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d47fbbf0-eed5-466c-8a8a-7309b2977819") + ) + (segment + (start 307.979 64.0556) + (end 307.979 63.5794) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d698974b-3ae9-467b-a14e-0f8e6e594a77") + ) + (segment + (start 180.582 63.103) + (end 179.392 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d6a4b6ef-b3b5-4921-a023-5b7bb456bd7a") + ) + (segment + (start 263.9263 63.5796) + (end 263.9263 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d6b36e4c-d607-4119-94f9-abf1cb3d24fe") + ) + (segment + (start 247.258 61.9125) + (end 236.542 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "d80babb2-c1e0-4dd7-806c-be6f1e81a89c") + ) + (segment + (start 321.076 63.103) + (end 319.886 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "dcdd64be-ccbe-4873-ab60-b8727b13359a") + ) + (segment + (start 307.9794 64.0556) + (end 307.979 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "dd10178a-93de-4e53-b162-995682b40a14") + ) + (segment + (start 263.926 64.0556) + (end 263.926 63.5793) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e18c9b9f-3de2-4ec9-a6ab-f955b022f1a5") + ) + (segment + (start 87.845 62.1156) + (end 87.845 63.5034) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e1de902d-beb5-4b45-b227-10dfd722d43b") + ) + (segment + (start 294.882 63.1029) + (end 293.692 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e41b7cf2-32a7-4684-a25a-473e664cef7e") + ) + (segment + (start 209.1575 64.0556) + (end 209.158 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e7c37e5c-ada9-4ac7-83b9-491d79202f9c") + ) + (segment + (start 152.008 63.1032) + (end 152.008 63.5794) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e86abb5a-fb1d-4f0a-9880-534fa32182d8") + ) + (segment + (start 167.486 64.0556) + (end 167.486 63.1031) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e873f6ae-90a2-4c45-8761-68ed9e963fea") + ) + (segment + (start 210.348 61.9125) + (end 209.158 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "e9b40a96-8877-4fa8-b785-168e83de97c7") + ) + (segment + (start 167.4856 64.0556) + (end 167.486 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "ec801023-90ca-4aae-82e5-92f67ef997fa") + ) + (segment + (start 152.0075 63.5799) + (end 152.0075 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "ed4b5f64-ce37-4399-b72d-5ab7ef13c8ee") + ) + (segment + (start 248.448 63.8174) + (end 248.448 64.0556) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "ed63e7e1-3f1f-475c-88d9-b907664ccd99") + ) + (segment + (start 236.542 61.9125) + (end 235.351 63.103) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "edb7e0a3-fbdb-493e-919f-0347ab4c9d97") + ) + (segment + (start 235.351 63.103) + (end 234.161 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "ee1bd267-1d75-46d6-985a-81f0685065da") + ) + (segment + (start 136.529 63.1031) + (end 137.72 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "efae74ec-5d64-4c9a-8bd8-b9c078fc669b") + ) + (segment + (start 167.486 63.1031) + (end 166.295 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "f0f8533f-8321-431d-9447-02c82518e18a") + ) + (segment + (start 262.736 61.9125) + (end 249.639 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "f3c3a5e9-0b71-4599-b72b-bfe40b97c216") + ) + (segment + (start 278.214 61.9125) + (end 265.117 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "f51b443c-5acd-430b-9feb-af0e65c9d5fb") + ) + (segment + (start 306.789 61.9125) + (end 296.073 61.9125) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "f6b46e5e-a30b-464d-86db-ca705228e311") + ) + (segment + (start 89.1602 64.8186) + (end 93.2817 64.8186) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "fbd37697-7a3d-4585-8cc7-4e483fa67d13") + ) + (segment + (start 307.979 63.1031) + (end 306.789 61.9129) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "fee63172-565b-4121-a0af-0661e7a98cb3") + ) + (segment + (start 307.979 63.5794) + (end 307.979 63.1033) + (width 0.2) + (layer "F.Cu") + (net 49) + (uuid "ff8f11d6-0fc1-4280-a7ea-e09b8fee5dd1") + ) + (via + (at 93.4479 64.6524) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 49) + (uuid "a77c1cda-2861-4b1d-a688-fcbf7d695960") + ) + (segment + (start 119.3528 64.6524) + (end 119.9496 64.0556) + (width 0.2) + (layer "In1.Cu") + (net 49) + (uuid "73fb9c5e-56f1-4f63-a371-e0c58b8ec1a1") + ) + (segment + (start 93.4479 64.6524) + (end 119.3528 64.6524) + (width 0.2) + (layer "In1.Cu") + (net 49) + (uuid "a6e7caaa-fec5-4f40-b0ad-daef279559d7") + ) + (segment + (start 121.0513 64.0556) + (end 119.9496 64.0556) + (width 0.2) + (layer "In1.Cu") + (net 49) + (uuid "e4fdd979-7558-40dc-bc36-854afc07f990") + ) + (segment + (start 296.073 60.1266) + (end 282.976 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "00b514eb-3805-4f58-999d-03c3ad93f349") + ) + (segment + (start 153.198 60.1266) + (end 140.101 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "00cf3076-c947-46b7-bb26-dff102e7ba01") + ) + (segment + (start 211.539 61.3172) + (end 210.348 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "0244d1ad-0491-4eee-82be-351106a2020a") + ) + (segment + (start 154.389 64.0556) + (end 154.389 63.2817) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "0474e0bb-125f-4967-9c3f-6fe7c0079e4c") + ) + (segment + (start 155.579 60.1266) + (end 154.389 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "05d4010c-7526-4323-969f-73a3102e2033") + ) + (segment + (start 224.6356 64.0556) + (end 224.636 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "08820795-62f0-4695-ba68-dbd7b80210a2") + ) + (segment + (start 281.786 62.5078) + (end 281.786 62.508) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "08bf019b-02a8-46f4-9edd-683a85b183e8") + ) + (segment + (start 182.95 62.5217) + (end 182.964 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "093eb83c-d037-4475-9dcf-649e4826497c") + ) + (segment + (start 212.73 60.1266) + (end 211.539 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "0b01887c-a189-46c1-ac1e-7d97ccafcd78") + ) + (segment + (start 237.732 64.0556) + (end 237.732 62.508) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "118aadfb-861d-4ae4-bd43-8c468c0b2909") + ) + (segment + (start 124.623 60.1266) + (end 123.433 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "1936be50-fac5-4b55-b822-f4c70efc7585") + ) + (segment + (start 310.361 64.0556) + (end 310.361 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "1f597576-b1f1-4ee4-aa2b-179edfad8982") + ) + (segment + (start 281.786 64.0556) + (end 281.786 62.508) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "1fa03f5f-e522-4d2c-80f1-3c56e5625690") + ) + (segment + (start 249.639 60.1266) + (end 238.923 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "2487d5a5-4850-4a32-bead-30e297e0c159") + ) + (segment + (start 137.72 60.1266) + (end 124.623 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "259a5c11-54b0-48e2-8d6c-271276722877") + ) + (segment + (start 322.267 60.1266) + (end 311.551 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "26ecc502-aa40-4860-9b04-755fb390c977") + ) + (segment + (start 297.2638 64.0556) + (end 297.264 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "28cea69c-3c40-483b-a541-ba4d8cf618e5") + ) + (segment + (start 154.389 61.3172) + (end 153.198 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "2c66a693-2899-4518-89e4-45c5a8563528") + ) + (segment + (start 154.3888 63.2819) + (end 154.3888 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "304b1517-099d-41e5-a405-8a1c7fd9374b") + ) + (segment + (start 197.251 60.1266) + (end 196.061 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "325b0ae3-1d4c-47cb-a019-d23f90bba8e1") + ) + (segment + (start 182.95 64.05) + (end 182.95 62.5217) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "33512118-9394-4552-b501-172d9f2849d7") + ) + (segment + (start 237.732 62.508) + (end 237.733 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "3615575d-5ca6-4bc2-8a13-95edd7f5128a") + ) + (segment + (start 123.432 62.5078) + (end 123.432 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "36706c5e-622d-4f5e-9651-46934b68d755") + ) + (segment + (start 309.17 60.1266) + (end 298.455 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "376644ea-acc8-41df-a1cc-0a82c729205c") + ) + (segment + (start 182.964 61.3172) + (end 181.773 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "4245c177-ca24-44db-b0f5-3d5745b9b642") + ) + (segment + (start 297.264 64.0556) + (end 297.264 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "43b22fda-2fa9-4139-9256-2bbb91c4600a") + ) + (segment + (start 267.498 60.1266) + (end 266.308 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "463d4170-b2db-471a-bc6c-33841942ceae") + ) + (segment + (start 194.87 60.1266) + (end 184.154 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "46adcf1e-96ac-45e4-b876-fa05fd608e58") + ) + (segment + (start 252.02 60.1266) + (end 250.83 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "46ec8e90-1368-4a6c-951c-83931daa849f") + ) + (segment + (start 169.867 63.2817) + (end 169.867 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "4b850598-2f65-46cf-9ffd-1523a3aaf1b8") + ) + (segment + (start 250.829 64.0556) + (end 250.829 62.508) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "4c2c6e99-9fb3-437f-98c6-93d0777d4e42") + ) + (segment + (start 224.636 61.3172) + (end 223.445 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "53db4b41-55ee-4ade-bc0c-c8c3d46acd23") + ) + (segment + (start 310.361 61.3172) + (end 309.17 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "53f4fc63-7e9f-4615-a876-53406e6a1eae") + ) + (segment + (start 88.4964 63.2261) + (end 88.345 63.0747) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "5541873c-e825-491c-b6ad-7487f77c1c39") + ) + (segment + (start 140.101 60.1266) + (end 138.911 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "56d388cd-aefe-427e-a9ca-a1a2809d05e8") + ) + (segment + (start 266.308 64.0556) + (end 266.308 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "58385bd6-bb5e-4c58-aefc-dabb4cd98b78") + ) + (segment + (start 224.636 64.0556) + (end 224.636 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "60bb089d-fd56-4383-88da-5d29cb977a7b") + ) + (segment + (start 184.154 60.1266) + (end 182.964 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "63a68cc5-dcf6-44f9-8ba9-2c54cc391f1c") + ) + (segment + (start 223.445 60.1266) + (end 212.73 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "6987e80f-33de-43b1-b6bf-7b40db0e9e6c") + ) + (segment + (start 250.83 61.3172) + (end 249.639 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "70232f23-df9e-4f87-a3fc-446a098401a5") + ) + (segment + (start 323.458 64.0556) + (end 323.458 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "70bd5201-5815-4ba8-b4d2-5ceb4ec5e914") + ) + (segment + (start 298.455 60.1266) + (end 297.264 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "70e65d88-4d52-4fca-99fa-fe25b22284e3") + ) + (segment + (start 311.551 60.1266) + (end 310.361 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "7a7877f6-a1e6-4b48-b6b4-74a61b4b5eae") + ) + (segment + (start 210.348 60.1266) + (end 197.251 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "823d5a8e-c149-4b3a-a44d-4d53c88b156f") + ) + (segment + (start 323.458 61.3172) + (end 322.267 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "86621606-0324-4db0-9775-9022b33656e3") + ) + (segment + (start 181.773 60.1266) + (end 171.058 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "95061724-c11d-4461-bbe0-765c9f0ac2bc") + ) + (segment + (start 169.867 61.3172) + (end 168.676 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "989e789e-726a-41bf-9d38-3043d5bd5160") + ) + (segment + (start 154.389 63.2817) + (end 154.3888 63.2819) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "99216fc0-f80c-4bba-82cd-93b315c47cdd") + ) + (segment + (start 168.676 60.1266) + (end 155.579 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "9b7e1985-f8f7-4ea1-adf4-209905bc449d") + ) + (segment + (start 154.389 63.2817) + (end 154.389 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "9efcc083-9db2-473d-b2f7-cd2a5efab09d") + ) + (segment + (start 238.923 60.1266) + (end 237.733 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "a0d9ebf1-5af2-42b3-9317-0491ea67d37b") + ) + (segment + (start 281.786 61.3172) + (end 280.595 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "a3ce72ec-226a-4797-a5e6-3a8204bddab6") + ) + (segment + (start 236.542 60.1266) + (end 225.826 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "ab01fbff-9305-4acb-bd10-0d519bc47434") + ) + (segment + (start 169.867 64.0556) + (end 169.867 63.2817) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "ace178e6-0fc5-4624-8e4c-7563c5ec344d") + ) + (segment + (start 88.345 63.0747) + (end 88.345 62.1156) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "c254f143-cd0e-415b-90cb-0e78812c5484") + ) + (segment + (start 282.976 60.1266) + (end 281.786 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "ca0a8446-5919-4427-94da-14434562bc6e") + ) + (segment + (start 171.058 60.1266) + (end 169.867 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "ce758143-a543-474c-946c-1287f071162a") + ) + (segment + (start 196.061 61.3172) + (end 194.87 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "cecc4e6b-805e-4c66-afa4-a6f47d011bbc") + ) + (segment + (start 280.595 60.1266) + (end 267.498 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "cf1ab310-2af3-45cc-876b-fadd89e756aa") + ) + (segment + (start 297.264 61.3172) + (end 296.073 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "d1334f00-7c94-42b4-9f73-494bfbf67965") + ) + (segment + (start 266.3075 64.0556) + (end 266.308 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "d2d07846-28eb-43b5-8889-882a66ebbca3") + ) + (segment + (start 250.8294 64.0556) + (end 250.829 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "d4827060-4b23-4cdd-9f79-a4d5c238f3fd") + ) + (segment + (start 169.8669 64.0556) + (end 169.867 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "d9044752-d8a1-4274-bb5e-9e253866aac4") + ) + (segment + (start 138.9106 64.0556) + (end 138.911 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "dafcdab4-d0b0-4d72-a7aa-7714c4a20ab5") + ) + (segment + (start 266.308 61.3172) + (end 265.117 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "dce8d151-d532-4815-9752-aaa6fabdbad0") + ) + (segment + (start 169.867 63.2817) + (end 169.867 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "dd94e990-7c7e-48d9-8ddf-cdf9e53bf2e3") + ) + (segment + (start 211.539 64.0556) + (end 211.539 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "e0faf858-16ed-4175-9716-8548f8ebe816") + ) + (segment + (start 196.061 64.0556) + (end 196.061 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "ec413dd5-6d74-4e8f-a8f6-33f70bf74440") + ) + (segment + (start 138.911 64.0556) + (end 138.911 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "eee920fa-c586-4f61-9187-40c52e4b7dc4") + ) + (segment + (start 138.911 61.3172) + (end 137.72 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "f2f50990-4a31-4726-8164-6e33ef39c6d3") + ) + (segment + (start 323.4575 64.0556) + (end 323.458 64.0556) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "f43fe7df-cd17-4f56-be6f-b5e9d16bcaa6") + ) + (segment + (start 225.826 60.1266) + (end 224.636 61.3172) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "f5f50d4e-830d-431a-b567-a0255292a6d1") + ) + (segment + (start 250.829 62.508) + (end 250.83 62.5078) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "f76a17b0-0cbc-40b7-9d06-fe2f18a89a8b") + ) + (segment + (start 237.733 61.3172) + (end 236.542 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "f911746d-aa77-48ad-b1c0-1802de3b66ae") + ) + (segment + (start 265.117 60.1266) + (end 252.02 60.1266) + (width 0.2) + (layer "F.Cu") + (net 50) + (uuid "fe3979a5-5db9-49ce-8137-142b06fd4978") + ) + (via + (at 237.733 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "01f54fec-c6a5-44f4-8aff-9ee3b88f1e03") + ) + (via + (at 250.83 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "10ea0f56-439c-420e-87a6-f04e7daad127") + ) + (via + (at 310.361 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "121a3495-c7a9-4c86-a9af-412be426627e") + ) + (via + (at 211.539 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "26359367-1fab-4654-805a-a568145f810f") + ) + (via + (at 297.264 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "313674d1-fbd8-4058-a7e8-fe9f5ce2074c") + ) + (via + (at 310.361 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "35678383-967f-43f8-8e7e-6cfece004263") + ) + (via + (at 154.389 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "421affca-0cd0-43ec-af93-0bd53cf10887") + ) + (via + (at 224.636 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "452483d3-0f77-475c-bb27-b74e8270b2de") + ) + (via + (at 250.83 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "489760cf-087d-4a6b-86b5-bd657d46ff84") + ) + (via + (at 88.4964 63.2261) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "5ca4bd3c-5957-4c4b-897b-a4ec66f4ba5e") + ) + (via + (at 182.964 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "5daa588b-fd4e-42d1-ac1c-3f1d32289360") + ) + (via + (at 138.911 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "5dd9efad-8948-455f-9325-26e790d73dc3") + ) + (via + (at 224.636 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "5f66a033-e6e5-434f-b0d4-1aa1cafa711a") + ) + (via + (at 138.911 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "639f3427-85bc-4c5e-aec3-7eb1967fa76f") + ) + (via + (at 182.964 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "668a3de4-8e96-4a2a-9f72-65d6bd88837d") + ) + (via + (at 123.433 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "692ad1ac-1ca7-44e4-9bbb-afa92daa50da") + ) + (via + (at 237.733 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "6f8d6e85-2eca-4e64-aa86-3c7bd3c622d2") + ) + (via + (at 266.308 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "750ce479-6ed6-4da8-963f-7321a72281ef") + ) + (via + (at 196.061 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "7a7b3052-3b55-41dc-84a6-93317e3c9f51") + ) + (via + (at 196.061 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "87b2cb85-7aec-4368-b6fd-526e2e2358c5") + ) + (via + (at 123.432 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "956b8b1e-410c-4cc4-a211-656b85fcd7f5") + ) + (via + (at 211.539 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "a1393a93-6fad-4e3a-b9da-1556e7607409") + ) + (via + (at 281.786 62.508) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "b6fc1476-a2f3-43d5-8257-6b464f42da4a") + ) + (via + (at 297.264 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "bd1c2c0f-3f2e-43b6-93bd-726a0c258d93") + ) + (via + (at 154.389 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "c096cb91-280f-4ff5-a645-4c69da918073") + ) + (via + (at 281.786 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "e0957799-b683-4882-b063-f67f1c2036e7") + ) + (via + (at 266.308 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "e8274885-b566-4b8d-8f4f-16d73bd4f41a") + ) + (via + (at 169.867 61.3172) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "ebaca487-3015-4854-8fcf-783deb29b1af") + ) + (via + (at 169.867 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 50) + (uuid "fd5fb8c8-1cf0-4444-8069-570a0c6d8aa9") + ) + (segment + (start 154.389 62.5078) + (end 154.389 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "013999cd-b13e-4aa3-9735-32a5f678e954") + ) + (segment + (start 196.061 61.3172) + (end 196.061 62.5078) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "07c5db31-bf33-4d88-8014-81e83f80c59f") + ) + (segment + (start 310.361 61.3172) + (end 310.361 62.5078) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "3b673e20-23be-4a0b-bc0d-56fbe4122eb7") + ) + (segment + (start 169.867 62.5078) + (end 169.867 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "4bd5818f-d78d-4740-ace7-194b703d5922") + ) + (segment + (start 237.733 62.5078) + (end 237.733 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "7a0f7a2c-999e-4295-9489-7528a9929859") + ) + (segment + (start 266.308 62.5078) + (end 266.308 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "7a7e6e63-bc5a-4392-ab65-9b95f90b7a4e") + ) + (segment + (start 297.264 62.5078) + (end 297.264 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "8189a45c-0c4e-44bc-8128-9897437a4c1a") + ) + (segment + (start 250.83 62.5078) + (end 250.83 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "920ba67b-32a8-4b76-8d8d-60a8e1402b3b") + ) + (segment + (start 281.786 62.508) + (end 281.786 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "976f585e-54ef-4a09-8712-007903288b45") + ) + (segment + (start 138.911 62.5078) + (end 138.911 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "9c335b8c-c2d2-4d76-923b-966658533056") + ) + (segment + (start 211.539 62.5078) + (end 211.539 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "a86c3d41-d56e-4908-92b4-8e8450ddcfc0") + ) + (segment + (start 224.636 62.5078) + (end 224.636 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "b99c2d58-b256-4aaa-a371-a579ceec0e53") + ) + (segment + (start 182.964 62.5078) + (end 182.964 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "c9104391-f3b9-4f0d-afba-12fcc1bc01a4") + ) + (segment + (start 123.432 62.5078) + (end 123.432 61.3182) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "dcbdbc33-c005-410f-bcd5-ce7bf10fdf5f") + ) + (segment + (start 123.432 61.3182) + (end 123.433 61.3172) + (width 0.2) + (layer "B.Cu") + (net 50) + (uuid "fe301bba-1579-4dd0-b939-4adc2ebdaa68") + ) + (segment + (start 90.7094 64.1476) + (end 89.788 63.2262) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "1baeae2f-aae5-41c3-bb88-623ff70a8b64") + ) + (segment + (start 112.1757 62.5078) + (end 110.6328 64.0507) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "4e322c44-77fd-44eb-a73b-292e2f09f223") + ) + (segment + (start 110.6328 64.0507) + (end 93.1988 64.0507) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "aec11df3-4356-466b-9f4a-e6a389b4ae77") + ) + (segment + (start 89.788 63.2262) + (end 88.4964 63.2262) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "c3b5e2a7-c330-411e-8150-d92f54c07170") + ) + (segment + (start 123.432 62.5078) + (end 112.1757 62.5078) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "d905803b-5254-4c2a-940d-189291d4fd80") + ) + (segment + (start 93.1988 64.0507) + (end 93.1019 64.1476) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "df6d4f65-d4d6-42d6-8016-cf4ef258d401") + ) + (segment + (start 93.1019 64.1476) + (end 90.7094 64.1476) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "f0d1f2b9-cba5-4dd9-a168-be2c48c205b2") + ) + (segment + (start 88.4964 63.2262) + (end 88.4964 63.2261) + (width 0.2) + (layer "In1.Cu") + (net 50) + (uuid "f4a18d8a-9a9e-427c-b9a6-ca635dbcddd7") + ) + (segment + (start 196.0606 64.0556) + (end 196.0606 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "08253107-1f90-49ef-86c3-f5e0700e7c50") + ) + (segment + (start 123.432 62.9534) + (end 123.432 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "0f599a33-21e0-419a-9d94-90eadd0a161a") + ) + (segment + (start 211.539 62.9537) + (end 211.539 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "3e0ebf46-3d97-41a6-b671-aabe076c38bc") + ) + (segment + (start 196.0606 62.9539) + (end 196.061 62.9535) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "41322d67-d0af-4ff0-bb62-5e6d3342f9bd") + ) + (segment + (start 237.7325 64.0556) + (end 237.7325 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "4fce486d-524e-4451-b220-0a3b8a3f565b") + ) + (segment + (start 281.7856 64.0556) + (end 281.7856 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "62a25224-174a-400e-8493-fa6a1b3f73d7") + ) + (segment + (start 310.361 62.9535) + (end 310.361 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "72de69bb-decf-4154-9694-cad2235d8b98") + ) + (segment + (start 310.3606 62.9539) + (end 310.361 62.9535) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "76507fd0-16a3-4d94-9c7e-280b2d9b6678") + ) + (segment + (start 310.3606 64.0556) + (end 310.3606 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "7dc8407f-e24c-4aa9-993c-91089b0ccf66") + ) + (segment + (start 123.4325 64.0556) + (end 123.4325 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "9ce6b153-570d-4173-8247-a1a0c6bc0aee") + ) + (segment + (start 211.5388 62.9539) + (end 211.539 62.9537) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "b19565bc-23ad-470a-a9ff-7ba84f098f02") + ) + (segment + (start 237.733 62.9534) + (end 237.733 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "b19a8751-c9db-4ab5-b0ad-2f82a7937b86") + ) + (segment + (start 123.4325 62.9539) + (end 123.432 62.9534) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "be3e007b-d62c-48b7-8510-fc64b119a754") + ) + (segment + (start 281.786 62.9535) + (end 281.786 62.508) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "c9a14969-aba6-48ca-9dbf-7730eb628e1e") + ) + (segment + (start 196.061 62.9535) + (end 196.061 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "d2b816ab-dfde-4ede-8823-f8dc3245e9dd") + ) + (segment + (start 237.7325 62.9539) + (end 237.733 62.9534) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "e932d215-c0b6-4964-8b68-8741de64917a") + ) + (segment + (start 211.5388 64.0556) + (end 211.5388 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "f79d01ad-1b83-45df-b825-e1b6657b7149") + ) + (segment + (start 281.7856 62.9539) + (end 281.786 62.9535) + (width 0.2) + (layer "In2.Cu") + (net 50) + (uuid "fec7bbd2-1e7d-42a3-8b5d-af740f9718ac") + ) + (segment + (start 284.167 59.5313) + (end 282.976 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "021551a6-8c94-40d1-9cf5-1ddd857c2dc6") + ) + (segment + (start 227.017 59.5313) + (end 225.826 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "046ad1bd-d470-4b82-9e0a-d969fa342aff") + ) + (segment + (start 172.248 64.0556) + (end 172.248 63.2818) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "054f0342-90fa-44dd-af8c-f70cb0c19227") + ) + (segment + (start 156.77 64.0556) + (end 156.77 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "08bdaf46-924d-47ac-85c5-189f6b668d6d") + ) + (segment + (start 141.292 64.0556) + (end 141.292 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "0abc5e14-ea2a-4ed1-9417-427c42694825") + ) + (segment + (start 156.77 59.5313) + (end 155.579 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "1090dfec-d745-4a71-933b-ac8d6d9d9bfc") + ) + (segment + (start 282.976 58.3406) + (end 269.88 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "118b8742-ad76-4dc9-8da6-c0a5777a826c") + ) + (segment + (start 268.6888 63.2819) + (end 268.6888 64.0556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "19e8f486-05dd-430a-88a3-92f3c4989727") + ) + (segment + (start 127.004 58.3406) + (end 125.814 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "1f4dbfd9-3bc9-45b3-8229-a715823bae2c") + ) + (segment + (start 325.839 64.0556) + (end 325.839 62.9554) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "26ef140e-e365-4446-96e2-ab0c06278bde") + ) + (segment + (start 285.358 58.3406) + (end 284.167 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "2710b699-08cf-4f3d-8527-7d0059c2a667") + ) + (segment + (start 228.208 58.3406) + (end 227.017 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "289e909f-59e6-4848-9459-b7990916b327") + ) + (segment + (start 225.826 58.3406) + (end 215.111 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "2910f33f-3d79-4d07-a9c9-fbe242824a0a") + ) + (segment + (start 198.442 59.5313) + (end 197.251 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "2d7cda89-deca-4fe4-89dd-4f98c8a5dc51") + ) + (segment + (start 157.961 58.3406) + (end 156.77 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "327aba54-69a8-4b75-b1cc-0397cc0e5d3d") + ) + (segment + (start 268.689 59.5313) + (end 267.498 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "337b4785-f343-409f-89a0-c31d37b88f22") + ) + (segment + (start 173.439 58.3406) + (end 172.248 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "3c65f25e-4665-4d87-ae91-7de90ea6d2f3") + ) + (segment + (start 171.058 58.3406) + (end 157.961 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "3d2929d6-e82e-4215-a1fa-20f5775fd644") + ) + (segment + (start 212.73 58.3406) + (end 199.633 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "41bff861-153f-4eba-aacf-1146893b4b06") + ) + (segment + (start 88.845 60.2602) + (end 88.845 62.1156) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "43d314c5-9a06-4f2f-b2b0-482b45244768") + ) + (segment + (start 198.442 64.0556) + (end 198.442 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "48785153-d96e-466c-9fb0-29246c7b6cae") + ) + (segment + (start 268.689 64.0556) + (end 268.689 63.2817) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "48fbef68-cb9a-44c7-abdb-e841b18b8b81") + ) + (segment + (start 268.689 63.2817) + (end 268.689 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "51772c4e-75cd-4b6b-bc3d-0b1875fa6a8a") + ) + (segment + (start 267.498 58.3406) + (end 254.401 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "57afb4b2-4e4f-40c6-95f3-e064948e6e07") + ) + (segment + (start 254.401 58.3406) + (end 253.211 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "5d921eb0-b943-440f-9845-f6ccc7955752") + ) + (segment + (start 325.8388 64.0556) + (end 325.8388 62.9556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "5e881881-5888-408b-bfb3-5681414f35b6") + ) + (segment + (start 241.305 58.3406) + (end 240.114 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "610f5028-4eec-4f28-ad61-40ac2ba942d4") + ) + (segment + (start 141.292 59.5313) + (end 140.101 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "671ceea2-0ac3-4edc-9de3-e3d07aa70623") + ) + (segment + (start 213.92 59.5313) + (end 212.73 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "722f1d67-a09b-43ce-8645-2d6d982bb0f7") + ) + (segment + (start 325.8388 62.9556) + (end 325.839 62.9554) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "74c32c31-d0f5-4327-bdb7-1a381d842e9e") + ) + (segment + (start 325.839 62.9554) + (end 325.839 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "752bed4d-089d-4763-be36-d6c4cded978b") + ) + (segment + (start 197.251 58.3406) + (end 186.536 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "889ebfed-5cc8-4f08-b54b-fcbd2e72be29") + ) + (segment + (start 252.02 58.3406) + (end 241.305 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "8eedb1bc-4dee-435d-8558-7cf9cde5da4c") + ) + (segment + (start 240.1138 64.0556) + (end 240.114 64.0556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "8ff4013a-35ee-4568-88fa-1afd4275ac1a") + ) + (segment + (start 213.92 64.0556) + (end 213.92 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "97fc6ca3-ebcd-4ba9-900d-94cf7bc7c13e") + ) + (segment + (start 298.455 58.3406) + (end 285.358 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "9848236e-0b4d-452e-b142-08be15c81df7") + ) + (segment + (start 88.6305 60.0457) + (end 88.845 60.2602) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "9eca5584-73e0-47da-89fe-96f48f986b82") + ) + (segment + (start 172.248 59.5313) + (end 171.058 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "aa8a2e70-8934-4c0c-bdb8-be13e9cbf8ce") + ) + (segment + (start 184.154 58.3406) + (end 173.439 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "aba4d96b-061d-43b0-a7a3-bffd480d9212") + ) + (segment + (start 238.923 58.3406) + (end 228.208 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "ac23d9ef-d4c0-4c57-9271-2bf44693de03") + ) + (segment + (start 300.836 58.3406) + (end 299.645 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "ac41b110-5e18-4edf-86b8-e4b08bfcda18") + ) + (segment + (start 299.645 59.5313) + (end 298.455 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "af0104bd-62e7-41e8-b09f-bbe5c4813f60") + ) + (segment + (start 253.2106 64.0556) + (end 253.211 64.0556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "ba7f51a2-40a9-4439-b932-0f012cae0a95") + ) + (segment + (start 268.689 63.2817) + (end 268.6888 63.2819) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "be536e53-0074-407a-ac0d-20adc3a7f7c6") + ) + (segment + (start 185.345 59.5313) + (end 184.154 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "bf14ca71-2654-4fa4-b606-0a3bbda55001") + ) + (segment + (start 140.101 58.3406) + (end 127.004 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "c0951dce-d9ba-429d-9240-957b06e0be1a") + ) + (segment + (start 215.111 58.3406) + (end 213.92 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "c42aef6e-195f-495d-a238-0c1897666e10") + ) + (segment + (start 142.483 58.3406) + (end 141.292 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "c848a8f7-1414-4cb4-ba6d-3b79c321e043") + ) + (segment + (start 240.114 59.5313) + (end 238.923 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "c8891e71-bf13-446b-9ce1-1a9d513dd285") + ) + (segment + (start 324.648 58.3406) + (end 300.836 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "c9fbe830-bffd-42ce-9b43-c76921389197") + ) + (segment + (start 172.248 63.2818) + (end 172.248 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "ca05b112-7bbf-4456-aeed-129585ed79bd") + ) + (segment + (start 299.645 64.0556) + (end 299.645 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "d2d88e81-608b-42da-b29a-2a437f9e66c7") + ) + (segment + (start 125.814 64.0556) + (end 125.814 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "d3b956cb-9267-48a5-b85e-c85cd15b49af") + ) + (segment + (start 240.114 64.0556) + (end 240.114 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "da035d96-f339-4bc7-aca1-1ee5007898a5") + ) + (segment + (start 284.167 62.5078) + (end 284.167 63.2818) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "dcba675d-c05b-4404-8581-21fc045da042") + ) + (segment + (start 172.2481 64.0556) + (end 172.248 64.0556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "e5957ec2-1ace-4990-8c72-42a6c3672f07") + ) + (segment + (start 185.345 64.0556) + (end 185.345 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "e59e6aef-4fb4-450b-bf38-89f09cb80525") + ) + (segment + (start 186.536 58.3406) + (end 185.345 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "e82b0ed0-0640-484c-85b1-299a77718544") + ) + (segment + (start 155.579 58.3406) + (end 142.483 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "ec8c5351-9829-44ae-8a3c-600e871c4ecf") + ) + (segment + (start 199.633 58.3406) + (end 198.442 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "ed503041-9852-42dd-ada6-acb5646f9b85") + ) + (segment + (start 172.248 63.2818) + (end 172.248 64.0556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "efd642f7-d5cf-4fb8-bcc1-466740d8cc58") + ) + (segment + (start 227.017 64.0556) + (end 227.017 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "f2bfa1cf-1273-4a94-bcc1-78038aadc21e") + ) + (segment + (start 253.211 59.5313) + (end 252.02 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "f3b4f1bb-29cf-49ae-bd47-23bc65dc62d8") + ) + (segment + (start 125.8138 64.0556) + (end 125.814 64.0556) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "f615a7b8-c0ec-4939-9371-70c6ff096cd3") + ) + (segment + (start 269.88 58.3406) + (end 268.689 59.5313) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "f7acfcb0-fde1-4c0b-9db2-6ae1417e145b") + ) + (segment + (start 325.839 59.5313) + (end 324.648 58.3406) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "fa3d56d1-ecba-4b51-9163-e9a8756d434e") + ) + (segment + (start 253.211 64.0556) + (end 253.211 62.5078) + (width 0.2) + (layer "F.Cu") + (net 51) + (uuid "fdcbfbb1-4028-440a-b6d2-4a7ab323612c") + ) + (via + (at 156.77 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "07001bf3-fc2a-46b1-8f1a-65accedae247") + ) + (via + (at 299.645 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "210d9aef-5266-48cd-a778-48c373ed38de") + ) + (via + (at 268.689 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "253d0aa2-bce4-44e1-ad71-8b900cc7ff16") + ) + (via + (at 125.814 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "28e49114-a7af-4ba8-ac4d-b31c08a36bd1") + ) + (via + (at 156.77 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "2d60da47-e6d0-405b-a88c-e9f9a186c754") + ) + (via + (at 125.814 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "408f8d33-1e8d-4b04-b562-a199789d0fbb") + ) + (via + (at 213.92 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "4438829e-310f-4ce8-8caf-91e13596c09f") + ) + (via + (at 198.442 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "4d8bb885-534b-4a00-90d0-e3300d2a8edd") + ) + (via + (at 253.211 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "5d7168ef-509f-4525-85d5-f7d1fc2c8341") + ) + (via + (at 88.6305 60.0457) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "61f1ee64-461a-4bea-9f8b-b0351dc74978") + ) + (via + (at 185.345 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "634dbfb4-83f0-46b5-91e3-d486ed56d804") + ) + (via + (at 284.167 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "64cd72c9-0ee3-4c43-8ebe-a2cc48d560c6") + ) + (via + (at 268.689 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "76428b12-a3c0-4cf9-aa84-298c3c911184") + ) + (via + (at 240.114 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "86e941ca-fd4c-49e9-bcbf-2077e12b6b5f") + ) + (via + (at 172.248 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "9bd02863-ddc0-4a9b-b10b-c1743bde796f") + ) + (via + (at 185.345 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "a1dd3db6-5bfb-439c-b19d-d26d686d0de2") + ) + (via + (at 240.114 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "a6e7dd80-e65b-46c5-8614-fe0cb0584d89") + ) + (via + (at 227.017 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "afb5a71b-c6c8-451d-a6a6-cd526bed84ce") + ) + (via + (at 299.645 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "beb4db1c-2d4f-4ad8-8c29-4aa5b25898a1") + ) + (via + (at 172.248 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "cc5aef03-a09f-442a-bad9-a3d2246d9782") + ) + (via + (at 141.292 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "d1c0d044-8350-4255-9e54-d4b9e9e2c5dc") + ) + (via + (at 227.017 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "e5a3d2e3-284a-4d98-8bdd-6827d607a3f4") + ) + (via + (at 141.292 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "e72feaaf-0fed-4502-a38b-0741e33af7d3") + ) + (via + (at 284.167 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "eb27da30-b3b7-4408-8539-08df0f443199") + ) + (via + (at 253.211 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "ef219879-5f80-4b45-9382-26182734e509") + ) + (via + (at 213.92 59.5313) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "f105bd50-8fb3-4ac6-a5e1-c7c17b2aedc5") + ) + (via + (at 198.442 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 51) + (uuid "ffa39ff1-faf1-42f3-b859-d11823025ac5") + ) + (segment + (start 299.645 59.5313) + (end 299.645 62.5078) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "01bf8d5c-5bd9-423c-9f57-83a4a96298db") + ) + (segment + (start 141.292 59.5313) + (end 141.292 62.5078) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "1d29cf7d-a00f-4934-bc19-1d69ebe7c23f") + ) + (segment + (start 268.689 62.5078) + (end 268.689 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "2d4a9f98-b21a-4298-aedb-b72a70f1f047") + ) + (segment + (start 227.017 62.5078) + (end 227.017 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "2dd03c30-9fbd-492b-a14c-ae1cab008e71") + ) + (segment + (start 213.92 62.5078) + (end 213.92 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "3107647d-f559-4ed5-8ee7-5f44b5b64823") + ) + (segment + (start 284.167 62.5078) + (end 284.167 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "340f709c-d316-45f7-976f-6e8d8b85bec9") + ) + (segment + (start 253.211 62.5078) + (end 253.211 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "4a42941b-8e7d-45f3-b50c-e83eb8fc15ef") + ) + (segment + (start 125.814 62.5078) + (end 125.814 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "6d57e7fb-71f9-493b-afd7-ed425e453be6") + ) + (segment + (start 185.345 59.5313) + (end 185.345 62.5078) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "915df487-ecb3-4e05-a7be-9b6830850044") + ) + (segment + (start 156.77 59.5313) + (end 156.77 62.5078) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "a718ab80-1dae-489d-a554-8c375923e488") + ) + (segment + (start 172.248 59.5313) + (end 172.248 62.5078) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "b8e65862-ae05-43ed-b6bd-4d4fec164ae8") + ) + (segment + (start 198.442 62.5078) + (end 198.442 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "be98ac85-8121-4192-a3a1-b8d7430c54ae") + ) + (segment + (start 240.114 62.5078) + (end 240.114 59.5313) + (width 0.2) + (layer "B.Cu") + (net 51) + (uuid "e3c95fd9-e3b1-4901-98b6-881fb78f637a") + ) + (segment + (start 88.6305 60.0457) + (end 88.6305 60.5608) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "365466bc-2073-4ab8-a974-59da3ea1e667") + ) + (segment + (start 117.158 59.5328) + (end 125.8125 59.5328) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "4a1eed9b-c56a-4e51-9c66-6fdad0f97f3b") + ) + (segment + (start 88.6305 60.5608) + (end 89.4441 61.3744) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "54eebb25-c402-4946-87a4-626a1d6f5470") + ) + (segment + (start 98.7355 61.3744) + (end 99.1433 60.9666) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "6e18e00e-245a-40ac-a364-418c27be0802") + ) + (segment + (start 89.4441 61.3744) + (end 98.7355 61.3744) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "7cb2ebbd-6ace-4a2b-b0d2-8ff893100d4a") + ) + (segment + (start 116.9932 59.6976) + (end 117.158 59.5328) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "9999a522-5203-4434-a77d-2a11646c6a93") + ) + (segment + (start 116.9932 59.6976) + (end 117.158 59.5328) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "a5e74aa8-feb4-437c-957c-d739717b6aba") + ) + (segment + (start 99.1433 60.9666) + (end 115.7242 60.9666) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "be734afc-1dd0-4490-b83d-444828ef8cec") + ) + (segment + (start 125.8125 59.5328) + (end 125.814 59.5313) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "bf46f451-7950-4086-8a16-b54ea081513f") + ) + (segment + (start 115.7242 60.9666) + (end 116.9932 59.6976) + (width 0.2) + (layer "In1.Cu") + (net 51) + (uuid "cd3ff1fe-4b71-4905-a8a2-58b27af7d2a9") + ) + (segment + (start 198.4419 62.9539) + (end 198.442 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "1b45fa92-384c-4730-bbf8-daf5baf98621") + ) + (segment + (start 141.2919 62.9539) + (end 141.292 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "26c51912-6351-4054-8c0a-fd1d67987981") + ) + (segment + (start 198.4419 64.0556) + (end 198.4419 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "7fdbaff8-7312-4257-a136-d4f7a5b6979b") + ) + (segment + (start 284.167 62.9539) + (end 284.167 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "8a81d1f0-c762-4ff9-b120-eb1f7da52c0f") + ) + (segment + (start 284.1669 64.0556) + (end 284.1669 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "932ca61c-c61f-43b6-af37-46a68f6ee571") + ) + (segment + (start 284.1669 62.9539) + (end 284.167 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "9ffc7f5f-50c0-4090-aa5c-5c26894176fb") + ) + (segment + (start 141.292 62.9539) + (end 141.292 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "a4e7e98e-9c5c-42a8-ba6d-ec0e976a404b") + ) + (segment + (start 227.0169 62.9539) + (end 227.017 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "de23b5f3-6dda-4801-beb3-1dfb9e020356") + ) + (segment + (start 198.442 62.9539) + (end 198.442 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "e872e3b3-c329-4cd3-8ff2-191f91a2fb6c") + ) + (segment + (start 141.2919 64.0556) + (end 141.2919 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "ea8933db-a216-4ea3-b195-227d8346065a") + ) + (segment + (start 227.0169 64.0556) + (end 227.0169 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "f58d9b27-57bd-414c-8798-80784f1da0b0") + ) + (segment + (start 227.017 62.9539) + (end 227.017 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 51) + (uuid "fb874056-68c7-4c51-99d3-919ac494adf7") + ) + (segment + (start 128.195 62.5078) + (end 128.195 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "0a0c745b-ddd3-49f3-b26a-0097288251ed") + ) + (segment + (start 216.3013 64.0556) + (end 216.301 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "16a26a55-7e96-4802-8aeb-88a43ccd0e0b") + ) + (segment + (start 89.345 60.641) + (end 89.5043 60.4817) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "17d96aba-48f0-471b-9b9a-577f6f79015d") + ) + (segment + (start 159.1513 64.0556) + (end 159.151 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "17ed43d3-833f-4ca5-8583-db79c6583f7a") + ) + (segment + (start 242.495 62.5078) + (end 242.495 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "1aacadff-0636-4363-98a6-6495f8707bd9") + ) + (segment + (start 157.961 56.5547) + (end 144.864 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "2103adee-ba5b-44f5-aa07-b71c864f4513") + ) + (segment + (start 255.592 62.5078) + (end 255.592 63.2817) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "27b25bc3-a773-46ef-ba84-7cb6587e0a1c") + ) + (segment + (start 142.483 56.5547) + (end 129.386 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "27d77006-86b6-4a31-9e10-0e8890ff2829") + ) + (segment + (start 174.629 64.0405) + (end 174.62 64.05) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "30050f1d-072f-4c77-b7c6-17ea52a5b377") + ) + (segment + (start 143.673 63.2817) + (end 143.673 63.6686) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "35840ed9-7022-472f-9eb6-36bc735a6827") + ) + (segment + (start 129.386 56.5547) + (end 128.195 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "3736b902-3031-4960-9266-d0bd6910aa3d") + ) + (segment + (start 287.739 56.5547) + (end 286.548 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "38732d5b-36a2-495b-bd9f-2fa5f285379e") + ) + (segment + (start 143.673 57.7453) + (end 142.483 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "39b51691-b0aa-4a40-b8c9-efd92a486d9a") + ) + (segment + (start 229.398 57.7453) + (end 228.208 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "3a95d24b-eb91-49a6-9f91-c0f263ba59b5") + ) + (segment + (start 271.07 57.7453) + (end 269.88 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "3fabf1ac-3d6f-4cdb-a24d-d95c7d036b99") + ) + (segment + (start 173.439 56.5547) + (end 160.342 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "47b9de1b-1ca7-4449-a509-fcc185338d73") + ) + (segment + (start 255.5919 63.2818) + (end 255.5919 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "48e2b742-0140-4ae5-b0c3-e5d98d21ec1b") + ) + (segment + (start 228.208 56.5547) + (end 217.492 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "4c17ead0-c5f5-4f5a-af02-1b65c71b9bf3") + ) + (segment + (start 199.633 56.5547) + (end 188.917 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "53d8da51-6814-41bb-b2dd-9f1f0f211e14") + ) + (segment + (start 241.305 56.5547) + (end 230.589 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "5d0b022d-ac57-4808-9520-5b42e412a745") + ) + (segment + (start 286.548 62.5078) + (end 286.548 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "63fc59f6-f581-421c-bb8b-7ae610b3b81d") + ) + (segment + (start 187.726 62.5078) + (end 187.726 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "677c4c54-0260-47d4-bf8f-860c6724b008") + ) + (segment + (start 159.151 62.5078) + (end 159.151 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "68d27fdd-1398-447a-9857-c9989354846c") + ) + (segment + (start 272.261 56.5547) + (end 271.07 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "6972b72d-eae2-46e6-afd3-a5a0bd9b04a1") + ) + (segment + (start 271.07 62.5078) + (end 271.07 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "6efb2d92-3135-420f-90b0-be12825cbd51") + ) + (segment + (start 312.742 64.0556) + (end 312.742 62.5078) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "6fc531dd-6ed5-4218-8c4c-57473de65837") + ) + (segment + (start 242.495 57.7453) + (end 241.305 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "75aec036-9623-4c15-b50e-d98202e9a1b1") + ) + (segment + (start 229.398 62.5078) + (end 229.398 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "765faad0-e618-4fe9-bb33-362038803303") + ) + (segment + (start 230.589 56.5547) + (end 229.398 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "7711dc70-3e9b-427e-836c-87977de9fb97") + ) + (segment + (start 215.111 56.5547) + (end 202.014 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "777d8aa6-79d9-44f1-8b32-7a9725e392da") + ) + (segment + (start 254.401 56.5547) + (end 243.686 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "77f1bfb2-fa56-4f19-825f-18147675e82f") + ) + (segment + (start 202.014 56.5547) + (end 200.823 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "7d1d2c7d-19ac-44de-950b-0736180ad544") + ) + (segment + (start 143.673 63.2817) + (end 143.673 62.5078) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "86893be3-2b63-4bc5-add4-29cb3b4e4e17") + ) + (segment + (start 174.629 62.5078) + (end 174.629 64.0405) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "871a6fd3-d951-4409-9d6f-37642e2d05fc") + ) + (segment + (start 144.864 56.5547) + (end 143.673 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "895270bc-119e-40a1-85e6-8a584380fc6c") + ) + (segment + (start 143.673 63.6686) + (end 143.6731 63.6687) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "8a7c4f83-6c61-46dd-b546-2e7076a6c0a6") + ) + (segment + (start 269.88 56.5547) + (end 256.783 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "8d80fb11-1ac2-4243-a84c-d1de1f21bfbb") + ) + (segment + (start 311.551 56.5547) + (end 287.739 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "8e5ed5c0-43e4-4223-9222-bed0222f9b54") + ) + (segment + (start 255.592 63.2817) + (end 255.592 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "94055810-d20c-4b8c-930a-00f883490a56") + ) + (segment + (start 160.342 56.5547) + (end 159.151 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "95d6cef3-9bd8-4894-8b56-2a784a27231b") + ) + (segment + (start 328.22 64.0556) + (end 328.22 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "9d6799bb-255e-45d7-9691-704fc7071aa4") + ) + (segment + (start 217.492 56.5547) + (end 216.301 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "a04cd817-be9d-42c4-a3cf-927b67687eb4") + ) + (segment + (start 328.22 57.7453) + (end 327.03 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "a0510716-ef0e-49aa-8d84-6a8266827dfd") + ) + (segment + (start 255.592 63.2817) + (end 255.5919 63.2818) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "a07b5bd8-11ad-43f9-9283-4e3d9b641e77") + ) + (segment + (start 312.742 57.7453) + (end 311.551 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "a0e23bd4-1d3b-4871-9043-0dba3e09aa9c") + ) + (segment + (start 243.686 56.5547) + (end 242.495 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "a2ef1046-306d-4a5b-a221-70337c10ce90") + ) + (segment + (start 89.345 62.1156) + (end 89.345 60.641) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "ad082484-6d8f-4d02-9843-1e5b1fa12ec5") + ) + (segment + (start 187.726 57.7453) + (end 186.536 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "ad89cd15-fa45-4f4d-a6c7-e0a665dee4ce") + ) + (segment + (start 186.536 56.5547) + (end 175.82 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "ae57d6ce-4936-45ae-8413-afd87cf4ce2d") + ) + (segment + (start 188.917 56.5547) + (end 187.726 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "aee9d141-1f46-45de-af80-6dac5507f5c6") + ) + (segment + (start 286.548 57.7453) + (end 285.358 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "b3d6813b-8af9-4237-bb62-40c5dd9ebed3") + ) + (segment + (start 143.673 63.6686) + (end 143.673 63.2817) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "b72f6404-34fb-4ec6-93a9-983555e3df64") + ) + (segment + (start 159.151 57.7453) + (end 157.961 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "ba00e38e-1f28-49e9-b3bc-a9a224090898") + ) + (segment + (start 255.592 57.7453) + (end 254.401 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "be000b73-1ce0-42cf-8c14-3de291393ee0") + ) + (segment + (start 285.358 56.5547) + (end 272.261 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "c4ba2e59-b663-4268-ba5f-8a73cfb5a877") + ) + (segment + (start 200.823 57.7453) + (end 199.633 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "cbccca54-d440-4c0d-9812-7aa7fcf1c4d7") + ) + (segment + (start 313.933 56.5547) + (end 312.742 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "da5d1942-1606-43db-b8c2-960d709c6a21") + ) + (segment + (start 175.82 56.5547) + (end 174.629 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "df3427d1-1e63-4d56-bb20-80b35b653d8e") + ) + (segment + (start 216.301 62.5078) + (end 216.301 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "df91b327-ee0f-46f7-b33a-6a9cb71c435a") + ) + (segment + (start 200.823 62.5078) + (end 200.823 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "e00570a0-bca3-44e9-bc4a-281f9d4bfbcc") + ) + (segment + (start 256.783 56.5547) + (end 255.592 57.7453) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "e402c0ff-c18c-468c-b14b-8a538b8e3a6a") + ) + (segment + (start 216.301 57.7453) + (end 215.111 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "ed0e1b20-aa64-4073-8578-e2a0f58efc2d") + ) + (segment + (start 143.6731 63.6687) + (end 143.6731 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "f281f063-4f21-47c5-9594-b89b9774ff06") + ) + (segment + (start 174.629 57.7453) + (end 173.439 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "f62064ac-c905-4edb-98e8-f5afe7dd20b0") + ) + (segment + (start 229.398 57.7453) + (end 229.398 57.8136) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "f68928a7-4212-41c6-8391-13d88dc86b30") + ) + (segment + (start 327.03 56.5547) + (end 313.933 56.5547) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "f6f33704-65b5-43eb-bcd7-9790dae7aca5") + ) + (segment + (start 200.8231 64.0556) + (end 200.823 64.0556) + (width 0.2) + (layer "F.Cu") + (net 52) + (uuid "ff591126-0e6b-469c-9397-baa85c653a04") + ) + (via + (at 255.592 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "110f4fe4-d069-4a6e-ae11-72bb777f00c1") + ) + (via + (at 242.495 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "1eb1cedb-2ee9-4492-9138-ea41c3756ffa") + ) + (via + (at 143.673 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "335ac0c6-95c8-42c6-8a3c-c7111d6d8e1d") + ) + (via + (at 242.495 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "34046869-1e80-44d5-a27a-4a7305bce36e") + ) + (via + (at 128.195 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "3445406e-4b4c-4ab8-8efc-ef75789fc961") + ) + (via + (at 229.398 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "34bbecbd-08b7-46c3-b9d7-111a4cc29f62") + ) + (via + (at 187.726 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "3fb22539-b589-427b-8534-754551ad3aeb") + ) + (via + (at 271.07 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "4f0ad0bc-ce51-462e-a1c7-87a21507dd9e") + ) + (via + (at 174.629 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "4fc90b48-f521-4143-afe0-dca8edf53294") + ) + (via + (at 174.629 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "5f37cf86-1bfd-4196-91a1-467669f7afc7") + ) + (via + (at 89.5043 60.4817) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "669ee218-29a2-4737-b9f1-af2eccc9339c") + ) + (via + (at 200.823 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "6859706f-4467-480e-a5ae-e0837d34907d") + ) + (via + (at 312.742 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "73d297ce-5550-4fd8-b6ef-b94efd77965f") + ) + (via + (at 229.398 57.8136) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "763ce113-ba0c-429a-87f8-39f45ff31a38") + ) + (via + (at 143.673 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "7860713f-debf-4167-9256-b033e6008cf2") + ) + (via + (at 159.151 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "81401594-59c3-4036-ac7d-dcc6b714f188") + ) + (via + (at 216.301 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "81c92b37-9ed9-4238-b2bf-2c0e4666d311") + ) + (via + (at 286.548 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "83dce5fc-df73-4c3f-97d7-51e634ead83f") + ) + (via + (at 312.742 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "9f6af1cc-9335-4aa4-bbda-ff03e35b985f") + ) + (via + (at 271.07 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "a9bef472-f258-46b6-9ca7-4f949fc05d6a") + ) + (via + (at 159.151 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "bf08a25f-1d15-4d9f-8ae6-fd35f2b619a0") + ) + (via + (at 187.726 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "ccbe232a-1fbd-4165-87a8-621aa430410e") + ) + (via + (at 128.195 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "d7a6f195-369e-4411-9242-c5e8777ee6f9") + ) + (via + (at 255.592 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "dd4b3086-cd2c-4d4d-a440-12a12ddb3211") + ) + (via + (at 286.548 57.7453) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "e6d9b51c-acba-4e3a-845a-2af628e536f2") + ) + (via + (at 216.301 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "eae26618-6241-4000-8286-e73101850039") + ) + (via + (at 200.823 62.5078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 52) + (uuid "edc75aae-1590-439b-b890-beaf53d6c811") + ) + (segment + (start 143.673 62.5078) + (end 143.673 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "042a6bbb-2a62-4ac8-9d6d-60eb8ad58ee8") + ) + (segment + (start 271.07 62.5078) + (end 271.07 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "2ab61539-e650-4cb0-9c9d-96d532f40e5d") + ) + (segment + (start 242.495 62.5078) + (end 242.495 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "35fef26c-9a4b-40ca-8bb9-d7ba97969200") + ) + (segment + (start 286.548 62.5078) + (end 286.548 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "4abde7f8-0bcc-48fb-b5ea-a4c0aed2124b") + ) + (segment + (start 312.742 57.7453) + (end 312.742 62.5078) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "7322a8ac-fc67-490b-8245-2dcb05ac6930") + ) + (segment + (start 174.629 62.5078) + (end 174.629 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "8beb1175-1858-402a-8714-424fb1628cc6") + ) + (segment + (start 159.151 62.5078) + (end 159.151 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "a9746931-577f-461c-90c0-2a7f1731075c") + ) + (segment + (start 200.823 57.7453) + (end 200.823 62.5078) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "cde693c9-8958-4860-b322-e3582b92bf64") + ) + (segment + (start 128.195 57.7453) + (end 128.195 62.5078) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "d061eedf-6cb6-4fbb-9d57-816251146169") + ) + (segment + (start 255.592 62.5078) + (end 255.592 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "d9e9abc4-da1c-4c9d-b62d-4da8f1ec3cf1") + ) + (segment + (start 187.726 62.5078) + (end 187.726 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "e4de9426-9194-4af8-af16-32928bd8efce") + ) + (segment + (start 229.398 62.5078) + (end 229.398 57.8136) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "eafa6d8d-2ac3-4aa8-b1d7-432176301382") + ) + (segment + (start 216.301 62.5078) + (end 216.301 57.7453) + (width 0.2) + (layer "B.Cu") + (net 52) + (uuid "f2012410-132e-480f-9deb-86f0482259f8") + ) + (segment + (start 92.2407 57.7453) + (end 89.5043 60.4817) + (width 0.2) + (layer "In1.Cu") + (net 52) + (uuid "365aad74-3968-4eb1-9b27-ffea46704acb") + ) + (segment + (start 128.195 57.7453) + (end 92.2407 57.7453) + (width 0.2) + (layer "In1.Cu") + (net 52) + (uuid "b5d5924b-80a9-4f56-affb-0580d34da1a2") + ) + (segment + (start 229.398 62.9539) + (end 229.398 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "0a9242d3-72c5-4b54-a7f2-3723a069890b") + ) + (segment + (start 187.7263 62.9539) + (end 187.726 62.9536) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "27cc8336-af70-4539-94f9-6c9e5b198e6d") + ) + (segment + (start 286.548 62.9539) + (end 286.548 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "3ab346c8-47e1-46b2-ac81-9c7268f8f055") + ) + (segment + (start 312.7419 62.9539) + (end 312.742 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "5e1037aa-b090-4964-a703-0f89f384136b") + ) + (segment + (start 286.5481 62.9539) + (end 286.548 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "6500b05c-4473-4e13-9cfc-52d683fbc822") + ) + (segment + (start 312.742 62.9539) + (end 312.742 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "664d0bcc-d6d0-4f4c-a14e-98dbc4c95092") + ) + (segment + (start 229.3981 62.9539) + (end 229.398 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "8099e83b-f455-4b0d-bea2-186da2762a02") + ) + (segment + (start 312.7419 64.0556) + (end 312.7419 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "9ba0af86-e788-484c-bf35-3e718a278fda") + ) + (segment + (start 187.726 62.9536) + (end 187.726 62.5078) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "bbe8af7f-6db9-44ab-b0e6-175b96c289b8") + ) + (segment + (start 229.3981 64.0556) + (end 229.3981 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "bd5967fa-9c18-49f1-8c2d-6286afd61d6f") + ) + (segment + (start 187.7263 64.0556) + (end 187.7263 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "cccaf1d2-8d64-4709-ba10-c8ade5ae83d0") + ) + (segment + (start 286.5481 64.0556) + (end 286.5481 62.9539) + (width 0.2) + (layer "In2.Cu") + (net 52) + (uuid "f674f10c-0c4e-4541-9b51-92dc95077bd5") + ) + (segment + (start 160.342 66.0795) + (end 161.532 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "04e50b92-6138-4cc6-97ae-55e929afd95f") + ) + (segment + (start 147.245 66.0797) + (end 160.342 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "070aa379-f88d-4222-a3c8-52ae12d8b376") + ) + (segment + (start 302.026 64.0556) + (end 302.026 64.4724) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "08bdcdc8-97b1-40b2-8124-265f343218e2") + ) + (segment + (start 316.314 66.0797) + (end 329.411 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "0e9b1cba-42fa-4c2c-879b-11c854a753e1") + ) + (segment + (start 315.123 64.8891) + (end 315.123 64.8888) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "0f37f1e7-1b7e-4e2a-aa97-7e9ab7bbe9fc") + ) + (segment + (start 303.217 66.0797) + (end 313.933 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "10170dd2-1912-48b0-b3de-698b348d8ace") + ) + (segment + (start 273.451 64.8889) + (end 274.642 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "1059cd3a-e1ac-4020-b697-a59d39d7220e") + ) + (segment + (start 130.576 64.0556) + (end 130.576 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "10d1e29b-7427-4548-b95c-dea058a07797") + ) + (segment + (start 274.642 66.0797) + (end 287.739 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "118269c3-4885-4263-b3af-2b6da80ae205") + ) + (segment + (start 130.338 64.0556) + (end 130.576 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "144f5441-2afa-4efb-a140-370a97434e75") + ) + (segment + (start 130.5763 64.0556) + (end 130.576 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "161282bd-1247-4f30-9a16-708b24327a06") + ) + (segment + (start 161.532 64.889) + (end 161.533 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "1be6e3a8-94a0-450b-b0a3-12618b4c9be8") + ) + (segment + (start 161.533 64.8891) + (end 162.723 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "1ce4fa21-4e8d-43fa-b190-de45f9f8900f") + ) + (segment + (start 273.451 64.8892) + (end 273.451 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "1f9bc90f-db97-4c14-a22b-75a590819b4d") + ) + (segment + (start 203.2044 64.0556) + (end 203.204 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "20b17b26-965d-4b9e-aec7-4ac312ac7aa9") + ) + (segment + (start 146.054 64.889) + (end 146.054 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "2336c631-b80b-4eb8-b3e6-6d07c5a75f50") + ) + (segment + (start 203.204 64.8892) + (end 203.204 64.889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "275e5152-6107-40fc-9016-89bca0b53ae1") + ) + (segment + (start 290.12 66.0797) + (end 300.836 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "2cf36da4-36f6-4e98-bdd6-1100479de8fa") + ) + (segment + (start 256.783 66.0797) + (end 257.973 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "34a9502b-1b7b-4d1c-953b-ad3b7f351328") + ) + (segment + (start 131.767 66.0797) + (end 144.864 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "38259aa3-f10b-49ce-93d9-c3a915e36831") + ) + (segment + (start 330.601 64.0556) + (end 330.601 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "3ae8eaed-b346-4aa0-b8ef-456de9601ed8") + ) + (segment + (start 89.845 64.1341) + (end 89.8878 64.1769) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "3cc41b6e-de5c-44f9-8640-1eb2c2a0b42d") + ) + (segment + (start 146.054 64.889) + (end 147.245 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "3f81b7d8-9c1f-42fd-9a1a-d165a2a20cbf") + ) + (segment + (start 302.026 64.8892) + (end 303.217 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "54f9d28d-15f6-4802-871a-5de690a0a4f4") + ) + (segment + (start 273.4513 64.0556) + (end 273.451 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "5629e96c-91e0-443b-9a35-31d488d1d42f") + ) + (segment + (start 315.123 64.0556) + (end 315.123 64.8888) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "5d031ae0-2159-4538-88c7-283da1341c8e") + ) + (segment + (start 204.395 66.0797) + (end 256.783 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "5f68599e-8d15-4019-aaea-ce41e851f4aa") + ) + (segment + (start 146.0544 64.0556) + (end 146.054 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "61875bb2-e29c-422f-bfa2-9fa88335b8eb") + ) + (segment + (start 330.6013 64.0556) + (end 330.601 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "6a8786ac-0f1f-4a82-b49d-a4c5acd5980f") + ) + (segment + (start 315.123 64.8888) + (end 316.314 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "6c834e9e-30ee-4457-8aa5-abdf24d2a424") + ) + (segment + (start 89.845 62.1156) + (end 89.845 64.1341) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "6f3947cc-1efc-4690-9eb9-f225edb399b5") + ) + (segment + (start 161.5325 64.0556) + (end 161.532 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "74606365-beb6-4719-9aff-14f835f6e787") + ) + (segment + (start 257.973 64.8891) + (end 257.973 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "74cfff93-b0c0-4d53-8a77-d89d761a4f0c") + ) + (segment + (start 288.929 64.8889) + (end 290.12 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "7a1ab815-6b1a-487d-81a9-b36fbbd970e9") + ) + (segment + (start 203.204 64.0556) + (end 203.204 64.889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "7a60b6d4-6e4c-4df6-a0e3-8da4de8ba1ac") + ) + (segment + (start 300.836 66.0797) + (end 302.026 64.8892) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "850d1d3d-2485-4ca5-a7e1-147c70b91030") + ) + (segment + (start 288.929 64.8893) + (end 288.929 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "88c6a9ce-6787-4dcd-9a47-35ee1d5bee4b") + ) + (segment + (start 203.204 64.889) + (end 204.395 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "8a309982-e29e-450f-9aa5-a00df16e0784") + ) + (segment + (start 161.532 64.8891) + (end 161.533 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "8fdd2dec-fef2-4e00-94dd-afdc8cc4067f") + ) + (segment + (start 257.9731 64.4721) + (end 257.9731 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "902ca64f-cb06-44d2-ae28-1d40074d7c84") + ) + (segment + (start 273.451 64.0556) + (end 273.451 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "94a12381-732b-4e75-9a74-bf1fca97d83f") + ) + (segment + (start 161.532 64.0556) + (end 161.532 64.889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "96abd499-a5c9-4d16-8c35-1cccc9a59381") + ) + (segment + (start 272.261 66.0797) + (end 273.451 64.8892) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "98f13f40-08a4-4c98-b146-d5af5654d694") + ) + (segment + (start 315.123 64.0556) + (end 315.1231 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "9a1ce293-9d79-4809-8e4e-dba0993e1b56") + ) + (segment + (start 162.723 66.0797) + (end 202.014 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "9bcf7a2e-7129-4c8a-a70e-12ecf07eb74d") + ) + (segment + (start 146.054 64.0556) + (end 146.054 64.889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "9c0d2434-13fc-4c21-91d8-073a30c35cd1") + ) + (segment + (start 302.0263 64.4721) + (end 302.0263 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "a5a1f4d3-6704-4d1a-a802-af9ea6744f37") + ) + (segment + (start 257.973 64.4722) + (end 257.9731 64.4721) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "a832bd77-696e-49b8-a0c7-2fa72fa4dd9b") + ) + (segment + (start 257.973 64.8889) + (end 259.164 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "a86daf2d-32b2-4b04-a481-5f8bc3a03e05") + ) + (segment + (start 302.026 64.4724) + (end 302.0263 64.4721) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "ab2ecc84-7bcb-418f-9dd7-c7b61e5d86f3") + ) + (segment + (start 302.026 64.4724) + (end 302.026 64.8892) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "ad2fe1f4-c0fd-4fab-9046-7f2b5655c47a") + ) + (segment + (start 257.973 64.4722) + (end 257.973 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "aefef3b8-bcec-4d79-bc62-815c6254a123") + ) + (segment + (start 330.601 64.8889) + (end 330.468 65.0224) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "af8ce131-573f-40a2-899d-087c7283fb1c") + ) + (segment + (start 287.739 66.0797) + (end 288.929 64.8893) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "b0609de5-85d5-4012-b0e0-5628e937d079") + ) + (segment + (start 330.601 64.8891) + (end 330.601 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "b1abe100-ff28-4d31-88dc-0d9e0519193a") + ) + (segment + (start 329.411 66.0797) + (end 330.468 65.0224) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "b4c5da7a-b84f-4671-beee-de7b4d570bce") + ) + (segment + (start 313.933 66.0797) + (end 315.123 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "bb218d3e-3c9b-4215-8105-e5657daac99e") + ) + (segment + (start 257.973 64.0556) + (end 257.973 64.4722) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "bdf4b558-adc3-402e-8cd7-b70c3ee04b51") + ) + (segment + (start 288.929 64.0556) + (end 288.929 64.8889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "c1bd9bee-c094-4e89-8879-3aee36c4c6c8") + ) + (segment + (start 160.342 66.0797) + (end 160.342 66.0795) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "c1ddb4a6-b8b0-426f-a869-9d22d6f22dc4") + ) + (segment + (start 259.164 66.0797) + (end 272.261 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "c60e34f0-9825-414f-830e-c5b0945d0775") + ) + (segment + (start 288.9294 64.0556) + (end 288.929 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "cc09d4b0-a8d8-4635-975c-9dc91b5cf194") + ) + (segment + (start 202.014 66.0797) + (end 203.204 64.8892) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "dbdb424b-8b46-4991-8326-fc6bdd30729d") + ) + (segment + (start 330.601 64.8889) + (end 330.601 64.0556) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "e4fa8211-8b46-410e-8388-ea0e6c375c07") + ) + (segment + (start 146.054 64.8891) + (end 146.054 64.889) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "e64ce6b1-1905-4395-8c64-52bab1cc387e") + ) + (segment + (start 144.864 66.0797) + (end 146.054 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "ec10d5ee-5c68-46be-a68a-9ea63e4b86f4") + ) + (segment + (start 130.576 64.8891) + (end 131.767 66.0797) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "ec41da31-8198-4db5-a930-aa8ddec7e2f2") + ) + (segment + (start 330.468 65.0224) + (end 330.601 64.8891) + (width 0.2) + (layer "F.Cu") + (net 53) + (uuid "f634f629-d762-4a47-bfcd-1a058863a9b8") + ) + (via + (at 89.8878 64.1769) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 53) + (uuid "d924210e-8ee0-4cf4-ac5f-98d9f395d7ea") + ) + (segment + (start 129.1024 65.2541) + (end 129.4746 64.8819) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "3e2da94b-1bae-4a8a-a9e2-8346eb254ebd") + ) + (segment + (start 89.8878 64.1769) + (end 90.8682 65.1573) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "424eee22-941f-4f52-8bd5-abd9af713ac5") + ) + (segment + (start 130.5763 64.0556) + (end 129.4746 64.0556) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "8ade2020-81df-46c5-9cd4-e78981cf046e") + ) + (segment + (start 93.1988 65.2541) + (end 129.1024 65.2541) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "aade6876-e852-47c2-89ae-c5744b1dbcd2") + ) + (segment + (start 90.8682 65.1573) + (end 93.102 65.1573) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "b8daa595-e7e7-49bf-8d5e-dae299a3df49") + ) + (segment + (start 129.4746 64.8819) + (end 129.4746 64.0556) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "c98402ed-9e2b-453e-9d7b-4132a4193167") + ) + (segment + (start 93.102 65.1573) + (end 93.1988 65.2541) + (width 0.2) + (layer "In1.Cu") + (net 53) + (uuid "da1f88be-9f66-4ad7-a13c-a065b956d8fd") + ) + (segment + (start 328.816 83.3438) + (end 344.899 83.3438) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "31444ccd-9592-4fde-af0a-8de351cdf8cd") + ) + (segment + (start 323.458 77.9857) + (end 328.816 83.3438) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "5c713ef3-2f55-4281-a1e5-d30f0a51d114") + ) + (segment + (start 344.899 83.3438) + (end 353.888 92.3325) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "6483d7ee-3640-4610-9164-89fb71050a8d") + ) + (segment + (start 353.888 92.3325) + (end 353.888 111.073) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "6cb174ed-ff43-4749-af1e-beff870b619c") + ) + (segment + (start 323.458 75.8876) + (end 323.458 77.9857) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "7abb1177-a258-455b-aecb-a955379fa01f") + ) + (segment + (start 323.458 71.6756) + (end 323.458 75.8876) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "8bd00aae-0973-43bf-a478-f037ec735096") + ) + (segment + (start 353.888 111.073) + (end 353.36 111.601) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "92c73f57-69d6-4c7d-ad7c-c41118aa7b90") + ) + (segment + (start 323.4575 71.6756) + (end 323.4575 75.8871) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "a1ebfd7f-ae49-4102-9b26-18b3bc05bbc5") + ) + (segment + (start 323.4575 75.8871) + (end 323.458 75.8876) + (width 0.2) + (layer "F.Cu") + (net 54) + (uuid "e25d3f4a-1c01-49a9-9777-35acaf8912e7") + ) + (via + (at 353.36 111.601) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 54) + (uuid "24114a4a-e800-4df0-8c62-9998de075a8f") + ) + (segment + (start 350.5858 110.0495) + (end 351.61 110.0495) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "085f25bb-9c41-45ff-85bd-4d466dfa4d22") + ) + (segment + (start 351.61 111.6012) + (end 351.61 110.0495) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "224bd2c7-5536-4134-84fa-38f7d77633fe") + ) + (segment + (start 353.36 111.601) + (end 353.36 111.6012) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "25a1bf8a-7f39-4dd9-8f96-34232f75e67b") + ) + (segment + (start 349.81 110.8253) + (end 350.5858 110.0495) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "3ebc05ba-5517-4b68-a9f5-b6395ef2ee65") + ) + (segment + (start 349.81 111.6012) + (end 349.81 110.8253) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "bac14629-3b41-400b-a901-82f59612222c") + ) + (segment + (start 351.61 110.0495) + (end 352.5842 110.0495) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "bb021e8d-41d0-49a2-aee2-55de331f715f") + ) + (segment + (start 353.36 110.8253) + (end 353.36 111.601) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "dd74c06a-77a7-4711-ae98-5c2c24f67af3") + ) + (segment + (start 352.5842 110.0495) + (end 353.36 110.8253) + (width 0.2) + (layer "B.Cu") + (net 54) + (uuid "e42af473-01e7-4658-85b8-99d8a3baa93c") + ) + (segment + (start 94.9464 63.8382) + (end 98.0119 60.7727) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "28c0e5ff-d5c3-49bc-9281-4bbb7709389d") + ) + (segment + (start 96.5669 64.5697) + (end 95.1231 64.5697) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "38574cc3-aac5-4016-8c58-95ecdac87f16") + ) + (segment + (start 95.845 64.6156) + (end 96.7436 64.6156) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "3b676987-0133-42af-8834-feecdc247d6c") + ) + (segment + (start 98.0119 60.7727) + (end 98.164 60.7727) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "44824e1c-6c56-432d-83a9-251dc903ccbc") + ) + (segment + (start 96.7436 64.4755) + (end 96.7024 64.4343) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "6e5fce2e-06f2-4fbe-b7b8-efce2b2def4d") + ) + (segment + (start 96.7023 64.4343) + (end 96.5669 64.5697) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "aec90f2d-38e1-428c-bb31-1ad45efc0d30") + ) + (segment + (start 96.7024 64.4343) + (end 96.7023 64.4343) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "d11abc11-6a8f-4bac-b267-e158ba7c0f7c") + ) + (segment + (start 94.9464 64.393) + (end 94.9464 63.8382) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "ece4d531-17ef-4255-8f29-261bee7303c8") + ) + (segment + (start 95.1231 64.5697) + (end 94.9464 64.393) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "edc890b0-c23c-40e0-af3b-3b5b9eee8175") + ) + (segment + (start 96.7436 64.6156) + (end 96.7436 64.4755) + (width 0.2) + (layer "F.Cu") + (net 55) + (uuid "f9a8b68c-4dd7-4e94-bcb3-d45dfe445f74") + ) + (via + (at 98.164 60.7727) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 55) + (uuid "058ecee1-a31b-45a7-ab23-e26547754247") + ) + (segment + (start 98.164 60.7727) + (end 98.4177 60.519) + (width 0.2) + (layer "In1.Cu") + (net 55) + (uuid "06b85627-664f-4d18-934d-ade4ad11c4f1") + ) + (segment + (start 116.9969 58.9257) + (end 191.5862 58.9257) + (width 0.2) + (layer "In1.Cu") + (net 55) + (uuid "0df5b396-ca1d-4638-9b2c-f6eb5acd3ff0") + ) + (segment + (start 191.5862 58.9257) + (end 199.315 51.1969) + (width 0.2) + (layer "In1.Cu") + (net 55) + (uuid "5c3065ef-c7f6-43b7-b3fa-ef79ee29962b") + ) + (segment + (start 115.4036 60.519) + (end 116.9969 58.9257) + (width 0.2) + (layer "In1.Cu") + (net 55) + (uuid "a809578e-bb77-4258-b6fd-ffa65e91acae") + ) + (segment + (start 98.4177 60.519) + (end 115.4036 60.519) + (width 0.2) + (layer "In1.Cu") + (net 55) + (uuid "f22e53b3-66f7-4ef8-8381-13450b1fa018") + ) + (segment + (start 99.4876 63.1774) + (end 97.5494 65.1156) + (width 0.2) + (layer "F.Cu") + (net 56) + (uuid "260793f1-4069-4e46-a22b-2b09628a5870") + ) + (segment + (start 97.5494 65.1156) + (end 95.845 65.1156) + (width 0.2) + (layer "F.Cu") + (net 56) + (uuid "c2b9875b-f1a7-4ded-a3bc-19a97bc82bfa") + ) + (via + (at 99.4876 63.1774) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 56) + (uuid "d5b8878d-4d87-4a12-90e2-307eeefc935b") + ) + (segment + (start 121.1942 60.1405) + (end 119.884 61.4507) + (width 0.2) + (layer "In1.Cu") + (net 56) + (uuid "53ff8511-dfd6-46e5-bf70-d06783816838") + ) + (segment + (start 101.2143 61.4507) + (end 99.4876 63.1774) + (width 0.2) + (layer "In1.Cu") + (net 56) + (uuid "76f635d4-aaf4-4d2d-b01a-82172469025f") + ) + (segment + (start 192.9114 60.1405) + (end 121.1942 60.1405) + (width 0.2) + (layer "In1.Cu") + (net 56) + (uuid "d6f20a1d-723c-4834-9cda-0e8eeaadf413") + ) + (segment + (start 201.855 51.1969) + (end 192.9114 60.1405) + (width 0.2) + (layer "In1.Cu") + (net 56) + (uuid "ea395871-ae44-4d66-8601-6703b1a632aa") + ) + (segment + (start 119.884 61.4507) + (end 101.2143 61.4507) + (width 0.2) + (layer "In1.Cu") + (net 56) + (uuid "ffa6f668-08d3-4414-9a97-e21001f745c3") + ) + (segment + (start 97.4169 65.6156) + (end 95.845 65.6156) + (width 0.2) + (layer "F.Cu") + (net 57) + (uuid "c9543e67-ced7-4c5c-bc27-15144b92ac4c") + ) + (segment + (start 99.9263 68.125) + (end 97.4169 65.6156) + (width 0.2) + (layer "F.Cu") + (net 57) + (uuid "fc29e8f0-8be7-45c3-9a0b-fc4059c448fb") + ) + (segment + (start 100.948 115.617) + (end 88.1571 102.827) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "0f33d32a-bb1b-4457-b46f-2e9f990f4f68") + ) + (segment + (start 88.1571 102.827) + (end 88.1571 91.9293) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "118a3cca-f727-4146-98f7-7877aed9a457") + ) + (segment + (start 141.292 78.5813) + (end 141.292 75.1284) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "12b62e16-08b3-46bb-9dd0-670a93fa98af") + ) + (segment + (start 137.21 82.6632) + (end 141.292 78.5813) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "14ed5fec-3740-40d7-a1c2-ff17ecd069e2") + ) + (segment + (start 100.948 130.651) + (end 100.948 115.617) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "3b10f57e-16db-4609-8d15-4a2a6168e6ad") + ) + (segment + (start 97.4232 82.6632) + (end 137.21 82.6632) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "4c1c457b-1b2f-46c4-a9e2-bb9824dc5558") + ) + (segment + (start 141.2919 71.6756) + (end 141.292 71.6756) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "c686a55c-a791-44a3-ab01-8f09f0462e01") + ) + (segment + (start 141.292 75.1284) + (end 141.292 71.6756) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "cdae58f2-3ac0-41b0-b8a0-b45d310b4bea") + ) + (segment + (start 141.292 73.402) + (end 141.292 71.6756) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "d57e4e1f-0665-43f3-8227-610ad4360059") + ) + (segment + (start 88.1571 91.9293) + (end 97.4232 82.6632) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "ebbaa28c-1f63-4af7-ae74-801624b001a4") + ) + (segment + (start 141.292 75.1284) + (end 141.292 71.6756) + (width 0.2) + (layer "F.Cu") + (net 58) + (uuid "f8ea1532-838a-4655-a89b-87e8c3900b57") + ) + (via + (at 100.948 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 58) + (uuid "bc581035-d95e-44b0-9800-5892e2b4469e") + ) + (segment + (start 99.1975 129.0995) + (end 100.1717 129.0995) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "20b8edf6-2f12-4149-aeb6-943f03055857") + ) + (segment + (start 97.3975 130.6512) + (end 97.3975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "2ebd8ac3-9a8e-4444-ae4f-788654bc8927") + ) + (segment + (start 100.9475 129.8753) + (end 100.9475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "40c19b27-594c-47ef-b7ec-d0d2bfc3d1d4") + ) + (segment + (start 99.1975 130.6512) + (end 99.1975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "77745fe8-8732-48f2-80eb-35a77653094a") + ) + (segment + (start 100.9478 130.6512) + (end 100.948 130.651) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "88de25d4-2f4a-40ed-baad-523d5790233f") + ) + (segment + (start 98.1733 129.0995) + (end 99.1975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "99ab83df-0ae7-4116-919f-40ab2187b89c") + ) + (segment + (start 97.3975 129.8753) + (end 98.1733 129.0995) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "9c6d0898-ab63-4657-8199-2c6e20f56d08") + ) + (segment + (start 100.9475 130.6512) + (end 100.9478 130.6512) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "b464e27c-ecba-45d0-bd1c-ebe2e22cddf7") + ) + (segment + (start 99.1975 130.6512) + (end 99.1975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "d1eae929-6104-4d1a-9059-6757074081f0") + ) + (segment + (start 100.1717 129.0995) + (end 100.9475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 58) + (uuid "db9f4d07-7b14-4001-838a-526c60fc3951") + ) + (segment + (start 119.998 130.651) + (end 119.998 120.39) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "124795ea-51e5-43eb-8510-44af1a445df1") + ) + (segment + (start 119.998 120.39) + (end 116.289 116.681) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "19a79a5f-43df-4d0b-b7fe-bb553f71781d") + ) + (segment + (start 107.687 85.1341) + (end 108.493 84.3278) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "30257fd8-df38-49d5-8547-729a9b359d7e") + ) + (segment + (start 116.289 110.728) + (end 107.687 102.126) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "4c17c623-b76a-4b50-9095-24c92d97ad77") + ) + (segment + (start 108.493 84.3278) + (end 151.024 84.3278) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "52ee3a9b-c298-4e30-938d-d14b7d39fc8f") + ) + (segment + (start 107.687 102.126) + (end 107.687 85.1341) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "8eb2698b-a1d2-4e8f-afe8-829bd95ee2fd") + ) + (segment + (start 151.024 84.3278) + (end 156.77 78.5813) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "aa248d01-8aca-4631-b82a-98b09a39980e") + ) + (segment + (start 156.77 78.5813) + (end 156.77 71.6756) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "c2a707c3-ba5c-4b22-b596-682d6888a715") + ) + (segment + (start 116.289 116.681) + (end 116.289 110.728) + (width 0.2) + (layer "F.Cu") + (net 59) + (uuid "ff276fda-c38c-4864-bd55-196c333127ca") + ) + (via + (at 119.998 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 59) + (uuid "6868b5f8-1e2d-4b0a-ac3c-f135873e0c42") + ) + (segment + (start 117.2233 129.0995) + (end 118.2475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "184e18e6-5e90-4e3e-a300-3376a01a0484") + ) + (segment + (start 119.2217 129.0995) + (end 119.9975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "421041ff-5450-4942-83fe-253cef575ef3") + ) + (segment + (start 119.9975 129.8753) + (end 119.9975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "68ca34cd-8b2a-42a7-9807-f1a50509802a") + ) + (segment + (start 118.2475 130.6512) + (end 118.2475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "6e551cfd-6903-4717-b8e1-1a9183d96b25") + ) + (segment + (start 118.2475 129.0995) + (end 119.2217 129.0995) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "b7f15477-d470-4551-8cda-dead900eee68") + ) + (segment + (start 116.4475 130.6512) + (end 116.4475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "cd38865a-37cf-4cd2-9c23-3eed99e3a06c") + ) + (segment + (start 119.9977 130.651) + (end 119.9975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "e2915c2d-c005-4634-8871-dc99caef65d7") + ) + (segment + (start 116.4475 129.8753) + (end 117.2233 129.0995) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "ef6b0415-1bc3-47b3-8643-6cf781dcfdc4") + ) + (segment + (start 119.998 130.651) + (end 119.9977 130.651) + (width 0.2) + (layer "B.Cu") + (net 59) + (uuid "f49118cb-bcd7-4926-a2f4-3f35db8642c9") + ) + (segment + (start 164.862 85.9678) + (end 172.248 78.5813) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "07d66ed5-78ad-42e7-900a-680c3ece7be1") + ) + (segment + (start 125.564 102.133) + (end 125.564 90.7379) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "37061a5c-2ba6-4682-8264-30a5d2a654ac") + ) + (segment + (start 172.248 78.5813) + (end 172.248 75.1284) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "4ec2f363-98f0-400a-8ace-59c7f24c1183") + ) + (segment + (start 172.2481 75.1283) + (end 172.2481 71.6756) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "8aa8ed1c-abf7-4402-bd05-0d476bdcd6ae") + ) + (segment + (start 130.334 85.9678) + (end 164.862 85.9678) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "a0e97540-cd43-461d-a5cd-9cbf6d6aba6a") + ) + (segment + (start 139.048 115.617) + (end 125.564 102.133) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "da80695d-9e4f-4d08-ab58-6c6f72fa41c8") + ) + (segment + (start 172.248 75.1284) + (end 172.248 71.6756) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "e1b55c67-eb18-4dcb-bd1e-21a9e9348dcb") + ) + (segment + (start 172.248 75.1284) + (end 172.2481 75.1283) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "e58df671-53da-423f-9282-e2a4dedfcc41") + ) + (segment + (start 125.564 90.7379) + (end 130.334 85.9678) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "eb824d1e-c0eb-4bdb-90d1-6ea9f549ceb4") + ) + (segment + (start 139.048 130.651) + (end 139.048 115.617) + (width 0.2) + (layer "F.Cu") + (net 60) + (uuid "f3bdf734-828d-4096-94de-c2ef4a2ea3c7") + ) + (via + (at 139.048 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 60) + (uuid "7fd573f9-c2ed-4b26-a587-9857b7755628") + ) + (segment + (start 135.4975 129.8753) + (end 136.2733 129.0995) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "0af22023-31c5-4765-8101-75eb5abed784") + ) + (segment + (start 137.2975 129.0995) + (end 138.2717 129.0995) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "0cf94b4e-d9dd-4f16-9fc9-bb195f9b4b5a") + ) + (segment + (start 139.0477 130.651) + (end 139.0475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "3598a2b0-c9d8-4496-a210-31ec6c470980") + ) + (segment + (start 138.2717 129.0995) + (end 139.0475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "44eb7ec2-ecaf-43cd-898e-02369ebd8d41") + ) + (segment + (start 136.2733 129.0995) + (end 137.2975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "57738819-2e4b-4175-9618-dba75dd3a720") + ) + (segment + (start 137.2975 130.6512) + (end 137.2975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "8beeb7df-cd3e-4c9f-a4fd-6526938aea20") + ) + (segment + (start 139.048 130.651) + (end 139.0477 130.651) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "b65458cb-21dc-4aad-8e58-11cd57601a59") + ) + (segment + (start 139.0475 129.8753) + (end 139.0475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "cccb5781-2b77-41e8-b020-9f8974e9c65b") + ) + (segment + (start 135.4975 130.6512) + (end 135.4975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 60) + (uuid "eb97a35a-e312-4d33-a6a4-134735671e71") + ) + (segment + (start 147.479 87.3419) + (end 176.584 87.3419) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "0c7128ca-cf55-4c07-b043-d34fd9832643") + ) + (segment + (start 158.098 130.651) + (end 158.098 129.32) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "1a00a6cb-5e86-45f8-8cf7-6470d31adf56") + ) + (segment + (start 145.192 92.7329) + (end 144.597 92.1376) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "456e7ba4-2171-4ff5-9dd7-c5ff1bc49f45") + ) + (segment + (start 158.098 129.32) + (end 153.794 125.016) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "4955b00d-d993-49a1-9c74-adc6d0d6090e") + ) + (segment + (start 185.345 78.5813) + (end 185.345 71.6756) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "6e95f708-a0fa-4756-8088-03c3a2adeb58") + ) + (segment + (start 153.838 124.971) + (end 153.838 111.382) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "7437ed73-62f6-4fa5-945d-d62e56b89194") + ) + (segment + (start 145.192 102.736) + (end 145.192 92.7329) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "7dd32558-5132-4a59-a395-9285576786aa") + ) + (segment + (start 144.597 92.1376) + (end 144.597 90.2246) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "8900af7a-2aa8-4227-9b97-2cf575756d10") + ) + (segment + (start 153.838 111.382) + (end 145.192 102.736) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "8d1b3481-c224-46bf-9f70-d367cdaaaf81") + ) + (segment + (start 176.584 87.3419) + (end 185.345 78.5813) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "8d9ba251-9615-456a-af57-5be2b49e4c17") + ) + (segment + (start 153.794 125.016) + (end 153.838 124.971) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "a1ecb136-e24d-438b-b9df-36340d681694") + ) + (segment + (start 144.597 90.2246) + (end 147.479 87.3419) + (width 0.2) + (layer "F.Cu") + (net 61) + (uuid "b4caca31-eccf-4720-af3f-cdaf1c363fda") + ) + (via + (at 158.098 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 61) + (uuid "dd603398-e003-4cd3-90cc-720031f96551") + ) + (segment + (start 154.5475 129.8753) + (end 155.3233 129.0995) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "18d5f91a-ea28-4229-b801-72f92db0259b") + ) + (segment + (start 157.3217 129.0995) + (end 158.0975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "41f40e3d-3a7e-48d6-b0f5-1e1bbbf30c29") + ) + (segment + (start 154.5475 130.6512) + (end 154.5475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "4d311287-29ab-42f9-8e7a-3a9b1e90c832") + ) + (segment + (start 155.3233 129.0995) + (end 156.3475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "5236f4cd-38d6-4f74-9c6a-06c1f142ddf1") + ) + (segment + (start 158.0977 130.651) + (end 158.0975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "57e13e9f-6496-408c-9576-5bf337cc26c4") + ) + (segment + (start 158.0975 129.8753) + (end 158.0975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "6502c170-1ec6-4cf4-9f60-3dae4ff13477") + ) + (segment + (start 156.3475 129.0995) + (end 157.3217 129.0995) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "e5c711e3-e1f7-4bec-821f-d0b45fc11a35") + ) + (segment + (start 156.3475 130.6512) + (end 156.3475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "e8cd6e90-1ac1-442a-a23c-12bc28f40058") + ) + (segment + (start 158.098 130.651) + (end 158.0977 130.651) + (width 0.2) + (layer "B.Cu") + (net 61) + (uuid "eee0274c-a395-46c6-9a72-35c37bdd7af9") + ) + (segment + (start 163.728 102.736) + (end 163.728 90.3019) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "0724d940-1340-4abe-9a3e-1211ddf3c998") + ) + (segment + (start 163.728 102.736) + (end 163.744 102.752) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "2296f908-e4f7-4a10-a1db-5af97f04d206") + ) + (segment + (start 163.744 102.788) + (end 171.685 110.728) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "2c24158e-a37e-4457-89bd-cc4d430c7906") + ) + (segment + (start 165.376 88.6539) + (end 188.369 88.6539) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "3761f959-e0a6-4f3b-9c55-b5b23e7b198b") + ) + (segment + (start 173.439 126.802) + (end 177.148 130.51) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "41425dfd-5813-4bea-aae9-e19dbedcd8a6") + ) + (segment + (start 198.442 75.1284) + (end 198.442 71.6756) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "620d43d8-05f9-4808-ac84-7cd5cb1a4638") + ) + (segment + (start 172.184 110.728) + (end 173.439 111.983) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "6627549f-acae-46a7-882c-0166fa4d5919") + ) + (segment + (start 198.4419 75.1283) + (end 198.4419 71.6756) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "7de14902-dfbc-4f0a-8a3e-1bf08d731950") + ) + (segment + (start 163.744 102.752) + (end 163.744 102.788) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "80577eb5-daee-4378-b93f-8001a082e08d") + ) + (segment + (start 198.442 78.5813) + (end 198.442 75.1284) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "86ca1882-972c-4fc9-ae78-003ef374ec1d") + ) + (segment + (start 198.442 75.1284) + (end 198.4419 75.1283) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "871bd320-6598-4874-b567-5e31a2853d8e") + ) + (segment + (start 171.685 110.728) + (end 172.184 110.728) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "aba10507-daa9-41ca-8707-84bb00b66b7c") + ) + (segment + (start 173.439 111.983) + (end 173.439 126.802) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "b6aa08f0-9b6f-4918-b7eb-394d675767f8") + ) + (segment + (start 177.148 130.51) + (end 177.148 130.651) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "ca9486d1-780a-4ac0-933d-9b2cf726b2a2") + ) + (segment + (start 163.728 102.772) + (end 163.728 102.736) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "e1a6f372-b2a7-4da4-bb2c-b27929b72b34") + ) + (segment + (start 188.369 88.6539) + (end 198.442 78.5813) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "eedafba8-132d-4860-8138-82969227ffb1") + ) + (segment + (start 163.728 90.3019) + (end 165.376 88.6539) + (width 0.2) + (layer "F.Cu") + (net 62) + (uuid "f360f76a-793c-418b-9aaa-bb2eecd6054a") + ) + (via + (at 177.148 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 62) + (uuid "757f7865-c6c1-4188-a53d-304e99cdcaa1") + ) + (segment + (start 175.3975 130.6512) + (end 175.3975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "011a5561-8588-4f32-8347-686293cac32f") + ) + (segment + (start 177.1478 130.6512) + (end 177.148 130.651) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "287e370e-3246-4053-b7f8-eb0bffa1e490") + ) + (segment + (start 173.5975 130.6512) + (end 173.5975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "2dbdc70e-b3a5-4610-a113-6b3d3b48d338") + ) + (segment + (start 177.1475 130.6512) + (end 177.1478 130.6512) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "63901160-18eb-4aa9-86a0-bf37d473b4c1") + ) + (segment + (start 175.3975 129.8753) + (end 176.3716 129.8753) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "65086b41-f941-4e76-88b4-120cd926e95d") + ) + (segment + (start 175.3975 129.8753) + (end 175.3975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "828aaee3-6cda-4e1b-b82f-7d61a94712dc") + ) + (segment + (start 174.3733 129.0995) + (end 175.3975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "a826f8b1-1b1a-4cb8-a322-42ce31c51d89") + ) + (segment + (start 176.3716 129.8753) + (end 177.1475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "db88b88e-bd1e-4c66-a9e0-1e00b1ea3020") + ) + (segment + (start 173.5975 129.8753) + (end 174.3733 129.0995) + (width 0.2) + (layer "B.Cu") + (net 62) + (uuid "de2c9506-d5be-41c1-8222-29c7e6feeb04") + ) + (segment + (start 183.292 92.0446) + (end 183.292 102.711) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "1b964474-e054-49ca-8a07-d60b0eb061f5") + ) + (segment + (start 183.292 102.711) + (end 192.489 111.908) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "220be0df-6b9f-4d0b-aeb6-acf22acc15fb") + ) + (segment + (start 196.414 90.2722) + (end 196.392 90.2939) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "53cdb6d7-c9b3-4a79-a63e-af974439dd77") + ) + (segment + (start 196.392 90.2939) + (end 185.042 90.2939) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "71ed71bc-f557-4ef3-82a9-82f9cbc83a93") + ) + (segment + (start 192.489 111.908) + (end 192.489 126.802) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "91172a55-3a1e-4b2e-a136-d3752a5bc3f4") + ) + (segment + (start 185.042 90.2939) + (end 183.292 92.0446) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "ad9051f6-bc4b-40eb-949c-319acf8b2101") + ) + (segment + (start 196.198 130.51) + (end 196.198 130.651) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "b157d61a-3278-455a-97dd-4817a78db2ab") + ) + (segment + (start 192.489 126.802) + (end 196.198 130.51) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "b4fba8d4-ae6b-4cf9-9cc4-ada860b60e78") + ) + (segment + (start 213.92 78.5813) + (end 208.89 83.6111) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "b67c3245-0d97-4dc0-b117-2d0981e219be") + ) + (segment + (start 198.193 90.2722) + (end 196.414 90.2722) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "cae98a30-33da-4ad3-a930-ccea6ef2a152") + ) + (segment + (start 208.89 83.6111) + (end 204.855 83.6111) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "d1e685b8-650d-43cf-9295-1307fd477d48") + ) + (segment + (start 213.92 71.6756) + (end 213.92 78.5813) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "e23e15f6-d762-4134-a0df-6ac5b87d9861") + ) + (segment + (start 204.855 83.6111) + (end 198.193 90.2722) + (width 0.2) + (layer "F.Cu") + (net 63) + (uuid "f2e6fdd5-75b4-4a4a-b066-5f5c29ddbcac") + ) + (via + (at 196.198 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 63) + (uuid "fe10e416-ce24-402d-b3a0-b2b4edd03629") + ) + (segment + (start 194.4475 130.6512) + (end 194.4475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "00ab520a-e5de-4bf1-867f-3b0f4ff7b3fc") + ) + (segment + (start 194.4475 130.6512) + (end 194.4475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "0afe2b17-80a1-44d4-917a-262df09ee4e4") + ) + (segment + (start 196.1975 130.651) + (end 196.1975 129.8752) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "58228f6f-41d0-4256-8c28-17fd06328acb") + ) + (segment + (start 196.1975 129.8752) + (end 195.4218 129.0995) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "81e177c5-917e-47f6-9316-69dc27dd2e2e") + ) + (segment + (start 195.4218 129.0995) + (end 194.4475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "86f24f6b-c2cc-4317-8098-2839310334b2") + ) + (segment + (start 192.6475 129.8753) + (end 193.4233 129.0995) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "93926c29-e7ba-4c06-9d5a-2c5195651211") + ) + (segment + (start 196.198 130.651) + (end 196.1975 130.651) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "ae3d2b6f-619c-4474-9c09-19b8d3dd74c3") + ) + (segment + (start 196.1975 130.6512) + (end 196.1975 130.651) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "b2c29213-9195-402d-9e84-9dc8e63685b6") + ) + (segment + (start 192.6475 130.6512) + (end 192.6475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "f1ccb7e8-8f8b-4c47-9b28-5fc51f3498d4") + ) + (segment + (start 193.4233 129.0995) + (end 194.4475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 63) + (uuid "f8c6a7d9-a878-432b-900e-39453bdfa52b") + ) + (segment + (start 215.248 130.651) + (end 211.539 126.943) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "0beb9b11-65b6-4378-ba72-93d4a8eec09a") + ) + (segment + (start 211.539 126.943) + (end 211.539 111.323) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "0f7427db-6d97-48b0-a6b3-9836d4a06abf") + ) + (segment + (start 207.236 85.9923) + (end 219.606 85.9923) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "12c1e9c0-b1f9-45fe-8cf2-bf0a21de26a2") + ) + (segment + (start 201.764 101.548) + (end 201.764 91.4647) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "2f7fefb5-9993-4760-b7b2-f694df5cf0ac") + ) + (segment + (start 227.017 75.1283) + (end 227.017 71.6756) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "50c549a9-f4d7-4a04-ad30-021ffe61630f") + ) + (segment + (start 201.764 91.4647) + (end 207.236 85.9923) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "b9b504aa-9421-4cfa-a2b9-0f72d8787f8a") + ) + (segment + (start 211.539 111.323) + (end 201.764 101.548) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "c4dbdda4-d7e1-4465-a549-59a4a2068798") + ) + (segment + (start 227.0169 71.6756) + (end 227.017 71.6756) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "c59d18bc-89c7-4208-a52d-6b9d4683627d") + ) + (segment + (start 219.606 85.9923) + (end 227.017 78.5813) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "e30e6f37-f657-4483-8155-f1561190c176") + ) + (segment + (start 227.017 78.5813) + (end 227.017 75.1283) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "ec60be9c-89d0-49f6-81ed-47cbca59fda1") + ) + (segment + (start 227.017 75.1283) + (end 227.017 71.6756) + (width 0.2) + (layer "F.Cu") + (net 64) + (uuid "ed7d3c8a-648a-40ea-8990-eb28df0dcadf") + ) + (via + (at 215.248 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 64) + (uuid "d460ef23-b33a-4969-b969-c2ca37df8a76") + ) + (segment + (start 215.2475 129.8753) + (end 215.2475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "1a0d4366-78e3-4ffd-b0eb-b49a36b0870e") + ) + (segment + (start 212.4733 129.0995) + (end 213.4975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "24317b95-ac56-4413-8647-f787dd6be112") + ) + (segment + (start 211.6975 130.6512) + (end 211.6975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "368878b9-1f70-4f59-8de2-aa5bbaa76d39") + ) + (segment + (start 213.4975 130.6512) + (end 213.4975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "3e69c0ed-56bb-4372-a8a9-5f2871e57277") + ) + (segment + (start 211.6975 129.8753) + (end 212.4733 129.0995) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "6bc5cdef-43e2-47db-ad04-57733abf0348") + ) + (segment + (start 215.2478 130.6512) + (end 215.248 130.651) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "830de4ff-7335-4bef-bfe0-12ee10a04c1f") + ) + (segment + (start 213.4975 130.6512) + (end 213.4975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "9eec1b61-425d-4b97-98f1-e9936fe40e49") + ) + (segment + (start 213.4975 129.0995) + (end 214.4717 129.0995) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "a9740588-38fd-47f6-988c-6e8ef2defe3a") + ) + (segment + (start 215.2475 130.6512) + (end 215.2478 130.6512) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "eec88a91-1cff-4935-a61c-bf075d5a583d") + ) + (segment + (start 214.4717 129.0995) + (end 215.2475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 64) + (uuid "ff11e88f-4b2e-454b-9b0f-00bbf0faa122") + ) + (segment + (start 240.114 78.5813) + (end 240.114 75.1284) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "08132394-ff5e-4c29-ba39-3ff5e2feb862") + ) + (segment + (start 240.114 75.1284) + (end 240.114 71.6756) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "1e927097-d202-48a9-b645-47555753d28e") + ) + (segment + (start 220.814 101.782) + (end 220.814 89.4159) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "2301300c-e504-4f29-b6cd-5d9fde9736fb") + ) + (segment + (start 240.1138 71.6756) + (end 240.114 71.6756) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "5dc00d8d-4619-4b2c-b009-d9a0fd01bec8") + ) + (segment + (start 234.298 130.651) + (end 234.298 115.627) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "661c4121-dbab-43f2-81cb-e9192acb079b") + ) + (segment + (start 225.039 85.1904) + (end 233.505 85.1904) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "8e189edb-a1ef-4141-8741-80fbb3a28ad6") + ) + (segment + (start 220.797 102.126) + (end 220.797 101.798) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "9c4a9e92-6369-4791-9e86-301d97fc31fc") + ) + (segment + (start 240.114 75.1284) + (end 240.114 71.6756) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "a5bee8e6-7f87-44fb-9e6a-923599bf2efd") + ) + (segment + (start 220.814 89.4159) + (end 225.039 85.1904) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "bee0c605-e17e-4eac-aab7-97d92f2b4b28") + ) + (segment + (start 233.505 85.1904) + (end 240.114 78.5813) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "c374caf3-bc99-4ea4-910f-1e209cebe418") + ) + (segment + (start 220.797 101.798) + (end 220.814 101.782) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "f5b4e53e-0d86-4498-806c-5d25a4ec0814") + ) + (segment + (start 234.298 115.627) + (end 220.797 102.126) + (width 0.2) + (layer "F.Cu") + (net 65) + (uuid "f8802c93-2f56-4beb-be5e-3aa34fd610ce") + ) + (via + (at 234.298 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 65) + (uuid "4f5daa53-8898-4120-b058-ef6b61922c6a") + ) + (segment + (start 234.2975 130.6512) + (end 234.2978 130.6512) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "2a96c36f-334b-49fc-9d48-d07c9931efdd") + ) + (segment + (start 233.5217 129.0995) + (end 234.2975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "327839cd-69c4-4d07-a77c-1ff613ab5b6f") + ) + (segment + (start 232.5475 130.6512) + (end 232.5475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "58e78166-8353-42e7-9128-6059494cf97e") + ) + (segment + (start 231.5233 129.0995) + (end 232.5475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "5a559aee-2d9d-4c26-a1b6-cb7db9a13eb0") + ) + (segment + (start 232.5475 129.0995) + (end 233.5217 129.0995) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "6c2c3b5b-a12d-4192-9ca3-4f82117084a6") + ) + (segment + (start 232.5475 130.6512) + (end 232.5475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "75661e6f-f11f-4854-a395-5a6111a7af13") + ) + (segment + (start 234.2975 129.8753) + (end 234.2975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "9edaf9a6-2776-44c5-9be1-7fe97b209d47") + ) + (segment + (start 234.2978 130.6512) + (end 234.298 130.651) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "c2b0fc59-8c9e-4ff5-adb7-033479ef02ec") + ) + (segment + (start 230.7475 130.6512) + (end 230.7475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "d6336179-933c-475f-ac63-d413d72c1d59") + ) + (segment + (start 230.7475 129.8753) + (end 231.5233 129.0995) + (width 0.2) + (layer "B.Cu") + (net 65) + (uuid "f9f24886-219f-4112-a93e-b2210dee626f") + ) + (segment + (start 253.211 76.319) + (end 253.2106 76.3186) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "11f3a212-9f37-475a-9647-da7b2eedd911") + ) + (segment + (start 253.348 126.343) + (end 253.348 130.651) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "35f3fe60-a1b0-4d1a-9f08-646f4cd9c354") + ) + (segment + (start 241.152 91.334) + (end 241.152 103.422) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "5577623b-2e72-40df-9ac8-b3b361b6df26") + ) + (segment + (start 250.234 83.9391) + (end 248.547 83.9391) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "56454d36-7a5f-43c0-ad2d-bb0cbccc1dc0") + ) + (segment + (start 253.211 76.319) + (end 253.211 80.9625) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "622702b0-ae62-4636-bd97-baf04258f736") + ) + (segment + (start 241.152 103.422) + (end 250.234 112.504) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "6d533b32-766d-4319-b658-1035b9969d03") + ) + (segment + (start 253.211 80.9625) + (end 250.234 83.9391) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "7eaaf23c-986e-42f7-af9e-c204f15fa020") + ) + (segment + (start 250.234 123.23) + (end 253.348 126.343) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "81dec918-82a2-4818-ab58-1b19f30cc155") + ) + (segment + (start 253.2106 76.3186) + (end 253.2106 71.6756) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "bf695af4-30ba-46df-a219-e41a233620cd") + ) + (segment + (start 253.211 71.6756) + (end 253.211 76.319) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "cdfe2655-84ca-4ab9-9603-3feec3ac3849") + ) + (segment + (start 250.234 112.504) + (end 250.234 123.23) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "dd09ee84-6988-4174-bd82-3da30d192cd5") + ) + (segment + (start 248.547 83.9391) + (end 241.152 91.334) + (width 0.2) + (layer "F.Cu") + (net 66) + (uuid "ec596d21-15b1-438a-8146-d077da6e96a3") + ) + (via + (at 253.348 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 66) + (uuid "2b78d40e-6c14-4f4a-8689-73efea854071") + ) + (segment + (start 253.3475 129.8753) + (end 253.3475 130.651) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "03300294-a3bb-4a4e-81ed-84a068e1818b") + ) + (segment + (start 251.5975 129.0995) + (end 252.5717 129.0995) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "0d7e976e-2721-4d06-9395-0ff5e84f40f1") + ) + (segment + (start 249.7975 130.6512) + (end 249.7975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "10f25d32-7578-4bc1-9cdd-58a75e395941") + ) + (segment + (start 253.3475 130.651) + (end 253.3475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "2e09b79a-2705-4fc9-ad5e-3e5d9809aa05") + ) + (segment + (start 249.7975 129.8753) + (end 250.5733 129.0995) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "363b520e-00f7-4819-a29d-7c9ca9398074") + ) + (segment + (start 253.3475 130.651) + (end 253.348 130.651) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "405600e4-cbbd-4146-8c58-6d2f65f76b31") + ) + (segment + (start 251.5975 130.6512) + (end 251.5975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "5bd4ae4c-8ba7-4a24-937f-218d8b8b059a") + ) + (segment + (start 252.5717 129.0995) + (end 253.3475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "c4906f8b-6101-4a22-b098-6af3c6f9fd9b") + ) + (segment + (start 250.5733 129.0995) + (end 251.5975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 66) + (uuid "db73fb42-e266-4616-8902-f1f38991a06a") + ) + (segment + (start 268.6888 74.2947) + (end 268.6888 71.6756) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "18c133fe-ddf6-42fb-9f2b-b8ca6ebf6b32") + ) + (segment + (start 268.689 74.2949) + (end 268.6888 74.2947) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "207477fa-bd00-4f90-bd13-1d14975c4f69") + ) + (segment + (start 268.689 76.9143) + (end 268.689 74.2949) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "38173971-e6a9-41db-aace-46175ae30a40") + ) + (segment + (start 268.689 82.8475) + (end 268.689 76.9143) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "80978af1-4587-4d28-851c-892920bfa6dd") + ) + (segment + (start 272.398 130.651) + (end 272.398 129.915) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "83de946e-287a-4531-b559-4bf4b86d7d3d") + ) + (segment + (start 268.689 111.323) + (end 259.164 101.798) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "87e12b24-8196-4f73-9e40-ed2e08b3bf6e") + ) + (segment + (start 272.398 129.915) + (end 268.689 126.206) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "89baa9fc-aa62-47d6-91d5-1a78311756c7") + ) + (segment + (start 268.689 76.9143) + (end 268.689 74.2949) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "8d55d5c3-eae1-4efa-9c95-cfca04074010") + ) + (segment + (start 268.689 126.206) + (end 268.689 111.323) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "cf9d0bcc-e10e-486c-b416-686699574b25") + ) + (segment + (start 259.164 92.3725) + (end 268.689 82.8475) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "d0ebb842-6841-403a-b411-bb4e0254c49d") + ) + (segment + (start 259.164 101.798) + (end 259.164 92.3725) + (width 0.2) + (layer "F.Cu") + (net 67) + (uuid "f6ec2ad8-6a1e-40a0-999e-ff853c64109d") + ) + (via + (at 272.398 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 67) + (uuid "21938b24-dd1e-459d-b37d-ac16ab802295") + ) + (segment + (start 268.8475 129.8753) + (end 269.6233 129.0995) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "06453997-a089-4d17-b259-e81dac63636e") + ) + (segment + (start 270.6475 129.8753) + (end 271.6216 129.8753) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "25ca2aa9-b340-4b34-b343-8adf96739964") + ) + (segment + (start 272.3977 130.651) + (end 272.3975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "56a95c45-96a6-46cf-8568-02751982069a") + ) + (segment + (start 272.398 130.651) + (end 272.3977 130.651) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "5d14e4b4-a18e-4822-b546-1e74c0684fd9") + ) + (segment + (start 269.6233 129.0995) + (end 270.6475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "61fafd10-2500-411a-9c20-0150411c8823") + ) + (segment + (start 270.6475 129.8753) + (end 270.6475 129.0995) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "84c6bcca-28f6-40d1-9028-0744b9186c4a") + ) + (segment + (start 271.6216 129.8753) + (end 272.3975 130.6512) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "952ed42b-2380-4b4b-a5c8-88c10645598c") + ) + (segment + (start 268.8475 130.6512) + (end 268.8475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "c8e293e3-4e6e-4611-b04c-b94fc30a580a") + ) + (segment + (start 270.6475 130.6512) + (end 270.6475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 67) + (uuid "d2db7366-6236-42c7-b72a-f2e0ebdd6a00") + ) + (segment + (start 278.095 89.1655) + (end 278.095 87.0347) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "2e7765fd-ff4f-4924-93b0-0660f0d33616") + ) + (segment + (start 291.448 115.617) + (end 286.559 110.728) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "2f44f839-6e00-4b2a-a2c9-21f63de648ea") + ) + (segment + (start 286.559 110.728) + (end 286.276 110.728) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "446c2d1a-8022-4070-a69e-136ea6c97ab7") + ) + (segment + (start 277.947 102.394) + (end 277.964 102.377) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "6fb81cfb-b5c3-4d31-bed2-c83e87169742") + ) + (segment + (start 291.448 130.651) + (end 291.448 115.617) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "72541263-d600-421b-9b9e-dea974e05415") + ) + (segment + (start 284.167 80.9625) + (end 284.167 72.7758) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "752e2448-6b62-4965-b303-5f649fea8bfe") + ) + (segment + (start 277.964 89.2969) + (end 278.095 89.1655) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "768ce7fa-8d4a-4105-9977-80b272935382") + ) + (segment + (start 284.167 71.6756) + (end 284.167 72.7758) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "7716b79c-79fb-45e3-9246-4b77e5530ef5") + ) + (segment + (start 278.095 87.0347) + (end 284.167 80.9625) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "95e1b3fb-166d-4955-8162-5cdcf4ccbdd5") + ) + (segment + (start 286.276 110.728) + (end 277.947 102.399) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "9639e1f7-f749-4238-b0db-e0ca4ae68fd9") + ) + (segment + (start 277.947 102.399) + (end 277.947 102.394) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "9ce4eb39-68b9-4e19-bd94-1f0d8cc9326c") + ) + (segment + (start 284.1669 71.6756) + (end 284.167 71.6756) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "9cf7514f-d16f-4103-915d-78299773ded4") + ) + (segment + (start 284.167 72.7758) + (end 284.167 71.6756) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "aaeb1b9c-9be2-4005-9dd5-0ae36fa7aa02") + ) + (segment + (start 277.964 102.377) + (end 277.964 89.2969) + (width 0.2) + (layer "F.Cu") + (net 68) + (uuid "e065b23e-387a-45f0-bec1-45bc2c6532c5") + ) + (via + (at 291.448 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 68) + (uuid "d4bf2e65-4265-46eb-a5b4-02cd82a8bcb0") + ) + (segment + (start 291.4475 130.651) + (end 291.4475 130.6512) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "2a66c0d8-5c14-484e-8145-dfea38255651") + ) + (segment + (start 291.4475 130.651) + (end 291.448 130.651) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "4b7f1498-53a4-46e8-bdbe-21a216e3a37d") + ) + (segment + (start 290.6717 129.0995) + (end 291.4475 129.8753) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "6b77422d-f86e-45f2-ba9c-c0bda852a9e4") + ) + (segment + (start 287.8975 129.8753) + (end 288.6733 129.0995) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "7ae193cd-624f-43e1-b16a-f233c47836ed") + ) + (segment + (start 287.8975 130.6512) + (end 287.8975 129.8753) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "8c2e8b29-07ba-43d2-9204-307a1e205b57") + ) + (segment + (start 288.6733 129.0995) + (end 289.6975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "9b778bd1-5473-4c54-a34a-86c630dfeda2") + ) + (segment + (start 289.6975 130.6512) + (end 289.6975 129.0995) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "a2a6d393-f260-4eb0-8cbf-482599cbd2ab") + ) + (segment + (start 291.4475 129.8753) + (end 291.4475 130.651) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "d1beb268-9d87-45db-9e37-ddabff59a3d6") + ) + (segment + (start 289.6975 129.0995) + (end 290.6717 129.0995) + (width 0.2) + (layer "B.Cu") + (net 68) + (uuid "e0338ad0-ce0b-4c5f-b6c6-87ae23d8cc4c") + ) + (segment + (start 287.898 130.651) + (end 291.448 130.651) + (width 0.2) + (layer "In2.Cu") + (net 68) + (uuid "35334f35-f8db-4ec9-827e-c2bc3fece2e7") + ) + (segment + (start 299.645 104.775) + (end 299.645 71.6756) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "01133f3a-970e-447b-a883-84a90fa43808") + ) + (segment + (start 322.404 127.534) + (end 306.263 111.393) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "1c1c8d0d-7dd8-4d47-bda8-ac5481c2c6c1") + ) + (segment + (start 306.263 111.382) + (end 305.954 111.073) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "4ce7bff9-78d1-4cf0-a032-d518fed36005") + ) + (segment + (start 305.954 111.073) + (end 305.943 111.073) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "5db40e72-8e11-4643-81ea-1a023dd35b15") + ) + (segment + (start 306.263 111.393) + (end 306.263 111.382) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "67f57d6d-a830-4e81-a881-54329950b680") + ) + (segment + (start 305.943 111.073) + (end 299.645 104.775) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "691170ca-6e96-4212-80f8-ac49179a86ae") + ) + (segment + (start 322.404 130.651) + (end 322.404 127.534) + (width 0.2) + (layer "F.Cu") + (net 69) + (uuid "dc73d488-c930-4480-8aa5-369dd4429447") + ) + (via + (at 322.404 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 69) + (uuid "fc048f64-1d9d-4808-a2ab-ecadd4e373fa") + ) + (segment + (start 320.6538 130.6512) + (end 320.6538 129.8753) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "0060ac65-d96b-4932-896a-3823e22d55ee") + ) + (segment + (start 320.6538 129.8753) + (end 320.6538 129.0995) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "07aff957-8a7d-483d-8f50-ac5b500de20f") + ) + (segment + (start 319.6297 129.8753) + (end 318.8538 130.6512) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "1c1a1fab-299f-4caa-87c7-f2748b59945d") + ) + (segment + (start 321.6281 129.0995) + (end 320.6538 129.0995) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "2e9653f3-5499-4e03-9085-6757a90dd1b8") + ) + (segment + (start 322.4038 129.8752) + (end 321.6281 129.0995) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "333da373-00c0-4e33-a93a-489501647037") + ) + (segment + (start 322.4038 130.651) + (end 322.4038 129.8752) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "353ff68e-8bad-4700-9d0d-41b58de0cc45") + ) + (segment + (start 322.404 130.651) + (end 322.4038 130.651) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "46b1e355-d605-46f5-a2bd-8c4c7b2cd57a") + ) + (segment + (start 322.4038 130.6512) + (end 322.4038 130.651) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "b3bf8f4a-31d5-4442-a344-e184c00a8534") + ) + (segment + (start 320.6538 129.8753) + (end 319.6297 129.8753) + (width 0.2) + (layer "B.Cu") + (net 69) + (uuid "f7d49310-1b4c-4dbe-a4d0-d60d87e495c7") + ) + (segment + (start 330.869 83.0158) + (end 345.035 83.0158) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "1b2e73e1-cee1-4385-ba02-c1354a4ec730") + ) + (segment + (start 325.839 77.9858) + (end 330.869 83.0158) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "1d9532d7-db73-406a-a9fd-f27260dcfdf7") + ) + (segment + (start 325.8388 71.6756) + (end 325.839 71.6756) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "297f0af7-9a30-4574-bca6-521070763f53") + ) + (segment + (start 325.839 71.6756) + (end 325.839 74.8307) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "5450074b-4366-4a7d-bfb6-7ea6936a3df6") + ) + (segment + (start 325.839 74.8307) + (end 325.839 71.6756) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "5915374d-41de-44aa-b6b1-d9c65b9b5bfc") + ) + (segment + (start 354.216 129.795) + (end 353.36 130.651) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "8316d2fa-9858-46e8-9df0-256e385a9630") + ) + (segment + (start 325.839 74.8307) + (end 325.839 77.9858) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "a8725a1b-1404-4f89-aaa9-fdf159ec74e8") + ) + (segment + (start 354.216 92.1966) + (end 354.216 129.795) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "b8a533d6-cb5a-4e05-b24c-711e20804e1b") + ) + (segment + (start 345.035 83.0158) + (end 354.216 92.1966) + (width 0.2) + (layer "F.Cu") + (net 70) + (uuid "e97c7818-a3a2-4055-8f65-744afb02b8bc") + ) + (via + (at 353.36 130.651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 70) + (uuid "1bd53288-6188-49e1-a701-9ff624ff33d1") + ) + (segment + (start 352.5842 129.0995) + (end 353.36 129.8753) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "2102a0d8-5234-4dba-80f0-6320601ca210") + ) + (segment + (start 350.5858 129.0995) + (end 351.61 129.0995) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "2e50623a-d8e0-46bf-8d48-a5b32963a040") + ) + (segment + (start 353.36 129.8753) + (end 353.36 130.651) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "45b59bbe-d8bf-4fed-a5c0-74d64fbd3eb3") + ) + (segment + (start 351.61 130.6512) + (end 351.61 129.0995) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "4771a58e-9544-4ef3-beb2-7eb5bf0b28d0") + ) + (segment + (start 353.36 130.651) + (end 353.36 130.6512) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "9bb1550d-4788-4fc1-a455-65e45d807672") + ) + (segment + (start 349.81 130.6512) + (end 349.81 129.8753) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "bcf304d5-b1ed-4aa8-909c-f3170d2795de") + ) + (segment + (start 349.81 129.8753) + (end 350.5858 129.0995) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "c3d97ecd-7987-40c3-a6ec-d7eb65d2322c") + ) + (segment + (start 351.61 129.0995) + (end 352.5842 129.0995) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "d238d456-6769-44a3-8c08-62ec18d34ba0") + ) + (segment + (start 351.61 130.6512) + (end 351.61 129.0995) + (width 0.2) + (layer "B.Cu") + (net 70) + (uuid "f4d978bb-2b74-4147-a445-7b67a9fe3f9b") + ) + (segment + (start 143.6731 71.6756) + (end 143.673 71.6756) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "3d39d460-7304-4604-aeba-0a4519500f5e") + ) + (segment + (start 101.406 115.491) + (end 88.4851 102.57) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "489b1069-2849-4d04-9a30-dd7c1e3d21f3") + ) + (segment + (start 102.597 130.374) + (end 101.406 129.183) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "8c294a09-e0ec-45db-947b-4193595a5f21") + ) + (segment + (start 110.472 149.701) + (end 102.597 141.825) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "a254fd3c-e0bb-40a3-8ae9-6389b908c53e") + ) + (segment + (start 143.673 78.5813) + (end 143.673 71.6756) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "a7384e5d-7897-4faa-bc00-583ac5edc33b") + ) + (segment + (start 101.406 129.183) + (end 101.406 115.491) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "ac188fe0-8aad-415e-9bb8-5e05871a360a") + ) + (segment + (start 102.597 141.825) + (end 102.597 130.374) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "d8ee65ab-b6fc-4a89-9094-18cfdff1a985") + ) + (segment + (start 88.4851 102.57) + (end 88.4851 92.0652) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "df4c4186-f838-4420-a8b2-68bc4287f53d") + ) + (segment + (start 88.4851 92.0652) + (end 97.5591 82.9912) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "e87952f5-56a4-417e-8ab9-512a4bfb0d5f") + ) + (segment + (start 97.5591 82.9912) + (end 139.263 82.9912) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "fac11ed7-d5ce-47c3-ab19-fa685c63c563") + ) + (segment + (start 139.263 82.9912) + (end 143.673 78.5813) + (width 0.2) + (layer "F.Cu") + (net 71) + (uuid "fe752f76-2354-4d7b-88c6-5d3198b7d120") + ) + (via + (at 110.472 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 71) + (uuid "ea4ff0d4-92d8-4cc3-90b5-eaddac315377") + ) + (segment + (start 108.7225 148.1495) + (end 109.696 148.1495) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "0d349a83-b65e-486a-bc9c-181e701fb687") + ) + (segment + (start 110.472 148.9255) + (end 110.472 149.701) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "2c5cb64a-26bf-4ba2-a99d-fb37327c84ae") + ) + (segment + (start 110.4722 149.7012) + (end 110.472 149.701) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "44a92012-107d-423f-a065-fcd6de465288") + ) + (segment + (start 108.7225 149.7012) + (end 108.7225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "5a223ede-c12e-4658-8be1-01d16ee592f8") + ) + (segment + (start 110.4725 149.7012) + (end 110.4722 149.7012) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "70578775-e7cf-4d70-afad-62eb90c6f34a") + ) + (segment + (start 108.7225 148.9253) + (end 108.7225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "84c38159-f1e8-4372-a61a-ef9d4bf11940") + ) + (segment + (start 109.696 148.1495) + (end 110.472 148.9255) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "b5c346c3-23d4-4f3f-982f-64e15c656481") + ) + (segment + (start 107.6984 148.9253) + (end 106.9225 149.7012) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "be4aec3c-4aac-442a-8828-1426d23e90ff") + ) + (segment + (start 108.7225 148.9253) + (end 107.6984 148.9253) + (width 0.2) + (layer "B.Cu") + (net 71) + (uuid "f60927a6-eb7d-4d4d-9dce-886e0bc8e23e") + ) + (segment + (start 120.326 128.457) + (end 121.051 129.183) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "06c2350b-bfd1-41d7-98f7-04474af176e3") + ) + (segment + (start 159.151 72.2257) + (end 159.151 72.7761) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "0b8ae288-d725-4f45-9a10-0098477a8026") + ) + (segment + (start 159.151 72.2257) + (end 159.151 72.7761) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "0bf1145e-b466-42b4-b9be-453c9f7f7674") + ) + (segment + (start 116.617 116.545) + (end 120.326 120.254) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "0d9866b1-7592-43d0-9a41-f842e69fd4db") + ) + (segment + (start 159.151 72.7761) + (end 159.151 78.5813) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "18ef052e-73ba-4b57-bcae-3fe019256cac") + ) + (segment + (start 108.015 101.991) + (end 116.617 110.592) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "2a8d2f4f-c8b3-4eaf-b491-a7090fa40471") + ) + (segment + (start 108.015 85.27) + (end 108.015 101.991) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "63387828-b01b-4188-8fb8-2ff3f25f6049") + ) + (segment + (start 159.1513 72.2254) + (end 159.1513 71.6756) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "6e428a2d-e181-449a-8e07-753c63e29718") + ) + (segment + (start 159.151 78.5813) + (end 153.077 84.6558) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "891d6824-d5cc-4ced-9295-3de32e76e43d") + ) + (segment + (start 116.617 110.592) + (end 116.617 116.545) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "aa1de945-33b6-42ff-aaac-fc38a1c51fc2") + ) + (segment + (start 159.151 72.2257) + (end 159.1513 72.2254) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "b2da8419-fd37-4f1c-b2e7-2c357a37c1e5") + ) + (segment + (start 108.629 84.6558) + (end 108.015 85.27) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "b3c9767b-8466-491f-b951-47d38b0e05ed") + ) + (segment + (start 120.326 120.254) + (end 120.326 128.457) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "c161d2ef-5087-462a-8322-3a6f62bf8d7a") + ) + (segment + (start 121.051 129.183) + (end 121.051 141.23) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "f3414292-7f28-4fb7-b228-cf0300623632") + ) + (segment + (start 153.077 84.6558) + (end 108.629 84.6558) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "fda84d4b-6bf7-475f-93a4-54ab4d9f74da") + ) + (segment + (start 121.051 141.23) + (end 129.522 149.701) + (width 0.2) + (layer "F.Cu") + (net 72) + (uuid "fe114769-e28b-4168-bf4a-869897cd2557") + ) + (via + (at 129.522 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 72) + (uuid "512955fd-b521-40ef-b318-51e80582fe77") + ) + (segment + (start 128.746 148.1495) + (end 129.522 148.9255) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "14c30fba-02da-49de-9438-be580ef377a0") + ) + (segment + (start 127.7725 148.9253) + (end 126.7484 148.9253) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "24366472-a13f-40d7-9b49-b28f1ae75cbf") + ) + (segment + (start 127.7725 149.7012) + (end 127.7725 148.9253) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "46ba0018-c60b-43fd-9ed4-ef2fd773e03f") + ) + (segment + (start 129.5222 149.7012) + (end 129.522 149.701) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "4bdc47d3-2216-4fb6-a9dc-f6bc170c6144") + ) + (segment + (start 127.7725 148.9253) + (end 127.7725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "5c28e115-3c48-4607-a444-6f94af6e5e98") + ) + (segment + (start 126.7484 148.9253) + (end 125.9725 149.7012) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "a401aba8-d37a-4128-9c95-8153789c4f82") + ) + (segment + (start 129.5225 149.7012) + (end 129.5222 149.7012) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "ab53e496-e9f9-4007-b040-7e6e6128f9c8") + ) + (segment + (start 129.522 148.9255) + (end 129.522 149.701) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "c3c1466e-5c9d-4bba-87cf-bce1c1853076") + ) + (segment + (start 127.7725 148.1495) + (end 128.746 148.1495) + (width 0.2) + (layer "B.Cu") + (net 72) + (uuid "d0b63f31-4128-496e-b1b4-bf224dc55632") + ) + (segment + (start 125.892 101.997) + (end 139.376 115.481) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "08b8e279-3cd0-4da1-a924-007849e8ab4f") + ) + (segment + (start 174.62 71.67) + (end 174.62 78.5718) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "333cbca0-0911-455d-bebc-6c8f44fa6240") + ) + (segment + (start 125.892 90.8737) + (end 125.892 101.997) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "3cda2260-df88-438b-800b-af5cdc304053") + ) + (segment + (start 139.376 115.481) + (end 139.376 129.648) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "40a2c30e-eb2a-4476-954e-4bf9f560db6a") + ) + (segment + (start 166.89 86.3203) + (end 130.445 86.3203) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "5a89435e-8d63-460f-97e3-82d931b318f9") + ) + (segment + (start 140.101 130.374) + (end 140.101 141.23) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "71d5a582-d044-4779-b70b-7d435918a46c") + ) + (segment + (start 174.62 78.5718) + (end 174.629 78.5813) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "7877da01-3ea7-4903-ba85-ee9e86ed431b") + ) + (segment + (start 140.101 141.23) + (end 148.572 149.701) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "bcd04da3-e238-4903-9ead-acd11c93eec0") + ) + (segment + (start 174.629 78.5813) + (end 166.89 86.3203) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "c88a05eb-97ab-45d3-8327-34a27dd46b56") + ) + (segment + (start 130.445 86.3203) + (end 125.892 90.8737) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "caca4a81-c759-447e-9a27-f22d20bece8a") + ) + (segment + (start 139.376 129.648) + (end 140.101 130.374) + (width 0.2) + (layer "F.Cu") + (net 73) + (uuid "e18dba2f-62cc-4daf-a033-6af100ed2af5") + ) + (via + (at 148.572 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 73) + (uuid "5b0c65a2-43ed-44a8-83ee-87ec0d0857b2") + ) + (segment + (start 145.0225 149.7012) + (end 145.0225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "308cbde1-258f-4262-87e6-8b95c101ae99") + ) + (segment + (start 145.7983 148.1495) + (end 146.8225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "4a81ef96-382a-43d4-9ff9-1c2e825f745e") + ) + (segment + (start 148.5722 149.7012) + (end 148.572 149.701) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "59867e95-6903-4c4f-ae31-50106575539d") + ) + (segment + (start 148.5725 149.7012) + (end 148.5722 149.7012) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "755f1eb9-e7df-40ad-b855-562170ca964f") + ) + (segment + (start 147.7963 148.9253) + (end 148.572 149.701) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "7d7803a1-40b8-4fb7-9912-fb1a7e8b8a97") + ) + (segment + (start 146.8225 148.9253) + (end 147.7963 148.9253) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "7e0cc349-10cc-40da-8c4b-a0f104a4d2be") + ) + (segment + (start 146.8225 148.9253) + (end 146.8225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "a0c3d5fc-f242-41a4-ae18-8398687c5e13") + ) + (segment + (start 145.0225 148.9253) + (end 145.7983 148.1495) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "c4f6bda4-b32a-4c84-850f-123346cf75d6") + ) + (segment + (start 146.8225 149.7012) + (end 146.8225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 73) + (uuid "d070cf12-43c6-4662-8a1d-9b213208beab") + ) + (segment + (start 158.556 131.856) + (end 158.626 131.787) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "0ba49228-0437-4f68-8b58-9490aeb93728") + ) + (segment + (start 167.168 149.701) + (end 158.556 141.089) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "1b65089b-1ea2-450e-83e5-2a87eff658fa") + ) + (segment + (start 154.166 124.42) + (end 154.166 111.04) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "28b7d006-7a53-40cb-9447-91d0fafa9ee7") + ) + (segment + (start 145.52 92.5971) + (end 144.925 92.0018) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "342df579-08e7-4c35-8d11-621140a69f4a") + ) + (segment + (start 187.7263 74.0789) + (end 187.7263 71.6756) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "396fc9a9-759c-4588-8687-f39b408f4b55") + ) + (segment + (start 178.638 87.6699) + (end 187.726 78.5813) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "4870bec2-69a4-40f1-ae0a-54d54fe5dbbb") + ) + (segment + (start 158.556 141.089) + (end 158.556 131.856) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "4cbdbdda-dbe7-4055-9ede-d4dd65e7a331") + ) + (segment + (start 158.626 128.88) + (end 154.166 124.42) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "4d894edf-b594-45b5-bd78-2c25afc1bfd9") + ) + (segment + (start 147.615 87.6699) + (end 178.638 87.6699) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "507f6633-6936-41e9-b3c3-1d799f00c1e8") + ) + (segment + (start 158.626 131.787) + (end 158.626 128.88) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "555bacd9-467f-4c10-acf1-d0886462e383") + ) + (segment + (start 187.726 76.4831) + (end 187.726 74.0792) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "5f59b9a2-a737-4e19-bc3e-2388683acf92") + ) + (segment + (start 145.52 102.394) + (end 145.52 92.5971) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "6e7b5f20-1ae1-4e07-9185-ae8280d45671") + ) + (segment + (start 144.925 92.0018) + (end 144.925 90.3605) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "96bc2246-28ca-44be-8055-f89b10c3d48b") + ) + (segment + (start 144.925 90.3605) + (end 147.615 87.6699) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "ab9ea6db-b9c5-4323-bc29-4a54c9b75a82") + ) + (segment + (start 187.726 78.5813) + (end 187.726 76.4831) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "af915e28-7890-480c-8829-52153526e942") + ) + (segment + (start 187.726 74.0792) + (end 187.7263 74.0789) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "bbc099d5-550c-4775-88b1-36886594d58b") + ) + (segment + (start 167.622 149.701) + (end 167.168 149.701) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "cf673e79-342a-494c-90e2-e8f224109eb4") + ) + (segment + (start 187.726 74.0792) + (end 187.726 76.4831) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "ea2f5b99-45d9-4d6d-9288-8987ea1d9fa6") + ) + (segment + (start 154.166 111.04) + (end 145.52 102.394) + (width 0.2) + (layer "F.Cu") + (net 74) + (uuid "eabf913e-1f06-4f79-95d1-857c4252fddc") + ) + (via + (at 167.622 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 74) + (uuid "b42c95ed-8ba8-4520-9797-bd678881c3ad") + ) + (segment + (start 164.8483 148.1495) + (end 165.8725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "3742bc2a-0ab2-4c54-83d6-9c19f7fd2cf2") + ) + (segment + (start 165.8725 149.7012) + (end 165.8725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "5459d6a7-6447-420f-9d1f-d10d863f0274") + ) + (segment + (start 164.0725 148.9253) + (end 164.8483 148.1495) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "77e30569-9e97-43f2-8726-6cffd4be6f3d") + ) + (segment + (start 164.0725 149.7012) + (end 164.0725 148.9253) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "802e3c27-e2f3-4494-a924-aa0ecac4c035") + ) + (segment + (start 166.846 148.1495) + (end 167.622 148.9255) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "8fffe900-40c7-432a-81a0-e97763bb65f9") + ) + (segment + (start 167.6225 149.7012) + (end 167.6222 149.7012) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "ae933efc-9695-4dab-85f9-408660958f8d") + ) + (segment + (start 165.8725 148.1495) + (end 166.846 148.1495) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "d20211f0-9e35-4508-85f5-72ecc55b996b") + ) + (segment + (start 167.622 148.9255) + (end 167.622 149.701) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "f339f36a-eb2c-42bc-8ec6-5073a96d962e") + ) + (segment + (start 167.6222 149.7012) + (end 167.622 149.701) + (width 0.2) + (layer "B.Cu") + (net 74) + (uuid "fb00d5d1-ad5c-4b62-9870-3686c2e0d650") + ) + (segment + (start 178.797 141.684) + (end 178.797 131.554) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "096dc280-34c8-4ac5-b263-7564963191e1") + ) + (segment + (start 200.823 78.5813) + (end 200.823 75.1284) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "0a78539e-b331-499c-a80a-7e21a29b3390") + ) + (segment + (start 200.823 75.1284) + (end 200.823 73.402) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "191698fb-f4fa-4b30-b4c4-fd34729f2748") + ) + (segment + (start 164.056 102.137) + (end 164.056 90.4378) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "2128490f-4d2c-4fe0-9602-24e113d5b097") + ) + (segment + (start 165.512 88.9819) + (end 190.423 88.9819) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "35615ee5-bdcf-423a-a040-70fc415a8f61") + ) + (segment + (start 177.011 129.778) + (end 173.767 126.534) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "37c6e994-f8b0-4015-be97-74ed4f78c9c3") + ) + (segment + (start 200.8231 73.4019) + (end 200.8231 71.6756) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "47955ad6-1cc6-460a-910d-46eb62b91c52") + ) + (segment + (start 200.823 75.1284) + (end 200.823 73.402) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "4af8ad15-450f-4e2f-b696-581f8597660e") + ) + (segment + (start 173.767 126.534) + (end 173.767 111.847) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "78959987-ce6c-4eb5-bbcc-6f4d3f37c44b") + ) + (segment + (start 200.823 73.402) + (end 200.8231 73.4019) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "7c456b47-e7a5-4205-bade-c075a529e14c") + ) + (segment + (start 186.672 149.701) + (end 186.672 149.56) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "806a5d68-a0b7-4719-8b8f-a0d3197cbc77") + ) + (segment + (start 164.056 90.4378) + (end 165.512 88.9819) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "8f59ca4a-9bd4-4746-8ab1-fc07da479d74") + ) + (segment + (start 178.797 131.554) + (end 177.021 129.778) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "ad24d90c-b30a-4dc6-8962-9aa1d029b049") + ) + (segment + (start 190.423 88.9819) + (end 200.823 78.5813) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "b8656787-6f48-4053-8d97-a5983fc84d05") + ) + (segment + (start 177.021 129.778) + (end 177.011 129.778) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "ce06405c-4413-4492-bb44-6ab0eb397a68") + ) + (segment + (start 173.767 111.847) + (end 164.056 102.137) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "dd74a85e-af24-482c-b7b1-1abdb43db5ce") + ) + (segment + (start 186.672 149.56) + (end 178.797 141.684) + (width 0.2) + (layer "F.Cu") + (net 75) + (uuid "fab5b5b0-540e-4d88-b56d-fe70707cbaa7") + ) + (via + (at 186.672 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 75) + (uuid "55f4a97b-7e42-4874-b471-8c25ef04eeab") + ) + (segment + (start 186.6723 149.701) + (end 186.6725 149.7012) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "08a9724e-054e-4680-9989-0ec133e42c3e") + ) + (segment + (start 183.1225 149.7012) + (end 183.1225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "20f235eb-f845-48a9-a7d9-47a0f3448dd0") + ) + (segment + (start 185.8963 148.9253) + (end 186.672 149.701) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "39def5c7-027f-4698-a9e5-b99ca521e1e9") + ) + (segment + (start 186.672 149.701) + (end 186.6723 149.701) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "8dd8605a-4619-4026-a3bb-2bfcbcf1735a") + ) + (segment + (start 184.9225 148.9253) + (end 185.8963 148.9253) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "973998e3-8426-41b3-ac33-1b466ad33293") + ) + (segment + (start 183.1225 148.9253) + (end 183.8983 148.1495) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "9d2ab7c1-e92f-4f70-94fe-deb9f3321a5d") + ) + (segment + (start 184.9225 148.9253) + (end 184.9225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "d0834e91-0835-4811-bfe4-47c025779613") + ) + (segment + (start 183.8983 148.1495) + (end 184.9225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "e3006191-745c-4df4-a2a6-e46abc0ba579") + ) + (segment + (start 184.9225 149.7012) + (end 184.9225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 75) + (uuid "e6dccaca-11ab-47d9-a84c-eac288170e0a") + ) + (segment + (start 204.99 83.9391) + (end 210.944 83.9391) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "0763ab85-f053-4acd-9756-372eda6fe2c5") + ) + (segment + (start 196.549 90.6002) + (end 198.166 90.6002) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "098b1bf6-d8f0-405e-8e6b-9cc7db72cdb4") + ) + (segment + (start 198.166 90.6002) + (end 198.187 90.6219) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "146cf3a9-da37-4c7a-9e5d-404ec6c4b3a2") + ) + (segment + (start 201.47 135.176) + (end 196.071 129.778) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "1b01107c-725b-4a41-8264-73b177d1a75e") + ) + (segment + (start 196.528 90.6219) + (end 196.549 90.6002) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "22e11d3a-ebcc-4741-8550-3c92b3a0c3df") + ) + (segment + (start 205.722 149.701) + (end 201.47 145.448) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "286d64a1-bb8d-4ac4-a41f-0c5e2e797920") + ) + (segment + (start 216.301 76.4831) + (end 216.301 71.6756) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "2b6a6654-823f-436d-a6af-02fe7c07a988") + ) + (segment + (start 216.301 71.6756) + (end 216.301 76.4831) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "310d5c49-b6ec-400a-8ed6-2d5a0580098b") + ) + (segment + (start 183.62 102.394) + (end 183.62 92.1804) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "39cff2ca-b069-4c57-9116-f3a15489c0fc") + ) + (segment + (start 183.62 92.1804) + (end 185.178 90.6219) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "4a662040-6747-4fc9-9522-0671a27ac2b2") + ) + (segment + (start 192.817 126.534) + (end 192.817 111.591) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "4ef85f11-b6fa-49b7-8811-092586e90afa") + ) + (segment + (start 196.071 129.778) + (end 196.061 129.778) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "638218d5-cbca-4a91-b5d8-e310ce47fc6e") + ) + (segment + (start 185.178 90.6219) + (end 196.528 90.6219) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "7b06dc95-504f-468f-8669-06b1445e2252") + ) + (segment + (start 216.3013 71.6756) + (end 216.301 71.6756) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "80ab666e-fbf3-454e-b14f-64ab8fdd1f46") + ) + (segment + (start 192.817 111.591) + (end 183.62 102.394) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "81c8289f-6755-433c-96e1-3c7b35719982") + ) + (segment + (start 198.187 90.6219) + (end 198.308 90.6219) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "aa76a78f-211b-468b-82f8-6e3f29ff0ed9") + ) + (segment + (start 216.301 78.5813) + (end 216.301 76.4831) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "e8abfad9-fa12-4072-9957-9a9b9d2c5034") + ) + (segment + (start 196.061 129.778) + (end 192.817 126.534) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "f31d6fd3-5c57-4757-9d53-64d1d26c69a8") + ) + (segment + (start 210.944 83.9391) + (end 216.301 78.5813) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "f5dd5429-c702-469e-b8a3-1d7eaec7b4f3") + ) + (segment + (start 201.47 145.448) + (end 201.47 135.176) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "fe9c55b4-05b5-4418-b85c-72bf5601a11b") + ) + (segment + (start 198.308 90.6219) + (end 204.99 83.9391) + (width 0.2) + (layer "F.Cu") + (net 76) + (uuid "ffc69c38-5c3f-4797-8bb8-667ca167f51f") + ) + (via + (at 205.722 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 76) + (uuid "3c4c67b6-75c8-4f69-9a65-b262b940ce1d") + ) + (segment + (start 205.7225 149.7012) + (end 205.7222 149.7012) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "12cc8017-5194-412b-ba21-6f954ee3a2aa") + ) + (segment + (start 203.9725 149.7012) + (end 203.9725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "263e8137-5cbd-47bf-8f5f-911bec0b9402") + ) + (segment + (start 202.9483 148.1495) + (end 203.9725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "2e675b97-7f4b-43d0-a188-dc6a9e5863fb") + ) + (segment + (start 203.9725 149.7012) + (end 203.9725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "33070ab5-8ed5-4249-b5c7-08ce498634d7") + ) + (segment + (start 204.9463 148.1495) + (end 203.9725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "56d6bb3d-2872-4b3a-8c80-e80a350c0415") + ) + (segment + (start 205.722 148.9252) + (end 204.9463 148.1495) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "86c23dbd-9d3b-4c34-80cf-1badf87ac7dc") + ) + (segment + (start 205.722 149.701) + (end 205.722 148.9252) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "92fc5c99-3e7d-44aa-aeaf-448d9fb34b0d") + ) + (segment + (start 202.1725 149.7012) + (end 202.1725 148.9253) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "a4bc9a08-743d-4e4f-bc11-4d4388fee329") + ) + (segment + (start 202.1725 148.9253) + (end 202.9483 148.1495) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "c34fa300-6a7b-41b6-ab5b-fbe60958c11c") + ) + (segment + (start 205.7222 149.7012) + (end 205.722 149.701) + (width 0.2) + (layer "B.Cu") + (net 76) + (uuid "db6695da-9003-4bd9-9f98-ea70ceaaf1a1") + ) + (segment + (start 217.492 142.421) + (end 217.492 130.969) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "042a86db-8e27-499d-aaa6-4de302252c4e") + ) + (segment + (start 229.3981 73.4018) + (end 229.3981 71.6756) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "1a5123fa-2cbb-47fe-ac37-cab09d12b445") + ) + (segment + (start 229.398 78.5813) + (end 229.398 75.1283) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "2508178a-d323-4ecf-a1e3-032d25ce9b64") + ) + (segment + (start 229.398 75.1283) + (end 229.398 73.4019) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "2ed5fcf4-7bbb-4dd2-843a-534927f764ae") + ) + (segment + (start 212.134 125.611) + (end 212.134 111.455) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "369c7c9b-24bc-4cde-907f-5948339bce3d") + ) + (segment + (start 212.134 111.455) + (end 202.092 101.412) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "43be9b94-fac0-4502-9a65-fc264d854a4f") + ) + (segment + (start 221.659 86.3203) + (end 229.398 78.5813) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "48c7a0d7-b624-48fb-abff-8ed4b90b0755") + ) + (segment + (start 217.492 130.969) + (end 212.134 125.611) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "654284b6-6bab-4701-9dc1-1543c3c738b7") + ) + (segment + (start 229.398 73.4019) + (end 229.398 71.6756) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "6fd1bcab-4b2b-4985-be36-9d799b56137b") + ) + (segment + (start 224.772 149.701) + (end 217.492 142.421) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "9ecd00b8-36a0-4fbd-bb18-601da8f3ed7f") + ) + (segment + (start 229.398 73.4019) + (end 229.398 71.6758) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "b73de63d-1a65-4ef6-b3a8-7db16f36786a") + ) + (segment + (start 229.398 73.4019) + (end 229.3981 73.4018) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "c7cf67d9-5763-4953-89c6-df59431178dd") + ) + (segment + (start 229.398 75.1283) + (end 229.398 73.4019) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "cb307496-6b5a-4ee6-909a-e187e6bcc738") + ) + (segment + (start 202.092 91.6005) + (end 207.372 86.3203) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "e26e112c-6387-42d4-939e-91042fc29372") + ) + (segment + (start 207.372 86.3203) + (end 221.659 86.3203) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "f3d3ace2-0639-41b9-a800-692c136d4eaa") + ) + (segment + (start 202.092 101.412) + (end 202.092 91.6005) + (width 0.2) + (layer "F.Cu") + (net 77) + (uuid "f463b5db-54e3-41e8-adf7-b29fd9b3a5d0") + ) + (via + (at 224.772 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 77) + (uuid "6957d246-c18a-4361-b451-719115977a72") + ) + (segment + (start 223.0225 148.9253) + (end 223.0225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "16e39188-d40f-440d-ab9d-88fabf8547d7") + ) + (segment + (start 224.772 149.701) + (end 224.7723 149.701) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "2472e8ce-ae0b-42f9-8ca2-6e74c5d13afb") + ) + (segment + (start 221.9984 148.9253) + (end 221.2225 149.7012) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "3035ed46-550f-4208-8bbf-a1651ed71835") + ) + (segment + (start 224.772 148.9255) + (end 224.772 149.701) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "3b036197-b7d2-4e59-a798-e65d0cfd9eb1") + ) + (segment + (start 223.0225 148.1495) + (end 223.996 148.1495) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "40ef2583-c9a6-4309-b869-934f1343e8fd") + ) + (segment + (start 223.996 148.1495) + (end 224.772 148.9255) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "75a2b5e8-3ca0-4c5c-8d96-39d0bd0f9302") + ) + (segment + (start 223.0225 148.9253) + (end 221.9984 148.9253) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "9477b6a1-7a65-458c-a20f-494b352aaa99") + ) + (segment + (start 223.0225 149.7012) + (end 223.0225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "a1865c8a-186d-4917-82c7-cdd16fbb3137") + ) + (segment + (start 224.7723 149.701) + (end 224.7725 149.7012) + (width 0.2) + (layer "B.Cu") + (net 77) + (uuid "f574402a-1cb7-4c72-9d69-a93c77f5178e") + ) + (segment + (start 242.495 78.5813) + (end 242.495 71.6756) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "23b553ae-a05f-4100-9641-f7528dae6053") + ) + (segment + (start 234.826 130.432) + (end 234.626 130.232) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "42b1bdd2-b22c-406f-9b49-1c1eca897c71") + ) + (segment + (start 235.558 85.5184) + (end 242.495 78.5813) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "4f46c93a-bd40-45b4-a570-f501b2ae1b65") + ) + (segment + (start 225.175 85.5184) + (end 235.558 85.5184) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "51199a23-4d96-4058-b54a-4474541aea16") + ) + (segment + (start 221.142 102.008) + (end 221.142 89.5517) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "62faa007-af8d-4095-a0e3-0a30729ae6a4") + ) + (segment + (start 234.626 115.492) + (end 221.142 102.008) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "85d024b8-d9e5-4585-8449-d15f17e04dc0") + ) + (segment + (start 234.826 140.704) + (end 234.826 130.432) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "9fc76490-dd6e-4b75-8a68-b2fea3a0b10a") + ) + (segment + (start 243.822 149.701) + (end 234.826 140.704) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "ac29482f-9507-4ad1-a751-350615c79133") + ) + (segment + (start 234.626 130.232) + (end 234.626 115.492) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "d072cbe0-5783-448d-9b91-e43780139a3f") + ) + (segment + (start 221.142 89.5517) + (end 225.175 85.5184) + (width 0.2) + (layer "F.Cu") + (net 78) + (uuid "e7693441-78c9-4e68-9082-6285e13fae5b") + ) + (via + (at 243.822 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 78) + (uuid "01dc9a51-73cd-4514-9865-b07eff6de046") + ) + (segment + (start 243.8225 149.7012) + (end 243.8222 149.7012) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "10b788c1-fc5c-4dc9-ba49-35b267874dce") + ) + (segment + (start 243.8222 149.7012) + (end 243.822 149.701) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "26f40453-8e56-470f-827e-177ff16ba100") + ) + (segment + (start 243.822 148.9255) + (end 243.822 149.701) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "278c4eba-ba46-49cf-8382-576d7969598c") + ) + (segment + (start 241.0484 148.9253) + (end 240.2725 149.7012) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "57a2f4b7-836b-4957-b3c7-c896448e8a49") + ) + (segment + (start 243.046 148.1495) + (end 243.822 148.9255) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "59061249-4b8e-433c-8642-864a48782bb0") + ) + (segment + (start 242.0725 148.9253) + (end 242.0725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "9c95b3f3-9fff-42c2-aa25-8dd20aa06e02") + ) + (segment + (start 242.0725 149.7012) + (end 242.0725 148.9253) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "9f07cc28-0192-4ecc-996d-2f64eb4c5c0a") + ) + (segment + (start 242.0725 148.9253) + (end 241.0484 148.9253) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "a2da8713-2250-4a05-b9cb-794d8dd28dbd") + ) + (segment + (start 242.0725 148.1495) + (end 243.046 148.1495) + (width 0.2) + (layer "B.Cu") + (net 78) + (uuid "de3e9832-dd15-4916-81b4-36e04e80c36b") + ) + (segment + (start 250.562 112.368) + (end 250.562 122.962) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "0329a37b-c2fe-4737-b729-d837573e0646") + ) + (segment + (start 255.592 80.9624) + (end 252.287 84.2671) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "0bdef883-bf8b-4439-89cd-425ee14bd2fa") + ) + (segment + (start 262.872 147.179) + (end 262.872 149.701) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "1642dc4b-aff5-4d26-8f2e-50ab55f58e8c") + ) + (segment + (start 255.592 76.319) + (end 255.592 71.6756) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "2256fb80-d8f9-47ae-830e-1979e7bb71cb") + ) + (segment + (start 254.401 138.708) + (end 262.872 147.179) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "3bacc2dc-1c24-4cb5-a978-952238863ec6") + ) + (segment + (start 248.683 84.2671) + (end 241.48 91.4698) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "4ffe7243-965f-4c0e-bdad-b1f6151644ee") + ) + (segment + (start 255.592 76.319) + (end 255.592 80.9624) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "5e807660-8748-4f8f-b629-483bb2483a9b") + ) + (segment + (start 254.401 126.802) + (end 254.401 138.708) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "7164ce32-5ca4-4d2d-a1b6-c8eac5faee47") + ) + (segment + (start 241.48 91.4698) + (end 241.48 103.286) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "7ef095f1-bad3-44bf-8504-04b534da82f8") + ) + (segment + (start 252.287 84.2671) + (end 248.683 84.2671) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "98518edf-3c0a-4dc1-b214-598e98b95964") + ) + (segment + (start 255.5919 71.6756) + (end 255.592 71.6756) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "a2a39b9c-0b26-48f9-9da3-943e6fad4edb") + ) + (segment + (start 241.48 103.286) + (end 250.562 112.368) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "b6bc3e1e-ad9f-4ce6-8ba9-877c475bd8e0") + ) + (segment + (start 255.592 80.9624) + (end 255.592 80.9625) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "c773a272-4872-465f-9ab3-2d471d72b690") + ) + (segment + (start 250.562 122.962) + (end 254.401 126.802) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "c92cd3a5-6e01-4574-835e-fea56e6ea04c") + ) + (segment + (start 255.592 71.6756) + (end 255.592 76.319) + (width 0.2) + (layer "F.Cu") + (net 79) + (uuid "cbc14eb3-003f-4b62-a29d-f9a898cd7964") + ) + (via + (at 262.872 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 79) + (uuid "f37b8d66-af0e-4acc-b6fd-8e9194bd8f01") + ) + (segment + (start 262.096 148.1495) + (end 262.872 148.9255) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "212b9b71-92a8-4bd9-aa4b-98445cd568e1") + ) + (segment + (start 260.0983 148.1495) + (end 261.1225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "3eb57971-3ef2-4eac-8f08-d362d9183476") + ) + (segment + (start 259.3225 149.7012) + (end 259.3225 148.9253) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "4c808f99-b7d1-4bdd-8252-08e6b36dda79") + ) + (segment + (start 262.8725 149.7012) + (end 262.8722 149.7012) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "6e478987-f31e-43fa-a9eb-348ec16d0a26") + ) + (segment + (start 261.1225 148.1495) + (end 262.096 148.1495) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "91316bc8-2032-44ae-aa63-a5cb5fc30c0f") + ) + (segment + (start 262.872 148.9255) + (end 262.872 149.701) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "b7095e99-dd13-415c-9c5a-0c3d70c869de") + ) + (segment + (start 262.8722 149.7012) + (end 262.872 149.701) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "d3342a1f-e63d-47d5-80f7-431aa65634e0") + ) + (segment + (start 261.1225 149.7012) + (end 261.1225 148.1495) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "f19ac8a0-da4f-422c-b199-548a6834e91e") + ) + (segment + (start 259.3225 148.9253) + (end 260.0983 148.1495) + (width 0.2) + (layer "B.Cu") + (net 79) + (uuid "f1ec82bd-a4eb-47ca-8ac4-e8781bcfd11f") + ) + (segment + (start 356.579 117.934) + (end 356.579 78.82) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "20b64d7c-097a-43f6-8cf7-4909375df049") + ) + (segment + (start 359.7718 121.126) + (end 359.7718 121.1263) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "4a7f5b95-d739-48d3-882a-075a8c84edeb") + ) + (segment + (start 359.1334 120.4876) + (end 359.7718 121.126) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "822f3ba8-30fc-43a2-b41b-b2b6d8a21b7a") + ) + (segment + (start 97.3588 63.4123) + (end 96.5483 63.4123) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "ba62a18a-4e89-4d54-b65e-3e56f4c93b51") + ) + (segment + (start 96.5483 63.4123) + (end 95.845 64.1156) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "cbc92537-ed48-449e-aab5-58b8f364ed0e") + ) + (segment + (start 359.1334 120.4876) + (end 356.579 117.934) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "de68553c-7b37-4e0b-91a5-cdc8af9ce6bc") + ) + (segment + (start 359.772 121.126) + (end 359.1334 120.4876) + (width 0.2) + (layer "F.Cu") + (net 80) + (uuid "f2bd3d27-7eb5-4aab-ac49-1069d42dc233") + ) + (via + (at 99.9552 74.857) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 80) + (uuid "9404d6d0-8f1d-48c4-a432-1a74f913e621") + ) + (via + (at 356.579 78.82) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 80) + (uuid "984bcf39-9380-4927-bf97-e604b1b9dd06") + ) + (via + (at 97.3588 63.4123) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 80) + (uuid "e6cce1b3-a8ba-413f-98c7-a5ac561a509e") + ) + (segment + (start 104.2395 74.4332) + (end 100.3774 74.4332) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "14503172-2a23-4305-b45a-cd823767fc22") + ) + (segment + (start 351.9683 74.2093) + (end 356.579 78.82) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "1f18645e-b3ce-4bf3-8719-e77f06c6389c") + ) + (segment + (start 330.1032 74.3741) + (end 330.268 74.2093) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "25b21726-110c-4587-902d-1c66e44f7ef2") + ) + (segment + (start 107.288 74.4432) + (end 107.1232 74.608) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "3fae088b-34d8-4bce-a048-a9e5f71fe4b9") + ) + (segment + (start 107.5234 74.2078) + (end 107.288 74.4432) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "53bec08f-8aaa-4036-81b8-2e50e871221e") + ) + (segment + (start 107.1232 74.608) + (end 104.4143 74.608) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "73926506-784f-4836-84e5-f7bc666858f3") + ) + (segment + (start 330.268 74.2093) + (end 351.9683 74.2093) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "762352fc-1545-42fc-81bc-0e56eb0a6ae6") + ) + (segment + (start 330.1032 74.3741) + (end 108.1053 74.3741) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "7998a83e-dc61-408c-9fe4-ece2afaeb9ac") + ) + (segment + (start 104.4143 74.608) + (end 104.2395 74.4332) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "7e296717-f7bb-420a-b21b-d4ab4c53ecaf") + ) + (segment + (start 100.3774 74.4332) + (end 99.9552 74.8554) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "8c7a77f8-7086-4ad8-b5fb-1bb05c44b06f") + ) + (segment + (start 107.288 74.4432) + (end 107.1232 74.608) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "ac00927b-bd1f-4342-9186-593436cfd6a2") + ) + (segment + (start 108.1053 74.3741) + (end 107.939 74.2078) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "acfe2b77-6b14-401f-9ff2-4979a87ea67a") + ) + (segment + (start 107.939 74.2078) + (end 107.5234 74.2078) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "c0a6204d-4d6e-4672-b36e-ee1f29753bf1") + ) + (segment + (start 99.9552 74.8554) + (end 99.9552 74.857) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "c123fff9-eecb-4578-9662-d96f683a1369") + ) + (segment + (start 330.1032 74.3741) + (end 330.268 74.2093) + (width 0.2) + (layer "In1.Cu") + (net 80) + (uuid "f542d252-04b6-41c3-8ce6-87e7b35f99be") + ) + (segment + (start 99.9552 74.8554) + (end 99.9552 74.857) + (width 0.2) + (layer "In2.Cu") + (net 80) + (uuid "5ce09cff-fa8b-4331-9ffd-42fe0f73e5fc") + ) + (segment + (start 99.9552 66.0087) + (end 97.3588 63.4123) + (width 0.2) + (layer "In2.Cu") + (net 80) + (uuid "622ae800-f9c4-46ac-b548-cbfcb81e65e0") + ) + (segment + (start 99.9552 74.8554) + (end 99.9552 66.0087) + (width 0.2) + (layer "In2.Cu") + (net 80) + (uuid "923aca8f-706b-4b24-9e11-6daa4c5d6acf") + ) + (segment + (start 95.2589 61.217) + (end 93.845 61.217) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "1f15b374-c115-438c-893d-3eedad22de87") + ) + (segment + (start 309.28 103.785) + (end 309.28 81.9532) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "45e4595f-0f8e-4e20-818f-15bf0b2b7a35") + ) + (segment + (start 96.7066 59.7693) + (end 95.2589 61.217) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "6c479b86-3bdf-46ae-a8bd-0ff07c2e4b23") + ) + (segment + (start 93.845 62.1156) + (end 93.845 61.217) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "89223222-49df-4c44-aae8-a4c8294b03c4") + ) + (segment + (start 309.28 81.9532) + (end 308.982 81.6548) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "ce8e4cbd-a568-4cb2-9490-f4a79f314980") + ) + (segment + (start 99.2287 59.7693) + (end 96.7066 59.7693) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "e5c8c558-e9d9-42a9-88ad-008e75115f51") + ) + (segment + (start 99.3443 59.8849) + (end 99.2287 59.7693) + (width 0.2) + (layer "F.Cu") + (net 81) + (uuid "f7657bf8-a37f-4b28-99fb-c2e19e5efca4") + ) + (via + (at 99.3443 59.8849) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 81) + (uuid "1c1b779c-1915-4421-b9b1-e8cc2802e0e5") + ) + (via + (at 101.2148 75.2113) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 81) + (uuid "578ec6ad-87f0-4616-bc0d-bc03284f22ab") + ) + (via + (at 309.28 103.785) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 81) + (uuid "5f58149b-bf05-4cad-bb82-cd6d4eb03c5b") + ) + (via + (at 308.982 81.6548) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 81) + (uuid "b5a46c26-36e0-4956-9c1d-1debd089932b") + ) + (segment + (start 330.0945 109.0084) + (end 314.5034 109.0084) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "007430f9-abb8-4a4a-96d6-3d71e0b355b4") + ) + (segment + (start 100.8512 75.4589) + (end 100.8512 75.0954) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "021089d6-a5b7-4d1f-b0ad-8aed7d97e935") + ) + (segment + (start 133.341 75.4129) + (end 133.2935 75.4604) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "05b85518-e4bd-42e6-8bff-018d9f7288f9") + ) + (segment + (start 104.4157 75.4604) + (end 133.2935 75.4604) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "16e5e059-e379-49ad-a548-f8b6d8bb8d5c") + ) + (segment + (start 101.0289 75.6366) + (end 104.2395 75.6366) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "21f87e26-47a0-4081-ab40-c4bd0227dbba") + ) + (segment + (start 359.7718 123.6663) + (end 344.7524 123.6663) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "23c62fd9-c055-4503-a070-24b7a8b3d615") + ) + (segment + (start 104.2395 75.6366) + (end 104.4157 75.4604) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "3186aff4-e75d-459f-91df-762e0e75ab41") + ) + (segment + (start 308.982 81.6548) + (end 302.7401 75.4129) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "4191d828-fd2d-4a51-b1d1-b34ead0fea63") + ) + (segment + (start 344.7524 123.6663) + (end 330.0945 109.0084) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "4894b9cf-e29c-4300-ae96-4ecf190a699b") + ) + (segment + (start 302.7401 75.4129) + (end 133.341 75.4129) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "51f0b3aa-3036-4735-a106-faa9f7b9c9c6") + ) + (segment + (start 100.8512 75.0954) + (end 100.9234 75.0232) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "63565912-495f-44a8-aed5-adacda9d5ac5") + ) + (segment + (start 133.341 75.4129) + (end 133.2935 75.4604) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "72a42dd6-f0cf-411a-9718-7e239867ad26") + ) + (segment + (start 100.9234 75.0232) + (end 100.9354 75.0112) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "7f6cd4c8-5ff9-4f4d-ae8d-041317af3fbd") + ) + (segment + (start 100.9354 75.0112) + (end 101.0147 75.0112) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "8e2c49d7-884d-43a2-8e00-2e5ed30f8dc1") + ) + (segment + (start 100.9234 75.0232) + (end 100.9354 75.0112) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "8ea537db-a563-4d8c-8461-5be50f9ea5e0") + ) + (segment + (start 314.5034 109.0084) + (end 309.28 103.785) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "9219dc33-7e80-4286-883e-a8732d135e26") + ) + (segment + (start 100.8512 75.0954) + (end 100.8512 75.4589) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "b348d8bc-e234-467f-950e-dd41981aae47") + ) + (segment + (start 100.8512 75.4589) + (end 101.0289 75.6366) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "ce370e9a-93c9-491e-bffb-2d8dbd0eaf57") + ) + (segment + (start 101.0147 75.0112) + (end 101.2148 75.2113) + (width 0.2) + (layer "In1.Cu") + (net 81) + (uuid "e1f8353c-72df-4029-9ca9-3ddb4872f471") + ) + (segment + (start 100.8622 74.8587) + (end 101.2148 75.2113) + (width 0.2) + (layer "In2.Cu") + (net 81) + (uuid "4046f14d-c790-4117-8979-4578ac0d0b9d") + ) + (segment + (start 100.8512 74.8587) + (end 100.8622 74.8587) + (width 0.2) + (layer "In2.Cu") + (net 81) + (uuid "56044fb7-ce14-4b96-8116-f286067492cc") + ) + (segment + (start 100.8512 74.8587) + (end 100.8512 61.3918) + (width 0.2) + (layer "In2.Cu") + (net 81) + (uuid "74e12e4a-a04f-4f67-81bf-19e7b585e069") + ) + (segment + (start 100.8512 61.3918) + (end 99.3443 59.8849) + (width 0.2) + (layer "In2.Cu") + (net 81) + (uuid "a9eed120-8d2a-4aa6-bdf8-35e3214b97f3") + ) + (segment + (start 68.0532 61.5106) + (end 68.5513 61.0125) + (width 0.2) + (layer "F.Cu") + (net 82) + (uuid "9fd00ab4-5786-44de-9564-8c3310da3d4b") + ) + (segment + (start 67.2555 61.5106) + (end 68.0532 61.5106) + (width 0.2) + (layer "F.Cu") + (net 82) + (uuid "c1ba503a-fcc6-49f9-baaa-632957c69eb4") + ) + (via + (at 67.2555 61.5106) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 82) + (uuid "02925b96-b50f-4119-b05a-185c2e060dc2") + ) + (segment + (start 65.2106 55.9594) + (end 65.2106 59.4657) + (width 0.2) + (layer "B.Cu") + (net 82) + (uuid "33da8c59-f4f5-420a-a398-2921d4ee2f15") + ) + (segment + (start 65.2106 59.4657) + (end 67.2555 61.5106) + (width 0.2) + (layer "B.Cu") + (net 82) + (uuid "d16bcc57-8d7a-4127-a89e-93a226afce69") + ) + (segment + (start 58.3513 60.2364) + (end 58.3513 61.0125) + (width 0.2) + (layer "F.Cu") + (net 83) + (uuid "5c5a1309-fbc1-4da1-8e21-df1dbe7b2a72") + ) + (segment + (start 58.6158 59.9719) + (end 58.3513 60.2364) + (width 0.2) + (layer "F.Cu") + (net 83) + (uuid "65cb7f12-d70a-4808-8f3e-63390cc146a4") + ) + (via + (at 58.6158 59.9719) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 83) + (uuid "e9512502-f7e9-4245-bb59-57aba94248c0") + ) + (segment + (start 62.3796 58.3177) + (end 62.3796 59.1815) + (width 0.2) + (layer "B.Cu") + (net 83) + (uuid "409d3d10-94a7-46c3-afee-2b8a64d976e5") + ) + (segment + (start 62.2106 55.9594) + (end 62.2106 58.1487) + (width 0.2) + (layer "B.Cu") + (net 83) + (uuid "52b30aee-747b-4777-87ee-6239957244af") + ) + (segment + (start 62.2106 58.1487) + (end 62.3796 58.3177) + (width 0.2) + (layer "B.Cu") + (net 83) + (uuid "d00051e6-f45a-41a5-9c76-2db3d92a09c0") + ) + (segment + (start 61.5892 59.9719) + (end 58.6158 59.9719) + (width 0.2) + (layer "B.Cu") + (net 83) + (uuid "db5583c8-f15d-4ab2-be2b-11329a4e5d3d") + ) + (segment + (start 62.3796 59.1815) + (end 61.5892 59.9719) + (width 0.2) + (layer "B.Cu") + (net 83) + (uuid "f196cb4e-1f4d-4866-81d0-332c8975e978") + ) + (segment + (start 85.3553 69.6156) + (end 84.345 69.6156) + (width 0.2) + (layer "F.Cu") + (net 84) + (uuid "353e3898-3073-4f44-b10a-b6bbdc3fabd9") + ) + (segment + (start 79.1361 69.9137) + (end 77.088 67.8656) + (width 0.2) + (layer "F.Cu") + (net 84) + (uuid "9981d105-84e4-4201-a1ff-63cd070b9070") + ) + (segment + (start 85.7259 69.9862) + (end 85.3553 69.6156) + (width 0.2) + (layer "F.Cu") + (net 84) + (uuid "f7840b85-283c-43b7-a9c3-7b5a54f82c22") + ) + (segment + (start 77.088 67.8656) + (end 76.7888 67.8656) + (width 0.2) + (layer "F.Cu") + (net 84) + (uuid "fae42e81-f810-450e-b564-692248969786") + ) + (via + (at 79.1361 69.9137) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 84) + (uuid "6a4e98f7-2999-4d40-beac-c753b6763bd4") + ) + (via + (at 85.7259 69.9862) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 84) + (uuid "6fd54903-8f94-4193-9b03-7abc893f5486") + ) + (segment + (start 79.1361 69.9137) + (end 79.2086 69.9862) + (width 0.2) + (layer "In1.Cu") + (net 84) + (uuid "1148df51-e875-41c5-9ca8-da81aba8c13a") + ) + (segment + (start 79.2086 69.9862) + (end 85.7259 69.9862) + (width 0.2) + (layer "In1.Cu") + (net 84) + (uuid "373aa341-44c4-4ab8-b3bf-1266be6b7bf9") + ) + (segment + (start 81.42 70.1156) + (end 76.7888 65.4844) + (width 0.2) + (layer "F.Cu") + (net 85) + (uuid "545db2c6-e9d1-4012-97e6-d236da963aae") + ) + (segment + (start 84.345 70.1156) + (end 81.42 70.1156) + (width 0.2) + (layer "F.Cu") + (net 85) + (uuid "5c6d1fdd-2d92-4525-94dd-ff05c670da67") + ) + (segment + (start 91.7814 76.0856) + (end 92.7083 77.0125) + (width 0.2) + (layer "F.Cu") + (net 86) + (uuid "6e393740-90a9-485e-b439-a8e68ad1c93e") + ) + (segment + (start 91.845 75.0236) + (end 91.7814 75.0872) + (width 0.2) + (layer "F.Cu") + (net 86) + (uuid "7df8b9a7-210a-4916-a5e4-03f9b8015d71") + ) + (segment + (start 91.7814 75.0872) + (end 91.7814 76.0856) + (width 0.2) + (layer "F.Cu") + (net 86) + (uuid "e7365d3d-811b-4476-a167-a9c53a8661ca") + ) + (segment + (start 91.845 73.6156) + (end 91.845 75.0236) + (width 0.2) + (layer "F.Cu") + (net 86) + (uuid "f1c6581f-0805-46e5-b61b-7a52c47aa206") + ) + (segment + (start 86.345 73.6156) + (end 86.345 74.5142) + (width 0.2) + (layer "F.Cu") + (net 87) + (uuid "a163c117-79a1-48f9-b6dc-ecc37ed5debf") + ) + (segment + (start 87.6083 75.7775) + (end 86.345 74.5142) + (width 0.2) + (layer "F.Cu") + (net 87) + (uuid "ee067ba2-3060-445f-93a7-99b4c6795e49") + ) + (segment + (start 87.6083 77.0125) + (end 87.6083 75.7775) + (width 0.2) + (layer "F.Cu") + (net 87) + (uuid "faafc4a5-04ff-4b9e-b728-95a0c5380fc4") + ) + (segment + (start 87.6083 78.8375) + (end 87.951 79.1802) + (width 0.2) + (layer "F.Cu") + (net 88) + (uuid "aac3e3e0-3496-486b-a8a0-8fa8e3eb6de7") + ) + (segment + (start 87.951 79.1802) + (end 88.9007 79.1802) + (width 0.2) + (layer "F.Cu") + (net 88) + (uuid "de2d7426-cb7f-4dd1-8592-b4bd4a27f2d3") + ) + (via + (at 89.612 66.213) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 88) + (uuid "25a6b191-3945-4fec-a852-0fecf1cdd080") + ) + (via + (at 88.9007 79.1802) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 88) + (uuid "81e7d935-9514-46c2-baae-ec2cf114261a") + ) + (segment + (start 89.612 66.4283) + (end 89.612 66.213) + (width 0.2) + (layer "In1.Cu") + (net 88) + (uuid "022b4d7b-5a71-4c38-b50a-4ba57eae79d6") + ) + (segment + (start 89.612 66.213) + (end 89.612 66.4283) + (width 0.2) + (layer "In1.Cu") + (net 88) + (uuid "03d390cd-1f33-41f1-9667-bec2cf1d1203") + ) + (segment + (start 89.612 66.4283) + (end 92.5673 66.4283) + (width 0.2) + (layer "In1.Cu") + (net 88) + (uuid "5d232d51-48a8-4e0f-b3b9-2bd2560f933f") + ) + (segment + (start 92.5673 66.4283) + (end 93.2623 65.7333) + (width 0.2) + (layer "In1.Cu") + (net 88) + (uuid "e686b1fe-8677-4f24-877d-8fe13b87e326") + ) + (segment + (start 93.2623 65.7333) + (end 336.1467 65.7333) + (width 0.2) + (layer "In1.Cu") + (net 88) + (uuid "e90d31e1-5e13-443a-b336-eb070e9da7fb") + ) + (segment + (start 336.1467 65.7333) + (end 343.5394 58.3406) + (width 0.2) + (layer "In1.Cu") + (net 88) + (uuid "ffbaeb7c-21ad-403d-aa45-ab6fa569fb51") + ) + (segment + (start 89.2649 66.5601) + (end 89.2649 76.9094) + (width 0.2) + (layer "In2.Cu") + (net 88) + (uuid "5c0ba752-8f78-4a1b-b605-b0fffc776a79") + ) + (segment + (start 88.4974 77.6769) + (end 88.4974 78.7769) + (width 0.2) + (layer "In2.Cu") + (net 88) + (uuid "7b263678-d093-40c1-b78a-d7a60076ff9b") + ) + (segment + (start 88.4974 78.7769) + (end 88.9007 79.1802) + (width 0.2) + (layer "In2.Cu") + (net 88) + (uuid "8671482c-70b8-432a-bb50-a2a78349a2d7") + ) + (segment + (start 89.612 66.213) + (end 89.2649 66.5601) + (width 0.2) + (layer "In2.Cu") + (net 88) + (uuid "a6bfc43a-9497-4a2c-900b-19af51e196da") + ) + (segment + (start 89.2649 76.9094) + (end 88.4974 77.6769) + (width 0.2) + (layer "In2.Cu") + (net 88) + (uuid "eca2bef1-c7a9-4f3f-9bac-480245ae276a") + ) + (segment + (start 76.9794 70.6156) + (end 76.7888 70.425) + (width 0.2) + (layer "F.Cu") + (net 89) + (uuid "1958ba64-971e-491a-9b0c-eb24f43f0894") + ) + (segment + (start 84.345 70.6156) + (end 76.9794 70.6156) + (width 0.2) + (layer "F.Cu") + (net 89) + (uuid "f10f103e-fae4-4820-8220-1851694460c0") + ) + (segment + (start 75.8875 69.5013) + (end 75.8875 66.4571) + (width 0.2) + (layer "F.Cu") + (net 90) + (uuid "7b2ce450-a840-4680-baa6-5099744bc391") + ) + (segment + (start 74.9638 70.425) + (end 75.8875 69.5013) + (width 0.2) + (layer "F.Cu") + (net 90) + (uuid "dda0bf36-ea35-4907-87b4-8ccd72d3a5a3") + ) + (via + (at 75.8875 66.4571) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 90) + (uuid "85f4f70a-e8bf-4e66-8d45-b525fb14e281") + ) + (segment + (start 93.042 66.9382) + (end 109.9775 66.9382) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "04b2b001-64e4-4266-98a1-a2ebdb6c3c91") + ) + (segment + (start 92.9338 66.83) + (end 93.042 66.9382) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "057b4bca-d4a6-42a8-9f6b-5367f5b67b7f") + ) + (segment + (start 81.2188 66.4283) + (end 80.8987 66.7484) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "11ca1a90-2f1b-4935-85d1-8723dc962bcb") + ) + (segment + (start 339.7971 67.1629) + (end 119.5954 67.1629) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "1512f9f3-0988-4de0-9da3-ff085f457b7b") + ) + (segment + (start 110.5505 67.3968) + (end 110.4933 67.454) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "16066977-a897-4d11-a7ea-c6fb7d7c81e4") + ) + (segment + (start 86.9808 66.0572) + (end 86.6098 66.4282) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "27ff3cfd-0119-4967-8ef4-c46f2699c4ac") + ) + (segment + (start 110.5505 67.3968) + (end 110.4933 67.454) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "2a92c57c-a5c1-4ffd-b2ef-946ce5806645") + ) + (segment + (start 86.6098 66.4283) + (end 81.2188 66.4283) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "2fdbb789-9c4e-4bff-8ffd-d689ba8cbaad") + ) + (segment + (start 348.6194 58.3406) + (end 339.7971 67.1629) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "31fdeb8d-114c-4fa1-9953-3a4e6c0f788c") + ) + (segment + (start 119.4306 67.3277) + (end 119.5954 67.1629) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "394ae95a-9b34-4e4e-9982-f967727e6664") + ) + (segment + (start 109.9775 66.9382) + (end 110.4933 67.454) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "4aaf8517-37c3-46e6-a5ae-7ad4e6bbf0ad") + ) + (segment + (start 119.4306 67.3277) + (end 119.1952 67.5631) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "504909c0-eefe-4f8a-bb7b-a9d67bf4faa3") + ) + (segment + (start 119.4306 67.3277) + (end 119.5954 67.1629) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "591b461f-1020-4be5-95ab-e7b2c1b5aaff") + ) + (segment + (start 119.1952 67.5631) + (end 117.8254 67.5631) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "5d9ebac7-6bf6-43de-bbcd-ce57836d7147") + ) + (segment + (start 92.7675 66.9963) + (end 88.5057 66.9963) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "66e91288-253e-478c-abb5-f0d97bbc8671") + ) + (segment + (start 117.4237 67.1614) + (end 110.7859 67.1614) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "8360e3b0-d475-4596-b4a5-f9d95150255e") + ) + (segment + (start 110.7859 67.1614) + (end 110.5505 67.3968) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "87823343-7830-40a5-aef8-f9ba6315adbd") + ) + (segment + (start 80.7339 66.9132) + (end 76.3436 66.9132) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "94e17b59-a2b0-45c2-8f79-efd0a8346d24") + ) + (segment + (start 80.8987 66.7484) + (end 80.7339 66.9132) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "9c7da9e3-ecd8-4845-84da-d6ae738c10eb") + ) + (segment + (start 76.3436 66.9132) + (end 75.8875 66.4571) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "a7280c78-1baa-4b68-85c6-10c8c6c64158") + ) + (segment + (start 86.6098 66.4282) + (end 86.6098 66.4283) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "bbba3783-7e01-4db1-a446-a88934a95f33") + ) + (segment + (start 92.7675 66.9963) + (end 92.9338 66.83) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "c0d42204-29c9-436e-b6ce-20027e6e5521") + ) + (segment + (start 87.5666 66.0572) + (end 86.9808 66.0572) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "c1a01803-2467-45c6-baa9-2da1a911a64d") + ) + (segment + (start 88.5057 66.9963) + (end 87.5666 66.0572) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "d2a688ed-ba51-4cae-9669-83e6f9e7fc87") + ) + (segment + (start 80.8987 66.7484) + (end 80.7339 66.9132) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "d3ddd3b5-61b5-431f-97ac-7b50859b933c") + ) + (segment + (start 92.7675 66.9963) + (end 92.9338 66.83) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "dfdd808c-318b-4253-9839-11ae7ede4b85") + ) + (segment + (start 117.8254 67.5631) + (end 117.4237 67.1614) + (width 0.2) + (layer "In1.Cu") + (net 90) + (uuid "f2f187b9-4c26-46f8-a1be-101fa8256617") + ) + (segment + (start 103.3993 70.7114) + (end 102.3774 70.7114) + (width 0.2) + (layer "F.Cu") + (net 91) + (uuid "0eda4dfc-9d74-485c-861c-fb697dae5277") + ) + (segment + (start 102.3774 70.7114) + (end 101.8638 71.225) + (width 0.2) + (layer "F.Cu") + (net 91) + (uuid "47deb9cf-a490-44ce-a948-b168b6ecc93e") + ) + (via + (at 103.3993 70.7114) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 91) + (uuid "6549b7ff-d661-4bc2-a049-14337c6558fe") + ) + (segment + (start 351.1594 58.3406) + (end 339.3046 70.1954) + (width 0.2) + (layer "In1.Cu") + (net 91) + (uuid "89f88604-4a2f-49bc-8abf-69af7ee38147") + ) + (segment + (start 339.3046 70.1954) + (end 103.9153 70.1954) + (width 0.2) + (layer "In1.Cu") + (net 91) + (uuid "c8d3e365-574e-4278-a78a-2d26e9e0e496") + ) + (segment + (start 103.9153 70.1954) + (end 103.3993 70.7114) + (width 0.2) + (layer "In1.Cu") + (net 91) + (uuid "e2f3d35d-40a3-478b-8840-af0bebb02f6a") + ) + (segment + (start 96.1827 75.0797) + (end 97.6149 75.0797) + (width 0.2) + (layer "F.Cu") + (net 92) + (uuid "76ed7e3f-9ab2-42d9-99e9-87c69a55ff81") + ) + (segment + (start 93.3374 77.925) + (end 96.1827 75.0797) + (width 0.2) + (layer "F.Cu") + (net 92) + (uuid "95505218-b0ce-4bd7-b0ab-d9d3056c55aa") + ) + (segment + (start 91.0208 77.925) + (end 93.3374 77.925) + (width 0.2) + (layer "F.Cu") + (net 92) + (uuid "9b7b5fe1-b420-41c1-ba6a-2b9c805faef6") + ) + (segment + (start 90.1083 78.8375) + (end 91.0208 77.925) + (width 0.2) + (layer "F.Cu") + (net 92) + (uuid "b6aa9c43-129c-45cf-ba7b-77b643ff1069") + ) + (via + (at 97.6149 75.0797) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 92) + (uuid "df055361-0c97-4c01-86af-e611c4e5a82f") + ) + (segment + (start 104.5806 74.2063) + (end 104.4058 74.0315) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "296f7237-8676-4f36-8d32-ebb8cf473559") + ) + (segment + (start 98.6631 74.0315) + (end 97.6149 75.0797) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "39d0ddb6-aba8-4074-90fa-b860d6ac5497") + ) + (segment + (start 305.0633 73.9065) + (end 108.2057 73.9065) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "61095608-cb22-4f64-aaa3-22eefc2bf618") + ) + (segment + (start 106.9569 74.2063) + (end 104.5806 74.2063) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "79516024-fabd-48c3-b239-49ca2ea0d58e") + ) + (segment + (start 305.1622 73.8076) + (end 305.0633 73.9065) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "7c341260-4ea7-4d2c-a420-361b9a92f8df") + ) + (segment + (start 104.4058 74.0315) + (end 98.6631 74.0315) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "873aa9d9-5aef-4201-9747-a526502eec57") + ) + (segment + (start 108.1053 73.8061) + (end 107.3571 73.8061) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "9a08ac70-a630-4d9d-a48d-e3ee66ec3d87") + ) + (segment + (start 338.2324 73.8076) + (end 305.1622 73.8076) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "ad441c3e-d9a8-43e0-b076-f322982ed2c4") + ) + (segment + (start 108.2057 73.9065) + (end 108.1053 73.8061) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "c4f074d7-3bc5-4178-9b9f-0f94087aab4b") + ) + (segment + (start 353.6994 58.3406) + (end 338.2324 73.8076) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "d8b7780e-cbdd-4405-a26b-475fde56604a") + ) + (segment + (start 107.3571 73.8061) + (end 106.9569 74.2063) + (width 0.2) + (layer "In1.Cu") + (net 92) + (uuid "ea9457a0-e19d-484c-a18c-75e5964faa3c") + ) + (segment + (start 89.345 74.5142) + (end 90.1083 75.2775) + (width 0.2) + (layer "F.Cu") + (net 93) + (uuid "1d5fc1b8-5d38-4b04-8bc4-d6c548a0a1f4") + ) + (segment + (start 89.345 73.6156) + (end 89.345 74.5142) + (width 0.2) + (layer "F.Cu") + (net 93) + (uuid "97892dd7-9141-4b4e-abf7-6a80bbe80f1d") + ) + (segment + (start 90.1083 75.2775) + (end 90.1083 77.0125) + (width 0.2) + (layer "F.Cu") + (net 93) + (uuid "f288cddf-89c7-45f1-a676-8c646b7dbdfe") + ) + (segment + (start 193.106 134.998) + (end 193.106 180.72) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "32086bb1-7abe-4848-89ef-5d9e70a8f11d") + ) + (segment + (start 88.345 75.5127) + (end 88.3314 75.5263) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "396231a5-f5c7-4244-9868-a633e43d6694") + ) + (segment + (start 188.276 130.167) + (end 193.106 134.998) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "3cf1e8c6-6d3a-4a7a-8540-20e0dd76b280") + ) + (segment + (start 199.315 186.9282) + (end 199.315 186.928) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "62f5b7be-31a1-4fa0-98ac-1cdeb089dd2a") + ) + (segment + (start 109.315 101.849) + (end 109.421 101.955) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "a2eee4a7-7717-4ed9-855e-24eb81863a19") + ) + (segment + (start 109.315 85.6235) + (end 109.315 101.849) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "b42b34ef-6213-4275-a6f2-4c32de8b55df") + ) + (segment + (start 193.106 180.72) + (end 199.315 186.928) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "d218ce76-2251-43c7-831b-9118d41c7b9f") + ) + (segment + (start 188.276 114.404) + (end 188.276 130.167) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "ea1c92c5-f041-4e1c-b919-0efd01e4191d") + ) + (segment + (start 88.345 73.6156) + (end 88.345 75.5127) + (width 0.2) + (layer "F.Cu") + (net 94) + (uuid "f20d6b52-f446-469e-a7e9-03f0a9df0a6a") + ) + (via + (at 188.276 114.404) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 94) + (uuid "0eea4ce4-ff5d-41d5-a926-e92c224f195b") + ) + (via + (at 109.421 101.955) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 94) + (uuid "1e9835e6-04a3-4bfb-82cb-e16982a3ff29") + ) + (via + (at 109.315 85.6235) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 94) + (uuid "6a1c7983-b4e8-4d60-937c-601e08c51d6c") + ) + (via + (at 88.3314 75.5263) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 94) + (uuid "c08a0a8a-f248-433c-83b7-7c589f4a8ee6") + ) + (segment + (start 188.276 114.404) + (end 188.0076 114.1356) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "2a1e0770-12be-467a-89c2-7b0033271568") + ) + (segment + (start 89.4214 74.4363) + (end 92.9023 74.4363) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "4a00992d-0da8-41b9-a42b-894b4e65a0e9") + ) + (segment + (start 104.0895 85.6235) + (end 109.315 85.6235) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "5712469f-0410-4c94-9641-18e47e111438") + ) + (segment + (start 177.3025 107.1485) + (end 114.2583 107.1485) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "5726d069-865d-41a7-b810-57928ca453c1") + ) + (segment + (start 109.421 102.3112) + (end 109.421 101.955) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "a33f0141-eeba-4c53-8ef7-d27270f87add") + ) + (segment + (start 92.9023 74.4363) + (end 104.0895 85.6235) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "bdbe1c88-ab86-4194-a7c2-d238790c6e34") + ) + (segment + (start 188.0076 114.1356) + (end 184.2896 114.1356) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "c371dd5b-fc14-4789-ab08-ab0f9826847e") + ) + (segment + (start 114.2583 107.1485) + (end 109.421 102.3112) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "e37fe30f-89fa-46b0-956f-016889af4dd3") + ) + (segment + (start 88.3314 75.5263) + (end 89.4214 74.4363) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "f5f2674d-dd5d-4575-8f89-3681a2471002") + ) + (segment + (start 184.2896 114.1356) + (end 177.3025 107.1485) + (width 0.2) + (layer "In1.Cu") + (net 94) + (uuid "fc55fa27-2c27-4afa-b077-afcffa41f20d") + ) + (segment + (start 88.845 73.6156) + (end 88.845 75.189) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "0c76397a-32ff-4896-af16-9edcb8c4e0a5") + ) + (segment + (start 131.576 116.123) + (end 121.303 105.85) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "2a0cb811-74d2-43c8-bd6a-ccf3b6f34d81") + ) + (segment + (start 88.845 75.189) + (end 88.9331 75.2771) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "2fabc228-dd03-4343-8125-52858cf98df5") + ) + (segment + (start 88.9331 75.2771) + (end 88.9331 77.7253) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "3bd44831-20a0-43af-93ae-9cdb1bb200ab") + ) + (segment + (start 135.763 169.582) + (end 135.763 145.04) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "3eec4d74-f6a0-4bb0-9821-adb2709d3079") + ) + (segment + (start 135.763 145.04) + (end 136.715 144.088) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "464e44d7-26a8-4a06-91d7-89ad459b8280") + ) + (segment + (start 88.9331 77.7253) + (end 89.1338 77.926) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "687c635a-3571-4cad-9954-20112bd608cc") + ) + (segment + (start 136.339 134.253) + (end 131.576 129.49) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "6ab2855d-1a95-48a9-a622-0546fbee9622") + ) + (segment + (start 136.715 144.088) + (end 136.715 137.014) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "9bdaa5fe-c21b-4540-ba60-90ed8f0c2644") + ) + (segment + (start 121.303 105.85) + (end 121.303 94.7078) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "a44432d6-9b6a-4056-82db-7c7693b7743a") + ) + (segment + (start 136.715 137.014) + (end 136.339 136.638) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "b6d8786a-56cc-4cea-9893-8ed844b295db") + ) + (segment + (start 131.576 129.49) + (end 131.576 116.123) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "e7722a73-6a97-4e92-9c5d-56ab25d6838a") + ) + (segment + (start 136.339 136.638) + (end 136.339 134.253) + (width 0.2) + (layer "F.Cu") + (net 95) + (uuid "e9dad793-720e-40aa-9332-4c5e2e0c948d") + ) + (via + (at 121.303 94.7078) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 95) + (uuid "4e4cc106-d8ca-4ab2-a684-67a9a2b3b299") + ) + (via + (at 89.1338 77.926) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 95) + (uuid "c3ea466e-d0f2-41e3-9d76-f09e64358d91") + ) + (via + (at 135.763 169.582) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 95) + (uuid "e09d8c7b-f917-4f49-8889-7bb1e7292345") + ) + (segment + (start 89.1338 77.926) + (end 91.8308 80.623) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "097331b1-fa17-46bf-a170-f9238afac20c") + ) + (segment + (start 135.763 169.582) + (end 150.5701 184.3891) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "1d95e533-6405-43b0-a7d4-f4a39b631983") + ) + (segment + (start 150.5701 184.3891) + (end 199.3159 184.3891) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "2a20ad36-5224-4453-92da-2e27746a576f") + ) + (segment + (start 93.5148 80.623) + (end 103.8011 90.9093) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "5f7f407a-0491-4aaa-b134-a5a663f4a76d") + ) + (segment + (start 199.3159 184.3891) + (end 201.855 186.9282) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "843bc0d3-2122-4470-a226-4a3a4e30bd1b") + ) + (segment + (start 103.8011 90.9093) + (end 115.4935 90.9093) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "94a968ed-a856-4934-a213-b1c0000a2563") + ) + (segment + (start 119.292 94.7078) + (end 121.303 94.7078) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "a07246f4-dc44-4d90-a77a-a8eac8e34b8a") + ) + (segment + (start 115.4935 90.9093) + (end 119.292 94.7078) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "a525cf4d-b573-46a5-ba70-7a25bad8e35e") + ) + (segment + (start 91.8308 80.623) + (end 93.5148 80.623) + (width 0.2) + (layer "In1.Cu") + (net 95) + (uuid "d4555c62-a876-4b56-a2c9-8af4b7cc2a78") + ) + (segment + (start 96.9676 66.335) + (end 96.7482 66.1156) + (width 0.2) + (layer "F.Cu") + (net 97) + (uuid "3728b7e2-06b5-45a7-bdb0-e1fa72c2fc2d") + ) + (segment + (start 96.7482 66.1156) + (end 95.845 66.1156) + (width 0.2) + (layer "F.Cu") + (net 97) + (uuid "482fde45-a10b-4523-bc43-6d86959f1b2e") + ) + (segment + (start 82.8603 78.7984) + (end 81.5154 78.7984) + (width 0.2) + (layer "F.Cu") + (net 97) + (uuid "6162781d-4e72-446d-ac5d-21a7ce0609e4") + ) + (segment + (start 81.5154 78.7984) + (end 81.4763 78.8375) + (width 0.2) + (layer "F.Cu") + (net 97) + (uuid "632164ca-26cc-4aa2-8456-4f4a97d05f55") + ) + (via + (at 82.8603 78.7984) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 97) + (uuid "0399cb5b-ef5b-43cd-94fa-7e6bcc590205") + ) + (via + (at 118.3304 66.6513) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 97) + (uuid "374fad19-b206-49ce-b6da-73dc17824097") + ) + (via + (at 82.5023 69.1998) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 97) + (uuid "3aa842d4-698c-46fb-bc64-dbd6908c5693") + ) + (via + (at 93.7702 68.5938) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 97) + (uuid "789398b8-612e-4375-ab3b-39d30bc18f56") + ) + (via + (at 93.8521 66.3357) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 97) + (uuid "bd511b99-8c00-4cc4-a15e-4f31ee956fb2") + ) + (via + (at 96.9676 66.335) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 97) + (uuid "d7682148-fe5d-4200-ae72-50dd25edbfee") + ) + (segment + (start 82.5023 69.1998) + (end 93.1642 69.1998) + (width 0.2) + (layer "In1.Cu") + (net 97) + (uuid "a0336fa3-a45d-49d4-b90b-1aecef30ed2f") + ) + (segment + (start 118.3304 66.6513) + (end 118.0141 66.335) + (width 0.2) + (layer "In1.Cu") + (net 97) + (uuid "a1b68537-9526-4d1d-8789-5314d97dc014") + ) + (segment + (start 96.9676 66.335) + (end 93.8528 66.335) + (width 0.2) + (layer "In1.Cu") + (net 97) + (uuid "a3966ff5-03f0-4ac3-ab23-05ca713353ae") + ) + (segment + (start 93.8528 66.335) + (end 93.8521 66.3357) + (width 0.2) + (layer "In1.Cu") + (net 97) + (uuid "cb12605f-924d-4d2d-b6be-92296d983f62") + ) + (segment + (start 118.0141 66.335) + (end 96.9676 66.335) + (width 0.2) + (layer "In1.Cu") + (net 97) + (uuid "d1a53c39-b957-43a8-91f9-3d242c19cd5d") + ) + (segment + (start 93.1642 69.1998) + (end 93.7702 68.5938) + (width 0.2) + (layer "In1.Cu") + (net 97) + (uuid "e151e087-2a6d-48e3-ad53-0c10cef98c3d") + ) + (segment + (start 93.7702 66.4176) + (end 93.7702 68.5938) + (width 0.2) + (layer "In2.Cu") + (net 97) + (uuid "42f8a70c-802d-4231-8bfe-2bdf7f782346") + ) + (segment + (start 82.2617 78.1998) + (end 82.8603 78.7984) + (width 0.2) + (layer "In2.Cu") + (net 97) + (uuid "51504293-e151-4f63-8251-d5dfa23e0866") + ) + (segment + (start 82.5023 69.1998) + (end 82.2617 69.4404) + (width 0.2) + (layer "In2.Cu") + (net 97) + (uuid "6d25dc05-5efe-4945-81e7-8e04e13124f0") + ) + (segment + (start 93.8521 66.3357) + (end 93.7702 66.4176) + (width 0.2) + (layer "In2.Cu") + (net 97) + (uuid "a3726037-30d0-4d59-9717-240f59432621") + ) + (segment + (start 82.2617 69.4404) + (end 82.2617 78.1998) + (width 0.2) + (layer "In2.Cu") + (net 97) + (uuid "dda7e682-64c3-4b5b-90d5-d73bc312ab6e") + ) + (segment + (start 273.451 135.731) + (end 273.451 130.505) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "08a0365a-b5a3-41de-bab0-7dd7b075cef5") + ) + (segment + (start 273.451 130.505) + (end 269.017 126.07) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "3a8724ab-54fb-43f0-846f-943b3c67f038") + ) + (segment + (start 266.767 87.183) + (end 271.07 82.8801) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "5fe8c86d-3a27-46c3-b4d6-06806c0d4b09") + ) + (segment + (start 271.07 82.8801) + (end 271.07 71.6756) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "a9e25010-d7f4-4c21-a106-50825c6a831c") + ) + (segment + (start 281.922 144.202) + (end 273.451 135.731) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "b09ef074-a7bf-4da0-91d9-875290f37a84") + ) + (segment + (start 269.017 111.188) + (end 259.492 101.663) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "c71cca6f-053d-4892-bd40-9350148a62d5") + ) + (segment + (start 259.524 92.5084) + (end 264.85 87.183) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "cb824429-9ca7-4bb3-9562-f213e7f9d2d5") + ) + (segment + (start 281.922 149.701) + (end 281.922 144.202) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "cdacb455-7c84-47d2-9146-4694ecb6290c") + ) + (segment + (start 269.017 126.07) + (end 269.017 111.188) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "e3edc0ea-ffa9-4fa7-a7bd-bb1793af12a5") + ) + (segment + (start 264.85 87.183) + (end 266.767 87.183) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "e6dd5835-1d25-4ad1-ab74-9c0279dee3f7") + ) + (segment + (start 259.492 101.663) + (end 259.492 92.5084) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "f68afc62-f408-4514-a855-0ad2c5e540c2") + ) + (segment + (start 259.492 92.5084) + (end 259.524 92.5084) + (width 0.2) + (layer "F.Cu") + (net 98) + (uuid "fe36afb9-a38f-4163-83cf-8e3daeaa4766") + ) + (via + (at 281.922 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 98) + (uuid "e1d9713b-acd6-4b46-b87e-c92884a594a3") + ) + (segment + (start 280.1725 148.9253) + (end 280.1725 148.1495) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "04de86a6-98e1-449c-b4a8-741d7c79a80f") + ) + (segment + (start 279.1484 148.9253) + (end 278.3725 149.7012) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "1369f952-b0c7-4de7-9024-a3ad82e79a7b") + ) + (segment + (start 280.1725 149.7012) + (end 280.1725 148.9253) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "14ac8b85-908d-48aa-aae5-8a7224b1caf2") + ) + (segment + (start 281.9225 149.7012) + (end 281.9222 149.7012) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "256ac077-6ca8-4467-bf0b-69b75d3006cb") + ) + (segment + (start 280.1725 148.1495) + (end 281.146 148.1495) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "25e8c49a-f8d8-4d20-bbe3-766d0ea779be") + ) + (segment + (start 281.146 148.1495) + (end 281.922 148.9255) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "4e3e0901-5876-4b98-9763-e739b8d5381a") + ) + (segment + (start 281.9222 149.7012) + (end 281.922 149.701) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "95008814-d1b4-4bf6-8754-ccdae5faa6b2") + ) + (segment + (start 281.922 148.9255) + (end 281.922 149.701) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "d35e7b11-2238-4b5e-9310-690fb11f6a43") + ) + (segment + (start 280.1725 148.9253) + (end 279.1484 148.9253) + (width 0.2) + (layer "B.Cu") + (net 98) + (uuid "e6dd5999-f102-43f5-92c3-00fb110164f2") + ) + (segment + (start 81.991 68.5425) + (end 82.8733 68.5425) + (width 0.2) + (layer "F.Cu") + (net 99) + (uuid "2d17bdc1-b392-4d7c-b437-0c1b9ef09ef1") + ) + (segment + (start 82.8733 68.5425) + (end 83.4464 69.1156) + (width 0.2) + (layer "F.Cu") + (net 99) + (uuid "4e60272b-f078-407c-a4d9-35e6ea7768f6") + ) + (segment + (start 84.345 69.1156) + (end 83.4464 69.1156) + (width 0.2) + (layer "F.Cu") + (net 99) + (uuid "8d77c69e-7c4e-40de-b7a7-a328acf8898b") + ) + (via + (at 81.991 68.5425) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 99) + (uuid "12cae4a3-c9a2-4277-8e06-d83f8c8f3a2e") + ) + (via + (at 54.70125 69.975) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 99) + (uuid "329d630a-7091-491b-88ed-4c16019cf132") + ) + (segment + (start 56.13375 68.5425) + (end 81.991 68.5425) + (width 0.2) + (layer "In1.Cu") + (net 99) + (uuid "2afbe60a-585c-44dc-8e2e-1f816239d721") + ) + (segment + (start 54.70125 69.975) + (end 56.13375 68.5425) + (width 0.2) + (layer "In1.Cu") + (net 99) + (uuid "8e736483-2291-4990-b0f3-e13ef6d11da1") + ) + (segment + (start 54.70125 69.975) + (end 52.2112 72.46505) + (width 0.2) + (layer "In2.Cu") + (net 99) + (uuid "2266f13d-3d99-4aea-b1ea-f60054dfaeb7") + ) + (segment + (start 52.2112 118.5289) + (end 49.6138 121.1263) + (width 0.2) + (layer "In2.Cu") + (net 99) + (uuid "2ca6e860-7893-4edd-bce7-9e42d7b398c7") + ) + (segment + (start 52.2112 72.46505) + (end 52.2112 118.5289) + (width 0.2) + (layer "In2.Cu") + (net 99) + (uuid "847786eb-33e6-485f-9263-54fdd1118982") + ) + (segment + (start 278.292 89.8147) + (end 278.484 89.6225) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "250358c4-1de8-4225-90f4-33be538a858d") + ) + (segment + (start 291.776 127.862) + (end 291.776 115.36) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "3c3f55dd-1f67-4d55-a700-c24462fb54e4") + ) + (segment + (start 291.776 115.36) + (end 278.292 101.876) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "503cf6c9-8caa-42be-bd09-a6e409737b7a") + ) + (segment + (start 286.548 76.7864) + (end 286.5481 76.7863) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "5f0f5737-c0a2-4e67-a500-f818b0a78072") + ) + (segment + (start 278.484 89.6225) + (end 282.187 89.6225) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "62897484-70b3-4d76-9f3e-334dcffa1a68") + ) + (segment + (start 307.346 143.432) + (end 291.776 127.862) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "6fc385e0-6a4d-450a-b17a-0c1ecad4e6b6") + ) + (segment + (start 307.346 149.701) + (end 307.346 143.432) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "907152b6-5f8b-495c-8371-c173752b67a1") + ) + (segment + (start 286.548 81.8973) + (end 286.548 76.7864) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "a0611789-4e25-4e4c-809c-49ab2732eb93") + ) + (segment + (start 286.548 76.7864) + (end 286.548 81.8973) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "a4a94800-9f5a-4c3a-9b67-582158eb140e") + ) + (segment + (start 286.5481 76.7863) + (end 286.5481 71.6756) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "aa66b2c9-f21e-4c84-8d7e-fa6f5cf4a10e") + ) + (segment + (start 282.187 89.6225) + (end 286.548 85.2612) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "d6f87b4a-fc51-499d-9ef4-915019c0a068") + ) + (segment + (start 286.548 85.2612) + (end 286.548 81.8973) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "da878c56-b510-4633-9236-eff8bd693690") + ) + (segment + (start 278.292 101.876) + (end 278.292 89.8147) + (width 0.2) + (layer "F.Cu") + (net 102) + (uuid "ec5fdca5-1e65-467f-a1ca-639ea07d5977") + ) + (via + (at 307.346 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 102) + (uuid "f189de86-772a-43af-a2fb-0121b4a0a89a") + ) + (segment + (start 307.3463 149.7012) + (end 307.3462 149.7012) + (width 0.2) + (layer "B.Cu") + (net 102) + (uuid "2d9724e0-bc85-457b-a304-86ab77f05755") + ) + (segment + (start 307.3462 149.7012) + (end 307.346 149.701) + (width 0.2) + (layer "B.Cu") + (net 102) + (uuid "30188a85-68f0-4a62-be4e-5957c35100f3") + ) + (segment + (start 305.956 149.701) + (end 307.346 149.701) + (width 0.2) + (layer "In2.Cu") + (net 102) + (uuid "696cb3ab-ae58-458a-894b-9740c8aef077") + ) + (segment + (start 304.566 149.701) + (end 305.956 149.701) + (width 0.2) + (layer "In2.Cu") + (net 102) + (uuid "aa44308c-c8a6-47bb-820f-905717d9610a") + ) + (segment + (start 305.956 149.701) + (end 304.5665 149.701) + (width 0.2) + (layer "In2.Cu") + (net 102) + (uuid "b5735630-2859-44a7-a92f-de20cbc5f3bc") + ) + (segment + (start 304.5665 149.701) + (end 304.5663 149.7012) + (width 0.2) + (layer "In2.Cu") + (net 102) + (uuid "bc3e46cb-b726-41d9-ada3-bef5872c84e4") + ) + (segment + (start 331.197 112.504) + (end 331.197 145.852) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "0556191d-5d74-4f8f-87c7-5cc0e1b32eb3") + ) + (segment + (start 312.7419 73.4018) + (end 312.7419 71.6756) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "0691c0ef-4362-418d-a1b5-56f062827ad6") + ) + (segment + (start 312.742 73.4019) + (end 312.7419 73.4018) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "340b4088-2ddc-4bd7-917f-19041f186b61") + ) + (segment + (start 325.839 91.6782) + (end 325.839 107.146) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "3f367987-7b78-46c6-9eb2-809999343ceb") + ) + (segment + (start 312.742 78.5811) + (end 325.839 91.6782) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "48f83b5d-d7ca-4f88-af18-4873bfb47d86") + ) + (segment + (start 334.31 148.965) + (end 334.31 149.701) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "49139629-f8f0-4609-a719-967c123b4488") + ) + (segment + (start 312.742 73.4019) + (end 312.742 75.1283) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "6d11bafa-8e5c-4c52-9da9-7c8cc1f09ba7") + ) + (segment + (start 312.742 75.1283) + (end 312.742 73.4019) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "819f0c6e-0cb3-4182-9603-6e7ab80b6611") + ) + (segment + (start 325.839 107.146) + (end 331.197 112.504) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "a94807fa-5ece-4386-bd3b-37e056e47b43") + ) + (segment + (start 312.742 75.1283) + (end 312.742 78.5811) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "accd0f80-81da-4b46-9a43-a6e2ff59e3d4") + ) + (segment + (start 331.197 145.852) + (end 334.31 148.965) + (width 0.2) + (layer "F.Cu") + (net 103) + (uuid "b1079e2e-f828-4c1d-a15b-14462b80e142") + ) + (via + (at 334.31 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 103) + (uuid "91ea350f-f4ca-4679-aff7-7abc275248ad") + ) + (segment + (start 330.76 148.9253) + (end 331.5358 148.1495) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "0887ca5a-7746-48e0-859c-c80cd65f189f") + ) + (segment + (start 332.56 149.7012) + (end 332.56 148.9253) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "178b836d-f457-4e7b-93e7-36129981e846") + ) + (segment + (start 332.56 148.9253) + (end 332.56 148.1495) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "3b0aefab-bf4e-438b-90f8-b728b9bbbfaf") + ) + (segment + (start 334.31 149.701) + (end 334.31 149.7012) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "4ea93676-a0e5-4fa0-a2c9-e540cadf8b1a") + ) + (segment + (start 331.5358 148.1495) + (end 332.56 148.1495) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "69ed688c-aef5-4c5e-bf87-a7433554efc4") + ) + (segment + (start 333.5341 148.9253) + (end 334.31 149.7012) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "80f07bf5-7445-4794-8217-3c1dbb8f9311") + ) + (segment + (start 330.76 149.7012) + (end 330.76 148.9253) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "be9a485a-c9b8-4833-8351-8716c06b49b2") + ) + (segment + (start 332.56 148.9253) + (end 333.5341 148.9253) + (width 0.2) + (layer "B.Cu") + (net 103) + (uuid "fbd8ad37-dd91-42ac-b9f0-ac8389bbbe2f") + ) + (segment + (start 345.171 82.6878) + (end 354.544 92.0608) + (width 0.2) + (layer "F.Cu") + (net 104) + (uuid "0249d863-9f57-4977-8c7f-c8b76463c1a7") + ) + (segment + (start 354.544 92.0608) + (end 354.544 148.517) + (width 0.2) + (layer "F.Cu") + (net 104) + (uuid "03876d46-00ba-4c17-bd64-b78ec19732ed") + ) + (segment + (start 328.22 77.9857) + (end 332.922 82.6878) + (width 0.2) + (layer "F.Cu") + (net 104) + (uuid "2a1adfda-0fd3-42e5-a81a-73f06d428b49") + ) + (segment + (start 354.544 148.517) + (end 353.36 149.701) + (width 0.2) + (layer "F.Cu") + (net 104) + (uuid "4289e84c-dcb1-4190-946d-2cb34d8cea2e") + ) + (segment + (start 332.922 82.6878) + (end 345.171 82.6878) + (width 0.2) + (layer "F.Cu") + (net 104) + (uuid "557ba191-3f6e-4ae9-92a7-9a99bb953eeb") + ) + (segment + (start 328.22 71.6756) + (end 328.22 77.9857) + (width 0.2) + (layer "F.Cu") + (net 104) + (uuid "61666def-5fc2-43bf-bc20-57bbf73f0128") + ) + (via + (at 353.36 149.701) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 104) + (uuid "9139d046-cfd0-4386-9dc2-ab007e0f681c") + ) + (segment + (start 351.61 148.1495) + (end 352.5842 148.1495) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "5cb8b797-c6ef-469f-88c9-e1796d3f512d") + ) + (segment + (start 352.5842 148.1495) + (end 353.36 148.9253) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "722140af-d712-4e76-b3d9-048b49324a51") + ) + (segment + (start 349.81 149.7012) + (end 349.81 148.9253) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "88216ef6-270e-4197-a7ac-cc886774bd30") + ) + (segment + (start 351.61 149.7012) + (end 351.61 148.1495) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "a7192f2a-b1aa-49fe-aed9-5108dc1c127d") + ) + (segment + (start 353.36 149.701) + (end 353.36 149.7012) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "c71d58e4-c1b0-4fd0-a7a1-4dcb4832732a") + ) + (segment + (start 353.36 148.9253) + (end 353.36 149.701) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "dd28cb95-292f-4aa1-acb7-29c14a3ade47") + ) + (segment + (start 349.81 148.9253) + (end 350.5858 148.1495) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "f4d621b3-d41f-4e0a-a1e1-1bf3da23f089") + ) + (segment + (start 350.5858 148.1495) + (end 351.61 148.1495) + (width 0.2) + (layer "B.Cu") + (net 104) + (uuid "f6171048-c589-4782-ac9b-eeac3a15f0f4") + ) + (segment + (start 146.054 75.1284) + (end 146.054 71.6756) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "06701de7-4de2-40ca-9d4d-2a195a0512fb") + ) + (segment + (start 102.319 168.751) + (end 111.526 159.544) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "1eec054a-b550-4ac0-acfb-c6c135efe478") + ) + (segment + (start 97.6704 83.3438) + (end 141.292 83.3438) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "2b32877c-aa4b-4fb4-b710-2a5235fef883") + ) + (segment + (start 146.054 75.1284) + (end 146.054 71.6756) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "4b40d12e-9fe2-4930-9cae-54c4f5433f96") + ) + (segment + (start 111.526 159.544) + (end 111.526 149.691) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "56beb03a-da19-4b0b-8ea7-cd26097481c4") + ) + (segment + (start 88.8131 102.434) + (end 88.8131 92.2011) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "635dd99d-91de-44e5-854e-f3614f8f3ff8") + ) + (segment + (start 101.734 129.047) + (end 101.734 115.355) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "8ba7f2ed-9aff-4033-9db6-ee0e25ec11b0") + ) + (segment + (start 146.054 78.5813) + (end 146.054 75.1284) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "9731f2dc-61ac-4be8-abfb-57711480e879") + ) + (segment + (start 111.526 149.691) + (end 102.925 141.089) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "a57cba6f-4852-4836-9ba7-dcf719332dde") + ) + (segment + (start 101.734 115.355) + (end 88.8131 102.434) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "a6d784ef-e324-4424-9060-6d4277183238") + ) + (segment + (start 141.292 83.3438) + (end 146.054 78.5813) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "b5ead13a-e9db-45c5-9799-73e3a488da01") + ) + (segment + (start 102.925 130.238) + (end 101.734 129.047) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "beadd446-dacc-4d3b-9215-c6e97d6e8101") + ) + (segment + (start 146.0544 71.6756) + (end 146.054 71.6756) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "d21b6515-8e80-45a2-803b-9719dbce9d24") + ) + (segment + (start 102.925 141.089) + (end 102.925 130.238) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "d9640115-10f1-4426-abea-9baaee815e5a") + ) + (segment + (start 93.0338 168.751) + (end 102.319 168.751) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "e5a64108-954a-43d9-8768-bec44fd25e05") + ) + (segment + (start 88.8131 92.2011) + (end 97.6704 83.3438) + (width 0.2) + (layer "F.Cu") + (net 107) + (uuid "ef6f25c8-06e3-4a5f-9134-a9f3a87ea57e") + ) + (via + (at 93.0338 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 107) + (uuid "4a73c1d3-a8d6-47c4-9989-454101c7c7ff") + ) + (segment + (start 93.0338 168.7512) + (end 93.0338 168.751) + (width 0.2) + (layer "B.Cu") + (net 107) + (uuid "e0a2dc91-b7c2-435c-8279-292832c1fae1") + ) + (segment + (start 93.0336 168.7512) + (end 93.0338 168.751) + (width 0.2) + (layer "In1.Cu") + (net 107) + (uuid "3b4bbf42-f45c-4e23-b5d8-f0e59d3057e0") + ) + (segment + (start 90.2538 168.7512) + (end 93.0336 168.7512) + (width 0.2) + (layer "In1.Cu") + (net 107) + (uuid "8c1f2ab1-8493-4ac7-b363-4fde9b9cb556") + ) + (segment + (start 121.379 140.227) + (end 121.379 129.047) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "0aa1cd1a-d497-4458-82b5-abb32380b5c2") + ) + (segment + (start 116.289 109.744) + (end 108.343 101.798) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "15ea7159-35d4-4a25-b488-aecc411a0050") + ) + (segment + (start 161.532 72.2257) + (end 161.5325 72.2252) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "19d449e0-232d-497a-beed-ee5cde91db61") + ) + (segment + (start 161.532 72.2257) + (end 161.532 72.7758) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "1e684d83-2370-42f8-ac0e-de1a1d92f090") + ) + (segment + (start 130.05 161.26) + (end 130.05 148.898) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "243a6359-98ea-488d-84f5-83b1d268213d") + ) + (segment + (start 108.343 85.4059) + (end 108.765 84.9838) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "37016f1b-89e1-4970-8d14-9a660b345370") + ) + (segment + (start 121.379 129.047) + (end 120.654 128.321) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "3a25fc69-fb56-4e4f-a48f-3c58c5fe10ea") + ) + (segment + (start 120.654 120.118) + (end 116.945 116.41) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "3f1fff64-e00b-4343-89e1-0f84b17b4cb6") + ) + (segment + (start 161.532 72.7758) + (end 161.532 72.2257) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "4f9baf48-fce6-4809-8820-a9b7e385d5f3") + ) + (segment + (start 116.846 168.751) + (end 122.559 168.751) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "54b1e33f-a08c-40a9-937b-3d60848d524a") + ) + (segment + (start 130.05 148.898) + (end 121.379 140.227) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "5b30a001-eca5-4c2f-9bef-5b78d849e0bd") + ) + (segment + (start 155.13 84.9838) + (end 161.533 78.5813) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "66cf4e8e-5d44-442e-b1f8-3c0a6c961e23") + ) + (segment + (start 116.945 110.456) + (end 116.289 109.8) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "844fbedc-c606-4144-a67e-a0714a0ce69f") + ) + (segment + (start 108.765 84.9838) + (end 155.13 84.9838) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "8fc2af8a-8a83-48de-91e7-dc28c8c3abe1") + ) + (segment + (start 161.5325 72.2252) + (end 161.5325 71.6756) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "9052e0d2-df0f-4906-841c-f4fd729ffda2") + ) + (segment + (start 116.945 116.41) + (end 116.945 110.456) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "98b36886-9c48-4491-9801-d9e13c2aa50d") + ) + (segment + (start 120.654 128.321) + (end 120.654 120.118) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "a17faee2-6bb6-4840-bbf0-fcf281b80183") + ) + (segment + (start 122.559 168.751) + (end 130.05 161.26) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "b76c60f8-51ea-4d8e-818b-d78a671b9568") + ) + (segment + (start 108.343 101.798) + (end 108.343 85.4059) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "cd767626-4311-4d91-a27f-18df655445b3") + ) + (segment + (start 161.533 78.5813) + (end 161.532 78.5812) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "ce5713da-015c-488c-aba7-3a22dbef58f2") + ) + (segment + (start 161.532 78.5812) + (end 161.532 72.7758) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "cee1141c-c30c-4aca-90fe-e641dc8a9d57") + ) + (segment + (start 116.289 109.8) + (end 116.289 109.744) + (width 0.2) + (layer "F.Cu") + (net 109) + (uuid "d8179957-7228-47a1-bb72-51c040e68f2d") + ) + (via + (at 116.846 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 109) + (uuid "c7e314c4-fadd-49e6-9b1f-350d294eef01") + ) + (segment + (start 116.846 168.7511) + (end 116.846 168.751) + (width 0.2) + (layer "B.Cu") + (net 109) + (uuid "07c10e64-c65b-407e-8f4e-849ee4812ccc") + ) + (segment + (start 116.8463 168.7514) + (end 116.846 168.7511) + (width 0.2) + (layer "B.Cu") + (net 109) + (uuid "bc19c8f0-c4d7-47c2-82aa-33c8157455f5") + ) + (segment + (start 116.8456 168.7514) + (end 116.846 168.751) + (width 0.2) + (layer "In1.Cu") + (net 109) + (uuid "ccd52f4e-a0ce-41ce-91c0-cfe2e54af749") + ) + (segment + (start 114.0663 168.7514) + (end 116.8456 168.7514) + (width 0.2) + (layer "In1.Cu") + (net 109) + (uuid "da05ea98-bf93-43c4-a930-de36d7932995") + ) + (segment + (start 164.384 102.001) + (end 164.384 90.5736) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "055c3e8c-0e2e-48d6-ae1b-e27d1ecf09c6") + ) + (segment + (start 185.951 148.233) + (end 185.94 148.233) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "18794057-17a4-4609-a973-a99d39f3c18f") + ) + (segment + (start 203.204 74.5653) + (end 203.204 76.4837) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "1d5d5f0d-f5d0-4704-addb-f591e0bb4968") + ) + (segment + (start 203.204 73.6021) + (end 203.204 74.5653) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "2aca0a3f-efc9-444f-9fe5-765f88c95d14") + ) + (segment + (start 165.648 89.3099) + (end 192.476 89.3099) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "3463806c-4689-4725-a085-7db41c08d242") + ) + (segment + (start 203.204 78.5812) + (end 203.204 76.4837) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "5f3e1dab-c7ac-41de-8b02-3787b67aac0e") + ) + (segment + (start 164.384 90.5736) + (end 165.648 89.3099) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "6d13ff8d-b189-43a3-bcfd-088040b54b57") + ) + (segment + (start 192.476 89.3099) + (end 203.205 78.5813) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "7b3999aa-78ae-4230-af07-9c7b0717594e") + ) + (segment + (start 203.204 73.6021) + (end 203.2044 73.6017) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "7e1e6b04-7302-410b-adc4-19e3a63ba58f") + ) + (segment + (start 203.204 76.4837) + (end 203.204 75.529) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "808d9c27-976c-48df-bd98-91f35c1ef8a1") + ) + (segment + (start 179.125 131.297) + (end 174.095 126.267) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "a2919452-38cd-4f4d-afad-fcaca20d3b99") + ) + (segment + (start 185.94 148.233) + (end 179.125 141.417) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "a9c94bdc-62cd-4e6c-96e3-9890b2fb6dc4") + ) + (segment + (start 203.204 74.5653) + (end 203.204 73.6021) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "ab71e8c6-186c-4516-ac7b-d823f974ba45") + ) + (segment + (start 188.284 168.91) + (end 188.284 150.566) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "ae45d836-a11d-4ac9-807b-4fbe76a3a96c") + ) + (segment + (start 188.284 150.566) + (end 185.951 148.233) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "ba6a6a47-9f7a-4c30-9f86-e614fd453dbe") + ) + (segment + (start 174.095 126.267) + (end 174.095 111.712) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "bdf99d71-713d-4f9f-8617-ece80d71c561") + ) + (segment + (start 203.205 78.5813) + (end 203.204 78.5812) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "d07f6ad6-4957-476f-b6a0-7cdb53c69546") + ) + (segment + (start 174.095 111.712) + (end 164.384 102.001) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "d781dfe6-6368-4cd0-b60b-4344ecfeb8d2") + ) + (segment + (start 179.125 141.417) + (end 179.125 131.297) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "e37333a3-9c5a-43c6-b251-89c824db9e87") + ) + (segment + (start 203.2044 73.6017) + (end 203.2044 71.6756) + (width 0.2) + (layer "F.Cu") + (net 110) + (uuid "e3ff2ae5-6124-4258-9069-d7fc3153499c") + ) + (via + (at 188.284 168.91) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 110) + (uuid "42ba14ec-a5b0-4fb0-8673-a0b1cb52fff6") + ) + (segment + (start 188.2838 168.91) + (end 188.284 168.91) + (width 0.2) + (layer "B.Cu") + (net 110) + (uuid "895381fe-ef79-4f65-b0b7-4a1b0a9e358f") + ) + (segment + (start 188.284 168.91) + (end 185.5038 168.91) + (width 0.2) + (layer "In1.Cu") + (net 110) + (uuid "cdd38a8a-b602-47d5-b96d-4e38e840f5f7") + ) + (segment + (start 84.345 68.6156) + (end 83.5881 68.6156) + (width 0.2) + (layer "F.Cu") + (net 111) + (uuid "44023990-e7f8-46e1-9ab0-9e9f15203c9b") + ) + (segment + (start 83.5881 68.6156) + (end 82.8879 67.9154) + (width 0.2) + (layer "F.Cu") + (net 111) + (uuid "585f03df-954d-416b-866e-f8bc37fd3bb6") + ) + (segment + (start 81.3892 69.0872) + (end 81.5138 69.2118) + (width 0.2) + (layer "F.Cu") + (net 111) + (uuid "7eef9e43-7c92-45a7-90d5-09ab8c548949") + ) + (segment + (start 81.3892 68.2829) + (end 81.3892 69.0872) + (width 0.2) + (layer "F.Cu") + (net 111) + (uuid "833d279b-65e4-4d01-a327-25d079f589b6") + ) + (segment + (start 81.7567 67.9154) + (end 81.3892 68.2829) + (width 0.2) + (layer "F.Cu") + (net 111) + (uuid "951b88c1-f3dc-4ead-9cb8-99a94820a914") + ) + (segment + (start 82.8879 67.9154) + (end 81.7567 67.9154) + (width 0.2) + (layer "F.Cu") + (net 111) + (uuid "acc60633-9ae2-453b-adeb-729bd70e5535") + ) + (via + (at 81.5138 69.2118) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 111) + (uuid "4694b017-f8be-41e0-b18e-34316c2c6cd5") + ) + (via + (at 54.70125 72.425) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 111) + (uuid "49b4ba73-0d6b-46de-8ad3-01b17e5370aa") + ) + (segment + (start 59.6346 69.2118) + (end 81.5138 69.2118) + (width 0.2) + (layer "In1.Cu") + (net 111) + (uuid "3f1bccdf-35a4-4136-a160-6fdb083ae9c4") + ) + (segment + (start 56.4214 72.425) + (end 59.6346 69.2118) + (width 0.2) + (layer "In1.Cu") + (net 111) + (uuid "8785efc4-b9a9-49d6-a223-11f7f2834431") + ) + (segment + (start 54.70125 72.425) + (end 56.4214 72.425) + (width 0.2) + (layer "In1.Cu") + (net 111) + (uuid "bdc14e1a-a207-41c6-8524-d4964e33e5f2") + ) + (segment + (start 53.0072 120.2729) + (end 49.6138 123.6663) + (width 0.2) + (layer "In2.Cu") + (net 111) + (uuid "56bbfe9c-2a95-454f-9db1-f2502e5b51d2") + ) + (segment + (start 53.0072 74.11905) + (end 53.0072 120.2729) + (width 0.2) + (layer "In2.Cu") + (net 111) + (uuid "5df39b04-0cc0-4986-b67e-30a6bc98ee2a") + ) + (segment + (start 54.70125 72.425) + (end 53.0072 74.11905) + (width 0.2) + (layer "In2.Cu") + (net 111) + (uuid "d4ed6355-1ac4-4b00-bbca-032c0399321a") + ) + (segment + (start 250.89 122.827) + (end 254.729 126.666) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "1359ddd0-2b45-4b7a-ad25-73934ea7dbd5") + ) + (segment + (start 257.973 80.9627) + (end 254.341 84.5951) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "1378b862-2aa9-4cf0-b5e7-8a7badca97e5") + ) + (segment + (start 257.9731 71.6756) + (end 257.973 71.6756) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "1d3ce9ea-5de3-4d70-a677-df3487a556c6") + ) + (segment + (start 241.808 91.6057) + (end 241.808 103.15) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "41c437de-1dd6-4463-8b2c-689c9c00f05a") + ) + (segment + (start 241.808 103.15) + (end 250.89 112.232) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "49e9a85b-0151-4677-85a2-3db97e178255") + ) + (segment + (start 248.819 84.5951) + (end 241.808 91.6057) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "7d9a5b0c-41a7-4bfc-9752-ffbd04f58f32") + ) + (segment + (start 257.973 80.9623) + (end 257.973 80.9625) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "9b61304e-b919-4b56-9bc8-510ee2aa65ab") + ) + (segment + (start 257.973 71.6756) + (end 257.973 80.9623) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "a0d1c377-5254-4fb9-bba4-490ad919250a") + ) + (segment + (start 263.4 147.112) + (end 263.4 163.461) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "a9344238-27bc-4589-9a11-120d6d4bf28a") + ) + (segment + (start 254.729 138.441) + (end 263.4 147.112) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "baa58c13-978a-46e3-92e1-e3f694f173cb") + ) + (segment + (start 257.973 80.9623) + (end 257.973 80.9627) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "c3298d92-9d5b-4077-8d98-f1f8fbec69a7") + ) + (segment + (start 254.341 84.5951) + (end 248.819 84.5951) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "c3d2dfb2-6ec5-4350-8c3e-87b91dd784a1") + ) + (segment + (start 250.89 112.232) + (end 250.89 122.827) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "cfff1d3f-1674-4080-b041-49c1baed0668") + ) + (segment + (start 254.729 126.666) + (end 254.729 138.441) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "e4035d76-a27d-4354-a5fb-4141d76c7bf3") + ) + (segment + (start 263.4 163.461) + (end 258.11 168.751) + (width 0.2) + (layer "F.Cu") + (net 112) + (uuid "e404203e-afd4-457b-832b-fe60d9460a5a") + ) + (via + (at 258.11 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 112) + (uuid "4aaf5ec2-f1d8-453d-8d04-b735fe7eae08") + ) + (segment + (start 255.3358 167.1995) + (end 256.36 167.1995) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "7b0a4215-c8e2-4ca1-ae12-1e40af8700c3") + ) + (segment + (start 256.36 167.9753) + (end 256.36 167.1995) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "88a3aee5-1d96-4d18-bf22-9d389401cced") + ) + (segment + (start 257.3343 167.9753) + (end 258.11 168.751) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "9052998f-5114-407c-afb0-57c3cf1d8f4c") + ) + (segment + (start 258.11 168.7512) + (end 258.11 168.751) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "9302a753-d185-41c9-a0d1-59aedad63b5c") + ) + (segment + (start 254.56 167.9753) + (end 255.3358 167.1995) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "ac5ee62d-6edc-4a3b-9414-1e44a967084f") + ) + (segment + (start 254.56 168.7512) + (end 254.56 167.9753) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "b2946be9-ccc1-4001-8f9c-4ba5fab408b4") + ) + (segment + (start 256.36 167.9753) + (end 257.3343 167.9753) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "df3102d6-5e25-465d-86a8-3e5063f2add6") + ) + (segment + (start 256.36 168.7512) + (end 256.36 167.9753) + (width 0.2) + (layer "B.Cu") + (net 112) + (uuid "ffe4cf7b-7d89-4b61-ad10-193d83be7621") + ) + (segment + (start 277.16 168.751) + (end 277.16 163.574) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "1ebbf4c7-f710-496a-a696-202e9f5e913e") + ) + (segment + (start 273.451 76.2287) + (end 273.451 80.7819) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "4b5f9376-8f26-4e51-83bc-af80cd5b81bf") + ) + (segment + (start 273.451 76.2287) + (end 273.4513 76.2284) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "52084ab0-6e3a-4b2d-90e8-315a49b2bafa") + ) + (segment + (start 266.903 87.511) + (end 273.451 80.9625) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "62a800b4-f6f8-42f3-8ca1-82391e601a6f") + ) + (segment + (start 277.16 163.574) + (end 282.976 157.758) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "68a3d691-44aa-4fa3-b50f-9dc2ecf9181f") + ) + (segment + (start 259.82 92.6766) + (end 264.986 87.511) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "aa52af85-5a43-4eda-8ccf-84387674dd09") + ) + (segment + (start 282.976 157.758) + (end 282.976 144.792) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "b48d433f-622b-43c3-8750-7bb032daa1fd") + ) + (segment + (start 259.82 101.527) + (end 259.82 92.6766) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "b5baac54-49ea-4076-b652-035d2c233460") + ) + (segment + (start 273.779 135.595) + (end 273.779 130.369) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "bbe69d6d-cf22-42f5-8510-84d163478678") + ) + (segment + (start 273.451 80.7819) + (end 273.451 76.2287) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "bca938e7-ac74-4062-92e0-3b1fa7e73a6f") + ) + (segment + (start 273.451 80.9625) + (end 273.451 80.7819) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "c64735bd-232f-45ca-bc9a-10b5e0d12b13") + ) + (segment + (start 273.779 130.369) + (end 269.345 125.935) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "c64a716d-c627-49df-a45c-3407b48e2d1c") + ) + (segment + (start 269.345 111.052) + (end 259.82 101.527) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "ddab94d4-57b4-4c30-8ba5-fa9c8c1d0827") + ) + (segment + (start 282.976 144.792) + (end 273.779 135.595) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "e6aa1cc6-a9ed-40ac-9a95-51e51bc50aae") + ) + (segment + (start 264.986 87.511) + (end 266.903 87.511) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "eaa5f14b-ba4b-41f5-885f-9baf17eb3f91") + ) + (segment + (start 269.345 125.935) + (end 269.345 111.052) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "f7a989f0-87ff-4c6e-aa53-a617338ca5a4") + ) + (segment + (start 273.4513 76.2284) + (end 273.4513 71.6756) + (width 0.2) + (layer "F.Cu") + (net 113) + (uuid "f997dda1-427d-40b6-a703-82dab77920eb") + ) + (via + (at 277.16 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 113) + (uuid "e7918d0b-3f74-44f0-a3c9-93fc20a84d20") + ) + (segment + (start 277.16 167.9753) + (end 277.16 168.751) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "01b358b7-3ab9-451b-9d55-47b5bed51e8d") + ) + (segment + (start 274.3858 167.1995) + (end 275.41 167.1995) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "06110b1e-0675-4018-92b3-0d302e53d7c3") + ) + (segment + (start 275.41 168.7512) + (end 275.41 167.1995) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "1c310f26-bf2a-4fa8-824e-2f2d9cd98fcf") + ) + (segment + (start 273.61 167.9753) + (end 274.3858 167.1995) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "2e34b110-0833-482f-be10-ffa5e89aeef7") + ) + (segment + (start 273.61 168.7512) + (end 273.61 167.9753) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "92e4adb9-05a6-48c1-8964-504239a1cd53") + ) + (segment + (start 276.3842 167.1995) + (end 277.16 167.9753) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "95a58210-b759-4e73-9ecd-7083f4d45a41") + ) + (segment + (start 275.41 168.7512) + (end 275.41 167.1995) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "974e7bea-4a70-49ac-8a7a-3f1dbdf2836d") + ) + (segment + (start 275.41 167.1995) + (end 276.3842 167.1995) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "bd38a83e-9b40-426c-b587-6f052a3887f7") + ) + (segment + (start 277.16 168.751) + (end 277.16 168.7512) + (width 0.2) + (layer "B.Cu") + (net 113) + (uuid "e2b7aec1-e90b-4573-970c-7ad640bb3bba") + ) + (segment + (start 288.929 83.3436) + (end 288.929 77.5096) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "0db0d357-b852-44e2-a50d-408726e03442") + ) + (segment + (start 278.62 101.609) + (end 278.62 89.9505) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "0f330e71-dd9f-4d14-bd38-42689be195da") + ) + (segment + (start 308.336 161.568) + (end 308.336 143.959) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "0fe3102e-8d2e-4e32-87b1-b4b5758ae9bf") + ) + (segment + (start 278.62 89.9505) + (end 282.323 89.9505) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "2638d696-10c2-4abe-8494-bcbcb1145bc8") + ) + (segment + (start 292.104 115.093) + (end 278.62 101.609) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "6b32d138-5e3f-4e43-a78b-232194a2fdb1") + ) + (segment + (start 288.9294 77.5092) + (end 288.9294 71.6756) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "6d6106f0-6ce2-497e-b6f4-df241ba14471") + ) + (segment + (start 296.21 168.751) + (end 301.153 168.751) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "79142eaa-0e72-4fe9-b355-209eb81f2c08") + ) + (segment + (start 282.323 89.9505) + (end 288.93 83.3438) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "8a7fd0e4-6816-4b05-bc88-33c1b9762683") + ) + (segment + (start 308.336 143.959) + (end 292.104 127.726) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "b47672c0-c827-4c88-9a91-92eac378affe") + ) + (segment + (start 288.929 77.5096) + (end 288.9294 77.5092) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "c0198a49-5646-4758-b6c3-d3340427d113") + ) + (segment + (start 288.93 83.3438) + (end 288.929 83.3436) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "c5ae55c3-677a-48ec-a99f-71c53abae083") + ) + (segment + (start 288.929 77.5096) + (end 288.929 71.6756) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "cd984982-93a9-4fd4-9486-d78a217371ee") + ) + (segment + (start 292.104 127.726) + (end 292.104 115.093) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "dce0ccc0-eb46-42b6-8633-c7cea010716a") + ) + (segment + (start 301.153 168.751) + (end 308.336 161.568) + (width 0.2) + (layer "F.Cu") + (net 114) + (uuid "e39ff98a-f5bc-4775-8a33-cfb10c6405a2") + ) + (via + (at 296.21 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 114) + (uuid "d80bfc31-b616-443b-b39f-e442709ba6e0") + ) + (segment + (start 296.21 167.9753) + (end 296.21 168.751) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "1070bfdb-7c69-4a09-9081-070565a14701") + ) + (segment + (start 292.66 167.9753) + (end 293.4358 167.1995) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "340847d5-87fd-487c-9641-cbd01650ff9e") + ) + (segment + (start 292.66 168.7512) + (end 292.66 167.9753) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "5831dd3d-2b60-4c49-97fa-00bbb0d51b61") + ) + (segment + (start 293.4358 167.1995) + (end 294.46 167.1995) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "5cd474b8-014d-4bad-8f04-f2c3fd581fd6") + ) + (segment + (start 294.46 167.1995) + (end 295.4342 167.1995) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "7c822705-9755-4797-9c10-20dbcb83f697") + ) + (segment + (start 295.4342 167.1995) + (end 296.21 167.9753) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "935e6700-d4e5-4e7c-897b-a8e04f0f827e") + ) + (segment + (start 294.46 168.7512) + (end 294.46 167.1995) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "beee3021-6539-42f4-8107-21efb1913952") + ) + (segment + (start 296.21 168.751) + (end 296.21 168.7512) + (width 0.2) + (layer "B.Cu") + (net 114) + (uuid "fe4b4318-d572-4ca7-b5b8-1f6e14468476") + ) + (segment + (start 55.6513 60.875) + (end 57.596 58.9303) + (width 0.2) + (layer "F.Cu") + (net 117) + (uuid "9a0c3fb2-548b-411f-ad0d-d9068e5d74d0") + ) + (segment + (start 57.596 58.9303) + (end 61.7704 58.9303) + (width 0.2) + (layer "F.Cu") + (net 117) + (uuid "b0470a99-222b-440b-9882-75c0a68b768b") + ) + (via + (at 61.7704 58.9303) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 117) + (uuid "19f0fdb1-2f35-4231-80a1-76ed710811d8") + ) + (via + (at 65.9106 57.6938) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 117) + (uuid "24324220-9ab3-44d8-a3b2-56c203ae36d6") + ) + (segment + (start 65.9106 55.9594) + (end 65.9106 57.6938) + (width 0.2) + (layer "B.Cu") + (net 117) + (uuid "5b064f2c-501d-4369-bdf7-a150ef5afa1c") + ) + (segment + (start 61.0106 58.1705) + (end 61.0106 55.9594) + (width 0.2) + (layer "B.Cu") + (net 117) + (uuid "d3cb0026-4925-494f-947a-716719c7f194") + ) + (segment + (start 61.7704 58.9303) + (end 61.0106 58.1705) + (width 0.2) + (layer "B.Cu") + (net 117) + (uuid "dc3fa339-4820-42bb-9a4c-b983d812c5f2") + ) + (segment + (start 61.7704 58.9303) + (end 64.6741 58.9303) + (width 0.2) + (layer "In1.Cu") + (net 117) + (uuid "8b21e943-bf2c-41ca-9a62-b49a17b8f8f3") + ) + (segment + (start 64.6741 58.9303) + (end 65.9106 57.6938) + (width 0.2) + (layer "In1.Cu") + (net 117) + (uuid "9bc4df89-e7e7-46cc-9b2c-dedc7ff5718d") + ) + (segment + (start 323.458 128.124) + (end 320.713 125.379) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "0525d890-edf8-4be4-8461-951a0e8f9a3b") + ) + (segment + (start 323.458 141.089) + (end 323.458 128.124) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "141d3242-0985-4962-9d19-d9ee09c7bd23") + ) + (segment + (start 302.026 80.1109) + (end 302.026 71.6756) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "3c8fa0f5-f0f0-480a-b94c-999c209a7b94") + ) + (segment + (start 320.713 125.379) + (end 320.713 125.248) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "5600ad68-7eed-4020-95b9-49978663eb5a") + ) + (segment + (start 315.26 168.751) + (end 315.26 149.287) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "5ad3dc76-c21a-4588-ae8d-600c62f8833e") + ) + (segment + (start 320.713 125.248) + (end 302.026 106.561) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "8165cb65-5fea-47af-8e88-e2e57aa458c1") + ) + (segment + (start 302.026 106.561) + (end 302.026 80.1109) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "a1d1bf4e-6243-44f1-898c-172df67c18ab") + ) + (segment + (start 302.0263 80.1106) + (end 302.0263 71.6756) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "ce48cbac-5f7f-4b87-bf6d-15f29c35bf4c") + ) + (segment + (start 315.26 149.287) + (end 323.458 141.089) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "cfabc567-641b-40dc-93e9-75589d18619d") + ) + (segment + (start 302.026 80.1109) + (end 302.0263 80.1106) + (width 0.2) + (layer "F.Cu") + (net 122) + (uuid "f644f5f8-3269-4ed6-83c1-e75775cf9ca7") + ) + (via + (at 315.26 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 122) + (uuid "22af7593-f42f-4c16-ae70-5f93d5a251b9") + ) + (segment + (start 315.26 168.7512) + (end 315.26 168.751) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "54bc3b40-d1e7-462b-b876-10956d579d3b") + ) + (segment + (start 314.4841 167.9753) + (end 315.26 168.7512) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "646e4b22-517a-4668-a859-85b63ddd3bb8") + ) + (segment + (start 311.71 167.9753) + (end 312.4858 167.1995) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "7bfaae62-17ce-4d46-bb01-86f6f260eed4") + ) + (segment + (start 311.71 168.7512) + (end 311.71 167.9753) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "a389e0ba-4d7d-43ed-b3a9-7782f0afcb4c") + ) + (segment + (start 313.51 167.9753) + (end 313.51 167.1995) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "ade4f770-0d5b-46b7-951e-21adf26c35a7") + ) + (segment + (start 313.51 167.9753) + (end 314.4841 167.9753) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "cf9afd5c-5b1f-496d-ad93-d31660eb44d8") + ) + (segment + (start 313.51 168.7512) + (end 313.51 167.9753) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "d47b3cb7-6a56-44fe-9862-6873403032d5") + ) + (segment + (start 312.4858 167.1995) + (end 313.51 167.1995) + (width 0.2) + (layer "B.Cu") + (net 122) + (uuid "dffc14de-80bf-43da-8b03-97cda0d2aeed") + ) + (segment + (start 315.1231 71.6756) + (end 315.123 71.6756) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "0a1eca58-7be8-4878-89dd-b792d004ffb1") + ) + (segment + (start 315.123 75.1283) + (end 315.123 71.6756) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "21c87d8e-3286-48c8-80a4-265c5eb7975c") + ) + (segment + (start 315.123 75.1283) + (end 315.123 71.6756) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "26917eb9-c6b1-49c4-a797-f81f5fa735b8") + ) + (segment + (start 331.792 112.514) + (end 326.434 107.156) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "3253ecf3-d0a4-4180-a7a6-4457de0068b5") + ) + (segment + (start 326.434 89.8922) + (end 315.123 78.581) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "35323f94-3270-4057-9fb6-edd33ce08199") + ) + (segment + (start 315.123 78.581) + (end 315.123 75.1283) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "3f4d8b01-eb6d-49f8-9540-8c4c9db15fda") + ) + (segment + (start 331.792 145.852) + (end 331.792 112.514) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "4c256612-4dae-421d-85b2-f4060de6300a") + ) + (segment + (start 326.434 107.156) + (end 326.434 89.8922) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "8d7a86fd-17c8-42c1-91fb-f4ffd44984df") + ) + (segment + (start 334.838 148.898) + (end 331.792 145.852) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "bdfc9922-5c8d-440f-83d9-ef4cbad00014") + ) + (segment + (start 334.31 168.751) + (end 334.838 168.223) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "c5beff4f-1720-4b0d-9bfd-8a90f2eec194") + ) + (segment + (start 334.838 168.223) + (end 334.838 148.898) + (width 0.2) + (layer "F.Cu") + (net 123) + (uuid "ca76981b-6119-4787-860e-6bcf28647ccf") + ) + (via + (at 334.31 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 123) + (uuid "b5cf27a6-bb1d-4232-8b8d-5d6a84be6fb5") + ) + (segment + (start 332.56 167.1995) + (end 333.5342 167.1995) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "6bdbe6a6-e501-4ddf-afbc-cb20ea754675") + ) + (segment + (start 333.5342 167.1995) + (end 334.31 167.9753) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "705d1317-8980-4f4a-9ac0-c5ae5b183ae7") + ) + (segment + (start 331.5358 167.1995) + (end 332.56 167.1995) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "71733d47-c9e2-4986-b84b-c2af6e3bc064") + ) + (segment + (start 334.31 167.9753) + (end 334.31 168.751) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "98561401-d4c7-4877-97bd-c0421d042a35") + ) + (segment + (start 332.56 168.7512) + (end 332.56 167.1995) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "9c98dd24-da87-4899-851c-b3b083b371d6") + ) + (segment + (start 330.76 167.9753) + (end 331.5358 167.1995) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "c89331b4-2ac7-499a-89fb-54daf4651b04") + ) + (segment + (start 334.31 168.751) + (end 334.31 168.7512) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "c8c5ccc8-6d33-4811-a41a-faf729cbce41") + ) + (segment + (start 330.76 168.7512) + (end 330.76 167.9753) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "e1f91671-07a6-472f-97b2-df50d901c7f7") + ) + (segment + (start 332.56 168.7512) + (end 332.56 167.1995) + (width 0.2) + (layer "B.Cu") + (net 123) + (uuid "f1ca837a-22b9-4d54-a9ca-fcd809e1fbac") + ) + (segment + (start 345.307 82.3598) + (end 354.872 91.9249) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "3499024f-a35e-4463-8390-a0ac614d88ba") + ) + (segment + (start 354.872 167.239) + (end 353.36 168.751) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "5d10eb94-7ce7-4df2-904a-47c93bc98fd7") + ) + (segment + (start 330.6013 74.8301) + (end 330.601 74.8304) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "647e5b47-9568-47be-8255-8994aa2c1798") + ) + (segment + (start 330.601 77.9858) + (end 334.975 82.3598) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "855eff76-e666-4a72-893f-65c500124458") + ) + (segment + (start 330.6013 71.6756) + (end 330.6013 74.8301) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "8692413f-3045-4e96-a87a-7526a2604d60") + ) + (segment + (start 330.601 74.8307) + (end 330.601 74.8304) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "8daaaf87-58a7-46e9-b338-1d290983820e") + ) + (segment + (start 330.601 74.8307) + (end 330.601 77.9858) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "94c00aa7-18d0-4f49-b122-3d166dd02e06") + ) + (segment + (start 334.975 82.3598) + (end 345.307 82.3598) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "ab410164-8f32-4fb4-8c4d-5d809d8e2ddf") + ) + (segment + (start 330.601 74.8304) + (end 330.601 74.8307) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "c8cef1aa-34bf-4e5c-858f-bbdd1afcf86b") + ) + (segment + (start 354.872 91.9249) + (end 354.872 167.239) + (width 0.2) + (layer "F.Cu") + (net 124) + (uuid "f59309c9-19ec-45e3-94b1-618ebfffd828") + ) + (via + (at 353.36 168.751) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 124) + (uuid "21f7873c-27e0-4607-a858-205c3592a743") + ) + (segment + (start 353.36 168.7512) + (end 353.36 168.751) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "252aa153-969a-4c19-bfb6-91f5b2a09436") + ) + (segment + (start 352.5843 167.1995) + (end 351.61 167.1995) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "3dba498c-4e8b-4d03-9127-530116703a80") + ) + (segment + (start 349.81 168.7512) + (end 349.81 167.9753) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "42e5cbcb-1399-4c9e-8e63-1f2a7951e917") + ) + (segment + (start 351.61 168.7512) + (end 351.61 167.1995) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "7964faae-8c62-475d-af37-cdb81d049453") + ) + (segment + (start 350.5858 167.1995) + (end 351.61 167.1995) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "a08901fc-8485-4335-88ee-cd9caadc505c") + ) + (segment + (start 353.36 168.751) + (end 353.36 167.9752) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "a2637906-2b9f-4ff2-869a-dcae8cc30667") + ) + (segment + (start 349.81 167.9753) + (end 350.5858 167.1995) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "b1a02d64-f9d3-451d-b346-5331dbc1fa97") + ) + (segment + (start 353.36 167.9752) + (end 352.5843 167.1995) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "c5cc62c7-5e63-46b1-a357-fb98472e6418") + ) + (segment + (start 351.61 168.7512) + (end 351.61 167.1995) + (width 0.2) + (layer "B.Cu") + (net 124) + (uuid "e37f2f28-2d78-4812-90fe-ae0d139ced7a") + ) + (segment + (start 91.2033 75.0504) + (end 91.1796 75.0504) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "0276891f-ec2c-4bad-b409-d9cdf9fa423b") + ) + (segment + (start 89.845 74.3538) + (end 89.845 73.6156) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "1df7c607-dd78-4cac-a86e-d198167b3e49") + ) + (segment + (start 293.219 150.019) + (end 295.441 152.241) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "2b3eac3e-b3b5-4c5a-a06b-7aac05bee137") + ) + (segment + (start 90.5416 75.0504) + (end 89.845 74.3538) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "67b77c9d-f39c-403c-a7f6-1953dd889f5c") + ) + (segment + (start 282.76 171.291) + (end 282.76 164.922) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "70b4828b-eb9d-45ca-a67b-abb6250ff13f") + ) + (segment + (start 273.235 114.141) + (end 273.235 128.429) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "81e6942d-dbee-46ad-b4ba-1c9f78eb9f98") + ) + (segment + (start 282.76 164.922) + (end 295.441 152.241) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "8476f162-6582-4887-81fc-e08977fa0fa3") + ) + (segment + (start 288.93 150.019) + (end 293.219 150.019) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "c1005d15-647c-4c02-8d93-66e7cd6e9773") + ) + (segment + (start 277.998 133.191) + (end 277.998 139.087) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "c3dff05a-5819-4322-bf64-b025b18e56ee") + ) + (segment + (start 91.2033 75.0504) + (end 90.5416 75.0504) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "d8b715ca-3ae6-40b5-b9c0-6e8bacc17fee") + ) + (segment + (start 273.235 128.429) + (end 277.998 133.191) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "e8b461d5-171e-4356-99c4-bb023e1f0211") + ) + (segment + (start 277.998 139.087) + (end 288.93 150.019) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "f079f8ee-a96e-4d79-9294-0bc6632bdf74") + ) + (segment + (start 263.658 104.564) + (end 273.235 114.141) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "fa20d78a-66d3-4abd-b7f7-64ec7636b1cd") + ) + (segment + (start 263.658 95.0912) + (end 263.658 104.564) + (width 0.2) + (layer "F.Cu") + (net 125) + (uuid "fa8fbd4b-5b44-4aad-97a6-3540de1e8844") + ) + (via + (at 273.235 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "162c7772-bac6-4d2e-b97a-74a5e017df5d") + ) + (via + (at 277.998 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "47421a07-a19d-4472-b52b-91ff9cf98e15") + ) + (via + (at 281.9792 129.4936) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "5e5c390f-447c-48f3-a7c5-e111699096f2") + ) + (via + (at 282.76 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "84fb51b6-912b-4e0a-a024-8436700225a9") + ) + (via + (at 263.658 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "ae817ce1-4584-4cef-bf76-8bb213246e92") + ) + (via + (at 91.1796 75.0504) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "b18d7c89-6b9c-498d-af8a-b6896d815cb5") + ) + (via + (at 295.441 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 125) + (uuid "d72d0b33-f5c5-4bef-bfb0-36281979ce7a") + ) + (segment + (start 263.6575 95.0912) + (end 263.658 95.0912) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "038c395f-c35b-4c82-ba4f-1889c9c7c4fe") + ) + (segment + (start 295.4411 152.241) + (end 295.4413 152.2412) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "487bfe5f-2623-4f04-9e11-1a2d8816b842") + ) + (segment + (start 278.7737 132.4153) + (end 277.998 133.191) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "5579ea2b-c5a2-42b9-8bd2-ae1e30424857") + ) + (segment + (start 284.485 171.2912) + (end 282.76 171.2912) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "5a8e137a-169d-4e9d-adf7-e60ffb020b2e") + ) + (segment + (start 279.8333 131.6395) + (end 279.7225 131.6395) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "70b06a0c-5bf3-4de8-b2d4-48a85faacb7c") + ) + (segment + (start 282.76 171.2912) + (end 282.76 171.291) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "7895ac8c-2375-463a-a58d-46af21f70fce") + ) + (segment + (start 295.441 152.241) + (end 295.4411 152.241) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "7b014a65-f23b-4b82-9596-55cdf19fe3ae") + ) + (segment + (start 274.96 114.1412) + (end 273.235 114.1412) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "7b5ce1ad-24d7-46f3-9d67-3102667d82f2") + ) + (segment + (start 279.7225 133.1912) + (end 279.7225 132.4153) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "8f7da933-9d36-4fbd-a128-d5915f3de0a5") + ) + (segment + (start 281.9792 129.4936) + (end 279.8333 131.6395) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "919c9d81-3bfa-4f60-835f-ee89d6b3c41c") + ) + (segment + (start 277.9975 133.1912) + (end 277.9978 133.1912) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "a4c9f5d8-b2da-4f04-a47b-70a254352fe5") + ) + (segment + (start 265.3825 95.0912) + (end 263.658 95.0912) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "ad224fe4-2304-4afa-88db-904641704413") + ) + (segment + (start 277.9978 133.1912) + (end 277.998 133.191) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "af4c62f3-a3c3-4cf0-92f0-d74ac1ca1b52") + ) + (segment + (start 279.7225 132.4153) + (end 278.7737 132.4153) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "bc99a0d5-9a67-4867-9e91-408ad4e9d9c5") + ) + (segment + (start 279.7225 132.4153) + (end 279.7225 131.6395) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "d811f563-25ea-4499-8833-852d70e1a6fb") + ) + (segment + (start 267.2075 95.0912) + (end 265.3825 95.0912) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "eb17c5ea-04b4-402a-9ff2-d242f67f7269") + ) + (segment + (start 273.235 114.141) + (end 273.235 114.1412) + (width 0.2) + (layer "B.Cu") + (net 125) + (uuid "f6fd78c9-bbd2-42c1-b27b-51ddb3c687e8") + ) + (segment + (start 258.5685 100.1807) + (end 263.658 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "0104c4f9-85a3-4716-89b8-1750a0f26318") + ) + (segment + (start 276.785 114.1412) + (end 276.7848 114.141) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "269b0f4c-3755-4e56-849d-afb9b06bdb2f") + ) + (segment + (start 180.7521 95.0856) + (end 185.8472 100.1807) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "32caec92-e2fe-42ec-aaf7-bba62b8b066f") + ) + (segment + (start 185.8472 100.1807) + (end 258.5685 100.1807) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "50b5d7c8-28d9-49fb-bd37-a9c9581b1e48") + ) + (segment + (start 298.2163 152.2412) + (end 295.4412 152.2412) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "63a9fd0c-9bed-49fe-ac5a-09521b4f2909") + ) + (segment + (start 166.9025 87.276) + (end 174.7121 95.0856) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "728537ef-f588-4401-9b52-063f5f4bfb57") + ) + (segment + (start 282.7602 171.2912) + (end 282.76 171.291) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "811a278d-c6ad-41da-8f87-d2153a3351ca") + ) + (segment + (start 174.7121 95.0856) + (end 180.7521 95.0856) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "88f7a456-26ca-4021-9c1b-0a2033c7eda5") + ) + (segment + (start 93.3213 75.9913) + (end 104.606 87.276) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "a1e614df-58d7-440d-aeab-ca08530895da") + ) + (segment + (start 91.2033 75.0569) + (end 92.1377 75.9913) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "a4c0be6c-ace2-4e9e-8dda-ce2e4c0571fd") + ) + (segment + (start 92.1377 75.9913) + (end 93.3213 75.9913) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "ad6645e4-2e91-42a7-8018-04e59f08c626") + ) + (segment + (start 91.2033 75.0504) + (end 91.1796 75.0504) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "b3d75641-59e5-4ff9-b123-959bba24a04e") + ) + (segment + (start 91.2033 75.0504) + (end 91.2033 75.0569) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "b7a7d2a0-93cc-416c-bd21-d3e1fcba46e1") + ) + (segment + (start 276.7848 114.141) + (end 273.235 114.141) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "c69bd4cd-4b32-4e43-8ba4-c9fd64e73d79") + ) + (segment + (start 286.31 171.2912) + (end 282.7602 171.2912) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "cb692dcf-a37b-4014-999d-cfcde5cb356a") + ) + (segment + (start 295.4412 152.2412) + (end 295.441 152.241) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "cc00c045-76b7-4be5-9eaf-b6abd331bf4f") + ) + (segment + (start 104.606 87.276) + (end 166.9025 87.276) + (width 0.2) + (layer "In1.Cu") + (net 125) + (uuid "ce86286a-3035-4c04-bf9f-eded4e3ffc3a") + ) + (segment + (start 281.5475 133.1912) + (end 281.5475 129.9253) + (width 0.2) + (layer "In2.Cu") + (net 125) + (uuid "5193714b-e6ed-460b-9382-f8a1abfffa3c") + ) + (segment + (start 281.5475 129.9253) + (end 281.9792 129.4936) + (width 0.2) + (layer "In2.Cu") + (net 125) + (uuid "75af9d1c-f568-4715-9208-265796ba89a3") + ) + (segment + (start 86.536 72.408) + (end 86.536 71.5727) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "0f4e3dd2-3933-4d0d-b19f-f906d17918f4") + ) + (segment + (start 86.845 72.717) + (end 86.536 72.408) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "23f9203f-ce2b-483c-b62a-094cd3a63e09") + ) + (segment + (start 216.06 121.798) + (end 220.848 126.585) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "33df814a-34c1-421b-b799-607c5f01ca68") + ) + (segment + (start 86.845 73.6156) + (end 86.845 72.717) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "36f456ea-67ab-49c7-869b-c576bdde443a") + ) + (segment + (start 216.06 109.891) + (end 216.06 114.141) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "49f3517f-3c7f-4b8b-a261-caebd400d1de") + ) + (segment + (start 206.508 95.0912) + (end 206.508 100.339) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "6fd37043-9a05-4c18-9862-2a4572088186") + ) + (segment + (start 216.06 114.141) + (end 216.06 121.798) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "7d454f37-473b-4b29-8956-743a59eb8b11") + ) + (segment + (start 220.848 133.191) + (end 220.848 137.301) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "8390418b-3cc5-49de-8ad9-6288f8554c1d") + ) + (segment + (start 230.372 146.826) + (end 230.372 152.241) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "b676e4a8-43d5-4ae9-bcbc-f1cb01cd6528") + ) + (segment + (start 220.848 126.585) + (end 220.848 133.191) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "d20572d5-1871-47a1-8d3f-9d7edb8ba099") + ) + (segment + (start 206.508 100.339) + (end 216.06 109.891) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "da957702-091d-431b-8f39-9952e25683b3") + ) + (segment + (start 220.848 137.301) + (end 230.372 146.826) + (width 0.2) + (layer "F.Cu") + (net 126) + (uuid "ebc6005a-374d-4685-864a-64040c579bdc") + ) + (via + (at 86.536 71.5727) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 126) + (uuid "1c5ee98b-8c44-4d0d-b88a-8713e4d596ef") + ) + (via + (at 220.848 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 126) + (uuid "4b7bc185-5ed6-49ab-ac48-97214a48fd44") + ) + (via + (at 216.06 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 126) + (uuid "528bbb65-3d64-4d8f-881a-06022e871384") + ) + (via + (at 230.372 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 126) + (uuid "bebd9e75-42c3-4176-abd7-912d7b3a4288") + ) + (via + (at 206.508 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 126) + (uuid "cdface1d-824f-4033-95e7-273a717cbc94") + ) + (segment + (start 222.5725 133.1912) + (end 220.8482 133.1912) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "03f835da-be14-4e94-bf5a-2266993c1a61") + ) + (segment + (start 232.0975 152.2412) + (end 230.3725 152.2412) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "18300cb8-c34c-4142-bdbe-683103d0c772") + ) + (segment + (start 217.7848 114.141) + (end 217.785 114.1412) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "42a74dc8-f426-4d14-ba98-d59175de52a5") + ) + (segment + (start 206.5075 95.0912) + (end 206.508 95.0912) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "6581a901-c928-4b56-bfef-678d0e03b58a") + ) + (segment + (start 216.9225 114.141) + (end 216.06 114.141) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "669534fd-f24f-41bf-84fa-09d64742c24f") + ) + (segment + (start 208.2325 95.0912) + (end 208.232 95.0912) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "757311a2-2ce4-465f-80f9-7302ff7b570f") + ) + (segment + (start 230.3722 152.2412) + (end 230.372 152.241) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "788580af-2d47-40d5-a34c-be228fcc2199") + ) + (segment + (start 217.785 114.141) + (end 216.9225 114.141) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "983b214d-143e-4391-8d3b-1f01c406f804") + ) + (segment + (start 216.9225 114.141) + (end 217.7848 114.141) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "a328d9bf-91fc-42d2-89f1-a165e4aa2542") + ) + (segment + (start 220.8482 133.1912) + (end 220.848 133.191) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "a78a7dd8-d38a-4c90-b394-827e5ba93f40") + ) + (segment + (start 220.8475 133.1912) + (end 220.8478 133.1912) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "aaaeaf63-45ba-4708-93a3-932c4b31d5be") + ) + (segment + (start 208.232 95.0912) + (end 206.508 95.0912) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "b204c7b7-5ac8-4828-a9fb-a7fc47e7004b") + ) + (segment + (start 216.06 114.141) + (end 216.06 114.1412) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "db37d3b9-b49d-4a91-aaad-ed26c02013bd") + ) + (segment + (start 220.8478 133.1912) + (end 220.848 133.191) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "dc12211a-ae22-4d41-bd84-9cfa18370877") + ) + (segment + (start 230.3725 152.2412) + (end 230.3722 152.2412) + (width 0.2) + (layer "B.Cu") + (net 126) + (uuid "e91fcb7b-e8bb-4de9-8983-2901d16fdfbb") + ) + (segment + (start 97.3958 77.0729) + (end 94.2323 73.9094) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "01074304-42d3-40f9-a6b0-20ab21b41eb8") + ) + (segment + (start 224.3975 133.1912) + (end 224.3973 133.191) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "0a611374-1182-4412-b636-21dbaccdc8d6") + ) + (segment + (start 87.8438 71.5727) + (end 86.536 71.5727) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "15a8fe7a-0eb6-4524-93c6-9ee931774b76") + ) + (segment + (start 210.0575 95.0912) + (end 206.508 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "2fe8501b-fb10-4d72-bc38-b7aae7cd207f") + ) + (segment + (start 94.2323 73.9094) + (end 90.1805 73.9094) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "30a51e8a-dc08-4e08-995d-2b15e7a1489e") + ) + (segment + (start 188.4897 77.0729) + (end 97.3958 77.0729) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "4cce9e83-4112-42b0-9e76-79e5d6a72a47") + ) + (segment + (start 224.3973 133.191) + (end 220.848 133.191) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "584f2913-deaf-450e-9b4f-73d0a8cedbf1") + ) + (segment + (start 233.9223 152.241) + (end 230.372 152.241) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "99028e5e-0465-497c-8573-2bcd947d5d62") + ) + (segment + (start 206.508 95.0912) + (end 188.4897 77.0729) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "9d48370d-975a-43bd-aa87-837b29f6b77f") + ) + (segment + (start 90.1805 73.9094) + (end 87.8438 71.5727) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "b66051e8-bd98-4f0b-a872-d72be3de4006") + ) + (segment + (start 219.61 114.1412) + (end 219.6098 114.141) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "d3dc7848-bbf4-4571-a546-1ba092c6fe36") + ) + (segment + (start 219.6098 114.141) + (end 216.06 114.141) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "f7d53218-f520-4bc6-8f5a-7fe2792c62ce") + ) + (segment + (start 233.9225 152.2412) + (end 233.9223 152.241) + (width 0.2) + (layer "In1.Cu") + (net 126) + (uuid "fd88321f-0f8d-4f9f-bf50-488b6bf4d46b") + ) + (segment + (start 238.685 114.1412) + (end 238.685 114.141) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "05d0953f-f4d6-4024-886e-6ffbfdd2de69") + ) + (segment + (start 112.056 104.055) + (end 112.056 89.0021) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "1511092b-0fbe-4fae-8c76-0018f8d151e9") + ) + (segment + (start 238.685 112.823) + (end 240.203 111.305) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "17aae09d-7eff-4714-8106-15a6bea92749") + ) + (segment + (start 249.422 152.241) + (end 249.422 166.529) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "1ac84f59-98f8-416b-80d4-49016c154516") + ) + (segment + (start 235.135 114.141) + (end 235.135 128.429) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "3572ba82-c1ef-4850-8f26-ec7ded8401b0") + ) + (segment + (start 249.422 166.529) + (end 244.66 171.291) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "381233e0-19ea-4d80-acd0-e6445c3aebb3") + ) + (segment + (start 225.558 100.339) + (end 225.763 100.544) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "5d250735-6e89-4763-a671-a4db2d53646f") + ) + (segment + (start 87.345 72.2994) + (end 87.2246 72.179) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "75ef0c27-ef98-4048-8881-7c5f6a37f707") + ) + (segment + (start 235.135 109.916) + (end 235.135 114.141) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "762a18f0-dd02-45b4-a6ee-54314cd1dc3c") + ) + (segment + (start 239.898 142.716) + (end 249.422 152.241) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "7b0e441f-b655-4cef-87f3-62d58249dbfe") + ) + (segment + (start 112.056 89.0021) + (end 111.621 88.5674) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "7dc2beae-2544-4905-ba30-0b4c8a2440af") + ) + (segment + (start 225.558 95.0912) + (end 225.558 100.339) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "910d1056-8c27-4724-9ce2-bdaed48d6cc6") + ) + (segment + (start 87.345 73.6156) + (end 87.345 72.2994) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "98d021ce-e395-4367-aa1b-a8e7d12a67c6") + ) + (segment + (start 235.135 128.429) + (end 239.898 133.191) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "9adceeec-355a-4a2a-a90c-2c3ee4547b90") + ) + (segment + (start 239.898 133.191) + (end 239.898 142.716) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "9d48b589-d2d8-40a2-b5c5-9c26c678b999") + ) + (segment + (start 225.763 100.544) + (end 225.763 105.753) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "a185bffa-9a43-47dc-9cb8-b94278f80e83") + ) + (segment + (start 225.763 100.544) + (end 235.135 109.916) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "bc1cf3aa-ba80-4827-af23-f82f1b338e69") + ) + (segment + (start 238.685 114.141) + (end 238.685 112.823) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "e03ffa63-5f32-48de-ab79-35689dd9ca29") + ) + (segment + (start 113.315 105.315) + (end 112.056 104.055) + (width 0.2) + (layer "F.Cu") + (net 127) + (uuid "ea555871-b572-486b-a02f-48905b94b228") + ) + (via + (at 225.558 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "03779365-77cd-472f-88bd-0434ce1dee12") + ) + (via + (at 235.135 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "37042fe2-9860-4cb6-bedc-94c25f1ded31") + ) + (via + (at 240.203 111.305) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "40880870-a216-427f-94fc-0af321b229de") + ) + (via + (at 113.315 105.315) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "4274c4bb-b8a1-44b7-bae6-4088c509dc30") + ) + (via + (at 111.621 88.5674) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "4f2155aa-35bb-4ba0-a80a-93cd20606af4") + ) + (via + (at 244.66 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "71cae4e4-2248-4c09-bd0d-26dfb306635c") + ) + (via + (at 87.2246 72.179) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "8e5255b0-6974-4742-9ca6-ca5b5bbef26e") + ) + (via + (at 249.422 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "bf51169a-5ad2-4176-b24d-18ca9b7f3be4") + ) + (via + (at 225.763 105.753) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "eb2ded6f-649a-4715-a9b6-6b4a6e8bf80b") + ) + (via + (at 239.898 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 127) + (uuid "ff004ea7-7a64-463f-9251-87552e88b1cf") + ) + (segment + (start 225.5575 95.0912) + (end 225.558 95.0912) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "0881b778-725e-4ed7-8ad4-3e24f90d357b") + ) + (segment + (start 241.6225 131.6395) + (end 240.577 131.6395) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "0c534f0e-e391-42c8-8f85-e0b7e97b96a6") + ) + (segment + (start 239.8975 133.1912) + (end 239.8978 133.1912) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "11d93ebc-5f6b-495e-86b3-0649e72c76e7") + ) + (segment + (start 236.86 114.1412) + (end 235.135 114.1412) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "1e720b28-cdc0-4c31-a457-8f04fbbc8b6c") + ) + (segment + (start 238.685 114.1412) + (end 236.86 114.1412) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "2821d002-28c5-4e0c-951f-203b35c9e1e6") + ) + (segment + (start 246.385 171.2912) + (end 244.66 171.2912) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "2cb1b619-cc3a-4e65-9ba6-6bea5efc131e") + ) + (segment + (start 252.9725 152.2412) + (end 251.1475 152.2412) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "589f4331-299d-4824-ad0a-7f1a12591dc3") + ) + (segment + (start 239.8978 133.1912) + (end 239.898 133.191) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "5caa7425-9602-4ef9-90e7-c2d97c3db899") + ) + (segment + (start 249.4222 152.2412) + (end 249.422 152.241) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "7be2585c-756a-4e0c-a1fe-5727f210f531") + ) + (segment + (start 239.898 132.3185) + (end 239.898 133.191) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "7e5eeb5e-4e2e-4f1d-916f-8d9f8cd1b7cd") + ) + (segment + (start 244.66 171.2912) + (end 244.66 171.291) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "8dca71bc-0150-4219-a98e-4adba402d33a") + ) + (segment + (start 240.577 131.6395) + (end 239.898 132.3185) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "b74a1c88-33a4-4d17-a62d-a7b25652e5df") + ) + (segment + (start 227.2825 95.0912) + (end 225.558 95.0912) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "bcc4e52d-1d8f-4ada-8c5f-804b322531ee") + ) + (segment + (start 241.6225 133.1912) + (end 241.6225 131.6395) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "d70cc8f6-4b1d-4809-8987-e08ba3ac2495") + ) + (segment + (start 251.1475 152.2412) + (end 249.4225 152.2412) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "da4acdc7-51a5-41d6-8cd7-39f065a49f7d") + ) + (segment + (start 235.135 114.1412) + (end 235.135 114.141) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "e3471e6b-9157-48c0-b55b-328d4279f42d") + ) + (segment + (start 229.1075 95.0912) + (end 227.2825 95.0912) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "e6ec66e1-1bc0-4431-8961-08035cacef49") + ) + (segment + (start 249.4225 152.2412) + (end 249.4222 152.2412) + (width 0.2) + (layer "B.Cu") + (net 127) + (uuid "efd5140e-3e71-4e65-a909-f21db38f15c4") + ) + (segment + (start 87.2246 75.2747) + (end 88.2736 76.3237) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "0f864654-94ca-4b52-a39d-3b8fbe5c5184") + ) + (segment + (start 95.7487 80.0797) + (end 104.2364 88.5674) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "13f13875-570b-422b-bb31-c90c8b3e0935") + ) + (segment + (start 88.2736 76.3237) + (end 89.7815 76.3237) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "393f2ea7-af86-495a-ac10-3bc551c9c8a9") + ) + (segment + (start 248.21 171.2912) + (end 248.2098 171.291) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "47f11b50-e96e-4d8a-b6ab-867587103da9") + ) + (segment + (start 89.7815 76.3237) + (end 93.5375 80.0797) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "8e175481-3b37-4df9-b341-9e43e814c75d") + ) + (segment + (start 248.2098 171.291) + (end 244.66 171.291) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "97b8f1f4-43e5-477f-8522-ca068d5fe543") + ) + (segment + (start 243.4475 133.1912) + (end 243.4473 133.191) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "a52ff6c1-e1dc-4c6a-8041-ebbb7cb09ece") + ) + (segment + (start 243.4473 133.191) + (end 239.898 133.191) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "a9a9d459-e768-403c-aefa-de2200399453") + ) + (segment + (start 87.2246 72.179) + (end 87.2246 75.2747) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "ad32d04a-270c-41a0-a9d0-455fbe2131cf") + ) + (segment + (start 113.315 105.315) + (end 225.325 105.315) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "b05c0e8b-4c99-4e88-8e35-bde8b28b0b1c") + ) + (segment + (start 104.2364 88.5674) + (end 111.621 88.5674) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "c6e3556d-c9f9-4cd9-a64a-5c2c3aa33e8f") + ) + (segment + (start 225.325 105.315) + (end 225.763 105.753) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "ef3705fa-2d48-49d1-9cd2-dbdecb86d226") + ) + (segment + (start 93.5375 80.0797) + (end 95.7487 80.0797) + (width 0.2) + (layer "In1.Cu") + (net 127) + (uuid "fa3cd66a-024b-4da7-b2f3-2ae096dbd35a") + ) + (segment + (start 262.4975 133.1912) + (end 262.4973 133.191) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "0218960e-83f4-42c8-898b-7a7df800fa94") + ) + (segment + (start 258.948 142.195) + (end 268.472 151.72) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "0c50a1c9-1996-4c2d-b1aa-84ab3c3e8a02") + ) + (segment + (start 255.057 115.014) + (end 255.057 129.301) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "0d2c3767-718b-4136-a73d-466f1a57e5a4") + ) + (segment + (start 268.472 152.241) + (end 268.472 166.529) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "22b0ed8b-64c9-479f-a6d0-bfb9891f6a24") + ) + (segment + (start 244.608 95.0912) + (end 244.608 104.564) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "526175f3-9b5d-4b79-bc7b-f807bdf87dae") + ) + (segment + (start 244.608 104.564) + (end 254.185 114.141) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "572d7808-a7ee-42e1-8239-acae799b07e9") + ) + (segment + (start 255.057 129.301) + (end 258.948 133.191) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "5d60bacb-80d3-477a-bc8d-7d219e43953b") + ) + (segment + (start 268.472 166.529) + (end 263.71 171.291) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "65527d7e-81e5-4ec0-98f0-778a8249608f") + ) + (segment + (start 87.845 73.6156) + (end 87.845 72.6356) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "765c2db2-4edc-4192-bdd6-03c8654fba78") + ) + (segment + (start 254.185 114.141) + (end 255.057 115.014) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "860423a5-9d7b-41c9-9405-69f1e47108d6") + ) + (segment + (start 268.472 151.72) + (end 268.472 152.241) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "a417f0e2-fff3-43c4-a1e6-11f6167859b0") + ) + (segment + (start 262.4973 133.191) + (end 258.948 133.191) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "ab0a154e-29fb-4623-9994-4346d23b13b0") + ) + (segment + (start 87.845 72.6356) + (end 90.3618 70.1188) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "c077c929-4739-44f2-995a-1fcb157ceaaa") + ) + (segment + (start 258.948 133.191) + (end 258.948 142.195) + (width 0.2) + (layer "F.Cu") + (net 128) + (uuid "ef8cd17d-f98c-47ae-b5da-e5c5a78ff113") + ) + (via + (at 90.3618 70.1188) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "11517a43-4598-47e0-99ee-34e7c14ee150") + ) + (via + (at 244.608 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "5e907f9b-8a4a-4c8c-a0ee-d4a8c5030977") + ) + (via + (at 135.764 69.1915) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "61c52742-1a3d-4fa9-8a2d-66adb420d3ef") + ) + (via + (at 258.948 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "7e1c5160-c51e-4bdc-82d8-5cef10929462") + ) + (via + (at 254.185 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "96ae9192-5778-4394-815d-de7e1eb968a7") + ) + (via + (at 263.71 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "9e8641f8-787d-4111-b0c3-c035e38f9c92") + ) + (via + (at 268.472 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "a3a16c7a-877a-4c26-a2d5-9c44b15ab8b9") + ) + (via + (at 135.35 76.4712) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 128) + (uuid "ad18f5e8-6f9e-4c5c-b5c7-77ccdd124701") + ) + (segment + (start 258.948 132.318) + (end 258.948 133.191) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "0854fd5a-f269-4c14-97a8-7e7e62eb68ac") + ) + (segment + (start 260.672 132.4155) + (end 260.672 131.64) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "0a13b116-37f6-4223-9c6e-0610695a81b8") + ) + (segment + (start 260.672 131.64) + (end 259.627 131.64) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "0de42c85-d5fe-434f-afbb-791961ca6fab") + ) + (segment + (start 260.6725 132.416) + (end 260.6725 133.1912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "18fd7426-5146-41a4-9a5a-b58384bbbac9") + ) + (segment + (start 254.185 114.141) + (end 254.185 114.1412) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "322b5a8d-5c66-4c1f-b606-cc67be78fd77") + ) + (segment + (start 258.948 133.191) + (end 258.9477 133.191) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "35e13e0d-5377-4952-a072-5d53bd0f7cb7") + ) + (segment + (start 259.627 131.64) + (end 258.948 132.318) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "3a55011a-a587-4371-9fd2-d3d9a197b2ea") + ) + (segment + (start 246.3325 95.0912) + (end 244.608 95.0912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "4bc17ba4-dfca-4a32-822d-2d740e6b2344") + ) + (segment + (start 258.9477 133.191) + (end 258.9475 133.1912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "5322eeed-712c-4f3c-a4bc-a22a18c05adf") + ) + (segment + (start 267.26 171.2912) + (end 265.435 171.2912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "59e56c38-f749-4b74-aece-f14650b56f56") + ) + (segment + (start 270.1975 152.2412) + (end 268.4725 152.2412) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "5f23bf03-f951-4ae7-a2ab-cf6329d4d955") + ) + (segment + (start 263.7102 171.2912) + (end 263.71 171.291) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "79fd24c8-33d4-4704-a5eb-8a38773dffe1") + ) + (segment + (start 265.435 171.2912) + (end 264.5725 171.2912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "844bd6fb-d216-4c6e-90e2-d794ec2c0526") + ) + (segment + (start 260.672 133.191) + (end 260.672 132.4155) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "90fe1ef4-8504-420c-b567-ed11d7744f7f") + ) + (segment + (start 260.672 132.4155) + (end 260.6725 132.416) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "970bf154-ad8f-4b7b-bf49-8347f8eea1f3") + ) + (segment + (start 255.91 114.1412) + (end 254.185 114.1412) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "9fd7ee0e-095b-4772-8e68-871d82c943da") + ) + (segment + (start 264.5725 171.2912) + (end 263.71 171.2912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "a0fe37b2-6190-4ae1-a8fd-112bb1000bc5") + ) + (segment + (start 268.4725 152.2412) + (end 268.4722 152.2412) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "a59ae1b8-5658-4da5-94cf-551bfcd94928") + ) + (segment + (start 268.4722 152.2412) + (end 268.472 152.241) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "b526ab88-ad59-464a-a77c-f33ac9d6cb9f") + ) + (segment + (start 264.5725 171.2912) + (end 263.7102 171.2912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "dd496e57-0344-4858-bceb-dea4210a500d") + ) + (segment + (start 244.6075 95.0912) + (end 244.608 95.0912) + (width 0.2) + (layer "B.Cu") + (net 128) + (uuid "efa90291-6bec-4968-8cdb-cc87ab303e55") + ) + (segment + (start 94.3951 68.8198) + (end 135.3923 68.8198) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "05a4307c-6257-4976-875c-6e56dcd266b8") + ) + (segment + (start 276.8593 152.1674) + (end 268.5456 152.1674) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "3471b117-0a43-43e6-8d20-6b3e8a629a5f") + ) + (segment + (start 225.988 76.4712) + (end 244.608 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "45745470-4bdd-40d1-9031-4b354e699830") + ) + (segment + (start 268.5456 152.1674) + (end 268.472 152.241) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "486775ea-cee6-4acc-9fa4-4215f7d74156") + ) + (segment + (start 135.3923 68.8198) + (end 135.764 69.1915) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "50e0ae7b-336c-4bf5-a66a-e30c7d22a6fa") + ) + (segment + (start 248.1575 95.0912) + (end 244.608 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "6ba46d53-a747-4901-b85a-d71f1bf59a1a") + ) + (segment + (start 272.8288 155.3775) + (end 274.7781 157.3268) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "6bb45562-88cf-4fec-8c34-0c0bb3ae01a4") + ) + (segment + (start 257.735 114.1412) + (end 257.7348 114.141) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "7c30f93d-a6e7-43da-82e4-6376a8470f2f") + ) + (segment + (start 278.4313 155.8164) + (end 278.4313 153.7394) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "7d1cf8fc-6216-4da9-b1c8-d9958616e43a") + ) + (segment + (start 272.8288 153.0475) + (end 272.8288 155.3775) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "86dbdde7-e58d-496d-97b2-a15dc1d6ebc6") + ) + (segment + (start 93.0961 70.1188) + (end 94.3951 68.8198) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "8ec96d35-e64e-4337-8b70-8b98ffc05ad9") + ) + (segment + (start 257.7348 114.141) + (end 254.185 114.141) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "b91af947-b935-4d30-8629-088c1a8ba28f") + ) + (segment + (start 278.4313 153.7394) + (end 276.8593 152.1674) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "c45dd0f7-f1aa-4ea3-b06e-561aea1869ed") + ) + (segment + (start 90.3618 70.1188) + (end 93.0961 70.1188) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "d0a773a0-7ee0-4014-924c-d13847e9b143") + ) + (segment + (start 276.9209 157.3268) + (end 278.4313 155.8164) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "d4a63ac8-932b-40ac-af2e-0cb09574871e") + ) + (segment + (start 135.35 76.4712) + (end 225.988 76.4712) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "e05a9f17-62b5-4d5a-b3ae-4d99b99f081e") + ) + (segment + (start 272.0225 152.2412) + (end 272.8288 153.0475) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "eb403775-dae9-4aee-b7ad-d3f852b4af30") + ) + (segment + (start 274.7781 157.3268) + (end 276.9209 157.3268) + (width 0.2) + (layer "In1.Cu") + (net 128) + (uuid "f78efbeb-9e52-4de2-ab7a-b4c111fc7801") + ) + (segment + (start 135.35 69.6055) + (end 135.35 76.4712) + (width 0.2) + (layer "In2.Cu") + (net 128) + (uuid "cd0b978e-1ae0-4ddf-8c0d-e876646187d4") + ) + (segment + (start 135.764 69.1915) + (end 135.35 69.6055) + (width 0.2) + (layer "In2.Cu") + (net 128) + (uuid "f3cf5600-dfb3-44ca-a35b-75cbecb07f72") + ) + (segment + (start 86.4445 67.1156) + (end 85.2436 67.1156) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "10d8f227-649a-4da1-957d-530f0c5fabb3") + ) + (segment + (start 157.731 114.141) + (end 158.86 114.141) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "3e61c300-7211-42da-908d-5cb85af2eead") + ) + (segment + (start 173.222 152.241) + (end 173.222 168.294) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "495a7b7a-8711-497f-bc35-14cf8b86ac5e") + ) + (segment + (start 149.358 105.768) + (end 157.731 114.141) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "697edcc7-2657-43c8-980a-124eccaf13be") + ) + (segment + (start 158.86 114.141) + (end 158.86 128.354) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "7f9768dd-338f-4918-abca-96daf1ce0d4d") + ) + (segment + (start 84.345 67.1156) + (end 85.2436 67.1156) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "ab46c554-2362-47f4-9c16-01d19b8b2442") + ) + (segment + (start 173.222 168.294) + (end 176.379 171.45) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "bce54bbd-670a-4b6d-b7f2-f1392c70a3d6") + ) + (segment + (start 158.86 128.354) + (end 163.698 133.191) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "be3c9327-84c2-491a-9851-8b134987a859") + ) + (segment + (start 163.698 142.716) + (end 173.222 152.241) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "d6d9fdec-c656-4395-8875-ee209564cb22") + ) + (segment + (start 163.698 133.191) + (end 163.698 142.716) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "e4e01937-9aac-45b8-a986-7af9db4bcfd2") + ) + (segment + (start 149.358 95.0912) + (end 149.358 105.768) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "f78a2e44-7b94-48bd-b449-a386b0f6df8f") + ) + (segment + (start 86.6185 67.2896) + (end 86.4445 67.1156) + (width 0.2) + (layer "F.Cu") + (net 129) + (uuid "fa9f497a-bf30-4960-80e8-21b7cfd08156") + ) + (via + (at 173.222 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "6fb0e097-1fbd-4cc3-a5b1-6d677825085c") + ) + (via + (at 149.358 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "9f501834-df74-4548-be41-49aaa68c38d1") + ) + (via + (at 176.379 171.45) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "c6f64cbb-f4a9-456e-b4ff-e3e9b43ebd4c") + ) + (via + (at 86.6185 67.2896) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "c76c69fa-0691-4db2-b682-691e02237ecf") + ) + (via + (at 158.86 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "d3c30b7e-1203-4927-806e-7fe84962e27e") + ) + (via + (at 147.6992 68.226) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "f214f5d5-5403-4e02-b34e-5a82b588bd03") + ) + (via + (at 163.698 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 129) + (uuid "fba12e07-84cf-4a6a-8fa3-b42cd4c52a4f") + ) + (segment + (start 163.6978 133.1912) + (end 163.698 133.191) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "061e30ee-323b-42cf-8568-1f32cf36b7ee") + ) + (segment + (start 174.9475 152.2412) + (end 173.2225 152.2412) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "0e890463-454b-4caa-b632-e851196b8368") + ) + (segment + (start 173.222 152.241) + (end 173.2223 152.241) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "2fb94cb4-78e7-4f31-ab5d-19a6d1fbb825") + ) + (segment + (start 167.2475 133.1912) + (end 165.4225 133.1912) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "31e6abcf-66d9-439f-9c6a-731d61c221ab") + ) + (segment + (start 176.3788 171.45) + (end 176.379 171.45) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "3ff43986-8647-4963-bce1-042d53ab153c") + ) + (segment + (start 173.2223 152.241) + (end 173.2225 152.2412) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "48b0886a-2f8d-4672-a07d-9eb409d32d81") + ) + (segment + (start 165.4225 131.6395) + (end 164.377 131.6395) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "5cd85327-0a88-492e-8a47-721fd7ca2ef9") + ) + (segment + (start 151.0825 95.0912) + (end 149.358 95.0912) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "7e848008-85a9-47df-a89e-a85e674291cb") + ) + (segment + (start 163.698 132.3185) + (end 163.698 133.191) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "b46652c5-9458-4ade-9aac-8922947db5d8") + ) + (segment + (start 160.585 114.1412) + (end 158.86 114.1412) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "b93476d1-9439-40ee-af1b-b24c987f89bd") + ) + (segment + (start 164.377 131.6395) + (end 163.698 132.3185) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "bb67889b-5759-43b9-bc1c-f638419f5d82") + ) + (segment + (start 163.6975 133.1912) + (end 163.6978 133.1912) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "bd46e9f2-362f-4bbb-9111-a865643ddf36") + ) + (segment + (start 158.86 114.1412) + (end 158.86 114.141) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "daa995f2-d7f6-46d4-abef-de45c2a6be0e") + ) + (segment + (start 165.4225 133.1912) + (end 165.4225 131.6395) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "e42db0e0-1f2a-46c9-be3e-053511421526") + ) + (segment + (start 162.41 114.1412) + (end 160.585 114.1412) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "eac50008-a5b1-4f38-85c7-66b9aa59e6b6") + ) + (segment + (start 149.3575 95.0912) + (end 149.358 95.0912) + (width 0.2) + (layer "B.Cu") + (net 129) + (uuid "f474417d-cf53-47ec-949d-6235116b9e9e") + ) + (segment + (start 110.549 67.9663) + (end 94.5616 67.9663) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "1043adf1-06a4-4dc6-81e0-793f439bc2c6") + ) + (segment + (start 94.5616 67.9663) + (end 94.1857 67.5904) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "18ff24fa-99d1-4aab-8309-057412b2ed39") + ) + (segment + (start 176.7723 152.241) + (end 173.222 152.241) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "257b1367-a534-49db-af5b-8041d1715c5e") + ) + (segment + (start 147.6992 68.226) + (end 147.438 67.9648) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "2ebddbab-8cad-48d7-b10d-324ab800d7bb") + ) + (segment + (start 176.7725 152.2412) + (end 176.7723 152.241) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "40e9d724-5855-48b8-9ef6-3b9c2f9e0b22") + ) + (segment + (start 117.2574 67.5631) + (end 110.9522 67.5631) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "60cf6956-4dbc-4b06-bc83-eb6f7f6bacc5") + ) + (segment + (start 179.1538 171.45) + (end 176.379 171.45) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "7c41a926-a404-403a-b63e-273e0efe72e7") + ) + (segment + (start 117.6591 67.9648) + (end 117.2574 67.5631) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "999f3580-e7d4-4b92-a21e-245b87777bd6") + ) + (segment + (start 147.438 67.9648) + (end 117.6591 67.9648) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "9e489b64-0e45-48f6-96bd-fe2a4621d704") + ) + (segment + (start 94.1857 67.5904) + (end 86.9193 67.5904) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "bd8ba3da-5a47-4699-951d-1e916924ffc9") + ) + (segment + (start 86.9193 67.5904) + (end 86.6185 67.2896) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "d0bec0b1-72e1-491b-a5d0-2aa9f87d74f0") + ) + (segment + (start 152.9075 95.0912) + (end 149.358 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "d3777424-88f1-422a-9977-28fe3684f2c8") + ) + (segment + (start 110.9522 67.5631) + (end 110.549 67.9663) + (width 0.2) + (layer "In1.Cu") + (net 129) + (uuid "eb995094-023d-4188-8d52-20c4d916e170") + ) + (segment + (start 149.358 69.8848) + (end 149.358 95.0912) + (width 0.2) + (layer "In2.Cu") + (net 129) + (uuid "26784c8a-d39e-42d2-8c13-f17a49e5885e") + ) + (segment + (start 147.6992 68.226) + (end 149.358 69.8848) + (width 0.2) + (layer "In2.Cu") + (net 129) + (uuid "50b73e98-6cf4-48e8-91b1-41fe28d945ef") + ) + (segment + (start 186.298 133.191) + (end 184.523 133.191) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "14c815b4-b5b0-4027-85b3-5e485ae3e61f") + ) + (segment + (start 168.408 95.0912) + (end 168.408 104.564) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "1c13e474-663a-43c2-a6eb-b6d8ca64ce4a") + ) + (segment + (start 177.985 114.141) + (end 177.985 128.429) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "4c565b30-2e93-495f-b1c8-bd9486a63ef5") + ) + (segment + (start 177.985 128.429) + (end 182.748 133.191) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "5405a980-4384-43a8-8b28-5ba7ad5343db") + ) + (segment + (start 182.748 142.716) + (end 192.272 152.241) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "569157c3-46ee-405d-9036-0e000e776f57") + ) + (segment + (start 184.523 133.191) + (end 186.2973 133.191) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "57712ab0-9e4b-442e-8944-fba834b30cd7") + ) + (segment + (start 86.2868 68.3676) + (end 85.5348 67.6156) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "5e17e879-38ea-4796-8190-802ec5e91492") + ) + (segment + (start 90.2917 68.3676) + (end 86.2868 68.3676) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "618af9fb-d4b1-4555-a350-b31b7bd3093d") + ) + (segment + (start 182.748 133.191) + (end 182.748 142.716) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "7f8b4eda-ddaa-4a14-a009-817be97dff4e") + ) + (segment + (start 184.523 133.191) + (end 182.748 133.191) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "878f6ba8-4d54-41da-8325-682aa0a5d5c7") + ) + (segment + (start 186.2973 133.191) + (end 186.2975 133.1912) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "8b79c3ab-bcb5-41ee-88f7-14015b7c0064") + ) + (segment + (start 92.7175 70.7934) + (end 90.2917 68.3676) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "94493bcf-7b6f-4f2b-95a9-4af45f8d0ced") + ) + (segment + (start 168.408 104.564) + (end 177.985 114.141) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "a8f5c4e2-771c-4e1f-a93f-a72bc6f2e4b8") + ) + (segment + (start 85.5348 67.6156) + (end 84.345 67.6156) + (width 0.2) + (layer "F.Cu") + (net 130) + (uuid "d7239a54-5359-42ff-9187-6a0023e07b52") + ) + (via + (at 192.272 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "00a05cdc-1043-4610-b7d9-cdad03cae8bf") + ) + (via + (at 168.408 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "03051358-cd85-4aec-b2ce-6d1ca15bb7cd") + ) + (via + (at 119.977 72.7645) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "081b3330-dfc3-48ff-a7de-c591e781341c") + ) + (via + (at 120.8432 88.3151) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "14126325-0121-4d76-a180-c0a50b3fc0b1") + ) + (via + (at 177.985 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "8796c9ba-2e2b-4396-8a0e-22c992533a6e") + ) + (via + (at 92.7175 70.7934) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "a73dbfa4-82d0-4b36-ab34-9147b7a83a0f") + ) + (via + (at 182.748 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 130) + (uuid "fa2c6584-dfcf-4e8c-8dbd-d09ad5e91b46") + ) + (segment + (start 193.9975 152.2412) + (end 192.2725 152.2412) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "0372b6d7-11c9-48d1-9b50-8c0117355f0a") + ) + (segment + (start 177.985 114.141) + (end 177.985 114.1412) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "0acaf4ab-d903-4e12-a292-9c4b7a6dcdc6") + ) + (segment + (start 182.7477 133.191) + (end 182.7475 133.1912) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "3e9e71f3-1d7d-4601-bdcb-adbd58436fb3") + ) + (segment + (start 183.427 131.6395) + (end 182.748 132.3185) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "45a57124-b036-4022-bdff-4c39999bac03") + ) + (segment + (start 179.71 114.1412) + (end 177.985 114.1412) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "702aac62-77a7-4c3e-b81e-ebf665684f5a") + ) + (segment + (start 182.748 133.191) + (end 182.7477 133.191) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "786f7c8f-426d-45e2-931f-3472d278c310") + ) + (segment + (start 184.4725 133.1912) + (end 184.4725 131.6395) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "7ad82947-f28c-4712-871c-e5014302c2c7") + ) + (segment + (start 168.408 95.0912) + (end 168.4075 95.0912) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "7cf12808-5293-495a-94eb-e6d33ef70e64") + ) + (segment + (start 184.4725 131.6395) + (end 183.427 131.6395) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "85bedbc5-f900-4181-bdf2-368e7fac4979") + ) + (segment + (start 171.9575 95.0912) + (end 170.1325 95.0912) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "9bfdaadd-e015-4a88-a626-7496af6da202") + ) + (segment + (start 192.2725 152.2412) + (end 192.2722 152.2412) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "b120f83c-697d-4cf2-91dc-5820179a8a98") + ) + (segment + (start 170.1325 95.0912) + (end 168.408 95.0912) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "dd9da861-7945-4e5c-9eff-0291ed07c0e0") + ) + (segment + (start 195.8225 152.2412) + (end 193.9975 152.2412) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "eeca2a32-5bc1-4038-8b1d-33bdc25885ff") + ) + (segment + (start 182.748 132.3185) + (end 182.748 133.191) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "ef096d8e-0085-46c2-bbb7-d554b714450d") + ) + (segment + (start 192.2722 152.2412) + (end 192.272 152.241) + (width 0.2) + (layer "B.Cu") + (net 130) + (uuid "f843d248-5c4d-46ac-9a0f-6442551bdad2") + ) + (segment + (start 161.6319 88.3151) + (end 168.408 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "01190e49-77a1-475e-ba5a-6cf0feea1dbb") + ) + (segment + (start 119.1609 71.9484) + (end 119.977 72.7645) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "2fedf8bc-7e05-4767-8b9d-73412ec89aa3") + ) + (segment + (start 120.8432 88.3151) + (end 161.6319 88.3151) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "59fed10a-7582-430c-86af-965fcdad145b") + ) + (segment + (start 181.5348 114.141) + (end 177.985 114.141) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "5a2cbe8b-30b2-4db9-b273-ae98ec097169") + ) + (segment + (start 93.8725 71.9484) + (end 119.1609 71.9484) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "b0b01fd3-3f70-41c1-bc9a-b85a3b36a9c0") + ) + (segment + (start 181.535 114.1412) + (end 181.5348 114.141) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "b4e55902-88c4-447c-9abe-dee921f46dd4") + ) + (segment + (start 92.7175 70.7934) + (end 93.8725 71.9484) + (width 0.2) + (layer "In1.Cu") + (net 130) + (uuid "b9ca2759-589f-40ae-8d68-23fd36013281") + ) + (segment + (start 119.977 87.4489) + (end 120.8432 88.3151) + (width 0.2) + (layer "In2.Cu") + (net 130) + (uuid "6437e766-e831-429d-932a-99f34b149566") + ) + (segment + (start 119.977 72.7645) + (end 119.977 87.4489) + (width 0.2) + (layer "In2.Cu") + (net 130) + (uuid "b6e82c6b-9296-4b81-b024-809c5c36db0f") + ) + (segment + (start 201.798 133.191) + (end 201.798 142.716) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "53485e26-fd17-4cb8-a7e7-d7e4921696eb") + ) + (segment + (start 187.458 95.0912) + (end 187.458 104.564) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "7e4e3eee-a97e-4568-adc7-e21e8ff4ce84") + ) + (segment + (start 85.2436 68.1753) + (end 85.6241 68.5558) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "7ecb974c-7073-4fb3-a638-55b7727af984") + ) + (segment + (start 85.2436 68.1156) + (end 85.2436 68.1753) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "84f13c42-9c52-46cf-9ab7-5521b7cfe5f4") + ) + (segment + (start 187.458 104.564) + (end 197.035 114.141) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "9a9e244a-002f-43d0-837e-1aed79baf2e0") + ) + (segment + (start 84.345 68.1156) + (end 85.2436 68.1156) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "b46e07ab-67f2-4248-ab8a-c2f84572e07e") + ) + (segment + (start 201.798 142.716) + (end 211.322 152.241) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "bd3cc045-a856-41c4-985a-43aa1739c8de") + ) + (segment + (start 197.035 114.141) + (end 197.035 128.429) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "c7567efc-bc12-405f-ade6-85ca4f8f13c6") + ) + (segment + (start 197.035 128.429) + (end 201.798 133.191) + (width 0.2) + (layer "F.Cu") + (net 131) + (uuid "d3476511-5013-4a84-b96d-0bd88b7a45a3") + ) + (via + (at 187.458 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "1c52261c-12a1-48b5-a813-d70728710d50") + ) + (via + (at 201.798 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "2e521197-526b-470b-90b5-e33770523e01") + ) + (via + (at 153.667 69.0651) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "3b74e50b-2adb-4733-9556-705fd1246e3a") + ) + (via + (at 211.322 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "5d7cbb14-ad0c-4e83-bb43-ad1e1673df95") + ) + (via + (at 153.214 78.7811) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "6110db73-985e-41bd-a5cf-56a75b5b4d7f") + ) + (via + (at 85.6241 68.5558) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "89b6d478-ce3a-470d-9836-586a87ad76a6") + ) + (via + (at 197.035 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 131) + (uuid "97250494-1d96-4175-84f7-9f3a1ec7f7fa") + ) + (segment + (start 205.3475 133.1912) + (end 203.5225 133.1912) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "30053d84-9ab6-4302-b12a-296aff673898") + ) + (segment + (start 211.3225 152.2412) + (end 211.3222 152.2412) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "35ec71a8-592d-4754-b350-24aa62e684c6") + ) + (segment + (start 198.76 114.1412) + (end 197.035 114.1412) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "37e042e9-a27d-47ea-ae43-e5f4e88cf0ee") + ) + (segment + (start 201.798 132.3185) + (end 201.798 133.191) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "4b0e1d9a-bb1a-4a35-ad18-3c1008b3de2f") + ) + (segment + (start 202.477 131.6395) + (end 201.798 132.3185) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "581c244c-e23f-4a5e-b54d-c1e5685c602f") + ) + (segment + (start 187.4575 95.0912) + (end 187.458 95.0912) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "6f59c5b9-69a0-498c-9f3c-8bb8fe2adc16") + ) + (segment + (start 189.1825 95.0912) + (end 187.458 95.0912) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "73af992b-7252-4134-b502-6ca2a9f8ff5f") + ) + (segment + (start 191.0075 95.0912) + (end 189.1825 95.0912) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "770f71a7-e666-4b3d-8ef6-a93619b946d9") + ) + (segment + (start 197.035 114.1412) + (end 197.035 114.141) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "9ce8bf48-e570-400e-9d2f-4688dd9ab7ea") + ) + (segment + (start 201.7975 133.1912) + (end 201.7978 133.1912) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "9fac210b-e1ec-4442-ba65-1bb48ca43d8d") + ) + (segment + (start 203.5225 131.6395) + (end 202.477 131.6395) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "bb47753f-9b2c-4f2d-aea3-44bff88a5ac7") + ) + (segment + (start 211.3222 152.2412) + (end 211.322 152.241) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "beaa83c0-f54e-414d-b0a8-5c1e0b858d56") + ) + (segment + (start 201.7978 133.1912) + (end 201.798 133.191) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "cbe756b6-b561-4bbb-ae73-0724ec45bee8") + ) + (segment + (start 203.5225 133.1912) + (end 203.5225 131.6395) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "d6d54381-7958-46f4-8400-69781852c242") + ) + (segment + (start 213.0475 152.2412) + (end 211.3225 152.2412) + (width 0.2) + (layer "B.Cu") + (net 131) + (uuid "e70a9036-6d97-42b1-84b0-14a14ca59938") + ) + (segment + (start 111.1185 67.9648) + (end 117.0911 67.9648) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "06644397-8a1f-4396-bc98-f9ea841346d6") + ) + (segment + (start 171.1479 78.7811) + (end 187.458 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "1b5ca1bb-8aa4-4760-a22b-bf51ca2e1ba2") + ) + (segment + (start 117.0911 67.9648) + (end 117.4928 68.3665) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "1ca9f1ca-cf9d-49e2-b7c7-a2809c2bbe56") + ) + (segment + (start 117.4928 68.3665) + (end 137.6836 68.3665) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "205a6328-d240-4d55-97fc-dee893c30a0b") + ) + (segment + (start 94.3952 68.368) + (end 110.7153 68.368) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "3b9ea4c6-56c5-4b08-b35f-54ded7a0dac0") + ) + (segment + (start 86.1878 67.9921) + (end 94.0194 67.9921) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "49a9ec6f-b6ce-4c32-90bf-4e273affe574") + ) + (segment + (start 85.6241 68.5558) + (end 86.1878 67.9921) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "4c7eb088-33aa-4f41-b93a-b173f058e910") + ) + (segment + (start 137.6836 68.3665) + (end 138.3822 69.0651) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "736eff30-411a-4355-ac0d-90bf9fa350c2") + ) + (segment + (start 214.8723 152.241) + (end 211.322 152.241) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "a1062b5f-e638-43b2-97fe-620c3a02b362") + ) + (segment + (start 200.5848 114.141) + (end 197.035 114.141) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "a2629adf-5c4e-4a66-92f9-70baacb64dce") + ) + (segment + (start 214.8725 152.2412) + (end 214.8723 152.241) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "b26d217a-0765-4aec-b38f-61165057e570") + ) + (segment + (start 200.585 114.1412) + (end 200.5848 114.141) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "bec5e65c-4afd-4519-b8f8-d28b07f80ba8") + ) + (segment + (start 110.7153 68.368) + (end 111.1185 67.9648) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "d26d9247-86da-44b9-bf23-a951c8caaeb1") + ) + (segment + (start 94.0194 67.9921) + (end 94.3719 68.3446) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "d326d680-f801-4d0d-98a4-483b3c254786") + ) + (segment + (start 94.3719 68.3447) + (end 94.3952 68.368) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "d4627449-ae0d-4e59-a173-22263fe48d0b") + ) + (segment + (start 138.3822 69.0651) + (end 153.667 69.0651) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "d7c46fd6-a36c-4d81-a566-84b55cfc9a4f") + ) + (segment + (start 153.214 78.7811) + (end 171.1479 78.7811) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "da75519e-5232-49ee-8121-12267f9c59aa") + ) + (segment + (start 94.3719 68.3446) + (end 94.3719 68.3447) + (width 0.2) + (layer "In1.Cu") + (net 131) + (uuid "fb4e5e1c-8429-4d65-af23-d91962425dc0") + ) + (segment + (start 153.214 69.5181) + (end 153.214 78.7811) + (width 0.2) + (layer "In2.Cu") + (net 131) + (uuid "61f5a945-68ed-4dd2-a96b-863860a5d991") + ) + (segment + (start 153.667 69.0651) + (end 153.214 69.5181) + (width 0.2) + (layer "In2.Cu") + (net 131) + (uuid "783affd6-cd47-4af5-8dfd-59f26bc3bfbf") + ) + (segment + (start 311.335 112.298) + (end 311.335 95.0912) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "1dee83d0-cb2d-4d0b-be68-7dd096ca74f3") + ) + (segment + (start 320.86 171.291) + (end 320.86 152.241) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "32dfb1ce-716e-49ef-ab81-455a858e34ba") + ) + (segment + (start 324.053 149.048) + (end 324.053 127.397) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "371b3539-b7df-4b4b-8e26-c6af85dc7b8f") + ) + (segment + (start 316.098 114.141) + (end 313.179 114.141) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "543db125-c055-4e89-a8a0-ee90c446bf6b") + ) + (segment + (start 313.179 114.141) + (end 311.335 112.298) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "61957256-a845-4b43-ad5b-d8f39d0f9cd0") + ) + (segment + (start 90.845 73.6156) + (end 90.845 72.3649) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "61f9e1ac-d649-4434-b72e-6bee1f6b774e") + ) + (segment + (start 316.098 119.441) + (end 316.098 114.141) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "6c4b5b1a-2af8-4cb7-a84c-fc8b2b096d98") + ) + (segment + (start 320.86 152.241) + (end 324.053 149.048) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "7e29d1c8-24a6-4439-914a-b701c6811805") + ) + (segment + (start 324.053 127.397) + (end 316.098 119.441) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "7fef880d-5280-40ef-9b9c-b32be2d22ba9") + ) + (segment + (start 90.845 72.3649) + (end 91.1207 72.0892) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "93682759-f9d7-4fb7-9e24-f8ffa024249b") + ) + (segment + (start 324.41 171.2912) + (end 324.41 171.291) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "a578ffb5-a696-4bbf-baec-597a82c41174") + ) + (segment + (start 324.41 171.291) + (end 320.86 171.291) + (width 0.2) + (layer "F.Cu") + (net 132) + (uuid "f5209706-a680-407e-a2ba-47a28abedb79") + ) + (via + (at 91.1207 72.0892) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 132) + (uuid "165070e9-312a-40cd-ae3a-5b23af3f7641") + ) + (via + (at 320.86 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 132) + (uuid "5bbc84c0-3710-427a-867a-47b453fe653c") + ) + (via + (at 311.335 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 132) + (uuid "64f5a655-caa9-4776-8744-451f17ebb460") + ) + (via + (at 320.86 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 132) + (uuid "9cfde205-2b6f-498c-91b3-8ec3deb156dd") + ) + (via + (at 316.098 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 132) + (uuid "ba224d36-c27e-487f-97dc-db90b9b35fa8") + ) + (segment + (start 322.585 152.2412) + (end 320.86 152.2412) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "0a2acbe7-c85d-4a3f-a32f-47eab04e2134") + ) + (segment + (start 314.885 95.0912) + (end 313.06 95.0912) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "1d446109-ba69-4b3f-b23a-87aaded6abaa") + ) + (segment + (start 317.8225 112.5895) + (end 316.777 112.5895) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "23e9c598-a82e-42cd-b700-3afbbb2f8923") + ) + (segment + (start 313.06 95.0912) + (end 311.335 95.0912) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "574fbe35-ffca-489b-a7c3-dead6576e271") + ) + (segment + (start 324.41 152.2412) + (end 322.585 152.2412) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "5c6270f4-995b-4145-b4eb-f58fb9a397ce") + ) + (segment + (start 320.86 171.2912) + (end 320.86 171.291) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "81cae203-64ba-4e2c-8169-5dc982502365") + ) + (segment + (start 320.86 152.2412) + (end 320.86 152.241) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "b62c717f-7744-4cc8-bc44-a5d81df75149") + ) + (segment + (start 316.0978 114.1412) + (end 316.098 114.141) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "ba863217-b7d7-4f64-8f1c-06cb27990432") + ) + (segment + (start 316.098 113.2685) + (end 316.098 114.141) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "cb627955-3378-471a-a522-f66f350d204b") + ) + (segment + (start 319.6475 114.1412) + (end 317.8225 114.1412) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "cc0367b0-804c-4167-8c6a-1974294965f6") + ) + (segment + (start 322.585 171.2912) + (end 320.86 171.2912) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "dac8cce3-16d9-486c-a282-1ce507596907") + ) + (segment + (start 316.0975 114.1412) + (end 316.0978 114.1412) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "f73823de-ef31-42bb-825f-0e72482a3a18") + ) + (segment + (start 316.777 112.5895) + (end 316.098 113.2685) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "fbe56ddc-e3b6-4d47-befe-85d06a158c52") + ) + (segment + (start 317.8225 114.1412) + (end 317.8225 112.5895) + (width 0.2) + (layer "B.Cu") + (net 132) + (uuid "ffe55263-c7b8-49be-af89-f2ab2083d467") + ) + (segment + (start 97.7441 76.0872) + (end 95.1646 73.5077) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "0c082cb0-b561-43a0-9741-09440154ebe3") + ) + (segment + (start 307.5542 95.0912) + (end 288.3325 75.8695) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "2a8530d6-2b40-46ee-8325-aa245ba8c87c") + ) + (segment + (start 104.5746 75.8695) + (end 104.3569 76.0872) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "45c36cf8-b82b-4d80-aa9c-5926e1b0fca6") + ) + (segment + (start 311.335 95.0912) + (end 307.5542 95.0912) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "9422435e-73a7-46af-89e4-1cdd7c0e8441") + ) + (segment + (start 104.3569 76.0872) + (end 97.7441 76.0872) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "9805afec-2e47-455c-b55a-3f4561872bff") + ) + (segment + (start 89.914 71.6643) + (end 90.6958 71.6643) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "9b65ee13-b29f-40b4-b60c-b2361e790a60") + ) + (segment + (start 90.6958 71.6643) + (end 91.1207 72.0892) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "a315616c-c46a-458d-ab7d-3adcf03aa1be") + ) + (segment + (start 288.3325 75.8695) + (end 104.5746 75.8695) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "aaa3bb34-53c0-429e-8cf7-f1bbfbddcd89") + ) + (segment + (start 89.5031 72.6106) + (end 89.5031 72.0752) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "c0eeddd2-9abe-4d31-9f54-3faf4b34c684") + ) + (segment + (start 95.1646 73.5077) + (end 90.4002 73.5077) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "df0e1068-dfcb-4063-9097-1aaf327e09fa") + ) + (segment + (start 90.4002 73.5077) + (end 89.5031 72.6106) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "e97c3073-201e-4b93-bb37-4c4bcaf2133e") + ) + (segment + (start 89.5031 72.0752) + (end 89.914 71.6643) + (width 0.2) + (layer "In1.Cu") + (net 132) + (uuid "ff620a63-efdc-4f16-bb1d-e6d989de27a2") + ) + (segment + (start 292.285 114.141) + (end 293.097 114.953) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "2d25ae21-8a9c-4d23-9fbd-4036cdf5fd2d") + ) + (segment + (start 282.685 104.541) + (end 292.285 114.141) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "3bf6c20f-b2a9-4b30-9cfa-0df64836b2d8") + ) + (segment + (start 301.81 169.285) + (end 301.81 171.291) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "3defb7a0-f0c9-4f34-8186-bcd77cdccb59") + ) + (segment + (start 305.439 133.191) + (end 308.954 133.191) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "81766529-6ff6-487e-881c-b0448f9d185c") + ) + (segment + (start 308.954 133.191) + (end 308.954 162.142) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "8bc292e5-3e92-47b0-b574-7548442ea897") + ) + (segment + (start 293.097 114.953) + (end 293.097 120.848) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "9bd4ee74-2100-4642-b813-112a81a368a6") + ) + (segment + (start 293.097 120.848) + (end 305.439 133.191) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "a0d3af0f-dd19-4ca9-9878-74b96649ac27") + ) + (segment + (start 282.685 95.0912) + (end 282.685 104.541) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "a3499b28-4c44-45f6-bb34-9522dac8acef") + ) + (segment + (start 90.345 72.5014) + (end 90.345 73.6156) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "a6a0fca8-6ce0-4027-ae7f-b4a81b064e4c") + ) + (segment + (start 90.1532 72.3096) + (end 90.345 72.5014) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "c808d8e6-a2ee-439c-b57e-53b20ca7fbaf") + ) + (segment + (start 308.954 162.142) + (end 301.81 169.285) + (width 0.2) + (layer "F.Cu") + (net 133) + (uuid "f117dba2-dd54-4432-9334-96857ba3e8ae") + ) + (via + (at 308.954 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 133) + (uuid "0c8c8d02-3dbc-4e92-8a76-3ce8149281f6") + ) + (via + (at 282.685 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 133) + (uuid "12061a1b-f3ce-4ce5-8e18-ee4db87f5638") + ) + (via + (at 282.6786 73.3047) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 133) + (uuid "8a12b957-bec9-411d-bed6-520c2c55c823") + ) + (via + (at 301.81 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 133) + (uuid "ddd62426-161a-4fad-8227-86f7ec8e531c") + ) + (via + (at 90.1532 72.3096) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 133) + (uuid "f276819b-e3a2-4d01-9953-f3345775fcc9") + ) + (via + (at 292.285 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 133) + (uuid "f2826f9e-d4de-4fc0-8fc5-1bfeab79b486") + ) + (segment + (start 309.633 131.6395) + (end 308.954 132.3185) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "00009576-7d47-465d-acbe-adbd569cb077") + ) + (segment + (start 312.5038 133.1912) + (end 310.6788 133.1912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "058db228-f82f-40ad-9766-8171e367db39") + ) + (segment + (start 308.954 133.191) + (end 308.9538 133.1912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "18c66f8a-9a89-4981-b54f-43cd205a12c3") + ) + (segment + (start 284.41 95.0912) + (end 282.685 95.0912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "3d05589d-3f70-404e-a80d-d57a7f463136") + ) + (segment + (start 310.6788 131.6395) + (end 309.633 131.6395) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "4ca684dd-4a39-44e6-b4b7-8017beed887c") + ) + (segment + (start 301.81 171.291) + (end 301.81 171.2912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "4df1c25d-d995-4414-8394-446c5d17f912") + ) + (segment + (start 294.01 114.1412) + (end 293.1475 114.1412) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "603fa4fa-42b7-4f89-983b-0ed2db6109e6") + ) + (segment + (start 303.535 171.2912) + (end 301.81 171.2912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "69771a51-9e55-4fbf-b3d8-509bd6d0e8fe") + ) + (segment + (start 293.1475 114.1412) + (end 292.2852 114.1412) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "6c582a56-dfeb-460a-b0e9-f70c00a91705") + ) + (segment + (start 286.235 95.0912) + (end 284.41 95.0912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "ad8a5ef1-a40e-4f12-92af-52c653592220") + ) + (segment + (start 295.835 114.1412) + (end 294.01 114.1412) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "c003e0a2-bcf1-4e38-8e30-cb41d3801a71") + ) + (segment + (start 310.6788 133.1912) + (end 310.6788 131.6395) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "c1d0a47f-5d11-4bb5-ab95-7b56093b9a39") + ) + (segment + (start 305.36 171.2912) + (end 303.535 171.2912) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "c3d3620e-3df5-4eb1-8779-22660fbe7635") + ) + (segment + (start 292.2852 114.1412) + (end 292.285 114.141) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "c5a33743-730d-49a7-a3ba-7a03127903cb") + ) + (segment + (start 293.1475 114.1412) + (end 292.285 114.1412) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "e6129fb8-66a9-47d8-aa7f-367415ca1cec") + ) + (segment + (start 308.954 132.3185) + (end 308.954 133.191) + (width 0.2) + (layer "B.Cu") + (net 133) + (uuid "efd2122e-dc11-4a2a-87f0-5fde570d89e4") + ) + (segment + (start 107.5715 72.7043) + (end 90.5479 72.7043) + (width 0.2) + (layer "In1.Cu") + (net 133) + (uuid "0d066c7a-0a75-4015-845b-ee08905d9c89") + ) + (segment + (start 282.4785 73.5048) + (end 108.372 73.5048) + (width 0.2) + (layer "In1.Cu") + (net 133) + (uuid "29bc7e94-a06f-406c-b9b5-5e6d13cfcdb3") + ) + (segment + (start 108.372 73.5048) + (end 107.5715 72.7043) + (width 0.2) + (layer "In1.Cu") + (net 133) + (uuid "76ba1ddd-4193-4216-83e1-fb6a850a1720") + ) + (segment + (start 282.6786 73.3047) + (end 282.4785 73.5048) + (width 0.2) + (layer "In1.Cu") + (net 133) + (uuid "a028d3ed-7d62-4ddd-bdf3-9476a20dd3d4") + ) + (segment + (start 90.5479 72.7043) + (end 90.1532 72.3096) + (width 0.2) + (layer "In1.Cu") + (net 133) + (uuid "cac29eb3-20db-4d1e-9f08-7c416069beb1") + ) + (segment + (start 282.6786 73.3185) + (end 282.685 73.3249) + (width 0.2) + (layer "In2.Cu") + (net 133) + (uuid "15d1f93f-a7a6-4d44-bf61-40cdb95214b7") + ) + (segment + (start 282.6786 73.3185) + (end 282.6786 73.3047) + (width 0.2) + (layer "In2.Cu") + (net 133) + (uuid "34900d74-dc64-4cd7-ad75-c8ee99033262") + ) + (segment + (start 282.685 73.3249) + (end 282.685 95.0912) + (width 0.2) + (layer "In2.Cu") + (net 133) + (uuid "be0706f2-da9a-4ad5-831f-098fbffd8a62") + ) + (segment + (start 98.518274 72.717) + (end 91.345 72.717) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "0357773d-e591-44bd-a235-d70486fc0a1f") + ) + (segment + (start 339.91 114.141) + (end 339.91 133.191) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "064ee709-bafa-4213-81fe-1564519f56a4") + ) + (segment + (start 103.155 74.1996) + (end 100.000874 74.1996) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "1b1cb3da-e46b-473b-ad97-d9a43be04c21") + ) + (segment + (start 91.345 72.717) + (end 91.345 73.6156) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "2f64ee52-d0ab-49a6-a201-01d96d30af79") + ) + (segment + (start 339.91 152.241) + (end 339.91 171.291) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "320e4000-9b9e-40c4-9940-936455dcb6f0") + ) + (segment + (start 100.000874 74.1996) + (end 98.518274 72.717) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "4162767e-8c1b-46be-af3f-912cefde3be0") + ) + (segment + (start 339.91 95.0912) + (end 339.91 114.141) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "472aeb43-3917-4c60-b1fb-5e8a3cb89ab0") + ) + (segment + (start 339.91 133.191) + (end 339.91 152.241) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "569fada7-884c-4347-a82f-0c65b0d46964") + ) + (segment + (start 339.9102 152.2412) + (end 339.91 152.241) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "61f4007a-2eff-4a47-b070-6ff732bc3960") + ) + (segment + (start 343.46 114.1412) + (end 339.9102 114.1412) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "9a914ffe-b1b1-4cb1-8ccf-4e7921424a5c") + ) + (segment + (start 343.46 152.2412) + (end 339.9102 152.2412) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "a80031dd-7c57-471d-aa80-75bc0afee1c5") + ) + (segment + (start 339.9102 114.1412) + (end 339.91 114.141) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "ce5acba5-601a-4479-8848-b683ed87618a") + ) + (segment + (start 103.9903 75.0349) + (end 103.155 74.1996) + (width 0.2) + (layer "F.Cu") + (net 134) + (uuid "fd5a327d-7abf-48a1-b33e-4a7dd53948dc") + ) + (via + (at 103.9903 75.0349) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 134) + (uuid "430695c5-3de7-473a-b00d-36fb735ce4d2") + ) + (via + (at 339.91 114.141) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 134) + (uuid "5446da2c-68e6-400a-aa87-e0d94b166fa2") + ) + (via + (at 339.91 171.291) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 134) + (uuid "5d68987a-c7a6-45ea-a2c0-9ebcb3517102") + ) + (via + (at 339.91 95.0912) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 134) + (uuid "79b24516-7a45-42c1-8780-e0a146a30b1b") + ) + (via + (at 339.91 152.241) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 134) + (uuid "8263a510-2c7e-44e6-86f6-a74430bd0065") + ) + (via + (at 339.91 133.191) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 134) + (uuid "a877248b-9d88-4e6c-8835-826973405b09") + ) + (segment + (start 339.91 171.2912) + (end 339.91 171.291) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "021ea694-a907-4e42-a322-010c47bc1d3f") + ) + (segment + (start 340.7725 133.1912) + (end 339.9102 133.1912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "2eb1ed9b-fa20-4aa6-b1bd-5dc1a1f694c6") + ) + (segment + (start 341.635 114.1412) + (end 339.91 114.1412) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "35a594bb-00ab-49c1-a344-7e1bc9e66e17") + ) + (segment + (start 341.635 133.1912) + (end 340.7725 133.1912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "6024ab7f-7f6d-4e25-b882-eb1bef27ce5f") + ) + (segment + (start 341.635 171.2912) + (end 339.91 171.2912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "6ee0c25f-6ef7-4381-9af2-5a491efcb3a0") + ) + (segment + (start 343.46 133.1912) + (end 341.635 133.1912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "9acbf8b7-a4cb-4db0-a943-bd94d6a1d123") + ) + (segment + (start 341.635 95.0912) + (end 339.91 95.0912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "afe09f5b-93c6-4972-8d40-a987e7564335") + ) + (segment + (start 339.9102 133.1912) + (end 339.91 133.191) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "bbd33b58-c702-45cb-b64b-75ed46e205c1") + ) + (segment + (start 339.91 152.241) + (end 339.91 152.2412) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "cffc1284-fe18-4d2d-bf9c-b409d7187dbd") + ) + (segment + (start 343.46 95.0912) + (end 341.635 95.0912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "d30e5629-a21e-41bf-82e6-7285d7ea5e56") + ) + (segment + (start 340.7725 133.1912) + (end 339.91 133.1912) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "e81aa18f-9a0d-4fb7-87f9-023d122e3f63") + ) + (segment + (start 341.635 152.2412) + (end 339.91 152.2412) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "f8db218a-2ca7-4583-9760-dcd0004863b0") + ) + (segment + (start 339.91 114.141) + (end 339.91 114.1412) + (width 0.2) + (layer "B.Cu") + (net 134) + (uuid "fd86f6b8-f836-4b62-9eda-5c7b00c863b0") + ) + (segment + (start 319.8285 75.0097) + (end 104.0155 75.0097) + (width 0.2) + (layer "In1.Cu") + (net 134) + (uuid "26d6f626-1f10-4484-bb75-ea542aaa819b") + ) + (segment + (start 339.91 95.0912) + (end 319.8285 75.0097) + (width 0.2) + (layer "In1.Cu") + (net 134) + (uuid "3df51a6b-4bc3-4e7b-8691-d1687a049b41") + ) + (segment + (start 104.0155 75.0097) + (end 103.9903 75.0349) + (width 0.2) + (layer "In1.Cu") + (net 134) + (uuid "b2d14681-19ec-41a6-b5e6-eb1100b140f1") + ) + (segment + (start 343.46 171.2912) + (end 343.4598 171.291) + (width 0.2) + (layer "In1.Cu") + (net 134) + (uuid "b31cec65-537c-4103-a389-99277f481c3a") + ) + (segment + (start 343.4598 171.291) + (end 339.91 171.291) + (width 0.2) + (layer "In1.Cu") + (net 134) + (uuid "fea033b5-c87d-459e-985b-b8128fbd9af9") + ) + (via + (at 76.2197 103.0387) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 136) + (uuid "c38b9383-75d0-4d1e-af0d-b6bc33b78bff") + ) + (via + (at 102.15125 100.375) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 136) + (uuid "fc17ab8c-f359-49de-a26b-4b8e0b7dbf93") + ) + (segment + (start 102.15125 100.375) + (end 102.2388 100.375) + (width 0.2) + (layer "B.Cu") + (net 136) + (uuid "39bc6e1a-3de0-4360-88c8-ddccebe1ca34") + ) + (segment + (start 102.3188 100.455) + (end 102.3188 101.6437) + (width 0.2) + (layer "B.Cu") + (net 136) + (uuid "47493164-d972-415d-a716-9a3e2df3374c") + ) + (segment + (start 77.7788 103.0387) + (end 76.2197 103.0387) + (width 0.2) + (layer "B.Cu") + (net 136) + (uuid "cb68363e-907b-4d12-82b0-c9a8e13c86eb") + ) + (segment + (start 102.2388 100.375) + (end 102.3188 100.455) + (width 0.2) + (layer "B.Cu") + (net 136) + (uuid "cf713136-794d-4ce3-bb92-f5d72934efb4") + ) + (segment + (start 90.600222 100.189) + (end 90.486222 100.075) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "285c68d4-4073-4e20-ae0c-9775e00c7329") + ) + (segment + (start 102.15125 100.375) + (end 101.85125 100.075) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "63795cb7-1448-49a7-926c-3b629f41454f") + ) + (segment + (start 76.2197 101.90655) + (end 76.2197 103.0387) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "8e9d2856-56cd-4349-9089-a6750e2efa8d") + ) + (segment + (start 90.486222 100.075) + (end 78.05125 100.075) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "c22b7627-c9af-4e27-add5-3f64c691a2a4") + ) + (segment + (start 91.018578 100.189) + (end 90.600222 100.189) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "dee51747-8c55-42e2-a661-c501f9f1cfb5") + ) + (segment + (start 101.85125 100.075) + (end 91.132578 100.075) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "e80d227e-f6df-4da0-b202-0b8efdd9085d") + ) + (segment + (start 78.05125 100.075) + (end 76.2197 101.90655) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "eb81f236-fa3c-434e-bd7b-34d61000341c") + ) + (segment + (start 91.132578 100.075) + (end 91.018578 100.189) + (width 0.2) + (layer "In1.Cu") + (net 136) + (uuid "ededb443-f5af-41c0-beab-5b5fc102b1c5") + ) + (segment + (start 121.4088 100.98255) + (end 120.60125 100.175) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "13ddd214-7566-498a-a96a-8821de9ecd85") + ) + (segment + (start 121.4088 101.6187) + (end 121.4088 100.98255) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "1b0b7a59-e03a-4455-ab99-e09caf93753f") + ) + (segment + (start 120.60125 100.175) + (end 108.4196 100.175) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "3488dd7a-1321-41d5-8ee2-24982bae9dcf") + ) + (segment + (start 96.8688 104.04255) + (end 96.8688 103.1437) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "443f63ae-414a-45b2-bc04-a8b1cb6a8aef") + ) + (segment + (start 108.4196 100.175) + (end 103.6696 104.925) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "6cba8330-4e70-415d-973b-711b0f3370d7") + ) + (segment + (start 97.75125 104.925) + (end 96.8688 104.04255) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "a94ea259-fc23-4a73-89ca-cc36c34a40f4") + ) + (segment + (start 103.6696 104.925) + (end 97.75125 104.925) + (width 0.2) + (layer "B.Cu") + (net 137) + (uuid "d8415e3e-9a94-4984-ac35-25e6271dc707") + ) + (segment + (start 140.4188 100.74255) + (end 140.4188 101.6487) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "36f4cbf8-e787-456b-8ca9-4a74b05cad8b") + ) + (segment + (start 132.569 100.075) + (end 139.75125 100.075) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "4cbc4acf-c4b1-41ca-875c-3c6c18c32e36") + ) + (segment + (start 116.890689 104.958109) + (end 127.685891 104.958109) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "579809b8-b880-40b9-ad6f-3da7091421b6") + ) + (segment + (start 127.685891 104.958109) + (end 132.569 100.075) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "9e966ba9-95df-4d38-9420-35d4d1eb5bce") + ) + (segment + (start 139.75125 100.075) + (end 140.4188 100.74255) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "bc0680e9-b1a3-41f0-97c6-401ca73d225e") + ) + (segment + (start 115.9588 104.02622) + (end 116.890689 104.958109) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "e078575e-2378-47ae-9352-9f1a1700e6f4") + ) + (segment + (start 115.9588 103.1187) + (end 115.9588 104.02622) + (width 0.2) + (layer "B.Cu") + (net 138) + (uuid "ec331602-240e-41e7-aba7-1bdf66cd5bb0") + ) + (segment + (start 134.9688 104.19255) + (end 135.70125 104.925) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "14a52df7-32ec-4165-90ba-3716b07c413f") + ) + (segment + (start 153.3495 100.125) + (end 158.75125 100.125) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "2eff8f2e-b3ac-432c-ab11-b4c78308505c") + ) + (segment + (start 135.70125 104.925) + (end 148.5495 104.925) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "78dd4390-9df6-4e77-a4ca-a3d209996e51") + ) + (segment + (start 148.5495 104.925) + (end 153.3495 100.125) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "c0881db3-7d30-44d1-a4ee-abd82209b80f") + ) + (segment + (start 158.75125 100.125) + (end 159.5288 100.90255) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "ccb97d52-ac9b-473c-ad5f-31a73a2626aa") + ) + (segment + (start 134.9688 103.1487) + (end 134.9688 104.19255) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "eb064eae-e387-49eb-a6ec-67629a2e73e2") + ) + (segment + (start 159.5288 100.90255) + (end 159.5288 101.5987) + (width 0.2) + (layer "B.Cu") + (net 139) + (uuid "f8948727-7225-4a39-995b-b6a67958aa1b") + ) + (segment + (start 180.45495 101.3787) + (end 178.6588 101.3787) + (width 0.2) + (layer "F.Cu") + (net 140) + (uuid "45957077-e770-46ec-a491-b1979b3468c0") + ) + (segment + (start 181.92625 102.85) + (end 180.45495 101.3787) + (width 0.2) + (layer "F.Cu") + (net 140) + (uuid "feeff820-e132-40f3-b871-032fcda2710b") + ) + (via + (at 181.92625 102.85) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 140) + (uuid "46841172-8cf7-47aa-bd8e-0ade79f7304b") + ) + (via + (at 178.6588 101.3787) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 140) + (uuid "cc1bfc40-aa1c-4cc5-bb0d-35aa394923b6") + ) + (segment + (start 181.05125 104.775) + (end 181.92625 103.9) + (width 0.2) + (layer "B.Cu") + (net 140) + (uuid "87287313-a127-4d12-adcd-ff3d66e36f88") + ) + (segment + (start 154.947394 104.775) + (end 181.05125 104.775) + (width 0.2) + (layer "B.Cu") + (net 140) + (uuid "bb2a7885-7d90-475e-a418-5f7e8f513b75") + ) + (segment + (start 154.0788 103.0987) + (end 154.0788 103.906406) + (width 0.2) + (layer "B.Cu") + (net 140) + (uuid "cedc805a-a1ae-45e6-ab58-f1282835b55d") + ) + (segment + (start 181.92625 103.9) + (end 181.92625 102.85) + (width 0.2) + (layer "B.Cu") + (net 140) + (uuid "cf6ca322-6710-4b16-a21f-20557d20e1ba") + ) + (segment + (start 154.0788 103.906406) + (end 154.947394 104.775) + (width 0.2) + (layer "B.Cu") + (net 140) + (uuid "d8de9148-74e8-4368-9f51-a07d2a5507b5") + ) + (segment + (start 200.25125 106.80375) + (end 198.427 108.628) + (width 0.2) + (layer "F.Cu") + (net 141) + (uuid "7e0a9d0c-f83c-4aa7-9cef-4ae8faa8d245") + ) + (segment + (start 171.306 102.666) + (end 174.673 106.033) + (width 0.2) + (layer "F.Cu") + (net 141) + (uuid "8c8d6760-b39f-4488-a0a4-3b85aab46067") + ) + (segment + (start 174.673 106.033) + (end 177.539 106.033) + (width 0.2) + (layer "F.Cu") + (net 141) + (uuid "990b9ac6-1af2-4a20-ba6a-5b361e25ac39") + ) + (segment + (start 200.25125 102.075) + (end 200.25125 106.80375) + (width 0.2) + (layer "F.Cu") + (net 141) + (uuid "a3b8cd32-e38a-4fad-9010-d84953ca09af") + ) + (segment + (start 199.70125 101.525) + (end 200.25125 102.075) + (width 0.2) + (layer "F.Cu") + (net 141) + (uuid "e275be8d-c521-496b-af6f-9fd0db4abdb4") + ) + (via + (at 199.70125 101.525) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 141) + (uuid "5099bfa8-4cf9-4352-b016-11ed3fe2dcba") + ) + (via + (at 177.539 106.033) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 141) + (uuid "6f7e0c32-1646-4020-b025-3a61ed54f1fc") + ) + (via + (at 198.427 108.628) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 141) + (uuid "95d8852c-2c44-440e-a97c-4399e2442db8") + ) + (via + (at 171.306 102.666) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 141) + (uuid "fc466594-3712-4fcb-a9bd-2fe7b4de9a64") + ) + (segment + (start 172.9961 102.666) + (end 173.2088 102.8787) + (width 0.2) + (layer "B.Cu") + (net 141) + (uuid "5dc52eb5-89fd-400f-baba-b2c489f450f0") + ) + (segment + (start 197.9914 101.525) + (end 197.9877 101.5287) + (width 0.2) + (layer "B.Cu") + (net 141) + (uuid "7c5a21c1-716d-40db-b906-4f0f4259a2ae") + ) + (segment + (start 197.9877 101.5287) + (end 197.6288 101.5287) + (width 0.2) + (layer "B.Cu") + (net 141) + (uuid "a4805528-3488-4697-a133-c9061e5518fb") + ) + (segment + (start 199.70125 101.525) + (end 197.9914 101.525) + (width 0.2) + (layer "B.Cu") + (net 141) + (uuid "c5e6a8cb-0b25-4554-be7f-13e3256b8454") + ) + (segment + (start 171.306 102.666) + (end 172.9961 102.666) + (width 0.2) + (layer "B.Cu") + (net 141) + (uuid "ccd498c0-17e6-4bcf-9e65-9f214de657f5") + ) + (segment + (start 180.134 108.628) + (end 177.539 106.033) + (width 0.2) + (layer "In1.Cu") + (net 141) + (uuid "1525fbf3-0211-44c8-87fa-a2641536e890") + ) + (segment + (start 198.427 108.628) + (end 180.134 108.628) + (width 0.2) + (layer "In1.Cu") + (net 141) + (uuid "6c6e7936-f55a-48e5-91ad-65a9ab1c3632") + ) + (via + (at 218.80125 101.475) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 142) + (uuid "b579cf6a-42ea-464d-93cd-e251d7fc29a5") + ) + (via + (at 192.1788 103.9752) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 142) + (uuid "ef1306ef-4e14-458d-a3ea-e55abad217dc") + ) + (segment + (start 192.1788 103.0287) + (end 192.1788 103.9752) + (width 0.2) + (layer "B.Cu") + (net 142) + (uuid "31330e7a-e58e-4295-898e-1a78b073a68b") + ) + (segment + (start 218.75755 101.5187) + (end 216.6438 101.5187) + (width 0.2) + (layer "B.Cu") + (net 142) + (uuid "afe196eb-8dd9-467a-8603-72ac5364100f") + ) + (segment + (start 218.80125 101.475) + (end 218.75755 101.5187) + (width 0.2) + (layer "B.Cu") + (net 142) + (uuid "e5f9a77b-fe9c-4a33-83dc-92da8ca8d964") + ) + (segment + (start 192.1788 104.30255) + (end 192.1788 103.9752) + (width 0.2) + (layer "In1.Cu") + (net 142) + (uuid "142c3da7-4285-4264-990f-c7d3110d746e") + ) + (segment + (start 192.65125 104.775) + (end 192.1788 104.30255) + (width 0.2) + (layer "In1.Cu") + (net 142) + (uuid "336fce64-5fc9-4944-ac0b-d13b5d9769b4") + ) + (segment + (start 218.80125 101.475) + (end 218.80125 104.375) + (width 0.2) + (layer "In1.Cu") + (net 142) + (uuid "61415115-91df-4a8a-892a-5fb9094af171") + ) + (segment + (start 218.40125 104.775) + (end 192.65125 104.775) + (width 0.2) + (layer "In1.Cu") + (net 142) + (uuid "63295bac-2e29-4f30-bd50-4247e6ab7205") + ) + (segment + (start 218.80125 104.375) + (end 218.40125 104.775) + (width 0.2) + (layer "In1.Cu") + (net 142) + (uuid "71fe22b7-6f02-4082-bec9-2450b848edc6") + ) + (segment + (start 228.4252 100.175) + (end 235.00125 100.175) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "189a09f9-5b5b-4493-a021-b37552d3504a") + ) + (segment + (start 211.1938 103.0187) + (end 211.1938 103.96755) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "22e78988-9a9e-45a7-a347-1fbf69412749") + ) + (segment + (start 223.8752 104.725) + (end 228.4252 100.175) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "230dcbd8-28d3-44ab-846d-7ae458986626") + ) + (segment + (start 235.00125 100.175) + (end 235.6263 100.80005) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "64c86749-075e-46c4-8cde-4e8e50e8b4f4") + ) + (segment + (start 235.6263 100.80005) + (end 235.6263 101.5888) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "68f47e5a-e11a-4b74-84ea-f416d92261f9") + ) + (segment + (start 211.1938 103.96755) + (end 211.95125 104.725) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "69235b9f-2beb-4054-afb8-e93049ef0354") + ) + (segment + (start 211.95125 104.725) + (end 223.8752 104.725) + (width 0.2) + (layer "B.Cu") + (net 143) + (uuid "85dc8c64-f835-44ed-ada4-342b4b7c6f46") + ) + (segment + (start 242.4744 105.275) + (end 247.5744 100.175) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "543cdcbe-de18-4ca9-a91b-ccfba84c9ae8") + ) + (segment + (start 254.6788 100.75255) + (end 254.6788 101.5987) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "a9de8141-4918-4ccd-a141-f3a11cdad021") + ) + (segment + (start 230.1763 104.20005) + (end 231.25125 105.275) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "c8789333-fd5f-432f-b2d8-e18077017719") + ) + (segment + (start 254.10125 100.175) + (end 254.6788 100.75255) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "eb1adc6e-e89b-4fab-af0b-02d67fd8be29") + ) + (segment + (start 247.5744 100.175) + (end 254.10125 100.175) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "f962e70e-1ffa-442c-a7ef-f58095e8c8e0") + ) + (segment + (start 231.25125 105.275) + (end 242.4744 105.275) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "f9d4c3c0-4f2b-44ea-9812-459206d5418e") + ) + (segment + (start 230.1763 103.0888) + (end 230.1763 104.20005) + (width 0.2) + (layer "B.Cu") + (net 144) + (uuid "fbb7d5a1-1627-414f-84bb-d466e64dee44") + ) + (segment + (start 273.20125 100.075) + (end 273.7688 100.64255) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "149b96a0-6ed4-4bb4-a24a-f66b028a1b0e") + ) + (segment + (start 250.15125 105.025) + (end 261.7788 105.025) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "20c94815-fc80-4fce-8c85-13fc34e19050") + ) + (segment + (start 261.7788 105.025) + (end 266.7288 100.075) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "39dd4f91-c1ef-43a6-9cf8-5fa786b78ccb") + ) + (segment + (start 249.2288 103.0987) + (end 249.2288 104.10255) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "47c05771-1181-4141-b60f-f4c810e4e472") + ) + (segment + (start 266.7288 100.075) + (end 273.20125 100.075) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "5ac54210-ccaa-4fdf-96a3-c6356bd6613b") + ) + (segment + (start 273.7688 100.64255) + (end 273.7688 101.6438) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "5ea7c1d7-1c2f-454b-a937-f52e81bb0989") + ) + (segment + (start 249.2288 104.10255) + (end 250.15125 105.025) + (width 0.2) + (layer "B.Cu") + (net 145) + (uuid "84b77799-7d1a-440d-86b2-fdd7b4ecc4f3") + ) + (segment + (start 292.15125 100.125) + (end 292.819 100.79275) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "01e3ea93-a900-4695-b4bb-66d906da012b") + ) + (segment + (start 269.10125 104.975) + (end 275.05125 104.975) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "1a23c5da-369e-4a9a-b45d-b81ca24095a7") + ) + (segment + (start 279.90125 100.125) + (end 292.15125 100.125) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "2848f433-500f-4484-9016-eba4ca442ae2") + ) + (segment + (start 268.3188 103.1438) + (end 268.3188 104.19255) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "51862f23-8e6b-4ed4-9551-617ea6da3a41") + ) + (segment + (start 292.819 100.79275) + (end 292.819 101.4891) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "7e88e3f3-f23d-4603-a2ea-b6d2e2f9e46f") + ) + (segment + (start 268.3188 104.19255) + (end 269.10125 104.975) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "9699ad0b-acdc-4c7c-a3e9-6925bfa1c590") + ) + (segment + (start 275.05125 104.975) + (end 279.90125 100.125) + (width 0.2) + (layer "B.Cu") + (net 146) + (uuid "be0bc166-dad8-4640-ad87-fa3a8eb40f09") + ) + (segment + (start 322.3872 103.1682) + (end 317.0831 108.4723) + (width 0.2) + (layer "B.Cu") + (net 147) + (uuid "3e446c5c-6ced-4878-a59a-c64c6df0ba7a") + ) + (segment + (start 287.369 103.99275) + (end 287.369 102.9891) + (width 0.2) + (layer "B.Cu") + (net 147) + (uuid "59ea69a5-844e-4afd-a6ba-e738a96e58f5") + ) + (segment + (start 317.0831 108.4723) + (end 291.84855 108.4723) + (width 0.2) + (layer "B.Cu") + (net 147) + (uuid "6704eff1-35ca-4c57-a12e-852a57f3fce8") + ) + (segment + (start 291.84855 108.4723) + (end 287.369 103.99275) + (width 0.2) + (layer "B.Cu") + (net 147) + (uuid "7f7943ad-c774-4eac-989e-80669b3d7f5f") + ) + (segment + (start 322.3872 102.4823) + (end 322.3872 103.1682) + (width 0.2) + (layer "B.Cu") + (net 147) + (uuid "e1fc442e-e086-405c-8e79-2074f1f7f7db") + ) + (segment + (start 321.394 101.4891) + (end 322.3872 102.4823) + (width 0.2) + (layer "B.Cu") + (net 147) + (uuid "f068c610-136e-4ce8-b32c-b0d64d28e44b") + ) + (segment + (start 314.803 103.361) + (end 314.803 105.71) + (width 0.2) + (layer "F.Cu") + (net 148) + (uuid "71343b3c-1dd9-4bd2-9aaa-08c316a424bc") + ) + (segment + (start 314.29 102.848) + (end 314.803 103.361) + (width 0.2) + (layer "F.Cu") + (net 148) + (uuid "89d75306-a656-44c3-b0d0-9c7b96cf9783") + ) + (via + (at 314.803 105.71) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 148) + (uuid "602b511f-e8f5-42d4-b3e3-72f9b4d7ee98") + ) + (via + (at 314.29 102.848) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 148) + (uuid "7fc6c447-18c6-46af-adc5-bd10140de71c") + ) + (via + (at 350.65125 100.275) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 148) + (uuid "c74e103a-9cdf-4c75-b12d-33052fb97bc4") + ) + (segment + (start 315.8029 102.848) + (end 315.944 102.9891) + (width 0.2) + (layer "B.Cu") + (net 148) + (uuid "10de1c50-1be4-4209-8407-6aca57556cc0") + ) + (segment + (start 350.65125 100.275) + (end 350.65125 100.80685) + (width 0.2) + (layer "B.Cu") + (net 148) + (uuid "22f46a47-b1d7-4e09-975f-c04737362ea7") + ) + (segment + (start 314.29 102.848) + (end 315.8029 102.848) + (width 0.2) + (layer "B.Cu") + (net 148) + (uuid "29a882e1-f39c-48fd-9cdb-22bd74ec15a5") + ) + (segment + (start 350.65125 100.80685) + (end 349.969 101.4891) + (width 0.2) + (layer "B.Cu") + (net 148) + (uuid "afb0d0db-00f4-4545-ac47-634a338fbf08") + ) + (segment + (start 327.1234 100.025) + (end 321.4384 105.71) + (width 0.2) + (layer "In1.Cu") + (net 148) + (uuid "0101989d-6641-435d-b014-7a2ccbaea5ae") + ) + (segment + (start 350.3951 100.025) + (end 327.1234 100.025) + (width 0.2) + (layer "In1.Cu") + (net 148) + (uuid "7ef3c94d-94bc-4d65-a891-be4aef64075a") + ) + (segment + (start 321.4384 105.71) + (end 314.803 105.71) + (width 0.2) + (layer "In1.Cu") + (net 148) + (uuid "90b0f137-c5db-4670-bce2-02304192b0e0") + ) + (segment + (start 350.65125 100.275) + (end 350.6451 100.275) + (width 0.2) + (layer "In1.Cu") + (net 148) + (uuid "935cdcad-f625-4da3-9a99-4108e1979d09") + ) + (segment + (start 350.6451 100.275) + (end 350.3951 100.025) + (width 0.2) + (layer "In1.Cu") + (net 148) + (uuid "f642f080-6be0-4aa2-9429-7be5158f9ce8") + ) + (via + (at 69.6385 119.9265) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 149) + (uuid "e4d17fde-c7a9-46a4-a654-6f5c62b7a6fb") + ) + (via + (at 329.9754 109.7402) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 149) + (uuid "f3157249-70a5-4711-b43e-ef9810265539") + ) + (segment + (start 68.9813 120.8485) + (end 69.6385 120.1913) + (width 0.2) + (layer "B.Cu") + (net 149) + (uuid "0c20410f-1e0c-4488-b676-35b4bfb03aaf") + ) + (segment + (start 69.6385 120.1913) + (end 69.6385 119.9265) + (width 0.2) + (layer "B.Cu") + (net 149) + (uuid "4a09d1ec-58a2-4b74-97c7-ed99f35ff6e9") + ) + (segment + (start 337.7679 109.7402) + (end 344.519 102.9891) + (width 0.2) + (layer "B.Cu") + (net 149) + (uuid "6eec0f06-5432-4a74-b2e3-5cd00c71b65e") + ) + (segment + (start 329.9754 109.7402) + (end 337.7679 109.7402) + (width 0.2) + (layer "B.Cu") + (net 149) + (uuid "db6fc3ce-600a-4015-81f2-eeb027203495") + ) + (segment + (start 329.9754 109.7402) + (end 329.8705 109.6353) + (width 0.2) + (layer "In1.Cu") + (net 149) + (uuid "1632e80d-0e9a-4d55-b414-d0627e1ed77b") + ) + (segment + (start 329.8705 109.6353) + (end 318.2788 109.6353) + (width 0.2) + (layer "In1.Cu") + (net 149) + (uuid "5f5453ff-b4a6-4dc8-be51-b9631a01a8ff") + ) + (segment + (start 318.2788 109.6353) + (end 308.8391 119.075) + (width 0.2) + (layer "In1.Cu") + (net 149) + (uuid "639577e9-bbc8-4465-8aca-d5b2c1816c79") + ) + (segment + (start 70.49 119.075) + (end 69.6385 119.9265) + (width 0.2) + (layer "In1.Cu") + (net 149) + (uuid "6a35f613-9e7f-4740-8ce6-cb2ec7c580e5") + ) + (segment + (start 308.8391 119.075) + (end 70.49 119.075) + (width 0.2) + (layer "In1.Cu") + (net 149) + (uuid "f209c574-cb59-4b9a-8959-6340e6ac9dc8") + ) + (segment + (start 63.5313 122.3485) + (end 63.5313 123.55505) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "28c223fd-6de6-477f-bc5e-5d93eac77e66") + ) + (segment + (start 63.5313 123.55505) + (end 64.25125 124.275) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "2ff7f058-2db5-4bd7-8cd2-5ddaf78734dc") + ) + (segment + (start 64.25125 124.275) + (end 94.407606 124.275) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "5917018f-ba49-47bd-88a4-7d94a8d1b453") + ) + (segment + (start 94.407606 124.275) + (end 94.857542 123.825064) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "954901f1-ac1a-4b35-9679-bd05ced246c2") + ) + (segment + (start 94.857542 123.825064) + (end 94.857542 120.848499) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "ac68c904-34da-44dd-a9ad-1db257bb8852") + ) + (segment + (start 94.548143 120.5391) + (end 92.7938 120.5391) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "c8c16ab3-e9ea-4484-9f44-646b7d462e3b") + ) + (segment + (start 94.857542 120.848499) + (end 94.548143 120.5391) + (width 0.2) + (layer "B.Cu") + (net 150) + (uuid "df307f6b-8186-4b65-9015-9d0dda1766e7") + ) + (segment + (start 86.52316 119.06256) + (end 110.930993 119.06256) + (width 0.2) + (layer "B.Cu") + (net 151) + (uuid "16bdf80a-77ba-4633-ae4f-c4f4bf2e30dc") + ) + (segment + (start 111.8438 119.975367) + (end 111.8438 120.5391) + (width 0.2) + (layer "B.Cu") + (net 151) + (uuid "21a9be04-8a28-45cb-a87b-c4f3eaf6eb7c") + ) + (segment + (start 110.930993 119.06256) + (end 111.8438 119.975367) + (width 0.2) + (layer "B.Cu") + (net 151) + (uuid "c3b4309d-93b3-46c4-b1cb-0444359ed2ae") + ) + (segment + (start 87.3438 122.0391) + (end 85.927847 120.623147) + (width 0.2) + (layer "B.Cu") + (net 151) + (uuid "d1449610-59fa-4a9a-88df-9feedd507466") + ) + (segment + (start 85.927847 120.623147) + (end 85.927847 119.657873) + (width 0.2) + (layer "B.Cu") + (net 151) + (uuid "e152967f-d4c6-43b6-b1c0-88814a42ab11") + ) + (segment + (start 85.927847 119.657873) + (end 86.52316 119.06256) + (width 0.2) + (layer "B.Cu") + (net 151) + (uuid "ea6090db-42b2-4936-9048-6bb344b042fa") + ) + (segment + (start 132.052862 120.5391) + (end 130.8938 120.5391) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "26a946c6-ef76-422a-8c84-d9924b2f7653") + ) + (segment + (start 132.957574 122.634438) + (end 132.957574 121.443812) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "5e21f0b8-d53c-4b81-b0e8-3fba9211034d") + ) + (segment + (start 106.3938 122.0391) + (end 106.3938 122.96755) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "63fa8993-1471-4a3a-b0e0-87dc3cecf96c") + ) + (segment + (start 106.3938 122.96755) + (end 107.846627 124.420377) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "6f89ef04-4f2f-448b-b9d2-0e1d90718ec4") + ) + (segment + (start 132.957574 121.443812) + (end 132.052862 120.5391) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "9bf611df-1348-476a-ae41-ff604de47bed") + ) + (segment + (start 131.171635 124.420377) + (end 132.957574 122.634438) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "c90fc19a-789f-4f1b-b467-3bcf03f5ed96") + ) + (segment + (start 107.846627 124.420377) + (end 131.171635 124.420377) + (width 0.2) + (layer "B.Cu") + (net 152) + (uuid "ecadb813-bde6-4d98-818d-151d00a2b534") + ) + (segment + (start 125.4438 122.0391) + (end 124.4595 121.0548) + (width 0.2) + (layer "B.Cu") + (net 153) + (uuid "740be150-da25-4803-89d6-b1725eb5e8ce") + ) + (segment + (start 125.4133 119.075) + (end 149.25125 119.075) + (width 0.2) + (layer "B.Cu") + (net 153) + (uuid "823028af-5595-4e32-a1ea-7e7de79530bc") + ) + (segment + (start 149.9439 119.76765) + (end 149.9439 120.5391) + (width 0.2) + (layer "B.Cu") + (net 153) + (uuid "88d42f7f-6a8b-414f-8e19-7b32f7b10460") + ) + (segment + (start 149.25125 119.075) + (end 149.9439 119.76765) + (width 0.2) + (layer "B.Cu") + (net 153) + (uuid "a2e8269c-2e21-4af1-8b08-5b625d75a309") + ) + (segment + (start 124.4595 121.0548) + (end 124.4595 120.0288) + (width 0.2) + (layer "B.Cu") + (net 153) + (uuid "c8e903d4-48f2-4c88-aff9-3e858c926d23") + ) + (segment + (start 124.4595 120.0288) + (end 125.4133 119.075) + (width 0.2) + (layer "B.Cu") + (net 153) + (uuid "fdb55916-7434-45e9-a9ed-640c27e0e77d") + ) + (segment + (start 144.4939 123.144634) + (end 145.574266 124.225) + (width 0.2) + (layer "B.Cu") + (net 154) + (uuid "3f200f5f-a8a8-43ed-af27-bd0e949d1d0b") + ) + (segment + (start 170.10125 121.64645) + (end 168.9939 120.5391) + (width 0.2) + (layer "B.Cu") + (net 154) + (uuid "73c7b0d4-8d7c-4968-9965-8a23b1830962") + ) + (segment + (start 144.4939 122.0391) + (end 144.4939 123.144634) + (width 0.2) + (layer "B.Cu") + (net 154) + (uuid "a45da6b7-2589-4048-9737-08743273dd5b") + ) + (segment + (start 170.10125 123.448727) + (end 170.10125 121.64645) + (width 0.2) + (layer "B.Cu") + (net 154) + (uuid "bf3e1dd2-7fa9-4fb0-bf6d-4be65309bf7f") + ) + (segment + (start 145.574266 124.225) + (end 169.324977 124.225) + (width 0.2) + (layer "B.Cu") + (net 154) + (uuid "f506a604-6e5c-42da-b89c-bf02d7fd1462") + ) + (segment + (start 169.324977 124.225) + (end 170.10125 123.448727) + (width 0.2) + (layer "B.Cu") + (net 154) + (uuid "f80ccb6b-4d3b-487a-ba0a-df0de6d00f78") + ) + (segment + (start 188.0439 119.56765) + (end 188.0439 120.5391) + (width 0.2) + (layer "B.Cu") + (net 155) + (uuid "1141635e-83d2-40c5-9eb2-35ab748fbe34") + ) + (segment + (start 163.5067 119.075) + (end 187.55125 119.075) + (width 0.2) + (layer "B.Cu") + (net 155) + (uuid "32229601-5f89-4810-aee2-11fd10e07923") + ) + (segment + (start 163.5439 122.0391) + (end 162.5227 121.0179) + (width 0.2) + (layer "B.Cu") + (net 155) + (uuid "711f6809-3670-4c57-8ee2-3964ec6f8ba8") + ) + (segment + (start 162.5227 120.059) + (end 163.5067 119.075) + (width 0.2) + (layer "B.Cu") + (net 155) + (uuid "7c499f39-419e-4776-aba4-ed610e5d8196") + ) + (segment + (start 187.55125 119.075) + (end 188.0439 119.56765) + (width 0.2) + (layer "B.Cu") + (net 155) + (uuid "b353e007-faa6-4a33-8428-a00aead45221") + ) + (segment + (start 162.5227 121.0179) + (end 162.5227 120.059) + (width 0.2) + (layer "B.Cu") + (net 155) + (uuid "c0126212-fe6d-4399-afc2-c51db8803538") + ) + (segment + (start 189.635625 124.287875) + (end 183.614125 124.287875) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "3ceeacd5-6000-4aac-a4f7-1c17f01cf9a8") + ) + (segment + (start 207.0939 119.51765) + (end 206.65125 119.075) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "4927df05-d591-4ab1-a0cd-aff1aba2b531") + ) + (segment + (start 194.8485 119.075) + (end 189.635625 124.287875) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "6a10ada0-1c6e-4df3-99c5-89116d3c2393") + ) + (segment + (start 207.0939 120.5391) + (end 207.0939 119.51765) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "6a71fe0e-89ad-4b17-aa07-88ebc17c659d") + ) + (segment + (start 182.5939 123.26765) + (end 182.5939 122.0391) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "9c76d359-af40-4337-8077-75dd197ad8f7") + ) + (segment + (start 183.614125 124.287875) + (end 182.5939 123.26765) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "ede6acfa-446d-4d49-8773-03fca834b586") + ) + (segment + (start 206.65125 119.075) + (end 194.8485 119.075) + (width 0.2) + (layer "B.Cu") + (net 156) + (uuid "fec6899c-4eb0-46a1-9959-e81d6fbc70b7") + ) + (segment + (start 202.95125 124.225) + (end 201.6439 122.91765) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "029e81da-6f8c-4fd6-b85e-2e1571e82162") + ) + (segment + (start 227.36535 120.5391) + (end 227.80125 120.975) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "5d0118c4-19aa-40d7-8dc4-f77270d6c416") + ) + (segment + (start 227.80125 120.975) + (end 227.80125 122.925) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "60d9ec48-cd00-46d0-935b-026ff0f56b6b") + ) + (segment + (start 226.1439 120.5391) + (end 227.36535 120.5391) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "73563ad2-26b5-43c0-8728-2e22fd3e99a2") + ) + (segment + (start 226.50125 124.225) + (end 202.95125 124.225) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "a73bc334-6b26-4ece-8a8a-67334bda3e98") + ) + (segment + (start 201.6439 122.91765) + (end 201.6439 122.0391) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "b4621715-3783-434e-b4ab-182218fd62d7") + ) + (segment + (start 227.80125 122.925) + (end 226.50125 124.225) + (width 0.2) + (layer "B.Cu") + (net 157) + (uuid "d5e5ee18-553c-4be3-b954-e8d6741e6e45") + ) + (segment + (start 222.10125 123.97925) + (end 220.709 122.587) + (width 0.2) + (layer "F.Cu") + (net 158) + (uuid "8f0d5e33-0727-492a-a5d6-48491480488f") + ) + (segment + (start 222.10125 124.775) + (end 222.10125 123.97925) + (width 0.2) + (layer "F.Cu") + (net 158) + (uuid "c378279e-593f-4b26-8fe5-8863ce522452") + ) + (segment + (start 220.709 122.587) + (end 218.921 122.587) + (width 0.2) + (layer "F.Cu") + (net 158) + (uuid "dde53ca1-242a-44d0-ac44-a75d3b387228") + ) + (via + (at 218.921 122.587) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 158) + (uuid "35f62668-c978-40c3-af95-f8235dae7a39") + ) + (via + (at 222.10125 124.775) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 158) + (uuid "83ac8ee2-1790-416c-bc63-b05c8dcf57e9") + ) + (via + (at 246.3769 120.7272) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 158) + (uuid "95ed1b6c-d585-45e7-a84c-38009f676c68") + ) + (segment + (start 246.3769 120.7272) + (end 245.382 120.7272) + (width 0.2) + (layer "B.Cu") + (net 158) + (uuid "6c807331-e3d8-46e6-b7aa-4ab40c13d0f0") + ) + (segment + (start 219.4689 122.0391) + (end 218.921 122.587) + (width 0.2) + (layer "B.Cu") + (net 158) + (uuid "988c41e1-36ac-4823-83da-2726801cb670") + ) + (segment + (start 245.382 120.7272) + (end 245.1939 120.5391) + (width 0.2) + (layer "B.Cu") + (net 158) + (uuid "a1dbbf14-a9d2-409f-96fc-9e39c6656806") + ) + (segment + (start 220.6939 122.0391) + (end 219.4689 122.0391) + (width 0.2) + (layer "B.Cu") + (net 158) + (uuid "d6236144-3541-4cd5-b4e4-3a3858425bce") + ) + (segment + (start 244.45125 124.775) + (end 246.3769 122.84935) + (width 0.2) + (layer "In1.Cu") + (net 158) + (uuid "4d579d95-d450-4d9f-b002-55d9c4a3c98d") + ) + (segment + (start 246.3769 122.84935) + (end 246.3769 120.7272) + (width 0.2) + (layer "In1.Cu") + (net 158) + (uuid "646c7a27-03f0-4d90-bfcc-7776de3e7686") + ) + (segment + (start 222.10125 124.775) + (end 244.45125 124.775) + (width 0.2) + (layer "In1.Cu") + (net 158) + (uuid "e4615334-0bc9-4e14-9562-94a405bf2995") + ) + (segment + (start 239.7439 122.0867) + (end 239.744 122.0867) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "2d09e512-b1ed-4341-8801-ffa6ae513712") + ) + (segment + (start 240.733377 124.420377) + (end 239.744 123.431) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "568dd336-9ff2-4c28-9737-f5257f5a7310") + ) + (segment + (start 239.7439 122.0391) + (end 239.7439 122.0867) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "5c926ac3-7efc-43c8-b03b-f13dd3037d76") + ) + (segment + (start 266.307686 123.229751) + (end 265.11706 124.420377) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "6b8c3019-85a6-4a09-b616-c7490e2f4f53") + ) + (segment + (start 239.744 123.431) + (end 239.744 122.0867) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "91e8979b-d5ed-45ee-a661-d0960ff43ac9") + ) + (segment + (start 265.402974 120.5391) + (end 266.307686 121.443812) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "954b629e-127f-4e52-867a-dc4973f98d7b") + ) + (segment + (start 266.307686 121.443812) + (end 266.307686 123.229751) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "ab6dce45-7079-4857-b5e2-f222d14f4ed9") + ) + (segment + (start 264.2441 120.5391) + (end 265.402974 120.5391) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "d27a29ea-622b-43d1-9acc-2e27004a263e") + ) + (segment + (start 264.244 120.539) + (end 264.2441 120.5391) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "d719ce01-a59b-4d2d-aa95-1e155b279d73") + ) + (segment + (start 239.744 122.0867) + (end 239.744 122.039) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "df0f3f1e-2353-47bb-8b6d-8392b5f4b61b") + ) + (segment + (start 265.11706 124.420377) + (end 240.733377 124.420377) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "e3182c97-43bd-4451-94cb-5148edb7168d") + ) + (segment + (start 264.244 120.5391) + (end 264.2441 120.5391) + (width 0.2) + (layer "B.Cu") + (net 159) + (uuid "f9ec2999-09fd-4d9d-ad1a-0a6c6c259ad3") + ) + (segment + (start 283.045 119.595) + (end 284.963 121.513) + (width 0.2) + (layer "F.Cu") + (net 160) + (uuid "a86b219b-54fd-488d-b77c-e9d729f4cfcd") + ) + (segment + (start 284.963 121.513) + (end 284.963 124.183) + (width 0.2) + (layer "F.Cu") + (net 160) + (uuid "ef664b8e-d93c-4c8c-8da1-3072b64f288f") + ) + (via + (at 284.963 124.183) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 160) + (uuid "8f5b7b30-10dc-41cc-bc72-ca4c8013e469") + ) + (via + (at 283.045 119.595) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 160) + (uuid "c47aad97-6536-4598-881f-95f12509fcfe") + ) + (segment + (start 257.801 121.0461) + (end 257.801 120.0126) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "238ac9a5-d19a-4da7-9e0e-b7fadcd7373d") + ) + (segment + (start 282.525 119.075) + (end 283.045 119.595) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "5b170cd9-cf2c-4564-bcca-0890f2fa77e0") + ) + (segment + (start 257.801 120.0126) + (end 258.7386 119.075) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "6c7324b9-932b-4106-a3d2-1be3fc4fd21f") + ) + (segment + (start 258.794 122.0391) + (end 257.801 121.0461) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "771154af-947f-4f84-ad09-e9bb5aaaa53f") + ) + (segment + (start 283.294 119.844) + (end 283.294 120.5391) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "ac22ef26-ea6b-490f-abaf-47bb0b94d964") + ) + (segment + (start 258.7386 119.075) + (end 282.525 119.075) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "cd008001-ca31-4e63-8fe7-12a25107726b") + ) + (segment + (start 283.045 119.595) + (end 283.294 119.844) + (width 0.2) + (layer "B.Cu") + (net 160) + (uuid "eee18697-eed7-4e7e-ba5e-968e6753ca60") + ) + (segment + (start 302.344 120.5391) + (end 302.344 120.01775) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "04a2b66c-6c0f-4181-9eba-8731351fa363") + ) + (segment + (start 278.65125 123.925) + (end 277.844 123.11775) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "34ffb10c-44f3-42da-be1c-5fecc6a9fe38") + ) + (segment + (start 283.1874 123.925) + (end 278.65125 123.925) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "7f99f0af-4f67-46fa-aef4-37b069294bb9") + ) + (segment + (start 302.344 120.01775) + (end 301.40125 119.075) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "87d66e05-9e79-41de-a94b-4017a5a20cc5") + ) + (segment + (start 301.40125 119.075) + (end 288.0374 119.075) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "9d7eefbf-91fc-4f9d-a625-05c212b97b22") + ) + (segment + (start 288.0374 119.075) + (end 283.1874 123.925) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "a9d95131-6710-409e-8d9c-8e024c9c8399") + ) + (segment + (start 277.844 123.11775) + (end 277.844 122.0391) + (width 0.2) + (layer "B.Cu") + (net 161) + (uuid "acb2367c-6bfe-4fe3-976e-0d903510c9ec") + ) + (segment + (start 326.262 113.857) + (end 326.262 119.348) + (width 0.2) + (layer "F.Cu") + (net 162) + (uuid "d60a0689-bc8e-4d70-bc8f-1f53e67f561a") + ) + (segment + (start 326.262 119.348) + (end 326.015 119.595) + (width 0.2) + (layer "F.Cu") + (net 162) + (uuid "dc1f53b4-bc8e-4ef3-829d-9e864005309e") + ) + (via + (at 326.015 119.595) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 162) + (uuid "27cf32e8-1d6d-4702-a902-0c325cfc8bf0") + ) + (via + (at 295.6299 122.0391) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 162) + (uuid "a24ac092-5925-4d4f-8618-aa04b676a4e0") + ) + (via + (at 326.262 113.857) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 162) + (uuid "e36ebb91-cefe-43cb-98b3-34397ab9116b") + ) + (segment + (start 296.894 122.0391) + (end 295.6299 122.0391) + (width 0.2) + (layer "B.Cu") + (net 162) + (uuid "20e21cce-b63b-4ca1-96b7-f5d071cec0f1") + ) + (segment + (start 326.015 119.595) + (end 326.1565 119.7365) + (width 0.2) + (layer "B.Cu") + (net 162) + (uuid "920f1d62-2d68-4bca-8f7c-937e695981e5") + ) + (segment + (start 326.1565 119.7365) + (end 326.1565 120.5391) + (width 0.2) + (layer "B.Cu") + (net 162) + (uuid "ac562538-24dd-4494-bafb-eaac72cbfed3") + ) + (segment + (start 325.595 119.175) + (end 309.3712 119.175) + (width 0.2) + (layer "In1.Cu") + (net 162) + (uuid "24332747-6dc2-4700-adf2-c61c4f7e1a01") + ) + (segment + (start 297.3658 123.775) + (end 295.6299 122.0391) + (width 0.2) + (layer "In1.Cu") + (net 162) + (uuid "52b971f1-7e96-49cf-8303-fa7f3c10e799") + ) + (segment + (start 304.7712 123.775) + (end 297.3658 123.775) + (width 0.2) + (layer "In1.Cu") + (net 162) + (uuid "63ca2d48-3de4-48e6-85e5-a5ed07bbe341") + ) + (segment + (start 309.3712 119.175) + (end 304.7712 123.775) + (width 0.2) + (layer "In1.Cu") + (net 162) + (uuid "6b1d9815-f2fc-4d6a-b08a-853dcaea5551") + ) + (segment + (start 326.015 119.595) + (end 325.595 119.175) + (width 0.2) + (layer "In1.Cu") + (net 162) + (uuid "a2ae36eb-e124-46e5-9ff6-c6848891a61b") + ) + (segment + (start 328.9921 124.275) + (end 321.90125 124.275) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "1fc7abf0-ce4f-47d2-9075-b699e3e08bbc") + ) + (segment + (start 349.969 119.684276) + (end 349.459724 119.175) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "394edb47-5998-420e-b6bb-4702da175d5f") + ) + (segment + (start 349.969 120.5391) + (end 349.969 119.684276) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "480076c3-92e9-4432-9e05-ff2fe4a89e9f") + ) + (segment + (start 334.0921 119.175) + (end 328.9921 124.275) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "49247966-2a43-42e2-8071-ea6fd0aa2e17") + ) + (segment + (start 321.90125 124.275) + (end 320.7065 123.08025) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "57acc2ac-e2e8-4c24-9513-2ec6b1c9bba9") + ) + (segment + (start 320.7065 123.08025) + (end 320.7065 122.0391) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "5e7aea9f-ac8a-4025-aba6-6aa5daf10454") + ) + (segment + (start 349.459724 119.175) + (end 334.0921 119.175) + (width 0.2) + (layer "B.Cu") + (net 163) + (uuid "c1cc02e1-0785-4c20-98c2-dd909219c142") + ) + (via + (at 342.966 123.5921) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 164) + (uuid "33cbd775-4361-411b-a922-bf8aa3a4879a") + ) + (via + (at 71.4274 134.9448) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 164) + (uuid "77a04d87-6c82-49eb-b1fa-b2d09c697089") + ) + (segment + (start 71.3625 139.5891) + (end 71.3625 135.0097) + (width 0.2) + (layer "B.Cu") + (net 164) + (uuid "1d8b941d-45b9-40fb-8359-118fd023bcee") + ) + (segment + (start 71.3625 135.0097) + (end 71.4274 134.9448) + (width 0.2) + (layer "B.Cu") + (net 164) + (uuid "37c4d6af-e46f-43e4-b1f7-450d5514168f") + ) + (segment + (start 344.519 122.0391) + (end 342.966 123.5921) + (width 0.2) + (layer "B.Cu") + (net 164) + (uuid "61089b65-9843-4db6-b46b-a166401f754a") + ) + (segment + (start 341.0505 125.5076) + (end 80.8646 125.5076) + (width 0.2) + (layer "In1.Cu") + (net 164) + (uuid "82e1e1ab-0912-410f-9ea0-491c8d6361b7") + ) + (segment + (start 80.8646 125.5076) + (end 71.4274 134.9448) + (width 0.2) + (layer "In1.Cu") + (net 164) + (uuid "96edf57d-76cc-47ea-9aae-af10ad54f63e") + ) + (segment + (start 342.966 123.5921) + (end 341.0505 125.5076) + (width 0.2) + (layer "In1.Cu") + (net 164) + (uuid "bbf503e8-1467-4633-8b0d-b4397da25879") + ) + (via + (at 99.45125 139.575) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 165) + (uuid "36c7649f-7925-4845-9a97-17b3006075ec") + ) + (via + (at 65.9125 142.0023) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 165) + (uuid "55971792-6c09-4f5a-a679-e8217ca7497b") + ) + (segment + (start 97.5704 139.575) + (end 99.45125 139.575) + (width 0.2) + (layer "B.Cu") + (net 165) + (uuid "20a792ac-aa15-42bd-9240-af5dc1f9d878") + ) + (segment + (start 97.5563 139.5891) + (end 97.5704 139.575) + (width 0.2) + (layer "B.Cu") + (net 165) + (uuid "648e0ad4-b4b4-49a6-ac21-184c85401d0e") + ) + (segment + (start 65.9125 141.0891) + (end 65.9125 142.0023) + (width 0.2) + (layer "B.Cu") + (net 165) + (uuid "d0235e8c-1cb4-4f86-a3e4-868fb3c35990") + ) + (segment + (start 66.8852 142.975) + (end 65.9125 142.0023) + (width 0.2) + (layer "In1.Cu") + (net 165) + (uuid "601dc548-95e2-4860-8d93-f892571a4e51") + ) + (segment + (start 98.40125 142.975) + (end 66.8852 142.975) + (width 0.2) + (layer "In1.Cu") + (net 165) + (uuid "9084b1c0-d4eb-48f7-af83-b2f84031049e") + ) + (segment + (start 99.55125 139.675) + (end 99.55125 141.825) + (width 0.2) + (layer "In1.Cu") + (net 165) + (uuid "9a1a5df5-91b3-41d6-bca2-179811ad9869") + ) + (segment + (start 99.55125 141.825) + (end 98.40125 142.975) + (width 0.2) + (layer "In1.Cu") + (net 165) + (uuid "ae5c5331-d4e4-417f-af67-062a8e6dac1b") + ) + (segment + (start 99.45125 139.575) + (end 99.55125 139.675) + (width 0.2) + (layer "In1.Cu") + (net 165) + (uuid "b55d131d-a7db-42ed-be8e-a56da8158ec6") + ) + (segment + (start 93.10248 142.953859) + (end 105.613641 142.953859) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "4564a533-1392-46d4-9912-9e24d764aa5c") + ) + (segment + (start 116.3548 138.87855) + (end 116.3548 139.7438) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "576ed000-20a7-4dbf-9be0-248b4eb2927a") + ) + (segment + (start 92.1063 141.957679) + (end 93.10248 142.953859) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "68527349-a86a-4fb5-ac0d-866826586a92") + ) + (segment + (start 115.70125 138.225) + (end 116.3548 138.87855) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "6edd0831-6eb2-4b23-b9ee-d82f360c8613") + ) + (segment + (start 110.3425 138.225) + (end 115.70125 138.225) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "8aa5f2b5-7bcf-4cb4-b52c-d85ee16ca69c") + ) + (segment + (start 105.613641 142.953859) + (end 110.3425 138.225) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "ac51a3e3-61f0-43c3-a97a-9f991418d29e") + ) + (segment + (start 92.1063 141.0891) + (end 92.1063 141.957679) + (width 0.2) + (layer "B.Cu") + (net 166) + (uuid "e30c135d-ecdd-45be-a1e5-11f769e43294") + ) + (segment + (start 137.90125 140.175) + (end 137.90125 141.975) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "173685ab-daaa-41bd-87d3-03d42a7c0b73") + ) + (segment + (start 135.6563 139.5891) + (end 137.31535 139.5891) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "43072b44-8cbe-4870-955c-25c92f9b87f8") + ) + (segment + (start 136.656932 143.219318) + (end 112.137598 143.219318) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "44ebbe15-9f16-4ec2-8a94-f8c5035bea8f") + ) + (segment + (start 137.90125 141.975) + (end 136.656932 143.219318) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "865a5c7b-8202-4c38-95aa-18d3545b1123") + ) + (segment + (start 112.137598 143.219318) + (end 110.9048 141.98652) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "aa70f4f1-e7d8-44b2-8e28-6d1d94220f34") + ) + (segment + (start 137.31535 139.5891) + (end 137.90125 140.175) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "d08a9d4f-1267-46ee-9a5c-972d60f78058") + ) + (segment + (start 110.9048 141.98652) + (end 110.9048 141.2438) + (width 0.2) + (layer "B.Cu") + (net 167) + (uuid "deaf3457-648e-42d9-9369-ba0f9cbe808e") + ) + (segment + (start 130.136 141.159) + (end 128.917 141.159) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "22606e7d-3ee2-423b-b065-600b9ef5aa1f") + ) + (segment + (start 154.15125 138.175) + (end 154.7064 138.73015) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "2313040d-d20d-447c-a5b8-e16001c397aa") + ) + (segment + (start 128.917 141.14075) + (end 127.80125 140.025) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "33bfd1ec-6d2b-49d3-95f5-64cc3c5b847b") + ) + (segment + (start 130.171 141.124) + (end 130.1714 141.124) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "65240941-3de1-4c54-8a78-ec1f8c7e8bf9") + ) + (segment + (start 130.171 141.124) + (end 130.206 141.089) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "7b8ee9f8-ad27-4255-9120-bf5d11ddde4f") + ) + (segment + (start 128.917 141.159) + (end 128.917 141.14075) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "820eb801-09a0-4be3-ae31-26b65f64e64f") + ) + (segment + (start 154.7064 138.73015) + (end 154.7064 139.8985) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "92baa0bb-a146-4126-80f9-18e0930757db") + ) + (segment + (start 127.80125 140.025) + (end 127.80125 138.475) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "947c41a2-6671-48a2-ae17-25bf1c60bb52") + ) + (segment + (start 128.10125 138.175) + (end 154.15125 138.175) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "b517db50-7c66-4698-8a3e-49b75392a1c4") + ) + (segment + (start 127.80125 138.475) + (end 128.10125 138.175) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "ca21d39d-4152-4fb9-8a1d-853fefec638c") + ) + (segment + (start 130.171 141.124) + (end 130.136 141.159) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "d0758a64-4924-4878-901b-f27bbe5170d8") + ) + (segment + (start 130.1714 141.124) + (end 130.2063 141.0891) + (width 0.2) + (layer "B.Cu") + (net 168) + (uuid "d48d9881-874a-4bf8-a77b-016184350f62") + ) + (segment + (start 173.30125 138.275) + (end 173.7564 138.73015) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "1295858c-2dd2-488b-9112-a040d9375e74") + ) + (segment + (start 149.2564 142.68015) + (end 149.85125 143.275) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "1632a43e-16a8-402a-8a5a-b1e975be94d2") + ) + (segment + (start 149.2564 141.3985) + (end 149.2564 142.68015) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "173282f9-0988-4590-a065-d8834628ad90") + ) + (segment + (start 167.20125 138.275) + (end 173.30125 138.275) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "763920d2-ac34-4b9c-8b65-bbb7b0d1df22") + ) + (segment + (start 173.7564 138.73015) + (end 173.7564 139.5891) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "84f701c1-3d9b-465e-99db-6c08c004247d") + ) + (segment + (start 162.20125 143.275) + (end 167.20125 138.275) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "a81957df-9728-4b8d-99a9-65c8c1686853") + ) + (segment + (start 149.85125 143.275) + (end 162.20125 143.275) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "abeb4c1b-4699-45e9-b673-396d2157e7f2") + ) + (segment + (start 173.7688 139.5767) + (end 173.7564 139.5891) + (width 0.2) + (layer "B.Cu") + (net 169) + (uuid "de5c8f46-626c-4001-a16b-dc6e65593b6d") + ) + (segment + (start 174.70125 143.325) + (end 169.60125 143.325) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "54208339-01db-46c8-9755-b76d338f4472") + ) + (segment + (start 193.1501 139.7438) + (end 193.1501 138.77385) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "c8341f52-24c6-4449-bfac-b8d6a3369529") + ) + (segment + (start 169.60125 143.325) + (end 168.3064 142.03015) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "d5bb24d7-55c9-48eb-8c09-35f6c3d42964") + ) + (segment + (start 168.3064 142.03015) + (end 168.3064 141.0891) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "e232937a-aaa7-4ceb-9773-750875875bde") + ) + (segment + (start 192.65125 138.275) + (end 179.75125 138.275) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "e848e204-2c5d-413e-8e4e-e1603358feea") + ) + (segment + (start 179.75125 138.275) + (end 174.70125 143.325) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "e9fca6e4-db41-4341-ac1d-3c166c16445b") + ) + (segment + (start 193.1501 138.77385) + (end 192.65125 138.275) + (width 0.2) + (layer "B.Cu") + (net 170) + (uuid "f80c9b99-b375-4102-9e12-bddb4cd71b1a") + ) + (segment + (start 188.651102 143.623749) + (end 199.518451 143.623749) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "140163e1-ffa7-4b9c-91e4-e268696a3436") + ) + (segment + (start 187.7001 142.672747) + (end 188.651102 143.623749) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "3731a037-fe58-47d3-8f40-b3a7011ebf15") + ) + (segment + (start 204.8672 138.275) + (end 211.30125 138.275) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "3ef66270-5b9a-4774-8795-e791978fcb99") + ) + (segment + (start 211.8564 138.83015) + (end 211.8564 139.7438) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "5b255b99-ef13-407c-ab3e-b997370a133a") + ) + (segment + (start 199.518451 143.623749) + (end 204.8672 138.275) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "6e381b45-ecef-454d-a80d-b57fe2bfacc3") + ) + (segment + (start 211.30125 138.275) + (end 211.8564 138.83015) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "7eae0495-236f-4b99-9a46-2c5c2859f0ef") + ) + (segment + (start 187.7001 141.2438) + (end 187.7001 142.672747) + (width 0.2) + (layer "B.Cu") + (net 171) + (uuid "dcce057a-bcec-480a-8fde-6849cf77f8c3") + ) + (segment + (start 207.68275 143.3565) + (end 213.5762 143.3565) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "0254ce87-2703-4bad-a08b-bd587ebf0c7e") + ) + (segment + (start 219.2698 131.9622) + (end 219.9925 131.2395) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "1b06297e-0ab0-4b86-aa2b-3583b2488613") + ) + (segment + (start 206.4064 141.2438) + (end 206.4064 142.08015) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "504e6bf9-5ff3-409f-907b-d9df12dbcf2a") + ) + (segment + (start 227.3159 131.2395) + (end 230.9064 134.83) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "54cf7e03-b002-410c-9949-3d56df415750") + ) + (segment + (start 219.2698 137.6629) + (end 219.2698 131.9622) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "6cbe995f-442d-45cc-9d55-407703c8c88e") + ) + (segment + (start 230.9064 134.83) + (end 230.9064 139.5891) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "ad552d50-129b-4df4-9393-aa22f580e08a") + ) + (segment + (start 213.5762 143.3565) + (end 219.2698 137.6629) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "e6718d6e-0e50-4202-bf5d-67ba4cfe055d") + ) + (segment + (start 219.9925 131.2395) + (end 227.3159 131.2395) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "eddc37aa-e894-49fa-9942-b10aac500e8e") + ) + (segment + (start 206.4064 142.08015) + (end 207.68275 143.3565) + (width 0.2) + (layer "B.Cu") + (net 172) + (uuid "fd779cc0-b250-47c6-8efa-18dfd54d2de7") + ) + (segment + (start 249.7049 138.77865) + (end 249.10125 138.175) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "728fb330-a782-43e8-8025-696ad836181b") + ) + (segment + (start 226.40125 142.975) + (end 225.4564 142.03015) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "9dd30877-978e-434e-8da6-c0e78d3049ed") + ) + (segment + (start 225.4564 142.03015) + (end 225.4564 141.0891) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "a1bf2130-981a-4d71-a04c-43ae9bc0b2ab") + ) + (segment + (start 249.10125 138.175) + (end 236.4925 138.175) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "a3968945-1c6c-465b-a237-5c5540f4357e") + ) + (segment + (start 236.4925 138.175) + (end 231.6925 142.975) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "c8f3faf0-bf28-4af5-b9b8-61801bb7bde0") + ) + (segment + (start 231.6925 142.975) + (end 226.40125 142.975) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "e76a200e-16b5-49e6-a1ba-c7b61ab0611b") + ) + (segment + (start 249.7049 139.7438) + (end 249.7049 138.77865) + (width 0.2) + (layer "B.Cu") + (net 173) + (uuid "e968e0d5-d3af-4e87-8128-5bf2ad58e8d2") + ) + (segment + (start 270.72027 143.225) + (end 245.25125 143.225) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "1740cbca-c5fa-4195-bd9a-e16c0802a721") + ) + (segment + (start 244.2549 142.22865) + (end 244.2549 141.2438) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "61fb7e56-f752-4203-8294-a8bcf1057e70") + ) + (segment + (start 271.07019 139.898515) + (end 271.07019 142.87508) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "7364a858-d49f-4fbd-9969-7d28d3bee22b") + ) + (segment + (start 270.760775 139.5891) + (end 271.07019 139.898515) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "967bf985-039e-4e4d-b8fe-2f2f6f7136a4") + ) + (segment + (start 245.25125 143.225) + (end 244.2549 142.22865) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "9c563da1-d8b3-4c2d-b510-3a7ba23f02bf") + ) + (segment + (start 269.0065 139.5891) + (end 270.760775 139.5891) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "e8e5526e-dacc-4831-a31e-ba2c06f5f64c") + ) + (segment + (start 271.07019 142.87508) + (end 270.72027 143.225) + (width 0.2) + (layer "B.Cu") + (net 174) + (uuid "f902a733-1281-4683-a8a2-b8911de9498f") + ) + (segment + (start 263.5092 138.125) + (end 287.40125 138.125) + (width 0.2) + (layer "B.Cu") + (net 175) + (uuid "81f0497e-4e32-41dc-8f9f-1f86123a2986") + ) + (segment + (start 262.5634 139.0708) + (end 263.5092 138.125) + (width 0.2) + (layer "B.Cu") + (net 175) + (uuid "8b9899a1-56c9-478e-b873-a5163cfd762b") + ) + (segment + (start 263.5565 141.0891) + (end 262.5634 140.096) + (width 0.2) + (layer "B.Cu") + (net 175) + (uuid "abeb4cf0-94d7-4932-a5f2-fd7cbd8a72e0") + ) + (segment + (start 262.5634 140.096) + (end 262.5634 139.0708) + (width 0.2) + (layer "B.Cu") + (net 175) + (uuid "b254f012-4b85-4d3c-b5e5-48c4352a5172") + ) + (segment + (start 287.40125 138.125) + (end 288.0565 138.78025) + (width 0.2) + (layer "B.Cu") + (net 175) + (uuid "d2bf0f46-e8fb-4253-9b4b-c9cd7130e876") + ) + (segment + (start 288.0565 138.78025) + (end 288.0565 139.5891) + (width 0.2) + (layer "B.Cu") + (net 175) + (uuid "d44cb2a7-166f-4971-8646-27ac2e519828") + ) + (via + (at 282.6065 142.0223) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 176) + (uuid "139b7fc4-e523-4217-9189-0944f82db066") + ) + (via + (at 321.70125 139.575) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 176) + (uuid "66462229-6c54-4726-be3f-2159986224eb") + ) + (segment + (start 319.0127 139.5891) + (end 319.0268 139.575) + (width 0.2) + (layer "B.Cu") + (net 176) + (uuid "7d796790-2102-478e-ae4e-25c833ec9b46") + ) + (segment + (start 282.6065 141.0891) + (end 282.6065 142.0223) + (width 0.2) + (layer "B.Cu") + (net 176) + (uuid "a2639e1a-7f44-4f1c-8524-9f256ce6028f") + ) + (segment + (start 319.0268 139.575) + (end 321.70125 139.575) + (width 0.2) + (layer "B.Cu") + (net 176) + (uuid "c26587b8-51ef-461c-917b-e7e7d807c057") + ) + (segment + (start 321.70125 141.725) + (end 320.475978 142.950272) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "1f960fc6-9145-431b-a61a-e8d335f94203") + ) + (segment + (start 283.7592 143.175) + (end 282.6065 142.0223) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "4ea136e7-cd9d-4830-b2de-0aa9f20dd122") + ) + (segment + (start 290.10125 143.175) + (end 283.7592 143.175) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "8059bf12-7cbe-4639-ad28-42a36bb53281") + ) + (segment + (start 320.475978 142.950272) + (end 310.875372 142.950272) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "8840ac98-498a-4c33-a4b7-66d13cbff89e") + ) + (segment + (start 291.85855 141.4177) + (end 290.10125 143.175) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "9b008059-170b-45a2-acde-bb9fc2d4b11b") + ) + (segment + (start 321.70125 139.575) + (end 321.70125 141.725) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "ab15aad3-93d2-4831-bb56-1f68ae4e0ae6") + ) + (segment + (start 310.875372 142.950272) + (end 309.3428 141.4177) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "b9961c41-dc64-4c22-a821-20de88f8df59") + ) + (segment + (start 309.3428 141.4177) + (end 291.85855 141.4177) + (width 0.2) + (layer "In1.Cu") + (net 176) + (uuid "d5d7eb36-c0e1-467a-8dd7-05a8ecc55306") + ) + (segment + (start 349.969 138.69275) + (end 349.40125 138.125) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "1d590f1d-af82-4404-b48d-64bed9a664f4") + ) + (segment + (start 322.631528 142.950272) + (end 314.326522 142.950272) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "5c469661-5bd5-4322-9e1f-b89d2ed19e7c") + ) + (segment + (start 313.5627 142.18645) + (end 313.5627 141.0891) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "74074b70-42e2-4627-887d-69cf42f1619a") + ) + (segment + (start 349.40125 138.125) + (end 327.4568 138.125) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "be7c1911-66c0-4e86-b289-8bbe384e370b") + ) + (segment + (start 327.4568 138.125) + (end 322.631528 142.950272) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "cab09da5-24ef-4694-87a7-880bd349af06") + ) + (segment + (start 314.326522 142.950272) + (end 313.5627 142.18645) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "d3f7701f-49ad-41fb-b5df-0edf10923e4e") + ) + (segment + (start 349.969 139.5891) + (end 349.969 138.69275) + (width 0.2) + (layer "B.Cu") + (net 177) + (uuid "f74e5aef-d54c-492d-aaff-8077ea3ef7c8") + ) + (via + (at 78.7598 156.8587) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 178) + (uuid "17b91b6f-9ace-4692-bfe4-2ceab19e4c35") + ) + (via + (at 344.519 142.0042) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 178) + (uuid "9f7dc9d7-517a-4053-b6eb-1f07bf13e3eb") + ) + (segment + (start 78.4039 156.8587) + (end 76.4688 158.7938) + (width 0.2) + (layer "B.Cu") + (net 178) + (uuid "0c351d8f-24c7-4867-b08f-982779832b6f") + ) + (segment + (start 78.7598 156.8587) + (end 78.4039 156.8587) + (width 0.2) + (layer "B.Cu") + (net 178) + (uuid "95fc8709-dc71-4de9-a68f-9c096ee2316f") + ) + (segment + (start 344.519 141.0891) + (end 344.519 142.0042) + (width 0.2) + (layer "B.Cu") + (net 178) + (uuid "ccfb30b2-811b-4b73-ad70-3fb169288e62") + ) + (segment + (start 339.1449 147.3783) + (end 88.686 147.3783) + (width 0.2) + (layer "In1.Cu") + (net 178) + (uuid "09c01e87-4ee5-4039-b41b-428e495d65e2") + ) + (segment + (start 344.519 142.0042) + (end 339.1449 147.3783) + (width 0.2) + (layer "In1.Cu") + (net 178) + (uuid "652e5941-9e29-4ef2-8967-ec9b1df7ed01") + ) + (segment + (start 88.686 147.3783) + (end 79.2056 156.8587) + (width 0.2) + (layer "In1.Cu") + (net 178) + (uuid "910d7c64-36c1-422e-a4c3-ffadc3e159a0") + ) + (segment + (start 79.2056 156.8587) + (end 78.7598 156.8587) + (width 0.2) + (layer "In1.Cu") + (net 178) + (uuid "cfa2f86b-d0a7-4dae-ab66-efca8ab711d7") + ) + (via + (at 73.75125 162.151301) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 179) + (uuid "59076167-083f-447e-9633-a35a4087fab0") + ) + (via + (at 108.351 159.287) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 179) + (uuid "6e179584-e1cf-41f5-b681-68f6bc2359ae") + ) + (segment + (start 71.0188 161.24255) + (end 71.0188 160.2938) + (width 0.2) + (layer "B.Cu") + (net 179) + (uuid "0770004b-baf4-43e7-8f1c-c0d340f00d2b") + ) + (segment + (start 73.75125 162.151301) + (end 71.927551 162.151301) + (width 0.2) + (layer "B.Cu") + (net 179) + (uuid "2ba5dd8a-8728-4d7e-93ee-1006fcf8db2e") + ) + (segment + (start 108.351 159.287) + (end 107.512 159.287) + (width 0.2) + (layer "B.Cu") + (net 179) + (uuid "4023e5b9-27a9-4b7c-af6d-a9a289650d17") + ) + (segment + (start 107.512 159.287) + (end 107.1735 158.9485) + (width 0.2) + (layer "B.Cu") + (net 179) + (uuid "8b330852-2250-4381-a8e8-c85beb10c98e") + ) + (segment + (start 71.927551 162.151301) + (end 71.0188 161.24255) + (width 0.2) + (layer "B.Cu") + (net 179) + (uuid "b58138a6-fc11-46dc-81b7-04dc94780551") + ) + (segment + (start 73.75125 162.151301) + (end 74.995499 162.151301) + (width 0.2) + (layer "In1.Cu") + (net 179) + (uuid "4b053fa4-5800-47e2-b138-ec502612952a") + ) + (segment + (start 79.7718 157.375) + (end 106.439 157.375) + (width 0.2) + (layer "In1.Cu") + (net 179) + (uuid "a12debd3-003d-43a2-b865-a8d80935545b") + ) + (segment + (start 74.995499 162.151301) + (end 79.7718 157.375) + (width 0.2) + (layer "In1.Cu") + (net 179) + (uuid "a8ea6d1e-9a9e-4fc3-8347-300ef1f25a99") + ) + (segment + (start 106.439 157.375) + (end 108.351 159.287) + (width 0.2) + (layer "In1.Cu") + (net 179) + (uuid "bf81b754-c970-4e84-ad78-d2565d6520a4") + ) + (segment + (start 125.45125 157.375) + (end 126.2235 158.14725) + (width 0.2) + (layer "B.Cu") + (net 180) + (uuid "13c2fca5-3f80-49a2-b82e-a698b36f8924") + ) + (segment + (start 100.7364 158.3651) + (end 101.7265 157.375) + (width 0.2) + (layer "B.Cu") + (net 180) + (uuid "63e3071d-45de-46ae-9dcf-d968fa94cb22") + ) + (segment + (start 101.7265 157.375) + (end 125.45125 157.375) + (width 0.2) + (layer "B.Cu") + (net 180) + (uuid "659b17d2-f01d-4b53-b01a-c79cd33b9129") + ) + (segment + (start 126.2235 158.14725) + (end 126.2235 158.9485) + (width 0.2) + (layer "B.Cu") + (net 180) + (uuid "814200bc-ebdf-4f5e-9ff6-1eaa511b3b5d") + ) + (segment + (start 101.7235 160.4485) + (end 100.7364 159.4614) + (width 0.2) + (layer "B.Cu") + (net 180) + (uuid "aabc10d5-c099-44f4-b948-c6365dd98754") + ) + (segment + (start 100.7364 159.4614) + (end 100.7364 158.3651) + (width 0.2) + (layer "B.Cu") + (net 180) + (uuid "d89ce189-f857-402b-9d40-3cf55b337c5f") + ) + (segment + (start 145.2735 158.9485) + (end 146.52475 158.9485) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "2d73d756-d055-4356-a86d-8d54587c2c2a") + ) + (segment + (start 146.95125 159.375) + (end 146.95125 161.575) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "54b9b0e3-cec7-49c0-b4e9-9cc71757be43") + ) + (segment + (start 146.52475 158.9485) + (end 146.95125 159.375) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "74bd5792-1c1e-43ef-a46b-e5e68359da3f") + ) + (segment + (start 120.7735 161.49725) + (end 120.7735 160.4485) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "985f473d-7fc7-45b2-94e9-a7fa41aada1e") + ) + (segment + (start 121.70125 162.425) + (end 120.7735 161.49725) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "b425df8f-d8ab-43af-b11c-5eac30b7b7df") + ) + (segment + (start 146.95125 161.575) + (end 146.10125 162.425) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "bcf72657-8382-4dcd-856f-ec51f80bb046") + ) + (segment + (start 146.10125 162.425) + (end 121.70125 162.425) + (width 0.2) + (layer "B.Cu") + (net 181) + (uuid "d6bb0571-744e-4019-8128-1ba1115d1ee2") + ) + (segment + (start 139.8235 160.4485) + (end 138.42475 160.4485) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "05d5303f-96f2-4db1-a480-3eb3e63ad865") + ) + (segment + (start 164.053875 157.822375) + (end 164.3235 158.092) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "228f037f-5be7-4533-a658-c5bc190c4c15") + ) + (segment + (start 138.30125 157.175) + (end 163.4065 157.175) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "259d82a7-1017-43c5-acff-933557d4513e") + ) + (segment + (start 163.4065 157.175) + (end 164.053875 157.822375) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "2f45223a-c88b-46b7-be52-ca07526a53fa") + ) + (segment + (start 138.42475 160.4485) + (end 137.40125 159.425) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "591be0a7-5da1-4da5-8d5b-ed39fe357672") + ) + (segment + (start 137.40125 158.075) + (end 138.30125 157.175) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "a9508370-6ffb-4bf2-bb2e-0c7652a8c8b9") + ) + (segment + (start 164.3235 158.092) + (end 164.3235 158.9485) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "ccfa0eee-9d77-45c5-9696-64e1485ade24") + ) + (segment + (start 137.40125 159.425) + (end 137.40125 158.075) + (width 0.2) + (layer "B.Cu") + (net 182) + (uuid "eebcd004-b982-4f52-94aa-4bd199288816") + ) + (segment + (start 185.345118 159.543844) + (end 185.345118 161.329783) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "32fcab48-1be6-481d-8de8-0a563e9d3aad") + ) + (segment + (start 185.345118 161.329783) + (end 183.559179 163.115722) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "3b00aa7a-2911-45cf-a59c-bd3369354f77") + ) + (segment + (start 183.3736 158.9485) + (end 184.749774 158.9485) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "3b5cbad8-50ee-4257-9e9d-fa2ba6c7ae7f") + ) + (segment + (start 160.741972 163.115722) + (end 158.8735 161.24725) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "4e497943-7c3d-41db-b065-b3607bbf63d7") + ) + (segment + (start 184.749774 158.9485) + (end 185.345118 159.543844) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "cc0c13ca-dcbe-4d1e-9b8f-ec2746639d71") + ) + (segment + (start 158.8735 161.24725) + (end 158.8735 160.4485) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "d52d5809-9caa-4a0f-b4b1-b9a74ea291e3") + ) + (segment + (start 183.559179 163.115722) + (end 160.741972 163.115722) + (width 0.2) + (layer "B.Cu") + (net 183) + (uuid "effd4d39-6edd-4723-8c7a-666f9004c5a1") + ) + (segment + (start 176.8903 158.511) + (end 178.2263 157.175) + (width 0.2) + (layer "B.Cu") + (net 184) + (uuid "3f1b7946-843b-4b7c-be05-6b1f99bee348") + ) + (segment + (start 201.639012 157.175) + (end 202.0798 157.615788) + (width 0.2) + (layer "B.Cu") + (net 184) + (uuid "41aea3ba-3662-43e1-899d-386c1862f01d") + ) + (segment + (start 176.8903 159.4152) + (end 176.8903 158.511) + (width 0.2) + (layer "B.Cu") + (net 184) + (uuid "8543d90a-9a7b-49ae-a580-18179c63c0ae") + ) + (segment + (start 202.0798 157.615788) + (end 202.0798 158.7938) + (width 0.2) + (layer "B.Cu") + (net 184) + (uuid "8667533f-2022-4ae0-9a72-24d25d25a0de") + ) + (segment + (start 177.9236 160.4485) + (end 176.8903 159.4152) + (width 0.2) + (layer "B.Cu") + (net 184) + (uuid "9bf100bc-e260-4b5f-86e7-67dccfa6984e") + ) + (segment + (start 178.2263 157.175) + (end 201.639012 157.175) + (width 0.2) + (layer "B.Cu") + (net 184) + (uuid "f48a4056-a200-4b20-8492-d9d1e8fdd7a7") + ) + (segment + (start 222.798 158.847) + (end 222.299 159.346) + (width 0.2) + (layer "F.Cu") + (net 185) + (uuid "9063c59c-193c-48cd-8171-25f3acbfb57f") + ) + (segment + (start 222.299 159.346) + (end 222.299 162.249) + (width 0.2) + (layer "F.Cu") + (net 185) + (uuid "edaf235e-a04f-4d5a-bf01-adcfe35a7908") + ) + (via + (at 222.798 158.847) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 185) + (uuid "0553e7db-843a-4592-95e7-11100450eab9") + ) + (via + (at 222.299 162.249) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 185) + (uuid "198ff2c0-749b-4b20-9fce-be96a0f6fd1a") + ) + (via + (at 195.4432 162.2824) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 185) + (uuid "fc7c3219-ac80-41d7-a7e1-a37d31c1a191") + ) + (segment + (start 221.1298 158.7938) + (end 222.7448 158.7938) + (width 0.2) + (layer "B.Cu") + (net 185) + (uuid "02a76851-13b4-40a6-a291-916fa8d6b29a") + ) + (segment + (start 222.7448 158.7938) + (end 222.798 158.847) + (width 0.2) + (layer "B.Cu") + (net 185) + (uuid "1db7a08d-f39d-493d-ace6-a8eca55f665a") + ) + (segment + (start 196.6298 161.0958) + (end 195.4432 162.2824) + (width 0.2) + (layer "B.Cu") + (net 185) + (uuid "c39a129b-713a-497a-9d11-21ce4bf63f5a") + ) + (segment + (start 196.6298 160.2938) + (end 196.6298 161.0958) + (width 0.2) + (layer "B.Cu") + (net 185) + (uuid "fd3a127e-bd68-4ad9-b422-f1f99521fb91") + ) + (segment + (start 195.4432 162.2824) + (end 195.4766 162.249) + (width 0.2) + (layer "In1.Cu") + (net 185) + (uuid "47815ff5-61cb-47f1-90fd-145d18968ff1") + ) + (segment + (start 195.4766 162.249) + (end 222.299 162.249) + (width 0.2) + (layer "In1.Cu") + (net 185) + (uuid "ddccef4a-dd2e-4399-9ef3-94cbb938c7cc") + ) + (segment + (start 239.485471 157.309221) + (end 240.1799 158.00365) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "0e976a45-fbcd-4ad6-b589-a5dc2fd41441") + ) + (segment + (start 215.6798 161.735213) + (end 216.851755 162.907168) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "353794b9-ecdf-4f11-95a5-58053368dc7b") + ) + (segment + (start 233.054679 157.309221) + (end 239.485471 157.309221) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "66ce4852-9ed7-4a2e-8ad7-92f05f9ccbe2") + ) + (segment + (start 215.6798 160.2938) + (end 215.6798 161.735213) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "780cdf2b-1853-4c7b-8b90-eef36ba41e1c") + ) + (segment + (start 216.851755 162.907168) + (end 227.456732 162.907168) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "f21dce94-9778-484b-816d-0f9cfd2b27b3") + ) + (segment + (start 227.456732 162.907168) + (end 233.054679 157.309221) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "fef2e780-9232-4069-9339-20b0e8104412") + ) + (segment + (start 240.1799 158.00365) + (end 240.1799 158.7938) + (width 0.2) + (layer "B.Cu") + (net 186) + (uuid "ff48c06e-32e3-42c8-a8cc-4f580b947893") + ) + (via + (at 236.377 162.02) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 187) + (uuid "3b8ed8ee-11e6-478a-98b4-a0b9d8e953a6") + ) + (via + (at 261.65125 158.575) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 187) + (uuid "ecbe6323-f471-4721-a74d-cdb2b632afb1") + ) + (segment + (start 259.9956 158.125) + (end 259.4814 158.6392) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "0164c41d-e0be-499f-b755-af7f356158da") + ) + (segment + (start 261.65125 158.575) + (end 261.20125 158.125) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "0d76d8e7-0e6e-449b-9103-fca7299774f7") + ) + (segment + (start 234.73 161.30375) + (end 234.73 160.2938) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "6656cbd7-f4b9-4a6b-894a-2bf254c0eea8") + ) + (segment + (start 235.44625 162.02) + (end 234.73 161.30375) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "77789771-c806-42f1-8472-80bd09cf6392") + ) + (segment + (start 236.377 162.02) + (end 235.44625 162.02) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "a94bc296-c7c7-40c3-9b14-15946e6cfa36") + ) + (segment + (start 261.20125 158.125) + (end 259.9956 158.125) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "cbcf89ab-aa48-47e1-861a-9dc49e13af07") + ) + (segment + (start 234.73 160.2938) + (end 234.7299 160.2938) + (width 0.2) + (layer "B.Cu") + (net 187) + (uuid "e48d5894-0144-478a-873c-bcd56d464a69") + ) + (segment + (start 260.72095 162.0053) + (end 255.055778 162.0053) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "2b4e6de1-d218-48e9-b242-fd8e125cb95e") + ) + (segment + (start 261.70125 158.625) + (end 261.70125 161.025) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "8e074e80-85c4-4986-9093-5528d74e2da8") + ) + (segment + (start 261.70125 161.025) + (end 260.72095 162.0053) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "9cd02e16-6bd3-4033-b5e3-d528267e6ba0") + ) + (segment + (start 255.055778 162.0053) + (end 254.851778 161.8013) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "9f2009ac-80cc-41eb-a383-38f4b7716996") + ) + (segment + (start 254.851778 161.8013) + (end 254.433422 161.8013) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "acc15555-389c-4a6c-8dde-7f5c307e091c") + ) + (segment + (start 254.1376 162.02) + (end 236.377 162.02) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "bb1fda17-abc6-4615-9e25-efae879d3452") + ) + (segment + (start 261.65125 158.575) + (end 261.70125 158.625) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "c33f0dcd-c223-4b31-a24b-47a6397d308b") + ) + (segment + (start 254.433422 161.8013) + (end 254.1376 162.097122) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "c3e9b7f4-0287-48c0-94c6-0c0d3c82e4ea") + ) + (segment + (start 254.1376 162.097122) + (end 254.1376 162.02) + (width 0.2) + (layer "In1.Cu") + (net 187) + (uuid "c8659c07-3a49-4405-b8e4-76bda658c145") + ) + (via + (at 279.60125 158.625) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 188) + (uuid "7993da58-b76c-4b6a-a66c-083b4d8c974a") + ) + (via + (at 254.6426 162.3063) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 188) + (uuid "e7e512a1-7740-4714-a248-0fd9c7ad8971") + ) + (segment + (start 254.0314 161.6951) + (end 254.6426 162.3063) + (width 0.2) + (layer "B.Cu") + (net 188) + (uuid "36df8dd4-de15-4777-a3e1-7bc9573e6a61") + ) + (segment + (start 278.5457 158.625) + (end 279.60125 158.625) + (width 0.2) + (layer "B.Cu") + (net 188) + (uuid "9d6d3168-ef83-4326-acef-35b6f5e62126") + ) + (segment + (start 254.0314 160.1392) + (end 254.0314 161.6951) + (width 0.2) + (layer "B.Cu") + (net 188) + (uuid "bf144a72-48f5-4ef5-822d-538e7fe22f60") + ) + (segment + (start 278.5315 158.6392) + (end 278.5457 158.625) + (width 0.2) + (layer "B.Cu") + (net 188) + (uuid "c4278d9f-30e7-48b1-bd3c-cd3c96509ab4") + ) + (segment + (start 278.41995 162.3063) + (end 254.6426 162.3063) + (width 0.2) + (layer "In1.Cu") + (net 188) + (uuid "751ecbd3-834e-42c0-8d74-e48ba8d3d5f9") + ) + (segment + (start 279.60125 158.625) + (end 279.8377 158.86145) + (width 0.2) + (layer "In1.Cu") + (net 188) + (uuid "b31efacf-0447-4a74-b8ab-bb6b831924d9") + ) + (segment + (start 279.8377 158.86145) + (end 279.8377 160.88855) + (width 0.2) + (layer "In1.Cu") + (net 188) + (uuid "eba2442d-103b-4048-bca1-149f4d4c17d6") + ) + (segment + (start 279.8377 160.88855) + (end 278.41995 162.3063) + (width 0.2) + (layer "In1.Cu") + (net 188) + (uuid "fefb08c7-8eae-46c0-8979-c4ac11930561") + ) + (segment + (start 304.4737 157.69745) + (end 304.10125 157.325) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "0d774f0d-0c36-4541-a9db-2384d74570ef") + ) + (segment + (start 292.3122 162.275) + (end 274.05125 162.275) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "2c728e49-cc9e-430a-8110-ed3a40f3fe06") + ) + (segment + (start 273.0815 161.30525) + (end 273.0815 160.1392) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "50b61a4b-5c24-4980-8ddd-dfbcf7847643") + ) + (segment + (start 297.2622 157.325) + (end 292.3122 162.275) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "6f3991a8-f79f-4a9c-8240-b828b2c4c2d4") + ) + (segment + (start 304.4737 158.7938) + (end 304.4737 157.69745) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "bb67c653-5ca6-4ec8-9c96-93a4645d1520") + ) + (segment + (start 274.05125 162.275) + (end 273.0815 161.30525) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "de2a598f-8967-4c56-ac9a-4bfabf7f3de5") + ) + (segment + (start 304.10125 157.325) + (end 297.2622 157.325) + (width 0.2) + (layer "B.Cu") + (net 189) + (uuid "dec23b0a-dfb0-4553-8fc6-ce3dcabd1d37") + ) + (segment + (start 330.05125 157.225) + (end 310.25125 157.225) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "2648a8be-93c5-4790-ad36-64a35171a50e") + ) + (segment + (start 305.65125 161.825) + (end 299.70125 161.825) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "29d2f707-d205-4df0-96b5-312a459ac60e") + ) + (segment + (start 310.25125 157.225) + (end 305.65125 161.825) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "52c85de2-e25a-4a2a-971b-645b19b91a8e") + ) + (segment + (start 299.0237 161.14745) + (end 299.0237 160.2938) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "97a79da1-ad29-42f3-b2ed-01c6bb791649") + ) + (segment + (start 330.6674 157.84115) + (end 330.05125 157.225) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "a1487539-8edf-4936-a3d6-dc440747294a") + ) + (segment + (start 299.70125 161.825) + (end 299.0237 161.14745) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "a2247655-d929-4722-9b12-d9607095999c") + ) + (segment + (start 330.6674 158.7938) + (end 330.6674 157.84115) + (width 0.2) + (layer "B.Cu") + (net 190) + (uuid "ca2464da-a6ca-4f71-9a6c-6a2961eea058") + ) + (segment + (start 325.2174 160.2938) + (end 325.2174 161.39115) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "37ed4265-4065-4b1f-978d-69facfd7c73a") + ) + (segment + (start 332.25125 162.025) + (end 337.00125 157.275) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "493f4dca-85ba-4a19-97a8-2c3fb8a6e9b1") + ) + (segment + (start 349.25125 157.275) + (end 349.969 157.99275) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "5cb75e71-5c5c-4f1d-8351-c32ac62a1be5") + ) + (segment + (start 325.2174 161.39115) + (end 325.85125 162.025) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "6f4c696b-7ac4-471f-8f8a-0a139a23a13f") + ) + (segment + (start 337.00125 157.275) + (end 349.25125 157.275) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "76baad16-9ce0-407e-ab80-7a3dc32d268e") + ) + (segment + (start 349.969 157.99275) + (end 349.969 158.6392) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "7ae543da-bfdd-446d-abd8-93d4def4dd8d") + ) + (segment + (start 325.85125 162.025) + (end 332.25125 162.025) + (width 0.2) + (layer "B.Cu") + (net 191) + (uuid "e13c63d4-6945-40e6-b3d1-6697a1f7b15b") + ) + (via + (at 342.4968 160.1392) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 192) + (uuid "1da92912-17f4-404d-9e52-e91e0d883295") + ) + (via + (at 113.9735 176.5833) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 192) + (uuid "c16b8f93-60d2-46cf-8090-4d91f54ad90c") + ) + (segment + (start 113.9735 177.8441) + (end 113.9735 176.5833) + (width 0.2) + (layer "B.Cu") + (net 192) + (uuid "1fd7c40e-e3cd-4dd8-9374-638c0570bd27") + ) + (segment + (start 344.519 160.1392) + (end 342.4968 160.1392) + (width 0.2) + (layer "B.Cu") + (net 192) + (uuid "4bf45220-c984-434a-828a-a06960e1b6b9") + ) + (segment + (start 127.1128 176.5833) + (end 113.9735 176.5833) + (width 0.2) + (layer "In1.Cu") + (net 192) + (uuid "04439095-b2e8-4618-883c-a0153b52b4d6") + ) + (segment + (start 139.161 164.5351) + (end 127.1128 176.5833) + (width 0.2) + (layer "In1.Cu") + (net 192) + (uuid "0cb473fb-b30f-4a83-81bc-9b569c65fb90") + ) + (segment + (start 338.1009 164.5351) + (end 139.161 164.5351) + (width 0.2) + (layer "In1.Cu") + (net 192) + (uuid "4d5abc55-8831-4b85-9017-92f2b0d053a0") + ) + (segment + (start 342.4968 160.1392) + (end 338.1009 164.5351) + (width 0.2) + (layer "In1.Cu") + (net 192) + (uuid "5be205aa-ec4a-4557-880a-c80a66738afe") + ) + (segment + (start 107.0044 177.825) + (end 90.1799 177.825) + (width 0.2) + (layer "B.Cu") + (net 193) + (uuid "74935c59-ff3f-4c31-ae43-a097aeebe026") + ) + (segment + (start 90.1799 177.825) + (end 90.161 177.8439) + (width 0.2) + (layer "B.Cu") + (net 193) + (uuid "d941c673-f632-4905-b9e3-4bcb28f7f950") + ) + (segment + (start 108.5235 179.3441) + (end 107.0044 177.825) + (width 0.2) + (layer "B.Cu") + (net 193) + (uuid "e735a889-35c0-4219-a47a-7a50a76295db") + ) + (segment + (start 66.6001 177.7519) + (end 83.119 177.7519) + (width 0.2) + (layer "B.Cu") + (net 194) + (uuid "03895853-7b8d-4a63-b1b0-6b36a77106de") + ) + (segment + (start 83.119 177.7519) + (end 84.711 179.3439) + (width 0.2) + (layer "B.Cu") + (net 194) + (uuid "bd646d96-323f-4b07-b22a-2a0794214c19") + ) + (via + (at 184.6445 184.9915) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 195) + (uuid "7f335dc4-8d51-424b-8d5b-6f25b3b96c5d") + ) + (via + (at 61.1501 180.4514) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 195) + (uuid "8c4711b5-8c07-4eae-901c-f80413dca503") + ) + (segment + (start 187.85125 181.78475) + (end 184.6445 184.9915) + (width 0.2) + (layer "B.Cu") + (net 195) + (uuid "2443246b-c904-42cb-8123-9d65245a83b9") + ) + (segment + (start 185.7548 177.6892) + (end 187.26545 177.6892) + (width 0.2) + (layer "B.Cu") + (net 195) + (uuid "4e7ede3e-2ba1-4d4c-bf1c-f119916c60c1") + ) + (segment + (start 187.26545 177.6892) + (end 187.85125 178.275) + (width 0.2) + (layer "B.Cu") + (net 195) + (uuid "5e6f8b38-0d24-4e4c-acda-a4b01f5147bb") + ) + (segment + (start 61.1501 180.4514) + (end 61.1501 179.2519) + (width 0.2) + (layer "B.Cu") + (net 195) + (uuid "80f86e18-059f-40bc-946a-17f1a8b8b122") + ) + (segment + (start 187.85125 178.275) + (end 187.85125 181.78475) + (width 0.2) + (layer "B.Cu") + (net 195) + (uuid "f8174ba7-a9fd-4473-b412-f353aa9b1ffd") + ) + (segment + (start 65.6902 184.9915) + (end 184.6445 184.9915) + (width 0.2) + (layer "In1.Cu") + (net 195) + (uuid "00dfea2e-3335-40d0-8fe4-18105402171c") + ) + (segment + (start 61.1501 180.4514) + (end 65.6902 184.9915) + (width 0.2) + (layer "In1.Cu") + (net 195) + (uuid "bae5bd59-7b55-408f-8f75-2f6d6aa0f043") + ) + (via + (at 180.30125 181.075) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 196) + (uuid "47b5b60a-c467-468f-86eb-0aa69923f4d8") + ) + (via + (at 255.1232 176.9154) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 196) + (uuid "a72cf8c1-58e4-4ccc-9d0c-3facf54844b7") + ) + (segment + (start 180.30125 179.36885) + (end 180.3048 179.3653) + (width 0.2) + (layer "B.Cu") + (net 196) + (uuid "5e1d66d6-3629-40c7-b875-4069112736cb") + ) + (segment + (start 254.4674 177.8439) + (end 255.1232 177.1881) + (width 0.2) + (layer "B.Cu") + (net 196) + (uuid "77cdf8c2-090e-4208-917e-3a2a2b00350b") + ) + (segment + (start 255.1232 177.1881) + (end 255.1232 176.9154) + (width 0.2) + (layer "B.Cu") + (net 196) + (uuid "7a6b7834-3ea5-42f6-b456-0e4b9dabb8fd") + ) + (segment + (start 180.30125 181.075) + (end 180.30125 179.36885) + (width 0.2) + (layer "B.Cu") + (net 196) + (uuid "88257046-6141-4739-9aae-569640dd93f3") + ) + (segment + (start 180.3048 179.3653) + (end 180.3048 179.1892) + (width 0.2) + (layer "B.Cu") + (net 196) + (uuid "8abb6131-4bd7-4f53-9463-e6880c489489") + ) + (segment + (start 180.30125 181.075) + (end 180.65125 181.425) + (width 0.2) + (layer "In1.Cu") + (net 196) + (uuid "1220f9f5-34a2-4e70-ade5-d6b2ff0deb63") + ) + (segment + (start 180.65125 181.425) + (end 211.7101 181.425) + (width 0.2) + (layer "In1.Cu") + (net 196) + (uuid "21cd7d6b-4f7e-4fcb-9520-7e43e4e2de4c") + ) + (segment + (start 216.7601 176.375) + (end 254.5828 176.375) + (width 0.2) + (layer "In1.Cu") + (net 196) + (uuid "23349208-2ca6-414f-9156-a425079da3ce") + ) + (segment + (start 254.5828 176.375) + (end 255.1232 176.9154) + (width 0.2) + (layer "In1.Cu") + (net 196) + (uuid "dccc2c51-654e-4a18-8f57-98695f3533df") + ) + (segment + (start 211.7101 181.425) + (end 216.7601 176.375) + (width 0.2) + (layer "In1.Cu") + (net 196) + (uuid "e8431a25-0e8f-4f6f-8c10-8f8939bbda4e") + ) + (segment + (start 275.609 179.765) + (end 276.125 180.281) + (width 0.2) + (layer "F.Cu") + (net 197) + (uuid "7b7ad39f-2366-406f-831f-16ede5f5a428") + ) + (segment + (start 275.609 176.928) + (end 275.609 179.765) + (width 0.2) + (layer "F.Cu") + (net 197) + (uuid "9fb6f96c-e967-4a7b-944b-aa9561f57691") + ) + (via + (at 276.125 180.281) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 197) + (uuid "53ce8e1d-db09-4379-bce0-8202dd749109") + ) + (via + (at 275.609 176.928) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 197) + (uuid "5b844beb-f2fc-4956-b2c1-c900d28acb26") + ) + (segment + (start 249.0174 179.3439) + (end 249.0174 180.29115) + (width 0.2) + (layer "B.Cu") + (net 197) + (uuid "5a72d6ca-559b-45cf-b623-1dfdf8fff971") + ) + (segment + (start 249.0174 180.29115) + (end 250.135376 181.409126) + (width 0.2) + (layer "B.Cu") + (net 197) + (uuid "70c9e530-0052-4555-9063-257fb8ebcb08") + ) + (segment + (start 275.609 176.928) + (end 274.4333 176.928) + (width 0.2) + (layer "B.Cu") + (net 197) + (uuid "99d6eacb-4931-40f8-b5a4-1e2a48b09ec2") + ) + (segment + (start 274.4333 176.928) + (end 273.5174 177.8439) + (width 0.2) + (layer "B.Cu") + (net 197) + (uuid "a8f12b0f-8788-4b09-a461-1a57b430e675") + ) + (segment + (start 250.135376 181.409126) + (end 274.996874 181.409126) + (width 0.2) + (layer "B.Cu") + (net 197) + (uuid "b0dc42dc-9ba8-4820-862e-0d5f871746f4") + ) + (segment + (start 274.996874 181.409126) + (end 276.125 180.281) + (width 0.2) + (layer "B.Cu") + (net 197) + (uuid "f90607c9-c44e-4653-8351-b037df8af5be") + ) + (via + (at 268.05125 180.225) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 198) + (uuid "0ab332dd-53c5-4d34-887c-4180544a7e3f") + ) + (via + (at 293.80125 181.425) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 198) + (uuid "11a4e3c0-9bce-4ee9-ad2d-74c1c90ea46a") + ) + (segment + (start 268.05125 180.225) + (end 268.05125 179.80115) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "03f988a4-eace-4acc-8995-6afd0917db2f") + ) + (segment + (start 268.0674 179.785) + (end 268.0674 179.3439) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "3ca02fb5-1edb-4ed2-a8db-9c9b2df97766") + ) + (segment + (start 294.60125 180.625) + (end 294.60125 178.575) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "467e21f1-bc62-4adf-a393-72582cb1050b") + ) + (segment + (start 294.60125 178.575) + (end 293.87015 177.8439) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "65d0c6cc-8593-4f3f-93a3-42e16c42a0f1") + ) + (segment + (start 268.05125 179.80115) + (end 268.0674 179.785) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "97ce3ce8-bae8-427f-998b-f16ae7c1c128") + ) + (segment + (start 293.80125 181.425) + (end 294.60125 180.625) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "9f236ed8-3311-4090-a592-4040bbde4583") + ) + (segment + (start 293.87015 177.8439) + (end 292.819 177.8439) + (width 0.2) + (layer "B.Cu") + (net 198) + (uuid "b03d3c24-2df1-492f-a44f-77f675c48256") + ) + (segment + (start 268.05125 180.775) + (end 268.05125 180.225) + (width 0.2) + (layer "In1.Cu") + (net 198) + (uuid "0bd0348b-1d8c-40e2-ae85-83556d3fbb6d") + ) + (segment + (start 268.70125 181.425) + (end 268.05125 180.775) + (width 0.2) + (layer "In1.Cu") + (net 198) + (uuid "0d25507d-b420-4455-80e9-a7aeea3d84ff") + ) + (segment + (start 293.80125 181.425) + (end 268.70125 181.425) + (width 0.2) + (layer "In1.Cu") + (net 198) + (uuid "e9ed7850-6e1f-472c-bc4e-503955560aa5") + ) + (segment + (start 311.819 183.148) + (end 311.819 176.782) + (width 0.2) + (layer "F.Cu") + (net 199) + (uuid "4cc4b55d-8faa-4f9e-89f8-e5a7d17147c0") + ) + (segment + (start 311.819 176.782) + (end 311.884 176.717) + (width 0.2) + (layer "F.Cu") + (net 199) + (uuid "73314733-2879-4d01-a72f-a16f7808a487") + ) + (via + (at 311.884 176.717) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 199) + (uuid "1def3e6c-8617-41d2-b59d-c10153aba05e") + ) + (via + (at 311.819 183.148) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 199) + (uuid "7da4214b-127a-47c7-a06e-92101dd632c1") + ) + (segment + (start 311.869 176.732) + (end 311.869 177.8439) + (width 0.2) + (layer "B.Cu") + (net 199) + (uuid "058fa4b7-61da-4253-aadb-a0492ba45d32") + ) + (segment + (start 289.87425 183.148) + (end 287.369 180.64275) + (width 0.2) + (layer "B.Cu") + (net 199) + (uuid "081d2b5a-75f1-4725-bafc-78319a562b9e") + ) + (segment + (start 311.819 183.148) + (end 289.87425 183.148) + (width 0.2) + (layer "B.Cu") + (net 199) + (uuid "0f511f96-9696-4ebd-9324-61e6c456dbab") + ) + (segment + (start 287.369 180.64275) + (end 287.369 179.3439) + (width 0.2) + (layer "B.Cu") + (net 199) + (uuid "5f6d895a-ed52-42d1-a291-a01496964f21") + ) + (segment + (start 311.884 176.717) + (end 311.869 176.732) + (width 0.2) + (layer "B.Cu") + (net 199) + (uuid "86406432-f127-41ec-8669-3425528ef64a") + ) + (via + (at 333.45125 177.875) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 200) + (uuid "01d26eaa-3df6-4f4a-8fb3-ad5aa1487a35") + ) + (via + (at 308.45125 181.525) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 200) + (uuid "283f76e1-1df2-4813-962f-18d84610e0af") + ) + (segment + (start 330.9501 177.875) + (end 333.45125 177.875) + (width 0.2) + (layer "B.Cu") + (net 200) + (uuid "0b36ebb0-c69e-4036-aff6-aa1b4ba05ca7") + ) + (segment + (start 306.419 180.14275) + (end 306.419 179.3439) + (width 0.2) + (layer "B.Cu") + (net 200) + (uuid "3d1f9a73-9b8b-426e-a795-15bb5535ada6") + ) + (segment + (start 308.45125 181.525) + (end 307.80125 181.525) + (width 0.2) + (layer "B.Cu") + (net 200) + (uuid "57822b6e-30b3-489e-986d-4dca6af4ea58") + ) + (segment + (start 330.919 177.8439) + (end 330.9501 177.875) + (width 0.2) + (layer "B.Cu") + (net 200) + (uuid "a70b932d-62dd-404e-ab99-7c07448365d5") + ) + (segment + (start 307.80125 181.525) + (end 306.419 180.14275) + (width 0.2) + (layer "B.Cu") + (net 200) + (uuid "b659074a-f54a-495d-a006-950db71a2d09") + ) + (segment + (start 333.45125 177.875) + (end 333.45125 179.925) + (width 0.2) + (layer "In1.Cu") + (net 200) + (uuid "1f215eb2-a48b-487d-81a6-0fbf7dd66489") + ) + (segment + (start 333.45125 179.925) + (end 331.85125 181.525) + (width 0.2) + (layer "In1.Cu") + (net 200) + (uuid "ce87651b-af96-4417-b9d5-58dcf1045303") + ) + (segment + (start 331.85125 181.525) + (end 308.45125 181.525) + (width 0.2) + (layer "In1.Cu") + (net 200) + (uuid "f6b36cf2-b8d4-4a4f-817b-fedaa0e77121") + ) + (segment + (start 326.324215 181.530763) + (end 350.881794 181.530763) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "19927469-c120-49fe-9959-623c82945119") + ) + (segment + (start 351.437445 180.975112) + (end 351.437445 178.59386) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "2228c25a-1ee6-4041-95b9-ffe068159206") + ) + (segment + (start 350.687485 177.8439) + (end 349.7175 177.8439) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "498f13c7-7979-4cbe-a36e-8fd9cd3f8eeb") + ) + (segment + (start 351.437445 178.59386) + (end 350.687485 177.8439) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "7b8b54c1-96cc-4398-80d0-438432fe0ae1") + ) + (segment + (start 350.881794 181.530763) + (end 351.437445 180.975112) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "8ad4d367-d135-499d-874d-2971b66d716b") + ) + (segment + (start 325.469 179.3439) + (end 325.469 180.675548) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "b44e091c-c2da-41a6-9c8e-f6e9b65b1dc1") + ) + (segment + (start 325.469 180.675548) + (end 326.324215 181.530763) + (width 0.2) + (layer "B.Cu") + (net 201) + (uuid "ede188ec-3a92-4166-9db3-073bd1e48a3c") + ) + (zone + (net 3) + (net_name "+5V") + (layer "F.Cu") + (uuid "3b71f351-0084-4a8d-9004-a54c7f14c5fd") + (hatch edge 0.5) + (connect_pads + (clearance 0.5) + ) + (min_thickness 0.25) + (filled_areas_thickness no) + (fill yes + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + ) + (polygon + (pts + (xy 44.85125 47.625) (xy 363.93875 47.625) (xy 363.93875 190.5) (xy 44.85125 190.5) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 184.116662 133.438185) (xy 184.162417 133.490989) (xy 184.172562 133.526314) (xy 184.183795 133.611638) + (xy 184.256759 133.883943) (xy 184.364635 134.144379) (xy 184.36464 134.14439) (xy 184.505583 134.388509) + (xy 184.505594 134.388525) (xy 184.636338 134.558914) (xy 184.661532 134.624083) (xy 184.647494 134.692528) + (xy 184.59868 134.742517) (xy 184.594258 134.744884) (xy 184.463813 134.81135) (xy 184.326865 134.910848) + (xy 184.32686 134.910852) (xy 184.207152 135.03056) (xy 184.207148 135.030565) (xy 184.107652 135.167511) + (xy 184.030796 135.318346) (xy 183.978481 135.479352) (xy 183.952 135.64655) (xy 183.952 135.815849) + (xy 183.978481 135.983047) (xy 184.030796 136.144053) (xy 184.107652 136.294888) (xy 184.207148 136.431834) + (xy 184.207152 136.431839) (xy 184.32686 136.551547) (xy 184.326865 136.551551) (xy 184.446317 136.638337) + (xy 184.463815 136.65105) (xy 184.527017 136.683253) (xy 184.614646 136.727903) (xy 184.614648 136.727903) + (xy 184.614651 136.727905) (xy 184.70095 136.755945) (xy 184.775652 136.780218) (xy 184.942851 136.8067) + (xy 184.942856 136.8067) (xy 185.112149 136.8067) (xy 185.279347 136.780218) (xy 185.440349 136.727905) + (xy 185.591185 136.65105) (xy 185.728141 136.551546) (xy 185.847846 136.431841) (xy 185.94735 136.294885) + (xy 186.024205 136.144049) (xy 186.076518 135.983047) (xy 186.103 135.815849) (xy 186.103 135.64655) + (xy 186.077428 135.485098) (xy 186.086382 135.415805) (xy 186.131379 135.362353) (xy 186.19813 135.341713) + (xy 186.199901 135.3417) (xy 186.438444 135.3417) (xy 186.438451 135.3417) (xy 186.717942 135.304904) + (xy 186.990239 135.231942) (xy 187.250683 135.124063) (xy 187.494817 134.983112) (xy 187.718465 134.8115) + (xy 187.9178 134.612165) (xy 187.985492 134.523946) (xy 188.04192 134.482744) (xy 188.111666 134.478589) + (xy 188.172586 134.512801) (xy 188.205339 134.574518) (xy 188.199526 134.644146) (xy 188.191255 134.661433) + (xy 188.135183 134.758551) (xy 188.135175 134.758568) (xy 188.025097 135.024321) (xy 187.950646 135.302176) + (xy 187.913101 135.587361) (xy 187.9131 135.587377) (xy 187.9131 135.875022) (xy 187.913101 135.875038) + (xy 187.950646 136.160223) (xy 188.025097 136.438078) (xy 188.135175 136.703831) (xy 188.135183 136.703848) + (xy 188.279004 136.952951) (xy 188.279015 136.952967) (xy 188.454121 137.181171) (xy 188.454127 137.181178) + (xy 188.657525 137.384576) (xy 188.753761 137.45842) (xy 188.885741 137.559691) (xy 188.885748 137.559695) + (xy 189.134851 137.703516) (xy 189.134856 137.703518) (xy 189.134859 137.70352) (xy 189.134863 137.703521) + (xy 189.134868 137.703524) (xy 189.240223 137.747163) (xy 189.40062 137.813602) (xy 189.678475 137.888053) + (xy 189.963671 137.9256) (xy 189.963678 137.9256) (xy 190.251322 137.9256) (xy 190.251329 137.9256) + (xy 190.536525 137.888053) (xy 190.81438 137.813602) (xy 191.080141 137.70352) (xy 191.329259 137.559691) + (xy 191.470078 137.451636) (xy 191.557475 137.384576) (xy 191.557478 137.384572) (xy 191.760872 137.181178) + (xy 191.760877 137.181173) (xy 191.935991 136.952959) (xy 192.07982 136.703841) (xy 192.189902 136.43808) + (xy 192.264353 136.160225) (xy 192.3019 135.875029) (xy 192.3019 135.587371) (xy 192.264353 135.302175) + (xy 192.189902 135.02432) (xy 192.123463 134.863923) (xy 192.079824 134.758568) (xy 192.079816 134.758551) + (xy 191.935995 134.509448) (xy 191.935994 134.509447) (xy 191.935991 134.509441) (xy 191.935987 134.509436) + (xy 191.935984 134.509431) (xy 191.900802 134.463581) (xy 191.875608 134.398412) (xy 191.889647 134.329967) + (xy 191.938461 134.279977) (xy 192.006552 134.264314) (xy 192.072302 134.287951) (xy 192.086866 134.300421) + (xy 192.810616 135.024321) (xy 192.84219 135.055901) (xy 192.875669 135.117227) (xy 192.8785 135.143573) + (xy 192.8785 138.904033) (xy 192.858815 138.971072) (xy 192.806011 139.016827) (xy 192.736853 139.026771) + (xy 192.673297 138.997746) (xy 192.643469 138.959243) (xy 192.579219 138.830032) (xy 192.560644 138.805264) + (xy 192.492827 138.714834) (xy 192.469662 138.683945) (xy 192.412496 138.631189) (xy 192.335469 138.560104) + (xy 192.335466 138.560102) (xy 192.335465 138.560101) (xy 192.335462 138.560099) (xy 192.181077 138.462601) + (xy 192.011587 138.394658) (xy 192.011577 138.394656) (xy 191.832592 138.358518) (xy 191.832599 138.358518) + (xy 191.660894 138.355565) (xy 191.650018 138.355378) (xy 191.650017 138.355378) (xy 191.650014 138.355378) + (xy 191.469897 138.385338) (xy 191.469884 138.385341) (xy 191.298163 138.447413) (xy 191.283648 138.45587) + (xy 191.283563 138.455919) (xy 191.276476 138.46004) (xy 191.27623 138.460108) (xy 191.248438 138.476344) + (xy 191.24819 138.476489) (xy 191.245463 138.477159) (xy 191.185846 138.493296) (xy 191.145501 138.493293) + (xy 191.145397 138.4933) (xy 189.704696 138.4933) (xy 189.696514 138.493298) (xy 189.696492 138.493293) + (xy 189.666565 138.493295) (xy 189.664328 138.493295) (xy 189.664046 138.493212) (xy 189.601793 138.476362) + (xy 189.573971 138.460108) (xy 189.567905 138.456564) (xy 189.566207 138.455717) (xy 189.558857 138.451434) + (xy 189.552021 138.44745) (xy 189.380297 138.385378) (xy 189.380291 138.385377) (xy 189.200181 138.355419) + (xy 189.200178 138.355419) (xy 189.191639 138.355565) (xy 189.017607 138.358559) (xy 188.838634 138.394694) + (xy 188.838623 138.394697) (xy 188.669142 138.462637) (xy 188.669141 138.462637) (xy 188.514761 138.560132) + (xy 188.514758 138.560134) (xy 188.380567 138.683973) (xy 188.271015 138.830054) (xy 188.18972 138.993544) + (xy 188.189719 138.993547) (xy 188.189718 138.99355) (xy 188.175889 139.041747) (xy 188.139358 139.169065) + (xy 188.122511 139.34151) (xy 188.121604 139.350793) (xy 188.123505 139.373202) (xy 188.13538 139.513178) + (xy 188.13704 139.532735) (xy 188.17308 139.664669) (xy 188.185156 139.708878) (xy 188.18516 139.708888) + (xy 188.192398 139.72397) (xy 188.19244 139.724056) (xy 188.196023 139.731538) (xy 188.196081 139.73184) + (xy 188.212436 139.765806) (xy 188.212581 139.7667) (xy 188.224601 139.819369) (xy 188.224601 141.168222) + (xy 188.212407 141.221845) (xy 188.211819 141.223071) (xy 188.211739 141.223238) (xy 188.192866 141.262437) + (xy 188.192542 141.263239) (xy 188.185118 141.27871) (xy 188.137001 141.454854) (xy 188.137001 141.454856) + (xy 188.121565 141.636806) (xy 188.138766 141.812868) (xy 188.139321 141.818542) (xy 188.154155 141.870242) + (xy 188.18968 141.994061) (xy 188.27098 142.157563) (xy 188.270981 142.157565) (xy 188.270983 142.157568) + (xy 188.326841 142.23205) (xy 188.380538 142.303652) (xy 188.380539 142.303653) (xy 188.38054 142.303654) + (xy 188.514732 142.427495) (xy 188.669125 142.524997) (xy 188.782401 142.570405) (xy 188.838614 142.592939) + (xy 188.838615 142.592939) (xy 188.838617 142.59294) (xy 189.017608 142.629079) (xy 189.017602 142.629079) + (xy 189.033922 142.629359) (xy 189.200184 142.63222) (xy 189.380312 142.602258) (xy 189.435807 142.582198) + (xy 189.552036 142.540185) (xy 189.552037 142.540183) (xy 189.55204 142.540183) (xy 189.567075 142.53142) + (xy 189.573759 142.527535) (xy 189.57405 142.527457) (xy 189.601933 142.51116) (xy 189.602051 142.511092) + (xy 189.605268 142.510301) (xy 189.664362 142.494299) (xy 191.145492 142.494299) (xy 191.145614 142.494306) + (xy 191.153705 142.494305) (xy 191.153708 142.494306) (xy 191.185842 142.494302) (xy 191.248404 142.511234) + (xy 191.27623 142.527491) (xy 191.276232 142.527491) (xy 191.28238 142.531083) (xy 191.284035 142.531908) + (xy 191.298178 142.54015) (xy 191.4699 142.602221) (xy 191.650021 142.632182) (xy 191.829698 142.62909) + (xy 191.832591 142.629041) (xy 192.011566 142.592905) (xy 192.011569 142.592903) (xy 192.011574 142.592903) + (xy 192.18106 142.524962) (xy 192.335446 142.427463) (xy 192.363596 142.401485) (xy 192.46963 142.30363) + (xy 192.469632 142.303628) (xy 192.470731 142.302163) (xy 192.579185 142.157547) (xy 192.643469 142.028265) + (xy 192.690943 141.977002) (xy 192.758596 141.959543) (xy 192.824949 141.981431) (xy 192.868934 142.035717) + (xy 192.8785 142.083475) (xy 192.8785 151.451508) (xy 192.858815 151.518547) (xy 192.806011 151.564302) + (xy 192.736853 151.574246) (xy 192.685611 151.554611) (xy 192.651188 151.531611) (xy 192.651172 151.531602) + (xy 192.505501 151.471264) (xy 192.505489 151.471261) (xy 192.350845 151.4405) (xy 192.350842 151.4405) + (xy 192.193158 151.4405) (xy 192.193155 151.4405) (xy 192.03851 151.471261) (xy 192.038502 151.471263) + (xy 191.963413 151.502365) (xy 191.893943 151.509832) (xy 191.831465 151.478556) (xy 191.828276 151.47548) + (xy 191.825833 151.473037) (xy 189.574576 149.221543) (xy 183.011814 142.65809) (xy 182.978332 142.596765) + (xy 182.9755 142.570413) (xy 182.9755 134.046075) (xy 182.995185 133.979036) (xy 183.047989 133.933281) + (xy 183.051999 133.931534) (xy 183.127179 133.900394) (xy 183.258289 133.812789) (xy 183.369789 133.701289) + (xy 183.457394 133.570179) (xy 183.488515 133.495045) (xy 183.532354 133.440644) (xy 183.598648 133.418579) + (xy 183.603075 133.4185) (xy 184.049623 133.4185) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 116.682586 96.412801) (xy 116.715339 96.474518) (xy 116.709526 96.544146) (xy 116.701255 96.561433) + (xy 116.645183 96.658551) (xy 116.645175 96.658568) (xy 116.535097 96.924321) (xy 116.460646 97.202176) + (xy 116.423101 97.487361) (xy 116.4231 97.487377) (xy 116.4231 97.775022) (xy 116.423101 97.775038) + (xy 116.460646 98.060223) (xy 116.535097 98.338078) (xy 116.645175 98.603831) (xy 116.645183 98.603848) + (xy 116.789004 98.852951) (xy 116.789015 98.852967) (xy 116.964121 99.081171) (xy 116.964127 99.081178) + (xy 117.167521 99.284572) (xy 117.167528 99.284578) (xy 117.300807 99.386846) (xy 117.395741 99.459691) + (xy 117.395748 99.459695) (xy 117.644851 99.603516) (xy 117.644867 99.603524) (xy 117.794738 99.665602) + (xy 117.904193 99.710939) (xy 117.958596 99.75478) (xy 117.980661 99.821074) (xy 117.963382 99.888773) + (xy 117.912245 99.936384) (xy 117.85674 99.9495) (xy 116.269716 99.9495) (xy 116.240242 99.940845) + (xy 116.210227 99.934298) (xy 116.205255 99.930572) (xy 116.202677 99.929815) (xy 116.181985 99.913131) + (xy 116.021242 99.752204) (xy 115.987792 99.690862) (xy 115.992816 99.621173) (xy 115.994381 99.617196) + (xy 116.025737 99.541497) (xy 116.0565 99.386842) (xy 116.0565 99.229158) (xy 116.0565 99.229155) + (xy 116.056499 99.229153) (xy 116.04547 99.173707) (xy 116.025737 99.074503) (xy 115.984357 98.974602) + (xy 115.965397 98.928827) (xy 115.96539 98.928814) (xy 115.877789 98.797711) (xy 115.877786 98.797707) + (xy 115.766292 98.686213) (xy 115.766288 98.68621) (xy 115.635185 98.598609) (xy 115.635172 98.598602) + (xy 115.489501 98.538264) (xy 115.489489 98.538261) (xy 115.334845 98.5075) (xy 115.334842 98.5075) + (xy 115.177158 98.5075) (xy 115.177155 98.5075) (xy 115.02251 98.538261) (xy 115.022498 98.538264) + (xy 114.876827 98.598602) (xy 114.876814 98.598609) (xy 114.745711 98.68621) (xy 114.745707 98.686213) + (xy 114.634213 98.797707) (xy 114.63421 98.797711) (xy 114.546609 98.928814) (xy 114.546602 98.928827) + (xy 114.486264 99.074498) (xy 114.486261 99.07451) (xy 114.4555 99.229153) (xy 114.4555 99.386846) + (xy 114.486261 99.541489) (xy 114.486264 99.541501) (xy 114.546602 99.687172) (xy 114.546609 99.687185) + (xy 114.63421 99.818288) (xy 114.634213 99.818292) (xy 114.745707 99.929786) (xy 114.745711 99.929789) + (xy 114.876814 100.01739) (xy 114.876827 100.017397) (xy 114.987371 100.063185) (xy 115.022503 100.077737) + (xy 115.177153 100.108499) (xy 115.177156 100.1085) (xy 115.177158 100.1085) (xy 115.334844 100.1085) + (xy 115.334845 100.108499) (xy 115.489497 100.077737) (xy 115.564138 100.046819) (xy 115.633605 100.039351) + (xy 115.696085 100.070626) (xy 115.69931 100.07374) (xy 115.910706 100.285379) (xy 115.922426 100.297112) + (xy 115.922425 100.297112) (xy 115.931109 100.305806) (xy 115.931135 100.305868) (xy 115.962768 100.337501) + (xy 115.995021 100.369791) (xy 115.995023 100.369792) (xy 115.995129 100.369862) (xy 115.995132 100.369865) + (xy 116.036948 100.387186) (xy 116.078617 100.404474) (xy 116.078684 100.404474) (xy 116.078747 100.4045) + (xy 116.078781 100.4045) (xy 116.12387 100.4045) (xy 116.169122 100.404526) (xy 116.169123 100.404525) + (xy 116.181072 100.404532) (xy 116.181408 100.4045) (xy 116.50705 100.4045) (xy 116.574089 100.424185) + (xy 116.619844 100.476989) (xy 116.629788 100.546147) (xy 116.606253 100.602896) (xy 116.529715 100.704954) + (xy 116.44842 100.868444) (xy 116.448419 100.868447) (xy 116.448418 100.86845) (xy 116.426751 100.943965) + (xy 116.398058 101.043965) (xy 116.380908 101.219511) (xy 116.380304 101.225693) (xy 116.384208 101.271713) + (xy 116.394765 101.396153) (xy 116.39574 101.407635) (xy 116.432068 101.540623) (xy 116.443856 101.583778) + (xy 116.44386 101.583788) (xy 116.451098 101.59887) (xy 116.45114 101.598956) (xy 116.454723 101.606438) + (xy 116.454781 101.60674) (xy 116.471136 101.640706) (xy 116.471281 101.6416) (xy 116.483301 101.694269) + (xy 116.483301 103.043122) (xy 116.471107 103.096745) (xy 116.470519 103.097971) (xy 116.470439 103.098138) + (xy 116.451566 103.137337) (xy 116.451242 103.138139) (xy 116.443818 103.15361) (xy 116.395701 103.329754) + (xy 116.395701 103.329756) (xy 116.380265 103.511706) (xy 116.39786 103.691801) (xy 116.398021 103.693442) + (xy 116.413951 103.748963) (xy 116.44838 103.868961) (xy 116.52968 104.032463) (xy 116.529681 104.032465) + (xy 116.529683 104.032468) (xy 116.580996 104.10089) (xy 116.639238 104.178552) (xy 116.639239 104.178553) + (xy 116.63924 104.178554) (xy 116.773432 104.302395) (xy 116.927825 104.399897) (xy 117.047422 104.447839) + (xy 117.097314 104.467839) (xy 117.097315 104.467839) (xy 117.097317 104.46784) (xy 117.276308 104.503979) + (xy 117.276302 104.503979) (xy 117.292622 104.504259) (xy 117.458884 104.50712) (xy 117.639012 104.477158) + (xy 117.683314 104.461143) (xy 117.810736 104.415085) (xy 117.810737 104.415083) (xy 117.81074 104.415083) + (xy 117.825775 104.40632) (xy 117.832459 104.402435) (xy 117.83275 104.402357) (xy 117.860633 104.38606) + (xy 117.860751 104.385992) (xy 117.863968 104.385201) (xy 117.923062 104.369199) (xy 119.404192 104.369199) + (xy 119.404314 104.369206) (xy 119.412405 104.369205) (xy 119.412408 104.369206) (xy 119.444542 104.369202) + (xy 119.507104 104.386134) (xy 119.53493 104.402391) (xy 119.534932 104.402391) (xy 119.54108 104.405983) + (xy 119.542735 104.406808) (xy 119.543205 104.407082) (xy 119.556878 104.41505) (xy 119.7286 104.477121) + (xy 119.908721 104.507082) (xy 120.088398 104.50399) (xy 120.091291 104.503941) (xy 120.270266 104.467805) + (xy 120.270269 104.467803) (xy 120.270274 104.467803) (xy 120.43976 104.399862) (xy 120.594146 104.302363) + (xy 120.596819 104.299897) (xy 120.72833 104.17853) (xy 120.728332 104.178528) (xy 120.730916 104.175083) + (xy 120.837885 104.032447) (xy 120.840468 104.027253) (xy 120.887941 103.975988) (xy 120.955594 103.958528) + (xy 121.021947 103.980415) (xy 121.065934 104.034701) (xy 121.0755 104.08246) (xy 121.0755 105.804747) + (xy 121.0755 105.895253) (xy 121.099898 105.954155) (xy 121.110136 105.97887) (xy 131.312181 116.180914) + (xy 131.345666 116.242237) (xy 131.3485 116.268595) (xy 131.3485 129.444747) (xy 131.3485 129.535253) + (xy 131.363904 129.572442) (xy 131.383136 129.61887) (xy 136.075181 134.310914) (xy 136.108666 134.372237) + (xy 136.1115 134.398595) (xy 136.1115 136.683253) (xy 136.146136 136.76687) (xy 136.451181 137.071914) + (xy 136.484666 137.133237) (xy 136.4875 137.159595) (xy 136.4875 143.942405) (xy 136.467815 144.009444) + (xy 136.451181 144.030086) (xy 135.634132 144.847135) (xy 135.570135 144.911132) (xy 135.550377 144.958831) + (xy 135.5355 144.994746) (xy 135.5355 151.360243) (xy 135.515815 151.427282) (xy 135.463011 151.473037) + (xy 135.393853 151.482981) (xy 135.364052 151.474806) (xy 135.3555 151.471264) (xy 135.355498 151.471263) + (xy 135.355497 151.471263) (xy 135.355494 151.471262) (xy 135.355489 151.471261) (xy 135.200845 151.4405) + (xy 135.200842 151.4405) (xy 135.043158 151.4405) (xy 135.043155 151.4405) (xy 134.88851 151.471261) + (xy 134.888502 151.471263) (xy 134.813413 151.502365) (xy 134.743943 151.509832) (xy 134.681465 151.478556) + (xy 134.678276 151.47548) (xy 134.675833 151.473037) (xy 132.424576 149.221543) (xy 125.861814 142.65809) + (xy 125.828332 142.596765) (xy 125.8255 142.570413) (xy 125.8255 141.482106) (xy 130.627765 141.482106) + (xy 130.643976 141.648035) (xy 130.645521 141.663842) (xy 130.664284 141.729238) (xy 130.69588 141.839361) + (xy 130.77718 142.002863) (xy 130.777181 142.002865) (xy 130.777183 142.002868) (xy 130.837309 142.083042) + (xy 130.886738 142.148952) (xy 130.886739 142.148953) (xy 130.88674 142.148954) (xy 131.020932 142.272795) + (xy 131.175325 142.370297) (xy 131.310477 142.424474) (xy 131.344814 142.438239) (xy 131.344815 142.438239) + (xy 131.344817 142.43824) (xy 131.523808 142.474379) (xy 131.523802 142.474379) (xy 131.540122 142.474659) + (xy 131.706384 142.47752) (xy 131.886512 142.447558) (xy 131.942007 142.427498) (xy 132.058236 142.385485) + (xy 132.058237 142.385483) (xy 132.05824 142.385483) (xy 132.073275 142.37672) (xy 132.079959 142.372835) + (xy 132.08025 142.372757) (xy 132.108133 142.35646) (xy 132.108251 142.356392) (xy 132.111468 142.355601) + (xy 132.170562 142.339599) (xy 133.651692 142.339599) (xy 133.651814 142.339606) (xy 133.659905 142.339605) + (xy 133.659908 142.339606) (xy 133.692042 142.339602) (xy 133.754604 142.356534) (xy 133.78243 142.372791) + (xy 133.782432 142.372791) (xy 133.78858 142.376383) (xy 133.790235 142.377208) (xy 133.804378 142.38545) + (xy 133.9761 142.447521) (xy 134.156221 142.477482) (xy 134.335898 142.47439) (xy 134.338791 142.474341) + (xy 134.517766 142.438205) (xy 134.517769 142.438203) (xy 134.517774 142.438203) (xy 134.68726 142.370262) + (xy 134.841646 142.272763) (xy 134.860031 142.255797) (xy 134.97583 142.14893) (xy 134.975832 142.148928) + (xy 134.98471 142.13709) (xy 135.085385 142.002847) (xy 135.166684 141.839348) (xy 135.217042 141.663833) + (xy 135.234797 141.482103) (xy 135.21936 141.30016) (xy 135.219358 141.300154) (xy 135.208738 141.261277) + (xy 135.171243 141.124018) (xy 135.163483 141.107849) (xy 135.160396 141.101404) (xy 135.160348 141.101146) + (xy 135.143971 141.067119) (xy 135.143843 141.06633) (xy 135.131802 141.013531) (xy 135.131802 141.013522) + (xy 135.131807 140.976108) (xy 135.131806 140.976104) (xy 135.131807 140.968098) (xy 135.131799 140.96796) + (xy 135.131799 139.664678) (xy 135.134453 139.653012) (xy 135.133419 139.644699) (xy 135.144003 139.611034) + (xy 135.150318 139.597876) (xy 135.150398 139.597787) (xy 135.150368 139.597773) (xy 135.150795 139.596885) + (xy 135.160374 139.576974) (xy 135.160374 139.576968) (xy 135.163755 139.569942) (xy 135.163917 139.569538) + (xy 135.171283 139.554191) (xy 135.2194 139.378042) (xy 135.234837 139.196093) (xy 135.217081 139.014355) + (xy 135.16672 138.838834) (xy 135.085418 138.67533) (xy 134.999027 138.560134) (xy 134.975862 138.529245) + (xy 134.918696 138.476489) (xy 134.841669 138.405404) (xy 134.841666 138.405402) (xy 134.841665 138.405401) + (xy 134.841662 138.405399) (xy 134.687277 138.307901) (xy 134.517787 138.239958) (xy 134.517777 138.239956) + (xy 134.338792 138.203818) (xy 134.338799 138.203818) (xy 134.167094 138.200865) (xy 134.156218 138.200678) + (xy 134.156217 138.200678) (xy 134.156214 138.200678) (xy 133.976097 138.230638) (xy 133.976084 138.230641) + (xy 133.804363 138.292713) (xy 133.789848 138.30117) (xy 133.789763 138.301219) (xy 133.782676 138.30534) + (xy 133.78243 138.305408) (xy 133.754638 138.321644) (xy 133.75439 138.321789) (xy 133.751663 138.322459) + (xy 133.692046 138.338596) (xy 133.651701 138.338593) (xy 133.651597 138.3386) (xy 132.210896 138.3386) + (xy 132.202714 138.338598) (xy 132.202692 138.338593) (xy 132.172765 138.338595) (xy 132.170528 138.338595) + (xy 132.170246 138.338512) (xy 132.107993 138.321662) (xy 132.080171 138.305408) (xy 132.074105 138.301864) + (xy 132.072407 138.301017) (xy 132.065057 138.296734) (xy 132.058221 138.29275) (xy 131.886497 138.230678) + (xy 131.886491 138.230677) (xy 131.706381 138.200719) (xy 131.706378 138.200719) (xy 131.697839 138.200865) + (xy 131.523807 138.203859) (xy 131.344834 138.239994) (xy 131.344823 138.239997) (xy 131.175342 138.307937) + (xy 131.175341 138.307937) (xy 131.020961 138.405432) (xy 131.020958 138.405434) (xy 130.886767 138.529273) + (xy 130.777215 138.675354) (xy 130.69592 138.838844) (xy 130.695919 138.838847) (xy 130.695918 138.83885) + (xy 130.670738 138.926606) (xy 130.645558 139.014365) (xy 130.62783 139.195827) (xy 130.627804 139.196093) + (xy 130.629482 139.215868) (xy 130.64158 139.358478) (xy 130.64324 139.378035) (xy 130.664918 139.457392) + (xy 130.691356 139.554178) (xy 130.69136 139.554188) (xy 130.698598 139.56927) (xy 130.69864 139.569356) + (xy 130.702223 139.576838) (xy 130.702281 139.57714) (xy 130.718636 139.611106) (xy 130.718781 139.612) + (xy 130.730801 139.664669) (xy 130.730801 141.013522) (xy 130.718607 141.067145) (xy 130.718019 141.068371) + (xy 130.717939 141.068538) (xy 130.699066 141.107737) (xy 130.698742 141.108539) (xy 130.691318 141.12401) + (xy 130.643201 141.300154) (xy 130.643201 141.300156) (xy 130.627765 141.482106) (xy 125.8255 141.482106) + (xy 125.8255 135.64655) (xy 126.802 135.64655) (xy 126.802 135.815849) (xy 126.828481 135.983047) + (xy 126.880796 136.144053) (xy 126.957652 136.294888) (xy 127.057148 136.431834) (xy 127.057152 136.431839) + (xy 127.17686 136.551547) (xy 127.176865 136.551551) (xy 127.296317 136.638337) (xy 127.313815 136.65105) + (xy 127.377017 136.683253) (xy 127.464646 136.727903) (xy 127.464648 136.727903) (xy 127.464651 136.727905) + (xy 127.55095 136.755945) (xy 127.625652 136.780218) (xy 127.792851 136.8067) (xy 127.792856 136.8067) + (xy 127.962149 136.8067) (xy 128.129347 136.780218) (xy 128.290349 136.727905) (xy 128.441185 136.65105) + (xy 128.578141 136.551546) (xy 128.697846 136.431841) (xy 128.79735 136.294885) (xy 128.874205 136.144049) + (xy 128.926518 135.983047) (xy 128.953 135.815849) (xy 128.953 135.64655) (xy 128.927428 135.485098) + (xy 128.936382 135.415805) (xy 128.981379 135.362353) (xy 129.04813 135.341713) (xy 129.049901 135.3417) + (xy 129.288444 135.3417) (xy 129.288451 135.3417) (xy 129.567942 135.304904) (xy 129.840239 135.231942) + (xy 130.100683 135.124063) (xy 130.344817 134.983112) (xy 130.568465 134.8115) (xy 130.7678 134.612165) + (xy 130.835492 134.523946) (xy 130.89192 134.482744) (xy 130.961666 134.478589) (xy 131.022586 134.512801) + (xy 131.055339 134.574518) (xy 131.049526 134.644146) (xy 131.041255 134.661433) (xy 130.985183 134.758551) + (xy 130.985175 134.758568) (xy 130.875097 135.024321) (xy 130.800646 135.302176) (xy 130.763101 135.587361) + (xy 130.7631 135.587377) (xy 130.7631 135.875022) (xy 130.763101 135.875038) (xy 130.800646 136.160223) + (xy 130.875097 136.438078) (xy 130.985175 136.703831) (xy 130.985183 136.703848) (xy 131.129004 136.952951) + (xy 131.129015 136.952967) (xy 131.304121 137.181171) (xy 131.304127 137.181178) (xy 131.507525 137.384576) + (xy 131.603761 137.45842) (xy 131.735741 137.559691) (xy 131.735748 137.559695) (xy 131.984851 137.703516) + (xy 131.984856 137.703518) (xy 131.984859 137.70352) (xy 131.984863 137.703521) (xy 131.984868 137.703524) + (xy 132.090223 137.747163) (xy 132.25062 137.813602) (xy 132.528475 137.888053) (xy 132.813671 137.9256) + (xy 132.813678 137.9256) (xy 133.101322 137.9256) (xy 133.101329 137.9256) (xy 133.386525 137.888053) + (xy 133.66438 137.813602) (xy 133.930141 137.70352) (xy 134.179259 137.559691) (xy 134.320078 137.451636) + (xy 134.407475 137.384576) (xy 134.407478 137.384572) (xy 134.610872 137.181178) (xy 134.610877 137.181173) + (xy 134.785991 136.952959) (xy 134.92982 136.703841) (xy 135.039902 136.43808) (xy 135.114353 136.160225) + (xy 135.1519 135.875029) (xy 135.1519 135.587371) (xy 135.114353 135.302175) (xy 135.039902 135.02432) + (xy 134.973463 134.863923) (xy 134.929824 134.758568) (xy 134.929816 134.758551) (xy 134.785995 134.509448) + (xy 134.785994 134.509447) (xy 134.785991 134.509441) (xy 134.661525 134.347233) (xy 134.610878 134.281228) + (xy 134.610872 134.281221) (xy 134.407478 134.077827) (xy 134.407471 134.077821) (xy 134.179267 133.902715) + (xy 134.179265 133.902713) (xy 134.179259 133.902709) (xy 134.179254 133.902706) (xy 134.179251 133.902704) + (xy 133.930148 133.758883) (xy 133.930131 133.758875) (xy 133.664378 133.648797) (xy 133.386523 133.574346) + (xy 133.101338 133.536801) (xy 133.101335 133.5368) (xy 133.101329 133.5368) (xy 132.813671 133.5368) + (xy 132.813665 133.5368) (xy 132.813661 133.536801) (xy 132.528476 133.574346) (xy 132.250621 133.648797) + (xy 131.984868 133.758875) (xy 131.984851 133.758883) (xy 131.735748 133.902704) (xy 131.735732 133.902715) + (xy 131.507528 134.077821) (xy 131.507521 134.077827) (xy 131.304127 134.281221) (xy 131.23293 134.374007) + (xy 131.176501 134.415209) (xy 131.106755 134.419364) (xy 131.045835 134.385151) (xy 131.013083 134.323434) + (xy 131.018896 134.253807) (xy 131.027161 134.236531) (xy 131.080363 134.144383) (xy 131.188242 133.883939) + (xy 131.261204 133.611642) (xy 131.298 133.332151) (xy 131.298 133.050249) (xy 131.261204 132.770758) + (xy 131.188242 132.498461) (xy 131.18126 132.481606) (xy 131.159309 132.428611) (xy 131.080363 132.238017) + (xy 131.080361 132.238014) (xy 131.080359 132.238009) (xy 130.939416 131.99389) (xy 130.939412 131.993883) + (xy 130.7678 131.770235) (xy 130.767798 131.770233) (xy 130.767795 131.770229) (xy 130.56847 131.570904) + (xy 130.469871 131.495246) (xy 130.344817 131.399288) (xy 130.344811 131.399284) (xy 130.344809 131.399283) + (xy 130.10069 131.25834) (xy 130.100679 131.258335) (xy 129.840243 131.150459) (xy 129.567939 131.077495) + (xy 129.288458 131.0407) (xy 129.288451 131.0407) (xy 129.006549 131.0407) (xy 129.006541 131.0407) + (xy 128.72706 131.077495) (xy 128.454756 131.150459) (xy 128.19432 131.258335) (xy 128.194309 131.25834) + (xy 127.95019 131.399283) (xy 127.950182 131.399289) (xy 127.726529 131.570904) (xy 127.527204 131.770229) + (xy 127.355589 131.993882) (xy 127.355583 131.99389) (xy 127.21464 132.238009) (xy 127.214635 132.23802) + (xy 127.106759 132.498456) (xy 127.033795 132.77076) (xy 126.997 133.050241) (xy 126.997 133.332158) + (xy 127.033795 133.611639) (xy 127.106759 133.883943) (xy 127.214635 134.144379) (xy 127.21464 134.14439) + (xy 127.355583 134.388509) (xy 127.355594 134.388525) (xy 127.486338 134.558914) (xy 127.511532 134.624083) + (xy 127.497494 134.692528) (xy 127.44868 134.742517) (xy 127.444258 134.744884) (xy 127.313813 134.81135) + (xy 127.176865 134.910848) (xy 127.17686 134.910852) (xy 127.057152 135.03056) (xy 127.057148 135.030565) + (xy 126.957652 135.167511) (xy 126.880796 135.318346) (xy 126.828481 135.479352) (xy 126.802 135.64655) + (xy 125.8255 135.64655) (xy 125.8255 134.046075) (xy 125.845185 133.979036) (xy 125.897989 133.933281) + (xy 125.901999 133.931534) (xy 125.977179 133.900394) (xy 126.108289 133.812789) (xy 126.219789 133.701289) + (xy 126.307394 133.570179) (xy 126.367737 133.424497) (xy 126.3985 133.269842) (xy 126.3985 133.112158) + (xy 126.3985 133.112155) (xy 126.398499 133.112153) (xy 126.367737 132.957503) (xy 126.35203 132.919582) + (xy 126.307397 132.811827) (xy 126.30739 132.811814) (xy 126.219789 132.680711) (xy 126.219786 132.680707) + (xy 126.108292 132.569213) (xy 126.108288 132.56921) (xy 125.977185 132.481609) (xy 125.977175 132.481604) + (xy 125.902047 132.450485) (xy 125.847644 132.406644) (xy 125.825579 132.34035) (xy 125.8255 132.335924) + (xy 125.8255 131.895748) (xy 125.825498 131.895743) (xy 125.790868 131.812134) (xy 121.245819 127.267085) + (xy 121.212334 127.205762) (xy 121.2095 127.179404) (xy 121.2095 122.432106) (xy 125.865265 122.432106) + (xy 125.881476 122.598035) (xy 125.883021 122.613842) (xy 125.902406 122.681404) (xy 125.93338 122.789361) + (xy 126.01468 122.952863) (xy 126.014681 122.952865) (xy 126.014683 122.952868) (xy 126.027766 122.970313) + (xy 126.124238 123.098952) (xy 126.124239 123.098953) (xy 126.12424 123.098954) (xy 126.258432 123.222795) + (xy 126.412825 123.320297) (xy 126.547977 123.374474) (xy 126.582314 123.388239) (xy 126.582315 123.388239) + (xy 126.582317 123.38824) (xy 126.761308 123.424379) (xy 126.761302 123.424379) (xy 126.777622 123.424659) + (xy 126.943884 123.42752) (xy 127.124012 123.397558) (xy 127.230961 123.358899) (xy 127.295736 123.335485) + (xy 127.295737 123.335483) (xy 127.29574 123.335483) (xy 127.310775 123.32672) (xy 127.317459 123.322835) + (xy 127.31775 123.322757) (xy 127.345633 123.30646) (xy 127.345751 123.306392) (xy 127.348968 123.305601) + (xy 127.408062 123.289599) (xy 128.889192 123.289599) (xy 128.889314 123.289606) (xy 128.897405 123.289605) + (xy 128.897408 123.289606) (xy 128.929542 123.289602) (xy 128.992104 123.306534) (xy 129.01993 123.322791) + (xy 129.019932 123.322791) (xy 129.02608 123.326383) (xy 129.027735 123.327208) (xy 129.041878 123.33545) + (xy 129.2136 123.397521) (xy 129.393721 123.427482) (xy 129.573398 123.42439) (xy 129.576291 123.424341) + (xy 129.755266 123.388205) (xy 129.755269 123.388203) (xy 129.755274 123.388203) (xy 129.92476 123.320262) + (xy 130.079146 123.222763) (xy 130.089805 123.212927) (xy 130.21333 123.09893) (xy 130.213332 123.098928) + (xy 130.226172 123.081807) (xy 130.322885 122.952847) (xy 130.404184 122.789348) (xy 130.454542 122.613833) + (xy 130.472297 122.432103) (xy 130.45686 122.25016) (xy 130.456858 122.250154) (xy 130.445292 122.207814) + (xy 130.408743 122.074018) (xy 130.400983 122.057849) (xy 130.397896 122.051404) (xy 130.397848 122.051146) + (xy 130.381471 122.017119) (xy 130.381343 122.01633) (xy 130.369302 121.963531) (xy 130.369302 121.963522) + (xy 130.369307 121.926108) (xy 130.369306 121.926104) (xy 130.369307 121.918098) (xy 130.369299 121.91796) + (xy 130.369299 120.614677) (xy 130.371954 120.603008) (xy 130.37092 120.594694) (xy 130.381505 120.561028) + (xy 130.387811 120.54789) (xy 130.397874 120.526974) (xy 130.397874 120.526969) (xy 130.40126 120.519933) + (xy 130.401425 120.519522) (xy 130.401546 120.51927) (xy 130.408783 120.504191) (xy 130.4569 120.328042) + (xy 130.472337 120.146093) (xy 130.454581 119.964355) (xy 130.40422 119.788834) (xy 130.322918 119.62533) + (xy 130.228475 119.499397) (xy 130.213362 119.479245) (xy 130.145059 119.416211) (xy 130.079169 119.355404) + (xy 130.079166 119.355402) (xy 130.079165 119.355401) (xy 130.079162 119.355399) (xy 129.924777 119.257901) + (xy 129.755287 119.189958) (xy 129.755277 119.189956) (xy 129.576292 119.153818) (xy 129.576299 119.153818) + (xy 129.404594 119.150865) (xy 129.393718 119.150678) (xy 129.393717 119.150678) (xy 129.393714 119.150678) + (xy 129.213597 119.180638) (xy 129.213584 119.180641) (xy 129.041863 119.242713) (xy 129.027348 119.25117) + (xy 129.027263 119.251219) (xy 129.020176 119.25534) (xy 129.01993 119.255408) (xy 128.992138 119.271644) + (xy 128.99189 119.271789) (xy 128.989163 119.272459) (xy 128.929546 119.288596) (xy 128.889201 119.288593) + (xy 128.889097 119.2886) (xy 127.448396 119.2886) (xy 127.440214 119.288598) (xy 127.440192 119.288593) + (xy 127.410265 119.288595) (xy 127.408028 119.288595) (xy 127.407746 119.288512) (xy 127.345493 119.271662) + (xy 127.317671 119.255408) (xy 127.311605 119.251864) (xy 127.309907 119.251017) (xy 127.302557 119.246734) + (xy 127.295721 119.24275) (xy 127.123997 119.180678) (xy 127.123991 119.180677) (xy 126.943881 119.150719) + (xy 126.943878 119.150719) (xy 126.935339 119.150865) (xy 126.761307 119.153859) (xy 126.582334 119.189994) + (xy 126.582323 119.189997) (xy 126.412842 119.257937) (xy 126.412841 119.257937) (xy 126.258461 119.355432) + (xy 126.258458 119.355434) (xy 126.124267 119.479273) (xy 126.014715 119.625354) (xy 125.93342 119.788844) + (xy 125.933419 119.788847) (xy 125.933418 119.78885) (xy 125.916545 119.847658) (xy 125.883058 119.964365) + (xy 125.869278 120.105413) (xy 125.865304 120.146093) (xy 125.866483 120.159989) (xy 125.880579 120.326147) + (xy 125.88074 120.328035) (xy 125.905448 120.418484) (xy 125.928856 120.504178) (xy 125.92886 120.504188) + (xy 125.936098 120.51927) (xy 125.93614 120.519356) (xy 125.939723 120.526838) (xy 125.939781 120.52714) + (xy 125.956097 120.561025) (xy 125.956136 120.561106) (xy 125.956281 120.562) (xy 125.968301 120.614669) + (xy 125.968301 121.963522) (xy 125.956107 122.017145) (xy 125.955519 122.018371) (xy 125.955439 122.018538) + (xy 125.936566 122.057737) (xy 125.936242 122.058539) (xy 125.928818 122.07401) (xy 125.880701 122.250154) + (xy 125.880701 122.250156) (xy 125.865265 122.432106) (xy 121.2095 122.432106) (xy 121.2095 114.919799) + (xy 121.229185 114.85276) (xy 121.264607 114.816699) (xy 121.345289 114.762789) (xy 121.456789 114.651289) + (xy 121.544394 114.520179) (xy 121.575515 114.445045) (xy 121.619354 114.390644) (xy 121.685648 114.368579) + (xy 121.690075 114.3685) (xy 122.137123 114.3685) (xy 122.204162 114.388185) (xy 122.249917 114.440989) + (xy 122.260062 114.476314) (xy 122.271295 114.561638) (xy 122.344259 114.833943) (xy 122.452135 115.094379) + (xy 122.45214 115.09439) (xy 122.593083 115.338509) (xy 122.593094 115.338525) (xy 122.723838 115.508914) + (xy 122.749032 115.574083) (xy 122.734994 115.642528) (xy 122.68618 115.692517) (xy 122.681758 115.694884) + (xy 122.551313 115.76135) (xy 122.414365 115.860848) (xy 122.41436 115.860852) (xy 122.294652 115.98056) + (xy 122.294648 115.980565) (xy 122.195152 116.117511) (xy 122.118296 116.268346) (xy 122.065981 116.429352) + (xy 122.0395 116.59655) (xy 122.0395 116.765849) (xy 122.065981 116.933047) (xy 122.118296 117.094053) + (xy 122.195152 117.244888) (xy 122.294648 117.381834) (xy 122.294651 117.381838) (xy 122.41436 117.501547) + (xy 122.414365 117.501551) (xy 122.494244 117.559586) (xy 122.551315 117.60105) (xy 122.647425 117.65002) + (xy 122.702146 117.677903) (xy 122.702148 117.677903) (xy 122.702151 117.677905) (xy 122.78845 117.705945) + (xy 122.863152 117.730218) (xy 123.030351 117.7567) (xy 123.030356 117.7567) (xy 123.199649 117.7567) + (xy 123.366847 117.730218) (xy 123.527849 117.677905) (xy 123.678685 117.60105) (xy 123.815641 117.501546) + (xy 123.935346 117.381841) (xy 123.935346 117.38184) (xy 123.935349 117.381838) (xy 123.935351 117.381834) + (xy 123.956179 117.353167) (xy 124.03485 117.244885) (xy 124.111705 117.094049) (xy 124.164018 116.933047) + (xy 124.1905 116.765849) (xy 124.1905 116.59655) (xy 124.164928 116.435098) (xy 124.173882 116.365805) + (xy 124.218879 116.312353) (xy 124.28563 116.291713) (xy 124.287401 116.2917) (xy 124.525944 116.2917) + (xy 124.525951 116.2917) (xy 124.805442 116.254904) (xy 125.077739 116.181942) (xy 125.338183 116.074063) + (xy 125.582317 115.933112) (xy 125.805965 115.7615) (xy 126.0053 115.562165) (xy 126.072992 115.473946) + (xy 126.12942 115.432744) (xy 126.199166 115.428589) (xy 126.260086 115.462801) (xy 126.292839 115.524518) + (xy 126.287026 115.594146) (xy 126.278755 115.611433) (xy 126.222683 115.708551) (xy 126.222675 115.708568) + (xy 126.112597 115.974321) (xy 126.038146 116.252176) (xy 126.000601 116.537361) (xy 126.0006 116.537377) + (xy 126.0006 116.825022) (xy 126.000601 116.825038) (xy 126.038146 117.110223) (xy 126.112597 117.388078) + (xy 126.222675 117.653831) (xy 126.222683 117.653848) (xy 126.366504 117.902951) (xy 126.366515 117.902967) + (xy 126.541621 118.131171) (xy 126.541627 118.131178) (xy 126.745021 118.334572) (xy 126.745027 118.334577) + (xy 126.973241 118.509691) (xy 126.973248 118.509695) (xy 127.222351 118.653516) (xy 127.222356 118.653518) + (xy 127.222359 118.65352) (xy 127.222363 118.653521) (xy 127.222368 118.653524) (xy 127.269808 118.673174) + (xy 127.48812 118.763602) (xy 127.765975 118.838053) (xy 128.051171 118.8756) (xy 128.051178 118.8756) + (xy 128.338822 118.8756) (xy 128.338829 118.8756) (xy 128.624025 118.838053) (xy 128.90188 118.763602) + (xy 129.167641 118.65352) (xy 129.170056 118.652126) (xy 129.284067 118.586301) (xy 129.416759 118.509691) + (xy 129.644973 118.334577) (xy 129.848377 118.131173) (xy 130.023491 117.902959) (xy 130.16732 117.653841) + (xy 130.277402 117.38808) (xy 130.351853 117.110225) (xy 130.3894 116.825029) (xy 130.3894 116.537371) + (xy 130.351853 116.252175) (xy 130.277402 115.97432) (xy 130.189705 115.762601) (xy 130.167324 115.708568) + (xy 130.167316 115.708551) (xy 130.023495 115.459448) (xy 130.023491 115.459441) (xy 129.882073 115.275141) + (xy 129.848378 115.231228) (xy 129.848372 115.231221) (xy 129.644978 115.027827) (xy 129.644971 115.027821) + (xy 129.416767 114.852715) (xy 129.416765 114.852713) (xy 129.416759 114.852709) (xy 129.416754 114.852706) + (xy 129.416751 114.852704) (xy 129.167648 114.708883) (xy 129.167631 114.708875) (xy 128.901878 114.598797) + (xy 128.624023 114.524346) (xy 128.338838 114.486801) (xy 128.338835 114.4868) (xy 128.338829 114.4868) + (xy 128.051171 114.4868) (xy 128.051165 114.4868) (xy 128.051161 114.486801) (xy 127.765976 114.524346) + (xy 127.488121 114.598797) (xy 127.222368 114.708875) (xy 127.222351 114.708883) (xy 126.973248 114.852704) + (xy 126.973232 114.852715) (xy 126.745028 115.027821) (xy 126.745021 115.027827) (xy 126.541627 115.231221) + (xy 126.47043 115.324007) (xy 126.414001 115.365209) (xy 126.344255 115.369364) (xy 126.283335 115.335151) + (xy 126.250583 115.273434) (xy 126.256396 115.203807) (xy 126.264661 115.186531) (xy 126.317863 115.094383) + (xy 126.425742 114.833939) (xy 126.498704 114.561642) (xy 126.5355 114.282151) (xy 126.5355 114.000249) + (xy 126.498704 113.720758) (xy 126.425742 113.448461) (xy 126.41876 113.431606) (xy 126.393765 113.371261) + (xy 126.317863 113.188017) (xy 126.317861 113.188014) (xy 126.317859 113.188009) (xy 126.176916 112.94389) + (xy 126.176912 112.943883) (xy 126.0053 112.720235) (xy 126.005298 112.720233) (xy 126.005295 112.720229) + (xy 125.80597 112.520904) (xy 125.781161 112.501867) (xy 125.582317 112.349288) (xy 125.582311 112.349284) + (xy 125.582309 112.349283) (xy 125.33819 112.20834) (xy 125.338179 112.208335) (xy 125.077743 112.100459) + (xy 124.805439 112.027495) (xy 124.525958 111.9907) (xy 124.525951 111.9907) (xy 124.244049 111.9907) + (xy 124.244041 111.9907) (xy 123.96456 112.027495) (xy 123.692256 112.100459) (xy 123.43182 112.208335) + (xy 123.431809 112.20834) (xy 123.18769 112.349283) (xy 123.187682 112.349289) (xy 122.964029 112.520904) + (xy 122.764704 112.720229) (xy 122.593089 112.943882) (xy 122.593083 112.94389) (xy 122.45214 113.188009) + (xy 122.452135 113.18802) (xy 122.344259 113.448456) (xy 122.271295 113.720761) (xy 122.260115 113.805686) + (xy 122.231848 113.869582) (xy 122.173524 113.908053) (xy 122.137176 113.9135) (xy 121.690075 113.9135) + (xy 121.623036 113.893815) (xy 121.577281 113.841011) (xy 121.575534 113.837) (xy 121.544394 113.761821) + (xy 121.544391 113.761816) (xy 121.54439 113.761814) (xy 121.456789 113.630711) (xy 121.456786 113.630707) + (xy 121.345292 113.519213) (xy 121.345288 113.51921) (xy 121.214185 113.431609) (xy 121.214172 113.431602) + (xy 121.068501 113.371264) (xy 121.068489 113.371261) (xy 120.913845 113.3405) (xy 120.913842 113.3405) + (xy 120.756158 113.3405) (xy 120.74952 113.34182) (xy 120.679929 113.335588) (xy 120.637649 113.307878) + (xy 113.585493 106.254985) (xy 113.552011 106.19366) (xy 113.556999 106.123968) (xy 113.598874 106.068037) + (xy 113.62572 106.05275) (xy 113.694179 106.024394) (xy 113.825289 105.936789) (xy 113.936789 105.825289) + (xy 114.024394 105.694179) (xy 114.084737 105.548497) (xy 114.1155 105.393842) (xy 114.1155 105.236158) + (xy 114.1155 105.236155) (xy 114.115499 105.236153) (xy 114.107262 105.194744) (xy 114.084737 105.081503) + (xy 114.032034 104.954265) (xy 114.024397 104.935827) (xy 114.02439 104.935814) (xy 113.936789 104.804711) + (xy 113.936786 104.804707) (xy 113.825292 104.693213) (xy 113.825288 104.69321) (xy 113.694185 104.605609) + (xy 113.694172 104.605602) (xy 113.548501 104.545264) (xy 113.548489 104.545261) (xy 113.393845 104.5145) + (xy 113.393842 104.5145) (xy 113.236158 104.5145) (xy 113.236155 104.5145) (xy 113.08151 104.545261) + (xy 113.081503 104.545263) (xy 113.006708 104.576243) (xy 112.937239 104.58371) (xy 112.87476 104.552435) + (xy 112.871541 104.549327) (xy 112.865965 104.543747) (xy 112.754032 104.431725) (xy 112.319784 103.997131) + (xy 112.286323 103.935795) (xy 112.2835 103.909485) (xy 112.2835 98.035081) (xy 112.303185 97.968042) + (xy 112.355989 97.922287) (xy 112.425147 97.912343) (xy 112.488703 97.941368) (xy 112.525431 97.996763) + (xy 112.540796 98.044051) (xy 112.617652 98.194888) (xy 112.717148 98.331834) (xy 112.717152 98.331839) + (xy 112.83686 98.451547) (xy 112.836865 98.451551) (xy 112.913873 98.5075) (xy 112.973815 98.55105) + (xy 113.067141 98.598602) (xy 113.124646 98.627903) (xy 113.124648 98.627903) (xy 113.124651 98.627905) + (xy 113.20885 98.655263) (xy 113.285652 98.680218) (xy 113.452851 98.7067) (xy 113.452856 98.7067) + (xy 113.622149 98.7067) (xy 113.789347 98.680218) (xy 113.950349 98.627905) (xy 114.101185 98.55105) + (xy 114.238141 98.451546) (xy 114.357846 98.331841) (xy 114.45735 98.194885) (xy 114.534205 98.044049) + (xy 114.586518 97.883047) (xy 114.596383 97.820763) (xy 114.613 97.715849) (xy 114.613 97.54655) + (xy 114.587428 97.385098) (xy 114.596382 97.315805) (xy 114.641379 97.262353) (xy 114.70813 97.241713) + (xy 114.709901 97.2417) (xy 114.948444 97.2417) (xy 114.948451 97.2417) (xy 115.227942 97.204904) + (xy 115.500239 97.131942) (xy 115.760683 97.024063) (xy 116.004817 96.883112) (xy 116.228465 96.7115) + (xy 116.4278 96.512165) (xy 116.495492 96.423946) (xy 116.55192 96.382744) (xy 116.621666 96.378589) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 59.691457 63.249961) (xy 59.742658 63.297504) (xy 59.7601 63.360917) (xy 59.7601 63.422869) + (xy 59.760101 63.422876) (xy 59.766508 63.482481) (xy 59.783714 63.528612) (xy 59.788698 63.598304) + (xy 59.778816 63.626643) (xy 59.771743 63.641031) (xy 59.756033 63.659163) (xy 59.696262 63.79004) + (xy 59.692936 63.801366) (xy 59.688239 63.810923) (xy 59.671515 63.829148) (xy 59.658138 63.849955) + (xy 59.648307 63.854441) (xy 59.641001 63.862405) (xy 59.617078 63.868696) (xy 59.594576 63.878967) + (xy 59.583879 63.877426) (xy 59.573429 63.880175) (xy 59.549904 63.872534) (xy 59.52542 63.869009) + (xy 59.519482 63.866101) (xy 59.391352 63.79908) (xy 59.341072 63.750566) (xy 59.325003 63.682569) + (xy 59.348246 63.616679) (xy 59.361139 63.601528) (xy 59.394012 63.568656) (xy 59.486114 63.419334) + (xy 59.518396 63.321912) (xy 59.558166 63.264471) (xy 59.622681 63.237647) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 59.691457 61.424961) (xy 59.742658 61.472504) (xy 59.7601 61.535919) (xy 59.7601 61.802869) + (xy 59.760101 61.802876) (xy 59.766508 61.862483) (xy 59.816802 61.997328) (xy 59.821054 62.005114) + (xy 59.81788 62.006846) (xy 59.836259 62.056302) (xy 59.821325 62.124557) (xy 59.820717 62.125502) + (xy 59.816802 62.132671) (xy 59.766508 62.267516) (xy 59.759909 62.328902) (xy 59.733171 62.393453) + (xy 59.675779 62.433301) (xy 59.605953 62.435794) (xy 59.545865 62.400141) (xy 59.518914 62.35465) + (xy 59.509794 62.327127) (xy 59.486114 62.255666) (xy 59.394012 62.106344) (xy 59.300349 62.012681) + (xy 59.266864 61.951358) (xy 59.271848 61.881666) (xy 59.300349 61.837319) (xy 59.334799 61.802869) + (xy 59.394012 61.743656) (xy 59.486114 61.594334) (xy 59.518396 61.496912) (xy 59.558166 61.439471) + (xy 59.622681 61.412647) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 62.062034 59.697877) (xy 62.079314 59.697721) (xy 62.094862 59.707516) (xy 62.112495 59.712694) + (xy 62.13757 59.734421) (xy 62.138431 59.734964) (xy 62.139169 59.735807) (xy 62.159133 59.758847) + (xy 62.24908 59.836788) (xy 62.286854 59.895566) (xy 62.286854 59.965436) (xy 62.249079 60.024214) + (xy 62.185523 60.053238) (xy 62.167877 60.0545) (xy 61.37 60.0545) (xy 61.344874 60.047122) (xy 61.318939 60.043499) + (xy 61.311884 60.037435) (xy 61.302961 60.034815) (xy 61.285814 60.015026) (xy 61.265953 59.997955) + (xy 61.263296 59.989039) (xy 61.257206 59.982011) (xy 61.253479 59.956092) (xy 61.246001 59.930995) + (xy 61.248585 59.92206) (xy 61.247262 59.912853) (xy 61.25814 59.889031) (xy 61.265418 59.863877) + (xy 61.274018 59.854263) (xy 61.276287 59.849297) (xy 61.288424 59.837112) (xy 61.290272 59.835497) + (xy 61.393323 59.752455) (xy 61.405627 59.734732) (xy 61.417167 59.724653) (xy 61.435534 59.716175) + (xy 61.451286 59.703482) (xy 61.466611 59.701833) (xy 61.480606 59.695375) (xy 61.500639 59.698173) + (xy 61.520755 59.69601) (xy 61.534739 59.699381) (xy 61.536903 59.700037) (xy 61.691553 59.730799) + (xy 61.691556 59.7308) (xy 61.691558 59.7308) (xy 61.849244 59.7308) (xy 61.849245 59.730799) (xy 62.003897 59.700037) + (xy 62.003906 59.700033) (xy 62.009448 59.698352) (xy 62.027823 59.698186) (xy 62.045456 59.693009) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 363.381289 48.145185) (xy 363.427044 48.197989) (xy 363.43825 48.2495) (xy 363.43825 189.8755) + (xy 363.418565 189.942539) (xy 363.365761 189.988294) (xy 363.31425 189.9995) (xy 45.47575 189.9995) + (xy 45.408711 189.979815) (xy 45.362956 189.927011) (xy 45.35175 189.8755) (xy 45.35175 184.912653) + (xy 183.844 184.912653) (xy 183.844 185.070346) (xy 183.874761 185.224989) (xy 183.874764 185.225001) + (xy 183.935102 185.370672) (xy 183.935109 185.370685) (xy 184.02271 185.501788) (xy 184.022713 185.501792) + (xy 184.134207 185.613286) (xy 184.134211 185.613289) (xy 184.265314 185.70089) (xy 184.265327 185.700897) + (xy 184.388222 185.751801) (xy 184.411003 185.761237) (xy 184.543005 185.787494) (xy 184.565653 185.791999) + (xy 184.565656 185.792) (xy 184.565658 185.792) (xy 184.723344 185.792) (xy 184.723345 185.791999) + (xy 184.877997 185.761237) (xy 185.023679 185.700894) (xy 185.154789 185.613289) (xy 185.266289 185.501789) + (xy 185.353894 185.370679) (xy 185.414237 185.224997) (xy 185.445 185.070342) (xy 185.445 184.912658) + (xy 185.445 184.912655) (xy 185.444999 184.912653) (xy 185.414238 184.75801) (xy 185.414237 184.758003) + (xy 185.414235 184.757998) (xy 185.353897 184.612327) (xy 185.35389 184.612314) (xy 185.266289 184.481211) + (xy 185.266286 184.481207) (xy 185.154792 184.369713) (xy 185.154788 184.36971) (xy 185.023685 184.282109) + (xy 185.023672 184.282102) (xy 184.878001 184.221764) (xy 184.877989 184.221761) (xy 184.723345 184.191) + (xy 184.723342 184.191) (xy 184.565658 184.191) (xy 184.565655 184.191) (xy 184.41101 184.221761) + (xy 184.410998 184.221764) (xy 184.265327 184.282102) (xy 184.265314 184.282109) (xy 184.134211 184.36971) + (xy 184.134207 184.369713) (xy 184.022713 184.481207) (xy 184.02271 184.481211) (xy 183.935109 184.612314) + (xy 183.935102 184.612327) (xy 183.874764 184.757998) (xy 183.874761 184.75801) (xy 183.844 184.912653) + (xy 45.35175 184.912653) (xy 45.35175 181.942377) (xy 130.76315 181.942377) (xy 130.76315 182.230022) + (xy 130.763151 182.230038) (xy 130.800696 182.515223) (xy 130.875147 182.793078) (xy 130.985225 183.058831) + (xy 130.985233 183.058848) (xy 131.129054 183.307951) (xy 131.129065 183.307967) (xy 131.304171 183.536171) + (xy 131.304177 183.536178) (xy 131.507571 183.739572) (xy 131.507577 183.739577) (xy 131.735791 183.914691) + (xy 131.735798 183.914695) (xy 131.984901 184.058516) (xy 131.984906 184.058518) (xy 131.984909 184.05852) + (xy 131.984913 184.058521) (xy 131.984918 184.058524) (xy 132.090273 184.102163) (xy 132.25067 184.168602) + (xy 132.528525 184.243053) (xy 132.813721 184.2806) (xy 132.813728 184.2806) (xy 133.101372 184.2806) + (xy 133.101379 184.2806) (xy 133.386575 184.243053) (xy 133.66443 184.168602) (xy 133.930191 184.05852) + (xy 134.179309 183.914691) (xy 134.407523 183.739577) (xy 134.610927 183.536173) (xy 134.786041 183.307959) + (xy 134.92987 183.058841) (xy 135.039952 182.79308) (xy 135.114403 182.515225) (xy 135.15195 182.230029) + (xy 135.15195 181.942371) (xy 135.114403 181.657175) (xy 135.039952 181.37932) (xy 134.962156 181.191503) + (xy 134.929874 181.113568) (xy 134.929869 181.113558) (xy 134.91136 181.0815) (xy 134.862085 180.996153) + (xy 179.50075 180.996153) (xy 179.50075 181.153846) (xy 179.531511 181.308489) (xy 179.531514 181.308501) + (xy 179.591852 181.454172) (xy 179.591859 181.454185) (xy 179.67946 181.585288) (xy 179.679463 181.585292) + (xy 179.790957 181.696786) (xy 179.790961 181.696789) (xy 179.922064 181.78439) (xy 179.922077 181.784397) + (xy 180.067748 181.844735) (xy 180.067753 181.844737) (xy 180.222403 181.875499) (xy 180.222406 181.8755) + (xy 180.222408 181.8755) (xy 180.380094 181.8755) (xy 180.380095 181.875499) (xy 180.534747 181.844737) + (xy 180.680429 181.784394) (xy 180.811539 181.696789) (xy 180.923039 181.585289) (xy 181.010644 181.454179) + (xy 181.013969 181.446153) (xy 181.055387 181.346158) (xy 181.070987 181.308497) (xy 181.10175 181.153842) + (xy 181.10175 180.996158) (xy 181.10175 180.996155) (xy 181.101749 180.996153) (xy 181.086847 180.921235) + (xy 181.070987 180.841503) (xy 181.055126 180.80321) (xy 181.010647 180.695827) (xy 181.01064 180.695814) + (xy 180.923039 180.564711) (xy 180.923036 180.564707) (xy 180.811542 180.453213) (xy 180.811538 180.45321) + (xy 180.680435 180.365609) (xy 180.680422 180.365602) (xy 180.534751 180.305264) (xy 180.534739 180.305261) + (xy 180.380095 180.2745) (xy 180.380092 180.2745) (xy 180.222408 180.2745) (xy 180.222405 180.2745) + (xy 180.06776 180.305261) (xy 180.067748 180.305264) (xy 179.922077 180.365602) (xy 179.922064 180.365609) + (xy 179.790961 180.45321) (xy 179.790957 180.453213) (xy 179.679463 180.564707) (xy 179.67946 180.564711) + (xy 179.591859 180.695814) (xy 179.591852 180.695827) (xy 179.531514 180.841498) (xy 179.531511 180.84151) + (xy 179.50075 180.996153) (xy 134.862085 180.996153) (xy 134.786041 180.864441) (xy 134.684785 180.732481) + (xy 134.610928 180.636228) (xy 134.610922 180.636221) (xy 134.407528 180.432827) (xy 134.407521 180.432821) + (xy 134.179317 180.257715) (xy 134.179315 180.257713) (xy 134.179309 180.257709) (xy 134.179304 180.257706) + (xy 134.179301 180.257704) (xy 133.930198 180.113883) (xy 133.930181 180.113875) (xy 133.664428 180.003797) + (xy 133.386573 179.929346) (xy 133.101388 179.891801) (xy 133.101385 179.8918) (xy 133.101379 179.8918) + (xy 132.813721 179.8918) (xy 132.813715 179.8918) (xy 132.813711 179.891801) (xy 132.528526 179.929346) + (xy 132.250671 180.003797) (xy 131.984918 180.113875) (xy 131.984901 180.113883) (xy 131.735798 180.257704) + (xy 131.735782 180.257715) (xy 131.507578 180.432821) (xy 131.507571 180.432827) (xy 131.304177 180.636221) + (xy 131.304171 180.636228) (xy 131.129065 180.864432) (xy 131.129054 180.864448) (xy 130.985233 181.113551) + (xy 130.985225 181.113568) (xy 130.875147 181.379321) (xy 130.800696 181.657176) (xy 130.763151 181.942361) + (xy 130.76315 181.942377) (xy 45.35175 181.942377) (xy 45.35175 180.372553) (xy 60.3496 180.372553) + (xy 60.3496 180.530246) (xy 60.380361 180.684889) (xy 60.380364 180.684901) (xy 60.440702 180.830572) + (xy 60.440709 180.830585) (xy 60.52831 180.961688) (xy 60.528313 180.961692) (xy 60.639807 181.073186) + (xy 60.639811 181.073189) (xy 60.770914 181.16079) (xy 60.770927 181.160797) (xy 60.916598 181.221135) + (xy 60.916603 181.221137) (xy 61.071253 181.251899) (xy 61.071256 181.2519) (xy 61.071258 181.2519) + (xy 61.228944 181.2519) (xy 61.228945 181.251899) (xy 61.383597 181.221137) (xy 61.529279 181.160794) + (xy 61.660389 181.073189) (xy 61.771889 180.961689) (xy 61.859494 180.830579) (xy 61.919837 180.684897) + (xy 61.930482 180.631383) (xy 61.933689 180.61526) (xy 61.966074 180.553349) (xy 62.026789 180.518775) + (xy 62.096559 180.522514) (xy 62.113897 180.530915) (xy 62.114095 180.530528) (xy 62.119121 180.533095) + (xy 62.119123 180.533095) (xy 62.119125 180.533097) (xy 62.230193 180.57762) (xy 62.288614 180.601039) + (xy 62.288615 180.601039) (xy 62.288617 180.60104) (xy 62.467608 180.637179) (xy 62.467602 180.637179) + (xy 62.483922 180.637459) (xy 62.650184 180.64032) (xy 62.830312 180.610358) (xy 62.874614 180.594343) + (xy 63.002036 180.548285) (xy 63.002037 180.548283) (xy 63.00204 180.548283) (xy 63.017075 180.53952) + (xy 63.023759 180.535635) (xy 63.02405 180.535557) (xy 63.051933 180.51926) (xy 63.052051 180.519192) + (xy 63.055268 180.518401) (xy 63.114362 180.502399) (xy 64.595492 180.502399) (xy 64.595614 180.502406) + (xy 64.603705 180.502405) (xy 64.603708 180.502406) (xy 64.635842 180.502402) (xy 64.698404 180.519334) + (xy 64.72623 180.535591) (xy 64.726232 180.535591) (xy 64.73238 180.539183) (xy 64.734035 180.540008) + (xy 64.748178 180.54825) (xy 64.9199 180.610321) (xy 65.100021 180.640282) (xy 65.279698 180.63719) + (xy 65.282591 180.637141) (xy 65.461566 180.601005) (xy 65.461569 180.601003) (xy 65.461574 180.601003) + (xy 65.63106 180.533062) (xy 65.785446 180.435563) (xy 65.788416 180.432823) (xy 65.91963 180.31173) + (xy 65.919632 180.311728) (xy 65.92448 180.305264) (xy 66.029185 180.165647) (xy 66.110484 180.002148) + (xy 66.160842 179.826633) (xy 66.169608 179.736906) (xy 85.132465 179.736906) (xy 85.148577 179.901821) + (xy 85.150221 179.918642) (xy 85.156195 179.939463) (xy 85.20058 180.094161) (xy 85.28188 180.257663) + (xy 85.281881 180.257665) (xy 85.281883 180.257668) (xy 85.322427 180.31173) (xy 85.391438 180.403752) + (xy 85.391439 180.403753) (xy 85.39144 180.403754) (xy 85.525632 180.527595) (xy 85.680025 180.625097) + (xy 85.80393 180.674766) (xy 85.849514 180.693039) (xy 85.849515 180.693039) (xy 85.849517 180.69304) + (xy 86.028508 180.729179) (xy 86.028502 180.729179) (xy 86.044822 180.729459) (xy 86.211084 180.73232) + (xy 86.391212 180.702358) (xy 86.439539 180.684889) (xy 86.562936 180.640285) (xy 86.562937 180.640283) + (xy 86.56294 180.640283) (xy 86.578212 180.631383) (xy 86.584659 180.627635) (xy 86.58495 180.627557) + (xy 86.612833 180.61126) (xy 86.612951 180.611192) (xy 86.616168 180.610401) (xy 86.675262 180.594399) + (xy 88.156392 180.594399) (xy 88.156514 180.594406) (xy 88.164605 180.594405) (xy 88.164608 180.594406) + (xy 88.196742 180.594402) (xy 88.259304 180.611334) (xy 88.28713 180.627591) (xy 88.287132 180.627591) + (xy 88.29328 180.631183) (xy 88.294935 180.632008) (xy 88.309078 180.64025) (xy 88.4808 180.702321) + (xy 88.660921 180.732282) (xy 88.840598 180.72919) (xy 88.843491 180.729141) (xy 89.022466 180.693005) + (xy 89.022469 180.693003) (xy 89.022474 180.693003) (xy 89.19196 180.625062) (xy 89.346346 180.527563) + (xy 89.351818 180.522514) (xy 89.48053 180.40373) (xy 89.480532 180.403728) (xy 89.480533 180.403727) + (xy 89.590085 180.257647) (xy 89.671384 180.094148) (xy 89.721742 179.918633) (xy 89.739477 179.737106) + (xy 108.944965 179.737106) (xy 108.962701 179.918644) (xy 108.962721 179.918842) (xy 108.970128 179.944657) + (xy 109.01308 180.094361) (xy 109.09438 180.257863) (xy 109.094381 180.257865) (xy 109.094383 180.257868) + (xy 109.134777 180.31173) (xy 109.203938 180.403952) (xy 109.203939 180.403953) (xy 109.20394 180.403954) + (xy 109.338132 180.527795) (xy 109.492525 180.625297) (xy 109.627677 180.679474) (xy 109.662014 180.693239) + (xy 109.662015 180.693239) (xy 109.662017 180.69324) (xy 109.841008 180.729379) (xy 109.841002 180.729379) + (xy 109.857322 180.729659) (xy 110.023584 180.73252) (xy 110.203712 180.702558) (xy 110.252559 180.684901) + (xy 110.375436 180.640485) (xy 110.375437 180.640483) (xy 110.37544 180.640483) (xy 110.390475 180.63172) + (xy 110.397159 180.627835) (xy 110.39745 180.627757) (xy 110.425333 180.61146) (xy 110.425451 180.611392) + (xy 110.428668 180.610601) (xy 110.487762 180.594599) (xy 111.968892 180.594599) (xy 111.969014 180.594606) + (xy 111.977105 180.594605) (xy 111.977108 180.594606) (xy 112.009242 180.594602) (xy 112.071804 180.611534) + (xy 112.09963 180.627791) (xy 112.099632 180.627791) (xy 112.10578 180.631383) (xy 112.107435 180.632208) + (xy 112.121578 180.64045) (xy 112.2933 180.702521) (xy 112.473421 180.732482) (xy 112.653098 180.72939) + (xy 112.655991 180.729341) (xy 112.834966 180.693205) (xy 112.834969 180.693203) (xy 112.834974 180.693203) + (xy 113.00446 180.625262) (xy 113.158846 180.527763) (xy 113.159029 180.527595) (xy 113.29303 180.40393) + (xy 113.293032 180.403928) (xy 113.293033 180.403927) (xy 113.402585 180.257847) (xy 113.483884 180.094348) + (xy 113.534242 179.918833) (xy 113.551997 179.737103) (xy 113.538855 179.582206) (xy 180.726265 179.582206) + (xy 180.741379 179.736906) (xy 180.744021 179.763942) (xy 180.767515 179.845827) (xy 180.79438 179.939461) + (xy 180.87568 180.102963) (xy 180.875681 180.102965) (xy 180.875683 180.102968) (xy 180.909218 180.147684) + (xy 180.985238 180.249052) (xy 180.985239 180.249053) (xy 180.98524 180.249054) (xy 181.119432 180.372895) + (xy 181.273825 180.470397) (xy 181.383818 180.514489) (xy 181.443314 180.538339) (xy 181.443315 180.538339) + (xy 181.443317 180.53834) (xy 181.622308 180.574479) (xy 181.622302 180.574479) (xy 181.638622 180.574759) + (xy 181.804884 180.57762) (xy 181.985012 180.547658) (xy 182.039965 180.527794) (xy 182.156736 180.485585) + (xy 182.156737 180.485583) (xy 182.15674 180.485583) (xy 182.171775 180.47682) (xy 182.178459 180.472935) + (xy 182.17875 180.472857) (xy 182.206633 180.45656) (xy 182.206751 180.456492) (xy 182.209968 180.455701) + (xy 182.269062 180.439699) (xy 183.750192 180.439699) (xy 183.750314 180.439706) (xy 183.758405 180.439705) + (xy 183.758408 180.439706) (xy 183.790542 180.439702) (xy 183.853104 180.456634) (xy 183.88093 180.472891) + (xy 183.880932 180.472891) (xy 183.88708 180.476483) (xy 183.888735 180.477308) (xy 183.902878 180.48555) + (xy 184.0746 180.547621) (xy 184.254721 180.577582) (xy 184.434398 180.57449) (xy 184.437291 180.574441) + (xy 184.616266 180.538305) (xy 184.616269 180.538303) (xy 184.616274 180.538303) (xy 184.78576 180.470362) + (xy 184.940146 180.372863) (xy 184.940477 180.372558) (xy 185.07433 180.24903) (xy 185.074332 180.249028) + (xy 185.074333 180.249027) (xy 185.183885 180.102947) (xy 185.265184 179.939448) (xy 185.315542 179.763933) + (xy 185.333297 179.582203) (xy 185.31786 179.40026) (xy 185.317858 179.400254) (xy 185.307535 179.362466) + (xy 185.269743 179.224118) (xy 185.261983 179.207949) (xy 185.258896 179.201504) (xy 185.258848 179.201246) + (xy 185.242471 179.167219) (xy 185.242343 179.16643) (xy 185.230302 179.113631) (xy 185.230302 179.113622) + (xy 185.230307 179.076208) (xy 185.230306 179.076204) (xy 185.230307 179.068198) (xy 185.230299 179.06806) + (xy 185.230299 177.76478) (xy 185.232952 177.753117) (xy 185.231918 177.744809) (xy 185.242499 177.711148) + (xy 185.242504 177.711133) (xy 185.242506 177.711129) (xy 185.246469 177.702871) (xy 185.248933 177.697737) + (xy 185.248935 177.697738) (xy 185.24894 177.697732) (xy 185.248978 177.697642) (xy 185.258874 177.677074) + (xy 185.258874 177.677072) (xy 185.262252 177.670052) (xy 185.262417 177.669638) (xy 185.269783 177.654291) + (xy 185.3179 177.478142) (xy 185.333337 177.296193) (xy 185.315581 177.114455) (xy 185.26522 176.938934) + (xy 185.183918 176.77543) (xy 185.097527 176.660234) (xy 185.074362 176.629345) (xy 185.035627 176.593598) + (xy 184.940169 176.505504) (xy 184.940166 176.505502) (xy 184.940165 176.505501) (xy 184.940162 176.505499) + (xy 184.785777 176.408001) (xy 184.616287 176.340058) (xy 184.616277 176.340056) (xy 184.437292 176.303918) + (xy 184.437299 176.303918) (xy 184.265594 176.300965) (xy 184.254718 176.300778) (xy 184.254717 176.300778) + (xy 184.254714 176.300778) (xy 184.074597 176.330738) (xy 184.074584 176.330741) (xy 183.902863 176.392813) + (xy 183.888348 176.40127) (xy 183.888263 176.401319) (xy 183.881176 176.40544) (xy 183.88093 176.405508) + (xy 183.853138 176.421744) (xy 183.85289 176.421889) (xy 183.850163 176.422559) (xy 183.790546 176.438696) + (xy 183.750201 176.438693) (xy 183.750097 176.4387) (xy 182.309396 176.4387) (xy 182.301214 176.438698) + (xy 182.301192 176.438693) (xy 182.271265 176.438695) (xy 182.269028 176.438695) (xy 182.268746 176.438612) + (xy 182.206493 176.421762) (xy 182.178671 176.405508) (xy 182.172605 176.401964) (xy 182.170907 176.401117) + (xy 182.163557 176.396834) (xy 182.156721 176.39285) (xy 181.984997 176.330778) (xy 181.984991 176.330777) + (xy 181.804881 176.300819) (xy 181.804878 176.300819) (xy 181.796339 176.300965) (xy 181.622307 176.303959) + (xy 181.443334 176.340094) (xy 181.443323 176.340097) (xy 181.273842 176.408037) (xy 181.273841 176.408037) + (xy 181.119461 176.505532) (xy 181.119458 176.505534) (xy 180.985267 176.629373) (xy 180.875715 176.775454) + (xy 180.79442 176.938944) (xy 180.794419 176.938947) (xy 180.794418 176.93895) (xy 180.776428 177.00165) + (xy 180.744058 177.114465) (xy 180.726461 177.294585) (xy 180.726304 177.296193) (xy 180.727236 177.307179) + (xy 180.740097 177.458778) (xy 180.74174 177.478135) (xy 180.773483 177.594339) (xy 180.789856 177.654278) + (xy 180.78986 177.654288) (xy 180.797098 177.66937) (xy 180.79714 177.669456) (xy 180.800723 177.676938) + (xy 180.800781 177.67724) (xy 180.817099 177.711129) (xy 180.817136 177.711206) (xy 180.817281 177.7121) + (xy 180.829301 177.764769) (xy 180.829301 179.113622) (xy 180.817107 179.167245) (xy 180.816519 179.168471) + (xy 180.816439 179.168638) (xy 180.797566 179.207837) (xy 180.797242 179.208639) (xy 180.789818 179.22411) + (xy 180.741701 179.400254) (xy 180.741701 179.400256) (xy 180.728559 179.555164) (xy 180.726507 179.579359) + (xy 180.726265 179.582206) (xy 113.538855 179.582206) (xy 113.53656 179.55516) (xy 113.536558 179.555154) + (xy 113.521881 179.501424) (xy 113.488443 179.379018) (xy 113.480683 179.362849) (xy 113.477596 179.356404) + (xy 113.477548 179.356146) (xy 113.461171 179.322119) (xy 113.461043 179.32133) (xy 113.449002 179.268531) + (xy 113.449002 179.268322) (xy 113.449007 179.231108) (xy 113.449006 179.231104) (xy 113.449007 179.223098) + (xy 113.448999 179.22296) (xy 113.448999 177.919677) (xy 113.451654 177.908008) (xy 113.45062 177.899694) + (xy 113.461205 177.866028) (xy 113.467511 177.85289) (xy 113.477574 177.831974) (xy 113.477574 177.831969) + (xy 113.48096 177.824933) (xy 113.481125 177.824522) (xy 113.481342 177.82407) (xy 113.488483 177.809191) + (xy 113.5366 177.633042) (xy 113.552037 177.451093) (xy 113.552036 177.451086) (xy 113.552118 177.450125) + (xy 113.577399 177.38499) (xy 113.633881 177.343862) (xy 113.703633 177.3398) (xy 113.723122 177.346044) + (xy 113.740003 177.353037) (xy 113.8821 177.381302) (xy 113.894653 177.383799) (xy 113.894656 177.3838) + (xy 113.894658 177.3838) (xy 114.052344 177.3838) (xy 114.052345 177.383799) (xy 114.206997 177.353037) + (xy 114.344232 177.296193) (xy 114.352672 177.292697) (xy 114.352672 177.292696) (xy 114.352679 177.292694) + (xy 114.483789 177.205089) (xy 114.595289 177.093589) (xy 114.682894 176.962479) (xy 114.743237 176.816797) + (xy 114.774 176.662142) (xy 114.774 176.504458) (xy 114.774 176.504455) (xy 114.773999 176.504453) + (xy 114.770048 176.484589) (xy 114.743237 176.349803) (xy 114.739217 176.340097) (xy 114.682897 176.204127) + (xy 114.68289 176.204114) (xy 114.595289 176.073011) (xy 114.595286 176.073007) (xy 114.483792 175.961513) + (xy 114.483788 175.96151) (xy 114.352685 175.873909) (xy 114.352672 175.873902) (xy 114.207001 175.813564) + (xy 114.206989 175.813561) (xy 114.052345 175.7828) (xy 114.052342 175.7828) (xy 113.894658 175.7828) + (xy 113.894655 175.7828) (xy 113.74001 175.813561) (xy 113.739998 175.813564) (xy 113.594327 175.873902) + (xy 113.594314 175.873909) (xy 113.463211 175.96151) (xy 113.463207 175.961513) (xy 113.351713 176.073007) + (xy 113.35171 176.073011) (xy 113.264109 176.204114) (xy 113.264102 176.204127) (xy 113.203764 176.349798) + (xy 113.203761 176.349808) (xy 113.178894 176.474823) (xy 113.146509 176.536734) (xy 113.085793 176.571308) + (xy 113.016023 176.567568) (xy 113.009766 176.56488) (xy 113.009718 176.565002) (xy 113.00398 176.562702) + (xy 112.969353 176.548821) (xy 112.834987 176.494958) (xy 112.834977 176.494956) (xy 112.655992 176.458818) + (xy 112.655999 176.458818) (xy 112.484294 176.455865) (xy 112.473418 176.455678) (xy 112.473417 176.455678) + (xy 112.473414 176.455678) (xy 112.293297 176.485638) (xy 112.293284 176.485641) (xy 112.121563 176.547713) + (xy 112.107048 176.55617) (xy 112.106963 176.556219) (xy 112.099876 176.56034) (xy 112.09963 176.560408) + (xy 112.071838 176.576644) (xy 112.07159 176.576789) (xy 112.068863 176.577459) (xy 112.009246 176.593596) + (xy 111.968901 176.593593) (xy 111.968797 176.5936) (xy 110.528096 176.5936) (xy 110.519914 176.593598) + (xy 110.519892 176.593593) (xy 110.489965 176.593595) (xy 110.487728 176.593595) (xy 110.487446 176.593512) + (xy 110.425193 176.576662) (xy 110.397371 176.560408) (xy 110.391305 176.556864) (xy 110.389607 176.556017) + (xy 110.382257 176.551734) (xy 110.375421 176.54775) (xy 110.203697 176.485678) (xy 110.203691 176.485677) + (xy 110.023581 176.455719) (xy 110.023578 176.455719) (xy 110.015039 176.455865) (xy 109.841007 176.458859) + (xy 109.662034 176.494994) (xy 109.662023 176.494997) (xy 109.492542 176.562937) (xy 109.492541 176.562937) + (xy 109.338161 176.660432) (xy 109.338158 176.660434) (xy 109.203967 176.784273) (xy 109.094415 176.930354) + (xy 109.01312 177.093844) (xy 109.013119 177.093847) (xy 109.013118 177.09385) (xy 108.992529 177.165609) + (xy 108.962758 177.269365) (xy 108.945004 177.451091) (xy 108.945004 177.451093) (xy 108.947299 177.478142) + (xy 108.960423 177.632842) (xy 108.96044 177.633035) (xy 108.989643 177.73994) (xy 109.008556 177.809178) + (xy 109.00856 177.809188) (xy 109.015798 177.82427) (xy 109.01584 177.824356) (xy 109.019423 177.831838) + (xy 109.019481 177.83214) (xy 109.035797 177.866025) (xy 109.035836 177.866106) (xy 109.035981 177.867) + (xy 109.048001 177.919669) (xy 109.048001 179.268522) (xy 109.035807 179.322145) (xy 109.035219 179.323371) + (xy 109.035139 179.323538) (xy 109.016266 179.362737) (xy 109.015942 179.363539) (xy 109.008518 179.37901) + (xy 108.960401 179.555154) (xy 108.960401 179.555156) (xy 108.944965 179.737106) (xy 89.739477 179.737106) + (xy 89.739497 179.736903) (xy 89.72406 179.55496) (xy 89.724058 179.554954) (xy 89.71331 179.515606) + (xy 89.675943 179.378818) (xy 89.668279 179.362849) (xy 89.665096 179.356204) (xy 89.665048 179.355946) + (xy 89.648671 179.321919) (xy 89.648543 179.32113) (xy 89.636502 179.268331) (xy 89.636502 179.268322) + (xy 89.636507 179.230908) (xy 89.636506 179.230904) (xy 89.636507 179.222898) (xy 89.636499 179.22276) + (xy 89.636499 177.919477) (xy 89.639154 177.907808) (xy 89.63812 177.899494) (xy 89.648705 177.865828) + (xy 89.655011 177.85269) (xy 89.665074 177.831774) (xy 89.665074 177.831769) (xy 89.66846 177.824733) + (xy 89.668625 177.824322) (xy 89.668746 177.82407) (xy 89.675983 177.808991) (xy 89.7241 177.632842) + (xy 89.739537 177.450893) (xy 89.721781 177.269155) (xy 89.67142 177.093634) (xy 89.590118 176.93013) + (xy 89.489412 176.795846) (xy 89.480562 176.784045) (xy 89.471227 176.77543) (xy 89.346369 176.660204) + (xy 89.346366 176.660202) (xy 89.346365 176.660201) (xy 89.346362 176.660199) (xy 89.191977 176.562701) + (xy 89.022487 176.494758) (xy 89.022477 176.494756) (xy 88.843492 176.458618) (xy 88.843499 176.458618) + (xy 88.671794 176.455665) (xy 88.660918 176.455478) (xy 88.660917 176.455478) (xy 88.660914 176.455478) + (xy 88.480797 176.485438) (xy 88.480784 176.485441) (xy 88.309063 176.547513) (xy 88.294548 176.55597) + (xy 88.294463 176.556019) (xy 88.287376 176.56014) (xy 88.28713 176.560208) (xy 88.259338 176.576444) + (xy 88.25909 176.576589) (xy 88.256363 176.577259) (xy 88.196746 176.593396) (xy 88.156401 176.593393) + (xy 88.156297 176.5934) (xy 86.715596 176.5934) (xy 86.707414 176.593398) (xy 86.707392 176.593393) + (xy 86.677465 176.593395) (xy 86.675228 176.593395) (xy 86.674946 176.593312) (xy 86.612693 176.576462) + (xy 86.584871 176.560208) (xy 86.578805 176.556664) (xy 86.577107 176.555817) (xy 86.569757 176.551534) + (xy 86.562921 176.54755) (xy 86.391197 176.485478) (xy 86.391191 176.485477) (xy 86.211081 176.455519) + (xy 86.211078 176.455519) (xy 86.202539 176.455665) (xy 86.028507 176.458659) (xy 85.849534 176.494794) + (xy 85.849523 176.494797) (xy 85.680042 176.562737) (xy 85.680041 176.562737) (xy 85.525661 176.660232) + (xy 85.525658 176.660234) (xy 85.391467 176.784073) (xy 85.281915 176.930154) (xy 85.20062 177.093644) + (xy 85.200619 177.093647) (xy 85.200618 177.09365) (xy 85.175438 177.181406) (xy 85.150258 177.269165) + (xy 85.132579 177.450125) (xy 85.132504 177.450893) (xy 85.133472 177.462297) (xy 85.147257 177.624794) + (xy 85.14794 177.632835) (xy 85.180797 177.753117) (xy 85.196056 177.808978) (xy 85.19606 177.808988) + (xy 85.203298 177.82407) (xy 85.20334 177.824156) (xy 85.206923 177.831638) (xy 85.206981 177.83194) + (xy 85.223297 177.865825) (xy 85.223336 177.865906) (xy 85.223481 177.8668) (xy 85.235501 177.919469) + (xy 85.235501 179.268322) (xy 85.223307 179.321945) (xy 85.222719 179.323171) (xy 85.222639 179.323338) + (xy 85.203766 179.362537) (xy 85.203442 179.363339) (xy 85.196018 179.37881) (xy 85.147901 179.554954) + (xy 85.147901 179.554956) (xy 85.135852 179.69698) (xy 85.133102 179.729403) (xy 85.132465 179.736906) + (xy 66.169608 179.736906) (xy 66.178597 179.644903) (xy 66.16316 179.46296) (xy 66.163158 179.462954) + (xy 66.140226 179.379007) (xy 66.115043 179.286818) (xy 66.107283 179.270649) (xy 66.104196 179.264204) + (xy 66.104148 179.263946) (xy 66.087771 179.229919) (xy 66.087643 179.22913) (xy 66.075602 179.176331) + (xy 66.075603 179.168471) (xy 66.075607 179.138908) (xy 66.075606 179.138904) (xy 66.075607 179.130898) + (xy 66.075599 179.13076) (xy 66.075599 177.827477) (xy 66.078254 177.815808) (xy 66.07722 177.807494) + (xy 66.087805 177.773828) (xy 66.094111 177.76069) (xy 66.104174 177.739774) (xy 66.104174 177.739769) + (xy 66.10756 177.732733) (xy 66.107725 177.732322) (xy 66.107846 177.73207) (xy 66.115083 177.716991) + (xy 66.1632 177.540842) (xy 66.178637 177.358893) (xy 66.160881 177.177155) (xy 66.11052 177.001634) + (xy 66.029218 176.83813) (xy 65.956191 176.740754) (xy 65.919662 176.692045) (xy 65.887264 176.662146) + (xy 65.785469 176.568204) (xy 65.785466 176.568202) (xy 65.785465 176.568201) (xy 65.785462 176.568199) + (xy 65.631077 176.470701) (xy 65.461587 176.402758) (xy 65.461577 176.402756) (xy 65.282592 176.366618) + (xy 65.282599 176.366618) (xy 65.110894 176.363665) (xy 65.100018 176.363478) (xy 65.100017 176.363478) + (xy 65.100014 176.363478) (xy 64.919897 176.393438) (xy 64.919884 176.393441) (xy 64.748163 176.455513) + (xy 64.733648 176.46397) (xy 64.733563 176.464019) (xy 64.726476 176.46814) (xy 64.72623 176.468208) + (xy 64.698438 176.484444) (xy 64.69819 176.484589) (xy 64.695463 176.485259) (xy 64.635846 176.501396) + (xy 64.595501 176.501393) (xy 64.595397 176.5014) (xy 63.154696 176.5014) (xy 63.146514 176.501398) + (xy 63.146492 176.501393) (xy 63.116565 176.501395) (xy 63.114328 176.501395) (xy 63.114046 176.501312) + (xy 63.051793 176.484462) (xy 63.023971 176.468208) (xy 63.017905 176.464664) (xy 63.016207 176.463817) + (xy 63.007355 176.458659) (xy 63.002021 176.45555) (xy 62.830297 176.393478) (xy 62.830291 176.393477) + (xy 62.650181 176.363519) (xy 62.650178 176.363519) (xy 62.641639 176.363665) (xy 62.467607 176.366659) + (xy 62.288634 176.402794) (xy 62.288623 176.402797) (xy 62.119142 176.470737) (xy 62.119141 176.470737) + (xy 61.964761 176.568232) (xy 61.964758 176.568234) (xy 61.830567 176.692073) (xy 61.721015 176.838154) + (xy 61.63972 177.001644) (xy 61.639719 177.001647) (xy 61.639718 177.00165) (xy 61.618816 177.0745) + (xy 61.589358 177.177165) (xy 61.572859 177.346047) (xy 61.571604 177.358893) (xy 61.573717 177.383799) + (xy 61.58673 177.537189) (xy 61.58704 177.540835) (xy 61.618032 177.654291) (xy 61.635156 177.716978) + (xy 61.63516 177.716988) (xy 61.642398 177.73207) (xy 61.64244 177.732156) (xy 61.646023 177.739638) + (xy 61.646081 177.73994) (xy 61.662397 177.773825) (xy 61.662436 177.773906) (xy 61.662581 177.7748) + (xy 61.674601 177.827469) (xy 61.674601 179.176323) (xy 61.662413 179.229933) (xy 61.661876 179.231053) + (xy 61.661789 179.231234) (xy 61.642864 179.27054) (xy 61.642542 179.271337) (xy 61.635119 179.286805) + (xy 61.587001 179.462954) (xy 61.587001 179.462956) (xy 61.576507 179.586655) (xy 61.551226 179.651791) + (xy 61.494743 179.692918) (xy 61.424991 179.69698) (xy 61.405501 179.690735) (xy 61.383601 179.681664) + (xy 61.383589 179.681661) (xy 61.228945 179.6509) (xy 61.228942 179.6509) (xy 61.071258 179.6509) + (xy 61.071255 179.6509) (xy 60.91661 179.681661) (xy 60.916598 179.681664) (xy 60.770927 179.742002) + (xy 60.770914 179.742009) (xy 60.639811 179.82961) (xy 60.639807 179.829613) (xy 60.528313 179.941107) + (xy 60.52831 179.941111) (xy 60.440709 180.072214) (xy 60.440702 180.072227) (xy 60.380364 180.217898) + (xy 60.380361 180.21791) (xy 60.3496 180.372553) (xy 45.35175 180.372553) (xy 45.35175 121.020013) + (xy 48.2633 121.020013) (xy 48.2633 121.232587) (xy 48.269125 121.269363) (xy 48.295611 121.436594) + (xy 48.296554 121.442543) (xy 48.350065 121.607233) (xy 48.362244 121.644714) (xy 48.458751 121.83412) + (xy 48.58369 122.006086) (xy 48.734013 122.156409) (xy 48.905982 122.28135) (xy 48.914746 122.285816) + (xy 48.965542 122.333791) (xy 48.982336 122.401612) (xy 48.959798 122.467747) (xy 48.914746 122.506784) + (xy 48.905982 122.511249) (xy 48.734013 122.63619) (xy 48.58369 122.786513) (xy 48.458751 122.958479) + (xy 48.362244 123.147885) (xy 48.296553 123.35006) (xy 48.2633 123.560013) (xy 48.2633 123.772586) + (xy 48.294768 123.971272) (xy 48.296554 123.982543) (xy 48.352008 124.153213) (xy 48.362244 124.184714) + (xy 48.458751 124.37412) (xy 48.58369 124.546086) (xy 48.69723 124.659626) (xy 48.730715 124.720949) + (xy 48.725731 124.790641) (xy 48.683859 124.846574) (xy 48.652883 124.863489) (xy 48.521469 124.912503) + (xy 48.521464 124.912506) (xy 48.406255 124.998752) (xy 48.406252 124.998755) (xy 48.320006 125.113964) + (xy 48.320002 125.113971) (xy 48.269708 125.248817) (xy 48.265787 125.285292) (xy 48.263301 125.308423) + (xy 48.2633 125.308435) (xy 48.2633 127.10417) (xy 48.263301 127.104172) (xy 48.263922 127.109957) + (xy 48.269708 127.163783) (xy 48.320002 127.298628) (xy 48.320006 127.298635) (xy 48.406252 127.413844) + (xy 48.406255 127.413847) (xy 48.521464 127.500093) (xy 48.521471 127.500097) (xy 48.656317 127.550391) + (xy 48.656316 127.550391) (xy 48.663244 127.551135) (xy 48.715927 127.5568) (xy 50.511672 127.556799) + (xy 50.571283 127.550391) (xy 50.706131 127.500096) (xy 50.821346 127.413846) (xy 50.907596 127.298631) + (xy 50.957891 127.163783) (xy 50.9643 127.104173) (xy 50.964299 125.308428) (xy 50.957891 125.248817) + (xy 50.940708 125.202748) (xy 50.907597 125.113971) (xy 50.907593 125.113964) (xy 50.821347 124.998755) + (xy 50.821344 124.998752) (xy 50.706135 124.912506) (xy 50.706128 124.912502) (xy 50.574717 124.863489) + (xy 50.518783 124.821618) (xy 50.494366 124.756153) (xy 50.509218 124.68788) (xy 50.530363 124.659632) + (xy 50.643904 124.546092) (xy 50.768851 124.374116) (xy 50.865357 124.184712) (xy 50.931046 123.982543) + (xy 50.9643 123.772587) (xy 50.9643 123.560013) (xy 50.931046 123.350057) (xy 50.865357 123.147888) + (xy 50.768851 122.958484) (xy 50.768849 122.958481) (xy 50.768848 122.958479) (xy 50.643909 122.786513) + (xy 50.493586 122.63619) (xy 50.32162 122.511251) (xy 50.320915 122.510891) (xy 50.312854 122.506785) + (xy 50.262059 122.458812) (xy 50.245263 122.390992) (xy 50.267799 122.324856) (xy 50.312854 122.285815) + (xy 50.321616 122.281351) (xy 50.364547 122.25016) (xy 50.493586 122.156409) (xy 50.493588 122.156406) + (xy 50.493592 122.156404) (xy 50.643904 122.006092) (xy 50.643906 122.006088) (xy 50.643909 122.006086) + (xy 50.768848 121.83412) (xy 50.768847 121.83412) (xy 50.768851 121.834116) (xy 50.865357 121.644712) + (xy 50.931046 121.442543) (xy 50.9643 121.232587) (xy 50.9643 121.020013) (xy 50.931046 120.810057) + (xy 50.865357 120.607888) (xy 50.768851 120.418484) (xy 50.768849 120.418481) (xy 50.768848 120.418479) + (xy 50.643909 120.246513) (xy 50.493586 120.09619) (xy 50.321617 119.971249) (xy 50.312304 119.966504) + (xy 50.261507 119.91853) (xy 50.244712 119.850709) (xy 50.267249 119.784574) (xy 50.312307 119.745532) + (xy 50.321355 119.740922) (xy 50.375516 119.70157) (xy 50.375517 119.70157) (xy 49.743208 119.069262) + (xy 49.806793 119.052225) (xy 49.920807 118.986399) (xy 50.013899 118.893307) (xy 50.079725 118.779293) + (xy 50.096762 118.715708) (xy 50.72907 119.348017) (xy 50.72907 119.348016) (xy 50.768422 119.293854) + (xy 50.864895 119.104517) (xy 50.930557 118.90243) (xy 50.930557 118.902427) (xy 50.9638 118.692546) + (xy 50.9638 118.480053) (xy 50.930557 118.270172) (xy 50.930557 118.270169) (xy 50.864895 118.068082) + (xy 50.768424 117.878749) (xy 50.72907 117.824582) (xy 50.729069 117.824582) (xy 50.096762 118.45689) + (xy 50.079725 118.393307) (xy 50.013899 118.279293) (xy 49.920807 118.186201) (xy 49.806793 118.120375) + (xy 49.743209 118.103337) (xy 50.375516 117.471028) (xy 50.32135 117.431675) (xy 50.132017 117.335204) + (xy 49.929929 117.269542) (xy 49.720046 117.2363) (xy 49.507554 117.2363) (xy 49.297672 117.269542) + (xy 49.297669 117.269542) (xy 49.095582 117.335204) (xy 48.906239 117.43168) (xy 48.852082 117.471027) + (xy 48.852082 117.471028) (xy 49.484391 118.103337) (xy 49.420807 118.120375) (xy 49.306793 118.186201) + (xy 49.213701 118.279293) (xy 49.147875 118.393307) (xy 49.130837 118.456891) (xy 48.498528 117.824582) + (xy 48.498527 117.824582) (xy 48.45918 117.878739) (xy 48.362704 118.068082) (xy 48.297042 118.270169) + (xy 48.297042 118.270172) (xy 48.2638 118.480053) (xy 48.2638 118.692546) (xy 48.297042 118.902427) + (xy 48.297042 118.90243) (xy 48.362704 119.104517) (xy 48.459175 119.29385) (xy 48.498528 119.348016) + (xy 49.130837 118.715708) (xy 49.147875 118.779293) (xy 49.213701 118.893307) (xy 49.306793 118.986399) + (xy 49.420807 119.052225) (xy 49.48439 119.069262) (xy 48.852082 119.701569) (xy 48.852082 119.70157) + (xy 48.906252 119.740926) (xy 48.906251 119.740926) (xy 48.915295 119.745534) (xy 48.966092 119.793508) + (xy 48.982887 119.861329) (xy 48.96035 119.927464) (xy 48.915299 119.966502) (xy 48.905982 119.971249) + (xy 48.734013 120.09619) (xy 48.58369 120.246513) (xy 48.458751 120.418479) (xy 48.362244 120.607885) + (xy 48.296553 120.81006) (xy 48.26693 120.997097) (xy 48.2633 121.020013) (xy 45.35175 121.020013) + (xy 45.35175 95.012353) (xy 53.2845 95.012353) (xy 53.2845 95.170046) (xy 53.315261 95.324689) (xy 53.315264 95.324701) + (xy 53.375602 95.470372) (xy 53.375609 95.470385) (xy 53.46321 95.601488) (xy 53.463213 95.601492) + (xy 53.574707 95.712986) (xy 53.574711 95.712989) (xy 53.705814 95.80059) (xy 53.705818 95.800592) + (xy 53.705821 95.800594) (xy 53.780954 95.831715) (xy 53.835356 95.875554) (xy 53.857421 95.941848) + (xy 53.8575 95.946275) (xy 53.8575 109.333754) (xy 53.857498 109.333759) (xy 53.8575 109.361021) + (xy 53.8575 109.424253) (xy 53.857502 109.42426) (xy 53.857503 109.424265) (xy 53.873494 109.462865) + (xy 53.87402 109.464136) (xy 53.874036 109.464176) (xy 53.888906 109.500072) (xy 53.892094 109.50777) + (xy 53.892138 109.507875) (xy 53.930266 109.546) (xy 53.93028 109.546013) (xy 53.930295 109.546028) + (xy 53.956132 109.571865) (xy 53.956136 109.571866) (xy 53.968053 109.583782) (xy 53.968054 109.583783) + (xy 55.998113 111.613629) (xy 58.079307 113.694606) (xy 58.08198 113.697278) (xy 58.115468 113.7586) + (xy 58.110487 113.828291) (xy 58.108864 113.832416) (xy 58.077764 113.907498) (xy 58.077761 113.90751) + (xy 58.047 114.062153) (xy 58.047 114.219846) (xy 58.077761 114.374489) (xy 58.077764 114.374501) + (xy 58.138102 114.520172) (xy 58.138109 114.520185) (xy 58.22571 114.651288) (xy 58.225713 114.651292) + (xy 58.337207 114.762786) (xy 58.337211 114.762789) (xy 58.468314 114.85039) (xy 58.468318 114.850392) + (xy 58.468321 114.850394) (xy 58.543454 114.881515) (xy 58.597856 114.925354) (xy 58.619921 114.991648) + (xy 58.62 114.996075) (xy 58.62 130.689756) (xy 58.619998 130.689761) (xy 58.62 130.725963) (xy 58.62 130.780253) + (xy 58.620002 130.78026) (xy 58.620003 130.780267) (xy 58.640083 130.828738) (xy 58.640389 130.829477) + (xy 58.640425 130.829567) (xy 58.654636 130.863873) (xy 58.654641 130.863878) (xy 58.654642 130.86388) + (xy 58.695555 130.904788) (xy 58.718632 130.927865) (xy 58.718634 130.927865) (xy 58.730548 130.939778) + (xy 58.730553 130.939782) (xy 59.665361 131.874475) (xy 60.241441 132.450485) (xy 60.538276 132.747283) + (xy 60.571765 132.808604) (xy 60.566784 132.878296) (xy 60.565162 132.882421) (xy 60.534063 132.957503) + (xy 60.534061 132.95751) (xy 60.5033 133.112153) (xy 60.5033 133.269846) (xy 60.534061 133.424489) + (xy 60.534064 133.424501) (xy 60.594402 133.570172) (xy 60.594409 133.570185) (xy 60.68201 133.701288) + (xy 60.682013 133.701292) (xy 60.793507 133.812786) (xy 60.793511 133.812789) (xy 60.924614 133.90039) + (xy 60.924618 133.900392) (xy 60.924621 133.900394) (xy 60.999754 133.931515) (xy 61.054156 133.975354) + (xy 61.076221 134.041648) (xy 61.0763 134.046075) (xy 61.0763 144.877754) (xy 61.076298 144.877759) + (xy 61.0763 144.911132) (xy 61.0763 144.968253) (xy 61.076302 144.96826) (xy 61.076303 144.968265) + (xy 61.087274 144.994747) (xy 61.087954 144.99639) (xy 61.087974 144.996441) (xy 61.110934 145.051869) + (xy 61.11094 145.051877) (xy 61.149066 145.09) (xy 61.14908 145.090013) (xy 61.149095 145.090028) + (xy 61.174932 145.115865) (xy 61.174936 145.115866) (xy 61.186853 145.127782) (xy 61.186854 145.127783) + (xy 61.361516 145.302427) (xy 61.791896 145.732762) (xy 61.948014 145.888863) (xy 61.981502 145.950185) + (xy 61.976521 146.019876) (xy 61.934653 146.075812) (xy 61.86919 146.100233) (xy 61.844152 146.099488) + (xy 61.63309 146.071701) (xy 61.633085 146.0717) (xy 61.63308 146.0717) (xy 61.40702 146.0717) (xy 61.407012 146.0717) + (xy 61.195952 146.099488) (xy 61.182895 146.101207) (xy 61.110109 146.120709) (xy 60.964544 146.159713) + (xy 60.96454 146.159714) (xy 60.964538 146.159715) (xy 60.755687 146.246225) (xy 60.755684 146.246226) + (xy 60.755676 146.24623) (xy 60.559914 146.359253) (xy 60.38057 146.496868) (xy 60.380563 146.496874) + (xy 60.220724 146.656713) (xy 60.220718 146.65672) (xy 60.083103 146.836064) (xy 59.97008 147.031826) + (xy 59.970075 147.031838) (xy 59.883568 147.240681) (xy 59.883563 147.240694) (xy 59.868145 147.298237) + (xy 59.830144 147.440062) (xy 59.825058 147.459042) (xy 59.825056 147.459053) (xy 59.79555 147.683162) + (xy 59.79555 147.909237) (xy 59.811798 148.032643) (xy 59.825057 148.133355) (xy 59.883565 148.351712) + (xy 59.970075 148.560563) (xy 59.970077 148.560568) (xy 59.97008 148.560573) (xy 60.083103 148.756335) + (xy 60.220718 148.935679) (xy 60.220724 148.935686) (xy 60.380563 149.095525) (xy 60.38057 149.095531) + (xy 60.559914 149.233146) (xy 60.755676 149.346169) (xy 60.755678 149.346169) (xy 60.755687 149.346175) + (xy 60.964538 149.432685) (xy 61.182895 149.491193) (xy 61.40702 149.5207) (xy 61.407027 149.5207) + (xy 61.633073 149.5207) (xy 61.63308 149.5207) (xy 61.857205 149.491193) (xy 62.075562 149.432685) + (xy 62.284413 149.346175) (xy 62.480186 149.233146) (xy 62.659531 149.09553) (xy 62.81938 148.935681) + (xy 62.956996 148.756336) (xy 63.070025 148.560563) (xy 63.156535 148.351712) (xy 63.215043 148.133355) + (xy 63.24455 147.90923) (xy 63.24455 147.68317) (xy 63.216737 147.471915) (xy 63.227502 147.402884) + (xy 63.273882 147.350628) (xy 63.341151 147.331742) (xy 63.407951 147.352222) (xy 63.427353 147.368047) + (xy 63.840647 147.781297) (xy 65.802477 149.742922) (xy 65.835965 149.804243) (xy 65.8388 149.830607) + (xy 65.8388 151.385924) (xy 65.819115 151.452963) (xy 65.766311 151.498718) (xy 65.762253 151.500485) + (xy 65.687124 151.531604) (xy 65.687114 151.531609) (xy 65.556011 151.61921) (xy 65.556007 151.619213) + (xy 65.444513 151.730707) (xy 65.44451 151.730711) (xy 65.356909 151.861814) (xy 65.356902 151.861827) + (xy 65.296564 152.007498) (xy 65.296561 152.00751) (xy 65.2658 152.162153) (xy 65.2658 152.319846) + (xy 65.296561 152.474489) (xy 65.296564 152.474501) (xy 65.327683 152.549629) (xy 65.335152 152.619098) + (xy 65.303876 152.681577) (xy 65.300803 152.684762) (xy 59.213138 158.772429) (xy 57.187432 160.798135) + (xy 57.123435 160.862132) (xy 57.112122 160.889444) (xy 57.0888 160.945746) (xy 57.0888 170.498924) + (xy 57.069115 170.565963) (xy 57.016311 170.611718) (xy 57.012253 170.613485) (xy 56.937124 170.644604) + (xy 56.937114 170.644609) (xy 56.806011 170.73221) (xy 56.806007 170.732213) (xy 56.694513 170.843707) + (xy 56.69451 170.843711) (xy 56.606909 170.974814) (xy 56.606902 170.974827) (xy 56.546564 171.120498) + (xy 56.546561 171.12051) (xy 56.5158 171.275153) (xy 56.5158 171.432846) (xy 56.546561 171.587489) + (xy 56.546564 171.587501) (xy 56.606902 171.733172) (xy 56.606909 171.733185) (xy 56.69451 171.864288) + (xy 56.694513 171.864292) (xy 56.806007 171.975786) (xy 56.806011 171.975789) (xy 56.937114 172.06339) + (xy 56.937127 172.063397) (xy 57.082798 172.123735) (xy 57.082803 172.123737) (xy 57.236714 172.154352) + (xy 57.237453 172.154499) (xy 57.237456 172.1545) (xy 57.237458 172.1545) (xy 57.395144 172.1545) + (xy 57.395145 172.154499) (xy 57.549797 172.123737) (xy 57.695479 172.063394) (xy 57.726226 172.042849) + (xy 57.792901 172.02197) (xy 57.860282 172.040453) (xy 57.906973 172.09243) (xy 57.909677 172.098493) + (xy 57.943333 172.179746) (xy 58.023614 172.373561) (xy 58.023618 172.373571) (xy 58.174399 172.634731) + (xy 58.294272 172.790954) (xy 58.319466 172.856123) (xy 58.305427 172.924568) (xy 58.260691 172.972164) + (xy 58.257615 172.974048) (xy 58.120665 173.073548) (xy 58.12066 173.073552) (xy 58.000952 173.19326) + (xy 58.000948 173.193265) (xy 57.901452 173.330211) (xy 57.824596 173.481046) (xy 57.772281 173.642052) + (xy 57.7458 173.80925) (xy 57.7458 173.978549) (xy 57.772281 174.145747) (xy 57.824596 174.306753) + (xy 57.901452 174.457588) (xy 58.000948 174.594534) (xy 58.000952 174.594539) (xy 58.12066 174.714247) + (xy 58.120665 174.714251) (xy 58.240117 174.801037) (xy 58.257615 174.81375) (xy 58.353725 174.86272) + (xy 58.408446 174.890603) (xy 58.408448 174.890603) (xy 58.408451 174.890605) (xy 58.467681 174.90985) + (xy 58.569452 174.942918) (xy 58.736651 174.9694) (xy 58.736656 174.9694) (xy 58.905949 174.9694) + (xy 59.073147 174.942918) (xy 59.234149 174.890605) (xy 59.384985 174.81375) (xy 59.521941 174.714246) + (xy 59.641646 174.594541) (xy 59.74115 174.457585) (xy 59.818005 174.306749) (xy 59.870318 174.145747) + (xy 59.881579 174.074649) (xy 59.8968 173.978549) (xy 59.8968 173.80925) (xy 59.894986 173.797798) + (xy 59.90394 173.728505) (xy 59.948936 173.675053) (xy 60.015688 173.654413) (xy 60.017459 173.6544) + (xy 60.242076 173.6544) (xy 60.242083 173.6544) (xy 60.541068 173.615038) (xy 60.832358 173.536987) + (xy 61.110968 173.421583) (xy 61.372132 173.2708) (xy 61.608516 173.089416) (xy 61.673684 173.064223) + (xy 61.742129 173.078261) (xy 61.792118 173.127075) (xy 61.807782 173.195167) (xy 61.803775 173.219886) + (xy 61.738808 173.462353) (xy 61.738452 173.46368) (xy 61.738449 173.463693) (xy 61.700801 173.749661) + (xy 61.7008 173.749678) (xy 61.7008 174.038121) (xy 61.700801 174.038138) (xy 61.738449 174.324106) + (xy 61.73845 174.324111) (xy 61.738451 174.324117) (xy 61.810909 174.594534) (xy 61.813109 174.602744) + (xy 61.813114 174.60276) (xy 61.923491 174.869236) (xy 61.923499 174.869252) (xy 62.06772 175.119048) + (xy 62.067731 175.119064) (xy 62.243324 175.347902) (xy 62.24333 175.347909) (xy 62.44729 175.551869) + (xy 62.447297 175.551875) (xy 62.610253 175.676915) (xy 62.676144 175.727475) (xy 62.676151 175.727479) + (xy 62.925947 175.8717) (xy 62.925963 175.871708) (xy 63.192439 175.982085) (xy 63.192445 175.982086) + (xy 63.192455 175.982091) (xy 63.471083 176.056749) (xy 63.757072 176.0944) (xy 63.757079 176.0944) + (xy 64.045521 176.0944) (xy 64.045528 176.0944) (xy 64.331517 176.056749) (xy 64.610145 175.982091) + (xy 64.610157 175.982085) (xy 64.61016 175.982085) (xy 64.876636 175.871708) (xy 64.876639 175.871706) + (xy 64.876645 175.871704) (xy 65.126456 175.727475) (xy 65.355304 175.551874) (xy 65.559274 175.347904) + (xy 65.734875 175.119056) (xy 65.879104 174.869245) (xy 65.896146 174.828103) (xy 65.989485 174.60276) + (xy 65.989485 174.602757) (xy 65.989491 174.602745) (xy 66.064149 174.324117) (xy 66.1018 174.038128) + (xy 66.1018 173.80925) (xy 67.9058 173.80925) (xy 67.9058 173.978549) (xy 67.932281 174.145747) + (xy 67.984596 174.306753) (xy 68.061452 174.457588) (xy 68.160948 174.594534) (xy 68.160952 174.594539) + (xy 68.28066 174.714247) (xy 68.280665 174.714251) (xy 68.400117 174.801037) (xy 68.417615 174.81375) + (xy 68.513725 174.86272) (xy 68.568446 174.890603) (xy 68.568448 174.890603) (xy 68.568451 174.890605) + (xy 68.627681 174.90985) (xy 68.729452 174.942918) (xy 68.896651 174.9694) (xy 68.896656 174.9694) + (xy 69.065949 174.9694) (xy 69.233147 174.942918) (xy 69.394149 174.890605) (xy 69.544985 174.81375) + (xy 69.681941 174.714246) (xy 69.801646 174.594541) (xy 69.90115 174.457585) (xy 69.978005 174.306749) + (xy 70.030318 174.145747) (xy 70.041579 174.074649) (xy 70.0568 173.978549) (xy 70.0568 173.80925) + (xy 70.030318 173.642052) (xy 69.989908 173.517685) (xy 69.978005 173.481051) (xy 69.978003 173.481048) + (xy 69.978003 173.481046) (xy 69.947703 173.421581) (xy 69.90115 173.330215) (xy 69.871467 173.28936) + (xy 69.801651 173.193265) (xy 69.801647 173.19326) (xy 69.681939 173.073552) (xy 69.681934 173.073548) + (xy 69.544988 172.974052) (xy 69.544987 172.974051) (xy 69.544985 172.97405) (xy 69.480084 172.940981) + (xy 69.394153 172.897196) (xy 69.233147 172.844881) (xy 69.065949 172.8184) (xy 69.065944 172.8184) + (xy 68.896656 172.8184) (xy 68.896651 172.8184) (xy 68.729452 172.844881) (xy 68.568446 172.897196) + (xy 68.417611 172.974052) (xy 68.280665 173.073548) (xy 68.28066 173.073552) (xy 68.160952 173.19326) + (xy 68.160948 173.193265) (xy 68.061452 173.330211) (xy 67.984596 173.481046) (xy 67.932281 173.642052) + (xy 67.9058 173.80925) (xy 66.1018 173.80925) (xy 66.1018 173.749672) (xy 66.064149 173.463683) + (xy 65.989491 173.185055) (xy 65.989486 173.185045) (xy 65.989485 173.185039) (xy 65.879108 172.918563) + (xy 65.8791 172.918547) (xy 65.734879 172.668751) (xy 65.734875 172.668744) (xy 65.633014 172.535996) + (xy 65.559275 172.439897) (xy 65.559269 172.43989) (xy 65.355309 172.23593) (xy 65.355302 172.235924) + (xy 65.126464 172.060331) (xy 65.126462 172.060329) (xy 65.126456 172.060325) (xy 65.126451 172.060322) + (xy 65.126448 172.06032) (xy 64.876652 171.916099) (xy 64.876636 171.916091) (xy 64.61016 171.805714) + (xy 64.610148 171.80571) (xy 64.610145 171.805709) (xy 64.331517 171.731051) (xy 64.331511 171.73105) + (xy 64.331506 171.731049) (xy 64.045538 171.693401) (xy 64.045533 171.6934) (xy 64.045528 171.6934) + (xy 63.757072 171.6934) (xy 63.757066 171.6934) (xy 63.757061 171.693401) (xy 63.471093 171.731049) + (xy 63.471086 171.73105) (xy 63.471083 171.731051) (xy 63.252948 171.7895) (xy 63.192455 171.805709) + (xy 63.192439 171.805714) (xy 62.925963 171.916091) (xy 62.925947 171.916099) (xy 62.676151 172.06032) + (xy 62.676134 172.060331) (xy 62.471891 172.217052) (xy 62.406722 172.242246) (xy 62.338277 172.228207) + (xy 62.288287 172.179393) (xy 62.272624 172.111302) (xy 62.276627 172.086594) (xy 62.352438 171.803668) + (xy 62.3918 171.504683) (xy 62.3918 171.203117) (xy 62.352438 170.904132) (xy 62.274387 170.612842) + (xy 62.273921 170.611718) (xy 62.198787 170.430328) (xy 62.158983 170.334232) (xy 62.15884 170.333985) + (xy 62.0082 170.073068) (xy 61.82462 169.833821) (xy 61.824614 169.833814) (xy 61.611385 169.620585) + (xy 61.611378 169.620579) (xy 61.372131 169.436999) (xy 61.110968 169.286217) (xy 61.110961 169.286214) + (xy 60.83236 169.170813) (xy 60.541066 169.092761) (xy 60.242093 169.053401) (xy 60.242088 169.0534) + (xy 60.242083 169.0534) (xy 59.940517 169.0534) (xy 59.940511 169.0534) (xy 59.940506 169.053401) + (xy 59.641533 169.092761) (xy 59.350239 169.170813) (xy 59.071638 169.286214) (xy 59.071632 169.286217) + (xy 58.810468 169.436999) (xy 58.571221 169.620579) (xy 58.571214 169.620585) (xy 58.357985 169.833814) + (xy 58.357979 169.833821) (xy 58.174399 170.073068) (xy 58.023618 170.334228) (xy 58.023614 170.334238) + (xy 57.967515 170.469675) (xy 57.919745 170.585003) (xy 57.909615 170.609458) (xy 57.901312 170.61976) + (xy 57.897184 170.632328) (xy 57.879815 170.646436) (xy 57.865774 170.663861) (xy 57.853221 170.668038) + (xy 57.842952 170.676381) (xy 57.82071 170.678859) (xy 57.79948 170.685926) (xy 57.785104 170.682828) + (xy 57.773512 170.68412) (xy 57.75314 170.675939) (xy 57.739981 170.673104) (xy 57.732806 170.669547) + (xy 57.695479 170.644606) (xy 57.616484 170.611885) (xy 57.612727 170.610023) (xy 57.590014 170.589041) + (xy 57.565944 170.569644) (xy 57.564579 170.565544) (xy 57.561405 170.562612) (xy 57.553642 170.532684) + (xy 57.543879 170.50335) (xy 57.5438 170.498924) (xy 57.5438 162.892377) (xy 59.32565 162.892377) + (xy 59.32565 163.180022) (xy 59.325651 163.180038) (xy 59.363196 163.465223) (xy 59.437647 163.743078) + (xy 59.547725 164.008831) (xy 59.547733 164.008848) (xy 59.691554 164.257951) (xy 59.691565 164.257967) + (xy 59.866671 164.486171) (xy 59.866677 164.486178) (xy 60.070071 164.689572) (xy 60.070078 164.689578) + (xy 60.205032 164.793131) (xy 60.298291 164.864691) (xy 60.298298 164.864695) (xy 60.547401 165.008516) + (xy 60.547406 165.008518) (xy 60.547409 165.00852) (xy 60.547413 165.008521) (xy 60.547418 165.008524) + (xy 60.652773 165.052163) (xy 60.81317 165.118602) (xy 61.091025 165.193053) (xy 61.376221 165.2306) + (xy 61.376228 165.2306) (xy 61.663872 165.2306) (xy 61.663879 165.2306) (xy 61.949075 165.193053) + (xy 62.22693 165.118602) (xy 62.492691 165.00852) (xy 62.741809 164.864691) (xy 62.970023 164.689577) + (xy 63.173427 164.486173) (xy 63.348541 164.257959) (xy 63.49237 164.008841) (xy 63.602452 163.74308) + (xy 63.676903 163.465225) (xy 63.71445 163.180029) (xy 63.71445 162.892371) (xy 63.676903 162.607175) + (xy 63.602452 162.32932) (xy 63.524868 162.142015) (xy 63.492374 162.063568) (xy 63.492366 162.063551) + (xy 63.348545 161.814448) (xy 63.348541 161.814441) (xy 63.263754 161.703944) (xy 63.173428 161.586228) + (xy 63.173422 161.586221) (xy 62.970028 161.382827) (xy 62.970021 161.382821) (xy 62.741817 161.207715) + (xy 62.741815 161.207713) (xy 62.741809 161.207709) (xy 62.741804 161.207706) (xy 62.741801 161.207704) + (xy 62.492698 161.063883) (xy 62.492681 161.063875) (xy 62.226928 160.953797) (xy 61.949073 160.879346) + (xy 61.663888 160.841801) (xy 61.663885 160.8418) (xy 61.663879 160.8418) (xy 61.376221 160.8418) + (xy 61.376215 160.8418) (xy 61.376211 160.841801) (xy 61.091026 160.879346) (xy 60.813171 160.953797) + (xy 60.547418 161.063875) (xy 60.547401 161.063883) (xy 60.298298 161.207704) (xy 60.298282 161.207715) + (xy 60.070078 161.382821) (xy 60.070071 161.382827) (xy 59.866677 161.586221) (xy 59.866671 161.586228) + (xy 59.691565 161.814432) (xy 59.691554 161.814448) (xy 59.547733 162.063551) (xy 59.547725 162.063568) + (xy 59.437647 162.329321) (xy 59.363196 162.607176) (xy 59.325651 162.892361) (xy 59.32565 162.892377) + (xy 57.5438 162.892377) (xy 57.5438 161.136594) (xy 57.563485 161.069555) (xy 57.580114 161.048918) + (xy 57.942226 160.686806) (xy 71.440265 160.686806) (xy 71.457697 160.865233) (xy 71.458021 160.868542) + (xy 71.480172 160.945746) (xy 71.50838 161.044061) (xy 71.58968 161.207563) (xy 71.589681 161.207565) + (xy 71.589683 161.207568) (xy 71.652008 161.290674) (xy 71.699238 161.353652) (xy 71.699239 161.353653) + (xy 71.69924 161.353654) (xy 71.833432 161.477495) (xy 71.987825 161.574997) (xy 72.118077 161.62721) + (xy 72.157314 161.642939) (xy 72.157315 161.642939) (xy 72.157317 161.64294) (xy 72.336308 161.679079) + (xy 72.336302 161.679079) (xy 72.352622 161.679359) (xy 72.518884 161.68222) (xy 72.699012 161.652258) + (xy 72.754507 161.632198) (xy 72.870736 161.590185) (xy 72.870737 161.590183) (xy 72.87074 161.590183) + (xy 72.885131 161.581795) (xy 72.893911 161.57714) (xy 72.895007 161.576614) (xy 72.89694 161.576298) + (xy 72.899741 161.574525) (xy 72.90043 161.574237) (xy 72.901013 161.575633) (xy 72.924688 161.571767) + (xy 72.953872 161.564516) (xy 72.958812 161.566195) (xy 72.963963 161.565354) (xy 72.991553 161.577323) + (xy 73.020025 161.587001) (xy 73.023273 161.591084) (xy 73.028061 161.593162) (xy 73.0448 161.618148) + (xy 73.063519 161.641682) (xy 73.064043 161.646873) (xy 73.066949 161.65121) (xy 73.067521 161.681282) + (xy 73.070546 161.711198) (xy 73.068201 161.716951) (xy 73.06828 161.721067) (xy 73.063093 161.729485) + (xy 73.051761 161.757296) (xy 73.041862 161.77211) (xy 73.041852 161.772128) (xy 72.981514 161.917799) + (xy 72.981511 161.917811) (xy 72.95075 162.072454) (xy 72.95075 162.230146) (xy 72.981511 162.38479) + (xy 72.981514 162.384802) (xy 73.041852 162.530473) (xy 73.041859 162.530486) (xy 73.12946 162.661589) + (xy 73.129463 162.661593) (xy 73.240957 162.773087) (xy 73.240961 162.77309) (xy 73.372064 162.860691) + (xy 73.372077 162.860698) (xy 73.517748 162.921036) (xy 73.517753 162.921038) (xy 73.672403 162.9518) + (xy 73.672406 162.951801) (xy 73.672408 162.951801) (xy 73.830094 162.951801) (xy 73.830095 162.9518) + (xy 73.984747 162.921038) (xy 74.130429 162.860695) (xy 74.261539 162.77309) (xy 74.373039 162.66159) + (xy 74.460644 162.53048) (xy 74.520987 162.384798) (xy 74.536536 162.306629) (xy 74.55175 162.230146) + (xy 74.55175 162.072456) (xy 74.551749 162.072454) (xy 74.54042 162.015498) (xy 74.520987 161.917804) + (xy 74.514944 161.903214) (xy 74.460647 161.772128) (xy 74.460644 161.772122) (xy 74.45964 161.77062) + (xy 74.459355 161.769711) (xy 74.457771 161.766747) (xy 74.458332 161.766446) (xy 74.438757 161.703944) + (xy 74.457237 161.636562) (xy 74.509212 161.589868) (xy 74.578181 161.578687) (xy 74.611572 161.588326) + (xy 74.611603 161.588243) (xy 74.612864 161.588698) (xy 74.615241 161.589385) (xy 74.616874 161.590148) + (xy 74.616875 161.590148) (xy 74.616878 161.59015) (xy 74.7886 161.652221) (xy 74.968721 161.682182) + (xy 75.148398 161.67909) (xy 75.151291 161.679041) (xy 75.330266 161.642905) (xy 75.330269 161.642903) + (xy 75.330274 161.642903) (xy 75.49976 161.574962) (xy 75.654146 161.477463) (xy 75.668037 161.464644) + (xy 75.78833 161.35363) (xy 75.788332 161.353628) (xy 75.788333 161.353627) (xy 75.897885 161.207547) + (xy 75.979184 161.044048) (xy 76.029542 160.868533) (xy 76.047297 160.686803) (xy 76.03186 160.50486) + (xy 76.031858 160.504854) (xy 76.010801 160.427771) (xy 75.983743 160.328718) (xy 75.975983 160.312549) + (xy 75.972896 160.306104) (xy 75.972848 160.305846) (xy 75.956471 160.271819) (xy 75.956343 160.27103) + (xy 75.944302 160.218231) (xy 75.944302 160.218042) (xy 75.944307 160.180808) (xy 75.944306 160.180804) + (xy 75.944307 160.172798) (xy 75.944299 160.17266) (xy 75.944299 158.869378) (xy 75.946953 158.857712) + (xy 75.945919 158.849399) (xy 75.956503 158.815734) (xy 75.962818 158.802576) (xy 75.962898 158.802487) + (xy 75.962868 158.802473) (xy 75.962869 158.802471) (xy 75.972874 158.781674) (xy 75.972874 158.781668) + (xy 75.976255 158.774642) (xy 75.976417 158.774238) (xy 75.983783 158.758891) (xy 76.0319 158.582742) + (xy 76.047337 158.400793) (xy 76.029581 158.219055) (xy 75.97922 158.043534) (xy 75.897918 157.88003) + (xy 75.811527 157.764834) (xy 75.788362 157.733945) (xy 75.765392 157.712747) (xy 75.654169 157.610104) + (xy 75.654166 157.610102) (xy 75.654165 157.610101) (xy 75.654162 157.610099) (xy 75.499777 157.512601) + (xy 75.330287 157.444658) (xy 75.330277 157.444656) (xy 75.151292 157.408518) (xy 75.151299 157.408518) + (xy 74.979594 157.405565) (xy 74.968718 157.405378) (xy 74.968717 157.405378) (xy 74.968714 157.405378) + (xy 74.788597 157.435338) (xy 74.788584 157.435341) (xy 74.616863 157.497413) (xy 74.602348 157.50587) + (xy 74.602263 157.505919) (xy 74.595176 157.51004) (xy 74.59493 157.510108) (xy 74.567138 157.526344) + (xy 74.56689 157.526489) (xy 74.564163 157.527159) (xy 74.504546 157.543296) (xy 74.464201 157.543293) + (xy 74.464097 157.5433) (xy 73.023396 157.5433) (xy 73.015214 157.543298) (xy 73.015192 157.543293) + (xy 72.985265 157.543295) (xy 72.983028 157.543295) (xy 72.982746 157.543212) (xy 72.920493 157.526362) + (xy 72.892671 157.510108) (xy 72.886605 157.506564) (xy 72.884907 157.505717) (xy 72.877557 157.501434) + (xy 72.870721 157.49745) (xy 72.698997 157.435378) (xy 72.698991 157.435377) (xy 72.518881 157.405419) + (xy 72.518878 157.405419) (xy 72.510339 157.405565) (xy 72.336307 157.408559) (xy 72.157334 157.444694) + (xy 72.157323 157.444697) (xy 71.987842 157.512637) (xy 71.987841 157.512637) (xy 71.833461 157.610132) + (xy 71.833458 157.610134) (xy 71.699267 157.733973) (xy 71.589715 157.880054) (xy 71.50842 158.043544) + (xy 71.508419 158.043547) (xy 71.508418 158.04355) (xy 71.483238 158.131306) (xy 71.458058 158.219065) + (xy 71.441211 158.39151) (xy 71.440304 158.400793) (xy 71.442205 158.423202) (xy 71.455304 158.577606) + (xy 71.45574 158.582735) (xy 71.491807 158.714769) (xy 71.503856 158.758878) (xy 71.50386 158.758888) + (xy 71.511098 158.77397) (xy 71.51114 158.774056) (xy 71.514723 158.781538) (xy 71.514781 158.78184) + (xy 71.531136 158.815806) (xy 71.531281 158.8167) (xy 71.543301 158.869369) (xy 71.543301 160.218222) + (xy 71.531107 160.271845) (xy 71.530519 160.273071) (xy 71.530439 160.273238) (xy 71.511566 160.312437) + (xy 71.511242 160.313239) (xy 71.503818 160.32871) (xy 71.455701 160.504854) (xy 71.455701 160.504856) + (xy 71.440265 160.686806) (xy 57.942226 160.686806) (xy 63.932481 154.69655) (xy 67.2708 154.69655) + (xy 67.2708 154.865849) (xy 67.297281 155.033047) (xy 67.349596 155.194053) (xy 67.426452 155.344888) + (xy 67.525948 155.481834) (xy 67.525952 155.481839) (xy 67.64566 155.601547) (xy 67.645665 155.601551) + (xy 67.765117 155.688337) (xy 67.782615 155.70105) (xy 67.86789 155.7445) (xy 67.933446 155.777903) + (xy 67.933448 155.777903) (xy 67.933451 155.777905) (xy 68.01975 155.805945) (xy 68.094452 155.830218) + (xy 68.261651 155.8567) (xy 68.261656 155.8567) (xy 68.430949 155.8567) (xy 68.598147 155.830218) + (xy 68.641077 155.816269) (xy 68.759149 155.777905) (xy 68.909985 155.70105) (xy 69.046941 155.601546) + (xy 69.166646 155.481841) (xy 69.26615 155.344885) (xy 69.343005 155.194049) (xy 69.395318 155.033047) + (xy 69.4218 154.865849) (xy 69.4218 154.69655) (xy 69.396228 154.535098) (xy 69.405182 154.465805) + (xy 69.450179 154.412353) (xy 69.51693 154.391713) (xy 69.518701 154.3917) (xy 69.757244 154.3917) + (xy 69.757251 154.3917) (xy 70.036742 154.354904) (xy 70.309039 154.281942) (xy 70.569483 154.174063) + (xy 70.813617 154.033112) (xy 71.037265 153.8615) (xy 71.2366 153.662165) (xy 71.304292 153.573946) + (xy 71.36072 153.532744) (xy 71.430466 153.528589) (xy 71.491386 153.562801) (xy 71.524139 153.624518) + (xy 71.518326 153.694146) (xy 71.510055 153.711433) (xy 71.453983 153.808551) (xy 71.453975 153.808568) + (xy 71.343897 154.074321) (xy 71.269446 154.352176) (xy 71.231901 154.637361) (xy 71.2319 154.637377) + (xy 71.2319 154.925022) (xy 71.231901 154.925038) (xy 71.269446 155.210223) (xy 71.343897 155.488078) + (xy 71.453975 155.753831) (xy 71.453983 155.753848) (xy 71.597804 156.002951) (xy 71.597815 156.002967) + (xy 71.772921 156.231171) (xy 71.772927 156.231178) (xy 71.976321 156.434572) (xy 71.976327 156.434577) + (xy 72.204541 156.609691) (xy 72.204548 156.609695) (xy 72.453651 156.753516) (xy 72.453656 156.753518) + (xy 72.453659 156.75352) (xy 72.453663 156.753521) (xy 72.453668 156.753524) (xy 72.466908 156.759008) + (xy 72.71942 156.863602) (xy 72.997275 156.938053) (xy 73.282471 156.9756) (xy 73.282478 156.9756) + (xy 73.570122 156.9756) (xy 73.570129 156.9756) (xy 73.855325 156.938053) (xy 74.13318 156.863602) + (xy 74.398941 156.75352) (xy 74.648059 156.609691) (xy 74.876273 156.434577) (xy 75.079677 156.231173) + (xy 75.254791 156.002959) (xy 75.39862 155.753841) (xy 75.508702 155.48808) (xy 75.583153 155.210225) + (xy 75.6207 154.925029) (xy 75.6207 154.637371) (xy 75.583153 154.352175) (xy 75.508702 154.07432) + (xy 75.39862 153.808559) (xy 75.398618 153.808556) (xy 75.398616 153.808551) (xy 75.254795 153.559448) + (xy 75.254791 153.559441) (xy 75.150869 153.424007) (xy 75.079678 153.331228) (xy 75.079672 153.331221) + (xy 74.876278 153.127827) (xy 74.876271 153.127821) (xy 74.648067 152.952715) (xy 74.648065 152.952713) + (xy 74.648059 152.952709) (xy 74.648054 152.952706) (xy 74.648051 152.952704) (xy 74.398948 152.808883) + (xy 74.398931 152.808875) (xy 74.133178 152.698797) (xy 73.855323 152.624346) (xy 73.570138 152.586801) + (xy 73.570135 152.5868) (xy 73.570129 152.5868) (xy 73.282471 152.5868) (xy 73.282465 152.5868) + (xy 73.282461 152.586801) (xy 72.997276 152.624346) (xy 72.719421 152.698797) (xy 72.453668 152.808875) + (xy 72.453651 152.808883) (xy 72.204548 152.952704) (xy 72.204532 152.952715) (xy 71.976328 153.127821) + (xy 71.976321 153.127827) (xy 71.772927 153.331221) (xy 71.70173 153.424007) (xy 71.645301 153.465209) + (xy 71.575555 153.469364) (xy 71.514635 153.435151) (xy 71.481883 153.373434) (xy 71.487696 153.303807) + (xy 71.495961 153.286531) (xy 71.549163 153.194383) (xy 71.657042 152.933939) (xy 71.730004 152.661642) + (xy 71.7668 152.382151) (xy 71.7668 152.100249) (xy 71.730004 151.820758) (xy 71.657042 151.548461) + (xy 71.65006 151.531606) (xy 71.625065 151.471261) (xy 71.549163 151.288017) (xy 71.54916 151.288011) + (xy 71.549159 151.288009) (xy 71.408216 151.04389) (xy 71.408212 151.043883) (xy 71.2366 150.820235) + (xy 71.236598 150.820233) (xy 71.236595 150.820229) (xy 71.03727 150.620904) (xy 71.012461 150.601867) + (xy 70.813617 150.449288) (xy 70.813611 150.449284) (xy 70.813609 150.449283) (xy 70.56949 150.30834) + (xy 70.569479 150.308335) (xy 70.309043 150.200459) (xy 70.036739 150.127495) (xy 69.757258 150.0907) + (xy 69.757251 150.0907) (xy 69.475349 150.0907) (xy 69.475341 150.0907) (xy 69.19586 150.127495) + (xy 68.923556 150.200459) (xy 68.66312 150.308335) (xy 68.663109 150.30834) (xy 68.41899 150.449283) + (xy 68.418982 150.449289) (xy 68.195329 150.620904) (xy 67.996004 150.820229) (xy 67.824389 151.043882) + (xy 67.824383 151.04389) (xy 67.68344 151.288009) (xy 67.683435 151.28802) (xy 67.575559 151.548456) + (xy 67.502595 151.82076) (xy 67.4658 152.100241) (xy 67.4658 152.382158) (xy 67.502595 152.661639) + (xy 67.575559 152.933943) (xy 67.683435 153.194379) (xy 67.68344 153.19439) (xy 67.824383 153.438509) + (xy 67.824394 153.438525) (xy 67.955138 153.608914) (xy 67.980332 153.674083) (xy 67.966294 153.742528) + (xy 67.91748 153.792517) (xy 67.913058 153.794884) (xy 67.782613 153.86135) (xy 67.645665 153.960848) + (xy 67.64566 153.960852) (xy 67.525952 154.08056) (xy 67.525948 154.080565) (xy 67.426452 154.217511) + (xy 67.349596 154.368346) (xy 67.297281 154.529352) (xy 67.2708 154.69655) (xy 63.932481 154.69655) + (xy 65.622538 153.006493) (xy 65.683859 152.97301) (xy 65.753551 152.977994) (xy 65.757596 152.979585) + (xy 65.832803 153.010737) (xy 65.987453 153.041499) (xy 65.987456 153.0415) (xy 65.987458 153.0415) + (xy 66.145144 153.0415) (xy 66.145145 153.041499) (xy 66.299797 153.010737) (xy 66.445479 152.950394) + (xy 66.576589 152.862789) (xy 66.688089 152.751289) (xy 66.775694 152.620179) (xy 66.836037 152.474497) + (xy 66.8668 152.319842) (xy 66.8668 152.162158) (xy 66.8668 152.162155) (xy 66.866799 152.162153) + (xy 66.836037 152.007503) (xy 66.808578 151.941211) (xy 66.775697 151.861827) (xy 66.77569 151.861814) + (xy 66.688089 151.730711) (xy 66.688086 151.730707) (xy 66.576592 151.619213) (xy 66.576588 151.61921) + (xy 66.445485 151.531609) (xy 66.445475 151.531604) (xy 66.370347 151.500485) (xy 66.315944 151.456644) + (xy 66.293879 151.39035) (xy 66.2938 151.385924) (xy 66.2938 149.730245) (xy 66.293802 149.730241) + (xy 66.2938 149.684988) (xy 66.2938 149.639747) (xy 66.293798 149.639742) (xy 66.293798 149.639736) + (xy 66.273739 149.591317) (xy 66.273738 149.591311) (xy 66.273737 149.591312) (xy 66.260866 149.560241) + (xy 73.8158 149.560241) (xy 73.8158 149.842158) (xy 73.852595 150.121639) (xy 73.925559 150.393943) + (xy 74.033435 150.654379) (xy 74.03344 150.65439) (xy 74.174383 150.898509) (xy 74.174388 150.898517) + (xy 74.336687 151.110028) (xy 74.346004 151.12217) (xy 74.545329 151.321495) (xy 74.545333 151.321498) + (xy 74.545335 151.3215) (xy 74.768983 151.493112) (xy 74.76899 151.493116) (xy 75.013109 151.634059) + (xy 75.013114 151.634061) (xy 75.013117 151.634063) (xy 75.273561 151.741942) (xy 75.545858 151.814904) + (xy 75.825349 151.8517) (xy 75.825356 151.8517) (xy 76.107244 151.8517) (xy 76.107251 151.8517) + (xy 76.386742 151.814904) (xy 76.659039 151.741942) (xy 76.919483 151.634063) (xy 77.163617 151.493112) + (xy 77.387265 151.3215) (xy 77.5866 151.122165) (xy 77.758212 150.898517) (xy 77.890309 150.669717) + (xy 77.899159 150.65439) (xy 77.899159 150.654389) (xy 77.899163 150.654383) (xy 78.007042 150.393939) + (xy 78.080004 150.121642) (xy 78.1168 149.842151) (xy 78.1168 149.560249) (xy 78.116257 149.556128) + (xy 78.10459 149.467503) (xy 78.080004 149.280758) (xy 78.007042 149.008461) (xy 78.00006 148.991606) + (xy 77.975065 148.931261) (xy 77.899163 148.748017) (xy 77.899161 148.748014) (xy 77.899159 148.748009) + (xy 77.758216 148.50389) (xy 77.758212 148.503883) (xy 77.5866 148.280235) (xy 77.586598 148.280233) + (xy 77.586595 148.280229) (xy 77.38727 148.080904) (xy 77.387265 148.0809) (xy 77.163617 147.909288) + (xy 77.163611 147.909284) (xy 77.163609 147.909283) (xy 76.91949 147.76834) (xy 76.919479 147.768335) + (xy 76.659043 147.660459) (xy 76.386739 147.587495) (xy 76.107258 147.5507) (xy 76.107251 147.5507) + (xy 75.825349 147.5507) (xy 75.825341 147.5507) (xy 75.54586 147.587495) (xy 75.273556 147.660459) + (xy 75.01312 147.768335) (xy 75.013109 147.76834) (xy 74.76899 147.909283) (xy 74.768982 147.909289) + (xy 74.545329 148.080904) (xy 74.346004 148.280229) (xy 74.174389 148.503882) (xy 74.174383 148.50389) + (xy 74.03344 148.748009) (xy 74.033435 148.74802) (xy 73.925559 149.008456) (xy 73.852595 149.28076) + (xy 73.8158 149.560241) (xy 66.260866 149.560241) (xy 66.260837 149.56017) (xy 66.259582 149.556806) + (xy 66.259158 149.55612) (xy 66.217534 149.514501) (xy 66.186279 149.483246) (xy 66.186257 149.483228) + (xy 66.171536 149.468509) (xy 64.279004 147.576175) (xy 61.567623 144.865078) (xy 61.534135 144.803756) + (xy 61.5313 144.777392) (xy 61.5313 141.923453) (xy 65.112 141.923453) (xy 65.112 142.081146) (xy 65.142761 142.235789) + (xy 65.142764 142.235801) (xy 65.203102 142.381472) (xy 65.203109 142.381485) (xy 65.29071 142.512588) + (xy 65.290713 142.512592) (xy 65.402207 142.624086) (xy 65.402211 142.624089) (xy 65.533314 142.71169) + (xy 65.533327 142.711697) (xy 65.660664 142.764441) (xy 65.679003 142.772037) (xy 65.817842 142.799654) + (xy 65.833653 142.802799) (xy 65.833656 142.8028) (xy 65.833658 142.8028) (xy 65.991344 142.8028) + (xy 65.991345 142.802799) (xy 66.145997 142.772037) (xy 66.279012 142.716941) (xy 66.291672 142.711697) + (xy 66.291672 142.711696) (xy 66.291679 142.711694) (xy 66.422789 142.624089) (xy 66.534289 142.512589) + (xy 66.621894 142.381479) (xy 66.62307 142.378639) (xy 66.624084 142.377381) (xy 66.624764 142.376109) + (xy 66.625005 142.376237) (xy 66.666905 142.324234) (xy 66.733197 142.302163) (xy 66.800898 142.319437) + (xy 66.803845 142.321241) (xy 66.832915 142.339599) (xy 66.881525 142.370297) (xy 67.016677 142.424474) + (xy 67.051014 142.438239) (xy 67.051015 142.438239) (xy 67.051017 142.43824) (xy 67.230008 142.474379) + (xy 67.230002 142.474379) (xy 67.246322 142.474659) (xy 67.412584 142.47752) (xy 67.592712 142.447558) + (xy 67.648207 142.427498) (xy 67.764436 142.385485) (xy 67.764437 142.385483) (xy 67.76444 142.385483) + (xy 67.779475 142.37672) (xy 67.786159 142.372835) (xy 67.78645 142.372757) (xy 67.814333 142.35646) + (xy 67.814451 142.356392) (xy 67.817668 142.355601) (xy 67.876762 142.339599) (xy 69.357892 142.339599) + (xy 69.358014 142.339606) (xy 69.366105 142.339605) (xy 69.366108 142.339606) (xy 69.398242 142.339602) + (xy 69.460804 142.356534) (xy 69.48863 142.372791) (xy 69.488632 142.372791) (xy 69.49478 142.376383) + (xy 69.496435 142.377208) (xy 69.510578 142.38545) (xy 69.6823 142.447521) (xy 69.862421 142.477482) + (xy 70.042098 142.47439) (xy 70.044991 142.474341) (xy 70.223966 142.438205) (xy 70.223969 142.438203) + (xy 70.223974 142.438203) (xy 70.39346 142.370262) (xy 70.547846 142.272763) (xy 70.566231 142.255797) + (xy 70.68203 142.14893) (xy 70.682032 142.148928) (xy 70.69091 142.13709) (xy 70.791585 142.002847) + (xy 70.872884 141.839348) (xy 70.923242 141.663833) (xy 70.940997 141.482103) (xy 70.92556 141.30016) + (xy 70.925558 141.300154) (xy 70.914938 141.261277) (xy 70.877443 141.124018) (xy 70.869683 141.107849) + (xy 70.866596 141.101404) (xy 70.866548 141.101146) (xy 70.850171 141.067119) (xy 70.850043 141.06633) + (xy 70.838002 141.013531) (xy 70.838002 141.013522) (xy 70.838007 140.976108) (xy 70.838006 140.976104) + (xy 70.838007 140.968098) (xy 70.837999 140.96796) (xy 70.837999 139.664678) (xy 70.840653 139.653012) + (xy 70.839619 139.644699) (xy 70.850203 139.611034) (xy 70.856518 139.597876) (xy 70.856598 139.597787) + (xy 70.856568 139.597773) (xy 70.856995 139.596885) (xy 70.866574 139.576974) (xy 70.866574 139.576968) + (xy 70.869955 139.569942) (xy 70.870117 139.569538) (xy 70.877483 139.554191) (xy 70.9256 139.378042) + (xy 70.941037 139.196093) (xy 70.923281 139.014355) (xy 70.87292 138.838834) (xy 70.791618 138.67533) + (xy 70.705227 138.560134) (xy 70.682062 138.529245) (xy 70.624896 138.476489) (xy 70.547869 138.405404) + (xy 70.547866 138.405402) (xy 70.547865 138.405401) (xy 70.547862 138.405399) (xy 70.393477 138.307901) + (xy 70.223987 138.239958) (xy 70.223977 138.239956) (xy 70.044992 138.203818) (xy 70.044999 138.203818) + (xy 69.873294 138.200865) (xy 69.862418 138.200678) (xy 69.862417 138.200678) (xy 69.862414 138.200678) + (xy 69.682297 138.230638) (xy 69.682284 138.230641) (xy 69.510563 138.292713) (xy 69.496048 138.30117) + (xy 69.495963 138.301219) (xy 69.488876 138.30534) (xy 69.48863 138.305408) (xy 69.460838 138.321644) + (xy 69.46059 138.321789) (xy 69.457863 138.322459) (xy 69.398246 138.338596) (xy 69.357901 138.338593) + (xy 69.357797 138.3386) (xy 67.917096 138.3386) (xy 67.908914 138.338598) (xy 67.908892 138.338593) + (xy 67.878965 138.338595) (xy 67.876728 138.338595) (xy 67.876446 138.338512) (xy 67.814193 138.321662) + (xy 67.786371 138.305408) (xy 67.780305 138.301864) (xy 67.778607 138.301017) (xy 67.771257 138.296734) + (xy 67.764421 138.29275) (xy 67.592697 138.230678) (xy 67.592691 138.230677) (xy 67.412581 138.200719) + (xy 67.412578 138.200719) (xy 67.404039 138.200865) (xy 67.230007 138.203859) (xy 67.051034 138.239994) + (xy 67.051023 138.239997) (xy 66.881542 138.307937) (xy 66.881541 138.307937) (xy 66.727161 138.405432) + (xy 66.727158 138.405434) (xy 66.592967 138.529273) (xy 66.483415 138.675354) (xy 66.40212 138.838844) + (xy 66.402119 138.838847) (xy 66.402118 138.83885) (xy 66.376938 138.926606) (xy 66.351758 139.014365) + (xy 66.33403 139.195827) (xy 66.334004 139.196093) (xy 66.335682 139.215868) (xy 66.34778 139.358478) + (xy 66.34944 139.378035) (xy 66.371118 139.457392) (xy 66.397556 139.554178) (xy 66.39756 139.554188) + (xy 66.404798 139.56927) (xy 66.40484 139.569356) (xy 66.408423 139.576838) (xy 66.408481 139.57714) + (xy 66.424836 139.611106) (xy 66.424981 139.612) (xy 66.437001 139.664669) (xy 66.437001 141.013522) + (xy 66.424807 141.067145) (xy 66.424219 141.068371) (xy 66.424139 141.068538) (xy 66.405266 141.107737) + (xy 66.404942 141.108539) (xy 66.397519 141.124008) (xy 66.38239 141.179392) (xy 66.345735 141.238875) + (xy 66.28274 141.269098) (xy 66.215321 141.261277) (xy 66.146001 141.232564) (xy 66.145989 141.232561) + (xy 65.991345 141.2018) (xy 65.991342 141.2018) (xy 65.833658 141.2018) (xy 65.833655 141.2018) + (xy 65.67901 141.232561) (xy 65.678998 141.232564) (xy 65.533327 141.292902) (xy 65.533314 141.292909) + (xy 65.402211 141.38051) (xy 65.402207 141.380513) (xy 65.290713 141.492007) (xy 65.29071 141.492011) + (xy 65.203109 141.623114) (xy 65.203102 141.623127) (xy 65.142764 141.768798) (xy 65.142761 141.76881) + (xy 65.112 141.923453) (xy 61.5313 141.923453) (xy 61.5313 134.046075) (xy 61.550985 133.979036) + (xy 61.603789 133.933281) (xy 61.607799 133.931534) (xy 61.682979 133.900394) (xy 61.814089 133.812789) + (xy 61.925589 133.701289) (xy 62.013194 133.570179) (xy 62.073537 133.424497) (xy 62.1043 133.269842) + (xy 62.1043 133.112158) (xy 62.1043 133.112155) (xy 62.104299 133.112153) (xy 62.073537 132.957503) + (xy 62.05783 132.919582) (xy 62.013197 132.811827) (xy 62.01319 132.811814) (xy 61.925589 132.680711) + (xy 61.925586 132.680707) (xy 61.814092 132.569213) (xy 61.814088 132.56921) (xy 61.682985 132.481609) + (xy 61.682972 132.481602) (xy 61.537301 132.421264) (xy 61.537289 132.421261) (xy 61.382645 132.3905) + (xy 61.382642 132.3905) (xy 61.224958 132.3905) (xy 61.224955 132.3905) (xy 61.07031 132.421261) + (xy 61.070303 132.421263) (xy 60.995117 132.452405) (xy 60.925648 132.459872) (xy 60.863169 132.428597) + (xy 60.85999 132.42553) (xy 59.85349 131.419153) (xy 59.77188 131.337553) (xy 62.2283 131.337553) + (xy 62.2283 131.495246) (xy 62.259061 131.649889) (xy 62.259064 131.649901) (xy 62.319402 131.795572) + (xy 62.319409 131.795585) (xy 62.40701 131.926688) (xy 62.407013 131.926692) (xy 62.518507 132.038186) + (xy 62.518511 132.038189) (xy 62.649614 132.12579) (xy 62.649627 132.125797) (xy 62.800931 132.188468) + (xy 62.800463 132.189595) (xy 62.853522 132.224369) (xy 62.881977 132.288182) (xy 62.873647 132.352182) + (xy 62.81306 132.498453) (xy 62.740095 132.77076) (xy 62.7033 133.050241) (xy 62.7033 133.332158) + (xy 62.740095 133.611639) (xy 62.813059 133.883943) (xy 62.920935 134.144379) (xy 62.92094 134.14439) + (xy 63.061883 134.388509) (xy 63.061894 134.388525) (xy 63.192638 134.558914) (xy 63.217832 134.624083) + (xy 63.203794 134.692528) (xy 63.15498 134.742517) (xy 63.150558 134.744884) (xy 63.020113 134.81135) + (xy 62.883165 134.910848) (xy 62.88316 134.910852) (xy 62.763452 135.03056) (xy 62.763448 135.030565) + (xy 62.663952 135.167511) (xy 62.587096 135.318346) (xy 62.534781 135.479352) (xy 62.5083 135.64655) + (xy 62.5083 135.815849) (xy 62.534781 135.983047) (xy 62.587096 136.144053) (xy 62.663952 136.294888) + (xy 62.763448 136.431834) (xy 62.763452 136.431839) (xy 62.88316 136.551547) (xy 62.883165 136.551551) + (xy 63.002617 136.638337) (xy 63.020115 136.65105) (xy 63.083317 136.683253) (xy 63.170946 136.727903) + (xy 63.170948 136.727903) (xy 63.170951 136.727905) (xy 63.25725 136.755945) (xy 63.331952 136.780218) + (xy 63.499151 136.8067) (xy 63.499156 136.8067) (xy 63.668449 136.8067) (xy 63.835647 136.780218) + (xy 63.996649 136.727905) (xy 64.147485 136.65105) (xy 64.284441 136.551546) (xy 64.404146 136.431841) + (xy 64.50365 136.294885) (xy 64.580505 136.144049) (xy 64.632818 135.983047) (xy 64.6593 135.815849) + (xy 64.6593 135.64655) (xy 64.633728 135.485098) (xy 64.642682 135.415805) (xy 64.687679 135.362353) + (xy 64.75443 135.341713) (xy 64.756201 135.3417) (xy 64.994744 135.3417) (xy 64.994751 135.3417) + (xy 65.274242 135.304904) (xy 65.546539 135.231942) (xy 65.806983 135.124063) (xy 66.051117 134.983112) + (xy 66.274765 134.8115) (xy 66.4741 134.612165) (xy 66.541792 134.523946) (xy 66.59822 134.482744) + (xy 66.667966 134.478589) (xy 66.728886 134.512801) (xy 66.761639 134.574518) (xy 66.755826 134.644146) + (xy 66.747555 134.661433) (xy 66.691483 134.758551) (xy 66.691475 134.758568) (xy 66.581397 135.024321) + (xy 66.506946 135.302176) (xy 66.469401 135.587361) (xy 66.4694 135.587377) (xy 66.4694 135.875022) + (xy 66.469401 135.875038) (xy 66.506946 136.160223) (xy 66.581397 136.438078) (xy 66.691475 136.703831) + (xy 66.691483 136.703848) (xy 66.835304 136.952951) (xy 66.835315 136.952967) (xy 67.010421 137.181171) + (xy 67.010427 137.181178) (xy 67.213825 137.384576) (xy 67.310061 137.45842) (xy 67.442041 137.559691) + (xy 67.442048 137.559695) (xy 67.691151 137.703516) (xy 67.691156 137.703518) (xy 67.691159 137.70352) + (xy 67.691163 137.703521) (xy 67.691168 137.703524) (xy 67.796523 137.747163) (xy 67.95692 137.813602) + (xy 68.234775 137.888053) (xy 68.519971 137.9256) (xy 68.519978 137.9256) (xy 68.807622 137.9256) + (xy 68.807629 137.9256) (xy 69.092825 137.888053) (xy 69.37068 137.813602) (xy 69.636441 137.70352) + (xy 69.885559 137.559691) (xy 70.026378 137.451636) (xy 70.113775 137.384576) (xy 70.113778 137.384572) + (xy 70.317172 137.181178) (xy 70.317177 137.181173) (xy 70.492291 136.952959) (xy 70.63612 136.703841) + (xy 70.746202 136.43808) (xy 70.820653 136.160225) (xy 70.8582 135.875029) (xy 70.8582 135.759214) + (xy 70.877885 135.692175) (xy 70.930689 135.64642) (xy 70.999847 135.636476) (xy 71.042121 135.652677) + (xy 71.042846 135.651321) (xy 71.048227 135.654197) (xy 71.193898 135.714535) (xy 71.193903 135.714537) + (xy 71.348553 135.745299) (xy 71.348556 135.7453) (xy 71.348558 135.7453) (xy 71.506244 135.7453) + (xy 71.506245 135.745299) (xy 71.660897 135.714537) (xy 71.806579 135.654194) (xy 71.818019 135.64655) + (xy 72.6683 135.64655) (xy 72.6683 135.815849) (xy 72.694781 135.983047) (xy 72.747096 136.144053) + (xy 72.823952 136.294888) (xy 72.923448 136.431834) (xy 72.923452 136.431839) (xy 73.04316 136.551547) + (xy 73.043165 136.551551) (xy 73.162617 136.638337) (xy 73.180115 136.65105) (xy 73.243317 136.683253) + (xy 73.330946 136.727903) (xy 73.330948 136.727903) (xy 73.330951 136.727905) (xy 73.41725 136.755945) + (xy 73.491952 136.780218) (xy 73.659151 136.8067) (xy 73.659156 136.8067) (xy 73.828449 136.8067) + (xy 73.995647 136.780218) (xy 74.156649 136.727905) (xy 74.307485 136.65105) (xy 74.444441 136.551546) + (xy 74.564146 136.431841) (xy 74.66365 136.294885) (xy 74.740505 136.144049) (xy 74.792818 135.983047) + (xy 74.8193 135.815849) (xy 74.8193 135.64655) (xy 74.792818 135.479352) (xy 74.748096 135.341713) + (xy 74.740505 135.318351) (xy 74.740503 135.318348) (xy 74.740503 135.318346) (xy 74.696476 135.23194) + (xy 74.66365 135.167515) (xy 74.632081 135.124064) (xy 74.564151 135.030565) (xy 74.564147 135.03056) + (xy 74.444439 134.910852) (xy 74.444434 134.910848) (xy 74.307488 134.811352) (xy 74.307487 134.811351) + (xy 74.307485 134.81135) (xy 74.242409 134.778192) (xy 74.156653 134.734496) (xy 73.995647 134.682181) + (xy 73.828449 134.6557) (xy 73.828444 134.6557) (xy 73.659156 134.6557) (xy 73.659151 134.6557) + (xy 73.491952 134.682181) (xy 73.330946 134.734496) (xy 73.180111 134.811352) (xy 73.043165 134.910848) + (xy 73.04316 134.910852) (xy 72.923452 135.03056) (xy 72.923448 135.030565) (xy 72.823952 135.167511) + (xy 72.747096 135.318346) (xy 72.694781 135.479352) (xy 72.6683 135.64655) (xy 71.818019 135.64655) + (xy 71.937689 135.566589) (xy 71.937692 135.566586) (xy 71.950276 135.554003) (xy 72.049186 135.455092) + (xy 72.049189 135.455089) (xy 72.136794 135.323979) (xy 72.197137 135.178297) (xy 72.2279 135.023642) + (xy 72.2279 134.865958) (xy 72.2279 134.865955) (xy 72.227899 134.865953) (xy 72.222766 134.840149) + (xy 72.197137 134.711303) (xy 72.185075 134.682182) (xy 72.136797 134.565627) (xy 72.13679 134.565614) + (xy 72.049189 134.434511) (xy 72.049186 134.434507) (xy 71.937692 134.323013) (xy 71.937688 134.32301) + (xy 71.806585 134.235409) (xy 71.806572 134.235402) (xy 71.660901 134.175064) (xy 71.660889 134.175061) + (xy 71.506245 134.1443) (xy 71.506242 134.1443) (xy 71.348558 134.1443) (xy 71.348555 134.1443) + (xy 71.19391 134.175061) (xy 71.193898 134.175064) (xy 71.048227 134.235402) (xy 71.048214 134.235409) + (xy 70.917111 134.32301) (xy 70.917107 134.323013) (xy 70.805613 134.434507) (xy 70.725103 134.554998) + (xy 70.67149 134.599802) (xy 70.602165 134.608509) (xy 70.539138 134.578354) (xy 70.514614 134.548106) + (xy 70.500666 134.523947) (xy 70.492291 134.509441) (xy 70.367825 134.347233) (xy 70.317178 134.281228) + (xy 70.317172 134.281221) (xy 70.113778 134.077827) (xy 70.113771 134.077821) (xy 69.885567 133.902715) + (xy 69.885565 133.902713) (xy 69.885559 133.902709) (xy 69.885554 133.902706) (xy 69.885551 133.902704) + (xy 69.636448 133.758883) (xy 69.636431 133.758875) (xy 69.370678 133.648797) (xy 69.092823 133.574346) + (xy 68.807638 133.536801) (xy 68.807635 133.5368) (xy 68.807629 133.5368) (xy 68.519971 133.5368) + (xy 68.519965 133.5368) (xy 68.519961 133.536801) (xy 68.234776 133.574346) (xy 67.956921 133.648797) + (xy 67.691168 133.758875) (xy 67.691151 133.758883) (xy 67.442048 133.902704) (xy 67.442032 133.902715) + (xy 67.213828 134.077821) (xy 67.213821 134.077827) (xy 67.010427 134.281221) (xy 66.93923 134.374007) + (xy 66.882801 134.415209) (xy 66.813055 134.419364) (xy 66.752135 134.385151) (xy 66.719383 134.323434) + (xy 66.725196 134.253807) (xy 66.733461 134.236531) (xy 66.786663 134.144383) (xy 66.894542 133.883939) + (xy 66.967504 133.611642) (xy 67.0043 133.332151) (xy 67.0043 133.050249) (xy 66.967504 132.770758) + (xy 66.894542 132.498461) (xy 66.88756 132.481606) (xy 66.865609 132.428611) (xy 66.786663 132.238017) + (xy 66.786661 132.238014) (xy 66.786659 132.238009) (xy 66.645716 131.99389) (xy 66.645712 131.993883) + (xy 66.4741 131.770235) (xy 66.474098 131.770233) (xy 66.474095 131.770229) (xy 66.27477 131.570904) + (xy 66.176171 131.495246) (xy 66.051117 131.399288) (xy 66.051111 131.399284) (xy 66.051109 131.399283) + (xy 65.80699 131.25834) (xy 65.806979 131.258335) (xy 65.546543 131.150459) (xy 65.274239 131.077495) + (xy 64.994758 131.0407) (xy 64.994751 131.0407) (xy 64.712849 131.0407) (xy 64.712841 131.0407) + (xy 64.43336 131.077495) (xy 64.161053 131.15046) (xy 63.954716 131.235927) (xy 63.885247 131.243396) + (xy 63.822768 131.212121) (xy 63.792703 131.168818) (xy 63.738197 131.037227) (xy 63.73819 131.037214) + (xy 63.650589 130.906111) (xy 63.650586 130.906107) (xy 63.539092 130.794613) (xy 63.539088 130.79461) + (xy 63.407985 130.707009) (xy 63.407972 130.707002) (xy 63.262301 130.646664) (xy 63.262289 130.646661) + (xy 63.167505 130.627807) (xy 63.167504 130.627807) (xy 63.107644 130.6159) (xy 63.107642 130.6159) + (xy 62.949958 130.6159) (xy 62.949955 130.6159) (xy 62.79531 130.646661) (xy 62.795298 130.646664) + (xy 62.649627 130.707002) (xy 62.649614 130.707009) (xy 62.518511 130.79461) (xy 62.518507 130.794613) + (xy 62.407013 130.906107) (xy 62.40701 130.906111) (xy 62.319409 131.037214) (xy 62.319402 131.037227) + (xy 62.259064 131.182898) (xy 62.259061 131.18291) (xy 62.2283 131.337553) (xy 59.77188 131.337553) + (xy 59.111324 130.677077) (xy 59.077835 130.615755) (xy 59.075 130.58939) (xy 59.075 130.510241) + (xy 69.0533 130.510241) (xy 69.0533 130.792158) (xy 69.090095 131.071639) (xy 69.163059 131.343943) + (xy 69.270935 131.604379) (xy 69.27094 131.60439) (xy 69.403442 131.833888) (xy 69.411888 131.848517) + (xy 69.574347 132.060237) (xy 69.583504 132.07217) (xy 69.782829 132.271495) (xy 69.782833 132.271498) + (xy 69.782835 132.2715) (xy 70.006483 132.443112) (xy 70.00649 132.443116) (xy 70.250609 132.584059) + (xy 70.250614 132.584061) (xy 70.250617 132.584063) (xy 70.511061 132.691942) (xy 70.783358 132.764904) + (xy 71.062849 132.8017) (xy 71.062856 132.8017) (xy 71.344744 132.8017) (xy 71.344751 132.8017) + (xy 71.624242 132.764904) (xy 71.896539 132.691942) (xy 72.156983 132.584063) (xy 72.401117 132.443112) + (xy 72.624765 132.2715) (xy 72.8241 132.072165) (xy 72.995712 131.848517) (xy 73.136663 131.604383) + (xy 73.244542 131.343939) (xy 73.317504 131.071642) (xy 73.3543 130.792151) (xy 73.3543 130.510249) + (xy 73.317504 130.230758) (xy 73.244542 129.958461) (xy 73.23756 129.941606) (xy 73.212565 129.881261) + (xy 73.136663 129.698017) (xy 73.136661 129.698014) (xy 73.136659 129.698009) (xy 72.995716 129.45389) + (xy 72.995712 129.453883) (xy 72.8241 129.230235) (xy 72.824098 129.230233) (xy 72.824095 129.230229) + (xy 72.62477 129.030904) (xy 72.624765 129.0309) (xy 72.401117 128.859288) (xy 72.401111 128.859284) + (xy 72.401109 128.859283) (xy 72.15699 128.71834) (xy 72.156979 128.718335) (xy 71.896543 128.610459) + (xy 71.624239 128.537495) (xy 71.344758 128.5007) (xy 71.344751 128.5007) (xy 71.062849 128.5007) + (xy 71.062841 128.5007) (xy 70.78336 128.537495) (xy 70.511056 128.610459) (xy 70.25062 128.718335) + (xy 70.250609 128.71834) (xy 70.00649 128.859283) (xy 70.006484 128.859287) (xy 70.006483 128.859288) + (xy 69.951498 128.90148) (xy 69.782829 129.030904) (xy 69.583504 129.230229) (xy 69.470181 129.377914) + (xy 69.411897 129.453872) (xy 69.411889 129.453882) (xy 69.411883 129.45389) (xy 69.27094 129.698009) + (xy 69.270935 129.69802) (xy 69.163059 129.958456) (xy 69.090095 130.23076) (xy 69.0533 130.510241) + (xy 59.075 130.510241) (xy 59.075 122.741506) (xy 63.952765 122.741506) (xy 63.969079 122.908489) + (xy 63.970521 122.923242) (xy 63.989662 122.989953) (xy 64.02088 123.098761) (xy 64.10218 123.262263) + (xy 64.102181 123.262265) (xy 64.102183 123.262268) (xy 64.157092 123.335485) (xy 64.211738 123.408352) + (xy 64.211739 123.408353) (xy 64.21174 123.408354) (xy 64.345932 123.532195) (xy 64.500325 123.629697) + (xy 64.603216 123.670942) (xy 64.669814 123.697639) (xy 64.669815 123.697639) (xy 64.669817 123.69764) + (xy 64.848808 123.733779) (xy 64.848802 123.733779) (xy 64.865122 123.734059) (xy 65.031384 123.73692) + (xy 65.211512 123.706958) (xy 65.255814 123.690943) (xy 65.383236 123.644885) (xy 65.383237 123.644883) + (xy 65.38324 123.644883) (xy 65.398275 123.63612) (xy 65.404959 123.632235) (xy 65.40525 123.632157) + (xy 65.433133 123.61586) (xy 65.433251 123.615792) (xy 65.436468 123.615001) (xy 65.495562 123.598999) + (xy 66.976692 123.598999) (xy 66.976814 123.599006) (xy 66.984905 123.599005) (xy 66.984908 123.599006) + (xy 67.017042 123.599002) (xy 67.079604 123.615934) (xy 67.10743 123.632191) (xy 67.107432 123.632191) + (xy 67.11358 123.635783) (xy 67.115235 123.636608) (xy 67.129378 123.64485) (xy 67.3011 123.706921) + (xy 67.481221 123.736882) (xy 67.660898 123.73379) (xy 67.663791 123.733741) (xy 67.842766 123.697605) + (xy 67.842769 123.697603) (xy 67.842774 123.697603) (xy 68.01226 123.629662) (xy 68.166646 123.532163) + (xy 68.187132 123.513258) (xy 68.30083 123.40833) (xy 68.300832 123.408328) (xy 68.300833 123.408327) + (xy 68.410385 123.262247) (xy 68.491684 123.098748) (xy 68.542042 122.923233) (xy 68.559797 122.741503) + (xy 68.54436 122.55956) (xy 68.544358 122.559554) (xy 68.529943 122.506784) (xy 68.496243 122.383418) + (xy 68.488483 122.367249) (xy 68.485396 122.360804) (xy 68.485348 122.360546) (xy 68.468971 122.326519) + (xy 68.468843 122.32573) (xy 68.456802 122.272931) (xy 68.456805 122.250154) (xy 68.456807 122.235508) + (xy 68.456806 122.235504) (xy 68.456807 122.227498) (xy 68.456799 122.22736) (xy 68.456799 120.924077) + (xy 68.459454 120.912408) (xy 68.45842 120.904094) (xy 68.469005 120.870428) (xy 68.475311 120.85729) + (xy 68.485374 120.836374) (xy 68.485374 120.836369) (xy 68.48876 120.829333) (xy 68.488925 120.828922) + (xy 68.489046 120.82867) (xy 68.496283 120.813591) (xy 68.5444 120.637442) (xy 68.559837 120.455493) + (xy 68.542081 120.273755) (xy 68.49172 120.098234) (xy 68.410418 119.93473) (xy 68.345115 119.847653) + (xy 68.838 119.847653) (xy 68.838 120.005346) (xy 68.868761 120.159989) (xy 68.868764 120.160001) + (xy 68.929102 120.305672) (xy 68.929109 120.305685) (xy 69.01671 120.436788) (xy 69.016713 120.436792) + (xy 69.128207 120.548286) (xy 69.128211 120.548289) (xy 69.259314 120.63589) (xy 69.259327 120.635897) + (xy 69.347725 120.672512) (xy 69.405003 120.696237) (xy 69.559653 120.726999) (xy 69.559656 120.727) + (xy 69.559658 120.727) (xy 69.717344 120.727) (xy 69.717345 120.726999) (xy 69.871997 120.696237) + (xy 70.017679 120.635894) (xy 70.148789 120.548289) (xy 70.260289 120.436789) (xy 70.347894 120.305679) + (xy 70.408237 120.159997) (xy 70.439 120.005342) (xy 70.439 119.847658) (xy 70.439 119.847655) (xy 70.438999 119.847653) + (xy 70.418686 119.745534) (xy 70.408237 119.693003) (xy 70.407486 119.69119) (xy 70.347897 119.547327) + (xy 70.34789 119.547314) (xy 70.260289 119.416211) (xy 70.260286 119.416207) (xy 70.148792 119.304713) + (xy 70.148788 119.30471) (xy 70.017685 119.217109) (xy 70.017672 119.217102) (xy 69.872001 119.156764) + (xy 69.871989 119.156761) (xy 69.717345 119.126) (xy 69.717342 119.126) (xy 69.559658 119.126) (xy 69.559655 119.126) + (xy 69.40501 119.156761) (xy 69.404998 119.156764) (xy 69.259327 119.217102) (xy 69.259314 119.217109) + (xy 69.128211 119.30471) (xy 69.128207 119.304713) (xy 69.016713 119.416207) (xy 69.01671 119.416211) + (xy 68.929109 119.547314) (xy 68.929102 119.547327) (xy 68.868764 119.692998) (xy 68.868761 119.69301) + (xy 68.838 119.847653) (xy 68.345115 119.847653) (xy 68.300861 119.788644) (xy 68.166669 119.664804) + (xy 68.166666 119.664802) (xy 68.166665 119.664801) (xy 68.166662 119.664799) (xy 68.012277 119.567301) + (xy 67.842787 119.499358) (xy 67.842777 119.499356) (xy 67.663792 119.463218) (xy 67.663799 119.463218) + (xy 67.492094 119.460265) (xy 67.481218 119.460078) (xy 67.481217 119.460078) (xy 67.481214 119.460078) + (xy 67.301097 119.490038) (xy 67.301084 119.490041) (xy 67.129363 119.552113) (xy 67.114848 119.56057) + (xy 67.114763 119.560619) (xy 67.107676 119.56474) (xy 67.10743 119.564808) (xy 67.079638 119.581044) + (xy 67.07939 119.581189) (xy 67.076663 119.581859) (xy 67.017046 119.597996) (xy 66.976701 119.597993) + (xy 66.976597 119.598) (xy 65.535896 119.598) (xy 65.527714 119.597998) (xy 65.527692 119.597993) + (xy 65.497765 119.597995) (xy 65.495528 119.597995) (xy 65.495246 119.597912) (xy 65.432993 119.581062) + (xy 65.405171 119.564808) (xy 65.399105 119.561264) (xy 65.397407 119.560417) (xy 65.390057 119.556134) + (xy 65.383221 119.55215) (xy 65.211497 119.490078) (xy 65.211491 119.490077) (xy 65.031381 119.460119) + (xy 65.031378 119.460119) (xy 65.022839 119.460265) (xy 64.848807 119.463259) (xy 64.669834 119.499394) + (xy 64.669823 119.499397) (xy 64.500342 119.567337) (xy 64.500341 119.567337) (xy 64.345961 119.664832) + (xy 64.345958 119.664834) (xy 64.211767 119.788673) (xy 64.102215 119.934754) (xy 64.02092 120.098244) + (xy 64.020919 120.098247) (xy 64.020918 120.09825) (xy 64.018863 120.105413) (xy 63.970558 120.273765) + (xy 63.955934 120.423456) (xy 63.952804 120.455493) (xy 63.954705 120.477902) (xy 63.968109 120.635897) + (xy 63.96824 120.637435) (xy 63.984303 120.696237) (xy 64.016356 120.813578) (xy 64.01636 120.813588) + (xy 64.023598 120.82867) (xy 64.02364 120.828756) (xy 64.027223 120.836238) (xy 64.027281 120.83654) + (xy 64.043597 120.870425) (xy 64.043636 120.870506) (xy 64.043781 120.8714) (xy 64.055801 120.924069) + (xy 64.055801 122.272922) (xy 64.043607 122.326545) (xy 64.043019 122.327771) (xy 64.042939 122.327938) + (xy 64.024066 122.367137) (xy 64.023742 122.367939) (xy 64.016318 122.38341) (xy 63.968201 122.559554) + (xy 63.968201 122.559556) (xy 63.952765 122.741506) (xy 59.075 122.741506) (xy 59.075 116.59655) + (xy 60.052 116.59655) (xy 60.052 116.765849) (xy 60.078481 116.933047) (xy 60.130796 117.094053) + (xy 60.207652 117.244888) (xy 60.307148 117.381834) (xy 60.307151 117.381838) (xy 60.42686 117.501547) + (xy 60.426865 117.501551) (xy 60.506744 117.559586) (xy 60.563815 117.60105) (xy 60.659925 117.65002) + (xy 60.714646 117.677903) (xy 60.714648 117.677903) (xy 60.714651 117.677905) (xy 60.80095 117.705945) + (xy 60.875652 117.730218) (xy 61.042851 117.7567) (xy 61.042856 117.7567) (xy 61.212149 117.7567) + (xy 61.379347 117.730218) (xy 61.540349 117.677905) (xy 61.691185 117.60105) (xy 61.828141 117.501546) + (xy 61.947846 117.381841) (xy 61.947846 117.38184) (xy 61.947849 117.381838) (xy 61.947851 117.381834) + (xy 61.968679 117.353167) (xy 62.04735 117.244885) (xy 62.124205 117.094049) (xy 62.176518 116.933047) + (xy 62.203 116.765849) (xy 62.203 116.59655) (xy 62.177428 116.435098) (xy 62.186382 116.365805) + (xy 62.231379 116.312353) (xy 62.29813 116.291713) (xy 62.299901 116.2917) (xy 62.538444 116.2917) + (xy 62.538451 116.2917) (xy 62.817942 116.254904) (xy 63.090239 116.181942) (xy 63.350683 116.074063) + (xy 63.594817 115.933112) (xy 63.818465 115.7615) (xy 64.0178 115.562165) (xy 64.085492 115.473946) + (xy 64.14192 115.432744) (xy 64.211666 115.428589) (xy 64.272586 115.462801) (xy 64.305339 115.524518) + (xy 64.299526 115.594146) (xy 64.291255 115.611433) (xy 64.235183 115.708551) (xy 64.235175 115.708568) + (xy 64.125097 115.974321) (xy 64.050646 116.252176) (xy 64.013101 116.537361) (xy 64.0131 116.537377) + (xy 64.0131 116.825022) (xy 64.013101 116.825038) (xy 64.050646 117.110223) (xy 64.125097 117.388078) + (xy 64.235175 117.653831) (xy 64.235183 117.653848) (xy 64.379004 117.902951) (xy 64.379015 117.902967) + (xy 64.554121 118.131171) (xy 64.554127 118.131178) (xy 64.757521 118.334572) (xy 64.757527 118.334577) + (xy 64.985741 118.509691) (xy 64.985748 118.509695) (xy 65.234851 118.653516) (xy 65.234856 118.653518) + (xy 65.234859 118.65352) (xy 65.234863 118.653521) (xy 65.234868 118.653524) (xy 65.282308 118.673174) + (xy 65.50062 118.763602) (xy 65.778475 118.838053) (xy 66.063671 118.8756) (xy 66.063678 118.8756) + (xy 66.351322 118.8756) (xy 66.351329 118.8756) (xy 66.636525 118.838053) (xy 66.91438 118.763602) + (xy 67.180141 118.65352) (xy 67.182556 118.652126) (xy 67.296567 118.586301) (xy 67.429259 118.509691) + (xy 67.657473 118.334577) (xy 67.860877 118.131173) (xy 68.035991 117.902959) (xy 68.17982 117.653841) + (xy 68.289902 117.38808) (xy 68.364353 117.110225) (xy 68.4019 116.825029) (xy 68.4019 116.59655) + (xy 70.212 116.59655) (xy 70.212 116.765849) (xy 70.238481 116.933047) (xy 70.290796 117.094053) + (xy 70.367652 117.244888) (xy 70.467148 117.381834) (xy 70.467151 117.381838) (xy 70.58686 117.501547) + (xy 70.586865 117.501551) (xy 70.666744 117.559586) (xy 70.723815 117.60105) (xy 70.819925 117.65002) + (xy 70.874646 117.677903) (xy 70.874648 117.677903) (xy 70.874651 117.677905) (xy 70.96095 117.705945) + (xy 71.035652 117.730218) (xy 71.202851 117.7567) (xy 71.202856 117.7567) (xy 71.372149 117.7567) + (xy 71.539347 117.730218) (xy 71.700349 117.677905) (xy 71.851185 117.60105) (xy 71.988141 117.501546) + (xy 72.107846 117.381841) (xy 72.107846 117.38184) (xy 72.107849 117.381838) (xy 72.107851 117.381834) + (xy 72.128679 117.353167) (xy 72.20735 117.244885) (xy 72.284205 117.094049) (xy 72.336518 116.933047) + (xy 72.363 116.765849) (xy 72.363 116.59655) (xy 72.336518 116.429352) (xy 72.309775 116.347046) + (xy 72.284205 116.268351) (xy 72.284203 116.268348) (xy 72.284203 116.268346) (xy 72.233515 116.168867) + (xy 72.20735 116.117515) (xy 72.175781 116.074064) (xy 72.107851 115.980565) (xy 72.107847 115.98056) + (xy 71.988139 115.860852) (xy 71.988134 115.860848) (xy 71.851188 115.761352) (xy 71.851187 115.761351) + (xy 71.851185 115.76135) (xy 71.801898 115.736237) (xy 71.700353 115.684496) (xy 71.539347 115.632181) + (xy 71.372149 115.6057) (xy 71.372144 115.6057) (xy 71.202856 115.6057) (xy 71.202851 115.6057) + (xy 71.035652 115.632181) (xy 70.874646 115.684496) (xy 70.723811 115.761352) (xy 70.586865 115.860848) + (xy 70.58686 115.860852) (xy 70.467152 115.98056) (xy 70.467148 115.980565) (xy 70.367652 116.117511) + (xy 70.290796 116.268346) (xy 70.238481 116.429352) (xy 70.212 116.59655) (xy 68.4019 116.59655) + (xy 68.4019 116.537371) (xy 68.364353 116.252175) (xy 68.289902 115.97432) (xy 68.202205 115.762601) + (xy 68.179824 115.708568) (xy 68.179816 115.708551) (xy 68.035995 115.459448) (xy 68.035991 115.459441) + (xy 67.894573 115.275141) (xy 67.860878 115.231228) (xy 67.860872 115.231221) (xy 67.657478 115.027827) + (xy 67.657471 115.027821) (xy 67.429267 114.852715) (xy 67.429265 114.852713) (xy 67.429259 114.852709) + (xy 67.429254 114.852706) (xy 67.429251 114.852704) (xy 67.180148 114.708883) (xy 67.180131 114.708875) + (xy 66.914378 114.598797) (xy 66.636523 114.524346) (xy 66.351338 114.486801) (xy 66.351335 114.4868) + (xy 66.351329 114.4868) (xy 66.063671 114.4868) (xy 66.063665 114.4868) (xy 66.063661 114.486801) + (xy 65.778476 114.524346) (xy 65.500621 114.598797) (xy 65.234868 114.708875) (xy 65.234851 114.708883) + (xy 64.985748 114.852704) (xy 64.985732 114.852715) (xy 64.757528 115.027821) (xy 64.757521 115.027827) + (xy 64.554127 115.231221) (xy 64.48293 115.324007) (xy 64.426501 115.365209) (xy 64.356755 115.369364) + (xy 64.295835 115.335151) (xy 64.263083 115.273434) (xy 64.268896 115.203807) (xy 64.277161 115.186531) + (xy 64.330363 115.094383) (xy 64.438242 114.833939) (xy 64.511204 114.561642) (xy 64.548 114.282151) + (xy 64.548 114.000249) (xy 64.511204 113.720758) (xy 64.438242 113.448461) (xy 64.43126 113.431606) + (xy 64.406265 113.371261) (xy 64.330363 113.188017) (xy 64.330361 113.188014) (xy 64.330359 113.188009) + (xy 64.189416 112.94389) (xy 64.189412 112.943883) (xy 64.0178 112.720235) (xy 64.017798 112.720233) + (xy 64.017795 112.720229) (xy 63.81847 112.520904) (xy 63.793661 112.501867) (xy 63.594817 112.349288) + (xy 63.594811 112.349284) (xy 63.594809 112.349283) (xy 63.35069 112.20834) (xy 63.350679 112.208335) + (xy 63.090243 112.100459) (xy 62.817939 112.027495) (xy 62.538458 111.9907) (xy 62.538451 111.9907) + (xy 62.256549 111.9907) (xy 62.256541 111.9907) (xy 61.97706 112.027495) (xy 61.704756 112.100459) + (xy 61.44432 112.208335) (xy 61.444309 112.20834) (xy 61.20019 112.349283) (xy 61.200182 112.349289) + (xy 60.976529 112.520904) (xy 60.777204 112.720229) (xy 60.605589 112.943882) (xy 60.605583 112.94389) + (xy 60.46464 113.188009) (xy 60.464635 113.18802) (xy 60.356759 113.448456) (xy 60.283795 113.72076) + (xy 60.247 114.000241) (xy 60.247 114.282158) (xy 60.283795 114.561639) (xy 60.356759 114.833943) + (xy 60.464635 115.094379) (xy 60.46464 115.09439) (xy 60.605583 115.338509) (xy 60.605594 115.338525) + (xy 60.736338 115.508914) (xy 60.761532 115.574083) (xy 60.747494 115.642528) (xy 60.69868 115.692517) + (xy 60.694258 115.694884) (xy 60.563813 115.76135) (xy 60.426865 115.860848) (xy 60.42686 115.860852) + (xy 60.307152 115.98056) (xy 60.307148 115.980565) (xy 60.207652 116.117511) (xy 60.130796 116.268346) + (xy 60.078481 116.429352) (xy 60.052 116.59655) (xy 59.075 116.59655) (xy 59.075 114.996075) (xy 59.094685 114.929036) + (xy 59.147489 114.883281) (xy 59.151499 114.881534) (xy 59.226679 114.850394) (xy 59.357789 114.762789) + (xy 59.469289 114.651289) (xy 59.556894 114.520179) (xy 59.617237 114.374497) (xy 59.648 114.219842) + (xy 59.648 114.062158) (xy 59.648 114.062155) (xy 59.647999 114.062153) (xy 59.636056 114.002113) + (xy 59.617237 113.907503) (xy 59.589778 113.841211) (xy 59.556897 113.761827) (xy 59.55689 113.761814) + (xy 59.469289 113.630711) (xy 59.469286 113.630707) (xy 59.357792 113.519213) (xy 59.357788 113.51921) + (xy 59.226685 113.431609) (xy 59.226672 113.431602) (xy 59.081001 113.371264) (xy 59.080989 113.371261) + (xy 58.926345 113.3405) (xy 58.926342 113.3405) (xy 58.768658 113.3405) (xy 58.768655 113.3405) + (xy 58.61401 113.371261) (xy 58.614003 113.371263) (xy 58.538824 113.402402) (xy 58.469354 113.409869) + (xy 58.406876 113.378594) (xy 58.403696 113.375526) (xy 54.348823 109.321078) (xy 54.315335 109.259756) + (xy 54.3125 109.233392) (xy 54.3125 103.391706) (xy 59.100265 103.391706) (xy 59.117082 103.563838) + (xy 59.118021 103.573442) (xy 59.133951 103.628963) (xy 59.16838 103.748961) (xy 59.24968 103.912463) + (xy 59.249681 103.912465) (xy 59.249683 103.912468) (xy 59.284226 103.958528) (xy 59.359238 104.058552) + (xy 59.359239 104.058553) (xy 59.35924 104.058554) (xy 59.493432 104.182395) (xy 59.647825 104.279897) + (xy 59.778693 104.332357) (xy 59.817314 104.347839) (xy 59.817315 104.347839) (xy 59.817317 104.34784) + (xy 59.996308 104.383979) (xy 59.996302 104.383979) (xy 60.012622 104.384259) (xy 60.178884 104.38712) + (xy 60.359012 104.357158) (xy 60.420173 104.33505) (xy 60.530736 104.295085) (xy 60.530737 104.295083) + (xy 60.53074 104.295083) (xy 60.545775 104.28632) (xy 60.552459 104.282435) (xy 60.55275 104.282357) + (xy 60.580633 104.26606) (xy 60.580751 104.265992) (xy 60.583968 104.265201) (xy 60.643062 104.249199) + (xy 62.124192 104.249199) (xy 62.124314 104.249206) (xy 62.132405 104.249205) (xy 62.132408 104.249206) + (xy 62.164542 104.249202) (xy 62.227104 104.266134) (xy 62.25493 104.282391) (xy 62.254932 104.282391) + (xy 62.26108 104.285983) (xy 62.262735 104.286808) (xy 62.276878 104.29505) (xy 62.4486 104.357121) + (xy 62.628721 104.387082) (xy 62.808398 104.38399) (xy 62.811291 104.383941) (xy 62.990266 104.347805) + (xy 62.990269 104.347803) (xy 62.990274 104.347803) (xy 63.15976 104.279862) (xy 63.314146 104.182363) + (xy 63.318274 104.178554) (xy 63.402432 104.100888) (xy 66.077331 104.100888) (xy 66.077331 104.258581) + (xy 66.108092 104.413224) (xy 66.108095 104.413236) (xy 66.168433 104.558907) (xy 66.16844 104.55892) + (xy 66.256041 104.690023) (xy 66.256044 104.690027) (xy 66.367538 104.801521) (xy 66.367542 104.801524) + (xy 66.498645 104.889125) (xy 66.498649 104.889127) (xy 66.498652 104.889129) (xy 66.573785 104.92025) + (xy 66.58935 104.932792) (xy 66.607534 104.941097) (xy 66.615996 104.954265) (xy 66.628187 104.964089) + (xy 66.6345 104.983058) (xy 66.645308 104.999875) (xy 66.64927 105.027434) (xy 66.650252 105.030383) + (xy 66.650331 105.03481) (xy 66.650331 105.110598) (xy 66.630646 105.177637) (xy 66.577842 105.223392) + (xy 66.573784 105.225159) (xy 66.498655 105.256278) (xy 66.498645 105.256283) (xy 66.367542 105.343884) + (xy 66.367538 105.343887) (xy 66.256044 105.455381) (xy 66.256041 105.455385) (xy 66.16844 105.586488) + (xy 66.168433 105.586501) (xy 66.108095 105.732172) (xy 66.108092 105.732184) (xy 66.077331 105.886827) + (xy 66.077331 106.04452) (xy 66.108092 106.199163) (xy 66.108095 106.199175) (xy 66.168433 106.344846) + (xy 66.16844 106.344859) (xy 66.256041 106.475962) (xy 66.256044 106.475966) (xy 66.367538 106.58746) + (xy 66.367542 106.587463) (xy 66.498645 106.675064) (xy 66.498658 106.675071) (xy 66.619665 106.725193) + (xy 66.644334 106.735411) (xy 66.798984 106.766173) (xy 66.798987 106.766174) (xy 66.798989 106.766174) + (xy 66.956675 106.766174) (xy 66.956676 106.766173) (xy 67.111328 106.735411) (xy 67.25701 106.675068) + (xy 67.38812 106.587463) (xy 67.49962 106.475963) (xy 67.587225 106.344853) (xy 67.592638 106.331786) + (xy 67.638819 106.220292) (xy 67.647568 106.199171) (xy 67.678331 106.044516) (xy 67.678331 105.886832) + (xy 67.678331 105.886829) (xy 67.67833 105.886827) (xy 67.647568 105.732177) (xy 67.636064 105.704404) + (xy 67.587228 105.586501) (xy 67.587221 105.586488) (xy 67.49962 105.455385) (xy 67.499617 105.455381) + (xy 67.388123 105.343887) (xy 67.388119 105.343884) (xy 67.257016 105.256283) (xy 67.257006 105.256278) + (xy 67.181878 105.225159) (xy 67.166312 105.212615) (xy 67.148128 105.204311) (xy 67.139663 105.19114) + (xy 67.127475 105.181318) (xy 67.121162 105.16235) (xy 67.110354 105.145533) (xy 67.106391 105.117972) + (xy 67.10541 105.115024) (xy 67.105331 105.110598) (xy 67.105331 105.03481) (xy 67.125016 104.967771) + (xy 67.17782 104.922016) (xy 67.18183 104.920269) (xy 67.25701 104.889129) (xy 67.38812 104.801524) + (xy 67.49962 104.690024) (xy 67.587225 104.558914) (xy 67.647568 104.413232) (xy 67.678331 104.258577) + (xy 67.678331 104.100893) (xy 67.678331 104.10089) (xy 67.67833 104.100888) (xy 67.678204 104.100253) + (xy 67.647568 103.946238) (xy 67.644375 103.93853) (xy 67.587228 103.800562) (xy 67.587221 103.800549) + (xy 67.49962 103.669446) (xy 67.499617 103.669442) (xy 67.388123 103.557948) (xy 67.388119 103.557945) + (xy 67.257016 103.470344) (xy 67.257003 103.470337) (xy 67.111332 103.409999) (xy 67.11132 103.409996) + (xy 66.956676 103.379235) (xy 66.956673 103.379235) (xy 66.798989 103.379235) (xy 66.798986 103.379235) + (xy 66.644341 103.409996) (xy 66.644329 103.409999) (xy 66.498658 103.470337) (xy 66.498645 103.470344) + (xy 66.367542 103.557945) (xy 66.367538 103.557948) (xy 66.256044 103.669442) (xy 66.256041 103.669446) + (xy 66.16844 103.800549) (xy 66.168433 103.800562) (xy 66.108095 103.946233) (xy 66.108092 103.946245) + (xy 66.077331 104.100888) (xy 63.402432 104.100888) (xy 63.44833 104.05853) (xy 63.448332 104.058528) + (xy 63.449068 104.057547) (xy 63.557885 103.912447) (xy 63.639184 103.748948) (xy 63.689542 103.573433) + (xy 63.707297 103.391703) (xy 63.69186 103.20976) (xy 63.691858 103.209754) (xy 63.679257 103.163626) + (xy 63.643743 103.033618) (xy 63.635983 103.017449) (xy 63.632896 103.011004) (xy 63.632848 103.010746) + (xy 63.616471 102.976719) (xy 63.616343 102.97593) (xy 63.604302 102.923131) (xy 63.604303 102.915669) + (xy 63.604307 102.885708) (xy 63.604306 102.885704) (xy 63.604307 102.877698) (xy 63.604299 102.87756) + (xy 63.604299 101.574279) (xy 63.606955 101.562607) (xy 63.605921 101.554291) (xy 63.616509 101.520623) + (xy 63.617351 101.51887) (xy 63.621114 101.511029) (xy 63.623123 101.506843) (xy 63.623173 101.506739) + (xy 63.636251 101.479555) (xy 63.636418 101.479135) (xy 63.643783 101.463791) (xy 63.6919 101.287642) + (xy 63.707337 101.105693) (xy 63.689581 100.923955) (xy 63.63922 100.748434) (xy 63.557918 100.58493) + (xy 63.470881 100.468873) (xy 63.448362 100.438845) (xy 63.442498 100.433433) (xy 63.314169 100.315004) + (xy 63.314166 100.315002) (xy 63.314165 100.315001) (xy 63.314162 100.314999) (xy 63.159777 100.217501) + (xy 62.990287 100.149558) (xy 62.990277 100.149556) (xy 62.811292 100.113418) (xy 62.811299 100.113418) + (xy 62.639594 100.110465) (xy 62.628718 100.110278) (xy 62.628717 100.110278) (xy 62.628714 100.110278) + (xy 62.448597 100.140238) (xy 62.448584 100.140241) (xy 62.276863 100.202313) (xy 62.262348 100.21077) + (xy 62.262263 100.210819) (xy 62.255176 100.21494) (xy 62.25493 100.215008) (xy 62.227138 100.231244) + (xy 62.22689 100.231389) (xy 62.224163 100.232059) (xy 62.164546 100.248196) (xy 62.124201 100.248193) + (xy 62.124097 100.2482) (xy 60.683396 100.2482) (xy 60.675214 100.248198) (xy 60.675192 100.248193) + (xy 60.645265 100.248195) (xy 60.643028 100.248195) (xy 60.642746 100.248112) (xy 60.580493 100.231262) + (xy 60.552671 100.215008) (xy 60.546605 100.211464) (xy 60.544907 100.210617) (xy 60.535968 100.205408) + (xy 60.530721 100.20235) (xy 60.358997 100.140278) (xy 60.358991 100.140277) (xy 60.178881 100.110319) + (xy 60.178878 100.110319) (xy 60.170339 100.110465) (xy 59.996307 100.113459) (xy 59.817334 100.149594) + (xy 59.817323 100.149597) (xy 59.647842 100.217537) (xy 59.647841 100.217537) (xy 59.493461 100.315032) + (xy 59.493458 100.315034) (xy 59.359267 100.438873) (xy 59.249715 100.584954) (xy 59.16842 100.748444) + (xy 59.168419 100.748447) (xy 59.168418 100.74845) (xy 59.146745 100.823984) (xy 59.118058 100.923965) + (xy 59.101863 101.089737) (xy 59.100304 101.105693) (xy 59.103709 101.145827) (xy 59.115703 101.287206) + (xy 59.11574 101.287635) (xy 59.148518 101.407628) (xy 59.163856 101.463778) (xy 59.16386 101.463788) + (xy 59.171098 101.47887) (xy 59.17114 101.478956) (xy 59.174723 101.486438) (xy 59.174781 101.48674) + (xy 59.191096 101.520623) (xy 59.191136 101.520706) (xy 59.191281 101.5216) (xy 59.203301 101.574269) + (xy 59.203301 102.923122) (xy 59.191107 102.976745) (xy 59.190519 102.977971) (xy 59.190439 102.978138) + (xy 59.171566 103.017337) (xy 59.171242 103.018139) (xy 59.163818 103.03361) (xy 59.115701 103.209754) + (xy 59.115701 103.209756) (xy 59.102252 103.368281) (xy 59.100374 103.390427) (xy 59.100265 103.391706) + (xy 54.3125 103.391706) (xy 54.3125 97.54655) (xy 55.2895 97.54655) (xy 55.2895 97.715849) (xy 55.315981 97.883047) + (xy 55.368296 98.044053) (xy 55.445152 98.194888) (xy 55.544648 98.331834) (xy 55.544652 98.331839) + (xy 55.66436 98.451547) (xy 55.664365 98.451551) (xy 55.741373 98.5075) (xy 55.801315 98.55105) + (xy 55.894641 98.598602) (xy 55.952146 98.627903) (xy 55.952148 98.627903) (xy 55.952151 98.627905) + (xy 56.03635 98.655263) (xy 56.113152 98.680218) (xy 56.280351 98.7067) (xy 56.280356 98.7067) (xy 56.449649 98.7067) + (xy 56.616847 98.680218) (xy 56.777849 98.627905) (xy 56.928685 98.55105) (xy 57.065641 98.451546) + (xy 57.185346 98.331841) (xy 57.28485 98.194885) (xy 57.361705 98.044049) (xy 57.414018 97.883047) + (xy 57.423883 97.820763) (xy 57.4405 97.715849) (xy 57.4405 97.54655) (xy 57.414928 97.385098) (xy 57.423882 97.315805) + (xy 57.468879 97.262353) (xy 57.53563 97.241713) (xy 57.537401 97.2417) (xy 57.775944 97.2417) (xy 57.775951 97.2417) + (xy 58.055442 97.204904) (xy 58.327739 97.131942) (xy 58.588183 97.024063) (xy 58.832317 96.883112) + (xy 59.055965 96.7115) (xy 59.2553 96.512165) (xy 59.322992 96.423946) (xy 59.37942 96.382744) (xy 59.449166 96.378589) + (xy 59.510086 96.412801) (xy 59.542839 96.474518) (xy 59.537026 96.544146) (xy 59.528755 96.561433) + (xy 59.472683 96.658551) (xy 59.472675 96.658568) (xy 59.362597 96.924321) (xy 59.288146 97.202176) + (xy 59.250601 97.487361) (xy 59.2506 97.487377) (xy 59.2506 97.775022) (xy 59.250601 97.775038) + (xy 59.288146 98.060223) (xy 59.362597 98.338078) (xy 59.472675 98.603831) (xy 59.472683 98.603848) + (xy 59.616504 98.852951) (xy 59.616515 98.852967) (xy 59.791621 99.081171) (xy 59.791627 99.081178) + (xy 59.995021 99.284572) (xy 59.995028 99.284578) (xy 60.128307 99.386846) (xy 60.223241 99.459691) + (xy 60.223248 99.459695) (xy 60.472351 99.603516) (xy 60.472356 99.603518) (xy 60.472359 99.60352) + (xy 60.472363 99.603521) (xy 60.472368 99.603524) (xy 60.514977 99.621173) (xy 60.73812 99.713602) + (xy 61.015975 99.788053) (xy 61.301171 99.8256) (xy 61.301178 99.8256) (xy 61.588822 99.8256) (xy 61.588829 99.8256) + (xy 61.874025 99.788053) (xy 62.15188 99.713602) (xy 62.417641 99.60352) (xy 62.666759 99.459691) + (xy 62.894973 99.284577) (xy 63.098377 99.081173) (xy 63.273491 98.852959) (xy 63.41732 98.603841) + (xy 63.527402 98.33808) (xy 63.601853 98.060225) (xy 63.6394 97.775029) (xy 63.6394 97.54655) (xy 65.4495 97.54655) + (xy 65.4495 97.715849) (xy 65.475981 97.883047) (xy 65.528296 98.044053) (xy 65.605152 98.194888) + (xy 65.704648 98.331834) (xy 65.704652 98.331839) (xy 65.82436 98.451547) (xy 65.824365 98.451551) + (xy 65.901373 98.5075) (xy 65.961315 98.55105) (xy 66.054641 98.598602) (xy 66.112146 98.627903) + (xy 66.112148 98.627903) (xy 66.112151 98.627905) (xy 66.19635 98.655263) (xy 66.273152 98.680218) + (xy 66.440351 98.7067) (xy 66.440356 98.7067) (xy 66.609649 98.7067) (xy 66.776847 98.680218) (xy 66.937849 98.627905) + (xy 67.088685 98.55105) (xy 67.225641 98.451546) (xy 67.345346 98.331841) (xy 67.44485 98.194885) + (xy 67.521705 98.044049) (xy 67.574018 97.883047) (xy 67.583883 97.820763) (xy 67.6005 97.715849) + (xy 67.6005 97.54655) (xy 67.574018 97.379352) (xy 67.529296 97.241713) (xy 67.521705 97.218351) + (xy 67.521703 97.218348) (xy 67.521703 97.218346) (xy 67.477676 97.13194) (xy 67.44485 97.067515) + (xy 67.413281 97.024064) (xy 67.345351 96.930565) (xy 67.345347 96.93056) (xy 67.225639 96.810852) + (xy 67.225634 96.810848) (xy 67.088688 96.711352) (xy 67.088687 96.711351) (xy 67.088685 96.71135) + (xy 67.041582 96.68735) (xy 66.937853 96.634496) (xy 66.776847 96.582181) (xy 66.609649 96.5557) + (xy 66.609644 96.5557) (xy 66.440356 96.5557) (xy 66.440351 96.5557) (xy 66.273152 96.582181) (xy 66.112146 96.634496) + (xy 65.961311 96.711352) (xy 65.824365 96.810848) (xy 65.82436 96.810852) (xy 65.704652 96.93056) + (xy 65.704648 96.930565) (xy 65.605152 97.067511) (xy 65.528296 97.218346) (xy 65.475981 97.379352) + (xy 65.4495 97.54655) (xy 63.6394 97.54655) (xy 63.6394 97.487371) (xy 63.601853 97.202175) (xy 63.527402 96.92432) + (xy 63.41732 96.658559) (xy 63.417318 96.658556) (xy 63.417316 96.658551) (xy 63.273495 96.409448) + (xy 63.273491 96.409441) (xy 63.169569 96.274007) (xy 63.098378 96.181228) (xy 63.098372 96.181221) + (xy 62.894978 95.977827) (xy 62.894971 95.977821) (xy 62.666767 95.802715) (xy 62.666765 95.802713) + (xy 62.666759 95.802709) (xy 62.666754 95.802706) (xy 62.666751 95.802704) (xy 62.417648 95.658883) + (xy 62.417631 95.658875) (xy 62.151878 95.548797) (xy 61.874023 95.474346) (xy 61.588838 95.436801) + (xy 61.588835 95.4368) (xy 61.588829 95.4368) (xy 61.301171 95.4368) (xy 61.301165 95.4368) (xy 61.301161 95.436801) + (xy 61.015976 95.474346) (xy 60.738121 95.548797) (xy 60.472368 95.658875) (xy 60.472351 95.658883) + (xy 60.223248 95.802704) (xy 60.223232 95.802715) (xy 59.995028 95.977821) (xy 59.995021 95.977827) + (xy 59.791627 96.181221) (xy 59.72043 96.274007) (xy 59.664001 96.315209) (xy 59.594255 96.319364) + (xy 59.533335 96.285151) (xy 59.500583 96.223434) (xy 59.506396 96.153807) (xy 59.514661 96.136531) + (xy 59.567863 96.044383) (xy 59.675742 95.783939) (xy 59.748704 95.511642) (xy 59.7855 95.232151) + (xy 59.7855 94.950249) (xy 59.748704 94.670758) (xy 59.675742 94.398461) (xy 59.668842 94.381804) + (xy 59.643849 94.321464) (xy 59.567863 94.138017) (xy 59.567861 94.138014) (xy 59.567859 94.138009) + (xy 59.426916 93.89389) (xy 59.426912 93.893883) (xy 59.2553 93.670235) (xy 59.255298 93.670233) + (xy 59.255295 93.670229) (xy 59.05597 93.470904) (xy 59.031421 93.452067) (xy 58.832317 93.299288) + (xy 58.832311 93.299284) (xy 58.832309 93.299283) (xy 58.58819 93.15834) (xy 58.588179 93.158335) + (xy 58.327743 93.050459) (xy 58.055439 92.977495) (xy 57.775958 92.9407) (xy 57.775951 92.9407) + (xy 57.494049 92.9407) (xy 57.494041 92.9407) (xy 57.21456 92.977495) (xy 56.942256 93.050459) (xy 56.68182 93.158335) + (xy 56.681809 93.15834) (xy 56.43769 93.299283) (xy 56.437684 93.299287) (xy 56.437683 93.299288) + (xy 56.375901 93.346695) (xy 56.214029 93.470904) (xy 56.014704 93.670229) (xy 55.890814 93.831685) + (xy 55.857427 93.875197) (xy 55.843089 93.893882) (xy 55.843083 93.89389) (xy 55.70214 94.138009) + (xy 55.702135 94.13802) (xy 55.594259 94.398456) (xy 55.521295 94.67076) (xy 55.4845 94.950241) + (xy 55.4845 95.232158) (xy 55.521295 95.511639) (xy 55.594259 95.783943) (xy 55.702135 96.044379) + (xy 55.70214 96.04439) (xy 55.843083 96.288509) (xy 55.843094 96.288525) (xy 55.973838 96.458914) + (xy 55.999032 96.524083) (xy 55.984994 96.592528) (xy 55.93618 96.642517) (xy 55.931758 96.644884) + (xy 55.801313 96.71135) (xy 55.664365 96.810848) (xy 55.66436 96.810852) (xy 55.544652 96.93056) + (xy 55.544648 96.930565) (xy 55.445152 97.067511) (xy 55.368296 97.218346) (xy 55.315981 97.379352) + (xy 55.2895 97.54655) (xy 54.3125 97.54655) (xy 54.3125 95.946275) (xy 54.332185 95.879236) (xy 54.384989 95.833481) + (xy 54.388999 95.831734) (xy 54.464179 95.800594) (xy 54.595289 95.712989) (xy 54.706789 95.601489) + (xy 54.794394 95.470379) (xy 54.854737 95.324697) (xy 54.8855 95.170042) (xy 54.8855 95.012358) + (xy 54.8855 95.012355) (xy 54.885499 95.012353) (xy 54.854738 94.85771) (xy 54.854737 94.857703) + (xy 54.854735 94.857698) (xy 54.794397 94.712027) (xy 54.79439 94.712014) (xy 54.706789 94.580911) + (xy 54.706786 94.580907) (xy 54.595292 94.469413) (xy 54.595288 94.46941) (xy 54.464185 94.381809) + (xy 54.464172 94.381802) (xy 54.318501 94.321464) (xy 54.318489 94.321461) (xy 54.163845 94.2907) + (xy 54.163842 94.2907) (xy 54.006158 94.2907) (xy 54.006155 94.2907) (xy 53.85151 94.321461) (xy 53.851498 94.321464) + (xy 53.705827 94.381802) (xy 53.705814 94.381809) (xy 53.574711 94.46941) (xy 53.574707 94.469413) + (xy 53.463213 94.580907) (xy 53.46321 94.580911) (xy 53.375609 94.712014) (xy 53.375602 94.712027) + (xy 53.315264 94.857698) (xy 53.315261 94.85771) (xy 53.2845 95.012353) (xy 45.35175 95.012353) + (xy 45.35175 92.410241) (xy 61.8345 92.410241) (xy 61.8345 92.692158) (xy 61.871295 92.971639) (xy 61.944259 93.243943) + (xy 62.052135 93.504379) (xy 62.05214 93.50439) (xy 62.193083 93.748509) (xy 62.193088 93.748517) + (xy 62.3647 93.972165) (xy 62.364704 93.97217) (xy 62.564029 94.171495) (xy 62.564033 94.171498) + (xy 62.564035 94.1715) (xy 62.787683 94.343112) (xy 62.78769 94.343116) (xy 63.031809 94.484059) + (xy 63.031814 94.484061) (xy 63.031817 94.484063) (xy 63.292261 94.591942) (xy 63.564558 94.664904) + (xy 63.844049 94.7017) (xy 63.844056 94.7017) (xy 64.125944 94.7017) (xy 64.125951 94.7017) (xy 64.405442 94.664904) + (xy 64.677739 94.591942) (xy 64.938183 94.484063) (xy 65.182317 94.343112) (xy 65.405965 94.1715) + (xy 65.6053 93.972165) (xy 65.776912 93.748517) (xy 65.917863 93.504383) (xy 66.025742 93.243939) + (xy 66.098704 92.971642) (xy 66.1355 92.692151) (xy 66.1355 92.410249) (xy 66.098704 92.130758) + (xy 66.025742 91.858461) (xy 66.018842 91.841804) (xy 65.993849 91.781464) (xy 65.917863 91.598017) + (xy 65.917861 91.598014) (xy 65.917859 91.598009) (xy 65.776916 91.35389) (xy 65.776912 91.353883) + (xy 65.6053 91.130235) (xy 65.605298 91.130233) (xy 65.605295 91.130229) (xy 65.40597 90.930904) + (xy 65.405965 90.9309) (xy 65.182317 90.759288) (xy 65.182311 90.759284) (xy 65.182309 90.759283) + (xy 64.93819 90.61834) (xy 64.938179 90.618335) (xy 64.677743 90.510459) (xy 64.405439 90.437495) + (xy 64.125958 90.4007) (xy 64.125951 90.4007) (xy 63.844049 90.4007) (xy 63.844041 90.4007) (xy 63.56456 90.437495) + (xy 63.292256 90.510459) (xy 63.03182 90.618335) (xy 63.031809 90.61834) (xy 62.78769 90.759283) + (xy 62.787684 90.759287) (xy 62.787683 90.759288) (xy 62.752057 90.786625) (xy 62.564029 90.930904) + (xy 62.364704 91.130229) (xy 62.295204 91.220803) (xy 62.204112 91.339517) (xy 62.193089 91.353882) + (xy 62.193083 91.35389) (xy 62.05214 91.598009) (xy 62.052135 91.59802) (xy 61.944259 91.858456) + (xy 61.871295 92.13076) (xy 61.8345 92.410241) (xy 45.35175 92.410241) (xy 45.35175 54.89275) (xy 51.4895 54.89275) + (xy 51.4895 57.120949) (xy 51.4895 57.664741) (xy 51.4895 60.672201) (xy 51.4895 62.772201) (xy 51.4895 64.555575) + (xy 51.4895 67.305) (xy 51.4895 69.945941) (xy 51.4895 70.886) (xy 51.489501 70.886009) (xy 51.501052 70.99345) + (xy 51.501054 70.993462) (xy 51.51226 71.044972) (xy 51.546383 71.147497) (xy 51.546386 71.147503) + (xy 51.624171 71.268537) (xy 51.624179 71.268548) (xy 51.669925 71.321342) (xy 51.669926 71.321344) + (xy 51.682594 71.332321) (xy 51.694769 71.342871) (xy 51.732544 71.401648) (xy 51.732544 71.471517) + (xy 51.694773 71.530293) (xy 51.683658 71.539924) (xy 51.589433 71.648664) (xy 51.58943 71.648668) + (xy 51.529664 71.779534) (xy 51.529662 71.779541) (xy 51.509977 71.84658) (xy 51.509976 71.846584) + (xy 51.4895 71.989) (xy 51.4895 73.70347) (xy 51.4895 76.750741) (xy 51.4895 78.625737) (xy 51.4895 80.8385) + (xy 51.489501 80.838509) (xy 51.501052 80.94595) (xy 51.501054 80.945962) (xy 51.51226 80.997472) + (xy 51.546383 81.099997) (xy 51.546386 81.100003) (xy 51.624171 81.221037) (xy 51.624179 81.221048) + (xy 51.669923 81.27384) (xy 51.669926 81.273843) (xy 51.66993 81.273847) (xy 51.778664 81.368067) + (xy 51.778667 81.368068) (xy 51.778668 81.368069) (xy 51.908161 81.427208) (xy 51.909541 81.427838) + (xy 51.97658 81.447523) (xy 51.976584 81.447524) (xy 52.119 81.468) (xy 77.657504 81.468) (xy 77.724543 81.487685) + (xy 77.770298 81.540489) (xy 77.780242 81.609647) (xy 77.751217 81.673203) (xy 77.745185 81.679681) + (xy 67.916862 91.508003) (xy 67.855539 91.541488) (xy 67.785847 91.536504) (xy 67.781729 91.534883) + (xy 67.706601 91.503764) (xy 67.706589 91.503761) (xy 67.551945 91.473) (xy 67.551942 91.473) (xy 67.394258 91.473) + (xy 67.394255 91.473) (xy 67.23961 91.503761) (xy 67.239598 91.503764) (xy 67.093927 91.564102) + (xy 67.093914 91.564109) (xy 66.962811 91.65171) (xy 66.962807 91.651713) (xy 66.851313 91.763207) + (xy 66.85131 91.763211) (xy 66.763709 91.894314) (xy 66.763702 91.894327) (xy 66.703364 92.039998) + (xy 66.703361 92.04001) (xy 66.6726 92.194653) (xy 66.6726 92.352346) (xy 66.703361 92.506989) (xy 66.703364 92.507001) + (xy 66.763702 92.652672) (xy 66.763709 92.652685) (xy 66.85131 92.783788) (xy 66.851313 92.783792) + (xy 66.962807 92.895286) (xy 66.962811 92.895289) (xy 67.093914 92.98289) (xy 67.093927 92.982897) + (xy 67.183293 93.019913) (xy 67.239603 93.043237) (xy 67.394253 93.073999) (xy 67.394256 93.074) + (xy 67.394258 93.074) (xy 67.551944 93.074) (xy 67.551945 93.073999) (xy 67.706597 93.043237) (xy 67.852279 92.982894) + (xy 67.983389 92.895289) (xy 68.094889 92.783789) (xy 68.182494 92.652679) (xy 68.191871 92.630042) + (xy 68.224247 92.551877) (xy 68.242837 92.506997) (xy 68.2736 92.352342) (xy 68.2736 92.194658) + (xy 68.2736 92.194655) (xy 68.273599 92.194653) (xy 68.269094 92.172005) (xy 68.242837 92.040003) + (xy 68.211714 91.964865) (xy 68.204246 91.895401) (xy 68.23552 91.832922) (xy 68.238566 91.829765) + (xy 69.64712 90.421211) (xy 69.708442 90.387728) (xy 69.778134 90.392712) (xy 69.834067 90.434584) + (xy 69.858484 90.500048) (xy 69.8588 90.508894) (xy 69.8588 109.344753) (xy 69.858798 109.344758) + (xy 69.8588 109.39001) (xy 69.8588 109.435253) (xy 69.858801 109.435257) (xy 69.858802 109.435263) + (xy 69.874488 109.473127) (xy 69.875261 109.474994) (xy 69.875264 109.475001) (xy 69.895599 109.524094) + (xy 69.903068 109.593563) (xy 69.871793 109.656043) (xy 69.811704 109.691695) (xy 69.741879 109.689202) + (xy 69.719037 109.678933) (xy 69.700694 109.668342) (xy 69.700679 109.668335) (xy 69.440243 109.560459) + (xy 69.167939 109.487495) (xy 68.888458 109.4507) (xy 68.888451 109.4507) (xy 68.606549 109.4507) + (xy 68.606541 109.4507) (xy 68.32706 109.487495) (xy 68.054756 109.560459) (xy 67.79432 109.668335) + (xy 67.794309 109.66834) (xy 67.55019 109.809283) (xy 67.550184 109.809287) (xy 67.550183 109.809288) + (xy 67.502669 109.845747) (xy 67.326529 109.980904) (xy 67.127204 110.180229) (xy 67.013881 110.327914) + (xy 66.966827 110.389237) (xy 66.955589 110.403882) (xy 66.955583 110.40389) (xy 66.81464 110.648009) + (xy 66.814635 110.64802) (xy 66.706759 110.908456) (xy 66.633795 111.18076) (xy 66.597 111.460241) + (xy 66.597 111.742158) (xy 66.633795 112.021639) (xy 66.706759 112.293943) (xy 66.814635 112.554379) + (xy 66.81464 112.55439) (xy 66.955583 112.798509) (xy 66.955588 112.798517) (xy 67.073574 112.952278) + (xy 67.127204 113.02217) (xy 67.326529 113.221495) (xy 67.326533 113.221498) (xy 67.326535 113.2215) + (xy 67.550183 113.393112) (xy 67.55019 113.393116) (xy 67.794309 113.534059) (xy 67.794314 113.534061) + (xy 67.794317 113.534063) (xy 67.902334 113.578805) (xy 68.019986 113.627538) (xy 68.054761 113.641942) + (xy 68.327058 113.714904) (xy 68.606549 113.7517) (xy 68.606556 113.7517) (xy 68.888444 113.7517) + (xy 68.888451 113.7517) (xy 69.167942 113.714904) (xy 69.440239 113.641942) (xy 69.700683 113.534063) + (xy 69.944817 113.393112) (xy 70.168465 113.2215) (xy 70.3678 113.022165) (xy 70.539412 112.798517) + (xy 70.680363 112.554383) (xy 70.788242 112.293939) (xy 70.861204 112.021642) (xy 70.898 111.742151) + (xy 70.898 111.460249) (xy 70.861204 111.180758) (xy 70.788242 110.908461) (xy 70.775898 110.878661) + (xy 70.759295 110.838576) (xy 70.680363 110.648017) (xy 70.680359 110.648011) (xy 70.679503 110.646273) + (xy 70.679402 110.645698) (xy 70.67881 110.644267) (xy 70.67913 110.644134) (xy 70.667502 110.577441) + (xy 70.694619 110.513048) (xy 70.752244 110.473538) (xy 70.822083 110.471455) (xy 70.878388 110.503736) + (xy 71.15993 110.785252) (xy 71.506922 111.132213) (xy 71.531983 111.157271) (xy 71.565471 111.218592) + (xy 71.56049 111.288284) (xy 71.558868 111.292407) (xy 71.527763 111.367503) (xy 71.527761 111.36751) + (xy 71.497 111.522153) (xy 71.497 111.679846) (xy 71.527761 111.834489) (xy 71.527764 111.834501) + (xy 71.588102 111.980172) (xy 71.588109 111.980185) (xy 71.67571 112.111288) (xy 71.675713 112.111292) + (xy 71.787207 112.222786) (xy 71.787211 112.222789) (xy 71.918314 112.31039) (xy 71.918327 112.310397) + (xy 72.063998 112.370735) (xy 72.064003 112.370737) (xy 72.218653 112.401499) (xy 72.218656 112.4015) + (xy 72.218658 112.4015) (xy 72.376344 112.4015) (xy 72.376345 112.401499) (xy 72.530997 112.370737) + (xy 72.676679 112.310394) (xy 72.807789 112.222789) (xy 72.919289 112.111289) (xy 72.960774 112.049202) + (xy 73.014384 112.004399) (xy 73.083709 111.99569) (xy 73.146737 112.025845) (xy 73.151559 112.030415) + (xy 74.171366 113.050276) (xy 74.461574 113.3405) (xy 74.489984 113.368911) (xy 74.523467 113.430235) + (xy 74.5263 113.45659) (xy 74.5263 129.795924) (xy 74.506615 129.862963) (xy 74.453811 129.908718) + (xy 74.449753 129.910485) (xy 74.374624 129.941604) (xy 74.374614 129.941609) (xy 74.243511 130.02921) + (xy 74.243507 130.029213) (xy 74.132013 130.140707) (xy 74.13201 130.140711) (xy 74.044409 130.271814) + (xy 74.044402 130.271827) (xy 73.984064 130.417498) (xy 73.984061 130.41751) (xy 73.9533 130.572153) + (xy 73.9533 130.729846) (xy 73.984061 130.884489) (xy 73.984064 130.884501) (xy 74.044402 131.030172) + (xy 74.044409 131.030185) (xy 74.13201 131.161288) (xy 74.132013 131.161292) (xy 74.243507 131.272786) + (xy 74.243511 131.272789) (xy 74.374614 131.36039) (xy 74.374627 131.360397) (xy 74.516479 131.419153) + (xy 74.520303 131.420737) (xy 74.674953 131.451499) (xy 74.674956 131.4515) (xy 74.674958 131.4515) + (xy 74.832644 131.4515) (xy 74.832645 131.451499) (xy 74.987297 131.420737) (xy 75.132979 131.360394) + (xy 75.264089 131.272789) (xy 75.375589 131.161289) (xy 75.463194 131.030179) (xy 75.523537 130.884497) + (xy 75.5543 130.729842) (xy 75.5543 130.572158) (xy 75.5543 130.572155) (xy 75.554299 130.572153) + (xy 75.543844 130.519595) (xy 75.523537 130.417503) (xy 75.52251 130.415024) (xy 75.463197 130.271827) + (xy 75.46319 130.271814) (xy 75.375589 130.140711) (xy 75.375586 130.140707) (xy 75.264092 130.029213) + (xy 75.264088 130.02921) (xy 75.132985 129.941609) (xy 75.132975 129.941604) (xy 75.057847 129.910485) + (xy 75.003444 129.866644) (xy 74.981379 129.80035) (xy 74.9813 129.795924) (xy 74.9813 113.499737) + (xy 75.000985 113.432698) (xy 75.053789 113.386943) (xy 75.122947 113.376999) (xy 75.186503 113.406024) + (xy 75.192973 113.412049) (xy 79.252486 117.47191) (xy 79.285967 117.533233) (xy 79.2888 117.559586) + (xy 79.2888 148.845924) (xy 79.269115 148.912963) (xy 79.216311 148.958718) (xy 79.212253 148.960485) + (xy 79.137124 148.991604) (xy 79.137114 148.991609) (xy 79.006011 149.07921) (xy 79.006007 149.079213) + (xy 78.894513 149.190707) (xy 78.89451 149.190711) (xy 78.806909 149.321814) (xy 78.806902 149.321827) + (xy 78.746564 149.467498) (xy 78.746561 149.46751) (xy 78.7158 149.622153) (xy 78.7158 149.779846) + (xy 78.746561 149.934489) (xy 78.746564 149.934501) (xy 78.806902 150.080172) (xy 78.806909 150.080185) + (xy 78.89451 150.211288) (xy 78.894513 150.211292) (xy 79.006007 150.322786) (xy 79.006011 150.322789) + (xy 79.137114 150.41039) (xy 79.137127 150.410397) (xy 79.282798 150.470735) (xy 79.282803 150.470737) + (xy 79.437453 150.501499) (xy 79.437456 150.5015) (xy 79.437458 150.5015) (xy 79.595144 150.5015) + (xy 79.595145 150.501499) (xy 79.613958 150.497757) (xy 79.668609 150.486887) (xy 79.7382 150.493114) + (xy 79.793377 150.535977) (xy 79.816622 150.601867) (xy 79.8168 150.608504) (xy 79.8168 154.604715) + (xy 79.797115 154.671754) (xy 79.744311 154.717509) (xy 79.675153 154.727453) (xy 79.611597 154.698428) + (xy 79.573823 154.63965) (xy 79.570327 154.624113) (xy 79.555318 154.529352) (xy 79.528636 154.447236) + (xy 79.503005 154.368351) (xy 79.503003 154.368348) (xy 79.503003 154.368346) (xy 79.472144 154.307783) + (xy 79.42615 154.217515) (xy 79.394581 154.174064) (xy 79.326651 154.080565) (xy 79.326647 154.08056) + (xy 79.206939 153.960852) (xy 79.206934 153.960848) (xy 79.069988 153.861352) (xy 79.069987 153.861351) + (xy 79.069985 153.86135) (xy 79.022882 153.83735) (xy 78.919153 153.784496) (xy 78.758147 153.732181) + (xy 78.590949 153.7057) (xy 78.590944 153.7057) (xy 78.421656 153.7057) (xy 78.421651 153.7057) + (xy 78.254452 153.732181) (xy 78.093446 153.784496) (xy 77.942611 153.861352) (xy 77.805665 153.960848) + (xy 77.80566 153.960852) (xy 77.685952 154.08056) (xy 77.685948 154.080565) (xy 77.586452 154.217511) + (xy 77.509596 154.368346) (xy 77.457281 154.529352) (xy 77.4308 154.69655) (xy 77.4308 154.865849) + (xy 77.457281 155.033047) (xy 77.509596 155.194053) (xy 77.586452 155.344888) (xy 77.685948 155.481834) + (xy 77.685952 155.481839) (xy 77.80566 155.601547) (xy 77.805665 155.601551) (xy 77.925117 155.688337) + (xy 77.942615 155.70105) (xy 78.02789 155.7445) (xy 78.093446 155.777903) (xy 78.093448 155.777903) + (xy 78.093451 155.777905) (xy 78.17975 155.805945) (xy 78.254452 155.830218) (xy 78.421651 155.8567) + (xy 78.463645 155.8567) (xy 78.530684 155.876385) (xy 78.576439 155.929189) (xy 78.586383 155.998347) + (xy 78.557358 156.061903) (xy 78.511097 156.095261) (xy 78.380627 156.149302) (xy 78.380614 156.149309) + (xy 78.249511 156.23691) (xy 78.249507 156.236913) (xy 78.138013 156.348407) (xy 78.13801 156.348411) + (xy 78.050409 156.479514) (xy 78.050402 156.479527) (xy 77.990064 156.625198) (xy 77.990061 156.62521) + (xy 77.9593 156.779853) (xy 77.9593 156.937546) (xy 77.990061 157.092189) (xy 77.990064 157.092201) + (xy 78.050402 157.237872) (xy 78.050409 157.237885) (xy 78.13801 157.368988) (xy 78.138013 157.368992) + (xy 78.249507 157.480486) (xy 78.249511 157.480489) (xy 78.380614 157.56809) (xy 78.380627 157.568097) + (xy 78.487598 157.612405) (xy 78.526303 157.628437) (xy 78.680953 157.659199) (xy 78.680956 157.6592) + (xy 78.680958 157.6592) (xy 78.838644 157.6592) (xy 78.838645 157.659199) (xy 78.993297 157.628437) + (xy 79.111751 157.579372) (xy 79.138972 157.568097) (xy 79.138972 157.568096) (xy 79.138979 157.568094) + (xy 79.270089 157.480489) (xy 79.381589 157.368989) (xy 79.469194 157.237879) (xy 79.529537 157.092197) + (xy 79.5603 156.937542) (xy 79.5603 156.779858) (xy 79.5603 156.779855) (xy 79.560299 156.779853) + (xy 79.529538 156.62521) (xy 79.529537 156.625203) (xy 79.525215 156.614768) (xy 79.469197 156.479527) + (xy 79.46919 156.479514) (xy 79.381589 156.348411) (xy 79.381586 156.348407) (xy 79.270092 156.236913) + (xy 79.270088 156.23691) (xy 79.138985 156.149309) (xy 79.138972 156.149302) (xy 78.993301 156.088964) + (xy 78.993289 156.088961) (xy 78.838646 156.0582) (xy 78.832582 156.057603) (xy 78.832716 156.056238) + (xy 78.772358 156.038515) (xy 78.726603 155.985711) (xy 78.716659 155.916553) (xy 78.745684 155.852997) + (xy 78.801078 155.816269) (xy 78.8275 155.807683) (xy 78.919149 155.777905) (xy 79.069985 155.70105) + (xy 79.206941 155.601546) (xy 79.326646 155.481841) (xy 79.42615 155.344885) (xy 79.503005 155.194049) + (xy 79.555318 155.033047) (xy 79.570327 154.938286) (xy 79.600256 154.875151) (xy 79.659568 154.83822) + (xy 79.72943 154.839218) (xy 79.787663 154.877828) (xy 79.815777 154.941792) (xy 79.8168 154.957684) + (xy 79.8168 157.845404) (xy 79.797115 157.912443) (xy 79.780481 157.933085) (xy 69.665062 168.048503) + (xy 69.603739 168.081988) (xy 69.534047 168.077004) (xy 69.529929 168.075383) (xy 69.454801 168.044264) + (xy 69.454789 168.044261) (xy 69.300145 168.0135) (xy 69.300142 168.0135) (xy 69.142458 168.0135) + (xy 69.142455 168.0135) (xy 68.98781 168.044261) (xy 68.987798 168.044264) (xy 68.842127 168.104602) + (xy 68.842116 168.104608) (xy 68.80752 168.127725) (xy 68.740843 168.148602) (xy 68.673463 168.130117) + (xy 68.626773 168.078138) (xy 68.624069 168.072075) (xy 68.508983 167.794232) (xy 68.500491 167.779524) + (xy 68.3582 167.533068) (xy 68.17462 167.293821) (xy 68.174614 167.293814) (xy 67.961385 167.080585) + (xy 67.961378 167.080579) (xy 67.722131 166.896999) (xy 67.460971 166.746218) (xy 67.460961 166.746214) + (xy 67.18236 166.630813) (xy 66.891066 166.552761) (xy 66.592093 166.513401) (xy 66.592088 166.5134) + (xy 66.592083 166.5134) (xy 66.290517 166.5134) (xy 66.290511 166.5134) (xy 66.290506 166.513401) + (xy 65.991533 166.552761) (xy 65.700239 166.630813) (xy 65.421638 166.746214) (xy 65.421628 166.746218) + (xy 65.160468 166.896999) (xy 64.921221 167.080579) (xy 64.921214 167.080585) (xy 64.707985 167.293814) + (xy 64.707979 167.293821) (xy 64.524399 167.533068) (xy 64.373618 167.794228) (xy 64.373614 167.794238) + (xy 64.258213 168.072839) (xy 64.180161 168.364133) (xy 64.140801 168.663106) (xy 64.1408 168.663123) + (xy 64.1408 168.964676) (xy 64.140801 168.964693) (xy 64.180161 169.263666) (xy 64.258213 169.55496) + (xy 64.373614 169.833561) (xy 64.373618 169.833571) (xy 64.524399 170.094731) (xy 64.707979 170.333978) + (xy 64.707985 170.333985) (xy 64.921214 170.547214) (xy 64.921221 170.54722) (xy 65.160468 170.7308) + (xy 65.421628 170.881581) (xy 65.421629 170.881581) (xy 65.421632 170.881583) (xy 65.549354 170.934487) + (xy 65.700239 170.996986) (xy 65.70024 170.996986) (xy 65.700242 170.996987) (xy 65.991532 171.075038) + (xy 66.290517 171.1144) (xy 66.290524 171.1144) (xy 66.592076 171.1144) (xy 66.592083 171.1144) + (xy 66.891068 171.075038) (xy 67.182358 170.996987) (xy 67.460968 170.881583) (xy 67.722132 170.7308) + (xy 67.96138 170.547219) (xy 68.174619 170.33398) (xy 68.3582 170.094732) (xy 68.508983 169.833568) + (xy 68.624004 169.555881) (xy 68.667845 169.501478) (xy 68.734139 169.479413) (xy 68.801838 169.496692) + (xy 68.807456 169.500232) (xy 68.842114 169.52339) (xy 68.842127 169.523397) (xy 68.987798 169.583735) + (xy 68.987803 169.583737) (xy 69.142453 169.614499) (xy 69.142456 169.6145) (xy 69.142458 169.6145) + (xy 69.300144 169.6145) (xy 69.300145 169.614499) (xy 69.454797 169.583737) (xy 69.567466 169.537067) + (xy 69.600472 169.523397) (xy 69.600472 169.523396) (xy 69.600479 169.523394) (xy 69.731589 169.435789) + (xy 69.843089 169.324289) (xy 69.930694 169.193179) (xy 69.937191 169.177495) (xy 69.975471 169.085076) + (xy 69.991037 169.047497) (xy 70.0218 168.892842) (xy 70.0218 168.735158) (xy 70.0218 168.735155) + (xy 70.021799 168.735153) (xy 69.995038 168.600617) (xy 69.991037 168.580503) (xy 69.959914 168.505365) + (xy 69.952446 168.435901) (xy 69.98372 168.373422) (xy 69.986767 168.370264) (xy 80.237165 158.119868) + (xy 80.241377 158.109697) (xy 80.241381 158.109693) (xy 80.24138 158.109693) (xy 80.271799 158.036255) + (xy 80.2718 158.036253) (xy 80.2718 149.993533) (xy 80.281239 149.94608) (xy 80.283467 149.940701) + (xy 80.286037 149.934497) (xy 80.3168 149.779842) (xy 80.3168 149.622158) (xy 80.3168 149.622155) + (xy 80.316799 149.622153) (xy 80.286038 149.467505) (xy 80.281239 149.45592) (xy 80.2718 149.408466) + (xy 80.2718 147.683162) (xy 83.60805 147.683162) (xy 83.60805 147.909237) (xy 83.624298 148.032643) + (xy 83.637557 148.133355) (xy 83.696065 148.351712) (xy 83.782575 148.560563) (xy 83.782577 148.560568) + (xy 83.78258 148.560573) (xy 83.895603 148.756335) (xy 84.033218 148.935679) (xy 84.033224 148.935686) + (xy 84.193063 149.095525) (xy 84.19307 149.095531) (xy 84.372414 149.233146) (xy 84.568176 149.346169) + (xy 84.568178 149.346169) (xy 84.568187 149.346175) (xy 84.777038 149.432685) (xy 84.995395 149.491193) + (xy 85.21952 149.5207) (xy 85.219527 149.5207) (xy 85.445573 149.5207) (xy 85.44558 149.5207) (xy 85.669705 149.491193) + (xy 85.888062 149.432685) (xy 86.096913 149.346175) (xy 86.292686 149.233146) (xy 86.472031 149.09553) + (xy 86.63188 148.935681) (xy 86.769496 148.756336) (xy 86.882525 148.560563) (xy 86.969035 148.351712) + (xy 87.027543 148.133355) (xy 87.05705 147.90923) (xy 87.05705 147.68317) (xy 87.027543 147.459045) + (xy 86.969035 147.240688) (xy 86.882525 147.031837) (xy 86.832524 146.945233) (xy 86.769496 146.836064) + (xy 86.631881 146.65672) (xy 86.631875 146.656713) (xy 86.472036 146.496874) (xy 86.472029 146.496868) + (xy 86.292685 146.359253) (xy 86.096923 146.24623) (xy 86.096918 146.246227) (xy 86.096913 146.246225) + (xy 85.888062 146.159715) (xy 85.669705 146.101207) (xy 85.632247 146.096275) (xy 85.445587 146.0717) + (xy 85.44558 146.0717) (xy 85.21952 146.0717) (xy 85.219512 146.0717) (xy 85.008452 146.099488) + (xy 84.995395 146.101207) (xy 84.922609 146.120709) (xy 84.777044 146.159713) (xy 84.77704 146.159714) + (xy 84.777038 146.159715) (xy 84.568187 146.246225) (xy 84.568184 146.246226) (xy 84.568176 146.24623) + (xy 84.372414 146.359253) (xy 84.19307 146.496868) (xy 84.193063 146.496874) (xy 84.033224 146.656713) + (xy 84.033218 146.65672) (xy 83.895603 146.836064) (xy 83.78258 147.031826) (xy 83.782575 147.031838) + (xy 83.696068 147.240681) (xy 83.696063 147.240694) (xy 83.680645 147.298237) (xy 83.642644 147.440062) + (xy 83.637558 147.459042) (xy 83.637556 147.459053) (xy 83.60805 147.683162) (xy 80.2718 147.683162) + (xy 80.2718 117.459262) (xy 80.271801 117.432757) (xy 80.2718 117.432754) (xy 80.2718 117.432747) + (xy 80.253297 117.388078) (xy 80.250714 117.381841) (xy 80.250713 117.381838) (xy 80.247862 117.374954) + (xy 80.238831 117.353148) (xy 80.237499 117.349579) (xy 80.237295 117.349262) (xy 80.213323 117.32529) + (xy 80.21332 117.325286) (xy 80.21332 117.325287) (xy 71.964815 109.07609) (xy 71.931333 109.014765) + (xy 71.9285 108.988412) (xy 71.9285 90.763571) (xy 71.948185 90.696532) (xy 72.000989 90.650777) + (xy 72.070147 90.640833) (xy 72.133703 90.669858) (xy 72.167061 90.716119) (xy 72.228302 90.863972) + (xy 72.228309 90.863985) (xy 72.31591 90.995088) (xy 72.315913 90.995092) (xy 72.427407 91.106586) + (xy 72.427411 91.106589) (xy 72.558514 91.19419) (xy 72.558527 91.194197) (xy 72.622761 91.220803) + (xy 72.704203 91.254537) (xy 72.780058 91.269625) (xy 72.830191 91.279598) (xy 72.892102 91.311983) + (xy 72.926676 91.372698) (xy 72.93 91.401215) (xy 72.93 94.236124) (xy 72.910315 94.303163) (xy 72.857511 94.348918) + (xy 72.853453 94.350685) (xy 72.778324 94.381804) (xy 72.778314 94.381809) (xy 72.647211 94.46941) + (xy 72.647207 94.469413) (xy 72.535713 94.580907) (xy 72.53571 94.580911) (xy 72.448109 94.712014) + (xy 72.448102 94.712027) (xy 72.387764 94.857698) (xy 72.387761 94.85771) (xy 72.357 95.012353) + (xy 72.357 95.170046) (xy 72.387761 95.324689) (xy 72.387764 95.324701) (xy 72.448102 95.470372) + (xy 72.448109 95.470385) (xy 72.53571 95.601488) (xy 72.535713 95.601492) (xy 72.647207 95.712986) + (xy 72.647211 95.712989) (xy 72.778314 95.80059) (xy 72.778318 95.800592) (xy 72.778321 95.800594) + (xy 72.853454 95.831715) (xy 72.907856 95.875554) (xy 72.929921 95.941848) (xy 72.93 95.946275) + (xy 72.93 104.51875) (xy 72.929999 104.518753) (xy 72.93 104.528941) (xy 72.93 104.609254) (xy 72.93061 104.610906) + (xy 72.931282 104.61236) (xy 72.931474 104.612813) (xy 72.940355 104.634253) (xy 72.964635 104.692868) + (xy 72.964636 104.692869) (xy 72.964638 104.692873) (xy 72.966012 104.694247) (xy 72.966013 104.694249) + (xy 73.001501 104.729735) (xy 73.001516 104.729749) (xy 73.046066 104.774299) (xy 73.046073 104.774303) + (xy 81.960941 113.688707) (xy 81.969492 113.697257) (xy 82.002979 113.75858) (xy 81.997996 113.828272) + (xy 81.996374 113.832393) (xy 81.965264 113.907498) (xy 81.965261 113.90751) (xy 81.9345 114.062153) + (xy 81.9345 114.219846) (xy 81.965261 114.374489) (xy 81.965264 114.374501) (xy 82.025602 114.520172) + (xy 82.025609 114.520185) (xy 82.11321 114.651288) (xy 82.113213 114.651292) (xy 82.224707 114.762786) + (xy 82.224711 114.762789) (xy 82.355814 114.85039) (xy 82.355818 114.850392) (xy 82.355821 114.850394) + (xy 82.430954 114.881515) (xy 82.485356 114.925354) (xy 82.507421 114.991648) (xy 82.5075 114.996075) + (xy 82.5075 128.383754) (xy 82.507498 128.383759) (xy 82.5075 128.411591) (xy 82.5075 128.474253) + (xy 82.507502 128.47426) (xy 82.507503 128.474265) (xy 82.523599 128.51312) (xy 82.537577 128.546865) + (xy 82.542138 128.557875) (xy 82.580266 128.596) (xy 82.58028 128.596013) (xy 82.580295 128.596028) + (xy 82.606132 128.621865) (xy 82.606136 128.621866) (xy 82.618053 128.633782) (xy 82.618054 128.633783) + (xy 84.197781 130.213344) (xy 86.469733 132.485059) (xy 86.73198 132.747278) (xy 86.765468 132.8086) + (xy 86.760487 132.878291) (xy 86.758864 132.882416) (xy 86.727764 132.957498) (xy 86.727761 132.95751) + (xy 86.697 133.112153) (xy 86.697 133.269846) (xy 86.727761 133.424489) (xy 86.727764 133.424501) + (xy 86.788102 133.570172) (xy 86.788109 133.570185) (xy 86.87571 133.701288) (xy 86.875713 133.701292) + (xy 86.987207 133.812786) (xy 86.987211 133.812789) (xy 87.118314 133.90039) (xy 87.118318 133.900392) + (xy 87.118321 133.900394) (xy 87.193454 133.931515) (xy 87.247856 133.975354) (xy 87.269921 134.041648) + (xy 87.27 134.046075) (xy 87.27 142.670747) (xy 87.27 142.761253) (xy 87.285906 142.799654) (xy 87.304636 142.84487) + (xy 96.257003 151.797236) (xy 96.290488 151.858559) (xy 96.285504 151.928251) (xy 96.283884 151.932368) + (xy 96.252763 152.007503) (xy 96.252761 152.00751) (xy 96.222 152.162153) (xy 96.222 152.319846) + (xy 96.252761 152.474489) (xy 96.252764 152.474501) (xy 96.313102 152.620172) (xy 96.313109 152.620185) + (xy 96.40071 152.751288) (xy 96.400713 152.751292) (xy 96.512207 152.862786) (xy 96.512211 152.862789) + (xy 96.643314 152.95039) (xy 96.643318 152.950392) (xy 96.643321 152.950394) (xy 96.718454 152.981515) + (xy 96.772856 153.025354) (xy 96.794921 153.091648) (xy 96.795 153.096075) (xy 96.795 154.25643) + (xy 96.775315 154.323469) (xy 96.758692 154.3441) (xy 96.157998 154.944947) (xy 95.619916 155.483167) + (xy 95.39497 155.70817) (xy 95.333652 155.741663) (xy 95.307278 155.7445) (xy 85.973053 155.7445) + (xy 85.882547 155.7445) (xy 85.882545 155.7445) (xy 85.882543 155.744501) (xy 85.798934 155.779131) + (xy 85.798932 155.779133) (xy 82.183332 159.394735) (xy 80.999932 160.578135) (xy 80.935935 160.642132) + (xy 80.926446 160.66504) (xy 80.9013 160.725746) (xy 80.9013 170.435924) (xy 80.881615 170.502963) + (xy 80.828811 170.548718) (xy 80.824753 170.550485) (xy 80.749624 170.581604) (xy 80.749614 170.581609) + (xy 80.618511 170.66921) (xy 80.618507 170.669213) (xy 80.507013 170.780707) (xy 80.50701 170.780711) + (xy 80.419409 170.911814) (xy 80.419402 170.911827) (xy 80.359064 171.057498) (xy 80.359061 171.05751) + (xy 80.3283 171.212153) (xy 80.3283 171.369846) (xy 80.359061 171.524489) (xy 80.359064 171.524501) + (xy 80.419402 171.670172) (xy 80.419409 171.670185) (xy 80.50701 171.801288) (xy 80.507013 171.801292) + (xy 80.618507 171.912786) (xy 80.618511 171.912789) (xy 80.749614 172.00039) (xy 80.749627 172.000397) + (xy 80.866006 172.048602) (xy 80.895303 172.060737) (xy 81.025234 172.086582) (xy 81.049953 172.091499) + (xy 81.049956 172.0915) (xy 81.049958 172.0915) (xy 81.207644 172.0915) (xy 81.207645 172.091499) + (xy 81.362297 172.060737) (xy 81.507979 172.000394) (xy 81.538628 171.979914) (xy 81.605304 171.959036) + (xy 81.672685 171.977519) (xy 81.719376 172.029497) (xy 81.722081 172.035563) (xy 81.836113 172.310861) + (xy 81.836118 172.310871) (xy 81.986899 172.572031) (xy 82.106772 172.728254) (xy 82.131966 172.793423) + (xy 82.117927 172.861868) (xy 82.073191 172.909464) (xy 82.070115 172.911348) (xy 81.933165 173.010848) + (xy 81.93316 173.010852) (xy 81.813452 173.13056) (xy 81.813448 173.130565) (xy 81.713952 173.267511) + (xy 81.637096 173.418346) (xy 81.584781 173.579352) (xy 81.5583 173.74655) (xy 81.5583 173.915849) + (xy 81.584781 174.083047) (xy 81.637096 174.244053) (xy 81.713952 174.394888) (xy 81.813448 174.531834) + (xy 81.813452 174.531839) (xy 81.93316 174.651547) (xy 81.933165 174.651551) (xy 81.998281 174.69886) + (xy 82.070115 174.75105) (xy 82.166225 174.80002) (xy 82.220946 174.827903) (xy 82.220948 174.827903) + (xy 82.220951 174.827905) (xy 82.30725 174.855945) (xy 82.381952 174.880218) (xy 82.549151 174.9067) + (xy 82.549156 174.9067) (xy 82.718449 174.9067) (xy 82.885647 174.880218) (xy 83.046649 174.827905) + (xy 83.197485 174.75105) (xy 83.334441 174.651546) (xy 83.454146 174.531841) (xy 83.55365 174.394885) + (xy 83.630505 174.244049) (xy 83.682818 174.083047) (xy 83.689931 174.038138) (xy 83.7093 173.915849) + (xy 83.7093 173.74655) (xy 83.707486 173.735098) (xy 83.71644 173.665805) (xy 83.761436 173.612353) + (xy 83.828188 173.591713) (xy 83.829959 173.5917) (xy 84.054576 173.5917) (xy 84.054583 173.5917) + (xy 84.353568 173.552338) (xy 84.644858 173.474287) (xy 84.923468 173.358883) (xy 85.184632 173.2081) + (xy 85.421016 173.026716) (xy 85.486184 173.001523) (xy 85.554629 173.015561) (xy 85.604618 173.064375) + (xy 85.620282 173.132467) (xy 85.616276 173.157186) (xy 85.612937 173.169648) (xy 85.560084 173.3669) + (xy 85.550952 173.40098) (xy 85.550949 173.400993) (xy 85.513301 173.686961) (xy 85.5133 173.686978) + (xy 85.5133 173.975421) (xy 85.513301 173.975438) (xy 85.550949 174.261406) (xy 85.55095 174.261411) + (xy 85.550951 174.261417) (xy 85.625609 174.540044) (xy 85.625614 174.54006) (xy 85.735991 174.806536) + (xy 85.735999 174.806552) (xy 85.88022 175.056348) (xy 85.880231 175.056364) (xy 86.055824 175.285202) + (xy 86.05583 175.285209) (xy 86.25979 175.489169) (xy 86.259797 175.489175) (xy 86.422753 175.614215) + (xy 86.488644 175.664775) (xy 86.488651 175.664779) (xy 86.738447 175.809) (xy 86.738463 175.809008) + (xy 87.004939 175.919385) (xy 87.004945 175.919386) (xy 87.004955 175.919391) (xy 87.283583 175.994049) + (xy 87.569572 176.0317) (xy 87.569579 176.0317) (xy 87.858021 176.0317) (xy 87.858028 176.0317) + (xy 88.144017 175.994049) (xy 88.422645 175.919391) (xy 88.422657 175.919385) (xy 88.42266 175.919385) + (xy 88.689136 175.809008) (xy 88.689139 175.809006) (xy 88.689145 175.809004) (xy 88.938956 175.664775) + (xy 89.167804 175.489174) (xy 89.371774 175.285204) (xy 89.547375 175.056356) (xy 89.689409 174.810347) + (xy 89.6916 174.806552) (xy 89.691608 174.806536) (xy 89.801985 174.54006) (xy 89.801985 174.540057) + (xy 89.801991 174.540045) (xy 89.876649 174.261417) (xy 89.9143 173.975428) (xy 89.9143 173.74655) + (xy 91.7183 173.74655) (xy 91.7183 173.915849) (xy 91.744781 174.083047) (xy 91.797096 174.244053) + (xy 91.873952 174.394888) (xy 91.973448 174.531834) (xy 91.973452 174.531839) (xy 92.09316 174.651547) + (xy 92.093165 174.651551) (xy 92.158281 174.69886) (xy 92.230115 174.75105) (xy 92.326225 174.80002) + (xy 92.380946 174.827903) (xy 92.380948 174.827903) (xy 92.380951 174.827905) (xy 92.46725 174.855945) + (xy 92.541952 174.880218) (xy 92.709151 174.9067) (xy 92.709156 174.9067) (xy 92.878449 174.9067) + (xy 93.045647 174.880218) (xy 93.206649 174.827905) (xy 93.357485 174.75105) (xy 93.494441 174.651546) + (xy 93.614146 174.531841) (xy 93.71365 174.394885) (xy 93.790505 174.244049) (xy 93.842818 174.083047) + (xy 93.849931 174.038138) (xy 93.8693 173.915849) (xy 93.8693 173.74655) (xy 93.842818 173.579352) + (xy 93.818545 173.50465) (xy 93.790505 173.418351) (xy 93.790503 173.418348) (xy 93.790503 173.418346) + (xy 93.725752 173.291267) (xy 93.71365 173.267515) (xy 93.682081 173.224064) (xy 93.614151 173.130565) + (xy 93.614147 173.13056) (xy 93.494439 173.010852) (xy 93.494434 173.010848) (xy 93.357488 172.911352) + (xy 93.357487 172.911351) (xy 93.357485 172.91135) (xy 93.309802 172.887054) (xy 93.206653 172.834496) + (xy 93.045647 172.782181) (xy 92.878449 172.7557) (xy 92.878444 172.7557) (xy 92.709156 172.7557) + (xy 92.709151 172.7557) (xy 92.541952 172.782181) (xy 92.380946 172.834496) (xy 92.230111 172.911352) + (xy 92.093165 173.010848) (xy 92.09316 173.010852) (xy 91.973452 173.13056) (xy 91.973448 173.130565) + (xy 91.873952 173.267511) (xy 91.797096 173.418346) (xy 91.744781 173.579352) (xy 91.7183 173.74655) + (xy 89.9143 173.74655) (xy 89.9143 173.686972) (xy 89.876649 173.400983) (xy 89.801991 173.122355) + (xy 89.801986 173.122345) (xy 89.801985 173.122339) (xy 89.691608 172.855863) (xy 89.6916 172.855847) + (xy 89.549331 172.609432) (xy 89.547375 172.606044) (xy 89.4572 172.488525) (xy 89.371775 172.377197) + (xy 89.371769 172.37719) (xy 89.167809 172.17323) (xy 89.167802 172.173224) (xy 88.938964 171.997631) + (xy 88.938962 171.997629) (xy 88.938956 171.997625) (xy 88.938951 171.997622) (xy 88.938948 171.99762) + (xy 88.689152 171.853399) (xy 88.689136 171.853391) (xy 88.42266 171.743014) (xy 88.422648 171.74301) + (xy 88.422645 171.743009) (xy 88.144017 171.668351) (xy 88.144011 171.66835) (xy 88.144006 171.668349) + (xy 87.858038 171.630701) (xy 87.858033 171.6307) (xy 87.858028 171.6307) (xy 87.569572 171.6307) + (xy 87.569566 171.6307) (xy 87.569561 171.630701) (xy 87.283593 171.668349) (xy 87.283586 171.66835) + (xy 87.283583 171.668351) (xy 87.049583 171.731051) (xy 87.004955 171.743009) (xy 87.004939 171.743014) + (xy 86.738463 171.853391) (xy 86.738447 171.853399) (xy 86.488651 171.99762) (xy 86.488634 171.997631) + (xy 86.284391 172.154352) (xy 86.219222 172.179546) (xy 86.150777 172.165507) (xy 86.100787 172.116693) + (xy 86.085124 172.048602) (xy 86.089127 172.023894) (xy 86.164938 171.740968) (xy 86.2043 171.441983) + (xy 86.2043 171.140417) (xy 86.164938 170.841432) (xy 86.086887 170.550142) (xy 86.074925 170.521264) + (xy 85.999022 170.338017) (xy 85.971483 170.271532) (xy 85.97134 170.271285) (xy 85.8207 170.010368) + (xy 85.63712 169.771121) (xy 85.637114 169.771114) (xy 85.423885 169.557885) (xy 85.423878 169.557879) + (xy 85.184631 169.374299) (xy 84.923471 169.223518) (xy 84.923461 169.223514) (xy 84.64486 169.108113) + (xy 84.353566 169.030061) (xy 84.054593 168.990701) (xy 84.054588 168.9907) (xy 84.054583 168.9907) + (xy 83.753017 168.9907) (xy 83.753011 168.9907) (xy 83.753006 168.990701) (xy 83.454033 169.030061) + (xy 83.162739 169.108113) (xy 82.884138 169.223514) (xy 82.884128 169.223518) (xy 82.622968 169.374299) + (xy 82.383721 169.557879) (xy 82.383714 169.557885) (xy 82.170485 169.771114) (xy 82.170479 169.771121) + (xy 81.986899 170.010368) (xy 81.836118 170.271528) (xy 81.836114 170.271538) (xy 81.722212 170.546523) + (xy 81.713906 170.556829) (xy 81.709774 170.569404) (xy 81.692407 170.583507) (xy 81.678371 170.600926) + (xy 81.665812 170.605105) (xy 81.655537 170.613451) (xy 81.633302 170.615926) (xy 81.612077 170.622991) + (xy 81.597694 170.61989) (xy 81.586096 170.621182) (xy 81.565715 170.612997) (xy 81.552566 170.610163) + (xy 81.545399 170.606609) (xy 81.507979 170.581606) (xy 81.428979 170.548883) (xy 81.425215 170.547017) + (xy 81.402511 170.526039) (xy 81.378444 170.506644) (xy 81.377077 170.502537) (xy 81.373898 170.4996) + (xy 81.366139 170.469675) (xy 81.356379 170.44035) (xy 81.3563 170.435924) (xy 81.3563 162.892377) + (xy 83.13815 162.892377) (xy 83.13815 163.180022) (xy 83.138151 163.180038) (xy 83.175696 163.465223) + (xy 83.250147 163.743078) (xy 83.360225 164.008831) (xy 83.360233 164.008848) (xy 83.504054 164.257951) + (xy 83.504065 164.257967) (xy 83.679171 164.486171) (xy 83.679177 164.486178) (xy 83.882571 164.689572) + (xy 83.882578 164.689578) (xy 84.017532 164.793131) (xy 84.110791 164.864691) (xy 84.110798 164.864695) + (xy 84.359901 165.008516) (xy 84.359906 165.008518) (xy 84.359909 165.00852) (xy 84.359913 165.008521) + (xy 84.359918 165.008524) (xy 84.465273 165.052163) (xy 84.62567 165.118602) (xy 84.903525 165.193053) + (xy 85.188721 165.2306) (xy 85.188728 165.2306) (xy 85.476372 165.2306) (xy 85.476379 165.2306) + (xy 85.761575 165.193053) (xy 86.03943 165.118602) (xy 86.305191 165.00852) (xy 86.554309 164.864691) + (xy 86.782523 164.689577) (xy 86.985927 164.486173) (xy 87.161041 164.257959) (xy 87.30487 164.008841) + (xy 87.414952 163.74308) (xy 87.489403 163.465225) (xy 87.52695 163.180029) (xy 87.52695 162.892371) + (xy 87.489403 162.607175) (xy 87.414952 162.32932) (xy 87.337368 162.142015) (xy 87.304874 162.063568) + (xy 87.304866 162.063551) (xy 87.161045 161.814448) (xy 87.161041 161.814441) (xy 87.076254 161.703944) + (xy 86.985928 161.586228) (xy 86.985922 161.586221) (xy 86.782528 161.382827) (xy 86.782521 161.382821) + (xy 86.554317 161.207715) (xy 86.554315 161.207713) (xy 86.554309 161.207709) (xy 86.554304 161.207706) + (xy 86.554301 161.207704) (xy 86.305198 161.063883) (xy 86.305181 161.063875) (xy 86.039428 160.953797) + (xy 85.761573 160.879346) (xy 85.476388 160.841801) (xy 85.476385 160.8418) (xy 85.476379 160.8418) + (xy 85.188721 160.8418) (xy 85.188715 160.8418) (xy 85.188711 160.841801) (xy 84.903526 160.879346) + (xy 84.625671 160.953797) (xy 84.359918 161.063875) (xy 84.359901 161.063883) (xy 84.110798 161.207704) + (xy 84.110782 161.207715) (xy 83.882578 161.382821) (xy 83.882571 161.382827) (xy 83.679177 161.586221) + (xy 83.679171 161.586228) (xy 83.504065 161.814432) (xy 83.504054 161.814448) (xy 83.360233 162.063551) + (xy 83.360225 162.063568) (xy 83.250147 162.329321) (xy 83.175696 162.607176) (xy 83.138151 162.892361) + (xy 83.13815 162.892377) (xy 81.3563 162.892377) (xy 81.3563 160.916595) (xy 81.375985 160.849556) + (xy 81.382472 160.841506) (xy 102.144965 160.841506) (xy 102.155149 160.945747) (xy 102.162721 161.023242) + (xy 102.174381 161.06388) (xy 102.21308 161.198761) (xy 102.29438 161.362263) (xy 102.294381 161.362265) + (xy 102.294383 161.362268) (xy 102.349367 161.435585) (xy 102.403938 161.508352) (xy 102.403939 161.508353) + (xy 102.40394 161.508354) (xy 102.538132 161.632195) (xy 102.692525 161.729697) (xy 102.827677 161.783874) + (xy 102.862014 161.797639) (xy 102.862015 161.797639) (xy 102.862017 161.79764) (xy 103.041008 161.833779) + (xy 103.041002 161.833779) (xy 103.057322 161.834059) (xy 103.223584 161.83692) (xy 103.403712 161.806958) + (xy 103.500068 161.772128) (xy 103.575436 161.744885) (xy 103.575437 161.744883) (xy 103.57544 161.744883) + (xy 103.590475 161.73612) (xy 103.597159 161.732235) (xy 103.59745 161.732157) (xy 103.625333 161.71586) + (xy 103.625451 161.715792) (xy 103.628668 161.715001) (xy 103.687762 161.698999) (xy 105.168892 161.698999) + (xy 105.169014 161.699006) (xy 105.177105 161.699005) (xy 105.177108 161.699006) (xy 105.209242 161.699002) + (xy 105.271804 161.715934) (xy 105.29963 161.732191) (xy 105.299632 161.732191) (xy 105.30578 161.735783) + (xy 105.307435 161.736608) (xy 105.321578 161.74485) (xy 105.4933 161.806921) (xy 105.673421 161.836882) + (xy 105.853098 161.83379) (xy 105.855991 161.833741) (xy 106.034966 161.797605) (xy 106.034969 161.797603) + (xy 106.034974 161.797603) (xy 106.20446 161.729662) (xy 106.358846 161.632163) (xy 106.374033 161.618148) + (xy 106.49303 161.50833) (xy 106.493032 161.508328) (xy 106.493033 161.508327) (xy 106.602585 161.362247) + (xy 106.683884 161.198748) (xy 106.734242 161.023233) (xy 106.751997 160.841503) (xy 106.73656 160.65956) + (xy 106.736558 160.659554) (xy 106.723871 160.613109) (xy 106.688443 160.483418) (xy 106.680683 160.467249) + (xy 106.677596 160.460804) (xy 106.677548 160.460546) (xy 106.661171 160.426519) (xy 106.661043 160.42573) + (xy 106.649002 160.372931) (xy 106.649002 160.372689) (xy 106.649007 160.335508) (xy 106.649006 160.335504) + (xy 106.649007 160.327498) (xy 106.648999 160.32736) (xy 106.648999 159.208153) (xy 107.5505 159.208153) + (xy 107.5505 159.365846) (xy 107.581261 159.520489) (xy 107.581264 159.520501) (xy 107.641602 159.666172) + (xy 107.641609 159.666185) (xy 107.72921 159.797288) (xy 107.729213 159.797292) (xy 107.840707 159.908786) + (xy 107.840711 159.908789) (xy 107.971814 159.99639) (xy 107.971827 159.996397) (xy 108.117498 160.056735) + (xy 108.117503 160.056737) (xy 108.241708 160.081443) (xy 108.272153 160.087499) (xy 108.272156 160.0875) + (xy 108.272158 160.0875) (xy 108.429844 160.0875) (xy 108.429845 160.087499) (xy 108.584497 160.056737) + (xy 108.730179 159.996394) (xy 108.861289 159.908789) (xy 108.972789 159.797289) (xy 109.060394 159.666179) + (xy 109.120737 159.520497) (xy 109.1515 159.365842) (xy 109.1515 159.208158) (xy 109.1515 159.208155) + (xy 109.151499 159.208153) (xy 109.12706 159.085292) (xy 109.120737 159.053503) (xy 109.120735 159.053498) + (xy 109.060397 158.907827) (xy 109.06039 158.907814) (xy 108.972789 158.776711) (xy 108.972786 158.776707) + (xy 108.861292 158.665213) (xy 108.861288 158.66521) (xy 108.730185 158.577609) (xy 108.730172 158.577602) + (xy 108.584501 158.517264) (xy 108.584489 158.517261) (xy 108.429845 158.4865) (xy 108.429842 158.4865) + (xy 108.272158 158.4865) (xy 108.272155 158.4865) (xy 108.11751 158.517261) (xy 108.117498 158.517264) + (xy 107.971827 158.577602) (xy 107.971814 158.577609) (xy 107.840711 158.66521) (xy 107.840707 158.665213) + (xy 107.729213 158.776707) (xy 107.72921 158.776711) (xy 107.641609 158.907814) (xy 107.641602 158.907827) + (xy 107.581264 159.053498) (xy 107.581261 159.05351) (xy 107.5505 159.208153) (xy 106.648999 159.208153) + (xy 106.648999 159.024077) (xy 106.649001 159.024069) (xy 106.661206 158.970427) (xy 106.667511 158.95729) + (xy 106.677574 158.936374) (xy 106.677574 158.936369) (xy 106.68096 158.929333) (xy 106.681125 158.928922) + (xy 106.681246 158.92867) (xy 106.688483 158.913591) (xy 106.7366 158.737442) (xy 106.752037 158.555493) + (xy 106.734281 158.373755) (xy 106.68392 158.198234) (xy 106.602618 158.03473) (xy 106.499153 157.896767) + (xy 106.493062 157.888645) (xy 106.491139 157.88687) (xy 106.358869 157.764804) (xy 106.358866 157.764802) + (xy 106.358865 157.764801) (xy 106.358862 157.764799) (xy 106.204477 157.667301) (xy 106.034987 157.599358) + (xy 106.034977 157.599356) (xy 105.855992 157.563218) (xy 105.855999 157.563218) (xy 105.684294 157.560265) + (xy 105.673418 157.560078) (xy 105.673417 157.560078) (xy 105.673414 157.560078) (xy 105.493297 157.590038) + (xy 105.493284 157.590041) (xy 105.321563 157.652113) (xy 105.307048 157.66057) (xy 105.306963 157.660619) + (xy 105.299876 157.66474) (xy 105.29963 157.664808) (xy 105.271838 157.681044) (xy 105.27159 157.681189) + (xy 105.268863 157.681859) (xy 105.209246 157.697996) (xy 105.168901 157.697993) (xy 105.168797 157.698) + (xy 103.728096 157.698) (xy 103.719914 157.697998) (xy 103.719892 157.697993) (xy 103.689965 157.697995) + (xy 103.687728 157.697995) (xy 103.687446 157.697912) (xy 103.625193 157.681062) (xy 103.597371 157.664808) + (xy 103.591305 157.661264) (xy 103.589607 157.660417) (xy 103.582257 157.656134) (xy 103.575421 157.65215) + (xy 103.403697 157.590078) (xy 103.403691 157.590077) (xy 103.223581 157.560119) (xy 103.223578 157.560119) + (xy 103.215039 157.560265) (xy 103.041007 157.563259) (xy 102.862034 157.599394) (xy 102.862023 157.599397) + (xy 102.692542 157.667337) (xy 102.692541 157.667337) (xy 102.538161 157.764832) (xy 102.538158 157.764834) + (xy 102.403967 157.888673) (xy 102.294415 158.034754) (xy 102.21312 158.198244) (xy 102.213119 158.198247) + (xy 102.213118 158.19825) (xy 102.205382 158.225213) (xy 102.162758 158.373765) (xy 102.145916 158.546155) + (xy 102.145004 158.555493) (xy 102.14688 158.577602) (xy 102.158517 158.714778) (xy 102.16044 158.737435) + (xy 102.188707 158.840914) (xy 102.208556 158.913578) (xy 102.20856 158.913588) (xy 102.215798 158.92867) + (xy 102.21584 158.928756) (xy 102.219423 158.936238) (xy 102.219481 158.93654) (xy 102.235797 158.970425) + (xy 102.235836 158.970506) (xy 102.235981 158.9714) (xy 102.248001 159.024069) (xy 102.248001 160.372922) + (xy 102.235807 160.426545) (xy 102.235219 160.427771) (xy 102.235139 160.427938) (xy 102.216266 160.467137) + (xy 102.215942 160.467939) (xy 102.208518 160.48341) (xy 102.160401 160.659554) (xy 102.160401 160.659556) + (xy 102.144965 160.841506) (xy 81.382472 160.841506) (xy 81.392619 160.828914) (xy 85.985715 156.235819) + (xy 86.047038 156.202334) (xy 86.073396 156.1995) (xy 95.407664 156.1995) (xy 95.407676 156.199505) + (xy 95.448815 156.1995) (xy 95.498153 156.1995) (xy 95.498154 156.1995) (xy 95.498175 156.199495) + (xy 95.498177 156.199494) (xy 95.498182 156.199494) (xy 95.54129 156.18163) (xy 95.541305 156.181625) + (xy 95.579998 156.165598) (xy 95.581655 156.164943) (xy 95.581762 156.164867) (xy 95.581768 156.164865) + (xy 95.581772 156.16486) (xy 95.581783 156.164852) (xy 95.581793 156.164849) (xy 95.581804 156.164837) + (xy 95.582136 156.164604) (xy 95.583961 156.16268) (xy 95.617123 156.129508) (xy 95.617134 156.129499) + (xy 95.633424 156.113208) (xy 95.645765 156.100868) (xy 95.645765 156.100866) (xy 95.654928 156.091704) + (xy 95.65497 156.091652) (xy 97.049716 154.69655) (xy 98.227 154.69655) (xy 98.227 154.865849) (xy 98.253481 155.033047) + (xy 98.305796 155.194053) (xy 98.382652 155.344888) (xy 98.482148 155.481834) (xy 98.482152 155.481839) + (xy 98.60186 155.601547) (xy 98.601865 155.601551) (xy 98.721317 155.688337) (xy 98.738815 155.70105) + (xy 98.82409 155.7445) (xy 98.889646 155.777903) (xy 98.889648 155.777903) (xy 98.889651 155.777905) + (xy 98.97595 155.805945) (xy 99.050652 155.830218) (xy 99.217851 155.8567) (xy 99.217856 155.8567) + (xy 99.387149 155.8567) (xy 99.554347 155.830218) (xy 99.597277 155.816269) (xy 99.715349 155.777905) + (xy 99.866185 155.70105) (xy 100.003141 155.601546) (xy 100.122846 155.481841) (xy 100.22235 155.344885) + (xy 100.299205 155.194049) (xy 100.351518 155.033047) (xy 100.378 154.865849) (xy 100.378 154.69655) + (xy 100.352428 154.535098) (xy 100.361382 154.465805) (xy 100.406379 154.412353) (xy 100.47313 154.391713) + (xy 100.474901 154.3917) (xy 100.713444 154.3917) (xy 100.713451 154.3917) (xy 100.992942 154.354904) + (xy 101.265239 154.281942) (xy 101.525683 154.174063) (xy 101.769817 154.033112) (xy 101.993465 153.8615) + (xy 102.1928 153.662165) (xy 102.260492 153.573946) (xy 102.31692 153.532744) (xy 102.386666 153.528589) + (xy 102.447586 153.562801) (xy 102.480339 153.624518) (xy 102.474526 153.694146) (xy 102.466255 153.711433) + (xy 102.410183 153.808551) (xy 102.410175 153.808568) (xy 102.300097 154.074321) (xy 102.225646 154.352176) + (xy 102.188101 154.637361) (xy 102.1881 154.637377) (xy 102.1881 154.925022) (xy 102.188101 154.925038) + (xy 102.225646 155.210223) (xy 102.300097 155.488078) (xy 102.410175 155.753831) (xy 102.410183 155.753848) + (xy 102.554004 156.002951) (xy 102.554015 156.002967) (xy 102.729121 156.231171) (xy 102.729127 156.231178) + (xy 102.932521 156.434572) (xy 102.932527 156.434577) (xy 103.160741 156.609691) (xy 103.160748 156.609695) + (xy 103.409851 156.753516) (xy 103.409856 156.753518) (xy 103.409859 156.75352) (xy 103.409863 156.753521) + (xy 103.409868 156.753524) (xy 103.423108 156.759008) (xy 103.67562 156.863602) (xy 103.953475 156.938053) + (xy 104.238671 156.9756) (xy 104.238678 156.9756) (xy 104.526322 156.9756) (xy 104.526329 156.9756) + (xy 104.811525 156.938053) (xy 105.08938 156.863602) (xy 105.355141 156.75352) (xy 105.604259 156.609691) + (xy 105.832473 156.434577) (xy 106.035877 156.231173) (xy 106.210991 156.002959) (xy 106.35482 155.753841) + (xy 106.464902 155.48808) (xy 106.539353 155.210225) (xy 106.5769 154.925029) (xy 106.5769 154.69655) + (xy 108.387 154.69655) (xy 108.387 154.865849) (xy 108.413481 155.033047) (xy 108.465796 155.194053) + (xy 108.542652 155.344888) (xy 108.642148 155.481834) (xy 108.642152 155.481839) (xy 108.76186 155.601547) + (xy 108.761865 155.601551) (xy 108.881317 155.688337) (xy 108.898815 155.70105) (xy 108.98409 155.7445) + (xy 109.049646 155.777903) (xy 109.049648 155.777903) (xy 109.049651 155.777905) (xy 109.13595 155.805945) + (xy 109.210652 155.830218) (xy 109.377851 155.8567) (xy 109.377856 155.8567) (xy 109.547149 155.8567) + (xy 109.714347 155.830218) (xy 109.757277 155.816269) (xy 109.875349 155.777905) (xy 110.026185 155.70105) + (xy 110.163141 155.601546) (xy 110.282846 155.481841) (xy 110.38235 155.344885) (xy 110.459205 155.194049) + (xy 110.511518 155.033047) (xy 110.538 154.865849) (xy 110.538 154.69655) (xy 110.511518 154.529352) + (xy 110.484836 154.447236) (xy 110.459205 154.368351) (xy 110.459203 154.368348) (xy 110.459203 154.368346) + (xy 110.428344 154.307783) (xy 110.38235 154.217515) (xy 110.350781 154.174064) (xy 110.282851 154.080565) + (xy 110.282847 154.08056) (xy 110.163139 153.960852) (xy 110.163134 153.960848) (xy 110.026188 153.861352) + (xy 110.026187 153.861351) (xy 110.026185 153.86135) (xy 109.979082 153.83735) (xy 109.875353 153.784496) + (xy 109.714347 153.732181) (xy 109.547149 153.7057) (xy 109.547144 153.7057) (xy 109.377856 153.7057) + (xy 109.377851 153.7057) (xy 109.210652 153.732181) (xy 109.049646 153.784496) (xy 108.898811 153.861352) + (xy 108.761865 153.960848) (xy 108.76186 153.960852) (xy 108.642152 154.08056) (xy 108.642148 154.080565) + (xy 108.542652 154.217511) (xy 108.465796 154.368346) (xy 108.413481 154.529352) (xy 108.387 154.69655) + (xy 106.5769 154.69655) (xy 106.5769 154.637371) (xy 106.539353 154.352175) (xy 106.464902 154.07432) + (xy 106.35482 153.808559) (xy 106.354818 153.808556) (xy 106.354816 153.808551) (xy 106.210995 153.559448) + (xy 106.210991 153.559441) (xy 106.107069 153.424007) (xy 106.035878 153.331228) (xy 106.035872 153.331221) + (xy 105.832478 153.127827) (xy 105.832471 153.127821) (xy 105.604267 152.952715) (xy 105.604265 152.952713) + (xy 105.604259 152.952709) (xy 105.604254 152.952706) (xy 105.604251 152.952704) (xy 105.355148 152.808883) + (xy 105.355131 152.808875) (xy 105.089378 152.698797) (xy 104.811523 152.624346) (xy 104.526338 152.586801) + (xy 104.526335 152.5868) (xy 104.526329 152.5868) (xy 104.238671 152.5868) (xy 104.238665 152.5868) + (xy 104.238661 152.586801) (xy 103.953476 152.624346) (xy 103.675621 152.698797) (xy 103.409868 152.808875) + (xy 103.409851 152.808883) (xy 103.160748 152.952704) (xy 103.160732 152.952715) (xy 102.932528 153.127821) + (xy 102.932521 153.127827) (xy 102.729127 153.331221) (xy 102.65793 153.424007) (xy 102.601501 153.465209) + (xy 102.531755 153.469364) (xy 102.470835 153.435151) (xy 102.438083 153.373434) (xy 102.443896 153.303807) + (xy 102.452161 153.286531) (xy 102.505363 153.194383) (xy 102.613242 152.933939) (xy 102.686204 152.661642) + (xy 102.723 152.382151) (xy 102.723 152.100249) (xy 102.686204 151.820758) (xy 102.613242 151.548461) + (xy 102.60626 151.531606) (xy 102.581265 151.471261) (xy 102.505363 151.288017) (xy 102.50536 151.288011) + (xy 102.505359 151.288009) (xy 102.364416 151.04389) (xy 102.364412 151.043883) (xy 102.1928 150.820235) + (xy 102.192798 150.820233) (xy 102.192795 150.820229) (xy 101.99347 150.620904) (xy 101.968661 150.601867) + (xy 101.769817 150.449288) (xy 101.769811 150.449284) (xy 101.769809 150.449283) (xy 101.52569 150.30834) + (xy 101.525679 150.308335) (xy 101.265243 150.200459) (xy 100.992939 150.127495) (xy 100.713458 150.0907) + (xy 100.713451 150.0907) (xy 100.431549 150.0907) (xy 100.431541 150.0907) (xy 100.15206 150.127495) + (xy 99.879756 150.200459) (xy 99.61932 150.308335) (xy 99.619309 150.30834) (xy 99.37519 150.449283) + (xy 99.375182 150.449289) (xy 99.151529 150.620904) (xy 98.952204 150.820229) (xy 98.780589 151.043882) + (xy 98.780583 151.04389) (xy 98.63964 151.288009) (xy 98.639635 151.28802) (xy 98.531759 151.548456) + (xy 98.458795 151.82076) (xy 98.422 152.100241) (xy 98.422 152.382158) (xy 98.458795 152.661639) + (xy 98.531759 152.933943) (xy 98.639635 153.194379) (xy 98.63964 153.19439) (xy 98.780583 153.438509) + (xy 98.780594 153.438525) (xy 98.911338 153.608914) (xy 98.936532 153.674083) (xy 98.922494 153.742528) + (xy 98.87368 153.792517) (xy 98.869258 153.794884) (xy 98.738813 153.86135) (xy 98.601865 153.960848) + (xy 98.60186 153.960852) (xy 98.482152 154.08056) (xy 98.482148 154.080565) (xy 98.382652 154.217511) + (xy 98.305796 154.368346) (xy 98.253481 154.529352) (xy 98.227 154.69655) (xy 97.049716 154.69655) + (xy 97.187885 154.558346) (xy 97.187891 154.558343) (xy 97.18789 154.558342) (xy 97.187893 154.558339) + (xy 97.213763 154.532469) (xy 97.215267 154.531024) (xy 97.21536 154.530872) (xy 97.215365 154.530868) + (xy 97.215366 154.530862) (xy 97.215373 154.530852) (xy 97.215382 154.530844) (xy 97.215389 154.530825) + (xy 97.215791 154.530176) (xy 97.217007 154.526917) (xy 97.23275 154.488896) (xy 97.25 154.447253) + (xy 97.25 154.447245) (xy 97.250005 154.447223) (xy 97.25 154.409514) (xy 97.25 153.096075) (xy 97.269685 153.029036) + (xy 97.322489 152.983281) (xy 97.326499 152.981534) (xy 97.401679 152.950394) (xy 97.532789 152.862789) + (xy 97.644289 152.751289) (xy 97.731894 152.620179) (xy 97.792237 152.474497) (xy 97.823 152.319842) + (xy 97.823 152.162158) (xy 97.823 152.162155) (xy 97.822999 152.162153) (xy 97.792237 152.007503) + (xy 97.764778 151.941211) (xy 97.731897 151.861827) (xy 97.73189 151.861814) (xy 97.644289 151.730711) + (xy 97.644286 151.730707) (xy 97.532792 151.619213) (xy 97.532788 151.61921) (xy 97.401685 151.531609) + (xy 97.401672 151.531602) (xy 97.256001 151.471264) (xy 97.255989 151.471261) (xy 97.101345 151.4405) + (xy 97.101342 151.4405) (xy 96.943658 151.4405) (xy 96.943655 151.4405) (xy 96.78901 151.471261) + (xy 96.789003 151.471263) (xy 96.713868 151.502384) (xy 96.644399 151.509851) (xy 96.58192 151.478576) + (xy 96.578736 151.475503) (xy 87.761319 142.658086) (xy 87.727834 142.596763) (xy 87.725 142.570405) + (xy 87.725 141.482106) (xy 92.527765 141.482106) (xy 92.543976 141.648035) (xy 92.545521 141.663842) + (xy 92.564284 141.729238) (xy 92.59588 141.839361) (xy 92.67718 142.002863) (xy 92.677181 142.002865) + (xy 92.677183 142.002868) (xy 92.737309 142.083042) (xy 92.786738 142.148952) (xy 92.786739 142.148953) + (xy 92.78674 142.148954) (xy 92.920932 142.272795) (xy 93.075325 142.370297) (xy 93.210477 142.424474) + (xy 93.244814 142.438239) (xy 93.244815 142.438239) (xy 93.244817 142.43824) (xy 93.423808 142.474379) + (xy 93.423802 142.474379) (xy 93.440122 142.474659) (xy 93.606384 142.47752) (xy 93.786512 142.447558) + (xy 93.842007 142.427498) (xy 93.958236 142.385485) (xy 93.958237 142.385483) (xy 93.95824 142.385483) + (xy 93.973275 142.37672) (xy 93.979959 142.372835) (xy 93.98025 142.372757) (xy 94.008133 142.35646) + (xy 94.008251 142.356392) (xy 94.011468 142.355601) (xy 94.070562 142.339599) (xy 95.551692 142.339599) + (xy 95.551814 142.339606) (xy 95.559905 142.339605) (xy 95.559908 142.339606) (xy 95.592042 142.339602) + (xy 95.654604 142.356534) (xy 95.68243 142.372791) (xy 95.682432 142.372791) (xy 95.68858 142.376383) + (xy 95.690235 142.377208) (xy 95.704378 142.38545) (xy 95.8761 142.447521) (xy 96.056221 142.477482) + (xy 96.235898 142.47439) (xy 96.238791 142.474341) (xy 96.417766 142.438205) (xy 96.417769 142.438203) + (xy 96.417774 142.438203) (xy 96.58726 142.370262) (xy 96.741646 142.272763) (xy 96.760031 142.255797) + (xy 96.87583 142.14893) (xy 96.875832 142.148928) (xy 96.88471 142.13709) (xy 96.985385 142.002847) + (xy 97.066684 141.839348) (xy 97.117042 141.663833) (xy 97.134797 141.482103) (xy 97.11936 141.30016) + (xy 97.119358 141.300154) (xy 97.108738 141.261277) (xy 97.071243 141.124018) (xy 97.063483 141.107849) + (xy 97.060396 141.101404) (xy 97.060348 141.101146) (xy 97.043971 141.067119) (xy 97.043843 141.06633) + (xy 97.031802 141.013531) (xy 97.031802 141.013522) (xy 97.031807 140.976108) (xy 97.031806 140.976104) + (xy 97.031807 140.968098) (xy 97.031799 140.96796) (xy 97.031799 139.664678) (xy 97.034453 139.653012) + (xy 97.033419 139.644699) (xy 97.044003 139.611034) (xy 97.050318 139.597876) (xy 97.050398 139.597787) + (xy 97.050368 139.597773) (xy 97.050795 139.596885) (xy 97.060374 139.576974) (xy 97.060374 139.576968) + (xy 97.063755 139.569942) (xy 97.063917 139.569538) (xy 97.071283 139.554191) (xy 97.087137 139.496153) + (xy 98.65075 139.496153) (xy 98.65075 139.653846) (xy 98.681511 139.808489) (xy 98.681514 139.808501) + (xy 98.741852 139.954172) (xy 98.741859 139.954185) (xy 98.82946 140.085288) (xy 98.829463 140.085292) + (xy 98.940957 140.196786) (xy 98.940961 140.196789) (xy 99.072064 140.28439) (xy 99.072077 140.284397) + (xy 99.217748 140.344735) (xy 99.217753 140.344737) (xy 99.372403 140.375499) (xy 99.372406 140.3755) + (xy 99.372408 140.3755) (xy 99.530094 140.3755) (xy 99.530095 140.375499) (xy 99.684747 140.344737) + (xy 99.830429 140.284394) (xy 99.961539 140.196789) (xy 100.073039 140.085289) (xy 100.160644 139.954179) + (xy 100.220987 139.808497) (xy 100.25175 139.653842) (xy 100.25175 139.496158) (xy 100.25175 139.496155) + (xy 100.251749 139.496153) (xy 100.237518 139.424611) (xy 100.220987 139.341503) (xy 100.220183 139.339562) + (xy 100.160647 139.195827) (xy 100.16064 139.195814) (xy 100.073039 139.064711) (xy 100.073036 139.064707) + (xy 99.961542 138.953213) (xy 99.961538 138.95321) (xy 99.830435 138.865609) (xy 99.830422 138.865602) + (xy 99.684751 138.805264) (xy 99.684739 138.805261) (xy 99.530095 138.7745) (xy 99.530092 138.7745) + (xy 99.372408 138.7745) (xy 99.372405 138.7745) (xy 99.21776 138.805261) (xy 99.217748 138.805264) + (xy 99.072077 138.865602) (xy 99.072064 138.865609) (xy 98.940961 138.95321) (xy 98.940957 138.953213) + (xy 98.829463 139.064707) (xy 98.82946 139.064711) (xy 98.741859 139.195814) (xy 98.741852 139.195827) + (xy 98.681514 139.341498) (xy 98.681511 139.34151) (xy 98.65075 139.496153) (xy 97.087137 139.496153) + (xy 97.1194 139.378042) (xy 97.134837 139.196093) (xy 97.117081 139.014355) (xy 97.06672 138.838834) + (xy 96.985418 138.67533) (xy 96.899027 138.560134) (xy 96.875862 138.529245) (xy 96.818696 138.476489) + (xy 96.741669 138.405404) (xy 96.741666 138.405402) (xy 96.741665 138.405401) (xy 96.741662 138.405399) + (xy 96.587277 138.307901) (xy 96.417787 138.239958) (xy 96.417777 138.239956) (xy 96.238792 138.203818) + (xy 96.238799 138.203818) (xy 96.067094 138.200865) (xy 96.056218 138.200678) (xy 96.056217 138.200678) + (xy 96.056214 138.200678) (xy 95.876097 138.230638) (xy 95.876084 138.230641) (xy 95.704363 138.292713) + (xy 95.689848 138.30117) (xy 95.689763 138.301219) (xy 95.682676 138.30534) (xy 95.68243 138.305408) + (xy 95.654638 138.321644) (xy 95.65439 138.321789) (xy 95.651663 138.322459) (xy 95.592046 138.338596) + (xy 95.551701 138.338593) (xy 95.551597 138.3386) (xy 94.110896 138.3386) (xy 94.102714 138.338598) + (xy 94.102692 138.338593) (xy 94.072765 138.338595) (xy 94.070528 138.338595) (xy 94.070246 138.338512) + (xy 94.007993 138.321662) (xy 93.980171 138.305408) (xy 93.974105 138.301864) (xy 93.972407 138.301017) + (xy 93.965057 138.296734) (xy 93.958221 138.29275) (xy 93.786497 138.230678) (xy 93.786491 138.230677) + (xy 93.606381 138.200719) (xy 93.606378 138.200719) (xy 93.597839 138.200865) (xy 93.423807 138.203859) + (xy 93.244834 138.239994) (xy 93.244823 138.239997) (xy 93.075342 138.307937) (xy 93.075341 138.307937) + (xy 92.920961 138.405432) (xy 92.920958 138.405434) (xy 92.786767 138.529273) (xy 92.677215 138.675354) + (xy 92.59592 138.838844) (xy 92.595919 138.838847) (xy 92.595918 138.83885) (xy 92.570738 138.926606) + (xy 92.545558 139.014365) (xy 92.52783 139.195827) (xy 92.527804 139.196093) (xy 92.529482 139.215868) + (xy 92.54158 139.358478) (xy 92.54324 139.378035) (xy 92.564918 139.457392) (xy 92.591356 139.554178) + (xy 92.59136 139.554188) (xy 92.598598 139.56927) (xy 92.59864 139.569356) (xy 92.602223 139.576838) + (xy 92.602281 139.57714) (xy 92.618636 139.611106) (xy 92.618781 139.612) (xy 92.630801 139.664669) + (xy 92.630801 141.013522) (xy 92.618607 141.067145) (xy 92.618019 141.068371) (xy 92.617939 141.068538) + (xy 92.599066 141.107737) (xy 92.598742 141.108539) (xy 92.591318 141.12401) (xy 92.543201 141.300154) + (xy 92.543201 141.300156) (xy 92.527765 141.482106) (xy 87.725 141.482106) (xy 87.725 135.64655) + (xy 88.702 135.64655) (xy 88.702 135.815849) (xy 88.728481 135.983047) (xy 88.780796 136.144053) + (xy 88.857652 136.294888) (xy 88.957148 136.431834) (xy 88.957152 136.431839) (xy 89.07686 136.551547) + (xy 89.076865 136.551551) (xy 89.196317 136.638337) (xy 89.213815 136.65105) (xy 89.277017 136.683253) + (xy 89.364646 136.727903) (xy 89.364648 136.727903) (xy 89.364651 136.727905) (xy 89.45095 136.755945) + (xy 89.525652 136.780218) (xy 89.692851 136.8067) (xy 89.692856 136.8067) (xy 89.862149 136.8067) + (xy 90.029347 136.780218) (xy 90.190349 136.727905) (xy 90.341185 136.65105) (xy 90.478141 136.551546) + (xy 90.597846 136.431841) (xy 90.69735 136.294885) (xy 90.774205 136.144049) (xy 90.826518 135.983047) + (xy 90.853 135.815849) (xy 90.853 135.64655) (xy 90.827428 135.485098) (xy 90.836382 135.415805) + (xy 90.881379 135.362353) (xy 90.94813 135.341713) (xy 90.949901 135.3417) (xy 91.188444 135.3417) + (xy 91.188451 135.3417) (xy 91.467942 135.304904) (xy 91.740239 135.231942) (xy 92.000683 135.124063) + (xy 92.244817 134.983112) (xy 92.468465 134.8115) (xy 92.6678 134.612165) (xy 92.735492 134.523946) + (xy 92.79192 134.482744) (xy 92.861666 134.478589) (xy 92.922586 134.512801) (xy 92.955339 134.574518) + (xy 92.949526 134.644146) (xy 92.941255 134.661433) (xy 92.885183 134.758551) (xy 92.885175 134.758568) + (xy 92.775097 135.024321) (xy 92.700646 135.302176) (xy 92.663101 135.587361) (xy 92.6631 135.587377) + (xy 92.6631 135.875022) (xy 92.663101 135.875038) (xy 92.700646 136.160223) (xy 92.775097 136.438078) + (xy 92.885175 136.703831) (xy 92.885183 136.703848) (xy 93.029004 136.952951) (xy 93.029015 136.952967) + (xy 93.204121 137.181171) (xy 93.204127 137.181178) (xy 93.407525 137.384576) (xy 93.503761 137.45842) + (xy 93.635741 137.559691) (xy 93.635748 137.559695) (xy 93.884851 137.703516) (xy 93.884856 137.703518) + (xy 93.884859 137.70352) (xy 93.884863 137.703521) (xy 93.884868 137.703524) (xy 93.990223 137.747163) + (xy 94.15062 137.813602) (xy 94.428475 137.888053) (xy 94.713671 137.9256) (xy 94.713678 137.9256) + (xy 95.001322 137.9256) (xy 95.001329 137.9256) (xy 95.286525 137.888053) (xy 95.56438 137.813602) + (xy 95.830141 137.70352) (xy 96.079259 137.559691) (xy 96.220078 137.451636) (xy 96.307475 137.384576) + (xy 96.307478 137.384572) (xy 96.510872 137.181178) (xy 96.510877 137.181173) (xy 96.685991 136.952959) + (xy 96.82982 136.703841) (xy 96.939902 136.43808) (xy 97.014353 136.160225) (xy 97.0519 135.875029) + (xy 97.0519 135.64655) (xy 98.862 135.64655) (xy 98.862 135.815849) (xy 98.888481 135.983047) (xy 98.940796 136.144053) + (xy 99.017652 136.294888) (xy 99.117148 136.431834) (xy 99.117152 136.431839) (xy 99.23686 136.551547) + (xy 99.236865 136.551551) (xy 99.356317 136.638337) (xy 99.373815 136.65105) (xy 99.437017 136.683253) + (xy 99.524646 136.727903) (xy 99.524648 136.727903) (xy 99.524651 136.727905) (xy 99.61095 136.755945) + (xy 99.685652 136.780218) (xy 99.852851 136.8067) (xy 99.852856 136.8067) (xy 100.022149 136.8067) + (xy 100.189347 136.780218) (xy 100.350349 136.727905) (xy 100.501185 136.65105) (xy 100.638141 136.551546) + (xy 100.757846 136.431841) (xy 100.85735 136.294885) (xy 100.934205 136.144049) (xy 100.986518 135.983047) + (xy 101.013 135.815849) (xy 101.013 135.64655) (xy 100.986518 135.479352) (xy 100.941796 135.341713) + (xy 100.934205 135.318351) (xy 100.934203 135.318348) (xy 100.934203 135.318346) (xy 100.890176 135.23194) + (xy 100.85735 135.167515) (xy 100.825781 135.124064) (xy 100.757851 135.030565) (xy 100.757847 135.03056) + (xy 100.638139 134.910852) (xy 100.638134 134.910848) (xy 100.501188 134.811352) (xy 100.501187 134.811351) + (xy 100.501185 134.81135) (xy 100.436109 134.778192) (xy 100.350353 134.734496) (xy 100.189347 134.682181) + (xy 100.022149 134.6557) (xy 100.022144 134.6557) (xy 99.852856 134.6557) (xy 99.852851 134.6557) + (xy 99.685652 134.682181) (xy 99.524646 134.734496) (xy 99.373811 134.811352) (xy 99.236865 134.910848) + (xy 99.23686 134.910852) (xy 99.117152 135.03056) (xy 99.117148 135.030565) (xy 99.017652 135.167511) + (xy 98.940796 135.318346) (xy 98.888481 135.479352) (xy 98.862 135.64655) (xy 97.0519 135.64655) + (xy 97.0519 135.587371) (xy 97.014353 135.302175) (xy 96.939902 135.02432) (xy 96.873463 134.863923) + (xy 96.829824 134.758568) (xy 96.829816 134.758551) (xy 96.685995 134.509448) (xy 96.685994 134.509447) + (xy 96.685991 134.509441) (xy 96.561525 134.347233) (xy 96.510878 134.281228) (xy 96.510872 134.281221) + (xy 96.307478 134.077827) (xy 96.307471 134.077821) (xy 96.079267 133.902715) (xy 96.079265 133.902713) + (xy 96.079259 133.902709) (xy 96.079254 133.902706) (xy 96.079251 133.902704) (xy 95.830148 133.758883) + (xy 95.830131 133.758875) (xy 95.564378 133.648797) (xy 95.286523 133.574346) (xy 95.001338 133.536801) + (xy 95.001335 133.5368) (xy 95.001329 133.5368) (xy 94.713671 133.5368) (xy 94.713665 133.5368) + (xy 94.713661 133.536801) (xy 94.428476 133.574346) (xy 94.150621 133.648797) (xy 93.884868 133.758875) + (xy 93.884851 133.758883) (xy 93.635748 133.902704) (xy 93.635732 133.902715) (xy 93.407528 134.077821) + (xy 93.407521 134.077827) (xy 93.204127 134.281221) (xy 93.13293 134.374007) (xy 93.076501 134.415209) + (xy 93.006755 134.419364) (xy 92.945835 134.385151) (xy 92.913083 134.323434) (xy 92.918896 134.253807) + (xy 92.927161 134.236531) (xy 92.980363 134.144383) (xy 93.088242 133.883939) (xy 93.161204 133.611642) + (xy 93.198 133.332151) (xy 93.198 133.050249) (xy 93.161204 132.770758) (xy 93.088242 132.498461) + (xy 93.08126 132.481606) (xy 93.059309 132.428611) (xy 92.980363 132.238017) (xy 92.980361 132.238014) + (xy 92.980359 132.238009) (xy 92.839416 131.99389) (xy 92.839412 131.993883) (xy 92.6678 131.770235) + (xy 92.667798 131.770233) (xy 92.667795 131.770229) (xy 92.46847 131.570904) (xy 92.369871 131.495246) + (xy 92.244817 131.399288) (xy 92.244811 131.399284) (xy 92.244809 131.399283) (xy 92.00069 131.25834) + (xy 92.000679 131.258335) (xy 91.740243 131.150459) (xy 91.467939 131.077495) (xy 91.188458 131.0407) + (xy 91.188451 131.0407) (xy 90.906549 131.0407) (xy 90.906541 131.0407) (xy 90.62706 131.077495) + (xy 90.354756 131.150459) (xy 90.09432 131.258335) (xy 90.094309 131.25834) (xy 89.85019 131.399283) + (xy 89.850182 131.399289) (xy 89.626529 131.570904) (xy 89.427204 131.770229) (xy 89.255589 131.993882) + (xy 89.255583 131.99389) (xy 89.11464 132.238009) (xy 89.114635 132.23802) (xy 89.006759 132.498456) + (xy 88.933795 132.77076) (xy 88.897 133.050241) (xy 88.897 133.332158) (xy 88.933795 133.611639) + (xy 89.006759 133.883943) (xy 89.114635 134.144379) (xy 89.11464 134.14439) (xy 89.255583 134.388509) + (xy 89.255594 134.388525) (xy 89.386338 134.558914) (xy 89.411532 134.624083) (xy 89.397494 134.692528) + (xy 89.34868 134.742517) (xy 89.344258 134.744884) (xy 89.213813 134.81135) (xy 89.076865 134.910848) + (xy 89.07686 134.910852) (xy 88.957152 135.03056) (xy 88.957148 135.030565) (xy 88.857652 135.167511) + (xy 88.780796 135.318346) (xy 88.728481 135.479352) (xy 88.702 135.64655) (xy 87.725 135.64655) + (xy 87.725 134.046075) (xy 87.744685 133.979036) (xy 87.797489 133.933281) (xy 87.801499 133.931534) + (xy 87.876679 133.900394) (xy 88.007789 133.812789) (xy 88.119289 133.701289) (xy 88.206894 133.570179) + (xy 88.267237 133.424497) (xy 88.298 133.269842) (xy 88.298 133.112158) (xy 88.298 133.112155) (xy 88.297999 133.112153) + (xy 88.267237 132.957503) (xy 88.25153 132.919582) (xy 88.206897 132.811827) (xy 88.20689 132.811814) + (xy 88.119289 132.680711) (xy 88.119286 132.680707) (xy 88.007792 132.569213) (xy 88.007788 132.56921) + (xy 87.876685 132.481609) (xy 87.876672 132.481602) (xy 87.731001 132.421264) (xy 87.730989 132.421261) + (xy 87.576345 132.3905) (xy 87.576342 132.3905) (xy 87.418658 132.3905) (xy 87.418655 132.3905) + (xy 87.26401 132.421261) (xy 87.264003 132.421263) (xy 87.188824 132.452402) (xy 87.119354 132.459869) + (xy 87.056876 132.428594) (xy 87.053696 132.425526) (xy 85.221854 130.593876) (xy 85.13821 130.510241) + (xy 95.247 130.510241) (xy 95.247 130.792158) (xy 95.283795 131.071639) (xy 95.356759 131.343943) + (xy 95.464635 131.604379) (xy 95.46464 131.60439) (xy 95.597142 131.833888) (xy 95.605588 131.848517) + (xy 95.768047 132.060237) (xy 95.777204 132.07217) (xy 95.976529 132.271495) (xy 95.976533 132.271498) + (xy 95.976535 132.2715) (xy 96.200183 132.443112) (xy 96.20019 132.443116) (xy 96.444309 132.584059) + (xy 96.444314 132.584061) (xy 96.444317 132.584063) (xy 96.704761 132.691942) (xy 96.977058 132.764904) + (xy 97.256549 132.8017) (xy 97.256556 132.8017) (xy 97.538444 132.8017) (xy 97.538451 132.8017) + (xy 97.817942 132.764904) (xy 98.090239 132.691942) (xy 98.350683 132.584063) (xy 98.594817 132.443112) + (xy 98.818465 132.2715) (xy 99.0178 132.072165) (xy 99.189412 131.848517) (xy 99.330363 131.604383) + (xy 99.438242 131.343939) (xy 99.511204 131.071642) (xy 99.548 130.792151) (xy 99.548 130.510249) + (xy 99.511204 130.230758) (xy 99.438242 129.958461) (xy 99.43126 129.941606) (xy 99.406265 129.881261) + (xy 99.330363 129.698017) (xy 99.330361 129.698014) (xy 99.330359 129.698009) (xy 99.189416 129.45389) + (xy 99.189412 129.453883) (xy 99.0178 129.230235) (xy 99.017798 129.230233) (xy 99.017795 129.230229) + (xy 98.81847 129.030904) (xy 98.818465 129.0309) (xy 98.594817 128.859288) (xy 98.594811 128.859284) + (xy 98.594809 128.859283) (xy 98.35069 128.71834) (xy 98.350679 128.718335) (xy 98.090243 128.610459) + (xy 97.817939 128.537495) (xy 97.538458 128.5007) (xy 97.538451 128.5007) (xy 97.256549 128.5007) + (xy 97.256541 128.5007) (xy 96.97706 128.537495) (xy 96.704756 128.610459) (xy 96.44432 128.718335) + (xy 96.444309 128.71834) (xy 96.20019 128.859283) (xy 96.200184 128.859287) (xy 96.200183 128.859288) + (xy 96.145198 128.90148) (xy 95.976529 129.030904) (xy 95.777204 129.230229) (xy 95.663881 129.377914) + (xy 95.605597 129.453872) (xy 95.605589 129.453882) (xy 95.605583 129.45389) (xy 95.46464 129.698009) + (xy 95.464635 129.69802) (xy 95.356759 129.958456) (xy 95.283795 130.23076) (xy 95.247 130.510241) + (xy 85.13821 130.510241) (xy 82.998823 128.371078) (xy 82.965335 128.309756) (xy 82.9625 128.283392) + (xy 82.9625 122.432106) (xy 87.765265 122.432106) (xy 87.781476 122.598035) (xy 87.783021 122.613842) + (xy 87.802406 122.681404) (xy 87.83338 122.789361) (xy 87.91468 122.952863) (xy 87.914681 122.952865) + (xy 87.914683 122.952868) (xy 87.927766 122.970313) (xy 88.024238 123.098952) (xy 88.024239 123.098953) + (xy 88.02424 123.098954) (xy 88.158432 123.222795) (xy 88.312825 123.320297) (xy 88.447977 123.374474) + (xy 88.482314 123.388239) (xy 88.482315 123.388239) (xy 88.482317 123.38824) (xy 88.661308 123.424379) + (xy 88.661302 123.424379) (xy 88.677622 123.424659) (xy 88.843884 123.42752) (xy 89.024012 123.397558) + (xy 89.130961 123.358899) (xy 89.195736 123.335485) (xy 89.195737 123.335483) (xy 89.19574 123.335483) + (xy 89.210775 123.32672) (xy 89.217459 123.322835) (xy 89.21775 123.322757) (xy 89.245633 123.30646) + (xy 89.245751 123.306392) (xy 89.248968 123.305601) (xy 89.308062 123.289599) (xy 90.789192 123.289599) + (xy 90.789314 123.289606) (xy 90.797405 123.289605) (xy 90.797408 123.289606) (xy 90.829542 123.289602) + (xy 90.892104 123.306534) (xy 90.91993 123.322791) (xy 90.919932 123.322791) (xy 90.92608 123.326383) + (xy 90.927735 123.327208) (xy 90.941878 123.33545) (xy 91.1136 123.397521) (xy 91.293721 123.427482) + (xy 91.473398 123.42439) (xy 91.476291 123.424341) (xy 91.655266 123.388205) (xy 91.655269 123.388203) + (xy 91.655274 123.388203) (xy 91.82476 123.320262) (xy 91.979146 123.222763) (xy 91.989805 123.212927) + (xy 92.11333 123.09893) (xy 92.113332 123.098928) (xy 92.126172 123.081807) (xy 92.222885 122.952847) + (xy 92.304184 122.789348) (xy 92.354542 122.613833) (xy 92.372297 122.432103) (xy 92.35686 122.25016) + (xy 92.356858 122.250154) (xy 92.345292 122.207814) (xy 92.308743 122.074018) (xy 92.300983 122.057849) + (xy 92.297896 122.051404) (xy 92.297848 122.051146) (xy 92.281471 122.017119) (xy 92.281343 122.01633) + (xy 92.269302 121.963531) (xy 92.269302 121.963522) (xy 92.269307 121.926108) (xy 92.269306 121.926104) + (xy 92.269307 121.918098) (xy 92.269299 121.91796) (xy 92.269299 120.614677) (xy 92.271954 120.603008) + (xy 92.27092 120.594694) (xy 92.281505 120.561028) (xy 92.287811 120.54789) (xy 92.297874 120.526974) + (xy 92.297874 120.526969) (xy 92.30126 120.519933) (xy 92.301425 120.519522) (xy 92.301546 120.51927) + (xy 92.308783 120.504191) (xy 92.3569 120.328042) (xy 92.372337 120.146093) (xy 92.354581 119.964355) + (xy 92.30422 119.788834) (xy 92.222918 119.62533) (xy 92.128475 119.499397) (xy 92.113362 119.479245) + (xy 92.045059 119.416211) (xy 91.979169 119.355404) (xy 91.979166 119.355402) (xy 91.979165 119.355401) + (xy 91.979162 119.355399) (xy 91.824777 119.257901) (xy 91.655287 119.189958) (xy 91.655277 119.189956) + (xy 91.476292 119.153818) (xy 91.476299 119.153818) (xy 91.304594 119.150865) (xy 91.293718 119.150678) + (xy 91.293717 119.150678) (xy 91.293714 119.150678) (xy 91.113597 119.180638) (xy 91.113584 119.180641) + (xy 90.941863 119.242713) (xy 90.927348 119.25117) (xy 90.927263 119.251219) (xy 90.920176 119.25534) + (xy 90.91993 119.255408) (xy 90.892138 119.271644) (xy 90.89189 119.271789) (xy 90.889163 119.272459) + (xy 90.829546 119.288596) (xy 90.789201 119.288593) (xy 90.789097 119.2886) (xy 89.348396 119.2886) + (xy 89.340214 119.288598) (xy 89.340192 119.288593) (xy 89.310265 119.288595) (xy 89.308028 119.288595) + (xy 89.307746 119.288512) (xy 89.245493 119.271662) (xy 89.217671 119.255408) (xy 89.211605 119.251864) + (xy 89.209907 119.251017) (xy 89.202557 119.246734) (xy 89.195721 119.24275) (xy 89.023997 119.180678) + (xy 89.023991 119.180677) (xy 88.843881 119.150719) (xy 88.843878 119.150719) (xy 88.835339 119.150865) + (xy 88.661307 119.153859) (xy 88.482334 119.189994) (xy 88.482323 119.189997) (xy 88.312842 119.257937) + (xy 88.312841 119.257937) (xy 88.158461 119.355432) (xy 88.158458 119.355434) (xy 88.024267 119.479273) + (xy 87.914715 119.625354) (xy 87.83342 119.788844) (xy 87.833419 119.788847) (xy 87.833418 119.78885) + (xy 87.816545 119.847658) (xy 87.783058 119.964365) (xy 87.769278 120.105413) (xy 87.765304 120.146093) + (xy 87.766483 120.159989) (xy 87.780579 120.326147) (xy 87.78074 120.328035) (xy 87.805448 120.418484) + (xy 87.828856 120.504178) (xy 87.82886 120.504188) (xy 87.836098 120.51927) (xy 87.83614 120.519356) + (xy 87.839723 120.526838) (xy 87.839781 120.52714) (xy 87.856097 120.561025) (xy 87.856136 120.561106) + (xy 87.856281 120.562) (xy 87.868301 120.614669) (xy 87.868301 121.963522) (xy 87.856107 122.017145) + (xy 87.855519 122.018371) (xy 87.855439 122.018538) (xy 87.836566 122.057737) (xy 87.836242 122.058539) + (xy 87.828818 122.07401) (xy 87.780701 122.250154) (xy 87.780701 122.250156) (xy 87.765265 122.432106) + (xy 82.9625 122.432106) (xy 82.9625 116.59655) (xy 83.9395 116.59655) (xy 83.9395 116.765849) (xy 83.965981 116.933047) + (xy 84.018296 117.094053) (xy 84.095152 117.244888) (xy 84.194648 117.381834) (xy 84.194651 117.381838) + (xy 84.31436 117.501547) (xy 84.314365 117.501551) (xy 84.394244 117.559586) (xy 84.451315 117.60105) + (xy 84.547425 117.65002) (xy 84.602146 117.677903) (xy 84.602148 117.677903) (xy 84.602151 117.677905) + (xy 84.68845 117.705945) (xy 84.763152 117.730218) (xy 84.930351 117.7567) (xy 84.930356 117.7567) + (xy 85.099649 117.7567) (xy 85.266847 117.730218) (xy 85.427849 117.677905) (xy 85.578685 117.60105) + (xy 85.715641 117.501546) (xy 85.835346 117.381841) (xy 85.835346 117.38184) (xy 85.835349 117.381838) + (xy 85.835351 117.381834) (xy 85.856179 117.353167) (xy 85.93485 117.244885) (xy 86.011705 117.094049) + (xy 86.064018 116.933047) (xy 86.0905 116.765849) (xy 86.0905 116.59655) (xy 86.064928 116.435098) + (xy 86.073882 116.365805) (xy 86.118879 116.312353) (xy 86.18563 116.291713) (xy 86.187401 116.2917) + (xy 86.425944 116.2917) (xy 86.425951 116.2917) (xy 86.705442 116.254904) (xy 86.977739 116.181942) + (xy 87.238183 116.074063) (xy 87.482317 115.933112) (xy 87.705965 115.7615) (xy 87.9053 115.562165) + (xy 87.972992 115.473946) (xy 88.02942 115.432744) (xy 88.099166 115.428589) (xy 88.160086 115.462801) + (xy 88.192839 115.524518) (xy 88.187026 115.594146) (xy 88.178755 115.611433) (xy 88.122683 115.708551) + (xy 88.122675 115.708568) (xy 88.012597 115.974321) (xy 87.938146 116.252176) (xy 87.900601 116.537361) + (xy 87.9006 116.537377) (xy 87.9006 116.825022) (xy 87.900601 116.825038) (xy 87.938146 117.110223) + (xy 88.012597 117.388078) (xy 88.122675 117.653831) (xy 88.122683 117.653848) (xy 88.266504 117.902951) + (xy 88.266515 117.902967) (xy 88.441621 118.131171) (xy 88.441627 118.131178) (xy 88.645021 118.334572) + (xy 88.645027 118.334577) (xy 88.873241 118.509691) (xy 88.873248 118.509695) (xy 89.122351 118.653516) + (xy 89.122356 118.653518) (xy 89.122359 118.65352) (xy 89.122363 118.653521) (xy 89.122368 118.653524) + (xy 89.169808 118.673174) (xy 89.38812 118.763602) (xy 89.665975 118.838053) (xy 89.951171 118.8756) + (xy 89.951178 118.8756) (xy 90.238822 118.8756) (xy 90.238829 118.8756) (xy 90.524025 118.838053) + (xy 90.80188 118.763602) (xy 91.067641 118.65352) (xy 91.070056 118.652126) (xy 91.184067 118.586301) + (xy 91.316759 118.509691) (xy 91.544973 118.334577) (xy 91.748377 118.131173) (xy 91.923491 117.902959) + (xy 92.06732 117.653841) (xy 92.177402 117.38808) (xy 92.251853 117.110225) (xy 92.2894 116.825029) + (xy 92.2894 116.59655) (xy 94.0995 116.59655) (xy 94.0995 116.765849) (xy 94.125981 116.933047) + (xy 94.178296 117.094053) (xy 94.255152 117.244888) (xy 94.354648 117.381834) (xy 94.354651 117.381838) + (xy 94.47436 117.501547) (xy 94.474365 117.501551) (xy 94.554244 117.559586) (xy 94.611315 117.60105) + (xy 94.707425 117.65002) (xy 94.762146 117.677903) (xy 94.762148 117.677903) (xy 94.762151 117.677905) + (xy 94.84845 117.705945) (xy 94.923152 117.730218) (xy 95.090351 117.7567) (xy 95.090356 117.7567) + (xy 95.259649 117.7567) (xy 95.426847 117.730218) (xy 95.587849 117.677905) (xy 95.738685 117.60105) + (xy 95.875641 117.501546) (xy 95.995346 117.381841) (xy 95.995346 117.38184) (xy 95.995349 117.381838) + (xy 95.995351 117.381834) (xy 96.016179 117.353167) (xy 96.09485 117.244885) (xy 96.171705 117.094049) + (xy 96.224018 116.933047) (xy 96.2505 116.765849) (xy 96.2505 116.59655) (xy 96.224018 116.429352) + (xy 96.197275 116.347046) (xy 96.171705 116.268351) (xy 96.171703 116.268348) (xy 96.171703 116.268346) + (xy 96.121015 116.168867) (xy 96.09485 116.117515) (xy 96.063281 116.074064) (xy 95.995351 115.980565) + (xy 95.995347 115.98056) (xy 95.875639 115.860852) (xy 95.875634 115.860848) (xy 95.738688 115.761352) + (xy 95.738687 115.761351) (xy 95.738685 115.76135) (xy 95.689398 115.736237) (xy 95.587853 115.684496) + (xy 95.426847 115.632181) (xy 95.259649 115.6057) (xy 95.259644 115.6057) (xy 95.090356 115.6057) + (xy 95.090351 115.6057) (xy 94.923152 115.632181) (xy 94.762146 115.684496) (xy 94.611311 115.761352) + (xy 94.474365 115.860848) (xy 94.47436 115.860852) (xy 94.354652 115.98056) (xy 94.354648 115.980565) + (xy 94.255152 116.117511) (xy 94.178296 116.268346) (xy 94.125981 116.429352) (xy 94.0995 116.59655) + (xy 92.2894 116.59655) (xy 92.2894 116.537371) (xy 92.251853 116.252175) (xy 92.177402 115.97432) + (xy 92.089705 115.762601) (xy 92.067324 115.708568) (xy 92.067316 115.708551) (xy 91.923495 115.459448) + (xy 91.923491 115.459441) (xy 91.782073 115.275141) (xy 91.748378 115.231228) (xy 91.748372 115.231221) + (xy 91.544978 115.027827) (xy 91.544971 115.027821) (xy 91.316767 114.852715) (xy 91.316765 114.852713) + (xy 91.316759 114.852709) (xy 91.316754 114.852706) (xy 91.316751 114.852704) (xy 91.067648 114.708883) + (xy 91.067631 114.708875) (xy 90.801878 114.598797) (xy 90.524023 114.524346) (xy 90.238838 114.486801) + (xy 90.238835 114.4868) (xy 90.238829 114.4868) (xy 89.951171 114.4868) (xy 89.951165 114.4868) + (xy 89.951161 114.486801) (xy 89.665976 114.524346) (xy 89.388121 114.598797) (xy 89.122368 114.708875) + (xy 89.122351 114.708883) (xy 88.873248 114.852704) (xy 88.873232 114.852715) (xy 88.645028 115.027821) + (xy 88.645021 115.027827) (xy 88.441627 115.231221) (xy 88.37043 115.324007) (xy 88.314001 115.365209) + (xy 88.244255 115.369364) (xy 88.183335 115.335151) (xy 88.150583 115.273434) (xy 88.156396 115.203807) + (xy 88.164661 115.186531) (xy 88.217863 115.094383) (xy 88.325742 114.833939) (xy 88.398704 114.561642) + (xy 88.4355 114.282151) (xy 88.4355 114.000249) (xy 88.398704 113.720758) (xy 88.325742 113.448461) + (xy 88.31876 113.431606) (xy 88.293765 113.371261) (xy 88.217863 113.188017) (xy 88.217861 113.188014) + (xy 88.217859 113.188009) (xy 88.076916 112.94389) (xy 88.076912 112.943883) (xy 87.9053 112.720235) + (xy 87.905298 112.720233) (xy 87.905295 112.720229) (xy 87.70597 112.520904) (xy 87.681161 112.501867) + (xy 87.482317 112.349288) (xy 87.482311 112.349284) (xy 87.482309 112.349283) (xy 87.23819 112.20834) + (xy 87.238179 112.208335) (xy 86.977743 112.100459) (xy 86.705439 112.027495) (xy 86.425958 111.9907) + (xy 86.425951 111.9907) (xy 86.144049 111.9907) (xy 86.144041 111.9907) (xy 85.86456 112.027495) + (xy 85.592256 112.100459) (xy 85.33182 112.208335) (xy 85.331809 112.20834) (xy 85.08769 112.349283) + (xy 85.087682 112.349289) (xy 84.864029 112.520904) (xy 84.664704 112.720229) (xy 84.493089 112.943882) + (xy 84.493083 112.94389) (xy 84.35214 113.188009) (xy 84.352135 113.18802) (xy 84.244259 113.448456) + (xy 84.171295 113.72076) (xy 84.1345 114.000241) (xy 84.1345 114.282158) (xy 84.171295 114.561639) + (xy 84.244259 114.833943) (xy 84.352135 115.094379) (xy 84.35214 115.09439) (xy 84.493083 115.338509) + (xy 84.493094 115.338525) (xy 84.623838 115.508914) (xy 84.649032 115.574083) (xy 84.634994 115.642528) + (xy 84.58618 115.692517) (xy 84.581758 115.694884) (xy 84.451313 115.76135) (xy 84.314365 115.860848) + (xy 84.31436 115.860852) (xy 84.194652 115.98056) (xy 84.194648 115.980565) (xy 84.095152 116.117511) + (xy 84.018296 116.268346) (xy 83.965981 116.429352) (xy 83.9395 116.59655) (xy 82.9625 116.59655) + (xy 82.9625 114.996075) (xy 82.982185 114.929036) (xy 83.034989 114.883281) (xy 83.038999 114.881534) + (xy 83.114179 114.850394) (xy 83.245289 114.762789) (xy 83.356789 114.651289) (xy 83.444394 114.520179) + (xy 83.504737 114.374497) (xy 83.5355 114.219842) (xy 83.5355 114.062158) (xy 83.5355 114.062155) + (xy 83.535499 114.062153) (xy 83.523556 114.002113) (xy 83.504737 113.907503) (xy 83.477278 113.841211) + (xy 83.444397 113.761827) (xy 83.44439 113.761814) (xy 83.356789 113.630711) (xy 83.356786 113.630707) + (xy 83.245292 113.519213) (xy 83.245288 113.51921) (xy 83.114185 113.431609) (xy 83.114172 113.431602) + (xy 82.968501 113.371264) (xy 82.968489 113.371261) (xy 82.813845 113.3405) (xy 82.813842 113.3405) + (xy 82.656158 113.3405) (xy 82.656155 113.3405) (xy 82.50151 113.371261) (xy 82.501507 113.371262) + (xy 82.501506 113.371262) (xy 82.501503 113.371263) (xy 82.448745 113.393116) (xy 82.426348 113.402393) + (xy 82.356878 113.409861) (xy 82.294399 113.378585) (xy 82.291217 113.375515) (xy 73.421321 104.506081) + (xy 73.387834 104.444758) (xy 73.385 104.418397) (xy 73.385 102.959853) (xy 75.4192 102.959853) + (xy 75.4192 103.117546) (xy 75.449961 103.272189) (xy 75.449964 103.272201) (xy 75.510302 103.417872) + (xy 75.510309 103.417885) (xy 75.59791 103.548988) (xy 75.597913 103.548992) (xy 75.709407 103.660486) + (xy 75.709411 103.660489) (xy 75.840514 103.74809) (xy 75.840527 103.748097) (xy 75.967176 103.800556) + (xy 75.986203 103.808437) (xy 76.117426 103.834539) (xy 76.140853 103.839199) (xy 76.140856 103.8392) + (xy 76.140858 103.8392) (xy 76.298544 103.8392) (xy 76.298545 103.839199) (xy 76.453197 103.808437) + (xy 76.565866 103.761767) (xy 76.598872 103.748097) (xy 76.598872 103.748096) (xy 76.598879 103.748094) + (xy 76.729989 103.660489) (xy 76.841489 103.548989) (xy 76.919855 103.431706) (xy 78.200265 103.431706) + (xy 78.217771 103.610889) (xy 78.218021 103.613442) (xy 78.235234 103.673434) (xy 78.26838 103.788961) + (xy 78.34968 103.952463) (xy 78.349681 103.952465) (xy 78.349683 103.952468) (xy 78.400632 104.020405) + (xy 78.459238 104.098552) (xy 78.459239 104.098553) (xy 78.45924 104.098554) (xy 78.593432 104.222395) + (xy 78.747825 104.319897) (xy 78.878942 104.372457) (xy 78.917314 104.387839) (xy 78.917315 104.387839) + (xy 78.917317 104.38784) (xy 79.096308 104.423979) (xy 79.096302 104.423979) (xy 79.112622 104.424259) + (xy 79.278884 104.42712) (xy 79.459012 104.397158) (xy 79.512452 104.377841) (xy 79.630736 104.335085) + (xy 79.630737 104.335083) (xy 79.63074 104.335083) (xy 79.645775 104.32632) (xy 79.652459 104.322435) + (xy 79.65275 104.322357) (xy 79.680633 104.30606) (xy 79.680751 104.305992) (xy 79.683968 104.305201) + (xy 79.743062 104.289199) (xy 81.224192 104.289199) (xy 81.224314 104.289206) (xy 81.232405 104.289205) + (xy 81.232408 104.289206) (xy 81.264542 104.289202) (xy 81.327104 104.306134) (xy 81.35493 104.322391) + (xy 81.354932 104.322391) (xy 81.36108 104.325983) (xy 81.362735 104.326808) (xy 81.376878 104.33505) + (xy 81.5486 104.397121) (xy 81.728721 104.427082) (xy 81.908398 104.42399) (xy 81.911291 104.423941) + (xy 82.090266 104.387805) (xy 82.090269 104.387803) (xy 82.090274 104.387803) (xy 82.25976 104.319862) + (xy 82.414146 104.222363) (xy 82.423149 104.214055) (xy 82.54833 104.09853) (xy 82.548332 104.098528) + (xy 82.55583 104.08853) (xy 82.657885 103.952447) (xy 82.739184 103.788948) (xy 82.789542 103.613433) + (xy 82.807297 103.431703) (xy 82.79186 103.24976) (xy 82.791858 103.249754) (xy 82.776811 103.194671) + (xy 82.743743 103.073618) (xy 82.735983 103.057449) (xy 82.732896 103.051004) (xy 82.732848 103.050746) + (xy 82.716471 103.016719) (xy 82.716343 103.01593) (xy 82.704302 102.963131) (xy 82.704302 102.963126) + (xy 82.704307 102.925708) (xy 82.704306 102.925704) (xy 82.704307 102.917698) (xy 82.704299 102.91756) + (xy 82.704299 101.61428) (xy 82.706952 101.602616) (xy 82.705918 101.594307) (xy 82.716497 101.560659) + (xy 82.716502 101.560638) (xy 82.717346 101.558878) (xy 82.723081 101.546929) (xy 82.723082 101.546928) + (xy 82.723083 101.546928) (xy 82.723088 101.546923) (xy 82.723123 101.54684) (xy 82.732874 101.526574) + (xy 82.732874 101.526572) (xy 82.736253 101.51955) (xy 82.736418 101.519135) (xy 82.743783 101.503791) + (xy 82.7919 101.327642) (xy 82.807337 101.145693) (xy 82.789581 100.963955) (xy 82.73922 100.788434) + (xy 82.714561 100.738844) (xy 82.657919 100.624932) (xy 82.650436 100.614954) (xy 82.570593 100.508489) + (xy 82.548362 100.478845) (xy 82.546351 100.476989) (xy 82.414169 100.355004) (xy 82.414166 100.355002) + (xy 82.414165 100.355001) (xy 82.414162 100.354999) (xy 82.259777 100.257501) (xy 82.090287 100.189558) + (xy 82.090277 100.189556) (xy 81.911292 100.153418) (xy 81.911299 100.153418) (xy 81.739594 100.150465) + (xy 81.728718 100.150278) (xy 81.728717 100.150278) (xy 81.728714 100.150278) (xy 81.548597 100.180238) + (xy 81.548584 100.180241) (xy 81.376863 100.242313) (xy 81.362348 100.25077) (xy 81.362263 100.250819) + (xy 81.355176 100.25494) (xy 81.35493 100.255008) (xy 81.327138 100.271244) (xy 81.32689 100.271389) + (xy 81.324163 100.272059) (xy 81.264546 100.288196) (xy 81.224201 100.288193) (xy 81.224097 100.2882) + (xy 79.783396 100.2882) (xy 79.775214 100.288198) (xy 79.775192 100.288193) (xy 79.745265 100.288195) + (xy 79.743028 100.288195) (xy 79.742746 100.288112) (xy 79.680493 100.271262) (xy 79.652671 100.255008) + (xy 79.646605 100.251464) (xy 79.644907 100.250617) (xy 79.634866 100.244766) (xy 79.630721 100.24235) + (xy 79.458997 100.180278) (xy 79.458991 100.180277) (xy 79.278881 100.150319) (xy 79.278878 100.150319) + (xy 79.270339 100.150465) (xy 79.096307 100.153459) (xy 78.917334 100.189594) (xy 78.917323 100.189597) + (xy 78.747842 100.257537) (xy 78.747841 100.257537) (xy 78.593461 100.355032) (xy 78.593458 100.355034) + (xy 78.459267 100.478873) (xy 78.349715 100.624954) (xy 78.26842 100.788444) (xy 78.268419 100.788447) + (xy 78.268418 100.78845) (xy 78.249836 100.853213) (xy 78.218058 100.963965) (xy 78.200397 101.144737) + (xy 78.200304 101.145693) (xy 78.204664 101.197085) (xy 78.215563 101.325556) (xy 78.21574 101.327635) + (xy 78.24838 101.447121) (xy 78.263856 101.503778) (xy 78.26386 101.503788) (xy 78.271098 101.51887) + (xy 78.27114 101.518956) (xy 78.274723 101.526438) (xy 78.274781 101.52674) (xy 78.291103 101.560638) + (xy 78.291136 101.560706) (xy 78.291281 101.5616) (xy 78.303301 101.614269) (xy 78.303301 102.963126) + (xy 78.291078 103.01681) (xy 78.290798 103.017393) (xy 78.290746 103.017501) (xy 78.271567 103.057334) + (xy 78.27124 103.058144) (xy 78.263818 103.07361) (xy 78.215701 103.249754) (xy 78.215701 103.249756) + (xy 78.200265 103.431706) (xy 76.919855 103.431706) (xy 76.929094 103.417879) (xy 76.930686 103.414035) + (xy 76.945034 103.379397) (xy 76.974438 103.308409) (xy 76.989437 103.272197) (xy 77.0202 103.117542) + (xy 77.0202 102.959858) (xy 77.0202 102.959855) (xy 77.020199 102.959853) (xy 77.009797 102.90756) + (xy 76.989437 102.805203) (xy 76.973071 102.765692) (xy 76.929097 102.659527) (xy 76.92909 102.659514) + (xy 76.841489 102.528411) (xy 76.841486 102.528407) (xy 76.729992 102.416913) (xy 76.729988 102.41691) + (xy 76.598885 102.329309) (xy 76.598872 102.329302) (xy 76.453201 102.268964) (xy 76.453189 102.268961) + (xy 76.298545 102.2382) (xy 76.298542 102.2382) (xy 76.140858 102.2382) (xy 76.140855 102.2382) + (xy 75.98621 102.268961) (xy 75.986198 102.268964) (xy 75.840527 102.329302) (xy 75.840514 102.329309) + (xy 75.709411 102.41691) (xy 75.709407 102.416913) (xy 75.597913 102.528407) (xy 75.59791 102.528411) + (xy 75.510309 102.659514) (xy 75.510302 102.659527) (xy 75.449964 102.805198) (xy 75.449961 102.80521) + (xy 75.4192 102.959853) (xy 73.385 102.959853) (xy 73.385 97.54655) (xy 74.362 97.54655) (xy 74.362 97.715849) + (xy 74.388481 97.883047) (xy 74.440796 98.044053) (xy 74.517652 98.194888) (xy 74.617148 98.331834) + (xy 74.617152 98.331839) (xy 74.73686 98.451547) (xy 74.736865 98.451551) (xy 74.813873 98.5075) + (xy 74.873815 98.55105) (xy 74.967141 98.598602) (xy 75.024646 98.627903) (xy 75.024648 98.627903) + (xy 75.024651 98.627905) (xy 75.10885 98.655263) (xy 75.185652 98.680218) (xy 75.352851 98.7067) + (xy 75.352856 98.7067) (xy 75.522149 98.7067) (xy 75.689347 98.680218) (xy 75.850349 98.627905) + (xy 76.001185 98.55105) (xy 76.138141 98.451546) (xy 76.257846 98.331841) (xy 76.35735 98.194885) + (xy 76.434205 98.044049) (xy 76.486518 97.883047) (xy 76.496383 97.820763) (xy 76.513 97.715849) + (xy 76.513 97.54655) (xy 76.487428 97.385098) (xy 76.496382 97.315805) (xy 76.541379 97.262353) + (xy 76.60813 97.241713) (xy 76.609901 97.2417) (xy 76.848444 97.2417) (xy 76.848451 97.2417) (xy 77.127942 97.204904) + (xy 77.400239 97.131942) (xy 77.660683 97.024063) (xy 77.904817 96.883112) (xy 78.128465 96.7115) + (xy 78.3278 96.512165) (xy 78.395492 96.423946) (xy 78.45192 96.382744) (xy 78.521666 96.378589) + (xy 78.582586 96.412801) (xy 78.615339 96.474518) (xy 78.609526 96.544146) (xy 78.601255 96.561433) + (xy 78.545183 96.658551) (xy 78.545175 96.658568) (xy 78.435097 96.924321) (xy 78.360646 97.202176) + (xy 78.323101 97.487361) (xy 78.3231 97.487377) (xy 78.3231 97.775022) (xy 78.323101 97.775038) + (xy 78.360646 98.060223) (xy 78.435097 98.338078) (xy 78.545175 98.603831) (xy 78.545183 98.603848) + (xy 78.689004 98.852951) (xy 78.689015 98.852967) (xy 78.864121 99.081171) (xy 78.864127 99.081178) + (xy 79.067521 99.284572) (xy 79.067528 99.284578) (xy 79.200807 99.386846) (xy 79.295741 99.459691) + (xy 79.295748 99.459695) (xy 79.544851 99.603516) (xy 79.544856 99.603518) (xy 79.544859 99.60352) + (xy 79.544863 99.603521) (xy 79.544868 99.603524) (xy 79.587477 99.621173) (xy 79.81062 99.713602) + (xy 80.088475 99.788053) (xy 80.373671 99.8256) (xy 80.373678 99.8256) (xy 80.661322 99.8256) (xy 80.661329 99.8256) + (xy 80.946525 99.788053) (xy 81.22438 99.713602) (xy 81.490141 99.60352) (xy 81.739259 99.459691) + (xy 81.967473 99.284577) (xy 82.170877 99.081173) (xy 82.345991 98.852959) (xy 82.48982 98.603841) + (xy 82.599902 98.33808) (xy 82.674353 98.060225) (xy 82.7119 97.775029) (xy 82.7119 97.54655) (xy 84.522 97.54655) + (xy 84.522 97.715849) (xy 84.548481 97.883047) (xy 84.600796 98.044053) (xy 84.677652 98.194888) + (xy 84.777148 98.331834) (xy 84.777152 98.331839) (xy 84.89686 98.451547) (xy 84.896865 98.451551) + (xy 84.973873 98.5075) (xy 85.033815 98.55105) (xy 85.127141 98.598602) (xy 85.184646 98.627903) + (xy 85.184648 98.627903) (xy 85.184651 98.627905) (xy 85.26885 98.655263) (xy 85.345652 98.680218) + (xy 85.512851 98.7067) (xy 85.512856 98.7067) (xy 85.682149 98.7067) (xy 85.849347 98.680218) (xy 86.010349 98.627905) + (xy 86.161185 98.55105) (xy 86.298141 98.451546) (xy 86.417846 98.331841) (xy 86.51735 98.194885) + (xy 86.594205 98.044049) (xy 86.646518 97.883047) (xy 86.656383 97.820763) (xy 86.673 97.715849) + (xy 86.673 97.54655) (xy 86.646518 97.379352) (xy 86.601796 97.241713) (xy 86.594205 97.218351) + (xy 86.594203 97.218348) (xy 86.594203 97.218346) (xy 86.550176 97.13194) (xy 86.51735 97.067515) + (xy 86.485781 97.024064) (xy 86.417851 96.930565) (xy 86.417847 96.93056) (xy 86.298139 96.810852) + (xy 86.298134 96.810848) (xy 86.161188 96.711352) (xy 86.161187 96.711351) (xy 86.161185 96.71135) + (xy 86.114082 96.68735) (xy 86.010353 96.634496) (xy 85.849347 96.582181) (xy 85.682149 96.5557) + (xy 85.682144 96.5557) (xy 85.512856 96.5557) (xy 85.512851 96.5557) (xy 85.345652 96.582181) (xy 85.184646 96.634496) + (xy 85.033811 96.711352) (xy 84.896865 96.810848) (xy 84.89686 96.810852) (xy 84.777152 96.93056) + (xy 84.777148 96.930565) (xy 84.677652 97.067511) (xy 84.600796 97.218346) (xy 84.548481 97.379352) + (xy 84.522 97.54655) (xy 82.7119 97.54655) (xy 82.7119 97.487371) (xy 82.674353 97.202175) (xy 82.599902 96.92432) + (xy 82.48982 96.658559) (xy 82.489818 96.658556) (xy 82.489816 96.658551) (xy 82.345995 96.409448) + (xy 82.345991 96.409441) (xy 82.242069 96.274007) (xy 82.170878 96.181228) (xy 82.170872 96.181221) + (xy 81.967478 95.977827) (xy 81.967471 95.977821) (xy 81.739267 95.802715) (xy 81.739265 95.802713) + (xy 81.739259 95.802709) (xy 81.739254 95.802706) (xy 81.739251 95.802704) (xy 81.490148 95.658883) + (xy 81.490131 95.658875) (xy 81.224378 95.548797) (xy 80.946523 95.474346) (xy 80.661338 95.436801) + (xy 80.661335 95.4368) (xy 80.661329 95.4368) (xy 80.373671 95.4368) (xy 80.373665 95.4368) (xy 80.373661 95.436801) + (xy 80.088476 95.474346) (xy 79.810621 95.548797) (xy 79.544868 95.658875) (xy 79.544851 95.658883) + (xy 79.295748 95.802704) (xy 79.295732 95.802715) (xy 79.067528 95.977821) (xy 79.067521 95.977827) + (xy 78.864127 96.181221) (xy 78.79293 96.274007) (xy 78.736501 96.315209) (xy 78.666755 96.319364) + (xy 78.605835 96.285151) (xy 78.573083 96.223434) (xy 78.578896 96.153807) (xy 78.587161 96.136531) + (xy 78.640363 96.044383) (xy 78.748242 95.783939) (xy 78.821204 95.511642) (xy 78.858 95.232151) + (xy 78.858 94.950249) (xy 78.821204 94.670758) (xy 78.748242 94.398461) (xy 78.741342 94.381804) + (xy 78.716349 94.321464) (xy 78.640363 94.138017) (xy 78.640361 94.138014) (xy 78.640359 94.138009) + (xy 78.499416 93.89389) (xy 78.499412 93.893883) (xy 78.3278 93.670235) (xy 78.327798 93.670233) + (xy 78.327795 93.670229) (xy 78.12847 93.470904) (xy 78.103921 93.452067) (xy 77.904817 93.299288) + (xy 77.904811 93.299284) (xy 77.904809 93.299283) (xy 77.66069 93.15834) (xy 77.660679 93.158335) + (xy 77.400243 93.050459) (xy 77.127939 92.977495) (xy 76.848458 92.9407) (xy 76.848451 92.9407) + (xy 76.566549 92.9407) (xy 76.566541 92.9407) (xy 76.28706 92.977495) (xy 76.014756 93.050459) (xy 75.75432 93.158335) + (xy 75.754309 93.15834) (xy 75.51019 93.299283) (xy 75.510184 93.299287) (xy 75.510183 93.299288) + (xy 75.448401 93.346695) (xy 75.286529 93.470904) (xy 75.087204 93.670229) (xy 74.963314 93.831685) + (xy 74.929927 93.875197) (xy 74.915589 93.893882) (xy 74.915583 93.89389) (xy 74.77464 94.138009) + (xy 74.774635 94.13802) (xy 74.666759 94.398456) (xy 74.593795 94.67076) (xy 74.557 94.950241) (xy 74.557 95.232158) + (xy 74.593795 95.511639) (xy 74.666759 95.783943) (xy 74.774635 96.044379) (xy 74.77464 96.04439) + (xy 74.915583 96.288509) (xy 74.915594 96.288525) (xy 75.046338 96.458914) (xy 75.071532 96.524083) + (xy 75.057494 96.592528) (xy 75.00868 96.642517) (xy 75.004258 96.644884) (xy 74.873813 96.71135) + (xy 74.736865 96.810848) (xy 74.73686 96.810852) (xy 74.617152 96.93056) (xy 74.617148 96.930565) + (xy 74.517652 97.067511) (xy 74.440796 97.218346) (xy 74.388481 97.379352) (xy 74.362 97.54655) + (xy 73.385 97.54655) (xy 73.385 95.946275) (xy 73.404685 95.879236) (xy 73.457489 95.833481) (xy 73.461499 95.831734) + (xy 73.536679 95.800594) (xy 73.667789 95.712989) (xy 73.779289 95.601489) (xy 73.866894 95.470379) + (xy 73.927237 95.324697) (xy 73.958 95.170042) (xy 73.958 95.012358) (xy 73.958 95.012355) (xy 73.957999 95.012353) + (xy 73.927238 94.85771) (xy 73.927237 94.857703) (xy 73.927235 94.857698) (xy 73.866897 94.712027) + (xy 73.86689 94.712014) (xy 73.779289 94.580911) (xy 73.779286 94.580907) (xy 73.667792 94.469413) + (xy 73.667788 94.46941) (xy 73.536685 94.381809) (xy 73.536675 94.381804) (xy 73.461547 94.350685) + (xy 73.407144 94.306844) (xy 73.385079 94.24055) (xy 73.385 94.236124) (xy 73.385 92.410241) (xy 80.907 92.410241) + (xy 80.907 92.692158) (xy 80.943795 92.971639) (xy 81.016759 93.243943) (xy 81.124635 93.504379) + (xy 81.12464 93.50439) (xy 81.265583 93.748509) (xy 81.265588 93.748517) (xy 81.4372 93.972165) + (xy 81.437204 93.97217) (xy 81.636529 94.171495) (xy 81.636533 94.171498) (xy 81.636535 94.1715) + (xy 81.860183 94.343112) (xy 81.86019 94.343116) (xy 82.104309 94.484059) (xy 82.104314 94.484061) + (xy 82.104317 94.484063) (xy 82.364761 94.591942) (xy 82.637058 94.664904) (xy 82.916549 94.7017) + (xy 82.916556 94.7017) (xy 83.198444 94.7017) (xy 83.198451 94.7017) (xy 83.477942 94.664904) (xy 83.750239 94.591942) + (xy 84.010683 94.484063) (xy 84.254817 94.343112) (xy 84.478465 94.1715) (xy 84.6778 93.972165) + (xy 84.849412 93.748517) (xy 84.990363 93.504383) (xy 85.098242 93.243939) (xy 85.171204 92.971642) + (xy 85.208 92.692151) (xy 85.208 92.410249) (xy 85.171204 92.130758) (xy 85.098242 91.858461) (xy 85.091342 91.841804) + (xy 85.066349 91.781464) (xy 84.990363 91.598017) (xy 84.990361 91.598014) (xy 84.990359 91.598009) + (xy 84.849416 91.35389) (xy 84.849412 91.353883) (xy 84.6778 91.130235) (xy 84.677798 91.130233) + (xy 84.677795 91.130229) (xy 84.47847 90.930904) (xy 84.478465 90.9309) (xy 84.254817 90.759288) + (xy 84.254811 90.759284) (xy 84.254809 90.759283) (xy 84.01069 90.61834) (xy 84.010679 90.618335) + (xy 83.750243 90.510459) (xy 83.477939 90.437495) (xy 83.198458 90.4007) (xy 83.198451 90.4007) + (xy 82.916549 90.4007) (xy 82.916541 90.4007) (xy 82.63706 90.437495) (xy 82.364756 90.510459) (xy 82.10432 90.618335) + (xy 82.104309 90.61834) (xy 81.86019 90.759283) (xy 81.860184 90.759287) (xy 81.860183 90.759288) + (xy 81.824557 90.786625) (xy 81.636529 90.930904) (xy 81.437204 91.130229) (xy 81.367704 91.220803) + (xy 81.276612 91.339517) (xy 81.265589 91.353882) (xy 81.265583 91.35389) (xy 81.12464 91.598009) + (xy 81.124635 91.59802) (xy 81.016759 91.858456) (xy 80.943795 92.13076) (xy 80.907 92.410241) (xy 73.385 92.410241) + (xy 73.385 91.214955) (xy 73.404685 91.147916) (xy 73.440108 91.111854) (xy 73.447989 91.106589) + (xy 73.559489 90.995089) (xy 73.647094 90.863979) (xy 73.707437 90.718297) (xy 73.7382 90.563642) + (xy 73.7382 90.405958) (xy 73.7382 90.405955) (xy 73.738199 90.405953) (xy 73.735565 90.392712) + (xy 73.707437 90.251303) (xy 73.707435 90.251298) (xy 73.647097 90.105627) (xy 73.64709 90.105614) + (xy 73.559489 89.974511) (xy 73.559486 89.974507) (xy 73.447992 89.863013) (xy 73.447988 89.86301) + (xy 73.316885 89.775409) (xy 73.316872 89.775402) (xy 73.171201 89.715064) (xy 73.171189 89.715061) + (xy 73.016545 89.6843) (xy 73.016542 89.6843) (xy 72.858858 89.6843) (xy 72.858855 89.6843) (xy 72.70421 89.715061) + (xy 72.704198 89.715064) (xy 72.558527 89.775402) (xy 72.558514 89.775409) (xy 72.427411 89.86301) + (xy 72.427407 89.863013) (xy 72.315913 89.974507) (xy 72.31591 89.974511) (xy 72.228309 90.105614) + (xy 72.228302 90.105627) (xy 72.167061 90.25348) (xy 72.12322 90.307884) (xy 72.056926 90.329949) + (xy 71.989227 90.31267) (xy 71.941616 90.261533) (xy 71.9285 90.206028) (xy 71.9285 90.046597) (xy 71.948185 89.979558) + (xy 71.964819 89.958915) (xy 71.970853 89.952882) (xy 74.24021 87.683553) (xy 84.2347 87.683553) + (xy 84.2347 87.841246) (xy 84.265461 87.995889) (xy 84.265464 87.995901) (xy 84.325802 88.141572) + (xy 84.325809 88.141585) (xy 84.41341 88.272688) (xy 84.413413 88.272692) (xy 84.524907 88.384186) + (xy 84.524911 88.384189) (xy 84.656014 88.47179) (xy 84.656027 88.471797) (xy 84.801698 88.532135) + (xy 84.801703 88.532137) (xy 84.956353 88.562899) (xy 84.956356 88.5629) (xy 84.956358 88.5629) + (xy 85.114044 88.5629) (xy 85.114045 88.562899) (xy 85.268697 88.532137) (xy 85.414379 88.471794) + (xy 85.545489 88.384189) (xy 85.656989 88.272689) (xy 85.744594 88.141579) (xy 85.804937 87.995897) + (xy 85.8357 87.841242) (xy 85.8357 87.683558) (xy 85.8357 87.683555) (xy 85.835699 87.683553) (xy 85.827009 87.639864) + (xy 85.804937 87.528903) (xy 85.769107 87.4424) (xy 85.744597 87.383227) (xy 85.74459 87.383214) + (xy 85.656989 87.252111) (xy 85.656986 87.252107) (xy 85.545492 87.140613) (xy 85.545488 87.14061) + (xy 85.414385 87.053009) (xy 85.414372 87.053002) (xy 85.268701 86.992664) (xy 85.268689 86.992661) + (xy 85.114045 86.9619) (xy 85.114042 86.9619) (xy 84.956358 86.9619) (xy 84.956355 86.9619) (xy 84.80171 86.992661) + (xy 84.801698 86.992664) (xy 84.656027 87.053002) (xy 84.656014 87.053009) (xy 84.524911 87.14061) + (xy 84.524907 87.140613) (xy 84.413413 87.252107) (xy 84.41341 87.252111) (xy 84.325809 87.383214) + (xy 84.325802 87.383227) (xy 84.265464 87.528898) (xy 84.265461 87.52891) (xy 84.2347 87.683553) + (xy 74.24021 87.683553) (xy 77.325219 84.598581) (xy 79.980815 81.943018) (xy 80.042139 81.909534) + (xy 80.068496 81.9067) (xy 96.630904 81.9067) (xy 96.697943 81.926385) (xy 96.743698 81.979189) + (xy 96.753642 82.048347) (xy 96.724617 82.111903) (xy 96.718585 82.118381) (xy 87.051262 91.785703) + (xy 86.989939 91.819188) (xy 86.920247 91.814204) (xy 86.916129 91.812583) (xy 86.841001 91.781464) + (xy 86.840989 91.781461) (xy 86.686345 91.7507) (xy 86.686342 91.7507) (xy 86.528658 91.7507) (xy 86.528655 91.7507) + (xy 86.37401 91.781461) (xy 86.373998 91.781464) (xy 86.228327 91.841802) (xy 86.228314 91.841809) + (xy 86.097211 91.92941) (xy 86.097207 91.929413) (xy 85.985713 92.040907) (xy 85.98571 92.040911) + (xy 85.898109 92.172014) (xy 85.898102 92.172027) (xy 85.837764 92.317698) (xy 85.837761 92.31771) + (xy 85.807 92.472353) (xy 85.807 92.630046) (xy 85.837761 92.784689) (xy 85.837764 92.784701) (xy 85.898102 92.930372) + (xy 85.898109 92.930385) (xy 85.98571 93.061488) (xy 85.985713 93.061492) (xy 86.097207 93.172986) + (xy 86.097211 93.172989) (xy 86.228314 93.26059) (xy 86.228327 93.260597) (xy 86.323999 93.300225) + (xy 86.374003 93.320937) (xy 86.528653 93.351699) (xy 86.528656 93.3517) (xy 86.528658 93.3517) + (xy 86.686344 93.3517) (xy 86.686345 93.351699) (xy 86.840997 93.320937) (xy 86.986679 93.260594) + (xy 87.117789 93.172989) (xy 87.229289 93.061489) (xy 87.316894 92.930379) (xy 87.341091 92.871963) + (xy 87.363039 92.818975) (xy 87.40688 92.764571) (xy 87.473174 92.742506) (xy 87.540873 92.759785) + (xy 87.588484 92.810922) (xy 87.6016 92.866427) (xy 87.6016 103.290253) (xy 87.621491 103.338274) + (xy 87.622341 103.340327) (xy 87.636232 103.373865) (xy 87.636234 103.373867) (xy 93.690794 109.4285) + (xy 93.732738 109.470444) (xy 93.766222 109.531768) (xy 93.761238 109.601459) (xy 93.719366 109.657393) + (xy 93.653901 109.681809) (xy 93.592015 109.66969) (xy 93.591933 109.66989) (xy 93.590946 109.669481) + (xy 93.590214 109.669338) (xy 93.588185 109.668337) (xy 93.327743 109.560459) (xy 93.055439 109.487495) + (xy 92.775958 109.4507) (xy 92.775951 109.4507) (xy 92.494049 109.4507) (xy 92.494041 109.4507) + (xy 92.21456 109.487495) (xy 91.942256 109.560459) (xy 91.68182 109.668335) (xy 91.681809 109.66834) + (xy 91.43769 109.809283) (xy 91.437684 109.809287) (xy 91.437683 109.809288) (xy 91.390169 109.845747) + (xy 91.214029 109.980904) (xy 91.014704 110.180229) (xy 90.901381 110.327914) (xy 90.854327 110.389237) + (xy 90.843089 110.403882) (xy 90.843083 110.40389) (xy 90.70214 110.648009) (xy 90.702135 110.64802) + (xy 90.594259 110.908456) (xy 90.521295 111.18076) (xy 90.4845 111.460241) (xy 90.4845 111.742158) + (xy 90.521295 112.021639) (xy 90.594259 112.293943) (xy 90.702135 112.554379) (xy 90.70214 112.55439) + (xy 90.843083 112.798509) (xy 90.843088 112.798517) (xy 90.961074 112.952278) (xy 91.014704 113.02217) + (xy 91.214029 113.221495) (xy 91.214033 113.221498) (xy 91.214035 113.2215) (xy 91.437683 113.393112) + (xy 91.43769 113.393116) (xy 91.681809 113.534059) (xy 91.681814 113.534061) (xy 91.681817 113.534063) + (xy 91.789834 113.578805) (xy 91.907486 113.627538) (xy 91.942261 113.641942) (xy 92.214558 113.714904) + (xy 92.494049 113.7517) (xy 92.494056 113.7517) (xy 92.775944 113.7517) (xy 92.775951 113.7517) + (xy 93.055442 113.714904) (xy 93.327739 113.641942) (xy 93.588183 113.534063) (xy 93.832317 113.393112) + (xy 94.055965 113.2215) (xy 94.2553 113.022165) (xy 94.426912 112.798517) (xy 94.567863 112.554383) + (xy 94.675742 112.293939) (xy 94.748704 112.021642) (xy 94.7855 111.742151) (xy 94.7855 111.460249) + (xy 94.748704 111.180758) (xy 94.675742 110.908461) (xy 94.668762 110.891609) (xy 94.567867 110.648026) + (xy 94.566879 110.646023) (xy 94.566763 110.645362) (xy 94.56631 110.644267) (xy 94.566555 110.644165) + (xy 94.554876 110.577192) (xy 94.581991 110.512798) (xy 94.639616 110.473287) (xy 94.709454 110.471201) + (xy 94.765768 110.503487) (xy 95.107137 110.84486) (xy 95.371127 111.108853) (xy 95.419506 111.157232) + (xy 95.45299 111.218556) (xy 95.448006 111.288247) (xy 95.446387 111.292362) (xy 95.415263 111.367503) + (xy 95.415262 111.367506) (xy 95.415262 111.367507) (xy 95.415261 111.36751) (xy 95.3845 111.522153) + (xy 95.3845 111.679846) (xy 95.415261 111.834489) (xy 95.415264 111.834501) (xy 95.475602 111.980172) + (xy 95.475609 111.980185) (xy 95.56321 112.111288) (xy 95.563213 112.111292) (xy 95.674707 112.222786) + (xy 95.674711 112.222789) (xy 95.805814 112.31039) (xy 95.805827 112.310397) (xy 95.951498 112.370735) + (xy 95.951503 112.370737) (xy 96.106153 112.401499) (xy 96.106156 112.4015) (xy 96.106158 112.4015) + (xy 96.263844 112.4015) (xy 96.263845 112.401499) (xy 96.418497 112.370737) (xy 96.564179 112.310394) + (xy 96.695289 112.222789) (xy 96.806789 112.111289) (xy 96.848417 112.048987) (xy 96.902028 112.004183) + (xy 96.971352 111.995474) (xy 97.03438 112.025628) (xy 97.039197 112.030194) (xy 97.517541 112.508504) + (xy 100.684178 115.674918) (xy 100.717665 115.736239) (xy 100.7205 115.762601) (xy 100.7205 129.795924) + (xy 100.700815 129.862963) (xy 100.648011 129.908718) (xy 100.643953 129.910485) (xy 100.568824 129.941604) + (xy 100.568814 129.941609) (xy 100.437711 130.02921) (xy 100.437707 130.029213) (xy 100.326213 130.140707) + (xy 100.32621 130.140711) (xy 100.238609 130.271814) (xy 100.238602 130.271827) (xy 100.178264 130.417498) + (xy 100.178261 130.41751) (xy 100.1475 130.572153) (xy 100.1475 130.729846) (xy 100.178261 130.884489) + (xy 100.178264 130.884501) (xy 100.238602 131.030172) (xy 100.238609 131.030185) (xy 100.32621 131.161288) + (xy 100.326213 131.161292) (xy 100.437707 131.272786) (xy 100.437711 131.272789) (xy 100.568814 131.36039) + (xy 100.568827 131.360397) (xy 100.710679 131.419153) (xy 100.714503 131.420737) (xy 100.869153 131.451499) + (xy 100.869156 131.4515) (xy 100.869158 131.4515) (xy 101.026844 131.4515) (xy 101.026845 131.451499) + (xy 101.181497 131.420737) (xy 101.327179 131.360394) (xy 101.458289 131.272789) (xy 101.569789 131.161289) + (xy 101.657394 131.030179) (xy 101.717737 130.884497) (xy 101.7485 130.729842) (xy 101.7485 130.572158) + (xy 101.7485 130.572155) (xy 101.748499 130.572153) (xy 101.738044 130.519595) (xy 101.717737 130.417503) + (xy 101.71671 130.415024) (xy 101.657397 130.271827) (xy 101.65739 130.271814) (xy 101.569789 130.140711) + (xy 101.569786 130.140707) (xy 101.458292 130.029213) (xy 101.458288 130.02921) (xy 101.327185 129.941609) + (xy 101.327175 129.941604) (xy 101.252047 129.910485) (xy 101.197644 129.866644) (xy 101.175579 129.80035) + (xy 101.1755 129.795924) (xy 101.1755 129.573595) (xy 101.195185 129.506556) (xy 101.247989 129.460801) + (xy 101.317147 129.450857) (xy 101.380703 129.479882) (xy 101.387181 129.485914) (xy 102.333181 130.431914) + (xy 102.366666 130.493237) (xy 102.3695 130.519595) (xy 102.3695 141.829347) (xy 102.369498 141.870238) + (xy 102.3695 141.870242) (xy 102.3695 141.870253) (xy 102.371513 141.875114) (xy 102.371514 141.875118) + (xy 102.386628 141.911602) (xy 102.38663 141.911615) (xy 102.386633 141.911615) (xy 102.391537 141.923458) + (xy 102.404127 141.953858) (xy 102.40413 141.953863) (xy 102.426123 141.975856) (xy 102.426127 141.975863) + (xy 102.426129 141.975862) (xy 108.019778 147.57022) (xy 108.053259 147.631545) (xy 108.04827 147.701236) + (xy 108.006395 147.757167) (xy 107.940929 147.78158) (xy 107.879567 147.769565) (xy 107.879433 147.76989) + (xy 107.877827 147.769224) (xy 107.877261 147.769114) (xy 107.875691 147.76834) (xy 107.615243 147.660459) + (xy 107.342939 147.587495) (xy 107.063458 147.5507) (xy 107.063451 147.5507) (xy 106.781549 147.5507) + (xy 106.781541 147.5507) (xy 106.50206 147.587495) (xy 106.229756 147.660459) (xy 105.96932 147.768335) + (xy 105.969309 147.76834) (xy 105.72519 147.909283) (xy 105.725182 147.909289) (xy 105.501529 148.080904) + (xy 105.302204 148.280229) (xy 105.130589 148.503882) (xy 105.130583 148.50389) (xy 104.98964 148.748009) + (xy 104.989635 148.74802) (xy 104.881759 149.008456) (xy 104.808795 149.28076) (xy 104.772 149.560241) + (xy 104.772 149.842158) (xy 104.808795 150.121639) (xy 104.881759 150.393943) (xy 104.989635 150.654379) + (xy 104.98964 150.65439) (xy 105.130583 150.898509) (xy 105.130588 150.898517) (xy 105.292887 151.110028) + (xy 105.302204 151.12217) (xy 105.501529 151.321495) (xy 105.501533 151.321498) (xy 105.501535 151.3215) + (xy 105.725183 151.493112) (xy 105.72519 151.493116) (xy 105.969309 151.634059) (xy 105.969314 151.634061) + (xy 105.969317 151.634063) (xy 106.229761 151.741942) (xy 106.502058 151.814904) (xy 106.781549 151.8517) + (xy 106.781556 151.8517) (xy 107.063444 151.8517) (xy 107.063451 151.8517) (xy 107.342942 151.814904) + (xy 107.615239 151.741942) (xy 107.875683 151.634063) (xy 108.119817 151.493112) (xy 108.343465 151.3215) + (xy 108.5428 151.122165) (xy 108.714412 150.898517) (xy 108.846509 150.669717) (xy 108.855359 150.65439) + (xy 108.855359 150.654389) (xy 108.855363 150.654383) (xy 108.963242 150.393939) (xy 109.036204 150.121642) + (xy 109.073 149.842151) (xy 109.073 149.560249) (xy 109.072457 149.556128) (xy 109.06079 149.467503) + (xy 109.036204 149.280758) (xy 108.963242 149.008461) (xy 108.956262 148.991609) (xy 108.855366 148.748024) + (xy 108.854722 148.746718) (xy 108.854646 148.746287) (xy 108.85381 148.744267) (xy 108.854262 148.744079) + (xy 108.842722 148.677887) (xy 108.869839 148.613494) (xy 108.927465 148.573984) (xy 108.997303 148.571901) + (xy 109.053618 148.604191) (xy 109.195332 148.745923) (xy 109.700778 149.251433) (xy 109.706532 149.257187) + (xy 109.740013 149.318513) (xy 109.735024 149.388204) (xy 109.733406 149.392315) (xy 109.702264 149.467498) + (xy 109.702261 149.46751) (xy 109.6715 149.622153) (xy 109.6715 149.779846) (xy 109.702261 149.934489) + (xy 109.702264 149.934501) (xy 109.762602 150.080172) (xy 109.762609 150.080185) (xy 109.85021 150.211288) + (xy 109.850213 150.211292) (xy 109.961707 150.322786) (xy 109.961711 150.322789) (xy 110.092814 150.41039) + (xy 110.092827 150.410397) (xy 110.238498 150.470735) (xy 110.238503 150.470737) (xy 110.393153 150.501499) + (xy 110.393156 150.5015) (xy 110.393158 150.5015) (xy 110.550844 150.5015) (xy 110.550845 150.501499) + (xy 110.705497 150.470737) (xy 110.851179 150.410394) (xy 110.982289 150.322789) (xy 111.025124 150.279954) + (xy 111.086819 150.21826) (xy 111.148142 150.184775) (xy 111.217834 150.189759) (xy 111.273767 150.231631) + (xy 111.298184 150.297095) (xy 111.2985 150.305941) (xy 111.2985 159.398405) (xy 111.278815 159.465444) + (xy 111.262181 159.486086) (xy 102.261086 168.487181) (xy 102.199763 168.520666) (xy 102.173405 168.5235) + (xy 93.888875 168.5235) (xy 93.821836 168.503815) (xy 93.776081 168.451011) (xy 93.774334 168.447) + (xy 93.743194 168.371821) (xy 93.743192 168.371818) (xy 93.74319 168.371814) (xy 93.655589 168.240711) + (xy 93.655586 168.240707) (xy 93.544092 168.129213) (xy 93.544088 168.12921) (xy 93.412985 168.041609) + (xy 93.412972 168.041602) (xy 93.267301 167.981264) (xy 93.267289 167.981261) (xy 93.112645 167.9505) + (xy 93.112642 167.9505) (xy 92.954958 167.9505) (xy 92.954955 167.9505) (xy 92.80031 167.981261) + (xy 92.800298 167.981264) (xy 92.654627 168.041602) (xy 92.654611 168.041611) (xy 92.619921 168.06479) + (xy 92.553244 168.085667) (xy 92.485864 168.067182) (xy 92.439174 168.015202) (xy 92.436478 168.009156) + (xy 92.324398 167.738569) (xy 92.321488 167.731543) (xy 92.321481 167.731528) (xy 92.1707 167.470368) + (xy 91.98712 167.231121) (xy 91.987114 167.231114) (xy 91.773885 167.017885) (xy 91.773878 167.017879) + (xy 91.534631 166.834299) (xy 91.273471 166.683518) (xy 91.273461 166.683514) (xy 90.99486 166.568113) + (xy 90.703566 166.490061) (xy 90.404593 166.450701) (xy 90.404588 166.4507) (xy 90.404583 166.4507) + (xy 90.103017 166.4507) (xy 90.103011 166.4507) (xy 90.103006 166.450701) (xy 89.804033 166.490061) + (xy 89.512739 166.568113) (xy 89.234138 166.683514) (xy 89.234128 166.683518) (xy 88.972968 166.834299) + (xy 88.733721 167.017879) (xy 88.733714 167.017885) (xy 88.520485 167.231114) (xy 88.520479 167.231121) + (xy 88.336899 167.470368) (xy 88.186118 167.731528) (xy 88.186114 167.731538) (xy 88.070713 168.010139) + (xy 87.992661 168.301433) (xy 87.953301 168.600406) (xy 87.9533 168.600423) (xy 87.9533 168.901976) + (xy 87.953301 168.901993) (xy 87.992661 169.200961) (xy 87.992661 169.200964) (xy 88.070713 169.49226) + (xy 88.186114 169.770861) (xy 88.186118 169.770871) (xy 88.336899 170.032031) (xy 88.520479 170.271278) + (xy 88.520485 170.271285) (xy 88.733714 170.484514) (xy 88.733721 170.48452) (xy 88.972968 170.6681) + (xy 89.234128 170.818881) (xy 89.234129 170.818881) (xy 89.234132 170.818883) (xy 89.385503 170.881583) + (xy 89.512739 170.934286) (xy 89.51274 170.934286) (xy 89.512742 170.934287) (xy 89.804032 171.012338) + (xy 90.103017 171.0517) (xy 90.103024 171.0517) (xy 90.404576 171.0517) (xy 90.404583 171.0517) + (xy 90.703568 171.012338) (xy 90.994858 170.934287) (xy 91.273468 170.818883) (xy 91.534632 170.6681) + (xy 91.77388 170.484519) (xy 91.987119 170.27128) (xy 92.1707 170.032032) (xy 92.321483 169.770868) + (xy 92.436602 169.492945) (xy 92.480443 169.438543) (xy 92.546737 169.416478) (xy 92.614436 169.433757) + (xy 92.620055 169.437298) (xy 92.654612 169.460389) (xy 92.654627 169.460397) (xy 92.757863 169.503158) + (xy 92.800303 169.520737) (xy 92.954953 169.551499) (xy 92.954956 169.5515) (xy 92.954958 169.5515) + (xy 93.112644 169.5515) (xy 93.112645 169.551499) (xy 93.267297 169.520737) (xy 93.412979 169.460394) + (xy 93.544089 169.372789) (xy 93.655589 169.261289) (xy 93.743194 169.130179) (xy 93.774315 169.055045) + (xy 93.818154 169.000644) (xy 93.884448 168.978579) (xy 93.888875 168.9785) (xy 102.364252 168.9785) + (xy 102.364253 168.9785) (xy 102.447868 168.943865) (xy 111.718865 159.672868) (xy 111.734996 159.633924) + (xy 111.7535 159.589253) (xy 111.7535 149.681963) (xy 111.753502 149.645761) (xy 111.7535 149.645756) + (xy 111.7535 149.645747) (xy 111.751013 149.639742) (xy 111.735337 149.601897) (xy 111.735334 149.60189) + (xy 111.719043 149.562553) (xy 111.71888 149.562154) (xy 111.718867 149.562134) (xy 111.693053 149.53632) + (xy 103.188814 141.031092) (xy 103.155332 140.969767) (xy 103.1525 140.943416) (xy 103.1525 130.417269) + (xy 103.172185 130.35023) (xy 103.224989 130.304475) (xy 103.294147 130.294531) (xy 103.357703 130.323556) + (xy 103.364166 130.329573) (xy 105.78241 132.747278) (xy 105.782454 132.747322) (xy 105.815946 132.808641) + (xy 105.81097 132.878334) (xy 105.809344 132.882465) (xy 105.778264 132.957498) (xy 105.778261 132.95751) + (xy 105.7475 133.112153) (xy 105.7475 133.269846) (xy 105.778261 133.424489) (xy 105.778264 133.424501) + (xy 105.838602 133.570172) (xy 105.838609 133.570185) (xy 105.92621 133.701288) (xy 105.926213 133.701292) + (xy 106.037707 133.812786) (xy 106.037711 133.812789) (xy 106.168814 133.90039) (xy 106.168818 133.900392) + (xy 106.168821 133.900394) (xy 106.243954 133.931515) (xy 106.298356 133.975354) (xy 106.320421 134.041648) + (xy 106.3205 134.046075) (xy 106.3205 142.716941) (xy 106.320498 142.761241) (xy 106.3205 142.761245) + (xy 106.3205 142.761253) (xy 106.322556 142.766218) (xy 106.322557 142.766219) (xy 106.337706 142.802791) + (xy 106.337707 142.802799) (xy 106.33771 142.802799) (xy 106.33771 142.8028) (xy 106.355128 142.844858) + (xy 106.355129 142.844859) (xy 106.35513 142.844861) (xy 106.355133 142.844866) (xy 106.383687 142.87342) + (xy 106.38369 142.873426) (xy 106.383692 142.873425) (xy 115.306526 151.797196) (xy 115.340008 151.858521) + (xy 115.335019 151.928213) (xy 115.333402 151.932324) (xy 115.302263 152.007503) (xy 115.302261 152.00751) + (xy 115.2715 152.162153) (xy 115.2715 152.319846) (xy 115.302261 152.474489) (xy 115.302264 152.474501) + (xy 115.362602 152.620172) (xy 115.362609 152.620185) (xy 115.45021 152.751288) (xy 115.450213 152.751292) + (xy 115.561707 152.862786) (xy 115.561711 152.862789) (xy 115.692814 152.95039) (xy 115.692818 152.950392) + (xy 115.692821 152.950394) (xy 115.767954 152.981515) (xy 115.822356 153.025354) (xy 115.844421 153.091648) + (xy 115.8445 153.096075) (xy 115.8445 160.014404) (xy 115.824815 160.081443) (xy 115.808181 160.102085) + (xy 106.68432 169.225945) (xy 106.658639 169.245651) (xy 106.435475 169.374495) (xy 106.435459 169.374506) + (xy 106.196221 169.558079) (xy 106.196214 169.558085) (xy 105.982985 169.771314) (xy 105.982979 169.771321) + (xy 105.799406 170.010559) (xy 105.799395 170.010575) (xy 105.670551 170.233739) (xy 105.650845 170.25942) + (xy 105.384762 170.525503) (xy 105.323439 170.558988) (xy 105.253747 170.554004) (xy 105.249629 170.552383) + (xy 105.174501 170.521264) (xy 105.174489 170.521261) (xy 105.019845 170.4905) (xy 105.019842 170.4905) + (xy 104.862158 170.4905) (xy 104.862155 170.4905) (xy 104.70751 170.521261) (xy 104.707498 170.521264) + (xy 104.561827 170.581602) (xy 104.561814 170.581609) (xy 104.430711 170.66921) (xy 104.430707 170.669213) + (xy 104.319213 170.780707) (xy 104.31921 170.780711) (xy 104.231609 170.911814) (xy 104.231602 170.911827) + (xy 104.171264 171.057498) (xy 104.171261 171.05751) (xy 104.1405 171.212153) (xy 104.1405 171.369846) + (xy 104.171261 171.524489) (xy 104.171264 171.524501) (xy 104.231602 171.670172) (xy 104.231609 171.670185) + (xy 104.31921 171.801288) (xy 104.319213 171.801292) (xy 104.430707 171.912786) (xy 104.430711 171.912789) + (xy 104.561814 172.00039) (xy 104.561827 172.000397) (xy 104.678206 172.048602) (xy 104.707503 172.060737) + (xy 104.837434 172.086582) (xy 104.862153 172.091499) (xy 104.862156 172.0915) (xy 104.862158 172.0915) + (xy 105.019844 172.0915) (xy 105.019845 172.091499) (xy 105.174497 172.060737) (xy 105.320179 172.000394) + (xy 105.350999 171.979801) (xy 105.417676 171.958922) (xy 105.485056 171.977406) (xy 105.531747 172.029384) + (xy 105.53445 172.035446) (xy 105.546026 172.063391) (xy 105.648614 172.311061) (xy 105.648618 172.311071) + (xy 105.799399 172.572231) (xy 105.919272 172.728454) (xy 105.944466 172.793623) (xy 105.930427 172.862068) + (xy 105.885691 172.909664) (xy 105.882615 172.911548) (xy 105.745665 173.011048) (xy 105.74566 173.011052) + (xy 105.625952 173.13076) (xy 105.625948 173.130765) (xy 105.526452 173.267711) (xy 105.449596 173.418546) + (xy 105.397281 173.579552) (xy 105.3708 173.74675) (xy 105.3708 173.916049) (xy 105.397281 174.083247) + (xy 105.449596 174.244253) (xy 105.458444 174.261617) (xy 105.526348 174.394885) (xy 105.526452 174.395088) + (xy 105.625948 174.532034) (xy 105.625952 174.532039) (xy 105.74566 174.651747) (xy 105.745665 174.651751) + (xy 105.83169 174.714251) (xy 105.882615 174.75125) (xy 105.978725 174.80022) (xy 106.033446 174.828103) + (xy 106.033448 174.828103) (xy 106.033451 174.828105) (xy 106.11975 174.856145) (xy 106.194452 174.880418) + (xy 106.361651 174.9069) (xy 106.361656 174.9069) (xy 106.530949 174.9069) (xy 106.698147 174.880418) + (xy 106.732512 174.869252) (xy 106.859149 174.828105) (xy 106.859546 174.827903) (xy 106.887328 174.813747) + (xy 107.009985 174.75125) (xy 107.146941 174.651746) (xy 107.266646 174.532041) (xy 107.36615 174.395085) + (xy 107.443005 174.244249) (xy 107.495318 174.083247) (xy 107.496681 174.074644) (xy 107.5218 173.916049) + (xy 107.5218 173.74675) (xy 107.519986 173.735298) (xy 107.52894 173.666005) (xy 107.573936 173.612553) + (xy 107.640688 173.591913) (xy 107.642459 173.5919) (xy 107.867076 173.5919) (xy 107.867083 173.5919) + (xy 108.166068 173.552538) (xy 108.457358 173.474487) (xy 108.735968 173.359083) (xy 108.997132 173.2083) + (xy 109.233516 173.026916) (xy 109.298684 173.001723) (xy 109.367129 173.015761) (xy 109.417118 173.064575) + (xy 109.432782 173.132667) (xy 109.428775 173.157386) (xy 109.363506 173.40098) (xy 109.363452 173.40118) + (xy 109.363449 173.401193) (xy 109.325801 173.687161) (xy 109.3258 173.687178) (xy 109.3258 173.975621) + (xy 109.325801 173.975638) (xy 109.363449 174.261606) (xy 109.36345 174.261611) (xy 109.363451 174.261617) + (xy 109.438109 174.540244) (xy 109.438114 174.54026) (xy 109.548491 174.806736) (xy 109.548499 174.806752) + (xy 109.69272 175.056548) (xy 109.692731 175.056564) (xy 109.868324 175.285402) (xy 109.86833 175.285409) + (xy 110.07229 175.489369) (xy 110.072296 175.489374) (xy 110.301144 175.664975) (xy 110.301151 175.664979) + (xy 110.550947 175.8092) (xy 110.550963 175.809208) (xy 110.817439 175.919585) (xy 110.817445 175.919586) + (xy 110.817455 175.919591) (xy 111.096083 175.994249) (xy 111.382072 176.0319) (xy 111.382079 176.0319) + (xy 111.670521 176.0319) (xy 111.670528 176.0319) (xy 111.956517 175.994249) (xy 112.235145 175.919591) + (xy 112.235157 175.919585) (xy 112.23516 175.919585) (xy 112.501636 175.809208) (xy 112.501639 175.809206) + (xy 112.501645 175.809204) (xy 112.501985 175.809008) (xy 112.643215 175.727468) (xy 112.751456 175.664975) + (xy 112.980304 175.489374) (xy 113.184274 175.285404) (xy 113.359875 175.056556) (xy 113.504104 174.806745) + (xy 113.527174 174.75105) (xy 113.614485 174.54026) (xy 113.614485 174.540257) (xy 113.614491 174.540245) + (xy 113.689149 174.261617) (xy 113.7268 173.975628) (xy 113.7268 173.74675) (xy 115.5308 173.74675) + (xy 115.5308 173.916049) (xy 115.557281 174.083247) (xy 115.609596 174.244253) (xy 115.618444 174.261617) + (xy 115.686348 174.394885) (xy 115.686452 174.395088) (xy 115.785948 174.532034) (xy 115.785952 174.532039) + (xy 115.90566 174.651747) (xy 115.905665 174.651751) (xy 115.99169 174.714251) (xy 116.042615 174.75125) + (xy 116.138725 174.80022) (xy 116.193446 174.828103) (xy 116.193448 174.828103) (xy 116.193451 174.828105) + (xy 116.27975 174.856145) (xy 116.354452 174.880418) (xy 116.521651 174.9069) (xy 116.521656 174.9069) + (xy 116.690949 174.9069) (xy 116.858147 174.880418) (xy 116.892512 174.869252) (xy 117.019149 174.828105) + (xy 117.019546 174.827903) (xy 117.047328 174.813747) (xy 117.169985 174.75125) (xy 117.306941 174.651746) + (xy 117.426646 174.532041) (xy 117.52615 174.395085) (xy 117.603005 174.244249) (xy 117.655318 174.083247) + (xy 117.656681 174.074644) (xy 117.6818 173.916049) (xy 117.6818 173.74675) (xy 117.655318 173.579552) + (xy 117.631045 173.50485) (xy 117.603005 173.418551) (xy 117.603003 173.418548) (xy 117.603003 173.418546) + (xy 117.572604 173.358885) (xy 117.52615 173.267715) (xy 117.482983 173.2083) (xy 117.426651 173.130765) + (xy 117.426647 173.13076) (xy 117.306939 173.011052) (xy 117.306934 173.011048) (xy 117.169988 172.911552) + (xy 117.169987 172.911551) (xy 117.169985 172.91155) (xy 117.09625 172.87398) (xy 117.019153 172.834696) + (xy 116.858147 172.782381) (xy 116.690949 172.7559) (xy 116.690944 172.7559) (xy 116.521656 172.7559) + (xy 116.521651 172.7559) (xy 116.354452 172.782381) (xy 116.193446 172.834696) (xy 116.042611 172.911552) + (xy 115.905665 173.011048) (xy 115.90566 173.011052) (xy 115.785952 173.13076) (xy 115.785948 173.130765) + (xy 115.686452 173.267711) (xy 115.609596 173.418546) (xy 115.557281 173.579552) (xy 115.5308 173.74675) + (xy 113.7268 173.74675) (xy 113.7268 173.687172) (xy 113.689149 173.401183) (xy 113.614491 173.122555) + (xy 113.614486 173.122545) (xy 113.614485 173.122539) (xy 113.504108 172.856063) (xy 113.5041 172.856047) + (xy 113.359879 172.606251) (xy 113.359875 172.606244) (xy 113.29321 172.519364) (xy 113.184275 172.377397) + (xy 113.184269 172.37739) (xy 112.980309 172.17343) (xy 112.980302 172.173424) (xy 112.751464 171.997831) + (xy 112.751462 171.997829) (xy 112.751456 171.997825) (xy 112.751451 171.997822) (xy 112.751448 171.99782) + (xy 112.501652 171.853599) (xy 112.501636 171.853591) (xy 112.23516 171.743214) (xy 112.235148 171.74321) + (xy 112.235145 171.743209) (xy 111.956517 171.668551) (xy 111.956511 171.66855) (xy 111.956506 171.668549) + (xy 111.670538 171.630901) (xy 111.670533 171.6309) (xy 111.670528 171.6309) (xy 111.382072 171.6309) + (xy 111.382066 171.6309) (xy 111.382061 171.630901) (xy 111.096093 171.668549) (xy 111.096086 171.66855) + (xy 111.096083 171.668551) (xy 110.93528 171.711638) (xy 110.817455 171.743209) (xy 110.817439 171.743214) + (xy 110.550963 171.853591) (xy 110.550947 171.853599) (xy 110.301151 171.99782) (xy 110.301134 171.997831) + (xy 110.096891 172.154552) (xy 110.031722 172.179746) (xy 109.963277 172.165707) (xy 109.913287 172.116893) + (xy 109.897624 172.048802) (xy 109.901627 172.024094) (xy 109.977438 171.741168) (xy 110.0168 171.442183) + (xy 110.0168 171.140617) (xy 109.977438 170.841632) (xy 109.899387 170.550342) (xy 109.898714 170.548718) + (xy 109.853827 170.44035) (xy 109.783983 170.271732) (xy 109.783865 170.271528) (xy 109.6332 170.010568) + (xy 109.44962 169.771321) (xy 109.449614 169.771314) (xy 109.236385 169.558085) (xy 109.236378 169.558079) + (xy 108.997131 169.374499) (xy 108.735971 169.223718) (xy 108.735961 169.223714) (xy 108.45736 169.108313) + (xy 108.166066 169.030261) (xy 107.867093 168.990901) (xy 107.867088 168.9909) (xy 107.867083 168.9909) + (xy 107.862194 168.9909) (xy 107.795155 168.971215) (xy 107.7494 168.918411) (xy 107.739456 168.849253) + (xy 107.768481 168.785697) (xy 107.774513 168.779219) (xy 115.712228 160.841506) (xy 121.194965 160.841506) + (xy 121.205149 160.945747) (xy 121.212721 161.023242) (xy 121.224381 161.06388) (xy 121.26308 161.198761) + (xy 121.34438 161.362263) (xy 121.344381 161.362265) (xy 121.344383 161.362268) (xy 121.399367 161.435585) + (xy 121.453938 161.508352) (xy 121.453939 161.508353) (xy 121.45394 161.508354) (xy 121.588132 161.632195) + (xy 121.742525 161.729697) (xy 121.877677 161.783874) (xy 121.912014 161.797639) (xy 121.912015 161.797639) + (xy 121.912017 161.79764) (xy 122.091008 161.833779) (xy 122.091002 161.833779) (xy 122.107322 161.834059) + (xy 122.273584 161.83692) (xy 122.453712 161.806958) (xy 122.550068 161.772128) (xy 122.625436 161.744885) + (xy 122.625437 161.744883) (xy 122.62544 161.744883) (xy 122.640475 161.73612) (xy 122.647159 161.732235) + (xy 122.64745 161.732157) (xy 122.675333 161.71586) (xy 122.675451 161.715792) (xy 122.678668 161.715001) + (xy 122.737762 161.698999) (xy 124.218892 161.698999) (xy 124.219014 161.699006) (xy 124.227105 161.699005) + (xy 124.227108 161.699006) (xy 124.259242 161.699002) (xy 124.321804 161.715934) (xy 124.34963 161.732191) + (xy 124.349632 161.732191) (xy 124.35578 161.735783) (xy 124.357435 161.736608) (xy 124.371578 161.74485) + (xy 124.5433 161.806921) (xy 124.723421 161.836882) (xy 124.903098 161.83379) (xy 124.905991 161.833741) + (xy 125.084966 161.797605) (xy 125.084969 161.797603) (xy 125.084974 161.797603) (xy 125.25446 161.729662) + (xy 125.408846 161.632163) (xy 125.424033 161.618148) (xy 125.54303 161.50833) (xy 125.543032 161.508328) + (xy 125.543033 161.508327) (xy 125.652585 161.362247) (xy 125.733884 161.198748) (xy 125.784242 161.023233) + (xy 125.801997 160.841503) (xy 125.78656 160.65956) (xy 125.786558 160.659554) (xy 125.773871 160.613109) + (xy 125.738443 160.483418) (xy 125.730683 160.467249) (xy 125.727596 160.460804) (xy 125.727548 160.460546) + (xy 125.711171 160.426519) (xy 125.711043 160.42573) (xy 125.699002 160.372931) (xy 125.699002 160.372689) + (xy 125.699007 160.335508) (xy 125.699006 160.335504) (xy 125.699007 160.327498) (xy 125.698999 160.32736) + (xy 125.698999 159.024077) (xy 125.701654 159.012408) (xy 125.70062 159.004094) (xy 125.711205 158.970428) + (xy 125.717511 158.95729) (xy 125.727574 158.936374) (xy 125.727574 158.936369) (xy 125.73096 158.929333) + (xy 125.731125 158.928922) (xy 125.731246 158.92867) (xy 125.738483 158.913591) (xy 125.7866 158.737442) + (xy 125.802037 158.555493) (xy 125.784281 158.373755) (xy 125.73392 158.198234) (xy 125.652618 158.03473) + (xy 125.549153 157.896767) (xy 125.543062 157.888645) (xy 125.541139 157.88687) (xy 125.408869 157.764804) + (xy 125.408866 157.764802) (xy 125.408865 157.764801) (xy 125.408862 157.764799) (xy 125.254477 157.667301) + (xy 125.084987 157.599358) (xy 125.084977 157.599356) (xy 124.905992 157.563218) (xy 124.905999 157.563218) + (xy 124.734294 157.560265) (xy 124.723418 157.560078) (xy 124.723417 157.560078) (xy 124.723414 157.560078) + (xy 124.543297 157.590038) (xy 124.543284 157.590041) (xy 124.371563 157.652113) (xy 124.357048 157.66057) + (xy 124.356963 157.660619) (xy 124.349876 157.66474) (xy 124.34963 157.664808) (xy 124.321838 157.681044) + (xy 124.32159 157.681189) (xy 124.318863 157.681859) (xy 124.259246 157.697996) (xy 124.218901 157.697993) + (xy 124.218797 157.698) (xy 122.778096 157.698) (xy 122.769914 157.697998) (xy 122.769892 157.697993) + (xy 122.739965 157.697995) (xy 122.737728 157.697995) (xy 122.737446 157.697912) (xy 122.675193 157.681062) + (xy 122.647371 157.664808) (xy 122.641305 157.661264) (xy 122.639607 157.660417) (xy 122.632257 157.656134) + (xy 122.625421 157.65215) (xy 122.453697 157.590078) (xy 122.453691 157.590077) (xy 122.273581 157.560119) + (xy 122.273578 157.560119) (xy 122.265039 157.560265) (xy 122.091007 157.563259) (xy 121.912034 157.599394) + (xy 121.912023 157.599397) (xy 121.742542 157.667337) (xy 121.742541 157.667337) (xy 121.588161 157.764832) + (xy 121.588158 157.764834) (xy 121.453967 157.888673) (xy 121.344415 158.034754) (xy 121.26312 158.198244) + (xy 121.263119 158.198247) (xy 121.263118 158.19825) (xy 121.255382 158.225213) (xy 121.212758 158.373765) + (xy 121.195916 158.546155) (xy 121.195004 158.555493) (xy 121.19688 158.577602) (xy 121.208517 158.714778) + (xy 121.21044 158.737435) (xy 121.238707 158.840914) (xy 121.258556 158.913578) (xy 121.25856 158.913588) + (xy 121.265798 158.92867) (xy 121.26584 158.928756) (xy 121.269423 158.936238) (xy 121.269481 158.93654) + (xy 121.285797 158.970425) (xy 121.285836 158.970506) (xy 121.285981 158.9714) (xy 121.298001 159.024069) + (xy 121.298001 160.372922) (xy 121.285807 160.426545) (xy 121.285219 160.427771) (xy 121.285139 160.427938) + (xy 121.266266 160.467137) (xy 121.265942 160.467939) (xy 121.258518 160.48341) (xy 121.210401 160.659554) + (xy 121.210401 160.659556) (xy 121.194965 160.841506) (xy 115.712228 160.841506) (xy 115.804766 160.748968) + (xy 116.264863 160.28887) (xy 116.264863 160.288869) (xy 116.264865 160.288868) (xy 116.26827 160.280648) + (xy 116.2995 160.205253) (xy 116.2995 154.69655) (xy 117.277 154.69655) (xy 117.277 154.865849) + (xy 117.303481 155.033047) (xy 117.355796 155.194053) (xy 117.432652 155.344888) (xy 117.532148 155.481834) + (xy 117.532152 155.481839) (xy 117.65186 155.601547) (xy 117.651865 155.601551) (xy 117.771317 155.688337) + (xy 117.788815 155.70105) (xy 117.87409 155.7445) (xy 117.939646 155.777903) (xy 117.939648 155.777903) + (xy 117.939651 155.777905) (xy 118.02595 155.805945) (xy 118.100652 155.830218) (xy 118.267851 155.8567) + (xy 118.267856 155.8567) (xy 118.437149 155.8567) (xy 118.604347 155.830218) (xy 118.647277 155.816269) + (xy 118.765349 155.777905) (xy 118.916185 155.70105) (xy 119.053141 155.601546) (xy 119.172846 155.481841) + (xy 119.27235 155.344885) (xy 119.349205 155.194049) (xy 119.401518 155.033047) (xy 119.428 154.865849) + (xy 119.428 154.69655) (xy 119.402428 154.535098) (xy 119.411382 154.465805) (xy 119.456379 154.412353) + (xy 119.52313 154.391713) (xy 119.524901 154.3917) (xy 119.763444 154.3917) (xy 119.763451 154.3917) + (xy 120.042942 154.354904) (xy 120.315239 154.281942) (xy 120.575683 154.174063) (xy 120.819817 154.033112) + (xy 121.043465 153.8615) (xy 121.2428 153.662165) (xy 121.310492 153.573946) (xy 121.36692 153.532744) + (xy 121.436666 153.528589) (xy 121.497586 153.562801) (xy 121.530339 153.624518) (xy 121.524526 153.694146) + (xy 121.516255 153.711433) (xy 121.460183 153.808551) (xy 121.460175 153.808568) (xy 121.350097 154.074321) + (xy 121.275646 154.352176) (xy 121.238101 154.637361) (xy 121.2381 154.637377) (xy 121.2381 154.925022) + (xy 121.238101 154.925038) (xy 121.275646 155.210223) (xy 121.350097 155.488078) (xy 121.460175 155.753831) + (xy 121.460183 155.753848) (xy 121.604004 156.002951) (xy 121.604015 156.002967) (xy 121.779121 156.231171) + (xy 121.779127 156.231178) (xy 121.982521 156.434572) (xy 121.982527 156.434577) (xy 122.210741 156.609691) + (xy 122.210748 156.609695) (xy 122.459851 156.753516) (xy 122.459856 156.753518) (xy 122.459859 156.75352) + (xy 122.459863 156.753521) (xy 122.459868 156.753524) (xy 122.473108 156.759008) (xy 122.72562 156.863602) + (xy 123.003475 156.938053) (xy 123.288671 156.9756) (xy 123.288678 156.9756) (xy 123.576322 156.9756) + (xy 123.576329 156.9756) (xy 123.861525 156.938053) (xy 124.13938 156.863602) (xy 124.405141 156.75352) + (xy 124.654259 156.609691) (xy 124.882473 156.434577) (xy 125.085877 156.231173) (xy 125.260991 156.002959) + (xy 125.40482 155.753841) (xy 125.514902 155.48808) (xy 125.589353 155.210225) (xy 125.6269 154.925029) + (xy 125.6269 154.637371) (xy 125.589353 154.352175) (xy 125.514902 154.07432) (xy 125.40482 153.808559) + (xy 125.404818 153.808556) (xy 125.404816 153.808551) (xy 125.260995 153.559448) (xy 125.260991 153.559441) + (xy 125.157069 153.424007) (xy 125.085878 153.331228) (xy 125.085872 153.331221) (xy 124.882478 153.127827) + (xy 124.882471 153.127821) (xy 124.654267 152.952715) (xy 124.654265 152.952713) (xy 124.654259 152.952709) + (xy 124.654254 152.952706) (xy 124.654251 152.952704) (xy 124.405148 152.808883) (xy 124.405131 152.808875) + (xy 124.139378 152.698797) (xy 123.861523 152.624346) (xy 123.576338 152.586801) (xy 123.576335 152.5868) + (xy 123.576329 152.5868) (xy 123.288671 152.5868) (xy 123.288665 152.5868) (xy 123.288661 152.586801) + (xy 123.003476 152.624346) (xy 122.725621 152.698797) (xy 122.459868 152.808875) (xy 122.459851 152.808883) + (xy 122.210748 152.952704) (xy 122.210732 152.952715) (xy 121.982528 153.127821) (xy 121.982521 153.127827) + (xy 121.779127 153.331221) (xy 121.70793 153.424007) (xy 121.651501 153.465209) (xy 121.581755 153.469364) + (xy 121.520835 153.435151) (xy 121.488083 153.373434) (xy 121.493896 153.303807) (xy 121.502161 153.286531) + (xy 121.555363 153.194383) (xy 121.663242 152.933939) (xy 121.736204 152.661642) (xy 121.773 152.382151) + (xy 121.773 152.100249) (xy 121.736204 151.820758) (xy 121.663242 151.548461) (xy 121.65626 151.531606) + (xy 121.631265 151.471261) (xy 121.555363 151.288017) (xy 121.55536 151.288011) (xy 121.555359 151.288009) + (xy 121.414416 151.04389) (xy 121.414412 151.043883) (xy 121.2428 150.820235) (xy 121.242798 150.820233) + (xy 121.242795 150.820229) (xy 121.04347 150.620904) (xy 121.018661 150.601867) (xy 120.819817 150.449288) + (xy 120.819811 150.449284) (xy 120.819809 150.449283) (xy 120.57569 150.30834) (xy 120.575679 150.308335) + (xy 120.315243 150.200459) (xy 120.042939 150.127495) (xy 119.763458 150.0907) (xy 119.763451 150.0907) + (xy 119.481549 150.0907) (xy 119.481541 150.0907) (xy 119.20206 150.127495) (xy 118.929756 150.200459) + (xy 118.66932 150.308335) (xy 118.669309 150.30834) (xy 118.42519 150.449283) (xy 118.425182 150.449289) + (xy 118.201529 150.620904) (xy 118.002204 150.820229) (xy 117.830589 151.043882) (xy 117.830583 151.04389) + (xy 117.68964 151.288009) (xy 117.689635 151.28802) (xy 117.581759 151.548456) (xy 117.508795 151.82076) + (xy 117.472 152.100241) (xy 117.472 152.382158) (xy 117.508795 152.661639) (xy 117.581759 152.933943) + (xy 117.689635 153.194379) (xy 117.68964 153.19439) (xy 117.830583 153.438509) (xy 117.830594 153.438525) + (xy 117.961338 153.608914) (xy 117.986532 153.674083) (xy 117.972494 153.742528) (xy 117.92368 153.792517) + (xy 117.919258 153.794884) (xy 117.788813 153.86135) (xy 117.651865 153.960848) (xy 117.65186 153.960852) + (xy 117.532152 154.08056) (xy 117.532148 154.080565) (xy 117.432652 154.217511) (xy 117.355796 154.368346) + (xy 117.303481 154.529352) (xy 117.277 154.69655) (xy 116.2995 154.69655) (xy 116.2995 153.096075) + (xy 116.319185 153.029036) (xy 116.371989 152.983281) (xy 116.375999 152.981534) (xy 116.451179 152.950394) + (xy 116.582289 152.862789) (xy 116.693789 152.751289) (xy 116.781394 152.620179) (xy 116.841737 152.474497) + (xy 116.8725 152.319842) (xy 116.8725 152.162158) (xy 116.8725 152.162155) (xy 116.872499 152.162153) + (xy 116.841737 152.007503) (xy 116.814278 151.941211) (xy 116.781397 151.861827) (xy 116.78139 151.861814) + (xy 116.693789 151.730711) (xy 116.693786 151.730707) (xy 116.582292 151.619213) (xy 116.582288 151.61921) + (xy 116.451185 151.531609) (xy 116.451172 151.531602) (xy 116.305501 151.471264) (xy 116.305489 151.471261) + (xy 116.150845 151.4405) (xy 116.150842 151.4405) (xy 115.993158 151.4405) (xy 115.993155 151.4405) + (xy 115.83851 151.471261) (xy 115.838502 151.471263) (xy 115.763413 151.502365) (xy 115.693943 151.509832) + (xy 115.631465 151.478556) (xy 115.628276 151.47548) (xy 115.625833 151.473037) (xy 113.374576 149.221543) + (xy 106.811814 142.65809) (xy 106.778332 142.596765) (xy 106.7755 142.570413) (xy 106.7755 141.636806) + (xy 111.326265 141.636806) (xy 111.343466 141.812868) (xy 111.344021 141.818542) (xy 111.358855 141.870242) + (xy 111.39438 141.994061) (xy 111.47568 142.157563) (xy 111.475681 142.157565) (xy 111.475683 142.157568) + (xy 111.531541 142.23205) (xy 111.585238 142.303652) (xy 111.585239 142.303653) (xy 111.58524 142.303654) + (xy 111.719432 142.427495) (xy 111.873825 142.524997) (xy 111.987101 142.570405) (xy 112.043314 142.592939) + (xy 112.043315 142.592939) (xy 112.043317 142.59294) (xy 112.222308 142.629079) (xy 112.222302 142.629079) + (xy 112.238622 142.629359) (xy 112.404884 142.63222) (xy 112.585012 142.602258) (xy 112.640507 142.582198) + (xy 112.756736 142.540185) (xy 112.756737 142.540183) (xy 112.75674 142.540183) (xy 112.771775 142.53142) + (xy 112.778459 142.527535) (xy 112.77875 142.527457) (xy 112.806633 142.51116) (xy 112.806751 142.511092) + (xy 112.809968 142.510301) (xy 112.869062 142.494299) (xy 114.350192 142.494299) (xy 114.350314 142.494306) + (xy 114.358405 142.494305) (xy 114.358408 142.494306) (xy 114.390542 142.494302) (xy 114.453104 142.511234) + (xy 114.48093 142.527491) (xy 114.480932 142.527491) (xy 114.48708 142.531083) (xy 114.488735 142.531908) + (xy 114.502878 142.54015) (xy 114.6746 142.602221) (xy 114.854721 142.632182) (xy 115.034398 142.62909) + (xy 115.037291 142.629041) (xy 115.216266 142.592905) (xy 115.216269 142.592903) (xy 115.216274 142.592903) + (xy 115.38576 142.524962) (xy 115.540146 142.427463) (xy 115.568296 142.401485) (xy 115.67433 142.30363) + (xy 115.674332 142.303628) (xy 115.675431 142.302163) (xy 115.783885 142.157547) (xy 115.865184 141.994048) + (xy 115.915542 141.818533) (xy 115.933297 141.636803) (xy 115.91786 141.45486) (xy 115.917858 141.454854) + (xy 115.905171 141.408409) (xy 115.869743 141.278718) (xy 115.861983 141.262549) (xy 115.858896 141.256104) + (xy 115.858848 141.255846) (xy 115.842471 141.221819) (xy 115.842343 141.22103) (xy 115.830302 141.168231) + (xy 115.830306 141.135767) (xy 115.830307 141.130808) (xy 115.830306 141.130804) (xy 115.830307 141.122798) + (xy 115.830299 141.12266) (xy 115.830299 139.819378) (xy 115.832953 139.807712) (xy 115.831919 139.799399) + (xy 115.842503 139.765734) (xy 115.848818 139.752576) (xy 115.848898 139.752487) (xy 115.848868 139.752473) + (xy 115.848869 139.752471) (xy 115.858874 139.731674) (xy 115.858874 139.731668) (xy 115.862255 139.724642) + (xy 115.862417 139.724238) (xy 115.869783 139.708891) (xy 115.9179 139.532742) (xy 115.933337 139.350793) + (xy 115.915581 139.169055) (xy 115.86522 138.993534) (xy 115.783918 138.83003) (xy 115.697527 138.714834) + (xy 115.674362 138.683945) (xy 115.617196 138.631189) (xy 115.540169 138.560104) (xy 115.540166 138.560102) + (xy 115.540165 138.560101) (xy 115.540162 138.560099) (xy 115.385777 138.462601) (xy 115.216287 138.394658) + (xy 115.216277 138.394656) (xy 115.037292 138.358518) (xy 115.037299 138.358518) (xy 114.865594 138.355565) + (xy 114.854718 138.355378) (xy 114.854717 138.355378) (xy 114.854714 138.355378) (xy 114.674597 138.385338) + (xy 114.674584 138.385341) (xy 114.502863 138.447413) (xy 114.488348 138.45587) (xy 114.488263 138.455919) + (xy 114.481176 138.46004) (xy 114.48093 138.460108) (xy 114.453138 138.476344) (xy 114.45289 138.476489) + (xy 114.450163 138.477159) (xy 114.390546 138.493296) (xy 114.350201 138.493293) (xy 114.350097 138.4933) + (xy 112.909396 138.4933) (xy 112.901214 138.493298) (xy 112.901192 138.493293) (xy 112.871265 138.493295) + (xy 112.869028 138.493295) (xy 112.868746 138.493212) (xy 112.806493 138.476362) (xy 112.778671 138.460108) + (xy 112.772605 138.456564) (xy 112.770907 138.455717) (xy 112.763557 138.451434) (xy 112.756721 138.44745) + (xy 112.584997 138.385378) (xy 112.584991 138.385377) (xy 112.404881 138.355419) (xy 112.404878 138.355419) + (xy 112.396339 138.355565) (xy 112.222307 138.358559) (xy 112.043334 138.394694) (xy 112.043323 138.394697) + (xy 111.873842 138.462637) (xy 111.873841 138.462637) (xy 111.719461 138.560132) (xy 111.719458 138.560134) + (xy 111.585267 138.683973) (xy 111.475715 138.830054) (xy 111.39442 138.993544) (xy 111.394419 138.993547) + (xy 111.394418 138.99355) (xy 111.380589 139.041747) (xy 111.344058 139.169065) (xy 111.327211 139.34151) + (xy 111.326304 139.350793) (xy 111.328205 139.373202) (xy 111.34008 139.513178) (xy 111.34174 139.532735) + (xy 111.37778 139.664669) (xy 111.389856 139.708878) (xy 111.38986 139.708888) (xy 111.397098 139.72397) + (xy 111.39714 139.724056) (xy 111.400723 139.731538) (xy 111.400781 139.73184) (xy 111.417136 139.765806) + (xy 111.417281 139.7667) (xy 111.429301 139.819369) (xy 111.429301 141.168222) (xy 111.417107 141.221845) + (xy 111.416519 141.223071) (xy 111.416439 141.223238) (xy 111.397566 141.262437) (xy 111.397242 141.263239) + (xy 111.389818 141.27871) (xy 111.341701 141.454854) (xy 111.341701 141.454856) (xy 111.326265 141.636806) + (xy 106.7755 141.636806) (xy 106.7755 135.64655) (xy 107.752 135.64655) (xy 107.752 135.815849) + (xy 107.778481 135.983047) (xy 107.830796 136.144053) (xy 107.907652 136.294888) (xy 108.007148 136.431834) + (xy 108.007152 136.431839) (xy 108.12686 136.551547) (xy 108.126865 136.551551) (xy 108.246317 136.638337) + (xy 108.263815 136.65105) (xy 108.327017 136.683253) (xy 108.414646 136.727903) (xy 108.414648 136.727903) + (xy 108.414651 136.727905) (xy 108.50095 136.755945) (xy 108.575652 136.780218) (xy 108.742851 136.8067) + (xy 108.742856 136.8067) (xy 108.912149 136.8067) (xy 109.079347 136.780218) (xy 109.240349 136.727905) + (xy 109.391185 136.65105) (xy 109.528141 136.551546) (xy 109.647846 136.431841) (xy 109.74735 136.294885) + (xy 109.824205 136.144049) (xy 109.876518 135.983047) (xy 109.903 135.815849) (xy 109.903 135.64655) + (xy 109.877428 135.485098) (xy 109.886382 135.415805) (xy 109.931379 135.362353) (xy 109.99813 135.341713) + (xy 109.999901 135.3417) (xy 110.238444 135.3417) (xy 110.238451 135.3417) (xy 110.517942 135.304904) + (xy 110.790239 135.231942) (xy 111.050683 135.124063) (xy 111.294817 134.983112) (xy 111.518465 134.8115) + (xy 111.7178 134.612165) (xy 111.785492 134.523946) (xy 111.84192 134.482744) (xy 111.911666 134.478589) + (xy 111.972586 134.512801) (xy 112.005339 134.574518) (xy 111.999526 134.644146) (xy 111.991255 134.661433) + (xy 111.935183 134.758551) (xy 111.935175 134.758568) (xy 111.825097 135.024321) (xy 111.750646 135.302176) + (xy 111.713101 135.587361) (xy 111.7131 135.587377) (xy 111.7131 135.875022) (xy 111.713101 135.875038) + (xy 111.750646 136.160223) (xy 111.825097 136.438078) (xy 111.935175 136.703831) (xy 111.935183 136.703848) + (xy 112.079004 136.952951) (xy 112.079015 136.952967) (xy 112.254121 137.181171) (xy 112.254127 137.181178) + (xy 112.457525 137.384576) (xy 112.553761 137.45842) (xy 112.685741 137.559691) (xy 112.685748 137.559695) + (xy 112.934851 137.703516) (xy 112.934856 137.703518) (xy 112.934859 137.70352) (xy 112.934863 137.703521) + (xy 112.934868 137.703524) (xy 113.040223 137.747163) (xy 113.20062 137.813602) (xy 113.478475 137.888053) + (xy 113.763671 137.9256) (xy 113.763678 137.9256) (xy 114.051322 137.9256) (xy 114.051329 137.9256) + (xy 114.336525 137.888053) (xy 114.61438 137.813602) (xy 114.880141 137.70352) (xy 115.129259 137.559691) + (xy 115.270078 137.451636) (xy 115.357475 137.384576) (xy 115.357478 137.384572) (xy 115.560872 137.181178) + (xy 115.560877 137.181173) (xy 115.735991 136.952959) (xy 115.87982 136.703841) (xy 115.989902 136.43808) + (xy 116.064353 136.160225) (xy 116.1019 135.875029) (xy 116.1019 135.64655) (xy 117.912 135.64655) + (xy 117.912 135.815849) (xy 117.938481 135.983047) (xy 117.990796 136.144053) (xy 118.067652 136.294888) + (xy 118.167148 136.431834) (xy 118.167152 136.431839) (xy 118.28686 136.551547) (xy 118.286865 136.551551) + (xy 118.406317 136.638337) (xy 118.423815 136.65105) (xy 118.487017 136.683253) (xy 118.574646 136.727903) + (xy 118.574648 136.727903) (xy 118.574651 136.727905) (xy 118.66095 136.755945) (xy 118.735652 136.780218) + (xy 118.902851 136.8067) (xy 118.902856 136.8067) (xy 119.072149 136.8067) (xy 119.239347 136.780218) + (xy 119.400349 136.727905) (xy 119.551185 136.65105) (xy 119.688141 136.551546) (xy 119.807846 136.431841) + (xy 119.90735 136.294885) (xy 119.984205 136.144049) (xy 120.036518 135.983047) (xy 120.063 135.815849) + (xy 120.063 135.64655) (xy 120.036518 135.479352) (xy 119.991796 135.341713) (xy 119.984205 135.318351) + (xy 119.984203 135.318348) (xy 119.984203 135.318346) (xy 119.940176 135.23194) (xy 119.90735 135.167515) + (xy 119.875781 135.124064) (xy 119.807851 135.030565) (xy 119.807847 135.03056) (xy 119.688139 134.910852) + (xy 119.688134 134.910848) (xy 119.551188 134.811352) (xy 119.551187 134.811351) (xy 119.551185 134.81135) + (xy 119.486109 134.778192) (xy 119.400353 134.734496) (xy 119.239347 134.682181) (xy 119.072149 134.6557) + (xy 119.072144 134.6557) (xy 118.902856 134.6557) (xy 118.902851 134.6557) (xy 118.735652 134.682181) + (xy 118.574646 134.734496) (xy 118.423811 134.811352) (xy 118.286865 134.910848) (xy 118.28686 134.910852) + (xy 118.167152 135.03056) (xy 118.167148 135.030565) (xy 118.067652 135.167511) (xy 117.990796 135.318346) + (xy 117.938481 135.479352) (xy 117.912 135.64655) (xy 116.1019 135.64655) (xy 116.1019 135.587371) + (xy 116.064353 135.302175) (xy 115.989902 135.02432) (xy 115.923463 134.863923) (xy 115.879824 134.758568) + (xy 115.879816 134.758551) (xy 115.735995 134.509448) (xy 115.735994 134.509447) (xy 115.735991 134.509441) + (xy 115.611525 134.347233) (xy 115.560878 134.281228) (xy 115.560872 134.281221) (xy 115.357478 134.077827) + (xy 115.357471 134.077821) (xy 115.129267 133.902715) (xy 115.129265 133.902713) (xy 115.129259 133.902709) + (xy 115.129254 133.902706) (xy 115.129251 133.902704) (xy 114.880148 133.758883) (xy 114.880131 133.758875) + (xy 114.614378 133.648797) (xy 114.336523 133.574346) (xy 114.051338 133.536801) (xy 114.051335 133.5368) + (xy 114.051329 133.5368) (xy 113.763671 133.5368) (xy 113.763665 133.5368) (xy 113.763661 133.536801) + (xy 113.478476 133.574346) (xy 113.200621 133.648797) (xy 112.934868 133.758875) (xy 112.934851 133.758883) + (xy 112.685748 133.902704) (xy 112.685732 133.902715) (xy 112.457528 134.077821) (xy 112.457521 134.077827) + (xy 112.254127 134.281221) (xy 112.18293 134.374007) (xy 112.126501 134.415209) (xy 112.056755 134.419364) + (xy 111.995835 134.385151) (xy 111.963083 134.323434) (xy 111.968896 134.253807) (xy 111.977161 134.236531) + (xy 112.030363 134.144383) (xy 112.138242 133.883939) (xy 112.211204 133.611642) (xy 112.248 133.332151) + (xy 112.248 133.050249) (xy 112.211204 132.770758) (xy 112.138242 132.498461) (xy 112.13126 132.481606) + (xy 112.109309 132.428611) (xy 112.030363 132.238017) (xy 112.030361 132.238014) (xy 112.030359 132.238009) + (xy 111.889416 131.99389) (xy 111.889412 131.993883) (xy 111.7178 131.770235) (xy 111.717798 131.770233) + (xy 111.717795 131.770229) (xy 111.51847 131.570904) (xy 111.419871 131.495246) (xy 111.294817 131.399288) + (xy 111.294811 131.399284) (xy 111.294809 131.399283) (xy 111.05069 131.25834) (xy 111.050679 131.258335) + (xy 110.790243 131.150459) (xy 110.517939 131.077495) (xy 110.238458 131.0407) (xy 110.238451 131.0407) + (xy 109.956549 131.0407) (xy 109.956541 131.0407) (xy 109.67706 131.077495) (xy 109.404756 131.150459) + (xy 109.14432 131.258335) (xy 109.144309 131.25834) (xy 108.90019 131.399283) (xy 108.900182 131.399289) + (xy 108.676529 131.570904) (xy 108.477204 131.770229) (xy 108.305589 131.993882) (xy 108.305583 131.99389) + (xy 108.16464 132.238009) (xy 108.164635 132.23802) (xy 108.056759 132.498456) (xy 107.983795 132.77076) + (xy 107.947 133.050241) (xy 107.947 133.332158) (xy 107.983795 133.611639) (xy 108.056759 133.883943) + (xy 108.164635 134.144379) (xy 108.16464 134.14439) (xy 108.305583 134.388509) (xy 108.305594 134.388525) + (xy 108.436338 134.558914) (xy 108.461532 134.624083) (xy 108.447494 134.692528) (xy 108.39868 134.742517) + (xy 108.394258 134.744884) (xy 108.263813 134.81135) (xy 108.126865 134.910848) (xy 108.12686 134.910852) + (xy 108.007152 135.03056) (xy 108.007148 135.030565) (xy 107.907652 135.167511) (xy 107.830796 135.318346) + (xy 107.778481 135.479352) (xy 107.752 135.64655) (xy 106.7755 135.64655) (xy 106.7755 134.046075) + (xy 106.795185 133.979036) (xy 106.847989 133.933281) (xy 106.851999 133.931534) (xy 106.927179 133.900394) + (xy 107.058289 133.812789) (xy 107.169789 133.701289) (xy 107.257394 133.570179) (xy 107.317737 133.424497) + (xy 107.3485 133.269842) (xy 107.3485 133.112158) (xy 107.3485 133.112155) (xy 107.348499 133.112153) + (xy 107.317737 132.957503) (xy 107.30203 132.919582) (xy 107.257397 132.811827) (xy 107.25739 132.811814) + (xy 107.169789 132.680711) (xy 107.169786 132.680707) (xy 107.058292 132.569213) (xy 107.058288 132.56921) + (xy 106.927185 132.481609) (xy 106.927172 132.481602) (xy 106.781501 132.421264) (xy 106.781489 132.421261) + (xy 106.626845 132.3905) (xy 106.626842 132.3905) (xy 106.469158 132.3905) (xy 106.469155 132.3905) + (xy 106.31451 132.421261) (xy 106.314503 132.421263) (xy 106.239274 132.452423) (xy 106.169805 132.459891) + (xy 106.107326 132.428615) (xy 106.104152 132.425552) (xy 104.272073 130.593881) (xy 104.272072 130.59388) + (xy 104.188414 130.510241) (xy 114.297 130.510241) (xy 114.297 130.792158) (xy 114.333795 131.071639) + (xy 114.406759 131.343943) (xy 114.514635 131.604379) (xy 114.51464 131.60439) (xy 114.647142 131.833888) + (xy 114.655588 131.848517) (xy 114.818047 132.060237) (xy 114.827204 132.07217) (xy 115.026529 132.271495) + (xy 115.026533 132.271498) (xy 115.026535 132.2715) (xy 115.250183 132.443112) (xy 115.25019 132.443116) + (xy 115.494309 132.584059) (xy 115.494314 132.584061) (xy 115.494317 132.584063) (xy 115.754761 132.691942) + (xy 116.027058 132.764904) (xy 116.306549 132.8017) (xy 116.306556 132.8017) (xy 116.588444 132.8017) + (xy 116.588451 132.8017) (xy 116.867942 132.764904) (xy 117.140239 132.691942) (xy 117.400683 132.584063) + (xy 117.644817 132.443112) (xy 117.868465 132.2715) (xy 118.0678 132.072165) (xy 118.239412 131.848517) + (xy 118.380363 131.604383) (xy 118.488242 131.343939) (xy 118.561204 131.071642) (xy 118.598 130.792151) + (xy 118.598 130.510249) (xy 118.561204 130.230758) (xy 118.488242 129.958461) (xy 118.48126 129.941606) + (xy 118.456265 129.881261) (xy 118.380363 129.698017) (xy 118.380361 129.698014) (xy 118.380359 129.698009) + (xy 118.239416 129.45389) (xy 118.239412 129.453883) (xy 118.0678 129.230235) (xy 118.067798 129.230233) + (xy 118.067795 129.230229) (xy 117.86847 129.030904) (xy 117.868465 129.0309) (xy 117.644817 128.859288) + (xy 117.644811 128.859284) (xy 117.644809 128.859283) (xy 117.40069 128.71834) (xy 117.400679 128.718335) + (xy 117.140243 128.610459) (xy 116.867939 128.537495) (xy 116.588458 128.5007) (xy 116.588451 128.5007) + (xy 116.306549 128.5007) (xy 116.306541 128.5007) (xy 116.02706 128.537495) (xy 115.754756 128.610459) + (xy 115.49432 128.718335) (xy 115.494309 128.71834) (xy 115.25019 128.859283) (xy 115.250184 128.859287) + (xy 115.250183 128.859288) (xy 115.195198 128.90148) (xy 115.026529 129.030904) (xy 114.827204 129.230229) + (xy 114.713881 129.377914) (xy 114.655597 129.453872) (xy 114.655589 129.453882) (xy 114.655583 129.45389) + (xy 114.51464 129.698009) (xy 114.514635 129.69802) (xy 114.406759 129.958456) (xy 114.333795 130.23076) + (xy 114.297 130.510241) (xy 104.188414 130.510241) (xy 102.325829 128.648071) (xy 102.292337 128.586752) + (xy 102.2895 128.56038) (xy 102.2895 122.432106) (xy 106.815265 122.432106) (xy 106.831476 122.598035) + (xy 106.833021 122.613842) (xy 106.852406 122.681404) (xy 106.88338 122.789361) (xy 106.96468 122.952863) + (xy 106.964681 122.952865) (xy 106.964683 122.952868) (xy 106.977766 122.970313) (xy 107.074238 123.098952) + (xy 107.074239 123.098953) (xy 107.07424 123.098954) (xy 107.208432 123.222795) (xy 107.362825 123.320297) + (xy 107.497977 123.374474) (xy 107.532314 123.388239) (xy 107.532315 123.388239) (xy 107.532317 123.38824) + (xy 107.711308 123.424379) (xy 107.711302 123.424379) (xy 107.727622 123.424659) (xy 107.893884 123.42752) + (xy 108.074012 123.397558) (xy 108.180961 123.358899) (xy 108.245736 123.335485) (xy 108.245737 123.335483) + (xy 108.24574 123.335483) (xy 108.260775 123.32672) (xy 108.267459 123.322835) (xy 108.26775 123.322757) + (xy 108.295633 123.30646) (xy 108.295751 123.306392) (xy 108.298968 123.305601) (xy 108.358062 123.289599) + (xy 109.839192 123.289599) (xy 109.839314 123.289606) (xy 109.847405 123.289605) (xy 109.847408 123.289606) + (xy 109.879542 123.289602) (xy 109.942104 123.306534) (xy 109.96993 123.322791) (xy 109.969932 123.322791) + (xy 109.97608 123.326383) (xy 109.977735 123.327208) (xy 109.991878 123.33545) (xy 110.1636 123.397521) + (xy 110.343721 123.427482) (xy 110.523398 123.42439) (xy 110.526291 123.424341) (xy 110.705266 123.388205) + (xy 110.705269 123.388203) (xy 110.705274 123.388203) (xy 110.87476 123.320262) (xy 111.029146 123.222763) + (xy 111.039805 123.212927) (xy 111.16333 123.09893) (xy 111.163332 123.098928) (xy 111.176172 123.081807) + (xy 111.272885 122.952847) (xy 111.354184 122.789348) (xy 111.404542 122.613833) (xy 111.422297 122.432103) + (xy 111.40686 122.25016) (xy 111.406858 122.250154) (xy 111.395292 122.207814) (xy 111.358743 122.074018) + (xy 111.350983 122.057849) (xy 111.347896 122.051404) (xy 111.347848 122.051146) (xy 111.331471 122.017119) + (xy 111.331343 122.01633) (xy 111.319302 121.963531) (xy 111.319302 121.963522) (xy 111.319307 121.926108) + (xy 111.319306 121.926104) (xy 111.319307 121.918098) (xy 111.319299 121.91796) (xy 111.319299 120.614677) + (xy 111.321954 120.603008) (xy 111.32092 120.594694) (xy 111.331505 120.561028) (xy 111.337811 120.54789) + (xy 111.347874 120.526974) (xy 111.347874 120.526969) (xy 111.35126 120.519933) (xy 111.351425 120.519522) + (xy 111.351546 120.51927) (xy 111.358783 120.504191) (xy 111.4069 120.328042) (xy 111.422337 120.146093) + (xy 111.404581 119.964355) (xy 111.35422 119.788834) (xy 111.272918 119.62533) (xy 111.178475 119.499397) + (xy 111.163362 119.479245) (xy 111.095059 119.416211) (xy 111.029169 119.355404) (xy 111.029166 119.355402) + (xy 111.029165 119.355401) (xy 111.029162 119.355399) (xy 110.874777 119.257901) (xy 110.705287 119.189958) + (xy 110.705277 119.189956) (xy 110.526292 119.153818) (xy 110.526299 119.153818) (xy 110.354594 119.150865) + (xy 110.343718 119.150678) (xy 110.343717 119.150678) (xy 110.343714 119.150678) (xy 110.163597 119.180638) + (xy 110.163584 119.180641) (xy 109.991863 119.242713) (xy 109.977348 119.25117) (xy 109.977263 119.251219) + (xy 109.970176 119.25534) (xy 109.96993 119.255408) (xy 109.942138 119.271644) (xy 109.94189 119.271789) + (xy 109.939163 119.272459) (xy 109.879546 119.288596) (xy 109.839201 119.288593) (xy 109.839097 119.2886) + (xy 108.398396 119.2886) (xy 108.390214 119.288598) (xy 108.390192 119.288593) (xy 108.360265 119.288595) + (xy 108.358028 119.288595) (xy 108.357746 119.288512) (xy 108.295493 119.271662) (xy 108.267671 119.255408) + (xy 108.261605 119.251864) (xy 108.259907 119.251017) (xy 108.252557 119.246734) (xy 108.245721 119.24275) + (xy 108.073997 119.180678) (xy 108.073991 119.180677) (xy 107.893881 119.150719) (xy 107.893878 119.150719) + (xy 107.885339 119.150865) (xy 107.711307 119.153859) (xy 107.532334 119.189994) (xy 107.532323 119.189997) + (xy 107.362842 119.257937) (xy 107.362841 119.257937) (xy 107.208461 119.355432) (xy 107.208458 119.355434) + (xy 107.074267 119.479273) (xy 106.964715 119.625354) (xy 106.88342 119.788844) (xy 106.883419 119.788847) + (xy 106.883418 119.78885) (xy 106.866545 119.847658) (xy 106.833058 119.964365) (xy 106.819278 120.105413) + (xy 106.815304 120.146093) (xy 106.816483 120.159989) (xy 106.830579 120.326147) (xy 106.83074 120.328035) + (xy 106.855448 120.418484) (xy 106.878856 120.504178) (xy 106.87886 120.504188) (xy 106.886098 120.51927) + (xy 106.88614 120.519356) (xy 106.889723 120.526838) (xy 106.889781 120.52714) (xy 106.906097 120.561025) + (xy 106.906136 120.561106) (xy 106.906281 120.562) (xy 106.918301 120.614669) (xy 106.918301 121.963522) + (xy 106.906107 122.017145) (xy 106.905519 122.018371) (xy 106.905439 122.018538) (xy 106.886566 122.057737) + (xy 106.886242 122.058539) (xy 106.878818 122.07401) (xy 106.830701 122.250154) (xy 106.830701 122.250156) + (xy 106.815265 122.432106) (xy 102.2895 122.432106) (xy 102.2895 116.59655) (xy 102.9895 116.59655) + (xy 102.9895 116.765849) (xy 103.015981 116.933047) (xy 103.068296 117.094053) (xy 103.145152 117.244888) + (xy 103.244648 117.381834) (xy 103.244651 117.381838) (xy 103.36436 117.501547) (xy 103.364365 117.501551) + (xy 103.444244 117.559586) (xy 103.501315 117.60105) (xy 103.597425 117.65002) (xy 103.652146 117.677903) + (xy 103.652148 117.677903) (xy 103.652151 117.677905) (xy 103.73845 117.705945) (xy 103.813152 117.730218) + (xy 103.980351 117.7567) (xy 103.980356 117.7567) (xy 104.149649 117.7567) (xy 104.316847 117.730218) + (xy 104.477849 117.677905) (xy 104.628685 117.60105) (xy 104.765641 117.501546) (xy 104.885346 117.381841) + (xy 104.885346 117.38184) (xy 104.885349 117.381838) (xy 104.885351 117.381834) (xy 104.906179 117.353167) + (xy 104.98485 117.244885) (xy 105.061705 117.094049) (xy 105.114018 116.933047) (xy 105.1405 116.765849) + (xy 105.1405 116.59655) (xy 105.114928 116.435098) (xy 105.123882 116.365805) (xy 105.168879 116.312353) + (xy 105.23563 116.291713) (xy 105.237401 116.2917) (xy 105.475944 116.2917) (xy 105.475951 116.2917) + (xy 105.755442 116.254904) (xy 106.027739 116.181942) (xy 106.288183 116.074063) (xy 106.532317 115.933112) + (xy 106.755965 115.7615) (xy 106.9553 115.562165) (xy 107.022992 115.473946) (xy 107.07942 115.432744) + (xy 107.149166 115.428589) (xy 107.210086 115.462801) (xy 107.242839 115.524518) (xy 107.237026 115.594146) + (xy 107.228755 115.611433) (xy 107.172683 115.708551) (xy 107.172675 115.708568) (xy 107.062597 115.974321) + (xy 106.988146 116.252176) (xy 106.950601 116.537361) (xy 106.9506 116.537377) (xy 106.9506 116.825022) + (xy 106.950601 116.825038) (xy 106.988146 117.110223) (xy 107.062597 117.388078) (xy 107.172675 117.653831) + (xy 107.172683 117.653848) (xy 107.316504 117.902951) (xy 107.316515 117.902967) (xy 107.491621 118.131171) + (xy 107.491627 118.131178) (xy 107.695021 118.334572) (xy 107.695027 118.334577) (xy 107.923241 118.509691) + (xy 107.923248 118.509695) (xy 108.172351 118.653516) (xy 108.172356 118.653518) (xy 108.172359 118.65352) + (xy 108.172363 118.653521) (xy 108.172368 118.653524) (xy 108.219808 118.673174) (xy 108.43812 118.763602) + (xy 108.715975 118.838053) (xy 109.001171 118.8756) (xy 109.001178 118.8756) (xy 109.288822 118.8756) + (xy 109.288829 118.8756) (xy 109.574025 118.838053) (xy 109.85188 118.763602) (xy 110.117641 118.65352) + (xy 110.120056 118.652126) (xy 110.234067 118.586301) (xy 110.366759 118.509691) (xy 110.594973 118.334577) + (xy 110.798377 118.131173) (xy 110.973491 117.902959) (xy 111.11732 117.653841) (xy 111.227402 117.38808) + (xy 111.301853 117.110225) (xy 111.3394 116.825029) (xy 111.3394 116.59655) (xy 113.1495 116.59655) + (xy 113.1495 116.765849) (xy 113.175981 116.933047) (xy 113.228296 117.094053) (xy 113.305152 117.244888) + (xy 113.404648 117.381834) (xy 113.404651 117.381838) (xy 113.52436 117.501547) (xy 113.524365 117.501551) + (xy 113.604244 117.559586) (xy 113.661315 117.60105) (xy 113.757425 117.65002) (xy 113.812146 117.677903) + (xy 113.812148 117.677903) (xy 113.812151 117.677905) (xy 113.89845 117.705945) (xy 113.973152 117.730218) + (xy 114.140351 117.7567) (xy 114.140356 117.7567) (xy 114.309649 117.7567) (xy 114.476847 117.730218) + (xy 114.637849 117.677905) (xy 114.788685 117.60105) (xy 114.925641 117.501546) (xy 115.045346 117.381841) + (xy 115.045346 117.38184) (xy 115.045349 117.381838) (xy 115.045351 117.381834) (xy 115.066179 117.353167) + (xy 115.14485 117.244885) (xy 115.221705 117.094049) (xy 115.274018 116.933047) (xy 115.3005 116.765849) + (xy 115.3005 116.59655) (xy 115.274018 116.429352) (xy 115.247275 116.347046) (xy 115.221705 116.268351) + (xy 115.221703 116.268348) (xy 115.221703 116.268346) (xy 115.171015 116.168867) (xy 115.14485 116.117515) + (xy 115.113281 116.074064) (xy 115.045351 115.980565) (xy 115.045347 115.98056) (xy 114.925639 115.860852) + (xy 114.925634 115.860848) (xy 114.788688 115.761352) (xy 114.788687 115.761351) (xy 114.788685 115.76135) + (xy 114.739398 115.736237) (xy 114.637853 115.684496) (xy 114.476847 115.632181) (xy 114.309649 115.6057) + (xy 114.309644 115.6057) (xy 114.140356 115.6057) (xy 114.140351 115.6057) (xy 113.973152 115.632181) + (xy 113.812146 115.684496) (xy 113.661311 115.761352) (xy 113.524365 115.860848) (xy 113.52436 115.860852) + (xy 113.404652 115.98056) (xy 113.404648 115.980565) (xy 113.305152 116.117511) (xy 113.228296 116.268346) + (xy 113.175981 116.429352) (xy 113.1495 116.59655) (xy 111.3394 116.59655) (xy 111.3394 116.537371) + (xy 111.301853 116.252175) (xy 111.227402 115.97432) (xy 111.139705 115.762601) (xy 111.117324 115.708568) + (xy 111.117316 115.708551) (xy 110.973495 115.459448) (xy 110.973491 115.459441) (xy 110.832073 115.275141) + (xy 110.798378 115.231228) (xy 110.798372 115.231221) (xy 110.594978 115.027827) (xy 110.594971 115.027821) + (xy 110.366767 114.852715) (xy 110.366765 114.852713) (xy 110.366759 114.852709) (xy 110.366754 114.852706) + (xy 110.366751 114.852704) (xy 110.117648 114.708883) (xy 110.117631 114.708875) (xy 109.851878 114.598797) + (xy 109.574023 114.524346) (xy 109.288838 114.486801) (xy 109.288835 114.4868) (xy 109.288829 114.4868) + (xy 109.001171 114.4868) (xy 109.001165 114.4868) (xy 109.001161 114.486801) (xy 108.715976 114.524346) + (xy 108.438121 114.598797) (xy 108.172368 114.708875) (xy 108.172351 114.708883) (xy 107.923248 114.852704) + (xy 107.923232 114.852715) (xy 107.695028 115.027821) (xy 107.695021 115.027827) (xy 107.491627 115.231221) + (xy 107.42043 115.324007) (xy 107.364001 115.365209) (xy 107.294255 115.369364) (xy 107.233335 115.335151) + (xy 107.200583 115.273434) (xy 107.206396 115.203807) (xy 107.214661 115.186531) (xy 107.267863 115.094383) + (xy 107.375742 114.833939) (xy 107.448704 114.561642) (xy 107.4855 114.282151) (xy 107.4855 114.000249) + (xy 107.448704 113.720758) (xy 107.375742 113.448461) (xy 107.36876 113.431606) (xy 107.343765 113.371261) + (xy 107.267863 113.188017) (xy 107.267861 113.188014) (xy 107.267859 113.188009) (xy 107.126916 112.94389) + (xy 107.126912 112.943883) (xy 106.9553 112.720235) (xy 106.955298 112.720233) (xy 106.955295 112.720229) + (xy 106.75597 112.520904) (xy 106.731161 112.501867) (xy 106.532317 112.349288) (xy 106.532311 112.349284) + (xy 106.532309 112.349283) (xy 106.28819 112.20834) (xy 106.288179 112.208335) (xy 106.027743 112.100459) + (xy 105.755439 112.027495) (xy 105.475958 111.9907) (xy 105.475951 111.9907) (xy 105.194049 111.9907) + (xy 105.194041 111.9907) (xy 104.91456 112.027495) (xy 104.642256 112.100459) (xy 104.38182 112.208335) + (xy 104.381809 112.20834) (xy 104.13769 112.349283) (xy 104.137682 112.349289) (xy 103.914029 112.520904) + (xy 103.714704 112.720229) (xy 103.543089 112.943882) (xy 103.543083 112.94389) (xy 103.40214 113.188009) + (xy 103.402135 113.18802) (xy 103.294259 113.448456) (xy 103.221295 113.72076) (xy 103.1845 114.000241) + (xy 103.1845 114.282158) (xy 103.221295 114.561639) (xy 103.294259 114.833943) (xy 103.402135 115.094379) + (xy 103.40214 115.09439) (xy 103.543083 115.338509) (xy 103.543094 115.338525) (xy 103.673838 115.508914) + (xy 103.699032 115.574083) (xy 103.684994 115.642528) (xy 103.63618 115.692517) (xy 103.631758 115.694884) + (xy 103.501313 115.76135) (xy 103.364365 115.860848) (xy 103.36436 115.860852) (xy 103.244652 115.98056) + (xy 103.244648 115.980565) (xy 103.145152 116.117511) (xy 103.068296 116.268346) (xy 103.015981 116.429352) + (xy 102.9895 116.59655) (xy 102.2895 116.59655) (xy 102.2895 114.819941) (xy 102.309185 114.752902) + (xy 102.325819 114.73226) (xy 102.406786 114.651292) (xy 102.406789 114.651289) (xy 102.494394 114.520179) + (xy 102.554737 114.374497) (xy 102.5855 114.219842) (xy 102.5855 114.062158) (xy 102.5855 114.062155) + (xy 102.585499 114.062153) (xy 102.573556 114.002113) (xy 102.554737 113.907503) (xy 102.527278 113.841211) + (xy 102.494397 113.761827) (xy 102.49439 113.761814) (xy 102.406789 113.630711) (xy 102.406786 113.630707) + (xy 102.295292 113.519213) (xy 102.295288 113.51921) (xy 102.164185 113.431609) (xy 102.164172 113.431602) + (xy 102.018501 113.371264) (xy 102.018489 113.371261) (xy 101.863845 113.3405) (xy 101.863842 113.3405) + (xy 101.706158 113.3405) (xy 101.706155 113.3405) (xy 101.55151 113.371261) (xy 101.551507 113.371262) + (xy 101.551506 113.371262) (xy 101.551503 113.371263) (xy 101.498745 113.393116) (xy 101.476348 113.402393) + (xy 101.406878 113.409861) (xy 101.344399 113.378585) (xy 101.341217 113.375515) (xy 99.509481 111.543874) + (xy 99.425844 111.460241) (xy 109.5345 111.460241) (xy 109.5345 111.742158) (xy 109.571295 112.021639) + (xy 109.644259 112.293943) (xy 109.752135 112.554379) (xy 109.75214 112.55439) (xy 109.893083 112.798509) + (xy 109.893088 112.798517) (xy 110.011074 112.952278) (xy 110.064704 113.02217) (xy 110.264029 113.221495) + (xy 110.264033 113.221498) (xy 110.264035 113.2215) (xy 110.487683 113.393112) (xy 110.48769 113.393116) + (xy 110.731809 113.534059) (xy 110.731814 113.534061) (xy 110.731817 113.534063) (xy 110.839834 113.578805) + (xy 110.957486 113.627538) (xy 110.992261 113.641942) (xy 111.264558 113.714904) (xy 111.544049 113.7517) + (xy 111.544056 113.7517) (xy 111.825944 113.7517) (xy 111.825951 113.7517) (xy 112.105442 113.714904) + (xy 112.377739 113.641942) (xy 112.638183 113.534063) (xy 112.882317 113.393112) (xy 113.105965 113.2215) + (xy 113.3053 113.022165) (xy 113.476912 112.798517) (xy 113.617863 112.554383) (xy 113.725742 112.293939) + (xy 113.798704 112.021642) (xy 113.8355 111.742151) (xy 113.8355 111.460249) (xy 113.798704 111.180758) + (xy 113.725742 110.908461) (xy 113.71876 110.891606) (xy 113.693765 110.831261) (xy 113.617863 110.648017) + (xy 113.617861 110.648014) (xy 113.617859 110.648009) (xy 113.476916 110.40389) (xy 113.476912 110.403883) + (xy 113.3053 110.180235) (xy 113.305298 110.180233) (xy 113.305295 110.180229) (xy 113.10597 109.980904) + (xy 113.105965 109.9809) (xy 112.882317 109.809288) (xy 112.882311 109.809284) (xy 112.882309 109.809283) + (xy 112.63819 109.66834) (xy 112.638179 109.668335) (xy 112.377743 109.560459) (xy 112.105439 109.487495) + (xy 111.825958 109.4507) (xy 111.825951 109.4507) (xy 111.544049 109.4507) (xy 111.544041 109.4507) + (xy 111.26456 109.487495) (xy 110.992256 109.560459) (xy 110.73182 109.668335) (xy 110.731809 109.66834) + (xy 110.48769 109.809283) (xy 110.487684 109.809287) (xy 110.487683 109.809288) (xy 110.440169 109.845747) + (xy 110.264029 109.980904) (xy 110.064704 110.180229) (xy 109.951381 110.327914) (xy 109.904327 110.389237) + (xy 109.893089 110.403882) (xy 109.893083 110.40389) (xy 109.75214 110.648009) (xy 109.752135 110.64802) + (xy 109.644259 110.908456) (xy 109.571295 111.18076) (xy 109.5345 111.460241) (xy 99.425844 111.460241) + (xy 92.471321 104.506081) (xy 92.437834 104.444758) (xy 92.435 104.418397) (xy 92.435 103.536706) + (xy 97.290265 103.536706) (xy 97.307375 103.711837) (xy 97.308021 103.718442) (xy 97.329253 103.792442) + (xy 97.35838 103.893961) (xy 97.43968 104.057463) (xy 97.439681 104.057465) (xy 97.439683 104.057468) + (xy 97.493478 104.129199) (xy 97.549238 104.203552) (xy 97.549239 104.203553) (xy 97.54924 104.203554) + (xy 97.683432 104.327395) (xy 97.837825 104.424897) (xy 97.968104 104.477121) (xy 98.007314 104.492839) + (xy 98.007315 104.492839) (xy 98.007317 104.49284) (xy 98.186308 104.528979) (xy 98.186302 104.528979) + (xy 98.202622 104.529259) (xy 98.368884 104.53212) (xy 98.549012 104.502158) (xy 98.595129 104.485488) + (xy 98.720736 104.440085) (xy 98.720737 104.440083) (xy 98.72074 104.440083) (xy 98.735775 104.43132) + (xy 98.742459 104.427435) (xy 98.74275 104.427357) (xy 98.770633 104.41106) (xy 98.770751 104.410992) + (xy 98.773968 104.410201) (xy 98.833062 104.394199) (xy 100.314192 104.394199) (xy 100.314314 104.394206) + (xy 100.322405 104.394205) (xy 100.322408 104.394206) (xy 100.354542 104.394202) (xy 100.417104 104.411134) + (xy 100.44493 104.427391) (xy 100.444932 104.427391) (xy 100.45108 104.430983) (xy 100.452735 104.431808) + (xy 100.466878 104.44005) (xy 100.6386 104.502121) (xy 100.818721 104.532082) (xy 100.998398 104.52899) + (xy 101.001291 104.528941) (xy 101.180266 104.492805) (xy 101.180269 104.492803) (xy 101.180274 104.492803) + (xy 101.34976 104.424862) (xy 101.504146 104.327363) (xy 101.504748 104.326808) (xy 101.63833 104.20353) + (xy 101.638332 104.203528) (xy 101.638333 104.203527) (xy 101.747885 104.057447) (xy 101.829184 103.893948) + (xy 101.879542 103.718433) (xy 101.897297 103.536703) (xy 101.88186 103.35476) (xy 101.881858 103.354754) + (xy 101.86699 103.300327) (xy 101.833743 103.178618) (xy 101.826031 103.162549) (xy 101.822896 103.156004) + (xy 101.822848 103.155746) (xy 101.806471 103.121719) (xy 101.806343 103.12093) (xy 101.794302 103.068131) + (xy 101.794302 103.067762) (xy 101.794307 103.030708) (xy 101.794306 103.030704) (xy 101.794307 103.022698) + (xy 101.794299 103.02256) (xy 101.794299 101.719279) (xy 101.796954 101.70761) (xy 101.79592 101.699292) + (xy 101.806509 101.665623) (xy 101.813098 101.651895) (xy 101.813147 101.651793) (xy 101.81805 101.6416) + (xy 101.822874 101.631574) (xy 101.822874 101.631572) (xy 101.826252 101.624551) (xy 101.826417 101.624138) + (xy 101.833783 101.608791) (xy 101.8819 101.432642) (xy 101.894791 101.280691) (xy 101.920072 101.215558) + (xy 101.976555 101.174431) (xy 102.042539 101.169559) (xy 102.072405 101.1755) (xy 102.072408 101.1755) + (xy 102.230094 101.1755) (xy 102.230095 101.175499) (xy 102.384747 101.144737) (xy 102.502842 101.095821) + (xy 102.530422 101.084397) (xy 102.530422 101.084396) (xy 102.530429 101.084394) (xy 102.661539 100.996789) + (xy 102.773039 100.885289) (xy 102.860644 100.754179) (xy 102.863018 100.748448) (xy 102.920986 100.6085) + (xy 102.920987 100.608497) (xy 102.95175 100.453842) (xy 102.95175 100.296158) (xy 102.95175 100.296155) + (xy 102.951749 100.296153) (xy 102.949606 100.285378) (xy 102.920987 100.141503) (xy 102.916488 100.130641) + (xy 102.860647 99.995827) (xy 102.86064 99.995814) (xy 102.773039 99.864711) (xy 102.773036 99.864707) + (xy 102.661542 99.753213) (xy 102.661538 99.75321) (xy 102.530435 99.665609) (xy 102.530422 99.665602) + (xy 102.384751 99.605264) (xy 102.384739 99.605261) (xy 102.230095 99.5745) (xy 102.230092 99.5745) + (xy 102.072408 99.5745) (xy 102.072405 99.5745) (xy 101.91776 99.605261) (xy 101.917748 99.605264) + (xy 101.772077 99.665602) (xy 101.772064 99.665609) (xy 101.640961 99.75321) (xy 101.640957 99.753213) + (xy 101.529463 99.864707) (xy 101.52946 99.864711) (xy 101.441859 99.995814) (xy 101.441852 99.995827) + (xy 101.381514 100.141498) (xy 101.381511 100.141508) (xy 101.367591 100.21149) (xy 101.335206 100.273401) + (xy 101.27449 100.307975) (xy 101.20472 100.304235) (xy 101.199837 100.302395) (xy 101.180291 100.29456) + (xy 101.180287 100.294558) (xy 101.180285 100.294558) (xy 101.180281 100.294557) (xy 101.180277 100.294556) + (xy 101.001292 100.258418) (xy 101.001299 100.258418) (xy 100.829594 100.255465) (xy 100.818718 100.255278) + (xy 100.818717 100.255278) (xy 100.818714 100.255278) (xy 100.638597 100.285238) (xy 100.638584 100.285241) + (xy 100.466863 100.347313) (xy 100.452348 100.35577) (xy 100.452263 100.355819) (xy 100.445176 100.35994) + (xy 100.44493 100.360008) (xy 100.417138 100.376244) (xy 100.41689 100.376389) (xy 100.414163 100.377059) + (xy 100.354546 100.393196) (xy 100.314201 100.393193) (xy 100.314097 100.3932) (xy 98.873396 100.3932) + (xy 98.865214 100.393198) (xy 98.865192 100.393193) (xy 98.835265 100.393195) (xy 98.833028 100.393195) + (xy 98.832746 100.393112) (xy 98.770493 100.376262) (xy 98.742671 100.360008) (xy 98.736605 100.356464) + (xy 98.734907 100.355617) (xy 98.722179 100.3482) (xy 98.720721 100.34735) (xy 98.548997 100.285278) + (xy 98.548991 100.285277) (xy 98.368881 100.255319) (xy 98.368878 100.255319) (xy 98.360339 100.255465) + (xy 98.186307 100.258459) (xy 98.007334 100.294594) (xy 98.007323 100.294597) (xy 97.837842 100.362537) + (xy 97.837841 100.362537) (xy 97.683461 100.460032) (xy 97.683458 100.460034) (xy 97.549267 100.583873) + (xy 97.439715 100.729954) (xy 97.35842 100.893444) (xy 97.358419 100.893447) (xy 97.358418 100.89345) + (xy 97.336549 100.969668) (xy 97.308058 101.068965) (xy 97.29045 101.2492) (xy 97.290304 101.250693) + (xy 97.2934 101.287185) (xy 97.305174 101.425971) (xy 97.30574 101.432635) (xy 97.338862 101.553887) + (xy 97.353856 101.608778) (xy 97.35386 101.608788) (xy 97.361098 101.62387) (xy 97.36114 101.623956) + (xy 97.364723 101.631438) (xy 97.364781 101.63174) (xy 97.381096 101.665623) (xy 97.381136 101.665706) + (xy 97.381281 101.6666) (xy 97.393301 101.719269) (xy 97.393301 103.068122) (xy 97.381107 103.121745) + (xy 97.380519 103.122971) (xy 97.380439 103.123138) (xy 97.361566 103.162337) (xy 97.361242 103.163139) + (xy 97.353818 103.17861) (xy 97.305701 103.354754) (xy 97.305701 103.354756) (xy 97.290265 103.536706) + (xy 92.435 103.536706) (xy 92.435 97.54655) (xy 93.412 97.54655) (xy 93.412 97.715849) (xy 93.438481 97.883047) + (xy 93.490796 98.044053) (xy 93.567652 98.194888) (xy 93.667148 98.331834) (xy 93.667152 98.331839) + (xy 93.78686 98.451547) (xy 93.786865 98.451551) (xy 93.863873 98.5075) (xy 93.923815 98.55105) + (xy 94.017141 98.598602) (xy 94.074646 98.627903) (xy 94.074648 98.627903) (xy 94.074651 98.627905) + (xy 94.15885 98.655263) (xy 94.235652 98.680218) (xy 94.402851 98.7067) (xy 94.402856 98.7067) (xy 94.572149 98.7067) + (xy 94.739347 98.680218) (xy 94.900349 98.627905) (xy 95.051185 98.55105) (xy 95.188141 98.451546) + (xy 95.307846 98.331841) (xy 95.40735 98.194885) (xy 95.484205 98.044049) (xy 95.536518 97.883047) + (xy 95.546383 97.820763) (xy 95.563 97.715849) (xy 95.563 97.54655) (xy 95.537428 97.385098) (xy 95.546382 97.315805) + (xy 95.591379 97.262353) (xy 95.65813 97.241713) (xy 95.659901 97.2417) (xy 95.898444 97.2417) (xy 95.898451 97.2417) + (xy 96.177942 97.204904) (xy 96.450239 97.131942) (xy 96.710683 97.024063) (xy 96.954817 96.883112) + (xy 97.178465 96.7115) (xy 97.3778 96.512165) (xy 97.445492 96.423946) (xy 97.50192 96.382744) (xy 97.571666 96.378589) + (xy 97.632586 96.412801) (xy 97.665339 96.474518) (xy 97.659526 96.544146) (xy 97.651255 96.561433) + (xy 97.595183 96.658551) (xy 97.595175 96.658568) (xy 97.485097 96.924321) (xy 97.410646 97.202176) + (xy 97.373101 97.487361) (xy 97.3731 97.487377) (xy 97.3731 97.775022) (xy 97.373101 97.775038) + (xy 97.410646 98.060223) (xy 97.485097 98.338078) (xy 97.595175 98.603831) (xy 97.595183 98.603848) + (xy 97.739004 98.852951) (xy 97.739015 98.852967) (xy 97.914121 99.081171) (xy 97.914127 99.081178) + (xy 98.117521 99.284572) (xy 98.117528 99.284578) (xy 98.250807 99.386846) (xy 98.345741 99.459691) + (xy 98.345748 99.459695) (xy 98.594851 99.603516) (xy 98.594856 99.603518) (xy 98.594859 99.60352) + (xy 98.594863 99.603521) (xy 98.594868 99.603524) (xy 98.637477 99.621173) (xy 98.86062 99.713602) + (xy 99.138475 99.788053) (xy 99.423671 99.8256) (xy 99.423678 99.8256) (xy 99.711322 99.8256) (xy 99.711329 99.8256) + (xy 99.996525 99.788053) (xy 100.27438 99.713602) (xy 100.540141 99.60352) (xy 100.789259 99.459691) + (xy 101.017473 99.284577) (xy 101.220877 99.081173) (xy 101.395991 98.852959) (xy 101.53982 98.603841) + (xy 101.649902 98.33808) (xy 101.724353 98.060225) (xy 101.7619 97.775029) (xy 101.7619 97.54655) + (xy 103.572 97.54655) (xy 103.572 97.715849) (xy 103.598481 97.883047) (xy 103.650796 98.044053) + (xy 103.727652 98.194888) (xy 103.827148 98.331834) (xy 103.827152 98.331839) (xy 103.94686 98.451547) + (xy 103.946865 98.451551) (xy 104.023873 98.5075) (xy 104.083815 98.55105) (xy 104.177141 98.598602) + (xy 104.234646 98.627903) (xy 104.234648 98.627903) (xy 104.234651 98.627905) (xy 104.31885 98.655263) + (xy 104.395652 98.680218) (xy 104.562851 98.7067) (xy 104.562856 98.7067) (xy 104.732149 98.7067) + (xy 104.899347 98.680218) (xy 105.060349 98.627905) (xy 105.211185 98.55105) (xy 105.348141 98.451546) + (xy 105.467846 98.331841) (xy 105.56735 98.194885) (xy 105.644205 98.044049) (xy 105.696518 97.883047) + (xy 105.706383 97.820763) (xy 105.723 97.715849) (xy 105.723 97.54655) (xy 105.696518 97.379352) + (xy 105.651796 97.241713) (xy 105.644205 97.218351) (xy 105.644203 97.218348) (xy 105.644203 97.218346) + (xy 105.600176 97.13194) (xy 105.56735 97.067515) (xy 105.535781 97.024064) (xy 105.467851 96.930565) + (xy 105.467847 96.93056) (xy 105.348139 96.810852) (xy 105.348134 96.810848) (xy 105.211188 96.711352) + (xy 105.211187 96.711351) (xy 105.211185 96.71135) (xy 105.164082 96.68735) (xy 105.060353 96.634496) + (xy 104.899347 96.582181) (xy 104.732149 96.5557) (xy 104.732144 96.5557) (xy 104.562856 96.5557) + (xy 104.562851 96.5557) (xy 104.395652 96.582181) (xy 104.234646 96.634496) (xy 104.083811 96.711352) + (xy 103.946865 96.810848) (xy 103.94686 96.810852) (xy 103.827152 96.93056) (xy 103.827148 96.930565) + (xy 103.727652 97.067511) (xy 103.650796 97.218346) (xy 103.598481 97.379352) (xy 103.572 97.54655) + (xy 101.7619 97.54655) (xy 101.7619 97.487371) (xy 101.724353 97.202175) (xy 101.649902 96.92432) + (xy 101.53982 96.658559) (xy 101.539818 96.658556) (xy 101.539816 96.658551) (xy 101.395995 96.409448) + (xy 101.395991 96.409441) (xy 101.292069 96.274007) (xy 101.220878 96.181228) (xy 101.220872 96.181221) + (xy 101.017478 95.977827) (xy 101.017471 95.977821) (xy 100.789267 95.802715) (xy 100.789265 95.802713) + (xy 100.789259 95.802709) (xy 100.789254 95.802706) (xy 100.789251 95.802704) (xy 100.540148 95.658883) + (xy 100.540131 95.658875) (xy 100.274378 95.548797) (xy 99.996523 95.474346) (xy 99.711338 95.436801) + (xy 99.711335 95.4368) (xy 99.711329 95.4368) (xy 99.423671 95.4368) (xy 99.423665 95.4368) (xy 99.423661 95.436801) + (xy 99.138476 95.474346) (xy 98.860621 95.548797) (xy 98.594868 95.658875) (xy 98.594851 95.658883) + (xy 98.345748 95.802704) (xy 98.345732 95.802715) (xy 98.117528 95.977821) (xy 98.117521 95.977827) + (xy 97.914127 96.181221) (xy 97.84293 96.274007) (xy 97.786501 96.315209) (xy 97.716755 96.319364) + (xy 97.655835 96.285151) (xy 97.623083 96.223434) (xy 97.628896 96.153807) (xy 97.637161 96.136531) + (xy 97.690363 96.044383) (xy 97.798242 95.783939) (xy 97.871204 95.511642) (xy 97.908 95.232151) + (xy 97.908 94.950249) (xy 97.871204 94.670758) (xy 97.798242 94.398461) (xy 97.791342 94.381804) + (xy 97.766349 94.321464) (xy 97.690363 94.138017) (xy 97.690361 94.138014) (xy 97.690359 94.138009) + (xy 97.549416 93.89389) (xy 97.549412 93.893883) (xy 97.3778 93.670235) (xy 97.377798 93.670233) + (xy 97.377795 93.670229) (xy 97.17847 93.470904) (xy 97.153921 93.452067) (xy 96.954817 93.299288) + (xy 96.954811 93.299284) (xy 96.954809 93.299283) (xy 96.71069 93.15834) (xy 96.710679 93.158335) + (xy 96.450243 93.050459) (xy 96.177939 92.977495) (xy 95.898458 92.9407) (xy 95.898451 92.9407) + (xy 95.616549 92.9407) (xy 95.616541 92.9407) (xy 95.33706 92.977495) (xy 95.064756 93.050459) (xy 94.80432 93.158335) + (xy 94.804309 93.15834) (xy 94.56019 93.299283) (xy 94.560184 93.299287) (xy 94.560183 93.299288) + (xy 94.498401 93.346695) (xy 94.336529 93.470904) (xy 94.137204 93.670229) (xy 94.013314 93.831685) + (xy 93.979927 93.875197) (xy 93.965589 93.893882) (xy 93.965583 93.89389) (xy 93.82464 94.138009) + (xy 93.824635 94.13802) (xy 93.716759 94.398456) (xy 93.643795 94.67076) (xy 93.607 94.950241) (xy 93.607 95.232158) + (xy 93.643795 95.511639) (xy 93.716759 95.783943) (xy 93.824635 96.044379) (xy 93.82464 96.04439) + (xy 93.965583 96.288509) (xy 93.965594 96.288525) (xy 94.096338 96.458914) (xy 94.121532 96.524083) + (xy 94.107494 96.592528) (xy 94.05868 96.642517) (xy 94.054258 96.644884) (xy 93.923813 96.71135) + (xy 93.786865 96.810848) (xy 93.78686 96.810852) (xy 93.667152 96.93056) (xy 93.667148 96.930565) + (xy 93.567652 97.067511) (xy 93.490796 97.218346) (xy 93.438481 97.379352) (xy 93.412 97.54655) + (xy 92.435 97.54655) (xy 92.435 95.946275) (xy 92.454685 95.879236) (xy 92.507489 95.833481) (xy 92.511499 95.831734) + (xy 92.586679 95.800594) (xy 92.717789 95.712989) (xy 92.829289 95.601489) (xy 92.916894 95.470379) + (xy 92.977237 95.324697) (xy 93.008 95.170042) (xy 93.008 95.012358) (xy 93.008 95.012355) (xy 93.007999 95.012353) + (xy 92.977238 94.85771) (xy 92.977237 94.857703) (xy 92.977235 94.857698) (xy 92.916897 94.712027) + (xy 92.91689 94.712014) (xy 92.829289 94.580911) (xy 92.829286 94.580907) (xy 92.717792 94.469413) + (xy 92.717788 94.46941) (xy 92.586685 94.381809) (xy 92.586672 94.381802) (xy 92.441001 94.321464) + (xy 92.440989 94.321461) (xy 92.286345 94.2907) (xy 92.286342 94.2907) (xy 92.128658 94.2907) (xy 92.128655 94.2907) + (xy 91.97401 94.321461) (xy 91.973998 94.321464) (xy 91.828327 94.381802) (xy 91.828314 94.381809) + (xy 91.697211 94.46941) (xy 91.697207 94.469413) (xy 91.585713 94.580907) (xy 91.58571 94.580911) + (xy 91.498109 94.712014) (xy 91.498102 94.712027) (xy 91.437764 94.857698) (xy 91.437761 94.85771) + (xy 91.407 95.012353) (xy 91.407 95.170046) (xy 91.437761 95.324689) (xy 91.437764 95.324701) (xy 91.498102 95.470372) + (xy 91.498109 95.470385) (xy 91.58571 95.601488) (xy 91.585713 95.601492) (xy 91.697207 95.712986) + (xy 91.697211 95.712989) (xy 91.828314 95.80059) (xy 91.828318 95.800592) (xy 91.828321 95.800594) + (xy 91.903454 95.831715) (xy 91.957856 95.875554) (xy 91.979921 95.941848) (xy 91.98 95.946275) + (xy 91.98 104.51875) (xy 91.979999 104.518753) (xy 91.98 104.528941) (xy 91.98 104.609254) (xy 91.98061 104.610906) + (xy 91.981282 104.61236) (xy 91.981474 104.612813) (xy 91.990355 104.634253) (xy 92.014635 104.692868) + (xy 92.014636 104.692869) (xy 92.014638 104.692873) (xy 92.016012 104.694247) (xy 92.016013 104.694249) + (xy 92.051501 104.729735) (xy 92.051516 104.729749) (xy 92.096066 104.774299) (xy 92.096073 104.774303) + (xy 101.010941 113.688707) (xy 101.019492 113.697257) (xy 101.025777 113.708768) (xy 101.035739 113.717299) + (xy 101.042199 113.73884) (xy 101.052979 113.75858) (xy 101.052499 113.773182) (xy 101.055811 113.784223) + (xy 101.051398 113.806747) (xy 101.05099 113.819187) (xy 101.049054 113.825922) (xy 101.015263 113.907503) + (xy 100.991985 114.024526) (xy 100.990552 114.029515) (xy 100.974497 114.054816) (xy 100.960607 114.081372) + (xy 100.955974 114.08401) (xy 100.953119 114.08851) (xy 100.925936 114.101114) (xy 100.899891 114.115946) + (xy 100.894567 114.11566) (xy 100.889732 114.117903) (xy 100.86004 114.113809) (xy 100.830121 114.112205) + (xy 100.824999 114.108978) (xy 100.820517 114.10836) (xy 100.810766 114.100009) (xy 100.783693 114.08295) + (xy 89.076918 102.376084) (xy 89.043434 102.314761) (xy 89.0406 102.288403) (xy 89.0406 99.605153) + (xy 90.0089 99.605153) (xy 90.0089 99.762846) (xy 90.039661 99.917489) (xy 90.039664 99.917501) + (xy 90.100002 100.063172) (xy 90.100009 100.063185) (xy 90.18761 100.194288) (xy 90.187613 100.194292) + (xy 90.299107 100.305786) (xy 90.299111 100.305789) (xy 90.430214 100.39339) (xy 90.430227 100.393397) + (xy 90.54425 100.440626) (xy 90.575903 100.453737) (xy 90.730553 100.484499) (xy 90.730556 100.4845) + (xy 90.730558 100.4845) (xy 90.888244 100.4845) (xy 90.888245 100.484499) (xy 91.042897 100.453737) + (xy 91.188579 100.393394) (xy 91.319689 100.305789) (xy 91.431189 100.194289) (xy 91.518794 100.063179) + (xy 91.527775 100.041498) (xy 91.573721 99.930572) (xy 91.579137 99.917497) (xy 91.6099 99.762842) + (xy 91.6099 99.605158) (xy 91.6099 99.605155) (xy 91.609899 99.605153) (xy 91.602033 99.565609) + (xy 91.579137 99.450503) (xy 91.547507 99.374141) (xy 91.518797 99.304827) (xy 91.51879 99.304814) + (xy 91.431189 99.173711) (xy 91.431186 99.173707) (xy 91.319692 99.062213) (xy 91.319688 99.06221) + (xy 91.188585 98.974609) (xy 91.188572 98.974602) (xy 91.042901 98.914264) (xy 91.042889 98.914261) + (xy 90.888245 98.8835) (xy 90.888242 98.8835) (xy 90.730558 98.8835) (xy 90.730555 98.8835) (xy 90.57591 98.914261) + (xy 90.575898 98.914264) (xy 90.430227 98.974602) (xy 90.430214 98.974609) (xy 90.299111 99.06221) + (xy 90.299107 99.062213) (xy 90.187613 99.173707) (xy 90.18761 99.173711) (xy 90.100009 99.304814) + (xy 90.100002 99.304827) (xy 90.039664 99.450498) (xy 90.039661 99.45051) (xy 90.0089 99.605153) + (xy 89.0406 99.605153) (xy 89.0406 93.562853) (xy 89.3098 93.562853) (xy 89.3098 93.720546) (xy 89.340561 93.875189) + (xy 89.340564 93.875201) (xy 89.400902 94.020872) (xy 89.400909 94.020885) (xy 89.48851 94.151988) + (xy 89.488513 94.151992) (xy 89.600007 94.263486) (xy 89.600011 94.263489) (xy 89.731114 94.35109) + (xy 89.731127 94.351097) (xy 89.876798 94.411435) (xy 89.876803 94.411437) (xy 90.031453 94.442199) + (xy 90.031456 94.4422) (xy 90.031458 94.4422) (xy 90.189144 94.4422) (xy 90.189145 94.442199) (xy 90.343797 94.411437) + (xy 90.489479 94.351094) (xy 90.620589 94.263489) (xy 90.732089 94.151989) (xy 90.819694 94.020879) + (xy 90.880037 93.875197) (xy 90.9108 93.720542) (xy 90.9108 93.562858) (xy 90.9108 93.562855) (xy 90.910799 93.562853) + (xy 90.89917 93.50439) (xy 90.880037 93.408203) (xy 90.870914 93.386177) (xy 90.819697 93.262527) + (xy 90.81969 93.262514) (xy 90.732089 93.131411) (xy 90.732086 93.131407) (xy 90.620592 93.019913) + (xy 90.620588 93.01991) (xy 90.489485 92.932309) (xy 90.489472 92.932302) (xy 90.343801 92.871964) + (xy 90.343789 92.871961) (xy 90.189145 92.8412) (xy 90.189142 92.8412) (xy 90.031458 92.8412) (xy 90.031455 92.8412) + (xy 89.87681 92.871961) (xy 89.876798 92.871964) (xy 89.731127 92.932302) (xy 89.731114 92.932309) + (xy 89.600011 93.01991) (xy 89.600007 93.019913) (xy 89.488513 93.131407) (xy 89.48851 93.131411) + (xy 89.400909 93.262514) (xy 89.400902 93.262527) (xy 89.340564 93.408198) (xy 89.340561 93.40821) + (xy 89.3098 93.562853) (xy 89.0406 93.562853) (xy 89.0406 92.410241) (xy 99.957 92.410241) (xy 99.957 92.692158) + (xy 99.993795 92.971639) (xy 100.066759 93.243943) (xy 100.174635 93.504379) (xy 100.17464 93.50439) + (xy 100.315583 93.748509) (xy 100.315588 93.748517) (xy 100.4872 93.972165) (xy 100.487204 93.97217) + (xy 100.686529 94.171495) (xy 100.686533 94.171498) (xy 100.686535 94.1715) (xy 100.910183 94.343112) + (xy 100.91019 94.343116) (xy 101.154309 94.484059) (xy 101.154314 94.484061) (xy 101.154317 94.484063) + (xy 101.414761 94.591942) (xy 101.687058 94.664904) (xy 101.966549 94.7017) (xy 101.966556 94.7017) + (xy 102.248444 94.7017) (xy 102.248451 94.7017) (xy 102.527942 94.664904) (xy 102.800239 94.591942) + (xy 103.060683 94.484063) (xy 103.304817 94.343112) (xy 103.528465 94.1715) (xy 103.7278 93.972165) + (xy 103.899412 93.748517) (xy 104.040363 93.504383) (xy 104.148242 93.243939) (xy 104.221204 92.971642) + (xy 104.258 92.692151) (xy 104.258 92.410249) (xy 104.221204 92.130758) (xy 104.148242 91.858461) + (xy 104.141342 91.841804) (xy 104.116349 91.781464) (xy 104.040363 91.598017) (xy 104.040361 91.598014) + (xy 104.040359 91.598009) (xy 103.899416 91.35389) (xy 103.899412 91.353883) (xy 103.7278 91.130235) + (xy 103.727798 91.130233) (xy 103.727795 91.130229) (xy 103.52847 90.930904) (xy 103.528465 90.9309) + (xy 103.304817 90.759288) (xy 103.304811 90.759284) (xy 103.304809 90.759283) (xy 103.06069 90.61834) + (xy 103.060679 90.618335) (xy 102.800243 90.510459) (xy 102.527939 90.437495) (xy 102.248458 90.4007) + (xy 102.248451 90.4007) (xy 101.966549 90.4007) (xy 101.966541 90.4007) (xy 101.68706 90.437495) + (xy 101.414756 90.510459) (xy 101.15432 90.618335) (xy 101.154309 90.61834) (xy 100.91019 90.759283) + (xy 100.910184 90.759287) (xy 100.910183 90.759288) (xy 100.874557 90.786625) (xy 100.686529 90.930904) + (xy 100.487204 91.130229) (xy 100.417704 91.220803) (xy 100.326612 91.339517) (xy 100.315589 91.353882) + (xy 100.315583 91.35389) (xy 100.17464 91.598009) (xy 100.174635 91.59802) (xy 100.066759 91.858456) + (xy 99.993795 92.13076) (xy 99.957 92.410241) (xy 89.0406 92.410241) (xy 89.0406 92.346695) (xy 89.060285 92.279656) + (xy 89.076919 92.259014) (xy 97.728315 83.607619) (xy 97.789638 83.574134) (xy 97.815996 83.5713) + (xy 107.701313 83.5713) (xy 107.768352 83.590985) (xy 107.814107 83.643789) (xy 107.824051 83.712947) + (xy 107.795026 83.776503) (xy 107.788979 83.782996) (xy 106.909751 84.661925) (xy 106.909752 84.661926) + (xy 106.908413 84.663265) (xy 106.902149 84.669527) (xy 106.902132 84.669535) (xy 106.870869 84.700797) + (xy 106.870866 84.700798) (xy 106.838142 84.733512) (xy 106.820825 84.775317) (xy 106.820821 84.775328) + (xy 106.803505 84.817115) (xy 106.8035 84.81714) (xy 106.8035 84.817147) (xy 106.8035 84.865378) + (xy 106.803493 84.907615) (xy 106.8035 84.907631) (xy 106.8035 89.479348) (xy 106.783815 89.546387) + (xy 106.7672 89.56701) (xy 105.494869 90.839896) (xy 105.494853 90.839913) (xy 105.465132 90.869634) + (xy 105.465106 90.869672) (xy 105.458458 90.885733) (xy 105.447878 90.911291) (xy 105.4305 90.953247) + (xy 105.4305 90.953275) (xy 105.430491 90.953297) (xy 105.430491 90.953396) (xy 105.43049 90.953399) + (xy 105.4305 90.995088) (xy 105.4305 91.696124) (xy 105.410815 91.763163) (xy 105.358011 91.808918) + (xy 105.353953 91.810685) (xy 105.278824 91.841804) (xy 105.278814 91.841809) (xy 105.147711 91.92941) + (xy 105.147707 91.929413) (xy 105.036213 92.040907) (xy 105.03621 92.040911) (xy 104.948609 92.172014) + (xy 104.948602 92.172027) (xy 104.888264 92.317698) (xy 104.888261 92.31771) (xy 104.8575 92.472353) + (xy 104.8575 92.630046) (xy 104.888261 92.784689) (xy 104.888264 92.784701) (xy 104.948602 92.930372) + (xy 104.948609 92.930385) (xy 105.03621 93.061488) (xy 105.036213 93.061492) (xy 105.147707 93.172986) + (xy 105.147711 93.172989) (xy 105.278814 93.26059) (xy 105.278827 93.260597) (xy 105.374499 93.300225) + (xy 105.424503 93.320937) (xy 105.579153 93.351699) (xy 105.579156 93.3517) (xy 105.579158 93.3517) + (xy 105.736844 93.3517) (xy 105.736845 93.351699) (xy 105.891497 93.320937) (xy 106.037179 93.260594) + (xy 106.168289 93.172989) (xy 106.279789 93.061489) (xy 106.367394 92.930379) (xy 106.427737 92.784697) + (xy 106.4585 92.630042) (xy 106.4585 92.472358) (xy 106.4585 92.472355) (xy 106.458499 92.472353) + (xy 106.434628 92.352346) (xy 106.427737 92.317703) (xy 106.409888 92.274612) (xy 106.367397 92.172027) + (xy 106.36739 92.172014) (xy 106.279789 92.040911) (xy 106.279786 92.040907) (xy 106.168292 91.929413) + (xy 106.168288 91.92941) (xy 106.037185 91.841809) (xy 106.037175 91.841804) (xy 105.962047 91.810685) + (xy 105.907644 91.766844) (xy 105.885579 91.70055) (xy 105.8855 91.696124) (xy 105.8855 91.144049) + (xy 105.905185 91.07701) (xy 105.9218 91.056387) (xy 105.933011 91.045171) (xy 106.9198 90.057951) + (xy 106.981116 90.024454) (xy 107.050808 90.029423) (xy 107.106751 90.071282) (xy 107.131182 90.136741) + (xy 107.1315 90.145614) (xy 107.1315 102.439253) (xy 107.166136 102.52287) (xy 114.971181 110.327914) + (xy 115.004666 110.389237) (xy 115.0075 110.415595) (xy 115.0075 110.745924) (xy 114.987815 110.812963) + (xy 114.935011 110.858718) (xy 114.930953 110.860485) (xy 114.855824 110.891604) (xy 114.855814 110.891609) + (xy 114.724711 110.97921) (xy 114.724707 110.979213) (xy 114.613213 111.090707) (xy 114.61321 111.090711) + (xy 114.525609 111.221814) (xy 114.525602 111.221827) (xy 114.465264 111.367498) (xy 114.465261 111.36751) + (xy 114.4345 111.522153) (xy 114.4345 111.679846) (xy 114.465261 111.834489) (xy 114.465264 111.834501) + (xy 114.525602 111.980172) (xy 114.525609 111.980185) (xy 114.61321 112.111288) (xy 114.613213 112.111292) + (xy 114.724707 112.222786) (xy 114.724711 112.222789) (xy 114.855814 112.31039) (xy 114.855827 112.310397) + (xy 115.001498 112.370735) (xy 115.001503 112.370737) (xy 115.156153 112.401499) (xy 115.156156 112.4015) + (xy 115.156158 112.4015) (xy 115.313844 112.4015) (xy 115.313845 112.401499) (xy 115.468497 112.370737) + (xy 115.614179 112.310394) (xy 115.745289 112.222789) (xy 115.793921 112.174157) (xy 115.849819 112.11826) + (xy 115.911142 112.084775) (xy 115.980834 112.089759) (xy 116.036767 112.131631) (xy 116.061184 112.197095) + (xy 116.0615 112.205941) (xy 116.0615 116.635747) (xy 116.0615 116.726253) (xy 116.077901 116.765849) + (xy 116.096136 116.80987) (xy 119.734181 120.447914) (xy 119.767666 120.509237) (xy 119.7705 120.535595) + (xy 119.7705 129.795924) (xy 119.750815 129.862963) (xy 119.698011 129.908718) (xy 119.693953 129.910485) + (xy 119.618824 129.941604) (xy 119.618814 129.941609) (xy 119.487711 130.02921) (xy 119.487707 130.029213) + (xy 119.376213 130.140707) (xy 119.37621 130.140711) (xy 119.288609 130.271814) (xy 119.288602 130.271827) + (xy 119.228264 130.417498) (xy 119.228261 130.41751) (xy 119.1975 130.572153) (xy 119.1975 130.729846) + (xy 119.228261 130.884489) (xy 119.228264 130.884501) (xy 119.288602 131.030172) (xy 119.288609 131.030185) + (xy 119.37621 131.161288) (xy 119.376213 131.161292) (xy 119.487707 131.272786) (xy 119.487711 131.272789) + (xy 119.618814 131.36039) (xy 119.618827 131.360397) (xy 119.760679 131.419153) (xy 119.764503 131.420737) + (xy 119.919153 131.451499) (xy 119.919156 131.4515) (xy 119.919158 131.4515) (xy 120.076844 131.4515) + (xy 120.076845 131.451499) (xy 120.231497 131.420737) (xy 120.377179 131.360394) (xy 120.508289 131.272789) + (xy 120.552377 131.228701) (xy 120.611819 131.16926) (xy 120.673142 131.135775) (xy 120.742834 131.140759) + (xy 120.798767 131.182631) (xy 120.823184 131.248095) (xy 120.8235 131.256941) (xy 120.8235 141.184747) + (xy 120.8235 141.275253) (xy 120.851394 141.342595) (xy 120.858136 141.35887) (xy 127.069198 147.569932) + (xy 127.102683 147.631255) (xy 127.097699 147.700947) (xy 127.055827 147.75688) (xy 126.990363 147.781297) + (xy 126.929634 147.769403) (xy 126.929433 147.76989) (xy 126.927026 147.768893) (xy 126.926668 147.768823) + (xy 126.925688 147.76834) (xy 126.925683 147.768337) (xy 126.899308 147.757412) (xy 126.665243 147.660459) + (xy 126.392939 147.587495) (xy 126.113458 147.5507) (xy 126.113451 147.5507) (xy 125.831549 147.5507) + (xy 125.831541 147.5507) (xy 125.55206 147.587495) (xy 125.279756 147.660459) (xy 125.01932 147.768335) + (xy 125.019309 147.76834) (xy 124.77519 147.909283) (xy 124.775182 147.909289) (xy 124.551529 148.080904) + (xy 124.352204 148.280229) (xy 124.180589 148.503882) (xy 124.180583 148.50389) (xy 124.03964 148.748009) + (xy 124.039635 148.74802) (xy 123.931759 149.008456) (xy 123.858795 149.28076) (xy 123.822 149.560241) + (xy 123.822 149.842158) (xy 123.858795 150.121639) (xy 123.931759 150.393943) (xy 124.039635 150.654379) + (xy 124.03964 150.65439) (xy 124.180583 150.898509) (xy 124.180588 150.898517) (xy 124.342887 151.110028) + (xy 124.352204 151.12217) (xy 124.551529 151.321495) (xy 124.551533 151.321498) (xy 124.551535 151.3215) + (xy 124.775183 151.493112) (xy 124.77519 151.493116) (xy 125.019309 151.634059) (xy 125.019314 151.634061) + (xy 125.019317 151.634063) (xy 125.279761 151.741942) (xy 125.552058 151.814904) (xy 125.831549 151.8517) + (xy 125.831556 151.8517) (xy 126.113444 151.8517) (xy 126.113451 151.8517) (xy 126.392942 151.814904) + (xy 126.665239 151.741942) (xy 126.925683 151.634063) (xy 127.169817 151.493112) (xy 127.393465 151.3215) + (xy 127.5928 151.122165) (xy 127.764412 150.898517) (xy 127.896509 150.669717) (xy 127.905359 150.65439) + (xy 127.905359 150.654389) (xy 127.905363 150.654383) (xy 128.013242 150.393939) (xy 128.086204 150.121642) + (xy 128.123 149.842151) (xy 128.123 149.560249) (xy 128.122457 149.556128) (xy 128.11079 149.467503) + (xy 128.086204 149.280758) (xy 128.013242 149.008461) (xy 127.905363 148.748017) (xy 127.905356 148.748005) + (xy 127.904876 148.74703) (xy 127.904818 148.746702) (xy 127.90381 148.744267) (xy 127.904354 148.744041) + (xy 127.892877 148.678198) (xy 127.919996 148.613806) (xy 127.977622 148.574297) (xy 128.047461 148.572216) + (xy 128.103767 148.6045) (xy 128.756503 149.257236) (xy 128.789988 149.318559) (xy 128.785004 149.388251) + (xy 128.783384 149.392368) (xy 128.752263 149.467503) (xy 128.752261 149.46751) (xy 128.7215 149.622153) + (xy 128.7215 149.779846) (xy 128.752261 149.934489) (xy 128.752264 149.934501) (xy 128.812602 150.080172) + (xy 128.812609 150.080185) (xy 128.90021 150.211288) (xy 128.900213 150.211292) (xy 129.011707 150.322786) + (xy 129.011711 150.322789) (xy 129.142814 150.41039) (xy 129.142827 150.410397) (xy 129.288498 150.470735) + (xy 129.288503 150.470737) (xy 129.443153 150.501499) (xy 129.443156 150.5015) (xy 129.443158 150.5015) + (xy 129.600844 150.5015) (xy 129.600845 150.501499) (xy 129.619658 150.497757) (xy 129.674309 150.486887) + (xy 129.7439 150.493114) (xy 129.799077 150.535977) (xy 129.822322 150.601867) (xy 129.8225 150.608504) + (xy 129.8225 154.601559) (xy 129.802815 154.668598) (xy 129.750011 154.714353) (xy 129.680853 154.724297) + (xy 129.617297 154.695272) (xy 129.579523 154.636494) (xy 129.576027 154.620957) (xy 129.561518 154.529352) + (xy 129.534836 154.447236) (xy 129.509205 154.368351) (xy 129.509203 154.368348) (xy 129.509203 154.368346) + (xy 129.478344 154.307783) (xy 129.43235 154.217515) (xy 129.400781 154.174064) (xy 129.332851 154.080565) + (xy 129.332847 154.08056) (xy 129.213139 153.960852) (xy 129.213134 153.960848) (xy 129.076188 153.861352) + (xy 129.076187 153.861351) (xy 129.076185 153.86135) (xy 129.029082 153.83735) (xy 128.925353 153.784496) + (xy 128.764347 153.732181) (xy 128.597149 153.7057) (xy 128.597144 153.7057) (xy 128.427856 153.7057) + (xy 128.427851 153.7057) (xy 128.260652 153.732181) (xy 128.099646 153.784496) (xy 127.948811 153.861352) + (xy 127.811865 153.960848) (xy 127.81186 153.960852) (xy 127.692152 154.08056) (xy 127.692148 154.080565) + (xy 127.592652 154.217511) (xy 127.515796 154.368346) (xy 127.463481 154.529352) (xy 127.437 154.69655) + (xy 127.437 154.865849) (xy 127.463481 155.033047) (xy 127.515796 155.194053) (xy 127.592652 155.344888) + (xy 127.692148 155.481834) (xy 127.692152 155.481839) (xy 127.81186 155.601547) (xy 127.811865 155.601551) + (xy 127.931317 155.688337) (xy 127.948815 155.70105) (xy 128.03409 155.7445) (xy 128.099646 155.777903) + (xy 128.099648 155.777903) (xy 128.099651 155.777905) (xy 128.18595 155.805945) (xy 128.260652 155.830218) + (xy 128.427851 155.8567) (xy 128.427856 155.8567) (xy 128.597149 155.8567) (xy 128.764347 155.830218) + (xy 128.807277 155.816269) (xy 128.925349 155.777905) (xy 129.076185 155.70105) (xy 129.213141 155.601546) + (xy 129.332846 155.481841) (xy 129.43235 155.344885) (xy 129.509205 155.194049) (xy 129.561518 155.033047) + (xy 129.576027 154.941442) (xy 129.605956 154.878307) (xy 129.665268 154.841376) (xy 129.73513 154.842374) + (xy 129.793363 154.880984) (xy 129.821477 154.944947) (xy 129.8225 154.96084) (xy 129.8225 161.114404) + (xy 129.802815 161.181443) (xy 129.786181 161.202085) (xy 122.501086 168.487181) (xy 122.439763 168.520666) + (xy 122.413405 168.5235) (xy 117.701075 168.5235) (xy 117.634036 168.503815) (xy 117.588281 168.451011) + (xy 117.586534 168.447) (xy 117.555394 168.371821) (xy 117.555392 168.371818) (xy 117.55539 168.371814) + (xy 117.467789 168.240711) (xy 117.467786 168.240707) (xy 117.356292 168.129213) (xy 117.356288 168.12921) + (xy 117.225185 168.041609) (xy 117.225172 168.041602) (xy 117.079501 167.981264) (xy 117.079489 167.981261) + (xy 116.924845 167.9505) (xy 116.924842 167.9505) (xy 116.767158 167.9505) (xy 116.767155 167.9505) + (xy 116.61251 167.981261) (xy 116.612498 167.981264) (xy 116.466827 168.041602) (xy 116.466816 168.041608) + (xy 116.432293 168.064676) (xy 116.365615 168.085553) (xy 116.298235 168.067068) (xy 116.251546 168.015088) + (xy 116.248842 168.009026) (xy 116.203827 167.90035) (xy 116.133983 167.731732) (xy 116.133865 167.731528) + (xy 115.9832 167.470568) (xy 115.79962 167.231321) (xy 115.799614 167.231314) (xy 115.586385 167.018085) + (xy 115.586378 167.018079) (xy 115.347131 166.834499) (xy 115.085971 166.683718) (xy 115.085961 166.683714) + (xy 114.80736 166.568313) (xy 114.516066 166.490261) (xy 114.217093 166.450901) (xy 114.217088 166.4509) + (xy 114.217083 166.4509) (xy 113.915517 166.4509) (xy 113.915511 166.4509) (xy 113.915506 166.450901) + (xy 113.616533 166.490261) (xy 113.325239 166.568313) (xy 113.046638 166.683714) (xy 113.046628 166.683718) + (xy 112.785468 166.834499) (xy 112.546221 167.018079) (xy 112.546214 167.018085) (xy 112.332985 167.231314) + (xy 112.332979 167.231321) (xy 112.149399 167.470568) (xy 111.998618 167.731728) (xy 111.998614 167.731738) + (xy 111.883213 168.010339) (xy 111.805161 168.301633) (xy 111.765801 168.600606) (xy 111.7658 168.600623) + (xy 111.7658 168.902176) (xy 111.765801 168.902193) (xy 111.805161 169.201166) (xy 111.883213 169.49246) + (xy 111.998614 169.771061) (xy 111.998618 169.771071) (xy 112.149399 170.032231) (xy 112.332979 170.271478) + (xy 112.332985 170.271485) (xy 112.546214 170.484714) (xy 112.546221 170.48472) (xy 112.785468 170.6683) + (xy 113.046628 170.819081) (xy 113.046629 170.819081) (xy 113.046632 170.819083) (xy 113.197525 170.881585) + (xy 113.325239 170.934486) (xy 113.32524 170.934486) (xy 113.325242 170.934487) (xy 113.616532 171.012538) + (xy 113.915517 171.0519) (xy 113.915524 171.0519) (xy 114.217076 171.0519) (xy 114.217083 171.0519) + (xy 114.516068 171.012538) (xy 114.807358 170.934487) (xy 115.085968 170.819083) (xy 115.347132 170.6683) + (xy 115.58638 170.484719) (xy 115.799619 170.27148) (xy 115.9832 170.032232) (xy 116.133983 169.771068) + (xy 116.249101 169.493147) (xy 116.292942 169.438744) (xy 116.359236 169.416679) (xy 116.426935 169.433958) + (xy 116.432552 169.437497) (xy 116.466816 169.460391) (xy 116.466827 169.460397) (xy 116.570063 169.503158) + (xy 116.612503 169.520737) (xy 116.767153 169.551499) (xy 116.767156 169.5515) (xy 116.767158 169.5515) + (xy 116.924844 169.5515) (xy 116.924845 169.551499) (xy 117.079497 169.520737) (xy 117.225179 169.460394) + (xy 117.356289 169.372789) (xy 117.467789 169.261289) (xy 117.555394 169.130179) (xy 117.586515 169.055045) + (xy 117.630354 169.000644) (xy 117.696648 168.978579) (xy 117.701075 168.9785) (xy 122.604252 168.9785) + (xy 122.604253 168.9785) (xy 122.687868 168.943865) (xy 122.68787 168.943863) (xy 122.687871 168.943863) + (xy 126.465367 165.166365) (xy 130.242866 161.388868) (xy 130.242866 161.388866) (xy 130.242868 161.388865) + (xy 130.270191 161.322898) (xy 130.2775 161.305253) (xy 130.2775 161.214747) (xy 130.2775 149.993533) + (xy 130.286939 149.94608) (xy 130.289167 149.940701) (xy 130.291737 149.934497) (xy 130.3225 149.779842) + (xy 130.3225 149.622158) (xy 130.3225 149.622155) (xy 130.322499 149.622153) (xy 130.291738 149.467505) + (xy 130.286939 149.45592) (xy 130.2775 149.408466) (xy 130.2775 148.852748) (xy 130.277499 148.852745) + (xy 130.257069 148.803423) (xy 130.257068 148.803419) (xy 130.242867 148.769135) (xy 130.242866 148.769132) + (xy 121.642819 140.169085) (xy 121.609334 140.107762) (xy 121.6065 140.081404) (xy 121.6065 129.046438) + (xy 121.606531 129.001904) (xy 121.6065 129.001829) (xy 121.6065 129.001747) (xy 121.589211 128.960008) + (xy 121.571954 128.918265) (xy 121.571896 128.918206) (xy 121.571865 128.918132) (xy 121.540137 128.886404) + (xy 121.540094 128.886326) (xy 121.540077 128.886344) (xy 120.917758 128.263165) (xy 120.884316 128.201818) + (xy 120.8815 128.175544) (xy 120.8815 127.845595) (xy 120.901185 127.778556) (xy 120.953989 127.732801) + (xy 121.023147 127.722857) (xy 121.086703 127.751882) (xy 121.093181 127.757914) (xy 125.334181 131.998914) + (xy 125.348884 132.02584) (xy 125.365477 132.05166) (xy 125.366368 132.05786) (xy 125.367666 132.060237) + (xy 125.3705 132.086595) (xy 125.3705 132.335924) (xy 125.350815 132.402963) (xy 125.298011 132.448718) + (xy 125.293953 132.450485) (xy 125.218824 132.481604) (xy 125.218814 132.481609) (xy 125.087711 132.56921) + (xy 125.087707 132.569213) (xy 124.976213 132.680707) (xy 124.97621 132.680711) (xy 124.888609 132.811814) + (xy 124.888602 132.811827) (xy 124.828264 132.957498) (xy 124.828261 132.95751) (xy 124.7975 133.112153) + (xy 124.7975 133.269846) (xy 124.828261 133.424489) (xy 124.828264 133.424501) (xy 124.888602 133.570172) + (xy 124.888609 133.570185) (xy 124.97621 133.701288) (xy 124.976213 133.701292) (xy 125.087707 133.812786) + (xy 125.087711 133.812789) (xy 125.218814 133.90039) (xy 125.218818 133.900392) (xy 125.218821 133.900394) + (xy 125.293954 133.931515) (xy 125.348356 133.975354) (xy 125.370421 134.041648) (xy 125.3705 134.046075) + (xy 125.3705 142.716941) (xy 125.370498 142.761241) (xy 125.3705 142.761245) (xy 125.3705 142.761253) + (xy 125.372556 142.766218) (xy 125.372557 142.766219) (xy 125.387706 142.802791) (xy 125.387707 142.802799) + (xy 125.38771 142.802799) (xy 125.38771 142.8028) (xy 125.405128 142.844858) (xy 125.405129 142.844859) + (xy 125.40513 142.844861) (xy 125.405133 142.844866) (xy 125.433687 142.87342) (xy 125.43369 142.873426) + (xy 125.433692 142.873425) (xy 134.356526 151.797196) (xy 134.390008 151.858521) (xy 134.385019 151.928213) + (xy 134.383402 151.932324) (xy 134.352263 152.007503) (xy 134.352261 152.00751) (xy 134.3215 152.162153) + (xy 134.3215 152.319846) (xy 134.352261 152.474489) (xy 134.352264 152.474501) (xy 134.412602 152.620172) + (xy 134.412609 152.620185) (xy 134.50021 152.751288) (xy 134.500213 152.751292) (xy 134.611707 152.862786) + (xy 134.611711 152.862789) (xy 134.742814 152.95039) (xy 134.742827 152.950397) (xy 134.859206 152.998602) + (xy 134.888503 153.010737) (xy 135.043153 153.041499) (xy 135.043156 153.0415) (xy 135.043158 153.0415) + (xy 135.200844 153.0415) (xy 135.200845 153.041499) (xy 135.355497 153.010737) (xy 135.364046 153.007195) + (xy 135.433515 152.999726) (xy 135.495994 153.031) (xy 135.531648 153.091088) (xy 135.5355 153.121756) + (xy 135.5355 165.912875) (xy 135.515815 165.979914) (xy 135.463011 166.025669) (xy 135.393853 166.035613) + (xy 135.330297 166.006588) (xy 135.294459 165.95383) (xy 135.280128 165.912875) (xy 135.271351 165.887792) + (xy 135.149495 165.634755) (xy 135.000073 165.396952) (xy 134.824966 165.177375) (xy 134.626375 164.978784) + (xy 134.406798 164.803677) (xy 134.225211 164.689578) (xy 134.168992 164.654253) (xy 133.915961 164.5324) + (xy 133.650879 164.439643) (xy 133.650867 164.439639) (xy 133.377062 164.377145) (xy 133.377044 164.377142) + (xy 133.097981 164.3457) (xy 133.097975 164.3457) (xy 132.817125 164.3457) (xy 132.817118 164.3457) + (xy 132.538055 164.377142) (xy 132.538037 164.377145) (xy 132.264232 164.439639) (xy 132.26422 164.439643) + (xy 131.999138 164.5324) (xy 131.746107 164.654253) (xy 131.508303 164.803676) (xy 131.288725 164.978783) + (xy 131.090133 165.177375) (xy 130.915026 165.396953) (xy 130.765603 165.634757) (xy 130.64375 165.887788) + (xy 130.550993 166.15287) (xy 130.550989 166.152882) (xy 130.488495 166.426687) (xy 130.488492 166.426705) + (xy 130.45705 166.705768) (xy 130.45705 166.986631) (xy 130.488492 167.265694) (xy 130.488495 167.265712) + (xy 130.550989 167.539517) (xy 130.550993 167.539529) (xy 130.64375 167.804611) (xy 130.765603 168.057642) + (xy 130.777769 168.077004) (xy 130.915027 168.295448) (xy 131.090134 168.515025) (xy 131.288725 168.713616) + (xy 131.508302 168.888723) (xy 131.746105 169.038145) (xy 131.999142 169.160001) (xy 132.116791 169.201168) + (xy 132.26422 169.252756) (xy 132.264232 169.25276) (xy 132.538041 169.315255) (xy 132.538047 169.315255) + (xy 132.538055 169.315257) (xy 132.724097 169.336218) (xy 132.817119 169.346699) (xy 132.817122 169.3467) + (xy 132.817125 169.3467) (xy 133.097978 169.3467) (xy 133.097979 169.346699) (xy 133.248704 169.329717) + (xy 133.377044 169.315257) (xy 133.377049 169.315256) (xy 133.377059 169.315255) (xy 133.650868 169.25276) + (xy 133.915958 169.160001) (xy 134.168995 169.038145) (xy 134.406798 168.888723) (xy 134.626375 168.713616) + (xy 134.824966 168.515025) (xy 135.000073 168.295448) (xy 135.149495 168.057645) (xy 135.271351 167.804608) + (xy 135.294459 167.738568) (xy 135.33518 167.681793) (xy 135.400133 167.656046) (xy 135.468695 167.669502) + (xy 135.519097 167.71789) (xy 135.5355 167.779524) (xy 135.5355 168.726924) (xy 135.515815 168.793963) + (xy 135.463011 168.839718) (xy 135.458953 168.841485) (xy 135.383824 168.872604) (xy 135.383814 168.872609) + (xy 135.252711 168.96021) (xy 135.252707 168.960213) (xy 135.141213 169.071707) (xy 135.14121 169.071711) + (xy 135.053609 169.202814) (xy 135.053602 169.202827) (xy 134.993264 169.348498) (xy 134.993261 169.34851) + (xy 134.9625 169.503153) (xy 134.9625 169.660846) (xy 134.993261 169.815489) (xy 134.993264 169.815501) + (xy 135.053602 169.961172) (xy 135.053609 169.961185) (xy 135.14121 170.092288) (xy 135.141213 170.092292) + (xy 135.252707 170.203786) (xy 135.252711 170.203789) (xy 135.383814 170.29139) (xy 135.383827 170.291397) + (xy 135.496387 170.33802) (xy 135.529503 170.351737) (xy 135.628833 170.371495) (xy 135.684153 170.382499) + (xy 135.684156 170.3825) (xy 135.684158 170.3825) (xy 135.841844 170.3825) (xy 135.841845 170.382499) + (xy 135.996497 170.351737) (xy 136.142179 170.291394) (xy 136.273289 170.203789) (xy 136.384789 170.092289) + (xy 136.472394 169.961179) (xy 136.532737 169.815497) (xy 136.5635 169.660842) (xy 136.5635 169.503158) + (xy 136.5635 169.503155) (xy 136.563499 169.503153) (xy 136.551721 169.443943) (xy 136.532737 169.348503) + (xy 136.518966 169.315257) (xy 136.472397 169.202827) (xy 136.47239 169.202814) (xy 136.384789 169.071711) + (xy 136.384786 169.071707) (xy 136.273292 168.960213) (xy 136.273288 168.96021) (xy 136.142185 168.872609) + (xy 136.142175 168.872604) (xy 136.067047 168.841485) (xy 136.012644 168.797644) (xy 135.990579 168.73135) + (xy 135.9905 168.726924) (xy 135.9905 160.841506) (xy 140.244965 160.841506) (xy 140.255149 160.945747) + (xy 140.262721 161.023242) (xy 140.274381 161.06388) (xy 140.31308 161.198761) (xy 140.39438 161.362263) + (xy 140.394381 161.362265) (xy 140.394383 161.362268) (xy 140.449367 161.435585) (xy 140.503938 161.508352) + (xy 140.503939 161.508353) (xy 140.50394 161.508354) (xy 140.638132 161.632195) (xy 140.792525 161.729697) + (xy 140.927677 161.783874) (xy 140.962014 161.797639) (xy 140.962015 161.797639) (xy 140.962017 161.79764) + (xy 141.141008 161.833779) (xy 141.141002 161.833779) (xy 141.157322 161.834059) (xy 141.323584 161.83692) + (xy 141.503712 161.806958) (xy 141.600068 161.772128) (xy 141.675436 161.744885) (xy 141.675437 161.744883) + (xy 141.67544 161.744883) (xy 141.690475 161.73612) (xy 141.697159 161.732235) (xy 141.69745 161.732157) + (xy 141.725333 161.71586) (xy 141.725451 161.715792) (xy 141.728668 161.715001) (xy 141.787762 161.698999) + (xy 143.268892 161.698999) (xy 143.269014 161.699006) (xy 143.277105 161.699005) (xy 143.277108 161.699006) + (xy 143.309242 161.699002) (xy 143.371804 161.715934) (xy 143.39963 161.732191) (xy 143.399632 161.732191) + (xy 143.40578 161.735783) (xy 143.407435 161.736608) (xy 143.421578 161.74485) (xy 143.5933 161.806921) + (xy 143.773421 161.836882) (xy 143.953098 161.83379) (xy 143.955991 161.833741) (xy 144.134966 161.797605) + (xy 144.134969 161.797603) (xy 144.134974 161.797603) (xy 144.30446 161.729662) (xy 144.458846 161.632163) + (xy 144.474033 161.618148) (xy 144.59303 161.50833) (xy 144.593032 161.508328) (xy 144.593033 161.508327) + (xy 144.702585 161.362247) (xy 144.783884 161.198748) (xy 144.834242 161.023233) (xy 144.851997 160.841506) + (xy 159.294965 160.841506) (xy 159.305149 160.945747) (xy 159.312721 161.023242) (xy 159.324381 161.06388) + (xy 159.36308 161.198761) (xy 159.44438 161.362263) (xy 159.444381 161.362265) (xy 159.444383 161.362268) + (xy 159.499367 161.435585) (xy 159.553938 161.508352) (xy 159.553939 161.508353) (xy 159.55394 161.508354) + (xy 159.688132 161.632195) (xy 159.842525 161.729697) (xy 159.977677 161.783874) (xy 160.012014 161.797639) + (xy 160.012015 161.797639) (xy 160.012017 161.79764) (xy 160.191008 161.833779) (xy 160.191002 161.833779) + (xy 160.207322 161.834059) (xy 160.373584 161.83692) (xy 160.553712 161.806958) (xy 160.650068 161.772128) + (xy 160.725436 161.744885) (xy 160.725437 161.744883) (xy 160.72544 161.744883) (xy 160.740475 161.73612) + (xy 160.747159 161.732235) (xy 160.74745 161.732157) (xy 160.775333 161.71586) (xy 160.775451 161.715792) + (xy 160.778668 161.715001) (xy 160.837762 161.698999) (xy 162.318892 161.698999) (xy 162.319014 161.699006) + (xy 162.327105 161.699005) (xy 162.327108 161.699006) (xy 162.359242 161.699002) (xy 162.421804 161.715934) + (xy 162.44963 161.732191) (xy 162.449632 161.732191) (xy 162.45578 161.735783) (xy 162.457435 161.736608) + (xy 162.471578 161.74485) (xy 162.6433 161.806921) (xy 162.823421 161.836882) (xy 163.003098 161.83379) + (xy 163.005991 161.833741) (xy 163.184966 161.797605) (xy 163.184969 161.797603) (xy 163.184974 161.797603) + (xy 163.35446 161.729662) (xy 163.508846 161.632163) (xy 163.524033 161.618148) (xy 163.64303 161.50833) + (xy 163.643032 161.508328) (xy 163.643033 161.508327) (xy 163.752585 161.362247) (xy 163.833884 161.198748) + (xy 163.884242 161.023233) (xy 163.901997 160.841503) (xy 163.88656 160.65956) (xy 163.886558 160.659554) + (xy 163.873871 160.613109) (xy 163.838443 160.483418) (xy 163.830683 160.467249) (xy 163.827596 160.460804) + (xy 163.827548 160.460546) (xy 163.811171 160.426519) (xy 163.811043 160.42573) (xy 163.799002 160.372931) + (xy 163.799002 160.372689) (xy 163.799007 160.335508) (xy 163.799006 160.335504) (xy 163.799007 160.327498) + (xy 163.798999 160.32736) (xy 163.798999 159.024077) (xy 163.801654 159.012408) (xy 163.80062 159.004094) + (xy 163.811205 158.970428) (xy 163.817511 158.95729) (xy 163.827574 158.936374) (xy 163.827574 158.936369) + (xy 163.83096 158.929333) (xy 163.831125 158.928922) (xy 163.831246 158.92867) (xy 163.838483 158.913591) + (xy 163.8866 158.737442) (xy 163.902037 158.555493) (xy 163.884281 158.373755) (xy 163.83392 158.198234) + (xy 163.752618 158.03473) (xy 163.649153 157.896767) (xy 163.643062 157.888645) (xy 163.641139 157.88687) + (xy 163.508869 157.764804) (xy 163.508866 157.764802) (xy 163.508865 157.764801) (xy 163.508862 157.764799) + (xy 163.354477 157.667301) (xy 163.184987 157.599358) (xy 163.184977 157.599356) (xy 163.005992 157.563218) + (xy 163.005999 157.563218) (xy 162.834294 157.560265) (xy 162.823418 157.560078) (xy 162.823417 157.560078) + (xy 162.823414 157.560078) (xy 162.643297 157.590038) (xy 162.643284 157.590041) (xy 162.471563 157.652113) + (xy 162.457048 157.66057) (xy 162.456963 157.660619) (xy 162.449876 157.66474) (xy 162.44963 157.664808) + (xy 162.421838 157.681044) (xy 162.42159 157.681189) (xy 162.418863 157.681859) (xy 162.359246 157.697996) + (xy 162.318901 157.697993) (xy 162.318797 157.698) (xy 160.878096 157.698) (xy 160.869914 157.697998) + (xy 160.869892 157.697993) (xy 160.839965 157.697995) (xy 160.837728 157.697995) (xy 160.837446 157.697912) + (xy 160.775193 157.681062) (xy 160.747371 157.664808) (xy 160.741305 157.661264) (xy 160.739607 157.660417) + (xy 160.732257 157.656134) (xy 160.725421 157.65215) (xy 160.553697 157.590078) (xy 160.553691 157.590077) + (xy 160.373581 157.560119) (xy 160.373578 157.560119) (xy 160.365039 157.560265) (xy 160.191007 157.563259) + (xy 160.012034 157.599394) (xy 160.012023 157.599397) (xy 159.842542 157.667337) (xy 159.842541 157.667337) + (xy 159.688161 157.764832) (xy 159.688158 157.764834) (xy 159.553967 157.888673) (xy 159.444415 158.034754) + (xy 159.36312 158.198244) (xy 159.363119 158.198247) (xy 159.363118 158.19825) (xy 159.355382 158.225213) + (xy 159.312758 158.373765) (xy 159.295916 158.546155) (xy 159.295004 158.555493) (xy 159.29688 158.577602) + (xy 159.308517 158.714778) (xy 159.31044 158.737435) (xy 159.338707 158.840914) (xy 159.358556 158.913578) + (xy 159.35856 158.913588) (xy 159.365798 158.92867) (xy 159.36584 158.928756) (xy 159.369423 158.936238) + (xy 159.369481 158.93654) (xy 159.385797 158.970425) (xy 159.385836 158.970506) (xy 159.385981 158.9714) + (xy 159.398001 159.024069) (xy 159.398001 160.372922) (xy 159.385807 160.426545) (xy 159.385219 160.427771) + (xy 159.385139 160.427938) (xy 159.366266 160.467137) (xy 159.365942 160.467939) (xy 159.358518 160.48341) + (xy 159.310401 160.659554) (xy 159.310401 160.659556) (xy 159.294965 160.841506) (xy 144.851997 160.841506) + (xy 144.851997 160.841503) (xy 144.83656 160.65956) (xy 144.836558 160.659554) (xy 144.823871 160.613109) + (xy 144.788443 160.483418) (xy 144.780683 160.467249) (xy 144.777596 160.460804) (xy 144.777548 160.460546) + (xy 144.761171 160.426519) (xy 144.761043 160.42573) (xy 144.749002 160.372931) (xy 144.749002 160.372689) + (xy 144.749007 160.335508) (xy 144.749006 160.335504) (xy 144.749007 160.327498) (xy 144.748999 160.32736) + (xy 144.748999 159.024077) (xy 144.751654 159.012408) (xy 144.75062 159.004094) (xy 144.761205 158.970428) + (xy 144.767511 158.95729) (xy 144.777574 158.936374) (xy 144.777574 158.936369) (xy 144.78096 158.929333) + (xy 144.781125 158.928922) (xy 144.781246 158.92867) (xy 144.788483 158.913591) (xy 144.8366 158.737442) + (xy 144.852037 158.555493) (xy 144.834281 158.373755) (xy 144.78392 158.198234) (xy 144.702618 158.03473) + (xy 144.599153 157.896767) (xy 144.593062 157.888645) (xy 144.591139 157.88687) (xy 144.458869 157.764804) + (xy 144.458866 157.764802) (xy 144.458865 157.764801) (xy 144.458862 157.764799) (xy 144.304477 157.667301) + (xy 144.134987 157.599358) (xy 144.134977 157.599356) (xy 143.955992 157.563218) (xy 143.955999 157.563218) + (xy 143.784294 157.560265) (xy 143.773418 157.560078) (xy 143.773417 157.560078) (xy 143.773414 157.560078) + (xy 143.593297 157.590038) (xy 143.593284 157.590041) (xy 143.421563 157.652113) (xy 143.407048 157.66057) + (xy 143.406963 157.660619) (xy 143.399876 157.66474) (xy 143.39963 157.664808) (xy 143.371838 157.681044) + (xy 143.37159 157.681189) (xy 143.368863 157.681859) (xy 143.309246 157.697996) (xy 143.268901 157.697993) + (xy 143.268797 157.698) (xy 141.828096 157.698) (xy 141.819914 157.697998) (xy 141.819892 157.697993) + (xy 141.789965 157.697995) (xy 141.787728 157.697995) (xy 141.787446 157.697912) (xy 141.725193 157.681062) + (xy 141.697371 157.664808) (xy 141.691305 157.661264) (xy 141.689607 157.660417) (xy 141.682257 157.656134) + (xy 141.675421 157.65215) (xy 141.503697 157.590078) (xy 141.503691 157.590077) (xy 141.323581 157.560119) + (xy 141.323578 157.560119) (xy 141.315039 157.560265) (xy 141.141007 157.563259) (xy 140.962034 157.599394) + (xy 140.962023 157.599397) (xy 140.792542 157.667337) (xy 140.792541 157.667337) (xy 140.638161 157.764832) + (xy 140.638158 157.764834) (xy 140.503967 157.888673) (xy 140.394415 158.034754) (xy 140.31312 158.198244) + (xy 140.313119 158.198247) (xy 140.313118 158.19825) (xy 140.305382 158.225213) (xy 140.262758 158.373765) + (xy 140.245916 158.546155) (xy 140.245004 158.555493) (xy 140.24688 158.577602) (xy 140.258517 158.714778) + (xy 140.26044 158.737435) (xy 140.288707 158.840914) (xy 140.308556 158.913578) (xy 140.30856 158.913588) + (xy 140.315798 158.92867) (xy 140.31584 158.928756) (xy 140.319423 158.936238) (xy 140.319481 158.93654) + (xy 140.335797 158.970425) (xy 140.335836 158.970506) (xy 140.335981 158.9714) (xy 140.348001 159.024069) + (xy 140.348001 160.372922) (xy 140.335807 160.426545) (xy 140.335219 160.427771) (xy 140.335139 160.427938) + (xy 140.316266 160.467137) (xy 140.315942 160.467939) (xy 140.308518 160.48341) (xy 140.260401 160.659554) + (xy 140.260401 160.659556) (xy 140.244965 160.841506) (xy 135.9905 160.841506) (xy 135.9905 154.69655) + (xy 136.327 154.69655) (xy 136.327 154.865849) (xy 136.353481 155.033047) (xy 136.405796 155.194053) + (xy 136.482652 155.344888) (xy 136.582148 155.481834) (xy 136.582152 155.481839) (xy 136.70186 155.601547) + (xy 136.701865 155.601551) (xy 136.821317 155.688337) (xy 136.838815 155.70105) (xy 136.92409 155.7445) + (xy 136.989646 155.777903) (xy 136.989648 155.777903) (xy 136.989651 155.777905) (xy 137.07595 155.805945) + (xy 137.150652 155.830218) (xy 137.317851 155.8567) (xy 137.317856 155.8567) (xy 137.487149 155.8567) + (xy 137.654347 155.830218) (xy 137.697277 155.816269) (xy 137.815349 155.777905) (xy 137.966185 155.70105) + (xy 138.103141 155.601546) (xy 138.222846 155.481841) (xy 138.32235 155.344885) (xy 138.399205 155.194049) + (xy 138.451518 155.033047) (xy 138.478 154.865849) (xy 138.478 154.69655) (xy 138.452428 154.535098) + (xy 138.461382 154.465805) (xy 138.506379 154.412353) (xy 138.57313 154.391713) (xy 138.574901 154.3917) + (xy 138.813444 154.3917) (xy 138.813451 154.3917) (xy 139.092942 154.354904) (xy 139.365239 154.281942) + (xy 139.625683 154.174063) (xy 139.869817 154.033112) (xy 140.093465 153.8615) (xy 140.2928 153.662165) + (xy 140.360492 153.573946) (xy 140.41692 153.532744) (xy 140.486666 153.528589) (xy 140.547586 153.562801) + (xy 140.580339 153.624518) (xy 140.574526 153.694146) (xy 140.566255 153.711433) (xy 140.510183 153.808551) + (xy 140.510175 153.808568) (xy 140.400097 154.074321) (xy 140.325646 154.352176) (xy 140.288101 154.637361) + (xy 140.2881 154.637377) (xy 140.2881 154.925022) (xy 140.288101 154.925038) (xy 140.325646 155.210223) + (xy 140.400097 155.488078) (xy 140.510175 155.753831) (xy 140.510183 155.753848) (xy 140.654004 156.002951) + (xy 140.654015 156.002967) (xy 140.829121 156.231171) (xy 140.829127 156.231178) (xy 141.032521 156.434572) + (xy 141.032527 156.434577) (xy 141.260741 156.609691) (xy 141.260748 156.609695) (xy 141.509851 156.753516) + (xy 141.509856 156.753518) (xy 141.509859 156.75352) (xy 141.509863 156.753521) (xy 141.509868 156.753524) + (xy 141.523108 156.759008) (xy 141.77562 156.863602) (xy 142.053475 156.938053) (xy 142.338671 156.9756) + (xy 142.338678 156.9756) (xy 142.626322 156.9756) (xy 142.626329 156.9756) (xy 142.911525 156.938053) + (xy 143.18938 156.863602) (xy 143.455141 156.75352) (xy 143.704259 156.609691) (xy 143.932473 156.434577) + (xy 144.135877 156.231173) (xy 144.310991 156.002959) (xy 144.45482 155.753841) (xy 144.564902 155.48808) + (xy 144.639353 155.210225) (xy 144.6769 154.925029) (xy 144.6769 154.69655) (xy 146.487 154.69655) + (xy 146.487 154.865849) (xy 146.513481 155.033047) (xy 146.565796 155.194053) (xy 146.642652 155.344888) + (xy 146.742148 155.481834) (xy 146.742152 155.481839) (xy 146.86186 155.601547) (xy 146.861865 155.601551) + (xy 146.981317 155.688337) (xy 146.998815 155.70105) (xy 147.08409 155.7445) (xy 147.149646 155.777903) + (xy 147.149648 155.777903) (xy 147.149651 155.777905) (xy 147.23595 155.805945) (xy 147.310652 155.830218) + (xy 147.477851 155.8567) (xy 147.477856 155.8567) (xy 147.647149 155.8567) (xy 147.814347 155.830218) + (xy 147.857277 155.816269) (xy 147.975349 155.777905) (xy 148.126185 155.70105) (xy 148.263141 155.601546) + (xy 148.382846 155.481841) (xy 148.48235 155.344885) (xy 148.559205 155.194049) (xy 148.611518 155.033047) + (xy 148.638 154.865849) (xy 148.638 154.69655) (xy 155.377 154.69655) (xy 155.377 154.865849) (xy 155.403481 155.033047) + (xy 155.455796 155.194053) (xy 155.532652 155.344888) (xy 155.632148 155.481834) (xy 155.632152 155.481839) + (xy 155.75186 155.601547) (xy 155.751865 155.601551) (xy 155.871317 155.688337) (xy 155.888815 155.70105) + (xy 155.97409 155.7445) (xy 156.039646 155.777903) (xy 156.039648 155.777903) (xy 156.039651 155.777905) + (xy 156.12595 155.805945) (xy 156.200652 155.830218) (xy 156.367851 155.8567) (xy 156.367856 155.8567) + (xy 156.537149 155.8567) (xy 156.704347 155.830218) (xy 156.747277 155.816269) (xy 156.865349 155.777905) + (xy 157.016185 155.70105) (xy 157.153141 155.601546) (xy 157.272846 155.481841) (xy 157.37235 155.344885) + (xy 157.449205 155.194049) (xy 157.501518 155.033047) (xy 157.528 154.865849) (xy 157.528 154.69655) + (xy 157.502428 154.535098) (xy 157.511382 154.465805) (xy 157.556379 154.412353) (xy 157.62313 154.391713) + (xy 157.624901 154.3917) (xy 157.863444 154.3917) (xy 157.863451 154.3917) (xy 158.142942 154.354904) + (xy 158.415239 154.281942) (xy 158.675683 154.174063) (xy 158.919817 154.033112) (xy 159.143465 153.8615) + (xy 159.3428 153.662165) (xy 159.410492 153.573946) (xy 159.46692 153.532744) (xy 159.536666 153.528589) + (xy 159.597586 153.562801) (xy 159.630339 153.624518) (xy 159.624526 153.694146) (xy 159.616255 153.711433) + (xy 159.560183 153.808551) (xy 159.560175 153.808568) (xy 159.450097 154.074321) (xy 159.375646 154.352176) + (xy 159.338101 154.637361) (xy 159.3381 154.637377) (xy 159.3381 154.925022) (xy 159.338101 154.925038) + (xy 159.375646 155.210223) (xy 159.450097 155.488078) (xy 159.560175 155.753831) (xy 159.560183 155.753848) + (xy 159.704004 156.002951) (xy 159.704015 156.002967) (xy 159.879121 156.231171) (xy 159.879127 156.231178) + (xy 160.082521 156.434572) (xy 160.082527 156.434577) (xy 160.310741 156.609691) (xy 160.310748 156.609695) + (xy 160.559851 156.753516) (xy 160.559856 156.753518) (xy 160.559859 156.75352) (xy 160.559863 156.753521) + (xy 160.559868 156.753524) (xy 160.573108 156.759008) (xy 160.82562 156.863602) (xy 161.103475 156.938053) + (xy 161.388671 156.9756) (xy 161.388678 156.9756) (xy 161.676322 156.9756) (xy 161.676329 156.9756) + (xy 161.961525 156.938053) (xy 162.23938 156.863602) (xy 162.505141 156.75352) (xy 162.754259 156.609691) + (xy 162.982473 156.434577) (xy 163.185877 156.231173) (xy 163.360991 156.002959) (xy 163.50482 155.753841) + (xy 163.614902 155.48808) (xy 163.689353 155.210225) (xy 163.7269 154.925029) (xy 163.7269 154.69655) + (xy 165.537 154.69655) (xy 165.537 154.865849) (xy 165.563481 155.033047) (xy 165.615796 155.194053) + (xy 165.692652 155.344888) (xy 165.792148 155.481834) (xy 165.792152 155.481839) (xy 165.91186 155.601547) + (xy 165.911865 155.601551) (xy 166.031317 155.688337) (xy 166.048815 155.70105) (xy 166.13409 155.7445) + (xy 166.199646 155.777903) (xy 166.199648 155.777903) (xy 166.199651 155.777905) (xy 166.28595 155.805945) + (xy 166.360652 155.830218) (xy 166.527851 155.8567) (xy 166.527856 155.8567) (xy 166.697149 155.8567) + (xy 166.864347 155.830218) (xy 166.907277 155.816269) (xy 167.025349 155.777905) (xy 167.176185 155.70105) + (xy 167.313141 155.601546) (xy 167.432846 155.481841) (xy 167.53235 155.344885) (xy 167.609205 155.194049) + (xy 167.661518 155.033047) (xy 167.688 154.865849) (xy 167.688 154.69655) (xy 167.661518 154.529352) + (xy 167.634836 154.447236) (xy 167.609205 154.368351) (xy 167.609203 154.368348) (xy 167.609203 154.368346) + (xy 167.578344 154.307783) (xy 167.53235 154.217515) (xy 167.500781 154.174064) (xy 167.432851 154.080565) + (xy 167.432847 154.08056) (xy 167.313139 153.960852) (xy 167.313134 153.960848) (xy 167.176188 153.861352) + (xy 167.176187 153.861351) (xy 167.176185 153.86135) (xy 167.129082 153.83735) (xy 167.025353 153.784496) + (xy 166.864347 153.732181) (xy 166.697149 153.7057) (xy 166.697144 153.7057) (xy 166.527856 153.7057) + (xy 166.527851 153.7057) (xy 166.360652 153.732181) (xy 166.199646 153.784496) (xy 166.048811 153.861352) + (xy 165.911865 153.960848) (xy 165.91186 153.960852) (xy 165.792152 154.08056) (xy 165.792148 154.080565) + (xy 165.692652 154.217511) (xy 165.615796 154.368346) (xy 165.563481 154.529352) (xy 165.537 154.69655) + (xy 163.7269 154.69655) (xy 163.7269 154.637371) (xy 163.689353 154.352175) (xy 163.614902 154.07432) + (xy 163.50482 153.808559) (xy 163.504818 153.808556) (xy 163.504816 153.808551) (xy 163.360995 153.559448) + (xy 163.360991 153.559441) (xy 163.257069 153.424007) (xy 163.185878 153.331228) (xy 163.185872 153.331221) + (xy 162.982478 153.127827) (xy 162.982471 153.127821) (xy 162.754267 152.952715) (xy 162.754265 152.952713) + (xy 162.754259 152.952709) (xy 162.754254 152.952706) (xy 162.754251 152.952704) (xy 162.505148 152.808883) + (xy 162.505131 152.808875) (xy 162.239378 152.698797) (xy 161.961523 152.624346) (xy 161.676338 152.586801) + (xy 161.676335 152.5868) (xy 161.676329 152.5868) (xy 161.388671 152.5868) (xy 161.388665 152.5868) + (xy 161.388661 152.586801) (xy 161.103476 152.624346) (xy 160.825621 152.698797) (xy 160.559868 152.808875) + (xy 160.559851 152.808883) (xy 160.310748 152.952704) (xy 160.310732 152.952715) (xy 160.082528 153.127821) + (xy 160.082521 153.127827) (xy 159.879127 153.331221) (xy 159.80793 153.424007) (xy 159.751501 153.465209) + (xy 159.681755 153.469364) (xy 159.620835 153.435151) (xy 159.588083 153.373434) (xy 159.593896 153.303807) + (xy 159.602161 153.286531) (xy 159.655363 153.194383) (xy 159.763242 152.933939) (xy 159.836204 152.661642) + (xy 159.873 152.382151) (xy 159.873 152.100249) (xy 159.836204 151.820758) (xy 159.763242 151.548461) + (xy 159.75626 151.531606) (xy 159.731265 151.471261) (xy 159.655363 151.288017) (xy 159.65536 151.288011) + (xy 159.655359 151.288009) (xy 159.514416 151.04389) (xy 159.514412 151.043883) (xy 159.3428 150.820235) + (xy 159.342798 150.820233) (xy 159.342795 150.820229) (xy 159.14347 150.620904) (xy 159.118661 150.601867) + (xy 158.919817 150.449288) (xy 158.919811 150.449284) (xy 158.919809 150.449283) (xy 158.67569 150.30834) + (xy 158.675679 150.308335) (xy 158.415243 150.200459) (xy 158.142939 150.127495) (xy 157.863458 150.0907) + (xy 157.863451 150.0907) (xy 157.581549 150.0907) (xy 157.581541 150.0907) (xy 157.30206 150.127495) + (xy 157.029756 150.200459) (xy 156.76932 150.308335) (xy 156.769309 150.30834) (xy 156.52519 150.449283) + (xy 156.525182 150.449289) (xy 156.301529 150.620904) (xy 156.102204 150.820229) (xy 155.930589 151.043882) + (xy 155.930583 151.04389) (xy 155.78964 151.288009) (xy 155.789635 151.28802) (xy 155.681759 151.548456) + (xy 155.608795 151.82076) (xy 155.572 152.100241) (xy 155.572 152.382158) (xy 155.608795 152.661639) + (xy 155.681759 152.933943) (xy 155.789635 153.194379) (xy 155.78964 153.19439) (xy 155.930583 153.438509) + (xy 155.930594 153.438525) (xy 156.061338 153.608914) (xy 156.086532 153.674083) (xy 156.072494 153.742528) + (xy 156.02368 153.792517) (xy 156.019258 153.794884) (xy 155.888813 153.86135) (xy 155.751865 153.960848) + (xy 155.75186 153.960852) (xy 155.632152 154.08056) (xy 155.632148 154.080565) (xy 155.532652 154.217511) + (xy 155.455796 154.368346) (xy 155.403481 154.529352) (xy 155.377 154.69655) (xy 148.638 154.69655) + (xy 148.611518 154.529352) (xy 148.584836 154.447236) (xy 148.559205 154.368351) (xy 148.559203 154.368348) + (xy 148.559203 154.368346) (xy 148.528344 154.307783) (xy 148.48235 154.217515) (xy 148.450781 154.174064) + (xy 148.382851 154.080565) (xy 148.382847 154.08056) (xy 148.263139 153.960852) (xy 148.263134 153.960848) + (xy 148.126188 153.861352) (xy 148.126187 153.861351) (xy 148.126185 153.86135) (xy 148.079082 153.83735) + (xy 147.975353 153.784496) (xy 147.814347 153.732181) (xy 147.647149 153.7057) (xy 147.647144 153.7057) + (xy 147.477856 153.7057) (xy 147.477851 153.7057) (xy 147.310652 153.732181) (xy 147.149646 153.784496) + (xy 146.998811 153.861352) (xy 146.861865 153.960848) (xy 146.86186 153.960852) (xy 146.742152 154.08056) + (xy 146.742148 154.080565) (xy 146.642652 154.217511) (xy 146.565796 154.368346) (xy 146.513481 154.529352) + (xy 146.487 154.69655) (xy 144.6769 154.69655) (xy 144.6769 154.637371) (xy 144.639353 154.352175) + (xy 144.564902 154.07432) (xy 144.45482 153.808559) (xy 144.454818 153.808556) (xy 144.454816 153.808551) + (xy 144.310995 153.559448) (xy 144.310991 153.559441) (xy 144.207069 153.424007) (xy 144.135878 153.331228) + (xy 144.135872 153.331221) (xy 143.932478 153.127827) (xy 143.932471 153.127821) (xy 143.704267 152.952715) + (xy 143.704265 152.952713) (xy 143.704259 152.952709) (xy 143.704254 152.952706) (xy 143.704251 152.952704) + (xy 143.455148 152.808883) (xy 143.455131 152.808875) (xy 143.189378 152.698797) (xy 142.911523 152.624346) + (xy 142.626338 152.586801) (xy 142.626335 152.5868) (xy 142.626329 152.5868) (xy 142.338671 152.5868) + (xy 142.338665 152.5868) (xy 142.338661 152.586801) (xy 142.053476 152.624346) (xy 141.775621 152.698797) + (xy 141.509868 152.808875) (xy 141.509851 152.808883) (xy 141.260748 152.952704) (xy 141.260732 152.952715) + (xy 141.032528 153.127821) (xy 141.032521 153.127827) (xy 140.829127 153.331221) (xy 140.75793 153.424007) + (xy 140.701501 153.465209) (xy 140.631755 153.469364) (xy 140.570835 153.435151) (xy 140.538083 153.373434) + (xy 140.543896 153.303807) (xy 140.552161 153.286531) (xy 140.605363 153.194383) (xy 140.713242 152.933939) + (xy 140.786204 152.661642) (xy 140.823 152.382151) (xy 140.823 152.100249) (xy 140.786204 151.820758) + (xy 140.713242 151.548461) (xy 140.70626 151.531606) (xy 140.681265 151.471261) (xy 140.605363 151.288017) + (xy 140.60536 151.288011) (xy 140.605359 151.288009) (xy 140.464416 151.04389) (xy 140.464412 151.043883) + (xy 140.2928 150.820235) (xy 140.292798 150.820233) (xy 140.292795 150.820229) (xy 140.09347 150.620904) + (xy 140.068661 150.601867) (xy 139.869817 150.449288) (xy 139.869811 150.449284) (xy 139.869809 150.449283) + (xy 139.62569 150.30834) (xy 139.625679 150.308335) (xy 139.365243 150.200459) (xy 139.092939 150.127495) + (xy 138.813458 150.0907) (xy 138.813451 150.0907) (xy 138.531549 150.0907) (xy 138.531541 150.0907) + (xy 138.25206 150.127495) (xy 137.979756 150.200459) (xy 137.71932 150.308335) (xy 137.719309 150.30834) + (xy 137.47519 150.449283) (xy 137.475182 150.449289) (xy 137.251529 150.620904) (xy 137.052204 150.820229) + (xy 136.880589 151.043882) (xy 136.880583 151.04389) (xy 136.73964 151.288009) (xy 136.739635 151.28802) + (xy 136.631759 151.548456) (xy 136.558795 151.82076) (xy 136.522 152.100241) (xy 136.522 152.382158) + (xy 136.558795 152.661639) (xy 136.631759 152.933943) (xy 136.739635 153.194379) (xy 136.73964 153.19439) + (xy 136.880583 153.438509) (xy 136.880594 153.438525) (xy 137.011338 153.608914) (xy 137.036532 153.674083) + (xy 137.022494 153.742528) (xy 136.97368 153.792517) (xy 136.969258 153.794884) (xy 136.838813 153.86135) + (xy 136.701865 153.960848) (xy 136.70186 153.960852) (xy 136.582152 154.08056) (xy 136.582148 154.080565) + (xy 136.482652 154.217511) (xy 136.405796 154.368346) (xy 136.353481 154.529352) (xy 136.327 154.69655) + (xy 135.9905 154.69655) (xy 135.9905 145.185595) (xy 136.010185 145.118556) (xy 136.026819 145.097914) + (xy 136.907863 144.21687) (xy 136.907865 144.216868) (xy 136.9425 144.133253) (xy 136.9425 136.968747) + (xy 136.907865 136.885132) (xy 136.843868 136.821135) (xy 136.602819 136.580086) (xy 136.569334 136.518763) + (xy 136.5665 136.492405) (xy 136.5665 135.64655) (xy 136.962 135.64655) (xy 136.962 135.815849) + (xy 136.988481 135.983047) (xy 137.040796 136.144053) (xy 137.117652 136.294888) (xy 137.217148 136.431834) + (xy 137.217152 136.431839) (xy 137.33686 136.551547) (xy 137.336865 136.551551) (xy 137.456317 136.638337) + (xy 137.473815 136.65105) (xy 137.537017 136.683253) (xy 137.624646 136.727903) (xy 137.624648 136.727903) + (xy 137.624651 136.727905) (xy 137.71095 136.755945) (xy 137.785652 136.780218) (xy 137.952851 136.8067) + (xy 137.952856 136.8067) (xy 138.122149 136.8067) (xy 138.289347 136.780218) (xy 138.450349 136.727905) + (xy 138.601185 136.65105) (xy 138.738141 136.551546) (xy 138.857846 136.431841) (xy 138.95735 136.294885) + (xy 139.034205 136.144049) (xy 139.086518 135.983047) (xy 139.113 135.815849) (xy 139.113 135.64655) + (xy 139.086518 135.479352) (xy 139.041796 135.341713) (xy 139.034205 135.318351) (xy 139.034203 135.318348) + (xy 139.034203 135.318346) (xy 138.990176 135.23194) (xy 138.95735 135.167515) (xy 138.925781 135.124064) + (xy 138.857851 135.030565) (xy 138.857847 135.03056) (xy 138.738139 134.910852) (xy 138.738134 134.910848) + (xy 138.601188 134.811352) (xy 138.601187 134.811351) (xy 138.601185 134.81135) (xy 138.536109 134.778192) + (xy 138.450353 134.734496) (xy 138.289347 134.682181) (xy 138.122149 134.6557) (xy 138.122144 134.6557) + (xy 137.952856 134.6557) (xy 137.952851 134.6557) (xy 137.785652 134.682181) (xy 137.624646 134.734496) + (xy 137.473811 134.811352) (xy 137.336865 134.910848) (xy 137.33686 134.910852) (xy 137.217152 135.03056) + (xy 137.217148 135.030565) (xy 137.117652 135.167511) (xy 137.040796 135.318346) (xy 136.988481 135.479352) + (xy 136.962 135.64655) (xy 136.5665 135.64655) (xy 136.5665 134.207748) (xy 136.5665 134.207747) + (xy 136.531865 134.124132) (xy 136.467868 134.060135) (xy 135.421114 133.013381) (xy 135.387629 132.952058) + (xy 135.392613 132.882366) (xy 135.434485 132.826433) (xy 135.499949 132.802016) (xy 135.508795 132.8017) + (xy 135.638444 132.8017) (xy 135.638451 132.8017) (xy 135.917942 132.764904) (xy 136.190239 132.691942) + (xy 136.450683 132.584063) (xy 136.694817 132.443112) (xy 136.918465 132.2715) (xy 137.1178 132.072165) + (xy 137.289412 131.848517) (xy 137.430363 131.604383) (xy 137.538242 131.343939) (xy 137.611204 131.071642) + (xy 137.648 130.792151) (xy 137.648 130.510249) (xy 137.611204 130.230758) (xy 137.538242 129.958461) + (xy 137.53126 129.941606) (xy 137.506265 129.881261) (xy 137.430363 129.698017) (xy 137.430361 129.698014) + (xy 137.430359 129.698009) (xy 137.289416 129.45389) (xy 137.289412 129.453883) (xy 137.1178 129.230235) + (xy 137.117798 129.230233) (xy 137.117795 129.230229) (xy 136.91847 129.030904) (xy 136.918465 129.0309) + (xy 136.694817 128.859288) (xy 136.694811 128.859284) (xy 136.694809 128.859283) (xy 136.45069 128.71834) + (xy 136.450679 128.718335) (xy 136.190243 128.610459) (xy 135.917939 128.537495) (xy 135.638458 128.5007) + (xy 135.638451 128.5007) (xy 135.356549 128.5007) (xy 135.356541 128.5007) (xy 135.07706 128.537495) + (xy 134.804756 128.610459) (xy 134.54432 128.718335) (xy 134.544309 128.71834) (xy 134.30019 128.859283) + (xy 134.300184 128.859287) (xy 134.300183 128.859288) (xy 134.245198 128.90148) (xy 134.076529 129.030904) + (xy 133.877204 129.230229) (xy 133.763881 129.377914) (xy 133.705597 129.453872) (xy 133.705589 129.453882) + (xy 133.705583 129.45389) (xy 133.56464 129.698009) (xy 133.564635 129.69802) (xy 133.456759 129.958456) + (xy 133.383795 130.23076) (xy 133.347 130.510241) (xy 133.347 130.639905) (xy 133.327315 130.706944) + (xy 133.274511 130.752699) (xy 133.205353 130.762643) (xy 133.141797 130.733618) (xy 133.135319 130.727586) + (xy 131.839819 129.432086) (xy 131.806334 129.370763) (xy 131.8035 129.344405) (xy 131.8035 116.59655) + (xy 132.1995 116.59655) (xy 132.1995 116.765849) (xy 132.225981 116.933047) (xy 132.278296 117.094053) + (xy 132.355152 117.244888) (xy 132.454648 117.381834) (xy 132.454651 117.381838) (xy 132.57436 117.501547) + (xy 132.574365 117.501551) (xy 132.654244 117.559586) (xy 132.711315 117.60105) (xy 132.807425 117.65002) + (xy 132.862146 117.677903) (xy 132.862148 117.677903) (xy 132.862151 117.677905) (xy 132.94845 117.705945) + (xy 133.023152 117.730218) (xy 133.190351 117.7567) (xy 133.190356 117.7567) (xy 133.359649 117.7567) + (xy 133.526847 117.730218) (xy 133.687849 117.677905) (xy 133.838685 117.60105) (xy 133.975641 117.501546) + (xy 134.095346 117.381841) (xy 134.095346 117.38184) (xy 134.095349 117.381838) (xy 134.095351 117.381834) + (xy 134.116179 117.353167) (xy 134.19485 117.244885) (xy 134.271705 117.094049) (xy 134.324018 116.933047) + (xy 134.3505 116.765849) (xy 134.3505 116.59655) (xy 134.324018 116.429352) (xy 134.297275 116.347046) + (xy 134.271705 116.268351) (xy 134.271703 116.268348) (xy 134.271703 116.268346) (xy 134.221015 116.168867) + (xy 134.19485 116.117515) (xy 134.163281 116.074064) (xy 134.095351 115.980565) (xy 134.095347 115.98056) + (xy 133.975639 115.860852) (xy 133.975634 115.860848) (xy 133.838688 115.761352) (xy 133.838687 115.761351) + (xy 133.838685 115.76135) (xy 133.789398 115.736237) (xy 133.687853 115.684496) (xy 133.526847 115.632181) + (xy 133.359649 115.6057) (xy 133.359644 115.6057) (xy 133.190356 115.6057) (xy 133.190351 115.6057) + (xy 133.023152 115.632181) (xy 132.862146 115.684496) (xy 132.711311 115.761352) (xy 132.574365 115.860848) + (xy 132.57436 115.860852) (xy 132.454652 115.98056) (xy 132.454648 115.980565) (xy 132.355152 116.117511) + (xy 132.278296 116.268346) (xy 132.225981 116.429352) (xy 132.1995 116.59655) (xy 131.8035 116.59655) + (xy 131.8035 116.077748) (xy 131.8035 116.077747) (xy 131.787698 116.039598) (xy 131.768866 115.994132) + (xy 129.285923 113.511189) (xy 129.252438 113.449866) (xy 129.257422 113.380174) (xy 129.299294 113.324241) + (xy 129.364758 113.299824) (xy 129.433031 113.314676) (xy 129.449085 113.325128) (xy 129.537683 113.393112) + (xy 129.53769 113.393116) (xy 129.781809 113.534059) (xy 129.781814 113.534061) (xy 129.781817 113.534063) + (xy 129.889834 113.578805) (xy 130.007486 113.627538) (xy 130.042261 113.641942) (xy 130.314558 113.714904) + (xy 130.594049 113.7517) (xy 130.594056 113.7517) (xy 130.875944 113.7517) (xy 130.875951 113.7517) + (xy 131.155442 113.714904) (xy 131.427739 113.641942) (xy 131.688183 113.534063) (xy 131.932317 113.393112) + (xy 132.155965 113.2215) (xy 132.3553 113.022165) (xy 132.526912 112.798517) (xy 132.667863 112.554383) + (xy 132.775742 112.293939) (xy 132.848704 112.021642) (xy 132.8855 111.742151) (xy 132.8855 111.460249) + (xy 132.848704 111.180758) (xy 132.775742 110.908461) (xy 132.76876 110.891606) (xy 132.743765 110.831261) + (xy 132.667863 110.648017) (xy 132.667861 110.648014) (xy 132.667859 110.648009) (xy 132.526916 110.40389) + (xy 132.526912 110.403883) (xy 132.424633 110.270591) (xy 132.39944 110.205423) (xy 132.413478 110.136979) + (xy 132.462292 110.086989) (xy 132.530383 110.071325) (xy 132.596134 110.094961) (xy 132.610691 110.107425) + (xy 133.563521 111.060255) (xy 133.597006 111.121578) (xy 133.592022 111.19127) (xy 133.578946 111.21682) + (xy 133.575613 111.221807) (xy 133.575602 111.221828) (xy 133.515264 111.367498) (xy 133.515261 111.36751) + (xy 133.4845 111.522153) (xy 133.4845 111.679846) (xy 133.515261 111.834489) (xy 133.515264 111.834501) + (xy 133.575602 111.980172) (xy 133.575609 111.980185) (xy 133.66321 112.111288) (xy 133.663213 112.111292) + (xy 133.774707 112.222786) (xy 133.774711 112.222789) (xy 133.905814 112.31039) (xy 133.905827 112.310397) + (xy 134.051498 112.370735) (xy 134.051503 112.370737) (xy 134.206153 112.401499) (xy 134.206156 112.4015) + (xy 134.206158 112.4015) (xy 134.363844 112.4015) (xy 134.363845 112.401499) (xy 134.518497 112.370737) + (xy 134.664179 112.310394) (xy 134.795289 112.222789) (xy 134.906789 112.111289) (xy 134.948523 112.048828) + (xy 135.002134 112.004025) (xy 135.071459 111.995317) (xy 135.134487 112.025471) (xy 135.139287 112.030021) + (xy 136.922139 113.812872) (xy 138.784181 115.674914) (xy 138.817666 115.736237) (xy 138.8205 115.762595) + (xy 138.8205 129.795924) (xy 138.800815 129.862963) (xy 138.748011 129.908718) (xy 138.743953 129.910485) + (xy 138.668824 129.941604) (xy 138.668814 129.941609) (xy 138.537711 130.02921) (xy 138.537707 130.029213) + (xy 138.426213 130.140707) (xy 138.42621 130.140711) (xy 138.338609 130.271814) (xy 138.338602 130.271827) + (xy 138.278264 130.417498) (xy 138.278261 130.41751) (xy 138.2475 130.572153) (xy 138.2475 130.729846) + (xy 138.278261 130.884489) (xy 138.278264 130.884501) (xy 138.338602 131.030172) (xy 138.338609 131.030185) + (xy 138.42621 131.161288) (xy 138.426213 131.161292) (xy 138.537707 131.272786) (xy 138.537711 131.272789) + (xy 138.668814 131.36039) (xy 138.668827 131.360397) (xy 138.810679 131.419153) (xy 138.814503 131.420737) + (xy 138.969153 131.451499) (xy 138.969156 131.4515) (xy 138.969158 131.4515) (xy 139.126844 131.4515) + (xy 139.126845 131.451499) (xy 139.281497 131.420737) (xy 139.427179 131.360394) (xy 139.558289 131.272789) + (xy 139.602377 131.228701) (xy 139.661819 131.16926) (xy 139.723142 131.135775) (xy 139.792834 131.140759) + (xy 139.848767 131.182631) (xy 139.873184 131.248095) (xy 139.8735 131.256941) (xy 139.8735 141.184747) + (xy 139.8735 141.275253) (xy 139.901394 141.342595) (xy 139.908136 141.35887) (xy 146.119198 147.569932) + (xy 146.152683 147.631255) (xy 146.147699 147.700947) (xy 146.105827 147.75688) (xy 146.040363 147.781297) + (xy 145.979634 147.769403) (xy 145.979433 147.76989) (xy 145.977026 147.768893) (xy 145.976668 147.768823) + (xy 145.975688 147.76834) (xy 145.975683 147.768337) (xy 145.949308 147.757412) (xy 145.715243 147.660459) + (xy 145.442939 147.587495) (xy 145.163458 147.5507) (xy 145.163451 147.5507) (xy 144.881549 147.5507) + (xy 144.881541 147.5507) (xy 144.60206 147.587495) (xy 144.329756 147.660459) (xy 144.06932 147.768335) + (xy 144.069309 147.76834) (xy 143.82519 147.909283) (xy 143.825182 147.909289) (xy 143.601529 148.080904) + (xy 143.402204 148.280229) (xy 143.230589 148.503882) (xy 143.230583 148.50389) (xy 143.08964 148.748009) + (xy 143.089635 148.74802) (xy 142.981759 149.008456) (xy 142.908795 149.28076) (xy 142.872 149.560241) + (xy 142.872 149.842158) (xy 142.908795 150.121639) (xy 142.981759 150.393943) (xy 143.089635 150.654379) + (xy 143.08964 150.65439) (xy 143.230583 150.898509) (xy 143.230588 150.898517) (xy 143.392887 151.110028) + (xy 143.402204 151.12217) (xy 143.601529 151.321495) (xy 143.601533 151.321498) (xy 143.601535 151.3215) + (xy 143.825183 151.493112) (xy 143.82519 151.493116) (xy 144.069309 151.634059) (xy 144.069314 151.634061) + (xy 144.069317 151.634063) (xy 144.329761 151.741942) (xy 144.602058 151.814904) (xy 144.881549 151.8517) + (xy 144.881556 151.8517) (xy 145.163444 151.8517) (xy 145.163451 151.8517) (xy 145.442942 151.814904) + (xy 145.715239 151.741942) (xy 145.975683 151.634063) (xy 146.219817 151.493112) (xy 146.443465 151.3215) + (xy 146.6428 151.122165) (xy 146.814412 150.898517) (xy 146.946509 150.669717) (xy 146.955359 150.65439) + (xy 146.955359 150.654389) (xy 146.955363 150.654383) (xy 147.063242 150.393939) (xy 147.136204 150.121642) + (xy 147.173 149.842151) (xy 147.173 149.560249) (xy 147.172457 149.556128) (xy 147.16079 149.467503) + (xy 147.136204 149.280758) (xy 147.063242 149.008461) (xy 146.955363 148.748017) (xy 146.955356 148.748005) + (xy 146.954876 148.74703) (xy 146.954818 148.746702) (xy 146.95381 148.744267) (xy 146.954354 148.744041) + (xy 146.942877 148.678198) (xy 146.969996 148.613806) (xy 147.027622 148.574297) (xy 147.097461 148.572216) + (xy 147.153767 148.6045) (xy 147.806503 149.257236) (xy 147.839988 149.318559) (xy 147.835004 149.388251) + (xy 147.833384 149.392368) (xy 147.802263 149.467503) (xy 147.802261 149.46751) (xy 147.7715 149.622153) + (xy 147.7715 149.779846) (xy 147.802261 149.934489) (xy 147.802264 149.934501) (xy 147.862602 150.080172) + (xy 147.862609 150.080185) (xy 147.95021 150.211288) (xy 147.950213 150.211292) (xy 148.061707 150.322786) + (xy 148.061711 150.322789) (xy 148.192814 150.41039) (xy 148.192827 150.410397) (xy 148.338498 150.470735) + (xy 148.338503 150.470737) (xy 148.493153 150.501499) (xy 148.493156 150.5015) (xy 148.493158 150.5015) + (xy 148.650844 150.5015) (xy 148.650845 150.501499) (xy 148.805497 150.470737) (xy 148.951179 150.410394) + (xy 149.082289 150.322789) (xy 149.193789 150.211289) (xy 149.281394 150.080179) (xy 149.341737 149.934497) + (xy 149.3725 149.779842) (xy 149.3725 149.622158) (xy 149.3725 149.622155) (xy 149.372499 149.622153) + (xy 149.36056 149.562132) (xy 149.341737 149.467503) (xy 149.3275 149.433131) (xy 149.281397 149.321827) + (xy 149.28139 149.321814) (xy 149.193789 149.190711) (xy 149.193786 149.190707) (xy 149.082292 149.079213) + (xy 149.082288 149.07921) (xy 148.951185 148.991609) (xy 148.951172 148.991602) (xy 148.805501 148.931264) + (xy 148.805489 148.931261) (xy 148.650845 148.9005) (xy 148.650842 148.9005) (xy 148.493158 148.9005) + (xy 148.493155 148.9005) (xy 148.33851 148.931261) (xy 148.338503 148.931263) (xy 148.263368 148.962384) + (xy 148.193899 148.969851) (xy 148.13142 148.938576) (xy 148.128236 148.935503) (xy 140.364819 141.172086) + (xy 140.331334 141.110763) (xy 140.3285 141.084405) (xy 140.3285 130.373438) (xy 140.328531 130.328904) + (xy 140.3285 130.328829) (xy 140.3285 130.328747) (xy 140.311211 130.287008) (xy 140.293954 130.245265) + (xy 140.293896 130.245206) (xy 140.293865 130.245132) (xy 140.262137 130.213404) (xy 140.262094 130.213326) + (xy 140.262077 130.213344) (xy 139.639758 129.590165) (xy 139.606316 129.528818) (xy 139.6035 129.502544) + (xy 139.6035 128.768571) (xy 139.623185 128.701532) (xy 139.675989 128.655777) (xy 139.745147 128.645833) + (xy 139.808703 128.674858) (xy 139.815165 128.680874) (xy 143.815833 132.680707) (xy 143.882457 132.747317) + (xy 143.915948 132.808636) (xy 143.910971 132.878328) (xy 143.909347 132.882458) (xy 143.878263 132.957503) + (xy 143.878262 132.957506) (xy 143.878262 132.957507) (xy 143.878261 132.95751) (xy 143.8475 133.112153) + (xy 143.8475 133.269846) (xy 143.878261 133.424489) (xy 143.878264 133.424501) (xy 143.938602 133.570172) + (xy 143.938609 133.570185) (xy 144.02621 133.701288) (xy 144.026213 133.701292) (xy 144.137707 133.812786) + (xy 144.137711 133.812789) (xy 144.268814 133.90039) (xy 144.268818 133.900392) (xy 144.268821 133.900394) + (xy 144.343954 133.931515) (xy 144.398356 133.975354) (xy 144.420421 134.041648) (xy 144.4205 134.046075) + (xy 144.4205 142.716941) (xy 144.420498 142.761241) (xy 144.4205 142.761245) (xy 144.4205 142.761253) + (xy 144.422556 142.766218) (xy 144.422557 142.766219) (xy 144.437706 142.802791) (xy 144.437707 142.802799) + (xy 144.43771 142.802799) (xy 144.43771 142.8028) (xy 144.455128 142.844858) (xy 144.455129 142.844859) + (xy 144.45513 142.844861) (xy 144.455133 142.844866) (xy 144.483687 142.87342) (xy 144.48369 142.873426) + (xy 144.483692 142.873425) (xy 153.406526 151.797196) (xy 153.440008 151.858521) (xy 153.435019 151.928213) + (xy 153.433402 151.932324) (xy 153.402263 152.007503) (xy 153.402261 152.00751) (xy 153.3715 152.162153) + (xy 153.3715 152.319846) (xy 153.402261 152.474489) (xy 153.402264 152.474501) (xy 153.462602 152.620172) + (xy 153.462609 152.620185) (xy 153.55021 152.751288) (xy 153.550213 152.751292) (xy 153.661707 152.862786) + (xy 153.661711 152.862789) (xy 153.792814 152.95039) (xy 153.792827 152.950397) (xy 153.909206 152.998602) + (xy 153.938503 153.010737) (xy 154.093153 153.041499) (xy 154.093156 153.0415) (xy 154.093158 153.0415) + (xy 154.250844 153.0415) (xy 154.250845 153.041499) (xy 154.405497 153.010737) (xy 154.551179 152.950394) + (xy 154.682289 152.862789) (xy 154.793789 152.751289) (xy 154.881394 152.620179) (xy 154.941737 152.474497) + (xy 154.9725 152.319842) (xy 154.9725 152.162158) (xy 154.9725 152.162155) (xy 154.972499 152.162153) + (xy 154.941737 152.007503) (xy 154.914278 151.941211) (xy 154.881397 151.861827) (xy 154.88139 151.861814) + (xy 154.793789 151.730711) (xy 154.793786 151.730707) (xy 154.682292 151.619213) (xy 154.682288 151.61921) + (xy 154.551185 151.531609) (xy 154.551172 151.531602) (xy 154.405501 151.471264) (xy 154.405489 151.471261) + (xy 154.250845 151.4405) (xy 154.250842 151.4405) (xy 154.093158 151.4405) (xy 154.093155 151.4405) + (xy 153.93851 151.471261) (xy 153.938502 151.471263) (xy 153.863413 151.502365) (xy 153.793943 151.509832) + (xy 153.731465 151.478556) (xy 153.728276 151.47548) (xy 153.725833 151.473037) (xy 151.474576 149.221543) + (xy 144.911814 142.65809) (xy 144.878332 142.596765) (xy 144.8755 142.570413) (xy 144.8755 141.791506) + (xy 149.677865 141.791506) (xy 149.694282 141.959543) (xy 149.695621 141.973242) (xy 149.707281 142.01388) + (xy 149.74598 142.148761) (xy 149.82728 142.312263) (xy 149.827281 142.312265) (xy 149.827283 142.312268) + (xy 149.882192 142.385485) (xy 149.936838 142.458352) (xy 149.936839 142.458353) (xy 149.93684 142.458354) + (xy 150.071032 142.582195) (xy 150.225425 142.679697) (xy 150.318335 142.716941) (xy 150.394914 142.747639) + (xy 150.394915 142.747639) (xy 150.394917 142.74764) (xy 150.573908 142.783779) (xy 150.573902 142.783779) + (xy 150.590222 142.784059) (xy 150.756484 142.78692) (xy 150.936612 142.756958) (xy 151.006515 142.73169) + (xy 151.108336 142.694885) (xy 151.108337 142.694883) (xy 151.10834 142.694883) (xy 151.123375 142.68612) + (xy 151.130059 142.682235) (xy 151.13035 142.682157) (xy 151.158233 142.66586) (xy 151.158351 142.665792) + (xy 151.161568 142.665001) (xy 151.220662 142.648999) (xy 152.701792 142.648999) (xy 152.701914 142.649006) + (xy 152.710005 142.649005) (xy 152.710008 142.649006) (xy 152.742142 142.649002) (xy 152.804704 142.665934) + (xy 152.83253 142.682191) (xy 152.832532 142.682191) (xy 152.83868 142.685783) (xy 152.840335 142.686608) + (xy 152.854478 142.69485) (xy 153.0262 142.756921) (xy 153.206321 142.786882) (xy 153.385998 142.78379) + (xy 153.388891 142.783741) (xy 153.567866 142.747605) (xy 153.567869 142.747603) (xy 153.567874 142.747603) + (xy 153.73736 142.679662) (xy 153.891746 142.582163) (xy 153.904479 142.570413) (xy 154.02593 142.45833) + (xy 154.025932 142.458328) (xy 154.034009 142.447558) (xy 154.135485 142.312247) (xy 154.216784 142.148748) + (xy 154.267142 141.973233) (xy 154.284897 141.791503) (xy 154.26946 141.60956) (xy 154.269458 141.609554) + (xy 154.256771 141.563109) (xy 154.221343 141.433418) (xy 154.213583 141.417249) (xy 154.210496 141.410804) + (xy 154.210448 141.410546) (xy 154.194071 141.376519) (xy 154.193943 141.37573) (xy 154.181902 141.322931) + (xy 154.181902 141.322776) (xy 154.181907 141.285508) (xy 154.181906 141.285504) (xy 154.181907 141.277498) + (xy 154.181899 141.27736) (xy 154.181899 139.974077) (xy 154.184554 139.962408) (xy 154.18352 139.954094) + (xy 154.194105 139.920428) (xy 154.200411 139.90729) (xy 154.210474 139.886374) (xy 154.210474 139.886369) + (xy 154.21386 139.879333) (xy 154.214025 139.878922) (xy 154.214146 139.87867) (xy 154.221383 139.863591) + (xy 154.2695 139.687442) (xy 154.284937 139.505493) (xy 154.267181 139.323755) (xy 154.21682 139.148234) + (xy 154.135518 138.98473) (xy 154.046178 138.865602) (xy 154.025962 138.838645) (xy 154.024039 138.83687) + (xy 153.891769 138.714804) (xy 153.891766 138.714802) (xy 153.891765 138.714801) (xy 153.891762 138.714799) + (xy 153.737377 138.617301) (xy 153.567887 138.549358) (xy 153.567877 138.549356) (xy 153.388892 138.513218) + (xy 153.388899 138.513218) (xy 153.217194 138.510265) (xy 153.206318 138.510078) (xy 153.206317 138.510078) + (xy 153.206314 138.510078) (xy 153.026197 138.540038) (xy 153.026184 138.540041) (xy 152.854463 138.602113) + (xy 152.839948 138.61057) (xy 152.839863 138.610619) (xy 152.832776 138.61474) (xy 152.83253 138.614808) + (xy 152.804738 138.631044) (xy 152.80449 138.631189) (xy 152.801763 138.631859) (xy 152.742146 138.647996) + (xy 152.701801 138.647993) (xy 152.701697 138.648) (xy 151.260996 138.648) (xy 151.252814 138.647998) + (xy 151.252792 138.647993) (xy 151.222865 138.647995) (xy 151.220628 138.647995) (xy 151.220346 138.647912) + (xy 151.158093 138.631062) (xy 151.130271 138.614808) (xy 151.124205 138.611264) (xy 151.122507 138.610417) + (xy 151.115157 138.606134) (xy 151.108321 138.60215) (xy 150.936597 138.540078) (xy 150.936591 138.540077) + (xy 150.756481 138.510119) (xy 150.756478 138.510119) (xy 150.747939 138.510265) (xy 150.573907 138.513259) + (xy 150.394934 138.549394) (xy 150.394923 138.549397) (xy 150.225442 138.617337) (xy 150.225441 138.617337) + (xy 150.071061 138.714832) (xy 150.071058 138.714834) (xy 149.936867 138.838673) (xy 149.827315 138.984754) + (xy 149.74602 139.148244) (xy 149.746019 139.148247) (xy 149.746018 139.14825) (xy 149.740046 139.169065) + (xy 149.695658 139.323765) (xy 149.678816 139.496155) (xy 149.677904 139.505493) (xy 149.679805 139.527902) + (xy 149.691408 139.664669) (xy 149.69334 139.687435) (xy 149.721607 139.790914) (xy 149.741456 139.863578) + (xy 149.74146 139.863588) (xy 149.748698 139.87867) (xy 149.74874 139.878756) (xy 149.752323 139.886238) + (xy 149.752381 139.88654) (xy 149.768697 139.920425) (xy 149.768736 139.920506) (xy 149.768881 139.9214) + (xy 149.780901 139.974069) (xy 149.780901 141.322922) (xy 149.768707 141.376545) (xy 149.768119 141.377771) + (xy 149.768039 141.377938) (xy 149.749166 141.417137) (xy 149.748842 141.417939) (xy 149.741418 141.43341) + (xy 149.693301 141.609554) (xy 149.693301 141.609556) (xy 149.677865 141.791506) (xy 144.8755 141.791506) + (xy 144.8755 135.64655) (xy 145.852 135.64655) (xy 145.852 135.815849) (xy 145.878481 135.983047) + (xy 145.930796 136.144053) (xy 146.007652 136.294888) (xy 146.107148 136.431834) (xy 146.107152 136.431839) + (xy 146.22686 136.551547) (xy 146.226865 136.551551) (xy 146.346317 136.638337) (xy 146.363815 136.65105) + (xy 146.427017 136.683253) (xy 146.514646 136.727903) (xy 146.514648 136.727903) (xy 146.514651 136.727905) + (xy 146.60095 136.755945) (xy 146.675652 136.780218) (xy 146.842851 136.8067) (xy 146.842856 136.8067) + (xy 147.012149 136.8067) (xy 147.179347 136.780218) (xy 147.340349 136.727905) (xy 147.491185 136.65105) + (xy 147.628141 136.551546) (xy 147.747846 136.431841) (xy 147.84735 136.294885) (xy 147.924205 136.144049) + (xy 147.976518 135.983047) (xy 148.003 135.815849) (xy 148.003 135.64655) (xy 147.977428 135.485098) + (xy 147.986382 135.415805) (xy 148.031379 135.362353) (xy 148.09813 135.341713) (xy 148.099901 135.3417) + (xy 148.338444 135.3417) (xy 148.338451 135.3417) (xy 148.617942 135.304904) (xy 148.890239 135.231942) + (xy 149.150683 135.124063) (xy 149.394817 134.983112) (xy 149.618465 134.8115) (xy 149.8178 134.612165) + (xy 149.885492 134.523946) (xy 149.94192 134.482744) (xy 150.011666 134.478589) (xy 150.072586 134.512801) + (xy 150.105339 134.574518) (xy 150.099526 134.644146) (xy 150.091255 134.661433) (xy 150.035183 134.758551) + (xy 150.035175 134.758568) (xy 149.925097 135.024321) (xy 149.850646 135.302176) (xy 149.813101 135.587361) + (xy 149.8131 135.587377) (xy 149.8131 135.875022) (xy 149.813101 135.875038) (xy 149.850646 136.160223) + (xy 149.925097 136.438078) (xy 150.035175 136.703831) (xy 150.035183 136.703848) (xy 150.179004 136.952951) + (xy 150.179015 136.952967) (xy 150.354121 137.181171) (xy 150.354127 137.181178) (xy 150.557525 137.384576) + (xy 150.653761 137.45842) (xy 150.785741 137.559691) (xy 150.785748 137.559695) (xy 151.034851 137.703516) + (xy 151.034856 137.703518) (xy 151.034859 137.70352) (xy 151.034863 137.703521) (xy 151.034868 137.703524) + (xy 151.140223 137.747163) (xy 151.30062 137.813602) (xy 151.578475 137.888053) (xy 151.863671 137.9256) + (xy 151.863678 137.9256) (xy 152.151322 137.9256) (xy 152.151329 137.9256) (xy 152.436525 137.888053) + (xy 152.71438 137.813602) (xy 152.980141 137.70352) (xy 153.229259 137.559691) (xy 153.370078 137.451636) + (xy 153.457475 137.384576) (xy 153.457478 137.384572) (xy 153.660872 137.181178) (xy 153.660877 137.181173) + (xy 153.835991 136.952959) (xy 153.97982 136.703841) (xy 154.089902 136.43808) (xy 154.164353 136.160225) + (xy 154.2019 135.875029) (xy 154.2019 135.587371) (xy 154.164353 135.302175) (xy 154.089902 135.02432) + (xy 154.023463 134.863923) (xy 153.979824 134.758568) (xy 153.979816 134.758551) (xy 153.835995 134.509448) + (xy 153.835994 134.509447) (xy 153.835991 134.509441) (xy 153.711525 134.347233) (xy 153.660878 134.281228) + (xy 153.660872 134.281221) (xy 153.457478 134.077827) (xy 153.457471 134.077821) (xy 153.229267 133.902715) + (xy 153.229265 133.902713) (xy 153.229259 133.902709) (xy 153.229254 133.902706) (xy 153.229251 133.902704) + (xy 152.980148 133.758883) (xy 152.980131 133.758875) (xy 152.714378 133.648797) (xy 152.436523 133.574346) + (xy 152.151338 133.536801) (xy 152.151335 133.5368) (xy 152.151329 133.5368) (xy 151.863671 133.5368) + (xy 151.863665 133.5368) (xy 151.863661 133.536801) (xy 151.578476 133.574346) (xy 151.300621 133.648797) + (xy 151.034868 133.758875) (xy 151.034851 133.758883) (xy 150.785748 133.902704) (xy 150.785732 133.902715) + (xy 150.557528 134.077821) (xy 150.557521 134.077827) (xy 150.354127 134.281221) (xy 150.28293 134.374007) + (xy 150.226501 134.415209) (xy 150.156755 134.419364) (xy 150.095835 134.385151) (xy 150.063083 134.323434) + (xy 150.068896 134.253807) (xy 150.077161 134.236531) (xy 150.130363 134.144383) (xy 150.238242 133.883939) + (xy 150.311204 133.611642) (xy 150.348 133.332151) (xy 150.348 133.050249) (xy 150.311204 132.770758) + (xy 150.238242 132.498461) (xy 150.23126 132.481606) (xy 150.209309 132.428611) (xy 150.130363 132.238017) + (xy 150.130361 132.238014) (xy 150.130359 132.238009) (xy 149.989416 131.99389) (xy 149.989412 131.993883) + (xy 149.8178 131.770235) (xy 149.817798 131.770233) (xy 149.817795 131.770229) (xy 149.61847 131.570904) + (xy 149.519871 131.495246) (xy 149.394817 131.399288) (xy 149.394811 131.399284) (xy 149.394809 131.399283) + (xy 149.15069 131.25834) (xy 149.150679 131.258335) (xy 148.890243 131.150459) (xy 148.617939 131.077495) + (xy 148.338458 131.0407) (xy 148.338451 131.0407) (xy 148.056549 131.0407) (xy 148.056541 131.0407) + (xy 147.77706 131.077495) (xy 147.504756 131.150459) (xy 147.24432 131.258335) (xy 147.244309 131.25834) + (xy 147.00019 131.399283) (xy 147.000182 131.399289) (xy 146.776529 131.570904) (xy 146.577204 131.770229) + (xy 146.405589 131.993882) (xy 146.405583 131.99389) (xy 146.26464 132.238009) (xy 146.264635 132.23802) + (xy 146.156759 132.498456) (xy 146.083795 132.77076) (xy 146.047 133.050241) (xy 146.047 133.332158) + (xy 146.083795 133.611639) (xy 146.156759 133.883943) (xy 146.264635 134.144379) (xy 146.26464 134.14439) + (xy 146.405583 134.388509) (xy 146.405594 134.388525) (xy 146.536338 134.558914) (xy 146.561532 134.624083) + (xy 146.547494 134.692528) (xy 146.49868 134.742517) (xy 146.494258 134.744884) (xy 146.363813 134.81135) + (xy 146.226865 134.910848) (xy 146.22686 134.910852) (xy 146.107152 135.03056) (xy 146.107148 135.030565) + (xy 146.007652 135.167511) (xy 145.930796 135.318346) (xy 145.878481 135.479352) (xy 145.852 135.64655) + (xy 144.8755 135.64655) (xy 144.8755 134.046075) (xy 144.895185 133.979036) (xy 144.947989 133.933281) + (xy 144.951999 133.931534) (xy 145.027179 133.900394) (xy 145.158289 133.812789) (xy 145.269789 133.701289) + (xy 145.357394 133.570179) (xy 145.417737 133.424497) (xy 145.4485 133.269842) (xy 145.4485 133.112158) + (xy 145.4485 133.112155) (xy 145.448499 133.112153) (xy 145.417737 132.957503) (xy 145.40203 132.919582) + (xy 145.357397 132.811827) (xy 145.35739 132.811814) (xy 145.269789 132.680711) (xy 145.269786 132.680707) + (xy 145.158292 132.569213) (xy 145.158288 132.56921) (xy 145.027185 132.481609) (xy 145.027172 132.481602) + (xy 144.881501 132.421264) (xy 144.881489 132.421261) (xy 144.726845 132.3905) (xy 144.726842 132.3905) + (xy 144.569158 132.3905) (xy 144.569155 132.3905) (xy 144.41451 132.421261) (xy 144.414503 132.421263) + (xy 144.339279 132.452421) (xy 144.26981 132.459889) (xy 144.207331 132.428613) (xy 144.204172 132.425564) + (xy 142.288449 130.510241) (xy 152.397 130.510241) (xy 152.397 130.792158) (xy 152.433795 131.071639) + (xy 152.506759 131.343943) (xy 152.614635 131.604379) (xy 152.61464 131.60439) (xy 152.747142 131.833888) + (xy 152.755588 131.848517) (xy 152.918047 132.060237) (xy 152.927204 132.07217) (xy 153.126529 132.271495) + (xy 153.126533 132.271498) (xy 153.126535 132.2715) (xy 153.350183 132.443112) (xy 153.35019 132.443116) + (xy 153.594309 132.584059) (xy 153.594314 132.584061) (xy 153.594317 132.584063) (xy 153.854761 132.691942) + (xy 154.127058 132.764904) (xy 154.406549 132.8017) (xy 154.406556 132.8017) (xy 154.688444 132.8017) + (xy 154.688451 132.8017) (xy 154.967942 132.764904) (xy 155.240239 132.691942) (xy 155.500683 132.584063) + (xy 155.744817 132.443112) (xy 155.968465 132.2715) (xy 156.1678 132.072165) (xy 156.339412 131.848517) + (xy 156.480363 131.604383) (xy 156.588242 131.343939) (xy 156.661204 131.071642) (xy 156.698 130.792151) + (xy 156.698 130.510249) (xy 156.661204 130.230758) (xy 156.588242 129.958461) (xy 156.58126 129.941606) + (xy 156.556265 129.881261) (xy 156.480363 129.698017) (xy 156.480361 129.698014) (xy 156.480359 129.698009) + (xy 156.339416 129.45389) (xy 156.339412 129.453883) (xy 156.1678 129.230235) (xy 156.167798 129.230233) + (xy 156.167795 129.230229) (xy 155.96847 129.030904) (xy 155.968465 129.0309) (xy 155.744817 128.859288) + (xy 155.744811 128.859284) (xy 155.744809 128.859283) (xy 155.50069 128.71834) (xy 155.500679 128.718335) + (xy 155.240243 128.610459) (xy 154.967939 128.537495) (xy 154.688458 128.5007) (xy 154.688451 128.5007) + (xy 154.406549 128.5007) (xy 154.406541 128.5007) (xy 154.12706 128.537495) (xy 153.854756 128.610459) + (xy 153.59432 128.718335) (xy 153.594309 128.71834) (xy 153.35019 128.859283) (xy 153.350184 128.859287) + (xy 153.350183 128.859288) (xy 153.295198 128.90148) (xy 153.126529 129.030904) (xy 152.927204 129.230229) + (xy 152.813881 129.377914) (xy 152.755597 129.453872) (xy 152.755589 129.453882) (xy 152.755583 129.45389) + (xy 152.61464 129.698009) (xy 152.614635 129.69802) (xy 152.506759 129.958456) (xy 152.433795 130.23076) + (xy 152.397 130.510241) (xy 142.288449 130.510241) (xy 141.82417 130.046059) (xy 140.123828 128.346072) + (xy 140.090337 128.284753) (xy 140.0875 128.258382) (xy 140.0875 122.432106) (xy 144.915365 122.432106) + (xy 144.931576 122.598035) (xy 144.933121 122.613842) (xy 144.952506 122.681404) (xy 144.98348 122.789361) + (xy 145.06478 122.952863) (xy 145.064781 122.952865) (xy 145.064783 122.952868) (xy 145.077866 122.970313) + (xy 145.174338 123.098952) (xy 145.174339 123.098953) (xy 145.17434 123.098954) (xy 145.308532 123.222795) + (xy 145.462925 123.320297) (xy 145.598077 123.374474) (xy 145.632414 123.388239) (xy 145.632415 123.388239) + (xy 145.632417 123.38824) (xy 145.811408 123.424379) (xy 145.811402 123.424379) (xy 145.827722 123.424659) + (xy 145.993984 123.42752) (xy 146.174112 123.397558) (xy 146.281061 123.358899) (xy 146.345836 123.335485) + (xy 146.345837 123.335483) (xy 146.34584 123.335483) (xy 146.360875 123.32672) (xy 146.367559 123.322835) + (xy 146.36785 123.322757) (xy 146.395733 123.30646) (xy 146.395851 123.306392) (xy 146.399068 123.305601) + (xy 146.458162 123.289599) (xy 147.939292 123.289599) (xy 147.939414 123.289606) (xy 147.947505 123.289605) + (xy 147.947508 123.289606) (xy 147.979642 123.289602) (xy 148.042204 123.306534) (xy 148.07003 123.322791) + (xy 148.070032 123.322791) (xy 148.07618 123.326383) (xy 148.077835 123.327208) (xy 148.091978 123.33545) + (xy 148.2637 123.397521) (xy 148.443821 123.427482) (xy 148.623498 123.42439) (xy 148.626391 123.424341) + (xy 148.805366 123.388205) (xy 148.805369 123.388203) (xy 148.805374 123.388203) (xy 148.97486 123.320262) + (xy 149.129246 123.222763) (xy 149.139905 123.212927) (xy 149.26343 123.09893) (xy 149.263432 123.098928) + (xy 149.276272 123.081807) (xy 149.372985 122.952847) (xy 149.454284 122.789348) (xy 149.504642 122.613833) + (xy 149.522397 122.432103) (xy 149.50696 122.25016) (xy 149.506958 122.250154) (xy 149.495392 122.207814) + (xy 149.458843 122.074018) (xy 149.451083 122.057849) (xy 149.447996 122.051404) (xy 149.447948 122.051146) + (xy 149.431571 122.017119) (xy 149.431443 122.01633) (xy 149.419402 121.963531) (xy 149.419402 121.963522) + (xy 149.419407 121.926108) (xy 149.419406 121.926104) (xy 149.419407 121.918098) (xy 149.419399 121.91796) + (xy 149.419399 120.614677) (xy 149.422054 120.603008) (xy 149.42102 120.594694) (xy 149.431605 120.561028) + (xy 149.437911 120.54789) (xy 149.447974 120.526974) (xy 149.447974 120.526969) (xy 149.45136 120.519933) + (xy 149.451525 120.519522) (xy 149.451646 120.51927) (xy 149.458883 120.504191) (xy 149.507 120.328042) + (xy 149.522437 120.146093) (xy 149.504681 119.964355) (xy 149.45432 119.788834) (xy 149.373018 119.62533) + (xy 149.278575 119.499397) (xy 149.263462 119.479245) (xy 149.195159 119.416211) (xy 149.129269 119.355404) + (xy 149.129266 119.355402) (xy 149.129265 119.355401) (xy 149.129262 119.355399) (xy 148.974877 119.257901) + (xy 148.805387 119.189958) (xy 148.805377 119.189956) (xy 148.626392 119.153818) (xy 148.626399 119.153818) + (xy 148.454694 119.150865) (xy 148.443818 119.150678) (xy 148.443817 119.150678) (xy 148.443814 119.150678) + (xy 148.263697 119.180638) (xy 148.263684 119.180641) (xy 148.091963 119.242713) (xy 148.077448 119.25117) + (xy 148.077363 119.251219) (xy 148.070276 119.25534) (xy 148.07003 119.255408) (xy 148.042238 119.271644) + (xy 148.04199 119.271789) (xy 148.039263 119.272459) (xy 147.979646 119.288596) (xy 147.939301 119.288593) + (xy 147.939197 119.2886) (xy 146.498496 119.2886) (xy 146.490314 119.288598) (xy 146.490292 119.288593) + (xy 146.460365 119.288595) (xy 146.458128 119.288595) (xy 146.457846 119.288512) (xy 146.395593 119.271662) + (xy 146.367771 119.255408) (xy 146.361705 119.251864) (xy 146.360007 119.251017) (xy 146.352657 119.246734) + (xy 146.345821 119.24275) (xy 146.174097 119.180678) (xy 146.174091 119.180677) (xy 145.993981 119.150719) + (xy 145.993978 119.150719) (xy 145.985439 119.150865) (xy 145.811407 119.153859) (xy 145.632434 119.189994) + (xy 145.632423 119.189997) (xy 145.462942 119.257937) (xy 145.462941 119.257937) (xy 145.308561 119.355432) + (xy 145.308558 119.355434) (xy 145.174367 119.479273) (xy 145.064815 119.625354) (xy 144.98352 119.788844) + (xy 144.983519 119.788847) (xy 144.983518 119.78885) (xy 144.966645 119.847658) (xy 144.933158 119.964365) + (xy 144.919378 120.105413) (xy 144.915404 120.146093) (xy 144.916583 120.159989) (xy 144.930679 120.326147) + (xy 144.93084 120.328035) (xy 144.955548 120.418484) (xy 144.978956 120.504178) (xy 144.97896 120.504188) + (xy 144.986198 120.51927) (xy 144.98624 120.519356) (xy 144.989823 120.526838) (xy 144.989881 120.52714) + (xy 145.006197 120.561025) (xy 145.006236 120.561106) (xy 145.006381 120.562) (xy 145.018401 120.614669) + (xy 145.018401 121.963522) (xy 145.006207 122.017145) (xy 145.005619 122.018371) (xy 145.005539 122.018538) + (xy 144.986666 122.057737) (xy 144.986342 122.058539) (xy 144.978918 122.07401) (xy 144.930801 122.250154) + (xy 144.930801 122.250156) (xy 144.915365 122.432106) (xy 140.0875 122.432106) (xy 140.0875 116.59655) + (xy 141.0645 116.59655) (xy 141.0645 116.765849) (xy 141.090981 116.933047) (xy 141.143296 117.094053) + (xy 141.220152 117.244888) (xy 141.319648 117.381834) (xy 141.319651 117.381838) (xy 141.43936 117.501547) + (xy 141.439365 117.501551) (xy 141.519244 117.559586) (xy 141.576315 117.60105) (xy 141.672425 117.65002) + (xy 141.727146 117.677903) (xy 141.727148 117.677903) (xy 141.727151 117.677905) (xy 141.81345 117.705945) + (xy 141.888152 117.730218) (xy 142.055351 117.7567) (xy 142.055356 117.7567) (xy 142.224649 117.7567) + (xy 142.391847 117.730218) (xy 142.552849 117.677905) (xy 142.703685 117.60105) (xy 142.840641 117.501546) + (xy 142.960346 117.381841) (xy 142.960346 117.38184) (xy 142.960349 117.381838) (xy 142.960351 117.381834) + (xy 142.981179 117.353167) (xy 143.05985 117.244885) (xy 143.136705 117.094049) (xy 143.189018 116.933047) + (xy 143.2155 116.765849) (xy 143.2155 116.59655) (xy 143.189928 116.435098) (xy 143.198882 116.365805) + (xy 143.243879 116.312353) (xy 143.31063 116.291713) (xy 143.312401 116.2917) (xy 143.550944 116.2917) + (xy 143.550951 116.2917) (xy 143.830442 116.254904) (xy 144.102739 116.181942) (xy 144.363183 116.074063) + (xy 144.607317 115.933112) (xy 144.830965 115.7615) (xy 145.0303 115.562165) (xy 145.097992 115.473946) + (xy 145.15442 115.432744) (xy 145.224166 115.428589) (xy 145.285086 115.462801) (xy 145.317839 115.524518) + (xy 145.312026 115.594146) (xy 145.303755 115.611433) (xy 145.247683 115.708551) (xy 145.247675 115.708568) + (xy 145.137597 115.974321) (xy 145.063146 116.252176) (xy 145.025601 116.537361) (xy 145.0256 116.537377) + (xy 145.0256 116.825022) (xy 145.025601 116.825038) (xy 145.063146 117.110223) (xy 145.137597 117.388078) + (xy 145.247675 117.653831) (xy 145.247683 117.653848) (xy 145.391504 117.902951) (xy 145.391515 117.902967) + (xy 145.566621 118.131171) (xy 145.566627 118.131178) (xy 145.770021 118.334572) (xy 145.770027 118.334577) + (xy 145.998241 118.509691) (xy 145.998248 118.509695) (xy 146.247351 118.653516) (xy 146.247356 118.653518) + (xy 146.247359 118.65352) (xy 146.247363 118.653521) (xy 146.247368 118.653524) (xy 146.294808 118.673174) + (xy 146.51312 118.763602) (xy 146.790975 118.838053) (xy 147.076171 118.8756) (xy 147.076178 118.8756) + (xy 147.363822 118.8756) (xy 147.363829 118.8756) (xy 147.649025 118.838053) (xy 147.92688 118.763602) + (xy 148.192641 118.65352) (xy 148.195056 118.652126) (xy 148.309067 118.586301) (xy 148.441759 118.509691) + (xy 148.669973 118.334577) (xy 148.873377 118.131173) (xy 149.048491 117.902959) (xy 149.19232 117.653841) + (xy 149.302402 117.38808) (xy 149.376853 117.110225) (xy 149.4144 116.825029) (xy 149.4144 116.537371) + (xy 149.376853 116.252175) (xy 149.302402 115.97432) (xy 149.214705 115.762601) (xy 149.192324 115.708568) + (xy 149.192316 115.708551) (xy 149.048495 115.459448) (xy 149.048491 115.459441) (xy 148.907073 115.275141) + (xy 148.873378 115.231228) (xy 148.873372 115.231221) (xy 148.669978 115.027827) (xy 148.669971 115.027821) + (xy 148.441767 114.852715) (xy 148.441765 114.852713) (xy 148.441759 114.852709) (xy 148.441754 114.852706) + (xy 148.441751 114.852704) (xy 148.192648 114.708883) (xy 148.192631 114.708875) (xy 147.926878 114.598797) + (xy 147.649023 114.524346) (xy 147.363838 114.486801) (xy 147.363835 114.4868) (xy 147.363829 114.4868) + (xy 147.076171 114.4868) (xy 147.076165 114.4868) (xy 147.076161 114.486801) (xy 146.790976 114.524346) + (xy 146.513121 114.598797) (xy 146.247368 114.708875) (xy 146.247351 114.708883) (xy 145.998248 114.852704) + (xy 145.998232 114.852715) (xy 145.770028 115.027821) (xy 145.770021 115.027827) (xy 145.566627 115.231221) + (xy 145.49543 115.324007) (xy 145.439001 115.365209) (xy 145.369255 115.369364) (xy 145.308335 115.335151) + (xy 145.275583 115.273434) (xy 145.281396 115.203807) (xy 145.289661 115.186531) (xy 145.342863 115.094383) + (xy 145.450742 114.833939) (xy 145.523704 114.561642) (xy 145.5605 114.282151) (xy 145.5605 114.000249) + (xy 145.523704 113.720758) (xy 145.450742 113.448461) (xy 145.44376 113.431606) (xy 145.418765 113.371261) + (xy 145.342863 113.188017) (xy 145.342861 113.188014) (xy 145.342859 113.188009) (xy 145.201916 112.94389) + (xy 145.201912 112.943883) (xy 145.0303 112.720235) (xy 145.030298 112.720233) (xy 145.030295 112.720229) + (xy 144.83097 112.520904) (xy 144.806161 112.501867) (xy 144.607317 112.349288) (xy 144.607311 112.349284) + (xy 144.607309 112.349283) (xy 144.36319 112.20834) (xy 144.363179 112.208335) (xy 144.102743 112.100459) + (xy 143.830439 112.027495) (xy 143.550958 111.9907) (xy 143.550951 111.9907) (xy 143.269049 111.9907) + (xy 143.269041 111.9907) (xy 142.98956 112.027495) (xy 142.717256 112.100459) (xy 142.45682 112.208335) + (xy 142.456809 112.20834) (xy 142.21269 112.349283) (xy 142.212682 112.349289) (xy 141.989029 112.520904) + (xy 141.789704 112.720229) (xy 141.618089 112.943882) (xy 141.618083 112.94389) (xy 141.47714 113.188009) + (xy 141.477135 113.18802) (xy 141.369259 113.448456) (xy 141.296295 113.72076) (xy 141.2595 114.000241) + (xy 141.2595 114.282158) (xy 141.296295 114.561639) (xy 141.369259 114.833943) (xy 141.477135 115.094379) + (xy 141.47714 115.09439) (xy 141.618083 115.338509) (xy 141.618094 115.338525) (xy 141.748838 115.508914) + (xy 141.774032 115.574083) (xy 141.759994 115.642528) (xy 141.71118 115.692517) (xy 141.706758 115.694884) + (xy 141.576313 115.76135) (xy 141.439365 115.860848) (xy 141.43936 115.860852) (xy 141.319652 115.98056) + (xy 141.319648 115.980565) (xy 141.220152 116.117511) (xy 141.143296 116.268346) (xy 141.090981 116.429352) + (xy 141.0645 116.59655) (xy 140.0875 116.59655) (xy 140.0875 114.996075) (xy 140.107185 114.929036) + (xy 140.159989 114.883281) (xy 140.163999 114.881534) (xy 140.239179 114.850394) (xy 140.370289 114.762789) + (xy 140.481789 114.651289) (xy 140.569394 114.520179) (xy 140.629737 114.374497) (xy 140.6605 114.219842) + (xy 140.6605 114.062158) (xy 140.6605 114.062155) (xy 140.660499 114.062153) (xy 140.648556 114.002113) + (xy 140.629737 113.907503) (xy 140.602278 113.841211) (xy 140.569397 113.761827) (xy 140.56939 113.761814) + (xy 140.481789 113.630711) (xy 140.481786 113.630707) (xy 140.370292 113.519213) (xy 140.370288 113.51921) + (xy 140.239185 113.431609) (xy 140.239172 113.431602) (xy 140.093501 113.371264) (xy 140.093489 113.371261) + (xy 139.938845 113.3405) (xy 139.938842 113.3405) (xy 139.781158 113.3405) (xy 139.781155 113.3405) + (xy 139.62651 113.371261) (xy 139.626503 113.371263) (xy 139.551368 113.402384) (xy 139.481899 113.409851) + (xy 139.41942 113.378576) (xy 139.416236 113.375503) (xy 137.584604 111.543871) (xy 137.500974 111.460241) + (xy 147.6095 111.460241) (xy 147.6095 111.742158) (xy 147.646295 112.021639) (xy 147.719259 112.293943) + (xy 147.827135 112.554379) (xy 147.82714 112.55439) (xy 147.968083 112.798509) (xy 147.968088 112.798517) + (xy 148.086074 112.952278) (xy 148.139704 113.02217) (xy 148.339029 113.221495) (xy 148.339033 113.221498) + (xy 148.339035 113.2215) (xy 148.562683 113.393112) (xy 148.56269 113.393116) (xy 148.806809 113.534059) + (xy 148.806814 113.534061) (xy 148.806817 113.534063) (xy 148.914834 113.578805) (xy 149.032486 113.627538) + (xy 149.067261 113.641942) (xy 149.339558 113.714904) (xy 149.619049 113.7517) (xy 149.619056 113.7517) + (xy 149.900944 113.7517) (xy 149.900951 113.7517) (xy 150.180442 113.714904) (xy 150.452739 113.641942) + (xy 150.713183 113.534063) (xy 150.957317 113.393112) (xy 151.180965 113.2215) (xy 151.3803 113.022165) + (xy 151.551912 112.798517) (xy 151.692863 112.554383) (xy 151.800742 112.293939) (xy 151.873704 112.021642) + (xy 151.9105 111.742151) (xy 151.9105 111.460249) (xy 151.873704 111.180758) (xy 151.800742 110.908461) + (xy 151.79376 110.891606) (xy 151.768765 110.831261) (xy 151.692863 110.648017) (xy 151.692861 110.648014) + (xy 151.692859 110.648009) (xy 151.551916 110.40389) (xy 151.551912 110.403883) (xy 151.3803 110.180235) + (xy 151.380298 110.180233) (xy 151.380295 110.180229) (xy 151.18097 109.980904) (xy 151.180965 109.9809) + (xy 150.957317 109.809288) (xy 150.957311 109.809284) (xy 150.957309 109.809283) (xy 150.71319 109.66834) + (xy 150.713179 109.668335) (xy 150.452743 109.560459) (xy 150.180439 109.487495) (xy 149.900958 109.4507) + (xy 149.900951 109.4507) (xy 149.619049 109.4507) (xy 149.619041 109.4507) (xy 149.33956 109.487495) + (xy 149.067256 109.560459) (xy 148.80682 109.668335) (xy 148.806809 109.66834) (xy 148.56269 109.809283) + (xy 148.562684 109.809287) (xy 148.562683 109.809288) (xy 148.515169 109.845747) (xy 148.339029 109.980904) + (xy 148.139704 110.180229) (xy 148.026381 110.327914) (xy 147.979327 110.389237) (xy 147.968089 110.403882) + (xy 147.968083 110.40389) (xy 147.82714 110.648009) (xy 147.827135 110.64802) (xy 147.719259 110.908456) + (xy 147.646295 111.18076) (xy 147.6095 111.460241) (xy 137.500974 111.460241) (xy 134.980433 108.9397) + (xy 130.571819 104.531085) (xy 130.538334 104.469762) (xy 130.5355 104.443404) (xy 130.5355 103.541706) + (xy 135.390265 103.541706) (xy 135.40754 103.718525) (xy 135.408021 103.723442) (xy 135.423947 103.778948) + (xy 135.45838 103.898961) (xy 135.53968 104.062463) (xy 135.539681 104.062465) (xy 135.539683 104.062468) + (xy 135.598701 104.141164) (xy 135.649238 104.208552) (xy 135.649239 104.208553) (xy 135.64924 104.208554) + (xy 135.783432 104.332395) (xy 135.937825 104.429897) (xy 136.055878 104.47722) (xy 136.107314 104.497839) + (xy 136.107315 104.497839) (xy 136.107317 104.49784) (xy 136.286308 104.533979) (xy 136.286302 104.533979) + (xy 136.302622 104.534259) (xy 136.468884 104.53712) (xy 136.649012 104.507158) (xy 136.704449 104.487119) + (xy 136.820736 104.445085) (xy 136.820737 104.445083) (xy 136.82074 104.445083) (xy 136.835935 104.436228) + (xy 136.842459 104.432435) (xy 136.84275 104.432357) (xy 136.870633 104.41606) (xy 136.870751 104.415992) + (xy 136.873968 104.415201) (xy 136.933062 104.399199) (xy 138.414192 104.399199) (xy 138.414314 104.399206) + (xy 138.422405 104.399205) (xy 138.422408 104.399206) (xy 138.454542 104.399202) (xy 138.517104 104.416134) + (xy 138.54493 104.432391) (xy 138.544932 104.432391) (xy 138.55108 104.435983) (xy 138.552735 104.436808) + (xy 138.566878 104.44505) (xy 138.7386 104.507121) (xy 138.918721 104.537082) (xy 139.098398 104.53399) + (xy 139.101291 104.533941) (xy 139.280266 104.497805) (xy 139.280269 104.497803) (xy 139.280274 104.497803) + (xy 139.44976 104.429862) (xy 139.604146 104.332363) (xy 139.609453 104.327466) (xy 139.73833 104.20853) + (xy 139.738332 104.208528) (xy 139.742007 104.203628) (xy 139.847885 104.062447) (xy 139.929184 103.898948) + (xy 139.979542 103.723433) (xy 139.997297 103.541703) (xy 139.98186 103.35976) (xy 139.981858 103.359754) + (xy 139.969837 103.315747) (xy 139.933743 103.183618) (xy 139.925983 103.167449) (xy 139.922896 103.161004) + (xy 139.922848 103.160746) (xy 139.906471 103.126719) (xy 139.906343 103.12593) (xy 139.894302 103.073131) + (xy 139.894302 103.073122) (xy 139.894307 103.035708) (xy 139.894306 103.035704) (xy 139.894307 103.027698) + (xy 139.894299 103.02756) (xy 139.894299 101.724277) (xy 139.896954 101.712608) (xy 139.89592 101.704294) + (xy 139.906505 101.670628) (xy 139.912811 101.65749) (xy 139.922874 101.636574) (xy 139.922874 101.636569) + (xy 139.92626 101.629533) (xy 139.926425 101.629122) (xy 139.926546 101.62887) (xy 139.933783 101.613791) + (xy 139.9819 101.437642) (xy 139.997337 101.255693) (xy 139.979581 101.073955) (xy 139.92922 100.898434) + (xy 139.847918 100.73493) (xy 139.770831 100.63214) (xy 139.738362 100.588845) (xy 139.723741 100.575352) + (xy 139.604169 100.465004) (xy 139.604166 100.465002) (xy 139.604165 100.465001) (xy 139.604162 100.464999) + (xy 139.449777 100.367501) (xy 139.280287 100.299558) (xy 139.280277 100.299556) (xy 139.101292 100.263418) + (xy 139.101299 100.263418) (xy 138.929594 100.260465) (xy 138.918718 100.260278) (xy 138.918717 100.260278) + (xy 138.918714 100.260278) (xy 138.738597 100.290238) (xy 138.738584 100.290241) (xy 138.566863 100.352313) + (xy 138.552348 100.36077) (xy 138.552263 100.360819) (xy 138.545176 100.36494) (xy 138.54493 100.365008) + (xy 138.517138 100.381244) (xy 138.51689 100.381389) (xy 138.514163 100.382059) (xy 138.454546 100.398196) + (xy 138.414201 100.398193) (xy 138.414097 100.3982) (xy 136.973396 100.3982) (xy 136.965214 100.398198) + (xy 136.965192 100.398193) (xy 136.935265 100.398195) (xy 136.933028 100.398195) (xy 136.932746 100.398112) + (xy 136.870493 100.381262) (xy 136.842671 100.365008) (xy 136.836605 100.361464) (xy 136.834907 100.360617) + (xy 136.827557 100.356334) (xy 136.820721 100.35235) (xy 136.648997 100.290278) (xy 136.648991 100.290277) + (xy 136.468881 100.260319) (xy 136.468878 100.260319) (xy 136.460339 100.260465) (xy 136.286307 100.263459) + (xy 136.107334 100.299594) (xy 136.107323 100.299597) (xy 135.937842 100.367537) (xy 135.937841 100.367537) + (xy 135.783461 100.465032) (xy 135.783458 100.465034) (xy 135.649267 100.588873) (xy 135.539715 100.734954) + (xy 135.45842 100.898444) (xy 135.458419 100.898447) (xy 135.458418 100.89845) (xy 135.439621 100.963963) + (xy 135.408058 101.073965) (xy 135.390304 101.255691) (xy 135.390304 101.255693) (xy 135.393964 101.298829) + (xy 135.405657 101.436667) (xy 135.40574 101.437635) (xy 135.439436 101.560988) (xy 135.453856 101.613778) + (xy 135.45386 101.613788) (xy 135.461098 101.62887) (xy 135.46114 101.628956) (xy 135.464723 101.636438) + (xy 135.464781 101.63674) (xy 135.481097 101.670625) (xy 135.481136 101.670706) (xy 135.481281 101.6716) + (xy 135.493301 101.724269) (xy 135.493301 103.073122) (xy 135.481107 103.126745) (xy 135.480519 103.127971) + (xy 135.480439 103.128138) (xy 135.461566 103.167337) (xy 135.461242 103.168139) (xy 135.453818 103.18361) + (xy 135.405701 103.359754) (xy 135.405701 103.359756) (xy 135.390265 103.541706) (xy 130.5355 103.541706) + (xy 130.5355 97.54655) (xy 131.512 97.54655) (xy 131.512 97.715849) (xy 131.538481 97.883047) (xy 131.590796 98.044053) + (xy 131.667652 98.194888) (xy 131.767148 98.331834) (xy 131.767152 98.331839) (xy 131.88686 98.451547) + (xy 131.886865 98.451551) (xy 131.963873 98.5075) (xy 132.023815 98.55105) (xy 132.117141 98.598602) + (xy 132.174646 98.627903) (xy 132.174648 98.627903) (xy 132.174651 98.627905) (xy 132.25885 98.655263) + (xy 132.335652 98.680218) (xy 132.502851 98.7067) (xy 132.502856 98.7067) (xy 132.672149 98.7067) + (xy 132.839347 98.680218) (xy 133.000349 98.627905) (xy 133.151185 98.55105) (xy 133.288141 98.451546) + (xy 133.407846 98.331841) (xy 133.50735 98.194885) (xy 133.584205 98.044049) (xy 133.636518 97.883047) + (xy 133.646383 97.820763) (xy 133.663 97.715849) (xy 133.663 97.54655) (xy 133.637428 97.385098) + (xy 133.646382 97.315805) (xy 133.691379 97.262353) (xy 133.75813 97.241713) (xy 133.759901 97.2417) + (xy 133.998444 97.2417) (xy 133.998451 97.2417) (xy 134.277942 97.204904) (xy 134.550239 97.131942) + (xy 134.810683 97.024063) (xy 135.054817 96.883112) (xy 135.278465 96.7115) (xy 135.4778 96.512165) + (xy 135.545492 96.423946) (xy 135.60192 96.382744) (xy 135.671666 96.378589) (xy 135.732586 96.412801) + (xy 135.765339 96.474518) (xy 135.759526 96.544146) (xy 135.751255 96.561433) (xy 135.695183 96.658551) + (xy 135.695175 96.658568) (xy 135.585097 96.924321) (xy 135.510646 97.202176) (xy 135.473101 97.487361) + (xy 135.4731 97.487377) (xy 135.4731 97.775022) (xy 135.473101 97.775038) (xy 135.510646 98.060223) + (xy 135.585097 98.338078) (xy 135.695175 98.603831) (xy 135.695183 98.603848) (xy 135.839004 98.852951) + (xy 135.839015 98.852967) (xy 136.014121 99.081171) (xy 136.014127 99.081178) (xy 136.217521 99.284572) + (xy 136.217528 99.284578) (xy 136.350807 99.386846) (xy 136.445741 99.459691) (xy 136.445748 99.459695) + (xy 136.694851 99.603516) (xy 136.694856 99.603518) (xy 136.694859 99.60352) (xy 136.694863 99.603521) + (xy 136.694868 99.603524) (xy 136.737477 99.621173) (xy 136.96062 99.713602) (xy 137.238475 99.788053) + (xy 137.523671 99.8256) (xy 137.523678 99.8256) (xy 137.811322 99.8256) (xy 137.811329 99.8256) + (xy 138.096525 99.788053) (xy 138.37438 99.713602) (xy 138.640141 99.60352) (xy 138.889259 99.459691) + (xy 139.117473 99.284577) (xy 139.320877 99.081173) (xy 139.495991 98.852959) (xy 139.63982 98.603841) + (xy 139.749902 98.33808) (xy 139.824353 98.060225) (xy 139.8619 97.775029) (xy 139.8619 97.54655) + (xy 141.672 97.54655) (xy 141.672 97.715849) (xy 141.698481 97.883047) (xy 141.750796 98.044053) + (xy 141.827652 98.194888) (xy 141.927148 98.331834) (xy 141.927152 98.331839) (xy 142.04686 98.451547) + (xy 142.046865 98.451551) (xy 142.123873 98.5075) (xy 142.183815 98.55105) (xy 142.277141 98.598602) + (xy 142.334646 98.627903) (xy 142.334648 98.627903) (xy 142.334651 98.627905) (xy 142.41885 98.655263) + (xy 142.495652 98.680218) (xy 142.662851 98.7067) (xy 142.662856 98.7067) (xy 142.832149 98.7067) + (xy 142.999347 98.680218) (xy 143.160349 98.627905) (xy 143.311185 98.55105) (xy 143.448141 98.451546) + (xy 143.567846 98.331841) (xy 143.66735 98.194885) (xy 143.744205 98.044049) (xy 143.796518 97.883047) + (xy 143.806383 97.820763) (xy 143.823 97.715849) (xy 143.823 97.54655) (xy 143.796518 97.379352) + (xy 143.751796 97.241713) (xy 143.744205 97.218351) (xy 143.744203 97.218348) (xy 143.744203 97.218346) + (xy 143.700176 97.13194) (xy 143.66735 97.067515) (xy 143.635781 97.024064) (xy 143.567851 96.930565) + (xy 143.567847 96.93056) (xy 143.448139 96.810852) (xy 143.448134 96.810848) (xy 143.311188 96.711352) + (xy 143.311187 96.711351) (xy 143.311185 96.71135) (xy 143.264082 96.68735) (xy 143.160353 96.634496) + (xy 142.999347 96.582181) (xy 142.832149 96.5557) (xy 142.832144 96.5557) (xy 142.662856 96.5557) + (xy 142.662851 96.5557) (xy 142.495652 96.582181) (xy 142.334646 96.634496) (xy 142.183811 96.711352) + (xy 142.046865 96.810848) (xy 142.04686 96.810852) (xy 141.927152 96.93056) (xy 141.927148 96.930565) + (xy 141.827652 97.067511) (xy 141.750796 97.218346) (xy 141.698481 97.379352) (xy 141.672 97.54655) + (xy 139.8619 97.54655) (xy 139.8619 97.487371) (xy 139.824353 97.202175) (xy 139.749902 96.92432) + (xy 139.63982 96.658559) (xy 139.639818 96.658556) (xy 139.639816 96.658551) (xy 139.495995 96.409448) + (xy 139.495991 96.409441) (xy 139.392069 96.274007) (xy 139.320878 96.181228) (xy 139.320872 96.181221) + (xy 139.117478 95.977827) (xy 139.117471 95.977821) (xy 138.889267 95.802715) (xy 138.889265 95.802713) + (xy 138.889259 95.802709) (xy 138.889254 95.802706) (xy 138.889251 95.802704) (xy 138.640148 95.658883) + (xy 138.640131 95.658875) (xy 138.374378 95.548797) (xy 138.096523 95.474346) (xy 137.811338 95.436801) + (xy 137.811335 95.4368) (xy 137.811329 95.4368) (xy 137.523671 95.4368) (xy 137.523665 95.4368) + (xy 137.523661 95.436801) (xy 137.238476 95.474346) (xy 136.960621 95.548797) (xy 136.694868 95.658875) + (xy 136.694851 95.658883) (xy 136.445748 95.802704) (xy 136.445732 95.802715) (xy 136.217528 95.977821) + (xy 136.217521 95.977827) (xy 136.014127 96.181221) (xy 135.94293 96.274007) (xy 135.886501 96.315209) + (xy 135.816755 96.319364) (xy 135.755835 96.285151) (xy 135.723083 96.223434) (xy 135.728896 96.153807) + (xy 135.737161 96.136531) (xy 135.790363 96.044383) (xy 135.898242 95.783939) (xy 135.971204 95.511642) + (xy 136.008 95.232151) (xy 136.008 94.950249) (xy 135.971204 94.670758) (xy 135.898242 94.398461) + (xy 135.891342 94.381804) (xy 135.866349 94.321464) (xy 135.790363 94.138017) (xy 135.790361 94.138014) + (xy 135.790359 94.138009) (xy 135.649416 93.89389) (xy 135.649412 93.893883) (xy 135.4778 93.670235) + (xy 135.477798 93.670233) (xy 135.477795 93.670229) (xy 135.27847 93.470904) (xy 135.253921 93.452067) + (xy 135.054817 93.299288) (xy 135.054811 93.299284) (xy 135.054809 93.299283) (xy 134.81069 93.15834) + (xy 134.810679 93.158335) (xy 134.550243 93.050459) (xy 134.277939 92.977495) (xy 133.998458 92.9407) + (xy 133.998451 92.9407) (xy 133.716549 92.9407) (xy 133.716541 92.9407) (xy 133.43706 92.977495) + (xy 133.164756 93.050459) (xy 132.90432 93.158335) (xy 132.904309 93.15834) (xy 132.66019 93.299283) + (xy 132.660184 93.299287) (xy 132.660183 93.299288) (xy 132.598401 93.346695) (xy 132.436529 93.470904) + (xy 132.237204 93.670229) (xy 132.113314 93.831685) (xy 132.079927 93.875197) (xy 132.065589 93.893882) + (xy 132.065583 93.89389) (xy 131.92464 94.138009) (xy 131.924635 94.13802) (xy 131.816759 94.398456) + (xy 131.743795 94.67076) (xy 131.707 94.950241) (xy 131.707 95.232158) (xy 131.743795 95.511639) + (xy 131.816759 95.783943) (xy 131.924635 96.044379) (xy 131.92464 96.04439) (xy 132.065583 96.288509) + (xy 132.065594 96.288525) (xy 132.196338 96.458914) (xy 132.221532 96.524083) (xy 132.207494 96.592528) + (xy 132.15868 96.642517) (xy 132.154258 96.644884) (xy 132.023813 96.71135) (xy 131.886865 96.810848) + (xy 131.88686 96.810852) (xy 131.767152 96.93056) (xy 131.767148 96.930565) (xy 131.667652 97.067511) + (xy 131.590796 97.218346) (xy 131.538481 97.379352) (xy 131.512 97.54655) (xy 130.5355 97.54655) + (xy 130.5355 95.946275) (xy 130.555185 95.879236) (xy 130.607989 95.833481) (xy 130.611999 95.831734) + (xy 130.687179 95.800594) (xy 130.818289 95.712989) (xy 130.929789 95.601489) (xy 131.017394 95.470379) + (xy 131.077737 95.324697) (xy 131.1085 95.170042) (xy 131.1085 95.012358) (xy 131.1085 95.012355) + (xy 131.108499 95.012353) (xy 131.077738 94.85771) (xy 131.077737 94.857703) (xy 131.077735 94.857698) + (xy 131.017397 94.712027) (xy 131.01739 94.712014) (xy 130.929789 94.580911) (xy 130.929786 94.580907) + (xy 130.818292 94.469413) (xy 130.818288 94.46941) (xy 130.687185 94.381809) (xy 130.687172 94.381802) + (xy 130.541501 94.321464) (xy 130.541489 94.321461) (xy 130.386845 94.2907) (xy 130.386842 94.2907) + (xy 130.229158 94.2907) (xy 130.229155 94.2907) (xy 130.07451 94.321461) (xy 130.074498 94.321464) + (xy 129.928827 94.381802) (xy 129.928814 94.381809) (xy 129.797711 94.46941) (xy 129.797707 94.469413) + (xy 129.686213 94.580907) (xy 129.68621 94.580911) (xy 129.598609 94.712014) (xy 129.598602 94.712027) + (xy 129.538264 94.857698) (xy 129.538261 94.85771) (xy 129.5075 95.012353) (xy 129.5075 95.170046) + (xy 129.538261 95.324689) (xy 129.538264 95.324701) (xy 129.598602 95.470372) (xy 129.598609 95.470385) + (xy 129.68621 95.601488) (xy 129.686213 95.601492) (xy 129.797707 95.712986) (xy 129.797711 95.712989) + (xy 129.928814 95.80059) (xy 129.928818 95.800592) (xy 129.928821 95.800594) (xy 130.003954 95.831715) + (xy 130.058356 95.875554) (xy 130.080421 95.941848) (xy 130.0805 95.946275) (xy 130.0805 104.543747) + (xy 130.0805 104.634253) (xy 130.105352 104.694249) (xy 130.115136 104.71787) (xy 139.094503 113.697236) + (xy 139.127988 113.758559) (xy 139.123004 113.828251) (xy 139.121384 113.832368) (xy 139.090263 113.907503) + (xy 139.090261 113.90751) (xy 139.0595 114.062153) (xy 139.0595 114.219846) (xy 139.090261 114.374489) + (xy 139.090264 114.374501) (xy 139.150602 114.520172) (xy 139.150609 114.520185) (xy 139.23821 114.651288) + (xy 139.238213 114.651292) (xy 139.349707 114.762786) (xy 139.349711 114.762789) (xy 139.480814 114.85039) + (xy 139.480818 114.850392) (xy 139.480821 114.850394) (xy 139.555954 114.881515) (xy 139.610356 114.925354) + (xy 139.632421 114.991648) (xy 139.6325 114.996075) (xy 139.6325 115.116404) (xy 139.612815 115.183443) + (xy 139.560011 115.229198) (xy 139.490853 115.239142) (xy 139.427297 115.210117) (xy 139.420819 115.204085) + (xy 126.155819 101.939085) (xy 126.122334 101.877762) (xy 126.1195 101.851404) (xy 126.1195 92.410241) + (xy 138.057 92.410241) (xy 138.057 92.692158) (xy 138.093795 92.971639) (xy 138.166759 93.243943) + (xy 138.274635 93.504379) (xy 138.27464 93.50439) (xy 138.415583 93.748509) (xy 138.415588 93.748517) + (xy 138.5872 93.972165) (xy 138.587204 93.97217) (xy 138.786529 94.171495) (xy 138.786533 94.171498) + (xy 138.786535 94.1715) (xy 139.010183 94.343112) (xy 139.01019 94.343116) (xy 139.254309 94.484059) + (xy 139.254314 94.484061) (xy 139.254317 94.484063) (xy 139.514761 94.591942) (xy 139.787058 94.664904) + (xy 140.066549 94.7017) (xy 140.066556 94.7017) (xy 140.348444 94.7017) (xy 140.348451 94.7017) + (xy 140.627942 94.664904) (xy 140.900239 94.591942) (xy 141.160683 94.484063) (xy 141.404817 94.343112) + (xy 141.628465 94.1715) (xy 141.8278 93.972165) (xy 141.999412 93.748517) (xy 142.140363 93.504383) + (xy 142.248242 93.243939) (xy 142.321204 92.971642) (xy 142.358 92.692151) (xy 142.358 92.410249) + (xy 142.321204 92.130758) (xy 142.248242 91.858461) (xy 142.241342 91.841804) (xy 142.216349 91.781464) + (xy 142.140363 91.598017) (xy 142.140361 91.598014) (xy 142.140359 91.598009) (xy 141.999416 91.35389) + (xy 141.999412 91.353883) (xy 141.8278 91.130235) (xy 141.827798 91.130233) (xy 141.827795 91.130229) + (xy 141.62847 90.930904) (xy 141.628465 90.9309) (xy 141.404817 90.759288) (xy 141.404811 90.759284) + (xy 141.404809 90.759283) (xy 141.16069 90.61834) (xy 141.160679 90.618335) (xy 140.900243 90.510459) + (xy 140.627939 90.437495) (xy 140.348458 90.4007) (xy 140.348451 90.4007) (xy 140.066549 90.4007) + (xy 140.066541 90.4007) (xy 139.78706 90.437495) (xy 139.514756 90.510459) (xy 139.25432 90.618335) + (xy 139.254309 90.61834) (xy 139.01019 90.759283) (xy 139.010184 90.759287) (xy 139.010183 90.759288) + (xy 138.974557 90.786625) (xy 138.786529 90.930904) (xy 138.587204 91.130229) (xy 138.517704 91.220803) + (xy 138.426612 91.339517) (xy 138.415589 91.353882) (xy 138.415583 91.35389) (xy 138.27464 91.598009) + (xy 138.274635 91.59802) (xy 138.166759 91.858456) (xy 138.093795 92.13076) (xy 138.057 92.410241) + (xy 126.1195 92.410241) (xy 126.1195 91.019286) (xy 126.139185 90.952247) (xy 126.155811 90.931613) + (xy 130.50292 86.584122) (xy 130.564242 86.550635) (xy 130.590605 86.5478) (xy 146.72445 86.5478) + (xy 146.791489 86.567485) (xy 146.837244 86.620289) (xy 146.847188 86.689447) (xy 146.818163 86.753003) + (xy 146.812139 86.759474) (xy 143.594617 89.977548) (xy 143.594574 89.977591) (xy 143.594181 89.977985) + (xy 143.565135 90.007032) (xy 143.565131 90.00704) (xy 143.565123 90.007049) (xy 143.564666 90.008151) + (xy 143.564665 90.008153) (xy 143.555858 90.029423) (xy 143.549532 90.0447) (xy 143.54456 90.056702) + (xy 143.530498 90.090649) (xy 143.530496 90.09066) (xy 143.5305 90.128499) (xy 143.5305 91.696124) + (xy 143.510815 91.763163) (xy 143.458011 91.808918) (xy 143.453953 91.810685) (xy 143.378824 91.841804) + (xy 143.378814 91.841809) (xy 143.247711 91.92941) (xy 143.247707 91.929413) (xy 143.136213 92.040907) + (xy 143.13621 92.040911) (xy 143.048609 92.172014) (xy 143.048602 92.172027) (xy 142.988264 92.317698) + (xy 142.988261 92.31771) (xy 142.9575 92.472353) (xy 142.9575 92.630046) (xy 142.988261 92.784689) + (xy 142.988264 92.784701) (xy 143.048602 92.930372) (xy 143.048609 92.930385) (xy 143.13621 93.061488) + (xy 143.136213 93.061492) (xy 143.247707 93.172986) (xy 143.247711 93.172989) (xy 143.378814 93.26059) + (xy 143.378827 93.260597) (xy 143.474499 93.300225) (xy 143.524503 93.320937) (xy 143.679153 93.351699) + (xy 143.679156 93.3517) (xy 143.679158 93.3517) (xy 143.836844 93.3517) (xy 143.836845 93.351699) + (xy 143.991497 93.320937) (xy 144.137179 93.260594) (xy 144.268289 93.172989) (xy 144.379789 93.061489) + (xy 144.409397 93.017176) (xy 144.463009 92.972371) (xy 144.532334 92.963664) (xy 144.595362 92.993818) + (xy 144.632082 93.053261) (xy 144.6365 93.086067) (xy 144.6365 102.943747) (xy 144.6365 103.034253) + (xy 144.670961 103.117449) (xy 144.671136 103.11787) (xy 152.598535 111.045269) (xy 152.63202 111.106592) + (xy 152.627036 111.176284) (xy 152.613957 111.20184) (xy 152.600608 111.221817) (xy 152.600602 111.221828) + (xy 152.540264 111.367498) (xy 152.540261 111.36751) (xy 152.5095 111.522153) (xy 152.5095 111.679846) + (xy 152.540261 111.834489) (xy 152.540264 111.834501) (xy 152.600602 111.980172) (xy 152.600609 111.980185) + (xy 152.68821 112.111288) (xy 152.688213 112.111292) (xy 152.799707 112.222786) (xy 152.799711 112.222789) + (xy 152.930814 112.31039) (xy 152.930827 112.310397) (xy 153.076498 112.370735) (xy 153.076503 112.370737) + (xy 153.231153 112.401499) (xy 153.231156 112.4015) (xy 153.231158 112.4015) (xy 153.388844 112.4015) + (xy 153.388845 112.401499) (xy 153.407658 112.397757) (xy 153.462309 112.386887) (xy 153.5319 112.393114) + (xy 153.587077 112.435977) (xy 153.610322 112.501867) (xy 153.6105 112.508504) (xy 153.6105 116.504715) + (xy 153.590815 116.571754) (xy 153.538011 116.617509) (xy 153.468853 116.627453) (xy 153.405297 116.598428) + (xy 153.367523 116.53965) (xy 153.364027 116.524113) (xy 153.349018 116.429352) (xy 153.322275 116.347046) + (xy 153.296705 116.268351) (xy 153.296703 116.268348) (xy 153.296703 116.268346) (xy 153.246015 116.168867) + (xy 153.21985 116.117515) (xy 153.188281 116.074064) (xy 153.120351 115.980565) (xy 153.120347 115.98056) + (xy 153.000639 115.860852) (xy 153.000634 115.860848) (xy 152.863688 115.761352) (xy 152.863687 115.761351) + (xy 152.863685 115.76135) (xy 152.814398 115.736237) (xy 152.712853 115.684496) (xy 152.551847 115.632181) + (xy 152.384649 115.6057) (xy 152.384644 115.6057) (xy 152.215356 115.6057) (xy 152.215351 115.6057) + (xy 152.048152 115.632181) (xy 151.887146 115.684496) (xy 151.736311 115.761352) (xy 151.599365 115.860848) + (xy 151.59936 115.860852) (xy 151.479652 115.98056) (xy 151.479648 115.980565) (xy 151.380152 116.117511) + (xy 151.303296 116.268346) (xy 151.250981 116.429352) (xy 151.2245 116.59655) (xy 151.2245 116.765849) + (xy 151.250981 116.933047) (xy 151.303296 117.094053) (xy 151.380152 117.244888) (xy 151.479648 117.381834) + (xy 151.479651 117.381838) (xy 151.59936 117.501547) (xy 151.599365 117.501551) (xy 151.679244 117.559586) + (xy 151.736315 117.60105) (xy 151.832425 117.65002) (xy 151.887146 117.677903) (xy 151.887148 117.677903) + (xy 151.887151 117.677905) (xy 151.97345 117.705945) (xy 152.048152 117.730218) (xy 152.215351 117.7567) + (xy 152.215356 117.7567) (xy 152.384649 117.7567) (xy 152.551847 117.730218) (xy 152.712849 117.677905) + (xy 152.863685 117.60105) (xy 153.000641 117.501546) (xy 153.120346 117.381841) (xy 153.120346 117.38184) + (xy 153.120349 117.381838) (xy 153.120351 117.381834) (xy 153.141179 117.353167) (xy 153.21985 117.244885) + (xy 153.296705 117.094049) (xy 153.349018 116.933047) (xy 153.364027 116.838286) (xy 153.393956 116.775151) + (xy 153.453268 116.73822) (xy 153.52313 116.739218) (xy 153.581363 116.777828) (xy 153.609477 116.841792) + (xy 153.6105 116.857684) (xy 153.6105 124.838438) (xy 153.609071 124.845837) (xy 153.60993 124.85031) + (xy 153.601586 124.884603) (xy 153.583585 124.929478) (xy 153.583061 124.930764) (xy 153.566472 124.970814) + (xy 153.566381 124.971301) (xy 153.566117 124.972671) (xy 153.566005 124.973232) (xy 153.566492 125.016552) + (xy 153.5665 125.017945) (xy 153.5665 125.061254) (xy 153.566869 125.063111) (xy 153.566883 125.063177) + (xy 153.566995 125.06374) (xy 153.584043 125.103627) (xy 153.584325 125.104286) (xy 153.601135 125.144868) + (xy 153.602073 125.145806) (xy 153.602595 125.147027) (xy 153.6336 125.177343) (xy 153.634589 125.178322) + (xy 157.834181 129.377914) (xy 157.867666 129.439237) (xy 157.8705 129.465595) (xy 157.8705 129.795924) + (xy 157.850815 129.862963) (xy 157.798011 129.908718) (xy 157.793953 129.910485) (xy 157.718824 129.941604) + (xy 157.718814 129.941609) (xy 157.587711 130.02921) (xy 157.587707 130.029213) (xy 157.476213 130.140707) + (xy 157.47621 130.140711) (xy 157.388609 130.271814) (xy 157.388602 130.271827) (xy 157.328264 130.417498) + (xy 157.328261 130.41751) (xy 157.2975 130.572153) (xy 157.2975 130.729846) (xy 157.328261 130.884489) + (xy 157.328264 130.884501) (xy 157.388602 131.030172) (xy 157.388609 131.030185) (xy 157.47621 131.161288) + (xy 157.476213 131.161292) (xy 157.587707 131.272786) (xy 157.587711 131.272789) (xy 157.718814 131.36039) + (xy 157.718827 131.360397) (xy 157.860679 131.419153) (xy 157.864503 131.420737) (xy 158.019153 131.451499) + (xy 158.019156 131.4515) (xy 158.019158 131.4515) (xy 158.176844 131.4515) (xy 158.176845 131.451499) + (xy 158.195658 131.447757) (xy 158.250309 131.436887) (xy 158.271292 131.438764) (xy 158.292147 131.435766) + (xy 158.305394 131.441816) (xy 158.3199 131.443114) (xy 158.336537 131.456038) (xy 158.355703 131.464791) + (xy 158.363577 131.477043) (xy 158.375077 131.485977) (xy 158.382085 131.505843) (xy 158.393477 131.523569) + (xy 158.397011 131.548152) (xy 158.398322 131.551867) (xy 158.3985 131.558504) (xy 158.3985 131.63992) + (xy 158.378815 131.706959) (xy 158.366351 131.722314) (xy 158.363894 131.725995) (xy 158.363353 131.726799) + (xy 158.363147 131.727101) (xy 158.346266 131.767853) (xy 158.346072 131.768321) (xy 158.328832 131.809112) + (xy 158.328825 131.80996) (xy 158.3285 131.810747) (xy 158.3285 131.855267) (xy 158.328181 131.899615) + (xy 158.3285 131.900401) (xy 158.3285 135.287309) (xy 158.308815 135.354348) (xy 158.256011 135.400103) + (xy 158.186853 135.410047) (xy 158.123297 135.381022) (xy 158.08657 135.325629) (xy 158.084205 135.31835) + (xy 158.040176 135.23194) (xy 158.00735 135.167515) (xy 157.975781 135.124064) (xy 157.907851 135.030565) + (xy 157.907847 135.03056) (xy 157.788139 134.910852) (xy 157.788134 134.910848) (xy 157.651188 134.811352) + (xy 157.651187 134.811351) (xy 157.651185 134.81135) (xy 157.586109 134.778192) (xy 157.500353 134.734496) + (xy 157.339347 134.682181) (xy 157.172149 134.6557) (xy 157.172144 134.6557) (xy 157.002856 134.6557) + (xy 157.002851 134.6557) (xy 156.835652 134.682181) (xy 156.674646 134.734496) (xy 156.523811 134.811352) + (xy 156.386865 134.910848) (xy 156.38686 134.910852) (xy 156.267152 135.03056) (xy 156.267148 135.030565) + (xy 156.167652 135.167511) (xy 156.090796 135.318346) (xy 156.038481 135.479352) (xy 156.012 135.64655) + (xy 156.012 135.815849) (xy 156.038481 135.983047) (xy 156.090796 136.144053) (xy 156.167652 136.294888) + (xy 156.267148 136.431834) (xy 156.267152 136.431839) (xy 156.38686 136.551547) (xy 156.386865 136.551551) + (xy 156.506317 136.638337) (xy 156.523815 136.65105) (xy 156.587017 136.683253) (xy 156.674646 136.727903) + (xy 156.674648 136.727903) (xy 156.674651 136.727905) (xy 156.76095 136.755945) (xy 156.835652 136.780218) + (xy 157.002851 136.8067) (xy 157.002856 136.8067) (xy 157.172149 136.8067) (xy 157.339347 136.780218) + (xy 157.500349 136.727905) (xy 157.651185 136.65105) (xy 157.788141 136.551546) (xy 157.907846 136.431841) + (xy 158.00735 136.294885) (xy 158.084205 136.144049) (xy 158.086569 136.136772) (xy 158.126006 136.079097) + (xy 158.190364 136.051898) (xy 158.25921 136.063812) (xy 158.310687 136.111056) (xy 158.3285 136.17509) + (xy 158.3285 141.043747) (xy 158.3285 141.134253) (xy 158.347197 141.179392) (xy 158.363136 141.21787) + (xy 164.510822 147.365555) (xy 164.544307 147.426878) (xy 164.539323 147.49657) (xy 164.497451 147.552503) + (xy 164.431987 147.57692) (xy 164.406956 147.576175) (xy 164.213461 147.550701) (xy 164.213456 147.5507) + (xy 164.213451 147.5507) (xy 163.931549 147.5507) (xy 163.931541 147.5507) (xy 163.65206 147.587495) + (xy 163.379756 147.660459) (xy 163.11932 147.768335) (xy 163.119309 147.76834) (xy 162.87519 147.909283) + (xy 162.875182 147.909289) (xy 162.651529 148.080904) (xy 162.452204 148.280229) (xy 162.280589 148.503882) + (xy 162.280583 148.50389) (xy 162.13964 148.748009) (xy 162.139635 148.74802) (xy 162.031759 149.008456) + (xy 161.958795 149.28076) (xy 161.922 149.560241) (xy 161.922 149.842158) (xy 161.958795 150.121639) + (xy 162.031759 150.393943) (xy 162.139635 150.654379) (xy 162.13964 150.65439) (xy 162.280583 150.898509) + (xy 162.280588 150.898517) (xy 162.442887 151.110028) (xy 162.452204 151.12217) (xy 162.651529 151.321495) + (xy 162.651533 151.321498) (xy 162.651535 151.3215) (xy 162.875183 151.493112) (xy 162.87519 151.493116) + (xy 163.119309 151.634059) (xy 163.119314 151.634061) (xy 163.119317 151.634063) (xy 163.379761 151.741942) + (xy 163.652058 151.814904) (xy 163.931549 151.8517) (xy 163.931556 151.8517) (xy 164.213444 151.8517) + (xy 164.213451 151.8517) (xy 164.492942 151.814904) (xy 164.765239 151.741942) (xy 165.025683 151.634063) + (xy 165.269817 151.493112) (xy 165.493465 151.3215) (xy 165.6928 151.122165) (xy 165.864412 150.898517) + (xy 165.996509 150.669717) (xy 166.005359 150.65439) (xy 166.005359 150.654389) (xy 166.005363 150.654383) + (xy 166.113242 150.393939) (xy 166.186204 150.121642) (xy 166.223 149.842151) (xy 166.223 149.560249) + (xy 166.197524 149.366742) (xy 166.208289 149.297708) (xy 166.254669 149.245452) (xy 166.321938 149.226567) + (xy 166.388739 149.247047) (xy 166.408144 149.262877) (xy 166.785181 149.639914) (xy 166.818666 149.701237) + (xy 166.8215 149.727595) (xy 166.8215 149.779846) (xy 166.852261 149.934489) (xy 166.852264 149.934501) + (xy 166.912602 150.080172) (xy 166.912609 150.080185) (xy 167.00021 150.211288) (xy 167.000213 150.211292) + (xy 167.111707 150.322786) (xy 167.111711 150.322789) (xy 167.242814 150.41039) (xy 167.242827 150.410397) + (xy 167.388498 150.470735) (xy 167.388503 150.470737) (xy 167.543153 150.501499) (xy 167.543156 150.5015) + (xy 167.543158 150.5015) (xy 167.700844 150.5015) (xy 167.700845 150.501499) (xy 167.855497 150.470737) + (xy 168.001179 150.410394) (xy 168.132289 150.322789) (xy 168.243789 150.211289) (xy 168.331394 150.080179) + (xy 168.391737 149.934497) (xy 168.4225 149.779842) (xy 168.4225 149.622158) (xy 168.4225 149.622155) + (xy 168.422499 149.622153) (xy 168.41056 149.562132) (xy 168.391737 149.467503) (xy 168.3775 149.433131) + (xy 168.331397 149.321827) (xy 168.33139 149.321814) (xy 168.243789 149.190711) (xy 168.243786 149.190707) + (xy 168.132292 149.079213) (xy 168.132288 149.07921) (xy 168.001185 148.991609) (xy 168.001172 148.991602) + (xy 167.855501 148.931264) (xy 167.855489 148.931261) (xy 167.700845 148.9005) (xy 167.700842 148.9005) + (xy 167.543158 148.9005) (xy 167.543155 148.9005) (xy 167.38851 148.931261) (xy 167.388498 148.931264) + (xy 167.242827 148.991602) (xy 167.242814 148.991609) (xy 167.111711 149.07921) (xy 167.111707 149.079213) + (xy 167.077508 149.113413) (xy 167.016185 149.146898) (xy 166.946493 149.141914) (xy 166.902146 149.113413) + (xy 158.819819 141.031086) (xy 158.786334 140.969763) (xy 158.7835 140.943405) (xy 158.7835 132.00308) + (xy 158.791624 131.975411) (xy 158.796878 131.947055) (xy 158.802017 131.940016) (xy 158.803185 131.936041) + (xy 158.817143 131.918159) (xy 158.817801 131.917458) (xy 158.818179 131.916894) (xy 158.818622 131.916236) + (xy 158.818854 131.915892) (xy 158.818863 131.915869) (xy 158.818865 131.915868) (xy 158.835877 131.874797) + (xy 158.853168 131.833888) (xy 158.853168 131.833882) (xy 158.85342 131.832665) (xy 158.85342 131.832664) + (xy 158.853421 131.832661) (xy 158.8535 131.832278) (xy 158.8535 131.787732) (xy 158.853819 131.743385) + (xy 158.8535 131.742598) (xy 158.8535 130.943533) (xy 158.862939 130.89608) (xy 158.867737 130.884497) + (xy 158.8985 130.729842) (xy 158.8985 130.572158) (xy 158.8985 130.572155) (xy 158.898499 130.572153) + (xy 158.867738 130.417505) (xy 158.865921 130.41312) (xy 158.862938 130.405918) (xy 158.8535 130.358466) + (xy 158.8535 128.968519) (xy 158.873185 128.90148) (xy 158.925989 128.855725) (xy 158.995147 128.845781) + (xy 159.058703 128.874806) (xy 159.065158 128.880816) (xy 162.93242 132.747278) (xy 162.932458 132.747316) + (xy 162.965949 132.808635) (xy 162.960972 132.878328) (xy 162.959347 132.882458) (xy 162.928264 132.957498) + (xy 162.928261 132.95751) (xy 162.8975 133.112153) (xy 162.8975 133.269846) (xy 162.928261 133.424489) + (xy 162.928264 133.424501) (xy 162.988602 133.570172) (xy 162.988609 133.570185) (xy 163.07621 133.701288) + (xy 163.076213 133.701292) (xy 163.187707 133.812786) (xy 163.187711 133.812789) (xy 163.318814 133.90039) + (xy 163.318818 133.900392) (xy 163.318821 133.900394) (xy 163.393954 133.931515) (xy 163.448356 133.975354) + (xy 163.470421 134.041648) (xy 163.4705 134.046075) (xy 163.4705 142.716941) (xy 163.470498 142.761241) + (xy 163.4705 142.761245) (xy 163.4705 142.761253) (xy 163.472556 142.766218) (xy 163.472557 142.766219) + (xy 163.487706 142.802791) (xy 163.487707 142.802799) (xy 163.48771 142.802799) (xy 163.48771 142.8028) + (xy 163.505128 142.844858) (xy 163.505129 142.844859) (xy 163.50513 142.844861) (xy 163.505133 142.844866) + (xy 163.533687 142.87342) (xy 163.53369 142.873426) (xy 163.533692 142.873425) (xy 172.456526 151.797196) + (xy 172.490008 151.858521) (xy 172.485019 151.928213) (xy 172.483402 151.932324) (xy 172.452263 152.007503) + (xy 172.452261 152.00751) (xy 172.4215 152.162153) (xy 172.4215 152.319846) (xy 172.452261 152.474489) + (xy 172.452264 152.474501) (xy 172.512602 152.620172) (xy 172.512609 152.620185) (xy 172.60021 152.751288) + (xy 172.600213 152.751292) (xy 172.711707 152.862786) (xy 172.711711 152.862789) (xy 172.842814 152.95039) + (xy 172.842818 152.950392) (xy 172.842821 152.950394) (xy 172.917954 152.981515) (xy 172.972356 153.025354) + (xy 172.994421 153.091648) (xy 172.9945 153.096075) (xy 172.9945 168.248766) (xy 172.994493 168.248783) + (xy 172.9945 168.28821) (xy 172.9945 168.339269) (xy 172.994507 168.339288) (xy 172.994508 168.339289) + (xy 173.011527 168.380359) (xy 173.029135 168.422868) (xy 173.029136 168.422869) (xy 173.029153 168.422894) + (xy 173.029155 168.422899) (xy 173.063891 168.457624) (xy 173.093132 168.486865) (xy 173.093147 168.486871) + (xy 175.613434 171.006359) (xy 175.646928 171.067676) (xy 175.641955 171.137368) (xy 175.640328 171.141502) + (xy 175.609263 171.216503) (xy 175.609262 171.216506) (xy 175.609262 171.216507) (xy 175.609261 171.21651) + (xy 175.5785 171.371153) (xy 175.5785 171.528846) (xy 175.609261 171.683489) (xy 175.609264 171.683501) + (xy 175.669602 171.829172) (xy 175.669609 171.829185) (xy 175.75721 171.960288) (xy 175.757213 171.960292) + (xy 175.868707 172.071786) (xy 175.868711 172.071789) (xy 175.999814 172.15939) (xy 175.999827 172.159397) + (xy 176.076265 172.191058) (xy 176.145503 172.219737) (xy 176.300153 172.250499) (xy 176.300156 172.2505) + (xy 176.300158 172.2505) (xy 176.457844 172.2505) (xy 176.457845 172.250499) (xy 176.612497 172.219737) + (xy 176.758179 172.159394) (xy 176.788737 172.138976) (xy 176.855414 172.118097) (xy 176.922794 172.136581) + (xy 176.969485 172.188559) (xy 176.97219 172.194624) (xy 177.086114 172.469661) (xy 177.086118 172.469671) + (xy 177.236899 172.730831) (xy 177.356772 172.887054) (xy 177.381966 172.952223) (xy 177.367927 173.020668) + (xy 177.323191 173.068264) (xy 177.320115 173.070148) (xy 177.183165 173.169648) (xy 177.18316 173.169652) + (xy 177.063452 173.28936) (xy 177.063448 173.289365) (xy 176.963952 173.426311) (xy 176.887096 173.577146) + (xy 176.834781 173.738152) (xy 176.8083 173.90535) (xy 176.8083 174.074649) (xy 176.834781 174.241847) + (xy 176.887096 174.402853) (xy 176.895944 174.420217) (xy 176.957101 174.540244) (xy 176.963952 174.553688) + (xy 177.063448 174.690634) (xy 177.063452 174.690639) (xy 177.18316 174.810347) (xy 177.183165 174.810351) + (xy 177.207602 174.828105) (xy 177.320115 174.90985) (xy 177.416225 174.95882) (xy 177.470946 174.986703) + (xy 177.470948 174.986703) (xy 177.470951 174.986705) (xy 177.55725 175.014745) (xy 177.631952 175.039018) + (xy 177.799151 175.0655) (xy 177.799156 175.0655) (xy 177.968449 175.0655) (xy 178.135647 175.039018) + (xy 178.296649 174.986705) (xy 178.447485 174.90985) (xy 178.584441 174.810346) (xy 178.704146 174.690641) + (xy 178.80365 174.553685) (xy 178.880505 174.402849) (xy 178.932818 174.241847) (xy 178.948039 174.145747) + (xy 178.9593 174.074649) (xy 178.9593 173.90535) (xy 178.957486 173.893898) (xy 178.96644 173.824605) + (xy 179.011436 173.771153) (xy 179.078188 173.750513) (xy 179.079959 173.7505) (xy 179.304576 173.7505) + (xy 179.304583 173.7505) (xy 179.603568 173.711138) (xy 179.894858 173.633087) (xy 180.173468 173.517683) + (xy 180.434632 173.3669) (xy 180.671016 173.185516) (xy 180.736184 173.160323) (xy 180.804629 173.174361) + (xy 180.854618 173.223175) (xy 180.870282 173.291267) (xy 180.866276 173.315986) (xy 180.862463 173.330215) + (xy 180.80706 173.536986) (xy 180.800952 173.55978) (xy 180.800949 173.559793) (xy 180.763301 173.845761) + (xy 180.7633 173.845778) (xy 180.7633 174.134221) (xy 180.763301 174.134238) (xy 180.800949 174.420206) + (xy 180.80095 174.420211) (xy 180.800951 174.420217) (xy 180.873409 174.690634) (xy 180.875609 174.698844) + (xy 180.875614 174.69886) (xy 180.985991 174.965336) (xy 180.985999 174.965352) (xy 181.13022 175.215148) + (xy 181.130231 175.215164) (xy 181.305824 175.444002) (xy 181.30583 175.444009) (xy 181.50979 175.647969) + (xy 181.509797 175.647975) (xy 181.531943 175.664968) (xy 181.738644 175.823575) (xy 181.738651 175.823579) + (xy 181.988447 175.9678) (xy 181.988463 175.967808) (xy 182.254939 176.078185) (xy 182.254945 176.078186) + (xy 182.254955 176.078191) (xy 182.533583 176.152849) (xy 182.819572 176.1905) (xy 182.819579 176.1905) + (xy 183.108021 176.1905) (xy 183.108028 176.1905) (xy 183.394017 176.152849) (xy 183.672645 176.078191) + (xy 183.672657 176.078185) (xy 183.67266 176.078185) (xy 183.939136 175.967808) (xy 183.939139 175.967806) + (xy 183.939145 175.967804) (xy 183.950047 175.96151) (xy 184.022652 175.919591) (xy 184.188956 175.823575) + (xy 184.417804 175.647974) (xy 184.621774 175.444004) (xy 184.797375 175.215156) (xy 184.941604 174.965345) + (xy 184.950894 174.942918) (xy 185.051985 174.69886) (xy 185.051985 174.698857) (xy 185.051991 174.698845) + (xy 185.126649 174.420217) (xy 185.1643 174.134228) (xy 185.1643 173.90535) (xy 186.9683 173.90535) + (xy 186.9683 174.074649) (xy 186.994781 174.241847) (xy 187.047096 174.402853) (xy 187.055944 174.420217) + (xy 187.117101 174.540244) (xy 187.123952 174.553688) (xy 187.223448 174.690634) (xy 187.223452 174.690639) + (xy 187.34316 174.810347) (xy 187.343165 174.810351) (xy 187.367602 174.828105) (xy 187.480115 174.90985) + (xy 187.576225 174.95882) (xy 187.630946 174.986703) (xy 187.630948 174.986703) (xy 187.630951 174.986705) + (xy 187.71725 175.014745) (xy 187.791952 175.039018) (xy 187.959151 175.0655) (xy 187.959156 175.0655) + (xy 188.128449 175.0655) (xy 188.295647 175.039018) (xy 188.456649 174.986705) (xy 188.607485 174.90985) + (xy 188.744441 174.810346) (xy 188.864146 174.690641) (xy 188.96365 174.553685) (xy 189.040505 174.402849) + (xy 189.092818 174.241847) (xy 189.108039 174.145747) (xy 189.1193 174.074649) (xy 189.1193 173.90535) + (xy 189.092818 173.738152) (xy 189.045297 173.5919) (xy 189.040505 173.577151) (xy 189.040503 173.577148) + (xy 189.040503 173.577146) (xy 189.010203 173.517681) (xy 188.96365 173.426315) (xy 188.914805 173.359085) + (xy 188.864151 173.289365) (xy 188.864147 173.28936) (xy 188.744439 173.169652) (xy 188.744434 173.169648) + (xy 188.607488 173.070152) (xy 188.607487 173.070151) (xy 188.607485 173.07015) (xy 188.522636 173.026917) + (xy 188.456653 172.993296) (xy 188.295647 172.940981) (xy 188.128449 172.9145) (xy 188.128444 172.9145) + (xy 187.959156 172.9145) (xy 187.959151 172.9145) (xy 187.791952 172.940981) (xy 187.630946 172.993296) + (xy 187.480111 173.070152) (xy 187.343165 173.169648) (xy 187.34316 173.169652) (xy 187.223452 173.28936) + (xy 187.223448 173.289365) (xy 187.123952 173.426311) (xy 187.047096 173.577146) (xy 186.994781 173.738152) + (xy 186.9683 173.90535) (xy 185.1643 173.90535) (xy 185.1643 173.845772) (xy 185.126649 173.559783) + (xy 185.051991 173.281155) (xy 185.051986 173.281145) (xy 185.051985 173.281139) (xy 184.941608 173.014663) + (xy 184.9416 173.014647) (xy 184.797379 172.764851) (xy 184.797375 172.764844) (xy 184.689261 172.623947) + (xy 184.621775 172.535997) (xy 184.621769 172.53599) (xy 184.417809 172.33203) (xy 184.417802 172.332024) + (xy 184.188964 172.156431) (xy 184.188962 172.156429) (xy 184.188956 172.156425) (xy 184.188951 172.156422) + (xy 184.188948 172.15642) (xy 183.939152 172.012199) (xy 183.939136 172.012191) (xy 183.67266 171.901814) + (xy 183.672648 171.90181) (xy 183.672645 171.901809) (xy 183.394017 171.827151) (xy 183.394011 171.82715) + (xy 183.394006 171.827149) (xy 183.108038 171.789501) (xy 183.108033 171.7895) (xy 183.108028 171.7895) + (xy 182.819572 171.7895) (xy 182.819566 171.7895) (xy 182.819561 171.789501) (xy 182.533593 171.827149) + (xy 182.533586 171.82715) (xy 182.533583 171.827151) (xy 182.394986 171.864288) (xy 182.254955 171.901809) + (xy 182.254939 171.901814) (xy 181.988463 172.012191) (xy 181.988447 172.012199) (xy 181.738651 172.15642) + (xy 181.738634 172.156431) (xy 181.534391 172.313152) (xy 181.469222 172.338346) (xy 181.400777 172.324307) + (xy 181.350787 172.275493) (xy 181.335124 172.207402) (xy 181.339127 172.182694) (xy 181.414938 171.899768) + (xy 181.4543 171.600783) (xy 181.4543 171.299217) (xy 181.414938 171.000232) (xy 181.336887 170.708942) + (xy 181.327353 170.685926) (xy 181.277663 170.565963) (xy 181.221483 170.430332) (xy 181.22134 170.430085) + (xy 181.0707 170.169168) (xy 180.88712 169.929921) (xy 180.887114 169.929914) (xy 180.673885 169.716685) + (xy 180.673878 169.716679) (xy 180.434631 169.533099) (xy 180.173471 169.382318) (xy 180.173461 169.382314) + (xy 179.89486 169.266913) (xy 179.603566 169.188861) (xy 179.304593 169.149501) (xy 179.304588 169.1495) + (xy 179.304583 169.1495) (xy 179.003017 169.1495) (xy 179.003011 169.1495) (xy 179.003006 169.149501) + (xy 178.704033 169.188861) (xy 178.412739 169.266913) (xy 178.134138 169.382314) (xy 178.134128 169.382318) + (xy 177.872968 169.533099) (xy 177.633721 169.716679) (xy 177.633714 169.716685) (xy 177.420485 169.929914) + (xy 177.420479 169.929921) (xy 177.236899 170.169168) (xy 177.086118 170.430328) (xy 177.086113 170.430338) + (xy 176.97219 170.705375) (xy 176.928349 170.759778) (xy 176.862055 170.781843) (xy 176.794355 170.764564) + (xy 176.788739 170.761024) (xy 176.75819 170.740612) (xy 176.758172 170.740602) (xy 176.612501 170.680264) + (xy 176.612489 170.680261) (xy 176.457845 170.6495) (xy 176.457842 170.6495) (xy 176.300158 170.6495) + (xy 176.300155 170.6495) (xy 176.14551 170.680261) (xy 176.145503 170.680263) (xy 176.070233 170.71144) + (xy 176.000764 170.718908) (xy 175.938285 170.687632) (xy 175.935115 170.684573) (xy 175.933369 170.682828) + (xy 174.929959 169.679735) (xy 173.485833 168.236065) (xy 173.452338 168.174747) (xy 173.4495 168.14837) + (xy 173.4495 160.841506) (xy 178.345065 160.841506) (xy 178.355249 160.945747) (xy 178.362821 161.023242) + (xy 178.374481 161.06388) (xy 178.41318 161.198761) (xy 178.49448 161.362263) (xy 178.494481 161.362265) + (xy 178.494483 161.362268) (xy 178.549467 161.435585) (xy 178.604038 161.508352) (xy 178.604039 161.508353) + (xy 178.60404 161.508354) (xy 178.738232 161.632195) (xy 178.892625 161.729697) (xy 179.027777 161.783874) + (xy 179.062114 161.797639) (xy 179.062115 161.797639) (xy 179.062117 161.79764) (xy 179.241108 161.833779) + (xy 179.241102 161.833779) (xy 179.257422 161.834059) (xy 179.423684 161.83692) (xy 179.603812 161.806958) + (xy 179.700168 161.772128) (xy 179.775536 161.744885) (xy 179.775537 161.744883) (xy 179.77554 161.744883) + (xy 179.790575 161.73612) (xy 179.797259 161.732235) (xy 179.79755 161.732157) (xy 179.825433 161.71586) + (xy 179.825551 161.715792) (xy 179.828768 161.715001) (xy 179.887862 161.698999) (xy 181.368992 161.698999) + (xy 181.369114 161.699006) (xy 181.377205 161.699005) (xy 181.377208 161.699006) (xy 181.409342 161.699002) + (xy 181.471904 161.715934) (xy 181.49973 161.732191) (xy 181.499732 161.732191) (xy 181.50588 161.735783) + (xy 181.507535 161.736608) (xy 181.521678 161.74485) (xy 181.6934 161.806921) (xy 181.873521 161.836882) + (xy 182.053198 161.83379) (xy 182.056091 161.833741) (xy 182.235066 161.797605) (xy 182.235069 161.797603) + (xy 182.235074 161.797603) (xy 182.40456 161.729662) (xy 182.558946 161.632163) (xy 182.574133 161.618148) + (xy 182.69313 161.50833) (xy 182.693132 161.508328) (xy 182.693133 161.508327) (xy 182.802685 161.362247) + (xy 182.883984 161.198748) (xy 182.934342 161.023233) (xy 182.952097 160.841503) (xy 182.93666 160.65956) + (xy 182.936658 160.659554) (xy 182.923971 160.613109) (xy 182.888543 160.483418) (xy 182.880783 160.467249) + (xy 182.877696 160.460804) (xy 182.877648 160.460546) (xy 182.861271 160.426519) (xy 182.861143 160.42573) + (xy 182.849102 160.372931) (xy 182.849102 160.372689) (xy 182.849107 160.335508) (xy 182.849106 160.335504) + (xy 182.849107 160.327498) (xy 182.849099 160.32736) (xy 182.849099 159.024077) (xy 182.851754 159.012408) + (xy 182.85072 159.004094) (xy 182.861305 158.970428) (xy 182.867611 158.95729) (xy 182.877674 158.936374) + (xy 182.877674 158.936369) (xy 182.88106 158.929333) (xy 182.881225 158.928922) (xy 182.881346 158.92867) + (xy 182.888583 158.913591) (xy 182.9367 158.737442) (xy 182.952137 158.555493) (xy 182.934381 158.373755) + (xy 182.88402 158.198234) (xy 182.802718 158.03473) (xy 182.699253 157.896767) (xy 182.693162 157.888645) + (xy 182.691239 157.88687) (xy 182.558969 157.764804) (xy 182.558966 157.764802) (xy 182.558965 157.764801) + (xy 182.558962 157.764799) (xy 182.404577 157.667301) (xy 182.235087 157.599358) (xy 182.235077 157.599356) + (xy 182.056092 157.563218) (xy 182.056099 157.563218) (xy 181.884394 157.560265) (xy 181.873518 157.560078) + (xy 181.873517 157.560078) (xy 181.873514 157.560078) (xy 181.693397 157.590038) (xy 181.693384 157.590041) + (xy 181.521663 157.652113) (xy 181.507148 157.66057) (xy 181.507063 157.660619) (xy 181.499976 157.66474) + (xy 181.49973 157.664808) (xy 181.471938 157.681044) (xy 181.47169 157.681189) (xy 181.468963 157.681859) + (xy 181.409346 157.697996) (xy 181.369001 157.697993) (xy 181.368897 157.698) (xy 179.928196 157.698) + (xy 179.920014 157.697998) (xy 179.919992 157.697993) (xy 179.890065 157.697995) (xy 179.887828 157.697995) + (xy 179.887546 157.697912) (xy 179.825293 157.681062) (xy 179.797471 157.664808) (xy 179.791405 157.661264) + (xy 179.789707 157.660417) (xy 179.782357 157.656134) (xy 179.775521 157.65215) (xy 179.603797 157.590078) + (xy 179.603791 157.590077) (xy 179.423681 157.560119) (xy 179.423678 157.560119) (xy 179.415139 157.560265) + (xy 179.241107 157.563259) (xy 179.062134 157.599394) (xy 179.062123 157.599397) (xy 178.892642 157.667337) + (xy 178.892641 157.667337) (xy 178.738261 157.764832) (xy 178.738258 157.764834) (xy 178.604067 157.888673) + (xy 178.494515 158.034754) (xy 178.41322 158.198244) (xy 178.413219 158.198247) (xy 178.413218 158.19825) + (xy 178.405482 158.225213) (xy 178.362858 158.373765) (xy 178.346016 158.546155) (xy 178.345104 158.555493) + (xy 178.34698 158.577602) (xy 178.358617 158.714778) (xy 178.36054 158.737435) (xy 178.388807 158.840914) + (xy 178.408656 158.913578) (xy 178.40866 158.913588) (xy 178.415898 158.92867) (xy 178.41594 158.928756) + (xy 178.419523 158.936238) (xy 178.419581 158.93654) (xy 178.435897 158.970425) (xy 178.435936 158.970506) + (xy 178.436081 158.9714) (xy 178.448101 159.024069) (xy 178.448101 160.372922) (xy 178.435907 160.426545) + (xy 178.435319 160.427771) (xy 178.435239 160.427938) (xy 178.416366 160.467137) (xy 178.416042 160.467939) + (xy 178.408618 160.48341) (xy 178.360501 160.659554) (xy 178.360501 160.659556) (xy 178.345065 160.841506) + (xy 173.4495 160.841506) (xy 173.4495 154.69655) (xy 174.427 154.69655) (xy 174.427 154.865849) + (xy 174.453481 155.033047) (xy 174.505796 155.194053) (xy 174.582652 155.344888) (xy 174.682148 155.481834) + (xy 174.682152 155.481839) (xy 174.80186 155.601547) (xy 174.801865 155.601551) (xy 174.921317 155.688337) + (xy 174.938815 155.70105) (xy 175.02409 155.7445) (xy 175.089646 155.777903) (xy 175.089648 155.777903) + (xy 175.089651 155.777905) (xy 175.17595 155.805945) (xy 175.250652 155.830218) (xy 175.417851 155.8567) + (xy 175.417856 155.8567) (xy 175.587149 155.8567) (xy 175.754347 155.830218) (xy 175.797277 155.816269) + (xy 175.915349 155.777905) (xy 176.066185 155.70105) (xy 176.203141 155.601546) (xy 176.322846 155.481841) + (xy 176.42235 155.344885) (xy 176.499205 155.194049) (xy 176.551518 155.033047) (xy 176.578 154.865849) + (xy 176.578 154.69655) (xy 176.552428 154.535098) (xy 176.561382 154.465805) (xy 176.606379 154.412353) + (xy 176.67313 154.391713) (xy 176.674901 154.3917) (xy 176.913444 154.3917) (xy 176.913451 154.3917) + (xy 177.192942 154.354904) (xy 177.465239 154.281942) (xy 177.725683 154.174063) (xy 177.969817 154.033112) + (xy 178.193465 153.8615) (xy 178.3928 153.662165) (xy 178.460492 153.573946) (xy 178.51692 153.532744) + (xy 178.586666 153.528589) (xy 178.647586 153.562801) (xy 178.680339 153.624518) (xy 178.674526 153.694146) + (xy 178.666255 153.711433) (xy 178.610183 153.808551) (xy 178.610175 153.808568) (xy 178.500097 154.074321) + (xy 178.425646 154.352176) (xy 178.388101 154.637361) (xy 178.3881 154.637377) (xy 178.3881 154.925022) + (xy 178.388101 154.925038) (xy 178.425646 155.210223) (xy 178.500097 155.488078) (xy 178.610175 155.753831) + (xy 178.610183 155.753848) (xy 178.754004 156.002951) (xy 178.754015 156.002967) (xy 178.929121 156.231171) + (xy 178.929127 156.231178) (xy 179.132521 156.434572) (xy 179.132527 156.434577) (xy 179.360741 156.609691) + (xy 179.360748 156.609695) (xy 179.609851 156.753516) (xy 179.609856 156.753518) (xy 179.609859 156.75352) + (xy 179.609863 156.753521) (xy 179.609868 156.753524) (xy 179.623108 156.759008) (xy 179.87562 156.863602) + (xy 180.153475 156.938053) (xy 180.438671 156.9756) (xy 180.438678 156.9756) (xy 180.726322 156.9756) + (xy 180.726329 156.9756) (xy 181.011525 156.938053) (xy 181.28938 156.863602) (xy 181.555141 156.75352) + (xy 181.804259 156.609691) (xy 182.032473 156.434577) (xy 182.235877 156.231173) (xy 182.410991 156.002959) + (xy 182.55482 155.753841) (xy 182.664902 155.48808) (xy 182.739353 155.210225) (xy 182.7769 154.925029) + (xy 182.7769 154.69655) (xy 184.587 154.69655) (xy 184.587 154.865849) (xy 184.613481 155.033047) + (xy 184.665796 155.194053) (xy 184.742652 155.344888) (xy 184.842148 155.481834) (xy 184.842152 155.481839) + (xy 184.96186 155.601547) (xy 184.961865 155.601551) (xy 185.081317 155.688337) (xy 185.098815 155.70105) + (xy 185.18409 155.7445) (xy 185.249646 155.777903) (xy 185.249648 155.777903) (xy 185.249651 155.777905) + (xy 185.33595 155.805945) (xy 185.410652 155.830218) (xy 185.577851 155.8567) (xy 185.577856 155.8567) + (xy 185.747149 155.8567) (xy 185.914347 155.830218) (xy 185.957277 155.816269) (xy 186.075349 155.777905) + (xy 186.226185 155.70105) (xy 186.363141 155.601546) (xy 186.482846 155.481841) (xy 186.58235 155.344885) + (xy 186.659205 155.194049) (xy 186.711518 155.033047) (xy 186.738 154.865849) (xy 186.738 154.69655) + (xy 186.711518 154.529352) (xy 186.684836 154.447236) (xy 186.659205 154.368351) (xy 186.659203 154.368348) + (xy 186.659203 154.368346) (xy 186.628344 154.307783) (xy 186.58235 154.217515) (xy 186.550781 154.174064) + (xy 186.482851 154.080565) (xy 186.482847 154.08056) (xy 186.363139 153.960852) (xy 186.363134 153.960848) + (xy 186.226188 153.861352) (xy 186.226187 153.861351) (xy 186.226185 153.86135) (xy 186.179082 153.83735) + (xy 186.075353 153.784496) (xy 185.914347 153.732181) (xy 185.747149 153.7057) (xy 185.747144 153.7057) + (xy 185.577856 153.7057) (xy 185.577851 153.7057) (xy 185.410652 153.732181) (xy 185.249646 153.784496) + (xy 185.098811 153.861352) (xy 184.961865 153.960848) (xy 184.96186 153.960852) (xy 184.842152 154.08056) + (xy 184.842148 154.080565) (xy 184.742652 154.217511) (xy 184.665796 154.368346) (xy 184.613481 154.529352) + (xy 184.587 154.69655) (xy 182.7769 154.69655) (xy 182.7769 154.637371) (xy 182.739353 154.352175) + (xy 182.664902 154.07432) (xy 182.55482 153.808559) (xy 182.554818 153.808556) (xy 182.554816 153.808551) + (xy 182.410995 153.559448) (xy 182.410991 153.559441) (xy 182.307069 153.424007) (xy 182.235878 153.331228) + (xy 182.235872 153.331221) (xy 182.032478 153.127827) (xy 182.032471 153.127821) (xy 181.804267 152.952715) + (xy 181.804265 152.952713) (xy 181.804259 152.952709) (xy 181.804254 152.952706) (xy 181.804251 152.952704) + (xy 181.555148 152.808883) (xy 181.555131 152.808875) (xy 181.289378 152.698797) (xy 181.011523 152.624346) + (xy 180.726338 152.586801) (xy 180.726335 152.5868) (xy 180.726329 152.5868) (xy 180.438671 152.5868) + (xy 180.438665 152.5868) (xy 180.438661 152.586801) (xy 180.153476 152.624346) (xy 179.875621 152.698797) + (xy 179.609868 152.808875) (xy 179.609851 152.808883) (xy 179.360748 152.952704) (xy 179.360732 152.952715) + (xy 179.132528 153.127821) (xy 179.132521 153.127827) (xy 178.929127 153.331221) (xy 178.85793 153.424007) + (xy 178.801501 153.465209) (xy 178.731755 153.469364) (xy 178.670835 153.435151) (xy 178.638083 153.373434) + (xy 178.643896 153.303807) (xy 178.652161 153.286531) (xy 178.705363 153.194383) (xy 178.813242 152.933939) + (xy 178.886204 152.661642) (xy 178.923 152.382151) (xy 178.923 152.100249) (xy 178.886204 151.820758) + (xy 178.813242 151.548461) (xy 178.80626 151.531606) (xy 178.781265 151.471261) (xy 178.705363 151.288017) + (xy 178.70536 151.288011) (xy 178.705359 151.288009) (xy 178.564416 151.04389) (xy 178.564412 151.043883) + (xy 178.3928 150.820235) (xy 178.392798 150.820233) (xy 178.392795 150.820229) (xy 178.19347 150.620904) + (xy 178.168661 150.601867) (xy 177.969817 150.449288) (xy 177.969811 150.449284) (xy 177.969809 150.449283) + (xy 177.72569 150.30834) (xy 177.725679 150.308335) (xy 177.465243 150.200459) (xy 177.192939 150.127495) + (xy 176.913458 150.0907) (xy 176.913451 150.0907) (xy 176.631549 150.0907) (xy 176.631541 150.0907) + (xy 176.35206 150.127495) (xy 176.079756 150.200459) (xy 175.81932 150.308335) (xy 175.819309 150.30834) + (xy 175.57519 150.449283) (xy 175.575182 150.449289) (xy 175.351529 150.620904) (xy 175.152204 150.820229) + (xy 174.980589 151.043882) (xy 174.980583 151.04389) (xy 174.83964 151.288009) (xy 174.839635 151.28802) + (xy 174.731759 151.548456) (xy 174.658795 151.82076) (xy 174.622 152.100241) (xy 174.622 152.382158) + (xy 174.658795 152.661639) (xy 174.731759 152.933943) (xy 174.839635 153.194379) (xy 174.83964 153.19439) + (xy 174.980583 153.438509) (xy 174.980594 153.438525) (xy 175.111338 153.608914) (xy 175.136532 153.674083) + (xy 175.122494 153.742528) (xy 175.07368 153.792517) (xy 175.069258 153.794884) (xy 174.938813 153.86135) + (xy 174.801865 153.960848) (xy 174.80186 153.960852) (xy 174.682152 154.08056) (xy 174.682148 154.080565) + (xy 174.582652 154.217511) (xy 174.505796 154.368346) (xy 174.453481 154.529352) (xy 174.427 154.69655) + (xy 173.4495 154.69655) (xy 173.4495 153.096075) (xy 173.469185 153.029036) (xy 173.521989 152.983281) + (xy 173.525999 152.981534) (xy 173.601179 152.950394) (xy 173.732289 152.862789) (xy 173.843789 152.751289) + (xy 173.931394 152.620179) (xy 173.991737 152.474497) (xy 174.0225 152.319842) (xy 174.0225 152.162158) + (xy 174.0225 152.162155) (xy 174.022499 152.162153) (xy 173.991737 152.007503) (xy 173.964278 151.941211) + (xy 173.931397 151.861827) (xy 173.93139 151.861814) (xy 173.843789 151.730711) (xy 173.843786 151.730707) + (xy 173.732292 151.619213) (xy 173.732288 151.61921) (xy 173.601185 151.531609) (xy 173.601172 151.531602) + (xy 173.455501 151.471264) (xy 173.455489 151.471261) (xy 173.300845 151.4405) (xy 173.300842 151.4405) + (xy 173.143158 151.4405) (xy 173.143155 151.4405) (xy 172.98851 151.471261) (xy 172.988502 151.471263) + (xy 172.913413 151.502365) (xy 172.843943 151.509832) (xy 172.781465 151.478556) (xy 172.778276 151.47548) + (xy 172.775833 151.473037) (xy 170.524576 149.221543) (xy 163.961814 142.65809) (xy 163.928332 142.596765) + (xy 163.9255 142.570413) (xy 163.9255 141.482106) (xy 168.727865 141.482106) (xy 168.744076 141.648035) + (xy 168.745621 141.663842) (xy 168.764384 141.729238) (xy 168.79598 141.839361) (xy 168.87728 142.002863) + (xy 168.877281 142.002865) (xy 168.877283 142.002868) (xy 168.937409 142.083042) (xy 168.986838 142.148952) + (xy 168.986839 142.148953) (xy 168.98684 142.148954) (xy 169.121032 142.272795) (xy 169.275425 142.370297) + (xy 169.410577 142.424474) (xy 169.444914 142.438239) (xy 169.444915 142.438239) (xy 169.444917 142.43824) + (xy 169.623908 142.474379) (xy 169.623902 142.474379) (xy 169.640222 142.474659) (xy 169.806484 142.47752) + (xy 169.986612 142.447558) (xy 170.042107 142.427498) (xy 170.158336 142.385485) (xy 170.158337 142.385483) + (xy 170.15834 142.385483) (xy 170.173375 142.37672) (xy 170.180059 142.372835) (xy 170.18035 142.372757) + (xy 170.208233 142.35646) (xy 170.208351 142.356392) (xy 170.211568 142.355601) (xy 170.270662 142.339599) + (xy 171.751792 142.339599) (xy 171.751914 142.339606) (xy 171.760005 142.339605) (xy 171.760008 142.339606) + (xy 171.792142 142.339602) (xy 171.854704 142.356534) (xy 171.88253 142.372791) (xy 171.882532 142.372791) + (xy 171.88868 142.376383) (xy 171.890335 142.377208) (xy 171.904478 142.38545) (xy 172.0762 142.447521) + (xy 172.256321 142.477482) (xy 172.435998 142.47439) (xy 172.438891 142.474341) (xy 172.617866 142.438205) + (xy 172.617869 142.438203) (xy 172.617874 142.438203) (xy 172.78736 142.370262) (xy 172.941746 142.272763) + (xy 172.960131 142.255797) (xy 173.07593 142.14893) (xy 173.075932 142.148928) (xy 173.08481 142.13709) + (xy 173.185485 142.002847) (xy 173.266784 141.839348) (xy 173.317142 141.663833) (xy 173.334897 141.482103) + (xy 173.31946 141.30016) (xy 173.319458 141.300154) (xy 173.308838 141.261277) (xy 173.271343 141.124018) + (xy 173.263583 141.107849) (xy 173.260496 141.101404) (xy 173.260448 141.101146) (xy 173.244071 141.067119) + (xy 173.243943 141.06633) (xy 173.231902 141.013531) (xy 173.231902 141.013522) (xy 173.231907 140.976108) + (xy 173.231906 140.976104) (xy 173.231907 140.968098) (xy 173.231899 140.96796) (xy 173.231899 139.664678) + (xy 173.234553 139.653012) (xy 173.233519 139.644699) (xy 173.244103 139.611034) (xy 173.250418 139.597876) + (xy 173.250498 139.597787) (xy 173.250468 139.597773) (xy 173.250895 139.596885) (xy 173.260474 139.576974) + (xy 173.260474 139.576968) (xy 173.263855 139.569942) (xy 173.264017 139.569538) (xy 173.271383 139.554191) + (xy 173.3195 139.378042) (xy 173.334937 139.196093) (xy 173.317181 139.014355) (xy 173.26682 138.838834) + (xy 173.185518 138.67533) (xy 173.099127 138.560134) (xy 173.075962 138.529245) (xy 173.018796 138.476489) + (xy 172.941769 138.405404) (xy 172.941766 138.405402) (xy 172.941765 138.405401) (xy 172.941762 138.405399) + (xy 172.787377 138.307901) (xy 172.617887 138.239958) (xy 172.617877 138.239956) (xy 172.438892 138.203818) + (xy 172.438899 138.203818) (xy 172.267194 138.200865) (xy 172.256318 138.200678) (xy 172.256317 138.200678) + (xy 172.256314 138.200678) (xy 172.076197 138.230638) (xy 172.076184 138.230641) (xy 171.904463 138.292713) + (xy 171.889948 138.30117) (xy 171.889863 138.301219) (xy 171.882776 138.30534) (xy 171.88253 138.305408) + (xy 171.854738 138.321644) (xy 171.85449 138.321789) (xy 171.851763 138.322459) (xy 171.792146 138.338596) + (xy 171.751801 138.338593) (xy 171.751697 138.3386) (xy 170.310996 138.3386) (xy 170.302814 138.338598) + (xy 170.302792 138.338593) (xy 170.272865 138.338595) (xy 170.270628 138.338595) (xy 170.270346 138.338512) + (xy 170.208093 138.321662) (xy 170.180271 138.305408) (xy 170.174205 138.301864) (xy 170.172507 138.301017) + (xy 170.165157 138.296734) (xy 170.158321 138.29275) (xy 169.986597 138.230678) (xy 169.986591 138.230677) + (xy 169.806481 138.200719) (xy 169.806478 138.200719) (xy 169.797939 138.200865) (xy 169.623907 138.203859) + (xy 169.444934 138.239994) (xy 169.444923 138.239997) (xy 169.275442 138.307937) (xy 169.275441 138.307937) + (xy 169.121061 138.405432) (xy 169.121058 138.405434) (xy 168.986867 138.529273) (xy 168.877315 138.675354) + (xy 168.79602 138.838844) (xy 168.796019 138.838847) (xy 168.796018 138.83885) (xy 168.770838 138.926606) + (xy 168.745658 139.014365) (xy 168.72793 139.195827) (xy 168.727904 139.196093) (xy 168.729582 139.215868) + (xy 168.74168 139.358478) (xy 168.74334 139.378035) (xy 168.765018 139.457392) (xy 168.791456 139.554178) + (xy 168.79146 139.554188) (xy 168.798698 139.56927) (xy 168.79874 139.569356) (xy 168.802323 139.576838) + (xy 168.802381 139.57714) (xy 168.818736 139.611106) (xy 168.818881 139.612) (xy 168.830901 139.664669) + (xy 168.830901 141.013522) (xy 168.818707 141.067145) (xy 168.818119 141.068371) (xy 168.818039 141.068538) + (xy 168.799166 141.107737) (xy 168.798842 141.108539) (xy 168.791418 141.12401) (xy 168.743301 141.300154) + (xy 168.743301 141.300156) (xy 168.727865 141.482106) (xy 163.9255 141.482106) (xy 163.9255 135.64655) + (xy 164.902 135.64655) (xy 164.902 135.815849) (xy 164.928481 135.983047) (xy 164.980796 136.144053) + (xy 165.057652 136.294888) (xy 165.157148 136.431834) (xy 165.157152 136.431839) (xy 165.27686 136.551547) + (xy 165.276865 136.551551) (xy 165.396317 136.638337) (xy 165.413815 136.65105) (xy 165.477017 136.683253) + (xy 165.564646 136.727903) (xy 165.564648 136.727903) (xy 165.564651 136.727905) (xy 165.65095 136.755945) + (xy 165.725652 136.780218) (xy 165.892851 136.8067) (xy 165.892856 136.8067) (xy 166.062149 136.8067) + (xy 166.229347 136.780218) (xy 166.390349 136.727905) (xy 166.541185 136.65105) (xy 166.678141 136.551546) + (xy 166.797846 136.431841) (xy 166.89735 136.294885) (xy 166.974205 136.144049) (xy 167.026518 135.983047) + (xy 167.053 135.815849) (xy 167.053 135.64655) (xy 167.027428 135.485098) (xy 167.036382 135.415805) + (xy 167.081379 135.362353) (xy 167.14813 135.341713) (xy 167.149901 135.3417) (xy 167.388444 135.3417) + (xy 167.388451 135.3417) (xy 167.667942 135.304904) (xy 167.940239 135.231942) (xy 168.200683 135.124063) + (xy 168.444817 134.983112) (xy 168.668465 134.8115) (xy 168.8678 134.612165) (xy 168.935492 134.523946) + (xy 168.99192 134.482744) (xy 169.061666 134.478589) (xy 169.122586 134.512801) (xy 169.155339 134.574518) + (xy 169.149526 134.644146) (xy 169.141255 134.661433) (xy 169.085183 134.758551) (xy 169.085175 134.758568) + (xy 168.975097 135.024321) (xy 168.900646 135.302176) (xy 168.863101 135.587361) (xy 168.8631 135.587377) + (xy 168.8631 135.875022) (xy 168.863101 135.875038) (xy 168.900646 136.160223) (xy 168.975097 136.438078) + (xy 169.085175 136.703831) (xy 169.085183 136.703848) (xy 169.229004 136.952951) (xy 169.229015 136.952967) + (xy 169.404121 137.181171) (xy 169.404127 137.181178) (xy 169.607525 137.384576) (xy 169.703761 137.45842) + (xy 169.835741 137.559691) (xy 169.835748 137.559695) (xy 170.084851 137.703516) (xy 170.084856 137.703518) + (xy 170.084859 137.70352) (xy 170.084863 137.703521) (xy 170.084868 137.703524) (xy 170.190223 137.747163) + (xy 170.35062 137.813602) (xy 170.628475 137.888053) (xy 170.913671 137.9256) (xy 170.913678 137.9256) + (xy 171.201322 137.9256) (xy 171.201329 137.9256) (xy 171.486525 137.888053) (xy 171.76438 137.813602) + (xy 172.030141 137.70352) (xy 172.279259 137.559691) (xy 172.420078 137.451636) (xy 172.507475 137.384576) + (xy 172.507478 137.384572) (xy 172.710872 137.181178) (xy 172.710877 137.181173) (xy 172.885991 136.952959) + (xy 173.02982 136.703841) (xy 173.139902 136.43808) (xy 173.214353 136.160225) (xy 173.2519 135.875029) + (xy 173.2519 135.64655) (xy 175.062 135.64655) (xy 175.062 135.815849) (xy 175.088481 135.983047) + (xy 175.140796 136.144053) (xy 175.217652 136.294888) (xy 175.317148 136.431834) (xy 175.317152 136.431839) + (xy 175.43686 136.551547) (xy 175.436865 136.551551) (xy 175.556317 136.638337) (xy 175.573815 136.65105) + (xy 175.637017 136.683253) (xy 175.724646 136.727903) (xy 175.724648 136.727903) (xy 175.724651 136.727905) + (xy 175.81095 136.755945) (xy 175.885652 136.780218) (xy 176.052851 136.8067) (xy 176.052856 136.8067) + (xy 176.222149 136.8067) (xy 176.389347 136.780218) (xy 176.550349 136.727905) (xy 176.701185 136.65105) + (xy 176.838141 136.551546) (xy 176.957846 136.431841) (xy 177.05735 136.294885) (xy 177.134205 136.144049) + (xy 177.186518 135.983047) (xy 177.213 135.815849) (xy 177.213 135.64655) (xy 177.186518 135.479352) + (xy 177.141796 135.341713) (xy 177.134205 135.318351) (xy 177.134203 135.318348) (xy 177.134203 135.318346) + (xy 177.090176 135.23194) (xy 177.05735 135.167515) (xy 177.025781 135.124064) (xy 176.957851 135.030565) + (xy 176.957847 135.03056) (xy 176.838139 134.910852) (xy 176.838134 134.910848) (xy 176.701188 134.811352) + (xy 176.701187 134.811351) (xy 176.701185 134.81135) (xy 176.636109 134.778192) (xy 176.550353 134.734496) + (xy 176.389347 134.682181) (xy 176.222149 134.6557) (xy 176.222144 134.6557) (xy 176.052856 134.6557) + (xy 176.052851 134.6557) (xy 175.885652 134.682181) (xy 175.724646 134.734496) (xy 175.573811 134.811352) + (xy 175.436865 134.910848) (xy 175.43686 134.910852) (xy 175.317152 135.03056) (xy 175.317148 135.030565) + (xy 175.217652 135.167511) (xy 175.140796 135.318346) (xy 175.088481 135.479352) (xy 175.062 135.64655) + (xy 173.2519 135.64655) (xy 173.2519 135.587371) (xy 173.214353 135.302175) (xy 173.139902 135.02432) + (xy 173.073463 134.863923) (xy 173.029824 134.758568) (xy 173.029816 134.758551) (xy 172.885995 134.509448) + (xy 172.885994 134.509447) (xy 172.885991 134.509441) (xy 172.761525 134.347233) (xy 172.710878 134.281228) + (xy 172.710872 134.281221) (xy 172.507478 134.077827) (xy 172.507471 134.077821) (xy 172.279267 133.902715) + (xy 172.279265 133.902713) (xy 172.279259 133.902709) (xy 172.279254 133.902706) (xy 172.279251 133.902704) + (xy 172.030148 133.758883) (xy 172.030131 133.758875) (xy 171.764378 133.648797) (xy 171.486523 133.574346) + (xy 171.201338 133.536801) (xy 171.201335 133.5368) (xy 171.201329 133.5368) (xy 170.913671 133.5368) + (xy 170.913665 133.5368) (xy 170.913661 133.536801) (xy 170.628476 133.574346) (xy 170.350621 133.648797) + (xy 170.084868 133.758875) (xy 170.084851 133.758883) (xy 169.835748 133.902704) (xy 169.835732 133.902715) + (xy 169.607528 134.077821) (xy 169.607521 134.077827) (xy 169.404127 134.281221) (xy 169.33293 134.374007) + (xy 169.276501 134.415209) (xy 169.206755 134.419364) (xy 169.145835 134.385151) (xy 169.113083 134.323434) + (xy 169.118896 134.253807) (xy 169.127161 134.236531) (xy 169.180363 134.144383) (xy 169.288242 133.883939) + (xy 169.361204 133.611642) (xy 169.398 133.332151) (xy 169.398 133.050249) (xy 169.361204 132.770758) + (xy 169.288242 132.498461) (xy 169.28126 132.481606) (xy 169.259309 132.428611) (xy 169.180363 132.238017) + (xy 169.180361 132.238014) (xy 169.180359 132.238009) (xy 169.039416 131.99389) (xy 169.039412 131.993883) + (xy 168.8678 131.770235) (xy 168.867798 131.770233) (xy 168.867795 131.770229) (xy 168.66847 131.570904) + (xy 168.569871 131.495246) (xy 168.444817 131.399288) (xy 168.444811 131.399284) (xy 168.444809 131.399283) + (xy 168.20069 131.25834) (xy 168.200679 131.258335) (xy 167.940243 131.150459) (xy 167.667939 131.077495) + (xy 167.388458 131.0407) (xy 167.388451 131.0407) (xy 167.106549 131.0407) (xy 167.106541 131.0407) + (xy 166.82706 131.077495) (xy 166.554756 131.150459) (xy 166.29432 131.258335) (xy 166.294309 131.25834) + (xy 166.05019 131.399283) (xy 166.050182 131.399289) (xy 165.826529 131.570904) (xy 165.627204 131.770229) + (xy 165.455589 131.993882) (xy 165.455583 131.99389) (xy 165.31464 132.238009) (xy 165.314635 132.23802) + (xy 165.206759 132.498456) (xy 165.133795 132.77076) (xy 165.097 133.050241) (xy 165.097 133.332158) + (xy 165.133795 133.611639) (xy 165.206759 133.883943) (xy 165.314635 134.144379) (xy 165.31464 134.14439) + (xy 165.455583 134.388509) (xy 165.455594 134.388525) (xy 165.586338 134.558914) (xy 165.611532 134.624083) + (xy 165.597494 134.692528) (xy 165.54868 134.742517) (xy 165.544258 134.744884) (xy 165.413813 134.81135) + (xy 165.276865 134.910848) (xy 165.27686 134.910852) (xy 165.157152 135.03056) (xy 165.157148 135.030565) + (xy 165.057652 135.167511) (xy 164.980796 135.318346) (xy 164.928481 135.479352) (xy 164.902 135.64655) + (xy 163.9255 135.64655) (xy 163.9255 134.046075) (xy 163.945185 133.979036) (xy 163.997989 133.933281) + (xy 164.001999 133.931534) (xy 164.077179 133.900394) (xy 164.208289 133.812789) (xy 164.319789 133.701289) + (xy 164.407394 133.570179) (xy 164.467737 133.424497) (xy 164.4985 133.269842) (xy 164.4985 133.112158) + (xy 164.4985 133.112155) (xy 164.498499 133.112153) (xy 164.467737 132.957503) (xy 164.45203 132.919582) + (xy 164.407397 132.811827) (xy 164.40739 132.811814) (xy 164.319789 132.680711) (xy 164.319786 132.680707) + (xy 164.208292 132.569213) (xy 164.208288 132.56921) (xy 164.077185 132.481609) (xy 164.077172 132.481602) + (xy 163.931501 132.421264) (xy 163.931489 132.421261) (xy 163.776845 132.3905) (xy 163.776842 132.3905) + (xy 163.619158 132.3905) (xy 163.619155 132.3905) (xy 163.46451 132.421261) (xy 163.464502 132.421263) + (xy 163.38928 132.45242) (xy 163.31981 132.459887) (xy 163.257331 132.428611) (xy 163.254157 132.425548) + (xy 159.123828 128.296072) (xy 159.090337 128.234753) (xy 159.0875 128.208382) (xy 159.0875 122.432106) + (xy 163.965365 122.432106) (xy 163.981576 122.598035) (xy 163.983121 122.613842) (xy 164.002506 122.681404) + (xy 164.03348 122.789361) (xy 164.11478 122.952863) (xy 164.114781 122.952865) (xy 164.114783 122.952868) + (xy 164.127866 122.970313) (xy 164.224338 123.098952) (xy 164.224339 123.098953) (xy 164.22434 123.098954) + (xy 164.358532 123.222795) (xy 164.512925 123.320297) (xy 164.648077 123.374474) (xy 164.682414 123.388239) + (xy 164.682415 123.388239) (xy 164.682417 123.38824) (xy 164.861408 123.424379) (xy 164.861402 123.424379) + (xy 164.877722 123.424659) (xy 165.043984 123.42752) (xy 165.224112 123.397558) (xy 165.331061 123.358899) + (xy 165.395836 123.335485) (xy 165.395837 123.335483) (xy 165.39584 123.335483) (xy 165.410875 123.32672) + (xy 165.417559 123.322835) (xy 165.41785 123.322757) (xy 165.445733 123.30646) (xy 165.445851 123.306392) + (xy 165.449068 123.305601) (xy 165.508162 123.289599) (xy 166.989292 123.289599) (xy 166.989414 123.289606) + (xy 166.997505 123.289605) (xy 166.997508 123.289606) (xy 167.029642 123.289602) (xy 167.092204 123.306534) + (xy 167.12003 123.322791) (xy 167.120032 123.322791) (xy 167.12618 123.326383) (xy 167.127835 123.327208) + (xy 167.141978 123.33545) (xy 167.3137 123.397521) (xy 167.493821 123.427482) (xy 167.673498 123.42439) + (xy 167.676391 123.424341) (xy 167.855366 123.388205) (xy 167.855369 123.388203) (xy 167.855374 123.388203) + (xy 168.02486 123.320262) (xy 168.179246 123.222763) (xy 168.189905 123.212927) (xy 168.31343 123.09893) + (xy 168.313432 123.098928) (xy 168.326272 123.081807) (xy 168.422985 122.952847) (xy 168.488451 122.821188) + (xy 168.535925 122.769925) (xy 168.603578 122.752466) (xy 168.646933 122.761836) (xy 168.760403 122.808837) + (xy 168.900197 122.836644) (xy 168.915053 122.839599) (xy 168.915056 122.8396) (xy 168.915058 122.8396) + (xy 169.072744 122.8396) (xy 169.072745 122.839599) (xy 169.227397 122.808837) (xy 169.373079 122.748494) + (xy 169.504189 122.660889) (xy 169.615689 122.549389) (xy 169.703294 122.418279) (xy 169.734415 122.343145) + (xy 169.778254 122.288744) (xy 169.844548 122.266679) (xy 169.848975 122.2666) (xy 170.168381 122.2666) + (xy 170.23542 122.286285) (xy 170.281175 122.339089) (xy 170.291119 122.408247) (xy 170.282943 122.43805) + (xy 170.281514 122.441498) (xy 170.281511 122.44151) (xy 170.25075 122.596153) (xy 170.25075 122.753846) + (xy 170.281511 122.908489) (xy 170.281514 122.908501) (xy 170.341852 123.054172) (xy 170.341859 123.054185) + (xy 170.42946 123.185288) (xy 170.429463 123.185292) (xy 170.540957 123.296786) (xy 170.540961 123.296789) + (xy 170.672064 123.38439) (xy 170.672077 123.384397) (xy 170.80805 123.440718) (xy 170.817753 123.444737) + (xy 170.972403 123.475499) (xy 170.972406 123.4755) (xy 170.972408 123.4755) (xy 171.130094 123.4755) + (xy 171.130095 123.475499) (xy 171.284747 123.444737) (xy 171.409348 123.393126) (xy 171.430422 123.384397) + (xy 171.430422 123.384396) (xy 171.430429 123.384394) (xy 171.561539 123.296789) (xy 171.673039 123.185289) + (xy 171.760644 123.054179) (xy 171.820987 122.908497) (xy 171.85175 122.753842) (xy 171.85175 122.596158) + (xy 171.85175 122.596155) (xy 171.851749 122.596153) (xy 171.844469 122.559554) (xy 171.820987 122.441503) + (xy 171.817094 122.432104) (xy 171.760647 122.295827) (xy 171.76064 122.295814) (xy 171.673039 122.164711) + (xy 171.673036 122.164707) (xy 171.561542 122.053213) (xy 171.561538 122.05321) (xy 171.430435 121.965609) + (xy 171.430422 121.965602) (xy 171.284751 121.905264) (xy 171.284739 121.905261) (xy 171.130095 121.8745) + (xy 171.130092 121.8745) (xy 170.972408 121.8745) (xy 170.972405 121.8745) (xy 170.81776 121.905261) + (xy 170.817757 121.905262) (xy 170.817756 121.905262) (xy 170.817753 121.905263) (xy 170.74262 121.936384) + (xy 170.67315 121.943852) (xy 170.610671 121.912576) (xy 170.607487 121.909503) (xy 170.54422 121.846236) + (xy 170.51496 121.834116) (xy 170.460603 121.8116) (xy 169.848975 121.8116) (xy 169.781936 121.791915) + (xy 169.736181 121.739111) (xy 169.734434 121.7351) (xy 169.703294 121.659921) (xy 169.703292 121.659918) + (xy 169.70329 121.659914) (xy 169.615689 121.528811) (xy 169.615686 121.528807) (xy 169.504192 121.417313) + (xy 169.504188 121.41731) (xy 169.373085 121.329709) (xy 169.373072 121.329702) (xy 169.227401 121.269364) + (xy 169.227389 121.269361) (xy 169.072745 121.2386) (xy 169.072742 121.2386) (xy 168.915058 121.2386) + (xy 168.915055 121.2386) (xy 168.76041 121.269361) (xy 168.760398 121.269364) (xy 168.640851 121.318882) + (xy 168.571382 121.326351) (xy 168.508903 121.295075) (xy 168.473251 121.234986) (xy 168.469399 121.204321) + (xy 168.469399 120.614677) (xy 168.472054 120.603008) (xy 168.47102 120.594694) (xy 168.481605 120.561028) + (xy 168.487911 120.54789) (xy 168.497974 120.526974) (xy 168.497974 120.526969) (xy 168.50136 120.519933) + (xy 168.501525 120.519522) (xy 168.501646 120.51927) (xy 168.508883 120.504191) (xy 168.557 120.328042) + (xy 168.572437 120.146093) (xy 168.554681 119.964355) (xy 168.50432 119.788834) (xy 168.423018 119.62533) + (xy 168.328575 119.499397) (xy 168.313462 119.479245) (xy 168.245159 119.416211) (xy 168.179269 119.355404) + (xy 168.179266 119.355402) (xy 168.179265 119.355401) (xy 168.179262 119.355399) (xy 168.024877 119.257901) + (xy 167.855387 119.189958) (xy 167.855377 119.189956) (xy 167.676392 119.153818) (xy 167.676399 119.153818) + (xy 167.504694 119.150865) (xy 167.493818 119.150678) (xy 167.493817 119.150678) (xy 167.493814 119.150678) + (xy 167.313697 119.180638) (xy 167.313684 119.180641) (xy 167.141963 119.242713) (xy 167.127448 119.25117) + (xy 167.127363 119.251219) (xy 167.120276 119.25534) (xy 167.12003 119.255408) (xy 167.092238 119.271644) + (xy 167.09199 119.271789) (xy 167.089263 119.272459) (xy 167.029646 119.288596) (xy 166.989301 119.288593) + (xy 166.989197 119.2886) (xy 165.548496 119.2886) (xy 165.540314 119.288598) (xy 165.540292 119.288593) + (xy 165.510365 119.288595) (xy 165.508128 119.288595) (xy 165.507846 119.288512) (xy 165.445593 119.271662) + (xy 165.417771 119.255408) (xy 165.411705 119.251864) (xy 165.410007 119.251017) (xy 165.402657 119.246734) + (xy 165.395821 119.24275) (xy 165.224097 119.180678) (xy 165.224091 119.180677) (xy 165.043981 119.150719) + (xy 165.043978 119.150719) (xy 165.035439 119.150865) (xy 164.861407 119.153859) (xy 164.682434 119.189994) + (xy 164.682423 119.189997) (xy 164.512942 119.257937) (xy 164.512941 119.257937) (xy 164.358561 119.355432) + (xy 164.358558 119.355434) (xy 164.224367 119.479273) (xy 164.114815 119.625354) (xy 164.03352 119.788844) + (xy 164.033519 119.788847) (xy 164.033518 119.78885) (xy 164.016645 119.847658) (xy 163.983158 119.964365) + (xy 163.969378 120.105413) (xy 163.965404 120.146093) (xy 163.966583 120.159989) (xy 163.980679 120.326147) + (xy 163.98084 120.328035) (xy 164.005548 120.418484) (xy 164.028956 120.504178) (xy 164.02896 120.504188) + (xy 164.036198 120.51927) (xy 164.03624 120.519356) (xy 164.039823 120.526838) (xy 164.039881 120.52714) + (xy 164.056197 120.561025) (xy 164.056236 120.561106) (xy 164.056381 120.562) (xy 164.068401 120.614669) + (xy 164.068401 121.963522) (xy 164.056207 122.017145) (xy 164.055619 122.018371) (xy 164.055539 122.018538) + (xy 164.036666 122.057737) (xy 164.036342 122.058539) (xy 164.028918 122.07401) (xy 163.980801 122.250154) + (xy 163.980801 122.250156) (xy 163.965365 122.432106) (xy 159.0875 122.432106) (xy 159.0875 116.59655) + (xy 160.0645 116.59655) (xy 160.0645 116.765849) (xy 160.090981 116.933047) (xy 160.143296 117.094053) + (xy 160.220152 117.244888) (xy 160.319648 117.381834) (xy 160.319651 117.381838) (xy 160.43936 117.501547) + (xy 160.439365 117.501551) (xy 160.519244 117.559586) (xy 160.576315 117.60105) (xy 160.672425 117.65002) + (xy 160.727146 117.677903) (xy 160.727148 117.677903) (xy 160.727151 117.677905) (xy 160.81345 117.705945) + (xy 160.888152 117.730218) (xy 161.055351 117.7567) (xy 161.055356 117.7567) (xy 161.224649 117.7567) + (xy 161.391847 117.730218) (xy 161.552849 117.677905) (xy 161.703685 117.60105) (xy 161.840641 117.501546) + (xy 161.960346 117.381841) (xy 161.960346 117.38184) (xy 161.960349 117.381838) (xy 161.960351 117.381834) + (xy 161.981179 117.353167) (xy 162.05985 117.244885) (xy 162.136705 117.094049) (xy 162.189018 116.933047) + (xy 162.2155 116.765849) (xy 162.2155 116.59655) (xy 162.189928 116.435098) (xy 162.198882 116.365805) + (xy 162.243879 116.312353) (xy 162.31063 116.291713) (xy 162.312401 116.2917) (xy 162.550944 116.2917) + (xy 162.550951 116.2917) (xy 162.830442 116.254904) (xy 163.102739 116.181942) (xy 163.363183 116.074063) + (xy 163.607317 115.933112) (xy 163.830965 115.7615) (xy 164.0303 115.562165) (xy 164.097992 115.473946) + (xy 164.15442 115.432744) (xy 164.224166 115.428589) (xy 164.285086 115.462801) (xy 164.317839 115.524518) + (xy 164.312026 115.594146) (xy 164.303755 115.611433) (xy 164.247683 115.708551) (xy 164.247675 115.708568) + (xy 164.137597 115.974321) (xy 164.063146 116.252176) (xy 164.025601 116.537361) (xy 164.0256 116.537377) + (xy 164.0256 116.825022) (xy 164.025601 116.825038) (xy 164.063146 117.110223) (xy 164.137597 117.388078) + (xy 164.247675 117.653831) (xy 164.247683 117.653848) (xy 164.391504 117.902951) (xy 164.391515 117.902967) + (xy 164.566621 118.131171) (xy 164.566627 118.131178) (xy 164.770021 118.334572) (xy 164.770027 118.334577) + (xy 164.998241 118.509691) (xy 164.998248 118.509695) (xy 165.247351 118.653516) (xy 165.247356 118.653518) + (xy 165.247359 118.65352) (xy 165.247363 118.653521) (xy 165.247368 118.653524) (xy 165.294808 118.673174) + (xy 165.51312 118.763602) (xy 165.790975 118.838053) (xy 166.076171 118.8756) (xy 166.076178 118.8756) + (xy 166.363822 118.8756) (xy 166.363829 118.8756) (xy 166.649025 118.838053) (xy 166.92688 118.763602) + (xy 167.192641 118.65352) (xy 167.195056 118.652126) (xy 167.309067 118.586301) (xy 167.441759 118.509691) + (xy 167.669973 118.334577) (xy 167.873377 118.131173) (xy 168.048491 117.902959) (xy 168.19232 117.653841) + (xy 168.302402 117.38808) (xy 168.376853 117.110225) (xy 168.4144 116.825029) (xy 168.4144 116.59655) + (xy 170.2245 116.59655) (xy 170.2245 116.765849) (xy 170.250981 116.933047) (xy 170.303296 117.094053) + (xy 170.380152 117.244888) (xy 170.479648 117.381834) (xy 170.479651 117.381838) (xy 170.59936 117.501547) + (xy 170.599365 117.501551) (xy 170.679244 117.559586) (xy 170.736315 117.60105) (xy 170.832425 117.65002) + (xy 170.887146 117.677903) (xy 170.887148 117.677903) (xy 170.887151 117.677905) (xy 170.97345 117.705945) + (xy 171.048152 117.730218) (xy 171.215351 117.7567) (xy 171.215356 117.7567) (xy 171.384649 117.7567) + (xy 171.551847 117.730218) (xy 171.712849 117.677905) (xy 171.863685 117.60105) (xy 172.000641 117.501546) + (xy 172.120346 117.381841) (xy 172.120346 117.38184) (xy 172.120349 117.381838) (xy 172.120351 117.381834) + (xy 172.141179 117.353167) (xy 172.21985 117.244885) (xy 172.296705 117.094049) (xy 172.349018 116.933047) + (xy 172.3755 116.765849) (xy 172.3755 116.59655) (xy 172.349018 116.429352) (xy 172.322275 116.347046) + (xy 172.296705 116.268351) (xy 172.296703 116.268348) (xy 172.296703 116.268346) (xy 172.246015 116.168867) + (xy 172.21985 116.117515) (xy 172.188281 116.074064) (xy 172.120351 115.980565) (xy 172.120347 115.98056) + (xy 172.000639 115.860852) (xy 172.000634 115.860848) (xy 171.863688 115.761352) (xy 171.863687 115.761351) + (xy 171.863685 115.76135) (xy 171.814398 115.736237) (xy 171.712853 115.684496) (xy 171.551847 115.632181) + (xy 171.384649 115.6057) (xy 171.384644 115.6057) (xy 171.215356 115.6057) (xy 171.215351 115.6057) + (xy 171.048152 115.632181) (xy 170.887146 115.684496) (xy 170.736311 115.761352) (xy 170.599365 115.860848) + (xy 170.59936 115.860852) (xy 170.479652 115.98056) (xy 170.479648 115.980565) (xy 170.380152 116.117511) + (xy 170.303296 116.268346) (xy 170.250981 116.429352) (xy 170.2245 116.59655) (xy 168.4144 116.59655) + (xy 168.4144 116.537371) (xy 168.376853 116.252175) (xy 168.302402 115.97432) (xy 168.214705 115.762601) + (xy 168.192324 115.708568) (xy 168.192316 115.708551) (xy 168.048495 115.459448) (xy 168.048491 115.459441) + (xy 167.907073 115.275141) (xy 167.873378 115.231228) (xy 167.873372 115.231221) (xy 167.669978 115.027827) + (xy 167.669971 115.027821) (xy 167.441767 114.852715) (xy 167.441765 114.852713) (xy 167.441759 114.852709) + (xy 167.441754 114.852706) (xy 167.441751 114.852704) (xy 167.192648 114.708883) (xy 167.192631 114.708875) + (xy 166.926878 114.598797) (xy 166.649023 114.524346) (xy 166.363838 114.486801) (xy 166.363835 114.4868) + (xy 166.363829 114.4868) (xy 166.076171 114.4868) (xy 166.076165 114.4868) (xy 166.076161 114.486801) + (xy 165.790976 114.524346) (xy 165.513121 114.598797) (xy 165.247368 114.708875) (xy 165.247351 114.708883) + (xy 164.998248 114.852704) (xy 164.998232 114.852715) (xy 164.770028 115.027821) (xy 164.770021 115.027827) + (xy 164.566627 115.231221) (xy 164.49543 115.324007) (xy 164.439001 115.365209) (xy 164.369255 115.369364) + (xy 164.308335 115.335151) (xy 164.275583 115.273434) (xy 164.281396 115.203807) (xy 164.289661 115.186531) + (xy 164.342863 115.094383) (xy 164.450742 114.833939) (xy 164.523704 114.561642) (xy 164.5605 114.282151) + (xy 164.5605 114.000249) (xy 164.523704 113.720758) (xy 164.450742 113.448461) (xy 164.44376 113.431606) + (xy 164.418765 113.371261) (xy 164.342863 113.188017) (xy 164.342861 113.188014) (xy 164.342859 113.188009) + (xy 164.201916 112.94389) (xy 164.201912 112.943883) (xy 164.0303 112.720235) (xy 164.030298 112.720233) + (xy 164.030295 112.720229) (xy 163.83097 112.520904) (xy 163.806161 112.501867) (xy 163.607317 112.349288) + (xy 163.607311 112.349284) (xy 163.607309 112.349283) (xy 163.36319 112.20834) (xy 163.363179 112.208335) + (xy 163.102743 112.100459) (xy 162.830439 112.027495) (xy 162.550958 111.9907) (xy 162.550951 111.9907) + (xy 162.269049 111.9907) (xy 162.269041 111.9907) (xy 161.98956 112.027495) (xy 161.717256 112.100459) + (xy 161.45682 112.208335) (xy 161.456809 112.20834) (xy 161.21269 112.349283) (xy 161.212682 112.349289) + (xy 160.989029 112.520904) (xy 160.789704 112.720229) (xy 160.618089 112.943882) (xy 160.618083 112.94389) + (xy 160.47714 113.188009) (xy 160.477135 113.18802) (xy 160.369259 113.448456) (xy 160.296295 113.72076) + (xy 160.2595 114.000241) (xy 160.2595 114.282158) (xy 160.296295 114.561639) (xy 160.369259 114.833943) + (xy 160.477135 115.094379) (xy 160.47714 115.09439) (xy 160.618083 115.338509) (xy 160.618094 115.338525) + (xy 160.748838 115.508914) (xy 160.774032 115.574083) (xy 160.759994 115.642528) (xy 160.71118 115.692517) + (xy 160.706758 115.694884) (xy 160.576313 115.76135) (xy 160.439365 115.860848) (xy 160.43936 115.860852) + (xy 160.319652 115.98056) (xy 160.319648 115.980565) (xy 160.220152 116.117511) (xy 160.143296 116.268346) + (xy 160.090981 116.429352) (xy 160.0645 116.59655) (xy 159.0875 116.59655) (xy 159.0875 114.996075) + (xy 159.107185 114.929036) (xy 159.159989 114.883281) (xy 159.163999 114.881534) (xy 159.239179 114.850394) + (xy 159.370289 114.762789) (xy 159.481789 114.651289) (xy 159.569394 114.520179) (xy 159.629737 114.374497) + (xy 159.6605 114.219842) (xy 159.6605 114.062158) (xy 159.6605 114.062155) (xy 159.660499 114.062153) + (xy 159.648556 114.002113) (xy 159.629737 113.907503) (xy 159.602278 113.841211) (xy 159.569397 113.761827) + (xy 159.56939 113.761814) (xy 159.481789 113.630711) (xy 159.481786 113.630707) (xy 159.370292 113.519213) + (xy 159.370288 113.51921) (xy 159.239185 113.431609) (xy 159.239172 113.431602) (xy 159.093501 113.371264) + (xy 159.093489 113.371261) (xy 158.938845 113.3405) (xy 158.938842 113.3405) (xy 158.781158 113.3405) + (xy 158.781155 113.3405) (xy 158.62651 113.371261) (xy 158.626498 113.371264) (xy 158.480827 113.431602) + (xy 158.480814 113.431609) (xy 158.349711 113.51921) (xy 158.349707 113.519213) (xy 158.238213 113.630707) + (xy 158.23821 113.630711) (xy 158.150609 113.761814) (xy 158.150607 113.761818) (xy 158.14673 113.771178) + (xy 158.119484 113.836954) (xy 158.106942 113.852519) (xy 158.098638 113.870703) (xy 158.085469 113.879165) + (xy 158.075646 113.891356) (xy 158.056676 113.897669) (xy 158.03986 113.908477) (xy 158.0123 113.912439) + (xy 158.009352 113.913421) (xy 158.004925 113.9135) (xy 157.876595 113.9135) (xy 157.809556 113.893815) + (xy 157.788914 113.877181) (xy 149.621819 105.710086) (xy 149.588334 105.648763) (xy 149.5855 105.622405) + (xy 149.5855 103.491706) (xy 154.500265 103.491706) (xy 154.51763 103.669446) (xy 154.518021 103.673442) + (xy 154.536931 103.739348) (xy 154.56838 103.848961) (xy 154.64968 104.012463) (xy 154.649681 104.012465) + (xy 154.649683 104.012468) (xy 154.706723 104.088527) (xy 154.759238 104.158552) (xy 154.759239 104.158553) + (xy 154.75924 104.158554) (xy 154.893432 104.282395) (xy 155.047825 104.379897) (xy 155.182977 104.434074) + (xy 155.217314 104.447839) (xy 155.217315 104.447839) (xy 155.217317 104.44784) (xy 155.396308 104.483979) + (xy 155.396302 104.483979) (xy 155.412622 104.484259) (xy 155.578884 104.48712) (xy 155.759012 104.457158) + (xy 155.806064 104.44015) (xy 155.930736 104.395085) (xy 155.930737 104.395083) (xy 155.93074 104.395083) + (xy 155.945775 104.38632) (xy 155.952459 104.382435) (xy 155.95275 104.382357) (xy 155.980633 104.36606) + (xy 155.980751 104.365992) (xy 155.983968 104.365201) (xy 156.043062 104.349199) (xy 157.524192 104.349199) + (xy 157.524314 104.349206) (xy 157.532405 104.349205) (xy 157.532408 104.349206) (xy 157.564542 104.349202) + (xy 157.627104 104.366134) (xy 157.65493 104.382391) (xy 157.654932 104.382391) (xy 157.66108 104.385983) + (xy 157.662735 104.386808) (xy 157.663205 104.387082) (xy 157.676878 104.39505) (xy 157.8486 104.457121) + (xy 158.028721 104.487082) (xy 158.208398 104.48399) (xy 158.211291 104.483941) (xy 158.390266 104.447805) + (xy 158.390269 104.447803) (xy 158.390274 104.447803) (xy 158.55976 104.379862) (xy 158.714146 104.282363) + (xy 158.716819 104.279897) (xy 158.84833 104.15853) (xy 158.848332 104.158528) (xy 158.855737 104.148654) + (xy 158.957885 104.012447) (xy 159.039184 103.848948) (xy 159.089542 103.673433) (xy 159.107297 103.491703) + (xy 159.09186 103.30976) (xy 159.091858 103.309754) (xy 159.077201 103.256097) (xy 159.043743 103.133618) + (xy 159.035983 103.117449) (xy 159.032896 103.111004) (xy 159.032848 103.110746) (xy 159.016471 103.076719) + (xy 159.016343 103.07593) (xy 159.004302 103.023131) (xy 159.004302 103.022698) (xy 159.004307 102.985708) + (xy 159.004306 102.985704) (xy 159.004307 102.977698) (xy 159.004299 102.97756) (xy 159.004299 101.674279) + (xy 159.006955 101.662607) (xy 159.005921 101.654291) (xy 159.016509 101.620623) (xy 159.023123 101.606843) + (xy 159.023173 101.606739) (xy 159.036251 101.579555) (xy 159.036418 101.579135) (xy 159.043783 101.563791) + (xy 159.0919 101.387642) (xy 159.107337 101.205693) (xy 159.089581 101.023955) (xy 159.03922 100.848434) + (xy 158.957918 100.68493) (xy 158.848361 100.538844) (xy 158.714169 100.415004) (xy 158.714166 100.415002) + (xy 158.714165 100.415001) (xy 158.714162 100.414999) (xy 158.559777 100.317501) (xy 158.390287 100.249558) + (xy 158.390277 100.249556) (xy 158.211292 100.213418) (xy 158.211299 100.213418) (xy 158.039594 100.210465) + (xy 158.028718 100.210278) (xy 158.028717 100.210278) (xy 158.028714 100.210278) (xy 157.848597 100.240238) + (xy 157.848584 100.240241) (xy 157.676863 100.302313) (xy 157.662348 100.31077) (xy 157.662263 100.310819) + (xy 157.655176 100.31494) (xy 157.65493 100.315008) (xy 157.627138 100.331244) (xy 157.62689 100.331389) + (xy 157.624163 100.332059) (xy 157.564546 100.348196) (xy 157.524201 100.348193) (xy 157.524097 100.3482) + (xy 156.083396 100.3482) (xy 156.075214 100.348198) (xy 156.075192 100.348193) (xy 156.045265 100.348195) + (xy 156.043028 100.348195) (xy 156.042746 100.348112) (xy 155.980493 100.331262) (xy 155.952671 100.315008) + (xy 155.946605 100.311464) (xy 155.944907 100.310617) (xy 155.936616 100.305786) (xy 155.930721 100.30235) + (xy 155.758997 100.240278) (xy 155.758991 100.240277) (xy 155.578881 100.210319) (xy 155.578878 100.210319) + (xy 155.570339 100.210465) (xy 155.396307 100.213459) (xy 155.217334 100.249594) (xy 155.217323 100.249597) + (xy 155.047842 100.317537) (xy 155.047841 100.317537) (xy 154.893461 100.415032) (xy 154.893458 100.415034) + (xy 154.759267 100.538873) (xy 154.649715 100.684954) (xy 154.56842 100.848444) (xy 154.568419 100.848447) + (xy 154.568418 100.84845) (xy 154.546751 100.923965) (xy 154.518058 101.023965) (xy 154.500908 101.199511) + (xy 154.500304 101.205693) (xy 154.504208 101.251713) (xy 154.515237 101.381713) (xy 154.51574 101.387635) + (xy 154.548304 101.506843) (xy 154.563856 101.563778) (xy 154.56386 101.563788) (xy 154.571098 101.57887) + (xy 154.57114 101.578956) (xy 154.574723 101.586438) (xy 154.574781 101.58674) (xy 154.591096 101.620623) + (xy 154.591136 101.620706) (xy 154.591281 101.6216) (xy 154.603301 101.674269) (xy 154.603301 103.023126) + (xy 154.591081 103.076803) (xy 154.590802 103.077384) (xy 154.590747 103.077499) (xy 154.571567 103.117334) + (xy 154.57124 103.118144) (xy 154.563818 103.13361) (xy 154.515701 103.309754) (xy 154.515701 103.309756) + (xy 154.500265 103.491706) (xy 149.5855 103.491706) (xy 149.5855 97.54655) (xy 150.562 97.54655) + (xy 150.562 97.715849) (xy 150.588481 97.883047) (xy 150.640796 98.044053) (xy 150.717652 98.194888) + (xy 150.817148 98.331834) (xy 150.817152 98.331839) (xy 150.93686 98.451547) (xy 150.936865 98.451551) + (xy 151.013873 98.5075) (xy 151.073815 98.55105) (xy 151.167141 98.598602) (xy 151.224646 98.627903) + (xy 151.224648 98.627903) (xy 151.224651 98.627905) (xy 151.30885 98.655263) (xy 151.385652 98.680218) + (xy 151.552851 98.7067) (xy 151.552856 98.7067) (xy 151.722149 98.7067) (xy 151.889347 98.680218) + (xy 152.050349 98.627905) (xy 152.201185 98.55105) (xy 152.338141 98.451546) (xy 152.457846 98.331841) + (xy 152.55735 98.194885) (xy 152.634205 98.044049) (xy 152.686518 97.883047) (xy 152.696383 97.820763) + (xy 152.713 97.715849) (xy 152.713 97.54655) (xy 152.687428 97.385098) (xy 152.696382 97.315805) + (xy 152.741379 97.262353) (xy 152.80813 97.241713) (xy 152.809901 97.2417) (xy 153.048444 97.2417) + (xy 153.048451 97.2417) (xy 153.327942 97.204904) (xy 153.600239 97.131942) (xy 153.860683 97.024063) + (xy 154.104817 96.883112) (xy 154.328465 96.7115) (xy 154.5278 96.512165) (xy 154.595492 96.423946) + (xy 154.65192 96.382744) (xy 154.721666 96.378589) (xy 154.782586 96.412801) (xy 154.815339 96.474518) + (xy 154.809526 96.544146) (xy 154.801255 96.561433) (xy 154.745183 96.658551) (xy 154.745175 96.658568) + (xy 154.635097 96.924321) (xy 154.560646 97.202176) (xy 154.523101 97.487361) (xy 154.5231 97.487377) + (xy 154.5231 97.775022) (xy 154.523101 97.775038) (xy 154.560646 98.060223) (xy 154.635097 98.338078) + (xy 154.745175 98.603831) (xy 154.745183 98.603848) (xy 154.889004 98.852951) (xy 154.889015 98.852967) + (xy 155.064121 99.081171) (xy 155.064127 99.081178) (xy 155.267521 99.284572) (xy 155.267528 99.284578) + (xy 155.400807 99.386846) (xy 155.495741 99.459691) (xy 155.495748 99.459695) (xy 155.744851 99.603516) + (xy 155.744856 99.603518) (xy 155.744859 99.60352) (xy 155.744863 99.603521) (xy 155.744868 99.603524) + (xy 155.787477 99.621173) (xy 156.01062 99.713602) (xy 156.288475 99.788053) (xy 156.573671 99.8256) + (xy 156.573678 99.8256) (xy 156.861322 99.8256) (xy 156.861329 99.8256) (xy 157.146525 99.788053) + (xy 157.42438 99.713602) (xy 157.690141 99.60352) (xy 157.939259 99.459691) (xy 158.167473 99.284577) + (xy 158.370877 99.081173) (xy 158.545991 98.852959) (xy 158.68982 98.603841) (xy 158.799902 98.33808) + (xy 158.874353 98.060225) (xy 158.9119 97.775029) (xy 158.9119 97.487371) (xy 158.874353 97.202175) + (xy 158.799902 96.92432) (xy 158.68982 96.658559) (xy 158.689818 96.658556) (xy 158.689816 96.658551) + (xy 158.545995 96.409448) (xy 158.545991 96.409441) (xy 158.442069 96.274007) (xy 158.370878 96.181228) + (xy 158.370872 96.181221) (xy 158.167478 95.977827) (xy 158.167471 95.977821) (xy 157.939267 95.802715) + (xy 157.939265 95.802713) (xy 157.939259 95.802709) (xy 157.939254 95.802706) (xy 157.939251 95.802704) + (xy 157.690148 95.658883) (xy 157.690131 95.658875) (xy 157.424378 95.548797) (xy 157.146523 95.474346) + (xy 156.861338 95.436801) (xy 156.861335 95.4368) (xy 156.861329 95.4368) (xy 156.573671 95.4368) + (xy 156.573665 95.4368) (xy 156.573661 95.436801) (xy 156.288476 95.474346) (xy 156.010621 95.548797) + (xy 155.744868 95.658875) (xy 155.744851 95.658883) (xy 155.495748 95.802704) (xy 155.495732 95.802715) + (xy 155.267528 95.977821) (xy 155.267521 95.977827) (xy 155.064127 96.181221) (xy 154.99293 96.274007) + (xy 154.936501 96.315209) (xy 154.866755 96.319364) (xy 154.805835 96.285151) (xy 154.773083 96.223434) + (xy 154.778896 96.153807) (xy 154.787161 96.136531) (xy 154.840363 96.044383) (xy 154.948242 95.783939) + (xy 155.021204 95.511642) (xy 155.058 95.232151) (xy 155.058 94.950249) (xy 155.021204 94.670758) + (xy 154.948242 94.398461) (xy 154.941342 94.381804) (xy 154.916349 94.321464) (xy 154.840363 94.138017) + (xy 154.840361 94.138014) (xy 154.840359 94.138009) (xy 154.699416 93.89389) (xy 154.699412 93.893883) + (xy 154.5278 93.670235) (xy 154.527798 93.670233) (xy 154.527795 93.670229) (xy 154.32847 93.470904) + (xy 154.303921 93.452067) (xy 154.104817 93.299288) (xy 154.104811 93.299284) (xy 154.104809 93.299283) + (xy 153.86069 93.15834) (xy 153.860679 93.158335) (xy 153.600243 93.050459) (xy 153.327939 92.977495) + (xy 153.048458 92.9407) (xy 153.048451 92.9407) (xy 152.766549 92.9407) (xy 152.766541 92.9407) + (xy 152.48706 92.977495) (xy 152.214756 93.050459) (xy 151.95432 93.158335) (xy 151.954309 93.15834) + (xy 151.71019 93.299283) (xy 151.710184 93.299287) (xy 151.710183 93.299288) (xy 151.648401 93.346695) + (xy 151.486529 93.470904) (xy 151.287204 93.670229) (xy 151.163314 93.831685) (xy 151.129927 93.875197) + (xy 151.115589 93.893882) (xy 151.115583 93.89389) (xy 150.97464 94.138009) (xy 150.974635 94.13802) + (xy 150.866759 94.398456) (xy 150.793795 94.67076) (xy 150.757 94.950241) (xy 150.757 95.232158) + (xy 150.793795 95.511639) (xy 150.866759 95.783943) (xy 150.974635 96.044379) (xy 150.97464 96.04439) + (xy 151.115583 96.288509) (xy 151.115594 96.288525) (xy 151.246338 96.458914) (xy 151.271532 96.524083) + (xy 151.257494 96.592528) (xy 151.20868 96.642517) (xy 151.204258 96.644884) (xy 151.073813 96.71135) + (xy 150.936865 96.810848) (xy 150.93686 96.810852) (xy 150.817152 96.93056) (xy 150.817148 96.930565) + (xy 150.717652 97.067511) (xy 150.640796 97.218346) (xy 150.588481 97.379352) (xy 150.562 97.54655) + (xy 149.5855 97.54655) (xy 149.5855 95.946275) (xy 149.605185 95.879236) (xy 149.657989 95.833481) + (xy 149.661999 95.831734) (xy 149.737179 95.800594) (xy 149.868289 95.712989) (xy 149.979789 95.601489) + (xy 150.067394 95.470379) (xy 150.127737 95.324697) (xy 150.1585 95.170042) (xy 150.1585 95.012358) + (xy 150.1585 95.012355) (xy 150.158499 95.012353) (xy 150.127738 94.85771) (xy 150.127737 94.857703) + (xy 150.127735 94.857698) (xy 150.067397 94.712027) (xy 150.06739 94.712014) (xy 149.979789 94.580911) + (xy 149.979786 94.580907) (xy 149.868292 94.469413) (xy 149.868288 94.46941) (xy 149.737185 94.381809) + (xy 149.737172 94.381802) (xy 149.591501 94.321464) (xy 149.591489 94.321461) (xy 149.436845 94.2907) + (xy 149.436842 94.2907) (xy 149.279158 94.2907) (xy 149.279155 94.2907) (xy 149.12451 94.321461) + (xy 149.124498 94.321464) (xy 148.978827 94.381802) (xy 148.978814 94.381809) (xy 148.847711 94.46941) + (xy 148.847707 94.469413) (xy 148.736213 94.580907) (xy 148.73621 94.580911) (xy 148.648609 94.712014) + (xy 148.648602 94.712027) (xy 148.588264 94.857698) (xy 148.588261 94.85771) (xy 148.5575 95.012353) + (xy 148.5575 95.170046) (xy 148.588261 95.324689) (xy 148.588264 95.324701) (xy 148.648602 95.470372) + (xy 148.648609 95.470385) (xy 148.73621 95.601488) (xy 148.736213 95.601492) (xy 148.847707 95.712986) + (xy 148.847711 95.712989) (xy 148.978814 95.80059) (xy 148.978818 95.800592) (xy 148.978821 95.800594) + (xy 149.053954 95.831715) (xy 149.108356 95.875554) (xy 149.130421 95.941848) (xy 149.1305 95.946275) + (xy 149.1305 105.383405) (xy 149.110815 105.450444) (xy 149.058011 105.496199) (xy 148.988853 105.506143) + (xy 148.925297 105.477118) (xy 148.918819 105.471086) (xy 145.783819 102.336086) (xy 145.750334 102.274763) + (xy 145.7475 102.248405) (xy 145.7475 92.594035) (xy 145.747511 92.551904) (xy 145.7475 92.551877) + (xy 145.7475 92.551847) (xy 145.730545 92.510915) (xy 145.712898 92.46828) (xy 145.712896 92.468278) + (xy 145.712896 92.468277) (xy 145.712869 92.468236) (xy 145.683102 92.438469) (xy 145.654888 92.410241) + (xy 157.107 92.410241) (xy 157.107 92.692158) (xy 157.143795 92.971639) (xy 157.216759 93.243943) + (xy 157.324635 93.504379) (xy 157.32464 93.50439) (xy 157.465583 93.748509) (xy 157.465588 93.748517) + (xy 157.6372 93.972165) (xy 157.637204 93.97217) (xy 157.836529 94.171495) (xy 157.836533 94.171498) + (xy 157.836535 94.1715) (xy 158.060183 94.343112) (xy 158.06019 94.343116) (xy 158.304309 94.484059) + (xy 158.304314 94.484061) (xy 158.304317 94.484063) (xy 158.564761 94.591942) (xy 158.837058 94.664904) + (xy 159.116549 94.7017) (xy 159.116556 94.7017) (xy 159.398444 94.7017) (xy 159.398451 94.7017) + (xy 159.677942 94.664904) (xy 159.950239 94.591942) (xy 160.210683 94.484063) (xy 160.454817 94.343112) + (xy 160.678465 94.1715) (xy 160.8778 93.972165) (xy 161.049412 93.748517) (xy 161.190363 93.504383) + (xy 161.298242 93.243939) (xy 161.371204 92.971642) (xy 161.408 92.692151) (xy 161.408 92.410249) + (xy 161.371204 92.130758) (xy 161.298242 91.858461) (xy 161.291342 91.841804) (xy 161.266349 91.781464) + (xy 161.190363 91.598017) (xy 161.190361 91.598014) (xy 161.190359 91.598009) (xy 161.049416 91.35389) + (xy 161.049412 91.353883) (xy 160.8778 91.130235) (xy 160.877798 91.130233) (xy 160.877795 91.130229) + (xy 160.67847 90.930904) (xy 160.678465 90.9309) (xy 160.454817 90.759288) (xy 160.454811 90.759284) + (xy 160.454809 90.759283) (xy 160.21069 90.61834) (xy 160.210679 90.618335) (xy 159.950243 90.510459) + (xy 159.677939 90.437495) (xy 159.398458 90.4007) (xy 159.398451 90.4007) (xy 159.116549 90.4007) + (xy 159.116541 90.4007) (xy 158.83706 90.437495) (xy 158.564756 90.510459) (xy 158.30432 90.618335) + (xy 158.304309 90.61834) (xy 158.06019 90.759283) (xy 158.060184 90.759287) (xy 158.060183 90.759288) + (xy 158.024557 90.786625) (xy 157.836529 90.930904) (xy 157.637204 91.130229) (xy 157.567704 91.220803) + (xy 157.476612 91.339517) (xy 157.465589 91.353882) (xy 157.465583 91.35389) (xy 157.32464 91.598009) + (xy 157.324635 91.59802) (xy 157.216759 91.858456) (xy 157.143795 92.13076) (xy 157.107 92.410241) + (xy 145.654888 92.410241) (xy 145.188797 91.943914) (xy 145.155327 91.882582) (xy 145.1525 91.856255) + (xy 145.1525 90.506071) (xy 145.172185 90.439032) (xy 145.188805 90.418404) (xy 147.672927 87.933728) + (xy 147.734246 87.900237) (xy 147.760618 87.8974) (xy 164.583522 87.8974) (xy 164.650561 87.917085) + (xy 164.696316 87.969889) (xy 164.70626 88.039047) (xy 164.677235 88.102603) (xy 164.671222 88.109062) + (xy 162.645245 90.135919) (xy 162.645064 90.136101) (xy 162.64495 90.136216) (xy 162.615135 90.166032) + (xy 162.615125 90.166054) (xy 162.615106 90.166074) (xy 162.614885 90.166606) (xy 162.614884 90.166608) + (xy 162.597929 90.207565) (xy 162.597878 90.207691) (xy 162.5805 90.249647) (xy 162.5805 90.249675) + (xy 162.580491 90.249697) (xy 162.580491 90.249797) (xy 162.58049 90.2498) (xy 162.5805 90.291934) + (xy 162.5805 91.696124) (xy 162.560815 91.763163) (xy 162.508011 91.808918) (xy 162.503953 91.810685) + (xy 162.428824 91.841804) (xy 162.428814 91.841809) (xy 162.297711 91.92941) (xy 162.297707 91.929413) + (xy 162.186213 92.040907) (xy 162.18621 92.040911) (xy 162.098609 92.172014) (xy 162.098602 92.172027) + (xy 162.038264 92.317698) (xy 162.038261 92.31771) (xy 162.0075 92.472353) (xy 162.0075 92.630046) + (xy 162.038261 92.784689) (xy 162.038264 92.784701) (xy 162.098602 92.930372) (xy 162.098609 92.930385) + (xy 162.18621 93.061488) (xy 162.186213 93.061492) (xy 162.297707 93.172986) (xy 162.297711 93.172989) + (xy 162.428814 93.26059) (xy 162.428827 93.260597) (xy 162.524499 93.300225) (xy 162.574503 93.320937) + (xy 162.729153 93.351699) (xy 162.729156 93.3517) (xy 162.729158 93.3517) (xy 162.886843 93.3517) + (xy 162.907788 93.347533) (xy 162.943308 93.340468) (xy 163.012899 93.346695) (xy 163.068077 93.389557) + (xy 163.091322 93.455447) (xy 163.0915 93.462085) (xy 163.0915 97.352105) (xy 163.071815 97.419144) + (xy 163.019011 97.464899) (xy 162.949853 97.474843) (xy 162.886297 97.445818) (xy 162.848523 97.38704) + (xy 162.846924 97.381045) (xy 162.846519 97.379362) (xy 162.846518 97.379353) (xy 162.794205 97.218351) + (xy 162.794203 97.218348) (xy 162.794203 97.218346) (xy 162.750176 97.13194) (xy 162.71735 97.067515) + (xy 162.685781 97.024064) (xy 162.617851 96.930565) (xy 162.617847 96.93056) (xy 162.498139 96.810852) + (xy 162.498134 96.810848) (xy 162.361188 96.711352) (xy 162.361187 96.711351) (xy 162.361185 96.71135) + (xy 162.314082 96.68735) (xy 162.210353 96.634496) (xy 162.049347 96.582181) (xy 161.882149 96.5557) + (xy 161.882144 96.5557) (xy 161.712856 96.5557) (xy 161.712851 96.5557) (xy 161.545652 96.582181) + (xy 161.384646 96.634496) (xy 161.233811 96.711352) (xy 161.096865 96.810848) (xy 161.09686 96.810852) + (xy 160.977152 96.93056) (xy 160.977148 96.930565) (xy 160.877652 97.067511) (xy 160.800796 97.218346) + (xy 160.748481 97.379352) (xy 160.722 97.54655) (xy 160.722 97.715849) (xy 160.748481 97.883047) + (xy 160.800796 98.044053) (xy 160.877652 98.194888) (xy 160.977148 98.331834) (xy 160.977152 98.331839) + (xy 161.09686 98.451547) (xy 161.096865 98.451551) (xy 161.173873 98.5075) (xy 161.233815 98.55105) + (xy 161.327141 98.598602) (xy 161.384646 98.627903) (xy 161.384648 98.627903) (xy 161.384651 98.627905) + (xy 161.46885 98.655263) (xy 161.545652 98.680218) (xy 161.712851 98.7067) (xy 161.712856 98.7067) + (xy 161.882149 98.7067) (xy 162.049347 98.680218) (xy 162.210349 98.627905) (xy 162.361185 98.55105) + (xy 162.498141 98.451546) (xy 162.617846 98.331841) (xy 162.71735 98.194885) (xy 162.794205 98.044049) + (xy 162.846518 97.883047) (xy 162.84652 97.88303) (xy 162.846923 97.881358) (xy 162.847255 97.880779) + (xy 162.848024 97.878413) (xy 162.84852 97.878574) (xy 162.881709 97.820763) (xy 162.943732 97.788593) + (xy 163.013301 97.795063) (xy 163.068329 97.838117) (xy 163.091345 97.904088) (xy 163.0915 97.910294) + (xy 163.0915 102.943747) (xy 163.0915 103.034253) (xy 163.125961 103.117449) (xy 163.126136 103.11787) + (xy 169.285269 109.277002) (xy 169.318754 109.338325) (xy 169.31377 109.408017) (xy 169.271898 109.46395) + (xy 169.206434 109.488367) (xy 169.181403 109.487622) (xy 168.900961 109.450701) (xy 168.900956 109.4507) + (xy 168.900951 109.4507) (xy 168.619049 109.4507) (xy 168.619041 109.4507) (xy 168.33956 109.487495) + (xy 168.067256 109.560459) (xy 167.80682 109.668335) (xy 167.806809 109.66834) (xy 167.56269 109.809283) + (xy 167.562684 109.809287) (xy 167.562683 109.809288) (xy 167.515169 109.845747) (xy 167.339029 109.980904) + (xy 167.139704 110.180229) (xy 167.026381 110.327914) (xy 166.979327 110.389237) (xy 166.968089 110.403882) + (xy 166.968083 110.40389) (xy 166.82714 110.648009) (xy 166.827135 110.64802) (xy 166.719259 110.908456) + (xy 166.646295 111.18076) (xy 166.6095 111.460241) (xy 166.6095 111.742158) (xy 166.646295 112.021639) + (xy 166.719259 112.293943) (xy 166.827135 112.554379) (xy 166.82714 112.55439) (xy 166.968083 112.798509) + (xy 166.968088 112.798517) (xy 167.086074 112.952278) (xy 167.139704 113.02217) (xy 167.339029 113.221495) + (xy 167.339033 113.221498) (xy 167.339035 113.2215) (xy 167.562683 113.393112) (xy 167.56269 113.393116) + (xy 167.806809 113.534059) (xy 167.806814 113.534061) (xy 167.806817 113.534063) (xy 167.914834 113.578805) + (xy 168.032486 113.627538) (xy 168.067261 113.641942) (xy 168.339558 113.714904) (xy 168.619049 113.7517) + (xy 168.619056 113.7517) (xy 168.900944 113.7517) (xy 168.900951 113.7517) (xy 169.180442 113.714904) + (xy 169.452739 113.641942) (xy 169.713183 113.534063) (xy 169.957317 113.393112) (xy 170.180965 113.2215) + (xy 170.3803 113.022165) (xy 170.551912 112.798517) (xy 170.692863 112.554383) (xy 170.800742 112.293939) + (xy 170.873704 112.021642) (xy 170.9105 111.742151) (xy 170.9105 111.460249) (xy 170.873704 111.180758) + (xy 170.873703 111.180754) (xy 170.873577 111.179797) (xy 170.884342 111.110761) (xy 170.930722 111.058505) + (xy 170.997991 111.03962) (xy 171.064792 111.0601) (xy 171.084197 111.07593) (xy 171.473181 111.464914) + (xy 171.506666 111.526237) (xy 171.5095 111.552595) (xy 171.5095 111.679846) (xy 171.540261 111.834489) + (xy 171.540264 111.834501) (xy 171.600602 111.980172) (xy 171.600609 111.980185) (xy 171.68821 112.111288) + (xy 171.688213 112.111292) (xy 171.799707 112.222786) (xy 171.799711 112.222789) (xy 171.930814 112.31039) + (xy 171.930827 112.310397) (xy 172.076498 112.370735) (xy 172.076503 112.370737) (xy 172.231153 112.401499) + (xy 172.231156 112.4015) (xy 172.231158 112.4015) (xy 172.388844 112.4015) (xy 172.388845 112.401499) + (xy 172.543497 112.370737) (xy 172.689179 112.310394) (xy 172.820289 112.222789) (xy 172.931789 112.111289) + (xy 172.973523 112.048828) (xy 172.989689 112.035318) (xy 173.002315 112.018453) (xy 173.015959 112.013363) + (xy 173.027134 112.004025) (xy 173.048037 112.001399) (xy 173.067779 111.994036) (xy 173.08201 111.997131) + (xy 173.096459 111.995317) (xy 173.115463 112.004409) (xy 173.136052 112.008888) (xy 173.155932 112.02377) + (xy 173.159487 112.025471) (xy 173.164306 112.030039) (xy 173.175181 112.040914) (xy 173.208666 112.102237) + (xy 173.2115 112.128595) (xy 173.2115 126.744918) (xy 173.211492 126.745002) (xy 173.2115 126.798548) + (xy 173.2115 126.847257) (xy 173.211503 126.847274) (xy 173.227629 126.886192) (xy 173.227631 126.886206) + (xy 173.227634 126.886206) (xy 173.246134 126.930868) (xy 173.246148 126.930889) (xy 173.246151 126.930892) + (xy 173.246152 126.930894) (xy 173.279541 126.964274) (xy 173.310132 126.994865) (xy 173.310146 126.99487) + (xy 173.855795 127.540372) (xy 175.091218 128.775463) (xy 175.124712 128.836782) (xy 175.119737 128.906474) + (xy 175.077873 128.962413) (xy 175.012412 128.986839) (xy 174.944137 128.971996) (xy 174.928062 128.961531) + (xy 174.794827 128.859295) (xy 174.794809 128.859283) (xy 174.55069 128.71834) (xy 174.550679 128.718335) + (xy 174.290243 128.610459) (xy 174.017939 128.537495) (xy 173.738458 128.5007) (xy 173.738451 128.5007) + (xy 173.456549 128.5007) (xy 173.456541 128.5007) (xy 173.17706 128.537495) (xy 172.904756 128.610459) + (xy 172.64432 128.718335) (xy 172.644309 128.71834) (xy 172.40019 128.859283) (xy 172.400184 128.859287) + (xy 172.400183 128.859288) (xy 172.345198 128.90148) (xy 172.176529 129.030904) (xy 171.977204 129.230229) + (xy 171.863881 129.377914) (xy 171.805597 129.453872) (xy 171.805589 129.453882) (xy 171.805583 129.45389) + (xy 171.66464 129.698009) (xy 171.664635 129.69802) (xy 171.556759 129.958456) (xy 171.483795 130.23076) + (xy 171.447 130.510241) (xy 171.447 130.792158) (xy 171.483795 131.071639) (xy 171.556759 131.343943) + (xy 171.664635 131.604379) (xy 171.66464 131.60439) (xy 171.797142 131.833888) (xy 171.805588 131.848517) + (xy 171.968047 132.060237) (xy 171.977204 132.07217) (xy 172.176529 132.271495) (xy 172.176533 132.271498) + (xy 172.176535 132.2715) (xy 172.400183 132.443112) (xy 172.40019 132.443116) (xy 172.644309 132.584059) + (xy 172.644314 132.584061) (xy 172.644317 132.584063) (xy 172.904761 132.691942) (xy 173.177058 132.764904) + (xy 173.456549 132.8017) (xy 173.456556 132.8017) (xy 173.738444 132.8017) (xy 173.738451 132.8017) + (xy 174.017942 132.764904) (xy 174.290239 132.691942) (xy 174.550683 132.584063) (xy 174.794817 132.443112) + (xy 175.018465 132.2715) (xy 175.2178 132.072165) (xy 175.389412 131.848517) (xy 175.530363 131.604383) + (xy 175.638242 131.343939) (xy 175.711204 131.071642) (xy 175.748 130.792151) (xy 175.748 130.510249) + (xy 175.711204 130.230758) (xy 175.638242 129.958461) (xy 175.63126 129.941606) (xy 175.606265 129.881261) + (xy 175.530363 129.698017) (xy 175.530361 129.698014) (xy 175.530359 129.698009) (xy 175.389416 129.45389) + (xy 175.389412 129.453883) (xy 175.378389 129.439518) (xy 175.286829 129.320195) (xy 175.261634 129.255026) + (xy 175.275672 129.186581) (xy 175.324486 129.136591) (xy 175.392577 129.120927) (xy 175.458327 129.144563) + (xy 175.472873 129.157015) (xy 176.049848 129.733834) (xy 176.425247 130.109132) (xy 176.426449 130.110333) + (xy 176.459943 130.171652) (xy 176.454968 130.241344) (xy 176.441886 130.266911) (xy 176.438611 130.271812) + (xy 176.438602 130.271828) (xy 176.378264 130.417498) (xy 176.378261 130.41751) (xy 176.3475 130.572153) + (xy 176.3475 130.729846) (xy 176.378261 130.884489) (xy 176.378264 130.884501) (xy 176.438602 131.030172) + (xy 176.438609 131.030185) (xy 176.52621 131.161288) (xy 176.526213 131.161292) (xy 176.637707 131.272786) + (xy 176.637711 131.272789) (xy 176.768814 131.36039) (xy 176.768827 131.360397) (xy 176.910679 131.419153) + (xy 176.914503 131.420737) (xy 177.069153 131.451499) (xy 177.069156 131.4515) (xy 177.069158 131.4515) + (xy 177.226844 131.4515) (xy 177.226845 131.451499) (xy 177.381497 131.420737) (xy 177.527179 131.360394) + (xy 177.658289 131.272789) (xy 177.769789 131.161289) (xy 177.800989 131.114595) (xy 177.811123 131.099429) + (xy 177.864735 131.054624) (xy 177.93406 131.045917) (xy 177.997088 131.076071) (xy 178.001906 131.080639) + (xy 178.533181 131.611914) (xy 178.566666 131.673237) (xy 178.5695 131.699595) (xy 178.5695 141.686443) + (xy 178.569498 141.729238) (xy 178.5695 141.729242) (xy 178.5695 141.729253) (xy 178.571534 141.734165) + (xy 178.571535 141.734169) (xy 178.583636 141.763381) (xy 178.586672 141.77071) (xy 178.587193 141.771966) + (xy 178.587195 141.771979) (xy 178.587198 141.771979) (xy 178.604127 141.812858) (xy 178.60413 141.812863) + (xy 178.627145 141.835878) (xy 178.627149 141.835885) (xy 178.627151 141.835884) (xy 184.560404 147.76989) + (xy 184.615165 147.824657) (xy 184.648646 147.885983) (xy 184.643657 147.955674) (xy 184.601782 148.011605) + (xy 184.536316 148.036018) (xy 184.468044 148.021161) (xy 184.451992 148.010709) (xy 184.319825 147.909294) + (xy 184.319818 147.909289) (xy 184.319817 147.909288) (xy 184.319812 147.909285) (xy 184.319809 147.909283) + (xy 184.07569 147.76834) (xy 184.075679 147.768335) (xy 183.815243 147.660459) (xy 183.542939 147.587495) + (xy 183.263458 147.5507) (xy 183.263451 147.5507) (xy 182.981549 147.5507) (xy 182.981541 147.5507) + (xy 182.70206 147.587495) (xy 182.429756 147.660459) (xy 182.16932 147.768335) (xy 182.169309 147.76834) + (xy 181.92519 147.909283) (xy 181.925182 147.909289) (xy 181.701529 148.080904) (xy 181.502204 148.280229) + (xy 181.330589 148.503882) (xy 181.330583 148.50389) (xy 181.18964 148.748009) (xy 181.189635 148.74802) + (xy 181.081759 149.008456) (xy 181.008795 149.28076) (xy 180.972 149.560241) (xy 180.972 149.842158) + (xy 181.008795 150.121639) (xy 181.081759 150.393943) (xy 181.189635 150.654379) (xy 181.18964 150.65439) + (xy 181.330583 150.898509) (xy 181.330588 150.898517) (xy 181.492887 151.110028) (xy 181.502204 151.12217) + (xy 181.701529 151.321495) (xy 181.701533 151.321498) (xy 181.701535 151.3215) (xy 181.925183 151.493112) + (xy 181.92519 151.493116) (xy 182.169309 151.634059) (xy 182.169314 151.634061) (xy 182.169317 151.634063) + (xy 182.429761 151.741942) (xy 182.702058 151.814904) (xy 182.981549 151.8517) (xy 182.981556 151.8517) + (xy 183.263444 151.8517) (xy 183.263451 151.8517) (xy 183.542942 151.814904) (xy 183.815239 151.741942) + (xy 184.075683 151.634063) (xy 184.319817 151.493112) (xy 184.543465 151.3215) (xy 184.7428 151.122165) + (xy 184.914412 150.898517) (xy 185.046509 150.669717) (xy 185.055359 150.65439) (xy 185.055359 150.654389) + (xy 185.055363 150.654383) (xy 185.163242 150.393939) (xy 185.236204 150.121642) (xy 185.273 149.842151) + (xy 185.273 149.560249) (xy 185.272457 149.556128) (xy 185.26079 149.467503) (xy 185.236204 149.280758) + (xy 185.163242 149.008461) (xy 185.15626 148.991606) (xy 185.131265 148.931261) (xy 185.055363 148.748017) + (xy 185.055361 148.748014) (xy 185.055359 148.748009) (xy 184.914416 148.50389) (xy 184.914412 148.503883) + (xy 184.864198 148.438443) (xy 184.813151 148.371917) (xy 184.787957 148.306748) (xy 184.801995 148.238303) + (xy 184.850809 148.188314) (xy 184.918901 148.17265) (xy 184.984651 148.196287) (xy 184.999212 148.208753) + (xy 185.404213 148.613806) (xy 185.950555 149.160217) (xy 185.984036 149.221543) (xy 185.979047 149.291234) + (xy 185.965978 149.316772) (xy 185.962612 149.321809) (xy 185.962602 149.321828) (xy 185.902264 149.467498) + (xy 185.902261 149.46751) (xy 185.8715 149.622153) (xy 185.8715 149.779846) (xy 185.902261 149.934489) + (xy 185.902264 149.934501) (xy 185.962602 150.080172) (xy 185.962609 150.080185) (xy 186.05021 150.211288) + (xy 186.050213 150.211292) (xy 186.161707 150.322786) (xy 186.161711 150.322789) (xy 186.292814 150.41039) + (xy 186.292827 150.410397) (xy 186.438498 150.470735) (xy 186.438503 150.470737) (xy 186.593153 150.501499) + (xy 186.593156 150.5015) (xy 186.593158 150.5015) (xy 186.750844 150.5015) (xy 186.750845 150.501499) + (xy 186.905497 150.470737) (xy 187.051179 150.410394) (xy 187.182289 150.322789) (xy 187.293789 150.211289) + (xy 187.335523 150.148828) (xy 187.389134 150.104025) (xy 187.458459 150.095317) (xy 187.521487 150.125471) + (xy 187.526306 150.130039) (xy 188.020181 150.623914) (xy 188.053666 150.685237) (xy 188.0565 150.711595) + (xy 188.0565 168.054924) (xy 188.052096 168.06992) (xy 188.052661 168.085539) (xy 188.042453 168.102759) + (xy 188.036815 168.121963) (xy 188.024524 168.133008) (xy 188.017035 168.145643) (xy 187.993942 168.16049) + (xy 187.988052 168.165784) (xy 187.98406 168.167784) (xy 187.904821 168.200606) (xy 187.863612 168.22814) + (xy 187.856693 168.231608) (xy 187.829614 168.236505) (xy 187.803353 168.244728) (xy 187.795723 168.242635) + (xy 187.787939 168.244043) (xy 187.762511 168.233523) (xy 187.735973 168.226243) (xy 187.730686 168.220357) + (xy 187.723376 168.217333) (xy 187.70767 168.194734) (xy 187.689283 168.174263) (xy 187.68658 168.168201) + (xy 187.660238 168.104606) (xy 187.571483 167.890332) (xy 187.51818 167.798009) (xy 187.4207 167.629168) + (xy 187.23712 167.389921) (xy 187.237114 167.389914) (xy 187.023885 167.176685) (xy 187.023878 167.176679) + (xy 186.784631 166.993099) (xy 186.523471 166.842318) (xy 186.523461 166.842314) (xy 186.24486 166.726913) + (xy 185.953566 166.648861) (xy 185.654593 166.609501) (xy 185.654588 166.6095) (xy 185.654583 166.6095) + (xy 185.353017 166.6095) (xy 185.353011 166.6095) (xy 185.353006 166.609501) (xy 185.054033 166.648861) + (xy 184.762739 166.726913) (xy 184.484138 166.842314) (xy 184.484128 166.842318) (xy 184.222968 166.993099) + (xy 183.983721 167.176679) (xy 183.983714 167.176685) (xy 183.770485 167.389914) (xy 183.770479 167.389921) + (xy 183.586899 167.629168) (xy 183.436118 167.890328) (xy 183.436114 167.890338) (xy 183.320713 168.168939) + (xy 183.242661 168.460233) (xy 183.203301 168.759206) (xy 183.2033 168.759223) (xy 183.2033 169.060776) + (xy 183.203301 169.060793) (xy 183.242661 169.359766) (xy 183.320713 169.65106) (xy 183.436114 169.929661) + (xy 183.436118 169.929671) (xy 183.586899 170.190831) (xy 183.770479 170.430078) (xy 183.770485 170.430085) + (xy 183.983714 170.643314) (xy 183.983721 170.64332) (xy 184.222968 170.8269) (xy 184.484128 170.977681) + (xy 184.484129 170.977681) (xy 184.484132 170.977683) (xy 184.643789 171.043815) (xy 184.762739 171.093086) + (xy 184.76274 171.093086) (xy 184.762742 171.093087) (xy 185.054032 171.171138) (xy 185.353017 171.2105) + (xy 185.353024 171.2105) (xy 185.654576 171.2105) (xy 185.654583 171.2105) (xy 185.953568 171.171138) + (xy 186.244858 171.093087) (xy 186.523468 170.977683) (xy 186.784632 170.8269) (xy 187.02388 170.643319) + (xy 187.237119 170.43008) (xy 187.4207 170.190832) (xy 187.571483 169.929668) (xy 187.68658 169.651798) + (xy 187.730421 169.597395) (xy 187.796715 169.57533) (xy 187.864414 169.592609) (xy 187.870032 169.596149) + (xy 187.904821 169.619394) (xy 187.904823 169.619395) (xy 187.904827 169.619397) (xy 188.029168 169.6709) + (xy 188.050503 169.679737) (xy 188.205153 169.710499) (xy 188.205156 169.7105) (xy 188.205158 169.7105) + (xy 188.362844 169.7105) (xy 188.362845 169.710499) (xy 188.517497 169.679737) (xy 188.660304 169.620585) + (xy 188.663172 169.619397) (xy 188.663172 169.619396) (xy 188.663179 169.619394) (xy 188.794289 169.531789) + (xy 188.905789 169.420289) (xy 188.993394 169.289179) (xy 189.053737 169.143497) (xy 189.0845 168.988842) + (xy 189.0845 168.831158) (xy 189.0845 168.831155) (xy 189.084499 168.831153) (xy 189.084238 168.829842) + (xy 189.053737 168.676503) (xy 189.048188 168.663106) (xy 188.993397 168.530827) (xy 188.99339 168.530814) + (xy 188.905789 168.399711) (xy 188.905786 168.399707) (xy 188.794292 168.288213) (xy 188.794288 168.28821) + (xy 188.663185 168.200609) (xy 188.663175 168.200604) (xy 188.588047 168.169485) (xy 188.533644 168.125644) + (xy 188.511579 168.05935) (xy 188.5115 168.054924) (xy 188.5115 150.520748) (xy 188.5115 150.520747) + (xy 188.476865 150.437132) (xy 188.412868 150.373135) (xy 187.412864 149.373131) (xy 187.385984 149.332902) + (xy 187.381397 149.321828) (xy 187.381396 149.321827) (xy 187.381394 149.321821) (xy 187.365282 149.297708) + (xy 187.293789 149.19071) (xy 187.182292 149.079213) (xy 187.182288 149.07921) (xy 187.051185 148.991609) + (xy 187.051175 148.991604) (xy 187.040096 148.987015) (xy 186.999868 148.960135) (xy 186.079869 148.040136) + (xy 186.069713 148.03335) (xy 186.070185 148.032643) (xy 186.043658 148.014916) (xy 179.388812 141.359093) + (xy 179.355332 141.297767) (xy 179.3525 141.271418) (xy 179.3525 131.251748) (xy 179.3525 131.251747) + (xy 179.317865 131.168132) (xy 179.253868 131.104135) (xy 174.358819 126.209086) (xy 174.325334 126.147763) + (xy 174.3225 126.121405) (xy 174.3225 111.666748) (xy 174.3225 111.666747) (xy 174.314677 111.647861) + (xy 174.314677 111.647859) (xy 174.287868 111.583137) (xy 174.287866 111.583132) (xy 164.647819 101.943085) + (xy 164.614334 101.881762) (xy 164.6115 101.855404) (xy 164.6115 92.410241) (xy 176.157 92.410241) + (xy 176.157 92.692158) (xy 176.193795 92.971639) (xy 176.266759 93.243943) (xy 176.374635 93.504379) + (xy 176.37464 93.50439) (xy 176.515583 93.748509) (xy 176.515588 93.748517) (xy 176.6872 93.972165) + (xy 176.687204 93.97217) (xy 176.886529 94.171495) (xy 176.886533 94.171498) (xy 176.886535 94.1715) + (xy 177.110183 94.343112) (xy 177.11019 94.343116) (xy 177.354309 94.484059) (xy 177.354314 94.484061) + (xy 177.354317 94.484063) (xy 177.614761 94.591942) (xy 177.887058 94.664904) (xy 178.166549 94.7017) + (xy 178.166556 94.7017) (xy 178.448444 94.7017) (xy 178.448451 94.7017) (xy 178.727942 94.664904) + (xy 179.000239 94.591942) (xy 179.260683 94.484063) (xy 179.504817 94.343112) (xy 179.728465 94.1715) + (xy 179.9278 93.972165) (xy 180.099412 93.748517) (xy 180.240363 93.504383) (xy 180.348242 93.243939) + (xy 180.421204 92.971642) (xy 180.458 92.692151) (xy 180.458 92.410249) (xy 180.421204 92.130758) + (xy 180.348242 91.858461) (xy 180.341342 91.841804) (xy 180.316349 91.781464) (xy 180.240363 91.598017) + (xy 180.240361 91.598014) (xy 180.240359 91.598009) (xy 180.099416 91.35389) (xy 180.099412 91.353883) + (xy 179.9278 91.130235) (xy 179.927798 91.130233) (xy 179.927795 91.130229) (xy 179.72847 90.930904) + (xy 179.728465 90.9309) (xy 179.504817 90.759288) (xy 179.504811 90.759284) (xy 179.504809 90.759283) + (xy 179.26069 90.61834) (xy 179.260679 90.618335) (xy 179.000243 90.510459) (xy 178.727939 90.437495) + (xy 178.448458 90.4007) (xy 178.448451 90.4007) (xy 178.166549 90.4007) (xy 178.166541 90.4007) + (xy 177.88706 90.437495) (xy 177.614756 90.510459) (xy 177.35432 90.618335) (xy 177.354309 90.61834) + (xy 177.11019 90.759283) (xy 177.110184 90.759287) (xy 177.110183 90.759288) (xy 177.074557 90.786625) + (xy 176.886529 90.930904) (xy 176.687204 91.130229) (xy 176.617704 91.220803) (xy 176.526612 91.339517) + (xy 176.515589 91.353882) (xy 176.515583 91.35389) (xy 176.37464 91.598009) (xy 176.374635 91.59802) + (xy 176.266759 91.858456) (xy 176.193795 92.13076) (xy 176.157 92.410241) (xy 164.6115 92.410241) + (xy 164.6115 90.71922) (xy 164.631185 90.652181) (xy 164.647826 90.631531) (xy 165.705901 89.573707) + (xy 165.767228 89.540231) (xy 165.793572 89.5374) (xy 184.250432 89.5374) (xy 184.317471 89.557085) + (xy 184.363226 89.609889) (xy 184.37317 89.679047) (xy 184.344145 89.742603) (xy 184.338122 89.749071) + (xy 183.857122 90.230122) (xy 182.301722 91.78568) (xy 182.2404 91.819168) (xy 182.170708 91.814187) + (xy 182.166584 91.812564) (xy 182.091501 91.781464) (xy 182.091489 91.781461) (xy 181.936845 91.7507) + (xy 181.936842 91.7507) (xy 181.779158 91.7507) (xy 181.779155 91.7507) (xy 181.62451 91.781461) + (xy 181.624498 91.781464) (xy 181.478827 91.841802) (xy 181.478814 91.841809) (xy 181.347711 91.92941) + (xy 181.347707 91.929413) (xy 181.236213 92.040907) (xy 181.23621 92.040911) (xy 181.148609 92.172014) + (xy 181.148602 92.172027) (xy 181.088264 92.317698) (xy 181.088261 92.31771) (xy 181.0575 92.472353) + (xy 181.0575 92.630046) (xy 181.088261 92.784689) (xy 181.088264 92.784701) (xy 181.148602 92.930372) + (xy 181.148609 92.930385) (xy 181.23621 93.061488) (xy 181.236213 93.061492) (xy 181.347707 93.172986) + (xy 181.347711 93.172989) (xy 181.478814 93.26059) (xy 181.478827 93.260597) (xy 181.574499 93.300225) + (xy 181.624503 93.320937) (xy 181.779153 93.351699) (xy 181.779156 93.3517) (xy 181.779158 93.3517) + (xy 181.936844 93.3517) (xy 181.936845 93.351699) (xy 182.091497 93.320937) (xy 182.237179 93.260594) + (xy 182.368289 93.172989) (xy 182.479789 93.061489) (xy 182.509397 93.017176) (xy 182.563009 92.972371) + (xy 182.632334 92.963664) (xy 182.695362 92.993818) (xy 182.732082 93.053261) (xy 182.7365 93.086067) + (xy 182.7365 102.228809) (xy 182.716815 102.295848) (xy 182.664011 102.341603) (xy 182.594853 102.351547) + (xy 182.531297 102.322522) (xy 182.524819 102.31649) (xy 182.436542 102.228213) (xy 182.436538 102.22821) + (xy 182.305435 102.140609) (xy 182.305422 102.140602) (xy 182.159751 102.080264) (xy 182.159739 102.080261) + (xy 182.005095 102.0495) (xy 182.005092 102.0495) (xy 181.847408 102.0495) (xy 181.847405 102.0495) + (xy 181.69276 102.080261) (xy 181.692753 102.080263) (xy 181.617618 102.111384) (xy 181.548149 102.118851) + (xy 181.48567 102.087576) (xy 181.482486 102.084503) (xy 180.58382 101.185836) (xy 180.583781 101.18582) + (xy 180.500203 101.1512) (xy 179.513875 101.1512) (xy 179.446836 101.131515) (xy 179.401081 101.078711) + (xy 179.399334 101.0747) (xy 179.368194 100.999521) (xy 179.368192 100.999518) (xy 179.36819 100.999514) + (xy 179.280589 100.868411) (xy 179.280586 100.868407) (xy 179.169092 100.756913) (xy 179.169088 100.75691) + (xy 179.037985 100.669309) (xy 179.037972 100.669302) (xy 178.892301 100.608964) (xy 178.892289 100.608961) + (xy 178.737645 100.5782) (xy 178.737642 100.5782) (xy 178.579958 100.5782) (xy 178.579955 100.5782) + (xy 178.42531 100.608961) (xy 178.425298 100.608964) (xy 178.311871 100.655947) (xy 178.242402 100.663416) + (xy 178.179923 100.63214) (xy 178.153388 100.596595) (xy 178.145822 100.58138) (xy 178.087918 100.46493) + (xy 177.990478 100.335001) (xy 177.978362 100.318845) (xy 177.974236 100.315037) (xy 177.844169 100.195004) + (xy 177.844166 100.195002) (xy 177.844165 100.195001) (xy 177.844162 100.194999) (xy 177.689777 100.097501) + (xy 177.520287 100.029558) (xy 177.520277 100.029556) (xy 177.341292 99.993418) (xy 177.341299 99.993418) + (xy 177.169594 99.990465) (xy 177.158718 99.990278) (xy 177.158717 99.990278) (xy 177.158714 99.990278) + (xy 176.978597 100.020238) (xy 176.978584 100.020241) (xy 176.806863 100.082313) (xy 176.792348 100.09077) + (xy 176.792263 100.090819) (xy 176.785176 100.09494) (xy 176.78493 100.095008) (xy 176.757138 100.111244) + (xy 176.75689 100.111389) (xy 176.754163 100.112059) (xy 176.694546 100.128196) (xy 176.654201 100.128193) + (xy 176.654097 100.1282) (xy 175.213396 100.1282) (xy 175.205214 100.128198) (xy 175.205192 100.128193) + (xy 175.175265 100.128195) (xy 175.173028 100.128195) (xy 175.172746 100.128112) (xy 175.110493 100.111262) + (xy 175.082671 100.095008) (xy 175.076605 100.091464) (xy 175.074907 100.090617) (xy 175.067557 100.086334) + (xy 175.060721 100.08235) (xy 174.888997 100.020278) (xy 174.888991 100.020277) (xy 174.708881 99.990319) + (xy 174.708878 99.990319) (xy 174.700339 99.990465) (xy 174.526307 99.993459) (xy 174.347334 100.029594) + (xy 174.347323 100.029597) (xy 174.177842 100.097537) (xy 174.177841 100.097537) (xy 174.023461 100.195032) + (xy 174.023458 100.195034) (xy 173.889267 100.318873) (xy 173.779715 100.464954) (xy 173.69842 100.628444) + (xy 173.698419 100.628447) (xy 173.698418 100.62845) (xy 173.676378 100.705264) (xy 173.648058 100.803965) + (xy 173.630304 100.985691) (xy 173.630304 100.985693) (xy 173.631477 100.999514) (xy 173.645596 101.165947) + (xy 173.64574 101.167635) (xy 173.681101 101.297085) (xy 173.693856 101.343778) (xy 173.69386 101.343788) + (xy 173.701098 101.35887) (xy 173.70114 101.358956) (xy 173.704723 101.366438) (xy 173.704781 101.36674) + (xy 173.721136 101.400706) (xy 173.721281 101.4016) (xy 173.733301 101.454269) (xy 173.733301 102.803122) + (xy 173.721107 102.856745) (xy 173.720519 102.857971) (xy 173.720439 102.858138) (xy 173.701566 102.897337) + (xy 173.701242 102.898139) (xy 173.693818 102.91361) (xy 173.645701 103.089754) (xy 173.645701 103.089756) + (xy 173.63159 103.256085) (xy 173.630563 103.268199) (xy 173.630265 103.271706) (xy 173.647839 103.451586) + (xy 173.648021 103.453442) (xy 173.669739 103.529135) (xy 173.69838 103.628961) (xy 173.77968 103.792463) + (xy 173.779681 103.792465) (xy 173.779683 103.792468) (xy 173.83321 103.863842) (xy 173.889238 103.938552) + (xy 173.889239 103.938553) (xy 173.88924 103.938554) (xy 174.023432 104.062395) (xy 174.177825 104.159897) + (xy 174.308693 104.212357) (xy 174.347314 104.227839) (xy 174.347315 104.227839) (xy 174.347317 104.22784) + (xy 174.526308 104.263979) (xy 174.526302 104.263979) (xy 174.542622 104.264259) (xy 174.708884 104.26712) + (xy 174.889012 104.237158) (xy 174.957598 104.212366) (xy 175.060736 104.175085) (xy 175.060737 104.175083) + (xy 175.06074 104.175083) (xy 175.075775 104.16632) (xy 175.082459 104.162435) (xy 175.08275 104.162357) + (xy 175.110633 104.14606) (xy 175.110751 104.145992) (xy 175.113968 104.145201) (xy 175.173062 104.129199) + (xy 176.654192 104.129199) (xy 176.654314 104.129206) (xy 176.662405 104.129205) (xy 176.662408 104.129206) + (xy 176.694542 104.129202) (xy 176.757104 104.146134) (xy 176.78493 104.162391) (xy 176.784932 104.162391) + (xy 176.79108 104.165983) (xy 176.792735 104.166808) (xy 176.806878 104.17505) (xy 176.9786 104.237121) + (xy 177.158721 104.267082) (xy 177.338398 104.26399) (xy 177.341291 104.263941) (xy 177.520266 104.227805) + (xy 177.520269 104.227803) (xy 177.520274 104.227803) (xy 177.68976 104.159862) (xy 177.844146 104.062363) + (xy 177.848274 104.058554) (xy 177.97833 103.93853) (xy 177.978332 103.938528) (xy 177.982877 103.932468) + (xy 178.087885 103.792447) (xy 178.169184 103.628948) (xy 178.219542 103.453433) (xy 178.237297 103.271703) + (xy 178.22186 103.08976) (xy 178.221858 103.089754) (xy 178.207566 103.037433) (xy 178.173743 102.913618) + (xy 178.166103 102.897698) (xy 178.162896 102.891004) (xy 178.162848 102.890746) (xy 178.146471 102.856719) + (xy 178.146343 102.85593) (xy 178.134302 102.803131) (xy 178.134306 102.771153) (xy 178.134307 102.765708) + (xy 178.134306 102.765704) (xy 178.134307 102.757698) (xy 178.134299 102.75756) (xy 178.134299 102.213478) + (xy 178.153984 102.146439) (xy 178.206788 102.100684) (xy 178.275946 102.09074) (xy 178.305746 102.098915) + (xy 178.425303 102.148437) (xy 178.579953 102.179199) (xy 178.579956 102.1792) (xy 178.579958 102.1792) + (xy 178.737644 102.1792) (xy 178.737645 102.179199) (xy 178.892297 102.148437) (xy 179.016987 102.096789) + (xy 179.037972 102.088097) (xy 179.037972 102.088096) (xy 179.037979 102.088094) (xy 179.169089 102.000489) + (xy 179.280589 101.888989) (xy 179.368194 101.757879) (xy 179.399315 101.682745) (xy 179.443154 101.628344) + (xy 179.509448 101.606279) (xy 179.513875 101.6062) (xy 180.309355 101.6062) (xy 180.376394 101.625885) + (xy 180.397036 101.642519) (xy 181.160753 102.406236) (xy 181.194238 102.467559) (xy 181.189254 102.537251) + (xy 181.187634 102.541368) (xy 181.156513 102.616503) (xy 181.156511 102.61651) (xy 181.12575 102.771153) + (xy 181.12575 102.928846) (xy 181.156511 103.083489) (xy 181.156514 103.083501) (xy 181.216852 103.229172) + (xy 181.216859 103.229185) (xy 181.30446 103.360288) (xy 181.304463 103.360292) (xy 181.415957 103.471786) + (xy 181.415961 103.471789) (xy 181.547064 103.55939) (xy 181.547077 103.559397) (xy 181.687927 103.617738) + (xy 181.692753 103.619737) (xy 181.847403 103.650499) (xy 181.847406 103.6505) (xy 181.847408 103.6505) + (xy 182.005094 103.6505) (xy 182.005095 103.650499) (xy 182.159747 103.619737) (xy 182.294686 103.563844) + (xy 182.305422 103.559397) (xy 182.305422 103.559396) (xy 182.305429 103.559394) (xy 182.436539 103.471789) + (xy 182.548039 103.360289) (xy 182.576344 103.317927) (xy 182.594079 103.291386) (xy 182.647691 103.246581) + (xy 182.717016 103.237874) (xy 182.780044 103.268028) (xy 182.784862 103.272596) (xy 188.982685 109.470418) + (xy 189.01617 109.531741) (xy 189.011186 109.601433) (xy 188.969314 109.657366) (xy 188.90385 109.681783) + (xy 188.84202 109.669677) (xy 188.841933 109.66989) (xy 188.840882 109.669454) (xy 188.840168 109.669315) + (xy 188.838188 109.668338) (xy 188.577743 109.560459) (xy 188.305439 109.487495) (xy 188.025958 109.4507) + (xy 188.025951 109.4507) (xy 187.744049 109.4507) (xy 187.744041 109.4507) (xy 187.46456 109.487495) + (xy 187.192256 109.560459) (xy 186.93182 109.668335) (xy 186.931809 109.66834) (xy 186.68769 109.809283) + (xy 186.687684 109.809287) (xy 186.687683 109.809288) (xy 186.640169 109.845747) (xy 186.464029 109.980904) + (xy 186.264704 110.180229) (xy 186.151381 110.327914) (xy 186.104327 110.389237) (xy 186.093089 110.403882) + (xy 186.093083 110.40389) (xy 185.95214 110.648009) (xy 185.952135 110.64802) (xy 185.844259 110.908456) + (xy 185.771295 111.18076) (xy 185.7345 111.460241) (xy 185.7345 111.742158) (xy 185.771295 112.021639) + (xy 185.844259 112.293943) (xy 185.952135 112.554379) (xy 185.95214 112.55439) (xy 186.093083 112.798509) + (xy 186.093088 112.798517) (xy 186.211074 112.952278) (xy 186.264704 113.02217) (xy 186.464029 113.221495) + (xy 186.464033 113.221498) (xy 186.464035 113.2215) (xy 186.687683 113.393112) (xy 186.68769 113.393116) + (xy 186.931809 113.534059) (xy 186.931814 113.534061) (xy 186.931817 113.534063) (xy 187.039834 113.578805) + (xy 187.157486 113.627538) (xy 187.192261 113.641942) (xy 187.464558 113.714904) (xy 187.550989 113.726282) + (xy 187.614884 113.754548) (xy 187.653356 113.812872) (xy 187.654188 113.882737) (xy 187.637906 113.918111) + (xy 187.566608 114.024816) (xy 187.566602 114.024827) (xy 187.506264 114.170498) (xy 187.506261 114.17051) + (xy 187.4755 114.325153) (xy 187.4755 114.482846) (xy 187.506261 114.637489) (xy 187.506264 114.637501) + (xy 187.566602 114.783172) (xy 187.566609 114.783185) (xy 187.65421 114.914288) (xy 187.654213 114.914292) + (xy 187.765707 115.025786) (xy 187.765711 115.025789) (xy 187.896814 115.11339) (xy 187.896818 115.113392) + (xy 187.896821 115.113394) (xy 187.971954 115.144515) (xy 188.026356 115.188354) (xy 188.048421 115.254648) + (xy 188.0485 115.259075) (xy 188.0485 130.172004) (xy 188.048496 130.212229) (xy 188.0485 130.212238) + (xy 188.0485 130.212253) (xy 188.050316 130.216639) (xy 188.050317 130.216643) (xy 188.066142 130.254845) + (xy 188.066148 130.254859) (xy 188.083121 130.295848) (xy 188.083135 130.295869) (xy 188.111013 130.323746) + (xy 188.111023 130.323756) (xy 191.538781 133.752223) (xy 191.57226 133.813549) (xy 191.567268 133.883241) + (xy 191.525391 133.93917) (xy 191.459924 133.96358) (xy 191.391653 133.948721) (xy 191.375605 133.938271) + (xy 191.329267 133.902715) (xy 191.329265 133.902713) (xy 191.329259 133.902709) (xy 191.329254 133.902706) + (xy 191.329251 133.902704) (xy 191.080148 133.758883) (xy 191.080131 133.758875) (xy 190.814378 133.648797) + (xy 190.536523 133.574346) (xy 190.251338 133.536801) (xy 190.251335 133.5368) (xy 190.251329 133.5368) + (xy 189.963671 133.5368) (xy 189.963665 133.5368) (xy 189.963661 133.536801) (xy 189.678476 133.574346) + (xy 189.400621 133.648797) (xy 189.134868 133.758875) (xy 189.134851 133.758883) (xy 188.885748 133.902704) + (xy 188.885732 133.902715) (xy 188.657528 134.077821) (xy 188.657521 134.077827) (xy 188.454127 134.281221) + (xy 188.38293 134.374007) (xy 188.326501 134.415209) (xy 188.256755 134.419364) (xy 188.195835 134.385151) + (xy 188.163083 134.323434) (xy 188.168896 134.253807) (xy 188.177161 134.236531) (xy 188.230363 134.144383) + (xy 188.338242 133.883939) (xy 188.411204 133.611642) (xy 188.448 133.332151) (xy 188.448 133.050249) + (xy 188.411204 132.770758) (xy 188.338242 132.498461) (xy 188.33126 132.481606) (xy 188.309309 132.428611) + (xy 188.230363 132.238017) (xy 188.230361 132.238014) (xy 188.230359 132.238009) (xy 188.089416 131.99389) + (xy 188.089412 131.993883) (xy 187.9178 131.770235) (xy 187.917798 131.770233) (xy 187.917795 131.770229) + (xy 187.71847 131.570904) (xy 187.619871 131.495246) (xy 187.494817 131.399288) (xy 187.494811 131.399284) + (xy 187.494809 131.399283) (xy 187.25069 131.25834) (xy 187.250679 131.258335) (xy 186.990243 131.150459) + (xy 186.717939 131.077495) (xy 186.438458 131.0407) (xy 186.438451 131.0407) (xy 186.156549 131.0407) + (xy 186.156541 131.0407) (xy 185.87706 131.077495) (xy 185.604756 131.150459) (xy 185.34432 131.258335) + (xy 185.344309 131.25834) (xy 185.10019 131.399283) (xy 185.100182 131.399289) (xy 184.876529 131.570904) + (xy 184.677204 131.770229) (xy 184.505589 131.993882) (xy 184.505583 131.99389) (xy 184.36464 132.238009) + (xy 184.364635 132.23802) (xy 184.256759 132.498456) (xy 184.183795 132.770761) (xy 184.172615 132.855686) + (xy 184.144348 132.919582) (xy 184.086024 132.958053) (xy 184.049676 132.9635) (xy 183.603075 132.9635) + (xy 183.536036 132.943815) (xy 183.490281 132.891011) (xy 183.488534 132.887) (xy 183.457394 132.811821) + (xy 183.457392 132.811818) (xy 183.45739 132.811814) (xy 183.369789 132.680711) (xy 183.369786 132.680707) + (xy 183.258292 132.569213) (xy 183.258288 132.56921) (xy 183.127185 132.481609) (xy 183.127172 132.481602) + (xy 182.981501 132.421264) (xy 182.981489 132.421261) (xy 182.826845 132.3905) (xy 182.826842 132.3905) + (xy 182.669158 132.3905) (xy 182.669155 132.3905) (xy 182.51451 132.421261) (xy 182.514498 132.421264) + (xy 182.439279 132.452421) (xy 182.36981 132.45989) (xy 182.307331 132.428614) (xy 182.30417 132.425564) + (xy 179.456068 129.578059) (xy 178.248828 128.371072) (xy 178.215337 128.309753) (xy 178.2125 128.283382) + (xy 178.2125 122.432106) (xy 183.015365 122.432106) (xy 183.031576 122.598035) (xy 183.033121 122.613842) + (xy 183.052506 122.681404) (xy 183.08348 122.789361) (xy 183.16478 122.952863) (xy 183.164781 122.952865) + (xy 183.164783 122.952868) (xy 183.177866 122.970313) (xy 183.274338 123.098952) (xy 183.274339 123.098953) + (xy 183.27434 123.098954) (xy 183.408532 123.222795) (xy 183.562925 123.320297) (xy 183.698077 123.374474) + (xy 183.732414 123.388239) (xy 183.732415 123.388239) (xy 183.732417 123.38824) (xy 183.911408 123.424379) + (xy 183.911402 123.424379) (xy 183.927722 123.424659) (xy 184.093984 123.42752) (xy 184.274112 123.397558) + (xy 184.381061 123.358899) (xy 184.445836 123.335485) (xy 184.445837 123.335483) (xy 184.44584 123.335483) + (xy 184.460875 123.32672) (xy 184.467559 123.322835) (xy 184.46785 123.322757) (xy 184.495733 123.30646) + (xy 184.495851 123.306392) (xy 184.499068 123.305601) (xy 184.558162 123.289599) (xy 186.039292 123.289599) + (xy 186.039414 123.289606) (xy 186.047505 123.289605) (xy 186.047508 123.289606) (xy 186.079642 123.289602) + (xy 186.142204 123.306534) (xy 186.17003 123.322791) (xy 186.170032 123.322791) (xy 186.17618 123.326383) + (xy 186.177835 123.327208) (xy 186.191978 123.33545) (xy 186.3637 123.397521) (xy 186.543821 123.427482) + (xy 186.723498 123.42439) (xy 186.726391 123.424341) (xy 186.905366 123.388205) (xy 186.905369 123.388203) + (xy 186.905374 123.388203) (xy 187.07486 123.320262) (xy 187.229246 123.222763) (xy 187.239905 123.212927) + (xy 187.36343 123.09893) (xy 187.363432 123.098928) (xy 187.376272 123.081807) (xy 187.472985 122.952847) + (xy 187.554284 122.789348) (xy 187.604642 122.613833) (xy 187.622397 122.432103) (xy 187.60696 122.25016) + (xy 187.606958 122.250154) (xy 187.595392 122.207814) (xy 187.558843 122.074018) (xy 187.551083 122.057849) + (xy 187.547996 122.051404) (xy 187.547948 122.051146) (xy 187.531571 122.017119) (xy 187.531443 122.01633) + (xy 187.519402 121.963531) (xy 187.519402 121.963522) (xy 187.519407 121.926108) (xy 187.519406 121.926104) + (xy 187.519407 121.918098) (xy 187.519399 121.91796) (xy 187.519399 120.614677) (xy 187.522054 120.603008) + (xy 187.52102 120.594694) (xy 187.531605 120.561028) (xy 187.537911 120.54789) (xy 187.547974 120.526974) + (xy 187.547974 120.526969) (xy 187.55136 120.519933) (xy 187.551525 120.519522) (xy 187.551646 120.51927) + (xy 187.558883 120.504191) (xy 187.607 120.328042) (xy 187.622437 120.146093) (xy 187.604681 119.964355) + (xy 187.55432 119.788834) (xy 187.473018 119.62533) (xy 187.378575 119.499397) (xy 187.363462 119.479245) + (xy 187.295159 119.416211) (xy 187.229269 119.355404) (xy 187.229266 119.355402) (xy 187.229265 119.355401) + (xy 187.229262 119.355399) (xy 187.074877 119.257901) (xy 186.905387 119.189958) (xy 186.905377 119.189956) + (xy 186.726392 119.153818) (xy 186.726399 119.153818) (xy 186.554694 119.150865) (xy 186.543818 119.150678) + (xy 186.543817 119.150678) (xy 186.543814 119.150678) (xy 186.363697 119.180638) (xy 186.363684 119.180641) + (xy 186.191963 119.242713) (xy 186.177448 119.25117) (xy 186.177363 119.251219) (xy 186.170276 119.25534) + (xy 186.17003 119.255408) (xy 186.142238 119.271644) (xy 186.14199 119.271789) (xy 186.139263 119.272459) + (xy 186.079646 119.288596) (xy 186.039301 119.288593) (xy 186.039197 119.2886) (xy 184.598496 119.2886) + (xy 184.590314 119.288598) (xy 184.590292 119.288593) (xy 184.560365 119.288595) (xy 184.558128 119.288595) + (xy 184.557846 119.288512) (xy 184.495593 119.271662) (xy 184.467771 119.255408) (xy 184.461705 119.251864) + (xy 184.460007 119.251017) (xy 184.452657 119.246734) (xy 184.445821 119.24275) (xy 184.274097 119.180678) + (xy 184.274091 119.180677) (xy 184.093981 119.150719) (xy 184.093978 119.150719) (xy 184.085439 119.150865) + (xy 183.911407 119.153859) (xy 183.732434 119.189994) (xy 183.732423 119.189997) (xy 183.562942 119.257937) + (xy 183.562941 119.257937) (xy 183.408561 119.355432) (xy 183.408558 119.355434) (xy 183.274367 119.479273) + (xy 183.164815 119.625354) (xy 183.08352 119.788844) (xy 183.083519 119.788847) (xy 183.083518 119.78885) + (xy 183.066645 119.847658) (xy 183.033158 119.964365) (xy 183.019378 120.105413) (xy 183.015404 120.146093) + (xy 183.016583 120.159989) (xy 183.030679 120.326147) (xy 183.03084 120.328035) (xy 183.055548 120.418484) + (xy 183.078956 120.504178) (xy 183.07896 120.504188) (xy 183.086198 120.51927) (xy 183.08624 120.519356) + (xy 183.089823 120.526838) (xy 183.089881 120.52714) (xy 183.106197 120.561025) (xy 183.106236 120.561106) + (xy 183.106381 120.562) (xy 183.118401 120.614669) (xy 183.118401 121.963522) (xy 183.106207 122.017145) + (xy 183.105619 122.018371) (xy 183.105539 122.018538) (xy 183.086666 122.057737) (xy 183.086342 122.058539) + (xy 183.078918 122.07401) (xy 183.030801 122.250154) (xy 183.030801 122.250156) (xy 183.015365 122.432106) + (xy 178.2125 122.432106) (xy 178.2125 116.59655) (xy 179.1895 116.59655) (xy 179.1895 116.765849) + (xy 179.215981 116.933047) (xy 179.268296 117.094053) (xy 179.345152 117.244888) (xy 179.444648 117.381834) + (xy 179.444651 117.381838) (xy 179.56436 117.501547) (xy 179.564365 117.501551) (xy 179.644244 117.559586) + (xy 179.701315 117.60105) (xy 179.797425 117.65002) (xy 179.852146 117.677903) (xy 179.852148 117.677903) + (xy 179.852151 117.677905) (xy 179.93845 117.705945) (xy 180.013152 117.730218) (xy 180.180351 117.7567) + (xy 180.180356 117.7567) (xy 180.349649 117.7567) (xy 180.516847 117.730218) (xy 180.677849 117.677905) + (xy 180.828685 117.60105) (xy 180.965641 117.501546) (xy 181.085346 117.381841) (xy 181.085346 117.38184) + (xy 181.085349 117.381838) (xy 181.085351 117.381834) (xy 181.106179 117.353167) (xy 181.18485 117.244885) + (xy 181.261705 117.094049) (xy 181.314018 116.933047) (xy 181.3405 116.765849) (xy 181.3405 116.59655) + (xy 181.314928 116.435098) (xy 181.323882 116.365805) (xy 181.368879 116.312353) (xy 181.43563 116.291713) + (xy 181.437401 116.2917) (xy 181.675944 116.2917) (xy 181.675951 116.2917) (xy 181.955442 116.254904) + (xy 182.227739 116.181942) (xy 182.488183 116.074063) (xy 182.732317 115.933112) (xy 182.955965 115.7615) + (xy 183.1553 115.562165) (xy 183.222992 115.473946) (xy 183.27942 115.432744) (xy 183.349166 115.428589) + (xy 183.410086 115.462801) (xy 183.442839 115.524518) (xy 183.437026 115.594146) (xy 183.428755 115.611433) + (xy 183.372683 115.708551) (xy 183.372675 115.708568) (xy 183.262597 115.974321) (xy 183.188146 116.252176) + (xy 183.150601 116.537361) (xy 183.1506 116.537377) (xy 183.1506 116.825022) (xy 183.150601 116.825038) + (xy 183.188146 117.110223) (xy 183.262597 117.388078) (xy 183.372675 117.653831) (xy 183.372683 117.653848) + (xy 183.516504 117.902951) (xy 183.516515 117.902967) (xy 183.691621 118.131171) (xy 183.691627 118.131178) + (xy 183.895021 118.334572) (xy 183.895027 118.334577) (xy 184.123241 118.509691) (xy 184.123248 118.509695) + (xy 184.372351 118.653516) (xy 184.372356 118.653518) (xy 184.372359 118.65352) (xy 184.372363 118.653521) + (xy 184.372368 118.653524) (xy 184.419808 118.673174) (xy 184.63812 118.763602) (xy 184.915975 118.838053) + (xy 185.201171 118.8756) (xy 185.201178 118.8756) (xy 185.488822 118.8756) (xy 185.488829 118.8756) + (xy 185.774025 118.838053) (xy 186.05188 118.763602) (xy 186.317641 118.65352) (xy 186.320056 118.652126) + (xy 186.434067 118.586301) (xy 186.566759 118.509691) (xy 186.794973 118.334577) (xy 186.998377 118.131173) + (xy 187.173491 117.902959) (xy 187.31732 117.653841) (xy 187.427402 117.38808) (xy 187.501853 117.110225) + (xy 187.5394 116.825029) (xy 187.5394 116.537371) (xy 187.501853 116.252175) (xy 187.427402 115.97432) + (xy 187.339705 115.762601) (xy 187.317324 115.708568) (xy 187.317316 115.708551) (xy 187.173495 115.459448) + (xy 187.173491 115.459441) (xy 187.032073 115.275141) (xy 186.998378 115.231228) (xy 186.998372 115.231221) + (xy 186.794978 115.027827) (xy 186.794971 115.027821) (xy 186.566767 114.852715) (xy 186.566765 114.852713) + (xy 186.566759 114.852709) (xy 186.566754 114.852706) (xy 186.566751 114.852704) (xy 186.317648 114.708883) + (xy 186.317631 114.708875) (xy 186.051878 114.598797) (xy 185.774023 114.524346) (xy 185.488838 114.486801) + (xy 185.488835 114.4868) (xy 185.488829 114.4868) (xy 185.201171 114.4868) (xy 185.201165 114.4868) + (xy 185.201161 114.486801) (xy 184.915976 114.524346) (xy 184.638121 114.598797) (xy 184.372368 114.708875) + (xy 184.372351 114.708883) (xy 184.123248 114.852704) (xy 184.123232 114.852715) (xy 183.895028 115.027821) + (xy 183.895021 115.027827) (xy 183.691627 115.231221) (xy 183.62043 115.324007) (xy 183.564001 115.365209) + (xy 183.494255 115.369364) (xy 183.433335 115.335151) (xy 183.400583 115.273434) (xy 183.406396 115.203807) + (xy 183.414661 115.186531) (xy 183.467863 115.094383) (xy 183.575742 114.833939) (xy 183.648704 114.561642) + (xy 183.6855 114.282151) (xy 183.6855 114.000249) (xy 183.648704 113.720758) (xy 183.575742 113.448461) + (xy 183.56876 113.431606) (xy 183.543765 113.371261) (xy 183.467863 113.188017) (xy 183.467861 113.188014) + (xy 183.467859 113.188009) (xy 183.326916 112.94389) (xy 183.326912 112.943883) (xy 183.1553 112.720235) + (xy 183.155298 112.720233) (xy 183.155295 112.720229) (xy 182.95597 112.520904) (xy 182.931161 112.501867) + (xy 182.732317 112.349288) (xy 182.732311 112.349284) (xy 182.732309 112.349283) (xy 182.48819 112.20834) + (xy 182.488179 112.208335) (xy 182.227743 112.100459) (xy 181.955439 112.027495) (xy 181.675958 111.9907) + (xy 181.675951 111.9907) (xy 181.394049 111.9907) (xy 181.394041 111.9907) (xy 181.11456 112.027495) + (xy 180.842256 112.100459) (xy 180.58182 112.208335) (xy 180.581809 112.20834) (xy 180.33769 112.349283) + (xy 180.337682 112.349289) (xy 180.114029 112.520904) (xy 179.914704 112.720229) (xy 179.743089 112.943882) + (xy 179.743083 112.94389) (xy 179.60214 113.188009) (xy 179.602135 113.18802) (xy 179.494259 113.448456) + (xy 179.421295 113.72076) (xy 179.3845 114.000241) (xy 179.3845 114.282158) (xy 179.421295 114.561639) + (xy 179.494259 114.833943) (xy 179.602135 115.094379) (xy 179.60214 115.09439) (xy 179.743083 115.338509) + (xy 179.743094 115.338525) (xy 179.873838 115.508914) (xy 179.899032 115.574083) (xy 179.884994 115.642528) + (xy 179.83618 115.692517) (xy 179.831758 115.694884) (xy 179.701313 115.76135) (xy 179.564365 115.860848) + (xy 179.56436 115.860852) (xy 179.444652 115.98056) (xy 179.444648 115.980565) (xy 179.345152 116.117511) + (xy 179.268296 116.268346) (xy 179.215981 116.429352) (xy 179.1895 116.59655) (xy 178.2125 116.59655) + (xy 178.2125 114.996075) (xy 178.232185 114.929036) (xy 178.284989 114.883281) (xy 178.288999 114.881534) + (xy 178.364179 114.850394) (xy 178.495289 114.762789) (xy 178.606789 114.651289) (xy 178.694394 114.520179) + (xy 178.754737 114.374497) (xy 178.7855 114.219842) (xy 178.7855 114.062158) (xy 178.7855 114.062155) + (xy 178.785499 114.062153) (xy 178.773556 114.002113) (xy 178.754737 113.907503) (xy 178.727278 113.841211) + (xy 178.694397 113.761827) (xy 178.69439 113.761814) (xy 178.606789 113.630711) (xy 178.606786 113.630707) + (xy 178.495292 113.519213) (xy 178.495288 113.51921) (xy 178.364185 113.431609) (xy 178.364172 113.431602) + (xy 178.218501 113.371264) (xy 178.218489 113.371261) (xy 178.063845 113.3405) (xy 178.063842 113.3405) + (xy 177.906158 113.3405) (xy 177.906155 113.3405) (xy 177.75151 113.371261) (xy 177.751503 113.371263) + (xy 177.676368 113.402384) (xy 177.606899 113.409851) (xy 177.54442 113.378576) (xy 177.541236 113.375503) + (xy 168.671819 104.506086) (xy 168.638334 104.444763) (xy 168.6355 104.418405) (xy 168.6355 102.587153) + (xy 170.5055 102.587153) (xy 170.5055 102.744846) (xy 170.536261 102.899489) (xy 170.536264 102.899501) + (xy 170.596602 103.045172) (xy 170.596609 103.045185) (xy 170.68421 103.176288) (xy 170.684213 103.176292) + (xy 170.795707 103.287786) (xy 170.795711 103.287789) (xy 170.926814 103.37539) (xy 170.926827 103.375397) + (xy 171.049297 103.426125) (xy 171.072503 103.435737) (xy 171.21915 103.464907) (xy 171.227153 103.466499) + (xy 171.227156 103.4665) (xy 171.227158 103.4665) (xy 171.384844 103.4665) (xy 171.384845 103.466499) + (xy 171.539497 103.435737) (xy 171.61463 103.404615) (xy 171.684098 103.397147) (xy 171.746578 103.428422) + (xy 171.749763 103.431496) (xy 174.480135 106.161868) (xy 174.544132 106.225865) (xy 174.627747 106.2605) + (xy 176.683925 106.2605) (xy 176.750964 106.280185) (xy 176.796719 106.332989) (xy 176.798465 106.336999) + (xy 176.829603 106.412172) (xy 176.829607 106.412181) (xy 176.829609 106.412185) (xy 176.91721 106.543288) + (xy 176.917213 106.543292) (xy 177.028707 106.654786) (xy 177.028711 106.654789) (xy 177.159814 106.74239) + (xy 177.159827 106.742397) (xy 177.217231 106.766174) (xy 177.305503 106.802737) (xy 177.460153 106.833499) + (xy 177.460156 106.8335) (xy 177.460158 106.8335) (xy 177.617844 106.8335) (xy 177.617845 106.833499) + (xy 177.772497 106.802737) (xy 177.918179 106.742394) (xy 178.049289 106.654789) (xy 178.160789 106.543289) + (xy 178.248394 106.412179) (xy 178.308737 106.266497) (xy 178.3395 106.111842) (xy 178.3395 105.954158) + (xy 178.3395 105.954155) (xy 178.339499 105.954153) (xy 178.31517 105.831844) (xy 178.308737 105.799503) + (xy 178.285075 105.742377) (xy 178.248397 105.653827) (xy 178.24839 105.653814) (xy 178.160789 105.522711) + (xy 178.160786 105.522707) (xy 178.049292 105.411213) (xy 178.049288 105.41121) (xy 177.918185 105.323609) + (xy 177.918172 105.323602) (xy 177.772501 105.263264) (xy 177.772489 105.263261) (xy 177.617845 105.2325) + (xy 177.617842 105.2325) (xy 177.460158 105.2325) (xy 177.460155 105.2325) (xy 177.30551 105.263261) + (xy 177.305498 105.263264) (xy 177.159827 105.323602) (xy 177.159814 105.323609) (xy 177.028711 105.41121) + (xy 177.028707 105.411213) (xy 176.917213 105.522707) (xy 176.91721 105.522711) (xy 176.829609 105.653814) + (xy 176.829607 105.653818) (xy 176.823728 105.66801) (xy 176.798484 105.728954) (xy 176.754646 105.783356) + (xy 176.688352 105.805421) (xy 176.683925 105.8055) (xy 174.818595 105.8055) (xy 174.751556 105.785815) + (xy 174.730914 105.769181) (xy 172.071496 103.109763) (xy 172.038011 103.04844) (xy 172.042995 102.978748) + (xy 172.044605 102.974655) (xy 172.075737 102.899497) (xy 172.1065 102.744842) (xy 172.1065 102.587158) + (xy 172.1065 102.587155) (xy 172.106499 102.587153) (xy 172.075737 102.432503) (xy 172.071175 102.421489) + (xy 172.015397 102.286827) (xy 172.01539 102.286814) (xy 171.927789 102.155711) (xy 171.927786 102.155707) + (xy 171.816292 102.044213) (xy 171.816288 102.04421) (xy 171.685185 101.956609) (xy 171.685172 101.956602) + (xy 171.539501 101.896264) (xy 171.539489 101.896261) (xy 171.384845 101.8655) (xy 171.384842 101.8655) + (xy 171.227158 101.8655) (xy 171.227155 101.8655) (xy 171.07251 101.896261) (xy 171.072498 101.896264) + (xy 170.926827 101.956602) (xy 170.926814 101.956609) (xy 170.795711 102.04421) (xy 170.795707 102.044213) + (xy 170.684213 102.155707) (xy 170.68421 102.155711) (xy 170.596609 102.286814) (xy 170.596602 102.286827) + (xy 170.536264 102.432498) (xy 170.536261 102.43251) (xy 170.5055 102.587153) (xy 168.6355 102.587153) + (xy 168.6355 97.54655) (xy 169.612 97.54655) (xy 169.612 97.715849) (xy 169.638481 97.883047) (xy 169.690796 98.044053) + (xy 169.767652 98.194888) (xy 169.867148 98.331834) (xy 169.867152 98.331839) (xy 169.98686 98.451547) + (xy 169.986865 98.451551) (xy 170.063873 98.5075) (xy 170.123815 98.55105) (xy 170.217141 98.598602) + (xy 170.274646 98.627903) (xy 170.274648 98.627903) (xy 170.274651 98.627905) (xy 170.35885 98.655263) + (xy 170.435652 98.680218) (xy 170.602851 98.7067) (xy 170.602856 98.7067) (xy 170.772149 98.7067) + (xy 170.939347 98.680218) (xy 171.100349 98.627905) (xy 171.251185 98.55105) (xy 171.388141 98.451546) + (xy 171.507846 98.331841) (xy 171.60735 98.194885) (xy 171.684205 98.044049) (xy 171.736518 97.883047) + (xy 171.746383 97.820763) (xy 171.763 97.715849) (xy 171.763 97.54655) (xy 171.737428 97.385098) + (xy 171.746382 97.315805) (xy 171.791379 97.262353) (xy 171.85813 97.241713) (xy 171.859901 97.2417) + (xy 172.098444 97.2417) (xy 172.098451 97.2417) (xy 172.377942 97.204904) (xy 172.650239 97.131942) + (xy 172.910683 97.024063) (xy 173.154817 96.883112) (xy 173.378465 96.7115) (xy 173.5778 96.512165) + (xy 173.645492 96.423946) (xy 173.70192 96.382744) (xy 173.771666 96.378589) (xy 173.832586 96.412801) + (xy 173.865339 96.474518) (xy 173.859526 96.544146) (xy 173.851255 96.561433) (xy 173.795183 96.658551) + (xy 173.795175 96.658568) (xy 173.685097 96.924321) (xy 173.610646 97.202176) (xy 173.573101 97.487361) + (xy 173.5731 97.487377) (xy 173.5731 97.775022) (xy 173.573101 97.775038) (xy 173.610646 98.060223) + (xy 173.685097 98.338078) (xy 173.795175 98.603831) (xy 173.795183 98.603848) (xy 173.939004 98.852951) + (xy 173.939015 98.852967) (xy 174.114121 99.081171) (xy 174.114127 99.081178) (xy 174.317521 99.284572) + (xy 174.317528 99.284578) (xy 174.450807 99.386846) (xy 174.545741 99.459691) (xy 174.545748 99.459695) + (xy 174.794851 99.603516) (xy 174.794856 99.603518) (xy 174.794859 99.60352) (xy 174.794863 99.603521) + (xy 174.794868 99.603524) (xy 174.837477 99.621173) (xy 175.06062 99.713602) (xy 175.338475 99.788053) + (xy 175.623671 99.8256) (xy 175.623678 99.8256) (xy 175.911322 99.8256) (xy 175.911329 99.8256) + (xy 176.196525 99.788053) (xy 176.47438 99.713602) (xy 176.740141 99.60352) (xy 176.989259 99.459691) + (xy 177.217473 99.284577) (xy 177.420877 99.081173) (xy 177.595991 98.852959) (xy 177.73982 98.603841) + (xy 177.849902 98.33808) (xy 177.924353 98.060225) (xy 177.9619 97.775029) (xy 177.9619 97.54655) + (xy 179.772 97.54655) (xy 179.772 97.715849) (xy 179.798481 97.883047) (xy 179.850796 98.044053) + (xy 179.927652 98.194888) (xy 180.027148 98.331834) (xy 180.027152 98.331839) (xy 180.14686 98.451547) + (xy 180.146865 98.451551) (xy 180.223873 98.5075) (xy 180.283815 98.55105) (xy 180.377141 98.598602) + (xy 180.434646 98.627903) (xy 180.434648 98.627903) (xy 180.434651 98.627905) (xy 180.51885 98.655263) + (xy 180.595652 98.680218) (xy 180.762851 98.7067) (xy 180.762856 98.7067) (xy 180.932149 98.7067) + (xy 181.099347 98.680218) (xy 181.260349 98.627905) (xy 181.411185 98.55105) (xy 181.548141 98.451546) + (xy 181.667846 98.331841) (xy 181.76735 98.194885) (xy 181.844205 98.044049) (xy 181.896518 97.883047) + (xy 181.906383 97.820763) (xy 181.923 97.715849) (xy 181.923 97.54655) (xy 181.896518 97.379352) + (xy 181.851796 97.241713) (xy 181.844205 97.218351) (xy 181.844203 97.218348) (xy 181.844203 97.218346) + (xy 181.800176 97.13194) (xy 181.76735 97.067515) (xy 181.735781 97.024064) (xy 181.667851 96.930565) + (xy 181.667847 96.93056) (xy 181.548139 96.810852) (xy 181.548134 96.810848) (xy 181.411188 96.711352) + (xy 181.411187 96.711351) (xy 181.411185 96.71135) (xy 181.364082 96.68735) (xy 181.260353 96.634496) + (xy 181.099347 96.582181) (xy 180.932149 96.5557) (xy 180.932144 96.5557) (xy 180.762856 96.5557) + (xy 180.762851 96.5557) (xy 180.595652 96.582181) (xy 180.434646 96.634496) (xy 180.283811 96.711352) + (xy 180.146865 96.810848) (xy 180.14686 96.810852) (xy 180.027152 96.93056) (xy 180.027148 96.930565) + (xy 179.927652 97.067511) (xy 179.850796 97.218346) (xy 179.798481 97.379352) (xy 179.772 97.54655) + (xy 177.9619 97.54655) (xy 177.9619 97.487371) (xy 177.924353 97.202175) (xy 177.849902 96.92432) + (xy 177.73982 96.658559) (xy 177.739818 96.658556) (xy 177.739816 96.658551) (xy 177.595995 96.409448) + (xy 177.595991 96.409441) (xy 177.492069 96.274007) (xy 177.420878 96.181228) (xy 177.420872 96.181221) + (xy 177.217478 95.977827) (xy 177.217471 95.977821) (xy 176.989267 95.802715) (xy 176.989265 95.802713) + (xy 176.989259 95.802709) (xy 176.989254 95.802706) (xy 176.989251 95.802704) (xy 176.740148 95.658883) + (xy 176.740131 95.658875) (xy 176.474378 95.548797) (xy 176.196523 95.474346) (xy 175.911338 95.436801) + (xy 175.911335 95.4368) (xy 175.911329 95.4368) (xy 175.623671 95.4368) (xy 175.623665 95.4368) + (xy 175.623661 95.436801) (xy 175.338476 95.474346) (xy 175.060621 95.548797) (xy 174.794868 95.658875) + (xy 174.794851 95.658883) (xy 174.545748 95.802704) (xy 174.545732 95.802715) (xy 174.317528 95.977821) + (xy 174.317521 95.977827) (xy 174.114127 96.181221) (xy 174.04293 96.274007) (xy 173.986501 96.315209) + (xy 173.916755 96.319364) (xy 173.855835 96.285151) (xy 173.823083 96.223434) (xy 173.828896 96.153807) + (xy 173.837161 96.136531) (xy 173.890363 96.044383) (xy 173.998242 95.783939) (xy 174.071204 95.511642) + (xy 174.108 95.232151) (xy 174.108 94.950249) (xy 174.071204 94.670758) (xy 173.998242 94.398461) + (xy 173.991342 94.381804) (xy 173.966349 94.321464) (xy 173.890363 94.138017) (xy 173.890361 94.138014) + (xy 173.890359 94.138009) (xy 173.749416 93.89389) (xy 173.749412 93.893883) (xy 173.5778 93.670235) + (xy 173.577798 93.670233) (xy 173.577795 93.670229) (xy 173.37847 93.470904) (xy 173.353921 93.452067) + (xy 173.154817 93.299288) (xy 173.154811 93.299284) (xy 173.154809 93.299283) (xy 172.91069 93.15834) + (xy 172.910679 93.158335) (xy 172.650243 93.050459) (xy 172.377939 92.977495) (xy 172.098458 92.9407) + (xy 172.098451 92.9407) (xy 171.816549 92.9407) (xy 171.816541 92.9407) (xy 171.53706 92.977495) + (xy 171.264756 93.050459) (xy 171.00432 93.158335) (xy 171.004309 93.15834) (xy 170.76019 93.299283) + (xy 170.760184 93.299287) (xy 170.760183 93.299288) (xy 170.698401 93.346695) (xy 170.536529 93.470904) + (xy 170.337204 93.670229) (xy 170.213314 93.831685) (xy 170.179927 93.875197) (xy 170.165589 93.893882) + (xy 170.165583 93.89389) (xy 170.02464 94.138009) (xy 170.024635 94.13802) (xy 169.916759 94.398456) + (xy 169.843795 94.67076) (xy 169.807 94.950241) (xy 169.807 95.232158) (xy 169.843795 95.511639) + (xy 169.916759 95.783943) (xy 170.024635 96.044379) (xy 170.02464 96.04439) (xy 170.165583 96.288509) + (xy 170.165594 96.288525) (xy 170.296338 96.458914) (xy 170.321532 96.524083) (xy 170.307494 96.592528) + (xy 170.25868 96.642517) (xy 170.254258 96.644884) (xy 170.123813 96.71135) (xy 169.986865 96.810848) + (xy 169.98686 96.810852) (xy 169.867152 96.93056) (xy 169.867148 96.930565) (xy 169.767652 97.067511) + (xy 169.690796 97.218346) (xy 169.638481 97.379352) (xy 169.612 97.54655) (xy 168.6355 97.54655) + (xy 168.6355 95.946275) (xy 168.655185 95.879236) (xy 168.707989 95.833481) (xy 168.711999 95.831734) + (xy 168.787179 95.800594) (xy 168.918289 95.712989) (xy 169.029789 95.601489) (xy 169.117394 95.470379) + (xy 169.177737 95.324697) (xy 169.2085 95.170042) (xy 169.2085 95.012358) (xy 169.2085 95.012355) + (xy 169.208499 95.012353) (xy 169.177738 94.85771) (xy 169.177737 94.857703) (xy 169.177735 94.857698) + (xy 169.117397 94.712027) (xy 169.11739 94.712014) (xy 169.029789 94.580911) (xy 169.029786 94.580907) + (xy 168.918292 94.469413) (xy 168.918288 94.46941) (xy 168.787185 94.381809) (xy 168.787172 94.381802) + (xy 168.641501 94.321464) (xy 168.641489 94.321461) (xy 168.486845 94.2907) (xy 168.486842 94.2907) + (xy 168.329158 94.2907) (xy 168.329155 94.2907) (xy 168.17451 94.321461) (xy 168.174498 94.321464) + (xy 168.028827 94.381802) (xy 168.028814 94.381809) (xy 167.897711 94.46941) (xy 167.897707 94.469413) + (xy 167.786213 94.580907) (xy 167.78621 94.580911) (xy 167.698609 94.712014) (xy 167.698602 94.712027) + (xy 167.638264 94.857698) (xy 167.638261 94.85771) (xy 167.6075 95.012353) (xy 167.6075 95.170046) + (xy 167.638261 95.324689) (xy 167.638264 95.324701) (xy 167.698602 95.470372) (xy 167.698609 95.470385) + (xy 167.78621 95.601488) (xy 167.786213 95.601492) (xy 167.897707 95.712986) (xy 167.897711 95.712989) + (xy 168.028814 95.80059) (xy 168.028818 95.800592) (xy 168.028821 95.800594) (xy 168.103954 95.831715) + (xy 168.158356 95.875554) (xy 168.180421 95.941848) (xy 168.1805 95.946275) (xy 168.1805 104.518747) + (xy 168.1805 104.609253) (xy 168.190855 104.634253) (xy 168.215136 104.69287) (xy 177.219503 113.697236) + (xy 177.252988 113.758559) (xy 177.248004 113.828251) (xy 177.246384 113.832368) (xy 177.215263 113.907503) + (xy 177.215261 113.90751) (xy 177.1845 114.062153) (xy 177.1845 114.219846) (xy 177.215261 114.374489) + (xy 177.215264 114.374501) (xy 177.275602 114.520172) (xy 177.275609 114.520185) (xy 177.36321 114.651288) + (xy 177.363213 114.651292) (xy 177.474707 114.762786) (xy 177.474711 114.762789) (xy 177.605814 114.85039) + (xy 177.605818 114.850392) (xy 177.605821 114.850394) (xy 177.680954 114.881515) (xy 177.735356 114.925354) + (xy 177.757421 114.991648) (xy 177.7575 114.996075) (xy 177.7575 128.383761) (xy 177.757496 128.383771) + (xy 177.7575 128.423995) (xy 177.7575 128.474265) (xy 177.773599 128.513121) (xy 177.773597 128.513121) + (xy 177.773602 128.513129) (xy 177.77657 128.520292) (xy 177.792136 128.557871) (xy 177.792144 128.557883) + (xy 177.792147 128.557886) (xy 177.792148 128.557888) (xy 177.825503 128.591236) (xy 177.856132 128.621865) + (xy 177.856142 128.621869) (xy 181.982422 132.747283) (xy 181.982457 132.747317) (xy 182.015948 132.808636) + (xy 182.010971 132.878328) (xy 182.009347 132.882458) (xy 181.978263 132.957503) (xy 181.978262 132.957506) + (xy 181.978262 132.957507) (xy 181.978261 132.95751) (xy 181.9475 133.112153) (xy 181.9475 133.269846) + (xy 181.978261 133.424489) (xy 181.978264 133.424501) (xy 182.038602 133.570172) (xy 182.038609 133.570185) + (xy 182.12621 133.701288) (xy 182.126213 133.701292) (xy 182.237707 133.812786) (xy 182.237711 133.812789) + (xy 182.368814 133.90039) (xy 182.368818 133.900392) (xy 182.368821 133.900394) (xy 182.443954 133.931515) + (xy 182.498356 133.975354) (xy 182.520421 134.041648) (xy 182.5205 134.046075) (xy 182.5205 142.716941) + (xy 182.520498 142.761241) (xy 182.5205 142.761245) (xy 182.5205 142.761253) (xy 182.522556 142.766218) + (xy 182.522557 142.766219) (xy 182.537706 142.802791) (xy 182.537707 142.802799) (xy 182.53771 142.802799) + (xy 182.53771 142.8028) (xy 182.555128 142.844858) (xy 182.555129 142.844859) (xy 182.55513 142.844861) + (xy 182.555133 142.844866) (xy 182.583687 142.87342) (xy 182.58369 142.873426) (xy 182.583692 142.873425) + (xy 191.506526 151.797196) (xy 191.540008 151.858521) (xy 191.535019 151.928213) (xy 191.533402 151.932324) + (xy 191.502263 152.007503) (xy 191.502261 152.00751) (xy 191.4715 152.162153) (xy 191.4715 152.319846) + (xy 191.502261 152.474489) (xy 191.502264 152.474501) (xy 191.562602 152.620172) (xy 191.562609 152.620185) + (xy 191.65021 152.751288) (xy 191.650213 152.751292) (xy 191.761707 152.862786) (xy 191.761711 152.862789) + (xy 191.892814 152.95039) (xy 191.892827 152.950397) (xy 192.009206 152.998602) (xy 192.038503 153.010737) + (xy 192.193153 153.041499) (xy 192.193156 153.0415) (xy 192.193158 153.0415) (xy 192.350844 153.0415) + (xy 192.350845 153.041499) (xy 192.505497 153.010737) (xy 192.651179 152.950394) (xy 192.655331 152.94762) + (xy 192.685609 152.927389) (xy 192.752286 152.906511) (xy 192.819666 152.924995) (xy 192.866357 152.976974) + (xy 192.8785 153.030491) (xy 192.8785 180.674758) (xy 192.878497 180.674766) (xy 192.8785 180.713553) + (xy 192.8785 180.76526) (xy 192.878503 180.765269) (xy 192.878504 180.765271) (xy 192.894219 180.803202) + (xy 192.894221 180.80321) (xy 192.894223 180.80321) (xy 192.894223 180.803211) (xy 192.913135 180.848868) + (xy 192.913136 180.848869) (xy 192.913137 180.848871) (xy 192.913147 180.848887) (xy 192.938555 180.87429) + (xy 192.949523 180.885256) (xy 192.977132 180.912865) (xy 192.977138 180.912867) (xy 192.985506 180.921234) + (xy 192.985507 180.921235) (xy 197.668217 185.603191) (xy 197.701707 185.664511) (xy 197.696728 185.734203) + (xy 197.654861 185.79014) (xy 197.589399 185.814562) (xy 197.521125 185.799716) (xy 197.507658 185.791197) + (xy 197.482819 185.773151) (xy 197.482818 185.77315) (xy 197.482816 185.773149) (xy 197.293412 185.676643) + (xy 197.091243 185.610954) (xy 197.091241 185.610953) (xy 197.09124 185.610953) (xy 196.929957 185.585408) + (xy 196.881287 185.5777) (xy 196.668713 185.5777) (xy 196.620042 185.585408) (xy 196.45876 185.610953) + (xy 196.256585 185.676644) (xy 196.067179 185.773151) (xy 195.895213 185.89809) (xy 195.74489 186.048413) + (xy 195.619951 186.220379) (xy 195.523444 186.409785) (xy 195.457753 186.61196) (xy 195.4245 186.821913) + (xy 195.4245 187.034486) (xy 195.457753 187.244439) (xy 195.523444 187.446614) (xy 195.619951 187.63602) + (xy 195.74489 187.807986) (xy 195.895213 187.958309) (xy 196.067179 188.083248) (xy 196.067181 188.083249) + (xy 196.067184 188.083251) (xy 196.256588 188.179757) (xy 196.458757 188.245446) (xy 196.668713 188.2787) + (xy 196.668714 188.2787) (xy 196.881286 188.2787) (xy 196.881287 188.2787) (xy 197.091243 188.245446) + (xy 197.293412 188.179757) (xy 197.482816 188.083251) (xy 197.569478 188.020288) (xy 197.654786 187.958309) + (xy 197.654788 187.958306) (xy 197.654792 187.958304) (xy 197.805104 187.807992) (xy 197.805106 187.807988) + (xy 197.805109 187.807986) (xy 197.930048 187.63602) (xy 197.930047 187.63602) (xy 197.930051 187.636016) + (xy 197.934514 187.627254) (xy 197.982488 187.576459) (xy 198.050308 187.559663) (xy 198.116444 187.582199) + (xy 198.155486 187.627256) (xy 198.159951 187.63602) (xy 198.28489 187.807986) (xy 198.435213 187.958309) + (xy 198.607179 188.083248) (xy 198.607181 188.083249) (xy 198.607184 188.083251) (xy 198.796588 188.179757) + (xy 198.998757 188.245446) (xy 199.208713 188.2787) (xy 199.208714 188.2787) (xy 199.421286 188.2787) + (xy 199.421287 188.2787) (xy 199.631243 188.245446) (xy 199.833412 188.179757) (xy 200.022816 188.083251) + (xy 200.109478 188.020288) (xy 200.194786 187.958309) (xy 200.194788 187.958306) (xy 200.194792 187.958304) + (xy 200.345104 187.807992) (xy 200.345106 187.807988) (xy 200.345109 187.807986) (xy 200.470048 187.63602) + (xy 200.470047 187.63602) (xy 200.470051 187.636016) (xy 200.474514 187.627254) (xy 200.522488 187.576459) + (xy 200.590308 187.559663) (xy 200.656444 187.582199) (xy 200.695486 187.627256) (xy 200.699951 187.63602) + (xy 200.82489 187.807986) (xy 200.975213 187.958309) (xy 201.147179 188.083248) (xy 201.147181 188.083249) + (xy 201.147184 188.083251) (xy 201.336588 188.179757) (xy 201.538757 188.245446) (xy 201.748713 188.2787) + (xy 201.748714 188.2787) (xy 201.961286 188.2787) (xy 201.961287 188.2787) (xy 202.171243 188.245446) + (xy 202.373412 188.179757) (xy 202.562816 188.083251) (xy 202.649478 188.020288) (xy 202.734784 187.95831) + (xy 202.734784 187.958309) (xy 202.734792 187.958304) (xy 202.848717 187.844378) (xy 202.910036 187.810896) + (xy 202.979728 187.81588) (xy 203.035662 187.857751) (xy 203.052577 187.888728) (xy 203.101646 188.020288) + (xy 203.101649 188.020293) (xy 203.187809 188.135387) (xy 203.187812 188.13539) (xy 203.302906 188.22155) + (xy 203.302913 188.221554) (xy 203.43762 188.271796) (xy 203.437627 188.271798) (xy 203.497155 188.278199) + (xy 203.497172 188.2782) (xy 204.145 188.2782) (xy 204.145 187.361212) (xy 204.202007 187.394125) + (xy 204.329174 187.4282) (xy 204.460826 187.4282) (xy 204.587993 187.394125) (xy 204.645 187.361212) + (xy 204.645 188.2782) (xy 205.292828 188.2782) (xy 205.292844 188.278199) (xy 205.352372 188.271798) + (xy 205.352379 188.271796) (xy 205.487086 188.221554) (xy 205.487093 188.22155) (xy 205.602187 188.13539) + (xy 205.60219 188.135387) (xy 205.68835 188.020293) (xy 205.688354 188.020286) (xy 205.738596 187.885579) + (xy 205.738598 187.885572) (xy 205.744999 187.826044) (xy 205.745 187.826027) (xy 205.745 187.1782) + (xy 204.828012 187.1782) (xy 204.860925 187.121193) (xy 204.895 186.994026) (xy 204.895 186.862374) + (xy 204.860925 186.735207) (xy 204.828012 186.6782) (xy 205.745 186.6782) (xy 205.745 186.030372) + (xy 205.744999 186.030355) (xy 205.738598 185.970827) (xy 205.738596 185.97082) (xy 205.688354 185.836113) + (xy 205.68835 185.836106) (xy 205.60219 185.721012) (xy 205.602187 185.721009) (xy 205.487093 185.634849) + (xy 205.487086 185.634845) (xy 205.352379 185.584603) (xy 205.352372 185.584601) (xy 205.292844 185.5782) + (xy 204.645 185.5782) (xy 204.645 186.495188) (xy 204.587993 186.462275) (xy 204.460826 186.4282) + (xy 204.329174 186.4282) (xy 204.202007 186.462275) (xy 204.145 186.495188) (xy 204.145 185.5782) + (xy 203.497155 185.5782) (xy 203.437627 185.584601) (xy 203.43762 185.584603) (xy 203.302913 185.634845) + (xy 203.302906 185.634849) (xy 203.187812 185.721009) (xy 203.187809 185.721012) (xy 203.101649 185.836106) + (xy 203.101646 185.836112) (xy 203.052577 185.967671) (xy 203.010705 186.023604) (xy 202.945241 186.048021) + (xy 202.876968 186.033169) (xy 202.848714 186.012018) (xy 202.734786 185.89809) (xy 202.56282 185.773151) + (xy 202.373414 185.676644) (xy 202.373413 185.676643) (xy 202.373412 185.676643) (xy 202.171243 185.610954) + (xy 202.171241 185.610953) (xy 202.17124 185.610953) (xy 202.009957 185.585408) (xy 201.961287 185.5777) + (xy 201.748713 185.5777) (xy 201.700042 185.585408) (xy 201.53876 185.610953) (xy 201.336585 185.676644) + (xy 201.147179 185.773151) (xy 200.975213 185.89809) (xy 200.82489 186.048413) (xy 200.699949 186.220382) + (xy 200.695484 186.229146) (xy 200.647509 186.279942) (xy 200.579688 186.296736) (xy 200.513553 186.274198) + (xy 200.474516 186.229146) (xy 200.47005 186.220382) (xy 200.345109 186.048413) (xy 200.194786 185.89809) + (xy 200.02282 185.773151) (xy 199.833414 185.676644) (xy 199.833413 185.676643) (xy 199.833412 185.676643) + (xy 199.631243 185.610954) (xy 199.631241 185.610953) (xy 199.63124 185.610953) (xy 199.469957 185.585408) + (xy 199.421287 185.5777) (xy 199.208713 185.5777) (xy 199.160042 185.585408) (xy 198.99876 185.610953) + (xy 198.796585 185.676644) (xy 198.60434 185.774598) (xy 198.535671 185.787494) (xy 198.47093 185.761218) + (xy 198.460371 185.751801) (xy 197.320714 184.612327) (xy 194.650334 181.942377) (xy 230.77565 181.942377) + (xy 230.77565 182.230022) (xy 230.775651 182.230038) (xy 230.813196 182.515223) (xy 230.887647 182.793078) + (xy 230.997725 183.058831) (xy 230.997733 183.058848) (xy 231.141554 183.307951) (xy 231.141565 183.307967) + (xy 231.316671 183.536171) (xy 231.316677 183.536178) (xy 231.520071 183.739572) (xy 231.520077 183.739577) + (xy 231.748291 183.914691) (xy 231.748298 183.914695) (xy 231.997401 184.058516) (xy 231.997406 184.058518) + (xy 231.997409 184.05852) (xy 231.997413 184.058521) (xy 231.997418 184.058524) (xy 232.102773 184.102163) + (xy 232.26317 184.168602) (xy 232.541025 184.243053) (xy 232.826221 184.2806) (xy 232.826228 184.2806) + (xy 233.113872 184.2806) (xy 233.113879 184.2806) (xy 233.399075 184.243053) (xy 233.67693 184.168602) + (xy 233.942691 184.05852) (xy 234.191809 183.914691) (xy 234.420023 183.739577) (xy 234.623427 183.536173) + (xy 234.798541 183.307959) (xy 234.94237 183.058841) (xy 235.052452 182.79308) (xy 235.126903 182.515225) + (xy 235.16445 182.230029) (xy 235.16445 181.942371) (xy 235.126903 181.657175) (xy 235.052452 181.37932) + (xy 235.038714 181.346153) (xy 293.00075 181.346153) (xy 293.00075 181.503846) (xy 293.031511 181.658489) + (xy 293.031514 181.658501) (xy 293.091852 181.804172) (xy 293.091859 181.804185) (xy 293.17946 181.935288) + (xy 293.179463 181.935292) (xy 293.290957 182.046786) (xy 293.290961 182.046789) (xy 293.422064 182.13439) + (xy 293.422077 182.134397) (xy 293.567748 182.194735) (xy 293.567753 182.194737) (xy 293.722403 182.225499) + (xy 293.722406 182.2255) (xy 293.722408 182.2255) (xy 293.880094 182.2255) (xy 293.880095 182.225499) + (xy 294.034747 182.194737) (xy 294.180429 182.134394) (xy 294.311539 182.046789) (xy 294.423039 181.935289) + (xy 294.510644 181.804179) (xy 294.570987 181.658497) (xy 294.60175 181.503842) (xy 294.60175 181.346158) + (xy 294.60175 181.346155) (xy 294.601749 181.346153) (xy 294.570987 181.191503) (xy 294.558267 181.160794) + (xy 294.510647 181.045827) (xy 294.51064 181.045814) (xy 294.423039 180.914711) (xy 294.423036 180.914707) + (xy 294.311542 180.803213) (xy 294.311538 180.80321) (xy 294.180435 180.715609) (xy 294.180422 180.715602) + (xy 294.034751 180.655264) (xy 294.034739 180.655261) (xy 293.880095 180.6245) (xy 293.880092 180.6245) + (xy 293.722408 180.6245) (xy 293.722405 180.6245) (xy 293.56776 180.655261) (xy 293.567748 180.655264) + (xy 293.422077 180.715602) (xy 293.422064 180.715609) (xy 293.290961 180.80321) (xy 293.290957 180.803213) + (xy 293.179463 180.914707) (xy 293.17946 180.914711) (xy 293.091859 181.045814) (xy 293.091852 181.045827) + (xy 293.031514 181.191498) (xy 293.031511 181.19151) (xy 293.00075 181.346153) (xy 235.038714 181.346153) + (xy 234.974656 181.191503) (xy 234.942374 181.113568) (xy 234.942366 181.113551) (xy 234.798545 180.864448) + (xy 234.798541 180.864441) (xy 234.697285 180.732481) (xy 234.623428 180.636228) (xy 234.623422 180.636221) + (xy 234.420028 180.432827) (xy 234.420021 180.432821) (xy 234.191817 180.257715) (xy 234.191815 180.257713) + (xy 234.191809 180.257709) (xy 234.191804 180.257706) (xy 234.191801 180.257704) (xy 233.942698 180.113883) + (xy 233.942681 180.113875) (xy 233.676928 180.003797) (xy 233.399073 179.929346) (xy 233.113888 179.891801) + (xy 233.113885 179.8918) (xy 233.113879 179.8918) (xy 232.826221 179.8918) (xy 232.826215 179.8918) + (xy 232.826211 179.891801) (xy 232.541026 179.929346) (xy 232.263171 180.003797) (xy 231.997418 180.113875) + (xy 231.997401 180.113883) (xy 231.748298 180.257704) (xy 231.748282 180.257715) (xy 231.520078 180.432821) + (xy 231.520071 180.432827) (xy 231.316677 180.636221) (xy 231.316671 180.636228) (xy 231.141565 180.864432) + (xy 231.141554 180.864448) (xy 230.997733 181.113551) (xy 230.997725 181.113568) (xy 230.887647 181.379321) + (xy 230.813196 181.657176) (xy 230.775651 181.942361) (xy 230.77565 181.942377) (xy 194.650334 181.942377) + (xy 193.475657 180.767889) (xy 193.369826 180.662075) (xy 193.336336 180.600755) (xy 193.3335 180.574387) + (xy 193.3335 179.736906) (xy 249.438865 179.736906) (xy 249.454977 179.901821) (xy 249.456621 179.918642) + (xy 249.462595 179.939463) (xy 249.50698 180.094161) (xy 249.58828 180.257663) (xy 249.588281 180.257665) + (xy 249.588283 180.257668) (xy 249.628827 180.31173) (xy 249.697838 180.403752) (xy 249.697839 180.403753) + (xy 249.69784 180.403754) (xy 249.832032 180.527595) (xy 249.986425 180.625097) (xy 250.11033 180.674766) + (xy 250.155914 180.693039) (xy 250.155915 180.693039) (xy 250.155917 180.69304) (xy 250.334908 180.729179) + (xy 250.334902 180.729179) (xy 250.351222 180.729459) (xy 250.517484 180.73232) (xy 250.697612 180.702358) + (xy 250.745939 180.684889) (xy 250.869336 180.640285) (xy 250.869337 180.640283) (xy 250.86934 180.640283) + (xy 250.884612 180.631383) (xy 250.891059 180.627635) (xy 250.89135 180.627557) (xy 250.919233 180.61126) + (xy 250.919351 180.611192) (xy 250.922568 180.610401) (xy 250.981662 180.594399) (xy 252.462792 180.594399) + (xy 252.462914 180.594406) (xy 252.471005 180.594405) (xy 252.471008 180.594406) (xy 252.503142 180.594402) + (xy 252.565704 180.611334) (xy 252.59353 180.627591) (xy 252.593532 180.627591) (xy 252.59968 180.631183) + (xy 252.601335 180.632008) (xy 252.615478 180.64025) (xy 252.7872 180.702321) (xy 252.967321 180.732282) + (xy 253.146998 180.72919) (xy 253.149891 180.729141) (xy 253.328866 180.693005) (xy 253.328869 180.693003) + (xy 253.328874 180.693003) (xy 253.49836 180.625062) (xy 253.652746 180.527563) (xy 253.658218 180.522514) + (xy 253.78693 180.40373) (xy 253.786932 180.403728) (xy 253.786933 180.403727) (xy 253.896485 180.257647) + (xy 253.951925 180.146153) (xy 267.25075 180.146153) (xy 267.25075 180.303846) (xy 267.281511 180.458489) + (xy 267.281514 180.458501) (xy 267.341852 180.604172) (xy 267.341859 180.604185) (xy 267.42946 180.735288) + (xy 267.429463 180.735292) (xy 267.540957 180.846786) (xy 267.540961 180.846789) (xy 267.672064 180.93439) + (xy 267.672077 180.934397) (xy 267.807258 180.99039) (xy 267.817753 180.994737) (xy 267.972403 181.025499) + (xy 267.972406 181.0255) (xy 267.972408 181.0255) (xy 268.130094 181.0255) (xy 268.130095 181.025499) + (xy 268.284747 180.994737) (xy 268.430429 180.934394) (xy 268.561539 180.846789) (xy 268.673039 180.735289) + (xy 268.760644 180.604179) (xy 268.760643 180.604179) (xy 268.764029 180.599113) (xy 268.765809 180.600302) + (xy 268.807958 180.557364) (xy 268.87609 180.541878) (xy 268.934605 180.560796) (xy 268.998331 180.60104) + (xy 269.036425 180.625097) (xy 269.16033 180.674766) (xy 269.205914 180.693039) (xy 269.205915 180.693039) + (xy 269.205917 180.69304) (xy 269.384908 180.729179) (xy 269.384902 180.729179) (xy 269.401222 180.729459) + (xy 269.567484 180.73232) (xy 269.747612 180.702358) (xy 269.795939 180.684889) (xy 269.919336 180.640285) + (xy 269.919337 180.640283) (xy 269.91934 180.640283) (xy 269.934612 180.631383) (xy 269.941059 180.627635) + (xy 269.94135 180.627557) (xy 269.969233 180.61126) (xy 269.969351 180.611192) (xy 269.972568 180.610401) + (xy 270.031662 180.594399) (xy 271.512792 180.594399) (xy 271.512914 180.594406) (xy 271.521005 180.594405) + (xy 271.521008 180.594406) (xy 271.553142 180.594402) (xy 271.615704 180.611334) (xy 271.64353 180.627591) + (xy 271.643532 180.627591) (xy 271.64968 180.631183) (xy 271.651335 180.632008) (xy 271.665478 180.64025) + (xy 271.8372 180.702321) (xy 272.017321 180.732282) (xy 272.196998 180.72919) (xy 272.199891 180.729141) + (xy 272.378866 180.693005) (xy 272.378869 180.693003) (xy 272.378874 180.693003) (xy 272.54836 180.625062) + (xy 272.702746 180.527563) (xy 272.708218 180.522514) (xy 272.83693 180.40373) (xy 272.836932 180.403728) + (xy 272.836933 180.403727) (xy 272.946485 180.257647) (xy 273.027784 180.094148) (xy 273.078142 179.918633) + (xy 273.095897 179.736903) (xy 273.08046 179.55496) (xy 273.080458 179.554954) (xy 273.06971 179.515606) + (xy 273.032343 179.378818) (xy 273.024679 179.362849) (xy 273.021496 179.356204) (xy 273.021448 179.355946) + (xy 273.005071 179.321919) (xy 273.004943 179.32113) (xy 272.992902 179.268331) (xy 272.992902 179.268322) + (xy 272.992907 179.230908) (xy 272.992906 179.230904) (xy 272.992907 179.222898) (xy 272.992899 179.22276) + (xy 272.992899 177.919477) (xy 272.995554 177.907808) (xy 272.99452 177.899494) (xy 273.005105 177.865828) + (xy 273.011411 177.85269) (xy 273.021474 177.831774) (xy 273.021474 177.831769) (xy 273.02486 177.824733) + (xy 273.025025 177.824322) (xy 273.025146 177.82407) (xy 273.032383 177.808991) (xy 273.0805 177.632842) + (xy 273.095937 177.450893) (xy 273.078181 177.269155) (xy 273.02782 177.093634) (xy 272.946518 176.93013) + (xy 272.885789 176.849153) (xy 274.8085 176.849153) (xy 274.8085 177.006846) (xy 274.839261 177.161489) + (xy 274.839264 177.161501) (xy 274.899602 177.307172) (xy 274.899609 177.307185) (xy 274.98721 177.438288) + (xy 274.987213 177.438292) (xy 275.098707 177.549786) (xy 275.098711 177.549789) (xy 275.229814 177.63739) + (xy 275.229818 177.637392) (xy 275.229821 177.637394) (xy 275.304954 177.668515) (xy 275.359356 177.712354) + (xy 275.381421 177.778648) (xy 275.3815 177.783075) (xy 275.3815 179.810255) (xy 275.397861 179.849753) + (xy 275.40533 179.919223) (xy 275.397862 179.944657) (xy 275.355263 180.047503) (xy 275.355261 180.04751) + (xy 275.3245 180.202153) (xy 275.3245 180.359846) (xy 275.355261 180.514489) (xy 275.355264 180.514501) + (xy 275.415602 180.660172) (xy 275.415609 180.660185) (xy 275.50321 180.791288) (xy 275.503213 180.791292) + (xy 275.614707 180.902786) (xy 275.614711 180.902789) (xy 275.745814 180.99039) (xy 275.745827 180.990397) + (xy 275.879649 181.045827) (xy 275.891503 181.050737) (xy 276.046153 181.081499) (xy 276.046156 181.0815) + (xy 276.046158 181.0815) (xy 276.203844 181.0815) (xy 276.203845 181.081499) (xy 276.358497 181.050737) + (xy 276.471166 181.004067) (xy 276.504172 180.990397) (xy 276.504172 180.990396) (xy 276.504179 180.990394) + (xy 276.635289 180.902789) (xy 276.746789 180.791289) (xy 276.834394 180.660179) (xy 276.842552 180.640485) + (xy 276.857593 180.604172) (xy 276.894737 180.514497) (xy 276.9255 180.359842) (xy 276.9255 180.202158) + (xy 276.9255 180.202155) (xy 276.925499 180.202153) (xy 276.907939 180.113875) (xy 276.894737 180.047503) + (xy 276.876634 180.003797) (xy 276.834397 179.901827) (xy 276.83439 179.901814) (xy 276.766988 179.80094) + (xy 276.746789 179.770711) (xy 276.746786 179.770707) (xy 276.712985 179.736906) (xy 287.790465 179.736906) + (xy 287.806577 179.901821) (xy 287.808221 179.918642) (xy 287.814195 179.939463) (xy 287.85858 180.094161) + (xy 287.93988 180.257663) (xy 287.939881 180.257665) (xy 287.939883 180.257668) (xy 287.980427 180.31173) + (xy 288.049438 180.403752) (xy 288.049439 180.403753) (xy 288.04944 180.403754) (xy 288.183632 180.527595) + (xy 288.338025 180.625097) (xy 288.46193 180.674766) (xy 288.507514 180.693039) (xy 288.507515 180.693039) + (xy 288.507517 180.69304) (xy 288.686508 180.729179) (xy 288.686502 180.729179) (xy 288.702822 180.729459) + (xy 288.869084 180.73232) (xy 289.049212 180.702358) (xy 289.097539 180.684889) (xy 289.220936 180.640285) + (xy 289.220937 180.640283) (xy 289.22094 180.640283) (xy 289.236212 180.631383) (xy 289.242659 180.627635) + (xy 289.24295 180.627557) (xy 289.270833 180.61126) (xy 289.270951 180.611192) (xy 289.274168 180.610401) + (xy 289.333262 180.594399) (xy 290.814392 180.594399) (xy 290.814514 180.594406) (xy 290.822605 180.594405) + (xy 290.822608 180.594406) (xy 290.854742 180.594402) (xy 290.917304 180.611334) (xy 290.94513 180.627591) + (xy 290.945132 180.627591) (xy 290.95128 180.631183) (xy 290.952935 180.632008) (xy 290.967078 180.64025) + (xy 291.1388 180.702321) (xy 291.318921 180.732282) (xy 291.498598 180.72919) (xy 291.501491 180.729141) + (xy 291.680466 180.693005) (xy 291.680469 180.693003) (xy 291.680474 180.693003) (xy 291.84996 180.625062) + (xy 292.004346 180.527563) (xy 292.009818 180.522514) (xy 292.13853 180.40373) (xy 292.138532 180.403728) + (xy 292.138533 180.403727) (xy 292.248085 180.257647) (xy 292.329384 180.094148) (xy 292.379742 179.918633) + (xy 292.397497 179.736906) (xy 306.840465 179.736906) (xy 306.856577 179.901821) (xy 306.858221 179.918642) + (xy 306.864195 179.939463) (xy 306.90858 180.094161) (xy 306.98988 180.257663) (xy 306.989881 180.257665) + (xy 306.989883 180.257668) (xy 307.030427 180.31173) (xy 307.099438 180.403752) (xy 307.099439 180.403753) + (xy 307.09944 180.403754) (xy 307.233632 180.527595) (xy 307.388025 180.625097) (xy 307.51193 180.674766) + (xy 307.557514 180.693039) (xy 307.557515 180.693039) (xy 307.557517 180.69304) (xy 307.736508 180.729179) + (xy 307.736502 180.729179) (xy 307.748133 180.729379) (xy 307.816406 180.730553) (xy 307.883096 180.751388) + (xy 307.927936 180.80497) (xy 307.936689 180.87429) (xy 307.906576 180.937337) (xy 307.901955 180.942216) + (xy 307.82946 181.014711) (xy 307.741859 181.145814) (xy 307.741852 181.145827) (xy 307.681514 181.291498) + (xy 307.681511 181.29151) (xy 307.65075 181.446153) (xy 307.65075 181.603846) (xy 307.681511 181.758489) + (xy 307.681514 181.758501) (xy 307.741852 181.904172) (xy 307.741859 181.904185) (xy 307.82946 182.035288) + (xy 307.829463 182.035292) (xy 307.940957 182.146786) (xy 307.940961 182.146789) (xy 308.072064 182.23439) + (xy 308.072077 182.234397) (xy 308.213376 182.292924) (xy 308.217753 182.294737) (xy 308.372403 182.325499) + (xy 308.372406 182.3255) (xy 308.372408 182.3255) (xy 308.530094 182.3255) (xy 308.530095 182.325499) + (xy 308.684747 182.294737) (xy 308.830429 182.234394) (xy 308.961539 182.146789) (xy 309.073039 182.035289) + (xy 309.160644 181.904179) (xy 309.220987 181.758497) (xy 309.25175 181.603842) (xy 309.25175 181.446158) + (xy 309.25175 181.446155) (xy 309.251749 181.446153) (xy 309.238455 181.37932) (xy 309.220987 181.291503) + (xy 309.179564 181.191498) (xy 309.160647 181.145827) (xy 309.16064 181.145814) (xy 309.073039 181.014711) + (xy 309.073036 181.014707) (xy 308.961542 180.903213) (xy 308.961538 180.90321) (xy 308.839252 180.821501) + (xy 308.794447 180.767889) (xy 308.78574 180.698564) (xy 308.815894 180.635536) (xy 308.875337 180.598817) + (xy 308.908143 180.594399) (xy 309.864401 180.594399) (xy 309.872584 180.594399) (xy 309.872608 180.594406) + (xy 309.904765 180.594402) (xy 309.905045 180.594484) (xy 309.967304 180.611334) (xy 309.99513 180.627591) + (xy 309.995132 180.627591) (xy 310.00128 180.631183) (xy 310.002935 180.632008) (xy 310.017078 180.64025) + (xy 310.1888 180.702321) (xy 310.368921 180.732282) (xy 310.548598 180.72919) (xy 310.551491 180.729141) + (xy 310.730466 180.693005) (xy 310.730469 180.693003) (xy 310.730474 180.693003) (xy 310.89996 180.625062) + (xy 311.054346 180.527563) (xy 311.059818 180.522514) (xy 311.18853 180.40373) (xy 311.188532 180.403728) + (xy 311.188533 180.403727) (xy 311.298085 180.257647) (xy 311.356469 180.140232) (xy 311.403943 180.088968) + (xy 311.471596 180.071509) (xy 311.537949 180.093397) (xy 311.581934 180.147684) (xy 311.5915 180.195441) + (xy 311.5915 182.292924) (xy 311.571815 182.359963) (xy 311.519011 182.405718) (xy 311.514953 182.407485) + (xy 311.439824 182.438604) (xy 311.439814 182.438609) (xy 311.308711 182.52621) (xy 311.308707 182.526213) + (xy 311.197213 182.637707) (xy 311.19721 182.637711) (xy 311.109609 182.768814) (xy 311.109602 182.768827) + (xy 311.049264 182.914498) (xy 311.049261 182.91451) (xy 311.0185 183.069153) (xy 311.0185 183.226846) + (xy 311.049261 183.381489) (xy 311.049264 183.381501) (xy 311.109602 183.527172) (xy 311.109609 183.527185) + (xy 311.19721 183.658288) (xy 311.197213 183.658292) (xy 311.308707 183.769786) (xy 311.308711 183.769789) + (xy 311.439814 183.85739) (xy 311.439827 183.857397) (xy 311.578132 183.914684) (xy 311.585503 183.917737) + (xy 311.740153 183.948499) (xy 311.740156 183.9485) (xy 311.740158 183.9485) (xy 311.897844 183.9485) + (xy 311.897845 183.948499) (xy 312.052497 183.917737) (xy 312.198179 183.857394) (xy 312.329289 183.769789) + (xy 312.440789 183.658289) (xy 312.528394 183.527179) (xy 312.588737 183.381497) (xy 312.6195 183.226842) + (xy 312.6195 183.069158) (xy 312.6195 183.069155) (xy 312.619499 183.069153) (xy 312.588738 182.91451) + (xy 312.588737 182.914503) (xy 312.588735 182.914498) (xy 312.528397 182.768827) (xy 312.52839 182.768814) + (xy 312.440789 182.637711) (xy 312.440786 182.637707) (xy 312.329292 182.526213) (xy 312.329288 182.52621) + (xy 312.198185 182.438609) (xy 312.198175 182.438604) (xy 312.123047 182.407485) (xy 312.068644 182.363644) + (xy 312.046579 182.29735) (xy 312.0465 182.292924) (xy 312.0465 179.736906) (xy 325.890465 179.736906) + (xy 325.906577 179.901821) (xy 325.908221 179.918642) (xy 325.914195 179.939463) (xy 325.95858 180.094161) + (xy 326.03988 180.257663) (xy 326.039881 180.257665) (xy 326.039883 180.257668) (xy 326.080427 180.31173) + (xy 326.149438 180.403752) (xy 326.149439 180.403753) (xy 326.14944 180.403754) (xy 326.283632 180.527595) + (xy 326.438025 180.625097) (xy 326.56193 180.674766) (xy 326.607514 180.693039) (xy 326.607515 180.693039) + (xy 326.607517 180.69304) (xy 326.786508 180.729179) (xy 326.786502 180.729179) (xy 326.802822 180.729459) + (xy 326.969084 180.73232) (xy 327.149212 180.702358) (xy 327.197539 180.684889) (xy 327.320936 180.640285) + (xy 327.320937 180.640283) (xy 327.32094 180.640283) (xy 327.336212 180.631383) (xy 327.342659 180.627635) + (xy 327.34295 180.627557) (xy 327.370833 180.61126) (xy 327.370951 180.611192) (xy 327.374168 180.610401) + (xy 327.433262 180.594399) (xy 328.914392 180.594399) (xy 328.914514 180.594406) (xy 328.922605 180.594405) + (xy 328.922608 180.594406) (xy 328.954742 180.594402) (xy 329.017304 180.611334) (xy 329.04513 180.627591) + (xy 329.045132 180.627591) (xy 329.05128 180.631183) (xy 329.052935 180.632008) (xy 329.067078 180.64025) + (xy 329.2388 180.702321) (xy 329.418921 180.732282) (xy 329.598598 180.72919) (xy 329.601491 180.729141) + (xy 329.780466 180.693005) (xy 329.780469 180.693003) (xy 329.780474 180.693003) (xy 329.94996 180.625062) + (xy 330.104346 180.527563) (xy 330.109818 180.522514) (xy 330.23853 180.40373) (xy 330.238532 180.403728) + (xy 330.238533 180.403727) (xy 330.348085 180.257647) (xy 330.429384 180.094148) (xy 330.479742 179.918633) + (xy 330.497497 179.736906) (xy 344.688965 179.736906) (xy 344.705077 179.901821) (xy 344.706721 179.918642) + (xy 344.712695 179.939463) (xy 344.75708 180.094161) (xy 344.83838 180.257663) (xy 344.838381 180.257665) + (xy 344.838383 180.257668) (xy 344.878927 180.31173) (xy 344.947938 180.403752) (xy 344.947939 180.403753) + (xy 344.94794 180.403754) (xy 345.082132 180.527595) (xy 345.236525 180.625097) (xy 345.36043 180.674766) + (xy 345.406014 180.693039) (xy 345.406015 180.693039) (xy 345.406017 180.69304) (xy 345.585008 180.729179) + (xy 345.585002 180.729179) (xy 345.601322 180.729459) (xy 345.767584 180.73232) (xy 345.947712 180.702358) + (xy 345.996039 180.684889) (xy 346.119436 180.640285) (xy 346.119437 180.640283) (xy 346.11944 180.640283) + (xy 346.134712 180.631383) (xy 346.141159 180.627635) (xy 346.14145 180.627557) (xy 346.169333 180.61126) + (xy 346.169451 180.611192) (xy 346.172668 180.610401) (xy 346.231762 180.594399) (xy 347.712892 180.594399) + (xy 347.713014 180.594406) (xy 347.721105 180.594405) (xy 347.721108 180.594406) (xy 347.753242 180.594402) + (xy 347.815804 180.611334) (xy 347.84363 180.627591) (xy 347.843632 180.627591) (xy 347.84978 180.631183) + (xy 347.851435 180.632008) (xy 347.865578 180.64025) (xy 348.0373 180.702321) (xy 348.217421 180.732282) + (xy 348.397098 180.72919) (xy 348.399991 180.729141) (xy 348.578966 180.693005) (xy 348.578969 180.693003) + (xy 348.578974 180.693003) (xy 348.74846 180.625062) (xy 348.902846 180.527563) (xy 348.908318 180.522514) + (xy 349.03703 180.40373) (xy 349.037032 180.403728) (xy 349.037033 180.403727) (xy 349.146585 180.257647) + (xy 349.227884 180.094148) (xy 349.278242 179.918633) (xy 349.295997 179.736903) (xy 349.28056 179.55496) + (xy 349.280558 179.554954) (xy 349.26981 179.515606) (xy 349.232443 179.378818) (xy 349.224779 179.362849) + (xy 349.221596 179.356204) (xy 349.221548 179.355946) (xy 349.205171 179.321919) (xy 349.205043 179.32113) + (xy 349.193002 179.268331) (xy 349.193002 179.268322) (xy 349.193007 179.230908) (xy 349.193006 179.230904) + (xy 349.193007 179.222898) (xy 349.192999 179.22276) (xy 349.192999 177.919477) (xy 349.195654 177.907808) + (xy 349.19462 177.899494) (xy 349.205205 177.865828) (xy 349.211511 177.85269) (xy 349.221574 177.831774) + (xy 349.221574 177.831769) (xy 349.22496 177.824733) (xy 349.225125 177.824322) (xy 349.225246 177.82407) + (xy 349.232483 177.808991) (xy 349.2806 177.632842) (xy 349.296037 177.450893) (xy 349.278281 177.269155) + (xy 349.22792 177.093634) (xy 349.146618 176.93013) (xy 349.045912 176.795846) (xy 349.037062 176.784045) + (xy 349.027727 176.77543) (xy 348.902869 176.660204) (xy 348.902866 176.660202) (xy 348.902865 176.660201) + (xy 348.902862 176.660199) (xy 348.748477 176.562701) (xy 348.578987 176.494758) (xy 348.578977 176.494756) + (xy 348.399992 176.458618) (xy 348.399999 176.458618) (xy 348.228294 176.455665) (xy 348.217418 176.455478) + (xy 348.217417 176.455478) (xy 348.217414 176.455478) (xy 348.037297 176.485438) (xy 348.037284 176.485441) + (xy 347.865563 176.547513) (xy 347.851048 176.55597) (xy 347.850963 176.556019) (xy 347.843876 176.56014) + (xy 347.84363 176.560208) (xy 347.815838 176.576444) (xy 347.81559 176.576589) (xy 347.812863 176.577259) + (xy 347.753246 176.593396) (xy 347.712901 176.593393) (xy 347.712797 176.5934) (xy 346.272096 176.5934) + (xy 346.263914 176.593398) (xy 346.263892 176.593393) (xy 346.233965 176.593395) (xy 346.231728 176.593395) + (xy 346.231446 176.593312) (xy 346.169193 176.576462) (xy 346.141371 176.560208) (xy 346.135305 176.556664) + (xy 346.133607 176.555817) (xy 346.126257 176.551534) (xy 346.119421 176.54755) (xy 345.947697 176.485478) + (xy 345.947691 176.485477) (xy 345.767581 176.455519) (xy 345.767578 176.455519) (xy 345.759039 176.455665) + (xy 345.585007 176.458659) (xy 345.406034 176.494794) (xy 345.406023 176.494797) (xy 345.236542 176.562737) + (xy 345.236541 176.562737) (xy 345.082161 176.660232) (xy 345.082158 176.660234) (xy 344.947967 176.784073) + (xy 344.838415 176.930154) (xy 344.75712 177.093644) (xy 344.757119 177.093647) (xy 344.757118 177.09365) + (xy 344.731938 177.181406) (xy 344.706758 177.269165) (xy 344.689079 177.450125) (xy 344.689004 177.450893) + (xy 344.689972 177.462297) (xy 344.703757 177.624794) (xy 344.70444 177.632835) (xy 344.737297 177.753117) + (xy 344.752556 177.808978) (xy 344.75256 177.808988) (xy 344.759798 177.82407) (xy 344.75984 177.824156) + (xy 344.763423 177.831638) (xy 344.763481 177.83194) (xy 344.779797 177.865825) (xy 344.779836 177.865906) + (xy 344.779981 177.8668) (xy 344.792001 177.919469) (xy 344.792001 179.268322) (xy 344.779807 179.321945) + (xy 344.779219 179.323171) (xy 344.779139 179.323338) (xy 344.760266 179.362537) (xy 344.759942 179.363339) + (xy 344.752518 179.37881) (xy 344.704401 179.554954) (xy 344.704401 179.554956) (xy 344.692352 179.69698) + (xy 344.689602 179.729403) (xy 344.688965 179.736906) (xy 330.497497 179.736906) (xy 330.497497 179.736903) + (xy 330.48206 179.55496) (xy 330.482058 179.554954) (xy 330.47131 179.515606) (xy 330.433943 179.378818) + (xy 330.426279 179.362849) (xy 330.423096 179.356204) (xy 330.423048 179.355946) (xy 330.406671 179.321919) + (xy 330.406543 179.32113) (xy 330.394502 179.268331) (xy 330.394502 179.268322) (xy 330.394507 179.230908) + (xy 330.394506 179.230904) (xy 330.394507 179.222898) (xy 330.394499 179.22276) (xy 330.394499 177.919477) + (xy 330.397154 177.907808) (xy 330.39612 177.899494) (xy 330.406705 177.865828) (xy 330.413011 177.85269) + (xy 330.423074 177.831774) (xy 330.423074 177.831769) (xy 330.42646 177.824733) (xy 330.426625 177.824322) + (xy 330.426746 177.82407) (xy 330.433983 177.808991) (xy 330.43749 177.796153) (xy 332.65075 177.796153) + (xy 332.65075 177.953846) (xy 332.681511 178.108489) (xy 332.681514 178.108501) (xy 332.741852 178.254172) + (xy 332.741859 178.254185) (xy 332.82946 178.385288) (xy 332.829463 178.385292) (xy 332.940957 178.496786) + (xy 332.940961 178.496789) (xy 333.072064 178.58439) (xy 333.072077 178.584397) (xy 333.217748 178.644735) + (xy 333.217753 178.644737) (xy 333.372403 178.675499) (xy 333.372406 178.6755) (xy 333.372408 178.6755) + (xy 333.530094 178.6755) (xy 333.530095 178.675499) (xy 333.684747 178.644737) (xy 333.830429 178.584394) + (xy 333.961539 178.496789) (xy 334.073039 178.385289) (xy 334.160644 178.254179) (xy 334.220987 178.108497) + (xy 334.25175 177.953842) (xy 334.25175 177.796158) (xy 334.25175 177.796155) (xy 334.251749 177.796153) + (xy 334.244039 177.757392) (xy 334.220987 177.641503) (xy 334.21748 177.633036) (xy 334.160647 177.495827) + (xy 334.16064 177.495814) (xy 334.073039 177.364711) (xy 334.073036 177.364707) (xy 333.961542 177.253213) + (xy 333.961538 177.25321) (xy 333.830435 177.165609) (xy 333.830422 177.165602) (xy 333.684751 177.105264) + (xy 333.684739 177.105261) (xy 333.530095 177.0745) (xy 333.530092 177.0745) (xy 333.372408 177.0745) + (xy 333.372405 177.0745) (xy 333.21776 177.105261) (xy 333.217748 177.105264) (xy 333.072077 177.165602) + (xy 333.072064 177.165609) (xy 332.940961 177.25321) (xy 332.940957 177.253213) (xy 332.829463 177.364707) + (xy 332.82946 177.364711) (xy 332.741859 177.495814) (xy 332.741852 177.495827) (xy 332.681514 177.641498) + (xy 332.681511 177.64151) (xy 332.65075 177.796153) (xy 330.43749 177.796153) (xy 330.446063 177.764769) + (xy 330.448075 177.757403) (xy 330.448078 177.757392) (xy 330.453793 177.736471) (xy 330.4821 177.632842) + (xy 330.497537 177.450893) (xy 330.479781 177.269155) (xy 330.42942 177.093634) (xy 330.348118 176.93013) + (xy 330.247412 176.795846) (xy 330.238562 176.784045) (xy 330.229227 176.77543) (xy 330.104369 176.660204) + (xy 330.104366 176.660202) (xy 330.104365 176.660201) (xy 330.104362 176.660199) (xy 329.949977 176.562701) + (xy 329.780487 176.494758) (xy 329.780477 176.494756) (xy 329.601492 176.458618) (xy 329.601499 176.458618) + (xy 329.429794 176.455665) (xy 329.418918 176.455478) (xy 329.418917 176.455478) (xy 329.418914 176.455478) + (xy 329.238797 176.485438) (xy 329.238784 176.485441) (xy 329.067063 176.547513) (xy 329.052548 176.55597) + (xy 329.052463 176.556019) (xy 329.045376 176.56014) (xy 329.04513 176.560208) (xy 329.017338 176.576444) + (xy 329.01709 176.576589) (xy 329.014363 176.577259) (xy 328.954746 176.593396) (xy 328.914401 176.593393) + (xy 328.914297 176.5934) (xy 327.473596 176.5934) (xy 327.465414 176.593398) (xy 327.465392 176.593393) + (xy 327.435465 176.593395) (xy 327.433228 176.593395) (xy 327.432946 176.593312) (xy 327.370693 176.576462) + (xy 327.342871 176.560208) (xy 327.336805 176.556664) (xy 327.335107 176.555817) (xy 327.327757 176.551534) + (xy 327.320921 176.54755) (xy 327.149197 176.485478) (xy 327.149191 176.485477) (xy 326.969081 176.455519) + (xy 326.969078 176.455519) (xy 326.960539 176.455665) (xy 326.786507 176.458659) (xy 326.607534 176.494794) + (xy 326.607523 176.494797) (xy 326.438042 176.562737) (xy 326.438041 176.562737) (xy 326.283661 176.660232) + (xy 326.283658 176.660234) (xy 326.149467 176.784073) (xy 326.039915 176.930154) (xy 325.95862 177.093644) + (xy 325.958619 177.093647) (xy 325.958618 177.09365) (xy 325.933438 177.181406) (xy 325.908258 177.269165) + (xy 325.890579 177.450125) (xy 325.890504 177.450893) (xy 325.891472 177.462297) (xy 325.905257 177.624794) + (xy 325.90594 177.632835) (xy 325.938797 177.753117) (xy 325.954056 177.808978) (xy 325.95406 177.808988) + (xy 325.961298 177.82407) (xy 325.96134 177.824156) (xy 325.964923 177.831638) (xy 325.964981 177.83194) + (xy 325.981297 177.865825) (xy 325.981336 177.865906) (xy 325.981481 177.8668) (xy 325.993501 177.919469) + (xy 325.993501 179.268322) (xy 325.981307 179.321945) (xy 325.980719 179.323171) (xy 325.980639 179.323338) + (xy 325.961766 179.362537) (xy 325.961442 179.363339) (xy 325.954018 179.37881) (xy 325.905901 179.554954) + (xy 325.905901 179.554956) (xy 325.893852 179.69698) (xy 325.891102 179.729403) (xy 325.890465 179.736906) + (xy 312.0465 179.736906) (xy 312.0465 177.598998) (xy 312.066185 177.531959) (xy 312.118989 177.486204) + (xy 312.122967 177.484471) (xy 312.263179 177.426394) (xy 312.394289 177.338789) (xy 312.505789 177.227289) + (xy 312.593394 177.096179) (xy 312.630397 177.006846) (xy 312.653736 176.9505) (xy 312.653737 176.950497) + (xy 312.6845 176.795842) (xy 312.6845 176.638158) (xy 312.6845 176.638155) (xy 312.684499 176.638153) + (xy 312.675637 176.5936) (xy 312.653737 176.483503) (xy 312.643447 176.45866) (xy 312.593397 176.337827) + (xy 312.59339 176.337814) (xy 312.505789 176.206711) (xy 312.505786 176.206707) (xy 312.394292 176.095213) + (xy 312.394288 176.09521) (xy 312.263185 176.007609) (xy 312.263172 176.007602) (xy 312.117501 175.947264) + (xy 312.117489 175.947261) (xy 311.962845 175.9165) (xy 311.962842 175.9165) (xy 311.805158 175.9165) + (xy 311.805155 175.9165) (xy 311.65051 175.947261) (xy 311.650498 175.947264) (xy 311.504827 176.007602) + (xy 311.504814 176.007609) (xy 311.373711 176.09521) (xy 311.373707 176.095213) (xy 311.262213 176.206707) + (xy 311.26221 176.206711) (xy 311.174609 176.337814) (xy 311.174602 176.337827) (xy 311.114264 176.483498) + (xy 311.11426 176.483512) (xy 311.111565 176.49706) (xy 311.079178 176.55897) (xy 311.018461 176.593542) + (xy 310.948691 176.589799) (xy 310.923737 176.577706) (xy 310.89998 176.562702) (xy 310.899977 176.562701) + (xy 310.730487 176.494758) (xy 310.730477 176.494756) (xy 310.551492 176.458618) (xy 310.551499 176.458618) + (xy 310.379794 176.455665) (xy 310.368918 176.455478) (xy 310.368917 176.455478) (xy 310.368914 176.455478) + (xy 310.188797 176.485438) (xy 310.188784 176.485441) (xy 310.017063 176.547513) (xy 310.002548 176.55597) + (xy 310.002463 176.556019) (xy 309.995376 176.56014) (xy 309.99513 176.560208) (xy 309.967338 176.576444) + (xy 309.96709 176.576589) (xy 309.964363 176.577259) (xy 309.904746 176.593396) (xy 309.864401 176.593393) + (xy 309.864297 176.5934) (xy 308.423596 176.5934) (xy 308.415414 176.593398) (xy 308.415392 176.593393) + (xy 308.385465 176.593395) (xy 308.383228 176.593395) (xy 308.382946 176.593312) (xy 308.320693 176.576462) + (xy 308.292871 176.560208) (xy 308.286805 176.556664) (xy 308.285107 176.555817) (xy 308.277757 176.551534) + (xy 308.270921 176.54755) (xy 308.099197 176.485478) (xy 308.099191 176.485477) (xy 307.919081 176.455519) + (xy 307.919078 176.455519) (xy 307.910539 176.455665) (xy 307.736507 176.458659) (xy 307.557534 176.494794) + (xy 307.557523 176.494797) (xy 307.388042 176.562737) (xy 307.388041 176.562737) (xy 307.233661 176.660232) + (xy 307.233658 176.660234) (xy 307.099467 176.784073) (xy 306.989915 176.930154) (xy 306.90862 177.093644) + (xy 306.908619 177.093647) (xy 306.908618 177.09365) (xy 306.883438 177.181406) (xy 306.858258 177.269165) + (xy 306.840579 177.450125) (xy 306.840504 177.450893) (xy 306.841472 177.462297) (xy 306.855257 177.624794) + (xy 306.85594 177.632835) (xy 306.888797 177.753117) (xy 306.904056 177.808978) (xy 306.90406 177.808988) + (xy 306.911298 177.82407) (xy 306.91134 177.824156) (xy 306.914923 177.831638) (xy 306.914981 177.83194) + (xy 306.931297 177.865825) (xy 306.931336 177.865906) (xy 306.931481 177.8668) (xy 306.943501 177.919469) + (xy 306.943501 179.268322) (xy 306.931307 179.321945) (xy 306.930719 179.323171) (xy 306.930639 179.323338) + (xy 306.911766 179.362537) (xy 306.911442 179.363339) (xy 306.904018 179.37881) (xy 306.855901 179.554954) + (xy 306.855901 179.554956) (xy 306.843852 179.69698) (xy 306.841102 179.729403) (xy 306.840465 179.736906) + (xy 292.397497 179.736906) (xy 292.397497 179.736903) (xy 292.38206 179.55496) (xy 292.382058 179.554954) + (xy 292.37131 179.515606) (xy 292.333943 179.378818) (xy 292.326279 179.362849) (xy 292.323096 179.356204) + (xy 292.323048 179.355946) (xy 292.306671 179.321919) (xy 292.306543 179.32113) (xy 292.294502 179.268331) + (xy 292.294502 179.268322) (xy 292.294507 179.230908) (xy 292.294506 179.230904) (xy 292.294507 179.222898) + (xy 292.294499 179.22276) (xy 292.294499 177.919477) (xy 292.297154 177.907808) (xy 292.29612 177.899494) + (xy 292.306705 177.865828) (xy 292.313011 177.85269) (xy 292.323074 177.831774) (xy 292.323074 177.831769) + (xy 292.32646 177.824733) (xy 292.326625 177.824322) (xy 292.326746 177.82407) (xy 292.333983 177.808991) + (xy 292.3821 177.632842) (xy 292.397537 177.450893) (xy 292.379781 177.269155) (xy 292.32942 177.093634) + (xy 292.248118 176.93013) (xy 292.147412 176.795846) (xy 292.138562 176.784045) (xy 292.129227 176.77543) + (xy 292.004369 176.660204) (xy 292.004366 176.660202) (xy 292.004365 176.660201) (xy 292.004362 176.660199) + (xy 291.849977 176.562701) (xy 291.680487 176.494758) (xy 291.680477 176.494756) (xy 291.501492 176.458618) + (xy 291.501499 176.458618) (xy 291.329794 176.455665) (xy 291.318918 176.455478) (xy 291.318917 176.455478) + (xy 291.318914 176.455478) (xy 291.138797 176.485438) (xy 291.138784 176.485441) (xy 290.967063 176.547513) + (xy 290.952548 176.55597) (xy 290.952463 176.556019) (xy 290.945376 176.56014) (xy 290.94513 176.560208) + (xy 290.917338 176.576444) (xy 290.91709 176.576589) (xy 290.914363 176.577259) (xy 290.854746 176.593396) + (xy 290.814401 176.593393) (xy 290.814297 176.5934) (xy 289.373596 176.5934) (xy 289.365414 176.593398) + (xy 289.365392 176.593393) (xy 289.335465 176.593395) (xy 289.333228 176.593395) (xy 289.332946 176.593312) + (xy 289.270693 176.576462) (xy 289.242871 176.560208) (xy 289.236805 176.556664) (xy 289.235107 176.555817) + (xy 289.227757 176.551534) (xy 289.220921 176.54755) (xy 289.049197 176.485478) (xy 289.049191 176.485477) + (xy 288.869081 176.455519) (xy 288.869078 176.455519) (xy 288.860539 176.455665) (xy 288.686507 176.458659) + (xy 288.507534 176.494794) (xy 288.507523 176.494797) (xy 288.338042 176.562737) (xy 288.338041 176.562737) + (xy 288.183661 176.660232) (xy 288.183658 176.660234) (xy 288.049467 176.784073) (xy 287.939915 176.930154) + (xy 287.85862 177.093644) (xy 287.858619 177.093647) (xy 287.858618 177.09365) (xy 287.833438 177.181406) + (xy 287.808258 177.269165) (xy 287.790579 177.450125) (xy 287.790504 177.450893) (xy 287.791472 177.462297) + (xy 287.805257 177.624794) (xy 287.80594 177.632835) (xy 287.838797 177.753117) (xy 287.854056 177.808978) + (xy 287.85406 177.808988) (xy 287.861298 177.82407) (xy 287.86134 177.824156) (xy 287.864923 177.831638) + (xy 287.864981 177.83194) (xy 287.881297 177.865825) (xy 287.881336 177.865906) (xy 287.881481 177.8668) + (xy 287.893501 177.919469) (xy 287.893501 179.268322) (xy 287.881307 179.321945) (xy 287.880719 179.323171) + (xy 287.880639 179.323338) (xy 287.861766 179.362537) (xy 287.861442 179.363339) (xy 287.854018 179.37881) + (xy 287.805901 179.554954) (xy 287.805901 179.554956) (xy 287.793852 179.69698) (xy 287.791102 179.729403) + (xy 287.790465 179.736906) (xy 276.712985 179.736906) (xy 276.635292 179.659213) (xy 276.635288 179.65921) + (xy 276.504185 179.571609) (xy 276.504172 179.571602) (xy 276.358501 179.511264) (xy 276.358489 179.511261) + (xy 276.203845 179.4805) (xy 276.203842 179.4805) (xy 276.046158 179.4805) (xy 276.046155 179.4805) + (xy 275.984691 179.492726) (xy 275.9151 179.486499) (xy 275.859922 179.443636) (xy 275.836678 179.377746) + (xy 275.8365 179.371109) (xy 275.8365 177.783075) (xy 275.856185 177.716036) (xy 275.908989 177.670281) + (xy 275.912999 177.668534) (xy 275.988179 177.637394) (xy 276.119289 177.549789) (xy 276.230789 177.438289) + (xy 276.318394 177.307179) (xy 276.324396 177.29269) (xy 276.340748 177.253211) (xy 276.378737 177.161497) + (xy 276.4095 177.006842) (xy 276.4095 176.849158) (xy 276.4095 176.849155) (xy 276.409499 176.849153) + (xy 276.403061 176.816789) (xy 276.378737 176.694503) (xy 276.378735 176.694498) (xy 276.318397 176.548827) + (xy 276.31839 176.548814) (xy 276.230789 176.417711) (xy 276.230786 176.417707) (xy 276.119292 176.306213) + (xy 276.119288 176.30621) (xy 275.988185 176.218609) (xy 275.988172 176.218602) (xy 275.842501 176.158264) + (xy 275.842489 176.158261) (xy 275.687845 176.1275) (xy 275.687842 176.1275) (xy 275.530158 176.1275) + (xy 275.530155 176.1275) (xy 275.37551 176.158261) (xy 275.375498 176.158264) (xy 275.229827 176.218602) + (xy 275.229814 176.218609) (xy 275.098711 176.30621) (xy 275.098707 176.306213) (xy 274.987213 176.417707) + (xy 274.98721 176.417711) (xy 274.899609 176.548814) (xy 274.899602 176.548827) (xy 274.839264 176.694498) + (xy 274.839261 176.69451) (xy 274.8085 176.849153) (xy 272.885789 176.849153) (xy 272.845812 176.795846) + (xy 272.836962 176.784045) (xy 272.827627 176.77543) (xy 272.702769 176.660204) (xy 272.702766 176.660202) + (xy 272.702765 176.660201) (xy 272.702762 176.660199) (xy 272.548377 176.562701) (xy 272.378887 176.494758) + (xy 272.378877 176.494756) (xy 272.199892 176.458618) (xy 272.199899 176.458618) (xy 272.028194 176.455665) + (xy 272.017318 176.455478) (xy 272.017317 176.455478) (xy 272.017314 176.455478) (xy 271.837197 176.485438) + (xy 271.837184 176.485441) (xy 271.665463 176.547513) (xy 271.650948 176.55597) (xy 271.650863 176.556019) + (xy 271.643776 176.56014) (xy 271.64353 176.560208) (xy 271.615738 176.576444) (xy 271.61549 176.576589) + (xy 271.612763 176.577259) (xy 271.553146 176.593396) (xy 271.512801 176.593393) (xy 271.512697 176.5934) + (xy 270.071996 176.5934) (xy 270.063814 176.593398) (xy 270.063792 176.593393) (xy 270.033865 176.593395) + (xy 270.031628 176.593395) (xy 270.031346 176.593312) (xy 269.969093 176.576462) (xy 269.941271 176.560208) + (xy 269.935205 176.556664) (xy 269.933507 176.555817) (xy 269.926157 176.551534) (xy 269.919321 176.54755) + (xy 269.747597 176.485478) (xy 269.747591 176.485477) (xy 269.567481 176.455519) (xy 269.567478 176.455519) + (xy 269.558939 176.455665) (xy 269.384907 176.458659) (xy 269.205934 176.494794) (xy 269.205923 176.494797) + (xy 269.036442 176.562737) (xy 269.036441 176.562737) (xy 268.882061 176.660232) (xy 268.882058 176.660234) + (xy 268.747867 176.784073) (xy 268.638315 176.930154) (xy 268.55702 177.093644) (xy 268.557019 177.093647) + (xy 268.557018 177.09365) (xy 268.531838 177.181406) (xy 268.506658 177.269165) (xy 268.488979 177.450125) + (xy 268.488904 177.450893) (xy 268.489872 177.462297) (xy 268.503657 177.624794) (xy 268.50434 177.632835) + (xy 268.537197 177.753117) (xy 268.552456 177.808978) (xy 268.55246 177.808988) (xy 268.559698 177.82407) + (xy 268.55974 177.824156) (xy 268.563323 177.831638) (xy 268.563381 177.83194) (xy 268.579697 177.865825) + (xy 268.579736 177.865906) (xy 268.579881 177.8668) (xy 268.591901 177.919469) (xy 268.591901 179.268322) + (xy 268.579707 179.321945) (xy 268.579119 179.323171) (xy 268.579039 179.323338) (xy 268.560166 179.362537) + (xy 268.559842 179.363339) (xy 268.552419 179.378808) (xy 268.543526 179.411364) (xy 268.506871 179.470847) + (xy 268.443877 179.50107) (xy 268.376458 179.49325) (xy 268.303329 179.46296) (xy 268.284747 179.455263) + (xy 268.284743 179.455262) (xy 268.284739 179.455261) (xy 268.130095 179.4245) (xy 268.130092 179.4245) + (xy 267.972408 179.4245) (xy 267.972405 179.4245) (xy 267.81776 179.455261) (xy 267.817748 179.455264) + (xy 267.672077 179.515602) (xy 267.672064 179.515609) (xy 267.540961 179.60321) (xy 267.540957 179.603213) + (xy 267.429463 179.714707) (xy 267.42946 179.714711) (xy 267.341859 179.845814) (xy 267.341852 179.845827) + (xy 267.281514 179.991498) (xy 267.281511 179.99151) (xy 267.25075 180.146153) (xy 253.951925 180.146153) + (xy 253.977784 180.094148) (xy 254.028142 179.918633) (xy 254.045897 179.736903) (xy 254.03046 179.55496) + (xy 254.030458 179.554954) (xy 254.01971 179.515606) (xy 253.982343 179.378818) (xy 253.974679 179.362849) + (xy 253.971496 179.356204) (xy 253.971448 179.355946) (xy 253.955071 179.321919) (xy 253.954943 179.32113) + (xy 253.942902 179.268331) (xy 253.942902 179.268322) (xy 253.942907 179.230908) (xy 253.942906 179.230904) + (xy 253.942907 179.222898) (xy 253.942899 179.22276) (xy 253.942899 177.919477) (xy 253.945554 177.907808) + (xy 253.94452 177.899494) (xy 253.955105 177.865828) (xy 253.961411 177.85269) (xy 253.971474 177.831774) + (xy 253.971474 177.831769) (xy 253.97486 177.824733) (xy 253.975025 177.824322) (xy 253.975146 177.82407) + (xy 253.982383 177.808991) (xy 254.0305 177.632842) (xy 254.045937 177.450893) (xy 254.028181 177.269155) + (xy 253.97782 177.093634) (xy 253.896518 176.93013) (xy 253.82634 176.836553) (xy 254.3227 176.836553) + (xy 254.3227 176.994246) (xy 254.353461 177.148889) (xy 254.353464 177.148901) (xy 254.413802 177.294572) + (xy 254.413809 177.294585) (xy 254.50141 177.425688) (xy 254.501413 177.425692) (xy 254.612907 177.537186) + (xy 254.612911 177.537189) (xy 254.744014 177.62479) (xy 254.744027 177.624797) (xy 254.889698 177.685135) + (xy 254.889703 177.685137) (xy 255.026531 177.712354) (xy 255.044353 177.715899) (xy 255.044356 177.7159) + (xy 255.044358 177.7159) (xy 255.202044 177.7159) (xy 255.202045 177.715899) (xy 255.356697 177.685137) + (xy 255.471969 177.63739) (xy 255.502372 177.624797) (xy 255.502372 177.624796) (xy 255.502379 177.624794) + (xy 255.633489 177.537189) (xy 255.744989 177.425689) (xy 255.832594 177.294579) (xy 255.833377 177.29269) + (xy 255.881232 177.177155) (xy 255.892937 177.148897) (xy 255.9237 176.994242) (xy 255.9237 176.836558) + (xy 255.9237 176.836555) (xy 255.923699 176.836553) (xy 255.9133 176.784273) (xy 255.892937 176.681903) + (xy 255.890486 176.675986) (xy 255.832597 176.536227) (xy 255.83259 176.536214) (xy 255.744989 176.405111) + (xy 255.744986 176.405107) (xy 255.633492 176.293613) (xy 255.633488 176.29361) (xy 255.502385 176.206009) + (xy 255.502372 176.206002) (xy 255.356701 176.145664) (xy 255.356689 176.145661) (xy 255.202045 176.1149) + (xy 255.202042 176.1149) (xy 255.044358 176.1149) (xy 255.044355 176.1149) (xy 254.88971 176.145661) + (xy 254.889698 176.145664) (xy 254.744027 176.206002) (xy 254.744014 176.206009) (xy 254.612911 176.29361) + (xy 254.612907 176.293613) (xy 254.501413 176.405107) (xy 254.50141 176.405111) (xy 254.413809 176.536214) + (xy 254.413802 176.536227) (xy 254.353464 176.681898) (xy 254.353461 176.68191) (xy 254.3227 176.836553) + (xy 253.82634 176.836553) (xy 253.795812 176.795846) (xy 253.786962 176.784045) (xy 253.777627 176.77543) + (xy 253.652769 176.660204) (xy 253.652766 176.660202) (xy 253.652765 176.660201) (xy 253.652762 176.660199) + (xy 253.498377 176.562701) (xy 253.328887 176.494758) (xy 253.328877 176.494756) (xy 253.149892 176.458618) + (xy 253.149899 176.458618) (xy 252.978194 176.455665) (xy 252.967318 176.455478) (xy 252.967317 176.455478) + (xy 252.967314 176.455478) (xy 252.787197 176.485438) (xy 252.787184 176.485441) (xy 252.615463 176.547513) + (xy 252.600948 176.55597) (xy 252.600863 176.556019) (xy 252.593776 176.56014) (xy 252.59353 176.560208) + (xy 252.565738 176.576444) (xy 252.56549 176.576589) (xy 252.562763 176.577259) (xy 252.503146 176.593396) + (xy 252.462801 176.593393) (xy 252.462697 176.5934) (xy 251.021996 176.5934) (xy 251.013814 176.593398) + (xy 251.013792 176.593393) (xy 250.983865 176.593395) (xy 250.981628 176.593395) (xy 250.981346 176.593312) + (xy 250.919093 176.576462) (xy 250.891271 176.560208) (xy 250.885205 176.556664) (xy 250.883507 176.555817) + (xy 250.876157 176.551534) (xy 250.869321 176.54755) (xy 250.697597 176.485478) (xy 250.697591 176.485477) + (xy 250.517481 176.455519) (xy 250.517478 176.455519) (xy 250.508939 176.455665) (xy 250.334907 176.458659) + (xy 250.155934 176.494794) (xy 250.155923 176.494797) (xy 249.986442 176.562737) (xy 249.986441 176.562737) + (xy 249.832061 176.660232) (xy 249.832058 176.660234) (xy 249.697867 176.784073) (xy 249.588315 176.930154) + (xy 249.50702 177.093644) (xy 249.507019 177.093647) (xy 249.507018 177.09365) (xy 249.481838 177.181406) + (xy 249.456658 177.269165) (xy 249.438979 177.450125) (xy 249.438904 177.450893) (xy 249.439872 177.462297) + (xy 249.453657 177.624794) (xy 249.45434 177.632835) (xy 249.487197 177.753117) (xy 249.502456 177.808978) + (xy 249.50246 177.808988) (xy 249.509698 177.82407) (xy 249.50974 177.824156) (xy 249.513323 177.831638) + (xy 249.513381 177.83194) (xy 249.529697 177.865825) (xy 249.529736 177.865906) (xy 249.529881 177.8668) + (xy 249.541901 177.919469) (xy 249.541901 179.268322) (xy 249.529707 179.321945) (xy 249.529119 179.323171) + (xy 249.529039 179.323338) (xy 249.510166 179.362537) (xy 249.509842 179.363339) (xy 249.502418 179.37881) + (xy 249.454301 179.554954) (xy 249.454301 179.554956) (xy 249.442252 179.69698) (xy 249.439502 179.729403) + (xy 249.438865 179.736906) (xy 193.3335 179.736906) (xy 193.3335 166.705768) (xy 230.46955 166.705768) + (xy 230.46955 166.986631) (xy 230.500992 167.265694) (xy 230.500995 167.265712) (xy 230.563489 167.539517) + (xy 230.563493 167.539529) (xy 230.65625 167.804611) (xy 230.778103 168.057642) (xy 230.790269 168.077004) + (xy 230.927527 168.295448) (xy 231.102634 168.515025) (xy 231.301225 168.713616) (xy 231.520802 168.888723) + (xy 231.758605 169.038145) (xy 232.011642 169.160001) (xy 232.129291 169.201168) (xy 232.27672 169.252756) + (xy 232.276732 169.25276) (xy 232.550541 169.315255) (xy 232.550547 169.315255) (xy 232.550555 169.315257) + (xy 232.736597 169.336218) (xy 232.829619 169.346699) (xy 232.829622 169.3467) (xy 232.829625 169.3467) + (xy 233.110478 169.3467) (xy 233.110479 169.346699) (xy 233.261204 169.329717) (xy 233.389544 169.315257) + (xy 233.389549 169.315256) (xy 233.389559 169.315255) (xy 233.663368 169.25276) (xy 233.928458 169.160001) + (xy 234.181495 169.038145) (xy 234.419298 168.888723) (xy 234.638875 168.713616) (xy 234.837466 168.515025) + (xy 235.012573 168.295448) (xy 235.161995 168.057645) (xy 235.283851 167.804608) (xy 235.37661 167.539518) + (xy 235.439105 167.265709) (xy 235.442981 167.231314) (xy 235.467028 167.017881) (xy 235.47055 166.986625) + (xy 235.47055 166.705775) (xy 235.458711 166.6007) (xy 235.439107 166.426705) (xy 235.439104 166.426687) + (xy 235.37661 166.152882) (xy 235.376606 166.15287) (xy 235.332096 166.025669) (xy 235.283851 165.887792) + (xy 235.161995 165.634755) (xy 235.012573 165.396952) (xy 234.837466 165.177375) (xy 234.638875 164.978784) + (xy 234.419298 164.803677) (xy 234.237711 164.689578) (xy 234.181492 164.654253) (xy 233.928461 164.5324) + (xy 233.663379 164.439643) (xy 233.663367 164.439639) (xy 233.389562 164.377145) (xy 233.389544 164.377142) + (xy 233.110481 164.3457) (xy 233.110475 164.3457) (xy 232.829625 164.3457) (xy 232.829618 164.3457) + (xy 232.550555 164.377142) (xy 232.550537 164.377145) (xy 232.276732 164.439639) (xy 232.27672 164.439643) + (xy 232.011638 164.5324) (xy 231.758607 164.654253) (xy 231.520803 164.803676) (xy 231.301225 164.978783) + (xy 231.102633 165.177375) (xy 230.927526 165.396953) (xy 230.778103 165.634757) (xy 230.65625 165.887788) + (xy 230.563493 166.15287) (xy 230.563489 166.152882) (xy 230.500995 166.426687) (xy 230.500992 166.426705) + (xy 230.46955 166.705768) (xy 193.3335 166.705768) (xy 193.3335 162.203553) (xy 194.6427 162.203553) + (xy 194.6427 162.361246) (xy 194.673461 162.515889) (xy 194.673464 162.515901) (xy 194.733802 162.661572) + (xy 194.733809 162.661585) (xy 194.82141 162.792688) (xy 194.821413 162.792692) (xy 194.932907 162.904186) + (xy 194.932911 162.904189) (xy 195.064014 162.99179) (xy 195.064027 162.991797) (xy 195.209698 163.052135) + (xy 195.209703 163.052137) (xy 195.329846 163.076035) (xy 195.364353 163.082899) (xy 195.364356 163.0829) + (xy 195.364358 163.0829) (xy 195.522044 163.0829) (xy 195.522045 163.082899) (xy 195.676697 163.052137) + (xy 195.822379 162.991794) (xy 195.953489 162.904189) (xy 196.064989 162.792689) (xy 196.152594 162.661579) + (xy 196.160793 162.641786) (xy 196.175129 162.607175) (xy 196.212937 162.515897) (xy 196.2437 162.361242) + (xy 196.2437 162.203558) (xy 196.2437 162.203555) (xy 196.240657 162.188258) (xy 196.240657 162.188257) + (xy 196.237056 162.170153) (xy 221.4985 162.170153) (xy 221.4985 162.327846) (xy 221.529261 162.482489) + (xy 221.529264 162.482501) (xy 221.589602 162.628172) (xy 221.589609 162.628185) (xy 221.67721 162.759288) + (xy 221.677213 162.759292) (xy 221.788707 162.870786) (xy 221.788711 162.870789) (xy 221.919814 162.95839) + (xy 221.919827 162.958397) (xy 222.058147 163.01569) (xy 222.065503 163.018737) (xy 222.220153 163.049499) + (xy 222.220156 163.0495) (xy 222.220158 163.0495) (xy 222.377844 163.0495) (xy 222.377845 163.049499) + (xy 222.532497 163.018737) (xy 222.678179 162.958394) (xy 222.809289 162.870789) (xy 222.920789 162.759289) + (xy 223.008394 162.628179) (xy 223.068737 162.482497) (xy 223.0995 162.327842) (xy 223.0995 162.170158) + (xy 223.0995 162.170155) (xy 223.099499 162.170153) (xy 223.085315 162.098846) (xy 223.068737 162.015503) + (xy 223.037943 161.941158) (xy 223.008397 161.869827) (xy 223.00839 161.869814) (xy 222.920789 161.738711) + (xy 222.920786 161.738707) (xy 222.809292 161.627213) (xy 222.809288 161.62721) (xy 222.678185 161.539609) + (xy 222.678175 161.539604) (xy 222.603047 161.508485) (xy 222.548644 161.464644) (xy 222.526579 161.39835) + (xy 222.5265 161.393924) (xy 222.5265 160.686806) (xy 235.151365 160.686806) (xy 235.168797 160.865233) + (xy 235.169121 160.868542) (xy 235.191272 160.945746) (xy 235.21948 161.044061) (xy 235.30078 161.207563) + (xy 235.300781 161.207565) (xy 235.300783 161.207568) (xy 235.363108 161.290674) (xy 235.410338 161.353652) + (xy 235.410339 161.353653) (xy 235.41034 161.353654) (xy 235.544532 161.477495) (xy 235.607386 161.517188) + (xy 235.653556 161.569626) (xy 235.664047 161.638704) (xy 235.655734 161.669482) (xy 235.607264 161.786498) + (xy 235.607261 161.78651) (xy 235.5765 161.941153) (xy 235.5765 162.098846) (xy 235.607261 162.253489) + (xy 235.607264 162.253501) (xy 235.667602 162.399172) (xy 235.667609 162.399185) (xy 235.75521 162.530288) + (xy 235.755213 162.530292) (xy 235.866707 162.641786) (xy 235.866711 162.641789) (xy 235.997814 162.72939) + (xy 235.997827 162.729397) (xy 236.103306 162.773087) (xy 236.143503 162.789737) (xy 236.298153 162.820499) + (xy 236.298156 162.8205) (xy 236.298158 162.8205) (xy 236.455844 162.8205) (xy 236.455845 162.820499) + (xy 236.610497 162.789737) (xy 236.756179 162.729394) (xy 236.887289 162.641789) (xy 236.998789 162.530289) + (xy 237.086394 162.399179) (xy 237.092208 162.385144) (xy 237.113033 162.334867) (xy 237.146737 162.253497) + (xy 237.1775 162.098842) (xy 237.1775 161.941158) (xy 237.1775 161.941155) (xy 237.177499 161.941153) + (xy 237.163309 161.869814) (xy 237.146737 161.786503) (xy 237.129559 161.745031) (xy 237.117431 161.715751) + (xy 237.109962 161.646282) (xy 237.141237 161.583803) (xy 237.201326 161.548151) (xy 237.231992 161.544299) + (xy 238.175301 161.544299) (xy 238.183484 161.544299) (xy 238.183508 161.544306) (xy 238.215665 161.544302) + (xy 238.215945 161.544384) (xy 238.278204 161.561234) (xy 238.30603 161.577491) (xy 238.306032 161.577491) + (xy 238.31218 161.581083) (xy 238.313835 161.581908) (xy 238.327978 161.59015) (xy 238.4997 161.652221) + (xy 238.679821 161.682182) (xy 238.859498 161.67909) (xy 238.862391 161.679041) (xy 239.041366 161.642905) + (xy 239.041369 161.642903) (xy 239.041374 161.642903) (xy 239.21086 161.574962) (xy 239.365246 161.477463) + (xy 239.379137 161.464644) (xy 239.49943 161.35363) (xy 239.499432 161.353628) (xy 239.499433 161.353627) + (xy 239.608985 161.207547) (xy 239.690284 161.044048) (xy 239.740642 160.868533) (xy 239.758397 160.686803) + (xy 239.74296 160.50486) (xy 239.742958 160.504854) (xy 239.721901 160.427771) (xy 239.694843 160.328718) + (xy 239.687083 160.312549) (xy 239.683996 160.306104) (xy 239.683948 160.305846) (xy 239.667571 160.271819) + (xy 239.667443 160.27103) (xy 239.655402 160.218231) (xy 239.655402 160.218042) (xy 239.655407 160.180808) + (xy 239.655406 160.180804) (xy 239.655407 160.172798) (xy 239.655399 160.17266) (xy 239.655399 158.869378) + (xy 239.658053 158.857712) (xy 239.657019 158.849399) (xy 239.667603 158.815734) (xy 239.673918 158.802576) + (xy 239.673998 158.802487) (xy 239.673968 158.802473) (xy 239.673969 158.802471) (xy 239.683974 158.781674) + (xy 239.683974 158.781668) (xy 239.687355 158.774642) (xy 239.687517 158.774238) (xy 239.694883 158.758891) + (xy 239.743 158.582742) (xy 239.758437 158.400793) (xy 239.740681 158.219055) (xy 239.69032 158.043534) + (xy 239.609018 157.88003) (xy 239.522627 157.764834) (xy 239.499462 157.733945) (xy 239.476492 157.712747) + (xy 239.365269 157.610104) (xy 239.365266 157.610102) (xy 239.365265 157.610101) (xy 239.365262 157.610099) + (xy 239.210877 157.512601) (xy 239.041387 157.444658) (xy 239.041377 157.444656) (xy 238.862392 157.408518) + (xy 238.862399 157.408518) (xy 238.690694 157.405565) (xy 238.679818 157.405378) (xy 238.679817 157.405378) + (xy 238.679814 157.405378) (xy 238.499697 157.435338) (xy 238.499684 157.435341) (xy 238.327963 157.497413) + (xy 238.313448 157.50587) (xy 238.313363 157.505919) (xy 238.306276 157.51004) (xy 238.30603 157.510108) + (xy 238.278238 157.526344) (xy 238.27799 157.526489) (xy 238.275263 157.527159) (xy 238.215646 157.543296) + (xy 238.175301 157.543293) (xy 238.175197 157.5433) (xy 236.734496 157.5433) (xy 236.726314 157.543298) + (xy 236.726292 157.543293) (xy 236.696365 157.543295) (xy 236.694128 157.543295) (xy 236.693846 157.543212) + (xy 236.631593 157.526362) (xy 236.603771 157.510108) (xy 236.597705 157.506564) (xy 236.596007 157.505717) + (xy 236.588657 157.501434) (xy 236.581821 157.49745) (xy 236.410097 157.435378) (xy 236.410091 157.435377) + (xy 236.229981 157.405419) (xy 236.229978 157.405419) (xy 236.221439 157.405565) (xy 236.047407 157.408559) + (xy 235.868434 157.444694) (xy 235.868423 157.444697) (xy 235.698942 157.512637) (xy 235.698941 157.512637) + (xy 235.544561 157.610132) (xy 235.544558 157.610134) (xy 235.410367 157.733973) (xy 235.300815 157.880054) + (xy 235.21952 158.043544) (xy 235.219519 158.043547) (xy 235.219518 158.04355) (xy 235.194338 158.131306) + (xy 235.169158 158.219065) (xy 235.152311 158.39151) (xy 235.151404 158.400793) (xy 235.153305 158.423202) + (xy 235.166404 158.577606) (xy 235.16684 158.582735) (xy 235.202907 158.714769) (xy 235.214956 158.758878) + (xy 235.21496 158.758888) (xy 235.222198 158.77397) (xy 235.22224 158.774056) (xy 235.225823 158.781538) + (xy 235.225881 158.78184) (xy 235.242236 158.815806) (xy 235.242381 158.8167) (xy 235.254401 158.869369) + (xy 235.254401 160.218222) (xy 235.242207 160.271845) (xy 235.241619 160.273071) (xy 235.241539 160.273238) + (xy 235.222666 160.312437) (xy 235.222342 160.313239) (xy 235.214918 160.32871) (xy 235.166801 160.504854) + (xy 235.166801 160.504856) (xy 235.151365 160.686806) (xy 222.5265 160.686806) (xy 222.5265 159.760272) + (xy 222.546185 159.693233) (xy 222.598989 159.647478) (xy 222.668147 159.637534) (xy 222.674682 159.638653) + (xy 222.701494 159.643986) (xy 222.719157 159.6475) (xy 222.719158 159.6475) (xy 222.876844 159.6475) + (xy 222.876845 159.647499) (xy 223.031497 159.616737) (xy 223.177179 159.556394) (xy 223.308289 159.468789) + (xy 223.419789 159.357289) (xy 223.507394 159.226179) (xy 223.514859 159.208158) (xy 223.54504 159.135292) + (xy 223.567737 159.080497) (xy 223.5985 158.925842) (xy 223.5985 158.768158) (xy 223.5985 158.768155) + (xy 223.598499 158.768153) (xy 223.595327 158.752206) (xy 223.567737 158.613503) (xy 223.563916 158.604278) + (xy 223.507397 158.467827) (xy 223.50739 158.467814) (xy 223.419789 158.336711) (xy 223.419786 158.336707) + (xy 223.308292 158.225213) (xy 223.308288 158.22521) (xy 223.177185 158.137609) (xy 223.177172 158.137602) + (xy 223.031501 158.077264) (xy 223.031489 158.077261) (xy 222.876845 158.0465) (xy 222.876842 158.0465) + (xy 222.719158 158.0465) (xy 222.719155 158.0465) (xy 222.56451 158.077261) (xy 222.564498 158.077264) + (xy 222.418827 158.137602) (xy 222.418814 158.137609) (xy 222.287711 158.22521) (xy 222.287707 158.225213) + (xy 222.176213 158.336707) (xy 222.17621 158.336711) (xy 222.088609 158.467814) (xy 222.088602 158.467827) + (xy 222.028264 158.613498) (xy 222.028261 158.61351) (xy 221.9975 158.768153) (xy 221.9975 158.925846) + (xy 222.028261 159.080489) (xy 222.028263 159.080497) (xy 222.075841 159.195361) (xy 222.08331 159.26483) + (xy 222.075842 159.290264) (xy 222.0715 159.300745) (xy 222.0715 161.393924) (xy 222.051815 161.460963) + (xy 221.999011 161.506718) (xy 221.994953 161.508485) (xy 221.919824 161.539604) (xy 221.919814 161.539609) + (xy 221.788711 161.62721) (xy 221.788707 161.627213) (xy 221.677213 161.738707) (xy 221.67721 161.738711) + (xy 221.589609 161.869814) (xy 221.589602 161.869827) (xy 221.529264 162.015498) (xy 221.529261 162.01551) + (xy 221.4985 162.170153) (xy 196.237056 162.170153) (xy 196.21769 162.072798) (xy 196.212937 162.048903) + (xy 196.199105 162.01551) (xy 196.152597 161.903227) (xy 196.15259 161.903214) (xy 196.064989 161.772111) + (xy 196.064986 161.772107) (xy 195.953492 161.660613) (xy 195.953488 161.66061) (xy 195.822385 161.573009) + (xy 195.822372 161.573002) (xy 195.676701 161.512664) (xy 195.676689 161.512661) (xy 195.522045 161.4819) + (xy 195.522042 161.4819) (xy 195.364358 161.4819) (xy 195.364355 161.4819) (xy 195.20971 161.512661) + (xy 195.209698 161.512664) (xy 195.064027 161.573002) (xy 195.064014 161.573009) (xy 194.932911 161.66061) + (xy 194.932907 161.660613) (xy 194.821413 161.772107) (xy 194.82141 161.772111) (xy 194.733809 161.903214) + (xy 194.733802 161.903227) (xy 194.673464 162.048898) (xy 194.673461 162.04891) (xy 194.6427 162.203553) + (xy 193.3335 162.203553) (xy 193.3335 160.686806) (xy 197.051265 160.686806) (xy 197.068697 160.865233) + (xy 197.069021 160.868542) (xy 197.091172 160.945746) (xy 197.11938 161.044061) (xy 197.20068 161.207563) + (xy 197.200681 161.207565) (xy 197.200683 161.207568) (xy 197.263008 161.290674) (xy 197.310238 161.353652) + (xy 197.310239 161.353653) (xy 197.31024 161.353654) (xy 197.444432 161.477495) (xy 197.598825 161.574997) + (xy 197.729077 161.62721) (xy 197.768314 161.642939) (xy 197.768315 161.642939) (xy 197.768317 161.64294) + (xy 197.947308 161.679079) (xy 197.947302 161.679079) (xy 197.963622 161.679359) (xy 198.129884 161.68222) + (xy 198.310012 161.652258) (xy 198.365507 161.632198) (xy 198.481736 161.590185) (xy 198.481737 161.590183) + (xy 198.48174 161.590183) (xy 198.496775 161.58142) (xy 198.503459 161.577535) (xy 198.50375 161.577457) + (xy 198.531633 161.56116) (xy 198.531751 161.561092) (xy 198.534968 161.560301) (xy 198.594062 161.544299) + (xy 200.075192 161.544299) (xy 200.075314 161.544306) (xy 200.083405 161.544305) (xy 200.083408 161.544306) + (xy 200.115542 161.544302) (xy 200.178104 161.561234) (xy 200.20593 161.577491) (xy 200.205932 161.577491) + (xy 200.21208 161.581083) (xy 200.213735 161.581908) (xy 200.227878 161.59015) (xy 200.3996 161.652221) + (xy 200.579721 161.682182) (xy 200.759398 161.67909) (xy 200.762291 161.679041) (xy 200.941266 161.642905) + (xy 200.941269 161.642903) (xy 200.941274 161.642903) (xy 201.11076 161.574962) (xy 201.265146 161.477463) + (xy 201.279037 161.464644) (xy 201.39933 161.35363) (xy 201.399332 161.353628) (xy 201.399333 161.353627) + (xy 201.508885 161.207547) (xy 201.590184 161.044048) (xy 201.640542 160.868533) (xy 201.658297 160.686806) + (xy 216.101265 160.686806) (xy 216.118697 160.865233) (xy 216.119021 160.868542) (xy 216.141172 160.945746) + (xy 216.16938 161.044061) (xy 216.25068 161.207563) (xy 216.250681 161.207565) (xy 216.250683 161.207568) + (xy 216.313008 161.290674) (xy 216.360238 161.353652) (xy 216.360239 161.353653) (xy 216.36024 161.353654) + (xy 216.494432 161.477495) (xy 216.648825 161.574997) (xy 216.779077 161.62721) (xy 216.818314 161.642939) + (xy 216.818315 161.642939) (xy 216.818317 161.64294) (xy 216.997308 161.679079) (xy 216.997302 161.679079) + (xy 217.013622 161.679359) (xy 217.179884 161.68222) (xy 217.360012 161.652258) (xy 217.415507 161.632198) + (xy 217.531736 161.590185) (xy 217.531737 161.590183) (xy 217.53174 161.590183) (xy 217.546775 161.58142) + (xy 217.553459 161.577535) (xy 217.55375 161.577457) (xy 217.581633 161.56116) (xy 217.581751 161.561092) + (xy 217.584968 161.560301) (xy 217.644062 161.544299) (xy 219.125192 161.544299) (xy 219.125314 161.544306) + (xy 219.133405 161.544305) (xy 219.133408 161.544306) (xy 219.165542 161.544302) (xy 219.228104 161.561234) + (xy 219.25593 161.577491) (xy 219.255932 161.577491) (xy 219.26208 161.581083) (xy 219.263735 161.581908) + (xy 219.277878 161.59015) (xy 219.4496 161.652221) (xy 219.629721 161.682182) (xy 219.809398 161.67909) + (xy 219.812291 161.679041) (xy 219.991266 161.642905) (xy 219.991269 161.642903) (xy 219.991274 161.642903) + (xy 220.16076 161.574962) (xy 220.315146 161.477463) (xy 220.329037 161.464644) (xy 220.44933 161.35363) + (xy 220.449332 161.353628) (xy 220.449333 161.353627) (xy 220.558885 161.207547) (xy 220.640184 161.044048) + (xy 220.690542 160.868533) (xy 220.708297 160.686803) (xy 220.69286 160.50486) (xy 220.692858 160.504854) + (xy 220.671801 160.427771) (xy 220.644743 160.328718) (xy 220.636983 160.312549) (xy 220.633896 160.306104) + (xy 220.633848 160.305846) (xy 220.617471 160.271819) (xy 220.617343 160.27103) (xy 220.605302 160.218231) + (xy 220.605302 160.218042) (xy 220.605307 160.180808) (xy 220.605306 160.180804) (xy 220.605307 160.172798) + (xy 220.605299 160.17266) (xy 220.605299 158.869378) (xy 220.607953 158.857712) (xy 220.606919 158.849399) + (xy 220.617503 158.815734) (xy 220.623818 158.802576) (xy 220.623898 158.802487) (xy 220.623868 158.802473) + (xy 220.623869 158.802471) (xy 220.633874 158.781674) (xy 220.633874 158.781668) (xy 220.637255 158.774642) + (xy 220.637417 158.774238) (xy 220.644783 158.758891) (xy 220.6929 158.582742) (xy 220.708337 158.400793) + (xy 220.690581 158.219055) (xy 220.64022 158.043534) (xy 220.558918 157.88003) (xy 220.472527 157.764834) + (xy 220.449362 157.733945) (xy 220.426392 157.712747) (xy 220.315169 157.610104) (xy 220.315166 157.610102) + (xy 220.315165 157.610101) (xy 220.315162 157.610099) (xy 220.160777 157.512601) (xy 219.991287 157.444658) + (xy 219.991277 157.444656) (xy 219.812292 157.408518) (xy 219.812299 157.408518) (xy 219.640594 157.405565) + (xy 219.629718 157.405378) (xy 219.629717 157.405378) (xy 219.629714 157.405378) (xy 219.449597 157.435338) + (xy 219.449584 157.435341) (xy 219.277863 157.497413) (xy 219.263348 157.50587) (xy 219.263263 157.505919) + (xy 219.256176 157.51004) (xy 219.25593 157.510108) (xy 219.228138 157.526344) (xy 219.22789 157.526489) + (xy 219.225163 157.527159) (xy 219.165546 157.543296) (xy 219.125201 157.543293) (xy 219.125097 157.5433) + (xy 217.684396 157.5433) (xy 217.676214 157.543298) (xy 217.676192 157.543293) (xy 217.646265 157.543295) + (xy 217.644028 157.543295) (xy 217.643746 157.543212) (xy 217.581493 157.526362) (xy 217.553671 157.510108) + (xy 217.547605 157.506564) (xy 217.545907 157.505717) (xy 217.538557 157.501434) (xy 217.531721 157.49745) + (xy 217.359997 157.435378) (xy 217.359991 157.435377) (xy 217.179881 157.405419) (xy 217.179878 157.405419) + (xy 217.171339 157.405565) (xy 216.997307 157.408559) (xy 216.818334 157.444694) (xy 216.818323 157.444697) + (xy 216.648842 157.512637) (xy 216.648841 157.512637) (xy 216.494461 157.610132) (xy 216.494458 157.610134) + (xy 216.360267 157.733973) (xy 216.250715 157.880054) (xy 216.16942 158.043544) (xy 216.169419 158.043547) + (xy 216.169418 158.04355) (xy 216.144238 158.131306) (xy 216.119058 158.219065) (xy 216.102211 158.39151) + (xy 216.101304 158.400793) (xy 216.103205 158.423202) (xy 216.116304 158.577606) (xy 216.11674 158.582735) + (xy 216.152807 158.714769) (xy 216.164856 158.758878) (xy 216.16486 158.758888) (xy 216.172098 158.77397) + (xy 216.17214 158.774056) (xy 216.175723 158.781538) (xy 216.175781 158.78184) (xy 216.192136 158.815806) + (xy 216.192281 158.8167) (xy 216.204301 158.869369) (xy 216.204301 160.218222) (xy 216.192107 160.271845) + (xy 216.191519 160.273071) (xy 216.191439 160.273238) (xy 216.172566 160.312437) (xy 216.172242 160.313239) + (xy 216.164818 160.32871) (xy 216.116701 160.504854) (xy 216.116701 160.504856) (xy 216.101265 160.686806) + (xy 201.658297 160.686806) (xy 201.658297 160.686803) (xy 201.64286 160.50486) (xy 201.642858 160.504854) + (xy 201.621801 160.427771) (xy 201.594743 160.328718) (xy 201.586983 160.312549) (xy 201.583896 160.306104) + (xy 201.583848 160.305846) (xy 201.567471 160.271819) (xy 201.567343 160.27103) (xy 201.555302 160.218231) + (xy 201.555302 160.218042) (xy 201.555307 160.180808) (xy 201.555306 160.180804) (xy 201.555307 160.172798) + (xy 201.555299 160.17266) (xy 201.555299 158.869378) (xy 201.557953 158.857712) (xy 201.556919 158.849399) + (xy 201.567503 158.815734) (xy 201.573818 158.802576) (xy 201.573898 158.802487) (xy 201.573868 158.802473) + (xy 201.573869 158.802471) (xy 201.583874 158.781674) (xy 201.583874 158.781668) (xy 201.587255 158.774642) + (xy 201.587417 158.774238) (xy 201.594783 158.758891) (xy 201.6429 158.582742) (xy 201.658337 158.400793) + (xy 201.640581 158.219055) (xy 201.59022 158.043534) (xy 201.508918 157.88003) (xy 201.422527 157.764834) + (xy 201.399362 157.733945) (xy 201.376392 157.712747) (xy 201.265169 157.610104) (xy 201.265166 157.610102) + (xy 201.265165 157.610101) (xy 201.265162 157.610099) (xy 201.110777 157.512601) (xy 200.941287 157.444658) + (xy 200.941277 157.444656) (xy 200.762292 157.408518) (xy 200.762299 157.408518) (xy 200.590594 157.405565) + (xy 200.579718 157.405378) (xy 200.579717 157.405378) (xy 200.579714 157.405378) (xy 200.399597 157.435338) + (xy 200.399584 157.435341) (xy 200.227863 157.497413) (xy 200.213348 157.50587) (xy 200.213263 157.505919) + (xy 200.206176 157.51004) (xy 200.20593 157.510108) (xy 200.178138 157.526344) (xy 200.17789 157.526489) + (xy 200.175163 157.527159) (xy 200.115546 157.543296) (xy 200.075201 157.543293) (xy 200.075097 157.5433) + (xy 198.634396 157.5433) (xy 198.626214 157.543298) (xy 198.626192 157.543293) (xy 198.596265 157.543295) + (xy 198.594028 157.543295) (xy 198.593746 157.543212) (xy 198.531493 157.526362) (xy 198.503671 157.510108) + (xy 198.497605 157.506564) (xy 198.495907 157.505717) (xy 198.488557 157.501434) (xy 198.481721 157.49745) + (xy 198.309997 157.435378) (xy 198.309991 157.435377) (xy 198.129881 157.405419) (xy 198.129878 157.405419) + (xy 198.121339 157.405565) (xy 197.947307 157.408559) (xy 197.768334 157.444694) (xy 197.768323 157.444697) + (xy 197.598842 157.512637) (xy 197.598841 157.512637) (xy 197.444461 157.610132) (xy 197.444458 157.610134) + (xy 197.310267 157.733973) (xy 197.200715 157.880054) (xy 197.11942 158.043544) (xy 197.119419 158.043547) + (xy 197.119418 158.04355) (xy 197.094238 158.131306) (xy 197.069058 158.219065) (xy 197.052211 158.39151) + (xy 197.051304 158.400793) (xy 197.053205 158.423202) (xy 197.066304 158.577606) (xy 197.06674 158.582735) + (xy 197.102807 158.714769) (xy 197.114856 158.758878) (xy 197.11486 158.758888) (xy 197.122098 158.77397) + (xy 197.12214 158.774056) (xy 197.125723 158.781538) (xy 197.125781 158.78184) (xy 197.142136 158.815806) + (xy 197.142281 158.8167) (xy 197.154301 158.869369) (xy 197.154301 160.218222) (xy 197.142107 160.271845) + (xy 197.141519 160.273071) (xy 197.141439 160.273238) (xy 197.122566 160.312437) (xy 197.122242 160.313239) + (xy 197.114818 160.32871) (xy 197.066701 160.504854) (xy 197.066701 160.504856) (xy 197.051265 160.686806) + (xy 193.3335 160.686806) (xy 193.3335 155.274268) (xy 193.353185 155.207229) (xy 193.405989 155.161474) + (xy 193.475147 155.15153) (xy 193.538703 155.180555) (xy 193.567985 155.217973) (xy 193.632652 155.344888) + (xy 193.732148 155.481834) (xy 193.732152 155.481839) (xy 193.85186 155.601547) (xy 193.851865 155.601551) + (xy 193.971317 155.688337) (xy 193.988815 155.70105) (xy 194.07409 155.7445) (xy 194.139646 155.777903) + (xy 194.139648 155.777903) (xy 194.139651 155.777905) (xy 194.22595 155.805945) (xy 194.300652 155.830218) + (xy 194.467851 155.8567) (xy 194.467856 155.8567) (xy 194.637149 155.8567) (xy 194.804347 155.830218) + (xy 194.847277 155.816269) (xy 194.965349 155.777905) (xy 195.116185 155.70105) (xy 195.253141 155.601546) + (xy 195.372846 155.481841) (xy 195.47235 155.344885) (xy 195.549205 155.194049) (xy 195.601518 155.033047) + (xy 195.628 154.865849) (xy 195.628 154.69655) (xy 195.602428 154.535098) (xy 195.611382 154.465805) + (xy 195.656379 154.412353) (xy 195.72313 154.391713) (xy 195.724901 154.3917) (xy 195.963444 154.3917) + (xy 195.963451 154.3917) (xy 196.242942 154.354904) (xy 196.515239 154.281942) (xy 196.775683 154.174063) + (xy 197.019817 154.033112) (xy 197.243465 153.8615) (xy 197.4428 153.662165) (xy 197.510492 153.573946) + (xy 197.56692 153.532744) (xy 197.636666 153.528589) (xy 197.697586 153.562801) (xy 197.730339 153.624518) + (xy 197.724526 153.694146) (xy 197.716255 153.711433) (xy 197.660183 153.808551) (xy 197.660175 153.808568) + (xy 197.550097 154.074321) (xy 197.475646 154.352176) (xy 197.438101 154.637361) (xy 197.4381 154.637377) + (xy 197.4381 154.925022) (xy 197.438101 154.925038) (xy 197.475646 155.210223) (xy 197.550097 155.488078) + (xy 197.660175 155.753831) (xy 197.660183 155.753848) (xy 197.804004 156.002951) (xy 197.804015 156.002967) + (xy 197.979121 156.231171) (xy 197.979127 156.231178) (xy 198.182521 156.434572) (xy 198.182527 156.434577) + (xy 198.410741 156.609691) (xy 198.410748 156.609695) (xy 198.659851 156.753516) (xy 198.659856 156.753518) + (xy 198.659859 156.75352) (xy 198.659863 156.753521) (xy 198.659868 156.753524) (xy 198.673108 156.759008) + (xy 198.92562 156.863602) (xy 199.203475 156.938053) (xy 199.488671 156.9756) (xy 199.488678 156.9756) + (xy 199.776322 156.9756) (xy 199.776329 156.9756) (xy 200.061525 156.938053) (xy 200.33938 156.863602) + (xy 200.605141 156.75352) (xy 200.854259 156.609691) (xy 201.082473 156.434577) (xy 201.285877 156.231173) + (xy 201.460991 156.002959) (xy 201.60482 155.753841) (xy 201.714902 155.48808) (xy 201.789353 155.210225) + (xy 201.8269 154.925029) (xy 201.8269 154.69655) (xy 203.637 154.69655) (xy 203.637 154.865849) + (xy 203.663481 155.033047) (xy 203.715796 155.194053) (xy 203.792652 155.344888) (xy 203.892148 155.481834) + (xy 203.892152 155.481839) (xy 204.01186 155.601547) (xy 204.011865 155.601551) (xy 204.131317 155.688337) + (xy 204.148815 155.70105) (xy 204.23409 155.7445) (xy 204.299646 155.777903) (xy 204.299648 155.777903) + (xy 204.299651 155.777905) (xy 204.38595 155.805945) (xy 204.460652 155.830218) (xy 204.627851 155.8567) + (xy 204.627856 155.8567) (xy 204.797149 155.8567) (xy 204.964347 155.830218) (xy 205.007277 155.816269) + (xy 205.125349 155.777905) (xy 205.276185 155.70105) (xy 205.413141 155.601546) (xy 205.532846 155.481841) + (xy 205.63235 155.344885) (xy 205.709205 155.194049) (xy 205.761518 155.033047) (xy 205.788 154.865849) + (xy 205.788 154.69655) (xy 212.527 154.69655) (xy 212.527 154.865849) (xy 212.553481 155.033047) + (xy 212.605796 155.194053) (xy 212.682652 155.344888) (xy 212.782148 155.481834) (xy 212.782152 155.481839) + (xy 212.90186 155.601547) (xy 212.901865 155.601551) (xy 213.021317 155.688337) (xy 213.038815 155.70105) + (xy 213.12409 155.7445) (xy 213.189646 155.777903) (xy 213.189648 155.777903) (xy 213.189651 155.777905) + (xy 213.27595 155.805945) (xy 213.350652 155.830218) (xy 213.517851 155.8567) (xy 213.517856 155.8567) + (xy 213.687149 155.8567) (xy 213.854347 155.830218) (xy 213.897277 155.816269) (xy 214.015349 155.777905) + (xy 214.166185 155.70105) (xy 214.303141 155.601546) (xy 214.422846 155.481841) (xy 214.52235 155.344885) + (xy 214.599205 155.194049) (xy 214.651518 155.033047) (xy 214.678 154.865849) (xy 214.678 154.69655) + (xy 214.652428 154.535098) (xy 214.661382 154.465805) (xy 214.706379 154.412353) (xy 214.77313 154.391713) + (xy 214.774901 154.3917) (xy 215.013444 154.3917) (xy 215.013451 154.3917) (xy 215.292942 154.354904) + (xy 215.565239 154.281942) (xy 215.825683 154.174063) (xy 216.069817 154.033112) (xy 216.293465 153.8615) + (xy 216.4928 153.662165) (xy 216.560492 153.573946) (xy 216.61692 153.532744) (xy 216.686666 153.528589) + (xy 216.747586 153.562801) (xy 216.780339 153.624518) (xy 216.774526 153.694146) (xy 216.766255 153.711433) + (xy 216.710183 153.808551) (xy 216.710175 153.808568) (xy 216.600097 154.074321) (xy 216.525646 154.352176) + (xy 216.488101 154.637361) (xy 216.4881 154.637377) (xy 216.4881 154.925022) (xy 216.488101 154.925038) + (xy 216.525646 155.210223) (xy 216.600097 155.488078) (xy 216.710175 155.753831) (xy 216.710183 155.753848) + (xy 216.854004 156.002951) (xy 216.854015 156.002967) (xy 217.029121 156.231171) (xy 217.029127 156.231178) + (xy 217.232521 156.434572) (xy 217.232527 156.434577) (xy 217.460741 156.609691) (xy 217.460748 156.609695) + (xy 217.709851 156.753516) (xy 217.709856 156.753518) (xy 217.709859 156.75352) (xy 217.709863 156.753521) + (xy 217.709868 156.753524) (xy 217.723108 156.759008) (xy 217.97562 156.863602) (xy 218.253475 156.938053) + (xy 218.538671 156.9756) (xy 218.538678 156.9756) (xy 218.826322 156.9756) (xy 218.826329 156.9756) + (xy 219.111525 156.938053) (xy 219.38938 156.863602) (xy 219.655141 156.75352) (xy 219.904259 156.609691) + (xy 220.132473 156.434577) (xy 220.335877 156.231173) (xy 220.510991 156.002959) (xy 220.65482 155.753841) + (xy 220.764902 155.48808) (xy 220.839353 155.210225) (xy 220.8769 154.925029) (xy 220.8769 154.69655) + (xy 222.687 154.69655) (xy 222.687 154.865849) (xy 222.713481 155.033047) (xy 222.765796 155.194053) + (xy 222.842652 155.344888) (xy 222.942148 155.481834) (xy 222.942152 155.481839) (xy 223.06186 155.601547) + (xy 223.061865 155.601551) (xy 223.181317 155.688337) (xy 223.198815 155.70105) (xy 223.28409 155.7445) + (xy 223.349646 155.777903) (xy 223.349648 155.777903) (xy 223.349651 155.777905) (xy 223.43595 155.805945) + (xy 223.510652 155.830218) (xy 223.677851 155.8567) (xy 223.677856 155.8567) (xy 223.847149 155.8567) + (xy 224.014347 155.830218) (xy 224.057277 155.816269) (xy 224.175349 155.777905) (xy 224.326185 155.70105) + (xy 224.463141 155.601546) (xy 224.582846 155.481841) (xy 224.68235 155.344885) (xy 224.759205 155.194049) + (xy 224.811518 155.033047) (xy 224.838 154.865849) (xy 224.838 154.69655) (xy 231.577 154.69655) + (xy 231.577 154.865849) (xy 231.603481 155.033047) (xy 231.655796 155.194053) (xy 231.732652 155.344888) + (xy 231.832148 155.481834) (xy 231.832152 155.481839) (xy 231.95186 155.601547) (xy 231.951865 155.601551) + (xy 232.071317 155.688337) (xy 232.088815 155.70105) (xy 232.17409 155.7445) (xy 232.239646 155.777903) + (xy 232.239648 155.777903) (xy 232.239651 155.777905) (xy 232.32595 155.805945) (xy 232.400652 155.830218) + (xy 232.567851 155.8567) (xy 232.567856 155.8567) (xy 232.737149 155.8567) (xy 232.904347 155.830218) + (xy 232.947277 155.816269) (xy 233.065349 155.777905) (xy 233.216185 155.70105) (xy 233.353141 155.601546) + (xy 233.472846 155.481841) (xy 233.57235 155.344885) (xy 233.649205 155.194049) (xy 233.701518 155.033047) + (xy 233.728 154.865849) (xy 233.728 154.69655) (xy 233.702428 154.535098) (xy 233.711382 154.465805) + (xy 233.756379 154.412353) (xy 233.82313 154.391713) (xy 233.824901 154.3917) (xy 234.063444 154.3917) + (xy 234.063451 154.3917) (xy 234.342942 154.354904) (xy 234.615239 154.281942) (xy 234.875683 154.174063) + (xy 235.119817 154.033112) (xy 235.343465 153.8615) (xy 235.5428 153.662165) (xy 235.610492 153.573946) + (xy 235.66692 153.532744) (xy 235.736666 153.528589) (xy 235.797586 153.562801) (xy 235.830339 153.624518) + (xy 235.824526 153.694146) (xy 235.816255 153.711433) (xy 235.760183 153.808551) (xy 235.760175 153.808568) + (xy 235.650097 154.074321) (xy 235.575646 154.352176) (xy 235.538101 154.637361) (xy 235.5381 154.637377) + (xy 235.5381 154.925022) (xy 235.538101 154.925038) (xy 235.575646 155.210223) (xy 235.650097 155.488078) + (xy 235.760175 155.753831) (xy 235.760183 155.753848) (xy 235.904004 156.002951) (xy 235.904015 156.002967) + (xy 236.079121 156.231171) (xy 236.079127 156.231178) (xy 236.282521 156.434572) (xy 236.282527 156.434577) + (xy 236.510741 156.609691) (xy 236.510748 156.609695) (xy 236.759851 156.753516) (xy 236.759856 156.753518) + (xy 236.759859 156.75352) (xy 236.759863 156.753521) (xy 236.759868 156.753524) (xy 236.773108 156.759008) + (xy 237.02562 156.863602) (xy 237.303475 156.938053) (xy 237.588671 156.9756) (xy 237.588678 156.9756) + (xy 237.876322 156.9756) (xy 237.876329 156.9756) (xy 238.161525 156.938053) (xy 238.43938 156.863602) + (xy 238.705141 156.75352) (xy 238.954259 156.609691) (xy 239.182473 156.434577) (xy 239.385877 156.231173) + (xy 239.560991 156.002959) (xy 239.70482 155.753841) (xy 239.814902 155.48808) (xy 239.889353 155.210225) + (xy 239.9269 154.925029) (xy 239.9269 154.69655) (xy 241.737 154.69655) (xy 241.737 154.865849) + (xy 241.763481 155.033047) (xy 241.815796 155.194053) (xy 241.892652 155.344888) (xy 241.992148 155.481834) + (xy 241.992152 155.481839) (xy 242.11186 155.601547) (xy 242.111865 155.601551) (xy 242.231317 155.688337) + (xy 242.248815 155.70105) (xy 242.33409 155.7445) (xy 242.399646 155.777903) (xy 242.399648 155.777903) + (xy 242.399651 155.777905) (xy 242.48595 155.805945) (xy 242.560652 155.830218) (xy 242.727851 155.8567) + (xy 242.727856 155.8567) (xy 242.897149 155.8567) (xy 243.064347 155.830218) (xy 243.107277 155.816269) + (xy 243.225349 155.777905) (xy 243.376185 155.70105) (xy 243.513141 155.601546) (xy 243.632846 155.481841) + (xy 243.73235 155.344885) (xy 243.809205 155.194049) (xy 243.861518 155.033047) (xy 243.888 154.865849) + (xy 243.888 154.69655) (xy 243.861518 154.529352) (xy 243.834836 154.447236) (xy 243.809205 154.368351) + (xy 243.809203 154.368348) (xy 243.809203 154.368346) (xy 243.778344 154.307783) (xy 243.73235 154.217515) + (xy 243.700781 154.174064) (xy 243.632851 154.080565) (xy 243.632847 154.08056) (xy 243.513139 153.960852) + (xy 243.513134 153.960848) (xy 243.376188 153.861352) (xy 243.376187 153.861351) (xy 243.376185 153.86135) + (xy 243.329082 153.83735) (xy 243.225353 153.784496) (xy 243.064347 153.732181) (xy 242.897149 153.7057) + (xy 242.897144 153.7057) (xy 242.727856 153.7057) (xy 242.727851 153.7057) (xy 242.560652 153.732181) + (xy 242.399646 153.784496) (xy 242.248811 153.861352) (xy 242.111865 153.960848) (xy 242.11186 153.960852) + (xy 241.992152 154.08056) (xy 241.992148 154.080565) (xy 241.892652 154.217511) (xy 241.815796 154.368346) + (xy 241.763481 154.529352) (xy 241.737 154.69655) (xy 239.9269 154.69655) (xy 239.9269 154.637371) + (xy 239.889353 154.352175) (xy 239.814902 154.07432) (xy 239.70482 153.808559) (xy 239.704818 153.808556) + (xy 239.704816 153.808551) (xy 239.560995 153.559448) (xy 239.560991 153.559441) (xy 239.457069 153.424007) + (xy 239.385878 153.331228) (xy 239.385872 153.331221) (xy 239.182478 153.127827) (xy 239.182471 153.127821) + (xy 238.954267 152.952715) (xy 238.954265 152.952713) (xy 238.954259 152.952709) (xy 238.954254 152.952706) + (xy 238.954251 152.952704) (xy 238.705148 152.808883) (xy 238.705131 152.808875) (xy 238.439378 152.698797) + (xy 238.161523 152.624346) (xy 237.876338 152.586801) (xy 237.876335 152.5868) (xy 237.876329 152.5868) + (xy 237.588671 152.5868) (xy 237.588665 152.5868) (xy 237.588661 152.586801) (xy 237.303476 152.624346) + (xy 237.025621 152.698797) (xy 236.759868 152.808875) (xy 236.759851 152.808883) (xy 236.510748 152.952704) + (xy 236.510732 152.952715) (xy 236.282528 153.127821) (xy 236.282521 153.127827) (xy 236.079127 153.331221) + (xy 236.00793 153.424007) (xy 235.951501 153.465209) (xy 235.881755 153.469364) (xy 235.820835 153.435151) + (xy 235.788083 153.373434) (xy 235.793896 153.303807) (xy 235.802161 153.286531) (xy 235.855363 153.194383) + (xy 235.963242 152.933939) (xy 236.036204 152.661642) (xy 236.073 152.382151) (xy 236.073 152.100249) + (xy 236.036204 151.820758) (xy 235.963242 151.548461) (xy 235.95626 151.531606) (xy 235.931265 151.471261) + (xy 235.855363 151.288017) (xy 235.85536 151.288011) (xy 235.855359 151.288009) (xy 235.714416 151.04389) + (xy 235.714412 151.043883) (xy 235.5428 150.820235) (xy 235.542798 150.820233) (xy 235.542795 150.820229) + (xy 235.34347 150.620904) (xy 235.318661 150.601867) (xy 235.119817 150.449288) (xy 235.119811 150.449284) + (xy 235.119809 150.449283) (xy 234.87569 150.30834) (xy 234.875679 150.308335) (xy 234.615243 150.200459) + (xy 234.342939 150.127495) (xy 234.063458 150.0907) (xy 234.063451 150.0907) (xy 233.781549 150.0907) + (xy 233.781541 150.0907) (xy 233.50206 150.127495) (xy 233.229756 150.200459) (xy 232.96932 150.308335) + (xy 232.969309 150.30834) (xy 232.72519 150.449283) (xy 232.725182 150.449289) (xy 232.501529 150.620904) + (xy 232.302204 150.820229) (xy 232.130589 151.043882) (xy 232.130583 151.04389) (xy 231.98964 151.288009) + (xy 231.989635 151.28802) (xy 231.881759 151.548456) (xy 231.808795 151.82076) (xy 231.772 152.100241) + (xy 231.772 152.382158) (xy 231.808795 152.661639) (xy 231.881759 152.933943) (xy 231.989635 153.194379) + (xy 231.98964 153.19439) (xy 232.130583 153.438509) (xy 232.130594 153.438525) (xy 232.261338 153.608914) + (xy 232.286532 153.674083) (xy 232.272494 153.742528) (xy 232.22368 153.792517) (xy 232.219258 153.794884) + (xy 232.088813 153.86135) (xy 231.951865 153.960848) (xy 231.95186 153.960852) (xy 231.832152 154.08056) + (xy 231.832148 154.080565) (xy 231.732652 154.217511) (xy 231.655796 154.368346) (xy 231.603481 154.529352) + (xy 231.577 154.69655) (xy 224.838 154.69655) (xy 224.811518 154.529352) (xy 224.784836 154.447236) + (xy 224.759205 154.368351) (xy 224.759203 154.368348) (xy 224.759203 154.368346) (xy 224.728344 154.307783) + (xy 224.68235 154.217515) (xy 224.650781 154.174064) (xy 224.582851 154.080565) (xy 224.582847 154.08056) + (xy 224.463139 153.960852) (xy 224.463134 153.960848) (xy 224.326188 153.861352) (xy 224.326187 153.861351) + (xy 224.326185 153.86135) (xy 224.279082 153.83735) (xy 224.175353 153.784496) (xy 224.014347 153.732181) + (xy 223.847149 153.7057) (xy 223.847144 153.7057) (xy 223.677856 153.7057) (xy 223.677851 153.7057) + (xy 223.510652 153.732181) (xy 223.349646 153.784496) (xy 223.198811 153.861352) (xy 223.061865 153.960848) + (xy 223.06186 153.960852) (xy 222.942152 154.08056) (xy 222.942148 154.080565) (xy 222.842652 154.217511) + (xy 222.765796 154.368346) (xy 222.713481 154.529352) (xy 222.687 154.69655) (xy 220.8769 154.69655) + (xy 220.8769 154.637371) (xy 220.839353 154.352175) (xy 220.764902 154.07432) (xy 220.65482 153.808559) + (xy 220.654818 153.808556) (xy 220.654816 153.808551) (xy 220.510995 153.559448) (xy 220.510991 153.559441) + (xy 220.407069 153.424007) (xy 220.335878 153.331228) (xy 220.335872 153.331221) (xy 220.132478 153.127827) + (xy 220.132471 153.127821) (xy 219.904267 152.952715) (xy 219.904265 152.952713) (xy 219.904259 152.952709) + (xy 219.904254 152.952706) (xy 219.904251 152.952704) (xy 219.655148 152.808883) (xy 219.655131 152.808875) + (xy 219.389378 152.698797) (xy 219.111523 152.624346) (xy 218.826338 152.586801) (xy 218.826335 152.5868) + (xy 218.826329 152.5868) (xy 218.538671 152.5868) (xy 218.538665 152.5868) (xy 218.538661 152.586801) + (xy 218.253476 152.624346) (xy 217.975621 152.698797) (xy 217.709868 152.808875) (xy 217.709851 152.808883) + (xy 217.460748 152.952704) (xy 217.460732 152.952715) (xy 217.232528 153.127821) (xy 217.232521 153.127827) + (xy 217.029127 153.331221) (xy 216.95793 153.424007) (xy 216.901501 153.465209) (xy 216.831755 153.469364) + (xy 216.770835 153.435151) (xy 216.738083 153.373434) (xy 216.743896 153.303807) (xy 216.752161 153.286531) + (xy 216.805363 153.194383) (xy 216.913242 152.933939) (xy 216.986204 152.661642) (xy 217.023 152.382151) + (xy 217.023 152.100249) (xy 216.986204 151.820758) (xy 216.913242 151.548461) (xy 216.90626 151.531606) + (xy 216.881265 151.471261) (xy 216.805363 151.288017) (xy 216.80536 151.288011) (xy 216.805359 151.288009) + (xy 216.664416 151.04389) (xy 216.664412 151.043883) (xy 216.4928 150.820235) (xy 216.492798 150.820233) + (xy 216.492795 150.820229) (xy 216.29347 150.620904) (xy 216.268661 150.601867) (xy 216.069817 150.449288) + (xy 216.069811 150.449284) (xy 216.069809 150.449283) (xy 215.82569 150.30834) (xy 215.825679 150.308335) + (xy 215.565243 150.200459) (xy 215.292939 150.127495) (xy 215.013458 150.0907) (xy 215.013451 150.0907) + (xy 214.731549 150.0907) (xy 214.731541 150.0907) (xy 214.45206 150.127495) (xy 214.179756 150.200459) + (xy 213.91932 150.308335) (xy 213.919309 150.30834) (xy 213.67519 150.449283) (xy 213.675182 150.449289) + (xy 213.451529 150.620904) (xy 213.252204 150.820229) (xy 213.080589 151.043882) (xy 213.080583 151.04389) + (xy 212.93964 151.288009) (xy 212.939635 151.28802) (xy 212.831759 151.548456) (xy 212.758795 151.82076) + (xy 212.722 152.100241) (xy 212.722 152.382158) (xy 212.758795 152.661639) (xy 212.831759 152.933943) + (xy 212.939635 153.194379) (xy 212.93964 153.19439) (xy 213.080583 153.438509) (xy 213.080594 153.438525) + (xy 213.211338 153.608914) (xy 213.236532 153.674083) (xy 213.222494 153.742528) (xy 213.17368 153.792517) + (xy 213.169258 153.794884) (xy 213.038813 153.86135) (xy 212.901865 153.960848) (xy 212.90186 153.960852) + (xy 212.782152 154.08056) (xy 212.782148 154.080565) (xy 212.682652 154.217511) (xy 212.605796 154.368346) + (xy 212.553481 154.529352) (xy 212.527 154.69655) (xy 205.788 154.69655) (xy 205.761518 154.529352) + (xy 205.734836 154.447236) (xy 205.709205 154.368351) (xy 205.709203 154.368348) (xy 205.709203 154.368346) + (xy 205.678344 154.307783) (xy 205.63235 154.217515) (xy 205.600781 154.174064) (xy 205.532851 154.080565) + (xy 205.532847 154.08056) (xy 205.413139 153.960852) (xy 205.413134 153.960848) (xy 205.276188 153.861352) + (xy 205.276187 153.861351) (xy 205.276185 153.86135) (xy 205.229082 153.83735) (xy 205.125353 153.784496) + (xy 204.964347 153.732181) (xy 204.797149 153.7057) (xy 204.797144 153.7057) (xy 204.627856 153.7057) + (xy 204.627851 153.7057) (xy 204.460652 153.732181) (xy 204.299646 153.784496) (xy 204.148811 153.861352) + (xy 204.011865 153.960848) (xy 204.01186 153.960852) (xy 203.892152 154.08056) (xy 203.892148 154.080565) + (xy 203.792652 154.217511) (xy 203.715796 154.368346) (xy 203.663481 154.529352) (xy 203.637 154.69655) + (xy 201.8269 154.69655) (xy 201.8269 154.637371) (xy 201.789353 154.352175) (xy 201.714902 154.07432) + (xy 201.60482 153.808559) (xy 201.604818 153.808556) (xy 201.604816 153.808551) (xy 201.460995 153.559448) + (xy 201.460991 153.559441) (xy 201.357069 153.424007) (xy 201.285878 153.331228) (xy 201.285872 153.331221) + (xy 201.082478 153.127827) (xy 201.082471 153.127821) (xy 200.854267 152.952715) (xy 200.854265 152.952713) + (xy 200.854259 152.952709) (xy 200.854254 152.952706) (xy 200.854251 152.952704) (xy 200.605148 152.808883) + (xy 200.605131 152.808875) (xy 200.339378 152.698797) (xy 200.061523 152.624346) (xy 199.776338 152.586801) + (xy 199.776335 152.5868) (xy 199.776329 152.5868) (xy 199.488671 152.5868) (xy 199.488665 152.5868) + (xy 199.488661 152.586801) (xy 199.203476 152.624346) (xy 198.925621 152.698797) (xy 198.659868 152.808875) + (xy 198.659851 152.808883) (xy 198.410748 152.952704) (xy 198.410732 152.952715) (xy 198.182528 153.127821) + (xy 198.182521 153.127827) (xy 197.979127 153.331221) (xy 197.90793 153.424007) (xy 197.851501 153.465209) + (xy 197.781755 153.469364) (xy 197.720835 153.435151) (xy 197.688083 153.373434) (xy 197.693896 153.303807) + (xy 197.702161 153.286531) (xy 197.755363 153.194383) (xy 197.863242 152.933939) (xy 197.936204 152.661642) + (xy 197.973 152.382151) (xy 197.973 152.100249) (xy 197.936204 151.820758) (xy 197.863242 151.548461) + (xy 197.85626 151.531606) (xy 197.831265 151.471261) (xy 197.755363 151.288017) (xy 197.75536 151.288011) + (xy 197.755359 151.288009) (xy 197.614416 151.04389) (xy 197.614412 151.043883) (xy 197.4428 150.820235) + (xy 197.442798 150.820233) (xy 197.442795 150.820229) (xy 197.24347 150.620904) (xy 197.218661 150.601867) + (xy 197.019817 150.449288) (xy 197.019811 150.449284) (xy 197.019809 150.449283) (xy 196.77569 150.30834) + (xy 196.775679 150.308335) (xy 196.515243 150.200459) (xy 196.242939 150.127495) (xy 195.963458 150.0907) + (xy 195.963451 150.0907) (xy 195.681549 150.0907) (xy 195.681541 150.0907) (xy 195.40206 150.127495) + (xy 195.129756 150.200459) (xy 194.86932 150.308335) (xy 194.869309 150.30834) (xy 194.62519 150.449283) + (xy 194.625182 150.449289) (xy 194.401529 150.620904) (xy 194.202204 150.820229) (xy 194.030589 151.043882) + (xy 194.030583 151.04389) (xy 193.88964 151.288009) (xy 193.889635 151.28802) (xy 193.781759 151.548456) + (xy 193.708795 151.82076) (xy 193.672 152.100241) (xy 193.672 152.382158) (xy 193.708795 152.661639) + (xy 193.781759 152.933943) (xy 193.889635 153.194379) (xy 193.88964 153.19439) (xy 194.030583 153.438509) + (xy 194.030594 153.438525) (xy 194.161338 153.608914) (xy 194.186532 153.674083) (xy 194.172494 153.742528) + (xy 194.12368 153.792517) (xy 194.119258 153.794884) (xy 193.988813 153.86135) (xy 193.851865 153.960848) + (xy 193.85186 153.960852) (xy 193.732152 154.08056) (xy 193.732148 154.080565) (xy 193.632652 154.217511) + (xy 193.567985 154.344426) (xy 193.52001 154.395222) (xy 193.452189 154.412017) (xy 193.386054 154.389479) + (xy 193.342603 154.334764) (xy 193.3335 154.288131) (xy 193.3335 135.64655) (xy 194.112 135.64655) + (xy 194.112 135.815849) (xy 194.138481 135.983047) (xy 194.190796 136.144053) (xy 194.267652 136.294888) + (xy 194.367148 136.431834) (xy 194.367152 136.431839) (xy 194.48686 136.551547) (xy 194.486865 136.551551) + (xy 194.606317 136.638337) (xy 194.623815 136.65105) (xy 194.687017 136.683253) (xy 194.774646 136.727903) + (xy 194.774648 136.727903) (xy 194.774651 136.727905) (xy 194.86095 136.755945) (xy 194.935652 136.780218) + (xy 195.102851 136.8067) (xy 195.102856 136.8067) (xy 195.272149 136.8067) (xy 195.439347 136.780218) + (xy 195.600349 136.727905) (xy 195.751185 136.65105) (xy 195.888141 136.551546) (xy 196.007846 136.431841) + (xy 196.10735 136.294885) (xy 196.184205 136.144049) (xy 196.236518 135.983047) (xy 196.263 135.815849) + (xy 196.263 135.64655) (xy 196.236518 135.479352) (xy 196.191796 135.341713) (xy 196.184205 135.318351) + (xy 196.184203 135.318348) (xy 196.184203 135.318346) (xy 196.140176 135.23194) (xy 196.10735 135.167515) + (xy 196.075781 135.124064) (xy 196.007851 135.030565) (xy 196.007847 135.03056) (xy 195.888139 134.910852) + (xy 195.888134 134.910848) (xy 195.751188 134.811352) (xy 195.751187 134.811351) (xy 195.751185 134.81135) + (xy 195.686109 134.778192) (xy 195.600353 134.734496) (xy 195.439347 134.682181) (xy 195.272149 134.6557) + (xy 195.272144 134.6557) (xy 195.102856 134.6557) (xy 195.102851 134.6557) (xy 194.935652 134.682181) + (xy 194.774646 134.734496) (xy 194.623811 134.811352) (xy 194.486865 134.910848) (xy 194.48686 134.910852) + (xy 194.367152 135.03056) (xy 194.367148 135.030565) (xy 194.267652 135.167511) (xy 194.190796 135.318346) + (xy 194.138481 135.479352) (xy 194.112 135.64655) (xy 193.3335 135.64655) (xy 193.3335 134.998024) + (xy 193.333505 134.952771) (xy 193.3335 134.952758) (xy 193.3335 134.952747) (xy 193.316147 134.910854) + (xy 193.316146 134.910852) (xy 193.31614 134.910838) (xy 193.298975 134.869383) (xy 193.298883 134.869158) + (xy 193.298868 134.869135) (xy 193.269882 134.840149) (xy 188.53981 130.109097) (xy 188.506331 130.047771) + (xy 188.5035 130.021425) (xy 188.5035 116.59655) (xy 189.3495 116.59655) (xy 189.3495 116.765849) + (xy 189.375981 116.933047) (xy 189.428296 117.094053) (xy 189.505152 117.244888) (xy 189.604648 117.381834) + (xy 189.604651 117.381838) (xy 189.72436 117.501547) (xy 189.724365 117.501551) (xy 189.804244 117.559586) + (xy 189.861315 117.60105) (xy 189.957425 117.65002) (xy 190.012146 117.677903) (xy 190.012148 117.677903) + (xy 190.012151 117.677905) (xy 190.09845 117.705945) (xy 190.173152 117.730218) (xy 190.340351 117.7567) + (xy 190.340356 117.7567) (xy 190.509649 117.7567) (xy 190.676847 117.730218) (xy 190.837849 117.677905) + (xy 190.988685 117.60105) (xy 191.125641 117.501546) (xy 191.245346 117.381841) (xy 191.245346 117.38184) + (xy 191.245349 117.381838) (xy 191.245351 117.381834) (xy 191.266179 117.353167) (xy 191.34485 117.244885) + (xy 191.421705 117.094049) (xy 191.474018 116.933047) (xy 191.5005 116.765849) (xy 191.5005 116.59655) + (xy 191.474018 116.429352) (xy 191.447275 116.347046) (xy 191.421705 116.268351) (xy 191.421703 116.268348) + (xy 191.421703 116.268346) (xy 191.371015 116.168867) (xy 191.34485 116.117515) (xy 191.313281 116.074064) + (xy 191.245351 115.980565) (xy 191.245347 115.98056) (xy 191.125639 115.860852) (xy 191.125634 115.860848) + (xy 190.988688 115.761352) (xy 190.988687 115.761351) (xy 190.988685 115.76135) (xy 190.939398 115.736237) + (xy 190.837853 115.684496) (xy 190.676847 115.632181) (xy 190.509649 115.6057) (xy 190.509644 115.6057) + (xy 190.340356 115.6057) (xy 190.340351 115.6057) (xy 190.173152 115.632181) (xy 190.012146 115.684496) + (xy 189.861311 115.761352) (xy 189.724365 115.860848) (xy 189.72436 115.860852) (xy 189.604652 115.98056) + (xy 189.604648 115.980565) (xy 189.505152 116.117511) (xy 189.428296 116.268346) (xy 189.375981 116.429352) + (xy 189.3495 116.59655) (xy 188.5035 116.59655) (xy 188.5035 115.259075) (xy 188.523185 115.192036) + (xy 188.575989 115.146281) (xy 188.579999 115.144534) (xy 188.655179 115.113394) (xy 188.786289 115.025789) + (xy 188.897789 114.914289) (xy 188.985394 114.783179) (xy 189.045737 114.637497) (xy 189.0765 114.482842) + (xy 189.0765 114.325158) (xy 189.0765 114.325155) (xy 189.076499 114.325153) (xy 189.055552 114.219846) + (xy 189.045737 114.170503) (xy 189.023139 114.115946) (xy 188.985397 114.024827) (xy 188.98539 114.024814) + (xy 188.897789 113.893711) (xy 188.897786 113.893707) (xy 188.78629 113.782211) (xy 188.769778 113.771178) + (xy 188.724974 113.717564) (xy 188.716268 113.648239) (xy 188.746424 113.585212) (xy 188.791217 113.553516) + (xy 188.838183 113.534063) (xy 189.082317 113.393112) (xy 189.305965 113.2215) (xy 189.5053 113.022165) + (xy 189.676912 112.798517) (xy 189.817863 112.554383) (xy 189.925742 112.293939) (xy 189.998704 112.021642) + (xy 190.0355 111.742151) (xy 190.0355 111.460249) (xy 189.998704 111.180758) (xy 189.925742 110.908461) + (xy 189.91876 110.891606) (xy 189.886135 110.812841) (xy 189.817863 110.648017) (xy 189.817862 110.648015) + (xy 189.816888 110.646039) (xy 189.816774 110.645388) (xy 189.81631 110.644267) (xy 189.816561 110.644163) + (xy 189.804891 110.577207) (xy 189.832013 110.512816) (xy 189.889641 110.47331) (xy 189.95948 110.471231) + (xy 190.015781 110.503514) (xy 190.669503 111.157236) (xy 190.702988 111.218559) (xy 190.698004 111.288251) + (xy 190.696384 111.292368) (xy 190.665263 111.367503) (xy 190.665261 111.36751) (xy 190.6345 111.522153) + (xy 190.6345 111.679846) (xy 190.665261 111.834489) (xy 190.665264 111.834501) (xy 190.725602 111.980172) + (xy 190.725609 111.980185) (xy 190.81321 112.111288) (xy 190.813213 112.111292) (xy 190.924707 112.222786) + (xy 190.924711 112.222789) (xy 191.055814 112.31039) (xy 191.055827 112.310397) (xy 191.201498 112.370735) + (xy 191.201503 112.370737) (xy 191.356153 112.401499) (xy 191.356156 112.4015) (xy 191.356158 112.4015) + (xy 191.513844 112.4015) (xy 191.513845 112.401499) (xy 191.668497 112.370737) (xy 191.814179 112.310394) + (xy 191.945289 112.222789) (xy 191.993921 112.174157) (xy 192.049819 112.11826) (xy 192.111142 112.084775) + (xy 192.180834 112.089759) (xy 192.236767 112.131631) (xy 192.261184 112.197095) (xy 192.2615 112.205941) + (xy 192.2615 126.756763) (xy 192.261494 126.756778) (xy 192.2615 126.797376) (xy 192.2615 126.847266) + (xy 192.277629 126.886192) (xy 192.277631 126.886206) (xy 192.277634 126.886206) (xy 192.296134 126.930868) + (xy 192.296148 126.930889) (xy 192.296151 126.930892) (xy 192.296152 126.930894) (xy 192.329541 126.964274) + (xy 192.360132 126.994865) (xy 192.360146 126.99487) (xy 192.905795 127.540372) (xy 194.141218 128.775463) + (xy 194.174712 128.836782) (xy 194.169737 128.906474) (xy 194.127873 128.962413) (xy 194.062412 128.986839) + (xy 193.994137 128.971996) (xy 193.978062 128.961531) (xy 193.844827 128.859295) (xy 193.844809 128.859283) + (xy 193.60069 128.71834) (xy 193.600679 128.718335) (xy 193.340243 128.610459) (xy 193.067939 128.537495) + (xy 192.788458 128.5007) (xy 192.788451 128.5007) (xy 192.506549 128.5007) (xy 192.506541 128.5007) + (xy 192.22706 128.537495) (xy 191.954756 128.610459) (xy 191.69432 128.718335) (xy 191.694309 128.71834) + (xy 191.45019 128.859283) (xy 191.450184 128.859287) (xy 191.450183 128.859288) (xy 191.395198 128.90148) + (xy 191.226529 129.030904) (xy 191.027204 129.230229) (xy 190.913881 129.377914) (xy 190.855597 129.453872) + (xy 190.855589 129.453882) (xy 190.855583 129.45389) (xy 190.71464 129.698009) (xy 190.714635 129.69802) + (xy 190.606759 129.958456) (xy 190.533795 130.23076) (xy 190.497 130.510241) (xy 190.497 130.792158) + (xy 190.533795 131.071639) (xy 190.606759 131.343943) (xy 190.714635 131.604379) (xy 190.71464 131.60439) + (xy 190.847142 131.833888) (xy 190.855588 131.848517) (xy 191.018047 132.060237) (xy 191.027204 132.07217) + (xy 191.226529 132.271495) (xy 191.226533 132.271498) (xy 191.226535 132.2715) (xy 191.450183 132.443112) + (xy 191.45019 132.443116) (xy 191.694309 132.584059) (xy 191.694314 132.584061) (xy 191.694317 132.584063) + (xy 191.954761 132.691942) (xy 192.227058 132.764904) (xy 192.506549 132.8017) (xy 192.506556 132.8017) + (xy 192.788444 132.8017) (xy 192.788451 132.8017) (xy 193.067942 132.764904) (xy 193.340239 132.691942) + (xy 193.600683 132.584063) (xy 193.844817 132.443112) (xy 194.068465 132.2715) (xy 194.2678 132.072165) + (xy 194.439412 131.848517) (xy 194.580363 131.604383) (xy 194.688242 131.343939) (xy 194.761204 131.071642) + (xy 194.798 130.792151) (xy 194.798 130.510249) (xy 194.761204 130.230758) (xy 194.688242 129.958461) + (xy 194.68126 129.941606) (xy 194.656265 129.881261) (xy 194.580363 129.698017) (xy 194.580361 129.698014) + (xy 194.580359 129.698009) (xy 194.439416 129.45389) (xy 194.439412 129.453883) (xy 194.428389 129.439518) + (xy 194.336829 129.320195) (xy 194.311634 129.255026) (xy 194.325672 129.186581) (xy 194.374486 129.136591) + (xy 194.442577 129.120927) (xy 194.508327 129.144563) (xy 194.522873 129.157015) (xy 195.099848 129.733834) + (xy 195.475247 130.109132) (xy 195.476449 130.110333) (xy 195.509943 130.171652) (xy 195.504968 130.241344) + (xy 195.491886 130.266911) (xy 195.488611 130.271812) (xy 195.488602 130.271828) (xy 195.428264 130.417498) + (xy 195.428261 130.41751) (xy 195.3975 130.572153) (xy 195.3975 130.729846) (xy 195.428261 130.884489) + (xy 195.428264 130.884501) (xy 195.488602 131.030172) (xy 195.488609 131.030185) (xy 195.57621 131.161288) + (xy 195.576213 131.161292) (xy 195.687707 131.272786) (xy 195.687711 131.272789) (xy 195.818814 131.36039) + (xy 195.818827 131.360397) (xy 195.960679 131.419153) (xy 195.964503 131.420737) (xy 196.119153 131.451499) + (xy 196.119156 131.4515) (xy 196.119158 131.4515) (xy 196.276844 131.4515) (xy 196.276845 131.451499) + (xy 196.431497 131.420737) (xy 196.577179 131.360394) (xy 196.708289 131.272789) (xy 196.819789 131.161289) + (xy 196.861207 131.099301) (xy 196.914818 131.054498) (xy 196.984143 131.04579) (xy 197.047171 131.075944) + (xy 197.051976 131.080498) (xy 201.206173 135.233925) (xy 201.239664 135.295244) (xy 201.2425 135.321613) + (xy 201.2425 145.452087) (xy 201.242495 145.493226) (xy 201.2425 145.493238) (xy 201.2425 145.493253) + (xy 201.244113 145.497149) (xy 201.244114 145.49715) (xy 201.259405 145.534065) (xy 201.259408 145.534081) + (xy 201.259411 145.53408) (xy 201.277118 145.576844) (xy 201.277134 145.576868) (xy 201.306872 145.606605) + (xy 201.30688 145.60662) (xy 201.306884 145.606617) (xy 203.27027 147.570465) (xy 203.303747 147.631792) + (xy 203.298755 147.701483) (xy 203.256877 147.757412) (xy 203.19141 147.781821) (xy 203.129513 147.769696) + (xy 203.129433 147.76989) (xy 203.128474 147.769493) (xy 203.127734 147.769348) (xy 203.125684 147.768337) + (xy 202.865243 147.660459) (xy 202.592939 147.587495) (xy 202.313458 147.5507) (xy 202.313451 147.5507) + (xy 202.031549 147.5507) (xy 202.031541 147.5507) (xy 201.75206 147.587495) (xy 201.479756 147.660459) + (xy 201.21932 147.768335) (xy 201.219309 147.76834) (xy 200.97519 147.909283) (xy 200.975182 147.909289) + (xy 200.751529 148.080904) (xy 200.552204 148.280229) (xy 200.380589 148.503882) (xy 200.380583 148.50389) + (xy 200.23964 148.748009) (xy 200.239635 148.74802) (xy 200.131759 149.008456) (xy 200.058795 149.28076) + (xy 200.022 149.560241) (xy 200.022 149.842158) (xy 200.058795 150.121639) (xy 200.131759 150.393943) + (xy 200.239635 150.654379) (xy 200.23964 150.65439) (xy 200.380583 150.898509) (xy 200.380588 150.898517) + (xy 200.542887 151.110028) (xy 200.552204 151.12217) (xy 200.751529 151.321495) (xy 200.751533 151.321498) + (xy 200.751535 151.3215) (xy 200.975183 151.493112) (xy 200.97519 151.493116) (xy 201.219309 151.634059) + (xy 201.219314 151.634061) (xy 201.219317 151.634063) (xy 201.479761 151.741942) (xy 201.752058 151.814904) + (xy 202.031549 151.8517) (xy 202.031556 151.8517) (xy 202.313444 151.8517) (xy 202.313451 151.8517) + (xy 202.592942 151.814904) (xy 202.865239 151.741942) (xy 203.125683 151.634063) (xy 203.369817 151.493112) + (xy 203.593465 151.3215) (xy 203.7928 151.122165) (xy 203.964412 150.898517) (xy 204.096509 150.669717) + (xy 204.105359 150.65439) (xy 204.105359 150.654389) (xy 204.105363 150.654383) (xy 204.213242 150.393939) + (xy 204.286204 150.121642) (xy 204.323 149.842151) (xy 204.323 149.560249) (xy 204.322457 149.556128) + (xy 204.31079 149.467503) (xy 204.286204 149.280758) (xy 204.213242 149.008461) (xy 204.206262 148.991609) + (xy 204.105359 148.748006) (xy 204.104586 148.746439) (xy 204.104496 148.745923) (xy 204.10381 148.744267) + (xy 204.10418 148.744113) (xy 204.092592 148.677607) (xy 204.119716 148.613217) (xy 204.177346 148.573713) + (xy 204.247185 148.571638) (xy 204.30349 148.603928) (xy 204.741341 149.041881) (xy 204.956555 149.257146) + (xy 204.990032 149.318473) (xy 204.98504 149.388164) (xy 204.983425 149.392268) (xy 204.952263 149.467502) + (xy 204.952261 149.46751) (xy 204.9215 149.622153) (xy 204.9215 149.779846) (xy 204.952261 149.934489) + (xy 204.952264 149.934501) (xy 205.012602 150.080172) (xy 205.012609 150.080185) (xy 205.10021 150.211288) + (xy 205.100213 150.211292) (xy 205.211707 150.322786) (xy 205.211711 150.322789) (xy 205.342814 150.41039) + (xy 205.342827 150.410397) (xy 205.488498 150.470735) (xy 205.488503 150.470737) (xy 205.643153 150.501499) + (xy 205.643156 150.5015) (xy 205.643158 150.5015) (xy 205.800844 150.5015) (xy 205.800845 150.501499) + (xy 205.955497 150.470737) (xy 206.101179 150.410394) (xy 206.232289 150.322789) (xy 206.343789 150.211289) + (xy 206.431394 150.080179) (xy 206.491737 149.934497) (xy 206.5225 149.779842) (xy 206.5225 149.622158) + (xy 206.5225 149.622155) (xy 206.522499 149.622153) (xy 206.51056 149.562132) (xy 206.491737 149.467503) + (xy 206.4775 149.433131) (xy 206.431397 149.321827) (xy 206.43139 149.321814) (xy 206.343789 149.190711) + (xy 206.343786 149.190707) (xy 206.232292 149.079213) (xy 206.232288 149.07921) (xy 206.101185 148.991609) + (xy 206.101172 148.991602) (xy 205.955501 148.931264) (xy 205.955489 148.931261) (xy 205.800845 148.9005) + (xy 205.800842 148.9005) (xy 205.643158 148.9005) (xy 205.643155 148.9005) (xy 205.48851 148.931261) + (xy 205.488503 148.931263) (xy 205.41347 148.962342) (xy 205.344001 148.96981) (xy 205.281522 148.938534) + (xy 205.278327 148.935451) (xy 201.733808 145.390098) (xy 201.700331 145.328771) (xy 201.6975 145.302427) + (xy 201.6975 143.236624) (xy 201.717185 143.169585) (xy 201.769989 143.12383) (xy 201.839147 143.113886) + (xy 201.902703 143.142911) (xy 201.909182 143.148943) (xy 206.05804 147.298237) (xy 210.556526 151.797196) + (xy 210.590008 151.858521) (xy 210.585019 151.928213) (xy 210.583402 151.932324) (xy 210.552263 152.007503) + (xy 210.552261 152.00751) (xy 210.5215 152.162153) (xy 210.5215 152.319846) (xy 210.552261 152.474489) + (xy 210.552264 152.474501) (xy 210.612602 152.620172) (xy 210.612609 152.620185) (xy 210.70021 152.751288) + (xy 210.700213 152.751292) (xy 210.811707 152.862786) (xy 210.811711 152.862789) (xy 210.942814 152.95039) + (xy 210.942827 152.950397) (xy 211.059206 152.998602) (xy 211.088503 153.010737) (xy 211.243153 153.041499) + (xy 211.243156 153.0415) (xy 211.243158 153.0415) (xy 211.400844 153.0415) (xy 211.400845 153.041499) + (xy 211.555497 153.010737) (xy 211.701179 152.950394) (xy 211.832289 152.862789) (xy 211.943789 152.751289) + (xy 212.031394 152.620179) (xy 212.091737 152.474497) (xy 212.1225 152.319842) (xy 212.1225 152.162158) + (xy 212.1225 152.162155) (xy 212.122499 152.162153) (xy 212.091737 152.007503) (xy 212.064278 151.941211) + (xy 212.031397 151.861827) (xy 212.03139 151.861814) (xy 211.943789 151.730711) (xy 211.943786 151.730707) + (xy 211.832292 151.619213) (xy 211.832288 151.61921) (xy 211.701185 151.531609) (xy 211.701172 151.531602) + (xy 211.555501 151.471264) (xy 211.555489 151.471261) (xy 211.400845 151.4405) (xy 211.400842 151.4405) + (xy 211.243158 151.4405) (xy 211.243155 151.4405) (xy 211.08851 151.471261) (xy 211.088502 151.471263) + (xy 211.013413 151.502365) (xy 210.943943 151.509832) (xy 210.881465 151.478556) (xy 210.878276 151.47548) + (xy 210.875833 151.473037) (xy 208.624576 149.221543) (xy 202.061814 142.65809) (xy 202.028332 142.596765) + (xy 202.0255 142.570413) (xy 202.0255 141.636806) (xy 206.827865 141.636806) (xy 206.845066 141.812868) + (xy 206.845621 141.818542) (xy 206.860455 141.870242) (xy 206.89598 141.994061) (xy 206.97728 142.157563) + (xy 206.977281 142.157565) (xy 206.977283 142.157568) (xy 207.033141 142.23205) (xy 207.086838 142.303652) + (xy 207.086839 142.303653) (xy 207.08684 142.303654) (xy 207.221032 142.427495) (xy 207.375425 142.524997) + (xy 207.488701 142.570405) (xy 207.544914 142.592939) (xy 207.544915 142.592939) (xy 207.544917 142.59294) + (xy 207.723908 142.629079) (xy 207.723902 142.629079) (xy 207.740222 142.629359) (xy 207.906484 142.63222) + (xy 208.086612 142.602258) (xy 208.142107 142.582198) (xy 208.258336 142.540185) (xy 208.258337 142.540183) + (xy 208.25834 142.540183) (xy 208.273375 142.53142) (xy 208.280059 142.527535) (xy 208.28035 142.527457) + (xy 208.308233 142.51116) (xy 208.308351 142.511092) (xy 208.311568 142.510301) (xy 208.370662 142.494299) + (xy 209.851792 142.494299) (xy 209.851914 142.494306) (xy 209.860005 142.494305) (xy 209.860008 142.494306) + (xy 209.892142 142.494302) (xy 209.954704 142.511234) (xy 209.98253 142.527491) (xy 209.982532 142.527491) + (xy 209.98868 142.531083) (xy 209.990335 142.531908) (xy 210.004478 142.54015) (xy 210.1762 142.602221) + (xy 210.356321 142.632182) (xy 210.535998 142.62909) (xy 210.538891 142.629041) (xy 210.717866 142.592905) + (xy 210.717869 142.592903) (xy 210.717874 142.592903) (xy 210.88736 142.524962) (xy 211.041746 142.427463) + (xy 211.069896 142.401485) (xy 211.17593 142.30363) (xy 211.175932 142.303628) (xy 211.177031 142.302163) + (xy 211.285485 142.157547) (xy 211.366784 141.994048) (xy 211.417142 141.818533) (xy 211.434897 141.636803) + (xy 211.41946 141.45486) (xy 211.419458 141.454854) (xy 211.406771 141.408409) (xy 211.371343 141.278718) + (xy 211.363583 141.262549) (xy 211.360496 141.256104) (xy 211.360448 141.255846) (xy 211.344071 141.221819) + (xy 211.343943 141.22103) (xy 211.331902 141.168231) (xy 211.331906 141.135767) (xy 211.331907 141.130808) + (xy 211.331906 141.130804) (xy 211.331907 141.122798) (xy 211.331899 141.12266) (xy 211.331899 139.819378) + (xy 211.334553 139.807712) (xy 211.333519 139.799399) (xy 211.344103 139.765734) (xy 211.350418 139.752576) + (xy 211.350498 139.752487) (xy 211.350468 139.752473) (xy 211.350469 139.752471) (xy 211.360474 139.731674) + (xy 211.360474 139.731668) (xy 211.363855 139.724642) (xy 211.364017 139.724238) (xy 211.371383 139.708891) + (xy 211.4195 139.532742) (xy 211.434937 139.350793) (xy 211.417181 139.169055) (xy 211.36682 138.993534) + (xy 211.285518 138.83003) (xy 211.199127 138.714834) (xy 211.175962 138.683945) (xy 211.118796 138.631189) + (xy 211.041769 138.560104) (xy 211.041766 138.560102) (xy 211.041765 138.560101) (xy 211.041762 138.560099) + (xy 210.887377 138.462601) (xy 210.717887 138.394658) (xy 210.717877 138.394656) (xy 210.538892 138.358518) + (xy 210.538899 138.358518) (xy 210.367194 138.355565) (xy 210.356318 138.355378) (xy 210.356317 138.355378) + (xy 210.356314 138.355378) (xy 210.176197 138.385338) (xy 210.176184 138.385341) (xy 210.004463 138.447413) + (xy 209.989948 138.45587) (xy 209.989863 138.455919) (xy 209.982776 138.46004) (xy 209.98253 138.460108) + (xy 209.954738 138.476344) (xy 209.95449 138.476489) (xy 209.951763 138.477159) (xy 209.892146 138.493296) + (xy 209.851801 138.493293) (xy 209.851697 138.4933) (xy 208.410996 138.4933) (xy 208.402814 138.493298) + (xy 208.402792 138.493293) (xy 208.372865 138.493295) (xy 208.370628 138.493295) (xy 208.370346 138.493212) + (xy 208.308093 138.476362) (xy 208.280271 138.460108) (xy 208.274205 138.456564) (xy 208.272507 138.455717) + (xy 208.265157 138.451434) (xy 208.258321 138.44745) (xy 208.086597 138.385378) (xy 208.086591 138.385377) + (xy 207.906481 138.355419) (xy 207.906478 138.355419) (xy 207.897939 138.355565) (xy 207.723907 138.358559) + (xy 207.544934 138.394694) (xy 207.544923 138.394697) (xy 207.375442 138.462637) (xy 207.375441 138.462637) + (xy 207.221061 138.560132) (xy 207.221058 138.560134) (xy 207.086867 138.683973) (xy 206.977315 138.830054) + (xy 206.89602 138.993544) (xy 206.896019 138.993547) (xy 206.896018 138.99355) (xy 206.882189 139.041747) + (xy 206.845658 139.169065) (xy 206.828811 139.34151) (xy 206.827904 139.350793) (xy 206.829805 139.373202) + (xy 206.84168 139.513178) (xy 206.84334 139.532735) (xy 206.87938 139.664669) (xy 206.891456 139.708878) + (xy 206.89146 139.708888) (xy 206.898698 139.72397) (xy 206.89874 139.724056) (xy 206.902323 139.731538) + (xy 206.902381 139.73184) (xy 206.918736 139.765806) (xy 206.918881 139.7667) (xy 206.930901 139.819369) + (xy 206.930901 141.168222) (xy 206.918707 141.221845) (xy 206.918119 141.223071) (xy 206.918039 141.223238) + (xy 206.899166 141.262437) (xy 206.898842 141.263239) (xy 206.891418 141.27871) (xy 206.843301 141.454854) + (xy 206.843301 141.454856) (xy 206.827865 141.636806) (xy 202.0255 141.636806) (xy 202.0255 135.64655) + (xy 203.002 135.64655) (xy 203.002 135.815849) (xy 203.028481 135.983047) (xy 203.080796 136.144053) + (xy 203.157652 136.294888) (xy 203.257148 136.431834) (xy 203.257152 136.431839) (xy 203.37686 136.551547) + (xy 203.376865 136.551551) (xy 203.496317 136.638337) (xy 203.513815 136.65105) (xy 203.577017 136.683253) + (xy 203.664646 136.727903) (xy 203.664648 136.727903) (xy 203.664651 136.727905) (xy 203.75095 136.755945) + (xy 203.825652 136.780218) (xy 203.992851 136.8067) (xy 203.992856 136.8067) (xy 204.162149 136.8067) + (xy 204.329347 136.780218) (xy 204.490349 136.727905) (xy 204.641185 136.65105) (xy 204.778141 136.551546) + (xy 204.897846 136.431841) (xy 204.99735 136.294885) (xy 205.074205 136.144049) (xy 205.126518 135.983047) + (xy 205.153 135.815849) (xy 205.153 135.64655) (xy 205.127428 135.485098) (xy 205.136382 135.415805) + (xy 205.181379 135.362353) (xy 205.24813 135.341713) (xy 205.249901 135.3417) (xy 205.488444 135.3417) + (xy 205.488451 135.3417) (xy 205.767942 135.304904) (xy 206.040239 135.231942) (xy 206.300683 135.124063) + (xy 206.544817 134.983112) (xy 206.768465 134.8115) (xy 206.9678 134.612165) (xy 207.035492 134.523946) + (xy 207.09192 134.482744) (xy 207.161666 134.478589) (xy 207.222586 134.512801) (xy 207.255339 134.574518) + (xy 207.249526 134.644146) (xy 207.241255 134.661433) (xy 207.185183 134.758551) (xy 207.185175 134.758568) + (xy 207.075097 135.024321) (xy 207.000646 135.302176) (xy 206.963101 135.587361) (xy 206.9631 135.587377) + (xy 206.9631 135.875022) (xy 206.963101 135.875038) (xy 207.000646 136.160223) (xy 207.075097 136.438078) + (xy 207.185175 136.703831) (xy 207.185183 136.703848) (xy 207.329004 136.952951) (xy 207.329015 136.952967) + (xy 207.504121 137.181171) (xy 207.504127 137.181178) (xy 207.707525 137.384576) (xy 207.803761 137.45842) + (xy 207.935741 137.559691) (xy 207.935748 137.559695) (xy 208.184851 137.703516) (xy 208.184856 137.703518) + (xy 208.184859 137.70352) (xy 208.184863 137.703521) (xy 208.184868 137.703524) (xy 208.290223 137.747163) + (xy 208.45062 137.813602) (xy 208.728475 137.888053) (xy 209.013671 137.9256) (xy 209.013678 137.9256) + (xy 209.301322 137.9256) (xy 209.301329 137.9256) (xy 209.586525 137.888053) (xy 209.86438 137.813602) + (xy 210.130141 137.70352) (xy 210.379259 137.559691) (xy 210.520078 137.451636) (xy 210.607475 137.384576) + (xy 210.607478 137.384572) (xy 210.810872 137.181178) (xy 210.810877 137.181173) (xy 210.985991 136.952959) + (xy 211.12982 136.703841) (xy 211.239902 136.43808) (xy 211.314353 136.160225) (xy 211.3519 135.875029) + (xy 211.3519 135.64655) (xy 213.162 135.64655) (xy 213.162 135.815849) (xy 213.188481 135.983047) + (xy 213.240796 136.144053) (xy 213.317652 136.294888) (xy 213.417148 136.431834) (xy 213.417152 136.431839) + (xy 213.53686 136.551547) (xy 213.536865 136.551551) (xy 213.656317 136.638337) (xy 213.673815 136.65105) + (xy 213.737017 136.683253) (xy 213.824646 136.727903) (xy 213.824648 136.727903) (xy 213.824651 136.727905) + (xy 213.91095 136.755945) (xy 213.985652 136.780218) (xy 214.152851 136.8067) (xy 214.152856 136.8067) + (xy 214.322149 136.8067) (xy 214.489347 136.780218) (xy 214.650349 136.727905) (xy 214.801185 136.65105) + (xy 214.938141 136.551546) (xy 215.057846 136.431841) (xy 215.15735 136.294885) (xy 215.234205 136.144049) + (xy 215.286518 135.983047) (xy 215.313 135.815849) (xy 215.313 135.64655) (xy 215.286518 135.479352) + (xy 215.241796 135.341713) (xy 215.234205 135.318351) (xy 215.234203 135.318348) (xy 215.234203 135.318346) + (xy 215.190176 135.23194) (xy 215.15735 135.167515) (xy 215.125781 135.124064) (xy 215.057851 135.030565) + (xy 215.057847 135.03056) (xy 214.938139 134.910852) (xy 214.938134 134.910848) (xy 214.801188 134.811352) + (xy 214.801187 134.811351) (xy 214.801185 134.81135) (xy 214.736109 134.778192) (xy 214.650353 134.734496) + (xy 214.489347 134.682181) (xy 214.322149 134.6557) (xy 214.322144 134.6557) (xy 214.152856 134.6557) + (xy 214.152851 134.6557) (xy 213.985652 134.682181) (xy 213.824646 134.734496) (xy 213.673811 134.811352) + (xy 213.536865 134.910848) (xy 213.53686 134.910852) (xy 213.417152 135.03056) (xy 213.417148 135.030565) + (xy 213.317652 135.167511) (xy 213.240796 135.318346) (xy 213.188481 135.479352) (xy 213.162 135.64655) + (xy 211.3519 135.64655) (xy 211.3519 135.587371) (xy 211.314353 135.302175) (xy 211.239902 135.02432) + (xy 211.173463 134.863923) (xy 211.129824 134.758568) (xy 211.129816 134.758551) (xy 210.985995 134.509448) + (xy 210.985994 134.509447) (xy 210.985991 134.509441) (xy 210.861525 134.347233) (xy 210.810878 134.281228) + (xy 210.810872 134.281221) (xy 210.607478 134.077827) (xy 210.607471 134.077821) (xy 210.379267 133.902715) + (xy 210.379265 133.902713) (xy 210.379259 133.902709) (xy 210.379254 133.902706) (xy 210.379251 133.902704) + (xy 210.130148 133.758883) (xy 210.130131 133.758875) (xy 209.864378 133.648797) (xy 209.586523 133.574346) + (xy 209.301338 133.536801) (xy 209.301335 133.5368) (xy 209.301329 133.5368) (xy 209.013671 133.5368) + (xy 209.013665 133.5368) (xy 209.013661 133.536801) (xy 208.728476 133.574346) (xy 208.450621 133.648797) + (xy 208.184868 133.758875) (xy 208.184851 133.758883) (xy 207.935748 133.902704) (xy 207.935732 133.902715) + (xy 207.707528 134.077821) (xy 207.707521 134.077827) (xy 207.504127 134.281221) (xy 207.43293 134.374007) + (xy 207.376501 134.415209) (xy 207.306755 134.419364) (xy 207.245835 134.385151) (xy 207.213083 134.323434) + (xy 207.218896 134.253807) (xy 207.227161 134.236531) (xy 207.280363 134.144383) (xy 207.388242 133.883939) + (xy 207.461204 133.611642) (xy 207.498 133.332151) (xy 207.498 133.050249) (xy 207.461204 132.770758) + (xy 207.388242 132.498461) (xy 207.38126 132.481606) (xy 207.359309 132.428611) (xy 207.280363 132.238017) + (xy 207.280361 132.238014) (xy 207.280359 132.238009) (xy 207.139416 131.99389) (xy 207.139412 131.993883) + (xy 206.9678 131.770235) (xy 206.967798 131.770233) (xy 206.967795 131.770229) (xy 206.76847 131.570904) + (xy 206.669871 131.495246) (xy 206.544817 131.399288) (xy 206.544811 131.399284) (xy 206.544809 131.399283) + (xy 206.30069 131.25834) (xy 206.300679 131.258335) (xy 206.040243 131.150459) (xy 205.767939 131.077495) + (xy 205.488458 131.0407) (xy 205.488451 131.0407) (xy 205.206549 131.0407) (xy 205.206541 131.0407) + (xy 204.92706 131.077495) (xy 204.654756 131.150459) (xy 204.39432 131.258335) (xy 204.394309 131.25834) + (xy 204.15019 131.399283) (xy 204.150182 131.399289) (xy 203.926529 131.570904) (xy 203.727204 131.770229) + (xy 203.555589 131.993882) (xy 203.555583 131.99389) (xy 203.41464 132.238009) (xy 203.414635 132.23802) + (xy 203.306759 132.498456) (xy 203.233795 132.77076) (xy 203.197 133.050241) (xy 203.197 133.332158) + (xy 203.233795 133.611639) (xy 203.306759 133.883943) (xy 203.414635 134.144379) (xy 203.41464 134.14439) + (xy 203.555583 134.388509) (xy 203.555594 134.388525) (xy 203.686338 134.558914) (xy 203.711532 134.624083) + (xy 203.697494 134.692528) (xy 203.64868 134.742517) (xy 203.644258 134.744884) (xy 203.513813 134.81135) + (xy 203.376865 134.910848) (xy 203.37686 134.910852) (xy 203.257152 135.03056) (xy 203.257148 135.030565) + (xy 203.157652 135.167511) (xy 203.080796 135.318346) (xy 203.028481 135.479352) (xy 203.002 135.64655) + (xy 202.0255 135.64655) (xy 202.0255 134.046075) (xy 202.045185 133.979036) (xy 202.097989 133.933281) + (xy 202.101999 133.931534) (xy 202.177179 133.900394) (xy 202.308289 133.812789) (xy 202.419789 133.701289) + (xy 202.507394 133.570179) (xy 202.567737 133.424497) (xy 202.5985 133.269842) (xy 202.5985 133.112158) + (xy 202.5985 133.112155) (xy 202.598499 133.112153) (xy 202.567737 132.957503) (xy 202.55203 132.919582) + (xy 202.507397 132.811827) (xy 202.50739 132.811814) (xy 202.419789 132.680711) (xy 202.419786 132.680707) + (xy 202.308292 132.569213) (xy 202.308288 132.56921) (xy 202.177185 132.481609) (xy 202.177172 132.481602) + (xy 202.031501 132.421264) (xy 202.031489 132.421261) (xy 201.876845 132.3905) (xy 201.876842 132.3905) + (xy 201.719158 132.3905) (xy 201.719155 132.3905) (xy 201.56451 132.421261) (xy 201.564498 132.421264) + (xy 201.489279 132.452421) (xy 201.41981 132.45989) (xy 201.357331 132.428614) (xy 201.35417 132.425564) + (xy 198.506068 129.578059) (xy 197.298828 128.371072) (xy 197.265337 128.309753) (xy 197.2625 128.283382) + (xy 197.2625 122.432106) (xy 202.065365 122.432106) (xy 202.081576 122.598035) (xy 202.083121 122.613842) + (xy 202.102506 122.681404) (xy 202.13348 122.789361) (xy 202.21478 122.952863) (xy 202.214781 122.952865) + (xy 202.214783 122.952868) (xy 202.227866 122.970313) (xy 202.324338 123.098952) (xy 202.324339 123.098953) + (xy 202.32434 123.098954) (xy 202.458532 123.222795) (xy 202.612925 123.320297) (xy 202.748077 123.374474) + (xy 202.782414 123.388239) (xy 202.782415 123.388239) (xy 202.782417 123.38824) (xy 202.961408 123.424379) + (xy 202.961402 123.424379) (xy 202.977722 123.424659) (xy 203.143984 123.42752) (xy 203.324112 123.397558) + (xy 203.431061 123.358899) (xy 203.495836 123.335485) (xy 203.495837 123.335483) (xy 203.49584 123.335483) + (xy 203.510875 123.32672) (xy 203.517559 123.322835) (xy 203.51785 123.322757) (xy 203.545733 123.30646) + (xy 203.545851 123.306392) (xy 203.549068 123.305601) (xy 203.608162 123.289599) (xy 205.089292 123.289599) + (xy 205.089414 123.289606) (xy 205.097505 123.289605) (xy 205.097508 123.289606) (xy 205.129642 123.289602) + (xy 205.192204 123.306534) (xy 205.22003 123.322791) (xy 205.220032 123.322791) (xy 205.22618 123.326383) + (xy 205.227835 123.327208) (xy 205.241978 123.33545) (xy 205.4137 123.397521) (xy 205.593821 123.427482) + (xy 205.773498 123.42439) (xy 205.776391 123.424341) (xy 205.955366 123.388205) (xy 205.955369 123.388203) + (xy 205.955374 123.388203) (xy 206.12486 123.320262) (xy 206.279246 123.222763) (xy 206.289905 123.212927) + (xy 206.41343 123.09893) (xy 206.413432 123.098928) (xy 206.426272 123.081807) (xy 206.522985 122.952847) + (xy 206.604284 122.789348) (xy 206.654642 122.613833) (xy 206.672397 122.432103) (xy 206.65696 122.25016) + (xy 206.656958 122.250154) (xy 206.645392 122.207814) (xy 206.608843 122.074018) (xy 206.601083 122.057849) + (xy 206.597996 122.051404) (xy 206.597948 122.051146) (xy 206.581571 122.017119) (xy 206.581443 122.01633) + (xy 206.569402 121.963531) (xy 206.569402 121.963522) (xy 206.569407 121.926108) (xy 206.569406 121.926104) + (xy 206.569407 121.918098) (xy 206.569399 121.91796) (xy 206.569399 120.614677) (xy 206.572054 120.603008) + (xy 206.57102 120.594694) (xy 206.581605 120.561028) (xy 206.587911 120.54789) (xy 206.597974 120.526974) + (xy 206.597974 120.526969) (xy 206.60136 120.519933) (xy 206.601525 120.519522) (xy 206.601646 120.51927) + (xy 206.608883 120.504191) (xy 206.657 120.328042) (xy 206.672437 120.146093) (xy 206.654681 119.964355) + (xy 206.60432 119.788834) (xy 206.523018 119.62533) (xy 206.428575 119.499397) (xy 206.413462 119.479245) + (xy 206.345159 119.416211) (xy 206.279269 119.355404) (xy 206.279266 119.355402) (xy 206.279265 119.355401) + (xy 206.279262 119.355399) (xy 206.124877 119.257901) (xy 205.955387 119.189958) (xy 205.955377 119.189956) + (xy 205.776392 119.153818) (xy 205.776399 119.153818) (xy 205.604694 119.150865) (xy 205.593818 119.150678) + (xy 205.593817 119.150678) (xy 205.593814 119.150678) (xy 205.413697 119.180638) (xy 205.413684 119.180641) + (xy 205.241963 119.242713) (xy 205.227448 119.25117) (xy 205.227363 119.251219) (xy 205.220276 119.25534) + (xy 205.22003 119.255408) (xy 205.192238 119.271644) (xy 205.19199 119.271789) (xy 205.189263 119.272459) + (xy 205.129646 119.288596) (xy 205.089301 119.288593) (xy 205.089197 119.2886) (xy 203.648496 119.2886) + (xy 203.640314 119.288598) (xy 203.640292 119.288593) (xy 203.610365 119.288595) (xy 203.608128 119.288595) + (xy 203.607846 119.288512) (xy 203.545593 119.271662) (xy 203.517771 119.255408) (xy 203.511705 119.251864) + (xy 203.510007 119.251017) (xy 203.502657 119.246734) (xy 203.495821 119.24275) (xy 203.324097 119.180678) + (xy 203.324091 119.180677) (xy 203.143981 119.150719) (xy 203.143978 119.150719) (xy 203.135439 119.150865) + (xy 202.961407 119.153859) (xy 202.782434 119.189994) (xy 202.782423 119.189997) (xy 202.612942 119.257937) + (xy 202.612941 119.257937) (xy 202.458561 119.355432) (xy 202.458558 119.355434) (xy 202.324367 119.479273) + (xy 202.214815 119.625354) (xy 202.13352 119.788844) (xy 202.133519 119.788847) (xy 202.133518 119.78885) + (xy 202.116645 119.847658) (xy 202.083158 119.964365) (xy 202.069378 120.105413) (xy 202.065404 120.146093) + (xy 202.066583 120.159989) (xy 202.080679 120.326147) (xy 202.08084 120.328035) (xy 202.105548 120.418484) + (xy 202.128956 120.504178) (xy 202.12896 120.504188) (xy 202.136198 120.51927) (xy 202.13624 120.519356) + (xy 202.139823 120.526838) (xy 202.139881 120.52714) (xy 202.156197 120.561025) (xy 202.156236 120.561106) + (xy 202.156381 120.562) (xy 202.168401 120.614669) (xy 202.168401 121.963522) (xy 202.156207 122.017145) + (xy 202.155619 122.018371) (xy 202.155539 122.018538) (xy 202.136666 122.057737) (xy 202.136342 122.058539) + (xy 202.128918 122.07401) (xy 202.080801 122.250154) (xy 202.080801 122.250156) (xy 202.065365 122.432106) + (xy 197.2625 122.432106) (xy 197.2625 116.59655) (xy 198.2395 116.59655) (xy 198.2395 116.765849) + (xy 198.265981 116.933047) (xy 198.318296 117.094053) (xy 198.395152 117.244888) (xy 198.494648 117.381834) + (xy 198.494651 117.381838) (xy 198.61436 117.501547) (xy 198.614365 117.501551) (xy 198.694244 117.559586) + (xy 198.751315 117.60105) (xy 198.847425 117.65002) (xy 198.902146 117.677903) (xy 198.902148 117.677903) + (xy 198.902151 117.677905) (xy 198.98845 117.705945) (xy 199.063152 117.730218) (xy 199.230351 117.7567) + (xy 199.230356 117.7567) (xy 199.399649 117.7567) (xy 199.566847 117.730218) (xy 199.727849 117.677905) + (xy 199.878685 117.60105) (xy 200.015641 117.501546) (xy 200.135346 117.381841) (xy 200.135346 117.38184) + (xy 200.135349 117.381838) (xy 200.135351 117.381834) (xy 200.156179 117.353167) (xy 200.23485 117.244885) + (xy 200.311705 117.094049) (xy 200.364018 116.933047) (xy 200.3905 116.765849) (xy 200.3905 116.59655) + (xy 200.364928 116.435098) (xy 200.373882 116.365805) (xy 200.418879 116.312353) (xy 200.48563 116.291713) + (xy 200.487401 116.2917) (xy 200.725944 116.2917) (xy 200.725951 116.2917) (xy 201.005442 116.254904) + (xy 201.277739 116.181942) (xy 201.538183 116.074063) (xy 201.782317 115.933112) (xy 202.005965 115.7615) + (xy 202.2053 115.562165) (xy 202.272992 115.473946) (xy 202.32942 115.432744) (xy 202.399166 115.428589) + (xy 202.460086 115.462801) (xy 202.492839 115.524518) (xy 202.487026 115.594146) (xy 202.478755 115.611433) + (xy 202.422683 115.708551) (xy 202.422675 115.708568) (xy 202.312597 115.974321) (xy 202.238146 116.252176) + (xy 202.200601 116.537361) (xy 202.2006 116.537377) (xy 202.2006 116.825022) (xy 202.200601 116.825038) + (xy 202.238146 117.110223) (xy 202.312597 117.388078) (xy 202.422675 117.653831) (xy 202.422683 117.653848) + (xy 202.566504 117.902951) (xy 202.566515 117.902967) (xy 202.741621 118.131171) (xy 202.741627 118.131178) + (xy 202.945021 118.334572) (xy 202.945027 118.334577) (xy 203.173241 118.509691) (xy 203.173248 118.509695) + (xy 203.422351 118.653516) (xy 203.422356 118.653518) (xy 203.422359 118.65352) (xy 203.422363 118.653521) + (xy 203.422368 118.653524) (xy 203.469808 118.673174) (xy 203.68812 118.763602) (xy 203.965975 118.838053) + (xy 204.251171 118.8756) (xy 204.251178 118.8756) (xy 204.538822 118.8756) (xy 204.538829 118.8756) + (xy 204.824025 118.838053) (xy 205.10188 118.763602) (xy 205.367641 118.65352) (xy 205.370056 118.652126) + (xy 205.484067 118.586301) (xy 205.616759 118.509691) (xy 205.844973 118.334577) (xy 206.048377 118.131173) + (xy 206.223491 117.902959) (xy 206.36732 117.653841) (xy 206.477402 117.38808) (xy 206.551853 117.110225) + (xy 206.5894 116.825029) (xy 206.5894 116.59655) (xy 208.3995 116.59655) (xy 208.3995 116.765849) + (xy 208.425981 116.933047) (xy 208.478296 117.094053) (xy 208.555152 117.244888) (xy 208.654648 117.381834) + (xy 208.654651 117.381838) (xy 208.77436 117.501547) (xy 208.774365 117.501551) (xy 208.854244 117.559586) + (xy 208.911315 117.60105) (xy 209.007425 117.65002) (xy 209.062146 117.677903) (xy 209.062148 117.677903) + (xy 209.062151 117.677905) (xy 209.14845 117.705945) (xy 209.223152 117.730218) (xy 209.390351 117.7567) + (xy 209.390356 117.7567) (xy 209.559649 117.7567) (xy 209.726847 117.730218) (xy 209.887849 117.677905) + (xy 210.038685 117.60105) (xy 210.175641 117.501546) (xy 210.295346 117.381841) (xy 210.295346 117.38184) + (xy 210.295349 117.381838) (xy 210.295351 117.381834) (xy 210.316179 117.353167) (xy 210.39485 117.244885) + (xy 210.471705 117.094049) (xy 210.524018 116.933047) (xy 210.5505 116.765849) (xy 210.5505 116.59655) + (xy 210.524018 116.429352) (xy 210.497275 116.347046) (xy 210.471705 116.268351) (xy 210.471703 116.268348) + (xy 210.471703 116.268346) (xy 210.421015 116.168867) (xy 210.39485 116.117515) (xy 210.363281 116.074064) + (xy 210.295351 115.980565) (xy 210.295347 115.98056) (xy 210.175639 115.860852) (xy 210.175634 115.860848) + (xy 210.038688 115.761352) (xy 210.038687 115.761351) (xy 210.038685 115.76135) (xy 209.989398 115.736237) + (xy 209.887853 115.684496) (xy 209.726847 115.632181) (xy 209.559649 115.6057) (xy 209.559644 115.6057) + (xy 209.390356 115.6057) (xy 209.390351 115.6057) (xy 209.223152 115.632181) (xy 209.062146 115.684496) + (xy 208.911311 115.761352) (xy 208.774365 115.860848) (xy 208.77436 115.860852) (xy 208.654652 115.98056) + (xy 208.654648 115.980565) (xy 208.555152 116.117511) (xy 208.478296 116.268346) (xy 208.425981 116.429352) + (xy 208.3995 116.59655) (xy 206.5894 116.59655) (xy 206.5894 116.537371) (xy 206.551853 116.252175) + (xy 206.477402 115.97432) (xy 206.389705 115.762601) (xy 206.367324 115.708568) (xy 206.367316 115.708551) + (xy 206.223495 115.459448) (xy 206.223491 115.459441) (xy 206.082073 115.275141) (xy 206.048378 115.231228) + (xy 206.048372 115.231221) (xy 205.844978 115.027827) (xy 205.844971 115.027821) (xy 205.616767 114.852715) + (xy 205.616765 114.852713) (xy 205.616759 114.852709) (xy 205.616754 114.852706) (xy 205.616751 114.852704) + (xy 205.367648 114.708883) (xy 205.367631 114.708875) (xy 205.101878 114.598797) (xy 204.824023 114.524346) + (xy 204.538838 114.486801) (xy 204.538835 114.4868) (xy 204.538829 114.4868) (xy 204.251171 114.4868) + (xy 204.251165 114.4868) (xy 204.251161 114.486801) (xy 203.965976 114.524346) (xy 203.688121 114.598797) + (xy 203.422368 114.708875) (xy 203.422351 114.708883) (xy 203.173248 114.852704) (xy 203.173232 114.852715) + (xy 202.945028 115.027821) (xy 202.945021 115.027827) (xy 202.741627 115.231221) (xy 202.67043 115.324007) + (xy 202.614001 115.365209) (xy 202.544255 115.369364) (xy 202.483335 115.335151) (xy 202.450583 115.273434) + (xy 202.456396 115.203807) (xy 202.464661 115.186531) (xy 202.517863 115.094383) (xy 202.625742 114.833939) + (xy 202.698704 114.561642) (xy 202.7355 114.282151) (xy 202.7355 114.000249) (xy 202.698704 113.720758) + (xy 202.625742 113.448461) (xy 202.61876 113.431606) (xy 202.593765 113.371261) (xy 202.517863 113.188017) + (xy 202.517861 113.188014) (xy 202.517859 113.188009) (xy 202.376916 112.94389) (xy 202.376912 112.943883) + (xy 202.2053 112.720235) (xy 202.205298 112.720233) (xy 202.205295 112.720229) (xy 202.00597 112.520904) + (xy 201.981161 112.501867) (xy 201.782317 112.349288) (xy 201.782311 112.349284) (xy 201.782309 112.349283) + (xy 201.53819 112.20834) (xy 201.538179 112.208335) (xy 201.277743 112.100459) (xy 201.005439 112.027495) + (xy 200.725958 111.9907) (xy 200.725951 111.9907) (xy 200.444049 111.9907) (xy 200.444041 111.9907) + (xy 200.16456 112.027495) (xy 199.892256 112.100459) (xy 199.63182 112.208335) (xy 199.631809 112.20834) + (xy 199.38769 112.349283) (xy 199.387682 112.349289) (xy 199.164029 112.520904) (xy 198.964704 112.720229) + (xy 198.793089 112.943882) (xy 198.793083 112.94389) (xy 198.65214 113.188009) (xy 198.652135 113.18802) + (xy 198.544259 113.448456) (xy 198.471295 113.72076) (xy 198.4345 114.000241) (xy 198.4345 114.282158) + (xy 198.471295 114.561639) (xy 198.544259 114.833943) (xy 198.652135 115.094379) (xy 198.65214 115.09439) + (xy 198.793083 115.338509) (xy 198.793094 115.338525) (xy 198.923838 115.508914) (xy 198.949032 115.574083) + (xy 198.934994 115.642528) (xy 198.88618 115.692517) (xy 198.881758 115.694884) (xy 198.751313 115.76135) + (xy 198.614365 115.860848) (xy 198.61436 115.860852) (xy 198.494652 115.98056) (xy 198.494648 115.980565) + (xy 198.395152 116.117511) (xy 198.318296 116.268346) (xy 198.265981 116.429352) (xy 198.2395 116.59655) + (xy 197.2625 116.59655) (xy 197.2625 114.996075) (xy 197.282185 114.929036) (xy 197.334989 114.883281) + (xy 197.338999 114.881534) (xy 197.414179 114.850394) (xy 197.545289 114.762789) (xy 197.656789 114.651289) + (xy 197.744394 114.520179) (xy 197.804737 114.374497) (xy 197.8355 114.219842) (xy 197.8355 114.062158) + (xy 197.8355 114.062155) (xy 197.835499 114.062153) (xy 197.823556 114.002113) (xy 197.804737 113.907503) + (xy 197.777278 113.841211) (xy 197.744397 113.761827) (xy 197.74439 113.761814) (xy 197.656789 113.630711) + (xy 197.656786 113.630707) (xy 197.545292 113.519213) (xy 197.545288 113.51921) (xy 197.414185 113.431609) + (xy 197.414172 113.431602) (xy 197.268501 113.371264) (xy 197.268489 113.371261) (xy 197.113845 113.3405) + (xy 197.113842 113.3405) (xy 196.956158 113.3405) (xy 196.956155 113.3405) (xy 196.80151 113.371261) + (xy 196.801503 113.371263) (xy 196.726368 113.402384) (xy 196.656899 113.409851) (xy 196.59442 113.378576) + (xy 196.591236 113.375503) (xy 191.764886 108.549153) (xy 197.6265 108.549153) (xy 197.6265 108.706846) + (xy 197.657261 108.861489) (xy 197.657264 108.861501) (xy 197.717602 109.007172) (xy 197.717609 109.007185) + (xy 197.80521 109.138288) (xy 197.805213 109.138292) (xy 197.916707 109.249786) (xy 197.916711 109.249789) + (xy 198.047814 109.33739) (xy 198.047827 109.337397) (xy 198.174848 109.39001) (xy 198.193503 109.397737) + (xy 198.348153 109.428499) (xy 198.348156 109.4285) (xy 198.348158 109.4285) (xy 198.505844 109.4285) + (xy 198.505845 109.428499) (xy 198.660497 109.397737) (xy 198.788413 109.344753) (xy 198.806172 109.337397) + (xy 198.806172 109.337396) (xy 198.806179 109.337394) (xy 198.937289 109.249789) (xy 199.048789 109.138289) + (xy 199.136394 109.007179) (xy 199.144168 108.988412) (xy 199.151603 108.970461) (xy 199.196737 108.861497) + (xy 199.2275 108.706842) (xy 199.2275 108.549158) (xy 199.2275 108.549155) (xy 199.227499 108.549153) + (xy 199.196738 108.39451) (xy 199.196737 108.394503) (xy 199.165614 108.319365) (xy 199.158146 108.249901) + (xy 199.18942 108.187422) (xy 199.192466 108.184266) (xy 200.444115 106.932618) (xy 200.47875 106.849003) + (xy 200.47875 106.758497) (xy 200.47875 102.029747) (xy 200.444115 101.946132) (xy 200.444113 101.94613) + (xy 200.439441 101.93485) (xy 200.443008 101.933372) (xy 200.428669 101.887611) (xy 200.438086 101.837926) + (xy 200.470987 101.758497) (xy 200.50175 101.603842) (xy 200.50175 101.446158) (xy 200.50175 101.446155) + (xy 200.501749 101.446153) (xy 200.499862 101.436667) (xy 200.470987 101.291503) (xy 200.469207 101.287206) + (xy 200.410647 101.145827) (xy 200.41064 101.145814) (xy 200.323039 101.014711) (xy 200.323036 101.014707) + (xy 200.211542 100.903213) (xy 200.211538 100.90321) (xy 200.080435 100.815609) (xy 200.080422 100.815602) + (xy 199.934751 100.755264) (xy 199.934739 100.755261) (xy 199.780095 100.7245) (xy 199.780092 100.7245) + (xy 199.622408 100.7245) (xy 199.622405 100.7245) (xy 199.46776 100.755261) (xy 199.467748 100.755264) + (xy 199.322077 100.815602) (xy 199.322064 100.815609) (xy 199.190961 100.90321) (xy 199.190957 100.903213) + (xy 199.079463 101.014707) (xy 199.07946 101.014711) (xy 198.991859 101.145814) (xy 198.991852 101.145827) + (xy 198.931514 101.291498) (xy 198.931511 101.29151) (xy 198.90075 101.446153) (xy 198.90075 101.603846) + (xy 198.931511 101.758489) (xy 198.931514 101.758501) (xy 198.991852 101.904172) (xy 198.991859 101.904185) + (xy 199.07946 102.035288) (xy 199.079463 102.035292) (xy 199.190957 102.146786) (xy 199.190961 102.146789) + (xy 199.322064 102.23439) (xy 199.322077 102.234397) (xy 199.448625 102.286814) (xy 199.467753 102.294737) + (xy 199.603636 102.321766) (xy 199.622403 102.325499) (xy 199.622406 102.3255) (xy 199.622408 102.3255) + (xy 199.780093 102.3255) (xy 199.801157 102.321309) (xy 199.875559 102.30651) (xy 199.945149 102.312737) + (xy 200.000327 102.355599) (xy 200.023572 102.421489) (xy 200.02375 102.428127) (xy 200.02375 106.658154) + (xy 200.004065 106.725193) (xy 199.987431 106.745835) (xy 198.870762 107.862503) (xy 198.809439 107.895988) + (xy 198.739747 107.891004) (xy 198.735629 107.889383) (xy 198.660501 107.858264) (xy 198.660489 107.858261) + (xy 198.505845 107.8275) (xy 198.505842 107.8275) (xy 198.348158 107.8275) (xy 198.348155 107.8275) + (xy 198.19351 107.858261) (xy 198.193498 107.858264) (xy 198.047827 107.918602) (xy 198.047814 107.918609) + (xy 197.916711 108.00621) (xy 197.916707 108.006213) (xy 197.805213 108.117707) (xy 197.80521 108.117711) + (xy 197.717609 108.248814) (xy 197.717602 108.248827) (xy 197.657264 108.394498) (xy 197.657261 108.39451) + (xy 197.6265 108.549153) (xy 191.764886 108.549153) (xy 187.721819 104.506086) (xy 187.688334 104.444763) + (xy 187.6855 104.418405) (xy 187.6855 103.896353) (xy 191.3783 103.896353) (xy 191.3783 104.054046) + (xy 191.409061 104.208689) (xy 191.409064 104.208701) (xy 191.469402 104.354372) (xy 191.469409 104.354385) + (xy 191.55701 104.485488) (xy 191.557013 104.485492) (xy 191.668507 104.596986) (xy 191.668511 104.596989) + (xy 191.799614 104.68459) (xy 191.799627 104.684597) (xy 191.945298 104.744935) (xy 191.945303 104.744937) + (xy 192.092915 104.774299) (xy 192.099953 104.775699) (xy 192.099956 104.7757) (xy 192.099958 104.7757) + (xy 192.257644 104.7757) (xy 192.257645 104.775699) (xy 192.412297 104.744937) (xy 192.538004 104.692868) + (xy 192.557972 104.684597) (xy 192.557972 104.684596) (xy 192.557979 104.684594) (xy 192.689089 104.596989) + (xy 192.800589 104.485489) (xy 192.888194 104.354379) (xy 192.900306 104.325136) (xy 192.944147 104.270733) + (xy 193.010441 104.248667) (xy 193.07814 104.265946) (xy 193.081013 104.267704) (xy 193.141868 104.306135) + (xy 193.147825 104.309897) (xy 193.317314 104.377839) (xy 193.317315 104.377839) (xy 193.317317 104.37784) + (xy 193.496308 104.413979) (xy 193.496302 104.413979) (xy 193.512622 104.414259) (xy 193.678884 104.41712) + (xy 193.859012 104.387158) (xy 193.906584 104.369962) (xy 194.030736 104.325085) (xy 194.030737 104.325083) + (xy 194.03074 104.325083) (xy 194.045775 104.31632) (xy 194.052459 104.312435) (xy 194.05275 104.312357) + (xy 194.080633 104.29606) (xy 194.080751 104.295992) (xy 194.083968 104.295201) (xy 194.143062 104.279199) + (xy 195.624192 104.279199) (xy 195.624314 104.279206) (xy 195.632405 104.279205) (xy 195.632408 104.279206) + (xy 195.664542 104.279202) (xy 195.727104 104.296134) (xy 195.75493 104.312391) (xy 195.754932 104.312391) + (xy 195.76108 104.315983) (xy 195.762735 104.316808) (xy 195.776878 104.32505) (xy 195.9486 104.387121) + (xy 196.128721 104.417082) (xy 196.308398 104.41399) (xy 196.311291 104.413941) (xy 196.490266 104.377805) + (xy 196.490269 104.377803) (xy 196.490274 104.377803) (xy 196.65976 104.309862) (xy 196.814146 104.212363) + (xy 196.818115 104.208701) (xy 196.94833 104.08853) (xy 196.948332 104.088528) (xy 196.955812 104.078554) + (xy 197.057885 103.942447) (xy 197.139184 103.778948) (xy 197.189542 103.603433) (xy 197.207297 103.421703) + (xy 197.19186 103.23976) (xy 197.191582 103.238744) (xy 197.1773 103.186461) (xy 197.143743 103.063618) + (xy 197.135983 103.047449) (xy 197.132896 103.041004) (xy 197.132848 103.040746) (xy 197.116471 103.006719) + (xy 197.116343 103.00593) (xy 197.104302 102.953131) (xy 197.104302 102.953122) (xy 197.104307 102.915708) + (xy 197.104306 102.915704) (xy 197.104307 102.907698) (xy 197.104299 102.90756) (xy 197.104299 101.604277) + (xy 197.106954 101.592608) (xy 197.10592 101.584294) (xy 197.116505 101.550628) (xy 197.122811 101.53749) + (xy 197.132874 101.516574) (xy 197.132874 101.516569) (xy 197.13626 101.509533) (xy 197.136425 101.509122) + (xy 197.137519 101.506843) (xy 197.143783 101.493791) (xy 197.1919 101.317642) (xy 197.207337 101.135693) + (xy 197.189581 100.953955) (xy 197.13922 100.778434) (xy 197.057918 100.61493) (xy 196.960102 100.4845) + (xy 196.948362 100.468845) (xy 196.948361 100.468844) (xy 196.814169 100.345004) (xy 196.814166 100.345002) + (xy 196.814165 100.345001) (xy 196.814162 100.344999) (xy 196.659777 100.247501) (xy 196.490287 100.179558) + (xy 196.490277 100.179556) (xy 196.311292 100.143418) (xy 196.311299 100.143418) (xy 196.139594 100.140465) + (xy 196.128718 100.140278) (xy 196.128717 100.140278) (xy 196.128714 100.140278) (xy 195.948597 100.170238) + (xy 195.948584 100.170241) (xy 195.776863 100.232313) (xy 195.762348 100.24077) (xy 195.762263 100.240819) + (xy 195.755176 100.24494) (xy 195.75493 100.245008) (xy 195.727138 100.261244) (xy 195.72689 100.261389) + (xy 195.724163 100.262059) (xy 195.664546 100.278196) (xy 195.624201 100.278193) (xy 195.624097 100.2782) + (xy 194.183396 100.2782) (xy 194.175214 100.278198) (xy 194.175192 100.278193) (xy 194.145265 100.278195) + (xy 194.143028 100.278195) (xy 194.142746 100.278112) (xy 194.080493 100.261262) (xy 194.052671 100.245008) + (xy 194.046605 100.241464) (xy 194.044907 100.240617) (xy 194.035077 100.234889) (xy 194.030721 100.23235) + (xy 193.858997 100.170278) (xy 193.858991 100.170277) (xy 193.678881 100.140319) (xy 193.678878 100.140319) + (xy 193.670339 100.140465) (xy 193.496307 100.143459) (xy 193.317334 100.179594) (xy 193.317323 100.179597) + (xy 193.147842 100.247537) (xy 193.147841 100.247537) (xy 192.993461 100.345032) (xy 192.993458 100.345034) + (xy 192.859267 100.468873) (xy 192.749715 100.614954) (xy 192.66842 100.778444) (xy 192.668419 100.778447) + (xy 192.668418 100.77845) (xy 192.651174 100.83855) (xy 192.618058 100.953965) (xy 192.600304 101.135691) + (xy 192.600304 101.135693) (xy 192.602858 101.165794) (xy 192.614891 101.307637) (xy 192.61574 101.317635) + (xy 192.648522 101.437642) (xy 192.663856 101.493778) (xy 192.66386 101.493788) (xy 192.671098 101.50887) + (xy 192.67114 101.508956) (xy 192.674723 101.516438) (xy 192.674781 101.51674) (xy 192.691097 101.550625) + (xy 192.691136 101.550706) (xy 192.691281 101.5516) (xy 192.703301 101.604269) (xy 192.703301 102.953122) + (xy 192.691107 103.006745) (xy 192.690519 103.007971) (xy 192.690439 103.008138) (xy 192.671566 103.047337) + (xy 192.671242 103.048139) (xy 192.663819 103.063608) (xy 192.640518 103.148907) (xy 192.603863 103.20839) + (xy 192.540868 103.238613) (xy 192.473449 103.230793) (xy 192.470965 103.229764) (xy 192.412297 103.205463) + (xy 192.412292 103.205462) (xy 192.412289 103.205461) (xy 192.257645 103.1747) (xy 192.257642 103.1747) + (xy 192.099958 103.1747) (xy 192.099955 103.1747) (xy 191.94531 103.205461) (xy 191.945298 103.205464) + (xy 191.799627 103.265802) (xy 191.799614 103.265809) (xy 191.668511 103.35341) (xy 191.668507 103.353413) + (xy 191.557013 103.464907) (xy 191.557011 103.46491) (xy 191.469409 103.596014) (xy 191.469402 103.596027) + (xy 191.409064 103.741698) (xy 191.409061 103.74171) (xy 191.3783 103.896353) (xy 187.6855 103.896353) + (xy 187.6855 97.54655) (xy 188.662 97.54655) (xy 188.662 97.715849) (xy 188.688481 97.883047) (xy 188.740796 98.044053) + (xy 188.817652 98.194888) (xy 188.917148 98.331834) (xy 188.917152 98.331839) (xy 189.03686 98.451547) + (xy 189.036865 98.451551) (xy 189.113873 98.5075) (xy 189.173815 98.55105) (xy 189.267141 98.598602) + (xy 189.324646 98.627903) (xy 189.324648 98.627903) (xy 189.324651 98.627905) (xy 189.40885 98.655263) + (xy 189.485652 98.680218) (xy 189.652851 98.7067) (xy 189.652856 98.7067) (xy 189.822149 98.7067) + (xy 189.989347 98.680218) (xy 190.150349 98.627905) (xy 190.301185 98.55105) (xy 190.438141 98.451546) + (xy 190.557846 98.331841) (xy 190.65735 98.194885) (xy 190.734205 98.044049) (xy 190.786518 97.883047) + (xy 190.796383 97.820763) (xy 190.813 97.715849) (xy 190.813 97.54655) (xy 190.787428 97.385098) + (xy 190.796382 97.315805) (xy 190.841379 97.262353) (xy 190.90813 97.241713) (xy 190.909901 97.2417) + (xy 191.148444 97.2417) (xy 191.148451 97.2417) (xy 191.427942 97.204904) (xy 191.700239 97.131942) + (xy 191.960683 97.024063) (xy 192.204817 96.883112) (xy 192.428465 96.7115) (xy 192.6278 96.512165) + (xy 192.695492 96.423946) (xy 192.75192 96.382744) (xy 192.821666 96.378589) (xy 192.882586 96.412801) + (xy 192.915339 96.474518) (xy 192.909526 96.544146) (xy 192.901255 96.561433) (xy 192.845183 96.658551) + (xy 192.845175 96.658568) (xy 192.735097 96.924321) (xy 192.660646 97.202176) (xy 192.623101 97.487361) + (xy 192.6231 97.487377) (xy 192.6231 97.775022) (xy 192.623101 97.775038) (xy 192.660646 98.060223) + (xy 192.735097 98.338078) (xy 192.845175 98.603831) (xy 192.845183 98.603848) (xy 192.989004 98.852951) + (xy 192.989015 98.852967) (xy 193.164121 99.081171) (xy 193.164127 99.081178) (xy 193.367521 99.284572) + (xy 193.367528 99.284578) (xy 193.500807 99.386846) (xy 193.595741 99.459691) (xy 193.595748 99.459695) + (xy 193.844851 99.603516) (xy 193.844856 99.603518) (xy 193.844859 99.60352) (xy 193.844863 99.603521) + (xy 193.844868 99.603524) (xy 193.887477 99.621173) (xy 194.11062 99.713602) (xy 194.388475 99.788053) + (xy 194.673671 99.8256) (xy 194.673678 99.8256) (xy 194.961322 99.8256) (xy 194.961329 99.8256) + (xy 195.246525 99.788053) (xy 195.52438 99.713602) (xy 195.790141 99.60352) (xy 196.039259 99.459691) + (xy 196.267473 99.284577) (xy 196.470877 99.081173) (xy 196.645991 98.852959) (xy 196.78982 98.603841) + (xy 196.899902 98.33808) (xy 196.974353 98.060225) (xy 197.0119 97.775029) (xy 197.0119 97.487371) + (xy 196.974353 97.202175) (xy 196.899902 96.92432) (xy 196.78982 96.658559) (xy 196.789818 96.658556) + (xy 196.789816 96.658551) (xy 196.645995 96.409448) (xy 196.645991 96.409441) (xy 196.542069 96.274007) + (xy 196.470878 96.181228) (xy 196.470872 96.181221) (xy 196.267478 95.977827) (xy 196.267471 95.977821) + (xy 196.039267 95.802715) (xy 196.039265 95.802713) (xy 196.039259 95.802709) (xy 196.039254 95.802706) + (xy 196.039251 95.802704) (xy 195.790148 95.658883) (xy 195.790131 95.658875) (xy 195.524378 95.548797) + (xy 195.246523 95.474346) (xy 194.961338 95.436801) (xy 194.961335 95.4368) (xy 194.961329 95.4368) + (xy 194.673671 95.4368) (xy 194.673665 95.4368) (xy 194.673661 95.436801) (xy 194.388476 95.474346) + (xy 194.110621 95.548797) (xy 193.844868 95.658875) (xy 193.844851 95.658883) (xy 193.595748 95.802704) + (xy 193.595732 95.802715) (xy 193.367528 95.977821) (xy 193.367521 95.977827) (xy 193.164127 96.181221) + (xy 193.09293 96.274007) (xy 193.036501 96.315209) (xy 192.966755 96.319364) (xy 192.905835 96.285151) + (xy 192.873083 96.223434) (xy 192.878896 96.153807) (xy 192.887161 96.136531) (xy 192.940363 96.044383) + (xy 193.048242 95.783939) (xy 193.121204 95.511642) (xy 193.158 95.232151) (xy 193.158 94.950249) + (xy 193.121204 94.670758) (xy 193.048242 94.398461) (xy 193.041342 94.381804) (xy 193.016349 94.321464) + (xy 192.940363 94.138017) (xy 192.940361 94.138014) (xy 192.940359 94.138009) (xy 192.799416 93.89389) + (xy 192.799412 93.893883) (xy 192.6278 93.670235) (xy 192.627798 93.670233) (xy 192.627795 93.670229) + (xy 192.42847 93.470904) (xy 192.403921 93.452067) (xy 192.204817 93.299288) (xy 192.204811 93.299284) + (xy 192.204809 93.299283) (xy 191.96069 93.15834) (xy 191.960679 93.158335) (xy 191.700243 93.050459) + (xy 191.427939 92.977495) (xy 191.148458 92.9407) (xy 191.148451 92.9407) (xy 190.866549 92.9407) + (xy 190.866541 92.9407) (xy 190.58706 92.977495) (xy 190.314756 93.050459) (xy 190.05432 93.158335) + (xy 190.054309 93.15834) (xy 189.81019 93.299283) (xy 189.810184 93.299287) (xy 189.810183 93.299288) + (xy 189.748401 93.346695) (xy 189.586529 93.470904) (xy 189.387204 93.670229) (xy 189.263314 93.831685) + (xy 189.229927 93.875197) (xy 189.215589 93.893882) (xy 189.215583 93.89389) (xy 189.07464 94.138009) + (xy 189.074635 94.13802) (xy 188.966759 94.398456) (xy 188.893795 94.67076) (xy 188.857 94.950241) + (xy 188.857 95.232158) (xy 188.893795 95.511639) (xy 188.966759 95.783943) (xy 189.074635 96.044379) + (xy 189.07464 96.04439) (xy 189.215583 96.288509) (xy 189.215594 96.288525) (xy 189.346338 96.458914) + (xy 189.371532 96.524083) (xy 189.357494 96.592528) (xy 189.30868 96.642517) (xy 189.304258 96.644884) + (xy 189.173813 96.71135) (xy 189.036865 96.810848) (xy 189.03686 96.810852) (xy 188.917152 96.93056) + (xy 188.917148 96.930565) (xy 188.817652 97.067511) (xy 188.740796 97.218346) (xy 188.688481 97.379352) + (xy 188.662 97.54655) (xy 187.6855 97.54655) (xy 187.6855 95.946275) (xy 187.705185 95.879236) (xy 187.757989 95.833481) + (xy 187.761999 95.831734) (xy 187.837179 95.800594) (xy 187.968289 95.712989) (xy 188.079789 95.601489) + (xy 188.167394 95.470379) (xy 188.227737 95.324697) (xy 188.2585 95.170042) (xy 188.2585 95.012358) + (xy 188.2585 95.012355) (xy 188.258499 95.012353) (xy 188.227738 94.85771) (xy 188.227737 94.857703) + (xy 188.227735 94.857698) (xy 188.167397 94.712027) (xy 188.16739 94.712014) (xy 188.079789 94.580911) + (xy 188.079786 94.580907) (xy 187.968292 94.469413) (xy 187.968288 94.46941) (xy 187.837185 94.381809) + (xy 187.837172 94.381802) (xy 187.691501 94.321464) (xy 187.691489 94.321461) (xy 187.536845 94.2907) + (xy 187.536842 94.2907) (xy 187.379158 94.2907) (xy 187.379155 94.2907) (xy 187.22451 94.321461) + (xy 187.224498 94.321464) (xy 187.078827 94.381802) (xy 187.078814 94.381809) (xy 186.947711 94.46941) + (xy 186.947707 94.469413) (xy 186.836213 94.580907) (xy 186.83621 94.580911) (xy 186.748609 94.712014) + (xy 186.748602 94.712027) (xy 186.688264 94.857698) (xy 186.688261 94.85771) (xy 186.6575 95.012353) + (xy 186.6575 95.170046) (xy 186.688261 95.324689) (xy 186.688264 95.324701) (xy 186.748602 95.470372) + (xy 186.748609 95.470385) (xy 186.83621 95.601488) (xy 186.836213 95.601492) (xy 186.947707 95.712986) + (xy 186.947711 95.712989) (xy 187.078814 95.80059) (xy 187.078818 95.800592) (xy 187.078821 95.800594) + (xy 187.153954 95.831715) (xy 187.208356 95.875554) (xy 187.230421 95.941848) (xy 187.2305 95.946275) + (xy 187.2305 104.518747) (xy 187.2305 104.609253) (xy 187.240855 104.634253) (xy 187.265136 104.69287) + (xy 196.269503 113.697236) (xy 196.302988 113.758559) (xy 196.298004 113.828251) (xy 196.296384 113.832368) + (xy 196.265263 113.907503) (xy 196.265261 113.90751) (xy 196.2345 114.062153) (xy 196.2345 114.219846) + (xy 196.265261 114.374489) (xy 196.265264 114.374501) (xy 196.325602 114.520172) (xy 196.325609 114.520185) + (xy 196.41321 114.651288) (xy 196.413213 114.651292) (xy 196.524707 114.762786) (xy 196.524711 114.762789) + (xy 196.655814 114.85039) (xy 196.655818 114.850392) (xy 196.655821 114.850394) (xy 196.730954 114.881515) + (xy 196.785356 114.925354) (xy 196.807421 114.991648) (xy 196.8075 114.996075) (xy 196.8075 128.383761) + (xy 196.807496 128.383771) (xy 196.8075 128.423995) (xy 196.8075 128.474265) (xy 196.823599 128.513121) + (xy 196.823597 128.513121) (xy 196.823602 128.513129) (xy 196.82657 128.520292) (xy 196.842136 128.557871) + (xy 196.842144 128.557883) (xy 196.842147 128.557886) (xy 196.842148 128.557888) (xy 196.875503 128.591236) + (xy 196.906132 128.621865) (xy 196.906142 128.621869) (xy 201.032422 132.747283) (xy 201.032457 132.747317) + (xy 201.065948 132.808636) (xy 201.060971 132.878328) (xy 201.059347 132.882458) (xy 201.028263 132.957503) + (xy 201.028262 132.957506) (xy 201.028262 132.957507) (xy 201.028261 132.95751) (xy 200.9975 133.112153) + (xy 200.9975 133.269846) (xy 201.028261 133.424489) (xy 201.028264 133.424501) (xy 201.088602 133.570172) + (xy 201.088609 133.570185) (xy 201.17621 133.701288) (xy 201.176213 133.701292) (xy 201.287707 133.812786) + (xy 201.287711 133.812789) (xy 201.418814 133.90039) (xy 201.418818 133.900392) (xy 201.418821 133.900394) + (xy 201.493954 133.931515) (xy 201.548356 133.975354) (xy 201.570421 134.041648) (xy 201.5705 134.046075) + (xy 201.5705 134.655454) (xy 201.550815 134.722493) (xy 201.498011 134.768248) (xy 201.428853 134.778192) + (xy 201.365297 134.749167) (xy 201.358827 134.743143) (xy 196.939486 130.324621) (xy 196.912598 130.284385) + (xy 196.907394 130.271821) (xy 196.88965 130.245265) (xy 196.819789 130.14071) (xy 196.708292 130.029213) + (xy 196.708284 130.029207) (xy 196.577181 129.941607) (xy 196.577182 129.941607) (xy 196.571375 129.939201) + (xy 196.564478 129.936345) (xy 196.524263 129.909475) (xy 196.232207 129.617474) (xy 196.199868 129.585135) + (xy 196.199857 129.58513) (xy 196.19985 129.585123) (xy 196.199815 129.585088) (xy 196.199036 129.584558) + (xy 196.191567 129.579382) (xy 196.191472 129.579526) (xy 196.189691 129.578336) (xy 196.190364 129.577328) + (xy 196.165349 129.560615) (xy 193.080819 126.476085) (xy 193.047334 126.414762) (xy 193.0445 126.388404) + (xy 193.0445 111.545748) (xy 193.0445 111.545747) (xy 193.009865 111.462132) (xy 192.945868 111.398135) + (xy 183.883819 102.336086) (xy 183.850334 102.274763) (xy 183.8475 102.248405) (xy 183.8475 92.325962) + (xy 183.867185 92.258923) (xy 183.883805 92.238295) (xy 183.948588 92.173492) (xy 184.594437 91.527435) + (xy 185.235934 90.885733) (xy 185.297252 90.852238) (xy 185.323629 90.8494) (xy 195.718672 90.8494) + (xy 195.785711 90.869085) (xy 195.831466 90.921889) (xy 195.84141 90.991047) (xy 195.812385 91.054603) + (xy 195.806353 91.061081) (xy 195.737204 91.130229) (xy 195.667704 91.220803) (xy 195.576612 91.339517) + (xy 195.565589 91.353882) (xy 195.565583 91.35389) (xy 195.42464 91.598009) (xy 195.424635 91.59802) + (xy 195.316759 91.858456) (xy 195.243795 92.13076) (xy 195.207 92.410241) (xy 195.207 92.692158) + (xy 195.243795 92.971639) (xy 195.316759 93.243943) (xy 195.424635 93.504379) (xy 195.42464 93.50439) + (xy 195.565583 93.748509) (xy 195.565588 93.748517) (xy 195.7372 93.972165) (xy 195.737204 93.97217) + (xy 195.936529 94.171495) (xy 195.936533 94.171498) (xy 195.936535 94.1715) (xy 196.160183 94.343112) + (xy 196.16019 94.343116) (xy 196.404309 94.484059) (xy 196.404314 94.484061) (xy 196.404317 94.484063) + (xy 196.664761 94.591942) (xy 196.937058 94.664904) (xy 197.216549 94.7017) (xy 197.216556 94.7017) + (xy 197.498444 94.7017) (xy 197.498451 94.7017) (xy 197.777942 94.664904) (xy 198.050239 94.591942) + (xy 198.310683 94.484063) (xy 198.554817 94.343112) (xy 198.778465 94.1715) (xy 198.9778 93.972165) + (xy 199.149412 93.748517) (xy 199.290363 93.504383) (xy 199.398242 93.243939) (xy 199.471204 92.971642) + (xy 199.508 92.692151) (xy 199.508 92.410249) (xy 199.471204 92.130758) (xy 199.398242 91.858461) + (xy 199.391342 91.841804) (xy 199.366349 91.781464) (xy 199.290363 91.598017) (xy 199.290361 91.598014) + (xy 199.290359 91.598009) (xy 199.149416 91.35389) (xy 199.149412 91.353883) (xy 198.9778 91.130235) + (xy 198.977798 91.130233) (xy 198.977795 91.130229) (xy 198.77847 90.930904) (xy 198.752881 90.911269) + (xy 198.631634 90.818232) (xy 198.590432 90.761804) (xy 198.586277 90.692058) (xy 198.619434 90.632181) + (xy 205.047921 84.202923) (xy 205.109242 84.169435) (xy 205.135607 84.1666) (xy 210.898757 84.1666) + (xy 210.898764 84.166603) (xy 210.937552 84.1666) (xy 210.989253 84.1666) (xy 210.989274 84.1666) + (xy 210.989335 84.166587) (xy 210.990536 84.166071) (xy 211.030009 84.149717) (xy 211.068889 84.133612) + (xy 211.072414 84.132297) (xy 211.072861 84.131967) (xy 211.072868 84.131965) (xy 211.072873 84.131959) + (xy 211.072882 84.131956) (xy 211.072894 84.131943) (xy 211.073927 84.131184) (xy 211.076817 84.12802) + (xy 211.106378 84.098453) (xy 211.106387 84.098448) (xy 211.106386 84.098447) (xy 211.146226 84.058607) + (xy 211.146253 84.058573) (xy 213.77335 81.431083) (xy 213.793332 81.414875) (xy 213.80483 81.407381) + (xy 213.81574 81.403312) (xy 213.877059 81.369823) (xy 213.975098 81.296419) (xy 213.978474 81.29422) + (xy 214.00822 81.285279) (xy 214.03732 81.274424) (xy 214.041394 81.275309) (xy 214.045387 81.27411) + (xy 214.075242 81.28267) (xy 214.105594 81.28927) (xy 214.110752 81.292851) (xy 214.11255 81.293367) + (xy 214.114195 81.295242) (xy 214.127379 81.304395) (xy 214.200856 81.368064) (xy 214.200857 81.368065) + (xy 214.20086 81.368067) (xy 214.200862 81.368068) (xy 214.200864 81.368069) (xy 214.330357 81.427208) + (xy 214.331737 81.427838) (xy 214.398776 81.447523) (xy 214.39878 81.447524) (xy 214.541196 81.468) + (xy 218.746721 81.468) (xy 218.81376 81.487685) (xy 218.859515 81.540489) (xy 218.869459 81.609647) + (xy 218.840434 81.673203) (xy 218.834403 81.679681) (xy 217.609285 82.904618) (xy 215.441094 85.072488) + (xy 215.379768 85.105968) (xy 215.353419 85.1088) (xy 207.009246 85.1088) (xy 207.009239 85.108797) + (xy 206.963986 85.1088) (xy 206.918745 85.1088) (xy 206.91873 85.108804) (xy 206.877436 85.125909) + (xy 206.877437 85.12591) (xy 206.835124 85.143438) (xy 206.811596 85.16697) (xy 206.803622 85.174945) + (xy 206.771135 85.207432) (xy 206.771132 85.207438) (xy 206.764062 85.214509) (xy 206.764059 85.21451) + (xy 200.988213 90.991047) (xy 200.940247 91.039019) (xy 200.924664 91.054603) (xy 200.915129 91.064138) + (xy 200.899783 91.101194) (xy 200.89978 91.101201) (xy 200.880498 91.147748) (xy 200.880497 91.147754) + (xy 200.8805 91.183962) (xy 200.8805 91.638723) (xy 200.860815 91.705762) (xy 200.808011 91.751517) + (xy 200.780692 91.76034) (xy 200.674508 91.781461) (xy 200.674498 91.781464) (xy 200.528827 91.841802) + (xy 200.528814 91.841809) (xy 200.397711 91.92941) (xy 200.397707 91.929413) (xy 200.286213 92.040907) + (xy 200.28621 92.040911) (xy 200.198609 92.172014) (xy 200.198602 92.172027) (xy 200.138264 92.317698) + (xy 200.138261 92.31771) (xy 200.1075 92.472353) (xy 200.1075 92.630046) (xy 200.138261 92.784689) + (xy 200.138264 92.784701) (xy 200.198602 92.930372) (xy 200.198609 92.930385) (xy 200.28621 93.061488) + (xy 200.286213 93.061492) (xy 200.397707 93.172986) (xy 200.397711 93.172989) (xy 200.528814 93.26059) + (xy 200.528827 93.260597) (xy 200.624499 93.300225) (xy 200.674503 93.320937) (xy 200.829153 93.351699) + (xy 200.829156 93.3517) (xy 200.829158 93.3517) (xy 200.986844 93.3517) (xy 200.986845 93.351699) + (xy 201.012004 93.346695) (xy 201.060309 93.337087) (xy 201.1299 93.343314) (xy 201.185077 93.386177) + (xy 201.208322 93.452067) (xy 201.2085 93.458704) (xy 201.2085 97.457872) (xy 201.188815 97.524911) + (xy 201.136011 97.570666) (xy 201.066853 97.58061) (xy 201.003297 97.551585) (xy 200.965523 97.492807) + (xy 200.962027 97.47727) (xy 200.946518 97.379352) (xy 200.901796 97.241713) (xy 200.894205 97.218351) + (xy 200.894203 97.218348) (xy 200.894203 97.218346) (xy 200.850176 97.13194) (xy 200.81735 97.067515) + (xy 200.785781 97.024064) (xy 200.717851 96.930565) (xy 200.717847 96.93056) (xy 200.598139 96.810852) + (xy 200.598134 96.810848) (xy 200.461188 96.711352) (xy 200.461187 96.711351) (xy 200.461185 96.71135) + (xy 200.414082 96.68735) (xy 200.310353 96.634496) (xy 200.149347 96.582181) (xy 199.982149 96.5557) + (xy 199.982144 96.5557) (xy 199.812856 96.5557) (xy 199.812851 96.5557) (xy 199.645652 96.582181) + (xy 199.484646 96.634496) (xy 199.333811 96.711352) (xy 199.196865 96.810848) (xy 199.19686 96.810852) + (xy 199.077152 96.93056) (xy 199.077148 96.930565) (xy 198.977652 97.067511) (xy 198.900796 97.218346) + (xy 198.848481 97.379352) (xy 198.822 97.54655) (xy 198.822 97.715849) (xy 198.848481 97.883047) + (xy 198.900796 98.044053) (xy 198.977652 98.194888) (xy 199.077148 98.331834) (xy 199.077152 98.331839) + (xy 199.19686 98.451547) (xy 199.196865 98.451551) (xy 199.273873 98.5075) (xy 199.333815 98.55105) + (xy 199.427141 98.598602) (xy 199.484646 98.627903) (xy 199.484648 98.627903) (xy 199.484651 98.627905) + (xy 199.56885 98.655263) (xy 199.645652 98.680218) (xy 199.812851 98.7067) (xy 199.812856 98.7067) + (xy 199.982149 98.7067) (xy 200.149347 98.680218) (xy 200.310349 98.627905) (xy 200.461185 98.55105) + (xy 200.598141 98.451546) (xy 200.717846 98.331841) (xy 200.81735 98.194885) (xy 200.894205 98.044049) + (xy 200.946518 97.883047) (xy 200.956383 97.820763) (xy 200.962027 97.785129) (xy 200.991956 97.721994) + (xy 201.051268 97.685063) (xy 201.12113 97.686061) (xy 201.179363 97.724671) (xy 201.207477 97.788635) + (xy 201.2085 97.804527) (xy 201.2085 102.506747) (xy 201.2085 102.597253) (xy 201.239535 102.672178) + (xy 201.243136 102.68087) (xy 208.032685 109.470418) (xy 208.06617 109.531741) (xy 208.061186 109.601433) + (xy 208.019314 109.657366) (xy 207.95385 109.681783) (xy 207.89202 109.669677) (xy 207.891933 109.66989) + (xy 207.890882 109.669454) (xy 207.890168 109.669315) (xy 207.888188 109.668338) (xy 207.627743 109.560459) + (xy 207.355439 109.487495) (xy 207.075958 109.4507) (xy 207.075951 109.4507) (xy 206.794049 109.4507) + (xy 206.794041 109.4507) (xy 206.51456 109.487495) (xy 206.242256 109.560459) (xy 205.98182 109.668335) + (xy 205.981809 109.66834) (xy 205.73769 109.809283) (xy 205.737684 109.809287) (xy 205.737683 109.809288) + (xy 205.690169 109.845747) (xy 205.514029 109.980904) (xy 205.314704 110.180229) (xy 205.201381 110.327914) + (xy 205.154327 110.389237) (xy 205.143089 110.403882) (xy 205.143083 110.40389) (xy 205.00214 110.648009) + (xy 205.002135 110.64802) (xy 204.894259 110.908456) (xy 204.821295 111.18076) (xy 204.7845 111.460241) + (xy 204.7845 111.742158) (xy 204.821295 112.021639) (xy 204.894259 112.293943) (xy 205.002135 112.554379) + (xy 205.00214 112.55439) (xy 205.143083 112.798509) (xy 205.143088 112.798517) (xy 205.261074 112.952278) + (xy 205.314704 113.02217) (xy 205.514029 113.221495) (xy 205.514033 113.221498) (xy 205.514035 113.2215) + (xy 205.737683 113.393112) (xy 205.73769 113.393116) (xy 205.981809 113.534059) (xy 205.981814 113.534061) + (xy 205.981817 113.534063) (xy 206.089834 113.578805) (xy 206.207486 113.627538) (xy 206.242261 113.641942) + (xy 206.514558 113.714904) (xy 206.794049 113.7517) (xy 206.794056 113.7517) (xy 207.075944 113.7517) + (xy 207.075951 113.7517) (xy 207.355442 113.714904) (xy 207.627739 113.641942) (xy 207.888183 113.534063) + (xy 208.132317 113.393112) (xy 208.355965 113.2215) (xy 208.5553 113.022165) (xy 208.726912 112.798517) + (xy 208.867863 112.554383) (xy 208.975742 112.293939) (xy 209.048704 112.021642) (xy 209.0855 111.742151) + (xy 209.0855 111.460249) (xy 209.048704 111.180758) (xy 208.975742 110.908461) (xy 208.96876 110.891606) + (xy 208.936135 110.812841) (xy 208.867863 110.648017) (xy 208.867862 110.648015) (xy 208.866888 110.646039) + (xy 208.866774 110.645388) (xy 208.86631 110.644267) (xy 208.866561 110.644163) (xy 208.854891 110.577207) + (xy 208.882013 110.512816) (xy 208.939641 110.47331) (xy 209.00948 110.471231) (xy 209.065781 110.503514) + (xy 209.719503 111.157236) (xy 209.752988 111.218559) (xy 209.748004 111.288251) (xy 209.746384 111.292368) + (xy 209.715263 111.367503) (xy 209.715261 111.36751) (xy 209.6845 111.522153) (xy 209.6845 111.679846) + (xy 209.715261 111.834489) (xy 209.715264 111.834501) (xy 209.775602 111.980172) (xy 209.775609 111.980185) + (xy 209.86321 112.111288) (xy 209.863213 112.111292) (xy 209.974707 112.222786) (xy 209.974711 112.222789) + (xy 210.105814 112.31039) (xy 210.105827 112.310397) (xy 210.251498 112.370735) (xy 210.251503 112.370737) + (xy 210.406153 112.401499) (xy 210.406156 112.4015) (xy 210.406158 112.4015) (xy 210.563844 112.4015) + (xy 210.563845 112.401499) (xy 210.718497 112.370737) (xy 210.864179 112.310394) (xy 210.995289 112.222789) + (xy 211.043921 112.174157) (xy 211.099819 112.11826) (xy 211.161142 112.084775) (xy 211.230834 112.089759) + (xy 211.286767 112.131631) (xy 211.311184 112.197095) (xy 211.3115 112.205941) (xy 211.3115 126.897763) + (xy 211.311494 126.897778) (xy 211.3115 126.939549) (xy 211.3115 126.988266) (xy 211.327629 127.027192) + (xy 211.327631 127.027206) (xy 211.327634 127.027206) (xy 211.346132 127.071864) (xy 211.346154 127.071897) + (xy 211.378438 127.104171) (xy 211.378452 127.104185) (xy 211.419827 127.145561) (xy 211.419888 127.145609) + (xy 211.954018 127.679595) (xy 212.794941 128.520292) (xy 212.828435 128.581611) (xy 212.82346 128.651303) + (xy 212.781596 128.707242) (xy 212.716135 128.731668) (xy 212.654547 128.719612) (xy 212.654433 128.71989) + (xy 212.65306 128.719321) (xy 212.65243 128.719198) (xy 212.650685 128.718337) (xy 212.390243 128.610459) + (xy 212.117939 128.537495) (xy 211.838458 128.5007) (xy 211.838451 128.5007) (xy 211.556549 128.5007) + (xy 211.556541 128.5007) (xy 211.27706 128.537495) (xy 211.004756 128.610459) (xy 210.74432 128.718335) + (xy 210.744309 128.71834) (xy 210.50019 128.859283) (xy 210.500184 128.859287) (xy 210.500183 128.859288) + (xy 210.445198 128.90148) (xy 210.276529 129.030904) (xy 210.077204 129.230229) (xy 209.963881 129.377914) + (xy 209.905597 129.453872) (xy 209.905589 129.453882) (xy 209.905583 129.45389) (xy 209.76464 129.698009) + (xy 209.764635 129.69802) (xy 209.656759 129.958456) (xy 209.583795 130.23076) (xy 209.547 130.510241) + (xy 209.547 130.792158) (xy 209.583795 131.071639) (xy 209.656759 131.343943) (xy 209.764635 131.604379) + (xy 209.76464 131.60439) (xy 209.897142 131.833888) (xy 209.905588 131.848517) (xy 210.068047 132.060237) + (xy 210.077204 132.07217) (xy 210.276529 132.271495) (xy 210.276533 132.271498) (xy 210.276535 132.2715) + (xy 210.500183 132.443112) (xy 210.50019 132.443116) (xy 210.744309 132.584059) (xy 210.744314 132.584061) + (xy 210.744317 132.584063) (xy 211.004761 132.691942) (xy 211.277058 132.764904) (xy 211.556549 132.8017) + (xy 211.556556 132.8017) (xy 211.838444 132.8017) (xy 211.838451 132.8017) (xy 212.117942 132.764904) + (xy 212.390239 132.691942) (xy 212.650683 132.584063) (xy 212.894817 132.443112) (xy 213.118465 132.2715) + (xy 213.3178 132.072165) (xy 213.489412 131.848517) (xy 213.630363 131.604383) (xy 213.738242 131.343939) + (xy 213.811204 131.071642) (xy 213.848 130.792151) (xy 213.848 130.510249) (xy 213.811204 130.230758) + (xy 213.738242 129.958461) (xy 213.731261 129.941607) (xy 213.630364 129.698019) (xy 213.629236 129.695732) + (xy 213.629104 129.694978) (xy 213.62881 129.694267) (xy 213.628969 129.694201) (xy 213.617233 129.626901) + (xy 213.644349 129.562508) (xy 213.701974 129.522996) (xy 213.771812 129.520911) (xy 213.828112 129.553185) + (xy 214.482444 130.20734) (xy 214.515938 130.268659) (xy 214.510963 130.338351) (xy 214.509336 130.342485) + (xy 214.478264 130.417498) (xy 214.478261 130.41751) (xy 214.4475 130.572153) (xy 214.4475 130.729846) + (xy 214.478261 130.884489) (xy 214.478264 130.884501) (xy 214.538602 131.030172) (xy 214.538609 131.030185) + (xy 214.62621 131.161288) (xy 214.626213 131.161292) (xy 214.737707 131.272786) (xy 214.737711 131.272789) + (xy 214.868814 131.36039) (xy 214.868827 131.360397) (xy 215.010679 131.419153) (xy 215.014503 131.420737) + (xy 215.169153 131.451499) (xy 215.169156 131.4515) (xy 215.169158 131.4515) (xy 215.326844 131.4515) + (xy 215.326845 131.451499) (xy 215.481497 131.420737) (xy 215.627179 131.360394) (xy 215.758289 131.272789) + (xy 215.869789 131.161289) (xy 215.957394 131.030179) (xy 216.017737 130.884497) (xy 216.0485 130.729842) + (xy 216.0485 130.572158) (xy 216.0485 130.572155) (xy 216.048499 130.572153) (xy 216.038044 130.519595) + (xy 216.017737 130.417503) (xy 216.01671 130.415024) (xy 215.957397 130.271827) (xy 215.95739 130.271814) + (xy 215.869789 130.140711) (xy 215.869786 130.140707) (xy 215.758292 130.029213) (xy 215.758288 130.02921) + (xy 215.627185 129.941609) (xy 215.627172 129.941602) (xy 215.481501 129.881264) (xy 215.481489 129.881261) + (xy 215.326845 129.8505) (xy 215.326842 129.8505) (xy 215.169158 129.8505) (xy 215.169155 129.8505) + (xy 215.01451 129.881261) (xy 215.014507 129.881262) (xy 215.014506 129.881262) (xy 215.014503 129.881263) + (xy 214.939372 129.912383) (xy 214.939254 129.912432) (xy 214.869784 129.9199) (xy 214.807305 129.888624) + (xy 214.804133 129.885563) (xy 211.802831 126.885069) (xy 211.769337 126.82375) (xy 211.7665 126.797376) + (xy 211.7665 125.864595) (xy 211.786185 125.797556) (xy 211.838989 125.751801) (xy 211.908147 125.741857) + (xy 211.971703 125.770882) (xy 211.978181 125.776914) (xy 217.228181 131.026914) (xy 217.261666 131.088237) + (xy 217.2645 131.114595) (xy 217.2645 142.375747) (xy 217.2645 142.466253) (xy 217.288818 142.524962) + (xy 217.299136 142.54987) (xy 222.319198 147.569932) (xy 222.352683 147.631255) (xy 222.347699 147.700947) + (xy 222.305827 147.75688) (xy 222.240363 147.781297) (xy 222.179634 147.769403) (xy 222.179433 147.76989) + (xy 222.177026 147.768893) (xy 222.176668 147.768823) (xy 222.175688 147.76834) (xy 222.175683 147.768337) + (xy 222.149308 147.757412) (xy 221.915243 147.660459) (xy 221.642939 147.587495) (xy 221.363458 147.5507) + (xy 221.363451 147.5507) (xy 221.081549 147.5507) (xy 221.081541 147.5507) (xy 220.80206 147.587495) + (xy 220.529756 147.660459) (xy 220.26932 147.768335) (xy 220.269309 147.76834) (xy 220.02519 147.909283) + (xy 220.025182 147.909289) (xy 219.801529 148.080904) (xy 219.602204 148.280229) (xy 219.430589 148.503882) + (xy 219.430583 148.50389) (xy 219.28964 148.748009) (xy 219.289635 148.74802) (xy 219.181759 149.008456) + (xy 219.108795 149.28076) (xy 219.072 149.560241) (xy 219.072 149.842158) (xy 219.108795 150.121639) + (xy 219.181759 150.393943) (xy 219.289635 150.654379) (xy 219.28964 150.65439) (xy 219.430583 150.898509) + (xy 219.430588 150.898517) (xy 219.592887 151.110028) (xy 219.602204 151.12217) (xy 219.801529 151.321495) + (xy 219.801533 151.321498) (xy 219.801535 151.3215) (xy 220.025183 151.493112) (xy 220.02519 151.493116) + (xy 220.269309 151.634059) (xy 220.269314 151.634061) (xy 220.269317 151.634063) (xy 220.529761 151.741942) + (xy 220.802058 151.814904) (xy 221.081549 151.8517) (xy 221.081556 151.8517) (xy 221.363444 151.8517) + (xy 221.363451 151.8517) (xy 221.642942 151.814904) (xy 221.915239 151.741942) (xy 222.175683 151.634063) + (xy 222.419817 151.493112) (xy 222.643465 151.3215) (xy 222.8428 151.122165) (xy 223.014412 150.898517) + (xy 223.146509 150.669717) (xy 223.155359 150.65439) (xy 223.155359 150.654389) (xy 223.155363 150.654383) + (xy 223.263242 150.393939) (xy 223.336204 150.121642) (xy 223.373 149.842151) (xy 223.373 149.560249) + (xy 223.372457 149.556128) (xy 223.36079 149.467503) (xy 223.336204 149.280758) (xy 223.263242 149.008461) + (xy 223.155363 148.748017) (xy 223.155356 148.748005) (xy 223.154876 148.74703) (xy 223.154818 148.746702) + (xy 223.15381 148.744267) (xy 223.154354 148.744041) (xy 223.142877 148.678198) (xy 223.169996 148.613806) + (xy 223.227622 148.574297) (xy 223.297461 148.572216) (xy 223.353767 148.6045) (xy 224.006503 149.257236) + (xy 224.039988 149.318559) (xy 224.035004 149.388251) (xy 224.033384 149.392368) (xy 224.002263 149.467503) + (xy 224.002261 149.46751) (xy 223.9715 149.622153) (xy 223.9715 149.779846) (xy 224.002261 149.934489) + (xy 224.002264 149.934501) (xy 224.062602 150.080172) (xy 224.062609 150.080185) (xy 224.15021 150.211288) + (xy 224.150213 150.211292) (xy 224.261707 150.322786) (xy 224.261711 150.322789) (xy 224.392814 150.41039) + (xy 224.392827 150.410397) (xy 224.538498 150.470735) (xy 224.538503 150.470737) (xy 224.693153 150.501499) + (xy 224.693156 150.5015) (xy 224.693158 150.5015) (xy 224.850844 150.5015) (xy 224.850845 150.501499) + (xy 225.005497 150.470737) (xy 225.151179 150.410394) (xy 225.282289 150.322789) (xy 225.393789 150.211289) + (xy 225.481394 150.080179) (xy 225.541737 149.934497) (xy 225.5725 149.779842) (xy 225.5725 149.622158) + (xy 225.5725 149.622155) (xy 225.572499 149.622153) (xy 225.56056 149.562132) (xy 225.541737 149.467503) + (xy 225.5275 149.433131) (xy 225.481397 149.321827) (xy 225.48139 149.321814) (xy 225.393789 149.190711) + (xy 225.393786 149.190707) (xy 225.282292 149.079213) (xy 225.282288 149.07921) (xy 225.151185 148.991609) + (xy 225.151172 148.991602) (xy 225.005501 148.931264) (xy 225.005489 148.931261) (xy 224.850845 148.9005) + (xy 224.850842 148.9005) (xy 224.693158 148.9005) (xy 224.693155 148.9005) (xy 224.53851 148.931261) + (xy 224.538503 148.931263) (xy 224.463368 148.962384) (xy 224.393899 148.969851) (xy 224.33142 148.938576) + (xy 224.328236 148.935503) (xy 217.755819 142.363085) (xy 217.722334 142.301762) (xy 217.7195 142.275404) + (xy 217.7195 130.923748) (xy 217.7195 130.923747) (xy 217.684865 130.840132) (xy 217.620868 130.776135) + (xy 212.397819 125.553086) (xy 212.364334 125.491763) (xy 212.3615 125.465405) (xy 212.3615 111.451868) + (xy 212.361502 111.409759) (xy 212.3615 111.409754) (xy 212.3615 111.409747) (xy 212.342344 111.3635) + (xy 212.327044 111.326558) (xy 212.326878 111.32615) (xy 212.326868 111.326135) (xy 212.29361 111.292877) + (xy 212.293607 111.292871) (xy 212.293606 111.292873) (xy 202.355814 101.354089) (xy 202.322332 101.292764) + (xy 202.3195 101.266412) (xy 202.3195 95.012353) (xy 205.7075 95.012353) (xy 205.7075 95.170046) + (xy 205.738261 95.324689) (xy 205.738264 95.324701) (xy 205.798602 95.470372) (xy 205.798609 95.470385) + (xy 205.88621 95.601488) (xy 205.886213 95.601492) (xy 205.997707 95.712986) (xy 205.997711 95.712989) + (xy 206.128814 95.80059) (xy 206.128818 95.800592) (xy 206.128821 95.800594) (xy 206.203954 95.831715) + (xy 206.258356 95.875554) (xy 206.280421 95.941848) (xy 206.2805 95.946275) (xy 206.2805 100.293747) + (xy 206.2805 100.384253) (xy 206.313962 100.465037) (xy 206.315136 100.46787) (xy 215.796181 109.948914) + (xy 215.829666 110.010237) (xy 215.8325 110.036595) (xy 215.8325 113.285924) (xy 215.812815 113.352963) + (xy 215.760011 113.398718) (xy 215.755953 113.400485) (xy 215.680824 113.431604) (xy 215.680814 113.431609) + (xy 215.549711 113.51921) (xy 215.549707 113.519213) (xy 215.438213 113.630707) (xy 215.43821 113.630711) + (xy 215.350609 113.761814) (xy 215.350602 113.761827) (xy 215.290264 113.907498) (xy 215.290261 113.90751) + (xy 215.2595 114.062153) (xy 215.2595 114.219846) (xy 215.290261 114.374489) (xy 215.290264 114.374501) + (xy 215.350602 114.520172) (xy 215.350609 114.520185) (xy 215.43821 114.651288) (xy 215.438213 114.651292) + (xy 215.549707 114.762786) (xy 215.549711 114.762789) (xy 215.680814 114.85039) (xy 215.680818 114.850392) + (xy 215.680821 114.850394) (xy 215.755954 114.881515) (xy 215.810356 114.925354) (xy 215.832421 114.991648) + (xy 215.8325 114.996075) (xy 215.8325 121.752761) (xy 215.832496 121.752771) (xy 215.8325 121.791915) + (xy 215.8325 121.843263) (xy 215.832504 121.843274) (xy 215.832505 121.843276) (xy 215.845442 121.8745) + (xy 215.849469 121.884219) (xy 215.849471 121.884229) (xy 215.849472 121.884229) (xy 215.867134 121.926868) + (xy 215.867144 121.926883) (xy 215.867147 121.926886) (xy 215.867148 121.926888) (xy 215.900525 121.960258) + (xy 215.931132 121.990865) (xy 215.931142 121.990869) (xy 220.584172 126.642927) (xy 220.617663 126.704245) + (xy 220.6205 126.730616) (xy 220.6205 132.335924) (xy 220.600815 132.402963) (xy 220.548011 132.448718) + (xy 220.543953 132.450485) (xy 220.468824 132.481604) (xy 220.468814 132.481609) (xy 220.337711 132.56921) + (xy 220.337707 132.569213) (xy 220.226213 132.680707) (xy 220.22621 132.680711) (xy 220.138609 132.811814) + (xy 220.138602 132.811827) (xy 220.078264 132.957498) (xy 220.078261 132.95751) (xy 220.0475 133.112153) + (xy 220.0475 133.269846) (xy 220.078261 133.424489) (xy 220.078264 133.424501) (xy 220.138602 133.570172) + (xy 220.138609 133.570185) (xy 220.22621 133.701288) (xy 220.226213 133.701292) (xy 220.337707 133.812786) + (xy 220.337711 133.812789) (xy 220.468814 133.90039) (xy 220.468818 133.900392) (xy 220.468821 133.900394) + (xy 220.543954 133.931515) (xy 220.598356 133.975354) (xy 220.620421 134.041648) (xy 220.6205 134.046075) + (xy 220.6205 137.310038) (xy 220.620498 137.346241) (xy 220.6205 137.346245) (xy 220.6205 137.346253) + (xy 220.636373 137.384572) (xy 220.636374 137.384576) (xy 220.655127 137.429857) (xy 220.655133 137.429866) + (xy 220.683687 137.45842) (xy 220.68369 137.458426) (xy 220.683692 137.458425) (xy 229.921896 146.697599) + (xy 230.108186 146.883908) (xy 230.141668 146.945233) (xy 230.1445 146.971585) (xy 230.1445 151.385924) + (xy 230.124815 151.452963) (xy 230.072011 151.498718) (xy 230.067953 151.500485) (xy 229.992824 151.531604) + (xy 229.992814 151.531609) (xy 229.861711 151.61921) (xy 229.861707 151.619213) (xy 229.750213 151.730707) + (xy 229.75021 151.730711) (xy 229.662609 151.861814) (xy 229.662602 151.861827) (xy 229.602264 152.007498) + (xy 229.602261 152.00751) (xy 229.5715 152.162153) (xy 229.5715 152.319846) (xy 229.602261 152.474489) + (xy 229.602264 152.474501) (xy 229.662602 152.620172) (xy 229.662609 152.620185) (xy 229.75021 152.751288) + (xy 229.750213 152.751292) (xy 229.861707 152.862786) (xy 229.861711 152.862789) (xy 229.992814 152.95039) + (xy 229.992827 152.950397) (xy 230.109206 152.998602) (xy 230.138503 153.010737) (xy 230.293153 153.041499) + (xy 230.293156 153.0415) (xy 230.293158 153.0415) (xy 230.450844 153.0415) (xy 230.450845 153.041499) + (xy 230.605497 153.010737) (xy 230.751179 152.950394) (xy 230.882289 152.862789) (xy 230.993789 152.751289) + (xy 231.081394 152.620179) (xy 231.141737 152.474497) (xy 231.1725 152.319842) (xy 231.1725 152.162158) + (xy 231.1725 152.162155) (xy 231.172499 152.162153) (xy 231.141737 152.007503) (xy 231.114278 151.941211) + (xy 231.081397 151.861827) (xy 231.08139 151.861814) (xy 230.993789 151.730711) (xy 230.993786 151.730707) + (xy 230.882292 151.619213) (xy 230.882288 151.61921) (xy 230.751185 151.531609) (xy 230.751175 151.531604) + (xy 230.676047 151.500485) (xy 230.621644 151.456644) (xy 230.599579 151.39035) (xy 230.5995 151.385924) + (xy 230.5995 146.816961) (xy 230.599502 146.780759) (xy 230.5995 146.780754) (xy 230.5995 146.780747) + (xy 230.581851 146.738141) (xy 230.565042 146.697553) (xy 230.564878 146.697151) (xy 230.564868 146.697135) + (xy 230.536311 146.668578) (xy 230.536308 146.668572) (xy 230.536307 146.668574) (xy 226.523949 142.655794) + (xy 226.490467 142.594469) (xy 226.495456 142.524777) (xy 226.53733 142.468846) (xy 226.602795 142.444432) + (xy 226.636172 142.446569) (xy 226.733661 142.466253) (xy 226.773907 142.474379) (xy 226.776845 142.474429) + (xy 226.956484 142.47752) (xy 227.136612 142.447558) (xy 227.192107 142.427498) (xy 227.308336 142.385485) + (xy 227.308337 142.385483) (xy 227.30834 142.385483) (xy 227.323375 142.37672) (xy 227.330059 142.372835) + (xy 227.33035 142.372757) (xy 227.358233 142.35646) (xy 227.358351 142.356392) (xy 227.361568 142.355601) + (xy 227.420662 142.339599) (xy 228.901792 142.339599) (xy 228.901914 142.339606) (xy 228.910005 142.339605) + (xy 228.910008 142.339606) (xy 228.942142 142.339602) (xy 229.004704 142.356534) (xy 229.03253 142.372791) + (xy 229.032532 142.372791) (xy 229.03868 142.376383) (xy 229.040335 142.377208) (xy 229.054478 142.38545) + (xy 229.2262 142.447521) (xy 229.406321 142.477482) (xy 229.585998 142.47439) (xy 229.588891 142.474341) + (xy 229.767866 142.438205) (xy 229.767869 142.438203) (xy 229.767874 142.438203) (xy 229.93736 142.370262) + (xy 230.091746 142.272763) (xy 230.110131 142.255797) (xy 230.22593 142.14893) (xy 230.225932 142.148928) + (xy 230.23481 142.13709) (xy 230.335485 142.002847) (xy 230.416784 141.839348) (xy 230.467142 141.663833) + (xy 230.484897 141.482103) (xy 230.46946 141.30016) (xy 230.469458 141.300154) (xy 230.458838 141.261277) + (xy 230.421343 141.124018) (xy 230.413583 141.107849) (xy 230.410496 141.101404) (xy 230.410448 141.101146) + (xy 230.394071 141.067119) (xy 230.393943 141.06633) (xy 230.381902 141.013531) (xy 230.381902 141.013522) + (xy 230.381907 140.976108) (xy 230.381906 140.976104) (xy 230.381907 140.968098) (xy 230.381899 140.96796) + (xy 230.381899 139.664678) (xy 230.384553 139.653012) (xy 230.383519 139.644699) (xy 230.394103 139.611034) + (xy 230.400418 139.597876) (xy 230.400498 139.597787) (xy 230.400468 139.597773) (xy 230.400895 139.596885) + (xy 230.410474 139.576974) (xy 230.410474 139.576968) (xy 230.413855 139.569942) (xy 230.414017 139.569538) + (xy 230.421383 139.554191) (xy 230.4695 139.378042) (xy 230.484937 139.196093) (xy 230.467181 139.014355) + (xy 230.41682 138.838834) (xy 230.335518 138.67533) (xy 230.249127 138.560134) (xy 230.225962 138.529245) + (xy 230.168796 138.476489) (xy 230.091769 138.405404) (xy 230.091766 138.405402) (xy 230.091765 138.405401) + (xy 230.091762 138.405399) (xy 229.937377 138.307901) (xy 229.767887 138.239958) (xy 229.767877 138.239956) + (xy 229.588892 138.203818) (xy 229.588899 138.203818) (xy 229.417194 138.200865) (xy 229.406318 138.200678) + (xy 229.406317 138.200678) (xy 229.406314 138.200678) (xy 229.226197 138.230638) (xy 229.226184 138.230641) + (xy 229.054463 138.292713) (xy 229.039948 138.30117) (xy 229.039863 138.301219) (xy 229.032776 138.30534) + (xy 229.03253 138.305408) (xy 229.004738 138.321644) (xy 229.00449 138.321789) (xy 229.001763 138.322459) + (xy 228.942146 138.338596) (xy 228.901801 138.338593) (xy 228.901697 138.3386) (xy 227.460996 138.3386) + (xy 227.452814 138.338598) (xy 227.452792 138.338593) (xy 227.422865 138.338595) (xy 227.420628 138.338595) + (xy 227.420346 138.338512) (xy 227.358093 138.321662) (xy 227.330271 138.305408) (xy 227.324205 138.301864) + (xy 227.322507 138.301017) (xy 227.315157 138.296734) (xy 227.308321 138.29275) (xy 227.136597 138.230678) + (xy 227.136591 138.230677) (xy 226.956481 138.200719) (xy 226.956478 138.200719) (xy 226.947939 138.200865) + (xy 226.773907 138.203859) (xy 226.594934 138.239994) (xy 226.594923 138.239997) (xy 226.425442 138.307937) + (xy 226.425441 138.307937) (xy 226.271061 138.405432) (xy 226.271058 138.405434) (xy 226.136867 138.529273) + (xy 226.027315 138.675354) (xy 225.94602 138.838844) (xy 225.946019 138.838847) (xy 225.946018 138.83885) + (xy 225.920838 138.926606) (xy 225.895658 139.014365) (xy 225.87793 139.195827) (xy 225.877904 139.196093) + (xy 225.879582 139.215868) (xy 225.89168 139.358478) (xy 225.89334 139.378035) (xy 225.915018 139.457392) + (xy 225.941456 139.554178) (xy 225.94146 139.554188) (xy 225.948698 139.56927) (xy 225.94874 139.569356) + (xy 225.952323 139.576838) (xy 225.952381 139.57714) (xy 225.968736 139.611106) (xy 225.968881 139.612) + (xy 225.980901 139.664669) (xy 225.980901 141.013522) (xy 225.968707 141.067145) (xy 225.968119 141.068371) + (xy 225.968039 141.068538) (xy 225.949166 141.107737) (xy 225.948842 141.108539) (xy 225.941418 141.12401) + (xy 225.893301 141.300154) (xy 225.893301 141.300156) (xy 225.877865 141.482106) (xy 225.894076 141.648035) + (xy 225.895621 141.663842) (xy 225.901387 141.683937) (xy 225.909618 141.712627) (xy 225.909184 141.782496) + (xy 225.871046 141.841038) (xy 225.807311 141.869668) (xy 225.738216 141.859296) (xy 225.702742 141.834501) + (xy 223.000778 139.132253) (xy 221.111814 137.24309) (xy 221.078332 137.181765) (xy 221.0755 137.155413) + (xy 221.0755 135.64655) (xy 222.052 135.64655) (xy 222.052 135.815849) (xy 222.078481 135.983047) + (xy 222.130796 136.144053) (xy 222.207652 136.294888) (xy 222.307148 136.431834) (xy 222.307152 136.431839) + (xy 222.42686 136.551547) (xy 222.426865 136.551551) (xy 222.546317 136.638337) (xy 222.563815 136.65105) + (xy 222.627017 136.683253) (xy 222.714646 136.727903) (xy 222.714648 136.727903) (xy 222.714651 136.727905) + (xy 222.80095 136.755945) (xy 222.875652 136.780218) (xy 223.042851 136.8067) (xy 223.042856 136.8067) + (xy 223.212149 136.8067) (xy 223.379347 136.780218) (xy 223.540349 136.727905) (xy 223.691185 136.65105) + (xy 223.828141 136.551546) (xy 223.947846 136.431841) (xy 224.04735 136.294885) (xy 224.124205 136.144049) + (xy 224.176518 135.983047) (xy 224.203 135.815849) (xy 224.203 135.64655) (xy 224.177428 135.485098) + (xy 224.186382 135.415805) (xy 224.231379 135.362353) (xy 224.29813 135.341713) (xy 224.299901 135.3417) + (xy 224.538444 135.3417) (xy 224.538451 135.3417) (xy 224.817942 135.304904) (xy 225.090239 135.231942) + (xy 225.350683 135.124063) (xy 225.594817 134.983112) (xy 225.818465 134.8115) (xy 226.0178 134.612165) + (xy 226.085492 134.523946) (xy 226.14192 134.482744) (xy 226.211666 134.478589) (xy 226.272586 134.512801) + (xy 226.305339 134.574518) (xy 226.299526 134.644146) (xy 226.291255 134.661433) (xy 226.235183 134.758551) + (xy 226.235175 134.758568) (xy 226.125097 135.024321) (xy 226.050646 135.302176) (xy 226.013101 135.587361) + (xy 226.0131 135.587377) (xy 226.0131 135.875022) (xy 226.013101 135.875038) (xy 226.050646 136.160223) + (xy 226.125097 136.438078) (xy 226.235175 136.703831) (xy 226.235183 136.703848) (xy 226.379004 136.952951) + (xy 226.379015 136.952967) (xy 226.554121 137.181171) (xy 226.554127 137.181178) (xy 226.757525 137.384576) + (xy 226.853761 137.45842) (xy 226.985741 137.559691) (xy 226.985748 137.559695) (xy 227.234851 137.703516) + (xy 227.234856 137.703518) (xy 227.234859 137.70352) (xy 227.234863 137.703521) (xy 227.234868 137.703524) + (xy 227.340223 137.747163) (xy 227.50062 137.813602) (xy 227.778475 137.888053) (xy 228.063671 137.9256) + (xy 228.063678 137.9256) (xy 228.351322 137.9256) (xy 228.351329 137.9256) (xy 228.636525 137.888053) + (xy 228.91438 137.813602) (xy 229.180141 137.70352) (xy 229.429259 137.559691) (xy 229.570078 137.451636) + (xy 229.657475 137.384576) (xy 229.657478 137.384572) (xy 229.860872 137.181178) (xy 229.860877 137.181173) + (xy 230.035991 136.952959) (xy 230.17982 136.703841) (xy 230.289902 136.43808) (xy 230.364353 136.160225) + (xy 230.4019 135.875029) (xy 230.4019 135.587371) (xy 230.364353 135.302175) (xy 230.289902 135.02432) + (xy 230.223463 134.863923) (xy 230.179824 134.758568) (xy 230.179816 134.758551) (xy 230.035995 134.509448) + (xy 230.035994 134.509447) (xy 230.035991 134.509441) (xy 229.911525 134.347233) (xy 229.860878 134.281228) + (xy 229.860872 134.281221) (xy 229.657478 134.077827) (xy 229.657471 134.077821) (xy 229.429267 133.902715) + (xy 229.429265 133.902713) (xy 229.429259 133.902709) (xy 229.429254 133.902706) (xy 229.429251 133.902704) + (xy 229.180148 133.758883) (xy 229.180131 133.758875) (xy 228.914378 133.648797) (xy 228.636523 133.574346) + (xy 228.351338 133.536801) (xy 228.351335 133.5368) (xy 228.351329 133.5368) (xy 228.063671 133.5368) + (xy 228.063665 133.5368) (xy 228.063661 133.536801) (xy 227.778476 133.574346) (xy 227.500621 133.648797) + (xy 227.234868 133.758875) (xy 227.234851 133.758883) (xy 226.985748 133.902704) (xy 226.985732 133.902715) + (xy 226.757528 134.077821) (xy 226.757521 134.077827) (xy 226.554127 134.281221) (xy 226.48293 134.374007) + (xy 226.426501 134.415209) (xy 226.356755 134.419364) (xy 226.295835 134.385151) (xy 226.263083 134.323434) + (xy 226.268896 134.253807) (xy 226.277161 134.236531) (xy 226.330363 134.144383) (xy 226.438242 133.883939) + (xy 226.511204 133.611642) (xy 226.548 133.332151) (xy 226.548 133.050249) (xy 226.511204 132.770758) + (xy 226.438242 132.498461) (xy 226.43126 132.481606) (xy 226.409309 132.428611) (xy 226.330363 132.238017) + (xy 226.330361 132.238014) (xy 226.330359 132.238009) (xy 226.189416 131.99389) (xy 226.189412 131.993883) + (xy 226.0178 131.770235) (xy 226.017798 131.770233) (xy 226.017795 131.770229) (xy 225.81847 131.570904) + (xy 225.719871 131.495246) (xy 225.594817 131.399288) (xy 225.594811 131.399284) (xy 225.594809 131.399283) + (xy 225.35069 131.25834) (xy 225.350679 131.258335) (xy 225.090243 131.150459) (xy 224.817939 131.077495) + (xy 224.538458 131.0407) (xy 224.538451 131.0407) (xy 224.256549 131.0407) (xy 224.256541 131.0407) + (xy 223.97706 131.077495) (xy 223.704756 131.150459) (xy 223.44432 131.258335) (xy 223.444309 131.25834) + (xy 223.20019 131.399283) (xy 223.200182 131.399289) (xy 222.976529 131.570904) (xy 222.777204 131.770229) + (xy 222.605589 131.993882) (xy 222.605583 131.99389) (xy 222.46464 132.238009) (xy 222.464635 132.23802) + (xy 222.356759 132.498456) (xy 222.283795 132.77076) (xy 222.247 133.050241) (xy 222.247 133.332158) + (xy 222.283795 133.611639) (xy 222.356759 133.883943) (xy 222.464635 134.144379) (xy 222.46464 134.14439) + (xy 222.605583 134.388509) (xy 222.605594 134.388525) (xy 222.736338 134.558914) (xy 222.761532 134.624083) + (xy 222.747494 134.692528) (xy 222.69868 134.742517) (xy 222.694258 134.744884) (xy 222.563813 134.81135) + (xy 222.426865 134.910848) (xy 222.42686 134.910852) (xy 222.307152 135.03056) (xy 222.307148 135.030565) + (xy 222.207652 135.167511) (xy 222.130796 135.318346) (xy 222.078481 135.479352) (xy 222.052 135.64655) + (xy 221.0755 135.64655) (xy 221.0755 134.046075) (xy 221.095185 133.979036) (xy 221.147989 133.933281) + (xy 221.151999 133.931534) (xy 221.227179 133.900394) (xy 221.358289 133.812789) (xy 221.469789 133.701289) + (xy 221.557394 133.570179) (xy 221.617737 133.424497) (xy 221.6485 133.269842) (xy 221.6485 133.112158) + (xy 221.6485 133.112155) (xy 221.648499 133.112153) (xy 221.617737 132.957503) (xy 221.60203 132.919582) + (xy 221.557397 132.811827) (xy 221.55739 132.811814) (xy 221.469789 132.680711) (xy 221.469786 132.680707) + (xy 221.358292 132.569213) (xy 221.358288 132.56921) (xy 221.227185 132.481609) (xy 221.227175 132.481604) + (xy 221.152047 132.450485) (xy 221.097644 132.406644) (xy 221.075579 132.34035) (xy 221.0755 132.335924) + (xy 221.0755 130.510241) (xy 228.597 130.510241) (xy 228.597 130.792158) (xy 228.633795 131.071639) + (xy 228.706759 131.343943) (xy 228.814635 131.604379) (xy 228.81464 131.60439) (xy 228.947142 131.833888) + (xy 228.955588 131.848517) (xy 229.118047 132.060237) (xy 229.127204 132.07217) (xy 229.326529 132.271495) + (xy 229.326533 132.271498) (xy 229.326535 132.2715) (xy 229.550183 132.443112) (xy 229.55019 132.443116) + (xy 229.794309 132.584059) (xy 229.794314 132.584061) (xy 229.794317 132.584063) (xy 230.054761 132.691942) + (xy 230.327058 132.764904) (xy 230.606549 132.8017) (xy 230.606556 132.8017) (xy 230.888444 132.8017) + (xy 230.888451 132.8017) (xy 231.167942 132.764904) (xy 231.440239 132.691942) (xy 231.700683 132.584063) + (xy 231.944817 132.443112) (xy 232.168465 132.2715) (xy 232.3678 132.072165) (xy 232.539412 131.848517) + (xy 232.680363 131.604383) (xy 232.788242 131.343939) (xy 232.861204 131.071642) (xy 232.898 130.792151) + (xy 232.898 130.510249) (xy 232.861204 130.230758) (xy 232.788242 129.958461) (xy 232.78126 129.941606) + (xy 232.756265 129.881261) (xy 232.680363 129.698017) (xy 232.680361 129.698014) (xy 232.680359 129.698009) + (xy 232.539416 129.45389) (xy 232.539412 129.453883) (xy 232.3678 129.230235) (xy 232.367798 129.230233) + (xy 232.367795 129.230229) (xy 232.16847 129.030904) (xy 232.168465 129.0309) (xy 231.944817 128.859288) + (xy 231.944811 128.859284) (xy 231.944809 128.859283) (xy 231.70069 128.71834) (xy 231.700679 128.718335) + (xy 231.440243 128.610459) (xy 231.167939 128.537495) (xy 230.888458 128.5007) (xy 230.888451 128.5007) + (xy 230.606549 128.5007) (xy 230.606541 128.5007) (xy 230.32706 128.537495) (xy 230.054756 128.610459) + (xy 229.79432 128.718335) (xy 229.794309 128.71834) (xy 229.55019 128.859283) (xy 229.550184 128.859287) + (xy 229.550183 128.859288) (xy 229.495198 128.90148) (xy 229.326529 129.030904) (xy 229.127204 129.230229) + (xy 229.013881 129.377914) (xy 228.955597 129.453872) (xy 228.955589 129.453882) (xy 228.955583 129.45389) + (xy 228.81464 129.698009) (xy 228.814635 129.69802) (xy 228.706759 129.958456) (xy 228.633795 130.23076) + (xy 228.597 130.510241) (xy 221.0755 130.510241) (xy 221.0755 126.630238) (xy 221.075504 126.630229) + (xy 221.0755 126.590004) (xy 221.0755 126.539747) (xy 221.075497 126.539741) (xy 221.075495 126.539728) + (xy 221.075495 126.539723) (xy 221.070011 126.526488) (xy 221.056758 126.494498) (xy 221.056755 126.494492) + (xy 221.048573 126.47474) (xy 221.040865 126.456132) (xy 221.040863 126.45613) (xy 221.040857 126.456115) + (xy 221.002572 126.417839) (xy 221.002571 126.417838) (xy 220.976868 126.392135) (xy 220.976858 126.392131) + (xy 217.092069 122.508153) (xy 218.1205 122.508153) (xy 218.1205 122.665846) (xy 218.151261 122.820489) + (xy 218.151264 122.820501) (xy 218.211602 122.966172) (xy 218.211609 122.966185) (xy 218.29921 123.097288) + (xy 218.299213 123.097292) (xy 218.410707 123.208786) (xy 218.410711 123.208789) (xy 218.541814 123.29639) + (xy 218.541827 123.296397) (xy 218.671376 123.350057) (xy 218.687503 123.356737) (xy 218.826523 123.38439) + (xy 218.842153 123.387499) (xy 218.842156 123.3875) (xy 218.842158 123.3875) (xy 218.999844 123.3875) + (xy 218.999845 123.387499) (xy 219.154497 123.356737) (xy 219.277951 123.305601) (xy 219.300172 123.296397) + (xy 219.300172 123.296396) (xy 219.300179 123.296394) (xy 219.431289 123.208789) (xy 219.542789 123.097289) + (xy 219.630394 122.966179) (xy 219.661515 122.891045) (xy 219.705354 122.836644) (xy 219.771648 122.814579) + (xy 219.776075 122.8145) (xy 220.563405 122.8145) (xy 220.630444 122.834185) (xy 220.651086 122.850819) + (xy 221.701433 123.901167) (xy 221.734918 123.96249) (xy 221.729934 124.032182) (xy 221.688062 124.088115) + (xy 221.682643 124.09195) (xy 221.590961 124.15321) (xy 221.590957 124.153213) (xy 221.479463 124.264707) + (xy 221.47946 124.264711) (xy 221.391859 124.395814) (xy 221.391852 124.395827) (xy 221.331514 124.541498) + (xy 221.331511 124.54151) (xy 221.30075 124.696153) (xy 221.30075 124.853846) (xy 221.331511 125.008489) + (xy 221.331514 125.008501) (xy 221.391852 125.154172) (xy 221.391859 125.154185) (xy 221.47946 125.285288) + (xy 221.479463 125.285292) (xy 221.590957 125.396786) (xy 221.590961 125.396789) (xy 221.722064 125.48439) + (xy 221.722077 125.484397) (xy 221.867748 125.544735) (xy 221.867753 125.544737) (xy 221.973377 125.565747) + (xy 222.022403 125.575499) (xy 222.022406 125.5755) (xy 222.022408 125.5755) (xy 222.180094 125.5755) + (xy 222.180095 125.575499) (xy 222.334747 125.544737) (xy 222.480429 125.484394) (xy 222.611539 125.396789) + (xy 222.723039 125.285289) (xy 222.810644 125.154179) (xy 222.813607 125.147027) (xy 222.848627 125.062479) + (xy 222.870987 125.008497) (xy 222.90175 124.853842) (xy 222.90175 124.696158) (xy 222.90175 124.696155) + (xy 222.901749 124.696153) (xy 222.875101 124.562185) (xy 222.870987 124.541503) (xy 222.81921 124.416501) + (xy 222.810647 124.395827) (xy 222.81064 124.395814) (xy 222.723039 124.264711) (xy 222.723036 124.264707) + (xy 222.611542 124.153213) (xy 222.611538 124.15321) (xy 222.480435 124.065609) (xy 222.480422 124.065602) + (xy 222.404894 124.034318) (xy 222.35049 123.990477) (xy 222.335791 123.962075) (xy 222.32875 123.942681) + (xy 222.32875 123.933997) (xy 222.30426 123.874873) (xy 222.294116 123.850382) (xy 222.082544 123.63881) + (xy 222.049059 123.577487) (xy 222.054043 123.507795) (xy 222.095915 123.451862) (xy 222.161379 123.427445) + (xy 222.172339 123.427147) (xy 222.193984 123.42752) (xy 222.374112 123.397558) (xy 222.481061 123.358899) + (xy 222.545836 123.335485) (xy 222.545837 123.335483) (xy 222.54584 123.335483) (xy 222.560875 123.32672) + (xy 222.567559 123.322835) (xy 222.56785 123.322757) (xy 222.595733 123.30646) (xy 222.595851 123.306392) + (xy 222.599068 123.305601) (xy 222.658162 123.289599) (xy 224.139292 123.289599) (xy 224.139414 123.289606) + (xy 224.147505 123.289605) (xy 224.147508 123.289606) (xy 224.179642 123.289602) (xy 224.242204 123.306534) + (xy 224.27003 123.322791) (xy 224.270032 123.322791) (xy 224.27618 123.326383) (xy 224.277835 123.327208) + (xy 224.291978 123.33545) (xy 224.4637 123.397521) (xy 224.643821 123.427482) (xy 224.823498 123.42439) + (xy 224.826391 123.424341) (xy 225.005366 123.388205) (xy 225.005369 123.388203) (xy 225.005374 123.388203) + (xy 225.17486 123.320262) (xy 225.329246 123.222763) (xy 225.339905 123.212927) (xy 225.46343 123.09893) + (xy 225.463432 123.098928) (xy 225.476272 123.081807) (xy 225.572985 122.952847) (xy 225.654284 122.789348) + (xy 225.704642 122.613833) (xy 225.722397 122.432103) (xy 225.70696 122.25016) (xy 225.706958 122.250154) + (xy 225.695392 122.207814) (xy 225.658843 122.074018) (xy 225.651083 122.057849) (xy 225.647996 122.051404) + (xy 225.647948 122.051146) (xy 225.631571 122.017119) (xy 225.631443 122.01633) (xy 225.619402 121.963531) + (xy 225.619402 121.963522) (xy 225.619407 121.926108) (xy 225.619406 121.926104) (xy 225.619407 121.918098) + (xy 225.619399 121.91796) (xy 225.619399 120.614677) (xy 225.622054 120.603008) (xy 225.62102 120.594694) + (xy 225.631605 120.561028) (xy 225.637911 120.54789) (xy 225.647974 120.526974) (xy 225.647974 120.526969) + (xy 225.65136 120.519933) (xy 225.651525 120.519522) (xy 225.651646 120.51927) (xy 225.658883 120.504191) + (xy 225.707 120.328042) (xy 225.722437 120.146093) (xy 225.704681 119.964355) (xy 225.65432 119.788834) + (xy 225.573018 119.62533) (xy 225.478575 119.499397) (xy 225.463462 119.479245) (xy 225.395159 119.416211) + (xy 225.329269 119.355404) (xy 225.329266 119.355402) (xy 225.329265 119.355401) (xy 225.329262 119.355399) + (xy 225.174877 119.257901) (xy 225.005387 119.189958) (xy 225.005377 119.189956) (xy 224.826392 119.153818) + (xy 224.826399 119.153818) (xy 224.654694 119.150865) (xy 224.643818 119.150678) (xy 224.643817 119.150678) + (xy 224.643814 119.150678) (xy 224.463697 119.180638) (xy 224.463684 119.180641) (xy 224.291963 119.242713) + (xy 224.277448 119.25117) (xy 224.277363 119.251219) (xy 224.270276 119.25534) (xy 224.27003 119.255408) + (xy 224.242238 119.271644) (xy 224.24199 119.271789) (xy 224.239263 119.272459) (xy 224.179646 119.288596) + (xy 224.139301 119.288593) (xy 224.139197 119.2886) (xy 222.698496 119.2886) (xy 222.690314 119.288598) + (xy 222.690292 119.288593) (xy 222.660365 119.288595) (xy 222.658128 119.288595) (xy 222.657846 119.288512) + (xy 222.595593 119.271662) (xy 222.567771 119.255408) (xy 222.561705 119.251864) (xy 222.560007 119.251017) + (xy 222.552657 119.246734) (xy 222.545821 119.24275) (xy 222.374097 119.180678) (xy 222.374091 119.180677) + (xy 222.193981 119.150719) (xy 222.193978 119.150719) (xy 222.185439 119.150865) (xy 222.011407 119.153859) + (xy 221.832434 119.189994) (xy 221.832423 119.189997) (xy 221.662942 119.257937) (xy 221.662941 119.257937) + (xy 221.508561 119.355432) (xy 221.508558 119.355434) (xy 221.374367 119.479273) (xy 221.264815 119.625354) + (xy 221.18352 119.788844) (xy 221.183519 119.788847) (xy 221.183518 119.78885) (xy 221.166645 119.847658) + (xy 221.133158 119.964365) (xy 221.119378 120.105413) (xy 221.115404 120.146093) (xy 221.116583 120.159989) + (xy 221.130679 120.326147) (xy 221.13084 120.328035) (xy 221.155548 120.418484) (xy 221.178956 120.504178) + (xy 221.17896 120.504188) (xy 221.186198 120.51927) (xy 221.18624 120.519356) (xy 221.189823 120.526838) + (xy 221.189881 120.52714) (xy 221.206197 120.561025) (xy 221.206236 120.561106) (xy 221.206381 120.562) + (xy 221.218401 120.614669) (xy 221.218401 121.963522) (xy 221.206207 122.017145) (xy 221.205619 122.018371) + (xy 221.205539 122.018538) (xy 221.186666 122.057737) (xy 221.186342 122.058539) (xy 221.178918 122.07401) + (xy 221.130801 122.250154) (xy 221.130801 122.250156) (xy 221.11919 122.38702) (xy 221.093909 122.452156) + (xy 221.037426 122.493283) (xy 220.967674 122.497345) (xy 220.907953 122.464219) (xy 220.83787 122.394136) + (xy 220.832788 122.392031) (xy 220.754253 122.3595) (xy 219.776075 122.3595) (xy 219.709036 122.339815) + (xy 219.663281 122.287011) (xy 219.661534 122.283) (xy 219.630394 122.207821) (xy 219.630392 122.207818) + (xy 219.63039 122.207814) (xy 219.542789 122.076711) (xy 219.542786 122.076707) (xy 219.431292 121.965213) + (xy 219.431288 121.96521) (xy 219.300185 121.877609) (xy 219.300172 121.877602) (xy 219.154501 121.817264) + (xy 219.154489 121.817261) (xy 218.999845 121.7865) (xy 218.999842 121.7865) (xy 218.842158 121.7865) + (xy 218.842155 121.7865) (xy 218.68751 121.817261) (xy 218.687498 121.817264) (xy 218.541827 121.877602) + (xy 218.541814 121.877609) (xy 218.410711 121.96521) (xy 218.410707 121.965213) (xy 218.299213 122.076707) + (xy 218.29921 122.076711) (xy 218.211609 122.207814) (xy 218.211602 122.207827) (xy 218.151264 122.353498) + (xy 218.151261 122.35351) (xy 218.1205 122.508153) (xy 217.092069 122.508153) (xy 217.016003 122.432103) + (xy 216.323828 121.740072) (xy 216.290337 121.678753) (xy 216.2875 121.652382) (xy 216.2875 116.59655) + (xy 217.2645 116.59655) (xy 217.2645 116.765849) (xy 217.290981 116.933047) (xy 217.343296 117.094053) + (xy 217.420152 117.244888) (xy 217.519648 117.381834) (xy 217.519651 117.381838) (xy 217.63936 117.501547) + (xy 217.639365 117.501551) (xy 217.719244 117.559586) (xy 217.776315 117.60105) (xy 217.872425 117.65002) + (xy 217.927146 117.677903) (xy 217.927148 117.677903) (xy 217.927151 117.677905) (xy 218.01345 117.705945) + (xy 218.088152 117.730218) (xy 218.255351 117.7567) (xy 218.255356 117.7567) (xy 218.424649 117.7567) + (xy 218.591847 117.730218) (xy 218.752849 117.677905) (xy 218.903685 117.60105) (xy 219.040641 117.501546) + (xy 219.160346 117.381841) (xy 219.160346 117.38184) (xy 219.160349 117.381838) (xy 219.160351 117.381834) + (xy 219.181179 117.353167) (xy 219.25985 117.244885) (xy 219.336705 117.094049) (xy 219.389018 116.933047) + (xy 219.4155 116.765849) (xy 219.4155 116.59655) (xy 219.389928 116.435098) (xy 219.398882 116.365805) + (xy 219.443879 116.312353) (xy 219.51063 116.291713) (xy 219.512401 116.2917) (xy 219.750944 116.2917) + (xy 219.750951 116.2917) (xy 220.030442 116.254904) (xy 220.302739 116.181942) (xy 220.563183 116.074063) + (xy 220.807317 115.933112) (xy 221.030965 115.7615) (xy 221.2303 115.562165) (xy 221.297992 115.473946) + (xy 221.35442 115.432744) (xy 221.424166 115.428589) (xy 221.485086 115.462801) (xy 221.517839 115.524518) + (xy 221.512026 115.594146) (xy 221.503755 115.611433) (xy 221.447683 115.708551) (xy 221.447675 115.708568) + (xy 221.337597 115.974321) (xy 221.263146 116.252176) (xy 221.225601 116.537361) (xy 221.2256 116.537377) + (xy 221.2256 116.825022) (xy 221.225601 116.825038) (xy 221.263146 117.110223) (xy 221.337597 117.388078) + (xy 221.447675 117.653831) (xy 221.447683 117.653848) (xy 221.591504 117.902951) (xy 221.591515 117.902967) + (xy 221.766621 118.131171) (xy 221.766627 118.131178) (xy 221.970021 118.334572) (xy 221.970027 118.334577) + (xy 222.198241 118.509691) (xy 222.198248 118.509695) (xy 222.447351 118.653516) (xy 222.447356 118.653518) + (xy 222.447359 118.65352) (xy 222.447363 118.653521) (xy 222.447368 118.653524) (xy 222.494808 118.673174) + (xy 222.71312 118.763602) (xy 222.990975 118.838053) (xy 223.276171 118.8756) (xy 223.276178 118.8756) + (xy 223.563822 118.8756) (xy 223.563829 118.8756) (xy 223.849025 118.838053) (xy 224.12688 118.763602) + (xy 224.392641 118.65352) (xy 224.395056 118.652126) (xy 224.509067 118.586301) (xy 224.641759 118.509691) + (xy 224.869973 118.334577) (xy 225.073377 118.131173) (xy 225.248491 117.902959) (xy 225.39232 117.653841) + (xy 225.502402 117.38808) (xy 225.576853 117.110225) (xy 225.6144 116.825029) (xy 225.6144 116.59655) + (xy 227.4245 116.59655) (xy 227.4245 116.765849) (xy 227.450981 116.933047) (xy 227.503296 117.094053) + (xy 227.580152 117.244888) (xy 227.679648 117.381834) (xy 227.679651 117.381838) (xy 227.79936 117.501547) + (xy 227.799365 117.501551) (xy 227.879244 117.559586) (xy 227.936315 117.60105) (xy 228.032425 117.65002) + (xy 228.087146 117.677903) (xy 228.087148 117.677903) (xy 228.087151 117.677905) (xy 228.17345 117.705945) + (xy 228.248152 117.730218) (xy 228.415351 117.7567) (xy 228.415356 117.7567) (xy 228.584649 117.7567) + (xy 228.751847 117.730218) (xy 228.912849 117.677905) (xy 229.063685 117.60105) (xy 229.200641 117.501546) + (xy 229.320346 117.381841) (xy 229.320346 117.38184) (xy 229.320349 117.381838) (xy 229.320351 117.381834) + (xy 229.341179 117.353167) (xy 229.41985 117.244885) (xy 229.496705 117.094049) (xy 229.549018 116.933047) + (xy 229.5755 116.765849) (xy 229.5755 116.59655) (xy 229.549018 116.429352) (xy 229.522275 116.347046) + (xy 229.496705 116.268351) (xy 229.496703 116.268348) (xy 229.496703 116.268346) (xy 229.446015 116.168867) + (xy 229.41985 116.117515) (xy 229.388281 116.074064) (xy 229.320351 115.980565) (xy 229.320347 115.98056) + (xy 229.200639 115.860852) (xy 229.200634 115.860848) (xy 229.063688 115.761352) (xy 229.063687 115.761351) + (xy 229.063685 115.76135) (xy 229.014398 115.736237) (xy 228.912853 115.684496) (xy 228.751847 115.632181) + (xy 228.584649 115.6057) (xy 228.584644 115.6057) (xy 228.415356 115.6057) (xy 228.415351 115.6057) + (xy 228.248152 115.632181) (xy 228.087146 115.684496) (xy 227.936311 115.761352) (xy 227.799365 115.860848) + (xy 227.79936 115.860852) (xy 227.679652 115.98056) (xy 227.679648 115.980565) (xy 227.580152 116.117511) + (xy 227.503296 116.268346) (xy 227.450981 116.429352) (xy 227.4245 116.59655) (xy 225.6144 116.59655) + (xy 225.6144 116.537371) (xy 225.576853 116.252175) (xy 225.502402 115.97432) (xy 225.414705 115.762601) + (xy 225.392324 115.708568) (xy 225.392316 115.708551) (xy 225.248495 115.459448) (xy 225.248491 115.459441) + (xy 225.107073 115.275141) (xy 225.073378 115.231228) (xy 225.073372 115.231221) (xy 224.869978 115.027827) + (xy 224.869971 115.027821) (xy 224.641767 114.852715) (xy 224.641765 114.852713) (xy 224.641759 114.852709) + (xy 224.641754 114.852706) (xy 224.641751 114.852704) (xy 224.392648 114.708883) (xy 224.392631 114.708875) + (xy 224.126878 114.598797) (xy 223.849023 114.524346) (xy 223.563838 114.486801) (xy 223.563835 114.4868) + (xy 223.563829 114.4868) (xy 223.276171 114.4868) (xy 223.276165 114.4868) (xy 223.276161 114.486801) + (xy 222.990976 114.524346) (xy 222.713121 114.598797) (xy 222.447368 114.708875) (xy 222.447351 114.708883) + (xy 222.198248 114.852704) (xy 222.198232 114.852715) (xy 221.970028 115.027821) (xy 221.970021 115.027827) + (xy 221.766627 115.231221) (xy 221.69543 115.324007) (xy 221.639001 115.365209) (xy 221.569255 115.369364) + (xy 221.508335 115.335151) (xy 221.475583 115.273434) (xy 221.481396 115.203807) (xy 221.489661 115.186531) + (xy 221.542863 115.094383) (xy 221.650742 114.833939) (xy 221.723704 114.561642) (xy 221.7605 114.282151) + (xy 221.7605 114.000249) (xy 221.723704 113.720758) (xy 221.650742 113.448461) (xy 221.64376 113.431606) + (xy 221.618765 113.371261) (xy 221.542863 113.188017) (xy 221.542861 113.188014) (xy 221.542859 113.188009) + (xy 221.401916 112.94389) (xy 221.401912 112.943883) (xy 221.2303 112.720235) (xy 221.230298 112.720233) + (xy 221.230295 112.720229) (xy 221.03097 112.520904) (xy 221.006161 112.501867) (xy 220.807317 112.349288) + (xy 220.807311 112.349284) (xy 220.807309 112.349283) (xy 220.56319 112.20834) (xy 220.563179 112.208335) + (xy 220.302743 112.100459) (xy 220.030439 112.027495) (xy 219.750958 111.9907) (xy 219.750951 111.9907) + (xy 219.469049 111.9907) (xy 219.469041 111.9907) (xy 219.18956 112.027495) (xy 218.917256 112.100459) + (xy 218.65682 112.208335) (xy 218.656809 112.20834) (xy 218.41269 112.349283) (xy 218.412682 112.349289) + (xy 218.189029 112.520904) (xy 217.989704 112.720229) (xy 217.818089 112.943882) (xy 217.818083 112.94389) + (xy 217.67714 113.188009) (xy 217.677135 113.18802) (xy 217.569259 113.448456) (xy 217.496295 113.72076) + (xy 217.4595 114.000241) (xy 217.4595 114.282158) (xy 217.496295 114.561639) (xy 217.569259 114.833943) + (xy 217.677135 115.094379) (xy 217.67714 115.09439) (xy 217.818083 115.338509) (xy 217.818094 115.338525) + (xy 217.948838 115.508914) (xy 217.974032 115.574083) (xy 217.959994 115.642528) (xy 217.91118 115.692517) + (xy 217.906758 115.694884) (xy 217.776313 115.76135) (xy 217.639365 115.860848) (xy 217.63936 115.860852) + (xy 217.519652 115.98056) (xy 217.519648 115.980565) (xy 217.420152 116.117511) (xy 217.343296 116.268346) + (xy 217.290981 116.429352) (xy 217.2645 116.59655) (xy 216.2875 116.59655) (xy 216.2875 114.996075) + (xy 216.307185 114.929036) (xy 216.359989 114.883281) (xy 216.363999 114.881534) (xy 216.439179 114.850394) + (xy 216.570289 114.762789) (xy 216.681789 114.651289) (xy 216.769394 114.520179) (xy 216.829737 114.374497) + (xy 216.8605 114.219842) (xy 216.8605 114.062158) (xy 216.8605 114.062155) (xy 216.860499 114.062153) + (xy 216.848556 114.002113) (xy 216.829737 113.907503) (xy 216.802278 113.841211) (xy 216.769397 113.761827) + (xy 216.76939 113.761814) (xy 216.681789 113.630711) (xy 216.681786 113.630707) (xy 216.570292 113.519213) + (xy 216.570288 113.51921) (xy 216.439185 113.431609) (xy 216.439175 113.431604) (xy 216.364047 113.400485) + (xy 216.309644 113.356644) (xy 216.287579 113.29035) (xy 216.2875 113.285924) (xy 216.2875 109.845748) + (xy 216.2875 109.845747) (xy 216.280771 109.829502) (xy 216.280771 109.8295) (xy 216.252868 109.762137) + (xy 216.252866 109.762132) (xy 209.90244 103.411706) (xy 211.615265 103.411706) (xy 211.631066 103.573438) + (xy 211.633021 103.593442) (xy 211.654827 103.669442) (xy 211.68338 103.768961) (xy 211.76468 103.932463) + (xy 211.764681 103.932465) (xy 211.764683 103.932468) (xy 211.819425 104.005462) (xy 211.874238 104.078552) + (xy 211.874239 104.078553) (xy 211.87424 104.078554) (xy 212.008432 104.202395) (xy 212.162825 104.299897) + (xy 212.282422 104.347839) (xy 212.332314 104.367839) (xy 212.332315 104.367839) (xy 212.332317 104.36784) + (xy 212.511308 104.403979) (xy 212.511302 104.403979) (xy 212.527622 104.404259) (xy 212.693884 104.40712) + (xy 212.874012 104.377158) (xy 212.918314 104.361143) (xy 213.045736 104.315085) (xy 213.045737 104.315083) + (xy 213.04574 104.315083) (xy 213.060775 104.30632) (xy 213.067459 104.302435) (xy 213.06775 104.302357) + (xy 213.095633 104.28606) (xy 213.095751 104.285992) (xy 213.098968 104.285201) (xy 213.158062 104.269199) + (xy 214.639192 104.269199) (xy 214.639314 104.269206) (xy 214.647405 104.269205) (xy 214.647408 104.269206) + (xy 214.679542 104.269202) (xy 214.742104 104.286134) (xy 214.76993 104.302391) (xy 214.769932 104.302391) + (xy 214.77608 104.305983) (xy 214.777735 104.306808) (xy 214.791878 104.31505) (xy 214.9636 104.377121) + (xy 215.143721 104.407082) (xy 215.323398 104.40399) (xy 215.326291 104.403941) (xy 215.505266 104.367805) + (xy 215.505269 104.367803) (xy 215.505274 104.367803) (xy 215.67476 104.299862) (xy 215.829146 104.202363) + (xy 215.841363 104.191089) (xy 215.96333 104.07853) (xy 215.963332 104.078528) (xy 215.975392 104.062447) + (xy 216.072885 103.932447) (xy 216.154184 103.768948) (xy 216.204542 103.593433) (xy 216.222297 103.411703) + (xy 216.20686 103.22976) (xy 216.206858 103.229754) (xy 216.192917 103.178718) (xy 216.158743 103.053618) + (xy 216.150983 103.037449) (xy 216.147896 103.031004) (xy 216.147848 103.030746) (xy 216.131471 102.996719) + (xy 216.131343 102.99593) (xy 216.119302 102.943131) (xy 216.119302 102.943122) (xy 216.119307 102.905708) + (xy 216.119306 102.905704) (xy 216.119307 102.897698) (xy 216.119299 102.89756) (xy 216.119299 101.594279) + (xy 216.121955 101.582607) (xy 216.120921 101.574291) (xy 216.131509 101.540623) (xy 216.138123 101.526843) + (xy 216.138173 101.526739) (xy 216.151251 101.499555) (xy 216.151418 101.499135) (xy 216.158783 101.483791) + (xy 216.182722 101.396153) (xy 218.00075 101.396153) (xy 218.00075 101.553846) (xy 218.031511 101.708489) + (xy 218.031514 101.708501) (xy 218.091852 101.854172) (xy 218.091859 101.854185) (xy 218.17946 101.985288) + (xy 218.179463 101.985292) (xy 218.290957 102.096786) (xy 218.290961 102.096789) (xy 218.422064 102.18439) + (xy 218.422077 102.184397) (xy 218.551971 102.2382) (xy 218.567753 102.244737) (xy 218.689545 102.268963) + (xy 218.722403 102.275499) (xy 218.722406 102.2755) (xy 218.722408 102.2755) (xy 218.880094 102.2755) + (xy 218.880095 102.275499) (xy 219.034747 102.244737) (xy 219.170514 102.188501) (xy 219.180422 102.184397) + (xy 219.180422 102.184396) (xy 219.180429 102.184394) (xy 219.311539 102.096789) (xy 219.423039 101.985289) + (xy 219.510644 101.854179) (xy 219.511794 101.851404) (xy 219.543825 101.774073) (xy 219.570987 101.708497) + (xy 219.60175 101.553842) (xy 219.60175 101.396158) (xy 219.60175 101.396155) (xy 219.601749 101.396153) + (xy 219.59638 101.369162) (xy 219.570987 101.241503) (xy 219.570183 101.239562) (xy 219.510647 101.095827) + (xy 219.51064 101.095814) (xy 219.423039 100.964711) (xy 219.423036 100.964707) (xy 219.311542 100.853213) + (xy 219.311538 100.85321) (xy 219.180435 100.765609) (xy 219.180422 100.765602) (xy 219.034751 100.705264) + (xy 219.034739 100.705261) (xy 218.880095 100.6745) (xy 218.880092 100.6745) (xy 218.722408 100.6745) + (xy 218.722405 100.6745) (xy 218.56776 100.705261) (xy 218.567748 100.705264) (xy 218.422077 100.765602) + (xy 218.422064 100.765609) (xy 218.290961 100.85321) (xy 218.290957 100.853213) (xy 218.179463 100.964707) + (xy 218.17946 100.964711) (xy 218.091859 101.095814) (xy 218.091852 101.095827) (xy 218.031514 101.241498) + (xy 218.031511 101.24151) (xy 218.00075 101.396153) (xy 216.182722 101.396153) (xy 216.2069 101.307642) + (xy 216.222337 101.125693) (xy 216.204581 100.943955) (xy 216.15422 100.768434) (xy 216.072918 100.60493) + (xy 215.999891 100.507554) (xy 215.963362 100.458845) (xy 215.94362 100.440626) (xy 215.829169 100.335004) + (xy 215.829166 100.335002) (xy 215.829165 100.335001) (xy 215.829162 100.334999) (xy 215.674777 100.237501) + (xy 215.505287 100.169558) (xy 215.505277 100.169556) (xy 215.326292 100.133418) (xy 215.326299 100.133418) + (xy 215.154594 100.130465) (xy 215.143718 100.130278) (xy 215.143717 100.130278) (xy 215.143714 100.130278) + (xy 214.963597 100.160238) (xy 214.963584 100.160241) (xy 214.791863 100.222313) (xy 214.777348 100.23077) + (xy 214.777263 100.230819) (xy 214.770176 100.23494) (xy 214.76993 100.235008) (xy 214.742138 100.251244) + (xy 214.74189 100.251389) (xy 214.739163 100.252059) (xy 214.679546 100.268196) (xy 214.639201 100.268193) + (xy 214.639097 100.2682) (xy 213.198396 100.2682) (xy 213.190214 100.268198) (xy 213.190192 100.268193) + (xy 213.160265 100.268195) (xy 213.158028 100.268195) (xy 213.157746 100.268112) (xy 213.095493 100.251262) + (xy 213.067671 100.235008) (xy 213.061605 100.231464) (xy 213.059907 100.230617) (xy 213.052447 100.22627) + (xy 213.045721 100.22235) (xy 212.873997 100.160278) (xy 212.873991 100.160277) (xy 212.693881 100.130319) + (xy 212.693878 100.130319) (xy 212.685339 100.130465) (xy 212.511307 100.133459) (xy 212.332334 100.169594) + (xy 212.332323 100.169597) (xy 212.162842 100.237537) (xy 212.162841 100.237537) (xy 212.008461 100.335032) + (xy 212.008458 100.335034) (xy 211.874267 100.458873) (xy 211.764715 100.604954) (xy 211.68342 100.768444) + (xy 211.683419 100.768447) (xy 211.683418 100.76845) (xy 211.660466 100.848444) (xy 211.633058 100.943965) + (xy 211.615438 101.124323) (xy 211.615304 101.125693) (xy 211.616806 101.143395) (xy 211.63005 101.299511) + (xy 211.63074 101.307635) (xy 211.667616 101.442629) (xy 211.678856 101.483778) (xy 211.67886 101.483788) + (xy 211.686098 101.49887) (xy 211.68614 101.498956) (xy 211.689723 101.506438) (xy 211.689781 101.50674) + (xy 211.706096 101.540623) (xy 211.706136 101.540706) (xy 211.706281 101.5416) (xy 211.718301 101.594269) + (xy 211.718301 102.943122) (xy 211.706107 102.996745) (xy 211.705519 102.997971) (xy 211.705439 102.998138) + (xy 211.686566 103.037337) (xy 211.686242 103.038139) (xy 211.678818 103.05361) (xy 211.630701 103.229754) + (xy 211.630701 103.229756) (xy 211.615265 103.411706) (xy 209.90244 103.411706) (xy 206.771819 100.281085) + (xy 206.738334 100.219762) (xy 206.7355 100.193404) (xy 206.7355 97.54655) (xy 207.712 97.54655) + (xy 207.712 97.715849) (xy 207.738481 97.883047) (xy 207.790796 98.044053) (xy 207.867652 98.194888) + (xy 207.967148 98.331834) (xy 207.967152 98.331839) (xy 208.08686 98.451547) (xy 208.086865 98.451551) + (xy 208.163873 98.5075) (xy 208.223815 98.55105) (xy 208.317141 98.598602) (xy 208.374646 98.627903) + (xy 208.374648 98.627903) (xy 208.374651 98.627905) (xy 208.45885 98.655263) (xy 208.535652 98.680218) + (xy 208.702851 98.7067) (xy 208.702856 98.7067) (xy 208.872149 98.7067) (xy 209.039347 98.680218) + (xy 209.200349 98.627905) (xy 209.351185 98.55105) (xy 209.488141 98.451546) (xy 209.607846 98.331841) + (xy 209.70735 98.194885) (xy 209.784205 98.044049) (xy 209.836518 97.883047) (xy 209.846383 97.820763) + (xy 209.863 97.715849) (xy 209.863 97.54655) (xy 209.837428 97.385098) (xy 209.846382 97.315805) + (xy 209.891379 97.262353) (xy 209.95813 97.241713) (xy 209.959901 97.2417) (xy 210.198444 97.2417) + (xy 210.198451 97.2417) (xy 210.477942 97.204904) (xy 210.750239 97.131942) (xy 211.010683 97.024063) + (xy 211.254817 96.883112) (xy 211.478465 96.7115) (xy 211.6778 96.512165) (xy 211.745492 96.423946) + (xy 211.80192 96.382744) (xy 211.871666 96.378589) (xy 211.932586 96.412801) (xy 211.965339 96.474518) + (xy 211.959526 96.544146) (xy 211.951255 96.561433) (xy 211.895183 96.658551) (xy 211.895175 96.658568) + (xy 211.785097 96.924321) (xy 211.710646 97.202176) (xy 211.673101 97.487361) (xy 211.6731 97.487377) + (xy 211.6731 97.775022) (xy 211.673101 97.775038) (xy 211.710646 98.060223) (xy 211.785097 98.338078) + (xy 211.895175 98.603831) (xy 211.895183 98.603848) (xy 212.039004 98.852951) (xy 212.039015 98.852967) + (xy 212.214121 99.081171) (xy 212.214127 99.081178) (xy 212.417521 99.284572) (xy 212.417528 99.284578) + (xy 212.550807 99.386846) (xy 212.645741 99.459691) (xy 212.645748 99.459695) (xy 212.894851 99.603516) + (xy 212.894856 99.603518) (xy 212.894859 99.60352) (xy 212.894863 99.603521) (xy 212.894868 99.603524) + (xy 212.937477 99.621173) (xy 213.16062 99.713602) (xy 213.438475 99.788053) (xy 213.723671 99.8256) + (xy 213.723678 99.8256) (xy 214.011322 99.8256) (xy 214.011329 99.8256) (xy 214.296525 99.788053) + (xy 214.57438 99.713602) (xy 214.840141 99.60352) (xy 215.089259 99.459691) (xy 215.317473 99.284577) + (xy 215.520877 99.081173) (xy 215.695991 98.852959) (xy 215.83982 98.603841) (xy 215.949902 98.33808) + (xy 216.024353 98.060225) (xy 216.0619 97.775029) (xy 216.0619 97.487371) (xy 216.024353 97.202175) + (xy 215.949902 96.92432) (xy 215.83982 96.658559) (xy 215.839818 96.658556) (xy 215.839816 96.658551) + (xy 215.695995 96.409448) (xy 215.695991 96.409441) (xy 215.592069 96.274007) (xy 215.520878 96.181228) + (xy 215.520872 96.181221) (xy 215.317478 95.977827) (xy 215.317471 95.977821) (xy 215.089267 95.802715) + (xy 215.089265 95.802713) (xy 215.089259 95.802709) (xy 215.089254 95.802706) (xy 215.089251 95.802704) + (xy 214.840148 95.658883) (xy 214.840131 95.658875) (xy 214.574378 95.548797) (xy 214.296523 95.474346) + (xy 214.011338 95.436801) (xy 214.011335 95.4368) (xy 214.011329 95.4368) (xy 213.723671 95.4368) + (xy 213.723665 95.4368) (xy 213.723661 95.436801) (xy 213.438476 95.474346) (xy 213.160621 95.548797) + (xy 212.894868 95.658875) (xy 212.894851 95.658883) (xy 212.645748 95.802704) (xy 212.645732 95.802715) + (xy 212.417528 95.977821) (xy 212.417521 95.977827) (xy 212.214127 96.181221) (xy 212.14293 96.274007) + (xy 212.086501 96.315209) (xy 212.016755 96.319364) (xy 211.955835 96.285151) (xy 211.923083 96.223434) + (xy 211.928896 96.153807) (xy 211.937161 96.136531) (xy 211.990363 96.044383) (xy 212.098242 95.783939) + (xy 212.171204 95.511642) (xy 212.208 95.232151) (xy 212.208 94.950249) (xy 212.171204 94.670758) + (xy 212.098242 94.398461) (xy 212.091342 94.381804) (xy 212.066349 94.321464) (xy 211.990363 94.138017) + (xy 211.990361 94.138014) (xy 211.990359 94.138009) (xy 211.849416 93.89389) (xy 211.849412 93.893883) + (xy 211.6778 93.670235) (xy 211.677798 93.670233) (xy 211.677795 93.670229) (xy 211.47847 93.470904) + (xy 211.453921 93.452067) (xy 211.254817 93.299288) (xy 211.254811 93.299284) (xy 211.254809 93.299283) + (xy 211.01069 93.15834) (xy 211.010679 93.158335) (xy 210.750243 93.050459) (xy 210.477939 92.977495) + (xy 210.198458 92.9407) (xy 210.198451 92.9407) (xy 209.916549 92.9407) (xy 209.916541 92.9407) + (xy 209.63706 92.977495) (xy 209.364756 93.050459) (xy 209.10432 93.158335) (xy 209.104309 93.15834) + (xy 208.86019 93.299283) (xy 208.860184 93.299287) (xy 208.860183 93.299288) (xy 208.798401 93.346695) + (xy 208.636529 93.470904) (xy 208.437204 93.670229) (xy 208.313314 93.831685) (xy 208.279927 93.875197) + (xy 208.265589 93.893882) (xy 208.265583 93.89389) (xy 208.12464 94.138009) (xy 208.124635 94.13802) + (xy 208.016759 94.398456) (xy 207.943795 94.67076) (xy 207.907 94.950241) (xy 207.907 95.232158) + (xy 207.943795 95.511639) (xy 208.016759 95.783943) (xy 208.124635 96.044379) (xy 208.12464 96.04439) + (xy 208.265583 96.288509) (xy 208.265594 96.288525) (xy 208.396338 96.458914) (xy 208.421532 96.524083) + (xy 208.407494 96.592528) (xy 208.35868 96.642517) (xy 208.354258 96.644884) (xy 208.223813 96.71135) + (xy 208.086865 96.810848) (xy 208.08686 96.810852) (xy 207.967152 96.93056) (xy 207.967148 96.930565) + (xy 207.867652 97.067511) (xy 207.790796 97.218346) (xy 207.738481 97.379352) (xy 207.712 97.54655) + (xy 206.7355 97.54655) (xy 206.7355 95.946275) (xy 206.755185 95.879236) (xy 206.807989 95.833481) + (xy 206.811999 95.831734) (xy 206.887179 95.800594) (xy 207.018289 95.712989) (xy 207.129789 95.601489) + (xy 207.217394 95.470379) (xy 207.277737 95.324697) (xy 207.3085 95.170042) (xy 207.3085 95.012358) + (xy 207.3085 95.012355) (xy 207.308499 95.012353) (xy 207.277738 94.85771) (xy 207.277737 94.857703) + (xy 207.277735 94.857698) (xy 207.217397 94.712027) (xy 207.21739 94.712014) (xy 207.129789 94.580911) + (xy 207.129786 94.580907) (xy 207.018292 94.469413) (xy 207.018288 94.46941) (xy 206.887185 94.381809) + (xy 206.887172 94.381802) (xy 206.741501 94.321464) (xy 206.741489 94.321461) (xy 206.586845 94.2907) + (xy 206.586842 94.2907) (xy 206.429158 94.2907) (xy 206.429155 94.2907) (xy 206.27451 94.321461) + (xy 206.274498 94.321464) (xy 206.128827 94.381802) (xy 206.128814 94.381809) (xy 205.997711 94.46941) + (xy 205.997707 94.469413) (xy 205.886213 94.580907) (xy 205.88621 94.580911) (xy 205.798609 94.712014) + (xy 205.798602 94.712027) (xy 205.738264 94.857698) (xy 205.738261 94.85771) (xy 205.7075 95.012353) + (xy 202.3195 95.012353) (xy 202.3195 92.410241) (xy 214.257 92.410241) (xy 214.257 92.692158) (xy 214.293795 92.971639) + (xy 214.366759 93.243943) (xy 214.474635 93.504379) (xy 214.47464 93.50439) (xy 214.615583 93.748509) + (xy 214.615588 93.748517) (xy 214.7872 93.972165) (xy 214.787204 93.97217) (xy 214.986529 94.171495) + (xy 214.986533 94.171498) (xy 214.986535 94.1715) (xy 215.210183 94.343112) (xy 215.21019 94.343116) + (xy 215.454309 94.484059) (xy 215.454314 94.484061) (xy 215.454317 94.484063) (xy 215.714761 94.591942) + (xy 215.987058 94.664904) (xy 216.266549 94.7017) (xy 216.266556 94.7017) (xy 216.548444 94.7017) + (xy 216.548451 94.7017) (xy 216.827942 94.664904) (xy 217.100239 94.591942) (xy 217.360683 94.484063) + (xy 217.604817 94.343112) (xy 217.828465 94.1715) (xy 218.0278 93.972165) (xy 218.199412 93.748517) + (xy 218.340363 93.504383) (xy 218.448242 93.243939) (xy 218.521204 92.971642) (xy 218.558 92.692151) + (xy 218.558 92.410249) (xy 218.521204 92.130758) (xy 218.448242 91.858461) (xy 218.441342 91.841804) + (xy 218.416349 91.781464) (xy 218.340363 91.598017) (xy 218.340361 91.598014) (xy 218.340359 91.598009) + (xy 218.199416 91.35389) (xy 218.199412 91.353883) (xy 218.0278 91.130235) (xy 218.027798 91.130233) + (xy 218.027795 91.130229) (xy 217.82847 90.930904) (xy 217.828465 90.9309) (xy 217.604817 90.759288) + (xy 217.604811 90.759284) (xy 217.604809 90.759283) (xy 217.36069 90.61834) (xy 217.360679 90.618335) + (xy 217.100243 90.510459) (xy 216.827939 90.437495) (xy 216.548458 90.4007) (xy 216.548451 90.4007) + (xy 216.266549 90.4007) (xy 216.266541 90.4007) (xy 215.98706 90.437495) (xy 215.714756 90.510459) + (xy 215.45432 90.618335) (xy 215.454309 90.61834) (xy 215.21019 90.759283) (xy 215.210184 90.759287) + (xy 215.210183 90.759288) (xy 215.174557 90.786625) (xy 214.986529 90.930904) (xy 214.787204 91.130229) + (xy 214.717704 91.220803) (xy 214.626612 91.339517) (xy 214.615589 91.353882) (xy 214.615583 91.35389) + (xy 214.47464 91.598009) (xy 214.474635 91.59802) (xy 214.366759 91.858456) (xy 214.293795 92.13076) + (xy 214.257 92.410241) (xy 202.3195 92.410241) (xy 202.3195 91.746092) (xy 202.339185 91.679053) + (xy 202.355814 91.658415) (xy 207.429917 86.584119) (xy 207.49124 86.550634) (xy 207.5176 86.5478) + (xy 221.704252 86.5478) (xy 221.704253 86.5478) (xy 221.787868 86.513165) (xy 226.869934 81.431098) + (xy 226.889911 81.414895) (xy 226.90141 81.407401) (xy 226.912323 81.403332) (xy 226.973646 81.369847) + (xy 227.071776 81.296387) (xy 227.075148 81.29419) (xy 227.104895 81.28525) (xy 227.133998 81.274396) + (xy 227.138069 81.275281) (xy 227.142062 81.274082) (xy 227.171921 81.282645) (xy 227.202271 81.289247) + (xy 227.207428 81.292828) (xy 227.209224 81.293343) (xy 227.210867 81.295215) (xy 227.224046 81.304366) + (xy 227.29756 81.368067) (xy 227.297563 81.368068) (xy 227.297564 81.368069) (xy 227.427057 81.427208) + (xy 227.428437 81.427838) (xy 227.495476 81.447523) (xy 227.49548 81.447524) (xy 227.637896 81.468) + (xy 231.843259 81.468) (xy 231.910298 81.487685) (xy 231.956053 81.540489) (xy 231.965997 81.609647) + (xy 231.936972 81.673203) (xy 231.930947 81.679673) (xy 230.645632 82.965011) (xy 229.340083 84.270581) + (xy 229.27876 84.304066) (xy 229.252401 84.3069) (xy 224.681247 84.3069) (xy 224.681245 84.306899) + (xy 224.651077 84.3069) (xy 224.590743 84.3069) (xy 224.589225 84.307421) (xy 224.586678 84.308584) + (xy 224.574229 84.31374) (xy 224.559585 84.319807) (xy 224.507132 84.341535) (xy 224.507129 84.341537) + (xy 224.507126 84.341539) (xy 224.483902 84.364765) (xy 224.481066 84.367601) (xy 224.481065 84.367601) + (xy 224.438805 84.409862) (xy 224.438796 84.409871) (xy 219.78078 89.068186) (xy 219.765138 89.083829) + (xy 219.765128 89.083839) (xy 219.765128 89.08384) (xy 219.750128 89.120057) (xy 219.75008 89.120176) + (xy 219.749808 89.120834) (xy 219.7305 89.167447) (xy 219.7305 89.167452) (xy 219.730499 89.167455) + (xy 219.730499 89.169233) (xy 219.730498 89.169236) (xy 219.7305 89.184362) (xy 219.7305 91.696124) + (xy 219.710815 91.763163) (xy 219.658011 91.808918) (xy 219.653953 91.810685) (xy 219.578824 91.841804) + (xy 219.578814 91.841809) (xy 219.447711 91.92941) (xy 219.447707 91.929413) (xy 219.336213 92.040907) + (xy 219.33621 92.040911) (xy 219.248609 92.172014) (xy 219.248602 92.172027) (xy 219.188264 92.317698) + (xy 219.188261 92.31771) (xy 219.1575 92.472353) (xy 219.1575 92.630046) (xy 219.188261 92.784689) + (xy 219.188264 92.784701) (xy 219.248602 92.930372) (xy 219.248609 92.930385) (xy 219.33621 93.061488) + (xy 219.336213 93.061492) (xy 219.447707 93.172986) (xy 219.447711 93.172989) (xy 219.578814 93.26059) + (xy 219.578827 93.260597) (xy 219.674499 93.300225) (xy 219.724503 93.320937) (xy 219.879153 93.351699) + (xy 219.879156 93.3517) (xy 219.879158 93.3517) (xy 220.036843 93.3517) (xy 220.057788 93.347533) + (xy 220.093308 93.340468) (xy 220.162899 93.346695) (xy 220.218077 93.389557) (xy 220.241322 93.455447) + (xy 220.2415 93.462085) (xy 220.2415 97.352105) (xy 220.221815 97.419144) (xy 220.169011 97.464899) + (xy 220.099853 97.474843) (xy 220.036297 97.445818) (xy 219.998523 97.38704) (xy 219.996924 97.381045) + (xy 219.996519 97.379362) (xy 219.996518 97.379353) (xy 219.944205 97.218351) (xy 219.944203 97.218348) + (xy 219.944203 97.218346) (xy 219.900176 97.13194) (xy 219.86735 97.067515) (xy 219.835781 97.024064) + (xy 219.767851 96.930565) (xy 219.767847 96.93056) (xy 219.648139 96.810852) (xy 219.648134 96.810848) + (xy 219.511188 96.711352) (xy 219.511187 96.711351) (xy 219.511185 96.71135) (xy 219.464082 96.68735) + (xy 219.360353 96.634496) (xy 219.199347 96.582181) (xy 219.032149 96.5557) (xy 219.032144 96.5557) + (xy 218.862856 96.5557) (xy 218.862851 96.5557) (xy 218.695652 96.582181) (xy 218.534646 96.634496) + (xy 218.383811 96.711352) (xy 218.246865 96.810848) (xy 218.24686 96.810852) (xy 218.127152 96.93056) + (xy 218.127148 96.930565) (xy 218.027652 97.067511) (xy 217.950796 97.218346) (xy 217.898481 97.379352) + (xy 217.872 97.54655) (xy 217.872 97.715849) (xy 217.898481 97.883047) (xy 217.950796 98.044053) + (xy 218.027652 98.194888) (xy 218.127148 98.331834) (xy 218.127152 98.331839) (xy 218.24686 98.451547) + (xy 218.246865 98.451551) (xy 218.323873 98.5075) (xy 218.383815 98.55105) (xy 218.477141 98.598602) + (xy 218.534646 98.627903) (xy 218.534648 98.627903) (xy 218.534651 98.627905) (xy 218.61885 98.655263) + (xy 218.695652 98.680218) (xy 218.862851 98.7067) (xy 218.862856 98.7067) (xy 219.032149 98.7067) + (xy 219.199347 98.680218) (xy 219.360349 98.627905) (xy 219.511185 98.55105) (xy 219.648141 98.451546) + (xy 219.767846 98.331841) (xy 219.86735 98.194885) (xy 219.944205 98.044049) (xy 219.996518 97.883047) + (xy 219.99652 97.88303) (xy 219.996923 97.881358) (xy 219.997255 97.880779) (xy 219.998024 97.878413) + (xy 219.99852 97.878574) (xy 220.031709 97.820763) (xy 220.093732 97.788593) (xy 220.163301 97.795063) + (xy 220.218329 97.838117) (xy 220.241345 97.904088) (xy 220.2415 97.910294) (xy 220.2415 102.514747) + (xy 220.2415 102.605253) (xy 220.274356 102.684574) (xy 220.276136 102.68887) (xy 227.057685 109.470418) + (xy 227.09117 109.531741) (xy 227.086186 109.601433) (xy 227.044314 109.657366) (xy 226.97885 109.681783) + (xy 226.91702 109.669677) (xy 226.916933 109.66989) (xy 226.915882 109.669454) (xy 226.915168 109.669315) + (xy 226.913188 109.668338) (xy 226.652743 109.560459) (xy 226.380439 109.487495) (xy 226.100958 109.4507) + (xy 226.100951 109.4507) (xy 225.819049 109.4507) (xy 225.819041 109.4507) (xy 225.53956 109.487495) + (xy 225.267256 109.560459) (xy 225.00682 109.668335) (xy 225.006809 109.66834) (xy 224.76269 109.809283) + (xy 224.762684 109.809287) (xy 224.762683 109.809288) (xy 224.715169 109.845747) (xy 224.539029 109.980904) + (xy 224.339704 110.180229) (xy 224.226381 110.327914) (xy 224.179327 110.389237) (xy 224.168089 110.403882) + (xy 224.168083 110.40389) (xy 224.02714 110.648009) (xy 224.027135 110.64802) (xy 223.919259 110.908456) + (xy 223.846295 111.18076) (xy 223.8095 111.460241) (xy 223.8095 111.742158) (xy 223.846295 112.021639) + (xy 223.919259 112.293943) (xy 224.027135 112.554379) (xy 224.02714 112.55439) (xy 224.168083 112.798509) + (xy 224.168088 112.798517) (xy 224.286074 112.952278) (xy 224.339704 113.02217) (xy 224.539029 113.221495) + (xy 224.539033 113.221498) (xy 224.539035 113.2215) (xy 224.762683 113.393112) (xy 224.76269 113.393116) + (xy 225.006809 113.534059) (xy 225.006814 113.534061) (xy 225.006817 113.534063) (xy 225.114834 113.578805) + (xy 225.232486 113.627538) (xy 225.267261 113.641942) (xy 225.539558 113.714904) (xy 225.819049 113.7517) + (xy 225.819056 113.7517) (xy 226.100944 113.7517) (xy 226.100951 113.7517) (xy 226.380442 113.714904) + (xy 226.652739 113.641942) (xy 226.913183 113.534063) (xy 227.157317 113.393112) (xy 227.380965 113.2215) + (xy 227.5803 113.022165) (xy 227.751912 112.798517) (xy 227.892863 112.554383) (xy 228.000742 112.293939) + (xy 228.073704 112.021642) (xy 228.1105 111.742151) (xy 228.1105 111.460249) (xy 228.073704 111.180758) + (xy 228.000742 110.908461) (xy 227.99376 110.891606) (xy 227.961135 110.812841) (xy 227.892863 110.648017) + (xy 227.892862 110.648015) (xy 227.891888 110.646039) (xy 227.891774 110.645388) (xy 227.89131 110.644267) + (xy 227.891561 110.644163) (xy 227.879891 110.577207) (xy 227.907013 110.512816) (xy 227.964641 110.47331) + (xy 228.03448 110.471231) (xy 228.090781 110.503514) (xy 228.744503 111.157236) (xy 228.777988 111.218559) + (xy 228.773004 111.288251) (xy 228.771384 111.292368) (xy 228.740263 111.367503) (xy 228.740261 111.36751) + (xy 228.7095 111.522153) (xy 228.7095 111.679846) (xy 228.740261 111.834489) (xy 228.740264 111.834501) + (xy 228.800602 111.980172) (xy 228.800609 111.980185) (xy 228.88821 112.111288) (xy 228.888213 112.111292) + (xy 228.999707 112.222786) (xy 228.999711 112.222789) (xy 229.130814 112.31039) (xy 229.130827 112.310397) + (xy 229.276498 112.370735) (xy 229.276503 112.370737) (xy 229.431153 112.401499) (xy 229.431156 112.4015) + (xy 229.431158 112.4015) (xy 229.588844 112.4015) (xy 229.588845 112.401499) (xy 229.743497 112.370737) + (xy 229.889179 112.310394) (xy 230.020289 112.222789) (xy 230.131789 112.111289) (xy 230.179532 112.039835) + (xy 230.233142 111.995033) (xy 230.302467 111.986324) (xy 230.365495 112.016479) (xy 230.370314 112.021047) + (xy 234.034181 115.684914) (xy 234.067666 115.746237) (xy 234.0705 115.772595) (xy 234.0705 129.795924) + (xy 234.050815 129.862963) (xy 233.998011 129.908718) (xy 233.993953 129.910485) (xy 233.918824 129.941604) + (xy 233.918814 129.941609) (xy 233.787711 130.02921) (xy 233.787707 130.029213) (xy 233.676213 130.140707) + (xy 233.67621 130.140711) (xy 233.588609 130.271814) (xy 233.588602 130.271827) (xy 233.528264 130.417498) + (xy 233.528261 130.41751) (xy 233.4975 130.572153) (xy 233.4975 130.729846) (xy 233.528261 130.884489) + (xy 233.528264 130.884501) (xy 233.588602 131.030172) (xy 233.588609 131.030185) (xy 233.67621 131.161288) + (xy 233.676213 131.161292) (xy 233.787707 131.272786) (xy 233.787711 131.272789) (xy 233.918814 131.36039) + (xy 233.918827 131.360397) (xy 234.060679 131.419153) (xy 234.064503 131.420737) (xy 234.219153 131.451499) + (xy 234.219156 131.4515) (xy 234.219158 131.4515) (xy 234.376844 131.4515) (xy 234.376845 131.451499) + (xy 234.395658 131.447757) (xy 234.450309 131.436887) (xy 234.5199 131.443114) (xy 234.575077 131.485977) + (xy 234.598322 131.551867) (xy 234.5985 131.558504) (xy 234.5985 135.557872) (xy 234.578815 135.624911) + (xy 234.526011 135.670666) (xy 234.456853 135.68061) (xy 234.393297 135.651585) (xy 234.355523 135.592807) + (xy 234.352027 135.57727) (xy 234.336518 135.479352) (xy 234.291796 135.341713) (xy 234.284205 135.318351) + (xy 234.284203 135.318348) (xy 234.284203 135.318346) (xy 234.240176 135.23194) (xy 234.20735 135.167515) + (xy 234.175781 135.124064) (xy 234.107851 135.030565) (xy 234.107847 135.03056) (xy 233.988139 134.910852) + (xy 233.988134 134.910848) (xy 233.851188 134.811352) (xy 233.851187 134.811351) (xy 233.851185 134.81135) + (xy 233.786109 134.778192) (xy 233.700353 134.734496) (xy 233.539347 134.682181) (xy 233.372149 134.6557) + (xy 233.372144 134.6557) (xy 233.202856 134.6557) (xy 233.202851 134.6557) (xy 233.035652 134.682181) + (xy 232.874646 134.734496) (xy 232.723811 134.811352) (xy 232.586865 134.910848) (xy 232.58686 134.910852) + (xy 232.467152 135.03056) (xy 232.467148 135.030565) (xy 232.367652 135.167511) (xy 232.290796 135.318346) + (xy 232.238481 135.479352) (xy 232.212 135.64655) (xy 232.212 135.815849) (xy 232.238481 135.983047) + (xy 232.290796 136.144053) (xy 232.367652 136.294888) (xy 232.467148 136.431834) (xy 232.467152 136.431839) + (xy 232.58686 136.551547) (xy 232.586865 136.551551) (xy 232.706317 136.638337) (xy 232.723815 136.65105) + (xy 232.787017 136.683253) (xy 232.874646 136.727903) (xy 232.874648 136.727903) (xy 232.874651 136.727905) + (xy 232.96095 136.755945) (xy 233.035652 136.780218) (xy 233.202851 136.8067) (xy 233.202856 136.8067) + (xy 233.372149 136.8067) (xy 233.539347 136.780218) (xy 233.700349 136.727905) (xy 233.851185 136.65105) + (xy 233.988141 136.551546) (xy 234.107846 136.431841) (xy 234.20735 136.294885) (xy 234.284205 136.144049) + (xy 234.336518 135.983047) (xy 234.352027 135.885129) (xy 234.381956 135.821994) (xy 234.441268 135.785063) + (xy 234.51113 135.786061) (xy 234.569363 135.824671) (xy 234.597477 135.888635) (xy 234.5985 135.904527) + (xy 234.5985 140.713038) (xy 234.598498 140.74924) (xy 234.5985 140.749244) (xy 234.5985 140.749253) + (xy 234.600462 140.753991) (xy 234.600463 140.753993) (xy 234.610933 140.779268) (xy 234.610934 140.779276) + (xy 234.610937 140.779276) (xy 234.633128 140.832859) (xy 234.633133 140.832866) (xy 234.660123 140.859856) + (xy 241.369705 147.570184) (xy 241.403187 147.631509) (xy 241.398198 147.7012) (xy 241.356324 147.757131) + (xy 241.290858 147.781545) (xy 241.229576 147.769544) (xy 241.229433 147.76989) (xy 241.22772 147.76918) + (xy 241.227181 147.769075) (xy 241.225687 147.768338) (xy 240.965243 147.660459) (xy 240.692939 147.587495) + (xy 240.413458 147.5507) (xy 240.413451 147.5507) (xy 240.131549 147.5507) (xy 240.131541 147.5507) + (xy 239.85206 147.587495) (xy 239.579756 147.660459) (xy 239.31932 147.768335) (xy 239.319309 147.76834) + (xy 239.07519 147.909283) (xy 239.075182 147.909289) (xy 238.851529 148.080904) (xy 238.652204 148.280229) + (xy 238.480589 148.503882) (xy 238.480583 148.50389) (xy 238.33964 148.748009) (xy 238.339635 148.74802) + (xy 238.231759 149.008456) (xy 238.158795 149.28076) (xy 238.122 149.560241) (xy 238.122 149.842158) + (xy 238.158795 150.121639) (xy 238.231759 150.393943) (xy 238.339635 150.654379) (xy 238.33964 150.65439) + (xy 238.480583 150.898509) (xy 238.480588 150.898517) (xy 238.642887 151.110028) (xy 238.652204 151.12217) + (xy 238.851529 151.321495) (xy 238.851533 151.321498) (xy 238.851535 151.3215) (xy 239.075183 151.493112) + (xy 239.07519 151.493116) (xy 239.319309 151.634059) (xy 239.319314 151.634061) (xy 239.319317 151.634063) + (xy 239.579761 151.741942) (xy 239.852058 151.814904) (xy 240.131549 151.8517) (xy 240.131556 151.8517) + (xy 240.413444 151.8517) (xy 240.413451 151.8517) (xy 240.692942 151.814904) (xy 240.965239 151.741942) + (xy 241.225683 151.634063) (xy 241.469817 151.493112) (xy 241.693465 151.3215) (xy 241.8928 151.122165) + (xy 242.064412 150.898517) (xy 242.196509 150.669717) (xy 242.205359 150.65439) (xy 242.205359 150.654389) + (xy 242.205363 150.654383) (xy 242.313242 150.393939) (xy 242.386204 150.121642) (xy 242.423 149.842151) + (xy 242.423 149.560249) (xy 242.422457 149.556128) (xy 242.41079 149.467503) (xy 242.386204 149.280758) + (xy 242.313242 149.008461) (xy 242.30626 148.991606) (xy 242.227304 148.800987) (xy 242.205363 148.748017) + (xy 242.205362 148.748016) (xy 242.205358 148.748005) (xy 242.204736 148.746743) (xy 242.204663 148.746328) + (xy 242.20381 148.744267) (xy 242.204271 148.744075) (xy 242.192743 148.67791) (xy 242.219869 148.613521) + (xy 242.277499 148.574018) (xy 242.347338 148.571944) (xy 242.403635 148.604228) (xy 243.05648 149.257146) + (xy 243.056528 149.257194) (xy 243.09001 149.318519) (xy 243.085021 149.38821) (xy 243.083403 149.392322) + (xy 243.052264 149.467498) (xy 243.052261 149.46751) (xy 243.0215 149.622153) (xy 243.0215 149.779846) + (xy 243.052261 149.934489) (xy 243.052264 149.934501) (xy 243.112602 150.080172) (xy 243.112609 150.080185) + (xy 243.20021 150.211288) (xy 243.200213 150.211292) (xy 243.311707 150.322786) (xy 243.311711 150.322789) + (xy 243.442814 150.41039) (xy 243.442827 150.410397) (xy 243.588498 150.470735) (xy 243.588503 150.470737) + (xy 243.743153 150.501499) (xy 243.743156 150.5015) (xy 243.743158 150.5015) (xy 243.900844 150.5015) + (xy 243.900845 150.501499) (xy 244.055497 150.470737) (xy 244.201179 150.410394) (xy 244.332289 150.322789) + (xy 244.443789 150.211289) (xy 244.531394 150.080179) (xy 244.591737 149.934497) (xy 244.6225 149.779842) + (xy 244.6225 149.622158) (xy 244.6225 149.622155) (xy 244.622499 149.622153) (xy 244.61056 149.562132) + (xy 244.591737 149.467503) (xy 244.5775 149.433131) (xy 244.531397 149.321827) (xy 244.53139 149.321814) + (xy 244.443789 149.190711) (xy 244.443786 149.190707) (xy 244.332292 149.079213) (xy 244.332288 149.07921) + (xy 244.201185 148.991609) (xy 244.201172 148.991602) (xy 244.055501 148.931264) (xy 244.055489 148.931261) + (xy 243.900845 148.9005) (xy 243.900842 148.9005) (xy 243.743158 148.9005) (xy 243.743155 148.9005) + (xy 243.58851 148.931261) (xy 243.588507 148.931262) (xy 243.588506 148.931262) (xy 243.588503 148.931263) + (xy 243.517954 148.960485) (xy 243.513418 148.962364) (xy 243.443948 148.969832) (xy 243.381469 148.938556) + (xy 243.37828 148.935478) (xy 235.089814 140.646091) (xy 235.056332 140.584766) (xy 235.0535 140.558415) + (xy 235.0535 130.943533) (xy 235.062939 130.89608) (xy 235.067737 130.884497) (xy 235.0985 130.729842) + (xy 235.0985 130.572158) (xy 235.0985 130.572155) (xy 235.098499 130.572153) (xy 235.088044 130.519595) + (xy 235.067737 130.417503) (xy 235.06671 130.415024) (xy 235.007397 130.271827) (xy 235.00739 130.271814) + (xy 234.919789 130.140711) (xy 234.919786 130.140707) (xy 234.889819 130.11074) (xy 234.856334 130.049417) + (xy 234.8535 130.023059) (xy 234.8535 128.768576) (xy 234.873185 128.701537) (xy 234.925989 128.655782) + (xy 234.995147 128.645838) (xy 235.058703 128.674863) (xy 235.065163 128.680877) (xy 239.132456 132.747316) + (xy 239.132457 132.747317) (xy 239.165948 132.808636) (xy 239.160971 132.878328) (xy 239.159347 132.882458) + (xy 239.128263 132.957503) (xy 239.128262 132.957506) (xy 239.128262 132.957507) (xy 239.128261 132.95751) + (xy 239.0975 133.112153) (xy 239.0975 133.269846) (xy 239.128261 133.424489) (xy 239.128264 133.424501) + (xy 239.188602 133.570172) (xy 239.188609 133.570185) (xy 239.27621 133.701288) (xy 239.276213 133.701292) + (xy 239.387707 133.812786) (xy 239.387711 133.812789) (xy 239.518814 133.90039) (xy 239.518818 133.900392) + (xy 239.518821 133.900394) (xy 239.593954 133.931515) (xy 239.648356 133.975354) (xy 239.670421 134.041648) + (xy 239.6705 134.046075) (xy 239.6705 142.716941) (xy 239.670498 142.761241) (xy 239.6705 142.761245) + (xy 239.6705 142.761253) (xy 239.672556 142.766218) (xy 239.672557 142.766219) (xy 239.687706 142.802791) + (xy 239.687707 142.802799) (xy 239.68771 142.802799) (xy 239.68771 142.8028) (xy 239.705128 142.844858) + (xy 239.705129 142.844859) (xy 239.70513 142.844861) (xy 239.705133 142.844866) (xy 239.733687 142.87342) + (xy 239.73369 142.873426) (xy 239.733692 142.873425) (xy 248.656526 151.797196) (xy 248.690008 151.858521) + (xy 248.685019 151.928213) (xy 248.683402 151.932324) (xy 248.652263 152.007503) (xy 248.652261 152.00751) + (xy 248.6215 152.162153) (xy 248.6215 152.319846) (xy 248.652261 152.474489) (xy 248.652264 152.474501) + (xy 248.712602 152.620172) (xy 248.712609 152.620185) (xy 248.80021 152.751288) (xy 248.800213 152.751292) + (xy 248.911707 152.862786) (xy 248.911711 152.862789) (xy 249.042814 152.95039) (xy 249.042818 152.950392) + (xy 249.042821 152.950394) (xy 249.117954 152.981515) (xy 249.172356 153.025354) (xy 249.194421 153.091648) + (xy 249.1945 153.096075) (xy 249.1945 166.383404) (xy 249.174815 166.450443) (xy 249.158181 166.471085) + (xy 245.103762 170.525503) (xy 245.042439 170.558988) (xy 244.972747 170.554004) (xy 244.968629 170.552383) + (xy 244.893501 170.521264) (xy 244.893489 170.521261) (xy 244.738845 170.4905) (xy 244.738842 170.4905) + (xy 244.581158 170.4905) (xy 244.581155 170.4905) (xy 244.42651 170.521261) (xy 244.426498 170.521264) + (xy 244.280827 170.581602) (xy 244.280814 170.581609) (xy 244.149711 170.66921) (xy 244.149707 170.669213) + (xy 244.038213 170.780707) (xy 244.03821 170.780711) (xy 243.950609 170.911814) (xy 243.950602 170.911827) + (xy 243.890264 171.057498) (xy 243.890261 171.05751) (xy 243.8595 171.212153) (xy 243.8595 171.369846) + (xy 243.890261 171.524489) (xy 243.890264 171.524501) (xy 243.950602 171.670172) (xy 243.950609 171.670185) + (xy 244.03821 171.801288) (xy 244.038213 171.801292) (xy 244.149707 171.912786) (xy 244.149711 171.912789) + (xy 244.280814 172.00039) (xy 244.280827 172.000397) (xy 244.397206 172.048602) (xy 244.426503 172.060737) + (xy 244.556434 172.086582) (xy 244.581153 172.091499) (xy 244.581156 172.0915) (xy 244.581158 172.0915) + (xy 244.738844 172.0915) (xy 244.738845 172.091499) (xy 244.893497 172.060737) (xy 245.039179 172.000394) + (xy 245.170289 171.912789) (xy 245.281789 171.801289) (xy 245.369394 171.670179) (xy 245.429737 171.524497) + (xy 245.4605 171.369842) (xy 245.4605 171.212158) (xy 245.4605 171.212155) (xy 245.460499 171.212153) + (xy 245.458699 171.203106) (xy 245.429737 171.057503) (xy 245.398614 170.982365) (xy 245.391146 170.912901) + (xy 245.42242 170.850422) (xy 245.425466 170.847265) (xy 246.079221 170.19351) (xy 246.140542 170.160027) + (xy 246.210234 170.165011) (xy 246.266167 170.206883) (xy 246.290584 170.272347) (xy 246.27848 170.33418) + (xy 246.27869 170.334267) (xy 246.27826 170.335304) (xy 246.27812 170.336021) (xy 246.27714 170.338008) + (xy 246.169259 170.598456) (xy 246.096295 170.87076) (xy 246.0595 171.150241) (xy 246.0595 171.432158) + (xy 246.096295 171.711639) (xy 246.169259 171.983943) (xy 246.277135 172.244379) (xy 246.27714 172.24439) + (xy 246.418083 172.488509) (xy 246.418094 172.488525) (xy 246.548838 172.658914) (xy 246.574032 172.724083) + (xy 246.559994 172.792528) (xy 246.51118 172.842517) (xy 246.506758 172.844884) (xy 246.376313 172.91135) + (xy 246.239365 173.010848) (xy 246.23936 173.010852) (xy 246.119652 173.13056) (xy 246.119648 173.130565) + (xy 246.020152 173.267511) (xy 245.943296 173.418346) (xy 245.890981 173.579352) (xy 245.8645 173.74655) + (xy 245.8645 173.915849) (xy 245.890981 174.083047) (xy 245.943296 174.244053) (xy 246.020152 174.394888) + (xy 246.119648 174.531834) (xy 246.119652 174.531839) (xy 246.23936 174.651547) (xy 246.239365 174.651551) + (xy 246.304481 174.69886) (xy 246.376315 174.75105) (xy 246.472425 174.80002) (xy 246.527146 174.827903) + (xy 246.527148 174.827903) (xy 246.527151 174.827905) (xy 246.61345 174.855945) (xy 246.688152 174.880218) + (xy 246.855351 174.9067) (xy 246.855356 174.9067) (xy 247.024649 174.9067) (xy 247.191847 174.880218) + (xy 247.352849 174.827905) (xy 247.503685 174.75105) (xy 247.640641 174.651546) (xy 247.760346 174.531841) + (xy 247.85985 174.394885) (xy 247.936705 174.244049) (xy 247.989018 174.083047) (xy 247.996131 174.038138) + (xy 248.0155 173.915849) (xy 248.0155 173.74655) (xy 247.989928 173.585098) (xy 247.998882 173.515805) + (xy 248.043879 173.462353) (xy 248.11063 173.441713) (xy 248.112401 173.4417) (xy 248.350944 173.4417) + (xy 248.350951 173.4417) (xy 248.630442 173.404904) (xy 248.902739 173.331942) (xy 249.163183 173.224063) + (xy 249.407317 173.083112) (xy 249.630965 172.9115) (xy 249.8303 172.712165) (xy 249.897992 172.623946) + (xy 249.95442 172.582744) (xy 250.024166 172.578589) (xy 250.085086 172.612801) (xy 250.117839 172.674518) + (xy 250.112026 172.744146) (xy 250.103755 172.761433) (xy 250.047683 172.858551) (xy 250.047675 172.858568) + (xy 249.937597 173.124321) (xy 249.863146 173.402176) (xy 249.825601 173.687361) (xy 249.8256 173.687377) + (xy 249.8256 173.975022) (xy 249.825601 173.975038) (xy 249.863146 174.260223) (xy 249.937597 174.538078) + (xy 250.047675 174.803831) (xy 250.047683 174.803848) (xy 250.191504 175.052951) (xy 250.191515 175.052967) + (xy 250.366621 175.281171) (xy 250.366627 175.281178) (xy 250.570021 175.484572) (xy 250.570028 175.484578) + (xy 250.657732 175.551875) (xy 250.798241 175.659691) (xy 250.798248 175.659695) (xy 251.047351 175.803516) + (xy 251.047356 175.803518) (xy 251.047359 175.80352) (xy 251.047363 175.803521) (xy 251.047368 175.803524) + (xy 251.152723 175.847163) (xy 251.31312 175.913602) (xy 251.590975 175.988053) (xy 251.876171 176.0256) + (xy 251.876178 176.0256) (xy 252.163822 176.0256) (xy 252.163829 176.0256) (xy 252.449025 175.988053) + (xy 252.72688 175.913602) (xy 252.992641 175.80352) (xy 253.241759 175.659691) (xy 253.469973 175.484577) + (xy 253.673377 175.281173) (xy 253.848491 175.052959) (xy 253.99232 174.803841) (xy 254.102402 174.53808) + (xy 254.176853 174.260225) (xy 254.2144 173.975029) (xy 254.2144 173.74655) (xy 256.0245 173.74655) + (xy 256.0245 173.915849) (xy 256.050981 174.083047) (xy 256.103296 174.244053) (xy 256.180152 174.394888) + (xy 256.279648 174.531834) (xy 256.279652 174.531839) (xy 256.39936 174.651547) (xy 256.399365 174.651551) + (xy 256.464481 174.69886) (xy 256.536315 174.75105) (xy 256.632425 174.80002) (xy 256.687146 174.827903) + (xy 256.687148 174.827903) (xy 256.687151 174.827905) (xy 256.77345 174.855945) (xy 256.848152 174.880218) + (xy 257.015351 174.9067) (xy 257.015356 174.9067) (xy 257.184649 174.9067) (xy 257.351847 174.880218) + (xy 257.512849 174.827905) (xy 257.663685 174.75105) (xy 257.800641 174.651546) (xy 257.920346 174.531841) + (xy 258.01985 174.394885) (xy 258.096705 174.244049) (xy 258.149018 174.083047) (xy 258.156131 174.038138) + (xy 258.1755 173.915849) (xy 258.1755 173.74655) (xy 258.149018 173.579352) (xy 258.124745 173.50465) + (xy 258.096705 173.418351) (xy 258.096703 173.418348) (xy 258.096703 173.418346) (xy 258.031952 173.291267) + (xy 258.01985 173.267515) (xy 257.988281 173.224064) (xy 257.920351 173.130565) (xy 257.920347 173.13056) + (xy 257.800639 173.010852) (xy 257.800634 173.010848) (xy 257.663688 172.911352) (xy 257.663687 172.911351) + (xy 257.663685 172.91135) (xy 257.616002 172.887054) (xy 257.512853 172.834496) (xy 257.351847 172.782181) + (xy 257.184649 172.7557) (xy 257.184644 172.7557) (xy 257.015356 172.7557) (xy 257.015351 172.7557) + (xy 256.848152 172.782181) (xy 256.687146 172.834496) (xy 256.536311 172.911352) (xy 256.399365 173.010848) + (xy 256.39936 173.010852) (xy 256.279652 173.13056) (xy 256.279648 173.130565) (xy 256.180152 173.267511) + (xy 256.103296 173.418346) (xy 256.050981 173.579352) (xy 256.0245 173.74655) (xy 254.2144 173.74655) + (xy 254.2144 173.687371) (xy 254.176853 173.402175) (xy 254.102402 173.12432) (xy 254.015492 172.9145) + (xy 253.992324 172.858568) (xy 253.992316 172.858551) (xy 253.848495 172.609448) (xy 253.848491 172.609441) + (xy 253.74124 172.469668) (xy 253.673378 172.381228) (xy 253.673372 172.381221) (xy 253.469978 172.177827) + (xy 253.469971 172.177821) (xy 253.241767 172.002715) (xy 253.241765 172.002713) (xy 253.241759 172.002709) + (xy 253.241754 172.002706) (xy 253.241751 172.002704) (xy 252.992648 171.858883) (xy 252.992631 171.858875) + (xy 252.726878 171.748797) (xy 252.449023 171.674346) (xy 252.163838 171.636801) (xy 252.163835 171.6368) + (xy 252.163829 171.6368) (xy 251.876171 171.6368) (xy 251.876165 171.6368) (xy 251.876161 171.636801) + (xy 251.590976 171.674346) (xy 251.313121 171.748797) (xy 251.047368 171.858875) (xy 251.047351 171.858883) + (xy 250.798248 172.002704) (xy 250.798232 172.002715) (xy 250.570028 172.177821) (xy 250.570021 172.177827) + (xy 250.366627 172.381221) (xy 250.29543 172.474007) (xy 250.239001 172.515209) (xy 250.169255 172.519364) + (xy 250.108335 172.485151) (xy 250.075583 172.423434) (xy 250.081396 172.353807) (xy 250.089661 172.336531) + (xy 250.142863 172.244383) (xy 250.250742 171.983939) (xy 250.323704 171.711642) (xy 250.3605 171.432151) + (xy 250.3605 171.150249) (xy 250.35923 171.140606) (xy 250.34237 171.012538) (xy 250.323704 170.870758) + (xy 250.250742 170.598461) (xy 250.24376 170.581606) (xy 250.218765 170.521261) (xy 250.142863 170.338017) + (xy 250.142861 170.338014) (xy 250.142859 170.338009) (xy 250.001916 170.09389) (xy 250.001912 170.093883) + (xy 249.8303 169.870235) (xy 249.830298 169.870233) (xy 249.830295 169.870229) (xy 249.63097 169.670904) + (xy 249.605109 169.65106) (xy 249.407317 169.499288) (xy 249.407311 169.499284) (xy 249.407309 169.499283) + (xy 249.16319 169.35834) (xy 249.163179 169.358335) (xy 248.902743 169.250459) (xy 248.630439 169.177495) + (xy 248.350958 169.1407) (xy 248.350951 169.1407) (xy 248.069049 169.1407) (xy 248.069041 169.1407) + (xy 247.78956 169.177495) (xy 247.517256 169.250459) (xy 247.256811 169.358338) (xy 247.25483 169.359316) + (xy 247.254178 169.359429) (xy 247.253067 169.35989) (xy 247.252963 169.359641) (xy 247.185997 169.371308) + (xy 247.121608 169.344182) (xy 247.082106 169.28655) (xy 247.080033 169.216711) (xy 247.112311 169.16042) + (xy 247.662491 168.610241) (xy 252.4095 168.610241) (xy 252.4095 168.892158) (xy 252.446295 169.171639) + (xy 252.519259 169.443943) (xy 252.627135 169.704379) (xy 252.62714 169.70439) (xy 252.768083 169.948509) + (xy 252.768088 169.948517) (xy 252.930386 170.160027) (xy 252.939704 170.17217) (xy 253.139029 170.371495) + (xy 253.139033 170.371498) (xy 253.139035 170.3715) (xy 253.362683 170.543112) (xy 253.36269 170.543116) + (xy 253.606809 170.684059) (xy 253.606814 170.684061) (xy 253.606817 170.684063) (xy 253.867261 170.791942) + (xy 254.139558 170.864904) (xy 254.419049 170.9017) (xy 254.419056 170.9017) (xy 254.700944 170.9017) + (xy 254.700951 170.9017) (xy 254.980442 170.864904) (xy 255.252739 170.791942) (xy 255.513183 170.684063) + (xy 255.757317 170.543112) (xy 255.980965 170.3715) (xy 256.1803 170.172165) (xy 256.351912 169.948517) + (xy 256.492863 169.704383) (xy 256.600742 169.443939) (xy 256.673704 169.171642) (xy 256.7105 168.892151) + (xy 256.7105 168.610249) (xy 256.70923 168.600606) (xy 256.69829 168.517503) (xy 256.673704 168.330758) + (xy 256.600742 168.058461) (xy 256.59376 168.041606) (xy 256.568765 167.981261) (xy 256.492863 167.798017) + (xy 256.492861 167.798014) (xy 256.492859 167.798009) (xy 256.351916 167.55389) (xy 256.351912 167.553883) + (xy 256.1803 167.330235) (xy 256.180298 167.330233) (xy 256.180295 167.330229) (xy 255.98097 167.130904) + (xy 255.980965 167.1309) (xy 255.757317 166.959288) (xy 255.757311 166.959284) (xy 255.757309 166.959283) + (xy 255.51319 166.81834) (xy 255.513179 166.818335) (xy 255.252743 166.710459) (xy 254.980439 166.637495) + (xy 254.700958 166.6007) (xy 254.700951 166.6007) (xy 254.419049 166.6007) (xy 254.419041 166.6007) + (xy 254.13956 166.637495) (xy 253.867256 166.710459) (xy 253.60682 166.818335) (xy 253.606809 166.81834) + (xy 253.36269 166.959283) (xy 253.362682 166.959289) (xy 253.139029 167.130904) (xy 252.939704 167.330229) + (xy 252.893901 167.389921) (xy 252.779112 167.539517) (xy 252.768089 167.553882) (xy 252.768083 167.55389) + (xy 252.62714 167.798009) (xy 252.627135 167.79802) (xy 252.519259 168.058456) (xy 252.446295 168.33076) + (xy 252.4095 168.610241) (xy 247.662491 168.610241) (xy 249.614866 166.657868) (xy 249.614866 166.657866) + (xy 249.614868 166.657865) (xy 249.638545 166.6007) (xy 249.6495 166.574253) (xy 249.6495 166.483747) + (xy 249.6495 162.227453) (xy 253.8421 162.227453) (xy 253.8421 162.385146) (xy 253.872861 162.539789) + (xy 253.872864 162.539801) (xy 253.933202 162.685472) (xy 253.933209 162.685485) (xy 254.02081 162.816588) + (xy 254.020813 162.816592) (xy 254.132307 162.928086) (xy 254.132311 162.928089) (xy 254.263414 163.01569) + (xy 254.263427 163.015697) (xy 254.351405 163.052138) (xy 254.409103 163.076037) (xy 254.563753 163.106799) + (xy 254.563756 163.1068) (xy 254.563758 163.1068) (xy 254.721444 163.1068) (xy 254.721445 163.106799) + (xy 254.876097 163.076037) (xy 255.01443 163.018738) (xy 255.021772 163.015697) (xy 255.021772 163.015696) + (xy 255.021779 163.015694) (xy 255.152889 162.928089) (xy 255.264389 162.816589) (xy 255.351994 162.685479) + (xy 255.36189 162.661589) (xy 255.412335 162.539801) (xy 255.412337 162.539797) (xy 255.4431 162.385142) + (xy 255.4431 162.227458) (xy 255.4431 162.227455) (xy 255.443099 162.227453) (xy 255.438345 162.203553) + (xy 255.412337 162.072803) (xy 255.412193 162.072456) (xy 255.351997 161.927127) (xy 255.35199 161.927114) + (xy 255.264389 161.796011) (xy 255.264386 161.796007) (xy 255.193333 161.724954) (xy 255.159848 161.663631) + (xy 255.164832 161.593939) (xy 255.206704 161.538006) (xy 255.272168 161.513589) (xy 255.305556 161.515726) + (xy 255.348907 161.524479) (xy 255.351845 161.524529) (xy 255.531484 161.52762) (xy 255.711612 161.497658) + (xy 255.762501 161.479263) (xy 255.883336 161.435585) (xy 255.883337 161.435583) (xy 255.88334 161.435583) + (xy 255.898375 161.42682) (xy 255.905059 161.422935) (xy 255.90535 161.422857) (xy 255.933233 161.40656) + (xy 255.933351 161.406492) (xy 255.936568 161.405701) (xy 255.995662 161.389699) (xy 257.476792 161.389699) + (xy 257.476914 161.389706) (xy 257.485005 161.389705) (xy 257.485008 161.389706) (xy 257.517142 161.389702) + (xy 257.579704 161.406634) (xy 257.60753 161.422891) (xy 257.607532 161.422891) (xy 257.61368 161.426483) + (xy 257.615335 161.427308) (xy 257.629478 161.43555) (xy 257.8012 161.497621) (xy 257.981321 161.527582) + (xy 258.160998 161.52449) (xy 258.163891 161.524441) (xy 258.342866 161.488305) (xy 258.342869 161.488303) + (xy 258.342874 161.488303) (xy 258.51236 161.420362) (xy 258.666746 161.322863) (xy 258.685831 161.305251) + (xy 258.80093 161.19903) (xy 258.800932 161.199028) (xy 258.81412 161.181443) (xy 258.910485 161.052947) + (xy 258.991784 160.889448) (xy 259.042142 160.713933) (xy 259.059897 160.532203) (xy 259.04446 160.35026) + (xy 259.044458 160.350254) (xy 259.025443 160.280646) (xy 258.996343 160.174118) (xy 258.988583 160.157949) + (xy 258.985496 160.151504) (xy 258.985448 160.151246) (xy 258.969071 160.117219) (xy 258.968943 160.11643) + (xy 258.956902 160.063631) (xy 258.956902 160.063622) (xy 258.956907 160.026208) (xy 258.956906 160.026204) + (xy 258.956907 160.018198) (xy 258.956899 160.01806) (xy 258.956899 158.714778) (xy 258.959553 158.703111) + (xy 258.958519 158.694799) (xy 258.969102 158.661136) (xy 258.975467 158.647873) (xy 258.975545 158.647787) + (xy 258.975516 158.647773) (xy 258.975943 158.646885) (xy 258.985474 158.627074) (xy 258.985474 158.627068) + (xy 258.988855 158.620042) (xy 258.989017 158.619638) (xy 258.996383 158.604291) (xy 259.025922 158.496153) + (xy 260.85075 158.496153) (xy 260.85075 158.653846) (xy 260.881511 158.808489) (xy 260.881514 158.808501) + (xy 260.941852 158.954172) (xy 260.941859 158.954185) (xy 261.02946 159.085288) (xy 261.029463 159.085292) + (xy 261.140957 159.196786) (xy 261.140961 159.196789) (xy 261.272064 159.28439) (xy 261.272077 159.284397) + (xy 261.403178 159.3387) (xy 261.417753 159.344737) (xy 261.572403 159.375499) (xy 261.572406 159.3755) + (xy 261.572408 159.3755) (xy 261.730094 159.3755) (xy 261.730095 159.375499) (xy 261.884747 159.344737) + (xy 261.997416 159.298067) (xy 262.030422 159.284397) (xy 262.030422 159.284396) (xy 262.030429 159.284394) + (xy 262.161539 159.196789) (xy 262.273039 159.085289) (xy 262.360644 158.954179) (xy 262.420987 158.808497) + (xy 262.45175 158.653842) (xy 262.45175 158.496158) (xy 262.45175 158.496155) (xy 262.451749 158.496153) + (xy 262.447438 158.474482) (xy 262.420987 158.341503) (xy 262.419002 158.336711) (xy 262.360647 158.195827) + (xy 262.36064 158.195814) (xy 262.273039 158.064711) (xy 262.273036 158.064707) (xy 262.161542 157.953213) + (xy 262.161538 157.95321) (xy 262.030435 157.865609) (xy 262.030422 157.865602) (xy 261.884751 157.805264) + (xy 261.884739 157.805261) (xy 261.730095 157.7745) (xy 261.730092 157.7745) (xy 261.572408 157.7745) + (xy 261.572405 157.7745) (xy 261.41776 157.805261) (xy 261.417748 157.805264) (xy 261.272077 157.865602) + (xy 261.272064 157.865609) (xy 261.140961 157.95321) (xy 261.140957 157.953213) (xy 261.029463 158.064707) + (xy 261.02946 158.064711) (xy 260.941859 158.195814) (xy 260.941852 158.195827) (xy 260.881514 158.341498) + (xy 260.881511 158.34151) (xy 260.85075 158.496153) (xy 259.025922 158.496153) (xy 259.0445 158.428142) + (xy 259.059937 158.246193) (xy 259.042181 158.064455) (xy 258.99182 157.888934) (xy 258.910518 157.72543) + (xy 258.824052 157.610134) (xy 258.800962 157.579345) (xy 258.788774 157.568097) (xy 258.666769 157.455504) + (xy 258.666766 157.455502) (xy 258.666765 157.455501) (xy 258.666762 157.455499) (xy 258.512377 157.358001) + (xy 258.342887 157.290058) (xy 258.342877 157.290056) (xy 258.163892 157.253918) (xy 258.163899 157.253918) + (xy 257.992194 157.250965) (xy 257.981318 157.250778) (xy 257.981317 157.250778) (xy 257.981314 157.250778) + (xy 257.801197 157.280738) (xy 257.801184 157.280741) (xy 257.629463 157.342813) (xy 257.614948 157.35127) + (xy 257.614863 157.351319) (xy 257.607776 157.35544) (xy 257.60753 157.355508) (xy 257.579738 157.371744) + (xy 257.57949 157.371889) (xy 257.576763 157.372559) (xy 257.517146 157.388696) (xy 257.476801 157.388693) + (xy 257.476697 157.3887) (xy 256.035996 157.3887) (xy 256.027814 157.388698) (xy 256.027792 157.388693) + (xy 255.997865 157.388695) (xy 255.995628 157.388695) (xy 255.995346 157.388612) (xy 255.933093 157.371762) + (xy 255.905271 157.355508) (xy 255.899205 157.351964) (xy 255.897507 157.351117) (xy 255.890157 157.346834) + (xy 255.883321 157.34285) (xy 255.711597 157.280778) (xy 255.711591 157.280777) (xy 255.531481 157.250819) + (xy 255.531478 157.250819) (xy 255.522939 157.250965) (xy 255.348907 157.253959) (xy 255.169934 157.290094) + (xy 255.169923 157.290097) (xy 255.000442 157.358037) (xy 255.000441 157.358037) (xy 254.846061 157.455532) + (xy 254.846058 157.455534) (xy 254.711867 157.579373) (xy 254.602315 157.725454) (xy 254.52102 157.888944) + (xy 254.521019 157.888947) (xy 254.521018 157.88895) (xy 254.513371 157.915602) (xy 254.470658 158.064465) + (xy 254.452941 158.245814) (xy 254.452904 158.246193) (xy 254.454805 158.268602) (xy 254.466673 158.408495) + (xy 254.46834 158.428135) (xy 254.500056 158.544239) (xy 254.516456 158.604278) (xy 254.51646 158.604288) + (xy 254.523698 158.61937) (xy 254.52374 158.619456) (xy 254.527323 158.626938) (xy 254.527381 158.62724) + (xy 254.543699 158.661129) (xy 254.543736 158.661206) (xy 254.543881 158.6621) (xy 254.555901 158.714769) + (xy 254.555901 160.063622) (xy 254.543707 160.117245) (xy 254.543119 160.118471) (xy 254.543039 160.118638) + (xy 254.524166 160.157837) (xy 254.523842 160.158639) (xy 254.516418 160.17411) (xy 254.468301 160.350254) + (xy 254.468301 160.350256) (xy 254.452865 160.532206) (xy 254.469065 160.698023) (xy 254.470621 160.713942) + (xy 254.4884 160.775906) (xy 254.52098 160.889461) (xy 254.60228 161.052963) (xy 254.602281 161.052965) + (xy 254.602283 161.052968) (xy 254.648357 161.114404) (xy 254.711838 161.199052) (xy 254.711839 161.199053) + (xy 254.71184 161.199054) (xy 254.81112 161.290676) (xy 254.847035 161.350606) (xy 254.844849 161.420441) + (xy 254.805253 161.478008) (xy 254.74082 161.50503) (xy 254.727023 161.5058) (xy 254.563755 161.5058) + (xy 254.40911 161.536561) (xy 254.409098 161.536564) (xy 254.263427 161.596902) (xy 254.263414 161.596909) + (xy 254.132311 161.68451) (xy 254.132307 161.684513) (xy 254.020813 161.796007) (xy 254.02081 161.796011) + (xy 253.933209 161.927114) (xy 253.933202 161.927127) (xy 253.872864 162.072798) (xy 253.872861 162.07281) + (xy 253.8421 162.227453) (xy 249.6495 162.227453) (xy 249.6495 154.69655) (xy 250.627 154.69655) + (xy 250.627 154.865849) (xy 250.653481 155.033047) (xy 250.705796 155.194053) (xy 250.782652 155.344888) + (xy 250.882148 155.481834) (xy 250.882152 155.481839) (xy 251.00186 155.601547) (xy 251.001865 155.601551) + (xy 251.121317 155.688337) (xy 251.138815 155.70105) (xy 251.22409 155.7445) (xy 251.289646 155.777903) + (xy 251.289648 155.777903) (xy 251.289651 155.777905) (xy 251.37595 155.805945) (xy 251.450652 155.830218) + (xy 251.617851 155.8567) (xy 251.617856 155.8567) (xy 251.787149 155.8567) (xy 251.954347 155.830218) + (xy 251.997277 155.816269) (xy 252.115349 155.777905) (xy 252.266185 155.70105) (xy 252.403141 155.601546) + (xy 252.522846 155.481841) (xy 252.62235 155.344885) (xy 252.699205 155.194049) (xy 252.751518 155.033047) + (xy 252.778 154.865849) (xy 252.778 154.69655) (xy 252.752428 154.535098) (xy 252.761382 154.465805) + (xy 252.806379 154.412353) (xy 252.87313 154.391713) (xy 252.874901 154.3917) (xy 253.113444 154.3917) + (xy 253.113451 154.3917) (xy 253.392942 154.354904) (xy 253.665239 154.281942) (xy 253.925683 154.174063) + (xy 254.169817 154.033112) (xy 254.393465 153.8615) (xy 254.5928 153.662165) (xy 254.660492 153.573946) + (xy 254.71692 153.532744) (xy 254.786666 153.528589) (xy 254.847586 153.562801) (xy 254.880339 153.624518) + (xy 254.874526 153.694146) (xy 254.866255 153.711433) (xy 254.810183 153.808551) (xy 254.810175 153.808568) + (xy 254.700097 154.074321) (xy 254.625646 154.352176) (xy 254.588101 154.637361) (xy 254.5881 154.637377) + (xy 254.5881 154.925022) (xy 254.588101 154.925038) (xy 254.625646 155.210223) (xy 254.700097 155.488078) + (xy 254.810175 155.753831) (xy 254.810183 155.753848) (xy 254.954004 156.002951) (xy 254.954015 156.002967) + (xy 255.129121 156.231171) (xy 255.129127 156.231178) (xy 255.332521 156.434572) (xy 255.332527 156.434577) + (xy 255.560741 156.609691) (xy 255.560748 156.609695) (xy 255.809851 156.753516) (xy 255.809856 156.753518) + (xy 255.809859 156.75352) (xy 255.809863 156.753521) (xy 255.809868 156.753524) (xy 255.823108 156.759008) + (xy 256.07562 156.863602) (xy 256.353475 156.938053) (xy 256.638671 156.9756) (xy 256.638678 156.9756) + (xy 256.926322 156.9756) (xy 256.926329 156.9756) (xy 257.211525 156.938053) (xy 257.48938 156.863602) + (xy 257.755141 156.75352) (xy 258.004259 156.609691) (xy 258.232473 156.434577) (xy 258.435877 156.231173) + (xy 258.610991 156.002959) (xy 258.75482 155.753841) (xy 258.864902 155.48808) (xy 258.939353 155.210225) + (xy 258.9769 154.925029) (xy 258.9769 154.637371) (xy 258.939353 154.352175) (xy 258.864902 154.07432) + (xy 258.75482 153.808559) (xy 258.754818 153.808556) (xy 258.754816 153.808551) (xy 258.610995 153.559448) + (xy 258.610991 153.559441) (xy 258.507069 153.424007) (xy 258.435878 153.331228) (xy 258.435872 153.331221) + (xy 258.232478 153.127827) (xy 258.232471 153.127821) (xy 258.004267 152.952715) (xy 258.004265 152.952713) + (xy 258.004259 152.952709) (xy 258.004254 152.952706) (xy 258.004251 152.952704) (xy 257.755148 152.808883) + (xy 257.755131 152.808875) (xy 257.489378 152.698797) (xy 257.211523 152.624346) (xy 256.926338 152.586801) + (xy 256.926335 152.5868) (xy 256.926329 152.5868) (xy 256.638671 152.5868) (xy 256.638665 152.5868) + (xy 256.638661 152.586801) (xy 256.353476 152.624346) (xy 256.075621 152.698797) (xy 255.809868 152.808875) + (xy 255.809851 152.808883) (xy 255.560748 152.952704) (xy 255.560732 152.952715) (xy 255.332528 153.127821) + (xy 255.332521 153.127827) (xy 255.129127 153.331221) (xy 255.05793 153.424007) (xy 255.001501 153.465209) + (xy 254.931755 153.469364) (xy 254.870835 153.435151) (xy 254.838083 153.373434) (xy 254.843896 153.303807) + (xy 254.852161 153.286531) (xy 254.905363 153.194383) (xy 255.013242 152.933939) (xy 255.086204 152.661642) + (xy 255.123 152.382151) (xy 255.123 152.100249) (xy 255.086204 151.820758) (xy 255.013242 151.548461) + (xy 255.00626 151.531606) (xy 254.981265 151.471261) (xy 254.905363 151.288017) (xy 254.90536 151.288011) + (xy 254.905359 151.288009) (xy 254.764416 151.04389) (xy 254.764412 151.043883) (xy 254.5928 150.820235) + (xy 254.592798 150.820233) (xy 254.592795 150.820229) (xy 254.39347 150.620904) (xy 254.368661 150.601867) + (xy 254.169817 150.449288) (xy 254.169811 150.449284) (xy 254.169809 150.449283) (xy 253.92569 150.30834) + (xy 253.925679 150.308335) (xy 253.665243 150.200459) (xy 253.392939 150.127495) (xy 253.113458 150.0907) + (xy 253.113451 150.0907) (xy 252.831549 150.0907) (xy 252.831541 150.0907) (xy 252.55206 150.127495) + (xy 252.279756 150.200459) (xy 252.01932 150.308335) (xy 252.019309 150.30834) (xy 251.77519 150.449283) + (xy 251.775182 150.449289) (xy 251.551529 150.620904) (xy 251.352204 150.820229) (xy 251.180589 151.043882) + (xy 251.180583 151.04389) (xy 251.03964 151.288009) (xy 251.039635 151.28802) (xy 250.931759 151.548456) + (xy 250.858795 151.82076) (xy 250.822 152.100241) (xy 250.822 152.382158) (xy 250.858795 152.661639) + (xy 250.931759 152.933943) (xy 251.039635 153.194379) (xy 251.03964 153.19439) (xy 251.180583 153.438509) + (xy 251.180594 153.438525) (xy 251.311338 153.608914) (xy 251.336532 153.674083) (xy 251.322494 153.742528) + (xy 251.27368 153.792517) (xy 251.269258 153.794884) (xy 251.138813 153.86135) (xy 251.001865 153.960848) + (xy 251.00186 153.960852) (xy 250.882152 154.08056) (xy 250.882148 154.080565) (xy 250.782652 154.217511) + (xy 250.705796 154.368346) (xy 250.653481 154.529352) (xy 250.627 154.69655) (xy 249.6495 154.69655) + (xy 249.6495 153.096075) (xy 249.669185 153.029036) (xy 249.721989 152.983281) (xy 249.725999 152.981534) + (xy 249.801179 152.950394) (xy 249.932289 152.862789) (xy 250.043789 152.751289) (xy 250.131394 152.620179) + (xy 250.191737 152.474497) (xy 250.2225 152.319842) (xy 250.2225 152.162158) (xy 250.2225 152.162155) + (xy 250.222499 152.162153) (xy 250.191737 152.007503) (xy 250.164278 151.941211) (xy 250.131397 151.861827) + (xy 250.13139 151.861814) (xy 250.043789 151.730711) (xy 250.043786 151.730707) (xy 249.932292 151.619213) + (xy 249.932288 151.61921) (xy 249.801185 151.531609) (xy 249.801172 151.531602) (xy 249.655501 151.471264) + (xy 249.655489 151.471261) (xy 249.500845 151.4405) (xy 249.500842 151.4405) (xy 249.343158 151.4405) + (xy 249.343155 151.4405) (xy 249.18851 151.471261) (xy 249.188502 151.471263) (xy 249.113413 151.502365) + (xy 249.043943 151.509832) (xy 248.981465 151.478556) (xy 248.978276 151.47548) (xy 248.975833 151.473037) + (xy 247.749424 150.246499) (xy 247.146856 149.643867) (xy 247.063239 149.560241) (xy 257.172 149.560241) + (xy 257.172 149.842158) (xy 257.208795 150.121639) (xy 257.281759 150.393943) (xy 257.389635 150.654379) + (xy 257.38964 150.65439) (xy 257.530583 150.898509) (xy 257.530588 150.898517) (xy 257.692887 151.110028) + (xy 257.702204 151.12217) (xy 257.901529 151.321495) (xy 257.901533 151.321498) (xy 257.901535 151.3215) + (xy 258.125183 151.493112) (xy 258.12519 151.493116) (xy 258.369309 151.634059) (xy 258.369314 151.634061) + (xy 258.369317 151.634063) (xy 258.629761 151.741942) (xy 258.902058 151.814904) (xy 259.181549 151.8517) + (xy 259.181556 151.8517) (xy 259.463444 151.8517) (xy 259.463451 151.8517) (xy 259.742942 151.814904) + (xy 260.015239 151.741942) (xy 260.275683 151.634063) (xy 260.519817 151.493112) (xy 260.743465 151.3215) + (xy 260.9428 151.122165) (xy 261.114412 150.898517) (xy 261.246509 150.669717) (xy 261.255359 150.65439) + (xy 261.255359 150.654389) (xy 261.255363 150.654383) (xy 261.363242 150.393939) (xy 261.436204 150.121642) + (xy 261.473 149.842151) (xy 261.473 149.560249) (xy 261.472457 149.556128) (xy 261.46079 149.467503) + (xy 261.436204 149.280758) (xy 261.363242 149.008461) (xy 261.35626 148.991606) (xy 261.331265 148.931261) + (xy 261.255363 148.748017) (xy 261.255361 148.748014) (xy 261.255359 148.748009) (xy 261.114416 148.50389) + (xy 261.114412 148.503883) (xy 260.9428 148.280235) (xy 260.942798 148.280233) (xy 260.942795 148.280229) + (xy 260.74347 148.080904) (xy 260.743465 148.0809) (xy 260.519817 147.909288) (xy 260.519811 147.909284) + (xy 260.519809 147.909283) (xy 260.27569 147.76834) (xy 260.275679 147.768335) (xy 260.015243 147.660459) + (xy 259.742939 147.587495) (xy 259.463458 147.5507) (xy 259.463451 147.5507) (xy 259.181549 147.5507) + (xy 259.181541 147.5507) (xy 258.90206 147.587495) (xy 258.629756 147.660459) (xy 258.36932 147.768335) + (xy 258.369309 147.76834) (xy 258.12519 147.909283) (xy 258.125182 147.909289) (xy 257.901529 148.080904) + (xy 257.702204 148.280229) (xy 257.530589 148.503882) (xy 257.530583 148.50389) (xy 257.38964 148.748009) + (xy 257.389635 148.74802) (xy 257.281759 149.008456) (xy 257.208795 149.28076) (xy 257.172 149.560241) + (xy 247.063239 149.560241) (xy 240.161814 142.65809) (xy 240.128332 142.596765) (xy 240.1255 142.570413) + (xy 240.1255 141.636806) (xy 244.676365 141.636806) (xy 244.693566 141.812868) (xy 244.694121 141.818542) + (xy 244.708955 141.870242) (xy 244.74448 141.994061) (xy 244.82578 142.157563) (xy 244.825781 142.157565) + (xy 244.825783 142.157568) (xy 244.881641 142.23205) (xy 244.935338 142.303652) (xy 244.935339 142.303653) + (xy 244.93534 142.303654) (xy 245.069532 142.427495) (xy 245.223925 142.524997) (xy 245.337201 142.570405) + (xy 245.393414 142.592939) (xy 245.393415 142.592939) (xy 245.393417 142.59294) (xy 245.572408 142.629079) + (xy 245.572402 142.629079) (xy 245.588722 142.629359) (xy 245.754984 142.63222) (xy 245.935112 142.602258) + (xy 245.990607 142.582198) (xy 246.106836 142.540185) (xy 246.106837 142.540183) (xy 246.10684 142.540183) + (xy 246.121875 142.53142) (xy 246.128559 142.527535) (xy 246.12885 142.527457) (xy 246.156733 142.51116) + (xy 246.156851 142.511092) (xy 246.160068 142.510301) (xy 246.219162 142.494299) (xy 247.700292 142.494299) + (xy 247.700414 142.494306) (xy 247.708505 142.494305) (xy 247.708508 142.494306) (xy 247.740642 142.494302) + (xy 247.803204 142.511234) (xy 247.83103 142.527491) (xy 247.831032 142.527491) (xy 247.83718 142.531083) + (xy 247.838835 142.531908) (xy 247.852978 142.54015) (xy 248.0247 142.602221) (xy 248.204821 142.632182) + (xy 248.384498 142.62909) (xy 248.387391 142.629041) (xy 248.566366 142.592905) (xy 248.566369 142.592903) + (xy 248.566374 142.592903) (xy 248.73586 142.524962) (xy 248.890246 142.427463) (xy 248.918396 142.401485) + (xy 249.02443 142.30363) (xy 249.024432 142.303628) (xy 249.025531 142.302163) (xy 249.133985 142.157547) + (xy 249.215284 141.994048) (xy 249.265642 141.818533) (xy 249.283397 141.636803) (xy 249.26796 141.45486) + (xy 249.267958 141.454854) (xy 249.255271 141.408409) (xy 249.219843 141.278718) (xy 249.212083 141.262549) + (xy 249.208996 141.256104) (xy 249.208948 141.255846) (xy 249.192571 141.221819) (xy 249.192443 141.22103) + (xy 249.180402 141.168231) (xy 249.180406 141.135767) (xy 249.180407 141.130808) (xy 249.180406 141.130804) + (xy 249.180407 141.122798) (xy 249.180399 141.12266) (xy 249.180399 139.819378) (xy 249.183053 139.807712) + (xy 249.182019 139.799399) (xy 249.192603 139.765734) (xy 249.198918 139.752576) (xy 249.198998 139.752487) + (xy 249.198968 139.752473) (xy 249.198969 139.752471) (xy 249.208974 139.731674) (xy 249.208974 139.731668) + (xy 249.212355 139.724642) (xy 249.212517 139.724238) (xy 249.219883 139.708891) (xy 249.268 139.532742) + (xy 249.283437 139.350793) (xy 249.265681 139.169055) (xy 249.21532 138.993534) (xy 249.134018 138.83003) + (xy 249.047627 138.714834) (xy 249.024462 138.683945) (xy 248.967296 138.631189) (xy 248.890269 138.560104) + (xy 248.890266 138.560102) (xy 248.890265 138.560101) (xy 248.890262 138.560099) (xy 248.735877 138.462601) + (xy 248.566387 138.394658) (xy 248.566377 138.394656) (xy 248.387392 138.358518) (xy 248.387399 138.358518) + (xy 248.215694 138.355565) (xy 248.204818 138.355378) (xy 248.204817 138.355378) (xy 248.204814 138.355378) + (xy 248.024697 138.385338) (xy 248.024684 138.385341) (xy 247.852963 138.447413) (xy 247.838448 138.45587) + (xy 247.838363 138.455919) (xy 247.831276 138.46004) (xy 247.83103 138.460108) (xy 247.803238 138.476344) + (xy 247.80299 138.476489) (xy 247.800263 138.477159) (xy 247.740646 138.493296) (xy 247.700301 138.493293) + (xy 247.700197 138.4933) (xy 246.259496 138.4933) (xy 246.251314 138.493298) (xy 246.251292 138.493293) + (xy 246.221365 138.493295) (xy 246.219128 138.493295) (xy 246.218846 138.493212) (xy 246.156593 138.476362) + (xy 246.128771 138.460108) (xy 246.122705 138.456564) (xy 246.121007 138.455717) (xy 246.113657 138.451434) + (xy 246.106821 138.44745) (xy 245.935097 138.385378) (xy 245.935091 138.385377) (xy 245.754981 138.355419) + (xy 245.754978 138.355419) (xy 245.746439 138.355565) (xy 245.572407 138.358559) (xy 245.393434 138.394694) + (xy 245.393423 138.394697) (xy 245.223942 138.462637) (xy 245.223941 138.462637) (xy 245.069561 138.560132) + (xy 245.069558 138.560134) (xy 244.935367 138.683973) (xy 244.825815 138.830054) (xy 244.74452 138.993544) + (xy 244.744519 138.993547) (xy 244.744518 138.99355) (xy 244.730689 139.041747) (xy 244.694158 139.169065) + (xy 244.677311 139.34151) (xy 244.676404 139.350793) (xy 244.678305 139.373202) (xy 244.69018 139.513178) + (xy 244.69184 139.532735) (xy 244.72788 139.664669) (xy 244.739956 139.708878) (xy 244.73996 139.708888) + (xy 244.747198 139.72397) (xy 244.74724 139.724056) (xy 244.750823 139.731538) (xy 244.750881 139.73184) + (xy 244.767236 139.765806) (xy 244.767381 139.7667) (xy 244.779401 139.819369) (xy 244.779401 141.168222) + (xy 244.767207 141.221845) (xy 244.766619 141.223071) (xy 244.766539 141.223238) (xy 244.747666 141.262437) + (xy 244.747342 141.263239) (xy 244.739918 141.27871) (xy 244.691801 141.454854) (xy 244.691801 141.454856) + (xy 244.676365 141.636806) (xy 240.1255 141.636806) (xy 240.1255 135.64655) (xy 241.102 135.64655) + (xy 241.102 135.815849) (xy 241.128481 135.983047) (xy 241.180796 136.144053) (xy 241.257652 136.294888) + (xy 241.357148 136.431834) (xy 241.357152 136.431839) (xy 241.47686 136.551547) (xy 241.476865 136.551551) + (xy 241.596317 136.638337) (xy 241.613815 136.65105) (xy 241.677017 136.683253) (xy 241.764646 136.727903) + (xy 241.764648 136.727903) (xy 241.764651 136.727905) (xy 241.85095 136.755945) (xy 241.925652 136.780218) + (xy 242.092851 136.8067) (xy 242.092856 136.8067) (xy 242.262149 136.8067) (xy 242.429347 136.780218) + (xy 242.590349 136.727905) (xy 242.741185 136.65105) (xy 242.878141 136.551546) (xy 242.997846 136.431841) + (xy 243.09735 136.294885) (xy 243.174205 136.144049) (xy 243.226518 135.983047) (xy 243.253 135.815849) + (xy 243.253 135.64655) (xy 243.227428 135.485098) (xy 243.236382 135.415805) (xy 243.281379 135.362353) + (xy 243.34813 135.341713) (xy 243.349901 135.3417) (xy 243.588444 135.3417) (xy 243.588451 135.3417) + (xy 243.867942 135.304904) (xy 244.140239 135.231942) (xy 244.400683 135.124063) (xy 244.644817 134.983112) + (xy 244.868465 134.8115) (xy 245.0678 134.612165) (xy 245.135492 134.523946) (xy 245.19192 134.482744) + (xy 245.261666 134.478589) (xy 245.322586 134.512801) (xy 245.355339 134.574518) (xy 245.349526 134.644146) + (xy 245.341255 134.661433) (xy 245.285183 134.758551) (xy 245.285175 134.758568) (xy 245.175097 135.024321) + (xy 245.100646 135.302176) (xy 245.063101 135.587361) (xy 245.0631 135.587377) (xy 245.0631 135.875022) + (xy 245.063101 135.875038) (xy 245.100646 136.160223) (xy 245.175097 136.438078) (xy 245.285175 136.703831) + (xy 245.285183 136.703848) (xy 245.429004 136.952951) (xy 245.429015 136.952967) (xy 245.604121 137.181171) + (xy 245.604127 137.181178) (xy 245.807525 137.384576) (xy 245.903761 137.45842) (xy 246.035741 137.559691) + (xy 246.035748 137.559695) (xy 246.284851 137.703516) (xy 246.284856 137.703518) (xy 246.284859 137.70352) + (xy 246.284863 137.703521) (xy 246.284868 137.703524) (xy 246.390223 137.747163) (xy 246.55062 137.813602) + (xy 246.828475 137.888053) (xy 247.113671 137.9256) (xy 247.113678 137.9256) (xy 247.401322 137.9256) + (xy 247.401329 137.9256) (xy 247.686525 137.888053) (xy 247.96438 137.813602) (xy 248.230141 137.70352) + (xy 248.479259 137.559691) (xy 248.620078 137.451636) (xy 248.707475 137.384576) (xy 248.707478 137.384572) + (xy 248.910872 137.181178) (xy 248.910877 137.181173) (xy 249.085991 136.952959) (xy 249.22982 136.703841) + (xy 249.339902 136.43808) (xy 249.414353 136.160225) (xy 249.4519 135.875029) (xy 249.4519 135.64655) + (xy 251.262 135.64655) (xy 251.262 135.815849) (xy 251.288481 135.983047) (xy 251.340796 136.144053) + (xy 251.417652 136.294888) (xy 251.517148 136.431834) (xy 251.517152 136.431839) (xy 251.63686 136.551547) + (xy 251.636865 136.551551) (xy 251.756317 136.638337) (xy 251.773815 136.65105) (xy 251.837017 136.683253) + (xy 251.924646 136.727903) (xy 251.924648 136.727903) (xy 251.924651 136.727905) (xy 252.01095 136.755945) + (xy 252.085652 136.780218) (xy 252.252851 136.8067) (xy 252.252856 136.8067) (xy 252.422149 136.8067) + (xy 252.589347 136.780218) (xy 252.750349 136.727905) (xy 252.901185 136.65105) (xy 253.038141 136.551546) + (xy 253.157846 136.431841) (xy 253.25735 136.294885) (xy 253.334205 136.144049) (xy 253.386518 135.983047) + (xy 253.413 135.815849) (xy 253.413 135.64655) (xy 253.386518 135.479352) (xy 253.341796 135.341713) + (xy 253.334205 135.318351) (xy 253.334203 135.318348) (xy 253.334203 135.318346) (xy 253.290176 135.23194) + (xy 253.25735 135.167515) (xy 253.225781 135.124064) (xy 253.157851 135.030565) (xy 253.157847 135.03056) + (xy 253.038139 134.910852) (xy 253.038134 134.910848) (xy 252.901188 134.811352) (xy 252.901187 134.811351) + (xy 252.901185 134.81135) (xy 252.836109 134.778192) (xy 252.750353 134.734496) (xy 252.589347 134.682181) + (xy 252.422149 134.6557) (xy 252.422144 134.6557) (xy 252.252856 134.6557) (xy 252.252851 134.6557) + (xy 252.085652 134.682181) (xy 251.924646 134.734496) (xy 251.773811 134.811352) (xy 251.636865 134.910848) + (xy 251.63686 134.910852) (xy 251.517152 135.03056) (xy 251.517148 135.030565) (xy 251.417652 135.167511) + (xy 251.340796 135.318346) (xy 251.288481 135.479352) (xy 251.262 135.64655) (xy 249.4519 135.64655) + (xy 249.4519 135.587371) (xy 249.414353 135.302175) (xy 249.339902 135.02432) (xy 249.273463 134.863923) + (xy 249.229824 134.758568) (xy 249.229816 134.758551) (xy 249.085995 134.509448) (xy 249.085994 134.509447) + (xy 249.085991 134.509441) (xy 248.961525 134.347233) (xy 248.910878 134.281228) (xy 248.910872 134.281221) + (xy 248.707478 134.077827) (xy 248.707471 134.077821) (xy 248.479267 133.902715) (xy 248.479265 133.902713) + (xy 248.479259 133.902709) (xy 248.479254 133.902706) (xy 248.479251 133.902704) (xy 248.230148 133.758883) + (xy 248.230131 133.758875) (xy 247.964378 133.648797) (xy 247.686523 133.574346) (xy 247.401338 133.536801) + (xy 247.401335 133.5368) (xy 247.401329 133.5368) (xy 247.113671 133.5368) (xy 247.113665 133.5368) + (xy 247.113661 133.536801) (xy 246.828476 133.574346) (xy 246.550621 133.648797) (xy 246.284868 133.758875) + (xy 246.284851 133.758883) (xy 246.035748 133.902704) (xy 246.035732 133.902715) (xy 245.807528 134.077821) + (xy 245.807521 134.077827) (xy 245.604127 134.281221) (xy 245.53293 134.374007) (xy 245.476501 134.415209) + (xy 245.406755 134.419364) (xy 245.345835 134.385151) (xy 245.313083 134.323434) (xy 245.318896 134.253807) + (xy 245.327161 134.236531) (xy 245.380363 134.144383) (xy 245.488242 133.883939) (xy 245.561204 133.611642) + (xy 245.598 133.332151) (xy 245.598 133.050249) (xy 245.561204 132.770758) (xy 245.488242 132.498461) + (xy 245.48126 132.481606) (xy 245.459309 132.428611) (xy 245.380363 132.238017) (xy 245.380361 132.238014) + (xy 245.380359 132.238009) (xy 245.239416 131.99389) (xy 245.239412 131.993883) (xy 245.0678 131.770235) + (xy 245.067798 131.770233) (xy 245.067795 131.770229) (xy 244.86847 131.570904) (xy 244.769871 131.495246) + (xy 244.644817 131.399288) (xy 244.644811 131.399284) (xy 244.644809 131.399283) (xy 244.40069 131.25834) + (xy 244.400679 131.258335) (xy 244.140243 131.150459) (xy 243.867939 131.077495) (xy 243.588458 131.0407) + (xy 243.588451 131.0407) (xy 243.306549 131.0407) (xy 243.306541 131.0407) (xy 243.02706 131.077495) + (xy 242.754756 131.150459) (xy 242.49432 131.258335) (xy 242.494309 131.25834) (xy 242.25019 131.399283) + (xy 242.250182 131.399289) (xy 242.026529 131.570904) (xy 241.827204 131.770229) (xy 241.655589 131.993882) + (xy 241.655583 131.99389) (xy 241.51464 132.238009) (xy 241.514635 132.23802) (xy 241.406759 132.498456) + (xy 241.333795 132.77076) (xy 241.297 133.050241) (xy 241.297 133.332158) (xy 241.333795 133.611639) + (xy 241.406759 133.883943) (xy 241.514635 134.144379) (xy 241.51464 134.14439) (xy 241.655583 134.388509) + (xy 241.655594 134.388525) (xy 241.786338 134.558914) (xy 241.811532 134.624083) (xy 241.797494 134.692528) + (xy 241.74868 134.742517) (xy 241.744258 134.744884) (xy 241.613813 134.81135) (xy 241.476865 134.910848) + (xy 241.47686 134.910852) (xy 241.357152 135.03056) (xy 241.357148 135.030565) (xy 241.257652 135.167511) + (xy 241.180796 135.318346) (xy 241.128481 135.479352) (xy 241.102 135.64655) (xy 240.1255 135.64655) + (xy 240.1255 134.046075) (xy 240.145185 133.979036) (xy 240.197989 133.933281) (xy 240.201999 133.931534) + (xy 240.277179 133.900394) (xy 240.408289 133.812789) (xy 240.519789 133.701289) (xy 240.607394 133.570179) + (xy 240.667737 133.424497) (xy 240.6985 133.269842) (xy 240.6985 133.112158) (xy 240.6985 133.112155) + (xy 240.698499 133.112153) (xy 240.667737 132.957503) (xy 240.65203 132.919582) (xy 240.607397 132.811827) + (xy 240.60739 132.811814) (xy 240.519789 132.680711) (xy 240.519786 132.680707) (xy 240.408292 132.569213) + (xy 240.408288 132.56921) (xy 240.277185 132.481609) (xy 240.277172 132.481602) (xy 240.131501 132.421264) + (xy 240.131489 132.421261) (xy 239.976845 132.3905) (xy 239.976842 132.3905) (xy 239.819158 132.3905) + (xy 239.819155 132.3905) (xy 239.66451 132.421261) (xy 239.664498 132.421264) (xy 239.589279 132.452421) + (xy 239.51981 132.45989) (xy 239.457331 132.428614) (xy 239.45417 132.425564) (xy 237.538445 130.510241) + (xy 247.647 130.510241) (xy 247.647 130.792158) (xy 247.683795 131.071639) (xy 247.756759 131.343943) + (xy 247.864635 131.604379) (xy 247.86464 131.60439) (xy 247.997142 131.833888) (xy 248.005588 131.848517) + (xy 248.168047 132.060237) (xy 248.177204 132.07217) (xy 248.376529 132.271495) (xy 248.376533 132.271498) + (xy 248.376535 132.2715) (xy 248.600183 132.443112) (xy 248.60019 132.443116) (xy 248.844309 132.584059) + (xy 248.844314 132.584061) (xy 248.844317 132.584063) (xy 249.104761 132.691942) (xy 249.377058 132.764904) + (xy 249.656549 132.8017) (xy 249.656556 132.8017) (xy 249.938444 132.8017) (xy 249.938451 132.8017) + (xy 250.217942 132.764904) (xy 250.490239 132.691942) (xy 250.750683 132.584063) (xy 250.994817 132.443112) + (xy 251.218465 132.2715) (xy 251.4178 132.072165) (xy 251.589412 131.848517) (xy 251.730363 131.604383) + (xy 251.838242 131.343939) (xy 251.911204 131.071642) (xy 251.948 130.792151) (xy 251.948 130.510249) + (xy 251.911204 130.230758) (xy 251.838242 129.958461) (xy 251.83126 129.941606) (xy 251.806265 129.881261) + (xy 251.730363 129.698017) (xy 251.730361 129.698014) (xy 251.730359 129.698009) (xy 251.589416 129.45389) + (xy 251.589412 129.453883) (xy 251.4178 129.230235) (xy 251.417798 129.230233) (xy 251.417795 129.230229) + (xy 251.21847 129.030904) (xy 251.218465 129.0309) (xy 250.994817 128.859288) (xy 250.994811 128.859284) + (xy 250.994809 128.859283) (xy 250.75069 128.71834) (xy 250.750679 128.718335) (xy 250.490243 128.610459) + (xy 250.217939 128.537495) (xy 249.938458 128.5007) (xy 249.938451 128.5007) (xy 249.656549 128.5007) + (xy 249.656541 128.5007) (xy 249.37706 128.537495) (xy 249.104756 128.610459) (xy 248.84432 128.718335) + (xy 248.844309 128.71834) (xy 248.60019 128.859283) (xy 248.600184 128.859287) (xy 248.600183 128.859288) + (xy 248.545198 128.90148) (xy 248.376529 129.030904) (xy 248.177204 129.230229) (xy 248.063881 129.377914) + (xy 248.005597 129.453872) (xy 248.005589 129.453882) (xy 248.005583 129.45389) (xy 247.86464 129.698009) + (xy 247.864635 129.69802) (xy 247.756759 129.958456) (xy 247.683795 130.23076) (xy 247.647 130.510241) + (xy 237.538445 130.510241) (xy 236.193616 129.165694) (xy 235.398828 128.371072) (xy 235.365337 128.309753) + (xy 235.3625 128.283382) (xy 235.3625 122.432106) (xy 240.165365 122.432106) (xy 240.181576 122.598035) + (xy 240.183121 122.613842) (xy 240.202506 122.681404) (xy 240.23348 122.789361) (xy 240.31478 122.952863) + (xy 240.314781 122.952865) (xy 240.314783 122.952868) (xy 240.327866 122.970313) (xy 240.424338 123.098952) + (xy 240.424339 123.098953) (xy 240.42434 123.098954) (xy 240.558532 123.222795) (xy 240.712925 123.320297) + (xy 240.848077 123.374474) (xy 240.882414 123.388239) (xy 240.882415 123.388239) (xy 240.882417 123.38824) + (xy 241.061408 123.424379) (xy 241.061402 123.424379) (xy 241.077722 123.424659) (xy 241.243984 123.42752) + (xy 241.424112 123.397558) (xy 241.531061 123.358899) (xy 241.595836 123.335485) (xy 241.595837 123.335483) + (xy 241.59584 123.335483) (xy 241.610875 123.32672) (xy 241.617559 123.322835) (xy 241.61785 123.322757) + (xy 241.645733 123.30646) (xy 241.645851 123.306392) (xy 241.649068 123.305601) (xy 241.708162 123.289599) + (xy 243.189292 123.289599) (xy 243.189414 123.289606) (xy 243.197505 123.289605) (xy 243.197508 123.289606) + (xy 243.229642 123.289602) (xy 243.292204 123.306534) (xy 243.32003 123.322791) (xy 243.320032 123.322791) + (xy 243.32618 123.326383) (xy 243.327835 123.327208) (xy 243.341978 123.33545) (xy 243.5137 123.397521) + (xy 243.693821 123.427482) (xy 243.873498 123.42439) (xy 243.876391 123.424341) (xy 244.055366 123.388205) + (xy 244.055369 123.388203) (xy 244.055374 123.388203) (xy 244.22486 123.320262) (xy 244.379246 123.222763) + (xy 244.389905 123.212927) (xy 244.51343 123.09893) (xy 244.513432 123.098928) (xy 244.526272 123.081807) + (xy 244.622985 122.952847) (xy 244.704284 122.789348) (xy 244.754642 122.613833) (xy 244.772397 122.432103) + (xy 244.75696 122.25016) (xy 244.756958 122.250154) (xy 244.745392 122.207814) (xy 244.708843 122.074018) + (xy 244.701083 122.057849) (xy 244.697996 122.051404) (xy 244.697948 122.051146) (xy 244.681571 122.017119) + (xy 244.681443 122.01633) (xy 244.669402 121.963531) (xy 244.669402 121.963522) (xy 244.669407 121.926108) + (xy 244.669406 121.926104) (xy 244.669407 121.918098) (xy 244.669399 121.91796) (xy 244.669399 120.648353) + (xy 245.5764 120.648353) (xy 245.5764 120.806046) (xy 245.607161 120.960689) (xy 245.607164 120.960701) + (xy 245.667502 121.106372) (xy 245.667509 121.106385) (xy 245.75511 121.237488) (xy 245.755113 121.237492) + (xy 245.866607 121.348986) (xy 245.866611 121.348989) (xy 245.997714 121.43659) (xy 245.997727 121.436597) + (xy 246.143398 121.496935) (xy 246.143403 121.496937) (xy 246.298053 121.527699) (xy 246.298056 121.5277) + (xy 246.298058 121.5277) (xy 246.455744 121.5277) (xy 246.455745 121.527699) (xy 246.610397 121.496937) + (xy 246.741717 121.442543) (xy 246.756072 121.436597) (xy 246.756072 121.436596) (xy 246.756079 121.436594) + (xy 246.887189 121.348989) (xy 246.998689 121.237489) (xy 247.086294 121.106379) (xy 247.146637 120.960697) + (xy 247.1774 120.806042) (xy 247.1774 120.648358) (xy 247.1774 120.648355) (xy 247.177399 120.648353) + (xy 247.166725 120.594694) (xy 247.146637 120.493703) (xy 247.146635 120.493698) (xy 247.086297 120.348027) + (xy 247.08629 120.348014) (xy 246.998689 120.216911) (xy 246.998686 120.216907) (xy 246.887192 120.105413) + (xy 246.887188 120.10541) (xy 246.756085 120.017809) (xy 246.756072 120.017802) (xy 246.610401 119.957464) + (xy 246.610389 119.957461) (xy 246.455745 119.9267) (xy 246.455742 119.9267) (xy 246.298058 119.9267) + (xy 246.298055 119.9267) (xy 246.14341 119.957461) (xy 246.143398 119.957464) (xy 245.997727 120.017802) + (xy 245.997714 120.017809) (xy 245.866611 120.10541) (xy 245.866607 120.105413) (xy 245.755113 120.216907) + (xy 245.75511 120.216911) (xy 245.667509 120.348014) (xy 245.667502 120.348027) (xy 245.607164 120.493698) + (xy 245.607161 120.49371) (xy 245.5764 120.648353) (xy 244.669399 120.648353) (xy 244.669399 120.614677) + (xy 244.669401 120.614669) (xy 244.681606 120.561027) (xy 244.687911 120.54789) (xy 244.697974 120.526974) + (xy 244.697974 120.526969) (xy 244.70136 120.519933) (xy 244.701525 120.519522) (xy 244.701646 120.51927) + (xy 244.708883 120.504191) (xy 244.757 120.328042) (xy 244.772437 120.146093) (xy 244.754681 119.964355) + (xy 244.70432 119.788834) (xy 244.623018 119.62533) (xy 244.528575 119.499397) (xy 244.513462 119.479245) + (xy 244.445159 119.416211) (xy 244.379269 119.355404) (xy 244.379266 119.355402) (xy 244.379265 119.355401) + (xy 244.379262 119.355399) (xy 244.224877 119.257901) (xy 244.055387 119.189958) (xy 244.055377 119.189956) + (xy 243.876392 119.153818) (xy 243.876399 119.153818) (xy 243.704694 119.150865) (xy 243.693818 119.150678) + (xy 243.693817 119.150678) (xy 243.693814 119.150678) (xy 243.513697 119.180638) (xy 243.513684 119.180641) + (xy 243.341963 119.242713) (xy 243.327448 119.25117) (xy 243.327363 119.251219) (xy 243.320276 119.25534) + (xy 243.32003 119.255408) (xy 243.292238 119.271644) (xy 243.29199 119.271789) (xy 243.289263 119.272459) + (xy 243.229646 119.288596) (xy 243.189301 119.288593) (xy 243.189197 119.2886) (xy 241.748496 119.2886) + (xy 241.740314 119.288598) (xy 241.740292 119.288593) (xy 241.710365 119.288595) (xy 241.708128 119.288595) + (xy 241.707846 119.288512) (xy 241.645593 119.271662) (xy 241.617771 119.255408) (xy 241.611705 119.251864) + (xy 241.610007 119.251017) (xy 241.602657 119.246734) (xy 241.595821 119.24275) (xy 241.424097 119.180678) + (xy 241.424091 119.180677) (xy 241.243981 119.150719) (xy 241.243978 119.150719) (xy 241.235439 119.150865) + (xy 241.061407 119.153859) (xy 240.882434 119.189994) (xy 240.882423 119.189997) (xy 240.712942 119.257937) + (xy 240.712941 119.257937) (xy 240.558561 119.355432) (xy 240.558558 119.355434) (xy 240.424367 119.479273) + (xy 240.314815 119.625354) (xy 240.23352 119.788844) (xy 240.233519 119.788847) (xy 240.233518 119.78885) + (xy 240.216645 119.847658) (xy 240.183158 119.964365) (xy 240.169378 120.105413) (xy 240.165404 120.146093) + (xy 240.166583 120.159989) (xy 240.180679 120.326147) (xy 240.18084 120.328035) (xy 240.205548 120.418484) + (xy 240.228956 120.504178) (xy 240.22896 120.504188) (xy 240.236198 120.51927) (xy 240.23624 120.519356) + (xy 240.239823 120.526838) (xy 240.239881 120.52714) (xy 240.256197 120.561025) (xy 240.256236 120.561106) + (xy 240.256381 120.562) (xy 240.268401 120.614669) (xy 240.268401 121.963522) (xy 240.256207 122.017145) + (xy 240.255619 122.018371) (xy 240.255539 122.018538) (xy 240.236666 122.057737) (xy 240.236342 122.058539) + (xy 240.228918 122.07401) (xy 240.180801 122.250154) (xy 240.180801 122.250156) (xy 240.165365 122.432106) + (xy 235.3625 122.432106) (xy 235.3625 116.59655) (xy 236.3395 116.59655) (xy 236.3395 116.765849) + (xy 236.365981 116.933047) (xy 236.418296 117.094053) (xy 236.495152 117.244888) (xy 236.594648 117.381834) + (xy 236.594651 117.381838) (xy 236.71436 117.501547) (xy 236.714365 117.501551) (xy 236.794244 117.559586) + (xy 236.851315 117.60105) (xy 236.947425 117.65002) (xy 237.002146 117.677903) (xy 237.002148 117.677903) + (xy 237.002151 117.677905) (xy 237.08845 117.705945) (xy 237.163152 117.730218) (xy 237.330351 117.7567) + (xy 237.330356 117.7567) (xy 237.499649 117.7567) (xy 237.666847 117.730218) (xy 237.827849 117.677905) + (xy 237.978685 117.60105) (xy 238.115641 117.501546) (xy 238.235346 117.381841) (xy 238.235346 117.38184) + (xy 238.235349 117.381838) (xy 238.235351 117.381834) (xy 238.256179 117.353167) (xy 238.33485 117.244885) + (xy 238.411705 117.094049) (xy 238.464018 116.933047) (xy 238.4905 116.765849) (xy 238.4905 116.59655) + (xy 238.464928 116.435098) (xy 238.473882 116.365805) (xy 238.518879 116.312353) (xy 238.58563 116.291713) + (xy 238.587401 116.2917) (xy 238.825944 116.2917) (xy 238.825951 116.2917) (xy 239.105442 116.254904) + (xy 239.377739 116.181942) (xy 239.638183 116.074063) (xy 239.882317 115.933112) (xy 240.105965 115.7615) + (xy 240.3053 115.562165) (xy 240.372992 115.473946) (xy 240.42942 115.432744) (xy 240.499166 115.428589) + (xy 240.560086 115.462801) (xy 240.592839 115.524518) (xy 240.587026 115.594146) (xy 240.578755 115.611433) + (xy 240.522683 115.708551) (xy 240.522675 115.708568) (xy 240.412597 115.974321) (xy 240.338146 116.252176) + (xy 240.300601 116.537361) (xy 240.3006 116.537377) (xy 240.3006 116.825022) (xy 240.300601 116.825038) + (xy 240.338146 117.110223) (xy 240.412597 117.388078) (xy 240.522675 117.653831) (xy 240.522683 117.653848) + (xy 240.666504 117.902951) (xy 240.666515 117.902967) (xy 240.841621 118.131171) (xy 240.841627 118.131178) + (xy 241.045021 118.334572) (xy 241.045027 118.334577) (xy 241.273241 118.509691) (xy 241.273248 118.509695) + (xy 241.522351 118.653516) (xy 241.522356 118.653518) (xy 241.522359 118.65352) (xy 241.522363 118.653521) + (xy 241.522368 118.653524) (xy 241.569808 118.673174) (xy 241.78812 118.763602) (xy 242.065975 118.838053) + (xy 242.351171 118.8756) (xy 242.351178 118.8756) (xy 242.638822 118.8756) (xy 242.638829 118.8756) + (xy 242.924025 118.838053) (xy 243.20188 118.763602) (xy 243.467641 118.65352) (xy 243.470056 118.652126) + (xy 243.584067 118.586301) (xy 243.716759 118.509691) (xy 243.944973 118.334577) (xy 244.148377 118.131173) + (xy 244.323491 117.902959) (xy 244.46732 117.653841) (xy 244.577402 117.38808) (xy 244.651853 117.110225) + (xy 244.6894 116.825029) (xy 244.6894 116.59655) (xy 246.4995 116.59655) (xy 246.4995 116.765849) + (xy 246.525981 116.933047) (xy 246.578296 117.094053) (xy 246.655152 117.244888) (xy 246.754648 117.381834) + (xy 246.754651 117.381838) (xy 246.87436 117.501547) (xy 246.874365 117.501551) (xy 246.954244 117.559586) + (xy 247.011315 117.60105) (xy 247.107425 117.65002) (xy 247.162146 117.677903) (xy 247.162148 117.677903) + (xy 247.162151 117.677905) (xy 247.24845 117.705945) (xy 247.323152 117.730218) (xy 247.490351 117.7567) + (xy 247.490356 117.7567) (xy 247.659649 117.7567) (xy 247.826847 117.730218) (xy 247.987849 117.677905) + (xy 248.138685 117.60105) (xy 248.275641 117.501546) (xy 248.395346 117.381841) (xy 248.395346 117.38184) + (xy 248.395349 117.381838) (xy 248.395351 117.381834) (xy 248.416179 117.353167) (xy 248.49485 117.244885) + (xy 248.571705 117.094049) (xy 248.624018 116.933047) (xy 248.6505 116.765849) (xy 248.6505 116.59655) + (xy 248.624018 116.429352) (xy 248.597275 116.347046) (xy 248.571705 116.268351) (xy 248.571703 116.268348) + (xy 248.571703 116.268346) (xy 248.521015 116.168867) (xy 248.49485 116.117515) (xy 248.463281 116.074064) + (xy 248.395351 115.980565) (xy 248.395347 115.98056) (xy 248.275639 115.860852) (xy 248.275634 115.860848) + (xy 248.138688 115.761352) (xy 248.138687 115.761351) (xy 248.138685 115.76135) (xy 248.089398 115.736237) + (xy 247.987853 115.684496) (xy 247.826847 115.632181) (xy 247.659649 115.6057) (xy 247.659644 115.6057) + (xy 247.490356 115.6057) (xy 247.490351 115.6057) (xy 247.323152 115.632181) (xy 247.162146 115.684496) + (xy 247.011311 115.761352) (xy 246.874365 115.860848) (xy 246.87436 115.860852) (xy 246.754652 115.98056) + (xy 246.754648 115.980565) (xy 246.655152 116.117511) (xy 246.578296 116.268346) (xy 246.525981 116.429352) + (xy 246.4995 116.59655) (xy 244.6894 116.59655) (xy 244.6894 116.537371) (xy 244.651853 116.252175) + (xy 244.577402 115.97432) (xy 244.489705 115.762601) (xy 244.467324 115.708568) (xy 244.467316 115.708551) + (xy 244.323495 115.459448) (xy 244.323491 115.459441) (xy 244.182073 115.275141) (xy 244.148378 115.231228) + (xy 244.148372 115.231221) (xy 243.944978 115.027827) (xy 243.944971 115.027821) (xy 243.716767 114.852715) + (xy 243.716765 114.852713) (xy 243.716759 114.852709) (xy 243.716754 114.852706) (xy 243.716751 114.852704) + (xy 243.467648 114.708883) (xy 243.467631 114.708875) (xy 243.201878 114.598797) (xy 242.924023 114.524346) + (xy 242.638838 114.486801) (xy 242.638835 114.4868) (xy 242.638829 114.4868) (xy 242.351171 114.4868) + (xy 242.351165 114.4868) (xy 242.351161 114.486801) (xy 242.065976 114.524346) (xy 241.788121 114.598797) + (xy 241.522368 114.708875) (xy 241.522351 114.708883) (xy 241.273248 114.852704) (xy 241.273232 114.852715) + (xy 241.045028 115.027821) (xy 241.045021 115.027827) (xy 240.841627 115.231221) (xy 240.77043 115.324007) + (xy 240.714001 115.365209) (xy 240.644255 115.369364) (xy 240.583335 115.335151) (xy 240.550583 115.273434) + (xy 240.556396 115.203807) (xy 240.564661 115.186531) (xy 240.617863 115.094383) (xy 240.725742 114.833939) + (xy 240.798704 114.561642) (xy 240.8355 114.282151) (xy 240.8355 114.000249) (xy 240.798704 113.720758) + (xy 240.725742 113.448461) (xy 240.71876 113.431606) (xy 240.693765 113.371261) (xy 240.617863 113.188017) + (xy 240.617861 113.188014) (xy 240.617859 113.188009) (xy 240.476916 112.94389) (xy 240.476912 112.943883) + (xy 240.3053 112.720235) (xy 240.305298 112.720233) (xy 240.305295 112.720229) (xy 240.10597 112.520904) + (xy 240.081161 112.501867) (xy 239.882317 112.349288) (xy 239.812058 112.308724) (xy 239.767488 112.282991) + (xy 239.750234 112.264895) (xy 239.730222 112.249914) (xy 239.726541 112.240046) (xy 239.719273 112.232423) + (xy 239.714542 112.207874) (xy 239.705805 112.18445) (xy 239.708044 112.174157) (xy 239.706051 112.163816) + (xy 239.715342 112.140607) (xy 239.720657 112.116177) (xy 239.730257 112.103352) (xy 239.732019 112.098952) + (xy 239.7418 112.087931) (xy 239.759238 112.070493) (xy 239.820559 112.03701) (xy 239.890251 112.041994) + (xy 239.894296 112.043585) (xy 239.969503 112.074737) (xy 240.124153 112.105499) (xy 240.124156 112.1055) + (xy 240.124158 112.1055) (xy 240.281844 112.1055) (xy 240.281845 112.105499) (xy 240.436497 112.074737) + (xy 240.57238 112.018453) (xy 240.582172 112.014397) (xy 240.582172 112.014396) (xy 240.582179 112.014394) + (xy 240.713289 111.926789) (xy 240.824789 111.815289) (xy 240.912394 111.684179) (xy 240.914191 111.679842) + (xy 240.927438 111.647859) (xy 240.972737 111.538497) (xy 241.0035 111.383842) (xy 241.0035 111.226158) + (xy 241.0035 111.226155) (xy 241.003499 111.226153) (xy 241.002639 111.221828) (xy 240.972737 111.071503) + (xy 240.948055 111.011914) (xy 240.912397 110.925827) (xy 240.91239 110.925814) (xy 240.824789 110.794711) + (xy 240.824786 110.794707) (xy 240.713292 110.683213) (xy 240.713288 110.68321) (xy 240.582185 110.595609) + (xy 240.582172 110.595602) (xy 240.436501 110.535264) (xy 240.436489 110.535261) (xy 240.281845 110.5045) + (xy 240.281842 110.5045) (xy 240.124158 110.5045) (xy 240.124155 110.5045) (xy 239.96951 110.535261) + (xy 239.969498 110.535264) (xy 239.823827 110.595602) (xy 239.823814 110.595609) (xy 239.692711 110.68321) + (xy 239.692707 110.683213) (xy 239.581213 110.794707) (xy 239.58121 110.794711) (xy 239.493609 110.925814) + (xy 239.493602 110.925827) (xy 239.433264 111.071498) (xy 239.433261 111.07151) (xy 239.4025 111.226153) + (xy 239.4025 111.383846) (xy 239.433261 111.538489) (xy 239.433264 111.538501) (xy 239.464383 111.613629) + (xy 239.471852 111.683098) (xy 239.440576 111.745577) (xy 239.437503 111.748762) (xy 239.195805 111.99046) + (xy 239.134482 112.023945) (xy 239.091939 112.025718) (xy 238.825961 111.990701) (xy 238.825956 111.9907) + (xy 238.825951 111.9907) (xy 238.544049 111.9907) (xy 238.544041 111.9907) (xy 238.26456 112.027495) + (xy 237.992256 112.100459) (xy 237.73182 112.208335) (xy 237.731809 112.20834) (xy 237.48769 112.349283) + (xy 237.487682 112.349289) (xy 237.264029 112.520904) (xy 237.064704 112.720229) (xy 236.893089 112.943882) + (xy 236.893083 112.94389) (xy 236.75214 113.188009) (xy 236.752135 113.18802) (xy 236.644259 113.448456) + (xy 236.571295 113.72076) (xy 236.5345 114.000241) (xy 236.5345 114.282158) (xy 236.571295 114.561639) + (xy 236.644259 114.833943) (xy 236.752135 115.094379) (xy 236.75214 115.09439) (xy 236.893083 115.338509) + (xy 236.893094 115.338525) (xy 237.023838 115.508914) (xy 237.049032 115.574083) (xy 237.034994 115.642528) + (xy 236.98618 115.692517) (xy 236.981758 115.694884) (xy 236.851313 115.76135) (xy 236.714365 115.860848) + (xy 236.71436 115.860852) (xy 236.594652 115.98056) (xy 236.594648 115.980565) (xy 236.495152 116.117511) + (xy 236.418296 116.268346) (xy 236.365981 116.429352) (xy 236.3395 116.59655) (xy 235.3625 116.59655) + (xy 235.3625 114.996075) (xy 235.382185 114.929036) (xy 235.434989 114.883281) (xy 235.438999 114.881534) + (xy 235.514179 114.850394) (xy 235.645289 114.762789) (xy 235.756789 114.651289) (xy 235.844394 114.520179) + (xy 235.904737 114.374497) (xy 235.9355 114.219842) (xy 235.9355 114.062158) (xy 235.9355 114.062155) + (xy 235.935499 114.062153) (xy 235.923556 114.002113) (xy 235.904737 113.907503) (xy 235.877278 113.841211) + (xy 235.844397 113.761827) (xy 235.84439 113.761814) (xy 235.756789 113.630711) (xy 235.756786 113.630707) + (xy 235.645292 113.519213) (xy 235.645288 113.51921) (xy 235.514185 113.431609) (xy 235.514175 113.431604) + (xy 235.439047 113.400485) (xy 235.384644 113.356644) (xy 235.362579 113.29035) (xy 235.3625 113.285924) + (xy 235.3625 109.870748) (xy 235.3625 109.870747) (xy 235.341083 109.819042) (xy 235.327866 109.787132) + (xy 229.022539 103.481806) (xy 230.597765 103.481806) (xy 230.614246 103.650499) (xy 230.615521 103.663542) + (xy 230.632705 103.723433) (xy 230.66588 103.839061) (xy 230.74718 104.002563) (xy 230.747181 104.002565) + (xy 230.747183 104.002568) (xy 230.792089 104.062447) (xy 230.856738 104.148652) (xy 230.856739 104.148653) + (xy 230.85674 104.148654) (xy 230.990932 104.272495) (xy 231.145325 104.369997) (xy 231.258092 104.415201) + (xy 231.314814 104.437939) (xy 231.314815 104.437939) (xy 231.314817 104.43794) (xy 231.493808 104.474079) + (xy 231.493802 104.474079) (xy 231.510122 104.474359) (xy 231.676384 104.47722) (xy 231.856512 104.447258) + (xy 231.904637 104.429862) (xy 232.028236 104.385185) (xy 232.028237 104.385183) (xy 232.02824 104.385183) + (xy 232.043275 104.37642) (xy 232.049959 104.372535) (xy 232.05025 104.372457) (xy 232.078133 104.35616) + (xy 232.078251 104.356092) (xy 232.081468 104.355301) (xy 232.140562 104.339299) (xy 233.621692 104.339299) + (xy 233.621814 104.339306) (xy 233.629905 104.339305) (xy 233.629908 104.339306) (xy 233.662042 104.339302) + (xy 233.724604 104.356234) (xy 233.75243 104.372491) (xy 233.752432 104.372491) (xy 233.75858 104.376083) + (xy 233.760235 104.376908) (xy 233.761285 104.37752) (xy 233.774378 104.38515) (xy 233.9461 104.447221) + (xy 234.126221 104.477182) (xy 234.305898 104.47409) (xy 234.308791 104.474041) (xy 234.487766 104.437905) + (xy 234.487769 104.437903) (xy 234.487774 104.437903) (xy 234.65726 104.369962) (xy 234.811646 104.272463) + (xy 234.813994 104.270297) (xy 234.94583 104.14863) (xy 234.945832 104.148628) (xy 234.959979 104.129764) + (xy 235.055385 104.002547) (xy 235.136684 103.839048) (xy 235.187042 103.663533) (xy 235.204797 103.481803) + (xy 235.18936 103.29986) (xy 235.189358 103.299854) (xy 235.175258 103.248236) (xy 235.141243 103.123718) + (xy 235.133483 103.107549) (xy 235.130396 103.101104) (xy 235.130348 103.100846) (xy 235.113971 103.066819) + (xy 235.113843 103.06603) (xy 235.101802 103.013231) (xy 235.101802 103.013224) (xy 235.101807 102.975808) + (xy 235.101806 102.975804) (xy 235.101807 102.967798) (xy 235.101799 102.96766) (xy 235.101799 101.664377) + (xy 235.104454 101.652708) (xy 235.10342 101.644394) (xy 235.114005 101.610728) (xy 235.120311 101.59759) + (xy 235.130374 101.576674) (xy 235.130374 101.576669) (xy 235.13376 101.569633) (xy 235.133925 101.569222) + (xy 235.134046 101.56897) (xy 235.141283 101.553891) (xy 235.1894 101.377742) (xy 235.204837 101.195793) + (xy 235.187081 101.014055) (xy 235.13672 100.838534) (xy 235.055418 100.67503) (xy 234.980648 100.57533) + (xy 234.945862 100.528945) (xy 234.897702 100.4845) (xy 234.811669 100.405104) (xy 234.811666 100.405102) + (xy 234.811665 100.405101) (xy 234.811662 100.405099) (xy 234.657277 100.307601) (xy 234.487787 100.239658) + (xy 234.487777 100.239656) (xy 234.308792 100.203518) (xy 234.308799 100.203518) (xy 234.137094 100.200565) + (xy 234.126218 100.200378) (xy 234.126217 100.200378) (xy 234.126214 100.200378) (xy 233.946097 100.230338) + (xy 233.946084 100.230341) (xy 233.774363 100.292413) (xy 233.759848 100.30087) (xy 233.759763 100.300919) + (xy 233.752676 100.30504) (xy 233.75243 100.305108) (xy 233.724638 100.321344) (xy 233.72439 100.321489) + (xy 233.721663 100.322159) (xy 233.662046 100.338296) (xy 233.621701 100.338293) (xy 233.621597 100.3383) + (xy 232.180896 100.3383) (xy 232.172714 100.338298) (xy 232.172692 100.338293) (xy 232.142765 100.338295) + (xy 232.140528 100.338295) (xy 232.140246 100.338212) (xy 232.077993 100.321362) (xy 232.050171 100.305108) + (xy 232.044105 100.301564) (xy 232.042407 100.300717) (xy 232.034574 100.296153) (xy 232.028221 100.29245) + (xy 231.856497 100.230378) (xy 231.856491 100.230377) (xy 231.676381 100.200419) (xy 231.676378 100.200419) + (xy 231.667839 100.200565) (xy 231.493807 100.203559) (xy 231.314834 100.239694) (xy 231.314823 100.239697) + (xy 231.145342 100.307637) (xy 231.145341 100.307637) (xy 230.990961 100.405132) (xy 230.990958 100.405134) + (xy 230.856767 100.528973) (xy 230.747215 100.675054) (xy 230.66592 100.838544) (xy 230.665919 100.838547) + (xy 230.665918 100.83855) (xy 230.641413 100.923955) (xy 230.615558 101.014065) (xy 230.597804 101.195791) + (xy 230.597804 101.195793) (xy 230.600993 101.233378) (xy 230.613161 101.376813) (xy 230.61324 101.377735) + (xy 230.649613 101.510888) (xy 230.661356 101.553878) (xy 230.66136 101.553888) (xy 230.668598 101.56897) + (xy 230.66864 101.569056) (xy 230.672223 101.576538) (xy 230.672281 101.57684) (xy 230.688597 101.610725) + (xy 230.688636 101.610806) (xy 230.688781 101.6117) (xy 230.700801 101.664369) (xy 230.700801 103.013224) + (xy 230.688612 103.066836) (xy 230.688168 103.067762) (xy 230.688082 103.06794) (xy 230.669065 103.107438) + (xy 230.668743 103.108235) (xy 230.661319 103.123705) (xy 230.613201 103.299854) (xy 230.613201 103.299856) + (xy 230.597765 103.481806) (xy 229.022539 103.481806) (xy 225.955866 100.415133) (xy 225.955866 100.415132) + (xy 225.821816 100.281082) (xy 225.788334 100.219762) (xy 225.7855 100.193404) (xy 225.7855 97.54655) + (xy 226.762 97.54655) (xy 226.762 97.715849) (xy 226.788481 97.883047) (xy 226.840796 98.044053) + (xy 226.917652 98.194888) (xy 227.017148 98.331834) (xy 227.017152 98.331839) (xy 227.13686 98.451547) + (xy 227.136865 98.451551) (xy 227.213873 98.5075) (xy 227.273815 98.55105) (xy 227.367141 98.598602) + (xy 227.424646 98.627903) (xy 227.424648 98.627903) (xy 227.424651 98.627905) (xy 227.50885 98.655263) + (xy 227.585652 98.680218) (xy 227.752851 98.7067) (xy 227.752856 98.7067) (xy 227.922149 98.7067) + (xy 228.089347 98.680218) (xy 228.250349 98.627905) (xy 228.401185 98.55105) (xy 228.538141 98.451546) + (xy 228.657846 98.331841) (xy 228.75735 98.194885) (xy 228.834205 98.044049) (xy 228.886518 97.883047) + (xy 228.896383 97.820763) (xy 228.913 97.715849) (xy 228.913 97.54655) (xy 228.887428 97.385098) + (xy 228.896382 97.315805) (xy 228.941379 97.262353) (xy 229.00813 97.241713) (xy 229.009901 97.2417) + (xy 229.248444 97.2417) (xy 229.248451 97.2417) (xy 229.527942 97.204904) (xy 229.800239 97.131942) + (xy 230.060683 97.024063) (xy 230.304817 96.883112) (xy 230.528465 96.7115) (xy 230.7278 96.512165) + (xy 230.795492 96.423946) (xy 230.85192 96.382744) (xy 230.921666 96.378589) (xy 230.982586 96.412801) + (xy 231.015339 96.474518) (xy 231.009526 96.544146) (xy 231.001255 96.561433) (xy 230.945183 96.658551) + (xy 230.945175 96.658568) (xy 230.835097 96.924321) (xy 230.760646 97.202176) (xy 230.723101 97.487361) + (xy 230.7231 97.487377) (xy 230.7231 97.775022) (xy 230.723101 97.775038) (xy 230.760646 98.060223) + (xy 230.835097 98.338078) (xy 230.945175 98.603831) (xy 230.945183 98.603848) (xy 231.089004 98.852951) + (xy 231.089015 98.852967) (xy 231.264121 99.081171) (xy 231.264127 99.081178) (xy 231.467521 99.284572) + (xy 231.467528 99.284578) (xy 231.600807 99.386846) (xy 231.695741 99.459691) (xy 231.695748 99.459695) + (xy 231.944851 99.603516) (xy 231.944856 99.603518) (xy 231.944859 99.60352) (xy 231.944863 99.603521) + (xy 231.944868 99.603524) (xy 231.987477 99.621173) (xy 232.21062 99.713602) (xy 232.488475 99.788053) + (xy 232.773671 99.8256) (xy 232.773678 99.8256) (xy 233.061322 99.8256) (xy 233.061329 99.8256) + (xy 233.346525 99.788053) (xy 233.62438 99.713602) (xy 233.890141 99.60352) (xy 234.139259 99.459691) + (xy 234.367473 99.284577) (xy 234.570877 99.081173) (xy 234.745991 98.852959) (xy 234.88982 98.603841) + (xy 234.999902 98.33808) (xy 235.074353 98.060225) (xy 235.1119 97.775029) (xy 235.1119 97.54655) + (xy 236.922 97.54655) (xy 236.922 97.715849) (xy 236.948481 97.883047) (xy 237.000796 98.044053) + (xy 237.077652 98.194888) (xy 237.177148 98.331834) (xy 237.177152 98.331839) (xy 237.29686 98.451547) + (xy 237.296865 98.451551) (xy 237.373873 98.5075) (xy 237.433815 98.55105) (xy 237.527141 98.598602) + (xy 237.584646 98.627903) (xy 237.584648 98.627903) (xy 237.584651 98.627905) (xy 237.66885 98.655263) + (xy 237.745652 98.680218) (xy 237.912851 98.7067) (xy 237.912856 98.7067) (xy 238.082149 98.7067) + (xy 238.249347 98.680218) (xy 238.410349 98.627905) (xy 238.561185 98.55105) (xy 238.698141 98.451546) + (xy 238.817846 98.331841) (xy 238.91735 98.194885) (xy 238.994205 98.044049) (xy 239.046518 97.883047) + (xy 239.056383 97.820763) (xy 239.073 97.715849) (xy 239.073 97.54655) (xy 239.046518 97.379352) + (xy 239.001796 97.241713) (xy 238.994205 97.218351) (xy 238.994203 97.218348) (xy 238.994203 97.218346) + (xy 238.950176 97.13194) (xy 238.91735 97.067515) (xy 238.885781 97.024064) (xy 238.817851 96.930565) + (xy 238.817847 96.93056) (xy 238.698139 96.810852) (xy 238.698134 96.810848) (xy 238.561188 96.711352) + (xy 238.561187 96.711351) (xy 238.561185 96.71135) (xy 238.514082 96.68735) (xy 238.410353 96.634496) + (xy 238.249347 96.582181) (xy 238.082149 96.5557) (xy 238.082144 96.5557) (xy 237.912856 96.5557) + (xy 237.912851 96.5557) (xy 237.745652 96.582181) (xy 237.584646 96.634496) (xy 237.433811 96.711352) + (xy 237.296865 96.810848) (xy 237.29686 96.810852) (xy 237.177152 96.93056) (xy 237.177148 96.930565) + (xy 237.077652 97.067511) (xy 237.000796 97.218346) (xy 236.948481 97.379352) (xy 236.922 97.54655) + (xy 235.1119 97.54655) (xy 235.1119 97.487371) (xy 235.074353 97.202175) (xy 234.999902 96.92432) + (xy 234.88982 96.658559) (xy 234.889818 96.658556) (xy 234.889816 96.658551) (xy 234.745995 96.409448) + (xy 234.745991 96.409441) (xy 234.642069 96.274007) (xy 234.570878 96.181228) (xy 234.570872 96.181221) + (xy 234.367478 95.977827) (xy 234.367471 95.977821) (xy 234.139267 95.802715) (xy 234.139265 95.802713) + (xy 234.139259 95.802709) (xy 234.139254 95.802706) (xy 234.139251 95.802704) (xy 233.890148 95.658883) + (xy 233.890131 95.658875) (xy 233.624378 95.548797) (xy 233.346523 95.474346) (xy 233.061338 95.436801) + (xy 233.061335 95.4368) (xy 233.061329 95.4368) (xy 232.773671 95.4368) (xy 232.773665 95.4368) + (xy 232.773661 95.436801) (xy 232.488476 95.474346) (xy 232.210621 95.548797) (xy 231.944868 95.658875) + (xy 231.944851 95.658883) (xy 231.695748 95.802704) (xy 231.695732 95.802715) (xy 231.467528 95.977821) + (xy 231.467521 95.977827) (xy 231.264127 96.181221) (xy 231.19293 96.274007) (xy 231.136501 96.315209) + (xy 231.066755 96.319364) (xy 231.005835 96.285151) (xy 230.973083 96.223434) (xy 230.978896 96.153807) + (xy 230.987161 96.136531) (xy 231.040363 96.044383) (xy 231.148242 95.783939) (xy 231.221204 95.511642) + (xy 231.258 95.232151) (xy 231.258 94.950249) (xy 231.221204 94.670758) (xy 231.148242 94.398461) + (xy 231.141342 94.381804) (xy 231.116349 94.321464) (xy 231.040363 94.138017) (xy 231.040361 94.138014) + (xy 231.040359 94.138009) (xy 230.899416 93.89389) (xy 230.899412 93.893883) (xy 230.7278 93.670235) + (xy 230.727798 93.670233) (xy 230.727795 93.670229) (xy 230.52847 93.470904) (xy 230.503921 93.452067) + (xy 230.304817 93.299288) (xy 230.304811 93.299284) (xy 230.304809 93.299283) (xy 230.06069 93.15834) + (xy 230.060679 93.158335) (xy 229.800243 93.050459) (xy 229.527939 92.977495) (xy 229.248458 92.9407) + (xy 229.248451 92.9407) (xy 228.966549 92.9407) (xy 228.966541 92.9407) (xy 228.68706 92.977495) + (xy 228.414756 93.050459) (xy 228.15432 93.158335) (xy 228.154309 93.15834) (xy 227.91019 93.299283) + (xy 227.910184 93.299287) (xy 227.910183 93.299288) (xy 227.848401 93.346695) (xy 227.686529 93.470904) + (xy 227.487204 93.670229) (xy 227.363314 93.831685) (xy 227.329927 93.875197) (xy 227.315589 93.893882) + (xy 227.315583 93.89389) (xy 227.17464 94.138009) (xy 227.174635 94.13802) (xy 227.066759 94.398456) + (xy 226.993795 94.67076) (xy 226.957 94.950241) (xy 226.957 95.232158) (xy 226.993795 95.511639) + (xy 227.066759 95.783943) (xy 227.174635 96.044379) (xy 227.17464 96.04439) (xy 227.315583 96.288509) + (xy 227.315594 96.288525) (xy 227.446338 96.458914) (xy 227.471532 96.524083) (xy 227.457494 96.592528) + (xy 227.40868 96.642517) (xy 227.404258 96.644884) (xy 227.273813 96.71135) (xy 227.136865 96.810848) + (xy 227.13686 96.810852) (xy 227.017152 96.93056) (xy 227.017148 96.930565) (xy 226.917652 97.067511) + (xy 226.840796 97.218346) (xy 226.788481 97.379352) (xy 226.762 97.54655) (xy 225.7855 97.54655) + (xy 225.7855 95.946275) (xy 225.805185 95.879236) (xy 225.857989 95.833481) (xy 225.861999 95.831734) + (xy 225.937179 95.800594) (xy 226.068289 95.712989) (xy 226.179789 95.601489) (xy 226.267394 95.470379) + (xy 226.327737 95.324697) (xy 226.3585 95.170042) (xy 226.3585 95.012358) (xy 226.3585 95.012355) + (xy 226.358499 95.012353) (xy 226.327738 94.85771) (xy 226.327737 94.857703) (xy 226.327735 94.857698) + (xy 226.267397 94.712027) (xy 226.26739 94.712014) (xy 226.179789 94.580911) (xy 226.179786 94.580907) + (xy 226.068292 94.469413) (xy 226.068288 94.46941) (xy 225.937185 94.381809) (xy 225.937172 94.381802) + (xy 225.791501 94.321464) (xy 225.791489 94.321461) (xy 225.636845 94.2907) (xy 225.636842 94.2907) + (xy 225.479158 94.2907) (xy 225.479155 94.2907) (xy 225.32451 94.321461) (xy 225.324498 94.321464) + (xy 225.178827 94.381802) (xy 225.178814 94.381809) (xy 225.047711 94.46941) (xy 225.047707 94.469413) + (xy 224.936213 94.580907) (xy 224.93621 94.580911) (xy 224.848609 94.712014) (xy 224.848602 94.712027) + (xy 224.788264 94.857698) (xy 224.788261 94.85771) (xy 224.7575 95.012353) (xy 224.7575 95.170046) + (xy 224.788261 95.324689) (xy 224.788264 95.324701) (xy 224.848602 95.470372) (xy 224.848609 95.470385) + (xy 224.93621 95.601488) (xy 224.936213 95.601492) (xy 225.047707 95.712986) (xy 225.047711 95.712989) + (xy 225.178814 95.80059) (xy 225.178818 95.800592) (xy 225.178821 95.800594) (xy 225.253954 95.831715) + (xy 225.308356 95.875554) (xy 225.330421 95.941848) (xy 225.3305 95.946275) (xy 225.3305 100.293747) + (xy 225.3305 100.384253) (xy 225.365135 100.467868) (xy 225.499182 100.601915) (xy 225.532666 100.663236) + (xy 225.5355 100.689595) (xy 225.5355 104.897924) (xy 225.515815 104.964963) (xy 225.463011 105.010718) + (xy 225.458953 105.012485) (xy 225.383824 105.043604) (xy 225.383814 105.043609) (xy 225.252711 105.13121) + (xy 225.252707 105.131213) (xy 225.141213 105.242707) (xy 225.14121 105.242711) (xy 225.050221 105.378886) + (xy 225.048871 105.377984) (xy 225.005405 105.422226) (xy 224.937266 105.43768) (xy 224.871589 105.413843) + (xy 224.857338 105.401604) (xy 221.405819 101.950085) (xy 221.372334 101.888762) (xy 221.3695 101.862404) + (xy 221.3695 92.410241) (xy 233.307 92.410241) (xy 233.307 92.692158) (xy 233.343795 92.971639) + (xy 233.416759 93.243943) (xy 233.524635 93.504379) (xy 233.52464 93.50439) (xy 233.665583 93.748509) + (xy 233.665588 93.748517) (xy 233.8372 93.972165) (xy 233.837204 93.97217) (xy 234.036529 94.171495) + (xy 234.036533 94.171498) (xy 234.036535 94.1715) (xy 234.260183 94.343112) (xy 234.26019 94.343116) + (xy 234.504309 94.484059) (xy 234.504314 94.484061) (xy 234.504317 94.484063) (xy 234.764761 94.591942) + (xy 235.037058 94.664904) (xy 235.316549 94.7017) (xy 235.316556 94.7017) (xy 235.598444 94.7017) + (xy 235.598451 94.7017) (xy 235.877942 94.664904) (xy 236.150239 94.591942) (xy 236.410683 94.484063) + (xy 236.654817 94.343112) (xy 236.878465 94.1715) (xy 237.0778 93.972165) (xy 237.249412 93.748517) + (xy 237.390363 93.504383) (xy 237.498242 93.243939) (xy 237.571204 92.971642) (xy 237.608 92.692151) + (xy 237.608 92.410249) (xy 237.571204 92.130758) (xy 237.498242 91.858461) (xy 237.491342 91.841804) + (xy 237.466349 91.781464) (xy 237.390363 91.598017) (xy 237.390361 91.598014) (xy 237.390359 91.598009) + (xy 237.249416 91.35389) (xy 237.249412 91.353883) (xy 237.0778 91.130235) (xy 237.077798 91.130233) + (xy 237.077795 91.130229) (xy 236.87847 90.930904) (xy 236.878465 90.9309) (xy 236.654817 90.759288) + (xy 236.654811 90.759284) (xy 236.654809 90.759283) (xy 236.41069 90.61834) (xy 236.410679 90.618335) + (xy 236.150243 90.510459) (xy 235.877939 90.437495) (xy 235.598458 90.4007) (xy 235.598451 90.4007) + (xy 235.316549 90.4007) (xy 235.316541 90.4007) (xy 235.03706 90.437495) (xy 234.764756 90.510459) + (xy 234.50432 90.618335) (xy 234.504309 90.61834) (xy 234.26019 90.759283) (xy 234.260184 90.759287) + (xy 234.260183 90.759288) (xy 234.224557 90.786625) (xy 234.036529 90.930904) (xy 233.837204 91.130229) + (xy 233.767704 91.220803) (xy 233.676612 91.339517) (xy 233.665589 91.353882) (xy 233.665583 91.35389) + (xy 233.52464 91.598009) (xy 233.524635 91.59802) (xy 233.416759 91.858456) (xy 233.343795 92.13076) + (xy 233.307 92.410241) (xy 221.3695 92.410241) (xy 221.3695 89.697288) (xy 221.389185 89.630249) + (xy 221.405816 89.60961) (xy 225.23292 85.782222) (xy 225.294241 85.748735) (xy 225.320604 85.7459) + (xy 235.603252 85.7459) (xy 235.603253 85.7459) (xy 235.652234 85.725611) (xy 235.686869 85.711265) + (xy 239.966972 81.431098) (xy 239.967736 81.430533) (xy 239.967977 81.430105) (xy 239.970354 81.428596) + (xy 239.996472 81.409278) (xy 240.003669 81.405453) (xy 240.009359 81.403332) (xy 240.07044 81.369978) + (xy 240.070668 81.369858) (xy 240.070683 81.369846) (xy 240.070685 81.369846) (xy 240.165567 81.298816) + (xy 240.23103 81.274399) (xy 240.299303 81.28925) (xy 240.321077 81.304367) (xy 240.394589 81.368067) + (xy 240.394592 81.368068) (xy 240.394593 81.368069) (xy 240.524086 81.427208) (xy 240.525466 81.427838) + (xy 240.592505 81.447523) (xy 240.592509 81.447524) (xy 240.734925 81.468) (xy 240.734928 81.468) + (xy 248.0965 81.468) (xy 248.163539 81.487685) (xy 248.209294 81.540489) (xy 248.2205 81.592) (xy 248.2205 82.965011) + (xy 248.200815 83.03205) (xy 248.184184 83.052689) (xy 239.451738 91.785688) (xy 239.390416 91.819175) + (xy 239.320724 91.814193) (xy 239.316603 91.812572) (xy 239.251733 91.785703) (xy 239.241497 91.781463) + (xy 239.241493 91.781462) (xy 239.241489 91.781461) (xy 239.086845 91.7507) (xy 239.086842 91.7507) + (xy 238.929158 91.7507) (xy 238.929155 91.7507) (xy 238.77451 91.781461) (xy 238.774498 91.781464) + (xy 238.628827 91.841802) (xy 238.628814 91.841809) (xy 238.497711 91.92941) (xy 238.497707 91.929413) + (xy 238.386213 92.040907) (xy 238.38621 92.040911) (xy 238.298609 92.172014) (xy 238.298602 92.172027) + (xy 238.238264 92.317698) (xy 238.238261 92.31771) (xy 238.2075 92.472353) (xy 238.2075 92.630046) + (xy 238.238261 92.784689) (xy 238.238264 92.784701) (xy 238.298602 92.930372) (xy 238.298609 92.930385) + (xy 238.38621 93.061488) (xy 238.386213 93.061492) (xy 238.497707 93.172986) (xy 238.497711 93.172989) + (xy 238.628814 93.26059) (xy 238.628827 93.260597) (xy 238.724499 93.300225) (xy 238.774503 93.320937) + (xy 238.929153 93.351699) (xy 238.929156 93.3517) (xy 238.929158 93.3517) (xy 239.086844 93.3517) + (xy 239.086845 93.351699) (xy 239.241497 93.320937) (xy 239.387179 93.260594) (xy 239.518289 93.172989) + (xy 239.629789 93.061489) (xy 239.717394 92.930379) (xy 239.777737 92.784697) (xy 239.8085 92.630042) + (xy 239.8085 92.472358) (xy 239.8085 92.472355) (xy 239.808499 92.472353) (xy 239.784628 92.352346) + (xy 239.777737 92.317703) (xy 239.761978 92.279656) (xy 239.746605 92.242542) (xy 239.739136 92.173073) + (xy 239.770412 92.110594) (xy 239.773482 92.107411) (xy 239.785445 92.095448) (xy 240.384816 91.496038) + (xy 240.446138 91.462553) (xy 240.51583 91.467535) (xy 240.571765 91.509404) (xy 240.596184 91.574868) + (xy 240.5965 91.583718) (xy 240.5965 103.795754) (xy 240.596497 103.795762) (xy 240.5965 103.834539) + (xy 240.5965 103.886253) (xy 240.596502 103.88626) (xy 240.596503 103.886267) (xy 240.612741 103.925462) + (xy 240.613097 103.926323) (xy 240.613123 103.926387) (xy 240.631133 103.969866) (xy 240.631143 103.969881) + (xy 240.666729 104.005462) (xy 240.695132 104.033865) (xy 240.695137 104.033867) (xy 240.704041 104.04277) + (xy 240.704042 104.042771) (xy 241.265429 104.604086) (xy 246.132094 109.470124) (xy 246.165582 109.531443) + (xy 246.160602 109.601135) (xy 246.118734 109.657071) (xy 246.053271 109.681492) (xy 245.992086 109.669518) + (xy 245.991933 109.66989) (xy 245.990094 109.669128) (xy 245.989591 109.66903) (xy 245.988192 109.66834) + (xy 245.727743 109.560459) (xy 245.455439 109.487495) (xy 245.175958 109.4507) (xy 245.175951 109.4507) + (xy 244.894049 109.4507) (xy 244.894041 109.4507) (xy 244.61456 109.487495) (xy 244.342256 109.560459) + (xy 244.08182 109.668335) (xy 244.081809 109.66834) (xy 243.83769 109.809283) (xy 243.837684 109.809287) + (xy 243.837683 109.809288) (xy 243.790169 109.845747) (xy 243.614029 109.980904) (xy 243.414704 110.180229) + (xy 243.301381 110.327914) (xy 243.254327 110.389237) (xy 243.243089 110.403882) (xy 243.243083 110.40389) + (xy 243.10214 110.648009) (xy 243.102135 110.64802) (xy 242.994259 110.908456) (xy 242.921295 111.18076) + (xy 242.8845 111.460241) (xy 242.8845 111.742158) (xy 242.921295 112.021639) (xy 242.994259 112.293943) + (xy 243.102135 112.554379) (xy 243.10214 112.55439) (xy 243.243083 112.798509) (xy 243.243088 112.798517) + (xy 243.361074 112.952278) (xy 243.414704 113.02217) (xy 243.614029 113.221495) (xy 243.614033 113.221498) + (xy 243.614035 113.2215) (xy 243.837683 113.393112) (xy 243.83769 113.393116) (xy 244.081809 113.534059) + (xy 244.081814 113.534061) (xy 244.081817 113.534063) (xy 244.189834 113.578805) (xy 244.307486 113.627538) + (xy 244.342261 113.641942) (xy 244.614558 113.714904) (xy 244.894049 113.7517) (xy 244.894056 113.7517) + (xy 245.175944 113.7517) (xy 245.175951 113.7517) (xy 245.455442 113.714904) (xy 245.727739 113.641942) + (xy 245.988183 113.534063) (xy 246.232317 113.393112) (xy 246.455965 113.2215) (xy 246.6553 113.022165) + (xy 246.826912 112.798517) (xy 246.967863 112.554383) (xy 247.075742 112.293939) (xy 247.148704 112.021642) + (xy 247.1855 111.742151) (xy 247.1855 111.460249) (xy 247.148704 111.180758) (xy 247.075742 110.908461) + (xy 246.967863 110.648017) (xy 246.967856 110.648005) (xy 246.96705 110.646369) (xy 246.966955 110.645824) + (xy 246.96631 110.644267) (xy 246.966658 110.644122) (xy 246.955051 110.577537) (xy 246.98217 110.513145) + (xy 247.039796 110.473636) (xy 247.109635 110.471555) (xy 247.165936 110.503833) (xy 247.819474 111.157287) + (xy 247.852963 111.218608) (xy 247.847983 111.2883) (xy 247.84636 111.292425) (xy 247.815263 111.367502) + (xy 247.815261 111.36751) (xy 247.7845 111.522153) (xy 247.7845 111.679846) (xy 247.815261 111.834489) + (xy 247.815264 111.834501) (xy 247.875602 111.980172) (xy 247.875609 111.980185) (xy 247.96321 112.111288) + (xy 247.963213 112.111292) (xy 248.074707 112.222786) (xy 248.074711 112.222789) (xy 248.205814 112.31039) + (xy 248.205827 112.310397) (xy 248.351498 112.370735) (xy 248.351503 112.370737) (xy 248.506153 112.401499) + (xy 248.506156 112.4015) (xy 248.506158 112.4015) (xy 248.663844 112.4015) (xy 248.663845 112.401499) + (xy 248.818497 112.370737) (xy 248.964179 112.310394) (xy 249.095289 112.222789) (xy 249.206789 112.111289) + (xy 249.248123 112.049428) (xy 249.301733 112.004625) (xy 249.371058 111.995917) (xy 249.434086 112.026071) + (xy 249.438905 112.030639) (xy 249.970181 112.561914) (xy 250.003666 112.623237) (xy 250.0065 112.649595) + (xy 250.0065 123.184767) (xy 250.006493 123.184784) (xy 250.0065 123.227019) (xy 250.0065 123.275269) + (xy 250.006507 123.275288) (xy 250.006508 123.275289) (xy 250.023527 123.316359) (xy 250.041135 123.358868) + (xy 250.041136 123.358869) (xy 250.041153 123.358894) (xy 250.041155 123.358899) (xy 250.075394 123.393127) + (xy 250.105132 123.422865) (xy 250.105148 123.422871) (xy 253.084167 126.400933) (xy 253.117662 126.462249) + (xy 253.1205 126.488627) (xy 253.1205 129.795924) (xy 253.100815 129.862963) (xy 253.048011 129.908718) + (xy 253.043953 129.910485) (xy 252.968824 129.941604) (xy 252.968814 129.941609) (xy 252.837711 130.02921) + (xy 252.837707 130.029213) (xy 252.726213 130.140707) (xy 252.72621 130.140711) (xy 252.638609 130.271814) + (xy 252.638602 130.271827) (xy 252.578264 130.417498) (xy 252.578261 130.41751) (xy 252.5475 130.572153) + (xy 252.5475 130.729846) (xy 252.578261 130.884489) (xy 252.578264 130.884501) (xy 252.638602 131.030172) + (xy 252.638609 131.030185) (xy 252.72621 131.161288) (xy 252.726213 131.161292) (xy 252.837707 131.272786) + (xy 252.837711 131.272789) (xy 252.968814 131.36039) (xy 252.968827 131.360397) (xy 253.110679 131.419153) + (xy 253.114503 131.420737) (xy 253.269153 131.451499) (xy 253.269156 131.4515) (xy 253.269158 131.4515) + (xy 253.426844 131.4515) (xy 253.426845 131.451499) (xy 253.581497 131.420737) (xy 253.727179 131.360394) + (xy 253.858289 131.272789) (xy 253.902377 131.228701) (xy 253.961819 131.16926) (xy 254.023142 131.135775) + (xy 254.092834 131.140759) (xy 254.148767 131.182631) (xy 254.173184 131.248095) (xy 254.1735 131.256941) + (xy 254.1735 138.662747) (xy 254.1735 138.753253) (xy 254.205303 138.830032) (xy 254.208136 138.83687) + (xy 262.608181 147.236914) (xy 262.641666 147.298237) (xy 262.6445 147.324595) (xy 262.6445 148.845924) + (xy 262.624815 148.912963) (xy 262.572011 148.958718) (xy 262.567953 148.960485) (xy 262.492824 148.991604) + (xy 262.492814 148.991609) (xy 262.361711 149.07921) (xy 262.361707 149.079213) (xy 262.250213 149.190707) + (xy 262.25021 149.190711) (xy 262.162609 149.321814) (xy 262.162602 149.321827) (xy 262.102264 149.467498) + (xy 262.102261 149.46751) (xy 262.0715 149.622153) (xy 262.0715 149.779846) (xy 262.102261 149.934489) + (xy 262.102264 149.934501) (xy 262.162602 150.080172) (xy 262.162609 150.080185) (xy 262.25021 150.211288) + (xy 262.250213 150.211292) (xy 262.361707 150.322786) (xy 262.361711 150.322789) (xy 262.492814 150.41039) + (xy 262.492827 150.410397) (xy 262.638498 150.470735) (xy 262.638503 150.470737) (xy 262.793153 150.501499) + (xy 262.793156 150.5015) (xy 262.793158 150.5015) (xy 262.950844 150.5015) (xy 262.950845 150.501499) + (xy 262.969658 150.497757) (xy 263.024309 150.486887) (xy 263.0939 150.493114) (xy 263.149077 150.535977) + (xy 263.172322 150.601867) (xy 263.1725 150.608504) (xy 263.1725 154.601559) (xy 263.152815 154.668598) + (xy 263.100011 154.714353) (xy 263.030853 154.724297) (xy 262.967297 154.695272) (xy 262.929523 154.636494) + (xy 262.926027 154.620957) (xy 262.911518 154.529352) (xy 262.884836 154.447236) (xy 262.859205 154.368351) + (xy 262.859203 154.368348) (xy 262.859203 154.368346) (xy 262.828344 154.307783) (xy 262.78235 154.217515) + (xy 262.750781 154.174064) (xy 262.682851 154.080565) (xy 262.682847 154.08056) (xy 262.563139 153.960852) + (xy 262.563134 153.960848) (xy 262.426188 153.861352) (xy 262.426187 153.861351) (xy 262.426185 153.86135) + (xy 262.379082 153.83735) (xy 262.275353 153.784496) (xy 262.114347 153.732181) (xy 261.947149 153.7057) + (xy 261.947144 153.7057) (xy 261.777856 153.7057) (xy 261.777851 153.7057) (xy 261.610652 153.732181) + (xy 261.449646 153.784496) (xy 261.298811 153.861352) (xy 261.161865 153.960848) (xy 261.16186 153.960852) + (xy 261.042152 154.08056) (xy 261.042148 154.080565) (xy 260.942652 154.217511) (xy 260.865796 154.368346) + (xy 260.813481 154.529352) (xy 260.787 154.69655) (xy 260.787 154.865849) (xy 260.813481 155.033047) + (xy 260.865796 155.194053) (xy 260.942652 155.344888) (xy 261.042148 155.481834) (xy 261.042152 155.481839) + (xy 261.16186 155.601547) (xy 261.161865 155.601551) (xy 261.281317 155.688337) (xy 261.298815 155.70105) + (xy 261.38409 155.7445) (xy 261.449646 155.777903) (xy 261.449648 155.777903) (xy 261.449651 155.777905) + (xy 261.53595 155.805945) (xy 261.610652 155.830218) (xy 261.777851 155.8567) (xy 261.777856 155.8567) + (xy 261.947149 155.8567) (xy 262.114347 155.830218) (xy 262.157277 155.816269) (xy 262.275349 155.777905) + (xy 262.426185 155.70105) (xy 262.563141 155.601546) (xy 262.682846 155.481841) (xy 262.78235 155.344885) + (xy 262.859205 155.194049) (xy 262.911518 155.033047) (xy 262.926027 154.941442) (xy 262.955956 154.878307) + (xy 263.015268 154.841376) (xy 263.08513 154.842374) (xy 263.143363 154.880984) (xy 263.171477 154.944947) + (xy 263.1725 154.96084) (xy 263.1725 163.315404) (xy 263.152815 163.382443) (xy 263.136181 163.403085) + (xy 258.553762 167.985503) (xy 258.492439 168.018988) (xy 258.422747 168.014004) (xy 258.418629 168.012383) + (xy 258.343501 167.981264) (xy 258.343489 167.981261) (xy 258.188845 167.9505) (xy 258.188842 167.9505) + (xy 258.031158 167.9505) (xy 258.031155 167.9505) (xy 257.87651 167.981261) (xy 257.876498 167.981264) + (xy 257.730827 168.041602) (xy 257.730814 168.041609) (xy 257.599711 168.12921) (xy 257.599707 168.129213) + (xy 257.488213 168.240707) (xy 257.48821 168.240711) (xy 257.400609 168.371814) (xy 257.400603 168.371826) + (xy 257.340264 168.517498) (xy 257.340261 168.51751) (xy 257.3095 168.672153) (xy 257.3095 168.829846) + (xy 257.340261 168.984489) (xy 257.340264 168.984501) (xy 257.400602 169.130172) (xy 257.400609 169.130185) + (xy 257.48821 169.261288) (xy 257.488213 169.261292) (xy 257.599707 169.372786) (xy 257.599711 169.372789) + (xy 257.730814 169.46039) (xy 257.730827 169.460397) (xy 257.834063 169.503158) (xy 257.876503 169.520737) + (xy 258.031153 169.551499) (xy 258.031156 169.5515) (xy 258.031158 169.5515) (xy 258.188844 169.5515) + (xy 258.188845 169.551499) (xy 258.343497 169.520737) (xy 258.489179 169.460394) (xy 258.620289 169.372789) + (xy 258.731789 169.261289) (xy 258.819394 169.130179) (xy 258.823443 169.120405) (xy 258.833067 169.097166) + (xy 258.879737 168.984497) (xy 258.9105 168.829842) (xy 258.9105 168.672158) (xy 258.9105 168.672155) + (xy 258.910499 168.672153) (xy 258.908699 168.663106) (xy 258.879737 168.517503) (xy 258.848614 168.442365) + (xy 258.841146 168.372901) (xy 258.87242 168.310422) (xy 258.875466 168.307265) (xy 263.592866 163.589868) + (xy 263.592866 163.589866) (xy 263.592868 163.589865) (xy 263.610183 163.54806) (xy 263.6275 163.506253) + (xy 263.6275 163.415747) (xy 263.6275 149.993533) (xy 263.636939 149.94608) (xy 263.639167 149.940701) + (xy 263.641737 149.934497) (xy 263.6725 149.779842) (xy 263.6725 149.622158) (xy 263.6725 149.622155) + (xy 263.672499 149.622153) (xy 263.641738 149.467505) (xy 263.636939 149.45592) (xy 263.6275 149.408466) + (xy 263.6275 147.496126) (xy 263.647185 147.429087) (xy 263.699989 147.383332) (xy 263.769147 147.373388) + (xy 263.832703 147.402413) (xy 263.839181 147.408445) (xy 266.160733 149.730241) (xy 267.917937 151.48763) + (xy 267.951419 151.548955) (xy 267.94643 151.618647) (xy 267.917933 151.662988) (xy 267.85021 151.730711) + (xy 267.762609 151.861814) (xy 267.762602 151.861827) (xy 267.702264 152.007498) (xy 267.702261 152.00751) + (xy 267.6715 152.162153) (xy 267.6715 152.319846) (xy 267.702261 152.474489) (xy 267.702264 152.474501) + (xy 267.762602 152.620172) (xy 267.762609 152.620185) (xy 267.85021 152.751288) (xy 267.850213 152.751292) + (xy 267.961707 152.862786) (xy 267.961711 152.862789) (xy 268.092814 152.95039) (xy 268.092818 152.950392) + (xy 268.092821 152.950394) (xy 268.167954 152.981515) (xy 268.222356 153.025354) (xy 268.244421 153.091648) + (xy 268.2445 153.096075) (xy 268.2445 166.383404) (xy 268.224815 166.450443) (xy 268.208181 166.471085) + (xy 264.153762 170.525503) (xy 264.092439 170.558988) (xy 264.022747 170.554004) (xy 264.018629 170.552383) + (xy 263.943501 170.521264) (xy 263.943489 170.521261) (xy 263.788845 170.4905) (xy 263.788842 170.4905) + (xy 263.631158 170.4905) (xy 263.631155 170.4905) (xy 263.47651 170.521261) (xy 263.476498 170.521264) + (xy 263.330827 170.581602) (xy 263.330814 170.581609) (xy 263.199711 170.66921) (xy 263.199707 170.669213) + (xy 263.088213 170.780707) (xy 263.08821 170.780711) (xy 263.000609 170.911814) (xy 263.000602 170.911827) + (xy 262.940264 171.057498) (xy 262.940261 171.05751) (xy 262.9095 171.212153) (xy 262.9095 171.369846) + (xy 262.940261 171.524489) (xy 262.940264 171.524501) (xy 263.000602 171.670172) (xy 263.000609 171.670185) + (xy 263.08821 171.801288) (xy 263.088213 171.801292) (xy 263.199707 171.912786) (xy 263.199711 171.912789) + (xy 263.330814 172.00039) (xy 263.330827 172.000397) (xy 263.447206 172.048602) (xy 263.476503 172.060737) + (xy 263.606434 172.086582) (xy 263.631153 172.091499) (xy 263.631156 172.0915) (xy 263.631158 172.0915) + (xy 263.788844 172.0915) (xy 263.788845 172.091499) (xy 263.943497 172.060737) (xy 264.089179 172.000394) + (xy 264.220289 171.912789) (xy 264.331789 171.801289) (xy 264.419394 171.670179) (xy 264.479737 171.524497) + (xy 264.5105 171.369842) (xy 264.5105 171.212158) (xy 264.5105 171.212155) (xy 264.510499 171.212153) + (xy 264.508699 171.203106) (xy 264.479737 171.057503) (xy 264.448614 170.982365) (xy 264.441146 170.912901) + (xy 264.47242 170.850422) (xy 264.475466 170.847265) (xy 265.129221 170.19351) (xy 265.190542 170.160027) + (xy 265.260234 170.165011) (xy 265.316167 170.206883) (xy 265.340584 170.272347) (xy 265.32848 170.33418) + (xy 265.32869 170.334267) (xy 265.32826 170.335304) (xy 265.32812 170.336021) (xy 265.32714 170.338008) + (xy 265.219259 170.598456) (xy 265.146295 170.87076) (xy 265.1095 171.150241) (xy 265.1095 171.432158) + (xy 265.146295 171.711639) (xy 265.219259 171.983943) (xy 265.327135 172.244379) (xy 265.32714 172.24439) + (xy 265.468083 172.488509) (xy 265.468094 172.488525) (xy 265.598838 172.658914) (xy 265.624032 172.724083) + (xy 265.609994 172.792528) (xy 265.56118 172.842517) (xy 265.556758 172.844884) (xy 265.426313 172.91135) + (xy 265.289365 173.010848) (xy 265.28936 173.010852) (xy 265.169652 173.13056) (xy 265.169648 173.130565) + (xy 265.070152 173.267511) (xy 264.993296 173.418346) (xy 264.940981 173.579352) (xy 264.9145 173.74655) + (xy 264.9145 173.915849) (xy 264.940981 174.083047) (xy 264.993296 174.244053) (xy 265.070152 174.394888) + (xy 265.169648 174.531834) (xy 265.169652 174.531839) (xy 265.28936 174.651547) (xy 265.289365 174.651551) + (xy 265.354481 174.69886) (xy 265.426315 174.75105) (xy 265.522425 174.80002) (xy 265.577146 174.827903) + (xy 265.577148 174.827903) (xy 265.577151 174.827905) (xy 265.66345 174.855945) (xy 265.738152 174.880218) + (xy 265.905351 174.9067) (xy 265.905356 174.9067) (xy 266.074649 174.9067) (xy 266.241847 174.880218) + (xy 266.402849 174.827905) (xy 266.553685 174.75105) (xy 266.690641 174.651546) (xy 266.810346 174.531841) + (xy 266.90985 174.394885) (xy 266.986705 174.244049) (xy 267.039018 174.083047) (xy 267.046131 174.038138) + (xy 267.0655 173.915849) (xy 267.0655 173.74655) (xy 267.039928 173.585098) (xy 267.048882 173.515805) + (xy 267.093879 173.462353) (xy 267.16063 173.441713) (xy 267.162401 173.4417) (xy 267.400944 173.4417) + (xy 267.400951 173.4417) (xy 267.680442 173.404904) (xy 267.952739 173.331942) (xy 268.213183 173.224063) + (xy 268.457317 173.083112) (xy 268.680965 172.9115) (xy 268.8803 172.712165) (xy 268.947992 172.623946) + (xy 269.00442 172.582744) (xy 269.074166 172.578589) (xy 269.135086 172.612801) (xy 269.167839 172.674518) + (xy 269.162026 172.744146) (xy 269.153755 172.761433) (xy 269.097683 172.858551) (xy 269.097675 172.858568) + (xy 268.987597 173.124321) (xy 268.913146 173.402176) (xy 268.875601 173.687361) (xy 268.8756 173.687377) + (xy 268.8756 173.975022) (xy 268.875601 173.975038) (xy 268.913146 174.260223) (xy 268.987597 174.538078) + (xy 269.097675 174.803831) (xy 269.097683 174.803848) (xy 269.241504 175.052951) (xy 269.241515 175.052967) + (xy 269.416621 175.281171) (xy 269.416627 175.281178) (xy 269.620021 175.484572) (xy 269.620028 175.484578) + (xy 269.707732 175.551875) (xy 269.848241 175.659691) (xy 269.848248 175.659695) (xy 270.097351 175.803516) + (xy 270.097356 175.803518) (xy 270.097359 175.80352) (xy 270.097363 175.803521) (xy 270.097368 175.803524) + (xy 270.202723 175.847163) (xy 270.36312 175.913602) (xy 270.640975 175.988053) (xy 270.926171 176.0256) + (xy 270.926178 176.0256) (xy 271.213822 176.0256) (xy 271.213829 176.0256) (xy 271.499025 175.988053) + (xy 271.77688 175.913602) (xy 272.042641 175.80352) (xy 272.291759 175.659691) (xy 272.519973 175.484577) + (xy 272.723377 175.281173) (xy 272.898491 175.052959) (xy 273.04232 174.803841) (xy 273.152402 174.53808) + (xy 273.226853 174.260225) (xy 273.2644 173.975029) (xy 273.2644 173.74655) (xy 275.0745 173.74655) + (xy 275.0745 173.915849) (xy 275.100981 174.083047) (xy 275.153296 174.244053) (xy 275.230152 174.394888) + (xy 275.329648 174.531834) (xy 275.329652 174.531839) (xy 275.44936 174.651547) (xy 275.449365 174.651551) + (xy 275.514481 174.69886) (xy 275.586315 174.75105) (xy 275.682425 174.80002) (xy 275.737146 174.827903) + (xy 275.737148 174.827903) (xy 275.737151 174.827905) (xy 275.82345 174.855945) (xy 275.898152 174.880218) + (xy 276.065351 174.9067) (xy 276.065356 174.9067) (xy 276.234649 174.9067) (xy 276.401847 174.880218) + (xy 276.562849 174.827905) (xy 276.713685 174.75105) (xy 276.850641 174.651546) (xy 276.970346 174.531841) + (xy 277.06985 174.394885) (xy 277.146705 174.244049) (xy 277.199018 174.083047) (xy 277.206131 174.038138) + (xy 277.2255 173.915849) (xy 277.2255 173.74655) (xy 283.9645 173.74655) (xy 283.9645 173.915849) + (xy 283.990981 174.083047) (xy 284.043296 174.244053) (xy 284.120152 174.394888) (xy 284.219648 174.531834) + (xy 284.219652 174.531839) (xy 284.33936 174.651547) (xy 284.339365 174.651551) (xy 284.404481 174.69886) + (xy 284.476315 174.75105) (xy 284.572425 174.80002) (xy 284.627146 174.827903) (xy 284.627148 174.827903) + (xy 284.627151 174.827905) (xy 284.71345 174.855945) (xy 284.788152 174.880218) (xy 284.955351 174.9067) + (xy 284.955356 174.9067) (xy 285.124649 174.9067) (xy 285.291847 174.880218) (xy 285.452849 174.827905) + (xy 285.603685 174.75105) (xy 285.740641 174.651546) (xy 285.860346 174.531841) (xy 285.95985 174.394885) + (xy 286.036705 174.244049) (xy 286.089018 174.083047) (xy 286.096131 174.038138) (xy 286.1155 173.915849) + (xy 286.1155 173.74655) (xy 286.089928 173.585098) (xy 286.098882 173.515805) (xy 286.143879 173.462353) + (xy 286.21063 173.441713) (xy 286.212401 173.4417) (xy 286.450944 173.4417) (xy 286.450951 173.4417) + (xy 286.730442 173.404904) (xy 287.002739 173.331942) (xy 287.263183 173.224063) (xy 287.507317 173.083112) + (xy 287.730965 172.9115) (xy 287.9303 172.712165) (xy 287.997992 172.623946) (xy 288.05442 172.582744) + (xy 288.124166 172.578589) (xy 288.185086 172.612801) (xy 288.217839 172.674518) (xy 288.212026 172.744146) + (xy 288.203755 172.761433) (xy 288.147683 172.858551) (xy 288.147675 172.858568) (xy 288.037597 173.124321) + (xy 287.963146 173.402176) (xy 287.925601 173.687361) (xy 287.9256 173.687377) (xy 287.9256 173.975022) + (xy 287.925601 173.975038) (xy 287.963146 174.260223) (xy 288.037597 174.538078) (xy 288.147675 174.803831) + (xy 288.147683 174.803848) (xy 288.291504 175.052951) (xy 288.291515 175.052967) (xy 288.466621 175.281171) + (xy 288.466627 175.281178) (xy 288.670021 175.484572) (xy 288.670028 175.484578) (xy 288.757732 175.551875) + (xy 288.898241 175.659691) (xy 288.898248 175.659695) (xy 289.147351 175.803516) (xy 289.147356 175.803518) + (xy 289.147359 175.80352) (xy 289.147363 175.803521) (xy 289.147368 175.803524) (xy 289.252723 175.847163) + (xy 289.41312 175.913602) (xy 289.690975 175.988053) (xy 289.976171 176.0256) (xy 289.976178 176.0256) + (xy 290.263822 176.0256) (xy 290.263829 176.0256) (xy 290.549025 175.988053) (xy 290.82688 175.913602) + (xy 291.092641 175.80352) (xy 291.341759 175.659691) (xy 291.569973 175.484577) (xy 291.773377 175.281173) + (xy 291.948491 175.052959) (xy 292.09232 174.803841) (xy 292.202402 174.53808) (xy 292.276853 174.260225) + (xy 292.3144 173.975029) (xy 292.3144 173.74655) (xy 294.1245 173.74655) (xy 294.1245 173.915849) + (xy 294.150981 174.083047) (xy 294.203296 174.244053) (xy 294.280152 174.394888) (xy 294.379648 174.531834) + (xy 294.379652 174.531839) (xy 294.49936 174.651547) (xy 294.499365 174.651551) (xy 294.564481 174.69886) + (xy 294.636315 174.75105) (xy 294.732425 174.80002) (xy 294.787146 174.827903) (xy 294.787148 174.827903) + (xy 294.787151 174.827905) (xy 294.87345 174.855945) (xy 294.948152 174.880218) (xy 295.115351 174.9067) + (xy 295.115356 174.9067) (xy 295.284649 174.9067) (xy 295.451847 174.880218) (xy 295.612849 174.827905) + (xy 295.763685 174.75105) (xy 295.900641 174.651546) (xy 296.020346 174.531841) (xy 296.11985 174.394885) + (xy 296.196705 174.244049) (xy 296.249018 174.083047) (xy 296.256131 174.038138) (xy 296.2755 173.915849) + (xy 296.2755 173.74655) (xy 303.0145 173.74655) (xy 303.0145 173.915849) (xy 303.040981 174.083047) + (xy 303.093296 174.244053) (xy 303.170152 174.394888) (xy 303.269648 174.531834) (xy 303.269652 174.531839) + (xy 303.38936 174.651547) (xy 303.389365 174.651551) (xy 303.454481 174.69886) (xy 303.526315 174.75105) + (xy 303.622425 174.80002) (xy 303.677146 174.827903) (xy 303.677148 174.827903) (xy 303.677151 174.827905) + (xy 303.76345 174.855945) (xy 303.838152 174.880218) (xy 304.005351 174.9067) (xy 304.005356 174.9067) + (xy 304.174649 174.9067) (xy 304.341847 174.880218) (xy 304.502849 174.827905) (xy 304.653685 174.75105) + (xy 304.790641 174.651546) (xy 304.910346 174.531841) (xy 305.00985 174.394885) (xy 305.086705 174.244049) + (xy 305.139018 174.083047) (xy 305.146131 174.038138) (xy 305.1655 173.915849) (xy 305.1655 173.74655) + (xy 305.139928 173.585098) (xy 305.148882 173.515805) (xy 305.193879 173.462353) (xy 305.26063 173.441713) + (xy 305.262401 173.4417) (xy 305.500944 173.4417) (xy 305.500951 173.4417) (xy 305.780442 173.404904) + (xy 306.052739 173.331942) (xy 306.313183 173.224063) (xy 306.557317 173.083112) (xy 306.780965 172.9115) + (xy 306.9803 172.712165) (xy 307.047992 172.623946) (xy 307.10442 172.582744) (xy 307.174166 172.578589) + (xy 307.235086 172.612801) (xy 307.267839 172.674518) (xy 307.262026 172.744146) (xy 307.253755 172.761433) + (xy 307.197683 172.858551) (xy 307.197675 172.858568) (xy 307.087597 173.124321) (xy 307.013146 173.402176) + (xy 306.975601 173.687361) (xy 306.9756 173.687377) (xy 306.9756 173.975022) (xy 306.975601 173.975038) + (xy 307.013146 174.260223) (xy 307.087597 174.538078) (xy 307.197675 174.803831) (xy 307.197683 174.803848) + (xy 307.341504 175.052951) (xy 307.341515 175.052967) (xy 307.516621 175.281171) (xy 307.516627 175.281178) + (xy 307.720021 175.484572) (xy 307.720028 175.484578) (xy 307.807732 175.551875) (xy 307.948241 175.659691) + (xy 307.948248 175.659695) (xy 308.197351 175.803516) (xy 308.197356 175.803518) (xy 308.197359 175.80352) + (xy 308.197363 175.803521) (xy 308.197368 175.803524) (xy 308.302723 175.847163) (xy 308.46312 175.913602) + (xy 308.740975 175.988053) (xy 309.026171 176.0256) (xy 309.026178 176.0256) (xy 309.313822 176.0256) + (xy 309.313829 176.0256) (xy 309.599025 175.988053) (xy 309.87688 175.913602) (xy 310.142641 175.80352) + (xy 310.391759 175.659691) (xy 310.619973 175.484577) (xy 310.823377 175.281173) (xy 310.998491 175.052959) + (xy 311.14232 174.803841) (xy 311.252402 174.53808) (xy 311.326853 174.260225) (xy 311.3644 173.975029) + (xy 311.3644 173.74655) (xy 313.1745 173.74655) (xy 313.1745 173.915849) (xy 313.200981 174.083047) + (xy 313.253296 174.244053) (xy 313.330152 174.394888) (xy 313.429648 174.531834) (xy 313.429652 174.531839) + (xy 313.54936 174.651547) (xy 313.549365 174.651551) (xy 313.614481 174.69886) (xy 313.686315 174.75105) + (xy 313.782425 174.80002) (xy 313.837146 174.827903) (xy 313.837148 174.827903) (xy 313.837151 174.827905) + (xy 313.92345 174.855945) (xy 313.998152 174.880218) (xy 314.165351 174.9067) (xy 314.165356 174.9067) + (xy 314.334649 174.9067) (xy 314.501847 174.880218) (xy 314.662849 174.827905) (xy 314.813685 174.75105) + (xy 314.950641 174.651546) (xy 315.070346 174.531841) (xy 315.16985 174.394885) (xy 315.246705 174.244049) + (xy 315.299018 174.083047) (xy 315.306131 174.038138) (xy 315.3255 173.915849) (xy 315.3255 173.74655) + (xy 315.299018 173.579352) (xy 315.274745 173.50465) (xy 315.246705 173.418351) (xy 315.246703 173.418348) + (xy 315.246703 173.418346) (xy 315.181952 173.291267) (xy 315.16985 173.267515) (xy 315.138281 173.224064) + (xy 315.070351 173.130565) (xy 315.070347 173.13056) (xy 314.950639 173.010852) (xy 314.950634 173.010848) + (xy 314.813688 172.911352) (xy 314.813687 172.911351) (xy 314.813685 172.91135) (xy 314.766002 172.887054) + (xy 314.662853 172.834496) (xy 314.501847 172.782181) (xy 314.334649 172.7557) (xy 314.334644 172.7557) + (xy 314.165356 172.7557) (xy 314.165351 172.7557) (xy 313.998152 172.782181) (xy 313.837146 172.834496) + (xy 313.686311 172.911352) (xy 313.549365 173.010848) (xy 313.54936 173.010852) (xy 313.429652 173.13056) + (xy 313.429648 173.130565) (xy 313.330152 173.267511) (xy 313.253296 173.418346) (xy 313.200981 173.579352) + (xy 313.1745 173.74655) (xy 311.3644 173.74655) (xy 311.3644 173.687371) (xy 311.326853 173.402175) + (xy 311.252402 173.12432) (xy 311.165492 172.9145) (xy 311.142324 172.858568) (xy 311.142316 172.858551) + (xy 310.998495 172.609448) (xy 310.998491 172.609441) (xy 310.89124 172.469668) (xy 310.823378 172.381228) + (xy 310.823372 172.381221) (xy 310.619978 172.177827) (xy 310.619971 172.177821) (xy 310.391767 172.002715) + (xy 310.391765 172.002713) (xy 310.391759 172.002709) (xy 310.391754 172.002706) (xy 310.391751 172.002704) + (xy 310.142648 171.858883) (xy 310.142631 171.858875) (xy 309.876878 171.748797) (xy 309.599023 171.674346) + (xy 309.313838 171.636801) (xy 309.313835 171.6368) (xy 309.313829 171.6368) (xy 309.026171 171.6368) + (xy 309.026165 171.6368) (xy 309.026161 171.636801) (xy 308.740976 171.674346) (xy 308.463121 171.748797) + (xy 308.197368 171.858875) (xy 308.197351 171.858883) (xy 307.948248 172.002704) (xy 307.948232 172.002715) + (xy 307.720028 172.177821) (xy 307.720021 172.177827) (xy 307.516627 172.381221) (xy 307.44543 172.474007) + (xy 307.389001 172.515209) (xy 307.319255 172.519364) (xy 307.258335 172.485151) (xy 307.225583 172.423434) + (xy 307.231396 172.353807) (xy 307.239661 172.336531) (xy 307.292863 172.244383) (xy 307.400742 171.983939) + (xy 307.473704 171.711642) (xy 307.5105 171.432151) (xy 307.5105 171.150249) (xy 307.50923 171.140606) + (xy 307.49237 171.012538) (xy 307.473704 170.870758) (xy 307.400742 170.598461) (xy 307.39376 170.581606) + (xy 307.368765 170.521261) (xy 307.292863 170.338017) (xy 307.292861 170.338014) (xy 307.292859 170.338009) + (xy 307.151916 170.09389) (xy 307.151912 170.093883) (xy 306.9803 169.870235) (xy 306.980298 169.870233) + (xy 306.980295 169.870229) (xy 306.78097 169.670904) (xy 306.755109 169.65106) (xy 306.557317 169.499288) + (xy 306.557311 169.499284) (xy 306.557309 169.499283) (xy 306.31319 169.35834) (xy 306.313179 169.358335) + (xy 306.052743 169.250459) (xy 305.780439 169.177495) (xy 305.500958 169.1407) (xy 305.500951 169.1407) + (xy 305.219049 169.1407) (xy 305.219041 169.1407) (xy 304.93956 169.177495) (xy 304.667256 169.250459) + (xy 304.40682 169.358335) (xy 304.406809 169.35834) (xy 304.16269 169.499283) (xy 304.162684 169.499287) + (xy 304.162683 169.499288) (xy 304.15764 169.503158) (xy 303.939029 169.670904) (xy 303.739704 169.870229) + (xy 303.568089 170.093882) (xy 303.568083 170.09389) (xy 303.42714 170.338009) (xy 303.427135 170.33802) + (xy 303.319259 170.598456) (xy 303.246295 170.87076) (xy 303.2095 171.150241) (xy 303.2095 171.432158) + (xy 303.246295 171.711639) (xy 303.319259 171.983943) (xy 303.427135 172.244379) (xy 303.42714 172.24439) + (xy 303.568083 172.488509) (xy 303.568094 172.488525) (xy 303.698838 172.658914) (xy 303.724032 172.724083) + (xy 303.709994 172.792528) (xy 303.66118 172.842517) (xy 303.656758 172.844884) (xy 303.526313 172.91135) + (xy 303.389365 173.010848) (xy 303.38936 173.010852) (xy 303.269652 173.13056) (xy 303.269648 173.130565) + (xy 303.170152 173.267511) (xy 303.093296 173.418346) (xy 303.040981 173.579352) (xy 303.0145 173.74655) + (xy 296.2755 173.74655) (xy 296.249018 173.579352) (xy 296.224745 173.50465) (xy 296.196705 173.418351) + (xy 296.196703 173.418348) (xy 296.196703 173.418346) (xy 296.131952 173.291267) (xy 296.11985 173.267515) + (xy 296.088281 173.224064) (xy 296.020351 173.130565) (xy 296.020347 173.13056) (xy 295.900639 173.010852) + (xy 295.900634 173.010848) (xy 295.763688 172.911352) (xy 295.763687 172.911351) (xy 295.763685 172.91135) + (xy 295.716002 172.887054) (xy 295.612853 172.834496) (xy 295.451847 172.782181) (xy 295.284649 172.7557) + (xy 295.284644 172.7557) (xy 295.115356 172.7557) (xy 295.115351 172.7557) (xy 294.948152 172.782181) + (xy 294.787146 172.834496) (xy 294.636311 172.911352) (xy 294.499365 173.010848) (xy 294.49936 173.010852) + (xy 294.379652 173.13056) (xy 294.379648 173.130565) (xy 294.280152 173.267511) (xy 294.203296 173.418346) + (xy 294.150981 173.579352) (xy 294.1245 173.74655) (xy 292.3144 173.74655) (xy 292.3144 173.687371) + (xy 292.276853 173.402175) (xy 292.202402 173.12432) (xy 292.115492 172.9145) (xy 292.092324 172.858568) + (xy 292.092316 172.858551) (xy 291.948495 172.609448) (xy 291.948491 172.609441) (xy 291.84124 172.469668) + (xy 291.773378 172.381228) (xy 291.773372 172.381221) (xy 291.569978 172.177827) (xy 291.569971 172.177821) + (xy 291.341767 172.002715) (xy 291.341765 172.002713) (xy 291.341759 172.002709) (xy 291.341754 172.002706) + (xy 291.341751 172.002704) (xy 291.092648 171.858883) (xy 291.092631 171.858875) (xy 290.826878 171.748797) + (xy 290.549023 171.674346) (xy 290.263838 171.636801) (xy 290.263835 171.6368) (xy 290.263829 171.6368) + (xy 289.976171 171.6368) (xy 289.976165 171.6368) (xy 289.976161 171.636801) (xy 289.690976 171.674346) + (xy 289.413121 171.748797) (xy 289.147368 171.858875) (xy 289.147351 171.858883) (xy 288.898248 172.002704) + (xy 288.898232 172.002715) (xy 288.670028 172.177821) (xy 288.670021 172.177827) (xy 288.466627 172.381221) + (xy 288.39543 172.474007) (xy 288.339001 172.515209) (xy 288.269255 172.519364) (xy 288.208335 172.485151) + (xy 288.175583 172.423434) (xy 288.181396 172.353807) (xy 288.189661 172.336531) (xy 288.242863 172.244383) + (xy 288.350742 171.983939) (xy 288.423704 171.711642) (xy 288.4605 171.432151) (xy 288.4605 171.150249) + (xy 288.45923 171.140606) (xy 288.44237 171.012538) (xy 288.423704 170.870758) (xy 288.350742 170.598461) + (xy 288.34376 170.581606) (xy 288.318765 170.521261) (xy 288.242863 170.338017) (xy 288.242861 170.338014) + (xy 288.242859 170.338009) (xy 288.101916 170.09389) (xy 288.101912 170.093883) (xy 287.9303 169.870235) + (xy 287.930298 169.870233) (xy 287.930295 169.870229) (xy 287.73097 169.670904) (xy 287.705109 169.65106) + (xy 287.507317 169.499288) (xy 287.507311 169.499284) (xy 287.507309 169.499283) (xy 287.26319 169.35834) + (xy 287.263179 169.358335) (xy 287.002743 169.250459) (xy 286.730439 169.177495) (xy 286.450958 169.1407) + (xy 286.450951 169.1407) (xy 286.169049 169.1407) (xy 286.169041 169.1407) (xy 285.88956 169.177495) + (xy 285.617256 169.250459) (xy 285.35682 169.358335) (xy 285.356809 169.35834) (xy 285.11269 169.499283) + (xy 285.112684 169.499287) (xy 285.112683 169.499288) (xy 285.10764 169.503158) (xy 284.889029 169.670904) + (xy 284.689704 169.870229) (xy 284.518089 170.093882) (xy 284.518083 170.09389) (xy 284.37714 170.338009) + (xy 284.377135 170.33802) (xy 284.269259 170.598456) (xy 284.196295 170.87076) (xy 284.1595 171.150241) + (xy 284.1595 171.432158) (xy 284.196295 171.711639) (xy 284.269259 171.983943) (xy 284.377135 172.244379) + (xy 284.37714 172.24439) (xy 284.518083 172.488509) (xy 284.518094 172.488525) (xy 284.648838 172.658914) + (xy 284.674032 172.724083) (xy 284.659994 172.792528) (xy 284.61118 172.842517) (xy 284.606758 172.844884) + (xy 284.476313 172.91135) (xy 284.339365 173.010848) (xy 284.33936 173.010852) (xy 284.219652 173.13056) + (xy 284.219648 173.130565) (xy 284.120152 173.267511) (xy 284.043296 173.418346) (xy 283.990981 173.579352) + (xy 283.9645 173.74655) (xy 277.2255 173.74655) (xy 277.199018 173.579352) (xy 277.174745 173.50465) + (xy 277.146705 173.418351) (xy 277.146703 173.418348) (xy 277.146703 173.418346) (xy 277.081952 173.291267) + (xy 277.06985 173.267515) (xy 277.038281 173.224064) (xy 276.970351 173.130565) (xy 276.970347 173.13056) + (xy 276.850639 173.010852) (xy 276.850634 173.010848) (xy 276.713688 172.911352) (xy 276.713687 172.911351) + (xy 276.713685 172.91135) (xy 276.666002 172.887054) (xy 276.562853 172.834496) (xy 276.401847 172.782181) + (xy 276.234649 172.7557) (xy 276.234644 172.7557) (xy 276.065356 172.7557) (xy 276.065351 172.7557) + (xy 275.898152 172.782181) (xy 275.737146 172.834496) (xy 275.586311 172.911352) (xy 275.449365 173.010848) + (xy 275.44936 173.010852) (xy 275.329652 173.13056) (xy 275.329648 173.130565) (xy 275.230152 173.267511) + (xy 275.153296 173.418346) (xy 275.100981 173.579352) (xy 275.0745 173.74655) (xy 273.2644 173.74655) + (xy 273.2644 173.687371) (xy 273.226853 173.402175) (xy 273.152402 173.12432) (xy 273.065492 172.9145) + (xy 273.042324 172.858568) (xy 273.042316 172.858551) (xy 272.898495 172.609448) (xy 272.898491 172.609441) + (xy 272.79124 172.469668) (xy 272.723378 172.381228) (xy 272.723372 172.381221) (xy 272.519978 172.177827) + (xy 272.519971 172.177821) (xy 272.291767 172.002715) (xy 272.291765 172.002713) (xy 272.291759 172.002709) + (xy 272.291754 172.002706) (xy 272.291751 172.002704) (xy 272.042648 171.858883) (xy 272.042631 171.858875) + (xy 271.776878 171.748797) (xy 271.499023 171.674346) (xy 271.213838 171.636801) (xy 271.213835 171.6368) + (xy 271.213829 171.6368) (xy 270.926171 171.6368) (xy 270.926165 171.6368) (xy 270.926161 171.636801) + (xy 270.640976 171.674346) (xy 270.363121 171.748797) (xy 270.097368 171.858875) (xy 270.097351 171.858883) + (xy 269.848248 172.002704) (xy 269.848232 172.002715) (xy 269.620028 172.177821) (xy 269.620021 172.177827) + (xy 269.416627 172.381221) (xy 269.34543 172.474007) (xy 269.289001 172.515209) (xy 269.219255 172.519364) + (xy 269.158335 172.485151) (xy 269.125583 172.423434) (xy 269.131396 172.353807) (xy 269.139661 172.336531) + (xy 269.192863 172.244383) (xy 269.300742 171.983939) (xy 269.373704 171.711642) (xy 269.4105 171.432151) + (xy 269.4105 171.150249) (xy 269.40923 171.140606) (xy 269.39237 171.012538) (xy 269.373704 170.870758) + (xy 269.300742 170.598461) (xy 269.29376 170.581606) (xy 269.268765 170.521261) (xy 269.192863 170.338017) + (xy 269.192861 170.338014) (xy 269.192859 170.338009) (xy 269.051916 170.09389) (xy 269.051912 170.093883) + (xy 268.8803 169.870235) (xy 268.880298 169.870233) (xy 268.880295 169.870229) (xy 268.68097 169.670904) + (xy 268.655109 169.65106) (xy 268.457317 169.499288) (xy 268.457311 169.499284) (xy 268.457309 169.499283) + (xy 268.21319 169.35834) (xy 268.213179 169.358335) (xy 267.952743 169.250459) (xy 267.680439 169.177495) + (xy 267.400958 169.1407) (xy 267.400951 169.1407) (xy 267.119049 169.1407) (xy 267.119041 169.1407) + (xy 266.83956 169.177495) (xy 266.567256 169.250459) (xy 266.306811 169.358338) (xy 266.30483 169.359316) + (xy 266.304178 169.359429) (xy 266.303067 169.35989) (xy 266.302963 169.359641) (xy 266.235997 169.371308) + (xy 266.171608 169.344182) (xy 266.132106 169.28655) (xy 266.130033 169.216711) (xy 266.162311 169.16042) + (xy 266.712491 168.610241) (xy 271.4595 168.610241) (xy 271.4595 168.892158) (xy 271.496295 169.171639) + (xy 271.569259 169.443943) (xy 271.677135 169.704379) (xy 271.67714 169.70439) (xy 271.818083 169.948509) + (xy 271.818088 169.948517) (xy 271.980386 170.160027) (xy 271.989704 170.17217) (xy 272.189029 170.371495) + (xy 272.189033 170.371498) (xy 272.189035 170.3715) (xy 272.412683 170.543112) (xy 272.41269 170.543116) + (xy 272.656809 170.684059) (xy 272.656814 170.684061) (xy 272.656817 170.684063) (xy 272.917261 170.791942) + (xy 273.189558 170.864904) (xy 273.469049 170.9017) (xy 273.469056 170.9017) (xy 273.750944 170.9017) + (xy 273.750951 170.9017) (xy 274.030442 170.864904) (xy 274.302739 170.791942) (xy 274.563183 170.684063) + (xy 274.807317 170.543112) (xy 275.030965 170.3715) (xy 275.2303 170.172165) (xy 275.401912 169.948517) + (xy 275.542863 169.704383) (xy 275.650742 169.443939) (xy 275.723704 169.171642) (xy 275.7605 168.892151) + (xy 275.7605 168.610249) (xy 275.75923 168.600606) (xy 275.74829 168.517503) (xy 275.723704 168.330758) + (xy 275.650742 168.058461) (xy 275.64376 168.041606) (xy 275.618765 167.981261) (xy 275.542863 167.798017) + (xy 275.542861 167.798014) (xy 275.542859 167.798009) (xy 275.401916 167.55389) (xy 275.401912 167.553883) + (xy 275.2303 167.330235) (xy 275.230298 167.330233) (xy 275.230295 167.330229) (xy 275.03097 167.130904) + (xy 275.030965 167.1309) (xy 274.807317 166.959288) (xy 274.807311 166.959284) (xy 274.807309 166.959283) + (xy 274.56319 166.81834) (xy 274.563179 166.818335) (xy 274.302743 166.710459) (xy 274.030439 166.637495) + (xy 273.750958 166.6007) (xy 273.750951 166.6007) (xy 273.469049 166.6007) (xy 273.469041 166.6007) + (xy 273.18956 166.637495) (xy 272.917256 166.710459) (xy 272.65682 166.818335) (xy 272.656809 166.81834) + (xy 272.41269 166.959283) (xy 272.412682 166.959289) (xy 272.189029 167.130904) (xy 271.989704 167.330229) + (xy 271.943901 167.389921) (xy 271.829112 167.539517) (xy 271.818089 167.553882) (xy 271.818083 167.55389) + (xy 271.67714 167.798009) (xy 271.677135 167.79802) (xy 271.569259 168.058456) (xy 271.496295 168.33076) + (xy 271.4595 168.610241) (xy 266.712491 168.610241) (xy 268.664866 166.657868) (xy 268.664866 166.657866) + (xy 268.664868 166.657865) (xy 268.688545 166.6007) (xy 268.6995 166.574253) (xy 268.6995 166.483747) + (xy 268.6995 160.532206) (xy 273.502965 160.532206) (xy 273.519165 160.698023) (xy 273.520721 160.713942) + (xy 273.5385 160.775906) (xy 273.57108 160.889461) (xy 273.65238 161.052963) (xy 273.652381 161.052965) + (xy 273.652383 161.052968) (xy 273.698457 161.114404) (xy 273.761938 161.199052) (xy 273.761939 161.199053) + (xy 273.76194 161.199054) (xy 273.896132 161.322895) (xy 274.050525 161.420397) (xy 274.183663 161.473767) + (xy 274.220014 161.488339) (xy 274.220015 161.488339) (xy 274.220017 161.48834) (xy 274.399008 161.524479) + (xy 274.399002 161.524479) (xy 274.415322 161.524759) (xy 274.581584 161.52762) (xy 274.761712 161.497658) + (xy 274.812601 161.479263) (xy 274.933436 161.435585) (xy 274.933437 161.435583) (xy 274.93344 161.435583) + (xy 274.948475 161.42682) (xy 274.955159 161.422935) (xy 274.95545 161.422857) (xy 274.983333 161.40656) + (xy 274.983451 161.406492) (xy 274.986668 161.405701) (xy 275.045762 161.389699) (xy 276.526892 161.389699) + (xy 276.527014 161.389706) (xy 276.535105 161.389705) (xy 276.535108 161.389706) (xy 276.567242 161.389702) + (xy 276.629804 161.406634) (xy 276.65763 161.422891) (xy 276.657632 161.422891) (xy 276.66378 161.426483) + (xy 276.665435 161.427308) (xy 276.679578 161.43555) (xy 276.8513 161.497621) (xy 277.031421 161.527582) + (xy 277.211098 161.52449) (xy 277.213991 161.524441) (xy 277.392966 161.488305) (xy 277.392969 161.488303) + (xy 277.392974 161.488303) (xy 277.56246 161.420362) (xy 277.716846 161.322863) (xy 277.735931 161.305251) + (xy 277.85103 161.19903) (xy 277.851032 161.199028) (xy 277.86422 161.181443) (xy 277.960585 161.052947) + (xy 278.041884 160.889448) (xy 278.092242 160.713933) (xy 278.109997 160.532203) (xy 278.09456 160.35026) + (xy 278.094558 160.350254) (xy 278.075543 160.280646) (xy 278.046443 160.174118) (xy 278.038683 160.157949) + (xy 278.035596 160.151504) (xy 278.035548 160.151246) (xy 278.019171 160.117219) (xy 278.019043 160.11643) + (xy 278.007002 160.063631) (xy 278.007002 160.063622) (xy 278.007007 160.026208) (xy 278.007006 160.026204) + (xy 278.007007 160.018198) (xy 278.006999 160.01806) (xy 278.006999 158.714778) (xy 278.009653 158.703111) + (xy 278.008619 158.694799) (xy 278.019202 158.661136) (xy 278.025567 158.647873) (xy 278.025645 158.647787) + (xy 278.025616 158.647773) (xy 278.026043 158.646885) (xy 278.035574 158.627074) (xy 278.035574 158.627068) + (xy 278.038955 158.620042) (xy 278.039117 158.619638) (xy 278.046483 158.604291) (xy 278.062364 158.546153) + (xy 278.80075 158.546153) (xy 278.80075 158.703846) (xy 278.831511 158.858489) (xy 278.831514 158.858501) + (xy 278.891852 159.004172) (xy 278.891859 159.004185) (xy 278.97946 159.135288) (xy 278.979463 159.135292) + (xy 279.090957 159.246786) (xy 279.090961 159.246789) (xy 279.222064 159.33439) (xy 279.222077 159.334397) + (xy 279.32131 159.3755) (xy 279.367753 159.394737) (xy 279.522403 159.425499) (xy 279.522406 159.4255) + (xy 279.522408 159.4255) (xy 279.680094 159.4255) (xy 279.680095 159.425499) (xy 279.834747 159.394737) + (xy 279.980429 159.334394) (xy 280.111539 159.246789) (xy 280.223039 159.135289) (xy 280.310644 159.004179) + (xy 280.370987 158.858497) (xy 280.40175 158.703842) (xy 280.40175 158.546158) (xy 280.40175 158.546155) + (xy 280.401749 158.546153) (xy 280.394039 158.507391) (xy 280.370987 158.391503) (xy 280.37024 158.3897) + (xy 280.310647 158.245827) (xy 280.31064 158.245814) (xy 280.223039 158.114711) (xy 280.223036 158.114707) + (xy 280.111542 158.003213) (xy 280.111538 158.00321) (xy 279.980435 157.915609) (xy 279.980422 157.915602) + (xy 279.834751 157.855264) (xy 279.834739 157.855261) (xy 279.680095 157.8245) (xy 279.680092 157.8245) + (xy 279.522408 157.8245) (xy 279.522405 157.8245) (xy 279.36776 157.855261) (xy 279.367748 157.855264) + (xy 279.222077 157.915602) (xy 279.222064 157.915609) (xy 279.090961 158.00321) (xy 279.090957 158.003213) + (xy 278.979463 158.114707) (xy 278.97946 158.114711) (xy 278.891859 158.245814) (xy 278.891852 158.245827) + (xy 278.831514 158.391498) (xy 278.831511 158.39151) (xy 278.80075 158.546153) (xy 278.062364 158.546153) + (xy 278.0946 158.428142) (xy 278.110037 158.246193) (xy 278.092281 158.064455) (xy 278.04192 157.888934) + (xy 277.960618 157.72543) (xy 277.874152 157.610134) (xy 277.851062 157.579345) (xy 277.838874 157.568097) + (xy 277.716869 157.455504) (xy 277.716866 157.455502) (xy 277.716865 157.455501) (xy 277.716862 157.455499) + (xy 277.562477 157.358001) (xy 277.392987 157.290058) (xy 277.392977 157.290056) (xy 277.213992 157.253918) + (xy 277.213999 157.253918) (xy 277.042294 157.250965) (xy 277.031418 157.250778) (xy 277.031417 157.250778) + (xy 277.031414 157.250778) (xy 276.851297 157.280738) (xy 276.851284 157.280741) (xy 276.679563 157.342813) + (xy 276.665048 157.35127) (xy 276.664963 157.351319) (xy 276.657876 157.35544) (xy 276.65763 157.355508) + (xy 276.629838 157.371744) (xy 276.62959 157.371889) (xy 276.626863 157.372559) (xy 276.567246 157.388696) + (xy 276.526901 157.388693) (xy 276.526797 157.3887) (xy 275.086096 157.3887) (xy 275.077914 157.388698) + (xy 275.077892 157.388693) (xy 275.047965 157.388695) (xy 275.045728 157.388695) (xy 275.045446 157.388612) + (xy 274.983193 157.371762) (xy 274.955371 157.355508) (xy 274.949305 157.351964) (xy 274.947607 157.351117) + (xy 274.940257 157.346834) (xy 274.933421 157.34285) (xy 274.761697 157.280778) (xy 274.761691 157.280777) + (xy 274.581581 157.250819) (xy 274.581578 157.250819) (xy 274.573039 157.250965) (xy 274.399007 157.253959) + (xy 274.220034 157.290094) (xy 274.220023 157.290097) (xy 274.050542 157.358037) (xy 274.050541 157.358037) + (xy 273.896161 157.455532) (xy 273.896158 157.455534) (xy 273.761967 157.579373) (xy 273.652415 157.725454) + (xy 273.57112 157.888944) (xy 273.571119 157.888947) (xy 273.571118 157.88895) (xy 273.563471 157.915602) + (xy 273.520758 158.064465) (xy 273.503041 158.245814) (xy 273.503004 158.246193) (xy 273.504905 158.268602) + (xy 273.516773 158.408495) (xy 273.51844 158.428135) (xy 273.550156 158.544239) (xy 273.566556 158.604278) + (xy 273.56656 158.604288) (xy 273.573798 158.61937) (xy 273.57384 158.619456) (xy 273.577423 158.626938) + (xy 273.577481 158.62724) (xy 273.593799 158.661129) (xy 273.593836 158.661206) (xy 273.593981 158.6621) + (xy 273.606001 158.714769) (xy 273.606001 160.063622) (xy 273.593807 160.117245) (xy 273.593219 160.118471) + (xy 273.593139 160.118638) (xy 273.574266 160.157837) (xy 273.573942 160.158639) (xy 273.566518 160.17411) + (xy 273.518401 160.350254) (xy 273.518401 160.350256) (xy 273.502965 160.532206) (xy 268.6995 160.532206) + (xy 268.6995 154.69655) (xy 269.677 154.69655) (xy 269.677 154.865849) (xy 269.703481 155.033047) + (xy 269.755796 155.194053) (xy 269.832652 155.344888) (xy 269.932148 155.481834) (xy 269.932152 155.481839) + (xy 270.05186 155.601547) (xy 270.051865 155.601551) (xy 270.171317 155.688337) (xy 270.188815 155.70105) + (xy 270.27409 155.7445) (xy 270.339646 155.777903) (xy 270.339648 155.777903) (xy 270.339651 155.777905) + (xy 270.42595 155.805945) (xy 270.500652 155.830218) (xy 270.667851 155.8567) (xy 270.667856 155.8567) + (xy 270.837149 155.8567) (xy 271.004347 155.830218) (xy 271.047277 155.816269) (xy 271.165349 155.777905) + (xy 271.316185 155.70105) (xy 271.453141 155.601546) (xy 271.572846 155.481841) (xy 271.67235 155.344885) + (xy 271.749205 155.194049) (xy 271.801518 155.033047) (xy 271.828 154.865849) (xy 271.828 154.69655) + (xy 271.802428 154.535098) (xy 271.811382 154.465805) (xy 271.856379 154.412353) (xy 271.92313 154.391713) + (xy 271.924901 154.3917) (xy 272.163444 154.3917) (xy 272.163451 154.3917) (xy 272.442942 154.354904) + (xy 272.715239 154.281942) (xy 272.975683 154.174063) (xy 273.219817 154.033112) (xy 273.443465 153.8615) + (xy 273.6428 153.662165) (xy 273.710492 153.573946) (xy 273.76692 153.532744) (xy 273.836666 153.528589) + (xy 273.897586 153.562801) (xy 273.930339 153.624518) (xy 273.924526 153.694146) (xy 273.916255 153.711433) + (xy 273.860183 153.808551) (xy 273.860175 153.808568) (xy 273.750097 154.074321) (xy 273.675646 154.352176) + (xy 273.638101 154.637361) (xy 273.6381 154.637377) (xy 273.6381 154.925022) (xy 273.638101 154.925038) + (xy 273.675646 155.210223) (xy 273.750097 155.488078) (xy 273.860175 155.753831) (xy 273.860183 155.753848) + (xy 274.004004 156.002951) (xy 274.004015 156.002967) (xy 274.179121 156.231171) (xy 274.179127 156.231178) + (xy 274.382521 156.434572) (xy 274.382527 156.434577) (xy 274.610741 156.609691) (xy 274.610748 156.609695) + (xy 274.859851 156.753516) (xy 274.859856 156.753518) (xy 274.859859 156.75352) (xy 274.859863 156.753521) + (xy 274.859868 156.753524) (xy 274.873108 156.759008) (xy 275.12562 156.863602) (xy 275.403475 156.938053) + (xy 275.688671 156.9756) (xy 275.688678 156.9756) (xy 275.976322 156.9756) (xy 275.976329 156.9756) + (xy 276.261525 156.938053) (xy 276.53938 156.863602) (xy 276.805141 156.75352) (xy 277.054259 156.609691) + (xy 277.282473 156.434577) (xy 277.485877 156.231173) (xy 277.660991 156.002959) (xy 277.80482 155.753841) + (xy 277.914902 155.48808) (xy 277.989353 155.210225) (xy 278.0269 154.925029) (xy 278.0269 154.69655) + (xy 279.837 154.69655) (xy 279.837 154.865849) (xy 279.863481 155.033047) (xy 279.915796 155.194053) + (xy 279.992652 155.344888) (xy 280.092148 155.481834) (xy 280.092152 155.481839) (xy 280.21186 155.601547) + (xy 280.211865 155.601551) (xy 280.331317 155.688337) (xy 280.348815 155.70105) (xy 280.43409 155.7445) + (xy 280.499646 155.777903) (xy 280.499648 155.777903) (xy 280.499651 155.777905) (xy 280.58595 155.805945) + (xy 280.660652 155.830218) (xy 280.827851 155.8567) (xy 280.827856 155.8567) (xy 280.997149 155.8567) + (xy 281.164347 155.830218) (xy 281.207277 155.816269) (xy 281.325349 155.777905) (xy 281.476185 155.70105) + (xy 281.613141 155.601546) (xy 281.732846 155.481841) (xy 281.83235 155.344885) (xy 281.909205 155.194049) + (xy 281.961518 155.033047) (xy 281.988 154.865849) (xy 281.988 154.69655) (xy 281.961518 154.529352) + (xy 281.934836 154.447236) (xy 281.909205 154.368351) (xy 281.909203 154.368348) (xy 281.909203 154.368346) + (xy 281.878344 154.307783) (xy 281.83235 154.217515) (xy 281.800781 154.174064) (xy 281.732851 154.080565) + (xy 281.732847 154.08056) (xy 281.613139 153.960852) (xy 281.613134 153.960848) (xy 281.476188 153.861352) + (xy 281.476187 153.861351) (xy 281.476185 153.86135) (xy 281.429082 153.83735) (xy 281.325353 153.784496) + (xy 281.164347 153.732181) (xy 280.997149 153.7057) (xy 280.997144 153.7057) (xy 280.827856 153.7057) + (xy 280.827851 153.7057) (xy 280.660652 153.732181) (xy 280.499646 153.784496) (xy 280.348811 153.861352) + (xy 280.211865 153.960848) (xy 280.21186 153.960852) (xy 280.092152 154.08056) (xy 280.092148 154.080565) + (xy 279.992652 154.217511) (xy 279.915796 154.368346) (xy 279.863481 154.529352) (xy 279.837 154.69655) + (xy 278.0269 154.69655) (xy 278.0269 154.637371) (xy 277.989353 154.352175) (xy 277.914902 154.07432) + (xy 277.80482 153.808559) (xy 277.804818 153.808556) (xy 277.804816 153.808551) (xy 277.660995 153.559448) + (xy 277.660991 153.559441) (xy 277.557069 153.424007) (xy 277.485878 153.331228) (xy 277.485872 153.331221) + (xy 277.282478 153.127827) (xy 277.282471 153.127821) (xy 277.054267 152.952715) (xy 277.054265 152.952713) + (xy 277.054259 152.952709) (xy 277.054254 152.952706) (xy 277.054251 152.952704) (xy 276.805148 152.808883) + (xy 276.805131 152.808875) (xy 276.539378 152.698797) (xy 276.261523 152.624346) (xy 275.976338 152.586801) + (xy 275.976335 152.5868) (xy 275.976329 152.5868) (xy 275.688671 152.5868) (xy 275.688665 152.5868) + (xy 275.688661 152.586801) (xy 275.403476 152.624346) (xy 275.125621 152.698797) (xy 274.859868 152.808875) + (xy 274.859851 152.808883) (xy 274.610748 152.952704) (xy 274.610732 152.952715) (xy 274.382528 153.127821) + (xy 274.382521 153.127827) (xy 274.179127 153.331221) (xy 274.10793 153.424007) (xy 274.051501 153.465209) + (xy 273.981755 153.469364) (xy 273.920835 153.435151) (xy 273.888083 153.373434) (xy 273.893896 153.303807) + (xy 273.902161 153.286531) (xy 273.955363 153.194383) (xy 274.063242 152.933939) (xy 274.136204 152.661642) + (xy 274.173 152.382151) (xy 274.173 152.100249) (xy 274.136204 151.820758) (xy 274.063242 151.548461) + (xy 274.05626 151.531606) (xy 274.031265 151.471261) (xy 273.955363 151.288017) (xy 273.95536 151.288011) + (xy 273.955359 151.288009) (xy 273.814416 151.04389) (xy 273.814412 151.043883) (xy 273.6428 150.820235) + (xy 273.642798 150.820233) (xy 273.642795 150.820229) (xy 273.44347 150.620904) (xy 273.418661 150.601867) + (xy 273.219817 150.449288) (xy 273.219811 150.449284) (xy 273.219809 150.449283) (xy 272.97569 150.30834) + (xy 272.975679 150.308335) (xy 272.715243 150.200459) (xy 272.442939 150.127495) (xy 272.163458 150.0907) + (xy 272.163451 150.0907) (xy 271.881549 150.0907) (xy 271.881541 150.0907) (xy 271.60206 150.127495) + (xy 271.329756 150.200459) (xy 271.06932 150.308335) (xy 271.069309 150.30834) (xy 270.82519 150.449283) + (xy 270.825182 150.449289) (xy 270.601529 150.620904) (xy 270.402204 150.820229) (xy 270.230589 151.043882) + (xy 270.230583 151.04389) (xy 270.08964 151.288009) (xy 270.089635 151.28802) (xy 269.981759 151.548456) + (xy 269.908795 151.82076) (xy 269.872 152.100241) (xy 269.872 152.382158) (xy 269.908795 152.661639) + (xy 269.981759 152.933943) (xy 270.089635 153.194379) (xy 270.08964 153.19439) (xy 270.230583 153.438509) + (xy 270.230594 153.438525) (xy 270.361338 153.608914) (xy 270.386532 153.674083) (xy 270.372494 153.742528) + (xy 270.32368 153.792517) (xy 270.319258 153.794884) (xy 270.188813 153.86135) (xy 270.051865 153.960848) + (xy 270.05186 153.960852) (xy 269.932152 154.08056) (xy 269.932148 154.080565) (xy 269.832652 154.217511) + (xy 269.755796 154.368346) (xy 269.703481 154.529352) (xy 269.677 154.69655) (xy 268.6995 154.69655) + (xy 268.6995 153.096075) (xy 268.719185 153.029036) (xy 268.771989 152.983281) (xy 268.775999 152.981534) + (xy 268.851179 152.950394) (xy 268.982289 152.862789) (xy 269.093789 152.751289) (xy 269.181394 152.620179) + (xy 269.241737 152.474497) (xy 269.2725 152.319842) (xy 269.2725 152.162158) (xy 269.2725 152.162155) + (xy 269.272499 152.162153) (xy 269.241737 152.007503) (xy 269.214278 151.941211) (xy 269.181397 151.861827) + (xy 269.18139 151.861814) (xy 269.093789 151.730711) (xy 269.093786 151.730707) (xy 268.982292 151.619213) + (xy 268.982288 151.61921) (xy 268.851185 151.531609) (xy 268.851172 151.531602) (xy 268.705501 151.471264) + (xy 268.705489 151.471261) (xy 268.544868 151.439311) (xy 268.545291 151.437179) (xy 268.489585 151.414663) + (xy 268.478874 151.405124) (xy 266.717802 149.643867) (xy 266.634185 149.560241) (xy 276.222 149.560241) + (xy 276.222 149.842158) (xy 276.258795 150.121639) (xy 276.331759 150.393943) (xy 276.439635 150.654379) + (xy 276.43964 150.65439) (xy 276.580583 150.898509) (xy 276.580588 150.898517) (xy 276.742887 151.110028) + (xy 276.752204 151.12217) (xy 276.951529 151.321495) (xy 276.951533 151.321498) (xy 276.951535 151.3215) + (xy 277.175183 151.493112) (xy 277.17519 151.493116) (xy 277.419309 151.634059) (xy 277.419314 151.634061) + (xy 277.419317 151.634063) (xy 277.679761 151.741942) (xy 277.952058 151.814904) (xy 278.231549 151.8517) + (xy 278.231556 151.8517) (xy 278.513444 151.8517) (xy 278.513451 151.8517) (xy 278.792942 151.814904) + (xy 279.065239 151.741942) (xy 279.325683 151.634063) (xy 279.569817 151.493112) (xy 279.793465 151.3215) + (xy 279.9928 151.122165) (xy 280.164412 150.898517) (xy 280.296509 150.669717) (xy 280.305359 150.65439) + (xy 280.305359 150.654389) (xy 280.305363 150.654383) (xy 280.413242 150.393939) (xy 280.486204 150.121642) + (xy 280.523 149.842151) (xy 280.523 149.560249) (xy 280.522457 149.556128) (xy 280.51079 149.467503) + (xy 280.486204 149.280758) (xy 280.413242 149.008461) (xy 280.40626 148.991606) (xy 280.381265 148.931261) + (xy 280.305363 148.748017) (xy 280.305361 148.748014) (xy 280.305359 148.748009) (xy 280.164416 148.50389) + (xy 280.164412 148.503883) (xy 279.9928 148.280235) (xy 279.992798 148.280233) (xy 279.992795 148.280229) + (xy 279.79347 148.080904) (xy 279.793465 148.0809) (xy 279.569817 147.909288) (xy 279.569811 147.909284) + (xy 279.569809 147.909283) (xy 279.32569 147.76834) (xy 279.325679 147.768335) (xy 279.065243 147.660459) + (xy 278.792939 147.587495) (xy 278.513458 147.5507) (xy 278.513451 147.5507) (xy 278.231549 147.5507) + (xy 278.231541 147.5507) (xy 277.95206 147.587495) (xy 277.679756 147.660459) (xy 277.41932 147.768335) + (xy 277.419309 147.76834) (xy 277.17519 147.909283) (xy 277.175182 147.909289) (xy 276.951529 148.080904) + (xy 276.752204 148.280229) (xy 276.580589 148.503882) (xy 276.580583 148.50389) (xy 276.43964 148.748009) + (xy 276.439635 148.74802) (xy 276.331759 149.008456) (xy 276.258795 149.28076) (xy 276.222 149.560241) + (xy 266.634185 149.560241) (xy 259.211814 142.13709) (xy 259.178332 142.075765) (xy 259.1755 142.049413) + (xy 259.1755 141.482106) (xy 263.977965 141.482106) (xy 263.994176 141.648035) (xy 263.995721 141.663842) + (xy 264.014484 141.729238) (xy 264.04608 141.839361) (xy 264.12738 142.002863) (xy 264.127381 142.002865) + (xy 264.127383 142.002868) (xy 264.187509 142.083042) (xy 264.236938 142.148952) (xy 264.236939 142.148953) + (xy 264.23694 142.148954) (xy 264.371132 142.272795) (xy 264.525525 142.370297) (xy 264.660677 142.424474) + (xy 264.695014 142.438239) (xy 264.695015 142.438239) (xy 264.695017 142.43824) (xy 264.874008 142.474379) + (xy 264.874002 142.474379) (xy 264.890322 142.474659) (xy 265.056584 142.47752) (xy 265.236712 142.447558) + (xy 265.292207 142.427498) (xy 265.408436 142.385485) (xy 265.408437 142.385483) (xy 265.40844 142.385483) + (xy 265.423475 142.37672) (xy 265.430159 142.372835) (xy 265.43045 142.372757) (xy 265.458333 142.35646) + (xy 265.458451 142.356392) (xy 265.461668 142.355601) (xy 265.520762 142.339599) (xy 267.001892 142.339599) + (xy 267.002014 142.339606) (xy 267.010105 142.339605) (xy 267.010108 142.339606) (xy 267.042242 142.339602) + (xy 267.104804 142.356534) (xy 267.13263 142.372791) (xy 267.132632 142.372791) (xy 267.13878 142.376383) + (xy 267.140435 142.377208) (xy 267.154578 142.38545) (xy 267.3263 142.447521) (xy 267.506421 142.477482) + (xy 267.686098 142.47439) (xy 267.688991 142.474341) (xy 267.867966 142.438205) (xy 267.867969 142.438203) + (xy 267.867974 142.438203) (xy 268.03746 142.370262) (xy 268.191846 142.272763) (xy 268.210231 142.255797) + (xy 268.32603 142.14893) (xy 268.326032 142.148928) (xy 268.33491 142.13709) (xy 268.435585 142.002847) + (xy 268.516884 141.839348) (xy 268.567242 141.663833) (xy 268.584997 141.482103) (xy 268.56956 141.30016) + (xy 268.569558 141.300154) (xy 268.558938 141.261277) (xy 268.521443 141.124018) (xy 268.513683 141.107849) + (xy 268.510596 141.101404) (xy 268.510548 141.101146) (xy 268.494171 141.067119) (xy 268.494043 141.06633) + (xy 268.482002 141.013531) (xy 268.482002 141.013522) (xy 268.482007 140.976108) (xy 268.482006 140.976104) + (xy 268.482007 140.968098) (xy 268.481999 140.96796) (xy 268.481999 139.664678) (xy 268.484653 139.653012) + (xy 268.483619 139.644699) (xy 268.494203 139.611034) (xy 268.500518 139.597876) (xy 268.500598 139.597787) + (xy 268.500568 139.597773) (xy 268.500995 139.596885) (xy 268.510574 139.576974) (xy 268.510574 139.576968) + (xy 268.513955 139.569942) (xy 268.514117 139.569538) (xy 268.521483 139.554191) (xy 268.5696 139.378042) + (xy 268.585037 139.196093) (xy 268.567281 139.014355) (xy 268.51692 138.838834) (xy 268.435618 138.67533) + (xy 268.349227 138.560134) (xy 268.326062 138.529245) (xy 268.268896 138.476489) (xy 268.191869 138.405404) + (xy 268.191866 138.405402) (xy 268.191865 138.405401) (xy 268.191862 138.405399) (xy 268.037477 138.307901) + (xy 267.867987 138.239958) (xy 267.867977 138.239956) (xy 267.688992 138.203818) (xy 267.688999 138.203818) + (xy 267.517294 138.200865) (xy 267.506418 138.200678) (xy 267.506417 138.200678) (xy 267.506414 138.200678) + (xy 267.326297 138.230638) (xy 267.326284 138.230641) (xy 267.154563 138.292713) (xy 267.140048 138.30117) + (xy 267.139963 138.301219) (xy 267.132876 138.30534) (xy 267.13263 138.305408) (xy 267.104838 138.321644) + (xy 267.10459 138.321789) (xy 267.101863 138.322459) (xy 267.042246 138.338596) (xy 267.001901 138.338593) + (xy 267.001797 138.3386) (xy 265.561096 138.3386) (xy 265.552914 138.338598) (xy 265.552892 138.338593) + (xy 265.522965 138.338595) (xy 265.520728 138.338595) (xy 265.520446 138.338512) (xy 265.458193 138.321662) + (xy 265.430371 138.305408) (xy 265.424305 138.301864) (xy 265.422607 138.301017) (xy 265.415257 138.296734) + (xy 265.408421 138.29275) (xy 265.236697 138.230678) (xy 265.236691 138.230677) (xy 265.056581 138.200719) + (xy 265.056578 138.200719) (xy 265.048039 138.200865) (xy 264.874007 138.203859) (xy 264.695034 138.239994) + (xy 264.695023 138.239997) (xy 264.525542 138.307937) (xy 264.525541 138.307937) (xy 264.371161 138.405432) + (xy 264.371158 138.405434) (xy 264.236967 138.529273) (xy 264.127415 138.675354) (xy 264.04612 138.838844) + (xy 264.046119 138.838847) (xy 264.046118 138.83885) (xy 264.020938 138.926606) (xy 263.995758 139.014365) + (xy 263.97803 139.195827) (xy 263.978004 139.196093) (xy 263.979682 139.215868) (xy 263.99178 139.358478) + (xy 263.99344 139.378035) (xy 264.015118 139.457392) (xy 264.041556 139.554178) (xy 264.04156 139.554188) + (xy 264.048798 139.56927) (xy 264.04884 139.569356) (xy 264.052423 139.576838) (xy 264.052481 139.57714) + (xy 264.068836 139.611106) (xy 264.068981 139.612) (xy 264.081001 139.664669) (xy 264.081001 141.013522) + (xy 264.068807 141.067145) (xy 264.068219 141.068371) (xy 264.068139 141.068538) (xy 264.049266 141.107737) + (xy 264.048942 141.108539) (xy 264.041518 141.12401) (xy 263.993401 141.300154) (xy 263.993401 141.300156) + (xy 263.977965 141.482106) (xy 259.1755 141.482106) (xy 259.1755 134.046075) (xy 259.195185 133.979036) + (xy 259.247989 133.933281) (xy 259.251999 133.931534) (xy 259.327179 133.900394) (xy 259.458289 133.812789) + (xy 259.569789 133.701289) (xy 259.657394 133.570179) (xy 259.688515 133.495045) (xy 259.732354 133.440644) + (xy 259.798648 133.418579) (xy 259.803075 133.4185) (xy 260.249623 133.4185) (xy 260.316662 133.438185) + (xy 260.362417 133.490989) (xy 260.372562 133.526314) (xy 260.383795 133.611638) (xy 260.456759 133.883943) + (xy 260.564635 134.144379) (xy 260.56464 134.14439) (xy 260.705583 134.388509) (xy 260.705594 134.388525) + (xy 260.836338 134.558914) (xy 260.861532 134.624083) (xy 260.847494 134.692528) (xy 260.79868 134.742517) + (xy 260.794258 134.744884) (xy 260.663813 134.81135) (xy 260.526865 134.910848) (xy 260.52686 134.910852) + (xy 260.407152 135.03056) (xy 260.407148 135.030565) (xy 260.307652 135.167511) (xy 260.230796 135.318346) + (xy 260.178481 135.479352) (xy 260.152 135.64655) (xy 260.152 135.815849) (xy 260.178481 135.983047) + (xy 260.230796 136.144053) (xy 260.307652 136.294888) (xy 260.407148 136.431834) (xy 260.407152 136.431839) + (xy 260.52686 136.551547) (xy 260.526865 136.551551) (xy 260.646317 136.638337) (xy 260.663815 136.65105) + (xy 260.727017 136.683253) (xy 260.814646 136.727903) (xy 260.814648 136.727903) (xy 260.814651 136.727905) + (xy 260.90095 136.755945) (xy 260.975652 136.780218) (xy 261.142851 136.8067) (xy 261.142856 136.8067) + (xy 261.312149 136.8067) (xy 261.479347 136.780218) (xy 261.640349 136.727905) (xy 261.791185 136.65105) + (xy 261.928141 136.551546) (xy 262.047846 136.431841) (xy 262.14735 136.294885) (xy 262.224205 136.144049) + (xy 262.276518 135.983047) (xy 262.303 135.815849) (xy 262.303 135.64655) (xy 262.277428 135.485098) + (xy 262.286382 135.415805) (xy 262.331379 135.362353) (xy 262.39813 135.341713) (xy 262.399901 135.3417) + (xy 262.638444 135.3417) (xy 262.638451 135.3417) (xy 262.917942 135.304904) (xy 263.190239 135.231942) + (xy 263.450683 135.124063) (xy 263.694817 134.983112) (xy 263.918465 134.8115) (xy 264.1178 134.612165) + (xy 264.185492 134.523946) (xy 264.24192 134.482744) (xy 264.311666 134.478589) (xy 264.372586 134.512801) + (xy 264.405339 134.574518) (xy 264.399526 134.644146) (xy 264.391255 134.661433) (xy 264.335183 134.758551) + (xy 264.335175 134.758568) (xy 264.225097 135.024321) (xy 264.150646 135.302176) (xy 264.113101 135.587361) + (xy 264.1131 135.587377) (xy 264.1131 135.875022) (xy 264.113101 135.875038) (xy 264.150646 136.160223) + (xy 264.225097 136.438078) (xy 264.335175 136.703831) (xy 264.335183 136.703848) (xy 264.479004 136.952951) + (xy 264.479015 136.952967) (xy 264.654121 137.181171) (xy 264.654127 137.181178) (xy 264.857525 137.384576) + (xy 264.953761 137.45842) (xy 265.085741 137.559691) (xy 265.085748 137.559695) (xy 265.334851 137.703516) + (xy 265.334856 137.703518) (xy 265.334859 137.70352) (xy 265.334863 137.703521) (xy 265.334868 137.703524) + (xy 265.440223 137.747163) (xy 265.60062 137.813602) (xy 265.878475 137.888053) (xy 266.163671 137.9256) + (xy 266.163678 137.9256) (xy 266.451322 137.9256) (xy 266.451329 137.9256) (xy 266.736525 137.888053) + (xy 267.01438 137.813602) (xy 267.280141 137.70352) (xy 267.529259 137.559691) (xy 267.670078 137.451636) + (xy 267.757475 137.384576) (xy 267.757478 137.384572) (xy 267.960872 137.181178) (xy 267.960877 137.181173) + (xy 268.135991 136.952959) (xy 268.27982 136.703841) (xy 268.389902 136.43808) (xy 268.464353 136.160225) + (xy 268.5019 135.875029) (xy 268.5019 135.64655) (xy 270.312 135.64655) (xy 270.312 135.815849) + (xy 270.338481 135.983047) (xy 270.390796 136.144053) (xy 270.467652 136.294888) (xy 270.567148 136.431834) + (xy 270.567152 136.431839) (xy 270.68686 136.551547) (xy 270.686865 136.551551) (xy 270.806317 136.638337) + (xy 270.823815 136.65105) (xy 270.887017 136.683253) (xy 270.974646 136.727903) (xy 270.974648 136.727903) + (xy 270.974651 136.727905) (xy 271.06095 136.755945) (xy 271.135652 136.780218) (xy 271.302851 136.8067) + (xy 271.302856 136.8067) (xy 271.472149 136.8067) (xy 271.639347 136.780218) (xy 271.800349 136.727905) + (xy 271.951185 136.65105) (xy 272.088141 136.551546) (xy 272.207846 136.431841) (xy 272.30735 136.294885) + (xy 272.384205 136.144049) (xy 272.436518 135.983047) (xy 272.463 135.815849) (xy 272.463 135.64655) + (xy 272.436518 135.479352) (xy 272.391796 135.341713) (xy 272.384205 135.318351) (xy 272.384203 135.318348) + (xy 272.384203 135.318346) (xy 272.340176 135.23194) (xy 272.30735 135.167515) (xy 272.275781 135.124064) + (xy 272.207851 135.030565) (xy 272.207847 135.03056) (xy 272.088139 134.910852) (xy 272.088134 134.910848) + (xy 271.951188 134.811352) (xy 271.951187 134.811351) (xy 271.951185 134.81135) (xy 271.886109 134.778192) + (xy 271.800353 134.734496) (xy 271.639347 134.682181) (xy 271.472149 134.6557) (xy 271.472144 134.6557) + (xy 271.302856 134.6557) (xy 271.302851 134.6557) (xy 271.135652 134.682181) (xy 270.974646 134.734496) + (xy 270.823811 134.811352) (xy 270.686865 134.910848) (xy 270.68686 134.910852) (xy 270.567152 135.03056) + (xy 270.567148 135.030565) (xy 270.467652 135.167511) (xy 270.390796 135.318346) (xy 270.338481 135.479352) + (xy 270.312 135.64655) (xy 268.5019 135.64655) (xy 268.5019 135.587371) (xy 268.464353 135.302175) + (xy 268.389902 135.02432) (xy 268.323463 134.863923) (xy 268.279824 134.758568) (xy 268.279816 134.758551) + (xy 268.135995 134.509448) (xy 268.135994 134.509447) (xy 268.135991 134.509441) (xy 268.011525 134.347233) + (xy 267.960878 134.281228) (xy 267.960872 134.281221) (xy 267.757478 134.077827) (xy 267.757471 134.077821) + (xy 267.529267 133.902715) (xy 267.529265 133.902713) (xy 267.529259 133.902709) (xy 267.529254 133.902706) + (xy 267.529251 133.902704) (xy 267.280148 133.758883) (xy 267.280131 133.758875) (xy 267.014378 133.648797) + (xy 266.736523 133.574346) (xy 266.451338 133.536801) (xy 266.451335 133.5368) (xy 266.451329 133.5368) + (xy 266.163671 133.5368) (xy 266.163665 133.5368) (xy 266.163661 133.536801) (xy 265.878476 133.574346) + (xy 265.600621 133.648797) (xy 265.334868 133.758875) (xy 265.334851 133.758883) (xy 265.085748 133.902704) + (xy 265.085732 133.902715) (xy 264.857528 134.077821) (xy 264.857521 134.077827) (xy 264.654127 134.281221) + (xy 264.58293 134.374007) (xy 264.526501 134.415209) (xy 264.456755 134.419364) (xy 264.395835 134.385151) + (xy 264.363083 134.323434) (xy 264.368896 134.253807) (xy 264.377161 134.236531) (xy 264.430363 134.144383) + (xy 264.538242 133.883939) (xy 264.611204 133.611642) (xy 264.648 133.332151) (xy 264.648 133.050249) + (xy 264.611204 132.770758) (xy 264.538242 132.498461) (xy 264.53126 132.481606) (xy 264.509309 132.428611) + (xy 264.430363 132.238017) (xy 264.430361 132.238014) (xy 264.430359 132.238009) (xy 264.289416 131.99389) + (xy 264.289412 131.993883) (xy 264.1178 131.770235) (xy 264.117798 131.770233) (xy 264.117795 131.770229) + (xy 263.91847 131.570904) (xy 263.819871 131.495246) (xy 263.694817 131.399288) (xy 263.694811 131.399284) + (xy 263.694809 131.399283) (xy 263.45069 131.25834) (xy 263.450679 131.258335) (xy 263.190243 131.150459) + (xy 262.917939 131.077495) (xy 262.638458 131.0407) (xy 262.638451 131.0407) (xy 262.356549 131.0407) + (xy 262.356541 131.0407) (xy 262.07706 131.077495) (xy 261.804756 131.150459) (xy 261.54432 131.258335) + (xy 261.544309 131.25834) (xy 261.30019 131.399283) (xy 261.300182 131.399289) (xy 261.076529 131.570904) + (xy 260.877204 131.770229) (xy 260.705589 131.993882) (xy 260.705583 131.99389) (xy 260.56464 132.238009) + (xy 260.564635 132.23802) (xy 260.456759 132.498456) (xy 260.383795 132.770761) (xy 260.372615 132.855686) + (xy 260.344348 132.919582) (xy 260.286024 132.958053) (xy 260.249676 132.9635) (xy 259.803075 132.9635) + (xy 259.736036 132.943815) (xy 259.690281 132.891011) (xy 259.688534 132.887) (xy 259.657394 132.811821) + (xy 259.657392 132.811818) (xy 259.65739 132.811814) (xy 259.569789 132.680711) (xy 259.569786 132.680707) + (xy 259.458292 132.569213) (xy 259.458288 132.56921) (xy 259.327185 132.481609) (xy 259.327172 132.481602) + (xy 259.181501 132.421264) (xy 259.181489 132.421261) (xy 259.026845 132.3905) (xy 259.026842 132.3905) + (xy 258.869158 132.3905) (xy 258.869155 132.3905) (xy 258.71451 132.421261) (xy 258.714498 132.421264) + (xy 258.63926 132.452429) (xy 258.569791 132.459898) (xy 258.507312 132.428623) (xy 258.504138 132.42556) + (xy 256.671995 130.593887) (xy 256.67199 130.593883) (xy 256.652315 130.574213) (xy 256.588327 130.510241) + (xy 266.697 130.510241) (xy 266.697 130.792158) (xy 266.733795 131.071639) (xy 266.806759 131.343943) + (xy 266.914635 131.604379) (xy 266.91464 131.60439) (xy 267.047142 131.833888) (xy 267.055588 131.848517) + (xy 267.218047 132.060237) (xy 267.227204 132.07217) (xy 267.426529 132.271495) (xy 267.426533 132.271498) + (xy 267.426535 132.2715) (xy 267.650183 132.443112) (xy 267.65019 132.443116) (xy 267.894309 132.584059) + (xy 267.894314 132.584061) (xy 267.894317 132.584063) (xy 268.154761 132.691942) (xy 268.427058 132.764904) + (xy 268.706549 132.8017) (xy 268.706556 132.8017) (xy 268.988444 132.8017) (xy 268.988451 132.8017) + (xy 269.267942 132.764904) (xy 269.540239 132.691942) (xy 269.800683 132.584063) (xy 270.044817 132.443112) + (xy 270.268465 132.2715) (xy 270.4678 132.072165) (xy 270.639412 131.848517) (xy 270.780363 131.604383) + (xy 270.888242 131.343939) (xy 270.961204 131.071642) (xy 270.998 130.792151) (xy 270.998 130.510249) + (xy 270.961204 130.230758) (xy 270.888242 129.958461) (xy 270.88126 129.941606) (xy 270.856265 129.881261) + (xy 270.780363 129.698017) (xy 270.780361 129.698014) (xy 270.780359 129.698009) (xy 270.639416 129.45389) + (xy 270.639412 129.453883) (xy 270.4678 129.230235) (xy 270.467798 129.230233) (xy 270.467795 129.230229) + (xy 270.26847 129.030904) (xy 270.268465 129.0309) (xy 270.044817 128.859288) (xy 270.044811 128.859284) + (xy 270.044809 128.859283) (xy 269.80069 128.71834) (xy 269.800679 128.718335) (xy 269.540243 128.610459) + (xy 269.267939 128.537495) (xy 268.988458 128.5007) (xy 268.988451 128.5007) (xy 268.706549 128.5007) + (xy 268.706541 128.5007) (xy 268.42706 128.537495) (xy 268.154756 128.610459) (xy 267.89432 128.718335) + (xy 267.894309 128.71834) (xy 267.65019 128.859283) (xy 267.650184 128.859287) (xy 267.650183 128.859288) + (xy 267.595198 128.90148) (xy 267.426529 129.030904) (xy 267.227204 129.230229) (xy 267.113881 129.377914) + (xy 267.055597 129.453872) (xy 267.055589 129.453882) (xy 267.055583 129.45389) (xy 266.91464 129.698009) + (xy 266.914635 129.69802) (xy 266.806759 129.958456) (xy 266.733795 130.23076) (xy 266.697 130.510241) + (xy 256.588327 130.510241) (xy 255.320829 129.243069) (xy 255.287337 129.181751) (xy 255.2845 129.155377) + (xy 255.2845 122.432106) (xy 259.215465 122.432106) (xy 259.231676 122.598035) (xy 259.233221 122.613842) + (xy 259.252606 122.681404) (xy 259.28358 122.789361) (xy 259.36488 122.952863) (xy 259.364881 122.952865) + (xy 259.364883 122.952868) (xy 259.377966 122.970313) (xy 259.474438 123.098952) (xy 259.474439 123.098953) + (xy 259.47444 123.098954) (xy 259.608632 123.222795) (xy 259.763025 123.320297) (xy 259.898177 123.374474) + (xy 259.932514 123.388239) (xy 259.932515 123.388239) (xy 259.932517 123.38824) (xy 260.111508 123.424379) + (xy 260.111502 123.424379) (xy 260.127822 123.424659) (xy 260.294084 123.42752) (xy 260.474212 123.397558) + (xy 260.581161 123.358899) (xy 260.645936 123.335485) (xy 260.645937 123.335483) (xy 260.64594 123.335483) + (xy 260.660975 123.32672) (xy 260.667659 123.322835) (xy 260.66795 123.322757) (xy 260.695833 123.30646) + (xy 260.695951 123.306392) (xy 260.699168 123.305601) (xy 260.758262 123.289599) (xy 262.239392 123.289599) + (xy 262.239514 123.289606) (xy 262.247605 123.289605) (xy 262.247608 123.289606) (xy 262.279742 123.289602) + (xy 262.342304 123.306534) (xy 262.37013 123.322791) (xy 262.370132 123.322791) (xy 262.37628 123.326383) + (xy 262.377935 123.327208) (xy 262.392078 123.33545) (xy 262.5638 123.397521) (xy 262.743921 123.427482) + (xy 262.923598 123.42439) (xy 262.926491 123.424341) (xy 263.105466 123.388205) (xy 263.105469 123.388203) + (xy 263.105474 123.388203) (xy 263.27496 123.320262) (xy 263.429346 123.222763) (xy 263.440005 123.212927) + (xy 263.56353 123.09893) (xy 263.563532 123.098928) (xy 263.576372 123.081807) (xy 263.673085 122.952847) + (xy 263.754384 122.789348) (xy 263.804742 122.613833) (xy 263.822497 122.432103) (xy 263.80706 122.25016) + (xy 263.807058 122.250154) (xy 263.795492 122.207814) (xy 263.758943 122.074018) (xy 263.751183 122.057849) + (xy 263.748096 122.051404) (xy 263.748048 122.051146) (xy 263.731671 122.017119) (xy 263.731543 122.01633) + (xy 263.719502 121.963531) (xy 263.719502 121.963522) (xy 263.719507 121.926108) (xy 263.719506 121.926104) + (xy 263.719507 121.918098) (xy 263.719499 121.91796) (xy 263.719499 120.614677) (xy 263.722154 120.603008) + (xy 263.72112 120.594694) (xy 263.731705 120.561028) (xy 263.738011 120.54789) (xy 263.748074 120.526974) + (xy 263.748074 120.526969) (xy 263.75146 120.519933) (xy 263.751625 120.519522) (xy 263.751746 120.51927) + (xy 263.758983 120.504191) (xy 263.8071 120.328042) (xy 263.822537 120.146093) (xy 263.804781 119.964355) + (xy 263.75442 119.788834) (xy 263.673118 119.62533) (xy 263.578675 119.499397) (xy 263.563562 119.479245) + (xy 263.495259 119.416211) (xy 263.429369 119.355404) (xy 263.429366 119.355402) (xy 263.429365 119.355401) + (xy 263.429362 119.355399) (xy 263.274977 119.257901) (xy 263.105487 119.189958) (xy 263.105477 119.189956) + (xy 262.926492 119.153818) (xy 262.926499 119.153818) (xy 262.754794 119.150865) (xy 262.743918 119.150678) + (xy 262.743917 119.150678) (xy 262.743914 119.150678) (xy 262.563797 119.180638) (xy 262.563784 119.180641) + (xy 262.392063 119.242713) (xy 262.377548 119.25117) (xy 262.377463 119.251219) (xy 262.370376 119.25534) + (xy 262.37013 119.255408) (xy 262.342338 119.271644) (xy 262.34209 119.271789) (xy 262.339363 119.272459) + (xy 262.279746 119.288596) (xy 262.239401 119.288593) (xy 262.239297 119.2886) (xy 260.798596 119.2886) + (xy 260.790414 119.288598) (xy 260.790392 119.288593) (xy 260.760465 119.288595) (xy 260.758228 119.288595) + (xy 260.757946 119.288512) (xy 260.695693 119.271662) (xy 260.667871 119.255408) (xy 260.661805 119.251864) + (xy 260.660107 119.251017) (xy 260.652757 119.246734) (xy 260.645921 119.24275) (xy 260.474197 119.180678) + (xy 260.474191 119.180677) (xy 260.294081 119.150719) (xy 260.294078 119.150719) (xy 260.285539 119.150865) + (xy 260.111507 119.153859) (xy 259.932534 119.189994) (xy 259.932523 119.189997) (xy 259.763042 119.257937) + (xy 259.763041 119.257937) (xy 259.608661 119.355432) (xy 259.608658 119.355434) (xy 259.474467 119.479273) + (xy 259.364915 119.625354) (xy 259.28362 119.788844) (xy 259.283619 119.788847) (xy 259.283618 119.78885) + (xy 259.266745 119.847658) (xy 259.233258 119.964365) (xy 259.219478 120.105413) (xy 259.215504 120.146093) + (xy 259.216683 120.159989) (xy 259.230779 120.326147) (xy 259.23094 120.328035) (xy 259.255648 120.418484) + (xy 259.279056 120.504178) (xy 259.27906 120.504188) (xy 259.286298 120.51927) (xy 259.28634 120.519356) + (xy 259.289923 120.526838) (xy 259.289981 120.52714) (xy 259.306297 120.561025) (xy 259.306336 120.561106) + (xy 259.306481 120.562) (xy 259.318501 120.614669) (xy 259.318501 121.963522) (xy 259.306307 122.017145) + (xy 259.305719 122.018371) (xy 259.305639 122.018538) (xy 259.286766 122.057737) (xy 259.286442 122.058539) + (xy 259.279018 122.07401) (xy 259.230901 122.250154) (xy 259.230901 122.250156) (xy 259.215465 122.432106) + (xy 255.2845 122.432106) (xy 255.2845 117.249828) (xy 255.304185 117.182789) (xy 255.356989 117.137034) + (xy 255.426147 117.12709) (xy 255.489703 117.156115) (xy 255.518985 117.193533) (xy 255.545152 117.244888) + (xy 255.644648 117.381834) (xy 255.644651 117.381838) (xy 255.76436 117.501547) (xy 255.764365 117.501551) + (xy 255.844244 117.559586) (xy 255.901315 117.60105) (xy 255.997425 117.65002) (xy 256.052146 117.677903) + (xy 256.052148 117.677903) (xy 256.052151 117.677905) (xy 256.13845 117.705945) (xy 256.213152 117.730218) + (xy 256.380351 117.7567) (xy 256.380356 117.7567) (xy 256.549649 117.7567) (xy 256.716847 117.730218) + (xy 256.877849 117.677905) (xy 257.028685 117.60105) (xy 257.165641 117.501546) (xy 257.285346 117.381841) + (xy 257.285346 117.38184) (xy 257.285349 117.381838) (xy 257.285351 117.381834) (xy 257.306179 117.353167) + (xy 257.38485 117.244885) (xy 257.461705 117.094049) (xy 257.514018 116.933047) (xy 257.5405 116.765849) + (xy 257.5405 116.59655) (xy 257.514928 116.435098) (xy 257.523882 116.365805) (xy 257.568879 116.312353) + (xy 257.63563 116.291713) (xy 257.637401 116.2917) (xy 257.875944 116.2917) (xy 257.875951 116.2917) + (xy 258.155442 116.254904) (xy 258.427739 116.181942) (xy 258.688183 116.074063) (xy 258.932317 115.933112) + (xy 259.155965 115.7615) (xy 259.3553 115.562165) (xy 259.422992 115.473946) (xy 259.47942 115.432744) + (xy 259.549166 115.428589) (xy 259.610086 115.462801) (xy 259.642839 115.524518) (xy 259.637026 115.594146) + (xy 259.628755 115.611433) (xy 259.572683 115.708551) (xy 259.572675 115.708568) (xy 259.462597 115.974321) + (xy 259.388146 116.252176) (xy 259.350601 116.537361) (xy 259.3506 116.537377) (xy 259.3506 116.825022) + (xy 259.350601 116.825038) (xy 259.388146 117.110223) (xy 259.462597 117.388078) (xy 259.572675 117.653831) + (xy 259.572683 117.653848) (xy 259.716504 117.902951) (xy 259.716515 117.902967) (xy 259.891621 118.131171) + (xy 259.891627 118.131178) (xy 260.095021 118.334572) (xy 260.095027 118.334577) (xy 260.323241 118.509691) + (xy 260.323248 118.509695) (xy 260.572351 118.653516) (xy 260.572356 118.653518) (xy 260.572359 118.65352) + (xy 260.572363 118.653521) (xy 260.572368 118.653524) (xy 260.619808 118.673174) (xy 260.83812 118.763602) + (xy 261.115975 118.838053) (xy 261.401171 118.8756) (xy 261.401178 118.8756) (xy 261.688822 118.8756) + (xy 261.688829 118.8756) (xy 261.974025 118.838053) (xy 262.25188 118.763602) (xy 262.517641 118.65352) + (xy 262.520056 118.652126) (xy 262.634067 118.586301) (xy 262.766759 118.509691) (xy 262.994973 118.334577) + (xy 263.198377 118.131173) (xy 263.373491 117.902959) (xy 263.51732 117.653841) (xy 263.627402 117.38808) + (xy 263.701853 117.110225) (xy 263.7394 116.825029) (xy 263.7394 116.59655) (xy 265.5495 116.59655) + (xy 265.5495 116.765849) (xy 265.575981 116.933047) (xy 265.628296 117.094053) (xy 265.705152 117.244888) + (xy 265.804648 117.381834) (xy 265.804651 117.381838) (xy 265.92436 117.501547) (xy 265.924365 117.501551) + (xy 266.004244 117.559586) (xy 266.061315 117.60105) (xy 266.157425 117.65002) (xy 266.212146 117.677903) + (xy 266.212148 117.677903) (xy 266.212151 117.677905) (xy 266.29845 117.705945) (xy 266.373152 117.730218) + (xy 266.540351 117.7567) (xy 266.540356 117.7567) (xy 266.709649 117.7567) (xy 266.876847 117.730218) + (xy 267.037849 117.677905) (xy 267.188685 117.60105) (xy 267.325641 117.501546) (xy 267.445346 117.381841) + (xy 267.445346 117.38184) (xy 267.445349 117.381838) (xy 267.445351 117.381834) (xy 267.466179 117.353167) + (xy 267.54485 117.244885) (xy 267.621705 117.094049) (xy 267.674018 116.933047) (xy 267.7005 116.765849) + (xy 267.7005 116.59655) (xy 267.674018 116.429352) (xy 267.647275 116.347046) (xy 267.621705 116.268351) + (xy 267.621703 116.268348) (xy 267.621703 116.268346) (xy 267.571015 116.168867) (xy 267.54485 116.117515) + (xy 267.513281 116.074064) (xy 267.445351 115.980565) (xy 267.445347 115.98056) (xy 267.325639 115.860852) + (xy 267.325634 115.860848) (xy 267.188688 115.761352) (xy 267.188687 115.761351) (xy 267.188685 115.76135) + (xy 267.139398 115.736237) (xy 267.037853 115.684496) (xy 266.876847 115.632181) (xy 266.709649 115.6057) + (xy 266.709644 115.6057) (xy 266.540356 115.6057) (xy 266.540351 115.6057) (xy 266.373152 115.632181) + (xy 266.212146 115.684496) (xy 266.061311 115.761352) (xy 265.924365 115.860848) (xy 265.92436 115.860852) + (xy 265.804652 115.98056) (xy 265.804648 115.980565) (xy 265.705152 116.117511) (xy 265.628296 116.268346) + (xy 265.575981 116.429352) (xy 265.5495 116.59655) (xy 263.7394 116.59655) (xy 263.7394 116.537371) + (xy 263.701853 116.252175) (xy 263.627402 115.97432) (xy 263.539705 115.762601) (xy 263.517324 115.708568) + (xy 263.517316 115.708551) (xy 263.373495 115.459448) (xy 263.373491 115.459441) (xy 263.232073 115.275141) + (xy 263.198378 115.231228) (xy 263.198372 115.231221) (xy 262.994978 115.027827) (xy 262.994971 115.027821) + (xy 262.766767 114.852715) (xy 262.766765 114.852713) (xy 262.766759 114.852709) (xy 262.766754 114.852706) + (xy 262.766751 114.852704) (xy 262.517648 114.708883) (xy 262.517631 114.708875) (xy 262.251878 114.598797) + (xy 261.974023 114.524346) (xy 261.688838 114.486801) (xy 261.688835 114.4868) (xy 261.688829 114.4868) + (xy 261.401171 114.4868) (xy 261.401165 114.4868) (xy 261.401161 114.486801) (xy 261.115976 114.524346) + (xy 260.838121 114.598797) (xy 260.572368 114.708875) (xy 260.572351 114.708883) (xy 260.323248 114.852704) + (xy 260.323232 114.852715) (xy 260.095028 115.027821) (xy 260.095021 115.027827) (xy 259.891627 115.231221) + (xy 259.82043 115.324007) (xy 259.764001 115.365209) (xy 259.694255 115.369364) (xy 259.633335 115.335151) + (xy 259.600583 115.273434) (xy 259.606396 115.203807) (xy 259.614661 115.186531) (xy 259.667863 115.094383) + (xy 259.775742 114.833939) (xy 259.848704 114.561642) (xy 259.8855 114.282151) (xy 259.8855 114.000249) + (xy 259.848704 113.720758) (xy 259.775742 113.448461) (xy 259.76876 113.431606) (xy 259.743765 113.371261) + (xy 259.667863 113.188017) (xy 259.667861 113.188014) (xy 259.667859 113.188009) (xy 259.526916 112.94389) + (xy 259.526912 112.943883) (xy 259.3553 112.720235) (xy 259.355298 112.720233) (xy 259.355295 112.720229) + (xy 259.15597 112.520904) (xy 259.131161 112.501867) (xy 258.932317 112.349288) (xy 258.932311 112.349284) + (xy 258.932309 112.349283) (xy 258.68819 112.20834) (xy 258.688179 112.208335) (xy 258.427743 112.100459) + (xy 258.155439 112.027495) (xy 257.875958 111.9907) (xy 257.875951 111.9907) (xy 257.594049 111.9907) + (xy 257.594041 111.9907) (xy 257.31456 112.027495) (xy 257.042256 112.100459) (xy 256.78182 112.208335) + (xy 256.781809 112.20834) (xy 256.53769 112.349283) (xy 256.537682 112.349289) (xy 256.314029 112.520904) + (xy 256.114704 112.720229) (xy 255.943089 112.943882) (xy 255.943083 112.94389) (xy 255.80214 113.188009) + (xy 255.802135 113.18802) (xy 255.694259 113.448456) (xy 255.621295 113.72076) (xy 255.5845 114.000241) + (xy 255.5845 114.282158) (xy 255.621295 114.561639) (xy 255.694259 114.833943) (xy 255.802135 115.094379) + (xy 255.80214 115.09439) (xy 255.943083 115.338509) (xy 255.943094 115.338525) (xy 256.073838 115.508914) + (xy 256.099032 115.574083) (xy 256.084994 115.642528) (xy 256.03618 115.692517) (xy 256.031758 115.694884) + (xy 255.901313 115.76135) (xy 255.764365 115.860848) (xy 255.76436 115.860852) (xy 255.644652 115.98056) + (xy 255.644648 115.980565) (xy 255.54515 116.117513) (xy 255.518984 116.168867) (xy 255.47101 116.219662) + (xy 255.403189 116.236457) (xy 255.337054 116.213919) (xy 255.293603 116.159204) (xy 255.2845 116.112571) + (xy 255.2845 115.01413) (xy 255.284526 114.968878) (xy 255.2845 114.968815) (xy 255.2845 114.968747) + (xy 255.267462 114.927614) (xy 255.24994 114.885243) (xy 255.249936 114.885239) (xy 255.249866 114.885134) + (xy 255.249865 114.885132) (xy 255.218567 114.853834) (xy 254.950241 114.5852) (xy 254.916793 114.52386) + (xy 254.921817 114.454171) (xy 254.923393 114.450166) (xy 254.954737 114.374497) (xy 254.9855 114.219842) + (xy 254.9855 114.062158) (xy 254.9855 114.062155) (xy 254.985499 114.062153) (xy 254.973556 114.002113) + (xy 254.954737 113.907503) (xy 254.927278 113.841211) (xy 254.894397 113.761827) (xy 254.89439 113.761814) + (xy 254.806789 113.630711) (xy 254.806786 113.630707) (xy 254.695292 113.519213) (xy 254.695288 113.51921) + (xy 254.564185 113.431609) (xy 254.564172 113.431602) (xy 254.418501 113.371264) (xy 254.418489 113.371261) + (xy 254.263845 113.3405) (xy 254.263842 113.3405) (xy 254.106158 113.3405) (xy 254.106155 113.3405) + (xy 253.95151 113.371261) (xy 253.951503 113.371263) (xy 253.876368 113.402384) (xy 253.806899 113.409851) + (xy 253.74442 113.378576) (xy 253.741236 113.375503) (xy 251.825974 111.460241) (xy 261.9345 111.460241) + (xy 261.9345 111.742158) (xy 261.971295 112.021639) (xy 262.044259 112.293943) (xy 262.152135 112.554379) + (xy 262.15214 112.55439) (xy 262.293083 112.798509) (xy 262.293088 112.798517) (xy 262.411074 112.952278) + (xy 262.464704 113.02217) (xy 262.664029 113.221495) (xy 262.664033 113.221498) (xy 262.664035 113.2215) + (xy 262.887683 113.393112) (xy 262.88769 113.393116) (xy 263.131809 113.534059) (xy 263.131814 113.534061) + (xy 263.131817 113.534063) (xy 263.239834 113.578805) (xy 263.357486 113.627538) (xy 263.392261 113.641942) + (xy 263.664558 113.714904) (xy 263.944049 113.7517) (xy 263.944056 113.7517) (xy 264.225944 113.7517) + (xy 264.225951 113.7517) (xy 264.505442 113.714904) (xy 264.777739 113.641942) (xy 265.038183 113.534063) + (xy 265.282317 113.393112) (xy 265.505965 113.2215) (xy 265.7053 113.022165) (xy 265.876912 112.798517) + (xy 266.017863 112.554383) (xy 266.125742 112.293939) (xy 266.198704 112.021642) (xy 266.2355 111.742151) + (xy 266.2355 111.460249) (xy 266.198704 111.180758) (xy 266.125742 110.908461) (xy 266.11876 110.891606) + (xy 266.093765 110.831261) (xy 266.017863 110.648017) (xy 266.017861 110.648014) (xy 266.017859 110.648009) + (xy 265.876916 110.40389) (xy 265.876912 110.403883) (xy 265.7053 110.180235) (xy 265.705298 110.180233) + (xy 265.705295 110.180229) (xy 265.50597 109.980904) (xy 265.505965 109.9809) (xy 265.282317 109.809288) + (xy 265.282311 109.809284) (xy 265.282309 109.809283) (xy 265.03819 109.66834) (xy 265.038179 109.668335) + (xy 264.777743 109.560459) (xy 264.505439 109.487495) (xy 264.225958 109.4507) (xy 264.225951 109.4507) + (xy 263.944049 109.4507) (xy 263.944041 109.4507) (xy 263.66456 109.487495) (xy 263.392256 109.560459) + (xy 263.13182 109.668335) (xy 263.131809 109.66834) (xy 262.88769 109.809283) (xy 262.887684 109.809287) + (xy 262.887683 109.809288) (xy 262.840169 109.845747) (xy 262.664029 109.980904) (xy 262.464704 110.180229) + (xy 262.351381 110.327914) (xy 262.304327 110.389237) (xy 262.293089 110.403882) (xy 262.293083 110.40389) + (xy 262.15214 110.648009) (xy 262.152135 110.64802) (xy 262.044259 110.908456) (xy 261.971295 111.18076) + (xy 261.9345 111.460241) (xy 251.825974 111.460241) (xy 244.871819 104.506086) (xy 244.838334 104.444763) + (xy 244.8355 104.418405) (xy 244.8355 103.491706) (xy 249.650265 103.491706) (xy 249.66763 103.669446) + (xy 249.668021 103.673442) (xy 249.686931 103.739348) (xy 249.71838 103.848961) (xy 249.79968 104.012463) + (xy 249.799681 104.012465) (xy 249.799683 104.012468) (xy 249.856723 104.088527) (xy 249.909238 104.158552) + (xy 249.909239 104.158553) (xy 249.90924 104.158554) (xy 250.043432 104.282395) (xy 250.197825 104.379897) + (xy 250.332977 104.434074) (xy 250.367314 104.447839) (xy 250.367315 104.447839) (xy 250.367317 104.44784) + (xy 250.546308 104.483979) (xy 250.546302 104.483979) (xy 250.562622 104.484259) (xy 250.728884 104.48712) + (xy 250.909012 104.457158) (xy 250.956064 104.44015) (xy 251.080736 104.395085) (xy 251.080737 104.395083) + (xy 251.08074 104.395083) (xy 251.095775 104.38632) (xy 251.102459 104.382435) (xy 251.10275 104.382357) + (xy 251.130633 104.36606) (xy 251.130751 104.365992) (xy 251.133968 104.365201) (xy 251.193062 104.349199) + (xy 252.674192 104.349199) (xy 252.674314 104.349206) (xy 252.682405 104.349205) (xy 252.682408 104.349206) + (xy 252.714542 104.349202) (xy 252.777104 104.366134) (xy 252.80493 104.382391) (xy 252.804932 104.382391) + (xy 252.81108 104.385983) (xy 252.812735 104.386808) (xy 252.813205 104.387082) (xy 252.826878 104.39505) + (xy 252.9986 104.457121) (xy 253.178721 104.487082) (xy 253.358398 104.48399) (xy 253.361291 104.483941) + (xy 253.540266 104.447805) (xy 253.540269 104.447803) (xy 253.540274 104.447803) (xy 253.70976 104.379862) + (xy 253.864146 104.282363) (xy 253.866819 104.279897) (xy 253.99833 104.15853) (xy 253.998332 104.158528) + (xy 254.005737 104.148654) (xy 254.107885 104.012447) (xy 254.189184 103.848948) (xy 254.239542 103.673433) + (xy 254.257297 103.491703) (xy 254.24186 103.30976) (xy 254.241858 103.309754) (xy 254.227201 103.256097) + (xy 254.193743 103.133618) (xy 254.185983 103.117449) (xy 254.182896 103.111004) (xy 254.182848 103.110746) + (xy 254.166471 103.076719) (xy 254.166343 103.07593) (xy 254.154302 103.023131) (xy 254.154302 103.022698) + (xy 254.154307 102.985708) (xy 254.154306 102.985704) (xy 254.154307 102.977698) (xy 254.154299 102.97756) + (xy 254.154299 101.674279) (xy 254.156955 101.662607) (xy 254.155921 101.654291) (xy 254.166509 101.620623) + (xy 254.173123 101.606843) (xy 254.173173 101.606739) (xy 254.186251 101.579555) (xy 254.186418 101.579135) + (xy 254.193783 101.563791) (xy 254.2419 101.387642) (xy 254.257337 101.205693) (xy 254.239581 101.023955) + (xy 254.18922 100.848434) (xy 254.107918 100.68493) (xy 253.998361 100.538844) (xy 253.864169 100.415004) + (xy 253.864166 100.415002) (xy 253.864165 100.415001) (xy 253.864162 100.414999) (xy 253.709777 100.317501) + (xy 253.540287 100.249558) (xy 253.540277 100.249556) (xy 253.361292 100.213418) (xy 253.361299 100.213418) + (xy 253.189594 100.210465) (xy 253.178718 100.210278) (xy 253.178717 100.210278) (xy 253.178714 100.210278) + (xy 252.998597 100.240238) (xy 252.998584 100.240241) (xy 252.826863 100.302313) (xy 252.812348 100.31077) + (xy 252.812263 100.310819) (xy 252.805176 100.31494) (xy 252.80493 100.315008) (xy 252.777138 100.331244) + (xy 252.77689 100.331389) (xy 252.774163 100.332059) (xy 252.714546 100.348196) (xy 252.674201 100.348193) + (xy 252.674097 100.3482) (xy 251.233396 100.3482) (xy 251.225214 100.348198) (xy 251.225192 100.348193) + (xy 251.195265 100.348195) (xy 251.193028 100.348195) (xy 251.192746 100.348112) (xy 251.130493 100.331262) + (xy 251.102671 100.315008) (xy 251.096605 100.311464) (xy 251.094907 100.310617) (xy 251.086616 100.305786) + (xy 251.080721 100.30235) (xy 250.908997 100.240278) (xy 250.908991 100.240277) (xy 250.728881 100.210319) + (xy 250.728878 100.210319) (xy 250.720339 100.210465) (xy 250.546307 100.213459) (xy 250.367334 100.249594) + (xy 250.367323 100.249597) (xy 250.197842 100.317537) (xy 250.197841 100.317537) (xy 250.043461 100.415032) + (xy 250.043458 100.415034) (xy 249.909267 100.538873) (xy 249.799715 100.684954) (xy 249.71842 100.848444) + (xy 249.718419 100.848447) (xy 249.718418 100.84845) (xy 249.696751 100.923965) (xy 249.668058 101.023965) + (xy 249.650908 101.199511) (xy 249.650304 101.205693) (xy 249.654208 101.251713) (xy 249.665237 101.381713) + (xy 249.66574 101.387635) (xy 249.698304 101.506843) (xy 249.713856 101.563778) (xy 249.71386 101.563788) + (xy 249.721098 101.57887) (xy 249.72114 101.578956) (xy 249.724723 101.586438) (xy 249.724781 101.58674) + (xy 249.741096 101.620623) (xy 249.741136 101.620706) (xy 249.741281 101.6216) (xy 249.753301 101.674269) + (xy 249.753301 103.023126) (xy 249.741081 103.076803) (xy 249.740802 103.077384) (xy 249.740747 103.077499) + (xy 249.721567 103.117334) (xy 249.72124 103.118144) (xy 249.713818 103.13361) (xy 249.665701 103.309754) + (xy 249.665701 103.309756) (xy 249.650265 103.491706) (xy 244.8355 103.491706) (xy 244.8355 97.54655) + (xy 245.812 97.54655) (xy 245.812 97.715849) (xy 245.838481 97.883047) (xy 245.890796 98.044053) + (xy 245.967652 98.194888) (xy 246.067148 98.331834) (xy 246.067152 98.331839) (xy 246.18686 98.451547) + (xy 246.186865 98.451551) (xy 246.263873 98.5075) (xy 246.323815 98.55105) (xy 246.417141 98.598602) + (xy 246.474646 98.627903) (xy 246.474648 98.627903) (xy 246.474651 98.627905) (xy 246.55885 98.655263) + (xy 246.635652 98.680218) (xy 246.802851 98.7067) (xy 246.802856 98.7067) (xy 246.972149 98.7067) + (xy 247.139347 98.680218) (xy 247.300349 98.627905) (xy 247.451185 98.55105) (xy 247.588141 98.451546) + (xy 247.707846 98.331841) (xy 247.80735 98.194885) (xy 247.884205 98.044049) (xy 247.936518 97.883047) + (xy 247.946383 97.820763) (xy 247.963 97.715849) (xy 247.963 97.54655) (xy 247.937428 97.385098) + (xy 247.946382 97.315805) (xy 247.991379 97.262353) (xy 248.05813 97.241713) (xy 248.059901 97.2417) + (xy 248.298444 97.2417) (xy 248.298451 97.2417) (xy 248.577942 97.204904) (xy 248.850239 97.131942) + (xy 249.110683 97.024063) (xy 249.354817 96.883112) (xy 249.578465 96.7115) (xy 249.7778 96.512165) + (xy 249.845492 96.423946) (xy 249.90192 96.382744) (xy 249.971666 96.378589) (xy 250.032586 96.412801) + (xy 250.065339 96.474518) (xy 250.059526 96.544146) (xy 250.051255 96.561433) (xy 249.995183 96.658551) + (xy 249.995175 96.658568) (xy 249.885097 96.924321) (xy 249.810646 97.202176) (xy 249.773101 97.487361) + (xy 249.7731 97.487377) (xy 249.7731 97.775022) (xy 249.773101 97.775038) (xy 249.810646 98.060223) + (xy 249.885097 98.338078) (xy 249.995175 98.603831) (xy 249.995183 98.603848) (xy 250.139004 98.852951) + (xy 250.139015 98.852967) (xy 250.314121 99.081171) (xy 250.314127 99.081178) (xy 250.517521 99.284572) + (xy 250.517528 99.284578) (xy 250.650807 99.386846) (xy 250.745741 99.459691) (xy 250.745748 99.459695) + (xy 250.994851 99.603516) (xy 250.994856 99.603518) (xy 250.994859 99.60352) (xy 250.994863 99.603521) + (xy 250.994868 99.603524) (xy 251.037477 99.621173) (xy 251.26062 99.713602) (xy 251.538475 99.788053) + (xy 251.823671 99.8256) (xy 251.823678 99.8256) (xy 252.111322 99.8256) (xy 252.111329 99.8256) + (xy 252.396525 99.788053) (xy 252.67438 99.713602) (xy 252.940141 99.60352) (xy 253.189259 99.459691) + (xy 253.417473 99.284577) (xy 253.620877 99.081173) (xy 253.795991 98.852959) (xy 253.93982 98.603841) + (xy 254.049902 98.33808) (xy 254.124353 98.060225) (xy 254.1619 97.775029) (xy 254.1619 97.54655) + (xy 255.972 97.54655) (xy 255.972 97.715849) (xy 255.998481 97.883047) (xy 256.050796 98.044053) + (xy 256.127652 98.194888) (xy 256.227148 98.331834) (xy 256.227152 98.331839) (xy 256.34686 98.451547) + (xy 256.346865 98.451551) (xy 256.423873 98.5075) (xy 256.483815 98.55105) (xy 256.577141 98.598602) + (xy 256.634646 98.627903) (xy 256.634648 98.627903) (xy 256.634651 98.627905) (xy 256.71885 98.655263) + (xy 256.795652 98.680218) (xy 256.962851 98.7067) (xy 256.962856 98.7067) (xy 257.132149 98.7067) + (xy 257.299347 98.680218) (xy 257.460349 98.627905) (xy 257.611185 98.55105) (xy 257.748141 98.451546) + (xy 257.867846 98.331841) (xy 257.96735 98.194885) (xy 258.044205 98.044049) (xy 258.096518 97.883047) + (xy 258.106383 97.820763) (xy 258.123 97.715849) (xy 258.123 97.54655) (xy 258.096518 97.379352) + (xy 258.051796 97.241713) (xy 258.044205 97.218351) (xy 258.044203 97.218348) (xy 258.044203 97.218346) + (xy 258.000176 97.13194) (xy 257.96735 97.067515) (xy 257.935781 97.024064) (xy 257.867851 96.930565) + (xy 257.867847 96.93056) (xy 257.748139 96.810852) (xy 257.748134 96.810848) (xy 257.611188 96.711352) + (xy 257.611187 96.711351) (xy 257.611185 96.71135) (xy 257.564082 96.68735) (xy 257.460353 96.634496) + (xy 257.299347 96.582181) (xy 257.132149 96.5557) (xy 257.132144 96.5557) (xy 256.962856 96.5557) + (xy 256.962851 96.5557) (xy 256.795652 96.582181) (xy 256.634646 96.634496) (xy 256.483811 96.711352) + (xy 256.346865 96.810848) (xy 256.34686 96.810852) (xy 256.227152 96.93056) (xy 256.227148 96.930565) + (xy 256.127652 97.067511) (xy 256.050796 97.218346) (xy 255.998481 97.379352) (xy 255.972 97.54655) + (xy 254.1619 97.54655) (xy 254.1619 97.487371) (xy 254.124353 97.202175) (xy 254.049902 96.92432) + (xy 253.93982 96.658559) (xy 253.939818 96.658556) (xy 253.939816 96.658551) (xy 253.795995 96.409448) + (xy 253.795991 96.409441) (xy 253.692069 96.274007) (xy 253.620878 96.181228) (xy 253.620872 96.181221) + (xy 253.417478 95.977827) (xy 253.417471 95.977821) (xy 253.189267 95.802715) (xy 253.189265 95.802713) + (xy 253.189259 95.802709) (xy 253.189254 95.802706) (xy 253.189251 95.802704) (xy 252.940148 95.658883) + (xy 252.940131 95.658875) (xy 252.674378 95.548797) (xy 252.396523 95.474346) (xy 252.111338 95.436801) + (xy 252.111335 95.4368) (xy 252.111329 95.4368) (xy 251.823671 95.4368) (xy 251.823665 95.4368) + (xy 251.823661 95.436801) (xy 251.538476 95.474346) (xy 251.260621 95.548797) (xy 250.994868 95.658875) + (xy 250.994851 95.658883) (xy 250.745748 95.802704) (xy 250.745732 95.802715) (xy 250.517528 95.977821) + (xy 250.517521 95.977827) (xy 250.314127 96.181221) (xy 250.24293 96.274007) (xy 250.186501 96.315209) + (xy 250.116755 96.319364) (xy 250.055835 96.285151) (xy 250.023083 96.223434) (xy 250.028896 96.153807) + (xy 250.037161 96.136531) (xy 250.090363 96.044383) (xy 250.198242 95.783939) (xy 250.271204 95.511642) + (xy 250.308 95.232151) (xy 250.308 94.950249) (xy 250.271204 94.670758) (xy 250.198242 94.398461) + (xy 250.191342 94.381804) (xy 250.166349 94.321464) (xy 250.090363 94.138017) (xy 250.090361 94.138014) + (xy 250.090359 94.138009) (xy 249.949416 93.89389) (xy 249.949412 93.893883) (xy 249.7778 93.670235) + (xy 249.777798 93.670233) (xy 249.777795 93.670229) (xy 249.57847 93.470904) (xy 249.553921 93.452067) + (xy 249.354817 93.299288) (xy 249.354811 93.299284) (xy 249.354809 93.299283) (xy 249.11069 93.15834) + (xy 249.110679 93.158335) (xy 248.850243 93.050459) (xy 248.577939 92.977495) (xy 248.298458 92.9407) + (xy 248.298451 92.9407) (xy 248.016549 92.9407) (xy 248.016541 92.9407) (xy 247.73706 92.977495) + (xy 247.464756 93.050459) (xy 247.20432 93.158335) (xy 247.204309 93.15834) (xy 246.96019 93.299283) + (xy 246.960184 93.299287) (xy 246.960183 93.299288) (xy 246.898401 93.346695) (xy 246.736529 93.470904) + (xy 246.537204 93.670229) (xy 246.413314 93.831685) (xy 246.379927 93.875197) (xy 246.365589 93.893882) + (xy 246.365583 93.89389) (xy 246.22464 94.138009) (xy 246.224635 94.13802) (xy 246.116759 94.398456) + (xy 246.043795 94.67076) (xy 246.007 94.950241) (xy 246.007 95.232158) (xy 246.043795 95.511639) + (xy 246.116759 95.783943) (xy 246.224635 96.044379) (xy 246.22464 96.04439) (xy 246.365583 96.288509) + (xy 246.365594 96.288525) (xy 246.496338 96.458914) (xy 246.521532 96.524083) (xy 246.507494 96.592528) + (xy 246.45868 96.642517) (xy 246.454258 96.644884) (xy 246.323813 96.71135) (xy 246.186865 96.810848) + (xy 246.18686 96.810852) (xy 246.067152 96.93056) (xy 246.067148 96.930565) (xy 245.967652 97.067511) + (xy 245.890796 97.218346) (xy 245.838481 97.379352) (xy 245.812 97.54655) (xy 244.8355 97.54655) + (xy 244.8355 95.946275) (xy 244.855185 95.879236) (xy 244.907989 95.833481) (xy 244.911999 95.831734) + (xy 244.987179 95.800594) (xy 245.118289 95.712989) (xy 245.229789 95.601489) (xy 245.317394 95.470379) + (xy 245.377737 95.324697) (xy 245.4085 95.170042) (xy 245.4085 95.012358) (xy 245.4085 95.012355) + (xy 245.408499 95.012353) (xy 245.377738 94.85771) (xy 245.377737 94.857703) (xy 245.377735 94.857698) + (xy 245.317397 94.712027) (xy 245.31739 94.712014) (xy 245.229789 94.580911) (xy 245.229786 94.580907) + (xy 245.118292 94.469413) (xy 245.118288 94.46941) (xy 244.987185 94.381809) (xy 244.987172 94.381802) + (xy 244.841501 94.321464) (xy 244.841489 94.321461) (xy 244.686845 94.2907) (xy 244.686842 94.2907) + (xy 244.529158 94.2907) (xy 244.529155 94.2907) (xy 244.37451 94.321461) (xy 244.374498 94.321464) + (xy 244.228827 94.381802) (xy 244.228814 94.381809) (xy 244.097711 94.46941) (xy 244.097707 94.469413) + (xy 243.986213 94.580907) (xy 243.98621 94.580911) (xy 243.898609 94.712014) (xy 243.898602 94.712027) + (xy 243.838264 94.857698) (xy 243.838261 94.85771) (xy 243.8075 95.012353) (xy 243.8075 95.170046) + (xy 243.838261 95.324689) (xy 243.838264 95.324701) (xy 243.898602 95.470372) (xy 243.898609 95.470385) + (xy 243.98621 95.601488) (xy 243.986213 95.601492) (xy 244.097707 95.712986) (xy 244.097711 95.712989) + (xy 244.228814 95.80059) (xy 244.228818 95.800592) (xy 244.228821 95.800594) (xy 244.303954 95.831715) + (xy 244.358356 95.875554) (xy 244.380421 95.941848) (xy 244.3805 95.946275) (xy 244.3805 104.518747) + (xy 244.3805 104.609253) (xy 244.390855 104.634253) (xy 244.415136 104.69287) (xy 253.419503 113.697236) + (xy 253.452988 113.758559) (xy 253.448004 113.828251) (xy 253.446384 113.832368) (xy 253.415263 113.907503) + (xy 253.415261 113.90751) (xy 253.3845 114.062153) (xy 253.3845 114.219846) (xy 253.415261 114.374489) + (xy 253.415264 114.374501) (xy 253.475602 114.520172) (xy 253.475609 114.520185) (xy 253.56321 114.651288) + (xy 253.563213 114.651292) (xy 253.674707 114.762786) (xy 253.674711 114.762789) (xy 253.805814 114.85039) + (xy 253.805827 114.850397) (xy 253.902653 114.890503) (xy 253.951503 114.910737) (xy 254.104499 114.94117) + (xy 254.106153 114.941499) (xy 254.106156 114.9415) (xy 254.106158 114.9415) (xy 254.263844 114.9415) + (xy 254.263845 114.941499) (xy 254.418497 114.910737) (xy 254.493141 114.879818) (xy 254.513049 114.877678) + (xy 254.531815 114.870691) (xy 254.547075 114.874019) (xy 254.562607 114.87235) (xy 254.580515 114.881314) + (xy 254.60008 114.885582) (xy 254.622279 114.90222) (xy 254.625086 114.903625) (xy 254.628322 114.906749) + (xy 254.793231 115.071847) (xy 254.826681 115.133188) (xy 254.8295 115.159477) (xy 254.8295 126.145404) + (xy 254.809815 126.212443) (xy 254.757011 126.258198) (xy 254.687853 126.268142) (xy 254.624297 126.239117) + (xy 254.617819 126.233085) (xy 251.153819 122.769085) (xy 251.120334 122.707762) (xy 251.1175 122.681404) + (xy 251.1175 112.186747) (xy 251.107355 112.162257) (xy 251.082866 112.103132) (xy 251.082863 112.103129) + (xy 251.082863 112.103128) (xy 242.071819 103.092084) (xy 242.038334 103.030761) (xy 242.0355 103.004403) + (xy 242.0355 92.410241) (xy 252.357 92.410241) (xy 252.357 92.692158) (xy 252.393795 92.971639) + (xy 252.466759 93.243943) (xy 252.574635 93.504379) (xy 252.57464 93.50439) (xy 252.715583 93.748509) + (xy 252.715588 93.748517) (xy 252.8872 93.972165) (xy 252.887204 93.97217) (xy 253.086529 94.171495) + (xy 253.086533 94.171498) (xy 253.086535 94.1715) (xy 253.310183 94.343112) (xy 253.31019 94.343116) + (xy 253.554309 94.484059) (xy 253.554314 94.484061) (xy 253.554317 94.484063) (xy 253.814761 94.591942) + (xy 254.087058 94.664904) (xy 254.366549 94.7017) (xy 254.366556 94.7017) (xy 254.648444 94.7017) + (xy 254.648451 94.7017) (xy 254.927942 94.664904) (xy 255.200239 94.591942) (xy 255.460683 94.484063) + (xy 255.704817 94.343112) (xy 255.928465 94.1715) (xy 256.1278 93.972165) (xy 256.299412 93.748517) + (xy 256.440363 93.504383) (xy 256.548242 93.243939) (xy 256.621204 92.971642) (xy 256.658 92.692151) + (xy 256.658 92.410249) (xy 256.621204 92.130758) (xy 256.548242 91.858461) (xy 256.541342 91.841804) + (xy 256.516349 91.781464) (xy 256.440363 91.598017) (xy 256.440361 91.598014) (xy 256.440359 91.598009) + (xy 256.299416 91.35389) (xy 256.299412 91.353883) (xy 256.1278 91.130235) (xy 256.127798 91.130233) + (xy 256.127795 91.130229) (xy 255.92847 90.930904) (xy 255.928465 90.9309) (xy 255.704817 90.759288) + (xy 255.704811 90.759284) (xy 255.704809 90.759283) (xy 255.46069 90.61834) (xy 255.460679 90.618335) + (xy 255.200243 90.510459) (xy 254.927939 90.437495) (xy 254.648458 90.4007) (xy 254.648451 90.4007) + (xy 254.366549 90.4007) (xy 254.366541 90.4007) (xy 254.08706 90.437495) (xy 253.814756 90.510459) + (xy 253.55432 90.618335) (xy 253.554309 90.61834) (xy 253.31019 90.759283) (xy 253.310184 90.759287) + (xy 253.310183 90.759288) (xy 253.274557 90.786625) (xy 253.086529 90.930904) (xy 252.887204 91.130229) + (xy 252.817704 91.220803) (xy 252.726612 91.339517) (xy 252.715589 91.353882) (xy 252.715583 91.35389) + (xy 252.57464 91.598009) (xy 252.574635 91.59802) (xy 252.466759 91.858456) (xy 252.393795 92.13076) + (xy 252.357 92.410241) (xy 242.0355 92.410241) (xy 242.0355 91.751302) (xy 242.055185 91.684263) + (xy 242.071821 91.663618) (xy 242.167942 91.567503) (xy 247.662644 86.073115) (xy 248.876912 84.858916) + (xy 248.938236 84.825433) (xy 248.964591 84.8226) (xy 254.295755 84.8226) (xy 254.29576 84.822602) + (xy 254.331962 84.8226) (xy 254.386253 84.8226) (xy 254.386254 84.822599) (xy 254.386279 84.822594) + (xy 254.386784 84.822382) (xy 254.427685 84.805438) (xy 254.427685 84.805437) (xy 254.427692 84.805435) + (xy 254.463354 84.790662) (xy 254.469217 84.788618) (xy 254.469876 84.787958) (xy 254.469879 84.787958) + (xy 254.506196 84.751635) (xy 254.506204 84.751631) (xy 254.506203 84.75163) (xy 254.544054 84.713779) + (xy 254.54407 84.713757) (xy 257.826379 81.431086) (xy 257.827585 81.4302) (xy 257.827973 81.42952) + (xy 257.831748 81.427142) (xy 257.856604 81.408881) (xy 257.863462 81.405294) (xy 257.868775 81.403313) + (xy 257.903018 81.384611) (xy 257.903966 81.384116) (xy 257.937178 81.377515) (xy 257.970258 81.370316) + (xy 257.971633 81.370667) (xy 257.972495 81.370496) (xy 257.975318 81.371607) (xy 258.012935 81.381206) + (xy 258.115041 81.427838) (xy 258.18208 81.447523) (xy 258.182084 81.447524) (xy 258.3245 81.468) + (xy 258.324503 81.468) (xy 263.5745 81.468) (xy 263.641539 81.487685) (xy 263.687294 81.540489) + (xy 263.6985 81.592) (xy 263.6985 86.536817) (xy 263.678815 86.603856) (xy 263.662187 86.624492) + (xy 258.501709 91.785672) (xy 258.440388 91.819161) (xy 258.370696 91.814182) (xy 258.366571 91.812559) + (xy 258.301733 91.785703) (xy 258.291497 91.781463) (xy 258.291493 91.781462) (xy 258.291489 91.781461) + (xy 258.136845 91.7507) (xy 258.136842 91.7507) (xy 257.979158 91.7507) (xy 257.979155 91.7507) + (xy 257.82451 91.781461) (xy 257.824498 91.781464) (xy 257.678827 91.841802) (xy 257.678814 91.841809) + (xy 257.547711 91.92941) (xy 257.547707 91.929413) (xy 257.436213 92.040907) (xy 257.43621 92.040911) + (xy 257.348609 92.172014) (xy 257.348602 92.172027) (xy 257.288264 92.317698) (xy 257.288261 92.31771) + (xy 257.2575 92.472353) (xy 257.2575 92.630046) (xy 257.288261 92.784689) (xy 257.288264 92.784701) + (xy 257.348602 92.930372) (xy 257.348609 92.930385) (xy 257.43621 93.061488) (xy 257.436213 93.061492) + (xy 257.547707 93.172986) (xy 257.547711 93.172989) (xy 257.678814 93.26059) (xy 257.678827 93.260597) + (xy 257.774499 93.300225) (xy 257.824503 93.320937) (xy 257.979153 93.351699) (xy 257.979156 93.3517) + (xy 257.979158 93.3517) (xy 258.136844 93.3517) (xy 258.136845 93.351699) (xy 258.291497 93.320937) + (xy 258.291511 93.32093) (xy 258.296498 93.319419) (xy 258.366365 93.318792) (xy 258.42548 93.356037) + (xy 258.455074 93.41933) (xy 258.4565 93.438078) (xy 258.4565 101.868747) (xy 258.4565 101.959253) + (xy 258.4857 102.029748) (xy 258.491136 102.04287) (xy 267.199365 110.751099) (xy 267.23285 110.812422) + (xy 267.227866 110.882114) (xy 267.185994 110.938047) (xy 267.180577 110.941881) (xy 267.124709 110.979211) + (xy 267.013213 111.090707) (xy 267.01321 111.090711) (xy 266.925609 111.221814) (xy 266.925602 111.221827) + (xy 266.865264 111.367498) (xy 266.865261 111.36751) (xy 266.8345 111.522153) (xy 266.8345 111.679846) + (xy 266.865261 111.834489) (xy 266.865264 111.834501) (xy 266.925602 111.980172) (xy 266.925609 111.980185) + (xy 267.01321 112.111288) (xy 267.013213 112.111292) (xy 267.124707 112.222786) (xy 267.124711 112.222789) + (xy 267.255814 112.31039) (xy 267.255827 112.310397) (xy 267.401498 112.370735) (xy 267.401503 112.370737) + (xy 267.556153 112.401499) (xy 267.556156 112.4015) (xy 267.556158 112.4015) (xy 267.713844 112.4015) + (xy 267.713845 112.401499) (xy 267.868497 112.370737) (xy 268.014179 112.310394) (xy 268.145289 112.222789) + (xy 268.193921 112.174157) (xy 268.249819 112.11826) (xy 268.311142 112.084775) (xy 268.380834 112.089759) + (xy 268.436767 112.131631) (xy 268.461184 112.197095) (xy 268.4615 112.205941) (xy 268.4615 126.251253) + (xy 268.496136 126.33487) (xy 271.962366 129.801099) (xy 271.995851 129.862422) (xy 271.990867 129.932114) + (xy 271.948995 129.988047) (xy 271.943577 129.991882) (xy 271.887707 130.029213) (xy 271.776213 130.140707) + (xy 271.77621 130.140711) (xy 271.688609 130.271814) (xy 271.688602 130.271827) (xy 271.628264 130.417498) + (xy 271.628261 130.41751) (xy 271.5975 130.572153) (xy 271.5975 130.729846) (xy 271.628261 130.884489) + (xy 271.628264 130.884501) (xy 271.688602 131.030172) (xy 271.688609 131.030185) (xy 271.77621 131.161288) + (xy 271.776213 131.161292) (xy 271.887707 131.272786) (xy 271.887711 131.272789) (xy 272.018814 131.36039) + (xy 272.018827 131.360397) (xy 272.160679 131.419153) (xy 272.164503 131.420737) (xy 272.319153 131.451499) + (xy 272.319156 131.4515) (xy 272.319158 131.4515) (xy 272.476844 131.4515) (xy 272.476845 131.451499) + (xy 272.631497 131.420737) (xy 272.777179 131.360394) (xy 272.908289 131.272789) (xy 272.952377 131.228701) + (xy 273.011819 131.16926) (xy 273.073142 131.135775) (xy 273.142834 131.140759) (xy 273.198767 131.182631) + (xy 273.223184 131.248095) (xy 273.2235 131.256941) (xy 273.2235 135.685747) (xy 273.2235 135.776253) + (xy 273.239901 135.815849) (xy 273.258136 135.85987) (xy 281.658181 144.259914) (xy 281.691666 144.321237) + (xy 281.6945 144.347595) (xy 281.6945 148.845924) (xy 281.674815 148.912963) (xy 281.622011 148.958718) + (xy 281.617953 148.960485) (xy 281.542824 148.991604) (xy 281.542814 148.991609) (xy 281.411711 149.07921) + (xy 281.411707 149.079213) (xy 281.300213 149.190707) (xy 281.30021 149.190711) (xy 281.212609 149.321814) + (xy 281.212602 149.321827) (xy 281.152264 149.467498) (xy 281.152261 149.46751) (xy 281.1215 149.622153) + (xy 281.1215 149.779846) (xy 281.152261 149.934489) (xy 281.152264 149.934501) (xy 281.212602 150.080172) + (xy 281.212609 150.080185) (xy 281.30021 150.211288) (xy 281.300213 150.211292) (xy 281.411707 150.322786) + (xy 281.411711 150.322789) (xy 281.542814 150.41039) (xy 281.542827 150.410397) (xy 281.688498 150.470735) + (xy 281.688503 150.470737) (xy 281.843153 150.501499) (xy 281.843156 150.5015) (xy 281.843158 150.5015) + (xy 282.000844 150.5015) (xy 282.000845 150.501499) (xy 282.155497 150.470737) (xy 282.301179 150.410394) + (xy 282.432289 150.322789) (xy 282.475124 150.279954) (xy 282.536819 150.21826) (xy 282.598142 150.184775) + (xy 282.667834 150.189759) (xy 282.723767 150.231631) (xy 282.748184 150.297095) (xy 282.7485 150.305941) + (xy 282.7485 157.612405) (xy 282.728815 157.679444) (xy 282.712181 157.700086) (xy 277.031132 163.381135) + (xy 276.967135 163.445132) (xy 276.958813 163.465223) (xy 276.9325 163.528746) (xy 276.9325 167.895924) + (xy 276.912815 167.962963) (xy 276.860011 168.008718) (xy 276.855953 168.010485) (xy 276.780824 168.041604) + (xy 276.780814 168.041609) (xy 276.649711 168.12921) (xy 276.649707 168.129213) (xy 276.538213 168.240707) + (xy 276.53821 168.240711) (xy 276.450609 168.371814) (xy 276.450603 168.371826) (xy 276.390264 168.517498) + (xy 276.390261 168.51751) (xy 276.3595 168.672153) (xy 276.3595 168.829846) (xy 276.390261 168.984489) + (xy 276.390264 168.984501) (xy 276.450602 169.130172) (xy 276.450609 169.130185) (xy 276.53821 169.261288) + (xy 276.538213 169.261292) (xy 276.649707 169.372786) (xy 276.649711 169.372789) (xy 276.780814 169.46039) + (xy 276.780827 169.460397) (xy 276.884063 169.503158) (xy 276.926503 169.520737) (xy 277.081153 169.551499) + (xy 277.081156 169.5515) (xy 277.081158 169.5515) (xy 277.238844 169.5515) (xy 277.238845 169.551499) + (xy 277.393497 169.520737) (xy 277.539179 169.460394) (xy 277.670289 169.372789) (xy 277.781789 169.261289) + (xy 277.869394 169.130179) (xy 277.873443 169.120405) (xy 277.883067 169.097166) (xy 277.929737 168.984497) + (xy 277.9605 168.829842) (xy 277.9605 168.672158) (xy 277.9605 168.672155) (xy 277.960499 168.672153) + (xy 277.958699 168.663106) (xy 277.929737 168.517503) (xy 277.920739 168.495779) (xy 277.869397 168.371826) + (xy 277.86939 168.371814) (xy 277.781789 168.240711) (xy 277.781786 168.240707) (xy 277.670292 168.129213) + (xy 277.670288 168.12921) (xy 277.539185 168.041609) (xy 277.539175 168.041604) (xy 277.464047 168.010485) + (xy 277.409644 167.966644) (xy 277.387579 167.90035) (xy 277.3875 167.895924) (xy 277.3875 163.719595) + (xy 277.407185 163.652556) (xy 277.423819 163.631914) (xy 283.168863 157.88687) (xy 283.168865 157.886868) + (xy 283.2035 157.803253) (xy 283.2035 157.712747) (xy 283.2035 144.913596) (xy 283.223185 144.846557) + (xy 283.275989 144.800802) (xy 283.345147 144.790858) (xy 283.408703 144.819883) (xy 283.415181 144.825915) + (xy 288.801129 150.211864) (xy 288.80113 150.211864) (xy 288.801132 150.211866) (xy 288.860252 150.236353) + (xy 288.860255 150.236355) (xy 288.860256 150.236355) (xy 288.870401 150.240557) (xy 288.884747 150.2465) + (xy 288.884748 150.2465) (xy 288.975253 150.2465) (xy 293.073405 150.2465) (xy 293.140444 150.266185) + (xy 293.161086 150.282819) (xy 294.675503 151.797236) (xy 294.708988 151.858559) (xy 294.704004 151.928251) + (xy 294.702384 151.932368) (xy 294.671263 152.007503) (xy 294.671261 152.00751) (xy 294.6405 152.162153) + (xy 294.6405 152.319846) (xy 294.671261 152.474489) (xy 294.671264 152.474501) (xy 294.702383 152.549629) + (xy 294.709852 152.619098) (xy 294.678576 152.681577) (xy 294.675503 152.684762) (xy 285.6392 161.721067) + (xy 282.631132 164.729135) (xy 282.567135 164.793132) (xy 282.546846 164.842111) (xy 282.5325 164.876746) + (xy 282.5325 170.435924) (xy 282.512815 170.502963) (xy 282.460011 170.548718) (xy 282.455953 170.550485) + (xy 282.380824 170.581604) (xy 282.380814 170.581609) (xy 282.249711 170.66921) (xy 282.249707 170.669213) + (xy 282.138213 170.780707) (xy 282.13821 170.780711) (xy 282.050609 170.911814) (xy 282.050602 170.911827) + (xy 281.990264 171.057498) (xy 281.990261 171.05751) (xy 281.9595 171.212153) (xy 281.9595 171.369846) + (xy 281.990261 171.524489) (xy 281.990264 171.524501) (xy 282.050602 171.670172) (xy 282.050609 171.670185) + (xy 282.13821 171.801288) (xy 282.138213 171.801292) (xy 282.249707 171.912786) (xy 282.249711 171.912789) + (xy 282.380814 172.00039) (xy 282.380827 172.000397) (xy 282.497206 172.048602) (xy 282.526503 172.060737) + (xy 282.656434 172.086582) (xy 282.681153 172.091499) (xy 282.681156 172.0915) (xy 282.681158 172.0915) + (xy 282.838844 172.0915) (xy 282.838845 172.091499) (xy 282.993497 172.060737) (xy 283.139179 172.000394) + (xy 283.270289 171.912789) (xy 283.381789 171.801289) (xy 283.469394 171.670179) (xy 283.529737 171.524497) + (xy 283.5605 171.369842) (xy 283.5605 171.212158) (xy 283.5605 171.212155) (xy 283.560499 171.212153) + (xy 283.558699 171.203106) (xy 283.529737 171.057503) (xy 283.50467 170.996986) (xy 283.469397 170.911827) + (xy 283.46939 170.911814) (xy 283.381789 170.780711) (xy 283.381786 170.780707) (xy 283.270292 170.669213) + (xy 283.270288 170.66921) (xy 283.139185 170.581609) (xy 283.139175 170.581604) (xy 283.064047 170.550485) + (xy 283.009644 170.506644) (xy 282.987579 170.44035) (xy 282.9875 170.435924) (xy 282.9875 168.610241) + (xy 290.5095 168.610241) (xy 290.5095 168.892158) (xy 290.546295 169.171639) (xy 290.619259 169.443943) + (xy 290.727135 169.704379) (xy 290.72714 169.70439) (xy 290.868083 169.948509) (xy 290.868088 169.948517) + (xy 291.030386 170.160027) (xy 291.039704 170.17217) (xy 291.239029 170.371495) (xy 291.239033 170.371498) + (xy 291.239035 170.3715) (xy 291.462683 170.543112) (xy 291.46269 170.543116) (xy 291.706809 170.684059) + (xy 291.706814 170.684061) (xy 291.706817 170.684063) (xy 291.967261 170.791942) (xy 292.239558 170.864904) + (xy 292.519049 170.9017) (xy 292.519056 170.9017) (xy 292.800944 170.9017) (xy 292.800951 170.9017) + (xy 293.080442 170.864904) (xy 293.352739 170.791942) (xy 293.613183 170.684063) (xy 293.857317 170.543112) + (xy 294.080965 170.3715) (xy 294.2803 170.172165) (xy 294.451912 169.948517) (xy 294.592863 169.704383) + (xy 294.700742 169.443939) (xy 294.773704 169.171642) (xy 294.8105 168.892151) (xy 294.8105 168.610249) + (xy 294.80923 168.600606) (xy 294.79829 168.517503) (xy 294.773704 168.330758) (xy 294.700742 168.058461) + (xy 294.69376 168.041606) (xy 294.668765 167.981261) (xy 294.592863 167.798017) (xy 294.592861 167.798014) + (xy 294.592859 167.798009) (xy 294.451916 167.55389) (xy 294.451912 167.553883) (xy 294.2803 167.330235) + (xy 294.280298 167.330233) (xy 294.280295 167.330229) (xy 294.08097 167.130904) (xy 294.080965 167.1309) + (xy 293.857317 166.959288) (xy 293.857311 166.959284) (xy 293.857309 166.959283) (xy 293.61319 166.81834) + (xy 293.613179 166.818335) (xy 293.352743 166.710459) (xy 293.080439 166.637495) (xy 292.800958 166.6007) + (xy 292.800951 166.6007) (xy 292.519049 166.6007) (xy 292.519041 166.6007) (xy 292.23956 166.637495) + (xy 291.967256 166.710459) (xy 291.70682 166.818335) (xy 291.706809 166.81834) (xy 291.46269 166.959283) + (xy 291.462682 166.959289) (xy 291.239029 167.130904) (xy 291.039704 167.330229) (xy 290.993901 167.389921) + (xy 290.879112 167.539517) (xy 290.868089 167.553882) (xy 290.868083 167.55389) (xy 290.72714 167.798009) + (xy 290.727135 167.79802) (xy 290.619259 168.058456) (xy 290.546295 168.33076) (xy 290.5095 168.610241) + (xy 282.9875 168.610241) (xy 282.9875 165.067594) (xy 283.007185 165.000555) (xy 283.023814 164.979918) + (xy 287.316926 160.686806) (xy 299.445165 160.686806) (xy 299.462597 160.865233) (xy 299.462921 160.868542) + (xy 299.485072 160.945746) (xy 299.51328 161.044061) (xy 299.59458 161.207563) (xy 299.594581 161.207565) + (xy 299.594583 161.207568) (xy 299.656908 161.290674) (xy 299.704138 161.353652) (xy 299.704139 161.353653) + (xy 299.70414 161.353654) (xy 299.838332 161.477495) (xy 299.992725 161.574997) (xy 300.122977 161.62721) + (xy 300.162214 161.642939) (xy 300.162215 161.642939) (xy 300.162217 161.64294) (xy 300.341208 161.679079) + (xy 300.341202 161.679079) (xy 300.357522 161.679359) (xy 300.523784 161.68222) (xy 300.703912 161.652258) + (xy 300.759407 161.632198) (xy 300.875636 161.590185) (xy 300.875637 161.590183) (xy 300.87564 161.590183) + (xy 300.890675 161.58142) (xy 300.897359 161.577535) (xy 300.89765 161.577457) (xy 300.925533 161.56116) + (xy 300.925651 161.561092) (xy 300.928868 161.560301) (xy 300.987962 161.544299) (xy 302.469092 161.544299) + (xy 302.469214 161.544306) (xy 302.477305 161.544305) (xy 302.477308 161.544306) (xy 302.509442 161.544302) + (xy 302.572004 161.561234) (xy 302.59983 161.577491) (xy 302.599832 161.577491) (xy 302.60598 161.581083) + (xy 302.607635 161.581908) (xy 302.621778 161.59015) (xy 302.7935 161.652221) (xy 302.973621 161.682182) + (xy 303.153298 161.67909) (xy 303.156191 161.679041) (xy 303.335166 161.642905) (xy 303.335169 161.642903) + (xy 303.335174 161.642903) (xy 303.50466 161.574962) (xy 303.659046 161.477463) (xy 303.672937 161.464644) + (xy 303.79323 161.35363) (xy 303.793232 161.353628) (xy 303.793233 161.353627) (xy 303.902785 161.207547) + (xy 303.984084 161.044048) (xy 304.034442 160.868533) (xy 304.052197 160.686803) (xy 304.03676 160.50486) + (xy 304.036758 160.504854) (xy 304.015701 160.427771) (xy 303.988643 160.328718) (xy 303.980883 160.312549) + (xy 303.977796 160.306104) (xy 303.977748 160.305846) (xy 303.961371 160.271819) (xy 303.961243 160.27103) + (xy 303.949202 160.218231) (xy 303.949202 160.218042) (xy 303.949207 160.180808) (xy 303.949206 160.180804) + (xy 303.949207 160.172798) (xy 303.949199 160.17266) (xy 303.949199 158.869378) (xy 303.951853 158.857712) + (xy 303.950819 158.849399) (xy 303.961403 158.815734) (xy 303.967718 158.802576) (xy 303.967798 158.802487) + (xy 303.967768 158.802473) (xy 303.967769 158.802471) (xy 303.977774 158.781674) (xy 303.977774 158.781668) + (xy 303.981155 158.774642) (xy 303.981317 158.774238) (xy 303.988683 158.758891) (xy 304.0368 158.582742) + (xy 304.052237 158.400793) (xy 304.034481 158.219055) (xy 303.98412 158.043534) (xy 303.902818 157.88003) + (xy 303.816427 157.764834) (xy 303.793262 157.733945) (xy 303.770292 157.712747) (xy 303.659069 157.610104) + (xy 303.659066 157.610102) (xy 303.659065 157.610101) (xy 303.659062 157.610099) (xy 303.504677 157.512601) + (xy 303.335187 157.444658) (xy 303.335177 157.444656) (xy 303.156192 157.408518) (xy 303.156199 157.408518) + (xy 302.984494 157.405565) (xy 302.973618 157.405378) (xy 302.973617 157.405378) (xy 302.973614 157.405378) + (xy 302.793497 157.435338) (xy 302.793484 157.435341) (xy 302.621763 157.497413) (xy 302.607248 157.50587) + (xy 302.607163 157.505919) (xy 302.600076 157.51004) (xy 302.59983 157.510108) (xy 302.572038 157.526344) + (xy 302.57179 157.526489) (xy 302.569063 157.527159) (xy 302.509446 157.543296) (xy 302.469101 157.543293) + (xy 302.468997 157.5433) (xy 301.028296 157.5433) (xy 301.020114 157.543298) (xy 301.020092 157.543293) + (xy 300.990165 157.543295) (xy 300.987928 157.543295) (xy 300.987646 157.543212) (xy 300.925393 157.526362) + (xy 300.897571 157.510108) (xy 300.891505 157.506564) (xy 300.889807 157.505717) (xy 300.882457 157.501434) + (xy 300.875621 157.49745) (xy 300.703897 157.435378) (xy 300.703891 157.435377) (xy 300.523781 157.405419) + (xy 300.523778 157.405419) (xy 300.515239 157.405565) (xy 300.341207 157.408559) (xy 300.162234 157.444694) + (xy 300.162223 157.444697) (xy 299.992742 157.512637) (xy 299.992741 157.512637) (xy 299.838361 157.610132) + (xy 299.838358 157.610134) (xy 299.704167 157.733973) (xy 299.594615 157.880054) (xy 299.51332 158.043544) + (xy 299.513319 158.043547) (xy 299.513318 158.04355) (xy 299.488138 158.131306) (xy 299.462958 158.219065) + (xy 299.446111 158.39151) (xy 299.445204 158.400793) (xy 299.447105 158.423202) (xy 299.460204 158.577606) + (xy 299.46064 158.582735) (xy 299.496707 158.714769) (xy 299.508756 158.758878) (xy 299.50876 158.758888) + (xy 299.515998 158.77397) (xy 299.51604 158.774056) (xy 299.519623 158.781538) (xy 299.519681 158.78184) + (xy 299.536036 158.815806) (xy 299.536181 158.8167) (xy 299.548201 158.869369) (xy 299.548201 160.218222) + (xy 299.536007 160.271845) (xy 299.535419 160.273071) (xy 299.535339 160.273238) (xy 299.516466 160.312437) + (xy 299.516142 160.313239) (xy 299.508718 160.32871) (xy 299.460601 160.504854) (xy 299.460601 160.504856) + (xy 299.445165 160.686806) (xy 287.316926 160.686806) (xy 294.997238 153.006493) (xy 295.058559 152.97301) + (xy 295.128251 152.977994) (xy 295.132296 152.979585) (xy 295.207503 153.010737) (xy 295.362153 153.041499) + (xy 295.362156 153.0415) (xy 295.362158 153.0415) (xy 295.519844 153.0415) (xy 295.519845 153.041499) + (xy 295.674497 153.010737) (xy 295.820179 152.950394) (xy 295.851063 152.929758) (xy 295.91774 152.908878) + (xy 295.98512 152.927361) (xy 296.031812 152.979339) (xy 296.034517 152.985406) (xy 296.148611 153.260856) + (xy 296.148618 153.260871) (xy 296.299399 153.522031) (xy 296.419272 153.678254) (xy 296.444466 153.743423) + (xy 296.430427 153.811868) (xy 296.385691 153.859464) (xy 296.382615 153.861348) (xy 296.245665 153.960848) + (xy 296.24566 153.960852) (xy 296.125952 154.08056) (xy 296.125948 154.080565) (xy 296.026452 154.217511) + (xy 295.949596 154.368346) (xy 295.897281 154.529352) (xy 295.8708 154.69655) (xy 295.8708 154.865849) + (xy 295.897281 155.033047) (xy 295.949596 155.194053) (xy 296.026452 155.344888) (xy 296.125948 155.481834) + (xy 296.125952 155.481839) (xy 296.24566 155.601547) (xy 296.245665 155.601551) (xy 296.365117 155.688337) + (xy 296.382615 155.70105) (xy 296.46789 155.7445) (xy 296.533446 155.777903) (xy 296.533448 155.777903) + (xy 296.533451 155.777905) (xy 296.61975 155.805945) (xy 296.694452 155.830218) (xy 296.861651 155.8567) + (xy 296.861656 155.8567) (xy 297.030949 155.8567) (xy 297.198147 155.830218) (xy 297.241077 155.816269) + (xy 297.359149 155.777905) (xy 297.509985 155.70105) (xy 297.646941 155.601546) (xy 297.766646 155.481841) + (xy 297.86615 155.344885) (xy 297.943005 155.194049) (xy 297.995318 155.033047) (xy 298.0218 154.865849) + (xy 298.0218 154.69655) (xy 298.019986 154.685098) (xy 298.02894 154.615805) (xy 298.073936 154.562353) + (xy 298.140688 154.541713) (xy 298.142459 154.5417) (xy 298.367076 154.5417) (xy 298.367083 154.5417) + (xy 298.666068 154.502338) (xy 298.957358 154.424287) (xy 299.235968 154.308883) (xy 299.497132 154.1581) + (xy 299.733516 153.976716) (xy 299.798684 153.951523) (xy 299.867129 153.965561) (xy 299.917118 154.014375) + (xy 299.932782 154.082467) (xy 299.928775 154.107186) (xy 299.870824 154.323469) (xy 299.863452 154.35098) + (xy 299.863449 154.350993) (xy 299.825801 154.636961) (xy 299.8258 154.636978) (xy 299.8258 154.925421) + (xy 299.825801 154.925438) (xy 299.863449 155.211406) (xy 299.86345 155.211411) (xy 299.863451 155.211417) + (xy 299.938109 155.490044) (xy 299.938114 155.49006) (xy 300.048491 155.756536) (xy 300.048499 155.756552) + (xy 300.19272 156.006348) (xy 300.192731 156.006364) (xy 300.368324 156.235202) (xy 300.36833 156.235209) + (xy 300.57229 156.439169) (xy 300.572296 156.439174) (xy 300.801144 156.614775) (xy 300.801151 156.614779) + (xy 301.050947 156.759) (xy 301.050963 156.759008) (xy 301.317439 156.869385) (xy 301.317445 156.869386) + (xy 301.317455 156.869391) (xy 301.596083 156.944049) (xy 301.882072 156.9817) (xy 301.882079 156.9817) + (xy 302.170521 156.9817) (xy 302.170528 156.9817) (xy 302.456517 156.944049) (xy 302.735145 156.869391) + (xy 302.735157 156.869385) (xy 302.73516 156.869385) (xy 303.001636 156.759008) (xy 303.001639 156.759006) + (xy 303.001645 156.759004) (xy 303.251456 156.614775) (xy 303.480304 156.439174) (xy 303.684274 156.235204) + (xy 303.859875 156.006356) (xy 304.004104 155.756545) (xy 304.010269 155.741663) (xy 304.114485 155.49006) + (xy 304.114485 155.490057) (xy 304.114491 155.490045) (xy 304.189149 155.211417) (xy 304.2268 154.925428) + (xy 304.2268 154.636972) (xy 304.189149 154.350983) (xy 304.114491 154.072355) (xy 304.114486 154.072345) + (xy 304.114485 154.072339) (xy 304.004108 153.805863) (xy 304.0041 153.805847) (xy 303.859879 153.556051) + (xy 303.859875 153.556044) (xy 303.7697 153.438525) (xy 303.684275 153.327197) (xy 303.684269 153.32719) + (xy 303.480309 153.12323) (xy 303.480302 153.123224) (xy 303.251464 152.947631) (xy 303.251462 152.947629) + (xy 303.251456 152.947625) (xy 303.251451 152.947622) (xy 303.251448 152.94762) (xy 303.001652 152.803399) + (xy 303.001636 152.803391) (xy 302.73516 152.693014) (xy 302.735148 152.69301) (xy 302.735145 152.693009) + (xy 302.456517 152.618351) (xy 302.456511 152.61835) (xy 302.456506 152.618349) (xy 302.170538 152.580701) + (xy 302.170533 152.5807) (xy 302.170528 152.5807) (xy 301.882072 152.5807) (xy 301.882066 152.5807) + (xy 301.882061 152.580701) (xy 301.596093 152.618349) (xy 301.596086 152.61835) (xy 301.596083 152.618351) + (xy 301.36012 152.681577) (xy 301.317455 152.693009) (xy 301.317439 152.693014) (xy 301.050963 152.803391) + (xy 301.050947 152.803399) (xy 300.801151 152.94762) (xy 300.801134 152.947631) (xy 300.596891 153.104352) + (xy 300.531722 153.129546) (xy 300.463277 153.115507) (xy 300.413287 153.066693) (xy 300.397624 152.998602) + (xy 300.401627 152.973894) (xy 300.477438 152.690968) (xy 300.5168 152.391983) (xy 300.5168 152.090417) + (xy 300.477438 151.791432) (xy 300.399387 151.500142) (xy 300.394204 151.48763) (xy 300.311519 151.288011) + (xy 300.283983 151.221532) (xy 300.28384 151.221285) (xy 300.1332 150.960368) (xy 299.94962 150.721121) + (xy 299.949614 150.721114) (xy 299.736385 150.507885) (xy 299.736378 150.507879) (xy 299.497131 150.324299) + (xy 299.235971 150.173518) (xy 299.235961 150.173514) (xy 298.95736 150.058113) (xy 298.666066 149.980061) + (xy 298.367093 149.940701) (xy 298.367088 149.9407) (xy 298.367083 149.9407) (xy 298.065517 149.9407) + (xy 298.065511 149.9407) (xy 298.065506 149.940701) (xy 297.766533 149.980061) (xy 297.475239 150.058113) + (xy 297.196638 150.173514) (xy 297.196628 150.173518) (xy 296.935468 150.324299) (xy 296.696221 150.507879) + (xy 296.696214 150.507885) (xy 296.482985 150.721114) (xy 296.482979 150.721121) (xy 296.299399 150.960368) + (xy 296.148618 151.221528) (xy 296.148614 151.221538) (xy 296.034647 151.49668) (xy 295.990806 151.551083) + (xy 295.924512 151.573148) (xy 295.856813 151.555869) (xy 295.851196 151.55233) (xy 295.820183 151.531608) + (xy 295.820172 151.531602) (xy 295.674501 151.471264) (xy 295.674489 151.471261) (xy 295.519845 151.4405) + (xy 295.519842 151.4405) (xy 295.362158 151.4405) (xy 295.362155 151.4405) (xy 295.20751 151.471261) + (xy 295.207503 151.471263) (xy 295.132368 151.502384) (xy 295.062899 151.509851) (xy 295.00042 151.478576) + (xy 294.997236 151.475503) (xy 293.34787 149.826136) (xy 293.264253 149.7915) (xy 289.075596 149.7915) + (xy 289.008557 149.771815) (xy 288.987915 149.755181) (xy 282.219336 142.986602) (xy 282.185851 142.925279) + (xy 282.190835 142.855587) (xy 282.232707 142.799654) (xy 282.298171 142.775237) (xy 282.354468 142.784359) + (xy 282.373003 142.792037) (xy 282.527653 142.822799) (xy 282.527656 142.8228) (xy 282.527658 142.8228) + (xy 282.685344 142.8228) (xy 282.685345 142.822799) (xy 282.839997 142.792037) (xy 282.985679 142.731694) + (xy 283.116789 142.644089) (xy 283.228289 142.532589) (xy 283.315894 142.401479) (xy 283.323639 142.382779) + (xy 283.36748 142.328376) (xy 283.433773 142.30631) (xy 283.501473 142.323588) (xy 283.504412 142.325388) + (xy 283.516182 142.332821) (xy 283.575525 142.370297) (xy 283.710677 142.424474) (xy 283.745014 142.438239) + (xy 283.745015 142.438239) (xy 283.745017 142.43824) (xy 283.924008 142.474379) (xy 283.924002 142.474379) + (xy 283.940322 142.474659) (xy 284.106584 142.47752) (xy 284.286712 142.447558) (xy 284.342207 142.427498) + (xy 284.458436 142.385485) (xy 284.458437 142.385483) (xy 284.45844 142.385483) (xy 284.473475 142.37672) + (xy 284.480159 142.372835) (xy 284.48045 142.372757) (xy 284.508333 142.35646) (xy 284.508451 142.356392) + (xy 284.511668 142.355601) (xy 284.570762 142.339599) (xy 286.051892 142.339599) (xy 286.052014 142.339606) + (xy 286.060105 142.339605) (xy 286.060108 142.339606) (xy 286.092242 142.339602) (xy 286.154804 142.356534) + (xy 286.18263 142.372791) (xy 286.182632 142.372791) (xy 286.18878 142.376383) (xy 286.190435 142.377208) + (xy 286.204578 142.38545) (xy 286.3763 142.447521) (xy 286.556421 142.477482) (xy 286.736098 142.47439) + (xy 286.738991 142.474341) (xy 286.917966 142.438205) (xy 286.917969 142.438203) (xy 286.917974 142.438203) + (xy 287.08746 142.370262) (xy 287.241846 142.272763) (xy 287.260231 142.255797) (xy 287.37603 142.14893) + (xy 287.376032 142.148928) (xy 287.38491 142.13709) (xy 287.485585 142.002847) (xy 287.566884 141.839348) + (xy 287.617242 141.663833) (xy 287.634997 141.482103) (xy 287.61956 141.30016) (xy 287.619558 141.300154) + (xy 287.608938 141.261277) (xy 287.571443 141.124018) (xy 287.563683 141.107849) (xy 287.560596 141.101404) + (xy 287.560548 141.101146) (xy 287.544171 141.067119) (xy 287.544043 141.06633) (xy 287.532002 141.013531) + (xy 287.532002 141.013522) (xy 287.532007 140.976108) (xy 287.532006 140.976104) (xy 287.532007 140.968098) + (xy 287.531999 140.96796) (xy 287.531999 139.664678) (xy 287.534653 139.653012) (xy 287.533619 139.644699) + (xy 287.544203 139.611034) (xy 287.550518 139.597876) (xy 287.550598 139.597787) (xy 287.550568 139.597773) + (xy 287.550995 139.596885) (xy 287.560574 139.576974) (xy 287.560574 139.576968) (xy 287.563955 139.569942) + (xy 287.564117 139.569538) (xy 287.571483 139.554191) (xy 287.6196 139.378042) (xy 287.635037 139.196093) + (xy 287.617281 139.014355) (xy 287.56692 138.838834) (xy 287.485618 138.67533) (xy 287.399227 138.560134) + (xy 287.376062 138.529245) (xy 287.318896 138.476489) (xy 287.241869 138.405404) (xy 287.241866 138.405402) + (xy 287.241865 138.405401) (xy 287.241862 138.405399) (xy 287.087477 138.307901) (xy 286.917987 138.239958) + (xy 286.917977 138.239956) (xy 286.738992 138.203818) (xy 286.738999 138.203818) (xy 286.567294 138.200865) + (xy 286.556418 138.200678) (xy 286.556417 138.200678) (xy 286.556414 138.200678) (xy 286.376297 138.230638) + (xy 286.376284 138.230641) (xy 286.204563 138.292713) (xy 286.190048 138.30117) (xy 286.189963 138.301219) + (xy 286.182876 138.30534) (xy 286.18263 138.305408) (xy 286.154838 138.321644) (xy 286.15459 138.321789) + (xy 286.151863 138.322459) (xy 286.092246 138.338596) (xy 286.051901 138.338593) (xy 286.051797 138.3386) + (xy 284.611096 138.3386) (xy 284.602914 138.338598) (xy 284.602892 138.338593) (xy 284.572965 138.338595) + (xy 284.570728 138.338595) (xy 284.570446 138.338512) (xy 284.508193 138.321662) (xy 284.480371 138.305408) + (xy 284.474305 138.301864) (xy 284.472607 138.301017) (xy 284.465257 138.296734) (xy 284.458421 138.29275) + (xy 284.286697 138.230678) (xy 284.286691 138.230677) (xy 284.106581 138.200719) (xy 284.106578 138.200719) + (xy 284.098039 138.200865) (xy 283.924007 138.203859) (xy 283.745034 138.239994) (xy 283.745023 138.239997) + (xy 283.575542 138.307937) (xy 283.575541 138.307937) (xy 283.421161 138.405432) (xy 283.421158 138.405434) + (xy 283.286967 138.529273) (xy 283.177415 138.675354) (xy 283.09612 138.838844) (xy 283.096119 138.838847) + (xy 283.096118 138.83885) (xy 283.070938 138.926606) (xy 283.045758 139.014365) (xy 283.02803 139.195827) + (xy 283.028004 139.196093) (xy 283.029682 139.215868) (xy 283.04178 139.358478) (xy 283.04344 139.378035) + (xy 283.065118 139.457392) (xy 283.091556 139.554178) (xy 283.09156 139.554188) (xy 283.098798 139.56927) + (xy 283.09884 139.569356) (xy 283.102423 139.576838) (xy 283.102481 139.57714) (xy 283.118836 139.611106) + (xy 283.118981 139.612) (xy 283.131001 139.664669) (xy 283.131001 141.013522) (xy 283.118807 141.067145) + (xy 283.118219 141.068371) (xy 283.118139 141.068538) (xy 283.099266 141.107737) (xy 283.098942 141.108539) + (xy 283.091519 141.124008) (xy 283.071482 141.197359) (xy 283.034827 141.256842) (xy 282.971833 141.287065) + (xy 282.904413 141.279245) (xy 282.839997 141.252563) (xy 282.839994 141.252562) (xy 282.839991 141.252561) + (xy 282.685345 141.2218) (xy 282.685342 141.2218) (xy 282.527658 141.2218) (xy 282.527655 141.2218) + (xy 282.37301 141.252561) (xy 282.372998 141.252564) (xy 282.227327 141.312902) (xy 282.227314 141.312909) + (xy 282.096211 141.40051) (xy 282.096207 141.400513) (xy 281.984713 141.512007) (xy 281.98471 141.512011) + (xy 281.897109 141.643114) (xy 281.897102 141.643127) (xy 281.836764 141.788798) (xy 281.836761 141.78881) + (xy 281.806 141.943453) (xy 281.806 142.101146) (xy 281.833163 142.237701) (xy 281.836763 142.255797) + (xy 281.843792 142.272766) (xy 281.84444 142.274331) (xy 281.851907 142.3438) (xy 281.820632 142.406279) + (xy 281.760542 142.441931) (xy 281.690717 142.439436) (xy 281.642197 142.409463) (xy 278.261819 139.029085) + (xy 278.228334 138.967762) (xy 278.2255 138.941404) (xy 278.2255 135.64655) (xy 279.202 135.64655) + (xy 279.202 135.815849) (xy 279.228481 135.983047) (xy 279.280796 136.144053) (xy 279.357652 136.294888) + (xy 279.457148 136.431834) (xy 279.457152 136.431839) (xy 279.57686 136.551547) (xy 279.576865 136.551551) + (xy 279.696317 136.638337) (xy 279.713815 136.65105) (xy 279.777017 136.683253) (xy 279.864646 136.727903) + (xy 279.864648 136.727903) (xy 279.864651 136.727905) (xy 279.95095 136.755945) (xy 280.025652 136.780218) + (xy 280.192851 136.8067) (xy 280.192856 136.8067) (xy 280.362149 136.8067) (xy 280.529347 136.780218) + (xy 280.690349 136.727905) (xy 280.841185 136.65105) (xy 280.978141 136.551546) (xy 281.097846 136.431841) + (xy 281.19735 136.294885) (xy 281.274205 136.144049) (xy 281.326518 135.983047) (xy 281.353 135.815849) + (xy 281.353 135.64655) (xy 281.327428 135.485098) (xy 281.336382 135.415805) (xy 281.381379 135.362353) + (xy 281.44813 135.341713) (xy 281.449901 135.3417) (xy 281.688444 135.3417) (xy 281.688451 135.3417) + (xy 281.967942 135.304904) (xy 282.240239 135.231942) (xy 282.500683 135.124063) (xy 282.744817 134.983112) + (xy 282.968465 134.8115) (xy 283.1678 134.612165) (xy 283.235492 134.523946) (xy 283.29192 134.482744) + (xy 283.361666 134.478589) (xy 283.422586 134.512801) (xy 283.455339 134.574518) (xy 283.449526 134.644146) + (xy 283.441255 134.661433) (xy 283.385183 134.758551) (xy 283.385175 134.758568) (xy 283.275097 135.024321) + (xy 283.200646 135.302176) (xy 283.163101 135.587361) (xy 283.1631 135.587377) (xy 283.1631 135.875022) + (xy 283.163101 135.875038) (xy 283.200646 136.160223) (xy 283.275097 136.438078) (xy 283.385175 136.703831) + (xy 283.385183 136.703848) (xy 283.529004 136.952951) (xy 283.529015 136.952967) (xy 283.704121 137.181171) + (xy 283.704127 137.181178) (xy 283.907525 137.384576) (xy 284.003761 137.45842) (xy 284.135741 137.559691) + (xy 284.135748 137.559695) (xy 284.384851 137.703516) (xy 284.384856 137.703518) (xy 284.384859 137.70352) + (xy 284.384863 137.703521) (xy 284.384868 137.703524) (xy 284.490223 137.747163) (xy 284.65062 137.813602) + (xy 284.928475 137.888053) (xy 285.213671 137.9256) (xy 285.213678 137.9256) (xy 285.501322 137.9256) + (xy 285.501329 137.9256) (xy 285.786525 137.888053) (xy 286.06438 137.813602) (xy 286.330141 137.70352) + (xy 286.579259 137.559691) (xy 286.720078 137.451636) (xy 286.807475 137.384576) (xy 286.807478 137.384572) + (xy 287.010872 137.181178) (xy 287.010877 137.181173) (xy 287.185991 136.952959) (xy 287.32982 136.703841) + (xy 287.439902 136.43808) (xy 287.514353 136.160225) (xy 287.5519 135.875029) (xy 287.5519 135.64655) + (xy 289.362 135.64655) (xy 289.362 135.815849) (xy 289.388481 135.983047) (xy 289.440796 136.144053) + (xy 289.517652 136.294888) (xy 289.617148 136.431834) (xy 289.617152 136.431839) (xy 289.73686 136.551547) + (xy 289.736865 136.551551) (xy 289.856317 136.638337) (xy 289.873815 136.65105) (xy 289.937017 136.683253) + (xy 290.024646 136.727903) (xy 290.024648 136.727903) (xy 290.024651 136.727905) (xy 290.11095 136.755945) + (xy 290.185652 136.780218) (xy 290.352851 136.8067) (xy 290.352856 136.8067) (xy 290.522149 136.8067) + (xy 290.689347 136.780218) (xy 290.850349 136.727905) (xy 291.001185 136.65105) (xy 291.138141 136.551546) + (xy 291.257846 136.431841) (xy 291.35735 136.294885) (xy 291.434205 136.144049) (xy 291.486518 135.983047) + (xy 291.513 135.815849) (xy 291.513 135.64655) (xy 291.486518 135.479352) (xy 291.441796 135.341713) + (xy 291.434205 135.318351) (xy 291.434203 135.318348) (xy 291.434203 135.318346) (xy 291.390176 135.23194) + (xy 291.35735 135.167515) (xy 291.325781 135.124064) (xy 291.257851 135.030565) (xy 291.257847 135.03056) + (xy 291.138139 134.910852) (xy 291.138134 134.910848) (xy 291.001188 134.811352) (xy 291.001187 134.811351) + (xy 291.001185 134.81135) (xy 290.936109 134.778192) (xy 290.850353 134.734496) (xy 290.689347 134.682181) + (xy 290.522149 134.6557) (xy 290.522144 134.6557) (xy 290.352856 134.6557) (xy 290.352851 134.6557) + (xy 290.185652 134.682181) (xy 290.024646 134.734496) (xy 289.873811 134.811352) (xy 289.736865 134.910848) + (xy 289.73686 134.910852) (xy 289.617152 135.03056) (xy 289.617148 135.030565) (xy 289.517652 135.167511) + (xy 289.440796 135.318346) (xy 289.388481 135.479352) (xy 289.362 135.64655) (xy 287.5519 135.64655) + (xy 287.5519 135.587371) (xy 287.514353 135.302175) (xy 287.439902 135.02432) (xy 287.373463 134.863923) + (xy 287.329824 134.758568) (xy 287.329816 134.758551) (xy 287.185995 134.509448) (xy 287.185994 134.509447) + (xy 287.185991 134.509441) (xy 287.061525 134.347233) (xy 287.010878 134.281228) (xy 287.010872 134.281221) + (xy 286.807478 134.077827) (xy 286.807471 134.077821) (xy 286.579267 133.902715) (xy 286.579265 133.902713) + (xy 286.579259 133.902709) (xy 286.579254 133.902706) (xy 286.579251 133.902704) (xy 286.330148 133.758883) + (xy 286.330131 133.758875) (xy 286.064378 133.648797) (xy 285.786523 133.574346) (xy 285.501338 133.536801) + (xy 285.501335 133.5368) (xy 285.501329 133.5368) (xy 285.213671 133.5368) (xy 285.213665 133.5368) + (xy 285.213661 133.536801) (xy 284.928476 133.574346) (xy 284.650621 133.648797) (xy 284.384868 133.758875) + (xy 284.384851 133.758883) (xy 284.135748 133.902704) (xy 284.135732 133.902715) (xy 283.907528 134.077821) + (xy 283.907521 134.077827) (xy 283.704127 134.281221) (xy 283.63293 134.374007) (xy 283.576501 134.415209) + (xy 283.506755 134.419364) (xy 283.445835 134.385151) (xy 283.413083 134.323434) (xy 283.418896 134.253807) + (xy 283.427161 134.236531) (xy 283.480363 134.144383) (xy 283.588242 133.883939) (xy 283.661204 133.611642) + (xy 283.698 133.332151) (xy 283.698 133.050249) (xy 283.661204 132.770758) (xy 283.588242 132.498461) + (xy 283.58126 132.481606) (xy 283.559309 132.428611) (xy 283.480363 132.238017) (xy 283.480361 132.238014) + (xy 283.480359 132.238009) (xy 283.339416 131.99389) (xy 283.339412 131.993883) (xy 283.1678 131.770235) + (xy 283.167798 131.770233) (xy 283.167795 131.770229) (xy 282.96847 131.570904) (xy 282.869871 131.495246) + (xy 282.744817 131.399288) (xy 282.744811 131.399284) (xy 282.744809 131.399283) (xy 282.50069 131.25834) + (xy 282.500679 131.258335) (xy 282.240243 131.150459) (xy 281.967939 131.077495) (xy 281.688458 131.0407) + (xy 281.688451 131.0407) (xy 281.406549 131.0407) (xy 281.406541 131.0407) (xy 281.12706 131.077495) + (xy 280.854756 131.150459) (xy 280.59432 131.258335) (xy 280.594309 131.25834) (xy 280.35019 131.399283) + (xy 280.350182 131.399289) (xy 280.126529 131.570904) (xy 279.927204 131.770229) (xy 279.755589 131.993882) + (xy 279.755583 131.99389) (xy 279.61464 132.238009) (xy 279.614635 132.23802) (xy 279.506759 132.498456) + (xy 279.433795 132.77076) (xy 279.397 133.050241) (xy 279.397 133.332158) (xy 279.433795 133.611639) + (xy 279.506759 133.883943) (xy 279.614635 134.144379) (xy 279.61464 134.14439) (xy 279.755583 134.388509) + (xy 279.755594 134.388525) (xy 279.886338 134.558914) (xy 279.911532 134.624083) (xy 279.897494 134.692528) + (xy 279.84868 134.742517) (xy 279.844258 134.744884) (xy 279.713813 134.81135) (xy 279.576865 134.910848) + (xy 279.57686 134.910852) (xy 279.457152 135.03056) (xy 279.457148 135.030565) (xy 279.357652 135.167511) + (xy 279.280796 135.318346) (xy 279.228481 135.479352) (xy 279.202 135.64655) (xy 278.2255 135.64655) + (xy 278.2255 134.046075) (xy 278.245185 133.979036) (xy 278.297989 133.933281) (xy 278.301999 133.931534) + (xy 278.377179 133.900394) (xy 278.508289 133.812789) (xy 278.619789 133.701289) (xy 278.707394 133.570179) + (xy 278.767737 133.424497) (xy 278.7985 133.269842) (xy 278.7985 133.112158) (xy 278.7985 133.112155) + (xy 278.798499 133.112153) (xy 278.767737 132.957503) (xy 278.75203 132.919582) (xy 278.707397 132.811827) + (xy 278.70739 132.811814) (xy 278.619789 132.680711) (xy 278.619786 132.680707) (xy 278.508292 132.569213) + (xy 278.508288 132.56921) (xy 278.377185 132.481609) (xy 278.377172 132.481602) (xy 278.231501 132.421264) + (xy 278.231489 132.421261) (xy 278.076845 132.3905) (xy 278.076842 132.3905) (xy 277.919158 132.3905) + (xy 277.919155 132.3905) (xy 277.76451 132.421261) (xy 277.764498 132.421264) (xy 277.689279 132.452421) + (xy 277.61981 132.45989) (xy 277.557331 132.428614) (xy 277.55417 132.425564) (xy 276.472318 131.343939) + (xy 275.722102 130.59388) (xy 275.638445 130.510241) (xy 285.747 130.510241) (xy 285.747 130.792158) + (xy 285.783795 131.071639) (xy 285.856759 131.343943) (xy 285.964635 131.604379) (xy 285.96464 131.60439) + (xy 286.097142 131.833888) (xy 286.105588 131.848517) (xy 286.268047 132.060237) (xy 286.277204 132.07217) + (xy 286.476529 132.271495) (xy 286.476533 132.271498) (xy 286.476535 132.2715) (xy 286.700183 132.443112) + (xy 286.70019 132.443116) (xy 286.944309 132.584059) (xy 286.944314 132.584061) (xy 286.944317 132.584063) + (xy 287.204761 132.691942) (xy 287.477058 132.764904) (xy 287.756549 132.8017) (xy 287.756556 132.8017) + (xy 288.038444 132.8017) (xy 288.038451 132.8017) (xy 288.317942 132.764904) (xy 288.590239 132.691942) + (xy 288.850683 132.584063) (xy 289.094817 132.443112) (xy 289.318465 132.2715) (xy 289.5178 132.072165) + (xy 289.689412 131.848517) (xy 289.830363 131.604383) (xy 289.938242 131.343939) (xy 290.011204 131.071642) + (xy 290.048 130.792151) (xy 290.048 130.510249) (xy 290.011204 130.230758) (xy 289.938242 129.958461) + (xy 289.93126 129.941606) (xy 289.906265 129.881261) (xy 289.830363 129.698017) (xy 289.830361 129.698014) + (xy 289.830359 129.698009) (xy 289.689416 129.45389) (xy 289.689412 129.453883) (xy 289.5178 129.230235) + (xy 289.517798 129.230233) (xy 289.517795 129.230229) (xy 289.31847 129.030904) (xy 289.318465 129.0309) + (xy 289.094817 128.859288) (xy 289.094811 128.859284) (xy 289.094809 128.859283) (xy 288.85069 128.71834) + (xy 288.850679 128.718335) (xy 288.590243 128.610459) (xy 288.317939 128.537495) (xy 288.038458 128.5007) + (xy 288.038451 128.5007) (xy 287.756549 128.5007) (xy 287.756541 128.5007) (xy 287.47706 128.537495) + (xy 287.204756 128.610459) (xy 286.94432 128.718335) (xy 286.944309 128.71834) (xy 286.70019 128.859283) + (xy 286.700184 128.859287) (xy 286.700183 128.859288) (xy 286.645198 128.90148) (xy 286.476529 129.030904) + (xy 286.277204 129.230229) (xy 286.163881 129.377914) (xy 286.105597 129.453872) (xy 286.105589 129.453882) + (xy 286.105583 129.45389) (xy 285.96464 129.698009) (xy 285.964635 129.69802) (xy 285.856759 129.958456) + (xy 285.783795 130.23076) (xy 285.747 130.510241) (xy 275.638445 130.510241) (xy 274.624348 129.496356) + (xy 274.542728 129.414753) (xy 281.1787 129.414753) (xy 281.1787 129.572446) (xy 281.209461 129.727089) + (xy 281.209464 129.727101) (xy 281.269802 129.872772) (xy 281.269809 129.872785) (xy 281.35741 130.003888) + (xy 281.357413 130.003892) (xy 281.468907 130.115386) (xy 281.468911 130.115389) (xy 281.600014 130.20299) + (xy 281.600027 130.202997) (xy 281.702073 130.245265) (xy 281.745703 130.263337) (xy 281.900353 130.294099) + (xy 281.900356 130.2941) (xy 281.900358 130.2941) (xy 282.058044 130.2941) (xy 282.058045 130.294099) + (xy 282.212697 130.263337) (xy 282.358379 130.202994) (xy 282.489489 130.115389) (xy 282.600989 130.003889) + (xy 282.688594 129.872779) (xy 282.690029 129.869316) (xy 282.702267 129.839766) (xy 282.748937 129.727097) + (xy 282.7797 129.572442) (xy 282.7797 129.414758) (xy 282.7797 129.414755) (xy 282.779699 129.414753) + (xy 282.748938 129.26011) (xy 282.748937 129.260103) (xy 282.740955 129.240833) (xy 282.688597 129.114427) + (xy 282.68859 129.114414) (xy 282.600989 128.983311) (xy 282.600986 128.983307) (xy 282.489492 128.871813) + (xy 282.489488 128.87181) (xy 282.358385 128.784209) (xy 282.358372 128.784202) (xy 282.212701 128.723864) + (xy 282.212689 128.723861) (xy 282.058045 128.6931) (xy 282.058042 128.6931) (xy 281.900358 128.6931) + (xy 281.900355 128.6931) (xy 281.74571 128.723861) (xy 281.745698 128.723864) (xy 281.600027 128.784202) + (xy 281.600014 128.784209) (xy 281.468911 128.87181) (xy 281.468907 128.871813) (xy 281.357413 128.983307) + (xy 281.35741 128.983311) (xy 281.269809 129.114414) (xy 281.269802 129.114427) (xy 281.209464 129.260098) + (xy 281.209461 129.26011) (xy 281.1787 129.414753) (xy 274.542728 129.414753) (xy 273.498828 128.371072) + (xy 273.465337 128.309753) (xy 273.4625 128.283382) (xy 273.4625 122.432106) (xy 278.265465 122.432106) + (xy 278.281676 122.598035) (xy 278.283221 122.613842) (xy 278.302606 122.681404) (xy 278.33358 122.789361) + (xy 278.41488 122.952863) (xy 278.414881 122.952865) (xy 278.414883 122.952868) (xy 278.427966 122.970313) + (xy 278.524438 123.098952) (xy 278.524439 123.098953) (xy 278.52444 123.098954) (xy 278.658632 123.222795) + (xy 278.813025 123.320297) (xy 278.948177 123.374474) (xy 278.982514 123.388239) (xy 278.982515 123.388239) + (xy 278.982517 123.38824) (xy 279.161508 123.424379) (xy 279.161502 123.424379) (xy 279.177822 123.424659) + (xy 279.344084 123.42752) (xy 279.524212 123.397558) (xy 279.631161 123.358899) (xy 279.695936 123.335485) + (xy 279.695937 123.335483) (xy 279.69594 123.335483) (xy 279.710975 123.32672) (xy 279.717659 123.322835) + (xy 279.71795 123.322757) (xy 279.745833 123.30646) (xy 279.745951 123.306392) (xy 279.749168 123.305601) + (xy 279.808262 123.289599) (xy 281.289392 123.289599) (xy 281.289514 123.289606) (xy 281.297605 123.289605) + (xy 281.297608 123.289606) (xy 281.329742 123.289602) (xy 281.392304 123.306534) (xy 281.42013 123.322791) + (xy 281.420132 123.322791) (xy 281.42628 123.326383) (xy 281.427935 123.327208) (xy 281.442078 123.33545) + (xy 281.6138 123.397521) (xy 281.793921 123.427482) (xy 281.973598 123.42439) (xy 281.976491 123.424341) + (xy 282.155466 123.388205) (xy 282.155469 123.388203) (xy 282.155474 123.388203) (xy 282.32496 123.320262) + (xy 282.479346 123.222763) (xy 282.490005 123.212927) (xy 282.61353 123.09893) (xy 282.613532 123.098928) + (xy 282.626372 123.081807) (xy 282.723085 122.952847) (xy 282.804384 122.789348) (xy 282.854742 122.613833) + (xy 282.872497 122.432103) (xy 282.85706 122.25016) (xy 282.857058 122.250154) (xy 282.845492 122.207814) + (xy 282.808943 122.074018) (xy 282.801183 122.057849) (xy 282.798096 122.051404) (xy 282.798048 122.051146) + (xy 282.781671 122.017119) (xy 282.781543 122.01633) (xy 282.769502 121.963531) (xy 282.769502 121.963522) + (xy 282.769507 121.926108) (xy 282.769506 121.926104) (xy 282.769507 121.918098) (xy 282.769499 121.91796) + (xy 282.769499 120.614677) (xy 282.772154 120.603008) (xy 282.77112 120.594694) (xy 282.781705 120.561028) + (xy 282.788011 120.54789) (xy 282.798074 120.526974) (xy 282.798074 120.526969) (xy 282.80146 120.519933) + (xy 282.801625 120.519522) (xy 282.801746 120.51927) (xy 282.808983 120.504191) (xy 282.814788 120.482938) + (xy 282.851442 120.423456) (xy 282.914436 120.393232) (xy 282.958601 120.393996) (xy 282.962244 120.394721) + (xy 282.966157 120.3955) (xy 282.966158 120.3955) (xy 283.123844 120.3955) (xy 283.123845 120.395499) + (xy 283.278497 120.364737) (xy 283.35363 120.333615) (xy 283.423098 120.326147) (xy 283.485578 120.357422) + (xy 283.488763 120.360496) (xy 284.699181 121.570914) (xy 284.732666 121.632237) (xy 284.7355 121.658595) + (xy 284.7355 123.327924) (xy 284.715815 123.394963) (xy 284.663011 123.440718) (xy 284.658953 123.442485) + (xy 284.583824 123.473604) (xy 284.583814 123.473609) (xy 284.452711 123.56121) (xy 284.452707 123.561213) + (xy 284.341213 123.672707) (xy 284.34121 123.672711) (xy 284.253609 123.803814) (xy 284.253602 123.803827) + (xy 284.193264 123.949498) (xy 284.193261 123.94951) (xy 284.1625 124.104153) (xy 284.1625 124.261846) + (xy 284.193261 124.416489) (xy 284.193264 124.416501) (xy 284.253602 124.562172) (xy 284.253609 124.562185) + (xy 284.34121 124.693288) (xy 284.341213 124.693292) (xy 284.452707 124.804786) (xy 284.452711 124.804789) + (xy 284.583814 124.89239) (xy 284.583827 124.892397) (xy 284.67335 124.929478) (xy 284.729503 124.952737) + (xy 284.832538 124.973232) (xy 284.884153 124.983499) (xy 284.884156 124.9835) (xy 284.884158 124.9835) + (xy 285.041844 124.9835) (xy 285.041845 124.983499) (xy 285.196497 124.952737) (xy 285.342179 124.892394) + (xy 285.473289 124.804789) (xy 285.584789 124.693289) (xy 285.672394 124.562179) (xy 285.732737 124.416497) + (xy 285.7635 124.261842) (xy 285.7635 124.104158) (xy 285.7635 124.104155) (xy 285.763499 124.104153) + (xy 285.739308 123.982539) (xy 285.732737 123.949503) (xy 285.712716 123.901167) (xy 285.672397 123.803827) + (xy 285.67239 123.803814) (xy 285.584789 123.672711) (xy 285.584786 123.672707) (xy 285.473292 123.561213) + (xy 285.473288 123.56121) (xy 285.342185 123.473609) (xy 285.342175 123.473604) (xy 285.267047 123.442485) + (xy 285.212644 123.398644) (xy 285.190579 123.33235) (xy 285.1905 123.327924) (xy 285.1905 121.467748) + (xy 285.190499 121.467744) (xy 285.16995 121.418135) (xy 285.169949 121.418133) (xy 285.155866 121.384132) + (xy 283.810495 120.038762) (xy 283.777011 119.97744) (xy 283.781995 119.907748) (xy 283.783605 119.903655) + (xy 283.814737 119.828497) (xy 283.8455 119.673842) (xy 283.8455 119.516158) (xy 283.8455 119.516155) + (xy 283.845499 119.516153) (xy 283.840493 119.490988) (xy 283.814737 119.361503) (xy 283.812211 119.355404) + (xy 283.754397 119.215827) (xy 283.75439 119.215814) (xy 283.666789 119.084711) (xy 283.666786 119.084707) + (xy 283.555292 118.973213) (xy 283.555288 118.97321) (xy 283.424185 118.885609) (xy 283.424172 118.885602) + (xy 283.278501 118.825264) (xy 283.278489 118.825261) (xy 283.123845 118.7945) (xy 283.123842 118.7945) + (xy 282.966158 118.7945) (xy 282.966155 118.7945) (xy 282.81151 118.825261) (xy 282.811498 118.825264) + (xy 282.665827 118.885602) (xy 282.665814 118.885609) (xy 282.534711 118.97321) (xy 282.534707 118.973213) + (xy 282.423213 119.084707) (xy 282.42321 119.084711) (xy 282.367063 119.168741) (xy 282.31345 119.213546) + (xy 282.244125 119.222253) (xy 282.217825 119.214947) (xy 282.179268 119.199491) (xy 282.155483 119.189957) + (xy 282.155477 119.189955) (xy 281.976492 119.153818) (xy 281.976499 119.153818) (xy 281.804794 119.150865) + (xy 281.793918 119.150678) (xy 281.793917 119.150678) (xy 281.793914 119.150678) (xy 281.613797 119.180638) + (xy 281.613784 119.180641) (xy 281.442063 119.242713) (xy 281.427548 119.25117) (xy 281.427463 119.251219) + (xy 281.420376 119.25534) (xy 281.42013 119.255408) (xy 281.392338 119.271644) (xy 281.39209 119.271789) + (xy 281.389363 119.272459) (xy 281.329746 119.288596) (xy 281.289401 119.288593) (xy 281.289297 119.2886) + (xy 279.848596 119.2886) (xy 279.840414 119.288598) (xy 279.840392 119.288593) (xy 279.810465 119.288595) + (xy 279.808228 119.288595) (xy 279.807946 119.288512) (xy 279.745693 119.271662) (xy 279.717871 119.255408) + (xy 279.711805 119.251864) (xy 279.710107 119.251017) (xy 279.702757 119.246734) (xy 279.695921 119.24275) + (xy 279.524197 119.180678) (xy 279.524191 119.180677) (xy 279.344081 119.150719) (xy 279.344078 119.150719) + (xy 279.335539 119.150865) (xy 279.161507 119.153859) (xy 278.982534 119.189994) (xy 278.982523 119.189997) + (xy 278.813042 119.257937) (xy 278.813041 119.257937) (xy 278.658661 119.355432) (xy 278.658658 119.355434) + (xy 278.524467 119.479273) (xy 278.414915 119.625354) (xy 278.33362 119.788844) (xy 278.333619 119.788847) + (xy 278.333618 119.78885) (xy 278.316745 119.847658) (xy 278.283258 119.964365) (xy 278.269478 120.105413) + (xy 278.265504 120.146093) (xy 278.266683 120.159989) (xy 278.280779 120.326147) (xy 278.28094 120.328035) + (xy 278.305648 120.418484) (xy 278.329056 120.504178) (xy 278.32906 120.504188) (xy 278.336298 120.51927) + (xy 278.33634 120.519356) (xy 278.339923 120.526838) (xy 278.339981 120.52714) (xy 278.356297 120.561025) + (xy 278.356336 120.561106) (xy 278.356481 120.562) (xy 278.368501 120.614669) (xy 278.368501 121.963522) + (xy 278.356307 122.017145) (xy 278.355719 122.018371) (xy 278.355639 122.018538) (xy 278.336766 122.057737) + (xy 278.336442 122.058539) (xy 278.329018 122.07401) (xy 278.280901 122.250154) (xy 278.280901 122.250156) + (xy 278.265465 122.432106) (xy 273.4625 122.432106) (xy 273.4625 116.59655) (xy 274.4395 116.59655) + (xy 274.4395 116.765849) (xy 274.465981 116.933047) (xy 274.518296 117.094053) (xy 274.595152 117.244888) + (xy 274.694648 117.381834) (xy 274.694651 117.381838) (xy 274.81436 117.501547) (xy 274.814365 117.501551) + (xy 274.894244 117.559586) (xy 274.951315 117.60105) (xy 275.047425 117.65002) (xy 275.102146 117.677903) + (xy 275.102148 117.677903) (xy 275.102151 117.677905) (xy 275.18845 117.705945) (xy 275.263152 117.730218) + (xy 275.430351 117.7567) (xy 275.430356 117.7567) (xy 275.599649 117.7567) (xy 275.766847 117.730218) + (xy 275.927849 117.677905) (xy 276.078685 117.60105) (xy 276.215641 117.501546) (xy 276.335346 117.381841) + (xy 276.335346 117.38184) (xy 276.335349 117.381838) (xy 276.335351 117.381834) (xy 276.356179 117.353167) + (xy 276.43485 117.244885) (xy 276.511705 117.094049) (xy 276.564018 116.933047) (xy 276.5905 116.765849) + (xy 276.5905 116.59655) (xy 276.564928 116.435098) (xy 276.573882 116.365805) (xy 276.618879 116.312353) + (xy 276.68563 116.291713) (xy 276.687401 116.2917) (xy 276.925944 116.2917) (xy 276.925951 116.2917) + (xy 277.205442 116.254904) (xy 277.477739 116.181942) (xy 277.738183 116.074063) (xy 277.982317 115.933112) + (xy 278.205965 115.7615) (xy 278.4053 115.562165) (xy 278.472992 115.473946) (xy 278.52942 115.432744) + (xy 278.599166 115.428589) (xy 278.660086 115.462801) (xy 278.692839 115.524518) (xy 278.687026 115.594146) + (xy 278.678755 115.611433) (xy 278.622683 115.708551) (xy 278.622675 115.708568) (xy 278.512597 115.974321) + (xy 278.438146 116.252176) (xy 278.400601 116.537361) (xy 278.4006 116.537377) (xy 278.4006 116.825022) + (xy 278.400601 116.825038) (xy 278.438146 117.110223) (xy 278.512597 117.388078) (xy 278.622675 117.653831) + (xy 278.622683 117.653848) (xy 278.766504 117.902951) (xy 278.766515 117.902967) (xy 278.941621 118.131171) + (xy 278.941627 118.131178) (xy 279.145021 118.334572) (xy 279.145027 118.334577) (xy 279.373241 118.509691) + (xy 279.373248 118.509695) (xy 279.622351 118.653516) (xy 279.622356 118.653518) (xy 279.622359 118.65352) + (xy 279.622363 118.653521) (xy 279.622368 118.653524) (xy 279.669808 118.673174) (xy 279.88812 118.763602) + (xy 280.165975 118.838053) (xy 280.451171 118.8756) (xy 280.451178 118.8756) (xy 280.738822 118.8756) + (xy 280.738829 118.8756) (xy 281.024025 118.838053) (xy 281.30188 118.763602) (xy 281.567641 118.65352) + (xy 281.570056 118.652126) (xy 281.684067 118.586301) (xy 281.816759 118.509691) (xy 282.044973 118.334577) + (xy 282.248377 118.131173) (xy 282.423491 117.902959) (xy 282.56732 117.653841) (xy 282.677402 117.38808) + (xy 282.751853 117.110225) (xy 282.7894 116.825029) (xy 282.7894 116.59655) (xy 284.5995 116.59655) + (xy 284.5995 116.765849) (xy 284.625981 116.933047) (xy 284.678296 117.094053) (xy 284.755152 117.244888) + (xy 284.854648 117.381834) (xy 284.854651 117.381838) (xy 284.97436 117.501547) (xy 284.974365 117.501551) + (xy 285.054244 117.559586) (xy 285.111315 117.60105) (xy 285.207425 117.65002) (xy 285.262146 117.677903) + (xy 285.262148 117.677903) (xy 285.262151 117.677905) (xy 285.34845 117.705945) (xy 285.423152 117.730218) + (xy 285.590351 117.7567) (xy 285.590356 117.7567) (xy 285.759649 117.7567) (xy 285.926847 117.730218) + (xy 286.087849 117.677905) (xy 286.238685 117.60105) (xy 286.375641 117.501546) (xy 286.495346 117.381841) + (xy 286.495346 117.38184) (xy 286.495349 117.381838) (xy 286.495351 117.381834) (xy 286.516179 117.353167) + (xy 286.59485 117.244885) (xy 286.671705 117.094049) (xy 286.724018 116.933047) (xy 286.7505 116.765849) + (xy 286.7505 116.59655) (xy 286.724018 116.429352) (xy 286.697275 116.347046) (xy 286.671705 116.268351) + (xy 286.671703 116.268348) (xy 286.671703 116.268346) (xy 286.621015 116.168867) (xy 286.59485 116.117515) + (xy 286.563281 116.074064) (xy 286.495351 115.980565) (xy 286.495347 115.98056) (xy 286.375639 115.860852) + (xy 286.375634 115.860848) (xy 286.238688 115.761352) (xy 286.238687 115.761351) (xy 286.238685 115.76135) + (xy 286.189398 115.736237) (xy 286.087853 115.684496) (xy 285.926847 115.632181) (xy 285.759649 115.6057) + (xy 285.759644 115.6057) (xy 285.590356 115.6057) (xy 285.590351 115.6057) (xy 285.423152 115.632181) + (xy 285.262146 115.684496) (xy 285.111311 115.761352) (xy 284.974365 115.860848) (xy 284.97436 115.860852) + (xy 284.854652 115.98056) (xy 284.854648 115.980565) (xy 284.755152 116.117511) (xy 284.678296 116.268346) + (xy 284.625981 116.429352) (xy 284.5995 116.59655) (xy 282.7894 116.59655) (xy 282.7894 116.537371) + (xy 282.751853 116.252175) (xy 282.677402 115.97432) (xy 282.589705 115.762601) (xy 282.567324 115.708568) + (xy 282.567316 115.708551) (xy 282.423495 115.459448) (xy 282.423491 115.459441) (xy 282.282073 115.275141) + (xy 282.248378 115.231228) (xy 282.248372 115.231221) (xy 282.044978 115.027827) (xy 282.044971 115.027821) + (xy 281.816767 114.852715) (xy 281.816765 114.852713) (xy 281.816759 114.852709) (xy 281.816754 114.852706) + (xy 281.816751 114.852704) (xy 281.567648 114.708883) (xy 281.567631 114.708875) (xy 281.301878 114.598797) + (xy 281.024023 114.524346) (xy 280.738838 114.486801) (xy 280.738835 114.4868) (xy 280.738829 114.4868) + (xy 280.451171 114.4868) (xy 280.451165 114.4868) (xy 280.451161 114.486801) (xy 280.165976 114.524346) + (xy 279.888121 114.598797) (xy 279.622368 114.708875) (xy 279.622351 114.708883) (xy 279.373248 114.852704) + (xy 279.373232 114.852715) (xy 279.145028 115.027821) (xy 279.145021 115.027827) (xy 278.941627 115.231221) + (xy 278.87043 115.324007) (xy 278.814001 115.365209) (xy 278.744255 115.369364) (xy 278.683335 115.335151) + (xy 278.650583 115.273434) (xy 278.656396 115.203807) (xy 278.664661 115.186531) (xy 278.717863 115.094383) + (xy 278.825742 114.833939) (xy 278.898704 114.561642) (xy 278.9355 114.282151) (xy 278.9355 114.000249) + (xy 278.898704 113.720758) (xy 278.825742 113.448461) (xy 278.81876 113.431606) (xy 278.793765 113.371261) + (xy 278.717863 113.188017) (xy 278.717861 113.188014) (xy 278.717859 113.188009) (xy 278.576916 112.94389) + (xy 278.576912 112.943883) (xy 278.4053 112.720235) (xy 278.405298 112.720233) (xy 278.405295 112.720229) + (xy 278.20597 112.520904) (xy 278.181161 112.501867) (xy 277.982317 112.349288) (xy 277.982311 112.349284) + (xy 277.982309 112.349283) (xy 277.73819 112.20834) (xy 277.738179 112.208335) (xy 277.477743 112.100459) + (xy 277.205439 112.027495) (xy 276.925958 111.9907) (xy 276.925951 111.9907) (xy 276.644049 111.9907) + (xy 276.644041 111.9907) (xy 276.36456 112.027495) (xy 276.092256 112.100459) (xy 275.83182 112.208335) + (xy 275.831809 112.20834) (xy 275.58769 112.349283) (xy 275.587682 112.349289) (xy 275.364029 112.520904) + (xy 275.164704 112.720229) (xy 274.993089 112.943882) (xy 274.993083 112.94389) (xy 274.85214 113.188009) + (xy 274.852135 113.18802) (xy 274.744259 113.448456) (xy 274.671295 113.72076) (xy 274.6345 114.000241) + (xy 274.6345 114.282158) (xy 274.671295 114.561639) (xy 274.744259 114.833943) (xy 274.852135 115.094379) + (xy 274.85214 115.09439) (xy 274.993083 115.338509) (xy 274.993094 115.338525) (xy 275.123838 115.508914) + (xy 275.149032 115.574083) (xy 275.134994 115.642528) (xy 275.08618 115.692517) (xy 275.081758 115.694884) + (xy 274.951313 115.76135) (xy 274.814365 115.860848) (xy 274.81436 115.860852) (xy 274.694652 115.98056) + (xy 274.694648 115.980565) (xy 274.595152 116.117511) (xy 274.518296 116.268346) (xy 274.465981 116.429352) + (xy 274.4395 116.59655) (xy 273.4625 116.59655) (xy 273.4625 114.996075) (xy 273.482185 114.929036) + (xy 273.534989 114.883281) (xy 273.538999 114.881534) (xy 273.614179 114.850394) (xy 273.745289 114.762789) + (xy 273.856789 114.651289) (xy 273.944394 114.520179) (xy 274.004737 114.374497) (xy 274.0355 114.219842) + (xy 274.0355 114.062158) (xy 274.0355 114.062155) (xy 274.035499 114.062153) (xy 274.023556 114.002113) + (xy 274.004737 113.907503) (xy 273.977278 113.841211) (xy 273.944397 113.761827) (xy 273.94439 113.761814) + (xy 273.856789 113.630711) (xy 273.856786 113.630707) (xy 273.745292 113.519213) (xy 273.745288 113.51921) + (xy 273.614185 113.431609) (xy 273.614172 113.431602) (xy 273.468501 113.371264) (xy 273.468489 113.371261) + (xy 273.313845 113.3405) (xy 273.313842 113.3405) (xy 273.156158 113.3405) (xy 273.156155 113.3405) + (xy 273.00151 113.371261) (xy 273.001503 113.371263) (xy 272.926368 113.402384) (xy 272.856899 113.409851) + (xy 272.79442 113.378576) (xy 272.791236 113.375503) (xy 263.921819 104.506086) (xy 263.888334 104.444763) + (xy 263.8855 104.418405) (xy 263.8855 103.536806) (xy 268.740265 103.536806) (xy 268.758009 103.718425) + (xy 268.758021 103.718542) (xy 268.780177 103.795762) (xy 268.80838 103.894061) (xy 268.88968 104.057563) + (xy 268.889681 104.057565) (xy 268.889683 104.057568) (xy 268.943403 104.129199) (xy 268.999238 104.203652) + (xy 268.999239 104.203653) (xy 268.99924 104.203654) (xy 269.133432 104.327495) (xy 269.287825 104.424997) + (xy 269.410171 104.474041) (xy 269.457314 104.492939) (xy 269.457315 104.492939) (xy 269.457317 104.49294) + (xy 269.636308 104.529079) (xy 269.636302 104.529079) (xy 269.652622 104.529359) (xy 269.818884 104.53222) + (xy 269.999012 104.502258) (xy 270.068279 104.47722) (xy 270.170736 104.440185) (xy 270.170737 104.440183) + (xy 270.17074 104.440183) (xy 270.185775 104.43142) (xy 270.192459 104.427535) (xy 270.19275 104.427457) + (xy 270.220677 104.411135) (xy 270.220751 104.411092) (xy 270.223968 104.410301) (xy 270.283062 104.394299) + (xy 271.764192 104.394299) (xy 271.764314 104.394306) (xy 271.772405 104.394305) (xy 271.772408 104.394306) + (xy 271.804542 104.394302) (xy 271.867104 104.411234) (xy 271.89493 104.427491) (xy 271.894932 104.427491) + (xy 271.90108 104.431083) (xy 271.902735 104.431908) (xy 271.903564 104.432391) (xy 271.916878 104.44015) + (xy 272.0886 104.502221) (xy 272.268721 104.532182) (xy 272.448398 104.52909) (xy 272.451291 104.529041) + (xy 272.630266 104.492905) (xy 272.630269 104.492903) (xy 272.630274 104.492903) (xy 272.79976 104.424962) + (xy 272.954146 104.327463) (xy 272.954217 104.327398) (xy 273.08833 104.20363) (xy 273.088332 104.203628) + (xy 273.088333 104.203627) (xy 273.197885 104.057547) (xy 273.279184 103.894048) (xy 273.329542 103.718533) + (xy 273.347297 103.536803) (xy 273.33186 103.35486) (xy 273.331858 103.354854) (xy 273.319171 103.308409) + (xy 273.283743 103.178718) (xy 273.275983 103.162549) (xy 273.272896 103.156104) (xy 273.272848 103.155846) + (xy 273.256471 103.121819) (xy 273.256343 103.12103) (xy 273.244302 103.068231) (xy 273.244302 103.06794) + (xy 273.244307 103.030808) (xy 273.244306 103.030804) (xy 273.244307 103.022798) (xy 273.244299 103.02266) + (xy 273.244299 101.719379) (xy 273.246952 101.707715) (xy 273.245918 101.699405) (xy 273.256497 101.665759) + (xy 273.256503 101.665735) (xy 273.257155 101.664377) (xy 273.263195 101.651792) (xy 273.263203 101.651784) + (xy 273.263237 101.651702) (xy 273.272874 101.631674) (xy 273.272874 101.631671) (xy 273.27625 101.624656) + (xy 273.276418 101.624236) (xy 273.283783 101.608891) (xy 273.3319 101.432742) (xy 273.347337 101.250793) + (xy 273.329581 101.069055) (xy 273.27922 100.893534) (xy 273.197918 100.73003) (xy 273.111615 100.614952) + (xy 273.088362 100.583945) (xy 273.039491 100.538844) (xy 272.954169 100.460104) (xy 272.954166 100.460102) + (xy 272.954165 100.460101) (xy 272.954162 100.460099) (xy 272.799777 100.362601) (xy 272.630287 100.294658) + (xy 272.630277 100.294656) (xy 272.451292 100.258518) (xy 272.451299 100.258518) (xy 272.279594 100.255565) + (xy 272.268718 100.255378) (xy 272.268717 100.255378) (xy 272.268714 100.255378) (xy 272.088597 100.285338) + (xy 272.088584 100.285341) (xy 271.916863 100.347413) (xy 271.902348 100.35587) (xy 271.902263 100.355919) + (xy 271.895176 100.36004) (xy 271.89493 100.360108) (xy 271.86728 100.376262) (xy 271.86689 100.376489) + (xy 271.864163 100.377159) (xy 271.804546 100.393296) (xy 271.764201 100.393293) (xy 271.764097 100.3933) + (xy 270.323396 100.3933) (xy 270.315214 100.393298) (xy 270.315192 100.393293) (xy 270.285265 100.393295) + (xy 270.283028 100.393295) (xy 270.282746 100.393212) (xy 270.220493 100.376362) (xy 270.192671 100.360108) + (xy 270.186605 100.356564) (xy 270.184907 100.355717) (xy 270.177557 100.351434) (xy 270.170721 100.34745) + (xy 269.998997 100.285378) (xy 269.998991 100.285377) (xy 269.818881 100.255419) (xy 269.818878 100.255419) + (xy 269.810339 100.255565) (xy 269.636307 100.258559) (xy 269.457334 100.294694) (xy 269.457323 100.294697) + (xy 269.287842 100.362637) (xy 269.287841 100.362637) (xy 269.133461 100.460132) (xy 269.133458 100.460134) + (xy 268.999267 100.583973) (xy 268.889715 100.730054) (xy 268.80842 100.893544) (xy 268.808419 100.893547) + (xy 268.808418 100.89355) (xy 268.788215 100.963963) (xy 268.758058 101.069065) (xy 268.740314 101.250691) + (xy 268.740304 101.250793) (xy 268.743695 101.290766) (xy 268.755731 101.432637) (xy 268.75574 101.432735) + (xy 268.791538 101.563785) (xy 268.803856 101.608878) (xy 268.80386 101.608888) (xy 268.811098 101.62397) + (xy 268.81114 101.624056) (xy 268.814723 101.631538) (xy 268.814781 101.63184) (xy 268.831048 101.665623) + (xy 268.831136 101.665806) (xy 268.831281 101.6667) (xy 268.843301 101.719369) (xy 268.843301 103.068222) + (xy 268.831107 103.121845) (xy 268.830519 103.123071) (xy 268.830439 103.123238) (xy 268.811566 103.162437) + (xy 268.811242 103.163239) (xy 268.803818 103.17871) (xy 268.755701 103.354854) (xy 268.755701 103.354856) + (xy 268.742394 103.511706) (xy 268.740274 103.536705) (xy 268.740265 103.536806) (xy 263.8855 103.536806) + (xy 263.8855 97.54655) (xy 264.862 97.54655) (xy 264.862 97.715849) (xy 264.888481 97.883047) (xy 264.940796 98.044053) + (xy 265.017652 98.194888) (xy 265.117148 98.331834) (xy 265.117152 98.331839) (xy 265.23686 98.451547) + (xy 265.236865 98.451551) (xy 265.313873 98.5075) (xy 265.373815 98.55105) (xy 265.467141 98.598602) + (xy 265.524646 98.627903) (xy 265.524648 98.627903) (xy 265.524651 98.627905) (xy 265.60885 98.655263) + (xy 265.685652 98.680218) (xy 265.852851 98.7067) (xy 265.852856 98.7067) (xy 266.022149 98.7067) + (xy 266.189347 98.680218) (xy 266.350349 98.627905) (xy 266.501185 98.55105) (xy 266.638141 98.451546) + (xy 266.757846 98.331841) (xy 266.85735 98.194885) (xy 266.934205 98.044049) (xy 266.986518 97.883047) + (xy 266.996383 97.820763) (xy 267.013 97.715849) (xy 267.013 97.54655) (xy 266.987428 97.385098) + (xy 266.996382 97.315805) (xy 267.041379 97.262353) (xy 267.10813 97.241713) (xy 267.109901 97.2417) + (xy 267.348444 97.2417) (xy 267.348451 97.2417) (xy 267.627942 97.204904) (xy 267.900239 97.131942) + (xy 268.160683 97.024063) (xy 268.404817 96.883112) (xy 268.628465 96.7115) (xy 268.8278 96.512165) + (xy 268.895492 96.423946) (xy 268.95192 96.382744) (xy 269.021666 96.378589) (xy 269.082586 96.412801) + (xy 269.115339 96.474518) (xy 269.109526 96.544146) (xy 269.101255 96.561433) (xy 269.045183 96.658551) + (xy 269.045175 96.658568) (xy 268.935097 96.924321) (xy 268.860646 97.202176) (xy 268.823101 97.487361) + (xy 268.8231 97.487377) (xy 268.8231 97.775022) (xy 268.823101 97.775038) (xy 268.860646 98.060223) + (xy 268.935097 98.338078) (xy 269.045175 98.603831) (xy 269.045183 98.603848) (xy 269.189004 98.852951) + (xy 269.189015 98.852967) (xy 269.364121 99.081171) (xy 269.364127 99.081178) (xy 269.567521 99.284572) + (xy 269.567528 99.284578) (xy 269.700807 99.386846) (xy 269.795741 99.459691) (xy 269.795748 99.459695) + (xy 270.044851 99.603516) (xy 270.044856 99.603518) (xy 270.044859 99.60352) (xy 270.044863 99.603521) + (xy 270.044868 99.603524) (xy 270.087477 99.621173) (xy 270.31062 99.713602) (xy 270.588475 99.788053) + (xy 270.873671 99.8256) (xy 270.873678 99.8256) (xy 271.161322 99.8256) (xy 271.161329 99.8256) + (xy 271.446525 99.788053) (xy 271.72438 99.713602) (xy 271.990141 99.60352) (xy 272.239259 99.459691) + (xy 272.467473 99.284577) (xy 272.670877 99.081173) (xy 272.845991 98.852959) (xy 272.98982 98.603841) + (xy 273.099902 98.33808) (xy 273.174353 98.060225) (xy 273.2119 97.775029) (xy 273.2119 97.487371) + (xy 273.174353 97.202175) (xy 273.099902 96.92432) (xy 272.98982 96.658559) (xy 272.989818 96.658556) + (xy 272.989816 96.658551) (xy 272.845995 96.409448) (xy 272.845991 96.409441) (xy 272.742069 96.274007) + (xy 272.670878 96.181228) (xy 272.670872 96.181221) (xy 272.467478 95.977827) (xy 272.467471 95.977821) + (xy 272.239267 95.802715) (xy 272.239265 95.802713) (xy 272.239259 95.802709) (xy 272.239254 95.802706) + (xy 272.239251 95.802704) (xy 271.990148 95.658883) (xy 271.990131 95.658875) (xy 271.724378 95.548797) + (xy 271.446523 95.474346) (xy 271.161338 95.436801) (xy 271.161335 95.4368) (xy 271.161329 95.4368) + (xy 270.873671 95.4368) (xy 270.873665 95.4368) (xy 270.873661 95.436801) (xy 270.588476 95.474346) + (xy 270.310621 95.548797) (xy 270.044868 95.658875) (xy 270.044851 95.658883) (xy 269.795748 95.802704) + (xy 269.795732 95.802715) (xy 269.567528 95.977821) (xy 269.567521 95.977827) (xy 269.364127 96.181221) + (xy 269.29293 96.274007) (xy 269.236501 96.315209) (xy 269.166755 96.319364) (xy 269.105835 96.285151) + (xy 269.073083 96.223434) (xy 269.078896 96.153807) (xy 269.087161 96.136531) (xy 269.140363 96.044383) + (xy 269.248242 95.783939) (xy 269.321204 95.511642) (xy 269.358 95.232151) (xy 269.358 94.950249) + (xy 269.321204 94.670758) (xy 269.248242 94.398461) (xy 269.241342 94.381804) (xy 269.216349 94.321464) + (xy 269.140363 94.138017) (xy 269.140361 94.138014) (xy 269.140359 94.138009) (xy 268.999416 93.89389) + (xy 268.999412 93.893883) (xy 268.8278 93.670235) (xy 268.827798 93.670233) (xy 268.827795 93.670229) + (xy 268.62847 93.470904) (xy 268.603921 93.452067) (xy 268.404817 93.299288) (xy 268.404811 93.299284) + (xy 268.404809 93.299283) (xy 268.16069 93.15834) (xy 268.160679 93.158335) (xy 267.900243 93.050459) + (xy 267.627939 92.977495) (xy 267.348458 92.9407) (xy 267.348451 92.9407) (xy 267.066549 92.9407) + (xy 267.066541 92.9407) (xy 266.78706 92.977495) (xy 266.514756 93.050459) (xy 266.25432 93.158335) + (xy 266.254309 93.15834) (xy 266.01019 93.299283) (xy 266.010184 93.299287) (xy 266.010183 93.299288) + (xy 265.948401 93.346695) (xy 265.786529 93.470904) (xy 265.587204 93.670229) (xy 265.463314 93.831685) + (xy 265.429927 93.875197) (xy 265.415589 93.893882) (xy 265.415583 93.89389) (xy 265.27464 94.138009) + (xy 265.274635 94.13802) (xy 265.166759 94.398456) (xy 265.093795 94.67076) (xy 265.057 94.950241) + (xy 265.057 95.232158) (xy 265.093795 95.511639) (xy 265.166759 95.783943) (xy 265.274635 96.044379) + (xy 265.27464 96.04439) (xy 265.415583 96.288509) (xy 265.415594 96.288525) (xy 265.546338 96.458914) + (xy 265.571532 96.524083) (xy 265.557494 96.592528) (xy 265.50868 96.642517) (xy 265.504258 96.644884) + (xy 265.373813 96.71135) (xy 265.236865 96.810848) (xy 265.23686 96.810852) (xy 265.117152 96.93056) + (xy 265.117148 96.930565) (xy 265.017652 97.067511) (xy 264.940796 97.218346) (xy 264.888481 97.379352) + (xy 264.862 97.54655) (xy 263.8855 97.54655) (xy 263.8855 95.946275) (xy 263.905185 95.879236) (xy 263.957989 95.833481) + (xy 263.961999 95.831734) (xy 264.037179 95.800594) (xy 264.168289 95.712989) (xy 264.279789 95.601489) + (xy 264.367394 95.470379) (xy 264.427737 95.324697) (xy 264.4585 95.170042) (xy 264.4585 95.012358) + (xy 264.4585 95.012355) (xy 264.458499 95.012353) (xy 264.427738 94.85771) (xy 264.427737 94.857703) + (xy 264.427735 94.857698) (xy 264.367397 94.712027) (xy 264.36739 94.712014) (xy 264.279789 94.580911) + (xy 264.279786 94.580907) (xy 264.168292 94.469413) (xy 264.168288 94.46941) (xy 264.037185 94.381809) + (xy 264.037172 94.381802) (xy 263.891501 94.321464) (xy 263.891489 94.321461) (xy 263.736845 94.2907) + (xy 263.736842 94.2907) (xy 263.579158 94.2907) (xy 263.579155 94.2907) (xy 263.42451 94.321461) + (xy 263.424498 94.321464) (xy 263.278827 94.381802) (xy 263.278814 94.381809) (xy 263.147711 94.46941) + (xy 263.147707 94.469413) (xy 263.036213 94.580907) (xy 263.03621 94.580911) (xy 262.948609 94.712014) + (xy 262.948602 94.712027) (xy 262.888264 94.857698) (xy 262.888261 94.85771) (xy 262.8575 95.012353) + (xy 262.8575 95.170046) (xy 262.888261 95.324689) (xy 262.888264 95.324701) (xy 262.948602 95.470372) + (xy 262.948609 95.470385) (xy 263.03621 95.601488) (xy 263.036213 95.601492) (xy 263.147707 95.712986) + (xy 263.147711 95.712989) (xy 263.278814 95.80059) (xy 263.278818 95.800592) (xy 263.278821 95.800594) + (xy 263.353954 95.831715) (xy 263.408356 95.875554) (xy 263.430421 95.941848) (xy 263.4305 95.946275) + (xy 263.4305 104.516405) (xy 263.410815 104.583444) (xy 263.358011 104.629199) (xy 263.288853 104.639143) + (xy 263.225297 104.610118) (xy 263.218819 104.604086) (xy 260.083819 101.469086) (xy 260.050334 101.407763) + (xy 260.0475 101.381405) (xy 260.0475 92.822203) (xy 260.067185 92.755164) (xy 260.083818 92.734522) + (xy 260.408124 92.410241) (xy 271.407 92.410241) (xy 271.407 92.692158) (xy 271.443795 92.971639) + (xy 271.516759 93.243943) (xy 271.624635 93.504379) (xy 271.62464 93.50439) (xy 271.765583 93.748509) + (xy 271.765588 93.748517) (xy 271.9372 93.972165) (xy 271.937204 93.97217) (xy 272.136529 94.171495) + (xy 272.136533 94.171498) (xy 272.136535 94.1715) (xy 272.360183 94.343112) (xy 272.36019 94.343116) + (xy 272.604309 94.484059) (xy 272.604314 94.484061) (xy 272.604317 94.484063) (xy 272.864761 94.591942) + (xy 273.137058 94.664904) (xy 273.416549 94.7017) (xy 273.416556 94.7017) (xy 273.698444 94.7017) + (xy 273.698451 94.7017) (xy 273.977942 94.664904) (xy 274.250239 94.591942) (xy 274.510683 94.484063) + (xy 274.754817 94.343112) (xy 274.978465 94.1715) (xy 275.1778 93.972165) (xy 275.349412 93.748517) + (xy 275.490363 93.504383) (xy 275.598242 93.243939) (xy 275.671204 92.971642) (xy 275.708 92.692151) + (xy 275.708 92.410249) (xy 275.671204 92.130758) (xy 275.598242 91.858461) (xy 275.591342 91.841804) + (xy 275.566349 91.781464) (xy 275.490363 91.598017) (xy 275.490361 91.598014) (xy 275.490359 91.598009) + (xy 275.349416 91.35389) (xy 275.349412 91.353883) (xy 275.1778 91.130235) (xy 275.177798 91.130233) + (xy 275.177795 91.130229) (xy 274.97847 90.930904) (xy 274.978465 90.9309) (xy 274.754817 90.759288) + (xy 274.754811 90.759284) (xy 274.754809 90.759283) (xy 274.51069 90.61834) (xy 274.510679 90.618335) + (xy 274.250243 90.510459) (xy 273.977939 90.437495) (xy 273.698458 90.4007) (xy 273.698451 90.4007) + (xy 273.416549 90.4007) (xy 273.416541 90.4007) (xy 273.13706 90.437495) (xy 272.864756 90.510459) + (xy 272.60432 90.618335) (xy 272.604309 90.61834) (xy 272.36019 90.759283) (xy 272.360184 90.759287) + (xy 272.360183 90.759288) (xy 272.324557 90.786625) (xy 272.136529 90.930904) (xy 271.937204 91.130229) + (xy 271.867704 91.220803) (xy 271.776612 91.339517) (xy 271.765589 91.353882) (xy 271.765583 91.35389) + (xy 271.62464 91.598009) (xy 271.624635 91.59802) (xy 271.516759 91.858456) (xy 271.443795 92.13076) + (xy 271.407 92.410241) (xy 260.408124 92.410241) (xy 265.04391 87.774814) (xy 265.105235 87.741333) + (xy 265.131588 87.7385) (xy 266.857754 87.7385) (xy 266.857756 87.738501) (xy 266.887924 87.7385) + (xy 266.948253 87.7385) (xy 266.948435 87.7385) (xy 266.948805 87.738419) (xy 266.952283 87.736831) + (xy 266.993761 87.719649) (xy 267.027846 87.70553) (xy 267.03157 87.70414) (xy 267.031863 87.703866) + (xy 267.031868 87.703865) (xy 267.031869 87.703863) (xy 267.031875 87.703861) (xy 267.031943 87.703792) + (xy 267.033525 87.702321) (xy 267.033525 87.70232) (xy 267.043958 87.692603) (xy 267.04609 87.689643) + (xy 267.055007 87.680726) (xy 267.071157 87.664576) (xy 267.071158 87.664573) (xy 267.095865 87.639868) + (xy 267.095865 87.639865) (xy 267.107771 87.627961) (xy 267.10778 87.627948) (xy 273.304161 81.431093) + (xy 273.305367 81.430207) (xy 273.305755 81.429528) (xy 273.309527 81.427151) (xy 273.334386 81.408889) + (xy 273.341248 81.4053) (xy 273.346561 81.403319) (xy 273.380889 81.384571) (xy 273.381855 81.384067) + (xy 273.415057 81.377467) (xy 273.448153 81.370266) (xy 273.449526 81.370616) (xy 273.450384 81.370446) + (xy 273.453197 81.371553) (xy 273.490825 81.381156) (xy 273.593041 81.427838) (xy 273.66008 81.447523) + (xy 273.660084 81.447524) (xy 273.8025 81.468) (xy 278.278442 81.468) (xy 278.345481 81.487685) + (xy 278.391236 81.540489) (xy 278.40118 81.609647) (xy 278.372155 81.673203) (xy 278.366125 81.679679) + (xy 276.946469 83.099398) (xy 276.946467 83.0994) (xy 276.915135 83.130731) (xy 276.91513 83.130738) + (xy 276.91513 83.130739) (xy 276.904734 83.155841) (xy 276.904732 83.155846) (xy 276.880499 83.214347) + (xy 276.880499 83.214348) (xy 276.8805 83.237843) (xy 276.8805 91.696124) (xy 276.860815 91.763163) + (xy 276.808011 91.808918) (xy 276.803953 91.810685) (xy 276.728824 91.841804) (xy 276.728814 91.841809) + (xy 276.597711 91.92941) (xy 276.597707 91.929413) (xy 276.486213 92.040907) (xy 276.48621 92.040911) + (xy 276.398609 92.172014) (xy 276.398602 92.172027) (xy 276.338264 92.317698) (xy 276.338261 92.31771) + (xy 276.3075 92.472353) (xy 276.3075 92.630046) (xy 276.338261 92.784689) (xy 276.338264 92.784701) + (xy 276.398602 92.930372) (xy 276.398609 92.930385) (xy 276.48621 93.061488) (xy 276.486213 93.061492) + (xy 276.597707 93.172986) (xy 276.597711 93.172989) (xy 276.728814 93.26059) (xy 276.728827 93.260597) + (xy 276.824499 93.300225) (xy 276.874503 93.320937) (xy 277.029153 93.351699) (xy 277.029156 93.3517) + (xy 277.029158 93.3517) (xy 277.186844 93.3517) (xy 277.186845 93.351699) (xy 277.212004 93.346695) + (xy 277.260309 93.337087) (xy 277.3299 93.343314) (xy 277.385077 93.386177) (xy 277.408322 93.452067) + (xy 277.4085 93.458704) (xy 277.4085 97.457872) (xy 277.388815 97.524911) (xy 277.336011 97.570666) + (xy 277.266853 97.58061) (xy 277.203297 97.551585) (xy 277.165523 97.492807) (xy 277.162027 97.47727) + (xy 277.146518 97.379352) (xy 277.101796 97.241713) (xy 277.094205 97.218351) (xy 277.094203 97.218348) + (xy 277.094203 97.218346) (xy 277.050176 97.13194) (xy 277.01735 97.067515) (xy 276.985781 97.024064) + (xy 276.917851 96.930565) (xy 276.917847 96.93056) (xy 276.798139 96.810852) (xy 276.798134 96.810848) + (xy 276.661188 96.711352) (xy 276.661187 96.711351) (xy 276.661185 96.71135) (xy 276.614082 96.68735) + (xy 276.510353 96.634496) (xy 276.349347 96.582181) (xy 276.182149 96.5557) (xy 276.182144 96.5557) + (xy 276.012856 96.5557) (xy 276.012851 96.5557) (xy 275.845652 96.582181) (xy 275.684646 96.634496) + (xy 275.533811 96.711352) (xy 275.396865 96.810848) (xy 275.39686 96.810852) (xy 275.277152 96.93056) + (xy 275.277148 96.930565) (xy 275.177652 97.067511) (xy 275.100796 97.218346) (xy 275.048481 97.379352) + (xy 275.022 97.54655) (xy 275.022 97.715849) (xy 275.048481 97.883047) (xy 275.100796 98.044053) + (xy 275.177652 98.194888) (xy 275.277148 98.331834) (xy 275.277152 98.331839) (xy 275.39686 98.451547) + (xy 275.396865 98.451551) (xy 275.473873 98.5075) (xy 275.533815 98.55105) (xy 275.627141 98.598602) + (xy 275.684646 98.627903) (xy 275.684648 98.627903) (xy 275.684651 98.627905) (xy 275.76885 98.655263) + (xy 275.845652 98.680218) (xy 276.012851 98.7067) (xy 276.012856 98.7067) (xy 276.182149 98.7067) + (xy 276.349347 98.680218) (xy 276.510349 98.627905) (xy 276.661185 98.55105) (xy 276.798141 98.451546) + (xy 276.917846 98.331841) (xy 277.01735 98.194885) (xy 277.094205 98.044049) (xy 277.146518 97.883047) + (xy 277.156383 97.820763) (xy 277.162027 97.785129) (xy 277.191956 97.721994) (xy 277.251268 97.685063) + (xy 277.32113 97.686061) (xy 277.379363 97.724671) (xy 277.407477 97.788635) (xy 277.4085 97.804527) + (xy 277.4085 101.684765) (xy 277.407333 101.691064) (xy 277.408098 101.694739) (xy 277.402943 101.71478) + (xy 277.400282 101.729156) (xy 277.399017 101.732454) (xy 277.392975 101.745877) (xy 277.392897 101.748414) + (xy 277.391617 101.751754) (xy 277.3915 101.752264) (xy 277.3915 101.752747) (xy 277.3915 101.794557) + (xy 277.390234 101.836341) (xy 277.3915 101.83968) (xy 277.3915 102.489747) (xy 277.3915 102.580253) + (xy 277.424334 102.659521) (xy 277.426136 102.66387) (xy 284.232685 109.470418) (xy 284.26617 109.531741) + (xy 284.261186 109.601433) (xy 284.219314 109.657366) (xy 284.15385 109.681783) (xy 284.09202 109.669677) + (xy 284.091933 109.66989) (xy 284.090882 109.669454) (xy 284.090168 109.669315) (xy 284.088188 109.668338) + (xy 283.827743 109.560459) (xy 283.555439 109.487495) (xy 283.275958 109.4507) (xy 283.275951 109.4507) + (xy 282.994049 109.4507) (xy 282.994041 109.4507) (xy 282.71456 109.487495) (xy 282.442256 109.560459) + (xy 282.18182 109.668335) (xy 282.181809 109.66834) (xy 281.93769 109.809283) (xy 281.937684 109.809287) + (xy 281.937683 109.809288) (xy 281.890169 109.845747) (xy 281.714029 109.980904) (xy 281.514704 110.180229) + (xy 281.401381 110.327914) (xy 281.354327 110.389237) (xy 281.343089 110.403882) (xy 281.343083 110.40389) + (xy 281.20214 110.648009) (xy 281.202135 110.64802) (xy 281.094259 110.908456) (xy 281.021295 111.18076) + (xy 280.9845 111.460241) (xy 280.9845 111.742158) (xy 281.021295 112.021639) (xy 281.094259 112.293943) + (xy 281.202135 112.554379) (xy 281.20214 112.55439) (xy 281.343083 112.798509) (xy 281.343088 112.798517) + (xy 281.461074 112.952278) (xy 281.514704 113.02217) (xy 281.714029 113.221495) (xy 281.714033 113.221498) + (xy 281.714035 113.2215) (xy 281.937683 113.393112) (xy 281.93769 113.393116) (xy 282.181809 113.534059) + (xy 282.181814 113.534061) (xy 282.181817 113.534063) (xy 282.289834 113.578805) (xy 282.407486 113.627538) + (xy 282.442261 113.641942) (xy 282.714558 113.714904) (xy 282.994049 113.7517) (xy 282.994056 113.7517) + (xy 283.275944 113.7517) (xy 283.275951 113.7517) (xy 283.555442 113.714904) (xy 283.827739 113.641942) + (xy 284.088183 113.534063) (xy 284.332317 113.393112) (xy 284.555965 113.2215) (xy 284.7553 113.022165) + (xy 284.926912 112.798517) (xy 285.067863 112.554383) (xy 285.175742 112.293939) (xy 285.248704 112.021642) + (xy 285.2855 111.742151) (xy 285.2855 111.460249) (xy 285.248704 111.180758) (xy 285.175742 110.908461) + (xy 285.16876 110.891606) (xy 285.136135 110.812841) (xy 285.067863 110.648017) (xy 285.067862 110.648015) + (xy 285.066888 110.646039) (xy 285.066774 110.645388) (xy 285.06631 110.644267) (xy 285.066561 110.644163) + (xy 285.054891 110.577207) (xy 285.082013 110.512816) (xy 285.139641 110.47331) (xy 285.20948 110.471231) + (xy 285.265781 110.503514) (xy 285.919503 111.157236) (xy 285.952988 111.218559) (xy 285.948004 111.288251) + (xy 285.946384 111.292368) (xy 285.915263 111.367503) (xy 285.915261 111.36751) (xy 285.8845 111.522153) + (xy 285.8845 111.679846) (xy 285.915261 111.834489) (xy 285.915264 111.834501) (xy 285.975602 111.980172) + (xy 285.975609 111.980185) (xy 286.06321 112.111288) (xy 286.063213 112.111292) (xy 286.174707 112.222786) + (xy 286.174711 112.222789) (xy 286.305814 112.31039) (xy 286.305827 112.310397) (xy 286.451498 112.370735) + (xy 286.451503 112.370737) (xy 286.606153 112.401499) (xy 286.606156 112.4015) (xy 286.606158 112.4015) + (xy 286.763844 112.4015) (xy 286.763845 112.401499) (xy 286.918497 112.370737) (xy 287.064179 112.310394) + (xy 287.195289 112.222789) (xy 287.306789 112.111289) (xy 287.348523 112.048828) (xy 287.402134 112.004025) + (xy 287.471459 111.995317) (xy 287.534487 112.025471) (xy 287.539306 112.030039) (xy 291.184181 115.674914) + (xy 291.217666 115.736237) (xy 291.2205 115.762595) (xy 291.2205 129.795924) (xy 291.200815 129.862963) + (xy 291.148011 129.908718) (xy 291.143953 129.910485) (xy 291.068824 129.941604) (xy 291.068814 129.941609) + (xy 290.937711 130.02921) (xy 290.937707 130.029213) (xy 290.826213 130.140707) (xy 290.82621 130.140711) + (xy 290.738609 130.271814) (xy 290.738602 130.271827) (xy 290.678264 130.417498) (xy 290.678261 130.41751) + (xy 290.6475 130.572153) (xy 290.6475 130.729846) (xy 290.678261 130.884489) (xy 290.678264 130.884501) + (xy 290.738602 131.030172) (xy 290.738609 131.030185) (xy 290.82621 131.161288) (xy 290.826213 131.161292) + (xy 290.937707 131.272786) (xy 290.937711 131.272789) (xy 291.068814 131.36039) (xy 291.068827 131.360397) + (xy 291.210679 131.419153) (xy 291.214503 131.420737) (xy 291.369153 131.451499) (xy 291.369156 131.4515) + (xy 291.369158 131.4515) (xy 291.526844 131.4515) (xy 291.526845 131.451499) (xy 291.681497 131.420737) + (xy 291.827179 131.360394) (xy 291.958289 131.272789) (xy 292.069789 131.161289) (xy 292.157394 131.030179) + (xy 292.217737 130.884497) (xy 292.2485 130.729842) (xy 292.2485 130.572158) (xy 292.2485 130.572155) + (xy 292.248499 130.572153) (xy 292.238044 130.519595) (xy 292.217737 130.417503) (xy 292.21671 130.415024) + (xy 292.157397 130.271827) (xy 292.15739 130.271814) (xy 292.069789 130.140711) (xy 292.069786 130.140707) + (xy 291.958292 130.029213) (xy 291.958288 130.02921) (xy 291.827185 129.941609) (xy 291.827175 129.941604) + (xy 291.752047 129.910485) (xy 291.697644 129.866644) (xy 291.675579 129.80035) (xy 291.6755 129.795924) + (xy 291.6755 128.382595) (xy 291.695185 128.315556) (xy 291.747989 128.269801) (xy 291.817147 128.259857) + (xy 291.880703 128.288882) (xy 291.887181 128.294914) (xy 305.325119 141.732852) (xy 305.358604 141.794175) + (xy 305.35362 141.863867) (xy 305.311748 141.9198) (xy 305.246284 141.944217) (xy 305.189986 141.935094) + (xy 305.114428 141.903797) (xy 304.836573 141.829346) (xy 304.551388 141.791801) (xy 304.551385 141.7918) + (xy 304.551379 141.7918) (xy 304.263721 141.7918) (xy 304.263715 141.7918) (xy 304.263711 141.791801) + (xy 303.978526 141.829346) (xy 303.700671 141.903797) (xy 303.434918 142.013875) (xy 303.434901 142.013883) + (xy 303.185798 142.157704) (xy 303.185782 142.157715) (xy 302.957578 142.332821) (xy 302.957571 142.332827) + (xy 302.754177 142.536221) (xy 302.754171 142.536228) (xy 302.579065 142.764432) (xy 302.579054 142.764448) + (xy 302.435233 143.013551) (xy 302.435225 143.013568) (xy 302.325147 143.279321) (xy 302.250696 143.557176) + (xy 302.213151 143.842361) (xy 302.21315 143.842377) (xy 302.21315 144.130022) (xy 302.213151 144.130038) + (xy 302.250696 144.415223) (xy 302.325147 144.693078) (xy 302.435225 144.958831) (xy 302.435233 144.958848) + (xy 302.579054 145.207951) (xy 302.579065 145.207967) (xy 302.754171 145.436171) (xy 302.754177 145.436178) + (xy 302.957571 145.639572) (xy 302.957577 145.639577) (xy 303.185791 145.814691) (xy 303.185798 145.814695) + (xy 303.434901 145.958516) (xy 303.434906 145.958518) (xy 303.434909 145.95852) (xy 303.434913 145.958521) + (xy 303.434918 145.958524) (xy 303.540273 146.002163) (xy 303.70067 146.068602) (xy 303.978525 146.143053) + (xy 304.263721 146.1806) (xy 304.263728 146.1806) (xy 304.551372 146.1806) (xy 304.551379 146.1806) + (xy 304.836575 146.143053) (xy 305.11443 146.068602) (xy 305.380191 145.95852) (xy 305.629309 145.814691) + (xy 305.857523 145.639577) (xy 306.060927 145.436173) (xy 306.236041 145.207959) (xy 306.374436 144.968253) + (xy 306.379866 144.958848) (xy 306.379866 144.958847) (xy 306.37987 144.958841) (xy 306.489952 144.69308) + (xy 306.564403 144.415225) (xy 306.60195 144.130029) (xy 306.60195 143.842371) (xy 306.564403 143.557175) + (xy 306.489952 143.27932) (xy 306.458654 143.203761) (xy 306.451186 143.134294) (xy 306.482461 143.071815) + (xy 306.54255 143.036163) (xy 306.612375 143.038657) (xy 306.660897 143.06863) (xy 307.082181 143.489914) + (xy 307.115666 143.551237) (xy 307.1185 143.577595) (xy 307.1185 148.845924) (xy 307.114091 148.860939) + (xy 307.114651 148.876578) (xy 307.104448 148.893777) (xy 307.098815 148.912963) (xy 307.086512 148.924015) + (xy 307.079005 148.936671) (xy 307.055877 148.951535) (xy 307.050015 148.956802) (xy 307.046034 148.958794) + (xy 306.966821 148.991606) (xy 306.925922 149.018933) (xy 306.918983 149.022408) (xy 306.891923 149.027293) + (xy 306.865681 149.03551) (xy 306.858032 149.033411) (xy 306.850225 149.034821) (xy 306.824816 149.024299) + (xy 306.798301 149.017025) (xy 306.793 149.011124) (xy 306.785671 149.008089) (xy 306.769983 148.985499) + (xy 306.751611 148.965046) (xy 306.748907 148.958983) (xy 306.724645 148.900409) (xy 306.633983 148.681532) + (xy 306.594881 148.613806) (xy 306.4832 148.420368) (xy 306.29962 148.181121) (xy 306.299614 148.181114) + (xy 306.086385 147.967885) (xy 306.086378 147.967879) (xy 305.847131 147.784299) (xy 305.585971 147.633518) + (xy 305.585961 147.633514) (xy 305.30736 147.518113) (xy 305.016066 147.440061) (xy 304.717093 147.400701) + (xy 304.717088 147.4007) (xy 304.717083 147.4007) (xy 304.415517 147.4007) (xy 304.415511 147.4007) + (xy 304.415506 147.400701) (xy 304.116533 147.440061) (xy 303.825239 147.518113) (xy 303.546638 147.633514) + (xy 303.546628 147.633518) (xy 303.285468 147.784299) (xy 303.046221 147.967879) (xy 303.046214 147.967885) + (xy 302.832985 148.181114) (xy 302.832979 148.181121) (xy 302.649399 148.420368) (xy 302.498618 148.681528) + (xy 302.498614 148.681538) (xy 302.383213 148.960139) (xy 302.305161 149.251433) (xy 302.265801 149.550406) + (xy 302.2658 149.550423) (xy 302.2658 149.851976) (xy 302.265801 149.851993) (xy 302.305161 150.150966) + (xy 302.383213 150.44226) (xy 302.498614 150.720861) (xy 302.498618 150.720871) (xy 302.649399 150.982031) + (xy 302.832979 151.221278) (xy 302.832985 151.221285) (xy 303.046214 151.434514) (xy 303.046221 151.43452) + (xy 303.285468 151.6181) (xy 303.546628 151.768881) (xy 303.546629 151.768881) (xy 303.546632 151.768883) + (xy 303.671877 151.820761) (xy 303.825239 151.884286) (xy 303.82524 151.884286) (xy 303.825242 151.884287) + (xy 304.116532 151.962338) (xy 304.415517 152.0017) (xy 304.415524 152.0017) (xy 304.717076 152.0017) + (xy 304.717083 152.0017) (xy 305.016068 151.962338) (xy 305.307358 151.884287) (xy 305.585968 151.768883) + (xy 305.847132 151.6181) (xy 306.08638 151.434519) (xy 306.299619 151.22128) (xy 306.4832 150.982032) + (xy 306.633983 150.720868) (xy 306.749037 150.443103) (xy 306.792878 150.3887) (xy 306.859172 150.366635) + (xy 306.926871 150.383914) (xy 306.93249 150.387455) (xy 306.966812 150.410389) (xy 306.966827 150.410397) + (xy 307.112498 150.470735) (xy 307.112503 150.470737) (xy 307.267153 150.501499) (xy 307.267156 150.5015) + (xy 307.267158 150.5015) (xy 307.424844 150.5015) (xy 307.424845 150.501499) (xy 307.579497 150.470737) + (xy 307.725179 150.410394) (xy 307.856289 150.322789) (xy 307.873137 150.305941) (xy 307.896819 150.28226) + (xy 307.958142 150.248775) (xy 308.027834 150.253759) (xy 308.083767 150.295631) (xy 308.108184 150.361095) + (xy 308.1085 150.369941) (xy 308.1085 153.963051) (xy 308.088815 154.03009) (xy 308.036011 154.075845) + (xy 307.966853 154.085789) (xy 307.903297 154.056764) (xy 307.896819 154.050732) (xy 307.806939 153.960852) + (xy 307.806934 153.960848) (xy 307.669988 153.861352) (xy 307.669987 153.861351) (xy 307.669985 153.86135) + (xy 307.622882 153.83735) (xy 307.519153 153.784496) (xy 307.358147 153.732181) (xy 307.190949 153.7057) + (xy 307.190944 153.7057) (xy 307.021656 153.7057) (xy 307.021651 153.7057) (xy 306.854452 153.732181) + (xy 306.693446 153.784496) (xy 306.542611 153.861352) (xy 306.405665 153.960848) (xy 306.40566 153.960852) + (xy 306.285952 154.08056) (xy 306.285948 154.080565) (xy 306.186452 154.217511) (xy 306.109596 154.368346) + (xy 306.057281 154.529352) (xy 306.0308 154.69655) (xy 306.0308 154.865849) (xy 306.057281 155.033047) + (xy 306.109596 155.194053) (xy 306.186452 155.344888) (xy 306.285948 155.481834) (xy 306.285952 155.481839) + (xy 306.40566 155.601547) (xy 306.405665 155.601551) (xy 306.525117 155.688337) (xy 306.542615 155.70105) + (xy 306.62789 155.7445) (xy 306.693446 155.777903) (xy 306.693448 155.777903) (xy 306.693451 155.777905) + (xy 306.77975 155.805945) (xy 306.854452 155.830218) (xy 307.021651 155.8567) (xy 307.021656 155.8567) + (xy 307.190949 155.8567) (xy 307.358147 155.830218) (xy 307.401077 155.816269) (xy 307.519149 155.777905) + (xy 307.669985 155.70105) (xy 307.806941 155.601546) (xy 307.896819 155.511668) (xy 307.958142 155.478183) + (xy 308.027834 155.483167) (xy 308.083767 155.525039) (xy 308.108184 155.590503) (xy 308.1085 155.599349) + (xy 308.1085 161.422405) (xy 308.088815 161.489444) (xy 308.072181 161.510086) (xy 301.095086 168.487181) + (xy 301.033763 168.520666) (xy 301.007405 168.5235) (xy 297.065075 168.5235) (xy 296.998036 168.503815) + (xy 296.952281 168.451011) (xy 296.950534 168.447) (xy 296.919394 168.371821) (xy 296.919392 168.371818) + (xy 296.91939 168.371814) (xy 296.831789 168.240711) (xy 296.831786 168.240707) (xy 296.720292 168.129213) + (xy 296.720288 168.12921) (xy 296.589185 168.041609) (xy 296.589172 168.041602) (xy 296.443501 167.981264) + (xy 296.443489 167.981261) (xy 296.288845 167.9505) (xy 296.288842 167.9505) (xy 296.131158 167.9505) + (xy 296.131155 167.9505) (xy 295.97651 167.981261) (xy 295.976498 167.981264) (xy 295.830827 168.041602) + (xy 295.830814 168.041609) (xy 295.699711 168.12921) (xy 295.699707 168.129213) (xy 295.588213 168.240707) + (xy 295.58821 168.240711) (xy 295.500609 168.371814) (xy 295.500603 168.371826) (xy 295.440264 168.517498) + (xy 295.440261 168.51751) (xy 295.4095 168.672153) (xy 295.4095 168.829846) (xy 295.440261 168.984489) + (xy 295.440264 168.984501) (xy 295.500602 169.130172) (xy 295.500609 169.130185) (xy 295.58821 169.261288) + (xy 295.588213 169.261292) (xy 295.699707 169.372786) (xy 295.699711 169.372789) (xy 295.830814 169.46039) + (xy 295.830827 169.460397) (xy 295.934063 169.503158) (xy 295.976503 169.520737) (xy 296.131153 169.551499) + (xy 296.131156 169.5515) (xy 296.131158 169.5515) (xy 296.288844 169.5515) (xy 296.288845 169.551499) + (xy 296.443497 169.520737) (xy 296.589179 169.460394) (xy 296.720289 169.372789) (xy 296.831789 169.261289) + (xy 296.919394 169.130179) (xy 296.950515 169.055045) (xy 296.994354 169.000644) (xy 297.060648 168.978579) + (xy 297.065075 168.9785) (xy 301.198252 168.9785) (xy 301.198253 168.9785) (xy 301.281868 168.943865) + (xy 301.28187 168.943863) (xy 301.281871 168.943863) (xy 308.514819 161.710915) (xy 308.534255 161.700302) + (xy 308.550989 161.685802) (xy 308.56432 161.683885) (xy 308.576142 161.67743) (xy 308.598228 161.679009) + (xy 308.620147 161.675858) (xy 308.632398 161.681453) (xy 308.645834 161.682414) (xy 308.66356 161.695684) + (xy 308.683703 161.704883) (xy 308.690985 161.716214) (xy 308.701767 161.724286) (xy 308.709504 161.745031) + (xy 308.721477 161.763661) (xy 308.724628 161.785579) (xy 308.726184 161.78975) (xy 308.7265 161.798596) + (xy 308.7265 161.996389) (xy 308.706815 162.063428) (xy 308.690175 162.084076) (xy 301.688209 169.085061) + (xy 301.688191 169.085076) (xy 301.652861 169.120405) (xy 301.652859 169.120406) (xy 301.617143 169.156118) + (xy 301.617137 169.156126) (xy 301.601792 169.193172) (xy 301.598563 169.200968) (xy 301.582504 169.239731) + (xy 301.582503 169.239737) (xy 301.5825 169.239747) (xy 301.5825 169.286217) (xy 301.582497 169.330237) + (xy 301.5825 169.330244) (xy 301.5825 170.435924) (xy 301.562815 170.502963) (xy 301.510011 170.548718) + (xy 301.505953 170.550485) (xy 301.430824 170.581604) (xy 301.430814 170.581609) (xy 301.299711 170.66921) + (xy 301.299707 170.669213) (xy 301.188213 170.780707) (xy 301.18821 170.780711) (xy 301.100609 170.911814) + (xy 301.100602 170.911827) (xy 301.040264 171.057498) (xy 301.040261 171.05751) (xy 301.0095 171.212153) + (xy 301.0095 171.369846) (xy 301.040261 171.524489) (xy 301.040264 171.524501) (xy 301.100602 171.670172) + (xy 301.100609 171.670185) (xy 301.18821 171.801288) (xy 301.188213 171.801292) (xy 301.299707 171.912786) + (xy 301.299711 171.912789) (xy 301.430814 172.00039) (xy 301.430827 172.000397) (xy 301.547206 172.048602) + (xy 301.576503 172.060737) (xy 301.706434 172.086582) (xy 301.731153 172.091499) (xy 301.731156 172.0915) + (xy 301.731158 172.0915) (xy 301.888844 172.0915) (xy 301.888845 172.091499) (xy 302.043497 172.060737) + (xy 302.189179 172.000394) (xy 302.320289 171.912789) (xy 302.431789 171.801289) (xy 302.519394 171.670179) + (xy 302.579737 171.524497) (xy 302.6105 171.369842) (xy 302.6105 171.212158) (xy 302.6105 171.212155) + (xy 302.610499 171.212153) (xy 302.608699 171.203106) (xy 302.579737 171.057503) (xy 302.55467 170.996986) + (xy 302.519397 170.911827) (xy 302.51939 170.911814) (xy 302.431789 170.780711) (xy 302.431786 170.780707) + (xy 302.320292 170.669213) (xy 302.320288 170.66921) (xy 302.189185 170.581609) (xy 302.189175 170.581604) + (xy 302.114047 170.550485) (xy 302.059644 170.506644) (xy 302.037579 170.44035) (xy 302.0375 170.435924) + (xy 302.0375 169.43061) (xy 302.057185 169.363571) (xy 302.073825 169.342923) (xy 302.101498 169.315254) + (xy 302.80661 168.610241) (xy 309.5595 168.610241) (xy 309.5595 168.892158) (xy 309.596295 169.171639) + (xy 309.669259 169.443943) (xy 309.777135 169.704379) (xy 309.77714 169.70439) (xy 309.918083 169.948509) + (xy 309.918088 169.948517) (xy 310.080386 170.160027) (xy 310.089704 170.17217) (xy 310.289029 170.371495) + (xy 310.289033 170.371498) (xy 310.289035 170.3715) (xy 310.512683 170.543112) (xy 310.51269 170.543116) + (xy 310.756809 170.684059) (xy 310.756814 170.684061) (xy 310.756817 170.684063) (xy 311.017261 170.791942) + (xy 311.289558 170.864904) (xy 311.569049 170.9017) (xy 311.569056 170.9017) (xy 311.850944 170.9017) + (xy 311.850951 170.9017) (xy 312.130442 170.864904) (xy 312.402739 170.791942) (xy 312.663183 170.684063) + (xy 312.907317 170.543112) (xy 313.130965 170.3715) (xy 313.3303 170.172165) (xy 313.501912 169.948517) + (xy 313.642863 169.704383) (xy 313.750742 169.443939) (xy 313.823704 169.171642) (xy 313.8605 168.892151) + (xy 313.8605 168.610249) (xy 313.85923 168.600606) (xy 313.84829 168.517503) (xy 313.823704 168.330758) + (xy 313.750742 168.058461) (xy 313.74376 168.041606) (xy 313.718765 167.981261) (xy 313.642863 167.798017) + (xy 313.642861 167.798014) (xy 313.642859 167.798009) (xy 313.501916 167.55389) (xy 313.501912 167.553883) + (xy 313.3303 167.330235) (xy 313.330298 167.330233) (xy 313.330295 167.330229) (xy 313.13097 167.130904) + (xy 313.130965 167.1309) (xy 312.907317 166.959288) (xy 312.907311 166.959284) (xy 312.907309 166.959283) + (xy 312.66319 166.81834) (xy 312.663179 166.818335) (xy 312.402743 166.710459) (xy 312.130439 166.637495) + (xy 311.850958 166.6007) (xy 311.850951 166.6007) (xy 311.569049 166.6007) (xy 311.569041 166.6007) + (xy 311.28956 166.637495) (xy 311.017256 166.710459) (xy 310.75682 166.818335) (xy 310.756809 166.81834) + (xy 310.51269 166.959283) (xy 310.512682 166.959289) (xy 310.289029 167.130904) (xy 310.089704 167.330229) + (xy 310.043901 167.389921) (xy 309.929112 167.539517) (xy 309.918089 167.553882) (xy 309.918083 167.55389) + (xy 309.77714 167.798009) (xy 309.777135 167.79802) (xy 309.669259 168.058456) (xy 309.596295 168.33076) + (xy 309.5595 168.610241) (xy 302.80661 168.610241) (xy 309.082861 162.334867) (xy 309.082868 162.334865) + (xy 309.111103 162.306629) (xy 309.142048 162.275688) (xy 309.145691 162.272428) (xy 309.146843 162.270894) + (xy 309.146857 162.270881) (xy 309.14686 162.270872) (xy 309.146865 162.270868) (xy 309.146867 162.270863) + (xy 309.147191 162.270432) (xy 309.148521 162.26687) (xy 309.163734 162.230143) (xy 309.164847 162.227458) + (xy 309.166793 162.222757) (xy 309.181497 162.187268) (xy 309.181497 162.187263) (xy 309.181499 162.187259) + (xy 309.1815 162.187257) (xy 309.1815 162.142015) (xy 309.181503 162.096763) (xy 309.1815 162.096755) + (xy 309.1815 141.482106) (xy 313.984165 141.482106) (xy 314.000376 141.648035) (xy 314.001921 141.663842) + (xy 314.020684 141.729238) (xy 314.05228 141.839361) (xy 314.13358 142.002863) (xy 314.133581 142.002865) + (xy 314.133583 142.002868) (xy 314.193709 142.083042) (xy 314.243138 142.148952) (xy 314.243139 142.148953) + (xy 314.24314 142.148954) (xy 314.377332 142.272795) (xy 314.531725 142.370297) (xy 314.666877 142.424474) + (xy 314.701214 142.438239) (xy 314.701215 142.438239) (xy 314.701217 142.43824) (xy 314.880208 142.474379) + (xy 314.880202 142.474379) (xy 314.896522 142.474659) (xy 315.062784 142.47752) (xy 315.242912 142.447558) + (xy 315.298407 142.427498) (xy 315.414636 142.385485) (xy 315.414637 142.385483) (xy 315.41464 142.385483) + (xy 315.429675 142.37672) (xy 315.436359 142.372835) (xy 315.43665 142.372757) (xy 315.464533 142.35646) + (xy 315.464651 142.356392) (xy 315.467868 142.355601) (xy 315.526962 142.339599) (xy 317.008092 142.339599) + (xy 317.008214 142.339606) (xy 317.016305 142.339605) (xy 317.016308 142.339606) (xy 317.048442 142.339602) + (xy 317.111004 142.356534) (xy 317.13883 142.372791) (xy 317.138832 142.372791) (xy 317.14498 142.376383) + (xy 317.146635 142.377208) (xy 317.160778 142.38545) (xy 317.3325 142.447521) (xy 317.512621 142.477482) + (xy 317.692298 142.47439) (xy 317.695191 142.474341) (xy 317.874166 142.438205) (xy 317.874169 142.438203) + (xy 317.874174 142.438203) (xy 318.04366 142.370262) (xy 318.198046 142.272763) (xy 318.216431 142.255797) + (xy 318.33223 142.14893) (xy 318.332232 142.148928) (xy 318.34111 142.13709) (xy 318.441785 142.002847) + (xy 318.523084 141.839348) (xy 318.573442 141.663833) (xy 318.591197 141.482103) (xy 318.57576 141.30016) + (xy 318.575758 141.300154) (xy 318.565138 141.261277) (xy 318.527643 141.124018) (xy 318.519883 141.107849) + (xy 318.516796 141.101404) (xy 318.516748 141.101146) (xy 318.500371 141.067119) (xy 318.500243 141.06633) + (xy 318.488202 141.013531) (xy 318.488202 141.013522) (xy 318.488207 140.976108) (xy 318.488206 140.976104) + (xy 318.488207 140.968098) (xy 318.488199 140.96796) (xy 318.488199 139.664678) (xy 318.490853 139.653012) + (xy 318.489819 139.644699) (xy 318.500403 139.611034) (xy 318.506718 139.597876) (xy 318.506798 139.597787) + (xy 318.506768 139.597773) (xy 318.507195 139.596885) (xy 318.516774 139.576974) (xy 318.516774 139.576968) + (xy 318.520155 139.569942) (xy 318.520317 139.569538) (xy 318.527683 139.554191) (xy 318.543537 139.496153) + (xy 320.90075 139.496153) (xy 320.90075 139.653846) (xy 320.931511 139.808489) (xy 320.931514 139.808501) + (xy 320.991852 139.954172) (xy 320.991859 139.954185) (xy 321.07946 140.085288) (xy 321.079463 140.085292) + (xy 321.190957 140.196786) (xy 321.190961 140.196789) (xy 321.322064 140.28439) (xy 321.322077 140.284397) + (xy 321.467748 140.344735) (xy 321.467753 140.344737) (xy 321.622403 140.375499) (xy 321.622406 140.3755) + (xy 321.622408 140.3755) (xy 321.780094 140.3755) (xy 321.780095 140.375499) (xy 321.934747 140.344737) + (xy 322.080429 140.284394) (xy 322.211539 140.196789) (xy 322.323039 140.085289) (xy 322.410644 139.954179) + (xy 322.470987 139.808497) (xy 322.50175 139.653842) (xy 322.50175 139.496158) (xy 322.50175 139.496155) + (xy 322.501749 139.496153) (xy 322.487518 139.424611) (xy 322.470987 139.341503) (xy 322.470183 139.339562) + (xy 322.410647 139.195827) (xy 322.41064 139.195814) (xy 322.323039 139.064711) (xy 322.323036 139.064707) + (xy 322.211542 138.953213) (xy 322.211538 138.95321) (xy 322.080435 138.865609) (xy 322.080422 138.865602) + (xy 321.934751 138.805264) (xy 321.934739 138.805261) (xy 321.780095 138.7745) (xy 321.780092 138.7745) + (xy 321.622408 138.7745) (xy 321.622405 138.7745) (xy 321.46776 138.805261) (xy 321.467748 138.805264) + (xy 321.322077 138.865602) (xy 321.322064 138.865609) (xy 321.190961 138.95321) (xy 321.190957 138.953213) + (xy 321.079463 139.064707) (xy 321.07946 139.064711) (xy 320.991859 139.195814) (xy 320.991852 139.195827) + (xy 320.931514 139.341498) (xy 320.931511 139.34151) (xy 320.90075 139.496153) (xy 318.543537 139.496153) + (xy 318.5758 139.378042) (xy 318.591237 139.196093) (xy 318.573481 139.014355) (xy 318.52312 138.838834) + (xy 318.441818 138.67533) (xy 318.355427 138.560134) (xy 318.332262 138.529245) (xy 318.275096 138.476489) + (xy 318.198069 138.405404) (xy 318.198066 138.405402) (xy 318.198065 138.405401) (xy 318.198062 138.405399) + (xy 318.043677 138.307901) (xy 317.874187 138.239958) (xy 317.874177 138.239956) (xy 317.695192 138.203818) + (xy 317.695199 138.203818) (xy 317.523494 138.200865) (xy 317.512618 138.200678) (xy 317.512617 138.200678) + (xy 317.512614 138.200678) (xy 317.332497 138.230638) (xy 317.332484 138.230641) (xy 317.160763 138.292713) + (xy 317.146248 138.30117) (xy 317.146163 138.301219) (xy 317.139076 138.30534) (xy 317.13883 138.305408) + (xy 317.111038 138.321644) (xy 317.11079 138.321789) (xy 317.108063 138.322459) (xy 317.048446 138.338596) + (xy 317.008101 138.338593) (xy 317.007997 138.3386) (xy 315.567296 138.3386) (xy 315.559114 138.338598) + (xy 315.559092 138.338593) (xy 315.529165 138.338595) (xy 315.526928 138.338595) (xy 315.526646 138.338512) + (xy 315.464393 138.321662) (xy 315.436571 138.305408) (xy 315.430505 138.301864) (xy 315.428807 138.301017) + (xy 315.421457 138.296734) (xy 315.414621 138.29275) (xy 315.242897 138.230678) (xy 315.242891 138.230677) + (xy 315.062781 138.200719) (xy 315.062778 138.200719) (xy 315.054239 138.200865) (xy 314.880207 138.203859) + (xy 314.701234 138.239994) (xy 314.701223 138.239997) (xy 314.531742 138.307937) (xy 314.531741 138.307937) + (xy 314.377361 138.405432) (xy 314.377358 138.405434) (xy 314.243167 138.529273) (xy 314.133615 138.675354) + (xy 314.05232 138.838844) (xy 314.052319 138.838847) (xy 314.052318 138.83885) (xy 314.027138 138.926606) + (xy 314.001958 139.014365) (xy 313.98423 139.195827) (xy 313.984204 139.196093) (xy 313.985882 139.215868) + (xy 313.99798 139.358478) (xy 313.99964 139.378035) (xy 314.021318 139.457392) (xy 314.047756 139.554178) + (xy 314.04776 139.554188) (xy 314.054998 139.56927) (xy 314.05504 139.569356) (xy 314.058623 139.576838) + (xy 314.058681 139.57714) (xy 314.075036 139.611106) (xy 314.075181 139.612) (xy 314.087201 139.664669) + (xy 314.087201 141.013522) (xy 314.075007 141.067145) (xy 314.074419 141.068371) (xy 314.074339 141.068538) + (xy 314.055466 141.107737) (xy 314.055142 141.108539) (xy 314.047718 141.12401) (xy 313.999601 141.300154) + (xy 313.999601 141.300156) (xy 313.984165 141.482106) (xy 309.1815 141.482106) (xy 309.1815 135.64655) + (xy 310.1583 135.64655) (xy 310.1583 135.815849) (xy 310.184781 135.983047) (xy 310.237096 136.144053) + (xy 310.313952 136.294888) (xy 310.413448 136.431834) (xy 310.413452 136.431839) (xy 310.53316 136.551547) + (xy 310.533165 136.551551) (xy 310.652617 136.638337) (xy 310.670115 136.65105) (xy 310.733317 136.683253) + (xy 310.820946 136.727903) (xy 310.820948 136.727903) (xy 310.820951 136.727905) (xy 310.90725 136.755945) + (xy 310.981952 136.780218) (xy 311.149151 136.8067) (xy 311.149156 136.8067) (xy 311.318449 136.8067) + (xy 311.485647 136.780218) (xy 311.646649 136.727905) (xy 311.797485 136.65105) (xy 311.934441 136.551546) + (xy 312.054146 136.431841) (xy 312.15365 136.294885) (xy 312.230505 136.144049) (xy 312.282818 135.983047) + (xy 312.3093 135.815849) (xy 312.3093 135.64655) (xy 312.283728 135.485098) (xy 312.292682 135.415805) + (xy 312.337679 135.362353) (xy 312.40443 135.341713) (xy 312.406201 135.3417) (xy 312.644744 135.3417) + (xy 312.644751 135.3417) (xy 312.924242 135.304904) (xy 313.196539 135.231942) (xy 313.456983 135.124063) + (xy 313.701117 134.983112) (xy 313.924765 134.8115) (xy 314.1241 134.612165) (xy 314.191792 134.523946) + (xy 314.24822 134.482744) (xy 314.317966 134.478589) (xy 314.378886 134.512801) (xy 314.411639 134.574518) + (xy 314.405826 134.644146) (xy 314.397555 134.661433) (xy 314.341483 134.758551) (xy 314.341475 134.758568) + (xy 314.231397 135.024321) (xy 314.156946 135.302176) (xy 314.119401 135.587361) (xy 314.1194 135.587377) + (xy 314.1194 135.875022) (xy 314.119401 135.875038) (xy 314.156946 136.160223) (xy 314.231397 136.438078) + (xy 314.341475 136.703831) (xy 314.341483 136.703848) (xy 314.485304 136.952951) (xy 314.485315 136.952967) + (xy 314.660421 137.181171) (xy 314.660427 137.181178) (xy 314.863825 137.384576) (xy 314.960061 137.45842) + (xy 315.092041 137.559691) (xy 315.092048 137.559695) (xy 315.341151 137.703516) (xy 315.341156 137.703518) + (xy 315.341159 137.70352) (xy 315.341163 137.703521) (xy 315.341168 137.703524) (xy 315.446523 137.747163) + (xy 315.60692 137.813602) (xy 315.884775 137.888053) (xy 316.169971 137.9256) (xy 316.169978 137.9256) + (xy 316.457622 137.9256) (xy 316.457629 137.9256) (xy 316.742825 137.888053) (xy 317.02068 137.813602) + (xy 317.286441 137.70352) (xy 317.535559 137.559691) (xy 317.676378 137.451636) (xy 317.763775 137.384576) + (xy 317.763778 137.384572) (xy 317.967172 137.181178) (xy 317.967177 137.181173) (xy 318.142291 136.952959) + (xy 318.28612 136.703841) (xy 318.396202 136.43808) (xy 318.470653 136.160225) (xy 318.5082 135.875029) + (xy 318.5082 135.64655) (xy 320.3183 135.64655) (xy 320.3183 135.815849) (xy 320.344781 135.983047) + (xy 320.397096 136.144053) (xy 320.473952 136.294888) (xy 320.573448 136.431834) (xy 320.573452 136.431839) + (xy 320.69316 136.551547) (xy 320.693165 136.551551) (xy 320.812617 136.638337) (xy 320.830115 136.65105) + (xy 320.893317 136.683253) (xy 320.980946 136.727903) (xy 320.980948 136.727903) (xy 320.980951 136.727905) + (xy 321.06725 136.755945) (xy 321.141952 136.780218) (xy 321.309151 136.8067) (xy 321.309156 136.8067) + (xy 321.478449 136.8067) (xy 321.645647 136.780218) (xy 321.806649 136.727905) (xy 321.957485 136.65105) + (xy 322.094441 136.551546) (xy 322.214146 136.431841) (xy 322.31365 136.294885) (xy 322.390505 136.144049) + (xy 322.442818 135.983047) (xy 322.4693 135.815849) (xy 322.4693 135.64655) (xy 322.442818 135.479352) + (xy 322.398096 135.341713) (xy 322.390505 135.318351) (xy 322.390503 135.318348) (xy 322.390503 135.318346) + (xy 322.346476 135.23194) (xy 322.31365 135.167515) (xy 322.282081 135.124064) (xy 322.214151 135.030565) + (xy 322.214147 135.03056) (xy 322.094439 134.910852) (xy 322.094434 134.910848) (xy 321.957488 134.811352) + (xy 321.957487 134.811351) (xy 321.957485 134.81135) (xy 321.892409 134.778192) (xy 321.806653 134.734496) + (xy 321.645647 134.682181) (xy 321.478449 134.6557) (xy 321.478444 134.6557) (xy 321.309156 134.6557) + (xy 321.309151 134.6557) (xy 321.141952 134.682181) (xy 320.980946 134.734496) (xy 320.830111 134.811352) + (xy 320.693165 134.910848) (xy 320.69316 134.910852) (xy 320.573452 135.03056) (xy 320.573448 135.030565) + (xy 320.473952 135.167511) (xy 320.397096 135.318346) (xy 320.344781 135.479352) (xy 320.3183 135.64655) + (xy 318.5082 135.64655) (xy 318.5082 135.587371) (xy 318.470653 135.302175) (xy 318.396202 135.02432) + (xy 318.329763 134.863923) (xy 318.286124 134.758568) (xy 318.286116 134.758551) (xy 318.142295 134.509448) + (xy 318.142294 134.509447) (xy 318.142291 134.509441) (xy 318.017825 134.347233) (xy 317.967178 134.281228) + (xy 317.967172 134.281221) (xy 317.763778 134.077827) (xy 317.763771 134.077821) (xy 317.535567 133.902715) + (xy 317.535565 133.902713) (xy 317.535559 133.902709) (xy 317.535554 133.902706) (xy 317.535551 133.902704) + (xy 317.286448 133.758883) (xy 317.286431 133.758875) (xy 317.020678 133.648797) (xy 316.742823 133.574346) + (xy 316.457638 133.536801) (xy 316.457635 133.5368) (xy 316.457629 133.5368) (xy 316.169971 133.5368) + (xy 316.169965 133.5368) (xy 316.169961 133.536801) (xy 315.884776 133.574346) (xy 315.606921 133.648797) + (xy 315.341168 133.758875) (xy 315.341151 133.758883) (xy 315.092048 133.902704) (xy 315.092032 133.902715) + (xy 314.863828 134.077821) (xy 314.863821 134.077827) (xy 314.660427 134.281221) (xy 314.58923 134.374007) + (xy 314.532801 134.415209) (xy 314.463055 134.419364) (xy 314.402135 134.385151) (xy 314.369383 134.323434) + (xy 314.375196 134.253807) (xy 314.383461 134.236531) (xy 314.436663 134.144383) (xy 314.544542 133.883939) + (xy 314.617504 133.611642) (xy 314.6543 133.332151) (xy 314.6543 133.050249) (xy 314.617504 132.770758) + (xy 314.544542 132.498461) (xy 314.53756 132.481606) (xy 314.515609 132.428611) (xy 314.436663 132.238017) + (xy 314.436661 132.238014) (xy 314.436659 132.238009) (xy 314.295716 131.99389) (xy 314.295712 131.993883) + (xy 314.1241 131.770235) (xy 314.124098 131.770233) (xy 314.124095 131.770229) (xy 313.92477 131.570904) + (xy 313.826171 131.495246) (xy 313.701117 131.399288) (xy 313.701111 131.399284) (xy 313.701109 131.399283) + (xy 313.45699 131.25834) (xy 313.456979 131.258335) (xy 313.196543 131.150459) (xy 312.924239 131.077495) + (xy 312.644758 131.0407) (xy 312.644751 131.0407) (xy 312.362849 131.0407) (xy 312.362841 131.0407) + (xy 312.08336 131.077495) (xy 311.811056 131.150459) (xy 311.55062 131.258335) (xy 311.550609 131.25834) + (xy 311.30649 131.399283) (xy 311.306482 131.399289) (xy 311.082829 131.570904) (xy 310.883504 131.770229) + (xy 310.711889 131.993882) (xy 310.711883 131.99389) (xy 310.57094 132.238009) (xy 310.570935 132.23802) + (xy 310.463059 132.498456) (xy 310.390095 132.77076) (xy 310.3533 133.050241) (xy 310.3533 133.332158) + (xy 310.390095 133.611639) (xy 310.463059 133.883943) (xy 310.570935 134.144379) (xy 310.57094 134.14439) + (xy 310.711883 134.388509) (xy 310.711894 134.388525) (xy 310.842638 134.558914) (xy 310.867832 134.624083) + (xy 310.853794 134.692528) (xy 310.80498 134.742517) (xy 310.800558 134.744884) (xy 310.670113 134.81135) + (xy 310.533165 134.910848) (xy 310.53316 134.910852) (xy 310.413452 135.03056) (xy 310.413448 135.030565) + (xy 310.313952 135.167511) (xy 310.237096 135.318346) (xy 310.184781 135.479352) (xy 310.1583 135.64655) + (xy 309.1815 135.64655) (xy 309.1815 134.046075) (xy 309.201185 133.979036) (xy 309.253989 133.933281) + (xy 309.257999 133.931534) (xy 309.333179 133.900394) (xy 309.464289 133.812789) (xy 309.575789 133.701289) + (xy 309.663394 133.570179) (xy 309.723737 133.424497) (xy 309.7545 133.269842) (xy 309.7545 133.112158) + (xy 309.7545 133.112155) (xy 309.754499 133.112153) (xy 309.723737 132.957503) (xy 309.70803 132.919582) + (xy 309.663397 132.811827) (xy 309.66339 132.811814) (xy 309.575789 132.680711) (xy 309.575786 132.680707) + (xy 309.464292 132.569213) (xy 309.464288 132.56921) (xy 309.333185 132.481609) (xy 309.333172 132.481602) + (xy 309.187501 132.421264) (xy 309.187489 132.421261) (xy 309.032845 132.3905) (xy 309.032842 132.3905) + (xy 308.875158 132.3905) (xy 308.875155 132.3905) (xy 308.72051 132.421261) (xy 308.720498 132.421264) + (xy 308.574827 132.481602) (xy 308.574814 132.481609) (xy 308.443711 132.56921) (xy 308.443707 132.569213) + (xy 308.332213 132.680707) (xy 308.33221 132.680711) (xy 308.244609 132.811814) (xy 308.244607 132.811818) + (xy 308.238728 132.82601) (xy 308.213484 132.886954) (xy 308.169646 132.941356) (xy 308.103352 132.963421) + (xy 308.098925 132.9635) (xy 305.584605 132.9635) (xy 305.517566 132.943815) (xy 305.49692 132.927178) + (xy 304.009925 131.440063) (xy 303.976443 131.378738) (xy 303.98143 131.309047) (xy 304.023304 131.253115) + (xy 304.088769 131.228701) (xy 304.111494 131.229165) (xy 304.171511 131.235927) (xy 304.267121 131.246699) + (xy 304.267122 131.2467) (xy 304.267125 131.2467) (xy 304.547978 131.2467) (xy 304.547979 131.246699) + (xy 304.690605 131.230629) (xy 304.827044 131.215257) (xy 304.827049 131.215256) (xy 304.827059 131.215255) + (xy 305.100868 131.15276) (xy 305.365958 131.060001) (xy 305.618995 130.938145) (xy 305.856798 130.788723) + (xy 306.076375 130.613616) (xy 306.17975 130.510241) (xy 316.7033 130.510241) (xy 316.7033 130.792158) + (xy 316.740095 131.071639) (xy 316.813059 131.343943) (xy 316.920935 131.604379) (xy 316.92094 131.60439) + (xy 317.053442 131.833888) (xy 317.061888 131.848517) (xy 317.224347 132.060237) (xy 317.233504 132.07217) + (xy 317.432829 132.271495) (xy 317.432833 132.271498) (xy 317.432835 132.2715) (xy 317.656483 132.443112) + (xy 317.65649 132.443116) (xy 317.900609 132.584059) (xy 317.900614 132.584061) (xy 317.900617 132.584063) + (xy 318.161061 132.691942) (xy 318.433358 132.764904) (xy 318.712849 132.8017) (xy 318.712856 132.8017) + (xy 318.994744 132.8017) (xy 318.994751 132.8017) (xy 319.274242 132.764904) (xy 319.546539 132.691942) + (xy 319.806983 132.584063) (xy 320.051117 132.443112) (xy 320.274765 132.2715) (xy 320.4741 132.072165) + (xy 320.645712 131.848517) (xy 320.786663 131.604383) (xy 320.894542 131.343939) (xy 320.967504 131.071642) + (xy 321.0043 130.792151) (xy 321.0043 130.510249) (xy 320.967504 130.230758) (xy 320.894542 129.958461) + (xy 320.88756 129.941606) (xy 320.862565 129.881261) (xy 320.786663 129.698017) (xy 320.786661 129.698014) + (xy 320.786659 129.698009) (xy 320.645716 129.45389) (xy 320.645712 129.453883) (xy 320.4741 129.230235) + (xy 320.474098 129.230233) (xy 320.474095 129.230229) (xy 320.27477 129.030904) (xy 320.274765 129.0309) + (xy 320.051117 128.859288) (xy 320.051111 128.859284) (xy 320.051109 128.859283) (xy 319.80699 128.71834) + (xy 319.806979 128.718335) (xy 319.546543 128.610459) (xy 319.274239 128.537495) (xy 318.994758 128.5007) + (xy 318.994751 128.5007) (xy 318.712849 128.5007) (xy 318.712841 128.5007) (xy 318.43336 128.537495) + (xy 318.161056 128.610459) (xy 317.90062 128.718335) (xy 317.900609 128.71834) (xy 317.65649 128.859283) + (xy 317.656484 128.859287) (xy 317.656483 128.859288) (xy 317.601498 128.90148) (xy 317.432829 129.030904) + (xy 317.233504 129.230229) (xy 317.120181 129.377914) (xy 317.061897 129.453872) (xy 317.061889 129.453882) + (xy 317.061883 129.45389) (xy 316.92094 129.698009) (xy 316.920935 129.69802) (xy 316.813059 129.958456) + (xy 316.740095 130.23076) (xy 316.7033 130.510241) (xy 306.17975 130.510241) (xy 306.274966 130.415025) + (xy 306.450073 130.195448) (xy 306.599495 129.957645) (xy 306.721351 129.704608) (xy 306.81411 129.439518) + (xy 306.876605 129.165709) (xy 306.877458 129.158145) (xy 306.899822 128.95965) (xy 306.90805 128.886625) + (xy 306.90805 128.605775) (xy 306.893234 128.474277) (xy 306.876607 128.326705) (xy 306.876604 128.326687) + (xy 306.874063 128.315556) (xy 306.81411 128.052882) (xy 306.721351 127.787792) (xy 306.599495 127.534755) + (xy 306.450073 127.296952) (xy 306.274966 127.077375) (xy 306.076375 126.878784) (xy 306.036856 126.847269) + (xy 306.007365 126.82375) (xy 305.856798 126.703677) (xy 305.618995 126.554255) (xy 305.618992 126.554253) + (xy 305.365961 126.4324) (xy 305.100879 126.339643) (xy 305.100867 126.339639) (xy 304.827062 126.277145) + (xy 304.827044 126.277142) (xy 304.547981 126.2457) (xy 304.547975 126.2457) (xy 304.267125 126.2457) + (xy 304.267118 126.2457) (xy 303.988055 126.277142) (xy 303.988037 126.277145) (xy 303.714232 126.339639) + (xy 303.71422 126.339643) (xy 303.449138 126.4324) (xy 303.196107 126.554253) (xy 302.958303 126.703676) + (xy 302.738725 126.878783) (xy 302.540133 127.077375) (xy 302.365026 127.296953) (xy 302.215603 127.534757) + (xy 302.09375 127.787788) (xy 302.000993 128.05287) (xy 302.000989 128.052882) (xy 301.938495 128.326687) + (xy 301.938492 128.326705) (xy 301.90705 128.605768) (xy 301.90705 128.886631) (xy 301.924561 129.042047) + (xy 301.912506 129.110869) (xy 301.865157 129.162248) (xy 301.797547 129.179872) (xy 301.731141 129.158145) + (xy 301.713656 129.143608) (xy 295.621819 123.051277) (xy 295.588338 122.989953) (xy 295.593325 122.920262) + (xy 295.635199 122.86433) (xy 295.700664 122.839916) (xy 295.708311 122.839642) (xy 295.708736 122.8396) + (xy 295.708742 122.8396) (xy 295.863397 122.808837) (xy 296.009079 122.748494) (xy 296.140189 122.660889) + (xy 296.251689 122.549389) (xy 296.330055 122.432106) (xy 297.315465 122.432106) (xy 297.331676 122.598035) + (xy 297.333221 122.613842) (xy 297.352606 122.681404) (xy 297.38358 122.789361) (xy 297.46488 122.952863) + (xy 297.464881 122.952865) (xy 297.464883 122.952868) (xy 297.477966 122.970313) (xy 297.574438 123.098952) + (xy 297.574439 123.098953) (xy 297.57444 123.098954) (xy 297.708632 123.222795) (xy 297.863025 123.320297) + (xy 297.998177 123.374474) (xy 298.032514 123.388239) (xy 298.032515 123.388239) (xy 298.032517 123.38824) + (xy 298.211508 123.424379) (xy 298.211502 123.424379) (xy 298.227822 123.424659) (xy 298.394084 123.42752) + (xy 298.574212 123.397558) (xy 298.681161 123.358899) (xy 298.745936 123.335485) (xy 298.745937 123.335483) + (xy 298.74594 123.335483) (xy 298.760975 123.32672) (xy 298.767659 123.322835) (xy 298.76795 123.322757) + (xy 298.795833 123.30646) (xy 298.795951 123.306392) (xy 298.799168 123.305601) (xy 298.858262 123.289599) + (xy 300.339392 123.289599) (xy 300.339514 123.289606) (xy 300.347605 123.289605) (xy 300.347608 123.289606) + (xy 300.379742 123.289602) (xy 300.442304 123.306534) (xy 300.47013 123.322791) (xy 300.470132 123.322791) + (xy 300.47628 123.326383) (xy 300.477935 123.327208) (xy 300.492078 123.33545) (xy 300.6638 123.397521) + (xy 300.843921 123.427482) (xy 301.023598 123.42439) (xy 301.026491 123.424341) (xy 301.205466 123.388205) + (xy 301.205469 123.388203) (xy 301.205474 123.388203) (xy 301.37496 123.320262) (xy 301.529346 123.222763) + (xy 301.540005 123.212927) (xy 301.66353 123.09893) (xy 301.663532 123.098928) (xy 301.676372 123.081807) + (xy 301.773085 122.952847) (xy 301.854384 122.789348) (xy 301.904742 122.613833) (xy 301.922497 122.432103) + (xy 301.90706 122.25016) (xy 301.907058 122.250154) (xy 301.895492 122.207814) (xy 301.858943 122.074018) + (xy 301.851183 122.057849) (xy 301.848096 122.051404) (xy 301.848048 122.051146) (xy 301.831671 122.017119) + (xy 301.831543 122.01633) (xy 301.819502 121.963531) (xy 301.819502 121.963522) (xy 301.819507 121.926108) + (xy 301.819506 121.926104) (xy 301.819507 121.918098) (xy 301.819499 121.91796) (xy 301.819499 120.614677) + (xy 301.822154 120.603008) (xy 301.82112 120.594694) (xy 301.831705 120.561028) (xy 301.838011 120.54789) + (xy 301.848074 120.526974) (xy 301.848074 120.526969) (xy 301.85146 120.519933) (xy 301.851625 120.519522) + (xy 301.851746 120.51927) (xy 301.858983 120.504191) (xy 301.9071 120.328042) (xy 301.922537 120.146093) + (xy 301.904781 119.964355) (xy 301.85442 119.788834) (xy 301.773118 119.62533) (xy 301.678675 119.499397) + (xy 301.663562 119.479245) (xy 301.595259 119.416211) (xy 301.529369 119.355404) (xy 301.529366 119.355402) + (xy 301.529365 119.355401) (xy 301.529362 119.355399) (xy 301.374977 119.257901) (xy 301.205487 119.189958) + (xy 301.205477 119.189956) (xy 301.026492 119.153818) (xy 301.026499 119.153818) (xy 300.854794 119.150865) + (xy 300.843918 119.150678) (xy 300.843917 119.150678) (xy 300.843914 119.150678) (xy 300.663797 119.180638) + (xy 300.663784 119.180641) (xy 300.492063 119.242713) (xy 300.477548 119.25117) (xy 300.477463 119.251219) + (xy 300.470376 119.25534) (xy 300.47013 119.255408) (xy 300.442338 119.271644) (xy 300.44209 119.271789) + (xy 300.439363 119.272459) (xy 300.379746 119.288596) (xy 300.339401 119.288593) (xy 300.339297 119.2886) + (xy 298.898596 119.2886) (xy 298.890414 119.288598) (xy 298.890392 119.288593) (xy 298.860465 119.288595) + (xy 298.858228 119.288595) (xy 298.857946 119.288512) (xy 298.795693 119.271662) (xy 298.767871 119.255408) + (xy 298.761805 119.251864) (xy 298.760107 119.251017) (xy 298.752757 119.246734) (xy 298.745921 119.24275) + (xy 298.574197 119.180678) (xy 298.574191 119.180677) (xy 298.394081 119.150719) (xy 298.394078 119.150719) + (xy 298.385539 119.150865) (xy 298.211507 119.153859) (xy 298.032534 119.189994) (xy 298.032523 119.189997) + (xy 297.863042 119.257937) (xy 297.863041 119.257937) (xy 297.708661 119.355432) (xy 297.708658 119.355434) + (xy 297.574467 119.479273) (xy 297.464915 119.625354) (xy 297.38362 119.788844) (xy 297.383619 119.788847) + (xy 297.383618 119.78885) (xy 297.366745 119.847658) (xy 297.333258 119.964365) (xy 297.319478 120.105413) + (xy 297.315504 120.146093) (xy 297.316683 120.159989) (xy 297.330779 120.326147) (xy 297.33094 120.328035) + (xy 297.355648 120.418484) (xy 297.379056 120.504178) (xy 297.37906 120.504188) (xy 297.386298 120.51927) + (xy 297.38634 120.519356) (xy 297.389923 120.526838) (xy 297.389981 120.52714) (xy 297.406297 120.561025) + (xy 297.406336 120.561106) (xy 297.406481 120.562) (xy 297.418501 120.614669) (xy 297.418501 121.963522) + (xy 297.406307 122.017145) (xy 297.405719 122.018371) (xy 297.405639 122.018538) (xy 297.386766 122.057737) + (xy 297.386442 122.058539) (xy 297.379018 122.07401) (xy 297.330901 122.250154) (xy 297.330901 122.250156) + (xy 297.315465 122.432106) (xy 296.330055 122.432106) (xy 296.339294 122.418279) (xy 296.340759 122.414743) + (xy 296.355234 122.379797) (xy 296.387642 122.301555) (xy 296.399637 122.272597) (xy 296.4304 122.117942) + (xy 296.4304 121.960258) (xy 296.4304 121.960257) (xy 296.4304 121.960255) (xy 296.430399 121.960253) + (xy 296.419461 121.905263) (xy 296.399637 121.805603) (xy 296.391724 121.7865) (xy 296.339297 121.659927) + (xy 296.33929 121.659914) (xy 296.251689 121.528811) (xy 296.251686 121.528807) (xy 296.140192 121.417313) + (xy 296.140188 121.41731) (xy 296.009085 121.329709) (xy 296.009072 121.329702) (xy 295.863401 121.269364) + (xy 295.863389 121.269361) (xy 295.708745 121.2386) (xy 295.708742 121.2386) (xy 295.551058 121.2386) + (xy 295.551055 121.2386) (xy 295.39641 121.269361) (xy 295.396398 121.269364) (xy 295.250727 121.329702) + (xy 295.250714 121.329709) (xy 295.119611 121.41731) (xy 295.119607 121.417313) (xy 295.008113 121.528807) + (xy 295.00811 121.528811) (xy 294.920509 121.659914) (xy 294.920502 121.659927) (xy 294.860164 121.805598) + (xy 294.860161 121.80561) (xy 294.8294 121.960253) (xy 294.828803 121.966318) (xy 294.827412 121.966181) + (xy 294.809715 122.026453) (xy 294.756911 122.072208) (xy 294.687753 122.082152) (xy 294.624197 122.053127) + (xy 294.617715 122.047092) (xy 293.360815 120.790088) (xy 293.327333 120.728763) (xy 293.3245 120.70241) + (xy 293.3245 117.126629) (xy 293.344185 117.05959) (xy 293.396989 117.013835) (xy 293.466147 117.003891) + (xy 293.529703 117.032916) (xy 293.56643 117.088311) (xy 293.568295 117.094049) (xy 293.61351 117.182789) + (xy 293.645152 117.244888) (xy 293.744648 117.381834) (xy 293.744651 117.381838) (xy 293.86436 117.501547) + (xy 293.864365 117.501551) (xy 293.944244 117.559586) (xy 294.001315 117.60105) (xy 294.097425 117.65002) + (xy 294.152146 117.677903) (xy 294.152148 117.677903) (xy 294.152151 117.677905) (xy 294.23845 117.705945) + (xy 294.313152 117.730218) (xy 294.480351 117.7567) (xy 294.480356 117.7567) (xy 294.649649 117.7567) + (xy 294.816847 117.730218) (xy 294.977849 117.677905) (xy 295.128685 117.60105) (xy 295.265641 117.501546) + (xy 295.385346 117.381841) (xy 295.385346 117.38184) (xy 295.385349 117.381838) (xy 295.385351 117.381834) + (xy 295.406179 117.353167) (xy 295.48485 117.244885) (xy 295.561705 117.094049) (xy 295.614018 116.933047) + (xy 295.6405 116.765849) (xy 295.6405 116.59655) (xy 295.614928 116.435098) (xy 295.623882 116.365805) + (xy 295.668879 116.312353) (xy 295.73563 116.291713) (xy 295.737401 116.2917) (xy 295.975944 116.2917) + (xy 295.975951 116.2917) (xy 296.255442 116.254904) (xy 296.527739 116.181942) (xy 296.788183 116.074063) + (xy 297.032317 115.933112) (xy 297.255965 115.7615) (xy 297.4553 115.562165) (xy 297.522992 115.473946) + (xy 297.57942 115.432744) (xy 297.649166 115.428589) (xy 297.710086 115.462801) (xy 297.742839 115.524518) + (xy 297.737026 115.594146) (xy 297.728755 115.611433) (xy 297.672683 115.708551) (xy 297.672675 115.708568) + (xy 297.562597 115.974321) (xy 297.488146 116.252176) (xy 297.450601 116.537361) (xy 297.4506 116.537377) + (xy 297.4506 116.825022) (xy 297.450601 116.825038) (xy 297.488146 117.110223) (xy 297.562597 117.388078) + (xy 297.672675 117.653831) (xy 297.672683 117.653848) (xy 297.816504 117.902951) (xy 297.816515 117.902967) + (xy 297.991621 118.131171) (xy 297.991627 118.131178) (xy 298.195021 118.334572) (xy 298.195027 118.334577) + (xy 298.423241 118.509691) (xy 298.423248 118.509695) (xy 298.672351 118.653516) (xy 298.672356 118.653518) + (xy 298.672359 118.65352) (xy 298.672363 118.653521) (xy 298.672368 118.653524) (xy 298.719808 118.673174) + (xy 298.93812 118.763602) (xy 299.215975 118.838053) (xy 299.501171 118.8756) (xy 299.501178 118.8756) + (xy 299.788822 118.8756) (xy 299.788829 118.8756) (xy 300.074025 118.838053) (xy 300.35188 118.763602) + (xy 300.617641 118.65352) (xy 300.620056 118.652126) (xy 300.734067 118.586301) (xy 300.866759 118.509691) + (xy 301.094973 118.334577) (xy 301.298377 118.131173) (xy 301.473491 117.902959) (xy 301.61732 117.653841) + (xy 301.727402 117.38808) (xy 301.801853 117.110225) (xy 301.8394 116.825029) (xy 301.8394 116.59655) + (xy 303.6495 116.59655) (xy 303.6495 116.765849) (xy 303.675981 116.933047) (xy 303.728296 117.094053) + (xy 303.805152 117.244888) (xy 303.904648 117.381834) (xy 303.904651 117.381838) (xy 304.02436 117.501547) + (xy 304.024365 117.501551) (xy 304.104244 117.559586) (xy 304.161315 117.60105) (xy 304.257425 117.65002) + (xy 304.312146 117.677903) (xy 304.312148 117.677903) (xy 304.312151 117.677905) (xy 304.39845 117.705945) + (xy 304.473152 117.730218) (xy 304.640351 117.7567) (xy 304.640356 117.7567) (xy 304.809649 117.7567) + (xy 304.976847 117.730218) (xy 305.137849 117.677905) (xy 305.288685 117.60105) (xy 305.425641 117.501546) + (xy 305.545346 117.381841) (xy 305.545346 117.38184) (xy 305.545349 117.381838) (xy 305.545351 117.381834) + (xy 305.566179 117.353167) (xy 305.64485 117.244885) (xy 305.721705 117.094049) (xy 305.774018 116.933047) + (xy 305.8005 116.765849) (xy 305.8005 116.59655) (xy 305.774018 116.429352) (xy 305.747275 116.347046) + (xy 305.721705 116.268351) (xy 305.721703 116.268348) (xy 305.721703 116.268346) (xy 305.671015 116.168867) + (xy 305.64485 116.117515) (xy 305.613281 116.074064) (xy 305.545351 115.980565) (xy 305.545347 115.98056) + (xy 305.425639 115.860852) (xy 305.425634 115.860848) (xy 305.288688 115.761352) (xy 305.288687 115.761351) + (xy 305.288685 115.76135) (xy 305.239398 115.736237) (xy 305.137853 115.684496) (xy 304.976847 115.632181) + (xy 304.809649 115.6057) (xy 304.809644 115.6057) (xy 304.640356 115.6057) (xy 304.640351 115.6057) + (xy 304.473152 115.632181) (xy 304.312146 115.684496) (xy 304.161311 115.761352) (xy 304.024365 115.860848) + (xy 304.02436 115.860852) (xy 303.904652 115.98056) (xy 303.904648 115.980565) (xy 303.805152 116.117511) + (xy 303.728296 116.268346) (xy 303.675981 116.429352) (xy 303.6495 116.59655) (xy 301.8394 116.59655) + (xy 301.8394 116.537371) (xy 301.801853 116.252175) (xy 301.727402 115.97432) (xy 301.639705 115.762601) + (xy 301.617324 115.708568) (xy 301.617316 115.708551) (xy 301.473495 115.459448) (xy 301.473491 115.459441) + (xy 301.332073 115.275141) (xy 301.298378 115.231228) (xy 301.298372 115.231221) (xy 301.094978 115.027827) + (xy 301.094971 115.027821) (xy 300.866767 114.852715) (xy 300.866765 114.852713) (xy 300.866759 114.852709) + (xy 300.866754 114.852706) (xy 300.866751 114.852704) (xy 300.617648 114.708883) (xy 300.617631 114.708875) + (xy 300.351878 114.598797) (xy 300.074023 114.524346) (xy 299.788838 114.486801) (xy 299.788835 114.4868) + (xy 299.788829 114.4868) (xy 299.501171 114.4868) (xy 299.501165 114.4868) (xy 299.501161 114.486801) + (xy 299.215976 114.524346) (xy 298.938121 114.598797) (xy 298.672368 114.708875) (xy 298.672351 114.708883) + (xy 298.423248 114.852704) (xy 298.423232 114.852715) (xy 298.195028 115.027821) (xy 298.195021 115.027827) + (xy 297.991627 115.231221) (xy 297.92043 115.324007) (xy 297.864001 115.365209) (xy 297.794255 115.369364) + (xy 297.733335 115.335151) (xy 297.700583 115.273434) (xy 297.706396 115.203807) (xy 297.714661 115.186531) + (xy 297.767863 115.094383) (xy 297.875742 114.833939) (xy 297.948704 114.561642) (xy 297.9855 114.282151) + (xy 297.9855 114.000249) (xy 297.948704 113.720758) (xy 297.875742 113.448461) (xy 297.86876 113.431606) + (xy 297.843765 113.371261) (xy 297.767863 113.188017) (xy 297.767861 113.188014) (xy 297.767859 113.188009) + (xy 297.626916 112.94389) (xy 297.626912 112.943883) (xy 297.4553 112.720235) (xy 297.455298 112.720233) + (xy 297.455295 112.720229) (xy 297.25597 112.520904) (xy 297.231161 112.501867) (xy 297.032317 112.349288) + (xy 297.032311 112.349284) (xy 297.032309 112.349283) (xy 296.78819 112.20834) (xy 296.788179 112.208335) + (xy 296.527743 112.100459) (xy 296.255439 112.027495) (xy 295.975958 111.9907) (xy 295.975951 111.9907) + (xy 295.694049 111.9907) (xy 295.694041 111.9907) (xy 295.41456 112.027495) (xy 295.142256 112.100459) + (xy 294.88182 112.208335) (xy 294.881809 112.20834) (xy 294.63769 112.349283) (xy 294.637682 112.349289) + (xy 294.414029 112.520904) (xy 294.214704 112.720229) (xy 294.043089 112.943882) (xy 294.043083 112.94389) + (xy 293.90214 113.188009) (xy 293.902135 113.18802) (xy 293.794259 113.448456) (xy 293.721295 113.72076) + (xy 293.6845 114.000241) (xy 293.6845 114.282158) (xy 293.721295 114.561639) (xy 293.794259 114.833943) + (xy 293.902135 115.094379) (xy 293.90214 115.09439) (xy 294.043083 115.338509) (xy 294.043094 115.338525) + (xy 294.173838 115.508914) (xy 294.199032 115.574083) (xy 294.184994 115.642528) (xy 294.13618 115.692517) + (xy 294.131758 115.694884) (xy 294.001313 115.76135) (xy 293.864365 115.860848) (xy 293.86436 115.860852) + (xy 293.744652 115.98056) (xy 293.744648 115.980565) (xy 293.645152 116.117511) (xy 293.568295 116.268349) + (xy 293.56643 116.274091) (xy 293.526991 116.331765) (xy 293.462632 116.358962) (xy 293.393786 116.347046) + (xy 293.342311 116.299801) (xy 293.3245 116.23577) (xy 293.3245 114.907748) (xy 293.3245 114.907747) + (xy 293.289865 114.824132) (xy 293.225868 114.760135) (xy 293.050496 114.584763) (xy 293.017011 114.52344) + (xy 293.021995 114.453748) (xy 293.023605 114.449655) (xy 293.054737 114.374497) (xy 293.0855 114.219842) + (xy 293.0855 114.062158) (xy 293.0855 114.062155) (xy 293.085499 114.062153) (xy 293.073556 114.002113) + (xy 293.054737 113.907503) (xy 293.027278 113.841211) (xy 292.994397 113.761827) (xy 292.99439 113.761814) + (xy 292.906789 113.630711) (xy 292.906786 113.630707) (xy 292.795292 113.519213) (xy 292.795288 113.51921) + (xy 292.664185 113.431609) (xy 292.664172 113.431602) (xy 292.518501 113.371264) (xy 292.518489 113.371261) + (xy 292.363845 113.3405) (xy 292.363842 113.3405) (xy 292.206158 113.3405) (xy 292.206155 113.3405) + (xy 292.05151 113.371261) (xy 292.051503 113.371263) (xy 291.976368 113.402384) (xy 291.906899 113.409851) + (xy 291.84442 113.378576) (xy 291.841236 113.375503) (xy 282.948819 104.483086) (xy 282.915334 104.421763) + (xy 282.9125 104.395405) (xy 282.9125 103.382106) (xy 287.790465 103.382106) (xy 287.80759 103.55739) + (xy 287.808221 103.563842) (xy 287.823685 103.617738) (xy 287.85858 103.739361) (xy 287.93988 103.902863) + (xy 287.939881 103.902865) (xy 287.939883 103.902868) (xy 287.990128 103.969866) (xy 288.049438 104.048952) + (xy 288.049439 104.048953) (xy 288.04944 104.048954) (xy 288.183632 104.172795) (xy 288.338025 104.270297) + (xy 288.468267 104.322506) (xy 288.507514 104.338239) (xy 288.507515 104.338239) (xy 288.507517 104.33824) + (xy 288.686508 104.374379) (xy 288.686502 104.374379) (xy 288.702822 104.374659) (xy 288.869084 104.37752) + (xy 289.049212 104.347558) (xy 289.104707 104.327498) (xy 289.220936 104.285485) (xy 289.220937 104.285483) + (xy 289.22094 104.285483) (xy 289.235975 104.27672) (xy 289.242659 104.272835) (xy 289.24295 104.272757) + (xy 289.270833 104.25646) (xy 289.270951 104.256392) (xy 289.274168 104.255601) (xy 289.333262 104.239599) + (xy 290.814392 104.239599) (xy 290.814514 104.239606) (xy 290.822605 104.239605) (xy 290.822608 104.239606) + (xy 290.854742 104.239602) (xy 290.917304 104.256534) (xy 290.94513 104.272791) (xy 290.945132 104.272791) + (xy 290.95128 104.276383) (xy 290.952935 104.277208) (xy 290.967078 104.28545) (xy 291.1388 104.347521) + (xy 291.318921 104.377482) (xy 291.498598 104.37439) (xy 291.501491 104.374341) (xy 291.680466 104.338205) + (xy 291.680469 104.338203) (xy 291.680474 104.338203) (xy 291.84996 104.270262) (xy 292.004346 104.172763) + (xy 292.010998 104.166625) (xy 292.13853 104.04893) (xy 292.138532 104.048928) (xy 292.138533 104.048927) + (xy 292.248085 103.902847) (xy 292.329384 103.739348) (xy 292.379742 103.563833) (xy 292.397497 103.382103) + (xy 292.38206 103.20016) (xy 292.382058 103.200154) (xy 292.367179 103.145685) (xy 292.333943 103.024018) + (xy 292.326183 103.007849) (xy 292.323096 103.001404) (xy 292.323048 103.001146) (xy 292.306671 102.967119) + (xy 292.306543 102.96633) (xy 292.294502 102.913531) (xy 292.294504 102.897337) (xy 292.294507 102.876108) + (xy 292.294506 102.876104) (xy 292.294507 102.868098) (xy 292.294499 102.86796) (xy 292.294499 101.564678) + (xy 292.297153 101.553011) (xy 292.296119 101.544699) (xy 292.306702 101.511036) (xy 292.313067 101.497773) + (xy 292.313145 101.497687) (xy 292.313116 101.497673) (xy 292.313117 101.497671) (xy 292.323074 101.476974) + (xy 292.323074 101.476968) (xy 292.326455 101.469942) (xy 292.326617 101.469538) (xy 292.333983 101.454191) + (xy 292.3821 101.278042) (xy 292.397537 101.096093) (xy 292.379781 100.914355) (xy 292.32942 100.738834) + (xy 292.248118 100.57533) (xy 292.161727 100.460134) (xy 292.138562 100.429245) (xy 292.123161 100.415032) + (xy 292.004369 100.305404) (xy 292.004366 100.305402) (xy 292.004365 100.305401) (xy 292.004362 100.305399) + (xy 291.849977 100.207901) (xy 291.680487 100.139958) (xy 291.680477 100.139956) (xy 291.501492 100.103818) + (xy 291.501499 100.103818) (xy 291.329794 100.100865) (xy 291.318918 100.100678) (xy 291.318917 100.100678) + (xy 291.318914 100.100678) (xy 291.138797 100.130638) (xy 291.138784 100.130641) (xy 290.967063 100.192713) + (xy 290.952548 100.20117) (xy 290.952463 100.201219) (xy 290.945376 100.20534) (xy 290.94513 100.205408) + (xy 290.917338 100.221644) (xy 290.91709 100.221789) (xy 290.914363 100.222459) (xy 290.854746 100.238596) + (xy 290.814401 100.238593) (xy 290.814297 100.2386) (xy 289.373596 100.2386) (xy 289.365414 100.238598) + (xy 289.365392 100.238593) (xy 289.335465 100.238595) (xy 289.333228 100.238595) (xy 289.332946 100.238512) + (xy 289.270693 100.221662) (xy 289.242871 100.205408) (xy 289.236805 100.201864) (xy 289.235107 100.201017) + (xy 289.224845 100.195037) (xy 289.220921 100.19275) (xy 289.049197 100.130678) (xy 289.049191 100.130677) + (xy 288.869081 100.100719) (xy 288.869078 100.100719) (xy 288.860539 100.100865) (xy 288.686507 100.103859) + (xy 288.507534 100.139994) (xy 288.507523 100.139997) (xy 288.338042 100.207937) (xy 288.338041 100.207937) + (xy 288.183661 100.305432) (xy 288.183658 100.305434) (xy 288.049467 100.429273) (xy 287.939915 100.575354) + (xy 287.85862 100.738844) (xy 287.858619 100.738847) (xy 287.858618 100.73885) (xy 287.839935 100.803965) + (xy 287.808258 100.914365) (xy 287.79053 101.095827) (xy 287.790504 101.096093) (xy 287.793015 101.125691) + (xy 287.805403 101.271713) (xy 287.80594 101.278035) (xy 287.839028 101.399162) (xy 287.854056 101.454178) + (xy 287.85406 101.454188) (xy 287.861298 101.46927) (xy 287.86134 101.469356) (xy 287.864923 101.476838) + (xy 287.864981 101.47714) (xy 287.881299 101.511029) (xy 287.881336 101.511106) (xy 287.88148 101.511995) + (xy 287.893501 101.564669) (xy 287.893501 102.913522) (xy 287.881307 102.967145) (xy 287.880719 102.968371) + (xy 287.880639 102.968538) (xy 287.861766 103.007737) (xy 287.861442 103.008539) (xy 287.854018 103.02401) + (xy 287.805901 103.200154) (xy 287.805901 103.200156) (xy 287.792776 103.354864) (xy 287.790521 103.381451) + (xy 287.790465 103.382106) (xy 282.9125 103.382106) (xy 282.9125 97.54655) (xy 283.8895 97.54655) + (xy 283.8895 97.715849) (xy 283.915981 97.883047) (xy 283.968296 98.044053) (xy 284.045152 98.194888) + (xy 284.144648 98.331834) (xy 284.144652 98.331839) (xy 284.26436 98.451547) (xy 284.264365 98.451551) + (xy 284.341373 98.5075) (xy 284.401315 98.55105) (xy 284.494641 98.598602) (xy 284.552146 98.627903) + (xy 284.552148 98.627903) (xy 284.552151 98.627905) (xy 284.63635 98.655263) (xy 284.713152 98.680218) + (xy 284.880351 98.7067) (xy 284.880356 98.7067) (xy 285.049649 98.7067) (xy 285.216847 98.680218) + (xy 285.377849 98.627905) (xy 285.528685 98.55105) (xy 285.665641 98.451546) (xy 285.785346 98.331841) + (xy 285.88485 98.194885) (xy 285.961705 98.044049) (xy 286.014018 97.883047) (xy 286.023883 97.820763) + (xy 286.0405 97.715849) (xy 286.0405 97.54655) (xy 286.014928 97.385098) (xy 286.023882 97.315805) + (xy 286.068879 97.262353) (xy 286.13563 97.241713) (xy 286.137401 97.2417) (xy 286.375944 97.2417) + (xy 286.375951 97.2417) (xy 286.655442 97.204904) (xy 286.927739 97.131942) (xy 287.188183 97.024063) + (xy 287.432317 96.883112) (xy 287.655965 96.7115) (xy 287.8553 96.512165) (xy 287.922992 96.423946) + (xy 287.97942 96.382744) (xy 288.049166 96.378589) (xy 288.110086 96.412801) (xy 288.142839 96.474518) + (xy 288.137026 96.544146) (xy 288.128755 96.561433) (xy 288.072683 96.658551) (xy 288.072675 96.658568) + (xy 287.962597 96.924321) (xy 287.888146 97.202176) (xy 287.850601 97.487361) (xy 287.8506 97.487377) + (xy 287.8506 97.775022) (xy 287.850601 97.775038) (xy 287.888146 98.060223) (xy 287.962597 98.338078) + (xy 288.072675 98.603831) (xy 288.072683 98.603848) (xy 288.216504 98.852951) (xy 288.216515 98.852967) + (xy 288.391621 99.081171) (xy 288.391627 99.081178) (xy 288.595021 99.284572) (xy 288.595028 99.284578) + (xy 288.728307 99.386846) (xy 288.823241 99.459691) (xy 288.823248 99.459695) (xy 289.072351 99.603516) + (xy 289.072356 99.603518) (xy 289.072359 99.60352) (xy 289.072363 99.603521) (xy 289.072368 99.603524) + (xy 289.114977 99.621173) (xy 289.33812 99.713602) (xy 289.615975 99.788053) (xy 289.901171 99.8256) + (xy 289.901178 99.8256) (xy 290.188822 99.8256) (xy 290.188829 99.8256) (xy 290.474025 99.788053) + (xy 290.75188 99.713602) (xy 291.017641 99.60352) (xy 291.266759 99.459691) (xy 291.494973 99.284577) + (xy 291.698377 99.081173) (xy 291.873491 98.852959) (xy 292.01732 98.603841) (xy 292.127402 98.33808) + (xy 292.201853 98.060225) (xy 292.2394 97.775029) (xy 292.2394 97.54655) (xy 294.0495 97.54655) + (xy 294.0495 97.715849) (xy 294.075981 97.883047) (xy 294.128296 98.044053) (xy 294.205152 98.194888) + (xy 294.304648 98.331834) (xy 294.304652 98.331839) (xy 294.42436 98.451547) (xy 294.424365 98.451551) + (xy 294.501373 98.5075) (xy 294.561315 98.55105) (xy 294.654641 98.598602) (xy 294.712146 98.627903) + (xy 294.712148 98.627903) (xy 294.712151 98.627905) (xy 294.79635 98.655263) (xy 294.873152 98.680218) + (xy 295.040351 98.7067) (xy 295.040356 98.7067) (xy 295.209649 98.7067) (xy 295.376847 98.680218) + (xy 295.537849 98.627905) (xy 295.688685 98.55105) (xy 295.825641 98.451546) (xy 295.945346 98.331841) + (xy 296.04485 98.194885) (xy 296.121705 98.044049) (xy 296.174018 97.883047) (xy 296.183883 97.820763) + (xy 296.2005 97.715849) (xy 296.2005 97.54655) (xy 296.174018 97.379352) (xy 296.129296 97.241713) + (xy 296.121705 97.218351) (xy 296.121703 97.218348) (xy 296.121703 97.218346) (xy 296.077676 97.13194) + (xy 296.04485 97.067515) (xy 296.013281 97.024064) (xy 295.945351 96.930565) (xy 295.945347 96.93056) + (xy 295.825639 96.810852) (xy 295.825634 96.810848) (xy 295.688688 96.711352) (xy 295.688687 96.711351) + (xy 295.688685 96.71135) (xy 295.641582 96.68735) (xy 295.537853 96.634496) (xy 295.376847 96.582181) + (xy 295.209649 96.5557) (xy 295.209644 96.5557) (xy 295.040356 96.5557) (xy 295.040351 96.5557) + (xy 294.873152 96.582181) (xy 294.712146 96.634496) (xy 294.561311 96.711352) (xy 294.424365 96.810848) + (xy 294.42436 96.810852) (xy 294.304652 96.93056) (xy 294.304648 96.930565) (xy 294.205152 97.067511) + (xy 294.128296 97.218346) (xy 294.075981 97.379352) (xy 294.0495 97.54655) (xy 292.2394 97.54655) + (xy 292.2394 97.487371) (xy 292.201853 97.202175) (xy 292.127402 96.92432) (xy 292.01732 96.658559) + (xy 292.017318 96.658556) (xy 292.017316 96.658551) (xy 291.873495 96.409448) (xy 291.873491 96.409441) + (xy 291.769569 96.274007) (xy 291.698378 96.181228) (xy 291.698372 96.181221) (xy 291.494978 95.977827) + (xy 291.494971 95.977821) (xy 291.266767 95.802715) (xy 291.266765 95.802713) (xy 291.266759 95.802709) + (xy 291.266754 95.802706) (xy 291.266751 95.802704) (xy 291.017648 95.658883) (xy 291.017631 95.658875) + (xy 290.751878 95.548797) (xy 290.474023 95.474346) (xy 290.188838 95.436801) (xy 290.188835 95.4368) + (xy 290.188829 95.4368) (xy 289.901171 95.4368) (xy 289.901165 95.4368) (xy 289.901161 95.436801) + (xy 289.615976 95.474346) (xy 289.338121 95.548797) (xy 289.072368 95.658875) (xy 289.072351 95.658883) + (xy 288.823248 95.802704) (xy 288.823232 95.802715) (xy 288.595028 95.977821) (xy 288.595021 95.977827) + (xy 288.391627 96.181221) (xy 288.32043 96.274007) (xy 288.264001 96.315209) (xy 288.194255 96.319364) + (xy 288.133335 96.285151) (xy 288.100583 96.223434) (xy 288.106396 96.153807) (xy 288.114661 96.136531) + (xy 288.167863 96.044383) (xy 288.275742 95.783939) (xy 288.348704 95.511642) (xy 288.3855 95.232151) + (xy 288.3855 94.950249) (xy 288.348704 94.670758) (xy 288.275742 94.398461) (xy 288.268842 94.381804) + (xy 288.243849 94.321464) (xy 288.167863 94.138017) (xy 288.167861 94.138014) (xy 288.167859 94.138009) + (xy 288.026916 93.89389) (xy 288.026912 93.893883) (xy 287.8553 93.670235) (xy 287.855298 93.670233) + (xy 287.855295 93.670229) (xy 287.65597 93.470904) (xy 287.631421 93.452067) (xy 287.432317 93.299288) + (xy 287.432311 93.299284) (xy 287.432309 93.299283) (xy 287.18819 93.15834) (xy 287.188179 93.158335) + (xy 286.927743 93.050459) (xy 286.655439 92.977495) (xy 286.375958 92.9407) (xy 286.375951 92.9407) + (xy 286.094049 92.9407) (xy 286.094041 92.9407) (xy 285.81456 92.977495) (xy 285.542256 93.050459) + (xy 285.28182 93.158335) (xy 285.281809 93.15834) (xy 285.03769 93.299283) (xy 285.037684 93.299287) + (xy 285.037683 93.299288) (xy 284.975901 93.346695) (xy 284.814029 93.470904) (xy 284.614704 93.670229) + (xy 284.490814 93.831685) (xy 284.457427 93.875197) (xy 284.443089 93.893882) (xy 284.443083 93.89389) + (xy 284.30214 94.138009) (xy 284.302135 94.13802) (xy 284.194259 94.398456) (xy 284.121295 94.67076) + (xy 284.0845 94.950241) (xy 284.0845 95.232158) (xy 284.121295 95.511639) (xy 284.194259 95.783943) + (xy 284.302135 96.044379) (xy 284.30214 96.04439) (xy 284.443083 96.288509) (xy 284.443094 96.288525) + (xy 284.573838 96.458914) (xy 284.599032 96.524083) (xy 284.584994 96.592528) (xy 284.53618 96.642517) + (xy 284.531758 96.644884) (xy 284.401313 96.71135) (xy 284.264365 96.810848) (xy 284.26436 96.810852) + (xy 284.144652 96.93056) (xy 284.144648 96.930565) (xy 284.045152 97.067511) (xy 283.968296 97.218346) + (xy 283.915981 97.379352) (xy 283.8895 97.54655) (xy 282.9125 97.54655) (xy 282.9125 95.946275) + (xy 282.932185 95.879236) (xy 282.984989 95.833481) (xy 282.988999 95.831734) (xy 283.064179 95.800594) + (xy 283.195289 95.712989) (xy 283.306789 95.601489) (xy 283.394394 95.470379) (xy 283.454737 95.324697) + (xy 283.4855 95.170042) (xy 283.4855 95.012358) (xy 283.4855 95.012355) (xy 283.485499 95.012353) + (xy 283.454738 94.85771) (xy 283.454737 94.857703) (xy 283.454735 94.857698) (xy 283.394397 94.712027) + (xy 283.39439 94.712014) (xy 283.306789 94.580911) (xy 283.306786 94.580907) (xy 283.195292 94.469413) + (xy 283.195288 94.46941) (xy 283.064185 94.381809) (xy 283.064172 94.381802) (xy 282.918501 94.321464) + (xy 282.918489 94.321461) (xy 282.763845 94.2907) (xy 282.763842 94.2907) (xy 282.606158 94.2907) + (xy 282.606155 94.2907) (xy 282.45151 94.321461) (xy 282.451498 94.321464) (xy 282.305827 94.381802) + (xy 282.305814 94.381809) (xy 282.174711 94.46941) (xy 282.174707 94.469413) (xy 282.063213 94.580907) + (xy 282.06321 94.580911) (xy 281.975609 94.712014) (xy 281.975602 94.712027) (xy 281.915264 94.857698) + (xy 281.915261 94.85771) (xy 281.8845 95.012353) (xy 281.8845 95.170046) (xy 281.915261 95.324689) + (xy 281.915264 95.324701) (xy 281.975602 95.470372) (xy 281.975609 95.470385) (xy 282.06321 95.601488) + (xy 282.063213 95.601492) (xy 282.174707 95.712986) (xy 282.174711 95.712989) (xy 282.305814 95.80059) + (xy 282.305818 95.800592) (xy 282.305821 95.800594) (xy 282.380954 95.831715) (xy 282.435356 95.875554) + (xy 282.457421 95.941848) (xy 282.4575 95.946275) (xy 282.4575 104.495747) (xy 282.4575 104.586253) + (xy 282.486292 104.655763) (xy 282.492136 104.66987) (xy 291.519503 113.697236) (xy 291.528339 113.713418) + (xy 291.541246 113.726587) (xy 291.544736 113.743448) (xy 291.552988 113.758559) (xy 291.551672 113.776949) + (xy 291.555411 113.795006) (xy 291.548266 113.824574) (xy 291.548004 113.828251) (xy 291.547562 113.829416) + (xy 291.546974 113.830944) (xy 291.515263 113.907503) (xy 291.512822 113.91977) (xy 291.509014 113.929677) + (xy 291.493979 113.949345) (xy 291.482503 113.971284) (xy 291.473131 113.97662) (xy 291.466583 113.985187) + (xy 291.443302 113.993604) (xy 291.421786 114.005856) (xy 291.411017 114.005278) (xy 291.400876 114.008945) + (xy 291.376738 114.003439) (xy 291.352016 114.002113) (xy 291.341289 113.995353) (xy 291.332756 113.993407) + (xy 291.323961 113.984434) (xy 291.305593 113.972859) (xy 278.883819 101.551085) (xy 278.850334 101.489762) + (xy 278.8475 101.463404) (xy 278.8475 92.410241) (xy 290.4345 92.410241) (xy 290.4345 92.692158) + (xy 290.471295 92.971639) (xy 290.544259 93.243943) (xy 290.652135 93.504379) (xy 290.65214 93.50439) + (xy 290.793083 93.748509) (xy 290.793088 93.748517) (xy 290.9647 93.972165) (xy 290.964704 93.97217) + (xy 291.164029 94.171495) (xy 291.164033 94.171498) (xy 291.164035 94.1715) (xy 291.387683 94.343112) + (xy 291.38769 94.343116) (xy 291.631809 94.484059) (xy 291.631814 94.484061) (xy 291.631817 94.484063) + (xy 291.892261 94.591942) (xy 292.164558 94.664904) (xy 292.444049 94.7017) (xy 292.444056 94.7017) + (xy 292.725944 94.7017) (xy 292.725951 94.7017) (xy 293.005442 94.664904) (xy 293.277739 94.591942) + (xy 293.538183 94.484063) (xy 293.782317 94.343112) (xy 294.005965 94.1715) (xy 294.2053 93.972165) + (xy 294.376912 93.748517) (xy 294.517863 93.504383) (xy 294.625742 93.243939) (xy 294.698704 92.971642) + (xy 294.7355 92.692151) (xy 294.7355 92.410249) (xy 294.698704 92.130758) (xy 294.625742 91.858461) + (xy 294.618842 91.841804) (xy 294.593849 91.781464) (xy 294.517863 91.598017) (xy 294.517861 91.598014) + (xy 294.517859 91.598009) (xy 294.376916 91.35389) (xy 294.376912 91.353883) (xy 294.2053 91.130235) + (xy 294.205298 91.130233) (xy 294.205295 91.130229) (xy 294.00597 90.930904) (xy 294.005965 90.9309) + (xy 293.782317 90.759288) (xy 293.782311 90.759284) (xy 293.782309 90.759283) (xy 293.53819 90.61834) + (xy 293.538179 90.618335) (xy 293.277743 90.510459) (xy 293.005439 90.437495) (xy 292.725958 90.4007) + (xy 292.725951 90.4007) (xy 292.444049 90.4007) (xy 292.444041 90.4007) (xy 292.16456 90.437495) + (xy 291.892256 90.510459) (xy 291.63182 90.618335) (xy 291.631809 90.61834) (xy 291.38769 90.759283) + (xy 291.387684 90.759287) (xy 291.387683 90.759288) (xy 291.352057 90.786625) (xy 291.164029 90.930904) + (xy 290.964704 91.130229) (xy 290.895204 91.220803) (xy 290.804112 91.339517) (xy 290.793089 91.353882) + (xy 290.793083 91.35389) (xy 290.65214 91.598009) (xy 290.652135 91.59802) (xy 290.544259 91.858456) + (xy 290.471295 92.13076) (xy 290.4345 92.410241) (xy 278.8475 92.410241) (xy 278.8475 90.302) (xy 278.867185 90.234961) + (xy 278.919989 90.189206) (xy 278.9715 90.178) (xy 282.322995 90.178) (xy 282.368248 90.178001) + (xy 282.36825 90.178) (xy 282.368253 90.178) (xy 282.41469 90.158765) (xy 282.451864 90.143368) + (xy 282.451866 90.143365) (xy 282.451868 90.143365) (xy 282.451877 90.143355) (xy 282.456549 90.139518) + (xy 282.45655 90.139517) (xy 282.456554 90.139514) (xy 282.456658 90.139428) (xy 282.460541 90.134691) + (xy 282.476401 90.118832) (xy 289.074936 83.520595) (xy 289.093847 83.507989) (xy 289.106624 83.48891) + (xy 289.122863 83.472672) (xy 289.131561 83.451673) (xy 289.144207 83.432791) (xy 289.14871 83.410274) + (xy 289.157499 83.389058) (xy 289.157499 83.366329) (xy 289.161957 83.344042) (xy 289.1575 83.321515) + (xy 289.157501 83.298552) (xy 289.1575 83.298551) (xy 289.157501 83.291478) (xy 289.1565 83.281306) + (xy 289.1565 81.592) (xy 289.176185 81.524961) (xy 289.228989 81.479206) (xy 289.2805 81.468) (xy 294.53049 81.468) + (xy 294.5305 81.468) (xy 294.637956 81.456447) (xy 294.689467 81.445241) (xy 294.792004 81.411113) + (xy 294.821449 81.392189) (xy 294.888485 81.372503) (xy 294.936595 81.382215) (xy 294.946481 81.386376) + (xy 294.953771 81.391059) (xy 294.987285 81.403551) (xy 294.989677 81.404558) (xy 294.996489 81.410112) + (xy 295.029235 81.431147) (xy 295.358235 81.760015) (xy 295.871164 82.272739) (xy 295.904661 82.334055) + (xy 295.9075 82.360437) (xy 295.9075 91.696124) (xy 295.887815 91.763163) (xy 295.835011 91.808918) + (xy 295.830953 91.810685) (xy 295.755824 91.841804) (xy 295.755814 91.841809) (xy 295.624711 91.92941) + (xy 295.624707 91.929413) (xy 295.513213 92.040907) (xy 295.51321 92.040911) (xy 295.425609 92.172014) + (xy 295.425602 92.172027) (xy 295.365264 92.317698) (xy 295.365261 92.31771) (xy 295.3345 92.472353) + (xy 295.3345 92.630046) (xy 295.365261 92.784689) (xy 295.365264 92.784701) (xy 295.425602 92.930372) + (xy 295.425609 92.930385) (xy 295.51321 93.061488) (xy 295.513213 93.061492) (xy 295.624707 93.172986) + (xy 295.624711 93.172989) (xy 295.755814 93.26059) (xy 295.755827 93.260597) (xy 295.851499 93.300225) + (xy 295.901503 93.320937) (xy 296.056153 93.351699) (xy 296.056156 93.3517) (xy 296.056158 93.3517) + (xy 296.213844 93.3517) (xy 296.213845 93.351699) (xy 296.368497 93.320937) (xy 296.514179 93.260594) + (xy 296.645289 93.172989) (xy 296.756789 93.061489) (xy 296.785287 93.018839) (xy 296.809398 92.982755) + (xy 296.86301 92.937949) (xy 296.932335 92.929242) (xy 296.995362 92.959396) (xy 297.032082 93.018839) + (xy 297.0365 93.051645) (xy 297.0365 103.084747) (xy 297.0365 103.175253) (xy 297.066045 103.246581) + (xy 297.071136 103.25887) (xy 303.282685 109.470418) (xy 303.31617 109.531741) (xy 303.311186 109.601433) + (xy 303.269314 109.657366) (xy 303.20385 109.681783) (xy 303.14202 109.669677) (xy 303.141933 109.66989) + (xy 303.140882 109.669454) (xy 303.140168 109.669315) (xy 303.138188 109.668338) (xy 302.877743 109.560459) + (xy 302.605439 109.487495) (xy 302.325958 109.4507) (xy 302.325951 109.4507) (xy 302.044049 109.4507) + (xy 302.044041 109.4507) (xy 301.76456 109.487495) (xy 301.492256 109.560459) (xy 301.23182 109.668335) + (xy 301.231809 109.66834) (xy 300.98769 109.809283) (xy 300.987684 109.809287) (xy 300.987683 109.809288) + (xy 300.940169 109.845747) (xy 300.764029 109.980904) (xy 300.564704 110.180229) (xy 300.451381 110.327914) + (xy 300.404327 110.389237) (xy 300.393089 110.403882) (xy 300.393083 110.40389) (xy 300.25214 110.648009) + (xy 300.252135 110.64802) (xy 300.144259 110.908456) (xy 300.071295 111.18076) (xy 300.0345 111.460241) + (xy 300.0345 111.742158) (xy 300.071295 112.021639) (xy 300.144259 112.293943) (xy 300.252135 112.554379) + (xy 300.25214 112.55439) (xy 300.393083 112.798509) (xy 300.393088 112.798517) (xy 300.511074 112.952278) + (xy 300.564704 113.02217) (xy 300.764029 113.221495) (xy 300.764033 113.221498) (xy 300.764035 113.2215) + (xy 300.987683 113.393112) (xy 300.98769 113.393116) (xy 301.231809 113.534059) (xy 301.231814 113.534061) + (xy 301.231817 113.534063) (xy 301.339834 113.578805) (xy 301.457486 113.627538) (xy 301.492261 113.641942) + (xy 301.764558 113.714904) (xy 302.044049 113.7517) (xy 302.044056 113.7517) (xy 302.325944 113.7517) + (xy 302.325951 113.7517) (xy 302.605442 113.714904) (xy 302.877739 113.641942) (xy 303.138183 113.534063) + (xy 303.382317 113.393112) (xy 303.605965 113.2215) (xy 303.8053 113.022165) (xy 303.976912 112.798517) + (xy 304.117863 112.554383) (xy 304.225742 112.293939) (xy 304.298704 112.021642) (xy 304.3355 111.742151) + (xy 304.3355 111.460249) (xy 304.298704 111.180758) (xy 304.225742 110.908461) (xy 304.21876 110.891606) + (xy 304.186135 110.812841) (xy 304.117863 110.648017) (xy 304.117862 110.648015) (xy 304.116888 110.646039) + (xy 304.116774 110.645388) (xy 304.11631 110.644267) (xy 304.116561 110.644163) (xy 304.104891 110.577207) + (xy 304.132013 110.512816) (xy 304.189641 110.47331) (xy 304.25948 110.471231) (xy 304.315781 110.503514) + (xy 304.969503 111.157236) (xy 305.002988 111.218559) (xy 304.998004 111.288251) (xy 304.996384 111.292368) + (xy 304.965263 111.367503) (xy 304.965261 111.36751) (xy 304.9345 111.522153) (xy 304.9345 111.679846) + (xy 304.965261 111.834489) (xy 304.965264 111.834501) (xy 305.025602 111.980172) (xy 305.025609 111.980185) + (xy 305.11321 112.111288) (xy 305.113213 112.111292) (xy 305.224707 112.222786) (xy 305.224711 112.222789) + (xy 305.355814 112.31039) (xy 305.355827 112.310397) (xy 305.501498 112.370735) (xy 305.501503 112.370737) + (xy 305.656153 112.401499) (xy 305.656156 112.4015) (xy 305.656158 112.4015) (xy 305.813844 112.4015) + (xy 305.813845 112.401499) (xy 305.968497 112.370737) (xy 306.114179 112.310394) (xy 306.245289 112.222789) + (xy 306.356789 112.111289) (xy 306.394117 112.055422) (xy 306.447728 112.010619) (xy 306.517053 112.00191) + (xy 306.580081 112.032065) (xy 306.5849 112.036633) (xy 322.140181 127.591914) (xy 322.173666 127.653237) + (xy 322.1765 127.679595) (xy 322.1765 129.795924) (xy 322.156815 129.862963) (xy 322.104011 129.908718) + (xy 322.099953 129.910485) (xy 322.024824 129.941604) (xy 322.024814 129.941609) (xy 321.893711 130.02921) + (xy 321.893707 130.029213) (xy 321.782213 130.140707) (xy 321.78221 130.140711) (xy 321.694609 130.271814) + (xy 321.694602 130.271827) (xy 321.634264 130.417498) (xy 321.634261 130.41751) (xy 321.6035 130.572153) + (xy 321.6035 130.729846) (xy 321.634261 130.884489) (xy 321.634264 130.884501) (xy 321.694602 131.030172) + (xy 321.694609 131.030185) (xy 321.78221 131.161288) (xy 321.782213 131.161292) (xy 321.893707 131.272786) + (xy 321.893711 131.272789) (xy 322.024814 131.36039) (xy 322.024827 131.360397) (xy 322.166679 131.419153) + (xy 322.170503 131.420737) (xy 322.325153 131.451499) (xy 322.325156 131.4515) (xy 322.325158 131.4515) + (xy 322.482844 131.4515) (xy 322.482845 131.451499) (xy 322.637497 131.420737) (xy 322.783179 131.360394) + (xy 322.914289 131.272789) (xy 322.958377 131.228701) (xy 323.018819 131.16826) (xy 323.080142 131.134775) + (xy 323.149834 131.139759) (xy 323.205767 131.181631) (xy 323.230184 131.247095) (xy 323.2305 131.255941) + (xy 323.2305 140.943404) (xy 323.210815 141.010443) (xy 323.194181 141.031085) (xy 319.135267 145.09) + (xy 315.131132 149.094135) (xy 315.067135 149.158132) (xy 315.056528 149.18374) (xy 315.0325 149.241746) + (xy 315.0325 167.895924) (xy 315.012815 167.962963) (xy 314.960011 168.008718) (xy 314.955953 168.010485) + (xy 314.880824 168.041604) (xy 314.880814 168.041609) (xy 314.749711 168.12921) (xy 314.749707 168.129213) + (xy 314.638213 168.240707) (xy 314.63821 168.240711) (xy 314.550609 168.371814) (xy 314.550603 168.371826) + (xy 314.490264 168.517498) (xy 314.490261 168.51751) (xy 314.4595 168.672153) (xy 314.4595 168.829846) + (xy 314.490261 168.984489) (xy 314.490264 168.984501) (xy 314.550602 169.130172) (xy 314.550609 169.130185) + (xy 314.63821 169.261288) (xy 314.638213 169.261292) (xy 314.749707 169.372786) (xy 314.749711 169.372789) + (xy 314.880814 169.46039) (xy 314.880827 169.460397) (xy 314.984063 169.503158) (xy 315.026503 169.520737) + (xy 315.181153 169.551499) (xy 315.181156 169.5515) (xy 315.181158 169.5515) (xy 315.338844 169.5515) + (xy 315.338845 169.551499) (xy 315.493497 169.520737) (xy 315.639179 169.460394) (xy 315.770289 169.372789) + (xy 315.881789 169.261289) (xy 315.969394 169.130179) (xy 315.973443 169.120405) (xy 315.983067 169.097166) + (xy 316.029737 168.984497) (xy 316.0605 168.829842) (xy 316.0605 168.672158) (xy 316.0605 168.672155) + (xy 316.060499 168.672153) (xy 316.058699 168.663106) (xy 316.029737 168.517503) (xy 316.020739 168.495779) + (xy 315.969397 168.371826) (xy 315.96939 168.371814) (xy 315.881789 168.240711) (xy 315.881786 168.240707) + (xy 315.770292 168.129213) (xy 315.770288 168.12921) (xy 315.639185 168.041609) (xy 315.639175 168.041604) + (xy 315.564047 168.010485) (xy 315.509644 167.966644) (xy 315.487579 167.90035) (xy 315.4875 167.895924) + (xy 315.4875 149.432595) (xy 315.507185 149.365556) (xy 315.523819 149.344914) (xy 319.566306 145.302427) + (xy 323.613821 141.254912) (xy 323.675142 141.221429) (xy 323.744834 141.226413) (xy 323.800767 141.268285) + (xy 323.825184 141.333749) (xy 323.8255 141.342595) (xy 323.8255 148.902404) (xy 323.805815 148.969443) + (xy 323.789181 148.990085) (xy 321.303762 151.475503) (xy 321.242439 151.508988) (xy 321.172747 151.504004) + (xy 321.168629 151.502383) (xy 321.093501 151.471264) (xy 321.093489 151.471261) (xy 320.938845 151.4405) + (xy 320.938842 151.4405) (xy 320.781158 151.4405) (xy 320.781155 151.4405) (xy 320.62651 151.471261) + (xy 320.626498 151.471264) (xy 320.480827 151.531602) (xy 320.480814 151.531609) (xy 320.349711 151.61921) + (xy 320.349707 151.619213) (xy 320.238213 151.730707) (xy 320.23821 151.730711) (xy 320.150609 151.861814) + (xy 320.150602 151.861827) (xy 320.090264 152.007498) (xy 320.090261 152.00751) (xy 320.0595 152.162153) + (xy 320.0595 152.319846) (xy 320.090261 152.474489) (xy 320.090264 152.474501) (xy 320.150602 152.620172) + (xy 320.150609 152.620185) (xy 320.23821 152.751288) (xy 320.238213 152.751292) (xy 320.349707 152.862786) + (xy 320.349711 152.862789) (xy 320.480814 152.95039) (xy 320.480818 152.950392) (xy 320.480821 152.950394) + (xy 320.555954 152.981515) (xy 320.610356 153.025354) (xy 320.632421 153.091648) (xy 320.6325 153.096075) + (xy 320.6325 170.435924) (xy 320.612815 170.502963) (xy 320.560011 170.548718) (xy 320.555953 170.550485) + (xy 320.480824 170.581604) (xy 320.480814 170.581609) (xy 320.349711 170.66921) (xy 320.349707 170.669213) + (xy 320.238213 170.780707) (xy 320.23821 170.780711) (xy 320.150609 170.911814) (xy 320.150602 170.911827) + (xy 320.090264 171.057498) (xy 320.090261 171.05751) (xy 320.0595 171.212153) (xy 320.0595 171.369846) + (xy 320.090261 171.524489) (xy 320.090264 171.524501) (xy 320.150602 171.670172) (xy 320.150609 171.670185) + (xy 320.23821 171.801288) (xy 320.238213 171.801292) (xy 320.349707 171.912786) (xy 320.349711 171.912789) + (xy 320.480814 172.00039) (xy 320.480827 172.000397) (xy 320.597206 172.048602) (xy 320.626503 172.060737) + (xy 320.756434 172.086582) (xy 320.781153 172.091499) (xy 320.781156 172.0915) (xy 320.781158 172.0915) + (xy 320.938844 172.0915) (xy 320.938845 172.091499) (xy 321.093497 172.060737) (xy 321.239179 172.000394) + (xy 321.370289 171.912789) (xy 321.481789 171.801289) (xy 321.569394 171.670179) (xy 321.600515 171.595045) + (xy 321.644354 171.540644) (xy 321.710648 171.518579) (xy 321.715075 171.5185) (xy 322.162123 171.5185) + (xy 322.229162 171.538185) (xy 322.274917 171.590989) (xy 322.285062 171.626314) (xy 322.296295 171.711638) + (xy 322.296295 171.711641) (xy 322.296296 171.711642) (xy 322.304701 171.743009) (xy 322.369259 171.983943) + (xy 322.477135 172.244379) (xy 322.47714 172.24439) (xy 322.618083 172.488509) (xy 322.618094 172.488525) + (xy 322.748838 172.658914) (xy 322.774032 172.724083) (xy 322.759994 172.792528) (xy 322.71118 172.842517) + (xy 322.706758 172.844884) (xy 322.576313 172.91135) (xy 322.439365 173.010848) (xy 322.43936 173.010852) + (xy 322.319652 173.13056) (xy 322.319648 173.130565) (xy 322.220152 173.267511) (xy 322.143296 173.418346) + (xy 322.090981 173.579352) (xy 322.0645 173.74655) (xy 322.0645 173.915849) (xy 322.090981 174.083047) + (xy 322.143296 174.244053) (xy 322.220152 174.394888) (xy 322.319648 174.531834) (xy 322.319652 174.531839) + (xy 322.43936 174.651547) (xy 322.439365 174.651551) (xy 322.504481 174.69886) (xy 322.576315 174.75105) + (xy 322.672425 174.80002) (xy 322.727146 174.827903) (xy 322.727148 174.827903) (xy 322.727151 174.827905) + (xy 322.81345 174.855945) (xy 322.888152 174.880218) (xy 323.055351 174.9067) (xy 323.055356 174.9067) + (xy 323.224649 174.9067) (xy 323.391847 174.880218) (xy 323.552849 174.827905) (xy 323.703685 174.75105) + (xy 323.840641 174.651546) (xy 323.960346 174.531841) (xy 324.05985 174.394885) (xy 324.136705 174.244049) + (xy 324.189018 174.083047) (xy 324.196131 174.038138) (xy 324.2155 173.915849) (xy 324.2155 173.74655) + (xy 324.189928 173.585098) (xy 324.198882 173.515805) (xy 324.243879 173.462353) (xy 324.31063 173.441713) + (xy 324.312401 173.4417) (xy 324.550944 173.4417) (xy 324.550951 173.4417) (xy 324.830442 173.404904) + (xy 325.102739 173.331942) (xy 325.363183 173.224063) (xy 325.607317 173.083112) (xy 325.830965 172.9115) + (xy 326.0303 172.712165) (xy 326.097992 172.623946) (xy 326.15442 172.582744) (xy 326.224166 172.578589) + (xy 326.285086 172.612801) (xy 326.317839 172.674518) (xy 326.312026 172.744146) (xy 326.303755 172.761433) + (xy 326.247683 172.858551) (xy 326.247675 172.858568) (xy 326.137597 173.124321) (xy 326.063146 173.402176) + (xy 326.025601 173.687361) (xy 326.0256 173.687377) (xy 326.0256 173.975022) (xy 326.025601 173.975038) + (xy 326.063146 174.260223) (xy 326.137597 174.538078) (xy 326.247675 174.803831) (xy 326.247683 174.803848) + (xy 326.391504 175.052951) (xy 326.391515 175.052967) (xy 326.566621 175.281171) (xy 326.566627 175.281178) + (xy 326.770021 175.484572) (xy 326.770028 175.484578) (xy 326.857732 175.551875) (xy 326.998241 175.659691) + (xy 326.998248 175.659695) (xy 327.247351 175.803516) (xy 327.247356 175.803518) (xy 327.247359 175.80352) + (xy 327.247363 175.803521) (xy 327.247368 175.803524) (xy 327.352723 175.847163) (xy 327.51312 175.913602) + (xy 327.790975 175.988053) (xy 328.076171 176.0256) (xy 328.076178 176.0256) (xy 328.363822 176.0256) + (xy 328.363829 176.0256) (xy 328.649025 175.988053) (xy 328.92688 175.913602) (xy 329.192641 175.80352) + (xy 329.441759 175.659691) (xy 329.669973 175.484577) (xy 329.873377 175.281173) (xy 330.048491 175.052959) + (xy 330.19232 174.803841) (xy 330.302402 174.53808) (xy 330.376853 174.260225) (xy 330.4144 173.975029) + (xy 330.4144 173.74655) (xy 332.2245 173.74655) (xy 332.2245 173.915849) (xy 332.250981 174.083047) + (xy 332.303296 174.244053) (xy 332.380152 174.394888) (xy 332.479648 174.531834) (xy 332.479652 174.531839) + (xy 332.59936 174.651547) (xy 332.599365 174.651551) (xy 332.664481 174.69886) (xy 332.736315 174.75105) + (xy 332.832425 174.80002) (xy 332.887146 174.827903) (xy 332.887148 174.827903) (xy 332.887151 174.827905) + (xy 332.97345 174.855945) (xy 333.048152 174.880218) (xy 333.215351 174.9067) (xy 333.215356 174.9067) + (xy 333.384649 174.9067) (xy 333.551847 174.880218) (xy 333.712849 174.827905) (xy 333.863685 174.75105) + (xy 334.000641 174.651546) (xy 334.120346 174.531841) (xy 334.21985 174.394885) (xy 334.296705 174.244049) + (xy 334.349018 174.083047) (xy 334.356131 174.038138) (xy 334.3755 173.915849) (xy 334.3755 173.74655) + (xy 341.1145 173.74655) (xy 341.1145 173.915849) (xy 341.140981 174.083047) (xy 341.193296 174.244053) + (xy 341.270152 174.394888) (xy 341.369648 174.531834) (xy 341.369652 174.531839) (xy 341.48936 174.651547) + (xy 341.489365 174.651551) (xy 341.554481 174.69886) (xy 341.626315 174.75105) (xy 341.722425 174.80002) + (xy 341.777146 174.827903) (xy 341.777148 174.827903) (xy 341.777151 174.827905) (xy 341.86345 174.855945) + (xy 341.938152 174.880218) (xy 342.105351 174.9067) (xy 342.105356 174.9067) (xy 342.274649 174.9067) + (xy 342.441847 174.880218) (xy 342.602849 174.827905) (xy 342.753685 174.75105) (xy 342.890641 174.651546) + (xy 343.010346 174.531841) (xy 343.10985 174.394885) (xy 343.186705 174.244049) (xy 343.239018 174.083047) + (xy 343.246131 174.038138) (xy 343.2655 173.915849) (xy 343.2655 173.74655) (xy 343.239928 173.585098) + (xy 343.248882 173.515805) (xy 343.293879 173.462353) (xy 343.36063 173.441713) (xy 343.362401 173.4417) + (xy 343.600944 173.4417) (xy 343.600951 173.4417) (xy 343.880442 173.404904) (xy 344.152739 173.331942) + (xy 344.413183 173.224063) (xy 344.657317 173.083112) (xy 344.880965 172.9115) (xy 345.0803 172.712165) + (xy 345.147992 172.623946) (xy 345.20442 172.582744) (xy 345.274166 172.578589) (xy 345.335086 172.612801) + (xy 345.367839 172.674518) (xy 345.362026 172.744146) (xy 345.353755 172.761433) (xy 345.297683 172.858551) + (xy 345.297675 172.858568) (xy 345.187597 173.124321) (xy 345.113146 173.402176) (xy 345.075601 173.687361) + (xy 345.0756 173.687377) (xy 345.0756 173.975022) (xy 345.075601 173.975038) (xy 345.113146 174.260223) + (xy 345.187597 174.538078) (xy 345.297675 174.803831) (xy 345.297683 174.803848) (xy 345.441504 175.052951) + (xy 345.441515 175.052967) (xy 345.616621 175.281171) (xy 345.616627 175.281178) (xy 345.820021 175.484572) + (xy 345.820028 175.484578) (xy 345.907732 175.551875) (xy 346.048241 175.659691) (xy 346.048248 175.659695) + (xy 346.297351 175.803516) (xy 346.297356 175.803518) (xy 346.297359 175.80352) (xy 346.297363 175.803521) + (xy 346.297368 175.803524) (xy 346.402723 175.847163) (xy 346.56312 175.913602) (xy 346.840975 175.988053) + (xy 347.126171 176.0256) (xy 347.126178 176.0256) (xy 347.413822 176.0256) (xy 347.413829 176.0256) + (xy 347.699025 175.988053) (xy 347.97688 175.913602) (xy 348.242641 175.80352) (xy 348.491759 175.659691) + (xy 348.719973 175.484577) (xy 348.923377 175.281173) (xy 349.098491 175.052959) (xy 349.24232 174.803841) + (xy 349.352402 174.53808) (xy 349.426853 174.260225) (xy 349.4644 173.975029) (xy 349.4644 173.74655) + (xy 351.2745 173.74655) (xy 351.2745 173.915849) (xy 351.300981 174.083047) (xy 351.353296 174.244053) + (xy 351.430152 174.394888) (xy 351.529648 174.531834) (xy 351.529652 174.531839) (xy 351.64936 174.651547) + (xy 351.649365 174.651551) (xy 351.714481 174.69886) (xy 351.786315 174.75105) (xy 351.882425 174.80002) + (xy 351.937146 174.827903) (xy 351.937148 174.827903) (xy 351.937151 174.827905) (xy 352.02345 174.855945) + (xy 352.098152 174.880218) (xy 352.265351 174.9067) (xy 352.265356 174.9067) (xy 352.434649 174.9067) + (xy 352.601847 174.880218) (xy 352.762849 174.827905) (xy 352.913685 174.75105) (xy 353.050641 174.651546) + (xy 353.170346 174.531841) (xy 353.26985 174.394885) (xy 353.346705 174.244049) (xy 353.399018 174.083047) + (xy 353.406131 174.038138) (xy 353.4255 173.915849) (xy 353.4255 173.74655) (xy 353.399018 173.579352) + (xy 353.374745 173.50465) (xy 353.346705 173.418351) (xy 353.346703 173.418348) (xy 353.346703 173.418346) + (xy 353.281952 173.291267) (xy 353.26985 173.267515) (xy 353.238281 173.224064) (xy 353.170351 173.130565) + (xy 353.170347 173.13056) (xy 353.050639 173.010852) (xy 353.050634 173.010848) (xy 352.913688 172.911352) + (xy 352.913687 172.911351) (xy 352.913685 172.91135) (xy 352.866002 172.887054) (xy 352.762853 172.834496) + (xy 352.601847 172.782181) (xy 352.434649 172.7557) (xy 352.434644 172.7557) (xy 352.265356 172.7557) + (xy 352.265351 172.7557) (xy 352.098152 172.782181) (xy 351.937146 172.834496) (xy 351.786311 172.911352) + (xy 351.649365 173.010848) (xy 351.64936 173.010852) (xy 351.529652 173.13056) (xy 351.529648 173.130565) + (xy 351.430152 173.267511) (xy 351.353296 173.418346) (xy 351.300981 173.579352) (xy 351.2745 173.74655) + (xy 349.4644 173.74655) (xy 349.4644 173.687371) (xy 349.426853 173.402175) (xy 349.352402 173.12432) + (xy 349.265492 172.9145) (xy 349.242324 172.858568) (xy 349.242316 172.858551) (xy 349.098495 172.609448) + (xy 349.098491 172.609441) (xy 348.99124 172.469668) (xy 348.923378 172.381228) (xy 348.923372 172.381221) + (xy 348.719978 172.177827) (xy 348.719971 172.177821) (xy 348.491767 172.002715) (xy 348.491765 172.002713) + (xy 348.491759 172.002709) (xy 348.491754 172.002706) (xy 348.491751 172.002704) (xy 348.242648 171.858883) + (xy 348.242631 171.858875) (xy 347.976878 171.748797) (xy 347.699023 171.674346) (xy 347.413838 171.636801) + (xy 347.413835 171.6368) (xy 347.413829 171.6368) (xy 347.126171 171.6368) (xy 347.126165 171.6368) + (xy 347.126161 171.636801) (xy 346.840976 171.674346) (xy 346.563121 171.748797) (xy 346.297368 171.858875) + (xy 346.297351 171.858883) (xy 346.048248 172.002704) (xy 346.048232 172.002715) (xy 345.820028 172.177821) + (xy 345.820021 172.177827) (xy 345.616627 172.381221) (xy 345.54543 172.474007) (xy 345.489001 172.515209) + (xy 345.419255 172.519364) (xy 345.358335 172.485151) (xy 345.325583 172.423434) (xy 345.331396 172.353807) + (xy 345.339661 172.336531) (xy 345.392863 172.244383) (xy 345.500742 171.983939) (xy 345.573704 171.711642) + (xy 345.6105 171.432151) (xy 345.6105 171.150249) (xy 345.60923 171.140606) (xy 345.59237 171.012538) + (xy 345.573704 170.870758) (xy 345.500742 170.598461) (xy 345.49376 170.581606) (xy 345.468765 170.521261) + (xy 345.392863 170.338017) (xy 345.392861 170.338014) (xy 345.392859 170.338009) (xy 345.251916 170.09389) + (xy 345.251912 170.093883) (xy 345.0803 169.870235) (xy 345.080298 169.870233) (xy 345.080295 169.870229) + (xy 344.88097 169.670904) (xy 344.855109 169.65106) (xy 344.657317 169.499288) (xy 344.657311 169.499284) + (xy 344.657309 169.499283) (xy 344.41319 169.35834) (xy 344.413179 169.358335) (xy 344.152743 169.250459) + (xy 343.880439 169.177495) (xy 343.600958 169.1407) (xy 343.600951 169.1407) (xy 343.319049 169.1407) + (xy 343.319041 169.1407) (xy 343.03956 169.177495) (xy 342.767256 169.250459) (xy 342.50682 169.358335) + (xy 342.506809 169.35834) (xy 342.26269 169.499283) (xy 342.262684 169.499287) (xy 342.262683 169.499288) + (xy 342.25764 169.503158) (xy 342.039029 169.670904) (xy 341.839704 169.870229) (xy 341.668089 170.093882) + (xy 341.668083 170.09389) (xy 341.52714 170.338009) (xy 341.527135 170.33802) (xy 341.419259 170.598456) + (xy 341.346295 170.87076) (xy 341.3095 171.150241) (xy 341.3095 171.432158) (xy 341.346295 171.711639) + (xy 341.419259 171.983943) (xy 341.527135 172.244379) (xy 341.52714 172.24439) (xy 341.668083 172.488509) + (xy 341.668094 172.488525) (xy 341.798838 172.658914) (xy 341.824032 172.724083) (xy 341.809994 172.792528) + (xy 341.76118 172.842517) (xy 341.756758 172.844884) (xy 341.626313 172.91135) (xy 341.489365 173.010848) + (xy 341.48936 173.010852) (xy 341.369652 173.13056) (xy 341.369648 173.130565) (xy 341.270152 173.267511) + (xy 341.193296 173.418346) (xy 341.140981 173.579352) (xy 341.1145 173.74655) (xy 334.3755 173.74655) + (xy 334.349018 173.579352) (xy 334.324745 173.50465) (xy 334.296705 173.418351) (xy 334.296703 173.418348) + (xy 334.296703 173.418346) (xy 334.231952 173.291267) (xy 334.21985 173.267515) (xy 334.188281 173.224064) + (xy 334.120351 173.130565) (xy 334.120347 173.13056) (xy 334.000639 173.010852) (xy 334.000634 173.010848) + (xy 333.863688 172.911352) (xy 333.863687 172.911351) (xy 333.863685 172.91135) (xy 333.816002 172.887054) + (xy 333.712853 172.834496) (xy 333.551847 172.782181) (xy 333.384649 172.7557) (xy 333.384644 172.7557) + (xy 333.215356 172.7557) (xy 333.215351 172.7557) (xy 333.048152 172.782181) (xy 332.887146 172.834496) + (xy 332.736311 172.911352) (xy 332.599365 173.010848) (xy 332.59936 173.010852) (xy 332.479652 173.13056) + (xy 332.479648 173.130565) (xy 332.380152 173.267511) (xy 332.303296 173.418346) (xy 332.250981 173.579352) + (xy 332.2245 173.74655) (xy 330.4144 173.74655) (xy 330.4144 173.687371) (xy 330.376853 173.402175) + (xy 330.302402 173.12432) (xy 330.215492 172.9145) (xy 330.192324 172.858568) (xy 330.192316 172.858551) + (xy 330.048495 172.609448) (xy 330.048491 172.609441) (xy 329.94124 172.469668) (xy 329.873378 172.381228) + (xy 329.873372 172.381221) (xy 329.669978 172.177827) (xy 329.669971 172.177821) (xy 329.441767 172.002715) + (xy 329.441765 172.002713) (xy 329.441759 172.002709) (xy 329.441754 172.002706) (xy 329.441751 172.002704) + (xy 329.192648 171.858883) (xy 329.192631 171.858875) (xy 328.926878 171.748797) (xy 328.649023 171.674346) + (xy 328.363838 171.636801) (xy 328.363835 171.6368) (xy 328.363829 171.6368) (xy 328.076171 171.6368) + (xy 328.076165 171.6368) (xy 328.076161 171.636801) (xy 327.790976 171.674346) (xy 327.513121 171.748797) + (xy 327.247368 171.858875) (xy 327.247351 171.858883) (xy 326.998248 172.002704) (xy 326.998232 172.002715) + (xy 326.770028 172.177821) (xy 326.770021 172.177827) (xy 326.566627 172.381221) (xy 326.49543 172.474007) + (xy 326.439001 172.515209) (xy 326.369255 172.519364) (xy 326.308335 172.485151) (xy 326.275583 172.423434) + (xy 326.281396 172.353807) (xy 326.289661 172.336531) (xy 326.342863 172.244383) (xy 326.450742 171.983939) + (xy 326.523704 171.711642) (xy 326.5605 171.432151) (xy 326.5605 171.150249) (xy 326.55923 171.140606) + (xy 326.54237 171.012538) (xy 326.523704 170.870758) (xy 326.450742 170.598461) (xy 326.44376 170.581606) + (xy 326.418765 170.521261) (xy 326.342863 170.338017) (xy 326.342861 170.338014) (xy 326.342859 170.338009) + (xy 326.201916 170.09389) (xy 326.201912 170.093883) (xy 326.0303 169.870235) (xy 326.030298 169.870233) + (xy 326.030295 169.870229) (xy 325.83097 169.670904) (xy 325.805109 169.65106) (xy 325.607317 169.499288) + (xy 325.607311 169.499284) (xy 325.607309 169.499283) (xy 325.36319 169.35834) (xy 325.363179 169.358335) + (xy 325.102743 169.250459) (xy 324.830439 169.177495) (xy 324.550958 169.1407) (xy 324.550951 169.1407) + (xy 324.269049 169.1407) (xy 324.269041 169.1407) (xy 323.98956 169.177495) (xy 323.717256 169.250459) + (xy 323.45682 169.358335) (xy 323.456809 169.35834) (xy 323.21269 169.499283) (xy 323.212684 169.499287) + (xy 323.212683 169.499288) (xy 323.20764 169.503158) (xy 322.989029 169.670904) (xy 322.789704 169.870229) + (xy 322.618089 170.093882) (xy 322.618083 170.09389) (xy 322.47714 170.338009) (xy 322.477135 170.33802) + (xy 322.369259 170.598456) (xy 322.296295 170.870761) (xy 322.285115 170.955686) (xy 322.256848 171.019582) + (xy 322.198524 171.058053) (xy 322.162176 171.0635) (xy 321.715075 171.0635) (xy 321.648036 171.043815) + (xy 321.602281 170.991011) (xy 321.600534 170.987) (xy 321.569394 170.911821) (xy 321.569392 170.911818) + (xy 321.56939 170.911814) (xy 321.481789 170.780711) (xy 321.481786 170.780707) (xy 321.370292 170.669213) + (xy 321.370288 170.66921) (xy 321.239185 170.581609) (xy 321.239175 170.581604) (xy 321.164047 170.550485) + (xy 321.109644 170.506644) (xy 321.087579 170.44035) (xy 321.0875 170.435924) (xy 321.0875 168.610241) + (xy 328.6095 168.610241) (xy 328.6095 168.892158) (xy 328.646295 169.171639) (xy 328.719259 169.443943) + (xy 328.827135 169.704379) (xy 328.82714 169.70439) (xy 328.968083 169.948509) (xy 328.968088 169.948517) + (xy 329.130386 170.160027) (xy 329.139704 170.17217) (xy 329.339029 170.371495) (xy 329.339033 170.371498) + (xy 329.339035 170.3715) (xy 329.562683 170.543112) (xy 329.56269 170.543116) (xy 329.806809 170.684059) + (xy 329.806814 170.684061) (xy 329.806817 170.684063) (xy 330.067261 170.791942) (xy 330.339558 170.864904) + (xy 330.619049 170.9017) (xy 330.619056 170.9017) (xy 330.900944 170.9017) (xy 330.900951 170.9017) + (xy 331.180442 170.864904) (xy 331.452739 170.791942) (xy 331.713183 170.684063) (xy 331.957317 170.543112) + (xy 332.180965 170.3715) (xy 332.3803 170.172165) (xy 332.551912 169.948517) (xy 332.692863 169.704383) + (xy 332.800742 169.443939) (xy 332.873704 169.171642) (xy 332.9105 168.892151) (xy 332.9105 168.610249) + (xy 332.90923 168.600606) (xy 332.89829 168.517503) (xy 332.873704 168.330758) (xy 332.800742 168.058461) + (xy 332.79376 168.041606) (xy 332.768765 167.981261) (xy 332.692863 167.798017) (xy 332.692861 167.798014) + (xy 332.692859 167.798009) (xy 332.551916 167.55389) (xy 332.551912 167.553883) (xy 332.3803 167.330235) + (xy 332.380298 167.330233) (xy 332.380295 167.330229) (xy 332.18097 167.130904) (xy 332.180965 167.1309) + (xy 331.957317 166.959288) (xy 331.957311 166.959284) (xy 331.957309 166.959283) (xy 331.71319 166.81834) + (xy 331.713179 166.818335) (xy 331.452743 166.710459) (xy 331.180439 166.637495) (xy 330.900958 166.6007) + (xy 330.900951 166.6007) (xy 330.619049 166.6007) (xy 330.619041 166.6007) (xy 330.33956 166.637495) + (xy 330.067256 166.710459) (xy 329.80682 166.818335) (xy 329.806809 166.81834) (xy 329.56269 166.959283) + (xy 329.562682 166.959289) (xy 329.339029 167.130904) (xy 329.139704 167.330229) (xy 329.093901 167.389921) + (xy 328.979112 167.539517) (xy 328.968089 167.553882) (xy 328.968083 167.55389) (xy 328.82714 167.798009) + (xy 328.827135 167.79802) (xy 328.719259 168.058456) (xy 328.646295 168.33076) (xy 328.6095 168.610241) + (xy 321.0875 168.610241) (xy 321.0875 160.686806) (xy 325.638865 160.686806) (xy 325.656297 160.865233) + (xy 325.656621 160.868542) (xy 325.678772 160.945746) (xy 325.70698 161.044061) (xy 325.78828 161.207563) + (xy 325.788281 161.207565) (xy 325.788283 161.207568) (xy 325.850608 161.290674) (xy 325.897838 161.353652) + (xy 325.897839 161.353653) (xy 325.89784 161.353654) (xy 326.032032 161.477495) (xy 326.186425 161.574997) + (xy 326.316677 161.62721) (xy 326.355914 161.642939) (xy 326.355915 161.642939) (xy 326.355917 161.64294) + (xy 326.534908 161.679079) (xy 326.534902 161.679079) (xy 326.551222 161.679359) (xy 326.717484 161.68222) + (xy 326.897612 161.652258) (xy 326.953107 161.632198) (xy 327.069336 161.590185) (xy 327.069337 161.590183) + (xy 327.06934 161.590183) (xy 327.084375 161.58142) (xy 327.091059 161.577535) (xy 327.09135 161.577457) + (xy 327.119233 161.56116) (xy 327.119351 161.561092) (xy 327.122568 161.560301) (xy 327.181662 161.544299) + (xy 328.662792 161.544299) (xy 328.662914 161.544306) (xy 328.671005 161.544305) (xy 328.671008 161.544306) + (xy 328.703142 161.544302) (xy 328.765704 161.561234) (xy 328.79353 161.577491) (xy 328.793532 161.577491) + (xy 328.79968 161.581083) (xy 328.801335 161.581908) (xy 328.815478 161.59015) (xy 328.9872 161.652221) + (xy 329.167321 161.682182) (xy 329.346998 161.67909) (xy 329.349891 161.679041) (xy 329.528866 161.642905) + (xy 329.528869 161.642903) (xy 329.528874 161.642903) (xy 329.69836 161.574962) (xy 329.852746 161.477463) + (xy 329.866637 161.464644) (xy 329.98693 161.35363) (xy 329.986932 161.353628) (xy 329.986933 161.353627) + (xy 330.096485 161.207547) (xy 330.177784 161.044048) (xy 330.228142 160.868533) (xy 330.245897 160.686803) + (xy 330.23046 160.50486) (xy 330.230458 160.504854) (xy 330.209401 160.427771) (xy 330.182343 160.328718) + (xy 330.174583 160.312549) (xy 330.171496 160.306104) (xy 330.171448 160.305846) (xy 330.155071 160.271819) + (xy 330.154943 160.27103) (xy 330.142902 160.218231) (xy 330.142902 160.218042) (xy 330.142907 160.180808) + (xy 330.142906 160.180804) (xy 330.142907 160.172798) (xy 330.142899 160.17266) (xy 330.142899 158.869378) + (xy 330.145553 158.857712) (xy 330.144519 158.849399) (xy 330.155103 158.815734) (xy 330.161418 158.802576) + (xy 330.161498 158.802487) (xy 330.161468 158.802473) (xy 330.161469 158.802471) (xy 330.171474 158.781674) + (xy 330.171474 158.781668) (xy 330.174855 158.774642) (xy 330.175017 158.774238) (xy 330.182383 158.758891) + (xy 330.2305 158.582742) (xy 330.245937 158.400793) (xy 330.228181 158.219055) (xy 330.17782 158.043534) + (xy 330.096518 157.88003) (xy 330.010127 157.764834) (xy 329.986962 157.733945) (xy 329.963992 157.712747) + (xy 329.852769 157.610104) (xy 329.852766 157.610102) (xy 329.852765 157.610101) (xy 329.852762 157.610099) + (xy 329.698377 157.512601) (xy 329.528887 157.444658) (xy 329.528877 157.444656) (xy 329.349892 157.408518) + (xy 329.349899 157.408518) (xy 329.178194 157.405565) (xy 329.167318 157.405378) (xy 329.167317 157.405378) + (xy 329.167314 157.405378) (xy 328.987197 157.435338) (xy 328.987184 157.435341) (xy 328.815463 157.497413) + (xy 328.800948 157.50587) (xy 328.800863 157.505919) (xy 328.793776 157.51004) (xy 328.79353 157.510108) + (xy 328.765738 157.526344) (xy 328.76549 157.526489) (xy 328.762763 157.527159) (xy 328.703146 157.543296) + (xy 328.662801 157.543293) (xy 328.662697 157.5433) (xy 327.221996 157.5433) (xy 327.213814 157.543298) + (xy 327.213792 157.543293) (xy 327.183865 157.543295) (xy 327.181628 157.543295) (xy 327.181346 157.543212) + (xy 327.119093 157.526362) (xy 327.091271 157.510108) (xy 327.085205 157.506564) (xy 327.083507 157.505717) + (xy 327.076157 157.501434) (xy 327.069321 157.49745) (xy 326.897597 157.435378) (xy 326.897591 157.435377) + (xy 326.717481 157.405419) (xy 326.717478 157.405419) (xy 326.708939 157.405565) (xy 326.534907 157.408559) + (xy 326.355934 157.444694) (xy 326.355923 157.444697) (xy 326.186442 157.512637) (xy 326.186441 157.512637) + (xy 326.032061 157.610132) (xy 326.032058 157.610134) (xy 325.897867 157.733973) (xy 325.788315 157.880054) + (xy 325.70702 158.043544) (xy 325.707019 158.043547) (xy 325.707018 158.04355) (xy 325.681838 158.131306) + (xy 325.656658 158.219065) (xy 325.639811 158.39151) (xy 325.638904 158.400793) (xy 325.640805 158.423202) + (xy 325.653904 158.577606) (xy 325.65434 158.582735) (xy 325.690407 158.714769) (xy 325.702456 158.758878) + (xy 325.70246 158.758888) (xy 325.709698 158.77397) (xy 325.70974 158.774056) (xy 325.713323 158.781538) + (xy 325.713381 158.78184) (xy 325.729736 158.815806) (xy 325.729881 158.8167) (xy 325.741901 158.869369) + (xy 325.741901 160.218222) (xy 325.729707 160.271845) (xy 325.729119 160.273071) (xy 325.729039 160.273238) + (xy 325.710166 160.312437) (xy 325.709842 160.313239) (xy 325.702418 160.32871) (xy 325.654301 160.504854) + (xy 325.654301 160.504856) (xy 325.638865 160.686806) (xy 321.0875 160.686806) (xy 321.0875 153.096075) + (xy 321.107185 153.029036) (xy 321.159989 152.983281) (xy 321.163999 152.981534) (xy 321.239179 152.950394) + (xy 321.370289 152.862789) (xy 321.481789 152.751289) (xy 321.569394 152.620179) (xy 321.629737 152.474497) + (xy 321.6605 152.319842) (xy 321.6605 152.162158) (xy 321.6605 152.162155) (xy 321.660499 152.162153) + (xy 321.629737 152.007503) (xy 321.598614 151.932365) (xy 321.591146 151.862901) (xy 321.62242 151.800422) + (xy 321.625466 151.797265) (xy 322.27922 151.143512) (xy 322.340542 151.110028) (xy 322.410234 151.115012) + (xy 322.466167 151.156884) (xy 322.490584 151.222348) (xy 322.478478 151.284179) (xy 322.47869 151.284267) + (xy 322.478256 151.285314) (xy 322.478116 151.28603) (xy 322.477138 151.288011) (xy 322.369259 151.548456) + (xy 322.296295 151.82076) (xy 322.2595 152.100241) (xy 322.2595 152.382158) (xy 322.296295 152.661639) + (xy 322.369259 152.933943) (xy 322.477135 153.194379) (xy 322.47714 153.19439) (xy 322.618083 153.438509) + (xy 322.618094 153.438525) (xy 322.748838 153.608914) (xy 322.774032 153.674083) (xy 322.759994 153.742528) + (xy 322.71118 153.792517) (xy 322.706758 153.794884) (xy 322.576313 153.86135) (xy 322.439365 153.960848) + (xy 322.43936 153.960852) (xy 322.319652 154.08056) (xy 322.319648 154.080565) (xy 322.220152 154.217511) + (xy 322.143296 154.368346) (xy 322.090981 154.529352) (xy 322.0645 154.69655) (xy 322.0645 154.865849) + (xy 322.090981 155.033047) (xy 322.143296 155.194053) (xy 322.220152 155.344888) (xy 322.319648 155.481834) + (xy 322.319652 155.481839) (xy 322.43936 155.601547) (xy 322.439365 155.601551) (xy 322.558817 155.688337) + (xy 322.576315 155.70105) (xy 322.66159 155.7445) (xy 322.727146 155.777903) (xy 322.727148 155.777903) + (xy 322.727151 155.777905) (xy 322.81345 155.805945) (xy 322.888152 155.830218) (xy 323.055351 155.8567) + (xy 323.055356 155.8567) (xy 323.224649 155.8567) (xy 323.391847 155.830218) (xy 323.434777 155.816269) + (xy 323.552849 155.777905) (xy 323.703685 155.70105) (xy 323.840641 155.601546) (xy 323.960346 155.481841) + (xy 324.05985 155.344885) (xy 324.136705 155.194049) (xy 324.189018 155.033047) (xy 324.2155 154.865849) + (xy 324.2155 154.69655) (xy 324.189928 154.535098) (xy 324.198882 154.465805) (xy 324.243879 154.412353) + (xy 324.31063 154.391713) (xy 324.312401 154.3917) (xy 324.550944 154.3917) (xy 324.550951 154.3917) + (xy 324.830442 154.354904) (xy 325.102739 154.281942) (xy 325.363183 154.174063) (xy 325.607317 154.033112) + (xy 325.830965 153.8615) (xy 326.0303 153.662165) (xy 326.097992 153.573946) (xy 326.15442 153.532744) + (xy 326.224166 153.528589) (xy 326.285086 153.562801) (xy 326.317839 153.624518) (xy 326.312026 153.694146) + (xy 326.303755 153.711433) (xy 326.247683 153.808551) (xy 326.247675 153.808568) (xy 326.137597 154.074321) + (xy 326.063146 154.352176) (xy 326.025601 154.637361) (xy 326.0256 154.637377) (xy 326.0256 154.925022) + (xy 326.025601 154.925038) (xy 326.063146 155.210223) (xy 326.137597 155.488078) (xy 326.247675 155.753831) + (xy 326.247683 155.753848) (xy 326.391504 156.002951) (xy 326.391515 156.002967) (xy 326.566621 156.231171) + (xy 326.566627 156.231178) (xy 326.770021 156.434572) (xy 326.770027 156.434577) (xy 326.998241 156.609691) + (xy 326.998248 156.609695) (xy 327.247351 156.753516) (xy 327.247356 156.753518) (xy 327.247359 156.75352) + (xy 327.247363 156.753521) (xy 327.247368 156.753524) (xy 327.260608 156.759008) (xy 327.51312 156.863602) + (xy 327.790975 156.938053) (xy 328.076171 156.9756) (xy 328.076178 156.9756) (xy 328.363822 156.9756) + (xy 328.363829 156.9756) (xy 328.649025 156.938053) (xy 328.92688 156.863602) (xy 329.192641 156.75352) + (xy 329.441759 156.609691) (xy 329.669973 156.434577) (xy 329.873377 156.231173) (xy 330.048491 156.002959) + (xy 330.19232 155.753841) (xy 330.302402 155.48808) (xy 330.376853 155.210225) (xy 330.4144 154.925029) + (xy 330.4144 154.637371) (xy 330.376853 154.352175) (xy 330.302402 154.07432) (xy 330.19232 153.808559) + (xy 330.192318 153.808556) (xy 330.192316 153.808551) (xy 330.048495 153.559448) (xy 330.048491 153.559441) + (xy 329.944569 153.424007) (xy 329.873378 153.331228) (xy 329.873372 153.331221) (xy 329.669978 153.127827) + (xy 329.669971 153.127821) (xy 329.441767 152.952715) (xy 329.441765 152.952713) (xy 329.441759 152.952709) + (xy 329.441754 152.952706) (xy 329.441751 152.952704) (xy 329.192648 152.808883) (xy 329.192631 152.808875) + (xy 328.926878 152.698797) (xy 328.649023 152.624346) (xy 328.363838 152.586801) (xy 328.363835 152.5868) + (xy 328.363829 152.5868) (xy 328.076171 152.5868) (xy 328.076165 152.5868) (xy 328.076161 152.586801) + (xy 327.790976 152.624346) (xy 327.513121 152.698797) (xy 327.247368 152.808875) (xy 327.247351 152.808883) + (xy 326.998248 152.952704) (xy 326.998232 152.952715) (xy 326.770028 153.127821) (xy 326.770021 153.127827) + (xy 326.566627 153.331221) (xy 326.49543 153.424007) (xy 326.439001 153.465209) (xy 326.369255 153.469364) + (xy 326.308335 153.435151) (xy 326.275583 153.373434) (xy 326.281396 153.303807) (xy 326.289661 153.286531) + (xy 326.342863 153.194383) (xy 326.450742 152.933939) (xy 326.523704 152.661642) (xy 326.5605 152.382151) + (xy 326.5605 152.100249) (xy 326.523704 151.820758) (xy 326.450742 151.548461) (xy 326.44376 151.531606) + (xy 326.418765 151.471261) (xy 326.342863 151.288017) (xy 326.34286 151.288011) (xy 326.342859 151.288009) + (xy 326.201916 151.04389) (xy 326.201912 151.043883) (xy 326.0303 150.820235) (xy 326.030298 150.820233) + (xy 326.030295 150.820229) (xy 325.83097 150.620904) (xy 325.806161 150.601867) (xy 325.607317 150.449288) + (xy 325.607311 150.449284) (xy 325.607309 150.449283) (xy 325.36319 150.30834) (xy 325.363179 150.308335) + (xy 325.102743 150.200459) (xy 324.830439 150.127495) (xy 324.550958 150.0907) (xy 324.550951 150.0907) + (xy 324.269049 150.0907) (xy 324.269041 150.0907) (xy 323.98956 150.127495) (xy 323.717256 150.200459) + (xy 323.456808 150.30834) (xy 323.454823 150.309319) (xy 323.454171 150.309432) (xy 323.453067 150.30989) + (xy 323.452964 150.309642) (xy 323.385989 150.321305) (xy 323.321602 150.294175) (xy 323.282104 150.236541) + (xy 323.280036 150.166702) (xy 323.312312 150.110421) (xy 323.862493 149.560241) (xy 328.6095 149.560241) + (xy 328.6095 149.842158) (xy 328.646295 150.121639) (xy 328.719259 150.393943) (xy 328.827135 150.654379) + (xy 328.82714 150.65439) (xy 328.968083 150.898509) (xy 328.968088 150.898517) (xy 329.130387 151.110028) + (xy 329.139704 151.12217) (xy 329.339029 151.321495) (xy 329.339033 151.321498) (xy 329.339035 151.3215) + (xy 329.562683 151.493112) (xy 329.56269 151.493116) (xy 329.806809 151.634059) (xy 329.806814 151.634061) + (xy 329.806817 151.634063) (xy 330.067261 151.741942) (xy 330.339558 151.814904) (xy 330.619049 151.8517) + (xy 330.619056 151.8517) (xy 330.900944 151.8517) (xy 330.900951 151.8517) (xy 331.180442 151.814904) + (xy 331.452739 151.741942) (xy 331.713183 151.634063) (xy 331.957317 151.493112) (xy 332.180965 151.3215) + (xy 332.3803 151.122165) (xy 332.551912 150.898517) (xy 332.684009 150.669717) (xy 332.692859 150.65439) + (xy 332.692859 150.654389) (xy 332.692863 150.654383) (xy 332.800742 150.393939) (xy 332.873704 150.121642) + (xy 332.9105 149.842151) (xy 332.9105 149.560249) (xy 332.909957 149.556128) (xy 332.89829 149.467503) + (xy 332.873704 149.280758) (xy 332.800742 149.008461) (xy 332.79376 148.991606) (xy 332.768765 148.931261) + (xy 332.692863 148.748017) (xy 332.692861 148.748014) (xy 332.692859 148.748009) (xy 332.551916 148.50389) + (xy 332.551912 148.503883) (xy 332.3803 148.280235) (xy 332.380298 148.280233) (xy 332.380295 148.280229) + (xy 332.18097 148.080904) (xy 332.180965 148.0809) (xy 331.957317 147.909288) (xy 331.957311 147.909284) + (xy 331.957309 147.909283) (xy 331.71319 147.76834) (xy 331.713179 147.768335) (xy 331.452743 147.660459) + (xy 331.180439 147.587495) (xy 330.900958 147.5507) (xy 330.900951 147.5507) (xy 330.619049 147.5507) + (xy 330.619041 147.5507) (xy 330.33956 147.587495) (xy 330.067256 147.660459) (xy 329.80682 147.768335) + (xy 329.806809 147.76834) (xy 329.56269 147.909283) (xy 329.562682 147.909289) (xy 329.339029 148.080904) + (xy 329.139704 148.280229) (xy 328.968089 148.503882) (xy 328.968083 148.50389) (xy 328.82714 148.748009) + (xy 328.827135 148.74802) (xy 328.719259 149.008456) (xy 328.646295 149.28076) (xy 328.6095 149.560241) + (xy 323.862493 149.560241) (xy 324.245866 149.176868) (xy 324.245866 149.176866) (xy 324.245868 149.176865) + (xy 324.269529 149.11974) (xy 324.2805 149.093253) (xy 324.2805 149.002747) (xy 324.2805 143.842377) + (xy 326.02565 143.842377) (xy 326.02565 144.130022) (xy 326.025651 144.130038) (xy 326.063196 144.415223) + (xy 326.137647 144.693078) (xy 326.247725 144.958831) (xy 326.247733 144.958848) (xy 326.391554 145.207951) + (xy 326.391565 145.207967) (xy 326.566671 145.436171) (xy 326.566677 145.436178) (xy 326.770071 145.639572) + (xy 326.770077 145.639577) (xy 326.998291 145.814691) (xy 326.998298 145.814695) (xy 327.247401 145.958516) + (xy 327.247406 145.958518) (xy 327.247409 145.95852) (xy 327.247413 145.958521) (xy 327.247418 145.958524) + (xy 327.352773 146.002163) (xy 327.51317 146.068602) (xy 327.791025 146.143053) (xy 328.076221 146.1806) + (xy 328.076228 146.1806) (xy 328.363872 146.1806) (xy 328.363879 146.1806) (xy 328.649075 146.143053) + (xy 328.92693 146.068602) (xy 329.192691 145.95852) (xy 329.441809 145.814691) (xy 329.670023 145.639577) + (xy 329.873427 145.436173) (xy 330.048541 145.207959) (xy 330.186936 144.968253) (xy 330.192366 144.958848) + (xy 330.192366 144.958847) (xy 330.19237 144.958841) (xy 330.302452 144.69308) (xy 330.376903 144.415225) + (xy 330.41445 144.130029) (xy 330.41445 143.842371) (xy 330.376903 143.557175) (xy 330.302452 143.27932) + (xy 330.233927 143.113886) (xy 330.192374 143.013568) (xy 330.192366 143.013551) (xy 330.052925 142.772035) + (xy 330.048541 142.764441) (xy 329.940843 142.624086) (xy 329.873428 142.536228) (xy 329.873422 142.536221) + (xy 329.670028 142.332827) (xy 329.670021 142.332821) (xy 329.441817 142.157715) (xy 329.441815 142.157713) + (xy 329.441809 142.157709) (xy 329.441804 142.157706) (xy 329.441801 142.157704) (xy 329.192698 142.013883) + (xy 329.192681 142.013875) (xy 328.926928 141.903797) (xy 328.649073 141.829346) (xy 328.363888 141.791801) + (xy 328.363885 141.7918) (xy 328.363879 141.7918) (xy 328.076221 141.7918) (xy 328.076215 141.7918) + (xy 328.076211 141.791801) (xy 327.791026 141.829346) (xy 327.513171 141.903797) (xy 327.247418 142.013875) + (xy 327.247401 142.013883) (xy 326.998298 142.157704) (xy 326.998282 142.157715) (xy 326.770078 142.332821) + (xy 326.770071 142.332827) (xy 326.566677 142.536221) (xy 326.566671 142.536228) (xy 326.391565 142.764432) + (xy 326.391554 142.764448) (xy 326.247733 143.013551) (xy 326.247725 143.013568) (xy 326.137647 143.279321) + (xy 326.063196 143.557176) (xy 326.025651 143.842361) (xy 326.02565 143.842377) (xy 324.2805 143.842377) + (xy 324.2805 128.605768) (xy 325.71955 128.605768) (xy 325.71955 128.886631) (xy 325.750992 129.165694) + (xy 325.750995 129.165712) (xy 325.813489 129.439517) (xy 325.813493 129.439529) (xy 325.90625 129.704611) + (xy 326.028103 129.957642) (xy 326.028618 129.958461) (xy 326.177527 130.195448) (xy 326.352634 130.415025) + (xy 326.551225 130.613616) (xy 326.770802 130.788723) (xy 327.008605 130.938145) (xy 327.261642 131.060001) + (xy 327.373961 131.099303) (xy 327.52672 131.152756) (xy 327.526732 131.15276) (xy 327.800541 131.215255) + (xy 327.800547 131.215255) (xy 327.800555 131.215257) (xy 327.984011 131.235927) (xy 328.079619 131.246699) + (xy 328.079622 131.2467) (xy 328.079625 131.2467) (xy 328.360478 131.2467) (xy 328.360479 131.246699) + (xy 328.503105 131.230629) (xy 328.639544 131.215257) (xy 328.639549 131.215256) (xy 328.639559 131.215255) + (xy 328.913368 131.15276) (xy 329.178458 131.060001) (xy 329.431495 130.938145) (xy 329.669298 130.788723) + (xy 329.888875 130.613616) (xy 330.087466 130.415025) (xy 330.262573 130.195448) (xy 330.411995 129.957645) + (xy 330.533851 129.704608) (xy 330.62661 129.439518) (xy 330.689105 129.165709) (xy 330.689958 129.158145) + (xy 330.712322 128.95965) (xy 330.72055 128.886625) (xy 330.72055 128.605775) (xy 330.705734 128.474277) + (xy 330.689107 128.326705) (xy 330.689104 128.326687) (xy 330.686563 128.315556) (xy 330.62661 128.052882) + (xy 330.533851 127.787792) (xy 330.411995 127.534755) (xy 330.262573 127.296952) (xy 330.087466 127.077375) + (xy 329.888875 126.878784) (xy 329.849356 126.847269) (xy 329.819865 126.82375) (xy 329.669298 126.703677) + (xy 329.431495 126.554255) (xy 329.431492 126.554253) (xy 329.178461 126.4324) (xy 328.913379 126.339643) + (xy 328.913367 126.339639) (xy 328.639562 126.277145) (xy 328.639544 126.277142) (xy 328.360481 126.2457) + (xy 328.360475 126.2457) (xy 328.079625 126.2457) (xy 328.079618 126.2457) (xy 327.800555 126.277142) + (xy 327.800537 126.277145) (xy 327.526732 126.339639) (xy 327.52672 126.339643) (xy 327.261638 126.4324) + (xy 327.008607 126.554253) (xy 326.770803 126.703676) (xy 326.551225 126.878783) (xy 326.352633 127.077375) + (xy 326.177526 127.296953) (xy 326.028103 127.534757) (xy 325.90625 127.787788) (xy 325.813493 128.05287) + (xy 325.813489 128.052882) (xy 325.750995 128.326687) (xy 325.750992 128.326705) (xy 325.71955 128.605768) + (xy 324.2805 128.605768) (xy 324.2805 127.387964) (xy 324.280502 127.351762) (xy 324.2805 127.351757) + (xy 324.2805 127.351747) (xy 324.261758 127.3065) (xy 324.246013 127.268482) (xy 324.245878 127.268148) + (xy 324.245871 127.268138) (xy 324.221989 127.244256) (xy 324.221985 127.244249) (xy 324.221984 127.244251) + (xy 316.361813 119.383092) (xy 316.328332 119.321766) (xy 316.3255 119.295416) (xy 316.3255 116.59655) + (xy 317.302 116.59655) (xy 317.302 116.765849) (xy 317.328481 116.933047) (xy 317.380796 117.094053) + (xy 317.457652 117.244888) (xy 317.557148 117.381834) (xy 317.557151 117.381838) (xy 317.67686 117.501547) + (xy 317.676865 117.501551) (xy 317.756744 117.559586) (xy 317.813815 117.60105) (xy 317.909925 117.65002) + (xy 317.964646 117.677903) (xy 317.964648 117.677903) (xy 317.964651 117.677905) (xy 318.05095 117.705945) + (xy 318.125652 117.730218) (xy 318.292851 117.7567) (xy 318.292856 117.7567) (xy 318.462149 117.7567) + (xy 318.629347 117.730218) (xy 318.790349 117.677905) (xy 318.941185 117.60105) (xy 319.078141 117.501546) + (xy 319.197846 117.381841) (xy 319.197846 117.38184) (xy 319.197849 117.381838) (xy 319.197851 117.381834) + (xy 319.218679 117.353167) (xy 319.29735 117.244885) (xy 319.374205 117.094049) (xy 319.426518 116.933047) + (xy 319.453 116.765849) (xy 319.453 116.59655) (xy 319.427428 116.435098) (xy 319.436382 116.365805) + (xy 319.481379 116.312353) (xy 319.54813 116.291713) (xy 319.549901 116.2917) (xy 319.788444 116.2917) + (xy 319.788451 116.2917) (xy 320.067942 116.254904) (xy 320.340239 116.181942) (xy 320.600683 116.074063) + (xy 320.844817 115.933112) (xy 321.068465 115.7615) (xy 321.2678 115.562165) (xy 321.335492 115.473946) + (xy 321.39192 115.432744) (xy 321.461666 115.428589) (xy 321.522586 115.462801) (xy 321.555339 115.524518) + (xy 321.549526 115.594146) (xy 321.541255 115.611433) (xy 321.485183 115.708551) (xy 321.485175 115.708568) + (xy 321.375097 115.974321) (xy 321.300646 116.252176) (xy 321.263101 116.537361) (xy 321.2631 116.537377) + (xy 321.2631 116.825022) (xy 321.263101 116.825038) (xy 321.300646 117.110223) (xy 321.375097 117.388078) + (xy 321.485175 117.653831) (xy 321.485183 117.653848) (xy 321.629004 117.902951) (xy 321.629015 117.902967) + (xy 321.804121 118.131171) (xy 321.804127 118.131178) (xy 322.007521 118.334572) (xy 322.007527 118.334577) + (xy 322.235741 118.509691) (xy 322.235748 118.509695) (xy 322.484851 118.653516) (xy 322.484856 118.653518) + (xy 322.484859 118.65352) (xy 322.484863 118.653521) (xy 322.484868 118.653524) (xy 322.532308 118.673174) + (xy 322.75062 118.763602) (xy 323.028475 118.838053) (xy 323.313671 118.8756) (xy 323.313678 118.8756) + (xy 323.601322 118.8756) (xy 323.601329 118.8756) (xy 323.886525 118.838053) (xy 324.16438 118.763602) + (xy 324.430141 118.65352) (xy 324.432556 118.652126) (xy 324.546567 118.586301) (xy 324.679259 118.509691) + (xy 324.907473 118.334577) (xy 325.110877 118.131173) (xy 325.285991 117.902959) (xy 325.42982 117.653841) + (xy 325.539902 117.38808) (xy 325.614353 117.110225) (xy 325.6519 116.825029) (xy 325.6519 116.537371) + (xy 325.614353 116.252175) (xy 325.539902 115.97432) (xy 325.452205 115.762601) (xy 325.429824 115.708568) + (xy 325.429816 115.708551) (xy 325.285995 115.459448) (xy 325.285991 115.459441) (xy 325.144573 115.275141) + (xy 325.110878 115.231228) (xy 325.110872 115.231221) (xy 324.907478 115.027827) (xy 324.907471 115.027821) + (xy 324.679267 114.852715) (xy 324.679265 114.852713) (xy 324.679259 114.852709) (xy 324.679254 114.852706) + (xy 324.679251 114.852704) (xy 324.430148 114.708883) (xy 324.430131 114.708875) (xy 324.164378 114.598797) + (xy 323.886523 114.524346) (xy 323.601338 114.486801) (xy 323.601335 114.4868) (xy 323.601329 114.4868) + (xy 323.313671 114.4868) (xy 323.313665 114.4868) (xy 323.313661 114.486801) (xy 323.028476 114.524346) + (xy 322.750621 114.598797) (xy 322.484868 114.708875) (xy 322.484851 114.708883) (xy 322.235748 114.852704) + (xy 322.235732 114.852715) (xy 322.007528 115.027821) (xy 322.007521 115.027827) (xy 321.804127 115.231221) + (xy 321.73293 115.324007) (xy 321.676501 115.365209) (xy 321.606755 115.369364) (xy 321.545835 115.335151) + (xy 321.513083 115.273434) (xy 321.518896 115.203807) (xy 321.527161 115.186531) (xy 321.580363 115.094383) + (xy 321.688242 114.833939) (xy 321.761204 114.561642) (xy 321.798 114.282151) (xy 321.798 114.000249) + (xy 321.761204 113.720758) (xy 321.688242 113.448461) (xy 321.68126 113.431606) (xy 321.656265 113.371261) + (xy 321.580363 113.188017) (xy 321.580361 113.188014) (xy 321.580359 113.188009) (xy 321.439416 112.94389) + (xy 321.439412 112.943883) (xy 321.2678 112.720235) (xy 321.267798 112.720233) (xy 321.267795 112.720229) + (xy 321.06847 112.520904) (xy 321.043661 112.501867) (xy 320.844817 112.349288) (xy 320.844811 112.349284) + (xy 320.844809 112.349283) (xy 320.60069 112.20834) (xy 320.600679 112.208335) (xy 320.340243 112.100459) + (xy 320.067939 112.027495) (xy 319.788458 111.9907) (xy 319.788451 111.9907) (xy 319.506549 111.9907) + (xy 319.506541 111.9907) (xy 319.22706 112.027495) (xy 318.954756 112.100459) (xy 318.69432 112.208335) + (xy 318.694309 112.20834) (xy 318.45019 112.349283) (xy 318.450182 112.349289) (xy 318.226529 112.520904) + (xy 318.027204 112.720229) (xy 317.855589 112.943882) (xy 317.855583 112.94389) (xy 317.71464 113.188009) + (xy 317.714635 113.18802) (xy 317.606759 113.448456) (xy 317.533795 113.72076) (xy 317.497 114.000241) + (xy 317.497 114.282158) (xy 317.533795 114.561639) (xy 317.606759 114.833943) (xy 317.714635 115.094379) + (xy 317.71464 115.09439) (xy 317.855583 115.338509) (xy 317.855594 115.338525) (xy 317.986338 115.508914) + (xy 318.011532 115.574083) (xy 317.997494 115.642528) (xy 317.94868 115.692517) (xy 317.944258 115.694884) + (xy 317.813813 115.76135) (xy 317.676865 115.860848) (xy 317.67686 115.860852) (xy 317.557152 115.98056) + (xy 317.557148 115.980565) (xy 317.457652 116.117511) (xy 317.380796 116.268346) (xy 317.328481 116.429352) + (xy 317.302 116.59655) (xy 316.3255 116.59655) (xy 316.3255 114.996075) (xy 316.345185 114.929036) + (xy 316.397989 114.883281) (xy 316.401999 114.881534) (xy 316.477179 114.850394) (xy 316.608289 114.762789) + (xy 316.719789 114.651289) (xy 316.807394 114.520179) (xy 316.867737 114.374497) (xy 316.8985 114.219842) + (xy 316.8985 114.062158) (xy 316.8985 114.062155) (xy 316.898499 114.062153) (xy 316.886556 114.002113) + (xy 316.867737 113.907503) (xy 316.840278 113.841211) (xy 316.807397 113.761827) (xy 316.80739 113.761814) + (xy 316.719789 113.630711) (xy 316.719786 113.630707) (xy 316.608292 113.519213) (xy 316.608288 113.51921) + (xy 316.477185 113.431609) (xy 316.477172 113.431602) (xy 316.331501 113.371264) (xy 316.331489 113.371261) + (xy 316.176845 113.3405) (xy 316.176842 113.3405) (xy 316.019158 113.3405) (xy 316.019155 113.3405) + (xy 315.86451 113.371261) (xy 315.864498 113.371264) (xy 315.718827 113.431602) (xy 315.718814 113.431609) + (xy 315.587711 113.51921) (xy 315.587707 113.519213) (xy 315.476213 113.630707) (xy 315.47621 113.630711) + (xy 315.388609 113.761814) (xy 315.388607 113.761818) (xy 315.38473 113.771178) (xy 315.357484 113.836954) + (xy 315.313646 113.891356) (xy 315.247352 113.913421) (xy 315.242925 113.9135) (xy 313.324539 113.9135) + (xy 313.2575 113.893815) (xy 313.236882 113.877205) (xy 313.230376 113.870703) (xy 312.246249 112.887108) + (xy 311.598843 112.240053) (xy 311.565341 112.178739) (xy 311.5625 112.152348) (xy 311.5625 102.769153) + (xy 313.4895 102.769153) (xy 313.4895 102.926846) (xy 313.520261 103.081489) (xy 313.520264 103.081501) + (xy 313.580602 103.227172) (xy 313.580609 103.227185) (xy 313.66821 103.358288) (xy 313.668213 103.358292) + (xy 313.779707 103.469786) (xy 313.779711 103.469789) (xy 313.910814 103.55739) (xy 313.910827 103.557397) + (xy 314.056498 103.617735) (xy 314.056503 103.617737) (xy 314.211153 103.648499) (xy 314.211156 103.6485) + (xy 314.211158 103.6485) (xy 314.368843 103.6485) (xy 314.38525 103.645236) (xy 314.427308 103.63687) + (xy 314.496899 103.643097) (xy 314.552077 103.685959) (xy 314.575322 103.751848) (xy 314.5755 103.758487) + (xy 314.5755 104.854924) (xy 314.555815 104.921963) (xy 314.503011 104.967718) (xy 314.498953 104.969485) + (xy 314.423824 105.000604) (xy 314.423814 105.000609) (xy 314.292711 105.08821) (xy 314.292707 105.088213) + (xy 314.181213 105.199707) (xy 314.18121 105.199711) (xy 314.093609 105.330814) (xy 314.093602 105.330827) + (xy 314.033264 105.476498) (xy 314.033261 105.47651) (xy 314.0025 105.631153) (xy 314.0025 105.788846) + (xy 314.033261 105.943489) (xy 314.033264 105.943501) (xy 314.093602 106.089172) (xy 314.093609 106.089185) + (xy 314.18121 106.220288) (xy 314.181213 106.220292) (xy 314.292707 106.331786) (xy 314.292711 106.331789) + (xy 314.423814 106.41939) (xy 314.423827 106.419397) (xy 314.560399 106.475966) (xy 314.569503 106.479737) + (xy 314.686881 106.503085) (xy 314.724153 106.510499) (xy 314.724156 106.5105) (xy 314.724158 106.5105) + (xy 314.881844 106.5105) (xy 314.881845 106.510499) (xy 315.036497 106.479737) (xy 315.182179 106.419394) + (xy 315.313289 106.331789) (xy 315.424789 106.220289) (xy 315.512394 106.089179) (xy 315.572737 105.943497) + (xy 315.6035 105.788842) (xy 315.6035 105.631158) (xy 315.6035 105.631155) (xy 315.603499 105.631153) + (xy 315.594616 105.586495) (xy 315.572737 105.476503) (xy 315.545693 105.411213) (xy 315.512397 105.330827) + (xy 315.51239 105.330814) (xy 315.424789 105.199711) (xy 315.424786 105.199707) (xy 315.313292 105.088213) + (xy 315.313288 105.08821) (xy 315.182185 105.000609) (xy 315.182175 105.000604) (xy 315.107047 104.969485) + (xy 315.052644 104.925644) (xy 315.030579 104.85935) (xy 315.0305 104.854924) (xy 315.0305 103.315748) + (xy 315.0305 103.315747) (xy 315.018048 103.285685) (xy 315.016258 103.281365) (xy 315.00879 103.211898) + (xy 315.016257 103.186467) (xy 315.059737 103.081497) (xy 315.0905 102.926842) (xy 315.0905 102.769158) + (xy 315.0905 102.769155) (xy 315.090499 102.769153) (xy 315.081664 102.724737) (xy 315.059737 102.614503) + (xy 315.052592 102.597253) (xy 314.999397 102.468827) (xy 314.99939 102.468814) (xy 314.911789 102.337711) + (xy 314.911786 102.337707) (xy 314.800292 102.226213) (xy 314.800288 102.22621) (xy 314.669185 102.138609) + (xy 314.669172 102.138602) (xy 314.523501 102.078264) (xy 314.523489 102.078261) (xy 314.368845 102.0475) + (xy 314.368842 102.0475) (xy 314.211158 102.0475) (xy 314.211155 102.0475) (xy 314.05651 102.078261) + (xy 314.056498 102.078264) (xy 313.910827 102.138602) (xy 313.910814 102.138609) (xy 313.779711 102.22621) + (xy 313.779707 102.226213) (xy 313.668213 102.337707) (xy 313.66821 102.337711) (xy 313.580609 102.468814) + (xy 313.580602 102.468827) (xy 313.520264 102.614498) (xy 313.520261 102.61451) (xy 313.4895 102.769153) + (xy 311.5625 102.769153) (xy 311.5625 97.54655) (xy 312.5395 97.54655) (xy 312.5395 97.715849) (xy 312.565981 97.883047) + (xy 312.618296 98.044053) (xy 312.695152 98.194888) (xy 312.794648 98.331834) (xy 312.794652 98.331839) + (xy 312.91436 98.451547) (xy 312.914365 98.451551) (xy 312.991373 98.5075) (xy 313.051315 98.55105) + (xy 313.144641 98.598602) (xy 313.202146 98.627903) (xy 313.202148 98.627903) (xy 313.202151 98.627905) + (xy 313.28635 98.655263) (xy 313.363152 98.680218) (xy 313.530351 98.7067) (xy 313.530356 98.7067) + (xy 313.699649 98.7067) (xy 313.866847 98.680218) (xy 314.027849 98.627905) (xy 314.178685 98.55105) + (xy 314.315641 98.451546) (xy 314.435346 98.331841) (xy 314.53485 98.194885) (xy 314.611705 98.044049) + (xy 314.664018 97.883047) (xy 314.673883 97.820763) (xy 314.6905 97.715849) (xy 314.6905 97.54655) + (xy 314.664928 97.385098) (xy 314.673882 97.315805) (xy 314.718879 97.262353) (xy 314.78563 97.241713) + (xy 314.787401 97.2417) (xy 315.025944 97.2417) (xy 315.025951 97.2417) (xy 315.305442 97.204904) + (xy 315.577739 97.131942) (xy 315.838183 97.024063) (xy 316.082317 96.883112) (xy 316.305965 96.7115) + (xy 316.5053 96.512165) (xy 316.572992 96.423946) (xy 316.62942 96.382744) (xy 316.699166 96.378589) + (xy 316.760086 96.412801) (xy 316.792839 96.474518) (xy 316.787026 96.544146) (xy 316.778755 96.561433) + (xy 316.722683 96.658551) (xy 316.722675 96.658568) (xy 316.612597 96.924321) (xy 316.538146 97.202176) + (xy 316.500601 97.487361) (xy 316.5006 97.487377) (xy 316.5006 97.775022) (xy 316.500601 97.775038) + (xy 316.538146 98.060223) (xy 316.612597 98.338078) (xy 316.722675 98.603831) (xy 316.722683 98.603848) + (xy 316.866504 98.852951) (xy 316.866515 98.852967) (xy 317.041621 99.081171) (xy 317.041627 99.081178) + (xy 317.245021 99.284572) (xy 317.245028 99.284578) (xy 317.378307 99.386846) (xy 317.473241 99.459691) + (xy 317.473248 99.459695) (xy 317.722351 99.603516) (xy 317.722356 99.603518) (xy 317.722359 99.60352) + (xy 317.722363 99.603521) (xy 317.722368 99.603524) (xy 317.764977 99.621173) (xy 317.98812 99.713602) + (xy 318.265975 99.788053) (xy 318.551171 99.8256) (xy 318.551178 99.8256) (xy 318.838822 99.8256) + (xy 318.838829 99.8256) (xy 319.124025 99.788053) (xy 319.40188 99.713602) (xy 319.667641 99.60352) + (xy 319.916759 99.459691) (xy 320.144973 99.284577) (xy 320.348377 99.081173) (xy 320.523491 98.852959) + (xy 320.66732 98.603841) (xy 320.777402 98.33808) (xy 320.851853 98.060225) (xy 320.8894 97.775029) + (xy 320.8894 97.487371) (xy 320.851853 97.202175) (xy 320.777402 96.92432) (xy 320.66732 96.658559) + (xy 320.667318 96.658556) (xy 320.667316 96.658551) (xy 320.523495 96.409448) (xy 320.523491 96.409441) + (xy 320.419569 96.274007) (xy 320.348378 96.181228) (xy 320.348372 96.181221) (xy 320.144978 95.977827) + (xy 320.144971 95.977821) (xy 319.916767 95.802715) (xy 319.916765 95.802713) (xy 319.916759 95.802709) + (xy 319.916754 95.802706) (xy 319.916751 95.802704) (xy 319.667648 95.658883) (xy 319.667631 95.658875) + (xy 319.401878 95.548797) (xy 319.124023 95.474346) (xy 318.838838 95.436801) (xy 318.838835 95.4368) + (xy 318.838829 95.4368) (xy 318.551171 95.4368) (xy 318.551165 95.4368) (xy 318.551161 95.436801) + (xy 318.265976 95.474346) (xy 317.988121 95.548797) (xy 317.722368 95.658875) (xy 317.722351 95.658883) + (xy 317.473248 95.802704) (xy 317.473232 95.802715) (xy 317.245028 95.977821) (xy 317.245021 95.977827) + (xy 317.041627 96.181221) (xy 316.97043 96.274007) (xy 316.914001 96.315209) (xy 316.844255 96.319364) + (xy 316.783335 96.285151) (xy 316.750583 96.223434) (xy 316.756396 96.153807) (xy 316.764661 96.136531) + (xy 316.817863 96.044383) (xy 316.925742 95.783939) (xy 316.998704 95.511642) (xy 317.0355 95.232151) + (xy 317.0355 94.950249) (xy 316.998704 94.670758) (xy 316.925742 94.398461) (xy 316.918842 94.381804) + (xy 316.893849 94.321464) (xy 316.817863 94.138017) (xy 316.817861 94.138014) (xy 316.817859 94.138009) + (xy 316.676916 93.89389) (xy 316.676912 93.893883) (xy 316.5053 93.670235) (xy 316.505298 93.670233) + (xy 316.505295 93.670229) (xy 316.30597 93.470904) (xy 316.281421 93.452067) (xy 316.082317 93.299288) + (xy 316.082311 93.299284) (xy 316.082309 93.299283) (xy 315.83819 93.15834) (xy 315.838179 93.158335) + (xy 315.577743 93.050459) (xy 315.305439 92.977495) (xy 315.025958 92.9407) (xy 315.025951 92.9407) + (xy 314.744049 92.9407) (xy 314.744041 92.9407) (xy 314.46456 92.977495) (xy 314.192256 93.050459) + (xy 313.93182 93.158335) (xy 313.931809 93.15834) (xy 313.68769 93.299283) (xy 313.687684 93.299287) + (xy 313.687683 93.299288) (xy 313.625901 93.346695) (xy 313.464029 93.470904) (xy 313.264704 93.670229) + (xy 313.140814 93.831685) (xy 313.107427 93.875197) (xy 313.093089 93.893882) (xy 313.093083 93.89389) + (xy 312.95214 94.138009) (xy 312.952135 94.13802) (xy 312.844259 94.398456) (xy 312.771295 94.67076) + (xy 312.7345 94.950241) (xy 312.7345 95.232158) (xy 312.771295 95.511639) (xy 312.844259 95.783943) + (xy 312.952135 96.044379) (xy 312.95214 96.04439) (xy 313.093083 96.288509) (xy 313.093094 96.288525) + (xy 313.223838 96.458914) (xy 313.249032 96.524083) (xy 313.234994 96.592528) (xy 313.18618 96.642517) + (xy 313.181758 96.644884) (xy 313.051313 96.71135) (xy 312.914365 96.810848) (xy 312.91436 96.810852) + (xy 312.794652 96.93056) (xy 312.794648 96.930565) (xy 312.695152 97.067511) (xy 312.618296 97.218346) + (xy 312.565981 97.379352) (xy 312.5395 97.54655) (xy 311.5625 97.54655) (xy 311.5625 95.946275) + (xy 311.582185 95.879236) (xy 311.634989 95.833481) (xy 311.638999 95.831734) (xy 311.714179 95.800594) + (xy 311.845289 95.712989) (xy 311.956789 95.601489) (xy 312.044394 95.470379) (xy 312.104737 95.324697) + (xy 312.1355 95.170042) (xy 312.1355 95.012358) (xy 312.1355 95.012355) (xy 312.135499 95.012353) + (xy 312.104738 94.85771) (xy 312.104737 94.857703) (xy 312.104735 94.857698) (xy 312.044397 94.712027) + (xy 312.04439 94.712014) (xy 311.956789 94.580911) (xy 311.956786 94.580907) (xy 311.845292 94.469413) + (xy 311.845288 94.46941) (xy 311.714185 94.381809) (xy 311.714172 94.381802) (xy 311.568501 94.321464) + (xy 311.568489 94.321461) (xy 311.413845 94.2907) (xy 311.413842 94.2907) (xy 311.256158 94.2907) + (xy 311.256155 94.2907) (xy 311.10151 94.321461) (xy 311.101498 94.321464) (xy 310.955827 94.381802) + (xy 310.955814 94.381809) (xy 310.824711 94.46941) (xy 310.824707 94.469413) (xy 310.713213 94.580907) + (xy 310.71321 94.580911) (xy 310.625609 94.712014) (xy 310.625602 94.712027) (xy 310.565264 94.857698) + (xy 310.565261 94.85771) (xy 310.5345 95.012353) (xy 310.5345 95.170046) (xy 310.565261 95.324689) + (xy 310.565264 95.324701) (xy 310.625602 95.470372) (xy 310.625609 95.470385) (xy 310.71321 95.601488) + (xy 310.713213 95.601492) (xy 310.824707 95.712986) (xy 310.824711 95.712989) (xy 310.955814 95.80059) + (xy 310.955818 95.800592) (xy 310.955821 95.800594) (xy 311.030954 95.831715) (xy 311.085356 95.875554) + (xy 311.107421 95.941848) (xy 311.1075 95.946275) (xy 311.1075 112.25278) (xy 311.107488 112.252809) + (xy 311.1075 112.296251) (xy 311.1075 112.343282) (xy 311.107512 112.343313) (xy 311.107513 112.343314) + (xy 311.124705 112.38479) (xy 311.124847 112.385132) (xy 311.142134 112.426868) (xy 311.142167 112.426917) + (xy 311.142169 112.42692) (xy 311.174767 112.4595) (xy 311.206132 112.490865) (xy 311.20616 112.490876) + (xy 313.020659 114.304392) (xy 313.050132 114.333865) (xy 313.050137 114.333867) (xy 313.050176 114.333893) + (xy 313.050184 114.333901) (xy 313.093121 114.351671) (xy 313.093149 114.351694) (xy 313.093153 114.351685) + (xy 313.133747 114.3685) (xy 313.133754 114.3685) (xy 313.133804 114.36851) (xy 313.133809 114.368512) + (xy 313.177241 114.3685) (xy 313.177253 114.3685) (xy 315.242925 114.3685) (xy 315.309964 114.388185) + (xy 315.355719 114.440989) (xy 315.357465 114.444999) (xy 315.388603 114.520172) (xy 315.388607 114.520181) + (xy 315.388609 114.520185) (xy 315.47621 114.651288) (xy 315.476213 114.651292) (xy 315.587707 114.762786) + (xy 315.587711 114.762789) (xy 315.718814 114.85039) (xy 315.718818 114.850392) (xy 315.718821 114.850394) + (xy 315.793954 114.881515) (xy 315.848356 114.925354) (xy 315.870421 114.991648) (xy 315.8705 114.996075) + (xy 315.8705 119.450036) (xy 315.870498 119.486238) (xy 315.8705 119.486242) (xy 315.8705 119.486253) + (xy 315.872459 119.490984) (xy 315.87246 119.490988) (xy 315.882887 119.516158) (xy 315.88664 119.525218) + (xy 315.904068 119.567301) (xy 315.905127 119.569858) (xy 315.90513 119.569863) (xy 315.929009 119.593742) + (xy 315.929013 119.593749) (xy 315.929015 119.593748) (xy 323.6408 127.306501) (xy 323.789187 127.454906) + (xy 323.822668 127.516232) (xy 323.8255 127.542582) (xy 323.8255 127.870404) (xy 323.819262 127.891646) + (xy 323.817683 127.913735) (xy 323.809609 127.92452) (xy 323.805815 127.937443) (xy 323.789083 127.951941) + (xy 323.775812 127.96967) (xy 323.763189 127.974378) (xy 323.753011 127.983198) (xy 323.731095 127.986349) + (xy 323.710348 127.994088) (xy 323.697185 127.991224) (xy 323.683853 127.993142) (xy 323.66371 127.983943) + (xy 323.642075 127.979237) (xy 323.624345 127.965966) (xy 323.620297 127.964117) (xy 323.61382 127.958087) + (xy 323.607674 127.951941) (xy 323.586868 127.931135) (xy 320.976819 125.321086) (xy 320.943334 125.259763) + (xy 320.9405 125.233405) (xy 320.9405 125.202748) (xy 320.940499 125.202744) (xy 320.93362 125.186137) + (xy 320.933619 125.186134) (xy 320.905868 125.119137) (xy 320.905866 125.119132) (xy 302.289819 106.503085) + (xy 302.256334 106.441762) (xy 302.2535 106.415404) (xy 302.2535 105.742377) (xy 304.59435 105.742377) + (xy 304.59435 106.030022) (xy 304.594351 106.030038) (xy 304.631896 106.315223) (xy 304.706347 106.593078) + (xy 304.816425 106.858831) (xy 304.816433 106.858848) (xy 304.960254 107.107951) (xy 304.960265 107.107967) + (xy 305.135371 107.336171) (xy 305.135377 107.336178) (xy 305.338771 107.539572) (xy 305.338777 107.539577) + (xy 305.566991 107.714691) (xy 305.566998 107.714695) (xy 305.816101 107.858516) (xy 305.816106 107.858518) + (xy 305.816109 107.85852) (xy 305.816113 107.858521) (xy 305.816118 107.858524) (xy 305.890619 107.889383) + (xy 306.08187 107.968602) (xy 306.359725 108.043053) (xy 306.644921 108.0806) (xy 306.644928 108.0806) + (xy 306.932572 108.0806) (xy 306.932579 108.0806) (xy 307.217775 108.043053) (xy 307.49563 107.968602) + (xy 307.761391 107.85852) (xy 308.010509 107.714691) (xy 308.238723 107.539577) (xy 308.442127 107.336173) + (xy 308.617241 107.107959) (xy 308.76107 106.858841) (xy 308.871152 106.59308) (xy 308.945603 106.315225) + (xy 308.98315 106.030029) (xy 308.98315 105.742371) (xy 308.945603 105.457175) (xy 308.871152 105.17932) + (xy 308.789942 104.983263) (xy 308.761074 104.913568) (xy 308.761066 104.913551) (xy 308.617245 104.664448) + (xy 308.617241 104.664441) (xy 308.565481 104.596986) (xy 308.442128 104.436228) (xy 308.442122 104.436221) + (xy 308.238728 104.232827) (xy 308.238721 104.232821) (xy 308.010517 104.057715) (xy 308.010515 104.057713) + (xy 308.010509 104.057709) (xy 308.010504 104.057706) (xy 308.010501 104.057704) (xy 307.761398 103.913883) + (xy 307.761381 103.913875) (xy 307.495628 103.803797) (xy 307.217773 103.729346) (xy 306.932588 103.691801) + (xy 306.932585 103.6918) (xy 306.932579 103.6918) (xy 306.644921 103.6918) (xy 306.644915 103.6918) + (xy 306.644911 103.691801) (xy 306.359726 103.729346) (xy 306.081871 103.803797) (xy 305.816118 103.913875) + (xy 305.816101 103.913883) (xy 305.566998 104.057704) (xy 305.566982 104.057715) (xy 305.338778 104.232821) + (xy 305.338771 104.232827) (xy 305.135377 104.436221) (xy 305.135371 104.436228) (xy 304.960265 104.664432) + (xy 304.960254 104.664448) (xy 304.816433 104.913551) (xy 304.816425 104.913568) (xy 304.706347 105.179321) + (xy 304.631896 105.457176) (xy 304.594351 105.742361) (xy 304.59435 105.742377) (xy 302.2535 105.742377) + (xy 302.2535 81.592) (xy 302.273185 81.524961) (xy 302.325989 81.479206) (xy 302.3775 81.468) (xy 308.0575 81.468) + (xy 308.124539 81.487685) (xy 308.170294 81.540489) (xy 308.1815 81.592) (xy 308.1815 81.733646) + (xy 308.212261 81.888289) (xy 308.212264 81.888301) (xy 308.272602 82.033972) (xy 308.272609 82.033985) + (xy 308.36021 82.165088) (xy 308.360213 82.165092) (xy 308.471707 82.276586) (xy 308.471711 82.276589) + (xy 308.602814 82.36419) (xy 308.602827 82.364197) (xy 308.727929 82.416015) (xy 308.748503 82.424537) + (xy 308.903153 82.455299) (xy 308.903156 82.4553) (xy 308.903158 82.4553) (xy 308.9285 82.4553) + (xy 308.995539 82.474985) (xy 309.041294 82.527789) (xy 309.0525 82.5793) (xy 309.0525 89.11999) + (xy 309.032815 89.187029) (xy 308.980011 89.232784) (xy 308.910853 89.242728) (xy 308.847297 89.213703) + (xy 308.831553 89.197303) (xy 308.656166 88.977375) (xy 308.457574 88.778783) (xy 308.381453 88.718079) + (xy 308.237998 88.603677) (xy 308.000195 88.454255) (xy 308.000192 88.454253) (xy 307.747161 88.3324) + (xy 307.482079 88.239643) (xy 307.482067 88.239639) (xy 307.208262 88.177145) (xy 307.208244 88.177142) + (xy 306.929181 88.1457) (xy 306.929175 88.1457) (xy 306.648325 88.1457) (xy 306.648318 88.1457) + (xy 306.369255 88.177142) (xy 306.369237 88.177145) (xy 306.095432 88.239639) (xy 306.09542 88.239643) + (xy 305.830338 88.3324) (xy 305.577307 88.454253) (xy 305.339503 88.603676) (xy 305.119925 88.778783) + (xy 304.921333 88.977375) (xy 304.746226 89.196953) (xy 304.596803 89.434757) (xy 304.47495 89.687788) + (xy 304.382193 89.95287) (xy 304.382189 89.952882) (xy 304.319695 90.226687) (xy 304.319692 90.226705) + (xy 304.28825 90.505768) (xy 304.28825 90.786631) (xy 304.319692 91.065694) (xy 304.319695 91.065712) + (xy 304.382189 91.339517) (xy 304.382193 91.339529) (xy 304.47495 91.604611) (xy 304.596803 91.857642) + (xy 304.597318 91.858461) (xy 304.746227 92.095448) (xy 304.921334 92.315025) (xy 305.119925 92.513616) + (xy 305.339502 92.688723) (xy 305.577305 92.838145) (xy 305.830342 92.960001) (xy 306.001552 93.01991) + (xy 306.09542 93.052756) (xy 306.095432 93.05276) (xy 306.369241 93.115255) (xy 306.369247 93.115255) + (xy 306.369255 93.115257) (xy 306.51263 93.131411) (xy 306.648319 93.146699) (xy 306.648322 93.1467) + (xy 306.648325 93.1467) (xy 306.929178 93.1467) (xy 306.929179 93.146699) (xy 307.071805 93.130629) + (xy 307.208244 93.115257) (xy 307.208249 93.115256) (xy 307.208259 93.115255) (xy 307.482068 93.05276) + (xy 307.747158 92.960001) (xy 308.000195 92.838145) (xy 308.237998 92.688723) (xy 308.457575 92.513616) + (xy 308.656166 92.315025) (xy 308.831273 92.095448) (xy 308.831275 92.095443) (xy 308.831553 92.095096) + (xy 308.888741 92.054956) (xy 308.958553 92.052106) (xy 309.018823 92.087451) (xy 309.050416 92.14977) + (xy 309.0525 92.172409) (xy 309.0525 102.929924) (xy 309.032815 102.996963) (xy 308.980011 103.042718) + (xy 308.975953 103.044485) (xy 308.900824 103.075604) (xy 308.900814 103.075609) (xy 308.769711 103.16321) + (xy 308.769707 103.163213) (xy 308.658213 103.274707) (xy 308.65821 103.274711) (xy 308.570609 103.405814) + (xy 308.570602 103.405827) (xy 308.510264 103.551498) (xy 308.510261 103.55151) (xy 308.4795 103.706153) + (xy 308.4795 103.863846) (xy 308.510261 104.018489) (xy 308.510264 104.018501) (xy 308.570602 104.164172) + (xy 308.570609 104.164185) (xy 308.65821 104.295288) (xy 308.658213 104.295292) (xy 308.769707 104.406786) + (xy 308.769711 104.406789) (xy 308.900814 104.49439) (xy 308.900827 104.494397) (xy 309.023633 104.545264) + (xy 309.046503 104.554737) (xy 309.190822 104.583444) (xy 309.201153 104.585499) (xy 309.201156 104.5855) + (xy 309.201158 104.5855) (xy 309.358844 104.5855) (xy 309.358845 104.585499) (xy 309.513497 104.554737) + (xy 309.628453 104.507121) (xy 309.659172 104.494397) (xy 309.659172 104.494396) (xy 309.659179 104.494394) + (xy 309.790289 104.406789) (xy 309.901789 104.295289) (xy 309.989394 104.164179) (xy 309.991169 104.159895) + (xy 310.015908 104.100167) (xy 310.049737 104.018497) (xy 310.0805 103.863842) (xy 310.0805 103.706158) + (xy 310.0805 103.706155) (xy 310.080499 103.706153) (xy 310.073992 103.673442) (xy 310.049737 103.551503) + (xy 310.042488 103.534003) (xy 309.989397 103.405827) (xy 309.98939 103.405814) (xy 309.901789 103.274711) + (xy 309.901786 103.274707) (xy 309.790292 103.163213) (xy 309.790288 103.16321) (xy 309.659185 103.075609) + (xy 309.659175 103.075604) (xy 309.584047 103.044485) (xy 309.529644 103.000644) (xy 309.507579 102.93435) + (xy 309.5075 102.929924) (xy 309.5075 82.31274) (xy 309.527185 82.245701) (xy 309.543814 82.225063) + (xy 309.603789 82.165089) (xy 309.691394 82.033979) (xy 309.696387 82.021926) (xy 309.729071 81.943018) + (xy 309.751737 81.888297) (xy 309.7825 81.733642) (xy 309.7825 81.575958) (xy 309.7825 81.569866) + (xy 309.78452 81.569866) (xy 309.7958 81.510317) (xy 309.843855 81.459597) (xy 309.879831 81.445621) + (xy 309.924946 81.435806) (xy 309.990409 81.411387) (xy 309.990415 81.411384) (xy 310.040497 81.384035) + (xy 310.116685 81.34243) (xy 310.14587 81.313243) (xy 310.207189 81.279758) (xy 310.276881 81.284739) + (xy 310.299223 81.295741) (xy 310.308381 81.301459) (xy 310.328806 81.319804) (xy 310.349446 81.336435) + (xy 310.393314 81.368067) (xy 310.47431 81.405057) (xy 310.481145 81.409325) (xy 310.486306 81.415126) + (xy 310.503152 81.426822) (xy 312.150261 83.07383) (xy 314.382769 85.306202) (xy 314.399136 85.322569) + (xy 314.399137 85.322569) (xy 314.399138 85.32257) (xy 314.446772 85.342298) (xy 314.478727 85.355535) + (xy 314.482199 85.35712) (xy 314.48257 85.3572) (xy 314.482752 85.3572) (xy 314.482754 85.357201) + (xy 314.512923 85.3572) (xy 317.218397 85.3572) (xy 317.285436 85.376885) (xy 317.306078 85.39352) + (xy 322.332597 90.420377) (xy 322.36608 90.4817) (xy 322.361093 90.551391) (xy 322.31922 90.607324) + (xy 322.253755 90.631738) (xy 322.192031 90.619653) (xy 322.191933 90.61989) (xy 322.19076 90.619404) + (xy 322.190079 90.619271) (xy 322.188189 90.618339) (xy 321.927743 90.510459) (xy 321.655439 90.437495) + (xy 321.375958 90.4007) (xy 321.375951 90.4007) (xy 321.094049 90.4007) (xy 321.094041 90.4007) + (xy 320.81456 90.437495) (xy 320.542256 90.510459) (xy 320.28182 90.618335) (xy 320.281809 90.61834) + (xy 320.03769 90.759283) (xy 320.037684 90.759287) (xy 320.037683 90.759288) (xy 320.002057 90.786625) + (xy 319.814029 90.930904) (xy 319.614704 91.130229) (xy 319.545204 91.220803) (xy 319.454112 91.339517) + (xy 319.443089 91.353882) (xy 319.443083 91.35389) (xy 319.30214 91.598009) (xy 319.302135 91.59802) + (xy 319.194259 91.858456) (xy 319.121295 92.13076) (xy 319.0845 92.410241) (xy 319.0845 92.692158) + (xy 319.121295 92.971639) (xy 319.194259 93.243943) (xy 319.302135 93.504379) (xy 319.30214 93.50439) + (xy 319.443083 93.748509) (xy 319.443088 93.748517) (xy 319.6147 93.972165) (xy 319.614704 93.97217) + (xy 319.814029 94.171495) (xy 319.814033 94.171498) (xy 319.814035 94.1715) (xy 320.037683 94.343112) + (xy 320.03769 94.343116) (xy 320.281809 94.484059) (xy 320.281814 94.484061) (xy 320.281817 94.484063) + (xy 320.542261 94.591942) (xy 320.814558 94.664904) (xy 321.094049 94.7017) (xy 321.094056 94.7017) + (xy 321.375944 94.7017) (xy 321.375951 94.7017) (xy 321.655442 94.664904) (xy 321.927739 94.591942) + (xy 322.188183 94.484063) (xy 322.432317 94.343112) (xy 322.655965 94.1715) (xy 322.8553 93.972165) + (xy 323.026912 93.748517) (xy 323.167863 93.504383) (xy 323.275742 93.243939) (xy 323.348704 92.971642) + (xy 323.3855 92.692151) (xy 323.3855 92.410249) (xy 323.348704 92.130758) (xy 323.275742 91.858461) + (xy 323.268842 91.841804) (xy 323.243849 91.781464) (xy 323.167863 91.598017) (xy 323.167859 91.598011) + (xy 323.167 91.596267) (xy 323.166899 91.59569) (xy 323.16631 91.594267) (xy 323.166628 91.594135) + (xy 323.155005 91.527435) (xy 323.182127 91.463044) (xy 323.239756 91.423538) (xy 323.309594 91.421461) + (xy 323.365897 91.453746) (xy 324.019518 92.107411) (xy 324.053001 92.168735) (xy 324.048014 92.238426) + (xy 324.046398 92.242535) (xy 324.015263 92.317703) (xy 324.015262 92.317706) (xy 324.015262 92.317707) + (xy 324.015261 92.31771) (xy 323.9845 92.472353) (xy 323.9845 92.630046) (xy 324.015261 92.784689) + (xy 324.015264 92.784701) (xy 324.075602 92.930372) (xy 324.075609 92.930385) (xy 324.16321 93.061488) + (xy 324.163213 93.061492) (xy 324.274707 93.172986) (xy 324.274711 93.172989) (xy 324.405814 93.26059) + (xy 324.405827 93.260597) (xy 324.501499 93.300225) (xy 324.551503 93.320937) (xy 324.706153 93.351699) + (xy 324.706156 93.3517) (xy 324.706158 93.3517) (xy 324.863844 93.3517) (xy 324.863845 93.351699) + (xy 324.889004 93.346695) (xy 324.937309 93.337087) (xy 325.0069 93.343314) (xy 325.062077 93.386177) + (xy 325.085322 93.452067) (xy 325.0855 93.458704) (xy 325.0855 97.454715) (xy 325.065815 97.521754) + (xy 325.013011 97.567509) (xy 324.943853 97.577453) (xy 324.880297 97.548428) (xy 324.842523 97.48965) + (xy 324.839027 97.474113) (xy 324.824018 97.379352) (xy 324.779296 97.241713) (xy 324.771705 97.218351) + (xy 324.771703 97.218348) (xy 324.771703 97.218346) (xy 324.727676 97.13194) (xy 324.69485 97.067515) + (xy 324.663281 97.024064) (xy 324.595351 96.930565) (xy 324.595347 96.93056) (xy 324.475639 96.810852) + (xy 324.475634 96.810848) (xy 324.338688 96.711352) (xy 324.338687 96.711351) (xy 324.338685 96.71135) + (xy 324.291582 96.68735) (xy 324.187853 96.634496) (xy 324.026847 96.582181) (xy 323.859649 96.5557) + (xy 323.859644 96.5557) (xy 323.690356 96.5557) (xy 323.690351 96.5557) (xy 323.523152 96.582181) + (xy 323.362146 96.634496) (xy 323.211311 96.711352) (xy 323.074365 96.810848) (xy 323.07436 96.810852) + (xy 322.954652 96.93056) (xy 322.954648 96.930565) (xy 322.855152 97.067511) (xy 322.778296 97.218346) + (xy 322.725981 97.379352) (xy 322.6995 97.54655) (xy 322.6995 97.715849) (xy 322.725981 97.883047) + (xy 322.778296 98.044053) (xy 322.855152 98.194888) (xy 322.954648 98.331834) (xy 322.954652 98.331839) + (xy 323.07436 98.451547) (xy 323.074365 98.451551) (xy 323.151373 98.5075) (xy 323.211315 98.55105) + (xy 323.304641 98.598602) (xy 323.362146 98.627903) (xy 323.362148 98.627903) (xy 323.362151 98.627905) + (xy 323.44635 98.655263) (xy 323.523152 98.680218) (xy 323.690351 98.7067) (xy 323.690356 98.7067) + (xy 323.859649 98.7067) (xy 324.026847 98.680218) (xy 324.187849 98.627905) (xy 324.338685 98.55105) + (xy 324.475641 98.451546) (xy 324.595346 98.331841) (xy 324.69485 98.194885) (xy 324.771705 98.044049) + (xy 324.824018 97.883047) (xy 324.833883 97.820763) (xy 324.839027 97.788286) (xy 324.868956 97.725151) + (xy 324.928268 97.68822) (xy 324.99813 97.689218) (xy 325.056363 97.727828) (xy 325.084477 97.791792) + (xy 325.0855 97.807684) (xy 325.0855 101.03144) (xy 325.065815 101.098479) (xy 325.013011 101.144234) + (xy 324.943853 101.154178) (xy 324.880297 101.125153) (xy 324.842523 101.066375) (xy 324.839883 101.055632) + (xy 324.822785 100.969678) (xy 324.822784 100.969677) (xy 324.822784 100.969673) (xy 324.816274 100.953957) + (xy 324.762444 100.823997) (xy 324.762437 100.823984) (xy 324.674836 100.692881) (xy 324.674833 100.692877) + (xy 324.563339 100.581383) (xy 324.563335 100.58138) (xy 324.432232 100.493779) (xy 324.432219 100.493772) + (xy 324.286548 100.433434) (xy 324.286536 100.433431) (xy 324.131892 100.40267) (xy 324.131889 100.40267) + (xy 323.974205 100.40267) (xy 323.974202 100.40267) (xy 323.819557 100.433431) (xy 323.819545 100.433434) + (xy 323.673874 100.493772) (xy 323.673861 100.493779) (xy 323.542758 100.58138) (xy 323.542754 100.581383) + (xy 323.43126 100.692877) (xy 323.431257 100.692881) (xy 323.343656 100.823984) (xy 323.343649 100.823997) + (xy 323.283311 100.969668) (xy 323.283308 100.96968) (xy 323.252547 101.124323) (xy 323.252547 101.282016) + (xy 323.283308 101.436659) (xy 323.283311 101.436671) (xy 323.31443 101.511799) (xy 323.321899 101.581268) + (xy 323.290623 101.643747) (xy 323.28755 101.646932) (xy 322.298657 102.635826) (xy 322.237334 102.669311) + (xy 322.167643 102.664327) (xy 322.111709 102.622455) (xy 322.106904 102.614902) (xy 322.106779 102.614986) + (xy 322.015789 102.478811) (xy 322.015786 102.478807) (xy 321.904292 102.367313) (xy 321.904288 102.36731) + (xy 321.773185 102.279709) (xy 321.773172 102.279702) (xy 321.627501 102.219364) (xy 321.627489 102.219361) + (xy 321.472845 102.1886) (xy 321.472842 102.1886) (xy 321.315158 102.1886) (xy 321.315155 102.1886) + (xy 321.16051 102.219361) (xy 321.160498 102.219364) (xy 321.040951 102.268882) (xy 320.971482 102.276351) + (xy 320.909003 102.245075) (xy 320.873351 102.184986) (xy 320.869499 102.154321) (xy 320.869499 101.564678) + (xy 320.872153 101.553011) (xy 320.871119 101.544699) (xy 320.881702 101.511036) (xy 320.888067 101.497773) + (xy 320.888145 101.497687) (xy 320.888116 101.497673) (xy 320.888117 101.497671) (xy 320.898074 101.476974) + (xy 320.898074 101.476968) (xy 320.901455 101.469942) (xy 320.901617 101.469538) (xy 320.908983 101.454191) + (xy 320.9571 101.278042) (xy 320.972537 101.096093) (xy 320.954781 100.914355) (xy 320.90442 100.738834) + (xy 320.823118 100.57533) (xy 320.736727 100.460134) (xy 320.713562 100.429245) (xy 320.698161 100.415032) + (xy 320.579369 100.305404) (xy 320.579366 100.305402) (xy 320.579365 100.305401) (xy 320.579362 100.305399) + (xy 320.424977 100.207901) (xy 320.255487 100.139958) (xy 320.255477 100.139956) (xy 320.076492 100.103818) + (xy 320.076499 100.103818) (xy 319.904794 100.100865) (xy 319.893918 100.100678) (xy 319.893917 100.100678) + (xy 319.893914 100.100678) (xy 319.713797 100.130638) (xy 319.713784 100.130641) (xy 319.542063 100.192713) + (xy 319.527548 100.20117) (xy 319.527463 100.201219) (xy 319.520376 100.20534) (xy 319.52013 100.205408) + (xy 319.492338 100.221644) (xy 319.49209 100.221789) (xy 319.489363 100.222459) (xy 319.429746 100.238596) + (xy 319.389401 100.238593) (xy 319.389297 100.2386) (xy 317.948596 100.2386) (xy 317.940414 100.238598) + (xy 317.940392 100.238593) (xy 317.910465 100.238595) (xy 317.908228 100.238595) (xy 317.907946 100.238512) + (xy 317.845693 100.221662) (xy 317.817871 100.205408) (xy 317.811805 100.201864) (xy 317.810107 100.201017) + (xy 317.799845 100.195037) (xy 317.795921 100.19275) (xy 317.624197 100.130678) (xy 317.624191 100.130677) + (xy 317.444081 100.100719) (xy 317.444078 100.100719) (xy 317.435539 100.100865) (xy 317.261507 100.103859) + (xy 317.082534 100.139994) (xy 317.082523 100.139997) (xy 316.913042 100.207937) (xy 316.913041 100.207937) + (xy 316.758661 100.305432) (xy 316.758658 100.305434) (xy 316.624467 100.429273) (xy 316.514915 100.575354) + (xy 316.43362 100.738844) (xy 316.433619 100.738847) (xy 316.433618 100.73885) (xy 316.414935 100.803965) + (xy 316.383258 100.914365) (xy 316.36553 101.095827) (xy 316.365504 101.096093) (xy 316.368015 101.125691) + (xy 316.380403 101.271713) (xy 316.38094 101.278035) (xy 316.414028 101.399162) (xy 316.429056 101.454178) + (xy 316.42906 101.454188) (xy 316.436298 101.46927) (xy 316.43634 101.469356) (xy 316.439923 101.476838) + (xy 316.439981 101.47714) (xy 316.456299 101.511029) (xy 316.456336 101.511106) (xy 316.45648 101.511995) + (xy 316.468501 101.564669) (xy 316.468501 102.913522) (xy 316.456307 102.967145) (xy 316.455719 102.968371) + (xy 316.455639 102.968538) (xy 316.436766 103.007737) (xy 316.436442 103.008539) (xy 316.429018 103.02401) + (xy 316.380901 103.200154) (xy 316.380901 103.200156) (xy 316.367776 103.354864) (xy 316.365521 103.381451) + (xy 316.365465 103.382106) (xy 316.38259 103.55739) (xy 316.383221 103.563842) (xy 316.398685 103.617738) + (xy 316.43358 103.739361) (xy 316.51488 103.902863) (xy 316.514881 103.902865) (xy 316.514883 103.902868) + (xy 316.565128 103.969866) (xy 316.624438 104.048952) (xy 316.624439 104.048953) (xy 316.62444 104.048954) + (xy 316.758632 104.172795) (xy 316.913025 104.270297) (xy 317.043267 104.322506) (xy 317.082514 104.338239) + (xy 317.082515 104.338239) (xy 317.082517 104.33824) (xy 317.261508 104.374379) (xy 317.261502 104.374379) + (xy 317.277822 104.374659) (xy 317.444084 104.37752) (xy 317.624212 104.347558) (xy 317.679707 104.327498) + (xy 317.795936 104.285485) (xy 317.795937 104.285483) (xy 317.79594 104.285483) (xy 317.810975 104.27672) + (xy 317.817659 104.272835) (xy 317.81795 104.272757) (xy 317.845833 104.25646) (xy 317.845951 104.256392) + (xy 317.849168 104.255601) (xy 317.908262 104.239599) (xy 319.389392 104.239599) (xy 319.389514 104.239606) + (xy 319.397605 104.239605) (xy 319.397608 104.239606) (xy 319.429742 104.239602) (xy 319.492304 104.256534) + (xy 319.52013 104.272791) (xy 319.520132 104.272791) (xy 319.52628 104.276383) (xy 319.527935 104.277208) + (xy 319.542078 104.28545) (xy 319.7138 104.347521) (xy 319.893921 104.377482) (xy 320.073598 104.37439) + (xy 320.076491 104.374341) (xy 320.255466 104.338205) (xy 320.255469 104.338203) (xy 320.255474 104.338203) + (xy 320.42496 104.270262) (xy 320.579346 104.172763) (xy 320.585998 104.166625) (xy 320.71353 104.04893) + (xy 320.713532 104.048928) (xy 320.713533 104.048927) (xy 320.823085 103.902847) (xy 320.888551 103.771188) + (xy 320.936025 103.719925) (xy 321.003678 103.702466) (xy 321.047033 103.711836) (xy 321.160503 103.758837) + (xy 321.31186 103.788944) (xy 321.315153 103.789599) (xy 321.315156 103.7896) (xy 321.315158 103.7896) + (xy 321.472844 103.7896) (xy 321.472845 103.789599) (xy 321.627497 103.758837) (xy 321.754684 103.706155) + (xy 321.773172 103.698497) (xy 321.773172 103.698496) (xy 321.773179 103.698494) (xy 321.904289 103.610889) + (xy 322.015789 103.499389) (xy 322.103394 103.368279) (xy 322.134515 103.293145) (xy 322.178354 103.238744) + (xy 322.244648 103.216679) (xy 322.249075 103.2166) (xy 322.312369 103.2166) (xy 322.31237 103.2166) + (xy 322.395985 103.181965) (xy 323.609285 101.968663) (xy 323.670606 101.93518) (xy 323.740297 101.940164) + (xy 323.744343 101.941755) (xy 323.81955 101.972907) (xy 323.958198 102.000486) (xy 323.9742 102.003669) + (xy 323.974203 102.00367) (xy 323.974205 102.00367) (xy 324.131891 102.00367) (xy 324.131892 102.003669) + (xy 324.286544 101.972907) (xy 324.432226 101.912564) (xy 324.563336 101.824959) (xy 324.674836 101.713459) + (xy 324.762441 101.582349) (xy 324.763847 101.578956) (xy 324.787974 101.520706) (xy 324.822784 101.436667) + (xy 324.833715 101.381713) (xy 324.839883 101.350708) (xy 324.872268 101.288797) (xy 324.932984 101.254223) + (xy 325.002753 101.257962) (xy 325.059425 101.298829) (xy 325.085006 101.363847) (xy 325.0855 101.374899) + (xy 325.0855 106.941404) (xy 325.065815 107.008443) (xy 325.052979 107.02437) (xy 325.051136 107.027129) + (xy 325.0165 107.110746) (xy 325.0165 107.201253) (xy 325.051136 107.28487) (xy 327.493426 109.727159) + (xy 327.526911 109.788482) (xy 327.521927 109.858174) (xy 327.480055 109.914107) (xy 327.414591 109.938524) + (xy 327.346318 109.923672) (xy 327.330259 109.913216) (xy 327.194825 109.809294) (xy 327.194818 109.809289) + (xy 327.194817 109.809288) (xy 327.194812 109.809285) (xy 327.194809 109.809283) (xy 326.95069 109.66834) + (xy 326.950679 109.668335) (xy 326.690243 109.560459) (xy 326.417939 109.487495) (xy 326.138458 109.4507) + (xy 326.138451 109.4507) (xy 325.856549 109.4507) (xy 325.856541 109.4507) (xy 325.57706 109.487495) + (xy 325.304756 109.560459) (xy 325.04432 109.668335) (xy 325.044309 109.66834) (xy 324.80019 109.809283) + (xy 324.800184 109.809287) (xy 324.800183 109.809288) (xy 324.752669 109.845747) (xy 324.576529 109.980904) + (xy 324.377204 110.180229) (xy 324.263881 110.327914) (xy 324.216827 110.389237) (xy 324.205589 110.403882) + (xy 324.205583 110.40389) (xy 324.06464 110.648009) (xy 324.064635 110.64802) (xy 323.956759 110.908456) + (xy 323.883795 111.18076) (xy 323.847 111.460241) (xy 323.847 111.742158) (xy 323.883795 112.021639) + (xy 323.956759 112.293943) (xy 324.064635 112.554379) (xy 324.06464 112.55439) (xy 324.205583 112.798509) + (xy 324.205588 112.798517) (xy 324.323574 112.952278) (xy 324.377204 113.02217) (xy 324.576529 113.221495) + (xy 324.576533 113.221498) (xy 324.576535 113.2215) (xy 324.800183 113.393112) (xy 324.80019 113.393116) + (xy 325.044309 113.534059) (xy 325.044314 113.534061) (xy 325.044317 113.534063) (xy 325.152334 113.578805) + (xy 325.269986 113.627538) (xy 325.304761 113.641942) (xy 325.369594 113.659313) (xy 325.429254 113.695678) + (xy 325.459783 113.758525) (xy 325.4615 113.779088) (xy 325.4615 113.935846) (xy 325.492261 114.090489) + (xy 325.492264 114.090501) (xy 325.552602 114.236172) (xy 325.552609 114.236185) (xy 325.64021 114.367288) + (xy 325.640213 114.367292) (xy 325.751707 114.478786) (xy 325.751711 114.478789) (xy 325.882814 114.56639) + (xy 325.882818 114.566392) (xy 325.882821 114.566394) (xy 325.957954 114.597515) (xy 326.012356 114.641354) + (xy 326.034421 114.707648) (xy 326.0345 114.712075) (xy 326.0345 118.673174) (xy 326.014815 118.740213) + (xy 325.962011 118.785968) (xy 325.934692 118.794791) (xy 325.781508 118.825261) (xy 325.781498 118.825264) + (xy 325.635827 118.885602) (xy 325.635814 118.885609) (xy 325.504711 118.97321) (xy 325.504707 118.973213) + (xy 325.393213 119.084707) (xy 325.314352 119.20273) (xy 325.260739 119.247534) (xy 325.191414 119.256241) + (xy 325.165112 119.248935) (xy 325.017987 119.189958) (xy 325.017977 119.189956) (xy 324.838992 119.153818) + (xy 324.838999 119.153818) (xy 324.667294 119.150865) (xy 324.656418 119.150678) (xy 324.656417 119.150678) + (xy 324.656414 119.150678) (xy 324.476297 119.180638) (xy 324.476284 119.180641) (xy 324.304563 119.242713) + (xy 324.290048 119.25117) (xy 324.289963 119.251219) (xy 324.282876 119.25534) (xy 324.28263 119.255408) + (xy 324.254838 119.271644) (xy 324.25459 119.271789) (xy 324.251863 119.272459) (xy 324.192246 119.288596) + (xy 324.151901 119.288593) (xy 324.151797 119.2886) (xy 322.711096 119.2886) (xy 322.702914 119.288598) + (xy 322.702892 119.288593) (xy 322.672965 119.288595) (xy 322.670728 119.288595) (xy 322.670446 119.288512) + (xy 322.608193 119.271662) (xy 322.580371 119.255408) (xy 322.574305 119.251864) (xy 322.572607 119.251017) + (xy 322.565257 119.246734) (xy 322.558421 119.24275) (xy 322.386697 119.180678) (xy 322.386691 119.180677) + (xy 322.206581 119.150719) (xy 322.206578 119.150719) (xy 322.198039 119.150865) (xy 322.024007 119.153859) + (xy 321.845034 119.189994) (xy 321.845023 119.189997) (xy 321.675542 119.257937) (xy 321.675541 119.257937) + (xy 321.521161 119.355432) (xy 321.521158 119.355434) (xy 321.386967 119.479273) (xy 321.277415 119.625354) + (xy 321.19612 119.788844) (xy 321.196119 119.788847) (xy 321.196118 119.78885) (xy 321.179245 119.847658) + (xy 321.145758 119.964365) (xy 321.131978 120.105413) (xy 321.128004 120.146093) (xy 321.129183 120.159989) + (xy 321.143279 120.326147) (xy 321.14344 120.328035) (xy 321.168148 120.418484) (xy 321.191556 120.504178) + (xy 321.19156 120.504188) (xy 321.198798 120.51927) (xy 321.19884 120.519356) (xy 321.202423 120.526838) + (xy 321.202481 120.52714) (xy 321.218797 120.561025) (xy 321.218836 120.561106) (xy 321.218981 120.562) + (xy 321.231001 120.614669) (xy 321.231001 121.963522) (xy 321.218807 122.017145) (xy 321.218219 122.018371) + (xy 321.218139 122.018538) (xy 321.199266 122.057737) (xy 321.198942 122.058539) (xy 321.191518 122.07401) + (xy 321.143401 122.250154) (xy 321.143401 122.250156) (xy 321.127965 122.432106) (xy 321.144176 122.598035) + (xy 321.145721 122.613842) (xy 321.165106 122.681404) (xy 321.19608 122.789361) (xy 321.27738 122.952863) + (xy 321.277381 122.952865) (xy 321.277383 122.952868) (xy 321.290466 122.970313) (xy 321.386938 123.098952) + (xy 321.386939 123.098953) (xy 321.38694 123.098954) (xy 321.521132 123.222795) (xy 321.675525 123.320297) + (xy 321.810677 123.374474) (xy 321.845014 123.388239) (xy 321.845015 123.388239) (xy 321.845017 123.38824) + (xy 322.024008 123.424379) (xy 322.024002 123.424379) (xy 322.040322 123.424659) (xy 322.206584 123.42752) + (xy 322.386712 123.397558) (xy 322.493661 123.358899) (xy 322.558436 123.335485) (xy 322.558437 123.335483) + (xy 322.55844 123.335483) (xy 322.573475 123.32672) (xy 322.580159 123.322835) (xy 322.58045 123.322757) + (xy 322.608333 123.30646) (xy 322.608451 123.306392) (xy 322.611668 123.305601) (xy 322.670762 123.289599) + (xy 324.151892 123.289599) (xy 324.152014 123.289606) (xy 324.160105 123.289605) (xy 324.160108 123.289606) + (xy 324.192242 123.289602) (xy 324.254804 123.306534) (xy 324.28263 123.322791) (xy 324.282632 123.322791) + (xy 324.28878 123.326383) (xy 324.290435 123.327208) (xy 324.304578 123.33545) (xy 324.4763 123.397521) + (xy 324.656421 123.427482) (xy 324.836098 123.42439) (xy 324.838991 123.424341) (xy 325.017966 123.388205) + (xy 325.017969 123.388203) (xy 325.017974 123.388203) (xy 325.18746 123.320262) (xy 325.341846 123.222763) + (xy 325.352505 123.212927) (xy 325.47603 123.09893) (xy 325.476032 123.098928) (xy 325.488872 123.081807) + (xy 325.585585 122.952847) (xy 325.666884 122.789348) (xy 325.717242 122.613833) (xy 325.734997 122.432103) + (xy 325.71956 122.25016) (xy 325.719558 122.250154) (xy 325.707992 122.207814) (xy 325.671443 122.074018) + (xy 325.663683 122.057849) (xy 325.660596 122.051404) (xy 325.660548 122.051146) (xy 325.644171 122.017119) + (xy 325.644043 122.01633) (xy 325.632002 121.963531) (xy 325.632002 121.963522) (xy 325.632007 121.926108) + (xy 325.632006 121.926104) (xy 325.632007 121.918098) (xy 325.631999 121.91796) (xy 325.631999 120.614677) + (xy 325.634654 120.603008) (xy 325.63362 120.594694) (xy 325.644205 120.561028) (xy 325.650511 120.54789) + (xy 325.660574 120.526974) (xy 325.660574 120.526969) (xy 325.66396 120.519933) (xy 325.664125 120.519522) + (xy 325.664246 120.51927) (xy 325.671483 120.504191) (xy 325.682828 120.462657) (xy 325.719482 120.403174) + (xy 325.782477 120.372951) (xy 325.826638 120.373715) (xy 325.936155 120.3955) (xy 325.936158 120.3955) + (xy 326.093844 120.3955) (xy 326.093845 120.395499) (xy 326.248497 120.364737) (xy 326.394179 120.304394) + (xy 326.525289 120.216789) (xy 326.636789 120.105289) (xy 326.724394 119.974179) (xy 326.784737 119.828497) + (xy 326.8155 119.673842) (xy 326.8155 119.516158) (xy 326.8155 119.516155) (xy 326.815499 119.516153) + (xy 326.810493 119.490988) (xy 326.784737 119.361503) (xy 326.782211 119.355404) (xy 326.724397 119.215827) + (xy 326.72439 119.215814) (xy 326.636789 119.084711) (xy 326.636786 119.084707) (xy 326.525819 118.97374) + (xy 326.492334 118.912417) (xy 326.4895 118.886059) (xy 326.4895 116.59655) (xy 327.462 116.59655) + (xy 327.462 116.765849) (xy 327.488481 116.933047) (xy 327.540796 117.094053) (xy 327.617652 117.244888) + (xy 327.717148 117.381834) (xy 327.717151 117.381838) (xy 327.83686 117.501547) (xy 327.836865 117.501551) + (xy 327.916744 117.559586) (xy 327.973815 117.60105) (xy 328.069925 117.65002) (xy 328.124646 117.677903) + (xy 328.124648 117.677903) (xy 328.124651 117.677905) (xy 328.21095 117.705945) (xy 328.285652 117.730218) + (xy 328.452851 117.7567) (xy 328.452856 117.7567) (xy 328.622149 117.7567) (xy 328.789347 117.730218) + (xy 328.950349 117.677905) (xy 329.101185 117.60105) (xy 329.238141 117.501546) (xy 329.357846 117.381841) + (xy 329.357846 117.38184) (xy 329.357849 117.381838) (xy 329.357851 117.381834) (xy 329.378679 117.353167) + (xy 329.45735 117.244885) (xy 329.534205 117.094049) (xy 329.586518 116.933047) (xy 329.613 116.765849) + (xy 329.613 116.59655) (xy 329.586518 116.429352) (xy 329.559775 116.347046) (xy 329.534205 116.268351) + (xy 329.534203 116.268348) (xy 329.534203 116.268346) (xy 329.483515 116.168867) (xy 329.45735 116.117515) + (xy 329.425781 116.074064) (xy 329.357851 115.980565) (xy 329.357847 115.98056) (xy 329.238139 115.860852) + (xy 329.238134 115.860848) (xy 329.101188 115.761352) (xy 329.101187 115.761351) (xy 329.101185 115.76135) + (xy 329.051898 115.736237) (xy 328.950353 115.684496) (xy 328.789347 115.632181) (xy 328.622149 115.6057) + (xy 328.622144 115.6057) (xy 328.452856 115.6057) (xy 328.452851 115.6057) (xy 328.285652 115.632181) + (xy 328.124646 115.684496) (xy 327.973811 115.761352) (xy 327.836865 115.860848) (xy 327.83686 115.860852) + (xy 327.717152 115.98056) (xy 327.717148 115.980565) (xy 327.617652 116.117511) (xy 327.540796 116.268346) + (xy 327.488481 116.429352) (xy 327.462 116.59655) (xy 326.4895 116.59655) (xy 326.4895 114.712075) + (xy 326.509185 114.645036) (xy 326.561989 114.599281) (xy 326.565999 114.597534) (xy 326.641179 114.566394) + (xy 326.772289 114.478789) (xy 326.883789 114.367289) (xy 326.971394 114.236179) (xy 327.031737 114.090497) + (xy 327.0625 113.935842) (xy 327.0625 113.778158) (xy 327.0625 113.778155) (xy 327.062499 113.778153) + (xy 327.031739 113.623511) (xy 327.031736 113.623501) (xy 327.027811 113.614025) (xy 327.020342 113.544556) + (xy 327.051618 113.482077) (xy 327.080369 113.459188) (xy 327.194817 113.393112) (xy 327.418465 113.2215) + (xy 327.6178 113.022165) (xy 327.789412 112.798517) (xy 327.930363 112.554383) (xy 328.038242 112.293939) + (xy 328.111204 112.021642) (xy 328.148 111.742151) (xy 328.148 111.460249) (xy 328.111204 111.180758) + (xy 328.038242 110.908461) (xy 328.03126 110.891606) (xy 328.006265 110.831261) (xy 327.930363 110.648017) + (xy 327.930361 110.648014) (xy 327.930359 110.648009) (xy 327.789416 110.40389) (xy 327.789412 110.403883) + (xy 327.758987 110.364233) (xy 327.685483 110.26844) (xy 327.660289 110.203271) (xy 327.674327 110.134826) + (xy 327.723141 110.084837) (xy 327.791233 110.069173) (xy 327.856983 110.09281) (xy 327.87154 110.105273) + (xy 328.826521 111.060254) (xy 328.860006 111.121577) (xy 328.855022 111.191269) (xy 328.84195 111.216815) + (xy 328.838604 111.221822) (xy 328.778264 111.367498) (xy 328.778261 111.36751) (xy 328.7475 111.522153) + (xy 328.7475 111.679846) (xy 328.778261 111.834489) (xy 328.778264 111.834501) (xy 328.838602 111.980172) + (xy 328.838609 111.980185) (xy 328.92621 112.111288) (xy 328.926213 112.111292) (xy 329.037707 112.222786) + (xy 329.037711 112.222789) (xy 329.168814 112.31039) (xy 329.168827 112.310397) (xy 329.314498 112.370735) + (xy 329.314503 112.370737) (xy 329.469153 112.401499) (xy 329.469156 112.4015) (xy 329.469158 112.4015) + (xy 329.626844 112.4015) (xy 329.626845 112.401499) (xy 329.781497 112.370737) (xy 329.927179 112.310394) + (xy 330.058289 112.222789) (xy 330.169789 112.111289) (xy 330.211123 112.049429) (xy 330.264735 112.004624) + (xy 330.33406 111.995917) (xy 330.397088 112.026071) (xy 330.401906 112.030639) (xy 330.933181 112.561914) + (xy 330.966666 112.623237) (xy 330.9695 112.649595) (xy 330.9695 145.806747) (xy 330.9695 145.897253) + (xy 330.991425 145.950185) (xy 331.004136 145.98087) (xy 333.874365 148.851099) (xy 333.90785 148.912422) + (xy 333.902866 148.982114) (xy 333.860994 149.038047) (xy 333.855577 149.041881) (xy 333.799709 149.079211) + (xy 333.688213 149.190707) (xy 333.68821 149.190711) (xy 333.600609 149.321814) (xy 333.600602 149.321827) + (xy 333.540264 149.467498) (xy 333.540261 149.46751) (xy 333.5095 149.622153) (xy 333.5095 149.779846) + (xy 333.540261 149.934489) (xy 333.540264 149.934501) (xy 333.600602 150.080172) (xy 333.600609 150.080185) + (xy 333.68821 150.211288) (xy 333.688213 150.211292) (xy 333.799707 150.322786) (xy 333.799711 150.322789) + (xy 333.930814 150.41039) (xy 333.930827 150.410397) (xy 334.076498 150.470735) (xy 334.076503 150.470737) + (xy 334.231153 150.501499) (xy 334.231156 150.5015) (xy 334.231158 150.5015) (xy 334.388844 150.5015) + (xy 334.388845 150.501499) (xy 334.407658 150.497757) (xy 334.462309 150.486887) (xy 334.5319 150.493114) + (xy 334.587077 150.535977) (xy 334.610322 150.601867) (xy 334.6105 150.608504) (xy 334.6105 154.604715) + (xy 334.590815 154.671754) (xy 334.538011 154.717509) (xy 334.468853 154.727453) (xy 334.405297 154.698428) + (xy 334.367523 154.63965) (xy 334.364027 154.624113) (xy 334.349018 154.529352) (xy 334.322336 154.447236) + (xy 334.296705 154.368351) (xy 334.296703 154.368348) (xy 334.296703 154.368346) (xy 334.265844 154.307783) + (xy 334.21985 154.217515) (xy 334.188281 154.174064) (xy 334.120351 154.080565) (xy 334.120347 154.08056) + (xy 334.000639 153.960852) (xy 334.000634 153.960848) (xy 333.863688 153.861352) (xy 333.863687 153.861351) + (xy 333.863685 153.86135) (xy 333.816582 153.83735) (xy 333.712853 153.784496) (xy 333.551847 153.732181) + (xy 333.384649 153.7057) (xy 333.384644 153.7057) (xy 333.215356 153.7057) (xy 333.215351 153.7057) + (xy 333.048152 153.732181) (xy 332.887146 153.784496) (xy 332.736311 153.861352) (xy 332.599365 153.960848) + (xy 332.59936 153.960852) (xy 332.479652 154.08056) (xy 332.479648 154.080565) (xy 332.380152 154.217511) + (xy 332.303296 154.368346) (xy 332.250981 154.529352) (xy 332.2245 154.69655) (xy 332.2245 154.865849) + (xy 332.250981 155.033047) (xy 332.303296 155.194053) (xy 332.380152 155.344888) (xy 332.479648 155.481834) + (xy 332.479652 155.481839) (xy 332.59936 155.601547) (xy 332.599365 155.601551) (xy 332.718817 155.688337) + (xy 332.736315 155.70105) (xy 332.82159 155.7445) (xy 332.887146 155.777903) (xy 332.887148 155.777903) + (xy 332.887151 155.777905) (xy 332.97345 155.805945) (xy 333.048152 155.830218) (xy 333.215351 155.8567) + (xy 333.215356 155.8567) (xy 333.384649 155.8567) (xy 333.551847 155.830218) (xy 333.594777 155.816269) + (xy 333.712849 155.777905) (xy 333.863685 155.70105) (xy 334.000641 155.601546) (xy 334.120346 155.481841) + (xy 334.21985 155.344885) (xy 334.296705 155.194049) (xy 334.349018 155.033047) (xy 334.364027 154.938286) + (xy 334.393956 154.875151) (xy 334.453268 154.83822) (xy 334.52313 154.839218) (xy 334.581363 154.877828) + (xy 334.609477 154.941792) (xy 334.6105 154.957684) (xy 334.6105 167.843495) (xy 334.590815 167.910534) + (xy 334.538011 167.956289) (xy 334.468853 167.966233) (xy 334.46231 167.965113) (xy 334.388842 167.9505) + (xy 334.231158 167.9505) (xy 334.231155 167.9505) (xy 334.07651 167.981261) (xy 334.076498 167.981264) + (xy 333.930827 168.041602) (xy 333.930814 168.041609) (xy 333.799711 168.12921) (xy 333.799707 168.129213) + (xy 333.688213 168.240707) (xy 333.68821 168.240711) (xy 333.600609 168.371814) (xy 333.600603 168.371826) + (xy 333.540264 168.517498) (xy 333.540261 168.51751) (xy 333.5095 168.672153) (xy 333.5095 168.829846) + (xy 333.540261 168.984489) (xy 333.540264 168.984501) (xy 333.600602 169.130172) (xy 333.600609 169.130185) + (xy 333.68821 169.261288) (xy 333.688213 169.261292) (xy 333.799707 169.372786) (xy 333.799711 169.372789) + (xy 333.930814 169.46039) (xy 333.930827 169.460397) (xy 334.034063 169.503158) (xy 334.076503 169.520737) + (xy 334.231153 169.551499) (xy 334.231156 169.5515) (xy 334.231158 169.5515) (xy 334.388844 169.5515) + (xy 334.388845 169.551499) (xy 334.543497 169.520737) (xy 334.689179 169.460394) (xy 334.820289 169.372789) + (xy 334.931789 169.261289) (xy 335.019394 169.130179) (xy 335.023443 169.120405) (xy 335.033067 169.097166) + (xy 335.079737 168.984497) (xy 335.1105 168.829842) (xy 335.1105 168.672158) (xy 335.1105 168.672155) + (xy 335.110499 168.672153) (xy 335.108699 168.663106) (xy 335.079737 168.517503) (xy 335.040652 168.423144) + (xy 335.033184 168.353676) (xy 335.040653 168.328241) (xy 335.051757 168.301432) (xy 335.0655 168.268253) + (xy 335.0655 168.177747) (xy 335.0655 149.993533) (xy 335.074939 149.94608) (xy 335.077167 149.940701) + (xy 335.079737 149.934497) (xy 335.1105 149.779842) (xy 335.1105 149.622158) (xy 335.1105 149.622155) + (xy 335.110499 149.622153) (xy 335.079738 149.467505) (xy 335.074939 149.45592) (xy 335.0655 149.408466) + (xy 335.0655 148.852748) (xy 335.065499 148.852745) (xy 335.045069 148.803423) (xy 335.045068 148.803419) + (xy 335.030867 148.769135) (xy 335.030866 148.769132) (xy 332.055819 145.794085) (xy 332.022334 145.732762) + (xy 332.0195 145.706404) (xy 332.0195 112.468748) (xy 332.0195 112.468747) (xy 331.984865 112.385132) + (xy 331.920868 112.321135) (xy 330.269957 110.670224) (xy 330.236472 110.608901) (xy 330.241456 110.539209) + (xy 330.283328 110.483276) (xy 330.310182 110.467983) (xy 330.354579 110.449594) (xy 330.485689 110.361989) + (xy 330.597189 110.250489) (xy 330.684794 110.119379) (xy 330.689746 110.107425) (xy 330.730003 110.010233) + (xy 330.745137 109.973697) (xy 330.7759 109.819042) (xy 330.7759 109.661358) (xy 330.7759 109.661355) + (xy 330.775899 109.661353) (xy 330.773094 109.647253) (xy 330.745137 109.506703) (xy 330.737542 109.488367) + (xy 330.684797 109.361027) (xy 330.68479 109.361014) (xy 330.597189 109.229911) (xy 330.597186 109.229907) + (xy 330.485692 109.118413) (xy 330.485688 109.11841) (xy 330.354585 109.030809) (xy 330.354572 109.030802) + (xy 330.208901 108.970464) (xy 330.208889 108.970461) (xy 330.054245 108.9397) (xy 330.054242 108.9397) + (xy 329.896558 108.9397) (xy 329.896555 108.9397) (xy 329.74191 108.970461) (xy 329.741898 108.970464) + (xy 329.596227 109.030802) (xy 329.596214 109.030809) (xy 329.465111 109.11841) (xy 329.465107 109.118413) + (xy 329.353613 109.229907) (xy 329.35361 109.229911) (xy 329.266009 109.361014) (xy 329.266007 109.361019) + (xy 329.266006 109.361021) (xy 329.266004 109.361027) (xy 329.247617 109.405415) (xy 329.203775 109.459818) + (xy 329.137481 109.481882) (xy 329.069781 109.464602) (xy 329.045375 109.445642) (xy 326.697819 107.098086) + (xy 326.664334 107.036763) (xy 326.6615 107.010405) (xy 326.6615 105.742377) (xy 328.40685 105.742377) + (xy 328.40685 106.030022) (xy 328.406851 106.030038) (xy 328.444396 106.315223) (xy 328.518847 106.593078) + (xy 328.628925 106.858831) (xy 328.628933 106.858848) (xy 328.772754 107.107951) (xy 328.772765 107.107967) + (xy 328.947871 107.336171) (xy 328.947877 107.336178) (xy 329.151271 107.539572) (xy 329.151277 107.539577) + (xy 329.379491 107.714691) (xy 329.379498 107.714695) (xy 329.628601 107.858516) (xy 329.628606 107.858518) + (xy 329.628609 107.85852) (xy 329.628613 107.858521) (xy 329.628618 107.858524) (xy 329.703119 107.889383) + (xy 329.89437 107.968602) (xy 330.172225 108.043053) (xy 330.457421 108.0806) (xy 330.457428 108.0806) + (xy 330.745072 108.0806) (xy 330.745079 108.0806) (xy 331.030275 108.043053) (xy 331.30813 107.968602) + (xy 331.573891 107.85852) (xy 331.823009 107.714691) (xy 332.051223 107.539577) (xy 332.254627 107.336173) + (xy 332.429741 107.107959) (xy 332.57357 106.858841) (xy 332.683652 106.59308) (xy 332.758103 106.315225) + (xy 332.79565 106.030029) (xy 332.79565 105.742371) (xy 332.758103 105.457175) (xy 332.683652 105.17932) + (xy 332.602442 104.983263) (xy 332.573574 104.913568) (xy 332.573566 104.913551) (xy 332.429745 104.664448) + (xy 332.429741 104.664441) (xy 332.377981 104.596986) (xy 332.254628 104.436228) (xy 332.254622 104.436221) + (xy 332.051228 104.232827) (xy 332.051221 104.232821) (xy 331.823017 104.057715) (xy 331.823015 104.057713) + (xy 331.823009 104.057709) (xy 331.823004 104.057706) (xy 331.823001 104.057704) (xy 331.573898 103.913883) + (xy 331.573881 103.913875) (xy 331.308128 103.803797) (xy 331.030273 103.729346) (xy 330.745088 103.691801) + (xy 330.745085 103.6918) (xy 330.745079 103.6918) (xy 330.457421 103.6918) (xy 330.457415 103.6918) + (xy 330.457411 103.691801) (xy 330.172226 103.729346) (xy 329.894371 103.803797) (xy 329.628618 103.913875) + (xy 329.628601 103.913883) (xy 329.379498 104.057704) (xy 329.379482 104.057715) (xy 329.151278 104.232821) + (xy 329.151271 104.232827) (xy 328.947877 104.436221) (xy 328.947871 104.436228) (xy 328.772765 104.664432) + (xy 328.772754 104.664448) (xy 328.628933 104.913551) (xy 328.628925 104.913568) (xy 328.518847 105.179321) + (xy 328.444396 105.457176) (xy 328.406851 105.742361) (xy 328.40685 105.742377) (xy 326.6615 105.742377) + (xy 326.6615 95.012353) (xy 339.1095 95.012353) (xy 339.1095 95.170046) (xy 339.140261 95.324689) + (xy 339.140264 95.324701) (xy 339.200602 95.470372) (xy 339.200609 95.470385) (xy 339.28821 95.601488) + (xy 339.288213 95.601492) (xy 339.399707 95.712986) (xy 339.399711 95.712989) (xy 339.530814 95.80059) + (xy 339.530818 95.800592) (xy 339.530821 95.800594) (xy 339.605954 95.831715) (xy 339.660356 95.875554) + (xy 339.682421 95.941848) (xy 339.6825 95.946275) (xy 339.6825 113.285924) (xy 339.662815 113.352963) + (xy 339.610011 113.398718) (xy 339.605953 113.400485) (xy 339.530824 113.431604) (xy 339.530814 113.431609) + (xy 339.399711 113.51921) (xy 339.399707 113.519213) (xy 339.288213 113.630707) (xy 339.28821 113.630711) + (xy 339.200609 113.761814) (xy 339.200602 113.761827) (xy 339.140264 113.907498) (xy 339.140261 113.90751) + (xy 339.1095 114.062153) (xy 339.1095 114.219846) (xy 339.140261 114.374489) (xy 339.140264 114.374501) + (xy 339.200602 114.520172) (xy 339.200609 114.520185) (xy 339.28821 114.651288) (xy 339.288213 114.651292) + (xy 339.399707 114.762786) (xy 339.399711 114.762789) (xy 339.530814 114.85039) (xy 339.530818 114.850392) + (xy 339.530821 114.850394) (xy 339.605954 114.881515) (xy 339.660356 114.925354) (xy 339.682421 114.991648) + (xy 339.6825 114.996075) (xy 339.6825 132.335924) (xy 339.662815 132.402963) (xy 339.610011 132.448718) + (xy 339.605953 132.450485) (xy 339.530824 132.481604) (xy 339.530814 132.481609) (xy 339.399711 132.56921) + (xy 339.399707 132.569213) (xy 339.288213 132.680707) (xy 339.28821 132.680711) (xy 339.200609 132.811814) + (xy 339.200602 132.811827) (xy 339.140264 132.957498) (xy 339.140261 132.95751) (xy 339.1095 133.112153) + (xy 339.1095 133.269846) (xy 339.140261 133.424489) (xy 339.140264 133.424501) (xy 339.200602 133.570172) + (xy 339.200609 133.570185) (xy 339.28821 133.701288) (xy 339.288213 133.701292) (xy 339.399707 133.812786) + (xy 339.399711 133.812789) (xy 339.530814 133.90039) (xy 339.530818 133.900392) (xy 339.530821 133.900394) + (xy 339.605954 133.931515) (xy 339.660356 133.975354) (xy 339.682421 134.041648) (xy 339.6825 134.046075) + (xy 339.6825 151.385924) (xy 339.662815 151.452963) (xy 339.610011 151.498718) (xy 339.605953 151.500485) + (xy 339.530824 151.531604) (xy 339.530814 151.531609) (xy 339.399711 151.61921) (xy 339.399707 151.619213) + (xy 339.288213 151.730707) (xy 339.28821 151.730711) (xy 339.200609 151.861814) (xy 339.200602 151.861827) + (xy 339.140264 152.007498) (xy 339.140261 152.00751) (xy 339.1095 152.162153) (xy 339.1095 152.319846) + (xy 339.140261 152.474489) (xy 339.140264 152.474501) (xy 339.200602 152.620172) (xy 339.200609 152.620185) + (xy 339.28821 152.751288) (xy 339.288213 152.751292) (xy 339.399707 152.862786) (xy 339.399711 152.862789) + (xy 339.530814 152.95039) (xy 339.530818 152.950392) (xy 339.530821 152.950394) (xy 339.605954 152.981515) + (xy 339.660356 153.025354) (xy 339.682421 153.091648) (xy 339.6825 153.096075) (xy 339.6825 170.435924) + (xy 339.662815 170.502963) (xy 339.610011 170.548718) (xy 339.605953 170.550485) (xy 339.530824 170.581604) + (xy 339.530814 170.581609) (xy 339.399711 170.66921) (xy 339.399707 170.669213) (xy 339.288213 170.780707) + (xy 339.28821 170.780711) (xy 339.200609 170.911814) (xy 339.200602 170.911827) (xy 339.140264 171.057498) + (xy 339.140261 171.05751) (xy 339.1095 171.212153) (xy 339.1095 171.369846) (xy 339.140261 171.524489) + (xy 339.140264 171.524501) (xy 339.200602 171.670172) (xy 339.200609 171.670185) (xy 339.28821 171.801288) + (xy 339.288213 171.801292) (xy 339.399707 171.912786) (xy 339.399711 171.912789) (xy 339.530814 172.00039) + (xy 339.530827 172.000397) (xy 339.647206 172.048602) (xy 339.676503 172.060737) (xy 339.806434 172.086582) + (xy 339.831153 172.091499) (xy 339.831156 172.0915) (xy 339.831158 172.0915) (xy 339.988844 172.0915) + (xy 339.988845 172.091499) (xy 340.143497 172.060737) (xy 340.289179 172.000394) (xy 340.420289 171.912789) + (xy 340.531789 171.801289) (xy 340.619394 171.670179) (xy 340.679737 171.524497) (xy 340.7105 171.369842) + (xy 340.7105 171.212158) (xy 340.7105 171.212155) (xy 340.710499 171.212153) (xy 340.708699 171.203106) + (xy 340.679737 171.057503) (xy 340.65467 170.996986) (xy 340.619397 170.911827) (xy 340.61939 170.911814) + (xy 340.531789 170.780711) (xy 340.531786 170.780707) (xy 340.420292 170.669213) (xy 340.420288 170.66921) + (xy 340.289185 170.581609) (xy 340.289175 170.581604) (xy 340.214047 170.550485) (xy 340.159644 170.506644) + (xy 340.137579 170.44035) (xy 340.1375 170.435924) (xy 340.1375 168.610241) (xy 347.6595 168.610241) + (xy 347.6595 168.892158) (xy 347.696295 169.171639) (xy 347.769259 169.443943) (xy 347.877135 169.704379) + (xy 347.87714 169.70439) (xy 348.018083 169.948509) (xy 348.018088 169.948517) (xy 348.180386 170.160027) + (xy 348.189704 170.17217) (xy 348.389029 170.371495) (xy 348.389033 170.371498) (xy 348.389035 170.3715) + (xy 348.612683 170.543112) (xy 348.61269 170.543116) (xy 348.856809 170.684059) (xy 348.856814 170.684061) + (xy 348.856817 170.684063) (xy 349.117261 170.791942) (xy 349.389558 170.864904) (xy 349.669049 170.9017) + (xy 349.669056 170.9017) (xy 349.950944 170.9017) (xy 349.950951 170.9017) (xy 350.230442 170.864904) + (xy 350.502739 170.791942) (xy 350.763183 170.684063) (xy 351.007317 170.543112) (xy 351.230965 170.3715) + (xy 351.4303 170.172165) (xy 351.601912 169.948517) (xy 351.742863 169.704383) (xy 351.850742 169.443939) + (xy 351.923704 169.171642) (xy 351.9605 168.892151) (xy 351.9605 168.610249) (xy 351.95923 168.600606) + (xy 351.94829 168.517503) (xy 351.923704 168.330758) (xy 351.850742 168.058461) (xy 351.84376 168.041606) + (xy 351.818765 167.981261) (xy 351.742863 167.798017) (xy 351.742861 167.798014) (xy 351.742859 167.798009) + (xy 351.601916 167.55389) (xy 351.601912 167.553883) (xy 351.4303 167.330235) (xy 351.430298 167.330233) + (xy 351.430295 167.330229) (xy 351.23097 167.130904) (xy 351.230965 167.1309) (xy 351.007317 166.959288) + (xy 351.007311 166.959284) (xy 351.007309 166.959283) (xy 350.76319 166.81834) (xy 350.763179 166.818335) + (xy 350.502743 166.710459) (xy 350.230439 166.637495) (xy 349.950958 166.6007) (xy 349.950951 166.6007) + (xy 349.669049 166.6007) (xy 349.669041 166.6007) (xy 349.38956 166.637495) (xy 349.117256 166.710459) + (xy 348.85682 166.818335) (xy 348.856809 166.81834) (xy 348.61269 166.959283) (xy 348.612682 166.959289) + (xy 348.389029 167.130904) (xy 348.189704 167.330229) (xy 348.143901 167.389921) (xy 348.029112 167.539517) + (xy 348.018089 167.553882) (xy 348.018083 167.55389) (xy 347.87714 167.798009) (xy 347.877135 167.79802) + (xy 347.769259 168.058456) (xy 347.696295 168.33076) (xy 347.6595 168.610241) (xy 340.1375 168.610241) + (xy 340.1375 160.060353) (xy 341.6963 160.060353) (xy 341.6963 160.218046) (xy 341.727061 160.372689) + (xy 341.727064 160.372701) (xy 341.787402 160.518372) (xy 341.787409 160.518385) (xy 341.87501 160.649488) + (xy 341.875013 160.649492) (xy 341.986507 160.760986) (xy 341.986511 160.760989) (xy 342.117614 160.84859) + (xy 342.117627 160.848597) (xy 342.216242 160.889444) (xy 342.263303 160.908937) (xy 342.417953 160.939699) + (xy 342.417956 160.9397) (xy 342.417958 160.9397) (xy 342.575644 160.9397) (xy 342.575645 160.939699) + (xy 342.730297 160.908937) (xy 342.875979 160.848594) (xy 343.007089 160.760989) (xy 343.118589 160.649489) + (xy 343.196955 160.532206) (xy 344.940465 160.532206) (xy 344.956665 160.698023) (xy 344.958221 160.713942) + (xy 344.976 160.775906) (xy 345.00858 160.889461) (xy 345.08988 161.052963) (xy 345.089881 161.052965) + (xy 345.089883 161.052968) (xy 345.135957 161.114404) (xy 345.199438 161.199052) (xy 345.199439 161.199053) + (xy 345.19944 161.199054) (xy 345.333632 161.322895) (xy 345.488025 161.420397) (xy 345.621163 161.473767) + (xy 345.657514 161.488339) (xy 345.657515 161.488339) (xy 345.657517 161.48834) (xy 345.836508 161.524479) + (xy 345.836502 161.524479) (xy 345.852822 161.524759) (xy 346.019084 161.52762) (xy 346.199212 161.497658) + (xy 346.250101 161.479263) (xy 346.370936 161.435585) (xy 346.370937 161.435583) (xy 346.37094 161.435583) + (xy 346.385975 161.42682) (xy 346.392659 161.422935) (xy 346.39295 161.422857) (xy 346.420833 161.40656) + (xy 346.420951 161.406492) (xy 346.424168 161.405701) (xy 346.483262 161.389699) (xy 347.964392 161.389699) + (xy 347.964514 161.389706) (xy 347.972605 161.389705) (xy 347.972608 161.389706) (xy 348.004742 161.389702) + (xy 348.067304 161.406634) (xy 348.09513 161.422891) (xy 348.095132 161.422891) (xy 348.10128 161.426483) + (xy 348.102935 161.427308) (xy 348.117078 161.43555) (xy 348.2888 161.497621) (xy 348.468921 161.527582) + (xy 348.648598 161.52449) (xy 348.651491 161.524441) (xy 348.830466 161.488305) (xy 348.830469 161.488303) + (xy 348.830474 161.488303) (xy 348.99996 161.420362) (xy 349.154346 161.322863) (xy 349.173431 161.305251) + (xy 349.28853 161.19903) (xy 349.288532 161.199028) (xy 349.30172 161.181443) (xy 349.398085 161.052947) + (xy 349.479384 160.889448) (xy 349.529742 160.713933) (xy 349.547497 160.532203) (xy 349.53206 160.35026) + (xy 349.532058 160.350254) (xy 349.513043 160.280646) (xy 349.483943 160.174118) (xy 349.476183 160.157949) + (xy 349.473096 160.151504) (xy 349.473048 160.151246) (xy 349.456671 160.117219) (xy 349.456543 160.11643) + (xy 349.444502 160.063631) (xy 349.444502 160.063622) (xy 349.444507 160.026208) (xy 349.444506 160.026204) + (xy 349.444507 160.018198) (xy 349.444499 160.01806) (xy 349.444499 158.714778) (xy 349.447153 158.703111) + (xy 349.446119 158.694799) (xy 349.456702 158.661136) (xy 349.463067 158.647873) (xy 349.463145 158.647787) + (xy 349.463116 158.647773) (xy 349.463543 158.646885) (xy 349.473074 158.627074) (xy 349.473074 158.627068) + (xy 349.476455 158.620042) (xy 349.476617 158.619638) (xy 349.483983 158.604291) (xy 349.5321 158.428142) + (xy 349.547537 158.246193) (xy 349.529781 158.064455) (xy 349.47942 157.888934) (xy 349.398118 157.72543) + (xy 349.311652 157.610134) (xy 349.288562 157.579345) (xy 349.276374 157.568097) (xy 349.154369 157.455504) + (xy 349.154366 157.455502) (xy 349.154365 157.455501) (xy 349.154362 157.455499) (xy 348.999977 157.358001) + (xy 348.830487 157.290058) (xy 348.830477 157.290056) (xy 348.651492 157.253918) (xy 348.651499 157.253918) + (xy 348.479794 157.250965) (xy 348.468918 157.250778) (xy 348.468917 157.250778) (xy 348.468914 157.250778) + (xy 348.288797 157.280738) (xy 348.288784 157.280741) (xy 348.117063 157.342813) (xy 348.102548 157.35127) + (xy 348.102463 157.351319) (xy 348.095376 157.35544) (xy 348.09513 157.355508) (xy 348.067338 157.371744) + (xy 348.06709 157.371889) (xy 348.064363 157.372559) (xy 348.004746 157.388696) (xy 347.964401 157.388693) + (xy 347.964297 157.3887) (xy 346.523596 157.3887) (xy 346.515414 157.388698) (xy 346.515392 157.388693) + (xy 346.485465 157.388695) (xy 346.483228 157.388695) (xy 346.482946 157.388612) (xy 346.420693 157.371762) + (xy 346.392871 157.355508) (xy 346.386805 157.351964) (xy 346.385107 157.351117) (xy 346.377757 157.346834) + (xy 346.370921 157.34285) (xy 346.199197 157.280778) (xy 346.199191 157.280777) (xy 346.019081 157.250819) + (xy 346.019078 157.250819) (xy 346.010539 157.250965) (xy 345.836507 157.253959) (xy 345.657534 157.290094) + (xy 345.657523 157.290097) (xy 345.488042 157.358037) (xy 345.488041 157.358037) (xy 345.333661 157.455532) + (xy 345.333658 157.455534) (xy 345.199467 157.579373) (xy 345.089915 157.725454) (xy 345.00862 157.888944) + (xy 345.008619 157.888947) (xy 345.008618 157.88895) (xy 345.000971 157.915602) (xy 344.958258 158.064465) + (xy 344.940541 158.245814) (xy 344.940504 158.246193) (xy 344.942405 158.268602) (xy 344.954273 158.408495) + (xy 344.95594 158.428135) (xy 344.987656 158.544239) (xy 345.004056 158.604278) (xy 345.00406 158.604288) + (xy 345.011298 158.61937) (xy 345.01134 158.619456) (xy 345.014923 158.626938) (xy 345.014981 158.62724) + (xy 345.031299 158.661129) (xy 345.031336 158.661206) (xy 345.031481 158.6621) (xy 345.043501 158.714769) + (xy 345.043501 160.063622) (xy 345.031307 160.117245) (xy 345.030719 160.118471) (xy 345.030639 160.118638) + (xy 345.011766 160.157837) (xy 345.011442 160.158639) (xy 345.004018 160.17411) (xy 344.955901 160.350254) + (xy 344.955901 160.350256) (xy 344.940465 160.532206) (xy 343.196955 160.532206) (xy 343.206194 160.518379) + (xy 343.206197 160.518372) (xy 343.222134 160.479897) (xy 343.259909 160.388699) (xy 343.266537 160.372697) + (xy 343.2973 160.218042) (xy 343.2973 160.060358) (xy 343.2973 160.060355) (xy 343.297299 160.060353) + (xy 343.284576 159.99639) (xy 343.266537 159.905703) (xy 343.221631 159.797289) (xy 343.206197 159.760027) + (xy 343.20619 159.760014) (xy 343.118589 159.628911) (xy 343.118586 159.628907) (xy 343.007092 159.517413) + (xy 343.007088 159.51741) (xy 342.875985 159.429809) (xy 342.875972 159.429802) (xy 342.730301 159.369464) + (xy 342.730289 159.369461) (xy 342.575645 159.3387) (xy 342.575642 159.3387) (xy 342.417958 159.3387) + (xy 342.417955 159.3387) (xy 342.26331 159.369461) (xy 342.263298 159.369464) (xy 342.117627 159.429802) + (xy 342.117614 159.429809) (xy 341.986511 159.51741) (xy 341.986507 159.517413) (xy 341.875013 159.628907) + (xy 341.87501 159.628911) (xy 341.787409 159.760014) (xy 341.787402 159.760027) (xy 341.727064 159.905698) + (xy 341.727061 159.90571) (xy 341.6963 160.060353) (xy 340.1375 160.060353) (xy 340.1375 153.096075) + (xy 340.157185 153.029036) (xy 340.209989 152.983281) (xy 340.213999 152.981534) (xy 340.289179 152.950394) + (xy 340.420289 152.862789) (xy 340.531789 152.751289) (xy 340.619394 152.620179) (xy 340.635747 152.5807) + (xy 340.650432 152.545247) (xy 340.694273 152.490844) (xy 340.760567 152.468779) (xy 340.764993 152.4687) + (xy 341.212149 152.4687) (xy 341.279188 152.488385) (xy 341.324943 152.541189) (xy 341.335088 152.576514) + (xy 341.346295 152.661638) (xy 341.419259 152.933943) (xy 341.527135 153.194379) (xy 341.52714 153.19439) + (xy 341.668083 153.438509) (xy 341.668094 153.438525) (xy 341.798838 153.608914) (xy 341.824032 153.674083) + (xy 341.809994 153.742528) (xy 341.76118 153.792517) (xy 341.756758 153.794884) (xy 341.626313 153.86135) + (xy 341.489365 153.960848) (xy 341.48936 153.960852) (xy 341.369652 154.08056) (xy 341.369648 154.080565) + (xy 341.270152 154.217511) (xy 341.193296 154.368346) (xy 341.140981 154.529352) (xy 341.1145 154.69655) + (xy 341.1145 154.865849) (xy 341.140981 155.033047) (xy 341.193296 155.194053) (xy 341.270152 155.344888) + (xy 341.369648 155.481834) (xy 341.369652 155.481839) (xy 341.48936 155.601547) (xy 341.489365 155.601551) + (xy 341.608817 155.688337) (xy 341.626315 155.70105) (xy 341.71159 155.7445) (xy 341.777146 155.777903) + (xy 341.777148 155.777903) (xy 341.777151 155.777905) (xy 341.86345 155.805945) (xy 341.938152 155.830218) + (xy 342.105351 155.8567) (xy 342.105356 155.8567) (xy 342.274649 155.8567) (xy 342.441847 155.830218) + (xy 342.484777 155.816269) (xy 342.602849 155.777905) (xy 342.753685 155.70105) (xy 342.890641 155.601546) + (xy 343.010346 155.481841) (xy 343.10985 155.344885) (xy 343.186705 155.194049) (xy 343.239018 155.033047) + (xy 343.2655 154.865849) (xy 343.2655 154.69655) (xy 343.239928 154.535098) (xy 343.248882 154.465805) + (xy 343.293879 154.412353) (xy 343.36063 154.391713) (xy 343.362401 154.3917) (xy 343.600944 154.3917) + (xy 343.600951 154.3917) (xy 343.880442 154.354904) (xy 344.152739 154.281942) (xy 344.413183 154.174063) + (xy 344.657317 154.033112) (xy 344.880965 153.8615) (xy 345.0803 153.662165) (xy 345.147992 153.573946) + (xy 345.20442 153.532744) (xy 345.274166 153.528589) (xy 345.335086 153.562801) (xy 345.367839 153.624518) + (xy 345.362026 153.694146) (xy 345.353755 153.711433) (xy 345.297683 153.808551) (xy 345.297675 153.808568) + (xy 345.187597 154.074321) (xy 345.113146 154.352176) (xy 345.075601 154.637361) (xy 345.0756 154.637377) + (xy 345.0756 154.925022) (xy 345.075601 154.925038) (xy 345.113146 155.210223) (xy 345.187597 155.488078) + (xy 345.297675 155.753831) (xy 345.297683 155.753848) (xy 345.441504 156.002951) (xy 345.441515 156.002967) + (xy 345.616621 156.231171) (xy 345.616627 156.231178) (xy 345.820021 156.434572) (xy 345.820027 156.434577) + (xy 346.048241 156.609691) (xy 346.048248 156.609695) (xy 346.297351 156.753516) (xy 346.297356 156.753518) + (xy 346.297359 156.75352) (xy 346.297363 156.753521) (xy 346.297368 156.753524) (xy 346.310608 156.759008) + (xy 346.56312 156.863602) (xy 346.840975 156.938053) (xy 347.126171 156.9756) (xy 347.126178 156.9756) + (xy 347.413822 156.9756) (xy 347.413829 156.9756) (xy 347.699025 156.938053) (xy 347.97688 156.863602) + (xy 348.242641 156.75352) (xy 348.491759 156.609691) (xy 348.719973 156.434577) (xy 348.923377 156.231173) + (xy 349.098491 156.002959) (xy 349.24232 155.753841) (xy 349.352402 155.48808) (xy 349.426853 155.210225) + (xy 349.4644 154.925029) (xy 349.4644 154.69655) (xy 351.2745 154.69655) (xy 351.2745 154.865849) + (xy 351.300981 155.033047) (xy 351.353296 155.194053) (xy 351.430152 155.344888) (xy 351.529648 155.481834) + (xy 351.529652 155.481839) (xy 351.64936 155.601547) (xy 351.649365 155.601551) (xy 351.768817 155.688337) + (xy 351.786315 155.70105) (xy 351.87159 155.7445) (xy 351.937146 155.777903) (xy 351.937148 155.777903) + (xy 351.937151 155.777905) (xy 352.02345 155.805945) (xy 352.098152 155.830218) (xy 352.265351 155.8567) + (xy 352.265356 155.8567) (xy 352.434649 155.8567) (xy 352.601847 155.830218) (xy 352.644777 155.816269) + (xy 352.762849 155.777905) (xy 352.913685 155.70105) (xy 353.050641 155.601546) (xy 353.170346 155.481841) + (xy 353.26985 155.344885) (xy 353.346705 155.194049) (xy 353.399018 155.033047) (xy 353.4255 154.865849) + (xy 353.4255 154.69655) (xy 353.399018 154.529352) (xy 353.372336 154.447236) (xy 353.346705 154.368351) + (xy 353.346703 154.368348) (xy 353.346703 154.368346) (xy 353.315844 154.307783) (xy 353.26985 154.217515) + (xy 353.238281 154.174064) (xy 353.170351 154.080565) (xy 353.170347 154.08056) (xy 353.050639 153.960852) + (xy 353.050634 153.960848) (xy 352.913688 153.861352) (xy 352.913687 153.861351) (xy 352.913685 153.86135) + (xy 352.866582 153.83735) (xy 352.762853 153.784496) (xy 352.601847 153.732181) (xy 352.434649 153.7057) + (xy 352.434644 153.7057) (xy 352.265356 153.7057) (xy 352.265351 153.7057) (xy 352.098152 153.732181) + (xy 351.937146 153.784496) (xy 351.786311 153.861352) (xy 351.649365 153.960848) (xy 351.64936 153.960852) + (xy 351.529652 154.08056) (xy 351.529648 154.080565) (xy 351.430152 154.217511) (xy 351.353296 154.368346) + (xy 351.300981 154.529352) (xy 351.2745 154.69655) (xy 349.4644 154.69655) (xy 349.4644 154.637371) + (xy 349.426853 154.352175) (xy 349.352402 154.07432) (xy 349.24232 153.808559) (xy 349.242318 153.808556) + (xy 349.242316 153.808551) (xy 349.098495 153.559448) (xy 349.098491 153.559441) (xy 348.994569 153.424007) + (xy 348.923378 153.331228) (xy 348.923372 153.331221) (xy 348.719978 153.127827) (xy 348.719971 153.127821) + (xy 348.491767 152.952715) (xy 348.491765 152.952713) (xy 348.491759 152.952709) (xy 348.491754 152.952706) + (xy 348.491751 152.952704) (xy 348.242648 152.808883) (xy 348.242631 152.808875) (xy 347.976878 152.698797) + (xy 347.699023 152.624346) (xy 347.413838 152.586801) (xy 347.413835 152.5868) (xy 347.413829 152.5868) + (xy 347.126171 152.5868) (xy 347.126165 152.5868) (xy 347.126161 152.586801) (xy 346.840976 152.624346) + (xy 346.563121 152.698797) (xy 346.297368 152.808875) (xy 346.297351 152.808883) (xy 346.048248 152.952704) + (xy 346.048232 152.952715) (xy 345.820028 153.127821) (xy 345.820021 153.127827) (xy 345.616627 153.331221) + (xy 345.54543 153.424007) (xy 345.489001 153.465209) (xy 345.419255 153.469364) (xy 345.358335 153.435151) + (xy 345.325583 153.373434) (xy 345.331396 153.303807) (xy 345.339661 153.286531) (xy 345.392863 153.194383) + (xy 345.500742 152.933939) (xy 345.573704 152.661642) (xy 345.6105 152.382151) (xy 345.6105 152.100249) + (xy 345.573704 151.820758) (xy 345.500742 151.548461) (xy 345.49376 151.531606) (xy 345.468765 151.471261) + (xy 345.392863 151.288017) (xy 345.39286 151.288011) (xy 345.392859 151.288009) (xy 345.251916 151.04389) + (xy 345.251912 151.043883) (xy 345.0803 150.820235) (xy 345.080298 150.820233) (xy 345.080295 150.820229) + (xy 344.88097 150.620904) (xy 344.856161 150.601867) (xy 344.657317 150.449288) (xy 344.657311 150.449284) + (xy 344.657309 150.449283) (xy 344.41319 150.30834) (xy 344.413179 150.308335) (xy 344.152743 150.200459) + (xy 343.880439 150.127495) (xy 343.600958 150.0907) (xy 343.600951 150.0907) (xy 343.319049 150.0907) + (xy 343.319041 150.0907) (xy 343.03956 150.127495) (xy 342.767256 150.200459) (xy 342.50682 150.308335) + (xy 342.506809 150.30834) (xy 342.26269 150.449283) (xy 342.262682 150.449289) (xy 342.039029 150.620904) + (xy 341.839704 150.820229) (xy 341.668089 151.043882) (xy 341.668083 151.04389) (xy 341.52714 151.288009) + (xy 341.527135 151.28802) (xy 341.419259 151.548456) (xy 341.346295 151.820761) (xy 341.335088 151.905886) + (xy 341.306821 151.969783) (xy 341.248496 152.008253) (xy 341.212149 152.0137) (xy 340.765159 152.0137) + (xy 340.69812 151.994015) (xy 340.652365 151.941211) (xy 340.650598 151.937153) (xy 340.619395 151.861824) + (xy 340.619394 151.861821) (xy 340.619392 151.861818) (xy 340.61939 151.861814) (xy 340.531789 151.730711) + (xy 340.531786 151.730707) (xy 340.420292 151.619213) (xy 340.420288 151.61921) (xy 340.289185 151.531609) + (xy 340.289175 151.531604) (xy 340.214047 151.500485) (xy 340.159644 151.456644) (xy 340.137579 151.39035) + (xy 340.1375 151.385924) (xy 340.1375 149.560241) (xy 347.6595 149.560241) (xy 347.6595 149.842158) + (xy 347.696295 150.121639) (xy 347.769259 150.393943) (xy 347.877135 150.654379) (xy 347.87714 150.65439) + (xy 348.018083 150.898509) (xy 348.018088 150.898517) (xy 348.180387 151.110028) (xy 348.189704 151.12217) + (xy 348.389029 151.321495) (xy 348.389033 151.321498) (xy 348.389035 151.3215) (xy 348.612683 151.493112) + (xy 348.61269 151.493116) (xy 348.856809 151.634059) (xy 348.856814 151.634061) (xy 348.856817 151.634063) + (xy 349.117261 151.741942) (xy 349.389558 151.814904) (xy 349.669049 151.8517) (xy 349.669056 151.8517) + (xy 349.950944 151.8517) (xy 349.950951 151.8517) (xy 350.230442 151.814904) (xy 350.502739 151.741942) + (xy 350.763183 151.634063) (xy 351.007317 151.493112) (xy 351.230965 151.3215) (xy 351.4303 151.122165) + (xy 351.601912 150.898517) (xy 351.734009 150.669717) (xy 351.742859 150.65439) (xy 351.742859 150.654389) + (xy 351.742863 150.654383) (xy 351.850742 150.393939) (xy 351.923704 150.121642) (xy 351.9605 149.842151) + (xy 351.9605 149.560249) (xy 351.959957 149.556128) (xy 351.94829 149.467503) (xy 351.923704 149.280758) + (xy 351.850742 149.008461) (xy 351.84376 148.991606) (xy 351.818765 148.931261) (xy 351.742863 148.748017) + (xy 351.742861 148.748014) (xy 351.742859 148.748009) (xy 351.601916 148.50389) (xy 351.601912 148.503883) + (xy 351.4303 148.280235) (xy 351.430298 148.280233) (xy 351.430295 148.280229) (xy 351.23097 148.080904) + (xy 351.230965 148.0809) (xy 351.007317 147.909288) (xy 351.007311 147.909284) (xy 351.007309 147.909283) + (xy 350.76319 147.76834) (xy 350.763179 147.768335) (xy 350.502743 147.660459) (xy 350.230439 147.587495) + (xy 349.950958 147.5507) (xy 349.950951 147.5507) (xy 349.669049 147.5507) (xy 349.669041 147.5507) + (xy 349.38956 147.587495) (xy 349.117256 147.660459) (xy 348.85682 147.768335) (xy 348.856809 147.76834) + (xy 348.61269 147.909283) (xy 348.612682 147.909289) (xy 348.389029 148.080904) (xy 348.189704 148.280229) + (xy 348.018089 148.503882) (xy 348.018083 148.50389) (xy 347.87714 148.748009) (xy 347.877135 148.74802) + (xy 347.769259 149.008456) (xy 347.696295 149.28076) (xy 347.6595 149.560241) (xy 340.1375 149.560241) + (xy 340.1375 141.925353) (xy 343.7185 141.925353) (xy 343.7185 142.083046) (xy 343.749261 142.237689) + (xy 343.749264 142.237701) (xy 343.809602 142.383372) (xy 343.809609 142.383385) (xy 343.89721 142.514488) + (xy 343.897213 142.514492) (xy 344.008707 142.625986) (xy 344.008711 142.625989) (xy 344.139814 142.71359) + (xy 344.139827 142.713597) (xy 344.262577 142.764441) (xy 344.285503 142.773937) (xy 344.430561 142.802791) + (xy 344.440153 142.804699) (xy 344.440156 142.8047) (xy 344.440158 142.8047) (xy 344.597844 142.8047) + (xy 344.597845 142.804699) (xy 344.752497 142.773937) (xy 344.890099 142.716941) (xy 344.898172 142.713597) + (xy 344.898172 142.713596) (xy 344.898179 142.713594) (xy 345.029289 142.625989) (xy 345.140789 142.514489) + (xy 345.228394 142.383379) (xy 345.230195 142.37903) (xy 345.274032 142.324626) (xy 345.340325 142.302557) + (xy 345.408025 142.319833) (xy 345.410969 142.321635) (xy 345.428682 142.332821) (xy 345.488025 142.370297) + (xy 345.623177 142.424474) (xy 345.657514 142.438239) (xy 345.657515 142.438239) (xy 345.657517 142.43824) + (xy 345.836508 142.474379) (xy 345.836502 142.474379) (xy 345.852822 142.474659) (xy 346.019084 142.47752) + (xy 346.199212 142.447558) (xy 346.254707 142.427498) (xy 346.370936 142.385485) (xy 346.370937 142.385483) + (xy 346.37094 142.385483) (xy 346.385975 142.37672) (xy 346.392659 142.372835) (xy 346.39295 142.372757) + (xy 346.420833 142.35646) (xy 346.420951 142.356392) (xy 346.424168 142.355601) (xy 346.483262 142.339599) + (xy 347.964392 142.339599) (xy 347.964514 142.339606) (xy 347.972605 142.339605) (xy 347.972608 142.339606) + (xy 348.004742 142.339602) (xy 348.067304 142.356534) (xy 348.09513 142.372791) (xy 348.095132 142.372791) + (xy 348.10128 142.376383) (xy 348.102935 142.377208) (xy 348.117078 142.38545) (xy 348.2888 142.447521) + (xy 348.468921 142.477482) (xy 348.648598 142.47439) (xy 348.651491 142.474341) (xy 348.830466 142.438205) + (xy 348.830469 142.438203) (xy 348.830474 142.438203) (xy 348.99996 142.370262) (xy 349.154346 142.272763) + (xy 349.172731 142.255797) (xy 349.28853 142.14893) (xy 349.288532 142.148928) (xy 349.29741 142.13709) + (xy 349.398085 142.002847) (xy 349.479384 141.839348) (xy 349.529742 141.663833) (xy 349.547497 141.482103) + (xy 349.53206 141.30016) (xy 349.532058 141.300154) (xy 349.521438 141.261277) (xy 349.483943 141.124018) + (xy 349.476183 141.107849) (xy 349.473096 141.101404) (xy 349.473048 141.101146) (xy 349.456671 141.067119) + (xy 349.456543 141.06633) (xy 349.444502 141.013531) (xy 349.444502 141.013522) (xy 349.444507 140.976108) + (xy 349.444506 140.976104) (xy 349.444507 140.968098) (xy 349.444499 140.96796) (xy 349.444499 139.664678) + (xy 349.447153 139.653012) (xy 349.446119 139.644699) (xy 349.456703 139.611034) (xy 349.463018 139.597876) + (xy 349.463098 139.597787) (xy 349.463068 139.597773) (xy 349.463495 139.596885) (xy 349.473074 139.576974) + (xy 349.473074 139.576968) (xy 349.476455 139.569942) (xy 349.476617 139.569538) (xy 349.483983 139.554191) + (xy 349.5321 139.378042) (xy 349.547537 139.196093) (xy 349.529781 139.014355) (xy 349.47942 138.838834) + (xy 349.398118 138.67533) (xy 349.311727 138.560134) (xy 349.288562 138.529245) (xy 349.231396 138.476489) + (xy 349.154369 138.405404) (xy 349.154366 138.405402) (xy 349.154365 138.405401) (xy 349.154362 138.405399) + (xy 348.999977 138.307901) (xy 348.830487 138.239958) (xy 348.830477 138.239956) (xy 348.651492 138.203818) + (xy 348.651499 138.203818) (xy 348.479794 138.200865) (xy 348.468918 138.200678) (xy 348.468917 138.200678) + (xy 348.468914 138.200678) (xy 348.288797 138.230638) (xy 348.288784 138.230641) (xy 348.117063 138.292713) + (xy 348.102548 138.30117) (xy 348.102463 138.301219) (xy 348.095376 138.30534) (xy 348.09513 138.305408) + (xy 348.067338 138.321644) (xy 348.06709 138.321789) (xy 348.064363 138.322459) (xy 348.004746 138.338596) + (xy 347.964401 138.338593) (xy 347.964297 138.3386) (xy 346.523596 138.3386) (xy 346.515414 138.338598) + (xy 346.515392 138.338593) (xy 346.485465 138.338595) (xy 346.483228 138.338595) (xy 346.482946 138.338512) + (xy 346.420693 138.321662) (xy 346.392871 138.305408) (xy 346.386805 138.301864) (xy 346.385107 138.301017) + (xy 346.377757 138.296734) (xy 346.370921 138.29275) (xy 346.199197 138.230678) (xy 346.199191 138.230677) + (xy 346.019081 138.200719) (xy 346.019078 138.200719) (xy 346.010539 138.200865) (xy 345.836507 138.203859) + (xy 345.657534 138.239994) (xy 345.657523 138.239997) (xy 345.488042 138.307937) (xy 345.488041 138.307937) + (xy 345.333661 138.405432) (xy 345.333658 138.405434) (xy 345.199467 138.529273) (xy 345.089915 138.675354) + (xy 345.00862 138.838844) (xy 345.008619 138.838847) (xy 345.008618 138.83885) (xy 344.983438 138.926606) + (xy 344.958258 139.014365) (xy 344.94053 139.195827) (xy 344.940504 139.196093) (xy 344.942182 139.215868) + (xy 344.95428 139.358478) (xy 344.95594 139.378035) (xy 344.977618 139.457392) (xy 345.004056 139.554178) + (xy 345.00406 139.554188) (xy 345.011298 139.56927) (xy 345.01134 139.569356) (xy 345.014923 139.576838) + (xy 345.014981 139.57714) (xy 345.031336 139.611106) (xy 345.031481 139.612) (xy 345.043501 139.664669) + (xy 345.043501 141.013522) (xy 345.031307 141.067145) (xy 345.030719 141.068371) (xy 345.030639 141.068538) + (xy 345.011766 141.107737) (xy 345.011442 141.108539) (xy 345.004019 141.124007) (xy 344.988423 141.1811) + (xy 344.951767 141.240583) (xy 344.888772 141.270805) (xy 344.821354 141.262984) (xy 344.752501 141.234464) + (xy 344.752489 141.234461) (xy 344.597845 141.2037) (xy 344.597842 141.2037) (xy 344.440158 141.2037) + (xy 344.440155 141.2037) (xy 344.28551 141.234461) (xy 344.285498 141.234464) (xy 344.139827 141.294802) + (xy 344.139814 141.294809) (xy 344.008711 141.38241) (xy 344.008707 141.382413) (xy 343.897213 141.493907) + (xy 343.89721 141.493911) (xy 343.809609 141.625014) (xy 343.809602 141.625027) (xy 343.749264 141.770698) + (xy 343.749261 141.77071) (xy 343.7185 141.925353) (xy 340.1375 141.925353) (xy 340.1375 135.64655) + (xy 341.1145 135.64655) (xy 341.1145 135.815849) (xy 341.140981 135.983047) (xy 341.193296 136.144053) + (xy 341.270152 136.294888) (xy 341.369648 136.431834) (xy 341.369652 136.431839) (xy 341.48936 136.551547) + (xy 341.489365 136.551551) (xy 341.608817 136.638337) (xy 341.626315 136.65105) (xy 341.689517 136.683253) + (xy 341.777146 136.727903) (xy 341.777148 136.727903) (xy 341.777151 136.727905) (xy 341.86345 136.755945) + (xy 341.938152 136.780218) (xy 342.105351 136.8067) (xy 342.105356 136.8067) (xy 342.274649 136.8067) + (xy 342.441847 136.780218) (xy 342.602849 136.727905) (xy 342.753685 136.65105) (xy 342.890641 136.551546) + (xy 343.010346 136.431841) (xy 343.10985 136.294885) (xy 343.186705 136.144049) (xy 343.239018 135.983047) + (xy 343.2655 135.815849) (xy 343.2655 135.64655) (xy 343.239928 135.485098) (xy 343.248882 135.415805) + (xy 343.293879 135.362353) (xy 343.36063 135.341713) (xy 343.362401 135.3417) (xy 343.600944 135.3417) + (xy 343.600951 135.3417) (xy 343.880442 135.304904) (xy 344.152739 135.231942) (xy 344.413183 135.124063) + (xy 344.657317 134.983112) (xy 344.880965 134.8115) (xy 345.0803 134.612165) (xy 345.147992 134.523946) + (xy 345.20442 134.482744) (xy 345.274166 134.478589) (xy 345.335086 134.512801) (xy 345.367839 134.574518) + (xy 345.362026 134.644146) (xy 345.353755 134.661433) (xy 345.297683 134.758551) (xy 345.297675 134.758568) + (xy 345.187597 135.024321) (xy 345.113146 135.302176) (xy 345.075601 135.587361) (xy 345.0756 135.587377) + (xy 345.0756 135.875022) (xy 345.075601 135.875038) (xy 345.113146 136.160223) (xy 345.187597 136.438078) + (xy 345.297675 136.703831) (xy 345.297683 136.703848) (xy 345.441504 136.952951) (xy 345.441515 136.952967) + (xy 345.616621 137.181171) (xy 345.616627 137.181178) (xy 345.820025 137.384576) (xy 345.916261 137.45842) + (xy 346.048241 137.559691) (xy 346.048248 137.559695) (xy 346.297351 137.703516) (xy 346.297356 137.703518) + (xy 346.297359 137.70352) (xy 346.297363 137.703521) (xy 346.297368 137.703524) (xy 346.402723 137.747163) + (xy 346.56312 137.813602) (xy 346.840975 137.888053) (xy 347.126171 137.9256) (xy 347.126178 137.9256) + (xy 347.413822 137.9256) (xy 347.413829 137.9256) (xy 347.699025 137.888053) (xy 347.97688 137.813602) + (xy 348.242641 137.70352) (xy 348.491759 137.559691) (xy 348.632578 137.451636) (xy 348.719975 137.384576) + (xy 348.719978 137.384572) (xy 348.923372 137.181178) (xy 348.923377 137.181173) (xy 349.098491 136.952959) + (xy 349.24232 136.703841) (xy 349.352402 136.43808) (xy 349.426853 136.160225) (xy 349.4644 135.875029) + (xy 349.4644 135.64655) (xy 351.2745 135.64655) (xy 351.2745 135.815849) (xy 351.300981 135.983047) + (xy 351.353296 136.144053) (xy 351.430152 136.294888) (xy 351.529648 136.431834) (xy 351.529652 136.431839) + (xy 351.64936 136.551547) (xy 351.649365 136.551551) (xy 351.768817 136.638337) (xy 351.786315 136.65105) + (xy 351.849517 136.683253) (xy 351.937146 136.727903) (xy 351.937148 136.727903) (xy 351.937151 136.727905) + (xy 352.02345 136.755945) (xy 352.098152 136.780218) (xy 352.265351 136.8067) (xy 352.265356 136.8067) + (xy 352.434649 136.8067) (xy 352.601847 136.780218) (xy 352.762849 136.727905) (xy 352.913685 136.65105) + (xy 353.050641 136.551546) (xy 353.170346 136.431841) (xy 353.26985 136.294885) (xy 353.346705 136.144049) + (xy 353.399018 135.983047) (xy 353.4255 135.815849) (xy 353.4255 135.64655) (xy 353.399018 135.479352) + (xy 353.354296 135.341713) (xy 353.346705 135.318351) (xy 353.346703 135.318348) (xy 353.346703 135.318346) + (xy 353.302676 135.23194) (xy 353.26985 135.167515) (xy 353.238281 135.124064) (xy 353.170351 135.030565) + (xy 353.170347 135.03056) (xy 353.050639 134.910852) (xy 353.050634 134.910848) (xy 352.913688 134.811352) + (xy 352.913687 134.811351) (xy 352.913685 134.81135) (xy 352.848609 134.778192) (xy 352.762853 134.734496) + (xy 352.601847 134.682181) (xy 352.434649 134.6557) (xy 352.434644 134.6557) (xy 352.265356 134.6557) + (xy 352.265351 134.6557) (xy 352.098152 134.682181) (xy 351.937146 134.734496) (xy 351.786311 134.811352) + (xy 351.649365 134.910848) (xy 351.64936 134.910852) (xy 351.529652 135.03056) (xy 351.529648 135.030565) + (xy 351.430152 135.167511) (xy 351.353296 135.318346) (xy 351.300981 135.479352) (xy 351.2745 135.64655) + (xy 349.4644 135.64655) (xy 349.4644 135.587371) (xy 349.426853 135.302175) (xy 349.352402 135.02432) + (xy 349.285963 134.863923) (xy 349.242324 134.758568) (xy 349.242316 134.758551) (xy 349.098495 134.509448) + (xy 349.098494 134.509447) (xy 349.098491 134.509441) (xy 348.974025 134.347233) (xy 348.923378 134.281228) + (xy 348.923372 134.281221) (xy 348.719978 134.077827) (xy 348.719971 134.077821) (xy 348.491767 133.902715) + (xy 348.491765 133.902713) (xy 348.491759 133.902709) (xy 348.491754 133.902706) (xy 348.491751 133.902704) + (xy 348.242648 133.758883) (xy 348.242631 133.758875) (xy 347.976878 133.648797) (xy 347.699023 133.574346) + (xy 347.413838 133.536801) (xy 347.413835 133.5368) (xy 347.413829 133.5368) (xy 347.126171 133.5368) + (xy 347.126165 133.5368) (xy 347.126161 133.536801) (xy 346.840976 133.574346) (xy 346.563121 133.648797) + (xy 346.297368 133.758875) (xy 346.297351 133.758883) (xy 346.048248 133.902704) (xy 346.048232 133.902715) + (xy 345.820028 134.077821) (xy 345.820021 134.077827) (xy 345.616627 134.281221) (xy 345.54543 134.374007) + (xy 345.489001 134.415209) (xy 345.419255 134.419364) (xy 345.358335 134.385151) (xy 345.325583 134.323434) + (xy 345.331396 134.253807) (xy 345.339661 134.236531) (xy 345.392863 134.144383) (xy 345.500742 133.883939) + (xy 345.573704 133.611642) (xy 345.6105 133.332151) (xy 345.6105 133.050249) (xy 345.573704 132.770758) + (xy 345.500742 132.498461) (xy 345.49376 132.481606) (xy 345.471809 132.428611) (xy 345.392863 132.238017) + (xy 345.392861 132.238014) (xy 345.392859 132.238009) (xy 345.251916 131.99389) (xy 345.251912 131.993883) + (xy 345.0803 131.770235) (xy 345.080298 131.770233) (xy 345.080295 131.770229) (xy 344.88097 131.570904) + (xy 344.782371 131.495246) (xy 344.657317 131.399288) (xy 344.657311 131.399284) (xy 344.657309 131.399283) + (xy 344.41319 131.25834) (xy 344.413179 131.258335) (xy 344.152743 131.150459) (xy 343.880439 131.077495) + (xy 343.600958 131.0407) (xy 343.600951 131.0407) (xy 343.319049 131.0407) (xy 343.319041 131.0407) + (xy 343.03956 131.077495) (xy 342.767256 131.150459) (xy 342.50682 131.258335) (xy 342.506809 131.25834) + (xy 342.26269 131.399283) (xy 342.262682 131.399289) (xy 342.039029 131.570904) (xy 341.839704 131.770229) + (xy 341.668089 131.993882) (xy 341.668083 131.99389) (xy 341.52714 132.238009) (xy 341.527135 132.23802) + (xy 341.419259 132.498456) (xy 341.346295 132.77076) (xy 341.3095 133.050241) (xy 341.3095 133.332158) + (xy 341.346295 133.611639) (xy 341.419259 133.883943) (xy 341.527135 134.144379) (xy 341.52714 134.14439) + (xy 341.668083 134.388509) (xy 341.668094 134.388525) (xy 341.798838 134.558914) (xy 341.824032 134.624083) + (xy 341.809994 134.692528) (xy 341.76118 134.742517) (xy 341.756758 134.744884) (xy 341.626313 134.81135) + (xy 341.489365 134.910848) (xy 341.48936 134.910852) (xy 341.369652 135.03056) (xy 341.369648 135.030565) + (xy 341.270152 135.167511) (xy 341.193296 135.318346) (xy 341.140981 135.479352) (xy 341.1145 135.64655) + (xy 340.1375 135.64655) (xy 340.1375 134.046075) (xy 340.157185 133.979036) (xy 340.209989 133.933281) + (xy 340.213999 133.931534) (xy 340.289179 133.900394) (xy 340.420289 133.812789) (xy 340.531789 133.701289) + (xy 340.619394 133.570179) (xy 340.679737 133.424497) (xy 340.7105 133.269842) (xy 340.7105 133.112158) + (xy 340.7105 133.112155) (xy 340.710499 133.112153) (xy 340.679737 132.957503) (xy 340.66403 132.919582) + (xy 340.619397 132.811827) (xy 340.61939 132.811814) (xy 340.531789 132.680711) (xy 340.531786 132.680707) + (xy 340.420292 132.569213) (xy 340.420288 132.56921) (xy 340.289185 132.481609) (xy 340.289175 132.481604) + (xy 340.214047 132.450485) (xy 340.159644 132.406644) (xy 340.137579 132.34035) (xy 340.1375 132.335924) + (xy 340.1375 130.510241) (xy 347.6595 130.510241) (xy 347.6595 130.792158) (xy 347.696295 131.071639) + (xy 347.769259 131.343943) (xy 347.877135 131.604379) (xy 347.87714 131.60439) (xy 348.009642 131.833888) + (xy 348.018088 131.848517) (xy 348.180547 132.060237) (xy 348.189704 132.07217) (xy 348.389029 132.271495) + (xy 348.389033 132.271498) (xy 348.389035 132.2715) (xy 348.612683 132.443112) (xy 348.61269 132.443116) + (xy 348.856809 132.584059) (xy 348.856814 132.584061) (xy 348.856817 132.584063) (xy 349.117261 132.691942) + (xy 349.389558 132.764904) (xy 349.669049 132.8017) (xy 349.669056 132.8017) (xy 349.950944 132.8017) + (xy 349.950951 132.8017) (xy 350.230442 132.764904) (xy 350.502739 132.691942) (xy 350.763183 132.584063) + (xy 351.007317 132.443112) (xy 351.230965 132.2715) (xy 351.4303 132.072165) (xy 351.601912 131.848517) + (xy 351.742863 131.604383) (xy 351.850742 131.343939) (xy 351.923704 131.071642) (xy 351.9605 130.792151) + (xy 351.9605 130.510249) (xy 351.923704 130.230758) (xy 351.850742 129.958461) (xy 351.84376 129.941606) + (xy 351.818765 129.881261) (xy 351.742863 129.698017) (xy 351.742861 129.698014) (xy 351.742859 129.698009) + (xy 351.601916 129.45389) (xy 351.601912 129.453883) (xy 351.4303 129.230235) (xy 351.430298 129.230233) + (xy 351.430295 129.230229) (xy 351.23097 129.030904) (xy 351.230965 129.0309) (xy 351.007317 128.859288) + (xy 351.007311 128.859284) (xy 351.007309 128.859283) (xy 350.76319 128.71834) (xy 350.763179 128.718335) + (xy 350.502743 128.610459) (xy 350.230439 128.537495) (xy 349.950958 128.5007) (xy 349.950951 128.5007) + (xy 349.669049 128.5007) (xy 349.669041 128.5007) (xy 349.38956 128.537495) (xy 349.117256 128.610459) + (xy 348.85682 128.718335) (xy 348.856809 128.71834) (xy 348.61269 128.859283) (xy 348.612684 128.859287) + (xy 348.612683 128.859288) (xy 348.557698 128.90148) (xy 348.389029 129.030904) (xy 348.189704 129.230229) + (xy 348.076381 129.377914) (xy 348.018097 129.453872) (xy 348.018089 129.453882) (xy 348.018083 129.45389) + (xy 347.87714 129.698009) (xy 347.877135 129.69802) (xy 347.769259 129.958456) (xy 347.696295 130.23076) + (xy 347.6595 130.510241) (xy 340.1375 130.510241) (xy 340.1375 123.513253) (xy 342.1655 123.513253) + (xy 342.1655 123.670946) (xy 342.196261 123.825589) (xy 342.196264 123.825601) (xy 342.256602 123.971272) + (xy 342.256609 123.971285) (xy 342.34421 124.102388) (xy 342.344213 124.102392) (xy 342.455707 124.213886) + (xy 342.455711 124.213889) (xy 342.586814 124.30149) (xy 342.586827 124.301497) (xy 342.732498 124.361835) + (xy 342.732503 124.361837) (xy 342.887153 124.392599) (xy 342.887156 124.3926) (xy 342.887158 124.3926) + (xy 343.044844 124.3926) (xy 343.044845 124.392599) (xy 343.199497 124.361837) (xy 343.345179 124.301494) + (xy 343.476289 124.213889) (xy 343.587789 124.102389) (xy 343.675394 123.971279) (xy 343.679035 123.96249) + (xy 343.715326 123.874873) (xy 343.735737 123.825597) (xy 343.7665 123.670942) (xy 343.7665 123.513258) + (xy 343.7665 123.513255) (xy 343.766499 123.513253) (xy 343.750389 123.432263) (xy 343.735737 123.358603) + (xy 343.735735 123.358598) (xy 343.675397 123.212927) (xy 343.67539 123.212914) (xy 343.587789 123.081811) + (xy 343.587786 123.081807) (xy 343.476292 122.970313) (xy 343.476288 122.97031) (xy 343.345185 122.882709) + (xy 343.345172 122.882702) (xy 343.199501 122.822364) (xy 343.199489 122.822361) (xy 343.044845 122.7916) + (xy 343.044842 122.7916) (xy 342.887158 122.7916) (xy 342.887155 122.7916) (xy 342.73251 122.822361) + (xy 342.732498 122.822364) (xy 342.586827 122.882702) (xy 342.586814 122.882709) (xy 342.455711 122.97031) + (xy 342.455707 122.970313) (xy 342.344213 123.081807) (xy 342.34421 123.081811) (xy 342.256609 123.212914) + (xy 342.256602 123.212927) (xy 342.196264 123.358598) (xy 342.196261 123.35861) (xy 342.1655 123.513253) + (xy 340.1375 123.513253) (xy 340.1375 122.432106) (xy 344.940465 122.432106) (xy 344.956676 122.598035) + (xy 344.958221 122.613842) (xy 344.977606 122.681404) (xy 345.00858 122.789361) (xy 345.08988 122.952863) + (xy 345.089881 122.952865) (xy 345.089883 122.952868) (xy 345.102966 122.970313) (xy 345.199438 123.098952) + (xy 345.199439 123.098953) (xy 345.19944 123.098954) (xy 345.333632 123.222795) (xy 345.488025 123.320297) + (xy 345.623177 123.374474) (xy 345.657514 123.388239) (xy 345.657515 123.388239) (xy 345.657517 123.38824) + (xy 345.836508 123.424379) (xy 345.836502 123.424379) (xy 345.852822 123.424659) (xy 346.019084 123.42752) + (xy 346.199212 123.397558) (xy 346.306161 123.358899) (xy 346.370936 123.335485) (xy 346.370937 123.335483) + (xy 346.37094 123.335483) (xy 346.385975 123.32672) (xy 346.392659 123.322835) (xy 346.39295 123.322757) + (xy 346.420833 123.30646) (xy 346.420951 123.306392) (xy 346.424168 123.305601) (xy 346.483262 123.289599) + (xy 347.964392 123.289599) (xy 347.964514 123.289606) (xy 347.972605 123.289605) (xy 347.972608 123.289606) + (xy 348.004742 123.289602) (xy 348.067304 123.306534) (xy 348.09513 123.322791) (xy 348.095132 123.322791) + (xy 348.10128 123.326383) (xy 348.102935 123.327208) (xy 348.117078 123.33545) (xy 348.2888 123.397521) + (xy 348.468921 123.427482) (xy 348.648598 123.42439) (xy 348.651491 123.424341) (xy 348.830466 123.388205) + (xy 348.830469 123.388203) (xy 348.830474 123.388203) (xy 348.99996 123.320262) (xy 349.154346 123.222763) + (xy 349.165005 123.212927) (xy 349.28853 123.09893) (xy 349.288532 123.098928) (xy 349.301372 123.081807) + (xy 349.398085 122.952847) (xy 349.479384 122.789348) (xy 349.529742 122.613833) (xy 349.547497 122.432103) + (xy 349.53206 122.25016) (xy 349.532058 122.250154) (xy 349.520492 122.207814) (xy 349.483943 122.074018) + (xy 349.476183 122.057849) (xy 349.473096 122.051404) (xy 349.473048 122.051146) (xy 349.456671 122.017119) + (xy 349.456543 122.01633) (xy 349.444502 121.963531) (xy 349.444502 121.963522) (xy 349.444507 121.926108) + (xy 349.444506 121.926104) (xy 349.444507 121.918098) (xy 349.444499 121.91796) (xy 349.444499 120.614677) + (xy 349.447154 120.603008) (xy 349.44612 120.594694) (xy 349.456705 120.561028) (xy 349.463011 120.54789) + (xy 349.473074 120.526974) (xy 349.473074 120.526969) (xy 349.47646 120.519933) (xy 349.476625 120.519522) + (xy 349.476746 120.51927) (xy 349.483983 120.504191) (xy 349.5321 120.328042) (xy 349.547537 120.146093) + (xy 349.529781 119.964355) (xy 349.47942 119.788834) (xy 349.398118 119.62533) (xy 349.303675 119.499397) + (xy 349.288562 119.479245) (xy 349.220259 119.416211) (xy 349.154369 119.355404) (xy 349.154366 119.355402) + (xy 349.154365 119.355401) (xy 349.154362 119.355399) (xy 348.999977 119.257901) (xy 348.830487 119.189958) + (xy 348.830477 119.189956) (xy 348.651492 119.153818) (xy 348.651499 119.153818) (xy 348.479794 119.150865) + (xy 348.468918 119.150678) (xy 348.468917 119.150678) (xy 348.468914 119.150678) (xy 348.288797 119.180638) + (xy 348.288784 119.180641) (xy 348.117063 119.242713) (xy 348.102548 119.25117) (xy 348.102463 119.251219) + (xy 348.095376 119.25534) (xy 348.09513 119.255408) (xy 348.067338 119.271644) (xy 348.06709 119.271789) + (xy 348.064363 119.272459) (xy 348.004746 119.288596) (xy 347.964401 119.288593) (xy 347.964297 119.2886) + (xy 346.523596 119.2886) (xy 346.515414 119.288598) (xy 346.515392 119.288593) (xy 346.485465 119.288595) + (xy 346.483228 119.288595) (xy 346.482946 119.288512) (xy 346.420693 119.271662) (xy 346.392871 119.255408) + (xy 346.386805 119.251864) (xy 346.385107 119.251017) (xy 346.377757 119.246734) (xy 346.370921 119.24275) + (xy 346.199197 119.180678) (xy 346.199191 119.180677) (xy 346.019081 119.150719) (xy 346.019078 119.150719) + (xy 346.010539 119.150865) (xy 345.836507 119.153859) (xy 345.657534 119.189994) (xy 345.657523 119.189997) + (xy 345.488042 119.257937) (xy 345.488041 119.257937) (xy 345.333661 119.355432) (xy 345.333658 119.355434) + (xy 345.199467 119.479273) (xy 345.089915 119.625354) (xy 345.00862 119.788844) (xy 345.008619 119.788847) + (xy 345.008618 119.78885) (xy 344.991745 119.847658) (xy 344.958258 119.964365) (xy 344.944478 120.105413) + (xy 344.940504 120.146093) (xy 344.941683 120.159989) (xy 344.955779 120.326147) (xy 344.95594 120.328035) + (xy 344.980648 120.418484) (xy 345.004056 120.504178) (xy 345.00406 120.504188) (xy 345.011298 120.51927) + (xy 345.01134 120.519356) (xy 345.014923 120.526838) (xy 345.014981 120.52714) (xy 345.031297 120.561025) + (xy 345.031336 120.561106) (xy 345.031481 120.562) (xy 345.043501 120.614669) (xy 345.043501 121.963522) + (xy 345.031307 122.017145) (xy 345.030719 122.018371) (xy 345.030639 122.018538) (xy 345.011766 122.057737) + (xy 345.011442 122.058539) (xy 345.004018 122.07401) (xy 344.955901 122.250154) (xy 344.955901 122.250156) + (xy 344.940465 122.432106) (xy 340.1375 122.432106) (xy 340.1375 114.996075) (xy 340.157185 114.929036) + (xy 340.209989 114.883281) (xy 340.213999 114.881534) (xy 340.289179 114.850394) (xy 340.420289 114.762789) + (xy 340.531789 114.651289) (xy 340.619394 114.520179) (xy 340.636538 114.478789) (xy 340.650432 114.445247) + (xy 340.694273 114.390844) (xy 340.760567 114.368779) (xy 340.764993 114.3687) (xy 341.212149 114.3687) + (xy 341.279188 114.388385) (xy 341.324943 114.441189) (xy 341.335088 114.476514) (xy 341.346295 114.561638) + (xy 341.419259 114.833943) (xy 341.527135 115.094379) (xy 341.52714 115.09439) (xy 341.668083 115.338509) + (xy 341.668094 115.338525) (xy 341.798838 115.508914) (xy 341.824032 115.574083) (xy 341.809994 115.642528) + (xy 341.76118 115.692517) (xy 341.756758 115.694884) (xy 341.626313 115.76135) (xy 341.489365 115.860848) + (xy 341.48936 115.860852) (xy 341.369652 115.98056) (xy 341.369648 115.980565) (xy 341.270152 116.117511) + (xy 341.193296 116.268346) (xy 341.140981 116.429352) (xy 341.1145 116.59655) (xy 341.1145 116.765849) + (xy 341.140981 116.933047) (xy 341.193296 117.094053) (xy 341.270152 117.244888) (xy 341.369648 117.381834) + (xy 341.369651 117.381838) (xy 341.48936 117.501547) (xy 341.489365 117.501551) (xy 341.569244 117.559586) + (xy 341.626315 117.60105) (xy 341.722425 117.65002) (xy 341.777146 117.677903) (xy 341.777148 117.677903) + (xy 341.777151 117.677905) (xy 341.86345 117.705945) (xy 341.938152 117.730218) (xy 342.105351 117.7567) + (xy 342.105356 117.7567) (xy 342.274649 117.7567) (xy 342.441847 117.730218) (xy 342.602849 117.677905) + (xy 342.753685 117.60105) (xy 342.890641 117.501546) (xy 343.010346 117.381841) (xy 343.010346 117.38184) + (xy 343.010349 117.381838) (xy 343.010351 117.381834) (xy 343.031179 117.353167) (xy 343.10985 117.244885) + (xy 343.186705 117.094049) (xy 343.239018 116.933047) (xy 343.2655 116.765849) (xy 343.2655 116.59655) + (xy 343.239928 116.435098) (xy 343.248882 116.365805) (xy 343.293879 116.312353) (xy 343.36063 116.291713) + (xy 343.362401 116.2917) (xy 343.600944 116.2917) (xy 343.600951 116.2917) (xy 343.880442 116.254904) + (xy 344.152739 116.181942) (xy 344.413183 116.074063) (xy 344.657317 115.933112) (xy 344.880965 115.7615) + (xy 345.0803 115.562165) (xy 345.147992 115.473946) (xy 345.20442 115.432744) (xy 345.274166 115.428589) + (xy 345.335086 115.462801) (xy 345.367839 115.524518) (xy 345.362026 115.594146) (xy 345.353755 115.611433) + (xy 345.297683 115.708551) (xy 345.297675 115.708568) (xy 345.187597 115.974321) (xy 345.113146 116.252176) + (xy 345.075601 116.537361) (xy 345.0756 116.537377) (xy 345.0756 116.825022) (xy 345.075601 116.825038) + (xy 345.113146 117.110223) (xy 345.187597 117.388078) (xy 345.297675 117.653831) (xy 345.297683 117.653848) + (xy 345.441504 117.902951) (xy 345.441515 117.902967) (xy 345.616621 118.131171) (xy 345.616627 118.131178) + (xy 345.820021 118.334572) (xy 345.820027 118.334577) (xy 346.048241 118.509691) (xy 346.048248 118.509695) + (xy 346.297351 118.653516) (xy 346.297356 118.653518) (xy 346.297359 118.65352) (xy 346.297363 118.653521) + (xy 346.297368 118.653524) (xy 346.344808 118.673174) (xy 346.56312 118.763602) (xy 346.840975 118.838053) + (xy 347.126171 118.8756) (xy 347.126178 118.8756) (xy 347.413822 118.8756) (xy 347.413829 118.8756) + (xy 347.699025 118.838053) (xy 347.97688 118.763602) (xy 348.242641 118.65352) (xy 348.245056 118.652126) + (xy 348.359067 118.586301) (xy 348.491759 118.509691) (xy 348.719973 118.334577) (xy 348.923377 118.131173) + (xy 349.098491 117.902959) (xy 349.24232 117.653841) (xy 349.352402 117.38808) (xy 349.426853 117.110225) + (xy 349.4644 116.825029) (xy 349.4644 116.59655) (xy 351.2745 116.59655) (xy 351.2745 116.765849) + (xy 351.300981 116.933047) (xy 351.353296 117.094053) (xy 351.430152 117.244888) (xy 351.529648 117.381834) + (xy 351.529651 117.381838) (xy 351.64936 117.501547) (xy 351.649365 117.501551) (xy 351.729244 117.559586) + (xy 351.786315 117.60105) (xy 351.882425 117.65002) (xy 351.937146 117.677903) (xy 351.937148 117.677903) + (xy 351.937151 117.677905) (xy 352.02345 117.705945) (xy 352.098152 117.730218) (xy 352.265351 117.7567) + (xy 352.265356 117.7567) (xy 352.434649 117.7567) (xy 352.601847 117.730218) (xy 352.762849 117.677905) + (xy 352.913685 117.60105) (xy 353.050641 117.501546) (xy 353.170346 117.381841) (xy 353.170346 117.38184) + (xy 353.170349 117.381838) (xy 353.170351 117.381834) (xy 353.191179 117.353167) (xy 353.26985 117.244885) + (xy 353.346705 117.094049) (xy 353.399018 116.933047) (xy 353.4255 116.765849) (xy 353.4255 116.59655) + (xy 353.399018 116.429352) (xy 353.372275 116.347046) (xy 353.346705 116.268351) (xy 353.346703 116.268348) + (xy 353.346703 116.268346) (xy 353.296015 116.168867) (xy 353.26985 116.117515) (xy 353.238281 116.074064) + (xy 353.170351 115.980565) (xy 353.170347 115.98056) (xy 353.050639 115.860852) (xy 353.050634 115.860848) + (xy 352.913688 115.761352) (xy 352.913687 115.761351) (xy 352.913685 115.76135) (xy 352.864398 115.736237) + (xy 352.762853 115.684496) (xy 352.601847 115.632181) (xy 352.434649 115.6057) (xy 352.434644 115.6057) + (xy 352.265356 115.6057) (xy 352.265351 115.6057) (xy 352.098152 115.632181) (xy 351.937146 115.684496) + (xy 351.786311 115.761352) (xy 351.649365 115.860848) (xy 351.64936 115.860852) (xy 351.529652 115.98056) + (xy 351.529648 115.980565) (xy 351.430152 116.117511) (xy 351.353296 116.268346) (xy 351.300981 116.429352) + (xy 351.2745 116.59655) (xy 349.4644 116.59655) (xy 349.4644 116.537371) (xy 349.426853 116.252175) + (xy 349.352402 115.97432) (xy 349.264705 115.762601) (xy 349.242324 115.708568) (xy 349.242316 115.708551) + (xy 349.098495 115.459448) (xy 349.098491 115.459441) (xy 348.957073 115.275141) (xy 348.923378 115.231228) + (xy 348.923372 115.231221) (xy 348.719978 115.027827) (xy 348.719971 115.027821) (xy 348.491767 114.852715) + (xy 348.491765 114.852713) (xy 348.491759 114.852709) (xy 348.491754 114.852706) (xy 348.491751 114.852704) + (xy 348.242648 114.708883) (xy 348.242631 114.708875) (xy 347.976878 114.598797) (xy 347.699023 114.524346) + (xy 347.413838 114.486801) (xy 347.413835 114.4868) (xy 347.413829 114.4868) (xy 347.126171 114.4868) + (xy 347.126165 114.4868) (xy 347.126161 114.486801) (xy 346.840976 114.524346) (xy 346.563121 114.598797) + (xy 346.297368 114.708875) (xy 346.297351 114.708883) (xy 346.048248 114.852704) (xy 346.048232 114.852715) + (xy 345.820028 115.027821) (xy 345.820021 115.027827) (xy 345.616627 115.231221) (xy 345.54543 115.324007) + (xy 345.489001 115.365209) (xy 345.419255 115.369364) (xy 345.358335 115.335151) (xy 345.325583 115.273434) + (xy 345.331396 115.203807) (xy 345.339661 115.186531) (xy 345.392863 115.094383) (xy 345.500742 114.833939) + (xy 345.573704 114.561642) (xy 345.6105 114.282151) (xy 345.6105 114.000249) (xy 345.573704 113.720758) + (xy 345.500742 113.448461) (xy 345.49376 113.431606) (xy 345.468765 113.371261) (xy 345.392863 113.188017) + (xy 345.392861 113.188014) (xy 345.392859 113.188009) (xy 345.251916 112.94389) (xy 345.251912 112.943883) + (xy 345.0803 112.720235) (xy 345.080298 112.720233) (xy 345.080295 112.720229) (xy 344.88097 112.520904) + (xy 344.856161 112.501867) (xy 344.657317 112.349288) (xy 344.657311 112.349284) (xy 344.657309 112.349283) + (xy 344.41319 112.20834) (xy 344.413179 112.208335) (xy 344.152743 112.100459) (xy 343.880439 112.027495) + (xy 343.600958 111.9907) (xy 343.600951 111.9907) (xy 343.319049 111.9907) (xy 343.319041 111.9907) + (xy 343.03956 112.027495) (xy 342.767256 112.100459) (xy 342.50682 112.208335) (xy 342.506809 112.20834) + (xy 342.26269 112.349283) (xy 342.262682 112.349289) (xy 342.039029 112.520904) (xy 341.839704 112.720229) + (xy 341.668089 112.943882) (xy 341.668083 112.94389) (xy 341.52714 113.188009) (xy 341.527135 113.18802) + (xy 341.419259 113.448456) (xy 341.346295 113.720761) (xy 341.335088 113.805886) (xy 341.306821 113.869783) + (xy 341.248496 113.908253) (xy 341.212149 113.9137) (xy 340.765159 113.9137) (xy 340.69812 113.894015) + (xy 340.652365 113.841211) (xy 340.650598 113.837153) (xy 340.619395 113.761824) (xy 340.619394 113.761821) + (xy 340.619391 113.761816) (xy 340.61939 113.761814) (xy 340.531789 113.630711) (xy 340.531786 113.630707) + (xy 340.420292 113.519213) (xy 340.420288 113.51921) (xy 340.289185 113.431609) (xy 340.289175 113.431604) + (xy 340.214047 113.400485) (xy 340.159644 113.356644) (xy 340.137579 113.29035) (xy 340.1375 113.285924) + (xy 340.1375 111.460241) (xy 347.6595 111.460241) (xy 347.6595 111.742158) (xy 347.696295 112.021639) + (xy 347.769259 112.293943) (xy 347.877135 112.554379) (xy 347.87714 112.55439) (xy 348.018083 112.798509) + (xy 348.018088 112.798517) (xy 348.136074 112.952278) (xy 348.189704 113.02217) (xy 348.389029 113.221495) + (xy 348.389033 113.221498) (xy 348.389035 113.2215) (xy 348.612683 113.393112) (xy 348.61269 113.393116) + (xy 348.856809 113.534059) (xy 348.856814 113.534061) (xy 348.856817 113.534063) (xy 348.964834 113.578805) + (xy 349.082486 113.627538) (xy 349.117261 113.641942) (xy 349.389558 113.714904) (xy 349.669049 113.7517) + (xy 349.669056 113.7517) (xy 349.950944 113.7517) (xy 349.950951 113.7517) (xy 350.230442 113.714904) + (xy 350.502739 113.641942) (xy 350.763183 113.534063) (xy 351.007317 113.393112) (xy 351.230965 113.2215) + (xy 351.4303 113.022165) (xy 351.601912 112.798517) (xy 351.742863 112.554383) (xy 351.850742 112.293939) + (xy 351.923704 112.021642) (xy 351.9605 111.742151) (xy 351.9605 111.460249) (xy 351.923704 111.180758) + (xy 351.850742 110.908461) (xy 351.84376 110.891606) (xy 351.818765 110.831261) (xy 351.742863 110.648017) + (xy 351.742861 110.648014) (xy 351.742859 110.648009) (xy 351.601916 110.40389) (xy 351.601912 110.403883) + (xy 351.4303 110.180235) (xy 351.430298 110.180233) (xy 351.430295 110.180229) (xy 351.23097 109.980904) + (xy 351.230965 109.9809) (xy 351.007317 109.809288) (xy 351.007311 109.809284) (xy 351.007309 109.809283) + (xy 350.76319 109.66834) (xy 350.763179 109.668335) (xy 350.502743 109.560459) (xy 350.230439 109.487495) + (xy 349.950958 109.4507) (xy 349.950951 109.4507) (xy 349.669049 109.4507) (xy 349.669041 109.4507) + (xy 349.38956 109.487495) (xy 349.117256 109.560459) (xy 348.85682 109.668335) (xy 348.856809 109.66834) + (xy 348.61269 109.809283) (xy 348.612684 109.809287) (xy 348.612683 109.809288) (xy 348.565169 109.845747) + (xy 348.389029 109.980904) (xy 348.189704 110.180229) (xy 348.076381 110.327914) (xy 348.029327 110.389237) + (xy 348.018089 110.403882) (xy 348.018083 110.40389) (xy 347.87714 110.648009) (xy 347.877135 110.64802) + (xy 347.769259 110.908456) (xy 347.696295 111.18076) (xy 347.6595 111.460241) (xy 340.1375 111.460241) + (xy 340.1375 103.382106) (xy 344.940465 103.382106) (xy 344.95759 103.55739) (xy 344.958221 103.563842) + (xy 344.973685 103.617738) (xy 345.00858 103.739361) (xy 345.08988 103.902863) (xy 345.089881 103.902865) + (xy 345.089883 103.902868) (xy 345.140128 103.969866) (xy 345.199438 104.048952) (xy 345.199439 104.048953) + (xy 345.19944 104.048954) (xy 345.333632 104.172795) (xy 345.488025 104.270297) (xy 345.618267 104.322506) + (xy 345.657514 104.338239) (xy 345.657515 104.338239) (xy 345.657517 104.33824) (xy 345.836508 104.374379) + (xy 345.836502 104.374379) (xy 345.852822 104.374659) (xy 346.019084 104.37752) (xy 346.199212 104.347558) + (xy 346.254707 104.327498) (xy 346.370936 104.285485) (xy 346.370937 104.285483) (xy 346.37094 104.285483) + (xy 346.385975 104.27672) (xy 346.392659 104.272835) (xy 346.39295 104.272757) (xy 346.420833 104.25646) + (xy 346.420951 104.256392) (xy 346.424168 104.255601) (xy 346.483262 104.239599) (xy 347.964392 104.239599) + (xy 347.964514 104.239606) (xy 347.972605 104.239605) (xy 347.972608 104.239606) (xy 348.004742 104.239602) + (xy 348.067304 104.256534) (xy 348.09513 104.272791) (xy 348.095132 104.272791) (xy 348.10128 104.276383) + (xy 348.102935 104.277208) (xy 348.117078 104.28545) (xy 348.2888 104.347521) (xy 348.468921 104.377482) + (xy 348.648598 104.37439) (xy 348.651491 104.374341) (xy 348.830466 104.338205) (xy 348.830469 104.338203) + (xy 348.830474 104.338203) (xy 348.99996 104.270262) (xy 349.154346 104.172763) (xy 349.160998 104.166625) + (xy 349.28853 104.04893) (xy 349.288532 104.048928) (xy 349.288533 104.048927) (xy 349.398085 103.902847) + (xy 349.479384 103.739348) (xy 349.529742 103.563833) (xy 349.547497 103.382103) (xy 349.53206 103.20016) + (xy 349.532058 103.200154) (xy 349.517179 103.145685) (xy 349.483943 103.024018) (xy 349.476183 103.007849) + (xy 349.473096 103.001404) (xy 349.473048 103.001146) (xy 349.456671 102.967119) (xy 349.456543 102.96633) + (xy 349.444502 102.913531) (xy 349.444504 102.897337) (xy 349.444507 102.876108) (xy 349.444506 102.876104) + (xy 349.444507 102.868098) (xy 349.444499 102.86796) (xy 349.444499 101.564678) (xy 349.447153 101.553011) + (xy 349.446119 101.544699) (xy 349.456702 101.511036) (xy 349.463067 101.497773) (xy 349.463145 101.497687) + (xy 349.463116 101.497673) (xy 349.463117 101.497671) (xy 349.473074 101.476974) (xy 349.473074 101.476968) + (xy 349.476455 101.469942) (xy 349.476617 101.469538) (xy 349.483983 101.454191) (xy 349.5321 101.278042) + (xy 349.547537 101.096093) (xy 349.529781 100.914355) (xy 349.47942 100.738834) (xy 349.398118 100.57533) + (xy 349.311727 100.460134) (xy 349.288562 100.429245) (xy 349.273161 100.415032) (xy 349.154369 100.305404) + (xy 349.154366 100.305402) (xy 349.154365 100.305401) (xy 349.137752 100.29491) (xy 349.137751 100.294909) + (xy 348.999977 100.207901) (xy 348.970671 100.196153) (xy 349.85075 100.196153) (xy 349.85075 100.353846) + (xy 349.881511 100.508489) (xy 349.881514 100.508501) (xy 349.941852 100.654172) (xy 349.941859 100.654185) + (xy 350.02946 100.785288) (xy 350.029463 100.785292) (xy 350.140957 100.896786) (xy 350.140961 100.896789) + (xy 350.272064 100.98439) (xy 350.272077 100.984397) (xy 350.385651 101.03144) (xy 350.417753 101.044737) + (xy 350.564636 101.073954) (xy 350.572403 101.075499) (xy 350.572406 101.0755) (xy 350.572408 101.0755) + (xy 350.730094 101.0755) (xy 350.730095 101.075499) (xy 350.884747 101.044737) (xy 351.000512 100.996786) + (xy 351.030422 100.984397) (xy 351.030422 100.984396) (xy 351.030429 100.984394) (xy 351.161539 100.896789) + (xy 351.273039 100.785289) (xy 351.360644 100.654179) (xy 351.420987 100.508497) (xy 351.45175 100.353842) + (xy 351.45175 100.196158) (xy 351.45175 100.196155) (xy 351.451749 100.196153) (xy 351.446595 100.170241) + (xy 351.420987 100.041503) (xy 351.420096 100.039351) (xy 351.360647 99.895827) (xy 351.36064 99.895814) + (xy 351.273039 99.764711) (xy 351.273036 99.764707) (xy 351.161542 99.653213) (xy 351.161538 99.65321) + (xy 351.030435 99.565609) (xy 351.030422 99.565602) (xy 350.884751 99.505264) (xy 350.884739 99.505261) + (xy 350.730095 99.4745) (xy 350.730092 99.4745) (xy 350.572408 99.4745) (xy 350.572405 99.4745) + (xy 350.41776 99.505261) (xy 350.417748 99.505264) (xy 350.272077 99.565602) (xy 350.272064 99.565609) + (xy 350.140961 99.65321) (xy 350.140957 99.653213) (xy 350.029463 99.764707) (xy 350.02946 99.764711) + (xy 349.941859 99.895814) (xy 349.941852 99.895827) (xy 349.881514 100.041498) (xy 349.881511 100.04151) + (xy 349.85075 100.196153) (xy 348.970671 100.196153) (xy 348.830487 100.139958) (xy 348.830477 100.139956) + (xy 348.651492 100.103818) (xy 348.651499 100.103818) (xy 348.479794 100.100865) (xy 348.468918 100.100678) + (xy 348.468917 100.100678) (xy 348.468914 100.100678) (xy 348.288797 100.130638) (xy 348.288784 100.130641) + (xy 348.117063 100.192713) (xy 348.102548 100.20117) (xy 348.102463 100.201219) (xy 348.095376 100.20534) + (xy 348.09513 100.205408) (xy 348.067338 100.221644) (xy 348.06709 100.221789) (xy 348.064363 100.222459) + (xy 348.004746 100.238596) (xy 347.964401 100.238593) (xy 347.964297 100.2386) (xy 346.523596 100.2386) + (xy 346.515414 100.238598) (xy 346.515392 100.238593) (xy 346.485465 100.238595) (xy 346.483228 100.238595) + (xy 346.482946 100.238512) (xy 346.420693 100.221662) (xy 346.392871 100.205408) (xy 346.386805 100.201864) + (xy 346.385107 100.201017) (xy 346.374845 100.195037) (xy 346.370921 100.19275) (xy 346.199197 100.130678) + (xy 346.199191 100.130677) (xy 346.019081 100.100719) (xy 346.019078 100.100719) (xy 346.010539 100.100865) + (xy 345.836507 100.103859) (xy 345.657534 100.139994) (xy 345.657523 100.139997) (xy 345.488042 100.207937) + (xy 345.488041 100.207937) (xy 345.333661 100.305432) (xy 345.333658 100.305434) (xy 345.199467 100.429273) + (xy 345.089915 100.575354) (xy 345.00862 100.738844) (xy 345.008619 100.738847) (xy 345.008618 100.73885) + (xy 344.989935 100.803965) (xy 344.958258 100.914365) (xy 344.94053 101.095827) (xy 344.940504 101.096093) + (xy 344.943015 101.125691) (xy 344.955403 101.271713) (xy 344.95594 101.278035) (xy 344.989028 101.399162) + (xy 345.004056 101.454178) (xy 345.00406 101.454188) (xy 345.011298 101.46927) (xy 345.01134 101.469356) + (xy 345.014923 101.476838) (xy 345.014981 101.47714) (xy 345.031299 101.511029) (xy 345.031336 101.511106) + (xy 345.03148 101.511995) (xy 345.043501 101.564669) (xy 345.043501 102.913522) (xy 345.031307 102.967145) + (xy 345.030719 102.968371) (xy 345.030639 102.968538) (xy 345.011766 103.007737) (xy 345.011442 103.008539) + (xy 345.004018 103.02401) (xy 344.955901 103.200154) (xy 344.955901 103.200156) (xy 344.942776 103.354864) + (xy 344.940521 103.381451) (xy 344.940465 103.382106) (xy 340.1375 103.382106) (xy 340.1375 97.54655) + (xy 341.1145 97.54655) (xy 341.1145 97.715849) (xy 341.140981 97.883047) (xy 341.193296 98.044053) + (xy 341.270152 98.194888) (xy 341.369648 98.331834) (xy 341.369652 98.331839) (xy 341.48936 98.451547) + (xy 341.489365 98.451551) (xy 341.566373 98.5075) (xy 341.626315 98.55105) (xy 341.719641 98.598602) + (xy 341.777146 98.627903) (xy 341.777148 98.627903) (xy 341.777151 98.627905) (xy 341.86135 98.655263) + (xy 341.938152 98.680218) (xy 342.105351 98.7067) (xy 342.105356 98.7067) (xy 342.274649 98.7067) + (xy 342.441847 98.680218) (xy 342.602849 98.627905) (xy 342.753685 98.55105) (xy 342.890641 98.451546) + (xy 343.010346 98.331841) (xy 343.10985 98.194885) (xy 343.186705 98.044049) (xy 343.239018 97.883047) + (xy 343.248883 97.820763) (xy 343.2655 97.715849) (xy 343.2655 97.54655) (xy 343.239928 97.385098) + (xy 343.248882 97.315805) (xy 343.293879 97.262353) (xy 343.36063 97.241713) (xy 343.362401 97.2417) + (xy 343.600944 97.2417) (xy 343.600951 97.2417) (xy 343.880442 97.204904) (xy 344.152739 97.131942) + (xy 344.413183 97.024063) (xy 344.657317 96.883112) (xy 344.880965 96.7115) (xy 345.0803 96.512165) + (xy 345.147992 96.423946) (xy 345.20442 96.382744) (xy 345.274166 96.378589) (xy 345.335086 96.412801) + (xy 345.367839 96.474518) (xy 345.362026 96.544146) (xy 345.353755 96.561433) (xy 345.297683 96.658551) + (xy 345.297675 96.658568) (xy 345.187597 96.924321) (xy 345.113146 97.202176) (xy 345.075601 97.487361) + (xy 345.0756 97.487377) (xy 345.0756 97.775022) (xy 345.075601 97.775038) (xy 345.113146 98.060223) + (xy 345.187597 98.338078) (xy 345.297675 98.603831) (xy 345.297683 98.603848) (xy 345.441504 98.852951) + (xy 345.441515 98.852967) (xy 345.616621 99.081171) (xy 345.616627 99.081178) (xy 345.820021 99.284572) + (xy 345.820028 99.284578) (xy 345.953307 99.386846) (xy 346.048241 99.459691) (xy 346.048248 99.459695) + (xy 346.297351 99.603516) (xy 346.297356 99.603518) (xy 346.297359 99.60352) (xy 346.297363 99.603521) + (xy 346.297368 99.603524) (xy 346.339977 99.621173) (xy 346.56312 99.713602) (xy 346.840975 99.788053) + (xy 347.126171 99.8256) (xy 347.126178 99.8256) (xy 347.413822 99.8256) (xy 347.413829 99.8256) + (xy 347.699025 99.788053) (xy 347.97688 99.713602) (xy 348.242641 99.60352) (xy 348.491759 99.459691) + (xy 348.719973 99.284577) (xy 348.923377 99.081173) (xy 349.098491 98.852959) (xy 349.24232 98.603841) + (xy 349.352402 98.33808) (xy 349.426853 98.060225) (xy 349.4644 97.775029) (xy 349.4644 97.487371) + (xy 349.426853 97.202175) (xy 349.352402 96.92432) (xy 349.24232 96.658559) (xy 349.242318 96.658556) + (xy 349.242316 96.658551) (xy 349.098495 96.409448) (xy 349.098491 96.409441) (xy 348.994569 96.274007) + (xy 348.923378 96.181228) (xy 348.923372 96.181221) (xy 348.719978 95.977827) (xy 348.719971 95.977821) + (xy 348.491767 95.802715) (xy 348.491765 95.802713) (xy 348.491759 95.802709) (xy 348.491754 95.802706) + (xy 348.491751 95.802704) (xy 348.242648 95.658883) (xy 348.242631 95.658875) (xy 347.976878 95.548797) + (xy 347.699023 95.474346) (xy 347.413838 95.436801) (xy 347.413835 95.4368) (xy 347.413829 95.4368) + (xy 347.126171 95.4368) (xy 347.126165 95.4368) (xy 347.126161 95.436801) (xy 346.840976 95.474346) + (xy 346.563121 95.548797) (xy 346.297368 95.658875) (xy 346.297351 95.658883) (xy 346.048248 95.802704) + (xy 346.048232 95.802715) (xy 345.820028 95.977821) (xy 345.820021 95.977827) (xy 345.616627 96.181221) + (xy 345.54543 96.274007) (xy 345.489001 96.315209) (xy 345.419255 96.319364) (xy 345.358335 96.285151) + (xy 345.325583 96.223434) (xy 345.331396 96.153807) (xy 345.339661 96.136531) (xy 345.392863 96.044383) + (xy 345.500742 95.783939) (xy 345.573704 95.511642) (xy 345.6105 95.232151) (xy 345.6105 94.950249) + (xy 345.573704 94.670758) (xy 345.500742 94.398461) (xy 345.493842 94.381804) (xy 345.468849 94.321464) + (xy 345.392863 94.138017) (xy 345.392861 94.138014) (xy 345.392859 94.138009) (xy 345.251916 93.89389) + (xy 345.251912 93.893883) (xy 345.0803 93.670235) (xy 345.080298 93.670233) (xy 345.080295 93.670229) + (xy 344.88097 93.470904) (xy 344.856421 93.452067) (xy 344.657317 93.299288) (xy 344.657311 93.299284) + (xy 344.657309 93.299283) (xy 344.41319 93.15834) (xy 344.413179 93.158335) (xy 344.152743 93.050459) + (xy 343.880439 92.977495) (xy 343.600958 92.9407) (xy 343.600951 92.9407) (xy 343.319049 92.9407) + (xy 343.319041 92.9407) (xy 343.03956 92.977495) (xy 342.767256 93.050459) (xy 342.50682 93.158335) + (xy 342.506809 93.15834) (xy 342.26269 93.299283) (xy 342.262684 93.299287) (xy 342.262683 93.299288) + (xy 342.200901 93.346695) (xy 342.039029 93.470904) (xy 341.839704 93.670229) (xy 341.715814 93.831685) + (xy 341.682427 93.875197) (xy 341.668089 93.893882) (xy 341.668083 93.89389) (xy 341.52714 94.138009) + (xy 341.527135 94.13802) (xy 341.419259 94.398456) (xy 341.346295 94.67076) (xy 341.3095 94.950241) + (xy 341.3095 95.232158) (xy 341.346295 95.511639) (xy 341.419259 95.783943) (xy 341.527135 96.044379) + (xy 341.52714 96.04439) (xy 341.668083 96.288509) (xy 341.668094 96.288525) (xy 341.798838 96.458914) + (xy 341.824032 96.524083) (xy 341.809994 96.592528) (xy 341.76118 96.642517) (xy 341.756758 96.644884) + (xy 341.626313 96.71135) (xy 341.489365 96.810848) (xy 341.48936 96.810852) (xy 341.369652 96.93056) + (xy 341.369648 96.930565) (xy 341.270152 97.067511) (xy 341.193296 97.218346) (xy 341.140981 97.379352) + (xy 341.1145 97.54655) (xy 340.1375 97.54655) (xy 340.1375 95.946275) (xy 340.157185 95.879236) + (xy 340.209989 95.833481) (xy 340.213999 95.831734) (xy 340.289179 95.800594) (xy 340.420289 95.712989) + (xy 340.531789 95.601489) (xy 340.619394 95.470379) (xy 340.679737 95.324697) (xy 340.7105 95.170042) + (xy 340.7105 95.012358) (xy 340.7105 95.012355) (xy 340.710499 95.012353) (xy 340.679738 94.85771) + (xy 340.679737 94.857703) (xy 340.679735 94.857698) (xy 340.619397 94.712027) (xy 340.61939 94.712014) + (xy 340.531789 94.580911) (xy 340.531786 94.580907) (xy 340.420292 94.469413) (xy 340.420288 94.46941) + (xy 340.289185 94.381809) (xy 340.289172 94.381802) (xy 340.143501 94.321464) (xy 340.143489 94.321461) + (xy 339.988845 94.2907) (xy 339.988842 94.2907) (xy 339.831158 94.2907) (xy 339.831155 94.2907) + (xy 339.67651 94.321461) (xy 339.676498 94.321464) (xy 339.530827 94.381802) (xy 339.530814 94.381809) + (xy 339.399711 94.46941) (xy 339.399707 94.469413) (xy 339.288213 94.580907) (xy 339.28821 94.580911) + (xy 339.200609 94.712014) (xy 339.200602 94.712027) (xy 339.140264 94.857698) (xy 339.140261 94.85771) + (xy 339.1095 95.012353) (xy 326.6615 95.012353) (xy 326.6615 90.505768) (xy 328.10075 90.505768) + (xy 328.10075 90.786631) (xy 328.132192 91.065694) (xy 328.132195 91.065712) (xy 328.194689 91.339517) + (xy 328.194693 91.339529) (xy 328.28745 91.604611) (xy 328.409303 91.857642) (xy 328.409818 91.858461) + (xy 328.558727 92.095448) (xy 328.733834 92.315025) (xy 328.932425 92.513616) (xy 329.152002 92.688723) + (xy 329.389805 92.838145) (xy 329.642842 92.960001) (xy 329.814052 93.01991) (xy 329.90792 93.052756) + (xy 329.907932 93.05276) (xy 330.181741 93.115255) (xy 330.181747 93.115255) (xy 330.181755 93.115257) + (xy 330.32513 93.131411) (xy 330.460819 93.146699) (xy 330.460822 93.1467) (xy 330.460825 93.1467) + (xy 330.741678 93.1467) (xy 330.741679 93.146699) (xy 330.884305 93.130629) (xy 331.020744 93.115257) + (xy 331.020749 93.115256) (xy 331.020759 93.115255) (xy 331.294568 93.05276) (xy 331.559658 92.960001) + (xy 331.812695 92.838145) (xy 332.050498 92.688723) (xy 332.270075 92.513616) (xy 332.468666 92.315025) + (xy 332.643773 92.095448) (xy 332.793195 91.857645) (xy 332.915051 91.604608) (xy 333.00781 91.339518) + (xy 333.070305 91.065709) (xy 333.070482 91.064143) (xy 333.085679 90.929255) (xy 333.10175 90.786625) + (xy 333.10175 90.505775) (xy 333.081939 90.329949) (xy 333.070307 90.226705) (xy 333.070304 90.226687) + (xy 333.049774 90.136741) (xy 333.00781 89.952882) (xy 332.998548 89.926414) (xy 332.958622 89.81231) + (xy 332.915051 89.687792) (xy 332.793195 89.434755) (xy 332.643773 89.196952) (xy 332.468666 88.977375) + (xy 332.270075 88.778784) (xy 332.239498 88.7544) (xy 332.193953 88.718079) (xy 332.050498 88.603677) + (xy 331.812695 88.454255) (xy 331.812692 88.454253) (xy 331.559661 88.3324) (xy 331.294579 88.239643) + (xy 331.294567 88.239639) (xy 331.020762 88.177145) (xy 331.020744 88.177142) (xy 330.741681 88.1457) + (xy 330.741675 88.1457) (xy 330.460825 88.1457) (xy 330.460818 88.1457) (xy 330.181755 88.177142) + (xy 330.181737 88.177145) (xy 329.907932 88.239639) (xy 329.90792 88.239643) (xy 329.642838 88.3324) + (xy 329.389807 88.454253) (xy 329.152003 88.603676) (xy 328.932425 88.778783) (xy 328.733833 88.977375) + (xy 328.558726 89.196953) (xy 328.409303 89.434757) (xy 328.28745 89.687788) (xy 328.194693 89.95287) + (xy 328.194689 89.952882) (xy 328.132195 90.226687) (xy 328.132192 90.226705) (xy 328.10075 90.505768) + (xy 326.6615 90.505768) (xy 326.6615 89.846948) (xy 326.6615 89.846947) (xy 326.647154 89.812314) + (xy 326.626867 89.763334) (xy 318.543355 81.679679) (xy 318.509872 81.618357) (xy 318.514857 81.548665) + (xy 318.556728 81.492732) (xy 318.622193 81.468316) (xy 318.631038 81.468) (xy 323.431514 81.468) + (xy 323.449496 81.467679) (xy 323.449509 81.467678) (xy 323.449538 81.467678) (xy 323.458386 81.467362) + (xy 323.476414 81.466395) (xy 323.617006 81.435809) (xy 323.68247 81.411391) (xy 323.808746 81.342437) + (xy 323.837934 81.313247) (xy 323.899253 81.279764) (xy 323.968945 81.284746) (xy 323.991285 81.295746) + (xy 324.000443 81.301464) (xy 324.020859 81.319801) (xy 324.0415 81.336433) (xy 324.08537 81.368067) + (xy 324.166363 81.405055) (xy 324.173192 81.409319) (xy 324.178354 81.415121) (xy 324.1952 81.426817) + (xy 326.633135 83.864668) (xy 326.652956 83.872877) (xy 326.676167 83.882491) (xy 326.67617 83.882492) + (xy 326.676173 83.882493) (xy 326.716747 83.8993) (xy 326.716751 83.8993) (xy 344.4764 83.8993) + (xy 344.543439 83.918985) (xy 344.564081 83.935618) (xy 351.303623 90.675392) (xy 351.337107 90.736715) + (xy 351.332121 90.806407) (xy 351.290249 90.862339) (xy 351.224784 90.886755) (xy 351.156511 90.871902) + (xy 351.140454 90.861447) (xy 351.007325 90.759294) (xy 351.007318 90.759289) (xy 351.007317 90.759288) + (xy 351.007312 90.759285) (xy 351.007309 90.759283) (xy 350.76319 90.61834) (xy 350.763179 90.618335) + (xy 350.502743 90.510459) (xy 350.230439 90.437495) (xy 349.950958 90.4007) (xy 349.950951 90.4007) + (xy 349.669049 90.4007) (xy 349.669041 90.4007) (xy 349.38956 90.437495) (xy 349.117256 90.510459) + (xy 348.85682 90.618335) (xy 348.856809 90.61834) (xy 348.61269 90.759283) (xy 348.612684 90.759287) + (xy 348.612683 90.759288) (xy 348.577057 90.786625) (xy 348.389029 90.930904) (xy 348.189704 91.130229) + (xy 348.120204 91.220803) (xy 348.029112 91.339517) (xy 348.018089 91.353882) (xy 348.018083 91.35389) + (xy 347.87714 91.598009) (xy 347.877135 91.59802) (xy 347.769259 91.858456) (xy 347.696295 92.13076) + (xy 347.6595 92.410241) (xy 347.6595 92.692158) (xy 347.696295 92.971639) (xy 347.769259 93.243943) + (xy 347.877135 93.504379) (xy 347.87714 93.50439) (xy 348.018083 93.748509) (xy 348.018088 93.748517) + (xy 348.1897 93.972165) (xy 348.189704 93.97217) (xy 348.389029 94.171495) (xy 348.389033 94.171498) + (xy 348.389035 94.1715) (xy 348.612683 94.343112) (xy 348.61269 94.343116) (xy 348.856809 94.484059) + (xy 348.856814 94.484061) (xy 348.856817 94.484063) (xy 349.117261 94.591942) (xy 349.389558 94.664904) + (xy 349.669049 94.7017) (xy 349.669056 94.7017) (xy 349.950944 94.7017) (xy 349.950951 94.7017) + (xy 350.230442 94.664904) (xy 350.502739 94.591942) (xy 350.763183 94.484063) (xy 351.007317 94.343112) + (xy 351.230965 94.1715) (xy 351.4303 93.972165) (xy 351.601912 93.748517) (xy 351.742863 93.504383) + (xy 351.850742 93.243939) (xy 351.923704 92.971642) (xy 351.9605 92.692151) (xy 351.9605 92.410249) + (xy 351.923704 92.130758) (xy 351.850742 91.858461) (xy 351.843842 91.841804) (xy 351.818849 91.781464) + (xy 351.742863 91.598017) (xy 351.742861 91.598014) (xy 351.742859 91.598009) (xy 351.601916 91.35389) + (xy 351.601912 91.353883) (xy 351.499794 91.220801) (xy 351.474601 91.155634) (xy 351.488639 91.087189) + (xy 351.537453 91.037199) (xy 351.605544 91.021535) (xy 351.671295 91.045171) (xy 351.685854 91.057636) + (xy 352.63857 92.010385) (xy 352.672054 92.071709) (xy 352.667068 92.141401) (xy 352.653995 92.166946) + (xy 352.650614 92.172005) (xy 352.650602 92.172028) (xy 352.590264 92.317698) (xy 352.590261 92.31771) + (xy 352.5595 92.472353) (xy 352.5595 92.630046) (xy 352.590261 92.784689) (xy 352.590264 92.784701) + (xy 352.650602 92.930372) (xy 352.650609 92.930385) (xy 352.73821 93.061488) (xy 352.738213 93.061492) + (xy 352.849707 93.172986) (xy 352.849711 93.172989) (xy 352.980814 93.26059) (xy 352.980827 93.260597) + (xy 353.076499 93.300225) (xy 353.126503 93.320937) (xy 353.281153 93.351699) (xy 353.281156 93.3517) + (xy 353.281158 93.3517) (xy 353.438844 93.3517) (xy 353.438845 93.351699) (xy 353.464004 93.346695) + (xy 353.512309 93.337087) (xy 353.5819 93.343314) (xy 353.637077 93.386177) (xy 353.660322 93.452067) + (xy 353.6605 93.458704) (xy 353.6605 97.454715) (xy 353.640815 97.521754) (xy 353.588011 97.567509) + (xy 353.518853 97.577453) (xy 353.455297 97.548428) (xy 353.417523 97.48965) (xy 353.414027 97.474113) + (xy 353.399018 97.379352) (xy 353.354296 97.241713) (xy 353.346705 97.218351) (xy 353.346703 97.218348) + (xy 353.346703 97.218346) (xy 353.302676 97.13194) (xy 353.26985 97.067515) (xy 353.238281 97.024064) + (xy 353.170351 96.930565) (xy 353.170347 96.93056) (xy 353.050639 96.810852) (xy 353.050634 96.810848) + (xy 352.913688 96.711352) (xy 352.913687 96.711351) (xy 352.913685 96.71135) (xy 352.866582 96.68735) + (xy 352.762853 96.634496) (xy 352.601847 96.582181) (xy 352.434649 96.5557) (xy 352.434644 96.5557) + (xy 352.265356 96.5557) (xy 352.265351 96.5557) (xy 352.098152 96.582181) (xy 351.937146 96.634496) + (xy 351.786311 96.711352) (xy 351.649365 96.810848) (xy 351.64936 96.810852) (xy 351.529652 96.93056) + (xy 351.529648 96.930565) (xy 351.430152 97.067511) (xy 351.353296 97.218346) (xy 351.300981 97.379352) + (xy 351.2745 97.54655) (xy 351.2745 97.715849) (xy 351.300981 97.883047) (xy 351.353296 98.044053) + (xy 351.430152 98.194888) (xy 351.529648 98.331834) (xy 351.529652 98.331839) (xy 351.64936 98.451547) + (xy 351.649365 98.451551) (xy 351.726373 98.5075) (xy 351.786315 98.55105) (xy 351.879641 98.598602) + (xy 351.937146 98.627903) (xy 351.937148 98.627903) (xy 351.937151 98.627905) (xy 352.02135 98.655263) + (xy 352.098152 98.680218) (xy 352.265351 98.7067) (xy 352.265356 98.7067) (xy 352.434649 98.7067) + (xy 352.601847 98.680218) (xy 352.762849 98.627905) (xy 352.913685 98.55105) (xy 353.050641 98.451546) + (xy 353.170346 98.331841) (xy 353.26985 98.194885) (xy 353.346705 98.044049) (xy 353.399018 97.883047) + (xy 353.408883 97.820763) (xy 353.414027 97.788286) (xy 353.443956 97.725151) (xy 353.503268 97.68822) + (xy 353.57313 97.689218) (xy 353.631363 97.727828) (xy 353.659477 97.791792) (xy 353.6605 97.807684) + (xy 353.6605 110.693495) (xy 353.640815 110.760534) (xy 353.588011 110.806289) (xy 353.518853 110.816233) + (xy 353.51231 110.815113) (xy 353.438842 110.8005) (xy 353.281158 110.8005) (xy 353.281155 110.8005) + (xy 353.12651 110.831261) (xy 353.126498 110.831264) (xy 352.980827 110.891602) (xy 352.980814 110.891609) + (xy 352.849711 110.97921) (xy 352.849707 110.979213) (xy 352.738213 111.090707) (xy 352.73821 111.090711) + (xy 352.650609 111.221814) (xy 352.650602 111.221827) (xy 352.590264 111.367498) (xy 352.590261 111.36751) + (xy 352.5595 111.522153) (xy 352.5595 111.679846) (xy 352.590261 111.834489) (xy 352.590264 111.834501) + (xy 352.650602 111.980172) (xy 352.650609 111.980185) (xy 352.73821 112.111288) (xy 352.738213 112.111292) + (xy 352.849707 112.222786) (xy 352.849711 112.222789) (xy 352.980814 112.31039) (xy 352.980827 112.310397) + (xy 353.126498 112.370735) (xy 353.126503 112.370737) (xy 353.281153 112.401499) (xy 353.281156 112.4015) + (xy 353.281158 112.4015) (xy 353.438844 112.4015) (xy 353.438845 112.401499) (xy 353.593497 112.370737) + (xy 353.739179 112.310394) (xy 353.739185 112.31039) (xy 353.795609 112.272689) (xy 353.862286 112.251811) + (xy 353.929666 112.270295) (xy 353.976357 112.322274) (xy 353.9885 112.375791) (xy 353.9885 129.649404) + (xy 353.979855 129.678844) (xy 353.973332 129.708831) (xy 353.969577 129.713846) (xy 353.968815 129.716443) + (xy 353.952185 129.73708) (xy 353.86774 129.821526) (xy 353.803762 129.885504) (xy 353.742439 129.918988) + (xy 353.672747 129.914004) (xy 353.668629 129.912383) (xy 353.593501 129.881264) (xy 353.593489 129.881261) + (xy 353.438845 129.8505) (xy 353.438842 129.8505) (xy 353.281158 129.8505) (xy 353.281155 129.8505) + (xy 353.12651 129.881261) (xy 353.126498 129.881264) (xy 352.980827 129.941602) (xy 352.980814 129.941609) + (xy 352.849711 130.02921) (xy 352.849707 130.029213) (xy 352.738213 130.140707) (xy 352.73821 130.140711) + (xy 352.650609 130.271814) (xy 352.650602 130.271827) (xy 352.590264 130.417498) (xy 352.590261 130.41751) + (xy 352.5595 130.572153) (xy 352.5595 130.729846) (xy 352.590261 130.884489) (xy 352.590264 130.884501) + (xy 352.650602 131.030172) (xy 352.650609 131.030185) (xy 352.73821 131.161288) (xy 352.738213 131.161292) + (xy 352.849707 131.272786) (xy 352.849711 131.272789) (xy 352.980814 131.36039) (xy 352.980827 131.360397) + (xy 353.122679 131.419153) (xy 353.126503 131.420737) (xy 353.281153 131.451499) (xy 353.281156 131.4515) + (xy 353.281158 131.4515) (xy 353.438844 131.4515) (xy 353.438845 131.451499) (xy 353.593497 131.420737) + (xy 353.739179 131.360394) (xy 353.870289 131.272789) (xy 353.981789 131.161289) (xy 354.069394 131.030179) + (xy 354.077938 131.00955) (xy 354.121779 130.955147) (xy 354.188072 130.933081) (xy 354.255772 130.950359) + (xy 354.303383 131.001496) (xy 354.3165 131.057002) (xy 354.3165 148.371404) (xy 354.296815 148.438443) + (xy 354.280181 148.459085) (xy 353.803762 148.935503) (xy 353.742439 148.968988) (xy 353.672747 148.964004) + (xy 353.668629 148.962383) (xy 353.593501 148.931264) (xy 353.593489 148.931261) (xy 353.438845 148.9005) + (xy 353.438842 148.9005) (xy 353.281158 148.9005) (xy 353.281155 148.9005) (xy 353.12651 148.931261) + (xy 353.126498 148.931264) (xy 352.980827 148.991602) (xy 352.980814 148.991609) (xy 352.849711 149.07921) + (xy 352.849707 149.079213) (xy 352.738213 149.190707) (xy 352.73821 149.190711) (xy 352.650609 149.321814) + (xy 352.650602 149.321827) (xy 352.590264 149.467498) (xy 352.590261 149.46751) (xy 352.5595 149.622153) + (xy 352.5595 149.779846) (xy 352.590261 149.934489) (xy 352.590264 149.934501) (xy 352.650602 150.080172) + (xy 352.650609 150.080185) (xy 352.73821 150.211288) (xy 352.738213 150.211292) (xy 352.849707 150.322786) + (xy 352.849711 150.322789) (xy 352.980814 150.41039) (xy 352.980827 150.410397) (xy 353.126498 150.470735) + (xy 353.126503 150.470737) (xy 353.281153 150.501499) (xy 353.281156 150.5015) (xy 353.281158 150.5015) + (xy 353.438844 150.5015) (xy 353.438845 150.501499) (xy 353.593497 150.470737) (xy 353.739179 150.410394) + (xy 353.870289 150.322789) (xy 353.981789 150.211289) (xy 354.069394 150.080179) (xy 354.129737 149.934497) + (xy 354.1605 149.779842) (xy 354.1605 149.622158) (xy 354.1605 149.622155) (xy 354.160499 149.622153) + (xy 354.14856 149.562132) (xy 354.129737 149.467503) (xy 354.098614 149.392365) (xy 354.091146 149.322901) + (xy 354.12242 149.260422) (xy 354.125464 149.257267) (xy 354.43282 148.949912) (xy 354.494142 148.916428) + (xy 354.563834 148.921412) (xy 354.619767 148.963284) (xy 354.644184 149.028748) (xy 354.6445 149.037594) + (xy 354.6445 167.093404) (xy 354.624815 167.160443) (xy 354.608181 167.181085) (xy 353.803762 167.985503) + (xy 353.742439 168.018988) (xy 353.672747 168.014004) (xy 353.668629 168.012383) (xy 353.593501 167.981264) + (xy 353.593489 167.981261) (xy 353.438845 167.9505) (xy 353.438842 167.9505) (xy 353.281158 167.9505) + (xy 353.281155 167.9505) (xy 353.12651 167.981261) (xy 353.126498 167.981264) (xy 352.980827 168.041602) + (xy 352.980814 168.041609) (xy 352.849711 168.12921) (xy 352.849707 168.129213) (xy 352.738213 168.240707) + (xy 352.73821 168.240711) (xy 352.650609 168.371814) (xy 352.650603 168.371826) (xy 352.590264 168.517498) + (xy 352.590261 168.51751) (xy 352.5595 168.672153) (xy 352.5595 168.829846) (xy 352.590261 168.984489) + (xy 352.590264 168.984501) (xy 352.650602 169.130172) (xy 352.650609 169.130185) (xy 352.73821 169.261288) + (xy 352.738213 169.261292) (xy 352.849707 169.372786) (xy 352.849711 169.372789) (xy 352.980814 169.46039) + (xy 352.980827 169.460397) (xy 353.084063 169.503158) (xy 353.126503 169.520737) (xy 353.281153 169.551499) + (xy 353.281156 169.5515) (xy 353.281158 169.5515) (xy 353.438844 169.5515) (xy 353.438845 169.551499) + (xy 353.593497 169.520737) (xy 353.739179 169.460394) (xy 353.870289 169.372789) (xy 353.981789 169.261289) + (xy 354.069394 169.130179) (xy 354.073443 169.120405) (xy 354.083067 169.097166) (xy 354.129737 168.984497) + (xy 354.1605 168.829842) (xy 354.1605 168.672158) (xy 354.1605 168.672155) (xy 354.160499 168.672153) + (xy 354.158699 168.663106) (xy 354.129737 168.517503) (xy 354.098614 168.442365) (xy 354.091146 168.372901) + (xy 354.12242 168.310422) (xy 354.125463 168.307268) (xy 355.064866 167.367868) (xy 355.064866 167.367866) + (xy 355.064868 167.367865) (xy 355.082183 167.32606) (xy 355.0995 167.284253) (xy 355.0995 167.193747) + (xy 355.0995 91.879647) (xy 355.078107 91.828) (xy 355.064866 91.796033) (xy 345.435869 82.166935) + (xy 345.385694 82.146152) (xy 345.385692 82.146151) (xy 345.352255 82.1323) (xy 345.352253 82.1323) + (xy 335.120595 82.1323) (xy 335.053556 82.112615) (xy 335.032914 82.095981) (xy 334.616614 81.679681) + (xy 334.583129 81.618358) (xy 334.588113 81.548666) (xy 334.629985 81.492733) (xy 334.695449 81.468316) + (xy 334.704295 81.468) (xy 356.2275 81.468) (xy 356.294539 81.487685) (xy 356.340294 81.540489) + (xy 356.3515 81.592) (xy 356.3515 117.888766) (xy 356.351493 117.888783) (xy 356.3515 117.931018) + (xy 356.3515 117.979268) (xy 356.3675 118.017881) (xy 356.367503 118.017898) (xy 356.367506 118.017897) + (xy 356.386133 118.062866) (xy 356.386155 118.062898) (xy 356.418084 118.094818) (xy 356.418099 118.094832) + (xy 356.458766 118.135499) (xy 356.458834 118.135554) (xy 358.47769 120.153778) (xy 358.595454 120.271505) + (xy 358.628948 120.332823) (xy 358.623975 120.402515) (xy 358.618271 120.415494) (xy 358.520245 120.607882) + (xy 358.520243 120.607887) (xy 358.520243 120.607888) (xy 358.499272 120.672429) (xy 358.454553 120.81006) + (xy 358.42493 120.997097) (xy 358.4213 121.020013) (xy 358.4213 121.232587) (xy 358.427125 121.269363) + (xy 358.453611 121.436594) (xy 358.454554 121.442543) (xy 358.508065 121.607233) (xy 358.520244 121.644714) + (xy 358.616751 121.83412) (xy 358.74169 122.006086) (xy 358.892013 122.156409) (xy 359.063982 122.28135) + (xy 359.072746 122.285816) (xy 359.123542 122.333791) (xy 359.140336 122.401612) (xy 359.117798 122.467747) + (xy 359.072746 122.506784) (xy 359.063982 122.511249) (xy 358.892013 122.63619) (xy 358.74169 122.786513) + (xy 358.616751 122.958479) (xy 358.520244 123.147885) (xy 358.454553 123.35006) (xy 358.4213 123.560013) + (xy 358.4213 123.772586) (xy 358.452768 123.971272) (xy 358.454554 123.982543) (xy 358.510008 124.153213) + (xy 358.520244 124.184714) (xy 358.616751 124.37412) (xy 358.74169 124.546086) (xy 358.85523 124.659626) + (xy 358.888715 124.720949) (xy 358.883731 124.790641) (xy 358.841859 124.846574) (xy 358.810883 124.863489) + (xy 358.679469 124.912503) (xy 358.679464 124.912506) (xy 358.564255 124.998752) (xy 358.564252 124.998755) + (xy 358.478006 125.113964) (xy 358.478002 125.113971) (xy 358.427708 125.248817) (xy 358.423787 125.285292) + (xy 358.421301 125.308423) (xy 358.4213 125.308435) (xy 358.4213 127.10417) (xy 358.421301 127.104172) + (xy 358.421922 127.109957) (xy 358.427708 127.163783) (xy 358.478002 127.298628) (xy 358.478006 127.298635) + (xy 358.564252 127.413844) (xy 358.564255 127.413847) (xy 358.679464 127.500093) (xy 358.679471 127.500097) + (xy 358.814317 127.550391) (xy 358.814316 127.550391) (xy 358.821244 127.551135) (xy 358.873927 127.5568) + (xy 360.669672 127.556799) (xy 360.729283 127.550391) (xy 360.864131 127.500096) (xy 360.979346 127.413846) + (xy 361.065596 127.298631) (xy 361.115891 127.163783) (xy 361.1223 127.104173) (xy 361.122299 125.308428) + (xy 361.115891 125.248817) (xy 361.098708 125.202748) (xy 361.065597 125.113971) (xy 361.065593 125.113964) + (xy 360.979347 124.998755) (xy 360.979344 124.998752) (xy 360.864135 124.912506) (xy 360.864128 124.912502) + (xy 360.732717 124.863489) (xy 360.676783 124.821618) (xy 360.652366 124.756153) (xy 360.667218 124.68788) + (xy 360.688363 124.659632) (xy 360.801904 124.546092) (xy 360.926851 124.374116) (xy 361.023357 124.184712) + (xy 361.089046 123.982543) (xy 361.1223 123.772587) (xy 361.1223 123.560013) (xy 361.089046 123.350057) + (xy 361.023357 123.147888) (xy 360.926851 122.958484) (xy 360.926849 122.958481) (xy 360.926848 122.958479) + (xy 360.801909 122.786513) (xy 360.651586 122.63619) (xy 360.47962 122.511251) (xy 360.478915 122.510891) + (xy 360.470854 122.506785) (xy 360.420059 122.458812) (xy 360.403263 122.390992) (xy 360.425799 122.324856) + (xy 360.470854 122.285815) (xy 360.479616 122.281351) (xy 360.522547 122.25016) (xy 360.651586 122.156409) + (xy 360.651588 122.156406) (xy 360.651592 122.156404) (xy 360.801904 122.006092) (xy 360.801906 122.006088) + (xy 360.801909 122.006086) (xy 360.926848 121.83412) (xy 360.926847 121.83412) (xy 360.926851 121.834116) + (xy 361.023357 121.644712) (xy 361.089046 121.442543) (xy 361.1223 121.232587) (xy 361.1223 121.020013) + (xy 361.089046 120.810057) (xy 361.023357 120.607888) (xy 360.926851 120.418484) (xy 360.926849 120.418481) + (xy 360.926848 120.418479) (xy 360.801909 120.246513) (xy 360.651586 120.09619) (xy 360.479617 119.971249) + (xy 360.470304 119.966504) (xy 360.419507 119.91853) (xy 360.402712 119.850709) (xy 360.425249 119.784574) + (xy 360.470307 119.745532) (xy 360.479355 119.740922) (xy 360.533516 119.70157) (xy 360.533517 119.70157) + (xy 359.901208 119.069262) (xy 359.964793 119.052225) (xy 360.078807 118.986399) (xy 360.171899 118.893307) + (xy 360.237725 118.779293) (xy 360.254762 118.715709) (xy 360.88707 119.348017) (xy 360.88707 119.348016) + (xy 360.926422 119.293854) (xy 361.022895 119.104517) (xy 361.088557 118.90243) (xy 361.088557 118.902427) + (xy 361.1218 118.692546) (xy 361.1218 118.480053) (xy 361.088557 118.270172) (xy 361.088557 118.270169) + (xy 361.022895 118.068082) (xy 360.926424 117.878749) (xy 360.88707 117.824582) (xy 360.887069 117.824582) + (xy 360.254762 118.45689) (xy 360.237725 118.393307) (xy 360.171899 118.279293) (xy 360.078807 118.186201) + (xy 359.964793 118.120375) (xy 359.901209 118.103337) (xy 360.533516 117.471028) (xy 360.47935 117.431675) + (xy 360.290017 117.335204) (xy 360.087929 117.269542) (xy 359.878046 117.2363) (xy 359.665554 117.2363) + (xy 359.455672 117.269542) (xy 359.455669 117.269542) (xy 359.253582 117.335204) (xy 359.064239 117.43168) + (xy 359.010082 117.471027) (xy 359.010082 117.471028) (xy 359.642391 118.103337) (xy 359.578807 118.120375) + (xy 359.464793 118.186201) (xy 359.371701 118.279293) (xy 359.305875 118.393307) (xy 359.288837 118.456891) + (xy 358.656528 117.824582) (xy 358.656527 117.824582) (xy 358.61718 117.878739) (xy 358.520704 118.068082) + (xy 358.455042 118.270169) (xy 358.455042 118.270172) (xy 358.4218 118.480053) (xy 358.4218 118.692546) + (xy 358.455042 118.902427) (xy 358.455042 118.90243) (xy 358.520704 119.104517) (xy 358.617179 119.293858) + (xy 358.637067 119.321231) (xy 358.660548 119.387037) (xy 358.644723 119.455091) (xy 358.594618 119.503786) + (xy 358.52614 119.517662) (xy 358.461031 119.492314) (xy 358.449082 119.481812) (xy 356.842832 117.876065) + (xy 356.809338 117.814747) (xy 356.8065 117.78837) (xy 356.8065 81.09757) (xy 356.816307 81.052486) + (xy 356.81529 81.052107) (xy 356.816828 81.047979) (xy 356.816838 81.047959) (xy 356.836523 80.98092) + (xy 356.836524 80.980916) (xy 356.857 80.8385) (xy 356.857 79.675075) (xy 356.85692 79.666056) (xy 356.856841 79.661629) + (xy 356.856733 79.657617) (xy 356.874609 79.590074) (xy 356.926164 79.542917) (xy 356.933218 79.539732) + (xy 356.958179 79.529394) (xy 357.089289 79.441789) (xy 357.200789 79.330289) (xy 357.288394 79.199179) + (xy 357.348737 79.053497) (xy 357.3795 78.898842) (xy 357.3795 78.741158) (xy 357.3795 78.741155) + (xy 357.379499 78.741153) (xy 357.348737 78.586503) (xy 357.323258 78.524991) (xy 357.288397 78.440827) + (xy 357.288395 78.440823) (xy 357.288394 78.440821) (xy 357.219223 78.3373) (xy 357.198346 78.270624) + (xy 357.209531 78.2169) (xy 357.260338 78.105654) (xy 357.280023 78.038615) (xy 357.280024 78.038611) + (xy 357.3005 77.896195) (xy 357.3005 54.89275) (xy 357.288947 54.785294) (xy 357.277741 54.733783) + (xy 357.277637 54.733472) (xy 357.243616 54.631252) (xy 357.243613 54.631246) (xy 357.165828 54.510212) + (xy 357.165825 54.510207) (xy 357.16582 54.510201) (xy 357.120076 54.457409) (xy 357.120072 54.457406) + (xy 357.12007 54.457403) (xy 357.011336 54.363183) (xy 357.011333 54.363181) (xy 357.011331 54.36318) + (xy 356.880465 54.303414) (xy 356.88046 54.303412) (xy 356.880459 54.303412) (xy 356.81342 54.283727) + (xy 356.813422 54.283727) (xy 356.813417 54.283726) (xy 356.751347 54.274802) (xy 356.671 54.26325) + (xy 68.9051 54.26325) (xy 68.838061 54.243565) (xy 68.792306 54.190761) (xy 68.7811 54.13925) (xy 68.7811 53.895856) + (xy 68.742652 53.70257) (xy 68.742651 53.702569) (xy 68.742651 53.702565) (xy 68.712891 53.630717) + (xy 68.667235 53.520492) (xy 68.667228 53.520479) (xy 68.557739 53.356618) (xy 68.557736 53.356614) + (xy 68.418385 53.217263) (xy 68.418381 53.21726) (xy 68.25452 53.107771) (xy 68.254507 53.107764) + (xy 68.072439 53.03235) (xy 68.072427 53.032347) (xy 68.007842 53.0195) (xy 68.007841 53.0195) (xy 67.879143 52.9939) + (xy 67.879141 52.9939) (xy 67.682059 52.9939) (xy 67.682057 52.9939) (xy 67.48877 53.032347) (xy 67.48876 53.03235) + (xy 67.306692 53.107764) (xy 67.306679 53.107771) (xy 67.142818 53.21726) (xy 67.142814 53.217263) + (xy 67.003463 53.356614) (xy 67.00346 53.356618) (xy 66.893971 53.520479) (xy 66.893968 53.520485) + (xy 66.878842 53.557003) (xy 66.835 53.611406) (xy 66.768706 53.63347) (xy 66.701007 53.61619) (xy 66.6766 53.59723) + (xy 66.673266 53.593896) (xy 66.673261 53.593892) (xy 66.553438 53.524713) (xy 66.553437 53.524712) + (xy 66.553436 53.524712) (xy 66.419783 53.4889) (xy 66.281417 53.4889) (xy 66.147764 53.524712) + (xy 66.147761 53.524713) (xy 66.027938 53.593892) (xy 66.027933 53.593896) (xy 65.930096 53.691733) + (xy 65.930092 53.691738) (xy 65.860913 53.811561) (xy 65.860912 53.811564) (xy 65.8251 53.945217) + (xy 65.8251 54.083582) (xy 65.831417 54.107157) (xy 65.829754 54.177006) (xy 65.790591 54.234869) + (xy 65.726363 54.262373) (xy 65.711642 54.26325) (xy 61.209558 54.26325) (xy 61.142519 54.243565) + (xy 61.096764 54.190761) (xy 61.08682 54.121603) (xy 61.089783 54.107157) (xy 61.0961 54.083583) + (xy 61.0961 53.945217) (xy 61.060288 53.811564) (xy 60.991105 53.691735) (xy 60.893265 53.593895) + (xy 60.893264 53.593894) (xy 60.893261 53.593892) (xy 60.773438 53.524713) (xy 60.773437 53.524712) + (xy 60.773436 53.524712) (xy 60.639783 53.4889) (xy 60.501417 53.4889) (xy 60.367764 53.524712) + (xy 60.367761 53.524713) (xy 60.247938 53.593892) (xy 60.24793 53.593898) (xy 60.244594 53.597235) + (xy 60.183269 53.630717) (xy 60.113578 53.625728) (xy 60.057647 53.583854) (xy 60.042356 53.557) + (xy 60.027232 53.520486) (xy 60.027228 53.520479) (xy 59.917739 53.356618) (xy 59.917736 53.356614) + (xy 59.778385 53.217263) (xy 59.778381 53.21726) (xy 59.61452 53.107771) (xy 59.614507 53.107764) + (xy 59.432439 53.03235) (xy 59.432429 53.032347) (xy 59.239143 52.9939) (xy 59.239141 52.9939) (xy 59.042059 52.9939) + (xy 59.042057 52.9939) (xy 58.84877 53.032347) (xy 58.84876 53.03235) (xy 58.666692 53.107764) (xy 58.666679 53.107771) + (xy 58.502818 53.21726) (xy 58.502814 53.217263) (xy 58.363463 53.356614) (xy 58.36346 53.356618) + (xy 58.253971 53.520479) (xy 58.253964 53.520492) (xy 58.17855 53.70256) (xy 58.178547 53.70257) + (xy 58.1401 53.895856) (xy 58.1401 54.13925) (xy 58.120415 54.206289) (xy 58.067611 54.252044) (xy 58.0161 54.26325) + (xy 52.119 54.26325) (xy 52.118991 54.26325) (xy 52.11899 54.263251) (xy 52.011549 54.274802) (xy 52.011537 54.274804) + (xy 51.960027 54.28601) (xy 51.857502 54.320133) (xy 51.857496 54.320136) (xy 51.736462 54.397921) + (xy 51.736451 54.397929) (xy 51.683659 54.443673) (xy 51.589433 54.552414) (xy 51.58943 54.552418) + (xy 51.529664 54.683284) (xy 51.509976 54.750332) (xy 51.504949 54.785299) (xy 51.4895 54.89275) + (xy 45.35175 54.89275) (xy 45.35175 52.90397) (xy 345.279128 52.90397) (xy 345.279128 53.061663) + (xy 345.309889 53.216306) (xy 345.309892 53.216318) (xy 345.37023 53.361989) (xy 345.370237 53.362002) + (xy 345.457838 53.493105) (xy 345.457841 53.493109) (xy 345.569335 53.604603) (xy 345.569339 53.604606) + (xy 345.700442 53.692207) (xy 345.700455 53.692214) (xy 345.846126 53.752552) (xy 345.846131 53.752554) + (xy 346.000781 53.783316) (xy 346.000784 53.783317) (xy 346.000786 53.783317) (xy 346.158472 53.783317) + (xy 346.158473 53.783316) (xy 346.313125 53.752554) (xy 346.458807 53.692211) (xy 346.589917 53.604606) + (xy 346.701417 53.493106) (xy 346.789022 53.361996) (xy 346.849365 53.216314) (xy 346.880128 53.061659) + (xy 346.880128 52.903975) (xy 346.880128 52.903972) (xy 346.880127 52.90397) (xy 346.849366 52.749327) + (xy 346.849365 52.74932) (xy 346.849363 52.749315) (xy 346.789025 52.603644) (xy 346.789018 52.603631) + (xy 346.701417 52.472528) (xy 346.701414 52.472524) (xy 346.58992 52.36103) (xy 346.589916 52.361027) + (xy 346.458813 52.273426) (xy 346.4588 52.273419) (xy 346.313129 52.213081) (xy 346.313117 52.213078) + (xy 346.158473 52.182317) (xy 346.15847 52.182317) (xy 346.000786 52.182317) (xy 346.000783 52.182317) + (xy 345.846138 52.213078) (xy 345.846126 52.213081) (xy 345.700455 52.273419) (xy 345.700442 52.273426) + (xy 345.569339 52.361027) (xy 345.569335 52.36103) (xy 345.457841 52.472524) (xy 345.457838 52.472528) + (xy 345.370237 52.603631) (xy 345.37023 52.603644) (xy 345.309892 52.749315) (xy 345.309889 52.749327) + (xy 345.279128 52.90397) (xy 45.35175 52.90397) (xy 45.35175 50.762943) (xy 58.140099 50.762943) + (xy 58.178547 50.956229) (xy 58.17855 50.956239) (xy 58.253964 51.138307) (xy 58.253971 51.13832) + (xy 58.36346 51.302181) (xy 58.363463 51.302185) (xy 58.502814 51.441536) (xy 58.502818 51.441539) + (xy 58.666679 51.551028) (xy 58.666692 51.551035) (xy 58.84876 51.626449) (xy 58.848765 51.626451) + (xy 58.848769 51.626451) (xy 58.84877 51.626452) (xy 59.042056 51.6649) (xy 59.042059 51.6649) (xy 59.239143 51.6649) + (xy 59.369182 51.639032) (xy 59.432435 51.626451) (xy 59.614514 51.551032) (xy 59.778382 51.441539) + (xy 59.917739 51.302182) (xy 60.027232 51.138314) (xy 60.102651 50.956235) (xy 60.1411 50.762943) + (xy 66.780099 50.762943) (xy 66.818547 50.956229) (xy 66.81855 50.956239) (xy 66.893964 51.138307) + (xy 66.893971 51.13832) (xy 67.00346 51.302181) (xy 67.003463 51.302185) (xy 67.142814 51.441536) + (xy 67.142818 51.441539) (xy 67.306679 51.551028) (xy 67.306692 51.551035) (xy 67.48876 51.626449) + (xy 67.488765 51.626451) (xy 67.488769 51.626451) (xy 67.48877 51.626452) (xy 67.682056 51.6649) + (xy 67.682059 51.6649) (xy 67.879143 51.6649) (xy 68.009182 51.639032) (xy 68.072435 51.626451) + (xy 68.254514 51.551032) (xy 68.418382 51.441539) (xy 68.557739 51.302182) (xy 68.667232 51.138314) + (xy 68.670231 51.131074) (xy 68.686991 51.090613) (xy 195.4245 51.090613) (xy 195.4245 51.303187) + (xy 195.457754 51.513143) (xy 195.49457 51.626452) (xy 195.523444 51.715314) (xy 195.619951 51.90472) + (xy 195.74489 52.076686) (xy 195.895213 52.227009) (xy 196.067179 52.351948) (xy 196.067181 52.351949) + (xy 196.067184 52.351951) (xy 196.256588 52.448457) (xy 196.458757 52.514146) (xy 196.668713 52.5474) + (xy 196.668714 52.5474) (xy 196.881286 52.5474) (xy 196.881287 52.5474) (xy 197.091243 52.514146) + (xy 197.293412 52.448457) (xy 197.482816 52.351951) (xy 197.569478 52.288988) (xy 197.654786 52.227009) + (xy 197.654788 52.227006) (xy 197.654792 52.227004) (xy 197.805104 52.076692) (xy 197.805106 52.076688) + (xy 197.805109 52.076686) (xy 197.930048 51.90472) (xy 197.930047 51.90472) (xy 197.930051 51.904716) + (xy 197.934514 51.895954) (xy 197.982488 51.845159) (xy 198.050308 51.828363) (xy 198.116444 51.850899) + (xy 198.155486 51.895956) (xy 198.159951 51.90472) (xy 198.28489 52.076686) (xy 198.435213 52.227009) + (xy 198.607179 52.351948) (xy 198.607181 52.351949) (xy 198.607184 52.351951) (xy 198.796588 52.448457) + (xy 198.998757 52.514146) (xy 199.208713 52.5474) (xy 199.208714 52.5474) (xy 199.421286 52.5474) + (xy 199.421287 52.5474) (xy 199.631243 52.514146) (xy 199.833412 52.448457) (xy 200.022816 52.351951) + (xy 200.109478 52.288988) (xy 200.194786 52.227009) (xy 200.194788 52.227006) (xy 200.194792 52.227004) + (xy 200.345104 52.076692) (xy 200.345106 52.076688) (xy 200.345109 52.076686) (xy 200.470048 51.90472) + (xy 200.470047 51.90472) (xy 200.470051 51.904716) (xy 200.474514 51.895954) (xy 200.522488 51.845159) + (xy 200.590308 51.828363) (xy 200.656444 51.850899) (xy 200.695486 51.895956) (xy 200.699951 51.90472) + (xy 200.82489 52.076686) (xy 200.975213 52.227009) (xy 201.147179 52.351948) (xy 201.147181 52.351949) + (xy 201.147184 52.351951) (xy 201.336588 52.448457) (xy 201.538757 52.514146) (xy 201.748713 52.5474) + (xy 201.748714 52.5474) (xy 201.961286 52.5474) (xy 201.961287 52.5474) (xy 202.171243 52.514146) + (xy 202.373412 52.448457) (xy 202.562816 52.351951) (xy 202.649478 52.288988) (xy 202.734784 52.22701) + (xy 202.734784 52.227009) (xy 202.734792 52.227004) (xy 202.848717 52.113078) (xy 202.910036 52.079596) + (xy 202.979728 52.08458) (xy 203.035662 52.126451) (xy 203.052577 52.157428) (xy 203.101646 52.288988) + (xy 203.101649 52.288993) (xy 203.187809 52.404087) (xy 203.187812 52.40409) (xy 203.302906 52.49025) + (xy 203.302913 52.490254) (xy 203.43762 52.540496) (xy 203.437627 52.540498) (xy 203.497155 52.546899) + (xy 203.497172 52.5469) (xy 204.145 52.5469) (xy 204.145 51.629912) (xy 204.202007 51.662825) (xy 204.329174 51.6969) + (xy 204.460826 51.6969) (xy 204.587993 51.662825) (xy 204.645 51.629912) (xy 204.645 52.5469) (xy 205.292828 52.5469) + (xy 205.292844 52.546899) (xy 205.352372 52.540498) (xy 205.352379 52.540496) (xy 205.487086 52.490254) + (xy 205.487093 52.49025) (xy 205.602187 52.40409) (xy 205.60219 52.404087) (xy 205.68835 52.288993) + (xy 205.688354 52.288986) (xy 205.738596 52.154279) (xy 205.738598 52.154272) (xy 205.744999 52.094744) + (xy 205.745 52.094727) (xy 205.745 51.4469) (xy 204.828012 51.4469) (xy 204.860925 51.389893) (xy 204.895 51.262726) + (xy 204.895 51.131074) (xy 204.860925 51.003907) (xy 204.828012 50.9469) (xy 205.745 50.9469) (xy 205.745 50.299072) + (xy 205.744999 50.299055) (xy 205.738598 50.239527) (xy 205.738596 50.23952) (xy 205.688354 50.104813) + (xy 205.68835 50.104806) (xy 205.60219 49.989712) (xy 205.602187 49.989709) (xy 205.487093 49.903549) + (xy 205.487086 49.903545) (xy 205.352379 49.853303) (xy 205.352372 49.853301) (xy 205.292844 49.8469) + (xy 204.645 49.8469) (xy 204.645 50.763888) (xy 204.587993 50.730975) (xy 204.460826 50.6969) (xy 204.329174 50.6969) + (xy 204.202007 50.730975) (xy 204.145 50.763888) (xy 204.145 49.8469) (xy 203.497155 49.8469) (xy 203.437627 49.853301) + (xy 203.43762 49.853303) (xy 203.302913 49.903545) (xy 203.302906 49.903549) (xy 203.187812 49.989709) + (xy 203.187809 49.989712) (xy 203.101649 50.104806) (xy 203.101646 50.104812) (xy 203.052577 50.236371) + (xy 203.010705 50.292304) (xy 202.945241 50.316721) (xy 202.876968 50.301869) (xy 202.848714 50.280718) + (xy 202.734786 50.16679) (xy 202.56282 50.041851) (xy 202.373414 49.945344) (xy 202.373413 49.945343) + (xy 202.373412 49.945343) (xy 202.171243 49.879654) (xy 202.171241 49.879653) (xy 202.17124 49.879653) + (xy 202.009957 49.854108) (xy 201.961287 49.8464) (xy 201.748713 49.8464) (xy 201.700042 49.854108) + (xy 201.53876 49.879653) (xy 201.336585 49.945344) (xy 201.147179 50.041851) (xy 200.975213 50.16679) + (xy 200.82489 50.317113) (xy 200.699949 50.489082) (xy 200.695484 50.497846) (xy 200.647509 50.548642) + (xy 200.579688 50.565436) (xy 200.513553 50.542898) (xy 200.474516 50.497846) (xy 200.47005 50.489082) + (xy 200.345109 50.317113) (xy 200.194786 50.16679) (xy 200.02282 50.041851) (xy 199.833414 49.945344) + (xy 199.833413 49.945343) (xy 199.833412 49.945343) (xy 199.631243 49.879654) (xy 199.631241 49.879653) + (xy 199.63124 49.879653) (xy 199.469957 49.854108) (xy 199.421287 49.8464) (xy 199.208713 49.8464) + (xy 199.160042 49.854108) (xy 198.99876 49.879653) (xy 198.796585 49.945344) (xy 198.607179 50.041851) + (xy 198.435213 50.16679) (xy 198.28489 50.317113) (xy 198.159949 50.489082) (xy 198.155484 50.497846) + (xy 198.107509 50.548642) (xy 198.039688 50.565436) (xy 197.973553 50.542898) (xy 197.934516 50.497846) + (xy 197.93005 50.489082) (xy 197.805109 50.317113) (xy 197.654786 50.16679) (xy 197.48282 50.041851) + (xy 197.293414 49.945344) (xy 197.293413 49.945343) (xy 197.293412 49.945343) (xy 197.091243 49.879654) + (xy 197.091241 49.879653) (xy 197.09124 49.879653) (xy 196.929957 49.854108) (xy 196.881287 49.8464) + (xy 196.668713 49.8464) (xy 196.620042 49.854108) (xy 196.45876 49.879653) (xy 196.256585 49.945344) + (xy 196.067179 50.041851) (xy 195.895213 50.16679) (xy 195.74489 50.317113) (xy 195.619951 50.489079) + (xy 195.523444 50.678485) (xy 195.457753 50.88066) (xy 195.445783 50.956239) (xy 195.4245 51.090613) + (xy 68.686991 51.090613) (xy 68.708664 51.038289) (xy 68.742649 50.956239) (xy 68.742651 50.956235) + (xy 68.7811 50.762941) (xy 68.7811 49.965859) (xy 68.7811 49.965856) (xy 68.742652 49.77257) (xy 68.742651 49.772569) + (xy 68.742651 49.772565) (xy 68.742649 49.77256) (xy 68.667235 49.590492) (xy 68.667228 49.590479) + (xy 68.557739 49.426618) (xy 68.557736 49.426614) (xy 68.418385 49.287263) (xy 68.418381 49.28726) + (xy 68.25452 49.177771) (xy 68.254507 49.177764) (xy 68.072439 49.10235) (xy 68.072429 49.102347) + (xy 67.879143 49.0639) (xy 67.879141 49.0639) (xy 67.682059 49.0639) (xy 67.682057 49.0639) (xy 67.48877 49.102347) + (xy 67.48876 49.10235) (xy 67.306692 49.177764) (xy 67.306679 49.177771) (xy 67.142818 49.28726) + (xy 67.142814 49.287263) (xy 67.003463 49.426614) (xy 67.00346 49.426618) (xy 66.893971 49.590479) + (xy 66.893964 49.590492) (xy 66.81855 49.77256) (xy 66.818547 49.77257) (xy 66.7801 49.965856) (xy 66.7801 49.965859) + (xy 66.7801 50.762941) (xy 66.7801 50.762943) (xy 66.780099 50.762943) (xy 60.1411 50.762943) (xy 60.1411 50.762941) + (xy 60.1411 49.965859) (xy 60.1411 49.965856) (xy 60.102652 49.77257) (xy 60.102651 49.772569) (xy 60.102651 49.772565) + (xy 60.102649 49.77256) (xy 60.027235 49.590492) (xy 60.027228 49.590479) (xy 59.917739 49.426618) + (xy 59.917736 49.426614) (xy 59.778385 49.287263) (xy 59.778381 49.28726) (xy 59.61452 49.177771) + (xy 59.614507 49.177764) (xy 59.432439 49.10235) (xy 59.432429 49.102347) (xy 59.239143 49.0639) + (xy 59.239141 49.0639) (xy 59.042059 49.0639) (xy 59.042057 49.0639) (xy 58.84877 49.102347) (xy 58.84876 49.10235) + (xy 58.666692 49.177764) (xy 58.666679 49.177771) (xy 58.502818 49.28726) (xy 58.502814 49.287263) + (xy 58.363463 49.426614) (xy 58.36346 49.426618) (xy 58.253971 49.590479) (xy 58.253964 49.590492) + (xy 58.17855 49.77256) (xy 58.178547 49.77257) (xy 58.1401 49.965856) (xy 58.1401 49.965859) (xy 58.1401 50.762941) + (xy 58.1401 50.762943) (xy 58.140099 50.762943) (xy 45.35175 50.762943) (xy 45.35175 48.2495) (xy 45.371435 48.182461) + (xy 45.424239 48.136706) (xy 45.47575 48.1255) (xy 363.31425 48.1255) + ) + ) + ) + (zone + (net 2) + (net_name "+3.3V") + (layer "F.Cu") + (uuid "64ba6b94-7dc4-4d5b-8cfc-a023f0fb7e02") + (hatch edge 0.5) + (connect_pads + (clearance 0.5) + ) + (min_thickness 0.25) + (filled_areas_thickness no) + (fill yes + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + ) + (polygon + (pts + (xy 51.995 54.76875) (xy 356.795 54.76875) (xy 356.795 80.9625) (xy 51.995 80.9625) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 61.930778 63.895184) (xy 61.95142 63.911818) (xy 62.902872 64.86327) (xy 62.902877 64.863274) + (xy 65.563494 67.523892) (xy 65.563495 67.523893) (xy 65.661707 67.622105) (xy 65.661708 67.622106) + (xy 65.66171 67.622107) (xy 65.72185 67.656828) (xy 65.781993 67.691552) (xy 65.916153 67.7275) + (xy 66.055046 67.7275) (xy 72.978341 67.7275) (xy 73.04538 67.747185) (xy 73.066021 67.763818) (xy 73.589908 68.287706) + (xy 73.637183 68.315) (xy 73.710188 68.35715) (xy 73.710189 68.35715) (xy 73.710192 68.357152) (xy 73.844354 68.393101) + (xy 73.846809 68.393101) (xy 73.848803 68.393686) (xy 73.852414 68.394162) (xy 73.852339 68.394725) + (xy 73.913848 68.412786) (xy 73.959603 68.46559) (xy 73.964515 68.478097) (xy 74.016485 68.634931) + (xy 74.016487 68.634936) (xy 74.039474 68.672204) (xy 74.108588 68.784256) (xy 74.232644 68.908312) + (xy 74.381966 69.000414) (xy 74.463991 69.027594) (xy 74.521434 69.067365) (xy 74.548258 69.131881) + (xy 74.535943 69.200657) (xy 74.488401 69.251857) (xy 74.463992 69.263004) (xy 74.381971 69.290184) + (xy 74.381963 69.290187) (xy 74.232642 69.382289) (xy 74.108589 69.506342) (xy 74.016487 69.655663) + (xy 74.016485 69.655668) (xy 74.005714 69.688174) (xy 73.961301 69.822203) (xy 73.961301 69.822204) + (xy 73.9613 69.822204) (xy 73.9508 69.924983) (xy 73.9508 70.925001) (xy 73.950801 70.925019) (xy 73.9613 71.027796) + (xy 73.961301 71.027799) (xy 74.016485 71.194331) (xy 74.016487 71.194336) (xy 74.03336 71.221692) + (xy 74.108588 71.343656) (xy 74.232644 71.467712) (xy 74.381966 71.559814) (xy 74.548503 71.614999) + (xy 74.651291 71.6255) (xy 75.276308 71.625499) (xy 75.276316 71.625498) (xy 75.276319 71.625498) + (xy 75.332602 71.619748) (xy 75.379097 71.614999) (xy 75.545634 71.559814) (xy 75.694956 71.467712) + (xy 75.788619 71.374049) (xy 75.849942 71.340564) (xy 75.919634 71.345548) (xy 75.963981 71.374049) + (xy 76.057644 71.467712) (xy 76.206966 71.559814) (xy 76.373503 71.614999) (xy 76.476291 71.6255) + (xy 77.101308 71.625499) (xy 77.101316 71.625498) (xy 77.101319 71.625498) (xy 77.157602 71.619748) + (xy 77.204097 71.614999) (xy 77.370634 71.559814) (xy 77.519956 71.467712) (xy 77.644012 71.343656) + (xy 77.736114 71.194334) (xy 77.791299 71.027797) (xy 77.795781 70.983925) (xy 77.798788 70.954497) + (xy 77.825185 70.889805) (xy 77.882366 70.849654) (xy 77.922146 70.8431) (xy 83.123601 70.8431) + (xy 83.19064 70.862785) (xy 83.236395 70.915589) (xy 83.247601 70.9671) (xy 83.247601 71.315869) + (xy 83.247602 71.315881) (xy 83.250198 71.340037) (xy 83.2502 71.340043) (xy 83.25401 71.375484) + (xy 83.304305 71.510332) (xy 83.317408 71.527836) (xy 83.317409 71.527837) (xy 83.348739 71.569688) + (xy 83.373157 71.635152) (xy 83.358306 71.703426) (xy 83.308901 71.752831) (xy 83.249473 71.768) + (xy 83.248101 71.768) (xy 83.248101 71.815844) (xy 83.254502 71.875372) (xy 83.254504 71.875379) + (xy 83.304746 72.010086) (xy 83.30475 72.010093) (xy 83.39091 72.125187) (xy 83.390913 72.12519) + (xy 83.506007 72.21135) (xy 83.506014 72.211354) (xy 83.640721 72.261596) (xy 83.640728 72.261598) + (xy 83.700256 72.267999) (xy 83.700273 72.268) (xy 84.192601 72.268) (xy 84.192601 71.8925) (xy 84.195151 71.883814) + (xy 84.193863 71.874853) (xy 84.204841 71.850812) (xy 84.212286 71.825461) (xy 84.219126 71.819533) + (xy 84.222888 71.811297) (xy 84.245122 71.797007) (xy 84.26509 71.779706) (xy 84.275604 71.777418) + (xy 84.281666 71.773523) (xy 84.316597 71.7685) (xy 84.373402 71.7685) (xy 84.44044 71.788185) (xy 84.486195 71.840989) + (xy 84.497401 71.8925) (xy 84.497401 72.268) (xy 84.989729 72.268) (xy 84.989745 72.267999) (xy 85.049273 72.261598) + (xy 85.04928 72.261596) (xy 85.183987 72.211354) (xy 85.183994 72.21135) (xy 85.299088 72.12519) + (xy 85.299091 72.125187) (xy 85.385251 72.010093) (xy 85.385255 72.010086) (xy 85.435497 71.875379) + (xy 85.435498 71.875378) (xy 85.43637 71.867265) (xy 85.440863 71.856415) (xy 85.440953 71.844672) + (xy 85.453988 71.824724) (xy 85.463105 71.802713) (xy 85.47275 71.796015) (xy 85.479175 71.786184) + (xy 85.500925 71.776451) (xy 85.520495 71.762862) (xy 85.533849 71.761717) (xy 85.542951 71.757645) + (xy 85.571267 71.758511) (xy 85.578244 71.757914) (xy 85.581045 71.758338) (xy 85.655758 71.7732) + (xy 85.679089 71.7732) (xy 85.688325 71.7746) (xy 85.711867 71.785569) (xy 85.73678 71.792885) (xy 85.743018 71.800084) + (xy 85.751657 71.80411) (xy 85.765531 71.826065) (xy 85.782535 71.845689) (xy 85.784302 71.849748) + (xy 85.826602 71.951872) (xy 85.826609 71.951885) (xy 85.91421 72.082988) (xy 85.914213 72.082992) + (xy 86.025707 72.194486) (xy 86.025711 72.194489) (xy 86.156814 72.28209) (xy 86.156818 72.282092) + (xy 86.156821 72.282094) (xy 86.157457 72.282357) (xy 86.15803 72.282595) (xy 86.158564 72.283025) + (xy 86.162191 72.284964) (xy 86.161823 72.285651) (xy 86.212433 72.326436) (xy 86.234498 72.39273) + (xy 86.217219 72.46043) (xy 86.166081 72.50804) (xy 86.123831 72.520446) (xy 86.085116 72.524607) + (xy 85.950271 72.574901) (xy 85.950264 72.574905) (xy 85.835055 72.661151) (xy 85.835052 72.661154) + (xy 85.748806 72.776363) (xy 85.748802 72.77637) (xy 85.698508 72.911216) (xy 85.692101 72.970815) + (xy 85.6921 72.970834) (xy 85.6921 74.260369) (xy 85.692101 74.260375) (xy 85.698508 74.319982) + (xy 85.748802 74.454827) (xy 85.748806 74.454834) (xy 85.835052 74.570043) (xy 85.835055 74.570046) + (xy 85.950264 74.656292) (xy 85.950271 74.656296) (xy 86.085116 74.70659) (xy 86.111019 74.709374) + (xy 86.144727 74.712999) (xy 86.170701 74.712998) (xy 86.237739 74.73268) (xy 86.258384 74.749317) + (xy 87.296886 75.787819) (xy 87.330371 75.849142) (xy 87.325387 75.918834) (xy 87.283515 75.974767) + (xy 87.218051 75.999184) (xy 87.209206 75.9995) (xy 87.108299 75.9995) (xy 87.10828 75.999501) (xy 87.005503 76.01) + (xy 87.0055 76.010001) (xy 86.838968 76.065185) (xy 86.838963 76.065187) (xy 86.689642 76.157289) + (xy 86.565589 76.281342) (xy 86.473487 76.430663) (xy 86.473485 76.430668) (xy 86.445649 76.51467) + (xy 86.418301 76.597203) (xy 86.418301 76.597204) (xy 86.4183 76.597204) (xy 86.4078 76.699983) + (xy 86.4078 77.325001) (xy 86.407801 77.325019) (xy 86.4183 77.427796) (xy 86.418301 77.427799) + (xy 86.465132 77.569124) (xy 86.473486 77.594334) (xy 86.562859 77.739232) (xy 86.565589 77.743657) + (xy 86.659251 77.837319) (xy 86.692736 77.898642) (xy 86.687752 77.968334) (xy 86.659251 78.012681) + (xy 86.565588 78.106343) (xy 86.565585 78.106347) (xy 86.49631 78.218659) (xy 86.444362 78.265384) + (xy 86.375399 78.276605) (xy 86.318379 78.252109) (xy 86.317654 78.253195) (xy 86.181485 78.162209) + (xy 86.181472 78.162202) (xy 86.035801 78.101864) (xy 86.035789 78.101861) (xy 85.881145 78.0711) + (xy 85.881142 78.0711) (xy 85.723458 78.0711) (xy 85.723455 78.0711) (xy 85.56881 78.101861) (xy 85.568802 78.101863) + (xy 85.500905 78.129986) (xy 85.482954 78.131915) (xy 85.46625 78.138762) (xy 85.448936 78.135571) + (xy 85.431435 78.137453) (xy 85.415293 78.129372) (xy 85.397537 78.126101) (xy 85.372392 78.107897) + (xy 85.368956 78.106177) (xy 85.368621 78.105864) (xy 85.367185 78.104517) (xy 85.294956 78.032288) + (xy 85.281014 78.023688) (xy 85.271907 78.015146) (xy 85.260269 77.995364) (xy 85.244918 77.978297) + (xy 85.242887 77.965818) (xy 85.236479 77.954925) (xy 85.237383 77.93199) (xy 85.233697 77.909334) + (xy 85.238733 77.897741) (xy 85.239232 77.885109) (xy 85.252393 77.866302) (xy 85.26154 77.845252) + (xy 85.275732 77.832955) (xy 85.279294 77.827866) (xy 85.283681 77.826067) (xy 85.291648 77.819165) + (xy 85.294642 77.817318) (xy 85.418615 77.693345) (xy 85.510656 77.544124) (xy 85.510658 77.544119) + (xy 85.565805 77.377697) (xy 85.565806 77.37769) (xy 85.576299 77.274986) (xy 85.5763 77.274973) + (xy 85.5763 77.225) (xy 84.4753 77.225) (xy 84.408261 77.205315) (xy 84.362506 77.152511) (xy 84.3513 77.101) + (xy 84.3513 76.975) (xy 84.2253 76.975) (xy 84.158261 76.955315) (xy 84.112506 76.902511) (xy 84.1013 76.851) + (xy 84.1013 76.725) (xy 84.6013 76.725) (xy 85.576299 76.725) (xy 85.576299 76.675028) (xy 85.576298 76.675013) + (xy 85.565805 76.572302) (xy 85.510658 76.40588) (xy 85.510656 76.405875) (xy 85.418615 76.256654) + (xy 85.294645 76.132684) (xy 85.145424 76.040643) (xy 85.145419 76.040641) (xy 84.978997 75.985494) + (xy 84.97899 75.985493) (xy 84.876286 75.975) (xy 84.6013 75.975) (xy 84.6013 76.725) (xy 84.1013 76.725) + (xy 84.1013 75.975) (xy 83.826329 75.975) (xy 83.826312 75.975001) (xy 83.723602 75.985494) (xy 83.55718 76.040641) + (xy 83.557175 76.040643) (xy 83.407957 76.132682) (xy 83.318415 76.222224) (xy 83.257091 76.255708) + (xy 83.1874 76.250724) (xy 83.183294 76.249108) (xy 83.096997 76.213363) (xy 83.096989 76.213361) + (xy 82.942345 76.1826) (xy 82.942342 76.1826) (xy 82.784658 76.1826) (xy 82.784655 76.1826) (xy 82.630011 76.21336) + (xy 82.630001 76.213363) (xy 82.579994 76.234076) (xy 82.510524 76.241543) (xy 82.448046 76.210267) + (xy 82.444863 76.207195) (xy 82.394957 76.157289) (xy 82.394956 76.157288) (xy 82.298998 76.098101) + (xy 82.245636 76.065187) (xy 82.245631 76.065185) (xy 82.244162 76.064698) (xy 82.079097 76.010001) + (xy 82.079095 76.01) (xy 81.97631 75.9995) (xy 80.976298 75.9995) (xy 80.97628 75.999501) (xy 80.873503 76.01) + (xy 80.8735 76.010001) (xy 80.706968 76.065185) (xy 80.706963 76.065187) (xy 80.557642 76.157289) + (xy 80.433589 76.281342) (xy 80.341487 76.430663) (xy 80.341485 76.430668) (xy 80.313649 76.51467) + (xy 80.286301 76.597203) (xy 80.286301 76.597204) (xy 80.2863 76.597204) (xy 80.2758 76.699983) + (xy 80.2758 77.325001) (xy 80.275801 77.325019) (xy 80.2863 77.427796) (xy 80.286301 77.427799) + (xy 80.333132 77.569124) (xy 80.341486 77.594334) (xy 80.430859 77.739232) (xy 80.433589 77.743657) + (xy 80.527251 77.837319) (xy 80.560736 77.898642) (xy 80.555752 77.968334) (xy 80.527251 78.012681) + (xy 80.433589 78.106342) (xy 80.341487 78.255663) (xy 80.341485 78.255668) (xy 80.323577 78.309711) + (xy 80.286301 78.422203) (xy 80.286301 78.422204) (xy 80.2863 78.422204) (xy 80.2758 78.524983) + (xy 80.2758 79.150001) (xy 80.275801 79.150019) (xy 80.2863 79.252796) (xy 80.286301 79.252799) + (xy 80.311154 79.327799) (xy 80.341486 79.419334) (xy 80.433588 79.568656) (xy 80.557644 79.692712) + (xy 80.706966 79.784814) (xy 80.873503 79.839999) (xy 80.976291 79.8505) (xy 81.976308 79.850499) + (xy 81.976316 79.850498) (xy 81.976319 79.850498) (xy 82.032602 79.844748) (xy 82.079097 79.839999) + (xy 82.245634 79.784814) (xy 82.394956 79.692712) (xy 82.492364 79.595304) (xy 82.553687 79.561819) + (xy 82.620902 79.566625) (xy 82.62098 79.56637) (xy 82.622107 79.566712) (xy 82.623379 79.566803) + (xy 82.626649 79.56809) (xy 82.626799 79.568135) (xy 82.626803 79.568137) (xy 82.626807 79.568137) + (xy 82.626811 79.568139) (xy 82.781453 79.598899) (xy 82.781456 79.5989) (xy 82.781458 79.5989) + (xy 82.939144 79.5989) (xy 82.939145 79.598899) (xy 83.093797 79.568137) (xy 83.093911 79.56809) + (xy 83.118371 79.557958) (xy 83.134974 79.55108) (xy 83.204442 79.543611) (xy 83.266922 79.574885) + (xy 83.279693 79.58873) (xy 83.283588 79.593656) (xy 83.407644 79.717712) (xy 83.556966 79.809814) + (xy 83.723503 79.864999) (xy 83.826291 79.8755) (xy 84.876308 79.875499) (xy 84.876316 79.875498) + (xy 84.876319 79.875498) (xy 84.932602 79.869748) (xy 84.979097 79.864999) (xy 85.145634 79.809814) + (xy 85.294956 79.717712) (xy 85.370585 79.642082) (xy 85.431904 79.6086) (xy 85.501596 79.613584) + (xy 85.505675 79.615188) (xy 85.568803 79.641337) (xy 85.568807 79.641337) (xy 85.568811 79.641339) + (xy 85.723453 79.672099) (xy 85.723456 79.6721) (xy 85.723458 79.6721) (xy 85.881144 79.6721) (xy 85.881145 79.672099) + (xy 86.035797 79.641337) (xy 86.181479 79.580994) (xy 86.312589 79.493389) (xy 86.329462 79.476515) + (xy 86.390781 79.443029) (xy 86.460473 79.44801) (xy 86.516409 79.489879) (xy 86.522683 79.499095) + (xy 86.565588 79.568656) (xy 86.689644 79.692712) (xy 86.838966 79.784814) (xy 87.005503 79.839999) + (xy 87.108291 79.8505) (xy 88.108308 79.850499) (xy 88.108316 79.850498) (xy 88.108319 79.850498) + (xy 88.132196 79.848058) (xy 88.211097 79.839999) (xy 88.311476 79.806735) (xy 88.311828 79.806723) + (xy 88.312119 79.806525) (xy 88.346704 79.805524) (xy 88.381304 79.804334) (xy 88.381725 79.80451) + (xy 88.381959 79.804504) (xy 88.385321 79.806017) (xy 88.414474 79.818231) (xy 88.416965 79.819732) + (xy 88.521521 79.889594) (xy 88.557975 79.904693) (xy 88.565934 79.909489) (xy 88.583535 79.928653) + (xy 88.603796 79.94498) (xy 88.606788 79.95397) (xy 88.613197 79.960948) (xy 88.617643 79.986584) + (xy 88.625861 80.011274) (xy 88.623517 80.020454) (xy 88.625137 80.02979) (xy 88.615017 80.05376) + (xy 88.608582 80.078973) (xy 88.601646 80.08543) (xy 88.597962 80.094158) (xy 88.576491 80.108851) + (xy 88.557445 80.126584) (xy 88.546956 80.129062) (xy 88.540301 80.133617) (xy 88.525921 80.134033) + (xy 88.50194 80.1397) (xy 79.424653 80.1397) (xy 79.334147 80.1397) (xy 79.334145 80.1397) (xy 79.334143 80.139701) + (xy 79.250534 80.174331) (xy 79.250532 80.174333) (xy 78.498685 80.926181) (xy 78.437362 80.959666) + (xy 78.411004 80.9625) (xy 52.119 80.9625) (xy 52.051961 80.942815) (xy 52.006206 80.890011) (xy 51.995 80.8385) + (xy 51.995 78.599983) (xy 53.6258 78.599983) (xy 53.6258 79.200001) (xy 53.625801 79.200019) (xy 53.6363 79.302796) + (xy 53.636301 79.302799) (xy 53.691485 79.469331) (xy 53.691487 79.469336) (xy 53.706323 79.493389) + (xy 53.783588 79.618656) (xy 53.907644 79.742712) (xy 54.056966 79.834814) (xy 54.223503 79.889999) + (xy 54.326291 79.9005) (xy 55.376308 79.900499) (xy 55.376316 79.900498) (xy 55.376319 79.900498) + (xy 55.45616 79.892342) (xy 55.479097 79.889999) (xy 55.645634 79.834814) (xy 55.794956 79.742712) + (xy 55.919012 79.618656) (xy 56.011114 79.469334) (xy 56.066299 79.302797) (xy 56.0768 79.200009) + (xy 56.076799 78.599992) (xy 56.075421 78.586506) (xy 56.066299 78.497203) (xy 56.066298 78.4972) + (xy 56.065922 78.496066) (xy 56.011114 78.330666) (xy 55.919012 78.181344) (xy 55.794956 78.057288) + (xy 55.791642 78.055243) (xy 55.789846 78.053248) (xy 55.789289 78.052807) (xy 55.789364 78.052711) + (xy 55.744918 78.003297) (xy 55.733697 77.934334) (xy 55.76154 77.870252) (xy 55.791648 77.844165) + (xy 55.794642 77.842318) (xy 55.918615 77.718345) (xy 56.010656 77.569124) (xy 56.010658 77.569119) + (xy 56.065805 77.402697) (xy 56.065806 77.40269) (xy 56.076299 77.299986) (xy 56.0763 77.299973) + (xy 56.0763 77.25) (xy 53.626301 77.25) (xy 53.626301 77.299986) (xy 53.636794 77.402697) (xy 53.691941 77.569119) + (xy 53.691943 77.569124) (xy 53.783984 77.718345) (xy 53.907955 77.842316) (xy 53.907959 77.842319) + (xy 53.910956 77.844168) (xy 53.912579 77.845972) (xy 53.913623 77.846798) (xy 53.913481 77.846976) + (xy 53.957681 77.896116) (xy 53.968902 77.965079) (xy 53.941059 78.029161) (xy 53.910961 78.055241) + (xy 53.907649 78.057283) (xy 53.907643 78.057288) (xy 53.783589 78.181342) (xy 53.691487 78.330663) + (xy 53.691486 78.330666) (xy 53.636301 78.497203) (xy 53.636301 78.497204) (xy 53.6363 78.497204) + (xy 53.6258 78.599983) (xy 51.995 78.599983) (xy 51.995 71.989) (xy 52.014685 71.921961) (xy 52.067489 71.876206) + (xy 52.119 71.865) (xy 53.881625 71.865) (xy 53.948664 71.884685) (xy 53.994419 71.937489) (xy 54.004363 72.006647) + (xy 53.993462 72.039892) (xy 53.994187 72.040192) (xy 53.931514 72.191498) (xy 53.931511 72.19151) + (xy 53.90075 72.346153) (xy 53.90075 72.503846) (xy 53.931511 72.658489) (xy 53.931514 72.658501) + (xy 53.991852 72.804172) (xy 53.991859 72.804185) (xy 54.07946 72.935288) (xy 54.079463 72.935292) + (xy 54.157612 73.013441) (xy 54.191097 73.074764) (xy 54.186113 73.144456) (xy 54.144241 73.200389) + (xy 54.113264 73.217304) (xy 54.008971 73.256202) (xy 54.008964 73.256206) (xy 53.893755 73.342452) + (xy 53.893752 73.342455) (xy 53.807506 73.457664) (xy 53.807502 73.457671) (xy 53.757208 73.592517) + (xy 53.750801 73.652116) (xy 53.750801 73.652123) (xy 53.7508 73.652135) (xy 53.7508 75.24787) (xy 53.750801 75.247876) + (xy 53.757208 75.307483) (xy 53.807502 75.442328) (xy 53.807506 75.442335) (xy 53.893752 75.557544) + (xy 53.893755 75.557547) (xy 54.008964 75.643793) (xy 54.008971 75.643797) (xy 54.038933 75.654972) + (xy 54.143817 75.694091) (xy 54.203427 75.7005) (xy 54.2707 75.700499) (xy 54.279384 75.703049) + (xy 54.288347 75.701761) (xy 54.312386 75.712739) (xy 54.337738 75.720183) (xy 54.343666 75.727024) + (xy 54.351903 75.730786) (xy 54.366189 75.753016) (xy 54.383494 75.772986) (xy 54.385781 75.783502) + (xy 54.389677 75.789564) (xy 54.3947 75.824499) (xy 54.3947 75.881037) (xy 54.375015 75.948076) + (xy 54.322211 75.993831) (xy 54.283303 76.004395) (xy 54.223602 76.010494) (xy 54.05718 76.065641) + (xy 54.057175 76.065643) (xy 53.907954 76.157684) (xy 53.783984 76.281654) (xy 53.691943 76.430875) + (xy 53.691941 76.43088) (xy 53.636794 76.597302) (xy 53.636793 76.597309) (xy 53.6263 76.700013) + (xy 53.6263 76.75) (xy 56.076299 76.75) (xy 56.076299 76.700028) (xy 56.076298 76.700013) (xy 56.065805 76.597302) + (xy 56.010658 76.43088) (xy 56.010656 76.430875) (xy 55.930387 76.300739) (xy 55.911947 76.233346) + (xy 55.921365 76.188189) (xy 55.964937 76.082997) (xy 55.9957 75.928342) (xy 55.9957 75.770658) + (xy 55.9957 75.770655) (xy 55.976113 75.672189) (xy 55.972688 75.65497) (xy 55.978915 75.585381) + (xy 56.021777 75.530203) (xy 56.087667 75.506958) (xy 56.155664 75.523025) (xy 56.187578 75.551179) + (xy 56.18784 75.550918) (xy 56.192022 75.5551) (xy 56.193567 75.556463) (xy 56.194109 75.557187) + (xy 56.194112 75.55719) (xy 56.309206 75.64335) (xy 56.309213 75.643354) (xy 56.44392 75.693596) + (xy 56.443927 75.693598) (xy 56.503455 75.699999) (xy 56.503472 75.7) (xy 56.9013 75.7) (xy 56.9013 73.2) + (xy 56.503455 73.2) (xy 56.443927 73.206401) (xy 56.44392 73.206403) (xy 56.309213 73.256645) (xy 56.309206 73.256649) + (xy 56.194112 73.342809) (xy 56.194109 73.342812) (xy 56.102631 73.465011) (xy 56.100436 73.463368) + (xy 56.060998 73.502796) (xy 55.992722 73.517638) (xy 55.927262 73.493211) (xy 55.901753 73.463765) + (xy 55.900412 73.464769) (xy 55.808847 73.342455) (xy 55.808844 73.342452) (xy 55.693635 73.256206) + (xy 55.693628 73.256202) (xy 55.558782 73.205908) (xy 55.558783 73.205908) (xy 55.499183 73.199501) + (xy 55.499181 73.1995) (xy 55.499173 73.1995) (xy 55.499165 73.1995) (xy 55.358191 73.1995) (xy 55.291152 73.179815) + (xy 55.245397 73.127011) (xy 55.235453 73.057853) (xy 55.264478 72.994297) (xy 55.27051 72.987819) + (xy 55.323036 72.935292) (xy 55.323039 72.935289) (xy 55.410644 72.804179) (xy 55.470987 72.658497) + (xy 55.50175 72.503842) (xy 55.50175 72.346158) (xy 55.50175 72.346155) (xy 55.501749 72.346153) + (xy 55.497082 72.322689) (xy 55.470987 72.191503) (xy 55.464076 72.174819) (xy 55.408313 72.040192) + (xy 55.40987 72.039546) (xy 55.397275 71.979049) (xy 55.422276 71.913805) (xy 55.478582 71.872435) + (xy 55.520875 71.865) (xy 56.110362 71.865) (xy 56.177401 71.884685) (xy 56.198043 71.901319) (xy 57.364981 73.068257) + (xy 57.398466 73.12958) (xy 57.4013 73.155938) (xy 57.4013 75.7) (xy 57.799128 75.7) (xy 57.799144 75.699999) + (xy 57.858672 75.693598) (xy 57.858679 75.693596) (xy 57.993386 75.643354) (xy 57.993393 75.64335) + (xy 58.108487 75.55719) (xy 58.108488 75.557189) (xy 58.15172 75.499439) (xy 58.207653 75.457567) + (xy 58.277345 75.452583) (xy 58.338668 75.486068) (xy 58.350253 75.499437) (xy 58.36859 75.523931) + (xy 58.393487 75.55719) (xy 58.393755 75.557547) (xy 58.508964 75.643793) (xy 58.508971 75.643797) + (xy 58.538933 75.654972) (xy 58.643817 75.694091) (xy 58.703427 75.7005) (xy 58.7998 75.700499) + (xy 58.808485 75.703049) (xy 58.817447 75.701761) (xy 58.841485 75.712738) (xy 58.866838 75.720183) + (xy 58.872766 75.727024) (xy 58.881003 75.730786) (xy 58.895289 75.753016) (xy 58.912594 75.772986) + (xy 58.914881 75.783502) (xy 58.918777 75.789564) (xy 58.9238 75.824499) (xy 58.9238 75.905115) + (xy 58.904115 75.972154) (xy 58.851311 76.017909) (xy 58.812402 76.028473) (xy 58.748502 76.035001) + (xy 58.7485 76.035001) (xy 58.581968 76.090185) (xy 58.581963 76.090187) (xy 58.432642 76.182289) + (xy 58.308589 76.306342) (xy 58.216487 76.455663) (xy 58.216485 76.455668) (xy 58.188649 76.53967) + (xy 58.161301 76.622203) (xy 58.161301 76.622204) (xy 58.1613 76.622204) (xy 58.1508 76.724983) + (xy 58.1508 77.325001) (xy 58.150801 77.325019) (xy 58.1613 77.427796) (xy 58.161301 77.427799) + (xy 58.208132 77.569124) (xy 58.216486 77.594334) (xy 58.305859 77.739232) (xy 58.308589 77.743657) + (xy 58.432646 77.867714) (xy 58.435482 77.869463) (xy 58.437017 77.87117) (xy 58.438311 77.872193) + (xy 58.438136 77.872414) (xy 58.482205 77.921411) (xy 58.493426 77.990374) (xy 58.465582 78.054456) + (xy 58.435482 78.080537) (xy 58.432646 78.082285) (xy 58.308589 78.206342) (xy 58.216487 78.355663) + (xy 58.216485 78.355668) (xy 58.201158 78.401923) (xy 58.161301 78.522203) (xy 58.161301 78.522204) + (xy 58.1613 78.522204) (xy 58.1508 78.624983) (xy 58.1508 79.225001) (xy 58.150801 79.225019) (xy 58.1613 79.327796) + (xy 58.161301 79.327799) (xy 58.216485 79.494331) (xy 58.216487 79.494336) (xy 58.23811 79.529392) + (xy 58.308588 79.643656) (xy 58.432644 79.767712) (xy 58.581966 79.859814) (xy 58.748503 79.914999) + (xy 58.851291 79.9255) (xy 59.901308 79.925499) (xy 59.901316 79.925498) (xy 59.901319 79.925498) + (xy 59.967494 79.918738) (xy 60.004097 79.914999) (xy 60.170634 79.859814) (xy 60.319956 79.767712) + (xy 60.444012 79.643656) (xy 60.536114 79.494334) (xy 60.591299 79.327797) (xy 60.6018 79.225009) + (xy 60.601799 78.624992) (xy 60.599126 78.598829) (xy 60.591299 78.522203) (xy 60.591298 78.5222) + (xy 60.584855 78.502757) (xy 60.536114 78.355666) (xy 60.444012 78.206344) (xy 60.319956 78.082288) + (xy 60.317119 78.080538) (xy 60.315583 78.07883) (xy 60.314289 78.077807) (xy 60.314463 78.077585) + (xy 60.270396 78.028594) (xy 60.259172 77.959632) (xy 60.287013 77.895549) (xy 60.317117 77.869462) + (xy 60.319956 77.867712) (xy 60.444012 77.743656) (xy 60.536114 77.594334) (xy 60.591299 77.427797) + (xy 60.6018 77.325009) (xy 60.601799 76.724992) (xy 60.599247 76.700013) (xy 60.591299 76.622203) + (xy 60.591298 76.6222) (xy 60.585241 76.603921) (xy 60.536114 76.455666) (xy 60.444012 76.306344) + (xy 60.319956 76.182288) (xy 60.187484 76.100579) (xy 60.170636 76.090187) (xy 60.170631 76.090185) + (xy 60.129607 76.076591) (xy 60.004097 76.035001) (xy 60.004095 76.035) (xy 59.901316 76.0245) (xy 59.898161 76.02434) + (xy 59.898169 76.024179) (xy 59.898168 76.024179) (xy 59.89817 76.024155) (xy 59.898221 76.023155) + (xy 59.894114 76.021949) (xy 59.885153 76.023238) (xy 59.861112 76.012259) (xy 59.835761 76.004815) + (xy 59.829833 75.997974) (xy 59.821597 75.994213) (xy 59.807307 75.971978) (xy 59.790006 75.952011) + (xy 59.787718 75.941496) (xy 59.783823 75.935435) (xy 59.7788 75.9005) (xy 59.7788 75.824499) (xy 59.798485 75.75746) + (xy 59.851289 75.711705) (xy 59.9028 75.700499) (xy 59.999171 75.700499) (xy 59.999172 75.700499) + (xy 60.058783 75.694091) (xy 60.193631 75.643796) (xy 60.308846 75.557546) (xy 60.395096 75.442331) + (xy 60.445391 75.307483) (xy 60.4518 75.247873) (xy 60.451799 73.652128) (xy 60.445391 73.592517) + (xy 60.443408 73.587201) (xy 60.395097 73.457671) (xy 60.395093 73.457664) (xy 60.308847 73.342455) + (xy 60.308844 73.342452) (xy 60.193635 73.256206) (xy 60.193628 73.256202) (xy 60.058782 73.205908) + (xy 60.058783 73.205908) (xy 59.999183 73.199501) (xy 59.999181 73.1995) (xy 59.999173 73.1995) + (xy 59.999165 73.1995) (xy 59.9028 73.1995) (xy 59.835761 73.179815) (xy 59.790006 73.127011) (xy 59.7788 73.0755) + (xy 59.7788 66.903438) (xy 59.798485 66.836399) (xy 59.815119 66.815757) (xy 59.940504 66.690372) + (xy 60.076185 66.554691) (xy 60.132467 66.457209) (xy 60.1616 66.348481) (xy 60.1616 66.235919) + (xy 60.1616 63.999499) (xy 60.181285 63.93246) (xy 60.234089 63.886705) (xy 60.285595 63.875499) + (xy 61.863739 63.875499) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 58.083139 54.788435) (xy 58.128894 54.841239) (xy 58.1401 54.89275) (xy 58.1401 55.192941) (xy 58.1401 55.192943) + (xy 58.140099 55.192943) (xy 58.178547 55.386229) (xy 58.17855 55.386239) (xy 58.253964 55.568307) + (xy 58.253971 55.56832) (xy 58.36346 55.732181) (xy 58.363463 55.732185) (xy 58.502814 55.871536) + (xy 58.502818 55.871539) (xy 58.666679 55.981028) (xy 58.666692 55.981035) (xy 58.84722 56.055811) + (xy 58.848765 56.056451) (xy 58.848769 56.056451) (xy 58.84877 56.056452) (xy 59.042056 56.0949) + (xy 59.042059 56.0949) (xy 59.239143 56.0949) (xy 59.369182 56.069032) (xy 59.432435 56.056451) + (xy 59.614514 55.981032) (xy 59.778382 55.871539) (xy 59.917739 55.732182) (xy 60.027232 55.568314) + (xy 60.102651 55.386235) (xy 60.1411 55.192941) (xy 60.1411 54.89275) (xy 60.160785 54.825711) (xy 60.213589 54.779956) + (xy 60.2651 54.76875) (xy 66.6561 54.76875) (xy 66.723139 54.788435) (xy 66.768894 54.841239) (xy 66.7801 54.89275) + (xy 66.7801 55.192941) (xy 66.7801 55.192943) (xy 66.780099 55.192943) (xy 66.818547 55.386229) + (xy 66.81855 55.386239) (xy 66.893964 55.568307) (xy 66.893971 55.56832) (xy 67.00346 55.732181) + (xy 67.003463 55.732185) (xy 67.142814 55.871536) (xy 67.142818 55.871539) (xy 67.306679 55.981028) + (xy 67.306692 55.981035) (xy 67.48722 56.055811) (xy 67.488765 56.056451) (xy 67.488769 56.056451) + (xy 67.48877 56.056452) (xy 67.682056 56.0949) (xy 67.682059 56.0949) (xy 67.879143 56.0949) (xy 68.009182 56.069032) + (xy 68.072435 56.056451) (xy 68.254514 55.981032) (xy 68.418382 55.871539) (xy 68.557739 55.732182) + (xy 68.667232 55.568314) (xy 68.742651 55.386235) (xy 68.7811 55.192941) (xy 68.7811 54.89275) (xy 68.800785 54.825711) + (xy 68.853589 54.779956) (xy 68.9051 54.76875) (xy 356.671 54.76875) (xy 356.738039 54.788435) (xy 356.783794 54.841239) + (xy 356.795 54.89275) (xy 356.795 77.896195) (xy 356.775315 77.963234) (xy 356.722511 78.008989) + (xy 356.663934 78.018754) (xy 356.663934 78.0195) (xy 356.659462 78.0195) (xy 356.658862 78.0196) + (xy 356.657845 78.0195) (xy 356.657842 78.0195) (xy 356.500158 78.0195) (xy 356.500155 78.0195) + (xy 356.34551 78.050261) (xy 356.345498 78.050264) (xy 356.199827 78.110602) (xy 356.199814 78.110609) + (xy 356.068711 78.19821) (xy 356.068707 78.198213) (xy 355.957213 78.309707) (xy 355.95721 78.309711) + (xy 355.869609 78.440814) (xy 355.869602 78.440827) (xy 355.809264 78.586498) (xy 355.809262 78.586506) + (xy 355.7785 78.741153) (xy 355.7785 78.898846) (xy 355.809261 79.053489) (xy 355.809264 79.053501) + (xy 355.869602 79.199172) (xy 355.869609 79.199185) (xy 355.95721 79.330288) (xy 355.957213 79.330292) + (xy 356.068707 79.441786) (xy 356.068711 79.441789) (xy 356.199814 79.52939) (xy 356.199818 79.529392) + (xy 356.199821 79.529394) (xy 356.274954 79.560515) (xy 356.329356 79.604354) (xy 356.351421 79.670648) + (xy 356.3515 79.675075) (xy 356.3515 80.8385) (xy 356.331815 80.905539) (xy 356.279011 80.951294) + (xy 356.2275 80.9625) (xy 333.950795 80.9625) (xy 333.883756 80.942815) (xy 333.863114 80.926181) + (xy 330.864819 77.927886) (xy 330.831334 77.866563) (xy 330.8285 77.840205) (xy 330.8285 74.889077) + (xy 330.8288 74.886032) (xy 330.8288 73.059198) (xy 330.848485 72.992159) (xy 330.901289 72.946404) + (xy 330.914482 72.941267) (xy 331.100519 72.88082) (xy 331.28291 72.787887) (xy 331.37589 72.720332) + (xy 331.448513 72.667571) (xy 331.448515 72.667568) (xy 331.448519 72.667566) (xy 331.593266 72.522819) + (xy 331.593268 72.522815) (xy 331.593271 72.522813) (xy 331.663972 72.4255) (xy 331.713587 72.35721) + (xy 331.80652 72.174819) (xy 331.869777 71.980134) (xy 331.9018 71.777952) (xy 331.9018 71.573248) + (xy 331.896512 71.539861) (xy 331.869777 71.371065) (xy 331.821241 71.221688) (xy 331.80652 71.176381) + (xy 331.806518 71.176378) (xy 331.806518 71.176376) (xy 331.762805 71.090585) (xy 331.713587 70.99399) + (xy 331.69435 70.967512) (xy 331.593271 70.828386) (xy 331.448513 70.683628) (xy 331.282913 70.563315) + (xy 331.282912 70.563314) (xy 331.28291 70.563313) (xy 331.178853 70.510293) (xy 331.100523 70.470381) + (xy 330.905834 70.407122) (xy 330.727328 70.37885) (xy 330.703652 70.3751) (xy 330.498948 70.3751) + (xy 330.475272 70.37885) (xy 330.296765 70.407122) (xy 330.102076 70.470381) (xy 329.919686 70.563315) + (xy 329.754086 70.683628) (xy 329.609332 70.828382) (xy 329.609328 70.828387) (xy 329.510968 70.96377) + (xy 329.455639 71.006436) (xy 329.386025 71.012415) (xy 329.32423 70.97981) (xy 329.310332 70.96377) + (xy 329.211971 70.828387) (xy 329.211967 70.828382) (xy 329.067213 70.683628) (xy 328.901613 70.563315) + (xy 328.901612 70.563314) (xy 328.90161 70.563313) (xy 328.797553 70.510293) (xy 328.719223 70.470381) + (xy 328.524534 70.407122) (xy 328.346028 70.37885) (xy 328.322352 70.3751) (xy 328.117648 70.3751) + (xy 328.093972 70.37885) (xy 327.915465 70.407122) (xy 327.720776 70.470381) (xy 327.538386 70.563315) + (xy 327.372786 70.683628) (xy 327.228032 70.828382) (xy 327.228028 70.828387) (xy 327.129718 70.963701) + (xy 327.074389 71.006367) (xy 327.004775 71.012346) (xy 326.94298 70.979741) (xy 326.929082 70.963701) + (xy 326.830771 70.828387) (xy 326.830767 70.828382) (xy 326.686013 70.683628) (xy 326.520413 70.563315) + (xy 326.520412 70.563314) (xy 326.52041 70.563313) (xy 326.416353 70.510293) (xy 326.338023 70.470381) + (xy 326.143334 70.407122) (xy 325.964828 70.37885) (xy 325.941152 70.3751) (xy 325.736448 70.3751) + (xy 325.712772 70.37885) (xy 325.534265 70.407122) (xy 325.339576 70.470381) (xy 325.157186 70.563315) + (xy 324.991586 70.683628) (xy 324.846832 70.828382) (xy 324.846828 70.828387) (xy 324.748468 70.96377) + (xy 324.693139 71.006436) (xy 324.623525 71.012415) (xy 324.56173 70.97981) (xy 324.547832 70.96377) + (xy 324.449471 70.828387) (xy 324.449467 70.828382) (xy 324.304713 70.683628) (xy 324.139113 70.563315) + (xy 324.139112 70.563314) (xy 324.13911 70.563313) (xy 324.035053 70.510293) (xy 323.956723 70.470381) + (xy 323.762034 70.407122) (xy 323.583528 70.37885) (xy 323.559852 70.3751) (xy 323.355148 70.3751) + (xy 323.331472 70.37885) (xy 323.152965 70.407122) (xy 322.958276 70.470381) (xy 322.775886 70.563315) + (xy 322.610286 70.683628) (xy 322.465532 70.828382) (xy 322.465528 70.828387) (xy 322.367218 70.963701) + (xy 322.311889 71.006367) (xy 322.242275 71.012346) (xy 322.18048 70.979741) (xy 322.166582 70.963701) + (xy 322.068271 70.828387) (xy 322.068267 70.828382) (xy 321.923513 70.683628) (xy 321.757913 70.563315) + (xy 321.757912 70.563314) (xy 321.75791 70.563313) (xy 321.653853 70.510293) (xy 321.575523 70.470381) + (xy 321.380834 70.407122) (xy 321.202328 70.37885) (xy 321.178652 70.3751) (xy 320.973948 70.3751) + (xy 320.950272 70.37885) (xy 320.771765 70.407122) (xy 320.577076 70.470381) (xy 320.394686 70.563315) + (xy 320.229086 70.683628) (xy 320.084328 70.828386) (xy 319.964015 70.993986) (xy 319.871081 71.176376) + (xy 319.807822 71.371065) (xy 319.777928 71.559812) (xy 319.7758 71.573248) (xy 319.7758 71.777952) + (xy 319.777104 71.786184) (xy 319.807822 71.980134) (xy 319.871081 72.174823) (xy 319.934991 72.300253) + (xy 319.961161 72.351613) (xy 319.964015 72.357213) (xy 320.084328 72.522813) (xy 320.229086 72.667571) + (xy 320.378828 72.776363) (xy 320.39469 72.787887) (xy 320.577081 72.88082) (xy 320.763118 72.941267) + (xy 320.783519 72.955216) (xy 320.806003 72.965485) (xy 320.811856 72.974593) (xy 320.820794 72.980705) + (xy 320.830415 73.003471) (xy 320.843777 73.024263) (xy 320.846136 73.040671) (xy 320.847992 73.045063) + (xy 320.8488 73.059198) (xy 320.8488 73.194235) (xy 320.8485 73.197284) (xy 320.8485 78.031256) + (xy 320.848683 78.032032) (xy 320.850184 78.035321) (xy 320.858279 78.054861) (xy 320.85828 78.054867) + (xy 320.858282 78.054867) (xy 320.858282 78.054868) (xy 320.881368 78.110602) (xy 320.883136 78.11487) + (xy 320.898531 78.130264) (xy 320.964566 78.196299) (xy 320.964574 78.196305) (xy 322.319154 79.550837) + (xy 323.505005 80.736647) (xy 323.519176 80.750817) (xy 323.552662 80.81214) (xy 323.547679 80.881832) + (xy 323.505808 80.937766) (xy 323.440344 80.962184) (xy 323.431496 80.9625) (xy 317.877552 80.9625) + (xy 317.810513 80.942815) (xy 317.78987 80.92618) (xy 315.386818 78.523085) (xy 315.353334 78.461762) + (xy 315.3505 78.435405) (xy 315.3505 73.059231) (xy 315.370185 72.992192) (xy 315.422989 72.946437) + (xy 315.436181 72.9413) (xy 315.484743 72.925521) (xy 315.622319 72.88082) (xy 315.80471 72.787887) + (xy 315.89769 72.720332) (xy 315.970313 72.667571) (xy 315.970315 72.667568) (xy 315.970319 72.667566) + (xy 316.115066 72.522819) (xy 316.115068 72.522815) (xy 316.115071 72.522813) (xy 316.185772 72.4255) + (xy 316.235387 72.35721) (xy 316.32832 72.174819) (xy 316.391577 71.980134) (xy 316.4236 71.777952) + (xy 316.4236 71.573248) (xy 316.418312 71.539861) (xy 316.391577 71.371065) (xy 316.343041 71.221688) + (xy 316.32832 71.176381) (xy 316.328318 71.176378) (xy 316.328318 71.176376) (xy 316.284605 71.090585) + (xy 316.235387 70.99399) (xy 316.21615 70.967512) (xy 316.115071 70.828386) (xy 315.970313 70.683628) + (xy 315.804713 70.563315) (xy 315.804712 70.563314) (xy 315.80471 70.563313) (xy 315.700653 70.510293) + (xy 315.622323 70.470381) (xy 315.427634 70.407122) (xy 315.249128 70.37885) (xy 315.225452 70.3751) + (xy 315.020748 70.3751) (xy 314.997072 70.37885) (xy 314.818565 70.407122) (xy 314.623876 70.470381) + (xy 314.441486 70.563315) (xy 314.275886 70.683628) (xy 314.131132 70.828382) (xy 314.131128 70.828387) + (xy 314.032818 70.963701) (xy 313.977489 71.006367) (xy 313.907875 71.012346) (xy 313.84608 70.979741) + (xy 313.832182 70.963701) (xy 313.733871 70.828387) (xy 313.733867 70.828382) (xy 313.589113 70.683628) + (xy 313.423513 70.563315) (xy 313.423512 70.563314) (xy 313.42351 70.563313) (xy 313.319453 70.510293) + (xy 313.241123 70.470381) (xy 313.046434 70.407122) (xy 312.867928 70.37885) (xy 312.844252 70.3751) + (xy 312.639548 70.3751) (xy 312.615872 70.37885) (xy 312.437365 70.407122) (xy 312.242676 70.470381) + (xy 312.060286 70.563315) (xy 311.894686 70.683628) (xy 311.749932 70.828382) (xy 311.749928 70.828387) + (xy 311.651568 70.96377) (xy 311.596239 71.006436) (xy 311.526625 71.012415) (xy 311.46483 70.97981) + (xy 311.450932 70.96377) (xy 311.352571 70.828387) (xy 311.352567 70.828382) (xy 311.207813 70.683628) + (xy 311.042213 70.563315) (xy 311.042212 70.563314) (xy 311.04221 70.563313) (xy 310.938153 70.510293) + (xy 310.859823 70.470381) (xy 310.665134 70.407122) (xy 310.486628 70.37885) (xy 310.462952 70.3751) + (xy 310.258248 70.3751) (xy 310.234572 70.37885) (xy 310.056065 70.407122) (xy 309.861376 70.470381) + (xy 309.678986 70.563315) (xy 309.513386 70.683628) (xy 309.368632 70.828382) (xy 309.368628 70.828387) + (xy 309.270318 70.963701) (xy 309.214989 71.006367) (xy 309.145375 71.012346) (xy 309.08358 70.979741) + (xy 309.069682 70.963701) (xy 308.971371 70.828387) (xy 308.971367 70.828382) (xy 308.826613 70.683628) + (xy 308.661013 70.563315) (xy 308.661012 70.563314) (xy 308.66101 70.563313) (xy 308.556953 70.510293) + (xy 308.478623 70.470381) (xy 308.283934 70.407122) (xy 308.105428 70.37885) (xy 308.081752 70.3751) + (xy 307.877048 70.3751) (xy 307.853372 70.37885) (xy 307.674865 70.407122) (xy 307.480176 70.470381) + (xy 307.297786 70.563315) (xy 307.132186 70.683628) (xy 306.987428 70.828386) (xy 306.867115 70.993986) + (xy 306.774181 71.176376) (xy 306.710922 71.371065) (xy 306.681028 71.559812) (xy 306.6789 71.573248) + (xy 306.6789 71.777952) (xy 306.680204 71.786184) (xy 306.710922 71.980134) (xy 306.774181 72.174823) + (xy 306.838091 72.300253) (xy 306.864261 72.351613) (xy 306.867115 72.357213) (xy 306.987428 72.522813) + (xy 307.132186 72.667571) (xy 307.281928 72.776363) (xy 307.29779 72.787887) (xy 307.480181 72.88082) + (xy 307.647829 72.935292) (xy 307.665818 72.941137) (xy 307.723494 72.980575) (xy 307.750692 73.044933) + (xy 307.7515 73.059068) (xy 307.7515 75.083047) (xy 307.7515 78.535851) (xy 307.751499 78.535854) + (xy 307.7515 78.547603) (xy 307.7515 78.626356) (xy 307.751501 78.626357) (xy 307.751502 78.62636) + (xy 307.7697 78.670291) (xy 307.786135 78.709968) (xy 307.786138 78.709974) (xy 307.828799 78.752632) + (xy 307.836436 78.760269) (xy 307.867561 78.791394) (xy 307.867572 78.791403) (xy 309.786533 80.710247) + (xy 309.827105 80.750816) (xy 309.860591 80.812138) (xy 309.855609 80.88183) (xy 309.813739 80.937765) + (xy 309.748276 80.962184) (xy 309.739426 80.9625) (xy 309.424221 80.9625) (xy 309.36577 80.947859) + (xy 309.361181 80.945406) (xy 309.215501 80.885064) (xy 309.215489 80.885061) (xy 309.060845 80.8543) + (xy 309.060842 80.8543) (xy 308.903158 80.8543) (xy 308.903155 80.8543) (xy 308.74851 80.885061) + (xy 308.748498 80.885064) (xy 308.602818 80.945406) (xy 308.59823 80.947859) (xy 308.539779 80.9625) + (xy 302.3775 80.9625) (xy 302.310461 80.942815) (xy 302.264706 80.890011) (xy 302.2535 80.8385) + (xy 302.2535 80.169577) (xy 302.2538 80.166532) (xy 302.2538 73.059198) (xy 302.273485 72.992159) + (xy 302.326289 72.946404) (xy 302.339482 72.941267) (xy 302.525519 72.88082) (xy 302.70791 72.787887) + (xy 302.80089 72.720332) (xy 302.873513 72.667571) (xy 302.873515 72.667568) (xy 302.873519 72.667566) + (xy 303.018266 72.522819) (xy 303.018268 72.522815) (xy 303.018271 72.522813) (xy 303.088972 72.4255) + (xy 303.138587 72.35721) (xy 303.23152 72.174819) (xy 303.294777 71.980134) (xy 303.3268 71.777952) + (xy 303.3268 71.573248) (xy 303.321512 71.539861) (xy 303.294777 71.371065) (xy 303.246241 71.221688) + (xy 303.23152 71.176381) (xy 303.231518 71.176378) (xy 303.231518 71.176376) (xy 303.187805 71.090585) + (xy 303.138587 70.99399) (xy 303.11935 70.967512) (xy 303.018271 70.828386) (xy 302.873513 70.683628) + (xy 302.707913 70.563315) (xy 302.707912 70.563314) (xy 302.70791 70.563313) (xy 302.603853 70.510293) + (xy 302.525523 70.470381) (xy 302.330834 70.407122) (xy 302.152328 70.37885) (xy 302.128652 70.3751) + (xy 301.923948 70.3751) (xy 301.900272 70.37885) (xy 301.721765 70.407122) (xy 301.527076 70.470381) + (xy 301.344686 70.563315) (xy 301.179086 70.683628) (xy 301.034332 70.828382) (xy 301.034328 70.828387) + (xy 300.935968 70.96377) (xy 300.880639 71.006436) (xy 300.811025 71.012415) (xy 300.74923 70.97981) + (xy 300.735332 70.96377) (xy 300.636971 70.828387) (xy 300.636967 70.828382) (xy 300.492213 70.683628) + (xy 300.326613 70.563315) (xy 300.326612 70.563314) (xy 300.32661 70.563313) (xy 300.222553 70.510293) + (xy 300.144223 70.470381) (xy 299.949534 70.407122) (xy 299.771028 70.37885) (xy 299.747352 70.3751) + (xy 299.542648 70.3751) (xy 299.518972 70.37885) (xy 299.340465 70.407122) (xy 299.145776 70.470381) + (xy 298.963386 70.563315) (xy 298.797786 70.683628) (xy 298.653032 70.828382) (xy 298.653028 70.828387) + (xy 298.554718 70.963701) (xy 298.499389 71.006367) (xy 298.429775 71.012346) (xy 298.36798 70.979741) + (xy 298.354082 70.963701) (xy 298.255771 70.828387) (xy 298.255767 70.828382) (xy 298.111013 70.683628) + (xy 297.945413 70.563315) (xy 297.945412 70.563314) (xy 297.94541 70.563313) (xy 297.841353 70.510293) + (xy 297.763023 70.470381) (xy 297.568334 70.407122) (xy 297.389828 70.37885) (xy 297.366152 70.3751) + (xy 297.161448 70.3751) (xy 297.137772 70.37885) (xy 296.959265 70.407122) (xy 296.764576 70.470381) + (xy 296.582186 70.563315) (xy 296.416586 70.683628) (xy 296.271832 70.828382) (xy 296.271828 70.828387) + (xy 296.173468 70.96377) (xy 296.118139 71.006436) (xy 296.048525 71.012415) (xy 295.98673 70.97981) + (xy 295.972832 70.96377) (xy 295.874471 70.828387) (xy 295.874467 70.828382) (xy 295.729713 70.683628) + (xy 295.564113 70.563315) (xy 295.564112 70.563314) (xy 295.56411 70.563313) (xy 295.460053 70.510293) + (xy 295.381723 70.470381) (xy 295.187034 70.407122) (xy 295.008528 70.37885) (xy 294.984852 70.3751) + (xy 294.780148 70.3751) (xy 294.756472 70.37885) (xy 294.577965 70.407122) (xy 294.383276 70.470381) + (xy 294.200886 70.563315) (xy 294.035286 70.683628) (xy 293.890528 70.828386) (xy 293.770215 70.993986) + (xy 293.677281 71.176376) (xy 293.614022 71.371065) (xy 293.584128 71.559812) (xy 293.582 71.573248) + (xy 293.582 71.777952) (xy 293.583304 71.786184) (xy 293.614022 71.980134) (xy 293.677281 72.174823) + (xy 293.741191 72.300253) (xy 293.767361 72.351613) (xy 293.770215 72.357213) (xy 293.890528 72.522813) + (xy 294.035286 72.667571) (xy 294.185028 72.776363) (xy 294.20089 72.787887) (xy 294.383281 72.88082) + (xy 294.569318 72.941267) (xy 294.626994 72.980705) (xy 294.654192 73.045063) (xy 294.655 73.059198) + (xy 294.655 73.937026) (xy 294.6545 73.942108) (xy 294.6545 80.8385) (xy 294.634815 80.905539) (xy 294.582011 80.951294) + (xy 294.5305 80.9625) (xy 289.2805 80.9625) (xy 289.213461 80.942815) (xy 289.167706 80.890011) + (xy 289.1565 80.8385) (xy 289.1565 77.568683) (xy 289.1569 77.564625) (xy 289.1569 73.059198) (xy 289.176585 72.992159) + (xy 289.229389 72.946404) (xy 289.242582 72.941267) (xy 289.428619 72.88082) (xy 289.61101 72.787887) + (xy 289.70399 72.720332) (xy 289.776613 72.667571) (xy 289.776615 72.667568) (xy 289.776619 72.667566) + (xy 289.921366 72.522819) (xy 289.921368 72.522815) (xy 289.921371 72.522813) (xy 289.992072 72.4255) + (xy 290.041687 72.35721) (xy 290.13462 72.174819) (xy 290.197877 71.980134) (xy 290.2299 71.777952) + (xy 290.2299 71.573248) (xy 290.224612 71.539861) (xy 290.197877 71.371065) (xy 290.149341 71.221688) + (xy 290.13462 71.176381) (xy 290.134618 71.176378) (xy 290.134618 71.176376) (xy 290.090905 71.090585) + (xy 290.041687 70.99399) (xy 290.02245 70.967512) (xy 289.921371 70.828386) (xy 289.776613 70.683628) + (xy 289.611013 70.563315) (xy 289.611012 70.563314) (xy 289.61101 70.563313) (xy 289.506953 70.510293) + (xy 289.428623 70.470381) (xy 289.233934 70.407122) (xy 289.055428 70.37885) (xy 289.031752 70.3751) + (xy 288.827048 70.3751) (xy 288.803372 70.37885) (xy 288.624865 70.407122) (xy 288.430176 70.470381) + (xy 288.247786 70.563315) (xy 288.082186 70.683628) (xy 287.937432 70.828382) (xy 287.937428 70.828387) + (xy 287.839068 70.96377) (xy 287.783739 71.006436) (xy 287.714125 71.012415) (xy 287.65233 70.97981) + (xy 287.638432 70.96377) (xy 287.540071 70.828387) (xy 287.540067 70.828382) (xy 287.395313 70.683628) + (xy 287.229713 70.563315) (xy 287.229712 70.563314) (xy 287.22971 70.563313) (xy 287.125653 70.510293) + (xy 287.047323 70.470381) (xy 286.852634 70.407122) (xy 286.674128 70.37885) (xy 286.650452 70.3751) + (xy 286.445748 70.3751) (xy 286.422072 70.37885) (xy 286.243565 70.407122) (xy 286.048876 70.470381) + (xy 285.866486 70.563315) (xy 285.700886 70.683628) (xy 285.556132 70.828382) (xy 285.556128 70.828387) + (xy 285.457818 70.963701) (xy 285.402489 71.006367) (xy 285.332875 71.012346) (xy 285.27108 70.979741) + (xy 285.257182 70.963701) (xy 285.158871 70.828387) (xy 285.158867 70.828382) (xy 285.014113 70.683628) + (xy 284.848513 70.563315) (xy 284.848512 70.563314) (xy 284.84851 70.563313) (xy 284.744453 70.510293) + (xy 284.666123 70.470381) (xy 284.471434 70.407122) (xy 284.292928 70.37885) (xy 284.269252 70.3751) + (xy 284.064548 70.3751) (xy 284.040872 70.37885) (xy 283.862365 70.407122) (xy 283.667676 70.470381) + (xy 283.485286 70.563315) (xy 283.319686 70.683628) (xy 283.174932 70.828382) (xy 283.174928 70.828387) + (xy 283.076568 70.96377) (xy 283.021239 71.006436) (xy 282.951625 71.012415) (xy 282.88983 70.97981) + (xy 282.875932 70.96377) (xy 282.777571 70.828387) (xy 282.777567 70.828382) (xy 282.632813 70.683628) + (xy 282.467213 70.563315) (xy 282.467212 70.563314) (xy 282.46721 70.563313) (xy 282.363153 70.510293) + (xy 282.284823 70.470381) (xy 282.090134 70.407122) (xy 281.911628 70.37885) (xy 281.887952 70.3751) + (xy 281.683248 70.3751) (xy 281.659572 70.37885) (xy 281.481065 70.407122) (xy 281.286376 70.470381) + (xy 281.103986 70.563315) (xy 280.938386 70.683628) (xy 280.793632 70.828382) (xy 280.793628 70.828387) + (xy 280.695318 70.963701) (xy 280.639989 71.006367) (xy 280.570375 71.012346) (xy 280.50858 70.979741) + (xy 280.494682 70.963701) (xy 280.396371 70.828387) (xy 280.396367 70.828382) (xy 280.251613 70.683628) + (xy 280.086013 70.563315) (xy 280.086012 70.563314) (xy 280.08601 70.563313) (xy 279.981953 70.510293) + (xy 279.903623 70.470381) (xy 279.708934 70.407122) (xy 279.530428 70.37885) (xy 279.506752 70.3751) + (xy 279.302048 70.3751) (xy 279.278372 70.37885) (xy 279.099865 70.407122) (xy 278.905176 70.470381) + (xy 278.722786 70.563315) (xy 278.557186 70.683628) (xy 278.412428 70.828386) (xy 278.292115 70.993986) + (xy 278.199181 71.176376) (xy 278.135922 71.371065) (xy 278.106028 71.559812) (xy 278.1039 71.573248) + (xy 278.1039 71.777952) (xy 278.105204 71.786184) (xy 278.135922 71.980134) (xy 278.199181 72.174823) + (xy 278.263091 72.300253) (xy 278.289261 72.351613) (xy 278.292115 72.357213) (xy 278.412428 72.522813) + (xy 278.557186 72.667571) (xy 278.706928 72.776363) (xy 278.72279 72.787887) (xy 278.905181 72.88082) + (xy 279.091218 72.941267) (xy 279.148894 72.980705) (xy 279.176092 73.045063) (xy 279.1769 73.059198) + (xy 279.1769 73.937826) (xy 279.1765 73.941889) (xy 279.1765 80.817908) (xy 279.167858 80.84734) + (xy 279.161334 80.877332) (xy 279.157577 80.88235) (xy 279.156815 80.884947) (xy 279.140183 80.905587) + (xy 279.119592 80.926179) (xy 279.05827 80.959666) (xy 279.031909 80.9625) (xy 273.8025 80.9625) + (xy 273.735461 80.942815) (xy 273.689706 80.890011) (xy 273.6785 80.8385) (xy 273.6785 76.287377) + (xy 273.6788 76.284332) (xy 273.6788 73.059198) (xy 273.698485 72.992159) (xy 273.751289 72.946404) + (xy 273.764482 72.941267) (xy 273.950519 72.88082) (xy 274.13291 72.787887) (xy 274.22589 72.720332) + (xy 274.298513 72.667571) (xy 274.298515 72.667568) (xy 274.298519 72.667566) (xy 274.443266 72.522819) + (xy 274.443268 72.522815) (xy 274.443271 72.522813) (xy 274.513972 72.4255) (xy 274.563587 72.35721) + (xy 274.65652 72.174819) (xy 274.719777 71.980134) (xy 274.7518 71.777952) (xy 274.7518 71.573248) + (xy 274.746512 71.539861) (xy 274.719777 71.371065) (xy 274.671241 71.221688) (xy 274.65652 71.176381) + (xy 274.656518 71.176378) (xy 274.656518 71.176376) (xy 274.612805 71.090585) (xy 274.563587 70.99399) + (xy 274.54435 70.967512) (xy 274.443271 70.828386) (xy 274.298513 70.683628) (xy 274.132913 70.563315) + (xy 274.132912 70.563314) (xy 274.13291 70.563313) (xy 274.028853 70.510293) (xy 273.950523 70.470381) + (xy 273.755834 70.407122) (xy 273.577328 70.37885) (xy 273.553652 70.3751) (xy 273.348948 70.3751) + (xy 273.325272 70.37885) (xy 273.146765 70.407122) (xy 272.952076 70.470381) (xy 272.769686 70.563315) + (xy 272.604086 70.683628) (xy 272.459332 70.828382) (xy 272.459328 70.828387) (xy 272.360968 70.96377) + (xy 272.305639 71.006436) (xy 272.236025 71.012415) (xy 272.17423 70.97981) (xy 272.160332 70.96377) + (xy 272.061971 70.828387) (xy 272.061967 70.828382) (xy 271.917213 70.683628) (xy 271.751613 70.563315) + (xy 271.751612 70.563314) (xy 271.75161 70.563313) (xy 271.647553 70.510293) (xy 271.569223 70.470381) + (xy 271.374534 70.407122) (xy 271.196028 70.37885) (xy 271.172352 70.3751) (xy 270.967648 70.3751) + (xy 270.943972 70.37885) (xy 270.765465 70.407122) (xy 270.570776 70.470381) (xy 270.388386 70.563315) + (xy 270.222786 70.683628) (xy 270.078032 70.828382) (xy 270.078028 70.828387) (xy 269.979718 70.963701) + (xy 269.924389 71.006367) (xy 269.854775 71.012346) (xy 269.79298 70.979741) (xy 269.779082 70.963701) + (xy 269.680771 70.828387) (xy 269.680767 70.828382) (xy 269.536013 70.683628) (xy 269.370413 70.563315) + (xy 269.370412 70.563314) (xy 269.37041 70.563313) (xy 269.266353 70.510293) (xy 269.188023 70.470381) + (xy 268.993334 70.407122) (xy 268.814828 70.37885) (xy 268.791152 70.3751) (xy 268.586448 70.3751) + (xy 268.562772 70.37885) (xy 268.384265 70.407122) (xy 268.189576 70.470381) (xy 268.007186 70.563315) + (xy 267.841586 70.683628) (xy 267.696832 70.828382) (xy 267.696828 70.828387) (xy 267.598468 70.96377) + (xy 267.543139 71.006436) (xy 267.473525 71.012415) (xy 267.41173 70.97981) (xy 267.397832 70.96377) + (xy 267.299471 70.828387) (xy 267.299467 70.828382) (xy 267.154713 70.683628) (xy 266.989113 70.563315) + (xy 266.989112 70.563314) (xy 266.98911 70.563313) (xy 266.885053 70.510293) (xy 266.806723 70.470381) + (xy 266.612034 70.407122) (xy 266.433528 70.37885) (xy 266.409852 70.3751) (xy 266.205148 70.3751) + (xy 266.181472 70.37885) (xy 266.002965 70.407122) (xy 265.808276 70.470381) (xy 265.625886 70.563315) + (xy 265.460286 70.683628) (xy 265.315532 70.828382) (xy 265.315528 70.828387) (xy 265.217218 70.963701) + (xy 265.161889 71.006367) (xy 265.092275 71.012346) (xy 265.03048 70.979741) (xy 265.016582 70.963701) + (xy 264.918271 70.828387) (xy 264.918267 70.828382) (xy 264.773513 70.683628) (xy 264.607913 70.563315) + (xy 264.607912 70.563314) (xy 264.60791 70.563313) (xy 264.503853 70.510293) (xy 264.425523 70.470381) + (xy 264.230834 70.407122) (xy 264.052328 70.37885) (xy 264.028652 70.3751) (xy 263.823948 70.3751) + (xy 263.800272 70.37885) (xy 263.621765 70.407122) (xy 263.427076 70.470381) (xy 263.244686 70.563315) + (xy 263.079086 70.683628) (xy 262.934328 70.828386) (xy 262.814015 70.993986) (xy 262.721081 71.176376) + (xy 262.657822 71.371065) (xy 262.627928 71.559812) (xy 262.6258 71.573248) (xy 262.6258 71.777952) + (xy 262.627104 71.786184) (xy 262.657822 71.980134) (xy 262.721081 72.174823) (xy 262.784991 72.300253) + (xy 262.811161 72.351613) (xy 262.814015 72.357213) (xy 262.934328 72.522813) (xy 263.079086 72.667571) + (xy 263.228828 72.776363) (xy 263.24469 72.787887) (xy 263.427081 72.88082) (xy 263.612819 72.94117) + (xy 263.670493 72.980606) (xy 263.697692 73.044965) (xy 263.6985 73.0591) (xy 263.6985 80.8385) + (xy 263.678815 80.905539) (xy 263.626011 80.951294) (xy 263.5745 80.9625) (xy 258.3245 80.9625) + (xy 258.257461 80.942815) (xy 258.211706 80.890011) (xy 258.2005 80.8385) (xy 258.2005 73.059231) + (xy 258.220185 72.992192) (xy 258.272989 72.946437) (xy 258.286181 72.9413) (xy 258.334743 72.925521) + (xy 258.472319 72.88082) (xy 258.65471 72.787887) (xy 258.74769 72.720332) (xy 258.820313 72.667571) + (xy 258.820315 72.667568) (xy 258.820319 72.667566) (xy 258.965066 72.522819) (xy 258.965068 72.522815) + (xy 258.965071 72.522813) (xy 259.035772 72.4255) (xy 259.085387 72.35721) (xy 259.17832 72.174819) + (xy 259.241577 71.980134) (xy 259.2736 71.777952) (xy 259.2736 71.573248) (xy 259.268312 71.539861) + (xy 259.241577 71.371065) (xy 259.193041 71.221688) (xy 259.17832 71.176381) (xy 259.178318 71.176378) + (xy 259.178318 71.176376) (xy 259.134605 71.090585) (xy 259.085387 70.99399) (xy 259.06615 70.967512) + (xy 258.965071 70.828386) (xy 258.820313 70.683628) (xy 258.654713 70.563315) (xy 258.654712 70.563314) + (xy 258.65471 70.563313) (xy 258.550653 70.510293) (xy 258.472323 70.470381) (xy 258.277634 70.407122) + (xy 258.099128 70.37885) (xy 258.075452 70.3751) (xy 257.870748 70.3751) (xy 257.847072 70.37885) + (xy 257.668565 70.407122) (xy 257.473876 70.470381) (xy 257.291486 70.563315) (xy 257.125886 70.683628) + (xy 256.981132 70.828382) (xy 256.981128 70.828387) (xy 256.882818 70.963701) (xy 256.827489 71.006367) + (xy 256.757875 71.012346) (xy 256.69608 70.979741) (xy 256.682182 70.963701) (xy 256.583871 70.828387) + (xy 256.583867 70.828382) (xy 256.439113 70.683628) (xy 256.273513 70.563315) (xy 256.273512 70.563314) + (xy 256.27351 70.563313) (xy 256.169453 70.510293) (xy 256.091123 70.470381) (xy 255.896434 70.407122) + (xy 255.717928 70.37885) (xy 255.694252 70.3751) (xy 255.489548 70.3751) (xy 255.465872 70.37885) + (xy 255.287365 70.407122) (xy 255.092676 70.470381) (xy 254.910286 70.563315) (xy 254.744686 70.683628) + (xy 254.599932 70.828382) (xy 254.599928 70.828387) (xy 254.501568 70.96377) (xy 254.446239 71.006436) + (xy 254.376625 71.012415) (xy 254.31483 70.97981) (xy 254.300932 70.96377) (xy 254.202571 70.828387) + (xy 254.202567 70.828382) (xy 254.057813 70.683628) (xy 253.892213 70.563315) (xy 253.892212 70.563314) + (xy 253.89221 70.563313) (xy 253.788153 70.510293) (xy 253.709823 70.470381) (xy 253.515134 70.407122) + (xy 253.336628 70.37885) (xy 253.312952 70.3751) (xy 253.108248 70.3751) (xy 253.084572 70.37885) + (xy 252.906065 70.407122) (xy 252.711376 70.470381) (xy 252.528986 70.563315) (xy 252.363386 70.683628) + (xy 252.218632 70.828382) (xy 252.218628 70.828387) (xy 252.120318 70.963701) (xy 252.064989 71.006367) + (xy 251.995375 71.012346) (xy 251.93358 70.979741) (xy 251.919682 70.963701) (xy 251.821371 70.828387) + (xy 251.821367 70.828382) (xy 251.676613 70.683628) (xy 251.511013 70.563315) (xy 251.511012 70.563314) + (xy 251.51101 70.563313) (xy 251.406953 70.510293) (xy 251.328623 70.470381) (xy 251.133934 70.407122) + (xy 250.955428 70.37885) (xy 250.931752 70.3751) (xy 250.727048 70.3751) (xy 250.703372 70.37885) + (xy 250.524865 70.407122) (xy 250.330176 70.470381) (xy 250.147786 70.563315) (xy 249.982186 70.683628) + (xy 249.837432 70.828382) (xy 249.837428 70.828387) (xy 249.739068 70.96377) (xy 249.683739 71.006436) + (xy 249.614125 71.012415) (xy 249.55233 70.97981) (xy 249.538432 70.96377) (xy 249.440071 70.828387) + (xy 249.440067 70.828382) (xy 249.295313 70.683628) (xy 249.129713 70.563315) (xy 249.129712 70.563314) + (xy 249.12971 70.563313) (xy 249.025653 70.510293) (xy 248.947323 70.470381) (xy 248.752634 70.407122) + (xy 248.574128 70.37885) (xy 248.550452 70.3751) (xy 248.345748 70.3751) (xy 248.322072 70.37885) + (xy 248.143565 70.407122) (xy 247.948876 70.470381) (xy 247.766486 70.563315) (xy 247.600886 70.683628) + (xy 247.456128 70.828386) (xy 247.335815 70.993986) (xy 247.242881 71.176376) (xy 247.179622 71.371065) + (xy 247.149728 71.559812) (xy 247.1476 71.573248) (xy 247.1476 71.777952) (xy 247.148904 71.786184) + (xy 247.179622 71.980134) (xy 247.242881 72.174823) (xy 247.306791 72.300253) (xy 247.332961 72.351613) + (xy 247.335815 72.357213) (xy 247.456128 72.522813) (xy 247.600886 72.667571) (xy 247.750628 72.776363) + (xy 247.76649 72.787887) (xy 247.948881 72.88082) (xy 248.134918 72.941267) (xy 248.192594 72.980705) + (xy 248.219792 73.045063) (xy 248.2206 73.059198) (xy 248.2206 74.476357) (xy 248.2205 74.477374) + (xy 248.2205 80.8385) (xy 248.200815 80.905539) (xy 248.148011 80.951294) (xy 248.0965 80.9625) + (xy 240.734925 80.9625) (xy 240.667886 80.942815) (xy 240.622131 80.890011) (xy 240.612187 80.820853) + (xy 240.641212 80.757297) (xy 240.647243 80.750819) (xy 240.678967 80.719095) (xy 242.687866 78.710167) + (xy 242.705954 78.666497) (xy 242.71523 78.644104) (xy 242.71523 78.644103) (xy 242.715231 78.644101) + (xy 242.7225 78.626553) (xy 242.7225 73.059198) (xy 242.742185 72.992159) (xy 242.794989 72.946404) + (xy 242.808182 72.941267) (xy 242.994219 72.88082) (xy 243.17661 72.787887) (xy 243.26959 72.720332) + (xy 243.342213 72.667571) (xy 243.342215 72.667568) (xy 243.342219 72.667566) (xy 243.486966 72.522819) + (xy 243.486968 72.522815) (xy 243.486971 72.522813) (xy 243.557672 72.4255) (xy 243.607287 72.35721) + (xy 243.70022 72.174819) (xy 243.763477 71.980134) (xy 243.7955 71.777952) (xy 243.7955 71.573248) + (xy 243.790212 71.539861) (xy 243.763477 71.371065) (xy 243.714941 71.221688) (xy 243.70022 71.176381) + (xy 243.700218 71.176378) (xy 243.700218 71.176376) (xy 243.656505 71.090585) (xy 243.607287 70.99399) + (xy 243.58805 70.967512) (xy 243.486971 70.828386) (xy 243.342213 70.683628) (xy 243.176613 70.563315) + (xy 243.176612 70.563314) (xy 243.17661 70.563313) (xy 243.072553 70.510293) (xy 242.994223 70.470381) + (xy 242.799534 70.407122) (xy 242.621028 70.37885) (xy 242.597352 70.3751) (xy 242.392648 70.3751) + (xy 242.368972 70.37885) (xy 242.190465 70.407122) (xy 241.995776 70.470381) (xy 241.813386 70.563315) + (xy 241.647786 70.683628) (xy 241.503032 70.828382) (xy 241.503028 70.828387) (xy 241.404718 70.963701) + (xy 241.349389 71.006367) (xy 241.279775 71.012346) (xy 241.21798 70.979741) (xy 241.204082 70.963701) + (xy 241.105771 70.828387) (xy 241.105767 70.828382) (xy 240.961013 70.683628) (xy 240.795413 70.563315) + (xy 240.795412 70.563314) (xy 240.79541 70.563313) (xy 240.691353 70.510293) (xy 240.613023 70.470381) + (xy 240.418334 70.407122) (xy 240.239828 70.37885) (xy 240.216152 70.3751) (xy 240.011448 70.3751) + (xy 239.987772 70.37885) (xy 239.809265 70.407122) (xy 239.614576 70.470381) (xy 239.432186 70.563315) + (xy 239.266586 70.683628) (xy 239.121832 70.828382) (xy 239.121828 70.828387) (xy 239.023468 70.96377) + (xy 238.968139 71.006436) (xy 238.898525 71.012415) (xy 238.83673 70.97981) (xy 238.822832 70.96377) + (xy 238.724471 70.828387) (xy 238.724467 70.828382) (xy 238.579713 70.683628) (xy 238.414113 70.563315) + (xy 238.414112 70.563314) (xy 238.41411 70.563313) (xy 238.310053 70.510293) (xy 238.231723 70.470381) + (xy 238.037034 70.407122) (xy 237.858528 70.37885) (xy 237.834852 70.3751) (xy 237.630148 70.3751) + (xy 237.606472 70.37885) (xy 237.427965 70.407122) (xy 237.233276 70.470381) (xy 237.050886 70.563315) + (xy 236.885286 70.683628) (xy 236.740532 70.828382) (xy 236.740528 70.828387) (xy 236.642218 70.963701) + (xy 236.586889 71.006367) (xy 236.517275 71.012346) (xy 236.45548 70.979741) (xy 236.441582 70.963701) + (xy 236.343271 70.828387) (xy 236.343267 70.828382) (xy 236.198513 70.683628) (xy 236.032913 70.563315) + (xy 236.032912 70.563314) (xy 236.03291 70.563313) (xy 235.928853 70.510293) (xy 235.850523 70.470381) + (xy 235.655834 70.407122) (xy 235.477328 70.37885) (xy 235.453652 70.3751) (xy 235.248948 70.3751) + (xy 235.225272 70.37885) (xy 235.046765 70.407122) (xy 234.852076 70.470381) (xy 234.669686 70.563315) + (xy 234.504086 70.683628) (xy 234.359328 70.828386) (xy 234.239015 70.993986) (xy 234.146081 71.176376) + (xy 234.082822 71.371065) (xy 234.052928 71.559812) (xy 234.0508 71.573248) (xy 234.0508 71.777952) + (xy 234.052104 71.786184) (xy 234.082822 71.980134) (xy 234.146081 72.174823) (xy 234.209991 72.300253) + (xy 234.236161 72.351613) (xy 234.239015 72.357213) (xy 234.359328 72.522813) (xy 234.504086 72.667571) + (xy 234.653828 72.776363) (xy 234.66969 72.787887) (xy 234.852081 72.88082) (xy 235.037819 72.94117) + (xy 235.095493 72.980606) (xy 235.122692 73.044965) (xy 235.1235 73.0591) (xy 235.1235 78.435705) + (xy 235.103815 78.502744) (xy 235.087182 78.523385) (xy 232.684428 80.92618) (xy 232.623105 80.959666) + (xy 232.596746 80.9625) (xy 227.637896 80.9625) (xy 227.570857 80.942815) (xy 227.525102 80.890011) + (xy 227.515158 80.820853) (xy 227.544183 80.757297) (xy 227.550215 80.750819) (xy 228.568928 79.732106) + (xy 229.590866 78.710168) (xy 229.590866 78.710166) (xy 229.590868 78.710165) (xy 229.609319 78.665618) + (xy 229.6255 78.626553) (xy 229.6255 78.536047) (xy 229.6255 78.536046) (xy 229.6255 75.083047) + (xy 229.6255 73.459786) (xy 229.6256 73.458774) (xy 229.6256 73.059198) (xy 229.645285 72.992159) + (xy 229.698089 72.946404) (xy 229.711282 72.941267) (xy 229.897319 72.88082) (xy 230.07971 72.787887) + (xy 230.17269 72.720332) (xy 230.245313 72.667571) (xy 230.245315 72.667568) (xy 230.245319 72.667566) + (xy 230.390066 72.522819) (xy 230.390068 72.522815) (xy 230.390071 72.522813) (xy 230.460772 72.4255) + (xy 230.510387 72.35721) (xy 230.60332 72.174819) (xy 230.666577 71.980134) (xy 230.6986 71.777952) + (xy 230.6986 71.573248) (xy 230.693312 71.539861) (xy 230.666577 71.371065) (xy 230.618041 71.221688) + (xy 230.60332 71.176381) (xy 230.603318 71.176378) (xy 230.603318 71.176376) (xy 230.559605 71.090585) + (xy 230.510387 70.99399) (xy 230.49115 70.967512) (xy 230.390071 70.828386) (xy 230.245313 70.683628) + (xy 230.079713 70.563315) (xy 230.079712 70.563314) (xy 230.07971 70.563313) (xy 229.975653 70.510293) + (xy 229.897323 70.470381) (xy 229.702634 70.407122) (xy 229.524128 70.37885) (xy 229.500452 70.3751) + (xy 229.295748 70.3751) (xy 229.272072 70.37885) (xy 229.093565 70.407122) (xy 228.898876 70.470381) + (xy 228.716486 70.563315) (xy 228.550886 70.683628) (xy 228.406132 70.828382) (xy 228.406128 70.828387) + (xy 228.307818 70.963701) (xy 228.252489 71.006367) (xy 228.182875 71.012346) (xy 228.12108 70.979741) + (xy 228.107182 70.963701) (xy 228.008871 70.828387) (xy 228.008867 70.828382) (xy 227.864113 70.683628) + (xy 227.698513 70.563315) (xy 227.698512 70.563314) (xy 227.69851 70.563313) (xy 227.594453 70.510293) + (xy 227.516123 70.470381) (xy 227.321434 70.407122) (xy 227.142928 70.37885) (xy 227.119252 70.3751) + (xy 226.914548 70.3751) (xy 226.890872 70.37885) (xy 226.712365 70.407122) (xy 226.517676 70.470381) + (xy 226.335286 70.563315) (xy 226.169686 70.683628) (xy 226.024932 70.828382) (xy 226.024928 70.828387) + (xy 225.926568 70.96377) (xy 225.871239 71.006436) (xy 225.801625 71.012415) (xy 225.73983 70.97981) + (xy 225.725932 70.96377) (xy 225.627571 70.828387) (xy 225.627567 70.828382) (xy 225.482813 70.683628) + (xy 225.317213 70.563315) (xy 225.317212 70.563314) (xy 225.31721 70.563313) (xy 225.213153 70.510293) + (xy 225.134823 70.470381) (xy 224.940134 70.407122) (xy 224.761628 70.37885) (xy 224.737952 70.3751) + (xy 224.533248 70.3751) (xy 224.509572 70.37885) (xy 224.331065 70.407122) (xy 224.136376 70.470381) + (xy 223.953986 70.563315) (xy 223.788386 70.683628) (xy 223.643632 70.828382) (xy 223.643628 70.828387) + (xy 223.545318 70.963701) (xy 223.489989 71.006367) (xy 223.420375 71.012346) (xy 223.35858 70.979741) + (xy 223.344682 70.963701) (xy 223.246371 70.828387) (xy 223.246367 70.828382) (xy 223.101613 70.683628) + (xy 222.936013 70.563315) (xy 222.936012 70.563314) (xy 222.93601 70.563313) (xy 222.831953 70.510293) + (xy 222.753623 70.470381) (xy 222.558934 70.407122) (xy 222.380428 70.37885) (xy 222.356752 70.3751) + (xy 222.152048 70.3751) (xy 222.128372 70.37885) (xy 221.949865 70.407122) (xy 221.755176 70.470381) + (xy 221.572786 70.563315) (xy 221.407186 70.683628) (xy 221.262428 70.828386) (xy 221.142115 70.993986) + (xy 221.049181 71.176376) (xy 220.985922 71.371065) (xy 220.956028 71.559812) (xy 220.9539 71.573248) + (xy 220.9539 71.777952) (xy 220.955204 71.786184) (xy 220.985922 71.980134) (xy 221.049181 72.174823) + (xy 221.113091 72.300253) (xy 221.139261 72.351613) (xy 221.142115 72.357213) (xy 221.262428 72.522813) + (xy 221.407186 72.667571) (xy 221.556928 72.776363) (xy 221.57279 72.787887) (xy 221.755181 72.88082) + (xy 221.922829 72.935292) (xy 221.940818 72.941137) (xy 221.998494 72.980575) (xy 222.025692 73.044933) + (xy 222.0265 73.059068) (xy 222.0265 78.436687) (xy 222.006815 78.503726) (xy 221.990175 78.524375) + (xy 219.588007 80.926188) (xy 219.526681 80.959668) (xy 219.500332 80.9625) (xy 214.541196 80.9625) + (xy 214.474157 80.942815) (xy 214.428402 80.890011) (xy 214.418458 80.820853) (xy 214.447483 80.757297) + (xy 214.453498 80.750835) (xy 216.469702 78.734331) (xy 216.490987 78.713046) (xy 216.49362 78.710582) + (xy 216.493861 78.710171) (xy 216.493865 78.710168) (xy 216.493866 78.710162) (xy 216.493868 78.710159) + (xy 216.493875 78.710154) (xy 216.493882 78.710135) (xy 216.494922 78.708368) (xy 216.496564 78.703659) + (xy 216.511952 78.666503) (xy 216.5285 78.626553) (xy 216.5285 78.626549) (xy 216.528501 78.626547) + (xy 216.528503 78.626537) (xy 216.5285 78.581543) (xy 216.5285 73.059295) (xy 216.548185 72.992256) + (xy 216.600989 72.946501) (xy 216.614173 72.941367) (xy 216.800519 72.88082) (xy 216.98291 72.787887) + (xy 217.07589 72.720332) (xy 217.148513 72.667571) (xy 217.148515 72.667568) (xy 217.148519 72.667566) + (xy 217.293266 72.522819) (xy 217.293268 72.522815) (xy 217.293271 72.522813) (xy 217.363972 72.4255) + (xy 217.413587 72.35721) (xy 217.50652 72.174819) (xy 217.569777 71.980134) (xy 217.6018 71.777952) + (xy 217.6018 71.573248) (xy 217.596512 71.539861) (xy 217.569777 71.371065) (xy 217.521241 71.221688) + (xy 217.50652 71.176381) (xy 217.506518 71.176378) (xy 217.506518 71.176376) (xy 217.462805 71.090585) + (xy 217.413587 70.99399) (xy 217.39435 70.967512) (xy 217.293271 70.828386) (xy 217.148513 70.683628) + (xy 216.982913 70.563315) (xy 216.982912 70.563314) (xy 216.98291 70.563313) (xy 216.878853 70.510293) + (xy 216.800523 70.470381) (xy 216.605834 70.407122) (xy 216.427328 70.37885) (xy 216.403652 70.3751) + (xy 216.198948 70.3751) (xy 216.175272 70.37885) (xy 215.996765 70.407122) (xy 215.802076 70.470381) + (xy 215.619686 70.563315) (xy 215.454086 70.683628) (xy 215.309332 70.828382) (xy 215.309328 70.828387) + (xy 215.210968 70.96377) (xy 215.155639 71.006436) (xy 215.086025 71.012415) (xy 215.02423 70.97981) + (xy 215.010332 70.96377) (xy 214.911971 70.828387) (xy 214.911967 70.828382) (xy 214.767213 70.683628) + (xy 214.601613 70.563315) (xy 214.601612 70.563314) (xy 214.60161 70.563313) (xy 214.497553 70.510293) + (xy 214.419223 70.470381) (xy 214.224534 70.407122) (xy 214.046028 70.37885) (xy 214.022352 70.3751) + (xy 213.817648 70.3751) (xy 213.793972 70.37885) (xy 213.615465 70.407122) (xy 213.420776 70.470381) + (xy 213.238386 70.563315) (xy 213.072786 70.683628) (xy 212.928032 70.828382) (xy 212.928028 70.828387) + (xy 212.829718 70.963701) (xy 212.774389 71.006367) (xy 212.704775 71.012346) (xy 212.64298 70.979741) + (xy 212.629082 70.963701) (xy 212.530771 70.828387) (xy 212.530767 70.828382) (xy 212.386013 70.683628) + (xy 212.220413 70.563315) (xy 212.220412 70.563314) (xy 212.22041 70.563313) (xy 212.116353 70.510293) + (xy 212.038023 70.470381) (xy 211.843334 70.407122) (xy 211.664828 70.37885) (xy 211.641152 70.3751) + (xy 211.436448 70.3751) (xy 211.412772 70.37885) (xy 211.234265 70.407122) (xy 211.039576 70.470381) + (xy 210.857186 70.563315) (xy 210.691586 70.683628) (xy 210.546832 70.828382) (xy 210.546828 70.828387) + (xy 210.448468 70.96377) (xy 210.393139 71.006436) (xy 210.323525 71.012415) (xy 210.26173 70.97981) + (xy 210.247832 70.96377) (xy 210.149471 70.828387) (xy 210.149467 70.828382) (xy 210.004713 70.683628) + (xy 209.839113 70.563315) (xy 209.839112 70.563314) (xy 209.83911 70.563313) (xy 209.735053 70.510293) + (xy 209.656723 70.470381) (xy 209.462034 70.407122) (xy 209.283528 70.37885) (xy 209.259852 70.3751) + (xy 209.055148 70.3751) (xy 209.031472 70.37885) (xy 208.852965 70.407122) (xy 208.658276 70.470381) + (xy 208.475886 70.563315) (xy 208.310286 70.683628) (xy 208.165528 70.828386) (xy 208.045215 70.993986) + (xy 207.952281 71.176376) (xy 207.889022 71.371065) (xy 207.859128 71.559812) (xy 207.857 71.573248) + (xy 207.857 71.777952) (xy 207.858304 71.786184) (xy 207.889022 71.980134) (xy 207.952281 72.174823) + (xy 208.016191 72.300253) (xy 208.042361 72.351613) (xy 208.045215 72.357213) (xy 208.165528 72.522813) + (xy 208.310286 72.667571) (xy 208.460028 72.776363) (xy 208.47589 72.787887) (xy 208.584734 72.843346) + (xy 208.658276 72.880818) (xy 208.658278 72.880818) (xy 208.658281 72.88082) (xy 208.795857 72.925521) + (xy 208.844819 72.94143) (xy 208.902494 72.980868) (xy 208.929692 73.045227) (xy 208.9305 73.059361) + (xy 208.9305 78.435699) (xy 208.910815 78.502738) (xy 208.894179 78.523382) (xy 207.798855 79.618656) + (xy 206.50262 80.914833) (xy 206.491269 80.926183) (xy 206.429945 80.959667) (xy 206.40359 80.9625) + (xy 201.444821 80.9625) (xy 201.377782 80.942815) (xy 201.332027 80.890011) (xy 201.322083 80.820853) + (xy 201.351108 80.757297) (xy 201.357141 80.750817) (xy 202.04532 80.062663) (xy 203.357845 78.750187) + (xy 203.384085 78.728719) (xy 203.389604 78.71843) (xy 203.397863 78.710172) (xy 203.408478 78.684544) + (xy 203.413757 78.673406) (xy 203.426868 78.648966) (xy 203.42803 78.637342) (xy 203.432498 78.626557) + (xy 203.432498 78.59266) (xy 203.435874 78.558909) (xy 203.435871 78.558902) (xy 203.435214 78.552121) + (xy 203.433047 78.54106) (xy 203.432047 78.530446) (xy 203.432443 78.528402) (xy 203.4315 78.518815) + (xy 203.4315 73.661183) (xy 203.4319 73.657125) (xy 203.4319 73.059198) (xy 203.451585 72.992159) + (xy 203.504389 72.946404) (xy 203.517582 72.941267) (xy 203.703619 72.88082) (xy 203.88601 72.787887) + (xy 203.97899 72.720332) (xy 204.051613 72.667571) (xy 204.051615 72.667568) (xy 204.051619 72.667566) + (xy 204.196366 72.522819) (xy 204.196368 72.522815) (xy 204.196371 72.522813) (xy 204.267072 72.4255) + (xy 204.316687 72.35721) (xy 204.40962 72.174819) (xy 204.472877 71.980134) (xy 204.5049 71.777952) + (xy 204.5049 71.573248) (xy 204.499612 71.539861) (xy 204.472877 71.371065) (xy 204.424341 71.221688) + (xy 204.40962 71.176381) (xy 204.409618 71.176378) (xy 204.409618 71.176376) (xy 204.365905 71.090585) + (xy 204.316687 70.99399) (xy 204.29745 70.967512) (xy 204.196371 70.828386) (xy 204.051613 70.683628) + (xy 203.886013 70.563315) (xy 203.886012 70.563314) (xy 203.88601 70.563313) (xy 203.781953 70.510293) + (xy 203.703623 70.470381) (xy 203.508934 70.407122) (xy 203.330428 70.37885) (xy 203.306752 70.3751) + (xy 203.102048 70.3751) (xy 203.078372 70.37885) (xy 202.899865 70.407122) (xy 202.705176 70.470381) + (xy 202.522786 70.563315) (xy 202.357186 70.683628) (xy 202.212432 70.828382) (xy 202.212428 70.828387) + (xy 202.114068 70.96377) (xy 202.058739 71.006436) (xy 201.989125 71.012415) (xy 201.92733 70.97981) + (xy 201.913432 70.96377) (xy 201.815071 70.828387) (xy 201.815067 70.828382) (xy 201.670313 70.683628) + (xy 201.504713 70.563315) (xy 201.504712 70.563314) (xy 201.50471 70.563313) (xy 201.400653 70.510293) + (xy 201.322323 70.470381) (xy 201.127634 70.407122) (xy 200.949128 70.37885) (xy 200.925452 70.3751) + (xy 200.720748 70.3751) (xy 200.697072 70.37885) (xy 200.518565 70.407122) (xy 200.323876 70.470381) + (xy 200.141486 70.563315) (xy 199.975886 70.683628) (xy 199.831132 70.828382) (xy 199.831128 70.828387) + (xy 199.732818 70.963701) (xy 199.677489 71.006367) (xy 199.607875 71.012346) (xy 199.54608 70.979741) + (xy 199.532182 70.963701) (xy 199.433871 70.828387) (xy 199.433867 70.828382) (xy 199.289113 70.683628) + (xy 199.123513 70.563315) (xy 199.123512 70.563314) (xy 199.12351 70.563313) (xy 199.019453 70.510293) + (xy 198.941123 70.470381) (xy 198.746434 70.407122) (xy 198.567928 70.37885) (xy 198.544252 70.3751) + (xy 198.339548 70.3751) (xy 198.315872 70.37885) (xy 198.137365 70.407122) (xy 197.942676 70.470381) + (xy 197.760286 70.563315) (xy 197.594686 70.683628) (xy 197.449932 70.828382) (xy 197.449928 70.828387) + (xy 197.351568 70.96377) (xy 197.296239 71.006436) (xy 197.226625 71.012415) (xy 197.16483 70.97981) + (xy 197.150932 70.96377) (xy 197.052571 70.828387) (xy 197.052567 70.828382) (xy 196.907813 70.683628) + (xy 196.742213 70.563315) (xy 196.742212 70.563314) (xy 196.74221 70.563313) (xy 196.638153 70.510293) + (xy 196.559823 70.470381) (xy 196.365134 70.407122) (xy 196.186628 70.37885) (xy 196.162952 70.3751) + (xy 195.958248 70.3751) (xy 195.934572 70.37885) (xy 195.756065 70.407122) (xy 195.561376 70.470381) + (xy 195.378986 70.563315) (xy 195.213386 70.683628) (xy 195.068632 70.828382) (xy 195.068628 70.828387) + (xy 194.970318 70.963701) (xy 194.914989 71.006367) (xy 194.845375 71.012346) (xy 194.78358 70.979741) + (xy 194.769682 70.963701) (xy 194.671371 70.828387) (xy 194.671367 70.828382) (xy 194.526613 70.683628) + (xy 194.361013 70.563315) (xy 194.361012 70.563314) (xy 194.36101 70.563313) (xy 194.256953 70.510293) + (xy 194.178623 70.470381) (xy 193.983934 70.407122) (xy 193.805428 70.37885) (xy 193.781752 70.3751) + (xy 193.577048 70.3751) (xy 193.553372 70.37885) (xy 193.374865 70.407122) (xy 193.180176 70.470381) + (xy 192.997786 70.563315) (xy 192.832186 70.683628) (xy 192.687428 70.828386) (xy 192.567115 70.993986) + (xy 192.474181 71.176376) (xy 192.410922 71.371065) (xy 192.381028 71.559812) (xy 192.3789 71.573248) + (xy 192.3789 71.777952) (xy 192.380204 71.786184) (xy 192.410922 71.980134) (xy 192.474181 72.174823) + (xy 192.538091 72.300253) (xy 192.564261 72.351613) (xy 192.567115 72.357213) (xy 192.687428 72.522813) + (xy 192.832186 72.667571) (xy 192.981928 72.776363) (xy 192.99779 72.787887) (xy 193.180181 72.88082) + (xy 193.366218 72.941267) (xy 193.423894 72.980705) (xy 193.451092 73.045063) (xy 193.4519 73.059198) + (xy 193.4519 73.342326) (xy 193.4515 73.346389) (xy 193.4515 78.436699) (xy 193.431815 78.503738) + (xy 193.415179 78.524382) (xy 192.257513 79.681999) (xy 191.033874 80.905587) (xy 191.013277 80.926183) + (xy 190.951954 80.959667) (xy 190.925598 80.9625) (xy 185.966029 80.9625) (xy 185.89899 80.942815) + (xy 185.853235 80.890011) (xy 185.843291 80.820853) (xy 185.872316 80.757297) (xy 185.878345 80.750822) + (xy 186.472551 80.156577) (xy 187.909475 78.719558) (xy 187.918865 78.710168) (xy 187.918865 78.710166) + (xy 187.91887 78.710162) (xy 187.936921 78.666578) (xy 187.93695 78.666508) (xy 187.936952 78.666503) + (xy 187.944216 78.648966) (xy 187.951838 78.630566) (xy 187.953419 78.627101) (xy 187.9535 78.626728) + (xy 187.9535 78.626546) (xy 187.953501 78.626545) (xy 187.9535 78.581542) (xy 187.9535 76.437847) + (xy 187.9535 74.137877) (xy 187.9538 74.134832) (xy 187.9538 73.059198) (xy 187.973485 72.992159) + (xy 188.026289 72.946404) (xy 188.039482 72.941267) (xy 188.225519 72.88082) (xy 188.40791 72.787887) + (xy 188.50089 72.720332) (xy 188.573513 72.667571) (xy 188.573515 72.667568) (xy 188.573519 72.667566) + (xy 188.718266 72.522819) (xy 188.718268 72.522815) (xy 188.718271 72.522813) (xy 188.788972 72.4255) + (xy 188.838587 72.35721) (xy 188.93152 72.174819) (xy 188.994777 71.980134) (xy 189.0268 71.777952) + (xy 189.0268 71.573248) (xy 189.021512 71.539861) (xy 188.994777 71.371065) (xy 188.946241 71.221688) + (xy 188.93152 71.176381) (xy 188.931518 71.176378) (xy 188.931518 71.176376) (xy 188.887805 71.090585) + (xy 188.838587 70.99399) (xy 188.81935 70.967512) (xy 188.718271 70.828386) (xy 188.573513 70.683628) + (xy 188.407913 70.563315) (xy 188.407912 70.563314) (xy 188.40791 70.563313) (xy 188.303853 70.510293) + (xy 188.225523 70.470381) (xy 188.030834 70.407122) (xy 187.852328 70.37885) (xy 187.828652 70.3751) + (xy 187.623948 70.3751) (xy 187.600272 70.37885) (xy 187.421765 70.407122) (xy 187.227076 70.470381) + (xy 187.044686 70.563315) (xy 186.879086 70.683628) (xy 186.734332 70.828382) (xy 186.734328 70.828387) + (xy 186.635968 70.96377) (xy 186.580639 71.006436) (xy 186.511025 71.012415) (xy 186.44923 70.97981) + (xy 186.435332 70.96377) (xy 186.336971 70.828387) (xy 186.336967 70.828382) (xy 186.192213 70.683628) + (xy 186.026613 70.563315) (xy 186.026612 70.563314) (xy 186.02661 70.563313) (xy 185.922553 70.510293) + (xy 185.844223 70.470381) (xy 185.649534 70.407122) (xy 185.471028 70.37885) (xy 185.447352 70.3751) + (xy 185.242648 70.3751) (xy 185.218972 70.37885) (xy 185.040465 70.407122) (xy 184.845776 70.470381) + (xy 184.663386 70.563315) (xy 184.497786 70.683628) (xy 184.353032 70.828382) (xy 184.353028 70.828387) + (xy 184.249852 70.970398) (xy 184.194522 71.013064) (xy 184.124909 71.019043) (xy 184.063114 70.986438) + (xy 184.049216 70.970398) (xy 183.941971 70.822786) (xy 183.797213 70.678028) (xy 183.631613 70.557715) + (xy 183.631612 70.557714) (xy 183.63161 70.557713) (xy 183.574653 70.528691) (xy 183.449223 70.464781) + (xy 183.254534 70.401522) (xy 183.079995 70.373878) (xy 183.052352 70.3695) (xy 182.847648 70.3695) + (xy 182.823329 70.373351) (xy 182.645465 70.401522) (xy 182.450776 70.464781) (xy 182.268386 70.557715) + (xy 182.102786 70.678028) (xy 181.958032 70.822782) (xy 181.958028 70.822787) (xy 181.864533 70.951473) + (xy 181.809203 70.994139) (xy 181.73959 71.000118) (xy 181.677795 70.967512) (xy 181.663901 70.951479) + (xy 181.574466 70.828381) (xy 181.429719 70.683634) (xy 181.429713 70.683628) (xy 181.264113 70.563315) + (xy 181.264112 70.563314) (xy 181.26411 70.563313) (xy 181.160053 70.510293) (xy 181.081723 70.470381) + (xy 180.887034 70.407122) (xy 180.708528 70.37885) (xy 180.684852 70.3751) (xy 180.480148 70.3751) + (xy 180.456472 70.37885) (xy 180.277965 70.407122) (xy 180.083276 70.470381) (xy 179.900886 70.563315) + (xy 179.735286 70.683628) (xy 179.590528 70.828386) (xy 179.470215 70.993986) (xy 179.377281 71.176376) + (xy 179.314022 71.371065) (xy 179.284128 71.559812) (xy 179.282 71.573248) (xy 179.282 71.777952) + (xy 179.283304 71.786184) (xy 179.314022 71.980134) (xy 179.377281 72.174823) (xy 179.441191 72.300253) + (xy 179.467361 72.351613) (xy 179.470215 72.357213) (xy 179.590528 72.522813) (xy 179.735286 72.667571) + (xy 179.885028 72.776363) (xy 179.90089 72.787887) (xy 180.083281 72.88082) (xy 180.269318 72.941267) + (xy 180.326994 72.980705) (xy 180.354192 73.045063) (xy 180.355 73.059198) (xy 180.355 75.068426) + (xy 180.3545 75.073508) (xy 180.3545 78.436704) (xy 180.334815 78.503743) (xy 180.318181 78.524385) + (xy 177.916385 80.926181) (xy 177.855062 80.959666) (xy 177.828704 80.9625) (xy 172.868895 80.9625) + (xy 172.801856 80.942815) (xy 172.756101 80.890011) (xy 172.746157 80.820853) (xy 172.775182 80.757297) + (xy 172.781214 80.750819) (xy 173.764323 79.76771) (xy 174.787703 78.74433) (xy 174.818313 78.715332) + (xy 174.819608 78.712426) (xy 174.821863 78.710173) (xy 174.821864 78.710169) (xy 174.821866 78.710168) + (xy 174.838017 78.671175) (xy 174.855194 78.632682) (xy 174.85528 78.629498) (xy 174.8565 78.626553) + (xy 174.8565 78.584356) (xy 174.857639 78.54221) (xy 174.8565 78.539235) (xy 174.8565 78.536047) + (xy 174.8565 78.536046) (xy 174.8565 78.535544) (xy 174.856229 78.533963) (xy 174.855766 78.532357) + (xy 174.854117 78.524065) (xy 174.854335 78.524021) (xy 174.8475 78.489654) (xy 174.8475 73.053598) + (xy 174.867185 72.986559) (xy 174.919989 72.940804) (xy 174.933182 72.935667) (xy 174.934336 72.935292) + (xy 175.119219 72.87522) (xy 175.30161 72.782287) (xy 175.403564 72.708214) (xy 175.467213 72.661971) + (xy 175.467215 72.661968) (xy 175.467219 72.661966) (xy 175.611966 72.517219) (xy 175.611968 72.517215) + (xy 175.611971 72.517213) (xy 175.678604 72.425499) (xy 175.732287 72.35161) (xy 175.82522 72.169219) + (xy 175.888477 71.974534) (xy 175.9205 71.772352) (xy 175.9205 71.567648) (xy 175.906798 71.481137) + (xy 175.888477 71.365465) (xy 175.841761 71.221689) (xy 175.82522 71.170781) (xy 175.825218 71.170778) + (xy 175.825218 71.170776) (xy 175.784351 71.090572) (xy 175.732287 70.98839) (xy 175.71435 70.963701) + (xy 175.611971 70.822786) (xy 175.467213 70.678028) (xy 175.301613 70.557715) (xy 175.301612 70.557714) + (xy 175.30161 70.557713) (xy 175.244653 70.528691) (xy 175.119223 70.464781) (xy 174.924534 70.401522) + (xy 174.749995 70.373878) (xy 174.722352 70.3695) (xy 174.517648 70.3695) (xy 174.493329 70.373351) + (xy 174.315465 70.401522) (xy 174.120776 70.464781) (xy 173.938386 70.557715) (xy 173.772786 70.678028) + (xy 173.628032 70.822782) (xy 173.628028 70.822787) (xy 173.532333 70.954501) (xy 173.477003 70.997167) + (xy 173.40739 71.003146) (xy 173.345595 70.97054) (xy 173.3317 70.954506) (xy 173.240066 70.828381) + (xy 173.095319 70.683634) (xy 173.095313 70.683628) (xy 172.929713 70.563315) (xy 172.929712 70.563314) + (xy 172.92971 70.563313) (xy 172.825653 70.510293) (xy 172.747323 70.470381) (xy 172.552634 70.407122) + (xy 172.374128 70.37885) (xy 172.350452 70.3751) (xy 172.145748 70.3751) (xy 172.122072 70.37885) + (xy 171.943565 70.407122) (xy 171.748876 70.470381) (xy 171.566486 70.563315) (xy 171.400886 70.683628) + (xy 171.256132 70.828382) (xy 171.256128 70.828387) (xy 171.157818 70.963701) (xy 171.102489 71.006367) + (xy 171.032875 71.012346) (xy 170.97108 70.979741) (xy 170.957182 70.963701) (xy 170.858871 70.828387) + (xy 170.858867 70.828382) (xy 170.714113 70.683628) (xy 170.548513 70.563315) (xy 170.548512 70.563314) + (xy 170.54851 70.563313) (xy 170.444453 70.510293) (xy 170.366123 70.470381) (xy 170.171434 70.407122) + (xy 169.992928 70.37885) (xy 169.969252 70.3751) (xy 169.764548 70.3751) (xy 169.740872 70.37885) + (xy 169.562365 70.407122) (xy 169.367676 70.470381) (xy 169.185286 70.563315) (xy 169.019686 70.683628) + (xy 168.874932 70.828382) (xy 168.874928 70.828387) (xy 168.776568 70.96377) (xy 168.721239 71.006436) + (xy 168.651625 71.012415) (xy 168.58983 70.97981) (xy 168.575932 70.96377) (xy 168.477571 70.828387) + (xy 168.477567 70.828382) (xy 168.332813 70.683628) (xy 168.167213 70.563315) (xy 168.167212 70.563314) + (xy 168.16721 70.563313) (xy 168.063153 70.510293) (xy 167.984823 70.470381) (xy 167.790134 70.407122) + (xy 167.611628 70.37885) (xy 167.587952 70.3751) (xy 167.383248 70.3751) (xy 167.359572 70.37885) + (xy 167.181065 70.407122) (xy 166.986376 70.470381) (xy 166.803986 70.563315) (xy 166.638386 70.683628) + (xy 166.493628 70.828386) (xy 166.373315 70.993986) (xy 166.280381 71.176376) (xy 166.217122 71.371065) + (xy 166.187228 71.559812) (xy 166.1851 71.573248) (xy 166.1851 71.777952) (xy 166.186404 71.786184) + (xy 166.217122 71.980134) (xy 166.280381 72.174823) (xy 166.344291 72.300253) (xy 166.370461 72.351613) + (xy 166.373315 72.357213) (xy 166.493628 72.522813) (xy 166.638386 72.667571) (xy 166.788128 72.776363) + (xy 166.80399 72.787887) (xy 166.986381 72.88082) (xy 167.154029 72.935292) (xy 167.172818 72.941397) + (xy 167.230494 72.980835) (xy 167.257692 73.045193) (xy 167.2585 73.059328) (xy 167.2585 78.435696) + (xy 167.238815 78.502735) (xy 167.222178 78.52338) (xy 165.350208 80.395211) (xy 164.839795 80.905587) + (xy 164.819196 80.926184) (xy 164.757872 80.959667) (xy 164.731518 80.9625) (xy 159.77274 80.9625) + (xy 159.705701 80.942815) (xy 159.659946 80.890011) (xy 159.650002 80.820853) (xy 159.679027 80.757297) + (xy 159.685062 80.750815) (xy 159.712668 80.723211) (xy 161.685847 78.750186) (xy 161.712085 78.728719) + (xy 161.717602 78.718434) (xy 161.725861 78.710176) (xy 161.73884 78.678843) (xy 161.754868 78.648966) + (xy 161.756029 78.637348) (xy 161.760498 78.626562) (xy 161.760499 78.598829) (xy 161.761114 78.586506) + (xy 161.761114 78.586503) (xy 161.763874 78.558909) (xy 161.763871 78.558901) (xy 161.763215 78.552127) + (xy 161.761048 78.541069) (xy 161.760047 78.53045) (xy 161.760444 78.528403) (xy 161.7595 78.518813) + (xy 161.7595 73.059361) (xy 161.779185 72.992322) (xy 161.831989 72.946567) (xy 161.845181 72.94143) + (xy 161.894143 72.925521) (xy 162.031719 72.88082) (xy 162.21411 72.787887) (xy 162.30709 72.720332) + (xy 162.379713 72.667571) (xy 162.379715 72.667568) (xy 162.379719 72.667566) (xy 162.524466 72.522819) + (xy 162.524468 72.522815) (xy 162.524471 72.522813) (xy 162.595172 72.4255) (xy 162.644787 72.35721) + (xy 162.73772 72.174819) (xy 162.800977 71.980134) (xy 162.833 71.777952) (xy 162.833 71.573248) + (xy 162.827712 71.539861) (xy 162.800977 71.371065) (xy 162.752441 71.221688) (xy 162.73772 71.176381) + (xy 162.737718 71.176378) (xy 162.737718 71.176376) (xy 162.694005 71.090585) (xy 162.644787 70.99399) + (xy 162.62555 70.967512) (xy 162.524471 70.828386) (xy 162.379713 70.683628) (xy 162.214113 70.563315) + (xy 162.214112 70.563314) (xy 162.21411 70.563313) (xy 162.110053 70.510293) (xy 162.031723 70.470381) + (xy 161.837034 70.407122) (xy 161.658528 70.37885) (xy 161.634852 70.3751) (xy 161.430148 70.3751) + (xy 161.406472 70.37885) (xy 161.227965 70.407122) (xy 161.033276 70.470381) (xy 160.850886 70.563315) + (xy 160.685286 70.683628) (xy 160.540532 70.828382) (xy 160.540528 70.828387) (xy 160.442218 70.963701) + (xy 160.386889 71.006367) (xy 160.317275 71.012346) (xy 160.25548 70.979741) (xy 160.241582 70.963701) + (xy 160.143271 70.828387) (xy 160.143267 70.828382) (xy 159.998513 70.683628) (xy 159.832913 70.563315) + (xy 159.832912 70.563314) (xy 159.83291 70.563313) (xy 159.728853 70.510293) (xy 159.650523 70.470381) + (xy 159.455834 70.407122) (xy 159.277328 70.37885) (xy 159.253652 70.3751) (xy 159.048948 70.3751) + (xy 159.025272 70.37885) (xy 158.846765 70.407122) (xy 158.652076 70.470381) (xy 158.469686 70.563315) + (xy 158.304086 70.683628) (xy 158.159332 70.828382) (xy 158.159328 70.828387) (xy 158.060968 70.96377) + (xy 158.005639 71.006436) (xy 157.936025 71.012415) (xy 157.87423 70.97981) (xy 157.860332 70.96377) + (xy 157.761971 70.828387) (xy 157.761967 70.828382) (xy 157.617213 70.683628) (xy 157.451613 70.563315) + (xy 157.451612 70.563314) (xy 157.45161 70.563313) (xy 157.347553 70.510293) (xy 157.269223 70.470381) + (xy 157.074534 70.407122) (xy 156.896028 70.37885) (xy 156.872352 70.3751) (xy 156.667648 70.3751) + (xy 156.643972 70.37885) (xy 156.465465 70.407122) (xy 156.270776 70.470381) (xy 156.088386 70.563315) + (xy 155.922786 70.683628) (xy 155.778032 70.828382) (xy 155.778028 70.828387) (xy 155.679718 70.963701) + (xy 155.624389 71.006367) (xy 155.554775 71.012346) (xy 155.49298 70.979741) (xy 155.479082 70.963701) + (xy 155.380771 70.828387) (xy 155.380767 70.828382) (xy 155.236013 70.683628) (xy 155.070413 70.563315) + (xy 155.070412 70.563314) (xy 155.07041 70.563313) (xy 154.966353 70.510293) (xy 154.888023 70.470381) + (xy 154.693334 70.407122) (xy 154.514828 70.37885) (xy 154.491152 70.3751) (xy 154.286448 70.3751) + (xy 154.262772 70.37885) (xy 154.084265 70.407122) (xy 153.889576 70.470381) (xy 153.707186 70.563315) + (xy 153.541586 70.683628) (xy 153.396832 70.828382) (xy 153.396828 70.828387) (xy 153.298468 70.96377) + (xy 153.243139 71.006436) (xy 153.173525 71.012415) (xy 153.11173 70.97981) (xy 153.097832 70.96377) + (xy 152.999471 70.828387) (xy 152.999467 70.828382) (xy 152.854713 70.683628) (xy 152.689113 70.563315) + (xy 152.689112 70.563314) (xy 152.68911 70.563313) (xy 152.585053 70.510293) (xy 152.506723 70.470381) + (xy 152.312034 70.407122) (xy 152.133528 70.37885) (xy 152.109852 70.3751) (xy 151.905148 70.3751) + (xy 151.881472 70.37885) (xy 151.702965 70.407122) (xy 151.508276 70.470381) (xy 151.325886 70.563315) + (xy 151.160286 70.683628) (xy 151.015528 70.828386) (xy 150.895215 70.993986) (xy 150.802281 71.176376) + (xy 150.739022 71.371065) (xy 150.709128 71.559812) (xy 150.707 71.573248) (xy 150.707 71.777952) + (xy 150.708304 71.786184) (xy 150.739022 71.980134) (xy 150.802281 72.174823) (xy 150.866191 72.300253) + (xy 150.892361 72.351613) (xy 150.895215 72.357213) (xy 151.015528 72.522813) (xy 151.160286 72.667571) + (xy 151.310028 72.776363) (xy 151.32589 72.787887) (xy 151.434734 72.843346) (xy 151.508276 72.880818) + (xy 151.508278 72.880818) (xy 151.508281 72.88082) (xy 151.645857 72.925521) (xy 151.694819 72.94143) + (xy 151.752494 72.980868) (xy 151.779692 73.045227) (xy 151.7805 73.059361) (xy 151.7805 78.435693) + (xy 151.760815 78.502732) (xy 151.744177 78.523379) (xy 150.939682 79.327795) (xy 149.341133 80.926186) + (xy 149.27981 80.959668) (xy 149.253458 80.9625) (xy 144.294108 80.9625) (xy 144.227069 80.942815) + (xy 144.181314 80.890011) (xy 144.17137 80.820853) (xy 144.200395 80.757297) (xy 144.206422 80.750823) + (xy 144.489516 80.4677) (xy 146.23226 78.724773) (xy 146.243529 78.713503) (xy 146.24657 78.710687) + (xy 146.246862 78.71017) (xy 146.246865 78.710168) (xy 146.246866 78.710164) (xy 146.246873 78.710158) + (xy 146.246882 78.710135) (xy 146.248578 78.707141) (xy 146.250369 78.701716) (xy 146.2653 78.665662) + (xy 146.265318 78.665618) (xy 146.279844 78.630549) (xy 146.28142 78.627096) (xy 146.281502 78.62672) + (xy 146.2815 78.570901) (xy 146.2815 73.059328) (xy 146.301185 72.992289) (xy 146.353989 72.946534) + (xy 146.367182 72.941397) (xy 146.385971 72.935292) (xy 146.553619 72.88082) (xy 146.73601 72.787887) + (xy 146.82899 72.720332) (xy 146.901613 72.667571) (xy 146.901615 72.667568) (xy 146.901619 72.667566) + (xy 147.046366 72.522819) (xy 147.046368 72.522815) (xy 147.046371 72.522813) (xy 147.117072 72.4255) + (xy 147.166687 72.35721) (xy 147.25962 72.174819) (xy 147.322877 71.980134) (xy 147.3549 71.777952) + (xy 147.3549 71.573248) (xy 147.349612 71.539861) (xy 147.322877 71.371065) (xy 147.274341 71.221688) + (xy 147.25962 71.176381) (xy 147.259618 71.176378) (xy 147.259618 71.176376) (xy 147.215905 71.090585) + (xy 147.166687 70.99399) (xy 147.14745 70.967512) (xy 147.046371 70.828386) (xy 146.901613 70.683628) + (xy 146.736013 70.563315) (xy 146.736012 70.563314) (xy 146.73601 70.563313) (xy 146.631953 70.510293) + (xy 146.553623 70.470381) (xy 146.358934 70.407122) (xy 146.180428 70.37885) (xy 146.156752 70.3751) + (xy 145.952048 70.3751) (xy 145.928372 70.37885) (xy 145.749865 70.407122) (xy 145.555176 70.470381) + (xy 145.372786 70.563315) (xy 145.207186 70.683628) (xy 145.062432 70.828382) (xy 145.062428 70.828387) + (xy 144.964068 70.96377) (xy 144.908739 71.006436) (xy 144.839125 71.012415) (xy 144.77733 70.97981) + (xy 144.763432 70.96377) (xy 144.665071 70.828387) (xy 144.665067 70.828382) (xy 144.520313 70.683628) + (xy 144.354713 70.563315) (xy 144.354712 70.563314) (xy 144.35471 70.563313) (xy 144.250653 70.510293) + (xy 144.172323 70.470381) (xy 143.977634 70.407122) (xy 143.799128 70.37885) (xy 143.775452 70.3751) + (xy 143.570748 70.3751) (xy 143.547072 70.37885) (xy 143.368565 70.407122) (xy 143.173876 70.470381) + (xy 142.991486 70.563315) (xy 142.825886 70.683628) (xy 142.681132 70.828382) (xy 142.681128 70.828387) + (xy 142.582818 70.963701) (xy 142.527489 71.006367) (xy 142.457875 71.012346) (xy 142.39608 70.979741) + (xy 142.382182 70.963701) (xy 142.283871 70.828387) (xy 142.283867 70.828382) (xy 142.139113 70.683628) + (xy 141.973513 70.563315) (xy 141.973512 70.563314) (xy 141.97351 70.563313) (xy 141.869453 70.510293) + (xy 141.791123 70.470381) (xy 141.596434 70.407122) (xy 141.417928 70.37885) (xy 141.394252 70.3751) + (xy 141.189548 70.3751) (xy 141.165872 70.37885) (xy 140.987365 70.407122) (xy 140.792676 70.470381) + (xy 140.610286 70.563315) (xy 140.444686 70.683628) (xy 140.299932 70.828382) (xy 140.299928 70.828387) + (xy 140.201568 70.96377) (xy 140.146239 71.006436) (xy 140.076625 71.012415) (xy 140.01483 70.97981) + (xy 140.000932 70.96377) (xy 139.902571 70.828387) (xy 139.902567 70.828382) (xy 139.757813 70.683628) + (xy 139.592213 70.563315) (xy 139.592212 70.563314) (xy 139.59221 70.563313) (xy 139.488153 70.510293) + (xy 139.409823 70.470381) (xy 139.215134 70.407122) (xy 139.036628 70.37885) (xy 139.012952 70.3751) + (xy 138.808248 70.3751) (xy 138.784572 70.37885) (xy 138.606065 70.407122) (xy 138.411376 70.470381) + (xy 138.228986 70.563315) (xy 138.063386 70.683628) (xy 137.918632 70.828382) (xy 137.918628 70.828387) + (xy 137.820318 70.963701) (xy 137.764989 71.006367) (xy 137.695375 71.012346) (xy 137.63358 70.979741) + (xy 137.619682 70.963701) (xy 137.521371 70.828387) (xy 137.521367 70.828382) (xy 137.376613 70.683628) + (xy 137.211013 70.563315) (xy 137.211012 70.563314) (xy 137.21101 70.563313) (xy 137.106953 70.510293) + (xy 137.028623 70.470381) (xy 136.833934 70.407122) (xy 136.655428 70.37885) (xy 136.631752 70.3751) + (xy 136.427048 70.3751) (xy 136.403372 70.37885) (xy 136.224865 70.407122) (xy 136.030176 70.470381) + (xy 135.847786 70.563315) (xy 135.682186 70.683628) (xy 135.537428 70.828386) (xy 135.417115 70.993986) + (xy 135.324181 71.176376) (xy 135.260922 71.371065) (xy 135.231028 71.559812) (xy 135.2289 71.573248) + (xy 135.2289 71.777952) (xy 135.230204 71.786184) (xy 135.260922 71.980134) (xy 135.324181 72.174823) + (xy 135.388091 72.300253) (xy 135.414261 72.351613) (xy 135.417115 72.357213) (xy 135.537428 72.522813) + (xy 135.682186 72.667571) (xy 135.831928 72.776363) (xy 135.84779 72.787887) (xy 136.030181 72.88082) + (xy 136.197829 72.935292) (xy 136.215818 72.941137) (xy 136.273494 72.980575) (xy 136.300692 73.044933) + (xy 136.3015 73.059068) (xy 136.3015 76.053126) (xy 136.281815 76.120165) (xy 136.229011 76.16592) + (xy 136.159853 76.175864) (xy 136.096297 76.146839) (xy 136.062939 76.100579) (xy 136.059395 76.092023) + (xy 136.05939 76.092014) (xy 135.971789 75.960911) (xy 135.971786 75.960907) (xy 135.860292 75.849413) + (xy 135.860288 75.84941) (xy 135.729185 75.761809) (xy 135.729172 75.761802) (xy 135.583501 75.701464) + (xy 135.583489 75.701461) (xy 135.428845 75.6707) (xy 135.428842 75.6707) (xy 135.271158 75.6707) + (xy 135.271155 75.6707) (xy 135.11651 75.701461) (xy 135.116498 75.701464) (xy 134.970827 75.761802) + (xy 134.970814 75.761809) (xy 134.839711 75.84941) (xy 134.839707 75.849413) (xy 134.728213 75.960907) + (xy 134.72821 75.960911) (xy 134.640609 76.092014) (xy 134.640602 76.092027) (xy 134.580264 76.237698) + (xy 134.580261 76.23771) (xy 134.5495 76.392353) (xy 134.5495 76.550046) (xy 134.580261 76.704689) + (xy 134.580264 76.704701) (xy 134.640602 76.850372) (xy 134.640609 76.850385) (xy 134.72821 76.981488) + (xy 134.728213 76.981492) (xy 134.839707 77.092986) (xy 134.839711 77.092989) (xy 134.970814 77.18059) + (xy 134.970827 77.180597) (xy 135.078027 77.225) (xy 135.116503 77.240937) (xy 135.271153 77.271699) + (xy 135.271156 77.2717) (xy 135.271158 77.2717) (xy 135.428844 77.2717) (xy 135.428845 77.271699) + (xy 135.583497 77.240937) (xy 135.729179 77.180594) (xy 135.860289 77.092989) (xy 135.971789 76.981489) + (xy 136.059394 76.850379) (xy 136.062938 76.841823) (xy 136.106777 76.787419) (xy 136.173071 76.765352) + (xy 136.240771 76.78263) (xy 136.288382 76.833765) (xy 136.3015 76.889273) (xy 136.3015 78.435729) + (xy 136.281815 78.502768) (xy 136.265193 78.523399) (xy 133.863054 80.92617) (xy 133.801735 80.959663) + (xy 133.775361 80.9625) (xy 128.815832 80.9625) (xy 128.748793 80.942815) (xy 128.703038 80.890011) + (xy 128.693094 80.820853) (xy 128.722119 80.757297) (xy 128.728152 80.750817) (xy 129.800814 79.678188) + (xy 130.704866 78.774165) (xy 130.704868 78.774165) (xy 130.752533 78.7265) (xy 130.754616 78.724416) + (xy 130.757587 78.722275) (xy 130.767349 78.711796) (xy 130.768823 78.710268) (xy 130.768864 78.710168) + (xy 130.768865 78.710168) (xy 130.803459 78.626653) (xy 130.803499 78.626556) (xy 130.803499 78.626555) + (xy 130.8035 78.626553) (xy 130.8035 75.083147) (xy 130.8035 73.059295) (xy 130.823185 72.992256) + (xy 130.875989 72.946501) (xy 130.889173 72.941367) (xy 131.075519 72.88082) (xy 131.25791 72.787887) + (xy 131.35089 72.720332) (xy 131.423513 72.667571) (xy 131.423515 72.667568) (xy 131.423519 72.667566) + (xy 131.568266 72.522819) (xy 131.568268 72.522815) (xy 131.568271 72.522813) (xy 131.638972 72.4255) + (xy 131.688587 72.35721) (xy 131.78152 72.174819) (xy 131.844777 71.980134) (xy 131.8768 71.777952) + (xy 131.8768 71.573248) (xy 131.871512 71.539861) (xy 131.844777 71.371065) (xy 131.796241 71.221688) + (xy 131.78152 71.176381) (xy 131.781518 71.176378) (xy 131.781518 71.176376) (xy 131.737805 71.090585) + (xy 131.688587 70.99399) (xy 131.66935 70.967512) (xy 131.568271 70.828386) (xy 131.423513 70.683628) + (xy 131.257913 70.563315) (xy 131.257912 70.563314) (xy 131.25791 70.563313) (xy 131.153853 70.510293) + (xy 131.075523 70.470381) (xy 130.880834 70.407122) (xy 130.702328 70.37885) (xy 130.678652 70.3751) + (xy 130.473948 70.3751) (xy 130.450272 70.37885) (xy 130.271765 70.407122) (xy 130.077076 70.470381) + (xy 129.894686 70.563315) (xy 129.729086 70.683628) (xy 129.584332 70.828382) (xy 129.584328 70.828387) + (xy 129.485968 70.96377) (xy 129.430639 71.006436) (xy 129.361025 71.012415) (xy 129.29923 70.97981) + (xy 129.285332 70.96377) (xy 129.186971 70.828387) (xy 129.186967 70.828382) (xy 129.042213 70.683628) + (xy 128.876613 70.563315) (xy 128.876612 70.563314) (xy 128.87661 70.563313) (xy 128.772553 70.510293) + (xy 128.694223 70.470381) (xy 128.499534 70.407122) (xy 128.321028 70.37885) (xy 128.297352 70.3751) + (xy 128.092648 70.3751) (xy 128.068972 70.37885) (xy 127.890465 70.407122) (xy 127.695776 70.470381) + (xy 127.513386 70.563315) (xy 127.347786 70.683628) (xy 127.203032 70.828382) (xy 127.203028 70.828387) + (xy 127.104718 70.963701) (xy 127.049389 71.006367) (xy 126.979775 71.012346) (xy 126.91798 70.979741) + (xy 126.904082 70.963701) (xy 126.805771 70.828387) (xy 126.805767 70.828382) (xy 126.661013 70.683628) + (xy 126.495413 70.563315) (xy 126.495412 70.563314) (xy 126.49541 70.563313) (xy 126.391353 70.510293) + (xy 126.313023 70.470381) (xy 126.118334 70.407122) (xy 125.939828 70.37885) (xy 125.916152 70.3751) + (xy 125.711448 70.3751) (xy 125.687772 70.37885) (xy 125.509265 70.407122) (xy 125.314576 70.470381) + (xy 125.132186 70.563315) (xy 124.966586 70.683628) (xy 124.821832 70.828382) (xy 124.821828 70.828387) + (xy 124.723468 70.96377) (xy 124.668139 71.006436) (xy 124.598525 71.012415) (xy 124.53673 70.97981) + (xy 124.522832 70.96377) (xy 124.424471 70.828387) (xy 124.424467 70.828382) (xy 124.279713 70.683628) + (xy 124.114113 70.563315) (xy 124.114112 70.563314) (xy 124.11411 70.563313) (xy 124.010053 70.510293) + (xy 123.931723 70.470381) (xy 123.737034 70.407122) (xy 123.558528 70.37885) (xy 123.534852 70.3751) + (xy 123.330148 70.3751) (xy 123.306472 70.37885) (xy 123.127965 70.407122) (xy 122.933276 70.470381) + (xy 122.750886 70.563315) (xy 122.585286 70.683628) (xy 122.440532 70.828382) (xy 122.440528 70.828387) + (xy 122.342218 70.963701) (xy 122.286889 71.006367) (xy 122.217275 71.012346) (xy 122.15548 70.979741) + (xy 122.141582 70.963701) (xy 122.043271 70.828387) (xy 122.043267 70.828382) (xy 121.898513 70.683628) + (xy 121.732913 70.563315) (xy 121.732912 70.563314) (xy 121.73291 70.563313) (xy 121.628853 70.510293) + (xy 121.550523 70.470381) (xy 121.355834 70.407122) (xy 121.177328 70.37885) (xy 121.153652 70.3751) + (xy 120.948948 70.3751) (xy 120.925272 70.37885) (xy 120.746765 70.407122) (xy 120.552076 70.470381) + (xy 120.369686 70.563315) (xy 120.204086 70.683628) (xy 120.059328 70.828386) (xy 119.939015 70.993986) + (xy 119.846081 71.176376) (xy 119.782822 71.371065) (xy 119.752928 71.559812) (xy 119.7508 71.573248) + (xy 119.7508 71.777952) (xy 119.758695 71.827797) (xy 119.767284 71.882028) (xy 119.758328 71.951322) + (xy 119.713331 72.004773) (xy 119.692263 72.015986) (xy 119.597824 72.055104) (xy 119.597814 72.055109) + (xy 119.466711 72.14271) (xy 119.466707 72.142713) (xy 119.355213 72.254207) (xy 119.35521 72.254211) + (xy 119.267609 72.385314) (xy 119.267602 72.385327) (xy 119.207264 72.530998) (xy 119.207261 72.53101) + (xy 119.1765 72.685653) (xy 119.1765 72.843346) (xy 119.207261 72.997989) (xy 119.207264 72.998001) + (xy 119.267602 73.143672) (xy 119.267609 73.143685) (xy 119.35521 73.274788) (xy 119.355213 73.274792) + (xy 119.466707 73.386286) (xy 119.466711 73.386289) (xy 119.597814 73.47389) (xy 119.597827 73.473897) + (xy 119.703429 73.517638) (xy 119.743503 73.534237) (xy 119.898153 73.564999) (xy 119.898156 73.565) + (xy 119.898158 73.565) (xy 120.055844 73.565) (xy 120.055845 73.564999) (xy 120.210497 73.534237) + (xy 120.356179 73.473894) (xy 120.487289 73.386289) (xy 120.598789 73.274789) (xy 120.598791 73.274785) + (xy 120.602653 73.270081) (xy 120.604504 73.2716) (xy 120.649979 73.233576) (xy 120.719302 73.224849) + (xy 120.782338 73.254987) (xy 120.819073 73.31442) (xy 120.8235 73.347258) (xy 120.8235 78.435697) + (xy 120.803815 78.502736) (xy 120.787179 78.523381) (xy 119.207089 80.103384) (xy 119.145765 80.136867) + (xy 119.11941 80.1397) (xy 99.293762 80.1397) (xy 99.226723 80.120015) (xy 99.180968 80.067211) + (xy 99.171024 79.998053) (xy 99.200049 79.934497) (xy 99.258827 79.896723) (xy 99.281161 79.892342) + (xy 99.290035 79.891435) (xy 99.304097 79.889999) (xy 99.470634 79.834814) (xy 99.619956 79.742712) + (xy 99.744012 79.618656) (xy 99.777415 79.564499) (xy 99.829359 79.517778) (xy 99.898321 79.506554) + (xy 99.951842 79.526495) (xy 100.048221 79.590894) (xy 100.048223 79.590895) (xy 100.048227 79.590897) + (xy 100.175603 79.643657) (xy 100.193903 79.651237) (xy 100.298783 79.672099) (xy 100.348553 79.681999) + (xy 100.348556 79.682) (xy 100.348558 79.682) (xy 100.506244 79.682) (xy 100.506245 79.681999) (xy 100.660897 79.651237) + (xy 100.806579 79.590894) (xy 100.937689 79.503289) (xy 101.049189 79.391789) (xy 101.136794 79.260679) + (xy 101.197137 79.114997) (xy 101.2279 78.960342) (xy 101.2279 78.802658) (xy 101.2279 78.802655) + (xy 101.227899 78.802653) (xy 101.222233 78.774167) (xy 101.197137 78.648003) (xy 101.195521 78.644101) + (xy 101.136797 78.502327) (xy 101.13679 78.502314) (xy 101.049189 78.371211) (xy 101.049186 78.371207) + (xy 100.937692 78.259713) (xy 100.937688 78.25971) (xy 100.806585 78.172109) (xy 100.806572 78.172102) + (xy 100.660901 78.111764) (xy 100.660889 78.111761) (xy 100.506245 78.081) (xy 100.506242 78.081) + (xy 100.348558 78.081) (xy 100.348555 78.081) (xy 100.19391 78.111761) (xy 100.193898 78.111764) + (xy 100.048227 78.172102) (xy 100.048209 78.172112) (xy 99.935681 78.247301) (xy 99.869004 78.268179) + (xy 99.801624 78.249694) (xy 99.761252 78.209295) (xy 99.754415 78.198211) (xy 99.744012 78.181344) + (xy 99.619956 78.057288) (xy 99.616642 78.055243) (xy 99.614846 78.053248) (xy 99.614289 78.052807) + (xy 99.614364 78.052711) (xy 99.569918 78.003297) (xy 99.558697 77.934334) (xy 99.58654 77.870252) + (xy 99.616648 77.844165) (xy 99.619642 77.842318) (xy 99.743615 77.718345) (xy 99.835656 77.569124) + (xy 99.835658 77.569119) (xy 99.890805 77.402697) (xy 99.890806 77.40269) (xy 99.901299 77.299986) + (xy 99.9013 77.299973) (xy 99.9013 77.25) (xy 97.451301 77.25) (xy 97.451301 77.299986) (xy 97.461794 77.402697) + (xy 97.516941 77.569119) (xy 97.516943 77.569124) (xy 97.608984 77.718345) (xy 97.732955 77.842316) + (xy 97.732959 77.842319) (xy 97.735956 77.844168) (xy 97.737579 77.845972) (xy 97.738623 77.846798) + (xy 97.738481 77.846976) (xy 97.782681 77.896116) (xy 97.793902 77.965079) (xy 97.766059 78.029161) + (xy 97.735961 78.055241) (xy 97.732649 78.057283) (xy 97.732643 78.057288) (xy 97.608589 78.181342) + (xy 97.516487 78.330663) (xy 97.516486 78.330666) (xy 97.461301 78.497203) (xy 97.461301 78.497204) + (xy 97.4613 78.497204) (xy 97.4508 78.599983) (xy 97.4508 79.200001) (xy 97.450801 79.200019) (xy 97.4613 79.302796) + (xy 97.461301 79.302799) (xy 97.516485 79.469331) (xy 97.516487 79.469336) (xy 97.531323 79.493389) + (xy 97.608588 79.618656) (xy 97.732644 79.742712) (xy 97.881966 79.834814) (xy 98.048503 79.889999) + (xy 98.067243 79.891913) (xy 98.071437 79.892342) (xy 98.136128 79.918738) (xy 98.17628 79.975919) + (xy 98.179143 80.04573) (xy 98.143809 80.106007) (xy 98.081496 80.137612) (xy 98.058834 80.1397) + (xy 96.493762 80.1397) (xy 96.426723 80.120015) (xy 96.380968 80.067211) (xy 96.371024 79.998053) + (xy 96.400049 79.934497) (xy 96.458827 79.896723) (xy 96.481161 79.892342) (xy 96.490035 79.891435) + (xy 96.504097 79.889999) (xy 96.670634 79.834814) (xy 96.819956 79.742712) (xy 96.944012 79.618656) + (xy 97.036114 79.469334) (xy 97.091299 79.302797) (xy 97.1018 79.200009) (xy 97.101799 78.599992) + (xy 97.100421 78.586506) (xy 97.091299 78.497203) (xy 97.091298 78.4972) (xy 97.090922 78.496066) + (xy 97.036114 78.330666) (xy 96.944012 78.181344) (xy 96.819956 78.057288) (xy 96.816642 78.055243) + (xy 96.814846 78.053248) (xy 96.814289 78.052807) (xy 96.814364 78.052711) (xy 96.769918 78.003297) + (xy 96.758697 77.934334) (xy 96.78654 77.870252) (xy 96.816648 77.844165) (xy 96.819642 77.842318) + (xy 96.943615 77.718345) (xy 97.035656 77.569124) (xy 97.035658 77.569119) (xy 97.090805 77.402697) + (xy 97.090806 77.40269) (xy 97.101299 77.299986) (xy 97.1013 77.299973) (xy 97.1013 77.25) (xy 96.0003 77.25) + (xy 95.933261 77.230315) (xy 95.887506 77.177511) (xy 95.8763 77.126) (xy 95.8763 77) (xy 95.7503 77) + (xy 95.683261 76.980315) (xy 95.637506 76.927511) (xy 95.6263 76.876) (xy 95.6263 76.75) (xy 96.1263 76.75) + (xy 97.101299 76.75) (xy 97.101299 76.700028) (xy 97.101298 76.700013) (xy 97.090805 76.597302) + (xy 97.035658 76.43088) (xy 97.035656 76.430875) (xy 96.943615 76.281654) (xy 96.819645 76.157684) + (xy 96.670424 76.065643) (xy 96.670419 76.065641) (xy 96.503997 76.010494) (xy 96.50399 76.010493) + (xy 96.401286 76) (xy 96.1263 76) (xy 96.1263 76.75) (xy 95.6263 76.75) (xy 95.6263 76.009194) (xy 95.634944 75.979753) + (xy 95.641468 75.949767) (xy 95.645222 75.944751) (xy 95.645985 75.942155) (xy 95.662612 75.92152) + (xy 96.240615 75.343519) (xy 96.301938 75.310034) (xy 96.328296 75.3072) (xy 96.759825 75.3072) + (xy 96.826864 75.326885) (xy 96.872619 75.379689) (xy 96.874365 75.383699) (xy 96.902898 75.452583) + (xy 96.905507 75.458881) (xy 96.905509 75.458885) (xy 96.99311 75.589988) (xy 96.993113 75.589992) + (xy 97.104607 75.701486) (xy 97.104611 75.701489) (xy 97.235714 75.78909) (xy 97.235727 75.789097) + (xy 97.341935 75.833089) (xy 97.381403 75.849437) (xy 97.524425 75.877886) (xy 97.536053 75.880199) + (xy 97.536056 75.8802) (xy 97.536058 75.8802) (xy 97.693742 75.8802) (xy 97.740263 75.870946) (xy 97.809852 75.877172) + (xy 97.86503 75.920034) (xy 97.888276 75.985924) (xy 97.872209 76.053921) (xy 97.829552 76.098101) + (xy 97.732956 76.157682) (xy 97.608984 76.281654) (xy 97.516943 76.430875) (xy 97.516941 76.43088) + (xy 97.461794 76.597302) (xy 97.461793 76.597309) (xy 97.4513 76.700013) (xy 97.4513 76.75) (xy 98.4263 76.75) + (xy 98.9263 76.75) (xy 99.901299 76.75) (xy 99.901299 76.700028) (xy 99.901298 76.700013) (xy 99.890805 76.597302) + (xy 99.835658 76.43088) (xy 99.835656 76.430875) (xy 99.743615 76.281654) (xy 99.619645 76.157684) + (xy 99.470424 76.065643) (xy 99.470419 76.065641) (xy 99.303997 76.010494) (xy 99.30399 76.010493) + (xy 99.201286 76) (xy 98.9263 76) (xy 98.9263 76.75) (xy 98.4263 76.75) (xy 98.4263 76) (xy 98.151329 76) + (xy 98.151308 76.000002) (xy 98.089377 76.006328) (xy 98.020685 75.993558) (xy 97.969801 75.945677) + (xy 97.952881 75.877886) (xy 97.975298 75.81171) (xy 98.007887 75.779868) (xy 98.086973 75.727024) + (xy 98.125189 75.701489) (xy 98.236689 75.589989) (xy 98.324294 75.458879) (xy 98.324838 75.457567) + (xy 98.342851 75.414079) (xy 98.384637 75.313197) (xy 98.4154 75.158542) (xy 98.4154 75.000858) + (xy 98.4154 75.000855) (xy 98.415399 75.000853) (xy 98.399675 74.921806) (xy 98.384637 74.846203) + (xy 98.366083 74.80141) (xy 98.324297 74.700527) (xy 98.32429 74.700514) (xy 98.236689 74.569411) + (xy 98.236686 74.569407) (xy 98.125192 74.457913) (xy 98.125188 74.45791) (xy 97.994085 74.370309) + (xy 97.994072 74.370302) (xy 97.848401 74.309964) (xy 97.848389 74.309961) (xy 97.693745 74.2792) + (xy 97.693742 74.2792) (xy 97.536058 74.2792) (xy 97.536055 74.2792) (xy 97.38141 74.309961) (xy 97.381398 74.309964) + (xy 97.235727 74.370302) (xy 97.235714 74.370309) (xy 97.104611 74.45791) (xy 97.104607 74.457913) + (xy 96.993113 74.569407) (xy 96.99311 74.569411) (xy 96.905509 74.700514) (xy 96.905507 74.700518) + (xy 96.905303 74.701011) (xy 96.874384 74.775654) (xy 96.830546 74.830056) (xy 96.764252 74.852121) + (xy 96.759825 74.8522) (xy 96.227953 74.8522) (xy 96.137447 74.8522) (xy 96.137445 74.8522) (xy 96.137443 74.852201) + (xy 96.053834 74.886831) (xy 96.053832 74.886833) (xy 94.12048 76.820186) (xy 94.059157 76.853671) + (xy 93.989465 76.848687) (xy 93.933532 76.806815) (xy 93.909115 76.741351) (xy 93.908799 76.732505) + (xy 93.908799 76.699998) (xy 93.908798 76.699981) (xy 93.898299 76.597203) (xy 93.898298 76.5972) + (xy 93.890048 76.572302) (xy 93.843114 76.430666) (xy 93.751012 76.281344) (xy 93.626956 76.157288) + (xy 93.530998 76.098101) (xy 93.477636 76.065187) (xy 93.477631 76.065185) (xy 93.476162 76.064698) + (xy 93.311097 76.010001) (xy 93.311095 76.01) (xy 93.208316 75.9995) (xy 93.208309 75.9995) (xy 93.174019 75.9995) + (xy 93.10698 75.979815) (xy 93.061225 75.927011) (xy 93.051281 75.857853) (xy 93.070917 75.806608) + (xy 93.096194 75.768779) (xy 93.099915 75.759797) (xy 93.12342 75.703049) (xy 93.156537 75.623097) + (xy 93.1873 75.468442) (xy 93.1873 75.310758) (xy 93.1873 75.310755) (xy 93.187299 75.310753) (xy 93.186592 75.3072) + (xy 93.156537 75.156103) (xy 93.125415 75.080969) (xy 93.123278 75.061093) (xy 93.116293 75.042364) + (xy 93.11962 75.027067) (xy 93.117947 75.011502) (xy 93.126895 74.993624) (xy 93.131145 74.974091) + (xy 93.147831 74.9518) (xy 93.149222 74.949022) (xy 93.152296 74.945836) (xy 93.32144 74.776693) + (xy 93.382762 74.74321) (xy 93.384934 74.742758) (xy 93.390253 74.7417) (xy 93.436758 74.722437) + (xy 93.484211 74.712998) (xy 93.545271 74.712998) (xy 93.545273 74.712998) (xy 93.545275 74.712997) + (xy 93.545289 74.712997) (xy 93.584093 74.708825) (xy 93.610606 74.708825) (xy 93.644766 74.712498) + (xy 93.644782 74.712499) (xy 93.6926 74.712499) (xy 93.709705 74.695393) (xy 93.712285 74.686608) + (xy 93.716181 74.682422) (xy 93.717332 74.679338) (xy 93.742285 74.654383) (xy 93.79909 74.611858) + (xy 93.864552 74.587442) (xy 93.932826 74.602293) (xy 93.982231 74.651698) (xy 93.9974 74.711126) + (xy 93.9974 74.712499) (xy 94.045228 74.712499) (xy 94.045244 74.712498) (xy 94.104772 74.706097) + (xy 94.104779 74.706095) (xy 94.239486 74.655853) (xy 94.239493 74.655849) (xy 94.354587 74.569689) + (xy 94.35459 74.569686) (xy 94.44075 74.454592) (xy 94.440754 74.454585) (xy 94.490996 74.319878) + (xy 94.490998 74.319871) (xy 94.497399 74.260343) (xy 94.4974 74.260326) (xy 94.4974 73.767999) + (xy 94.121901 73.767999) (xy 94.113215 73.765448) (xy 94.104256 73.766737) (xy 94.080216 73.755759) + (xy 94.054862 73.748314) (xy 94.048934 73.741473) (xy 94.0407 73.737713) (xy 94.02641 73.715478) + (xy 94.009107 73.69551) (xy 94.00682 73.684998) (xy 94.002924 73.678936) (xy 93.997901 73.644001) + (xy 93.9979 73.587201) (xy 94.017583 73.520161) (xy 94.070387 73.474406) (xy 94.1219 73.463199) + (xy 94.4974 73.463199) (xy 94.4974 73.0685) (xy 94.517085 73.001461) (xy 94.569889 72.955706) (xy 94.6214 72.9445) + (xy 98.372679 72.9445) (xy 98.439718 72.964185) (xy 98.46036 72.980819) (xy 99.499828 74.020287) + (xy 99.533313 74.08161) (xy 99.528329 74.151302) (xy 99.486457 74.207235) (xy 99.48104 74.211069) + (xy 99.444909 74.235211) (xy 99.333413 74.346707) (xy 99.33341 74.346711) (xy 99.245809 74.477814) + (xy 99.245802 74.477827) (xy 99.185464 74.623498) (xy 99.185461 74.62351) (xy 99.1547 74.778153) + (xy 99.1547 74.935846) (xy 99.185461 75.090489) (xy 99.185464 75.090501) (xy 99.245802 75.236172) + (xy 99.245809 75.236185) (xy 99.33341 75.367288) (xy 99.333413 75.367292) (xy 99.444907 75.478786) + (xy 99.444911 75.478789) (xy 99.576014 75.56639) (xy 99.576027 75.566397) (xy 99.712896 75.623089) + (xy 99.721703 75.626737) (xy 99.863649 75.654972) (xy 99.876353 75.657499) (xy 99.876356 75.6575) + (xy 99.876358 75.6575) (xy 100.034044 75.6575) (xy 100.034045 75.657499) (xy 100.188697 75.626737) + (xy 100.301366 75.580067) (xy 100.334372 75.566397) (xy 100.334372 75.566396) (xy 100.334379 75.566394) + (xy 100.338381 75.56372) (xy 100.405057 75.542837) (xy 100.472438 75.561317) (xy 100.510381 75.597926) + (xy 100.59301 75.721588) (xy 100.593013 75.721592) (xy 100.704507 75.833086) (xy 100.704511 75.833089) + (xy 100.835614 75.92069) (xy 100.835627 75.920697) (xy 100.978203 75.979753) (xy 100.981303 75.981037) + (xy 101.108449 76.006328) (xy 101.135953 76.011799) (xy 101.135956 76.0118) (xy 101.135958 76.0118) + (xy 101.293644 76.0118) (xy 101.293645 76.011799) (xy 101.448297 75.981037) (xy 101.560966 75.934367) + (xy 101.593972 75.920697) (xy 101.593972 75.920696) (xy 101.593979 75.920694) (xy 101.725089 75.833089) + (xy 101.836589 75.721589) (xy 101.924194 75.590479) (xy 101.984537 75.444797) (xy 102.0153 75.290142) + (xy 102.0153 75.132458) (xy 102.0153 75.132455) (xy 102.015299 75.132453) (xy 102.011578 75.113746) + (xy 101.984537 74.977803) (xy 101.984535 74.977798) (xy 101.924197 74.832127) (xy 101.92419 74.832114) + (xy 101.836589 74.701011) (xy 101.836586 74.701007) (xy 101.77436 74.638781) (xy 101.740875 74.577458) + (xy 101.745859 74.507766) (xy 101.787731 74.451833) (xy 101.853195 74.427416) (xy 101.862041 74.4271) + (xy 103.009405 74.4271) (xy 103.038845 74.435744) (xy 103.068832 74.442268) (xy 103.073847 74.446022) + (xy 103.076444 74.446785) (xy 103.097086 74.463419) (xy 103.224803 74.591136) (xy 103.258288 74.652459) + (xy 103.253304 74.722151) (xy 103.251684 74.726268) (xy 103.220563 74.801403) (xy 103.220561 74.80141) + (xy 103.1898 74.956053) (xy 103.1898 75.113746) (xy 103.220561 75.268389) (xy 103.220564 75.268401) + (xy 103.280902 75.414072) (xy 103.280909 75.414085) (xy 103.36851 75.545188) (xy 103.368513 75.545192) + (xy 103.480007 75.656686) (xy 103.480011 75.656689) (xy 103.611114 75.74429) (xy 103.611127 75.744297) + (xy 103.720413 75.789564) (xy 103.756803 75.804637) (xy 103.899825 75.833086) (xy 103.911453 75.835399) + (xy 103.911456 75.8354) (xy 103.911458 75.8354) (xy 104.069144 75.8354) (xy 104.069145 75.835399) + (xy 104.223797 75.804637) (xy 104.369479 75.744294) (xy 104.500589 75.656689) (xy 104.612089 75.545189) + (xy 104.699694 75.414079) (xy 104.760037 75.268397) (xy 104.7908 75.113742) (xy 104.7908 74.956058) + (xy 104.7908 74.956055) (xy 104.790799 74.956053) (xy 104.781986 74.911747) (xy 104.760037 74.801403) + (xy 104.757698 74.795756) (xy 104.699697 74.655727) (xy 104.69969 74.655714) (xy 104.612089 74.524611) + (xy 104.612086 74.524607) (xy 104.500592 74.413113) (xy 104.500588 74.41311) (xy 104.369485 74.325509) + (xy 104.369472 74.325502) (xy 104.223801 74.265164) (xy 104.223789 74.265161) (xy 104.069145 74.2344) + (xy 104.069142 74.2344) (xy 103.911458 74.2344) (xy 103.911455 74.2344) (xy 103.75681 74.265161) + (xy 103.756803 74.265163) (xy 103.681668 74.296284) (xy 103.612199 74.303751) (xy 103.54972 74.272476) + (xy 103.546536 74.269403) (xy 103.28387 74.006736) (xy 103.200253 73.9721) (xy 100.146469 73.9721) + (xy 100.07943 73.952415) (xy 100.058788 73.935781) (xy 98.647144 72.524136) (xy 98.646376 72.523818) + (xy 98.563527 72.4895) (xy 96.625533 72.4895) (xy 96.558494 72.469815) (xy 96.512739 72.417011) + (xy 96.502795 72.347853) (xy 96.53182 72.284297) (xy 96.5822 72.249318) (xy 96.683985 72.211354) + (xy 96.683992 72.21135) (xy 96.799086 72.12519) (xy 96.799089 72.125187) (xy 96.885249 72.010093) + (xy 96.885253 72.010086) (xy 96.935495 71.875379) (xy 96.935497 71.875372) (xy 96.941898 71.815844) + (xy 96.941899 71.815827) (xy 96.941899 71.768) (xy 96.940527 71.768) (xy 96.927603 71.764205) (xy 96.914167 71.765166) + (xy 96.894731 71.754552) (xy 96.873488 71.748315) (xy 96.864667 71.738136) (xy 96.852845 71.73168) + (xy 96.842231 71.712243) (xy 96.827733 71.695511) (xy 96.825816 71.68218) (xy 96.81936 71.670357) + (xy 96.82094 71.648269) (xy 96.817789 71.626353) (xy 96.823493 71.612581) (xy 96.824346 71.600665) + (xy 96.841261 71.569688) (xy 96.883782 71.512888) (xy 96.917305 71.487793) (xy 96.941899 71.4632) + (xy 96.941899 71.41538) (xy 96.941898 71.415364) (xy 96.938225 71.381202) (xy 96.938225 71.354696) + (xy 96.942399 71.315874) (xy 96.942398 70.915329) (xy 96.942398 70.915328) (xy 96.942397 70.915312) + (xy 96.938477 70.878854) (xy 96.938477 70.852346) (xy 96.942399 70.815873) (xy 96.942398 70.415328) + (xy 96.942398 70.415327) (xy 96.942397 70.415313) (xy 96.938477 70.378855) (xy 96.938477 70.352339) + (xy 96.939056 70.346963) (xy 96.965802 70.282419) (xy 97.0232 70.242578) (xy 97.093025 70.240094) + (xy 97.150023 70.272556) (xy 99.973332 73.095866) (xy 100.019421 73.114956) (xy 100.056947 73.1305) + (xy 100.056948 73.1305) (xy 100.147453 73.1305) (xy 108.052125 73.1305) (xy 108.119164 73.150185) + (xy 108.164919 73.202989) (xy 108.166665 73.206999) (xy 108.192695 73.269839) (xy 108.197807 73.282181) + (xy 108.197809 73.282185) (xy 108.28541 73.413288) (xy 108.285413 73.413292) (xy 108.396907 73.524786) + (xy 108.396911 73.524789) (xy 108.528014 73.61239) (xy 108.528027 73.612397) (xy 108.636012 73.657125) + (xy 108.673703 73.672737) (xy 108.78819 73.69551) (xy 108.828353 73.703499) (xy 108.828356 73.7035) + (xy 108.828358 73.7035) (xy 108.986044 73.7035) (xy 108.986045 73.703499) (xy 109.140697 73.672737) + (xy 109.286379 73.612394) (xy 109.417489 73.524789) (xy 109.528989 73.413289) (xy 109.616594 73.282179) + (xy 109.619656 73.274788) (xy 109.65084 73.199501) (xy 109.676937 73.136497) (xy 109.7077 72.981842) + (xy 109.7077 72.824158) (xy 109.7077 72.824155) (xy 109.684637 72.708214) (xy 109.690864 72.638622) + (xy 109.733727 72.583445) (xy 109.765294 72.566982) (xy 109.804906 72.553122) (xy 109.952876 72.460147) + (xy 110.076447 72.336576) (xy 110.169422 72.188606) (xy 110.227141 72.023657) (xy 110.2418 71.893552) + (xy 110.2418 71.540926) (xy 110.261485 71.473887) (xy 110.314289 71.428132) (xy 110.318316 71.426377) + (xy 110.338868 71.417865) (xy 111.447438 70.309293) (xy 111.508759 70.27581) (xy 111.57845 70.280794) + (xy 111.582496 70.282385) (xy 111.657703 70.313537) (xy 111.806325 70.3431) (xy 111.812353 70.344299) + (xy 111.812356 70.3443) (xy 111.812358 70.3443) (xy 111.970044 70.3443) (xy 111.970045 70.344299) + (xy 112.124697 70.313537) (xy 112.250582 70.261394) (xy 112.270372 70.253197) (xy 112.270372 70.253196) + (xy 112.270379 70.253194) (xy 112.401489 70.165589) (xy 112.512989 70.054089) (xy 112.600594 69.922979) + (xy 112.602777 69.91771) (xy 112.629463 69.853282) (xy 112.660937 69.777297) (xy 112.6917 69.622642) + (xy 112.6917 69.464958) (xy 112.6917 69.464955) (xy 112.691699 69.464953) (xy 112.681828 69.415327) + (xy 112.660937 69.310303) (xy 112.656978 69.300745) (xy 112.600597 69.164627) (xy 112.60059 69.164614) + (xy 112.512989 69.033511) (xy 112.512986 69.033507) (xy 112.401492 68.922013) (xy 112.401488 68.92201) + (xy 112.270385 68.834409) (xy 112.270372 68.834402) (xy 112.124701 68.774064) (xy 112.124689 68.774061) + (xy 111.970045 68.7433) (xy 111.970042 68.7433) (xy 111.812358 68.7433) (xy 111.812355 68.7433) + (xy 111.65771 68.774061) (xy 111.657698 68.774064) (xy 111.512027 68.834402) (xy 111.512014 68.834409) + (xy 111.380911 68.92201) (xy 111.380907 68.922013) (xy 111.269413 69.033507) (xy 111.26941 69.033511) + (xy 111.181809 69.164614) (xy 111.181802 69.164627) (xy 111.121464 69.310298) (xy 111.121461 69.31031) + (xy 111.0907 69.464953) (xy 111.0907 69.622646) (xy 111.121461 69.777289) (xy 111.121464 69.777301) + (xy 111.152583 69.852429) (xy 111.160052 69.921898) (xy 111.128776 69.984377) (xy 111.125703 69.987562) + (xy 110.453481 70.659785) (xy 110.392158 70.69327) (xy 110.322467 70.688286) (xy 110.266533 70.646415) + (xy 110.242116 70.58095) (xy 110.2418 70.572104) (xy 110.2418 70.556445) (xy 110.241799 70.556441) + (xy 110.227142 70.426351) (xy 110.227141 70.426346) (xy 110.227141 70.426343) (xy 110.169422 70.261394) + (xy 110.076447 70.113424) (xy 109.952876 69.989853) (xy 109.804906 69.896878) (xy 109.804905 69.896877) + (xy 109.804904 69.896877) (xy 109.639958 69.839159) (xy 109.639948 69.839157) (xy 109.509858 69.8245) + (xy 109.509852 69.8245) (xy 108.872748 69.8245) (xy 108.872741 69.8245) (xy 108.779183 69.835041) + (xy 108.710361 69.822986) (xy 108.658982 69.775637) (xy 108.6413 69.711821) (xy 108.6413 69.125) + (xy 106.0413 69.125) (xy 106.0413 69.711821) (xy 106.021615 69.77886) (xy 105.968811 69.824615) + (xy 105.903417 69.835041) (xy 105.809858 69.8245) (xy 105.809852 69.8245) (xy 105.213995 69.8245) + (xy 105.146956 69.804815) (xy 105.101201 69.752011) (xy 105.091257 69.682853) (xy 105.120282 69.619297) + (xy 105.126314 69.612819) (xy 105.468791 69.270342) (xy 105.814865 68.924268) (xy 105.818568 68.915328) + (xy 105.8495 68.840653) (xy 105.8495 67.8234) (xy 105.869185 67.756361) (xy 105.921989 67.710606) + (xy 105.9735 67.6994) (xy 113.219564 67.6994) (xy 113.286603 67.719085) (xy 113.325102 67.758303) + (xy 113.346688 67.7933) (xy 113.408587 67.893655) (xy 113.532646 68.017714) (xy 113.535482 68.019463) + (xy 113.537017 68.02117) (xy 113.538311 68.022193) (xy 113.538136 68.022414) (xy 113.582205 68.071411) + (xy 113.593426 68.140374) (xy 113.565582 68.204456) (xy 113.535482 68.230537) (xy 113.532646 68.232285) + (xy 113.408589 68.356342) (xy 113.316487 68.505663) (xy 113.316485 68.505668) (xy 113.288649 68.58967) + (xy 113.261301 68.672203) (xy 113.261301 68.672204) (xy 113.2613 68.672204) (xy 113.2508 68.774983) + (xy 113.2508 69.375001) (xy 113.250801 69.375019) (xy 113.2613 69.477796) (xy 113.261301 69.477799) + (xy 113.316485 69.644331) (xy 113.316487 69.644336) (xy 113.341989 69.685681) (xy 113.408588 69.793656) + (xy 113.532644 69.917712) (xy 113.681966 70.009814) (xy 113.848503 70.064999) (xy 113.951291 70.0755) + (xy 115.001308 70.075499) (xy 115.001316 70.075498) (xy 115.001319 70.075498) (xy 115.025196 70.073058) + (xy 115.104097 70.064999) (xy 115.171615 70.042624) (xy 115.241441 70.040223) (xy 115.279509 70.057229) + (xy 115.405614 70.14149) (xy 115.405627 70.141497) (xy 115.541175 70.197642) (xy 115.551303 70.201837) + (xy 115.705953 70.232599) (xy 115.705956 70.2326) (xy 115.705958 70.2326) (xy 115.863644 70.2326) + (xy 115.863645 70.232599) (xy 116.018297 70.201837) (xy 116.163979 70.141494) (xy 116.295089 70.053889) + (xy 116.406589 69.942389) (xy 116.494194 69.811279) (xy 116.496872 69.804815) (xy 116.53277 69.718148) + (xy 116.554537 69.665597) (xy 116.5853 69.510942) (xy 116.5853 69.353258) (xy 116.5853 69.353255) + (xy 116.585299 69.353253) (xy 116.58122 69.332748) (xy 116.554537 69.198603) (xy 116.545833 69.177589) + (xy 116.53607 69.154018) (xy 116.518936 69.112653) (xy 134.9635 69.112653) (xy 134.9635 69.270346) + (xy 134.994261 69.424989) (xy 134.994264 69.425001) (xy 135.054602 69.570672) (xy 135.054607 69.570681) + (xy 135.14221 69.701788) (xy 135.142213 69.701792) (xy 135.253707 69.813286) (xy 135.253711 69.813289) + (xy 135.384814 69.90089) (xy 135.384827 69.900897) (xy 135.530498 69.961235) (xy 135.530503 69.961237) + (xy 135.685153 69.991999) (xy 135.685156 69.992) (xy 135.685158 69.992) (xy 135.842844 69.992) (xy 135.842845 69.991999) + (xy 135.997497 69.961237) (xy 136.110166 69.914567) (xy 136.143172 69.900897) (xy 136.143172 69.900896) + (xy 136.143179 69.900894) (xy 136.274289 69.813289) (xy 136.385789 69.701789) (xy 136.473394 69.570679) + (xy 136.533737 69.424997) (xy 136.5645 69.270342) (xy 136.5645 69.112658) (xy 136.5645 69.112655) + (xy 136.564499 69.112653) (xy 136.562796 69.104092) (xy 136.533737 68.958003) (xy 136.524372 68.935394) + (xy 136.473397 68.812327) (xy 136.47339 68.812314) (xy 136.385789 68.681211) (xy 136.385786 68.681207) + (xy 136.274292 68.569713) (xy 136.274288 68.56971) (xy 136.143185 68.482109) (xy 136.143172 68.482102) + (xy 135.997501 68.421764) (xy 135.997489 68.421761) (xy 135.842845 68.391) (xy 135.842842 68.391) + (xy 135.685158 68.391) (xy 135.685155 68.391) (xy 135.53051 68.421761) (xy 135.530498 68.421764) + (xy 135.384827 68.482102) (xy 135.384814 68.482109) (xy 135.253711 68.56971) (xy 135.253707 68.569713) + (xy 135.142213 68.681207) (xy 135.14221 68.681211) (xy 135.054609 68.812314) (xy 135.054602 68.812327) + (xy 134.994264 68.957998) (xy 134.994261 68.95801) (xy 134.9635 69.112653) (xy 116.518936 69.112653) + (xy 116.494197 69.052927) (xy 116.49419 69.052914) (xy 116.406589 68.921811) (xy 116.406586 68.921807) + (xy 116.295092 68.810313) (xy 116.295088 68.81031) (xy 116.163985 68.722709) (xy 116.163972 68.722702) + (xy 116.018301 68.662364) (xy 116.018289 68.662361) (xy 115.863645 68.6316) (xy 115.863642 68.6316) + (xy 115.767385 68.6316) (xy 115.700346 68.611915) (xy 115.654591 68.559111) (xy 115.649681 68.546611) + (xy 115.636114 68.505666) (xy 115.544012 68.356344) (xy 115.419956 68.232288) (xy 115.412861 68.227912) + (xy 115.408826 68.224949) (xy 115.390549 68.200999) (xy 115.370396 68.178594) (xy 115.369567 68.173504) + (xy 115.366439 68.169405) (xy 115.364641 68.147153) (xy 146.8987 68.147153) (xy 146.8987 68.304846) + (xy 146.929461 68.459489) (xy 146.929464 68.459501) (xy 146.989802 68.605172) (xy 146.989809 68.605185) + (xy 147.07741 68.736288) (xy 147.077413 68.736292) (xy 147.188907 68.847786) (xy 147.188911 68.847789) + (xy 147.320014 68.93539) (xy 147.320027 68.935397) (xy 147.410774 68.972985) (xy 147.465703 68.995737) + (xy 147.620353 69.026499) (xy 147.620356 69.0265) (xy 147.620358 69.0265) (xy 147.778044 69.0265) + (xy 147.778045 69.026499) (xy 147.932697 68.995737) (xy 147.955594 68.986253) (xy 152.8665 68.986253) + (xy 152.8665 69.143946) (xy 152.897261 69.298589) (xy 152.897264 69.298601) (xy 152.957602 69.444272) + (xy 152.957609 69.444285) (xy 153.04521 69.575388) (xy 153.045213 69.575392) (xy 153.156707 69.686886) + (xy 153.156711 69.686889) (xy 153.287814 69.77449) (xy 153.287827 69.774497) (xy 153.433498 69.834835) + (xy 153.433503 69.834837) (xy 153.526232 69.853282) (xy 153.588153 69.865599) (xy 153.588156 69.8656) + (xy 153.588158 69.8656) (xy 153.745844 69.8656) (xy 153.745845 69.865599) (xy 153.900497 69.834837) + (xy 154.023681 69.783813) (xy 154.046172 69.774497) (xy 154.046172 69.774496) (xy 154.046179 69.774494) + (xy 154.177289 69.686889) (xy 154.288789 69.575389) (xy 154.376394 69.444279) (xy 154.436737 69.298597) + (xy 154.4675 69.143942) (xy 154.4675 68.986258) (xy 154.4675 68.986255) (xy 154.467499 68.986253) + (xy 154.4573 68.934979) (xy 154.436737 68.831603) (xy 154.428747 68.812314) (xy 154.376397 68.685927) + (xy 154.37639 68.685914) (xy 154.288789 68.554811) (xy 154.288786 68.554807) (xy 154.177292 68.443313) + (xy 154.177288 68.44331) (xy 154.046185 68.355709) (xy 154.046172 68.355702) (xy 153.900501 68.295364) + (xy 153.900489 68.295361) (xy 153.745845 68.2646) (xy 153.745842 68.2646) (xy 153.588158 68.2646) + (xy 153.588155 68.2646) (xy 153.43351 68.295361) (xy 153.433498 68.295364) (xy 153.287827 68.355702) + (xy 153.287814 68.355709) (xy 153.156711 68.44331) (xy 153.156707 68.443313) (xy 153.045213 68.554807) + (xy 153.04521 68.554811) (xy 152.957609 68.685914) (xy 152.957602 68.685927) (xy 152.897264 68.831598) + (xy 152.897261 68.83161) (xy 152.8665 68.986253) (xy 147.955594 68.986253) (xy 148.078379 68.935394) + (xy 148.09841 68.92201) (xy 148.165677 68.877064) (xy 148.188468 68.861834) (xy 148.209489 68.847789) + (xy 148.320989 68.736289) (xy 148.408594 68.605179) (xy 148.468937 68.459497) (xy 148.4997 68.304842) + (xy 148.4997 68.147158) (xy 148.4997 68.147155) (xy 148.499699 68.147153) (xy 148.492272 68.109814) + (xy 148.468937 67.992503) (xy 148.445076 67.934897) (xy 148.408597 67.846827) (xy 148.40859 67.846814) + (xy 148.320989 67.715711) (xy 148.320986 67.715707) (xy 148.209492 67.604213) (xy 148.209488 67.60421) + (xy 148.078385 67.516609) (xy 148.078372 67.516602) (xy 147.932701 67.456264) (xy 147.932689 67.456261) + (xy 147.778045 67.4255) (xy 147.778042 67.4255) (xy 147.620358 67.4255) (xy 147.620355 67.4255) + (xy 147.46571 67.456261) (xy 147.465698 67.456264) (xy 147.320027 67.516602) (xy 147.320014 67.516609) + (xy 147.188911 67.60421) (xy 147.188907 67.604213) (xy 147.077413 67.715707) (xy 147.07741 67.715711) + (xy 146.989809 67.846814) (xy 146.989802 67.846827) (xy 146.929464 67.992498) (xy 146.929461 67.99251) + (xy 146.8987 68.147153) (xy 115.364641 68.147153) (xy 115.364012 68.139372) (xy 115.359172 68.109632) + (xy 115.361227 68.104901) (xy 115.360812 68.099762) (xy 115.375004 68.073189) (xy 115.387013 68.045549) + (xy 115.39214 68.041105) (xy 115.393729 68.038132) (xy 115.398908 68.035241) (xy 115.417117 68.019462) + (xy 115.419956 68.017712) (xy 115.544012 67.893656) (xy 115.636114 67.744334) (xy 115.691299 67.577797) + (xy 115.7018 67.475009) (xy 115.701799 66.874992) (xy 115.700839 66.865598) (xy 115.691299 66.772203) + (xy 115.688484 66.763707) (xy 115.636114 66.605666) (xy 115.615628 66.572453) (xy 117.5299 66.572453) + (xy 117.5299 66.730146) (xy 117.560661 66.884789) (xy 117.560664 66.884801) (xy 117.621002 67.030472) + (xy 117.621009 67.030485) (xy 117.70861 67.161588) (xy 117.708613 67.161592) (xy 117.820107 67.273086) + (xy 117.820111 67.273089) (xy 117.951214 67.36069) (xy 117.951227 67.360697) (xy 118.08312 67.415328) + (xy 118.096903 67.421037) (xy 118.251553 67.451799) (xy 118.251556 67.4518) (xy 118.251558 67.4518) + (xy 118.409244 67.4518) (xy 118.409245 67.451799) (xy 118.563897 67.421037) (xy 118.691231 67.368294) + (xy 118.709572 67.360697) (xy 118.709572 67.360696) (xy 118.709579 67.360694) (xy 118.840689 67.273089) + (xy 118.952189 67.161589) (xy 119.039794 67.030479) (xy 119.100137 66.884797) (xy 119.1309 66.730142) + (xy 119.1309 66.572458) (xy 119.1309 66.572455) (xy 119.130899 66.572453) (xy 119.130112 66.568497) + (xy 119.100137 66.417803) (xy 119.082565 66.375379) (xy 119.039797 66.272127) (xy 119.03979 66.272114) + (xy 118.952189 66.141011) (xy 118.952186 66.141007) (xy 118.840692 66.029513) (xy 118.840688 66.02951) + (xy 118.709585 65.941909) (xy 118.709572 65.941902) (xy 118.563901 65.881564) (xy 118.563889 65.881561) + (xy 118.409245 65.8508) (xy 118.409242 65.8508) (xy 118.251558 65.8508) (xy 118.251555 65.8508) + (xy 118.09691 65.881561) (xy 118.096898 65.881564) (xy 117.951227 65.941902) (xy 117.951214 65.941909) + (xy 117.820111 66.02951) (xy 117.820107 66.029513) (xy 117.708613 66.141007) (xy 117.70861 66.141011) + (xy 117.621009 66.272114) (xy 117.621002 66.272127) (xy 117.560664 66.417798) (xy 117.560661 66.41781) + (xy 117.5299 66.572453) (xy 115.615628 66.572453) (xy 115.544012 66.456344) (xy 115.419956 66.332288) + (xy 115.320219 66.27077) (xy 115.270636 66.240187) (xy 115.270631 66.240185) (xy 115.240462 66.230188) + (xy 115.104097 66.185001) (xy 115.104095 66.185) (xy 115.00131 66.1745) (xy 113.951298 66.1745) + (xy 113.95128 66.174501) (xy 113.848503 66.185) (xy 113.8485 66.185001) (xy 113.681968 66.240185) + (xy 113.681963 66.240187) (xy 113.532642 66.332289) (xy 113.408589 66.456342) (xy 113.316487 66.605663) + (xy 113.316485 66.605668) (xy 113.297152 66.664011) (xy 113.261301 66.772203) (xy 113.261301 66.772204) + (xy 113.2613 66.772204) (xy 113.2508 66.874984) (xy 113.2508 66.874991) (xy 113.2508 67.057671) + (xy 113.250801 67.1204) (xy 113.231117 67.187439) (xy 113.178313 67.233194) (xy 113.126801 67.2444) + (xy 108.7653 67.2444) (xy 108.698261 67.224715) (xy 108.652506 67.171911) (xy 108.6413 67.1204) + (xy 108.6413 66.538178) (xy 108.660985 66.471139) (xy 108.713789 66.425384) (xy 108.779183 66.414958) + (xy 108.872744 66.425499) (xy 108.872745 66.4255) (xy 108.872748 66.4255) (xy 109.509855 66.4255) + (xy 109.509856 66.425499) (xy 109.639957 66.410841) (xy 109.804906 66.353122) (xy 109.952876 66.260147) + (xy 110.076447 66.136576) (xy 110.169422 65.988606) (xy 110.227141 65.823657) (xy 110.2418 65.693552) + (xy 110.2418 64.356448) (xy 110.232537 64.274235) (xy 110.227142 64.226349) (xy 110.226597 64.22396) + (xy 110.226694 64.222371) (xy 110.226362 64.219422) (xy 110.226878 64.219363) (xy 110.230867 64.154221) + (xy 110.272164 64.097861) (xy 110.300027 64.081804) (xy 110.389379 64.044794) (xy 110.520489 63.957189) + (xy 110.631989 63.845689) (xy 110.719594 63.714579) (xy 110.730388 63.688521) (xy 110.747694 63.64674) + (xy 110.779937 63.568897) (xy 110.8107 63.414242) (xy 110.8107 63.256558) (xy 110.8107 63.256555) + (xy 110.810699 63.256553) (xy 110.805139 63.228597) (xy 110.800989 63.207735) (xy 119.7508 63.207735) + (xy 119.7508 64.90347) (xy 119.750801 64.903476) (xy 119.757208 64.963083) (xy 119.807502 65.097928) + (xy 119.807506 65.097935) (xy 119.893752 65.213144) (xy 119.893755 65.213147) (xy 120.008964 65.299393) + (xy 120.008971 65.299397) (xy 120.143817 65.349691) (xy 120.143816 65.349691) (xy 120.150744 65.350435) + (xy 120.203427 65.3561) (xy 121.899172 65.356099) (xy 121.958783 65.349691) (xy 122.093631 65.299396) + (xy 122.167589 65.24403) (xy 122.233053 65.219614) (xy 122.301326 65.234465) (xy 122.31621 65.24403) + (xy 122.390169 65.299396) (xy 122.39017 65.299396) (xy 122.390171 65.299397) (xy 122.525017 65.349691) + (xy 122.525016 65.349691) (xy 122.531944 65.350435) (xy 122.584627 65.3561) (xy 124.280372 65.356099) + (xy 124.339983 65.349691) (xy 124.474831 65.299396) (xy 124.508507 65.274186) (xy 124.548839 65.243994) + (xy 124.614303 65.219576) (xy 124.682576 65.234427) (xy 124.697461 65.243994) (xy 124.771464 65.299393) + (xy 124.771471 65.299397) (xy 124.906317 65.349691) (xy 124.906316 65.349691) (xy 124.913244 65.350435) + (xy 124.965927 65.3561) (xy 126.661672 65.356099) (xy 126.721283 65.349691) (xy 126.856131 65.299396) + (xy 126.930089 65.24403) (xy 126.995553 65.219614) (xy 127.063826 65.234465) (xy 127.07871 65.24403) + (xy 127.152669 65.299396) (xy 127.15267 65.299396) (xy 127.152671 65.299397) (xy 127.287517 65.349691) + (xy 127.287516 65.349691) (xy 127.294444 65.350435) (xy 127.347127 65.3561) (xy 129.042872 65.356099) + (xy 129.102483 65.349691) (xy 129.237331 65.299396) (xy 129.271007 65.274186) (xy 129.311339 65.243994) + (xy 129.376803 65.219576) (xy 129.445076 65.234427) (xy 129.459961 65.243994) (xy 129.533964 65.299393) + (xy 129.533971 65.299397) (xy 129.668817 65.349691) (xy 129.668816 65.349691) (xy 129.675744 65.350435) + (xy 129.728427 65.3561) (xy 130.670018 65.356099) (xy 130.737057 65.375783) (xy 130.757684 65.392403) + (xy 131.603886 66.238321) (xy 131.603907 66.238341) (xy 131.605451 66.239884) (xy 131.638132 66.272565) + (xy 131.63815 66.272572) (xy 131.638165 66.272587) (xy 131.66464 66.283548) (xy 131.679613 66.289748) + (xy 131.679625 66.289752) (xy 131.721747 66.3072) (xy 131.721748 66.3072) (xy 131.721783 66.307207) + (xy 131.721783 66.307206) (xy 131.721786 66.307208) (xy 131.767038 66.3072) (xy 144.818778 66.3072) + (xy 144.818805 66.307211) (xy 144.86209 66.3072) (xy 144.909253 66.3072) (xy 144.909255 66.3072) + (xy 144.909301 66.30719) (xy 144.909306 66.307188) (xy 144.90931 66.307188) (xy 144.949297 66.290613) + (xy 144.95095 66.289928) (xy 144.95095 66.28993) (xy 144.950968 66.28992) (xy 144.992868 66.272565) + (xy 144.992871 66.272561) (xy 144.992897 66.272551) (xy 144.992913 66.272534) (xy 144.992917 66.272533) + (xy 145.026624 66.238807) (xy 145.026647 66.238786) (xy 145.066266 66.199167) (xy 145.066354 66.199056) + (xy 145.872565 65.392439) (xy 145.899505 65.377719) (xy 145.925333 65.361122) (xy 145.931508 65.360234) + (xy 145.933879 65.358939) (xy 145.960268 65.356099) (xy 146.14809 65.356099) (xy 146.215129 65.375784) + (xy 146.23576 65.392407) (xy 146.827911 65.984409) (xy 147.087798 66.244231) (xy 147.116132 66.272565) + (xy 147.116137 66.272566) (xy 147.116147 66.272573) (xy 147.116156 66.272582) (xy 147.116169 66.272587) + (xy 147.116403 66.272737) (xy 147.118465 66.273538) (xy 147.148581 66.286007) (xy 147.157614 66.289748) + (xy 147.157613 66.289749) (xy 147.157629 66.289754) (xy 147.199741 66.307198) (xy 147.199743 66.307198) + (xy 147.199747 66.3072) (xy 147.199752 66.3072) (xy 147.199773 66.307204) (xy 147.199773 66.307203) + (xy 147.199776 66.307205) (xy 147.240911 66.3072) (xy 147.240916 66.3072) (xy 160.387252 66.3072) + (xy 160.387253 66.3072) (xy 160.470868 66.272565) (xy 160.47087 66.272563) (xy 160.470871 66.272563) + (xy 160.542993 66.20044) (xy 160.543969 66.199248) (xy 161.350515 65.392431) (xy 161.377454 65.377716) + (xy 161.403276 65.361122) (xy 161.40946 65.360232) (xy 161.411833 65.358937) (xy 161.438211 65.356099) + (xy 161.626731 65.356099) (xy 161.69377 65.375784) (xy 161.714432 65.392438) (xy 162.024545 65.702707) + (xy 162.521351 66.199764) (xy 162.521443 66.199876) (xy 162.560428 66.238861) (xy 162.594082 66.272533) + (xy 162.594124 66.272561) (xy 162.59413 66.272563) (xy 162.594132 66.272565) (xy 162.636052 66.289929) + (xy 162.67769 66.307188) (xy 162.677718 66.307188) (xy 162.677747 66.3072) (xy 162.677758 66.3072) + (xy 162.72491 66.3072) (xy 162.768195 66.307211) (xy 162.768222 66.3072) (xy 201.956678 66.3072) + (xy 201.9568 66.307211) (xy 201.968794 66.307208) (xy 201.968795 66.307209) (xy 202.011666 66.3072) + (xy 202.059253 66.3072) (xy 202.059254 66.307199) (xy 202.059294 66.307191) (xy 202.059296 66.30719) + (xy 202.0593 66.30719) (xy 202.099927 66.290351) (xy 202.141262 66.273229) (xy 202.142836 66.272608) + (xy 202.142904 66.272539) (xy 202.142909 66.272538) (xy 202.176202 66.239229) (xy 202.176221 66.239212) + (xy 202.215531 66.199902) (xy 202.215611 66.199805) (xy 202.240905 66.174501) (xy 203.02264 65.392435) + (xy 203.049583 65.377716) (xy 203.075405 65.361122) (xy 203.081584 65.360233) (xy 203.083956 65.358938) + (xy 203.11034 65.356099) (xy 203.29809 65.356099) (xy 203.365129 65.375784) (xy 203.38576 65.392407) + (xy 203.977911 65.984409) (xy 204.237798 66.244231) (xy 204.266132 66.272565) (xy 204.266137 66.272566) + (xy 204.266147 66.272573) (xy 204.266156 66.272582) (xy 204.266169 66.272587) (xy 204.266403 66.272737) + (xy 204.268465 66.273538) (xy 204.298581 66.286007) (xy 204.307614 66.289748) (xy 204.307613 66.289749) + (xy 204.307629 66.289754) (xy 204.349741 66.307198) (xy 204.349743 66.307198) (xy 204.349747 66.3072) + (xy 204.349752 66.3072) (xy 204.349773 66.307204) (xy 204.349773 66.307203) (xy 204.349776 66.307205) + (xy 204.390911 66.3072) (xy 204.390916 66.3072) (xy 256.737778 66.3072) (xy 256.737805 66.307211) + (xy 256.78109 66.3072) (xy 256.828253 66.3072) (xy 256.828255 66.3072) (xy 256.828301 66.30719) + (xy 256.828306 66.307188) (xy 256.82831 66.307188) (xy 256.868297 66.290613) (xy 256.86995 66.289928) + (xy 256.86995 66.28993) (xy 256.869968 66.28992) (xy 256.911868 66.272565) (xy 256.911871 66.272561) + (xy 256.911897 66.272551) (xy 256.911913 66.272534) (xy 256.911917 66.272533) (xy 256.945624 66.238807) + (xy 256.945647 66.238786) (xy 256.985266 66.199167) (xy 256.985354 66.199056) (xy 257.791565 65.392439) + (xy 257.818505 65.377719) (xy 257.844333 65.361122) (xy 257.850508 65.360234) (xy 257.852879 65.358939) + (xy 257.879268 65.356099) (xy 258.06716 65.356099) (xy 258.134199 65.375784) (xy 258.154834 65.39241) + (xy 259.002753 66.240186) (xy 259.002752 66.240186) (xy 259.002761 66.240194) (xy 259.035129 66.272563) + (xy 259.035145 66.272573) (xy 259.035148 66.272576) (xy 259.035151 66.272577) (xy 259.035292 66.272668) + (xy 259.036953 66.273323) (xy 259.074695 66.288952) (xy 259.074703 66.288959) (xy 259.074704 66.288957) + (xy 259.109452 66.303349) (xy 259.118747 66.3072) (xy 259.118748 66.3072) (xy 259.11875 66.307201) + (xy 259.118759 66.307203) (xy 259.118765 66.307202) (xy 259.118766 66.307203) (xy 259.157554 66.3072) + (xy 272.215773 66.3072) (xy 272.215795 66.307209) (xy 272.258666 66.3072) (xy 272.306253 66.3072) + (xy 272.306254 66.307199) (xy 272.306294 66.307191) (xy 272.306296 66.30719) (xy 272.3063 66.30719) + (xy 272.346901 66.290361) (xy 272.346927 66.290358) (xy 272.346925 66.290352) (xy 272.355792 66.286679) + (xy 272.389868 66.272565) (xy 272.38987 66.272562) (xy 272.389891 66.272554) (xy 272.389905 66.272539) + (xy 272.389909 66.272538) (xy 272.423202 66.239229) (xy 272.423221 66.239212) (xy 272.462531 66.199902) + (xy 272.462611 66.199805) (xy 272.487905 66.174501) (xy 273.26964 65.392435) (xy 273.296583 65.377716) + (xy 273.322405 65.361122) (xy 273.328584 65.360233) (xy 273.330956 65.358938) (xy 273.35734 65.356099) + (xy 273.54516 65.356099) (xy 273.612199 65.375784) (xy 273.632834 65.39241) (xy 274.480753 66.240186) + (xy 274.480752 66.240186) (xy 274.480761 66.240194) (xy 274.513129 66.272563) (xy 274.513145 66.272573) + (xy 274.513148 66.272576) (xy 274.513151 66.272577) (xy 274.513292 66.272668) (xy 274.514953 66.273323) + (xy 274.552695 66.288952) (xy 274.552703 66.288959) (xy 274.552704 66.288957) (xy 274.587452 66.303349) + (xy 274.596747 66.3072) (xy 274.596748 66.3072) (xy 274.59675 66.307201) (xy 274.596759 66.307203) + (xy 274.596765 66.307202) (xy 274.596766 66.307203) (xy 274.635554 66.3072) (xy 287.693769 66.3072) + (xy 287.693786 66.307207) (xy 287.736022 66.3072) (xy 287.784253 66.3072) (xy 287.784258 66.307197) + (xy 287.784286 66.307192) (xy 287.784291 66.307192) (xy 287.784301 66.307188) (xy 287.826065 66.289881) + (xy 287.826074 66.289876) (xy 287.826083 66.289873) (xy 287.86582 66.273413) (xy 287.867807 66.272636) + (xy 287.867898 66.272544) (xy 287.8679 66.272544) (xy 287.900647 66.239784) (xy 287.900668 66.239773) + (xy 287.900664 66.239769) (xy 287.940927 66.199506) (xy 287.940987 66.199431) (xy 288.747716 65.39243) + (xy 288.774653 65.377716) (xy 288.800475 65.361122) (xy 288.806659 65.360232) (xy 288.809032 65.358937) + (xy 288.83541 65.356099) (xy 289.02316 65.356099) (xy 289.090199 65.375784) (xy 289.110834 65.39241) + (xy 289.958753 66.240186) (xy 289.958752 66.240186) (xy 289.958761 66.240194) (xy 289.991129 66.272563) + (xy 289.991145 66.272573) (xy 289.991148 66.272576) (xy 289.991151 66.272577) (xy 289.991292 66.272668) + (xy 289.992953 66.273323) (xy 290.030695 66.288952) (xy 290.030703 66.288959) (xy 290.030704 66.288957) + (xy 290.065452 66.303349) (xy 290.074747 66.3072) (xy 290.074748 66.3072) (xy 290.07475 66.307201) + (xy 290.074759 66.307203) (xy 290.074765 66.307202) (xy 290.074766 66.307203) (xy 290.113554 66.3072) + (xy 300.790773 66.3072) (xy 300.790795 66.307209) (xy 300.833666 66.3072) (xy 300.881253 66.3072) + (xy 300.881254 66.307199) (xy 300.881294 66.307191) (xy 300.881296 66.30719) (xy 300.8813 66.30719) + (xy 300.921901 66.290361) (xy 300.921927 66.290358) (xy 300.921925 66.290352) (xy 300.930792 66.286679) + (xy 300.964868 66.272565) (xy 300.96487 66.272562) (xy 300.964891 66.272554) (xy 300.964905 66.272539) + (xy 300.964909 66.272538) (xy 300.998202 66.239229) (xy 300.998221 66.239212) (xy 301.037531 66.199902) + (xy 301.037611 66.199805) (xy 301.062905 66.174501) (xy 301.84464 65.392435) (xy 301.871583 65.377716) + (xy 301.897405 65.361122) (xy 301.903584 65.360233) (xy 301.905956 65.358938) (xy 301.93234 65.356099) + (xy 302.119946 65.356099) (xy 302.186985 65.375784) (xy 302.207609 65.392399) (xy 303.056736 66.241169) + (xy 303.056735 66.241169) (xy 303.056754 66.241187) (xy 303.088132 66.272565) (xy 303.088134 66.272566) + (xy 303.088169 66.272589) (xy 303.088173 66.272593) (xy 303.088177 66.272594) (xy 303.088179 66.272596) + (xy 303.111276 66.282156) (xy 303.129585 66.289735) (xy 303.129609 66.289755) (xy 303.129612 66.289747) + (xy 303.171747 66.3072) (xy 303.171751 66.3072) (xy 303.171794 66.307209) (xy 303.171794 66.307208) + (xy 303.171795 66.307209) (xy 303.214666 66.3072) (xy 313.887778 66.3072) (xy 313.887805 66.307211) + (xy 313.93109 66.3072) (xy 313.978253 66.3072) (xy 313.978255 66.3072) (xy 313.978301 66.30719) + (xy 313.978306 66.307188) (xy 313.97831 66.307188) (xy 314.018297 66.290613) (xy 314.01995 66.289928) + (xy 314.01995 66.28993) (xy 314.019968 66.28992) (xy 314.061868 66.272565) (xy 314.061871 66.272561) + (xy 314.061897 66.272551) (xy 314.061913 66.272534) (xy 314.061917 66.272533) (xy 314.095624 66.238807) + (xy 314.095647 66.238786) (xy 314.135266 66.199167) (xy 314.135354 66.199056) (xy 314.941565 65.392439) + (xy 314.968505 65.377719) (xy 314.994333 65.361122) (xy 315.000508 65.360234) (xy 315.002879 65.358939) + (xy 315.029268 65.356099) (xy 315.217231 65.356099) (xy 315.28427 65.375784) (xy 315.304909 65.392414) + (xy 315.938272 66.025723) (xy 316.155267 66.2427) (xy 316.185132 66.272565) (xy 316.185133 66.272565) + (xy 316.185136 66.272567) (xy 316.18514 66.272571) (xy 316.185147 66.272573) (xy 316.185816 66.272987) + (xy 316.189152 66.274232) (xy 316.226608 66.289745) (xy 316.226612 66.289748) (xy 316.226612 66.289747) + (xy 316.268747 66.3072) (xy 316.26875 66.3072) (xy 316.268754 66.3072) (xy 316.268757 66.307202) + (xy 316.268758 66.307201) (xy 316.268759 66.307202) (xy 316.291383 66.307201) (xy 316.31401 66.3072) + (xy 329.365766 66.3072) (xy 329.36578 66.307206) (xy 329.407552 66.3072) (xy 329.456253 66.3072) + (xy 329.456266 66.3072) (xy 329.45631 66.30719) (xy 329.457038 66.30688) (xy 329.49332 66.291846) + (xy 329.496279 66.29062) (xy 329.496292 66.290615) (xy 329.522608 66.279714) (xy 329.539868 66.272565) + (xy 329.53987 66.272562) (xy 329.540007 66.272506) (xy 329.541635 66.270806) (xy 329.572247 66.240186) + (xy 329.603865 66.208568) (xy 329.613206 66.199227) (xy 329.613256 66.199163) (xy 330.419762 65.392429) + (xy 330.481081 65.358936) (xy 330.507456 65.356099) (xy 331.449171 65.356099) (xy 331.449172 65.356099) + (xy 331.508783 65.349691) (xy 331.643631 65.299396) (xy 331.758846 65.213146) (xy 331.845096 65.097931) + (xy 331.895391 64.963083) (xy 331.9018 64.903473) (xy 331.901799 63.207728) (xy 331.89627 63.156296) + (xy 331.895391 63.148116) (xy 331.845097 63.013271) (xy 331.845093 63.013264) (xy 331.758847 62.898055) + (xy 331.758844 62.898052) (xy 331.643635 62.811806) (xy 331.643628 62.811802) (xy 331.508782 62.761508) + (xy 331.508783 62.761508) (xy 331.449183 62.755101) (xy 331.449181 62.7551) (xy 331.449173 62.7551) + (xy 331.449164 62.7551) (xy 329.753429 62.7551) (xy 329.753423 62.755101) (xy 329.693816 62.761508) + (xy 329.558971 62.811802) (xy 329.558968 62.811804) (xy 329.484961 62.867206) (xy 329.419496 62.891623) + (xy 329.351223 62.876771) (xy 329.336339 62.867206) (xy 329.262331 62.811804) (xy 329.262328 62.811802) + (xy 329.127482 62.761508) (xy 329.127483 62.761508) (xy 329.067883 62.755101) (xy 329.067881 62.7551) + (xy 329.067873 62.7551) (xy 329.067865 62.7551) (xy 328.5715 62.7551) (xy 328.504461 62.735415) + (xy 328.458706 62.682611) (xy 328.4475 62.6311) (xy 328.4475 57.742144) (xy 328.447511 57.700104) + (xy 328.4475 57.700077) (xy 328.4475 57.700047) (xy 328.430545 57.659115) (xy 328.412898 57.61648) + (xy 328.412896 57.616478) (xy 328.412896 57.616477) (xy 328.412869 57.616436) (xy 328.383113 57.58668) + (xy 328.323573 57.52711) (xy 328.23926 57.442755) (xy 339.6494 57.442755) (xy 339.6494 58.0906) + (xy 340.566388 58.0906) (xy 340.533475 58.147607) (xy 340.4994 58.274774) (xy 340.4994 58.406426) + (xy 340.533475 58.533593) (xy 340.566388 58.5906) (xy 339.6494 58.5906) (xy 339.6494 59.238444) + (xy 339.655801 59.297972) (xy 339.655803 59.297979) (xy 339.706045 59.432686) (xy 339.706049 59.432693) + (xy 339.792209 59.547787) (xy 339.792212 59.54779) (xy 339.907306 59.63395) (xy 339.907313 59.633954) + (xy 340.04202 59.684196) (xy 340.042027 59.684198) (xy 340.101555 59.690599) (xy 340.101572 59.6906) + (xy 340.7494 59.6906) (xy 340.7494 58.773612) (xy 340.806407 58.806525) (xy 340.933574 58.8406) + (xy 341.065226 58.8406) (xy 341.192393 58.806525) (xy 341.2494 58.773612) (xy 341.2494 59.6906) + (xy 341.897228 59.6906) (xy 341.897244 59.690599) (xy 341.956772 59.684198) (xy 341.956779 59.684196) + (xy 342.091486 59.633954) (xy 342.091493 59.63395) (xy 342.206587 59.54779) (xy 342.20659 59.547787) + (xy 342.29275 59.432693) (xy 342.292754 59.432686) (xy 342.341822 59.301129) (xy 342.383693 59.245195) + (xy 342.449157 59.220778) (xy 342.51743 59.23563) (xy 342.545685 59.256781) (xy 342.659613 59.370709) + (xy 342.831579 59.495648) (xy 342.831581 59.495649) (xy 342.831584 59.495651) (xy 343.020988 59.592157) + (xy 343.223157 59.657846) (xy 343.433113 59.6911) (xy 343.433114 59.6911) (xy 343.645686 59.6911) + (xy 343.645687 59.6911) (xy 343.855643 59.657846) (xy 344.057812 59.592157) (xy 344.247216 59.495651) + (xy 344.27564 59.475) (xy 344.419186 59.370709) (xy 344.419188 59.370706) (xy 344.419192 59.370704) + (xy 344.569504 59.220392) (xy 344.569506 59.220388) (xy 344.569509 59.220386) (xy 344.694448 59.04842) + (xy 344.694447 59.04842) (xy 344.694451 59.048416) (xy 344.698914 59.039654) (xy 344.746888 58.988859) + (xy 344.814708 58.972063) (xy 344.880844 58.994599) (xy 344.919886 59.039656) (xy 344.924351 59.04842) + (xy 345.04929 59.220386) (xy 345.199613 59.370709) (xy 345.371579 59.495648) (xy 345.371581 59.495649) + (xy 345.371584 59.495651) (xy 345.560988 59.592157) (xy 345.763157 59.657846) (xy 345.973113 59.6911) + (xy 345.973114 59.6911) (xy 346.185686 59.6911) (xy 346.185687 59.6911) (xy 346.395643 59.657846) + (xy 346.597812 59.592157) (xy 346.787216 59.495651) (xy 346.81564 59.475) (xy 346.959186 59.370709) + (xy 346.959188 59.370706) (xy 346.959192 59.370704) (xy 347.109504 59.220392) (xy 347.109506 59.220388) + (xy 347.109509 59.220386) (xy 347.234448 59.04842) (xy 347.234447 59.04842) (xy 347.234451 59.048416) + (xy 347.238914 59.039654) (xy 347.286888 58.988859) (xy 347.354708 58.972063) (xy 347.420844 58.994599) + (xy 347.459886 59.039656) (xy 347.464351 59.04842) (xy 347.58929 59.220386) (xy 347.739613 59.370709) + (xy 347.911579 59.495648) (xy 347.911581 59.495649) (xy 347.911584 59.495651) (xy 348.100988 59.592157) + (xy 348.303157 59.657846) (xy 348.513113 59.6911) (xy 348.513114 59.6911) (xy 348.725686 59.6911) + (xy 348.725687 59.6911) (xy 348.935643 59.657846) (xy 349.137812 59.592157) (xy 349.327216 59.495651) + (xy 349.35564 59.475) (xy 349.499186 59.370709) (xy 349.499188 59.370706) (xy 349.499192 59.370704) + (xy 349.649504 59.220392) (xy 349.649506 59.220388) (xy 349.649509 59.220386) (xy 349.774448 59.04842) + (xy 349.774447 59.04842) (xy 349.774451 59.048416) (xy 349.778914 59.039654) (xy 349.826888 58.988859) + (xy 349.894708 58.972063) (xy 349.960844 58.994599) (xy 349.999886 59.039656) (xy 350.004351 59.04842) + (xy 350.12929 59.220386) (xy 350.279613 59.370709) (xy 350.451579 59.495648) (xy 350.451581 59.495649) + (xy 350.451584 59.495651) (xy 350.640988 59.592157) (xy 350.843157 59.657846) (xy 351.053113 59.6911) + (xy 351.053114 59.6911) (xy 351.265686 59.6911) (xy 351.265687 59.6911) (xy 351.475643 59.657846) + (xy 351.677812 59.592157) (xy 351.867216 59.495651) (xy 351.89564 59.475) (xy 352.039186 59.370709) + (xy 352.039188 59.370706) (xy 352.039192 59.370704) (xy 352.189504 59.220392) (xy 352.189506 59.220388) + (xy 352.189509 59.220386) (xy 352.314448 59.04842) (xy 352.314447 59.04842) (xy 352.314451 59.048416) + (xy 352.318914 59.039654) (xy 352.366888 58.988859) (xy 352.434708 58.972063) (xy 352.500844 58.994599) + (xy 352.539886 59.039656) (xy 352.544351 59.04842) (xy 352.66929 59.220386) (xy 352.819613 59.370709) + (xy 352.991579 59.495648) (xy 352.991581 59.495649) (xy 352.991584 59.495651) (xy 353.180988 59.592157) + (xy 353.383157 59.657846) (xy 353.593113 59.6911) (xy 353.593114 59.6911) (xy 353.805686 59.6911) + (xy 353.805687 59.6911) (xy 354.015643 59.657846) (xy 354.217812 59.592157) (xy 354.407216 59.495651) + (xy 354.43564 59.475) (xy 354.579186 59.370709) (xy 354.579188 59.370706) (xy 354.579192 59.370704) + (xy 354.729504 59.220392) (xy 354.729506 59.220388) (xy 354.729509 59.220386) (xy 354.854448 59.04842) + (xy 354.854447 59.04842) (xy 354.854451 59.048416) (xy 354.950957 58.859012) (xy 355.016646 58.656843) + (xy 355.0499 58.446887) (xy 355.0499 58.234313) (xy 355.016646 58.024357) (xy 354.950957 57.822188) + (xy 354.854451 57.632784) (xy 354.854449 57.632781) (xy 354.854448 57.632779) (xy 354.729509 57.460813) + (xy 354.579186 57.31049) (xy 354.40722 57.185551) (xy 354.217814 57.089044) (xy 354.217813 57.089043) + (xy 354.217812 57.089043) (xy 354.015643 57.023354) (xy 354.015641 57.023353) (xy 354.01564 57.023353) + (xy 353.854357 56.997808) (xy 353.805687 56.9901) (xy 353.593113 56.9901) (xy 353.544442 56.997808) + (xy 353.38316 57.023353) (xy 353.368341 57.028168) (xy 353.236008 57.071166) (xy 353.180985 57.089044) + (xy 352.991579 57.185551) (xy 352.819613 57.31049) (xy 352.66929 57.460813) (xy 352.544349 57.632782) + (xy 352.539884 57.641546) (xy 352.491909 57.692342) (xy 352.424088 57.709136) (xy 352.357953 57.686598) + (xy 352.318916 57.641546) (xy 352.31445 57.632782) (xy 352.189509 57.460813) (xy 352.039186 57.31049) + (xy 351.86722 57.185551) (xy 351.677814 57.089044) (xy 351.677813 57.089043) (xy 351.677812 57.089043) + (xy 351.475643 57.023354) (xy 351.475641 57.023353) (xy 351.47564 57.023353) (xy 351.314357 56.997808) + (xy 351.265687 56.9901) (xy 351.053113 56.9901) (xy 351.004442 56.997808) (xy 350.84316 57.023353) + (xy 350.828341 57.028168) (xy 350.696008 57.071166) (xy 350.640985 57.089044) (xy 350.451579 57.185551) + (xy 350.279613 57.31049) (xy 350.12929 57.460813) (xy 350.004349 57.632782) (xy 349.999884 57.641546) + (xy 349.951909 57.692342) (xy 349.884088 57.709136) (xy 349.817953 57.686598) (xy 349.778916 57.641546) + (xy 349.77445 57.632782) (xy 349.649509 57.460813) (xy 349.499186 57.31049) (xy 349.32722 57.185551) + (xy 349.137814 57.089044) (xy 349.137813 57.089043) (xy 349.137812 57.089043) (xy 348.935643 57.023354) + (xy 348.935641 57.023353) (xy 348.93564 57.023353) (xy 348.774357 56.997808) (xy 348.725687 56.9901) + (xy 348.513113 56.9901) (xy 348.464442 56.997808) (xy 348.30316 57.023353) (xy 348.288341 57.028168) + (xy 348.156008 57.071166) (xy 348.100985 57.089044) (xy 347.911579 57.185551) (xy 347.739613 57.31049) + (xy 347.58929 57.460813) (xy 347.464349 57.632782) (xy 347.459884 57.641546) (xy 347.411909 57.692342) + (xy 347.344088 57.709136) (xy 347.277953 57.686598) (xy 347.238916 57.641546) (xy 347.23445 57.632782) + (xy 347.109509 57.460813) (xy 346.959186 57.31049) (xy 346.78722 57.185551) (xy 346.597814 57.089044) + (xy 346.597813 57.089043) (xy 346.597812 57.089043) (xy 346.395643 57.023354) (xy 346.395641 57.023353) + (xy 346.39564 57.023353) (xy 346.234357 56.997808) (xy 346.185687 56.9901) (xy 345.973113 56.9901) + (xy 345.924442 56.997808) (xy 345.76316 57.023353) (xy 345.748341 57.028168) (xy 345.616008 57.071166) + (xy 345.560985 57.089044) (xy 345.371579 57.185551) (xy 345.199613 57.31049) (xy 345.04929 57.460813) + (xy 344.924349 57.632782) (xy 344.919884 57.641546) (xy 344.871909 57.692342) (xy 344.804088 57.709136) + (xy 344.737953 57.686598) (xy 344.698916 57.641546) (xy 344.69445 57.632782) (xy 344.569509 57.460813) + (xy 344.419186 57.31049) (xy 344.24722 57.185551) (xy 344.057814 57.089044) (xy 344.057813 57.089043) + (xy 344.057812 57.089043) (xy 343.855643 57.023354) (xy 343.855641 57.023353) (xy 343.85564 57.023353) + (xy 343.694357 56.997808) (xy 343.645687 56.9901) (xy 343.433113 56.9901) (xy 343.384442 56.997808) + (xy 343.22316 57.023353) (xy 343.208341 57.028168) (xy 343.076008 57.071166) (xy 343.020985 57.089044) + (xy 342.831579 57.185551) (xy 342.659615 57.310489) (xy 342.545685 57.424419) (xy 342.484362 57.457903) + (xy 342.41467 57.452919) (xy 342.358737 57.411047) (xy 342.341822 57.38007) (xy 342.292754 57.248513) + (xy 342.29275 57.248506) (xy 342.20659 57.133412) (xy 342.206587 57.133409) (xy 342.091493 57.047249) + (xy 342.091486 57.047245) (xy 341.956779 56.997003) (xy 341.956772 56.997001) (xy 341.897244 56.9906) + (xy 341.2494 56.9906) (xy 341.2494 57.907588) (xy 341.192393 57.874675) (xy 341.065226 57.8406) + (xy 340.933574 57.8406) (xy 340.806407 57.874675) (xy 340.7494 57.907588) (xy 340.7494 56.9906) + (xy 340.101555 56.9906) (xy 340.042027 56.997001) (xy 340.04202 56.997003) (xy 339.907313 57.047245) + (xy 339.907306 57.047249) (xy 339.792212 57.133409) (xy 339.792209 57.133412) (xy 339.706049 57.248506) + (xy 339.706045 57.248513) (xy 339.655803 57.38322) (xy 339.655801 57.383227) (xy 339.6494 57.442755) + (xy 328.23926 57.442755) (xy 327.232082 56.435069) (xy 327.222874 56.425856) (xy 327.222865 56.425832) + (xy 327.192647 56.395614) (xy 327.17731 56.380269) (xy 327.158918 56.361867) (xy 327.158873 56.361837) + (xy 327.154331 56.359955) (xy 327.116947 56.34447) (xy 327.07531 56.327212) (xy 327.075309 56.327211) + (xy 327.075307 56.327211) (xy 327.075256 56.3272) (xy 327.075253 56.3272) (xy 327.02809 56.3272) + (xy 326.984805 56.327189) (xy 326.984778 56.3272) (xy 313.933039 56.3272) (xy 313.887786 56.327192) + (xy 313.887785 56.327192) (xy 313.887783 56.327192) (xy 313.887741 56.3272) (xy 313.84644 56.344309) + (xy 313.846421 56.344317) (xy 313.804162 56.361813) (xy 313.804136 56.36183) (xy 313.77145 56.394515) + (xy 313.771437 56.394528) (xy 313.185891 56.979877) (xy 313.124563 57.013352) (xy 313.054872 57.008355) + (xy 313.050774 57.006743) (xy 312.996836 56.984402) (xy 312.975497 56.975563) (xy 312.975493 56.975562) + (xy 312.975489 56.975561) (xy 312.820845 56.9448) (xy 312.820842 56.9448) (xy 312.663158 56.9448) + (xy 312.663155 56.9448) (xy 312.50851 56.975561) (xy 312.508503 56.975563) (xy 312.433225 57.006743) + (xy 312.363755 57.01421) (xy 312.301277 56.982935) (xy 312.298107 56.979877) (xy 311.709646 56.391613) + (xy 311.679868 56.361835) (xy 311.679853 56.361828) (xy 311.67984 56.361815) (xy 311.679836 56.361813) + (xy 311.638032 56.344505) (xy 311.637375 56.344233) (xy 311.596253 56.3272) (xy 311.596232 56.3272) + (xy 311.596215 56.327193) (xy 311.596167 56.327193) (xy 311.553979 56.3272) (xy 287.739039 56.3272) + (xy 287.693786 56.327192) (xy 287.693767 56.3272) (xy 287.693747 56.3272) (xy 287.689416 56.328993) + (xy 287.68941 56.328994) (xy 287.65244 56.344309) (xy 287.652421 56.344317) (xy 287.610162 56.361813) + (xy 287.610136 56.36183) (xy 287.57745 56.394515) (xy 287.577437 56.394528) (xy 286.991891 56.979877) + (xy 286.930563 57.013352) (xy 286.860872 57.008355) (xy 286.856774 57.006743) (xy 286.802836 56.984402) + (xy 286.781497 56.975563) (xy 286.781493 56.975562) (xy 286.781489 56.975561) (xy 286.626845 56.9448) + (xy 286.626842 56.9448) (xy 286.469158 56.9448) (xy 286.469155 56.9448) (xy 286.31451 56.975561) + (xy 286.314498 56.975564) (xy 286.239586 57.006594) (xy 286.170117 57.014063) (xy 286.107638 56.982788) + (xy 286.104431 56.979692) (xy 285.560082 56.435069) (xy 285.550874 56.425856) (xy 285.550865 56.425832) + (xy 285.520647 56.395614) (xy 285.50531 56.380269) (xy 285.486918 56.361867) (xy 285.486873 56.361837) + (xy 285.482331 56.359955) (xy 285.444947 56.34447) (xy 285.40331 56.327212) (xy 285.403309 56.327211) + (xy 285.403307 56.327211) (xy 285.403256 56.3272) (xy 285.403253 56.3272) (xy 285.35609 56.3272) + (xy 285.312805 56.327189) (xy 285.312778 56.3272) (xy 272.261039 56.3272) (xy 272.215786 56.327192) + (xy 272.215785 56.327192) (xy 272.215783 56.327192) (xy 272.215741 56.3272) (xy 272.17444 56.344309) + (xy 272.174421 56.344317) (xy 272.132162 56.361813) (xy 272.132136 56.36183) (xy 272.09945 56.394515) + (xy 272.099437 56.394528) (xy 271.513891 56.979877) (xy 271.452563 57.013352) (xy 271.382872 57.008355) + (xy 271.378774 57.006743) (xy 271.324836 56.984402) (xy 271.303497 56.975563) (xy 271.303493 56.975562) + (xy 271.303489 56.975561) (xy 271.148845 56.9448) (xy 271.148842 56.9448) (xy 270.991158 56.9448) + (xy 270.991155 56.9448) (xy 270.83651 56.975561) (xy 270.836498 56.975564) (xy 270.761586 57.006594) + (xy 270.692117 57.014063) (xy 270.629638 56.982788) (xy 270.626431 56.979692) (xy 270.082082 56.435069) + (xy 270.072874 56.425856) (xy 270.072865 56.425832) (xy 270.042647 56.395614) (xy 270.02731 56.380269) + (xy 270.008918 56.361867) (xy 270.008873 56.361837) (xy 270.004331 56.359955) (xy 269.966947 56.34447) + (xy 269.92531 56.327212) (xy 269.925309 56.327211) (xy 269.925307 56.327211) (xy 269.925256 56.3272) + (xy 269.925253 56.3272) (xy 269.87809 56.3272) (xy 269.834805 56.327189) (xy 269.834778 56.3272) + (xy 256.783039 56.3272) (xy 256.737786 56.327192) (xy 256.737785 56.327192) (xy 256.737783 56.327192) + (xy 256.737741 56.3272) (xy 256.69644 56.344309) (xy 256.696421 56.344317) (xy 256.654162 56.361813) + (xy 256.654136 56.36183) (xy 256.62145 56.394515) (xy 256.621437 56.394528) (xy 256.035891 56.979877) + (xy 255.974563 57.013352) (xy 255.904872 57.008355) (xy 255.900774 57.006743) (xy 255.846836 56.984402) + (xy 255.825497 56.975563) (xy 255.825493 56.975562) (xy 255.825489 56.975561) (xy 255.670845 56.9448) + (xy 255.670842 56.9448) (xy 255.513158 56.9448) (xy 255.513155 56.9448) (xy 255.35851 56.975561) + (xy 255.358503 56.975563) (xy 255.283225 57.006743) (xy 255.213755 57.01421) (xy 255.151277 56.982935) + (xy 255.148107 56.979877) (xy 254.559646 56.391613) (xy 254.529868 56.361835) (xy 254.529853 56.361828) + (xy 254.52984 56.361815) (xy 254.529836 56.361813) (xy 254.488032 56.344505) (xy 254.487375 56.344233) + (xy 254.446253 56.3272) (xy 254.446232 56.3272) (xy 254.446215 56.327193) (xy 254.446167 56.327193) + (xy 254.403979 56.3272) (xy 243.686039 56.3272) (xy 243.640786 56.327192) (xy 243.640767 56.3272) + (xy 243.640747 56.3272) (xy 243.636416 56.328993) (xy 243.63641 56.328994) (xy 243.59944 56.344309) + (xy 243.599421 56.344317) (xy 243.557162 56.361813) (xy 243.557136 56.36183) (xy 243.52445 56.394515) + (xy 243.524437 56.394528) (xy 242.938891 56.979877) (xy 242.877563 57.013352) (xy 242.807872 57.008355) + (xy 242.803774 57.006743) (xy 242.749836 56.984402) (xy 242.728497 56.975563) (xy 242.728493 56.975562) + (xy 242.728489 56.975561) (xy 242.573845 56.9448) (xy 242.573842 56.9448) (xy 242.416158 56.9448) + (xy 242.416155 56.9448) (xy 242.26151 56.975561) (xy 242.261498 56.975564) (xy 242.186586 57.006594) + (xy 242.117117 57.014063) (xy 242.054638 56.982788) (xy 242.051431 56.979692) (xy 241.507082 56.435069) + (xy 241.497874 56.425856) (xy 241.497865 56.425832) (xy 241.467647 56.395614) (xy 241.45231 56.380269) + (xy 241.433918 56.361867) (xy 241.433873 56.361837) (xy 241.429331 56.359955) (xy 241.391947 56.34447) + (xy 241.35031 56.327212) (xy 241.350309 56.327211) (xy 241.350307 56.327211) (xy 241.350256 56.3272) + (xy 241.350253 56.3272) (xy 241.30309 56.3272) (xy 241.259805 56.327189) (xy 241.259778 56.3272) + (xy 230.589039 56.3272) (xy 230.543786 56.327192) (xy 230.543785 56.327192) (xy 230.543783 56.327192) + (xy 230.543741 56.3272) (xy 230.50244 56.344309) (xy 230.502421 56.344317) (xy 230.460162 56.361813) + (xy 230.460136 56.36183) (xy 230.42745 56.394515) (xy 230.427437 56.394528) (xy 229.793583 57.028168) + (xy 229.732255 57.061643) (xy 229.662564 57.056646) (xy 229.658481 57.055039) (xy 229.631497 57.043863) + (xy 229.631493 57.043862) (xy 229.631488 57.04386) (xy 229.476845 57.0131) (xy 229.476842 57.0131) + (xy 229.319158 57.0131) (xy 229.319155 57.0131) (xy 229.164511 57.04386) (xy 229.164502 57.043863) + (xy 229.137861 57.054898) (xy 229.068392 57.062365) (xy 229.005913 57.031089) (xy 229.002723 57.028009) + (xy 228.614624 56.639715) (xy 228.410082 56.435069) (xy 228.400874 56.425856) (xy 228.400865 56.425832) + (xy 228.370647 56.395614) (xy 228.35531 56.380269) (xy 228.336918 56.361867) (xy 228.336873 56.361837) + (xy 228.332331 56.359955) (xy 228.294947 56.34447) (xy 228.25331 56.327212) (xy 228.253309 56.327211) + (xy 228.253307 56.327211) (xy 228.253256 56.3272) (xy 228.253253 56.3272) (xy 228.20609 56.3272) + (xy 228.162805 56.327189) (xy 228.162778 56.3272) (xy 217.492039 56.3272) (xy 217.446786 56.327192) + (xy 217.446785 56.327192) (xy 217.446783 56.327192) (xy 217.446741 56.3272) (xy 217.40544 56.344309) + (xy 217.405421 56.344317) (xy 217.363162 56.361813) (xy 217.363136 56.36183) (xy 217.33045 56.394515) + (xy 217.330437 56.394528) (xy 216.744891 56.979877) (xy 216.683563 57.013352) (xy 216.613872 57.008355) + (xy 216.609774 57.006743) (xy 216.555836 56.984402) (xy 216.534497 56.975563) (xy 216.534493 56.975562) + (xy 216.534489 56.975561) (xy 216.379845 56.9448) (xy 216.379842 56.9448) (xy 216.222158 56.9448) + (xy 216.222155 56.9448) (xy 216.06751 56.975561) (xy 216.067498 56.975564) (xy 215.992586 57.006594) + (xy 215.923117 57.014063) (xy 215.860638 56.982788) (xy 215.857431 56.979692) (xy 215.313082 56.435069) + (xy 215.303874 56.425856) (xy 215.303865 56.425832) (xy 215.273647 56.395614) (xy 215.25831 56.380269) + (xy 215.239918 56.361867) (xy 215.239873 56.361837) (xy 215.235331 56.359955) (xy 215.197947 56.34447) + (xy 215.15631 56.327212) (xy 215.156309 56.327211) (xy 215.156307 56.327211) (xy 215.156256 56.3272) + (xy 215.156253 56.3272) (xy 215.10909 56.3272) (xy 215.065805 56.327189) (xy 215.065778 56.3272) + (xy 202.014039 56.3272) (xy 201.968786 56.327192) (xy 201.968785 56.327192) (xy 201.968783 56.327192) + (xy 201.968741 56.3272) (xy 201.92744 56.344309) (xy 201.927421 56.344317) (xy 201.885162 56.361813) + (xy 201.885136 56.36183) (xy 201.85245 56.394515) (xy 201.852437 56.394528) (xy 201.266891 56.979877) + (xy 201.205563 57.013352) (xy 201.135872 57.008355) (xy 201.131774 57.006743) (xy 201.077836 56.984402) + (xy 201.056497 56.975563) (xy 201.056493 56.975562) (xy 201.056489 56.975561) (xy 200.901845 56.9448) + (xy 200.901842 56.9448) (xy 200.744158 56.9448) (xy 200.744155 56.9448) (xy 200.58951 56.975561) + (xy 200.589498 56.975564) (xy 200.514586 57.006594) (xy 200.445117 57.014063) (xy 200.382638 56.982788) + (xy 200.379431 56.979692) (xy 199.835082 56.435069) (xy 199.825874 56.425856) (xy 199.825865 56.425832) + (xy 199.795647 56.395614) (xy 199.78031 56.380269) (xy 199.761918 56.361867) (xy 199.761873 56.361837) + (xy 199.757331 56.359955) (xy 199.719947 56.34447) (xy 199.67831 56.327212) (xy 199.678309 56.327211) + (xy 199.678307 56.327211) (xy 199.678256 56.3272) (xy 199.678253 56.3272) (xy 199.63109 56.3272) + (xy 199.587805 56.327189) (xy 199.587778 56.3272) (xy 188.917039 56.3272) (xy 188.871786 56.327192) + (xy 188.871785 56.327192) (xy 188.871783 56.327192) (xy 188.871741 56.3272) (xy 188.83044 56.344309) + (xy 188.830421 56.344317) (xy 188.788162 56.361813) (xy 188.788136 56.36183) (xy 188.75545 56.394515) + (xy 188.755437 56.394528) (xy 188.169891 56.979877) (xy 188.108563 57.013352) (xy 188.038872 57.008355) + (xy 188.034774 57.006743) (xy 187.980836 56.984402) (xy 187.959497 56.975563) (xy 187.959493 56.975562) + (xy 187.959489 56.975561) (xy 187.804845 56.9448) (xy 187.804842 56.9448) (xy 187.647158 56.9448) + (xy 187.647155 56.9448) (xy 187.49251 56.975561) (xy 187.492498 56.975564) (xy 187.417586 57.006594) + (xy 187.348117 57.014063) (xy 187.285638 56.982788) (xy 187.282431 56.979692) (xy 186.738082 56.435069) + (xy 186.728874 56.425856) (xy 186.728865 56.425832) (xy 186.698647 56.395614) (xy 186.68331 56.380269) + (xy 186.664918 56.361867) (xy 186.664873 56.361837) (xy 186.660331 56.359955) (xy 186.622947 56.34447) + (xy 186.58131 56.327212) (xy 186.581309 56.327211) (xy 186.581307 56.327211) (xy 186.581256 56.3272) + (xy 186.581253 56.3272) (xy 186.53409 56.3272) (xy 186.490805 56.327189) (xy 186.490778 56.3272) + (xy 175.820039 56.3272) (xy 175.774786 56.327192) (xy 175.774785 56.327192) (xy 175.774783 56.327192) + (xy 175.774741 56.3272) (xy 175.73344 56.344309) (xy 175.733421 56.344317) (xy 175.691162 56.361813) + (xy 175.691136 56.36183) (xy 175.65845 56.394515) (xy 175.658437 56.394528) (xy 175.072891 56.979877) + (xy 175.011563 57.013352) (xy 174.941872 57.008355) (xy 174.937774 57.006743) (xy 174.883836 56.984402) + (xy 174.862497 56.975563) (xy 174.862493 56.975562) (xy 174.862489 56.975561) (xy 174.707845 56.9448) + (xy 174.707842 56.9448) (xy 174.550158 56.9448) (xy 174.550155 56.9448) (xy 174.39551 56.975561) + (xy 174.395498 56.975564) (xy 174.320586 57.006594) (xy 174.251117 57.014063) (xy 174.188638 56.982788) + (xy 174.185431 56.979692) (xy 173.641082 56.435069) (xy 173.631874 56.425856) (xy 173.631865 56.425832) + (xy 173.601647 56.395614) (xy 173.58631 56.380269) (xy 173.567918 56.361867) (xy 173.567873 56.361837) + (xy 173.563331 56.359955) (xy 173.525947 56.34447) (xy 173.48431 56.327212) (xy 173.484309 56.327211) + (xy 173.484307 56.327211) (xy 173.484256 56.3272) (xy 173.484253 56.3272) (xy 173.43709 56.3272) + (xy 173.393805 56.327189) (xy 173.393778 56.3272) (xy 160.342039 56.3272) (xy 160.296786 56.327192) + (xy 160.296785 56.327192) (xy 160.296783 56.327192) (xy 160.296741 56.3272) (xy 160.25544 56.344309) + (xy 160.255421 56.344317) (xy 160.213162 56.361813) (xy 160.213136 56.36183) (xy 160.18045 56.394515) + (xy 160.180437 56.394528) (xy 159.594891 56.979877) (xy 159.533563 57.013352) (xy 159.463872 57.008355) + (xy 159.459774 57.006743) (xy 159.405836 56.984402) (xy 159.384497 56.975563) (xy 159.384493 56.975562) + (xy 159.384489 56.975561) (xy 159.229845 56.9448) (xy 159.229842 56.9448) (xy 159.072158 56.9448) + (xy 159.072155 56.9448) (xy 158.91751 56.975561) (xy 158.917498 56.975564) (xy 158.842586 57.006594) + (xy 158.773117 57.014063) (xy 158.710638 56.982788) (xy 158.707431 56.979692) (xy 158.163082 56.435069) + (xy 158.153874 56.425856) (xy 158.153865 56.425832) (xy 158.123647 56.395614) (xy 158.10831 56.380269) + (xy 158.089918 56.361867) (xy 158.089873 56.361837) (xy 158.085331 56.359955) (xy 158.047947 56.34447) + (xy 158.00631 56.327212) (xy 158.006309 56.327211) (xy 158.006307 56.327211) (xy 158.006256 56.3272) + (xy 158.006253 56.3272) (xy 157.95909 56.3272) (xy 157.915805 56.327189) (xy 157.915778 56.3272) + (xy 144.864039 56.3272) (xy 144.818786 56.327192) (xy 144.818785 56.327192) (xy 144.818783 56.327192) + (xy 144.818741 56.3272) (xy 144.77744 56.344309) (xy 144.777421 56.344317) (xy 144.735162 56.361813) + (xy 144.735136 56.36183) (xy 144.70245 56.394515) (xy 144.702437 56.394528) (xy 144.116891 56.979877) + (xy 144.055563 57.013352) (xy 143.985872 57.008355) (xy 143.981774 57.006743) (xy 143.927836 56.984402) + (xy 143.906497 56.975563) (xy 143.906493 56.975562) (xy 143.906489 56.975561) (xy 143.751845 56.9448) + (xy 143.751842 56.9448) (xy 143.594158 56.9448) (xy 143.594155 56.9448) (xy 143.43951 56.975561) + (xy 143.439498 56.975564) (xy 143.364586 57.006594) (xy 143.295117 57.014063) (xy 143.232638 56.982788) + (xy 143.229431 56.979692) (xy 142.685082 56.435069) (xy 142.675874 56.425856) (xy 142.675865 56.425832) + (xy 142.645647 56.395614) (xy 142.63031 56.380269) (xy 142.611918 56.361867) (xy 142.611873 56.361837) + (xy 142.607331 56.359955) (xy 142.569947 56.34447) (xy 142.52831 56.327212) (xy 142.528309 56.327211) + (xy 142.528307 56.327211) (xy 142.528256 56.3272) (xy 142.528253 56.3272) (xy 142.48109 56.3272) + (xy 142.437805 56.327189) (xy 142.437778 56.3272) (xy 129.386039 56.3272) (xy 129.340786 56.327192) + (xy 129.340785 56.327192) (xy 129.340783 56.327192) (xy 129.340741 56.3272) (xy 129.29944 56.344309) + (xy 129.299421 56.344317) (xy 129.257162 56.361813) (xy 129.257136 56.36183) (xy 129.22445 56.394515) + (xy 129.224437 56.394528) (xy 128.638891 56.979877) (xy 128.577563 57.013352) (xy 128.507872 57.008355) + (xy 128.503774 57.006743) (xy 128.449836 56.984402) (xy 128.428497 56.975563) (xy 128.428493 56.975562) + (xy 128.428489 56.975561) (xy 128.273845 56.9448) (xy 128.273842 56.9448) (xy 128.116158 56.9448) + (xy 128.116155 56.9448) (xy 127.96151 56.975561) (xy 127.961498 56.975564) (xy 127.815827 57.035902) + (xy 127.815814 57.035909) (xy 127.684711 57.12351) (xy 127.684707 57.123513) (xy 127.573213 57.235007) + (xy 127.57321 57.235011) (xy 127.485609 57.366114) (xy 127.485602 57.366127) (xy 127.425264 57.511798) + (xy 127.425261 57.51181) (xy 127.3945 57.666453) (xy 127.3945 57.666458) (xy 127.3945 57.824142) + (xy 127.3945 57.824144) (xy 127.394499 57.824144) (xy 127.4225 57.964908) (xy 127.420622 57.985892) + (xy 127.423621 58.006747) (xy 127.41757 58.019994) (xy 127.416273 58.0345) (xy 127.403348 58.051137) + (xy 127.394596 58.070303) (xy 127.382343 58.078177) (xy 127.37341 58.089677) (xy 127.353543 58.096685) + (xy 127.335818 58.108077) (xy 127.311234 58.111611) (xy 127.30752 58.112922) (xy 127.300883 58.1131) + (xy 127.061593 58.1131) (xy 127.061421 58.113083) (xy 127.005657 58.113099) (xy 127.005609 58.1131) + (xy 126.958746 58.1131) (xy 126.958686 58.113111) (xy 126.918462 58.129786) (xy 126.918431 58.129799) + (xy 126.875128 58.147736) (xy 126.875078 58.147769) (xy 126.842814 58.18005) (xy 126.842791 58.180075) + (xy 126.811135 58.211732) (xy 126.81112 58.211763) (xy 126.803172 58.219717) (xy 126.803169 58.219718) + (xy 126.257537 58.765673) (xy 126.196224 58.799176) (xy 126.126531 58.794213) (xy 126.122378 58.792579) + (xy 126.047501 58.761564) (xy 126.047489 58.761561) (xy 125.892845 58.7308) (xy 125.892842 58.7308) + (xy 125.735158 58.7308) (xy 125.735155 58.7308) (xy 125.58051 58.761561) (xy 125.580498 58.761564) + (xy 125.434827 58.821902) (xy 125.434814 58.821909) (xy 125.303711 58.90951) (xy 125.303707 58.909513) + (xy 125.192213 59.021007) (xy 125.19221 59.021011) (xy 125.104609 59.152114) (xy 125.104602 59.152127) + (xy 125.044264 59.297798) (xy 125.044261 59.29781) (xy 125.0135 59.452453) (xy 125.0135 59.452458) + (xy 125.0135 59.610142) (xy 125.0135 59.610144) (xy 125.013499 59.610144) (xy 125.0415 59.750908) + (xy 125.039622 59.771892) (xy 125.042621 59.792747) (xy 125.03657 59.805994) (xy 125.035273 59.8205) + (xy 125.022348 59.837137) (xy 125.013596 59.856303) (xy 125.001343 59.864177) (xy 124.99241 59.875677) + (xy 124.972543 59.882685) (xy 124.954818 59.894077) (xy 124.930234 59.897611) (xy 124.92652 59.898922) + (xy 124.919883 59.8991) (xy 124.680274 59.8991) (xy 124.680128 59.899086) (xy 124.668195 59.899089) + (xy 124.625337 59.899099) (xy 124.624909 59.8991) (xy 124.577741 59.8991) (xy 124.5777 59.899107) + (xy 124.53644 59.916209) (xy 124.536052 59.91637) (xy 124.515092 59.925052) (xy 124.494131 59.933735) + (xy 124.494082 59.933767) (xy 124.462502 59.965364) (xy 124.461009 59.966858) (xy 124.430135 59.997732) + (xy 124.430124 59.997758) (xy 124.421647 60.006238) (xy 124.421646 60.006239) (xy 123.876569 60.551591) + (xy 123.815255 60.585092) (xy 123.745562 60.580125) (xy 123.741415 60.578494) (xy 123.687078 60.555988) + (xy 123.666497 60.547463) (xy 123.666493 60.547462) (xy 123.666489 60.547461) (xy 123.511845 60.5167) + (xy 123.511842 60.5167) (xy 123.354158 60.5167) (xy 123.354155 60.5167) (xy 123.19951 60.547461) + (xy 123.199498 60.547464) (xy 123.053827 60.607802) (xy 123.053814 60.607809) (xy 122.922711 60.69541) + (xy 122.922707 60.695413) (xy 122.811213 60.806907) (xy 122.81121 60.806911) (xy 122.723609 60.938014) + (xy 122.723602 60.938027) (xy 122.663264 61.083698) (xy 122.663261 61.08371) (xy 122.6325 61.238353) + (xy 122.6325 61.238358) (xy 122.6325 61.396042) (xy 122.6325 61.396044) (xy 122.632499 61.396044) + (xy 122.6605 61.536808) (xy 122.654273 61.6064) (xy 122.61141 61.661577) (xy 122.54552 61.684822) + (xy 122.538883 61.685) (xy 122.242039 61.685) (xy 122.196786 61.684992) (xy 122.196767 61.685) (xy 122.196747 61.685) + (xy 122.192416 61.686793) (xy 122.19241 61.686794) (xy 122.15544 61.702109) (xy 122.155421 61.702117) + (xy 122.113162 61.719613) (xy 122.113136 61.71963) (xy 122.080463 61.752302) (xy 122.08045 61.752315) + (xy 121.113644 62.718796) (xy 121.052316 62.752271) (xy 121.025978 62.7551) (xy 120.203429 62.7551) + (xy 120.203423 62.755101) (xy 120.143816 62.761508) (xy 120.008971 62.811802) (xy 120.008964 62.811806) + (xy 119.893755 62.898052) (xy 119.893752 62.898055) (xy 119.807506 63.013264) (xy 119.807502 63.013271) + (xy 119.757208 63.148117) (xy 119.751402 63.202128) (xy 119.750801 63.207723) (xy 119.7508 63.207735) + (xy 110.800989 63.207735) (xy 110.779938 63.101908) (xy 110.779937 63.101907) (xy 110.779937 63.101903) + (xy 110.778787 63.099126) (xy 110.719597 62.956227) (xy 110.71959 62.956214) (xy 110.631989 62.825111) + (xy 110.631986 62.825107) (xy 110.520492 62.713613) (xy 110.520488 62.71361) (xy 110.389385 62.626009) + (xy 110.389372 62.626002) (xy 110.243701 62.565664) (xy 110.243689 62.565661) (xy 110.089045 62.5349) + (xy 110.089042 62.5349) (xy 109.931358 62.5349) (xy 109.931355 62.5349) (xy 109.77671 62.565661) + (xy 109.776698 62.565664) (xy 109.631027 62.626002) (xy 109.631014 62.626009) (xy 109.499911 62.71361) + (xy 109.499907 62.713613) (xy 109.388413 62.825107) (xy 109.38841 62.825111) (xy 109.300809 62.956214) + (xy 109.300802 62.956227) (xy 109.240464 63.101898) (xy 109.240461 63.10191) (xy 109.2097 63.256553) + (xy 109.2097 63.414246) (xy 109.222045 63.476309) (xy 109.215818 63.545901) (xy 109.172954 63.601078) + (xy 109.107065 63.624322) (xy 109.100428 63.6245) (xy 108.872741 63.6245) (xy 108.742651 63.639157) + (xy 108.742641 63.639159) (xy 108.577695 63.696877) (xy 108.429723 63.789853) (xy 108.306153 63.913423) + (xy 108.209673 64.066972) (xy 108.157338 64.113263) (xy 108.104679 64.125) (xy 106.577921 64.125) + (xy 106.510882 64.105315) (xy 106.472927 64.066972) (xy 106.420591 63.983679) (xy 106.376447 63.913424) + (xy 106.252876 63.789853) (xy 106.104906 63.696878) (xy 106.104905 63.696877) (xy 106.104904 63.696877) + (xy 105.939958 63.639159) (xy 105.939948 63.639157) (xy 105.809858 63.6245) (xy 105.809852 63.6245) + (xy 105.172748 63.6245) (xy 105.172741 63.6245) (xy 105.042651 63.639157) (xy 105.042641 63.639159) + (xy 104.877695 63.696877) (xy 104.729723 63.789853) (xy 104.606153 63.913423) (xy 104.513177 64.061395) + (xy 104.455459 64.226341) (xy 104.455457 64.226351) (xy 104.4408 64.356441) (xy 104.4408 65.679) + (xy 104.421115 65.746039) (xy 104.368311 65.791794) (xy 104.3168 65.803) (xy 102.979436 65.803) + (xy 102.912397 65.783315) (xy 102.866642 65.730511) (xy 102.856698 65.661353) (xy 102.86173 65.639997) + (xy 102.865804 65.627701) (xy 102.865806 65.62769) (xy 102.876299 65.524986) (xy 102.8763 65.524973) + (xy 102.8763 65.275) (xy 102.1138 65.275) (xy 102.1138 65.679) (xy 102.094115 65.746039) (xy 102.041311 65.791794) + (xy 101.9898 65.803) (xy 101.7378 65.803) (xy 101.670761 65.783315) (xy 101.625006 65.730511) (xy 101.6138 65.679) + (xy 101.6138 64.775) (xy 102.1138 64.775) (xy 102.876299 64.775) (xy 102.876299 64.525028) (xy 102.876298 64.525009) + (xy 102.865805 64.422302) (xy 102.810658 64.25588) (xy 102.810656 64.255875) (xy 102.718615 64.106654) + (xy 102.594645 63.982684) (xy 102.445424 63.890643) (xy 102.445419 63.890641) (xy 102.278997 63.835494) + (xy 102.27899 63.835493) (xy 102.176286 63.825) (xy 102.1138 63.825) (xy 102.1138 64.775) (xy 101.6138 64.775) + (xy 101.6138 63.825) (xy 101.613799 63.824999) (xy 101.551328 63.825) (xy 101.551311 63.825001) + (xy 101.448602 63.835494) (xy 101.28218 63.890641) (xy 101.282175 63.890643) (xy 101.132957 63.982682) + (xy 101.039334 64.076305) (xy 100.97801 64.109789) (xy 100.908319 64.104805) (xy 100.863972 64.076304) + (xy 100.769957 63.982289) (xy 100.769956 63.982288) (xy 100.673166 63.922588) (xy 100.620636 63.890187) + (xy 100.620631 63.890185) (xy 100.597925 63.882661) (xy 100.454097 63.835001) (xy 100.454095 63.835) + (xy 100.351316 63.8245) (xy 100.351309 63.8245) (xy 100.249963 63.8245) (xy 100.182924 63.804815) + (xy 100.137169 63.752011) (xy 100.127225 63.682853) (xy 100.146861 63.631609) (xy 100.19699 63.556585) + (xy 100.19699 63.556584) (xy 100.196994 63.556579) (xy 100.197602 63.555111) (xy 100.257336 63.4109) + (xy 100.257337 63.410897) (xy 100.2881 63.256242) (xy 100.2881 63.098558) (xy 100.2881 63.098555) + (xy 100.288099 63.098553) (xy 100.282429 63.070047) (xy 100.257337 62.943903) (xy 100.238345 62.898052) + (xy 100.196997 62.798227) (xy 100.19699 62.798214) (xy 100.109389 62.667111) (xy 100.109386 62.667107) + (xy 99.997892 62.555613) (xy 99.997888 62.55561) (xy 99.866785 62.468009) (xy 99.866772 62.468002) + (xy 99.721101 62.407664) (xy 99.721089 62.407661) (xy 99.566445 62.3769) (xy 99.566442 62.3769) + (xy 99.408758 62.3769) (xy 99.408755 62.3769) (xy 99.25411 62.407661) (xy 99.254098 62.407664) (xy 99.108427 62.468002) + (xy 99.108414 62.468009) (xy 98.977311 62.55561) (xy 98.977307 62.555613) (xy 98.865813 62.667107) + (xy 98.86581 62.667111) (xy 98.778209 62.798214) (xy 98.778202 62.798227) (xy 98.717864 62.943898) + (xy 98.717861 62.94391) (xy 98.6871 63.098553) (xy 98.6871 63.256246) (xy 98.717861 63.410889) (xy 98.717864 63.4109) + (xy 98.748983 63.486029) (xy 98.756452 63.555498) (xy 98.725176 63.617977) (xy 98.722103 63.621162) + (xy 97.491486 64.851781) (xy 97.430163 64.885266) (xy 97.403805 64.8881) (xy 97.066398 64.8881) + (xy 97.057712 64.885549) (xy 97.048751 64.886838) (xy 97.02471 64.875859) (xy 96.999359 64.868415) + (xy 96.993431 64.861574) (xy 96.985195 64.857813) (xy 96.970905 64.835578) (xy 96.953604 64.815611) + (xy 96.951316 64.805096) (xy 96.947421 64.799035) (xy 96.942398 64.7641) (xy 96.942398 64.754807) + (xy 96.951838 64.707352) (xy 96.9711 64.660853) (xy 96.9711 64.430247) (xy 96.953642 64.3881) (xy 96.950659 64.3809) + (xy 96.941934 64.320194) (xy 96.942399 64.315873) (xy 96.942398 64.291855) (xy 96.96208 64.224818) + (xy 97.014882 64.179062) (xy 97.084041 64.169115) (xy 97.113845 64.177291) (xy 97.125303 64.182037) + (xy 97.249407 64.206723) (xy 97.279953 64.212799) (xy 97.279956 64.2128) (xy 97.279958 64.2128) + (xy 97.437644 64.2128) (xy 97.437645 64.212799) (xy 97.592297 64.182037) (xy 97.737979 64.121694) + (xy 97.869089 64.034089) (xy 97.980589 63.922589) (xy 98.068194 63.791479) (xy 98.072697 63.780609) + (xy 98.092605 63.732546) (xy 98.128537 63.645797) (xy 98.1593 63.491142) (xy 98.1593 63.333458) + (xy 98.1593 63.333455) (xy 98.159299 63.333453) (xy 98.147418 63.273726) (xy 98.128537 63.178803) + (xy 98.119215 63.156297) (xy 98.068197 63.033127) (xy 98.06819 63.033114) (xy 97.980589 62.902011) + (xy 97.980586 62.902007) (xy 97.869092 62.790513) (xy 97.869088 62.79051) (xy 97.737985 62.702909) + (xy 97.737972 62.702902) (xy 97.592301 62.642564) (xy 97.592289 62.642561) (xy 97.437645 62.6118) + (xy 97.437642 62.6118) (xy 97.279958 62.6118) (xy 97.279955 62.6118) (xy 97.12531 62.642561) (xy 97.125298 62.642564) + (xy 96.979627 62.702902) (xy 96.979614 62.702909) (xy 96.848511 62.79051) (xy 96.848507 62.790513) + (xy 96.737013 62.902007) (xy 96.73701 62.902011) (xy 96.649409 63.033114) (xy 96.649407 63.033118) + (xy 96.644668 63.04456) (xy 96.618284 63.108254) (xy 96.574446 63.162656) (xy 96.508152 63.184721) + (xy 96.503725 63.1848) (xy 96.503044 63.1848) (xy 96.424843 63.217192) (xy 96.424844 63.217193) + (xy 96.419431 63.219435) (xy 96.419429 63.219436) (xy 96.212485 63.426381) (xy 96.185557 63.441084) + (xy 96.159739 63.457677) (xy 96.153538 63.458568) (xy 96.151162 63.459866) (xy 96.124804 63.4627) + (xy 95.942994 63.4627) (xy 95.875955 63.443015) (xy 95.8302 63.390211) (xy 95.820256 63.321053) + (xy 95.849281 63.257497) (xy 95.855313 63.251019) (xy 96.63833 62.468002) (xy 97.616602 61.48973) + (xy 97.677923 61.456247) (xy 97.747615 61.461231) (xy 97.773169 61.474309) (xy 97.784822 61.482095) + (xy 97.916913 61.536808) (xy 97.930503 61.542437) (xy 98.06153 61.5685) (xy 98.085153 61.573199) + (xy 98.085156 61.5732) (xy 98.085158 61.5732) (xy 98.242844 61.5732) (xy 98.242845 61.573199) (xy 98.397497 61.542437) + (xy 98.543179 61.482094) (xy 98.674289 61.394489) (xy 98.785789 61.282989) (xy 98.873394 61.151879) + (xy 98.933737 61.006197) (xy 98.9645 60.851542) (xy 98.9645 60.8381) (xy 98.984185 60.771061) (xy 99.036989 60.725306) + (xy 99.0885 60.7141) (xy 99.612708 60.7141) (xy 99.679747 60.733785) (xy 99.725502 60.786589) (xy 99.736066 60.825495) + (xy 99.736301 60.827798) (xy 99.736301 60.827799) (xy 99.791485 60.994331) (xy 99.791487 60.994336) + (xy 99.809476 61.023501) (xy 99.883588 61.143656) (xy 100.007644 61.267712) (xy 100.156966 61.359814) + (xy 100.323503 61.414999) (xy 100.426291 61.4255) (xy 101.476308 61.425499) (xy 101.476316 61.425498) + (xy 101.476319 61.425498) (xy 101.551931 61.417774) (xy 101.579097 61.414999) (xy 101.745634 61.359814) + (xy 101.894956 61.267712) (xy 102.019012 61.143656) (xy 102.111114 60.994334) (xy 102.166299 60.827797) + (xy 102.1768 60.725009) (xy 102.176799 60.124992) (xy 102.17192 60.077234) (xy 102.166299 60.022203) + (xy 102.166298 60.0222) (xy 102.149731 59.972204) (xy 102.111114 59.855666) (xy 102.101201 59.839595) + (xy 102.082762 59.772205) (xy 102.103684 59.705541) (xy 102.157326 59.660771) (xy 102.206741 59.6505) + (xy 104.092274 59.6505) (xy 104.159313 59.670185) (xy 104.205068 59.722989) (xy 104.210203 59.736177) + (xy 104.264416 59.903025) (xy 104.353776 60.078405) (xy 104.469472 60.237646) (xy 104.608654 60.376828) + (xy 104.767895 60.492524) (xy 104.840265 60.529398) (xy 104.94327 60.581882) (xy 104.943272 60.581882) + (xy 104.943275 60.581884) (xy 105.033171 60.611093) (xy 105.130473 60.642709) (xy 105.324878 60.6735) + (xy 105.324883 60.6735) (xy 105.521722 60.6735) (xy 105.716126 60.642709) (xy 105.768763 60.625606) + (xy 105.903325 60.581884) (xy 106.078705 60.492524) (xy 106.237946 60.376828) (xy 106.377128 60.237646) + (xy 106.492824 60.078405) (xy 106.582184 59.903025) (xy 106.643009 59.715826) (xy 106.654428 59.643728) + (xy 106.6738 59.521422) (xy 106.6738 59.324577) (xy 107.9728 59.324577) (xy 107.9728 59.521422) + (xy 108.00359 59.715826) (xy 108.064417 59.903029) (xy 108.14704 60.065185) (xy 108.153776 60.078405) + (xy 108.269472 60.237646) (xy 108.408654 60.376828) (xy 108.567895 60.492524) (xy 108.640265 60.529398) + (xy 108.74327 60.581882) (xy 108.743272 60.581882) (xy 108.743275 60.581884) (xy 108.833171 60.611093) + (xy 108.930473 60.642709) (xy 109.124878 60.6735) (xy 109.124883 60.6735) (xy 109.321722 60.6735) + (xy 109.516126 60.642709) (xy 109.568763 60.625606) (xy 109.703325 60.581884) (xy 109.859636 60.502239) + (xy 109.928304 60.489344) (xy 109.993045 60.51562) (xy 110.003612 60.525045) (xy 110.046429 60.567863) + (xy 110.04643 60.567863) (xy 110.046432 60.567865) (xy 110.130047 60.6025) (xy 113.106416 60.6025) + (xy 113.173455 60.622185) (xy 113.21921 60.674989) (xy 113.229773 60.713897) (xy 113.233982 60.755094) + (xy 113.236301 60.777796) (xy 113.236301 60.777799) (xy 113.291485 60.944331) (xy 113.291487 60.944336) + (xy 113.316464 60.98483) (xy 113.383588 61.093656) (xy 113.507644 61.217712) (xy 113.656966 61.309814) + (xy 113.823503 61.364999) (xy 113.926291 61.3755) (xy 114.976308 61.375499) (xy 114.976316 61.375498) + (xy 114.976319 61.375498) (xy 115.032602 61.369748) (xy 115.079097 61.364999) (xy 115.245634 61.309814) + (xy 115.394956 61.217712) (xy 115.519012 61.093656) (xy 115.611114 60.944334) (xy 115.666299 60.777797) + (xy 115.6768 60.675009) (xy 115.676799 60.074992) (xy 115.676216 60.069289) (xy 115.666299 59.972203) + (xy 115.666298 59.9722) (xy 115.655025 59.938181) (xy 115.611114 59.805666) (xy 115.519012 59.656344) + (xy 115.501545 59.638877) (xy 115.46806 59.577554) (xy 115.473044 59.507862) (xy 115.514916 59.451929) + (xy 115.58038 59.427512) (xy 115.613418 59.429579) (xy 115.693455 59.4455) (xy 115.693458 59.4455) + (xy 115.851144 59.4455) (xy 115.851145 59.445499) (xy 116.005797 59.414737) (xy 116.151479 59.354394) + (xy 116.282589 59.266789) (xy 116.394089 59.155289) (xy 116.481694 59.024179) (xy 116.487923 59.009142) + (xy 116.503281 58.972063) (xy 116.542037 58.878497) (xy 116.5728 58.723842) (xy 116.5728 58.566158) + (xy 116.5728 58.566155) (xy 116.572799 58.566153) (xy 116.569808 58.551118) (xy 116.542037 58.411503) + (xy 116.516562 58.35) (xy 116.481697 58.265827) (xy 116.48169 58.265814) (xy 116.394089 58.134711) + (xy 116.394086 58.134707) (xy 116.282592 58.023213) (xy 116.282588 58.02321) (xy 116.151485 57.935609) + (xy 116.151472 57.935602) (xy 116.005801 57.875264) (xy 116.005789 57.875261) (xy 115.851145 57.8445) + (xy 115.851142 57.8445) (xy 115.693458 57.8445) (xy 115.693453 57.8445) (xy 115.671004 57.848965) + (xy 115.601412 57.842735) (xy 115.546237 57.79987) (xy 115.541278 57.792443) (xy 115.529066 57.772644) + (xy 115.519012 57.756344) (xy 115.394956 57.632288) (xy 115.269499 57.554906) (xy 115.245636 57.540187) + (xy 115.245631 57.540185) (xy 115.201725 57.525636) (xy 115.079097 57.485001) (xy 115.079095 57.485) + (xy 114.97631 57.4745) (xy 113.926298 57.4745) (xy 113.92628 57.474501) (xy 113.823503 57.485) (xy 113.8235 57.485001) + (xy 113.656968 57.540185) (xy 113.656963 57.540187) (xy 113.507642 57.632289) (xy 113.383589 57.756342) + (xy 113.291487 57.905663) (xy 113.291485 57.905668) (xy 113.274917 57.955668) (xy 113.236301 58.072203) + (xy 113.236301 58.072204) (xy 113.2363 58.072204) (xy 113.225801 58.174979) (xy 113.2258 58.174989) + (xy 113.2258 58.775001) (xy 113.225801 58.775019) (xy 113.2363 58.877796) (xy 113.236301 58.877799) + (xy 113.284805 59.024172) (xy 113.291486 59.044334) (xy 113.376727 59.182533) (xy 113.383589 59.193657) + (xy 113.507646 59.317714) (xy 113.510482 59.319463) (xy 113.512017 59.32117) (xy 113.513311 59.322193) + (xy 113.513136 59.322414) (xy 113.557205 59.371411) (xy 113.568426 59.440374) (xy 113.540582 59.504456) + (xy 113.510482 59.530537) (xy 113.507646 59.532285) (xy 113.507645 59.532287) (xy 113.383589 59.656342) + (xy 113.291487 59.805663) (xy 113.291485 59.805668) (xy 113.273511 59.85991) (xy 113.236564 59.971411) + (xy 113.236301 59.972204) (xy 113.2363 59.972205) (xy 113.229773 60.036102) (xy 113.203377 60.100794) + (xy 113.146196 60.140946) (xy 113.106415 60.1475) (xy 110.459968 60.1475) (xy 110.392929 60.127815) + (xy 110.347174 60.075011) (xy 110.33723 60.005853) (xy 110.349483 59.967205) (xy 110.382182 59.903029) + (xy 110.382182 59.903028) (xy 110.382184 59.903025) (xy 110.443009 59.715826) (xy 110.454428 59.643728) + (xy 110.4738 59.521422) (xy 110.4738 59.324577) (xy 110.443009 59.130173) (xy 110.408567 59.024172) + (xy 110.382184 58.942975) (xy 110.382182 58.942972) (xy 110.382182 58.94297) (xy 110.330022 58.8406) + (xy 110.292824 58.767595) (xy 110.177128 58.608354) (xy 110.037946 58.469172) (xy 109.878705 58.353476) + (xy 109.871883 58.35) (xy 109.703329 58.264117) (xy 109.516126 58.20329) (xy 109.321722 58.1725) + (xy 109.321717 58.1725) (xy 109.124883 58.1725) (xy 109.124878 58.1725) (xy 108.930473 58.20329) + (xy 108.74327 58.264117) (xy 108.567894 58.353476) (xy 108.49947 58.40319) (xy 108.408654 58.469172) + (xy 108.408652 58.469174) (xy 108.408651 58.469174) (xy 108.269474 58.608351) (xy 108.269474 58.608352) + (xy 108.269472 58.608354) (xy 108.219785 58.676741) (xy 108.153776 58.767594) (xy 108.064417 58.94297) + (xy 108.00359 59.130173) (xy 107.9728 59.324577) (xy 106.6738 59.324577) (xy 106.643009 59.130173) + (xy 106.608567 59.024172) (xy 106.582184 58.942975) (xy 106.582182 58.942972) (xy 106.582182 58.94297) + (xy 106.530022 58.8406) (xy 106.492824 58.767595) (xy 106.377128 58.608354) (xy 106.237946 58.469172) + (xy 106.078705 58.353476) (xy 106.071883 58.35) (xy 105.903329 58.264117) (xy 105.716126 58.20329) + (xy 105.521722 58.1725) (xy 105.521717 58.1725) (xy 105.324883 58.1725) (xy 105.324878 58.1725) + (xy 105.130473 58.20329) (xy 104.94327 58.264117) (xy 104.767894 58.353476) (xy 104.69947 58.40319) + (xy 104.608654 58.469172) (xy 104.608652 58.469174) (xy 104.608651 58.469174) (xy 104.469474 58.608351) + (xy 104.469474 58.608352) (xy 104.469472 58.608354) (xy 104.419785 58.676741) (xy 104.353776 58.767594) + (xy 104.264418 58.94297) (xy 104.264417 58.942972) (xy 104.264416 58.942975) (xy 104.216492 59.09047) + (xy 104.210205 59.109819) (xy 104.170767 59.167494) (xy 104.106408 59.194692) (xy 104.092274 59.1955) + (xy 102.249311 59.1955) (xy 102.182272 59.175815) (xy 102.136517 59.123011) (xy 102.126573 59.053853) + (xy 102.131605 59.032496) (xy 102.135412 59.021007) (xy 102.166299 58.927797) (xy 102.1768 58.825009) + (xy 102.176799 58.224992) (xy 102.175444 58.211732) (xy 102.166299 58.122203) (xy 102.166298 58.1222) + (xy 102.163287 58.113113) (xy 102.111114 57.955666) (xy 102.019012 57.806344) (xy 101.894956 57.682288) + (xy 101.783473 57.613525) (xy 101.745636 57.590187) (xy 101.745631 57.590185) (xy 101.71819 57.581092) + (xy 101.579097 57.535001) (xy 101.579095 57.535) (xy 101.47631 57.5245) (xy 100.426298 57.5245) + (xy 100.42628 57.524501) (xy 100.323503 57.535) (xy 100.3235 57.535001) (xy 100.156968 57.590185) + (xy 100.156963 57.590187) (xy 100.007642 57.682289) (xy 99.883587 57.806344) (xy 99.842935 57.872252) + (xy 99.790987 57.918976) (xy 99.722024 57.930197) (xy 99.689945 57.921715) (xy 99.577801 57.875264) + (xy 99.577789 57.875261) (xy 99.423145 57.8445) (xy 99.423142 57.8445) (xy 99.265458 57.8445) (xy 99.265455 57.8445) + (xy 99.11081 57.875261) (xy 99.110798 57.875264) (xy 98.965127 57.935602) (xy 98.965114 57.935609) + (xy 98.834011 58.02321) (xy 98.834007 58.023213) (xy 98.722513 58.134707) (xy 98.72251 58.134711) + (xy 98.634909 58.265814) (xy 98.634902 58.265827) (xy 98.574564 58.411498) (xy 98.574561 58.41151) + (xy 98.5438 58.566153) (xy 98.5438 58.723846) (xy 98.574561 58.878489) (xy 98.574564 58.878501) + (xy 98.634902 59.024172) (xy 98.634909 59.024185) (xy 98.72251 59.155288) (xy 98.722513 59.155292) + (xy 98.74449 59.177269) (xy 98.777975 59.238592) (xy 98.772991 59.308284) (xy 98.756741 59.338364) + (xy 98.751156 59.345965) (xy 98.722511 59.374611) (xy 98.646089 59.488982) (xy 98.644451 59.491214) + (xy 98.618785 59.510789) (xy 98.594009 59.531496) (xy 98.590747 59.532175) (xy 98.588896 59.533587) + (xy 98.580853 59.534235) (xy 98.544519 59.5418) (xy 96.751853 59.5418) (xy 96.661347 59.5418) (xy 96.661345 59.5418) + (xy 96.661343 59.541801) (xy 96.577734 59.576431) (xy 96.577732 59.576433) (xy 95.200986 60.953181) + (xy 95.139663 60.986666) (xy 95.113305 60.9895) (xy 94.828897 60.9895) (xy 94.761858 60.969815) + (xy 94.716103 60.917011) (xy 94.706159 60.847853) (xy 94.714336 60.818048) (xy 94.756935 60.715201) + (xy 94.756937 60.715197) (xy 94.7877 60.560542) (xy 94.7877 60.402858) (xy 94.7877 60.402855) (xy 94.787699 60.402853) + (xy 94.780378 60.366047) (xy 94.756937 60.248203) (xy 94.752564 60.237646) (xy 94.696597 60.102527) + (xy 94.69659 60.102514) (xy 94.608989 59.971411) (xy 94.608986 59.971407) (xy 94.497492 59.859913) + (xy 94.497488 59.85991) (xy 94.366385 59.772309) (xy 94.366372 59.772302) (xy 94.257348 59.727144) + (xy 94.202944 59.683304) (xy 94.180879 59.61701) (xy 94.198158 59.54931) (xy 94.239704 59.507044) + (xy 94.344643 59.442317) (xy 94.468615 59.318345) (xy 94.560656 59.169124) (xy 94.560658 59.169119) + (xy 94.615805 59.002697) (xy 94.615806 59.00269) (xy 94.626299 58.899986) (xy 94.6263 58.899973) + (xy 94.6263 58.85) (xy 93.6513 58.85) (xy 93.6513 59.617361) (xy 93.6639 59.640437) (xy 93.658916 59.710129) + (xy 93.617044 59.766062) (xy 93.611625 59.769897) (xy 93.476911 59.85991) (xy 93.476907 59.859913) + (xy 93.365413 59.971407) (xy 93.36541 59.971411) (xy 93.277809 60.102514) (xy 93.277802 60.102527) + (xy 93.217464 60.248198) (xy 93.217461 60.24821) (xy 93.1867 60.402853) (xy 93.1867 60.560546) (xy 93.217461 60.715189) + (xy 93.217464 60.715201) (xy 93.248583 60.790329) (xy 93.250719 60.8102) (xy 93.257705 60.828924) + (xy 93.254377 60.844226) (xy 93.256052 60.859798) (xy 93.247106 60.877668) (xy 93.24286 60.897198) + (xy 93.226163 60.919505) (xy 93.224776 60.922277) (xy 93.221711 60.925454) (xy 93.216139 60.931027) + (xy 93.162336 60.98483) (xy 93.101013 61.018315) (xy 93.061405 61.020439) (xy 93.045239 61.018701) + (xy 92.9974 61.018701) (xy 92.980294 61.035806) (xy 92.977715 61.044592) (xy 92.973817 61.048778) + (xy 92.972667 61.051863) (xy 92.94771 61.07682) (xy 92.91931 61.09808) (xy 92.853846 61.122497) + (xy 92.785573 61.107645) (xy 92.77069 61.09808) (xy 92.74229 61.07682) (xy 92.717191 61.043292) + (xy 92.6926 61.018701) (xy 92.644767 61.018701) (xy 92.6106 61.022374) (xy 92.584093 61.022374) + (xy 92.545274 61.018201) (xy 92.144731 61.018201) (xy 92.14472 61.018202) (xy 92.108253 61.022122) + (xy 92.081749 61.022122) (xy 92.045273 61.018201) (xy 91.644729 61.018201) (xy 91.644718 61.018202) + (xy 91.608253 61.022122) (xy 91.581748 61.022122) (xy 91.545274 61.018201) (xy 91.14473 61.018201) + (xy 91.144719 61.018202) (xy 91.108254 61.022122) (xy 91.081749 61.022122) (xy 91.045275 61.018201) + (xy 90.644731 61.018201) (xy 90.64472 61.018202) (xy 90.608254 61.022122) (xy 90.58175 61.022122) + (xy 90.545277 61.018201) (xy 90.334108 61.018201) (xy 90.267069 60.998516) (xy 90.221314 60.945712) + (xy 90.21137 60.876554) (xy 90.219547 60.846749) (xy 90.242917 60.790329) (xy 90.274037 60.715197) + (xy 90.3048 60.560542) (xy 90.3048 60.402858) (xy 90.3048 60.402855) (xy 90.304799 60.402853) (xy 90.297478 60.366047) + (xy 90.274037 60.248203) (xy 90.269664 60.237646) (xy 90.213697 60.102527) (xy 90.21369 60.102514) + (xy 90.126089 59.971411) (xy 90.126086 59.971407) (xy 90.014589 59.85991) (xy 89.966234 59.827601) + (xy 89.921429 59.773989) (xy 89.912722 59.704664) (xy 89.942876 59.641637) (xy 90.002319 59.604917) + (xy 90.035122 59.600499) (xy 90.376308 59.600499) (xy 90.376316 59.600498) (xy 90.376319 59.600498) + (xy 90.45245 59.592721) (xy 90.479097 59.589999) (xy 90.645634 59.534814) (xy 90.794956 59.442712) + (xy 90.919012 59.318656) (xy 91.011114 59.169334) (xy 91.066299 59.002797) (xy 91.0768 58.900009) + (xy 91.0768 58.899986) (xy 92.176301 58.899986) (xy 92.186794 59.002697) (xy 92.241941 59.169119) + (xy 92.241943 59.169124) (xy 92.333984 59.318345) (xy 92.457954 59.442315) (xy 92.607175 59.534356) + (xy 92.60718 59.534358) (xy 92.773602 59.589505) (xy 92.773609 59.589506) (xy 92.876319 59.599999) + (xy 93.151299 59.599999) (xy 93.1513 59.599998) (xy 93.1513 58.85) (xy 92.176301 58.85) (xy 92.176301 58.899986) + (xy 91.0768 58.899986) (xy 91.076799 58.5906) (xy 91.076799 58.299998) (xy 91.076798 58.29998) (xy 91.066299 58.197203) + (xy 91.066298 58.1972) (xy 91.049905 58.14773) (xy 91.011114 58.030666) (xy 90.919012 57.881344) + (xy 90.794956 57.757288) (xy 90.792119 57.755538) (xy 90.790583 57.75383) (xy 90.789289 57.752807) + (xy 90.789463 57.752585) (xy 90.745396 57.703594) (xy 90.734172 57.634632) (xy 90.762013 57.570549) + (xy 90.792117 57.544462) (xy 90.794956 57.542712) (xy 90.919012 57.418656) (xy 91.011114 57.269334) + (xy 91.066299 57.102797) (xy 91.0768 57.000009) (xy 91.076799 56.399992) (xy 91.076798 56.399983) + (xy 92.1758 56.399983) (xy 92.1758 57.000001) (xy 92.175801 57.000019) (xy 92.1863 57.102796) (xy 92.186301 57.102799) + (xy 92.241485 57.269331) (xy 92.241487 57.269336) (xy 92.261229 57.301343) (xy 92.333588 57.418656) + (xy 92.457644 57.542712) (xy 92.460476 57.544459) (xy 92.460953 57.544753) (xy 92.462745 57.546746) + (xy 92.463311 57.547193) (xy 92.463234 57.547289) (xy 92.507679 57.596699) (xy 92.518903 57.665661) + (xy 92.491061 57.729744) (xy 92.460965 57.755826) (xy 92.45796 57.757679) (xy 92.457955 57.757683) + (xy 92.333984 57.881654) (xy 92.241943 58.030875) (xy 92.241941 58.03088) (xy 92.186794 58.197302) + (xy 92.186793 58.197309) (xy 92.1763 58.300013) (xy 92.1763 58.35) (xy 94.626299 58.35) (xy 94.626299 58.300028) + (xy 94.626298 58.300013) (xy 94.615805 58.197302) (xy 94.560658 58.03088) (xy 94.557604 58.02433) + (xy 94.560173 58.023131) (xy 94.54514 57.968276) (xy 94.566036 57.901604) (xy 94.61966 57.856813) + (xy 94.688988 57.848124) (xy 94.693312 57.848905) (xy 94.724455 57.8551) (xy 94.724458 57.8551) + (xy 94.882144 57.8551) (xy 94.882145 57.855099) (xy 95.036797 57.824337) (xy 95.182479 57.763994) + (xy 95.313589 57.676389) (xy 95.425089 57.564889) (xy 95.512694 57.433779) (xy 95.573037 57.288097) + (xy 95.6038 57.133442) (xy 95.6038 56.975758) (xy 95.6038 56.975755) (xy 95.603799 56.975753) (xy 95.573038 56.82111) + (xy 95.573037 56.821103) (xy 95.571976 56.818541) (xy 95.512697 56.675427) (xy 95.51269 56.675414) + (xy 95.425089 56.544311) (xy 95.425086 56.544307) (xy 95.313592 56.432813) (xy 95.313588 56.43281) + (xy 95.182485 56.345209) (xy 95.182472 56.345202) (xy 95.036801 56.284864) (xy 95.036789 56.284861) + (xy 94.882145 56.2541) (xy 94.882142 56.2541) (xy 94.724458 56.2541) (xy 94.724457 56.2541) (xy 94.717019 56.255579) + (xy 94.647428 56.249347) (xy 94.592253 56.206481) (xy 94.575129 56.172962) (xy 94.561116 56.130672) + (xy 94.561115 56.130671) (xy 94.561114 56.130666) (xy 94.469012 55.981344) (xy 94.344956 55.857288) + (xy 94.195634 55.765186) (xy 94.029097 55.710001) (xy 94.029095 55.71) (xy 93.92631 55.6995) (xy 92.876298 55.6995) + (xy 92.87628 55.699501) (xy 92.773503 55.71) (xy 92.7735 55.710001) (xy 92.606968 55.765185) (xy 92.606963 55.765187) + (xy 92.457642 55.857289) (xy 92.333589 55.981342) (xy 92.241487 56.130663) (xy 92.241486 56.130666) + (xy 92.186301 56.297203) (xy 92.186301 56.297204) (xy 92.1863 56.297204) (xy 92.1758 56.399983) + (xy 91.076798 56.399983) (xy 91.076349 56.395591) (xy 91.066299 56.297203) (xy 91.066298 56.2972) + (xy 91.050441 56.249347) (xy 91.011114 56.130666) (xy 90.919012 55.981344) (xy 90.794956 55.857288) + (xy 90.645634 55.765186) (xy 90.479097 55.710001) (xy 90.479095 55.71) (xy 90.37631 55.6995) (xy 89.326298 55.6995) + (xy 89.32628 55.699501) (xy 89.223503 55.71) (xy 89.2235 55.710001) (xy 89.056968 55.765185) (xy 89.056963 55.765187) + (xy 88.907642 55.857289) (xy 88.783589 55.981342) (xy 88.75348 56.030156) (xy 88.701531 56.076879) + (xy 88.632568 56.0881) (xy 88.600492 56.079619) (xy 88.559797 56.062763) (xy 88.559793 56.062762) + (xy 88.559788 56.06276) (xy 88.405145 56.032) (xy 88.405142 56.032) (xy 88.247458 56.032) (xy 88.247455 56.032) + (xy 88.092805 56.062761) (xy 88.092802 56.062763) (xy 88.052107 56.079619) (xy 87.982638 56.087087) + (xy 87.920159 56.055811) (xy 87.899119 56.030155) (xy 87.869012 55.981344) (xy 87.744956 55.857288) + (xy 87.595634 55.765186) (xy 87.429097 55.710001) (xy 87.429095 55.71) (xy 87.32631 55.6995) (xy 86.276298 55.6995) + (xy 86.27628 55.699501) (xy 86.173503 55.71) (xy 86.1735 55.710001) (xy 86.006968 55.765185) (xy 86.006963 55.765187) + (xy 85.857642 55.857289) (xy 85.733589 55.981342) (xy 85.641487 56.130663) (xy 85.641486 56.130666) + (xy 85.586301 56.297203) (xy 85.586301 56.297204) (xy 85.5863 56.297204) (xy 85.5758 56.399983) + (xy 85.5758 57.000001) (xy 85.575801 57.000019) (xy 85.5863 57.102796) (xy 85.586301 57.102799) + (xy 85.641485 57.269331) (xy 85.641487 57.269336) (xy 85.661229 57.301343) (xy 85.733588 57.418656) + (xy 85.857644 57.542712) (xy 85.860476 57.544459) (xy 85.860953 57.544753) (xy 85.862745 57.546746) + (xy 85.863311 57.547193) (xy 85.863234 57.547289) (xy 85.907679 57.596699) (xy 85.918903 57.665661) + (xy 85.891061 57.729744) (xy 85.860965 57.755826) (xy 85.85796 57.757679) (xy 85.857955 57.757683) + (xy 85.733984 57.881654) (xy 85.641943 58.030875) (xy 85.641941 58.03088) (xy 85.586794 58.197302) + (xy 85.586793 58.197309) (xy 85.5763 58.300013) (xy 85.5763 58.35) (xy 88.026299 58.35) (xy 88.026299 58.300028) + (xy 88.026298 58.300013) (xy 88.015805 58.197302) (xy 87.960658 58.03088) (xy 87.960656 58.030875) + (xy 87.868615 57.881654) (xy 87.744644 57.757683) (xy 87.744641 57.757681) (xy 87.741639 57.755829) + (xy 87.740013 57.754021) (xy 87.738977 57.753202) (xy 87.739117 57.753024) (xy 87.722395 57.734432) + (xy 87.701049 57.715141) (xy 87.699324 57.70878) (xy 87.694917 57.70388) (xy 87.690296 57.675477) + (xy 87.682767 57.647706) (xy 87.684755 57.641422) (xy 87.683697 57.634917) (xy 87.695164 57.608527) + (xy 87.703846 57.581092) (xy 87.709411 57.575742) (xy 87.711543 57.570836) (xy 87.72751 57.554906) + (xy 87.734213 57.549338) (xy 87.744956 57.542712) (xy 87.758515 57.529152) (xy 87.762915 57.525498) + (xy 87.789947 57.513828) (xy 87.815783 57.49972) (xy 87.821656 57.500139) (xy 87.827063 57.497806) + (xy 87.85611 57.502602) (xy 87.885475 57.504702) (xy 87.893409 57.508762) (xy 87.895999 57.50919) + (xy 87.898289 57.511259) (xy 87.911036 57.517783) (xy 87.944249 57.539975) (xy 87.947121 57.541894) + (xy 87.947123 57.541895) (xy 87.947127 57.541897) (xy 88.079433 57.596699) (xy 88.092803 57.602237) + (xy 88.243879 57.632288) (xy 88.247453 57.632999) (xy 88.247456 57.633) (xy 88.247458 57.633) (xy 88.405144 57.633) + (xy 88.405145 57.632999) (xy 88.559797 57.602237) (xy 88.705479 57.541894) (xy 88.741565 57.517781) + (xy 88.766708 57.509908) (xy 88.790464 57.498506) (xy 88.799524 57.499632) (xy 88.808238 57.496904) + (xy 88.833652 57.503875) (xy 88.8598 57.507126) (xy 88.869461 57.513697) (xy 88.875619 57.515387) + (xy 88.889851 57.525636) (xy 88.894159 57.529227) (xy 88.907644 57.542712) (xy 88.917996 57.549097) + (xy 88.92478 57.554752) (xy 88.939511 57.576738) (xy 88.957205 57.596411) (xy 88.958652 57.605306) + (xy 88.963671 57.612797) (xy 88.964176 57.639258) (xy 88.968426 57.665374) (xy 88.964833 57.673641) + (xy 88.965006 57.682654) (xy 88.951128 57.705183) (xy 88.940582 57.729456) (xy 88.931135 57.737641) + (xy 88.928362 57.742144) (xy 88.922929 57.744751) (xy 88.910482 57.755537) (xy 88.907646 57.757285) + (xy 88.783589 57.881342) (xy 88.691487 58.030663) (xy 88.691485 58.030668) (xy 88.677467 58.072972) + (xy 88.636301 58.197203) (xy 88.636301 58.197204) (xy 88.6363 58.197204) (xy 88.6258 58.299983) + (xy 88.6258 58.757404) (xy 88.606115 58.824443) (xy 88.589481 58.845085) (xy 88.179566 59.254999) + (xy 88.118243 59.288484) (xy 88.048551 59.2835) (xy 87.992618 59.241628) (xy 87.968201 59.176164) + (xy 87.974179 59.128313) (xy 88.015805 59.002694) (xy 88.015806 59.00269) (xy 88.026299 58.899986) + (xy 88.0263 58.899973) (xy 88.0263 58.85) (xy 87.0513 58.85) (xy 87.0513 59.599999) (xy 87.326272 59.599999) + (xy 87.326286 59.599998) (xy 87.428995 59.589506) (xy 87.554613 59.547879) (xy 87.624441 59.545477) + (xy 87.684483 59.581208) (xy 87.715676 59.643728) (xy 87.708117 59.713188) (xy 87.681299 59.753266) + (xy 87.332053 60.102514) (xy 87.216132 60.218435) (xy 87.152135 60.282432) (xy 87.141215 60.308796) + (xy 87.1175 60.366046) (xy 87.1175 60.894201) (xy 87.097815 60.96124) (xy 87.045011 61.006995) (xy 86.9935 61.018201) + (xy 86.64473 61.018201) (xy 86.644715 61.018202) (xy 86.620558 61.020799) (xy 86.620553 61.0208) + (xy 86.585116 61.02461) (xy 86.450268 61.074905) (xy 86.432767 61.088005) (xy 86.432764 61.088007) + (xy 86.390912 61.119339) (xy 86.325448 61.143757) (xy 86.257174 61.128906) (xy 86.207769 61.079501) + (xy 86.1926 61.020073) (xy 86.1926 61.018701) (xy 86.144755 61.018701) (xy 86.085227 61.025102) + (xy 86.08522 61.025104) (xy 85.950513 61.075346) (xy 85.950506 61.07535) (xy 85.835412 61.16151) + (xy 85.835409 61.161513) (xy 85.749249 61.276607) (xy 85.749245 61.276614) (xy 85.699003 61.411321) + (xy 85.699001 61.411328) (xy 85.6926 61.470856) (xy 85.6926 61.963201) (xy 86.068099 61.963201) + (xy 86.076784 61.965751) (xy 86.085744 61.964463) (xy 86.109783 61.97544) (xy 86.135138 61.982886) + (xy 86.141065 61.989726) (xy 86.1493 61.993487) (xy 86.163589 62.015721) (xy 86.180893 62.03569) + (xy 86.183179 62.046201) (xy 86.187076 62.052264) (xy 86.192099 62.087199) (xy 86.1921 62.143999) + (xy 86.172417 62.211039) (xy 86.119613 62.256794) (xy 86.0681 62.268001) (xy 85.6926 62.268001) + (xy 85.6926 62.636495) (xy 85.672915 62.703534) (xy 85.620111 62.749289) (xy 85.550953 62.759233) + (xy 85.510155 62.745857) (xy 85.505385 62.743308) (xy 85.359701 62.682964) (xy 85.359689 62.682961) + (xy 85.205045 62.6522) (xy 85.205042 62.6522) (xy 85.047358 62.6522) (xy 85.047355 62.6522) (xy 84.89271 62.682961) + (xy 84.892698 62.682964) (xy 84.747027 62.743302) (xy 84.747014 62.743309) (xy 84.615911 62.83091) + (xy 84.615907 62.830913) (xy 84.504413 62.942407) (xy 84.50441 62.942411) (xy 84.416809 63.073514) + (xy 84.416802 63.073527) (xy 84.356464 63.219198) (xy 84.356461 63.219208) (xy 84.32788 63.362892) + (xy 84.295495 63.424803) (xy 84.234779 63.459377) (xy 84.206263 63.4627) (xy 83.70023 63.4627) (xy 83.700224 63.462701) + (xy 83.640617 63.469108) (xy 83.505772 63.519402) (xy 83.505765 63.519406) (xy 83.390556 63.605652) + (xy 83.390553 63.605655) (xy 83.304307 63.720864) (xy 83.304303 63.720871) (xy 83.254011 63.855713) + (xy 83.25401 63.855717) (xy 83.247601 63.915327) (xy 83.247601 63.915334) (xy 83.247601 63.915335) + (xy 83.247601 64.315869) (xy 83.247602 64.315878) (xy 83.251522 64.352344) (xy 83.251522 64.378849) + (xy 83.247601 64.415321) (xy 83.247601 64.415326) (xy 83.247601 64.5911) (xy 83.247602 64.7641) + (xy 83.227918 64.831139) (xy 83.175114 64.876894) (xy 83.123602 64.8881) (xy 82.764451 64.8881) + (xy 82.697412 64.868415) (xy 82.651657 64.815611) (xy 82.64989 64.811552) (xy 82.601997 64.695927) + (xy 82.60199 64.695914) (xy 82.514389 64.564811) (xy 82.514386 64.564807) (xy 82.402892 64.453313) + (xy 82.402888 64.45331) (xy 82.271785 64.365709) (xy 82.271772 64.365702) (xy 82.126101 64.305364) + (xy 82.126089 64.305361) (xy 81.971445 64.2746) (xy 81.971442 64.2746) (xy 81.813758 64.2746) (xy 81.813755 64.2746) + (xy 81.65911 64.305361) (xy 81.659098 64.305364) (xy 81.513427 64.365702) (xy 81.513414 64.365709) + (xy 81.382311 64.45331) (xy 81.382307 64.453313) (xy 81.270813 64.564807) (xy 81.27081 64.564811) + (xy 81.183209 64.695914) (xy 81.183202 64.695927) (xy 81.122864 64.841598) (xy 81.122861 64.84161) + (xy 81.0921 64.996253) (xy 81.0921 65.153946) (xy 81.122861 65.308589) (xy 81.122864 65.308601) + (xy 81.183202 65.454272) (xy 81.183209 65.454285) (xy 81.27081 65.585388) (xy 81.270813 65.585392) + (xy 81.382307 65.696886) (xy 81.382311 65.696889) (xy 81.513414 65.78449) (xy 81.513427 65.784497) + (xy 81.632522 65.833827) (xy 81.659103 65.844837) (xy 81.696119 65.8522) (xy 81.777478 65.868384) + (xy 81.839389 65.900769) (xy 81.868397 65.948198) (xy 81.869432 65.94777) (xy 81.932102 66.099072) + (xy 81.932109 66.099085) (xy 82.01971 66.230188) (xy 82.019713 66.230192) (xy 82.131207 66.341686) + (xy 82.131211 66.341689) (xy 82.262314 66.42929) (xy 82.262327 66.429297) (xy 82.32333 66.454565) + (xy 82.377734 66.498406) (xy 82.399799 66.5647) (xy 82.38252 66.632399) (xy 82.378981 66.638015) + (xy 82.361611 66.664011) (xy 82.361602 66.664027) (xy 82.301264 66.809698) (xy 82.301261 66.80971) + (xy 82.2705 66.964353) (xy 82.2705 67.122046) (xy 82.301261 67.276689) (xy 82.301264 67.276701) + (xy 82.361602 67.422372) (xy 82.361609 67.422385) (xy 82.410135 67.495009) (xy 82.431013 67.561687) + (xy 82.412528 67.629067) (xy 82.360549 67.675757) (xy 82.307033 67.6879) (xy 81.711444 67.6879) + (xy 81.632205 67.720722) (xy 81.632206 67.720723) (xy 81.627831 67.722535) (xy 81.62783 67.722535) + (xy 81.351914 67.998453) (xy 81.260332 68.090035) (xy 81.196335 68.154032) (xy 81.187759 68.174736) + (xy 81.1617 68.237646) (xy 81.1617 68.418033) (xy 81.142015 68.485072) (xy 81.106591 68.521135) + (xy 81.00351 68.59001) (xy 80.892013 68.701507) (xy 80.89201 68.701511) (xy 80.804409 68.832614) + (xy 80.804402 68.832627) (xy 80.774185 68.90558) (xy 80.730344 68.959984) (xy 80.66405 68.982049) + (xy 80.596351 68.96477) (xy 80.571943 68.945809) (xy 77.82524 66.199106) (xy 77.791755 66.137783) + (xy 77.791687 66.094041) (xy 77.790611 66.093932) (xy 77.801799 65.984416) (xy 77.8018 65.984409) + (xy 77.801799 64.984392) (xy 77.798459 64.9517) (xy 77.791299 64.881603) (xy 77.791298 64.8816) + (xy 77.781417 64.851781) (xy 77.736114 64.715066) (xy 77.644012 64.565744) (xy 77.519956 64.441688) + (xy 77.396769 64.365706) (xy 77.370636 64.349587) (xy 77.370631 64.349585) (xy 77.369162 64.349098) + (xy 77.204097 64.294401) (xy 77.204095 64.2944) (xy 77.10131 64.2839) (xy 76.476298 64.2839) (xy 76.47628 64.283901) + (xy 76.373503 64.2944) (xy 76.3735 64.294401) (xy 76.206968 64.349585) (xy 76.206963 64.349587) + (xy 76.057642 64.441689) (xy 75.963981 64.535351) (xy 75.902658 64.568836) (xy 75.832966 64.563852) + (xy 75.788619 64.535351) (xy 75.694957 64.441689) (xy 75.694956 64.441688) (xy 75.571769 64.365706) + (xy 75.545636 64.349587) (xy 75.545631 64.349585) (xy 75.544162 64.349098) (xy 75.379097 64.294401) + (xy 75.379095 64.2944) (xy 75.27631 64.2839) (xy 74.651298 64.2839) (xy 74.65128 64.283901) (xy 74.548503 64.2944) + (xy 74.5485 64.294401) (xy 74.381968 64.349585) (xy 74.381963 64.349587) (xy 74.232642 64.441689) + (xy 74.108589 64.565742) (xy 74.016487 64.715063) (xy 74.016485 64.715068) (xy 73.964515 64.871903) + (xy 73.924742 64.929348) (xy 73.860226 64.956171) (xy 73.846809 64.956899) (xy 73.844354 64.956899) + (xy 73.721485 64.989822) (xy 73.710188 64.992849) (xy 73.589911 65.062292) (xy 73.589905 65.062296) + (xy 73.066022 65.586181) (xy 73.004699 65.619666) (xy 72.978341 65.6225) (xy 66.69036 65.6225) (xy 66.623321 65.602815) + (xy 66.602679 65.586181) (xy 65.824419 64.807921) (xy 65.790934 64.746598) (xy 65.7881 64.72024) + (xy 65.7881 63.999499) (xy 65.807785 63.93246) (xy 65.860589 63.886705) (xy 65.9121 63.875499) (xy 66.708471 63.875499) + (xy 66.708472 63.875499) (xy 66.768083 63.869091) (xy 66.902931 63.818796) (xy 67.018146 63.732546) + (xy 67.018151 63.732538) (xy 67.024054 63.726637) (xy 67.085376 63.69315) (xy 67.135928 63.692698) + (xy 67.176658 63.7008) (xy 67.176659 63.7008) (xy 67.334344 63.7008) (xy 67.334345 63.700799) (xy 67.488997 63.670037) + (xy 67.497986 63.666313) (xy 67.56745 63.658841) (xy 67.626754 63.688521) (xy 67.626981 63.688234) + (xy 67.628361 63.689325) (xy 67.629931 63.690111) (xy 67.632547 63.692635) (xy 67.632641 63.692709) + (xy 67.632644 63.692712) (xy 67.781966 63.784814) (xy 67.948503 63.839999) (xy 68.051291 63.8505) + (xy 69.051308 63.850499) (xy 69.051316 63.850498) (xy 69.051319 63.850498) (xy 69.107602 63.844748) + (xy 69.154097 63.839999) (xy 69.320634 63.784814) (xy 69.469956 63.692712) (xy 69.594012 63.568656) + (xy 69.686114 63.419334) (xy 69.741299 63.252797) (xy 69.7518 63.150009) (xy 69.751799 62.524992) + (xy 69.745977 62.468002) (xy 69.741299 62.422203) (xy 69.741298 62.4222) (xy 69.700569 62.299289) + (xy 69.686114 62.255666) (xy 69.594012 62.106344) (xy 69.500349 62.012681) (xy 69.466864 61.951358) + (xy 69.471848 61.881666) (xy 69.500349 61.837319) (xy 69.54652 61.791148) (xy 69.594012 61.743656) + (xy 69.686114 61.594334) (xy 69.741299 61.427797) (xy 69.7518 61.325009) (xy 69.751799 60.699992) + (xy 69.748478 60.667486) (xy 69.741299 60.597203) (xy 69.741298 60.5972) (xy 69.739192 60.590844) + (xy 69.686114 60.430666) (xy 69.594012 60.281344) (xy 69.469956 60.157288) (xy 69.335736 60.074501) + (xy 69.320636 60.065187) (xy 69.320631 60.065185) (xy 69.319162 60.064698) (xy 69.154097 60.010001) + (xy 69.154095 60.01) (xy 69.05131 59.9995) (xy 68.051298 59.9995) (xy 68.05128 59.999501) (xy 67.948503 60.01) + (xy 67.9485 60.010001) (xy 67.781968 60.065185) (xy 67.781963 60.065187) (xy 67.632642 60.157289) + (xy 67.508589 60.281342) (xy 67.416487 60.430663) (xy 67.416486 60.430666) (xy 67.402804 60.471955) + (xy 67.363032 60.529398) (xy 67.298516 60.556221) (xy 67.22974 60.543906) (xy 67.17854 60.496362) + (xy 67.161099 60.432949) (xy 67.161099 60.427129) (xy 67.161098 60.427123) (xy 67.160857 60.424885) + (xy 67.154691 60.367517) (xy 67.154142 60.366046) (xy 67.104397 60.232671) (xy 67.104393 60.232664) + (xy 67.018147 60.117455) (xy 67.018144 60.117452) (xy 66.902935 60.031206) (xy 66.902928 60.031202) + (xy 66.768082 59.980908) (xy 66.768083 59.980908) (xy 66.708483 59.974501) (xy 66.708481 59.9745) + (xy 66.708473 59.9745) (xy 66.708465 59.9745) (xy 64.916038 59.9745) (xy 64.848999 59.954815) (xy 64.828357 59.938181) + (xy 64.423093 59.532917) (xy 64.423091 59.532915) (xy 64.350864 59.491214) (xy 64.32561 59.476633) + (xy 64.262838 59.459814) (xy 64.216881 59.4475) (xy 64.21688 59.4475) (xy 62.608203 59.4475) (xy 62.541164 59.427815) + (xy 62.495409 59.375011) (xy 62.485465 59.305853) (xy 62.493642 59.276048) (xy 62.535159 59.175815) + (xy 62.540137 59.163797) (xy 62.5709 59.009142) (xy 62.5709 58.899986) (xy 85.576301 58.899986) + (xy 85.586794 59.002697) (xy 85.641941 59.169119) (xy 85.641943 59.169124) (xy 85.733984 59.318345) + (xy 85.857954 59.442315) (xy 86.007175 59.534356) (xy 86.00718 59.534358) (xy 86.173602 59.589505) + (xy 86.173609 59.589506) (xy 86.276319 59.599999) (xy 86.551299 59.599999) (xy 86.5513 59.599998) + (xy 86.5513 58.85) (xy 85.576301 58.85) (xy 85.576301 58.899986) (xy 62.5709 58.899986) (xy 62.5709 58.851458) + (xy 62.5709 58.851455) (xy 62.570899 58.851453) (xy 62.565206 58.822829) (xy 62.540138 58.696808) + (xy 62.540137 58.696807) (xy 62.540137 58.696803) (xy 62.523585 58.656843) (xy 62.479797 58.551127) + (xy 62.47979 58.551114) (xy 62.392189 58.420011) (xy 62.392186 58.420007) (xy 62.280692 58.308513) + (xy 62.280688 58.30851) (xy 62.149585 58.220909) (xy 62.149572 58.220902) (xy 62.003901 58.160564) + (xy 62.003889 58.160561) (xy 61.849245 58.1298) (xy 61.849242 58.1298) (xy 61.691558 58.1298) (xy 61.691555 58.1298) + (xy 61.53691 58.160561) (xy 61.536898 58.160564) (xy 61.391227 58.220902) (xy 61.391214 58.220909) + (xy 61.260111 58.30851) (xy 61.260107 58.308513) (xy 61.148613 58.420007) (xy 61.14861 58.420011) + (xy 61.061009 58.551114) (xy 61.061007 58.551118) (xy 61.055128 58.56531) (xy 61.029884 58.626254) + (xy 60.986046 58.680656) (xy 60.919752 58.702721) (xy 60.915325 58.7028) (xy 57.550746 58.7028) + (xy 57.46713 58.737436) (xy 56.119106 60.085459) (xy 56.057783 60.118944) (xy 55.996831 60.116855) + (xy 55.888763 60.085459) (xy 55.860456 60.077235) (xy 55.860454 60.077234) (xy 55.86045 60.077234) + (xy 55.830212 60.074854) (xy 55.825705 60.0745) (xy 55.825704 60.0745) (xy 55.476906 60.0745) (xy 55.476884 60.074501) + (xy 55.442147 60.077234) (xy 55.40725 60.087372) (xy 55.293413 60.120445) (xy 55.293411 60.120445) + (xy 55.293411 60.120446) (xy 55.160105 60.199282) (xy 55.160096 60.199289) (xy 55.050589 60.308796) + (xy 55.050582 60.308805) (xy 54.971746 60.442111) (xy 54.971745 60.442113) (xy 54.938672 60.55595) + (xy 54.928534 60.590847) (xy 54.928534 60.590849) (xy 54.9258 60.625589) (xy 54.9258 61.124393) + (xy 54.925801 61.124415) (xy 54.928534 61.159152) (xy 54.928534 61.159155) (xy 54.928535 61.159156) + (xy 54.971745 61.307887) (xy 54.981871 61.325009) (xy 55.050582 61.441194) (xy 55.050589 61.441203) + (xy 55.160096 61.55071) (xy 55.160105 61.550717) (xy 55.188964 61.567784) (xy 55.293413 61.629555) + (xy 55.442144 61.672765) (xy 55.476895 61.6755) (xy 55.825704 61.675499) (xy 55.860456 61.672765) + (xy 56.009187 61.629555) (xy 56.142498 61.550715) (xy 56.252015 61.441198) (xy 56.330855 61.307887) + (xy 56.374065 61.159156) (xy 56.3768 61.124405) (xy 56.376799 60.625596) (xy 56.374065 60.590844) + (xy 56.368213 60.570701) (xy 56.36841 60.500834) (xy 56.399605 60.448426) (xy 57.653914 59.194119) + (xy 57.715237 59.160634) (xy 57.741595 59.1578) (xy 57.998459 59.1578) (xy 58.065498 59.177485) + (xy 58.111253 59.230289) (xy 58.121197 59.299447) (xy 58.092172 59.363003) (xy 58.08614 59.369481) + (xy 57.994013 59.461607) (xy 57.99401 59.461611) (xy 57.906409 59.592714) (xy 57.906402 59.592727) + (xy 57.846064 59.738398) (xy 57.846061 59.73841) (xy 57.8153 59.893053) (xy 57.8153 59.898325) (xy 57.795615 59.965364) + (xy 57.742811 60.011119) (xy 57.730305 60.016031) (xy 57.581966 60.065186) (xy 57.581963 60.065187) + (xy 57.432642 60.157289) (xy 57.308589 60.281342) (xy 57.216487 60.430663) (xy 57.216485 60.430668) + (xy 57.195988 60.492524) (xy 57.161301 60.597203) (xy 57.161301 60.597204) (xy 57.1613 60.597204) + (xy 57.1508 60.699983) (xy 57.1508 61.325001) (xy 57.150801 61.325019) (xy 57.1613 61.427796) (xy 57.161301 61.427799) + (xy 57.216485 61.594331) (xy 57.216487 61.594336) (xy 57.23419 61.623037) (xy 57.293962 61.719944) + (xy 57.308589 61.743657) (xy 57.402251 61.837319) (xy 57.435736 61.898642) (xy 57.430752 61.968334) + (xy 57.402251 62.012681) (xy 57.308589 62.106342) (xy 57.216487 62.255663) (xy 57.216485 62.255668) + (xy 57.21031 62.274303) (xy 57.161301 62.422203) (xy 57.161301 62.422204) (xy 57.1613 62.422204) + (xy 57.1508 62.524983) (xy 57.1508 63.150001) (xy 57.150801 63.150019) (xy 57.1613 63.252796) (xy 57.161301 63.252799) + (xy 57.216485 63.419331) (xy 57.216487 63.419336) (xy 57.236238 63.451358) (xy 57.300233 63.555111) + (xy 57.308589 63.568657) (xy 57.432643 63.692711) (xy 57.432647 63.692714) (xy 57.485275 63.725176) + (xy 57.504147 63.746158) (xy 57.525259 63.764882) (xy 57.5272 63.771788) (xy 57.532 63.777124) (xy 57.536532 63.804976) + (xy 57.54417 63.832143) (xy 57.542376 63.840895) (xy 57.543221 63.846086) (xy 57.538745 63.867018) + (xy 57.53701 63.872683) (xy 57.518363 63.917703) (xy 57.509346 63.96303) (xy 57.507515 63.969013) + (xy 57.49159 63.993174) (xy 57.478179 64.018813) (xy 57.472598 64.02199) (xy 57.469065 64.027352) + (xy 57.442609 64.039066) (xy 57.417463 64.053386) (xy 57.41105 64.053042) (xy 57.405179 64.055642) + (xy 57.376588 64.051194) (xy 57.347693 64.049645) (xy 57.341485 64.045733) (xy 57.33614 64.044902) + (xy 57.326258 64.036138) (xy 57.301267 64.02039) (xy 56.413118 63.132241) (xy 56.379633 63.070918) + (xy 56.376799 63.04456) (xy 56.376799 62.725606) (xy 56.376798 62.725584) (xy 56.376422 62.720805) + (xy 56.374065 62.690844) (xy 56.330855 62.542113) (xy 56.263935 62.428958) (xy 56.252017 62.408805) + (xy 56.25201 62.408796) (xy 56.142503 62.299289) (xy 56.142494 62.299282) (xy 56.030991 62.23334) + (xy 56.009187 62.220445) (xy 55.860456 62.177235) (xy 55.860453 62.177234) (xy 55.860451 62.177234) + (xy 55.829695 62.174814) (xy 55.825705 62.1745) (xy 55.825704 62.1745) (xy 55.476906 62.1745) (xy 55.476884 62.174501) + (xy 55.442147 62.177234) (xy 55.442144 62.177235) (xy 55.293413 62.220445) (xy 55.293411 62.220445) + (xy 55.293411 62.220446) (xy 55.160105 62.299282) (xy 55.160096 62.299289) (xy 55.050589 62.408796) + (xy 55.050582 62.408805) (xy 54.976011 62.5349) (xy 54.971745 62.542113) (xy 54.949116 62.620004) + (xy 54.928534 62.690847) (xy 54.928534 62.690849) (xy 54.9258 62.725589) (xy 54.9258 63.224393) + (xy 54.925801 63.224415) (xy 54.928534 63.259152) (xy 54.928534 63.259155) (xy 54.928535 63.259156) + (xy 54.971745 63.407887) (xy 54.9879 63.435204) (xy 55.050582 63.541194) (xy 55.050589 63.541203) + (xy 55.160096 63.65071) (xy 55.160105 63.650717) (xy 55.16358 63.652772) (xy 55.293413 63.729555) + (xy 55.442144 63.772765) (xy 55.476895 63.7755) (xy 55.795861 63.775499) (xy 55.8629 63.795183) + (xy 55.883542 63.811818) (xy 58.659542 66.587819) (xy 58.693027 66.649142) (xy 58.688043 66.718834) + (xy 58.646171 66.774767) (xy 58.580707 66.799184) (xy 58.571861 66.7995) (xy 55.453429 66.7995) + (xy 55.453423 66.799501) (xy 55.393816 66.805908) (xy 55.258971 66.856202) (xy 55.258964 66.856206) + (xy 55.143755 66.942452) (xy 55.143752 66.942455) (xy 55.057506 67.057664) (xy 55.057502 67.057671) + (xy 55.007208 67.192517) (xy 55.000801 67.252116) (xy 55.0008 67.252135) (xy 55.0008 68.84787) (xy 55.000801 68.847876) + (xy 55.007208 68.907483) (xy 55.055278 69.036365) (xy 55.060262 69.106057) (xy 55.026776 69.16738) + (xy 54.965453 69.200864) (xy 54.914905 69.201315) (xy 54.780096 69.1745) (xy 54.780092 69.1745) + (xy 54.622408 69.1745) (xy 54.622405 69.1745) (xy 54.46776 69.205261) (xy 54.467748 69.205264) (xy 54.322077 69.265602) + (xy 54.322064 69.265609) (xy 54.190961 69.35321) (xy 54.190957 69.353213) (xy 54.079463 69.464707) + (xy 54.07946 69.464711) (xy 53.991859 69.595814) (xy 53.991852 69.595827) (xy 53.931514 69.741498) + (xy 53.931511 69.74151) (xy 53.90075 69.896153) (xy 53.90075 70.053846) (xy 53.931511 70.208489) + (xy 53.931514 70.208501) (xy 53.991852 70.354172) (xy 53.991859 70.354185) (xy 54.07946 70.485288) + (xy 54.079463 70.485292) (xy 54.190957 70.596786) (xy 54.190961 70.596789) (xy 54.322064 70.68439) + (xy 54.322077 70.684397) (xy 54.457739 70.740589) (xy 54.467753 70.744737) (xy 54.467757 70.744737) + (xy 54.467758 70.744738) (xy 54.566517 70.764383) (xy 54.628428 70.796768) (xy 54.663002 70.857484) + (xy 54.659262 70.927253) (xy 54.618395 70.983925) (xy 54.553377 71.009506) (xy 54.542325 71.01) + (xy 52.119 71.01) (xy 52.051961 70.990315) (xy 52.006206 70.937511) (xy 51.995 70.886) (xy 51.995 57.071161) + (xy 58.338262 57.071161) (xy 58.338262 57.228854) (xy 58.369023 57.383497) (xy 58.369026 57.383509) + (xy 58.429364 57.52918) (xy 58.429371 57.529193) (xy 58.516972 57.660296) (xy 58.516975 57.6603) + (xy 58.628469 57.771794) (xy 58.628473 57.771797) (xy 58.759576 57.859398) (xy 58.759589 57.859405) + (xy 58.903408 57.918976) (xy 58.905265 57.919745) (xy 59.009612 57.940501) (xy 59.059915 57.950507) + (xy 59.059918 57.950508) (xy 59.05992 57.950508) (xy 59.217606 57.950508) (xy 59.217607 57.950507) + (xy 59.372259 57.919745) (xy 59.517941 57.859402) (xy 59.649051 57.771797) (xy 59.760551 57.660297) + (xy 59.790849 57.614953) (xy 65.1101 57.614953) (xy 65.1101 57.772646) (xy 65.140861 57.927289) + (xy 65.140864 57.927301) (xy 65.201202 58.072972) (xy 65.201209 58.072985) (xy 65.28881 58.204088) + (xy 65.288813 58.204092) (xy 65.400307 58.315586) (xy 65.400311 58.315589) (xy 65.531414 58.40319) + (xy 65.531427 58.403197) (xy 65.636906 58.446887) (xy 65.677103 58.463537) (xy 65.831753 58.494299) + (xy 65.831756 58.4943) (xy 65.831758 58.4943) (xy 65.989444 58.4943) (xy 65.989445 58.494299) (xy 66.144097 58.463537) + (xy 66.289779 58.403194) (xy 66.420889 58.315589) (xy 66.532389 58.204089) (xy 66.619994 58.072979) + (xy 66.620316 58.072203) (xy 66.663363 57.968276) (xy 66.680337 57.927297) (xy 66.7111 57.772642) + (xy 66.7111 57.614958) (xy 66.7111 57.614955) (xy 66.711099 57.614953) (xy 66.706173 57.590187) + (xy 66.680337 57.460303) (xy 66.678748 57.456466) (xy 66.619997 57.314627) (xy 66.61999 57.314614) + (xy 66.532389 57.183511) (xy 66.532386 57.183507) (xy 66.420892 57.072013) (xy 66.420888 57.07201) + (xy 66.289785 56.984409) (xy 66.289772 56.984402) (xy 66.144101 56.924064) (xy 66.144089 56.924061) + (xy 65.989445 56.8933) (xy 65.989442 56.8933) (xy 65.831758 56.8933) (xy 65.831755 56.8933) (xy 65.67711 56.924061) + (xy 65.677098 56.924064) (xy 65.531427 56.984402) (xy 65.531414 56.984409) (xy 65.400311 57.07201) + (xy 65.400307 57.072013) (xy 65.288813 57.183507) (xy 65.28881 57.183511) (xy 65.201209 57.314614) + (xy 65.201202 57.314627) (xy 65.140864 57.460298) (xy 65.140861 57.46031) (xy 65.1101 57.614953) + (xy 59.790849 57.614953) (xy 59.836125 57.547193) (xy 59.840948 57.539975) (xy 59.840948 57.539974) + (xy 59.848151 57.529194) (xy 59.848152 57.529193) (xy 59.848156 57.529187) (xy 59.858641 57.503875) + (xy 59.866459 57.485) (xy 59.908499 57.383505) (xy 59.939262 57.22885) (xy 59.939262 57.071166) + (xy 59.939262 57.071163) (xy 59.939261 57.071161) (xy 59.93383 57.04386) (xy 59.908499 56.916511) + (xy 59.867919 56.818541) (xy 59.848159 56.770835) (xy 59.848152 56.770822) (xy 59.760551 56.639719) + (xy 59.760548 56.639715) (xy 59.649054 56.528221) (xy 59.64905 56.528218) (xy 59.517947 56.440617) + (xy 59.517934 56.44061) (xy 59.372263 56.380272) (xy 59.372251 56.380269) (xy 59.217607 56.349508) + (xy 59.217604 56.349508) (xy 59.05992 56.349508) (xy 59.059917 56.349508) (xy 58.905272 56.380269) + (xy 58.90526 56.380272) (xy 58.759589 56.44061) (xy 58.759576 56.440617) (xy 58.628473 56.528218) + (xy 58.628469 56.528221) (xy 58.516975 56.639715) (xy 58.516972 56.639719) (xy 58.429371 56.770822) + (xy 58.429364 56.770835) (xy 58.369026 56.916506) (xy 58.369023 56.916518) (xy 58.338262 57.071161) + (xy 51.995 57.071161) (xy 51.995 54.89275) (xy 52.014685 54.825711) (xy 52.067489 54.779956) (xy 52.119 54.76875) + (xy 58.0161 54.76875) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 87.144727 63.213001) (xy 87.4935 63.213) (xy 87.560539 63.232684) (xy 87.606294 63.285488) (xy 87.6175 63.337) + (xy 87.6175 63.458147) (xy 87.6175 63.548653) (xy 87.652135 63.632268) (xy 87.652136 63.632269) + (xy 89.031329 65.011464) (xy 89.03133 65.011464) (xy 89.031332 65.011466) (xy 89.090452 65.035953) + (xy 89.090455 65.035955) (xy 89.090456 65.035955) (xy 89.100601 65.040157) (xy 89.114947 65.0461) + (xy 89.114948 65.0461) (xy 89.205453 65.0461) (xy 91.314459 65.0461) (xy 91.381498 65.065785) (xy 91.427253 65.118589) + (xy 91.437197 65.187747) (xy 91.408172 65.251303) (xy 91.40214 65.257781) (xy 91.343713 65.316207) + (xy 91.34371 65.316211) (xy 91.256109 65.447314) (xy 91.256102 65.447327) (xy 91.195764 65.592998) + (xy 91.195761 65.59301) (xy 91.165 65.747653) (xy 91.165 65.905346) (xy 91.195761 66.059989) (xy 91.195764 66.060001) + (xy 91.256102 66.205672) (xy 91.256109 66.205685) (xy 91.34371 66.336788) (xy 91.343713 66.336792) + (xy 91.455207 66.448286) (xy 91.455211 66.448289) (xy 91.586314 66.53589) (xy 91.586327 66.535897) + (xy 91.731998 66.596235) (xy 91.732003 66.596237) (xy 91.886653 66.626999) (xy 91.886656 66.627) + (xy 91.886658 66.627) (xy 92.044344 66.627) (xy 92.044345 66.626999) (xy 92.198997 66.596237) (xy 92.344679 66.535894) + (xy 92.475789 66.448289) (xy 92.587289 66.336789) (xy 92.674894 66.205679) (xy 92.677567 66.199227) + (xy 92.704521 66.134153) (xy 92.735237 66.059997) (xy 92.766 65.905342) (xy 92.766 65.747658) (xy 92.766 65.747655) + (xy 92.765999 65.747653) (xy 92.755238 65.693554) (xy 92.735237 65.593003) (xy 92.732411 65.586181) + (xy 92.674897 65.447327) (xy 92.67489 65.447314) (xy 92.587289 65.316211) (xy 92.587286 65.316207) + (xy 92.52886 65.257781) (xy 92.518247 65.238344) (xy 92.503747 65.221611) (xy 92.50183 65.208279) + (xy 92.495375 65.196458) (xy 92.496954 65.174371) (xy 92.493803 65.152453) (xy 92.499398 65.140201) + (xy 92.500359 65.126766) (xy 92.513629 65.109039) (xy 92.522828 65.088897) (xy 92.534159 65.081614) + (xy 92.542231 65.070833) (xy 92.562976 65.063095) (xy 92.581606 65.051123) (xy 92.603524 65.047971) + (xy 92.607695 65.046416) (xy 92.616541 65.0461) (xy 92.681929 65.0461) (xy 92.748968 65.065785) + (xy 92.785031 65.101209) (xy 92.82611 65.162688) (xy 92.826113 65.162692) (xy 92.937607 65.274186) + (xy 92.937611 65.274189) (xy 93.068714 65.36179) (xy 93.068727 65.361797) (xy 93.197962 65.415327) + (xy 93.214403 65.422137) (xy 93.341011 65.447321) (xy 93.355469 65.450197) (xy 93.41738 65.482582) + (xy 93.451954 65.543297) (xy 93.448215 65.613067) (xy 93.407349 65.669739) (xy 93.40017 65.674915) + (xy 93.341813 65.713908) (xy 93.341807 65.713913) (xy 93.230313 65.825407) (xy 93.23031 65.825411) + (xy 93.142709 65.956514) (xy 93.142702 65.956527) (xy 93.082364 66.102198) (xy 93.082361 66.10221) + (xy 93.0516 66.256853) (xy 93.0516 66.414546) (xy 93.082361 66.569189) (xy 93.082364 66.569201) + (xy 93.142702 66.714872) (xy 93.142709 66.714885) (xy 93.23031 66.845988) (xy 93.230313 66.845992) + (xy 93.341807 66.957486) (xy 93.341811 66.957489) (xy 93.472914 67.04509) (xy 93.472927 67.045097) + (xy 93.566967 67.084049) (xy 93.618603 67.105437) (xy 93.769739 67.1355) (xy 93.773253 67.136199) + (xy 93.773256 67.1362) (xy 93.773258 67.1362) (xy 93.930944 67.1362) (xy 93.930945 67.136199) (xy 94.085597 67.105437) + (xy 94.101548 67.098829) (xy 94.171016 67.091361) (xy 94.233495 67.122636) (xy 94.269148 67.182725) + (xy 94.273 67.213391) (xy 94.273 67.750032) (xy 94.253315 67.817071) (xy 94.200511 67.862826) (xy 94.131353 67.87277) + (xy 94.101548 67.864593) (xy 94.003701 67.824064) (xy 94.003689 67.824061) (xy 93.849045 67.7933) + (xy 93.849042 67.7933) (xy 93.691358 67.7933) (xy 93.691355 67.7933) (xy 93.53671 67.824061) (xy 93.536698 67.824064) + (xy 93.391027 67.884402) (xy 93.391014 67.884409) (xy 93.259911 67.97201) (xy 93.259907 67.972013) + (xy 93.148413 68.083507) (xy 93.14841 68.083511) (xy 93.060809 68.214614) (xy 93.060802 68.214627) + (xy 93.000464 68.360298) (xy 93.000461 68.36031) (xy 92.9697 68.514953) (xy 92.9697 68.672646) (xy 93.000461 68.827289) + (xy 93.000464 68.827301) (xy 93.060802 68.972972) (xy 93.060809 68.972985) (xy 93.14841 69.104088) + (xy 93.148413 69.104092) (xy 93.259907 69.215586) (xy 93.259911 69.215589) (xy 93.391014 69.30319) + (xy 93.391027 69.303197) (xy 93.529919 69.360727) (xy 93.536703 69.363537) (xy 93.678996 69.391841) + (xy 93.691353 69.394299) (xy 93.691356 69.3943) (xy 93.691358 69.3943) (xy 93.849044 69.3943) (xy 93.849045 69.394299) + (xy 94.003697 69.363537) (xy 94.149379 69.303194) (xy 94.280489 69.215589) (xy 94.391989 69.104089) + (xy 94.396629 69.097143) (xy 94.412796 69.08363) (xy 94.425424 69.066763) (xy 94.439063 69.061675) + (xy 94.450236 69.052337) (xy 94.471146 69.049709) (xy 94.490888 69.042346) (xy 94.505113 69.04544) + (xy 94.519561 69.043625) (xy 94.538571 69.052718) (xy 94.559161 69.057198) (xy 94.579033 69.072074) + (xy 94.58259 69.073776) (xy 94.587415 69.078349) (xy 94.71128 69.202214) (xy 94.744765 69.263537) + (xy 94.747599 69.289891) (xy 94.747599 69.315868) (xy 94.7476 69.315879) (xy 94.75152 69.352344) + (xy 94.75152 69.378849) (xy 94.747599 69.415321) (xy 94.747599 69.815868) (xy 94.7476 69.815879) + (xy 94.75152 69.852346) (xy 94.75152 69.87885) (xy 94.747599 69.915323) (xy 94.747599 69.915329) + (xy 94.7476 70.315868) (xy 94.7476 70.315879) (xy 94.75152 70.352345) (xy 94.75152 70.37885) (xy 94.747599 70.415322) + (xy 94.747599 70.815869) (xy 94.7476 70.81588) (xy 94.75152 70.852346) (xy 94.75152 70.87885) (xy 94.747599 70.915323) + (xy 94.747599 71.31587) (xy 94.7476 71.315881) (xy 94.750196 71.340037) (xy 94.750198 71.340043) + (xy 94.754008 71.375484) (xy 94.804303 71.510332) (xy 94.817406 71.527836) (xy 94.817407 71.527837) + (xy 94.848737 71.569688) (xy 94.873155 71.635152) (xy 94.858304 71.703426) (xy 94.808899 71.752831) + (xy 94.749471 71.768) (xy 94.748099 71.768) (xy 94.748099 71.815844) (xy 94.7545 71.875372) (xy 94.754502 71.875379) + (xy 94.804744 72.010086) (xy 94.804748 72.010093) (xy 94.890908 72.125187) (xy 94.890911 72.12519) + (xy 95.006005 72.21135) (xy 95.006012 72.211354) (xy 95.107798 72.249318) (xy 95.163732 72.291189) + (xy 95.188149 72.356654) (xy 95.173297 72.424927) (xy 95.123892 72.474332) (xy 95.064465 72.4895) + (xy 92.006924 72.4895) (xy 91.939885 72.469815) (xy 91.89413 72.417011) (xy 91.884186 72.347853) + (xy 91.889425 72.328753) (xy 91.888669 72.328524) (xy 91.890431 72.322709) (xy 91.890437 72.322697) + (xy 91.9212 72.168042) (xy 91.9212 72.010358) (xy 91.9212 72.010355) (xy 91.921199 72.010353) (xy 91.906705 71.937489) + (xy 91.890437 71.855703) (xy 91.878161 71.826065) (xy 91.830097 71.710027) (xy 91.83009 71.710014) + (xy 91.742489 71.578911) (xy 91.742486 71.578907) (xy 91.630992 71.467413) (xy 91.630988 71.46741) + (xy 91.499885 71.379809) (xy 91.499872 71.379802) (xy 91.354201 71.319464) (xy 91.354189 71.319461) + (xy 91.199545 71.2887) (xy 91.199542 71.2887) (xy 91.041858 71.2887) (xy 91.041855 71.2887) (xy 90.88721 71.319461) + (xy 90.887198 71.319464) (xy 90.741527 71.379802) (xy 90.741514 71.379809) (xy 90.610411 71.46741) + (xy 90.552241 71.52558) (xy 90.490917 71.559064) (xy 90.421226 71.554079) (xy 90.417128 71.552467) + (xy 90.386697 71.539863) (xy 90.386692 71.539862) (xy 90.386689 71.539861) (xy 90.232045 71.5091) + (xy 90.232042 71.5091) (xy 90.074358 71.5091) (xy 90.074355 71.5091) (xy 89.91971 71.539861) (xy 89.919698 71.539864) + (xy 89.774027 71.600202) (xy 89.774014 71.600209) (xy 89.642911 71.68781) (xy 89.642907 71.687813) + (xy 89.531413 71.799307) (xy 89.53141 71.799311) (xy 89.443809 71.930414) (xy 89.443802 71.930427) + (xy 89.383464 72.076098) (xy 89.383461 72.07611) (xy 89.3527 72.230753) (xy 89.3527 72.394199) (xy 89.350759 72.400807) + (xy 89.351975 72.407587) (xy 89.341041 72.433902) (xy 89.333015 72.461238) (xy 89.327811 72.465747) + (xy 89.325168 72.472109) (xy 89.30174 72.488337) (xy 89.280211 72.506993) (xy 89.272022 72.508923) + (xy 89.267733 72.511895) (xy 89.241332 72.516158) (xy 89.232993 72.518125) (xy 89.230838 72.518199) + (xy 89.144727 72.5182) (xy 89.103788 72.5226) (xy 89.099295 72.522756) (xy 89.096814 72.52212) (xy 89.081748 72.52212) + (xy 89.045274 72.518199) (xy 88.64473 72.518199) (xy 88.644719 72.5182) (xy 88.608254 72.52212) + (xy 88.581746 72.522119) (xy 88.567173 72.520552) (xy 88.502622 72.493813) (xy 88.462775 72.43642) + (xy 88.460282 72.366595) (xy 88.492747 72.309584) (xy 89.918038 70.884293) (xy 89.979359 70.85081) + (xy 90.049051 70.855794) (xy 90.053096 70.857385) (xy 90.128303 70.888537) (xy 90.26299 70.915328) + (xy 90.282953 70.919299) (xy 90.282956 70.9193) (xy 90.282958 70.9193) (xy 90.440644 70.9193) (xy 90.440645 70.919299) + (xy 90.595297 70.888537) (xy 90.740513 70.828387) (xy 90.740972 70.828197) (xy 90.740972 70.828196) + (xy 90.740979 70.828194) (xy 90.872089 70.740589) (xy 90.983589 70.629089) (xy 91.071194 70.497979) + (xy 91.131537 70.352297) (xy 91.1623 70.197642) (xy 91.1623 70.039958) (xy 91.1623 70.039955) (xy 91.162299 70.039953) + (xy 91.156304 70.009814) (xy 91.131537 69.885303) (xy 91.118272 69.85328) (xy 91.110804 69.783813) + (xy 91.142079 69.721334) (xy 91.202167 69.685681) (xy 91.271992 69.688174) (xy 91.320515 69.718148) + (xy 91.952003 70.349636) (xy 91.985488 70.410959) (xy 91.980504 70.480651) (xy 91.978884 70.484768) + (xy 91.947763 70.559903) (xy 91.947761 70.55991) (xy 91.917 70.714553) (xy 91.917 70.872246) (xy 91.947761 71.026889) + (xy 91.947764 71.026901) (xy 92.008102 71.172572) (xy 92.008109 71.172585) (xy 92.09571 71.303688) + (xy 92.095713 71.303692) (xy 92.207207 71.415186) (xy 92.207211 71.415189) (xy 92.338314 71.50279) + (xy 92.338327 71.502797) (xy 92.483998 71.563135) (xy 92.484003 71.563137) (xy 92.592568 71.584732) + (xy 92.638653 71.593899) (xy 92.638656 71.5939) (xy 92.638658 71.5939) (xy 92.796344 71.5939) (xy 92.796345 71.593899) + (xy 92.950997 71.563137) (xy 93.081455 71.5091) (xy 93.096672 71.502797) (xy 93.096672 71.502796) + (xy 93.096679 71.502794) (xy 93.227789 71.415189) (xy 93.339289 71.303689) (xy 93.426894 71.172579) + (xy 93.487237 71.026897) (xy 93.518 70.872242) (xy 93.518 70.714558) (xy 93.518 70.714555) (xy 93.517999 70.714553) + (xy 93.514696 70.697946) (xy 93.487237 70.559903) (xy 93.466688 70.510293) (xy 93.426897 70.414227) + (xy 93.42689 70.414214) (xy 93.339289 70.283111) (xy 93.339286 70.283107) (xy 93.227792 70.171613) + (xy 93.227788 70.17161) (xy 93.096685 70.084009) (xy 93.096672 70.084002) (xy 92.951001 70.023664) + (xy 92.950989 70.023661) (xy 92.796345 69.9929) (xy 92.796342 69.9929) (xy 92.638658 69.9929) (xy 92.638655 69.9929) + (xy 92.48401 70.023661) (xy 92.484003 70.023663) (xy 92.408868 70.054784) (xy 92.339399 70.062251) + (xy 92.27692 70.030976) (xy 92.273736 70.027903) (xy 90.42057 68.174736) (xy 90.393012 68.163321) + (xy 90.336953 68.1401) (xy 87.195272 68.1401) (xy 87.128233 68.120415) (xy 87.082478 68.067611) + (xy 87.072534 67.998453) (xy 87.101559 67.934897) (xy 87.126384 67.912996) (xy 87.12879 67.911388) + (xy 87.240286 67.799892) (xy 87.240289 67.799889) (xy 87.327894 67.668779) (xy 87.388237 67.523097) + (xy 87.389033 67.519095) (xy 87.421411 67.457185) (xy 87.4632 67.428717) (xy 87.463389 67.428638) + (xy 87.463397 67.428637) (xy 87.609079 67.368294) (xy 87.740189 67.280689) (xy 87.851689 67.169189) + (xy 87.939294 67.038079) (xy 87.999637 66.892397) (xy 88.0304 66.737742) (xy 88.0304 66.580058) + (xy 88.0304 66.580055) (xy 88.030399 66.580053) (xy 88.027345 66.5647) (xy 87.999637 66.425403) + (xy 87.995464 66.415328) (xy 87.939297 66.279727) (xy 87.93929 66.279714) (xy 87.883993 66.196957) + (xy 87.851689 66.14861) (xy 87.837232 66.134153) (xy 88.8115 66.134153) (xy 88.8115 66.291846) (xy 88.842261 66.446489) + (xy 88.842264 66.446501) (xy 88.902602 66.592172) (xy 88.902609 66.592185) (xy 88.99021 66.723288) + (xy 88.990213 66.723292) (xy 89.101707 66.834786) (xy 89.101711 66.834789) (xy 89.232814 66.92239) + (xy 89.232827 66.922397) (xy 89.378498 66.982735) (xy 89.378503 66.982737) (xy 89.532982 67.013465) + (xy 89.533153 67.013499) (xy 89.533156 67.0135) (xy 89.533158 67.0135) (xy 89.690844 67.0135) (xy 89.690845 67.013499) + (xy 89.845497 66.982737) (xy 89.991179 66.922394) (xy 90.122289 66.834789) (xy 90.233789 66.723289) + (xy 90.321394 66.592179) (xy 90.327838 66.576623) (xy 90.370389 66.473893) (xy 90.381737 66.446497) + (xy 90.4125 66.291842) (xy 90.4125 66.134158) (xy 90.4125 66.134155) (xy 90.412499 66.134153) (xy 90.399283 66.067712) + (xy 90.381737 65.979503) (xy 90.355155 65.915328) (xy 90.321397 65.833827) (xy 90.32139 65.833814) + (xy 90.233789 65.702711) (xy 90.233786 65.702707) (xy 90.122292 65.591213) (xy 90.122288 65.59121) + (xy 89.991185 65.503609) (xy 89.991172 65.503602) (xy 89.845501 65.443264) (xy 89.845489 65.443261) + (xy 89.690845 65.4125) (xy 89.690842 65.4125) (xy 89.533158 65.4125) (xy 89.533155 65.4125) (xy 89.37851 65.443261) + (xy 89.378498 65.443264) (xy 89.232827 65.503602) (xy 89.232814 65.503609) (xy 89.101711 65.59121) + (xy 89.101707 65.591213) (xy 88.990213 65.702707) (xy 88.99021 65.702711) (xy 88.902609 65.833814) + (xy 88.902602 65.833827) (xy 88.842264 65.979498) (xy 88.842261 65.97951) (xy 88.8115 66.134153) + (xy 87.837232 66.134153) (xy 87.740192 66.037113) (xy 87.740188 66.03711) (xy 87.609085 65.949509) + (xy 87.609072 65.949502) (xy 87.463401 65.889164) (xy 87.463389 65.889161) (xy 87.308745 65.8584) + (xy 87.308742 65.8584) (xy 87.151058 65.8584) (xy 87.151055 65.8584) (xy 86.99641 65.889161) (xy 86.996407 65.889162) + (xy 86.996406 65.889162) (xy 86.996403 65.889163) (xy 86.912866 65.923765) (xy 86.912861 65.923767) + (xy 86.843391 65.931235) (xy 86.817955 65.923765) (xy 86.731857 65.888101) (xy 86.731853 65.8881) + (xy 86.731852 65.8881) (xy 85.566401 65.8881) (xy 85.499362 65.868415) (xy 85.453607 65.815611) + (xy 85.442401 65.7641) (xy 85.4424 65.415327) (xy 85.442399 65.415312) (xy 85.438479 65.378854) + (xy 85.438479 65.352347) (xy 85.442401 65.315873) (xy 85.4424 64.915328) (xy 85.4424 64.915327) + (xy 85.442399 64.915311) (xy 85.438479 64.878853) (xy 85.437876 64.860417) (xy 85.438044 64.856389) + (xy 85.442401 64.815872) (xy 85.4424 64.752199) (xy 85.442508 64.749622) (xy 85.444735 64.743063) + (xy 85.45184 64.707347) (xy 85.4711 64.660853) (xy 85.4711 64.484048) (xy 85.490785 64.417009) (xy 85.543589 64.371254) + (xy 85.612747 64.36131) (xy 85.642551 64.369486) (xy 85.712203 64.398337) (xy 85.866853 64.429099) + (xy 85.866856 64.4291) (xy 85.866858 64.4291) (xy 86.024544 64.4291) (xy 86.024545 64.429099) (xy 86.179197 64.398337) + (xy 86.324879 64.337994) (xy 86.455989 64.250389) (xy 86.567489 64.138889) (xy 86.655094 64.007779) + (xy 86.715437 63.862097) (xy 86.7462 63.707442) (xy 86.7462 63.549758) (xy 86.740046 63.518821) + (xy 86.740753 63.510916) (xy 86.737979 63.503477) (xy 86.743822 63.476616) (xy 86.746272 63.449234) + (xy 86.751521 63.441223) (xy 86.752831 63.435204) (xy 86.773976 63.406956) (xy 86.931616 63.249316) + (xy 86.992937 63.215834) (xy 87.019295 63.213) (xy 87.045271 63.213) (xy 87.045284 63.212999) (xy 87.081743 63.209079) + (xy 87.108251 63.209079) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 99.052494 64.03675) (xy 99.108428 64.078621) (xy 99.132845 64.144086) (xy 99.117993 64.212359) + (xy 99.114701 64.218027) (xy 99.091489 64.255661) (xy 99.091485 64.255668) (xy 99.08213 64.2839) + (xy 99.036301 64.422203) (xy 99.036301 64.422204) (xy 99.0363 64.422204) (xy 99.0258 64.524983) + (xy 99.0258 65.525001) (xy 99.025801 65.525019) (xy 99.0363 65.627796) (xy 99.036301 65.627799) + (xy 99.091485 65.794331) (xy 99.091486 65.794334) (xy 99.183588 65.943656) (xy 99.307644 66.067712) + (xy 99.456966 66.159814) (xy 99.623503 66.214999) (xy 99.726291 66.2255) (xy 100.351308 66.225499) + (xy 100.351316 66.225498) (xy 100.351319 66.225498) (xy 100.407602 66.219748) (xy 100.454097 66.214999) + (xy 100.620634 66.159814) (xy 100.680212 66.123065) (xy 100.747602 66.104625) (xy 100.814266 66.125547) + (xy 100.832989 66.140923) (xy 100.915434 66.223368) (xy 100.980101 66.250152) (xy 100.999047 66.258) + (xy 104.340205 66.258) (xy 104.407244 66.277685) (xy 104.427886 66.294319) (xy 105.358181 67.224614) + (xy 105.391666 67.285937) (xy 105.3945 67.312295) (xy 105.3945 68.649805) (xy 105.374815 68.716844) + (xy 105.358181 68.737486) (xy 104.404686 69.690981) (xy 104.343363 69.724466) (xy 104.317005 69.7273) + (xy 101.263746 69.7273) (xy 101.18013 69.761936) (xy 100.832989 70.109076) (xy 100.771666 70.142561) + (xy 100.701974 70.137577) (xy 100.680218 70.126937) (xy 100.620634 70.090186) (xy 100.454097 70.035001) + (xy 100.454095 70.035) (xy 100.35131 70.0245) (xy 99.726298 70.0245) (xy 99.72628 70.024501) (xy 99.623503 70.035) + (xy 99.6235 70.035001) (xy 99.456966 70.090186) (xy 99.397385 70.126935) (xy 99.329992 70.145374) + (xy 99.263329 70.12445) (xy 99.244609 70.109076) (xy 97.55827 68.422736) (xy 97.555923 68.421764) + (xy 97.474653 68.3881) (xy 97.066399 68.3881) (xy 96.99936 68.368415) (xy 96.953605 68.315611) (xy 96.942399 68.2641) + (xy 96.942398 67.915328) (xy 96.942397 67.915313) (xy 96.938477 67.878855) (xy 96.938477 67.852347) + (xy 96.942399 67.815873) (xy 96.942398 67.415328) (xy 96.942398 67.415327) (xy 96.942397 67.415311) + (xy 96.938477 67.378853) (xy 96.937881 67.360265) (xy 96.938051 67.356304) (xy 96.942399 67.315872) + (xy 96.942399 67.255298) (xy 96.942514 67.252627) (xy 96.952962 67.221983) (xy 96.962084 67.19092) + (xy 96.964171 67.189111) (xy 96.965063 67.186496) (xy 96.990425 67.166361) (xy 97.014888 67.145165) + (xy 97.018662 67.143946) (xy 97.019786 67.143054) (xy 97.02216 67.142816) (xy 97.042208 67.136342) + (xy 97.046441 67.1355) (xy 97.046442 67.1355) (xy 97.201097 67.104737) (xy 97.346779 67.044394) + (xy 97.477889 66.956789) (xy 97.589389 66.845289) (xy 97.676994 66.714179) (xy 97.737337 66.568497) + (xy 97.743631 66.536853) (xy 97.776014 66.474944) (xy 97.836729 66.440368) (xy 97.906498 66.444106) + (xy 97.952929 66.473363) (xy 98.842179 67.362613) (xy 98.875664 67.423936) (xy 98.872204 67.489297) + (xy 98.861301 67.522199) (xy 98.8508 67.624983) (xy 98.8508 68.625001) (xy 98.850801 68.625019) + (xy 98.8613 68.727796) (xy 98.861301 68.727799) (xy 98.916485 68.894331) (xy 98.916487 68.894336) + (xy 98.935657 68.925416) (xy 99.008588 69.043656) (xy 99.132644 69.167712) (xy 99.281966 69.259814) + (xy 99.448503 69.314999) (xy 99.551291 69.3255) (xy 100.301308 69.325499) (xy 100.301316 69.325498) + (xy 100.301319 69.325498) (xy 100.371782 69.3183) (xy 100.404097 69.314999) (xy 100.570634 69.259814) + (xy 100.719956 69.167712) (xy 100.844012 69.043656) (xy 100.846052 69.040347) (xy 100.848045 69.038555) + (xy 100.848493 69.037989) (xy 100.848589 69.038065) (xy 100.897994 68.993623) (xy 100.966956 68.982395) + (xy 101.03104 69.010234) (xy 101.057129 69.040339) (xy 101.058981 69.043341) (xy 101.058983 69.043344) + (xy 101.182954 69.167315) (xy 101.332175 69.259356) (xy 101.33218 69.259358) (xy 101.498602 69.314505) + (xy 101.498609 69.314506) (xy 101.601319 69.324999) (xy 101.726299 69.324999) (xy 102.2263 69.324999) + (xy 102.351272 69.324999) (xy 102.351286 69.324998) (xy 102.453997 69.314505) (xy 102.620419 69.259358) + (xy 102.620424 69.259356) (xy 102.769645 69.167315) (xy 102.893615 69.043345) (xy 102.985656 68.894124) + (xy 102.985658 68.894119) (xy 103.040805 68.727697) (xy 103.040806 68.72769) (xy 103.051299 68.624986) + (xy 103.0513 68.624973) (xy 103.0513 68.375) (xy 102.2263 68.375) (xy 102.2263 69.324999) (xy 101.726299 69.324999) + (xy 101.7263 69.324998) (xy 101.7263 67.875) (xy 102.2263 67.875) (xy 103.051299 67.875) (xy 103.051299 67.625028) + (xy 103.051298 67.625013) (xy 103.040805 67.522302) (xy 102.985658 67.35588) (xy 102.985656 67.355875) + (xy 102.893615 67.206654) (xy 102.769645 67.082684) (xy 102.620424 66.990643) (xy 102.620419 66.990641) + (xy 102.453997 66.935494) (xy 102.45399 66.935493) (xy 102.351286 66.925) (xy 102.2263 66.925) (xy 102.2263 67.875) + (xy 101.7263 67.875) (xy 101.7263 66.925) (xy 101.601327 66.925) (xy 101.601312 66.925001) (xy 101.498602 66.935494) + (xy 101.33218 66.990641) (xy 101.332175 66.990643) (xy 101.182954 67.082684) (xy 101.058983 67.206655) + (xy 101.058979 67.20666) (xy 101.057126 67.209665) (xy 101.055318 67.21129) (xy 101.054502 67.212323) + (xy 101.054325 67.212183) (xy 101.005174 67.256385) (xy 100.936211 67.267601) (xy 100.872131 67.239752) + (xy 100.846053 67.209653) (xy 100.846037 67.209628) (xy 100.844012 67.206344) (xy 100.719956 67.082288) + (xy 100.608431 67.013499) (xy 100.570636 66.990187) (xy 100.570631 66.990185) (xy 100.548148 66.982735) + (xy 100.404097 66.935001) (xy 100.404095 66.935) (xy 100.30131 66.9245) (xy 99.551298 66.9245) (xy 99.55128 66.924501) + (xy 99.448503 66.935) (xy 99.4485 66.935001) (xy 99.281966 66.990186) (xy 99.281962 66.990187) (xy 99.261038 67.003093) + (xy 99.193645 67.02153) (xy 99.126983 67.000604) (xy 99.108266 66.985232) (xy 98.376228 66.253194) + (xy 97.634998 65.511965) (xy 97.601514 65.450643) (xy 97.606498 65.380951) (xy 97.64837 65.325018) + (xy 97.675223 65.309725) (xy 97.678268 65.308465) (xy 98.921482 64.065249) (xy 98.982803 64.031766) + ) + ) + ) + (zone + (net 97) + (net_name "AGND") + (layer "B.Cu") + (uuid "b350f0d0-0926-4cd3-b022-a8bdb852def8") + (hatch edge 0.5) + (priority 2) + (connect_pads + (clearance 0.5) + ) + (min_thickness 0.25) + (filled_areas_thickness no) + (fill yes + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + ) + (polygon + (pts + (xy 117.479436 80.962528) (xy 356.794972 80.962528) (xy 356.795 80.9625) (xy 356.795 54.76875) (xy 117.479436 54.76875) + (xy 117.479436 55.364069) + ) + ) + (filled_polygon + (layer "B.Cu") + (pts + (xy 345.794939 54.788435) (xy 345.840694 54.841239) (xy 345.8519 54.89275) (xy 345.8519 56.904428) + (xy 345.832215 56.971467) (xy 345.779411 57.017222) (xy 345.766219 57.022359) (xy 345.560983 57.089044) + (xy 345.371579 57.185551) (xy 345.199613 57.31049) (xy 345.04929 57.460813) (xy 344.924349 57.632782) + (xy 344.919884 57.641546) (xy 344.871909 57.692342) (xy 344.804088 57.709136) (xy 344.737953 57.686598) + (xy 344.698916 57.641546) (xy 344.69445 57.632782) (xy 344.569509 57.460813) (xy 344.419186 57.31049) + (xy 344.24722 57.185551) (xy 344.057814 57.089044) (xy 344.057813 57.089043) (xy 344.057812 57.089043) + (xy 343.855643 57.023354) (xy 343.855641 57.023353) (xy 343.85564 57.023353) (xy 343.694357 56.997808) + (xy 343.645687 56.9901) (xy 343.433113 56.9901) (xy 343.384442 56.997808) (xy 343.22316 57.023353) + (xy 343.020985 57.089044) (xy 342.831579 57.185551) (xy 342.659615 57.310489) (xy 342.546073 57.424031) + (xy 342.48475 57.457515) (xy 342.415058 57.452531) (xy 342.359125 57.410659) (xy 342.34221 57.379682) + (xy 342.293197 57.248271) (xy 342.293193 57.248264) (xy 342.206947 57.133055) (xy 342.206944 57.133052) + (xy 342.091735 57.046806) (xy 342.091728 57.046802) (xy 341.956882 56.996508) (xy 341.956883 56.996508) + (xy 341.897283 56.990101) (xy 341.897281 56.9901) (xy 341.897273 56.9901) (xy 341.897264 56.9901) + (xy 340.101529 56.9901) (xy 340.101523 56.990101) (xy 340.041916 56.996508) (xy 339.907071 57.046802) + (xy 339.907064 57.046806) (xy 339.791855 57.133052) (xy 339.791852 57.133055) (xy 339.705606 57.248264) + (xy 339.705602 57.248271) (xy 339.655308 57.383117) (xy 339.648901 57.442716) (xy 339.6489 57.442735) + (xy 339.6489 59.23847) (xy 339.648901 59.238476) (xy 339.655308 59.298083) (xy 339.705602 59.432928) + (xy 339.705606 59.432935) (xy 339.791852 59.548144) (xy 339.791855 59.548147) (xy 339.907064 59.634393) + (xy 339.907071 59.634397) (xy 340.041917 59.684691) (xy 340.041916 59.684691) (xy 340.048844 59.685435) + (xy 340.101527 59.6911) (xy 341.897272 59.691099) (xy 341.956883 59.684691) (xy 342.091731 59.634396) + (xy 342.206946 59.548146) (xy 342.293196 59.432931) (xy 342.34221 59.301516) (xy 342.384081 59.245584) + (xy 342.449545 59.221166) (xy 342.517818 59.236017) (xy 342.546073 59.257169) (xy 342.659613 59.370709) + (xy 342.831579 59.495648) (xy 342.831581 59.495649) (xy 342.831584 59.495651) (xy 343.020988 59.592157) + (xy 343.223157 59.657846) (xy 343.433113 59.6911) (xy 343.433114 59.6911) (xy 343.645686 59.6911) + (xy 343.645687 59.6911) (xy 343.855643 59.657846) (xy 344.057812 59.592157) (xy 344.247216 59.495651) + (xy 344.269189 59.479686) (xy 344.419186 59.370709) (xy 344.419188 59.370706) (xy 344.419192 59.370704) + (xy 344.569504 59.220392) (xy 344.569506 59.220388) (xy 344.569509 59.220386) (xy 344.694448 59.04842) + (xy 344.694447 59.04842) (xy 344.694451 59.048416) (xy 344.698914 59.039654) (xy 344.746888 58.988859) + (xy 344.814708 58.972063) (xy 344.880844 58.994599) (xy 344.919886 59.039656) (xy 344.924351 59.04842) + (xy 345.04929 59.220386) (xy 345.199613 59.370709) (xy 345.371579 59.495648) (xy 345.371581 59.495649) + (xy 345.371584 59.495651) (xy 345.560988 59.592157) (xy 345.763157 59.657846) (xy 345.973113 59.6911) + (xy 345.973114 59.6911) (xy 346.185686 59.6911) (xy 346.185687 59.6911) (xy 346.395643 59.657846) + (xy 346.597812 59.592157) (xy 346.787216 59.495651) (xy 346.809189 59.479686) (xy 346.959186 59.370709) + (xy 346.959188 59.370706) (xy 346.959192 59.370704) (xy 347.109504 59.220392) (xy 347.109506 59.220388) + (xy 347.109509 59.220386) (xy 347.234448 59.04842) (xy 347.234447 59.04842) (xy 347.234451 59.048416) + (xy 347.238914 59.039654) (xy 347.286888 58.988859) (xy 347.354708 58.972063) (xy 347.420844 58.994599) + (xy 347.459886 59.039656) (xy 347.464351 59.04842) (xy 347.58929 59.220386) (xy 347.739613 59.370709) + (xy 347.911579 59.495648) (xy 347.911581 59.495649) (xy 347.911584 59.495651) (xy 348.100988 59.592157) + (xy 348.303157 59.657846) (xy 348.513113 59.6911) (xy 348.513114 59.6911) (xy 348.725686 59.6911) + (xy 348.725687 59.6911) (xy 348.935643 59.657846) (xy 349.137812 59.592157) (xy 349.327216 59.495651) + (xy 349.349189 59.479686) (xy 349.499186 59.370709) (xy 349.499188 59.370706) (xy 349.499192 59.370704) + (xy 349.649504 59.220392) (xy 349.649506 59.220388) (xy 349.649509 59.220386) (xy 349.774448 59.04842) + (xy 349.774447 59.04842) (xy 349.774451 59.048416) (xy 349.778914 59.039654) (xy 349.826888 58.988859) + (xy 349.894708 58.972063) (xy 349.960844 58.994599) (xy 349.999886 59.039656) (xy 350.004351 59.04842) + (xy 350.12929 59.220386) (xy 350.279613 59.370709) (xy 350.451579 59.495648) (xy 350.451581 59.495649) + (xy 350.451584 59.495651) (xy 350.640988 59.592157) (xy 350.843157 59.657846) (xy 351.053113 59.6911) + (xy 351.053114 59.6911) (xy 351.265686 59.6911) (xy 351.265687 59.6911) (xy 351.475643 59.657846) + (xy 351.677812 59.592157) (xy 351.867216 59.495651) (xy 351.889189 59.479686) (xy 352.039186 59.370709) + (xy 352.039188 59.370706) (xy 352.039192 59.370704) (xy 352.189504 59.220392) (xy 352.189506 59.220388) + (xy 352.189509 59.220386) (xy 352.314448 59.04842) (xy 352.314447 59.04842) (xy 352.314451 59.048416) + (xy 352.318914 59.039654) (xy 352.366888 58.988859) (xy 352.434708 58.972063) (xy 352.500844 58.994599) + (xy 352.539886 59.039656) (xy 352.544351 59.04842) (xy 352.66929 59.220386) (xy 352.819613 59.370709) + (xy 352.991579 59.495648) (xy 352.991581 59.495649) (xy 352.991584 59.495651) (xy 353.180988 59.592157) + (xy 353.383157 59.657846) (xy 353.593113 59.6911) (xy 353.593114 59.6911) (xy 353.805686 59.6911) + (xy 353.805687 59.6911) (xy 354.015643 59.657846) (xy 354.217812 59.592157) (xy 354.407216 59.495651) + (xy 354.429189 59.479686) (xy 354.579186 59.370709) (xy 354.579188 59.370706) (xy 354.579192 59.370704) + (xy 354.729504 59.220392) (xy 354.729506 59.220388) (xy 354.729509 59.220386) (xy 354.854448 59.04842) + (xy 354.854447 59.04842) (xy 354.854451 59.048416) (xy 354.950957 58.859012) (xy 355.016646 58.656843) + (xy 355.0499 58.446887) (xy 355.0499 58.234313) (xy 355.016646 58.024357) (xy 354.950957 57.822188) + (xy 354.854451 57.632784) (xy 354.854449 57.632781) (xy 354.854448 57.632779) (xy 354.729509 57.460813) + (xy 354.579186 57.31049) (xy 354.40722 57.185551) (xy 354.217814 57.089044) (xy 354.217813 57.089043) + (xy 354.217812 57.089043) (xy 354.015643 57.023354) (xy 354.015641 57.023353) (xy 354.01564 57.023353) + (xy 353.854357 56.997808) (xy 353.805687 56.9901) (xy 353.593113 56.9901) (xy 353.544442 56.997808) + (xy 353.38316 57.023353) (xy 353.180985 57.089044) (xy 352.991579 57.185551) (xy 352.819613 57.31049) + (xy 352.66929 57.460813) (xy 352.544349 57.632782) (xy 352.539884 57.641546) (xy 352.491909 57.692342) + (xy 352.424088 57.709136) (xy 352.357953 57.686598) (xy 352.318916 57.641546) (xy 352.31445 57.632782) + (xy 352.189509 57.460813) (xy 352.039186 57.31049) (xy 351.86722 57.185551) (xy 351.677814 57.089044) + (xy 351.677813 57.089043) (xy 351.677812 57.089043) (xy 351.475643 57.023354) (xy 351.475641 57.023353) + (xy 351.47564 57.023353) (xy 351.314357 56.997808) (xy 351.265687 56.9901) (xy 351.053113 56.9901) + (xy 351.004442 56.997808) (xy 350.84316 57.023353) (xy 350.640985 57.089044) (xy 350.451579 57.185551) + (xy 350.279613 57.31049) (xy 350.12929 57.460813) (xy 350.004349 57.632782) (xy 349.999884 57.641546) + (xy 349.951909 57.692342) (xy 349.884088 57.709136) (xy 349.817953 57.686598) (xy 349.778916 57.641546) + (xy 349.77445 57.632782) (xy 349.649509 57.460813) (xy 349.499186 57.31049) (xy 349.32722 57.185551) + (xy 349.137814 57.089044) (xy 349.137813 57.089043) (xy 349.137812 57.089043) (xy 348.935643 57.023354) + (xy 348.935641 57.023353) (xy 348.93564 57.023353) (xy 348.774357 56.997808) (xy 348.725687 56.9901) + (xy 348.513113 56.9901) (xy 348.464442 56.997808) (xy 348.30316 57.023353) (xy 348.100985 57.089044) + (xy 347.911579 57.185551) (xy 347.739613 57.31049) (xy 347.58929 57.460813) (xy 347.464349 57.632782) + (xy 347.459884 57.641546) (xy 347.411909 57.692342) (xy 347.344088 57.709136) (xy 347.277953 57.686598) + (xy 347.238916 57.641546) (xy 347.23445 57.632782) (xy 347.109509 57.460813) (xy 346.959186 57.31049) + (xy 346.78722 57.185551) (xy 346.597816 57.089044) (xy 346.392581 57.022359) (xy 346.334906 56.982921) + (xy 346.307708 56.918562) (xy 346.3069 56.904428) (xy 346.3069 54.89275) (xy 346.326585 54.825711) + (xy 346.379389 54.779956) (xy 346.4309 54.76875) (xy 356.671 54.76875) (xy 356.738039 54.788435) + (xy 356.783794 54.841239) (xy 356.795 54.89275) (xy 356.795 77.896195) (xy 356.775315 77.963234) + (xy 356.722511 78.008989) (xy 356.663934 78.018754) (xy 356.663934 78.0195) (xy 356.659462 78.0195) + (xy 356.658862 78.0196) (xy 356.657845 78.0195) (xy 356.657842 78.0195) (xy 356.500158 78.0195) + (xy 356.500155 78.0195) (xy 356.34551 78.050261) (xy 356.345498 78.050264) (xy 356.199827 78.110602) + (xy 356.199814 78.110609) (xy 356.068711 78.19821) (xy 356.068707 78.198213) (xy 355.957213 78.309707) + (xy 355.95721 78.309711) (xy 355.869609 78.440814) (xy 355.869602 78.440827) (xy 355.809264 78.586498) + (xy 355.809261 78.58651) (xy 355.7785 78.741153) (xy 355.7785 78.898846) (xy 355.809261 79.053489) + (xy 355.809264 79.053501) (xy 355.869602 79.199172) (xy 355.869609 79.199185) (xy 355.95721 79.330288) + (xy 355.957213 79.330292) (xy 356.068707 79.441786) (xy 356.068711 79.441789) (xy 356.199814 79.52939) + (xy 356.199827 79.529397) (xy 356.325856 79.581599) (xy 356.345503 79.589737) (xy 356.49966 79.620401) + (xy 356.500153 79.620499) (xy 356.500156 79.6205) (xy 356.500158 79.6205) (xy 356.65784 79.6205) + (xy 356.657842 79.6205) (xy 356.657843 79.620499) (xy 356.658845 79.620401) (xy 356.659367 79.6205) + (xy 356.663934 79.6205) (xy 356.663934 79.621366) (xy 356.727491 79.633419) (xy 356.778202 79.681484) + (xy 356.795 79.743804) (xy 356.795 80.838528) (xy 356.775315 80.905567) (xy 356.722511 80.951322) + (xy 356.671 80.962528) (xy 309.424272 80.962528) (xy 309.365819 80.947887) (xy 309.361185 80.94541) + (xy 309.361179 80.945406) (xy 309.361172 80.945403) (xy 309.36117 80.945402) (xy 309.215501 80.885064) + (xy 309.215489 80.885061) (xy 309.060845 80.8543) (xy 309.060842 80.8543) (xy 308.903158 80.8543) + (xy 308.903155 80.8543) (xy 308.74851 80.885061) (xy 308.748498 80.885064) (xy 308.602829 80.945402) + (xy 308.602823 80.945405) (xy 308.602821 80.945406) (xy 308.602818 80.945407) (xy 308.598181 80.947887) + (xy 308.539728 80.962528) (xy 117.603436 80.962528) (xy 117.536397 80.942843) (xy 117.490642 80.890039) + (xy 117.479436 80.838528) (xy 117.479436 78.702253) (xy 152.4135 78.702253) (xy 152.4135 78.859946) + (xy 152.444261 79.014589) (xy 152.444264 79.014601) (xy 152.504602 79.160272) (xy 152.504609 79.160285) + (xy 152.59221 79.291388) (xy 152.592213 79.291392) (xy 152.703707 79.402886) (xy 152.703711 79.402889) + (xy 152.834814 79.49049) (xy 152.834827 79.490497) (xy 152.980498 79.550835) (xy 152.980503 79.550837) + (xy 153.135153 79.581599) (xy 153.135156 79.5816) (xy 153.135158 79.5816) (xy 153.292844 79.5816) + (xy 153.292845 79.581599) (xy 153.447497 79.550837) (xy 153.593179 79.490494) (xy 153.724289 79.402889) + (xy 153.835789 79.291389) (xy 153.923394 79.160279) (xy 153.983737 79.014597) (xy 154.0145 78.859942) + (xy 154.0145 78.702258) (xy 154.0145 78.702255) (xy 154.014499 78.702253) (xy 153.991476 78.58651) + (xy 153.983737 78.547603) (xy 153.983735 78.547598) (xy 153.923397 78.401927) (xy 153.92339 78.401914) + (xy 153.835789 78.270811) (xy 153.835786 78.270807) (xy 153.724292 78.159313) (xy 153.724288 78.15931) + (xy 153.593185 78.071709) (xy 153.593172 78.071702) (xy 153.447501 78.011364) (xy 153.447489 78.011361) + (xy 153.292845 77.9806) (xy 153.292842 77.9806) (xy 153.135158 77.9806) (xy 153.135155 77.9806) + (xy 152.98051 78.011361) (xy 152.980498 78.011364) (xy 152.834827 78.071702) (xy 152.834814 78.071709) + (xy 152.703711 78.15931) (xy 152.703707 78.159313) (xy 152.592213 78.270807) (xy 152.59221 78.270811) + (xy 152.504609 78.401914) (xy 152.504602 78.401927) (xy 152.444264 78.547598) (xy 152.444261 78.54761) + (xy 152.4135 78.702253) (xy 117.479436 78.702253) (xy 117.479436 76.392353) (xy 134.5495 76.392353) + (xy 134.5495 76.550046) (xy 134.580261 76.704689) (xy 134.580264 76.704701) (xy 134.640602 76.850372) + (xy 134.640609 76.850385) (xy 134.72821 76.981488) (xy 134.728213 76.981492) (xy 134.839707 77.092986) + (xy 134.839711 77.092989) (xy 134.970814 77.18059) (xy 134.970827 77.180597) (xy 135.116498 77.240935) + (xy 135.116503 77.240937) (xy 135.271153 77.271699) (xy 135.271156 77.2717) (xy 135.271158 77.2717) + (xy 135.428844 77.2717) (xy 135.428845 77.271699) (xy 135.583497 77.240937) (xy 135.729179 77.180594) + (xy 135.860289 77.092989) (xy 135.971789 76.981489) (xy 136.059394 76.850379) (xy 136.119737 76.704697) + (xy 136.1505 76.550042) (xy 136.1505 76.392358) (xy 136.1505 76.392355) (xy 136.150499 76.392353) + (xy 136.119738 76.23771) (xy 136.119737 76.237703) (xy 136.119735 76.237698) (xy 136.059397 76.092027) + (xy 136.05939 76.092014) (xy 135.971789 75.960911) (xy 135.971786 75.960907) (xy 135.860292 75.849413) + (xy 135.860288 75.84941) (xy 135.729185 75.761809) (xy 135.729172 75.761802) (xy 135.583501 75.701464) + (xy 135.583489 75.701461) (xy 135.428845 75.6707) (xy 135.428842 75.6707) (xy 135.271158 75.6707) + (xy 135.271155 75.6707) (xy 135.11651 75.701461) (xy 135.116498 75.701464) (xy 134.970827 75.761802) + (xy 134.970814 75.761809) (xy 134.839711 75.84941) (xy 134.839707 75.849413) (xy 134.728213 75.960907) + (xy 134.72821 75.960911) (xy 134.640609 76.092014) (xy 134.640602 76.092027) (xy 134.580264 76.237698) + (xy 134.580261 76.23771) (xy 134.5495 76.392353) (xy 117.479436 76.392353) (xy 117.479436 72.685653) + (xy 119.1765 72.685653) (xy 119.1765 72.843346) (xy 119.207261 72.997989) (xy 119.207264 72.998001) + (xy 119.267602 73.143672) (xy 119.267609 73.143685) (xy 119.35521 73.274788) (xy 119.355213 73.274792) + (xy 119.466707 73.386286) (xy 119.466711 73.386289) (xy 119.597814 73.47389) (xy 119.597827 73.473897) + (xy 119.743498 73.534235) (xy 119.743503 73.534237) (xy 119.898153 73.564999) (xy 119.898156 73.565) + (xy 119.898158 73.565) (xy 120.055844 73.565) (xy 120.055845 73.564999) (xy 120.210497 73.534237) + (xy 120.356179 73.473894) (xy 120.487289 73.386289) (xy 120.598789 73.274789) (xy 120.686394 73.143679) + (xy 120.697135 73.117747) (xy 120.73029 73.037705) (xy 120.774131 72.983301) (xy 120.840425 72.961236) + (xy 120.864241 72.962683) (xy 120.948948 72.9761) (xy 120.94895 72.9761) (xy 121.153651 72.9761) + (xy 121.153652 72.9761) (xy 121.355834 72.944077) (xy 121.550519 72.88082) (xy 121.73291 72.787887) + (xy 121.82589 72.720332) (xy 121.898513 72.667571) (xy 121.898515 72.667568) (xy 121.898519 72.667566) + (xy 122.043266 72.522819) (xy 122.141582 72.387496) (xy 122.196911 72.344832) (xy 122.266524 72.338853) + (xy 122.32832 72.371458) (xy 122.342214 72.387493) (xy 122.436465 72.517219) (xy 122.440534 72.522819) + (xy 122.585286 72.667571) (xy 122.740249 72.780156) (xy 122.75089 72.787887) (xy 122.859734 72.843346) + (xy 122.933276 72.880818) (xy 122.933278 72.880818) (xy 122.933281 72.88082) (xy 123.037637 72.914727) + (xy 123.127965 72.944077) (xy 123.229057 72.960088) (xy 123.330148 72.9761) (xy 123.330149 72.9761) + (xy 123.534851 72.9761) (xy 123.534852 72.9761) (xy 123.737034 72.944077) (xy 123.931719 72.88082) + (xy 124.11411 72.787887) (xy 124.20709 72.720332) (xy 124.279713 72.667571) (xy 124.279715 72.667568) + (xy 124.279719 72.667566) (xy 124.424466 72.522819) (xy 124.522832 72.387427) (xy 124.578161 72.344763) + (xy 124.647774 72.338784) (xy 124.70957 72.371389) (xy 124.723464 72.387423) (xy 124.817765 72.517219) + (xy 124.821834 72.522819) (xy 124.966586 72.667571) (xy 125.121549 72.780156) (xy 125.13219 72.787887) + (xy 125.241034 72.843346) (xy 125.314576 72.880818) (xy 125.314578 72.880818) (xy 125.314581 72.88082) + (xy 125.418937 72.914727) (xy 125.509265 72.944077) (xy 125.610357 72.960088) (xy 125.711448 72.9761) + (xy 125.711449 72.9761) (xy 125.916151 72.9761) (xy 125.916152 72.9761) (xy 126.118334 72.944077) + (xy 126.313019 72.88082) (xy 126.49541 72.787887) (xy 126.58839 72.720332) (xy 126.661013 72.667571) + (xy 126.661015 72.667568) (xy 126.661019 72.667566) (xy 126.805766 72.522819) (xy 126.904082 72.387496) + (xy 126.959411 72.344832) (xy 127.029024 72.338853) (xy 127.09082 72.371458) (xy 127.104714 72.387493) + (xy 127.198965 72.517219) (xy 127.203034 72.522819) (xy 127.347786 72.667571) (xy 127.502749 72.780156) + (xy 127.51339 72.787887) (xy 127.622234 72.843346) (xy 127.695776 72.880818) (xy 127.695778 72.880818) + (xy 127.695781 72.88082) (xy 127.800137 72.914727) (xy 127.890465 72.944077) (xy 127.991557 72.960088) + (xy 128.092648 72.9761) (xy 128.092649 72.9761) (xy 128.297351 72.9761) (xy 128.297352 72.9761) + (xy 128.499534 72.944077) (xy 128.694219 72.88082) (xy 128.87661 72.787887) (xy 128.96959 72.720332) + (xy 129.042213 72.667571) (xy 129.042215 72.667568) (xy 129.042219 72.667566) (xy 129.186966 72.522819) + (xy 129.285332 72.387427) (xy 129.340661 72.344763) (xy 129.410274 72.338784) (xy 129.47207 72.371389) + (xy 129.485964 72.387423) (xy 129.580265 72.517219) (xy 129.584334 72.522819) (xy 129.729086 72.667571) + (xy 129.884049 72.780156) (xy 129.89469 72.787887) (xy 130.003534 72.843346) (xy 130.077076 72.880818) + (xy 130.077078 72.880818) (xy 130.077081 72.88082) (xy 130.181437 72.914727) (xy 130.271765 72.944077) + (xy 130.372857 72.960088) (xy 130.473948 72.9761) (xy 130.473949 72.9761) (xy 130.678651 72.9761) + (xy 130.678652 72.9761) (xy 130.880834 72.944077) (xy 131.075519 72.88082) (xy 131.25791 72.787887) + (xy 131.35089 72.720332) (xy 131.423513 72.667571) (xy 131.423515 72.667568) (xy 131.423519 72.667566) + (xy 131.568266 72.522819) (xy 131.568268 72.522815) (xy 131.568271 72.522813) (xy 131.663966 72.391098) + (xy 131.688587 72.35721) (xy 131.78152 72.174819) (xy 131.844777 71.980134) (xy 131.8768 71.777952) + (xy 131.8768 71.573248) (xy 135.2289 71.573248) (xy 135.2289 71.777951) (xy 135.260922 71.980134) + (xy 135.324181 72.174823) (xy 135.344223 72.214156) (xy 135.414261 72.351613) (xy 135.417115 72.357213) + (xy 135.537428 72.522813) (xy 135.682186 72.667571) (xy 135.837149 72.780156) (xy 135.84779 72.787887) + (xy 135.956634 72.843346) (xy 136.030176 72.880818) (xy 136.030178 72.880818) (xy 136.030181 72.88082) + (xy 136.134537 72.914727) (xy 136.224865 72.944077) (xy 136.325957 72.960088) (xy 136.427048 72.9761) + (xy 136.427049 72.9761) (xy 136.631751 72.9761) (xy 136.631752 72.9761) (xy 136.833934 72.944077) + (xy 137.028619 72.88082) (xy 137.21101 72.787887) (xy 137.30399 72.720332) (xy 137.376613 72.667571) + (xy 137.376615 72.667568) (xy 137.376619 72.667566) (xy 137.521366 72.522819) (xy 137.619682 72.387496) + (xy 137.675011 72.344832) (xy 137.744624 72.338853) (xy 137.80642 72.371458) (xy 137.820314 72.387493) + (xy 137.914565 72.517219) (xy 137.918634 72.522819) (xy 138.063386 72.667571) (xy 138.218349 72.780156) + (xy 138.22899 72.787887) (xy 138.337834 72.843346) (xy 138.411376 72.880818) (xy 138.411378 72.880818) + (xy 138.411381 72.88082) (xy 138.515737 72.914727) (xy 138.606065 72.944077) (xy 138.707157 72.960088) + (xy 138.808248 72.9761) (xy 138.808249 72.9761) (xy 139.012951 72.9761) (xy 139.012952 72.9761) + (xy 139.215134 72.944077) (xy 139.409819 72.88082) (xy 139.59221 72.787887) (xy 139.68519 72.720332) + (xy 139.757813 72.667571) (xy 139.757815 72.667568) (xy 139.757819 72.667566) (xy 139.902566 72.522819) + (xy 140.000932 72.387427) (xy 140.056261 72.344763) (xy 140.125874 72.338784) (xy 140.18767 72.371389) + (xy 140.201564 72.387423) (xy 140.295865 72.517219) (xy 140.299934 72.522819) (xy 140.444686 72.667571) + (xy 140.599649 72.780156) (xy 140.61029 72.787887) (xy 140.719134 72.843346) (xy 140.792676 72.880818) + (xy 140.792678 72.880818) (xy 140.792681 72.88082) (xy 140.897037 72.914727) (xy 140.987365 72.944077) + (xy 141.088457 72.960088) (xy 141.189548 72.9761) (xy 141.189549 72.9761) (xy 141.394251 72.9761) + (xy 141.394252 72.9761) (xy 141.596434 72.944077) (xy 141.791119 72.88082) (xy 141.97351 72.787887) + (xy 142.06649 72.720332) (xy 142.139113 72.667571) (xy 142.139115 72.667568) (xy 142.139119 72.667566) + (xy 142.283866 72.522819) (xy 142.382182 72.387496) (xy 142.437511 72.344832) (xy 142.507124 72.338853) + (xy 142.56892 72.371458) (xy 142.582814 72.387493) (xy 142.677065 72.517219) (xy 142.681134 72.522819) + (xy 142.825886 72.667571) (xy 142.980849 72.780156) (xy 142.99149 72.787887) (xy 143.100334 72.843346) + (xy 143.173876 72.880818) (xy 143.173878 72.880818) (xy 143.173881 72.88082) (xy 143.278237 72.914727) + (xy 143.368565 72.944077) (xy 143.469657 72.960088) (xy 143.570748 72.9761) (xy 143.570749 72.9761) + (xy 143.775451 72.9761) (xy 143.775452 72.9761) (xy 143.977634 72.944077) (xy 144.172319 72.88082) + (xy 144.35471 72.787887) (xy 144.44769 72.720332) (xy 144.520313 72.667571) (xy 144.520315 72.667568) + (xy 144.520319 72.667566) (xy 144.665066 72.522819) (xy 144.763432 72.387427) (xy 144.818761 72.344763) + (xy 144.888374 72.338784) (xy 144.95017 72.371389) (xy 144.964064 72.387423) (xy 145.058365 72.517219) + (xy 145.062434 72.522819) (xy 145.207186 72.667571) (xy 145.362149 72.780156) (xy 145.37279 72.787887) + (xy 145.481634 72.843346) (xy 145.555176 72.880818) (xy 145.555178 72.880818) (xy 145.555181 72.88082) + (xy 145.659537 72.914727) (xy 145.749865 72.944077) (xy 145.850957 72.960088) (xy 145.952048 72.9761) + (xy 145.952049 72.9761) (xy 146.156751 72.9761) (xy 146.156752 72.9761) (xy 146.358934 72.944077) + (xy 146.553619 72.88082) (xy 146.73601 72.787887) (xy 146.82899 72.720332) (xy 146.901613 72.667571) + (xy 146.901615 72.667568) (xy 146.901619 72.667566) (xy 147.046366 72.522819) (xy 147.046368 72.522815) + (xy 147.046371 72.522813) (xy 147.142066 72.391098) (xy 147.166687 72.35721) (xy 147.25962 72.174819) + (xy 147.322877 71.980134) (xy 147.3549 71.777952) (xy 147.3549 71.573248) (xy 150.707 71.573248) + (xy 150.707 71.777951) (xy 150.739022 71.980134) (xy 150.802281 72.174823) (xy 150.822323 72.214156) + (xy 150.892361 72.351613) (xy 150.895215 72.357213) (xy 151.015528 72.522813) (xy 151.160286 72.667571) + (xy 151.315249 72.780156) (xy 151.32589 72.787887) (xy 151.434734 72.843346) (xy 151.508276 72.880818) + (xy 151.508278 72.880818) (xy 151.508281 72.88082) (xy 151.612637 72.914727) (xy 151.702965 72.944077) + (xy 151.804057 72.960088) (xy 151.905148 72.9761) (xy 151.905149 72.9761) (xy 152.109851 72.9761) + (xy 152.109852 72.9761) (xy 152.312034 72.944077) (xy 152.506719 72.88082) (xy 152.68911 72.787887) + (xy 152.78209 72.720332) (xy 152.854713 72.667571) (xy 152.854715 72.667568) (xy 152.854719 72.667566) + (xy 152.999466 72.522819) (xy 153.097832 72.387427) (xy 153.153161 72.344763) (xy 153.222774 72.338784) + (xy 153.28457 72.371389) (xy 153.298464 72.387423) (xy 153.392765 72.517219) (xy 153.396834 72.522819) + (xy 153.541586 72.667571) (xy 153.696549 72.780156) (xy 153.70719 72.787887) (xy 153.816034 72.843346) + (xy 153.889576 72.880818) (xy 153.889578 72.880818) (xy 153.889581 72.88082) (xy 153.993937 72.914727) + (xy 154.084265 72.944077) (xy 154.185357 72.960088) (xy 154.286448 72.9761) (xy 154.286449 72.9761) + (xy 154.491151 72.9761) (xy 154.491152 72.9761) (xy 154.693334 72.944077) (xy 154.888019 72.88082) + (xy 155.07041 72.787887) (xy 155.16339 72.720332) (xy 155.236013 72.667571) (xy 155.236015 72.667568) + (xy 155.236019 72.667566) (xy 155.380766 72.522819) (xy 155.479082 72.387496) (xy 155.534411 72.344832) + (xy 155.604024 72.338853) (xy 155.66582 72.371458) (xy 155.679714 72.387493) (xy 155.773965 72.517219) + (xy 155.778034 72.522819) (xy 155.922786 72.667571) (xy 156.077749 72.780156) (xy 156.08839 72.787887) + (xy 156.197234 72.843346) (xy 156.270776 72.880818) (xy 156.270778 72.880818) (xy 156.270781 72.88082) + (xy 156.375137 72.914727) (xy 156.465465 72.944077) (xy 156.566557 72.960088) (xy 156.667648 72.9761) + (xy 156.667649 72.9761) (xy 156.872351 72.9761) (xy 156.872352 72.9761) (xy 157.074534 72.944077) + (xy 157.269219 72.88082) (xy 157.45161 72.787887) (xy 157.54459 72.720332) (xy 157.617213 72.667571) + (xy 157.617215 72.667568) (xy 157.617219 72.667566) (xy 157.761966 72.522819) (xy 157.860332 72.387427) + (xy 157.915661 72.344763) (xy 157.985274 72.338784) (xy 158.04707 72.371389) (xy 158.060964 72.387423) + (xy 158.155265 72.517219) (xy 158.159334 72.522819) (xy 158.304086 72.667571) (xy 158.459049 72.780156) + (xy 158.46969 72.787887) (xy 158.578534 72.843346) (xy 158.652076 72.880818) (xy 158.652078 72.880818) + (xy 158.652081 72.88082) (xy 158.756437 72.914727) (xy 158.846765 72.944077) (xy 158.947857 72.960088) + (xy 159.048948 72.9761) (xy 159.048949 72.9761) (xy 159.253651 72.9761) (xy 159.253652 72.9761) + (xy 159.455834 72.944077) (xy 159.650519 72.88082) (xy 159.83291 72.787887) (xy 159.92589 72.720332) + (xy 159.998513 72.667571) (xy 159.998515 72.667568) (xy 159.998519 72.667566) (xy 160.143266 72.522819) + (xy 160.241582 72.387496) (xy 160.296911 72.344832) (xy 160.366524 72.338853) (xy 160.42832 72.371458) + (xy 160.442214 72.387493) (xy 160.536465 72.517219) (xy 160.540534 72.522819) (xy 160.685286 72.667571) + (xy 160.840249 72.780156) (xy 160.85089 72.787887) (xy 160.959734 72.843346) (xy 161.033276 72.880818) + (xy 161.033278 72.880818) (xy 161.033281 72.88082) (xy 161.137637 72.914727) (xy 161.227965 72.944077) + (xy 161.329057 72.960088) (xy 161.430148 72.9761) (xy 161.430149 72.9761) (xy 161.634851 72.9761) + (xy 161.634852 72.9761) (xy 161.837034 72.944077) (xy 162.031719 72.88082) (xy 162.21411 72.787887) + (xy 162.30709 72.720332) (xy 162.379713 72.667571) (xy 162.379715 72.667568) (xy 162.379719 72.667566) + (xy 162.524466 72.522819) (xy 162.524468 72.522815) (xy 162.524471 72.522813) (xy 162.620166 72.391098) + (xy 162.644787 72.35721) (xy 162.73772 72.174819) (xy 162.800977 71.980134) (xy 162.833 71.777952) + (xy 162.833 71.573248) (xy 166.1851 71.573248) (xy 166.1851 71.777951) (xy 166.217122 71.980134) + (xy 166.280381 72.174823) (xy 166.300423 72.214156) (xy 166.370461 72.351613) (xy 166.373315 72.357213) + (xy 166.493628 72.522813) (xy 166.638386 72.667571) (xy 166.793349 72.780156) (xy 166.80399 72.787887) + (xy 166.912834 72.843346) (xy 166.986376 72.880818) (xy 166.986378 72.880818) (xy 166.986381 72.88082) + (xy 167.090737 72.914727) (xy 167.181065 72.944077) (xy 167.282157 72.960088) (xy 167.383248 72.9761) + (xy 167.383249 72.9761) (xy 167.587951 72.9761) (xy 167.587952 72.9761) (xy 167.790134 72.944077) + (xy 167.984819 72.88082) (xy 168.16721 72.787887) (xy 168.26019 72.720332) (xy 168.332813 72.667571) + (xy 168.332815 72.667568) (xy 168.332819 72.667566) (xy 168.477566 72.522819) (xy 168.575932 72.387427) + (xy 168.631261 72.344763) (xy 168.700874 72.338784) (xy 168.76267 72.371389) (xy 168.776564 72.387423) + (xy 168.870865 72.517219) (xy 168.874934 72.522819) (xy 169.019686 72.667571) (xy 169.174649 72.780156) + (xy 169.18529 72.787887) (xy 169.294134 72.843346) (xy 169.367676 72.880818) (xy 169.367678 72.880818) + (xy 169.367681 72.88082) (xy 169.472037 72.914727) (xy 169.562365 72.944077) (xy 169.663457 72.960088) + (xy 169.764548 72.9761) (xy 169.764549 72.9761) (xy 169.969251 72.9761) (xy 169.969252 72.9761) + (xy 170.171434 72.944077) (xy 170.366119 72.88082) (xy 170.54851 72.787887) (xy 170.64149 72.720332) + (xy 170.714113 72.667571) (xy 170.714115 72.667568) (xy 170.714119 72.667566) (xy 170.858866 72.522819) + (xy 170.957182 72.387496) (xy 171.012511 72.344832) (xy 171.082124 72.338853) (xy 171.14392 72.371458) + (xy 171.157814 72.387493) (xy 171.252065 72.517219) (xy 171.256134 72.522819) (xy 171.400886 72.667571) + (xy 171.555849 72.780156) (xy 171.56649 72.787887) (xy 171.675334 72.843346) (xy 171.748876 72.880818) + (xy 171.748878 72.880818) (xy 171.748881 72.88082) (xy 171.853237 72.914727) (xy 171.943565 72.944077) + (xy 172.044657 72.960088) (xy 172.145748 72.9761) (xy 172.145749 72.9761) (xy 172.350451 72.9761) + (xy 172.350452 72.9761) (xy 172.552634 72.944077) (xy 172.747319 72.88082) (xy 172.92971 72.787887) + (xy 173.02269 72.720332) (xy 173.095313 72.667571) (xy 173.095315 72.667568) (xy 173.095319 72.667566) + (xy 173.240066 72.522819) (xy 173.335765 72.391098) (xy 173.391095 72.348432) (xy 173.460708 72.342453) + (xy 173.522503 72.375058) (xy 173.536399 72.391094) (xy 173.622824 72.510048) (xy 173.628034 72.517219) + (xy 173.772786 72.661971) (xy 173.927749 72.774556) (xy 173.93839 72.782287) (xy 174.039207 72.833656) + (xy 174.120776 72.875218) (xy 174.120778 72.875218) (xy 174.120781 72.87522) (xy 174.225137 72.909127) + (xy 174.315465 72.938477) (xy 174.350822 72.944077) (xy 174.517648 72.9705) (xy 174.517649 72.9705) + (xy 174.722351 72.9705) (xy 174.722352 72.9705) (xy 174.924534 72.938477) (xy 175.119219 72.87522) + (xy 175.30161 72.782287) (xy 175.39459 72.714732) (xy 175.467213 72.661971) (xy 175.467215 72.661968) + (xy 175.467219 72.661966) (xy 175.611966 72.517219) (xy 175.611968 72.517215) (xy 175.611971 72.517213) + (xy 175.664732 72.44459) (xy 175.732287 72.35161) (xy 175.82522 72.169219) (xy 175.888477 71.974534) + (xy 175.9205 71.772352) (xy 175.9205 71.573248) (xy 179.282 71.573248) (xy 179.282 71.777951) (xy 179.314022 71.980134) + (xy 179.377281 72.174823) (xy 179.397323 72.214156) (xy 179.467361 72.351613) (xy 179.470215 72.357213) + (xy 179.590528 72.522813) (xy 179.735286 72.667571) (xy 179.890249 72.780156) (xy 179.90089 72.787887) + (xy 180.009734 72.843346) (xy 180.083276 72.880818) (xy 180.083278 72.880818) (xy 180.083281 72.88082) + (xy 180.187637 72.914727) (xy 180.277965 72.944077) (xy 180.379057 72.960088) (xy 180.480148 72.9761) + (xy 180.480149 72.9761) (xy 180.684851 72.9761) (xy 180.684852 72.9761) (xy 180.887034 72.944077) + (xy 181.081719 72.88082) (xy 181.26411 72.787887) (xy 181.35709 72.720332) (xy 181.429713 72.667571) + (xy 181.429715 72.667568) (xy 181.429719 72.667566) (xy 181.574466 72.522819) (xy 181.667966 72.394126) + (xy 181.723295 72.35146) (xy 181.792908 72.345481) (xy 181.854703 72.378086) (xy 181.868599 72.394121) + (xy 181.952824 72.510048) (xy 181.958034 72.517219) (xy 182.102786 72.661971) (xy 182.257749 72.774556) + (xy 182.26839 72.782287) (xy 182.369207 72.833656) (xy 182.450776 72.875218) (xy 182.450778 72.875218) + (xy 182.450781 72.87522) (xy 182.555137 72.909127) (xy 182.645465 72.938477) (xy 182.680822 72.944077) + (xy 182.847648 72.9705) (xy 182.847649 72.9705) (xy 183.052351 72.9705) (xy 183.052352 72.9705) + (xy 183.254534 72.938477) (xy 183.449219 72.87522) (xy 183.63161 72.782287) (xy 183.72459 72.714732) + (xy 183.797213 72.661971) (xy 183.797215 72.661968) (xy 183.797219 72.661966) (xy 183.941966 72.517219) + (xy 184.045147 72.375201) (xy 184.100476 72.332535) (xy 184.170089 72.326556) (xy 184.231884 72.359161) + (xy 184.245783 72.375201) (xy 184.353028 72.522812) (xy 184.353032 72.522817) (xy 184.497786 72.667571) + (xy 184.652749 72.780156) (xy 184.66339 72.787887) (xy 184.772234 72.843346) (xy 184.845776 72.880818) + (xy 184.845778 72.880818) (xy 184.845781 72.88082) (xy 184.950137 72.914727) (xy 185.040465 72.944077) + (xy 185.141557 72.960088) (xy 185.242648 72.9761) (xy 185.242649 72.9761) (xy 185.447351 72.9761) + (xy 185.447352 72.9761) (xy 185.649534 72.944077) (xy 185.844219 72.88082) (xy 186.02661 72.787887) + (xy 186.11959 72.720332) (xy 186.192213 72.667571) (xy 186.192215 72.667568) (xy 186.192219 72.667566) + (xy 186.336966 72.522819) (xy 186.435332 72.387427) (xy 186.490661 72.344763) (xy 186.560274 72.338784) + (xy 186.62207 72.371389) (xy 186.635964 72.387423) (xy 186.730265 72.517219) (xy 186.734334 72.522819) + (xy 186.879086 72.667571) (xy 187.034049 72.780156) (xy 187.04469 72.787887) (xy 187.153534 72.843346) + (xy 187.227076 72.880818) (xy 187.227078 72.880818) (xy 187.227081 72.88082) (xy 187.331437 72.914727) + (xy 187.421765 72.944077) (xy 187.522857 72.960088) (xy 187.623948 72.9761) (xy 187.623949 72.9761) + (xy 187.828651 72.9761) (xy 187.828652 72.9761) (xy 188.030834 72.944077) (xy 188.225519 72.88082) + (xy 188.40791 72.787887) (xy 188.50089 72.720332) (xy 188.573513 72.667571) (xy 188.573515 72.667568) + (xy 188.573519 72.667566) (xy 188.718266 72.522819) (xy 188.718268 72.522815) (xy 188.718271 72.522813) + (xy 188.813966 72.391098) (xy 188.838587 72.35721) (xy 188.93152 72.174819) (xy 188.994777 71.980134) + (xy 189.0268 71.777952) (xy 189.0268 71.573248) (xy 192.3789 71.573248) (xy 192.3789 71.777951) + (xy 192.410922 71.980134) (xy 192.474181 72.174823) (xy 192.494223 72.214156) (xy 192.564261 72.351613) + (xy 192.567115 72.357213) (xy 192.687428 72.522813) (xy 192.832186 72.667571) (xy 192.987149 72.780156) + (xy 192.99779 72.787887) (xy 193.106634 72.843346) (xy 193.180176 72.880818) (xy 193.180178 72.880818) + (xy 193.180181 72.88082) (xy 193.284537 72.914727) (xy 193.374865 72.944077) (xy 193.475957 72.960088) + (xy 193.577048 72.9761) (xy 193.577049 72.9761) (xy 193.781751 72.9761) (xy 193.781752 72.9761) + (xy 193.983934 72.944077) (xy 194.178619 72.88082) (xy 194.36101 72.787887) (xy 194.45399 72.720332) + (xy 194.526613 72.667571) (xy 194.526615 72.667568) (xy 194.526619 72.667566) (xy 194.671366 72.522819) + (xy 194.769682 72.387496) (xy 194.825011 72.344832) (xy 194.894624 72.338853) (xy 194.95642 72.371458) + (xy 194.970314 72.387493) (xy 195.064565 72.517219) (xy 195.068634 72.522819) (xy 195.213386 72.667571) + (xy 195.368349 72.780156) (xy 195.37899 72.787887) (xy 195.487834 72.843346) (xy 195.561376 72.880818) + (xy 195.561378 72.880818) (xy 195.561381 72.88082) (xy 195.665737 72.914727) (xy 195.756065 72.944077) + (xy 195.857157 72.960088) (xy 195.958248 72.9761) (xy 195.958249 72.9761) (xy 196.162951 72.9761) + (xy 196.162952 72.9761) (xy 196.365134 72.944077) (xy 196.559819 72.88082) (xy 196.74221 72.787887) + (xy 196.83519 72.720332) (xy 196.907813 72.667571) (xy 196.907815 72.667568) (xy 196.907819 72.667566) + (xy 197.052566 72.522819) (xy 197.150932 72.387427) (xy 197.206261 72.344763) (xy 197.275874 72.338784) + (xy 197.33767 72.371389) (xy 197.351564 72.387423) (xy 197.445865 72.517219) (xy 197.449934 72.522819) + (xy 197.594686 72.667571) (xy 197.749649 72.780156) (xy 197.76029 72.787887) (xy 197.869134 72.843346) + (xy 197.942676 72.880818) (xy 197.942678 72.880818) (xy 197.942681 72.88082) (xy 198.047037 72.914727) + (xy 198.137365 72.944077) (xy 198.238457 72.960088) (xy 198.339548 72.9761) (xy 198.339549 72.9761) + (xy 198.544251 72.9761) (xy 198.544252 72.9761) (xy 198.746434 72.944077) (xy 198.941119 72.88082) + (xy 199.12351 72.787887) (xy 199.21649 72.720332) (xy 199.289113 72.667571) (xy 199.289115 72.667568) + (xy 199.289119 72.667566) (xy 199.433866 72.522819) (xy 199.532182 72.387496) (xy 199.587511 72.344832) + (xy 199.657124 72.338853) (xy 199.71892 72.371458) (xy 199.732814 72.387493) (xy 199.827065 72.517219) + (xy 199.831134 72.522819) (xy 199.975886 72.667571) (xy 200.130849 72.780156) (xy 200.14149 72.787887) + (xy 200.250334 72.843346) (xy 200.323876 72.880818) (xy 200.323878 72.880818) (xy 200.323881 72.88082) + (xy 200.428237 72.914727) (xy 200.518565 72.944077) (xy 200.619657 72.960088) (xy 200.720748 72.9761) + (xy 200.720749 72.9761) (xy 200.925451 72.9761) (xy 200.925452 72.9761) (xy 201.127634 72.944077) + (xy 201.322319 72.88082) (xy 201.50471 72.787887) (xy 201.59769 72.720332) (xy 201.670313 72.667571) + (xy 201.670315 72.667568) (xy 201.670319 72.667566) (xy 201.815066 72.522819) (xy 201.913432 72.387427) + (xy 201.968761 72.344763) (xy 202.038374 72.338784) (xy 202.10017 72.371389) (xy 202.114064 72.387423) + (xy 202.208365 72.517219) (xy 202.212434 72.522819) (xy 202.357186 72.667571) (xy 202.512149 72.780156) + (xy 202.52279 72.787887) (xy 202.631634 72.843346) (xy 202.705176 72.880818) (xy 202.705178 72.880818) + (xy 202.705181 72.88082) (xy 202.809537 72.914727) (xy 202.899865 72.944077) (xy 203.000957 72.960088) + (xy 203.102048 72.9761) (xy 203.102049 72.9761) (xy 203.306751 72.9761) (xy 203.306752 72.9761) + (xy 203.508934 72.944077) (xy 203.703619 72.88082) (xy 203.88601 72.787887) (xy 203.97899 72.720332) + (xy 204.051613 72.667571) (xy 204.051615 72.667568) (xy 204.051619 72.667566) (xy 204.196366 72.522819) + (xy 204.196368 72.522815) (xy 204.196371 72.522813) (xy 204.292066 72.391098) (xy 204.316687 72.35721) + (xy 204.40962 72.174819) (xy 204.472877 71.980134) (xy 204.5049 71.777952) (xy 204.5049 71.573248) + (xy 207.857 71.573248) (xy 207.857 71.777951) (xy 207.889022 71.980134) (xy 207.952281 72.174823) + (xy 207.972323 72.214156) (xy 208.042361 72.351613) (xy 208.045215 72.357213) (xy 208.165528 72.522813) + (xy 208.310286 72.667571) (xy 208.465249 72.780156) (xy 208.47589 72.787887) (xy 208.584734 72.843346) + (xy 208.658276 72.880818) (xy 208.658278 72.880818) (xy 208.658281 72.88082) (xy 208.762637 72.914727) + (xy 208.852965 72.944077) (xy 208.954057 72.960088) (xy 209.055148 72.9761) (xy 209.055149 72.9761) + (xy 209.259851 72.9761) (xy 209.259852 72.9761) (xy 209.462034 72.944077) (xy 209.656719 72.88082) + (xy 209.83911 72.787887) (xy 209.93209 72.720332) (xy 210.004713 72.667571) (xy 210.004715 72.667568) + (xy 210.004719 72.667566) (xy 210.149466 72.522819) (xy 210.247832 72.387427) (xy 210.303161 72.344763) + (xy 210.372774 72.338784) (xy 210.43457 72.371389) (xy 210.448464 72.387423) (xy 210.542765 72.517219) + (xy 210.546834 72.522819) (xy 210.691586 72.667571) (xy 210.846549 72.780156) (xy 210.85719 72.787887) + (xy 210.966034 72.843346) (xy 211.039576 72.880818) (xy 211.039578 72.880818) (xy 211.039581 72.88082) + (xy 211.143937 72.914727) (xy 211.234265 72.944077) (xy 211.335357 72.960088) (xy 211.436448 72.9761) + (xy 211.436449 72.9761) (xy 211.641151 72.9761) (xy 211.641152 72.9761) (xy 211.843334 72.944077) + (xy 212.038019 72.88082) (xy 212.22041 72.787887) (xy 212.31339 72.720332) (xy 212.386013 72.667571) + (xy 212.386015 72.667568) (xy 212.386019 72.667566) (xy 212.530766 72.522819) (xy 212.629082 72.387496) + (xy 212.684411 72.344832) (xy 212.754024 72.338853) (xy 212.81582 72.371458) (xy 212.829714 72.387493) + (xy 212.923965 72.517219) (xy 212.928034 72.522819) (xy 213.072786 72.667571) (xy 213.227749 72.780156) + (xy 213.23839 72.787887) (xy 213.347234 72.843346) (xy 213.420776 72.880818) (xy 213.420778 72.880818) + (xy 213.420781 72.88082) (xy 213.525137 72.914727) (xy 213.615465 72.944077) (xy 213.716557 72.960088) + (xy 213.817648 72.9761) (xy 213.817649 72.9761) (xy 214.022351 72.9761) (xy 214.022352 72.9761) + (xy 214.224534 72.944077) (xy 214.419219 72.88082) (xy 214.60161 72.787887) (xy 214.69459 72.720332) + (xy 214.767213 72.667571) (xy 214.767215 72.667568) (xy 214.767219 72.667566) (xy 214.911966 72.522819) + (xy 215.010332 72.387427) (xy 215.065661 72.344763) (xy 215.135274 72.338784) (xy 215.19707 72.371389) + (xy 215.210964 72.387423) (xy 215.305265 72.517219) (xy 215.309334 72.522819) (xy 215.454086 72.667571) + (xy 215.609049 72.780156) (xy 215.61969 72.787887) (xy 215.728534 72.843346) (xy 215.802076 72.880818) + (xy 215.802078 72.880818) (xy 215.802081 72.88082) (xy 215.906437 72.914727) (xy 215.996765 72.944077) + (xy 216.097857 72.960088) (xy 216.198948 72.9761) (xy 216.198949 72.9761) (xy 216.403651 72.9761) + (xy 216.403652 72.9761) (xy 216.605834 72.944077) (xy 216.800519 72.88082) (xy 216.98291 72.787887) + (xy 217.07589 72.720332) (xy 217.148513 72.667571) (xy 217.148515 72.667568) (xy 217.148519 72.667566) + (xy 217.293266 72.522819) (xy 217.293268 72.522815) (xy 217.293271 72.522813) (xy 217.388966 72.391098) + (xy 217.413587 72.35721) (xy 217.50652 72.174819) (xy 217.569777 71.980134) (xy 217.6018 71.777952) + (xy 217.6018 71.573248) (xy 220.9539 71.573248) (xy 220.9539 71.777951) (xy 220.985922 71.980134) + (xy 221.049181 72.174823) (xy 221.069223 72.214156) (xy 221.139261 72.351613) (xy 221.142115 72.357213) + (xy 221.262428 72.522813) (xy 221.407186 72.667571) (xy 221.562149 72.780156) (xy 221.57279 72.787887) + (xy 221.681634 72.843346) (xy 221.755176 72.880818) (xy 221.755178 72.880818) (xy 221.755181 72.88082) + (xy 221.859537 72.914727) (xy 221.949865 72.944077) (xy 222.050957 72.960088) (xy 222.152048 72.9761) + (xy 222.152049 72.9761) (xy 222.356751 72.9761) (xy 222.356752 72.9761) (xy 222.558934 72.944077) + (xy 222.753619 72.88082) (xy 222.93601 72.787887) (xy 223.02899 72.720332) (xy 223.101613 72.667571) + (xy 223.101615 72.667568) (xy 223.101619 72.667566) (xy 223.246366 72.522819) (xy 223.344682 72.387496) + (xy 223.400011 72.344832) (xy 223.469624 72.338853) (xy 223.53142 72.371458) (xy 223.545314 72.387493) + (xy 223.639565 72.517219) (xy 223.643634 72.522819) (xy 223.788386 72.667571) (xy 223.943349 72.780156) + (xy 223.95399 72.787887) (xy 224.062834 72.843346) (xy 224.136376 72.880818) (xy 224.136378 72.880818) + (xy 224.136381 72.88082) (xy 224.240737 72.914727) (xy 224.331065 72.944077) (xy 224.432157 72.960088) + (xy 224.533248 72.9761) (xy 224.533249 72.9761) (xy 224.737951 72.9761) (xy 224.737952 72.9761) + (xy 224.940134 72.944077) (xy 225.134819 72.88082) (xy 225.31721 72.787887) (xy 225.41019 72.720332) + (xy 225.482813 72.667571) (xy 225.482815 72.667568) (xy 225.482819 72.667566) (xy 225.627566 72.522819) + (xy 225.725932 72.387427) (xy 225.781261 72.344763) (xy 225.850874 72.338784) (xy 225.91267 72.371389) + (xy 225.926564 72.387423) (xy 226.020865 72.517219) (xy 226.024934 72.522819) (xy 226.169686 72.667571) + (xy 226.324649 72.780156) (xy 226.33529 72.787887) (xy 226.444134 72.843346) (xy 226.517676 72.880818) + (xy 226.517678 72.880818) (xy 226.517681 72.88082) (xy 226.622037 72.914727) (xy 226.712365 72.944077) + (xy 226.813457 72.960088) (xy 226.914548 72.9761) (xy 226.914549 72.9761) (xy 227.119251 72.9761) + (xy 227.119252 72.9761) (xy 227.321434 72.944077) (xy 227.516119 72.88082) (xy 227.69851 72.787887) + (xy 227.79149 72.720332) (xy 227.864113 72.667571) (xy 227.864115 72.667568) (xy 227.864119 72.667566) + (xy 228.008866 72.522819) (xy 228.107182 72.387496) (xy 228.162511 72.344832) (xy 228.232124 72.338853) + (xy 228.29392 72.371458) (xy 228.307814 72.387493) (xy 228.402065 72.517219) (xy 228.406134 72.522819) + (xy 228.550886 72.667571) (xy 228.705849 72.780156) (xy 228.71649 72.787887) (xy 228.825334 72.843346) + (xy 228.898876 72.880818) (xy 228.898878 72.880818) (xy 228.898881 72.88082) (xy 229.003237 72.914727) + (xy 229.093565 72.944077) (xy 229.194657 72.960088) (xy 229.295748 72.9761) (xy 229.295749 72.9761) + (xy 229.500451 72.9761) (xy 229.500452 72.9761) (xy 229.702634 72.944077) (xy 229.897319 72.88082) + (xy 230.07971 72.787887) (xy 230.17269 72.720332) (xy 230.245313 72.667571) (xy 230.245315 72.667568) + (xy 230.245319 72.667566) (xy 230.390066 72.522819) (xy 230.390068 72.522815) (xy 230.390071 72.522813) + (xy 230.485766 72.391098) (xy 230.510387 72.35721) (xy 230.60332 72.174819) (xy 230.666577 71.980134) + (xy 230.6986 71.777952) (xy 230.6986 71.573248) (xy 234.0508 71.573248) (xy 234.0508 71.777951) + (xy 234.082822 71.980134) (xy 234.146081 72.174823) (xy 234.166123 72.214156) (xy 234.236161 72.351613) + (xy 234.239015 72.357213) (xy 234.359328 72.522813) (xy 234.504086 72.667571) (xy 234.659049 72.780156) + (xy 234.66969 72.787887) (xy 234.778534 72.843346) (xy 234.852076 72.880818) (xy 234.852078 72.880818) + (xy 234.852081 72.88082) (xy 234.956437 72.914727) (xy 235.046765 72.944077) (xy 235.147857 72.960088) + (xy 235.248948 72.9761) (xy 235.248949 72.9761) (xy 235.453651 72.9761) (xy 235.453652 72.9761) + (xy 235.655834 72.944077) (xy 235.850519 72.88082) (xy 236.03291 72.787887) (xy 236.12589 72.720332) + (xy 236.198513 72.667571) (xy 236.198515 72.667568) (xy 236.198519 72.667566) (xy 236.343266 72.522819) + (xy 236.441582 72.387496) (xy 236.496911 72.344832) (xy 236.566524 72.338853) (xy 236.62832 72.371458) + (xy 236.642214 72.387493) (xy 236.736465 72.517219) (xy 236.740534 72.522819) (xy 236.885286 72.667571) + (xy 237.040249 72.780156) (xy 237.05089 72.787887) (xy 237.159734 72.843346) (xy 237.233276 72.880818) + (xy 237.233278 72.880818) (xy 237.233281 72.88082) (xy 237.337637 72.914727) (xy 237.427965 72.944077) + (xy 237.529057 72.960088) (xy 237.630148 72.9761) (xy 237.630149 72.9761) (xy 237.834851 72.9761) + (xy 237.834852 72.9761) (xy 238.037034 72.944077) (xy 238.231719 72.88082) (xy 238.41411 72.787887) + (xy 238.50709 72.720332) (xy 238.579713 72.667571) (xy 238.579715 72.667568) (xy 238.579719 72.667566) + (xy 238.724466 72.522819) (xy 238.822832 72.387427) (xy 238.878161 72.344763) (xy 238.947774 72.338784) + (xy 239.00957 72.371389) (xy 239.023464 72.387423) (xy 239.117765 72.517219) (xy 239.121834 72.522819) + (xy 239.266586 72.667571) (xy 239.421549 72.780156) (xy 239.43219 72.787887) (xy 239.541034 72.843346) + (xy 239.614576 72.880818) (xy 239.614578 72.880818) (xy 239.614581 72.88082) (xy 239.718937 72.914727) + (xy 239.809265 72.944077) (xy 239.910357 72.960088) (xy 240.011448 72.9761) (xy 240.011449 72.9761) + (xy 240.216151 72.9761) (xy 240.216152 72.9761) (xy 240.418334 72.944077) (xy 240.613019 72.88082) + (xy 240.79541 72.787887) (xy 240.88839 72.720332) (xy 240.961013 72.667571) (xy 240.961015 72.667568) + (xy 240.961019 72.667566) (xy 241.105766 72.522819) (xy 241.204082 72.387496) (xy 241.259411 72.344832) + (xy 241.329024 72.338853) (xy 241.39082 72.371458) (xy 241.404714 72.387493) (xy 241.498965 72.517219) + (xy 241.503034 72.522819) (xy 241.647786 72.667571) (xy 241.802749 72.780156) (xy 241.81339 72.787887) + (xy 241.922234 72.843346) (xy 241.995776 72.880818) (xy 241.995778 72.880818) (xy 241.995781 72.88082) + (xy 242.100137 72.914727) (xy 242.190465 72.944077) (xy 242.291557 72.960088) (xy 242.392648 72.9761) + (xy 242.392649 72.9761) (xy 242.597351 72.9761) (xy 242.597352 72.9761) (xy 242.799534 72.944077) + (xy 242.994219 72.88082) (xy 243.17661 72.787887) (xy 243.26959 72.720332) (xy 243.342213 72.667571) + (xy 243.342215 72.667568) (xy 243.342219 72.667566) (xy 243.486966 72.522819) (xy 243.486968 72.522815) + (xy 243.486971 72.522813) (xy 243.582666 72.391098) (xy 243.607287 72.35721) (xy 243.70022 72.174819) + (xy 243.763477 71.980134) (xy 243.7955 71.777952) (xy 243.7955 71.573248) (xy 247.1476 71.573248) + (xy 247.1476 71.777951) (xy 247.179622 71.980134) (xy 247.242881 72.174823) (xy 247.262923 72.214156) + (xy 247.332961 72.351613) (xy 247.335815 72.357213) (xy 247.456128 72.522813) (xy 247.600886 72.667571) + (xy 247.755849 72.780156) (xy 247.76649 72.787887) (xy 247.875334 72.843346) (xy 247.948876 72.880818) + (xy 247.948878 72.880818) (xy 247.948881 72.88082) (xy 248.053237 72.914727) (xy 248.143565 72.944077) + (xy 248.244657 72.960088) (xy 248.345748 72.9761) (xy 248.345749 72.9761) (xy 248.550451 72.9761) + (xy 248.550452 72.9761) (xy 248.752634 72.944077) (xy 248.947319 72.88082) (xy 249.12971 72.787887) + (xy 249.22269 72.720332) (xy 249.295313 72.667571) (xy 249.295315 72.667568) (xy 249.295319 72.667566) + (xy 249.440066 72.522819) (xy 249.538432 72.387427) (xy 249.593761 72.344763) (xy 249.663374 72.338784) + (xy 249.72517 72.371389) (xy 249.739064 72.387423) (xy 249.833365 72.517219) (xy 249.837434 72.522819) + (xy 249.982186 72.667571) (xy 250.137149 72.780156) (xy 250.14779 72.787887) (xy 250.256634 72.843346) + (xy 250.330176 72.880818) (xy 250.330178 72.880818) (xy 250.330181 72.88082) (xy 250.434537 72.914727) + (xy 250.524865 72.944077) (xy 250.625957 72.960088) (xy 250.727048 72.9761) (xy 250.727049 72.9761) + (xy 250.931751 72.9761) (xy 250.931752 72.9761) (xy 251.133934 72.944077) (xy 251.328619 72.88082) + (xy 251.51101 72.787887) (xy 251.60399 72.720332) (xy 251.676613 72.667571) (xy 251.676615 72.667568) + (xy 251.676619 72.667566) (xy 251.821366 72.522819) (xy 251.919682 72.387496) (xy 251.975011 72.344832) + (xy 252.044624 72.338853) (xy 252.10642 72.371458) (xy 252.120314 72.387493) (xy 252.214565 72.517219) + (xy 252.218634 72.522819) (xy 252.363386 72.667571) (xy 252.518349 72.780156) (xy 252.52899 72.787887) + (xy 252.637834 72.843346) (xy 252.711376 72.880818) (xy 252.711378 72.880818) (xy 252.711381 72.88082) + (xy 252.815737 72.914727) (xy 252.906065 72.944077) (xy 253.007157 72.960088) (xy 253.108248 72.9761) + (xy 253.108249 72.9761) (xy 253.312951 72.9761) (xy 253.312952 72.9761) (xy 253.515134 72.944077) + (xy 253.709819 72.88082) (xy 253.89221 72.787887) (xy 253.98519 72.720332) (xy 254.057813 72.667571) + (xy 254.057815 72.667568) (xy 254.057819 72.667566) (xy 254.202566 72.522819) (xy 254.300932 72.387427) + (xy 254.356261 72.344763) (xy 254.425874 72.338784) (xy 254.48767 72.371389) (xy 254.501564 72.387423) + (xy 254.595865 72.517219) (xy 254.599934 72.522819) (xy 254.744686 72.667571) (xy 254.899649 72.780156) + (xy 254.91029 72.787887) (xy 255.019134 72.843346) (xy 255.092676 72.880818) (xy 255.092678 72.880818) + (xy 255.092681 72.88082) (xy 255.197037 72.914727) (xy 255.287365 72.944077) (xy 255.388457 72.960088) + (xy 255.489548 72.9761) (xy 255.489549 72.9761) (xy 255.694251 72.9761) (xy 255.694252 72.9761) + (xy 255.896434 72.944077) (xy 256.091119 72.88082) (xy 256.27351 72.787887) (xy 256.36649 72.720332) + (xy 256.439113 72.667571) (xy 256.439115 72.667568) (xy 256.439119 72.667566) (xy 256.583866 72.522819) + (xy 256.682182 72.387496) (xy 256.737511 72.344832) (xy 256.807124 72.338853) (xy 256.86892 72.371458) + (xy 256.882814 72.387493) (xy 256.977065 72.517219) (xy 256.981134 72.522819) (xy 257.125886 72.667571) + (xy 257.280849 72.780156) (xy 257.29149 72.787887) (xy 257.400334 72.843346) (xy 257.473876 72.880818) + (xy 257.473878 72.880818) (xy 257.473881 72.88082) (xy 257.578237 72.914727) (xy 257.668565 72.944077) + (xy 257.769657 72.960088) (xy 257.870748 72.9761) (xy 257.870749 72.9761) (xy 258.075451 72.9761) + (xy 258.075452 72.9761) (xy 258.277634 72.944077) (xy 258.472319 72.88082) (xy 258.65471 72.787887) + (xy 258.74769 72.720332) (xy 258.820313 72.667571) (xy 258.820315 72.667568) (xy 258.820319 72.667566) + (xy 258.965066 72.522819) (xy 258.965068 72.522815) (xy 258.965071 72.522813) (xy 259.060766 72.391098) + (xy 259.085387 72.35721) (xy 259.17832 72.174819) (xy 259.241577 71.980134) (xy 259.2736 71.777952) + (xy 259.2736 71.573248) (xy 262.6258 71.573248) (xy 262.6258 71.777951) (xy 262.657822 71.980134) + (xy 262.721081 72.174823) (xy 262.741123 72.214156) (xy 262.811161 72.351613) (xy 262.814015 72.357213) + (xy 262.934328 72.522813) (xy 263.079086 72.667571) (xy 263.234049 72.780156) (xy 263.24469 72.787887) + (xy 263.353534 72.843346) (xy 263.427076 72.880818) (xy 263.427078 72.880818) (xy 263.427081 72.88082) + (xy 263.531437 72.914727) (xy 263.621765 72.944077) (xy 263.722857 72.960088) (xy 263.823948 72.9761) + (xy 263.823949 72.9761) (xy 264.028651 72.9761) (xy 264.028652 72.9761) (xy 264.230834 72.944077) + (xy 264.425519 72.88082) (xy 264.60791 72.787887) (xy 264.70089 72.720332) (xy 264.773513 72.667571) + (xy 264.773515 72.667568) (xy 264.773519 72.667566) (xy 264.918266 72.522819) (xy 265.016582 72.387496) + (xy 265.071911 72.344832) (xy 265.141524 72.338853) (xy 265.20332 72.371458) (xy 265.217214 72.387493) + (xy 265.311465 72.517219) (xy 265.315534 72.522819) (xy 265.460286 72.667571) (xy 265.615249 72.780156) + (xy 265.62589 72.787887) (xy 265.734734 72.843346) (xy 265.808276 72.880818) (xy 265.808278 72.880818) + (xy 265.808281 72.88082) (xy 265.912637 72.914727) (xy 266.002965 72.944077) (xy 266.104057 72.960088) + (xy 266.205148 72.9761) (xy 266.205149 72.9761) (xy 266.409851 72.9761) (xy 266.409852 72.9761) + (xy 266.612034 72.944077) (xy 266.806719 72.88082) (xy 266.98911 72.787887) (xy 267.08209 72.720332) + (xy 267.154713 72.667571) (xy 267.154715 72.667568) (xy 267.154719 72.667566) (xy 267.299466 72.522819) + (xy 267.397832 72.387427) (xy 267.453161 72.344763) (xy 267.522774 72.338784) (xy 267.58457 72.371389) + (xy 267.598464 72.387423) (xy 267.692765 72.517219) (xy 267.696834 72.522819) (xy 267.841586 72.667571) + (xy 267.996549 72.780156) (xy 268.00719 72.787887) (xy 268.116034 72.843346) (xy 268.189576 72.880818) + (xy 268.189578 72.880818) (xy 268.189581 72.88082) (xy 268.293937 72.914727) (xy 268.384265 72.944077) + (xy 268.485357 72.960088) (xy 268.586448 72.9761) (xy 268.586449 72.9761) (xy 268.791151 72.9761) + (xy 268.791152 72.9761) (xy 268.993334 72.944077) (xy 269.188019 72.88082) (xy 269.37041 72.787887) + (xy 269.46339 72.720332) (xy 269.536013 72.667571) (xy 269.536015 72.667568) (xy 269.536019 72.667566) + (xy 269.680766 72.522819) (xy 269.779082 72.387496) (xy 269.834411 72.344832) (xy 269.904024 72.338853) + (xy 269.96582 72.371458) (xy 269.979714 72.387493) (xy 270.073965 72.517219) (xy 270.078034 72.522819) + (xy 270.222786 72.667571) (xy 270.377749 72.780156) (xy 270.38839 72.787887) (xy 270.497234 72.843346) + (xy 270.570776 72.880818) (xy 270.570778 72.880818) (xy 270.570781 72.88082) (xy 270.675137 72.914727) + (xy 270.765465 72.944077) (xy 270.866557 72.960088) (xy 270.967648 72.9761) (xy 270.967649 72.9761) + (xy 271.172351 72.9761) (xy 271.172352 72.9761) (xy 271.374534 72.944077) (xy 271.569219 72.88082) + (xy 271.75161 72.787887) (xy 271.84459 72.720332) (xy 271.917213 72.667571) (xy 271.917215 72.667568) + (xy 271.917219 72.667566) (xy 272.061966 72.522819) (xy 272.160332 72.387427) (xy 272.215661 72.344763) + (xy 272.285274 72.338784) (xy 272.34707 72.371389) (xy 272.360964 72.387423) (xy 272.455265 72.517219) + (xy 272.459334 72.522819) (xy 272.604086 72.667571) (xy 272.759049 72.780156) (xy 272.76969 72.787887) + (xy 272.878534 72.843346) (xy 272.952076 72.880818) (xy 272.952078 72.880818) (xy 272.952081 72.88082) + (xy 273.056437 72.914727) (xy 273.146765 72.944077) (xy 273.247857 72.960088) (xy 273.348948 72.9761) + (xy 273.348949 72.9761) (xy 273.553651 72.9761) (xy 273.553652 72.9761) (xy 273.755834 72.944077) + (xy 273.950519 72.88082) (xy 274.13291 72.787887) (xy 274.22589 72.720332) (xy 274.298513 72.667571) + (xy 274.298515 72.667568) (xy 274.298519 72.667566) (xy 274.443266 72.522819) (xy 274.443268 72.522815) + (xy 274.443271 72.522813) (xy 274.538966 72.391098) (xy 274.563587 72.35721) (xy 274.65652 72.174819) + (xy 274.719777 71.980134) (xy 274.7518 71.777952) (xy 274.7518 71.573248) (xy 278.1039 71.573248) + (xy 278.1039 71.777951) (xy 278.135922 71.980134) (xy 278.199181 72.174823) (xy 278.219223 72.214156) + (xy 278.289261 72.351613) (xy 278.292115 72.357213) (xy 278.412428 72.522813) (xy 278.557186 72.667571) + (xy 278.712149 72.780156) (xy 278.72279 72.787887) (xy 278.831634 72.843346) (xy 278.905176 72.880818) + (xy 278.905178 72.880818) (xy 278.905181 72.88082) (xy 279.009537 72.914727) (xy 279.099865 72.944077) + (xy 279.200957 72.960088) (xy 279.302048 72.9761) (xy 279.302049 72.9761) (xy 279.506751 72.9761) + (xy 279.506752 72.9761) (xy 279.708934 72.944077) (xy 279.903619 72.88082) (xy 280.08601 72.787887) + (xy 280.17899 72.720332) (xy 280.251613 72.667571) (xy 280.251615 72.667568) (xy 280.251619 72.667566) + (xy 280.396366 72.522819) (xy 280.494682 72.387496) (xy 280.550011 72.344832) (xy 280.619624 72.338853) + (xy 280.68142 72.371458) (xy 280.695314 72.387493) (xy 280.789565 72.517219) (xy 280.793634 72.522819) + (xy 280.938386 72.667571) (xy 281.093349 72.780156) (xy 281.10399 72.787887) (xy 281.212834 72.843346) + (xy 281.286376 72.880818) (xy 281.286378 72.880818) (xy 281.286381 72.88082) (xy 281.390737 72.914727) + (xy 281.481065 72.944077) (xy 281.582157 72.960088) (xy 281.683248 72.9761) (xy 281.683249 72.9761) + (xy 281.776685 72.9761) (xy 281.843724 72.995785) (xy 281.889479 73.048589) (xy 281.899423 73.117747) + (xy 281.898302 73.124291) (xy 281.8781 73.225853) (xy 281.8781 73.383546) (xy 281.908861 73.538189) + (xy 281.908864 73.538201) (xy 281.969202 73.683872) (xy 281.969209 73.683885) (xy 282.05681 73.814988) + (xy 282.056813 73.814992) (xy 282.168307 73.926486) (xy 282.168311 73.926489) (xy 282.299414 74.01409) + (xy 282.299427 74.014097) (xy 282.445098 74.074435) (xy 282.445103 74.074437) (xy 282.599753 74.105199) + (xy 282.599756 74.1052) (xy 282.599758 74.1052) (xy 282.757444 74.1052) (xy 282.757445 74.105199) + (xy 282.912097 74.074437) (xy 283.057779 74.014094) (xy 283.188889 73.926489) (xy 283.300389 73.814989) + (xy 283.387994 73.683879) (xy 283.448337 73.538197) (xy 283.4791 73.383542) (xy 283.4791 73.225858) + (xy 283.4791 73.225855) (xy 283.479099 73.225853) (xy 283.448337 73.071203) (xy 283.41833 72.998761) + (xy 283.410862 72.929294) (xy 283.442137 72.866814) (xy 283.502226 72.831162) (xy 283.572051 72.833656) + (xy 283.589184 72.840823) (xy 283.613618 72.853273) (xy 283.667676 72.880818) (xy 283.667678 72.880818) + (xy 283.667681 72.88082) (xy 283.772037 72.914727) (xy 283.862365 72.944077) (xy 283.963457 72.960088) + (xy 284.064548 72.9761) (xy 284.064549 72.9761) (xy 284.269251 72.9761) (xy 284.269252 72.9761) + (xy 284.471434 72.944077) (xy 284.666119 72.88082) (xy 284.84851 72.787887) (xy 284.94149 72.720332) + (xy 285.014113 72.667571) (xy 285.014115 72.667568) (xy 285.014119 72.667566) (xy 285.158866 72.522819) + (xy 285.257182 72.387496) (xy 285.312511 72.344832) (xy 285.382124 72.338853) (xy 285.44392 72.371458) + (xy 285.457814 72.387493) (xy 285.552065 72.517219) (xy 285.556134 72.522819) (xy 285.700886 72.667571) + (xy 285.855849 72.780156) (xy 285.86649 72.787887) (xy 285.975334 72.843346) (xy 286.048876 72.880818) + (xy 286.048878 72.880818) (xy 286.048881 72.88082) (xy 286.153237 72.914727) (xy 286.243565 72.944077) + (xy 286.344657 72.960088) (xy 286.445748 72.9761) (xy 286.445749 72.9761) (xy 286.650451 72.9761) + (xy 286.650452 72.9761) (xy 286.852634 72.944077) (xy 287.047319 72.88082) (xy 287.22971 72.787887) + (xy 287.32269 72.720332) (xy 287.395313 72.667571) (xy 287.395315 72.667568) (xy 287.395319 72.667566) + (xy 287.540066 72.522819) (xy 287.638432 72.387427) (xy 287.693761 72.344763) (xy 287.763374 72.338784) + (xy 287.82517 72.371389) (xy 287.839064 72.387423) (xy 287.933365 72.517219) (xy 287.937434 72.522819) + (xy 288.082186 72.667571) (xy 288.237149 72.780156) (xy 288.24779 72.787887) (xy 288.356634 72.843346) + (xy 288.430176 72.880818) (xy 288.430178 72.880818) (xy 288.430181 72.88082) (xy 288.534537 72.914727) + (xy 288.624865 72.944077) (xy 288.725957 72.960088) (xy 288.827048 72.9761) (xy 288.827049 72.9761) + (xy 289.031751 72.9761) (xy 289.031752 72.9761) (xy 289.233934 72.944077) (xy 289.428619 72.88082) + (xy 289.61101 72.787887) (xy 289.70399 72.720332) (xy 289.776613 72.667571) (xy 289.776615 72.667568) + (xy 289.776619 72.667566) (xy 289.921366 72.522819) (xy 289.921368 72.522815) (xy 289.921371 72.522813) + (xy 290.017066 72.391098) (xy 290.041687 72.35721) (xy 290.13462 72.174819) (xy 290.197877 71.980134) + (xy 290.2299 71.777952) (xy 290.2299 71.573248) (xy 293.582 71.573248) (xy 293.582 71.777951) (xy 293.614022 71.980134) + (xy 293.677281 72.174823) (xy 293.697323 72.214156) (xy 293.767361 72.351613) (xy 293.770215 72.357213) + (xy 293.890528 72.522813) (xy 294.035286 72.667571) (xy 294.190249 72.780156) (xy 294.20089 72.787887) + (xy 294.309734 72.843346) (xy 294.383276 72.880818) (xy 294.383278 72.880818) (xy 294.383281 72.88082) + (xy 294.487637 72.914727) (xy 294.577965 72.944077) (xy 294.679057 72.960088) (xy 294.780148 72.9761) + (xy 294.780149 72.9761) (xy 294.984851 72.9761) (xy 294.984852 72.9761) (xy 295.187034 72.944077) + (xy 295.381719 72.88082) (xy 295.56411 72.787887) (xy 295.65709 72.720332) (xy 295.729713 72.667571) + (xy 295.729715 72.667568) (xy 295.729719 72.667566) (xy 295.874466 72.522819) (xy 295.972832 72.387427) + (xy 296.028161 72.344763) (xy 296.097774 72.338784) (xy 296.15957 72.371389) (xy 296.173464 72.387423) + (xy 296.267765 72.517219) (xy 296.271834 72.522819) (xy 296.416586 72.667571) (xy 296.571549 72.780156) + (xy 296.58219 72.787887) (xy 296.691034 72.843346) (xy 296.764576 72.880818) (xy 296.764578 72.880818) + (xy 296.764581 72.88082) (xy 296.868937 72.914727) (xy 296.959265 72.944077) (xy 297.060357 72.960088) + (xy 297.161448 72.9761) (xy 297.161449 72.9761) (xy 297.366151 72.9761) (xy 297.366152 72.9761) + (xy 297.568334 72.944077) (xy 297.763019 72.88082) (xy 297.94541 72.787887) (xy 298.03839 72.720332) + (xy 298.111013 72.667571) (xy 298.111015 72.667568) (xy 298.111019 72.667566) (xy 298.255766 72.522819) + (xy 298.354082 72.387496) (xy 298.409411 72.344832) (xy 298.479024 72.338853) (xy 298.54082 72.371458) + (xy 298.554714 72.387493) (xy 298.648965 72.517219) (xy 298.653034 72.522819) (xy 298.797786 72.667571) + (xy 298.952749 72.780156) (xy 298.96339 72.787887) (xy 299.072234 72.843346) (xy 299.145776 72.880818) + (xy 299.145778 72.880818) (xy 299.145781 72.88082) (xy 299.250137 72.914727) (xy 299.340465 72.944077) + (xy 299.441557 72.960088) (xy 299.542648 72.9761) (xy 299.542649 72.9761) (xy 299.747351 72.9761) + (xy 299.747352 72.9761) (xy 299.949534 72.944077) (xy 300.144219 72.88082) (xy 300.32661 72.787887) + (xy 300.41959 72.720332) (xy 300.492213 72.667571) (xy 300.492215 72.667568) (xy 300.492219 72.667566) + (xy 300.636966 72.522819) (xy 300.735332 72.387427) (xy 300.790661 72.344763) (xy 300.860274 72.338784) + (xy 300.92207 72.371389) (xy 300.935964 72.387423) (xy 301.030265 72.517219) (xy 301.034334 72.522819) + (xy 301.179086 72.667571) (xy 301.334049 72.780156) (xy 301.34469 72.787887) (xy 301.453534 72.843346) + (xy 301.527076 72.880818) (xy 301.527078 72.880818) (xy 301.527081 72.88082) (xy 301.631437 72.914727) + (xy 301.721765 72.944077) (xy 301.822857 72.960088) (xy 301.923948 72.9761) (xy 301.923949 72.9761) + (xy 302.128651 72.9761) (xy 302.128652 72.9761) (xy 302.330834 72.944077) (xy 302.525519 72.88082) + (xy 302.70791 72.787887) (xy 302.80089 72.720332) (xy 302.873513 72.667571) (xy 302.873515 72.667568) + (xy 302.873519 72.667566) (xy 303.018266 72.522819) (xy 303.018268 72.522815) (xy 303.018271 72.522813) + (xy 303.113966 72.391098) (xy 303.138587 72.35721) (xy 303.23152 72.174819) (xy 303.294777 71.980134) + (xy 303.3268 71.777952) (xy 303.3268 71.573248) (xy 306.6789 71.573248) (xy 306.6789 71.777951) + (xy 306.710922 71.980134) (xy 306.774181 72.174823) (xy 306.794223 72.214156) (xy 306.864261 72.351613) + (xy 306.867115 72.357213) (xy 306.987428 72.522813) (xy 307.132186 72.667571) (xy 307.287149 72.780156) + (xy 307.29779 72.787887) (xy 307.406634 72.843346) (xy 307.480176 72.880818) (xy 307.480178 72.880818) + (xy 307.480181 72.88082) (xy 307.584537 72.914727) (xy 307.674865 72.944077) (xy 307.775957 72.960088) + (xy 307.877048 72.9761) (xy 307.877049 72.9761) (xy 308.081751 72.9761) (xy 308.081752 72.9761) + (xy 308.283934 72.944077) (xy 308.478619 72.88082) (xy 308.66101 72.787887) (xy 308.75399 72.720332) + (xy 308.826613 72.667571) (xy 308.826615 72.667568) (xy 308.826619 72.667566) (xy 308.971366 72.522819) + (xy 309.069682 72.387496) (xy 309.125011 72.344832) (xy 309.194624 72.338853) (xy 309.25642 72.371458) + (xy 309.270314 72.387493) (xy 309.364565 72.517219) (xy 309.368634 72.522819) (xy 309.513386 72.667571) + (xy 309.668349 72.780156) (xy 309.67899 72.787887) (xy 309.787834 72.843346) (xy 309.861376 72.880818) + (xy 309.861378 72.880818) (xy 309.861381 72.88082) (xy 309.965737 72.914727) (xy 310.056065 72.944077) + (xy 310.157157 72.960088) (xy 310.258248 72.9761) (xy 310.258249 72.9761) (xy 310.462951 72.9761) + (xy 310.462952 72.9761) (xy 310.665134 72.944077) (xy 310.859819 72.88082) (xy 311.04221 72.787887) + (xy 311.13519 72.720332) (xy 311.207813 72.667571) (xy 311.207815 72.667568) (xy 311.207819 72.667566) + (xy 311.352566 72.522819) (xy 311.450932 72.387427) (xy 311.506261 72.344763) (xy 311.575874 72.338784) + (xy 311.63767 72.371389) (xy 311.651564 72.387423) (xy 311.745865 72.517219) (xy 311.749934 72.522819) + (xy 311.894686 72.667571) (xy 312.049649 72.780156) (xy 312.06029 72.787887) (xy 312.169134 72.843346) + (xy 312.242676 72.880818) (xy 312.242678 72.880818) (xy 312.242681 72.88082) (xy 312.347037 72.914727) + (xy 312.437365 72.944077) (xy 312.538457 72.960088) (xy 312.639548 72.9761) (xy 312.639549 72.9761) + (xy 312.844251 72.9761) (xy 312.844252 72.9761) (xy 313.046434 72.944077) (xy 313.241119 72.88082) + (xy 313.42351 72.787887) (xy 313.51649 72.720332) (xy 313.589113 72.667571) (xy 313.589115 72.667568) + (xy 313.589119 72.667566) (xy 313.733866 72.522819) (xy 313.832182 72.387496) (xy 313.887511 72.344832) + (xy 313.957124 72.338853) (xy 314.01892 72.371458) (xy 314.032814 72.387493) (xy 314.127065 72.517219) + (xy 314.131134 72.522819) (xy 314.275886 72.667571) (xy 314.430849 72.780156) (xy 314.44149 72.787887) + (xy 314.550334 72.843346) (xy 314.623876 72.880818) (xy 314.623878 72.880818) (xy 314.623881 72.88082) + (xy 314.728237 72.914727) (xy 314.818565 72.944077) (xy 314.919657 72.960088) (xy 315.020748 72.9761) + (xy 315.020749 72.9761) (xy 315.225451 72.9761) (xy 315.225452 72.9761) (xy 315.427634 72.944077) + (xy 315.622319 72.88082) (xy 315.80471 72.787887) (xy 315.89769 72.720332) (xy 315.970313 72.667571) + (xy 315.970315 72.667568) (xy 315.970319 72.667566) (xy 316.115066 72.522819) (xy 316.115068 72.522815) + (xy 316.115071 72.522813) (xy 316.210766 72.391098) (xy 316.235387 72.35721) (xy 316.32832 72.174819) + (xy 316.391577 71.980134) (xy 316.4236 71.777952) (xy 316.4236 71.573248) (xy 319.7758 71.573248) + (xy 319.7758 71.777951) (xy 319.807822 71.980134) (xy 319.871081 72.174823) (xy 319.891123 72.214156) + (xy 319.961161 72.351613) (xy 319.964015 72.357213) (xy 320.084328 72.522813) (xy 320.229086 72.667571) + (xy 320.384049 72.780156) (xy 320.39469 72.787887) (xy 320.503534 72.843346) (xy 320.577076 72.880818) + (xy 320.577078 72.880818) (xy 320.577081 72.88082) (xy 320.681437 72.914727) (xy 320.771765 72.944077) + (xy 320.872857 72.960088) (xy 320.973948 72.9761) (xy 320.973949 72.9761) (xy 321.178651 72.9761) + (xy 321.178652 72.9761) (xy 321.380834 72.944077) (xy 321.575519 72.88082) (xy 321.75791 72.787887) + (xy 321.85089 72.720332) (xy 321.923513 72.667571) (xy 321.923515 72.667568) (xy 321.923519 72.667566) + (xy 322.068266 72.522819) (xy 322.166582 72.387496) (xy 322.221911 72.344832) (xy 322.291524 72.338853) + (xy 322.35332 72.371458) (xy 322.367214 72.387493) (xy 322.461465 72.517219) (xy 322.465534 72.522819) + (xy 322.610286 72.667571) (xy 322.765249 72.780156) (xy 322.77589 72.787887) (xy 322.884734 72.843346) + (xy 322.958276 72.880818) (xy 322.958278 72.880818) (xy 322.958281 72.88082) (xy 323.062637 72.914727) + (xy 323.152965 72.944077) (xy 323.254057 72.960088) (xy 323.355148 72.9761) (xy 323.355149 72.9761) + (xy 323.559851 72.9761) (xy 323.559852 72.9761) (xy 323.762034 72.944077) (xy 323.956719 72.88082) + (xy 324.13911 72.787887) (xy 324.23209 72.720332) (xy 324.304713 72.667571) (xy 324.304715 72.667568) + (xy 324.304719 72.667566) (xy 324.449466 72.522819) (xy 324.547832 72.387427) (xy 324.603161 72.344763) + (xy 324.672774 72.338784) (xy 324.73457 72.371389) (xy 324.748464 72.387423) (xy 324.842765 72.517219) + (xy 324.846834 72.522819) (xy 324.991586 72.667571) (xy 325.146549 72.780156) (xy 325.15719 72.787887) + (xy 325.266034 72.843346) (xy 325.339576 72.880818) (xy 325.339578 72.880818) (xy 325.339581 72.88082) + (xy 325.443937 72.914727) (xy 325.534265 72.944077) (xy 325.635357 72.960088) (xy 325.736448 72.9761) + (xy 325.736449 72.9761) (xy 325.941151 72.9761) (xy 325.941152 72.9761) (xy 326.143334 72.944077) + (xy 326.338019 72.88082) (xy 326.52041 72.787887) (xy 326.61339 72.720332) (xy 326.686013 72.667571) + (xy 326.686015 72.667568) (xy 326.686019 72.667566) (xy 326.830766 72.522819) (xy 326.929082 72.387496) + (xy 326.984411 72.344832) (xy 327.054024 72.338853) (xy 327.11582 72.371458) (xy 327.129714 72.387493) + (xy 327.223965 72.517219) (xy 327.228034 72.522819) (xy 327.372786 72.667571) (xy 327.527749 72.780156) + (xy 327.53839 72.787887) (xy 327.647234 72.843346) (xy 327.720776 72.880818) (xy 327.720778 72.880818) + (xy 327.720781 72.88082) (xy 327.825137 72.914727) (xy 327.915465 72.944077) (xy 328.016557 72.960088) + (xy 328.117648 72.9761) (xy 328.117649 72.9761) (xy 328.322351 72.9761) (xy 328.322352 72.9761) + (xy 328.524534 72.944077) (xy 328.719219 72.88082) (xy 328.90161 72.787887) (xy 328.99459 72.720332) + (xy 329.067213 72.667571) (xy 329.067215 72.667568) (xy 329.067219 72.667566) (xy 329.211966 72.522819) + (xy 329.310332 72.387427) (xy 329.365661 72.344763) (xy 329.435274 72.338784) (xy 329.49707 72.371389) + (xy 329.510964 72.387423) (xy 329.605265 72.517219) (xy 329.609334 72.522819) (xy 329.754086 72.667571) + (xy 329.909049 72.780156) (xy 329.91969 72.787887) (xy 330.028534 72.843346) (xy 330.102076 72.880818) + (xy 330.102078 72.880818) (xy 330.102081 72.88082) (xy 330.206437 72.914727) (xy 330.296765 72.944077) + (xy 330.397857 72.960088) (xy 330.498948 72.9761) (xy 330.498949 72.9761) (xy 330.703651 72.9761) + (xy 330.703652 72.9761) (xy 330.905834 72.944077) (xy 331.100519 72.88082) (xy 331.28291 72.787887) + (xy 331.37589 72.720332) (xy 331.448513 72.667571) (xy 331.448515 72.667568) (xy 331.448519 72.667566) + (xy 331.593266 72.522819) (xy 331.593268 72.522815) (xy 331.593271 72.522813) (xy 331.688966 72.391098) + (xy 331.713587 72.35721) (xy 331.80652 72.174819) (xy 331.869777 71.980134) (xy 331.9018 71.777952) + (xy 331.9018 71.573248) (xy 331.869777 71.371066) (xy 331.867957 71.365466) (xy 331.806518 71.176376) + (xy 331.772803 71.110207) (xy 331.713587 70.99399) (xy 331.682697 70.951473) (xy 331.593271 70.828386) + (xy 331.448513 70.683628) (xy 331.282913 70.563315) (xy 331.282912 70.563314) (xy 331.28291 70.563313) + (xy 331.225953 70.534291) (xy 331.100523 70.470381) (xy 330.905834 70.407122) (xy 330.731295 70.379478) + (xy 330.703652 70.3751) (xy 330.498948 70.3751) (xy 330.474629 70.378951) (xy 330.296765 70.407122) + (xy 330.102076 70.470381) (xy 329.919686 70.563315) (xy 329.754086 70.683628) (xy 329.609332 70.828382) + (xy 329.609328 70.828387) (xy 329.510968 70.96377) (xy 329.455639 71.006436) (xy 329.386025 71.012415) + (xy 329.32423 70.97981) (xy 329.310332 70.96377) (xy 329.211971 70.828387) (xy 329.211967 70.828382) + (xy 329.067213 70.683628) (xy 328.901613 70.563315) (xy 328.901612 70.563314) (xy 328.90161 70.563313) + (xy 328.844653 70.534291) (xy 328.719223 70.470381) (xy 328.524534 70.407122) (xy 328.349995 70.379478) + (xy 328.322352 70.3751) (xy 328.117648 70.3751) (xy 328.093329 70.378951) (xy 327.915465 70.407122) + (xy 327.720776 70.470381) (xy 327.538386 70.563315) (xy 327.372786 70.683628) (xy 327.228032 70.828382) + (xy 327.228028 70.828387) (xy 327.129718 70.963701) (xy 327.074389 71.006367) (xy 327.004775 71.012346) + (xy 326.94298 70.979741) (xy 326.929082 70.963701) (xy 326.830771 70.828387) (xy 326.830767 70.828382) + (xy 326.686013 70.683628) (xy 326.520413 70.563315) (xy 326.520412 70.563314) (xy 326.52041 70.563313) + (xy 326.463453 70.534291) (xy 326.338023 70.470381) (xy 326.143334 70.407122) (xy 325.968795 70.379478) + (xy 325.941152 70.3751) (xy 325.736448 70.3751) (xy 325.712129 70.378951) (xy 325.534265 70.407122) + (xy 325.339576 70.470381) (xy 325.157186 70.563315) (xy 324.991586 70.683628) (xy 324.846832 70.828382) + (xy 324.846828 70.828387) (xy 324.748468 70.96377) (xy 324.693139 71.006436) (xy 324.623525 71.012415) + (xy 324.56173 70.97981) (xy 324.547832 70.96377) (xy 324.449471 70.828387) (xy 324.449467 70.828382) + (xy 324.304713 70.683628) (xy 324.139113 70.563315) (xy 324.139112 70.563314) (xy 324.13911 70.563313) + (xy 324.082153 70.534291) (xy 323.956723 70.470381) (xy 323.762034 70.407122) (xy 323.587495 70.379478) + (xy 323.559852 70.3751) (xy 323.355148 70.3751) (xy 323.330829 70.378951) (xy 323.152965 70.407122) + (xy 322.958276 70.470381) (xy 322.775886 70.563315) (xy 322.610286 70.683628) (xy 322.465532 70.828382) + (xy 322.465528 70.828387) (xy 322.367218 70.963701) (xy 322.311889 71.006367) (xy 322.242275 71.012346) + (xy 322.18048 70.979741) (xy 322.166582 70.963701) (xy 322.068271 70.828387) (xy 322.068267 70.828382) + (xy 321.923513 70.683628) (xy 321.757913 70.563315) (xy 321.757912 70.563314) (xy 321.75791 70.563313) + (xy 321.700953 70.534291) (xy 321.575523 70.470381) (xy 321.380834 70.407122) (xy 321.206295 70.379478) + (xy 321.178652 70.3751) (xy 320.973948 70.3751) (xy 320.949629 70.378951) (xy 320.771765 70.407122) + (xy 320.577076 70.470381) (xy 320.394686 70.563315) (xy 320.229086 70.683628) (xy 320.084328 70.828386) + (xy 319.964015 70.993986) (xy 319.871081 71.176376) (xy 319.807822 71.371065) (xy 319.7758 71.573248) + (xy 316.4236 71.573248) (xy 316.391577 71.371066) (xy 316.389757 71.365466) (xy 316.328318 71.176376) + (xy 316.294603 71.110207) (xy 316.235387 70.99399) (xy 316.204497 70.951473) (xy 316.115071 70.828386) + (xy 315.970313 70.683628) (xy 315.804713 70.563315) (xy 315.804712 70.563314) (xy 315.80471 70.563313) + (xy 315.747753 70.534291) (xy 315.622323 70.470381) (xy 315.427634 70.407122) (xy 315.253095 70.379478) + (xy 315.225452 70.3751) (xy 315.020748 70.3751) (xy 314.996429 70.378951) (xy 314.818565 70.407122) + (xy 314.623876 70.470381) (xy 314.441486 70.563315) (xy 314.275886 70.683628) (xy 314.131132 70.828382) + (xy 314.131128 70.828387) (xy 314.032818 70.963701) (xy 313.977489 71.006367) (xy 313.907875 71.012346) + (xy 313.84608 70.979741) (xy 313.832182 70.963701) (xy 313.733871 70.828387) (xy 313.733867 70.828382) + (xy 313.589113 70.683628) (xy 313.423513 70.563315) (xy 313.423512 70.563314) (xy 313.42351 70.563313) + (xy 313.366553 70.534291) (xy 313.241123 70.470381) (xy 313.046434 70.407122) (xy 312.871895 70.379478) + (xy 312.844252 70.3751) (xy 312.639548 70.3751) (xy 312.615229 70.378951) (xy 312.437365 70.407122) + (xy 312.242676 70.470381) (xy 312.060286 70.563315) (xy 311.894686 70.683628) (xy 311.749932 70.828382) + (xy 311.749928 70.828387) (xy 311.651568 70.96377) (xy 311.596239 71.006436) (xy 311.526625 71.012415) + (xy 311.46483 70.97981) (xy 311.450932 70.96377) (xy 311.352571 70.828387) (xy 311.352567 70.828382) + (xy 311.207813 70.683628) (xy 311.042213 70.563315) (xy 311.042212 70.563314) (xy 311.04221 70.563313) + (xy 310.985253 70.534291) (xy 310.859823 70.470381) (xy 310.665134 70.407122) (xy 310.490595 70.379478) + (xy 310.462952 70.3751) (xy 310.258248 70.3751) (xy 310.233929 70.378951) (xy 310.056065 70.407122) + (xy 309.861376 70.470381) (xy 309.678986 70.563315) (xy 309.513386 70.683628) (xy 309.368632 70.828382) + (xy 309.368628 70.828387) (xy 309.270318 70.963701) (xy 309.214989 71.006367) (xy 309.145375 71.012346) + (xy 309.08358 70.979741) (xy 309.069682 70.963701) (xy 308.971371 70.828387) (xy 308.971367 70.828382) + (xy 308.826613 70.683628) (xy 308.661013 70.563315) (xy 308.661012 70.563314) (xy 308.66101 70.563313) + (xy 308.604053 70.534291) (xy 308.478623 70.470381) (xy 308.283934 70.407122) (xy 308.109395 70.379478) + (xy 308.081752 70.3751) (xy 307.877048 70.3751) (xy 307.852729 70.378951) (xy 307.674865 70.407122) + (xy 307.480176 70.470381) (xy 307.297786 70.563315) (xy 307.132186 70.683628) (xy 306.987428 70.828386) + (xy 306.867115 70.993986) (xy 306.774181 71.176376) (xy 306.710922 71.371065) (xy 306.6789 71.573248) + (xy 303.3268 71.573248) (xy 303.294777 71.371066) (xy 303.292957 71.365466) (xy 303.231518 71.176376) + (xy 303.197803 71.110207) (xy 303.138587 70.99399) (xy 303.107697 70.951473) (xy 303.018271 70.828386) + (xy 302.873513 70.683628) (xy 302.707913 70.563315) (xy 302.707912 70.563314) (xy 302.70791 70.563313) + (xy 302.650953 70.534291) (xy 302.525523 70.470381) (xy 302.330834 70.407122) (xy 302.156295 70.379478) + (xy 302.128652 70.3751) (xy 301.923948 70.3751) (xy 301.899629 70.378951) (xy 301.721765 70.407122) + (xy 301.527076 70.470381) (xy 301.344686 70.563315) (xy 301.179086 70.683628) (xy 301.034332 70.828382) + (xy 301.034328 70.828387) (xy 300.935968 70.96377) (xy 300.880639 71.006436) (xy 300.811025 71.012415) + (xy 300.74923 70.97981) (xy 300.735332 70.96377) (xy 300.636971 70.828387) (xy 300.636967 70.828382) + (xy 300.492213 70.683628) (xy 300.326613 70.563315) (xy 300.326612 70.563314) (xy 300.32661 70.563313) + (xy 300.269653 70.534291) (xy 300.144223 70.470381) (xy 299.949534 70.407122) (xy 299.774995 70.379478) + (xy 299.747352 70.3751) (xy 299.542648 70.3751) (xy 299.518329 70.378951) (xy 299.340465 70.407122) + (xy 299.145776 70.470381) (xy 298.963386 70.563315) (xy 298.797786 70.683628) (xy 298.653032 70.828382) + (xy 298.653028 70.828387) (xy 298.554718 70.963701) (xy 298.499389 71.006367) (xy 298.429775 71.012346) + (xy 298.36798 70.979741) (xy 298.354082 70.963701) (xy 298.255771 70.828387) (xy 298.255767 70.828382) + (xy 298.111013 70.683628) (xy 297.945413 70.563315) (xy 297.945412 70.563314) (xy 297.94541 70.563313) + (xy 297.888453 70.534291) (xy 297.763023 70.470381) (xy 297.568334 70.407122) (xy 297.393795 70.379478) + (xy 297.366152 70.3751) (xy 297.161448 70.3751) (xy 297.137129 70.378951) (xy 296.959265 70.407122) + (xy 296.764576 70.470381) (xy 296.582186 70.563315) (xy 296.416586 70.683628) (xy 296.271832 70.828382) + (xy 296.271828 70.828387) (xy 296.173468 70.96377) (xy 296.118139 71.006436) (xy 296.048525 71.012415) + (xy 295.98673 70.97981) (xy 295.972832 70.96377) (xy 295.874471 70.828387) (xy 295.874467 70.828382) + (xy 295.729713 70.683628) (xy 295.564113 70.563315) (xy 295.564112 70.563314) (xy 295.56411 70.563313) + (xy 295.507153 70.534291) (xy 295.381723 70.470381) (xy 295.187034 70.407122) (xy 295.012495 70.379478) + (xy 294.984852 70.3751) (xy 294.780148 70.3751) (xy 294.755829 70.378951) (xy 294.577965 70.407122) + (xy 294.383276 70.470381) (xy 294.200886 70.563315) (xy 294.035286 70.683628) (xy 293.890528 70.828386) + (xy 293.770215 70.993986) (xy 293.677281 71.176376) (xy 293.614022 71.371065) (xy 293.582 71.573248) + (xy 290.2299 71.573248) (xy 290.197877 71.371066) (xy 290.196057 71.365466) (xy 290.134618 71.176376) + (xy 290.100903 71.110207) (xy 290.041687 70.99399) (xy 290.010797 70.951473) (xy 289.921371 70.828386) + (xy 289.776613 70.683628) (xy 289.611013 70.563315) (xy 289.611012 70.563314) (xy 289.61101 70.563313) + (xy 289.554053 70.534291) (xy 289.428623 70.470381) (xy 289.233934 70.407122) (xy 289.059395 70.379478) + (xy 289.031752 70.3751) (xy 288.827048 70.3751) (xy 288.802729 70.378951) (xy 288.624865 70.407122) + (xy 288.430176 70.470381) (xy 288.247786 70.563315) (xy 288.082186 70.683628) (xy 287.937432 70.828382) + (xy 287.937428 70.828387) (xy 287.839068 70.96377) (xy 287.783739 71.006436) (xy 287.714125 71.012415) + (xy 287.65233 70.97981) (xy 287.638432 70.96377) (xy 287.540071 70.828387) (xy 287.540067 70.828382) + (xy 287.395313 70.683628) (xy 287.229713 70.563315) (xy 287.229712 70.563314) (xy 287.22971 70.563313) + (xy 287.172753 70.534291) (xy 287.047323 70.470381) (xy 286.852634 70.407122) (xy 286.678095 70.379478) + (xy 286.650452 70.3751) (xy 286.445748 70.3751) (xy 286.421429 70.378951) (xy 286.243565 70.407122) + (xy 286.048876 70.470381) (xy 285.866486 70.563315) (xy 285.700886 70.683628) (xy 285.556132 70.828382) + (xy 285.556128 70.828387) (xy 285.457818 70.963701) (xy 285.402489 71.006367) (xy 285.332875 71.012346) + (xy 285.27108 70.979741) (xy 285.257182 70.963701) (xy 285.158871 70.828387) (xy 285.158867 70.828382) + (xy 285.014113 70.683628) (xy 284.848513 70.563315) (xy 284.848512 70.563314) (xy 284.84851 70.563313) + (xy 284.791553 70.534291) (xy 284.666123 70.470381) (xy 284.471434 70.407122) (xy 284.296895 70.379478) + (xy 284.269252 70.3751) (xy 284.064548 70.3751) (xy 284.040229 70.378951) (xy 283.862365 70.407122) + (xy 283.667676 70.470381) (xy 283.485286 70.563315) (xy 283.319686 70.683628) (xy 283.174932 70.828382) + (xy 283.174928 70.828387) (xy 283.076568 70.96377) (xy 283.021239 71.006436) (xy 282.951625 71.012415) + (xy 282.88983 70.97981) (xy 282.875932 70.96377) (xy 282.777571 70.828387) (xy 282.777567 70.828382) + (xy 282.632813 70.683628) (xy 282.467213 70.563315) (xy 282.467212 70.563314) (xy 282.46721 70.563313) + (xy 282.410253 70.534291) (xy 282.284823 70.470381) (xy 282.090134 70.407122) (xy 281.915595 70.379478) + (xy 281.887952 70.3751) (xy 281.683248 70.3751) (xy 281.658929 70.378951) (xy 281.481065 70.407122) + (xy 281.286376 70.470381) (xy 281.103986 70.563315) (xy 280.938386 70.683628) (xy 280.793632 70.828382) + (xy 280.793628 70.828387) (xy 280.695318 70.963701) (xy 280.639989 71.006367) (xy 280.570375 71.012346) + (xy 280.50858 70.979741) (xy 280.494682 70.963701) (xy 280.396371 70.828387) (xy 280.396367 70.828382) + (xy 280.251613 70.683628) (xy 280.086013 70.563315) (xy 280.086012 70.563314) (xy 280.08601 70.563313) + (xy 280.029053 70.534291) (xy 279.903623 70.470381) (xy 279.708934 70.407122) (xy 279.534395 70.379478) + (xy 279.506752 70.3751) (xy 279.302048 70.3751) (xy 279.277729 70.378951) (xy 279.099865 70.407122) + (xy 278.905176 70.470381) (xy 278.722786 70.563315) (xy 278.557186 70.683628) (xy 278.412428 70.828386) + (xy 278.292115 70.993986) (xy 278.199181 71.176376) (xy 278.135922 71.371065) (xy 278.1039 71.573248) + (xy 274.7518 71.573248) (xy 274.719777 71.371066) (xy 274.717957 71.365466) (xy 274.656518 71.176376) + (xy 274.622803 71.110207) (xy 274.563587 70.99399) (xy 274.532697 70.951473) (xy 274.443271 70.828386) + (xy 274.298513 70.683628) (xy 274.132913 70.563315) (xy 274.132912 70.563314) (xy 274.13291 70.563313) + (xy 274.075953 70.534291) (xy 273.950523 70.470381) (xy 273.755834 70.407122) (xy 273.581295 70.379478) + (xy 273.553652 70.3751) (xy 273.348948 70.3751) (xy 273.324629 70.378951) (xy 273.146765 70.407122) + (xy 272.952076 70.470381) (xy 272.769686 70.563315) (xy 272.604086 70.683628) (xy 272.459332 70.828382) + (xy 272.459328 70.828387) (xy 272.360968 70.96377) (xy 272.305639 71.006436) (xy 272.236025 71.012415) + (xy 272.17423 70.97981) (xy 272.160332 70.96377) (xy 272.061971 70.828387) (xy 272.061967 70.828382) + (xy 271.917213 70.683628) (xy 271.751613 70.563315) (xy 271.751612 70.563314) (xy 271.75161 70.563313) + (xy 271.694653 70.534291) (xy 271.569223 70.470381) (xy 271.374534 70.407122) (xy 271.199995 70.379478) + (xy 271.172352 70.3751) (xy 270.967648 70.3751) (xy 270.943329 70.378951) (xy 270.765465 70.407122) + (xy 270.570776 70.470381) (xy 270.388386 70.563315) (xy 270.222786 70.683628) (xy 270.078032 70.828382) + (xy 270.078028 70.828387) (xy 269.979718 70.963701) (xy 269.924389 71.006367) (xy 269.854775 71.012346) + (xy 269.79298 70.979741) (xy 269.779082 70.963701) (xy 269.680771 70.828387) (xy 269.680767 70.828382) + (xy 269.536013 70.683628) (xy 269.370413 70.563315) (xy 269.370412 70.563314) (xy 269.37041 70.563313) + (xy 269.313453 70.534291) (xy 269.188023 70.470381) (xy 268.993334 70.407122) (xy 268.818795 70.379478) + (xy 268.791152 70.3751) (xy 268.586448 70.3751) (xy 268.562129 70.378951) (xy 268.384265 70.407122) + (xy 268.189576 70.470381) (xy 268.007186 70.563315) (xy 267.841586 70.683628) (xy 267.696832 70.828382) + (xy 267.696828 70.828387) (xy 267.598468 70.96377) (xy 267.543139 71.006436) (xy 267.473525 71.012415) + (xy 267.41173 70.97981) (xy 267.397832 70.96377) (xy 267.299471 70.828387) (xy 267.299467 70.828382) + (xy 267.154713 70.683628) (xy 266.989113 70.563315) (xy 266.989112 70.563314) (xy 266.98911 70.563313) + (xy 266.932153 70.534291) (xy 266.806723 70.470381) (xy 266.612034 70.407122) (xy 266.437495 70.379478) + (xy 266.409852 70.3751) (xy 266.205148 70.3751) (xy 266.180829 70.378951) (xy 266.002965 70.407122) + (xy 265.808276 70.470381) (xy 265.625886 70.563315) (xy 265.460286 70.683628) (xy 265.315532 70.828382) + (xy 265.315528 70.828387) (xy 265.217218 70.963701) (xy 265.161889 71.006367) (xy 265.092275 71.012346) + (xy 265.03048 70.979741) (xy 265.016582 70.963701) (xy 264.918271 70.828387) (xy 264.918267 70.828382) + (xy 264.773513 70.683628) (xy 264.607913 70.563315) (xy 264.607912 70.563314) (xy 264.60791 70.563313) + (xy 264.550953 70.534291) (xy 264.425523 70.470381) (xy 264.230834 70.407122) (xy 264.056295 70.379478) + (xy 264.028652 70.3751) (xy 263.823948 70.3751) (xy 263.799629 70.378951) (xy 263.621765 70.407122) + (xy 263.427076 70.470381) (xy 263.244686 70.563315) (xy 263.079086 70.683628) (xy 262.934328 70.828386) + (xy 262.814015 70.993986) (xy 262.721081 71.176376) (xy 262.657822 71.371065) (xy 262.6258 71.573248) + (xy 259.2736 71.573248) (xy 259.241577 71.371066) (xy 259.239757 71.365466) (xy 259.178318 71.176376) + (xy 259.144603 71.110207) (xy 259.085387 70.99399) (xy 259.054497 70.951473) (xy 258.965071 70.828386) + (xy 258.820313 70.683628) (xy 258.654713 70.563315) (xy 258.654712 70.563314) (xy 258.65471 70.563313) + (xy 258.597753 70.534291) (xy 258.472323 70.470381) (xy 258.277634 70.407122) (xy 258.103095 70.379478) + (xy 258.075452 70.3751) (xy 257.870748 70.3751) (xy 257.846429 70.378951) (xy 257.668565 70.407122) + (xy 257.473876 70.470381) (xy 257.291486 70.563315) (xy 257.125886 70.683628) (xy 256.981132 70.828382) + (xy 256.981128 70.828387) (xy 256.882818 70.963701) (xy 256.827489 71.006367) (xy 256.757875 71.012346) + (xy 256.69608 70.979741) (xy 256.682182 70.963701) (xy 256.583871 70.828387) (xy 256.583867 70.828382) + (xy 256.439113 70.683628) (xy 256.273513 70.563315) (xy 256.273512 70.563314) (xy 256.27351 70.563313) + (xy 256.216553 70.534291) (xy 256.091123 70.470381) (xy 255.896434 70.407122) (xy 255.721895 70.379478) + (xy 255.694252 70.3751) (xy 255.489548 70.3751) (xy 255.465229 70.378951) (xy 255.287365 70.407122) + (xy 255.092676 70.470381) (xy 254.910286 70.563315) (xy 254.744686 70.683628) (xy 254.599932 70.828382) + (xy 254.599928 70.828387) (xy 254.501568 70.96377) (xy 254.446239 71.006436) (xy 254.376625 71.012415) + (xy 254.31483 70.97981) (xy 254.300932 70.96377) (xy 254.202571 70.828387) (xy 254.202567 70.828382) + (xy 254.057813 70.683628) (xy 253.892213 70.563315) (xy 253.892212 70.563314) (xy 253.89221 70.563313) + (xy 253.835253 70.534291) (xy 253.709823 70.470381) (xy 253.515134 70.407122) (xy 253.340595 70.379478) + (xy 253.312952 70.3751) (xy 253.108248 70.3751) (xy 253.083929 70.378951) (xy 252.906065 70.407122) + (xy 252.711376 70.470381) (xy 252.528986 70.563315) (xy 252.363386 70.683628) (xy 252.218632 70.828382) + (xy 252.218628 70.828387) (xy 252.120318 70.963701) (xy 252.064989 71.006367) (xy 251.995375 71.012346) + (xy 251.93358 70.979741) (xy 251.919682 70.963701) (xy 251.821371 70.828387) (xy 251.821367 70.828382) + (xy 251.676613 70.683628) (xy 251.511013 70.563315) (xy 251.511012 70.563314) (xy 251.51101 70.563313) + (xy 251.454053 70.534291) (xy 251.328623 70.470381) (xy 251.133934 70.407122) (xy 250.959395 70.379478) + (xy 250.931752 70.3751) (xy 250.727048 70.3751) (xy 250.702729 70.378951) (xy 250.524865 70.407122) + (xy 250.330176 70.470381) (xy 250.147786 70.563315) (xy 249.982186 70.683628) (xy 249.837432 70.828382) + (xy 249.837428 70.828387) (xy 249.739068 70.96377) (xy 249.683739 71.006436) (xy 249.614125 71.012415) + (xy 249.55233 70.97981) (xy 249.538432 70.96377) (xy 249.440071 70.828387) (xy 249.440067 70.828382) + (xy 249.295313 70.683628) (xy 249.129713 70.563315) (xy 249.129712 70.563314) (xy 249.12971 70.563313) + (xy 249.072753 70.534291) (xy 248.947323 70.470381) (xy 248.752634 70.407122) (xy 248.578095 70.379478) + (xy 248.550452 70.3751) (xy 248.345748 70.3751) (xy 248.321429 70.378951) (xy 248.143565 70.407122) + (xy 247.948876 70.470381) (xy 247.766486 70.563315) (xy 247.600886 70.683628) (xy 247.456128 70.828386) + (xy 247.335815 70.993986) (xy 247.242881 71.176376) (xy 247.179622 71.371065) (xy 247.1476 71.573248) + (xy 243.7955 71.573248) (xy 243.763477 71.371066) (xy 243.761657 71.365466) (xy 243.700218 71.176376) + (xy 243.666503 71.110207) (xy 243.607287 70.99399) (xy 243.576397 70.951473) (xy 243.486971 70.828386) + (xy 243.342213 70.683628) (xy 243.176613 70.563315) (xy 243.176612 70.563314) (xy 243.17661 70.563313) + (xy 243.119653 70.534291) (xy 242.994223 70.470381) (xy 242.799534 70.407122) (xy 242.624995 70.379478) + (xy 242.597352 70.3751) (xy 242.392648 70.3751) (xy 242.368329 70.378951) (xy 242.190465 70.407122) + (xy 241.995776 70.470381) (xy 241.813386 70.563315) (xy 241.647786 70.683628) (xy 241.503032 70.828382) + (xy 241.503028 70.828387) (xy 241.404718 70.963701) (xy 241.349389 71.006367) (xy 241.279775 71.012346) + (xy 241.21798 70.979741) (xy 241.204082 70.963701) (xy 241.105771 70.828387) (xy 241.105767 70.828382) + (xy 240.961013 70.683628) (xy 240.795413 70.563315) (xy 240.795412 70.563314) (xy 240.79541 70.563313) + (xy 240.738453 70.534291) (xy 240.613023 70.470381) (xy 240.418334 70.407122) (xy 240.243795 70.379478) + (xy 240.216152 70.3751) (xy 240.011448 70.3751) (xy 239.987129 70.378951) (xy 239.809265 70.407122) + (xy 239.614576 70.470381) (xy 239.432186 70.563315) (xy 239.266586 70.683628) (xy 239.121832 70.828382) + (xy 239.121828 70.828387) (xy 239.023468 70.96377) (xy 238.968139 71.006436) (xy 238.898525 71.012415) + (xy 238.83673 70.97981) (xy 238.822832 70.96377) (xy 238.724471 70.828387) (xy 238.724467 70.828382) + (xy 238.579713 70.683628) (xy 238.414113 70.563315) (xy 238.414112 70.563314) (xy 238.41411 70.563313) + (xy 238.357153 70.534291) (xy 238.231723 70.470381) (xy 238.037034 70.407122) (xy 237.862495 70.379478) + (xy 237.834852 70.3751) (xy 237.630148 70.3751) (xy 237.605829 70.378951) (xy 237.427965 70.407122) + (xy 237.233276 70.470381) (xy 237.050886 70.563315) (xy 236.885286 70.683628) (xy 236.740532 70.828382) + (xy 236.740528 70.828387) (xy 236.642218 70.963701) (xy 236.586889 71.006367) (xy 236.517275 71.012346) + (xy 236.45548 70.979741) (xy 236.441582 70.963701) (xy 236.343271 70.828387) (xy 236.343267 70.828382) + (xy 236.198513 70.683628) (xy 236.032913 70.563315) (xy 236.032912 70.563314) (xy 236.03291 70.563313) + (xy 235.975953 70.534291) (xy 235.850523 70.470381) (xy 235.655834 70.407122) (xy 235.481295 70.379478) + (xy 235.453652 70.3751) (xy 235.248948 70.3751) (xy 235.224629 70.378951) (xy 235.046765 70.407122) + (xy 234.852076 70.470381) (xy 234.669686 70.563315) (xy 234.504086 70.683628) (xy 234.359328 70.828386) + (xy 234.239015 70.993986) (xy 234.146081 71.176376) (xy 234.082822 71.371065) (xy 234.0508 71.573248) + (xy 230.6986 71.573248) (xy 230.666577 71.371066) (xy 230.664757 71.365466) (xy 230.603318 71.176376) + (xy 230.569603 71.110207) (xy 230.510387 70.99399) (xy 230.479497 70.951473) (xy 230.390071 70.828386) + (xy 230.245313 70.683628) (xy 230.079713 70.563315) (xy 230.079712 70.563314) (xy 230.07971 70.563313) + (xy 230.022753 70.534291) (xy 229.897323 70.470381) (xy 229.702634 70.407122) (xy 229.528095 70.379478) + (xy 229.500452 70.3751) (xy 229.295748 70.3751) (xy 229.271429 70.378951) (xy 229.093565 70.407122) + (xy 228.898876 70.470381) (xy 228.716486 70.563315) (xy 228.550886 70.683628) (xy 228.406132 70.828382) + (xy 228.406128 70.828387) (xy 228.307818 70.963701) (xy 228.252489 71.006367) (xy 228.182875 71.012346) + (xy 228.12108 70.979741) (xy 228.107182 70.963701) (xy 228.008871 70.828387) (xy 228.008867 70.828382) + (xy 227.864113 70.683628) (xy 227.698513 70.563315) (xy 227.698512 70.563314) (xy 227.69851 70.563313) + (xy 227.641553 70.534291) (xy 227.516123 70.470381) (xy 227.321434 70.407122) (xy 227.146895 70.379478) + (xy 227.119252 70.3751) (xy 226.914548 70.3751) (xy 226.890229 70.378951) (xy 226.712365 70.407122) + (xy 226.517676 70.470381) (xy 226.335286 70.563315) (xy 226.169686 70.683628) (xy 226.024932 70.828382) + (xy 226.024928 70.828387) (xy 225.926568 70.96377) (xy 225.871239 71.006436) (xy 225.801625 71.012415) + (xy 225.73983 70.97981) (xy 225.725932 70.96377) (xy 225.627571 70.828387) (xy 225.627567 70.828382) + (xy 225.482813 70.683628) (xy 225.317213 70.563315) (xy 225.317212 70.563314) (xy 225.31721 70.563313) + (xy 225.260253 70.534291) (xy 225.134823 70.470381) (xy 224.940134 70.407122) (xy 224.765595 70.379478) + (xy 224.737952 70.3751) (xy 224.533248 70.3751) (xy 224.508929 70.378951) (xy 224.331065 70.407122) + (xy 224.136376 70.470381) (xy 223.953986 70.563315) (xy 223.788386 70.683628) (xy 223.643632 70.828382) + (xy 223.643628 70.828387) (xy 223.545318 70.963701) (xy 223.489989 71.006367) (xy 223.420375 71.012346) + (xy 223.35858 70.979741) (xy 223.344682 70.963701) (xy 223.246371 70.828387) (xy 223.246367 70.828382) + (xy 223.101613 70.683628) (xy 222.936013 70.563315) (xy 222.936012 70.563314) (xy 222.93601 70.563313) + (xy 222.879053 70.534291) (xy 222.753623 70.470381) (xy 222.558934 70.407122) (xy 222.384395 70.379478) + (xy 222.356752 70.3751) (xy 222.152048 70.3751) (xy 222.127729 70.378951) (xy 221.949865 70.407122) + (xy 221.755176 70.470381) (xy 221.572786 70.563315) (xy 221.407186 70.683628) (xy 221.262428 70.828386) + (xy 221.142115 70.993986) (xy 221.049181 71.176376) (xy 220.985922 71.371065) (xy 220.9539 71.573248) + (xy 217.6018 71.573248) (xy 217.569777 71.371066) (xy 217.567957 71.365466) (xy 217.506518 71.176376) + (xy 217.472803 71.110207) (xy 217.413587 70.99399) (xy 217.382697 70.951473) (xy 217.293271 70.828386) + (xy 217.148513 70.683628) (xy 216.982913 70.563315) (xy 216.982912 70.563314) (xy 216.98291 70.563313) + (xy 216.925953 70.534291) (xy 216.800523 70.470381) (xy 216.605834 70.407122) (xy 216.431295 70.379478) + (xy 216.403652 70.3751) (xy 216.198948 70.3751) (xy 216.174629 70.378951) (xy 215.996765 70.407122) + (xy 215.802076 70.470381) (xy 215.619686 70.563315) (xy 215.454086 70.683628) (xy 215.309332 70.828382) + (xy 215.309328 70.828387) (xy 215.210968 70.96377) (xy 215.155639 71.006436) (xy 215.086025 71.012415) + (xy 215.02423 70.97981) (xy 215.010332 70.96377) (xy 214.911971 70.828387) (xy 214.911967 70.828382) + (xy 214.767213 70.683628) (xy 214.601613 70.563315) (xy 214.601612 70.563314) (xy 214.60161 70.563313) + (xy 214.544653 70.534291) (xy 214.419223 70.470381) (xy 214.224534 70.407122) (xy 214.049995 70.379478) + (xy 214.022352 70.3751) (xy 213.817648 70.3751) (xy 213.793329 70.378951) (xy 213.615465 70.407122) + (xy 213.420776 70.470381) (xy 213.238386 70.563315) (xy 213.072786 70.683628) (xy 212.928032 70.828382) + (xy 212.928028 70.828387) (xy 212.829718 70.963701) (xy 212.774389 71.006367) (xy 212.704775 71.012346) + (xy 212.64298 70.979741) (xy 212.629082 70.963701) (xy 212.530771 70.828387) (xy 212.530767 70.828382) + (xy 212.386013 70.683628) (xy 212.220413 70.563315) (xy 212.220412 70.563314) (xy 212.22041 70.563313) + (xy 212.163453 70.534291) (xy 212.038023 70.470381) (xy 211.843334 70.407122) (xy 211.668795 70.379478) + (xy 211.641152 70.3751) (xy 211.436448 70.3751) (xy 211.412129 70.378951) (xy 211.234265 70.407122) + (xy 211.039576 70.470381) (xy 210.857186 70.563315) (xy 210.691586 70.683628) (xy 210.546832 70.828382) + (xy 210.546828 70.828387) (xy 210.448468 70.96377) (xy 210.393139 71.006436) (xy 210.323525 71.012415) + (xy 210.26173 70.97981) (xy 210.247832 70.96377) (xy 210.149471 70.828387) (xy 210.149467 70.828382) + (xy 210.004713 70.683628) (xy 209.839113 70.563315) (xy 209.839112 70.563314) (xy 209.83911 70.563313) + (xy 209.782153 70.534291) (xy 209.656723 70.470381) (xy 209.462034 70.407122) (xy 209.287495 70.379478) + (xy 209.259852 70.3751) (xy 209.055148 70.3751) (xy 209.030829 70.378951) (xy 208.852965 70.407122) + (xy 208.658276 70.470381) (xy 208.475886 70.563315) (xy 208.310286 70.683628) (xy 208.165528 70.828386) + (xy 208.045215 70.993986) (xy 207.952281 71.176376) (xy 207.889022 71.371065) (xy 207.857 71.573248) + (xy 204.5049 71.573248) (xy 204.472877 71.371066) (xy 204.471057 71.365466) (xy 204.409618 71.176376) + (xy 204.375903 71.110207) (xy 204.316687 70.99399) (xy 204.285797 70.951473) (xy 204.196371 70.828386) + (xy 204.051613 70.683628) (xy 203.886013 70.563315) (xy 203.886012 70.563314) (xy 203.88601 70.563313) + (xy 203.829053 70.534291) (xy 203.703623 70.470381) (xy 203.508934 70.407122) (xy 203.334395 70.379478) + (xy 203.306752 70.3751) (xy 203.102048 70.3751) (xy 203.077729 70.378951) (xy 202.899865 70.407122) + (xy 202.705176 70.470381) (xy 202.522786 70.563315) (xy 202.357186 70.683628) (xy 202.212432 70.828382) + (xy 202.212428 70.828387) (xy 202.114068 70.96377) (xy 202.058739 71.006436) (xy 201.989125 71.012415) + (xy 201.92733 70.97981) (xy 201.913432 70.96377) (xy 201.815071 70.828387) (xy 201.815067 70.828382) + (xy 201.670313 70.683628) (xy 201.504713 70.563315) (xy 201.504712 70.563314) (xy 201.50471 70.563313) + (xy 201.447753 70.534291) (xy 201.322323 70.470381) (xy 201.127634 70.407122) (xy 200.953095 70.379478) + (xy 200.925452 70.3751) (xy 200.720748 70.3751) (xy 200.696429 70.378951) (xy 200.518565 70.407122) + (xy 200.323876 70.470381) (xy 200.141486 70.563315) (xy 199.975886 70.683628) (xy 199.831132 70.828382) + (xy 199.831128 70.828387) (xy 199.732818 70.963701) (xy 199.677489 71.006367) (xy 199.607875 71.012346) + (xy 199.54608 70.979741) (xy 199.532182 70.963701) (xy 199.433871 70.828387) (xy 199.433867 70.828382) + (xy 199.289113 70.683628) (xy 199.123513 70.563315) (xy 199.123512 70.563314) (xy 199.12351 70.563313) + (xy 199.066553 70.534291) (xy 198.941123 70.470381) (xy 198.746434 70.407122) (xy 198.571895 70.379478) + (xy 198.544252 70.3751) (xy 198.339548 70.3751) (xy 198.315229 70.378951) (xy 198.137365 70.407122) + (xy 197.942676 70.470381) (xy 197.760286 70.563315) (xy 197.594686 70.683628) (xy 197.449932 70.828382) + (xy 197.449928 70.828387) (xy 197.351568 70.96377) (xy 197.296239 71.006436) (xy 197.226625 71.012415) + (xy 197.16483 70.97981) (xy 197.150932 70.96377) (xy 197.052571 70.828387) (xy 197.052567 70.828382) + (xy 196.907813 70.683628) (xy 196.742213 70.563315) (xy 196.742212 70.563314) (xy 196.74221 70.563313) + (xy 196.685253 70.534291) (xy 196.559823 70.470381) (xy 196.365134 70.407122) (xy 196.190595 70.379478) + (xy 196.162952 70.3751) (xy 195.958248 70.3751) (xy 195.933929 70.378951) (xy 195.756065 70.407122) + (xy 195.561376 70.470381) (xy 195.378986 70.563315) (xy 195.213386 70.683628) (xy 195.068632 70.828382) + (xy 195.068628 70.828387) (xy 194.970318 70.963701) (xy 194.914989 71.006367) (xy 194.845375 71.012346) + (xy 194.78358 70.979741) (xy 194.769682 70.963701) (xy 194.671371 70.828387) (xy 194.671367 70.828382) + (xy 194.526613 70.683628) (xy 194.361013 70.563315) (xy 194.361012 70.563314) (xy 194.36101 70.563313) + (xy 194.304053 70.534291) (xy 194.178623 70.470381) (xy 193.983934 70.407122) (xy 193.809395 70.379478) + (xy 193.781752 70.3751) (xy 193.577048 70.3751) (xy 193.552729 70.378951) (xy 193.374865 70.407122) + (xy 193.180176 70.470381) (xy 192.997786 70.563315) (xy 192.832186 70.683628) (xy 192.687428 70.828386) + (xy 192.567115 70.993986) (xy 192.474181 71.176376) (xy 192.410922 71.371065) (xy 192.3789 71.573248) + (xy 189.0268 71.573248) (xy 188.994777 71.371066) (xy 188.992957 71.365466) (xy 188.931518 71.176376) + (xy 188.897803 71.110207) (xy 188.838587 70.99399) (xy 188.807697 70.951473) (xy 188.718271 70.828386) + (xy 188.573513 70.683628) (xy 188.407913 70.563315) (xy 188.407912 70.563314) (xy 188.40791 70.563313) + (xy 188.350953 70.534291) (xy 188.225523 70.470381) (xy 188.030834 70.407122) (xy 187.856295 70.379478) + (xy 187.828652 70.3751) (xy 187.623948 70.3751) (xy 187.599629 70.378951) (xy 187.421765 70.407122) + (xy 187.227076 70.470381) (xy 187.044686 70.563315) (xy 186.879086 70.683628) (xy 186.734332 70.828382) + (xy 186.734328 70.828387) (xy 186.635968 70.96377) (xy 186.580639 71.006436) (xy 186.511025 71.012415) + (xy 186.44923 70.97981) (xy 186.435332 70.96377) (xy 186.336971 70.828387) (xy 186.336967 70.828382) + (xy 186.192213 70.683628) (xy 186.026613 70.563315) (xy 186.026612 70.563314) (xy 186.02661 70.563313) + (xy 185.969653 70.534291) (xy 185.844223 70.470381) (xy 185.649534 70.407122) (xy 185.474995 70.379478) + (xy 185.447352 70.3751) (xy 185.242648 70.3751) (xy 185.218329 70.378951) (xy 185.040465 70.407122) + (xy 184.845776 70.470381) (xy 184.663386 70.563315) (xy 184.497786 70.683628) (xy 184.353032 70.828382) + (xy 184.353028 70.828387) (xy 184.249852 70.970398) (xy 184.194522 71.013064) (xy 184.124909 71.019043) + (xy 184.063114 70.986438) (xy 184.049216 70.970398) (xy 183.941971 70.822786) (xy 183.797213 70.678028) + (xy 183.631613 70.557715) (xy 183.631612 70.557714) (xy 183.63161 70.557713) (xy 183.574653 70.528691) + (xy 183.449223 70.464781) (xy 183.254534 70.401522) (xy 183.079995 70.373878) (xy 183.052352 70.3695) + (xy 182.847648 70.3695) (xy 182.823329 70.373351) (xy 182.645465 70.401522) (xy 182.450776 70.464781) + (xy 182.268386 70.557715) (xy 182.102786 70.678028) (xy 181.958032 70.822782) (xy 181.958028 70.822787) + (xy 181.864533 70.951473) (xy 181.809203 70.994139) (xy 181.73959 71.000118) (xy 181.677795 70.967512) + (xy 181.663901 70.951479) (xy 181.574466 70.828381) (xy 181.429719 70.683634) (xy 181.429713 70.683628) + (xy 181.264113 70.563315) (xy 181.264112 70.563314) (xy 181.26411 70.563313) (xy 181.207153 70.534291) + (xy 181.081723 70.470381) (xy 180.887034 70.407122) (xy 180.712495 70.379478) (xy 180.684852 70.3751) + (xy 180.480148 70.3751) (xy 180.455829 70.378951) (xy 180.277965 70.407122) (xy 180.083276 70.470381) + (xy 179.900886 70.563315) (xy 179.735286 70.683628) (xy 179.590528 70.828386) (xy 179.470215 70.993986) + (xy 179.377281 71.176376) (xy 179.314022 71.371065) (xy 179.282 71.573248) (xy 175.9205 71.573248) + (xy 175.9205 71.567648) (xy 175.888477 71.365466) (xy 175.82522 71.170781) (xy 175.825218 71.170778) + (xy 175.825218 71.170776) (xy 175.791503 71.104607) (xy 175.732287 70.98839) (xy 175.71435 70.963701) + (xy 175.611971 70.822786) (xy 175.467213 70.678028) (xy 175.301613 70.557715) (xy 175.301612 70.557714) + (xy 175.30161 70.557713) (xy 175.244653 70.528691) (xy 175.119223 70.464781) (xy 174.924534 70.401522) + (xy 174.749995 70.373878) (xy 174.722352 70.3695) (xy 174.517648 70.3695) (xy 174.493329 70.373351) + (xy 174.315465 70.401522) (xy 174.120776 70.464781) (xy 173.938386 70.557715) (xy 173.772786 70.678028) + (xy 173.628032 70.822782) (xy 173.628028 70.822787) (xy 173.532333 70.954501) (xy 173.477003 70.997167) + (xy 173.40739 71.003146) (xy 173.345595 70.97054) (xy 173.3317 70.954506) (xy 173.240066 70.828381) + (xy 173.095319 70.683634) (xy 173.095313 70.683628) (xy 172.929713 70.563315) (xy 172.929712 70.563314) + (xy 172.92971 70.563313) (xy 172.872753 70.534291) (xy 172.747323 70.470381) (xy 172.552634 70.407122) + (xy 172.378095 70.379478) (xy 172.350452 70.3751) (xy 172.145748 70.3751) (xy 172.121429 70.378951) + (xy 171.943565 70.407122) (xy 171.748876 70.470381) (xy 171.566486 70.563315) (xy 171.400886 70.683628) + (xy 171.256132 70.828382) (xy 171.256128 70.828387) (xy 171.157818 70.963701) (xy 171.102489 71.006367) + (xy 171.032875 71.012346) (xy 170.97108 70.979741) (xy 170.957182 70.963701) (xy 170.858871 70.828387) + (xy 170.858867 70.828382) (xy 170.714113 70.683628) (xy 170.548513 70.563315) (xy 170.548512 70.563314) + (xy 170.54851 70.563313) (xy 170.491553 70.534291) (xy 170.366123 70.470381) (xy 170.171434 70.407122) + (xy 169.996895 70.379478) (xy 169.969252 70.3751) (xy 169.764548 70.3751) (xy 169.740229 70.378951) + (xy 169.562365 70.407122) (xy 169.367676 70.470381) (xy 169.185286 70.563315) (xy 169.019686 70.683628) + (xy 168.874932 70.828382) (xy 168.874928 70.828387) (xy 168.776568 70.96377) (xy 168.721239 71.006436) + (xy 168.651625 71.012415) (xy 168.58983 70.97981) (xy 168.575932 70.96377) (xy 168.477571 70.828387) + (xy 168.477567 70.828382) (xy 168.332813 70.683628) (xy 168.167213 70.563315) (xy 168.167212 70.563314) + (xy 168.16721 70.563313) (xy 168.110253 70.534291) (xy 167.984823 70.470381) (xy 167.790134 70.407122) + (xy 167.615595 70.379478) (xy 167.587952 70.3751) (xy 167.383248 70.3751) (xy 167.358929 70.378951) + (xy 167.181065 70.407122) (xy 166.986376 70.470381) (xy 166.803986 70.563315) (xy 166.638386 70.683628) + (xy 166.493628 70.828386) (xy 166.373315 70.993986) (xy 166.280381 71.176376) (xy 166.217122 71.371065) + (xy 166.1851 71.573248) (xy 162.833 71.573248) (xy 162.800977 71.371066) (xy 162.799157 71.365466) + (xy 162.737718 71.176376) (xy 162.704003 71.110207) (xy 162.644787 70.99399) (xy 162.613897 70.951473) + (xy 162.524471 70.828386) (xy 162.379713 70.683628) (xy 162.214113 70.563315) (xy 162.214112 70.563314) + (xy 162.21411 70.563313) (xy 162.157153 70.534291) (xy 162.031723 70.470381) (xy 161.837034 70.407122) + (xy 161.662495 70.379478) (xy 161.634852 70.3751) (xy 161.430148 70.3751) (xy 161.405829 70.378951) + (xy 161.227965 70.407122) (xy 161.033276 70.470381) (xy 160.850886 70.563315) (xy 160.685286 70.683628) + (xy 160.540532 70.828382) (xy 160.540528 70.828387) (xy 160.442218 70.963701) (xy 160.386889 71.006367) + (xy 160.317275 71.012346) (xy 160.25548 70.979741) (xy 160.241582 70.963701) (xy 160.143271 70.828387) + (xy 160.143267 70.828382) (xy 159.998513 70.683628) (xy 159.832913 70.563315) (xy 159.832912 70.563314) + (xy 159.83291 70.563313) (xy 159.775953 70.534291) (xy 159.650523 70.470381) (xy 159.455834 70.407122) + (xy 159.281295 70.379478) (xy 159.253652 70.3751) (xy 159.048948 70.3751) (xy 159.024629 70.378951) + (xy 158.846765 70.407122) (xy 158.652076 70.470381) (xy 158.469686 70.563315) (xy 158.304086 70.683628) + (xy 158.159332 70.828382) (xy 158.159328 70.828387) (xy 158.060968 70.96377) (xy 158.005639 71.006436) + (xy 157.936025 71.012415) (xy 157.87423 70.97981) (xy 157.860332 70.96377) (xy 157.761971 70.828387) + (xy 157.761967 70.828382) (xy 157.617213 70.683628) (xy 157.451613 70.563315) (xy 157.451612 70.563314) + (xy 157.45161 70.563313) (xy 157.394653 70.534291) (xy 157.269223 70.470381) (xy 157.074534 70.407122) + (xy 156.899995 70.379478) (xy 156.872352 70.3751) (xy 156.667648 70.3751) (xy 156.643329 70.378951) + (xy 156.465465 70.407122) (xy 156.270776 70.470381) (xy 156.088386 70.563315) (xy 155.922786 70.683628) + (xy 155.778032 70.828382) (xy 155.778028 70.828387) (xy 155.679718 70.963701) (xy 155.624389 71.006367) + (xy 155.554775 71.012346) (xy 155.49298 70.979741) (xy 155.479082 70.963701) (xy 155.380771 70.828387) + (xy 155.380767 70.828382) (xy 155.236013 70.683628) (xy 155.070413 70.563315) (xy 155.070412 70.563314) + (xy 155.07041 70.563313) (xy 155.013453 70.534291) (xy 154.888023 70.470381) (xy 154.693334 70.407122) + (xy 154.518795 70.379478) (xy 154.491152 70.3751) (xy 154.286448 70.3751) (xy 154.262129 70.378951) + (xy 154.084265 70.407122) (xy 153.889576 70.470381) (xy 153.707186 70.563315) (xy 153.541586 70.683628) + (xy 153.396832 70.828382) (xy 153.396828 70.828387) (xy 153.298468 70.96377) (xy 153.243139 71.006436) + (xy 153.173525 71.012415) (xy 153.11173 70.97981) (xy 153.097832 70.96377) (xy 152.999471 70.828387) + (xy 152.999467 70.828382) (xy 152.854713 70.683628) (xy 152.689113 70.563315) (xy 152.689112 70.563314) + (xy 152.68911 70.563313) (xy 152.632153 70.534291) (xy 152.506723 70.470381) (xy 152.312034 70.407122) + (xy 152.137495 70.379478) (xy 152.109852 70.3751) (xy 151.905148 70.3751) (xy 151.880829 70.378951) + (xy 151.702965 70.407122) (xy 151.508276 70.470381) (xy 151.325886 70.563315) (xy 151.160286 70.683628) + (xy 151.015528 70.828386) (xy 150.895215 70.993986) (xy 150.802281 71.176376) (xy 150.739022 71.371065) + (xy 150.707 71.573248) (xy 147.3549 71.573248) (xy 147.322877 71.371066) (xy 147.321057 71.365466) + (xy 147.259618 71.176376) (xy 147.225903 71.110207) (xy 147.166687 70.99399) (xy 147.135797 70.951473) + (xy 147.046371 70.828386) (xy 146.901613 70.683628) (xy 146.736013 70.563315) (xy 146.736012 70.563314) + (xy 146.73601 70.563313) (xy 146.679053 70.534291) (xy 146.553623 70.470381) (xy 146.358934 70.407122) + (xy 146.184395 70.379478) (xy 146.156752 70.3751) (xy 145.952048 70.3751) (xy 145.927729 70.378951) + (xy 145.749865 70.407122) (xy 145.555176 70.470381) (xy 145.372786 70.563315) (xy 145.207186 70.683628) + (xy 145.062432 70.828382) (xy 145.062428 70.828387) (xy 144.964068 70.96377) (xy 144.908739 71.006436) + (xy 144.839125 71.012415) (xy 144.77733 70.97981) (xy 144.763432 70.96377) (xy 144.665071 70.828387) + (xy 144.665067 70.828382) (xy 144.520313 70.683628) (xy 144.354713 70.563315) (xy 144.354712 70.563314) + (xy 144.35471 70.563313) (xy 144.297753 70.534291) (xy 144.172323 70.470381) (xy 143.977634 70.407122) + (xy 143.803095 70.379478) (xy 143.775452 70.3751) (xy 143.570748 70.3751) (xy 143.546429 70.378951) + (xy 143.368565 70.407122) (xy 143.173876 70.470381) (xy 142.991486 70.563315) (xy 142.825886 70.683628) + (xy 142.681132 70.828382) (xy 142.681128 70.828387) (xy 142.582818 70.963701) (xy 142.527489 71.006367) + (xy 142.457875 71.012346) (xy 142.39608 70.979741) (xy 142.382182 70.963701) (xy 142.283871 70.828387) + (xy 142.283867 70.828382) (xy 142.139113 70.683628) (xy 141.973513 70.563315) (xy 141.973512 70.563314) + (xy 141.97351 70.563313) (xy 141.916553 70.534291) (xy 141.791123 70.470381) (xy 141.596434 70.407122) + (xy 141.421895 70.379478) (xy 141.394252 70.3751) (xy 141.189548 70.3751) (xy 141.165229 70.378951) + (xy 140.987365 70.407122) (xy 140.792676 70.470381) (xy 140.610286 70.563315) (xy 140.444686 70.683628) + (xy 140.299932 70.828382) (xy 140.299928 70.828387) (xy 140.201568 70.96377) (xy 140.146239 71.006436) + (xy 140.076625 71.012415) (xy 140.01483 70.97981) (xy 140.000932 70.96377) (xy 139.902571 70.828387) + (xy 139.902567 70.828382) (xy 139.757813 70.683628) (xy 139.592213 70.563315) (xy 139.592212 70.563314) + (xy 139.59221 70.563313) (xy 139.535253 70.534291) (xy 139.409823 70.470381) (xy 139.215134 70.407122) + (xy 139.040595 70.379478) (xy 139.012952 70.3751) (xy 138.808248 70.3751) (xy 138.783929 70.378951) + (xy 138.606065 70.407122) (xy 138.411376 70.470381) (xy 138.228986 70.563315) (xy 138.063386 70.683628) + (xy 137.918632 70.828382) (xy 137.918628 70.828387) (xy 137.820318 70.963701) (xy 137.764989 71.006367) + (xy 137.695375 71.012346) (xy 137.63358 70.979741) (xy 137.619682 70.963701) (xy 137.521371 70.828387) + (xy 137.521367 70.828382) (xy 137.376613 70.683628) (xy 137.211013 70.563315) (xy 137.211012 70.563314) + (xy 137.21101 70.563313) (xy 137.154053 70.534291) (xy 137.028623 70.470381) (xy 136.833934 70.407122) + (xy 136.659395 70.379478) (xy 136.631752 70.3751) (xy 136.427048 70.3751) (xy 136.402729 70.378951) + (xy 136.224865 70.407122) (xy 136.030176 70.470381) (xy 135.847786 70.563315) (xy 135.682186 70.683628) + (xy 135.537428 70.828386) (xy 135.417115 70.993986) (xy 135.324181 71.176376) (xy 135.260922 71.371065) + (xy 135.2289 71.573248) (xy 131.8768 71.573248) (xy 131.844777 71.371066) (xy 131.842957 71.365466) + (xy 131.781518 71.176376) (xy 131.747803 71.110207) (xy 131.688587 70.99399) (xy 131.657697 70.951473) + (xy 131.568271 70.828386) (xy 131.423513 70.683628) (xy 131.257913 70.563315) (xy 131.257912 70.563314) + (xy 131.25791 70.563313) (xy 131.200953 70.534291) (xy 131.075523 70.470381) (xy 130.880834 70.407122) + (xy 130.706295 70.379478) (xy 130.678652 70.3751) (xy 130.473948 70.3751) (xy 130.449629 70.378951) + (xy 130.271765 70.407122) (xy 130.077076 70.470381) (xy 129.894686 70.563315) (xy 129.729086 70.683628) + (xy 129.584332 70.828382) (xy 129.584328 70.828387) (xy 129.485968 70.96377) (xy 129.430639 71.006436) + (xy 129.361025 71.012415) (xy 129.29923 70.97981) (xy 129.285332 70.96377) (xy 129.186971 70.828387) + (xy 129.186967 70.828382) (xy 129.042213 70.683628) (xy 128.876613 70.563315) (xy 128.876612 70.563314) + (xy 128.87661 70.563313) (xy 128.819653 70.534291) (xy 128.694223 70.470381) (xy 128.499534 70.407122) + (xy 128.324995 70.379478) (xy 128.297352 70.3751) (xy 128.092648 70.3751) (xy 128.068329 70.378951) + (xy 127.890465 70.407122) (xy 127.695776 70.470381) (xy 127.513386 70.563315) (xy 127.347786 70.683628) + (xy 127.203032 70.828382) (xy 127.203028 70.828387) (xy 127.104718 70.963701) (xy 127.049389 71.006367) + (xy 126.979775 71.012346) (xy 126.91798 70.979741) (xy 126.904082 70.963701) (xy 126.805771 70.828387) + (xy 126.805767 70.828382) (xy 126.661013 70.683628) (xy 126.495413 70.563315) (xy 126.495412 70.563314) + (xy 126.49541 70.563313) (xy 126.438453 70.534291) (xy 126.313023 70.470381) (xy 126.118334 70.407122) + (xy 125.943795 70.379478) (xy 125.916152 70.3751) (xy 125.711448 70.3751) (xy 125.687129 70.378951) + (xy 125.509265 70.407122) (xy 125.314576 70.470381) (xy 125.132186 70.563315) (xy 124.966586 70.683628) + (xy 124.821832 70.828382) (xy 124.821828 70.828387) (xy 124.723468 70.96377) (xy 124.668139 71.006436) + (xy 124.598525 71.012415) (xy 124.53673 70.97981) (xy 124.522832 70.96377) (xy 124.424471 70.828387) + (xy 124.424467 70.828382) (xy 124.279713 70.683628) (xy 124.114113 70.563315) (xy 124.114112 70.563314) + (xy 124.11411 70.563313) (xy 124.057153 70.534291) (xy 123.931723 70.470381) (xy 123.737034 70.407122) + (xy 123.562495 70.379478) (xy 123.534852 70.3751) (xy 123.330148 70.3751) (xy 123.305829 70.378951) + (xy 123.127965 70.407122) (xy 122.933276 70.470381) (xy 122.750886 70.563315) (xy 122.585286 70.683628) + (xy 122.440532 70.828382) (xy 122.440528 70.828387) (xy 122.342218 70.963701) (xy 122.286889 71.006367) + (xy 122.217275 71.012346) (xy 122.15548 70.979741) (xy 122.141582 70.963701) (xy 122.043271 70.828387) + (xy 122.043267 70.828382) (xy 121.898513 70.683628) (xy 121.732913 70.563315) (xy 121.732912 70.563314) + (xy 121.73291 70.563313) (xy 121.675953 70.534291) (xy 121.550523 70.470381) (xy 121.355834 70.407122) + (xy 121.181295 70.379478) (xy 121.153652 70.3751) (xy 120.948948 70.3751) (xy 120.924629 70.378951) + (xy 120.746765 70.407122) (xy 120.552076 70.470381) (xy 120.369686 70.563315) (xy 120.204086 70.683628) + (xy 120.059328 70.828386) (xy 119.939015 70.993986) (xy 119.846081 71.176376) (xy 119.782822 71.371065) + (xy 119.751687 71.567648) (xy 119.7508 71.573248) (xy 119.7508 71.777952) (xy 119.763479 71.858003) + (xy 119.767284 71.882028) (xy 119.758328 71.951322) (xy 119.713331 72.004773) (xy 119.692263 72.015986) + (xy 119.597824 72.055104) (xy 119.597814 72.055109) (xy 119.466711 72.14271) (xy 119.466707 72.142713) + (xy 119.355213 72.254207) (xy 119.35521 72.254211) (xy 119.267609 72.385314) (xy 119.267602 72.385327) + (xy 119.207264 72.530998) (xy 119.207261 72.53101) (xy 119.1765 72.685653) (xy 117.479436 72.685653) + (xy 117.479436 69.112653) (xy 134.9635 69.112653) (xy 134.9635 69.270346) (xy 134.994261 69.424989) + (xy 134.994264 69.425001) (xy 135.054602 69.570672) (xy 135.054607 69.570681) (xy 135.14221 69.701788) + (xy 135.142213 69.701792) (xy 135.253707 69.813286) (xy 135.253711 69.813289) (xy 135.384814 69.90089) + (xy 135.384827 69.900897) (xy 135.530498 69.961235) (xy 135.530503 69.961237) (xy 135.685153 69.991999) + (xy 135.685156 69.992) (xy 135.685158 69.992) (xy 135.842844 69.992) (xy 135.842845 69.991999) (xy 135.997497 69.961237) + (xy 136.143179 69.900894) (xy 136.274289 69.813289) (xy 136.385789 69.701789) (xy 136.473394 69.570679) + (xy 136.533737 69.424997) (xy 136.5645 69.270342) (xy 136.5645 69.112658) (xy 136.5645 69.112655) + (xy 136.564499 69.112653) (xy 136.539357 68.986258) (xy 136.533737 68.958003) (xy 136.524372 68.935394) + (xy 136.473397 68.812327) (xy 136.47339 68.812314) (xy 136.385789 68.681211) (xy 136.385786 68.681207) + (xy 136.274292 68.569713) (xy 136.274288 68.56971) (xy 136.143185 68.482109) (xy 136.143172 68.482102) + (xy 135.997501 68.421764) (xy 135.997489 68.421761) (xy 135.842845 68.391) (xy 135.842842 68.391) + (xy 135.685158 68.391) (xy 135.685155 68.391) (xy 135.53051 68.421761) (xy 135.530498 68.421764) + (xy 135.384827 68.482102) (xy 135.384814 68.482109) (xy 135.253711 68.56971) (xy 135.253707 68.569713) + (xy 135.142213 68.681207) (xy 135.14221 68.681211) (xy 135.054609 68.812314) (xy 135.054602 68.812327) + (xy 134.994264 68.957998) (xy 134.994261 68.95801) (xy 134.9635 69.112653) (xy 117.479436 69.112653) + (xy 117.479436 68.147153) (xy 146.8987 68.147153) (xy 146.8987 68.304846) (xy 146.929461 68.459489) + (xy 146.929464 68.459501) (xy 146.989802 68.605172) (xy 146.989809 68.605185) (xy 147.07741 68.736288) + (xy 147.077413 68.736292) (xy 147.188907 68.847786) (xy 147.188911 68.847789) (xy 147.320014 68.93539) + (xy 147.320027 68.935397) (xy 147.442806 68.986253) (xy 147.465703 68.995737) (xy 147.620353 69.026499) + (xy 147.620356 69.0265) (xy 147.620358 69.0265) (xy 147.778044 69.0265) (xy 147.778045 69.026499) + (xy 147.932697 68.995737) (xy 147.955594 68.986253) (xy 152.8665 68.986253) (xy 152.8665 69.143946) + (xy 152.897261 69.298589) (xy 152.897264 69.298601) (xy 152.957602 69.444272) (xy 152.957609 69.444285) + (xy 153.04521 69.575388) (xy 153.045213 69.575392) (xy 153.156707 69.686886) (xy 153.156711 69.686889) + (xy 153.287814 69.77449) (xy 153.287827 69.774497) (xy 153.381481 69.813289) (xy 153.433503 69.834837) + (xy 153.588153 69.865599) (xy 153.588156 69.8656) (xy 153.588158 69.8656) (xy 153.745844 69.8656) + (xy 153.745845 69.865599) (xy 153.900497 69.834837) (xy 154.046179 69.774494) (xy 154.177289 69.686889) + (xy 154.288789 69.575389) (xy 154.376394 69.444279) (xy 154.436737 69.298597) (xy 154.4675 69.143942) + (xy 154.4675 68.986258) (xy 154.4675 68.986255) (xy 154.467499 68.986253) (xy 154.44578 68.877064) + (xy 154.436737 68.831603) (xy 154.428747 68.812314) (xy 154.376397 68.685927) (xy 154.37639 68.685914) + (xy 154.288789 68.554811) (xy 154.288786 68.554807) (xy 154.177292 68.443313) (xy 154.177288 68.44331) + (xy 154.046185 68.355709) (xy 154.046172 68.355702) (xy 153.900501 68.295364) (xy 153.900489 68.295361) + (xy 153.745845 68.2646) (xy 153.745842 68.2646) (xy 153.588158 68.2646) (xy 153.588155 68.2646) + (xy 153.43351 68.295361) (xy 153.433498 68.295364) (xy 153.287827 68.355702) (xy 153.287814 68.355709) + (xy 153.156711 68.44331) (xy 153.156707 68.443313) (xy 153.045213 68.554807) (xy 153.04521 68.554811) + (xy 152.957609 68.685914) (xy 152.957602 68.685927) (xy 152.897264 68.831598) (xy 152.897261 68.83161) + (xy 152.8665 68.986253) (xy 147.955594 68.986253) (xy 148.078379 68.935394) (xy 148.078385 68.93539) + (xy 148.165677 68.877064) (xy 148.188468 68.861834) (xy 148.209489 68.847789) (xy 148.320989 68.736289) + (xy 148.408594 68.605179) (xy 148.468937 68.459497) (xy 148.4997 68.304842) (xy 148.4997 68.147158) + (xy 148.4997 68.147155) (xy 148.499699 68.147153) (xy 148.468938 67.99251) (xy 148.468937 67.992503) + (xy 148.468935 67.992498) (xy 148.408597 67.846827) (xy 148.40859 67.846814) (xy 148.320989 67.715711) + (xy 148.320986 67.715707) (xy 148.209492 67.604213) (xy 148.209488 67.60421) (xy 148.078385 67.516609) + (xy 148.078372 67.516602) (xy 147.932701 67.456264) (xy 147.932689 67.456261) (xy 147.778045 67.4255) + (xy 147.778042 67.4255) (xy 147.620358 67.4255) (xy 147.620355 67.4255) (xy 147.46571 67.456261) + (xy 147.465698 67.456264) (xy 147.320027 67.516602) (xy 147.320014 67.516609) (xy 147.188911 67.60421) + (xy 147.188907 67.604213) (xy 147.077413 67.715707) (xy 147.07741 67.715711) (xy 146.989809 67.846814) + (xy 146.989802 67.846827) (xy 146.929464 67.992498) (xy 146.929461 67.99251) (xy 146.8987 68.147153) + (xy 117.479436 68.147153) (xy 117.479436 63.207735) (xy 119.7508 63.207735) (xy 119.7508 64.90347) + (xy 119.750801 64.903476) (xy 119.757208 64.963083) (xy 119.807502 65.097928) (xy 119.807506 65.097935) + (xy 119.893752 65.213144) (xy 119.893755 65.213147) (xy 120.008964 65.299393) (xy 120.008971 65.299397) + (xy 120.143817 65.349691) (xy 120.143816 65.349691) (xy 120.150744 65.350435) (xy 120.203427 65.3561) + (xy 121.899172 65.356099) (xy 121.958783 65.349691) (xy 122.093631 65.299396) (xy 122.167589 65.24403) + (xy 122.233053 65.219614) (xy 122.301326 65.234465) (xy 122.31621 65.24403) (xy 122.390169 65.299396) + (xy 122.39017 65.299396) (xy 122.390171 65.299397) (xy 122.525017 65.349691) (xy 122.525016 65.349691) + (xy 122.531944 65.350435) (xy 122.584627 65.3561) (xy 124.280372 65.356099) (xy 124.339983 65.349691) + (xy 124.474831 65.299396) (xy 124.482316 65.293793) (xy 124.548839 65.243994) (xy 124.614303 65.219576) + (xy 124.682576 65.234427) (xy 124.697461 65.243994) (xy 124.771464 65.299393) (xy 124.771471 65.299397) + (xy 124.906317 65.349691) (xy 124.906316 65.349691) (xy 124.913244 65.350435) (xy 124.965927 65.3561) + (xy 126.661672 65.356099) (xy 126.721283 65.349691) (xy 126.856131 65.299396) (xy 126.930089 65.24403) + (xy 126.995553 65.219614) (xy 127.063826 65.234465) (xy 127.07871 65.24403) (xy 127.152669 65.299396) + (xy 127.15267 65.299396) (xy 127.152671 65.299397) (xy 127.287517 65.349691) (xy 127.287516 65.349691) + (xy 127.294444 65.350435) (xy 127.347127 65.3561) (xy 129.042872 65.356099) (xy 129.102483 65.349691) + (xy 129.237331 65.299396) (xy 129.244816 65.293793) (xy 129.311339 65.243994) (xy 129.376803 65.219576) + (xy 129.445076 65.234427) (xy 129.459961 65.243994) (xy 129.533964 65.299393) (xy 129.533971 65.299397) + (xy 129.668817 65.349691) (xy 129.668816 65.349691) (xy 129.675744 65.350435) (xy 129.728427 65.3561) + (xy 131.424172 65.356099) (xy 131.483783 65.349691) (xy 131.618631 65.299396) (xy 131.733846 65.213146) + (xy 131.820096 65.097931) (xy 131.870391 64.963083) (xy 131.8768 64.903473) (xy 131.876799 63.207735) + (xy 135.2289 63.207735) (xy 135.2289 64.90347) (xy 135.228901 64.903476) (xy 135.235308 64.963083) + (xy 135.285602 65.097928) (xy 135.285606 65.097935) (xy 135.371852 65.213144) (xy 135.371855 65.213147) + (xy 135.487064 65.299393) (xy 135.487071 65.299397) (xy 135.621917 65.349691) (xy 135.621916 65.349691) + (xy 135.628844 65.350435) (xy 135.681527 65.3561) (xy 137.377272 65.356099) (xy 137.436883 65.349691) + (xy 137.571731 65.299396) (xy 137.645689 65.24403) (xy 137.711153 65.219614) (xy 137.779426 65.234465) + (xy 137.79431 65.24403) (xy 137.868269 65.299396) (xy 137.86827 65.299396) (xy 137.868271 65.299397) + (xy 138.003117 65.349691) (xy 138.003116 65.349691) (xy 138.010044 65.350435) (xy 138.062727 65.3561) + (xy 139.758472 65.356099) (xy 139.818083 65.349691) (xy 139.952931 65.299396) (xy 139.960416 65.293793) + (xy 140.026939 65.243994) (xy 140.092403 65.219576) (xy 140.160676 65.234427) (xy 140.175561 65.243994) + (xy 140.249564 65.299393) (xy 140.249571 65.299397) (xy 140.384417 65.349691) (xy 140.384416 65.349691) + (xy 140.391344 65.350435) (xy 140.444027 65.3561) (xy 142.139772 65.356099) (xy 142.199383 65.349691) + (xy 142.334231 65.299396) (xy 142.408189 65.24403) (xy 142.473653 65.219614) (xy 142.541926 65.234465) + (xy 142.55681 65.24403) (xy 142.630769 65.299396) (xy 142.63077 65.299396) (xy 142.630771 65.299397) + (xy 142.765617 65.349691) (xy 142.765616 65.349691) (xy 142.772544 65.350435) (xy 142.825227 65.3561) + (xy 144.520972 65.356099) (xy 144.580583 65.349691) (xy 144.715431 65.299396) (xy 144.722916 65.293793) + (xy 144.789439 65.243994) (xy 144.854903 65.219576) (xy 144.923176 65.234427) (xy 144.938061 65.243994) + (xy 145.012064 65.299393) (xy 145.012071 65.299397) (xy 145.146917 65.349691) (xy 145.146916 65.349691) + (xy 145.153844 65.350435) (xy 145.206527 65.3561) (xy 146.902272 65.356099) (xy 146.961883 65.349691) + (xy 147.096731 65.299396) (xy 147.211946 65.213146) (xy 147.298196 65.097931) (xy 147.348491 64.963083) + (xy 147.3549 64.903473) (xy 147.354899 63.207735) (xy 150.707 63.207735) (xy 150.707 64.90347) (xy 150.707001 64.903476) + (xy 150.713408 64.963083) (xy 150.763702 65.097928) (xy 150.763706 65.097935) (xy 150.849952 65.213144) + (xy 150.849955 65.213147) (xy 150.965164 65.299393) (xy 150.965171 65.299397) (xy 151.100017 65.349691) + (xy 151.100016 65.349691) (xy 151.106944 65.350435) (xy 151.159627 65.3561) (xy 152.855372 65.356099) + (xy 152.914983 65.349691) (xy 153.049831 65.299396) (xy 153.057316 65.293793) (xy 153.123839 65.243994) + (xy 153.189303 65.219576) (xy 153.257576 65.234427) (xy 153.272461 65.243994) (xy 153.346464 65.299393) + (xy 153.346471 65.299397) (xy 153.481317 65.349691) (xy 153.481316 65.349691) (xy 153.488244 65.350435) + (xy 153.540927 65.3561) (xy 155.236672 65.356099) (xy 155.296283 65.349691) (xy 155.431131 65.299396) + (xy 155.505089 65.24403) (xy 155.570553 65.219614) (xy 155.638826 65.234465) (xy 155.65371 65.24403) + (xy 155.727669 65.299396) (xy 155.72767 65.299396) (xy 155.727671 65.299397) (xy 155.862517 65.349691) + (xy 155.862516 65.349691) (xy 155.869444 65.350435) (xy 155.922127 65.3561) (xy 157.617872 65.356099) + (xy 157.677483 65.349691) (xy 157.812331 65.299396) (xy 157.819816 65.293793) (xy 157.886339 65.243994) + (xy 157.951803 65.219576) (xy 158.020076 65.234427) (xy 158.034961 65.243994) (xy 158.108964 65.299393) + (xy 158.108971 65.299397) (xy 158.243817 65.349691) (xy 158.243816 65.349691) (xy 158.250744 65.350435) + (xy 158.303427 65.3561) (xy 159.999172 65.356099) (xy 160.058783 65.349691) (xy 160.193631 65.299396) + (xy 160.267589 65.24403) (xy 160.333053 65.219614) (xy 160.401326 65.234465) (xy 160.41621 65.24403) + (xy 160.490169 65.299396) (xy 160.49017 65.299396) (xy 160.490171 65.299397) (xy 160.625017 65.349691) + (xy 160.625016 65.349691) (xy 160.631944 65.350435) (xy 160.684627 65.3561) (xy 162.380372 65.356099) + (xy 162.439983 65.349691) (xy 162.574831 65.299396) (xy 162.690046 65.213146) (xy 162.776296 65.097931) + (xy 162.826591 64.963083) (xy 162.833 64.903473) (xy 162.832999 63.207735) (xy 166.1851 63.207735) + (xy 166.1851 64.90347) (xy 166.185101 64.903476) (xy 166.191508 64.963083) (xy 166.241802 65.097928) + (xy 166.241806 65.097935) (xy 166.328052 65.213144) (xy 166.328055 65.213147) (xy 166.443264 65.299393) + (xy 166.443271 65.299397) (xy 166.578117 65.349691) (xy 166.578116 65.349691) (xy 166.585044 65.350435) + (xy 166.637727 65.3561) (xy 168.333472 65.356099) (xy 168.393083 65.349691) (xy 168.527931 65.299396) + (xy 168.535416 65.293793) (xy 168.601939 65.243994) (xy 168.667403 65.219576) (xy 168.735676 65.234427) + (xy 168.750561 65.243994) (xy 168.824564 65.299393) (xy 168.824571 65.299397) (xy 168.959417 65.349691) + (xy 168.959416 65.349691) (xy 168.966344 65.350435) (xy 169.019027 65.3561) (xy 170.714772 65.356099) + (xy 170.774383 65.349691) (xy 170.909231 65.299396) (xy 170.983189 65.24403) (xy 171.048653 65.219614) + (xy 171.116926 65.234465) (xy 171.13181 65.24403) (xy 171.205769 65.299396) (xy 171.20577 65.299396) + (xy 171.205771 65.299397) (xy 171.340617 65.349691) (xy 171.340616 65.349691) (xy 171.347544 65.350435) + (xy 171.400227 65.3561) (xy 173.095972 65.356099) (xy 173.155583 65.349691) (xy 173.290431 65.299396) + (xy 173.36348 65.244711) (xy 173.428942 65.220294) (xy 173.497215 65.235145) (xy 173.512097 65.244708) + (xy 173.577665 65.293793) (xy 173.577668 65.293795) (xy 173.577671 65.293797) (xy 173.712517 65.344091) + (xy 173.712516 65.344091) (xy 173.719444 65.344835) (xy 173.772127 65.3505) (xy 175.467872 65.350499) + (xy 175.527483 65.344091) (xy 175.662331 65.293796) (xy 175.777546 65.207546) (xy 175.863796 65.092331) + (xy 175.914091 64.957483) (xy 175.9205 64.897873) (xy 175.920499 63.207735) (xy 179.282 63.207735) + (xy 179.282 64.90347) (xy 179.282001 64.903476) (xy 179.288408 64.963083) (xy 179.338702 65.097928) + (xy 179.338706 65.097935) (xy 179.424952 65.213144) (xy 179.424955 65.213147) (xy 179.540164 65.299393) + (xy 179.540171 65.299397) (xy 179.675017 65.349691) (xy 179.675016 65.349691) (xy 179.681944 65.350435) + (xy 179.734627 65.3561) (xy 181.430372 65.356099) (xy 181.489983 65.349691) (xy 181.624831 65.299396) + (xy 181.69568 65.246358) (xy 181.761142 65.221941) (xy 181.829415 65.236792) (xy 181.844297 65.246356) + (xy 181.907665 65.293793) (xy 181.907668 65.293795) (xy 181.907671 65.293797) (xy 182.042517 65.344091) + (xy 182.042516 65.344091) (xy 182.049444 65.344835) (xy 182.102127 65.3505) (xy 183.797872 65.350499) + (xy 183.857483 65.344091) (xy 183.992331 65.293796) (xy 184.057899 65.244712) (xy 184.069449 65.236066) + (xy 184.134913 65.211648) (xy 184.203186 65.226499) (xy 184.218065 65.236062) (xy 184.29519 65.293797) + (xy 184.302668 65.299395) (xy 184.302671 65.299397) (xy 184.437517 65.349691) (xy 184.437516 65.349691) + (xy 184.444444 65.350435) (xy 184.497127 65.3561) (xy 186.192872 65.356099) (xy 186.252483 65.349691) + (xy 186.387331 65.299396) (xy 186.394816 65.293793) (xy 186.461339 65.243994) (xy 186.526803 65.219576) + (xy 186.595076 65.234427) (xy 186.609961 65.243994) (xy 186.683964 65.299393) (xy 186.683971 65.299397) + (xy 186.818817 65.349691) (xy 186.818816 65.349691) (xy 186.825744 65.350435) (xy 186.878427 65.3561) + (xy 188.574172 65.356099) (xy 188.633783 65.349691) (xy 188.768631 65.299396) (xy 188.883846 65.213146) + (xy 188.970096 65.097931) (xy 189.020391 64.963083) (xy 189.0268 64.903473) (xy 189.026799 63.207735) + (xy 192.3789 63.207735) (xy 192.3789 64.90347) (xy 192.378901 64.903476) (xy 192.385308 64.963083) + (xy 192.435602 65.097928) (xy 192.435606 65.097935) (xy 192.521852 65.213144) (xy 192.521855 65.213147) + (xy 192.637064 65.299393) (xy 192.637071 65.299397) (xy 192.771917 65.349691) (xy 192.771916 65.349691) + (xy 192.778844 65.350435) (xy 192.831527 65.3561) (xy 194.527272 65.356099) (xy 194.586883 65.349691) + (xy 194.721731 65.299396) (xy 194.795689 65.24403) (xy 194.861153 65.219614) (xy 194.929426 65.234465) + (xy 194.94431 65.24403) (xy 195.018269 65.299396) (xy 195.01827 65.299396) (xy 195.018271 65.299397) + (xy 195.153117 65.349691) (xy 195.153116 65.349691) (xy 195.160044 65.350435) (xy 195.212727 65.3561) + (xy 196.908472 65.356099) (xy 196.968083 65.349691) (xy 197.102931 65.299396) (xy 197.110416 65.293793) + (xy 197.176939 65.243994) (xy 197.242403 65.219576) (xy 197.310676 65.234427) (xy 197.325561 65.243994) + (xy 197.399564 65.299393) (xy 197.399571 65.299397) (xy 197.534417 65.349691) (xy 197.534416 65.349691) + (xy 197.541344 65.350435) (xy 197.594027 65.3561) (xy 199.289772 65.356099) (xy 199.349383 65.349691) + (xy 199.484231 65.299396) (xy 199.558189 65.24403) (xy 199.623653 65.219614) (xy 199.691926 65.234465) + (xy 199.70681 65.24403) (xy 199.780769 65.299396) (xy 199.78077 65.299396) (xy 199.780771 65.299397) + (xy 199.915617 65.349691) (xy 199.915616 65.349691) (xy 199.922544 65.350435) (xy 199.975227 65.3561) + (xy 201.670972 65.356099) (xy 201.730583 65.349691) (xy 201.865431 65.299396) (xy 201.872916 65.293793) + (xy 201.939439 65.243994) (xy 202.004903 65.219576) (xy 202.073176 65.234427) (xy 202.088061 65.243994) + (xy 202.162064 65.299393) (xy 202.162071 65.299397) (xy 202.296917 65.349691) (xy 202.296916 65.349691) + (xy 202.303844 65.350435) (xy 202.356527 65.3561) (xy 204.052272 65.356099) (xy 204.111883 65.349691) + (xy 204.246731 65.299396) (xy 204.361946 65.213146) (xy 204.448196 65.097931) (xy 204.498491 64.963083) + (xy 204.5049 64.903473) (xy 204.504899 63.207735) (xy 207.857 63.207735) (xy 207.857 64.90347) (xy 207.857001 64.903476) + (xy 207.863408 64.963083) (xy 207.913702 65.097928) (xy 207.913706 65.097935) (xy 207.999952 65.213144) + (xy 207.999955 65.213147) (xy 208.115164 65.299393) (xy 208.115171 65.299397) (xy 208.250017 65.349691) + (xy 208.250016 65.349691) (xy 208.256944 65.350435) (xy 208.309627 65.3561) (xy 210.005372 65.356099) + (xy 210.064983 65.349691) (xy 210.199831 65.299396) (xy 210.207316 65.293793) (xy 210.273839 65.243994) + (xy 210.339303 65.219576) (xy 210.407576 65.234427) (xy 210.422461 65.243994) (xy 210.496464 65.299393) + (xy 210.496471 65.299397) (xy 210.631317 65.349691) (xy 210.631316 65.349691) (xy 210.638244 65.350435) + (xy 210.690927 65.3561) (xy 212.386672 65.356099) (xy 212.446283 65.349691) (xy 212.581131 65.299396) + (xy 212.655089 65.24403) (xy 212.720553 65.219614) (xy 212.788826 65.234465) (xy 212.80371 65.24403) + (xy 212.877669 65.299396) (xy 212.87767 65.299396) (xy 212.877671 65.299397) (xy 213.012517 65.349691) + (xy 213.012516 65.349691) (xy 213.019444 65.350435) (xy 213.072127 65.3561) (xy 214.767872 65.356099) + (xy 214.827483 65.349691) (xy 214.962331 65.299396) (xy 214.969816 65.293793) (xy 215.036339 65.243994) + (xy 215.101803 65.219576) (xy 215.170076 65.234427) (xy 215.184961 65.243994) (xy 215.258964 65.299393) + (xy 215.258971 65.299397) (xy 215.393817 65.349691) (xy 215.393816 65.349691) (xy 215.400744 65.350435) + (xy 215.453427 65.3561) (xy 217.149172 65.356099) (xy 217.208783 65.349691) (xy 217.343631 65.299396) + (xy 217.458846 65.213146) (xy 217.545096 65.097931) (xy 217.595391 64.963083) (xy 217.6018 64.903473) + (xy 217.601799 63.207735) (xy 220.9539 63.207735) (xy 220.9539 64.90347) (xy 220.953901 64.903476) + (xy 220.960308 64.963083) (xy 221.010602 65.097928) (xy 221.010606 65.097935) (xy 221.096852 65.213144) + (xy 221.096855 65.213147) (xy 221.212064 65.299393) (xy 221.212071 65.299397) (xy 221.346917 65.349691) + (xy 221.346916 65.349691) (xy 221.353844 65.350435) (xy 221.406527 65.3561) (xy 223.102272 65.356099) + (xy 223.161883 65.349691) (xy 223.296731 65.299396) (xy 223.370689 65.24403) (xy 223.436153 65.219614) + (xy 223.504426 65.234465) (xy 223.51931 65.24403) (xy 223.593269 65.299396) (xy 223.59327 65.299396) + (xy 223.593271 65.299397) (xy 223.728117 65.349691) (xy 223.728116 65.349691) (xy 223.735044 65.350435) + (xy 223.787727 65.3561) (xy 225.483472 65.356099) (xy 225.543083 65.349691) (xy 225.677931 65.299396) + (xy 225.685416 65.293793) (xy 225.751939 65.243994) (xy 225.817403 65.219576) (xy 225.885676 65.234427) + (xy 225.900561 65.243994) (xy 225.974564 65.299393) (xy 225.974571 65.299397) (xy 226.109417 65.349691) + (xy 226.109416 65.349691) (xy 226.116344 65.350435) (xy 226.169027 65.3561) (xy 227.864772 65.356099) + (xy 227.924383 65.349691) (xy 228.059231 65.299396) (xy 228.133189 65.24403) (xy 228.198653 65.219614) + (xy 228.266926 65.234465) (xy 228.28181 65.24403) (xy 228.355769 65.299396) (xy 228.35577 65.299396) + (xy 228.355771 65.299397) (xy 228.490617 65.349691) (xy 228.490616 65.349691) (xy 228.497544 65.350435) + (xy 228.550227 65.3561) (xy 230.245972 65.356099) (xy 230.305583 65.349691) (xy 230.440431 65.299396) + (xy 230.555646 65.213146) (xy 230.641896 65.097931) (xy 230.692191 64.963083) (xy 230.6986 64.903473) + (xy 230.698599 63.207735) (xy 234.0508 63.207735) (xy 234.0508 64.90347) (xy 234.050801 64.903476) + (xy 234.057208 64.963083) (xy 234.107502 65.097928) (xy 234.107506 65.097935) (xy 234.193752 65.213144) + (xy 234.193755 65.213147) (xy 234.308964 65.299393) (xy 234.308971 65.299397) (xy 234.443817 65.349691) + (xy 234.443816 65.349691) (xy 234.450744 65.350435) (xy 234.503427 65.3561) (xy 236.199172 65.356099) + (xy 236.258783 65.349691) (xy 236.393631 65.299396) (xy 236.467589 65.24403) (xy 236.533053 65.219614) + (xy 236.601326 65.234465) (xy 236.61621 65.24403) (xy 236.690169 65.299396) (xy 236.69017 65.299396) + (xy 236.690171 65.299397) (xy 236.825017 65.349691) (xy 236.825016 65.349691) (xy 236.831944 65.350435) + (xy 236.884627 65.3561) (xy 238.580372 65.356099) (xy 238.639983 65.349691) (xy 238.774831 65.299396) + (xy 238.782316 65.293793) (xy 238.848839 65.243994) (xy 238.914303 65.219576) (xy 238.982576 65.234427) + (xy 238.997461 65.243994) (xy 239.071464 65.299393) (xy 239.071471 65.299397) (xy 239.206317 65.349691) + (xy 239.206316 65.349691) (xy 239.213244 65.350435) (xy 239.265927 65.3561) (xy 240.961672 65.356099) + (xy 241.021283 65.349691) (xy 241.156131 65.299396) (xy 241.230089 65.24403) (xy 241.295553 65.219614) + (xy 241.363826 65.234465) (xy 241.37871 65.24403) (xy 241.452669 65.299396) (xy 241.45267 65.299396) + (xy 241.452671 65.299397) (xy 241.587517 65.349691) (xy 241.587516 65.349691) (xy 241.594444 65.350435) + (xy 241.647127 65.3561) (xy 243.342872 65.356099) (xy 243.402483 65.349691) (xy 243.537331 65.299396) + (xy 243.652546 65.213146) (xy 243.738796 65.097931) (xy 243.789091 64.963083) (xy 243.7955 64.903473) + (xy 243.795499 63.207735) (xy 247.1476 63.207735) (xy 247.1476 64.90347) (xy 247.147601 64.903476) + (xy 247.154008 64.963083) (xy 247.204302 65.097928) (xy 247.204306 65.097935) (xy 247.290552 65.213144) + (xy 247.290555 65.213147) (xy 247.405764 65.299393) (xy 247.405771 65.299397) (xy 247.540617 65.349691) + (xy 247.540616 65.349691) (xy 247.547544 65.350435) (xy 247.600227 65.3561) (xy 249.295972 65.356099) + (xy 249.355583 65.349691) (xy 249.490431 65.299396) (xy 249.497916 65.293793) (xy 249.564439 65.243994) + (xy 249.629903 65.219576) (xy 249.698176 65.234427) (xy 249.713061 65.243994) (xy 249.787064 65.299393) + (xy 249.787071 65.299397) (xy 249.921917 65.349691) (xy 249.921916 65.349691) (xy 249.928844 65.350435) + (xy 249.981527 65.3561) (xy 251.677272 65.356099) (xy 251.736883 65.349691) (xy 251.871731 65.299396) + (xy 251.945689 65.24403) (xy 252.011153 65.219614) (xy 252.079426 65.234465) (xy 252.09431 65.24403) + (xy 252.168269 65.299396) (xy 252.16827 65.299396) (xy 252.168271 65.299397) (xy 252.303117 65.349691) + (xy 252.303116 65.349691) (xy 252.310044 65.350435) (xy 252.362727 65.3561) (xy 254.058472 65.356099) + (xy 254.118083 65.349691) (xy 254.252931 65.299396) (xy 254.260416 65.293793) (xy 254.326939 65.243994) + (xy 254.392403 65.219576) (xy 254.460676 65.234427) (xy 254.475561 65.243994) (xy 254.549564 65.299393) + (xy 254.549571 65.299397) (xy 254.684417 65.349691) (xy 254.684416 65.349691) (xy 254.691344 65.350435) + (xy 254.744027 65.3561) (xy 256.439772 65.356099) (xy 256.499383 65.349691) (xy 256.634231 65.299396) + (xy 256.708189 65.24403) (xy 256.773653 65.219614) (xy 256.841926 65.234465) (xy 256.85681 65.24403) + (xy 256.930769 65.299396) (xy 256.93077 65.299396) (xy 256.930771 65.299397) (xy 257.065617 65.349691) + (xy 257.065616 65.349691) (xy 257.072544 65.350435) (xy 257.125227 65.3561) (xy 258.820972 65.356099) + (xy 258.880583 65.349691) (xy 259.015431 65.299396) (xy 259.130646 65.213146) (xy 259.216896 65.097931) + (xy 259.267191 64.963083) (xy 259.2736 64.903473) (xy 259.273599 63.207735) (xy 262.6258 63.207735) + (xy 262.6258 64.90347) (xy 262.625801 64.903476) (xy 262.632208 64.963083) (xy 262.682502 65.097928) + (xy 262.682506 65.097935) (xy 262.768752 65.213144) (xy 262.768755 65.213147) (xy 262.883964 65.299393) + (xy 262.883971 65.299397) (xy 263.018817 65.349691) (xy 263.018816 65.349691) (xy 263.025744 65.350435) + (xy 263.078427 65.3561) (xy 264.774172 65.356099) (xy 264.833783 65.349691) (xy 264.968631 65.299396) + (xy 265.042589 65.24403) (xy 265.108053 65.219614) (xy 265.176326 65.234465) (xy 265.19121 65.24403) + (xy 265.265169 65.299396) (xy 265.26517 65.299396) (xy 265.265171 65.299397) (xy 265.400017 65.349691) + (xy 265.400016 65.349691) (xy 265.406944 65.350435) (xy 265.459627 65.3561) (xy 267.155372 65.356099) + (xy 267.214983 65.349691) (xy 267.349831 65.299396) (xy 267.357316 65.293793) (xy 267.423839 65.243994) + (xy 267.489303 65.219576) (xy 267.557576 65.234427) (xy 267.572461 65.243994) (xy 267.646464 65.299393) + (xy 267.646471 65.299397) (xy 267.781317 65.349691) (xy 267.781316 65.349691) (xy 267.788244 65.350435) + (xy 267.840927 65.3561) (xy 269.536672 65.356099) (xy 269.596283 65.349691) (xy 269.731131 65.299396) + (xy 269.805089 65.24403) (xy 269.870553 65.219614) (xy 269.938826 65.234465) (xy 269.95371 65.24403) + (xy 270.027669 65.299396) (xy 270.02767 65.299396) (xy 270.027671 65.299397) (xy 270.162517 65.349691) + (xy 270.162516 65.349691) (xy 270.169444 65.350435) (xy 270.222127 65.3561) (xy 271.917872 65.356099) + (xy 271.977483 65.349691) (xy 272.112331 65.299396) (xy 272.119816 65.293793) (xy 272.186339 65.243994) + (xy 272.251803 65.219576) (xy 272.320076 65.234427) (xy 272.334961 65.243994) (xy 272.408964 65.299393) + (xy 272.408971 65.299397) (xy 272.543817 65.349691) (xy 272.543816 65.349691) (xy 272.550744 65.350435) + (xy 272.603427 65.3561) (xy 274.299172 65.356099) (xy 274.358783 65.349691) (xy 274.493631 65.299396) + (xy 274.608846 65.213146) (xy 274.695096 65.097931) (xy 274.745391 64.963083) (xy 274.7518 64.903473) + (xy 274.751799 63.207735) (xy 278.1039 63.207735) (xy 278.1039 64.90347) (xy 278.103901 64.903476) + (xy 278.110308 64.963083) (xy 278.160602 65.097928) (xy 278.160606 65.097935) (xy 278.246852 65.213144) + (xy 278.246855 65.213147) (xy 278.362064 65.299393) (xy 278.362071 65.299397) (xy 278.496917 65.349691) + (xy 278.496916 65.349691) (xy 278.503844 65.350435) (xy 278.556527 65.3561) (xy 280.252272 65.356099) + (xy 280.311883 65.349691) (xy 280.446731 65.299396) (xy 280.520689 65.24403) (xy 280.586153 65.219614) + (xy 280.654426 65.234465) (xy 280.66931 65.24403) (xy 280.743269 65.299396) (xy 280.74327 65.299396) + (xy 280.743271 65.299397) (xy 280.878117 65.349691) (xy 280.878116 65.349691) (xy 280.885044 65.350435) + (xy 280.937727 65.3561) (xy 282.633472 65.356099) (xy 282.693083 65.349691) (xy 282.827931 65.299396) + (xy 282.835416 65.293793) (xy 282.901939 65.243994) (xy 282.967403 65.219576) (xy 283.035676 65.234427) + (xy 283.050561 65.243994) (xy 283.124564 65.299393) (xy 283.124571 65.299397) (xy 283.259417 65.349691) + (xy 283.259416 65.349691) (xy 283.266344 65.350435) (xy 283.319027 65.3561) (xy 285.014772 65.356099) + (xy 285.074383 65.349691) (xy 285.209231 65.299396) (xy 285.283189 65.24403) (xy 285.348653 65.219614) + (xy 285.416926 65.234465) (xy 285.43181 65.24403) (xy 285.505769 65.299396) (xy 285.50577 65.299396) + (xy 285.505771 65.299397) (xy 285.640617 65.349691) (xy 285.640616 65.349691) (xy 285.647544 65.350435) + (xy 285.700227 65.3561) (xy 287.395972 65.356099) (xy 287.455583 65.349691) (xy 287.590431 65.299396) + (xy 287.597916 65.293793) (xy 287.664439 65.243994) (xy 287.729903 65.219576) (xy 287.798176 65.234427) + (xy 287.813061 65.243994) (xy 287.887064 65.299393) (xy 287.887071 65.299397) (xy 288.021917 65.349691) + (xy 288.021916 65.349691) (xy 288.028844 65.350435) (xy 288.081527 65.3561) (xy 289.777272 65.356099) + (xy 289.836883 65.349691) (xy 289.971731 65.299396) (xy 290.086946 65.213146) (xy 290.173196 65.097931) + (xy 290.223491 64.963083) (xy 290.2299 64.903473) (xy 290.229899 63.207735) (xy 293.582 63.207735) + (xy 293.582 64.90347) (xy 293.582001 64.903476) (xy 293.588408 64.963083) (xy 293.638702 65.097928) + (xy 293.638706 65.097935) (xy 293.724952 65.213144) (xy 293.724955 65.213147) (xy 293.840164 65.299393) + (xy 293.840171 65.299397) (xy 293.975017 65.349691) (xy 293.975016 65.349691) (xy 293.981944 65.350435) + (xy 294.034627 65.3561) (xy 295.730372 65.356099) (xy 295.789983 65.349691) (xy 295.924831 65.299396) + (xy 295.932316 65.293793) (xy 295.998839 65.243994) (xy 296.064303 65.219576) (xy 296.132576 65.234427) + (xy 296.147461 65.243994) (xy 296.221464 65.299393) (xy 296.221471 65.299397) (xy 296.356317 65.349691) + (xy 296.356316 65.349691) (xy 296.363244 65.350435) (xy 296.415927 65.3561) (xy 298.111672 65.356099) + (xy 298.171283 65.349691) (xy 298.306131 65.299396) (xy 298.380089 65.24403) (xy 298.445553 65.219614) + (xy 298.513826 65.234465) (xy 298.52871 65.24403) (xy 298.602669 65.299396) (xy 298.60267 65.299396) + (xy 298.602671 65.299397) (xy 298.737517 65.349691) (xy 298.737516 65.349691) (xy 298.744444 65.350435) + (xy 298.797127 65.3561) (xy 300.492872 65.356099) (xy 300.552483 65.349691) (xy 300.687331 65.299396) + (xy 300.694816 65.293793) (xy 300.761339 65.243994) (xy 300.826803 65.219576) (xy 300.895076 65.234427) + (xy 300.909961 65.243994) (xy 300.983964 65.299393) (xy 300.983971 65.299397) (xy 301.118817 65.349691) + (xy 301.118816 65.349691) (xy 301.125744 65.350435) (xy 301.178427 65.3561) (xy 302.874172 65.356099) + (xy 302.933783 65.349691) (xy 303.068631 65.299396) (xy 303.183846 65.213146) (xy 303.270096 65.097931) + (xy 303.320391 64.963083) (xy 303.3268 64.903473) (xy 303.326799 63.207735) (xy 306.6789 63.207735) + (xy 306.6789 64.90347) (xy 306.678901 64.903476) (xy 306.685308 64.963083) (xy 306.735602 65.097928) + (xy 306.735606 65.097935) (xy 306.821852 65.213144) (xy 306.821855 65.213147) (xy 306.937064 65.299393) + (xy 306.937071 65.299397) (xy 307.071917 65.349691) (xy 307.071916 65.349691) (xy 307.078844 65.350435) + (xy 307.131527 65.3561) (xy 308.827272 65.356099) (xy 308.886883 65.349691) (xy 309.021731 65.299396) + (xy 309.095689 65.24403) (xy 309.161153 65.219614) (xy 309.229426 65.234465) (xy 309.24431 65.24403) + (xy 309.318269 65.299396) (xy 309.31827 65.299396) (xy 309.318271 65.299397) (xy 309.453117 65.349691) + (xy 309.453116 65.349691) (xy 309.460044 65.350435) (xy 309.512727 65.3561) (xy 311.208472 65.356099) + (xy 311.268083 65.349691) (xy 311.402931 65.299396) (xy 311.410416 65.293793) (xy 311.476939 65.243994) + (xy 311.542403 65.219576) (xy 311.610676 65.234427) (xy 311.625561 65.243994) (xy 311.699564 65.299393) + (xy 311.699571 65.299397) (xy 311.834417 65.349691) (xy 311.834416 65.349691) (xy 311.841344 65.350435) + (xy 311.894027 65.3561) (xy 313.589772 65.356099) (xy 313.649383 65.349691) (xy 313.784231 65.299396) + (xy 313.858189 65.24403) (xy 313.923653 65.219614) (xy 313.991926 65.234465) (xy 314.00681 65.24403) + (xy 314.080769 65.299396) (xy 314.08077 65.299396) (xy 314.080771 65.299397) (xy 314.215617 65.349691) + (xy 314.215616 65.349691) (xy 314.222544 65.350435) (xy 314.275227 65.3561) (xy 315.970972 65.356099) + (xy 316.030583 65.349691) (xy 316.165431 65.299396) (xy 316.280646 65.213146) (xy 316.366896 65.097931) + (xy 316.417191 64.963083) (xy 316.4236 64.903473) (xy 316.423599 63.207735) (xy 319.7758 63.207735) + (xy 319.7758 64.90347) (xy 319.775801 64.903476) (xy 319.782208 64.963083) (xy 319.832502 65.097928) + (xy 319.832506 65.097935) (xy 319.918752 65.213144) (xy 319.918755 65.213147) (xy 320.033964 65.299393) + (xy 320.033971 65.299397) (xy 320.168817 65.349691) (xy 320.168816 65.349691) (xy 320.175744 65.350435) + (xy 320.228427 65.3561) (xy 321.924172 65.356099) (xy 321.983783 65.349691) (xy 322.118631 65.299396) + (xy 322.192589 65.24403) (xy 322.258053 65.219614) (xy 322.326326 65.234465) (xy 322.34121 65.24403) + (xy 322.415169 65.299396) (xy 322.41517 65.299396) (xy 322.415171 65.299397) (xy 322.550017 65.349691) + (xy 322.550016 65.349691) (xy 322.556944 65.350435) (xy 322.609627 65.3561) (xy 324.305372 65.356099) + (xy 324.364983 65.349691) (xy 324.499831 65.299396) (xy 324.507316 65.293793) (xy 324.573839 65.243994) + (xy 324.639303 65.219576) (xy 324.707576 65.234427) (xy 324.722461 65.243994) (xy 324.796464 65.299393) + (xy 324.796471 65.299397) (xy 324.931317 65.349691) (xy 324.931316 65.349691) (xy 324.938244 65.350435) + (xy 324.990927 65.3561) (xy 326.686672 65.356099) (xy 326.746283 65.349691) (xy 326.881131 65.299396) + (xy 326.955089 65.24403) (xy 327.020553 65.219614) (xy 327.088826 65.234465) (xy 327.10371 65.24403) + (xy 327.177669 65.299396) (xy 327.17767 65.299396) (xy 327.177671 65.299397) (xy 327.312517 65.349691) + (xy 327.312516 65.349691) (xy 327.319444 65.350435) (xy 327.372127 65.3561) (xy 329.067872 65.356099) + (xy 329.127483 65.349691) (xy 329.262331 65.299396) (xy 329.269816 65.293793) (xy 329.336339 65.243994) + (xy 329.401803 65.219576) (xy 329.470076 65.234427) (xy 329.484961 65.243994) (xy 329.558964 65.299393) + (xy 329.558971 65.299397) (xy 329.693817 65.349691) (xy 329.693816 65.349691) (xy 329.700744 65.350435) + (xy 329.753427 65.3561) (xy 331.449172 65.356099) (xy 331.508783 65.349691) (xy 331.643631 65.299396) + (xy 331.758846 65.213146) (xy 331.845096 65.097931) (xy 331.895391 64.963083) (xy 331.9018 64.903473) + (xy 331.901799 63.207728) (xy 331.895391 63.148117) (xy 331.893302 63.142517) (xy 331.845097 63.013271) + (xy 331.845093 63.013264) (xy 331.758847 62.898055) (xy 331.758844 62.898052) (xy 331.643635 62.811806) + (xy 331.643628 62.811802) (xy 331.508782 62.761508) (xy 331.508783 62.761508) (xy 331.449183 62.755101) + (xy 331.449181 62.7551) (xy 331.449173 62.7551) (xy 331.449164 62.7551) (xy 329.753429 62.7551) + (xy 329.753423 62.755101) (xy 329.693816 62.761508) (xy 329.558971 62.811802) (xy 329.558968 62.811804) + (xy 329.484961 62.867206) (xy 329.419496 62.891623) (xy 329.351223 62.876771) (xy 329.336339 62.867206) + (xy 329.262331 62.811804) (xy 329.262328 62.811802) (xy 329.127482 62.761508) (xy 329.127483 62.761508) + (xy 329.067883 62.755101) (xy 329.067881 62.7551) (xy 329.067873 62.7551) (xy 329.067864 62.7551) + (xy 327.372129 62.7551) (xy 327.372123 62.755101) (xy 327.312516 62.761508) (xy 327.177671 62.811802) + (xy 327.177669 62.811804) (xy 327.103711 62.867169) (xy 327.038247 62.891586) (xy 326.969974 62.876735) + (xy 326.955089 62.867169) (xy 326.946697 62.860887) (xy 326.881131 62.811804) (xy 326.881129 62.811803) + (xy 326.881128 62.811802) (xy 326.746282 62.761508) (xy 326.746283 62.761508) (xy 326.686683 62.755101) + (xy 326.686681 62.7551) (xy 326.686673 62.7551) (xy 326.686664 62.7551) (xy 324.990929 62.7551) + (xy 324.990923 62.755101) (xy 324.931316 62.761508) (xy 324.796471 62.811802) (xy 324.796468 62.811804) + (xy 324.722461 62.867206) (xy 324.656996 62.891623) (xy 324.588723 62.876771) (xy 324.573839 62.867206) + (xy 324.499831 62.811804) (xy 324.499828 62.811802) (xy 324.364982 62.761508) (xy 324.364983 62.761508) + (xy 324.305383 62.755101) (xy 324.305381 62.7551) (xy 324.305373 62.7551) (xy 324.305364 62.7551) + (xy 322.609629 62.7551) (xy 322.609623 62.755101) (xy 322.550016 62.761508) (xy 322.415171 62.811802) + (xy 322.415169 62.811804) (xy 322.341211 62.867169) (xy 322.275747 62.891586) (xy 322.207474 62.876735) + (xy 322.192589 62.867169) (xy 322.184197 62.860887) (xy 322.118631 62.811804) (xy 322.118629 62.811803) + (xy 322.118628 62.811802) (xy 321.983782 62.761508) (xy 321.983783 62.761508) (xy 321.924183 62.755101) + (xy 321.924181 62.7551) (xy 321.924173 62.7551) (xy 321.924164 62.7551) (xy 320.228429 62.7551) + (xy 320.228423 62.755101) (xy 320.168816 62.761508) (xy 320.033971 62.811802) (xy 320.033964 62.811806) + (xy 319.918755 62.898052) (xy 319.918752 62.898055) (xy 319.832506 63.013264) (xy 319.832502 63.013271) + (xy 319.782208 63.148117) (xy 319.776402 63.202128) (xy 319.775801 63.207723) (xy 319.7758 63.207735) + (xy 316.423599 63.207735) (xy 316.423599 63.207728) (xy 316.417191 63.148117) (xy 316.415102 63.142517) + (xy 316.366897 63.013271) (xy 316.366893 63.013264) (xy 316.280647 62.898055) (xy 316.280644 62.898052) + (xy 316.165435 62.811806) (xy 316.165428 62.811802) (xy 316.030582 62.761508) (xy 316.030583 62.761508) + (xy 315.970983 62.755101) (xy 315.970981 62.7551) (xy 315.970973 62.7551) (xy 315.970964 62.7551) + (xy 314.275229 62.7551) (xy 314.275223 62.755101) (xy 314.215616 62.761508) (xy 314.080771 62.811802) + (xy 314.080769 62.811804) (xy 314.006811 62.867169) (xy 313.941347 62.891586) (xy 313.873074 62.876735) + (xy 313.858189 62.867169) (xy 313.849797 62.860887) (xy 313.784231 62.811804) (xy 313.784229 62.811803) + (xy 313.784228 62.811802) (xy 313.649382 62.761508) (xy 313.649384 62.761508) (xy 313.645497 62.761091) + (xy 313.642684 62.759925) (xy 313.641838 62.759726) (xy 313.64187 62.759588) (xy 313.580946 62.734353) + (xy 313.541098 62.67696) (xy 313.537136 62.61361) (xy 313.5425 62.586644) (xy 313.5425 62.428955) + (xy 313.542499 62.428953) (xy 313.511778 62.27451) (xy 313.511737 62.274303) (xy 313.511735 62.274298) + (xy 313.451397 62.128627) (xy 313.45139 62.128614) (xy 313.363789 61.997511) (xy 313.363786 61.997507) + (xy 313.252292 61.886013) (xy 313.252288 61.88601) (xy 313.121185 61.798409) (xy 313.121175 61.798404) + (xy 313.046047 61.767285) (xy 312.991644 61.723444) (xy 312.969579 61.65715) (xy 312.9695 61.652724) + (xy 312.9695 58.600375) (xy 312.989185 58.533336) (xy 313.041989 58.487581) (xy 313.045999 58.485834) + (xy 313.121179 58.454694) (xy 313.252289 58.367089) (xy 313.363789 58.255589) (xy 313.451394 58.124479) + (xy 313.511737 57.978797) (xy 313.5425 57.824142) (xy 313.5425 57.666458) (xy 313.5425 57.666455) + (xy 313.542499 57.666453) (xy 313.511738 57.51181) (xy 313.511737 57.511803) (xy 313.511735 57.511798) + (xy 313.451397 57.366127) (xy 313.45139 57.366114) (xy 313.363789 57.235011) (xy 313.363786 57.235007) + (xy 313.252292 57.123513) (xy 313.252288 57.12351) (xy 313.121185 57.035909) (xy 313.121172 57.035902) + (xy 312.975501 56.975564) (xy 312.975489 56.975561) (xy 312.820845 56.9448) (xy 312.820842 56.9448) + (xy 312.663158 56.9448) (xy 312.663155 56.9448) (xy 312.50851 56.975561) (xy 312.508498 56.975564) + (xy 312.362827 57.035902) (xy 312.362814 57.035909) (xy 312.231711 57.12351) (xy 312.231707 57.123513) + (xy 312.120213 57.235007) (xy 312.12021 57.235011) (xy 312.032609 57.366114) (xy 312.032602 57.366127) + (xy 311.972264 57.511798) (xy 311.972261 57.51181) (xy 311.9415 57.666453) (xy 311.9415 57.824146) + (xy 311.972261 57.978789) (xy 311.972264 57.978801) (xy 312.032602 58.124472) (xy 312.032609 58.124485) + (xy 312.12021 58.255588) (xy 312.120213 58.255592) (xy 312.231707 58.367086) (xy 312.231711 58.367089) + (xy 312.362814 58.45469) (xy 312.362818 58.454692) (xy 312.362821 58.454694) (xy 312.437954 58.485815) + (xy 312.492356 58.529654) (xy 312.514421 58.595948) (xy 312.5145 58.600375) (xy 312.5145 61.652724) + (xy 312.494815 61.719763) (xy 312.442011 61.765518) (xy 312.437953 61.767285) (xy 312.362824 61.798404) + (xy 312.362814 61.798409) (xy 312.231711 61.88601) (xy 312.231707 61.886013) (xy 312.120213 61.997507) + (xy 312.12021 61.997511) (xy 312.032609 62.128614) (xy 312.032602 62.128627) (xy 311.972264 62.274298) + (xy 311.972261 62.27431) (xy 311.9415 62.428953) (xy 311.9415 62.428958) (xy 311.9415 62.586642) + (xy 311.94154 62.586841) (xy 311.94686 62.61359) (xy 311.940631 62.683182) (xy 311.897768 62.738359) + (xy 311.8385 62.761069) (xy 311.834419 62.761507) (xy 311.699571 62.811802) (xy 311.699568 62.811804) + (xy 311.625561 62.867206) (xy 311.560096 62.891623) (xy 311.491823 62.876771) (xy 311.476939 62.867206) + (xy 311.402931 62.811804) (xy 311.402928 62.811802) (xy 311.268083 62.761509) (xy 311.264485 62.761122) + (xy 311.261881 62.760043) (xy 311.260538 62.759726) (xy 311.260589 62.759508) (xy 311.199935 62.734381) + (xy 311.16009 62.676986) (xy 311.156129 62.613642) (xy 311.1615 62.586642) (xy 311.1615 62.428958) + (xy 311.1615 62.428955) (xy 311.161499 62.428953) (xy 311.130778 62.27451) (xy 311.130737 62.274303) + (xy 311.130735 62.274298) (xy 311.070397 62.128627) (xy 311.07039 62.128614) (xy 310.982789 61.997511) + (xy 310.978924 61.992801) (xy 310.98066 61.991376) (xy 310.951982 61.938895) (xy 310.956945 61.869202) + (xy 310.980103 61.833167) (xy 310.978924 61.832199) (xy 310.982784 61.827493) (xy 310.982789 61.827489) + (xy 311.070394 61.696379) (xy 311.130737 61.550697) (xy 311.1615 61.396042) (xy 311.1615 61.238358) + (xy 311.1615 61.238355) (xy 311.161499 61.238353) (xy 311.130738 61.08371) (xy 311.130737 61.083703) + (xy 311.130735 61.083698) (xy 311.070397 60.938027) (xy 311.07039 60.938014) (xy 310.982789 60.806911) + (xy 310.982786 60.806907) (xy 310.871292 60.695413) (xy 310.871288 60.69541) (xy 310.740185 60.607809) + (xy 310.740172 60.607802) (xy 310.594501 60.547464) (xy 310.594489 60.547461) (xy 310.439845 60.5167) + (xy 310.439842 60.5167) (xy 310.282158 60.5167) (xy 310.282155 60.5167) (xy 310.12751 60.547461) + (xy 310.127498 60.547464) (xy 309.981827 60.607802) (xy 309.981814 60.607809) (xy 309.850711 60.69541) + (xy 309.850707 60.695413) (xy 309.739213 60.806907) (xy 309.73921 60.806911) (xy 309.651609 60.938014) + (xy 309.651602 60.938027) (xy 309.591264 61.083698) (xy 309.591261 61.08371) (xy 309.5605 61.238353) + (xy 309.5605 61.396046) (xy 309.591261 61.550689) (xy 309.591264 61.550701) (xy 309.651602 61.696372) + (xy 309.651609 61.696385) (xy 309.73921 61.827488) (xy 309.743076 61.832199) (xy 309.741345 61.833619) + (xy 309.770025 61.886142) (xy 309.765041 61.955834) (xy 309.741902 61.991837) (xy 309.743076 61.992801) + (xy 309.73921 61.997511) (xy 309.651609 62.128614) (xy 309.651602 62.128627) (xy 309.591264 62.274298) + (xy 309.591261 62.27431) (xy 309.5605 62.428953) (xy 309.5605 62.586646) (xy 309.565853 62.613557) + (xy 309.559626 62.683148) (xy 309.516763 62.738326) (xy 309.457498 62.761037) (xy 309.453118 62.761508) + (xy 309.318271 62.811802) (xy 309.318269 62.811804) (xy 309.244311 62.867169) (xy 309.178847 62.891586) + (xy 309.110574 62.876735) (xy 309.095689 62.867169) (xy 309.087297 62.860887) (xy 309.021731 62.811804) + (xy 309.021729 62.811803) (xy 309.021728 62.811802) (xy 308.886882 62.761508) (xy 308.886883 62.761508) + (xy 308.827283 62.755101) (xy 308.827281 62.7551) (xy 308.827273 62.7551) (xy 308.827264 62.7551) + (xy 307.131529 62.7551) (xy 307.131523 62.755101) (xy 307.071916 62.761508) (xy 306.937071 62.811802) + (xy 306.937064 62.811806) (xy 306.821855 62.898052) (xy 306.821852 62.898055) (xy 306.735606 63.013264) + (xy 306.735602 63.013271) (xy 306.685308 63.148117) (xy 306.679502 63.202128) (xy 306.678901 63.207723) + (xy 306.6789 63.207735) (xy 303.326799 63.207735) (xy 303.326799 63.207728) (xy 303.320391 63.148117) + (xy 303.318302 63.142517) (xy 303.270097 63.013271) (xy 303.270093 63.013264) (xy 303.183847 62.898055) + (xy 303.183844 62.898052) (xy 303.068635 62.811806) (xy 303.068628 62.811802) (xy 302.933782 62.761508) + (xy 302.933783 62.761508) (xy 302.874183 62.755101) (xy 302.874181 62.7551) (xy 302.874173 62.7551) + (xy 302.874164 62.7551) (xy 301.178429 62.7551) (xy 301.178423 62.755101) (xy 301.118816 62.761508) + (xy 300.983971 62.811802) (xy 300.983968 62.811804) (xy 300.909961 62.867206) (xy 300.844496 62.891623) + (xy 300.776223 62.876771) (xy 300.761339 62.867206) (xy 300.687331 62.811804) (xy 300.687328 62.811802) + (xy 300.552484 62.761509) (xy 300.548494 62.76108) (xy 300.545607 62.759884) (xy 300.544938 62.759726) + (xy 300.544963 62.759617) (xy 300.483944 62.734339) (xy 300.444099 62.676945) (xy 300.440138 62.613598) + (xy 300.4455 62.586643) (xy 300.4455 62.428955) (xy 300.445499 62.428953) (xy 300.414778 62.27451) + (xy 300.414737 62.274303) (xy 300.414735 62.274298) (xy 300.354397 62.128627) (xy 300.35439 62.128614) + (xy 300.266789 61.997511) (xy 300.266786 61.997507) (xy 300.155292 61.886013) (xy 300.155288 61.88601) + (xy 300.024185 61.798409) (xy 300.024175 61.798404) (xy 299.949047 61.767285) (xy 299.894644 61.723444) + (xy 299.872579 61.65715) (xy 299.8725 61.652724) (xy 299.8725 60.386375) (xy 299.892185 60.319336) + (xy 299.944989 60.273581) (xy 299.948999 60.271834) (xy 300.024179 60.240694) (xy 300.155289 60.153089) + (xy 300.266789 60.041589) (xy 300.354394 59.910479) (xy 300.414737 59.764797) (xy 300.4455 59.610142) + (xy 300.4455 59.452458) (xy 300.4455 59.452455) (xy 300.445499 59.452453) (xy 300.429238 59.370704) + (xy 300.414737 59.297803) (xy 300.397906 59.257169) (xy 300.354397 59.152127) (xy 300.35439 59.152114) + (xy 300.266789 59.021011) (xy 300.266786 59.021007) (xy 300.155292 58.909513) (xy 300.155288 58.90951) + (xy 300.024185 58.821909) (xy 300.024172 58.821902) (xy 299.878501 58.761564) (xy 299.878489 58.761561) + (xy 299.723845 58.7308) (xy 299.723842 58.7308) (xy 299.566158 58.7308) (xy 299.566155 58.7308) + (xy 299.41151 58.761561) (xy 299.411498 58.761564) (xy 299.265827 58.821902) (xy 299.265814 58.821909) + (xy 299.134711 58.90951) (xy 299.134707 58.909513) (xy 299.023213 59.021007) (xy 299.02321 59.021011) + (xy 298.935609 59.152114) (xy 298.935602 59.152127) (xy 298.875264 59.297798) (xy 298.875261 59.29781) + (xy 298.8445 59.452453) (xy 298.8445 59.610146) (xy 298.875261 59.764789) (xy 298.875264 59.764801) + (xy 298.935602 59.910472) (xy 298.935609 59.910485) (xy 299.02321 60.041588) (xy 299.023213 60.041592) + (xy 299.134707 60.153086) (xy 299.134711 60.153089) (xy 299.265814 60.24069) (xy 299.265818 60.240692) + (xy 299.265821 60.240694) (xy 299.340954 60.271815) (xy 299.395356 60.315654) (xy 299.417421 60.381948) + (xy 299.4175 60.386375) (xy 299.4175 61.652724) (xy 299.397815 61.719763) (xy 299.345011 61.765518) + (xy 299.340953 61.767285) (xy 299.265824 61.798404) (xy 299.265814 61.798409) (xy 299.134711 61.88601) + (xy 299.134707 61.886013) (xy 299.023213 61.997507) (xy 299.02321 61.997511) (xy 298.935609 62.128614) + (xy 298.935602 62.128627) (xy 298.875264 62.274298) (xy 298.875261 62.27431) (xy 298.8445 62.428953) + (xy 298.8445 62.428958) (xy 298.8445 62.586642) (xy 298.84454 62.586841) (xy 298.849862 62.6136) + (xy 298.843633 62.683192) (xy 298.80077 62.738368) (xy 298.745065 62.759715) (xy 298.745068 62.759724) + (xy 298.745004 62.759738) (xy 298.741508 62.761079) (xy 298.737518 62.761508) (xy 298.602671 62.811802) + (xy 298.602669 62.811804) (xy 298.528711 62.867169) (xy 298.463247 62.891586) (xy 298.394974 62.876735) + (xy 298.380089 62.867169) (xy 298.371697 62.860887) (xy 298.306131 62.811804) (xy 298.306129 62.811803) + (xy 298.306128 62.811802) (xy 298.171284 62.761509) (xy 298.167489 62.761101) (xy 298.164743 62.759963) + (xy 298.163738 62.759726) (xy 298.163776 62.759562) (xy 298.10294 62.734359) (xy 298.063094 62.676965) + (xy 298.059134 62.61362) (xy 298.0645 62.586644) (xy 298.0645 62.428955) (xy 298.064499 62.428953) + (xy 298.033778 62.27451) (xy 298.033737 62.274303) (xy 298.033735 62.274298) (xy 297.973397 62.128627) + (xy 297.97339 62.128614) (xy 297.885789 61.997511) (xy 297.881924 61.992801) (xy 297.88366 61.991376) + (xy 297.854982 61.938895) (xy 297.859945 61.869202) (xy 297.883103 61.833167) (xy 297.881924 61.832199) + (xy 297.885784 61.827493) (xy 297.885789 61.827489) (xy 297.973394 61.696379) (xy 298.033737 61.550697) + (xy 298.0645 61.396042) (xy 298.0645 61.238358) (xy 298.0645 61.238355) (xy 298.064499 61.238353) + (xy 298.033738 61.08371) (xy 298.033737 61.083703) (xy 298.033735 61.083698) (xy 297.973397 60.938027) + (xy 297.97339 60.938014) (xy 297.885789 60.806911) (xy 297.885786 60.806907) (xy 297.774292 60.695413) + (xy 297.774288 60.69541) (xy 297.643185 60.607809) (xy 297.643172 60.607802) (xy 297.497501 60.547464) + (xy 297.497489 60.547461) (xy 297.342845 60.5167) (xy 297.342842 60.5167) (xy 297.185158 60.5167) + (xy 297.185155 60.5167) (xy 297.03051 60.547461) (xy 297.030498 60.547464) (xy 296.884827 60.607802) + (xy 296.884814 60.607809) (xy 296.753711 60.69541) (xy 296.753707 60.695413) (xy 296.642213 60.806907) + (xy 296.64221 60.806911) (xy 296.554609 60.938014) (xy 296.554602 60.938027) (xy 296.494264 61.083698) + (xy 296.494261 61.08371) (xy 296.4635 61.238353) (xy 296.4635 61.396046) (xy 296.494261 61.550689) + (xy 296.494264 61.550701) (xy 296.554602 61.696372) (xy 296.554609 61.696385) (xy 296.64221 61.827488) + (xy 296.646076 61.832199) (xy 296.644345 61.833619) (xy 296.673025 61.886142) (xy 296.668041 61.955834) + (xy 296.644902 61.991837) (xy 296.646076 61.992801) (xy 296.64221 61.997511) (xy 296.554609 62.128614) + (xy 296.554602 62.128627) (xy 296.494264 62.274298) (xy 296.494261 62.27431) (xy 296.4635 62.428953) + (xy 296.4635 62.428958) (xy 296.4635 62.586642) (xy 296.46354 62.586841) (xy 296.468858 62.613579) + (xy 296.46263 62.68317) (xy 296.419766 62.738347) (xy 296.360503 62.761058) (xy 296.356318 62.761508) + (xy 296.221471 62.811802) (xy 296.221468 62.811804) (xy 296.147461 62.867206) (xy 296.081996 62.891623) + (xy 296.013723 62.876771) (xy 295.998839 62.867206) (xy 295.924831 62.811804) (xy 295.924828 62.811802) + (xy 295.789982 62.761508) (xy 295.789983 62.761508) (xy 295.730383 62.755101) (xy 295.730381 62.7551) + (xy 295.730373 62.7551) (xy 295.730364 62.7551) (xy 294.034629 62.7551) (xy 294.034623 62.755101) + (xy 293.975016 62.761508) (xy 293.840171 62.811802) (xy 293.840164 62.811806) (xy 293.724955 62.898052) + (xy 293.724952 62.898055) (xy 293.638706 63.013264) (xy 293.638702 63.013271) (xy 293.588408 63.148117) + (xy 293.582602 63.202128) (xy 293.582001 63.207723) (xy 293.582 63.207735) (xy 290.229899 63.207735) + (xy 290.229899 63.207728) (xy 290.223491 63.148117) (xy 290.221402 63.142517) (xy 290.173197 63.013271) + (xy 290.173193 63.013264) (xy 290.086947 62.898055) (xy 290.086944 62.898052) (xy 289.971735 62.811806) + (xy 289.971728 62.811802) (xy 289.836882 62.761508) (xy 289.836883 62.761508) (xy 289.777283 62.755101) + (xy 289.777281 62.7551) (xy 289.777273 62.7551) (xy 289.777264 62.7551) (xy 288.081529 62.7551) + (xy 288.081523 62.755101) (xy 288.021916 62.761508) (xy 287.887071 62.811802) (xy 287.887068 62.811804) + (xy 287.813061 62.867206) (xy 287.747596 62.891623) (xy 287.679323 62.876771) (xy 287.664439 62.867206) + (xy 287.590431 62.811804) (xy 287.590428 62.811802) (xy 287.455586 62.76151) (xy 287.455585 62.761509) + (xy 287.455583 62.761509) (xy 287.451499 62.761069) (xy 287.448543 62.759845) (xy 287.448038 62.759726) + (xy 287.448057 62.759644) (xy 287.386951 62.734332) (xy 287.347103 62.67694) (xy 287.34314 62.613588) + (xy 287.3485 62.586643) (xy 287.3485 62.428955) (xy 287.348499 62.428953) (xy 287.317778 62.27451) + (xy 287.317737 62.274303) (xy 287.317735 62.274298) (xy 287.257397 62.128627) (xy 287.25739 62.128614) + (xy 287.169789 61.997511) (xy 287.169786 61.997507) (xy 287.058292 61.886013) (xy 287.058288 61.88601) + (xy 286.927185 61.798409) (xy 286.927175 61.798404) (xy 286.852047 61.767285) (xy 286.797644 61.723444) + (xy 286.775579 61.65715) (xy 286.7755 61.652724) (xy 286.7755 58.600375) (xy 286.795185 58.533336) + (xy 286.847989 58.487581) (xy 286.851999 58.485834) (xy 286.927179 58.454694) (xy 287.058289 58.367089) + (xy 287.169789 58.255589) (xy 287.257394 58.124479) (xy 287.317737 57.978797) (xy 287.3485 57.824142) + (xy 287.3485 57.666458) (xy 287.3485 57.666455) (xy 287.348499 57.666453) (xy 287.317738 57.51181) + (xy 287.317737 57.511803) (xy 287.317735 57.511798) (xy 287.257397 57.366127) (xy 287.25739 57.366114) + (xy 287.169789 57.235011) (xy 287.169786 57.235007) (xy 287.058292 57.123513) (xy 287.058288 57.12351) + (xy 286.927185 57.035909) (xy 286.927172 57.035902) (xy 286.781501 56.975564) (xy 286.781489 56.975561) + (xy 286.626845 56.9448) (xy 286.626842 56.9448) (xy 286.469158 56.9448) (xy 286.469155 56.9448) + (xy 286.31451 56.975561) (xy 286.314498 56.975564) (xy 286.168827 57.035902) (xy 286.168814 57.035909) + (xy 286.037711 57.12351) (xy 286.037707 57.123513) (xy 285.926213 57.235007) (xy 285.92621 57.235011) + (xy 285.838609 57.366114) (xy 285.838602 57.366127) (xy 285.778264 57.511798) (xy 285.778261 57.51181) + (xy 285.7475 57.666453) (xy 285.7475 57.824146) (xy 285.778261 57.978789) (xy 285.778264 57.978801) + (xy 285.838602 58.124472) (xy 285.838609 58.124485) (xy 285.92621 58.255588) (xy 285.926213 58.255592) + (xy 286.037707 58.367086) (xy 286.037711 58.367089) (xy 286.168814 58.45469) (xy 286.168818 58.454692) + (xy 286.168821 58.454694) (xy 286.243954 58.485815) (xy 286.298356 58.529654) (xy 286.320421 58.595948) + (xy 286.3205 58.600375) (xy 286.3205 61.652724) (xy 286.300815 61.719763) (xy 286.248011 61.765518) + (xy 286.243953 61.767285) (xy 286.168824 61.798404) (xy 286.168814 61.798409) (xy 286.037711 61.88601) + (xy 286.037707 61.886013) (xy 285.926213 61.997507) (xy 285.92621 61.997511) (xy 285.838609 62.128614) + (xy 285.838602 62.128627) (xy 285.778264 62.274298) (xy 285.778261 62.27431) (xy 285.7475 62.428953) + (xy 285.7475 62.586643) (xy 285.752864 62.613612) (xy 285.746635 62.683203) (xy 285.703771 62.73838) + (xy 285.648159 62.759689) (xy 285.648168 62.759724) (xy 285.647911 62.759784) (xy 285.644505 62.76109) + (xy 285.640619 62.761507) (xy 285.505771 62.811802) (xy 285.505769 62.811804) (xy 285.431811 62.867169) + (xy 285.366347 62.891586) (xy 285.298074 62.876735) (xy 285.283189 62.867169) (xy 285.274797 62.860887) + (xy 285.209231 62.811804) (xy 285.209229 62.811803) (xy 285.209228 62.811802) (xy 285.074382 62.761508) + (xy 285.074384 62.761508) (xy 285.070497 62.761091) (xy 285.067684 62.759925) (xy 285.066838 62.759726) + (xy 285.06687 62.759588) (xy 285.005946 62.734353) (xy 284.966098 62.67696) (xy 284.962136 62.61361) + (xy 284.9675 62.586644) (xy 284.9675 62.428955) (xy 284.967499 62.428953) (xy 284.936778 62.27451) + (xy 284.936737 62.274303) (xy 284.936735 62.274298) (xy 284.876397 62.128627) (xy 284.87639 62.128614) + (xy 284.788789 61.997511) (xy 284.788786 61.997507) (xy 284.677292 61.886013) (xy 284.677288 61.88601) + (xy 284.546185 61.798409) (xy 284.546175 61.798404) (xy 284.471047 61.767285) (xy 284.416644 61.723444) + (xy 284.394579 61.65715) (xy 284.3945 61.652724) (xy 284.3945 60.386375) (xy 284.414185 60.319336) + (xy 284.466989 60.273581) (xy 284.470999 60.271834) (xy 284.546179 60.240694) (xy 284.677289 60.153089) + (xy 284.788789 60.041589) (xy 284.876394 59.910479) (xy 284.936737 59.764797) (xy 284.9675 59.610142) + (xy 284.9675 59.452458) (xy 284.9675 59.452455) (xy 284.967499 59.452453) (xy 284.951238 59.370704) + (xy 284.936737 59.297803) (xy 284.919906 59.257169) (xy 284.876397 59.152127) (xy 284.87639 59.152114) + (xy 284.788789 59.021011) (xy 284.788786 59.021007) (xy 284.677292 58.909513) (xy 284.677288 58.90951) + (xy 284.546185 58.821909) (xy 284.546172 58.821902) (xy 284.400501 58.761564) (xy 284.400489 58.761561) + (xy 284.245845 58.7308) (xy 284.245842 58.7308) (xy 284.088158 58.7308) (xy 284.088155 58.7308) + (xy 283.93351 58.761561) (xy 283.933498 58.761564) (xy 283.787827 58.821902) (xy 283.787814 58.821909) + (xy 283.656711 58.90951) (xy 283.656707 58.909513) (xy 283.545213 59.021007) (xy 283.54521 59.021011) + (xy 283.457609 59.152114) (xy 283.457602 59.152127) (xy 283.397264 59.297798) (xy 283.397261 59.29781) + (xy 283.3665 59.452453) (xy 283.3665 59.610146) (xy 283.397261 59.764789) (xy 283.397264 59.764801) + (xy 283.457602 59.910472) (xy 283.457609 59.910485) (xy 283.54521 60.041588) (xy 283.545213 60.041592) + (xy 283.656707 60.153086) (xy 283.656711 60.153089) (xy 283.787814 60.24069) (xy 283.787818 60.240692) + (xy 283.787821 60.240694) (xy 283.862954 60.271815) (xy 283.917356 60.315654) (xy 283.939421 60.381948) + (xy 283.9395 60.386375) (xy 283.9395 61.652724) (xy 283.919815 61.719763) (xy 283.867011 61.765518) + (xy 283.862953 61.767285) (xy 283.787824 61.798404) (xy 283.787814 61.798409) (xy 283.656711 61.88601) + (xy 283.656707 61.886013) (xy 283.545213 61.997507) (xy 283.54521 61.997511) (xy 283.457609 62.128614) + (xy 283.457602 62.128627) (xy 283.397264 62.274298) (xy 283.397261 62.27431) (xy 283.3665 62.428953) + (xy 283.3665 62.428958) (xy 283.3665 62.586642) (xy 283.36654 62.586841) (xy 283.37186 62.61359) + (xy 283.365631 62.683182) (xy 283.322768 62.738359) (xy 283.2635 62.761069) (xy 283.259419 62.761507) + (xy 283.124571 62.811802) (xy 283.124568 62.811804) (xy 283.050561 62.867206) (xy 282.985096 62.891623) + (xy 282.916823 62.876771) (xy 282.901939 62.867206) (xy 282.827931 62.811804) (xy 282.827928 62.811802) + (xy 282.693084 62.761509) (xy 282.689522 62.761126) (xy 282.686945 62.760058) (xy 282.685538 62.759726) + (xy 282.685591 62.759497) (xy 282.624972 62.734383) (xy 282.585128 62.676988) (xy 282.581168 62.613646) + (xy 282.5865 62.586842) (xy 282.5865 62.429158) (xy 282.5865 62.429155) (xy 282.586499 62.429153) + (xy 282.555738 62.27451) (xy 282.555737 62.274503) (xy 282.555652 62.274298) (xy 282.495397 62.128827) + (xy 282.49539 62.128814) (xy 282.407789 61.997711) (xy 282.403924 61.993001) (xy 282.405628 61.991602) + (xy 282.376881 61.938993) (xy 282.381846 61.8693) (xy 282.405079 61.833147) (xy 282.403924 61.832199) + (xy 282.407784 61.827493) (xy 282.407789 61.827489) (xy 282.495394 61.696379) (xy 282.555737 61.550697) + (xy 282.5865 61.396042) (xy 282.5865 61.238358) (xy 282.5865 61.238355) (xy 282.586499 61.238353) + (xy 282.555738 61.08371) (xy 282.555737 61.083703) (xy 282.555735 61.083698) (xy 282.495397 60.938027) + (xy 282.49539 60.938014) (xy 282.407789 60.806911) (xy 282.407786 60.806907) (xy 282.296292 60.695413) + (xy 282.296288 60.69541) (xy 282.165185 60.607809) (xy 282.165172 60.607802) (xy 282.019501 60.547464) + (xy 282.019489 60.547461) (xy 281.864845 60.5167) (xy 281.864842 60.5167) (xy 281.707158 60.5167) + (xy 281.707155 60.5167) (xy 281.55251 60.547461) (xy 281.552498 60.547464) (xy 281.406827 60.607802) + (xy 281.406814 60.607809) (xy 281.275711 60.69541) (xy 281.275707 60.695413) (xy 281.164213 60.806907) + (xy 281.16421 60.806911) (xy 281.076609 60.938014) (xy 281.076602 60.938027) (xy 281.016264 61.083698) + (xy 281.016261 61.08371) (xy 280.9855 61.238353) (xy 280.9855 61.396046) (xy 281.016261 61.550689) + (xy 281.016264 61.550701) (xy 281.076602 61.696372) (xy 281.076609 61.696385) (xy 281.16421 61.827488) + (xy 281.168076 61.832199) (xy 281.166376 61.833593) (xy 281.195125 61.886242) (xy 281.190141 61.955934) + (xy 281.166925 61.992056) (xy 281.168076 61.993001) (xy 281.16421 61.997711) (xy 281.076609 62.128814) + (xy 281.076602 62.128827) (xy 281.016264 62.274498) (xy 281.016261 62.27451) (xy 280.9855 62.429153) + (xy 280.9855 62.586841) (xy 280.990815 62.613563) (xy 280.984586 62.683154) (xy 280.941723 62.738331) + (xy 280.882451 62.761043) (xy 280.878116 62.761508) (xy 280.743271 62.811802) (xy 280.743269 62.811804) + (xy 280.669311 62.867169) (xy 280.603847 62.891586) (xy 280.535574 62.876735) (xy 280.520689 62.867169) + (xy 280.512297 62.860887) (xy 280.446731 62.811804) (xy 280.446729 62.811803) (xy 280.446728 62.811802) + (xy 280.311882 62.761508) (xy 280.311883 62.761508) (xy 280.252283 62.755101) (xy 280.252281 62.7551) + (xy 280.252273 62.7551) (xy 280.252264 62.7551) (xy 278.556529 62.7551) (xy 278.556523 62.755101) + (xy 278.496916 62.761508) (xy 278.362071 62.811802) (xy 278.362064 62.811806) (xy 278.246855 62.898052) + (xy 278.246852 62.898055) (xy 278.160606 63.013264) (xy 278.160602 63.013271) (xy 278.110308 63.148117) + (xy 278.104502 63.202128) (xy 278.103901 63.207723) (xy 278.1039 63.207735) (xy 274.751799 63.207735) + (xy 274.751799 63.207728) (xy 274.745391 63.148117) (xy 274.743302 63.142517) (xy 274.695097 63.013271) + (xy 274.695093 63.013264) (xy 274.608847 62.898055) (xy 274.608844 62.898052) (xy 274.493635 62.811806) + (xy 274.493628 62.811802) (xy 274.358782 62.761508) (xy 274.358783 62.761508) (xy 274.299183 62.755101) + (xy 274.299181 62.7551) (xy 274.299173 62.7551) (xy 274.299164 62.7551) (xy 272.603429 62.7551) + (xy 272.603423 62.755101) (xy 272.543816 62.761508) (xy 272.408971 62.811802) (xy 272.408968 62.811804) + (xy 272.334961 62.867206) (xy 272.269496 62.891623) (xy 272.201223 62.876771) (xy 272.186339 62.867206) + (xy 272.112331 62.811804) (xy 272.112328 62.811802) (xy 271.977484 62.761509) (xy 271.973494 62.76108) + (xy 271.970607 62.759884) (xy 271.969938 62.759726) (xy 271.969963 62.759617) (xy 271.908944 62.734339) + (xy 271.869099 62.676945) (xy 271.865138 62.613598) (xy 271.8705 62.586643) (xy 271.8705 62.428955) + (xy 271.870499 62.428953) (xy 271.839778 62.27451) (xy 271.839737 62.274303) (xy 271.839735 62.274298) + (xy 271.779397 62.128627) (xy 271.77939 62.128614) (xy 271.691789 61.997511) (xy 271.691786 61.997507) + (xy 271.580292 61.886013) (xy 271.580288 61.88601) (xy 271.449185 61.798409) (xy 271.449175 61.798404) + (xy 271.374047 61.767285) (xy 271.319644 61.723444) (xy 271.297579 61.65715) (xy 271.2975 61.652724) + (xy 271.2975 58.600375) (xy 271.317185 58.533336) (xy 271.369989 58.487581) (xy 271.373999 58.485834) + (xy 271.449179 58.454694) (xy 271.580289 58.367089) (xy 271.691789 58.255589) (xy 271.779394 58.124479) + (xy 271.839737 57.978797) (xy 271.8705 57.824142) (xy 271.8705 57.666458) (xy 271.8705 57.666455) + (xy 271.870499 57.666453) (xy 271.839738 57.51181) (xy 271.839737 57.511803) (xy 271.839735 57.511798) + (xy 271.779397 57.366127) (xy 271.77939 57.366114) (xy 271.691789 57.235011) (xy 271.691786 57.235007) + (xy 271.580292 57.123513) (xy 271.580288 57.12351) (xy 271.449185 57.035909) (xy 271.449172 57.035902) + (xy 271.303501 56.975564) (xy 271.303489 56.975561) (xy 271.148845 56.9448) (xy 271.148842 56.9448) + (xy 270.991158 56.9448) (xy 270.991155 56.9448) (xy 270.83651 56.975561) (xy 270.836498 56.975564) + (xy 270.690827 57.035902) (xy 270.690814 57.035909) (xy 270.559711 57.12351) (xy 270.559707 57.123513) + (xy 270.448213 57.235007) (xy 270.44821 57.235011) (xy 270.360609 57.366114) (xy 270.360602 57.366127) + (xy 270.300264 57.511798) (xy 270.300261 57.51181) (xy 270.2695 57.666453) (xy 270.2695 57.824146) + (xy 270.300261 57.978789) (xy 270.300264 57.978801) (xy 270.360602 58.124472) (xy 270.360609 58.124485) + (xy 270.44821 58.255588) (xy 270.448213 58.255592) (xy 270.559707 58.367086) (xy 270.559711 58.367089) + (xy 270.690814 58.45469) (xy 270.690818 58.454692) (xy 270.690821 58.454694) (xy 270.765954 58.485815) + (xy 270.820356 58.529654) (xy 270.842421 58.595948) (xy 270.8425 58.600375) (xy 270.8425 61.652724) + (xy 270.822815 61.719763) (xy 270.770011 61.765518) (xy 270.765953 61.767285) (xy 270.690824 61.798404) + (xy 270.690814 61.798409) (xy 270.559711 61.88601) (xy 270.559707 61.886013) (xy 270.448213 61.997507) + (xy 270.44821 61.997511) (xy 270.360609 62.128614) (xy 270.360602 62.128627) (xy 270.300264 62.274298) + (xy 270.300261 62.27431) (xy 270.2695 62.428953) (xy 270.2695 62.428958) (xy 270.2695 62.586642) + (xy 270.26954 62.586841) (xy 270.274862 62.6136) (xy 270.268633 62.683192) (xy 270.22577 62.738368) + (xy 270.170065 62.759715) (xy 270.170068 62.759724) (xy 270.170004 62.759738) (xy 270.166508 62.761079) + (xy 270.162518 62.761508) (xy 270.027671 62.811802) (xy 270.027669 62.811804) (xy 269.953711 62.867169) + (xy 269.888247 62.891586) (xy 269.819974 62.876735) (xy 269.805089 62.867169) (xy 269.796697 62.860887) + (xy 269.731131 62.811804) (xy 269.731129 62.811803) (xy 269.731128 62.811802) (xy 269.596284 62.761509) + (xy 269.592489 62.761101) (xy 269.589743 62.759963) (xy 269.588738 62.759726) (xy 269.588776 62.759562) + (xy 269.52794 62.734359) (xy 269.488094 62.676965) (xy 269.484134 62.61362) (xy 269.4895 62.586644) + (xy 269.4895 62.428955) (xy 269.489499 62.428953) (xy 269.458778 62.27451) (xy 269.458737 62.274303) + (xy 269.458735 62.274298) (xy 269.398397 62.128627) (xy 269.39839 62.128614) (xy 269.310789 61.997511) + (xy 269.310786 61.997507) (xy 269.199292 61.886013) (xy 269.199288 61.88601) (xy 269.068185 61.798409) + (xy 269.068175 61.798404) (xy 268.993047 61.767285) (xy 268.938644 61.723444) (xy 268.916579 61.65715) + (xy 268.9165 61.652724) (xy 268.9165 60.386375) (xy 268.936185 60.319336) (xy 268.988989 60.273581) + (xy 268.992999 60.271834) (xy 269.068179 60.240694) (xy 269.199289 60.153089) (xy 269.310789 60.041589) + (xy 269.398394 59.910479) (xy 269.458737 59.764797) (xy 269.4895 59.610142) (xy 269.4895 59.452458) + (xy 269.4895 59.452455) (xy 269.489499 59.452453) (xy 269.473238 59.370704) (xy 269.458737 59.297803) + (xy 269.441906 59.257169) (xy 269.398397 59.152127) (xy 269.39839 59.152114) (xy 269.310789 59.021011) + (xy 269.310786 59.021007) (xy 269.199292 58.909513) (xy 269.199288 58.90951) (xy 269.068185 58.821909) + (xy 269.068172 58.821902) (xy 268.922501 58.761564) (xy 268.922489 58.761561) (xy 268.767845 58.7308) + (xy 268.767842 58.7308) (xy 268.610158 58.7308) (xy 268.610155 58.7308) (xy 268.45551 58.761561) + (xy 268.455498 58.761564) (xy 268.309827 58.821902) (xy 268.309814 58.821909) (xy 268.178711 58.90951) + (xy 268.178707 58.909513) (xy 268.067213 59.021007) (xy 268.06721 59.021011) (xy 267.979609 59.152114) + (xy 267.979602 59.152127) (xy 267.919264 59.297798) (xy 267.919261 59.29781) (xy 267.8885 59.452453) + (xy 267.8885 59.610146) (xy 267.919261 59.764789) (xy 267.919264 59.764801) (xy 267.979602 59.910472) + (xy 267.979609 59.910485) (xy 268.06721 60.041588) (xy 268.067213 60.041592) (xy 268.178707 60.153086) + (xy 268.178711 60.153089) (xy 268.309814 60.24069) (xy 268.309818 60.240692) (xy 268.309821 60.240694) + (xy 268.384954 60.271815) (xy 268.439356 60.315654) (xy 268.461421 60.381948) (xy 268.4615 60.386375) + (xy 268.4615 61.652724) (xy 268.441815 61.719763) (xy 268.389011 61.765518) (xy 268.384953 61.767285) + (xy 268.309824 61.798404) (xy 268.309814 61.798409) (xy 268.178711 61.88601) (xy 268.178707 61.886013) + (xy 268.067213 61.997507) (xy 268.06721 61.997511) (xy 267.979609 62.128614) (xy 267.979602 62.128627) + (xy 267.919264 62.274298) (xy 267.919261 62.27431) (xy 267.8885 62.428953) (xy 267.8885 62.428958) + (xy 267.8885 62.586642) (xy 267.88854 62.586841) (xy 267.893858 62.613579) (xy 267.88763 62.68317) + (xy 267.844766 62.738347) (xy 267.785503 62.761058) (xy 267.781318 62.761508) (xy 267.646471 62.811802) + (xy 267.646468 62.811804) (xy 267.572461 62.867206) (xy 267.506996 62.891623) (xy 267.438723 62.876771) + (xy 267.423839 62.867206) (xy 267.349831 62.811804) (xy 267.349828 62.811802) (xy 267.214982 62.761508) + (xy 267.214983 62.761508) (xy 267.211488 62.761133) (xy 267.208958 62.760085) (xy 267.207438 62.759726) + (xy 267.207496 62.759479) (xy 267.146937 62.734395) (xy 267.107089 62.677002) (xy 267.103127 62.613652) + (xy 267.1085 62.586642) (xy 267.1085 62.428958) (xy 267.1085 62.428955) (xy 267.108499 62.428953) + (xy 267.077778 62.27451) (xy 267.077737 62.274303) (xy 267.077735 62.274298) (xy 267.017397 62.128627) + (xy 267.01739 62.128614) (xy 266.929789 61.997511) (xy 266.925924 61.992801) (xy 266.92766 61.991376) + (xy 266.898982 61.938895) (xy 266.903945 61.869202) (xy 266.927103 61.833167) (xy 266.925924 61.832199) + (xy 266.929784 61.827493) (xy 266.929789 61.827489) (xy 267.017394 61.696379) (xy 267.077737 61.550697) + (xy 267.1085 61.396042) (xy 267.1085 61.238358) (xy 267.1085 61.238355) (xy 267.108499 61.238353) + (xy 267.077738 61.08371) (xy 267.077737 61.083703) (xy 267.077735 61.083698) (xy 267.017397 60.938027) + (xy 267.01739 60.938014) (xy 266.929789 60.806911) (xy 266.929786 60.806907) (xy 266.818292 60.695413) + (xy 266.818288 60.69541) (xy 266.687185 60.607809) (xy 266.687172 60.607802) (xy 266.541501 60.547464) + (xy 266.541489 60.547461) (xy 266.386845 60.5167) (xy 266.386842 60.5167) (xy 266.229158 60.5167) + (xy 266.229155 60.5167) (xy 266.07451 60.547461) (xy 266.074498 60.547464) (xy 265.928827 60.607802) + (xy 265.928814 60.607809) (xy 265.797711 60.69541) (xy 265.797707 60.695413) (xy 265.686213 60.806907) + (xy 265.68621 60.806911) (xy 265.598609 60.938014) (xy 265.598602 60.938027) (xy 265.538264 61.083698) + (xy 265.538261 61.08371) (xy 265.5075 61.238353) (xy 265.5075 61.396046) (xy 265.538261 61.550689) + (xy 265.538264 61.550701) (xy 265.598602 61.696372) (xy 265.598609 61.696385) (xy 265.68621 61.827488) + (xy 265.690076 61.832199) (xy 265.688345 61.833619) (xy 265.717025 61.886142) (xy 265.712041 61.955834) + (xy 265.688902 61.991837) (xy 265.690076 61.992801) (xy 265.68621 61.997511) (xy 265.598609 62.128614) + (xy 265.598602 62.128627) (xy 265.538264 62.274298) (xy 265.538261 62.27431) (xy 265.5075 62.428953) + (xy 265.5075 62.586646) (xy 265.512851 62.613547) (xy 265.506624 62.683139) (xy 265.463761 62.738316) + (xy 265.404491 62.761027) (xy 265.400019 62.761507) (xy 265.265171 62.811802) (xy 265.265169 62.811804) + (xy 265.191211 62.867169) (xy 265.125747 62.891586) (xy 265.057474 62.876735) (xy 265.042589 62.867169) + (xy 265.034197 62.860887) (xy 264.968631 62.811804) (xy 264.968629 62.811803) (xy 264.968628 62.811802) + (xy 264.833782 62.761508) (xy 264.833783 62.761508) (xy 264.774183 62.755101) (xy 264.774181 62.7551) + (xy 264.774173 62.7551) (xy 264.774164 62.7551) (xy 263.078429 62.7551) (xy 263.078423 62.755101) + (xy 263.018816 62.761508) (xy 262.883971 62.811802) (xy 262.883964 62.811806) (xy 262.768755 62.898052) + (xy 262.768752 62.898055) (xy 262.682506 63.013264) (xy 262.682502 63.013271) (xy 262.632208 63.148117) + (xy 262.626402 63.202128) (xy 262.625801 63.207723) (xy 262.6258 63.207735) (xy 259.273599 63.207735) + (xy 259.273599 63.207728) (xy 259.267191 63.148117) (xy 259.265102 63.142517) (xy 259.216897 63.013271) + (xy 259.216893 63.013264) (xy 259.130647 62.898055) (xy 259.130644 62.898052) (xy 259.015435 62.811806) + (xy 259.015428 62.811802) (xy 258.880582 62.761508) (xy 258.880583 62.761508) (xy 258.820983 62.755101) + (xy 258.820981 62.7551) (xy 258.820973 62.7551) (xy 258.820964 62.7551) (xy 257.125229 62.7551) + (xy 257.125223 62.755101) (xy 257.065616 62.761508) (xy 256.930771 62.811802) (xy 256.930769 62.811804) + (xy 256.856811 62.867169) (xy 256.791347 62.891586) (xy 256.723074 62.876735) (xy 256.708189 62.867169) + (xy 256.699797 62.860887) (xy 256.634231 62.811804) (xy 256.634229 62.811803) (xy 256.634228 62.811802) + (xy 256.499382 62.761508) (xy 256.499384 62.761508) (xy 256.495497 62.761091) (xy 256.492684 62.759925) + (xy 256.491838 62.759726) (xy 256.49187 62.759588) (xy 256.430946 62.734353) (xy 256.391098 62.67696) + (xy 256.387136 62.61361) (xy 256.3925 62.586644) (xy 256.3925 62.428955) (xy 256.392499 62.428953) + (xy 256.361778 62.27451) (xy 256.361737 62.274303) (xy 256.361735 62.274298) (xy 256.301397 62.128627) + (xy 256.30139 62.128614) (xy 256.213789 61.997511) (xy 256.213786 61.997507) (xy 256.102292 61.886013) + (xy 256.102288 61.88601) (xy 255.971185 61.798409) (xy 255.971175 61.798404) (xy 255.896047 61.767285) + (xy 255.841644 61.723444) (xy 255.819579 61.65715) (xy 255.8195 61.652724) (xy 255.8195 58.600375) + (xy 255.839185 58.533336) (xy 255.891989 58.487581) (xy 255.895999 58.485834) (xy 255.971179 58.454694) + (xy 256.102289 58.367089) (xy 256.213789 58.255589) (xy 256.301394 58.124479) (xy 256.361737 57.978797) + (xy 256.3925 57.824142) (xy 256.3925 57.666458) (xy 256.3925 57.666455) (xy 256.392499 57.666453) + (xy 256.361738 57.51181) (xy 256.361737 57.511803) (xy 256.361735 57.511798) (xy 256.301397 57.366127) + (xy 256.30139 57.366114) (xy 256.213789 57.235011) (xy 256.213786 57.235007) (xy 256.102292 57.123513) + (xy 256.102288 57.12351) (xy 255.971185 57.035909) (xy 255.971172 57.035902) (xy 255.825501 56.975564) + (xy 255.825489 56.975561) (xy 255.670845 56.9448) (xy 255.670842 56.9448) (xy 255.513158 56.9448) + (xy 255.513155 56.9448) (xy 255.35851 56.975561) (xy 255.358498 56.975564) (xy 255.212827 57.035902) + (xy 255.212814 57.035909) (xy 255.081711 57.12351) (xy 255.081707 57.123513) (xy 254.970213 57.235007) + (xy 254.97021 57.235011) (xy 254.882609 57.366114) (xy 254.882602 57.366127) (xy 254.822264 57.511798) + (xy 254.822261 57.51181) (xy 254.7915 57.666453) (xy 254.7915 57.824146) (xy 254.822261 57.978789) + (xy 254.822264 57.978801) (xy 254.882602 58.124472) (xy 254.882609 58.124485) (xy 254.97021 58.255588) + (xy 254.970213 58.255592) (xy 255.081707 58.367086) (xy 255.081711 58.367089) (xy 255.212814 58.45469) + (xy 255.212818 58.454692) (xy 255.212821 58.454694) (xy 255.287954 58.485815) (xy 255.342356 58.529654) + (xy 255.364421 58.595948) (xy 255.3645 58.600375) (xy 255.3645 61.652724) (xy 255.344815 61.719763) + (xy 255.292011 61.765518) (xy 255.287953 61.767285) (xy 255.212824 61.798404) (xy 255.212814 61.798409) + (xy 255.081711 61.88601) (xy 255.081707 61.886013) (xy 254.970213 61.997507) (xy 254.97021 61.997511) + (xy 254.882609 62.128614) (xy 254.882602 62.128627) (xy 254.822264 62.274298) (xy 254.822261 62.27431) + (xy 254.7915 62.428953) (xy 254.7915 62.428958) (xy 254.7915 62.586642) (xy 254.79154 62.586841) + (xy 254.79686 62.61359) (xy 254.790631 62.683182) (xy 254.747768 62.738359) (xy 254.6885 62.761069) + (xy 254.684419 62.761507) (xy 254.549571 62.811802) (xy 254.549568 62.811804) (xy 254.475561 62.867206) + (xy 254.410096 62.891623) (xy 254.341823 62.876771) (xy 254.326939 62.867206) (xy 254.252931 62.811804) + (xy 254.252928 62.811802) (xy 254.118083 62.761509) (xy 254.114485 62.761122) (xy 254.111881 62.760043) + (xy 254.110538 62.759726) (xy 254.110589 62.759508) (xy 254.049935 62.734381) (xy 254.01009 62.676986) + (xy 254.006129 62.613642) (xy 254.0115 62.586642) (xy 254.0115 62.428958) (xy 254.0115 62.428955) + (xy 254.011499 62.428953) (xy 253.980778 62.27451) (xy 253.980737 62.274303) (xy 253.980735 62.274298) + (xy 253.920397 62.128627) (xy 253.92039 62.128614) (xy 253.832789 61.997511) (xy 253.832786 61.997507) + (xy 253.721292 61.886013) (xy 253.721288 61.88601) (xy 253.590185 61.798409) (xy 253.590175 61.798404) + (xy 253.515047 61.767285) (xy 253.460644 61.723444) (xy 253.438579 61.65715) (xy 253.4385 61.652724) + (xy 253.4385 60.386375) (xy 253.458185 60.319336) (xy 253.510989 60.273581) (xy 253.514999 60.271834) + (xy 253.590179 60.240694) (xy 253.721289 60.153089) (xy 253.832789 60.041589) (xy 253.920394 59.910479) + (xy 253.980737 59.764797) (xy 254.0115 59.610142) (xy 254.0115 59.452458) (xy 254.0115 59.452455) + (xy 254.011499 59.452453) (xy 253.995238 59.370704) (xy 253.980737 59.297803) (xy 253.963906 59.257169) + (xy 253.920397 59.152127) (xy 253.92039 59.152114) (xy 253.832789 59.021011) (xy 253.832786 59.021007) + (xy 253.721292 58.909513) (xy 253.721288 58.90951) (xy 253.590185 58.821909) (xy 253.590172 58.821902) + (xy 253.444501 58.761564) (xy 253.444489 58.761561) (xy 253.289845 58.7308) (xy 253.289842 58.7308) + (xy 253.132158 58.7308) (xy 253.132155 58.7308) (xy 252.97751 58.761561) (xy 252.977498 58.761564) + (xy 252.831827 58.821902) (xy 252.831814 58.821909) (xy 252.700711 58.90951) (xy 252.700707 58.909513) + (xy 252.589213 59.021007) (xy 252.58921 59.021011) (xy 252.501609 59.152114) (xy 252.501602 59.152127) + (xy 252.441264 59.297798) (xy 252.441261 59.29781) (xy 252.4105 59.452453) (xy 252.4105 59.610146) + (xy 252.441261 59.764789) (xy 252.441264 59.764801) (xy 252.501602 59.910472) (xy 252.501609 59.910485) + (xy 252.58921 60.041588) (xy 252.589213 60.041592) (xy 252.700707 60.153086) (xy 252.700711 60.153089) + (xy 252.831814 60.24069) (xy 252.831818 60.240692) (xy 252.831821 60.240694) (xy 252.906954 60.271815) + (xy 252.961356 60.315654) (xy 252.983421 60.381948) (xy 252.9835 60.386375) (xy 252.9835 61.652724) + (xy 252.963815 61.719763) (xy 252.911011 61.765518) (xy 252.906953 61.767285) (xy 252.831824 61.798404) + (xy 252.831814 61.798409) (xy 252.700711 61.88601) (xy 252.700707 61.886013) (xy 252.589213 61.997507) + (xy 252.58921 61.997511) (xy 252.501609 62.128614) (xy 252.501602 62.128627) (xy 252.441264 62.274298) + (xy 252.441261 62.27431) (xy 252.4105 62.428953) (xy 252.4105 62.586646) (xy 252.415853 62.613557) + (xy 252.409626 62.683148) (xy 252.366763 62.738326) (xy 252.307498 62.761037) (xy 252.303118 62.761508) + (xy 252.168271 62.811802) (xy 252.168269 62.811804) (xy 252.094311 62.867169) (xy 252.028847 62.891586) + (xy 251.960574 62.876735) (xy 251.945689 62.867169) (xy 251.937297 62.860887) (xy 251.871731 62.811804) + (xy 251.871729 62.811803) (xy 251.871728 62.811802) (xy 251.736884 62.761509) (xy 251.73348 62.761143) + (xy 251.731017 62.760122) (xy 251.729338 62.759726) (xy 251.729402 62.759453) (xy 251.66893 62.734401) + (xy 251.629085 62.677006) (xy 251.625125 62.613662) (xy 251.6305 62.586642) (xy 251.6305 62.428958) + (xy 251.6305 62.428955) (xy 251.630499 62.428953) (xy 251.599778 62.27451) (xy 251.599737 62.274303) + (xy 251.599735 62.274298) (xy 251.539397 62.128627) (xy 251.53939 62.128614) (xy 251.451789 61.997511) + (xy 251.447924 61.992801) (xy 251.44966 61.991376) (xy 251.420982 61.938895) (xy 251.425945 61.869202) + (xy 251.449103 61.833167) (xy 251.447924 61.832199) (xy 251.451784 61.827493) (xy 251.451789 61.827489) + (xy 251.539394 61.696379) (xy 251.599737 61.550697) (xy 251.6305 61.396042) (xy 251.6305 61.238358) + (xy 251.6305 61.238355) (xy 251.630499 61.238353) (xy 251.599738 61.08371) (xy 251.599737 61.083703) + (xy 251.599735 61.083698) (xy 251.539397 60.938027) (xy 251.53939 60.938014) (xy 251.451789 60.806911) + (xy 251.451786 60.806907) (xy 251.340292 60.695413) (xy 251.340288 60.69541) (xy 251.209185 60.607809) + (xy 251.209172 60.607802) (xy 251.063501 60.547464) (xy 251.063489 60.547461) (xy 250.908845 60.5167) + (xy 250.908842 60.5167) (xy 250.751158 60.5167) (xy 250.751155 60.5167) (xy 250.59651 60.547461) + (xy 250.596498 60.547464) (xy 250.450827 60.607802) (xy 250.450814 60.607809) (xy 250.319711 60.69541) + (xy 250.319707 60.695413) (xy 250.208213 60.806907) (xy 250.20821 60.806911) (xy 250.120609 60.938014) + (xy 250.120602 60.938027) (xy 250.060264 61.083698) (xy 250.060261 61.08371) (xy 250.0295 61.238353) + (xy 250.0295 61.396046) (xy 250.060261 61.550689) (xy 250.060264 61.550701) (xy 250.120602 61.696372) + (xy 250.120609 61.696385) (xy 250.20821 61.827488) (xy 250.212076 61.832199) (xy 250.210345 61.833619) + (xy 250.239025 61.886142) (xy 250.234041 61.955834) (xy 250.210902 61.991837) (xy 250.212076 61.992801) + (xy 250.20821 61.997511) (xy 250.120609 62.128614) (xy 250.120602 62.128627) (xy 250.060264 62.274298) + (xy 250.060261 62.27431) (xy 250.0295 62.428953) (xy 250.0295 62.428958) (xy 250.0295 62.586642) + (xy 250.0295 62.586644) (xy 250.029499 62.586644) (xy 250.034849 62.613535) (xy 250.028622 62.683127) + (xy 249.985759 62.738304) (xy 249.926494 62.761016) (xy 249.921918 62.761508) (xy 249.787071 62.811802) + (xy 249.787068 62.811804) (xy 249.713061 62.867206) (xy 249.647596 62.891623) (xy 249.579323 62.876771) + (xy 249.564439 62.867206) (xy 249.490431 62.811804) (xy 249.490428 62.811802) (xy 249.355582 62.761508) + (xy 249.355583 62.761508) (xy 249.295983 62.755101) (xy 249.295981 62.7551) (xy 249.295973 62.7551) + (xy 249.295964 62.7551) (xy 247.600229 62.7551) (xy 247.600223 62.755101) (xy 247.540616 62.761508) + (xy 247.405771 62.811802) (xy 247.405764 62.811806) (xy 247.290555 62.898052) (xy 247.290552 62.898055) + (xy 247.204306 63.013264) (xy 247.204302 63.013271) (xy 247.154008 63.148117) (xy 247.148202 63.202128) + (xy 247.147601 63.207723) (xy 247.1476 63.207735) (xy 243.795499 63.207735) (xy 243.795499 63.207728) + (xy 243.789091 63.148117) (xy 243.787002 63.142517) (xy 243.738797 63.013271) (xy 243.738793 63.013264) + (xy 243.652547 62.898055) (xy 243.652544 62.898052) (xy 243.537335 62.811806) (xy 243.537328 62.811802) + (xy 243.402484 62.761509) (xy 243.398494 62.76108) (xy 243.395607 62.759884) (xy 243.394938 62.759726) + (xy 243.394963 62.759617) (xy 243.333944 62.734339) (xy 243.294099 62.676945) (xy 243.290138 62.613598) + (xy 243.2955 62.586643) (xy 243.2955 62.428955) (xy 243.295499 62.428953) (xy 243.264778 62.27451) + (xy 243.264737 62.274303) (xy 243.264735 62.274298) (xy 243.204397 62.128627) (xy 243.20439 62.128614) + (xy 243.116789 61.997511) (xy 243.116786 61.997507) (xy 243.005292 61.886013) (xy 243.005288 61.88601) + (xy 242.874185 61.798409) (xy 242.874175 61.798404) (xy 242.799047 61.767285) (xy 242.744644 61.723444) + (xy 242.722579 61.65715) (xy 242.7225 61.652724) (xy 242.7225 58.600375) (xy 242.742185 58.533336) + (xy 242.794989 58.487581) (xy 242.798999 58.485834) (xy 242.874179 58.454694) (xy 243.005289 58.367089) + (xy 243.116789 58.255589) (xy 243.204394 58.124479) (xy 243.264737 57.978797) (xy 243.2955 57.824142) + (xy 243.2955 57.666458) (xy 243.2955 57.666455) (xy 243.295499 57.666453) (xy 243.264738 57.51181) + (xy 243.264737 57.511803) (xy 243.264735 57.511798) (xy 243.204397 57.366127) (xy 243.20439 57.366114) + (xy 243.116789 57.235011) (xy 243.116786 57.235007) (xy 243.005292 57.123513) (xy 243.005288 57.12351) + (xy 242.874185 57.035909) (xy 242.874172 57.035902) (xy 242.728501 56.975564) (xy 242.728489 56.975561) + (xy 242.573845 56.9448) (xy 242.573842 56.9448) (xy 242.416158 56.9448) (xy 242.416155 56.9448) + (xy 242.26151 56.975561) (xy 242.261498 56.975564) (xy 242.115827 57.035902) (xy 242.115814 57.035909) + (xy 241.984711 57.12351) (xy 241.984707 57.123513) (xy 241.873213 57.235007) (xy 241.87321 57.235011) + (xy 241.785609 57.366114) (xy 241.785602 57.366127) (xy 241.725264 57.511798) (xy 241.725261 57.51181) + (xy 241.6945 57.666453) (xy 241.6945 57.824146) (xy 241.725261 57.978789) (xy 241.725264 57.978801) + (xy 241.785602 58.124472) (xy 241.785609 58.124485) (xy 241.87321 58.255588) (xy 241.873213 58.255592) + (xy 241.984707 58.367086) (xy 241.984711 58.367089) (xy 242.115814 58.45469) (xy 242.115818 58.454692) + (xy 242.115821 58.454694) (xy 242.190954 58.485815) (xy 242.245356 58.529654) (xy 242.267421 58.595948) + (xy 242.2675 58.600375) (xy 242.2675 61.652724) (xy 242.247815 61.719763) (xy 242.195011 61.765518) + (xy 242.190953 61.767285) (xy 242.115824 61.798404) (xy 242.115814 61.798409) (xy 241.984711 61.88601) + (xy 241.984707 61.886013) (xy 241.873213 61.997507) (xy 241.87321 61.997511) (xy 241.785609 62.128614) + (xy 241.785602 62.128627) (xy 241.725264 62.274298) (xy 241.725261 62.27431) (xy 241.6945 62.428953) + (xy 241.6945 62.428958) (xy 241.6945 62.586642) (xy 241.69454 62.586841) (xy 241.699862 62.6136) + (xy 241.693633 62.683192) (xy 241.65077 62.738368) (xy 241.595065 62.759715) (xy 241.595068 62.759724) + (xy 241.595004 62.759738) (xy 241.591508 62.761079) (xy 241.587518 62.761508) (xy 241.452671 62.811802) + (xy 241.452669 62.811804) (xy 241.378711 62.867169) (xy 241.313247 62.891586) (xy 241.244974 62.876735) + (xy 241.230089 62.867169) (xy 241.221697 62.860887) (xy 241.156131 62.811804) (xy 241.156129 62.811803) + (xy 241.156128 62.811802) (xy 241.021284 62.761509) (xy 241.017489 62.761101) (xy 241.014743 62.759963) + (xy 241.013738 62.759726) (xy 241.013776 62.759562) (xy 240.95294 62.734359) (xy 240.913094 62.676965) + (xy 240.909134 62.61362) (xy 240.9145 62.586644) (xy 240.9145 62.428955) (xy 240.914499 62.428953) + (xy 240.883778 62.27451) (xy 240.883737 62.274303) (xy 240.883735 62.274298) (xy 240.823397 62.128627) + (xy 240.82339 62.128614) (xy 240.735789 61.997511) (xy 240.735786 61.997507) (xy 240.624292 61.886013) + (xy 240.624288 61.88601) (xy 240.493185 61.798409) (xy 240.493175 61.798404) (xy 240.418047 61.767285) + (xy 240.363644 61.723444) (xy 240.341579 61.65715) (xy 240.3415 61.652724) (xy 240.3415 60.386375) + (xy 240.361185 60.319336) (xy 240.413989 60.273581) (xy 240.417999 60.271834) (xy 240.493179 60.240694) + (xy 240.624289 60.153089) (xy 240.735789 60.041589) (xy 240.823394 59.910479) (xy 240.883737 59.764797) + (xy 240.9145 59.610142) (xy 240.9145 59.452458) (xy 240.9145 59.452455) (xy 240.914499 59.452453) + (xy 240.898238 59.370704) (xy 240.883737 59.297803) (xy 240.866906 59.257169) (xy 240.823397 59.152127) + (xy 240.82339 59.152114) (xy 240.735789 59.021011) (xy 240.735786 59.021007) (xy 240.624292 58.909513) + (xy 240.624288 58.90951) (xy 240.493185 58.821909) (xy 240.493172 58.821902) (xy 240.347501 58.761564) + (xy 240.347489 58.761561) (xy 240.192845 58.7308) (xy 240.192842 58.7308) (xy 240.035158 58.7308) + (xy 240.035155 58.7308) (xy 239.88051 58.761561) (xy 239.880498 58.761564) (xy 239.734827 58.821902) + (xy 239.734814 58.821909) (xy 239.603711 58.90951) (xy 239.603707 58.909513) (xy 239.492213 59.021007) + (xy 239.49221 59.021011) (xy 239.404609 59.152114) (xy 239.404602 59.152127) (xy 239.344264 59.297798) + (xy 239.344261 59.29781) (xy 239.3135 59.452453) (xy 239.3135 59.610146) (xy 239.344261 59.764789) + (xy 239.344264 59.764801) (xy 239.404602 59.910472) (xy 239.404609 59.910485) (xy 239.49221 60.041588) + (xy 239.492213 60.041592) (xy 239.603707 60.153086) (xy 239.603711 60.153089) (xy 239.734814 60.24069) + (xy 239.734818 60.240692) (xy 239.734821 60.240694) (xy 239.809954 60.271815) (xy 239.864356 60.315654) + (xy 239.886421 60.381948) (xy 239.8865 60.386375) (xy 239.8865 61.652724) (xy 239.866815 61.719763) + (xy 239.814011 61.765518) (xy 239.809953 61.767285) (xy 239.734824 61.798404) (xy 239.734814 61.798409) + (xy 239.603711 61.88601) (xy 239.603707 61.886013) (xy 239.492213 61.997507) (xy 239.49221 61.997511) + (xy 239.404609 62.128614) (xy 239.404602 62.128627) (xy 239.344264 62.274298) (xy 239.344261 62.27431) + (xy 239.3135 62.428953) (xy 239.3135 62.428958) (xy 239.3135 62.586642) (xy 239.31354 62.586841) + (xy 239.318858 62.613579) (xy 239.31263 62.68317) (xy 239.269766 62.738347) (xy 239.210503 62.761058) + (xy 239.206318 62.761508) (xy 239.071471 62.811802) (xy 239.071468 62.811804) (xy 238.997461 62.867206) + (xy 238.931996 62.891623) (xy 238.863723 62.876771) (xy 238.848839 62.867206) (xy 238.774831 62.811804) + (xy 238.774828 62.811802) (xy 238.639982 62.761508) (xy 238.639983 62.761508) (xy 238.636488 62.761133) + (xy 238.633958 62.760085) (xy 238.632438 62.759726) (xy 238.632496 62.759479) (xy 238.571937 62.734395) + (xy 238.532089 62.677002) (xy 238.528127 62.613652) (xy 238.5335 62.586642) (xy 238.5335 62.428958) + (xy 238.5335 62.428955) (xy 238.533499 62.428953) (xy 238.502778 62.27451) (xy 238.502737 62.274303) + (xy 238.502735 62.274298) (xy 238.442397 62.128627) (xy 238.44239 62.128614) (xy 238.354789 61.997511) + (xy 238.350924 61.992801) (xy 238.35266 61.991376) (xy 238.323982 61.938895) (xy 238.328945 61.869202) + (xy 238.352103 61.833167) (xy 238.350924 61.832199) (xy 238.354784 61.827493) (xy 238.354789 61.827489) + (xy 238.442394 61.696379) (xy 238.502737 61.550697) (xy 238.5335 61.396042) (xy 238.5335 61.238358) + (xy 238.5335 61.238355) (xy 238.533499 61.238353) (xy 238.502738 61.08371) (xy 238.502737 61.083703) + (xy 238.502735 61.083698) (xy 238.442397 60.938027) (xy 238.44239 60.938014) (xy 238.354789 60.806911) + (xy 238.354786 60.806907) (xy 238.243292 60.695413) (xy 238.243288 60.69541) (xy 238.112185 60.607809) + (xy 238.112172 60.607802) (xy 237.966501 60.547464) (xy 237.966489 60.547461) (xy 237.811845 60.5167) + (xy 237.811842 60.5167) (xy 237.654158 60.5167) (xy 237.654155 60.5167) (xy 237.49951 60.547461) + (xy 237.499498 60.547464) (xy 237.353827 60.607802) (xy 237.353814 60.607809) (xy 237.222711 60.69541) + (xy 237.222707 60.695413) (xy 237.111213 60.806907) (xy 237.11121 60.806911) (xy 237.023609 60.938014) + (xy 237.023602 60.938027) (xy 236.963264 61.083698) (xy 236.963261 61.08371) (xy 236.9325 61.238353) + (xy 236.9325 61.396046) (xy 236.963261 61.550689) (xy 236.963264 61.550701) (xy 237.023602 61.696372) + (xy 237.023609 61.696385) (xy 237.11121 61.827488) (xy 237.115076 61.832199) (xy 237.113345 61.833619) + (xy 237.142025 61.886142) (xy 237.137041 61.955834) (xy 237.113902 61.991837) (xy 237.115076 61.992801) + (xy 237.11121 61.997511) (xy 237.023609 62.128614) (xy 237.023602 62.128627) (xy 236.963264 62.274298) + (xy 236.963261 62.27431) (xy 236.9325 62.428953) (xy 236.9325 62.586646) (xy 236.937851 62.613547) + (xy 236.931624 62.683139) (xy 236.888761 62.738316) (xy 236.829491 62.761027) (xy 236.825019 62.761507) + (xy 236.690171 62.811802) (xy 236.690169 62.811804) (xy 236.616211 62.867169) (xy 236.550747 62.891586) + (xy 236.482474 62.876735) (xy 236.467589 62.867169) (xy 236.459197 62.860887) (xy 236.393631 62.811804) + (xy 236.393629 62.811803) (xy 236.393628 62.811802) (xy 236.258782 62.761508) (xy 236.258783 62.761508) + (xy 236.199183 62.755101) (xy 236.199181 62.7551) (xy 236.199173 62.7551) (xy 236.199164 62.7551) + (xy 234.503429 62.7551) (xy 234.503423 62.755101) (xy 234.443816 62.761508) (xy 234.308971 62.811802) + (xy 234.308964 62.811806) (xy 234.193755 62.898052) (xy 234.193752 62.898055) (xy 234.107506 63.013264) + (xy 234.107502 63.013271) (xy 234.057208 63.148117) (xy 234.051402 63.202128) (xy 234.050801 63.207723) + (xy 234.0508 63.207735) (xy 230.698599 63.207735) (xy 230.698599 63.207728) (xy 230.692191 63.148117) + (xy 230.690102 63.142517) (xy 230.641897 63.013271) (xy 230.641893 63.013264) (xy 230.555647 62.898055) + (xy 230.555644 62.898052) (xy 230.440435 62.811806) (xy 230.440428 62.811802) (xy 230.305586 62.76151) + (xy 230.305585 62.761509) (xy 230.305583 62.761509) (xy 230.301499 62.761069) (xy 230.298543 62.759845) + (xy 230.298038 62.759726) (xy 230.298057 62.759644) (xy 230.236951 62.734332) (xy 230.197103 62.67694) + (xy 230.19314 62.613588) (xy 230.1985 62.586643) (xy 230.1985 62.428955) (xy 230.198499 62.428953) + (xy 230.167778 62.27451) (xy 230.167737 62.274303) (xy 230.167735 62.274298) (xy 230.107397 62.128627) + (xy 230.10739 62.128614) (xy 230.019789 61.997511) (xy 230.019786 61.997507) (xy 229.908292 61.886013) + (xy 229.908288 61.88601) (xy 229.777185 61.798409) (xy 229.777175 61.798404) (xy 229.702047 61.767285) + (xy 229.647644 61.723444) (xy 229.625579 61.65715) (xy 229.6255 61.652724) (xy 229.6255 58.668675) + (xy 229.645185 58.601636) (xy 229.697989 58.555881) (xy 229.701999 58.554134) (xy 229.777179 58.522994) + (xy 229.908289 58.435389) (xy 230.019789 58.323889) (xy 230.107394 58.192779) (xy 230.167737 58.047097) + (xy 230.1985 57.892442) (xy 230.1985 57.734758) (xy 230.1985 57.734755) (xy 230.198499 57.734753) + (xy 230.184914 57.666458) (xy 230.167737 57.580103) (xy 230.167735 57.580098) (xy 230.107397 57.434427) + (xy 230.10739 57.434414) (xy 230.019789 57.303311) (xy 230.019786 57.303307) (xy 229.908292 57.191813) + (xy 229.908288 57.19181) (xy 229.777185 57.104209) (xy 229.777172 57.104202) (xy 229.631501 57.043864) + (xy 229.631489 57.043861) (xy 229.476845 57.0131) (xy 229.476842 57.0131) (xy 229.319158 57.0131) + (xy 229.319155 57.0131) (xy 229.16451 57.043861) (xy 229.164498 57.043864) (xy 229.018827 57.104202) + (xy 229.018814 57.104209) (xy 228.887711 57.19181) (xy 228.887707 57.191813) (xy 228.776213 57.303307) + (xy 228.77621 57.303311) (xy 228.688609 57.434414) (xy 228.688602 57.434427) (xy 228.628264 57.580098) + (xy 228.628261 57.58011) (xy 228.5975 57.734753) (xy 228.5975 57.892446) (xy 228.628261 58.047089) + (xy 228.628264 58.047101) (xy 228.688602 58.192772) (xy 228.688609 58.192785) (xy 228.77621 58.323888) + (xy 228.776213 58.323892) (xy 228.887707 58.435386) (xy 228.887711 58.435389) (xy 229.018814 58.52299) + (xy 229.018818 58.522992) (xy 229.018821 58.522994) (xy 229.093954 58.554115) (xy 229.148356 58.597954) + (xy 229.170421 58.664248) (xy 229.1705 58.668675) (xy 229.1705 61.652724) (xy 229.150815 61.719763) + (xy 229.098011 61.765518) (xy 229.093953 61.767285) (xy 229.018824 61.798404) (xy 229.018814 61.798409) + (xy 228.887711 61.88601) (xy 228.887707 61.886013) (xy 228.776213 61.997507) (xy 228.77621 61.997511) + (xy 228.688609 62.128614) (xy 228.688602 62.128627) (xy 228.628264 62.274298) (xy 228.628261 62.27431) + (xy 228.5975 62.428953) (xy 228.5975 62.586643) (xy 228.602864 62.613612) (xy 228.596635 62.683203) + (xy 228.553771 62.73838) (xy 228.498159 62.759689) (xy 228.498168 62.759724) (xy 228.497911 62.759784) + (xy 228.494505 62.76109) (xy 228.490619 62.761507) (xy 228.355771 62.811802) (xy 228.355769 62.811804) + (xy 228.281811 62.867169) (xy 228.216347 62.891586) (xy 228.148074 62.876735) (xy 228.133189 62.867169) + (xy 228.124797 62.860887) (xy 228.059231 62.811804) (xy 228.059229 62.811803) (xy 228.059228 62.811802) + (xy 227.924382 62.761508) (xy 227.924384 62.761508) (xy 227.920497 62.761091) (xy 227.917684 62.759925) + (xy 227.916838 62.759726) (xy 227.91687 62.759588) (xy 227.855946 62.734353) (xy 227.816098 62.67696) + (xy 227.812136 62.61361) (xy 227.8175 62.586644) (xy 227.8175 62.428955) (xy 227.817499 62.428953) + (xy 227.786778 62.27451) (xy 227.786737 62.274303) (xy 227.786735 62.274298) (xy 227.726397 62.128627) + (xy 227.72639 62.128614) (xy 227.638789 61.997511) (xy 227.638786 61.997507) (xy 227.527292 61.886013) + (xy 227.527288 61.88601) (xy 227.396185 61.798409) (xy 227.396175 61.798404) (xy 227.321047 61.767285) + (xy 227.266644 61.723444) (xy 227.244579 61.65715) (xy 227.2445 61.652724) (xy 227.2445 60.386375) + (xy 227.264185 60.319336) (xy 227.316989 60.273581) (xy 227.320999 60.271834) (xy 227.396179 60.240694) + (xy 227.527289 60.153089) (xy 227.638789 60.041589) (xy 227.726394 59.910479) (xy 227.786737 59.764797) + (xy 227.8175 59.610142) (xy 227.8175 59.452458) (xy 227.8175 59.452455) (xy 227.817499 59.452453) + (xy 227.801238 59.370704) (xy 227.786737 59.297803) (xy 227.769906 59.257169) (xy 227.726397 59.152127) + (xy 227.72639 59.152114) (xy 227.638789 59.021011) (xy 227.638786 59.021007) (xy 227.527292 58.909513) + (xy 227.527288 58.90951) (xy 227.396185 58.821909) (xy 227.396172 58.821902) (xy 227.250501 58.761564) + (xy 227.250489 58.761561) (xy 227.095845 58.7308) (xy 227.095842 58.7308) (xy 226.938158 58.7308) + (xy 226.938155 58.7308) (xy 226.78351 58.761561) (xy 226.783498 58.761564) (xy 226.637827 58.821902) + (xy 226.637814 58.821909) (xy 226.506711 58.90951) (xy 226.506707 58.909513) (xy 226.395213 59.021007) + (xy 226.39521 59.021011) (xy 226.307609 59.152114) (xy 226.307602 59.152127) (xy 226.247264 59.297798) + (xy 226.247261 59.29781) (xy 226.2165 59.452453) (xy 226.2165 59.610146) (xy 226.247261 59.764789) + (xy 226.247264 59.764801) (xy 226.307602 59.910472) (xy 226.307609 59.910485) (xy 226.39521 60.041588) + (xy 226.395213 60.041592) (xy 226.506707 60.153086) (xy 226.506711 60.153089) (xy 226.637814 60.24069) + (xy 226.637818 60.240692) (xy 226.637821 60.240694) (xy 226.712954 60.271815) (xy 226.767356 60.315654) + (xy 226.789421 60.381948) (xy 226.7895 60.386375) (xy 226.7895 61.652724) (xy 226.769815 61.719763) + (xy 226.717011 61.765518) (xy 226.712953 61.767285) (xy 226.637824 61.798404) (xy 226.637814 61.798409) + (xy 226.506711 61.88601) (xy 226.506707 61.886013) (xy 226.395213 61.997507) (xy 226.39521 61.997511) + (xy 226.307609 62.128614) (xy 226.307602 62.128627) (xy 226.247264 62.274298) (xy 226.247261 62.27431) + (xy 226.2165 62.428953) (xy 226.2165 62.428958) (xy 226.2165 62.586642) (xy 226.21654 62.586841) + (xy 226.22186 62.61359) (xy 226.215631 62.683182) (xy 226.172768 62.738359) (xy 226.1135 62.761069) + (xy 226.109419 62.761507) (xy 225.974571 62.811802) (xy 225.974568 62.811804) (xy 225.900561 62.867206) + (xy 225.835096 62.891623) (xy 225.766823 62.876771) (xy 225.751939 62.867206) (xy 225.677931 62.811804) + (xy 225.677928 62.811802) (xy 225.543083 62.761509) (xy 225.539485 62.761122) (xy 225.536881 62.760043) + (xy 225.535538 62.759726) (xy 225.535589 62.759508) (xy 225.474935 62.734381) (xy 225.43509 62.676986) + (xy 225.431129 62.613642) (xy 225.4365 62.586642) (xy 225.4365 62.428958) (xy 225.4365 62.428955) + (xy 225.436499 62.428953) (xy 225.405778 62.27451) (xy 225.405737 62.274303) (xy 225.405735 62.274298) + (xy 225.345397 62.128627) (xy 225.34539 62.128614) (xy 225.257789 61.997511) (xy 225.253924 61.992801) + (xy 225.25566 61.991376) (xy 225.226982 61.938895) (xy 225.231945 61.869202) (xy 225.255103 61.833167) + (xy 225.253924 61.832199) (xy 225.257784 61.827493) (xy 225.257789 61.827489) (xy 225.345394 61.696379) + (xy 225.405737 61.550697) (xy 225.4365 61.396042) (xy 225.4365 61.238358) (xy 225.4365 61.238355) + (xy 225.436499 61.238353) (xy 225.405738 61.08371) (xy 225.405737 61.083703) (xy 225.405735 61.083698) + (xy 225.345397 60.938027) (xy 225.34539 60.938014) (xy 225.257789 60.806911) (xy 225.257786 60.806907) + (xy 225.146292 60.695413) (xy 225.146288 60.69541) (xy 225.015185 60.607809) (xy 225.015172 60.607802) + (xy 224.869501 60.547464) (xy 224.869489 60.547461) (xy 224.714845 60.5167) (xy 224.714842 60.5167) + (xy 224.557158 60.5167) (xy 224.557155 60.5167) (xy 224.40251 60.547461) (xy 224.402498 60.547464) + (xy 224.256827 60.607802) (xy 224.256814 60.607809) (xy 224.125711 60.69541) (xy 224.125707 60.695413) + (xy 224.014213 60.806907) (xy 224.01421 60.806911) (xy 223.926609 60.938014) (xy 223.926602 60.938027) + (xy 223.866264 61.083698) (xy 223.866261 61.08371) (xy 223.8355 61.238353) (xy 223.8355 61.396046) + (xy 223.866261 61.550689) (xy 223.866264 61.550701) (xy 223.926602 61.696372) (xy 223.926609 61.696385) + (xy 224.01421 61.827488) (xy 224.018076 61.832199) (xy 224.016345 61.833619) (xy 224.045025 61.886142) + (xy 224.040041 61.955834) (xy 224.016902 61.991837) (xy 224.018076 61.992801) (xy 224.01421 61.997511) + (xy 223.926609 62.128614) (xy 223.926602 62.128627) (xy 223.866264 62.274298) (xy 223.866261 62.27431) + (xy 223.8355 62.428953) (xy 223.8355 62.586646) (xy 223.840853 62.613557) (xy 223.834626 62.683148) + (xy 223.791763 62.738326) (xy 223.732498 62.761037) (xy 223.728118 62.761508) (xy 223.593271 62.811802) + (xy 223.593269 62.811804) (xy 223.519311 62.867169) (xy 223.453847 62.891586) (xy 223.385574 62.876735) + (xy 223.370689 62.867169) (xy 223.362297 62.860887) (xy 223.296731 62.811804) (xy 223.296729 62.811803) + (xy 223.296728 62.811802) (xy 223.161882 62.761508) (xy 223.161883 62.761508) (xy 223.102283 62.755101) + (xy 223.102281 62.7551) (xy 223.102273 62.7551) (xy 223.102264 62.7551) (xy 221.406529 62.7551) + (xy 221.406523 62.755101) (xy 221.346916 62.761508) (xy 221.212071 62.811802) (xy 221.212064 62.811806) + (xy 221.096855 62.898052) (xy 221.096852 62.898055) (xy 221.010606 63.013264) (xy 221.010602 63.013271) + (xy 220.960308 63.148117) (xy 220.954502 63.202128) (xy 220.953901 63.207723) (xy 220.9539 63.207735) + (xy 217.601799 63.207735) (xy 217.601799 63.207728) (xy 217.595391 63.148117) (xy 217.593302 63.142517) + (xy 217.545097 63.013271) (xy 217.545093 63.013264) (xy 217.458847 62.898055) (xy 217.458844 62.898052) + (xy 217.343635 62.811806) (xy 217.343628 62.811802) (xy 217.208782 62.761508) (xy 217.208779 62.761507) + (xy 217.204496 62.761047) (xy 217.201399 62.759764) (xy 217.201238 62.759726) (xy 217.201244 62.759699) + (xy 217.139947 62.734305) (xy 217.100104 62.676909) (xy 217.096144 62.613567) (xy 217.1015 62.586642) + (xy 217.1015 62.428958) (xy 217.1015 62.428955) (xy 217.101499 62.428953) (xy 217.070778 62.27451) + (xy 217.070737 62.274303) (xy 217.070735 62.274298) (xy 217.010397 62.128627) (xy 217.01039 62.128614) + (xy 216.922789 61.997511) (xy 216.922786 61.997507) (xy 216.811292 61.886013) (xy 216.811288 61.88601) + (xy 216.680185 61.798409) (xy 216.680175 61.798404) (xy 216.605047 61.767285) (xy 216.550644 61.723444) + (xy 216.528579 61.65715) (xy 216.5285 61.652724) (xy 216.5285 58.600375) (xy 216.548185 58.533336) + (xy 216.600989 58.487581) (xy 216.604999 58.485834) (xy 216.680179 58.454694) (xy 216.811289 58.367089) + (xy 216.922789 58.255589) (xy 217.010394 58.124479) (xy 217.070737 57.978797) (xy 217.1015 57.824142) + (xy 217.1015 57.666458) (xy 217.1015 57.666455) (xy 217.101499 57.666453) (xy 217.070738 57.51181) + (xy 217.070737 57.511803) (xy 217.070735 57.511798) (xy 217.010397 57.366127) (xy 217.01039 57.366114) + (xy 216.922789 57.235011) (xy 216.922786 57.235007) (xy 216.811292 57.123513) (xy 216.811288 57.12351) + (xy 216.680185 57.035909) (xy 216.680172 57.035902) (xy 216.534501 56.975564) (xy 216.534489 56.975561) + (xy 216.379845 56.9448) (xy 216.379842 56.9448) (xy 216.222158 56.9448) (xy 216.222155 56.9448) + (xy 216.06751 56.975561) (xy 216.067498 56.975564) (xy 215.921827 57.035902) (xy 215.921814 57.035909) + (xy 215.790711 57.12351) (xy 215.790707 57.123513) (xy 215.679213 57.235007) (xy 215.67921 57.235011) + (xy 215.591609 57.366114) (xy 215.591602 57.366127) (xy 215.531264 57.511798) (xy 215.531261 57.51181) + (xy 215.5005 57.666453) (xy 215.5005 57.824146) (xy 215.531261 57.978789) (xy 215.531264 57.978801) + (xy 215.591602 58.124472) (xy 215.591609 58.124485) (xy 215.67921 58.255588) (xy 215.679213 58.255592) + (xy 215.790707 58.367086) (xy 215.790711 58.367089) (xy 215.921814 58.45469) (xy 215.921818 58.454692) + (xy 215.921821 58.454694) (xy 215.996954 58.485815) (xy 216.051356 58.529654) (xy 216.073421 58.595948) + (xy 216.0735 58.600375) (xy 216.0735 61.652724) (xy 216.053815 61.719763) (xy 216.001011 61.765518) + (xy 215.996953 61.767285) (xy 215.921824 61.798404) (xy 215.921814 61.798409) (xy 215.790711 61.88601) + (xy 215.790707 61.886013) (xy 215.679213 61.997507) (xy 215.67921 61.997511) (xy 215.591609 62.128614) + (xy 215.591602 62.128627) (xy 215.531264 62.274298) (xy 215.531261 62.27431) (xy 215.5005 62.428953) + (xy 215.5005 62.586643) (xy 215.505868 62.613633) (xy 215.499639 62.683225) (xy 215.456775 62.738401) + (xy 215.401348 62.75964) (xy 215.401368 62.759724) (xy 215.400746 62.75987) (xy 215.39751 62.761111) + (xy 215.393819 62.761507) (xy 215.258971 62.811802) (xy 215.258968 62.811804) (xy 215.184961 62.867206) + (xy 215.119496 62.891623) (xy 215.051223 62.876771) (xy 215.036339 62.867206) (xy 214.962331 62.811804) + (xy 214.962328 62.811802) (xy 214.827484 62.761509) (xy 214.823494 62.76108) (xy 214.820607 62.759884) + (xy 214.819938 62.759726) (xy 214.819963 62.759617) (xy 214.758944 62.734339) (xy 214.719099 62.676945) + (xy 214.715138 62.613598) (xy 214.7205 62.586643) (xy 214.7205 62.428955) (xy 214.720499 62.428953) + (xy 214.689778 62.27451) (xy 214.689737 62.274303) (xy 214.689735 62.274298) (xy 214.629397 62.128627) + (xy 214.62939 62.128614) (xy 214.541789 61.997511) (xy 214.541786 61.997507) (xy 214.430292 61.886013) + (xy 214.430288 61.88601) (xy 214.299185 61.798409) (xy 214.299175 61.798404) (xy 214.224047 61.767285) + (xy 214.169644 61.723444) (xy 214.147579 61.65715) (xy 214.1475 61.652724) (xy 214.1475 60.386375) + (xy 214.167185 60.319336) (xy 214.219989 60.273581) (xy 214.223999 60.271834) (xy 214.299179 60.240694) + (xy 214.430289 60.153089) (xy 214.541789 60.041589) (xy 214.629394 59.910479) (xy 214.689737 59.764797) + (xy 214.7205 59.610142) (xy 214.7205 59.452458) (xy 214.7205 59.452455) (xy 214.720499 59.452453) + (xy 214.704238 59.370704) (xy 214.689737 59.297803) (xy 214.672906 59.257169) (xy 214.629397 59.152127) + (xy 214.62939 59.152114) (xy 214.541789 59.021011) (xy 214.541786 59.021007) (xy 214.430292 58.909513) + (xy 214.430288 58.90951) (xy 214.299185 58.821909) (xy 214.299172 58.821902) (xy 214.153501 58.761564) + (xy 214.153489 58.761561) (xy 213.998845 58.7308) (xy 213.998842 58.7308) (xy 213.841158 58.7308) + (xy 213.841155 58.7308) (xy 213.68651 58.761561) (xy 213.686498 58.761564) (xy 213.540827 58.821902) + (xy 213.540814 58.821909) (xy 213.409711 58.90951) (xy 213.409707 58.909513) (xy 213.298213 59.021007) + (xy 213.29821 59.021011) (xy 213.210609 59.152114) (xy 213.210602 59.152127) (xy 213.150264 59.297798) + (xy 213.150261 59.29781) (xy 213.1195 59.452453) (xy 213.1195 59.610146) (xy 213.150261 59.764789) + (xy 213.150264 59.764801) (xy 213.210602 59.910472) (xy 213.210609 59.910485) (xy 213.29821 60.041588) + (xy 213.298213 60.041592) (xy 213.409707 60.153086) (xy 213.409711 60.153089) (xy 213.540814 60.24069) + (xy 213.540818 60.240692) (xy 213.540821 60.240694) (xy 213.615954 60.271815) (xy 213.670356 60.315654) + (xy 213.692421 60.381948) (xy 213.6925 60.386375) (xy 213.6925 61.652724) (xy 213.672815 61.719763) + (xy 213.620011 61.765518) (xy 213.615953 61.767285) (xy 213.540824 61.798404) (xy 213.540814 61.798409) + (xy 213.409711 61.88601) (xy 213.409707 61.886013) (xy 213.298213 61.997507) (xy 213.29821 61.997511) + (xy 213.210609 62.128614) (xy 213.210602 62.128627) (xy 213.150264 62.274298) (xy 213.150261 62.27431) + (xy 213.1195 62.428953) (xy 213.1195 62.428958) (xy 213.1195 62.586642) (xy 213.11954 62.586841) + (xy 213.124862 62.6136) (xy 213.118633 62.683192) (xy 213.07577 62.738368) (xy 213.020065 62.759715) + (xy 213.020068 62.759724) (xy 213.020004 62.759738) (xy 213.016508 62.761079) (xy 213.012518 62.761508) + (xy 212.877671 62.811802) (xy 212.877669 62.811804) (xy 212.803711 62.867169) (xy 212.738247 62.891586) + (xy 212.669974 62.876735) (xy 212.655089 62.867169) (xy 212.646697 62.860887) (xy 212.581131 62.811804) + (xy 212.581129 62.811803) (xy 212.581128 62.811802) (xy 212.446284 62.761509) (xy 212.442489 62.761101) + (xy 212.439743 62.759963) (xy 212.438738 62.759726) (xy 212.438776 62.759562) (xy 212.37794 62.734359) + (xy 212.338094 62.676965) (xy 212.334134 62.61362) (xy 212.3395 62.586644) (xy 212.3395 62.428955) + (xy 212.339499 62.428953) (xy 212.308778 62.27451) (xy 212.308737 62.274303) (xy 212.308735 62.274298) + (xy 212.248397 62.128627) (xy 212.24839 62.128614) (xy 212.160789 61.997511) (xy 212.156924 61.992801) + (xy 212.15866 61.991376) (xy 212.129982 61.938895) (xy 212.134945 61.869202) (xy 212.158103 61.833167) + (xy 212.156924 61.832199) (xy 212.160784 61.827493) (xy 212.160789 61.827489) (xy 212.248394 61.696379) + (xy 212.308737 61.550697) (xy 212.3395 61.396042) (xy 212.3395 61.238358) (xy 212.3395 61.238355) + (xy 212.339499 61.238353) (xy 212.308738 61.08371) (xy 212.308737 61.083703) (xy 212.308735 61.083698) + (xy 212.248397 60.938027) (xy 212.24839 60.938014) (xy 212.160789 60.806911) (xy 212.160786 60.806907) + (xy 212.049292 60.695413) (xy 212.049288 60.69541) (xy 211.918185 60.607809) (xy 211.918172 60.607802) + (xy 211.772501 60.547464) (xy 211.772489 60.547461) (xy 211.617845 60.5167) (xy 211.617842 60.5167) + (xy 211.460158 60.5167) (xy 211.460155 60.5167) (xy 211.30551 60.547461) (xy 211.305498 60.547464) + (xy 211.159827 60.607802) (xy 211.159814 60.607809) (xy 211.028711 60.69541) (xy 211.028707 60.695413) + (xy 210.917213 60.806907) (xy 210.91721 60.806911) (xy 210.829609 60.938014) (xy 210.829602 60.938027) + (xy 210.769264 61.083698) (xy 210.769261 61.08371) (xy 210.7385 61.238353) (xy 210.7385 61.396046) + (xy 210.769261 61.550689) (xy 210.769264 61.550701) (xy 210.829602 61.696372) (xy 210.829609 61.696385) + (xy 210.91721 61.827488) (xy 210.921076 61.832199) (xy 210.919345 61.833619) (xy 210.948025 61.886142) + (xy 210.943041 61.955834) (xy 210.919902 61.991837) (xy 210.921076 61.992801) (xy 210.91721 61.997511) + (xy 210.829609 62.128614) (xy 210.829602 62.128627) (xy 210.769264 62.274298) (xy 210.769261 62.27431) + (xy 210.7385 62.428953) (xy 210.7385 62.428958) (xy 210.7385 62.586642) (xy 210.73854 62.586841) + (xy 210.743858 62.613579) (xy 210.73763 62.68317) (xy 210.694766 62.738347) (xy 210.635503 62.761058) + (xy 210.631318 62.761508) (xy 210.496471 62.811802) (xy 210.496468 62.811804) (xy 210.422461 62.867206) + (xy 210.356996 62.891623) (xy 210.288723 62.876771) (xy 210.273839 62.867206) (xy 210.199831 62.811804) + (xy 210.199828 62.811802) (xy 210.064982 62.761508) (xy 210.064983 62.761508) (xy 210.005383 62.755101) + (xy 210.005381 62.7551) (xy 210.005373 62.7551) (xy 210.005364 62.7551) (xy 208.309629 62.7551) + (xy 208.309623 62.755101) (xy 208.250016 62.761508) (xy 208.115171 62.811802) (xy 208.115164 62.811806) + (xy 207.999955 62.898052) (xy 207.999952 62.898055) (xy 207.913706 63.013264) (xy 207.913702 63.013271) + (xy 207.863408 63.148117) (xy 207.857602 63.202128) (xy 207.857001 63.207723) (xy 207.857 63.207735) + (xy 204.504899 63.207735) (xy 204.504899 63.207728) (xy 204.498491 63.148117) (xy 204.496402 63.142517) + (xy 204.448197 63.013271) (xy 204.448193 63.013264) (xy 204.361947 62.898055) (xy 204.361944 62.898052) + (xy 204.246735 62.811806) (xy 204.246728 62.811802) (xy 204.111882 62.761508) (xy 204.111883 62.761508) + (xy 204.052283 62.755101) (xy 204.052281 62.7551) (xy 204.052273 62.7551) (xy 204.052264 62.7551) + (xy 202.356529 62.7551) (xy 202.356523 62.755101) (xy 202.296916 62.761508) (xy 202.162071 62.811802) + (xy 202.162068 62.811804) (xy 202.088061 62.867206) (xy 202.022596 62.891623) (xy 201.954323 62.876771) + (xy 201.939439 62.867206) (xy 201.865431 62.811804) (xy 201.865428 62.811802) (xy 201.730586 62.76151) + (xy 201.730585 62.761509) (xy 201.730583 62.761509) (xy 201.726499 62.761069) (xy 201.723543 62.759845) + (xy 201.723038 62.759726) (xy 201.723057 62.759644) (xy 201.661951 62.734332) (xy 201.622103 62.67694) + (xy 201.61814 62.613588) (xy 201.6235 62.586643) (xy 201.6235 62.428955) (xy 201.623499 62.428953) + (xy 201.592778 62.27451) (xy 201.592737 62.274303) (xy 201.592735 62.274298) (xy 201.532397 62.128627) + (xy 201.53239 62.128614) (xy 201.444789 61.997511) (xy 201.444786 61.997507) (xy 201.333292 61.886013) + (xy 201.333288 61.88601) (xy 201.202185 61.798409) (xy 201.202175 61.798404) (xy 201.127047 61.767285) + (xy 201.072644 61.723444) (xy 201.050579 61.65715) (xy 201.0505 61.652724) (xy 201.0505 58.600375) + (xy 201.070185 58.533336) (xy 201.122989 58.487581) (xy 201.126999 58.485834) (xy 201.202179 58.454694) + (xy 201.333289 58.367089) (xy 201.444789 58.255589) (xy 201.532394 58.124479) (xy 201.592737 57.978797) + (xy 201.6235 57.824142) (xy 201.6235 57.666458) (xy 201.6235 57.666455) (xy 201.623499 57.666453) + (xy 201.592738 57.51181) (xy 201.592737 57.511803) (xy 201.592735 57.511798) (xy 201.532397 57.366127) + (xy 201.53239 57.366114) (xy 201.444789 57.235011) (xy 201.444786 57.235007) (xy 201.333292 57.123513) + (xy 201.333288 57.12351) (xy 201.202185 57.035909) (xy 201.202172 57.035902) (xy 201.056501 56.975564) + (xy 201.056489 56.975561) (xy 200.901845 56.9448) (xy 200.901842 56.9448) (xy 200.744158 56.9448) + (xy 200.744155 56.9448) (xy 200.58951 56.975561) (xy 200.589498 56.975564) (xy 200.443827 57.035902) + (xy 200.443814 57.035909) (xy 200.312711 57.12351) (xy 200.312707 57.123513) (xy 200.201213 57.235007) + (xy 200.20121 57.235011) (xy 200.113609 57.366114) (xy 200.113602 57.366127) (xy 200.053264 57.511798) + (xy 200.053261 57.51181) (xy 200.0225 57.666453) (xy 200.0225 57.824146) (xy 200.053261 57.978789) + (xy 200.053264 57.978801) (xy 200.113602 58.124472) (xy 200.113609 58.124485) (xy 200.20121 58.255588) + (xy 200.201213 58.255592) (xy 200.312707 58.367086) (xy 200.312711 58.367089) (xy 200.443814 58.45469) + (xy 200.443818 58.454692) (xy 200.443821 58.454694) (xy 200.518954 58.485815) (xy 200.573356 58.529654) + (xy 200.595421 58.595948) (xy 200.5955 58.600375) (xy 200.5955 61.652724) (xy 200.575815 61.719763) + (xy 200.523011 61.765518) (xy 200.518953 61.767285) (xy 200.443824 61.798404) (xy 200.443814 61.798409) + (xy 200.312711 61.88601) (xy 200.312707 61.886013) (xy 200.201213 61.997507) (xy 200.20121 61.997511) + (xy 200.113609 62.128614) (xy 200.113602 62.128627) (xy 200.053264 62.274298) (xy 200.053261 62.27431) + (xy 200.0225 62.428953) (xy 200.0225 62.586643) (xy 200.027864 62.613612) (xy 200.021635 62.683203) + (xy 199.978771 62.73838) (xy 199.923159 62.759689) (xy 199.923168 62.759724) (xy 199.922911 62.759784) + (xy 199.919505 62.76109) (xy 199.915619 62.761507) (xy 199.780771 62.811802) (xy 199.780769 62.811804) + (xy 199.706811 62.867169) (xy 199.641347 62.891586) (xy 199.573074 62.876735) (xy 199.558189 62.867169) + (xy 199.549797 62.860887) (xy 199.484231 62.811804) (xy 199.484229 62.811803) (xy 199.484228 62.811802) + (xy 199.349382 62.761508) (xy 199.349384 62.761508) (xy 199.345497 62.761091) (xy 199.342684 62.759925) + (xy 199.341838 62.759726) (xy 199.34187 62.759588) (xy 199.280946 62.734353) (xy 199.241098 62.67696) + (xy 199.237136 62.61361) (xy 199.2425 62.586644) (xy 199.2425 62.428955) (xy 199.242499 62.428953) + (xy 199.211778 62.27451) (xy 199.211737 62.274303) (xy 199.211735 62.274298) (xy 199.151397 62.128627) + (xy 199.15139 62.128614) (xy 199.063789 61.997511) (xy 199.063786 61.997507) (xy 198.952292 61.886013) + (xy 198.952288 61.88601) (xy 198.821185 61.798409) (xy 198.821175 61.798404) (xy 198.746047 61.767285) + (xy 198.691644 61.723444) (xy 198.669579 61.65715) (xy 198.6695 61.652724) (xy 198.6695 60.386375) + (xy 198.689185 60.319336) (xy 198.741989 60.273581) (xy 198.745999 60.271834) (xy 198.821179 60.240694) + (xy 198.952289 60.153089) (xy 199.063789 60.041589) (xy 199.151394 59.910479) (xy 199.211737 59.764797) + (xy 199.2425 59.610142) (xy 199.2425 59.452458) (xy 199.2425 59.452455) (xy 199.242499 59.452453) + (xy 199.226238 59.370704) (xy 199.211737 59.297803) (xy 199.194906 59.257169) (xy 199.151397 59.152127) + (xy 199.15139 59.152114) (xy 199.063789 59.021011) (xy 199.063786 59.021007) (xy 198.952292 58.909513) + (xy 198.952288 58.90951) (xy 198.821185 58.821909) (xy 198.821172 58.821902) (xy 198.675501 58.761564) + (xy 198.675489 58.761561) (xy 198.520845 58.7308) (xy 198.520842 58.7308) (xy 198.363158 58.7308) + (xy 198.363155 58.7308) (xy 198.20851 58.761561) (xy 198.208498 58.761564) (xy 198.062827 58.821902) + (xy 198.062814 58.821909) (xy 197.931711 58.90951) (xy 197.931707 58.909513) (xy 197.820213 59.021007) + (xy 197.82021 59.021011) (xy 197.732609 59.152114) (xy 197.732602 59.152127) (xy 197.672264 59.297798) + (xy 197.672261 59.29781) (xy 197.6415 59.452453) (xy 197.6415 59.610146) (xy 197.672261 59.764789) + (xy 197.672264 59.764801) (xy 197.732602 59.910472) (xy 197.732609 59.910485) (xy 197.82021 60.041588) + (xy 197.820213 60.041592) (xy 197.931707 60.153086) (xy 197.931711 60.153089) (xy 198.062814 60.24069) + (xy 198.062818 60.240692) (xy 198.062821 60.240694) (xy 198.137954 60.271815) (xy 198.192356 60.315654) + (xy 198.214421 60.381948) (xy 198.2145 60.386375) (xy 198.2145 61.652724) (xy 198.194815 61.719763) + (xy 198.142011 61.765518) (xy 198.137953 61.767285) (xy 198.062824 61.798404) (xy 198.062814 61.798409) + (xy 197.931711 61.88601) (xy 197.931707 61.886013) (xy 197.820213 61.997507) (xy 197.82021 61.997511) + (xy 197.732609 62.128614) (xy 197.732602 62.128627) (xy 197.672264 62.274298) (xy 197.672261 62.27431) + (xy 197.6415 62.428953) (xy 197.6415 62.428958) (xy 197.6415 62.586642) (xy 197.64154 62.586841) + (xy 197.64686 62.61359) (xy 197.640631 62.683182) (xy 197.597768 62.738359) (xy 197.5385 62.761069) + (xy 197.534419 62.761507) (xy 197.399571 62.811802) (xy 197.399568 62.811804) (xy 197.325561 62.867206) + (xy 197.260096 62.891623) (xy 197.191823 62.876771) (xy 197.176939 62.867206) (xy 197.102931 62.811804) + (xy 197.102928 62.811802) (xy 196.968083 62.761509) (xy 196.964485 62.761122) (xy 196.961881 62.760043) + (xy 196.960538 62.759726) (xy 196.960589 62.759508) (xy 196.899935 62.734381) (xy 196.86009 62.676986) + (xy 196.856129 62.613642) (xy 196.8615 62.586642) (xy 196.8615 62.428958) (xy 196.8615 62.428955) + (xy 196.861499 62.428953) (xy 196.830778 62.27451) (xy 196.830737 62.274303) (xy 196.830735 62.274298) + (xy 196.770397 62.128627) (xy 196.77039 62.128614) (xy 196.682789 61.997511) (xy 196.678924 61.992801) + (xy 196.68066 61.991376) (xy 196.651982 61.938895) (xy 196.656945 61.869202) (xy 196.680103 61.833167) + (xy 196.678924 61.832199) (xy 196.682784 61.827493) (xy 196.682789 61.827489) (xy 196.770394 61.696379) + (xy 196.830737 61.550697) (xy 196.8615 61.396042) (xy 196.8615 61.238358) (xy 196.8615 61.238355) + (xy 196.861499 61.238353) (xy 196.830738 61.08371) (xy 196.830737 61.083703) (xy 196.830735 61.083698) + (xy 196.770397 60.938027) (xy 196.77039 60.938014) (xy 196.682789 60.806911) (xy 196.682786 60.806907) + (xy 196.571292 60.695413) (xy 196.571288 60.69541) (xy 196.440185 60.607809) (xy 196.440172 60.607802) + (xy 196.294501 60.547464) (xy 196.294489 60.547461) (xy 196.139845 60.5167) (xy 196.139842 60.5167) + (xy 195.982158 60.5167) (xy 195.982155 60.5167) (xy 195.82751 60.547461) (xy 195.827498 60.547464) + (xy 195.681827 60.607802) (xy 195.681814 60.607809) (xy 195.550711 60.69541) (xy 195.550707 60.695413) + (xy 195.439213 60.806907) (xy 195.43921 60.806911) (xy 195.351609 60.938014) (xy 195.351602 60.938027) + (xy 195.291264 61.083698) (xy 195.291261 61.08371) (xy 195.2605 61.238353) (xy 195.2605 61.396046) + (xy 195.291261 61.550689) (xy 195.291264 61.550701) (xy 195.351602 61.696372) (xy 195.351609 61.696385) + (xy 195.43921 61.827488) (xy 195.443076 61.832199) (xy 195.441345 61.833619) (xy 195.470025 61.886142) + (xy 195.465041 61.955834) (xy 195.441902 61.991837) (xy 195.443076 61.992801) (xy 195.43921 61.997511) + (xy 195.351609 62.128614) (xy 195.351602 62.128627) (xy 195.291264 62.274298) (xy 195.291261 62.27431) + (xy 195.2605 62.428953) (xy 195.2605 62.586646) (xy 195.265853 62.613557) (xy 195.259626 62.683148) + (xy 195.216763 62.738326) (xy 195.157498 62.761037) (xy 195.153118 62.761508) (xy 195.018271 62.811802) + (xy 195.018269 62.811804) (xy 194.944311 62.867169) (xy 194.878847 62.891586) (xy 194.810574 62.876735) + (xy 194.795689 62.867169) (xy 194.787297 62.860887) (xy 194.721731 62.811804) (xy 194.721729 62.811803) + (xy 194.721728 62.811802) (xy 194.586882 62.761508) (xy 194.586883 62.761508) (xy 194.527283 62.755101) + (xy 194.527281 62.7551) (xy 194.527273 62.7551) (xy 194.527264 62.7551) (xy 192.831529 62.7551) + (xy 192.831523 62.755101) (xy 192.771916 62.761508) (xy 192.637071 62.811802) (xy 192.637064 62.811806) + (xy 192.521855 62.898052) (xy 192.521852 62.898055) (xy 192.435606 63.013264) (xy 192.435602 63.013271) + (xy 192.385308 63.148117) (xy 192.379502 63.202128) (xy 192.378901 63.207723) (xy 192.3789 63.207735) + (xy 189.026799 63.207735) (xy 189.026799 63.207728) (xy 189.020391 63.148117) (xy 189.018302 63.142517) + (xy 188.970097 63.013271) (xy 188.970093 63.013264) (xy 188.883847 62.898055) (xy 188.883844 62.898052) + (xy 188.768635 62.811806) (xy 188.768628 62.811802) (xy 188.633782 62.761508) (xy 188.633779 62.761507) + (xy 188.629496 62.761047) (xy 188.626399 62.759764) (xy 188.626238 62.759726) (xy 188.626244 62.759699) + (xy 188.564947 62.734305) (xy 188.525104 62.676909) (xy 188.521144 62.613567) (xy 188.5265 62.586642) + (xy 188.5265 62.428958) (xy 188.5265 62.428955) (xy 188.526499 62.428953) (xy 188.495778 62.27451) + (xy 188.495737 62.274303) (xy 188.495735 62.274298) (xy 188.435397 62.128627) (xy 188.43539 62.128614) + (xy 188.347789 61.997511) (xy 188.347786 61.997507) (xy 188.236292 61.886013) (xy 188.236288 61.88601) + (xy 188.105185 61.798409) (xy 188.105175 61.798404) (xy 188.030047 61.767285) (xy 187.975644 61.723444) + (xy 187.953579 61.65715) (xy 187.9535 61.652724) (xy 187.9535 58.600375) (xy 187.973185 58.533336) + (xy 188.025989 58.487581) (xy 188.029999 58.485834) (xy 188.105179 58.454694) (xy 188.236289 58.367089) + (xy 188.347789 58.255589) (xy 188.435394 58.124479) (xy 188.495737 57.978797) (xy 188.5265 57.824142) + (xy 188.5265 57.666458) (xy 188.5265 57.666455) (xy 188.526499 57.666453) (xy 188.495738 57.51181) + (xy 188.495737 57.511803) (xy 188.495735 57.511798) (xy 188.435397 57.366127) (xy 188.43539 57.366114) + (xy 188.347789 57.235011) (xy 188.347786 57.235007) (xy 188.236292 57.123513) (xy 188.236288 57.12351) + (xy 188.105185 57.035909) (xy 188.105172 57.035902) (xy 187.959501 56.975564) (xy 187.959489 56.975561) + (xy 187.804845 56.9448) (xy 187.804842 56.9448) (xy 187.647158 56.9448) (xy 187.647155 56.9448) + (xy 187.49251 56.975561) (xy 187.492498 56.975564) (xy 187.346827 57.035902) (xy 187.346814 57.035909) + (xy 187.215711 57.12351) (xy 187.215707 57.123513) (xy 187.104213 57.235007) (xy 187.10421 57.235011) + (xy 187.016609 57.366114) (xy 187.016602 57.366127) (xy 186.956264 57.511798) (xy 186.956261 57.51181) + (xy 186.9255 57.666453) (xy 186.9255 57.824146) (xy 186.956261 57.978789) (xy 186.956264 57.978801) + (xy 187.016602 58.124472) (xy 187.016609 58.124485) (xy 187.10421 58.255588) (xy 187.104213 58.255592) + (xy 187.215707 58.367086) (xy 187.215711 58.367089) (xy 187.346814 58.45469) (xy 187.346818 58.454692) + (xy 187.346821 58.454694) (xy 187.421954 58.485815) (xy 187.476356 58.529654) (xy 187.498421 58.595948) + (xy 187.4985 58.600375) (xy 187.4985 61.652724) (xy 187.478815 61.719763) (xy 187.426011 61.765518) + (xy 187.421953 61.767285) (xy 187.346824 61.798404) (xy 187.346814 61.798409) (xy 187.215711 61.88601) + (xy 187.215707 61.886013) (xy 187.104213 61.997507) (xy 187.10421 61.997511) (xy 187.016609 62.128614) + (xy 187.016602 62.128627) (xy 186.956264 62.274298) (xy 186.956261 62.27431) (xy 186.9255 62.428953) + (xy 186.9255 62.586643) (xy 186.930868 62.613633) (xy 186.924639 62.683225) (xy 186.881775 62.738401) + (xy 186.826348 62.75964) (xy 186.826368 62.759724) (xy 186.825746 62.75987) (xy 186.82251 62.761111) + (xy 186.818819 62.761507) (xy 186.683971 62.811802) (xy 186.683968 62.811804) (xy 186.609961 62.867206) + (xy 186.544496 62.891623) (xy 186.476223 62.876771) (xy 186.461339 62.867206) (xy 186.387331 62.811804) + (xy 186.387328 62.811802) (xy 186.252484 62.761509) (xy 186.248494 62.76108) (xy 186.245607 62.759884) + (xy 186.244938 62.759726) (xy 186.244963 62.759617) (xy 186.183944 62.734339) (xy 186.144099 62.676945) + (xy 186.140138 62.613598) (xy 186.1455 62.586643) (xy 186.1455 62.428955) (xy 186.145499 62.428953) + (xy 186.114778 62.27451) (xy 186.114737 62.274303) (xy 186.114735 62.274298) (xy 186.054397 62.128627) + (xy 186.05439 62.128614) (xy 185.966789 61.997511) (xy 185.966786 61.997507) (xy 185.855292 61.886013) + (xy 185.855288 61.88601) (xy 185.724185 61.798409) (xy 185.724175 61.798404) (xy 185.649047 61.767285) + (xy 185.594644 61.723444) (xy 185.572579 61.65715) (xy 185.5725 61.652724) (xy 185.5725 60.386375) + (xy 185.592185 60.319336) (xy 185.644989 60.273581) (xy 185.648999 60.271834) (xy 185.724179 60.240694) + (xy 185.855289 60.153089) (xy 185.966789 60.041589) (xy 186.054394 59.910479) (xy 186.114737 59.764797) + (xy 186.1455 59.610142) (xy 186.1455 59.452458) (xy 186.1455 59.452455) (xy 186.145499 59.452453) + (xy 186.129238 59.370704) (xy 186.114737 59.297803) (xy 186.097906 59.257169) (xy 186.054397 59.152127) + (xy 186.05439 59.152114) (xy 185.966789 59.021011) (xy 185.966786 59.021007) (xy 185.855292 58.909513) + (xy 185.855288 58.90951) (xy 185.724185 58.821909) (xy 185.724172 58.821902) (xy 185.578501 58.761564) + (xy 185.578489 58.761561) (xy 185.423845 58.7308) (xy 185.423842 58.7308) (xy 185.266158 58.7308) + (xy 185.266155 58.7308) (xy 185.11151 58.761561) (xy 185.111498 58.761564) (xy 184.965827 58.821902) + (xy 184.965814 58.821909) (xy 184.834711 58.90951) (xy 184.834707 58.909513) (xy 184.723213 59.021007) + (xy 184.72321 59.021011) (xy 184.635609 59.152114) (xy 184.635602 59.152127) (xy 184.575264 59.297798) + (xy 184.575261 59.29781) (xy 184.5445 59.452453) (xy 184.5445 59.610146) (xy 184.575261 59.764789) + (xy 184.575264 59.764801) (xy 184.635602 59.910472) (xy 184.635609 59.910485) (xy 184.72321 60.041588) + (xy 184.723213 60.041592) (xy 184.834707 60.153086) (xy 184.834711 60.153089) (xy 184.965814 60.24069) + (xy 184.965818 60.240692) (xy 184.965821 60.240694) (xy 185.040954 60.271815) (xy 185.095356 60.315654) + (xy 185.117421 60.381948) (xy 185.1175 60.386375) (xy 185.1175 61.652724) (xy 185.097815 61.719763) + (xy 185.045011 61.765518) (xy 185.040953 61.767285) (xy 184.965824 61.798404) (xy 184.965814 61.798409) + (xy 184.834711 61.88601) (xy 184.834707 61.886013) (xy 184.723213 61.997507) (xy 184.72321 61.997511) + (xy 184.635609 62.128614) (xy 184.635602 62.128627) (xy 184.575264 62.274298) (xy 184.575261 62.27431) + (xy 184.5445 62.428953) (xy 184.5445 62.428958) (xy 184.5445 62.586642) (xy 184.54454 62.586841) + (xy 184.549862 62.6136) (xy 184.543633 62.683192) (xy 184.50077 62.738368) (xy 184.445065 62.759715) + (xy 184.445068 62.759724) (xy 184.445004 62.759738) (xy 184.441508 62.761079) (xy 184.437518 62.761508) + (xy 184.302671 62.811802) (xy 184.302668 62.811804) (xy 184.225551 62.869534) (xy 184.160086 62.893951) + (xy 184.091813 62.879099) (xy 184.076929 62.869534) (xy 184.063178 62.85924) (xy 183.992331 62.806204) + (xy 183.992329 62.806203) (xy 183.992328 62.806202) (xy 183.857483 62.755909) (xy 183.852956 62.754839) + (xy 183.792242 62.720263) (xy 183.759858 62.658351) (xy 183.759858 62.609973) (xy 183.7645 62.586642) + (xy 183.7645 62.428958) (xy 183.7645 62.428955) (xy 183.764499 62.428953) (xy 183.733778 62.27451) + (xy 183.733737 62.274303) (xy 183.733735 62.274298) (xy 183.673397 62.128627) (xy 183.67339 62.128614) + (xy 183.585789 61.997511) (xy 183.581924 61.992801) (xy 183.58366 61.991376) (xy 183.554982 61.938895) + (xy 183.559945 61.869202) (xy 183.583103 61.833167) (xy 183.581924 61.832199) (xy 183.585784 61.827493) + (xy 183.585789 61.827489) (xy 183.673394 61.696379) (xy 183.733737 61.550697) (xy 183.7645 61.396042) + (xy 183.7645 61.238358) (xy 183.7645 61.238355) (xy 183.764499 61.238353) (xy 183.733738 61.08371) + (xy 183.733737 61.083703) (xy 183.733735 61.083698) (xy 183.673397 60.938027) (xy 183.67339 60.938014) + (xy 183.585789 60.806911) (xy 183.585786 60.806907) (xy 183.474292 60.695413) (xy 183.474288 60.69541) + (xy 183.343185 60.607809) (xy 183.343172 60.607802) (xy 183.197501 60.547464) (xy 183.197489 60.547461) + (xy 183.042845 60.5167) (xy 183.042842 60.5167) (xy 182.885158 60.5167) (xy 182.885155 60.5167) + (xy 182.73051 60.547461) (xy 182.730498 60.547464) (xy 182.584827 60.607802) (xy 182.584814 60.607809) + (xy 182.453711 60.69541) (xy 182.453707 60.695413) (xy 182.342213 60.806907) (xy 182.34221 60.806911) + (xy 182.254609 60.938014) (xy 182.254602 60.938027) (xy 182.194264 61.083698) (xy 182.194261 61.08371) + (xy 182.1635 61.238353) (xy 182.1635 61.396046) (xy 182.194261 61.550689) (xy 182.194264 61.550701) + (xy 182.254602 61.696372) (xy 182.254609 61.696385) (xy 182.34221 61.827488) (xy 182.346076 61.832199) + (xy 182.344345 61.833619) (xy 182.373025 61.886142) (xy 182.368041 61.955834) (xy 182.344902 61.991837) + (xy 182.346076 61.992801) (xy 182.34221 61.997511) (xy 182.254609 62.128614) (xy 182.254602 62.128627) + (xy 182.194264 62.274298) (xy 182.194261 62.27431) (xy 182.1635 62.428953) (xy 182.1635 62.428958) + (xy 182.1635 62.586642) (xy 182.1635 62.586644) (xy 182.163499 62.586644) (xy 182.167478 62.606646) + (xy 182.161249 62.676238) (xy 182.118384 62.731414) (xy 182.059118 62.754123) (xy 182.042519 62.755907) + (xy 181.907671 62.806202) (xy 181.907669 62.806203) (xy 181.836819 62.859241) (xy 181.771354 62.883657) + (xy 181.703081 62.868805) (xy 181.688199 62.85924) (xy 181.624834 62.811806) (xy 181.624828 62.811802) + (xy 181.489982 62.761508) (xy 181.489983 62.761508) (xy 181.430383 62.755101) (xy 181.430381 62.7551) + (xy 181.430373 62.7551) (xy 181.430364 62.7551) (xy 179.734629 62.7551) (xy 179.734623 62.755101) + (xy 179.675016 62.761508) (xy 179.540171 62.811802) (xy 179.540164 62.811806) (xy 179.424955 62.898052) + (xy 179.424952 62.898055) (xy 179.338706 63.013264) (xy 179.338702 63.013271) (xy 179.288408 63.148117) + (xy 179.282602 63.202128) (xy 179.282001 63.207723) (xy 179.282 63.207735) (xy 175.920499 63.207735) + (xy 175.920499 63.202128) (xy 175.914091 63.142517) (xy 175.865885 63.013271) (xy 175.863797 63.007671) + (xy 175.863793 63.007664) (xy 175.777547 62.892455) (xy 175.777544 62.892452) (xy 175.662335 62.806206) + (xy 175.662328 62.806202) (xy 175.527482 62.755908) (xy 175.519938 62.754126) (xy 175.520617 62.751251) + (xy 175.468844 62.729802) (xy 175.429 62.672407) (xy 175.42504 62.609063) (xy 175.4295 62.586642) + (xy 175.4295 62.428955) (xy 175.429499 62.428953) (xy 175.398778 62.27451) (xy 175.398737 62.274303) + (xy 175.398735 62.274298) (xy 175.338397 62.128627) (xy 175.33839 62.128614) (xy 175.250789 61.997511) + (xy 175.250786 61.997507) (xy 175.139292 61.886013) (xy 175.139288 61.88601) (xy 175.008185 61.798409) + (xy 175.008175 61.798404) (xy 174.933047 61.767285) (xy 174.878644 61.723444) (xy 174.856579 61.65715) + (xy 174.8565 61.652724) (xy 174.8565 58.600375) (xy 174.876185 58.533336) (xy 174.928989 58.487581) + (xy 174.932999 58.485834) (xy 175.008179 58.454694) (xy 175.139289 58.367089) (xy 175.250789 58.255589) + (xy 175.338394 58.124479) (xy 175.398737 57.978797) (xy 175.4295 57.824142) (xy 175.4295 57.666458) + (xy 175.4295 57.666455) (xy 175.429499 57.666453) (xy 175.398738 57.51181) (xy 175.398737 57.511803) + (xy 175.398735 57.511798) (xy 175.338397 57.366127) (xy 175.33839 57.366114) (xy 175.250789 57.235011) + (xy 175.250786 57.235007) (xy 175.139292 57.123513) (xy 175.139288 57.12351) (xy 175.008185 57.035909) + (xy 175.008172 57.035902) (xy 174.862501 56.975564) (xy 174.862489 56.975561) (xy 174.707845 56.9448) + (xy 174.707842 56.9448) (xy 174.550158 56.9448) (xy 174.550155 56.9448) (xy 174.39551 56.975561) + (xy 174.395498 56.975564) (xy 174.249827 57.035902) (xy 174.249814 57.035909) (xy 174.118711 57.12351) + (xy 174.118707 57.123513) (xy 174.007213 57.235007) (xy 174.00721 57.235011) (xy 173.919609 57.366114) + (xy 173.919602 57.366127) (xy 173.859264 57.511798) (xy 173.859261 57.51181) (xy 173.8285 57.666453) + (xy 173.8285 57.824146) (xy 173.859261 57.978789) (xy 173.859264 57.978801) (xy 173.919602 58.124472) + (xy 173.919609 58.124485) (xy 174.00721 58.255588) (xy 174.007213 58.255592) (xy 174.118707 58.367086) + (xy 174.118711 58.367089) (xy 174.249814 58.45469) (xy 174.249818 58.454692) (xy 174.249821 58.454694) + (xy 174.324954 58.485815) (xy 174.379356 58.529654) (xy 174.401421 58.595948) (xy 174.4015 58.600375) + (xy 174.4015 61.652724) (xy 174.381815 61.719763) (xy 174.329011 61.765518) (xy 174.324953 61.767285) + (xy 174.249824 61.798404) (xy 174.249814 61.798409) (xy 174.118711 61.88601) (xy 174.118707 61.886013) + (xy 174.007213 61.997507) (xy 174.00721 61.997511) (xy 173.919609 62.128614) (xy 173.919602 62.128627) + (xy 173.859264 62.274298) (xy 173.859261 62.27431) (xy 173.8285 62.428953) (xy 173.8285 62.428958) + (xy 173.8285 62.586642) (xy 173.82854 62.586841) (xy 173.832583 62.60717) (xy 173.826354 62.676762) + (xy 173.78349 62.731939) (xy 173.724225 62.754649) (xy 173.712519 62.755907) (xy 173.577671 62.806202) + (xy 173.577668 62.806204) (xy 173.50462 62.860888) (xy 173.439155 62.885305) (xy 173.370882 62.870453) + (xy 173.355998 62.860887) (xy 173.290435 62.811806) (xy 173.290428 62.811802) (xy 173.155586 62.76151) + (xy 173.155585 62.761509) (xy 173.155583 62.761509) (xy 173.151499 62.761069) (xy 173.148543 62.759845) + (xy 173.148038 62.759726) (xy 173.148057 62.759644) (xy 173.086951 62.734332) (xy 173.047103 62.67694) + (xy 173.04314 62.613588) (xy 173.0485 62.586643) (xy 173.0485 62.428955) (xy 173.048499 62.428953) + (xy 173.017778 62.27451) (xy 173.017737 62.274303) (xy 173.017735 62.274298) (xy 172.957397 62.128627) + (xy 172.95739 62.128614) (xy 172.869789 61.997511) (xy 172.869786 61.997507) (xy 172.758292 61.886013) + (xy 172.758288 61.88601) (xy 172.627185 61.798409) (xy 172.627175 61.798404) (xy 172.552047 61.767285) + (xy 172.497644 61.723444) (xy 172.475579 61.65715) (xy 172.4755 61.652724) (xy 172.4755 60.386375) + (xy 172.495185 60.319336) (xy 172.547989 60.273581) (xy 172.551999 60.271834) (xy 172.627179 60.240694) + (xy 172.758289 60.153089) (xy 172.869789 60.041589) (xy 172.957394 59.910479) (xy 173.017737 59.764797) + (xy 173.0485 59.610142) (xy 173.0485 59.452458) (xy 173.0485 59.452455) (xy 173.048499 59.452453) + (xy 173.032238 59.370704) (xy 173.017737 59.297803) (xy 173.000906 59.257169) (xy 172.957397 59.152127) + (xy 172.95739 59.152114) (xy 172.869789 59.021011) (xy 172.869786 59.021007) (xy 172.758292 58.909513) + (xy 172.758288 58.90951) (xy 172.627185 58.821909) (xy 172.627172 58.821902) (xy 172.481501 58.761564) + (xy 172.481489 58.761561) (xy 172.326845 58.7308) (xy 172.326842 58.7308) (xy 172.169158 58.7308) + (xy 172.169155 58.7308) (xy 172.01451 58.761561) (xy 172.014498 58.761564) (xy 171.868827 58.821902) + (xy 171.868814 58.821909) (xy 171.737711 58.90951) (xy 171.737707 58.909513) (xy 171.626213 59.021007) + (xy 171.62621 59.021011) (xy 171.538609 59.152114) (xy 171.538602 59.152127) (xy 171.478264 59.297798) + (xy 171.478261 59.29781) (xy 171.4475 59.452453) (xy 171.4475 59.610146) (xy 171.478261 59.764789) + (xy 171.478264 59.764801) (xy 171.538602 59.910472) (xy 171.538609 59.910485) (xy 171.62621 60.041588) + (xy 171.626213 60.041592) (xy 171.737707 60.153086) (xy 171.737711 60.153089) (xy 171.868814 60.24069) + (xy 171.868818 60.240692) (xy 171.868821 60.240694) (xy 171.943954 60.271815) (xy 171.998356 60.315654) + (xy 172.020421 60.381948) (xy 172.0205 60.386375) (xy 172.0205 61.652724) (xy 172.000815 61.719763) + (xy 171.948011 61.765518) (xy 171.943953 61.767285) (xy 171.868824 61.798404) (xy 171.868814 61.798409) + (xy 171.737711 61.88601) (xy 171.737707 61.886013) (xy 171.626213 61.997507) (xy 171.62621 61.997511) + (xy 171.538609 62.128614) (xy 171.538602 62.128627) (xy 171.478264 62.274298) (xy 171.478261 62.27431) + (xy 171.4475 62.428953) (xy 171.4475 62.586643) (xy 171.452864 62.613612) (xy 171.446635 62.683203) + (xy 171.403771 62.73838) (xy 171.348159 62.759689) (xy 171.348168 62.759724) (xy 171.347911 62.759784) + (xy 171.344505 62.76109) (xy 171.340619 62.761507) (xy 171.205771 62.811802) (xy 171.205769 62.811804) + (xy 171.131811 62.867169) (xy 171.066347 62.891586) (xy 170.998074 62.876735) (xy 170.983189 62.867169) + (xy 170.974797 62.860887) (xy 170.909231 62.811804) (xy 170.909229 62.811803) (xy 170.909228 62.811802) + (xy 170.774382 62.761508) (xy 170.774384 62.761508) (xy 170.770497 62.761091) (xy 170.767684 62.759925) + (xy 170.766838 62.759726) (xy 170.76687 62.759588) (xy 170.705946 62.734353) (xy 170.666098 62.67696) + (xy 170.662136 62.61361) (xy 170.6675 62.586644) (xy 170.6675 62.428955) (xy 170.667499 62.428953) + (xy 170.636778 62.27451) (xy 170.636737 62.274303) (xy 170.636735 62.274298) (xy 170.576397 62.128627) + (xy 170.57639 62.128614) (xy 170.488789 61.997511) (xy 170.484924 61.992801) (xy 170.48666 61.991376) + (xy 170.457982 61.938895) (xy 170.462945 61.869202) (xy 170.486103 61.833167) (xy 170.484924 61.832199) + (xy 170.488784 61.827493) (xy 170.488789 61.827489) (xy 170.576394 61.696379) (xy 170.636737 61.550697) + (xy 170.6675 61.396042) (xy 170.6675 61.238358) (xy 170.6675 61.238355) (xy 170.667499 61.238353) + (xy 170.636738 61.08371) (xy 170.636737 61.083703) (xy 170.636735 61.083698) (xy 170.576397 60.938027) + (xy 170.57639 60.938014) (xy 170.488789 60.806911) (xy 170.488786 60.806907) (xy 170.377292 60.695413) + (xy 170.377288 60.69541) (xy 170.246185 60.607809) (xy 170.246172 60.607802) (xy 170.100501 60.547464) + (xy 170.100489 60.547461) (xy 169.945845 60.5167) (xy 169.945842 60.5167) (xy 169.788158 60.5167) + (xy 169.788155 60.5167) (xy 169.63351 60.547461) (xy 169.633498 60.547464) (xy 169.487827 60.607802) + (xy 169.487814 60.607809) (xy 169.356711 60.69541) (xy 169.356707 60.695413) (xy 169.245213 60.806907) + (xy 169.24521 60.806911) (xy 169.157609 60.938014) (xy 169.157602 60.938027) (xy 169.097264 61.083698) + (xy 169.097261 61.08371) (xy 169.0665 61.238353) (xy 169.0665 61.396046) (xy 169.097261 61.550689) + (xy 169.097264 61.550701) (xy 169.157602 61.696372) (xy 169.157609 61.696385) (xy 169.24521 61.827488) + (xy 169.249076 61.832199) (xy 169.247345 61.833619) (xy 169.276025 61.886142) (xy 169.271041 61.955834) + (xy 169.247902 61.991837) (xy 169.249076 61.992801) (xy 169.24521 61.997511) (xy 169.157609 62.128614) + (xy 169.157602 62.128627) (xy 169.097264 62.274298) (xy 169.097261 62.27431) (xy 169.0665 62.428953) + (xy 169.0665 62.428958) (xy 169.0665 62.586642) (xy 169.06654 62.586841) (xy 169.07186 62.61359) + (xy 169.065631 62.683182) (xy 169.022768 62.738359) (xy 168.9635 62.761069) (xy 168.959419 62.761507) + (xy 168.824571 62.811802) (xy 168.824568 62.811804) (xy 168.750561 62.867206) (xy 168.685096 62.891623) + (xy 168.616823 62.876771) (xy 168.601939 62.867206) (xy 168.527931 62.811804) (xy 168.527928 62.811802) + (xy 168.393082 62.761508) (xy 168.393083 62.761508) (xy 168.333483 62.755101) (xy 168.333481 62.7551) + (xy 168.333473 62.7551) (xy 168.333464 62.7551) (xy 166.637729 62.7551) (xy 166.637723 62.755101) + (xy 166.578116 62.761508) (xy 166.443271 62.811802) (xy 166.443264 62.811806) (xy 166.328055 62.898052) + (xy 166.328052 62.898055) (xy 166.241806 63.013264) (xy 166.241802 63.013271) (xy 166.191508 63.148117) + (xy 166.185702 63.202128) (xy 166.185101 63.207723) (xy 166.1851 63.207735) (xy 162.832999 63.207735) + (xy 162.832999 63.207728) (xy 162.826591 63.148117) (xy 162.824502 63.142517) (xy 162.776297 63.013271) + (xy 162.776293 63.013264) (xy 162.690047 62.898055) (xy 162.690044 62.898052) (xy 162.574835 62.811806) + (xy 162.574828 62.811802) (xy 162.439982 62.761508) (xy 162.439983 62.761508) (xy 162.380383 62.755101) + (xy 162.380381 62.7551) (xy 162.380373 62.7551) (xy 162.380364 62.7551) (xy 160.684629 62.7551) + (xy 160.684623 62.755101) (xy 160.625016 62.761508) (xy 160.490171 62.811802) (xy 160.490169 62.811804) + (xy 160.416211 62.867169) (xy 160.350747 62.891586) (xy 160.282474 62.876735) (xy 160.267589 62.867169) + (xy 160.259197 62.860887) (xy 160.193631 62.811804) (xy 160.193629 62.811803) (xy 160.193628 62.811802) + (xy 160.058782 62.761508) (xy 160.058779 62.761507) (xy 160.054496 62.761047) (xy 160.051399 62.759764) + (xy 160.051238 62.759726) (xy 160.051244 62.759699) (xy 159.989947 62.734305) (xy 159.950104 62.676909) + (xy 159.946144 62.613567) (xy 159.9515 62.586642) (xy 159.9515 62.428958) (xy 159.9515 62.428955) + (xy 159.951499 62.428953) (xy 159.920778 62.27451) (xy 159.920737 62.274303) (xy 159.920735 62.274298) + (xy 159.860397 62.128627) (xy 159.86039 62.128614) (xy 159.772789 61.997511) (xy 159.772786 61.997507) + (xy 159.661292 61.886013) (xy 159.661288 61.88601) (xy 159.530185 61.798409) (xy 159.530175 61.798404) + (xy 159.455047 61.767285) (xy 159.400644 61.723444) (xy 159.378579 61.65715) (xy 159.3785 61.652724) + (xy 159.3785 58.600375) (xy 159.398185 58.533336) (xy 159.450989 58.487581) (xy 159.454999 58.485834) + (xy 159.530179 58.454694) (xy 159.661289 58.367089) (xy 159.772789 58.255589) (xy 159.860394 58.124479) + (xy 159.920737 57.978797) (xy 159.9515 57.824142) (xy 159.9515 57.666458) (xy 159.9515 57.666455) + (xy 159.951499 57.666453) (xy 159.920738 57.51181) (xy 159.920737 57.511803) (xy 159.920735 57.511798) + (xy 159.860397 57.366127) (xy 159.86039 57.366114) (xy 159.772789 57.235011) (xy 159.772786 57.235007) + (xy 159.661292 57.123513) (xy 159.661288 57.12351) (xy 159.530185 57.035909) (xy 159.530172 57.035902) + (xy 159.384501 56.975564) (xy 159.384489 56.975561) (xy 159.229845 56.9448) (xy 159.229842 56.9448) + (xy 159.072158 56.9448) (xy 159.072155 56.9448) (xy 158.91751 56.975561) (xy 158.917498 56.975564) + (xy 158.771827 57.035902) (xy 158.771814 57.035909) (xy 158.640711 57.12351) (xy 158.640707 57.123513) + (xy 158.529213 57.235007) (xy 158.52921 57.235011) (xy 158.441609 57.366114) (xy 158.441602 57.366127) + (xy 158.381264 57.511798) (xy 158.381261 57.51181) (xy 158.3505 57.666453) (xy 158.3505 57.824146) + (xy 158.381261 57.978789) (xy 158.381264 57.978801) (xy 158.441602 58.124472) (xy 158.441609 58.124485) + (xy 158.52921 58.255588) (xy 158.529213 58.255592) (xy 158.640707 58.367086) (xy 158.640711 58.367089) + (xy 158.771814 58.45469) (xy 158.771818 58.454692) (xy 158.771821 58.454694) (xy 158.846954 58.485815) + (xy 158.901356 58.529654) (xy 158.923421 58.595948) (xy 158.9235 58.600375) (xy 158.9235 61.652724) + (xy 158.903815 61.719763) (xy 158.851011 61.765518) (xy 158.846953 61.767285) (xy 158.771824 61.798404) + (xy 158.771814 61.798409) (xy 158.640711 61.88601) (xy 158.640707 61.886013) (xy 158.529213 61.997507) + (xy 158.52921 61.997511) (xy 158.441609 62.128614) (xy 158.441602 62.128627) (xy 158.381264 62.274298) + (xy 158.381261 62.27431) (xy 158.3505 62.428953) (xy 158.3505 62.586643) (xy 158.355868 62.613633) + (xy 158.349639 62.683225) (xy 158.306775 62.738401) (xy 158.251348 62.75964) (xy 158.251368 62.759724) + (xy 158.250746 62.75987) (xy 158.24751 62.761111) (xy 158.243819 62.761507) (xy 158.108971 62.811802) + (xy 158.108968 62.811804) (xy 158.034961 62.867206) (xy 157.969496 62.891623) (xy 157.901223 62.876771) + (xy 157.886339 62.867206) (xy 157.812331 62.811804) (xy 157.812328 62.811802) (xy 157.677484 62.761509) + (xy 157.673494 62.76108) (xy 157.670607 62.759884) (xy 157.669938 62.759726) (xy 157.669963 62.759617) + (xy 157.608944 62.734339) (xy 157.569099 62.676945) (xy 157.565138 62.613598) (xy 157.5705 62.586643) + (xy 157.5705 62.428955) (xy 157.570499 62.428953) (xy 157.539778 62.27451) (xy 157.539737 62.274303) + (xy 157.539735 62.274298) (xy 157.479397 62.128627) (xy 157.47939 62.128614) (xy 157.391789 61.997511) + (xy 157.391786 61.997507) (xy 157.280292 61.886013) (xy 157.280288 61.88601) (xy 157.149185 61.798409) + (xy 157.149175 61.798404) (xy 157.074047 61.767285) (xy 157.019644 61.723444) (xy 156.997579 61.65715) + (xy 156.9975 61.652724) (xy 156.9975 60.386375) (xy 157.017185 60.319336) (xy 157.069989 60.273581) + (xy 157.073999 60.271834) (xy 157.149179 60.240694) (xy 157.280289 60.153089) (xy 157.391789 60.041589) + (xy 157.479394 59.910479) (xy 157.539737 59.764797) (xy 157.5705 59.610142) (xy 157.5705 59.452458) + (xy 157.5705 59.452455) (xy 157.570499 59.452453) (xy 157.554238 59.370704) (xy 157.539737 59.297803) + (xy 157.522906 59.257169) (xy 157.479397 59.152127) (xy 157.47939 59.152114) (xy 157.391789 59.021011) + (xy 157.391786 59.021007) (xy 157.280292 58.909513) (xy 157.280288 58.90951) (xy 157.149185 58.821909) + (xy 157.149172 58.821902) (xy 157.003501 58.761564) (xy 157.003489 58.761561) (xy 156.848845 58.7308) + (xy 156.848842 58.7308) (xy 156.691158 58.7308) (xy 156.691155 58.7308) (xy 156.53651 58.761561) + (xy 156.536498 58.761564) (xy 156.390827 58.821902) (xy 156.390814 58.821909) (xy 156.259711 58.90951) + (xy 156.259707 58.909513) (xy 156.148213 59.021007) (xy 156.14821 59.021011) (xy 156.060609 59.152114) + (xy 156.060602 59.152127) (xy 156.000264 59.297798) (xy 156.000261 59.29781) (xy 155.9695 59.452453) + (xy 155.9695 59.610146) (xy 156.000261 59.764789) (xy 156.000264 59.764801) (xy 156.060602 59.910472) + (xy 156.060609 59.910485) (xy 156.14821 60.041588) (xy 156.148213 60.041592) (xy 156.259707 60.153086) + (xy 156.259711 60.153089) (xy 156.390814 60.24069) (xy 156.390818 60.240692) (xy 156.390821 60.240694) + (xy 156.465954 60.271815) (xy 156.520356 60.315654) (xy 156.542421 60.381948) (xy 156.5425 60.386375) + (xy 156.5425 61.652724) (xy 156.522815 61.719763) (xy 156.470011 61.765518) (xy 156.465953 61.767285) + (xy 156.390824 61.798404) (xy 156.390814 61.798409) (xy 156.259711 61.88601) (xy 156.259707 61.886013) + (xy 156.148213 61.997507) (xy 156.14821 61.997511) (xy 156.060609 62.128614) (xy 156.060602 62.128627) + (xy 156.000264 62.274298) (xy 156.000261 62.27431) (xy 155.9695 62.428953) (xy 155.9695 62.428958) + (xy 155.9695 62.586642) (xy 155.96954 62.586841) (xy 155.974862 62.6136) (xy 155.968633 62.683192) + (xy 155.92577 62.738368) (xy 155.870065 62.759715) (xy 155.870068 62.759724) (xy 155.870004 62.759738) + (xy 155.866508 62.761079) (xy 155.862518 62.761508) (xy 155.727671 62.811802) (xy 155.727669 62.811804) + (xy 155.653711 62.867169) (xy 155.588247 62.891586) (xy 155.519974 62.876735) (xy 155.505089 62.867169) + (xy 155.496697 62.860887) (xy 155.431131 62.811804) (xy 155.431129 62.811803) (xy 155.431128 62.811802) + (xy 155.296284 62.761509) (xy 155.292489 62.761101) (xy 155.289743 62.759963) (xy 155.288738 62.759726) + (xy 155.288776 62.759562) (xy 155.22794 62.734359) (xy 155.188094 62.676965) (xy 155.184134 62.61362) + (xy 155.1895 62.586644) (xy 155.1895 62.428955) (xy 155.189499 62.428953) (xy 155.158778 62.27451) + (xy 155.158737 62.274303) (xy 155.158735 62.274298) (xy 155.098397 62.128627) (xy 155.09839 62.128614) + (xy 155.010789 61.997511) (xy 155.006924 61.992801) (xy 155.00866 61.991376) (xy 154.979982 61.938895) + (xy 154.984945 61.869202) (xy 155.008103 61.833167) (xy 155.006924 61.832199) (xy 155.010784 61.827493) + (xy 155.010789 61.827489) (xy 155.098394 61.696379) (xy 155.158737 61.550697) (xy 155.1895 61.396042) + (xy 155.1895 61.238358) (xy 155.1895 61.238355) (xy 155.189499 61.238353) (xy 155.158738 61.08371) + (xy 155.158737 61.083703) (xy 155.158735 61.083698) (xy 155.098397 60.938027) (xy 155.09839 60.938014) + (xy 155.010789 60.806911) (xy 155.010786 60.806907) (xy 154.899292 60.695413) (xy 154.899288 60.69541) + (xy 154.768185 60.607809) (xy 154.768172 60.607802) (xy 154.622501 60.547464) (xy 154.622489 60.547461) + (xy 154.467845 60.5167) (xy 154.467842 60.5167) (xy 154.310158 60.5167) (xy 154.310155 60.5167) + (xy 154.15551 60.547461) (xy 154.155498 60.547464) (xy 154.009827 60.607802) (xy 154.009814 60.607809) + (xy 153.878711 60.69541) (xy 153.878707 60.695413) (xy 153.767213 60.806907) (xy 153.76721 60.806911) + (xy 153.679609 60.938014) (xy 153.679602 60.938027) (xy 153.619264 61.083698) (xy 153.619261 61.08371) + (xy 153.5885 61.238353) (xy 153.5885 61.396046) (xy 153.619261 61.550689) (xy 153.619264 61.550701) + (xy 153.679602 61.696372) (xy 153.679609 61.696385) (xy 153.76721 61.827488) (xy 153.771076 61.832199) + (xy 153.769345 61.833619) (xy 153.798025 61.886142) (xy 153.793041 61.955834) (xy 153.769902 61.991837) + (xy 153.771076 61.992801) (xy 153.76721 61.997511) (xy 153.679609 62.128614) (xy 153.679602 62.128627) + (xy 153.619264 62.274298) (xy 153.619261 62.27431) (xy 153.5885 62.428953) (xy 153.5885 62.428958) + (xy 153.5885 62.586642) (xy 153.58854 62.586841) (xy 153.593858 62.613579) (xy 153.58763 62.68317) + (xy 153.544766 62.738347) (xy 153.485503 62.761058) (xy 153.481318 62.761508) (xy 153.346471 62.811802) + (xy 153.346468 62.811804) (xy 153.272461 62.867206) (xy 153.206996 62.891623) (xy 153.138723 62.876771) + (xy 153.123839 62.867206) (xy 153.049831 62.811804) (xy 153.049828 62.811802) (xy 152.914982 62.761508) + (xy 152.914983 62.761508) (xy 152.855383 62.755101) (xy 152.855381 62.7551) (xy 152.855373 62.7551) + (xy 152.855364 62.7551) (xy 151.159629 62.7551) (xy 151.159623 62.755101) (xy 151.100016 62.761508) + (xy 150.965171 62.811802) (xy 150.965164 62.811806) (xy 150.849955 62.898052) (xy 150.849952 62.898055) + (xy 150.763706 63.013264) (xy 150.763702 63.013271) (xy 150.713408 63.148117) (xy 150.707602 63.202128) + (xy 150.707001 63.207723) (xy 150.707 63.207735) (xy 147.354899 63.207735) (xy 147.354899 63.207728) + (xy 147.348491 63.148117) (xy 147.346402 63.142517) (xy 147.298197 63.013271) (xy 147.298193 63.013264) + (xy 147.211947 62.898055) (xy 147.211944 62.898052) (xy 147.096735 62.811806) (xy 147.096728 62.811802) + (xy 146.961882 62.761508) (xy 146.961883 62.761508) (xy 146.902283 62.755101) (xy 146.902281 62.7551) + (xy 146.902273 62.7551) (xy 146.902264 62.7551) (xy 145.206529 62.7551) (xy 145.206523 62.755101) + (xy 145.146916 62.761508) (xy 145.012071 62.811802) (xy 145.012068 62.811804) (xy 144.938061 62.867206) + (xy 144.872596 62.891623) (xy 144.804323 62.876771) (xy 144.789439 62.867206) (xy 144.715431 62.811804) + (xy 144.715428 62.811802) (xy 144.580586 62.76151) (xy 144.580585 62.761509) (xy 144.580583 62.761509) + (xy 144.576499 62.761069) (xy 144.573543 62.759845) (xy 144.573038 62.759726) (xy 144.573057 62.759644) + (xy 144.511951 62.734332) (xy 144.472103 62.67694) (xy 144.46814 62.613588) (xy 144.4735 62.586643) + (xy 144.4735 62.428955) (xy 144.473499 62.428953) (xy 144.442778 62.27451) (xy 144.442737 62.274303) + (xy 144.442735 62.274298) (xy 144.382397 62.128627) (xy 144.38239 62.128614) (xy 144.294789 61.997511) + (xy 144.294786 61.997507) (xy 144.183292 61.886013) (xy 144.183288 61.88601) (xy 144.052185 61.798409) + (xy 144.052175 61.798404) (xy 143.977047 61.767285) (xy 143.922644 61.723444) (xy 143.900579 61.65715) + (xy 143.9005 61.652724) (xy 143.9005 58.600375) (xy 143.920185 58.533336) (xy 143.972989 58.487581) + (xy 143.976999 58.485834) (xy 144.052179 58.454694) (xy 144.183289 58.367089) (xy 144.294789 58.255589) + (xy 144.382394 58.124479) (xy 144.442737 57.978797) (xy 144.4735 57.824142) (xy 144.4735 57.666458) + (xy 144.4735 57.666455) (xy 144.473499 57.666453) (xy 144.442738 57.51181) (xy 144.442737 57.511803) + (xy 144.442735 57.511798) (xy 144.382397 57.366127) (xy 144.38239 57.366114) (xy 144.294789 57.235011) + (xy 144.294786 57.235007) (xy 144.183292 57.123513) (xy 144.183288 57.12351) (xy 144.052185 57.035909) + (xy 144.052172 57.035902) (xy 143.906501 56.975564) (xy 143.906489 56.975561) (xy 143.751845 56.9448) + (xy 143.751842 56.9448) (xy 143.594158 56.9448) (xy 143.594155 56.9448) (xy 143.43951 56.975561) + (xy 143.439498 56.975564) (xy 143.293827 57.035902) (xy 143.293814 57.035909) (xy 143.162711 57.12351) + (xy 143.162707 57.123513) (xy 143.051213 57.235007) (xy 143.05121 57.235011) (xy 142.963609 57.366114) + (xy 142.963602 57.366127) (xy 142.903264 57.511798) (xy 142.903261 57.51181) (xy 142.8725 57.666453) + (xy 142.8725 57.824146) (xy 142.903261 57.978789) (xy 142.903264 57.978801) (xy 142.963602 58.124472) + (xy 142.963609 58.124485) (xy 143.05121 58.255588) (xy 143.051213 58.255592) (xy 143.162707 58.367086) + (xy 143.162711 58.367089) (xy 143.293814 58.45469) (xy 143.293818 58.454692) (xy 143.293821 58.454694) + (xy 143.368954 58.485815) (xy 143.423356 58.529654) (xy 143.445421 58.595948) (xy 143.4455 58.600375) + (xy 143.4455 61.652724) (xy 143.425815 61.719763) (xy 143.373011 61.765518) (xy 143.368953 61.767285) + (xy 143.293824 61.798404) (xy 143.293814 61.798409) (xy 143.162711 61.88601) (xy 143.162707 61.886013) + (xy 143.051213 61.997507) (xy 143.05121 61.997511) (xy 142.963609 62.128614) (xy 142.963602 62.128627) + (xy 142.903264 62.274298) (xy 142.903261 62.27431) (xy 142.8725 62.428953) (xy 142.8725 62.586643) + (xy 142.877864 62.613612) (xy 142.871635 62.683203) (xy 142.828771 62.73838) (xy 142.773159 62.759689) + (xy 142.773168 62.759724) (xy 142.772911 62.759784) (xy 142.769505 62.76109) (xy 142.765619 62.761507) + (xy 142.630771 62.811802) (xy 142.630769 62.811804) (xy 142.556811 62.867169) (xy 142.491347 62.891586) + (xy 142.423074 62.876735) (xy 142.408189 62.867169) (xy 142.399797 62.860887) (xy 142.334231 62.811804) + (xy 142.334229 62.811803) (xy 142.334228 62.811802) (xy 142.199382 62.761508) (xy 142.199384 62.761508) + (xy 142.195497 62.761091) (xy 142.192684 62.759925) (xy 142.191838 62.759726) (xy 142.19187 62.759588) + (xy 142.130946 62.734353) (xy 142.091098 62.67696) (xy 142.087136 62.61361) (xy 142.0925 62.586644) + (xy 142.0925 62.428955) (xy 142.092499 62.428953) (xy 142.061778 62.27451) (xy 142.061737 62.274303) + (xy 142.061735 62.274298) (xy 142.001397 62.128627) (xy 142.00139 62.128614) (xy 141.913789 61.997511) + (xy 141.913786 61.997507) (xy 141.802292 61.886013) (xy 141.802288 61.88601) (xy 141.671185 61.798409) + (xy 141.671175 61.798404) (xy 141.596047 61.767285) (xy 141.541644 61.723444) (xy 141.519579 61.65715) + (xy 141.5195 61.652724) (xy 141.5195 60.386375) (xy 141.539185 60.319336) (xy 141.591989 60.273581) + (xy 141.595999 60.271834) (xy 141.671179 60.240694) (xy 141.802289 60.153089) (xy 141.913789 60.041589) + (xy 142.001394 59.910479) (xy 142.061737 59.764797) (xy 142.0925 59.610142) (xy 142.0925 59.452458) + (xy 142.0925 59.452455) (xy 142.092499 59.452453) (xy 142.076238 59.370704) (xy 142.061737 59.297803) + (xy 142.044906 59.257169) (xy 142.001397 59.152127) (xy 142.00139 59.152114) (xy 141.913789 59.021011) + (xy 141.913786 59.021007) (xy 141.802292 58.909513) (xy 141.802288 58.90951) (xy 141.671185 58.821909) + (xy 141.671172 58.821902) (xy 141.525501 58.761564) (xy 141.525489 58.761561) (xy 141.370845 58.7308) + (xy 141.370842 58.7308) (xy 141.213158 58.7308) (xy 141.213155 58.7308) (xy 141.05851 58.761561) + (xy 141.058498 58.761564) (xy 140.912827 58.821902) (xy 140.912814 58.821909) (xy 140.781711 58.90951) + (xy 140.781707 58.909513) (xy 140.670213 59.021007) (xy 140.67021 59.021011) (xy 140.582609 59.152114) + (xy 140.582602 59.152127) (xy 140.522264 59.297798) (xy 140.522261 59.29781) (xy 140.4915 59.452453) + (xy 140.4915 59.610146) (xy 140.522261 59.764789) (xy 140.522264 59.764801) (xy 140.582602 59.910472) + (xy 140.582609 59.910485) (xy 140.67021 60.041588) (xy 140.670213 60.041592) (xy 140.781707 60.153086) + (xy 140.781711 60.153089) (xy 140.912814 60.24069) (xy 140.912818 60.240692) (xy 140.912821 60.240694) + (xy 140.987954 60.271815) (xy 141.042356 60.315654) (xy 141.064421 60.381948) (xy 141.0645 60.386375) + (xy 141.0645 61.652724) (xy 141.044815 61.719763) (xy 140.992011 61.765518) (xy 140.987953 61.767285) + (xy 140.912824 61.798404) (xy 140.912814 61.798409) (xy 140.781711 61.88601) (xy 140.781707 61.886013) + (xy 140.670213 61.997507) (xy 140.67021 61.997511) (xy 140.582609 62.128614) (xy 140.582602 62.128627) + (xy 140.522264 62.274298) (xy 140.522261 62.27431) (xy 140.4915 62.428953) (xy 140.4915 62.428958) + (xy 140.4915 62.586642) (xy 140.49154 62.586841) (xy 140.49686 62.61359) (xy 140.490631 62.683182) + (xy 140.447768 62.738359) (xy 140.3885 62.761069) (xy 140.384419 62.761507) (xy 140.249571 62.811802) + (xy 140.249568 62.811804) (xy 140.175561 62.867206) (xy 140.110096 62.891623) (xy 140.041823 62.876771) + (xy 140.026939 62.867206) (xy 139.952931 62.811804) (xy 139.952928 62.811802) (xy 139.818083 62.761509) + (xy 139.814485 62.761122) (xy 139.811881 62.760043) (xy 139.810538 62.759726) (xy 139.810589 62.759508) + (xy 139.749935 62.734381) (xy 139.71009 62.676986) (xy 139.706129 62.613642) (xy 139.7115 62.586642) + (xy 139.7115 62.428958) (xy 139.7115 62.428955) (xy 139.711499 62.428953) (xy 139.680778 62.27451) + (xy 139.680737 62.274303) (xy 139.680735 62.274298) (xy 139.620397 62.128627) (xy 139.62039 62.128614) + (xy 139.532789 61.997511) (xy 139.528924 61.992801) (xy 139.53066 61.991376) (xy 139.501982 61.938895) + (xy 139.506945 61.869202) (xy 139.530103 61.833167) (xy 139.528924 61.832199) (xy 139.532784 61.827493) + (xy 139.532789 61.827489) (xy 139.620394 61.696379) (xy 139.680737 61.550697) (xy 139.7115 61.396042) + (xy 139.7115 61.238358) (xy 139.7115 61.238355) (xy 139.711499 61.238353) (xy 139.680738 61.08371) + (xy 139.680737 61.083703) (xy 139.680735 61.083698) (xy 139.620397 60.938027) (xy 139.62039 60.938014) + (xy 139.532789 60.806911) (xy 139.532786 60.806907) (xy 139.421292 60.695413) (xy 139.421288 60.69541) + (xy 139.290185 60.607809) (xy 139.290172 60.607802) (xy 139.144501 60.547464) (xy 139.144489 60.547461) + (xy 138.989845 60.5167) (xy 138.989842 60.5167) (xy 138.832158 60.5167) (xy 138.832155 60.5167) + (xy 138.67751 60.547461) (xy 138.677498 60.547464) (xy 138.531827 60.607802) (xy 138.531814 60.607809) + (xy 138.400711 60.69541) (xy 138.400707 60.695413) (xy 138.289213 60.806907) (xy 138.28921 60.806911) + (xy 138.201609 60.938014) (xy 138.201602 60.938027) (xy 138.141264 61.083698) (xy 138.141261 61.08371) + (xy 138.1105 61.238353) (xy 138.1105 61.396046) (xy 138.141261 61.550689) (xy 138.141264 61.550701) + (xy 138.201602 61.696372) (xy 138.201609 61.696385) (xy 138.28921 61.827488) (xy 138.293076 61.832199) + (xy 138.291345 61.833619) (xy 138.320025 61.886142) (xy 138.315041 61.955834) (xy 138.291902 61.991837) + (xy 138.293076 61.992801) (xy 138.28921 61.997511) (xy 138.201609 62.128614) (xy 138.201602 62.128627) + (xy 138.141264 62.274298) (xy 138.141261 62.27431) (xy 138.1105 62.428953) (xy 138.1105 62.586646) + (xy 138.115853 62.613557) (xy 138.109626 62.683148) (xy 138.066763 62.738326) (xy 138.007498 62.761037) + (xy 138.003118 62.761508) (xy 137.868271 62.811802) (xy 137.868269 62.811804) (xy 137.794311 62.867169) + (xy 137.728847 62.891586) (xy 137.660574 62.876735) (xy 137.645689 62.867169) (xy 137.637297 62.860887) + (xy 137.571731 62.811804) (xy 137.571729 62.811803) (xy 137.571728 62.811802) (xy 137.436882 62.761508) + (xy 137.436883 62.761508) (xy 137.377283 62.755101) (xy 137.377281 62.7551) (xy 137.377273 62.7551) + (xy 137.377264 62.7551) (xy 135.681529 62.7551) (xy 135.681523 62.755101) (xy 135.621916 62.761508) + (xy 135.487071 62.811802) (xy 135.487064 62.811806) (xy 135.371855 62.898052) (xy 135.371852 62.898055) + (xy 135.285606 63.013264) (xy 135.285602 63.013271) (xy 135.235308 63.148117) (xy 135.229502 63.202128) + (xy 135.228901 63.207723) (xy 135.2289 63.207735) (xy 131.876799 63.207735) (xy 131.876799 63.207728) + (xy 131.870391 63.148117) (xy 131.868302 63.142517) (xy 131.820097 63.013271) (xy 131.820093 63.013264) + (xy 131.733847 62.898055) (xy 131.733844 62.898052) (xy 131.618635 62.811806) (xy 131.618628 62.811802) + (xy 131.483782 62.761508) (xy 131.483783 62.761508) (xy 131.424183 62.755101) (xy 131.424181 62.7551) + (xy 131.424173 62.7551) (xy 131.424164 62.7551) (xy 129.728429 62.7551) (xy 129.728423 62.755101) + (xy 129.668816 62.761508) (xy 129.533971 62.811802) (xy 129.533968 62.811804) (xy 129.459961 62.867206) + (xy 129.394496 62.891623) (xy 129.326223 62.876771) (xy 129.311339 62.867206) (xy 129.237331 62.811804) + (xy 129.237328 62.811802) (xy 129.102484 62.761509) (xy 129.098494 62.76108) (xy 129.095607 62.759884) + (xy 129.094938 62.759726) (xy 129.094963 62.759617) (xy 129.033944 62.734339) (xy 128.994099 62.676945) + (xy 128.990138 62.613598) (xy 128.9955 62.586643) (xy 128.9955 62.428955) (xy 128.995499 62.428953) + (xy 128.964778 62.27451) (xy 128.964737 62.274303) (xy 128.964735 62.274298) (xy 128.904397 62.128627) + (xy 128.90439 62.128614) (xy 128.816789 61.997511) (xy 128.816786 61.997507) (xy 128.705292 61.886013) + (xy 128.705288 61.88601) (xy 128.574185 61.798409) (xy 128.574175 61.798404) (xy 128.499047 61.767285) + (xy 128.444644 61.723444) (xy 128.422579 61.65715) (xy 128.4225 61.652724) (xy 128.4225 58.600375) + (xy 128.442185 58.533336) (xy 128.494989 58.487581) (xy 128.498999 58.485834) (xy 128.574179 58.454694) + (xy 128.705289 58.367089) (xy 128.816789 58.255589) (xy 128.904394 58.124479) (xy 128.964737 57.978797) + (xy 128.9955 57.824142) (xy 128.9955 57.666458) (xy 128.9955 57.666455) (xy 128.995499 57.666453) + (xy 128.964738 57.51181) (xy 128.964737 57.511803) (xy 128.964735 57.511798) (xy 128.904397 57.366127) + (xy 128.90439 57.366114) (xy 128.816789 57.235011) (xy 128.816786 57.235007) (xy 128.705292 57.123513) + (xy 128.705288 57.12351) (xy 128.574185 57.035909) (xy 128.574172 57.035902) (xy 128.428501 56.975564) + (xy 128.428489 56.975561) (xy 128.273845 56.9448) (xy 128.273842 56.9448) (xy 128.116158 56.9448) + (xy 128.116155 56.9448) (xy 127.96151 56.975561) (xy 127.961498 56.975564) (xy 127.815827 57.035902) + (xy 127.815814 57.035909) (xy 127.684711 57.12351) (xy 127.684707 57.123513) (xy 127.573213 57.235007) + (xy 127.57321 57.235011) (xy 127.485609 57.366114) (xy 127.485602 57.366127) (xy 127.425264 57.511798) + (xy 127.425261 57.51181) (xy 127.3945 57.666453) (xy 127.3945 57.824146) (xy 127.425261 57.978789) + (xy 127.425264 57.978801) (xy 127.485602 58.124472) (xy 127.485609 58.124485) (xy 127.57321 58.255588) + (xy 127.573213 58.255592) (xy 127.684707 58.367086) (xy 127.684711 58.367089) (xy 127.815814 58.45469) + (xy 127.815818 58.454692) (xy 127.815821 58.454694) (xy 127.890954 58.485815) (xy 127.945356 58.529654) + (xy 127.967421 58.595948) (xy 127.9675 58.600375) (xy 127.9675 61.652724) (xy 127.947815 61.719763) + (xy 127.895011 61.765518) (xy 127.890953 61.767285) (xy 127.815824 61.798404) (xy 127.815814 61.798409) + (xy 127.684711 61.88601) (xy 127.684707 61.886013) (xy 127.573213 61.997507) (xy 127.57321 61.997511) + (xy 127.485609 62.128614) (xy 127.485602 62.128627) (xy 127.425264 62.274298) (xy 127.425261 62.27431) + (xy 127.3945 62.428953) (xy 127.3945 62.428958) (xy 127.3945 62.586642) (xy 127.39454 62.586841) + (xy 127.399862 62.6136) (xy 127.393633 62.683192) (xy 127.35077 62.738368) (xy 127.295065 62.759715) + (xy 127.295068 62.759724) (xy 127.295004 62.759738) (xy 127.291508 62.761079) (xy 127.287518 62.761508) + (xy 127.152671 62.811802) (xy 127.152669 62.811804) (xy 127.078711 62.867169) (xy 127.013247 62.891586) + (xy 126.944974 62.876735) (xy 126.930089 62.867169) (xy 126.921697 62.860887) (xy 126.856131 62.811804) + (xy 126.856129 62.811803) (xy 126.856128 62.811802) (xy 126.721284 62.761509) (xy 126.717489 62.761101) + (xy 126.714743 62.759963) (xy 126.713738 62.759726) (xy 126.713776 62.759562) (xy 126.65294 62.734359) + (xy 126.613094 62.676965) (xy 126.609134 62.61362) (xy 126.6145 62.586644) (xy 126.6145 62.428955) + (xy 126.614499 62.428953) (xy 126.583778 62.27451) (xy 126.583737 62.274303) (xy 126.583735 62.274298) + (xy 126.523397 62.128627) (xy 126.52339 62.128614) (xy 126.435789 61.997511) (xy 126.435786 61.997507) + (xy 126.324292 61.886013) (xy 126.324288 61.88601) (xy 126.193185 61.798409) (xy 126.193175 61.798404) + (xy 126.118047 61.767285) (xy 126.063644 61.723444) (xy 126.041579 61.65715) (xy 126.0415 61.652724) + (xy 126.0415 60.386375) (xy 126.061185 60.319336) (xy 126.113989 60.273581) (xy 126.117999 60.271834) + (xy 126.193179 60.240694) (xy 126.324289 60.153089) (xy 126.435789 60.041589) (xy 126.523394 59.910479) + (xy 126.583737 59.764797) (xy 126.6145 59.610142) (xy 126.6145 59.452458) (xy 126.6145 59.452455) + (xy 126.614499 59.452453) (xy 126.598238 59.370704) (xy 126.583737 59.297803) (xy 126.566906 59.257169) + (xy 126.523397 59.152127) (xy 126.52339 59.152114) (xy 126.435789 59.021011) (xy 126.435786 59.021007) + (xy 126.324292 58.909513) (xy 126.324288 58.90951) (xy 126.193185 58.821909) (xy 126.193172 58.821902) + (xy 126.047501 58.761564) (xy 126.047489 58.761561) (xy 125.892845 58.7308) (xy 125.892842 58.7308) + (xy 125.735158 58.7308) (xy 125.735155 58.7308) (xy 125.58051 58.761561) (xy 125.580498 58.761564) + (xy 125.434827 58.821902) (xy 125.434814 58.821909) (xy 125.303711 58.90951) (xy 125.303707 58.909513) + (xy 125.192213 59.021007) (xy 125.19221 59.021011) (xy 125.104609 59.152114) (xy 125.104602 59.152127) + (xy 125.044264 59.297798) (xy 125.044261 59.29781) (xy 125.0135 59.452453) (xy 125.0135 59.610146) + (xy 125.044261 59.764789) (xy 125.044264 59.764801) (xy 125.104602 59.910472) (xy 125.104609 59.910485) + (xy 125.19221 60.041588) (xy 125.192213 60.041592) (xy 125.303707 60.153086) (xy 125.303711 60.153089) + (xy 125.434814 60.24069) (xy 125.434818 60.240692) (xy 125.434821 60.240694) (xy 125.509954 60.271815) + (xy 125.564356 60.315654) (xy 125.586421 60.381948) (xy 125.5865 60.386375) (xy 125.5865 61.652724) + (xy 125.566815 61.719763) (xy 125.514011 61.765518) (xy 125.509953 61.767285) (xy 125.434824 61.798404) + (xy 125.434814 61.798409) (xy 125.303711 61.88601) (xy 125.303707 61.886013) (xy 125.192213 61.997507) + (xy 125.19221 61.997511) (xy 125.104609 62.128614) (xy 125.104602 62.128627) (xy 125.044264 62.274298) + (xy 125.044261 62.27431) (xy 125.0135 62.428953) (xy 125.0135 62.428958) (xy 125.0135 62.586642) + (xy 125.01354 62.586841) (xy 125.018858 62.613579) (xy 125.01263 62.68317) (xy 124.969766 62.738347) + (xy 124.910503 62.761058) (xy 124.906318 62.761508) (xy 124.771471 62.811802) (xy 124.771468 62.811804) + (xy 124.697461 62.867206) (xy 124.631996 62.891623) (xy 124.563723 62.876771) (xy 124.548839 62.867206) + (xy 124.474831 62.811804) (xy 124.474828 62.811802) (xy 124.339984 62.761509) (xy 124.335501 62.761027) + (xy 124.270952 62.734284) (xy 124.231108 62.676889) (xy 124.227148 62.613546) (xy 124.2325 62.586642) + (xy 124.2325 62.428958) (xy 124.2325 62.428955) (xy 124.232499 62.428953) (xy 124.201778 62.27451) + (xy 124.201737 62.274303) (xy 124.201735 62.274298) (xy 124.141397 62.128627) (xy 124.14139 62.128614) + (xy 124.053789 61.997511) (xy 124.049924 61.992801) (xy 124.051811 61.991252) (xy 124.023474 61.939357) + (xy 124.028458 61.869665) (xy 124.051987 61.833071) (xy 124.050924 61.832199) (xy 124.054784 61.827493) + (xy 124.054789 61.827489) (xy 124.142394 61.696379) (xy 124.202737 61.550697) (xy 124.2335 61.396042) + (xy 124.2335 61.238358) (xy 124.2335 61.238355) (xy 124.233499 61.238353) (xy 124.202738 61.08371) + (xy 124.202737 61.083703) (xy 124.202735 61.083698) (xy 124.142397 60.938027) (xy 124.14239 60.938014) + (xy 124.054789 60.806911) (xy 124.054786 60.806907) (xy 123.943292 60.695413) (xy 123.943288 60.69541) + (xy 123.812185 60.607809) (xy 123.812172 60.607802) (xy 123.666501 60.547464) (xy 123.666489 60.547461) + (xy 123.511845 60.5167) (xy 123.511842 60.5167) (xy 123.354158 60.5167) (xy 123.354155 60.5167) + (xy 123.19951 60.547461) (xy 123.199498 60.547464) (xy 123.053827 60.607802) (xy 123.053814 60.607809) + (xy 122.922711 60.69541) (xy 122.922707 60.695413) (xy 122.811213 60.806907) (xy 122.81121 60.806911) + (xy 122.723609 60.938014) (xy 122.723602 60.938027) (xy 122.663264 61.083698) (xy 122.663261 61.08371) + (xy 122.6325 61.238353) (xy 122.6325 61.396046) (xy 122.663261 61.550689) (xy 122.663264 61.550701) + (xy 122.723602 61.696372) (xy 122.723609 61.696385) (xy 122.81121 61.827488) (xy 122.815076 61.832199) + (xy 122.813188 61.833747) (xy 122.841525 61.885642) (xy 122.836541 61.955334) (xy 122.813019 61.991933) + (xy 122.814076 61.992801) (xy 122.81021 61.997511) (xy 122.722609 62.128614) (xy 122.722602 62.128627) + (xy 122.662264 62.274298) (xy 122.662261 62.27431) (xy 122.6315 62.428953) (xy 122.6315 62.586646) + (xy 122.636872 62.613652) (xy 122.630645 62.683243) (xy 122.587782 62.738421) (xy 122.532536 62.75959) + (xy 122.532568 62.759724) (xy 122.53158 62.759957) (xy 122.528515 62.761132) (xy 122.525019 62.761507) + (xy 122.390171 62.811802) (xy 122.390169 62.811804) (xy 122.316211 62.867169) (xy 122.250747 62.891586) + (xy 122.182474 62.876735) (xy 122.167589 62.867169) (xy 122.159197 62.860887) (xy 122.093631 62.811804) + (xy 122.093629 62.811803) (xy 122.093628 62.811802) (xy 121.958782 62.761508) (xy 121.958783 62.761508) + (xy 121.899183 62.755101) (xy 121.899181 62.7551) (xy 121.899173 62.7551) (xy 121.899164 62.7551) + (xy 120.203429 62.7551) (xy 120.203423 62.755101) (xy 120.143816 62.761508) (xy 120.008971 62.811802) + (xy 120.008964 62.811806) (xy 119.893755 62.898052) (xy 119.893752 62.898055) (xy 119.807506 63.013264) + (xy 119.807502 63.013271) (xy 119.757208 63.148117) (xy 119.751402 63.202128) (xy 119.750801 63.207723) + (xy 119.7508 63.207735) (xy 117.479436 63.207735) (xy 117.479436 54.89275) (xy 117.499121 54.825711) + (xy 117.551925 54.779956) (xy 117.603436 54.76875) (xy 345.7279 54.76875) + ) + ) + ) + (zone + (net 1) + (net_name "GND") + (layer "B.Cu") + (uuid "ff838bc4-093e-43e6-99e8-d039af93fcb9") + (hatch edge 0.5) + (priority 1) + (connect_pads + (clearance 0.5) + ) + (min_thickness 0.25) + (filled_areas_thickness no) + (fill yes + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + ) + (polygon + (pts + (xy 44.85125 47.625) (xy 363.93875 47.625) (xy 363.93875 190.5) (xy 44.85125 190.5) + ) + ) + (filled_polygon + (layer "B.Cu") + (pts + (xy 322.102739 102.758785) (xy 322.148494 102.811589) (xy 322.1597 102.8631) (xy 322.1597 103.022605) + (xy 322.151055 103.052045) (xy 322.144532 103.082032) (xy 322.140777 103.087047) (xy 322.140015 103.089644) + (xy 322.123381 103.110286) (xy 322.030886 103.202781) (xy 321.969563 103.236266) (xy 321.943205 103.2391) + (xy 321.518 103.2391) (xy 321.450961 103.219415) (xy 321.405206 103.166611) (xy 321.394 103.1151) + (xy 321.394 102.8631) (xy 321.413685 102.796061) (xy 321.466489 102.750306) (xy 321.518 102.7391) + (xy 322.0357 102.7391) + ) + ) + (filled_polygon + (layer "B.Cu") + (pts + (xy 78.410588 100.322185) (xy 78.456343 100.374989) (xy 78.466287 100.444147) (xy 78.442751 100.500897) + (xy 78.38448 100.578597) (xy 78.328511 100.620419) (xy 78.285278 100.6282) (xy 77.147621 100.6282) + (xy 77.033745 100.643191) (xy 77.033737 100.643193) (xy 76.892037 100.701887) (xy 76.770356 100.795256) + (xy 76.676987 100.916937) (xy 76.618293 101.058636) (xy 76.618292 101.058638) (xy 76.6033 101.172522) + (xy 76.6033 101.904878) (xy 76.618291 102.018754) (xy 76.618294 102.018766) (xy 76.663024 102.126755) + (xy 76.670493 102.196224) (xy 76.639218 102.258703) (xy 76.579128 102.294355) (xy 76.509303 102.291861) + (xy 76.501018 102.288771) (xy 76.453197 102.268963) (xy 76.453189 102.268961) (xy 76.298545 102.2382) + (xy 76.298542 102.2382) (xy 76.140858 102.2382) (xy 76.140855 102.2382) (xy 75.98621 102.268961) + (xy 75.986198 102.268964) (xy 75.840527 102.329302) (xy 75.840514 102.329309) (xy 75.709411 102.41691) + (xy 75.709407 102.416913) (xy 75.597913 102.528407) (xy 75.59791 102.528411) (xy 75.510309 102.659514) + (xy 75.510302 102.659527) (xy 75.449964 102.805198) (xy 75.449961 102.80521) (xy 75.4192 102.959853) + (xy 75.4192 103.117546) (xy 75.449961 103.272189) (xy 75.449964 103.272201) (xy 75.510302 103.417872) + (xy 75.510309 103.417885) (xy 75.59791 103.548988) (xy 75.597913 103.548992) (xy 75.709407 103.660486) + (xy 75.709411 103.660489) (xy 75.840514 103.74809) (xy 75.840527 103.748097) (xy 75.986198 103.808435) + (xy 75.986203 103.808437) (xy 76.136349 103.838303) (xy 76.140853 103.839199) (xy 76.140856 103.8392) + (xy 76.140858 103.8392) (xy 76.298544 103.8392) (xy 76.298545 103.839199) (xy 76.453197 103.808437) + (xy 76.598879 103.748094) (xy 76.598884 103.74809) (xy 76.604246 103.745225) (xy 76.60487 103.746392) + (xy 76.665056 103.727536) (xy 76.732439 103.74601) (xy 76.765663 103.776028) (xy 76.767291 103.77815) + (xy 76.770358 103.782146) (xy 76.892036 103.875512) (xy 76.93717 103.894207) (xy 77.033737 103.934207) + (xy 77.147623 103.9492) (xy 78.285229 103.949199) (xy 78.352268 103.968884) (xy 78.384431 103.998802) + (xy 78.389637 104.005744) (xy 78.459238 104.098552) (xy 78.459239 104.098553) (xy 78.45924 104.098554) + (xy 78.593432 104.222395) (xy 78.747825 104.319897) (xy 78.878942 104.372457) (xy 78.917314 104.387839) + (xy 78.917315 104.387839) (xy 78.917317 104.38784) (xy 79.096308 104.423979) (xy 79.096302 104.423979) + (xy 79.112622 104.424259) (xy 79.278884 104.42712) (xy 79.459012 104.397158) (xy 79.512452 104.377841) + (xy 79.630736 104.335085) (xy 79.630737 104.335083) (xy 79.63074 104.335083) (xy 79.645775 104.32632) + (xy 79.652459 104.322435) (xy 79.65275 104.322357) (xy 79.680633 104.30606) (xy 79.680751 104.305992) + (xy 79.683968 104.305201) (xy 79.743062 104.289199) (xy 81.224192 104.289199) (xy 81.224314 104.289206) + (xy 81.232405 104.289205) (xy 81.232408 104.289206) (xy 81.264542 104.289202) (xy 81.327104 104.306134) + (xy 81.35493 104.322391) (xy 81.354932 104.322391) (xy 81.36108 104.325983) (xy 81.362735 104.326808) + (xy 81.376878 104.33505) (xy 81.5486 104.397121) (xy 81.728721 104.427082) (xy 81.908398 104.42399) + (xy 81.911291 104.423941) (xy 82.090266 104.387805) (xy 82.090269 104.387803) (xy 82.090274 104.387803) + (xy 82.25976 104.319862) (xy 82.414146 104.222363) (xy 82.414965 104.221608) (xy 82.54833 104.09853) + (xy 82.548332 104.098528) (xy 82.549912 104.096421) (xy 82.623496 103.998302) (xy 82.679465 103.95648) + (xy 82.722698 103.948699) (xy 82.9788 103.948699) (xy 83.4788 103.948699) (xy 83.534732 103.948699) + (xy 83.618724 103.93815) (xy 83.751557 103.883129) (xy 83.818404 103.8312) (xy 83.818411 103.831194) + (xy 84.286294 103.363312) (xy 84.286299 103.363306) (xy 84.338227 103.29646) (xy 84.341442 103.2887) + (xy 83.4788 103.2887) (xy 83.4788 103.948699) (xy 82.9788 103.948699) (xy 82.9788 103.1627) (xy 82.998485 103.095661) + (xy 83.051289 103.049906) (xy 83.1028 103.0387) (xy 83.2288 103.0387) (xy 83.2288 102.9127) (xy 83.248485 102.845661) + (xy 83.301289 102.799906) (xy 83.3528 102.7887) (xy 84.4038 102.7887) (xy 84.4038 102.672553) (xy 84.38882 102.558769) + (xy 84.388818 102.558764) (xy 84.330178 102.417193) (xy 84.330175 102.417188) (xy 84.28982 102.364596) + (xy 84.281852 102.343986) (xy 84.269672 102.325552) (xy 84.2695 102.312035) (xy 84.264626 102.299427) + (xy 84.269065 102.277781) (xy 84.268785 102.255688) (xy 84.276942 102.239375) (xy 84.278664 102.230982) + (xy 84.283038 102.2234) (xy 84.28619 102.218354) (xy 84.330612 102.160463) (xy 84.346828 102.121314) + (xy 84.352286 102.11258) (xy 84.371004 102.095939) (xy 84.386722 102.076435) (xy 84.39667 102.073123) + (xy 84.404505 102.066159) (xy 84.429248 102.06228) (xy 84.453016 102.054369) (xy 84.463174 102.056961) + (xy 84.473532 102.055338) (xy 84.496446 102.065453) (xy 84.520715 102.071647) (xy 84.534189 102.082114) + (xy 84.537451 102.083554) (xy 84.538935 102.085801) (xy 84.545125 102.090609) (xy 84.887431 102.432914) + (xy 84.920916 102.494237) (xy 84.92375 102.520595) (xy 84.92375 103.579404) (xy 84.904065 103.646443) + (xy 84.887431 103.667085) (xy 83.693336 104.861181) (xy 83.632013 104.894666) (xy 83.605655 104.8975) + (xy 59.896845 104.8975) (xy 59.829806 104.877815) (xy 59.809164 104.861181) (xy 59.068863 104.12088) + (xy 59.035378 104.059557) (xy 59.040362 103.989865) (xy 59.082234 103.933932) (xy 59.147698 103.909515) + (xy 59.156544 103.909199) (xy 59.185229 103.909199) (xy 59.252268 103.928884) (xy 59.284432 103.958803) + (xy 59.359238 104.058552) (xy 59.359239 104.058553) (xy 59.35924 104.058554) (xy 59.493432 104.182395) + (xy 59.647825 104.279897) (xy 59.770114 104.328918) (xy 59.817314 104.347839) (xy 59.817315 104.347839) + (xy 59.817317 104.34784) (xy 59.996308 104.383979) (xy 59.996302 104.383979) (xy 60.012622 104.384259) + (xy 60.178884 104.38712) (xy 60.359012 104.357158) (xy 60.411453 104.338202) (xy 60.530736 104.295085) + (xy 60.530737 104.295083) (xy 60.53074 104.295083) (xy 60.545775 104.28632) (xy 60.552459 104.282435) + (xy 60.55275 104.282357) (xy 60.580633 104.26606) (xy 60.580751 104.265992) (xy 60.583968 104.265201) + (xy 60.643062 104.249199) (xy 62.124192 104.249199) (xy 62.124314 104.249206) (xy 62.132405 104.249205) + (xy 62.132408 104.249206) (xy 62.164542 104.249202) (xy 62.227104 104.266134) (xy 62.25493 104.282391) + (xy 62.254932 104.282391) (xy 62.26108 104.285983) (xy 62.262735 104.286808) (xy 62.276878 104.29505) + (xy 62.4486 104.357121) (xy 62.628721 104.387082) (xy 62.808398 104.38399) (xy 62.811291 104.383941) + (xy 62.990266 104.347805) (xy 62.990269 104.347803) (xy 62.990274 104.347803) (xy 63.15976 104.279862) + (xy 63.314146 104.182363) (xy 63.318274 104.178554) (xy 63.44833 104.05853) (xy 63.448332 104.058528) + (xy 63.451579 104.054199) (xy 63.523496 103.958302) (xy 63.579465 103.91648) (xy 63.622698 103.908699) + (xy 63.8788 103.908699) (xy 64.3788 103.908699) (xy 64.434732 103.908699) (xy 64.518724 103.89815) + (xy 64.651557 103.843129) (xy 64.718404 103.7912) (xy 64.718411 103.791194) (xy 65.186294 103.323312) + (xy 65.186299 103.323306) (xy 65.238227 103.25646) (xy 65.241442 103.2487) (xy 64.3788 103.2487) + (xy 64.3788 103.908699) (xy 63.8788 103.908699) (xy 63.8788 103.1227) (xy 63.898485 103.055661) + (xy 63.951289 103.009906) (xy 64.0028 102.9987) (xy 64.1288 102.9987) (xy 64.1288 102.8727) (xy 64.148485 102.805661) + (xy 64.201289 102.759906) (xy 64.2528 102.7487) (xy 65.3038 102.7487) (xy 65.3038 102.632553) (xy 65.28882 102.518769) + (xy 65.288818 102.518764) (xy 65.230178 102.377193) (xy 65.230175 102.377188) (xy 65.18982 102.324596) + (xy 65.164626 102.259427) (xy 65.178664 102.190982) (xy 65.189821 102.173623) (xy 65.192023 102.170754) + (xy 65.230612 102.120463) (xy 65.289307 101.978763) (xy 65.3043 101.864877) (xy 65.304299 101.132524) + (xy 65.303861 101.1292) (xy 65.290269 101.025947) (xy 65.289307 101.018637) (xy 65.230612 100.876937) + (xy 65.228077 100.873634) (xy 65.226803 100.870339) (xy 65.22655 100.8699) (xy 65.226618 100.86986) + (xy 65.20288 100.808467) (xy 65.216916 100.740022) (xy 65.238765 100.710467) (xy 65.610415 100.338819) + (xy 65.671738 100.305334) (xy 65.698096 100.3025) (xy 78.343549 100.3025) + ) + ) + (filled_polygon + (layer "B.Cu") + (pts + (xy 363.381289 48.145185) (xy 363.427044 48.197989) (xy 363.43825 48.2495) (xy 363.43825 189.8755) + (xy 363.418565 189.942539) (xy 363.365761 189.988294) (xy 363.31425 189.9995) (xy 45.47575 189.9995) + (xy 45.408711 189.979815) (xy 45.362956 189.927011) (xy 45.35175 189.8755) (xy 45.35175 186.821953) + (xy 195.425 186.821953) (xy 195.425 187.034446) (xy 195.458242 187.244327) (xy 195.458242 187.24433) + (xy 195.523904 187.446417) (xy 195.620375 187.63575) (xy 195.659728 187.689916) (xy 196.292037 187.057608) + (xy 196.309075 187.121193) (xy 196.374901 187.235207) (xy 196.467993 187.328299) (xy 196.582007 187.394125) + (xy 196.64559 187.411162) (xy 196.013282 188.043469) (xy 196.013282 188.04347) (xy 196.067449 188.082824) + (xy 196.256782 188.179295) (xy 196.45887 188.244957) (xy 196.668754 188.2782) (xy 196.881246 188.2782) + (xy 197.091127 188.244957) (xy 197.09113 188.244957) (xy 197.293217 188.179295) (xy 197.482554 188.082822) + (xy 197.536716 188.04347) (xy 197.536717 188.04347) (xy 196.904408 187.411162) (xy 196.967993 187.394125) + (xy 197.082007 187.328299) (xy 197.175099 187.235207) (xy 197.240925 187.121193) (xy 197.257962 187.057608) + (xy 197.89027 187.689917) (xy 197.89027 187.689916) (xy 197.929622 187.635755) (xy 197.934232 187.626707) + (xy 197.982205 187.575909) (xy 198.050025 187.559112) (xy 198.116161 187.581647) (xy 198.155204 187.626704) + (xy 198.159949 187.636017) (xy 198.28489 187.807986) (xy 198.435213 187.958309) (xy 198.607179 188.083248) + (xy 198.607181 188.083249) (xy 198.607184 188.083251) (xy 198.796588 188.179757) (xy 198.998757 188.245446) + (xy 199.208713 188.2787) (xy 199.208714 188.2787) (xy 199.421286 188.2787) (xy 199.421287 188.2787) + (xy 199.631243 188.245446) (xy 199.833412 188.179757) (xy 200.022816 188.083251) (xy 200.109138 188.020535) + (xy 200.194786 187.958309) (xy 200.194788 187.958306) (xy 200.194792 187.958304) (xy 200.345104 187.807992) + (xy 200.345106 187.807988) (xy 200.345109 187.807986) (xy 200.470048 187.63602) (xy 200.47005 187.636017) + (xy 200.470051 187.636016) (xy 200.474514 187.627254) (xy 200.522488 187.576459) (xy 200.590308 187.559663) + (xy 200.656444 187.582199) (xy 200.695486 187.627256) (xy 200.699951 187.63602) (xy 200.82489 187.807986) + (xy 200.975213 187.958309) (xy 201.147179 188.083248) (xy 201.147181 188.083249) (xy 201.147184 188.083251) + (xy 201.336588 188.179757) (xy 201.538757 188.245446) (xy 201.748713 188.2787) (xy 201.748714 188.2787) + (xy 201.961286 188.2787) (xy 201.961287 188.2787) (xy 202.171243 188.245446) (xy 202.373412 188.179757) + (xy 202.562816 188.083251) (xy 202.734792 187.958304) (xy 202.848329 187.844766) (xy 202.909648 187.811284) + (xy 202.97934 187.816268) (xy 203.035274 187.858139) (xy 203.052189 187.889117) (xy 203.101202 188.020528) + (xy 203.101206 188.020535) (xy 203.187452 188.135744) (xy 203.187455 188.135747) (xy 203.302664 188.221993) + (xy 203.302671 188.221997) (xy 203.437517 188.272291) (xy 203.437516 188.272291) (xy 203.444444 188.273035) + (xy 203.497127 188.2787) (xy 205.292872 188.278699) (xy 205.352483 188.272291) (xy 205.487331 188.221996) + (xy 205.602546 188.135746) (xy 205.688796 188.020531) (xy 205.739091 187.885683) (xy 205.7455 187.826073) + (xy 205.745499 186.030328) (xy 205.739091 185.970717) (xy 205.73781 185.967283) (xy 205.688797 185.835871) + (xy 205.688793 185.835864) (xy 205.602547 185.720655) (xy 205.602544 185.720652) (xy 205.487335 185.634406) + (xy 205.487328 185.634402) (xy 205.352482 185.584108) (xy 205.352483 185.584108) (xy 205.292883 185.577701) + (xy 205.292881 185.5777) (xy 205.292873 185.5777) (xy 205.292864 185.5777) (xy 203.497129 185.5777) + (xy 203.497123 185.577701) (xy 203.437516 185.584108) (xy 203.302671 185.634402) (xy 203.302664 185.634406) + (xy 203.187455 185.720652) (xy 203.187452 185.720655) (xy 203.101206 185.835864) (xy 203.101203 185.835869) + (xy 203.052189 185.967283) (xy 203.010317 186.023216) (xy 202.944853 186.047633) (xy 202.87658 186.032781) + (xy 202.848326 186.01163) (xy 202.734786 185.89809) (xy 202.56282 185.773151) (xy 202.373414 185.676644) + (xy 202.373413 185.676643) (xy 202.373412 185.676643) (xy 202.171243 185.610954) (xy 202.171241 185.610953) + (xy 202.17124 185.610953) (xy 202.009957 185.585408) (xy 201.961287 185.5777) (xy 201.748713 185.5777) + (xy 201.700042 185.585408) (xy 201.53876 185.610953) (xy 201.336585 185.676644) (xy 201.147179 185.773151) + (xy 200.975213 185.89809) (xy 200.82489 186.048413) (xy 200.699949 186.220382) (xy 200.695484 186.229146) + (xy 200.647509 186.279942) (xy 200.579688 186.296736) (xy 200.513553 186.274198) (xy 200.474516 186.229146) + (xy 200.47005 186.220382) (xy 200.345109 186.048413) (xy 200.194786 185.89809) (xy 200.02282 185.773151) + (xy 199.833414 185.676644) (xy 199.833413 185.676643) (xy 199.833412 185.676643) (xy 199.631243 185.610954) + (xy 199.631241 185.610953) (xy 199.63124 185.610953) (xy 199.469957 185.585408) (xy 199.421287 185.5777) + (xy 199.208713 185.5777) (xy 199.160042 185.585408) (xy 198.99876 185.610953) (xy 198.796585 185.676644) + (xy 198.607179 185.773151) (xy 198.435213 185.89809) (xy 198.28489 186.048413) (xy 198.159949 186.220382) + (xy 198.155202 186.229699) (xy 198.107227 186.280493) (xy 198.039405 186.297287) (xy 197.973271 186.274748) + (xy 197.934234 186.229695) (xy 197.929626 186.220652) (xy 197.89027 186.166482) (xy 197.890269 186.166482) + (xy 197.257962 186.79879) (xy 197.240925 186.735207) (xy 197.175099 186.621193) (xy 197.082007 186.528101) + (xy 196.967993 186.462275) (xy 196.904409 186.445237) (xy 197.536716 185.812928) (xy 197.48255 185.773575) + (xy 197.293217 185.677104) (xy 197.091129 185.611442) (xy 196.881246 185.5782) (xy 196.668754 185.5782) + (xy 196.458872 185.611442) (xy 196.458869 185.611442) (xy 196.256782 185.677104) (xy 196.067439 185.77358) + (xy 196.013282 185.812927) (xy 196.013282 185.812928) (xy 196.645591 186.445237) (xy 196.582007 186.462275) + (xy 196.467993 186.528101) (xy 196.374901 186.621193) (xy 196.309075 186.735207) (xy 196.292037 186.798791) + (xy 195.659728 186.166482) (xy 195.659727 186.166482) (xy 195.62038 186.220639) (xy 195.523904 186.409982) + (xy 195.458242 186.612069) (xy 195.458242 186.612072) (xy 195.425 186.821953) (xy 45.35175 186.821953) + (xy 45.35175 181.942377) (xy 130.76315 181.942377) (xy 130.76315 182.230022) (xy 130.763151 182.230038) + (xy 130.800696 182.515223) (xy 130.875147 182.793078) (xy 130.985225 183.058831) (xy 130.985233 183.058848) + (xy 131.129054 183.307951) (xy 131.129065 183.307967) (xy 131.304171 183.536171) (xy 131.304177 183.536178) + (xy 131.507571 183.739572) (xy 131.507577 183.739577) (xy 131.735791 183.914691) (xy 131.735798 183.914695) + (xy 131.984901 184.058516) (xy 131.984906 184.058518) (xy 131.984909 184.05852) (xy 131.984913 184.058521) + (xy 131.984918 184.058524) (xy 132.090273 184.102163) (xy 132.25067 184.168602) (xy 132.528525 184.243053) + (xy 132.813721 184.2806) (xy 132.813728 184.2806) (xy 133.101372 184.2806) (xy 133.101379 184.2806) + (xy 133.386575 184.243053) (xy 133.66443 184.168602) (xy 133.930191 184.05852) (xy 134.179309 183.914691) + (xy 134.407523 183.739577) (xy 134.610927 183.536173) (xy 134.786041 183.307959) (xy 134.92987 183.058841) + (xy 135.039952 182.79308) (xy 135.114403 182.515225) (xy 135.15195 182.230029) (xy 135.15195 181.942371) + (xy 135.114403 181.657175) (xy 135.039952 181.37932) (xy 134.962155 181.191502) (xy 134.929874 181.113568) + (xy 134.929866 181.113551) (xy 134.786045 180.864448) (xy 134.786041 180.864441) (xy 134.722866 180.782109) + (xy 134.610928 180.636228) (xy 134.610922 180.636221) (xy 134.407528 180.432827) (xy 134.407521 180.432821) + (xy 134.179317 180.257715) (xy 134.179315 180.257713) (xy 134.179309 180.257709) (xy 134.179304 180.257706) + (xy 134.179301 180.257704) (xy 133.930198 180.113883) (xy 133.930181 180.113875) (xy 133.664428 180.003797) + (xy 133.386573 179.929346) (xy 133.101388 179.891801) (xy 133.101385 179.8918) (xy 133.101379 179.8918) + (xy 132.813721 179.8918) (xy 132.813715 179.8918) (xy 132.813711 179.891801) (xy 132.528526 179.929346) + (xy 132.250671 180.003797) (xy 131.984918 180.113875) (xy 131.984901 180.113883) (xy 131.735798 180.257704) + (xy 131.735782 180.257715) (xy 131.507578 180.432821) (xy 131.507571 180.432827) (xy 131.304177 180.636221) + (xy 131.304171 180.636228) (xy 131.129065 180.864432) (xy 131.129054 180.864448) (xy 130.985233 181.113551) + (xy 130.985225 181.113568) (xy 130.875147 181.379321) (xy 130.800696 181.657176) (xy 130.763151 181.942361) + (xy 130.76315 181.942377) (xy 45.35175 181.942377) (xy 45.35175 177.385722) (xy 59.9746 177.385722) + (xy 59.9746 178.118078) (xy 59.989591 178.231954) (xy 59.989592 178.23196) (xy 59.989593 178.231963) + (xy 60.013905 178.290657) (xy 60.048287 178.373662) (xy 60.088765 178.426415) (xy 60.113958 178.491584) + (xy 60.099919 178.560029) (xy 60.088765 178.577385) (xy 60.048287 178.630137) (xy 59.989593 178.771836) + (xy 59.989592 178.771838) (xy 59.9746 178.885722) (xy 59.9746 179.618078) (xy 59.989591 179.731954) + (xy 59.989592 179.73196) (xy 59.989593 179.731963) (xy 59.991722 179.737103) (xy 60.048287 179.873662) + (xy 60.048288 179.873663) (xy 60.141656 179.995344) (xy 60.263337 180.088712) (xy 60.301177 180.104386) + (xy 60.35558 180.148226) (xy 60.377646 180.21452) (xy 60.375342 180.243138) (xy 60.3496 180.372553) + (xy 60.3496 180.530246) (xy 60.380361 180.684889) (xy 60.380364 180.684901) (xy 60.440702 180.830572) + (xy 60.440709 180.830585) (xy 60.52831 180.961688) (xy 60.528313 180.961692) (xy 60.639807 181.073186) + (xy 60.639811 181.073189) (xy 60.770914 181.16079) (xy 60.770927 181.160797) (xy 60.916598 181.221135) + (xy 60.916603 181.221137) (xy 61.071253 181.251899) (xy 61.071256 181.2519) (xy 61.071258 181.2519) + (xy 61.228944 181.2519) (xy 61.228945 181.251899) (xy 61.383597 181.221137) (xy 61.529279 181.160794) + (xy 61.660389 181.073189) (xy 61.771889 180.961689) (xy 61.859494 180.830579) (xy 61.919837 180.684897) + (xy 61.930482 180.631383) (xy 61.933689 180.61526) (xy 61.966074 180.553349) (xy 62.026789 180.518775) + (xy 62.096559 180.522514) (xy 62.113897 180.530915) (xy 62.114095 180.530528) (xy 62.119121 180.533095) + (xy 62.119123 180.533095) (xy 62.119125 180.533097) (xy 62.230193 180.57762) (xy 62.288614 180.601039) + (xy 62.288615 180.601039) (xy 62.288617 180.60104) (xy 62.467608 180.637179) (xy 62.467602 180.637179) + (xy 62.483922 180.637459) (xy 62.650184 180.64032) (xy 62.830312 180.610358) (xy 62.887658 180.589629) + (xy 63.002036 180.548285) (xy 63.002037 180.548283) (xy 63.00204 180.548283) (xy 63.017075 180.53952) + (xy 63.023759 180.535635) (xy 63.02405 180.535557) (xy 63.051933 180.51926) (xy 63.052051 180.519192) + (xy 63.055268 180.518401) (xy 63.114362 180.502399) (xy 64.595492 180.502399) (xy 64.595614 180.502406) + (xy 64.603705 180.502405) (xy 64.603708 180.502406) (xy 64.635842 180.502402) (xy 64.698404 180.519334) + (xy 64.72623 180.535591) (xy 64.726232 180.535591) (xy 64.73238 180.539183) (xy 64.734035 180.540008) + (xy 64.748178 180.54825) (xy 64.9199 180.610321) (xy 65.100021 180.640282) (xy 65.279698 180.63719) + (xy 65.282591 180.637141) (xy 65.461566 180.601005) (xy 65.461569 180.601003) (xy 65.461574 180.601003) + (xy 65.63106 180.533062) (xy 65.785446 180.435563) (xy 65.788416 180.432823) (xy 65.91963 180.31173) + (xy 65.919632 180.311728) (xy 65.919908 180.31136) (xy 65.994796 180.211502) (xy 66.050765 180.16968) + (xy 66.093998 180.161899) (xy 66.3501 180.161899) (xy 66.8501 180.161899) (xy 66.906032 180.161899) + (xy 66.990024 180.15135) (xy 67.122857 180.096329) (xy 67.189704 180.0444) (xy 67.189711 180.044394) + (xy 67.657594 179.576512) (xy 67.657599 179.576506) (xy 67.709527 179.50966) (xy 67.712742 179.5019) + (xy 66.8501 179.5019) (xy 66.8501 180.161899) (xy 66.3501 180.161899) (xy 66.3501 179.3759) (xy 66.369785 179.308861) + (xy 66.422589 179.263106) (xy 66.4741 179.2519) (xy 66.6001 179.2519) (xy 66.6001 179.1259) (xy 66.619785 179.058861) + (xy 66.672589 179.013106) (xy 66.7241 179.0019) (xy 67.7751 179.0019) (xy 67.7751 178.885753) (xy 67.76012 178.771969) + (xy 67.760118 178.771964) (xy 67.701478 178.630393) (xy 67.701475 178.630388) (xy 67.66112 178.577796) + (xy 67.635926 178.512627) (xy 67.649964 178.444182) (xy 67.661121 178.426823) (xy 67.66336 178.423906) + (xy 67.701912 178.373663) (xy 67.760607 178.231963) (xy 67.7756 178.118077) (xy 67.7756 178.1034) + (xy 67.795285 178.036361) (xy 67.848089 177.990606) (xy 67.8996 177.9794) (xy 82.973405 177.9794) + (xy 83.040444 177.999085) (xy 83.061085 178.015718) (xy 83.601031 178.555664) (xy 83.634515 178.616986) + (xy 83.629531 178.686678) (xy 83.61173 178.718824) (xy 83.60919 178.722134) (xy 83.609185 178.722143) + (xy 83.550493 178.863836) (xy 83.550492 178.863838) (xy 83.5355 178.977722) (xy 83.5355 179.710078) + (xy 83.550491 179.823954) (xy 83.550492 179.82396) (xy 83.550493 179.823963) (xy 83.550576 179.824163) + (xy 83.609187 179.965662) (xy 83.609341 179.965863) (xy 83.702556 180.087344) (xy 83.824237 180.180712) + (xy 83.965937 180.239407) (xy 84.079823 180.2544) (xy 85.217429 180.254399) (xy 85.284468 180.274084) + (xy 85.316631 180.304002) (xy 85.322425 180.311728) (xy 85.391438 180.403752) (xy 85.391439 180.403753) + (xy 85.39144 180.403754) (xy 85.525632 180.527595) (xy 85.680025 180.625097) (xy 85.780224 180.665263) + (xy 85.849514 180.693039) (xy 85.849515 180.693039) (xy 85.849517 180.69304) (xy 86.028508 180.729179) + (xy 86.028502 180.729179) (xy 86.044822 180.729459) (xy 86.211084 180.73232) (xy 86.391212 180.702358) + (xy 86.480021 180.670256) (xy 86.562936 180.640285) (xy 86.562937 180.640283) (xy 86.56294 180.640283) + (xy 86.578212 180.631383) (xy 86.584659 180.627635) (xy 86.58495 180.627557) (xy 86.612833 180.61126) + (xy 86.612951 180.611192) (xy 86.616168 180.610401) (xy 86.675262 180.594399) (xy 88.156392 180.594399) + (xy 88.156514 180.594406) (xy 88.164605 180.594405) (xy 88.164608 180.594406) (xy 88.196742 180.594402) + (xy 88.259304 180.611334) (xy 88.28713 180.627591) (xy 88.287132 180.627591) (xy 88.29328 180.631183) + (xy 88.294935 180.632008) (xy 88.309078 180.64025) (xy 88.4808 180.702321) (xy 88.660921 180.732282) + (xy 88.840598 180.72919) (xy 88.843491 180.729141) (xy 89.022466 180.693005) (xy 89.022469 180.693003) + (xy 89.022474 180.693003) (xy 89.19196 180.625062) (xy 89.346346 180.527563) (xy 89.348162 180.525888) + (xy 89.48053 180.40373) (xy 89.480532 180.403728) (xy 89.480533 180.403727) (xy 89.555696 180.303502) + (xy 89.611665 180.26168) (xy 89.654898 180.253899) (xy 89.911 180.253899) (xy 90.411 180.253899) + (xy 90.466932 180.253899) (xy 90.550924 180.24335) (xy 90.683757 180.188329) (xy 90.750604 180.1364) + (xy 90.750611 180.136394) (xy 91.218494 179.668512) (xy 91.218499 179.668506) (xy 91.270427 179.60166) + (xy 91.273642 179.5939) (xy 90.411 179.5939) (xy 90.411 180.253899) (xy 89.911 180.253899) (xy 89.911 179.4679) + (xy 89.930685 179.400861) (xy 89.983489 179.355106) (xy 90.035 179.3439) (xy 90.161 179.3439) (xy 90.161 179.2179) + (xy 90.180685 179.150861) (xy 90.233489 179.105106) (xy 90.285 179.0939) (xy 91.336 179.0939) (xy 91.336 178.977753) + (xy 91.32102 178.863969) (xy 91.321018 178.863964) (xy 91.262378 178.722393) (xy 91.262375 178.722388) + (xy 91.22202 178.669796) (xy 91.196826 178.604627) (xy 91.210864 178.536182) (xy 91.222019 178.518826) + (xy 91.262812 178.465663) (xy 91.321507 178.323963) (xy 91.3365 178.210077) (xy 91.3365 178.1765) + (xy 91.356185 178.109461) (xy 91.408989 178.063706) (xy 91.4605 178.0525) (xy 106.858805 178.0525) + (xy 106.925844 178.072185) (xy 106.946486 178.088819) (xy 107.41353 178.555863) (xy 107.447015 178.617186) + (xy 107.442031 178.686878) (xy 107.424226 178.719029) (xy 107.421687 178.722337) (xy 107.362993 178.864036) + (xy 107.362992 178.864038) (xy 107.348 178.977922) (xy 107.348 179.710278) (xy 107.362991 179.824154) + (xy 107.362992 179.82416) (xy 107.362993 179.824163) (xy 107.383497 179.873663) (xy 107.421687 179.965862) + (xy 107.421688 179.965863) (xy 107.515056 180.087544) (xy 107.636737 180.180912) (xy 107.778437 180.239607) + (xy 107.892323 180.2546) (xy 109.029929 180.254599) (xy 109.096968 180.274284) (xy 109.129131 180.304202) + (xy 109.134775 180.311728) (xy 109.203938 180.403952) (xy 109.203939 180.403953) (xy 109.20394 180.403954) + (xy 109.338132 180.527795) (xy 109.492525 180.625297) (xy 109.604673 180.670253) (xy 109.662014 180.693239) + (xy 109.662015 180.693239) (xy 109.662017 180.69324) (xy 109.841008 180.729379) (xy 109.841002 180.729379) + (xy 109.857322 180.729659) (xy 110.023584 180.73252) (xy 110.203712 180.702558) (xy 110.252559 180.684901) + (xy 110.375436 180.640485) (xy 110.375437 180.640483) (xy 110.37544 180.640483) (xy 110.390475 180.63172) + (xy 110.397159 180.627835) (xy 110.39745 180.627757) (xy 110.425333 180.61146) (xy 110.425451 180.611392) + (xy 110.428668 180.610601) (xy 110.487762 180.594599) (xy 111.968892 180.594599) (xy 111.969014 180.594606) + (xy 111.977105 180.594605) (xy 111.977108 180.594606) (xy 112.009242 180.594602) (xy 112.071804 180.611534) + (xy 112.09963 180.627791) (xy 112.099632 180.627791) (xy 112.10578 180.631383) (xy 112.107435 180.632208) + (xy 112.121578 180.64045) (xy 112.2933 180.702521) (xy 112.473421 180.732482) (xy 112.653098 180.72939) + (xy 112.655991 180.729341) (xy 112.834966 180.693205) (xy 112.834969 180.693203) (xy 112.834974 180.693203) + (xy 113.00446 180.625262) (xy 113.158846 180.527763) (xy 113.159029 180.527595) (xy 113.29303 180.40393) + (xy 113.293032 180.403928) (xy 113.293033 180.403927) (xy 113.368196 180.303702) (xy 113.424165 180.26188) + (xy 113.467398 180.254099) (xy 113.7235 180.254099) (xy 114.2235 180.254099) (xy 114.279432 180.254099) + (xy 114.363424 180.24355) (xy 114.496257 180.188529) (xy 114.563104 180.1366) (xy 114.563111 180.136594) + (xy 115.030994 179.668712) (xy 115.030999 179.668706) (xy 115.082927 179.60186) (xy 115.086142 179.5941) + (xy 114.2235 179.5941) (xy 114.2235 180.254099) (xy 113.7235 180.254099) (xy 113.7235 179.4681) + (xy 113.743185 179.401061) (xy 113.795989 179.355306) (xy 113.8475 179.3441) (xy 113.9735 179.3441) + (xy 113.9735 179.2181) (xy 113.993185 179.151061) (xy 114.045989 179.105306) (xy 114.0975 179.0941) + (xy 115.1485 179.0941) (xy 115.1485 178.977953) (xy 115.13352 178.864169) (xy 115.133518 178.864164) + (xy 115.074878 178.722593) (xy 115.074875 178.722588) (xy 115.03452 178.669996) (xy 115.009326 178.604827) + (xy 115.023364 178.536382) (xy 115.034521 178.519023) (xy 115.034675 178.518823) (xy 115.075312 178.465863) + (xy 115.134007 178.324163) (xy 115.149 178.210277) (xy 115.148999 177.477924) (xy 115.148972 177.477722) + (xy 115.134008 177.364045) (xy 115.134007 177.36404) (xy 115.134007 177.364037) (xy 115.117018 177.323022) + (xy 179.1293 177.323022) (xy 179.1293 178.055378) (xy 179.144291 178.169254) (xy 179.144292 178.16926) + (xy 179.144293 178.169263) (xy 179.161282 178.210277) (xy 179.202987 178.310962) (xy 179.243465 178.363715) + (xy 179.268658 178.428884) (xy 179.254619 178.497329) (xy 179.243465 178.514685) (xy 179.202987 178.567437) + (xy 179.144293 178.709136) (xy 179.144292 178.709138) (xy 179.1293 178.823022) (xy 179.1293 179.555378) + (xy 179.144291 179.669254) (xy 179.144292 179.66926) (xy 179.144293 179.669263) (xy 179.168605 179.727957) + (xy 179.202987 179.810962) (xy 179.215012 179.826633) (xy 179.296356 179.932644) (xy 179.418037 180.026012) + (xy 179.559737 180.084707) (xy 179.673623 180.0997) (xy 179.940637 180.099699) (xy 180.007675 180.119383) + (xy 180.05343 180.172187) (xy 180.063374 180.241346) (xy 180.034349 180.304901) (xy 179.988089 180.33826) + (xy 179.922074 180.365604) (xy 179.922064 180.365609) (xy 179.790961 180.45321) (xy 179.790957 180.453213) + (xy 179.679463 180.564707) (xy 179.67946 180.564711) (xy 179.591859 180.695814) (xy 179.591852 180.695827) + (xy 179.531514 180.841498) (xy 179.531511 180.84151) (xy 179.50075 180.996153) (xy 179.50075 181.153846) + (xy 179.531511 181.308489) (xy 179.531514 181.308501) (xy 179.591852 181.454172) (xy 179.591859 181.454185) + (xy 179.67946 181.585288) (xy 179.679463 181.585292) (xy 179.790957 181.696786) (xy 179.790961 181.696789) + (xy 179.922064 181.78439) (xy 179.922077 181.784397) (xy 180.067748 181.844735) (xy 180.067753 181.844737) + (xy 180.222398 181.875498) (xy 180.222403 181.875499) (xy 180.222406 181.8755) (xy 180.222408 181.8755) + (xy 180.380094 181.8755) (xy 180.380095 181.875499) (xy 180.534747 181.844737) (xy 180.680429 181.784394) + (xy 180.811539 181.696789) (xy 180.923039 181.585289) (xy 181.010644 181.454179) (xy 181.013969 181.446153) + (xy 181.055387 181.346158) (xy 181.070987 181.308497) (xy 181.10175 181.153842) (xy 181.10175 180.996158) + (xy 181.10175 180.996155) (xy 181.101749 180.996153) (xy 181.083262 180.903213) (xy 181.070987 180.841503) + (xy 181.050188 180.791289) (xy 181.010647 180.695827) (xy 181.01064 180.695814) (xy 180.923039 180.564711) + (xy 180.923036 180.564707) (xy 180.811542 180.453213) (xy 180.811538 180.45321) (xy 180.680435 180.365609) + (xy 180.680422 180.365602) (xy 180.61441 180.33826) (xy 180.560006 180.29442) (xy 180.537941 180.228126) + (xy 180.55522 180.160426) (xy 180.606357 180.112815) (xy 180.661862 180.099699) (xy 180.811229 180.099699) + (xy 180.878268 180.119384) (xy 180.910432 180.149303) (xy 180.985238 180.249052) (xy 180.985239 180.249053) + (xy 180.98524 180.249054) (xy 181.119432 180.372895) (xy 181.273825 180.470397) (xy 181.383818 180.514489) + (xy 181.443314 180.538339) (xy 181.443315 180.538339) (xy 181.443317 180.53834) (xy 181.622308 180.574479) + (xy 181.622302 180.574479) (xy 181.638622 180.574759) (xy 181.804884 180.57762) (xy 181.985012 180.547658) + (xy 182.039965 180.527794) (xy 182.156736 180.485585) (xy 182.156737 180.485583) (xy 182.15674 180.485583) + (xy 182.171775 180.47682) (xy 182.178459 180.472935) (xy 182.17875 180.472857) (xy 182.206633 180.45656) + (xy 182.206751 180.456492) (xy 182.209968 180.455701) (xy 182.269062 180.439699) (xy 183.750192 180.439699) + (xy 183.750314 180.439706) (xy 183.758405 180.439705) (xy 183.758408 180.439706) (xy 183.790542 180.439702) + (xy 183.853104 180.456634) (xy 183.88093 180.472891) (xy 183.880932 180.472891) (xy 183.88708 180.476483) + (xy 183.888735 180.477308) (xy 183.902878 180.48555) (xy 184.0746 180.547621) (xy 184.254721 180.577582) + (xy 184.434398 180.57449) (xy 184.437291 180.574441) (xy 184.616266 180.538305) (xy 184.616269 180.538303) + (xy 184.616274 180.538303) (xy 184.78576 180.470362) (xy 184.940146 180.372863) (xy 184.940477 180.372558) + (xy 185.07433 180.24903) (xy 185.074332 180.249028) (xy 185.081548 180.239406) (xy 185.149496 180.148802) + (xy 185.205465 180.10698) (xy 185.248698 180.099199) (xy 185.5048 180.099199) (xy 186.0048 180.099199) + (xy 186.060732 180.099199) (xy 186.144724 180.08865) (xy 186.277557 180.033629) (xy 186.344404 179.9817) + (xy 186.344411 179.981694) (xy 186.812294 179.513812) (xy 186.812299 179.513806) (xy 186.864227 179.44696) + (xy 186.867442 179.4392) (xy 186.0048 179.4392) (xy 186.0048 180.099199) (xy 185.5048 180.099199) + (xy 185.5048 179.3132) (xy 185.524485 179.246161) (xy 185.577289 179.200406) (xy 185.6288 179.1892) + (xy 185.7548 179.1892) (xy 185.7548 179.0632) (xy 185.774485 178.996161) (xy 185.827289 178.950406) + (xy 185.8788 178.9392) (xy 186.9298 178.9392) (xy 186.9298 178.823053) (xy 186.91482 178.709269) + (xy 186.914818 178.709264) (xy 186.856178 178.567693) (xy 186.856175 178.567688) (xy 186.81582 178.515096) + (xy 186.790626 178.449927) (xy 186.804664 178.381482) (xy 186.815821 178.364123) (xy 186.839769 178.332914) + (xy 186.856612 178.310963) (xy 186.915307 178.169263) (xy 186.9303 178.055377) (xy 186.9303 178.0407) + (xy 186.93285 178.032014) (xy 186.931562 178.023053) (xy 186.94254 177.999012) (xy 186.949985 177.973661) + (xy 186.956825 177.967733) (xy 186.960587 177.959497) (xy 186.982821 177.945207) (xy 187.002789 177.927906) + (xy 187.013303 177.925618) (xy 187.019365 177.921723) (xy 187.0543 177.9167) (xy 187.119855 177.9167) + (xy 187.186894 177.936385) (xy 187.207536 177.953019) (xy 187.587431 178.332914) (xy 187.620916 178.394237) + (xy 187.62375 178.420595) (xy 187.62375 181.639154) (xy 187.604065 181.706193) (xy 187.587431 181.726835) + (xy 185.088262 184.226003) (xy 185.026939 184.259488) (xy 184.957247 184.254504) (xy 184.953129 184.252883) + (xy 184.878001 184.221764) (xy 184.877989 184.221761) (xy 184.723345 184.191) (xy 184.723342 184.191) + (xy 184.565658 184.191) (xy 184.565655 184.191) (xy 184.41101 184.221761) (xy 184.410998 184.221764) + (xy 184.265327 184.282102) (xy 184.265314 184.282109) (xy 184.134211 184.36971) (xy 184.134207 184.369713) + (xy 184.022713 184.481207) (xy 184.02271 184.481211) (xy 183.935109 184.612314) (xy 183.935102 184.612327) + (xy 183.874764 184.757998) (xy 183.874761 184.75801) (xy 183.844 184.912653) (xy 183.844 185.070346) + (xy 183.874761 185.224989) (xy 183.874764 185.225001) (xy 183.935102 185.370672) (xy 183.935109 185.370685) + (xy 184.02271 185.501788) (xy 184.022713 185.501792) (xy 184.134207 185.613286) (xy 184.134211 185.613289) + (xy 184.265314 185.70089) (xy 184.265327 185.700897) (xy 184.373312 185.745625) (xy 184.411003 185.761237) + (xy 184.565653 185.791999) (xy 184.565656 185.792) (xy 184.565658 185.792) (xy 184.723344 185.792) + (xy 184.723345 185.791999) (xy 184.877997 185.761237) (xy 185.023679 185.700894) (xy 185.154789 185.613289) + (xy 185.266289 185.501789) (xy 185.353894 185.370679) (xy 185.414237 185.224997) (xy 185.445 185.070342) + (xy 185.445 184.912658) (xy 185.445 184.912655) (xy 185.444999 184.912653) (xy 185.414238 184.75801) + (xy 185.414237 184.758003) (xy 185.383114 184.682865) (xy 185.375646 184.613401) (xy 185.40692 184.550922) + (xy 185.409966 184.547765) (xy 188.015356 181.942377) (xy 230.77565 181.942377) (xy 230.77565 182.230022) + (xy 230.775651 182.230038) (xy 230.813196 182.515223) (xy 230.887647 182.793078) (xy 230.997725 183.058831) + (xy 230.997733 183.058848) (xy 231.141554 183.307951) (xy 231.141565 183.307967) (xy 231.316671 183.536171) + (xy 231.316677 183.536178) (xy 231.520071 183.739572) (xy 231.520077 183.739577) (xy 231.748291 183.914691) + (xy 231.748298 183.914695) (xy 231.997401 184.058516) (xy 231.997406 184.058518) (xy 231.997409 184.05852) + (xy 231.997413 184.058521) (xy 231.997418 184.058524) (xy 232.102773 184.102163) (xy 232.26317 184.168602) + (xy 232.541025 184.243053) (xy 232.826221 184.2806) (xy 232.826228 184.2806) (xy 233.113872 184.2806) + (xy 233.113879 184.2806) (xy 233.399075 184.243053) (xy 233.67693 184.168602) (xy 233.942691 184.05852) + (xy 234.191809 183.914691) (xy 234.420023 183.739577) (xy 234.623427 183.536173) (xy 234.798541 183.307959) + (xy 234.94237 183.058841) (xy 235.052452 182.79308) (xy 235.126903 182.515225) (xy 235.16445 182.230029) + (xy 235.16445 181.942371) (xy 235.126903 181.657175) (xy 235.052452 181.37932) (xy 234.974655 181.191502) + (xy 234.942374 181.113568) (xy 234.942366 181.113551) (xy 234.798545 180.864448) (xy 234.798541 180.864441) + (xy 234.735366 180.782109) (xy 234.623428 180.636228) (xy 234.623422 180.636221) (xy 234.420028 180.432827) + (xy 234.420021 180.432821) (xy 234.191817 180.257715) (xy 234.191815 180.257713) (xy 234.191809 180.257709) + (xy 234.191804 180.257706) (xy 234.191801 180.257704) (xy 233.942698 180.113883) (xy 233.942681 180.113875) + (xy 233.676928 180.003797) (xy 233.399073 179.929346) (xy 233.113888 179.891801) (xy 233.113885 179.8918) + (xy 233.113879 179.8918) (xy 232.826221 179.8918) (xy 232.826215 179.8918) (xy 232.826211 179.891801) + (xy 232.541026 179.929346) (xy 232.263171 180.003797) (xy 231.997418 180.113875) (xy 231.997401 180.113883) + (xy 231.748298 180.257704) (xy 231.748282 180.257715) (xy 231.520078 180.432821) (xy 231.520071 180.432827) + (xy 231.316677 180.636221) (xy 231.316671 180.636228) (xy 231.141565 180.864432) (xy 231.141554 180.864448) + (xy 230.997733 181.113551) (xy 230.997725 181.113568) (xy 230.887647 181.379321) (xy 230.813196 181.657176) + (xy 230.775651 181.942361) (xy 230.77565 181.942377) (xy 188.015356 181.942377) (xy 188.044115 181.913618) + (xy 188.059904 181.8755) (xy 188.059905 181.875498) (xy 188.072646 181.844738) (xy 188.07875 181.830003) + (xy 188.07875 178.229747) (xy 188.044115 178.146132) (xy 187.980118 178.082135) (xy 187.74465 177.846667) + (xy 187.459329 177.561345) (xy 187.39432 177.496336) (xy 187.393091 177.495827) (xy 187.349383 177.477722) + (xy 247.8419 177.477722) (xy 247.8419 178.210078) (xy 247.856891 178.323954) (xy 247.856893 178.323962) + (xy 247.915587 178.465662) (xy 247.956065 178.518415) (xy 247.981258 178.583584) (xy 247.967219 178.652029) + (xy 247.956065 178.669385) (xy 247.915587 178.722137) (xy 247.856893 178.863836) (xy 247.856892 178.863838) + (xy 247.8419 178.977722) (xy 247.8419 179.710078) (xy 247.856891 179.823954) (xy 247.856892 179.82396) + (xy 247.856893 179.823963) (xy 247.856976 179.824163) (xy 247.915587 179.965662) (xy 247.915741 179.965863) + (xy 248.008956 180.087344) (xy 248.130637 180.180712) (xy 248.272337 180.239407) (xy 248.386223 180.2544) + (xy 248.673078 180.254399) (xy 248.740117 180.274083) (xy 248.785872 180.326887) (xy 248.787638 180.330945) + (xy 248.824533 180.420015) (xy 248.824536 180.420019) (xy 250.006508 181.601992) (xy 250.00651 181.601994) + (xy 250.071177 181.628778) (xy 250.090123 181.636626) (xy 250.090125 181.636626) (xy 275.042126 181.636626) + (xy 275.042127 181.636626) (xy 275.125742 181.601991) (xy 275.681238 181.046493) (xy 275.742559 181.01301) + (xy 275.81225 181.017994) (xy 275.816296 181.019585) (xy 275.891503 181.050737) (xy 276.046153 181.081499) + (xy 276.046156 181.0815) (xy 276.046158 181.0815) (xy 276.203844 181.0815) (xy 276.203845 181.081499) + (xy 276.358497 181.050737) (xy 276.471166 181.004067) (xy 276.504172 180.990397) (xy 276.504172 180.990396) + (xy 276.504179 180.990394) (xy 276.635289 180.902789) (xy 276.746789 180.791289) (xy 276.834394 180.660179) + (xy 276.842552 180.640485) (xy 276.857593 180.604172) (xy 276.894737 180.514497) (xy 276.9255 180.359842) + (xy 276.9255 180.202158) (xy 276.9255 180.202155) (xy 276.925499 180.202153) (xy 276.917199 180.160426) + (xy 276.894737 180.047503) (xy 276.876634 180.003797) (xy 276.834397 179.901827) (xy 276.83439 179.901814) + (xy 276.746789 179.770711) (xy 276.746786 179.770707) (xy 276.635292 179.659213) (xy 276.635288 179.65921) + (xy 276.504185 179.571609) (xy 276.504172 179.571602) (xy 276.358501 179.511264) (xy 276.358489 179.511261) + (xy 276.203845 179.4805) (xy 276.203842 179.4805) (xy 276.046158 179.4805) (xy 276.046155 179.4805) + (xy 275.89151 179.511261) (xy 275.891498 179.511264) (xy 275.745827 179.571602) (xy 275.745814 179.571609) + (xy 275.614711 179.65921) (xy 275.614707 179.659213) (xy 275.503213 179.770707) (xy 275.50321 179.770711) + (xy 275.415609 179.901814) (xy 275.415602 179.901827) (xy 275.355264 180.047498) (xy 275.355261 180.04751) + (xy 275.3245 180.202153) (xy 275.3245 180.359846) (xy 275.355261 180.514489) (xy 275.355264 180.514501) + (xy 275.386383 180.589629) (xy 275.393852 180.659098) (xy 275.362576 180.721577) (xy 275.359503 180.724762) + (xy 274.93896 181.145307) (xy 274.877637 181.178792) (xy 274.851279 181.181626) (xy 268.456948 181.181626) + (xy 268.389909 181.161941) (xy 268.344154 181.109137) (xy 268.33421 181.039979) (xy 268.363235 180.976423) + (xy 268.409496 180.943064) (xy 268.430429 180.934394) (xy 268.561539 180.846789) (xy 268.673039 180.735289) + (xy 268.760644 180.604179) (xy 268.760643 180.604179) (xy 268.764029 180.599113) (xy 268.765809 180.600302) + (xy 268.807958 180.557364) (xy 268.87609 180.541878) (xy 268.934605 180.560796) (xy 268.998331 180.60104) + (xy 269.036425 180.625097) (xy 269.136624 180.665263) (xy 269.205914 180.693039) (xy 269.205915 180.693039) + (xy 269.205917 180.69304) (xy 269.384908 180.729179) (xy 269.384902 180.729179) (xy 269.401222 180.729459) + (xy 269.567484 180.73232) (xy 269.747612 180.702358) (xy 269.836421 180.670256) (xy 269.919336 180.640285) + (xy 269.919337 180.640283) (xy 269.91934 180.640283) (xy 269.934612 180.631383) (xy 269.941059 180.627635) + (xy 269.94135 180.627557) (xy 269.969233 180.61126) (xy 269.969351 180.611192) (xy 269.972568 180.610401) + (xy 270.031662 180.594399) (xy 271.512792 180.594399) (xy 271.512914 180.594406) (xy 271.521005 180.594405) + (xy 271.521008 180.594406) (xy 271.553142 180.594402) (xy 271.615704 180.611334) (xy 271.64353 180.627591) + (xy 271.643532 180.627591) (xy 271.64968 180.631183) (xy 271.651335 180.632008) (xy 271.665478 180.64025) + (xy 271.8372 180.702321) (xy 272.017321 180.732282) (xy 272.196998 180.72919) (xy 272.199891 180.729141) + (xy 272.378866 180.693005) (xy 272.378869 180.693003) (xy 272.378874 180.693003) (xy 272.54836 180.625062) + (xy 272.702746 180.527563) (xy 272.704562 180.525888) (xy 272.83693 180.40373) (xy 272.836932 180.403728) + (xy 272.836933 180.403727) (xy 272.912096 180.303502) (xy 272.968065 180.26168) (xy 273.011298 180.253899) + (xy 273.2674 180.253899) (xy 273.7674 180.253899) (xy 273.823332 180.253899) (xy 273.907324 180.24335) + (xy 274.040157 180.188329) (xy 274.107004 180.1364) (xy 274.107011 180.136394) (xy 274.574894 179.668512) + (xy 274.574899 179.668506) (xy 274.626827 179.60166) (xy 274.630042 179.5939) (xy 273.7674 179.5939) + (xy 273.7674 180.253899) (xy 273.2674 180.253899) (xy 273.2674 179.4679) (xy 273.287085 179.400861) + (xy 273.339889 179.355106) (xy 273.3914 179.3439) (xy 273.5174 179.3439) (xy 273.5174 179.2179) + (xy 273.537085 179.150861) (xy 273.589889 179.105106) (xy 273.6414 179.0939) (xy 274.6924 179.0939) + (xy 274.6924 178.977753) (xy 274.67742 178.863969) (xy 274.677418 178.863964) (xy 274.618778 178.722393) + (xy 274.618775 178.722388) (xy 274.57842 178.669796) (xy 274.553226 178.604627) (xy 274.567264 178.536182) + (xy 274.578419 178.518826) (xy 274.619212 178.465663) (xy 274.677907 178.323963) (xy 274.6929 178.210077) + (xy 274.692899 177.477724) (xy 274.686048 177.425684) (xy 274.683631 177.40732) (xy 274.694397 177.338285) + (xy 274.740778 177.28603) (xy 274.808047 177.267145) (xy 274.874847 177.287626) (xy 274.909672 177.322245) + (xy 274.98721 177.438288) (xy 274.987213 177.438292) (xy 275.098707 177.549786) (xy 275.098711 177.549789) + (xy 275.229814 177.63739) (xy 275.229827 177.637397) (xy 275.375498 177.697735) (xy 275.375503 177.697737) + (xy 275.507842 177.724061) (xy 275.530153 177.728499) (xy 275.530156 177.7285) (xy 275.530158 177.7285) + (xy 275.687844 177.7285) (xy 275.687845 177.728499) (xy 275.842497 177.697737) (xy 275.963781 177.6475) + (xy 275.988172 177.637397) (xy 275.988172 177.637396) (xy 275.988179 177.637394) (xy 276.119289 177.549789) + (xy 276.191356 177.477722) (xy 286.1935 177.477722) (xy 286.1935 178.210078) (xy 286.208491 178.323954) + (xy 286.208493 178.323962) (xy 286.267187 178.465662) (xy 286.307665 178.518415) (xy 286.332858 178.583584) + (xy 286.318819 178.652029) (xy 286.307665 178.669385) (xy 286.267187 178.722137) (xy 286.208493 178.863836) + (xy 286.208492 178.863838) (xy 286.1935 178.977722) (xy 286.1935 179.710078) (xy 286.208491 179.823954) + (xy 286.208492 179.82396) (xy 286.208493 179.823963) (xy 286.208576 179.824163) (xy 286.267187 179.965662) + (xy 286.267341 179.965863) (xy 286.360556 180.087344) (xy 286.482237 180.180712) (xy 286.623937 180.239407) + (xy 286.737823 180.2544) (xy 287.017501 180.254399) (xy 287.084539 180.274083) (xy 287.130294 180.326887) + (xy 287.1415 180.378399) (xy 287.1415 180.597497) (xy 287.1415 180.688003) (xy 287.176135 180.771618) + (xy 287.176136 180.771619) (xy 289.745379 183.340864) (xy 289.74538 183.340864) (xy 289.745382 183.340866) + (xy 289.804502 183.365353) (xy 289.804505 183.365355) (xy 289.804506 183.365355) (xy 289.814651 183.369557) + (xy 289.828997 183.3755) (xy 289.828998 183.3755) (xy 289.919503 183.3755) (xy 310.963925 183.3755) + (xy 311.030964 183.395185) (xy 311.076719 183.447989) (xy 311.078465 183.451999) (xy 311.109603 183.527172) + (xy 311.109607 183.527181) (xy 311.109609 183.527185) (xy 311.19721 183.658288) (xy 311.197213 183.658292) + (xy 311.308707 183.769786) (xy 311.308711 183.769789) (xy 311.439814 183.85739) (xy 311.439827 183.857397) + (xy 311.578132 183.914684) (xy 311.585503 183.917737) (xy 311.740153 183.948499) (xy 311.740156 183.9485) + (xy 311.740158 183.9485) (xy 311.897844 183.9485) (xy 311.897845 183.948499) (xy 312.052497 183.917737) + (xy 312.198179 183.857394) (xy 312.329289 183.769789) (xy 312.440789 183.658289) (xy 312.528394 183.527179) + (xy 312.588737 183.381497) (xy 312.6195 183.226842) (xy 312.6195 183.069158) (xy 312.6195 183.069155) + (xy 312.619499 183.069153) (xy 312.588738 182.91451) (xy 312.588737 182.914503) (xy 312.559514 182.843952) + (xy 312.528397 182.768827) (xy 312.52839 182.768814) (xy 312.440789 182.637711) (xy 312.440786 182.637707) + (xy 312.329292 182.526213) (xy 312.329288 182.52621) (xy 312.198185 182.438609) (xy 312.198172 182.438602) + (xy 312.052501 182.378264) (xy 312.052489 182.378261) (xy 311.897845 182.3475) (xy 311.897842 182.3475) + (xy 311.740158 182.3475) (xy 311.740155 182.3475) (xy 311.58551 182.378261) (xy 311.585498 182.378264) + (xy 311.439827 182.438602) (xy 311.439814 182.438609) (xy 311.308711 182.52621) (xy 311.308707 182.526213) + (xy 311.197213 182.637707) (xy 311.19721 182.637711) (xy 311.109609 182.768814) (xy 311.109607 182.768818) + (xy 311.103728 182.78301) (xy 311.078484 182.843954) (xy 311.034646 182.898356) (xy 310.968352 182.920421) + (xy 310.963925 182.9205) (xy 290.019846 182.9205) (xy 289.952807 182.900815) (xy 289.932165 182.884181) + (xy 287.632819 180.584835) (xy 287.618115 180.557907) (xy 287.601523 180.532089) (xy 287.600631 180.525888) + (xy 287.599334 180.523512) (xy 287.5965 180.497154) (xy 287.5965 180.378399) (xy 287.616185 180.31136) + (xy 287.668989 180.265605) (xy 287.7205 180.254399) (xy 287.875429 180.254399) (xy 287.942468 180.274084) + (xy 287.974631 180.304002) (xy 287.980425 180.311728) (xy 288.049438 180.403752) (xy 288.049439 180.403753) + (xy 288.04944 180.403754) (xy 288.183632 180.527595) (xy 288.338025 180.625097) (xy 288.438224 180.665263) + (xy 288.507514 180.693039) (xy 288.507515 180.693039) (xy 288.507517 180.69304) (xy 288.686508 180.729179) + (xy 288.686502 180.729179) (xy 288.702822 180.729459) (xy 288.869084 180.73232) (xy 289.049212 180.702358) + (xy 289.138021 180.670256) (xy 289.220936 180.640285) (xy 289.220937 180.640283) (xy 289.22094 180.640283) + (xy 289.236212 180.631383) (xy 289.242659 180.627635) (xy 289.24295 180.627557) (xy 289.270833 180.61126) + (xy 289.270951 180.611192) (xy 289.274168 180.610401) (xy 289.333262 180.594399) (xy 290.814392 180.594399) + (xy 290.814514 180.594406) (xy 290.822605 180.594405) (xy 290.822608 180.594406) (xy 290.854742 180.594402) + (xy 290.917304 180.611334) (xy 290.94513 180.627591) (xy 290.945132 180.627591) (xy 290.95128 180.631183) + (xy 290.952935 180.632008) (xy 290.967078 180.64025) (xy 291.1388 180.702321) (xy 291.318921 180.732282) + (xy 291.498598 180.72919) (xy 291.501491 180.729141) (xy 291.680466 180.693005) (xy 291.680469 180.693003) + (xy 291.680474 180.693003) (xy 291.84996 180.625062) (xy 292.004346 180.527563) (xy 292.006162 180.525888) + (xy 292.13853 180.40373) (xy 292.138532 180.403728) (xy 292.138533 180.403727) (xy 292.213696 180.303502) + (xy 292.269665 180.26168) (xy 292.312898 180.253899) (xy 292.569 180.253899) (xy 293.069 180.253899) + (xy 293.124932 180.253899) (xy 293.208924 180.24335) (xy 293.341757 180.188329) (xy 293.408604 180.1364) + (xy 293.408611 180.136394) (xy 293.876494 179.668512) (xy 293.876499 179.668506) (xy 293.928427 179.60166) + (xy 293.931642 179.5939) (xy 293.069 179.5939) (xy 293.069 180.253899) (xy 292.569 180.253899) (xy 292.569 179.4679) + (xy 292.588685 179.400861) (xy 292.641489 179.355106) (xy 292.693 179.3439) (xy 292.819 179.3439) + (xy 292.819 179.2179) (xy 292.838685 179.150861) (xy 292.891489 179.105106) (xy 292.943 179.0939) + (xy 293.994 179.0939) (xy 293.994 178.977753) (xy 293.97902 178.863969) (xy 293.979018 178.863964) + (xy 293.920378 178.722393) (xy 293.920375 178.722388) (xy 293.88002 178.669796) (xy 293.871135 178.646815) + (xy 293.858434 178.625698) (xy 293.858757 178.614797) (xy 293.854826 178.604627) (xy 293.859776 178.580489) + (xy 293.860508 178.555859) (xy 293.867582 178.542432) (xy 293.868864 178.536182) (xy 293.876116 178.524204) + (xy 293.877987 178.521473) (xy 293.920812 178.465663) (xy 293.927791 178.448813) (xy 293.935113 178.438132) + (xy 293.952549 178.423906) (xy 293.966667 178.406386) (xy 293.979098 178.402247) (xy 293.989252 178.393964) + (xy 294.01161 178.391424) (xy 294.03296 178.384317) (xy 294.045656 178.387556) (xy 294.058675 178.386078) + (xy 294.078854 178.396027) (xy 294.10066 178.401592) (xy 294.118942 178.415793) (xy 294.121342 178.416977) + (xy 294.12211 178.418255) (xy 294.125074 178.420557) (xy 294.337431 178.632914) (xy 294.370916 178.694237) + (xy 294.37375 178.720595) (xy 294.37375 180.479404) (xy 294.354065 180.546443) (xy 294.337435 180.56708) + (xy 294.289256 180.61526) (xy 294.245012 180.659504) (xy 294.183688 180.692988) (xy 294.113997 180.688004) + (xy 294.109879 180.686383) (xy 294.034751 180.655264) (xy 294.034739 180.655261) (xy 293.880095 180.6245) + (xy 293.880092 180.6245) (xy 293.722408 180.6245) (xy 293.722405 180.6245) (xy 293.56776 180.655261) + (xy 293.567748 180.655264) (xy 293.422077 180.715602) (xy 293.422064 180.715609) (xy 293.290961 180.80321) + (xy 293.290957 180.803213) (xy 293.179463 180.914707) (xy 293.17946 180.914711) (xy 293.091859 181.045814) + (xy 293.091852 181.045827) (xy 293.031514 181.191498) (xy 293.031511 181.19151) (xy 293.00075 181.346153) + (xy 293.00075 181.503846) (xy 293.031511 181.658489) (xy 293.031514 181.658501) (xy 293.091852 181.804172) + (xy 293.091859 181.804185) (xy 293.17946 181.935288) (xy 293.179463 181.935292) (xy 293.290957 182.046786) + (xy 293.290961 182.046789) (xy 293.422064 182.13439) (xy 293.422077 182.134397) (xy 293.567748 182.194735) + (xy 293.567753 182.194737) (xy 293.722403 182.225499) (xy 293.722406 182.2255) (xy 293.722408 182.2255) + (xy 293.880094 182.2255) (xy 293.880095 182.225499) (xy 294.034747 182.194737) (xy 294.180429 182.134394) + (xy 294.311539 182.046789) (xy 294.423039 181.935289) (xy 294.510644 181.804179) (xy 294.570987 181.658497) + (xy 294.60175 181.503842) (xy 294.60175 181.346158) (xy 294.60175 181.346155) (xy 294.601749 181.346153) + (xy 294.570987 181.191503) (xy 294.539865 181.116369) (xy 294.532397 181.046902) (xy 294.563672 180.984422) + (xy 294.566746 180.981236) (xy 294.571559 180.976423) (xy 294.794116 180.753868) (xy 294.82875 180.670253) + (xy 294.82875 180.579747) (xy 294.82875 178.529747) (xy 294.812079 178.4895) (xy 294.794116 178.446132) + (xy 294.400484 178.0525) (xy 294.030818 177.682834) (xy 294.016114 177.655906) (xy 293.999522 177.630088) + (xy 293.99863 177.623887) (xy 293.997333 177.621511) (xy 293.994499 177.595153) (xy 293.994499 177.477722) + (xy 305.2435 177.477722) (xy 305.2435 178.210078) (xy 305.258491 178.323954) (xy 305.258493 178.323962) + (xy 305.317187 178.465662) (xy 305.357665 178.518415) (xy 305.382858 178.583584) (xy 305.368819 178.652029) + (xy 305.357665 178.669385) (xy 305.317187 178.722137) (xy 305.258493 178.863836) (xy 305.258492 178.863838) + (xy 305.2435 178.977722) (xy 305.2435 179.710078) (xy 305.258491 179.823954) (xy 305.258492 179.82396) + (xy 305.258493 179.823963) (xy 305.258576 179.824163) (xy 305.317187 179.965662) (xy 305.317341 179.965863) + (xy 305.410556 180.087344) (xy 305.532237 180.180712) (xy 305.673937 180.239407) (xy 305.787823 180.2544) + (xy 306.157554 180.254399) (xy 306.224593 180.274083) (xy 306.245235 180.290718) (xy 307.647093 181.692577) + (xy 307.680578 181.7539) (xy 307.681029 181.756065) (xy 307.681511 181.758492) (xy 307.681514 181.758501) + (xy 307.741852 181.904172) (xy 307.741859 181.904185) (xy 307.82946 182.035288) (xy 307.829463 182.035292) + (xy 307.940957 182.146786) (xy 307.940961 182.146789) (xy 308.072064 182.23439) (xy 308.072077 182.234397) + (xy 308.217748 182.294735) (xy 308.217753 182.294737) (xy 308.372403 182.325499) (xy 308.372406 182.3255) + (xy 308.372408 182.3255) (xy 308.530094 182.3255) (xy 308.530095 182.325499) (xy 308.684747 182.294737) + (xy 308.830429 182.234394) (xy 308.961539 182.146789) (xy 309.073039 182.035289) (xy 309.160644 181.904179) + (xy 309.220987 181.758497) (xy 309.25175 181.603842) (xy 309.25175 181.446158) (xy 309.25175 181.446155) + (xy 309.251749 181.446153) (xy 309.238455 181.37932) (xy 309.220987 181.291503) (xy 309.217704 181.283578) + (xy 309.160647 181.145827) (xy 309.16064 181.145814) (xy 309.073039 181.014711) (xy 309.073036 181.014707) + (xy 308.961542 180.903213) (xy 308.961538 180.90321) (xy 308.839252 180.821501) (xy 308.794447 180.767889) + (xy 308.78574 180.698564) (xy 308.815894 180.635536) (xy 308.875337 180.598817) (xy 308.908143 180.594399) + (xy 309.864401 180.594399) (xy 309.872584 180.594399) (xy 309.872608 180.594406) (xy 309.904765 180.594402) + (xy 309.905045 180.594484) (xy 309.967304 180.611334) (xy 309.99513 180.627591) (xy 309.995132 180.627591) + (xy 310.00128 180.631183) (xy 310.002935 180.632008) (xy 310.017078 180.64025) (xy 310.1888 180.702321) + (xy 310.368921 180.732282) (xy 310.548598 180.72919) (xy 310.551491 180.729141) (xy 310.730466 180.693005) + (xy 310.730469 180.693003) (xy 310.730474 180.693003) (xy 310.89996 180.625062) (xy 311.054346 180.527563) + (xy 311.056162 180.525888) (xy 311.18853 180.40373) (xy 311.188532 180.403728) (xy 311.188533 180.403727) + (xy 311.263696 180.303502) (xy 311.319665 180.26168) (xy 311.362898 180.253899) (xy 311.619 180.253899) + (xy 312.119 180.253899) (xy 312.174932 180.253899) (xy 312.258924 180.24335) (xy 312.391757 180.188329) + (xy 312.458604 180.1364) (xy 312.458611 180.136394) (xy 312.926494 179.668512) (xy 312.926499 179.668506) + (xy 312.978427 179.60166) (xy 312.981642 179.5939) (xy 312.119 179.5939) (xy 312.119 180.253899) + (xy 311.619 180.253899) (xy 311.619 179.4679) (xy 311.638685 179.400861) (xy 311.691489 179.355106) + (xy 311.743 179.3439) (xy 311.869 179.3439) (xy 311.869 179.2179) (xy 311.888685 179.150861) (xy 311.941489 179.105106) + (xy 311.993 179.0939) (xy 313.044 179.0939) (xy 313.044 178.977753) (xy 313.02902 178.863969) (xy 313.029018 178.863964) + (xy 312.970378 178.722393) (xy 312.970375 178.722388) (xy 312.93002 178.669796) (xy 312.904826 178.604627) + (xy 312.918864 178.536182) (xy 312.930019 178.518826) (xy 312.970812 178.465663) (xy 313.029507 178.323963) + (xy 313.0445 178.210077) (xy 313.044499 177.477724) (xy 313.044499 177.477722) (xy 324.2935 177.477722) + (xy 324.2935 178.210078) (xy 324.308491 178.323954) (xy 324.308493 178.323962) (xy 324.367187 178.465662) + (xy 324.407665 178.518415) (xy 324.432858 178.583584) (xy 324.418819 178.652029) (xy 324.407665 178.669385) + (xy 324.367187 178.722137) (xy 324.308493 178.863836) (xy 324.308492 178.863838) (xy 324.2935 178.977722) + (xy 324.2935 179.710078) (xy 324.308491 179.823954) (xy 324.308492 179.82396) (xy 324.308493 179.823963) + (xy 324.308576 179.824163) (xy 324.367187 179.965662) (xy 324.367341 179.965863) (xy 324.460556 180.087344) + (xy 324.582237 180.180712) (xy 324.723937 180.239407) (xy 324.837823 180.2544) (xy 325.117501 180.254399) + (xy 325.184539 180.274083) (xy 325.230294 180.326887) (xy 325.2415 180.378399) (xy 325.2415 180.630295) + (xy 325.2415 180.720801) (xy 325.276135 180.804416) (xy 326.195347 181.723629) (xy 326.254467 181.748116) + (xy 326.25447 181.748118) (xy 326.254471 181.748118) (xy 326.264616 181.75232) (xy 326.278962 181.758263) + (xy 350.927046 181.758263) (xy 350.927047 181.758263) (xy 351.010662 181.723628) (xy 351.63031 181.10398) + (xy 351.631172 181.1019) (xy 351.664945 181.020365) (xy 351.664945 178.548607) (xy 351.647747 178.507088) + (xy 351.630311 178.464992) (xy 351.267819 178.1025) (xy 350.929318 177.763999) (xy 350.895833 177.702676) + (xy 350.892999 177.676318) (xy 350.892999 177.477721) (xy 350.878122 177.364711) (xy 350.878007 177.363837) + (xy 350.819312 177.222137) (xy 350.725944 177.100456) (xy 350.604524 177.007288) (xy 350.604262 177.007087) + (xy 350.462563 176.948393) (xy 350.462561 176.948392) (xy 350.348678 176.9334) (xy 350.348677 176.9334) + (xy 349.211073 176.9334) (xy 349.144034 176.913715) (xy 349.111872 176.883798) (xy 349.037061 176.784044) + (xy 348.902869 176.660204) (xy 348.902866 176.660202) (xy 348.902865 176.660201) (xy 348.902862 176.660199) + (xy 348.748477 176.562701) (xy 348.578987 176.494758) (xy 348.578977 176.494756) (xy 348.399992 176.458618) + (xy 348.399999 176.458618) (xy 348.228294 176.455665) (xy 348.217418 176.455478) (xy 348.217417 176.455478) + (xy 348.217414 176.455478) (xy 348.037297 176.485438) (xy 348.037284 176.485441) (xy 347.865563 176.547513) + (xy 347.851048 176.55597) (xy 347.850963 176.556019) (xy 347.843876 176.56014) (xy 347.84363 176.560208) + (xy 347.815838 176.576444) (xy 347.81559 176.576589) (xy 347.812863 176.577259) (xy 347.753246 176.593396) + (xy 347.712901 176.593393) (xy 347.712797 176.5934) (xy 346.272096 176.5934) (xy 346.263914 176.593398) + (xy 346.263892 176.593393) (xy 346.233965 176.593395) (xy 346.231728 176.593395) (xy 346.231446 176.593312) + (xy 346.169193 176.576462) (xy 346.141371 176.560208) (xy 346.135305 176.556664) (xy 346.133607 176.555817) + (xy 346.126257 176.551534) (xy 346.119421 176.54755) (xy 345.947697 176.485478) (xy 345.947691 176.485477) + (xy 345.767581 176.455519) (xy 345.767578 176.455519) (xy 345.759039 176.455665) (xy 345.585007 176.458659) + (xy 345.406034 176.494794) (xy 345.406023 176.494797) (xy 345.236542 176.562737) (xy 345.236541 176.562737) + (xy 345.082161 176.660232) (xy 345.082158 176.660234) (xy 344.95379 176.7787) (xy 344.947969 176.784072) + (xy 344.896737 176.852387) (xy 344.873181 176.883797) (xy 344.817211 176.925619) (xy 344.773978 176.9334) + (xy 343.636321 176.9334) (xy 343.522445 176.948391) (xy 343.522437 176.948393) (xy 343.380737 177.007087) + (xy 343.259056 177.100456) (xy 343.165687 177.222137) (xy 343.106993 177.363836) (xy 343.106992 177.363838) + (xy 343.092 177.477722) (xy 343.092 178.210078) (xy 343.106991 178.323954) (xy 343.106993 178.323962) + (xy 343.165687 178.465662) (xy 343.206165 178.518415) (xy 343.231358 178.583584) (xy 343.217319 178.652029) + (xy 343.206165 178.669385) (xy 343.165687 178.722137) (xy 343.106993 178.863836) (xy 343.106992 178.863838) + (xy 343.092 178.977722) (xy 343.092 179.710078) (xy 343.106991 179.823954) (xy 343.106992 179.82396) + (xy 343.106993 179.823963) (xy 343.107076 179.824163) (xy 343.165687 179.965662) (xy 343.165841 179.965863) + (xy 343.259056 180.087344) (xy 343.380737 180.180712) (xy 343.522437 180.239407) (xy 343.636323 180.2544) + (xy 344.773929 180.254399) (xy 344.840968 180.274084) (xy 344.873131 180.304002) (xy 344.878925 180.311728) + (xy 344.947938 180.403752) (xy 344.947939 180.403753) (xy 344.94794 180.403754) (xy 345.082132 180.527595) + (xy 345.236525 180.625097) (xy 345.336724 180.665263) (xy 345.406014 180.693039) (xy 345.406015 180.693039) + (xy 345.406017 180.69304) (xy 345.585008 180.729179) (xy 345.585002 180.729179) (xy 345.601322 180.729459) + (xy 345.767584 180.73232) (xy 345.947712 180.702358) (xy 346.036521 180.670256) (xy 346.119436 180.640285) + (xy 346.119437 180.640283) (xy 346.11944 180.640283) (xy 346.134712 180.631383) (xy 346.141159 180.627635) + (xy 346.14145 180.627557) (xy 346.169333 180.61126) (xy 346.169451 180.611192) (xy 346.172668 180.610401) + (xy 346.231762 180.594399) (xy 347.712892 180.594399) (xy 347.713014 180.594406) (xy 347.721105 180.594405) + (xy 347.721108 180.594406) (xy 347.753242 180.594402) (xy 347.815804 180.611334) (xy 347.84363 180.627591) + (xy 347.843632 180.627591) (xy 347.84978 180.631183) (xy 347.851435 180.632008) (xy 347.865578 180.64025) + (xy 348.0373 180.702321) (xy 348.217421 180.732282) (xy 348.397098 180.72919) (xy 348.399991 180.729141) + (xy 348.578966 180.693005) (xy 348.578969 180.693003) (xy 348.578974 180.693003) (xy 348.74846 180.625062) + (xy 348.902846 180.527563) (xy 348.904662 180.525888) (xy 349.03703 180.40373) (xy 349.037032 180.403728) + (xy 349.037033 180.403727) (xy 349.112196 180.303502) (xy 349.168165 180.26168) (xy 349.211398 180.253899) + (xy 349.4675 180.253899) (xy 349.9675 180.253899) (xy 350.023432 180.253899) (xy 350.107424 180.24335) + (xy 350.240257 180.188329) (xy 350.307104 180.1364) (xy 350.307111 180.136394) (xy 350.774994 179.668512) + (xy 350.774999 179.668506) (xy 350.826927 179.60166) (xy 350.830142 179.5939) (xy 349.9675 179.5939) + (xy 349.9675 180.253899) (xy 349.4675 180.253899) (xy 349.4675 179.4679) (xy 349.487185 179.400861) + (xy 349.539989 179.355106) (xy 349.5915 179.3439) (xy 349.7175 179.3439) (xy 349.7175 179.2179) + (xy 349.737185 179.150861) (xy 349.789989 179.105106) (xy 349.8415 179.0939) (xy 350.8925 179.0939) + (xy 350.8925 178.977753) (xy 350.87752 178.863969) (xy 350.877518 178.863964) (xy 350.818878 178.722393) + (xy 350.818875 178.722388) (xy 350.77852 178.669796) (xy 350.768477 178.64382) (xy 350.755425 178.619224) + (xy 350.756054 178.611684) (xy 350.753326 178.604627) (xy 350.758921 178.577346) (xy 350.761238 178.549597) + (xy 350.766554 178.540131) (xy 350.767364 178.536182) (xy 350.778516 178.518828) (xy 350.806265 178.482665) + (xy 350.862693 178.441463) (xy 350.932439 178.437308) (xy 350.992322 178.470471) (xy 351.173626 178.651774) + (xy 351.207111 178.713097) (xy 351.209945 178.739455) (xy 351.209945 180.829517) (xy 351.19026 180.896556) + (xy 351.173626 180.917198) (xy 350.82388 181.266944) (xy 350.762557 181.300429) (xy 350.736199 181.303263) + (xy 326.469811 181.303263) (xy 326.402772 181.283578) (xy 326.38213 181.266944) (xy 325.732819 180.617633) + (xy 325.718115 180.590705) (xy 325.701523 180.564887) (xy 325.700631 180.558686) (xy 325.699334 180.55631) + (xy 325.6965 180.529952) (xy 325.6965 180.378399) (xy 325.716185 180.31136) (xy 325.768989 180.265605) + (xy 325.8205 180.254399) (xy 325.975429 180.254399) (xy 326.042468 180.274084) (xy 326.074631 180.304002) + (xy 326.080425 180.311728) (xy 326.149438 180.403752) (xy 326.149439 180.403753) (xy 326.14944 180.403754) + (xy 326.283632 180.527595) (xy 326.438025 180.625097) (xy 326.538224 180.665263) (xy 326.607514 180.693039) + (xy 326.607515 180.693039) (xy 326.607517 180.69304) (xy 326.786508 180.729179) (xy 326.786502 180.729179) + (xy 326.802822 180.729459) (xy 326.969084 180.73232) (xy 327.149212 180.702358) (xy 327.238021 180.670256) + (xy 327.320936 180.640285) (xy 327.320937 180.640283) (xy 327.32094 180.640283) (xy 327.336212 180.631383) + (xy 327.342659 180.627635) (xy 327.34295 180.627557) (xy 327.370833 180.61126) (xy 327.370951 180.611192) + (xy 327.374168 180.610401) (xy 327.433262 180.594399) (xy 328.914392 180.594399) (xy 328.914514 180.594406) + (xy 328.922605 180.594405) (xy 328.922608 180.594406) (xy 328.954742 180.594402) (xy 329.017304 180.611334) + (xy 329.04513 180.627591) (xy 329.045132 180.627591) (xy 329.05128 180.631183) (xy 329.052935 180.632008) + (xy 329.067078 180.64025) (xy 329.2388 180.702321) (xy 329.418921 180.732282) (xy 329.598598 180.72919) + (xy 329.601491 180.729141) (xy 329.780466 180.693005) (xy 329.780469 180.693003) (xy 329.780474 180.693003) + (xy 329.94996 180.625062) (xy 330.104346 180.527563) (xy 330.106162 180.525888) (xy 330.23853 180.40373) + (xy 330.238532 180.403728) (xy 330.238533 180.403727) (xy 330.313696 180.303502) (xy 330.369665 180.26168) + (xy 330.412898 180.253899) (xy 330.669 180.253899) (xy 331.169 180.253899) (xy 331.224932 180.253899) + (xy 331.308924 180.24335) (xy 331.441757 180.188329) (xy 331.508604 180.1364) (xy 331.508611 180.136394) + (xy 331.976494 179.668512) (xy 331.976499 179.668506) (xy 332.028427 179.60166) (xy 332.031642 179.5939) + (xy 331.169 179.5939) (xy 331.169 180.253899) (xy 330.669 180.253899) (xy 330.669 179.4679) (xy 330.688685 179.400861) + (xy 330.741489 179.355106) (xy 330.793 179.3439) (xy 330.919 179.3439) (xy 330.919 179.2179) (xy 330.938685 179.150861) + (xy 330.991489 179.105106) (xy 331.043 179.0939) (xy 332.094 179.0939) (xy 332.094 178.977753) (xy 332.07902 178.863969) + (xy 332.079018 178.863964) (xy 332.020378 178.722393) (xy 332.020375 178.722388) (xy 331.98002 178.669796) + (xy 331.954826 178.604627) (xy 331.968864 178.536182) (xy 331.980019 178.518826) (xy 332.020812 178.465663) + (xy 332.079507 178.323963) (xy 332.09162 178.231954) (xy 332.094469 178.210315) (xy 332.122735 178.146418) + (xy 332.18106 178.107947) (xy 332.217408 178.1025) (xy 332.596175 178.1025) (xy 332.663214 178.122185) + (xy 332.708969 178.174989) (xy 332.710715 178.178999) (xy 332.732654 178.231963) (xy 332.741857 178.254181) + (xy 332.741859 178.254185) (xy 332.82946 178.385288) (xy 332.829463 178.385292) (xy 332.940957 178.496786) + (xy 332.940961 178.496789) (xy 333.072064 178.58439) (xy 333.072077 178.584397) (xy 333.215539 178.64382) + (xy 333.217753 178.644737) (xy 333.344738 178.669996) (xy 333.372403 178.675499) (xy 333.372406 178.6755) + (xy 333.372408 178.6755) (xy 333.530094 178.6755) (xy 333.530095 178.675499) (xy 333.684747 178.644737) + (xy 333.807479 178.5939) (xy 333.830422 178.584397) (xy 333.830422 178.584396) (xy 333.830429 178.584394) + (xy 333.961539 178.496789) (xy 334.073039 178.385289) (xy 334.160644 178.254179) (xy 334.220987 178.108497) + (xy 334.25175 177.953842) (xy 334.25175 177.796158) (xy 334.25175 177.796155) (xy 334.251749 177.796153) + (xy 334.232173 177.697738) (xy 334.220987 177.641503) (xy 334.209737 177.614343) (xy 334.160647 177.495827) + (xy 334.16064 177.495814) (xy 334.073039 177.364711) (xy 334.073036 177.364707) (xy 333.961542 177.253213) + (xy 333.961538 177.25321) (xy 333.830435 177.165609) (xy 333.830422 177.165602) (xy 333.684751 177.105264) + (xy 333.684739 177.105261) (xy 333.530095 177.0745) (xy 333.530092 177.0745) (xy 333.372408 177.0745) + (xy 333.372405 177.0745) (xy 333.21776 177.105261) (xy 333.217748 177.105264) (xy 333.072077 177.165602) + (xy 333.072064 177.165609) (xy 332.940961 177.25321) (xy 332.940957 177.253213) (xy 332.829463 177.364707) + (xy 332.82946 177.364711) (xy 332.741859 177.495814) (xy 332.741857 177.495818) (xy 332.739156 177.502339) + (xy 332.710734 177.570954) (xy 332.666896 177.625356) (xy 332.600602 177.647421) (xy 332.596175 177.6475) + (xy 332.218499 177.6475) (xy 332.15146 177.627815) (xy 332.105705 177.575011) (xy 332.094499 177.5235) + (xy 332.094499 177.477721) (xy 332.079622 177.364711) (xy 332.079507 177.363837) (xy 332.020812 177.222137) + (xy 331.927444 177.100456) (xy 331.806024 177.007288) (xy 331.805762 177.007087) (xy 331.664063 176.948393) + (xy 331.664061 176.948392) (xy 331.550178 176.9334) (xy 331.550177 176.9334) (xy 330.412573 176.9334) + (xy 330.345534 176.913715) (xy 330.313372 176.883798) (xy 330.238561 176.784044) (xy 330.104369 176.660204) + (xy 330.104366 176.660202) (xy 330.104365 176.660201) (xy 330.104362 176.660199) (xy 329.949977 176.562701) + (xy 329.780487 176.494758) (xy 329.780477 176.494756) (xy 329.601492 176.458618) (xy 329.601499 176.458618) + (xy 329.429794 176.455665) (xy 329.418918 176.455478) (xy 329.418917 176.455478) (xy 329.418914 176.455478) + (xy 329.238797 176.485438) (xy 329.238784 176.485441) (xy 329.067063 176.547513) (xy 329.052548 176.55597) + (xy 329.052463 176.556019) (xy 329.045376 176.56014) (xy 329.04513 176.560208) (xy 329.017338 176.576444) + (xy 329.01709 176.576589) (xy 329.014363 176.577259) (xy 328.954746 176.593396) (xy 328.914401 176.593393) + (xy 328.914297 176.5934) (xy 327.473596 176.5934) (xy 327.465414 176.593398) (xy 327.465392 176.593393) + (xy 327.435465 176.593395) (xy 327.433228 176.593395) (xy 327.432946 176.593312) (xy 327.370693 176.576462) + (xy 327.342871 176.560208) (xy 327.336805 176.556664) (xy 327.335107 176.555817) (xy 327.327757 176.551534) + (xy 327.320921 176.54755) (xy 327.149197 176.485478) (xy 327.149191 176.485477) (xy 326.969081 176.455519) + (xy 326.969078 176.455519) (xy 326.960539 176.455665) (xy 326.786507 176.458659) (xy 326.607534 176.494794) + (xy 326.607523 176.494797) (xy 326.438042 176.562737) (xy 326.438041 176.562737) (xy 326.283661 176.660232) + (xy 326.283658 176.660234) (xy 326.15529 176.7787) (xy 326.149469 176.784072) (xy 326.098237 176.852387) + (xy 326.074681 176.883797) (xy 326.018711 176.925619) (xy 325.975478 176.9334) (xy 324.837821 176.9334) + (xy 324.723945 176.948391) (xy 324.723937 176.948393) (xy 324.582237 177.007087) (xy 324.460556 177.100456) + (xy 324.367187 177.222137) (xy 324.308493 177.363836) (xy 324.308492 177.363838) (xy 324.2935 177.477722) + (xy 313.044499 177.477722) (xy 313.044497 177.47771) (xy 313.029622 177.364711) (xy 313.029507 177.363837) + (xy 312.970812 177.222137) (xy 312.877444 177.100456) (xy 312.756024 177.007288) (xy 312.755762 177.007087) + (xy 312.745118 177.002678) (xy 312.690716 176.958835) (xy 312.668653 176.89254) (xy 312.670957 176.863926) + (xy 312.671396 176.861722) (xy 312.680333 176.816793) (xy 312.6845 176.795844) (xy 312.6845 176.638155) + (xy 312.684499 176.638153) (xy 312.675637 176.5936) (xy 312.653737 176.483503) (xy 312.643447 176.45866) + (xy 312.593397 176.337827) (xy 312.59339 176.337814) (xy 312.505789 176.206711) (xy 312.505786 176.206707) + (xy 312.394292 176.095213) (xy 312.394288 176.09521) (xy 312.263185 176.007609) (xy 312.263172 176.007602) + (xy 312.117501 175.947264) (xy 312.117489 175.947261) (xy 311.962845 175.9165) (xy 311.962842 175.9165) + (xy 311.805158 175.9165) (xy 311.805155 175.9165) (xy 311.65051 175.947261) (xy 311.650498 175.947264) + (xy 311.504827 176.007602) (xy 311.504814 176.007609) (xy 311.373711 176.09521) (xy 311.373707 176.095213) + (xy 311.262213 176.206707) (xy 311.26221 176.206711) (xy 311.174609 176.337814) (xy 311.174602 176.337827) + (xy 311.114264 176.483498) (xy 311.11426 176.483512) (xy 311.111565 176.49706) (xy 311.079178 176.55897) + (xy 311.018461 176.593542) (xy 310.948691 176.589799) (xy 310.923737 176.577706) (xy 310.89998 176.562702) + (xy 310.899977 176.562701) (xy 310.730487 176.494758) (xy 310.730477 176.494756) (xy 310.551492 176.458618) + (xy 310.551499 176.458618) (xy 310.379794 176.455665) (xy 310.368918 176.455478) (xy 310.368917 176.455478) + (xy 310.368914 176.455478) (xy 310.188797 176.485438) (xy 310.188784 176.485441) (xy 310.017063 176.547513) + (xy 310.002548 176.55597) (xy 310.002463 176.556019) (xy 309.995376 176.56014) (xy 309.99513 176.560208) + (xy 309.967338 176.576444) (xy 309.96709 176.576589) (xy 309.964363 176.577259) (xy 309.904746 176.593396) + (xy 309.864401 176.593393) (xy 309.864297 176.5934) (xy 308.423596 176.5934) (xy 308.415414 176.593398) + (xy 308.415392 176.593393) (xy 308.385465 176.593395) (xy 308.383228 176.593395) (xy 308.382946 176.593312) + (xy 308.320693 176.576462) (xy 308.292871 176.560208) (xy 308.286805 176.556664) (xy 308.285107 176.555817) + (xy 308.277757 176.551534) (xy 308.270921 176.54755) (xy 308.099197 176.485478) (xy 308.099191 176.485477) + (xy 307.919081 176.455519) (xy 307.919078 176.455519) (xy 307.910539 176.455665) (xy 307.736507 176.458659) + (xy 307.557534 176.494794) (xy 307.557523 176.494797) (xy 307.388042 176.562737) (xy 307.388041 176.562737) + (xy 307.233661 176.660232) (xy 307.233658 176.660234) (xy 307.10529 176.7787) (xy 307.099469 176.784072) + (xy 307.048237 176.852387) (xy 307.024681 176.883797) (xy 306.968711 176.925619) (xy 306.925478 176.9334) + (xy 305.787821 176.9334) (xy 305.673945 176.948391) (xy 305.673937 176.948393) (xy 305.532237 177.007087) + (xy 305.410556 177.100456) (xy 305.317187 177.222137) (xy 305.258493 177.363836) (xy 305.258492 177.363838) + (xy 305.2435 177.477722) (xy 293.994499 177.477722) (xy 293.994499 177.477721) (xy 293.979622 177.364711) + (xy 293.979507 177.363837) (xy 293.920812 177.222137) (xy 293.827444 177.100456) (xy 293.706024 177.007288) + (xy 293.705762 177.007087) (xy 293.564063 176.948393) (xy 293.564061 176.948392) (xy 293.450178 176.9334) + (xy 293.450177 176.9334) (xy 292.312573 176.9334) (xy 292.245534 176.913715) (xy 292.213372 176.883798) + (xy 292.138561 176.784044) (xy 292.004369 176.660204) (xy 292.004366 176.660202) (xy 292.004365 176.660201) + (xy 292.004362 176.660199) (xy 291.849977 176.562701) (xy 291.680487 176.494758) (xy 291.680477 176.494756) + (xy 291.501492 176.458618) (xy 291.501499 176.458618) (xy 291.329794 176.455665) (xy 291.318918 176.455478) + (xy 291.318917 176.455478) (xy 291.318914 176.455478) (xy 291.138797 176.485438) (xy 291.138784 176.485441) + (xy 290.967063 176.547513) (xy 290.952548 176.55597) (xy 290.952463 176.556019) (xy 290.945376 176.56014) + (xy 290.94513 176.560208) (xy 290.917338 176.576444) (xy 290.91709 176.576589) (xy 290.914363 176.577259) + (xy 290.854746 176.593396) (xy 290.814401 176.593393) (xy 290.814297 176.5934) (xy 289.373596 176.5934) + (xy 289.365414 176.593398) (xy 289.365392 176.593393) (xy 289.335465 176.593395) (xy 289.333228 176.593395) + (xy 289.332946 176.593312) (xy 289.270693 176.576462) (xy 289.242871 176.560208) (xy 289.236805 176.556664) + (xy 289.235107 176.555817) (xy 289.227757 176.551534) (xy 289.220921 176.54755) (xy 289.049197 176.485478) + (xy 289.049191 176.485477) (xy 288.869081 176.455519) (xy 288.869078 176.455519) (xy 288.860539 176.455665) + (xy 288.686507 176.458659) (xy 288.507534 176.494794) (xy 288.507523 176.494797) (xy 288.338042 176.562737) + (xy 288.338041 176.562737) (xy 288.183661 176.660232) (xy 288.183658 176.660234) (xy 288.05529 176.7787) + (xy 288.049469 176.784072) (xy 287.998237 176.852387) (xy 287.974681 176.883797) (xy 287.918711 176.925619) + (xy 287.875478 176.9334) (xy 286.737821 176.9334) (xy 286.623945 176.948391) (xy 286.623937 176.948393) + (xy 286.482237 177.007087) (xy 286.360556 177.100456) (xy 286.267187 177.222137) (xy 286.208493 177.363836) + (xy 286.208492 177.363838) (xy 286.1935 177.477722) (xy 276.191356 177.477722) (xy 276.230789 177.438289) + (xy 276.264655 177.387606) (xy 276.31839 177.307185) (xy 276.31839 177.307184) (xy 276.318394 177.307179) + (xy 276.378737 177.161497) (xy 276.4095 177.006842) (xy 276.4095 176.849158) (xy 276.4095 176.849155) + (xy 276.409499 176.849153) (xy 276.406404 176.833592) (xy 276.378737 176.694503) (xy 276.37773 176.692071) + (xy 276.318397 176.548827) (xy 276.31839 176.548814) (xy 276.230789 176.417711) (xy 276.230786 176.417707) + (xy 276.119292 176.306213) (xy 276.119288 176.30621) (xy 275.988185 176.218609) (xy 275.988172 176.218602) + (xy 275.842501 176.158264) (xy 275.842489 176.158261) (xy 275.687845 176.1275) (xy 275.687842 176.1275) + (xy 275.530158 176.1275) (xy 275.530155 176.1275) (xy 275.37551 176.158261) (xy 275.375498 176.158264) + (xy 275.229827 176.218602) (xy 275.229814 176.218609) (xy 275.098711 176.30621) (xy 275.098707 176.306213) + (xy 274.987213 176.417707) (xy 274.98721 176.417711) (xy 274.899609 176.548814) (xy 274.899607 176.548818) + (xy 274.893857 176.562701) (xy 274.868484 176.623954) (xy 274.824646 176.678356) (xy 274.758352 176.700421) + (xy 274.753925 176.7005) (xy 274.388046 176.7005) (xy 274.30443 176.735136) (xy 274.142485 176.897081) + (xy 274.081162 176.930566) (xy 274.054804 176.9334) (xy 273.010973 176.9334) (xy 272.943934 176.913715) + (xy 272.911772 176.883798) (xy 272.836961 176.784044) (xy 272.702769 176.660204) (xy 272.702766 176.660202) + (xy 272.702765 176.660201) (xy 272.702762 176.660199) (xy 272.548377 176.562701) (xy 272.378887 176.494758) + (xy 272.378877 176.494756) (xy 272.199892 176.458618) (xy 272.199899 176.458618) (xy 272.028194 176.455665) + (xy 272.017318 176.455478) (xy 272.017317 176.455478) (xy 272.017314 176.455478) (xy 271.837197 176.485438) + (xy 271.837184 176.485441) (xy 271.665463 176.547513) (xy 271.650948 176.55597) (xy 271.650863 176.556019) + (xy 271.643776 176.56014) (xy 271.64353 176.560208) (xy 271.615738 176.576444) (xy 271.61549 176.576589) + (xy 271.612763 176.577259) (xy 271.553146 176.593396) (xy 271.512801 176.593393) (xy 271.512697 176.5934) + (xy 270.071996 176.5934) (xy 270.063814 176.593398) (xy 270.063792 176.593393) (xy 270.033865 176.593395) + (xy 270.031628 176.593395) (xy 270.031346 176.593312) (xy 269.969093 176.576462) (xy 269.941271 176.560208) + (xy 269.935205 176.556664) (xy 269.933507 176.555817) (xy 269.926157 176.551534) (xy 269.919321 176.54755) + (xy 269.747597 176.485478) (xy 269.747591 176.485477) (xy 269.567481 176.455519) (xy 269.567478 176.455519) + (xy 269.558939 176.455665) (xy 269.384907 176.458659) (xy 269.205934 176.494794) (xy 269.205923 176.494797) + (xy 269.036442 176.562737) (xy 269.036441 176.562737) (xy 268.882061 176.660232) (xy 268.882058 176.660234) + (xy 268.75369 176.7787) (xy 268.747869 176.784072) (xy 268.696637 176.852387) (xy 268.673081 176.883797) + (xy 268.617111 176.925619) (xy 268.573878 176.9334) (xy 267.436221 176.9334) (xy 267.322345 176.948391) + (xy 267.322337 176.948393) (xy 267.180637 177.007087) (xy 267.058956 177.100456) (xy 266.965587 177.222137) + (xy 266.906893 177.363836) (xy 266.906892 177.363838) (xy 266.8919 177.477722) (xy 266.8919 178.210078) + (xy 266.906891 178.323954) (xy 266.906893 178.323962) (xy 266.965587 178.465662) (xy 267.006065 178.518415) + (xy 267.031258 178.583584) (xy 267.017219 178.652029) (xy 267.006065 178.669385) (xy 266.965587 178.722137) + (xy 266.906893 178.863836) (xy 266.906892 178.863838) (xy 266.8919 178.977722) (xy 266.8919 179.710078) + (xy 266.906891 179.823954) (xy 266.906892 179.82396) (xy 266.906893 179.823963) (xy 266.906976 179.824163) + (xy 266.965587 179.965662) (xy 266.965741 179.965863) (xy 267.058956 180.087344) (xy 267.161004 180.165647) + (xy 267.18064 180.180714) (xy 267.187676 180.184777) (xy 267.186047 180.187597) (xy 267.22859 180.221865) + (xy 267.25067 180.288155) (xy 267.25075 180.292608) (xy 267.25075 180.303846) (xy 267.281511 180.458489) + (xy 267.281514 180.458501) (xy 267.341852 180.604172) (xy 267.341859 180.604185) (xy 267.42946 180.735288) + (xy 267.429463 180.735292) (xy 267.540957 180.846786) (xy 267.540961 180.846789) (xy 267.672064 180.93439) + (xy 267.672071 180.934394) (xy 267.693003 180.943064) (xy 267.747407 180.986905) (xy 267.769473 181.053199) + (xy 267.752194 181.120898) (xy 267.701058 181.168509) (xy 267.645552 181.181626) (xy 250.280972 181.181626) + (xy 250.213933 181.161941) (xy 250.193291 181.145307) (xy 249.891416 180.843432) (xy 249.857931 180.782109) + (xy 249.862915 180.712417) (xy 249.904787 180.656484) (xy 249.970251 180.632067) (xy 250.025233 180.640653) + (xy 250.086624 180.665263) (xy 250.155914 180.693039) (xy 250.155915 180.693039) (xy 250.155917 180.69304) + (xy 250.334908 180.729179) (xy 250.334902 180.729179) (xy 250.351222 180.729459) (xy 250.517484 180.73232) + (xy 250.697612 180.702358) (xy 250.786421 180.670256) (xy 250.869336 180.640285) (xy 250.869337 180.640283) + (xy 250.86934 180.640283) (xy 250.884612 180.631383) (xy 250.891059 180.627635) (xy 250.89135 180.627557) + (xy 250.919233 180.61126) (xy 250.919351 180.611192) (xy 250.922568 180.610401) (xy 250.981662 180.594399) + (xy 252.462792 180.594399) (xy 252.462914 180.594406) (xy 252.471005 180.594405) (xy 252.471008 180.594406) + (xy 252.503142 180.594402) (xy 252.565704 180.611334) (xy 252.59353 180.627591) (xy 252.593532 180.627591) + (xy 252.59968 180.631183) (xy 252.601335 180.632008) (xy 252.615478 180.64025) (xy 252.7872 180.702321) + (xy 252.967321 180.732282) (xy 253.146998 180.72919) (xy 253.149891 180.729141) (xy 253.328866 180.693005) + (xy 253.328869 180.693003) (xy 253.328874 180.693003) (xy 253.49836 180.625062) (xy 253.652746 180.527563) + (xy 253.654562 180.525888) (xy 253.78693 180.40373) (xy 253.786932 180.403728) (xy 253.786933 180.403727) + (xy 253.862096 180.303502) (xy 253.918065 180.26168) (xy 253.961298 180.253899) (xy 254.2174 180.253899) + (xy 254.7174 180.253899) (xy 254.773332 180.253899) (xy 254.857324 180.24335) (xy 254.990157 180.188329) + (xy 255.057004 180.1364) (xy 255.057011 180.136394) (xy 255.524894 179.668512) (xy 255.524899 179.668506) + (xy 255.576827 179.60166) (xy 255.580042 179.5939) (xy 254.7174 179.5939) (xy 254.7174 180.253899) + (xy 254.2174 180.253899) (xy 254.2174 179.4679) (xy 254.237085 179.400861) (xy 254.289889 179.355106) + (xy 254.3414 179.3439) (xy 254.4674 179.3439) (xy 254.4674 179.2179) (xy 254.487085 179.150861) + (xy 254.539889 179.105106) (xy 254.5914 179.0939) (xy 255.6424 179.0939) (xy 255.6424 178.977753) + (xy 255.62742 178.863969) (xy 255.627418 178.863964) (xy 255.568778 178.722393) (xy 255.568775 178.722388) + (xy 255.52842 178.669796) (xy 255.503226 178.604627) (xy 255.517264 178.536182) (xy 255.528419 178.518826) + (xy 255.569212 178.465663) (xy 255.627907 178.323963) (xy 255.6429 178.210077) (xy 255.642899 177.579139) + (xy 255.662583 177.512101) (xy 255.679212 177.491464) (xy 255.744989 177.425689) (xy 255.832594 177.294579) + (xy 255.892937 177.148897) (xy 255.9237 176.994242) (xy 255.9237 176.836558) (xy 255.9237 176.836555) + (xy 255.923699 176.836553) (xy 255.921093 176.823451) (xy 255.892937 176.681903) (xy 255.890486 176.675986) + (xy 255.832597 176.536227) (xy 255.83259 176.536214) (xy 255.744989 176.405111) (xy 255.744986 176.405107) + (xy 255.633492 176.293613) (xy 255.633488 176.29361) (xy 255.502385 176.206009) (xy 255.502372 176.206002) + (xy 255.356701 176.145664) (xy 255.356689 176.145661) (xy 255.202045 176.1149) (xy 255.202042 176.1149) + (xy 255.044358 176.1149) (xy 255.044355 176.1149) (xy 254.88971 176.145661) (xy 254.889698 176.145664) + (xy 254.744027 176.206002) (xy 254.744014 176.206009) (xy 254.612911 176.29361) (xy 254.612907 176.293613) + (xy 254.501413 176.405107) (xy 254.50141 176.405111) (xy 254.413809 176.536214) (xy 254.413802 176.536227) + (xy 254.353464 176.681898) (xy 254.353461 176.681908) (xy 254.323289 176.833592) (xy 254.308574 176.861722) + (xy 254.295385 176.890603) (xy 254.292495 176.892459) (xy 254.290904 176.895503) (xy 254.263311 176.911215) + (xy 254.236607 176.928377) (xy 254.232013 176.929037) (xy 254.230188 176.930077) (xy 254.201672 176.9334) + (xy 253.960973 176.9334) (xy 253.893934 176.913715) (xy 253.861772 176.883798) (xy 253.786961 176.784044) + (xy 253.652769 176.660204) (xy 253.652766 176.660202) (xy 253.652765 176.660201) (xy 253.652762 176.660199) + (xy 253.498377 176.562701) (xy 253.328887 176.494758) (xy 253.328877 176.494756) (xy 253.149892 176.458618) + (xy 253.149899 176.458618) (xy 252.978194 176.455665) (xy 252.967318 176.455478) (xy 252.967317 176.455478) + (xy 252.967314 176.455478) (xy 252.787197 176.485438) (xy 252.787184 176.485441) (xy 252.615463 176.547513) + (xy 252.600948 176.55597) (xy 252.600863 176.556019) (xy 252.593776 176.56014) (xy 252.59353 176.560208) + (xy 252.565738 176.576444) (xy 252.56549 176.576589) (xy 252.562763 176.577259) (xy 252.503146 176.593396) + (xy 252.462801 176.593393) (xy 252.462697 176.5934) (xy 251.021996 176.5934) (xy 251.013814 176.593398) + (xy 251.013792 176.593393) (xy 250.983865 176.593395) (xy 250.981628 176.593395) (xy 250.981346 176.593312) + (xy 250.919093 176.576462) (xy 250.891271 176.560208) (xy 250.885205 176.556664) (xy 250.883507 176.555817) + (xy 250.876157 176.551534) (xy 250.869321 176.54755) (xy 250.697597 176.485478) (xy 250.697591 176.485477) + (xy 250.517481 176.455519) (xy 250.517478 176.455519) (xy 250.508939 176.455665) (xy 250.334907 176.458659) + (xy 250.155934 176.494794) (xy 250.155923 176.494797) (xy 249.986442 176.562737) (xy 249.986441 176.562737) + (xy 249.832061 176.660232) (xy 249.832058 176.660234) (xy 249.70369 176.7787) (xy 249.697869 176.784072) + (xy 249.646637 176.852387) (xy 249.623081 176.883797) (xy 249.567111 176.925619) (xy 249.523878 176.9334) + (xy 248.386221 176.9334) (xy 248.272345 176.948391) (xy 248.272337 176.948393) (xy 248.130637 177.007087) + (xy 248.008956 177.100456) (xy 247.915587 177.222137) (xy 247.856893 177.363836) (xy 247.856892 177.363838) + (xy 247.8419 177.477722) (xy 187.349383 177.477722) (xy 187.310703 177.4617) (xy 187.054299 177.4617) + (xy 186.98726 177.442015) (xy 186.941505 177.389211) (xy 186.930299 177.3377) (xy 186.930299 177.323021) + (xy 186.915308 177.209145) (xy 186.915307 177.209137) (xy 186.856612 177.067437) (xy 186.763244 176.945756) + (xy 186.6566 176.863926) (xy 186.641562 176.852387) (xy 186.499863 176.793693) (xy 186.499861 176.793692) + (xy 186.385978 176.7787) (xy 186.385977 176.7787) (xy 185.248373 176.7787) (xy 185.181334 176.759015) + (xy 185.149172 176.729098) (xy 185.074361 176.629344) (xy 184.940169 176.505504) (xy 184.940166 176.505502) + (xy 184.940165 176.505501) (xy 184.940162 176.505499) (xy 184.785777 176.408001) (xy 184.616287 176.340058) + (xy 184.616277 176.340056) (xy 184.437292 176.303918) (xy 184.437299 176.303918) (xy 184.265594 176.300965) + (xy 184.254718 176.300778) (xy 184.254717 176.300778) (xy 184.254714 176.300778) (xy 184.074597 176.330738) + (xy 184.074584 176.330741) (xy 183.902863 176.392813) (xy 183.888348 176.40127) (xy 183.888263 176.401319) + (xy 183.881176 176.40544) (xy 183.88093 176.405508) (xy 183.853138 176.421744) (xy 183.85289 176.421889) + (xy 183.850163 176.422559) (xy 183.790546 176.438696) (xy 183.750201 176.438693) (xy 183.750097 176.4387) + (xy 182.309396 176.4387) (xy 182.301214 176.438698) (xy 182.301192 176.438693) (xy 182.271265 176.438695) + (xy 182.269028 176.438695) (xy 182.268746 176.438612) (xy 182.206493 176.421762) (xy 182.178671 176.405508) + (xy 182.172605 176.401964) (xy 182.170907 176.401117) (xy 182.163557 176.396834) (xy 182.156721 176.39285) + (xy 181.984997 176.330778) (xy 181.984991 176.330777) (xy 181.804881 176.300819) (xy 181.804878 176.300819) + (xy 181.796339 176.300965) (xy 181.622307 176.303959) (xy 181.443334 176.340094) (xy 181.443323 176.340097) + (xy 181.273842 176.408037) (xy 181.273841 176.408037) (xy 181.119461 176.505532) (xy 181.119458 176.505534) + (xy 181.024036 176.593595) (xy 180.985269 176.629372) (xy 180.936425 176.694503) (xy 180.910481 176.729097) + (xy 180.854511 176.770919) (xy 180.811278 176.7787) (xy 179.673621 176.7787) (xy 179.559745 176.793691) + (xy 179.559737 176.793693) (xy 179.418037 176.852387) (xy 179.296356 176.945756) (xy 179.202987 177.067437) + (xy 179.144293 177.209136) (xy 179.144292 177.209138) (xy 179.1293 177.323022) (xy 115.117018 177.323022) + (xy 115.075312 177.222337) (xy 114.981944 177.100656) (xy 114.860263 177.007288) (xy 114.849134 177.002678) + (xy 114.807586 176.985468) (xy 114.753183 176.941626) (xy 114.731119 176.875332) (xy 114.740479 176.823454) + (xy 114.743237 176.816797) (xy 114.774 176.662142) (xy 114.774 176.504458) (xy 114.774 176.504455) + (xy 114.773999 176.504453) (xy 114.770048 176.484589) (xy 114.743237 176.349803) (xy 114.739217 176.340097) + (xy 114.682897 176.204127) (xy 114.68289 176.204114) (xy 114.595289 176.073011) (xy 114.595286 176.073007) + (xy 114.483792 175.961513) (xy 114.483788 175.96151) (xy 114.352685 175.873909) (xy 114.352672 175.873902) + (xy 114.207001 175.813564) (xy 114.206989 175.813561) (xy 114.052345 175.7828) (xy 114.052342 175.7828) + (xy 113.894658 175.7828) (xy 113.894655 175.7828) (xy 113.74001 175.813561) (xy 113.739998 175.813564) + (xy 113.594327 175.873902) (xy 113.594314 175.873909) (xy 113.463211 175.96151) (xy 113.463207 175.961513) + (xy 113.351713 176.073007) (xy 113.35171 176.073011) (xy 113.264109 176.204114) (xy 113.264102 176.204127) + (xy 113.203764 176.349798) (xy 113.203761 176.349808) (xy 113.178894 176.474823) (xy 113.146509 176.536734) + (xy 113.085793 176.571308) (xy 113.016023 176.567568) (xy 113.009766 176.56488) (xy 113.009718 176.565002) + (xy 113.00398 176.562702) (xy 112.969353 176.548821) (xy 112.834987 176.494958) (xy 112.834977 176.494956) + (xy 112.655992 176.458818) (xy 112.655999 176.458818) (xy 112.484294 176.455865) (xy 112.473418 176.455678) + (xy 112.473417 176.455678) (xy 112.473414 176.455678) (xy 112.293297 176.485638) (xy 112.293284 176.485641) + (xy 112.121563 176.547713) (xy 112.107048 176.55617) (xy 112.106963 176.556219) (xy 112.099876 176.56034) + (xy 112.09963 176.560408) (xy 112.071838 176.576644) (xy 112.07159 176.576789) (xy 112.068863 176.577459) + (xy 112.009246 176.593596) (xy 111.968901 176.593593) (xy 111.968797 176.5936) (xy 110.528096 176.5936) + (xy 110.519914 176.593598) (xy 110.519892 176.593593) (xy 110.489965 176.593595) (xy 110.487728 176.593595) + (xy 110.487446 176.593512) (xy 110.425193 176.576662) (xy 110.397371 176.560408) (xy 110.391305 176.556864) + (xy 110.389607 176.556017) (xy 110.382257 176.551734) (xy 110.375421 176.54775) (xy 110.203697 176.485678) + (xy 110.203691 176.485677) (xy 110.023581 176.455719) (xy 110.023578 176.455719) (xy 110.015039 176.455865) + (xy 109.841007 176.458859) (xy 109.662034 176.494994) (xy 109.662023 176.494997) (xy 109.492542 176.562937) + (xy 109.492541 176.562937) (xy 109.338161 176.660432) (xy 109.338158 176.660434) (xy 109.301234 176.69451) + (xy 109.203969 176.784272) (xy 109.152887 176.852387) (xy 109.129181 176.883997) (xy 109.073211 176.925819) + (xy 109.029978 176.9336) (xy 107.892321 176.9336) (xy 107.778445 176.948591) (xy 107.778437 176.948593) + (xy 107.636737 177.007287) (xy 107.515056 177.100656) (xy 107.421687 177.222337) (xy 107.362993 177.364036) + (xy 107.362992 177.364038) (xy 107.348 177.477922) (xy 107.348 177.547504) (xy 107.328315 177.614543) + (xy 107.275511 177.660298) (xy 107.206353 177.670242) (xy 107.142797 177.641217) (xy 107.136319 177.635185) + (xy 107.13327 177.632136) (xy 107.122838 177.627815) (xy 107.049653 177.5975) (xy 91.460488 177.5975) + (xy 91.393449 177.577815) (xy 91.347694 177.525011) (xy 91.336753 177.481609) (xy 91.336499 177.47774) + (xy 91.336499 177.477724) (xy 91.321507 177.363837) (xy 91.262812 177.222137) (xy 91.169444 177.100456) + (xy 91.048024 177.007288) (xy 91.047762 177.007087) (xy 90.906063 176.948393) (xy 90.906061 176.948392) + (xy 90.792178 176.9334) (xy 90.792177 176.9334) (xy 89.654573 176.9334) (xy 89.587534 176.913715) + (xy 89.555372 176.883798) (xy 89.480561 176.784044) (xy 89.346369 176.660204) (xy 89.346366 176.660202) + (xy 89.346365 176.660201) (xy 89.346362 176.660199) (xy 89.191977 176.562701) (xy 89.022487 176.494758) + (xy 89.022477 176.494756) (xy 88.843492 176.458618) (xy 88.843499 176.458618) (xy 88.671794 176.455665) + (xy 88.660918 176.455478) (xy 88.660917 176.455478) (xy 88.660914 176.455478) (xy 88.480797 176.485438) + (xy 88.480784 176.485441) (xy 88.309063 176.547513) (xy 88.294548 176.55597) (xy 88.294463 176.556019) + (xy 88.287376 176.56014) (xy 88.28713 176.560208) (xy 88.259338 176.576444) (xy 88.25909 176.576589) + (xy 88.256363 176.577259) (xy 88.196746 176.593396) (xy 88.156401 176.593393) (xy 88.156297 176.5934) + (xy 86.715596 176.5934) (xy 86.707414 176.593398) (xy 86.707392 176.593393) (xy 86.677465 176.593395) + (xy 86.675228 176.593395) (xy 86.674946 176.593312) (xy 86.612693 176.576462) (xy 86.584871 176.560208) + (xy 86.578805 176.556664) (xy 86.577107 176.555817) (xy 86.569757 176.551534) (xy 86.562921 176.54755) + (xy 86.391197 176.485478) (xy 86.391191 176.485477) (xy 86.211081 176.455519) (xy 86.211078 176.455519) + (xy 86.202539 176.455665) (xy 86.028507 176.458659) (xy 85.849534 176.494794) (xy 85.849523 176.494797) + (xy 85.680042 176.562737) (xy 85.680041 176.562737) (xy 85.525661 176.660232) (xy 85.525658 176.660234) + (xy 85.39729 176.7787) (xy 85.391469 176.784072) (xy 85.340237 176.852387) (xy 85.316681 176.883797) + (xy 85.260711 176.925619) (xy 85.217478 176.9334) (xy 84.079821 176.9334) (xy 83.965945 176.948391) + (xy 83.965937 176.948393) (xy 83.824237 177.007087) (xy 83.702556 177.100456) (xy 83.609187 177.222137) + (xy 83.550493 177.363836) (xy 83.550492 177.363838) (xy 83.5355 177.477722) (xy 83.5355 177.547304) + (xy 83.515815 177.614343) (xy 83.463011 177.660098) (xy 83.393853 177.670042) (xy 83.330297 177.641017) + (xy 83.323819 177.634985) (xy 83.24787 177.559036) (xy 83.225546 177.549789) (xy 83.164253 177.5244) + (xy 67.899599 177.5244) (xy 67.83256 177.504715) (xy 67.786805 177.451911) (xy 67.775599 177.4004) + (xy 67.775599 177.385721) (xy 67.760608 177.271845) (xy 67.760607 177.271837) (xy 67.701912 177.130137) + (xy 67.608544 177.008456) (xy 67.500848 176.925819) (xy 67.486862 176.915087) (xy 67.345163 176.856393) + (xy 67.345161 176.856392) (xy 67.231278 176.8414) (xy 67.231277 176.8414) (xy 66.093673 176.8414) + (xy 66.026634 176.821715) (xy 65.994472 176.791798) (xy 65.919661 176.692044) (xy 65.785469 176.568204) + (xy 65.785466 176.568202) (xy 65.785465 176.568201) (xy 65.785462 176.568199) (xy 65.631077 176.470701) + (xy 65.461587 176.402758) (xy 65.461577 176.402756) (xy 65.282592 176.366618) (xy 65.282599 176.366618) + (xy 65.110894 176.363665) (xy 65.100018 176.363478) (xy 65.100017 176.363478) (xy 65.100014 176.363478) + (xy 64.919897 176.393438) (xy 64.919884 176.393441) (xy 64.748163 176.455513) (xy 64.733648 176.46397) + (xy 64.733563 176.464019) (xy 64.726476 176.46814) (xy 64.72623 176.468208) (xy 64.698438 176.484444) + (xy 64.69819 176.484589) (xy 64.695463 176.485259) (xy 64.635846 176.501396) (xy 64.595501 176.501393) + (xy 64.595397 176.5014) (xy 63.154696 176.5014) (xy 63.146514 176.501398) (xy 63.146492 176.501393) + (xy 63.116565 176.501395) (xy 63.114328 176.501395) (xy 63.114046 176.501312) (xy 63.051793 176.484462) + (xy 63.023971 176.468208) (xy 63.017905 176.464664) (xy 63.016207 176.463817) (xy 63.007355 176.458659) + (xy 63.002021 176.45555) (xy 62.830297 176.393478) (xy 62.830291 176.393477) (xy 62.650181 176.363519) + (xy 62.650178 176.363519) (xy 62.641639 176.363665) (xy 62.467607 176.366659) (xy 62.288634 176.402794) + (xy 62.288623 176.402797) (xy 62.119142 176.470737) (xy 62.119141 176.470737) (xy 61.964761 176.568232) + (xy 61.964758 176.568234) (xy 61.84158 176.68191) (xy 61.830569 176.692072) (xy 61.780366 176.759015) + (xy 61.755781 176.791797) (xy 61.699811 176.833619) (xy 61.656578 176.8414) (xy 60.518921 176.8414) + (xy 60.405045 176.856391) (xy 60.405037 176.856393) (xy 60.263337 176.915087) (xy 60.141656 177.008456) + (xy 60.048287 177.130137) (xy 59.989593 177.271836) (xy 59.989592 177.271838) (xy 59.9746 177.385722) + (xy 45.35175 177.385722) (xy 45.35175 170.303883) (xy 55.0408 170.303883) (xy 55.0408 172.403901) + (xy 55.040801 172.403918) (xy 55.0513 172.506696) (xy 55.051301 172.506699) (xy 55.085776 172.610736) + (xy 55.106486 172.673234) (xy 55.198588 172.822556) (xy 55.322644 172.946612) (xy 55.471966 173.038714) + (xy 55.638503 173.093899) (xy 55.741291 173.1044) (xy 57.82215 173.104399) (xy 57.889189 173.124084) + (xy 57.934944 173.176887) (xy 57.944888 173.246046) (xy 57.922469 173.301283) (xy 57.901451 173.330211) + (xy 57.824596 173.481046) (xy 57.772281 173.642052) (xy 57.7458 173.80925) (xy 57.7458 173.978549) + (xy 57.772281 174.145747) (xy 57.824596 174.306753) (xy 57.901452 174.457588) (xy 58.000948 174.594534) + (xy 58.000952 174.594539) (xy 58.12066 174.714247) (xy 58.120665 174.714251) (xy 58.240117 174.801037) + (xy 58.257615 174.81375) (xy 58.353725 174.86272) (xy 58.408446 174.890603) (xy 58.408448 174.890603) + (xy 58.408451 174.890605) (xy 58.467681 174.90985) (xy 58.569452 174.942918) (xy 58.736651 174.9694) + (xy 58.736656 174.9694) (xy 58.905949 174.9694) (xy 59.073147 174.942918) (xy 59.234149 174.890605) + (xy 59.384985 174.81375) (xy 59.521941 174.714246) (xy 59.641646 174.594541) (xy 59.74115 174.457585) + (xy 59.818005 174.306749) (xy 59.870318 174.145747) (xy 59.881579 174.074649) (xy 59.8968 173.978549) + (xy 59.8968 173.80925) (xy 59.894986 173.797798) (xy 59.90394 173.728505) (xy 59.948936 173.675053) + (xy 60.015688 173.654413) (xy 60.017459 173.6544) (xy 60.242076 173.6544) (xy 60.242083 173.6544) + (xy 60.541068 173.615038) (xy 60.832358 173.536987) (xy 61.110968 173.421583) (xy 61.372132 173.2708) + (xy 61.608516 173.089416) (xy 61.673684 173.064223) (xy 61.742129 173.078261) (xy 61.792118 173.127075) + (xy 61.807782 173.195167) (xy 61.803776 173.219886) (xy 61.791015 173.267511) (xy 61.738808 173.462353) + (xy 61.738452 173.46368) (xy 61.738449 173.463693) (xy 61.700801 173.749661) (xy 61.7008 173.749678) + (xy 61.7008 174.038121) (xy 61.700801 174.038138) (xy 61.738449 174.324106) (xy 61.73845 174.324111) + (xy 61.738451 174.324117) (xy 61.810909 174.594534) (xy 61.813109 174.602744) (xy 61.813114 174.60276) + (xy 61.923491 174.869236) (xy 61.923499 174.869252) (xy 62.06772 175.119048) (xy 62.067731 175.119064) + (xy 62.243324 175.347902) (xy 62.24333 175.347909) (xy 62.44729 175.551869) (xy 62.447297 175.551875) + (xy 62.610253 175.676915) (xy 62.676144 175.727475) (xy 62.676151 175.727479) (xy 62.925947 175.8717) + (xy 62.925963 175.871708) (xy 63.192439 175.982085) (xy 63.192445 175.982086) (xy 63.192455 175.982091) + (xy 63.471083 176.056749) (xy 63.757072 176.0944) (xy 63.757079 176.0944) (xy 64.045521 176.0944) + (xy 64.045528 176.0944) (xy 64.331517 176.056749) (xy 64.610145 175.982091) (xy 64.610157 175.982085) + (xy 64.61016 175.982085) (xy 64.876636 175.871708) (xy 64.876639 175.871706) (xy 64.876645 175.871704) + (xy 65.126456 175.727475) (xy 65.355304 175.551874) (xy 65.559274 175.347904) (xy 65.734875 175.119056) + (xy 65.879104 174.869245) (xy 65.896146 174.828103) (xy 65.989485 174.60276) (xy 65.989485 174.602757) + (xy 65.989491 174.602745) (xy 66.064149 174.324117) (xy 66.1018 174.038128) (xy 66.1018 173.80925) + (xy 67.9058 173.80925) (xy 67.9058 173.978549) (xy 67.932281 174.145747) (xy 67.984596 174.306753) + (xy 68.061452 174.457588) (xy 68.160948 174.594534) (xy 68.160952 174.594539) (xy 68.28066 174.714247) + (xy 68.280665 174.714251) (xy 68.400117 174.801037) (xy 68.417615 174.81375) (xy 68.513725 174.86272) + (xy 68.568446 174.890603) (xy 68.568448 174.890603) (xy 68.568451 174.890605) (xy 68.627681 174.90985) + (xy 68.729452 174.942918) (xy 68.896651 174.9694) (xy 68.896656 174.9694) (xy 69.065949 174.9694) + (xy 69.233147 174.942918) (xy 69.394149 174.890605) (xy 69.544985 174.81375) (xy 69.681941 174.714246) + (xy 69.801646 174.594541) (xy 69.90115 174.457585) (xy 69.978005 174.306749) (xy 70.030318 174.145747) + (xy 70.041579 174.074649) (xy 70.0568 173.978549) (xy 70.0568 173.80925) (xy 70.030318 173.642052) + (xy 69.989908 173.517685) (xy 69.978005 173.481051) (xy 69.978003 173.481048) (xy 69.978003 173.481046) + (xy 69.947703 173.421581) (xy 69.90115 173.330215) (xy 69.871467 173.28936) (xy 69.801651 173.193265) + (xy 69.801647 173.19326) (xy 69.681939 173.073552) (xy 69.681934 173.073548) (xy 69.544988 172.974052) + (xy 69.544987 172.974051) (xy 69.544985 172.97405) (xy 69.480084 172.940981) (xy 69.394153 172.897196) + (xy 69.233147 172.844881) (xy 69.065949 172.8184) (xy 69.065944 172.8184) (xy 68.896656 172.8184) + (xy 68.896651 172.8184) (xy 68.729452 172.844881) (xy 68.568446 172.897196) (xy 68.417611 172.974052) + (xy 68.280665 173.073548) (xy 68.28066 173.073552) (xy 68.160952 173.19326) (xy 68.160948 173.193265) + (xy 68.061452 173.330211) (xy 67.984596 173.481046) (xy 67.932281 173.642052) (xy 67.9058 173.80925) + (xy 66.1018 173.80925) (xy 66.1018 173.749672) (xy 66.064149 173.463683) (xy 65.989491 173.185055) + (xy 65.989486 173.185045) (xy 65.989485 173.185039) (xy 65.879108 172.918563) (xy 65.8791 172.918547) + (xy 65.734879 172.668751) (xy 65.734875 172.668744) (xy 65.633014 172.535996) (xy 65.559275 172.439897) + (xy 65.559269 172.43989) (xy 65.355309 172.23593) (xy 65.355302 172.235924) (xy 65.126464 172.060331) + (xy 65.126462 172.060329) (xy 65.126456 172.060325) (xy 65.126451 172.060322) (xy 65.126448 172.06032) + (xy 64.876652 171.916099) (xy 64.876636 171.916091) (xy 64.61016 171.805714) (xy 64.610148 171.80571) + (xy 64.610145 171.805709) (xy 64.331517 171.731051) (xy 64.331511 171.73105) (xy 64.331506 171.731049) + (xy 64.045538 171.693401) (xy 64.045533 171.6934) (xy 64.045528 171.6934) (xy 63.757072 171.6934) + (xy 63.757066 171.6934) (xy 63.757061 171.693401) (xy 63.471093 171.731049) (xy 63.471086 171.73105) + (xy 63.471083 171.731051) (xy 63.252948 171.7895) (xy 63.192455 171.805709) (xy 63.192439 171.805714) + (xy 62.925963 171.916091) (xy 62.925947 171.916099) (xy 62.676151 172.06032) (xy 62.676134 172.060331) + (xy 62.471891 172.217052) (xy 62.406722 172.242246) (xy 62.338277 172.228207) (xy 62.288287 172.179393) + (xy 62.272624 172.111302) (xy 62.276627 172.086594) (xy 62.352438 171.803668) (xy 62.3918 171.504683) + (xy 62.3918 171.203117) (xy 62.352438 170.904132) (xy 62.274387 170.612842) (xy 62.247205 170.54722) + (xy 62.228433 170.501899) (xy 62.158983 170.334232) (xy 62.15884 170.333985) (xy 62.0082 170.073068) + (xy 61.82462 169.833821) (xy 61.824614 169.833814) (xy 61.611385 169.620585) (xy 61.611378 169.620579) + (xy 61.372131 169.436999) (xy 61.110971 169.286218) (xy 61.110961 169.286214) (xy 60.83236 169.170813) + (xy 60.541066 169.092761) (xy 60.242093 169.053401) (xy 60.242088 169.0534) (xy 60.242083 169.0534) + (xy 59.940517 169.0534) (xy 59.940511 169.0534) (xy 59.940506 169.053401) (xy 59.641533 169.092761) + (xy 59.350239 169.170813) (xy 59.071638 169.286214) (xy 59.071628 169.286218) (xy 58.810468 169.436999) + (xy 58.627003 169.577776) (xy 58.561834 169.60297) (xy 58.551517 169.6034) (xy 55.741298 169.6034) + (xy 55.741281 169.603401) (xy 55.638503 169.6139) (xy 55.6385 169.613901) (xy 55.471968 169.669085) + (xy 55.471963 169.669087) (xy 55.322642 169.761189) (xy 55.198589 169.885242) (xy 55.106487 170.034563) + (xy 55.106485 170.034568) (xy 55.08683 170.093883) (xy 55.051301 170.201103) (xy 55.051301 170.201104) + (xy 55.0513 170.201104) (xy 55.0408 170.303883) (xy 45.35175 170.303883) (xy 45.35175 168.663123) + (xy 64.1408 168.663123) (xy 64.1408 168.964676) (xy 64.140801 168.964693) (xy 64.180161 169.263666) + (xy 64.258213 169.55496) (xy 64.373614 169.833561) (xy 64.373618 169.833571) (xy 64.524399 170.094731) + (xy 64.707979 170.333978) (xy 64.707985 170.333985) (xy 64.921214 170.547214) (xy 64.921221 170.54722) + (xy 65.160468 170.7308) (xy 65.421628 170.881581) (xy 65.421629 170.881581) (xy 65.421632 170.881583) + (xy 65.549354 170.934487) (xy 65.700239 170.996986) (xy 65.70024 170.996986) (xy 65.700242 170.996987) + (xy 65.991532 171.075038) (xy 66.290517 171.1144) (xy 66.290524 171.1144) (xy 66.592076 171.1144) + (xy 66.592083 171.1144) (xy 66.891068 171.075038) (xy 67.182358 170.996987) (xy 67.460968 170.881583) + (xy 67.722132 170.7308) (xy 67.905595 170.590022) (xy 67.970765 170.564829) (xy 67.981082 170.564399) + (xy 70.796302 170.564399) (xy 70.796308 170.564399) (xy 70.899097 170.553899) (xy 71.065634 170.498714) + (xy 71.214956 170.406612) (xy 71.339012 170.282556) (xy 71.364531 170.241183) (xy 78.8533 170.241183) + (xy 78.8533 172.341201) (xy 78.853301 172.341218) (xy 78.8638 172.443996) (xy 78.863801 172.443999) + (xy 78.918985 172.610531) (xy 78.918987 172.610536) (xy 78.920384 172.612801) (xy 79.011088 172.759856) + (xy 79.135144 172.883912) (xy 79.284466 172.976014) (xy 79.451003 173.031199) (xy 79.553791 173.0417) + (xy 81.63465 173.041699) (xy 81.701689 173.061384) (xy 81.747444 173.114187) (xy 81.757388 173.183346) + (xy 81.734969 173.238583) (xy 81.713951 173.267511) (xy 81.637096 173.418346) (xy 81.584781 173.579352) + (xy 81.5583 173.74655) (xy 81.5583 173.915849) (xy 81.584781 174.083047) (xy 81.637096 174.244053) + (xy 81.713952 174.394888) (xy 81.813448 174.531834) (xy 81.813452 174.531839) (xy 81.93316 174.651547) + (xy 81.933165 174.651551) (xy 81.998281 174.69886) (xy 82.070115 174.75105) (xy 82.166225 174.80002) + (xy 82.220946 174.827903) (xy 82.220948 174.827903) (xy 82.220951 174.827905) (xy 82.30725 174.855945) + (xy 82.381952 174.880218) (xy 82.549151 174.9067) (xy 82.549156 174.9067) (xy 82.718449 174.9067) + (xy 82.885647 174.880218) (xy 83.046649 174.827905) (xy 83.197485 174.75105) (xy 83.334441 174.651546) + (xy 83.454146 174.531841) (xy 83.55365 174.394885) (xy 83.630505 174.244049) (xy 83.682818 174.083047) + (xy 83.689931 174.038138) (xy 83.7093 173.915849) (xy 83.7093 173.74655) (xy 83.707486 173.735098) + (xy 83.71644 173.665805) (xy 83.761436 173.612353) (xy 83.828188 173.591713) (xy 83.829959 173.5917) + (xy 84.054576 173.5917) (xy 84.054583 173.5917) (xy 84.353568 173.552338) (xy 84.644858 173.474287) + (xy 84.923468 173.358883) (xy 85.184632 173.2081) (xy 85.421016 173.026716) (xy 85.486184 173.001523) + (xy 85.554629 173.015561) (xy 85.604618 173.064375) (xy 85.620282 173.132467) (xy 85.616276 173.157186) + (xy 85.609213 173.183546) (xy 85.560084 173.3669) (xy 85.550952 173.40098) (xy 85.550949 173.400993) + (xy 85.513301 173.686961) (xy 85.5133 173.686978) (xy 85.5133 173.975421) (xy 85.513301 173.975438) + (xy 85.550949 174.261406) (xy 85.55095 174.261411) (xy 85.550951 174.261417) (xy 85.625609 174.540044) + (xy 85.625614 174.54006) (xy 85.735991 174.806536) (xy 85.735999 174.806552) (xy 85.88022 175.056348) + (xy 85.880231 175.056364) (xy 86.055824 175.285202) (xy 86.05583 175.285209) (xy 86.25979 175.489169) + (xy 86.259797 175.489175) (xy 86.422753 175.614215) (xy 86.488644 175.664775) (xy 86.488651 175.664779) + (xy 86.738447 175.809) (xy 86.738463 175.809008) (xy 87.004939 175.919385) (xy 87.004945 175.919386) + (xy 87.004955 175.919391) (xy 87.283583 175.994049) (xy 87.569572 176.0317) (xy 87.569579 176.0317) + (xy 87.858021 176.0317) (xy 87.858028 176.0317) (xy 88.144017 175.994049) (xy 88.422645 175.919391) + (xy 88.422657 175.919385) (xy 88.42266 175.919385) (xy 88.689136 175.809008) (xy 88.689139 175.809006) + (xy 88.689145 175.809004) (xy 88.938956 175.664775) (xy 89.167804 175.489174) (xy 89.371774 175.285204) + (xy 89.547375 175.056356) (xy 89.689409 174.810347) (xy 89.6916 174.806552) (xy 89.691608 174.806536) + (xy 89.801985 174.54006) (xy 89.801985 174.540057) (xy 89.801991 174.540045) (xy 89.876649 174.261417) + (xy 89.9143 173.975428) (xy 89.9143 173.74655) (xy 91.7183 173.74655) (xy 91.7183 173.915849) (xy 91.744781 174.083047) + (xy 91.797096 174.244053) (xy 91.873952 174.394888) (xy 91.973448 174.531834) (xy 91.973452 174.531839) + (xy 92.09316 174.651547) (xy 92.093165 174.651551) (xy 92.158281 174.69886) (xy 92.230115 174.75105) + (xy 92.326225 174.80002) (xy 92.380946 174.827903) (xy 92.380948 174.827903) (xy 92.380951 174.827905) + (xy 92.46725 174.855945) (xy 92.541952 174.880218) (xy 92.709151 174.9067) (xy 92.709156 174.9067) + (xy 92.878449 174.9067) (xy 93.045647 174.880218) (xy 93.206649 174.827905) (xy 93.357485 174.75105) + (xy 93.494441 174.651546) (xy 93.614146 174.531841) (xy 93.71365 174.394885) (xy 93.790505 174.244049) + (xy 93.842818 174.083047) (xy 93.849931 174.038138) (xy 93.8693 173.915849) (xy 93.8693 173.74655) + (xy 93.842818 173.579352) (xy 93.818545 173.50465) (xy 93.790505 173.418351) (xy 93.790503 173.418348) + (xy 93.790503 173.418346) (xy 93.760203 173.358881) (xy 93.71365 173.267515) (xy 93.682081 173.224064) + (xy 93.614151 173.130565) (xy 93.614147 173.13056) (xy 93.494439 173.010852) (xy 93.494434 173.010848) + (xy 93.357488 172.911352) (xy 93.357487 172.911351) (xy 93.357485 172.91135) (xy 93.303631 172.88391) + (xy 93.206653 172.834496) (xy 93.045647 172.782181) (xy 92.878449 172.7557) (xy 92.878444 172.7557) + (xy 92.709156 172.7557) (xy 92.709151 172.7557) (xy 92.541952 172.782181) (xy 92.380946 172.834496) + (xy 92.230111 172.911352) (xy 92.093165 173.010848) (xy 92.09316 173.010852) (xy 91.973452 173.13056) + (xy 91.973448 173.130565) (xy 91.873952 173.267511) (xy 91.797096 173.418346) (xy 91.744781 173.579352) + (xy 91.7183 173.74655) (xy 89.9143 173.74655) (xy 89.9143 173.686972) (xy 89.876649 173.400983) + (xy 89.801991 173.122355) (xy 89.801986 173.122345) (xy 89.801985 173.122339) (xy 89.691608 172.855863) + (xy 89.6916 172.855847) (xy 89.549331 172.609432) (xy 89.547375 172.606044) (xy 89.471145 172.506699) + (xy 89.371775 172.377197) (xy 89.371769 172.37719) (xy 89.167809 172.17323) (xy 89.167802 172.173224) + (xy 88.938964 171.997631) (xy 88.938962 171.997629) (xy 88.938956 171.997625) (xy 88.938951 171.997622) + (xy 88.938948 171.99762) (xy 88.689152 171.853399) (xy 88.689136 171.853391) (xy 88.42266 171.743014) + (xy 88.422648 171.74301) (xy 88.422645 171.743009) (xy 88.144017 171.668351) (xy 88.144011 171.66835) + (xy 88.144006 171.668349) (xy 87.858038 171.630701) (xy 87.858033 171.6307) (xy 87.858028 171.6307) + (xy 87.569572 171.6307) (xy 87.569566 171.6307) (xy 87.569561 171.630701) (xy 87.283593 171.668349) + (xy 87.283586 171.66835) (xy 87.283583 171.668351) (xy 87.049583 171.731051) (xy 87.004955 171.743009) + (xy 87.004939 171.743014) (xy 86.738463 171.853391) (xy 86.738447 171.853399) (xy 86.488651 171.99762) + (xy 86.488634 171.997631) (xy 86.284391 172.154352) (xy 86.219222 172.179546) (xy 86.150777 172.165507) + (xy 86.100787 172.116693) (xy 86.085124 172.048602) (xy 86.089127 172.023894) (xy 86.164938 171.740968) + (xy 86.2043 171.441983) (xy 86.2043 171.140417) (xy 86.164938 170.841432) (xy 86.086887 170.550142) + (xy 86.083975 170.543113) (xy 86.017447 170.382499) (xy 85.971483 170.271532) (xy 85.97134 170.271285) + (xy 85.8207 170.010368) (xy 85.63712 169.771121) (xy 85.637114 169.771114) (xy 85.423885 169.557885) + (xy 85.423878 169.557879) (xy 85.184631 169.374299) (xy 84.923471 169.223518) (xy 84.923461 169.223514) + (xy 84.64486 169.108113) (xy 84.353566 169.030061) (xy 84.054593 168.990701) (xy 84.054588 168.9907) + (xy 84.054583 168.9907) (xy 83.753017 168.9907) (xy 83.753011 168.9907) (xy 83.753006 168.990701) + (xy 83.454033 169.030061) (xy 83.162739 169.108113) (xy 82.884138 169.223514) (xy 82.884128 169.223518) + (xy 82.622968 169.374299) (xy 82.439503 169.515076) (xy 82.374334 169.54027) (xy 82.364017 169.5407) + (xy 79.553798 169.5407) (xy 79.553781 169.540701) (xy 79.451003 169.5512) (xy 79.451 169.551201) + (xy 79.284468 169.606385) (xy 79.284463 169.606387) (xy 79.135142 169.698489) (xy 79.011089 169.822542) + (xy 78.918987 169.971863) (xy 78.918985 169.971868) (xy 78.891149 170.05587) (xy 78.863801 170.138403) + (xy 78.863801 170.138404) (xy 78.8638 170.138404) (xy 78.8533 170.241183) (xy 71.364531 170.241183) + (xy 71.431114 170.133234) (xy 71.486299 169.966697) (xy 71.4968 169.863909) (xy 71.496799 168.600423) + (xy 87.9533 168.600423) (xy 87.9533 168.901976) (xy 87.953301 168.901993) (xy 87.992661 169.200966) + (xy 88.070713 169.49226) (xy 88.186114 169.770861) (xy 88.186118 169.770871) (xy 88.336899 170.032031) + (xy 88.520479 170.271278) (xy 88.520485 170.271285) (xy 88.733714 170.484514) (xy 88.733721 170.48452) + (xy 88.972968 170.6681) (xy 89.234128 170.818881) (xy 89.234129 170.818881) (xy 89.234132 170.818883) + (xy 89.385503 170.881583) (xy 89.512739 170.934286) (xy 89.51274 170.934286) (xy 89.512742 170.934287) + (xy 89.804032 171.012338) (xy 90.103017 171.0517) (xy 90.103024 171.0517) (xy 90.404576 171.0517) + (xy 90.404583 171.0517) (xy 90.703568 171.012338) (xy 90.994858 170.934287) (xy 91.273468 170.818883) + (xy 91.534632 170.6681) (xy 91.718095 170.527322) (xy 91.783265 170.502129) (xy 91.793582 170.501699) + (xy 94.608802 170.501699) (xy 94.608808 170.501699) (xy 94.711597 170.491199) (xy 94.878134 170.436014) + (xy 95.027456 170.343912) (xy 95.129985 170.241383) (xy 102.6658 170.241383) (xy 102.6658 172.341401) + (xy 102.665801 172.341418) (xy 102.6763 172.444196) (xy 102.676301 172.444199) (xy 102.718661 172.572032) + (xy 102.731486 172.610734) (xy 102.823588 172.760056) (xy 102.947644 172.884112) (xy 103.096966 172.976214) + (xy 103.263503 173.031399) (xy 103.366291 173.0419) (xy 105.44715 173.041899) (xy 105.514189 173.061584) + (xy 105.559944 173.114387) (xy 105.569888 173.183546) (xy 105.547469 173.238783) (xy 105.526451 173.267711) + (xy 105.449596 173.418546) (xy 105.397281 173.579552) (xy 105.3708 173.74675) (xy 105.3708 173.916049) + (xy 105.397281 174.083247) (xy 105.449596 174.244253) (xy 105.458444 174.261617) (xy 105.526348 174.394885) + (xy 105.526452 174.395088) (xy 105.625948 174.532034) (xy 105.625952 174.532039) (xy 105.74566 174.651747) + (xy 105.745665 174.651751) (xy 105.83169 174.714251) (xy 105.882615 174.75125) (xy 105.978725 174.80022) + (xy 106.033446 174.828103) (xy 106.033448 174.828103) (xy 106.033451 174.828105) (xy 106.11975 174.856145) + (xy 106.194452 174.880418) (xy 106.361651 174.9069) (xy 106.361656 174.9069) (xy 106.530949 174.9069) + (xy 106.698147 174.880418) (xy 106.732512 174.869252) (xy 106.859149 174.828105) (xy 106.859546 174.827903) + (xy 106.887328 174.813747) (xy 107.009985 174.75125) (xy 107.146941 174.651746) (xy 107.266646 174.532041) + (xy 107.36615 174.395085) (xy 107.443005 174.244249) (xy 107.495318 174.083247) (xy 107.496681 174.074644) + (xy 107.5218 173.916049) (xy 107.5218 173.74675) (xy 107.519986 173.735298) (xy 107.52894 173.666005) + (xy 107.573936 173.612553) (xy 107.640688 173.591913) (xy 107.642459 173.5919) (xy 107.867076 173.5919) + (xy 107.867083 173.5919) (xy 108.166068 173.552538) (xy 108.457358 173.474487) (xy 108.735968 173.359083) + (xy 108.997132 173.2083) (xy 109.233516 173.026916) (xy 109.298684 173.001723) (xy 109.367129 173.015761) + (xy 109.417118 173.064575) (xy 109.432782 173.132667) (xy 109.428776 173.157386) (xy 109.421366 173.185039) + (xy 109.363506 173.40098) (xy 109.363452 173.40118) (xy 109.363449 173.401193) (xy 109.325801 173.687161) + (xy 109.3258 173.687178) (xy 109.3258 173.975621) (xy 109.325801 173.975638) (xy 109.363449 174.261606) + (xy 109.36345 174.261611) (xy 109.363451 174.261617) (xy 109.438109 174.540244) (xy 109.438114 174.54026) + (xy 109.548491 174.806736) (xy 109.548499 174.806752) (xy 109.69272 175.056548) (xy 109.692731 175.056564) + (xy 109.868324 175.285402) (xy 109.86833 175.285409) (xy 110.07229 175.489369) (xy 110.072296 175.489374) + (xy 110.301144 175.664975) (xy 110.301151 175.664979) (xy 110.550947 175.8092) (xy 110.550963 175.809208) + (xy 110.817439 175.919585) (xy 110.817445 175.919586) (xy 110.817455 175.919591) (xy 111.096083 175.994249) + (xy 111.382072 176.0319) (xy 111.382079 176.0319) (xy 111.670521 176.0319) (xy 111.670528 176.0319) + (xy 111.956517 175.994249) (xy 112.235145 175.919591) (xy 112.235157 175.919585) (xy 112.23516 175.919585) + (xy 112.501636 175.809208) (xy 112.501639 175.809206) (xy 112.501645 175.809204) (xy 112.501985 175.809008) + (xy 112.643215 175.727468) (xy 112.751456 175.664975) (xy 112.980304 175.489374) (xy 113.184274 175.285404) + (xy 113.359875 175.056556) (xy 113.504104 174.806745) (xy 113.527174 174.75105) (xy 113.614485 174.54026) + (xy 113.614485 174.540257) (xy 113.614491 174.540245) (xy 113.689149 174.261617) (xy 113.7268 173.975628) + (xy 113.7268 173.74675) (xy 115.5308 173.74675) (xy 115.5308 173.916049) (xy 115.557281 174.083247) + (xy 115.609596 174.244253) (xy 115.618444 174.261617) (xy 115.686348 174.394885) (xy 115.686452 174.395088) + (xy 115.785948 174.532034) (xy 115.785952 174.532039) (xy 115.90566 174.651747) (xy 115.905665 174.651751) + (xy 115.99169 174.714251) (xy 116.042615 174.75125) (xy 116.138725 174.80022) (xy 116.193446 174.828103) + (xy 116.193448 174.828103) (xy 116.193451 174.828105) (xy 116.27975 174.856145) (xy 116.354452 174.880418) + (xy 116.521651 174.9069) (xy 116.521656 174.9069) (xy 116.690949 174.9069) (xy 116.858147 174.880418) + (xy 116.892512 174.869252) (xy 117.019149 174.828105) (xy 117.019546 174.827903) (xy 117.047328 174.813747) + (xy 117.169985 174.75125) (xy 117.306941 174.651746) (xy 117.426646 174.532041) (xy 117.52615 174.395085) + (xy 117.603005 174.244249) (xy 117.655318 174.083247) (xy 117.656681 174.074644) (xy 117.6818 173.916049) + (xy 117.6818 173.74675) (xy 117.655318 173.579552) (xy 117.631045 173.50485) (xy 117.603005 173.418551) + (xy 117.603003 173.418548) (xy 117.603003 173.418546) (xy 117.572604 173.358885) (xy 117.52615 173.267715) + (xy 117.50513 173.238783) (xy 117.426651 173.130765) (xy 117.426647 173.13076) (xy 117.306939 173.011052) + (xy 117.306934 173.011048) (xy 117.169988 172.911552) (xy 117.169987 172.911551) (xy 117.169985 172.91155) + (xy 117.09625 172.87398) (xy 117.019153 172.834696) (xy 116.858147 172.782381) (xy 116.690949 172.7559) + (xy 116.690944 172.7559) (xy 116.521656 172.7559) (xy 116.521651 172.7559) (xy 116.354452 172.782381) + (xy 116.193446 172.834696) (xy 116.042611 172.911552) (xy 115.905665 173.011048) (xy 115.90566 173.011052) + (xy 115.785952 173.13076) (xy 115.785948 173.130765) (xy 115.686452 173.267711) (xy 115.609596 173.418546) + (xy 115.557281 173.579552) (xy 115.5308 173.74675) (xy 113.7268 173.74675) (xy 113.7268 173.687172) + (xy 113.689149 173.401183) (xy 113.614491 173.122555) (xy 113.614486 173.122545) (xy 113.614485 173.122539) + (xy 113.504108 172.856063) (xy 113.5041 172.856047) (xy 113.359879 172.606251) (xy 113.359875 172.606244) + (xy 113.29321 172.519364) (xy 113.184275 172.377397) (xy 113.184269 172.37739) (xy 112.980309 172.17343) + (xy 112.980302 172.173424) (xy 112.751464 171.997831) (xy 112.751462 171.997829) (xy 112.751456 171.997825) + (xy 112.751451 171.997822) (xy 112.751448 171.99782) (xy 112.501652 171.853599) (xy 112.501636 171.853591) + (xy 112.23516 171.743214) (xy 112.235148 171.74321) (xy 112.235145 171.743209) (xy 111.956517 171.668551) + (xy 111.956511 171.66855) (xy 111.956506 171.668549) (xy 111.670538 171.630901) (xy 111.670533 171.6309) + (xy 111.670528 171.6309) (xy 111.382072 171.6309) (xy 111.382066 171.6309) (xy 111.382061 171.630901) + (xy 111.096093 171.668549) (xy 111.096086 171.66855) (xy 111.096083 171.668551) (xy 110.935276 171.711639) + (xy 110.817455 171.743209) (xy 110.817439 171.743214) (xy 110.550963 171.853591) (xy 110.550947 171.853599) + (xy 110.301151 171.99782) (xy 110.301134 171.997831) (xy 110.096891 172.154552) (xy 110.031722 172.179746) + (xy 109.963277 172.165707) (xy 109.913287 172.116893) (xy 109.897624 172.048802) (xy 109.901627 172.024094) + (xy 109.977438 171.741168) (xy 110.0168 171.442183) (xy 110.0168 171.140617) (xy 109.977438 170.841632) + (xy 109.899387 170.550342) (xy 109.898093 170.547219) (xy 109.839851 170.40661) (xy 109.783983 170.271732) + (xy 109.783865 170.271528) (xy 109.6332 170.010568) (xy 109.44962 169.771321) (xy 109.449614 169.771314) + (xy 109.236385 169.558085) (xy 109.236378 169.558079) (xy 108.997131 169.374499) (xy 108.735971 169.223718) + (xy 108.735961 169.223714) (xy 108.45736 169.108313) (xy 108.166066 169.030261) (xy 107.867093 168.990901) + (xy 107.867088 168.9909) (xy 107.867083 168.9909) (xy 107.565517 168.9909) (xy 107.565511 168.9909) + (xy 107.565506 168.990901) (xy 107.266533 169.030261) (xy 106.975239 169.108313) (xy 106.696638 169.223714) + (xy 106.696628 169.223718) (xy 106.435468 169.374499) (xy 106.252003 169.515276) (xy 106.186834 169.54047) + (xy 106.176517 169.5409) (xy 103.366298 169.5409) (xy 103.366281 169.540901) (xy 103.263503 169.5514) + (xy 103.2635 169.551401) (xy 103.096968 169.606585) (xy 103.096963 169.606587) (xy 102.947642 169.698689) + (xy 102.823589 169.822742) (xy 102.731487 169.972063) (xy 102.731485 169.972068) (xy 102.710775 170.034568) + (xy 102.676301 170.138603) (xy 102.676301 170.138604) (xy 102.6763 170.138604) (xy 102.6658 170.241383) + (xy 95.129985 170.241383) (xy 95.151512 170.219856) (xy 95.243614 170.070534) (xy 95.298799 169.903997) + (xy 95.3093 169.801209) (xy 95.309299 168.600623) (xy 111.7658 168.600623) (xy 111.7658 168.902176) + (xy 111.765801 168.902193) (xy 111.805161 169.201166) (xy 111.883213 169.49246) (xy 111.998614 169.771061) + (xy 111.998618 169.771071) (xy 112.149399 170.032231) (xy 112.332979 170.271478) (xy 112.332985 170.271485) + (xy 112.546214 170.484714) (xy 112.546221 170.48472) (xy 112.785468 170.6683) (xy 113.046628 170.819081) + (xy 113.046629 170.819081) (xy 113.046632 170.819083) (xy 113.197525 170.881585) (xy 113.325239 170.934486) + (xy 113.32524 170.934486) (xy 113.325242 170.934487) (xy 113.616532 171.012538) (xy 113.915517 171.0519) + (xy 113.915524 171.0519) (xy 114.217076 171.0519) (xy 114.217083 171.0519) (xy 114.516068 171.012538) + (xy 114.807358 170.934487) (xy 115.085968 170.819083) (xy 115.347132 170.6683) (xy 115.530595 170.527522) + (xy 115.595765 170.502329) (xy 115.606082 170.501899) (xy 118.421302 170.501899) (xy 118.421308 170.501899) + (xy 118.524097 170.491399) (xy 118.690634 170.436214) (xy 118.749374 170.399983) (xy 174.1033 170.399983) + (xy 174.1033 172.500001) (xy 174.103301 172.500018) (xy 174.1138 172.602796) (xy 174.113801 172.602799) + (xy 174.168985 172.769331) (xy 174.168987 172.769336) (xy 174.177033 172.782381) (xy 174.261088 172.918656) + (xy 174.385144 173.042712) (xy 174.534466 173.134814) (xy 174.701003 173.189999) (xy 174.803791 173.2005) + (xy 176.88465 173.200499) (xy 176.951689 173.220184) (xy 176.997444 173.272987) (xy 177.007388 173.342146) + (xy 176.984969 173.397383) (xy 176.963951 173.426311) (xy 176.887096 173.577146) (xy 176.834781 173.738152) + (xy 176.8083 173.90535) (xy 176.8083 174.074649) (xy 176.834781 174.241847) (xy 176.887096 174.402853) + (xy 176.895944 174.420217) (xy 176.957101 174.540244) (xy 176.963952 174.553688) (xy 177.063448 174.690634) + (xy 177.063452 174.690639) (xy 177.18316 174.810347) (xy 177.183165 174.810351) (xy 177.207602 174.828105) + (xy 177.320115 174.90985) (xy 177.416225 174.95882) (xy 177.470946 174.986703) (xy 177.470948 174.986703) + (xy 177.470951 174.986705) (xy 177.55725 175.014745) (xy 177.631952 175.039018) (xy 177.799151 175.0655) + (xy 177.799156 175.0655) (xy 177.968449 175.0655) (xy 178.135647 175.039018) (xy 178.296649 174.986705) + (xy 178.447485 174.90985) (xy 178.584441 174.810346) (xy 178.704146 174.690641) (xy 178.80365 174.553685) + (xy 178.880505 174.402849) (xy 178.932818 174.241847) (xy 178.948039 174.145747) (xy 178.9593 174.074649) + (xy 178.9593 173.90535) (xy 178.957486 173.893898) (xy 178.96644 173.824605) (xy 179.011436 173.771153) + (xy 179.078188 173.750513) (xy 179.079959 173.7505) (xy 179.304576 173.7505) (xy 179.304583 173.7505) + (xy 179.603568 173.711138) (xy 179.894858 173.633087) (xy 180.173468 173.517683) (xy 180.434632 173.3669) + (xy 180.671016 173.185516) (xy 180.736184 173.160323) (xy 180.804629 173.174361) (xy 180.854618 173.223175) + (xy 180.870282 173.291267) (xy 180.866276 173.315986) (xy 180.854782 173.358881) (xy 180.80706 173.536986) + (xy 180.800952 173.55978) (xy 180.800949 173.559793) (xy 180.763301 173.845761) (xy 180.7633 173.845778) + (xy 180.7633 174.134221) (xy 180.763301 174.134238) (xy 180.800949 174.420206) (xy 180.80095 174.420211) + (xy 180.800951 174.420217) (xy 180.873409 174.690634) (xy 180.875609 174.698844) (xy 180.875614 174.69886) + (xy 180.985991 174.965336) (xy 180.985999 174.965352) (xy 181.13022 175.215148) (xy 181.130231 175.215164) + (xy 181.305824 175.444002) (xy 181.30583 175.444009) (xy 181.50979 175.647969) (xy 181.509797 175.647975) + (xy 181.531943 175.664968) (xy 181.738644 175.823575) (xy 181.738651 175.823579) (xy 181.988447 175.9678) + (xy 181.988463 175.967808) (xy 182.254939 176.078185) (xy 182.254945 176.078186) (xy 182.254955 176.078191) + (xy 182.533583 176.152849) (xy 182.819572 176.1905) (xy 182.819579 176.1905) (xy 183.108021 176.1905) + (xy 183.108028 176.1905) (xy 183.394017 176.152849) (xy 183.672645 176.078191) (xy 183.672657 176.078185) + (xy 183.67266 176.078185) (xy 183.939136 175.967808) (xy 183.939139 175.967806) (xy 183.939145 175.967804) + (xy 183.950047 175.96151) (xy 184.022652 175.919591) (xy 184.188956 175.823575) (xy 184.417804 175.647974) + (xy 184.621774 175.444004) (xy 184.797375 175.215156) (xy 184.941604 174.965345) (xy 184.950894 174.942918) + (xy 185.051985 174.69886) (xy 185.051985 174.698857) (xy 185.051991 174.698845) (xy 185.126649 174.420217) + (xy 185.1643 174.134228) (xy 185.1643 173.90535) (xy 186.9683 173.90535) (xy 186.9683 174.074649) + (xy 186.994781 174.241847) (xy 187.047096 174.402853) (xy 187.055944 174.420217) (xy 187.117101 174.540244) + (xy 187.123952 174.553688) (xy 187.223448 174.690634) (xy 187.223452 174.690639) (xy 187.34316 174.810347) + (xy 187.343165 174.810351) (xy 187.367602 174.828105) (xy 187.480115 174.90985) (xy 187.576225 174.95882) + (xy 187.630946 174.986703) (xy 187.630948 174.986703) (xy 187.630951 174.986705) (xy 187.71725 175.014745) + (xy 187.791952 175.039018) (xy 187.959151 175.0655) (xy 187.959156 175.0655) (xy 188.128449 175.0655) + (xy 188.295647 175.039018) (xy 188.456649 174.986705) (xy 188.607485 174.90985) (xy 188.744441 174.810346) + (xy 188.864146 174.690641) (xy 188.96365 174.553685) (xy 189.040505 174.402849) (xy 189.092818 174.241847) + (xy 189.108039 174.145747) (xy 189.1193 174.074649) (xy 189.1193 173.90535) (xy 189.092818 173.738152) + (xy 189.045297 173.5919) (xy 189.040505 173.577151) (xy 189.040503 173.577148) (xy 189.040503 173.577146) + (xy 189.010203 173.517681) (xy 188.96365 173.426315) (xy 188.914805 173.359085) (xy 188.864151 173.289365) + (xy 188.864147 173.28936) (xy 188.744439 173.169652) (xy 188.744434 173.169648) (xy 188.607488 173.070152) + (xy 188.607487 173.070151) (xy 188.607485 173.07015) (xy 188.553631 173.04271) (xy 188.456653 172.993296) + (xy 188.295647 172.940981) (xy 188.128449 172.9145) (xy 188.128444 172.9145) (xy 187.959156 172.9145) + (xy 187.959151 172.9145) (xy 187.791952 172.940981) (xy 187.630946 172.993296) (xy 187.480111 173.070152) + (xy 187.343165 173.169648) (xy 187.34316 173.169652) (xy 187.223452 173.28936) (xy 187.223448 173.289365) + (xy 187.123952 173.426311) (xy 187.047096 173.577146) (xy 186.994781 173.738152) (xy 186.9683 173.90535) + (xy 185.1643 173.90535) (xy 185.1643 173.845772) (xy 185.126649 173.559783) (xy 185.051991 173.281155) + (xy 185.051986 173.281145) (xy 185.051985 173.281139) (xy 184.941608 173.014663) (xy 184.9416 173.014647) + (xy 184.797379 172.764851) (xy 184.797375 172.764844) (xy 184.689261 172.623947) (xy 184.621775 172.535997) + (xy 184.621769 172.53599) (xy 184.417809 172.33203) (xy 184.417802 172.332024) (xy 184.188964 172.156431) + (xy 184.188962 172.156429) (xy 184.188956 172.156425) (xy 184.188951 172.156422) (xy 184.188948 172.15642) + (xy 183.939152 172.012199) (xy 183.939136 172.012191) (xy 183.67266 171.901814) (xy 183.672648 171.90181) + (xy 183.672645 171.901809) (xy 183.394017 171.827151) (xy 183.394011 171.82715) (xy 183.394006 171.827149) + (xy 183.108038 171.789501) (xy 183.108033 171.7895) (xy 183.108028 171.7895) (xy 182.819572 171.7895) + (xy 182.819566 171.7895) (xy 182.819561 171.789501) (xy 182.533593 171.827149) (xy 182.533586 171.82715) + (xy 182.533583 171.827151) (xy 182.262587 171.899764) (xy 182.254955 171.901809) (xy 182.254939 171.901814) + (xy 181.988463 172.012191) (xy 181.988447 172.012199) (xy 181.738651 172.15642) (xy 181.738634 172.156431) + (xy 181.534391 172.313152) (xy 181.469222 172.338346) (xy 181.400777 172.324307) (xy 181.350787 172.275493) + (xy 181.335124 172.207402) (xy 181.339127 172.182694) (xy 181.414938 171.899768) (xy 181.4543 171.600783) + (xy 181.4543 171.299217) (xy 181.414938 171.000232) (xy 181.336887 170.708942) (xy 181.309705 170.64332) + (xy 181.271193 170.550342) (xy 181.221483 170.430332) (xy 181.22134 170.430085) (xy 181.0707 170.169168) + (xy 180.88712 169.929921) (xy 180.887114 169.929914) (xy 180.673885 169.716685) (xy 180.673878 169.716679) + (xy 180.434631 169.533099) (xy 180.173471 169.382318) (xy 180.173461 169.382314) (xy 179.89486 169.266913) + (xy 179.603566 169.188861) (xy 179.304593 169.149501) (xy 179.304588 169.1495) (xy 179.304583 169.1495) + (xy 179.003017 169.1495) (xy 179.003011 169.1495) (xy 179.003006 169.149501) (xy 178.704033 169.188861) + (xy 178.412739 169.266913) (xy 178.134138 169.382314) (xy 178.134128 169.382318) (xy 177.872968 169.533099) + (xy 177.689503 169.673876) (xy 177.624334 169.69907) (xy 177.614017 169.6995) (xy 174.803798 169.6995) + (xy 174.803781 169.699501) (xy 174.701003 169.71) (xy 174.701 169.710001) (xy 174.534468 169.765185) + (xy 174.534463 169.765187) (xy 174.385142 169.857289) (xy 174.261089 169.981342) (xy 174.168987 170.130663) + (xy 174.168985 170.130668) (xy 174.155233 170.17217) (xy 174.113801 170.297203) (xy 174.113801 170.297204) + (xy 174.1138 170.297204) (xy 174.1033 170.399983) (xy 118.749374 170.399983) (xy 118.839956 170.344112) + (xy 118.964012 170.220056) (xy 119.056114 170.070734) (xy 119.111299 169.904197) (xy 119.1218 169.801409) + (xy 119.1218 169.503153) (xy 134.9625 169.503153) (xy 134.9625 169.660846) (xy 134.993261 169.815489) + (xy 134.993264 169.815501) (xy 135.053602 169.961172) (xy 135.053609 169.961185) (xy 135.14121 170.092288) + (xy 135.141213 170.092292) (xy 135.252707 170.203786) (xy 135.252711 170.203789) (xy 135.383814 170.29139) + (xy 135.383827 170.291397) (xy 135.511094 170.344112) (xy 135.529503 170.351737) (xy 135.628833 170.371495) + (xy 135.684153 170.382499) (xy 135.684156 170.3825) (xy 135.684158 170.3825) (xy 135.841844 170.3825) + (xy 135.841845 170.382499) (xy 135.996497 170.351737) (xy 136.142179 170.291394) (xy 136.273289 170.203789) + (xy 136.384789 170.092289) (xy 136.472394 169.961179) (xy 136.532737 169.815497) (xy 136.5635 169.660842) + (xy 136.5635 169.503158) (xy 136.5635 169.503155) (xy 136.563499 169.503153) (xy 136.551721 169.443943) + (xy 136.532737 169.348503) (xy 136.518966 169.315257) (xy 136.472397 169.202827) (xy 136.47239 169.202814) + (xy 136.384789 169.071711) (xy 136.384786 169.071707) (xy 136.273292 168.960213) (xy 136.273288 168.96021) + (xy 136.142185 168.872609) (xy 136.142178 168.872605) (xy 136.137101 168.870502) (xy 136.13521 168.869719) + (xy 136.135209 168.869718) (xy 135.996501 168.812264) (xy 135.996489 168.812261) (xy 135.841845 168.7815) + (xy 135.841842 168.7815) (xy 135.684158 168.7815) (xy 135.684155 168.7815) (xy 135.52951 168.812261) + (xy 135.529498 168.812264) (xy 135.383827 168.872602) (xy 135.383814 168.872609) (xy 135.252711 168.96021) + (xy 135.252707 168.960213) (xy 135.141213 169.071707) (xy 135.14121 169.071711) (xy 135.053609 169.202814) + (xy 135.053602 169.202827) (xy 134.993264 169.348498) (xy 134.993261 169.34851) (xy 134.9625 169.503153) + (xy 119.1218 169.503153) (xy 119.121799 168.713616) (xy 119.121799 167.701398) (xy 119.121798 167.701381) + (xy 119.111299 167.598603) (xy 119.111298 167.5986) (xy 119.108668 167.590663) (xy 119.056114 167.432066) + (xy 118.964012 167.282744) (xy 118.839956 167.158688) (xy 118.713324 167.080581) (xy 118.690636 167.066587) + (xy 118.690631 167.066585) (xy 118.681019 167.0634) (xy 118.524097 167.011401) (xy 118.524095 167.0114) + (xy 118.421316 167.0009) (xy 118.421309 167.0009) (xy 115.606082 167.0009) (xy 115.539043 166.981215) + (xy 115.530596 166.975276) (xy 115.347131 166.834499) (xy 115.304148 166.809683) (xy 115.124163 166.705768) + (xy 130.45705 166.705768) (xy 130.45705 166.986631) (xy 130.488492 167.265694) (xy 130.488495 167.265712) + (xy 130.550989 167.539517) (xy 130.550993 167.539529) (xy 130.64375 167.804611) (xy 130.765603 168.057642) + (xy 130.766118 168.058461) (xy 130.915027 168.295448) (xy 131.090134 168.515025) (xy 131.288725 168.713616) + (xy 131.508302 168.888723) (xy 131.746105 169.038145) (xy 131.999142 169.160001) (xy 132.116791 169.201168) + (xy 132.26422 169.252756) (xy 132.264232 169.25276) (xy 132.538041 169.315255) (xy 132.538047 169.315255) + (xy 132.538055 169.315257) (xy 132.724097 169.336218) (xy 132.817119 169.346699) (xy 132.817122 169.3467) + (xy 132.817125 169.3467) (xy 133.097978 169.3467) (xy 133.097979 169.346699) (xy 133.240605 169.330629) + (xy 133.377044 169.315257) (xy 133.377049 169.315256) (xy 133.377059 169.315255) (xy 133.650868 169.25276) + (xy 133.915958 169.160001) (xy 134.168995 169.038145) (xy 134.406798 168.888723) (xy 134.569186 168.759223) + (xy 183.2033 168.759223) (xy 183.2033 169.060776) (xy 183.203301 169.060793) (xy 183.242661 169.359766) + (xy 183.320713 169.65106) (xy 183.436114 169.929661) (xy 183.436118 169.929671) (xy 183.586899 170.190831) + (xy 183.770479 170.430078) (xy 183.770485 170.430085) (xy 183.983714 170.643314) (xy 183.983721 170.64332) + (xy 184.222968 170.8269) (xy 184.484128 170.977681) (xy 184.484129 170.977681) (xy 184.484132 170.977683) + (xy 184.66282 171.051698) (xy 184.762739 171.093086) (xy 184.76274 171.093086) (xy 184.762742 171.093087) + (xy 185.054032 171.171138) (xy 185.353017 171.2105) (xy 185.353024 171.2105) (xy 185.654576 171.2105) + (xy 185.654583 171.2105) (xy 185.953568 171.171138) (xy 186.244858 171.093087) (xy 186.523468 170.977683) + (xy 186.784632 170.8269) (xy 186.968095 170.686122) (xy 187.033265 170.660929) (xy 187.043582 170.660499) + (xy 189.858802 170.660499) (xy 189.858808 170.660499) (xy 189.961597 170.649999) (xy 190.128134 170.594814) + (xy 190.277456 170.502712) (xy 190.401512 170.378656) (xy 190.486306 170.241183) (xy 242.8845 170.241183) + (xy 242.8845 172.341201) (xy 242.884501 172.341218) (xy 242.895 172.443996) (xy 242.895001 172.443999) + (xy 242.950185 172.610531) (xy 242.950187 172.610536) (xy 242.951584 172.612801) (xy 243.042288 172.759856) + (xy 243.166344 172.883912) (xy 243.315666 172.976014) (xy 243.482203 173.031199) (xy 243.584991 173.0417) + (xy 245.512118 173.041699) (xy 245.512127 173.0417) (xy 245.940851 173.041699) (xy 246.007889 173.061383) + (xy 246.053644 173.114187) (xy 246.063588 173.183346) (xy 246.041169 173.238583) (xy 246.020151 173.267511) + (xy 245.943296 173.418346) (xy 245.890981 173.579352) (xy 245.8645 173.74655) (xy 245.8645 173.915849) + (xy 245.890981 174.083047) (xy 245.943296 174.244053) (xy 246.020152 174.394888) (xy 246.119648 174.531834) + (xy 246.119652 174.531839) (xy 246.23936 174.651547) (xy 246.239365 174.651551) (xy 246.304481 174.69886) + (xy 246.376315 174.75105) (xy 246.472425 174.80002) (xy 246.527146 174.827903) (xy 246.527148 174.827903) + (xy 246.527151 174.827905) (xy 246.61345 174.855945) (xy 246.688152 174.880218) (xy 246.855351 174.9067) + (xy 246.855356 174.9067) (xy 247.024649 174.9067) (xy 247.191847 174.880218) (xy 247.352849 174.827905) + (xy 247.503685 174.75105) (xy 247.640641 174.651546) (xy 247.760346 174.531841) (xy 247.85985 174.394885) + (xy 247.936705 174.244049) (xy 247.989018 174.083047) (xy 247.996131 174.038138) (xy 248.0155 173.915849) + (xy 248.0155 173.74655) (xy 247.989928 173.585098) (xy 247.998882 173.515805) (xy 248.043879 173.462353) + (xy 248.11063 173.441713) (xy 248.112401 173.4417) (xy 248.350944 173.4417) (xy 248.350951 173.4417) + (xy 248.630442 173.404904) (xy 248.902739 173.331942) (xy 249.163183 173.224063) (xy 249.407317 173.083112) + (xy 249.630965 172.9115) (xy 249.8303 172.712165) (xy 249.897992 172.623946) (xy 249.95442 172.582744) + (xy 250.024166 172.578589) (xy 250.085086 172.612801) (xy 250.117839 172.674518) (xy 250.112026 172.744146) + (xy 250.103755 172.761433) (xy 250.047683 172.858551) (xy 250.047675 172.858568) (xy 249.937597 173.124321) + (xy 249.863146 173.402176) (xy 249.825601 173.687361) (xy 249.8256 173.687377) (xy 249.8256 173.975022) + (xy 249.825601 173.975038) (xy 249.863146 174.260223) (xy 249.937597 174.538078) (xy 250.047675 174.803831) + (xy 250.047683 174.803848) (xy 250.191504 175.052951) (xy 250.191515 175.052967) (xy 250.366621 175.281171) + (xy 250.366627 175.281178) (xy 250.570021 175.484572) (xy 250.570028 175.484578) (xy 250.657732 175.551875) + (xy 250.798241 175.659691) (xy 250.798248 175.659695) (xy 251.047351 175.803516) (xy 251.047356 175.803518) + (xy 251.047359 175.80352) (xy 251.047363 175.803521) (xy 251.047368 175.803524) (xy 251.152723 175.847163) + (xy 251.31312 175.913602) (xy 251.590975 175.988053) (xy 251.876171 176.0256) (xy 251.876178 176.0256) + (xy 252.163822 176.0256) (xy 252.163829 176.0256) (xy 252.449025 175.988053) (xy 252.72688 175.913602) + (xy 252.992641 175.80352) (xy 253.241759 175.659691) (xy 253.469973 175.484577) (xy 253.673377 175.281173) + (xy 253.848491 175.052959) (xy 253.99232 174.803841) (xy 254.102402 174.53808) (xy 254.176853 174.260225) + (xy 254.2144 173.975029) (xy 254.2144 173.74655) (xy 256.0245 173.74655) (xy 256.0245 173.915849) + (xy 256.050981 174.083047) (xy 256.103296 174.244053) (xy 256.180152 174.394888) (xy 256.279648 174.531834) + (xy 256.279652 174.531839) (xy 256.39936 174.651547) (xy 256.399365 174.651551) (xy 256.464481 174.69886) + (xy 256.536315 174.75105) (xy 256.632425 174.80002) (xy 256.687146 174.827903) (xy 256.687148 174.827903) + (xy 256.687151 174.827905) (xy 256.77345 174.855945) (xy 256.848152 174.880218) (xy 257.015351 174.9067) + (xy 257.015356 174.9067) (xy 257.184649 174.9067) (xy 257.351847 174.880218) (xy 257.512849 174.827905) + (xy 257.663685 174.75105) (xy 257.800641 174.651546) (xy 257.920346 174.531841) (xy 258.01985 174.394885) + (xy 258.096705 174.244049) (xy 258.149018 174.083047) (xy 258.156131 174.038138) (xy 258.1755 173.915849) + (xy 258.1755 173.74655) (xy 258.149018 173.579352) (xy 258.124745 173.50465) (xy 258.096705 173.418351) + (xy 258.096703 173.418348) (xy 258.096703 173.418346) (xy 258.066403 173.358881) (xy 258.01985 173.267515) + (xy 257.988281 173.224064) (xy 257.920351 173.130565) (xy 257.920347 173.13056) (xy 257.800639 173.010852) + (xy 257.800634 173.010848) (xy 257.663688 172.911352) (xy 257.663687 172.911351) (xy 257.663685 172.91135) + (xy 257.609831 172.88391) (xy 257.512853 172.834496) (xy 257.351847 172.782181) (xy 257.184649 172.7557) + (xy 257.184644 172.7557) (xy 257.015356 172.7557) (xy 257.015351 172.7557) (xy 256.848152 172.782181) + (xy 256.687146 172.834496) (xy 256.536311 172.911352) (xy 256.399365 173.010848) (xy 256.39936 173.010852) + (xy 256.279652 173.13056) (xy 256.279648 173.130565) (xy 256.180152 173.267511) (xy 256.103296 173.418346) + (xy 256.050981 173.579352) (xy 256.0245 173.74655) (xy 254.2144 173.74655) (xy 254.2144 173.687371) + (xy 254.176853 173.402175) (xy 254.102402 173.12432) (xy 254.02646 172.940981) (xy 253.992324 172.858568) + (xy 253.992316 172.858551) (xy 253.849239 172.610736) (xy 253.848491 172.609441) (xy 253.764528 172.500018) + (xy 253.673378 172.381228) (xy 253.673372 172.381221) (xy 253.469978 172.177827) (xy 253.469971 172.177821) + (xy 253.241767 172.002715) (xy 253.241765 172.002713) (xy 253.241759 172.002709) (xy 253.241754 172.002706) + (xy 253.241751 172.002704) (xy 252.992648 171.858883) (xy 252.992631 171.858875) (xy 252.726878 171.748797) + (xy 252.449023 171.674346) (xy 252.163838 171.636801) (xy 252.163835 171.6368) (xy 252.163829 171.6368) + (xy 251.876171 171.6368) (xy 251.876165 171.6368) (xy 251.876161 171.636801) (xy 251.590976 171.674346) + (xy 251.313121 171.748797) (xy 251.047368 171.858875) (xy 251.047351 171.858883) (xy 250.798248 172.002704) + (xy 250.798232 172.002715) (xy 250.570028 172.177821) (xy 250.570021 172.177827) (xy 250.366627 172.381221) + (xy 250.29543 172.474007) (xy 250.239001 172.515209) (xy 250.169255 172.519364) (xy 250.108335 172.485151) + (xy 250.075583 172.423434) (xy 250.081396 172.353807) (xy 250.089661 172.336531) (xy 250.142863 172.244383) + (xy 250.250742 171.983939) (xy 250.323704 171.711642) (xy 250.3605 171.432151) (xy 250.3605 171.150249) + (xy 250.35923 171.140606) (xy 250.34237 171.012538) (xy 250.323704 170.870758) (xy 250.250742 170.598461) + (xy 250.142863 170.338017) (xy 250.142861 170.338014) (xy 250.142859 170.338009) (xy 250.001916 170.09389) + (xy 250.001912 170.093883) (xy 249.8303 169.870235) (xy 249.830298 169.870233) (xy 249.830295 169.870229) + (xy 249.63097 169.670904) (xy 249.628601 169.669086) (xy 249.407317 169.499288) (xy 249.407311 169.499284) + (xy 249.407309 169.499283) (xy 249.16319 169.35834) (xy 249.163179 169.358335) (xy 248.902743 169.250459) + (xy 248.630439 169.177495) (xy 248.350958 169.1407) (xy 248.350951 169.1407) (xy 248.069049 169.1407) + (xy 248.069041 169.1407) (xy 247.78956 169.177495) (xy 247.517256 169.250459) (xy 247.25682 169.358335) + (xy 247.256809 169.35834) (xy 247.012692 169.499281) (xy 247.012683 169.499288) (xy 246.992106 169.515076) + (xy 246.926938 169.54027) (xy 246.916622 169.5407) (xy 243.584998 169.5407) (xy 243.584981 169.540701) + (xy 243.482203 169.5512) (xy 243.4822 169.551201) (xy 243.315668 169.606385) (xy 243.315663 169.606387) + (xy 243.166342 169.698489) (xy 243.042289 169.822542) (xy 242.950187 169.971863) (xy 242.950185 169.971868) + (xy 242.922349 170.05587) (xy 242.895001 170.138403) (xy 242.895001 170.138404) (xy 242.895 170.138404) + (xy 242.8845 170.241183) (xy 190.486306 170.241183) (xy 190.493614 170.229334) (xy 190.548799 170.062797) + (xy 190.5593 169.960009) (xy 190.559299 167.859992) (xy 190.553641 167.804608) (xy 190.548799 167.757203) + (xy 190.548798 167.7572) (xy 190.530235 167.701181) (xy 190.493614 167.590666) (xy 190.401512 167.441344) + (xy 190.277456 167.317288) (xy 190.184688 167.260069) (xy 190.128136 167.225187) (xy 190.128131 167.225185) + (xy 190.116069 167.221188) (xy 189.961597 167.170001) (xy 189.961595 167.17) (xy 189.858816 167.1595) + (xy 189.858809 167.1595) (xy 187.043582 167.1595) (xy 186.976543 167.139815) (xy 186.968096 167.133876) + (xy 186.784631 166.993099) (xy 186.523471 166.842318) (xy 186.523461 166.842313) (xy 186.462003 166.816857) + (xy 186.24486 166.726913) (xy 186.165946 166.705768) (xy 230.46955 166.705768) (xy 230.46955 166.986631) + (xy 230.500992 167.265694) (xy 230.500995 167.265712) (xy 230.563489 167.539517) (xy 230.563493 167.539529) + (xy 230.65625 167.804611) (xy 230.778103 168.057642) (xy 230.778618 168.058461) (xy 230.927527 168.295448) + (xy 231.102634 168.515025) (xy 231.301225 168.713616) (xy 231.520802 168.888723) (xy 231.758605 169.038145) + (xy 232.011642 169.160001) (xy 232.129291 169.201168) (xy 232.27672 169.252756) (xy 232.276732 169.25276) + (xy 232.550541 169.315255) (xy 232.550547 169.315255) (xy 232.550555 169.315257) (xy 232.736597 169.336218) + (xy 232.829619 169.346699) (xy 232.829622 169.3467) (xy 232.829625 169.3467) (xy 233.110478 169.3467) + (xy 233.110479 169.346699) (xy 233.253105 169.330629) (xy 233.389544 169.315257) (xy 233.389549 169.315256) + (xy 233.389559 169.315255) (xy 233.663368 169.25276) (xy 233.928458 169.160001) (xy 234.181495 169.038145) + (xy 234.419298 168.888723) (xy 234.638875 168.713616) (xy 234.74225 168.610241) (xy 252.4095 168.610241) + (xy 252.4095 168.892158) (xy 252.446295 169.171639) (xy 252.519259 169.443943) (xy 252.627135 169.704379) + (xy 252.62714 169.70439) (xy 252.768083 169.948509) (xy 252.768088 169.948517) (xy 252.913794 170.138404) + (xy 252.939704 170.17217) (xy 253.139029 170.371495) (xy 253.139033 170.371498) (xy 253.139035 170.3715) + (xy 253.362683 170.543112) (xy 253.36269 170.543116) (xy 253.606809 170.684059) (xy 253.606814 170.684061) + (xy 253.606817 170.684063) (xy 253.867261 170.791942) (xy 254.139558 170.864904) (xy 254.419049 170.9017) + (xy 254.419056 170.9017) (xy 254.700944 170.9017) (xy 254.700951 170.9017) (xy 254.980442 170.864904) + (xy 255.252739 170.791942) (xy 255.513183 170.684063) (xy 255.757317 170.543112) (xy 255.777892 170.527323) + (xy 255.84306 170.502129) (xy 255.853379 170.501699) (xy 257.034982 170.501699) (xy 257.034991 170.5017) + (xy 259.185008 170.501699) (xy 259.287797 170.491199) (xy 259.454334 170.436014) (xy 259.603656 170.343912) + (xy 259.706385 170.241183) (xy 261.9345 170.241183) (xy 261.9345 172.341201) (xy 261.934501 172.341218) + (xy 261.945 172.443996) (xy 261.945001 172.443999) (xy 262.000185 172.610531) (xy 262.000187 172.610536) + (xy 262.001584 172.612801) (xy 262.092288 172.759856) (xy 262.216344 172.883912) (xy 262.365666 172.976014) + (xy 262.532203 173.031199) (xy 262.634991 173.0417) (xy 264.562118 173.041699) (xy 264.562127 173.0417) + (xy 264.990851 173.041699) (xy 265.057889 173.061383) (xy 265.103644 173.114187) (xy 265.113588 173.183346) + (xy 265.091169 173.238583) (xy 265.070151 173.267511) (xy 264.993296 173.418346) (xy 264.940981 173.579352) + (xy 264.9145 173.74655) (xy 264.9145 173.915849) (xy 264.940981 174.083047) (xy 264.993296 174.244053) + (xy 265.070152 174.394888) (xy 265.169648 174.531834) (xy 265.169652 174.531839) (xy 265.28936 174.651547) + (xy 265.289365 174.651551) (xy 265.354481 174.69886) (xy 265.426315 174.75105) (xy 265.522425 174.80002) + (xy 265.577146 174.827903) (xy 265.577148 174.827903) (xy 265.577151 174.827905) (xy 265.66345 174.855945) + (xy 265.738152 174.880218) (xy 265.905351 174.9067) (xy 265.905356 174.9067) (xy 266.074649 174.9067) + (xy 266.241847 174.880218) (xy 266.402849 174.827905) (xy 266.553685 174.75105) (xy 266.690641 174.651546) + (xy 266.810346 174.531841) (xy 266.90985 174.394885) (xy 266.986705 174.244049) (xy 267.039018 174.083047) + (xy 267.046131 174.038138) (xy 267.0655 173.915849) (xy 267.0655 173.74655) (xy 267.039928 173.585098) + (xy 267.048882 173.515805) (xy 267.093879 173.462353) (xy 267.16063 173.441713) (xy 267.162401 173.4417) + (xy 267.400944 173.4417) (xy 267.400951 173.4417) (xy 267.680442 173.404904) (xy 267.952739 173.331942) + (xy 268.213183 173.224063) (xy 268.457317 173.083112) (xy 268.680965 172.9115) (xy 268.8803 172.712165) + (xy 268.947992 172.623946) (xy 269.00442 172.582744) (xy 269.074166 172.578589) (xy 269.135086 172.612801) + (xy 269.167839 172.674518) (xy 269.162026 172.744146) (xy 269.153755 172.761433) (xy 269.097683 172.858551) + (xy 269.097675 172.858568) (xy 268.987597 173.124321) (xy 268.913146 173.402176) (xy 268.875601 173.687361) + (xy 268.8756 173.687377) (xy 268.8756 173.975022) (xy 268.875601 173.975038) (xy 268.913146 174.260223) + (xy 268.987597 174.538078) (xy 269.097675 174.803831) (xy 269.097683 174.803848) (xy 269.241504 175.052951) + (xy 269.241515 175.052967) (xy 269.416621 175.281171) (xy 269.416627 175.281178) (xy 269.620021 175.484572) + (xy 269.620028 175.484578) (xy 269.707732 175.551875) (xy 269.848241 175.659691) (xy 269.848248 175.659695) + (xy 270.097351 175.803516) (xy 270.097356 175.803518) (xy 270.097359 175.80352) (xy 270.097363 175.803521) + (xy 270.097368 175.803524) (xy 270.202723 175.847163) (xy 270.36312 175.913602) (xy 270.640975 175.988053) + (xy 270.926171 176.0256) (xy 270.926178 176.0256) (xy 271.213822 176.0256) (xy 271.213829 176.0256) + (xy 271.499025 175.988053) (xy 271.77688 175.913602) (xy 272.042641 175.80352) (xy 272.291759 175.659691) + (xy 272.519973 175.484577) (xy 272.723377 175.281173) (xy 272.898491 175.052959) (xy 273.04232 174.803841) + (xy 273.152402 174.53808) (xy 273.226853 174.260225) (xy 273.2644 173.975029) (xy 273.2644 173.74655) + (xy 275.0745 173.74655) (xy 275.0745 173.915849) (xy 275.100981 174.083047) (xy 275.153296 174.244053) + (xy 275.230152 174.394888) (xy 275.329648 174.531834) (xy 275.329652 174.531839) (xy 275.44936 174.651547) + (xy 275.449365 174.651551) (xy 275.514481 174.69886) (xy 275.586315 174.75105) (xy 275.682425 174.80002) + (xy 275.737146 174.827903) (xy 275.737148 174.827903) (xy 275.737151 174.827905) (xy 275.82345 174.855945) + (xy 275.898152 174.880218) (xy 276.065351 174.9067) (xy 276.065356 174.9067) (xy 276.234649 174.9067) + (xy 276.401847 174.880218) (xy 276.562849 174.827905) (xy 276.713685 174.75105) (xy 276.850641 174.651546) + (xy 276.970346 174.531841) (xy 277.06985 174.394885) (xy 277.146705 174.244049) (xy 277.199018 174.083047) + (xy 277.206131 174.038138) (xy 277.2255 173.915849) (xy 277.2255 173.74655) (xy 277.199018 173.579352) + (xy 277.174745 173.50465) (xy 277.146705 173.418351) (xy 277.146703 173.418348) (xy 277.146703 173.418346) + (xy 277.116403 173.358881) (xy 277.06985 173.267515) (xy 277.038281 173.224064) (xy 276.970351 173.130565) + (xy 276.970347 173.13056) (xy 276.850639 173.010852) (xy 276.850634 173.010848) (xy 276.713688 172.911352) + (xy 276.713687 172.911351) (xy 276.713685 172.91135) (xy 276.659831 172.88391) (xy 276.562853 172.834496) + (xy 276.401847 172.782181) (xy 276.234649 172.7557) (xy 276.234644 172.7557) (xy 276.065356 172.7557) + (xy 276.065351 172.7557) (xy 275.898152 172.782181) (xy 275.737146 172.834496) (xy 275.586311 172.911352) + (xy 275.449365 173.010848) (xy 275.44936 173.010852) (xy 275.329652 173.13056) (xy 275.329648 173.130565) + (xy 275.230152 173.267511) (xy 275.153296 173.418346) (xy 275.100981 173.579352) (xy 275.0745 173.74655) + (xy 273.2644 173.74655) (xy 273.2644 173.687371) (xy 273.226853 173.402175) (xy 273.152402 173.12432) + (xy 273.07646 172.940981) (xy 273.042324 172.858568) (xy 273.042316 172.858551) (xy 272.899239 172.610736) + (xy 272.898491 172.609441) (xy 272.814528 172.500018) (xy 272.723378 172.381228) (xy 272.723372 172.381221) + (xy 272.519978 172.177827) (xy 272.519971 172.177821) (xy 272.291767 172.002715) (xy 272.291765 172.002713) + (xy 272.291759 172.002709) (xy 272.291754 172.002706) (xy 272.291751 172.002704) (xy 272.042648 171.858883) + (xy 272.042631 171.858875) (xy 271.776878 171.748797) (xy 271.499023 171.674346) (xy 271.213838 171.636801) + (xy 271.213835 171.6368) (xy 271.213829 171.6368) (xy 270.926171 171.6368) (xy 270.926165 171.6368) + (xy 270.926161 171.636801) (xy 270.640976 171.674346) (xy 270.363121 171.748797) (xy 270.097368 171.858875) + (xy 270.097351 171.858883) (xy 269.848248 172.002704) (xy 269.848232 172.002715) (xy 269.620028 172.177821) + (xy 269.620021 172.177827) (xy 269.416627 172.381221) (xy 269.34543 172.474007) (xy 269.289001 172.515209) + (xy 269.219255 172.519364) (xy 269.158335 172.485151) (xy 269.125583 172.423434) (xy 269.131396 172.353807) + (xy 269.139661 172.336531) (xy 269.192863 172.244383) (xy 269.300742 171.983939) (xy 269.373704 171.711642) + (xy 269.4105 171.432151) (xy 269.4105 171.150249) (xy 269.40923 171.140606) (xy 269.39237 171.012538) + (xy 269.373704 170.870758) (xy 269.300742 170.598461) (xy 269.192863 170.338017) (xy 269.192861 170.338014) + (xy 269.192859 170.338009) (xy 269.051916 170.09389) (xy 269.051912 170.093883) (xy 268.8803 169.870235) + (xy 268.880298 169.870233) (xy 268.880295 169.870229) (xy 268.68097 169.670904) (xy 268.678601 169.669086) + (xy 268.457317 169.499288) (xy 268.457311 169.499284) (xy 268.457309 169.499283) (xy 268.21319 169.35834) + (xy 268.213179 169.358335) (xy 267.952743 169.250459) (xy 267.680439 169.177495) (xy 267.400958 169.1407) + (xy 267.400951 169.1407) (xy 267.119049 169.1407) (xy 267.119041 169.1407) (xy 266.83956 169.177495) + (xy 266.567256 169.250459) (xy 266.30682 169.358335) (xy 266.306809 169.35834) (xy 266.062692 169.499281) + (xy 266.062683 169.499288) (xy 266.042106 169.515076) (xy 265.976938 169.54027) (xy 265.966622 169.5407) + (xy 262.634998 169.5407) (xy 262.634981 169.540701) (xy 262.532203 169.5512) (xy 262.5322 169.551201) + (xy 262.365668 169.606385) (xy 262.365663 169.606387) (xy 262.216342 169.698489) (xy 262.092289 169.822542) + (xy 262.000187 169.971863) (xy 262.000185 169.971868) (xy 261.972349 170.05587) (xy 261.945001 170.138403) + (xy 261.945001 170.138404) (xy 261.945 170.138404) (xy 261.9345 170.241183) (xy 259.706385 170.241183) + (xy 259.727712 170.219856) (xy 259.819814 170.070534) (xy 259.874999 169.903997) (xy 259.8855 169.801209) + (xy 259.885499 168.610241) (xy 271.4595 168.610241) (xy 271.4595 168.892158) (xy 271.496295 169.171639) + (xy 271.569259 169.443943) (xy 271.677135 169.704379) (xy 271.67714 169.70439) (xy 271.818083 169.948509) + (xy 271.818088 169.948517) (xy 271.963794 170.138404) (xy 271.989704 170.17217) (xy 272.189029 170.371495) + (xy 272.189033 170.371498) (xy 272.189035 170.3715) (xy 272.412683 170.543112) (xy 272.41269 170.543116) + (xy 272.656809 170.684059) (xy 272.656814 170.684061) (xy 272.656817 170.684063) (xy 272.917261 170.791942) + (xy 273.189558 170.864904) (xy 273.469049 170.9017) (xy 273.469056 170.9017) (xy 273.750944 170.9017) + (xy 273.750951 170.9017) (xy 274.030442 170.864904) (xy 274.302739 170.791942) (xy 274.563183 170.684063) + (xy 274.807317 170.543112) (xy 274.827892 170.527323) (xy 274.89306 170.502129) (xy 274.903379 170.501699) + (xy 276.084982 170.501699) (xy 276.084991 170.5017) (xy 278.235008 170.501699) (xy 278.337797 170.491199) + (xy 278.504334 170.436014) (xy 278.653656 170.343912) (xy 278.756385 170.241183) (xy 280.9845 170.241183) + (xy 280.9845 172.341201) (xy 280.984501 172.341218) (xy 280.995 172.443996) (xy 280.995001 172.443999) + (xy 281.050185 172.610531) (xy 281.050187 172.610536) (xy 281.051584 172.612801) (xy 281.142288 172.759856) + (xy 281.266344 172.883912) (xy 281.415666 172.976014) (xy 281.582203 173.031199) (xy 281.684991 173.0417) + (xy 283.612118 173.041699) (xy 283.612127 173.0417) (xy 284.040851 173.041699) (xy 284.107889 173.061383) + (xy 284.153644 173.114187) (xy 284.163588 173.183346) (xy 284.141169 173.238583) (xy 284.120151 173.267511) + (xy 284.043296 173.418346) (xy 283.990981 173.579352) (xy 283.9645 173.74655) (xy 283.9645 173.915849) + (xy 283.990981 174.083047) (xy 284.043296 174.244053) (xy 284.120152 174.394888) (xy 284.219648 174.531834) + (xy 284.219652 174.531839) (xy 284.33936 174.651547) (xy 284.339365 174.651551) (xy 284.404481 174.69886) + (xy 284.476315 174.75105) (xy 284.572425 174.80002) (xy 284.627146 174.827903) (xy 284.627148 174.827903) + (xy 284.627151 174.827905) (xy 284.71345 174.855945) (xy 284.788152 174.880218) (xy 284.955351 174.9067) + (xy 284.955356 174.9067) (xy 285.124649 174.9067) (xy 285.291847 174.880218) (xy 285.452849 174.827905) + (xy 285.603685 174.75105) (xy 285.740641 174.651546) (xy 285.860346 174.531841) (xy 285.95985 174.394885) + (xy 286.036705 174.244049) (xy 286.089018 174.083047) (xy 286.096131 174.038138) (xy 286.1155 173.915849) + (xy 286.1155 173.74655) (xy 286.089928 173.585098) (xy 286.098882 173.515805) (xy 286.143879 173.462353) + (xy 286.21063 173.441713) (xy 286.212401 173.4417) (xy 286.450944 173.4417) (xy 286.450951 173.4417) + (xy 286.730442 173.404904) (xy 287.002739 173.331942) (xy 287.263183 173.224063) (xy 287.507317 173.083112) + (xy 287.730965 172.9115) (xy 287.9303 172.712165) (xy 287.997992 172.623946) (xy 288.05442 172.582744) + (xy 288.124166 172.578589) (xy 288.185086 172.612801) (xy 288.217839 172.674518) (xy 288.212026 172.744146) + (xy 288.203755 172.761433) (xy 288.147683 172.858551) (xy 288.147675 172.858568) (xy 288.037597 173.124321) + (xy 287.963146 173.402176) (xy 287.925601 173.687361) (xy 287.9256 173.687377) (xy 287.9256 173.975022) + (xy 287.925601 173.975038) (xy 287.963146 174.260223) (xy 288.037597 174.538078) (xy 288.147675 174.803831) + (xy 288.147683 174.803848) (xy 288.291504 175.052951) (xy 288.291515 175.052967) (xy 288.466621 175.281171) + (xy 288.466627 175.281178) (xy 288.670021 175.484572) (xy 288.670028 175.484578) (xy 288.757732 175.551875) + (xy 288.898241 175.659691) (xy 288.898248 175.659695) (xy 289.147351 175.803516) (xy 289.147356 175.803518) + (xy 289.147359 175.80352) (xy 289.147363 175.803521) (xy 289.147368 175.803524) (xy 289.252723 175.847163) + (xy 289.41312 175.913602) (xy 289.690975 175.988053) (xy 289.976171 176.0256) (xy 289.976178 176.0256) + (xy 290.263822 176.0256) (xy 290.263829 176.0256) (xy 290.549025 175.988053) (xy 290.82688 175.913602) + (xy 291.092641 175.80352) (xy 291.341759 175.659691) (xy 291.569973 175.484577) (xy 291.773377 175.281173) + (xy 291.948491 175.052959) (xy 292.09232 174.803841) (xy 292.202402 174.53808) (xy 292.276853 174.260225) + (xy 292.3144 173.975029) (xy 292.3144 173.74655) (xy 294.1245 173.74655) (xy 294.1245 173.915849) + (xy 294.150981 174.083047) (xy 294.203296 174.244053) (xy 294.280152 174.394888) (xy 294.379648 174.531834) + (xy 294.379652 174.531839) (xy 294.49936 174.651547) (xy 294.499365 174.651551) (xy 294.564481 174.69886) + (xy 294.636315 174.75105) (xy 294.732425 174.80002) (xy 294.787146 174.827903) (xy 294.787148 174.827903) + (xy 294.787151 174.827905) (xy 294.87345 174.855945) (xy 294.948152 174.880218) (xy 295.115351 174.9067) + (xy 295.115356 174.9067) (xy 295.284649 174.9067) (xy 295.451847 174.880218) (xy 295.612849 174.827905) + (xy 295.763685 174.75105) (xy 295.900641 174.651546) (xy 296.020346 174.531841) (xy 296.11985 174.394885) + (xy 296.196705 174.244049) (xy 296.249018 174.083047) (xy 296.256131 174.038138) (xy 296.2755 173.915849) + (xy 296.2755 173.74655) (xy 296.249018 173.579352) (xy 296.224745 173.50465) (xy 296.196705 173.418351) + (xy 296.196703 173.418348) (xy 296.196703 173.418346) (xy 296.166403 173.358881) (xy 296.11985 173.267515) + (xy 296.088281 173.224064) (xy 296.020351 173.130565) (xy 296.020347 173.13056) (xy 295.900639 173.010852) + (xy 295.900634 173.010848) (xy 295.763688 172.911352) (xy 295.763687 172.911351) (xy 295.763685 172.91135) + (xy 295.709831 172.88391) (xy 295.612853 172.834496) (xy 295.451847 172.782181) (xy 295.284649 172.7557) + (xy 295.284644 172.7557) (xy 295.115356 172.7557) (xy 295.115351 172.7557) (xy 294.948152 172.782181) + (xy 294.787146 172.834496) (xy 294.636311 172.911352) (xy 294.499365 173.010848) (xy 294.49936 173.010852) + (xy 294.379652 173.13056) (xy 294.379648 173.130565) (xy 294.280152 173.267511) (xy 294.203296 173.418346) + (xy 294.150981 173.579352) (xy 294.1245 173.74655) (xy 292.3144 173.74655) (xy 292.3144 173.687371) + (xy 292.276853 173.402175) (xy 292.202402 173.12432) (xy 292.12646 172.940981) (xy 292.092324 172.858568) + (xy 292.092316 172.858551) (xy 291.949239 172.610736) (xy 291.948491 172.609441) (xy 291.864528 172.500018) + (xy 291.773378 172.381228) (xy 291.773372 172.381221) (xy 291.569978 172.177827) (xy 291.569971 172.177821) + (xy 291.341767 172.002715) (xy 291.341765 172.002713) (xy 291.341759 172.002709) (xy 291.341754 172.002706) + (xy 291.341751 172.002704) (xy 291.092648 171.858883) (xy 291.092631 171.858875) (xy 290.826878 171.748797) + (xy 290.549023 171.674346) (xy 290.263838 171.636801) (xy 290.263835 171.6368) (xy 290.263829 171.6368) + (xy 289.976171 171.6368) (xy 289.976165 171.6368) (xy 289.976161 171.636801) (xy 289.690976 171.674346) + (xy 289.413121 171.748797) (xy 289.147368 171.858875) (xy 289.147351 171.858883) (xy 288.898248 172.002704) + (xy 288.898232 172.002715) (xy 288.670028 172.177821) (xy 288.670021 172.177827) (xy 288.466627 172.381221) + (xy 288.39543 172.474007) (xy 288.339001 172.515209) (xy 288.269255 172.519364) (xy 288.208335 172.485151) + (xy 288.175583 172.423434) (xy 288.181396 172.353807) (xy 288.189661 172.336531) (xy 288.242863 172.244383) + (xy 288.350742 171.983939) (xy 288.423704 171.711642) (xy 288.4605 171.432151) (xy 288.4605 171.150249) + (xy 288.45923 171.140606) (xy 288.44237 171.012538) (xy 288.423704 170.870758) (xy 288.350742 170.598461) + (xy 288.242863 170.338017) (xy 288.242861 170.338014) (xy 288.242859 170.338009) (xy 288.101916 170.09389) + (xy 288.101912 170.093883) (xy 287.9303 169.870235) (xy 287.930298 169.870233) (xy 287.930295 169.870229) + (xy 287.73097 169.670904) (xy 287.728601 169.669086) (xy 287.507317 169.499288) (xy 287.507311 169.499284) + (xy 287.507309 169.499283) (xy 287.26319 169.35834) (xy 287.263179 169.358335) (xy 287.002743 169.250459) + (xy 286.730439 169.177495) (xy 286.450958 169.1407) (xy 286.450951 169.1407) (xy 286.169049 169.1407) + (xy 286.169041 169.1407) (xy 285.88956 169.177495) (xy 285.617256 169.250459) (xy 285.35682 169.358335) + (xy 285.356809 169.35834) (xy 285.112692 169.499281) (xy 285.112683 169.499288) (xy 285.092106 169.515076) + (xy 285.026938 169.54027) (xy 285.016622 169.5407) (xy 281.684998 169.5407) (xy 281.684981 169.540701) + (xy 281.582203 169.5512) (xy 281.5822 169.551201) (xy 281.415668 169.606385) (xy 281.415663 169.606387) + (xy 281.266342 169.698489) (xy 281.142289 169.822542) (xy 281.050187 169.971863) (xy 281.050185 169.971868) + (xy 281.022349 170.05587) (xy 280.995001 170.138403) (xy 280.995001 170.138404) (xy 280.995 170.138404) + (xy 280.9845 170.241183) (xy 278.756385 170.241183) (xy 278.777712 170.219856) (xy 278.869814 170.070534) + (xy 278.924999 169.903997) (xy 278.9355 169.801209) (xy 278.935499 168.610241) (xy 290.5095 168.610241) + (xy 290.5095 168.892158) (xy 290.546295 169.171639) (xy 290.619259 169.443943) (xy 290.727135 169.704379) + (xy 290.72714 169.70439) (xy 290.868083 169.948509) (xy 290.868088 169.948517) (xy 291.013794 170.138404) + (xy 291.039704 170.17217) (xy 291.239029 170.371495) (xy 291.239033 170.371498) (xy 291.239035 170.3715) + (xy 291.462683 170.543112) (xy 291.46269 170.543116) (xy 291.706809 170.684059) (xy 291.706814 170.684061) + (xy 291.706817 170.684063) (xy 291.967261 170.791942) (xy 292.239558 170.864904) (xy 292.519049 170.9017) + (xy 292.519056 170.9017) (xy 292.800944 170.9017) (xy 292.800951 170.9017) (xy 293.080442 170.864904) + (xy 293.352739 170.791942) (xy 293.613183 170.684063) (xy 293.857317 170.543112) (xy 293.877892 170.527323) + (xy 293.94306 170.502129) (xy 293.953379 170.501699) (xy 295.134982 170.501699) (xy 295.134991 170.5017) + (xy 297.285008 170.501699) (xy 297.387797 170.491199) (xy 297.554334 170.436014) (xy 297.703656 170.343912) + (xy 297.806385 170.241183) (xy 300.0345 170.241183) (xy 300.0345 172.341201) (xy 300.034501 172.341218) + (xy 300.045 172.443996) (xy 300.045001 172.443999) (xy 300.100185 172.610531) (xy 300.100187 172.610536) + (xy 300.101584 172.612801) (xy 300.192288 172.759856) (xy 300.316344 172.883912) (xy 300.465666 172.976014) + (xy 300.632203 173.031199) (xy 300.734991 173.0417) (xy 302.662118 173.041699) (xy 302.662127 173.0417) + (xy 303.090851 173.041699) (xy 303.157889 173.061383) (xy 303.203644 173.114187) (xy 303.213588 173.183346) + (xy 303.191169 173.238583) (xy 303.170151 173.267511) (xy 303.093296 173.418346) (xy 303.040981 173.579352) + (xy 303.0145 173.74655) (xy 303.0145 173.915849) (xy 303.040981 174.083047) (xy 303.093296 174.244053) + (xy 303.170152 174.394888) (xy 303.269648 174.531834) (xy 303.269652 174.531839) (xy 303.38936 174.651547) + (xy 303.389365 174.651551) (xy 303.454481 174.69886) (xy 303.526315 174.75105) (xy 303.622425 174.80002) + (xy 303.677146 174.827903) (xy 303.677148 174.827903) (xy 303.677151 174.827905) (xy 303.76345 174.855945) + (xy 303.838152 174.880218) (xy 304.005351 174.9067) (xy 304.005356 174.9067) (xy 304.174649 174.9067) + (xy 304.341847 174.880218) (xy 304.502849 174.827905) (xy 304.653685 174.75105) (xy 304.790641 174.651546) + (xy 304.910346 174.531841) (xy 305.00985 174.394885) (xy 305.086705 174.244049) (xy 305.139018 174.083047) + (xy 305.146131 174.038138) (xy 305.1655 173.915849) (xy 305.1655 173.74655) (xy 305.139928 173.585098) + (xy 305.148882 173.515805) (xy 305.193879 173.462353) (xy 305.26063 173.441713) (xy 305.262401 173.4417) + (xy 305.500944 173.4417) (xy 305.500951 173.4417) (xy 305.780442 173.404904) (xy 306.052739 173.331942) + (xy 306.313183 173.224063) (xy 306.557317 173.083112) (xy 306.780965 172.9115) (xy 306.9803 172.712165) + (xy 307.047992 172.623946) (xy 307.10442 172.582744) (xy 307.174166 172.578589) (xy 307.235086 172.612801) + (xy 307.267839 172.674518) (xy 307.262026 172.744146) (xy 307.253755 172.761433) (xy 307.197683 172.858551) + (xy 307.197675 172.858568) (xy 307.087597 173.124321) (xy 307.013146 173.402176) (xy 306.975601 173.687361) + (xy 306.9756 173.687377) (xy 306.9756 173.975022) (xy 306.975601 173.975038) (xy 307.013146 174.260223) + (xy 307.087597 174.538078) (xy 307.197675 174.803831) (xy 307.197683 174.803848) (xy 307.341504 175.052951) + (xy 307.341515 175.052967) (xy 307.516621 175.281171) (xy 307.516627 175.281178) (xy 307.720021 175.484572) + (xy 307.720028 175.484578) (xy 307.807732 175.551875) (xy 307.948241 175.659691) (xy 307.948248 175.659695) + (xy 308.197351 175.803516) (xy 308.197356 175.803518) (xy 308.197359 175.80352) (xy 308.197363 175.803521) + (xy 308.197368 175.803524) (xy 308.302723 175.847163) (xy 308.46312 175.913602) (xy 308.740975 175.988053) + (xy 309.026171 176.0256) (xy 309.026178 176.0256) (xy 309.313822 176.0256) (xy 309.313829 176.0256) + (xy 309.599025 175.988053) (xy 309.87688 175.913602) (xy 310.142641 175.80352) (xy 310.391759 175.659691) + (xy 310.619973 175.484577) (xy 310.823377 175.281173) (xy 310.998491 175.052959) (xy 311.14232 174.803841) + (xy 311.252402 174.53808) (xy 311.326853 174.260225) (xy 311.3644 173.975029) (xy 311.3644 173.74655) + (xy 313.1745 173.74655) (xy 313.1745 173.915849) (xy 313.200981 174.083047) (xy 313.253296 174.244053) + (xy 313.330152 174.394888) (xy 313.429648 174.531834) (xy 313.429652 174.531839) (xy 313.54936 174.651547) + (xy 313.549365 174.651551) (xy 313.614481 174.69886) (xy 313.686315 174.75105) (xy 313.782425 174.80002) + (xy 313.837146 174.827903) (xy 313.837148 174.827903) (xy 313.837151 174.827905) (xy 313.92345 174.855945) + (xy 313.998152 174.880218) (xy 314.165351 174.9067) (xy 314.165356 174.9067) (xy 314.334649 174.9067) + (xy 314.501847 174.880218) (xy 314.662849 174.827905) (xy 314.813685 174.75105) (xy 314.950641 174.651546) + (xy 315.070346 174.531841) (xy 315.16985 174.394885) (xy 315.246705 174.244049) (xy 315.299018 174.083047) + (xy 315.306131 174.038138) (xy 315.3255 173.915849) (xy 315.3255 173.74655) (xy 315.299018 173.579352) + (xy 315.274745 173.50465) (xy 315.246705 173.418351) (xy 315.246703 173.418348) (xy 315.246703 173.418346) + (xy 315.216403 173.358881) (xy 315.16985 173.267515) (xy 315.138281 173.224064) (xy 315.070351 173.130565) + (xy 315.070347 173.13056) (xy 314.950639 173.010852) (xy 314.950634 173.010848) (xy 314.813688 172.911352) + (xy 314.813687 172.911351) (xy 314.813685 172.91135) (xy 314.759831 172.88391) (xy 314.662853 172.834496) + (xy 314.501847 172.782181) (xy 314.334649 172.7557) (xy 314.334644 172.7557) (xy 314.165356 172.7557) + (xy 314.165351 172.7557) (xy 313.998152 172.782181) (xy 313.837146 172.834496) (xy 313.686311 172.911352) + (xy 313.549365 173.010848) (xy 313.54936 173.010852) (xy 313.429652 173.13056) (xy 313.429648 173.130565) + (xy 313.330152 173.267511) (xy 313.253296 173.418346) (xy 313.200981 173.579352) (xy 313.1745 173.74655) + (xy 311.3644 173.74655) (xy 311.3644 173.687371) (xy 311.326853 173.402175) (xy 311.252402 173.12432) + (xy 311.17646 172.940981) (xy 311.142324 172.858568) (xy 311.142316 172.858551) (xy 310.999239 172.610736) + (xy 310.998491 172.609441) (xy 310.914528 172.500018) (xy 310.823378 172.381228) (xy 310.823372 172.381221) + (xy 310.619978 172.177827) (xy 310.619971 172.177821) (xy 310.391767 172.002715) (xy 310.391765 172.002713) + (xy 310.391759 172.002709) (xy 310.391754 172.002706) (xy 310.391751 172.002704) (xy 310.142648 171.858883) + (xy 310.142631 171.858875) (xy 309.876878 171.748797) (xy 309.599023 171.674346) (xy 309.313838 171.636801) + (xy 309.313835 171.6368) (xy 309.313829 171.6368) (xy 309.026171 171.6368) (xy 309.026165 171.6368) + (xy 309.026161 171.636801) (xy 308.740976 171.674346) (xy 308.463121 171.748797) (xy 308.197368 171.858875) + (xy 308.197351 171.858883) (xy 307.948248 172.002704) (xy 307.948232 172.002715) (xy 307.720028 172.177821) + (xy 307.720021 172.177827) (xy 307.516627 172.381221) (xy 307.44543 172.474007) (xy 307.389001 172.515209) + (xy 307.319255 172.519364) (xy 307.258335 172.485151) (xy 307.225583 172.423434) (xy 307.231396 172.353807) + (xy 307.239661 172.336531) (xy 307.292863 172.244383) (xy 307.400742 171.983939) (xy 307.473704 171.711642) + (xy 307.5105 171.432151) (xy 307.5105 171.150249) (xy 307.50923 171.140606) (xy 307.49237 171.012538) + (xy 307.473704 170.870758) (xy 307.400742 170.598461) (xy 307.292863 170.338017) (xy 307.292861 170.338014) + (xy 307.292859 170.338009) (xy 307.151916 170.09389) (xy 307.151912 170.093883) (xy 306.9803 169.870235) + (xy 306.980298 169.870233) (xy 306.980295 169.870229) (xy 306.78097 169.670904) (xy 306.778601 169.669086) + (xy 306.557317 169.499288) (xy 306.557311 169.499284) (xy 306.557309 169.499283) (xy 306.31319 169.35834) + (xy 306.313179 169.358335) (xy 306.052743 169.250459) (xy 305.780439 169.177495) (xy 305.500958 169.1407) + (xy 305.500951 169.1407) (xy 305.219049 169.1407) (xy 305.219041 169.1407) (xy 304.93956 169.177495) + (xy 304.667256 169.250459) (xy 304.40682 169.358335) (xy 304.406809 169.35834) (xy 304.162692 169.499281) + (xy 304.162683 169.499288) (xy 304.142106 169.515076) (xy 304.076938 169.54027) (xy 304.066622 169.5407) + (xy 300.734998 169.5407) (xy 300.734981 169.540701) (xy 300.632203 169.5512) (xy 300.6322 169.551201) + (xy 300.465668 169.606385) (xy 300.465663 169.606387) (xy 300.316342 169.698489) (xy 300.192289 169.822542) + (xy 300.100187 169.971863) (xy 300.100185 169.971868) (xy 300.072349 170.05587) (xy 300.045001 170.138403) + (xy 300.045001 170.138404) (xy 300.045 170.138404) (xy 300.0345 170.241183) (xy 297.806385 170.241183) + (xy 297.827712 170.219856) (xy 297.919814 170.070534) (xy 297.974999 169.903997) (xy 297.9855 169.801209) + (xy 297.985499 168.610241) (xy 309.5595 168.610241) (xy 309.5595 168.892158) (xy 309.596295 169.171639) + (xy 309.669259 169.443943) (xy 309.777135 169.704379) (xy 309.77714 169.70439) (xy 309.918083 169.948509) + (xy 309.918088 169.948517) (xy 310.063794 170.138404) (xy 310.089704 170.17217) (xy 310.289029 170.371495) + (xy 310.289033 170.371498) (xy 310.289035 170.3715) (xy 310.512683 170.543112) (xy 310.51269 170.543116) + (xy 310.756809 170.684059) (xy 310.756814 170.684061) (xy 310.756817 170.684063) (xy 311.017261 170.791942) + (xy 311.289558 170.864904) (xy 311.569049 170.9017) (xy 311.569056 170.9017) (xy 311.850944 170.9017) + (xy 311.850951 170.9017) (xy 312.130442 170.864904) (xy 312.402739 170.791942) (xy 312.663183 170.684063) + (xy 312.907317 170.543112) (xy 312.927892 170.527323) (xy 312.99306 170.502129) (xy 313.003379 170.501699) + (xy 314.184982 170.501699) (xy 314.184991 170.5017) (xy 316.335008 170.501699) (xy 316.437797 170.491199) + (xy 316.604334 170.436014) (xy 316.753656 170.343912) (xy 316.856385 170.241183) (xy 319.0845 170.241183) + (xy 319.0845 172.341201) (xy 319.084501 172.341218) (xy 319.095 172.443996) (xy 319.095001 172.443999) + (xy 319.150185 172.610531) (xy 319.150187 172.610536) (xy 319.151584 172.612801) (xy 319.242288 172.759856) + (xy 319.366344 172.883912) (xy 319.515666 172.976014) (xy 319.682203 173.031199) (xy 319.784991 173.0417) + (xy 321.712118 173.041699) (xy 321.712127 173.0417) (xy 322.140851 173.041699) (xy 322.207889 173.061383) + (xy 322.253644 173.114187) (xy 322.263588 173.183346) (xy 322.241169 173.238583) (xy 322.220151 173.267511) + (xy 322.143296 173.418346) (xy 322.090981 173.579352) (xy 322.0645 173.74655) (xy 322.0645 173.915849) + (xy 322.090981 174.083047) (xy 322.143296 174.244053) (xy 322.220152 174.394888) (xy 322.319648 174.531834) + (xy 322.319652 174.531839) (xy 322.43936 174.651547) (xy 322.439365 174.651551) (xy 322.504481 174.69886) + (xy 322.576315 174.75105) (xy 322.672425 174.80002) (xy 322.727146 174.827903) (xy 322.727148 174.827903) + (xy 322.727151 174.827905) (xy 322.81345 174.855945) (xy 322.888152 174.880218) (xy 323.055351 174.9067) + (xy 323.055356 174.9067) (xy 323.224649 174.9067) (xy 323.391847 174.880218) (xy 323.552849 174.827905) + (xy 323.703685 174.75105) (xy 323.840641 174.651546) (xy 323.960346 174.531841) (xy 324.05985 174.394885) + (xy 324.136705 174.244049) (xy 324.189018 174.083047) (xy 324.196131 174.038138) (xy 324.2155 173.915849) + (xy 324.2155 173.74655) (xy 324.189928 173.585098) (xy 324.198882 173.515805) (xy 324.243879 173.462353) + (xy 324.31063 173.441713) (xy 324.312401 173.4417) (xy 324.550944 173.4417) (xy 324.550951 173.4417) + (xy 324.830442 173.404904) (xy 325.102739 173.331942) (xy 325.363183 173.224063) (xy 325.607317 173.083112) + (xy 325.830965 172.9115) (xy 326.0303 172.712165) (xy 326.097992 172.623946) (xy 326.15442 172.582744) + (xy 326.224166 172.578589) (xy 326.285086 172.612801) (xy 326.317839 172.674518) (xy 326.312026 172.744146) + (xy 326.303755 172.761433) (xy 326.247683 172.858551) (xy 326.247675 172.858568) (xy 326.137597 173.124321) + (xy 326.063146 173.402176) (xy 326.025601 173.687361) (xy 326.0256 173.687377) (xy 326.0256 173.975022) + (xy 326.025601 173.975038) (xy 326.063146 174.260223) (xy 326.137597 174.538078) (xy 326.247675 174.803831) + (xy 326.247683 174.803848) (xy 326.391504 175.052951) (xy 326.391515 175.052967) (xy 326.566621 175.281171) + (xy 326.566627 175.281178) (xy 326.770021 175.484572) (xy 326.770028 175.484578) (xy 326.857732 175.551875) + (xy 326.998241 175.659691) (xy 326.998248 175.659695) (xy 327.247351 175.803516) (xy 327.247356 175.803518) + (xy 327.247359 175.80352) (xy 327.247363 175.803521) (xy 327.247368 175.803524) (xy 327.352723 175.847163) + (xy 327.51312 175.913602) (xy 327.790975 175.988053) (xy 328.076171 176.0256) (xy 328.076178 176.0256) + (xy 328.363822 176.0256) (xy 328.363829 176.0256) (xy 328.649025 175.988053) (xy 328.92688 175.913602) + (xy 329.192641 175.80352) (xy 329.441759 175.659691) (xy 329.669973 175.484577) (xy 329.873377 175.281173) + (xy 330.048491 175.052959) (xy 330.19232 174.803841) (xy 330.302402 174.53808) (xy 330.376853 174.260225) + (xy 330.4144 173.975029) (xy 330.4144 173.74655) (xy 332.2245 173.74655) (xy 332.2245 173.915849) + (xy 332.250981 174.083047) (xy 332.303296 174.244053) (xy 332.380152 174.394888) (xy 332.479648 174.531834) + (xy 332.479652 174.531839) (xy 332.59936 174.651547) (xy 332.599365 174.651551) (xy 332.664481 174.69886) + (xy 332.736315 174.75105) (xy 332.832425 174.80002) (xy 332.887146 174.827903) (xy 332.887148 174.827903) + (xy 332.887151 174.827905) (xy 332.97345 174.855945) (xy 333.048152 174.880218) (xy 333.215351 174.9067) + (xy 333.215356 174.9067) (xy 333.384649 174.9067) (xy 333.551847 174.880218) (xy 333.712849 174.827905) + (xy 333.863685 174.75105) (xy 334.000641 174.651546) (xy 334.120346 174.531841) (xy 334.21985 174.394885) + (xy 334.296705 174.244049) (xy 334.349018 174.083047) (xy 334.356131 174.038138) (xy 334.3755 173.915849) + (xy 334.3755 173.74655) (xy 334.349018 173.579352) (xy 334.324745 173.50465) (xy 334.296705 173.418351) + (xy 334.296703 173.418348) (xy 334.296703 173.418346) (xy 334.266403 173.358881) (xy 334.21985 173.267515) + (xy 334.188281 173.224064) (xy 334.120351 173.130565) (xy 334.120347 173.13056) (xy 334.000639 173.010852) + (xy 334.000634 173.010848) (xy 333.863688 172.911352) (xy 333.863687 172.911351) (xy 333.863685 172.91135) + (xy 333.809831 172.88391) (xy 333.712853 172.834496) (xy 333.551847 172.782181) (xy 333.384649 172.7557) + (xy 333.384644 172.7557) (xy 333.215356 172.7557) (xy 333.215351 172.7557) (xy 333.048152 172.782181) + (xy 332.887146 172.834496) (xy 332.736311 172.911352) (xy 332.599365 173.010848) (xy 332.59936 173.010852) + (xy 332.479652 173.13056) (xy 332.479648 173.130565) (xy 332.380152 173.267511) (xy 332.303296 173.418346) + (xy 332.250981 173.579352) (xy 332.2245 173.74655) (xy 330.4144 173.74655) (xy 330.4144 173.687371) + (xy 330.376853 173.402175) (xy 330.302402 173.12432) (xy 330.22646 172.940981) (xy 330.192324 172.858568) + (xy 330.192316 172.858551) (xy 330.049239 172.610736) (xy 330.048491 172.609441) (xy 329.964528 172.500018) + (xy 329.873378 172.381228) (xy 329.873372 172.381221) (xy 329.669978 172.177827) (xy 329.669971 172.177821) + (xy 329.441767 172.002715) (xy 329.441765 172.002713) (xy 329.441759 172.002709) (xy 329.441754 172.002706) + (xy 329.441751 172.002704) (xy 329.192648 171.858883) (xy 329.192631 171.858875) (xy 328.926878 171.748797) + (xy 328.649023 171.674346) (xy 328.363838 171.636801) (xy 328.363835 171.6368) (xy 328.363829 171.6368) + (xy 328.076171 171.6368) (xy 328.076165 171.6368) (xy 328.076161 171.636801) (xy 327.790976 171.674346) + (xy 327.513121 171.748797) (xy 327.247368 171.858875) (xy 327.247351 171.858883) (xy 326.998248 172.002704) + (xy 326.998232 172.002715) (xy 326.770028 172.177821) (xy 326.770021 172.177827) (xy 326.566627 172.381221) + (xy 326.49543 172.474007) (xy 326.439001 172.515209) (xy 326.369255 172.519364) (xy 326.308335 172.485151) + (xy 326.275583 172.423434) (xy 326.281396 172.353807) (xy 326.289661 172.336531) (xy 326.342863 172.244383) + (xy 326.450742 171.983939) (xy 326.523704 171.711642) (xy 326.5605 171.432151) (xy 326.5605 171.150249) + (xy 326.55923 171.140606) (xy 326.54237 171.012538) (xy 326.523704 170.870758) (xy 326.450742 170.598461) + (xy 326.342863 170.338017) (xy 326.342861 170.338014) (xy 326.342859 170.338009) (xy 326.201916 170.09389) + (xy 326.201912 170.093883) (xy 326.0303 169.870235) (xy 326.030298 169.870233) (xy 326.030295 169.870229) + (xy 325.83097 169.670904) (xy 325.828601 169.669086) (xy 325.607317 169.499288) (xy 325.607311 169.499284) + (xy 325.607309 169.499283) (xy 325.36319 169.35834) (xy 325.363179 169.358335) (xy 325.102743 169.250459) + (xy 324.830439 169.177495) (xy 324.550958 169.1407) (xy 324.550951 169.1407) (xy 324.269049 169.1407) + (xy 324.269041 169.1407) (xy 323.98956 169.177495) (xy 323.717256 169.250459) (xy 323.45682 169.358335) + (xy 323.456809 169.35834) (xy 323.212692 169.499281) (xy 323.212683 169.499288) (xy 323.192106 169.515076) + (xy 323.126938 169.54027) (xy 323.116622 169.5407) (xy 319.784998 169.5407) (xy 319.784981 169.540701) + (xy 319.682203 169.5512) (xy 319.6822 169.551201) (xy 319.515668 169.606385) (xy 319.515663 169.606387) + (xy 319.366342 169.698489) (xy 319.242289 169.822542) (xy 319.150187 169.971863) (xy 319.150185 169.971868) + (xy 319.122349 170.05587) (xy 319.095001 170.138403) (xy 319.095001 170.138404) (xy 319.095 170.138404) + (xy 319.0845 170.241183) (xy 316.856385 170.241183) (xy 316.877712 170.219856) (xy 316.969814 170.070534) + (xy 317.024999 169.903997) (xy 317.0355 169.801209) (xy 317.035499 168.610241) (xy 328.6095 168.610241) + (xy 328.6095 168.892158) (xy 328.646295 169.171639) (xy 328.719259 169.443943) (xy 328.827135 169.704379) + (xy 328.82714 169.70439) (xy 328.968083 169.948509) (xy 328.968088 169.948517) (xy 329.113794 170.138404) + (xy 329.139704 170.17217) (xy 329.339029 170.371495) (xy 329.339033 170.371498) (xy 329.339035 170.3715) + (xy 329.562683 170.543112) (xy 329.56269 170.543116) (xy 329.806809 170.684059) (xy 329.806814 170.684061) + (xy 329.806817 170.684063) (xy 330.067261 170.791942) (xy 330.339558 170.864904) (xy 330.619049 170.9017) + (xy 330.619056 170.9017) (xy 330.900944 170.9017) (xy 330.900951 170.9017) (xy 331.180442 170.864904) + (xy 331.452739 170.791942) (xy 331.713183 170.684063) (xy 331.957317 170.543112) (xy 331.977892 170.527323) + (xy 332.04306 170.502129) (xy 332.053379 170.501699) (xy 333.234982 170.501699) (xy 333.234991 170.5017) + (xy 335.385008 170.501699) (xy 335.487797 170.491199) (xy 335.654334 170.436014) (xy 335.803656 170.343912) + (xy 335.906385 170.241183) (xy 338.1345 170.241183) (xy 338.1345 172.341201) (xy 338.134501 172.341218) + (xy 338.145 172.443996) (xy 338.145001 172.443999) (xy 338.200185 172.610531) (xy 338.200187 172.610536) + (xy 338.201584 172.612801) (xy 338.292288 172.759856) (xy 338.416344 172.883912) (xy 338.565666 172.976014) + (xy 338.732203 173.031199) (xy 338.834991 173.0417) (xy 340.762118 173.041699) (xy 340.762127 173.0417) + (xy 341.190851 173.041699) (xy 341.257889 173.061383) (xy 341.303644 173.114187) (xy 341.313588 173.183346) + (xy 341.291169 173.238583) (xy 341.270151 173.267511) (xy 341.193296 173.418346) (xy 341.140981 173.579352) + (xy 341.1145 173.74655) (xy 341.1145 173.915849) (xy 341.140981 174.083047) (xy 341.193296 174.244053) + (xy 341.270152 174.394888) (xy 341.369648 174.531834) (xy 341.369652 174.531839) (xy 341.48936 174.651547) + (xy 341.489365 174.651551) (xy 341.554481 174.69886) (xy 341.626315 174.75105) (xy 341.722425 174.80002) + (xy 341.777146 174.827903) (xy 341.777148 174.827903) (xy 341.777151 174.827905) (xy 341.86345 174.855945) + (xy 341.938152 174.880218) (xy 342.105351 174.9067) (xy 342.105356 174.9067) (xy 342.274649 174.9067) + (xy 342.441847 174.880218) (xy 342.602849 174.827905) (xy 342.753685 174.75105) (xy 342.890641 174.651546) + (xy 343.010346 174.531841) (xy 343.10985 174.394885) (xy 343.186705 174.244049) (xy 343.239018 174.083047) + (xy 343.246131 174.038138) (xy 343.2655 173.915849) (xy 343.2655 173.74655) (xy 343.239928 173.585098) + (xy 343.248882 173.515805) (xy 343.293879 173.462353) (xy 343.36063 173.441713) (xy 343.362401 173.4417) + (xy 343.600944 173.4417) (xy 343.600951 173.4417) (xy 343.880442 173.404904) (xy 344.152739 173.331942) + (xy 344.413183 173.224063) (xy 344.657317 173.083112) (xy 344.880965 172.9115) (xy 345.0803 172.712165) + (xy 345.147992 172.623946) (xy 345.20442 172.582744) (xy 345.274166 172.578589) (xy 345.335086 172.612801) + (xy 345.367839 172.674518) (xy 345.362026 172.744146) (xy 345.353755 172.761433) (xy 345.297683 172.858551) + (xy 345.297675 172.858568) (xy 345.187597 173.124321) (xy 345.113146 173.402176) (xy 345.075601 173.687361) + (xy 345.0756 173.687377) (xy 345.0756 173.975022) (xy 345.075601 173.975038) (xy 345.113146 174.260223) + (xy 345.187597 174.538078) (xy 345.297675 174.803831) (xy 345.297683 174.803848) (xy 345.441504 175.052951) + (xy 345.441515 175.052967) (xy 345.616621 175.281171) (xy 345.616627 175.281178) (xy 345.820021 175.484572) + (xy 345.820028 175.484578) (xy 345.907732 175.551875) (xy 346.048241 175.659691) (xy 346.048248 175.659695) + (xy 346.297351 175.803516) (xy 346.297356 175.803518) (xy 346.297359 175.80352) (xy 346.297363 175.803521) + (xy 346.297368 175.803524) (xy 346.402723 175.847163) (xy 346.56312 175.913602) (xy 346.840975 175.988053) + (xy 347.126171 176.0256) (xy 347.126178 176.0256) (xy 347.413822 176.0256) (xy 347.413829 176.0256) + (xy 347.699025 175.988053) (xy 347.97688 175.913602) (xy 348.242641 175.80352) (xy 348.491759 175.659691) + (xy 348.719973 175.484577) (xy 348.923377 175.281173) (xy 349.098491 175.052959) (xy 349.24232 174.803841) + (xy 349.352402 174.53808) (xy 349.426853 174.260225) (xy 349.4644 173.975029) (xy 349.4644 173.74655) + (xy 351.2745 173.74655) (xy 351.2745 173.915849) (xy 351.300981 174.083047) (xy 351.353296 174.244053) + (xy 351.430152 174.394888) (xy 351.529648 174.531834) (xy 351.529652 174.531839) (xy 351.64936 174.651547) + (xy 351.649365 174.651551) (xy 351.714481 174.69886) (xy 351.786315 174.75105) (xy 351.882425 174.80002) + (xy 351.937146 174.827903) (xy 351.937148 174.827903) (xy 351.937151 174.827905) (xy 352.02345 174.855945) + (xy 352.098152 174.880218) (xy 352.265351 174.9067) (xy 352.265356 174.9067) (xy 352.434649 174.9067) + (xy 352.601847 174.880218) (xy 352.762849 174.827905) (xy 352.913685 174.75105) (xy 353.050641 174.651546) + (xy 353.170346 174.531841) (xy 353.26985 174.394885) (xy 353.346705 174.244049) (xy 353.399018 174.083047) + (xy 353.406131 174.038138) (xy 353.4255 173.915849) (xy 353.4255 173.74655) (xy 353.399018 173.579352) + (xy 353.374745 173.50465) (xy 353.346705 173.418351) (xy 353.346703 173.418348) (xy 353.346703 173.418346) + (xy 353.316403 173.358881) (xy 353.26985 173.267515) (xy 353.238281 173.224064) (xy 353.170351 173.130565) + (xy 353.170347 173.13056) (xy 353.050639 173.010852) (xy 353.050634 173.010848) (xy 352.913688 172.911352) + (xy 352.913687 172.911351) (xy 352.913685 172.91135) (xy 352.859831 172.88391) (xy 352.762853 172.834496) + (xy 352.601847 172.782181) (xy 352.434649 172.7557) (xy 352.434644 172.7557) (xy 352.265356 172.7557) + (xy 352.265351 172.7557) (xy 352.098152 172.782181) (xy 351.937146 172.834496) (xy 351.786311 172.911352) + (xy 351.649365 173.010848) (xy 351.64936 173.010852) (xy 351.529652 173.13056) (xy 351.529648 173.130565) + (xy 351.430152 173.267511) (xy 351.353296 173.418346) (xy 351.300981 173.579352) (xy 351.2745 173.74655) + (xy 349.4644 173.74655) (xy 349.4644 173.687371) (xy 349.426853 173.402175) (xy 349.352402 173.12432) + (xy 349.27646 172.940981) (xy 349.242324 172.858568) (xy 349.242316 172.858551) (xy 349.099239 172.610736) + (xy 349.098491 172.609441) (xy 349.014528 172.500018) (xy 348.923378 172.381228) (xy 348.923372 172.381221) + (xy 348.719978 172.177827) (xy 348.719971 172.177821) (xy 348.491767 172.002715) (xy 348.491765 172.002713) + (xy 348.491759 172.002709) (xy 348.491754 172.002706) (xy 348.491751 172.002704) (xy 348.242648 171.858883) + (xy 348.242631 171.858875) (xy 347.976878 171.748797) (xy 347.699023 171.674346) (xy 347.413838 171.636801) + (xy 347.413835 171.6368) (xy 347.413829 171.6368) (xy 347.126171 171.6368) (xy 347.126165 171.6368) + (xy 347.126161 171.636801) (xy 346.840976 171.674346) (xy 346.563121 171.748797) (xy 346.297368 171.858875) + (xy 346.297351 171.858883) (xy 346.048248 172.002704) (xy 346.048232 172.002715) (xy 345.820028 172.177821) + (xy 345.820021 172.177827) (xy 345.616627 172.381221) (xy 345.54543 172.474007) (xy 345.489001 172.515209) + (xy 345.419255 172.519364) (xy 345.358335 172.485151) (xy 345.325583 172.423434) (xy 345.331396 172.353807) + (xy 345.339661 172.336531) (xy 345.392863 172.244383) (xy 345.500742 171.983939) (xy 345.573704 171.711642) + (xy 345.6105 171.432151) (xy 345.6105 171.150249) (xy 345.60923 171.140606) (xy 345.59237 171.012538) + (xy 345.573704 170.870758) (xy 345.500742 170.598461) (xy 345.392863 170.338017) (xy 345.392861 170.338014) + (xy 345.392859 170.338009) (xy 345.251916 170.09389) (xy 345.251912 170.093883) (xy 345.0803 169.870235) + (xy 345.080298 169.870233) (xy 345.080295 169.870229) (xy 344.88097 169.670904) (xy 344.878601 169.669086) + (xy 344.657317 169.499288) (xy 344.657311 169.499284) (xy 344.657309 169.499283) (xy 344.41319 169.35834) + (xy 344.413179 169.358335) (xy 344.152743 169.250459) (xy 343.880439 169.177495) (xy 343.600958 169.1407) + (xy 343.600951 169.1407) (xy 343.319049 169.1407) (xy 343.319041 169.1407) (xy 343.03956 169.177495) + (xy 342.767256 169.250459) (xy 342.50682 169.358335) (xy 342.506809 169.35834) (xy 342.262692 169.499281) + (xy 342.262683 169.499288) (xy 342.242106 169.515076) (xy 342.176938 169.54027) (xy 342.166622 169.5407) + (xy 338.834998 169.5407) (xy 338.834981 169.540701) (xy 338.732203 169.5512) (xy 338.7322 169.551201) + (xy 338.565668 169.606385) (xy 338.565663 169.606387) (xy 338.416342 169.698489) (xy 338.292289 169.822542) + (xy 338.200187 169.971863) (xy 338.200185 169.971868) (xy 338.172349 170.05587) (xy 338.145001 170.138403) + (xy 338.145001 170.138404) (xy 338.145 170.138404) (xy 338.1345 170.241183) (xy 335.906385 170.241183) + (xy 335.927712 170.219856) (xy 336.019814 170.070534) (xy 336.074999 169.903997) (xy 336.0855 169.801209) + (xy 336.085499 168.610241) (xy 347.6595 168.610241) (xy 347.6595 168.892158) (xy 347.696295 169.171639) + (xy 347.769259 169.443943) (xy 347.877135 169.704379) (xy 347.87714 169.70439) (xy 348.018083 169.948509) + (xy 348.018088 169.948517) (xy 348.163794 170.138404) (xy 348.189704 170.17217) (xy 348.389029 170.371495) + (xy 348.389033 170.371498) (xy 348.389035 170.3715) (xy 348.612683 170.543112) (xy 348.61269 170.543116) + (xy 348.856809 170.684059) (xy 348.856814 170.684061) (xy 348.856817 170.684063) (xy 349.117261 170.791942) + (xy 349.389558 170.864904) (xy 349.669049 170.9017) (xy 349.669056 170.9017) (xy 349.950944 170.9017) + (xy 349.950951 170.9017) (xy 350.230442 170.864904) (xy 350.502739 170.791942) (xy 350.763183 170.684063) + (xy 351.007317 170.543112) (xy 351.027892 170.527323) (xy 351.09306 170.502129) (xy 351.103379 170.501699) + (xy 352.284982 170.501699) (xy 352.284991 170.5017) (xy 354.435008 170.501699) (xy 354.537797 170.491199) + (xy 354.704334 170.436014) (xy 354.853656 170.343912) (xy 354.977712 170.219856) (xy 355.069814 170.070534) + (xy 355.124999 169.903997) (xy 355.1355 169.801209) (xy 355.135499 167.701192) (xy 355.124999 167.598403) + (xy 355.069814 167.431866) (xy 354.977712 167.282544) (xy 354.853656 167.158488) (xy 354.760888 167.101269) + (xy 354.704336 167.066387) (xy 354.704331 167.066385) (xy 354.695323 167.0634) (xy 354.537797 167.011201) + (xy 354.537795 167.0112) (xy 354.435016 167.0007) (xy 354.435009 167.0007) (xy 352.723506 167.0007) + (xy 352.676053 166.991261) (xy 352.629554 166.972) (xy 352.629553 166.972) (xy 351.655253 166.972) + (xy 351.062561 166.972) (xy 351.000561 166.955387) (xy 350.76319 166.81834) (xy 350.763179 166.818335) + (xy 350.502743 166.710459) (xy 350.230439 166.637495) (xy 349.950958 166.6007) (xy 349.950951 166.6007) + (xy 349.669049 166.6007) (xy 349.669041 166.6007) (xy 349.38956 166.637495) (xy 349.117256 166.710459) + (xy 348.85682 166.818335) (xy 348.856809 166.81834) (xy 348.61269 166.959283) (xy 348.612684 166.959287) + (xy 348.612683 166.959288) (xy 348.592108 166.975076) (xy 348.389029 167.130904) (xy 348.189704 167.330229) + (xy 348.082172 167.470368) (xy 348.029112 167.539517) (xy 348.018089 167.553882) (xy 348.018083 167.55389) + (xy 347.87714 167.798009) (xy 347.877135 167.79802) (xy 347.769259 168.058456) (xy 347.696295 168.33076) + (xy 347.6595 168.610241) (xy 336.085499 168.610241) (xy 336.085499 167.701192) (xy 336.074999 167.598403) + (xy 336.019814 167.431866) (xy 335.927712 167.282544) (xy 335.803656 167.158488) (xy 335.710888 167.101269) + (xy 335.654336 167.066387) (xy 335.654331 167.066385) (xy 335.645323 167.0634) (xy 335.487797 167.011201) + (xy 335.487795 167.0112) (xy 335.385016 167.0007) (xy 335.385009 167.0007) (xy 333.673406 167.0007) + (xy 333.625953 166.991261) (xy 333.579454 166.972) (xy 333.579453 166.972) (xy 332.605253 166.972) + (xy 332.012561 166.972) (xy 331.950561 166.955387) (xy 331.71319 166.81834) (xy 331.713179 166.818335) + (xy 331.452743 166.710459) (xy 331.180439 166.637495) (xy 330.900958 166.6007) (xy 330.900951 166.6007) + (xy 330.619049 166.6007) (xy 330.619041 166.6007) (xy 330.33956 166.637495) (xy 330.067256 166.710459) + (xy 329.80682 166.818335) (xy 329.806809 166.81834) (xy 329.56269 166.959283) (xy 329.562684 166.959287) + (xy 329.562683 166.959288) (xy 329.542108 166.975076) (xy 329.339029 167.130904) (xy 329.139704 167.330229) + (xy 329.032172 167.470368) (xy 328.979112 167.539517) (xy 328.968089 167.553882) (xy 328.968083 167.55389) + (xy 328.82714 167.798009) (xy 328.827135 167.79802) (xy 328.719259 168.058456) (xy 328.646295 168.33076) + (xy 328.6095 168.610241) (xy 317.035499 168.610241) (xy 317.035499 167.701192) (xy 317.024999 167.598403) + (xy 316.969814 167.431866) (xy 316.877712 167.282544) (xy 316.753656 167.158488) (xy 316.660888 167.101269) + (xy 316.604336 167.066387) (xy 316.604331 167.066385) (xy 316.595323 167.0634) (xy 316.437797 167.011201) + (xy 316.437795 167.0112) (xy 316.335016 167.0007) (xy 316.335009 167.0007) (xy 314.382881 167.0007) + (xy 314.382873 167.0007) (xy 313.649206 167.0007) (xy 313.601753 166.991261) (xy 313.555253 166.972) + (xy 312.962561 166.972) (xy 312.900561 166.955387) (xy 312.66319 166.81834) (xy 312.663179 166.818335) + (xy 312.402743 166.710459) (xy 312.130439 166.637495) (xy 311.850958 166.6007) (xy 311.850951 166.6007) + (xy 311.569049 166.6007) (xy 311.569041 166.6007) (xy 311.28956 166.637495) (xy 311.017256 166.710459) + (xy 310.75682 166.818335) (xy 310.756809 166.81834) (xy 310.51269 166.959283) (xy 310.512684 166.959287) + (xy 310.512683 166.959288) (xy 310.492108 166.975076) (xy 310.289029 167.130904) (xy 310.089704 167.330229) + (xy 309.982172 167.470368) (xy 309.929112 167.539517) (xy 309.918089 167.553882) (xy 309.918083 167.55389) + (xy 309.77714 167.798009) (xy 309.777135 167.79802) (xy 309.669259 168.058456) (xy 309.596295 168.33076) + (xy 309.5595 168.610241) (xy 297.985499 168.610241) (xy 297.985499 167.701192) (xy 297.974999 167.598403) + (xy 297.919814 167.431866) (xy 297.827712 167.282544) (xy 297.703656 167.158488) (xy 297.610888 167.101269) + (xy 297.554336 167.066387) (xy 297.554331 167.066385) (xy 297.545323 167.0634) (xy 297.387797 167.011201) + (xy 297.387795 167.0112) (xy 297.285016 167.0007) (xy 297.285009 167.0007) (xy 295.573406 167.0007) + (xy 295.525953 166.991261) (xy 295.479454 166.972) (xy 295.479453 166.972) (xy 294.505253 166.972) + (xy 293.912561 166.972) (xy 293.850561 166.955387) (xy 293.61319 166.81834) (xy 293.613179 166.818335) + (xy 293.352743 166.710459) (xy 293.080439 166.637495) (xy 292.800958 166.6007) (xy 292.800951 166.6007) + (xy 292.519049 166.6007) (xy 292.519041 166.6007) (xy 292.23956 166.637495) (xy 291.967256 166.710459) + (xy 291.70682 166.818335) (xy 291.706809 166.81834) (xy 291.46269 166.959283) (xy 291.462684 166.959287) + (xy 291.462683 166.959288) (xy 291.442108 166.975076) (xy 291.239029 167.130904) (xy 291.039704 167.330229) + (xy 290.932172 167.470368) (xy 290.879112 167.539517) (xy 290.868089 167.553882) (xy 290.868083 167.55389) + (xy 290.72714 167.798009) (xy 290.727135 167.79802) (xy 290.619259 168.058456) (xy 290.546295 168.33076) + (xy 290.5095 168.610241) (xy 278.935499 168.610241) (xy 278.935499 167.701192) (xy 278.924999 167.598403) + (xy 278.869814 167.431866) (xy 278.777712 167.282544) (xy 278.653656 167.158488) (xy 278.560888 167.101269) + (xy 278.504336 167.066387) (xy 278.504331 167.066385) (xy 278.495323 167.0634) (xy 278.337797 167.011201) + (xy 278.337795 167.0112) (xy 278.235016 167.0007) (xy 278.235009 167.0007) (xy 276.523406 167.0007) + (xy 276.475953 166.991261) (xy 276.429454 166.972) (xy 276.429453 166.972) (xy 275.455253 166.972) + (xy 274.862561 166.972) (xy 274.800561 166.955387) (xy 274.56319 166.81834) (xy 274.563179 166.818335) + (xy 274.302743 166.710459) (xy 274.030439 166.637495) (xy 273.750958 166.6007) (xy 273.750951 166.6007) + (xy 273.469049 166.6007) (xy 273.469041 166.6007) (xy 273.18956 166.637495) (xy 272.917256 166.710459) + (xy 272.65682 166.818335) (xy 272.656809 166.81834) (xy 272.41269 166.959283) (xy 272.412684 166.959287) + (xy 272.412683 166.959288) (xy 272.392108 166.975076) (xy 272.189029 167.130904) (xy 271.989704 167.330229) + (xy 271.882172 167.470368) (xy 271.829112 167.539517) (xy 271.818089 167.553882) (xy 271.818083 167.55389) + (xy 271.67714 167.798009) (xy 271.677135 167.79802) (xy 271.569259 168.058456) (xy 271.496295 168.33076) + (xy 271.4595 168.610241) (xy 259.885499 168.610241) (xy 259.885499 167.701192) (xy 259.874999 167.598403) + (xy 259.819814 167.431866) (xy 259.727712 167.282544) (xy 259.603656 167.158488) (xy 259.510888 167.101269) + (xy 259.454336 167.066387) (xy 259.454331 167.066385) (xy 259.445323 167.0634) (xy 259.287797 167.011201) + (xy 259.287795 167.0112) (xy 259.185016 167.0007) (xy 259.185009 167.0007) (xy 257.232881 167.0007) + (xy 257.232873 167.0007) (xy 256.499206 167.0007) (xy 256.451753 166.991261) (xy 256.405253 166.972) + (xy 255.812561 166.972) (xy 255.750561 166.955387) (xy 255.51319 166.81834) (xy 255.513179 166.818335) + (xy 255.252743 166.710459) (xy 254.980439 166.637495) (xy 254.700958 166.6007) (xy 254.700951 166.6007) + (xy 254.419049 166.6007) (xy 254.419041 166.6007) (xy 254.13956 166.637495) (xy 253.867256 166.710459) + (xy 253.60682 166.818335) (xy 253.606809 166.81834) (xy 253.36269 166.959283) (xy 253.362684 166.959287) + (xy 253.362683 166.959288) (xy 253.342108 166.975076) (xy 253.139029 167.130904) (xy 252.939704 167.330229) + (xy 252.832172 167.470368) (xy 252.779112 167.539517) (xy 252.768089 167.553882) (xy 252.768083 167.55389) + (xy 252.62714 167.798009) (xy 252.627135 167.79802) (xy 252.519259 168.058456) (xy 252.446295 168.33076) + (xy 252.4095 168.610241) (xy 234.74225 168.610241) (xy 234.837466 168.515025) (xy 235.012573 168.295448) + (xy 235.161995 168.057645) (xy 235.283851 167.804608) (xy 235.37661 167.539518) (xy 235.439105 167.265709) + (xy 235.442981 167.231314) (xy 235.460716 167.073901) (xy 235.47055 166.986625) (xy 235.47055 166.705775) + (xy 235.441833 166.4509) (xy 235.439107 166.426705) (xy 235.439104 166.426687) (xy 235.37661 166.152882) + (xy 235.376606 166.15287) (xy 235.353515 166.08688) (xy 235.283851 165.887792) (xy 235.161995 165.634755) + (xy 235.012573 165.396952) (xy 234.837466 165.177375) (xy 234.638875 164.978784) (xy 234.419298 164.803677) + (xy 234.237711 164.689578) (xy 234.181492 164.654253) (xy 233.928461 164.5324) (xy 233.663379 164.439643) + (xy 233.663367 164.439639) (xy 233.389562 164.377145) (xy 233.389544 164.377142) (xy 233.110481 164.3457) + (xy 233.110475 164.3457) (xy 232.829625 164.3457) (xy 232.829618 164.3457) (xy 232.550555 164.377142) + (xy 232.550537 164.377145) (xy 232.276732 164.439639) (xy 232.27672 164.439643) (xy 232.011638 164.5324) + (xy 231.758607 164.654253) (xy 231.520803 164.803676) (xy 231.301225 164.978783) (xy 231.102633 165.177375) + (xy 230.927526 165.396953) (xy 230.778103 165.634757) (xy 230.65625 165.887788) (xy 230.563493 166.15287) + (xy 230.563489 166.152882) (xy 230.500995 166.426687) (xy 230.500992 166.426705) (xy 230.46955 166.705768) + (xy 186.165946 166.705768) (xy 185.953566 166.648861) (xy 185.654593 166.609501) (xy 185.654588 166.6095) + (xy 185.654583 166.6095) (xy 185.353017 166.6095) (xy 185.353011 166.6095) (xy 185.353006 166.609501) + (xy 185.054033 166.648861) (xy 184.762739 166.726913) (xy 184.484138 166.842314) (xy 184.484128 166.842318) + (xy 184.222968 166.993099) (xy 183.983721 167.176679) (xy 183.983714 167.176685) (xy 183.770485 167.389914) + (xy 183.770479 167.389921) (xy 183.586899 167.629168) (xy 183.436118 167.890328) (xy 183.436114 167.890338) + (xy 183.320713 168.168939) (xy 183.242661 168.460233) (xy 183.203301 168.759206) (xy 183.2033 168.759223) + (xy 134.569186 168.759223) (xy 134.626375 168.713616) (xy 134.824966 168.515025) (xy 135.000073 168.295448) + (xy 135.149495 168.057645) (xy 135.271351 167.804608) (xy 135.36411 167.539518) (xy 135.426605 167.265709) + (xy 135.430481 167.231314) (xy 135.448216 167.073901) (xy 135.45805 166.986625) (xy 135.45805 166.705775) + (xy 135.429333 166.4509) (xy 135.426607 166.426705) (xy 135.426604 166.426687) (xy 135.36411 166.152882) + (xy 135.364106 166.15287) (xy 135.341015 166.08688) (xy 135.271351 165.887792) (xy 135.149495 165.634755) + (xy 135.000073 165.396952) (xy 134.824966 165.177375) (xy 134.626375 164.978784) (xy 134.406798 164.803677) + (xy 134.225211 164.689578) (xy 134.168992 164.654253) (xy 133.915961 164.5324) (xy 133.650879 164.439643) + (xy 133.650867 164.439639) (xy 133.377062 164.377145) (xy 133.377044 164.377142) (xy 133.097981 164.3457) + (xy 133.097975 164.3457) (xy 132.817125 164.3457) (xy 132.817118 164.3457) (xy 132.538055 164.377142) + (xy 132.538037 164.377145) (xy 132.264232 164.439639) (xy 132.26422 164.439643) (xy 131.999138 164.5324) + (xy 131.746107 164.654253) (xy 131.508303 164.803676) (xy 131.288725 164.978783) (xy 131.090133 165.177375) + (xy 130.915026 165.396953) (xy 130.765603 165.634757) (xy 130.64375 165.887788) (xy 130.550993 166.15287) + (xy 130.550989 166.152882) (xy 130.488495 166.426687) (xy 130.488492 166.426705) (xy 130.45705 166.705768) + (xy 115.124163 166.705768) (xy 115.085971 166.683718) (xy 115.085961 166.683714) (xy 114.80736 166.568313) + (xy 114.516066 166.490261) (xy 114.217093 166.450901) (xy 114.217088 166.4509) (xy 114.217083 166.4509) + (xy 113.915517 166.4509) (xy 113.915511 166.4509) (xy 113.915506 166.450901) (xy 113.616533 166.490261) + (xy 113.325239 166.568313) (xy 113.046638 166.683714) (xy 113.046628 166.683718) (xy 112.785468 166.834499) + (xy 112.546221 167.018079) (xy 112.546214 167.018085) (xy 112.332985 167.231314) (xy 112.332979 167.231321) + (xy 112.149399 167.470568) (xy 111.998618 167.731728) (xy 111.998614 167.731738) (xy 111.883213 168.010339) + (xy 111.805161 168.301633) (xy 111.765801 168.600606) (xy 111.7658 168.600623) (xy 95.309299 168.600623) + (xy 95.309299 167.701192) (xy 95.298799 167.598403) (xy 95.243614 167.431866) (xy 95.151512 167.282544) + (xy 95.027456 167.158488) (xy 94.934688 167.101269) (xy 94.878136 167.066387) (xy 94.878131 167.066385) + (xy 94.869123 167.0634) (xy 94.711597 167.011201) (xy 94.711595 167.0112) (xy 94.608816 167.0007) + (xy 94.608809 167.0007) (xy 91.793582 167.0007) (xy 91.726543 166.981015) (xy 91.718096 166.975076) + (xy 91.534631 166.834299) (xy 91.273471 166.683518) (xy 91.273461 166.683514) (xy 90.99486 166.568113) + (xy 90.703566 166.490061) (xy 90.404593 166.450701) (xy 90.404588 166.4507) (xy 90.404583 166.4507) + (xy 90.103017 166.4507) (xy 90.103011 166.4507) (xy 90.103006 166.450701) (xy 89.804033 166.490061) + (xy 89.512739 166.568113) (xy 89.234138 166.683514) (xy 89.234128 166.683518) (xy 88.972968 166.834299) + (xy 88.733721 167.017879) (xy 88.733714 167.017885) (xy 88.520485 167.231114) (xy 88.520479 167.231121) + (xy 88.336899 167.470368) (xy 88.186118 167.731528) (xy 88.186114 167.731538) (xy 88.070713 168.010139) + (xy 87.992661 168.301433) (xy 87.953301 168.600406) (xy 87.9533 168.600423) (xy 71.496799 168.600423) + (xy 71.496799 167.763892) (xy 71.496115 167.7572) (xy 71.486299 167.661103) (xy 71.486298 167.6611) + (xy 71.475717 167.629168) (xy 71.431114 167.494566) (xy 71.339012 167.345244) (xy 71.214956 167.221188) + (xy 71.0734 167.133876) (xy 71.065636 167.129087) (xy 71.065631 167.129085) (xy 71.064162 167.128598) + (xy 70.899097 167.073901) (xy 70.899095 167.0739) (xy 70.796316 167.0634) (xy 70.796309 167.0634) + (xy 67.981082 167.0634) (xy 67.914043 167.043715) (xy 67.905596 167.037776) (xy 67.722131 166.896999) + (xy 67.460971 166.746218) (xy 67.460961 166.746214) (xy 67.18236 166.630813) (xy 66.891066 166.552761) + (xy 66.592093 166.513401) (xy 66.592088 166.5134) (xy 66.592083 166.5134) (xy 66.290517 166.5134) + (xy 66.290511 166.5134) (xy 66.290506 166.513401) (xy 65.991533 166.552761) (xy 65.700239 166.630813) + (xy 65.421638 166.746214) (xy 65.421628 166.746218) (xy 65.160468 166.896999) (xy 64.921221 167.080579) + (xy 64.921214 167.080585) (xy 64.707985 167.293814) (xy 64.707979 167.293821) (xy 64.524399 167.533068) + (xy 64.373618 167.794228) (xy 64.373614 167.794238) (xy 64.258213 168.072839) (xy 64.180161 168.364133) + (xy 64.140801 168.663106) (xy 64.1408 168.663123) (xy 45.35175 168.663123) (xy 45.35175 162.892377) + (xy 59.32565 162.892377) (xy 59.32565 163.180022) (xy 59.325651 163.180038) (xy 59.363196 163.465223) + (xy 59.437647 163.743078) (xy 59.547725 164.008831) (xy 59.547733 164.008848) (xy 59.691554 164.257951) + (xy 59.691565 164.257967) (xy 59.866671 164.486171) (xy 59.866677 164.486178) (xy 60.070071 164.689572) + (xy 60.070077 164.689577) (xy 60.298291 164.864691) (xy 60.298298 164.864695) (xy 60.547401 165.008516) + (xy 60.547406 165.008518) (xy 60.547409 165.00852) (xy 60.547413 165.008521) (xy 60.547418 165.008524) + (xy 60.652773 165.052163) (xy 60.81317 165.118602) (xy 61.091025 165.193053) (xy 61.376221 165.2306) + (xy 61.376228 165.2306) (xy 61.663872 165.2306) (xy 61.663879 165.2306) (xy 61.949075 165.193053) + (xy 62.22693 165.118602) (xy 62.492691 165.00852) (xy 62.741809 164.864691) (xy 62.970023 164.689577) + (xy 63.173427 164.486173) (xy 63.348541 164.257959) (xy 63.49237 164.008841) (xy 63.602452 163.74308) + (xy 63.676903 163.465225) (xy 63.71445 163.180029) (xy 63.71445 162.892371) (xy 63.676903 162.607175) + (xy 63.602452 162.32932) (xy 63.527706 162.148868) (xy 63.492374 162.063568) (xy 63.492366 162.063551) + (xy 63.348545 161.814448) (xy 63.348541 161.814441) (xy 63.244645 161.679041) (xy 63.173428 161.586228) + (xy 63.173422 161.586221) (xy 62.970028 161.382827) (xy 62.970021 161.382821) (xy 62.741817 161.207715) + (xy 62.741815 161.207713) (xy 62.741809 161.207709) (xy 62.741804 161.207706) (xy 62.741801 161.207704) + (xy 62.492698 161.063883) (xy 62.492681 161.063875) (xy 62.226928 160.953797) (xy 61.949073 160.879346) + (xy 61.663888 160.841801) (xy 61.663885 160.8418) (xy 61.663879 160.8418) (xy 61.376221 160.8418) + (xy 61.376215 160.8418) (xy 61.376211 160.841801) (xy 61.091026 160.879346) (xy 60.813171 160.953797) + (xy 60.547418 161.063875) (xy 60.547401 161.063883) (xy 60.298298 161.207704) (xy 60.298282 161.207715) + (xy 60.070078 161.382821) (xy 60.070071 161.382827) (xy 59.866677 161.586221) (xy 59.866671 161.586228) + (xy 59.691565 161.814432) (xy 59.691554 161.814448) (xy 59.547733 162.063551) (xy 59.547725 162.063568) + (xy 59.437647 162.329321) (xy 59.363196 162.607176) (xy 59.325651 162.892361) (xy 59.32565 162.892377) + (xy 45.35175 162.892377) (xy 45.35175 158.427622) (xy 69.8433 158.427622) (xy 69.8433 159.159978) + (xy 69.858291 159.273854) (xy 69.858292 159.27386) (xy 69.858293 159.273863) (xy 69.881441 159.329746) + (xy 69.916987 159.415562) (xy 69.957465 159.468315) (xy 69.982658 159.533484) (xy 69.968619 159.601929) + (xy 69.957465 159.619285) (xy 69.916987 159.672037) (xy 69.858293 159.813736) (xy 69.858292 159.813738) + (xy 69.8433 159.927622) (xy 69.8433 160.659978) (xy 69.858291 160.773854) (xy 69.858292 160.77386) + (xy 69.858293 160.773863) (xy 69.877296 160.81974) (xy 69.916987 160.915562) (xy 69.916988 160.915563) + (xy 70.010356 161.037244) (xy 70.132037 161.130612) (xy 70.273737 161.189307) (xy 70.387623 161.2043) + (xy 70.673857 161.204299) (xy 70.740896 161.223983) (xy 70.786651 161.276787) (xy 70.788418 161.280845) + (xy 70.7913 161.287802) (xy 70.7913 161.287803) (xy 70.825935 161.371418) (xy 70.825936 161.371419) + (xy 71.798683 162.344167) (xy 71.798685 162.344169) (xy 71.863352 162.370953) (xy 71.882298 162.378801) + (xy 71.972804 162.378801) (xy 72.896175 162.378801) (xy 72.963214 162.398486) (xy 73.008969 162.45129) + (xy 73.010715 162.4553) (xy 73.041777 162.530289) (xy 73.041857 162.530482) (xy 73.041859 162.530486) + (xy 73.12946 162.661589) (xy 73.129463 162.661593) (xy 73.240957 162.773087) (xy 73.240961 162.77309) + (xy 73.372064 162.860691) (xy 73.372077 162.860698) (xy 73.517748 162.921036) (xy 73.517753 162.921038) + (xy 73.672403 162.9518) (xy 73.672406 162.951801) (xy 73.672408 162.951801) (xy 73.830094 162.951801) + (xy 73.830095 162.9518) (xy 73.984747 162.921038) (xy 74.053941 162.892377) (xy 83.13815 162.892377) + (xy 83.13815 163.180022) (xy 83.138151 163.180038) (xy 83.175696 163.465223) (xy 83.250147 163.743078) + (xy 83.360225 164.008831) (xy 83.360233 164.008848) (xy 83.504054 164.257951) (xy 83.504065 164.257967) + (xy 83.679171 164.486171) (xy 83.679177 164.486178) (xy 83.882571 164.689572) (xy 83.882577 164.689577) + (xy 84.110791 164.864691) (xy 84.110798 164.864695) (xy 84.359901 165.008516) (xy 84.359906 165.008518) + (xy 84.359909 165.00852) (xy 84.359913 165.008521) (xy 84.359918 165.008524) (xy 84.465273 165.052163) + (xy 84.62567 165.118602) (xy 84.903525 165.193053) (xy 85.188721 165.2306) (xy 85.188728 165.2306) + (xy 85.476372 165.2306) (xy 85.476379 165.2306) (xy 85.761575 165.193053) (xy 86.03943 165.118602) + (xy 86.305191 165.00852) (xy 86.554309 164.864691) (xy 86.782523 164.689577) (xy 86.985927 164.486173) + (xy 87.161041 164.257959) (xy 87.30487 164.008841) (xy 87.414952 163.74308) (xy 87.489403 163.465225) + (xy 87.52695 163.180029) (xy 87.52695 162.892371) (xy 87.489403 162.607175) (xy 87.414952 162.32932) + (xy 87.340206 162.148868) (xy 87.304874 162.063568) (xy 87.304866 162.063551) (xy 87.161045 161.814448) + (xy 87.161041 161.814441) (xy 87.057145 161.679041) (xy 86.985928 161.586228) (xy 86.985922 161.586221) + (xy 86.782528 161.382827) (xy 86.782521 161.382821) (xy 86.554317 161.207715) (xy 86.554315 161.207713) + (xy 86.554309 161.207709) (xy 86.554304 161.207706) (xy 86.554301 161.207704) (xy 86.305198 161.063883) + (xy 86.305181 161.063875) (xy 86.039428 160.953797) (xy 85.761573 160.879346) (xy 85.476388 160.841801) + (xy 85.476385 160.8418) (xy 85.476379 160.8418) (xy 85.188721 160.8418) (xy 85.188715 160.8418) + (xy 85.188711 160.841801) (xy 84.903526 160.879346) (xy 84.625671 160.953797) (xy 84.359918 161.063875) + (xy 84.359901 161.063883) (xy 84.110798 161.207704) (xy 84.110782 161.207715) (xy 83.882578 161.382821) + (xy 83.882571 161.382827) (xy 83.679177 161.586221) (xy 83.679171 161.586228) (xy 83.504065 161.814432) + (xy 83.504054 161.814448) (xy 83.360233 162.063551) (xy 83.360225 162.063568) (xy 83.250147 162.329321) + (xy 83.175696 162.607176) (xy 83.138151 162.892361) (xy 83.13815 162.892377) (xy 74.053941 162.892377) + (xy 74.130429 162.860695) (xy 74.190585 162.8205) (xy 74.243401 162.78521) (xy 74.251688 162.779671) + (xy 74.261539 162.77309) (xy 74.373039 162.66159) (xy 74.460644 162.53048) (xy 74.520987 162.384798) + (xy 74.55175 162.230143) (xy 74.55175 162.072459) (xy 74.55175 162.072456) (xy 74.551749 162.072454) + (xy 74.54287 162.027815) (xy 74.520987 161.917804) (xy 74.508428 161.887483) (xy 74.460647 161.772128) + (xy 74.460644 161.772122) (xy 74.460634 161.772107) (xy 74.459639 161.770618) (xy 74.459355 161.769711) + (xy 74.457771 161.766747) (xy 74.458332 161.766446) (xy 74.438757 161.703944) (xy 74.457237 161.636562) + (xy 74.509212 161.589868) (xy 74.578181 161.578687) (xy 74.611572 161.588326) (xy 74.611603 161.588243) + (xy 74.612864 161.588698) (xy 74.615241 161.589385) (xy 74.616874 161.590148) (xy 74.616875 161.590148) + (xy 74.616878 161.59015) (xy 74.7886 161.652221) (xy 74.968721 161.682182) (xy 75.148398 161.67909) + (xy 75.151291 161.679041) (xy 75.330266 161.642905) (xy 75.330269 161.642903) (xy 75.330274 161.642903) + (xy 75.49976 161.574962) (xy 75.654146 161.477463) (xy 75.674529 161.458653) (xy 75.78833 161.35363) + (xy 75.788332 161.353628) (xy 75.788333 161.353627) (xy 75.863496 161.253402) (xy 75.919465 161.21158) + (xy 75.962698 161.203799) (xy 76.2188 161.203799) (xy 76.7188 161.203799) (xy 76.774732 161.203799) + (xy 76.858724 161.19325) (xy 76.991557 161.138229) (xy 77.058404 161.0863) (xy 77.058411 161.086294) + (xy 77.526294 160.618412) (xy 77.526299 160.618406) (xy 77.578227 160.55156) (xy 77.581442 160.5438) + (xy 76.7188 160.5438) (xy 76.7188 161.203799) (xy 76.2188 161.203799) (xy 76.2188 160.4178) (xy 76.238485 160.350761) + (xy 76.291289 160.305006) (xy 76.3428 160.2938) (xy 76.4688 160.2938) (xy 76.4688 160.1678) (xy 76.488485 160.100761) + (xy 76.541289 160.055006) (xy 76.5928 160.0438) (xy 77.6438 160.0438) (xy 77.6438 159.927653) (xy 77.62882 159.813869) + (xy 77.628818 159.813864) (xy 77.570178 159.672293) (xy 77.570175 159.672288) (xy 77.52982 159.619696) + (xy 77.504626 159.554527) (xy 77.518664 159.486082) (xy 77.529821 159.468723) (xy 77.53292 159.464685) + (xy 77.570612 159.415563) (xy 77.629307 159.273863) (xy 77.6443 159.159977) (xy 77.644299 158.427624) + (xy 77.639543 158.391498) (xy 77.629308 158.313745) (xy 77.629307 158.313737) (xy 77.570612 158.172037) + (xy 77.568077 158.168734) (xy 77.566803 158.165439) (xy 77.56655 158.165) (xy 77.566618 158.16496) + (xy 77.54288 158.103567) (xy 77.556916 158.035122) (xy 77.578766 158.005566) (xy 78.090233 157.494098) + (xy 78.151554 157.460615) (xy 78.221245 157.465599) (xy 78.246803 157.478679) (xy 78.249509 157.480487) + (xy 78.249511 157.480489) (xy 78.380621 157.568094) (xy 78.380623 157.568095) (xy 78.380627 157.568097) + (xy 78.526298 157.628435) (xy 78.526303 157.628437) (xy 78.673432 157.657703) (xy 78.680953 157.659199) + (xy 78.680956 157.6592) (xy 78.680958 157.6592) (xy 78.838644 157.6592) (xy 78.838645 157.659199) + (xy 78.993297 157.628437) (xy 79.127038 157.57304) (xy 79.138972 157.568097) (xy 79.138972 157.568096) + (xy 79.138979 157.568094) (xy 79.270089 157.480489) (xy 79.381589 157.368989) (xy 79.469194 157.237879) + (xy 79.529537 157.092197) (xy 79.5603 156.937542) (xy 79.5603 156.779858) (xy 79.5603 156.779855) + (xy 79.560299 156.779853) (xy 79.529538 156.62521) (xy 79.529537 156.625203) (xy 79.525215 156.614768) + (xy 79.469197 156.479527) (xy 79.46919 156.479514) (xy 79.381589 156.348411) (xy 79.381586 156.348407) + (xy 79.270092 156.236913) (xy 79.270088 156.23691) (xy 79.138985 156.149309) (xy 79.138972 156.149302) + (xy 78.993301 156.088964) (xy 78.993289 156.088961) (xy 78.838646 156.0582) (xy 78.832582 156.057603) + (xy 78.832716 156.056238) (xy 78.772358 156.038515) (xy 78.726603 155.985711) (xy 78.716659 155.916553) + (xy 78.745684 155.852997) (xy 78.801078 155.816269) (xy 78.8275 155.807683) (xy 78.919149 155.777905) + (xy 79.069985 155.70105) (xy 79.206941 155.601546) (xy 79.326646 155.481841) (xy 79.42615 155.344885) + (xy 79.503005 155.194049) (xy 79.555318 155.033047) (xy 79.5818 154.865849) (xy 79.5818 154.69655) + (xy 79.555318 154.529352) (xy 79.510596 154.391713) (xy 79.503005 154.368351) (xy 79.503003 154.368348) + (xy 79.503003 154.368346) (xy 79.458976 154.28194) (xy 79.42615 154.217515) (xy 79.394581 154.174064) + (xy 79.326651 154.080565) (xy 79.326647 154.08056) (xy 79.206939 153.960852) (xy 79.206934 153.960848) + (xy 79.069988 153.861352) (xy 79.069987 153.861351) (xy 79.069985 153.86135) (xy 79.016131 153.83391) + (xy 78.919153 153.784496) (xy 78.758147 153.732181) (xy 78.590949 153.7057) (xy 78.590944 153.7057) + (xy 78.421656 153.7057) (xy 78.421651 153.7057) (xy 78.254452 153.732181) (xy 78.093446 153.784496) + (xy 77.942611 153.861352) (xy 77.805665 153.960848) (xy 77.80566 153.960852) (xy 77.685952 154.08056) + (xy 77.685948 154.080565) (xy 77.586452 154.217511) (xy 77.509596 154.368346) (xy 77.457281 154.529352) + (xy 77.4308 154.69655) (xy 77.4308 154.865849) (xy 77.457281 155.033047) (xy 77.509596 155.194053) + (xy 77.586452 155.344888) (xy 77.685948 155.481834) (xy 77.685952 155.481839) (xy 77.80566 155.601547) + (xy 77.805665 155.601551) (xy 77.925117 155.688337) (xy 77.942615 155.70105) (xy 78.038725 155.75002) + (xy 78.093446 155.777903) (xy 78.093448 155.777903) (xy 78.093451 155.777905) (xy 78.17975 155.805945) + (xy 78.254452 155.830218) (xy 78.421651 155.8567) (xy 78.463645 155.8567) (xy 78.530684 155.876385) + (xy 78.576439 155.929189) (xy 78.586383 155.998347) (xy 78.557358 156.061903) (xy 78.511097 156.095261) + (xy 78.380627 156.149302) (xy 78.380614 156.149309) (xy 78.249511 156.23691) (xy 78.249507 156.236913) + (xy 78.138013 156.348407) (xy 78.13801 156.348411) (xy 78.050409 156.479514) (xy 78.050402 156.479527) + (xy 77.990064 156.625198) (xy 77.990061 156.62521) (xy 77.9593 156.779853) (xy 77.9593 156.930204) + (xy 77.939615 156.997243) (xy 77.922981 157.017885) (xy 77.093885 157.846981) (xy 77.032562 157.880466) + (xy 77.006204 157.8833) (xy 75.962373 157.8833) (xy 75.895334 157.863615) (xy 75.863172 157.833698) + (xy 75.788361 157.733944) (xy 75.654169 157.610104) (xy 75.654166 157.610102) (xy 75.654165 157.610101) + (xy 75.654162 157.610099) (xy 75.499777 157.512601) (xy 75.330287 157.444658) (xy 75.330277 157.444656) + (xy 75.151292 157.408518) (xy 75.151299 157.408518) (xy 74.979594 157.405565) (xy 74.968718 157.405378) + (xy 74.968717 157.405378) (xy 74.968714 157.405378) (xy 74.788597 157.435338) (xy 74.788584 157.435341) + (xy 74.616863 157.497413) (xy 74.602348 157.50587) (xy 74.602263 157.505919) (xy 74.595176 157.51004) + (xy 74.59493 157.510108) (xy 74.567138 157.526344) (xy 74.56689 157.526489) (xy 74.564163 157.527159) + (xy 74.504546 157.543296) (xy 74.464201 157.543293) (xy 74.464097 157.5433) (xy 73.023396 157.5433) + (xy 73.015214 157.543298) (xy 73.015192 157.543293) (xy 72.985265 157.543295) (xy 72.983028 157.543295) + (xy 72.982746 157.543212) (xy 72.920493 157.526362) (xy 72.892671 157.510108) (xy 72.886605 157.506564) + (xy 72.884907 157.505717) (xy 72.877557 157.501434) (xy 72.870721 157.49745) (xy 72.698997 157.435378) + (xy 72.698991 157.435377) (xy 72.518881 157.405419) (xy 72.518878 157.405419) (xy 72.510339 157.405565) + (xy 72.336307 157.408559) (xy 72.157334 157.444694) (xy 72.157323 157.444697) (xy 71.987842 157.512637) + (xy 71.987841 157.512637) (xy 71.833461 157.610132) (xy 71.833458 157.610134) (xy 71.700385 157.732942) + (xy 71.699269 157.733972) (xy 71.639886 157.813156) (xy 71.624481 157.833697) (xy 71.568511 157.875519) + (xy 71.525278 157.8833) (xy 70.387621 157.8833) (xy 70.273745 157.898291) (xy 70.273737 157.898293) + (xy 70.132037 157.956987) (xy 70.010356 158.050356) (xy 69.916987 158.172037) (xy 69.858293 158.313736) + (xy 69.858292 158.313738) (xy 69.8433 158.427622) (xy 45.35175 158.427622) (xy 45.35175 151.191183) + (xy 64.2908 151.191183) (xy 64.2908 153.291201) (xy 64.290801 153.291218) (xy 64.3013 153.393996) + (xy 64.301301 153.393999) (xy 64.311245 153.424007) (xy 64.356486 153.560534) (xy 64.448588 153.709856) + (xy 64.572644 153.833912) (xy 64.721966 153.926014) (xy 64.888503 153.981199) (xy 64.991291 153.9917) + (xy 66.918418 153.991699) (xy 66.918427 153.9917) (xy 67.347151 153.991699) (xy 67.414189 154.011383) + (xy 67.459944 154.064187) (xy 67.469888 154.133346) (xy 67.447469 154.188583) (xy 67.426451 154.217511) + (xy 67.349596 154.368346) (xy 67.297281 154.529352) (xy 67.2708 154.69655) (xy 67.2708 154.865849) + (xy 67.297281 155.033047) (xy 67.349596 155.194053) (xy 67.426452 155.344888) (xy 67.525948 155.481834) + (xy 67.525952 155.481839) (xy 67.64566 155.601547) (xy 67.645665 155.601551) (xy 67.765117 155.688337) + (xy 67.782615 155.70105) (xy 67.878725 155.75002) (xy 67.933446 155.777903) (xy 67.933448 155.777903) + (xy 67.933451 155.777905) (xy 68.01975 155.805945) (xy 68.094452 155.830218) (xy 68.261651 155.8567) + (xy 68.261656 155.8567) (xy 68.430949 155.8567) (xy 68.598147 155.830218) (xy 68.641077 155.816269) + (xy 68.759149 155.777905) (xy 68.909985 155.70105) (xy 69.046941 155.601546) (xy 69.166646 155.481841) + (xy 69.26615 155.344885) (xy 69.343005 155.194049) (xy 69.395318 155.033047) (xy 69.4218 154.865849) + (xy 69.4218 154.69655) (xy 69.396228 154.535098) (xy 69.405182 154.465805) (xy 69.450179 154.412353) + (xy 69.51693 154.391713) (xy 69.518701 154.3917) (xy 69.757244 154.3917) (xy 69.757251 154.3917) + (xy 70.036742 154.354904) (xy 70.309039 154.281942) (xy 70.569483 154.174063) (xy 70.813617 154.033112) + (xy 71.037265 153.8615) (xy 71.2366 153.662165) (xy 71.304292 153.573946) (xy 71.36072 153.532744) + (xy 71.430466 153.528589) (xy 71.491386 153.562801) (xy 71.524139 153.624518) (xy 71.518326 153.694146) + (xy 71.510055 153.711433) (xy 71.453983 153.808551) (xy 71.453975 153.808568) (xy 71.343897 154.074321) + (xy 71.269446 154.352176) (xy 71.231901 154.637361) (xy 71.2319 154.637377) (xy 71.2319 154.925022) + (xy 71.231901 154.925038) (xy 71.269446 155.210223) (xy 71.343897 155.488078) (xy 71.453975 155.753831) + (xy 71.453983 155.753848) (xy 71.597804 156.002951) (xy 71.597815 156.002967) (xy 71.772921 156.231171) + (xy 71.772927 156.231178) (xy 71.976321 156.434572) (xy 71.976327 156.434577) (xy 72.204541 156.609691) + (xy 72.204548 156.609695) (xy 72.453651 156.753516) (xy 72.453656 156.753518) (xy 72.453659 156.75352) + (xy 72.453663 156.753521) (xy 72.453668 156.753524) (xy 72.466908 156.759008) (xy 72.71942 156.863602) + (xy 72.997275 156.938053) (xy 73.282471 156.9756) (xy 73.282478 156.9756) (xy 73.570122 156.9756) + (xy 73.570129 156.9756) (xy 73.855325 156.938053) (xy 74.13318 156.863602) (xy 74.398941 156.75352) + (xy 74.648059 156.609691) (xy 74.876273 156.434577) (xy 75.079677 156.231173) (xy 75.254791 156.002959) + (xy 75.39862 155.753841) (xy 75.508702 155.48808) (xy 75.583153 155.210225) (xy 75.6207 154.925029) + (xy 75.6207 154.637371) (xy 75.583153 154.352175) (xy 75.508702 154.07432) (xy 75.39862 153.808559) + (xy 75.398618 153.808556) (xy 75.398616 153.808551) (xy 75.254795 153.559448) (xy 75.254791 153.559441) + (xy 75.150869 153.424007) (xy 75.079678 153.331228) (xy 75.079672 153.331221) (xy 74.876278 153.127827) + (xy 74.876271 153.127821) (xy 74.648067 152.952715) (xy 74.648065 152.952713) (xy 74.648059 152.952709) + (xy 74.648054 152.952706) (xy 74.648051 152.952704) (xy 74.398948 152.808883) (xy 74.398931 152.808875) + (xy 74.133178 152.698797) (xy 73.855323 152.624346) (xy 73.570138 152.586801) (xy 73.570135 152.5868) + (xy 73.570129 152.5868) (xy 73.282471 152.5868) (xy 73.282465 152.5868) (xy 73.282461 152.586801) + (xy 72.997276 152.624346) (xy 72.719421 152.698797) (xy 72.453668 152.808875) (xy 72.453651 152.808883) + (xy 72.204548 152.952704) (xy 72.204532 152.952715) (xy 71.976328 153.127821) (xy 71.976321 153.127827) + (xy 71.772927 153.331221) (xy 71.70173 153.424007) (xy 71.645301 153.465209) (xy 71.575555 153.469364) + (xy 71.514635 153.435151) (xy 71.481883 153.373434) (xy 71.487696 153.303807) (xy 71.495961 153.286531) + (xy 71.549163 153.194383) (xy 71.657042 152.933939) (xy 71.730004 152.661642) (xy 71.7668 152.382151) + (xy 71.7668 152.100249) (xy 71.730004 151.820758) (xy 71.657042 151.548461) (xy 71.549163 151.288017) + (xy 71.549161 151.288014) (xy 71.549159 151.288009) (xy 71.408216 151.04389) (xy 71.408212 151.043883) + (xy 71.2366 150.820235) (xy 71.236598 150.820233) (xy 71.236595 150.820229) (xy 71.03727 150.620904) + (xy 70.953189 150.556386) (xy 70.813617 150.449288) (xy 70.813611 150.449284) (xy 70.813609 150.449283) + (xy 70.56949 150.30834) (xy 70.569479 150.308335) (xy 70.309043 150.200459) (xy 70.036739 150.127495) + (xy 69.757258 150.0907) (xy 69.757251 150.0907) (xy 69.475349 150.0907) (xy 69.475341 150.0907) + (xy 69.19586 150.127495) (xy 68.923556 150.200459) (xy 68.66312 150.308335) (xy 68.663109 150.30834) + (xy 68.418992 150.449281) (xy 68.418983 150.449288) (xy 68.398406 150.465076) (xy 68.333238 150.49027) + (xy 68.322922 150.4907) (xy 64.991298 150.4907) (xy 64.991281 150.490701) (xy 64.888503 150.5012) + (xy 64.8885 150.501201) (xy 64.721968 150.556385) (xy 64.721963 150.556387) (xy 64.572642 150.648489) + (xy 64.448589 150.772542) (xy 64.356487 150.921863) (xy 64.356485 150.921868) (xy 64.336549 150.982031) + (xy 64.301301 151.088403) (xy 64.301301 151.088404) (xy 64.3013 151.088404) (xy 64.2908 151.191183) + (xy 45.35175 151.191183) (xy 45.35175 149.560241) (xy 73.8158 149.560241) (xy 73.8158 149.842158) + (xy 73.852595 150.121639) (xy 73.925559 150.393943) (xy 74.033435 150.654379) (xy 74.03344 150.65439) + (xy 74.148683 150.853995) (xy 74.174388 150.898517) (xy 74.320094 151.088404) (xy 74.346004 151.12217) + (xy 74.545329 151.321495) (xy 74.545333 151.321498) (xy 74.545335 151.3215) (xy 74.768983 151.493112) + (xy 74.76899 151.493116) (xy 75.013109 151.634059) (xy 75.013114 151.634061) (xy 75.013117 151.634063) + (xy 75.273561 151.741942) (xy 75.545858 151.814904) (xy 75.825349 151.8517) (xy 75.825356 151.8517) + (xy 76.107244 151.8517) (xy 76.107251 151.8517) (xy 76.386742 151.814904) (xy 76.659039 151.741942) + (xy 76.919483 151.634063) (xy 77.163617 151.493112) (xy 77.184192 151.477323) (xy 77.24936 151.452129) + (xy 77.259679 151.451699) (xy 78.441282 151.451699) (xy 78.441291 151.4517) (xy 80.591308 151.451699) + (xy 80.694097 151.441199) (xy 80.860634 151.386014) (xy 81.009956 151.293912) (xy 81.112685 151.191183) + (xy 95.247 151.191183) (xy 95.247 153.291201) (xy 95.247001 153.291218) (xy 95.2575 153.393996) + (xy 95.257501 153.393999) (xy 95.267445 153.424007) (xy 95.312686 153.560534) (xy 95.404788 153.709856) + (xy 95.528844 153.833912) (xy 95.678166 153.926014) (xy 95.844703 153.981199) (xy 95.947491 153.9917) + (xy 97.874618 153.991699) (xy 97.874627 153.9917) (xy 98.303351 153.991699) (xy 98.370389 154.011383) + (xy 98.416144 154.064187) (xy 98.426088 154.133346) (xy 98.403669 154.188583) (xy 98.382651 154.217511) + (xy 98.305796 154.368346) (xy 98.253481 154.529352) (xy 98.227 154.69655) (xy 98.227 154.865849) + (xy 98.253481 155.033047) (xy 98.305796 155.194053) (xy 98.382652 155.344888) (xy 98.482148 155.481834) + (xy 98.482152 155.481839) (xy 98.60186 155.601547) (xy 98.601865 155.601551) (xy 98.721317 155.688337) + (xy 98.738815 155.70105) (xy 98.834925 155.75002) (xy 98.889646 155.777903) (xy 98.889648 155.777903) + (xy 98.889651 155.777905) (xy 98.97595 155.805945) (xy 99.050652 155.830218) (xy 99.217851 155.8567) + (xy 99.217856 155.8567) (xy 99.387149 155.8567) (xy 99.554347 155.830218) (xy 99.597277 155.816269) + (xy 99.715349 155.777905) (xy 99.866185 155.70105) (xy 100.003141 155.601546) (xy 100.122846 155.481841) + (xy 100.22235 155.344885) (xy 100.299205 155.194049) (xy 100.351518 155.033047) (xy 100.378 154.865849) + (xy 100.378 154.69655) (xy 100.352428 154.535098) (xy 100.361382 154.465805) (xy 100.406379 154.412353) + (xy 100.47313 154.391713) (xy 100.474901 154.3917) (xy 100.713444 154.3917) (xy 100.713451 154.3917) + (xy 100.992942 154.354904) (xy 101.265239 154.281942) (xy 101.525683 154.174063) (xy 101.769817 154.033112) + (xy 101.993465 153.8615) (xy 102.1928 153.662165) (xy 102.260492 153.573946) (xy 102.31692 153.532744) + (xy 102.386666 153.528589) (xy 102.447586 153.562801) (xy 102.480339 153.624518) (xy 102.474526 153.694146) + (xy 102.466255 153.711433) (xy 102.410183 153.808551) (xy 102.410175 153.808568) (xy 102.300097 154.074321) + (xy 102.225646 154.352176) (xy 102.188101 154.637361) (xy 102.1881 154.637377) (xy 102.1881 154.925022) + (xy 102.188101 154.925038) (xy 102.225646 155.210223) (xy 102.300097 155.488078) (xy 102.410175 155.753831) + (xy 102.410183 155.753848) (xy 102.554004 156.002951) (xy 102.554015 156.002967) (xy 102.729121 156.231171) + (xy 102.729127 156.231178) (xy 102.932521 156.434572) (xy 102.932527 156.434577) (xy 103.160741 156.609691) + (xy 103.160748 156.609695) (xy 103.409851 156.753516) (xy 103.409856 156.753518) (xy 103.409859 156.75352) + (xy 103.409863 156.753521) (xy 103.409868 156.753524) (xy 103.423108 156.759008) (xy 103.67562 156.863602) + (xy 103.825362 156.903725) (xy 103.885023 156.94009) (xy 103.915552 157.002937) (xy 103.907257 157.072313) + (xy 103.862772 157.12619) (xy 103.79622 157.147465) (xy 103.793269 157.1475) (xy 101.771753 157.1475) + (xy 101.681247 157.1475) (xy 101.681245 157.1475) (xy 101.681243 157.147501) (xy 101.597634 157.182131) + (xy 101.597632 157.182133) (xy 100.833636 157.946131) (xy 100.607532 158.172235) (xy 100.543535 158.236232) + (xy 100.528295 158.273024) (xy 100.509609 158.318136) (xy 100.5089 158.319847) (xy 100.5089 159.416147) + (xy 100.5089 159.506653) (xy 100.539607 159.580786) (xy 100.543536 159.59027) (xy 100.613529 159.660263) + (xy 100.647014 159.721586) (xy 100.64203 159.791278) (xy 100.62423 159.823422) (xy 100.621688 159.826734) + (xy 100.562993 159.968436) (xy 100.562992 159.968438) (xy 100.548 160.082322) (xy 100.548 160.814678) + (xy 100.562991 160.928554) (xy 100.562992 160.92856) (xy 100.562993 160.928563) (xy 100.573446 160.953798) + (xy 100.621687 161.070262) (xy 100.621688 161.070263) (xy 100.715056 161.191944) (xy 100.836737 161.285312) + (xy 100.978437 161.344007) (xy 101.092323 161.359) (xy 102.229929 161.358999) (xy 102.296968 161.378684) + (xy 102.329132 161.408603) (xy 102.403938 161.508352) (xy 102.403939 161.508353) (xy 102.40394 161.508354) + (xy 102.538132 161.632195) (xy 102.692525 161.729697) (xy 102.823385 161.782154) (xy 102.862014 161.797639) + (xy 102.862015 161.797639) (xy 102.862017 161.79764) (xy 103.041008 161.833779) (xy 103.041002 161.833779) + (xy 103.057322 161.834059) (xy 103.223584 161.83692) (xy 103.403712 161.806958) (xy 103.460314 161.786498) + (xy 103.575436 161.744885) (xy 103.575437 161.744883) (xy 103.57544 161.744883) (xy 103.590475 161.73612) + (xy 103.597159 161.732235) (xy 103.59745 161.732157) (xy 103.625333 161.71586) (xy 103.625451 161.715792) + (xy 103.628668 161.715001) (xy 103.687762 161.698999) (xy 105.168892 161.698999) (xy 105.169014 161.699006) + (xy 105.177105 161.699005) (xy 105.177108 161.699006) (xy 105.209242 161.699002) (xy 105.271804 161.715934) + (xy 105.29963 161.732191) (xy 105.299632 161.732191) (xy 105.30578 161.735783) (xy 105.307435 161.736608) + (xy 105.321578 161.74485) (xy 105.4933 161.806921) (xy 105.673421 161.836882) (xy 105.853098 161.83379) + (xy 105.855991 161.833741) (xy 106.034966 161.797605) (xy 106.034969 161.797603) (xy 106.034974 161.797603) + (xy 106.20446 161.729662) (xy 106.358846 161.632163) (xy 106.365396 161.626119) (xy 106.49303 161.50833) + (xy 106.493032 161.508328) (xy 106.494928 161.5058) (xy 106.568196 161.408102) (xy 106.624165 161.36628) + (xy 106.667398 161.358499) (xy 106.9235 161.358499) (xy 107.4235 161.358499) (xy 107.479432 161.358499) + (xy 107.563424 161.34795) (xy 107.696257 161.292929) (xy 107.763104 161.241) (xy 107.763111 161.240994) + (xy 108.230994 160.773112) (xy 108.230999 160.773106) (xy 108.282927 160.70626) (xy 108.286142 160.6985) + (xy 107.4235 160.6985) (xy 107.4235 161.358499) (xy 106.9235 161.358499) (xy 106.9235 160.5725) + (xy 106.943185 160.505461) (xy 106.995989 160.459706) (xy 107.0475 160.4485) (xy 107.1735 160.4485) + (xy 107.1735 160.3225) (xy 107.193185 160.255461) (xy 107.245989 160.209706) (xy 107.2975 160.1985) + (xy 108.3485 160.1985) (xy 108.351386 160.195613) (xy 108.368185 160.138405) (xy 108.420989 160.09265) + (xy 108.448309 160.083827) (xy 108.519941 160.069578) (xy 108.584497 160.056737) (xy 108.730179 159.996394) + (xy 108.861289 159.908789) (xy 108.972789 159.797289) (xy 109.060394 159.666179) (xy 109.062845 159.660263) + (xy 109.106755 159.554252) (xy 109.120737 159.520497) (xy 109.1515 159.365842) (xy 109.1515 159.208158) + (xy 109.1515 159.208155) (xy 109.151499 159.208153) (xy 109.137005 159.135288) (xy 109.120737 159.053503) + (xy 109.100803 159.005377) (xy 109.060397 158.907827) (xy 109.06039 158.907814) (xy 108.972789 158.776711) + (xy 108.972786 158.776707) (xy 108.861292 158.665213) (xy 108.861288 158.66521) (xy 108.730185 158.577609) + (xy 108.730172 158.577602) (xy 108.584501 158.517264) (xy 108.584489 158.517261) (xy 108.429845 158.4865) + (xy 108.429842 158.4865) (xy 108.424343 158.4865) (xy 108.357304 158.466815) (xy 108.311549 158.414011) + (xy 108.309782 158.409953) (xy 108.275312 158.326737) (xy 108.268712 158.318136) (xy 108.181944 158.205056) + (xy 108.064203 158.114711) (xy 108.060262 158.111687) (xy 107.918563 158.052993) (xy 107.918561 158.052992) + (xy 107.804678 158.038) (xy 107.804677 158.038) (xy 106.667073 158.038) (xy 106.600034 158.018315) + (xy 106.567872 157.988398) (xy 106.493061 157.888644) (xy 106.416105 157.817625) (xy 106.38019 157.757694) + (xy 106.382376 157.687859) (xy 106.421972 157.630292) (xy 106.486405 157.60327) (xy 106.500202 157.6025) + (xy 121.446858 157.6025) (xy 121.513897 157.622185) (xy 121.559652 157.674989) (xy 121.569596 157.744147) + (xy 121.540571 157.807703) (xy 121.530958 157.817621) (xy 121.453969 157.888672) (xy 121.398014 157.963285) + (xy 121.379181 157.988397) (xy 121.323211 158.030219) (xy 121.279978 158.038) (xy 120.142321 158.038) + (xy 120.028445 158.052991) (xy 120.028437 158.052993) (xy 119.886737 158.111687) (xy 119.765056 158.205056) + (xy 119.671687 158.326737) (xy 119.612993 158.468436) (xy 119.612992 158.468438) (xy 119.598 158.582322) + (xy 119.598 159.314678) (xy 119.612991 159.428554) (xy 119.612992 159.42856) (xy 119.612993 159.428563) + (xy 119.630262 159.470253) (xy 119.671687 159.570262) (xy 119.712165 159.623015) (xy 119.737358 159.688184) + (xy 119.723319 159.756629) (xy 119.712165 159.773985) (xy 119.671687 159.826737) (xy 119.612993 159.968436) + (xy 119.612992 159.968438) (xy 119.598 160.082322) (xy 119.598 160.814678) (xy 119.612991 160.928554) + (xy 119.612992 160.92856) (xy 119.612993 160.928563) (xy 119.623446 160.953798) (xy 119.671687 161.070262) + (xy 119.671688 161.070263) (xy 119.765056 161.191944) (xy 119.886737 161.285312) (xy 120.028437 161.344007) + (xy 120.142323 161.359) (xy 120.422001 161.358999) (xy 120.489039 161.378683) (xy 120.534794 161.431487) + (xy 120.546 161.482999) (xy 120.546 161.542503) (xy 120.580635 161.626118) (xy 121.572382 162.617866) + (xy 121.572387 162.617868) (xy 121.630139 162.64179) (xy 121.63014 162.64179) (xy 121.655994 162.652499) + (xy 121.655995 162.652499) (xy 121.655997 162.6525) (xy 121.655998 162.6525) (xy 146.146502 162.6525) + (xy 146.146503 162.6525) (xy 146.230118 162.617865) (xy 147.144116 161.703868) (xy 147.173803 161.632195) + (xy 147.17875 161.620253) (xy 147.17875 159.329747) (xy 147.144115 159.246132) (xy 147.080118 159.182135) + (xy 146.893595 158.995612) (xy 146.65362 158.755636) (xy 146.645339 158.752206) (xy 146.570003 158.721) + (xy 146.558026 158.718618) (xy 146.558404 158.716714) (xy 146.50596 158.701315) (xy 146.460205 158.648511) + (xy 146.448999 158.597) (xy 146.448999 158.582321) (xy 146.434008 158.468445) (xy 146.434007 158.468437) + (xy 146.375312 158.326737) (xy 146.281944 158.205056) (xy 146.164203 158.114711) (xy 146.160262 158.111687) + (xy 146.018563 158.052993) (xy 146.018561 158.052992) (xy 145.904678 158.038) (xy 145.904677 158.038) + (xy 144.767073 158.038) (xy 144.700034 158.018315) (xy 144.667872 157.988398) (xy 144.593061 157.888644) + (xy 144.458869 157.764804) (xy 144.458866 157.764802) (xy 144.458865 157.764801) (xy 144.458862 157.764799) + (xy 144.304477 157.667301) (xy 144.287686 157.66057) (xy 144.240354 157.641596) (xy 144.185453 157.598382) + (xy 144.162631 157.532344) (xy 144.179134 157.464452) (xy 144.229723 157.416259) (xy 144.286493 157.4025) + (xy 159.860616 157.4025) (xy 159.927655 157.422185) (xy 159.97341 157.474989) (xy 159.983354 157.544147) + (xy 159.954329 157.607703) (xy 159.906754 157.641597) (xy 159.842542 157.667337) (xy 159.842541 157.667337) + (xy 159.688161 157.764832) (xy 159.688158 157.764834) (xy 159.55979 157.8833) (xy 159.553969 157.888672) + (xy 159.498014 157.963285) (xy 159.479181 157.988397) (xy 159.423211 158.030219) (xy 159.379978 158.038) + (xy 158.242321 158.038) (xy 158.128445 158.052991) (xy 158.128437 158.052993) (xy 157.986737 158.111687) + (xy 157.865056 158.205056) (xy 157.771687 158.326737) (xy 157.712993 158.468436) (xy 157.712992 158.468438) + (xy 157.698 158.582322) (xy 157.698 159.314678) (xy 157.712991 159.428554) (xy 157.712992 159.42856) + (xy 157.712993 159.428563) (xy 157.730262 159.470253) (xy 157.771687 159.570262) (xy 157.812165 159.623015) + (xy 157.837358 159.688184) (xy 157.823319 159.756629) (xy 157.812165 159.773985) (xy 157.771687 159.826737) + (xy 157.712993 159.968436) (xy 157.712992 159.968438) (xy 157.698 160.082322) (xy 157.698 160.814678) + (xy 157.712991 160.928554) (xy 157.712992 160.92856) (xy 157.712993 160.928563) (xy 157.723446 160.953798) + (xy 157.771687 161.070262) (xy 157.771688 161.070263) (xy 157.865056 161.191944) (xy 157.986737 161.285312) + (xy 158.128437 161.344007) (xy 158.242323 161.359) (xy 158.612154 161.358999) (xy 158.679193 161.378683) + (xy 158.699835 161.395318) (xy 160.549107 163.24459) (xy 160.613104 163.308587) (xy 160.696719 163.343222) + (xy 160.69672 163.343222) (xy 183.604431 163.343222) (xy 183.604432 163.343222) (xy 183.688047 163.308587) + (xy 185.537983 161.458651) (xy 185.542188 161.4485) (xy 185.572618 161.375036) (xy 185.572618 159.498591) + (xy 185.56088 159.470253) (xy 185.560272 159.468786) (xy 185.537986 159.414981) (xy 185.537984 159.414976) + (xy 184.878642 158.755635) (xy 184.795027 158.721) (xy 184.673099 158.721) (xy 184.60606 158.701315) + (xy 184.560305 158.648511) (xy 184.549099 158.597) (xy 184.549099 158.582321) (xy 184.534108 158.468445) + (xy 184.534107 158.468437) (xy 184.475412 158.326737) (xy 184.382044 158.205056) (xy 184.264303 158.114711) + (xy 184.260362 158.111687) (xy 184.118663 158.052993) (xy 184.118661 158.052992) (xy 184.004778 158.038) + (xy 184.004777 158.038) (xy 182.867173 158.038) (xy 182.800134 158.018315) (xy 182.767972 157.988398) + (xy 182.693161 157.888644) (xy 182.558969 157.764804) (xy 182.558966 157.764802) (xy 182.558965 157.764801) + (xy 182.558962 157.764799) (xy 182.404577 157.667301) (xy 182.387786 157.66057) (xy 182.340454 157.641596) + (xy 182.285553 157.598382) (xy 182.262731 157.532344) (xy 182.279234 157.464452) (xy 182.329823 157.416259) + (xy 182.386593 157.4025) (xy 197.352245 157.4025) (xy 197.419284 157.422185) (xy 197.465039 157.474989) + (xy 197.474983 157.544147) (xy 197.445958 157.607703) (xy 197.436349 157.617617) (xy 197.310269 157.733972) + (xy 197.250886 157.813156) (xy 197.235481 157.833697) (xy 197.179511 157.875519) (xy 197.136278 157.8833) + (xy 195.998621 157.8833) (xy 195.884745 157.898291) (xy 195.884737 157.898293) (xy 195.743037 157.956987) + (xy 195.621356 158.050356) (xy 195.527987 158.172037) (xy 195.469293 158.313736) (xy 195.469292 158.313738) + (xy 195.4543 158.427622) (xy 195.4543 159.159978) (xy 195.469291 159.273854) (xy 195.469292 159.27386) + (xy 195.469293 159.273863) (xy 195.492441 159.329746) (xy 195.527987 159.415562) (xy 195.568465 159.468315) + (xy 195.593658 159.533484) (xy 195.579619 159.601929) (xy 195.568465 159.619285) (xy 195.527987 159.672037) + (xy 195.469293 159.813736) (xy 195.469292 159.813738) (xy 195.4543 159.927622) (xy 195.4543 160.659978) + (xy 195.469291 160.773854) (xy 195.469292 160.77386) (xy 195.469293 160.773863) (xy 195.488296 160.81974) + (xy 195.527987 160.915562) (xy 195.527988 160.915563) (xy 195.621356 161.037244) (xy 195.743037 161.130612) + (xy 195.884737 161.189307) (xy 195.926892 161.194856) (xy 195.939876 161.2006) (xy 195.95404 161.201613) + (xy 195.971192 161.214452) (xy 195.990788 161.223121) (xy 195.998607 161.234975) (xy 196.009974 161.243484) + (xy 196.017461 161.263557) (xy 196.02926 161.281445) (xy 196.029429 161.295644) (xy 196.034391 161.308948) + (xy 196.029836 161.329883) (xy 196.030092 161.35131) (xy 196.022267 161.364678) (xy 196.019539 161.377221) + (xy 195.998389 161.405476) (xy 195.886963 161.516903) (xy 195.82564 161.550388) (xy 195.755948 161.545404) + (xy 195.751829 161.543783) (xy 195.676701 161.512664) (xy 195.676689 161.512661) (xy 195.522045 161.4819) + (xy 195.522042 161.4819) (xy 195.364358 161.4819) (xy 195.364355 161.4819) (xy 195.20971 161.512661) + (xy 195.209698 161.512664) (xy 195.064027 161.573002) (xy 195.064014 161.573009) (xy 194.932911 161.66061) + (xy 194.932907 161.660613) (xy 194.821413 161.772107) (xy 194.82141 161.772111) (xy 194.733809 161.903214) + (xy 194.733802 161.903227) (xy 194.673464 162.048898) (xy 194.673461 162.04891) (xy 194.6427 162.203553) + (xy 194.6427 162.361246) (xy 194.673461 162.515889) (xy 194.673464 162.515901) (xy 194.733802 162.661572) + (xy 194.733809 162.661585) (xy 194.82141 162.792688) (xy 194.821413 162.792692) (xy 194.932907 162.904186) + (xy 194.932911 162.904189) (xy 195.064014 162.99179) (xy 195.064027 162.991797) (xy 195.121728 163.015697) + (xy 195.209703 163.052137) (xy 195.329846 163.076035) (xy 195.364353 163.082899) (xy 195.364356 163.0829) + (xy 195.364358 163.0829) (xy 195.522044 163.0829) (xy 195.522045 163.082899) (xy 195.676697 163.052137) + (xy 195.822379 162.991794) (xy 195.953489 162.904189) (xy 196.064989 162.792689) (xy 196.152594 162.661579) + (xy 196.160793 162.641786) (xy 196.187344 162.577684) (xy 196.212937 162.515897) (xy 196.2437 162.361242) + (xy 196.2437 162.203558) (xy 196.2437 162.203555) (xy 196.243699 162.203553) (xy 196.222871 162.098844) + (xy 196.212937 162.048903) (xy 196.181814 161.973765) (xy 196.174346 161.904301) (xy 196.20562 161.841822) + (xy 196.208662 161.838669) (xy 196.806716 161.240618) (xy 196.833643 161.225914) (xy 196.859462 161.209322) + (xy 196.865662 161.20843) (xy 196.868039 161.207133) (xy 196.894397 161.204299) (xy 197.136229 161.204299) + (xy 197.203268 161.223984) (xy 197.235432 161.253903) (xy 197.310238 161.353652) (xy 197.310239 161.353653) + (xy 197.31024 161.353654) (xy 197.444432 161.477495) (xy 197.598825 161.574997) (xy 197.726355 161.626119) + (xy 197.768314 161.642939) (xy 197.768315 161.642939) (xy 197.768317 161.64294) (xy 197.947308 161.679079) + (xy 197.947302 161.679079) (xy 197.963622 161.679359) (xy 198.129884 161.68222) (xy 198.310012 161.652258) + (xy 198.365507 161.632198) (xy 198.481736 161.590185) (xy 198.481737 161.590183) (xy 198.48174 161.590183) + (xy 198.496775 161.58142) (xy 198.503459 161.577535) (xy 198.50375 161.577457) (xy 198.531633 161.56116) + (xy 198.531751 161.561092) (xy 198.534968 161.560301) (xy 198.594062 161.544299) (xy 200.075192 161.544299) + (xy 200.075314 161.544306) (xy 200.083405 161.544305) (xy 200.083408 161.544306) (xy 200.115542 161.544302) + (xy 200.178104 161.561234) (xy 200.20593 161.577491) (xy 200.205932 161.577491) (xy 200.21208 161.581083) + (xy 200.213735 161.581908) (xy 200.227878 161.59015) (xy 200.3996 161.652221) (xy 200.579721 161.682182) + (xy 200.759398 161.67909) (xy 200.762291 161.679041) (xy 200.941266 161.642905) (xy 200.941269 161.642903) + (xy 200.941274 161.642903) (xy 201.11076 161.574962) (xy 201.265146 161.477463) (xy 201.285529 161.458653) + (xy 201.39933 161.35363) (xy 201.399332 161.353628) (xy 201.399333 161.353627) (xy 201.474496 161.253402) + (xy 201.530465 161.21158) (xy 201.573698 161.203799) (xy 201.8298 161.203799) (xy 202.3298 161.203799) + (xy 202.385732 161.203799) (xy 202.469724 161.19325) (xy 202.602557 161.138229) (xy 202.669404 161.0863) + (xy 202.669411 161.086294) (xy 203.137294 160.618412) (xy 203.137299 160.618406) (xy 203.189227 160.55156) + (xy 203.192442 160.5438) (xy 202.3298 160.5438) (xy 202.3298 161.203799) (xy 201.8298 161.203799) + (xy 201.8298 160.4178) (xy 201.849485 160.350761) (xy 201.902289 160.305006) (xy 201.9538 160.2938) + (xy 202.0798 160.2938) (xy 202.0798 160.1678) (xy 202.099485 160.100761) (xy 202.152289 160.055006) + (xy 202.2038 160.0438) (xy 203.2548 160.0438) (xy 203.2548 159.927653) (xy 203.23982 159.813869) + (xy 203.239818 159.813864) (xy 203.181178 159.672293) (xy 203.181175 159.672288) (xy 203.14082 159.619696) + (xy 203.115626 159.554527) (xy 203.129664 159.486082) (xy 203.140821 159.468723) (xy 203.14392 159.464685) + (xy 203.181612 159.415563) (xy 203.240307 159.273863) (xy 203.2553 159.159977) (xy 203.255299 158.427624) + (xy 203.255299 158.427622) (xy 214.5043 158.427622) (xy 214.5043 159.159978) (xy 214.519291 159.273854) + (xy 214.519292 159.27386) (xy 214.519293 159.273863) (xy 214.542441 159.329746) (xy 214.577987 159.415562) + (xy 214.618465 159.468315) (xy 214.643658 159.533484) (xy 214.629619 159.601929) (xy 214.618465 159.619285) + (xy 214.577987 159.672037) (xy 214.519293 159.813736) (xy 214.519292 159.813738) (xy 214.5043 159.927622) + (xy 214.5043 160.659978) (xy 214.519291 160.773854) (xy 214.519292 160.77386) (xy 214.519293 160.773863) + (xy 214.538296 160.81974) (xy 214.577987 160.915562) (xy 214.577988 160.915563) (xy 214.671356 161.037244) + (xy 214.793037 161.130612) (xy 214.934737 161.189307) (xy 215.048623 161.2043) (xy 215.328301 161.204299) + (xy 215.395339 161.223983) (xy 215.441094 161.276787) (xy 215.4523 161.328299) (xy 215.4523 161.68996) + (xy 215.4523 161.780466) (xy 215.486935 161.864081) (xy 215.486936 161.864082) (xy 216.722884 163.100032) + (xy 216.722885 163.100032) (xy 216.722887 163.100034) (xy 216.782007 163.124521) (xy 216.78201 163.124523) + (xy 216.782011 163.124523) (xy 216.792156 163.128725) (xy 216.806502 163.134668) (xy 227.501984 163.134668) + (xy 227.501985 163.134668) (xy 227.5856 163.100033) (xy 227.585602 163.100031) (xy 227.585603 163.100031) + (xy 233.112594 157.57304) (xy 233.173917 157.539555) (xy 233.200275 157.536721) (xy 235.310307 157.536721) + (xy 235.323282 157.54053) (xy 235.33677 157.539578) (xy 235.35615 157.550182) (xy 235.377346 157.556406) + (xy 235.3862 157.566624) (xy 235.398064 157.573116) (xy 235.408635 157.592515) (xy 235.423101 157.60921) + (xy 235.425025 157.622593) (xy 235.431496 157.634468) (xy 235.4299 157.656501) (xy 235.433045 157.678368) + (xy 235.427318 157.692177) (xy 235.426451 157.704155) (xy 235.409511 157.735115) (xy 235.347633 157.817626) + (xy 235.335581 157.833697) (xy 235.279611 157.875519) (xy 235.236378 157.8833) (xy 234.098721 157.8833) + (xy 233.984845 157.898291) (xy 233.984837 157.898293) (xy 233.843137 157.956987) (xy 233.721456 158.050356) + (xy 233.628087 158.172037) (xy 233.569393 158.313736) (xy 233.569392 158.313738) (xy 233.5544 158.427622) + (xy 233.5544 159.159978) (xy 233.569391 159.273854) (xy 233.569392 159.27386) (xy 233.569393 159.273863) + (xy 233.592541 159.329746) (xy 233.628087 159.415562) (xy 233.668565 159.468315) (xy 233.693758 159.533484) + (xy 233.679719 159.601929) (xy 233.668565 159.619285) (xy 233.628087 159.672037) (xy 233.569393 159.813736) + (xy 233.569392 159.813738) (xy 233.5544 159.927622) (xy 233.5544 160.659978) (xy 233.569391 160.773854) + (xy 233.569392 160.77386) (xy 233.569393 160.773863) (xy 233.588396 160.81974) (xy 233.628087 160.915562) + (xy 233.628088 160.915563) (xy 233.721456 161.037244) (xy 233.843137 161.130612) (xy 233.984837 161.189307) + (xy 234.098723 161.2043) (xy 234.378501 161.204299) (xy 234.445539 161.223983) (xy 234.491294 161.276787) + (xy 234.5025 161.328299) (xy 234.5025 161.349003) (xy 234.534935 161.427308) (xy 234.537136 161.43262) + (xy 235.253385 162.148868) (xy 235.317382 162.212865) (xy 235.400997 162.2475) (xy 235.521925 162.2475) + (xy 235.588964 162.267185) (xy 235.634719 162.319989) (xy 235.636465 162.323999) (xy 235.667319 162.398486) + (xy 235.667607 162.399181) (xy 235.667609 162.399185) (xy 235.75521 162.530288) (xy 235.755213 162.530292) + (xy 235.866707 162.641786) (xy 235.866711 162.641789) (xy 235.997814 162.72939) (xy 235.997827 162.729397) + (xy 236.103306 162.773087) (xy 236.143503 162.789737) (xy 236.298153 162.820499) (xy 236.298156 162.8205) + (xy 236.298158 162.8205) (xy 236.455844 162.8205) (xy 236.455845 162.820499) (xy 236.610497 162.789737) + (xy 236.756179 162.729394) (xy 236.887289 162.641789) (xy 236.998789 162.530289) (xy 237.086394 162.399179) + (xy 237.092208 162.385144) (xy 237.10918 162.344169) (xy 237.146737 162.253497) (xy 237.1775 162.098842) + (xy 237.1775 161.941158) (xy 237.1775 161.941155) (xy 237.177499 161.941153) (xy 237.163309 161.869814) + (xy 237.146737 161.786503) (xy 237.131888 161.750653) (xy 237.117431 161.715751) (xy 237.109962 161.646282) + (xy 237.141237 161.583803) (xy 237.201326 161.548151) (xy 237.231992 161.544299) (xy 238.175301 161.544299) + (xy 238.183484 161.544299) (xy 238.183508 161.544306) (xy 238.215665 161.544302) (xy 238.215945 161.544384) + (xy 238.278204 161.561234) (xy 238.30603 161.577491) (xy 238.306032 161.577491) (xy 238.31218 161.581083) + (xy 238.313835 161.581908) (xy 238.327978 161.59015) (xy 238.4997 161.652221) (xy 238.679821 161.682182) + (xy 238.859498 161.67909) (xy 238.862391 161.679041) (xy 239.041366 161.642905) (xy 239.041369 161.642903) + (xy 239.041374 161.642903) (xy 239.21086 161.574962) (xy 239.365246 161.477463) (xy 239.385629 161.458653) + (xy 239.49943 161.35363) (xy 239.499432 161.353628) (xy 239.499433 161.353627) (xy 239.574596 161.253402) + (xy 239.630565 161.21158) (xy 239.673798 161.203799) (xy 239.9299 161.203799) (xy 240.4299 161.203799) + (xy 240.485832 161.203799) (xy 240.569824 161.19325) (xy 240.702657 161.138229) (xy 240.769504 161.0863) + (xy 240.769511 161.086294) (xy 241.237394 160.618412) (xy 241.237399 160.618406) (xy 241.289327 160.55156) + (xy 241.292542 160.5438) (xy 240.4299 160.5438) (xy 240.4299 161.203799) (xy 239.9299 161.203799) + (xy 239.9299 160.4178) (xy 239.949585 160.350761) (xy 240.002389 160.305006) (xy 240.0539 160.2938) + (xy 240.1799 160.2938) (xy 240.1799 160.1678) (xy 240.199585 160.100761) (xy 240.252389 160.055006) + (xy 240.3039 160.0438) (xy 241.3549 160.0438) (xy 241.3549 159.927653) (xy 241.33992 159.813869) + (xy 241.339918 159.813864) (xy 241.281278 159.672293) (xy 241.281275 159.672288) (xy 241.24092 159.619696) + (xy 241.215726 159.554527) (xy 241.229764 159.486082) (xy 241.240921 159.468723) (xy 241.24402 159.464685) + (xy 241.281712 159.415563) (xy 241.340407 159.273863) (xy 241.3554 159.159977) (xy 241.355399 158.427624) + (xy 241.350643 158.391498) (xy 241.340408 158.313745) (xy 241.340407 158.313738) (xy 241.340407 158.313737) + (xy 241.323542 158.273022) (xy 252.8559 158.273022) (xy 252.8559 159.005378) (xy 252.870891 159.119254) + (xy 252.870892 159.11926) (xy 252.870893 159.119263) (xy 252.877533 159.135292) (xy 252.929587 159.260962) + (xy 252.970065 159.313715) (xy 252.995258 159.378884) (xy 252.981219 159.447329) (xy 252.970065 159.464685) + (xy 252.929587 159.517437) (xy 252.870893 159.659136) (xy 252.870892 159.659138) (xy 252.8559 159.773022) + (xy 252.8559 160.505378) (xy 252.870891 160.619254) (xy 252.870892 160.61926) (xy 252.870893 160.619263) + (xy 252.887196 160.658621) (xy 252.929587 160.760962) (xy 252.941095 160.775959) (xy 253.022956 160.882644) + (xy 253.144637 160.976012) (xy 253.286337 161.034707) (xy 253.400223 161.0497) (xy 253.679901 161.049699) + (xy 253.746939 161.069383) (xy 253.792694 161.122187) (xy 253.8039 161.173699) (xy 253.8039 161.649847) + (xy 253.8039 161.740353) (xy 253.832513 161.809431) (xy 253.838536 161.82397) (xy 253.877103 161.862537) + (xy 253.910588 161.92386) (xy 253.905604 161.993552) (xy 253.903986 161.997663) (xy 253.872863 162.072803) + (xy 253.872862 162.072806) (xy 253.872862 162.072807) (xy 253.872861 162.07281) (xy 253.8421 162.227453) + (xy 253.8421 162.385146) (xy 253.872861 162.539789) (xy 253.872864 162.539801) (xy 253.933202 162.685472) + (xy 253.933209 162.685485) (xy 254.02081 162.816588) (xy 254.020813 162.816592) (xy 254.132307 162.928086) + (xy 254.132311 162.928089) (xy 254.263414 163.01569) (xy 254.263427 163.015697) (xy 254.351405 163.052138) + (xy 254.409103 163.076037) (xy 254.563753 163.106799) (xy 254.563756 163.1068) (xy 254.563758 163.1068) + (xy 254.721444 163.1068) (xy 254.721445 163.106799) (xy 254.876097 163.076037) (xy 255.021779 163.015694) + (xy 255.152889 162.928089) (xy 255.264389 162.816589) (xy 255.351994 162.685479) (xy 255.36189 162.661589) + (xy 255.412335 162.539801) (xy 255.412337 162.539797) (xy 255.4431 162.385142) (xy 255.4431 162.227458) + (xy 255.4431 162.227455) (xy 255.443099 162.227453) (xy 255.431702 162.170158) (xy 255.412337 162.072803) + (xy 255.412193 162.072456) (xy 255.351997 161.927127) (xy 255.35199 161.927114) (xy 255.264389 161.796011) + (xy 255.264386 161.796007) (xy 255.193333 161.724954) (xy 255.159848 161.663631) (xy 255.164832 161.593939) + (xy 255.206704 161.538006) (xy 255.272168 161.513589) (xy 255.305556 161.515726) (xy 255.348907 161.524479) + (xy 255.351845 161.524529) (xy 255.531484 161.52762) (xy 255.711612 161.497658) (xy 255.775246 161.474656) + (xy 255.883336 161.435585) (xy 255.883337 161.435583) (xy 255.88334 161.435583) (xy 255.898375 161.42682) + (xy 255.905059 161.422935) (xy 255.90535 161.422857) (xy 255.933233 161.40656) (xy 255.933351 161.406492) + (xy 255.936568 161.405701) (xy 255.995662 161.389699) (xy 257.476792 161.389699) (xy 257.476914 161.389706) + (xy 257.485005 161.389705) (xy 257.485008 161.389706) (xy 257.517142 161.389702) (xy 257.579704 161.406634) + (xy 257.60753 161.422891) (xy 257.607532 161.422891) (xy 257.61368 161.426483) (xy 257.615335 161.427308) + (xy 257.629478 161.43555) (xy 257.8012 161.497621) (xy 257.981321 161.527582) (xy 258.160998 161.52449) + (xy 258.163891 161.524441) (xy 258.342866 161.488305) (xy 258.342869 161.488303) (xy 258.342874 161.488303) + (xy 258.51236 161.420362) (xy 258.666746 161.322863) (xy 258.681825 161.308948) (xy 258.80093 161.19903) + (xy 258.800932 161.199028) (xy 258.806245 161.191944) (xy 258.876096 161.098802) (xy 258.932065 161.05698) + (xy 258.975298 161.049199) (xy 259.2314 161.049199) (xy 259.7314 161.049199) (xy 259.787332 161.049199) + (xy 259.871324 161.03865) (xy 260.004157 160.983629) (xy 260.071004 160.9317) (xy 260.071011 160.931694) + (xy 260.538894 160.463812) (xy 260.538899 160.463806) (xy 260.590827 160.39696) (xy 260.594042 160.3892) + (xy 259.7314 160.3892) (xy 259.7314 161.049199) (xy 259.2314 161.049199) (xy 259.2314 160.2632) + (xy 259.251085 160.196161) (xy 259.303889 160.150406) (xy 259.3554 160.1392) (xy 259.4814 160.1392) + (xy 259.4814 160.0132) (xy 259.501085 159.946161) (xy 259.553889 159.900406) (xy 259.6054 159.8892) + (xy 260.6564 159.8892) (xy 260.6564 159.773053) (xy 260.64142 159.659269) (xy 260.641418 159.659264) + (xy 260.582778 159.517693) (xy 260.582775 159.517688) (xy 260.54242 159.465096) (xy 260.517226 159.399927) + (xy 260.531264 159.331482) (xy 260.542421 159.314123) (xy 260.571771 159.275874) (xy 260.583212 159.260963) + (xy 260.641907 159.119263) (xy 260.6569 159.005377) (xy 260.656899 158.889621) (xy 260.676583 158.822584) + (xy 260.729387 158.776829) (xy 260.798545 158.766885) (xy 260.862101 158.795909) (xy 260.89546 158.84217) + (xy 260.941854 158.954175) (xy 260.941859 158.954185) (xy 261.02946 159.085288) (xy 261.029463 159.085292) + (xy 261.140957 159.196786) (xy 261.140961 159.196789) (xy 261.272064 159.28439) (xy 261.272077 159.284397) + (xy 261.403178 159.3387) (xy 261.417753 159.344737) (xy 261.572403 159.375499) (xy 261.572406 159.3755) + (xy 261.572408 159.3755) (xy 261.730094 159.3755) (xy 261.730095 159.375499) (xy 261.884747 159.344737) + (xy 262.030429 159.284394) (xy 262.161539 159.196789) (xy 262.273039 159.085289) (xy 262.360644 158.954179) + (xy 262.420987 158.808497) (xy 262.45175 158.653842) (xy 262.45175 158.496158) (xy 262.45175 158.496155) + (xy 262.451749 158.496153) (xy 262.447438 158.474482) (xy 262.420987 158.341503) (xy 262.419002 158.336711) + (xy 262.410596 158.316416) (xy 262.392622 158.273022) (xy 271.906 158.273022) (xy 271.906 159.005378) + (xy 271.920991 159.119254) (xy 271.920992 159.11926) (xy 271.920993 159.119263) (xy 271.927633 159.135292) + (xy 271.979687 159.260962) (xy 272.020165 159.313715) (xy 272.045358 159.378884) (xy 272.031319 159.447329) + (xy 272.020165 159.464685) (xy 271.979687 159.517437) (xy 271.920993 159.659136) (xy 271.920992 159.659138) + (xy 271.906 159.773022) (xy 271.906 160.505378) (xy 271.920991 160.619254) (xy 271.920992 160.61926) + (xy 271.920993 160.619263) (xy 271.937296 160.658621) (xy 271.979687 160.760962) (xy 271.991195 160.775959) + (xy 272.073056 160.882644) (xy 272.194737 160.976012) (xy 272.336437 161.034707) (xy 272.450323 161.0497) + (xy 272.730001 161.049699) (xy 272.797039 161.069383) (xy 272.842794 161.122187) (xy 272.854 161.173699) + (xy 272.854 161.259997) (xy 272.854 161.350503) (xy 272.888635 161.434118) (xy 272.888636 161.434119) + (xy 273.922379 162.467864) (xy 273.92238 162.467864) (xy 273.922382 162.467866) (xy 273.981502 162.492353) + (xy 273.981505 162.492355) (xy 273.981506 162.492355) (xy 273.991651 162.496557) (xy 274.005997 162.5025) + (xy 292.357452 162.5025) (xy 292.357453 162.5025) (xy 292.441068 162.467865) (xy 297.320114 157.588819) + (xy 297.381437 157.555334) (xy 297.407795 157.5525) (xy 299.592274 157.5525) (xy 299.605249 157.556309) + (xy 299.618738 157.555357) (xy 299.638119 157.565961) (xy 299.659313 157.572185) (xy 299.668166 157.582402) + (xy 299.680032 157.588895) (xy 299.690603 157.608296) (xy 299.705068 157.624989) (xy 299.706992 157.638373) + (xy 299.713463 157.650248) (xy 299.711867 157.67228) (xy 299.715012 157.694147) (xy 299.709285 157.707955) + (xy 299.708418 157.719935) (xy 299.691476 157.750897) (xy 299.62938 157.833697) (xy 299.57341 157.875519) + (xy 299.530178 157.8833) (xy 298.392521 157.8833) (xy 298.278645 157.898291) (xy 298.278637 157.898293) + (xy 298.136937 157.956987) (xy 298.015256 158.050356) (xy 297.921887 158.172037) (xy 297.863193 158.313736) + (xy 297.863192 158.313738) (xy 297.8482 158.427622) (xy 297.8482 159.159978) (xy 297.863191 159.273854) + (xy 297.863192 159.27386) (xy 297.863193 159.273863) (xy 297.886341 159.329746) (xy 297.921887 159.415562) + (xy 297.962365 159.468315) (xy 297.987558 159.533484) (xy 297.973519 159.601929) (xy 297.962365 159.619285) + (xy 297.921887 159.672037) (xy 297.863193 159.813736) (xy 297.863192 159.813738) (xy 297.8482 159.927622) + (xy 297.8482 160.659978) (xy 297.863191 160.773854) (xy 297.863192 160.77386) (xy 297.863193 160.773863) + (xy 297.882196 160.81974) (xy 297.921887 160.915562) (xy 297.921888 160.915563) (xy 298.015256 161.037244) + (xy 298.136937 161.130612) (xy 298.278637 161.189307) (xy 298.392523 161.2043) (xy 298.718149 161.204299) + (xy 298.785188 161.223983) (xy 298.822585 161.267142) (xy 298.82405 161.266164) (xy 298.830835 161.276319) + (xy 299.508385 161.953868) (xy 299.572382 162.017865) (xy 299.655997 162.0525) (xy 299.655998 162.0525) + (xy 305.696502 162.0525) (xy 305.696503 162.0525) (xy 305.780118 162.017865) (xy 310.309164 157.488819) + (xy 310.370487 157.455334) (xy 310.396845 157.4525) (xy 325.885665 157.4525) (xy 325.903381 157.457702) + (xy 325.921847 157.457896) (xy 325.936212 157.467342) (xy 325.952704 157.472185) (xy 325.964794 157.486137) + (xy 325.980225 157.496285) (xy 325.987202 157.511998) (xy 325.998459 157.524989) (xy 326.001086 157.543265) + (xy 326.008581 157.560142) (xy 326.005956 157.57713) (xy 326.008403 157.594147) (xy 326.000732 157.610943) + (xy 325.997913 157.629192) (xy 325.983267 157.649187) (xy 325.979378 157.657703) (xy 325.978521 157.658682) + (xy 325.974369 157.663372) (xy 325.897869 157.733972) (xy 325.820064 157.837719) (xy 325.816734 157.841482) + (xy 325.791233 157.857494) (xy 325.767111 157.875519) (xy 325.760686 157.876675) (xy 325.757562 157.878637) + (xy 325.750214 157.878559) (xy 325.723878 157.8833) (xy 324.586221 157.8833) (xy 324.472345 157.898291) + (xy 324.472337 157.898293) (xy 324.330637 157.956987) (xy 324.208956 158.050356) (xy 324.115587 158.172037) + (xy 324.056893 158.313736) (xy 324.056892 158.313738) (xy 324.0419 158.427622) (xy 324.0419 159.159978) + (xy 324.056891 159.273854) (xy 324.056892 159.27386) (xy 324.056893 159.273863) (xy 324.080041 159.329746) + (xy 324.115587 159.415562) (xy 324.156065 159.468315) (xy 324.181258 159.533484) (xy 324.167219 159.601929) + (xy 324.156065 159.619285) (xy 324.115587 159.672037) (xy 324.056893 159.813736) (xy 324.056892 159.813738) + (xy 324.0419 159.927622) (xy 324.0419 160.659978) (xy 324.056891 160.773854) (xy 324.056892 160.77386) + (xy 324.056893 160.773863) (xy 324.075896 160.81974) (xy 324.115587 160.915562) (xy 324.115588 160.915563) + (xy 324.208956 161.037244) (xy 324.330637 161.130612) (xy 324.472337 161.189307) (xy 324.586223 161.2043) + (xy 324.865901 161.204299) (xy 324.932939 161.223983) (xy 324.978694 161.276787) (xy 324.9899 161.328299) + (xy 324.9899 161.345897) (xy 324.9899 161.436403) (xy 325.021488 161.512663) (xy 325.024536 161.52002) + (xy 325.658385 162.153868) (xy 325.722382 162.217865) (xy 325.805997 162.2525) (xy 325.805998 162.2525) + (xy 332.296502 162.2525) (xy 332.296503 162.2525) (xy 332.380118 162.217865) (xy 337.059164 157.538819) + (xy 337.120487 157.505334) (xy 337.146845 157.5025) (xy 343.732839 157.5025) (xy 343.799878 157.522185) + (xy 343.845633 157.574989) (xy 343.855577 157.644147) (xy 343.826552 157.707703) (xy 343.780292 157.741061) + (xy 343.773938 157.743692) (xy 343.773937 157.743693) (xy 343.740364 157.757599) (xy 343.632237 157.802387) + (xy 343.510556 157.895756) (xy 343.417187 158.017437) (xy 343.358493 158.159136) (xy 343.358492 158.159138) + (xy 343.3435 158.273022) (xy 343.3435 159.005378) (xy 343.358491 159.119254) (xy 343.358492 159.11926) + (xy 343.358493 159.119263) (xy 343.365133 159.135292) (xy 343.417187 159.260962) (xy 343.457665 159.313715) + (xy 343.482858 159.378884) (xy 343.469118 159.446762) (xy 343.464161 159.456219) (xy 343.417188 159.517437) + (xy 343.361057 159.652945) (xy 343.358461 159.6579) (xy 343.337907 159.679167) (xy 343.31935 159.702195) + (xy 343.313899 159.704009) (xy 343.309906 159.708141) (xy 343.281116 159.71492) (xy 343.253056 159.724259) + (xy 343.247489 159.722838) (xy 343.241896 159.724155) (xy 343.214012 159.714293) (xy 343.185357 159.706979) + (xy 343.180609 159.702479) (xy 343.176025 159.700858) (xy 343.168049 159.690574) (xy 343.145529 159.669229) + (xy 343.118589 159.628911) (xy 343.118586 159.628907) (xy 343.007092 159.517413) (xy 343.007088 159.51741) + (xy 342.875985 159.429809) (xy 342.875972 159.429802) (xy 342.730301 159.369464) (xy 342.730289 159.369461) + (xy 342.575645 159.3387) (xy 342.575642 159.3387) (xy 342.417958 159.3387) (xy 342.417955 159.3387) + (xy 342.26331 159.369461) (xy 342.263298 159.369464) (xy 342.117627 159.429802) (xy 342.117614 159.429809) + (xy 341.986511 159.51741) (xy 341.986507 159.517413) (xy 341.875013 159.628907) (xy 341.87501 159.628911) + (xy 341.787409 159.760014) (xy 341.787402 159.760027) (xy 341.727064 159.905698) (xy 341.727061 159.90571) + (xy 341.6963 160.060353) (xy 341.6963 160.218046) (xy 341.727061 160.372689) (xy 341.727064 160.372701) + (xy 341.787402 160.518372) (xy 341.787409 160.518385) (xy 341.87501 160.649488) (xy 341.875013 160.649492) + (xy 341.986507 160.760986) (xy 341.986511 160.760989) (xy 342.117614 160.84859) (xy 342.117627 160.848597) + (xy 342.216252 160.889448) (xy 342.263303 160.908937) (xy 342.37774 160.9317) (xy 342.417953 160.939699) + (xy 342.417956 160.9397) (xy 342.417958 160.9397) (xy 342.575644 160.9397) (xy 342.575645 160.939699) + (xy 342.730297 160.908937) (xy 342.875979 160.848594) (xy 343.007089 160.760989) (xy 343.118589 160.649489) + (xy 343.145529 160.609169) (xy 343.19914 160.564366) (xy 343.268465 160.555657) (xy 343.331493 160.585812) + (xy 343.363192 160.630608) (xy 343.417187 160.760962) (xy 343.428695 160.775959) (xy 343.510556 160.882644) + (xy 343.632237 160.976012) (xy 343.773937 161.034707) (xy 343.887823 161.0497) (xy 345.025429 161.049699) + (xy 345.092468 161.069384) (xy 345.124632 161.099303) (xy 345.199438 161.199052) (xy 345.199439 161.199053) + (xy 345.19944 161.199054) (xy 345.333632 161.322895) (xy 345.488025 161.420397) (xy 345.606784 161.468003) + (xy 345.657514 161.488339) (xy 345.657515 161.488339) (xy 345.657517 161.48834) (xy 345.836508 161.524479) + (xy 345.836502 161.524479) (xy 345.852822 161.524759) (xy 346.019084 161.52762) (xy 346.199212 161.497658) + (xy 346.262846 161.474656) (xy 346.370936 161.435585) (xy 346.370937 161.435583) (xy 346.37094 161.435583) + (xy 346.385975 161.42682) (xy 346.392659 161.422935) (xy 346.39295 161.422857) (xy 346.420833 161.40656) + (xy 346.420951 161.406492) (xy 346.424168 161.405701) (xy 346.483262 161.389699) (xy 347.964392 161.389699) + (xy 347.964514 161.389706) (xy 347.972605 161.389705) (xy 347.972608 161.389706) (xy 348.004742 161.389702) + (xy 348.067304 161.406634) (xy 348.09513 161.422891) (xy 348.095132 161.422891) (xy 348.10128 161.426483) + (xy 348.102935 161.427308) (xy 348.117078 161.43555) (xy 348.2888 161.497621) (xy 348.468921 161.527582) + (xy 348.648598 161.52449) (xy 348.651491 161.524441) (xy 348.830466 161.488305) (xy 348.830469 161.488303) + (xy 348.830474 161.488303) (xy 348.99996 161.420362) (xy 349.154346 161.322863) (xy 349.169425 161.308948) + (xy 349.28853 161.19903) (xy 349.288532 161.199028) (xy 349.293845 161.191944) (xy 349.363696 161.098802) + (xy 349.419665 161.05698) (xy 349.462898 161.049199) (xy 349.719 161.049199) (xy 350.219 161.049199) + (xy 350.274932 161.049199) (xy 350.358924 161.03865) (xy 350.491757 160.983629) (xy 350.558604 160.9317) + (xy 350.558611 160.931694) (xy 351.026494 160.463812) (xy 351.026499 160.463806) (xy 351.078427 160.39696) + (xy 351.081642 160.3892) (xy 350.219 160.3892) (xy 350.219 161.049199) (xy 349.719 161.049199) (xy 349.719 160.2632) + (xy 349.738685 160.196161) (xy 349.791489 160.150406) (xy 349.843 160.1392) (xy 349.969 160.1392) + (xy 349.969 160.0132) (xy 349.988685 159.946161) (xy 350.041489 159.900406) (xy 350.093 159.8892) + (xy 351.144 159.8892) (xy 351.144 159.773053) (xy 351.12902 159.659269) (xy 351.129018 159.659264) + (xy 351.070378 159.517693) (xy 351.070375 159.517688) (xy 351.03002 159.465096) (xy 351.004826 159.399927) + (xy 351.018864 159.331482) (xy 351.030021 159.314123) (xy 351.059371 159.275874) (xy 351.070812 159.260963) + (xy 351.129507 159.119263) (xy 351.1445 159.005377) (xy 351.144499 158.273024) (xy 351.129507 158.159137) + (xy 351.070812 158.017437) (xy 350.977444 157.895756) (xy 350.855763 157.802388) (xy 350.855762 157.802387) + (xy 350.714063 157.743693) (xy 350.714061 157.743692) (xy 350.600178 157.7287) (xy 350.600177 157.7287) + (xy 350.078046 157.7287) (xy 350.011007 157.709015) (xy 349.990365 157.692381) (xy 349.380119 157.082136) + (xy 349.380118 157.082135) (xy 349.296503 157.0475) (xy 348.1563 157.0475) (xy 348.089261 157.027815) + (xy 348.043506 156.975011) (xy 348.033562 156.905853) (xy 348.062587 156.842297) (xy 348.108848 156.808939) + (xy 348.242632 156.753524) (xy 348.242635 156.753522) (xy 348.242641 156.75352) (xy 348.491759 156.609691) + (xy 348.719973 156.434577) (xy 348.923377 156.231173) (xy 349.098491 156.002959) (xy 349.24232 155.753841) + (xy 349.352402 155.48808) (xy 349.426853 155.210225) (xy 349.4644 154.925029) (xy 349.4644 154.69655) + (xy 351.2745 154.69655) (xy 351.2745 154.865849) (xy 351.300981 155.033047) (xy 351.353296 155.194053) + (xy 351.430152 155.344888) (xy 351.529648 155.481834) (xy 351.529652 155.481839) (xy 351.64936 155.601547) + (xy 351.649365 155.601551) (xy 351.768817 155.688337) (xy 351.786315 155.70105) (xy 351.882425 155.75002) + (xy 351.937146 155.777903) (xy 351.937148 155.777903) (xy 351.937151 155.777905) (xy 352.02345 155.805945) + (xy 352.098152 155.830218) (xy 352.265351 155.8567) (xy 352.265356 155.8567) (xy 352.434649 155.8567) + (xy 352.601847 155.830218) (xy 352.644777 155.816269) (xy 352.762849 155.777905) (xy 352.913685 155.70105) + (xy 353.050641 155.601546) (xy 353.170346 155.481841) (xy 353.26985 155.344885) (xy 353.346705 155.194049) + (xy 353.399018 155.033047) (xy 353.4255 154.865849) (xy 353.4255 154.69655) (xy 353.399018 154.529352) + (xy 353.354296 154.391713) (xy 353.346705 154.368351) (xy 353.346703 154.368348) (xy 353.346703 154.368346) + (xy 353.302676 154.28194) (xy 353.26985 154.217515) (xy 353.238281 154.174064) (xy 353.170351 154.080565) + (xy 353.170347 154.08056) (xy 353.050639 153.960852) (xy 353.050634 153.960848) (xy 352.913688 153.861352) + (xy 352.913687 153.861351) (xy 352.913685 153.86135) (xy 352.859831 153.83391) (xy 352.762853 153.784496) + (xy 352.601847 153.732181) (xy 352.434649 153.7057) (xy 352.434644 153.7057) (xy 352.265356 153.7057) + (xy 352.265351 153.7057) (xy 352.098152 153.732181) (xy 351.937146 153.784496) (xy 351.786311 153.861352) + (xy 351.649365 153.960848) (xy 351.64936 153.960852) (xy 351.529652 154.08056) (xy 351.529648 154.080565) + (xy 351.430152 154.217511) (xy 351.353296 154.368346) (xy 351.300981 154.529352) (xy 351.2745 154.69655) + (xy 349.4644 154.69655) (xy 349.4644 154.637371) (xy 349.426853 154.352175) (xy 349.352402 154.07432) + (xy 349.24232 153.808559) (xy 349.242318 153.808556) (xy 349.242316 153.808551) (xy 349.098495 153.559448) + (xy 349.098491 153.559441) (xy 348.994569 153.424007) (xy 348.923378 153.331228) (xy 348.923372 153.331221) + (xy 348.719978 153.127827) (xy 348.719971 153.127821) (xy 348.491767 152.952715) (xy 348.491765 152.952713) + (xy 348.491759 152.952709) (xy 348.491754 152.952706) (xy 348.491751 152.952704) (xy 348.242648 152.808883) + (xy 348.242631 152.808875) (xy 347.976878 152.698797) (xy 347.699023 152.624346) (xy 347.413838 152.586801) + (xy 347.413835 152.5868) (xy 347.413829 152.5868) (xy 347.126171 152.5868) (xy 347.126165 152.5868) + (xy 347.126161 152.586801) (xy 346.840976 152.624346) (xy 346.563121 152.698797) (xy 346.297368 152.808875) + (xy 346.297351 152.808883) (xy 346.048248 152.952704) (xy 346.048232 152.952715) (xy 345.820028 153.127821) + (xy 345.820021 153.127827) (xy 345.616627 153.331221) (xy 345.54543 153.424007) (xy 345.489001 153.465209) + (xy 345.419255 153.469364) (xy 345.358335 153.435151) (xy 345.325583 153.373434) (xy 345.331396 153.303807) + (xy 345.339661 153.286531) (xy 345.392863 153.194383) (xy 345.500742 152.933939) (xy 345.573704 152.661642) + (xy 345.6105 152.382151) (xy 345.6105 152.100249) (xy 345.573704 151.820758) (xy 345.500742 151.548461) + (xy 345.392863 151.288017) (xy 345.392861 151.288014) (xy 345.392859 151.288009) (xy 345.251916 151.04389) + (xy 345.251912 151.043883) (xy 345.0803 150.820235) (xy 345.080298 150.820233) (xy 345.080295 150.820229) + (xy 344.88097 150.620904) (xy 344.796889 150.556386) (xy 344.657317 150.449288) (xy 344.657311 150.449284) + (xy 344.657309 150.449283) (xy 344.41319 150.30834) (xy 344.413179 150.308335) (xy 344.152743 150.200459) + (xy 343.880439 150.127495) (xy 343.600958 150.0907) (xy 343.600951 150.0907) (xy 343.319049 150.0907) + (xy 343.319041 150.0907) (xy 343.03956 150.127495) (xy 342.767256 150.200459) (xy 342.50682 150.308335) + (xy 342.506809 150.30834) (xy 342.262692 150.449281) (xy 342.262683 150.449288) (xy 342.242106 150.465076) + (xy 342.176938 150.49027) (xy 342.166622 150.4907) (xy 338.834998 150.4907) (xy 338.834981 150.490701) + (xy 338.732203 150.5012) (xy 338.7322 150.501201) (xy 338.565668 150.556385) (xy 338.565663 150.556387) + (xy 338.416342 150.648489) (xy 338.292289 150.772542) (xy 338.200187 150.921863) (xy 338.200185 150.921868) + (xy 338.180249 150.982031) (xy 338.145001 151.088403) (xy 338.145001 151.088404) (xy 338.145 151.088404) + (xy 338.1345 151.191183) (xy 338.1345 153.291201) (xy 338.134501 153.291218) (xy 338.145 153.393996) + (xy 338.145001 153.393999) (xy 338.154945 153.424007) (xy 338.200186 153.560534) (xy 338.292288 153.709856) + (xy 338.416344 153.833912) (xy 338.565666 153.926014) (xy 338.732203 153.981199) (xy 338.834991 153.9917) + (xy 340.762118 153.991699) (xy 340.762127 153.9917) (xy 341.190851 153.991699) (xy 341.257889 154.011383) + (xy 341.303644 154.064187) (xy 341.313588 154.133346) (xy 341.291169 154.188583) (xy 341.270151 154.217511) + (xy 341.193296 154.368346) (xy 341.140981 154.529352) (xy 341.1145 154.69655) (xy 341.1145 154.865849) + (xy 341.140981 155.033047) (xy 341.193296 155.194053) (xy 341.270152 155.344888) (xy 341.369648 155.481834) + (xy 341.369652 155.481839) (xy 341.48936 155.601547) (xy 341.489365 155.601551) (xy 341.608817 155.688337) + (xy 341.626315 155.70105) (xy 341.722425 155.75002) (xy 341.777146 155.777903) (xy 341.777148 155.777903) + (xy 341.777151 155.777905) (xy 341.86345 155.805945) (xy 341.938152 155.830218) (xy 342.105351 155.8567) + (xy 342.105356 155.8567) (xy 342.274649 155.8567) (xy 342.441847 155.830218) (xy 342.484777 155.816269) + (xy 342.602849 155.777905) (xy 342.753685 155.70105) (xy 342.890641 155.601546) (xy 343.010346 155.481841) + (xy 343.10985 155.344885) (xy 343.186705 155.194049) (xy 343.239018 155.033047) (xy 343.2655 154.865849) + (xy 343.2655 154.69655) (xy 343.239928 154.535098) (xy 343.248882 154.465805) (xy 343.293879 154.412353) + (xy 343.36063 154.391713) (xy 343.362401 154.3917) (xy 343.600944 154.3917) (xy 343.600951 154.3917) + (xy 343.880442 154.354904) (xy 344.152739 154.281942) (xy 344.413183 154.174063) (xy 344.657317 154.033112) + (xy 344.880965 153.8615) (xy 345.0803 153.662165) (xy 345.147992 153.573946) (xy 345.20442 153.532744) + (xy 345.274166 153.528589) (xy 345.335086 153.562801) (xy 345.367839 153.624518) (xy 345.362026 153.694146) + (xy 345.353755 153.711433) (xy 345.297683 153.808551) (xy 345.297675 153.808568) (xy 345.187597 154.074321) + (xy 345.113146 154.352176) (xy 345.075601 154.637361) (xy 345.0756 154.637377) (xy 345.0756 154.925022) + (xy 345.075601 154.925038) (xy 345.113146 155.210223) (xy 345.187597 155.488078) (xy 345.297675 155.753831) + (xy 345.297683 155.753848) (xy 345.441504 156.002951) (xy 345.441515 156.002967) (xy 345.616621 156.231171) + (xy 345.616627 156.231178) (xy 345.820021 156.434572) (xy 345.820027 156.434577) (xy 346.048241 156.609691) + (xy 346.048248 156.609695) (xy 346.297351 156.753516) (xy 346.297367 156.753524) (xy 346.431152 156.808939) + (xy 346.485556 156.85278) (xy 346.507621 156.919074) (xy 346.490342 156.986773) (xy 346.439205 157.034384) + (xy 346.3837 157.0475) (xy 336.955994 157.0475) (xy 336.873371 157.081725) (xy 336.87337 157.081724) + (xy 336.872385 157.082132) (xy 336.87238 157.082136) (xy 332.193336 161.761181) (xy 332.132013 161.794666) + (xy 332.105655 161.7975) (xy 329.774555 161.7975) (xy 329.707516 161.777815) (xy 329.661761 161.725011) + (xy 329.651817 161.655853) (xy 329.680842 161.592297) (xy 329.708344 161.568657) (xy 329.795542 161.513589) + (xy 329.852746 161.477463) (xy 329.873129 161.458653) (xy 329.98693 161.35363) (xy 329.986932 161.353628) + (xy 329.986933 161.353627) (xy 330.062096 161.253402) (xy 330.118065 161.21158) (xy 330.161298 161.203799) + (xy 330.4174 161.203799) (xy 330.9174 161.203799) (xy 330.973332 161.203799) (xy 331.057324 161.19325) + (xy 331.190157 161.138229) (xy 331.257004 161.0863) (xy 331.257011 161.086294) (xy 331.724894 160.618412) + (xy 331.724899 160.618406) (xy 331.776827 160.55156) (xy 331.780042 160.5438) (xy 330.9174 160.5438) + (xy 330.9174 161.203799) (xy 330.4174 161.203799) (xy 330.4174 160.4178) (xy 330.437085 160.350761) + (xy 330.489889 160.305006) (xy 330.5414 160.2938) (xy 330.6674 160.2938) (xy 330.6674 160.1678) + (xy 330.687085 160.100761) (xy 330.739889 160.055006) (xy 330.7914 160.0438) (xy 331.8424 160.0438) + (xy 331.8424 159.927653) (xy 331.82742 159.813869) (xy 331.827418 159.813864) (xy 331.768778 159.672293) + (xy 331.768775 159.672288) (xy 331.72842 159.619696) (xy 331.703226 159.554527) (xy 331.717264 159.486082) + (xy 331.728421 159.468723) (xy 331.73152 159.464685) (xy 331.769212 159.415563) (xy 331.827907 159.273863) + (xy 331.8429 159.159977) (xy 331.842899 158.427624) (xy 331.838143 158.391498) (xy 331.827908 158.313745) + (xy 331.827907 158.313737) (xy 331.769212 158.172037) (xy 331.675844 158.050356) (xy 331.582475 157.978712) + (xy 331.554162 157.956987) (xy 331.412463 157.898293) (xy 331.412461 157.898292) (xy 331.298578 157.8833) + (xy 331.298577 157.8833) (xy 331.013958 157.8833) (xy 330.994778 157.877668) (xy 330.974802 157.876955) + (xy 330.961941 157.868025) (xy 330.946919 157.863615) (xy 330.933829 157.848509) (xy 330.917408 157.837108) + (xy 330.903196 157.813156) (xy 330.901164 157.810811) (xy 330.899398 157.806755) (xy 330.884755 157.771406) + (xy 330.884753 157.771403) (xy 330.860266 157.712282) (xy 330.180118 157.032135) (xy 330.096503 156.9975) + (xy 329.227012 156.9975) (xy 329.159973 156.977815) (xy 329.114218 156.925011) (xy 329.104274 156.855853) + (xy 329.133299 156.792297) (xy 329.17956 156.758939) (xy 329.192631 156.753524) (xy 329.192641 156.75352) + (xy 329.441759 156.609691) (xy 329.669973 156.434577) (xy 329.873377 156.231173) (xy 330.048491 156.002959) + (xy 330.19232 155.753841) (xy 330.302402 155.48808) (xy 330.376853 155.210225) (xy 330.4144 154.925029) + (xy 330.4144 154.69655) (xy 332.2245 154.69655) (xy 332.2245 154.865849) (xy 332.250981 155.033047) + (xy 332.303296 155.194053) (xy 332.380152 155.344888) (xy 332.479648 155.481834) (xy 332.479652 155.481839) + (xy 332.59936 155.601547) (xy 332.599365 155.601551) (xy 332.718817 155.688337) (xy 332.736315 155.70105) + (xy 332.832425 155.75002) (xy 332.887146 155.777903) (xy 332.887148 155.777903) (xy 332.887151 155.777905) + (xy 332.97345 155.805945) (xy 333.048152 155.830218) (xy 333.215351 155.8567) (xy 333.215356 155.8567) + (xy 333.384649 155.8567) (xy 333.551847 155.830218) (xy 333.594777 155.816269) (xy 333.712849 155.777905) + (xy 333.863685 155.70105) (xy 334.000641 155.601546) (xy 334.120346 155.481841) (xy 334.21985 155.344885) + (xy 334.296705 155.194049) (xy 334.349018 155.033047) (xy 334.3755 154.865849) (xy 334.3755 154.69655) + (xy 334.349018 154.529352) (xy 334.304296 154.391713) (xy 334.296705 154.368351) (xy 334.296703 154.368348) + (xy 334.296703 154.368346) (xy 334.252676 154.28194) (xy 334.21985 154.217515) (xy 334.188281 154.174064) + (xy 334.120351 154.080565) (xy 334.120347 154.08056) (xy 334.000639 153.960852) (xy 334.000634 153.960848) + (xy 333.863688 153.861352) (xy 333.863687 153.861351) (xy 333.863685 153.86135) (xy 333.809831 153.83391) + (xy 333.712853 153.784496) (xy 333.551847 153.732181) (xy 333.384649 153.7057) (xy 333.384644 153.7057) + (xy 333.215356 153.7057) (xy 333.215351 153.7057) (xy 333.048152 153.732181) (xy 332.887146 153.784496) + (xy 332.736311 153.861352) (xy 332.599365 153.960848) (xy 332.59936 153.960852) (xy 332.479652 154.08056) + (xy 332.479648 154.080565) (xy 332.380152 154.217511) (xy 332.303296 154.368346) (xy 332.250981 154.529352) + (xy 332.2245 154.69655) (xy 330.4144 154.69655) (xy 330.4144 154.637371) (xy 330.376853 154.352175) + (xy 330.302402 154.07432) (xy 330.19232 153.808559) (xy 330.192318 153.808556) (xy 330.192316 153.808551) + (xy 330.048495 153.559448) (xy 330.048491 153.559441) (xy 329.944569 153.424007) (xy 329.873378 153.331228) + (xy 329.873372 153.331221) (xy 329.669978 153.127827) (xy 329.669971 153.127821) (xy 329.441767 152.952715) + (xy 329.441765 152.952713) (xy 329.441759 152.952709) (xy 329.441754 152.952706) (xy 329.441751 152.952704) + (xy 329.192648 152.808883) (xy 329.192631 152.808875) (xy 328.926878 152.698797) (xy 328.649023 152.624346) + (xy 328.363838 152.586801) (xy 328.363835 152.5868) (xy 328.363829 152.5868) (xy 328.076171 152.5868) + (xy 328.076165 152.5868) (xy 328.076161 152.586801) (xy 327.790976 152.624346) (xy 327.513121 152.698797) + (xy 327.247368 152.808875) (xy 327.247351 152.808883) (xy 326.998248 152.952704) (xy 326.998232 152.952715) + (xy 326.770028 153.127821) (xy 326.770021 153.127827) (xy 326.566627 153.331221) (xy 326.49543 153.424007) + (xy 326.439001 153.465209) (xy 326.369255 153.469364) (xy 326.308335 153.435151) (xy 326.275583 153.373434) + (xy 326.281396 153.303807) (xy 326.289661 153.286531) (xy 326.342863 153.194383) (xy 326.450742 152.933939) + (xy 326.523704 152.661642) (xy 326.5605 152.382151) (xy 326.5605 152.100249) (xy 326.523704 151.820758) + (xy 326.450742 151.548461) (xy 326.342863 151.288017) (xy 326.342861 151.288014) (xy 326.342859 151.288009) + (xy 326.201916 151.04389) (xy 326.201912 151.043883) (xy 326.0303 150.820235) (xy 326.030298 150.820233) + (xy 326.030295 150.820229) (xy 325.83097 150.620904) (xy 325.746889 150.556386) (xy 325.607317 150.449288) + (xy 325.607311 150.449284) (xy 325.607309 150.449283) (xy 325.36319 150.30834) (xy 325.363179 150.308335) + (xy 325.102743 150.200459) (xy 324.830439 150.127495) (xy 324.550958 150.0907) (xy 324.550951 150.0907) + (xy 324.269049 150.0907) (xy 324.269041 150.0907) (xy 323.98956 150.127495) (xy 323.717256 150.200459) + (xy 323.45682 150.308335) (xy 323.456809 150.30834) (xy 323.212692 150.449281) (xy 323.212683 150.449288) + (xy 323.192106 150.465076) (xy 323.126938 150.49027) (xy 323.116622 150.4907) (xy 319.784998 150.4907) + (xy 319.784981 150.490701) (xy 319.682203 150.5012) (xy 319.6822 150.501201) (xy 319.515668 150.556385) + (xy 319.515663 150.556387) (xy 319.366342 150.648489) (xy 319.242289 150.772542) (xy 319.150187 150.921863) + (xy 319.150185 150.921868) (xy 319.130249 150.982031) (xy 319.095001 151.088403) (xy 319.095001 151.088404) + (xy 319.095 151.088404) (xy 319.0845 151.191183) (xy 319.0845 153.291201) (xy 319.084501 153.291218) + (xy 319.095 153.393996) (xy 319.095001 153.393999) (xy 319.104945 153.424007) (xy 319.150186 153.560534) + (xy 319.242288 153.709856) (xy 319.366344 153.833912) (xy 319.515666 153.926014) (xy 319.682203 153.981199) + (xy 319.784991 153.9917) (xy 321.712118 153.991699) (xy 321.712127 153.9917) (xy 322.140851 153.991699) + (xy 322.207889 154.011383) (xy 322.253644 154.064187) (xy 322.263588 154.133346) (xy 322.241169 154.188583) + (xy 322.220151 154.217511) (xy 322.143296 154.368346) (xy 322.090981 154.529352) (xy 322.0645 154.69655) + (xy 322.0645 154.865849) (xy 322.090981 155.033047) (xy 322.143296 155.194053) (xy 322.220152 155.344888) + (xy 322.319648 155.481834) (xy 322.319652 155.481839) (xy 322.43936 155.601547) (xy 322.439365 155.601551) + (xy 322.558817 155.688337) (xy 322.576315 155.70105) (xy 322.672425 155.75002) (xy 322.727146 155.777903) + (xy 322.727148 155.777903) (xy 322.727151 155.777905) (xy 322.81345 155.805945) (xy 322.888152 155.830218) + (xy 323.055351 155.8567) (xy 323.055356 155.8567) (xy 323.224649 155.8567) (xy 323.391847 155.830218) + (xy 323.434777 155.816269) (xy 323.552849 155.777905) (xy 323.703685 155.70105) (xy 323.840641 155.601546) + (xy 323.960346 155.481841) (xy 324.05985 155.344885) (xy 324.136705 155.194049) (xy 324.189018 155.033047) + (xy 324.2155 154.865849) (xy 324.2155 154.69655) (xy 324.189928 154.535098) (xy 324.198882 154.465805) + (xy 324.243879 154.412353) (xy 324.31063 154.391713) (xy 324.312401 154.3917) (xy 324.550944 154.3917) + (xy 324.550951 154.3917) (xy 324.830442 154.354904) (xy 325.102739 154.281942) (xy 325.363183 154.174063) + (xy 325.607317 154.033112) (xy 325.830965 153.8615) (xy 326.0303 153.662165) (xy 326.097992 153.573946) + (xy 326.15442 153.532744) (xy 326.224166 153.528589) (xy 326.285086 153.562801) (xy 326.317839 153.624518) + (xy 326.312026 153.694146) (xy 326.303755 153.711433) (xy 326.247683 153.808551) (xy 326.247675 153.808568) + (xy 326.137597 154.074321) (xy 326.063146 154.352176) (xy 326.025601 154.637361) (xy 326.0256 154.637377) + (xy 326.0256 154.925022) (xy 326.025601 154.925038) (xy 326.063146 155.210223) (xy 326.137597 155.488078) + (xy 326.247675 155.753831) (xy 326.247683 155.753848) (xy 326.391504 156.002951) (xy 326.391515 156.002967) + (xy 326.566621 156.231171) (xy 326.566627 156.231178) (xy 326.770021 156.434572) (xy 326.770027 156.434577) + (xy 326.998241 156.609691) (xy 326.998248 156.609695) (xy 327.247351 156.753516) (xy 327.247356 156.753518) + (xy 327.247359 156.75352) (xy 327.247363 156.753521) (xy 327.247368 156.753524) (xy 327.26044 156.758939) + (xy 327.314844 156.80278) (xy 327.336909 156.869074) (xy 327.31963 156.936773) (xy 327.268493 156.984384) + (xy 327.212988 156.9975) (xy 310.205996 156.9975) (xy 310.122379 157.032136) (xy 305.593336 161.561181) + (xy 305.532013 161.594666) (xy 305.505655 161.5975) (xy 303.846179 161.5975) (xy 303.830196 161.592807) + (xy 303.813541 161.593128) (xy 303.797363 161.583166) (xy 303.77914 161.577815) (xy 303.768232 161.565227) + (xy 303.754047 161.556492) (xy 303.745823 161.539366) (xy 303.733385 161.525011) (xy 303.731014 161.508523) + (xy 303.723804 161.493507) (xy 303.726144 161.474656) (xy 303.723441 161.455853) (xy 303.730429 161.440152) + (xy 303.732414 161.42417) (xy 303.746166 161.404797) (xy 303.75092 161.394117) (xy 303.756119 161.387877) + (xy 303.793233 161.353627) (xy 303.870305 161.250856) (xy 303.872339 161.248416) (xy 303.89882 161.230667) + (xy 303.924365 161.21158) (xy 303.928378 161.210857) (xy 303.930379 161.209517) (xy 303.93648 161.209399) + (xy 303.967598 161.203799) (xy 304.2237 161.203799) (xy 304.7237 161.203799) (xy 304.779632 161.203799) + (xy 304.863624 161.19325) (xy 304.996457 161.138229) (xy 305.063304 161.0863) (xy 305.063311 161.086294) + (xy 305.531194 160.618412) (xy 305.531199 160.618406) (xy 305.583127 160.55156) (xy 305.586342 160.5438) + (xy 304.7237 160.5438) (xy 304.7237 161.203799) (xy 304.2237 161.203799) (xy 304.2237 160.4178) + (xy 304.243385 160.350761) (xy 304.296189 160.305006) (xy 304.3477 160.2938) (xy 304.4737 160.2938) + (xy 304.4737 160.1678) (xy 304.493385 160.100761) (xy 304.546189 160.055006) (xy 304.5977 160.0438) + (xy 305.6487 160.0438) (xy 305.6487 159.927653) (xy 305.63372 159.813869) (xy 305.633718 159.813864) + (xy 305.575078 159.672293) (xy 305.575075 159.672288) (xy 305.53472 159.619696) (xy 305.509526 159.554527) + (xy 305.523564 159.486082) (xy 305.534721 159.468723) (xy 305.53782 159.464685) (xy 305.575512 159.415563) + (xy 305.634207 159.273863) (xy 305.6492 159.159977) (xy 305.649199 158.427624) (xy 305.644443 158.391498) + (xy 305.634208 158.313745) (xy 305.634207 158.313737) (xy 305.575512 158.172037) (xy 305.482144 158.050356) + (xy 305.388775 157.978712) (xy 305.360462 157.956987) (xy 305.218763 157.898293) (xy 305.218761 157.898292) + (xy 305.104878 157.8833) (xy 305.104877 157.8833) (xy 304.8252 157.8833) (xy 304.822851 157.88261) + (xy 304.820479 157.88321) (xy 304.789495 157.872815) (xy 304.758161 157.863615) (xy 304.756559 157.861766) + (xy 304.754238 157.860988) (xy 304.733786 157.835485) (xy 304.712406 157.810811) (xy 304.711583 157.807798) + (xy 304.710526 157.80648) (xy 304.708698 157.797233) (xy 304.701879 157.772262) (xy 304.7012 157.765801) + (xy 304.7012 157.652197) (xy 304.69208 157.63018) (xy 304.685199 157.613568) (xy 304.685199 157.613565) + (xy 304.667375 157.570535) (xy 304.666566 157.568582) (xy 304.230118 157.132135) (xy 304.146503 157.0975) + (xy 302.807832 157.0975) (xy 302.740793 157.077815) (xy 302.695038 157.025011) (xy 302.685094 156.955853) + (xy 302.714119 156.892297) (xy 302.76038 156.858939) (xy 303.001636 156.759008) (xy 303.001639 156.759006) + (xy 303.001645 156.759004) (xy 303.251456 156.614775) (xy 303.480304 156.439174) (xy 303.684274 156.235204) + (xy 303.859875 156.006356) (xy 304.004104 155.756545) (xy 304.114491 155.490045) (xy 304.189149 155.211417) + (xy 304.2268 154.925428) (xy 304.2268 154.69655) (xy 306.0308 154.69655) (xy 306.0308 154.865849) + (xy 306.057281 155.033047) (xy 306.109596 155.194053) (xy 306.186452 155.344888) (xy 306.285948 155.481834) + (xy 306.285952 155.481839) (xy 306.40566 155.601547) (xy 306.405665 155.601551) (xy 306.525117 155.688337) + (xy 306.542615 155.70105) (xy 306.638725 155.75002) (xy 306.693446 155.777903) (xy 306.693448 155.777903) + (xy 306.693451 155.777905) (xy 306.77975 155.805945) (xy 306.854452 155.830218) (xy 307.021651 155.8567) + (xy 307.021656 155.8567) (xy 307.190949 155.8567) (xy 307.358147 155.830218) (xy 307.401077 155.816269) + (xy 307.519149 155.777905) (xy 307.669985 155.70105) (xy 307.806941 155.601546) (xy 307.926646 155.481841) + (xy 308.02615 155.344885) (xy 308.103005 155.194049) (xy 308.155318 155.033047) (xy 308.1818 154.865849) + (xy 308.1818 154.69655) (xy 308.155318 154.529352) (xy 308.110596 154.391713) (xy 308.103005 154.368351) + (xy 308.103003 154.368348) (xy 308.103003 154.368346) (xy 308.058976 154.28194) (xy 308.02615 154.217515) + (xy 307.994581 154.174064) (xy 307.926651 154.080565) (xy 307.926647 154.08056) (xy 307.806939 153.960852) + (xy 307.806934 153.960848) (xy 307.669988 153.861352) (xy 307.669987 153.861351) (xy 307.669985 153.86135) + (xy 307.616131 153.83391) (xy 307.519153 153.784496) (xy 307.358147 153.732181) (xy 307.190949 153.7057) + (xy 307.190944 153.7057) (xy 307.021656 153.7057) (xy 307.021651 153.7057) (xy 306.854452 153.732181) + (xy 306.693446 153.784496) (xy 306.542611 153.861352) (xy 306.405665 153.960848) (xy 306.40566 153.960852) + (xy 306.285952 154.08056) (xy 306.285948 154.080565) (xy 306.186452 154.217511) (xy 306.109596 154.368346) + (xy 306.057281 154.529352) (xy 306.0308 154.69655) (xy 304.2268 154.69655) (xy 304.2268 154.636972) + (xy 304.189149 154.350983) (xy 304.114491 154.072355) (xy 304.114486 154.072345) (xy 304.114485 154.072339) + (xy 304.004108 153.805863) (xy 304.0041 153.805847) (xy 303.859879 153.556051) (xy 303.859875 153.556044) + (xy 303.790175 153.465209) (xy 303.684275 153.327197) (xy 303.684269 153.32719) (xy 303.480309 153.12323) + (xy 303.480302 153.123224) (xy 303.251464 152.947631) (xy 303.251462 152.947629) (xy 303.251456 152.947625) + (xy 303.251451 152.947622) (xy 303.251448 152.94762) (xy 303.001652 152.803399) (xy 303.001636 152.803391) + (xy 302.73516 152.693014) (xy 302.735148 152.69301) (xy 302.735145 152.693009) (xy 302.456517 152.618351) + (xy 302.456511 152.61835) (xy 302.456506 152.618349) (xy 302.170538 152.580701) (xy 302.170533 152.5807) + (xy 302.170528 152.5807) (xy 301.882072 152.5807) (xy 301.882066 152.5807) (xy 301.882061 152.580701) + (xy 301.596093 152.618349) (xy 301.596086 152.61835) (xy 301.596083 152.618351) (xy 301.325087 152.690964) + (xy 301.317455 152.693009) (xy 301.317439 152.693014) (xy 301.050963 152.803391) (xy 301.050947 152.803399) + (xy 300.801151 152.94762) (xy 300.801134 152.947631) (xy 300.596891 153.104352) (xy 300.531722 153.129546) + (xy 300.463277 153.115507) (xy 300.413287 153.066693) (xy 300.397624 152.998602) (xy 300.401627 152.973894) + (xy 300.477438 152.690968) (xy 300.5168 152.391983) (xy 300.5168 152.090417) (xy 300.477438 151.791432) + (xy 300.399387 151.500142) (xy 300.396475 151.493113) (xy 300.325389 151.321495) (xy 300.283983 151.221532) + (xy 300.28384 151.221285) (xy 300.1332 150.960368) (xy 299.94962 150.721121) (xy 299.949614 150.721114) + (xy 299.736385 150.507885) (xy 299.736378 150.507879) (xy 299.497131 150.324299) (xy 299.235971 150.173518) + (xy 299.235961 150.173514) (xy 298.95736 150.058113) (xy 298.666066 149.980061) (xy 298.367093 149.940701) + (xy 298.367088 149.9407) (xy 298.367083 149.9407) (xy 298.065517 149.9407) (xy 298.065511 149.9407) + (xy 298.065506 149.940701) (xy 297.766533 149.980061) (xy 297.475239 150.058113) (xy 297.196638 150.173514) + (xy 297.196628 150.173518) (xy 296.935468 150.324299) (xy 296.752003 150.465076) (xy 296.686834 150.49027) + (xy 296.676517 150.4907) (xy 293.866298 150.4907) (xy 293.866281 150.490701) (xy 293.763503 150.5012) + (xy 293.7635 150.501201) (xy 293.596968 150.556385) (xy 293.596963 150.556387) (xy 293.447642 150.648489) + (xy 293.323589 150.772542) (xy 293.231487 150.921863) (xy 293.231485 150.921868) (xy 293.211549 150.982031) + (xy 293.176301 151.088403) (xy 293.176301 151.088404) (xy 293.1763 151.088404) (xy 293.1658 151.191183) + (xy 293.1658 153.291201) (xy 293.165801 153.291218) (xy 293.1763 153.393996) (xy 293.176301 153.393999) + (xy 293.186245 153.424007) (xy 293.231486 153.560534) (xy 293.323588 153.709856) (xy 293.447644 153.833912) + (xy 293.596966 153.926014) (xy 293.763503 153.981199) (xy 293.866291 153.9917) (xy 295.94715 153.991699) + (xy 296.014189 154.011384) (xy 296.059944 154.064187) (xy 296.069888 154.133346) (xy 296.047469 154.188583) + (xy 296.026451 154.217511) (xy 295.949596 154.368346) (xy 295.897281 154.529352) (xy 295.8708 154.69655) + (xy 295.8708 154.865849) (xy 295.897281 155.033047) (xy 295.949596 155.194053) (xy 296.026452 155.344888) + (xy 296.125948 155.481834) (xy 296.125952 155.481839) (xy 296.24566 155.601547) (xy 296.245665 155.601551) + (xy 296.365117 155.688337) (xy 296.382615 155.70105) (xy 296.478725 155.75002) (xy 296.533446 155.777903) + (xy 296.533448 155.777903) (xy 296.533451 155.777905) (xy 296.61975 155.805945) (xy 296.694452 155.830218) + (xy 296.861651 155.8567) (xy 296.861656 155.8567) (xy 297.030949 155.8567) (xy 297.198147 155.830218) + (xy 297.241077 155.816269) (xy 297.359149 155.777905) (xy 297.509985 155.70105) (xy 297.646941 155.601546) + (xy 297.766646 155.481841) (xy 297.86615 155.344885) (xy 297.943005 155.194049) (xy 297.995318 155.033047) + (xy 298.0218 154.865849) (xy 298.0218 154.69655) (xy 298.019986 154.685098) (xy 298.02894 154.615805) + (xy 298.073936 154.562353) (xy 298.140688 154.541713) (xy 298.142459 154.5417) (xy 298.367076 154.5417) + (xy 298.367083 154.5417) (xy 298.666068 154.502338) (xy 298.957358 154.424287) (xy 299.235968 154.308883) + (xy 299.497132 154.1581) (xy 299.733516 153.976716) (xy 299.798684 153.951523) (xy 299.867129 153.965561) + (xy 299.917118 154.014375) (xy 299.932782 154.082467) (xy 299.928776 154.107186) (xy 299.915134 154.1581) + (xy 299.881951 154.281942) (xy 299.863452 154.35098) (xy 299.863449 154.350993) (xy 299.825801 154.636961) + (xy 299.8258 154.636978) (xy 299.8258 154.925421) (xy 299.825801 154.925438) (xy 299.863449 155.211406) + (xy 299.86345 155.211411) (xy 299.863451 155.211417) (xy 299.938109 155.490044) (xy 299.938114 155.49006) + (xy 300.048491 155.756536) (xy 300.048499 155.756552) (xy 300.19272 156.006348) (xy 300.192731 156.006364) + (xy 300.368324 156.235202) (xy 300.36833 156.235209) (xy 300.57229 156.439169) (xy 300.572296 156.439174) + (xy 300.801144 156.614775) (xy 300.801151 156.614779) (xy 301.050947 156.759) (xy 301.050963 156.759008) + (xy 301.29222 156.858939) (xy 301.346624 156.90278) (xy 301.368689 156.969074) (xy 301.35141 157.036773) + (xy 301.300273 157.084384) (xy 301.244768 157.0975) (xy 297.216944 157.0975) (xy 297.139098 157.129745) + (xy 297.139099 157.129746) (xy 297.13333 157.132135) (xy 297.133329 157.132136) (xy 292.254286 162.011181) + (xy 292.192963 162.044666) (xy 292.166605 162.0475) (xy 274.196846 162.0475) (xy 274.129807 162.027815) + (xy 274.109165 162.011181) (xy 273.359364 161.26138) (xy 273.325879 161.200057) (xy 273.330863 161.130365) + (xy 273.372735 161.074432) (xy 273.438199 161.050015) (xy 273.447045 161.049699) (xy 273.587929 161.049699) + (xy 273.654968 161.069384) (xy 273.687132 161.099303) (xy 273.761938 161.199052) (xy 273.761939 161.199053) + (xy 273.76194 161.199054) (xy 273.896132 161.322895) (xy 274.050525 161.420397) (xy 274.169284 161.468003) + (xy 274.220014 161.488339) (xy 274.220015 161.488339) (xy 274.220017 161.48834) (xy 274.399008 161.524479) + (xy 274.399002 161.524479) (xy 274.415322 161.524759) (xy 274.581584 161.52762) (xy 274.761712 161.497658) + (xy 274.825346 161.474656) (xy 274.933436 161.435585) (xy 274.933437 161.435583) (xy 274.93344 161.435583) + (xy 274.948475 161.42682) (xy 274.955159 161.422935) (xy 274.95545 161.422857) (xy 274.983333 161.40656) + (xy 274.983451 161.406492) (xy 274.986668 161.405701) (xy 275.045762 161.389699) (xy 276.526892 161.389699) + (xy 276.527014 161.389706) (xy 276.535105 161.389705) (xy 276.535108 161.389706) (xy 276.567242 161.389702) + (xy 276.629804 161.406634) (xy 276.65763 161.422891) (xy 276.657632 161.422891) (xy 276.66378 161.426483) + (xy 276.665435 161.427308) (xy 276.679578 161.43555) (xy 276.8513 161.497621) (xy 277.031421 161.527582) + (xy 277.211098 161.52449) (xy 277.213991 161.524441) (xy 277.392966 161.488305) (xy 277.392969 161.488303) + (xy 277.392974 161.488303) (xy 277.56246 161.420362) (xy 277.716846 161.322863) (xy 277.731925 161.308948) + (xy 277.85103 161.19903) (xy 277.851032 161.199028) (xy 277.856345 161.191944) (xy 277.926196 161.098802) + (xy 277.982165 161.05698) (xy 278.025398 161.049199) (xy 278.2815 161.049199) (xy 278.7815 161.049199) + (xy 278.837432 161.049199) (xy 278.921424 161.03865) (xy 279.054257 160.983629) (xy 279.121104 160.9317) + (xy 279.121111 160.931694) (xy 279.588994 160.463812) (xy 279.588999 160.463806) (xy 279.640927 160.39696) + (xy 279.644142 160.3892) (xy 278.7815 160.3892) (xy 278.7815 161.049199) (xy 278.2815 161.049199) + (xy 278.2815 160.2632) (xy 278.301185 160.196161) (xy 278.353989 160.150406) (xy 278.4055 160.1392) + (xy 278.5315 160.1392) (xy 278.5315 160.0132) (xy 278.551185 159.946161) (xy 278.603989 159.900406) + (xy 278.6555 159.8892) (xy 279.7065 159.8892) (xy 279.7065 159.773053) (xy 279.69152 159.659269) + (xy 279.691518 159.659264) (xy 279.659012 159.580786) (xy 279.651543 159.511317) (xy 279.682818 159.448838) + (xy 279.742907 159.413186) (xy 279.749344 159.411724) (xy 279.834747 159.394737) (xy 279.980429 159.334394) + (xy 280.111539 159.246789) (xy 280.223039 159.135289) (xy 280.310644 159.004179) (xy 280.370987 158.858497) + (xy 280.40175 158.703842) (xy 280.40175 158.546158) (xy 280.40175 158.546155) (xy 280.401749 158.546153) + (xy 280.387518 158.474611) (xy 280.370987 158.391503) (xy 280.37024 158.3897) (xy 280.310647 158.245827) + (xy 280.31064 158.245814) (xy 280.223039 158.114711) (xy 280.223036 158.114707) (xy 280.111542 158.003213) + (xy 280.111538 158.00321) (xy 279.980435 157.915609) (xy 279.980422 157.915602) (xy 279.834751 157.855264) + (xy 279.834739 157.855261) (xy 279.680095 157.8245) (xy 279.680092 157.8245) (xy 279.522408 157.8245) + (xy 279.522398 157.8245) (xy 279.51768 157.825439) (xy 279.448089 157.819206) (xy 279.425356 157.806349) + (xy 279.425298 157.80645) (xy 279.41826 157.802386) (xy 279.276563 157.743693) (xy 279.276561 157.743692) + (xy 279.162678 157.7287) (xy 279.162677 157.7287) (xy 278.025073 157.7287) (xy 277.958034 157.709015) + (xy 277.925872 157.679098) (xy 277.851061 157.579344) (xy 277.716869 157.455504) (xy 277.716866 157.455502) + (xy 277.716865 157.455501) (xy 277.716862 157.455499) (xy 277.562477 157.358001) (xy 277.392987 157.290058) + (xy 277.392977 157.290056) (xy 277.213992 157.253918) (xy 277.213999 157.253918) (xy 277.042294 157.250965) + (xy 277.031418 157.250778) (xy 277.031417 157.250778) (xy 277.031414 157.250778) (xy 276.851297 157.280738) + (xy 276.851284 157.280741) (xy 276.679563 157.342813) (xy 276.665048 157.35127) (xy 276.664963 157.351319) + (xy 276.657876 157.35544) (xy 276.65763 157.355508) (xy 276.629838 157.371744) (xy 276.62959 157.371889) + (xy 276.626863 157.372559) (xy 276.567246 157.388696) (xy 276.526901 157.388693) (xy 276.526797 157.3887) + (xy 275.086096 157.3887) (xy 275.077914 157.388698) (xy 275.077892 157.388693) (xy 275.047965 157.388695) + (xy 275.045728 157.388695) (xy 275.045446 157.388612) (xy 274.983193 157.371762) (xy 274.955371 157.355508) + (xy 274.949305 157.351964) (xy 274.947607 157.351117) (xy 274.940257 157.346834) (xy 274.933421 157.34285) + (xy 274.761697 157.280778) (xy 274.761691 157.280777) (xy 274.581581 157.250819) (xy 274.581578 157.250819) + (xy 274.573039 157.250965) (xy 274.399007 157.253959) (xy 274.220034 157.290094) (xy 274.220023 157.290097) + (xy 274.050542 157.358037) (xy 274.050541 157.358037) (xy 273.896161 157.455532) (xy 273.896158 157.455534) + (xy 273.769757 157.572185) (xy 273.761969 157.579372) (xy 273.687728 157.678368) (xy 273.687181 157.679097) + (xy 273.631211 157.720919) (xy 273.587978 157.7287) (xy 272.450321 157.7287) (xy 272.336445 157.743691) + (xy 272.336437 157.743693) (xy 272.194737 157.802387) (xy 272.073056 157.895756) (xy 271.979687 158.017437) + (xy 271.920993 158.159136) (xy 271.920992 158.159138) (xy 271.906 158.273022) (xy 262.392622 158.273022) + (xy 262.360647 158.195827) (xy 262.36064 158.195814) (xy 262.273039 158.064711) (xy 262.273036 158.064707) + (xy 262.161542 157.953213) (xy 262.161538 157.95321) (xy 262.030435 157.865609) (xy 262.030422 157.865602) + (xy 261.884751 157.805264) (xy 261.884739 157.805261) (xy 261.730095 157.7745) (xy 261.730092 157.7745) + (xy 261.572408 157.7745) (xy 261.572405 157.7745) (xy 261.41776 157.805261) (xy 261.417748 157.805264) + (xy 261.272078 157.865602) (xy 261.272064 157.86561) (xy 261.255616 157.876601) (xy 261.188939 157.89748) + (xy 261.186724 157.8975) (xy 260.534209 157.8975) (xy 260.46717 157.877815) (xy 260.458723 157.871876) + (xy 260.368162 157.802387) (xy 260.226463 157.743693) (xy 260.226461 157.743692) (xy 260.112578 157.7287) + (xy 260.112577 157.7287) (xy 258.974973 157.7287) (xy 258.907934 157.709015) (xy 258.875772 157.679098) + (xy 258.800961 157.579344) (xy 258.666769 157.455504) (xy 258.666766 157.455502) (xy 258.666765 157.455501) + (xy 258.666762 157.455499) (xy 258.512377 157.358001) (xy 258.342887 157.290058) (xy 258.342877 157.290056) + (xy 258.163892 157.253918) (xy 258.163899 157.253918) (xy 257.992194 157.250965) (xy 257.981318 157.250778) + (xy 257.981317 157.250778) (xy 257.981314 157.250778) (xy 257.801197 157.280738) (xy 257.801184 157.280741) + (xy 257.629463 157.342813) (xy 257.614948 157.35127) (xy 257.614863 157.351319) (xy 257.607776 157.35544) + (xy 257.60753 157.355508) (xy 257.579738 157.371744) (xy 257.57949 157.371889) (xy 257.576763 157.372559) + (xy 257.517146 157.388696) (xy 257.476801 157.388693) (xy 257.476697 157.3887) (xy 256.035996 157.3887) + (xy 256.027814 157.388698) (xy 256.027792 157.388693) (xy 255.997865 157.388695) (xy 255.995628 157.388695) + (xy 255.995346 157.388612) (xy 255.933093 157.371762) (xy 255.905271 157.355508) (xy 255.899205 157.351964) + (xy 255.897507 157.351117) (xy 255.890157 157.346834) (xy 255.883321 157.34285) (xy 255.711597 157.280778) + (xy 255.711591 157.280777) (xy 255.531481 157.250819) (xy 255.531478 157.250819) (xy 255.522939 157.250965) + (xy 255.348907 157.253959) (xy 255.169934 157.290094) (xy 255.169923 157.290097) (xy 255.000442 157.358037) + (xy 255.000441 157.358037) (xy 254.846061 157.455532) (xy 254.846058 157.455534) (xy 254.719657 157.572185) + (xy 254.711869 157.579372) (xy 254.637628 157.678368) (xy 254.637081 157.679097) (xy 254.581111 157.720919) + (xy 254.537878 157.7287) (xy 253.400221 157.7287) (xy 253.286345 157.743691) (xy 253.286337 157.743693) + (xy 253.144637 157.802387) (xy 253.022956 157.895756) (xy 252.929587 158.017437) (xy 252.870893 158.159136) + (xy 252.870892 158.159138) (xy 252.8559 158.273022) (xy 241.323542 158.273022) (xy 241.281712 158.172037) + (xy 241.188344 158.050356) (xy 241.094975 157.978712) (xy 241.066662 157.956987) (xy 240.924963 157.898293) + (xy 240.924961 157.898292) (xy 240.811078 157.8833) (xy 240.811077 157.8833) (xy 240.432647 157.8833) + (xy 240.365608 157.863615) (xy 240.344966 157.846981) (xy 239.61434 157.116357) (xy 239.614339 157.116356) + (xy 239.530724 157.081721) (xy 238.536183 157.081721) (xy 238.469144 157.062036) (xy 238.423389 157.009232) + (xy 238.413445 156.940074) (xy 238.44247 156.876518) (xy 238.488731 156.84316) (xy 238.705141 156.75352) + (xy 238.954259 156.609691) (xy 239.182473 156.434577) (xy 239.385877 156.231173) (xy 239.560991 156.002959) + (xy 239.70482 155.753841) (xy 239.814902 155.48808) (xy 239.889353 155.210225) (xy 239.9269 154.925029) + (xy 239.9269 154.69655) (xy 241.737 154.69655) (xy 241.737 154.865849) (xy 241.763481 155.033047) + (xy 241.815796 155.194053) (xy 241.892652 155.344888) (xy 241.992148 155.481834) (xy 241.992152 155.481839) + (xy 242.11186 155.601547) (xy 242.111865 155.601551) (xy 242.231317 155.688337) (xy 242.248815 155.70105) + (xy 242.344925 155.75002) (xy 242.399646 155.777903) (xy 242.399648 155.777903) (xy 242.399651 155.777905) + (xy 242.48595 155.805945) (xy 242.560652 155.830218) (xy 242.727851 155.8567) (xy 242.727856 155.8567) + (xy 242.897149 155.8567) (xy 243.064347 155.830218) (xy 243.107277 155.816269) (xy 243.225349 155.777905) + (xy 243.376185 155.70105) (xy 243.513141 155.601546) (xy 243.632846 155.481841) (xy 243.73235 155.344885) + (xy 243.809205 155.194049) (xy 243.861518 155.033047) (xy 243.888 154.865849) (xy 243.888 154.69655) + (xy 243.861518 154.529352) (xy 243.816796 154.391713) (xy 243.809205 154.368351) (xy 243.809203 154.368348) + (xy 243.809203 154.368346) (xy 243.765176 154.28194) (xy 243.73235 154.217515) (xy 243.700781 154.174064) + (xy 243.632851 154.080565) (xy 243.632847 154.08056) (xy 243.513139 153.960852) (xy 243.513134 153.960848) + (xy 243.376188 153.861352) (xy 243.376187 153.861351) (xy 243.376185 153.86135) (xy 243.322331 153.83391) + (xy 243.225353 153.784496) (xy 243.064347 153.732181) (xy 242.897149 153.7057) (xy 242.897144 153.7057) + (xy 242.727856 153.7057) (xy 242.727851 153.7057) (xy 242.560652 153.732181) (xy 242.399646 153.784496) + (xy 242.248811 153.861352) (xy 242.111865 153.960848) (xy 242.11186 153.960852) (xy 241.992152 154.08056) + (xy 241.992148 154.080565) (xy 241.892652 154.217511) (xy 241.815796 154.368346) (xy 241.763481 154.529352) + (xy 241.737 154.69655) (xy 239.9269 154.69655) (xy 239.9269 154.637371) (xy 239.889353 154.352175) + (xy 239.814902 154.07432) (xy 239.70482 153.808559) (xy 239.704818 153.808556) (xy 239.704816 153.808551) + (xy 239.560995 153.559448) (xy 239.560991 153.559441) (xy 239.457069 153.424007) (xy 239.385878 153.331228) + (xy 239.385872 153.331221) (xy 239.182478 153.127827) (xy 239.182471 153.127821) (xy 238.954267 152.952715) + (xy 238.954265 152.952713) (xy 238.954259 152.952709) (xy 238.954254 152.952706) (xy 238.954251 152.952704) + (xy 238.705148 152.808883) (xy 238.705131 152.808875) (xy 238.439378 152.698797) (xy 238.161523 152.624346) + (xy 237.876338 152.586801) (xy 237.876335 152.5868) (xy 237.876329 152.5868) (xy 237.588671 152.5868) + (xy 237.588665 152.5868) (xy 237.588661 152.586801) (xy 237.303476 152.624346) (xy 237.025621 152.698797) + (xy 236.759868 152.808875) (xy 236.759851 152.808883) (xy 236.510748 152.952704) (xy 236.510732 152.952715) + (xy 236.282528 153.127821) (xy 236.282521 153.127827) (xy 236.079127 153.331221) (xy 236.00793 153.424007) + (xy 235.951501 153.465209) (xy 235.881755 153.469364) (xy 235.820835 153.435151) (xy 235.788083 153.373434) + (xy 235.793896 153.303807) (xy 235.802161 153.286531) (xy 235.855363 153.194383) (xy 235.963242 152.933939) + (xy 236.036204 152.661642) (xy 236.073 152.382151) (xy 236.073 152.100249) (xy 236.036204 151.820758) + (xy 235.963242 151.548461) (xy 235.855363 151.288017) (xy 235.855361 151.288014) (xy 235.855359 151.288009) + (xy 235.714416 151.04389) (xy 235.714412 151.043883) (xy 235.5428 150.820235) (xy 235.542798 150.820233) + (xy 235.542795 150.820229) (xy 235.34347 150.620904) (xy 235.259389 150.556386) (xy 235.119817 150.449288) + (xy 235.119811 150.449284) (xy 235.119809 150.449283) (xy 234.87569 150.30834) (xy 234.875679 150.308335) + (xy 234.615243 150.200459) (xy 234.342939 150.127495) (xy 234.063458 150.0907) (xy 234.063451 150.0907) + (xy 233.781549 150.0907) (xy 233.781541 150.0907) (xy 233.50206 150.127495) (xy 233.229756 150.200459) + (xy 232.96932 150.308335) (xy 232.969309 150.30834) (xy 232.725192 150.449281) (xy 232.725183 150.449288) + (xy 232.704606 150.465076) (xy 232.639438 150.49027) (xy 232.629122 150.4907) (xy 229.297498 150.4907) + (xy 229.297481 150.490701) (xy 229.194703 150.5012) (xy 229.1947 150.501201) (xy 229.028168 150.556385) + (xy 229.028163 150.556387) (xy 228.878842 150.648489) (xy 228.754789 150.772542) (xy 228.662687 150.921863) + (xy 228.662685 150.921868) (xy 228.642749 150.982031) (xy 228.607501 151.088403) (xy 228.607501 151.088404) + (xy 228.6075 151.088404) (xy 228.597 151.191183) (xy 228.597 153.291201) (xy 228.597001 153.291218) + (xy 228.6075 153.393996) (xy 228.607501 153.393999) (xy 228.617445 153.424007) (xy 228.662686 153.560534) + (xy 228.754788 153.709856) (xy 228.878844 153.833912) (xy 229.028166 153.926014) (xy 229.194703 153.981199) + (xy 229.297491 153.9917) (xy 231.224618 153.991699) (xy 231.224627 153.9917) (xy 231.653351 153.991699) + (xy 231.720389 154.011383) (xy 231.766144 154.064187) (xy 231.776088 154.133346) (xy 231.753669 154.188583) + (xy 231.732651 154.217511) (xy 231.655796 154.368346) (xy 231.603481 154.529352) (xy 231.577 154.69655) + (xy 231.577 154.865849) (xy 231.603481 155.033047) (xy 231.655796 155.194053) (xy 231.732652 155.344888) + (xy 231.832148 155.481834) (xy 231.832152 155.481839) (xy 231.95186 155.601547) (xy 231.951865 155.601551) + (xy 232.071317 155.688337) (xy 232.088815 155.70105) (xy 232.184925 155.75002) (xy 232.239646 155.777903) + (xy 232.239648 155.777903) (xy 232.239651 155.777905) (xy 232.32595 155.805945) (xy 232.400652 155.830218) + (xy 232.567851 155.8567) (xy 232.567856 155.8567) (xy 232.737149 155.8567) (xy 232.904347 155.830218) + (xy 232.947277 155.816269) (xy 233.065349 155.777905) (xy 233.216185 155.70105) (xy 233.353141 155.601546) + (xy 233.472846 155.481841) (xy 233.57235 155.344885) (xy 233.649205 155.194049) (xy 233.701518 155.033047) + (xy 233.728 154.865849) (xy 233.728 154.69655) (xy 233.702428 154.535098) (xy 233.711382 154.465805) + (xy 233.756379 154.412353) (xy 233.82313 154.391713) (xy 233.824901 154.3917) (xy 234.063444 154.3917) + (xy 234.063451 154.3917) (xy 234.342942 154.354904) (xy 234.615239 154.281942) (xy 234.875683 154.174063) + (xy 235.119817 154.033112) (xy 235.343465 153.8615) (xy 235.5428 153.662165) (xy 235.610492 153.573946) + (xy 235.66692 153.532744) (xy 235.736666 153.528589) (xy 235.797586 153.562801) (xy 235.830339 153.624518) + (xy 235.824526 153.694146) (xy 235.816255 153.711433) (xy 235.760183 153.808551) (xy 235.760175 153.808568) + (xy 235.650097 154.074321) (xy 235.575646 154.352176) (xy 235.538101 154.637361) (xy 235.5381 154.637377) + (xy 235.5381 154.925022) (xy 235.538101 154.925038) (xy 235.575646 155.210223) (xy 235.650097 155.488078) + (xy 235.760175 155.753831) (xy 235.760183 155.753848) (xy 235.904004 156.002951) (xy 235.904015 156.002967) + (xy 236.079121 156.231171) (xy 236.079127 156.231178) (xy 236.282521 156.434572) (xy 236.282527 156.434577) + (xy 236.510741 156.609691) (xy 236.510748 156.609695) (xy 236.759851 156.753516) (xy 236.759856 156.753518) + (xy 236.759859 156.75352) (xy 236.759863 156.753521) (xy 236.759868 156.753524) (xy 236.823432 156.779853) + (xy 236.974185 156.842297) (xy 236.976269 156.84316) (xy 237.030673 156.887001) (xy 237.052738 156.953295) + (xy 237.035459 157.020994) (xy 236.984322 157.068605) (xy 236.928817 157.081721) (xy 233.009424 157.081721) + (xy 233.008431 157.082133) (xy 233.008407 157.082143) (xy 232.925816 157.116352) (xy 232.925808 157.116357) + (xy 227.398818 162.643349) (xy 227.337495 162.676834) (xy 227.311137 162.679668) (xy 223.172645 162.679668) + (xy 223.105606 162.659983) (xy 223.059851 162.607179) (xy 223.049907 162.538021) (xy 223.058084 162.508215) + (xy 223.068737 162.482497) (xy 223.0995 162.327842) (xy 223.0995 162.170158) (xy 223.0995 162.170155) + (xy 223.099499 162.170153) (xy 223.085315 162.098846) (xy 223.068737 162.015503) (xy 223.066947 162.011181) + (xy 223.008397 161.869827) (xy 223.00839 161.869814) (xy 222.920789 161.738711) (xy 222.920786 161.738707) + (xy 222.809292 161.627213) (xy 222.809288 161.62721) (xy 222.678185 161.539609) (xy 222.678172 161.539602) + (xy 222.532501 161.479264) (xy 222.532489 161.479261) (xy 222.377845 161.4485) (xy 222.377842 161.4485) + (xy 222.220158 161.4485) (xy 222.220155 161.4485) (xy 222.06551 161.479261) (xy 222.065498 161.479264) + (xy 221.919827 161.539602) (xy 221.919814 161.539609) (xy 221.788711 161.62721) (xy 221.788707 161.627213) + (xy 221.677213 161.738707) (xy 221.67721 161.738711) (xy 221.589609 161.869814) (xy 221.589602 161.869827) + (xy 221.529264 162.015498) (xy 221.529261 162.01551) (xy 221.4985 162.170153) (xy 221.4985 162.327846) + (xy 221.529261 162.482489) (xy 221.529263 162.482497) (xy 221.537548 162.5025) (xy 221.539916 162.508215) + (xy 221.547385 162.577684) (xy 221.51611 162.640164) (xy 221.456021 162.675816) (xy 221.425355 162.679668) + (xy 216.997351 162.679668) (xy 216.930312 162.659983) (xy 216.90967 162.643349) (xy 215.943619 161.677298) + (xy 215.910134 161.615975) (xy 215.9073 161.589617) (xy 215.9073 161.328299) (xy 215.90985 161.319613) + (xy 215.908562 161.310652) (xy 215.91954 161.286611) (xy 215.926985 161.26126) (xy 215.933825 161.255332) + (xy 215.937587 161.247096) (xy 215.959821 161.232806) (xy 215.979789 161.215505) (xy 215.990303 161.213217) + (xy 215.996365 161.209322) (xy 216.0313 161.204299) (xy 216.186229 161.204299) (xy 216.253268 161.223984) + (xy 216.285432 161.253903) (xy 216.360238 161.353652) (xy 216.360239 161.353653) (xy 216.36024 161.353654) + (xy 216.494432 161.477495) (xy 216.648825 161.574997) (xy 216.776355 161.626119) (xy 216.818314 161.642939) + (xy 216.818315 161.642939) (xy 216.818317 161.64294) (xy 216.997308 161.679079) (xy 216.997302 161.679079) + (xy 217.013622 161.679359) (xy 217.179884 161.68222) (xy 217.360012 161.652258) (xy 217.415507 161.632198) + (xy 217.531736 161.590185) (xy 217.531737 161.590183) (xy 217.53174 161.590183) (xy 217.546775 161.58142) + (xy 217.553459 161.577535) (xy 217.55375 161.577457) (xy 217.581633 161.56116) (xy 217.581751 161.561092) + (xy 217.584968 161.560301) (xy 217.644062 161.544299) (xy 219.125192 161.544299) (xy 219.125314 161.544306) + (xy 219.133405 161.544305) (xy 219.133408 161.544306) (xy 219.165542 161.544302) (xy 219.228104 161.561234) + (xy 219.25593 161.577491) (xy 219.255932 161.577491) (xy 219.26208 161.581083) (xy 219.263735 161.581908) + (xy 219.277878 161.59015) (xy 219.4496 161.652221) (xy 219.629721 161.682182) (xy 219.809398 161.67909) + (xy 219.812291 161.679041) (xy 219.991266 161.642905) (xy 219.991269 161.642903) (xy 219.991274 161.642903) + (xy 220.16076 161.574962) (xy 220.315146 161.477463) (xy 220.335529 161.458653) (xy 220.44933 161.35363) + (xy 220.449332 161.353628) (xy 220.449333 161.353627) (xy 220.524496 161.253402) (xy 220.580465 161.21158) + (xy 220.623698 161.203799) (xy 220.8798 161.203799) (xy 221.3798 161.203799) (xy 221.435732 161.203799) + (xy 221.519724 161.19325) (xy 221.652557 161.138229) (xy 221.719404 161.0863) (xy 221.719411 161.086294) + (xy 222.187294 160.618412) (xy 222.187299 160.618406) (xy 222.239227 160.55156) (xy 222.242442 160.5438) + (xy 221.3798 160.5438) (xy 221.3798 161.203799) (xy 220.8798 161.203799) (xy 220.8798 160.4178) + (xy 220.899485 160.350761) (xy 220.952289 160.305006) (xy 221.0038 160.2938) (xy 221.1298 160.2938) + (xy 221.1298 160.1678) (xy 221.149485 160.100761) (xy 221.202289 160.055006) (xy 221.2538 160.0438) + (xy 222.3048 160.0438) (xy 222.3048 159.927653) (xy 222.28982 159.813869) (xy 222.289818 159.813864) + (xy 222.248783 159.714795) (xy 222.241314 159.645326) (xy 222.272589 159.582847) (xy 222.332678 159.547195) + (xy 222.402503 159.549689) (xy 222.413113 159.554252) (xy 222.413192 159.554063) (xy 222.52834 159.601758) + (xy 222.564503 159.616737) (xy 222.671786 159.638077) (xy 222.719153 159.647499) (xy 222.719156 159.6475) + (xy 222.719158 159.6475) (xy 222.876844 159.6475) (xy 222.876845 159.647499) (xy 223.031497 159.616737) + (xy 223.177179 159.556394) (xy 223.308289 159.468789) (xy 223.419789 159.357289) (xy 223.507394 159.226179) + (xy 223.514859 159.208158) (xy 223.534815 159.159978) (xy 223.567737 159.080497) (xy 223.5985 158.925842) + (xy 223.5985 158.768158) (xy 223.5985 158.768155) (xy 223.598499 158.768153) (xy 223.595327 158.752206) + (xy 223.567737 158.613503) (xy 223.552991 158.577902) (xy 223.507397 158.467827) (xy 223.50739 158.467814) + (xy 223.419789 158.336711) (xy 223.419786 158.336707) (xy 223.308292 158.225213) (xy 223.308288 158.22521) + (xy 223.177185 158.137609) (xy 223.177172 158.137602) (xy 223.031501 158.077264) (xy 223.031489 158.077261) + (xy 222.876845 158.0465) (xy 222.876842 158.0465) (xy 222.719158 158.0465) (xy 222.719155 158.0465) + (xy 222.56451 158.077261) (xy 222.564498 158.077264) (xy 222.418827 158.137602) (xy 222.418809 158.137612) + (xy 222.374163 158.167444) (xy 222.307486 158.188322) (xy 222.240106 158.169837) (xy 222.206897 158.139828) + (xy 222.205197 158.137612) (xy 222.138244 158.050356) (xy 222.044875 157.978712) (xy 222.016562 157.956987) + (xy 221.874863 157.898293) (xy 221.874861 157.898292) (xy 221.760978 157.8833) (xy 221.760977 157.8833) + (xy 220.623373 157.8833) (xy 220.556334 157.863615) (xy 220.524172 157.833698) (xy 220.449361 157.733944) + (xy 220.315169 157.610104) (xy 220.315166 157.610102) (xy 220.315165 157.610101) (xy 220.315162 157.610099) + (xy 220.160777 157.512601) (xy 219.991287 157.444658) (xy 219.991277 157.444656) (xy 219.812292 157.408518) + (xy 219.812299 157.408518) (xy 219.640594 157.405565) (xy 219.629718 157.405378) (xy 219.629717 157.405378) + (xy 219.629714 157.405378) (xy 219.449597 157.435338) (xy 219.449584 157.435341) (xy 219.277863 157.497413) + (xy 219.263348 157.50587) (xy 219.263263 157.505919) (xy 219.256176 157.51004) (xy 219.25593 157.510108) + (xy 219.228138 157.526344) (xy 219.22789 157.526489) (xy 219.225163 157.527159) (xy 219.165546 157.543296) + (xy 219.125201 157.543293) (xy 219.125097 157.5433) (xy 217.684396 157.5433) (xy 217.676214 157.543298) + (xy 217.676192 157.543293) (xy 217.646265 157.543295) (xy 217.644028 157.543295) (xy 217.643746 157.543212) + (xy 217.581493 157.526362) (xy 217.553671 157.510108) (xy 217.547605 157.506564) (xy 217.545907 157.505717) + (xy 217.538557 157.501434) (xy 217.531721 157.49745) (xy 217.359997 157.435378) (xy 217.359991 157.435377) + (xy 217.179881 157.405419) (xy 217.179878 157.405419) (xy 217.171339 157.405565) (xy 216.997307 157.408559) + (xy 216.818334 157.444694) (xy 216.818323 157.444697) (xy 216.648842 157.512637) (xy 216.648841 157.512637) + (xy 216.494461 157.610132) (xy 216.494458 157.610134) (xy 216.361385 157.732942) (xy 216.360269 157.733972) + (xy 216.300886 157.813156) (xy 216.285481 157.833697) (xy 216.229511 157.875519) (xy 216.186278 157.8833) + (xy 215.048621 157.8833) (xy 214.934745 157.898291) (xy 214.934737 157.898293) (xy 214.793037 157.956987) + (xy 214.671356 158.050356) (xy 214.577987 158.172037) (xy 214.519293 158.313736) (xy 214.519292 158.313738) + (xy 214.5043 158.427622) (xy 203.255299 158.427622) (xy 203.250543 158.391498) (xy 203.240308 158.313745) + (xy 203.240307 158.313737) (xy 203.181612 158.172037) (xy 203.088244 158.050356) (xy 202.994875 157.978712) + (xy 202.966562 157.956987) (xy 202.824863 157.898293) (xy 202.824861 157.898292) (xy 202.710978 157.8833) + (xy 202.710977 157.8833) (xy 202.4313 157.8833) (xy 202.364261 157.863615) (xy 202.318506 157.810811) + (xy 202.3073 157.7593) (xy 202.3073 157.570536) (xy 202.3073 157.570535) (xy 202.272665 157.48692) + (xy 202.208668 157.422923) (xy 202.023617 157.237872) (xy 201.767882 156.982136) (xy 201.766829 156.9817) + (xy 201.684265 156.9475) (xy 200.731932 156.9475) (xy 200.664893 156.927815) (xy 200.619138 156.875011) + (xy 200.609194 156.805853) (xy 200.638219 156.742297) (xy 200.669932 156.716113) (xy 200.827379 156.62521) + (xy 200.854259 156.609691) (xy 201.082473 156.434577) (xy 201.285877 156.231173) (xy 201.460991 156.002959) + (xy 201.60482 155.753841) (xy 201.714902 155.48808) (xy 201.789353 155.210225) (xy 201.8269 154.925029) + (xy 201.8269 154.69655) (xy 203.637 154.69655) (xy 203.637 154.865849) (xy 203.663481 155.033047) + (xy 203.715796 155.194053) (xy 203.792652 155.344888) (xy 203.892148 155.481834) (xy 203.892152 155.481839) + (xy 204.01186 155.601547) (xy 204.011865 155.601551) (xy 204.131317 155.688337) (xy 204.148815 155.70105) + (xy 204.244925 155.75002) (xy 204.299646 155.777903) (xy 204.299648 155.777903) (xy 204.299651 155.777905) + (xy 204.38595 155.805945) (xy 204.460652 155.830218) (xy 204.627851 155.8567) (xy 204.627856 155.8567) + (xy 204.797149 155.8567) (xy 204.964347 155.830218) (xy 205.007277 155.816269) (xy 205.125349 155.777905) + (xy 205.276185 155.70105) (xy 205.413141 155.601546) (xy 205.532846 155.481841) (xy 205.63235 155.344885) + (xy 205.709205 155.194049) (xy 205.761518 155.033047) (xy 205.788 154.865849) (xy 205.788 154.69655) + (xy 205.761518 154.529352) (xy 205.716796 154.391713) (xy 205.709205 154.368351) (xy 205.709203 154.368348) + (xy 205.709203 154.368346) (xy 205.665176 154.28194) (xy 205.63235 154.217515) (xy 205.600781 154.174064) + (xy 205.532851 154.080565) (xy 205.532847 154.08056) (xy 205.413139 153.960852) (xy 205.413134 153.960848) + (xy 205.276188 153.861352) (xy 205.276187 153.861351) (xy 205.276185 153.86135) (xy 205.222331 153.83391) + (xy 205.125353 153.784496) (xy 204.964347 153.732181) (xy 204.797149 153.7057) (xy 204.797144 153.7057) + (xy 204.627856 153.7057) (xy 204.627851 153.7057) (xy 204.460652 153.732181) (xy 204.299646 153.784496) + (xy 204.148811 153.861352) (xy 204.011865 153.960848) (xy 204.01186 153.960852) (xy 203.892152 154.08056) + (xy 203.892148 154.080565) (xy 203.792652 154.217511) (xy 203.715796 154.368346) (xy 203.663481 154.529352) + (xy 203.637 154.69655) (xy 201.8269 154.69655) (xy 201.8269 154.637371) (xy 201.789353 154.352175) + (xy 201.714902 154.07432) (xy 201.60482 153.808559) (xy 201.604818 153.808556) (xy 201.604816 153.808551) + (xy 201.460995 153.559448) (xy 201.460991 153.559441) (xy 201.357069 153.424007) (xy 201.285878 153.331228) + (xy 201.285872 153.331221) (xy 201.082478 153.127827) (xy 201.082471 153.127821) (xy 200.854267 152.952715) + (xy 200.854265 152.952713) (xy 200.854259 152.952709) (xy 200.854254 152.952706) (xy 200.854251 152.952704) + (xy 200.605148 152.808883) (xy 200.605131 152.808875) (xy 200.339378 152.698797) (xy 200.061523 152.624346) + (xy 199.776338 152.586801) (xy 199.776335 152.5868) (xy 199.776329 152.5868) (xy 199.488671 152.5868) + (xy 199.488665 152.5868) (xy 199.488661 152.586801) (xy 199.203476 152.624346) (xy 198.925621 152.698797) + (xy 198.659868 152.808875) (xy 198.659851 152.808883) (xy 198.410748 152.952704) (xy 198.410732 152.952715) + (xy 198.182528 153.127821) (xy 198.182521 153.127827) (xy 197.979127 153.331221) (xy 197.90793 153.424007) + (xy 197.851501 153.465209) (xy 197.781755 153.469364) (xy 197.720835 153.435151) (xy 197.688083 153.373434) + (xy 197.693896 153.303807) (xy 197.702161 153.286531) (xy 197.755363 153.194383) (xy 197.863242 152.933939) + (xy 197.936204 152.661642) (xy 197.973 152.382151) (xy 197.973 152.100249) (xy 197.936204 151.820758) + (xy 197.863242 151.548461) (xy 197.755363 151.288017) (xy 197.755361 151.288014) (xy 197.755359 151.288009) + (xy 197.614416 151.04389) (xy 197.614412 151.043883) (xy 197.4428 150.820235) (xy 197.442798 150.820233) + (xy 197.442795 150.820229) (xy 197.24347 150.620904) (xy 197.159389 150.556386) (xy 197.019817 150.449288) + (xy 197.019811 150.449284) (xy 197.019809 150.449283) (xy 196.77569 150.30834) (xy 196.775679 150.308335) + (xy 196.515243 150.200459) (xy 196.242939 150.127495) (xy 195.963458 150.0907) (xy 195.963451 150.0907) + (xy 195.681549 150.0907) (xy 195.681541 150.0907) (xy 195.40206 150.127495) (xy 195.129756 150.200459) + (xy 194.86932 150.308335) (xy 194.869309 150.30834) (xy 194.625192 150.449281) (xy 194.625183 150.449288) + (xy 194.604606 150.465076) (xy 194.539438 150.49027) (xy 194.529122 150.4907) (xy 191.197498 150.4907) + (xy 191.197481 150.490701) (xy 191.094703 150.5012) (xy 191.0947 150.501201) (xy 190.928168 150.556385) + (xy 190.928163 150.556387) (xy 190.778842 150.648489) (xy 190.654789 150.772542) (xy 190.562687 150.921863) + (xy 190.562685 150.921868) (xy 190.542749 150.982031) (xy 190.507501 151.088403) (xy 190.507501 151.088404) + (xy 190.5075 151.088404) (xy 190.497 151.191183) (xy 190.497 153.291201) (xy 190.497001 153.291218) + (xy 190.5075 153.393996) (xy 190.507501 153.393999) (xy 190.517445 153.424007) (xy 190.562686 153.560534) + (xy 190.654788 153.709856) (xy 190.778844 153.833912) (xy 190.928166 153.926014) (xy 191.094703 153.981199) + (xy 191.197491 153.9917) (xy 193.124618 153.991699) (xy 193.124627 153.9917) (xy 193.553351 153.991699) + (xy 193.620389 154.011383) (xy 193.666144 154.064187) (xy 193.676088 154.133346) (xy 193.653669 154.188583) + (xy 193.632651 154.217511) (xy 193.555796 154.368346) (xy 193.503481 154.529352) (xy 193.477 154.69655) + (xy 193.477 154.865849) (xy 193.503481 155.033047) (xy 193.555796 155.194053) (xy 193.632652 155.344888) + (xy 193.732148 155.481834) (xy 193.732152 155.481839) (xy 193.85186 155.601547) (xy 193.851865 155.601551) + (xy 193.971317 155.688337) (xy 193.988815 155.70105) (xy 194.084925 155.75002) (xy 194.139646 155.777903) + (xy 194.139648 155.777903) (xy 194.139651 155.777905) (xy 194.22595 155.805945) (xy 194.300652 155.830218) + (xy 194.467851 155.8567) (xy 194.467856 155.8567) (xy 194.637149 155.8567) (xy 194.804347 155.830218) + (xy 194.847277 155.816269) (xy 194.965349 155.777905) (xy 195.116185 155.70105) (xy 195.253141 155.601546) + (xy 195.372846 155.481841) (xy 195.47235 155.344885) (xy 195.549205 155.194049) (xy 195.601518 155.033047) + (xy 195.628 154.865849) (xy 195.628 154.69655) (xy 195.602428 154.535098) (xy 195.611382 154.465805) + (xy 195.656379 154.412353) (xy 195.72313 154.391713) (xy 195.724901 154.3917) (xy 195.963444 154.3917) + (xy 195.963451 154.3917) (xy 196.242942 154.354904) (xy 196.515239 154.281942) (xy 196.775683 154.174063) + (xy 197.019817 154.033112) (xy 197.243465 153.8615) (xy 197.4428 153.662165) (xy 197.510492 153.573946) + (xy 197.56692 153.532744) (xy 197.636666 153.528589) (xy 197.697586 153.562801) (xy 197.730339 153.624518) + (xy 197.724526 153.694146) (xy 197.716255 153.711433) (xy 197.660183 153.808551) (xy 197.660175 153.808568) + (xy 197.550097 154.074321) (xy 197.475646 154.352176) (xy 197.438101 154.637361) (xy 197.4381 154.637377) + (xy 197.4381 154.925022) (xy 197.438101 154.925038) (xy 197.475646 155.210223) (xy 197.550097 155.488078) + (xy 197.660175 155.753831) (xy 197.660183 155.753848) (xy 197.804004 156.002951) (xy 197.804015 156.002967) + (xy 197.979121 156.231171) (xy 197.979127 156.231178) (xy 198.182521 156.434572) (xy 198.182527 156.434577) + (xy 198.410741 156.609691) (xy 198.410748 156.609695) (xy 198.595068 156.716113) (xy 198.643284 156.76668) + (xy 198.656506 156.835287) (xy 198.630538 156.900152) (xy 198.573624 156.94068) (xy 198.533068 156.9475) + (xy 181.681932 156.9475) (xy 181.614893 156.927815) (xy 181.569138 156.875011) (xy 181.559194 156.805853) + (xy 181.588219 156.742297) (xy 181.619932 156.716113) (xy 181.777379 156.62521) (xy 181.804259 156.609691) + (xy 182.032473 156.434577) (xy 182.235877 156.231173) (xy 182.410991 156.002959) (xy 182.55482 155.753841) + (xy 182.664902 155.48808) (xy 182.739353 155.210225) (xy 182.7769 154.925029) (xy 182.7769 154.69655) + (xy 184.587 154.69655) (xy 184.587 154.865849) (xy 184.613481 155.033047) (xy 184.665796 155.194053) + (xy 184.742652 155.344888) (xy 184.842148 155.481834) (xy 184.842152 155.481839) (xy 184.96186 155.601547) + (xy 184.961865 155.601551) (xy 185.081317 155.688337) (xy 185.098815 155.70105) (xy 185.194925 155.75002) + (xy 185.249646 155.777903) (xy 185.249648 155.777903) (xy 185.249651 155.777905) (xy 185.33595 155.805945) + (xy 185.410652 155.830218) (xy 185.577851 155.8567) (xy 185.577856 155.8567) (xy 185.747149 155.8567) + (xy 185.914347 155.830218) (xy 185.957277 155.816269) (xy 186.075349 155.777905) (xy 186.226185 155.70105) + (xy 186.363141 155.601546) (xy 186.482846 155.481841) (xy 186.58235 155.344885) (xy 186.659205 155.194049) + (xy 186.711518 155.033047) (xy 186.738 154.865849) (xy 186.738 154.69655) (xy 186.711518 154.529352) + (xy 186.666796 154.391713) (xy 186.659205 154.368351) (xy 186.659203 154.368348) (xy 186.659203 154.368346) + (xy 186.615176 154.28194) (xy 186.58235 154.217515) (xy 186.550781 154.174064) (xy 186.482851 154.080565) + (xy 186.482847 154.08056) (xy 186.363139 153.960852) (xy 186.363134 153.960848) (xy 186.226188 153.861352) + (xy 186.226187 153.861351) (xy 186.226185 153.86135) (xy 186.172331 153.83391) (xy 186.075353 153.784496) + (xy 185.914347 153.732181) (xy 185.747149 153.7057) (xy 185.747144 153.7057) (xy 185.577856 153.7057) + (xy 185.577851 153.7057) (xy 185.410652 153.732181) (xy 185.249646 153.784496) (xy 185.098811 153.861352) + (xy 184.961865 153.960848) (xy 184.96186 153.960852) (xy 184.842152 154.08056) (xy 184.842148 154.080565) + (xy 184.742652 154.217511) (xy 184.665796 154.368346) (xy 184.613481 154.529352) (xy 184.587 154.69655) + (xy 182.7769 154.69655) (xy 182.7769 154.637371) (xy 182.739353 154.352175) (xy 182.664902 154.07432) + (xy 182.55482 153.808559) (xy 182.554818 153.808556) (xy 182.554816 153.808551) (xy 182.410995 153.559448) + (xy 182.410991 153.559441) (xy 182.307069 153.424007) (xy 182.235878 153.331228) (xy 182.235872 153.331221) + (xy 182.032478 153.127827) (xy 182.032471 153.127821) (xy 181.804267 152.952715) (xy 181.804265 152.952713) + (xy 181.804259 152.952709) (xy 181.804254 152.952706) (xy 181.804251 152.952704) (xy 181.555148 152.808883) + (xy 181.555131 152.808875) (xy 181.289378 152.698797) (xy 181.011523 152.624346) (xy 180.726338 152.586801) + (xy 180.726335 152.5868) (xy 180.726329 152.5868) (xy 180.438671 152.5868) (xy 180.438665 152.5868) + (xy 180.438661 152.586801) (xy 180.153476 152.624346) (xy 179.875621 152.698797) (xy 179.609868 152.808875) + (xy 179.609851 152.808883) (xy 179.360748 152.952704) (xy 179.360732 152.952715) (xy 179.132528 153.127821) + (xy 179.132521 153.127827) (xy 178.929127 153.331221) (xy 178.85793 153.424007) (xy 178.801501 153.465209) + (xy 178.731755 153.469364) (xy 178.670835 153.435151) (xy 178.638083 153.373434) (xy 178.643896 153.303807) + (xy 178.652161 153.286531) (xy 178.705363 153.194383) (xy 178.813242 152.933939) (xy 178.886204 152.661642) + (xy 178.923 152.382151) (xy 178.923 152.100249) (xy 178.886204 151.820758) (xy 178.813242 151.548461) + (xy 178.705363 151.288017) (xy 178.705361 151.288014) (xy 178.705359 151.288009) (xy 178.564416 151.04389) + (xy 178.564412 151.043883) (xy 178.3928 150.820235) (xy 178.392798 150.820233) (xy 178.392795 150.820229) + (xy 178.19347 150.620904) (xy 178.109389 150.556386) (xy 177.969817 150.449288) (xy 177.969811 150.449284) + (xy 177.969809 150.449283) (xy 177.72569 150.30834) (xy 177.725679 150.308335) (xy 177.465243 150.200459) + (xy 177.192939 150.127495) (xy 176.913458 150.0907) (xy 176.913451 150.0907) (xy 176.631549 150.0907) + (xy 176.631541 150.0907) (xy 176.35206 150.127495) (xy 176.079756 150.200459) (xy 175.81932 150.308335) + (xy 175.819309 150.30834) (xy 175.575192 150.449281) (xy 175.575183 150.449288) (xy 175.554606 150.465076) + (xy 175.489438 150.49027) (xy 175.479122 150.4907) (xy 172.147498 150.4907) (xy 172.147481 150.490701) + (xy 172.044703 150.5012) (xy 172.0447 150.501201) (xy 171.878168 150.556385) (xy 171.878163 150.556387) + (xy 171.728842 150.648489) (xy 171.604789 150.772542) (xy 171.512687 150.921863) (xy 171.512685 150.921868) + (xy 171.492749 150.982031) (xy 171.457501 151.088403) (xy 171.457501 151.088404) (xy 171.4575 151.088404) + (xy 171.447 151.191183) (xy 171.447 153.291201) (xy 171.447001 153.291218) (xy 171.4575 153.393996) + (xy 171.457501 153.393999) (xy 171.467445 153.424007) (xy 171.512686 153.560534) (xy 171.604788 153.709856) + (xy 171.728844 153.833912) (xy 171.878166 153.926014) (xy 172.044703 153.981199) (xy 172.147491 153.9917) + (xy 174.074618 153.991699) (xy 174.074627 153.9917) (xy 174.503351 153.991699) (xy 174.570389 154.011383) + (xy 174.616144 154.064187) (xy 174.626088 154.133346) (xy 174.603669 154.188583) (xy 174.582651 154.217511) + (xy 174.505796 154.368346) (xy 174.453481 154.529352) (xy 174.427 154.69655) (xy 174.427 154.865849) + (xy 174.453481 155.033047) (xy 174.505796 155.194053) (xy 174.582652 155.344888) (xy 174.682148 155.481834) + (xy 174.682152 155.481839) (xy 174.80186 155.601547) (xy 174.801865 155.601551) (xy 174.921317 155.688337) + (xy 174.938815 155.70105) (xy 175.034925 155.75002) (xy 175.089646 155.777903) (xy 175.089648 155.777903) + (xy 175.089651 155.777905) (xy 175.17595 155.805945) (xy 175.250652 155.830218) (xy 175.417851 155.8567) + (xy 175.417856 155.8567) (xy 175.587149 155.8567) (xy 175.754347 155.830218) (xy 175.797277 155.816269) + (xy 175.915349 155.777905) (xy 176.066185 155.70105) (xy 176.203141 155.601546) (xy 176.322846 155.481841) + (xy 176.42235 155.344885) (xy 176.499205 155.194049) (xy 176.551518 155.033047) (xy 176.578 154.865849) + (xy 176.578 154.69655) (xy 176.552428 154.535098) (xy 176.561382 154.465805) (xy 176.606379 154.412353) + (xy 176.67313 154.391713) (xy 176.674901 154.3917) (xy 176.913444 154.3917) (xy 176.913451 154.3917) + (xy 177.192942 154.354904) (xy 177.465239 154.281942) (xy 177.725683 154.174063) (xy 177.969817 154.033112) + (xy 178.193465 153.8615) (xy 178.3928 153.662165) (xy 178.460492 153.573946) (xy 178.51692 153.532744) + (xy 178.586666 153.528589) (xy 178.647586 153.562801) (xy 178.680339 153.624518) (xy 178.674526 153.694146) + (xy 178.666255 153.711433) (xy 178.610183 153.808551) (xy 178.610175 153.808568) (xy 178.500097 154.074321) + (xy 178.425646 154.352176) (xy 178.388101 154.637361) (xy 178.3881 154.637377) (xy 178.3881 154.925022) + (xy 178.388101 154.925038) (xy 178.425646 155.210223) (xy 178.500097 155.488078) (xy 178.610175 155.753831) + (xy 178.610183 155.753848) (xy 178.754004 156.002951) (xy 178.754015 156.002967) (xy 178.929121 156.231171) + (xy 178.929127 156.231178) (xy 179.132521 156.434572) (xy 179.132527 156.434577) (xy 179.360741 156.609691) + (xy 179.360748 156.609695) (xy 179.545068 156.716113) (xy 179.593284 156.76668) (xy 179.606506 156.835287) + (xy 179.580538 156.900152) (xy 179.523624 156.94068) (xy 179.483068 156.9475) (xy 178.181044 156.9475) + (xy 178.11321 156.975598) (xy 178.113211 156.975599) (xy 178.097431 156.982135) (xy 178.09743 156.982136) + (xy 177.429319 157.650248) (xy 176.761432 158.318135) (xy 176.697435 158.382132) (xy 176.686522 158.408478) + (xy 176.673095 158.440894) (xy 176.6628 158.465747) (xy 176.6628 159.369947) (xy 176.6628 159.460453) + (xy 176.694608 159.537244) (xy 176.697436 159.54407) (xy 176.813629 159.660263) (xy 176.847114 159.721586) + (xy 176.84213 159.791278) (xy 176.82433 159.823422) (xy 176.821788 159.826734) (xy 176.763093 159.968436) + (xy 176.763092 159.968438) (xy 176.7481 160.082322) (xy 176.7481 160.814678) (xy 176.763091 160.928554) + (xy 176.763092 160.92856) (xy 176.763093 160.928563) (xy 176.773546 160.953798) (xy 176.821787 161.070262) + (xy 176.821788 161.070263) (xy 176.915156 161.191944) (xy 177.036837 161.285312) (xy 177.178537 161.344007) + (xy 177.292423 161.359) (xy 178.430029 161.358999) (xy 178.497068 161.378684) (xy 178.529232 161.408603) + (xy 178.604038 161.508352) (xy 178.604039 161.508353) (xy 178.60404 161.508354) (xy 178.738232 161.632195) + (xy 178.892625 161.729697) (xy 179.023485 161.782154) (xy 179.062114 161.797639) (xy 179.062115 161.797639) + (xy 179.062117 161.79764) (xy 179.241108 161.833779) (xy 179.241102 161.833779) (xy 179.257422 161.834059) + (xy 179.423684 161.83692) (xy 179.603812 161.806958) (xy 179.660414 161.786498) (xy 179.775536 161.744885) + (xy 179.775537 161.744883) (xy 179.77554 161.744883) (xy 179.790575 161.73612) (xy 179.797259 161.732235) + (xy 179.79755 161.732157) (xy 179.825433 161.71586) (xy 179.825551 161.715792) (xy 179.828768 161.715001) + (xy 179.887862 161.698999) (xy 181.368992 161.698999) (xy 181.369114 161.699006) (xy 181.377205 161.699005) + (xy 181.377208 161.699006) (xy 181.409342 161.699002) (xy 181.471904 161.715934) (xy 181.49973 161.732191) + (xy 181.499732 161.732191) (xy 181.50588 161.735783) (xy 181.507535 161.736608) (xy 181.521678 161.74485) + (xy 181.6934 161.806921) (xy 181.873521 161.836882) (xy 182.053198 161.83379) (xy 182.056091 161.833741) + (xy 182.235066 161.797605) (xy 182.235069 161.797603) (xy 182.235074 161.797603) (xy 182.40456 161.729662) + (xy 182.558946 161.632163) (xy 182.565496 161.626119) (xy 182.69313 161.50833) (xy 182.693132 161.508328) + (xy 182.695028 161.5058) (xy 182.768296 161.408102) (xy 182.824265 161.36628) (xy 182.867498 161.358499) + (xy 183.1236 161.358499) (xy 183.6236 161.358499) (xy 183.679532 161.358499) (xy 183.763524 161.34795) + (xy 183.896357 161.292929) (xy 183.963204 161.241) (xy 183.963211 161.240994) (xy 184.431094 160.773112) + (xy 184.431099 160.773106) (xy 184.483027 160.70626) (xy 184.486242 160.6985) (xy 183.6236 160.6985) + (xy 183.6236 161.358499) (xy 183.1236 161.358499) (xy 183.1236 160.5725) (xy 183.143285 160.505461) + (xy 183.196089 160.459706) (xy 183.2476 160.4485) (xy 183.3736 160.4485) (xy 183.3736 160.3225) + (xy 183.393285 160.255461) (xy 183.446089 160.209706) (xy 183.4976 160.1985) (xy 184.5486 160.1985) + (xy 184.5486 160.082353) (xy 184.53362 159.968569) (xy 184.533618 159.968564) (xy 184.474978 159.826993) + (xy 184.474975 159.826988) (xy 184.43462 159.774396) (xy 184.409426 159.709227) (xy 184.423464 159.640782) + (xy 184.434621 159.623423) (xy 184.437797 159.619285) (xy 184.475412 159.570263) (xy 184.534107 159.428563) + (xy 184.544796 159.347368) (xy 184.57306 159.283474) (xy 184.631384 159.245002) (xy 184.701249 159.24417) + (xy 184.755415 159.275874) (xy 185.081299 159.601758) (xy 185.114784 159.663081) (xy 185.117618 159.689439) + (xy 185.117618 161.184188) (xy 185.097933 161.251227) (xy 185.081299 161.271869) (xy 183.501265 162.851903) + (xy 183.439942 162.885388) (xy 183.413584 162.888222) (xy 160.887567 162.888222) (xy 160.820528 162.868537) + (xy 160.799886 162.851903) (xy 159.968779 162.020796) (xy 159.935294 161.959473) (xy 159.940278 161.889781) + (xy 159.98215 161.833848) (xy 160.047614 161.809431) (xy 160.080999 161.811567) (xy 160.191008 161.833779) + (xy 160.191002 161.833779) (xy 160.207322 161.834059) (xy 160.373584 161.83692) (xy 160.553712 161.806958) + (xy 160.610314 161.786498) (xy 160.725436 161.744885) (xy 160.725437 161.744883) (xy 160.72544 161.744883) + (xy 160.740475 161.73612) (xy 160.747159 161.732235) (xy 160.74745 161.732157) (xy 160.775333 161.71586) + (xy 160.775451 161.715792) (xy 160.778668 161.715001) (xy 160.837762 161.698999) (xy 162.318892 161.698999) + (xy 162.319014 161.699006) (xy 162.327105 161.699005) (xy 162.327108 161.699006) (xy 162.359242 161.699002) + (xy 162.421804 161.715934) (xy 162.44963 161.732191) (xy 162.449632 161.732191) (xy 162.45578 161.735783) + (xy 162.457435 161.736608) (xy 162.471578 161.74485) (xy 162.6433 161.806921) (xy 162.823421 161.836882) + (xy 163.003098 161.83379) (xy 163.005991 161.833741) (xy 163.184966 161.797605) (xy 163.184969 161.797603) + (xy 163.184974 161.797603) (xy 163.35446 161.729662) (xy 163.508846 161.632163) (xy 163.515396 161.626119) + (xy 163.64303 161.50833) (xy 163.643032 161.508328) (xy 163.644928 161.5058) (xy 163.718196 161.408102) + (xy 163.774165 161.36628) (xy 163.817398 161.358499) (xy 164.0735 161.358499) (xy 164.5735 161.358499) + (xy 164.629432 161.358499) (xy 164.713424 161.34795) (xy 164.846257 161.292929) (xy 164.913104 161.241) + (xy 164.913111 161.240994) (xy 165.380994 160.773112) (xy 165.380999 160.773106) (xy 165.432927 160.70626) + (xy 165.436142 160.6985) (xy 164.5735 160.6985) (xy 164.5735 161.358499) (xy 164.0735 161.358499) + (xy 164.0735 160.5725) (xy 164.093185 160.505461) (xy 164.145989 160.459706) (xy 164.1975 160.4485) + (xy 164.3235 160.4485) (xy 164.3235 160.3225) (xy 164.343185 160.255461) (xy 164.395989 160.209706) + (xy 164.4475 160.1985) (xy 165.4985 160.1985) (xy 165.4985 160.082353) (xy 165.48352 159.968569) + (xy 165.483518 159.968564) (xy 165.424878 159.826993) (xy 165.424875 159.826988) (xy 165.38452 159.774396) + (xy 165.359326 159.709227) (xy 165.373364 159.640782) (xy 165.384521 159.623423) (xy 165.387697 159.619285) + (xy 165.425312 159.570263) (xy 165.484007 159.428563) (xy 165.499 159.314677) (xy 165.498999 158.582324) + (xy 165.498378 158.577609) (xy 165.484008 158.468445) (xy 165.484007 158.468437) (xy 165.425312 158.326737) + (xy 165.331944 158.205056) (xy 165.214203 158.114711) (xy 165.210262 158.111687) (xy 165.068563 158.052993) + (xy 165.068561 158.052992) (xy 164.954678 158.038) (xy 164.954677 158.038) (xy 164.630231 158.038) + (xy 164.563192 158.018315) (xy 164.523801 157.972856) (xy 164.523153 157.97329) (xy 164.5197 157.968122) + (xy 164.517437 157.965511) (xy 164.516467 157.963285) (xy 164.516365 157.963132) (xy 164.264182 157.710949) + (xy 164.26418 157.710946) (xy 163.896083 157.34285) (xy 163.535368 156.982135) (xy 163.451753 156.9475) + (xy 162.631932 156.9475) (xy 162.564893 156.927815) (xy 162.519138 156.875011) (xy 162.509194 156.805853) + (xy 162.538219 156.742297) (xy 162.569932 156.716113) (xy 162.727379 156.62521) (xy 162.754259 156.609691) + (xy 162.982473 156.434577) (xy 163.185877 156.231173) (xy 163.360991 156.002959) (xy 163.50482 155.753841) + (xy 163.614902 155.48808) (xy 163.689353 155.210225) (xy 163.7269 154.925029) (xy 163.7269 154.69655) + (xy 165.537 154.69655) (xy 165.537 154.865849) (xy 165.563481 155.033047) (xy 165.615796 155.194053) + (xy 165.692652 155.344888) (xy 165.792148 155.481834) (xy 165.792152 155.481839) (xy 165.91186 155.601547) + (xy 165.911865 155.601551) (xy 166.031317 155.688337) (xy 166.048815 155.70105) (xy 166.144925 155.75002) + (xy 166.199646 155.777903) (xy 166.199648 155.777903) (xy 166.199651 155.777905) (xy 166.28595 155.805945) + (xy 166.360652 155.830218) (xy 166.527851 155.8567) (xy 166.527856 155.8567) (xy 166.697149 155.8567) + (xy 166.864347 155.830218) (xy 166.907277 155.816269) (xy 167.025349 155.777905) (xy 167.176185 155.70105) + (xy 167.313141 155.601546) (xy 167.432846 155.481841) (xy 167.53235 155.344885) (xy 167.609205 155.194049) + (xy 167.661518 155.033047) (xy 167.688 154.865849) (xy 167.688 154.69655) (xy 167.661518 154.529352) + (xy 167.616796 154.391713) (xy 167.609205 154.368351) (xy 167.609203 154.368348) (xy 167.609203 154.368346) + (xy 167.565176 154.28194) (xy 167.53235 154.217515) (xy 167.500781 154.174064) (xy 167.432851 154.080565) + (xy 167.432847 154.08056) (xy 167.313139 153.960852) (xy 167.313134 153.960848) (xy 167.176188 153.861352) + (xy 167.176187 153.861351) (xy 167.176185 153.86135) (xy 167.122331 153.83391) (xy 167.025353 153.784496) + (xy 166.864347 153.732181) (xy 166.697149 153.7057) (xy 166.697144 153.7057) (xy 166.527856 153.7057) + (xy 166.527851 153.7057) (xy 166.360652 153.732181) (xy 166.199646 153.784496) (xy 166.048811 153.861352) + (xy 165.911865 153.960848) (xy 165.91186 153.960852) (xy 165.792152 154.08056) (xy 165.792148 154.080565) + (xy 165.692652 154.217511) (xy 165.615796 154.368346) (xy 165.563481 154.529352) (xy 165.537 154.69655) + (xy 163.7269 154.69655) (xy 163.7269 154.637371) (xy 163.689353 154.352175) (xy 163.614902 154.07432) + (xy 163.50482 153.808559) (xy 163.504818 153.808556) (xy 163.504816 153.808551) (xy 163.360995 153.559448) + (xy 163.360991 153.559441) (xy 163.257069 153.424007) (xy 163.185878 153.331228) (xy 163.185872 153.331221) + (xy 162.982478 153.127827) (xy 162.982471 153.127821) (xy 162.754267 152.952715) (xy 162.754265 152.952713) + (xy 162.754259 152.952709) (xy 162.754254 152.952706) (xy 162.754251 152.952704) (xy 162.505148 152.808883) + (xy 162.505131 152.808875) (xy 162.239378 152.698797) (xy 161.961523 152.624346) (xy 161.676338 152.586801) + (xy 161.676335 152.5868) (xy 161.676329 152.5868) (xy 161.388671 152.5868) (xy 161.388665 152.5868) + (xy 161.388661 152.586801) (xy 161.103476 152.624346) (xy 160.825621 152.698797) (xy 160.559868 152.808875) + (xy 160.559851 152.808883) (xy 160.310748 152.952704) (xy 160.310732 152.952715) (xy 160.082528 153.127821) + (xy 160.082521 153.127827) (xy 159.879127 153.331221) (xy 159.80793 153.424007) (xy 159.751501 153.465209) + (xy 159.681755 153.469364) (xy 159.620835 153.435151) (xy 159.588083 153.373434) (xy 159.593896 153.303807) + (xy 159.602161 153.286531) (xy 159.655363 153.194383) (xy 159.763242 152.933939) (xy 159.836204 152.661642) + (xy 159.873 152.382151) (xy 159.873 152.100249) (xy 159.836204 151.820758) (xy 159.763242 151.548461) + (xy 159.655363 151.288017) (xy 159.655361 151.288014) (xy 159.655359 151.288009) (xy 159.514416 151.04389) + (xy 159.514412 151.043883) (xy 159.3428 150.820235) (xy 159.342798 150.820233) (xy 159.342795 150.820229) + (xy 159.14347 150.620904) (xy 159.059389 150.556386) (xy 158.919817 150.449288) (xy 158.919811 150.449284) + (xy 158.919809 150.449283) (xy 158.67569 150.30834) (xy 158.675679 150.308335) (xy 158.415243 150.200459) + (xy 158.142939 150.127495) (xy 157.863458 150.0907) (xy 157.863451 150.0907) (xy 157.581549 150.0907) + (xy 157.581541 150.0907) (xy 157.30206 150.127495) (xy 157.029756 150.200459) (xy 156.76932 150.308335) + (xy 156.769309 150.30834) (xy 156.525192 150.449281) (xy 156.525183 150.449288) (xy 156.504606 150.465076) + (xy 156.439438 150.49027) (xy 156.429122 150.4907) (xy 153.097498 150.4907) (xy 153.097481 150.490701) + (xy 152.994703 150.5012) (xy 152.9947 150.501201) (xy 152.828168 150.556385) (xy 152.828163 150.556387) + (xy 152.678842 150.648489) (xy 152.554789 150.772542) (xy 152.462687 150.921863) (xy 152.462685 150.921868) + (xy 152.442749 150.982031) (xy 152.407501 151.088403) (xy 152.407501 151.088404) (xy 152.4075 151.088404) + (xy 152.397 151.191183) (xy 152.397 153.291201) (xy 152.397001 153.291218) (xy 152.4075 153.393996) + (xy 152.407501 153.393999) (xy 152.417445 153.424007) (xy 152.462686 153.560534) (xy 152.554788 153.709856) + (xy 152.678844 153.833912) (xy 152.828166 153.926014) (xy 152.994703 153.981199) (xy 153.097491 153.9917) + (xy 155.024618 153.991699) (xy 155.024627 153.9917) (xy 155.453351 153.991699) (xy 155.520389 154.011383) + (xy 155.566144 154.064187) (xy 155.576088 154.133346) (xy 155.553669 154.188583) (xy 155.532651 154.217511) + (xy 155.455796 154.368346) (xy 155.403481 154.529352) (xy 155.377 154.69655) (xy 155.377 154.865849) + (xy 155.403481 155.033047) (xy 155.455796 155.194053) (xy 155.532652 155.344888) (xy 155.632148 155.481834) + (xy 155.632152 155.481839) (xy 155.75186 155.601547) (xy 155.751865 155.601551) (xy 155.871317 155.688337) + (xy 155.888815 155.70105) (xy 155.984925 155.75002) (xy 156.039646 155.777903) (xy 156.039648 155.777903) + (xy 156.039651 155.777905) (xy 156.12595 155.805945) (xy 156.200652 155.830218) (xy 156.367851 155.8567) + (xy 156.367856 155.8567) (xy 156.537149 155.8567) (xy 156.704347 155.830218) (xy 156.747277 155.816269) + (xy 156.865349 155.777905) (xy 157.016185 155.70105) (xy 157.153141 155.601546) (xy 157.272846 155.481841) + (xy 157.37235 155.344885) (xy 157.449205 155.194049) (xy 157.501518 155.033047) (xy 157.528 154.865849) + (xy 157.528 154.69655) (xy 157.502428 154.535098) (xy 157.511382 154.465805) (xy 157.556379 154.412353) + (xy 157.62313 154.391713) (xy 157.624901 154.3917) (xy 157.863444 154.3917) (xy 157.863451 154.3917) + (xy 158.142942 154.354904) (xy 158.415239 154.281942) (xy 158.675683 154.174063) (xy 158.919817 154.033112) + (xy 159.143465 153.8615) (xy 159.3428 153.662165) (xy 159.410492 153.573946) (xy 159.46692 153.532744) + (xy 159.536666 153.528589) (xy 159.597586 153.562801) (xy 159.630339 153.624518) (xy 159.624526 153.694146) + (xy 159.616255 153.711433) (xy 159.560183 153.808551) (xy 159.560175 153.808568) (xy 159.450097 154.074321) + (xy 159.375646 154.352176) (xy 159.338101 154.637361) (xy 159.3381 154.637377) (xy 159.3381 154.925022) + (xy 159.338101 154.925038) (xy 159.375646 155.210223) (xy 159.450097 155.488078) (xy 159.560175 155.753831) + (xy 159.560183 155.753848) (xy 159.704004 156.002951) (xy 159.704015 156.002967) (xy 159.879121 156.231171) + (xy 159.879127 156.231178) (xy 160.082521 156.434572) (xy 160.082527 156.434577) (xy 160.310741 156.609691) + (xy 160.310748 156.609695) (xy 160.495068 156.716113) (xy 160.543284 156.76668) (xy 160.556506 156.835287) + (xy 160.530538 156.900152) (xy 160.473624 156.94068) (xy 160.433068 156.9475) (xy 143.581932 156.9475) + (xy 143.514893 156.927815) (xy 143.469138 156.875011) (xy 143.459194 156.805853) (xy 143.488219 156.742297) + (xy 143.519932 156.716113) (xy 143.677379 156.62521) (xy 143.704259 156.609691) (xy 143.932473 156.434577) + (xy 144.135877 156.231173) (xy 144.310991 156.002959) (xy 144.45482 155.753841) (xy 144.564902 155.48808) + (xy 144.639353 155.210225) (xy 144.6769 154.925029) (xy 144.6769 154.69655) (xy 146.487 154.69655) + (xy 146.487 154.865849) (xy 146.513481 155.033047) (xy 146.565796 155.194053) (xy 146.642652 155.344888) + (xy 146.742148 155.481834) (xy 146.742152 155.481839) (xy 146.86186 155.601547) (xy 146.861865 155.601551) + (xy 146.981317 155.688337) (xy 146.998815 155.70105) (xy 147.094925 155.75002) (xy 147.149646 155.777903) + (xy 147.149648 155.777903) (xy 147.149651 155.777905) (xy 147.23595 155.805945) (xy 147.310652 155.830218) + (xy 147.477851 155.8567) (xy 147.477856 155.8567) (xy 147.647149 155.8567) (xy 147.814347 155.830218) + (xy 147.857277 155.816269) (xy 147.975349 155.777905) (xy 148.126185 155.70105) (xy 148.263141 155.601546) + (xy 148.382846 155.481841) (xy 148.48235 155.344885) (xy 148.559205 155.194049) (xy 148.611518 155.033047) + (xy 148.638 154.865849) (xy 148.638 154.69655) (xy 148.611518 154.529352) (xy 148.566796 154.391713) + (xy 148.559205 154.368351) (xy 148.559203 154.368348) (xy 148.559203 154.368346) (xy 148.515176 154.28194) + (xy 148.48235 154.217515) (xy 148.450781 154.174064) (xy 148.382851 154.080565) (xy 148.382847 154.08056) + (xy 148.263139 153.960852) (xy 148.263134 153.960848) (xy 148.126188 153.861352) (xy 148.126187 153.861351) + (xy 148.126185 153.86135) (xy 148.072331 153.83391) (xy 147.975353 153.784496) (xy 147.814347 153.732181) + (xy 147.647149 153.7057) (xy 147.647144 153.7057) (xy 147.477856 153.7057) (xy 147.477851 153.7057) + (xy 147.310652 153.732181) (xy 147.149646 153.784496) (xy 146.998811 153.861352) (xy 146.861865 153.960848) + (xy 146.86186 153.960852) (xy 146.742152 154.08056) (xy 146.742148 154.080565) (xy 146.642652 154.217511) + (xy 146.565796 154.368346) (xy 146.513481 154.529352) (xy 146.487 154.69655) (xy 144.6769 154.69655) + (xy 144.6769 154.637371) (xy 144.639353 154.352175) (xy 144.564902 154.07432) (xy 144.45482 153.808559) + (xy 144.454818 153.808556) (xy 144.454816 153.808551) (xy 144.310995 153.559448) (xy 144.310991 153.559441) + (xy 144.207069 153.424007) (xy 144.135878 153.331228) (xy 144.135872 153.331221) (xy 143.932478 153.127827) + (xy 143.932471 153.127821) (xy 143.704267 152.952715) (xy 143.704265 152.952713) (xy 143.704259 152.952709) + (xy 143.704254 152.952706) (xy 143.704251 152.952704) (xy 143.455148 152.808883) (xy 143.455131 152.808875) + (xy 143.189378 152.698797) (xy 142.911523 152.624346) (xy 142.626338 152.586801) (xy 142.626335 152.5868) + (xy 142.626329 152.5868) (xy 142.338671 152.5868) (xy 142.338665 152.5868) (xy 142.338661 152.586801) + (xy 142.053476 152.624346) (xy 141.775621 152.698797) (xy 141.509868 152.808875) (xy 141.509851 152.808883) + (xy 141.260748 152.952704) (xy 141.260732 152.952715) (xy 141.032528 153.127821) (xy 141.032521 153.127827) + (xy 140.829127 153.331221) (xy 140.75793 153.424007) (xy 140.701501 153.465209) (xy 140.631755 153.469364) + (xy 140.570835 153.435151) (xy 140.538083 153.373434) (xy 140.543896 153.303807) (xy 140.552161 153.286531) + (xy 140.605363 153.194383) (xy 140.713242 152.933939) (xy 140.786204 152.661642) (xy 140.823 152.382151) + (xy 140.823 152.100249) (xy 140.786204 151.820758) (xy 140.713242 151.548461) (xy 140.605363 151.288017) + (xy 140.605361 151.288014) (xy 140.605359 151.288009) (xy 140.464416 151.04389) (xy 140.464412 151.043883) + (xy 140.2928 150.820235) (xy 140.292798 150.820233) (xy 140.292795 150.820229) (xy 140.09347 150.620904) + (xy 140.009389 150.556386) (xy 139.869817 150.449288) (xy 139.869811 150.449284) (xy 139.869809 150.449283) + (xy 139.62569 150.30834) (xy 139.625679 150.308335) (xy 139.365243 150.200459) (xy 139.092939 150.127495) + (xy 138.813458 150.0907) (xy 138.813451 150.0907) (xy 138.531549 150.0907) (xy 138.531543 150.0907) + (xy 138.531538 150.090701) (xy 138.261398 150.126266) (xy 138.192363 150.1155) (xy 138.140107 150.06912) + (xy 138.121222 150.001852) (xy 138.130652 149.955874) (xy 138.136937 149.940701) (xy 138.170987 149.858497) + (xy 138.20175 149.703842) (xy 138.20175 149.560241) (xy 142.872 149.560241) (xy 142.872 149.842158) + (xy 142.908795 150.121639) (xy 142.981759 150.393943) (xy 143.089635 150.654379) (xy 143.08964 150.65439) + (xy 143.204883 150.853995) (xy 143.230588 150.898517) (xy 143.376294 151.088404) (xy 143.402204 151.12217) + (xy 143.601529 151.321495) (xy 143.601533 151.321498) (xy 143.601535 151.3215) (xy 143.825183 151.493112) + (xy 143.82519 151.493116) (xy 144.069309 151.634059) (xy 144.069314 151.634061) (xy 144.069317 151.634063) + (xy 144.329761 151.741942) (xy 144.602058 151.814904) (xy 144.881549 151.8517) (xy 144.881556 151.8517) + (xy 145.163444 151.8517) (xy 145.163451 151.8517) (xy 145.442942 151.814904) (xy 145.715239 151.741942) + (xy 145.975683 151.634063) (xy 146.219817 151.493112) (xy 146.240392 151.477323) (xy 146.30556 151.452129) + (xy 146.315879 151.451699) (xy 147.497482 151.451699) (xy 147.497491 151.4517) (xy 149.647508 151.451699) + (xy 149.750297 151.441199) (xy 149.916834 151.386014) (xy 150.066156 151.293912) (xy 150.190212 151.169856) + (xy 150.282314 151.020534) (xy 150.337499 150.853997) (xy 150.348 150.751209) (xy 150.347999 149.560241) + (xy 161.922 149.560241) (xy 161.922 149.842158) (xy 161.958795 150.121639) (xy 162.031759 150.393943) + (xy 162.139635 150.654379) (xy 162.13964 150.65439) (xy 162.254883 150.853995) (xy 162.280588 150.898517) + (xy 162.426294 151.088404) (xy 162.452204 151.12217) (xy 162.651529 151.321495) (xy 162.651533 151.321498) + (xy 162.651535 151.3215) (xy 162.875183 151.493112) (xy 162.87519 151.493116) (xy 163.119309 151.634059) + (xy 163.119314 151.634061) (xy 163.119317 151.634063) (xy 163.379761 151.741942) (xy 163.652058 151.814904) + (xy 163.931549 151.8517) (xy 163.931556 151.8517) (xy 164.213444 151.8517) (xy 164.213451 151.8517) + (xy 164.492942 151.814904) (xy 164.765239 151.741942) (xy 165.025683 151.634063) (xy 165.269817 151.493112) + (xy 165.290392 151.477323) (xy 165.35556 151.452129) (xy 165.365879 151.451699) (xy 166.547482 151.451699) + (xy 166.547491 151.4517) (xy 168.697508 151.451699) (xy 168.800297 151.441199) (xy 168.966834 151.386014) + (xy 169.116156 151.293912) (xy 169.240212 151.169856) (xy 169.332314 151.020534) (xy 169.387499 150.853997) + (xy 169.398 150.751209) (xy 169.397999 149.560241) (xy 180.972 149.560241) (xy 180.972 149.842158) + (xy 181.008795 150.121639) (xy 181.081759 150.393943) (xy 181.189635 150.654379) (xy 181.18964 150.65439) + (xy 181.304883 150.853995) (xy 181.330588 150.898517) (xy 181.476294 151.088404) (xy 181.502204 151.12217) + (xy 181.701529 151.321495) (xy 181.701533 151.321498) (xy 181.701535 151.3215) (xy 181.925183 151.493112) + (xy 181.92519 151.493116) (xy 182.169309 151.634059) (xy 182.169314 151.634061) (xy 182.169317 151.634063) + (xy 182.429761 151.741942) (xy 182.702058 151.814904) (xy 182.981549 151.8517) (xy 182.981556 151.8517) + (xy 183.263444 151.8517) (xy 183.263451 151.8517) (xy 183.542942 151.814904) (xy 183.815239 151.741942) + (xy 184.075683 151.634063) (xy 184.319817 151.493112) (xy 184.340392 151.477323) (xy 184.40556 151.452129) + (xy 184.415879 151.451699) (xy 185.597482 151.451699) (xy 185.597491 151.4517) (xy 187.747508 151.451699) + (xy 187.850297 151.441199) (xy 188.016834 151.386014) (xy 188.166156 151.293912) (xy 188.290212 151.169856) + (xy 188.382314 151.020534) (xy 188.437499 150.853997) (xy 188.448 150.751209) (xy 188.447999 149.560241) + (xy 200.022 149.560241) (xy 200.022 149.842158) (xy 200.058795 150.121639) (xy 200.131759 150.393943) + (xy 200.239635 150.654379) (xy 200.23964 150.65439) (xy 200.354883 150.853995) (xy 200.380588 150.898517) + (xy 200.526294 151.088404) (xy 200.552204 151.12217) (xy 200.751529 151.321495) (xy 200.751533 151.321498) + (xy 200.751535 151.3215) (xy 200.975183 151.493112) (xy 200.97519 151.493116) (xy 201.219309 151.634059) + (xy 201.219314 151.634061) (xy 201.219317 151.634063) (xy 201.479761 151.741942) (xy 201.752058 151.814904) + (xy 202.031549 151.8517) (xy 202.031556 151.8517) (xy 202.313444 151.8517) (xy 202.313451 151.8517) + (xy 202.592942 151.814904) (xy 202.865239 151.741942) (xy 203.125683 151.634063) (xy 203.369817 151.493112) + (xy 203.390392 151.477323) (xy 203.45556 151.452129) (xy 203.465879 151.451699) (xy 204.647482 151.451699) + (xy 204.647491 151.4517) (xy 206.797508 151.451699) (xy 206.900297 151.441199) (xy 207.066834 151.386014) + (xy 207.216156 151.293912) (xy 207.318885 151.191183) (xy 209.547 151.191183) (xy 209.547 153.291201) + (xy 209.547001 153.291218) (xy 209.5575 153.393996) (xy 209.557501 153.393999) (xy 209.567445 153.424007) + (xy 209.612686 153.560534) (xy 209.704788 153.709856) (xy 209.828844 153.833912) (xy 209.978166 153.926014) + (xy 210.144703 153.981199) (xy 210.247491 153.9917) (xy 212.174618 153.991699) (xy 212.174627 153.9917) + (xy 212.603351 153.991699) (xy 212.670389 154.011383) (xy 212.716144 154.064187) (xy 212.726088 154.133346) + (xy 212.703669 154.188583) (xy 212.682651 154.217511) (xy 212.605796 154.368346) (xy 212.553481 154.529352) + (xy 212.527 154.69655) (xy 212.527 154.865849) (xy 212.553481 155.033047) (xy 212.605796 155.194053) + (xy 212.682652 155.344888) (xy 212.782148 155.481834) (xy 212.782152 155.481839) (xy 212.90186 155.601547) + (xy 212.901865 155.601551) (xy 213.021317 155.688337) (xy 213.038815 155.70105) (xy 213.134925 155.75002) + (xy 213.189646 155.777903) (xy 213.189648 155.777903) (xy 213.189651 155.777905) (xy 213.27595 155.805945) + (xy 213.350652 155.830218) (xy 213.517851 155.8567) (xy 213.517856 155.8567) (xy 213.687149 155.8567) + (xy 213.854347 155.830218) (xy 213.897277 155.816269) (xy 214.015349 155.777905) (xy 214.166185 155.70105) + (xy 214.303141 155.601546) (xy 214.422846 155.481841) (xy 214.52235 155.344885) (xy 214.599205 155.194049) + (xy 214.651518 155.033047) (xy 214.678 154.865849) (xy 214.678 154.69655) (xy 214.652428 154.535098) + (xy 214.661382 154.465805) (xy 214.706379 154.412353) (xy 214.77313 154.391713) (xy 214.774901 154.3917) + (xy 215.013444 154.3917) (xy 215.013451 154.3917) (xy 215.292942 154.354904) (xy 215.565239 154.281942) + (xy 215.825683 154.174063) (xy 216.069817 154.033112) (xy 216.293465 153.8615) (xy 216.4928 153.662165) + (xy 216.560492 153.573946) (xy 216.61692 153.532744) (xy 216.686666 153.528589) (xy 216.747586 153.562801) + (xy 216.780339 153.624518) (xy 216.774526 153.694146) (xy 216.766255 153.711433) (xy 216.710183 153.808551) + (xy 216.710175 153.808568) (xy 216.600097 154.074321) (xy 216.525646 154.352176) (xy 216.488101 154.637361) + (xy 216.4881 154.637377) (xy 216.4881 154.925022) (xy 216.488101 154.925038) (xy 216.525646 155.210223) + (xy 216.600097 155.488078) (xy 216.710175 155.753831) (xy 216.710183 155.753848) (xy 216.854004 156.002951) + (xy 216.854015 156.002967) (xy 217.029121 156.231171) (xy 217.029127 156.231178) (xy 217.232521 156.434572) + (xy 217.232527 156.434577) (xy 217.460741 156.609691) (xy 217.460748 156.609695) (xy 217.709851 156.753516) + (xy 217.709856 156.753518) (xy 217.709859 156.75352) (xy 217.709863 156.753521) (xy 217.709868 156.753524) + (xy 217.723108 156.759008) (xy 217.97562 156.863602) (xy 218.253475 156.938053) (xy 218.538671 156.9756) + (xy 218.538678 156.9756) (xy 218.826322 156.9756) (xy 218.826329 156.9756) (xy 219.111525 156.938053) + (xy 219.38938 156.863602) (xy 219.655141 156.75352) (xy 219.904259 156.609691) (xy 220.132473 156.434577) + (xy 220.335877 156.231173) (xy 220.510991 156.002959) (xy 220.65482 155.753841) (xy 220.764902 155.48808) + (xy 220.839353 155.210225) (xy 220.8769 154.925029) (xy 220.8769 154.69655) (xy 222.687 154.69655) + (xy 222.687 154.865849) (xy 222.713481 155.033047) (xy 222.765796 155.194053) (xy 222.842652 155.344888) + (xy 222.942148 155.481834) (xy 222.942152 155.481839) (xy 223.06186 155.601547) (xy 223.061865 155.601551) + (xy 223.181317 155.688337) (xy 223.198815 155.70105) (xy 223.294925 155.75002) (xy 223.349646 155.777903) + (xy 223.349648 155.777903) (xy 223.349651 155.777905) (xy 223.43595 155.805945) (xy 223.510652 155.830218) + (xy 223.677851 155.8567) (xy 223.677856 155.8567) (xy 223.847149 155.8567) (xy 224.014347 155.830218) + (xy 224.057277 155.816269) (xy 224.175349 155.777905) (xy 224.326185 155.70105) (xy 224.463141 155.601546) + (xy 224.582846 155.481841) (xy 224.68235 155.344885) (xy 224.759205 155.194049) (xy 224.811518 155.033047) + (xy 224.838 154.865849) (xy 224.838 154.69655) (xy 224.811518 154.529352) (xy 224.766796 154.391713) + (xy 224.759205 154.368351) (xy 224.759203 154.368348) (xy 224.759203 154.368346) (xy 224.715176 154.28194) + (xy 224.68235 154.217515) (xy 224.650781 154.174064) (xy 224.582851 154.080565) (xy 224.582847 154.08056) + (xy 224.463139 153.960852) (xy 224.463134 153.960848) (xy 224.326188 153.861352) (xy 224.326187 153.861351) + (xy 224.326185 153.86135) (xy 224.272331 153.83391) (xy 224.175353 153.784496) (xy 224.014347 153.732181) + (xy 223.847149 153.7057) (xy 223.847144 153.7057) (xy 223.677856 153.7057) (xy 223.677851 153.7057) + (xy 223.510652 153.732181) (xy 223.349646 153.784496) (xy 223.198811 153.861352) (xy 223.061865 153.960848) + (xy 223.06186 153.960852) (xy 222.942152 154.08056) (xy 222.942148 154.080565) (xy 222.842652 154.217511) + (xy 222.765796 154.368346) (xy 222.713481 154.529352) (xy 222.687 154.69655) (xy 220.8769 154.69655) + (xy 220.8769 154.637371) (xy 220.839353 154.352175) (xy 220.764902 154.07432) (xy 220.65482 153.808559) + (xy 220.654818 153.808556) (xy 220.654816 153.808551) (xy 220.510995 153.559448) (xy 220.510991 153.559441) + (xy 220.407069 153.424007) (xy 220.335878 153.331228) (xy 220.335872 153.331221) (xy 220.132478 153.127827) + (xy 220.132471 153.127821) (xy 219.904267 152.952715) (xy 219.904265 152.952713) (xy 219.904259 152.952709) + (xy 219.904254 152.952706) (xy 219.904251 152.952704) (xy 219.655148 152.808883) (xy 219.655131 152.808875) + (xy 219.389378 152.698797) (xy 219.111523 152.624346) (xy 218.826338 152.586801) (xy 218.826335 152.5868) + (xy 218.826329 152.5868) (xy 218.538671 152.5868) (xy 218.538665 152.5868) (xy 218.538661 152.586801) + (xy 218.253476 152.624346) (xy 217.975621 152.698797) (xy 217.709868 152.808875) (xy 217.709851 152.808883) + (xy 217.460748 152.952704) (xy 217.460732 152.952715) (xy 217.232528 153.127821) (xy 217.232521 153.127827) + (xy 217.029127 153.331221) (xy 216.95793 153.424007) (xy 216.901501 153.465209) (xy 216.831755 153.469364) + (xy 216.770835 153.435151) (xy 216.738083 153.373434) (xy 216.743896 153.303807) (xy 216.752161 153.286531) + (xy 216.805363 153.194383) (xy 216.913242 152.933939) (xy 216.986204 152.661642) (xy 217.023 152.382151) + (xy 217.023 152.100249) (xy 216.986204 151.820758) (xy 216.913242 151.548461) (xy 216.805363 151.288017) + (xy 216.805361 151.288014) (xy 216.805359 151.288009) (xy 216.664416 151.04389) (xy 216.664412 151.043883) + (xy 216.4928 150.820235) (xy 216.492798 150.820233) (xy 216.492795 150.820229) (xy 216.29347 150.620904) + (xy 216.209389 150.556386) (xy 216.069817 150.449288) (xy 216.069811 150.449284) (xy 216.069809 150.449283) + (xy 215.82569 150.30834) (xy 215.825679 150.308335) (xy 215.565243 150.200459) (xy 215.292939 150.127495) + (xy 215.013458 150.0907) (xy 215.013451 150.0907) (xy 214.731549 150.0907) (xy 214.731541 150.0907) + (xy 214.45206 150.127495) (xy 214.179756 150.200459) (xy 213.91932 150.308335) (xy 213.919309 150.30834) + (xy 213.675192 150.449281) (xy 213.675183 150.449288) (xy 213.654606 150.465076) (xy 213.589438 150.49027) + (xy 213.579122 150.4907) (xy 210.247498 150.4907) (xy 210.247481 150.490701) (xy 210.144703 150.5012) + (xy 210.1447 150.501201) (xy 209.978168 150.556385) (xy 209.978163 150.556387) (xy 209.828842 150.648489) + (xy 209.704789 150.772542) (xy 209.612687 150.921863) (xy 209.612685 150.921868) (xy 209.592749 150.982031) + (xy 209.557501 151.088403) (xy 209.557501 151.088404) (xy 209.5575 151.088404) (xy 209.547 151.191183) + (xy 207.318885 151.191183) (xy 207.340212 151.169856) (xy 207.432314 151.020534) (xy 207.487499 150.853997) + (xy 207.498 150.751209) (xy 207.497999 149.560241) (xy 219.072 149.560241) (xy 219.072 149.842158) + (xy 219.108795 150.121639) (xy 219.181759 150.393943) (xy 219.289635 150.654379) (xy 219.28964 150.65439) + (xy 219.404883 150.853995) (xy 219.430588 150.898517) (xy 219.576294 151.088404) (xy 219.602204 151.12217) + (xy 219.801529 151.321495) (xy 219.801533 151.321498) (xy 219.801535 151.3215) (xy 220.025183 151.493112) + (xy 220.02519 151.493116) (xy 220.269309 151.634059) (xy 220.269314 151.634061) (xy 220.269317 151.634063) + (xy 220.529761 151.741942) (xy 220.802058 151.814904) (xy 221.081549 151.8517) (xy 221.081556 151.8517) + (xy 221.363444 151.8517) (xy 221.363451 151.8517) (xy 221.642942 151.814904) (xy 221.915239 151.741942) + (xy 222.175683 151.634063) (xy 222.419817 151.493112) (xy 222.440392 151.477323) (xy 222.50556 151.452129) + (xy 222.515879 151.451699) (xy 223.697482 151.451699) (xy 223.697491 151.4517) (xy 225.847508 151.451699) + (xy 225.950297 151.441199) (xy 226.116834 151.386014) (xy 226.266156 151.293912) (xy 226.390212 151.169856) + (xy 226.482314 151.020534) (xy 226.537499 150.853997) (xy 226.548 150.751209) (xy 226.547999 149.560241) + (xy 238.122 149.560241) (xy 238.122 149.842158) (xy 238.158795 150.121639) (xy 238.231759 150.393943) + (xy 238.339635 150.654379) (xy 238.33964 150.65439) (xy 238.454883 150.853995) (xy 238.480588 150.898517) + (xy 238.626294 151.088404) (xy 238.652204 151.12217) (xy 238.851529 151.321495) (xy 238.851533 151.321498) + (xy 238.851535 151.3215) (xy 239.075183 151.493112) (xy 239.07519 151.493116) (xy 239.319309 151.634059) + (xy 239.319314 151.634061) (xy 239.319317 151.634063) (xy 239.579761 151.741942) (xy 239.852058 151.814904) + (xy 240.131549 151.8517) (xy 240.131556 151.8517) (xy 240.413444 151.8517) (xy 240.413451 151.8517) + (xy 240.692942 151.814904) (xy 240.965239 151.741942) (xy 241.225683 151.634063) (xy 241.469817 151.493112) + (xy 241.490392 151.477323) (xy 241.55556 151.452129) (xy 241.565879 151.451699) (xy 242.747482 151.451699) + (xy 242.747491 151.4517) (xy 244.897508 151.451699) (xy 245.000297 151.441199) (xy 245.166834 151.386014) + (xy 245.316156 151.293912) (xy 245.418885 151.191183) (xy 247.647 151.191183) (xy 247.647 153.291201) + (xy 247.647001 153.291218) (xy 247.6575 153.393996) (xy 247.657501 153.393999) (xy 247.667445 153.424007) + (xy 247.712686 153.560534) (xy 247.804788 153.709856) (xy 247.928844 153.833912) (xy 248.078166 153.926014) + (xy 248.244703 153.981199) (xy 248.347491 153.9917) (xy 250.274618 153.991699) (xy 250.274627 153.9917) + (xy 250.703351 153.991699) (xy 250.770389 154.011383) (xy 250.816144 154.064187) (xy 250.826088 154.133346) + (xy 250.803669 154.188583) (xy 250.782651 154.217511) (xy 250.705796 154.368346) (xy 250.653481 154.529352) + (xy 250.627 154.69655) (xy 250.627 154.865849) (xy 250.653481 155.033047) (xy 250.705796 155.194053) + (xy 250.782652 155.344888) (xy 250.882148 155.481834) (xy 250.882152 155.481839) (xy 251.00186 155.601547) + (xy 251.001865 155.601551) (xy 251.121317 155.688337) (xy 251.138815 155.70105) (xy 251.234925 155.75002) + (xy 251.289646 155.777903) (xy 251.289648 155.777903) (xy 251.289651 155.777905) (xy 251.37595 155.805945) + (xy 251.450652 155.830218) (xy 251.617851 155.8567) (xy 251.617856 155.8567) (xy 251.787149 155.8567) + (xy 251.954347 155.830218) (xy 251.997277 155.816269) (xy 252.115349 155.777905) (xy 252.266185 155.70105) + (xy 252.403141 155.601546) (xy 252.522846 155.481841) (xy 252.62235 155.344885) (xy 252.699205 155.194049) + (xy 252.751518 155.033047) (xy 252.778 154.865849) (xy 252.778 154.69655) (xy 252.752428 154.535098) + (xy 252.761382 154.465805) (xy 252.806379 154.412353) (xy 252.87313 154.391713) (xy 252.874901 154.3917) + (xy 253.113444 154.3917) (xy 253.113451 154.3917) (xy 253.392942 154.354904) (xy 253.665239 154.281942) + (xy 253.925683 154.174063) (xy 254.169817 154.033112) (xy 254.393465 153.8615) (xy 254.5928 153.662165) + (xy 254.660492 153.573946) (xy 254.71692 153.532744) (xy 254.786666 153.528589) (xy 254.847586 153.562801) + (xy 254.880339 153.624518) (xy 254.874526 153.694146) (xy 254.866255 153.711433) (xy 254.810183 153.808551) + (xy 254.810175 153.808568) (xy 254.700097 154.074321) (xy 254.625646 154.352176) (xy 254.588101 154.637361) + (xy 254.5881 154.637377) (xy 254.5881 154.925022) (xy 254.588101 154.925038) (xy 254.625646 155.210223) + (xy 254.700097 155.488078) (xy 254.810175 155.753831) (xy 254.810183 155.753848) (xy 254.954004 156.002951) + (xy 254.954015 156.002967) (xy 255.129121 156.231171) (xy 255.129127 156.231178) (xy 255.332521 156.434572) + (xy 255.332527 156.434577) (xy 255.560741 156.609691) (xy 255.560748 156.609695) (xy 255.809851 156.753516) + (xy 255.809856 156.753518) (xy 255.809859 156.75352) (xy 255.809863 156.753521) (xy 255.809868 156.753524) + (xy 255.823108 156.759008) (xy 256.07562 156.863602) (xy 256.353475 156.938053) (xy 256.638671 156.9756) + (xy 256.638678 156.9756) (xy 256.926322 156.9756) (xy 256.926329 156.9756) (xy 257.211525 156.938053) + (xy 257.48938 156.863602) (xy 257.755141 156.75352) (xy 258.004259 156.609691) (xy 258.232473 156.434577) + (xy 258.435877 156.231173) (xy 258.610991 156.002959) (xy 258.75482 155.753841) (xy 258.864902 155.48808) + (xy 258.939353 155.210225) (xy 258.9769 154.925029) (xy 258.9769 154.69655) (xy 260.787 154.69655) + (xy 260.787 154.865849) (xy 260.813481 155.033047) (xy 260.865796 155.194053) (xy 260.942652 155.344888) + (xy 261.042148 155.481834) (xy 261.042152 155.481839) (xy 261.16186 155.601547) (xy 261.161865 155.601551) + (xy 261.281317 155.688337) (xy 261.298815 155.70105) (xy 261.394925 155.75002) (xy 261.449646 155.777903) + (xy 261.449648 155.777903) (xy 261.449651 155.777905) (xy 261.53595 155.805945) (xy 261.610652 155.830218) + (xy 261.777851 155.8567) (xy 261.777856 155.8567) (xy 261.947149 155.8567) (xy 262.114347 155.830218) + (xy 262.157277 155.816269) (xy 262.275349 155.777905) (xy 262.426185 155.70105) (xy 262.563141 155.601546) + (xy 262.682846 155.481841) (xy 262.78235 155.344885) (xy 262.859205 155.194049) (xy 262.911518 155.033047) + (xy 262.938 154.865849) (xy 262.938 154.69655) (xy 262.911518 154.529352) (xy 262.866796 154.391713) + (xy 262.859205 154.368351) (xy 262.859203 154.368348) (xy 262.859203 154.368346) (xy 262.815176 154.28194) + (xy 262.78235 154.217515) (xy 262.750781 154.174064) (xy 262.682851 154.080565) (xy 262.682847 154.08056) + (xy 262.563139 153.960852) (xy 262.563134 153.960848) (xy 262.426188 153.861352) (xy 262.426187 153.861351) + (xy 262.426185 153.86135) (xy 262.372331 153.83391) (xy 262.275353 153.784496) (xy 262.114347 153.732181) + (xy 261.947149 153.7057) (xy 261.947144 153.7057) (xy 261.777856 153.7057) (xy 261.777851 153.7057) + (xy 261.610652 153.732181) (xy 261.449646 153.784496) (xy 261.298811 153.861352) (xy 261.161865 153.960848) + (xy 261.16186 153.960852) (xy 261.042152 154.08056) (xy 261.042148 154.080565) (xy 260.942652 154.217511) + (xy 260.865796 154.368346) (xy 260.813481 154.529352) (xy 260.787 154.69655) (xy 258.9769 154.69655) + (xy 258.9769 154.637371) (xy 258.939353 154.352175) (xy 258.864902 154.07432) (xy 258.75482 153.808559) + (xy 258.754818 153.808556) (xy 258.754816 153.808551) (xy 258.610995 153.559448) (xy 258.610991 153.559441) + (xy 258.507069 153.424007) (xy 258.435878 153.331228) (xy 258.435872 153.331221) (xy 258.232478 153.127827) + (xy 258.232471 153.127821) (xy 258.004267 152.952715) (xy 258.004265 152.952713) (xy 258.004259 152.952709) + (xy 258.004254 152.952706) (xy 258.004251 152.952704) (xy 257.755148 152.808883) (xy 257.755131 152.808875) + (xy 257.489378 152.698797) (xy 257.211523 152.624346) (xy 256.926338 152.586801) (xy 256.926335 152.5868) + (xy 256.926329 152.5868) (xy 256.638671 152.5868) (xy 256.638665 152.5868) (xy 256.638661 152.586801) + (xy 256.353476 152.624346) (xy 256.075621 152.698797) (xy 255.809868 152.808875) (xy 255.809851 152.808883) + (xy 255.560748 152.952704) (xy 255.560732 152.952715) (xy 255.332528 153.127821) (xy 255.332521 153.127827) + (xy 255.129127 153.331221) (xy 255.05793 153.424007) (xy 255.001501 153.465209) (xy 254.931755 153.469364) + (xy 254.870835 153.435151) (xy 254.838083 153.373434) (xy 254.843896 153.303807) (xy 254.852161 153.286531) + (xy 254.905363 153.194383) (xy 255.013242 152.933939) (xy 255.086204 152.661642) (xy 255.123 152.382151) + (xy 255.123 152.100249) (xy 255.086204 151.820758) (xy 255.013242 151.548461) (xy 254.905363 151.288017) + (xy 254.905361 151.288014) (xy 254.905359 151.288009) (xy 254.764416 151.04389) (xy 254.764412 151.043883) + (xy 254.5928 150.820235) (xy 254.592798 150.820233) (xy 254.592795 150.820229) (xy 254.39347 150.620904) + (xy 254.309389 150.556386) (xy 254.169817 150.449288) (xy 254.169811 150.449284) (xy 254.169809 150.449283) + (xy 253.92569 150.30834) (xy 253.925679 150.308335) (xy 253.665243 150.200459) (xy 253.392939 150.127495) + (xy 253.113458 150.0907) (xy 253.113451 150.0907) (xy 252.831549 150.0907) (xy 252.831541 150.0907) + (xy 252.55206 150.127495) (xy 252.279756 150.200459) (xy 252.01932 150.308335) (xy 252.019309 150.30834) + (xy 251.775192 150.449281) (xy 251.775183 150.449288) (xy 251.754606 150.465076) (xy 251.689438 150.49027) + (xy 251.679122 150.4907) (xy 248.347498 150.4907) (xy 248.347481 150.490701) (xy 248.244703 150.5012) + (xy 248.2447 150.501201) (xy 248.078168 150.556385) (xy 248.078163 150.556387) (xy 247.928842 150.648489) + (xy 247.804789 150.772542) (xy 247.712687 150.921863) (xy 247.712685 150.921868) (xy 247.692749 150.982031) + (xy 247.657501 151.088403) (xy 247.657501 151.088404) (xy 247.6575 151.088404) (xy 247.647 151.191183) + (xy 245.418885 151.191183) (xy 245.440212 151.169856) (xy 245.532314 151.020534) (xy 245.587499 150.853997) + (xy 245.598 150.751209) (xy 245.597999 149.560241) (xy 257.172 149.560241) (xy 257.172 149.842158) + (xy 257.208795 150.121639) (xy 257.281759 150.393943) (xy 257.389635 150.654379) (xy 257.38964 150.65439) + (xy 257.504883 150.853995) (xy 257.530588 150.898517) (xy 257.676294 151.088404) (xy 257.702204 151.12217) + (xy 257.901529 151.321495) (xy 257.901533 151.321498) (xy 257.901535 151.3215) (xy 258.125183 151.493112) + (xy 258.12519 151.493116) (xy 258.369309 151.634059) (xy 258.369314 151.634061) (xy 258.369317 151.634063) + (xy 258.629761 151.741942) (xy 258.902058 151.814904) (xy 259.181549 151.8517) (xy 259.181556 151.8517) + (xy 259.463444 151.8517) (xy 259.463451 151.8517) (xy 259.742942 151.814904) (xy 260.015239 151.741942) + (xy 260.275683 151.634063) (xy 260.519817 151.493112) (xy 260.540392 151.477323) (xy 260.60556 151.452129) + (xy 260.615879 151.451699) (xy 261.797482 151.451699) (xy 261.797491 151.4517) (xy 263.947508 151.451699) + (xy 264.050297 151.441199) (xy 264.216834 151.386014) (xy 264.366156 151.293912) (xy 264.468885 151.191183) + (xy 266.697 151.191183) (xy 266.697 153.291201) (xy 266.697001 153.291218) (xy 266.7075 153.393996) + (xy 266.707501 153.393999) (xy 266.717445 153.424007) (xy 266.762686 153.560534) (xy 266.854788 153.709856) + (xy 266.978844 153.833912) (xy 267.128166 153.926014) (xy 267.294703 153.981199) (xy 267.397491 153.9917) + (xy 269.324618 153.991699) (xy 269.324627 153.9917) (xy 269.753351 153.991699) (xy 269.820389 154.011383) + (xy 269.866144 154.064187) (xy 269.876088 154.133346) (xy 269.853669 154.188583) (xy 269.832651 154.217511) + (xy 269.755796 154.368346) (xy 269.703481 154.529352) (xy 269.677 154.69655) (xy 269.677 154.865849) + (xy 269.703481 155.033047) (xy 269.755796 155.194053) (xy 269.832652 155.344888) (xy 269.932148 155.481834) + (xy 269.932152 155.481839) (xy 270.05186 155.601547) (xy 270.051865 155.601551) (xy 270.171317 155.688337) + (xy 270.188815 155.70105) (xy 270.284925 155.75002) (xy 270.339646 155.777903) (xy 270.339648 155.777903) + (xy 270.339651 155.777905) (xy 270.42595 155.805945) (xy 270.500652 155.830218) (xy 270.667851 155.8567) + (xy 270.667856 155.8567) (xy 270.837149 155.8567) (xy 271.004347 155.830218) (xy 271.047277 155.816269) + (xy 271.165349 155.777905) (xy 271.316185 155.70105) (xy 271.453141 155.601546) (xy 271.572846 155.481841) + (xy 271.67235 155.344885) (xy 271.749205 155.194049) (xy 271.801518 155.033047) (xy 271.828 154.865849) + (xy 271.828 154.69655) (xy 271.802428 154.535098) (xy 271.811382 154.465805) (xy 271.856379 154.412353) + (xy 271.92313 154.391713) (xy 271.924901 154.3917) (xy 272.163444 154.3917) (xy 272.163451 154.3917) + (xy 272.442942 154.354904) (xy 272.715239 154.281942) (xy 272.975683 154.174063) (xy 273.219817 154.033112) + (xy 273.443465 153.8615) (xy 273.6428 153.662165) (xy 273.710492 153.573946) (xy 273.76692 153.532744) + (xy 273.836666 153.528589) (xy 273.897586 153.562801) (xy 273.930339 153.624518) (xy 273.924526 153.694146) + (xy 273.916255 153.711433) (xy 273.860183 153.808551) (xy 273.860175 153.808568) (xy 273.750097 154.074321) + (xy 273.675646 154.352176) (xy 273.638101 154.637361) (xy 273.6381 154.637377) (xy 273.6381 154.925022) + (xy 273.638101 154.925038) (xy 273.675646 155.210223) (xy 273.750097 155.488078) (xy 273.860175 155.753831) + (xy 273.860183 155.753848) (xy 274.004004 156.002951) (xy 274.004015 156.002967) (xy 274.179121 156.231171) + (xy 274.179127 156.231178) (xy 274.382521 156.434572) (xy 274.382527 156.434577) (xy 274.610741 156.609691) + (xy 274.610748 156.609695) (xy 274.859851 156.753516) (xy 274.859856 156.753518) (xy 274.859859 156.75352) + (xy 274.859863 156.753521) (xy 274.859868 156.753524) (xy 274.873108 156.759008) (xy 275.12562 156.863602) + (xy 275.403475 156.938053) (xy 275.688671 156.9756) (xy 275.688678 156.9756) (xy 275.976322 156.9756) + (xy 275.976329 156.9756) (xy 276.261525 156.938053) (xy 276.53938 156.863602) (xy 276.805141 156.75352) + (xy 277.054259 156.609691) (xy 277.282473 156.434577) (xy 277.485877 156.231173) (xy 277.660991 156.002959) + (xy 277.80482 155.753841) (xy 277.914902 155.48808) (xy 277.989353 155.210225) (xy 278.0269 154.925029) + (xy 278.0269 154.69655) (xy 279.837 154.69655) (xy 279.837 154.865849) (xy 279.863481 155.033047) + (xy 279.915796 155.194053) (xy 279.992652 155.344888) (xy 280.092148 155.481834) (xy 280.092152 155.481839) + (xy 280.21186 155.601547) (xy 280.211865 155.601551) (xy 280.331317 155.688337) (xy 280.348815 155.70105) + (xy 280.444925 155.75002) (xy 280.499646 155.777903) (xy 280.499648 155.777903) (xy 280.499651 155.777905) + (xy 280.58595 155.805945) (xy 280.660652 155.830218) (xy 280.827851 155.8567) (xy 280.827856 155.8567) + (xy 280.997149 155.8567) (xy 281.164347 155.830218) (xy 281.207277 155.816269) (xy 281.325349 155.777905) + (xy 281.476185 155.70105) (xy 281.613141 155.601546) (xy 281.732846 155.481841) (xy 281.83235 155.344885) + (xy 281.909205 155.194049) (xy 281.961518 155.033047) (xy 281.988 154.865849) (xy 281.988 154.69655) + (xy 281.961518 154.529352) (xy 281.916796 154.391713) (xy 281.909205 154.368351) (xy 281.909203 154.368348) + (xy 281.909203 154.368346) (xy 281.865176 154.28194) (xy 281.83235 154.217515) (xy 281.800781 154.174064) + (xy 281.732851 154.080565) (xy 281.732847 154.08056) (xy 281.613139 153.960852) (xy 281.613134 153.960848) + (xy 281.476188 153.861352) (xy 281.476187 153.861351) (xy 281.476185 153.86135) (xy 281.422331 153.83391) + (xy 281.325353 153.784496) (xy 281.164347 153.732181) (xy 280.997149 153.7057) (xy 280.997144 153.7057) + (xy 280.827856 153.7057) (xy 280.827851 153.7057) (xy 280.660652 153.732181) (xy 280.499646 153.784496) + (xy 280.348811 153.861352) (xy 280.211865 153.960848) (xy 280.21186 153.960852) (xy 280.092152 154.08056) + (xy 280.092148 154.080565) (xy 279.992652 154.217511) (xy 279.915796 154.368346) (xy 279.863481 154.529352) + (xy 279.837 154.69655) (xy 278.0269 154.69655) (xy 278.0269 154.637371) (xy 277.989353 154.352175) + (xy 277.914902 154.07432) (xy 277.80482 153.808559) (xy 277.804818 153.808556) (xy 277.804816 153.808551) + (xy 277.660995 153.559448) (xy 277.660991 153.559441) (xy 277.557069 153.424007) (xy 277.485878 153.331228) + (xy 277.485872 153.331221) (xy 277.282478 153.127827) (xy 277.282471 153.127821) (xy 277.054267 152.952715) + (xy 277.054265 152.952713) (xy 277.054259 152.952709) (xy 277.054254 152.952706) (xy 277.054251 152.952704) + (xy 276.805148 152.808883) (xy 276.805131 152.808875) (xy 276.539378 152.698797) (xy 276.261523 152.624346) + (xy 275.976338 152.586801) (xy 275.976335 152.5868) (xy 275.976329 152.5868) (xy 275.688671 152.5868) + (xy 275.688665 152.5868) (xy 275.688661 152.586801) (xy 275.403476 152.624346) (xy 275.125621 152.698797) + (xy 274.859868 152.808875) (xy 274.859851 152.808883) (xy 274.610748 152.952704) (xy 274.610732 152.952715) + (xy 274.382528 153.127821) (xy 274.382521 153.127827) (xy 274.179127 153.331221) (xy 274.10793 153.424007) + (xy 274.051501 153.465209) (xy 273.981755 153.469364) (xy 273.920835 153.435151) (xy 273.888083 153.373434) + (xy 273.893896 153.303807) (xy 273.902161 153.286531) (xy 273.955363 153.194383) (xy 274.063242 152.933939) + (xy 274.136204 152.661642) (xy 274.173 152.382151) (xy 274.173 152.100249) (xy 274.136204 151.820758) + (xy 274.063242 151.548461) (xy 273.955363 151.288017) (xy 273.955361 151.288014) (xy 273.955359 151.288009) + (xy 273.814416 151.04389) (xy 273.814412 151.043883) (xy 273.6428 150.820235) (xy 273.642798 150.820233) + (xy 273.642795 150.820229) (xy 273.44347 150.620904) (xy 273.359389 150.556386) (xy 273.219817 150.449288) + (xy 273.219811 150.449284) (xy 273.219809 150.449283) (xy 272.97569 150.30834) (xy 272.975679 150.308335) + (xy 272.715243 150.200459) (xy 272.442939 150.127495) (xy 272.163458 150.0907) (xy 272.163451 150.0907) + (xy 271.881549 150.0907) (xy 271.881541 150.0907) (xy 271.60206 150.127495) (xy 271.329756 150.200459) + (xy 271.06932 150.308335) (xy 271.069309 150.30834) (xy 270.825192 150.449281) (xy 270.825183 150.449288) + (xy 270.804606 150.465076) (xy 270.739438 150.49027) (xy 270.729122 150.4907) (xy 267.397498 150.4907) + (xy 267.397481 150.490701) (xy 267.294703 150.5012) (xy 267.2947 150.501201) (xy 267.128168 150.556385) + (xy 267.128163 150.556387) (xy 266.978842 150.648489) (xy 266.854789 150.772542) (xy 266.762687 150.921863) + (xy 266.762685 150.921868) (xy 266.742749 150.982031) (xy 266.707501 151.088403) (xy 266.707501 151.088404) + (xy 266.7075 151.088404) (xy 266.697 151.191183) (xy 264.468885 151.191183) (xy 264.490212 151.169856) + (xy 264.582314 151.020534) (xy 264.637499 150.853997) (xy 264.648 150.751209) (xy 264.647999 149.560241) + (xy 276.222 149.560241) (xy 276.222 149.842158) (xy 276.258795 150.121639) (xy 276.331759 150.393943) + (xy 276.439635 150.654379) (xy 276.43964 150.65439) (xy 276.554883 150.853995) (xy 276.580588 150.898517) + (xy 276.726294 151.088404) (xy 276.752204 151.12217) (xy 276.951529 151.321495) (xy 276.951533 151.321498) + (xy 276.951535 151.3215) (xy 277.175183 151.493112) (xy 277.17519 151.493116) (xy 277.419309 151.634059) + (xy 277.419314 151.634061) (xy 277.419317 151.634063) (xy 277.679761 151.741942) (xy 277.952058 151.814904) + (xy 278.231549 151.8517) (xy 278.231556 151.8517) (xy 278.513444 151.8517) (xy 278.513451 151.8517) + (xy 278.792942 151.814904) (xy 279.065239 151.741942) (xy 279.325683 151.634063) (xy 279.569817 151.493112) + (xy 279.590392 151.477323) (xy 279.65556 151.452129) (xy 279.665879 151.451699) (xy 280.847482 151.451699) + (xy 280.847491 151.4517) (xy 282.997508 151.451699) (xy 283.100297 151.441199) (xy 283.266834 151.386014) + (xy 283.416156 151.293912) (xy 283.540212 151.169856) (xy 283.632314 151.020534) (xy 283.687499 150.853997) + (xy 283.698 150.751209) (xy 283.697999 149.550423) (xy 302.2658 149.550423) (xy 302.2658 149.851976) + (xy 302.265801 149.851993) (xy 302.305161 150.150966) (xy 302.383213 150.44226) (xy 302.498614 150.720861) + (xy 302.498618 150.720871) (xy 302.649399 150.982031) (xy 302.832979 151.221278) (xy 302.832985 151.221285) + (xy 303.046214 151.434514) (xy 303.046221 151.43452) (xy 303.285468 151.6181) (xy 303.546628 151.768881) + (xy 303.546629 151.768881) (xy 303.546632 151.768883) (xy 303.732372 151.845819) (xy 303.825239 151.884286) + (xy 303.82524 151.884286) (xy 303.825242 151.884287) (xy 304.116532 151.962338) (xy 304.415517 152.0017) + (xy 304.415524 152.0017) (xy 304.717076 152.0017) (xy 304.717083 152.0017) (xy 305.016068 151.962338) + (xy 305.307358 151.884287) (xy 305.585968 151.768883) (xy 305.847132 151.6181) (xy 306.030595 151.477322) + (xy 306.095765 151.452129) (xy 306.106082 151.451699) (xy 308.921302 151.451699) (xy 308.921308 151.451699) + (xy 309.024097 151.441199) (xy 309.190634 151.386014) (xy 309.339956 151.293912) (xy 309.464012 151.169856) + (xy 309.556114 151.020534) (xy 309.611299 150.853997) (xy 309.6218 150.751209) (xy 309.621799 149.560241) + (xy 328.6095 149.560241) (xy 328.6095 149.842158) (xy 328.646295 150.121639) (xy 328.719259 150.393943) + (xy 328.827135 150.654379) (xy 328.82714 150.65439) (xy 328.942383 150.853995) (xy 328.968088 150.898517) + (xy 329.113794 151.088404) (xy 329.139704 151.12217) (xy 329.339029 151.321495) (xy 329.339033 151.321498) + (xy 329.339035 151.3215) (xy 329.562683 151.493112) (xy 329.56269 151.493116) (xy 329.806809 151.634059) + (xy 329.806814 151.634061) (xy 329.806817 151.634063) (xy 330.067261 151.741942) (xy 330.339558 151.814904) + (xy 330.619049 151.8517) (xy 330.619056 151.8517) (xy 330.900944 151.8517) (xy 330.900951 151.8517) + (xy 331.180442 151.814904) (xy 331.452739 151.741942) (xy 331.713183 151.634063) (xy 331.957317 151.493112) + (xy 331.977892 151.477323) (xy 332.04306 151.452129) (xy 332.053379 151.451699) (xy 333.234982 151.451699) + (xy 333.234991 151.4517) (xy 335.385008 151.451699) (xy 335.487797 151.441199) (xy 335.654334 151.386014) + (xy 335.803656 151.293912) (xy 335.927712 151.169856) (xy 336.019814 151.020534) (xy 336.074999 150.853997) + (xy 336.0855 150.751209) (xy 336.085499 149.560241) (xy 347.6595 149.560241) (xy 347.6595 149.842158) + (xy 347.696295 150.121639) (xy 347.769259 150.393943) (xy 347.877135 150.654379) (xy 347.87714 150.65439) + (xy 347.992383 150.853995) (xy 348.018088 150.898517) (xy 348.163794 151.088404) (xy 348.189704 151.12217) + (xy 348.389029 151.321495) (xy 348.389033 151.321498) (xy 348.389035 151.3215) (xy 348.612683 151.493112) + (xy 348.61269 151.493116) (xy 348.856809 151.634059) (xy 348.856814 151.634061) (xy 348.856817 151.634063) + (xy 349.117261 151.741942) (xy 349.389558 151.814904) (xy 349.669049 151.8517) (xy 349.669056 151.8517) + (xy 349.950944 151.8517) (xy 349.950951 151.8517) (xy 350.230442 151.814904) (xy 350.502739 151.741942) + (xy 350.763183 151.634063) (xy 351.007317 151.493112) (xy 351.027892 151.477323) (xy 351.09306 151.452129) + (xy 351.103379 151.451699) (xy 352.284982 151.451699) (xy 352.284991 151.4517) (xy 354.435008 151.451699) + (xy 354.537797 151.441199) (xy 354.704334 151.386014) (xy 354.853656 151.293912) (xy 354.977712 151.169856) + (xy 355.069814 151.020534) (xy 355.124999 150.853997) (xy 355.1355 150.751209) (xy 355.135499 148.651192) + (xy 355.124999 148.548403) (xy 355.069814 148.381866) (xy 354.977712 148.232544) (xy 354.853656 148.108488) + (xy 354.704334 148.016386) (xy 354.537797 147.961201) (xy 354.537795 147.9612) (xy 354.435016 147.9507) + (xy 354.435009 147.9507) (xy 352.723406 147.9507) (xy 352.675953 147.941261) (xy 352.629454 147.922) + (xy 352.629453 147.922) (xy 351.655253 147.922) (xy 351.062561 147.922) (xy 351.000561 147.905387) + (xy 350.76319 147.76834) (xy 350.763179 147.768335) (xy 350.502743 147.660459) (xy 350.230439 147.587495) + (xy 349.950958 147.5507) (xy 349.950951 147.5507) (xy 349.669049 147.5507) (xy 349.669041 147.5507) + (xy 349.38956 147.587495) (xy 349.117256 147.660459) (xy 348.85682 147.768335) (xy 348.856809 147.76834) + (xy 348.61269 147.909283) (xy 348.612684 147.909287) (xy 348.612683 147.909288) (xy 348.592108 147.925076) + (xy 348.389029 148.080904) (xy 348.189704 148.280229) (xy 348.018089 148.503882) (xy 348.018083 148.50389) + (xy 347.87714 148.748009) (xy 347.877135 148.74802) (xy 347.769259 149.008456) (xy 347.696295 149.28076) + (xy 347.6595 149.560241) (xy 336.085499 149.560241) (xy 336.085499 148.651192) (xy 336.074999 148.548403) + (xy 336.019814 148.381866) (xy 335.927712 148.232544) (xy 335.803656 148.108488) (xy 335.654334 148.016386) + (xy 335.487797 147.961201) (xy 335.487795 147.9612) (xy 335.385016 147.9507) (xy 335.385009 147.9507) + (xy 333.432881 147.9507) (xy 333.432873 147.9507) (xy 332.699206 147.9507) (xy 332.651753 147.941261) + (xy 332.605253 147.922) (xy 332.012561 147.922) (xy 331.950561 147.905387) (xy 331.71319 147.76834) + (xy 331.713179 147.768335) (xy 331.452743 147.660459) (xy 331.180439 147.587495) (xy 330.900958 147.5507) + (xy 330.900951 147.5507) (xy 330.619049 147.5507) (xy 330.619041 147.5507) (xy 330.33956 147.587495) + (xy 330.067256 147.660459) (xy 329.80682 147.768335) (xy 329.806809 147.76834) (xy 329.56269 147.909283) + (xy 329.562684 147.909287) (xy 329.562683 147.909288) (xy 329.542108 147.925076) (xy 329.339029 148.080904) + (xy 329.139704 148.280229) (xy 328.968089 148.503882) (xy 328.968083 148.50389) (xy 328.82714 148.748009) + (xy 328.827135 148.74802) (xy 328.719259 149.008456) (xy 328.646295 149.28076) (xy 328.6095 149.560241) + (xy 309.621799 149.560241) (xy 309.621799 148.651192) (xy 309.611299 148.548403) (xy 309.556114 148.381866) + (xy 309.464012 148.232544) (xy 309.339956 148.108488) (xy 309.190634 148.016386) (xy 309.024097 147.961201) + (xy 309.024095 147.9612) (xy 308.921316 147.9507) (xy 308.921309 147.9507) (xy 306.106082 147.9507) + (xy 306.039043 147.931015) (xy 306.030596 147.925076) (xy 305.847131 147.784299) (xy 305.585971 147.633518) + (xy 305.585961 147.633514) (xy 305.30736 147.518113) (xy 305.016066 147.440061) (xy 304.717093 147.400701) + (xy 304.717088 147.4007) (xy 304.717083 147.4007) (xy 304.415517 147.4007) (xy 304.415511 147.4007) + (xy 304.415506 147.400701) (xy 304.116533 147.440061) (xy 303.825239 147.518113) (xy 303.546638 147.633514) + (xy 303.546628 147.633518) (xy 303.285468 147.784299) (xy 303.046221 147.967879) (xy 303.046214 147.967885) + (xy 302.832985 148.181114) (xy 302.832979 148.181121) (xy 302.649399 148.420368) (xy 302.498618 148.681528) + (xy 302.498614 148.681538) (xy 302.383213 148.960139) (xy 302.305161 149.251433) (xy 302.265801 149.550406) + (xy 302.2658 149.550423) (xy 283.697999 149.550423) (xy 283.697999 148.651192) (xy 283.687499 148.548403) + (xy 283.632314 148.381866) (xy 283.540212 148.232544) (xy 283.416156 148.108488) (xy 283.266834 148.016386) + (xy 283.100297 147.961201) (xy 283.100295 147.9612) (xy 282.997516 147.9507) (xy 282.997509 147.9507) + (xy 281.285206 147.9507) (xy 281.237753 147.941261) (xy 281.191254 147.922) (xy 281.191253 147.922) + (xy 280.217753 147.922) (xy 280.127247 147.922) (xy 280.127245 147.922) (xy 280.095022 147.935347) + (xy 280.080745 147.941261) (xy 280.033294 147.9507) (xy 279.665879 147.9507) (xy 279.59884 147.931015) + (xy 279.590393 147.925076) (xy 279.569826 147.909294) (xy 279.569809 147.909283) (xy 279.32569 147.76834) + (xy 279.325679 147.768335) (xy 279.065243 147.660459) (xy 278.792939 147.587495) (xy 278.513458 147.5507) + (xy 278.513451 147.5507) (xy 278.231549 147.5507) (xy 278.231541 147.5507) (xy 277.95206 147.587495) + (xy 277.679756 147.660459) (xy 277.41932 147.768335) (xy 277.419309 147.76834) (xy 277.17519 147.909283) + (xy 277.175184 147.909287) (xy 277.175183 147.909288) (xy 277.154608 147.925076) (xy 276.951529 148.080904) + (xy 276.752204 148.280229) (xy 276.580589 148.503882) (xy 276.580583 148.50389) (xy 276.43964 148.748009) + (xy 276.439635 148.74802) (xy 276.331759 149.008456) (xy 276.258795 149.28076) (xy 276.222 149.560241) + (xy 264.647999 149.560241) (xy 264.647999 148.651192) (xy 264.637499 148.548403) (xy 264.582314 148.381866) + (xy 264.490212 148.232544) (xy 264.366156 148.108488) (xy 264.216834 148.016386) (xy 264.050297 147.961201) + (xy 264.050295 147.9612) (xy 263.947516 147.9507) (xy 263.947509 147.9507) (xy 262.235206 147.9507) + (xy 262.187753 147.941261) (xy 262.141254 147.922) (xy 262.141253 147.922) (xy 261.167753 147.922) + (xy 260.575061 147.922) (xy 260.513061 147.905387) (xy 260.27569 147.76834) (xy 260.275679 147.768335) + (xy 260.015243 147.660459) (xy 259.742939 147.587495) (xy 259.463458 147.5507) (xy 259.463451 147.5507) + (xy 259.181549 147.5507) (xy 259.181541 147.5507) (xy 258.90206 147.587495) (xy 258.629756 147.660459) + (xy 258.36932 147.768335) (xy 258.369309 147.76834) (xy 258.12519 147.909283) (xy 258.125184 147.909287) + (xy 258.125183 147.909288) (xy 258.104608 147.925076) (xy 257.901529 148.080904) (xy 257.702204 148.280229) + (xy 257.530589 148.503882) (xy 257.530583 148.50389) (xy 257.38964 148.748009) (xy 257.389635 148.74802) + (xy 257.281759 149.008456) (xy 257.208795 149.28076) (xy 257.172 149.560241) (xy 245.597999 149.560241) + (xy 245.597999 148.651192) (xy 245.587499 148.548403) (xy 245.532314 148.381866) (xy 245.440212 148.232544) + (xy 245.316156 148.108488) (xy 245.166834 148.016386) (xy 245.000297 147.961201) (xy 245.000295 147.9612) + (xy 244.897516 147.9507) (xy 244.897509 147.9507) (xy 243.185206 147.9507) (xy 243.137753 147.941261) + (xy 243.091254 147.922) (xy 243.091253 147.922) (xy 242.117753 147.922) (xy 242.027247 147.922) + (xy 242.027245 147.922) (xy 241.995022 147.935347) (xy 241.980745 147.941261) (xy 241.933294 147.9507) + (xy 241.565879 147.9507) (xy 241.49884 147.931015) (xy 241.490393 147.925076) (xy 241.469826 147.909294) + (xy 241.469809 147.909283) (xy 241.22569 147.76834) (xy 241.225679 147.768335) (xy 240.965243 147.660459) + (xy 240.692939 147.587495) (xy 240.413458 147.5507) (xy 240.413451 147.5507) (xy 240.131549 147.5507) + (xy 240.131541 147.5507) (xy 239.85206 147.587495) (xy 239.579756 147.660459) (xy 239.31932 147.768335) + (xy 239.319309 147.76834) (xy 239.07519 147.909283) (xy 239.075184 147.909287) (xy 239.075183 147.909288) + (xy 239.054608 147.925076) (xy 238.851529 148.080904) (xy 238.652204 148.280229) (xy 238.480589 148.503882) + (xy 238.480583 148.50389) (xy 238.33964 148.748009) (xy 238.339635 148.74802) (xy 238.231759 149.008456) + (xy 238.158795 149.28076) (xy 238.122 149.560241) (xy 226.547999 149.560241) (xy 226.547999 148.651192) + (xy 226.537499 148.548403) (xy 226.482314 148.381866) (xy 226.390212 148.232544) (xy 226.266156 148.108488) + (xy 226.116834 148.016386) (xy 225.950297 147.961201) (xy 225.950295 147.9612) (xy 225.847516 147.9507) + (xy 225.847509 147.9507) (xy 224.135206 147.9507) (xy 224.087753 147.941261) (xy 224.041254 147.922) + (xy 224.041253 147.922) (xy 223.067753 147.922) (xy 222.977247 147.922) (xy 222.977245 147.922) + (xy 222.945022 147.935347) (xy 222.930745 147.941261) (xy 222.883294 147.9507) (xy 222.515879 147.9507) + (xy 222.44884 147.931015) (xy 222.440393 147.925076) (xy 222.419826 147.909294) (xy 222.419809 147.909283) + (xy 222.17569 147.76834) (xy 222.175679 147.768335) (xy 221.915243 147.660459) (xy 221.642939 147.587495) + (xy 221.363458 147.5507) (xy 221.363451 147.5507) (xy 221.081549 147.5507) (xy 221.081541 147.5507) + (xy 220.80206 147.587495) (xy 220.529756 147.660459) (xy 220.26932 147.768335) (xy 220.269309 147.76834) + (xy 220.02519 147.909283) (xy 220.025184 147.909287) (xy 220.025183 147.909288) (xy 220.004608 147.925076) + (xy 219.801529 148.080904) (xy 219.602204 148.280229) (xy 219.430589 148.503882) (xy 219.430583 148.50389) + (xy 219.28964 148.748009) (xy 219.289635 148.74802) (xy 219.181759 149.008456) (xy 219.108795 149.28076) + (xy 219.072 149.560241) (xy 207.497999 149.560241) (xy 207.497999 148.651192) (xy 207.487499 148.548403) + (xy 207.432314 148.381866) (xy 207.340212 148.232544) (xy 207.216156 148.108488) (xy 207.066834 148.016386) + (xy 206.900297 147.961201) (xy 206.900295 147.9612) (xy 206.797516 147.9507) (xy 206.797509 147.9507) + (xy 205.085506 147.9507) (xy 205.038053 147.941261) (xy 204.991554 147.922) (xy 204.991553 147.922) + (xy 204.017753 147.922) (xy 203.425061 147.922) (xy 203.363061 147.905387) (xy 203.12569 147.76834) + (xy 203.125679 147.768335) (xy 202.865243 147.660459) (xy 202.592939 147.587495) (xy 202.313458 147.5507) + (xy 202.313451 147.5507) (xy 202.031549 147.5507) (xy 202.031541 147.5507) (xy 201.75206 147.587495) + (xy 201.479756 147.660459) (xy 201.21932 147.768335) (xy 201.219309 147.76834) (xy 200.97519 147.909283) + (xy 200.975184 147.909287) (xy 200.975183 147.909288) (xy 200.954608 147.925076) (xy 200.751529 148.080904) + (xy 200.552204 148.280229) (xy 200.380589 148.503882) (xy 200.380583 148.50389) (xy 200.23964 148.748009) + (xy 200.239635 148.74802) (xy 200.131759 149.008456) (xy 200.058795 149.28076) (xy 200.022 149.560241) + (xy 188.447999 149.560241) (xy 188.447999 148.651192) (xy 188.437499 148.548403) (xy 188.382314 148.381866) + (xy 188.290212 148.232544) (xy 188.166156 148.108488) (xy 188.016834 148.016386) (xy 187.850297 147.961201) + (xy 187.850295 147.9612) (xy 187.747516 147.9507) (xy 187.747509 147.9507) (xy 185.795381 147.9507) + (xy 185.795373 147.9507) (xy 185.061706 147.9507) (xy 185.014253 147.941261) (xy 184.967753 147.922) + (xy 184.375061 147.922) (xy 184.313061 147.905387) (xy 184.07569 147.76834) (xy 184.075679 147.768335) + (xy 183.815243 147.660459) (xy 183.542939 147.587495) (xy 183.263458 147.5507) (xy 183.263451 147.5507) + (xy 182.981549 147.5507) (xy 182.981541 147.5507) (xy 182.70206 147.587495) (xy 182.429756 147.660459) + (xy 182.16932 147.768335) (xy 182.169309 147.76834) (xy 181.92519 147.909283) (xy 181.925184 147.909287) + (xy 181.925183 147.909288) (xy 181.904608 147.925076) (xy 181.701529 148.080904) (xy 181.502204 148.280229) + (xy 181.330589 148.503882) (xy 181.330583 148.50389) (xy 181.18964 148.748009) (xy 181.189635 148.74802) + (xy 181.081759 149.008456) (xy 181.008795 149.28076) (xy 180.972 149.560241) (xy 169.397999 149.560241) + (xy 169.397999 148.651192) (xy 169.387499 148.548403) (xy 169.332314 148.381866) (xy 169.240212 148.232544) + (xy 169.116156 148.108488) (xy 168.966834 148.016386) (xy 168.800297 147.961201) (xy 168.800295 147.9612) + (xy 168.697516 147.9507) (xy 168.697509 147.9507) (xy 166.985206 147.9507) (xy 166.937753 147.941261) + (xy 166.891254 147.922) (xy 166.891253 147.922) (xy 165.917753 147.922) (xy 165.325061 147.922) + (xy 165.263061 147.905387) (xy 165.02569 147.76834) (xy 165.025679 147.768335) (xy 164.765243 147.660459) + (xy 164.492939 147.587495) (xy 164.213458 147.5507) (xy 164.213451 147.5507) (xy 163.931549 147.5507) + (xy 163.931541 147.5507) (xy 163.65206 147.587495) (xy 163.379756 147.660459) (xy 163.11932 147.768335) + (xy 163.119309 147.76834) (xy 162.87519 147.909283) (xy 162.875184 147.909287) (xy 162.875183 147.909288) + (xy 162.854608 147.925076) (xy 162.651529 148.080904) (xy 162.452204 148.280229) (xy 162.280589 148.503882) + (xy 162.280583 148.50389) (xy 162.13964 148.748009) (xy 162.139635 148.74802) (xy 162.031759 149.008456) + (xy 161.958795 149.28076) (xy 161.922 149.560241) (xy 150.347999 149.560241) (xy 150.347999 148.651192) + (xy 150.337499 148.548403) (xy 150.282314 148.381866) (xy 150.190212 148.232544) (xy 150.066156 148.108488) + (xy 149.916834 148.016386) (xy 149.750297 147.961201) (xy 149.750295 147.9612) (xy 149.647516 147.9507) + (xy 149.647509 147.9507) (xy 147.695381 147.9507) (xy 147.695373 147.9507) (xy 146.961706 147.9507) + (xy 146.914253 147.941261) (xy 146.867753 147.922) (xy 146.275061 147.922) (xy 146.213061 147.905387) + (xy 145.97569 147.76834) (xy 145.975679 147.768335) (xy 145.715243 147.660459) (xy 145.442939 147.587495) + (xy 145.163458 147.5507) (xy 145.163451 147.5507) (xy 144.881549 147.5507) (xy 144.881541 147.5507) + (xy 144.60206 147.587495) (xy 144.329756 147.660459) (xy 144.06932 147.768335) (xy 144.069309 147.76834) + (xy 143.82519 147.909283) (xy 143.825184 147.909287) (xy 143.825183 147.909288) (xy 143.804608 147.925076) + (xy 143.601529 148.080904) (xy 143.402204 148.280229) (xy 143.230589 148.503882) (xy 143.230583 148.50389) + (xy 143.08964 148.748009) (xy 143.089635 148.74802) (xy 142.981759 149.008456) (xy 142.908795 149.28076) + (xy 142.872 149.560241) (xy 138.20175 149.560241) (xy 138.20175 149.546158) (xy 138.20175 149.546155) + (xy 138.201749 149.546153) (xy 138.190816 149.491191) (xy 138.170987 149.391503) (xy 138.152209 149.346169) + (xy 138.110647 149.245827) (xy 138.11064 149.245814) (xy 138.023039 149.114711) (xy 138.023036 149.114707) + (xy 137.911542 149.003213) (xy 137.911538 149.00321) (xy 137.780435 148.915609) (xy 137.780422 148.915602) + (xy 137.634751 148.855264) (xy 137.634739 148.855261) (xy 137.480095 148.8245) (xy 137.480092 148.8245) + (xy 137.322408 148.8245) (xy 137.322405 148.8245) (xy 137.16776 148.855261) (xy 137.167748 148.855264) + (xy 137.022077 148.915602) (xy 137.022064 148.915609) (xy 136.890961 149.00321) (xy 136.890957 149.003213) + (xy 136.779463 149.114707) (xy 136.77946 149.114711) (xy 136.691859 149.245814) (xy 136.691857 149.245818) + (xy 136.689532 149.251432) (xy 136.660734 149.320954) (xy 136.616896 149.375356) (xy 136.550602 149.397421) + (xy 136.546175 149.3975) (xy 135.206325 149.3975) (xy 135.139286 149.377815) (xy 135.093531 149.325011) + (xy 135.091784 149.321) (xy 135.060644 149.245821) (xy 135.060642 149.245818) (xy 135.06064 149.245814) + (xy 134.973039 149.114711) (xy 134.973036 149.114707) (xy 134.861542 149.003213) (xy 134.861538 149.00321) + (xy 134.730435 148.915609) (xy 134.730422 148.915602) (xy 134.584751 148.855264) (xy 134.584739 148.855261) + (xy 134.430095 148.8245) (xy 134.430092 148.8245) (xy 134.272408 148.8245) (xy 134.272405 148.8245) + (xy 134.11776 148.855261) (xy 134.117748 148.855264) (xy 133.972077 148.915602) (xy 133.972064 148.915609) + (xy 133.840961 149.00321) (xy 133.840957 149.003213) (xy 133.729463 149.114707) (xy 133.72946 149.114711) + (xy 133.641859 149.245814) (xy 133.641852 149.245827) (xy 133.581514 149.391498) (xy 133.581511 149.39151) + (xy 133.55075 149.546153) (xy 133.55075 149.703846) (xy 133.581511 149.858489) (xy 133.581514 149.858501) + (xy 133.641852 150.004172) (xy 133.641859 150.004185) (xy 133.72946 150.135288) (xy 133.729463 150.135292) + (xy 133.84096 150.246789) (xy 133.91888 150.298853) (xy 133.963685 150.352465) (xy 133.972392 150.42179) + (xy 133.942238 150.484817) (xy 133.888994 150.519661) (xy 133.778166 150.556386) (xy 133.778163 150.556387) + (xy 133.628842 150.648489) (xy 133.504789 150.772542) (xy 133.412687 150.921863) (xy 133.412685 150.921868) + (xy 133.392749 150.982031) (xy 133.357501 151.088403) (xy 133.357501 151.088404) (xy 133.3575 151.088404) + (xy 133.347 151.191183) (xy 133.347 153.291201) (xy 133.347001 153.291218) (xy 133.3575 153.393996) + (xy 133.357501 153.393999) (xy 133.367445 153.424007) (xy 133.412686 153.560534) (xy 133.504788 153.709856) + (xy 133.628844 153.833912) (xy 133.778166 153.926014) (xy 133.944703 153.981199) (xy 134.047491 153.9917) + (xy 135.974618 153.991699) (xy 135.974627 153.9917) (xy 136.403351 153.991699) (xy 136.470389 154.011383) + (xy 136.516144 154.064187) (xy 136.526088 154.133346) (xy 136.503669 154.188583) (xy 136.482651 154.217511) + (xy 136.405796 154.368346) (xy 136.353481 154.529352) (xy 136.327 154.69655) (xy 136.327 154.865849) + (xy 136.353481 155.033047) (xy 136.405796 155.194053) (xy 136.482652 155.344888) (xy 136.582148 155.481834) + (xy 136.582152 155.481839) (xy 136.70186 155.601547) (xy 136.701865 155.601551) (xy 136.821317 155.688337) + (xy 136.838815 155.70105) (xy 136.934925 155.75002) (xy 136.989646 155.777903) (xy 136.989648 155.777903) + (xy 136.989651 155.777905) (xy 137.07595 155.805945) (xy 137.150652 155.830218) (xy 137.317851 155.8567) + (xy 137.317856 155.8567) (xy 137.487149 155.8567) (xy 137.654347 155.830218) (xy 137.697277 155.816269) + (xy 137.815349 155.777905) (xy 137.966185 155.70105) (xy 138.103141 155.601546) (xy 138.222846 155.481841) + (xy 138.32235 155.344885) (xy 138.399205 155.194049) (xy 138.451518 155.033047) (xy 138.478 154.865849) + (xy 138.478 154.69655) (xy 138.452428 154.535098) (xy 138.461382 154.465805) (xy 138.506379 154.412353) + (xy 138.57313 154.391713) (xy 138.574901 154.3917) (xy 138.813444 154.3917) (xy 138.813451 154.3917) + (xy 139.092942 154.354904) (xy 139.365239 154.281942) (xy 139.625683 154.174063) (xy 139.869817 154.033112) + (xy 140.093465 153.8615) (xy 140.2928 153.662165) (xy 140.360492 153.573946) (xy 140.41692 153.532744) + (xy 140.486666 153.528589) (xy 140.547586 153.562801) (xy 140.580339 153.624518) (xy 140.574526 153.694146) + (xy 140.566255 153.711433) (xy 140.510183 153.808551) (xy 140.510175 153.808568) (xy 140.400097 154.074321) + (xy 140.325646 154.352176) (xy 140.288101 154.637361) (xy 140.2881 154.637377) (xy 140.2881 154.925022) + (xy 140.288101 154.925038) (xy 140.325646 155.210223) (xy 140.400097 155.488078) (xy 140.510175 155.753831) + (xy 140.510183 155.753848) (xy 140.654004 156.002951) (xy 140.654015 156.002967) (xy 140.829121 156.231171) + (xy 140.829127 156.231178) (xy 141.032521 156.434572) (xy 141.032527 156.434577) (xy 141.260741 156.609691) + (xy 141.260748 156.609695) (xy 141.445068 156.716113) (xy 141.493284 156.76668) (xy 141.506506 156.835287) + (xy 141.480538 156.900152) (xy 141.423624 156.94068) (xy 141.383068 156.9475) (xy 138.255994 156.9475) + (xy 138.18816 156.975598) (xy 138.188161 156.975599) (xy 138.172381 156.982135) (xy 138.17238 156.982136) + (xy 137.719179 157.435338) (xy 137.272382 157.882135) (xy 137.208385 157.946132) (xy 137.197136 157.97329) + (xy 137.17817 158.019077) (xy 137.17375 158.029747) (xy 137.17375 159.379747) (xy 137.17375 159.470253) + (xy 137.208385 159.553868) (xy 137.208386 159.553869) (xy 138.295879 160.641364) (xy 138.29588 160.641364) + (xy 138.295882 160.641366) (xy 138.355007 160.665855) (xy 138.379497 160.676) (xy 138.379498 160.676) + (xy 138.470003 160.676) (xy 138.529595 160.676) (xy 138.535176 160.676505) (xy 138.562675 160.687356) + (xy 138.59104 160.695685) (xy 138.59481 160.700036) (xy 138.600169 160.702151) (xy 138.617441 160.726153) + (xy 138.636795 160.748489) (xy 138.638216 160.755024) (xy 138.640979 160.758863) (xy 138.641593 160.770546) + (xy 138.648001 160.8) (xy 138.648001 160.814678) (xy 138.662991 160.928554) (xy 138.662992 160.92856) + (xy 138.662993 160.928563) (xy 138.673446 160.953798) (xy 138.721687 161.070262) (xy 138.721688 161.070263) + (xy 138.815056 161.191944) (xy 138.936737 161.285312) (xy 139.078437 161.344007) (xy 139.192323 161.359) + (xy 140.329929 161.358999) (xy 140.396968 161.378684) (xy 140.429132 161.408603) (xy 140.503938 161.508352) + (xy 140.503939 161.508353) (xy 140.50394 161.508354) (xy 140.638132 161.632195) (xy 140.792525 161.729697) + (xy 140.923385 161.782154) (xy 140.962014 161.797639) (xy 140.962015 161.797639) (xy 140.962017 161.79764) + (xy 141.141008 161.833779) (xy 141.141002 161.833779) (xy 141.157322 161.834059) (xy 141.323584 161.83692) + (xy 141.503712 161.806958) (xy 141.560314 161.786498) (xy 141.675436 161.744885) (xy 141.675437 161.744883) + (xy 141.67544 161.744883) (xy 141.690475 161.73612) (xy 141.697159 161.732235) (xy 141.69745 161.732157) + (xy 141.725333 161.71586) (xy 141.725451 161.715792) (xy 141.728668 161.715001) (xy 141.787762 161.698999) + (xy 143.268892 161.698999) (xy 143.269014 161.699006) (xy 143.277105 161.699005) (xy 143.277108 161.699006) + (xy 143.309242 161.699002) (xy 143.371804 161.715934) (xy 143.39963 161.732191) (xy 143.399632 161.732191) + (xy 143.40578 161.735783) (xy 143.407435 161.736608) (xy 143.421578 161.74485) (xy 143.5933 161.806921) + (xy 143.773421 161.836882) (xy 143.953098 161.83379) (xy 143.955991 161.833741) (xy 144.134966 161.797605) + (xy 144.134969 161.797603) (xy 144.134974 161.797603) (xy 144.30446 161.729662) (xy 144.458846 161.632163) + (xy 144.465396 161.626119) (xy 144.59303 161.50833) (xy 144.593032 161.508328) (xy 144.594928 161.5058) + (xy 144.668196 161.408102) (xy 144.724165 161.36628) (xy 144.767398 161.358499) (xy 145.0235 161.358499) + (xy 145.5235 161.358499) (xy 145.579432 161.358499) (xy 145.663424 161.34795) (xy 145.796257 161.292929) + (xy 145.863104 161.241) (xy 145.863111 161.240994) (xy 146.330994 160.773112) (xy 146.330999 160.773106) + (xy 146.382927 160.70626) (xy 146.386142 160.6985) (xy 145.5235 160.6985) (xy 145.5235 161.358499) + (xy 145.0235 161.358499) (xy 145.0235 160.5725) (xy 145.043185 160.505461) (xy 145.095989 160.459706) + (xy 145.1475 160.4485) (xy 145.2735 160.4485) (xy 145.2735 160.3225) (xy 145.293185 160.255461) + (xy 145.345989 160.209706) (xy 145.3975 160.1985) (xy 146.4485 160.1985) (xy 146.4485 160.082353) + (xy 146.43352 159.968569) (xy 146.433518 159.968564) (xy 146.374878 159.826993) (xy 146.374875 159.826988) + (xy 146.33452 159.774396) (xy 146.309326 159.709227) (xy 146.323364 159.640782) (xy 146.334521 159.623423) + (xy 146.337381 159.619696) (xy 146.375312 159.570263) (xy 146.434007 159.428563) (xy 146.434007 159.428559) + (xy 146.43594 159.423894) (xy 146.479781 159.36949) (xy 146.546075 159.347425) (xy 146.613774 159.364704) + (xy 146.638182 159.383665) (xy 146.687431 159.432914) (xy 146.720916 159.494237) (xy 146.72375 159.520595) + (xy 146.72375 161.429404) (xy 146.704065 161.496443) (xy 146.687431 161.517085) (xy 146.043336 162.161181) + (xy 145.982013 162.194666) (xy 145.955655 162.1975) (xy 121.846846 162.1975) (xy 121.779807 162.177815) + (xy 121.759165 162.161181) (xy 121.320817 161.722833) (xy 121.287332 161.66151) (xy 121.292316 161.591818) + (xy 121.334188 161.535885) (xy 121.399652 161.511468) (xy 121.467925 161.52632) (xy 121.492592 161.544024) + (xy 121.588132 161.632195) (xy 121.742525 161.729697) (xy 121.873385 161.782154) (xy 121.912014 161.797639) + (xy 121.912015 161.797639) (xy 121.912017 161.79764) (xy 122.091008 161.833779) (xy 122.091002 161.833779) + (xy 122.107322 161.834059) (xy 122.273584 161.83692) (xy 122.453712 161.806958) (xy 122.510314 161.786498) + (xy 122.625436 161.744885) (xy 122.625437 161.744883) (xy 122.62544 161.744883) (xy 122.640475 161.73612) + (xy 122.647159 161.732235) (xy 122.64745 161.732157) (xy 122.675333 161.71586) (xy 122.675451 161.715792) + (xy 122.678668 161.715001) (xy 122.737762 161.698999) (xy 124.218892 161.698999) (xy 124.219014 161.699006) + (xy 124.227105 161.699005) (xy 124.227108 161.699006) (xy 124.259242 161.699002) (xy 124.321804 161.715934) + (xy 124.34963 161.732191) (xy 124.349632 161.732191) (xy 124.35578 161.735783) (xy 124.357435 161.736608) + (xy 124.371578 161.74485) (xy 124.5433 161.806921) (xy 124.723421 161.836882) (xy 124.903098 161.83379) + (xy 124.905991 161.833741) (xy 125.084966 161.797605) (xy 125.084969 161.797603) (xy 125.084974 161.797603) + (xy 125.25446 161.729662) (xy 125.408846 161.632163) (xy 125.415396 161.626119) (xy 125.54303 161.50833) + (xy 125.543032 161.508328) (xy 125.544928 161.5058) (xy 125.618196 161.408102) (xy 125.674165 161.36628) + (xy 125.717398 161.358499) (xy 125.9735 161.358499) (xy 126.4735 161.358499) (xy 126.529432 161.358499) + (xy 126.613424 161.34795) (xy 126.746257 161.292929) (xy 126.813104 161.241) (xy 126.813111 161.240994) + (xy 127.280994 160.773112) (xy 127.280999 160.773106) (xy 127.332927 160.70626) (xy 127.336142 160.6985) + (xy 126.4735 160.6985) (xy 126.4735 161.358499) (xy 125.9735 161.358499) (xy 125.9735 160.5725) + (xy 125.993185 160.505461) (xy 126.045989 160.459706) (xy 126.0975 160.4485) (xy 126.2235 160.4485) + (xy 126.2235 160.3225) (xy 126.243185 160.255461) (xy 126.295989 160.209706) (xy 126.3475 160.1985) + (xy 127.3985 160.1985) (xy 127.3985 160.082353) (xy 127.38352 159.968569) (xy 127.383518 159.968564) + (xy 127.324878 159.826993) (xy 127.324875 159.826988) (xy 127.28452 159.774396) (xy 127.259326 159.709227) + (xy 127.273364 159.640782) (xy 127.284521 159.623423) (xy 127.287697 159.619285) (xy 127.325312 159.570263) + (xy 127.384007 159.428563) (xy 127.399 159.314677) (xy 127.398999 158.582324) (xy 127.398378 158.577609) + (xy 127.384008 158.468445) (xy 127.384007 158.468437) (xy 127.325312 158.326737) (xy 127.231944 158.205056) + (xy 127.114203 158.114711) (xy 127.110262 158.111687) (xy 126.968563 158.052993) (xy 126.968561 158.052992) + (xy 126.854678 158.038) (xy 126.854677 158.038) (xy 126.487345 158.038) (xy 126.457904 158.029355) + (xy 126.427918 158.022832) (xy 126.422902 158.019077) (xy 126.420306 158.018315) (xy 126.399664 158.001681) + (xy 126.352368 157.954385) (xy 125.58012 157.182136) (xy 125.580115 157.182134) (xy 125.496503 157.1475) + (xy 124.021731 157.1475) (xy 123.954692 157.127815) (xy 123.908937 157.075011) (xy 123.898993 157.005853) + (xy 123.928018 156.942297) (xy 123.986796 156.904523) (xy 123.989619 156.90373) (xy 124.13938 156.863602) + (xy 124.405141 156.75352) (xy 124.654259 156.609691) (xy 124.882473 156.434577) (xy 125.085877 156.231173) + (xy 125.260991 156.002959) (xy 125.40482 155.753841) (xy 125.514902 155.48808) (xy 125.589353 155.210225) + (xy 125.6269 154.925029) (xy 125.6269 154.69655) (xy 127.437 154.69655) (xy 127.437 154.865849) + (xy 127.463481 155.033047) (xy 127.515796 155.194053) (xy 127.592652 155.344888) (xy 127.692148 155.481834) + (xy 127.692152 155.481839) (xy 127.81186 155.601547) (xy 127.811865 155.601551) (xy 127.931317 155.688337) + (xy 127.948815 155.70105) (xy 128.044925 155.75002) (xy 128.099646 155.777903) (xy 128.099648 155.777903) + (xy 128.099651 155.777905) (xy 128.18595 155.805945) (xy 128.260652 155.830218) (xy 128.427851 155.8567) + (xy 128.427856 155.8567) (xy 128.597149 155.8567) (xy 128.764347 155.830218) (xy 128.807277 155.816269) + (xy 128.925349 155.777905) (xy 129.076185 155.70105) (xy 129.213141 155.601546) (xy 129.332846 155.481841) + (xy 129.43235 155.344885) (xy 129.509205 155.194049) (xy 129.561518 155.033047) (xy 129.588 154.865849) + (xy 129.588 154.69655) (xy 129.561518 154.529352) (xy 129.516796 154.391713) (xy 129.509205 154.368351) + (xy 129.509203 154.368348) (xy 129.509203 154.368346) (xy 129.465176 154.28194) (xy 129.43235 154.217515) + (xy 129.400781 154.174064) (xy 129.332851 154.080565) (xy 129.332847 154.08056) (xy 129.213139 153.960852) + (xy 129.213134 153.960848) (xy 129.076188 153.861352) (xy 129.076187 153.861351) (xy 129.076185 153.86135) + (xy 129.022331 153.83391) (xy 128.925353 153.784496) (xy 128.764347 153.732181) (xy 128.597149 153.7057) + (xy 128.597144 153.7057) (xy 128.427856 153.7057) (xy 128.427851 153.7057) (xy 128.260652 153.732181) + (xy 128.099646 153.784496) (xy 127.948811 153.861352) (xy 127.811865 153.960848) (xy 127.81186 153.960852) + (xy 127.692152 154.08056) (xy 127.692148 154.080565) (xy 127.592652 154.217511) (xy 127.515796 154.368346) + (xy 127.463481 154.529352) (xy 127.437 154.69655) (xy 125.6269 154.69655) (xy 125.6269 154.637371) + (xy 125.589353 154.352175) (xy 125.514902 154.07432) (xy 125.40482 153.808559) (xy 125.404818 153.808556) + (xy 125.404816 153.808551) (xy 125.260995 153.559448) (xy 125.260991 153.559441) (xy 125.157069 153.424007) + (xy 125.085878 153.331228) (xy 125.085872 153.331221) (xy 124.882478 153.127827) (xy 124.882471 153.127821) + (xy 124.654267 152.952715) (xy 124.654265 152.952713) (xy 124.654259 152.952709) (xy 124.654254 152.952706) + (xy 124.654251 152.952704) (xy 124.405148 152.808883) (xy 124.405131 152.808875) (xy 124.139378 152.698797) + (xy 123.861523 152.624346) (xy 123.576338 152.586801) (xy 123.576335 152.5868) (xy 123.576329 152.5868) + (xy 123.288671 152.5868) (xy 123.288665 152.5868) (xy 123.288661 152.586801) (xy 123.003476 152.624346) + (xy 122.725621 152.698797) (xy 122.459868 152.808875) (xy 122.459851 152.808883) (xy 122.210748 152.952704) + (xy 122.210732 152.952715) (xy 121.982528 153.127821) (xy 121.982521 153.127827) (xy 121.779127 153.331221) + (xy 121.70793 153.424007) (xy 121.651501 153.465209) (xy 121.581755 153.469364) (xy 121.520835 153.435151) + (xy 121.488083 153.373434) (xy 121.493896 153.303807) (xy 121.502161 153.286531) (xy 121.555363 153.194383) + (xy 121.663242 152.933939) (xy 121.736204 152.661642) (xy 121.773 152.382151) (xy 121.773 152.100249) + (xy 121.736204 151.820758) (xy 121.663242 151.548461) (xy 121.555363 151.288017) (xy 121.555361 151.288014) + (xy 121.555359 151.288009) (xy 121.414416 151.04389) (xy 121.414412 151.043883) (xy 121.2428 150.820235) + (xy 121.242798 150.820233) (xy 121.242795 150.820229) (xy 121.04347 150.620904) (xy 120.959389 150.556386) + (xy 120.819817 150.449288) (xy 120.819811 150.449284) (xy 120.819809 150.449283) (xy 120.57569 150.30834) + (xy 120.575679 150.308335) (xy 120.315243 150.200459) (xy 120.042939 150.127495) (xy 119.763458 150.0907) + (xy 119.763451 150.0907) (xy 119.481549 150.0907) (xy 119.481541 150.0907) (xy 119.20206 150.127495) + (xy 118.929756 150.200459) (xy 118.66932 150.308335) (xy 118.669309 150.30834) (xy 118.425192 150.449281) + (xy 118.425183 150.449288) (xy 118.404606 150.465076) (xy 118.339438 150.49027) (xy 118.329122 150.4907) + (xy 114.997498 150.4907) (xy 114.997481 150.490701) (xy 114.894703 150.5012) (xy 114.8947 150.501201) + (xy 114.728168 150.556385) (xy 114.728163 150.556387) (xy 114.578842 150.648489) (xy 114.454789 150.772542) + (xy 114.362687 150.921863) (xy 114.362685 150.921868) (xy 114.342749 150.982031) (xy 114.307501 151.088403) + (xy 114.307501 151.088404) (xy 114.3075 151.088404) (xy 114.297 151.191183) (xy 114.297 153.291201) + (xy 114.297001 153.291218) (xy 114.3075 153.393996) (xy 114.307501 153.393999) (xy 114.317445 153.424007) + (xy 114.362686 153.560534) (xy 114.454788 153.709856) (xy 114.578844 153.833912) (xy 114.728166 153.926014) + (xy 114.894703 153.981199) (xy 114.997491 153.9917) (xy 116.924618 153.991699) (xy 116.924627 153.9917) + (xy 117.353351 153.991699) (xy 117.420389 154.011383) (xy 117.466144 154.064187) (xy 117.476088 154.133346) + (xy 117.453669 154.188583) (xy 117.432651 154.217511) (xy 117.355796 154.368346) (xy 117.303481 154.529352) + (xy 117.277 154.69655) (xy 117.277 154.865849) (xy 117.303481 155.033047) (xy 117.355796 155.194053) + (xy 117.432652 155.344888) (xy 117.532148 155.481834) (xy 117.532152 155.481839) (xy 117.65186 155.601547) + (xy 117.651865 155.601551) (xy 117.771317 155.688337) (xy 117.788815 155.70105) (xy 117.884925 155.75002) + (xy 117.939646 155.777903) (xy 117.939648 155.777903) (xy 117.939651 155.777905) (xy 118.02595 155.805945) + (xy 118.100652 155.830218) (xy 118.267851 155.8567) (xy 118.267856 155.8567) (xy 118.437149 155.8567) + (xy 118.604347 155.830218) (xy 118.647277 155.816269) (xy 118.765349 155.777905) (xy 118.916185 155.70105) + (xy 119.053141 155.601546) (xy 119.172846 155.481841) (xy 119.27235 155.344885) (xy 119.349205 155.194049) + (xy 119.401518 155.033047) (xy 119.428 154.865849) (xy 119.428 154.69655) (xy 119.402428 154.535098) + (xy 119.411382 154.465805) (xy 119.456379 154.412353) (xy 119.52313 154.391713) (xy 119.524901 154.3917) + (xy 119.763444 154.3917) (xy 119.763451 154.3917) (xy 120.042942 154.354904) (xy 120.315239 154.281942) + (xy 120.575683 154.174063) (xy 120.819817 154.033112) (xy 121.043465 153.8615) (xy 121.2428 153.662165) + (xy 121.310492 153.573946) (xy 121.36692 153.532744) (xy 121.436666 153.528589) (xy 121.497586 153.562801) + (xy 121.530339 153.624518) (xy 121.524526 153.694146) (xy 121.516255 153.711433) (xy 121.460183 153.808551) + (xy 121.460175 153.808568) (xy 121.350097 154.074321) (xy 121.275646 154.352176) (xy 121.238101 154.637361) + (xy 121.2381 154.637377) (xy 121.2381 154.925022) (xy 121.238101 154.925038) (xy 121.275646 155.210223) + (xy 121.350097 155.488078) (xy 121.460175 155.753831) (xy 121.460183 155.753848) (xy 121.604004 156.002951) + (xy 121.604015 156.002967) (xy 121.779121 156.231171) (xy 121.779127 156.231178) (xy 121.982521 156.434572) + (xy 121.982527 156.434577) (xy 122.210741 156.609691) (xy 122.210748 156.609695) (xy 122.459851 156.753516) + (xy 122.459856 156.753518) (xy 122.459859 156.75352) (xy 122.459863 156.753521) (xy 122.459868 156.753524) + (xy 122.473108 156.759008) (xy 122.72562 156.863602) (xy 122.875362 156.903725) (xy 122.935023 156.94009) + (xy 122.965552 157.002937) (xy 122.957257 157.072313) (xy 122.912772 157.12619) (xy 122.84622 157.147465) + (xy 122.843269 157.1475) (xy 104.971731 157.1475) (xy 104.904692 157.127815) (xy 104.858937 157.075011) + (xy 104.848993 157.005853) (xy 104.878018 156.942297) (xy 104.936796 156.904523) (xy 104.939619 156.90373) + (xy 105.08938 156.863602) (xy 105.355141 156.75352) (xy 105.604259 156.609691) (xy 105.832473 156.434577) + (xy 106.035877 156.231173) (xy 106.210991 156.002959) (xy 106.35482 155.753841) (xy 106.464902 155.48808) + (xy 106.539353 155.210225) (xy 106.5769 154.925029) (xy 106.5769 154.69655) (xy 108.387 154.69655) + (xy 108.387 154.865849) (xy 108.413481 155.033047) (xy 108.465796 155.194053) (xy 108.542652 155.344888) + (xy 108.642148 155.481834) (xy 108.642152 155.481839) (xy 108.76186 155.601547) (xy 108.761865 155.601551) + (xy 108.881317 155.688337) (xy 108.898815 155.70105) (xy 108.994925 155.75002) (xy 109.049646 155.777903) + (xy 109.049648 155.777903) (xy 109.049651 155.777905) (xy 109.13595 155.805945) (xy 109.210652 155.830218) + (xy 109.377851 155.8567) (xy 109.377856 155.8567) (xy 109.547149 155.8567) (xy 109.714347 155.830218) + (xy 109.757277 155.816269) (xy 109.875349 155.777905) (xy 110.026185 155.70105) (xy 110.163141 155.601546) + (xy 110.282846 155.481841) (xy 110.38235 155.344885) (xy 110.459205 155.194049) (xy 110.511518 155.033047) + (xy 110.538 154.865849) (xy 110.538 154.69655) (xy 110.511518 154.529352) (xy 110.466796 154.391713) + (xy 110.459205 154.368351) (xy 110.459203 154.368348) (xy 110.459203 154.368346) (xy 110.415176 154.28194) + (xy 110.38235 154.217515) (xy 110.350781 154.174064) (xy 110.282851 154.080565) (xy 110.282847 154.08056) + (xy 110.163139 153.960852) (xy 110.163134 153.960848) (xy 110.026188 153.861352) (xy 110.026187 153.861351) + (xy 110.026185 153.86135) (xy 109.972331 153.83391) (xy 109.875353 153.784496) (xy 109.714347 153.732181) + (xy 109.547149 153.7057) (xy 109.547144 153.7057) (xy 109.377856 153.7057) (xy 109.377851 153.7057) + (xy 109.210652 153.732181) (xy 109.049646 153.784496) (xy 108.898811 153.861352) (xy 108.761865 153.960848) + (xy 108.76186 153.960852) (xy 108.642152 154.08056) (xy 108.642148 154.080565) (xy 108.542652 154.217511) + (xy 108.465796 154.368346) (xy 108.413481 154.529352) (xy 108.387 154.69655) (xy 106.5769 154.69655) + (xy 106.5769 154.637371) (xy 106.539353 154.352175) (xy 106.464902 154.07432) (xy 106.35482 153.808559) + (xy 106.354818 153.808556) (xy 106.354816 153.808551) (xy 106.210995 153.559448) (xy 106.210991 153.559441) + (xy 106.107069 153.424007) (xy 106.035878 153.331228) (xy 106.035872 153.331221) (xy 105.832478 153.127827) + (xy 105.832471 153.127821) (xy 105.604267 152.952715) (xy 105.604265 152.952713) (xy 105.604259 152.952709) + (xy 105.604254 152.952706) (xy 105.604251 152.952704) (xy 105.355148 152.808883) (xy 105.355131 152.808875) + (xy 105.089378 152.698797) (xy 104.811523 152.624346) (xy 104.526338 152.586801) (xy 104.526335 152.5868) + (xy 104.526329 152.5868) (xy 104.238671 152.5868) (xy 104.238665 152.5868) (xy 104.238661 152.586801) + (xy 103.953476 152.624346) (xy 103.675621 152.698797) (xy 103.409868 152.808875) (xy 103.409851 152.808883) + (xy 103.160748 152.952704) (xy 103.160732 152.952715) (xy 102.932528 153.127821) (xy 102.932521 153.127827) + (xy 102.729127 153.331221) (xy 102.65793 153.424007) (xy 102.601501 153.465209) (xy 102.531755 153.469364) + (xy 102.470835 153.435151) (xy 102.438083 153.373434) (xy 102.443896 153.303807) (xy 102.452161 153.286531) + (xy 102.505363 153.194383) (xy 102.613242 152.933939) (xy 102.686204 152.661642) (xy 102.723 152.382151) + (xy 102.723 152.100249) (xy 102.686204 151.820758) (xy 102.613242 151.548461) (xy 102.505363 151.288017) + (xy 102.505361 151.288014) (xy 102.505359 151.288009) (xy 102.364416 151.04389) (xy 102.364412 151.043883) + (xy 102.1928 150.820235) (xy 102.192798 150.820233) (xy 102.192795 150.820229) (xy 101.99347 150.620904) + (xy 101.909389 150.556386) (xy 101.769817 150.449288) (xy 101.769811 150.449284) (xy 101.769809 150.449283) + (xy 101.52569 150.30834) (xy 101.525679 150.308335) (xy 101.265243 150.200459) (xy 100.992939 150.127495) + (xy 100.713458 150.0907) (xy 100.713451 150.0907) (xy 100.431549 150.0907) (xy 100.431541 150.0907) + (xy 100.15206 150.127495) (xy 99.879756 150.200459) (xy 99.61932 150.308335) (xy 99.619309 150.30834) + (xy 99.375192 150.449281) (xy 99.375183 150.449288) (xy 99.354606 150.465076) (xy 99.289438 150.49027) + (xy 99.279122 150.4907) (xy 95.947498 150.4907) (xy 95.947481 150.490701) (xy 95.844703 150.5012) + (xy 95.8447 150.501201) (xy 95.678168 150.556385) (xy 95.678163 150.556387) (xy 95.528842 150.648489) + (xy 95.404789 150.772542) (xy 95.312687 150.921863) (xy 95.312685 150.921868) (xy 95.292749 150.982031) + (xy 95.257501 151.088403) (xy 95.257501 151.088404) (xy 95.2575 151.088404) (xy 95.247 151.191183) + (xy 81.112685 151.191183) (xy 81.134012 151.169856) (xy 81.226114 151.020534) (xy 81.281299 150.853997) + (xy 81.2918 150.751209) (xy 81.291799 149.560241) (xy 104.772 149.560241) (xy 104.772 149.842158) + (xy 104.808795 150.121639) (xy 104.881759 150.393943) (xy 104.989635 150.654379) (xy 104.98964 150.65439) + (xy 105.104883 150.853995) (xy 105.130588 150.898517) (xy 105.276294 151.088404) (xy 105.302204 151.12217) + (xy 105.501529 151.321495) (xy 105.501533 151.321498) (xy 105.501535 151.3215) (xy 105.725183 151.493112) + (xy 105.72519 151.493116) (xy 105.969309 151.634059) (xy 105.969314 151.634061) (xy 105.969317 151.634063) + (xy 106.229761 151.741942) (xy 106.502058 151.814904) (xy 106.781549 151.8517) (xy 106.781556 151.8517) + (xy 107.063444 151.8517) (xy 107.063451 151.8517) (xy 107.342942 151.814904) (xy 107.615239 151.741942) + (xy 107.875683 151.634063) (xy 108.119817 151.493112) (xy 108.140392 151.477323) (xy 108.20556 151.452129) + (xy 108.215879 151.451699) (xy 109.397482 151.451699) (xy 109.397491 151.4517) (xy 111.547508 151.451699) + (xy 111.650297 151.441199) (xy 111.816834 151.386014) (xy 111.966156 151.293912) (xy 112.090212 151.169856) + (xy 112.182314 151.020534) (xy 112.237499 150.853997) (xy 112.248 150.751209) (xy 112.247999 149.560241) + (xy 123.822 149.560241) (xy 123.822 149.842158) (xy 123.858795 150.121639) (xy 123.931759 150.393943) + (xy 124.039635 150.654379) (xy 124.03964 150.65439) (xy 124.154883 150.853995) (xy 124.180588 150.898517) + (xy 124.326294 151.088404) (xy 124.352204 151.12217) (xy 124.551529 151.321495) (xy 124.551533 151.321498) + (xy 124.551535 151.3215) (xy 124.775183 151.493112) (xy 124.77519 151.493116) (xy 125.019309 151.634059) + (xy 125.019314 151.634061) (xy 125.019317 151.634063) (xy 125.279761 151.741942) (xy 125.552058 151.814904) + (xy 125.831549 151.8517) (xy 125.831556 151.8517) (xy 126.113444 151.8517) (xy 126.113451 151.8517) + (xy 126.392942 151.814904) (xy 126.665239 151.741942) (xy 126.925683 151.634063) (xy 127.169817 151.493112) + (xy 127.190392 151.477323) (xy 127.25556 151.452129) (xy 127.265879 151.451699) (xy 128.447482 151.451699) + (xy 128.447491 151.4517) (xy 130.597508 151.451699) (xy 130.700297 151.441199) (xy 130.866834 151.386014) + (xy 131.016156 151.293912) (xy 131.140212 151.169856) (xy 131.232314 151.020534) (xy 131.287499 150.853997) + (xy 131.298 150.751209) (xy 131.297999 148.651192) (xy 131.287499 148.548403) (xy 131.232314 148.381866) + (xy 131.140212 148.232544) (xy 131.016156 148.108488) (xy 130.866834 148.016386) (xy 130.700297 147.961201) + (xy 130.700295 147.9612) (xy 130.597516 147.9507) (xy 130.597509 147.9507) (xy 128.885206 147.9507) + (xy 128.837753 147.941261) (xy 128.791254 147.922) (xy 128.791253 147.922) (xy 127.817753 147.922) + (xy 127.727247 147.922) (xy 127.727245 147.922) (xy 127.695022 147.935347) (xy 127.680745 147.941261) + (xy 127.633294 147.9507) (xy 127.265879 147.9507) (xy 127.19884 147.931015) (xy 127.190393 147.925076) + (xy 127.169826 147.909294) (xy 127.169809 147.909283) (xy 126.92569 147.76834) (xy 126.925679 147.768335) + (xy 126.665243 147.660459) (xy 126.392939 147.587495) (xy 126.113458 147.5507) (xy 126.113451 147.5507) + (xy 125.831549 147.5507) (xy 125.831541 147.5507) (xy 125.55206 147.587495) (xy 125.279756 147.660459) + (xy 125.01932 147.768335) (xy 125.019309 147.76834) (xy 124.77519 147.909283) (xy 124.775184 147.909287) + (xy 124.775183 147.909288) (xy 124.754608 147.925076) (xy 124.551529 148.080904) (xy 124.352204 148.280229) + (xy 124.180589 148.503882) (xy 124.180583 148.50389) (xy 124.03964 148.748009) (xy 124.039635 148.74802) + (xy 123.931759 149.008456) (xy 123.858795 149.28076) (xy 123.822 149.560241) (xy 112.247999 149.560241) + (xy 112.247999 148.651192) (xy 112.237499 148.548403) (xy 112.182314 148.381866) (xy 112.090212 148.232544) + (xy 111.966156 148.108488) (xy 111.816834 148.016386) (xy 111.650297 147.961201) (xy 111.650295 147.9612) + (xy 111.547516 147.9507) (xy 111.547509 147.9507) (xy 109.835206 147.9507) (xy 109.787753 147.941261) + (xy 109.741254 147.922) (xy 109.741253 147.922) (xy 108.767753 147.922) (xy 108.677247 147.922) + (xy 108.677245 147.922) (xy 108.645022 147.935347) (xy 108.630745 147.941261) (xy 108.583294 147.9507) + (xy 108.215879 147.9507) (xy 108.14884 147.931015) (xy 108.140393 147.925076) (xy 108.119826 147.909294) + (xy 108.119809 147.909283) (xy 107.87569 147.76834) (xy 107.875679 147.768335) (xy 107.615243 147.660459) + (xy 107.342939 147.587495) (xy 107.063458 147.5507) (xy 107.063451 147.5507) (xy 106.781549 147.5507) + (xy 106.781541 147.5507) (xy 106.50206 147.587495) (xy 106.229756 147.660459) (xy 105.96932 147.768335) + (xy 105.969309 147.76834) (xy 105.72519 147.909283) (xy 105.725184 147.909287) (xy 105.725183 147.909288) + (xy 105.704608 147.925076) (xy 105.501529 148.080904) (xy 105.302204 148.280229) (xy 105.130589 148.503882) + (xy 105.130583 148.50389) (xy 104.98964 148.748009) (xy 104.989635 148.74802) (xy 104.881759 149.008456) + (xy 104.808795 149.28076) (xy 104.772 149.560241) (xy 81.291799 149.560241) (xy 81.291799 148.651192) + (xy 81.281299 148.548403) (xy 81.226114 148.381866) (xy 81.134012 148.232544) (xy 81.009956 148.108488) + (xy 80.860634 148.016386) (xy 80.694097 147.961201) (xy 80.694095 147.9612) (xy 80.591316 147.9507) + (xy 80.591309 147.9507) (xy 78.879706 147.9507) (xy 78.832253 147.941261) (xy 78.785754 147.922) + (xy 78.785753 147.922) (xy 77.811553 147.922) (xy 77.721047 147.922) (xy 77.721045 147.922) (xy 77.688822 147.935347) + (xy 77.674545 147.941261) (xy 77.627094 147.9507) (xy 77.259679 147.9507) (xy 77.19264 147.931015) + (xy 77.184193 147.925076) (xy 77.163626 147.909294) (xy 77.163609 147.909283) (xy 76.95094 147.786498) + (xy 76.91949 147.76834) (xy 76.919479 147.768335) (xy 76.713853 147.683162) (xy 83.60805 147.683162) + (xy 83.60805 147.909237) (xy 83.630651 148.0809) (xy 83.637557 148.133355) (xy 83.696065 148.351712) + (xy 83.782575 148.560563) (xy 83.782577 148.560568) (xy 83.78258 148.560573) (xy 83.895603 148.756335) + (xy 84.033218 148.935679) (xy 84.033224 148.935686) (xy 84.193063 149.095525) (xy 84.19307 149.095531) + (xy 84.372414 149.233146) (xy 84.568176 149.346169) (xy 84.568178 149.346169) (xy 84.568187 149.346175) + (xy 84.777038 149.432685) (xy 84.995395 149.491193) (xy 85.21952 149.5207) (xy 85.219527 149.5207) + (xy 85.445573 149.5207) (xy 85.44558 149.5207) (xy 85.669705 149.491193) (xy 85.888062 149.432685) + (xy 86.096913 149.346175) (xy 86.292686 149.233146) (xy 86.472031 149.09553) (xy 86.63188 148.935681) + (xy 86.769496 148.756336) (xy 86.882525 148.560563) (xy 86.969035 148.351712) (xy 87.027543 148.133355) + (xy 87.05705 147.90923) (xy 87.05705 147.68317) (xy 87.027543 147.459045) (xy 86.969035 147.240688) + (xy 86.882525 147.031837) (xy 86.769496 146.836064) (xy 86.63188 146.656719) (xy 86.631875 146.656713) + (xy 86.472036 146.496874) (xy 86.472029 146.496868) (xy 86.292685 146.359253) (xy 86.096923 146.24623) + (xy 86.096918 146.246227) (xy 86.096913 146.246225) (xy 85.888062 146.159715) (xy 85.669705 146.101207) + (xy 85.632247 146.096275) (xy 85.445587 146.0717) (xy 85.44558 146.0717) (xy 85.21952 146.0717) + (xy 85.219512 146.0717) (xy 85.006185 146.099786) (xy 84.995395 146.101207) (xy 84.922609 146.120709) + (xy 84.777044 146.159713) (xy 84.77704 146.159714) (xy 84.777038 146.159715) (xy 84.568187 146.246225) + (xy 84.568184 146.246226) (xy 84.568176 146.24623) (xy 84.372414 146.359253) (xy 84.19307 146.496868) + (xy 84.193063 146.496874) (xy 84.033224 146.656713) (xy 84.033218 146.65672) (xy 83.895603 146.836064) + (xy 83.78258 147.031826) (xy 83.782576 147.031834) (xy 83.782575 147.031837) (xy 83.696065 147.240688) + (xy 83.642644 147.440062) (xy 83.637558 147.459042) (xy 83.637556 147.459053) (xy 83.60805 147.683162) + (xy 76.713853 147.683162) (xy 76.659043 147.660459) (xy 76.386739 147.587495) (xy 76.107258 147.5507) + (xy 76.107251 147.5507) (xy 75.825349 147.5507) (xy 75.825341 147.5507) (xy 75.54586 147.587495) + (xy 75.273556 147.660459) (xy 75.01312 147.768335) (xy 75.013109 147.76834) (xy 74.76899 147.909283) + (xy 74.768984 147.909287) (xy 74.768983 147.909288) (xy 74.748408 147.925076) (xy 74.545329 148.080904) + (xy 74.346004 148.280229) (xy 74.174389 148.503882) (xy 74.174383 148.50389) (xy 74.03344 148.748009) + (xy 74.033435 148.74802) (xy 73.925559 149.008456) (xy 73.852595 149.28076) (xy 73.8158 149.560241) + (xy 45.35175 149.560241) (xy 45.35175 147.683162) (xy 59.79555 147.683162) (xy 59.79555 147.909237) + (xy 59.818151 148.0809) (xy 59.825057 148.133355) (xy 59.883565 148.351712) (xy 59.970075 148.560563) + (xy 59.970077 148.560568) (xy 59.97008 148.560573) (xy 60.083103 148.756335) (xy 60.220718 148.935679) + (xy 60.220724 148.935686) (xy 60.380563 149.095525) (xy 60.38057 149.095531) (xy 60.559914 149.233146) + (xy 60.755676 149.346169) (xy 60.755678 149.346169) (xy 60.755687 149.346175) (xy 60.964538 149.432685) + (xy 61.182895 149.491193) (xy 61.40702 149.5207) (xy 61.407027 149.5207) (xy 61.633073 149.5207) + (xy 61.63308 149.5207) (xy 61.857205 149.491193) (xy 62.075562 149.432685) (xy 62.284413 149.346175) + (xy 62.480186 149.233146) (xy 62.659531 149.09553) (xy 62.81938 148.935681) (xy 62.956996 148.756336) + (xy 63.070025 148.560563) (xy 63.156535 148.351712) (xy 63.215043 148.133355) (xy 63.24455 147.90923) + (xy 63.24455 147.68317) (xy 63.215043 147.459045) (xy 63.156535 147.240688) (xy 63.070025 147.031837) + (xy 62.956996 146.836064) (xy 62.81938 146.656719) (xy 62.819375 146.656713) (xy 62.659536 146.496874) + (xy 62.659529 146.496868) (xy 62.480185 146.359253) (xy 62.284423 146.24623) (xy 62.284418 146.246227) + (xy 62.284413 146.246225) (xy 62.075562 146.159715) (xy 61.857205 146.101207) (xy 61.819747 146.096275) + (xy 61.633087 146.0717) (xy 61.63308 146.0717) (xy 61.40702 146.0717) (xy 61.407012 146.0717) (xy 61.193685 146.099786) + (xy 61.182895 146.101207) (xy 61.110109 146.120709) (xy 60.964544 146.159713) (xy 60.96454 146.159714) + (xy 60.964538 146.159715) (xy 60.755687 146.246225) (xy 60.755684 146.246226) (xy 60.755676 146.24623) + (xy 60.559914 146.359253) (xy 60.38057 146.496868) (xy 60.380563 146.496874) (xy 60.220724 146.656713) + (xy 60.220718 146.65672) (xy 60.083103 146.836064) (xy 59.97008 147.031826) (xy 59.970076 147.031834) + (xy 59.970075 147.031837) (xy 59.883565 147.240688) (xy 59.830144 147.440062) (xy 59.825058 147.459042) + (xy 59.825056 147.459053) (xy 59.79555 147.683162) (xy 45.35175 147.683162) (xy 45.35175 132.141183) + (xy 59.5283 132.141183) (xy 59.5283 134.241201) (xy 59.528301 134.241218) (xy 59.5388 134.343996) + (xy 59.538801 134.343999) (xy 59.548745 134.374007) (xy 59.593986 134.510534) (xy 59.686088 134.659856) + (xy 59.810144 134.783912) (xy 59.959466 134.876014) (xy 60.126003 134.931199) (xy 60.228791 134.9417) + (xy 62.155918 134.941699) (xy 62.155927 134.9417) (xy 62.584651 134.941699) (xy 62.651689 134.961383) + (xy 62.697444 135.014187) (xy 62.707388 135.083346) (xy 62.684969 135.138583) (xy 62.663951 135.167511) + (xy 62.587096 135.318346) (xy 62.534781 135.479352) (xy 62.5083 135.64655) (xy 62.5083 135.815849) + (xy 62.534781 135.983047) (xy 62.587096 136.144053) (xy 62.663952 136.294888) (xy 62.763448 136.431834) + (xy 62.763452 136.431839) (xy 62.88316 136.551547) (xy 62.883165 136.551551) (xy 63.002617 136.638337) + (xy 63.020115 136.65105) (xy 63.116225 136.70002) (xy 63.170946 136.727903) (xy 63.170948 136.727903) + (xy 63.170951 136.727905) (xy 63.25725 136.755945) (xy 63.331952 136.780218) (xy 63.499151 136.8067) + (xy 63.499156 136.8067) (xy 63.668449 136.8067) (xy 63.835647 136.780218) (xy 63.996649 136.727905) + (xy 64.147485 136.65105) (xy 64.284441 136.551546) (xy 64.404146 136.431841) (xy 64.50365 136.294885) + (xy 64.580505 136.144049) (xy 64.632818 135.983047) (xy 64.649925 135.875038) (xy 64.6593 135.815849) + (xy 64.6593 135.64655) (xy 64.633728 135.485098) (xy 64.642682 135.415805) (xy 64.687679 135.362353) + (xy 64.75443 135.341713) (xy 64.756201 135.3417) (xy 64.994744 135.3417) (xy 64.994751 135.3417) + (xy 65.274242 135.304904) (xy 65.546539 135.231942) (xy 65.806983 135.124063) (xy 66.051117 134.983112) + (xy 66.274765 134.8115) (xy 66.4741 134.612165) (xy 66.541792 134.523946) (xy 66.59822 134.482744) + (xy 66.667966 134.478589) (xy 66.728886 134.512801) (xy 66.761639 134.574518) (xy 66.755826 134.644146) + (xy 66.747555 134.661433) (xy 66.691483 134.758551) (xy 66.691475 134.758568) (xy 66.581397 135.024321) + (xy 66.506946 135.302176) (xy 66.469401 135.587361) (xy 66.4694 135.587377) (xy 66.4694 135.875022) + (xy 66.469401 135.875038) (xy 66.506946 136.160223) (xy 66.581397 136.438078) (xy 66.691475 136.703831) + (xy 66.691483 136.703848) (xy 66.835304 136.952951) (xy 66.835315 136.952967) (xy 67.010421 137.181171) + (xy 67.010427 137.181178) (xy 67.213821 137.384572) (xy 67.213828 137.384578) (xy 67.376323 137.509264) + (xy 67.442041 137.559691) (xy 67.442048 137.559695) (xy 67.691151 137.703516) (xy 67.691156 137.703518) + (xy 67.691159 137.70352) (xy 67.691163 137.703521) (xy 67.691168 137.703524) (xy 67.72293 137.71668) + (xy 67.95692 137.813602) (xy 68.234775 137.888053) (xy 68.519971 137.9256) (xy 68.519978 137.9256) + (xy 68.807622 137.9256) (xy 68.807629 137.9256) (xy 69.092825 137.888053) (xy 69.37068 137.813602) + (xy 69.636441 137.70352) (xy 69.885559 137.559691) (xy 70.113773 137.384577) (xy 70.317177 137.181173) + (xy 70.492291 136.952959) (xy 70.63612 136.703841) (xy 70.746202 136.43808) (xy 70.820653 136.160225) + (xy 70.8582 135.875029) (xy 70.8582 135.759213) (xy 70.877885 135.692174) (xy 70.930689 135.646419) + (xy 70.999847 135.636475) (xy 71.035717 135.647356) (xy 71.043711 135.65118) (xy 71.048221 135.654194) + (xy 71.06154 135.659711) (xy 71.064517 135.661135) (xy 71.088129 135.682345) (xy 71.112852 135.702266) + (xy 71.113937 135.705528) (xy 71.116495 135.707825) (xy 71.124891 135.738432) (xy 71.134921 135.768559) + (xy 71.135 135.772992) (xy 71.135 138.5546) (xy 71.115315 138.621639) (xy 71.062511 138.667394) + (xy 71.011 138.6786) (xy 70.856073 138.6786) (xy 70.789034 138.658915) (xy 70.756872 138.628998) + (xy 70.682061 138.529244) (xy 70.547869 138.405404) (xy 70.547866 138.405402) (xy 70.547865 138.405401) + (xy 70.547862 138.405399) (xy 70.393477 138.307901) (xy 70.223987 138.239958) (xy 70.223977 138.239956) + (xy 70.044992 138.203818) (xy 70.044999 138.203818) (xy 69.873294 138.200865) (xy 69.862418 138.200678) + (xy 69.862417 138.200678) (xy 69.862414 138.200678) (xy 69.682297 138.230638) (xy 69.682284 138.230641) + (xy 69.510563 138.292713) (xy 69.496048 138.30117) (xy 69.495963 138.301219) (xy 69.488876 138.30534) + (xy 69.48863 138.305408) (xy 69.460838 138.321644) (xy 69.46059 138.321789) (xy 69.457863 138.322459) + (xy 69.398246 138.338596) (xy 69.357901 138.338593) (xy 69.357797 138.3386) (xy 67.917096 138.3386) + (xy 67.908914 138.338598) (xy 67.908892 138.338593) (xy 67.878965 138.338595) (xy 67.876728 138.338595) + (xy 67.876446 138.338512) (xy 67.814193 138.321662) (xy 67.786371 138.305408) (xy 67.780305 138.301864) + (xy 67.778607 138.301017) (xy 67.771257 138.296734) (xy 67.764421 138.29275) (xy 67.592697 138.230678) + (xy 67.592691 138.230677) (xy 67.412581 138.200719) (xy 67.412578 138.200719) (xy 67.404039 138.200865) + (xy 67.230007 138.203859) (xy 67.051034 138.239994) (xy 67.051023 138.239997) (xy 66.881542 138.307937) + (xy 66.881541 138.307937) (xy 66.727161 138.405432) (xy 66.727158 138.405434) (xy 66.636804 138.488818) + (xy 66.592969 138.529272) (xy 66.521733 138.624261) (xy 66.518181 138.628997) (xy 66.462211 138.670819) + (xy 66.418978 138.6786) (xy 65.281321 138.6786) (xy 65.167445 138.693591) (xy 65.167437 138.693593) + (xy 65.025737 138.752287) (xy 64.904056 138.845656) (xy 64.810687 138.967337) (xy 64.751993 139.109036) + (xy 64.751992 139.109038) (xy 64.737 139.222922) (xy 64.737 139.955278) (xy 64.751991 140.069154) + (xy 64.751992 140.06916) (xy 64.751993 140.069163) (xy 64.775536 140.125999) (xy 64.810687 140.210862) + (xy 64.851165 140.263615) (xy 64.876358 140.328784) (xy 64.862319 140.397229) (xy 64.851165 140.414585) + (xy 64.810687 140.467337) (xy 64.751993 140.609036) (xy 64.751992 140.609038) (xy 64.737 140.722922) + (xy 64.737 141.455278) (xy 64.751991 141.569154) (xy 64.751992 141.56916) (xy 64.751993 141.569163) + (xy 64.776305 141.627857) (xy 64.810687 141.710862) (xy 64.810688 141.710863) (xy 64.904056 141.832544) + (xy 65.025737 141.925912) (xy 65.03545 141.929935) (xy 65.089855 141.973775) (xy 65.111921 142.040069) + (xy 65.112 142.044497) (xy 65.112 142.081146) (xy 65.142761 142.235789) (xy 65.142764 142.235801) + (xy 65.203102 142.381472) (xy 65.203109 142.381485) (xy 65.29071 142.512588) (xy 65.290713 142.512592) + (xy 65.402207 142.624086) (xy 65.402211 142.624089) (xy 65.533314 142.71169) (xy 65.533327 142.711697) + (xy 65.660664 142.764441) (xy 65.679003 142.772037) (xy 65.802102 142.796523) (xy 65.833653 142.802799) + (xy 65.833656 142.8028) (xy 65.833658 142.8028) (xy 65.991344 142.8028) (xy 65.991345 142.802799) + (xy 66.145997 142.772037) (xy 66.276455 142.718) (xy 66.291672 142.711697) (xy 66.291672 142.711696) + (xy 66.291679 142.711694) (xy 66.422789 142.624089) (xy 66.534289 142.512589) (xy 66.621894 142.381479) + (xy 66.62307 142.378639) (xy 66.624084 142.377381) (xy 66.624764 142.376109) (xy 66.625005 142.376237) + (xy 66.666905 142.324234) (xy 66.733197 142.302163) (xy 66.800898 142.319437) (xy 66.803845 142.321241) + (xy 66.832915 142.339599) (xy 66.881525 142.370297) (xy 67.016677 142.424474) (xy 67.051014 142.438239) + (xy 67.051015 142.438239) (xy 67.051017 142.43824) (xy 67.230008 142.474379) (xy 67.230002 142.474379) + (xy 67.246322 142.474659) (xy 67.412584 142.47752) (xy 67.592712 142.447558) (xy 67.648207 142.427498) + (xy 67.764436 142.385485) (xy 67.764437 142.385483) (xy 67.76444 142.385483) (xy 67.779475 142.37672) + (xy 67.786159 142.372835) (xy 67.78645 142.372757) (xy 67.814333 142.35646) (xy 67.814451 142.356392) + (xy 67.817668 142.355601) (xy 67.876762 142.339599) (xy 69.357892 142.339599) (xy 69.358014 142.339606) + (xy 69.366105 142.339605) (xy 69.366108 142.339606) (xy 69.398242 142.339602) (xy 69.460804 142.356534) + (xy 69.48863 142.372791) (xy 69.488632 142.372791) (xy 69.49478 142.376383) (xy 69.496435 142.377208) + (xy 69.510578 142.38545) (xy 69.6823 142.447521) (xy 69.862421 142.477482) (xy 70.042098 142.47439) + (xy 70.044991 142.474341) (xy 70.223966 142.438205) (xy 70.223969 142.438203) (xy 70.223974 142.438203) + (xy 70.39346 142.370262) (xy 70.547846 142.272763) (xy 70.559347 142.26215) (xy 70.68203 142.14893) + (xy 70.682032 142.148928) (xy 70.68727 142.141944) (xy 70.757196 142.048702) (xy 70.813165 142.00688) + (xy 70.856398 141.999099) (xy 71.1125 141.999099) (xy 71.6125 141.999099) (xy 71.668432 141.999099) + (xy 71.752424 141.98855) (xy 71.885257 141.933529) (xy 71.952104 141.8816) (xy 71.952111 141.881594) + (xy 72.419994 141.413712) (xy 72.419999 141.413706) (xy 72.471927 141.34686) (xy 72.475142 141.3391) + (xy 71.6125 141.3391) (xy 71.6125 141.999099) (xy 71.1125 141.999099) (xy 71.1125 141.2131) (xy 71.132185 141.146061) + (xy 71.184989 141.100306) (xy 71.2365 141.0891) (xy 71.3625 141.0891) (xy 71.3625 140.9631) (xy 71.382185 140.896061) + (xy 71.434989 140.850306) (xy 71.4865 140.8391) (xy 72.5375 140.8391) (xy 72.5375 140.722953) (xy 72.52252 140.609169) + (xy 72.522518 140.609164) (xy 72.463878 140.467593) (xy 72.463875 140.467588) (xy 72.42352 140.414996) + (xy 72.398326 140.349827) (xy 72.412364 140.281382) (xy 72.423521 140.264023) (xy 72.464312 140.210863) + (xy 72.48792 140.153868) (xy 72.523007 140.069163) (xy 72.538 139.955277) (xy 72.537999 139.222924) + (xy 72.537999 139.222922) (xy 90.9308 139.222922) (xy 90.9308 139.955278) (xy 90.945791 140.069154) + (xy 90.945792 140.06916) (xy 90.945793 140.069163) (xy 90.969336 140.125999) (xy 91.004487 140.210862) + (xy 91.044965 140.263615) (xy 91.070158 140.328784) (xy 91.056119 140.397229) (xy 91.044965 140.414585) + (xy 91.004487 140.467337) (xy 90.945793 140.609036) (xy 90.945792 140.609038) (xy 90.9308 140.722922) + (xy 90.9308 141.455278) (xy 90.945791 141.569154) (xy 90.945792 141.56916) (xy 90.945793 141.569163) + (xy 90.970105 141.627857) (xy 91.004487 141.710862) (xy 91.004488 141.710863) (xy 91.097856 141.832544) + (xy 91.219537 141.925912) (xy 91.361237 141.984607) (xy 91.475123 141.9996) (xy 91.794565 141.999599) + (xy 91.861604 142.019283) (xy 91.907359 142.072087) (xy 91.909124 142.076141) (xy 91.913434 142.086546) + (xy 91.913436 142.086549) (xy 92.909615 143.082727) (xy 92.973612 143.146724) (xy 93.057227 143.181359) + (xy 93.057228 143.181359) (xy 105.658893 143.181359) (xy 105.658894 143.181359) (xy 105.742509 143.146724) + (xy 109.51762 139.371613) (xy 109.578942 139.338129) (xy 109.648634 139.343113) (xy 109.704567 139.384985) + (xy 109.728984 139.450449) (xy 109.7293 139.459295) (xy 109.7293 140.109978) (xy 109.744291 140.223854) + (xy 109.744292 140.22386) (xy 109.744293 140.223863) (xy 109.768119 140.281382) (xy 109.802987 140.365562) + (xy 109.843465 140.418315) (xy 109.868658 140.483484) (xy 109.854619 140.551929) (xy 109.843465 140.569285) + (xy 109.802987 140.622037) (xy 109.744293 140.763736) (xy 109.744292 140.763738) (xy 109.7293 140.877622) + (xy 109.7293 141.609978) (xy 109.744291 141.723854) (xy 109.744292 141.72386) (xy 109.744293 141.723863) + (xy 109.763296 141.76974) (xy 109.802987 141.865562) (xy 109.802988 141.865563) (xy 109.896356 141.987244) + (xy 110.018037 142.080612) (xy 110.159737 142.139307) (xy 110.273623 142.1543) (xy 110.699484 142.154299) + (xy 110.766523 142.173983) (xy 110.787165 142.190618) (xy 112.008727 143.412182) (xy 112.008728 143.412182) + (xy 112.00873 143.412184) (xy 112.06785 143.436671) (xy 112.067853 143.436673) (xy 112.067854 143.436673) + (xy 112.077999 143.440875) (xy 112.092345 143.446818) (xy 136.702184 143.446818) (xy 136.702185 143.446818) + (xy 136.7858 143.412183) (xy 138.094115 142.103868) (xy 138.095244 142.101142) (xy 138.102742 142.083042) + (xy 138.128749 142.020255) (xy 138.12875 142.020253) (xy 138.12875 140.129747) (xy 138.127198 140.126) + (xy 138.094116 140.046132) (xy 137.444218 139.396235) (xy 137.360603 139.3616) (xy 136.955799 139.3616) + (xy 136.88876 139.341915) (xy 136.843005 139.289111) (xy 136.831799 139.2376) (xy 136.831799 139.222921) + (xy 136.816808 139.109045) (xy 136.816807 139.109037) (xy 136.758112 138.967337) (xy 136.664744 138.845656) + (xy 136.543063 138.752288) (xy 136.543062 138.752287) (xy 136.401363 138.693593) (xy 136.401361 138.693592) + (xy 136.287478 138.6786) (xy 136.287477 138.6786) (xy 135.149873 138.6786) (xy 135.145544 138.677328) + (xy 135.141136 138.678292) (xy 135.112324 138.667574) (xy 135.082834 138.658915) (xy 135.078694 138.655064) + (xy 135.07565 138.653932) (xy 135.050671 138.628998) (xy 135.029596 138.600895) (xy 135.005123 138.535455) + (xy 135.019915 138.467169) (xy 135.069276 138.41772) (xy 135.128799 138.4025) (xy 150.137053 138.4025) + (xy 150.204092 138.422185) (xy 150.249847 138.474989) (xy 150.259791 138.544147) (xy 150.230766 138.607703) + (xy 150.203264 138.631343) (xy 150.071061 138.714832) (xy 150.071058 138.714834) (xy 149.942693 138.833297) + (xy 149.936869 138.838672) (xy 149.880554 138.913765) (xy 149.862081 138.938397) (xy 149.806111 138.980219) + (xy 149.762878 138.988) (xy 148.625221 138.988) (xy 148.511345 139.002991) (xy 148.511337 139.002993) + (xy 148.369637 139.061687) (xy 148.247956 139.155056) (xy 148.154587 139.276737) (xy 148.095893 139.418436) + (xy 148.095892 139.418438) (xy 148.0809 139.532322) (xy 148.0809 140.264678) (xy 148.095891 140.378554) + (xy 148.095893 140.378562) (xy 148.154587 140.520262) (xy 148.195065 140.573015) (xy 148.220258 140.638184) + (xy 148.206219 140.706629) (xy 148.195065 140.723985) (xy 148.154587 140.776737) (xy 148.095893 140.918436) + (xy 148.095892 140.918438) (xy 148.0809 141.032322) (xy 148.0809 141.764678) (xy 148.095891 141.878554) + (xy 148.095892 141.87856) (xy 148.095893 141.878563) (xy 148.115506 141.925912) (xy 148.154587 142.020262) + (xy 148.154588 142.020263) (xy 148.247956 142.141944) (xy 148.369637 142.235312) (xy 148.511337 142.294007) + (xy 148.625223 142.309) (xy 148.904901 142.308999) (xy 148.971939 142.328683) (xy 149.017694 142.381487) + (xy 149.0289 142.432999) (xy 149.0289 142.634897) (xy 149.0289 142.725403) (xy 149.063535 142.809018) + (xy 149.063536 142.809019) (xy 149.722382 143.467866) (xy 149.722384 143.467868) (xy 149.787051 143.494652) + (xy 149.805997 143.5025) (xy 149.805999 143.5025) (xy 162.246502 143.5025) (xy 162.246503 143.5025) + (xy 162.330118 143.467865) (xy 167.100043 138.69794) (xy 167.161364 138.664457) (xy 167.231056 138.669441) + (xy 167.286989 138.711313) (xy 167.311406 138.776777) (xy 167.296554 138.84505) (xy 167.286098 138.861109) + (xy 167.204587 138.967336) (xy 167.145893 139.109036) (xy 167.145892 139.109038) (xy 167.1309 139.222922) + (xy 167.1309 139.955278) (xy 167.145891 140.069154) (xy 167.145892 140.06916) (xy 167.145893 140.069163) + (xy 167.169436 140.125999) (xy 167.204587 140.210862) (xy 167.245065 140.263615) (xy 167.270258 140.328784) + (xy 167.256219 140.397229) (xy 167.245065 140.414585) (xy 167.204587 140.467337) (xy 167.145893 140.609036) + (xy 167.145892 140.609038) (xy 167.1309 140.722922) (xy 167.1309 141.455278) (xy 167.145891 141.569154) + (xy 167.145892 141.56916) (xy 167.145893 141.569163) (xy 167.170205 141.627857) (xy 167.204587 141.710862) + (xy 167.204588 141.710863) (xy 167.297956 141.832544) (xy 167.419637 141.925912) (xy 167.561337 141.984607) + (xy 167.675223 141.9996) (xy 167.964646 141.999599) (xy 168.031685 142.019283) (xy 168.07744 142.072087) + (xy 168.079206 142.076144) (xy 168.113535 142.159018) (xy 168.113536 142.15902) (xy 169.408385 143.453868) + (xy 169.472382 143.517865) (xy 169.555997 143.5525) (xy 169.555998 143.5525) (xy 174.746502 143.5525) + (xy 174.746503 143.5525) (xy 174.830118 143.517865) (xy 179.809164 138.538819) (xy 179.870487 138.505334) + (xy 179.896845 138.5025) (xy 188.268674 138.5025) (xy 188.281649 138.506309) (xy 188.295138 138.505357) + (xy 188.314519 138.515961) (xy 188.335713 138.522185) (xy 188.344566 138.532402) (xy 188.356432 138.538895) + (xy 188.367003 138.558296) (xy 188.381468 138.574989) (xy 188.383392 138.588373) (xy 188.389863 138.600248) + (xy 188.388267 138.62228) (xy 188.391412 138.644147) (xy 188.385685 138.657955) (xy 188.384818 138.669935) + (xy 188.367876 138.700897) (xy 188.30578 138.783697) (xy 188.24981 138.825519) (xy 188.206578 138.8333) + (xy 187.068921 138.8333) (xy 186.955045 138.848291) (xy 186.955037 138.848293) (xy 186.813337 138.906987) + (xy 186.691656 139.000356) (xy 186.598287 139.122037) (xy 186.539593 139.263736) (xy 186.539592 139.263738) + (xy 186.5246 139.377622) (xy 186.5246 140.109978) (xy 186.539591 140.223854) (xy 186.539592 140.22386) + (xy 186.539593 140.223863) (xy 186.563419 140.281382) (xy 186.598287 140.365562) (xy 186.638765 140.418315) + (xy 186.663958 140.483484) (xy 186.649919 140.551929) (xy 186.638765 140.569285) (xy 186.598287 140.622037) + (xy 186.539593 140.763736) (xy 186.539592 140.763738) (xy 186.5246 140.877622) (xy 186.5246 141.609978) + (xy 186.539591 141.723854) (xy 186.539592 141.72386) (xy 186.539593 141.723863) (xy 186.558596 141.76974) + (xy 186.598287 141.865562) (xy 186.598288 141.865563) (xy 186.691656 141.987244) (xy 186.813337 142.080612) + (xy 186.955037 142.139307) (xy 187.068923 142.1543) (xy 187.348601 142.154299) (xy 187.415639 142.173983) + (xy 187.461394 142.226787) (xy 187.4726 142.278299) (xy 187.4726 142.627494) (xy 187.4726 142.718) + (xy 187.507235 142.801615) (xy 187.507236 142.801616) (xy 188.522234 143.816615) (xy 188.522236 143.816617) + (xy 188.584391 143.842361) (xy 188.605849 143.851249) (xy 191.306303 143.851249) (xy 191.353751 143.860686) + (xy 191.367753 143.866486) (xy 191.367758 143.866487) (xy 191.367761 143.866488) (xy 191.522403 143.897248) + (xy 191.522406 143.897249) (xy 191.522408 143.897249) (xy 191.680094 143.897249) (xy 191.680095 143.897248) + (xy 191.756402 143.882069) (xy 191.834738 143.866488) (xy 191.834739 143.866487) (xy 191.834747 143.866486) + (xy 191.848748 143.860686) (xy 191.896197 143.851249) (xy 199.563703 143.851249) (xy 199.563704 143.851249) + (xy 199.585123 143.842377) (xy 302.21315 143.842377) (xy 302.21315 144.130022) (xy 302.213151 144.130038) + (xy 302.250696 144.415223) (xy 302.325147 144.693078) (xy 302.435225 144.958831) (xy 302.435233 144.958848) + (xy 302.579054 145.207951) (xy 302.579065 145.207967) (xy 302.754171 145.436171) (xy 302.754177 145.436178) + (xy 302.957571 145.639572) (xy 302.957577 145.639577) (xy 303.185791 145.814691) (xy 303.185798 145.814695) + (xy 303.434901 145.958516) (xy 303.434906 145.958518) (xy 303.434909 145.95852) (xy 303.434913 145.958521) + (xy 303.434918 145.958524) (xy 303.540273 146.002163) (xy 303.70067 146.068602) (xy 303.978525 146.143053) + (xy 304.263721 146.1806) (xy 304.263728 146.1806) (xy 304.551372 146.1806) (xy 304.551379 146.1806) + (xy 304.836575 146.143053) (xy 305.11443 146.068602) (xy 305.380191 145.95852) (xy 305.629309 145.814691) + (xy 305.857523 145.639577) (xy 306.060927 145.436173) (xy 306.236041 145.207959) (xy 306.37987 144.958841) + (xy 306.489952 144.69308) (xy 306.564403 144.415225) (xy 306.60195 144.130029) (xy 306.60195 143.842377) + (xy 326.02565 143.842377) (xy 326.02565 144.130022) (xy 326.025651 144.130038) (xy 326.063196 144.415223) + (xy 326.137647 144.693078) (xy 326.247725 144.958831) (xy 326.247733 144.958848) (xy 326.391554 145.207951) + (xy 326.391565 145.207967) (xy 326.566671 145.436171) (xy 326.566677 145.436178) (xy 326.770071 145.639572) + (xy 326.770077 145.639577) (xy 326.998291 145.814691) (xy 326.998298 145.814695) (xy 327.247401 145.958516) + (xy 327.247406 145.958518) (xy 327.247409 145.95852) (xy 327.247413 145.958521) (xy 327.247418 145.958524) + (xy 327.352773 146.002163) (xy 327.51317 146.068602) (xy 327.791025 146.143053) (xy 328.076221 146.1806) + (xy 328.076228 146.1806) (xy 328.363872 146.1806) (xy 328.363879 146.1806) (xy 328.649075 146.143053) + (xy 328.92693 146.068602) (xy 329.192691 145.95852) (xy 329.441809 145.814691) (xy 329.670023 145.639577) + (xy 329.873427 145.436173) (xy 330.048541 145.207959) (xy 330.19237 144.958841) (xy 330.302452 144.69308) + (xy 330.376903 144.415225) (xy 330.41445 144.130029) (xy 330.41445 143.842371) (xy 330.376903 143.557175) + (xy 330.302452 143.27932) (xy 330.225966 143.094666) (xy 330.192374 143.013568) (xy 330.192366 143.013551) + (xy 330.048545 142.764448) (xy 330.048541 142.764441) (xy 329.955604 142.643323) (xy 329.873428 142.536228) + (xy 329.873422 142.536221) (xy 329.670028 142.332827) (xy 329.670021 142.332821) (xy 329.441817 142.157715) + (xy 329.441815 142.157713) (xy 329.441809 142.157709) (xy 329.441804 142.157706) (xy 329.441801 142.157704) + (xy 329.192698 142.013883) (xy 329.192681 142.013875) (xy 328.926928 141.903797) (xy 328.649073 141.829346) + (xy 328.363888 141.791801) (xy 328.363885 141.7918) (xy 328.363879 141.7918) (xy 328.076221 141.7918) + (xy 328.076215 141.7918) (xy 328.076211 141.791801) (xy 327.791026 141.829346) (xy 327.513171 141.903797) + (xy 327.247418 142.013875) (xy 327.247401 142.013883) (xy 326.998298 142.157704) (xy 326.998282 142.157715) + (xy 326.770078 142.332821) (xy 326.770071 142.332827) (xy 326.566677 142.536221) (xy 326.566671 142.536228) + (xy 326.391565 142.764432) (xy 326.391554 142.764448) (xy 326.247733 143.013551) (xy 326.247725 143.013568) + (xy 326.137647 143.279321) (xy 326.063196 143.557176) (xy 326.025651 143.842361) (xy 326.02565 143.842377) + (xy 306.60195 143.842377) (xy 306.60195 143.842371) (xy 306.564403 143.557175) (xy 306.489952 143.27932) + (xy 306.413466 143.094666) (xy 306.379874 143.013568) (xy 306.379866 143.013551) (xy 306.236045 142.764448) + (xy 306.236041 142.764441) (xy 306.143104 142.643323) (xy 306.060928 142.536228) (xy 306.060922 142.536221) + (xy 305.857528 142.332827) (xy 305.857521 142.332821) (xy 305.629317 142.157715) (xy 305.629315 142.157713) + (xy 305.629309 142.157709) (xy 305.629304 142.157706) (xy 305.629301 142.157704) (xy 305.380198 142.013883) + (xy 305.380181 142.013875) (xy 305.114428 141.903797) (xy 304.836573 141.829346) (xy 304.551388 141.791801) + (xy 304.551385 141.7918) (xy 304.551379 141.7918) (xy 304.263721 141.7918) (xy 304.263715 141.7918) + (xy 304.263711 141.791801) (xy 303.978526 141.829346) (xy 303.700671 141.903797) (xy 303.434918 142.013875) + (xy 303.434901 142.013883) (xy 303.185798 142.157704) (xy 303.185782 142.157715) (xy 302.957578 142.332821) + (xy 302.957571 142.332827) (xy 302.754177 142.536221) (xy 302.754171 142.536228) (xy 302.579065 142.764432) + (xy 302.579054 142.764448) (xy 302.435233 143.013551) (xy 302.435225 143.013568) (xy 302.325147 143.279321) + (xy 302.250696 143.557176) (xy 302.213151 143.842361) (xy 302.21315 143.842377) (xy 199.585123 143.842377) + (xy 199.647319 143.816614) (xy 199.647321 143.816612) (xy 199.647322 143.816612) (xy 199.713303 143.750631) + (xy 204.925114 138.538819) (xy 204.986437 138.505334) (xy 205.012795 138.5025) (xy 206.974974 138.5025) + (xy 206.987949 138.506309) (xy 207.001438 138.505357) (xy 207.020819 138.515961) (xy 207.042013 138.522185) + (xy 207.050866 138.532402) (xy 207.062732 138.538895) (xy 207.073303 138.558296) (xy 207.087768 138.574989) + (xy 207.089692 138.588373) (xy 207.096163 138.600248) (xy 207.094567 138.62228) (xy 207.097712 138.644147) + (xy 207.091985 138.657955) (xy 207.091118 138.669935) (xy 207.074176 138.700897) (xy 207.01208 138.783697) + (xy 206.95611 138.825519) (xy 206.912878 138.8333) (xy 205.775221 138.8333) (xy 205.661345 138.848291) + (xy 205.661337 138.848293) (xy 205.519637 138.906987) (xy 205.397956 139.000356) (xy 205.304587 139.122037) + (xy 205.245893 139.263736) (xy 205.245892 139.263738) (xy 205.2309 139.377622) (xy 205.2309 140.109978) + (xy 205.245891 140.223854) (xy 205.245892 140.22386) (xy 205.245893 140.223863) (xy 205.269719 140.281382) + (xy 205.304587 140.365562) (xy 205.345065 140.418315) (xy 205.370258 140.483484) (xy 205.356219 140.551929) + (xy 205.345065 140.569285) (xy 205.304587 140.622037) (xy 205.245893 140.763736) (xy 205.245892 140.763738) + (xy 205.2309 140.877622) (xy 205.2309 141.609978) (xy 205.245891 141.723854) (xy 205.245892 141.72386) + (xy 205.245893 141.723863) (xy 205.264896 141.76974) (xy 205.304587 141.865562) (xy 205.304588 141.865563) + (xy 205.397956 141.987244) (xy 205.519637 142.080612) (xy 205.661337 142.139307) (xy 205.775223 142.1543) + (xy 206.110693 142.154299) (xy 206.177732 142.173983) (xy 206.204754 142.200527) (xy 206.204899 142.200383) + (xy 207.489885 143.485368) (xy 207.553882 143.549365) (xy 207.637497 143.584) (xy 207.637498 143.584) + (xy 213.621452 143.584) (xy 213.621453 143.584) (xy 213.705068 143.549365) (xy 213.70507 143.549363) + (xy 213.705071 143.549363) (xy 219.462663 137.791771) (xy 219.462663 137.791769) (xy 219.462665 137.791768) + (xy 219.472977 137.766873) (xy 219.4973 137.708153) (xy 219.4973 135.04579) (xy 219.516985 134.978751) + (xy 219.569789 134.932996) (xy 219.638947 134.923052) (xy 219.660296 134.928082) (xy 219.669703 134.931199) + (xy 219.772491 134.9417) (xy 221.699618 134.941699) (xy 221.699627 134.9417) (xy 222.128351 134.941699) + (xy 222.195389 134.961383) (xy 222.241144 135.014187) (xy 222.251088 135.083346) (xy 222.228669 135.138583) + (xy 222.207651 135.167511) (xy 222.130796 135.318346) (xy 222.078481 135.479352) (xy 222.052 135.64655) + (xy 222.052 135.815849) (xy 222.078481 135.983047) (xy 222.130796 136.144053) (xy 222.207652 136.294888) + (xy 222.307148 136.431834) (xy 222.307152 136.431839) (xy 222.42686 136.551547) (xy 222.426865 136.551551) + (xy 222.546317 136.638337) (xy 222.563815 136.65105) (xy 222.659925 136.70002) (xy 222.714646 136.727903) + (xy 222.714648 136.727903) (xy 222.714651 136.727905) (xy 222.80095 136.755945) (xy 222.875652 136.780218) + (xy 223.042851 136.8067) (xy 223.042856 136.8067) (xy 223.212149 136.8067) (xy 223.379347 136.780218) + (xy 223.540349 136.727905) (xy 223.691185 136.65105) (xy 223.828141 136.551546) (xy 223.947846 136.431841) + (xy 224.04735 136.294885) (xy 224.124205 136.144049) (xy 224.176518 135.983047) (xy 224.193625 135.875038) + (xy 224.203 135.815849) (xy 224.203 135.64655) (xy 224.177428 135.485098) (xy 224.186382 135.415805) + (xy 224.231379 135.362353) (xy 224.29813 135.341713) (xy 224.299901 135.3417) (xy 224.538444 135.3417) + (xy 224.538451 135.3417) (xy 224.817942 135.304904) (xy 225.090239 135.231942) (xy 225.350683 135.124063) + (xy 225.594817 134.983112) (xy 225.818465 134.8115) (xy 226.0178 134.612165) (xy 226.085492 134.523946) + (xy 226.14192 134.482744) (xy 226.211666 134.478589) (xy 226.272586 134.512801) (xy 226.305339 134.574518) + (xy 226.299526 134.644146) (xy 226.291255 134.661433) (xy 226.235183 134.758551) (xy 226.235175 134.758568) + (xy 226.125097 135.024321) (xy 226.050646 135.302176) (xy 226.013101 135.587361) (xy 226.0131 135.587377) + (xy 226.0131 135.875022) (xy 226.013101 135.875038) (xy 226.050646 136.160223) (xy 226.125097 136.438078) + (xy 226.235175 136.703831) (xy 226.235183 136.703848) (xy 226.379004 136.952951) (xy 226.379015 136.952967) + (xy 226.554121 137.181171) (xy 226.554127 137.181178) (xy 226.757521 137.384572) (xy 226.757528 137.384578) + (xy 226.920023 137.509264) (xy 226.985741 137.559691) (xy 226.985748 137.559695) (xy 227.234851 137.703516) + (xy 227.234856 137.703518) (xy 227.234859 137.70352) (xy 227.234863 137.703521) (xy 227.234868 137.703524) + (xy 227.26663 137.71668) (xy 227.50062 137.813602) (xy 227.778475 137.888053) (xy 228.063671 137.9256) + (xy 228.063678 137.9256) (xy 228.351322 137.9256) (xy 228.351329 137.9256) (xy 228.636525 137.888053) + (xy 228.91438 137.813602) (xy 229.180141 137.70352) (xy 229.429259 137.559691) (xy 229.657473 137.384577) + (xy 229.860877 137.181173) (xy 230.035991 136.952959) (xy 230.17982 136.703841) (xy 230.289902 136.43808) + (xy 230.364353 136.160225) (xy 230.4019 135.875029) (xy 230.4019 135.587371) (xy 230.364353 135.302175) + (xy 230.289902 135.02432) (xy 230.182626 134.765335) (xy 230.175158 134.695866) (xy 230.206433 134.633387) + (xy 230.266522 134.597735) (xy 230.336347 134.600229) (xy 230.384869 134.630202) (xy 230.642581 134.887914) + (xy 230.676066 134.949237) (xy 230.6789 134.975595) (xy 230.6789 138.5546) (xy 230.659215 138.621639) + (xy 230.606411 138.667394) (xy 230.5549 138.6786) (xy 230.399973 138.6786) (xy 230.332934 138.658915) + (xy 230.300772 138.628998) (xy 230.225961 138.529244) (xy 230.091769 138.405404) (xy 230.091766 138.405402) + (xy 230.091765 138.405401) (xy 230.091762 138.405399) (xy 229.937377 138.307901) (xy 229.767887 138.239958) + (xy 229.767877 138.239956) (xy 229.588892 138.203818) (xy 229.588899 138.203818) (xy 229.417194 138.200865) + (xy 229.406318 138.200678) (xy 229.406317 138.200678) (xy 229.406314 138.200678) (xy 229.226197 138.230638) + (xy 229.226184 138.230641) (xy 229.054463 138.292713) (xy 229.039948 138.30117) (xy 229.039863 138.301219) + (xy 229.032776 138.30534) (xy 229.03253 138.305408) (xy 229.004738 138.321644) (xy 229.00449 138.321789) + (xy 229.001763 138.322459) (xy 228.942146 138.338596) (xy 228.901801 138.338593) (xy 228.901697 138.3386) + (xy 227.460996 138.3386) (xy 227.452814 138.338598) (xy 227.452792 138.338593) (xy 227.422865 138.338595) + (xy 227.420628 138.338595) (xy 227.420346 138.338512) (xy 227.358093 138.321662) (xy 227.330271 138.305408) + (xy 227.324205 138.301864) (xy 227.322507 138.301017) (xy 227.315157 138.296734) (xy 227.308321 138.29275) + (xy 227.136597 138.230678) (xy 227.136591 138.230677) (xy 226.956481 138.200719) (xy 226.956478 138.200719) + (xy 226.947939 138.200865) (xy 226.773907 138.203859) (xy 226.594934 138.239994) (xy 226.594923 138.239997) + (xy 226.425442 138.307937) (xy 226.425441 138.307937) (xy 226.271061 138.405432) (xy 226.271058 138.405434) + (xy 226.180704 138.488818) (xy 226.136869 138.529272) (xy 226.065633 138.624261) (xy 226.062081 138.628997) + (xy 226.006111 138.670819) (xy 225.962878 138.6786) (xy 224.825221 138.6786) (xy 224.711345 138.693591) + (xy 224.711337 138.693593) (xy 224.569637 138.752287) (xy 224.447956 138.845656) (xy 224.354587 138.967337) + (xy 224.295893 139.109036) (xy 224.295892 139.109038) (xy 224.2809 139.222922) (xy 224.2809 139.955278) + (xy 224.295891 140.069154) (xy 224.295892 140.06916) (xy 224.295893 140.069163) (xy 224.319436 140.125999) + (xy 224.354587 140.210862) (xy 224.395065 140.263615) (xy 224.420258 140.328784) (xy 224.406219 140.397229) + (xy 224.395065 140.414585) (xy 224.354587 140.467337) (xy 224.295893 140.609036) (xy 224.295892 140.609038) + (xy 224.2809 140.722922) (xy 224.2809 141.455278) (xy 224.295891 141.569154) (xy 224.295892 141.56916) + (xy 224.295893 141.569163) (xy 224.320205 141.627857) (xy 224.354587 141.710862) (xy 224.354588 141.710863) + (xy 224.447956 141.832544) (xy 224.569637 141.925912) (xy 224.711337 141.984607) (xy 224.825223 141.9996) + (xy 225.114646 141.999599) (xy 225.181685 142.019283) (xy 225.22744 142.072087) (xy 225.229206 142.076144) + (xy 225.263534 142.159016) (xy 225.263536 142.159019) (xy 226.272379 143.167864) (xy 226.27238 143.167864) + (xy 226.272382 143.167866) (xy 226.331502 143.192353) (xy 226.331505 143.192355) (xy 226.331506 143.192355) + (xy 226.341651 143.196557) (xy 226.355997 143.2025) (xy 231.737752 143.2025) (xy 231.737753 143.2025) + (xy 231.821368 143.167865) (xy 236.550414 138.438819) (xy 236.611737 138.405334) (xy 236.638095 138.4025) + (xy 244.923165 138.4025) (xy 244.940881 138.407702) (xy 244.959347 138.407896) (xy 244.973712 138.417342) + (xy 244.990204 138.422185) (xy 245.002294 138.436137) (xy 245.017725 138.446285) (xy 245.024702 138.461998) + (xy 245.035959 138.474989) (xy 245.038586 138.493265) (xy 245.046081 138.510142) (xy 245.043456 138.52713) + (xy 245.045903 138.544147) (xy 245.038232 138.560943) (xy 245.035413 138.579192) (xy 245.020767 138.599187) + (xy 245.016878 138.607703) (xy 245.016021 138.608682) (xy 245.011869 138.613372) (xy 244.935369 138.683972) + (xy 244.857564 138.787719) (xy 244.854234 138.791482) (xy 244.828733 138.807494) (xy 244.804611 138.825519) + (xy 244.798186 138.826675) (xy 244.795062 138.828637) (xy 244.787714 138.828559) (xy 244.761378 138.8333) + (xy 243.623721 138.8333) (xy 243.509845 138.848291) (xy 243.509837 138.848293) (xy 243.368137 138.906987) + (xy 243.246456 139.000356) (xy 243.153087 139.122037) (xy 243.094393 139.263736) (xy 243.094392 139.263738) + (xy 243.0794 139.377622) (xy 243.0794 140.109978) (xy 243.094391 140.223854) (xy 243.094392 140.22386) + (xy 243.094393 140.223863) (xy 243.118219 140.281382) (xy 243.153087 140.365562) (xy 243.193565 140.418315) + (xy 243.218758 140.483484) (xy 243.204719 140.551929) (xy 243.193565 140.569285) (xy 243.153087 140.622037) + (xy 243.094393 140.763736) (xy 243.094392 140.763738) (xy 243.0794 140.877622) (xy 243.0794 141.609978) + (xy 243.094391 141.723854) (xy 243.094392 141.72386) (xy 243.094393 141.723863) (xy 243.113396 141.76974) + (xy 243.153087 141.865562) (xy 243.153088 141.865563) (xy 243.246456 141.987244) (xy 243.368137 142.080612) + (xy 243.509837 142.139307) (xy 243.623723 142.1543) (xy 243.903401 142.154299) (xy 243.970439 142.173983) + (xy 244.016194 142.226787) (xy 244.023887 142.26215) (xy 244.025018 142.261926) (xy 244.0274 142.273903) + (xy 244.062035 142.357518) (xy 244.062036 142.357519) (xy 245.122379 143.417864) (xy 245.12238 143.417864) + (xy 245.122382 143.417866) (xy 245.181502 143.442353) (xy 245.181505 143.442355) (xy 245.181506 143.442355) + (xy 245.191651 143.446557) (xy 245.205997 143.4525) (xy 270.765522 143.4525) (xy 270.765523 143.4525) + (xy 270.849138 143.417865) (xy 271.263056 143.003948) (xy 271.29379 142.929748) (xy 271.29769 142.920333) + (xy 271.29769 139.853262) (xy 271.28886 139.831945) (xy 271.28886 139.831944) (xy 271.28886 139.831943) + (xy 271.263058 139.769652) (xy 271.263056 139.769647) (xy 270.889643 139.396235) (xy 270.806028 139.3616) + (xy 270.305999 139.3616) (xy 270.23896 139.341915) (xy 270.193205 139.289111) (xy 270.181999 139.2376) + (xy 270.181999 139.222921) (xy 270.167008 139.109045) (xy 270.167007 139.109037) (xy 270.108312 138.967337) + (xy 270.014944 138.845656) (xy 269.893263 138.752288) (xy 269.893262 138.752287) (xy 269.751563 138.693593) + (xy 269.751561 138.693592) (xy 269.637678 138.6786) (xy 269.637677 138.6786) (xy 268.500073 138.6786) + (xy 268.495743 138.677328) (xy 268.491335 138.678292) (xy 268.462519 138.667572) (xy 268.433034 138.658915) + (xy 268.428895 138.655065) (xy 268.425849 138.653932) (xy 268.400871 138.628997) (xy 268.3423 138.550897) + (xy 268.317826 138.485454) (xy 268.332618 138.417168) (xy 268.38198 138.36772) (xy 268.441502 138.3525) + (xy 283.171549 138.3525) (xy 283.238588 138.372185) (xy 283.284343 138.424989) (xy 283.294287 138.494147) + (xy 283.270751 138.550897) (xy 283.21218 138.628997) (xy 283.15621 138.670819) (xy 283.112978 138.6786) + (xy 281.975321 138.6786) (xy 281.861445 138.693591) (xy 281.861437 138.693593) (xy 281.719737 138.752287) + (xy 281.598056 138.845656) (xy 281.504687 138.967337) (xy 281.445993 139.109036) (xy 281.445992 139.109038) + (xy 281.431 139.222922) (xy 281.431 139.955278) (xy 281.445991 140.069154) (xy 281.445992 140.06916) + (xy 281.445993 140.069163) (xy 281.469536 140.125999) (xy 281.504687 140.210862) (xy 281.545165 140.263615) + (xy 281.570358 140.328784) (xy 281.556319 140.397229) (xy 281.545165 140.414585) (xy 281.504687 140.467337) + (xy 281.445993 140.609036) (xy 281.445992 140.609038) (xy 281.431 140.722922) (xy 281.431 141.455278) + (xy 281.445991 141.569154) (xy 281.445992 141.56916) (xy 281.445993 141.569163) (xy 281.470305 141.627857) + (xy 281.504687 141.710862) (xy 281.504688 141.710863) (xy 281.598056 141.832544) (xy 281.719737 141.925912) + (xy 281.72945 141.929935) (xy 281.783855 141.973775) (xy 281.805921 142.040069) (xy 281.806 142.044497) + (xy 281.806 142.101143) (xy 281.836761 142.255789) (xy 281.836764 142.255801) (xy 281.897102 142.401472) + (xy 281.897109 142.401485) (xy 281.98471 142.532588) (xy 281.984713 142.532592) (xy 282.096207 142.644086) + (xy 282.096211 142.644089) (xy 282.227314 142.73169) (xy 282.227327 142.731697) (xy 282.360647 142.786919) + (xy 282.373003 142.792037) (xy 282.527653 142.822799) (xy 282.527656 142.8228) (xy 282.527658 142.8228) + (xy 282.685344 142.8228) (xy 282.685345 142.822799) (xy 282.839997 142.792037) (xy 282.985679 142.731694) + (xy 283.116789 142.644089) (xy 283.228289 142.532589) (xy 283.315894 142.401479) (xy 283.323639 142.382779) + (xy 283.36748 142.328376) (xy 283.433773 142.30631) (xy 283.501473 142.323588) (xy 283.504412 142.325388) + (xy 283.50963 142.328683) (xy 283.575525 142.370297) (xy 283.710677 142.424474) (xy 283.745014 142.438239) + (xy 283.745015 142.438239) (xy 283.745017 142.43824) (xy 283.924008 142.474379) (xy 283.924002 142.474379) + (xy 283.940322 142.474659) (xy 284.106584 142.47752) (xy 284.286712 142.447558) (xy 284.342207 142.427498) + (xy 284.458436 142.385485) (xy 284.458437 142.385483) (xy 284.45844 142.385483) (xy 284.473475 142.37672) + (xy 284.480159 142.372835) (xy 284.48045 142.372757) (xy 284.508333 142.35646) (xy 284.508451 142.356392) + (xy 284.511668 142.355601) (xy 284.570762 142.339599) (xy 286.051892 142.339599) (xy 286.052014 142.339606) + (xy 286.060105 142.339605) (xy 286.060108 142.339606) (xy 286.092242 142.339602) (xy 286.154804 142.356534) + (xy 286.18263 142.372791) (xy 286.182632 142.372791) (xy 286.18878 142.376383) (xy 286.190435 142.377208) + (xy 286.204578 142.38545) (xy 286.3763 142.447521) (xy 286.556421 142.477482) (xy 286.736098 142.47439) + (xy 286.738991 142.474341) (xy 286.917966 142.438205) (xy 286.917969 142.438203) (xy 286.917974 142.438203) + (xy 287.08746 142.370262) (xy 287.241846 142.272763) (xy 287.253347 142.26215) (xy 287.37603 142.14893) + (xy 287.376032 142.148928) (xy 287.38127 142.141944) (xy 287.451196 142.048702) (xy 287.507165 142.00688) + (xy 287.550398 141.999099) (xy 287.8065 141.999099) (xy 288.3065 141.999099) (xy 288.362432 141.999099) + (xy 288.446424 141.98855) (xy 288.579257 141.933529) (xy 288.646104 141.8816) (xy 288.646111 141.881594) + (xy 289.113994 141.413712) (xy 289.113999 141.413706) (xy 289.165927 141.34686) (xy 289.169142 141.3391) + (xy 288.3065 141.3391) (xy 288.3065 141.999099) (xy 287.8065 141.999099) (xy 287.8065 141.2131) + (xy 287.826185 141.146061) (xy 287.878989 141.100306) (xy 287.9305 141.0891) (xy 288.0565 141.0891) + (xy 288.0565 140.9631) (xy 288.076185 140.896061) (xy 288.128989 140.850306) (xy 288.1805 140.8391) + (xy 289.2315 140.8391) (xy 289.2315 140.722953) (xy 289.21652 140.609169) (xy 289.216518 140.609164) + (xy 289.157878 140.467593) (xy 289.157875 140.467588) (xy 289.11752 140.414996) (xy 289.092326 140.349827) + (xy 289.106364 140.281382) (xy 289.117521 140.264023) (xy 289.158312 140.210863) (xy 289.18192 140.153868) + (xy 289.217007 140.069163) (xy 289.232 139.955277) (xy 289.231999 139.222924) (xy 289.231999 139.222922) + (xy 312.3872 139.222922) (xy 312.3872 139.955278) (xy 312.402191 140.069154) (xy 312.402192 140.06916) + (xy 312.402193 140.069163) (xy 312.425736 140.125999) (xy 312.460887 140.210862) (xy 312.501365 140.263615) + (xy 312.526558 140.328784) (xy 312.512519 140.397229) (xy 312.501365 140.414585) (xy 312.460887 140.467337) + (xy 312.402193 140.609036) (xy 312.402192 140.609038) (xy 312.3872 140.722922) (xy 312.3872 141.455278) + (xy 312.402191 141.569154) (xy 312.402192 141.56916) (xy 312.402193 141.569163) (xy 312.426505 141.627857) + (xy 312.460887 141.710862) (xy 312.460888 141.710863) (xy 312.554256 141.832544) (xy 312.675937 141.925912) + (xy 312.817637 141.984607) (xy 312.931523 141.9996) (xy 313.211201 141.999599) (xy 313.278239 142.019283) + (xy 313.323994 142.072087) (xy 313.3352 142.123599) (xy 313.3352 142.141197) (xy 313.3352 142.231703) + (xy 313.36701 142.308499) (xy 313.369836 142.31532) (xy 314.133657 143.07914) (xy 314.197654 143.143137) + (xy 314.281269 143.177772) (xy 314.28127 143.177772) (xy 322.67678 143.177772) (xy 322.676781 143.177772) + (xy 322.760396 143.143137) (xy 327.514714 138.388819) (xy 327.576037 138.355334) (xy 327.602395 138.3525) + (xy 341.062059 138.3525) (xy 341.129098 138.372185) (xy 341.174853 138.424989) (xy 341.184797 138.494147) + (xy 341.155772 138.557703) (xy 341.14974 138.564181) (xy 341.037213 138.676707) (xy 341.03721 138.676711) + (xy 340.949609 138.807814) (xy 340.949602 138.807827) (xy 340.889264 138.953498) (xy 340.889261 138.95351) + (xy 340.8585 139.108153) (xy 340.8585 139.265846) (xy 340.889261 139.420489) (xy 340.889264 139.420501) + (xy 340.949602 139.566172) (xy 340.949609 139.566185) (xy 341.03721 139.697288) (xy 341.037213 139.697292) + (xy 341.148707 139.808786) (xy 341.148711 139.808789) (xy 341.279814 139.89639) (xy 341.279827 139.896397) + (xy 341.424759 139.956429) (xy 341.425503 139.956737) (xy 341.580153 139.987499) (xy 341.580156 139.9875) + (xy 341.580158 139.9875) (xy 341.737844 139.9875) (xy 341.821453 139.970869) (xy 341.891045 139.977096) + (xy 341.933326 140.004805) (xy 342.044807 140.116286) (xy 342.044811 140.116289) (xy 342.175914 140.20389) + (xy 342.175927 140.203897) (xy 342.320101 140.263615) (xy 342.321603 140.264237) (xy 342.453163 140.290406) + (xy 342.476253 140.294999) (xy 342.476256 140.295) (xy 342.476258 140.295) (xy 342.633944 140.295) + (xy 342.633945 140.294999) (xy 342.788597 140.264237) (xy 342.934279 140.203894) (xy 343.065389 140.116289) + (xy 343.155225 140.026452) (xy 343.216546 139.992969) (xy 343.286238 139.997953) (xy 343.342172 140.039824) + (xy 343.357466 140.066682) (xy 343.358492 140.06916) (xy 343.358493 140.069163) (xy 343.382036 140.125999) + (xy 343.417187 140.210862) (xy 343.457665 140.263615) (xy 343.482858 140.328784) (xy 343.468819 140.397229) + (xy 343.457665 140.414585) (xy 343.417187 140.467337) (xy 343.358493 140.609036) (xy 343.358492 140.609038) + (xy 343.3435 140.722922) (xy 343.3435 141.455278) (xy 343.358491 141.569154) (xy 343.358492 141.56916) + (xy 343.358493 141.569163) (xy 343.382805 141.627857) (xy 343.417187 141.710862) (xy 343.417188 141.710863) + (xy 343.510556 141.832544) (xy 343.632237 141.925912) (xy 343.64195 141.929935) (xy 343.696355 141.973775) + (xy 343.718421 142.040069) (xy 343.7185 142.044497) (xy 343.7185 142.083046) (xy 343.749261 142.237689) + (xy 343.749264 142.237701) (xy 343.809602 142.383372) (xy 343.809609 142.383385) (xy 343.89721 142.514488) + (xy 343.897213 142.514492) (xy 344.008707 142.625986) (xy 344.008711 142.625989) (xy 344.139814 142.71359) + (xy 344.139827 142.713597) (xy 344.262577 142.764441) (xy 344.285503 142.773937) (xy 344.39905 142.796523) + (xy 344.440153 142.804699) (xy 344.440156 142.8047) (xy 344.440158 142.8047) (xy 344.597844 142.8047) + (xy 344.597845 142.804699) (xy 344.752497 142.773937) (xy 344.88858 142.71757) (xy 344.898172 142.713597) + (xy 344.898172 142.713596) (xy 344.898179 142.713594) (xy 345.029289 142.625989) (xy 345.140789 142.514489) + (xy 345.228394 142.383379) (xy 345.230195 142.37903) (xy 345.274032 142.324626) (xy 345.340325 142.302557) + (xy 345.408025 142.319833) (xy 345.410969 142.321635) (xy 345.422131 142.328684) (xy 345.488025 142.370297) + (xy 345.623177 142.424474) (xy 345.657514 142.438239) (xy 345.657515 142.438239) (xy 345.657517 142.43824) + (xy 345.836508 142.474379) (xy 345.836502 142.474379) (xy 345.852822 142.474659) (xy 346.019084 142.47752) + (xy 346.199212 142.447558) (xy 346.254707 142.427498) (xy 346.370936 142.385485) (xy 346.370937 142.385483) + (xy 346.37094 142.385483) (xy 346.385975 142.37672) (xy 346.392659 142.372835) (xy 346.39295 142.372757) + (xy 346.420833 142.35646) (xy 346.420951 142.356392) (xy 346.424168 142.355601) (xy 346.483262 142.339599) + (xy 347.964392 142.339599) (xy 347.964514 142.339606) (xy 347.972605 142.339605) (xy 347.972608 142.339606) + (xy 348.004742 142.339602) (xy 348.067304 142.356534) (xy 348.09513 142.372791) (xy 348.095132 142.372791) + (xy 348.10128 142.376383) (xy 348.102935 142.377208) (xy 348.117078 142.38545) (xy 348.2888 142.447521) + (xy 348.468921 142.477482) (xy 348.648598 142.47439) (xy 348.651491 142.474341) (xy 348.830466 142.438205) + (xy 348.830469 142.438203) (xy 348.830474 142.438203) (xy 348.99996 142.370262) (xy 349.154346 142.272763) + (xy 349.165847 142.26215) (xy 349.28853 142.14893) (xy 349.288532 142.148928) (xy 349.29377 142.141944) + (xy 349.363696 142.048702) (xy 349.419665 142.00688) (xy 349.462898 141.999099) (xy 349.719 141.999099) + (xy 350.219 141.999099) (xy 350.274932 141.999099) (xy 350.358924 141.98855) (xy 350.491757 141.933529) + (xy 350.558604 141.8816) (xy 350.558611 141.881594) (xy 351.026494 141.413712) (xy 351.026499 141.413706) + (xy 351.078427 141.34686) (xy 351.081642 141.3391) (xy 350.219 141.3391) (xy 350.219 141.999099) + (xy 349.719 141.999099) (xy 349.719 141.2131) (xy 349.738685 141.146061) (xy 349.791489 141.100306) + (xy 349.843 141.0891) (xy 349.969 141.0891) (xy 349.969 140.9631) (xy 349.988685 140.896061) (xy 350.041489 140.850306) + (xy 350.093 140.8391) (xy 351.144 140.8391) (xy 351.144 140.722953) (xy 351.12902 140.609169) (xy 351.129018 140.609164) + (xy 351.070378 140.467593) (xy 351.070375 140.467588) (xy 351.03002 140.414996) (xy 351.004826 140.349827) + (xy 351.018864 140.281382) (xy 351.030021 140.264023) (xy 351.070812 140.210863) (xy 351.09442 140.153868) + (xy 351.129507 140.069163) (xy 351.1445 139.955277) (xy 351.144499 139.222924) (xy 351.14093 139.195814) + (xy 351.129508 139.109045) (xy 351.129507 139.109037) (xy 351.070812 138.967337) (xy 350.977444 138.845656) + (xy 350.855763 138.752288) (xy 350.855762 138.752287) (xy 350.714063 138.693593) (xy 350.714061 138.693592) + (xy 350.600178 138.6786) (xy 350.600177 138.6786) (xy 350.292238 138.6786) (xy 350.225199 138.658915) + (xy 350.179444 138.606111) (xy 350.177677 138.602052) (xy 350.161868 138.563884) (xy 350.161866 138.563882) + (xy 349.530119 137.932136) (xy 349.530118 137.932135) (xy 349.446503 137.8975) (xy 348.369432 137.8975) + (xy 348.302393 137.877815) (xy 348.256638 137.825011) (xy 348.246694 137.755853) (xy 348.275719 137.692297) + (xy 348.307432 137.666113) (xy 348.413306 137.604986) (xy 348.491759 137.559691) (xy 348.719973 137.384577) + (xy 348.923377 137.181173) (xy 349.098491 136.952959) (xy 349.24232 136.703841) (xy 349.352402 136.43808) + (xy 349.426853 136.160225) (xy 349.4644 135.875029) (xy 349.4644 135.64655) (xy 351.2745 135.64655) + (xy 351.2745 135.815849) (xy 351.300981 135.983047) (xy 351.353296 136.144053) (xy 351.430152 136.294888) + (xy 351.529648 136.431834) (xy 351.529652 136.431839) (xy 351.64936 136.551547) (xy 351.649365 136.551551) + (xy 351.768817 136.638337) (xy 351.786315 136.65105) (xy 351.882425 136.70002) (xy 351.937146 136.727903) + (xy 351.937148 136.727903) (xy 351.937151 136.727905) (xy 352.02345 136.755945) (xy 352.098152 136.780218) + (xy 352.265351 136.8067) (xy 352.265356 136.8067) (xy 352.434649 136.8067) (xy 352.601847 136.780218) + (xy 352.762849 136.727905) (xy 352.913685 136.65105) (xy 353.050641 136.551546) (xy 353.170346 136.431841) + (xy 353.26985 136.294885) (xy 353.346705 136.144049) (xy 353.399018 135.983047) (xy 353.416125 135.875038) + (xy 353.4255 135.815849) (xy 353.4255 135.64655) (xy 353.399018 135.479352) (xy 353.354296 135.341713) + (xy 353.346705 135.318351) (xy 353.346703 135.318348) (xy 353.346703 135.318346) (xy 353.302676 135.23194) + (xy 353.26985 135.167515) (xy 353.238281 135.124064) (xy 353.170351 135.030565) (xy 353.170347 135.03056) + (xy 353.050639 134.910852) (xy 353.050634 134.910848) (xy 352.913688 134.811352) (xy 352.913687 134.811351) + (xy 352.913685 134.81135) (xy 352.848947 134.778364) (xy 352.762853 134.734496) (xy 352.601847 134.682181) + (xy 352.434649 134.6557) (xy 352.434644 134.6557) (xy 352.265356 134.6557) (xy 352.265351 134.6557) + (xy 352.098152 134.682181) (xy 351.937146 134.734496) (xy 351.786311 134.811352) (xy 351.649365 134.910848) + (xy 351.64936 134.910852) (xy 351.529652 135.03056) (xy 351.529648 135.030565) (xy 351.430152 135.167511) + (xy 351.353296 135.318346) (xy 351.300981 135.479352) (xy 351.2745 135.64655) (xy 349.4644 135.64655) + (xy 349.4644 135.587371) (xy 349.426853 135.302175) (xy 349.352402 135.02432) (xy 349.253168 134.784748) + (xy 349.242324 134.758568) (xy 349.242316 134.758551) (xy 349.098495 134.509448) (xy 349.098494 134.509447) + (xy 349.098491 134.509441) (xy 348.994569 134.374007) (xy 348.923378 134.281228) (xy 348.923372 134.281221) + (xy 348.719978 134.077827) (xy 348.719971 134.077821) (xy 348.491767 133.902715) (xy 348.491765 133.902713) + (xy 348.491759 133.902709) (xy 348.491754 133.902706) (xy 348.491751 133.902704) (xy 348.242648 133.758883) + (xy 348.242631 133.758875) (xy 347.976878 133.648797) (xy 347.699023 133.574346) (xy 347.413838 133.536801) + (xy 347.413835 133.5368) (xy 347.413829 133.5368) (xy 347.126171 133.5368) (xy 347.126165 133.5368) + (xy 347.126161 133.536801) (xy 346.840976 133.574346) (xy 346.563121 133.648797) (xy 346.297368 133.758875) + (xy 346.297351 133.758883) (xy 346.048248 133.902704) (xy 346.048232 133.902715) (xy 345.820028 134.077821) + (xy 345.820021 134.077827) (xy 345.616627 134.281221) (xy 345.54543 134.374007) (xy 345.489001 134.415209) + (xy 345.419255 134.419364) (xy 345.358335 134.385151) (xy 345.325583 134.323434) (xy 345.331396 134.253807) + (xy 345.339661 134.236531) (xy 345.392863 134.144383) (xy 345.500742 133.883939) (xy 345.573704 133.611642) + (xy 345.6105 133.332151) (xy 345.6105 133.050249) (xy 345.573704 132.770758) (xy 345.500742 132.498461) + (xy 345.392863 132.238017) (xy 345.392861 132.238014) (xy 345.392859 132.238009) (xy 345.251916 131.99389) + (xy 345.251912 131.993883) (xy 345.0803 131.770235) (xy 345.080298 131.770233) (xy 345.080295 131.770229) + (xy 344.88097 131.570904) (xy 344.796889 131.506386) (xy 344.657317 131.399288) (xy 344.657311 131.399284) + (xy 344.657309 131.399283) (xy 344.41319 131.25834) (xy 344.413179 131.258335) (xy 344.152743 131.150459) + (xy 343.880439 131.077495) (xy 343.600958 131.0407) (xy 343.600951 131.0407) (xy 343.319049 131.0407) + (xy 343.319041 131.0407) (xy 343.03956 131.077495) (xy 342.767256 131.150459) (xy 342.50682 131.258335) + (xy 342.506809 131.25834) (xy 342.262692 131.399281) (xy 342.262683 131.399288) (xy 342.242106 131.415076) + (xy 342.176938 131.44027) (xy 342.166622 131.4407) (xy 338.834998 131.4407) (xy 338.834981 131.440701) + (xy 338.732203 131.4512) (xy 338.7322 131.451201) (xy 338.565668 131.506385) (xy 338.565663 131.506387) + (xy 338.416342 131.598489) (xy 338.292289 131.722542) (xy 338.200187 131.871863) (xy 338.200185 131.871868) + (xy 338.172349 131.95587) (xy 338.145001 132.038403) (xy 338.145001 132.038404) (xy 338.145 132.038404) + (xy 338.1345 132.141183) (xy 338.1345 134.241201) (xy 338.134501 134.241218) (xy 338.145 134.343996) + (xy 338.145001 134.343999) (xy 338.154945 134.374007) (xy 338.200186 134.510534) (xy 338.292288 134.659856) + (xy 338.416344 134.783912) (xy 338.565666 134.876014) (xy 338.732203 134.931199) (xy 338.834991 134.9417) + (xy 340.762118 134.941699) (xy 340.762127 134.9417) (xy 341.190851 134.941699) (xy 341.257889 134.961383) + (xy 341.303644 135.014187) (xy 341.313588 135.083346) (xy 341.291169 135.138583) (xy 341.270151 135.167511) + (xy 341.193296 135.318346) (xy 341.140981 135.479352) (xy 341.1145 135.64655) (xy 341.1145 135.815849) + (xy 341.140981 135.983047) (xy 341.193296 136.144053) (xy 341.270152 136.294888) (xy 341.369648 136.431834) + (xy 341.369652 136.431839) (xy 341.48936 136.551547) (xy 341.489365 136.551551) (xy 341.608817 136.638337) + (xy 341.626315 136.65105) (xy 341.722425 136.70002) (xy 341.777146 136.727903) (xy 341.777148 136.727903) + (xy 341.777151 136.727905) (xy 341.86345 136.755945) (xy 341.938152 136.780218) (xy 342.105351 136.8067) + (xy 342.105356 136.8067) (xy 342.274649 136.8067) (xy 342.441847 136.780218) (xy 342.602849 136.727905) + (xy 342.753685 136.65105) (xy 342.890641 136.551546) (xy 343.010346 136.431841) (xy 343.10985 136.294885) + (xy 343.186705 136.144049) (xy 343.239018 135.983047) (xy 343.256125 135.875038) (xy 343.2655 135.815849) + (xy 343.2655 135.64655) (xy 343.239928 135.485098) (xy 343.248882 135.415805) (xy 343.293879 135.362353) + (xy 343.36063 135.341713) (xy 343.362401 135.3417) (xy 343.600944 135.3417) (xy 343.600951 135.3417) + (xy 343.880442 135.304904) (xy 344.152739 135.231942) (xy 344.413183 135.124063) (xy 344.657317 134.983112) + (xy 344.880965 134.8115) (xy 345.0803 134.612165) (xy 345.147992 134.523946) (xy 345.20442 134.482744) + (xy 345.274166 134.478589) (xy 345.335086 134.512801) (xy 345.367839 134.574518) (xy 345.362026 134.644146) + (xy 345.353755 134.661433) (xy 345.297683 134.758551) (xy 345.297675 134.758568) (xy 345.187597 135.024321) + (xy 345.113146 135.302176) (xy 345.075601 135.587361) (xy 345.0756 135.587377) (xy 345.0756 135.875022) + (xy 345.075601 135.875038) (xy 345.113146 136.160223) (xy 345.187597 136.438078) (xy 345.297675 136.703831) + (xy 345.297683 136.703848) (xy 345.441504 136.952951) (xy 345.441515 136.952967) (xy 345.616621 137.181171) + (xy 345.616627 137.181178) (xy 345.820021 137.384572) (xy 345.820028 137.384578) (xy 345.982523 137.509264) + (xy 346.048241 137.559691) (xy 346.048248 137.559695) (xy 346.232568 137.666113) (xy 346.280784 137.71668) + (xy 346.294006 137.785287) (xy 346.268038 137.850152) (xy 346.211124 137.89068) (xy 346.170568 137.8975) + (xy 327.411546 137.8975) (xy 327.327929 137.932136) (xy 322.573614 142.686453) (xy 322.512291 142.719938) + (xy 322.485933 142.722772) (xy 317.67123 142.722772) (xy 317.604191 142.703087) (xy 317.578914 142.673916) + (xy 317.565205 142.694251) (xy 317.501025 142.721869) (xy 317.486086 142.722772) (xy 314.472117 142.722772) + (xy 314.405078 142.703087) (xy 314.384436 142.686453) (xy 313.909263 142.21128) (xy 313.875778 142.149957) + (xy 313.880762 142.080265) (xy 313.922634 142.024332) (xy 313.988098 141.999915) (xy 313.996944 141.999599) + (xy 314.069129 141.999599) (xy 314.073458 142.00087) (xy 314.077868 141.999907) (xy 314.106685 142.010626) + (xy 314.136168 142.019284) (xy 314.140306 142.023133) (xy 314.143353 142.024267) (xy 314.168332 142.049203) + (xy 314.243138 142.148952) (xy 314.243139 142.148953) (xy 314.24314 142.148954) (xy 314.377332 142.272795) + (xy 314.531725 142.370297) (xy 314.666877 142.424474) (xy 314.701214 142.438239) (xy 314.701215 142.438239) + (xy 314.701217 142.43824) (xy 314.880208 142.474379) (xy 314.880202 142.474379) (xy 314.903047 142.474772) + (xy 314.903052 142.474772) (xy 315.062784 142.47752) (xy 315.079305 142.474772) (xy 315.079308 142.474772) + (xy 315.205633 142.453758) (xy 315.242912 142.447558) (xy 315.298407 142.427498) (xy 315.414636 142.385485) + (xy 315.414637 142.385483) (xy 315.41464 142.385483) (xy 315.429675 142.37672) (xy 315.436359 142.372835) + (xy 315.43665 142.372757) (xy 315.464533 142.35646) (xy 315.464651 142.356392) (xy 315.467868 142.355601) + (xy 315.526962 142.339599) (xy 317.008092 142.339599) (xy 317.008214 142.339606) (xy 317.016305 142.339605) + (xy 317.016308 142.339606) (xy 317.048442 142.339602) (xy 317.111004 142.356534) (xy 317.13883 142.372791) + (xy 317.138832 142.372791) (xy 317.14498 142.376383) (xy 317.146635 142.377208) (xy 317.160778 142.38545) + (xy 317.3325 142.447521) (xy 317.40461 142.459515) (xy 317.506432 142.476453) (xy 317.569333 142.50687) + (xy 317.576817 142.5191) (xy 317.577517 142.517569) (xy 317.636295 142.479795) (xy 317.669097 142.47479) + (xy 317.695191 142.474341) (xy 317.874166 142.438205) (xy 317.874169 142.438203) (xy 317.874174 142.438203) + (xy 318.04366 142.370262) (xy 318.198046 142.272763) (xy 318.209547 142.26215) (xy 318.33223 142.14893) + (xy 318.332232 142.148928) (xy 318.33747 142.141944) (xy 318.407396 142.048702) (xy 318.463365 142.00688) + (xy 318.506598 141.999099) (xy 318.7627 141.999099) (xy 319.2627 141.999099) (xy 319.318632 141.999099) + (xy 319.402624 141.98855) (xy 319.535457 141.933529) (xy 319.602304 141.8816) (xy 319.602311 141.881594) + (xy 320.070194 141.413712) (xy 320.070199 141.413706) (xy 320.122127 141.34686) (xy 320.125342 141.3391) + (xy 319.2627 141.3391) (xy 319.2627 141.999099) (xy 318.7627 141.999099) (xy 318.7627 141.2131) + (xy 318.782385 141.146061) (xy 318.835189 141.100306) (xy 318.8867 141.0891) (xy 319.0127 141.0891) + (xy 319.0127 140.9631) (xy 319.032385 140.896061) (xy 319.085189 140.850306) (xy 319.1367 140.8391) + (xy 320.1877 140.8391) (xy 320.1877 140.722953) (xy 320.17272 140.609169) (xy 320.172718 140.609164) + (xy 320.114078 140.467593) (xy 320.114075 140.467588) (xy 320.07372 140.414996) (xy 320.048526 140.349827) + (xy 320.062564 140.281382) (xy 320.073721 140.264023) (xy 320.114512 140.210863) (xy 320.13812 140.153868) + (xy 320.173207 140.069163) (xy 320.1882 139.955277) (xy 320.1882 139.9265) (xy 320.207885 139.859461) + (xy 320.260689 139.813706) (xy 320.3122 139.8025) (xy 320.846175 139.8025) (xy 320.913214 139.822185) + (xy 320.958969 139.874989) (xy 320.960715 139.878999) (xy 320.991853 139.954172) (xy 320.991857 139.954181) + (xy 320.991859 139.954185) (xy 321.07946 140.085288) (xy 321.079463 140.085292) (xy 321.190957 140.196786) + (xy 321.190961 140.196789) (xy 321.322064 140.28439) (xy 321.322077 140.284397) (xy 321.429398 140.32885) + (xy 321.467753 140.344737) (xy 321.572447 140.365562) (xy 321.622403 140.375499) (xy 321.622406 140.3755) + (xy 321.622408 140.3755) (xy 321.780094 140.3755) (xy 321.780095 140.375499) (xy 321.934747 140.344737) + (xy 322.080429 140.284394) (xy 322.211539 140.196789) (xy 322.323039 140.085289) (xy 322.410644 139.954179) + (xy 322.470987 139.808497) (xy 322.50175 139.653842) (xy 322.50175 139.496158) (xy 322.50175 139.496155) + (xy 322.501749 139.496153) (xy 322.487518 139.424611) (xy 322.470987 139.341503) (xy 322.470183 139.339562) + (xy 322.410647 139.195827) (xy 322.41064 139.195814) (xy 322.323039 139.064711) (xy 322.323036 139.064707) + (xy 322.211542 138.953213) (xy 322.211538 138.95321) (xy 322.080435 138.865609) (xy 322.080422 138.865602) + (xy 321.934751 138.805264) (xy 321.934739 138.805261) (xy 321.780095 138.7745) (xy 321.780092 138.7745) + (xy 321.622408 138.7745) (xy 321.622405 138.7745) (xy 321.46776 138.805261) (xy 321.467748 138.805264) + (xy 321.322077 138.865602) (xy 321.322064 138.865609) (xy 321.190961 138.95321) (xy 321.190957 138.953213) + (xy 321.079463 139.064707) (xy 321.07946 139.064711) (xy 320.991859 139.195814) (xy 320.991857 139.195818) + (xy 320.98856 139.203778) (xy 320.960734 139.270954) (xy 320.916896 139.325356) (xy 320.850602 139.347421) + (xy 320.846175 139.3475) (xy 320.312199 139.3475) (xy 320.24516 139.327815) (xy 320.199405 139.275011) + (xy 320.188948 139.226944) (xy 320.188465 139.226976) (xy 320.188253 139.22375) (xy 320.188199 139.2235) + (xy 320.188199 139.222921) (xy 320.173208 139.109045) (xy 320.173207 139.109037) (xy 320.114512 138.967337) + (xy 320.021144 138.845656) (xy 319.899463 138.752288) (xy 319.899462 138.752287) (xy 319.757763 138.693593) + (xy 319.757761 138.693592) (xy 319.643878 138.6786) (xy 319.643877 138.6786) (xy 318.506273 138.6786) + (xy 318.439234 138.658915) (xy 318.407072 138.628998) (xy 318.332261 138.529244) (xy 318.198069 138.405404) + (xy 318.198066 138.405402) (xy 318.198065 138.405401) (xy 318.198062 138.405399) (xy 318.043677 138.307901) + (xy 317.874187 138.239958) (xy 317.874177 138.239956) (xy 317.695192 138.203818) (xy 317.695199 138.203818) + (xy 317.523494 138.200865) (xy 317.512618 138.200678) (xy 317.512617 138.200678) (xy 317.512614 138.200678) + (xy 317.332497 138.230638) (xy 317.332484 138.230641) (xy 317.160763 138.292713) (xy 317.146248 138.30117) + (xy 317.146163 138.301219) (xy 317.139076 138.30534) (xy 317.13883 138.305408) (xy 317.111038 138.321644) + (xy 317.11079 138.321789) (xy 317.108063 138.322459) (xy 317.048446 138.338596) (xy 317.008101 138.338593) + (xy 317.007997 138.3386) (xy 315.567296 138.3386) (xy 315.559114 138.338598) (xy 315.559092 138.338593) + (xy 315.529165 138.338595) (xy 315.526928 138.338595) (xy 315.526646 138.338512) (xy 315.464393 138.321662) + (xy 315.436571 138.305408) (xy 315.430505 138.301864) (xy 315.428807 138.301017) (xy 315.421457 138.296734) + (xy 315.414621 138.29275) (xy 315.242897 138.230678) (xy 315.242891 138.230677) (xy 315.062781 138.200719) + (xy 315.062778 138.200719) (xy 315.054239 138.200865) (xy 314.880207 138.203859) (xy 314.701234 138.239994) + (xy 314.701223 138.239997) (xy 314.531742 138.307937) (xy 314.531741 138.307937) (xy 314.377361 138.405432) + (xy 314.377358 138.405434) (xy 314.287004 138.488818) (xy 314.243169 138.529272) (xy 314.171933 138.624261) + (xy 314.168381 138.628997) (xy 314.112411 138.670819) (xy 314.069178 138.6786) (xy 312.931521 138.6786) + (xy 312.817645 138.693591) (xy 312.817637 138.693593) (xy 312.675937 138.752287) (xy 312.554256 138.845656) + (xy 312.460887 138.967337) (xy 312.402193 139.109036) (xy 312.402192 139.109038) (xy 312.3872 139.222922) + (xy 289.231999 139.222922) (xy 289.22843 139.195814) (xy 289.217008 139.109045) (xy 289.217007 139.109037) + (xy 289.158312 138.967337) (xy 289.064944 138.845656) (xy 288.943263 138.752288) (xy 288.943262 138.752287) + (xy 288.801563 138.693593) (xy 288.801561 138.693592) (xy 288.687678 138.6786) (xy 288.687677 138.6786) + (xy 288.327945 138.6786) (xy 288.298504 138.669955) (xy 288.268518 138.663432) (xy 288.263502 138.659677) + (xy 288.260906 138.658915) (xy 288.240264 138.642281) (xy 288.185368 138.587385) (xy 287.53012 137.932136) + (xy 287.519688 137.927815) (xy 287.446503 137.8975) (xy 286.456932 137.8975) (xy 286.389893 137.877815) + (xy 286.344138 137.825011) (xy 286.334194 137.755853) (xy 286.363219 137.692297) (xy 286.394932 137.666113) + (xy 286.500806 137.604986) (xy 286.579259 137.559691) (xy 286.807473 137.384577) (xy 287.010877 137.181173) + (xy 287.185991 136.952959) (xy 287.32982 136.703841) (xy 287.439902 136.43808) (xy 287.514353 136.160225) + (xy 287.5519 135.875029) (xy 287.5519 135.64655) (xy 289.362 135.64655) (xy 289.362 135.815849) + (xy 289.388481 135.983047) (xy 289.440796 136.144053) (xy 289.517652 136.294888) (xy 289.617148 136.431834) + (xy 289.617152 136.431839) (xy 289.73686 136.551547) (xy 289.736865 136.551551) (xy 289.856317 136.638337) + (xy 289.873815 136.65105) (xy 289.969925 136.70002) (xy 290.024646 136.727903) (xy 290.024648 136.727903) + (xy 290.024651 136.727905) (xy 290.11095 136.755945) (xy 290.185652 136.780218) (xy 290.352851 136.8067) + (xy 290.352856 136.8067) (xy 290.522149 136.8067) (xy 290.689347 136.780218) (xy 290.850349 136.727905) + (xy 291.001185 136.65105) (xy 291.138141 136.551546) (xy 291.257846 136.431841) (xy 291.35735 136.294885) + (xy 291.434205 136.144049) (xy 291.486518 135.983047) (xy 291.503625 135.875038) (xy 291.513 135.815849) + (xy 291.513 135.64655) (xy 291.486518 135.479352) (xy 291.441796 135.341713) (xy 291.434205 135.318351) + (xy 291.434203 135.318348) (xy 291.434203 135.318346) (xy 291.390176 135.23194) (xy 291.35735 135.167515) + (xy 291.325781 135.124064) (xy 291.257851 135.030565) (xy 291.257847 135.03056) (xy 291.138139 134.910852) + (xy 291.138134 134.910848) (xy 291.001188 134.811352) (xy 291.001187 134.811351) (xy 291.001185 134.81135) + (xy 290.936447 134.778364) (xy 290.850353 134.734496) (xy 290.689347 134.682181) (xy 290.522149 134.6557) + (xy 290.522144 134.6557) (xy 290.352856 134.6557) (xy 290.352851 134.6557) (xy 290.185652 134.682181) + (xy 290.024646 134.734496) (xy 289.873811 134.811352) (xy 289.736865 134.910848) (xy 289.73686 134.910852) + (xy 289.617152 135.03056) (xy 289.617148 135.030565) (xy 289.517652 135.167511) (xy 289.440796 135.318346) + (xy 289.388481 135.479352) (xy 289.362 135.64655) (xy 287.5519 135.64655) (xy 287.5519 135.587371) + (xy 287.514353 135.302175) (xy 287.439902 135.02432) (xy 287.340668 134.784748) (xy 287.329824 134.758568) + (xy 287.329816 134.758551) (xy 287.185995 134.509448) (xy 287.185994 134.509447) (xy 287.185991 134.509441) + (xy 287.082069 134.374007) (xy 287.010878 134.281228) (xy 287.010872 134.281221) (xy 286.807478 134.077827) + (xy 286.807471 134.077821) (xy 286.579267 133.902715) (xy 286.579265 133.902713) (xy 286.579259 133.902709) + (xy 286.579254 133.902706) (xy 286.579251 133.902704) (xy 286.330148 133.758883) (xy 286.330131 133.758875) + (xy 286.064378 133.648797) (xy 285.786523 133.574346) (xy 285.501338 133.536801) (xy 285.501335 133.5368) + (xy 285.501329 133.5368) (xy 285.213671 133.5368) (xy 285.213665 133.5368) (xy 285.213661 133.536801) + (xy 284.928476 133.574346) (xy 284.650621 133.648797) (xy 284.384868 133.758875) (xy 284.384851 133.758883) + (xy 284.135748 133.902704) (xy 284.135732 133.902715) (xy 283.907528 134.077821) (xy 283.907521 134.077827) + (xy 283.704127 134.281221) (xy 283.63293 134.374007) (xy 283.576501 134.415209) (xy 283.506755 134.419364) + (xy 283.445835 134.385151) (xy 283.413083 134.323434) (xy 283.418896 134.253807) (xy 283.427161 134.236531) + (xy 283.480363 134.144383) (xy 283.588242 133.883939) (xy 283.661204 133.611642) (xy 283.698 133.332151) + (xy 283.698 133.050249) (xy 283.661204 132.770758) (xy 283.588242 132.498461) (xy 283.480363 132.238017) + (xy 283.480361 132.238014) (xy 283.480359 132.238009) (xy 283.339416 131.99389) (xy 283.339412 131.993883) + (xy 283.1678 131.770235) (xy 283.167798 131.770233) (xy 283.167795 131.770229) (xy 282.96847 131.570904) + (xy 282.884389 131.506386) (xy 282.744817 131.399288) (xy 282.744811 131.399284) (xy 282.744809 131.399283) + (xy 282.50069 131.25834) (xy 282.500679 131.258335) (xy 282.240243 131.150459) (xy 281.967939 131.077495) + (xy 281.688458 131.0407) (xy 281.688451 131.0407) (xy 281.406549 131.0407) (xy 281.406541 131.0407) + (xy 281.127058 131.077496) (xy 281.013961 131.1078) (xy 280.944111 131.106137) (xy 280.886249 131.066974) + (xy 280.858745 131.002746) (xy 280.870332 130.933843) (xy 280.894184 130.900347) (xy 281.28429 130.510241) + (xy 285.747 130.510241) (xy 285.747 130.792158) (xy 285.783795 131.071639) (xy 285.856759 131.343943) + (xy 285.964635 131.604379) (xy 285.96464 131.60439) (xy 286.079883 131.803995) (xy 286.105588 131.848517) + (xy 286.251294 132.038404) (xy 286.277204 132.07217) (xy 286.476529 132.271495) (xy 286.476533 132.271498) + (xy 286.476535 132.2715) (xy 286.700183 132.443112) (xy 286.70019 132.443116) (xy 286.944309 132.584059) + (xy 286.944314 132.584061) (xy 286.944317 132.584063) (xy 287.204761 132.691942) (xy 287.477058 132.764904) + (xy 287.756549 132.8017) (xy 287.756556 132.8017) (xy 288.038444 132.8017) (xy 288.038451 132.8017) + (xy 288.317942 132.764904) (xy 288.590239 132.691942) (xy 288.850683 132.584063) (xy 289.094817 132.443112) + (xy 289.115392 132.427323) (xy 289.18056 132.402129) (xy 289.190879 132.401699) (xy 290.372482 132.401699) + (xy 290.372491 132.4017) (xy 292.522508 132.401699) (xy 292.625297 132.391199) (xy 292.791834 132.336014) + (xy 292.941156 132.243912) (xy 293.043885 132.141183) (xy 307.1783 132.141183) (xy 307.1783 134.241201) + (xy 307.178301 134.241218) (xy 307.1888 134.343996) (xy 307.188801 134.343999) (xy 307.198745 134.374007) + (xy 307.243986 134.510534) (xy 307.336088 134.659856) (xy 307.460144 134.783912) (xy 307.609466 134.876014) + (xy 307.776003 134.931199) (xy 307.878791 134.9417) (xy 309.805918 134.941699) (xy 309.805927 134.9417) + (xy 310.234651 134.941699) (xy 310.301689 134.961383) (xy 310.347444 135.014187) (xy 310.357388 135.083346) + (xy 310.334969 135.138583) (xy 310.313951 135.167511) (xy 310.237096 135.318346) (xy 310.184781 135.479352) + (xy 310.1583 135.64655) (xy 310.1583 135.815849) (xy 310.184781 135.983047) (xy 310.237096 136.144053) + (xy 310.313952 136.294888) (xy 310.413448 136.431834) (xy 310.413452 136.431839) (xy 310.53316 136.551547) + (xy 310.533165 136.551551) (xy 310.652617 136.638337) (xy 310.670115 136.65105) (xy 310.766225 136.70002) + (xy 310.820946 136.727903) (xy 310.820948 136.727903) (xy 310.820951 136.727905) (xy 310.90725 136.755945) + (xy 310.981952 136.780218) (xy 311.149151 136.8067) (xy 311.149156 136.8067) (xy 311.318449 136.8067) + (xy 311.485647 136.780218) (xy 311.646649 136.727905) (xy 311.797485 136.65105) (xy 311.934441 136.551546) + (xy 312.054146 136.431841) (xy 312.15365 136.294885) (xy 312.230505 136.144049) (xy 312.282818 135.983047) + (xy 312.299925 135.875038) (xy 312.3093 135.815849) (xy 312.3093 135.64655) (xy 312.283728 135.485098) + (xy 312.292682 135.415805) (xy 312.337679 135.362353) (xy 312.40443 135.341713) (xy 312.406201 135.3417) + (xy 312.644744 135.3417) (xy 312.644751 135.3417) (xy 312.924242 135.304904) (xy 313.196539 135.231942) + (xy 313.456983 135.124063) (xy 313.701117 134.983112) (xy 313.924765 134.8115) (xy 314.1241 134.612165) + (xy 314.191792 134.523946) (xy 314.24822 134.482744) (xy 314.317966 134.478589) (xy 314.378886 134.512801) + (xy 314.411639 134.574518) (xy 314.405826 134.644146) (xy 314.397555 134.661433) (xy 314.341483 134.758551) + (xy 314.341475 134.758568) (xy 314.231397 135.024321) (xy 314.156946 135.302176) (xy 314.119401 135.587361) + (xy 314.1194 135.587377) (xy 314.1194 135.875022) (xy 314.119401 135.875038) (xy 314.156946 136.160223) + (xy 314.231397 136.438078) (xy 314.341475 136.703831) (xy 314.341483 136.703848) (xy 314.485304 136.952951) + (xy 314.485315 136.952967) (xy 314.660421 137.181171) (xy 314.660427 137.181178) (xy 314.863821 137.384572) + (xy 314.863828 137.384578) (xy 315.026323 137.509264) (xy 315.092041 137.559691) (xy 315.092048 137.559695) + (xy 315.341151 137.703516) (xy 315.341156 137.703518) (xy 315.341159 137.70352) (xy 315.341163 137.703521) + (xy 315.341168 137.703524) (xy 315.37293 137.71668) (xy 315.60692 137.813602) (xy 315.884775 137.888053) + (xy 316.169971 137.9256) (xy 316.169978 137.9256) (xy 316.457622 137.9256) (xy 316.457629 137.9256) + (xy 316.742825 137.888053) (xy 317.02068 137.813602) (xy 317.286441 137.70352) (xy 317.535559 137.559691) + (xy 317.763773 137.384577) (xy 317.967177 137.181173) (xy 318.142291 136.952959) (xy 318.28612 136.703841) + (xy 318.396202 136.43808) (xy 318.470653 136.160225) (xy 318.5082 135.875029) (xy 318.5082 135.64655) + (xy 320.3183 135.64655) (xy 320.3183 135.815849) (xy 320.344781 135.983047) (xy 320.397096 136.144053) + (xy 320.473952 136.294888) (xy 320.573448 136.431834) (xy 320.573452 136.431839) (xy 320.69316 136.551547) + (xy 320.693165 136.551551) (xy 320.812617 136.638337) (xy 320.830115 136.65105) (xy 320.926225 136.70002) + (xy 320.980946 136.727903) (xy 320.980948 136.727903) (xy 320.980951 136.727905) (xy 321.06725 136.755945) + (xy 321.141952 136.780218) (xy 321.309151 136.8067) (xy 321.309156 136.8067) (xy 321.478449 136.8067) + (xy 321.645647 136.780218) (xy 321.806649 136.727905) (xy 321.957485 136.65105) (xy 322.094441 136.551546) + (xy 322.214146 136.431841) (xy 322.31365 136.294885) (xy 322.390505 136.144049) (xy 322.442818 135.983047) + (xy 322.459925 135.875038) (xy 322.4693 135.815849) (xy 322.4693 135.64655) (xy 322.442818 135.479352) + (xy 322.398096 135.341713) (xy 322.390505 135.318351) (xy 322.390503 135.318348) (xy 322.390503 135.318346) + (xy 322.346476 135.23194) (xy 322.31365 135.167515) (xy 322.282081 135.124064) (xy 322.214151 135.030565) + (xy 322.214147 135.03056) (xy 322.094439 134.910852) (xy 322.094434 134.910848) (xy 321.957488 134.811352) + (xy 321.957487 134.811351) (xy 321.957485 134.81135) (xy 321.892747 134.778364) (xy 321.806653 134.734496) + (xy 321.645647 134.682181) (xy 321.478449 134.6557) (xy 321.478444 134.6557) (xy 321.309156 134.6557) + (xy 321.309151 134.6557) (xy 321.141952 134.682181) (xy 320.980946 134.734496) (xy 320.830111 134.811352) + (xy 320.693165 134.910848) (xy 320.69316 134.910852) (xy 320.573452 135.03056) (xy 320.573448 135.030565) + (xy 320.473952 135.167511) (xy 320.397096 135.318346) (xy 320.344781 135.479352) (xy 320.3183 135.64655) + (xy 318.5082 135.64655) (xy 318.5082 135.587371) (xy 318.470653 135.302175) (xy 318.396202 135.02432) + (xy 318.296968 134.784748) (xy 318.286124 134.758568) (xy 318.286116 134.758551) (xy 318.142295 134.509448) + (xy 318.142294 134.509447) (xy 318.142291 134.509441) (xy 318.038369 134.374007) (xy 317.967178 134.281228) + (xy 317.967172 134.281221) (xy 317.763778 134.077827) (xy 317.763771 134.077821) (xy 317.535567 133.902715) + (xy 317.535565 133.902713) (xy 317.535559 133.902709) (xy 317.535554 133.902706) (xy 317.535551 133.902704) + (xy 317.286448 133.758883) (xy 317.286431 133.758875) (xy 317.020678 133.648797) (xy 316.742823 133.574346) + (xy 316.457638 133.536801) (xy 316.457635 133.5368) (xy 316.457629 133.5368) (xy 316.169971 133.5368) + (xy 316.169965 133.5368) (xy 316.169961 133.536801) (xy 315.884776 133.574346) (xy 315.606921 133.648797) + (xy 315.341168 133.758875) (xy 315.341151 133.758883) (xy 315.092048 133.902704) (xy 315.092032 133.902715) + (xy 314.863828 134.077821) (xy 314.863821 134.077827) (xy 314.660427 134.281221) (xy 314.58923 134.374007) + (xy 314.532801 134.415209) (xy 314.463055 134.419364) (xy 314.402135 134.385151) (xy 314.369383 134.323434) + (xy 314.375196 134.253807) (xy 314.383461 134.236531) (xy 314.436663 134.144383) (xy 314.544542 133.883939) + (xy 314.617504 133.611642) (xy 314.6543 133.332151) (xy 314.6543 133.050249) (xy 314.617504 132.770758) + (xy 314.544542 132.498461) (xy 314.436663 132.238017) (xy 314.436661 132.238014) (xy 314.436659 132.238009) + (xy 314.295716 131.99389) (xy 314.295712 131.993883) (xy 314.1241 131.770235) (xy 314.124098 131.770233) + (xy 314.124095 131.770229) (xy 313.92477 131.570904) (xy 313.840689 131.506386) (xy 313.701117 131.399288) + (xy 313.701111 131.399284) (xy 313.701109 131.399283) (xy 313.45699 131.25834) (xy 313.456979 131.258335) + (xy 313.196543 131.150459) (xy 312.924239 131.077495) (xy 312.644758 131.0407) (xy 312.644751 131.0407) + (xy 312.362849 131.0407) (xy 312.362841 131.0407) (xy 312.08336 131.077495) (xy 311.811056 131.150459) + (xy 311.55062 131.258335) (xy 311.550609 131.25834) (xy 311.306492 131.399281) (xy 311.306483 131.399288) + (xy 311.285906 131.415076) (xy 311.220738 131.44027) (xy 311.210422 131.4407) (xy 310.818006 131.4407) + (xy 310.770553 131.431261) (xy 310.724053 131.412) (xy 309.678253 131.412) (xy 309.587747 131.412) + (xy 309.587745 131.412) (xy 309.587743 131.412001) (xy 309.541245 131.431261) (xy 309.493793 131.4407) + (xy 307.878798 131.4407) (xy 307.878781 131.440701) (xy 307.776003 131.4512) (xy 307.776 131.451201) + (xy 307.609468 131.506385) (xy 307.609463 131.506387) (xy 307.460142 131.598489) (xy 307.336089 131.722542) + (xy 307.243987 131.871863) (xy 307.243985 131.871868) (xy 307.216149 131.95587) (xy 307.188801 132.038403) + (xy 307.188801 132.038404) (xy 307.1888 132.038404) (xy 307.1783 132.141183) (xy 293.043885 132.141183) + (xy 293.065212 132.119856) (xy 293.157314 131.970534) (xy 293.212499 131.803997) (xy 293.223 131.701209) + (xy 293.222999 129.601192) (xy 293.212499 129.498403) (xy 293.157314 129.331866) (xy 293.065212 129.182544) + (xy 292.941156 129.058488) (xy 292.819274 128.983311) (xy 292.791836 128.966387) (xy 292.791831 128.966385) + (xy 292.790362 128.965898) (xy 292.625297 128.911201) (xy 292.625295 128.9112) (xy 292.522516 128.9007) + (xy 292.522509 128.9007) (xy 290.810906 128.9007) (xy 290.763453 128.891261) (xy 290.716954 128.872) + (xy 290.716953 128.872) (xy 289.742753 128.872) (xy 289.150061 128.872) (xy 289.088061 128.855387) + (xy 288.85069 128.71834) (xy 288.85067 128.718331) (xy 288.847113 128.716857) (xy 288.847111 128.716857) + (xy 288.590243 128.610459) (xy 288.572736 128.605768) (xy 301.90705 128.605768) (xy 301.90705 128.886631) + (xy 301.938492 129.165694) (xy 301.938495 129.165712) (xy 302.000989 129.439517) (xy 302.000993 129.439529) + (xy 302.09375 129.704611) (xy 302.215603 129.957642) (xy 302.216118 129.958461) (xy 302.365027 130.195448) + (xy 302.540134 130.415025) (xy 302.738725 130.613616) (xy 302.958302 130.788723) (xy 303.196105 130.938145) + (xy 303.449142 131.060001) (xy 303.585744 131.1078) (xy 303.71422 131.152756) (xy 303.714232 131.15276) + (xy 303.988041 131.215255) (xy 303.988047 131.215255) (xy 303.988055 131.215257) (xy 304.171511 131.235927) + (xy 304.267119 131.246699) (xy 304.267122 131.2467) (xy 304.267125 131.2467) (xy 304.547978 131.2467) + (xy 304.547979 131.246699) (xy 304.690605 131.230629) (xy 304.827044 131.215257) (xy 304.827049 131.215256) + (xy 304.827059 131.215255) (xy 305.100868 131.15276) (xy 305.365958 131.060001) (xy 305.618995 130.938145) + (xy 305.856798 130.788723) (xy 306.076375 130.613616) (xy 306.17975 130.510241) (xy 316.7033 130.510241) + (xy 316.7033 130.792158) (xy 316.740095 131.071639) (xy 316.813059 131.343943) (xy 316.920935 131.604379) + (xy 316.92094 131.60439) (xy 317.036183 131.803995) (xy 317.061888 131.848517) (xy 317.207594 132.038404) + (xy 317.233504 132.07217) (xy 317.432829 132.271495) (xy 317.432833 132.271498) (xy 317.432835 132.2715) + (xy 317.656483 132.443112) (xy 317.65649 132.443116) (xy 317.900609 132.584059) (xy 317.900614 132.584061) + (xy 317.900617 132.584063) (xy 318.161061 132.691942) (xy 318.433358 132.764904) (xy 318.712849 132.8017) + (xy 318.712856 132.8017) (xy 318.994744 132.8017) (xy 318.994751 132.8017) (xy 319.274242 132.764904) + (xy 319.546539 132.691942) (xy 319.806983 132.584063) (xy 320.051117 132.443112) (xy 320.071692 132.427323) + (xy 320.13686 132.402129) (xy 320.147179 132.401699) (xy 321.328782 132.401699) (xy 321.328791 132.4017) + (xy 323.478808 132.401699) (xy 323.581597 132.391199) (xy 323.748134 132.336014) (xy 323.897456 132.243912) + (xy 324.021512 132.119856) (xy 324.113614 131.970534) (xy 324.168799 131.803997) (xy 324.1793 131.701209) + (xy 324.179299 129.601192) (xy 324.168799 129.498403) (xy 324.113614 129.331866) (xy 324.021512 129.182544) + (xy 323.897456 129.058488) (xy 323.775574 128.983311) (xy 323.748136 128.966387) (xy 323.748131 128.966385) + (xy 323.746662 128.965898) (xy 323.581597 128.911201) (xy 323.581595 128.9112) (xy 323.478816 128.9007) + (xy 323.478809 128.9007) (xy 321.767306 128.9007) (xy 321.719853 128.891261) (xy 321.673354 128.872) + (xy 321.673353 128.872) (xy 320.699053 128.872) (xy 320.608547 128.872) (xy 320.608545 128.872) + (xy 320.576322 128.885347) (xy 320.562045 128.891261) (xy 320.514594 128.9007) (xy 320.147179 128.9007) + (xy 320.08014 128.881015) (xy 320.071693 128.875076) (xy 320.051126 128.859294) (xy 320.051109 128.859283) + (xy 319.80699 128.71834) (xy 319.80697 128.718331) (xy 319.803413 128.716857) (xy 319.803411 128.716857) + (xy 319.546543 128.610459) (xy 319.529036 128.605768) (xy 325.71955 128.605768) (xy 325.71955 128.886631) + (xy 325.750992 129.165694) (xy 325.750995 129.165712) (xy 325.813489 129.439517) (xy 325.813493 129.439529) + (xy 325.90625 129.704611) (xy 326.028103 129.957642) (xy 326.028618 129.958461) (xy 326.177527 130.195448) + (xy 326.352634 130.415025) (xy 326.551225 130.613616) (xy 326.770802 130.788723) (xy 327.008605 130.938145) + (xy 327.261642 131.060001) (xy 327.398244 131.1078) (xy 327.52672 131.152756) (xy 327.526732 131.15276) + (xy 327.800541 131.215255) (xy 327.800547 131.215255) (xy 327.800555 131.215257) (xy 327.984011 131.235927) + (xy 328.079619 131.246699) (xy 328.079622 131.2467) (xy 328.079625 131.2467) (xy 328.360478 131.2467) + (xy 328.360479 131.246699) (xy 328.503105 131.230629) (xy 328.639544 131.215257) (xy 328.639549 131.215256) + (xy 328.639559 131.215255) (xy 328.913368 131.15276) (xy 329.178458 131.060001) (xy 329.431495 130.938145) + (xy 329.669298 130.788723) (xy 329.888875 130.613616) (xy 329.99225 130.510241) (xy 347.6595 130.510241) + (xy 347.6595 130.792158) (xy 347.696295 131.071639) (xy 347.769259 131.343943) (xy 347.877135 131.604379) + (xy 347.87714 131.60439) (xy 347.992383 131.803995) (xy 348.018088 131.848517) (xy 348.163794 132.038404) + (xy 348.189704 132.07217) (xy 348.389029 132.271495) (xy 348.389033 132.271498) (xy 348.389035 132.2715) + (xy 348.612683 132.443112) (xy 348.61269 132.443116) (xy 348.856809 132.584059) (xy 348.856814 132.584061) + (xy 348.856817 132.584063) (xy 349.117261 132.691942) (xy 349.389558 132.764904) (xy 349.669049 132.8017) + (xy 349.669056 132.8017) (xy 349.950944 132.8017) (xy 349.950951 132.8017) (xy 350.230442 132.764904) + (xy 350.502739 132.691942) (xy 350.763183 132.584063) (xy 351.007317 132.443112) (xy 351.027892 132.427323) + (xy 351.09306 132.402129) (xy 351.103379 132.401699) (xy 352.284982 132.401699) (xy 352.284991 132.4017) + (xy 354.435008 132.401699) (xy 354.537797 132.391199) (xy 354.704334 132.336014) (xy 354.853656 132.243912) + (xy 354.977712 132.119856) (xy 355.069814 131.970534) (xy 355.124999 131.803997) (xy 355.1355 131.701209) + (xy 355.135499 129.601192) (xy 355.124999 129.498403) (xy 355.069814 129.331866) (xy 354.977712 129.182544) + (xy 354.853656 129.058488) (xy 354.731774 128.983311) (xy 354.704336 128.966387) (xy 354.704331 128.966385) + (xy 354.702862 128.965898) (xy 354.537797 128.911201) (xy 354.537795 128.9112) (xy 354.435016 128.9007) + (xy 354.435009 128.9007) (xy 352.723406 128.9007) (xy 352.675953 128.891261) (xy 352.629454 128.872) + (xy 352.629453 128.872) (xy 351.655253 128.872) (xy 351.062561 128.872) (xy 351.000561 128.855387) + (xy 350.76319 128.71834) (xy 350.763179 128.718335) (xy 350.502743 128.610459) (xy 350.230439 128.537495) + (xy 349.950958 128.5007) (xy 349.950951 128.5007) (xy 349.669049 128.5007) (xy 349.669041 128.5007) + (xy 349.38956 128.537495) (xy 349.117256 128.610459) (xy 348.85682 128.718335) (xy 348.856809 128.71834) + (xy 348.61269 128.859283) (xy 348.612684 128.859287) (xy 348.612683 128.859288) (xy 348.592108 128.875076) + (xy 348.389029 129.030904) (xy 348.189704 129.230229) (xy 348.111715 129.331866) (xy 348.029112 129.439517) + (xy 348.018089 129.453882) (xy 348.018083 129.45389) (xy 347.87714 129.698009) (xy 347.877135 129.69802) + (xy 347.769259 129.958456) (xy 347.696295 130.23076) (xy 347.6595 130.510241) (xy 329.99225 130.510241) + (xy 330.087466 130.415025) (xy 330.262573 130.195448) (xy 330.411995 129.957645) (xy 330.533851 129.704608) + (xy 330.62661 129.439518) (xy 330.689105 129.165709) (xy 330.72055 128.886625) (xy 330.72055 128.605775) + (xy 330.689105 128.326691) (xy 330.62661 128.052882) (xy 330.533851 127.787792) (xy 330.42237 127.556299) + (xy 330.411996 127.534757) (xy 330.411995 127.534755) (xy 330.262573 127.296952) (xy 330.087466 127.077375) + (xy 329.888875 126.878784) (xy 329.669298 126.703677) (xy 329.543856 126.624856) (xy 329.431489 126.554251) + (xy 329.353425 126.516658) (xy 329.353424 126.516658) (xy 329.178461 126.4324) (xy 328.913379 126.339643) + (xy 328.913367 126.339639) (xy 328.639562 126.277145) (xy 328.639544 126.277142) (xy 328.360481 126.2457) + (xy 328.360475 126.2457) (xy 328.079625 126.2457) (xy 328.079618 126.2457) (xy 327.800555 126.277142) + (xy 327.800537 126.277145) (xy 327.526732 126.339639) (xy 327.52672 126.339643) (xy 327.261638 126.4324) + (xy 327.008607 126.554253) (xy 326.770803 126.703676) (xy 326.551225 126.878783) (xy 326.352633 127.077375) + (xy 326.177526 127.296953) (xy 326.028103 127.534757) (xy 325.90625 127.787788) (xy 325.813493 128.05287) + (xy 325.813489 128.052882) (xy 325.750995 128.326687) (xy 325.750992 128.326705) (xy 325.71955 128.605768) + (xy 319.529036 128.605768) (xy 319.274239 128.537495) (xy 318.994758 128.5007) (xy 318.994751 128.5007) + (xy 318.712849 128.5007) (xy 318.712841 128.5007) (xy 318.43336 128.537495) (xy 318.161056 128.610459) + (xy 317.90062 128.718335) (xy 317.900609 128.71834) (xy 317.65649 128.859283) (xy 317.656484 128.859287) + (xy 317.656483 128.859288) (xy 317.635908 128.875076) (xy 317.432829 129.030904) (xy 317.233504 129.230229) + (xy 317.155515 129.331866) (xy 317.072912 129.439517) (xy 317.061889 129.453882) (xy 317.061883 129.45389) + (xy 316.92094 129.698009) (xy 316.920935 129.69802) (xy 316.813059 129.958456) (xy 316.740095 130.23076) + (xy 316.7033 130.510241) (xy 306.17975 130.510241) (xy 306.274966 130.415025) (xy 306.450073 130.195448) + (xy 306.599495 129.957645) (xy 306.721351 129.704608) (xy 306.81411 129.439518) (xy 306.876605 129.165709) + (xy 306.90805 128.886625) (xy 306.90805 128.605775) (xy 306.876605 128.326691) (xy 306.81411 128.052882) + (xy 306.721351 127.787792) (xy 306.60987 127.556299) (xy 306.599496 127.534757) (xy 306.599495 127.534755) + (xy 306.450073 127.296952) (xy 306.274966 127.077375) (xy 306.076375 126.878784) (xy 305.856798 126.703677) + (xy 305.618995 126.554255) (xy 305.618992 126.554253) (xy 305.365961 126.4324) (xy 305.100879 126.339643) + (xy 305.100867 126.339639) (xy 304.827062 126.277145) (xy 304.827044 126.277142) (xy 304.547981 126.2457) + (xy 304.547975 126.2457) (xy 304.267125 126.2457) (xy 304.267118 126.2457) (xy 303.988055 126.277142) + (xy 303.988037 126.277145) (xy 303.714232 126.339639) (xy 303.71422 126.339643) (xy 303.449138 126.4324) + (xy 303.196107 126.554253) (xy 302.958303 126.703676) (xy 302.738725 126.878783) (xy 302.540133 127.077375) + (xy 302.365026 127.296953) (xy 302.215603 127.534757) (xy 302.09375 127.787788) (xy 302.000993 128.05287) + (xy 302.000989 128.052882) (xy 301.938495 128.326687) (xy 301.938492 128.326705) (xy 301.90705 128.605768) + (xy 288.572736 128.605768) (xy 288.317939 128.537495) (xy 288.038458 128.5007) (xy 288.038451 128.5007) + (xy 287.756549 128.5007) (xy 287.756541 128.5007) (xy 287.47706 128.537495) (xy 287.204756 128.610459) + (xy 286.94432 128.718335) (xy 286.944309 128.71834) (xy 286.70019 128.859283) (xy 286.700184 128.859287) + (xy 286.700183 128.859288) (xy 286.679608 128.875076) (xy 286.476529 129.030904) (xy 286.277204 129.230229) + (xy 286.199215 129.331866) (xy 286.116612 129.439517) (xy 286.105589 129.453882) (xy 286.105583 129.45389) + (xy 285.96464 129.698009) (xy 285.964635 129.69802) (xy 285.856759 129.958456) (xy 285.783795 130.23076) + (xy 285.747 130.510241) (xy 281.28429 130.510241) (xy 281.535438 130.259093) (xy 281.596759 130.22561) + (xy 281.666451 130.230594) (xy 281.670496 130.232185) (xy 281.745703 130.263337) (xy 281.900353 130.294099) + (xy 281.900356 130.2941) (xy 281.900358 130.2941) (xy 282.058044 130.2941) (xy 282.058045 130.294099) + (xy 282.212697 130.263337) (xy 282.358379 130.202994) (xy 282.489489 130.115389) (xy 282.600989 130.003889) + (xy 282.688594 129.872779) (xy 282.748937 129.727097) (xy 282.7797 129.572442) (xy 282.7797 129.414758) + (xy 282.7797 129.414755) (xy 282.779699 129.414753) (xy 282.763212 129.331868) (xy 282.748937 129.260103) + (xy 282.748935 129.260098) (xy 282.688597 129.114427) (xy 282.68859 129.114414) (xy 282.600989 128.983311) + (xy 282.600986 128.983307) (xy 282.489492 128.871813) (xy 282.489488 128.87181) (xy 282.358385 128.784209) + (xy 282.358372 128.784202) (xy 282.212701 128.723864) (xy 282.212689 128.723861) (xy 282.058045 128.6931) + (xy 282.058042 128.6931) (xy 281.900358 128.6931) (xy 281.900355 128.6931) (xy 281.74571 128.723861) + (xy 281.745698 128.723864) (xy 281.600027 128.784202) (xy 281.600014 128.784209) (xy 281.468911 128.87181) + (xy 281.468907 128.871813) (xy 281.357413 128.983307) (xy 281.35741 128.983311) (xy 281.269809 129.114414) + (xy 281.269802 129.114427) (xy 281.209464 129.260098) (xy 281.209461 129.26011) (xy 281.1787 129.414753) + (xy 281.1787 129.572446) (xy 281.209461 129.727089) (xy 281.209464 129.727101) (xy 281.240583 129.802229) + (xy 281.248052 129.871698) (xy 281.216776 129.934177) (xy 281.213703 129.937362) (xy 279.775386 131.375681) + (xy 279.720571 131.407565) (xy 279.704436 131.412) (xy 279.677247 131.412) (xy 279.623607 131.434217) + (xy 279.61616 131.436265) (xy 279.606438 131.436096) (xy 279.583294 131.4407) (xy 276.922498 131.4407) + (xy 276.922481 131.440701) (xy 276.819703 131.4512) (xy 276.8197 131.451201) (xy 276.653168 131.506385) + (xy 276.653163 131.506387) (xy 276.503842 131.598489) (xy 276.379789 131.722542) (xy 276.287687 131.871863) + (xy 276.287685 131.871868) (xy 276.259849 131.95587) (xy 276.232501 132.038403) (xy 276.232501 132.038404) + (xy 276.2325 132.038404) (xy 276.222 132.141183) (xy 276.222 134.241201) (xy 276.222001 134.241218) + (xy 276.2325 134.343996) (xy 276.232501 134.343999) (xy 276.242445 134.374007) (xy 276.287686 134.510534) + (xy 276.379788 134.659856) (xy 276.503844 134.783912) (xy 276.653166 134.876014) (xy 276.819703 134.931199) + (xy 276.922491 134.9417) (xy 278.849618 134.941699) (xy 278.849627 134.9417) (xy 279.278351 134.941699) + (xy 279.345389 134.961383) (xy 279.391144 135.014187) (xy 279.401088 135.083346) (xy 279.378669 135.138583) + (xy 279.357651 135.167511) (xy 279.280796 135.318346) (xy 279.228481 135.479352) (xy 279.202 135.64655) + (xy 279.202 135.815849) (xy 279.228481 135.983047) (xy 279.280796 136.144053) (xy 279.357652 136.294888) + (xy 279.457148 136.431834) (xy 279.457152 136.431839) (xy 279.57686 136.551547) (xy 279.576865 136.551551) + (xy 279.696317 136.638337) (xy 279.713815 136.65105) (xy 279.809925 136.70002) (xy 279.864646 136.727903) + (xy 279.864648 136.727903) (xy 279.864651 136.727905) (xy 279.95095 136.755945) (xy 280.025652 136.780218) + (xy 280.192851 136.8067) (xy 280.192856 136.8067) (xy 280.362149 136.8067) (xy 280.529347 136.780218) + (xy 280.690349 136.727905) (xy 280.841185 136.65105) (xy 280.978141 136.551546) (xy 281.097846 136.431841) + (xy 281.19735 136.294885) (xy 281.274205 136.144049) (xy 281.326518 135.983047) (xy 281.343625 135.875038) + (xy 281.353 135.815849) (xy 281.353 135.64655) (xy 281.327428 135.485098) (xy 281.336382 135.415805) + (xy 281.381379 135.362353) (xy 281.44813 135.341713) (xy 281.449901 135.3417) (xy 281.688444 135.3417) + (xy 281.688451 135.3417) (xy 281.967942 135.304904) (xy 282.240239 135.231942) (xy 282.500683 135.124063) + (xy 282.744817 134.983112) (xy 282.968465 134.8115) (xy 283.1678 134.612165) (xy 283.235492 134.523946) + (xy 283.29192 134.482744) (xy 283.361666 134.478589) (xy 283.422586 134.512801) (xy 283.455339 134.574518) + (xy 283.449526 134.644146) (xy 283.441255 134.661433) (xy 283.385183 134.758551) (xy 283.385175 134.758568) + (xy 283.275097 135.024321) (xy 283.200646 135.302176) (xy 283.163101 135.587361) (xy 283.1631 135.587377) + (xy 283.1631 135.875022) (xy 283.163101 135.875038) (xy 283.200646 136.160223) (xy 283.275097 136.438078) + (xy 283.385175 136.703831) (xy 283.385183 136.703848) (xy 283.529004 136.952951) (xy 283.529015 136.952967) + (xy 283.704121 137.181171) (xy 283.704127 137.181178) (xy 283.907521 137.384572) (xy 283.907528 137.384578) + (xy 284.070023 137.509264) (xy 284.135741 137.559691) (xy 284.135748 137.559695) (xy 284.320068 137.666113) + (xy 284.368284 137.71668) (xy 284.381506 137.785287) (xy 284.355538 137.850152) (xy 284.298624 137.89068) + (xy 284.258068 137.8975) (xy 267.406932 137.8975) (xy 267.339893 137.877815) (xy 267.294138 137.825011) + (xy 267.284194 137.755853) (xy 267.313219 137.692297) (xy 267.344932 137.666113) (xy 267.450806 137.604986) + (xy 267.529259 137.559691) (xy 267.757473 137.384577) (xy 267.960877 137.181173) (xy 268.135991 136.952959) + (xy 268.27982 136.703841) (xy 268.389902 136.43808) (xy 268.464353 136.160225) (xy 268.5019 135.875029) + (xy 268.5019 135.64655) (xy 270.312 135.64655) (xy 270.312 135.815849) (xy 270.338481 135.983047) + (xy 270.390796 136.144053) (xy 270.467652 136.294888) (xy 270.567148 136.431834) (xy 270.567152 136.431839) + (xy 270.68686 136.551547) (xy 270.686865 136.551551) (xy 270.806317 136.638337) (xy 270.823815 136.65105) + (xy 270.919925 136.70002) (xy 270.974646 136.727903) (xy 270.974648 136.727903) (xy 270.974651 136.727905) + (xy 271.06095 136.755945) (xy 271.135652 136.780218) (xy 271.302851 136.8067) (xy 271.302856 136.8067) + (xy 271.472149 136.8067) (xy 271.639347 136.780218) (xy 271.800349 136.727905) (xy 271.951185 136.65105) + (xy 272.088141 136.551546) (xy 272.207846 136.431841) (xy 272.30735 136.294885) (xy 272.384205 136.144049) + (xy 272.436518 135.983047) (xy 272.453625 135.875038) (xy 272.463 135.815849) (xy 272.463 135.64655) + (xy 272.436518 135.479352) (xy 272.391796 135.341713) (xy 272.384205 135.318351) (xy 272.384203 135.318348) + (xy 272.384203 135.318346) (xy 272.340176 135.23194) (xy 272.30735 135.167515) (xy 272.275781 135.124064) + (xy 272.207851 135.030565) (xy 272.207847 135.03056) (xy 272.088139 134.910852) (xy 272.088134 134.910848) + (xy 271.951188 134.811352) (xy 271.951187 134.811351) (xy 271.951185 134.81135) (xy 271.886447 134.778364) + (xy 271.800353 134.734496) (xy 271.639347 134.682181) (xy 271.472149 134.6557) (xy 271.472144 134.6557) + (xy 271.302856 134.6557) (xy 271.302851 134.6557) (xy 271.135652 134.682181) (xy 270.974646 134.734496) + (xy 270.823811 134.811352) (xy 270.686865 134.910848) (xy 270.68686 134.910852) (xy 270.567152 135.03056) + (xy 270.567148 135.030565) (xy 270.467652 135.167511) (xy 270.390796 135.318346) (xy 270.338481 135.479352) + (xy 270.312 135.64655) (xy 268.5019 135.64655) (xy 268.5019 135.587371) (xy 268.464353 135.302175) + (xy 268.389902 135.02432) (xy 268.290668 134.784748) (xy 268.279824 134.758568) (xy 268.279816 134.758551) + (xy 268.135995 134.509448) (xy 268.135994 134.509447) (xy 268.135991 134.509441) (xy 268.032069 134.374007) + (xy 267.960878 134.281228) (xy 267.960872 134.281221) (xy 267.757478 134.077827) (xy 267.757471 134.077821) + (xy 267.529267 133.902715) (xy 267.529265 133.902713) (xy 267.529259 133.902709) (xy 267.529254 133.902706) + (xy 267.529251 133.902704) (xy 267.280148 133.758883) (xy 267.280131 133.758875) (xy 267.014378 133.648797) + (xy 266.736523 133.574346) (xy 266.451338 133.536801) (xy 266.451335 133.5368) (xy 266.451329 133.5368) + (xy 266.163671 133.5368) (xy 266.163665 133.5368) (xy 266.163661 133.536801) (xy 265.878476 133.574346) + (xy 265.600621 133.648797) (xy 265.334868 133.758875) (xy 265.334851 133.758883) (xy 265.085748 133.902704) + (xy 265.085732 133.902715) (xy 264.857528 134.077821) (xy 264.857521 134.077827) (xy 264.654127 134.281221) + (xy 264.58293 134.374007) (xy 264.526501 134.415209) (xy 264.456755 134.419364) (xy 264.395835 134.385151) + (xy 264.363083 134.323434) (xy 264.368896 134.253807) (xy 264.377161 134.236531) (xy 264.430363 134.144383) + (xy 264.538242 133.883939) (xy 264.611204 133.611642) (xy 264.648 133.332151) (xy 264.648 133.050249) + (xy 264.611204 132.770758) (xy 264.538242 132.498461) (xy 264.430363 132.238017) (xy 264.430361 132.238014) + (xy 264.430359 132.238009) (xy 264.289416 131.99389) (xy 264.289412 131.993883) (xy 264.1178 131.770235) + (xy 264.117798 131.770233) (xy 264.117795 131.770229) (xy 263.91847 131.570904) (xy 263.834389 131.506386) + (xy 263.694817 131.399288) (xy 263.694811 131.399284) (xy 263.694809 131.399283) (xy 263.45069 131.25834) + (xy 263.450679 131.258335) (xy 263.190243 131.150459) (xy 262.917939 131.077495) (xy 262.638458 131.0407) + (xy 262.638451 131.0407) (xy 262.356549 131.0407) (xy 262.356541 131.0407) (xy 262.07706 131.077495) + (xy 261.804756 131.150459) (xy 261.54432 131.258335) (xy 261.544309 131.25834) (xy 261.300192 131.399281) + (xy 261.300183 131.399288) (xy 261.279606 131.415076) (xy 261.214438 131.44027) (xy 261.204122 131.4407) + (xy 260.809999 131.4407) (xy 260.762545 131.431261) (xy 260.717253 131.4125) (xy 259.626492 131.4125) + (xy 259.581915 131.412467) (xy 259.581835 131.4125) (xy 259.581747 131.4125) (xy 259.539859 131.42985) + (xy 259.539788 131.429879) (xy 259.536373 131.431291) (xy 259.488993 131.4407) (xy 257.872498 131.4407) + (xy 257.872481 131.440701) (xy 257.769703 131.4512) (xy 257.7697 131.451201) (xy 257.603168 131.506385) + (xy 257.603163 131.506387) (xy 257.453842 131.598489) (xy 257.329789 131.722542) (xy 257.237687 131.871863) + (xy 257.237685 131.871868) (xy 257.209849 131.95587) (xy 257.182501 132.038403) (xy 257.182501 132.038404) + (xy 257.1825 132.038404) (xy 257.172 132.141183) (xy 257.172 134.241201) (xy 257.172001 134.241218) + (xy 257.1825 134.343996) (xy 257.182501 134.343999) (xy 257.192445 134.374007) (xy 257.237686 134.510534) + (xy 257.329788 134.659856) (xy 257.453844 134.783912) (xy 257.603166 134.876014) (xy 257.769703 134.931199) + (xy 257.872491 134.9417) (xy 259.799618 134.941699) (xy 259.799627 134.9417) (xy 260.228351 134.941699) + (xy 260.295389 134.961383) (xy 260.341144 135.014187) (xy 260.351088 135.083346) (xy 260.328669 135.138583) + (xy 260.307651 135.167511) (xy 260.230796 135.318346) (xy 260.178481 135.479352) (xy 260.152 135.64655) + (xy 260.152 135.815849) (xy 260.178481 135.983047) (xy 260.230796 136.144053) (xy 260.307652 136.294888) + (xy 260.407148 136.431834) (xy 260.407152 136.431839) (xy 260.52686 136.551547) (xy 260.526865 136.551551) + (xy 260.646317 136.638337) (xy 260.663815 136.65105) (xy 260.759925 136.70002) (xy 260.814646 136.727903) + (xy 260.814648 136.727903) (xy 260.814651 136.727905) (xy 260.90095 136.755945) (xy 260.975652 136.780218) + (xy 261.142851 136.8067) (xy 261.142856 136.8067) (xy 261.312149 136.8067) (xy 261.479347 136.780218) + (xy 261.640349 136.727905) (xy 261.791185 136.65105) (xy 261.928141 136.551546) (xy 262.047846 136.431841) + (xy 262.14735 136.294885) (xy 262.224205 136.144049) (xy 262.276518 135.983047) (xy 262.293625 135.875038) + (xy 262.303 135.815849) (xy 262.303 135.64655) (xy 262.277428 135.485098) (xy 262.286382 135.415805) + (xy 262.331379 135.362353) (xy 262.39813 135.341713) (xy 262.399901 135.3417) (xy 262.638444 135.3417) + (xy 262.638451 135.3417) (xy 262.917942 135.304904) (xy 263.190239 135.231942) (xy 263.450683 135.124063) + (xy 263.694817 134.983112) (xy 263.918465 134.8115) (xy 264.1178 134.612165) (xy 264.185492 134.523946) + (xy 264.24192 134.482744) (xy 264.311666 134.478589) (xy 264.372586 134.512801) (xy 264.405339 134.574518) + (xy 264.399526 134.644146) (xy 264.391255 134.661433) (xy 264.335183 134.758551) (xy 264.335175 134.758568) + (xy 264.225097 135.024321) (xy 264.150646 135.302176) (xy 264.113101 135.587361) (xy 264.1131 135.587377) + (xy 264.1131 135.875022) (xy 264.113101 135.875038) (xy 264.150646 136.160223) (xy 264.225097 136.438078) + (xy 264.335175 136.703831) (xy 264.335183 136.703848) (xy 264.479004 136.952951) (xy 264.479015 136.952967) + (xy 264.654121 137.181171) (xy 264.654127 137.181178) (xy 264.857521 137.384572) (xy 264.857528 137.384578) + (xy 265.020023 137.509264) (xy 265.085741 137.559691) (xy 265.085748 137.559695) (xy 265.270068 137.666113) + (xy 265.318284 137.71668) (xy 265.331506 137.785287) (xy 265.305538 137.850152) (xy 265.248624 137.89068) + (xy 265.208068 137.8975) (xy 263.463944 137.8975) (xy 263.39611 137.925598) (xy 263.396111 137.925599) + (xy 263.380331 137.932135) (xy 263.38033 137.932136) (xy 262.907133 138.405334) (xy 262.434532 138.877935) + (xy 262.370535 138.941932) (xy 262.3359 139.025547) (xy 262.3359 140.050747) (xy 262.3359 140.141253) + (xy 262.364733 140.210862) (xy 262.370536 140.22487) (xy 262.446529 140.300863) (xy 262.480014 140.362186) + (xy 262.47503 140.431878) (xy 262.45723 140.464022) (xy 262.454688 140.467334) (xy 262.395993 140.609036) + (xy 262.395992 140.609038) (xy 262.381 140.722922) (xy 262.381 141.455278) (xy 262.395991 141.569154) + (xy 262.395992 141.56916) (xy 262.395993 141.569163) (xy 262.420305 141.627857) (xy 262.454687 141.710862) + (xy 262.454688 141.710863) (xy 262.548056 141.832544) (xy 262.669737 141.925912) (xy 262.811437 141.984607) + (xy 262.925323 141.9996) (xy 264.062929 141.999599) (xy 264.129968 142.019284) (xy 264.162132 142.049203) + (xy 264.236938 142.148952) (xy 264.236939 142.148953) (xy 264.23694 142.148954) (xy 264.371132 142.272795) + (xy 264.525525 142.370297) (xy 264.660677 142.424474) (xy 264.695014 142.438239) (xy 264.695015 142.438239) + (xy 264.695017 142.43824) (xy 264.874008 142.474379) (xy 264.874002 142.474379) (xy 264.890322 142.474659) + (xy 265.056584 142.47752) (xy 265.236712 142.447558) (xy 265.292207 142.427498) (xy 265.408436 142.385485) + (xy 265.408437 142.385483) (xy 265.40844 142.385483) (xy 265.423475 142.37672) (xy 265.430159 142.372835) + (xy 265.43045 142.372757) (xy 265.458333 142.35646) (xy 265.458451 142.356392) (xy 265.461668 142.355601) + (xy 265.520762 142.339599) (xy 267.001892 142.339599) (xy 267.002014 142.339606) (xy 267.010105 142.339605) + (xy 267.010108 142.339606) (xy 267.042242 142.339602) (xy 267.104804 142.356534) (xy 267.13263 142.372791) + (xy 267.132632 142.372791) (xy 267.13878 142.376383) (xy 267.140435 142.377208) (xy 267.154578 142.38545) + (xy 267.3263 142.447521) (xy 267.506421 142.477482) (xy 267.686098 142.47439) (xy 267.688991 142.474341) + (xy 267.867966 142.438205) (xy 267.867969 142.438203) (xy 267.867974 142.438203) (xy 268.03746 142.370262) + (xy 268.191846 142.272763) (xy 268.203347 142.26215) (xy 268.32603 142.14893) (xy 268.326032 142.148928) + (xy 268.33127 142.141944) (xy 268.401196 142.048702) (xy 268.457165 142.00688) (xy 268.500398 141.999099) + (xy 268.7565 141.999099) (xy 269.2565 141.999099) (xy 269.312432 141.999099) (xy 269.396424 141.98855) + (xy 269.529257 141.933529) (xy 269.596104 141.8816) (xy 269.596111 141.881594) (xy 270.063994 141.413712) + (xy 270.063999 141.413706) (xy 270.115927 141.34686) (xy 270.119142 141.3391) (xy 269.2565 141.3391) + (xy 269.2565 141.999099) (xy 268.7565 141.999099) (xy 268.7565 141.2131) (xy 268.776185 141.146061) + (xy 268.828989 141.100306) (xy 268.8805 141.0891) (xy 269.0065 141.0891) (xy 269.0065 140.9631) + (xy 269.026185 140.896061) (xy 269.078989 140.850306) (xy 269.1305 140.8391) (xy 270.1815 140.8391) + (xy 270.1815 140.722953) (xy 270.16652 140.609169) (xy 270.166518 140.609164) (xy 270.107878 140.467593) + (xy 270.107875 140.467588) (xy 270.06752 140.414996) (xy 270.042326 140.349827) (xy 270.056364 140.281382) + (xy 270.067521 140.264023) (xy 270.108312 140.210863) (xy 270.13192 140.153868) (xy 270.167007 140.069163) + (xy 270.182 139.955277) (xy 270.182 139.9406) (xy 270.201685 139.873561) (xy 270.254489 139.827806) + (xy 270.306 139.8166) (xy 270.61518 139.8166) (xy 270.64462 139.825244) (xy 270.674607 139.831768) + (xy 270.679622 139.835522) (xy 270.682219 139.836285) (xy 270.702861 139.852919) (xy 270.806371 139.956429) + (xy 270.839856 140.017752) (xy 270.84269 140.04411) (xy 270.84269 142.729484) (xy 270.823005 142.796523) + (xy 270.806375 142.81716) (xy 270.662354 142.961182) (xy 270.601034 142.994666) (xy 270.574675 142.9975) + (xy 245.396846 142.9975) (xy 245.329807 142.977815) (xy 245.309165 142.961181) (xy 245.186728 142.838744) + (xy 245.057743 142.709759) (xy 245.024259 142.648438) (xy 245.029243 142.578747) (xy 245.071114 142.522813) + (xy 245.136579 142.498396) (xy 245.204852 142.513248) (xy 245.211635 142.517236) (xy 245.223923 142.524996) + (xy 245.223925 142.524997) (xy 245.295052 142.553509) (xy 245.393414 142.592939) (xy 245.393415 142.592939) + (xy 245.393417 142.59294) (xy 245.572408 142.629079) (xy 245.572402 142.629079) (xy 245.588722 142.629359) + (xy 245.754984 142.63222) (xy 245.935112 142.602258) (xy 245.990607 142.582198) (xy 246.106836 142.540185) + (xy 246.106837 142.540183) (xy 246.10684 142.540183) (xy 246.121875 142.53142) (xy 246.128559 142.527535) + (xy 246.12885 142.527457) (xy 246.156733 142.51116) (xy 246.156851 142.511092) (xy 246.160068 142.510301) + (xy 246.219162 142.494299) (xy 247.700292 142.494299) (xy 247.700414 142.494306) (xy 247.708505 142.494305) + (xy 247.708508 142.494306) (xy 247.740642 142.494302) (xy 247.803204 142.511234) (xy 247.83103 142.527491) + (xy 247.831032 142.527491) (xy 247.83718 142.531083) (xy 247.838835 142.531908) (xy 247.852978 142.54015) + (xy 248.0247 142.602221) (xy 248.204821 142.632182) (xy 248.384498 142.62909) (xy 248.387391 142.629041) + (xy 248.566366 142.592905) (xy 248.566369 142.592903) (xy 248.566374 142.592903) (xy 248.73586 142.524962) + (xy 248.890246 142.427463) (xy 248.913686 142.405832) (xy 249.02443 142.30363) (xy 249.024432 142.303628) + (xy 249.031648 142.294006) (xy 249.099596 142.203402) (xy 249.155565 142.16158) (xy 249.198798 142.153799) + (xy 249.4549 142.153799) (xy 249.9549 142.153799) (xy 250.010832 142.153799) (xy 250.094824 142.14325) + (xy 250.227657 142.088229) (xy 250.294504 142.0363) (xy 250.294511 142.036294) (xy 250.762394 141.568412) + (xy 250.762399 141.568406) (xy 250.814327 141.50156) (xy 250.817542 141.4938) (xy 249.9549 141.4938) + (xy 249.9549 142.153799) (xy 249.4549 142.153799) (xy 249.4549 141.3678) (xy 249.474585 141.300761) + (xy 249.527389 141.255006) (xy 249.5789 141.2438) (xy 249.7049 141.2438) (xy 249.7049 141.1178) + (xy 249.724585 141.050761) (xy 249.777389 141.005006) (xy 249.8289 140.9938) (xy 250.8799 140.9938) + (xy 250.8799 140.877653) (xy 250.86492 140.763869) (xy 250.864918 140.763864) (xy 250.806278 140.622293) + (xy 250.806275 140.622288) (xy 250.76592 140.569696) (xy 250.740726 140.504527) (xy 250.754764 140.436082) + (xy 250.765921 140.418723) (xy 250.769097 140.414585) (xy 250.806712 140.365563) (xy 250.865407 140.223863) + (xy 250.8804 140.109977) (xy 250.880399 139.377624) (xy 250.876433 139.3475) (xy 250.866203 139.269782) + (xy 250.865407 139.263737) (xy 250.806712 139.122037) (xy 250.713344 139.000356) (xy 250.591663 138.906988) + (xy 250.591662 138.906987) (xy 250.449963 138.848293) (xy 250.449961 138.848292) (xy 250.336078 138.8333) + (xy 250.336077 138.8333) (xy 250.054036 138.8333) (xy 249.986997 138.813615) (xy 249.949016 138.775231) + (xy 249.9324 138.748763) (xy 249.9324 138.733397) (xy 249.897765 138.649782) (xy 249.833768 138.585785) + (xy 249.530118 138.282135) (xy 249.23012 137.982136) (xy 249.219688 137.977815) (xy 249.146503 137.9475) + (xy 248.264512 137.9475) (xy 248.197473 137.927815) (xy 248.151718 137.875011) (xy 248.141774 137.805853) + (xy 248.170799 137.742297) (xy 248.21706 137.708939) (xy 248.230131 137.703524) (xy 248.230141 137.70352) + (xy 248.479259 137.559691) (xy 248.707473 137.384577) (xy 248.910877 137.181173) (xy 249.085991 136.952959) + (xy 249.22982 136.703841) (xy 249.339902 136.43808) (xy 249.414353 136.160225) (xy 249.4519 135.875029) + (xy 249.4519 135.64655) (xy 251.262 135.64655) (xy 251.262 135.815849) (xy 251.288481 135.983047) + (xy 251.340796 136.144053) (xy 251.417652 136.294888) (xy 251.517148 136.431834) (xy 251.517152 136.431839) + (xy 251.63686 136.551547) (xy 251.636865 136.551551) (xy 251.756317 136.638337) (xy 251.773815 136.65105) + (xy 251.869925 136.70002) (xy 251.924646 136.727903) (xy 251.924648 136.727903) (xy 251.924651 136.727905) + (xy 252.01095 136.755945) (xy 252.085652 136.780218) (xy 252.252851 136.8067) (xy 252.252856 136.8067) + (xy 252.422149 136.8067) (xy 252.589347 136.780218) (xy 252.750349 136.727905) (xy 252.901185 136.65105) + (xy 253.038141 136.551546) (xy 253.157846 136.431841) (xy 253.25735 136.294885) (xy 253.334205 136.144049) + (xy 253.386518 135.983047) (xy 253.403625 135.875038) (xy 253.413 135.815849) (xy 253.413 135.64655) + (xy 253.386518 135.479352) (xy 253.341796 135.341713) (xy 253.334205 135.318351) (xy 253.334203 135.318348) + (xy 253.334203 135.318346) (xy 253.290176 135.23194) (xy 253.25735 135.167515) (xy 253.225781 135.124064) + (xy 253.157851 135.030565) (xy 253.157847 135.03056) (xy 253.038139 134.910852) (xy 253.038134 134.910848) + (xy 252.901188 134.811352) (xy 252.901187 134.811351) (xy 252.901185 134.81135) (xy 252.836447 134.778364) + (xy 252.750353 134.734496) (xy 252.589347 134.682181) (xy 252.422149 134.6557) (xy 252.422144 134.6557) + (xy 252.252856 134.6557) (xy 252.252851 134.6557) (xy 252.085652 134.682181) (xy 251.924646 134.734496) + (xy 251.773811 134.811352) (xy 251.636865 134.910848) (xy 251.63686 134.910852) (xy 251.517152 135.03056) + (xy 251.517148 135.030565) (xy 251.417652 135.167511) (xy 251.340796 135.318346) (xy 251.288481 135.479352) + (xy 251.262 135.64655) (xy 249.4519 135.64655) (xy 249.4519 135.587371) (xy 249.414353 135.302175) + (xy 249.339902 135.02432) (xy 249.240668 134.784748) (xy 249.229824 134.758568) (xy 249.229816 134.758551) + (xy 249.085995 134.509448) (xy 249.085994 134.509447) (xy 249.085991 134.509441) (xy 248.982069 134.374007) + (xy 248.910878 134.281228) (xy 248.910872 134.281221) (xy 248.707478 134.077827) (xy 248.707471 134.077821) + (xy 248.479267 133.902715) (xy 248.479265 133.902713) (xy 248.479259 133.902709) (xy 248.479254 133.902706) + (xy 248.479251 133.902704) (xy 248.230148 133.758883) (xy 248.230131 133.758875) (xy 247.964378 133.648797) + (xy 247.686523 133.574346) (xy 247.401338 133.536801) (xy 247.401335 133.5368) (xy 247.401329 133.5368) + (xy 247.113671 133.5368) (xy 247.113665 133.5368) (xy 247.113661 133.536801) (xy 246.828476 133.574346) + (xy 246.550621 133.648797) (xy 246.284868 133.758875) (xy 246.284851 133.758883) (xy 246.035748 133.902704) + (xy 246.035732 133.902715) (xy 245.807528 134.077821) (xy 245.807521 134.077827) (xy 245.604127 134.281221) + (xy 245.53293 134.374007) (xy 245.476501 134.415209) (xy 245.406755 134.419364) (xy 245.345835 134.385151) + (xy 245.313083 134.323434) (xy 245.318896 134.253807) (xy 245.327161 134.236531) (xy 245.380363 134.144383) + (xy 245.488242 133.883939) (xy 245.561204 133.611642) (xy 245.598 133.332151) (xy 245.598 133.050249) + (xy 245.561204 132.770758) (xy 245.488242 132.498461) (xy 245.380363 132.238017) (xy 245.380361 132.238014) + (xy 245.380359 132.238009) (xy 245.239416 131.99389) (xy 245.239412 131.993883) (xy 245.0678 131.770235) + (xy 245.067798 131.770233) (xy 245.067795 131.770229) (xy 244.86847 131.570904) (xy 244.784389 131.506386) + (xy 244.644817 131.399288) (xy 244.644811 131.399284) (xy 244.644809 131.399283) (xy 244.40069 131.25834) + (xy 244.400679 131.258335) (xy 244.140243 131.150459) (xy 243.867939 131.077495) (xy 243.588458 131.0407) + (xy 243.588451 131.0407) (xy 243.306549 131.0407) (xy 243.306541 131.0407) (xy 243.02706 131.077495) + (xy 242.754756 131.150459) (xy 242.49432 131.258335) (xy 242.494309 131.25834) (xy 242.250192 131.399281) + (xy 242.250183 131.399288) (xy 242.229606 131.415076) (xy 242.164438 131.44027) (xy 242.154122 131.4407) + (xy 241.761706 131.4407) (xy 241.714253 131.431261) (xy 241.667753 131.412) (xy 240.622253 131.412) + (xy 240.531747 131.412) (xy 240.531745 131.412) (xy 240.531743 131.412001) (xy 240.485245 131.431261) + (xy 240.437793 131.4407) (xy 238.822498 131.4407) (xy 238.822481 131.440701) (xy 238.719703 131.4512) + (xy 238.7197 131.451201) (xy 238.553168 131.506385) (xy 238.553163 131.506387) (xy 238.403842 131.598489) + (xy 238.279789 131.722542) (xy 238.187687 131.871863) (xy 238.187685 131.871868) (xy 238.159849 131.95587) + (xy 238.132501 132.038403) (xy 238.132501 132.038404) (xy 238.1325 132.038404) (xy 238.122 132.141183) + (xy 238.122 134.241201) (xy 238.122001 134.241218) (xy 238.1325 134.343996) (xy 238.132501 134.343999) + (xy 238.142445 134.374007) (xy 238.187686 134.510534) (xy 238.279788 134.659856) (xy 238.403844 134.783912) + (xy 238.553166 134.876014) (xy 238.719703 134.931199) (xy 238.822491 134.9417) (xy 240.749618 134.941699) + (xy 240.749627 134.9417) (xy 241.178351 134.941699) (xy 241.245389 134.961383) (xy 241.291144 135.014187) + (xy 241.301088 135.083346) (xy 241.278669 135.138583) (xy 241.257651 135.167511) (xy 241.180796 135.318346) + (xy 241.128481 135.479352) (xy 241.102 135.64655) (xy 241.102 135.815849) (xy 241.128481 135.983047) + (xy 241.180796 136.144053) (xy 241.257652 136.294888) (xy 241.357148 136.431834) (xy 241.357152 136.431839) + (xy 241.47686 136.551547) (xy 241.476865 136.551551) (xy 241.596317 136.638337) (xy 241.613815 136.65105) + (xy 241.709925 136.70002) (xy 241.764646 136.727903) (xy 241.764648 136.727903) (xy 241.764651 136.727905) + (xy 241.85095 136.755945) (xy 241.925652 136.780218) (xy 242.092851 136.8067) (xy 242.092856 136.8067) + (xy 242.262149 136.8067) (xy 242.429347 136.780218) (xy 242.590349 136.727905) (xy 242.741185 136.65105) + (xy 242.878141 136.551546) (xy 242.997846 136.431841) (xy 243.09735 136.294885) (xy 243.174205 136.144049) + (xy 243.226518 135.983047) (xy 243.243625 135.875038) (xy 243.253 135.815849) (xy 243.253 135.64655) + (xy 243.227428 135.485098) (xy 243.236382 135.415805) (xy 243.281379 135.362353) (xy 243.34813 135.341713) + (xy 243.349901 135.3417) (xy 243.588444 135.3417) (xy 243.588451 135.3417) (xy 243.867942 135.304904) + (xy 244.140239 135.231942) (xy 244.400683 135.124063) (xy 244.644817 134.983112) (xy 244.868465 134.8115) + (xy 245.0678 134.612165) (xy 245.135492 134.523946) (xy 245.19192 134.482744) (xy 245.261666 134.478589) + (xy 245.322586 134.512801) (xy 245.355339 134.574518) (xy 245.349526 134.644146) (xy 245.341255 134.661433) + (xy 245.285183 134.758551) (xy 245.285175 134.758568) (xy 245.175097 135.024321) (xy 245.100646 135.302176) + (xy 245.063101 135.587361) (xy 245.0631 135.587377) (xy 245.0631 135.875022) (xy 245.063101 135.875038) + (xy 245.100646 136.160223) (xy 245.175097 136.438078) (xy 245.285175 136.703831) (xy 245.285183 136.703848) + (xy 245.429004 136.952951) (xy 245.429015 136.952967) (xy 245.604121 137.181171) (xy 245.604127 137.181178) + (xy 245.807521 137.384572) (xy 245.807528 137.384578) (xy 245.970023 137.509264) (xy 246.035741 137.559691) + (xy 246.035748 137.559695) (xy 246.284851 137.703516) (xy 246.284856 137.703518) (xy 246.284859 137.70352) + (xy 246.284863 137.703521) (xy 246.284868 137.703524) (xy 246.29794 137.708939) (xy 246.352344 137.75278) + (xy 246.374409 137.819074) (xy 246.35713 137.886773) (xy 246.305993 137.934384) (xy 246.250488 137.9475) + (xy 236.447246 137.9475) (xy 236.363629 137.982136) (xy 231.634586 142.711181) (xy 231.573263 142.744666) + (xy 231.546905 142.7475) (xy 226.546846 142.7475) (xy 226.479807 142.727815) (xy 226.459165 142.711181) + (xy 226.340764 142.59278) (xy 226.307279 142.531457) (xy 226.312263 142.461765) (xy 226.354135 142.405832) + (xy 226.419599 142.381415) (xy 226.474579 142.390001) (xy 226.594917 142.43824) (xy 226.773908 142.474379) + (xy 226.773902 142.474379) (xy 226.790222 142.474659) (xy 226.956484 142.47752) (xy 227.136612 142.447558) + (xy 227.192107 142.427498) (xy 227.308336 142.385485) (xy 227.308337 142.385483) (xy 227.30834 142.385483) + (xy 227.323375 142.37672) (xy 227.330059 142.372835) (xy 227.33035 142.372757) (xy 227.358233 142.35646) + (xy 227.358351 142.356392) (xy 227.361568 142.355601) (xy 227.420662 142.339599) (xy 228.901792 142.339599) + (xy 228.901914 142.339606) (xy 228.910005 142.339605) (xy 228.910008 142.339606) (xy 228.942142 142.339602) + (xy 229.004704 142.356534) (xy 229.03253 142.372791) (xy 229.032532 142.372791) (xy 229.03868 142.376383) + (xy 229.040335 142.377208) (xy 229.054478 142.38545) (xy 229.2262 142.447521) (xy 229.406321 142.477482) + (xy 229.585998 142.47439) (xy 229.588891 142.474341) (xy 229.767866 142.438205) (xy 229.767869 142.438203) + (xy 229.767874 142.438203) (xy 229.93736 142.370262) (xy 230.091746 142.272763) (xy 230.103247 142.26215) + (xy 230.22593 142.14893) (xy 230.225932 142.148928) (xy 230.23117 142.141944) (xy 230.301096 142.048702) + (xy 230.357065 142.00688) (xy 230.400298 141.999099) (xy 230.6564 141.999099) (xy 231.1564 141.999099) + (xy 231.212332 141.999099) (xy 231.296324 141.98855) (xy 231.429157 141.933529) (xy 231.496004 141.8816) + (xy 231.496011 141.881594) (xy 231.963894 141.413712) (xy 231.963899 141.413706) (xy 232.015827 141.34686) + (xy 232.019042 141.3391) (xy 231.1564 141.3391) (xy 231.1564 141.999099) (xy 230.6564 141.999099) + (xy 230.6564 141.2131) (xy 230.676085 141.146061) (xy 230.728889 141.100306) (xy 230.7804 141.0891) + (xy 230.9064 141.0891) (xy 230.9064 140.9631) (xy 230.926085 140.896061) (xy 230.978889 140.850306) + (xy 231.0304 140.8391) (xy 232.0814 140.8391) (xy 232.0814 140.722953) (xy 232.06642 140.609169) + (xy 232.066418 140.609164) (xy 232.007778 140.467593) (xy 232.007775 140.467588) (xy 231.96742 140.414996) + (xy 231.942226 140.349827) (xy 231.956264 140.281382) (xy 231.967421 140.264023) (xy 232.008212 140.210863) + (xy 232.03182 140.153868) (xy 232.066907 140.069163) (xy 232.0819 139.955277) (xy 232.081899 139.222924) + (xy 232.07833 139.195814) (xy 232.066908 139.109045) (xy 232.066907 139.109037) (xy 232.008212 138.967337) + (xy 231.914844 138.845656) (xy 231.793163 138.752288) (xy 231.793162 138.752287) (xy 231.651463 138.693593) + (xy 231.651461 138.693592) (xy 231.537578 138.6786) (xy 231.537577 138.6786) (xy 231.2579 138.6786) + (xy 231.190861 138.658915) (xy 231.145106 138.606111) (xy 231.1339 138.5546) (xy 231.1339 135.64655) + (xy 232.212 135.64655) (xy 232.212 135.815849) (xy 232.238481 135.983047) (xy 232.290796 136.144053) + (xy 232.367652 136.294888) (xy 232.467148 136.431834) (xy 232.467152 136.431839) (xy 232.58686 136.551547) + (xy 232.586865 136.551551) (xy 232.706317 136.638337) (xy 232.723815 136.65105) (xy 232.819925 136.70002) + (xy 232.874646 136.727903) (xy 232.874648 136.727903) (xy 232.874651 136.727905) (xy 232.96095 136.755945) + (xy 233.035652 136.780218) (xy 233.202851 136.8067) (xy 233.202856 136.8067) (xy 233.372149 136.8067) + (xy 233.539347 136.780218) (xy 233.700349 136.727905) (xy 233.851185 136.65105) (xy 233.988141 136.551546) + (xy 234.107846 136.431841) (xy 234.20735 136.294885) (xy 234.284205 136.144049) (xy 234.336518 135.983047) + (xy 234.353625 135.875038) (xy 234.363 135.815849) (xy 234.363 135.64655) (xy 234.336518 135.479352) + (xy 234.291796 135.341713) (xy 234.284205 135.318351) (xy 234.284203 135.318348) (xy 234.284203 135.318346) + (xy 234.240176 135.23194) (xy 234.20735 135.167515) (xy 234.175781 135.124064) (xy 234.107851 135.030565) + (xy 234.107847 135.03056) (xy 233.988139 134.910852) (xy 233.988134 134.910848) (xy 233.851188 134.811352) + (xy 233.851187 134.811351) (xy 233.851185 134.81135) (xy 233.786447 134.778364) (xy 233.700353 134.734496) + (xy 233.539347 134.682181) (xy 233.372149 134.6557) (xy 233.372144 134.6557) (xy 233.202856 134.6557) + (xy 233.202851 134.6557) (xy 233.035652 134.682181) (xy 232.874646 134.734496) (xy 232.723811 134.811352) + (xy 232.586865 134.910848) (xy 232.58686 134.910852) (xy 232.467152 135.03056) (xy 232.467148 135.030565) + (xy 232.367652 135.167511) (xy 232.290796 135.318346) (xy 232.238481 135.479352) (xy 232.212 135.64655) + (xy 231.1339 135.64655) (xy 231.1339 134.784748) (xy 231.133899 134.784745) (xy 231.132845 134.7822) + (xy 231.099266 134.701132) (xy 229.448375 133.050241) (xy 227.44477 131.046636) (xy 227.444765 131.046634) + (xy 227.361153 131.012) (xy 219.947247 131.012) (xy 219.947246 131.012) (xy 219.910653 131.027158) + (xy 219.874059 131.042315) (xy 219.863633 131.046634) (xy 219.86363 131.046636) (xy 219.498267 131.412) + (xy 219.140932 131.769335) (xy 219.076935 131.833332) (xy 219.060973 131.871868) (xy 219.0423 131.916946) + (xy 219.0423 137.517305) (xy 219.022615 137.584344) (xy 219.005981 137.604986) (xy 213.518286 143.092681) + (xy 213.456963 143.126166) (xy 213.430605 143.129) (xy 207.828345 143.129) (xy 207.761306 143.109315) + (xy 207.740664 143.092681) (xy 207.454567 142.806584) (xy 207.421082 142.745261) (xy 207.426066 142.675569) + (xy 207.467938 142.619636) (xy 207.533402 142.595219) (xy 207.566788 142.597355) (xy 207.723908 142.629079) + (xy 207.723902 142.629079) (xy 207.740222 142.629359) (xy 207.906484 142.63222) (xy 208.086612 142.602258) + (xy 208.142107 142.582198) (xy 208.258336 142.540185) (xy 208.258337 142.540183) (xy 208.25834 142.540183) + (xy 208.273375 142.53142) (xy 208.280059 142.527535) (xy 208.28035 142.527457) (xy 208.308233 142.51116) + (xy 208.308351 142.511092) (xy 208.311568 142.510301) (xy 208.370662 142.494299) (xy 209.851792 142.494299) + (xy 209.851914 142.494306) (xy 209.860005 142.494305) (xy 209.860008 142.494306) (xy 209.892142 142.494302) + (xy 209.954704 142.511234) (xy 209.98253 142.527491) (xy 209.982532 142.527491) (xy 209.98868 142.531083) + (xy 209.990335 142.531908) (xy 210.004478 142.54015) (xy 210.1762 142.602221) (xy 210.356321 142.632182) + (xy 210.535998 142.62909) (xy 210.538891 142.629041) (xy 210.717866 142.592905) (xy 210.717869 142.592903) + (xy 210.717874 142.592903) (xy 210.88736 142.524962) (xy 211.041746 142.427463) (xy 211.065186 142.405832) + (xy 211.17593 142.30363) (xy 211.175932 142.303628) (xy 211.183148 142.294006) (xy 211.251096 142.203402) + (xy 211.307065 142.16158) (xy 211.350298 142.153799) (xy 211.6064 142.153799) (xy 212.1064 142.153799) + (xy 212.162332 142.153799) (xy 212.246324 142.14325) (xy 212.379157 142.088229) (xy 212.446004 142.0363) + (xy 212.446011 142.036294) (xy 212.913894 141.568412) (xy 212.913899 141.568406) (xy 212.965827 141.50156) + (xy 212.969042 141.4938) (xy 212.1064 141.4938) (xy 212.1064 142.153799) (xy 211.6064 142.153799) + (xy 211.6064 141.3678) (xy 211.626085 141.300761) (xy 211.678889 141.255006) (xy 211.7304 141.2438) + (xy 211.8564 141.2438) (xy 211.8564 141.1178) (xy 211.876085 141.050761) (xy 211.928889 141.005006) + (xy 211.9804 140.9938) (xy 213.0314 140.9938) (xy 213.0314 140.877653) (xy 213.01642 140.763869) + (xy 213.016418 140.763864) (xy 212.957778 140.622293) (xy 212.957775 140.622288) (xy 212.91742 140.569696) + (xy 212.892226 140.504527) (xy 212.906264 140.436082) (xy 212.917421 140.418723) (xy 212.920597 140.414585) + (xy 212.958212 140.365563) (xy 213.016907 140.223863) (xy 213.0319 140.109977) (xy 213.031899 139.377624) + (xy 213.027933 139.3475) (xy 213.017703 139.269782) (xy 213.016907 139.263737) (xy 212.958212 139.122037) + (xy 212.864844 139.000356) (xy 212.743163 138.906988) (xy 212.743162 138.906987) (xy 212.601463 138.848293) + (xy 212.601461 138.848292) (xy 212.487578 138.8333) (xy 212.487577 138.8333) (xy 212.186803 138.8333) + (xy 212.167621 138.827667) (xy 212.147643 138.826954) (xy 212.134782 138.818025) (xy 212.119764 138.813615) + (xy 212.106674 138.798509) (xy 212.090251 138.787106) (xy 212.076042 138.763157) (xy 212.074009 138.760811) + (xy 212.072242 138.756752) (xy 212.064476 138.738003) (xy 212.049266 138.701282) (xy 211.430118 138.082135) + (xy 211.346503 138.0475) (xy 209.923089 138.0475) (xy 209.85605 138.027815) (xy 209.810295 137.975011) + (xy 209.800351 137.905853) (xy 209.829376 137.842297) (xy 209.875637 137.808939) (xy 209.883088 137.805853) + (xy 210.130141 137.70352) (xy 210.379259 137.559691) (xy 210.607473 137.384577) (xy 210.810877 137.181173) + (xy 210.985991 136.952959) (xy 211.12982 136.703841) (xy 211.239902 136.43808) (xy 211.314353 136.160225) + (xy 211.3519 135.875029) (xy 211.3519 135.64655) (xy 213.162 135.64655) (xy 213.162 135.815849) + (xy 213.188481 135.983047) (xy 213.240796 136.144053) (xy 213.317652 136.294888) (xy 213.417148 136.431834) + (xy 213.417152 136.431839) (xy 213.53686 136.551547) (xy 213.536865 136.551551) (xy 213.656317 136.638337) + (xy 213.673815 136.65105) (xy 213.769925 136.70002) (xy 213.824646 136.727903) (xy 213.824648 136.727903) + (xy 213.824651 136.727905) (xy 213.91095 136.755945) (xy 213.985652 136.780218) (xy 214.152851 136.8067) + (xy 214.152856 136.8067) (xy 214.322149 136.8067) (xy 214.489347 136.780218) (xy 214.650349 136.727905) + (xy 214.801185 136.65105) (xy 214.938141 136.551546) (xy 215.057846 136.431841) (xy 215.15735 136.294885) + (xy 215.234205 136.144049) (xy 215.286518 135.983047) (xy 215.303625 135.875038) (xy 215.313 135.815849) + (xy 215.313 135.64655) (xy 215.286518 135.479352) (xy 215.241796 135.341713) (xy 215.234205 135.318351) + (xy 215.234203 135.318348) (xy 215.234203 135.318346) (xy 215.190176 135.23194) (xy 215.15735 135.167515) + (xy 215.125781 135.124064) (xy 215.057851 135.030565) (xy 215.057847 135.03056) (xy 214.938139 134.910852) + (xy 214.938134 134.910848) (xy 214.801188 134.811352) (xy 214.801187 134.811351) (xy 214.801185 134.81135) + (xy 214.736447 134.778364) (xy 214.650353 134.734496) (xy 214.489347 134.682181) (xy 214.322149 134.6557) + (xy 214.322144 134.6557) (xy 214.152856 134.6557) (xy 214.152851 134.6557) (xy 213.985652 134.682181) + (xy 213.824646 134.734496) (xy 213.673811 134.811352) (xy 213.536865 134.910848) (xy 213.53686 134.910852) + (xy 213.417152 135.03056) (xy 213.417148 135.030565) (xy 213.317652 135.167511) (xy 213.240796 135.318346) + (xy 213.188481 135.479352) (xy 213.162 135.64655) (xy 211.3519 135.64655) (xy 211.3519 135.587371) + (xy 211.314353 135.302175) (xy 211.239902 135.02432) (xy 211.140668 134.784748) (xy 211.129824 134.758568) + (xy 211.129816 134.758551) (xy 210.985995 134.509448) (xy 210.985994 134.509447) (xy 210.985991 134.509441) + (xy 210.882069 134.374007) (xy 210.810878 134.281228) (xy 210.810872 134.281221) (xy 210.607478 134.077827) + (xy 210.607471 134.077821) (xy 210.379267 133.902715) (xy 210.379265 133.902713) (xy 210.379259 133.902709) + (xy 210.379254 133.902706) (xy 210.379251 133.902704) (xy 210.130148 133.758883) (xy 210.130131 133.758875) + (xy 209.864378 133.648797) (xy 209.586523 133.574346) (xy 209.301338 133.536801) (xy 209.301335 133.5368) + (xy 209.301329 133.5368) (xy 209.013671 133.5368) (xy 209.013665 133.5368) (xy 209.013661 133.536801) + (xy 208.728476 133.574346) (xy 208.450621 133.648797) (xy 208.184868 133.758875) (xy 208.184851 133.758883) + (xy 207.935748 133.902704) (xy 207.935732 133.902715) (xy 207.707528 134.077821) (xy 207.707521 134.077827) + (xy 207.504127 134.281221) (xy 207.43293 134.374007) (xy 207.376501 134.415209) (xy 207.306755 134.419364) + (xy 207.245835 134.385151) (xy 207.213083 134.323434) (xy 207.218896 134.253807) (xy 207.227161 134.236531) + (xy 207.280363 134.144383) (xy 207.388242 133.883939) (xy 207.461204 133.611642) (xy 207.498 133.332151) + (xy 207.498 133.050249) (xy 207.461204 132.770758) (xy 207.388242 132.498461) (xy 207.280363 132.238017) + (xy 207.280361 132.238014) (xy 207.280359 132.238009) (xy 207.139416 131.99389) (xy 207.139412 131.993883) + (xy 206.9678 131.770235) (xy 206.967798 131.770233) (xy 206.967795 131.770229) (xy 206.76847 131.570904) + (xy 206.684389 131.506386) (xy 206.544817 131.399288) (xy 206.544811 131.399284) (xy 206.544809 131.399283) + (xy 206.30069 131.25834) (xy 206.300679 131.258335) (xy 206.040243 131.150459) (xy 205.767939 131.077495) + (xy 205.488458 131.0407) (xy 205.488451 131.0407) (xy 205.206549 131.0407) (xy 205.206541 131.0407) + (xy 204.92706 131.077495) (xy 204.654756 131.150459) (xy 204.39432 131.258335) (xy 204.394309 131.25834) + (xy 204.150192 131.399281) (xy 204.150183 131.399288) (xy 204.129606 131.415076) (xy 204.064438 131.44027) + (xy 204.054122 131.4407) (xy 203.661706 131.4407) (xy 203.614253 131.431261) (xy 203.567753 131.412) + (xy 202.522253 131.412) (xy 202.431747 131.412) (xy 202.431745 131.412) (xy 202.431743 131.412001) + (xy 202.385245 131.431261) (xy 202.337793 131.4407) (xy 200.722498 131.4407) (xy 200.722481 131.440701) + (xy 200.619703 131.4512) (xy 200.6197 131.451201) (xy 200.453168 131.506385) (xy 200.453163 131.506387) + (xy 200.303842 131.598489) (xy 200.179789 131.722542) (xy 200.087687 131.871863) (xy 200.087685 131.871868) + (xy 200.059849 131.95587) (xy 200.032501 132.038403) (xy 200.032501 132.038404) (xy 200.0325 132.038404) + (xy 200.022 132.141183) (xy 200.022 134.241201) (xy 200.022001 134.241218) (xy 200.0325 134.343996) + (xy 200.032501 134.343999) (xy 200.042445 134.374007) (xy 200.087686 134.510534) (xy 200.179788 134.659856) + (xy 200.303844 134.783912) (xy 200.453166 134.876014) (xy 200.619703 134.931199) (xy 200.722491 134.9417) + (xy 202.649618 134.941699) (xy 202.649627 134.9417) (xy 203.078351 134.941699) (xy 203.145389 134.961383) + (xy 203.191144 135.014187) (xy 203.201088 135.083346) (xy 203.178669 135.138583) (xy 203.157651 135.167511) + (xy 203.080796 135.318346) (xy 203.028481 135.479352) (xy 203.002 135.64655) (xy 203.002 135.815849) + (xy 203.028481 135.983047) (xy 203.080796 136.144053) (xy 203.157652 136.294888) (xy 203.257148 136.431834) + (xy 203.257152 136.431839) (xy 203.37686 136.551547) (xy 203.376865 136.551551) (xy 203.496317 136.638337) + (xy 203.513815 136.65105) (xy 203.609925 136.70002) (xy 203.664646 136.727903) (xy 203.664648 136.727903) + (xy 203.664651 136.727905) (xy 203.75095 136.755945) (xy 203.825652 136.780218) (xy 203.992851 136.8067) + (xy 203.992856 136.8067) (xy 204.162149 136.8067) (xy 204.329347 136.780218) (xy 204.490349 136.727905) + (xy 204.641185 136.65105) (xy 204.778141 136.551546) (xy 204.897846 136.431841) (xy 204.99735 136.294885) + (xy 205.074205 136.144049) (xy 205.126518 135.983047) (xy 205.143625 135.875038) (xy 205.153 135.815849) + (xy 205.153 135.64655) (xy 205.127428 135.485098) (xy 205.136382 135.415805) (xy 205.181379 135.362353) + (xy 205.24813 135.341713) (xy 205.249901 135.3417) (xy 205.488444 135.3417) (xy 205.488451 135.3417) + (xy 205.767942 135.304904) (xy 206.040239 135.231942) (xy 206.300683 135.124063) (xy 206.544817 134.983112) + (xy 206.768465 134.8115) (xy 206.9678 134.612165) (xy 207.035492 134.523946) (xy 207.09192 134.482744) + (xy 207.161666 134.478589) (xy 207.222586 134.512801) (xy 207.255339 134.574518) (xy 207.249526 134.644146) + (xy 207.241255 134.661433) (xy 207.185183 134.758551) (xy 207.185175 134.758568) (xy 207.075097 135.024321) + (xy 207.000646 135.302176) (xy 206.963101 135.587361) (xy 206.9631 135.587377) (xy 206.9631 135.875022) + (xy 206.963101 135.875038) (xy 207.000646 136.160223) (xy 207.075097 136.438078) (xy 207.185175 136.703831) + (xy 207.185183 136.703848) (xy 207.329004 136.952951) (xy 207.329015 136.952967) (xy 207.504121 137.181171) + (xy 207.504127 137.181178) (xy 207.707521 137.384572) (xy 207.707528 137.384578) (xy 207.870023 137.509264) + (xy 207.935741 137.559691) (xy 207.935748 137.559695) (xy 208.184851 137.703516) (xy 208.184856 137.703518) + (xy 208.184859 137.70352) (xy 208.184863 137.703521) (xy 208.184868 137.703524) (xy 208.278475 137.742297) + (xy 208.431912 137.805853) (xy 208.439363 137.808939) (xy 208.493767 137.85278) (xy 208.515832 137.919074) + (xy 208.498553 137.986773) (xy 208.447416 138.034384) (xy 208.391911 138.0475) (xy 204.821944 138.0475) + (xy 204.744098 138.079745) (xy 204.744099 138.079746) (xy 204.73833 138.082135) (xy 204.738329 138.082136) + (xy 199.460537 143.35993) (xy 199.399214 143.393415) (xy 199.372856 143.396249) (xy 195.901097 143.396249) + (xy 195.834058 143.376564) (xy 195.788303 143.32376) (xy 195.778359 143.254602) (xy 195.807384 143.191046) + (xy 195.813416 143.184568) (xy 200.659165 138.338819) (xy 200.720488 138.305334) (xy 200.746846 138.3025) + (xy 201.996175 138.3025) (xy 202.063214 138.322185) (xy 202.108969 138.374989) (xy 202.110715 138.378999) + (xy 202.134383 138.436137) (xy 202.141857 138.454181) (xy 202.141859 138.454185) (xy 202.22946 138.585288) + (xy 202.229463 138.585292) (xy 202.340957 138.696786) (xy 202.340961 138.696789) (xy 202.472064 138.78439) + (xy 202.472077 138.784397) (xy 202.617748 138.844735) (xy 202.617753 138.844737) (xy 202.758382 138.87271) + (xy 202.772403 138.875499) (xy 202.772406 138.8755) (xy 202.772408 138.8755) (xy 202.930094 138.8755) + (xy 202.930095 138.875499) (xy 203.084747 138.844737) (xy 203.213317 138.791482) (xy 203.230422 138.784397) + (xy 203.230422 138.784396) (xy 203.230429 138.784394) (xy 203.361539 138.696789) (xy 203.473039 138.585289) + (xy 203.560644 138.454179) (xy 203.56134 138.4525) (xy 203.580835 138.405434) (xy 203.620987 138.308497) + (xy 203.65175 138.153842) (xy 203.65175 137.996158) (xy 203.65175 137.996155) (xy 203.651749 137.996153) + (xy 203.642071 137.9475) (xy 203.620987 137.841503) (xy 203.607499 137.808939) (xy 203.560647 137.695827) + (xy 203.56064 137.695814) (xy 203.473039 137.564711) (xy 203.473036 137.564707) (xy 203.361542 137.453213) + (xy 203.361538 137.45321) (xy 203.230435 137.365609) (xy 203.230422 137.365602) (xy 203.084751 137.305264) + (xy 203.084739 137.305261) (xy 202.930095 137.2745) (xy 202.930092 137.2745) (xy 202.772408 137.2745) + (xy 202.772405 137.2745) (xy 202.61776 137.305261) (xy 202.617748 137.305264) (xy 202.472077 137.365602) + (xy 202.472064 137.365609) (xy 202.340961 137.45321) (xy 202.340957 137.453213) (xy 202.229463 137.564707) + (xy 202.22946 137.564711) (xy 202.141859 137.695814) (xy 202.141857 137.695818) (xy 202.138669 137.703516) + (xy 202.110734 137.770954) (xy 202.066896 137.825356) (xy 202.000602 137.847421) (xy 201.996175 137.8475) + (xy 200.555994 137.8475) (xy 200.536043 137.855765) (xy 200.536042 137.855765) (xy 200.472387 137.882131) + (xy 200.472379 137.882136) (xy 195.521587 142.83293) (xy 195.460264 142.866415) (xy 195.433906 142.869249) + (xy 192.456325 142.869249) (xy 192.443524 142.86549) (xy 192.43022 142.86647) (xy 192.410651 142.855837) + (xy 192.389286 142.849564) (xy 192.37919 142.838744) (xy 192.368827 142.833113) (xy 192.355829 142.813705) + (xy 192.347617 142.804903) (xy 192.344359 142.798966) (xy 192.310644 142.71757) (xy 192.249365 142.62586) + (xy 192.246767 142.621125) (xy 192.240383 142.592071) (xy 192.231495 142.563685) (xy 192.232967 142.558318) + (xy 192.231773 142.552884) (xy 192.242108 142.524994) (xy 192.249979 142.496305) (xy 192.254393 142.491846) + (xy 192.256053 142.487368) (xy 192.266909 142.479205) (xy 192.289263 142.456628) (xy 192.335446 142.427463) + (xy 192.358886 142.405832) (xy 192.46963 142.30363) (xy 192.469632 142.303628) (xy 192.476848 142.294006) + (xy 192.544796 142.203402) (xy 192.600765 142.16158) (xy 192.643998 142.153799) (xy 192.9001 142.153799) + (xy 193.4001 142.153799) (xy 193.456032 142.153799) (xy 193.540024 142.14325) (xy 193.672857 142.088229) + (xy 193.739704 142.0363) (xy 193.739711 142.036294) (xy 194.207594 141.568412) (xy 194.207599 141.568406) + (xy 194.259527 141.50156) (xy 194.262742 141.4938) (xy 193.4001 141.4938) (xy 193.4001 142.153799) + (xy 192.9001 142.153799) (xy 192.9001 141.3678) (xy 192.919785 141.300761) (xy 192.972589 141.255006) + (xy 193.0241 141.2438) (xy 193.1501 141.2438) (xy 193.1501 141.1178) (xy 193.169785 141.050761) + (xy 193.222589 141.005006) (xy 193.2741 140.9938) (xy 194.3251 140.9938) (xy 194.3251 140.877653) + (xy 194.31012 140.763869) (xy 194.310118 140.763864) (xy 194.251478 140.622293) (xy 194.251475 140.622288) + (xy 194.21112 140.569696) (xy 194.185926 140.504527) (xy 194.199964 140.436082) (xy 194.211121 140.418723) + (xy 194.214297 140.414585) (xy 194.251912 140.365563) (xy 194.310607 140.223863) (xy 194.3256 140.109977) + (xy 194.325599 139.377624) (xy 194.321633 139.3475) (xy 194.311403 139.269782) (xy 194.310607 139.263737) + (xy 194.251912 139.122037) (xy 194.158544 139.000356) (xy 194.036863 138.906988) (xy 194.036862 138.906987) + (xy 193.895163 138.848293) (xy 193.895161 138.848292) (xy 193.781278 138.8333) (xy 193.781277 138.8333) + (xy 193.500191 138.8333) (xy 193.433152 138.813615) (xy 193.387397 138.760811) (xy 193.378573 138.733489) + (xy 193.3776 138.728597) (xy 193.371898 138.714832) (xy 193.342965 138.644982) (xy 193.278968 138.580985) + (xy 193.036495 138.338512) (xy 192.78012 138.082136) (xy 192.780115 138.082134) (xy 192.696503 138.0475) + (xy 190.873089 138.0475) (xy 190.80605 138.027815) (xy 190.760295 137.975011) (xy 190.750351 137.905853) + (xy 190.779376 137.842297) (xy 190.825637 137.808939) (xy 190.833088 137.805853) (xy 191.080141 137.70352) + (xy 191.329259 137.559691) (xy 191.557473 137.384577) (xy 191.760877 137.181173) (xy 191.935991 136.952959) + (xy 192.07982 136.703841) (xy 192.189902 136.43808) (xy 192.264353 136.160225) (xy 192.3019 135.875029) + (xy 192.3019 135.64655) (xy 194.112 135.64655) (xy 194.112 135.815849) (xy 194.138481 135.983047) + (xy 194.190796 136.144053) (xy 194.267652 136.294888) (xy 194.367148 136.431834) (xy 194.367152 136.431839) + (xy 194.48686 136.551547) (xy 194.486865 136.551551) (xy 194.606317 136.638337) (xy 194.623815 136.65105) + (xy 194.719925 136.70002) (xy 194.774646 136.727903) (xy 194.774648 136.727903) (xy 194.774651 136.727905) + (xy 194.86095 136.755945) (xy 194.935652 136.780218) (xy 195.102851 136.8067) (xy 195.102856 136.8067) + (xy 195.272149 136.8067) (xy 195.439347 136.780218) (xy 195.600349 136.727905) (xy 195.751185 136.65105) + (xy 195.888141 136.551546) (xy 196.007846 136.431841) (xy 196.10735 136.294885) (xy 196.184205 136.144049) + (xy 196.236518 135.983047) (xy 196.253625 135.875038) (xy 196.263 135.815849) (xy 196.263 135.64655) + (xy 196.236518 135.479352) (xy 196.191796 135.341713) (xy 196.184205 135.318351) (xy 196.184203 135.318348) + (xy 196.184203 135.318346) (xy 196.140176 135.23194) (xy 196.10735 135.167515) (xy 196.075781 135.124064) + (xy 196.007851 135.030565) (xy 196.007847 135.03056) (xy 195.888139 134.910852) (xy 195.888134 134.910848) + (xy 195.751188 134.811352) (xy 195.751187 134.811351) (xy 195.751185 134.81135) (xy 195.686447 134.778364) + (xy 195.600353 134.734496) (xy 195.439347 134.682181) (xy 195.272149 134.6557) (xy 195.272144 134.6557) + (xy 195.102856 134.6557) (xy 195.102851 134.6557) (xy 194.935652 134.682181) (xy 194.774646 134.734496) + (xy 194.623811 134.811352) (xy 194.486865 134.910848) (xy 194.48686 134.910852) (xy 194.367152 135.03056) + (xy 194.367148 135.030565) (xy 194.267652 135.167511) (xy 194.190796 135.318346) (xy 194.138481 135.479352) + (xy 194.112 135.64655) (xy 192.3019 135.64655) (xy 192.3019 135.587371) (xy 192.264353 135.302175) + (xy 192.189902 135.02432) (xy 192.090668 134.784748) (xy 192.079824 134.758568) (xy 192.079816 134.758551) + (xy 191.935995 134.509448) (xy 191.935994 134.509447) (xy 191.935991 134.509441) (xy 191.832069 134.374007) + (xy 191.760878 134.281228) (xy 191.760872 134.281221) (xy 191.557478 134.077827) (xy 191.557471 134.077821) + (xy 191.329267 133.902715) (xy 191.329265 133.902713) (xy 191.329259 133.902709) (xy 191.329254 133.902706) + (xy 191.329251 133.902704) (xy 191.080148 133.758883) (xy 191.080131 133.758875) (xy 190.814378 133.648797) + (xy 190.536523 133.574346) (xy 190.251338 133.536801) (xy 190.251335 133.5368) (xy 190.251329 133.5368) + (xy 189.963671 133.5368) (xy 189.963665 133.5368) (xy 189.963661 133.536801) (xy 189.678476 133.574346) + (xy 189.400621 133.648797) (xy 189.134868 133.758875) (xy 189.134851 133.758883) (xy 188.885748 133.902704) + (xy 188.885732 133.902715) (xy 188.657528 134.077821) (xy 188.657521 134.077827) (xy 188.454127 134.281221) + (xy 188.38293 134.374007) (xy 188.326501 134.415209) (xy 188.256755 134.419364) (xy 188.195835 134.385151) + (xy 188.163083 134.323434) (xy 188.168896 134.253807) (xy 188.177161 134.236531) (xy 188.230363 134.144383) + (xy 188.338242 133.883939) (xy 188.411204 133.611642) (xy 188.448 133.332151) (xy 188.448 133.050249) + (xy 188.411204 132.770758) (xy 188.338242 132.498461) (xy 188.230363 132.238017) (xy 188.230361 132.238014) + (xy 188.230359 132.238009) (xy 188.089416 131.99389) (xy 188.089412 131.993883) (xy 187.9178 131.770235) + (xy 187.917798 131.770233) (xy 187.917795 131.770229) (xy 187.71847 131.570904) (xy 187.634389 131.506386) + (xy 187.494817 131.399288) (xy 187.494811 131.399284) (xy 187.494809 131.399283) (xy 187.25069 131.25834) + (xy 187.250679 131.258335) (xy 186.990243 131.150459) (xy 186.717939 131.077495) (xy 186.438458 131.0407) + (xy 186.438451 131.0407) (xy 186.156549 131.0407) (xy 186.156541 131.0407) (xy 185.87706 131.077495) + (xy 185.604756 131.150459) (xy 185.34432 131.258335) (xy 185.344309 131.25834) (xy 185.100192 131.399281) + (xy 185.100183 131.399288) (xy 185.079606 131.415076) (xy 185.014438 131.44027) (xy 185.004122 131.4407) + (xy 184.611706 131.4407) (xy 184.564253 131.431261) (xy 184.517753 131.412) (xy 183.472253 131.412) + (xy 183.381747 131.412) (xy 183.381745 131.412) (xy 183.381743 131.412001) (xy 183.335245 131.431261) + (xy 183.287793 131.4407) (xy 181.672498 131.4407) (xy 181.672481 131.440701) (xy 181.569703 131.4512) + (xy 181.5697 131.451201) (xy 181.403168 131.506385) (xy 181.403163 131.506387) (xy 181.253842 131.598489) + (xy 181.129789 131.722542) (xy 181.037687 131.871863) (xy 181.037685 131.871868) (xy 181.009849 131.95587) + (xy 180.982501 132.038403) (xy 180.982501 132.038404) (xy 180.9825 132.038404) (xy 180.972 132.141183) + (xy 180.972 134.241201) (xy 180.972001 134.241218) (xy 180.9825 134.343996) (xy 180.982501 134.343999) + (xy 180.992445 134.374007) (xy 181.037686 134.510534) (xy 181.129788 134.659856) (xy 181.253844 134.783912) + (xy 181.403166 134.876014) (xy 181.569703 134.931199) (xy 181.672491 134.9417) (xy 183.599618 134.941699) + (xy 183.599627 134.9417) (xy 184.028351 134.941699) (xy 184.095389 134.961383) (xy 184.141144 135.014187) + (xy 184.151088 135.083346) (xy 184.128669 135.138583) (xy 184.107651 135.167511) (xy 184.030796 135.318346) + (xy 183.978481 135.479352) (xy 183.952 135.64655) (xy 183.952 135.815849) (xy 183.978481 135.983047) + (xy 184.030796 136.144053) (xy 184.107652 136.294888) (xy 184.207148 136.431834) (xy 184.207152 136.431839) + (xy 184.32686 136.551547) (xy 184.326865 136.551551) (xy 184.446317 136.638337) (xy 184.463815 136.65105) + (xy 184.559925 136.70002) (xy 184.614646 136.727903) (xy 184.614648 136.727903) (xy 184.614651 136.727905) + (xy 184.70095 136.755945) (xy 184.775652 136.780218) (xy 184.942851 136.8067) (xy 184.942856 136.8067) + (xy 185.112149 136.8067) (xy 185.279347 136.780218) (xy 185.440349 136.727905) (xy 185.591185 136.65105) + (xy 185.728141 136.551546) (xy 185.847846 136.431841) (xy 185.94735 136.294885) (xy 186.024205 136.144049) + (xy 186.076518 135.983047) (xy 186.093625 135.875038) (xy 186.103 135.815849) (xy 186.103 135.64655) + (xy 186.077428 135.485098) (xy 186.086382 135.415805) (xy 186.131379 135.362353) (xy 186.19813 135.341713) + (xy 186.199901 135.3417) (xy 186.438444 135.3417) (xy 186.438451 135.3417) (xy 186.717942 135.304904) + (xy 186.990239 135.231942) (xy 187.250683 135.124063) (xy 187.494817 134.983112) (xy 187.718465 134.8115) + (xy 187.9178 134.612165) (xy 187.985492 134.523946) (xy 188.04192 134.482744) (xy 188.111666 134.478589) + (xy 188.172586 134.512801) (xy 188.205339 134.574518) (xy 188.199526 134.644146) (xy 188.191255 134.661433) + (xy 188.135183 134.758551) (xy 188.135175 134.758568) (xy 188.025097 135.024321) (xy 187.950646 135.302176) + (xy 187.913101 135.587361) (xy 187.9131 135.587377) (xy 187.9131 135.875022) (xy 187.913101 135.875038) + (xy 187.950646 136.160223) (xy 188.025097 136.438078) (xy 188.135175 136.703831) (xy 188.135183 136.703848) + (xy 188.279004 136.952951) (xy 188.279015 136.952967) (xy 188.454121 137.181171) (xy 188.454127 137.181178) + (xy 188.657521 137.384572) (xy 188.657528 137.384578) (xy 188.820023 137.509264) (xy 188.885741 137.559691) + (xy 188.885748 137.559695) (xy 189.134851 137.703516) (xy 189.134856 137.703518) (xy 189.134859 137.70352) + (xy 189.134863 137.703521) (xy 189.134868 137.703524) (xy 189.228475 137.742297) (xy 189.381912 137.805853) + (xy 189.389363 137.808939) (xy 189.443767 137.85278) (xy 189.465832 137.919074) (xy 189.448553 137.986773) + (xy 189.397416 138.034384) (xy 189.341911 138.0475) (xy 179.705994 138.0475) (xy 179.628148 138.079745) + (xy 179.628149 138.079746) (xy 179.62238 138.082135) (xy 179.622379 138.082136) (xy 174.643336 143.061181) + (xy 174.582013 143.094666) (xy 174.555655 143.0975) (xy 169.746845 143.0975) (xy 169.679806 143.077815) + (xy 169.659164 143.061181) (xy 169.190763 142.59278) (xy 169.157278 142.531457) (xy 169.162262 142.461765) + (xy 169.204134 142.405832) (xy 169.269598 142.381415) (xy 169.324581 142.390001) (xy 169.384619 142.414069) + (xy 169.444914 142.438239) (xy 169.444915 142.438239) (xy 169.444917 142.43824) (xy 169.623908 142.474379) + (xy 169.623902 142.474379) (xy 169.640222 142.474659) (xy 169.806484 142.47752) (xy 169.986612 142.447558) + (xy 170.042107 142.427498) (xy 170.158336 142.385485) (xy 170.158337 142.385483) (xy 170.15834 142.385483) + (xy 170.173375 142.37672) (xy 170.180059 142.372835) (xy 170.18035 142.372757) (xy 170.208233 142.35646) + (xy 170.208351 142.356392) (xy 170.211568 142.355601) (xy 170.270662 142.339599) (xy 171.751792 142.339599) + (xy 171.751914 142.339606) (xy 171.760005 142.339605) (xy 171.760008 142.339606) (xy 171.792142 142.339602) + (xy 171.854704 142.356534) (xy 171.88253 142.372791) (xy 171.882532 142.372791) (xy 171.88868 142.376383) + (xy 171.890335 142.377208) (xy 171.904478 142.38545) (xy 172.0762 142.447521) (xy 172.256321 142.477482) + (xy 172.435998 142.47439) (xy 172.438891 142.474341) (xy 172.617866 142.438205) (xy 172.617869 142.438203) + (xy 172.617874 142.438203) (xy 172.78736 142.370262) (xy 172.941746 142.272763) (xy 172.953247 142.26215) + (xy 173.07593 142.14893) (xy 173.075932 142.148928) (xy 173.08117 142.141944) (xy 173.151096 142.048702) + (xy 173.207065 142.00688) (xy 173.250298 141.999099) (xy 173.5064 141.999099) (xy 174.0064 141.999099) + (xy 174.062332 141.999099) (xy 174.146324 141.98855) (xy 174.279157 141.933529) (xy 174.346004 141.8816) + (xy 174.346011 141.881594) (xy 174.813894 141.413712) (xy 174.813899 141.413706) (xy 174.865827 141.34686) + (xy 174.869042 141.3391) (xy 174.0064 141.3391) (xy 174.0064 141.999099) (xy 173.5064 141.999099) + (xy 173.5064 141.2131) (xy 173.526085 141.146061) (xy 173.578889 141.100306) (xy 173.6304 141.0891) + (xy 173.7564 141.0891) (xy 173.7564 140.9631) (xy 173.776085 140.896061) (xy 173.828889 140.850306) + (xy 173.8804 140.8391) (xy 174.9314 140.8391) (xy 174.9314 140.722953) (xy 174.91642 140.609169) + (xy 174.916418 140.609164) (xy 174.857778 140.467593) (xy 174.857775 140.467588) (xy 174.81742 140.414996) + (xy 174.792226 140.349827) (xy 174.806264 140.281382) (xy 174.817421 140.264023) (xy 174.858212 140.210863) + (xy 174.88182 140.153868) (xy 174.916907 140.069163) (xy 174.9319 139.955277) (xy 174.931899 139.222924) + (xy 174.92833 139.195814) (xy 174.916908 139.109045) (xy 174.916907 139.109037) (xy 174.858212 138.967337) + (xy 174.764844 138.845656) (xy 174.643163 138.752288) (xy 174.643162 138.752287) (xy 174.501463 138.693593) + (xy 174.501461 138.693592) (xy 174.387578 138.6786) (xy 174.387577 138.6786) (xy 174.064145 138.6786) + (xy 173.997106 138.658915) (xy 173.970528 138.635913) (xy 173.957302 138.620686) (xy 173.949265 138.601282) + (xy 173.885268 138.537285) (xy 173.656472 138.308489) (xy 173.43012 138.082136) (xy 173.430115 138.082134) + (xy 173.346503 138.0475) (xy 171.823089 138.0475) (xy 171.75605 138.027815) (xy 171.710295 137.975011) + (xy 171.700351 137.905853) (xy 171.729376 137.842297) (xy 171.775637 137.808939) (xy 171.783088 137.805853) + (xy 172.030141 137.70352) (xy 172.279259 137.559691) (xy 172.507473 137.384577) (xy 172.710877 137.181173) + (xy 172.885991 136.952959) (xy 173.02982 136.703841) (xy 173.139902 136.43808) (xy 173.214353 136.160225) + (xy 173.2519 135.875029) (xy 173.2519 135.64655) (xy 175.062 135.64655) (xy 175.062 135.815849) + (xy 175.088481 135.983047) (xy 175.140796 136.144053) (xy 175.217652 136.294888) (xy 175.317148 136.431834) + (xy 175.317152 136.431839) (xy 175.43686 136.551547) (xy 175.436865 136.551551) (xy 175.556317 136.638337) + (xy 175.573815 136.65105) (xy 175.669925 136.70002) (xy 175.724646 136.727903) (xy 175.724648 136.727903) + (xy 175.724651 136.727905) (xy 175.81095 136.755945) (xy 175.885652 136.780218) (xy 176.052851 136.8067) + (xy 176.052856 136.8067) (xy 176.222149 136.8067) (xy 176.389347 136.780218) (xy 176.550349 136.727905) + (xy 176.701185 136.65105) (xy 176.838141 136.551546) (xy 176.957846 136.431841) (xy 177.05735 136.294885) + (xy 177.134205 136.144049) (xy 177.186518 135.983047) (xy 177.203625 135.875038) (xy 177.213 135.815849) + (xy 177.213 135.64655) (xy 177.186518 135.479352) (xy 177.141796 135.341713) (xy 177.134205 135.318351) + (xy 177.134203 135.318348) (xy 177.134203 135.318346) (xy 177.090176 135.23194) (xy 177.05735 135.167515) + (xy 177.025781 135.124064) (xy 176.957851 135.030565) (xy 176.957847 135.03056) (xy 176.838139 134.910852) + (xy 176.838134 134.910848) (xy 176.701188 134.811352) (xy 176.701187 134.811351) (xy 176.701185 134.81135) + (xy 176.636447 134.778364) (xy 176.550353 134.734496) (xy 176.389347 134.682181) (xy 176.222149 134.6557) + (xy 176.222144 134.6557) (xy 176.052856 134.6557) (xy 176.052851 134.6557) (xy 175.885652 134.682181) + (xy 175.724646 134.734496) (xy 175.573811 134.811352) (xy 175.436865 134.910848) (xy 175.43686 134.910852) + (xy 175.317152 135.03056) (xy 175.317148 135.030565) (xy 175.217652 135.167511) (xy 175.140796 135.318346) + (xy 175.088481 135.479352) (xy 175.062 135.64655) (xy 173.2519 135.64655) (xy 173.2519 135.587371) + (xy 173.214353 135.302175) (xy 173.139902 135.02432) (xy 173.040668 134.784748) (xy 173.029824 134.758568) + (xy 173.029816 134.758551) (xy 172.885995 134.509448) (xy 172.885994 134.509447) (xy 172.885991 134.509441) + (xy 172.782069 134.374007) (xy 172.710878 134.281228) (xy 172.710872 134.281221) (xy 172.507478 134.077827) + (xy 172.507471 134.077821) (xy 172.279267 133.902715) (xy 172.279265 133.902713) (xy 172.279259 133.902709) + (xy 172.279254 133.902706) (xy 172.279251 133.902704) (xy 172.030148 133.758883) (xy 172.030131 133.758875) + (xy 171.764378 133.648797) (xy 171.486523 133.574346) (xy 171.201338 133.536801) (xy 171.201335 133.5368) + (xy 171.201329 133.5368) (xy 170.913671 133.5368) (xy 170.913665 133.5368) (xy 170.913661 133.536801) + (xy 170.628476 133.574346) (xy 170.350621 133.648797) (xy 170.084868 133.758875) (xy 170.084851 133.758883) + (xy 169.835748 133.902704) (xy 169.835732 133.902715) (xy 169.607528 134.077821) (xy 169.607521 134.077827) + (xy 169.404127 134.281221) (xy 169.33293 134.374007) (xy 169.276501 134.415209) (xy 169.206755 134.419364) + (xy 169.145835 134.385151) (xy 169.113083 134.323434) (xy 169.118896 134.253807) (xy 169.127161 134.236531) + (xy 169.180363 134.144383) (xy 169.288242 133.883939) (xy 169.361204 133.611642) (xy 169.398 133.332151) + (xy 169.398 133.050249) (xy 169.361204 132.770758) (xy 169.288242 132.498461) (xy 169.180363 132.238017) + (xy 169.180361 132.238014) (xy 169.180359 132.238009) (xy 169.039416 131.99389) (xy 169.039412 131.993883) + (xy 168.8678 131.770235) (xy 168.867798 131.770233) (xy 168.867795 131.770229) (xy 168.66847 131.570904) + (xy 168.584389 131.506386) (xy 168.444817 131.399288) (xy 168.444811 131.399284) (xy 168.444809 131.399283) + (xy 168.20069 131.25834) (xy 168.200679 131.258335) (xy 167.940243 131.150459) (xy 167.667939 131.077495) + (xy 167.388458 131.0407) (xy 167.388451 131.0407) (xy 167.106549 131.0407) (xy 167.106541 131.0407) + (xy 166.82706 131.077495) (xy 166.554756 131.150459) (xy 166.29432 131.258335) (xy 166.294309 131.25834) + (xy 166.050192 131.399281) (xy 166.050183 131.399288) (xy 166.029606 131.415076) (xy 165.964438 131.44027) + (xy 165.954122 131.4407) (xy 165.561706 131.4407) (xy 165.514253 131.431261) (xy 165.467753 131.412) + (xy 164.422253 131.412) (xy 164.331747 131.412) (xy 164.331745 131.412) (xy 164.331743 131.412001) + (xy 164.285245 131.431261) (xy 164.237793 131.4407) (xy 162.622498 131.4407) (xy 162.622481 131.440701) + (xy 162.519703 131.4512) (xy 162.5197 131.451201) (xy 162.353168 131.506385) (xy 162.353163 131.506387) + (xy 162.203842 131.598489) (xy 162.079789 131.722542) (xy 161.987687 131.871863) (xy 161.987685 131.871868) + (xy 161.959849 131.95587) (xy 161.932501 132.038403) (xy 161.932501 132.038404) (xy 161.9325 132.038404) + (xy 161.922 132.141183) (xy 161.922 134.241201) (xy 161.922001 134.241218) (xy 161.9325 134.343996) + (xy 161.932501 134.343999) (xy 161.942445 134.374007) (xy 161.987686 134.510534) (xy 162.079788 134.659856) + (xy 162.203844 134.783912) (xy 162.353166 134.876014) (xy 162.519703 134.931199) (xy 162.622491 134.9417) + (xy 164.549618 134.941699) (xy 164.549627 134.9417) (xy 164.978351 134.941699) (xy 165.045389 134.961383) + (xy 165.091144 135.014187) (xy 165.101088 135.083346) (xy 165.078669 135.138583) (xy 165.057651 135.167511) + (xy 164.980796 135.318346) (xy 164.928481 135.479352) (xy 164.902 135.64655) (xy 164.902 135.815849) + (xy 164.928481 135.983047) (xy 164.980796 136.144053) (xy 165.057652 136.294888) (xy 165.157148 136.431834) + (xy 165.157152 136.431839) (xy 165.27686 136.551547) (xy 165.276865 136.551551) (xy 165.396317 136.638337) + (xy 165.413815 136.65105) (xy 165.509925 136.70002) (xy 165.564646 136.727903) (xy 165.564648 136.727903) + (xy 165.564651 136.727905) (xy 165.65095 136.755945) (xy 165.725652 136.780218) (xy 165.892851 136.8067) + (xy 165.892856 136.8067) (xy 166.062149 136.8067) (xy 166.229347 136.780218) (xy 166.390349 136.727905) + (xy 166.541185 136.65105) (xy 166.678141 136.551546) (xy 166.797846 136.431841) (xy 166.89735 136.294885) + (xy 166.974205 136.144049) (xy 167.026518 135.983047) (xy 167.043625 135.875038) (xy 167.053 135.815849) + (xy 167.053 135.64655) (xy 167.027428 135.485098) (xy 167.036382 135.415805) (xy 167.081379 135.362353) + (xy 167.14813 135.341713) (xy 167.149901 135.3417) (xy 167.388444 135.3417) (xy 167.388451 135.3417) + (xy 167.667942 135.304904) (xy 167.940239 135.231942) (xy 168.200683 135.124063) (xy 168.444817 134.983112) + (xy 168.668465 134.8115) (xy 168.8678 134.612165) (xy 168.935492 134.523946) (xy 168.99192 134.482744) + (xy 169.061666 134.478589) (xy 169.122586 134.512801) (xy 169.155339 134.574518) (xy 169.149526 134.644146) + (xy 169.141255 134.661433) (xy 169.085183 134.758551) (xy 169.085175 134.758568) (xy 168.975097 135.024321) + (xy 168.900646 135.302176) (xy 168.863101 135.587361) (xy 168.8631 135.587377) (xy 168.8631 135.875022) + (xy 168.863101 135.875038) (xy 168.900646 136.160223) (xy 168.975097 136.438078) (xy 169.085175 136.703831) + (xy 169.085183 136.703848) (xy 169.229004 136.952951) (xy 169.229015 136.952967) (xy 169.404121 137.181171) + (xy 169.404127 137.181178) (xy 169.607521 137.384572) (xy 169.607528 137.384578) (xy 169.770023 137.509264) + (xy 169.835741 137.559691) (xy 169.835748 137.559695) (xy 170.084851 137.703516) (xy 170.084856 137.703518) + (xy 170.084859 137.70352) (xy 170.084863 137.703521) (xy 170.084868 137.703524) (xy 170.178475 137.742297) + (xy 170.331912 137.805853) (xy 170.339363 137.808939) (xy 170.393767 137.85278) (xy 170.415832 137.919074) + (xy 170.398553 137.986773) (xy 170.347416 138.034384) (xy 170.291911 138.0475) (xy 167.246503 138.0475) + (xy 167.155997 138.0475) (xy 167.155995 138.0475) (xy 167.155993 138.047501) (xy 167.072384 138.082131) + (xy 167.072382 138.082133) (xy 162.143336 143.011181) (xy 162.082013 143.044666) (xy 162.055655 143.0475) + (xy 149.996846 143.0475) (xy 149.929807 143.027815) (xy 149.909165 143.011181) (xy 149.520219 142.622235) + (xy 149.505515 142.595307) (xy 149.488923 142.569489) (xy 149.488031 142.563288) (xy 149.486734 142.560912) + (xy 149.4839 142.534554) (xy 149.4839 142.432999) (xy 149.503585 142.36596) (xy 149.556389 142.320205) + (xy 149.6079 142.308999) (xy 149.762829 142.308999) (xy 149.829868 142.328684) (xy 149.862032 142.358603) + (xy 149.936838 142.458352) (xy 149.936839 142.458353) (xy 149.93684 142.458354) (xy 150.071032 142.582195) + (xy 150.225425 142.679697) (xy 150.339444 142.725403) (xy 150.394914 142.747639) (xy 150.394915 142.747639) + (xy 150.394917 142.74764) (xy 150.573908 142.783779) (xy 150.573902 142.783779) (xy 150.590222 142.784059) + (xy 150.756484 142.78692) (xy 150.936612 142.756958) (xy 151.023908 142.725403) (xy 151.108336 142.694885) + (xy 151.108337 142.694883) (xy 151.10834 142.694883) (xy 151.123375 142.68612) (xy 151.130059 142.682235) + (xy 151.13035 142.682157) (xy 151.158233 142.66586) (xy 151.158351 142.665792) (xy 151.161568 142.665001) + (xy 151.220662 142.648999) (xy 152.701792 142.648999) (xy 152.701914 142.649006) (xy 152.710005 142.649005) + (xy 152.710008 142.649006) (xy 152.742142 142.649002) (xy 152.804704 142.665934) (xy 152.83253 142.682191) + (xy 152.832532 142.682191) (xy 152.83868 142.685783) (xy 152.840335 142.686608) (xy 152.854478 142.69485) + (xy 153.0262 142.756921) (xy 153.206321 142.786882) (xy 153.385998 142.78379) (xy 153.388891 142.783741) + (xy 153.567866 142.747605) (xy 153.567869 142.747603) (xy 153.567874 142.747603) (xy 153.73736 142.679662) + (xy 153.891746 142.582163) (xy 153.89415 142.579945) (xy 154.02593 142.45833) (xy 154.025932 142.458328) + (xy 154.034009 142.447558) (xy 154.101096 142.358102) (xy 154.157065 142.31628) (xy 154.200298 142.308499) + (xy 154.4564 142.308499) (xy 154.9564 142.308499) (xy 155.012332 142.308499) (xy 155.096324 142.29795) + (xy 155.229157 142.242929) (xy 155.296004 142.191) (xy 155.296011 142.190994) (xy 155.763894 141.723112) + (xy 155.763899 141.723106) (xy 155.815827 141.65626) (xy 155.819042 141.6485) (xy 154.9564 141.6485) + (xy 154.9564 142.308499) (xy 154.4564 142.308499) (xy 154.4564 141.5225) (xy 154.476085 141.455461) + (xy 154.528889 141.409706) (xy 154.5804 141.3985) (xy 154.7064 141.3985) (xy 154.7064 141.2725) + (xy 154.726085 141.205461) (xy 154.778889 141.159706) (xy 154.8304 141.1485) (xy 155.8814 141.1485) + (xy 155.8814 141.032353) (xy 155.86642 140.918569) (xy 155.866418 140.918564) (xy 155.807778 140.776993) + (xy 155.807775 140.776988) (xy 155.76742 140.724396) (xy 155.742226 140.659227) (xy 155.756264 140.590782) + (xy 155.767421 140.573423) (xy 155.770597 140.569285) (xy 155.808212 140.520263) (xy 155.866907 140.378563) + (xy 155.8819 140.264677) (xy 155.881899 139.532324) (xy 155.877137 139.496153) (xy 155.866908 139.418445) + (xy 155.866907 139.418437) (xy 155.808212 139.276737) (xy 155.714844 139.155056) (xy 155.597103 139.064711) + (xy 155.593162 139.061687) (xy 155.451463 139.002993) (xy 155.451461 139.002992) (xy 155.337578 138.988) + (xy 155.337577 138.988) (xy 155.0579 138.988) (xy 154.990861 138.968315) (xy 154.945106 138.915511) + (xy 154.9339 138.864) (xy 154.9339 138.684898) (xy 154.933899 138.684895) (xy 154.930507 138.676707) + (xy 154.920052 138.651465) (xy 154.918616 138.647999) (xy 154.901266 138.606111) (xy 154.899266 138.601282) + (xy 154.280118 137.982135) (xy 154.196503 137.9475) (xy 153.014512 137.9475) (xy 152.947473 137.927815) + (xy 152.901718 137.875011) (xy 152.891774 137.805853) (xy 152.920799 137.742297) (xy 152.96706 137.708939) + (xy 152.980131 137.703524) (xy 152.980141 137.70352) (xy 153.229259 137.559691) (xy 153.457473 137.384577) + (xy 153.660877 137.181173) (xy 153.835991 136.952959) (xy 153.97982 136.703841) (xy 154.089902 136.43808) + (xy 154.164353 136.160225) (xy 154.2019 135.875029) (xy 154.2019 135.64655) (xy 156.012 135.64655) + (xy 156.012 135.815849) (xy 156.038481 135.983047) (xy 156.090796 136.144053) (xy 156.167652 136.294888) + (xy 156.267148 136.431834) (xy 156.267152 136.431839) (xy 156.38686 136.551547) (xy 156.386865 136.551551) + (xy 156.506317 136.638337) (xy 156.523815 136.65105) (xy 156.619925 136.70002) (xy 156.674646 136.727903) + (xy 156.674648 136.727903) (xy 156.674651 136.727905) (xy 156.76095 136.755945) (xy 156.835652 136.780218) + (xy 157.002851 136.8067) (xy 157.002856 136.8067) (xy 157.172149 136.8067) (xy 157.339347 136.780218) + (xy 157.500349 136.727905) (xy 157.651185 136.65105) (xy 157.788141 136.551546) (xy 157.907846 136.431841) + (xy 158.00735 136.294885) (xy 158.084205 136.144049) (xy 158.136518 135.983047) (xy 158.153625 135.875038) + (xy 158.163 135.815849) (xy 158.163 135.64655) (xy 158.136518 135.479352) (xy 158.091796 135.341713) + (xy 158.084205 135.318351) (xy 158.084203 135.318348) (xy 158.084203 135.318346) (xy 158.040176 135.23194) + (xy 158.00735 135.167515) (xy 157.975781 135.124064) (xy 157.907851 135.030565) (xy 157.907847 135.03056) + (xy 157.788139 134.910852) (xy 157.788134 134.910848) (xy 157.651188 134.811352) (xy 157.651187 134.811351) + (xy 157.651185 134.81135) (xy 157.586447 134.778364) (xy 157.500353 134.734496) (xy 157.339347 134.682181) + (xy 157.172149 134.6557) (xy 157.172144 134.6557) (xy 157.002856 134.6557) (xy 157.002851 134.6557) + (xy 156.835652 134.682181) (xy 156.674646 134.734496) (xy 156.523811 134.811352) (xy 156.386865 134.910848) + (xy 156.38686 134.910852) (xy 156.267152 135.03056) (xy 156.267148 135.030565) (xy 156.167652 135.167511) + (xy 156.090796 135.318346) (xy 156.038481 135.479352) (xy 156.012 135.64655) (xy 154.2019 135.64655) + (xy 154.2019 135.587371) (xy 154.164353 135.302175) (xy 154.089902 135.02432) (xy 153.990668 134.784748) + (xy 153.979824 134.758568) (xy 153.979816 134.758551) (xy 153.835995 134.509448) (xy 153.835994 134.509447) + (xy 153.835991 134.509441) (xy 153.732069 134.374007) (xy 153.660878 134.281228) (xy 153.660872 134.281221) + (xy 153.457478 134.077827) (xy 153.457471 134.077821) (xy 153.229267 133.902715) (xy 153.229265 133.902713) + (xy 153.229259 133.902709) (xy 153.229254 133.902706) (xy 153.229251 133.902704) (xy 152.980148 133.758883) + (xy 152.980131 133.758875) (xy 152.714378 133.648797) (xy 152.436523 133.574346) (xy 152.151338 133.536801) + (xy 152.151335 133.5368) (xy 152.151329 133.5368) (xy 151.863671 133.5368) (xy 151.863665 133.5368) + (xy 151.863661 133.536801) (xy 151.578476 133.574346) (xy 151.300621 133.648797) (xy 151.034868 133.758875) + (xy 151.034851 133.758883) (xy 150.785748 133.902704) (xy 150.785732 133.902715) (xy 150.557528 134.077821) + (xy 150.557521 134.077827) (xy 150.354127 134.281221) (xy 150.28293 134.374007) (xy 150.226501 134.415209) + (xy 150.156755 134.419364) (xy 150.095835 134.385151) (xy 150.063083 134.323434) (xy 150.068896 134.253807) + (xy 150.077161 134.236531) (xy 150.130363 134.144383) (xy 150.238242 133.883939) (xy 150.311204 133.611642) + (xy 150.348 133.332151) (xy 150.348 133.050249) (xy 150.311204 132.770758) (xy 150.238242 132.498461) + (xy 150.130363 132.238017) (xy 150.130361 132.238014) (xy 150.130359 132.238009) (xy 149.989416 131.99389) + (xy 149.989412 131.993883) (xy 149.8178 131.770235) (xy 149.817798 131.770233) (xy 149.817795 131.770229) + (xy 149.61847 131.570904) (xy 149.534389 131.506386) (xy 149.394817 131.399288) (xy 149.394811 131.399284) + (xy 149.394809 131.399283) (xy 149.15069 131.25834) (xy 149.150679 131.258335) (xy 148.890243 131.150459) + (xy 148.617939 131.077495) (xy 148.338458 131.0407) (xy 148.338451 131.0407) (xy 148.056549 131.0407) + (xy 148.056541 131.0407) (xy 147.77706 131.077495) (xy 147.504756 131.150459) (xy 147.24432 131.258335) + (xy 147.244309 131.25834) (xy 147.000192 131.399281) (xy 147.000183 131.399288) (xy 146.979606 131.415076) + (xy 146.914438 131.44027) (xy 146.904122 131.4407) (xy 146.511706 131.4407) (xy 146.464253 131.431261) + (xy 146.417753 131.412) (xy 145.372253 131.412) (xy 145.281747 131.412) (xy 145.281745 131.412) + (xy 145.281743 131.412001) (xy 145.235245 131.431261) (xy 145.187793 131.4407) (xy 143.572498 131.4407) + (xy 143.572481 131.440701) (xy 143.469703 131.4512) (xy 143.4697 131.451201) (xy 143.303168 131.506385) + (xy 143.303163 131.506387) (xy 143.153842 131.598489) (xy 143.029789 131.722542) (xy 142.937687 131.871863) + (xy 142.937685 131.871868) (xy 142.909849 131.95587) (xy 142.882501 132.038403) (xy 142.882501 132.038404) + (xy 142.8825 132.038404) (xy 142.872 132.141183) (xy 142.872 134.241201) (xy 142.872001 134.241218) + (xy 142.8825 134.343996) (xy 142.882501 134.343999) (xy 142.892445 134.374007) (xy 142.937686 134.510534) + (xy 143.029788 134.659856) (xy 143.153844 134.783912) (xy 143.303166 134.876014) (xy 143.469703 134.931199) + (xy 143.572491 134.9417) (xy 145.499618 134.941699) (xy 145.499627 134.9417) (xy 145.928351 134.941699) + (xy 145.995389 134.961383) (xy 146.041144 135.014187) (xy 146.051088 135.083346) (xy 146.028669 135.138583) + (xy 146.007651 135.167511) (xy 145.930796 135.318346) (xy 145.878481 135.479352) (xy 145.852 135.64655) + (xy 145.852 135.815849) (xy 145.878481 135.983047) (xy 145.930796 136.144053) (xy 146.007652 136.294888) + (xy 146.107148 136.431834) (xy 146.107152 136.431839) (xy 146.22686 136.551547) (xy 146.226865 136.551551) + (xy 146.346317 136.638337) (xy 146.363815 136.65105) (xy 146.459925 136.70002) (xy 146.514646 136.727903) + (xy 146.514648 136.727903) (xy 146.514651 136.727905) (xy 146.60095 136.755945) (xy 146.675652 136.780218) + (xy 146.842851 136.8067) (xy 146.842856 136.8067) (xy 147.012149 136.8067) (xy 147.179347 136.780218) + (xy 147.340349 136.727905) (xy 147.491185 136.65105) (xy 147.628141 136.551546) (xy 147.747846 136.431841) + (xy 147.84735 136.294885) (xy 147.924205 136.144049) (xy 147.976518 135.983047) (xy 147.993625 135.875038) + (xy 148.003 135.815849) (xy 148.003 135.64655) (xy 147.977428 135.485098) (xy 147.986382 135.415805) + (xy 148.031379 135.362353) (xy 148.09813 135.341713) (xy 148.099901 135.3417) (xy 148.338444 135.3417) + (xy 148.338451 135.3417) (xy 148.617942 135.304904) (xy 148.890239 135.231942) (xy 149.150683 135.124063) + (xy 149.394817 134.983112) (xy 149.618465 134.8115) (xy 149.8178 134.612165) (xy 149.885492 134.523946) + (xy 149.94192 134.482744) (xy 150.011666 134.478589) (xy 150.072586 134.512801) (xy 150.105339 134.574518) + (xy 150.099526 134.644146) (xy 150.091255 134.661433) (xy 150.035183 134.758551) (xy 150.035175 134.758568) + (xy 149.925097 135.024321) (xy 149.850646 135.302176) (xy 149.813101 135.587361) (xy 149.8131 135.587377) + (xy 149.8131 135.875022) (xy 149.813101 135.875038) (xy 149.850646 136.160223) (xy 149.925097 136.438078) + (xy 150.035175 136.703831) (xy 150.035183 136.703848) (xy 150.179004 136.952951) (xy 150.179015 136.952967) + (xy 150.354121 137.181171) (xy 150.354127 137.181178) (xy 150.557521 137.384572) (xy 150.557528 137.384578) + (xy 150.720023 137.509264) (xy 150.785741 137.559691) (xy 150.785748 137.559695) (xy 151.034851 137.703516) + (xy 151.034856 137.703518) (xy 151.034859 137.70352) (xy 151.034863 137.703521) (xy 151.034868 137.703524) + (xy 151.04794 137.708939) (xy 151.102344 137.75278) (xy 151.124409 137.819074) (xy 151.10713 137.886773) + (xy 151.055993 137.934384) (xy 151.000488 137.9475) (xy 133.964512 137.9475) (xy 133.897473 137.927815) + (xy 133.851718 137.875011) (xy 133.841774 137.805853) (xy 133.870799 137.742297) (xy 133.91706 137.708939) + (xy 133.930131 137.703524) (xy 133.930141 137.70352) (xy 134.179259 137.559691) (xy 134.407473 137.384577) + (xy 134.610877 137.181173) (xy 134.785991 136.952959) (xy 134.92982 136.703841) (xy 135.039902 136.43808) + (xy 135.114353 136.160225) (xy 135.1519 135.875029) (xy 135.1519 135.64655) (xy 136.962 135.64655) + (xy 136.962 135.815849) (xy 136.988481 135.983047) (xy 137.040796 136.144053) (xy 137.117652 136.294888) + (xy 137.217148 136.431834) (xy 137.217152 136.431839) (xy 137.33686 136.551547) (xy 137.336865 136.551551) + (xy 137.456317 136.638337) (xy 137.473815 136.65105) (xy 137.569925 136.70002) (xy 137.624646 136.727903) + (xy 137.624648 136.727903) (xy 137.624651 136.727905) (xy 137.71095 136.755945) (xy 137.785652 136.780218) + (xy 137.952851 136.8067) (xy 137.952856 136.8067) (xy 138.122149 136.8067) (xy 138.289347 136.780218) + (xy 138.450349 136.727905) (xy 138.601185 136.65105) (xy 138.738141 136.551546) (xy 138.857846 136.431841) + (xy 138.95735 136.294885) (xy 139.034205 136.144049) (xy 139.086518 135.983047) (xy 139.103625 135.875038) + (xy 139.113 135.815849) (xy 139.113 135.64655) (xy 139.086518 135.479352) (xy 139.041796 135.341713) + (xy 139.034205 135.318351) (xy 139.034203 135.318348) (xy 139.034203 135.318346) (xy 138.990176 135.23194) + (xy 138.95735 135.167515) (xy 138.925781 135.124064) (xy 138.857851 135.030565) (xy 138.857847 135.03056) + (xy 138.738139 134.910852) (xy 138.738134 134.910848) (xy 138.601188 134.811352) (xy 138.601187 134.811351) + (xy 138.601185 134.81135) (xy 138.536447 134.778364) (xy 138.450353 134.734496) (xy 138.289347 134.682181) + (xy 138.122149 134.6557) (xy 138.122144 134.6557) (xy 137.952856 134.6557) (xy 137.952851 134.6557) + (xy 137.785652 134.682181) (xy 137.624646 134.734496) (xy 137.473811 134.811352) (xy 137.336865 134.910848) + (xy 137.33686 134.910852) (xy 137.217152 135.03056) (xy 137.217148 135.030565) (xy 137.117652 135.167511) + (xy 137.040796 135.318346) (xy 136.988481 135.479352) (xy 136.962 135.64655) (xy 135.1519 135.64655) + (xy 135.1519 135.587371) (xy 135.114353 135.302175) (xy 135.039902 135.02432) (xy 134.940668 134.784748) + (xy 134.929824 134.758568) (xy 134.929816 134.758551) (xy 134.785995 134.509448) (xy 134.785994 134.509447) + (xy 134.785991 134.509441) (xy 134.682069 134.374007) (xy 134.610878 134.281228) (xy 134.610872 134.281221) + (xy 134.407478 134.077827) (xy 134.407471 134.077821) (xy 134.179267 133.902715) (xy 134.179265 133.902713) + (xy 134.179259 133.902709) (xy 134.179254 133.902706) (xy 134.179251 133.902704) (xy 133.930148 133.758883) + (xy 133.930131 133.758875) (xy 133.664378 133.648797) (xy 133.386523 133.574346) (xy 133.101338 133.536801) + (xy 133.101335 133.5368) (xy 133.101329 133.5368) (xy 132.813671 133.5368) (xy 132.813665 133.5368) + (xy 132.813661 133.536801) (xy 132.528476 133.574346) (xy 132.250621 133.648797) (xy 131.984868 133.758875) + (xy 131.984851 133.758883) (xy 131.735748 133.902704) (xy 131.735732 133.902715) (xy 131.507528 134.077821) + (xy 131.507521 134.077827) (xy 131.304127 134.281221) (xy 131.23293 134.374007) (xy 131.176501 134.415209) + (xy 131.106755 134.419364) (xy 131.045835 134.385151) (xy 131.013083 134.323434) (xy 131.018896 134.253807) + (xy 131.027161 134.236531) (xy 131.080363 134.144383) (xy 131.188242 133.883939) (xy 131.261204 133.611642) + (xy 131.298 133.332151) (xy 131.298 133.050249) (xy 131.261204 132.770758) (xy 131.188242 132.498461) + (xy 131.080363 132.238017) (xy 131.080361 132.238014) (xy 131.080359 132.238009) (xy 130.939416 131.99389) + (xy 130.939412 131.993883) (xy 130.7678 131.770235) (xy 130.767798 131.770233) (xy 130.767795 131.770229) + (xy 130.56847 131.570904) (xy 130.484389 131.506386) (xy 130.344817 131.399288) (xy 130.344811 131.399284) + (xy 130.344809 131.399283) (xy 130.10069 131.25834) (xy 130.100679 131.258335) (xy 129.840243 131.150459) + (xy 129.567939 131.077495) (xy 129.288458 131.0407) (xy 129.288451 131.0407) (xy 129.006549 131.0407) + (xy 129.006541 131.0407) (xy 128.72706 131.077495) (xy 128.454756 131.150459) (xy 128.19432 131.258335) + (xy 128.194309 131.25834) (xy 127.950192 131.399281) (xy 127.950183 131.399288) (xy 127.929606 131.415076) + (xy 127.864438 131.44027) (xy 127.854122 131.4407) (xy 127.461706 131.4407) (xy 127.414253 131.431261) + (xy 127.367753 131.412) (xy 126.322253 131.412) (xy 126.231747 131.412) (xy 126.231745 131.412) + (xy 126.231743 131.412001) (xy 126.185245 131.431261) (xy 126.137793 131.4407) (xy 124.522498 131.4407) + (xy 124.522481 131.440701) (xy 124.419703 131.4512) (xy 124.4197 131.451201) (xy 124.253168 131.506385) + (xy 124.253163 131.506387) (xy 124.103842 131.598489) (xy 123.979789 131.722542) (xy 123.887687 131.871863) + (xy 123.887685 131.871868) (xy 123.859849 131.95587) (xy 123.832501 132.038403) (xy 123.832501 132.038404) + (xy 123.8325 132.038404) (xy 123.822 132.141183) (xy 123.822 134.241201) (xy 123.822001 134.241218) + (xy 123.8325 134.343996) (xy 123.832501 134.343999) (xy 123.842445 134.374007) (xy 123.887686 134.510534) + (xy 123.979788 134.659856) (xy 124.103844 134.783912) (xy 124.253166 134.876014) (xy 124.419703 134.931199) + (xy 124.522491 134.9417) (xy 126.449618 134.941699) (xy 126.449627 134.9417) (xy 126.878351 134.941699) + (xy 126.945389 134.961383) (xy 126.991144 135.014187) (xy 127.001088 135.083346) (xy 126.978669 135.138583) + (xy 126.957651 135.167511) (xy 126.880796 135.318346) (xy 126.828481 135.479352) (xy 126.802 135.64655) + (xy 126.802 135.815849) (xy 126.828481 135.983047) (xy 126.880796 136.144053) (xy 126.957652 136.294888) + (xy 127.057148 136.431834) (xy 127.057152 136.431839) (xy 127.17686 136.551547) (xy 127.176865 136.551551) + (xy 127.296317 136.638337) (xy 127.313815 136.65105) (xy 127.409925 136.70002) (xy 127.464646 136.727903) + (xy 127.464648 136.727903) (xy 127.464651 136.727905) (xy 127.55095 136.755945) (xy 127.625652 136.780218) + (xy 127.792851 136.8067) (xy 127.792856 136.8067) (xy 127.962149 136.8067) (xy 128.129347 136.780218) + (xy 128.290349 136.727905) (xy 128.441185 136.65105) (xy 128.578141 136.551546) (xy 128.697846 136.431841) + (xy 128.79735 136.294885) (xy 128.874205 136.144049) (xy 128.926518 135.983047) (xy 128.943625 135.875038) + (xy 128.953 135.815849) (xy 128.953 135.64655) (xy 128.927428 135.485098) (xy 128.936382 135.415805) + (xy 128.981379 135.362353) (xy 129.04813 135.341713) (xy 129.049901 135.3417) (xy 129.288444 135.3417) + (xy 129.288451 135.3417) (xy 129.567942 135.304904) (xy 129.840239 135.231942) (xy 130.100683 135.124063) + (xy 130.344817 134.983112) (xy 130.568465 134.8115) (xy 130.7678 134.612165) (xy 130.835492 134.523946) + (xy 130.89192 134.482744) (xy 130.961666 134.478589) (xy 131.022586 134.512801) (xy 131.055339 134.574518) + (xy 131.049526 134.644146) (xy 131.041255 134.661433) (xy 130.985183 134.758551) (xy 130.985175 134.758568) + (xy 130.875097 135.024321) (xy 130.800646 135.302176) (xy 130.763101 135.587361) (xy 130.7631 135.587377) + (xy 130.7631 135.875022) (xy 130.763101 135.875038) (xy 130.800646 136.160223) (xy 130.875097 136.438078) + (xy 130.985175 136.703831) (xy 130.985183 136.703848) (xy 131.129004 136.952951) (xy 131.129015 136.952967) + (xy 131.304121 137.181171) (xy 131.304127 137.181178) (xy 131.507521 137.384572) (xy 131.507528 137.384578) + (xy 131.670023 137.509264) (xy 131.735741 137.559691) (xy 131.735748 137.559695) (xy 131.984851 137.703516) + (xy 131.984856 137.703518) (xy 131.984859 137.70352) (xy 131.984863 137.703521) (xy 131.984868 137.703524) + (xy 131.99794 137.708939) (xy 132.052344 137.75278) (xy 132.074409 137.819074) (xy 132.05713 137.886773) + (xy 132.005993 137.934384) (xy 131.950488 137.9475) (xy 128.055996 137.9475) (xy 127.972379 137.982136) + (xy 127.723879 138.230638) (xy 127.672382 138.282135) (xy 127.608385 138.346132) (xy 127.594751 138.379048) + (xy 127.58284 138.407803) (xy 127.57375 138.429747) (xy 127.57375 139.979747) (xy 127.57375 140.070253) + (xy 127.608385 140.153868) (xy 127.608386 140.153869) (xy 128.693789 141.239273) (xy 128.720668 141.2795) + (xy 128.724133 141.287866) (xy 128.724136 141.28787) (xy 128.788129 141.351863) (xy 128.78813 141.351863) + (xy 128.788132 141.351865) (xy 128.871747 141.3865) (xy 128.913001 141.3865) (xy 128.98004 141.406185) + (xy 129.025795 141.458989) (xy 129.03594 141.494317) (xy 129.045791 141.569154) (xy 129.045792 141.56916) + (xy 129.045793 141.569163) (xy 129.070105 141.627857) (xy 129.104487 141.710862) (xy 129.104488 141.710863) + (xy 129.197856 141.832544) (xy 129.319537 141.925912) (xy 129.461237 141.984607) (xy 129.575123 141.9996) + (xy 130.712729 141.999599) (xy 130.779768 142.019284) (xy 130.811932 142.049203) (xy 130.886738 142.148952) + (xy 130.886739 142.148953) (xy 130.88674 142.148954) (xy 131.020932 142.272795) (xy 131.175325 142.370297) + (xy 131.310477 142.424474) (xy 131.344814 142.438239) (xy 131.344815 142.438239) (xy 131.344817 142.43824) + (xy 131.523808 142.474379) (xy 131.523802 142.474379) (xy 131.540122 142.474659) (xy 131.706384 142.47752) + (xy 131.886512 142.447558) (xy 131.942007 142.427498) (xy 132.058236 142.385485) (xy 132.058237 142.385483) + (xy 132.05824 142.385483) (xy 132.073275 142.37672) (xy 132.079959 142.372835) (xy 132.08025 142.372757) + (xy 132.108133 142.35646) (xy 132.108251 142.356392) (xy 132.111468 142.355601) (xy 132.170562 142.339599) + (xy 133.651692 142.339599) (xy 133.651814 142.339606) (xy 133.659905 142.339605) (xy 133.659908 142.339606) + (xy 133.692042 142.339602) (xy 133.754604 142.356534) (xy 133.78243 142.372791) (xy 133.782432 142.372791) + (xy 133.78858 142.376383) (xy 133.790235 142.377208) (xy 133.804378 142.38545) (xy 133.9761 142.447521) + (xy 134.156221 142.477482) (xy 134.335898 142.47439) (xy 134.338791 142.474341) (xy 134.517766 142.438205) + (xy 134.517769 142.438203) (xy 134.517774 142.438203) (xy 134.68726 142.370262) (xy 134.841646 142.272763) + (xy 134.853147 142.26215) (xy 134.97583 142.14893) (xy 134.975832 142.148928) (xy 134.98107 142.141944) + (xy 135.050996 142.048702) (xy 135.106965 142.00688) (xy 135.150198 141.999099) (xy 135.4063 141.999099) + (xy 135.9063 141.999099) (xy 135.962232 141.999099) (xy 136.046224 141.98855) (xy 136.179057 141.933529) + (xy 136.245904 141.8816) (xy 136.245911 141.881594) (xy 136.713794 141.413712) (xy 136.713799 141.413706) + (xy 136.765727 141.34686) (xy 136.768942 141.3391) (xy 135.9063 141.3391) (xy 135.9063 141.999099) + (xy 135.4063 141.999099) (xy 135.4063 141.2131) (xy 135.425985 141.146061) (xy 135.478789 141.100306) + (xy 135.5303 141.0891) (xy 135.6563 141.0891) (xy 135.6563 140.9631) (xy 135.675985 140.896061) + (xy 135.728789 140.850306) (xy 135.7803 140.8391) (xy 136.8313 140.8391) (xy 136.8313 140.722953) + (xy 136.81632 140.609169) (xy 136.816318 140.609164) (xy 136.757678 140.467593) (xy 136.757675 140.467588) + (xy 136.71732 140.414996) (xy 136.692126 140.349827) (xy 136.706164 140.281382) (xy 136.717321 140.264023) + (xy 136.758112 140.210863) (xy 136.78172 140.153868) (xy 136.816807 140.069163) (xy 136.8318 139.955277) + (xy 136.8318 139.9406) (xy 136.83435 139.931914) (xy 136.833062 139.922953) (xy 136.84404 139.898912) + (xy 136.851485 139.873561) (xy 136.858325 139.867633) (xy 136.862087 139.859397) (xy 136.884321 139.845107) + (xy 136.904289 139.827806) (xy 136.914803 139.825518) (xy 136.920865 139.821623) (xy 136.9558 139.8166) + (xy 137.169755 139.8166) (xy 137.236794 139.836285) (xy 137.257436 139.852919) (xy 137.637431 140.232914) + (xy 137.670916 140.294237) (xy 137.67375 140.320595) (xy 137.67375 141.829405) (xy 137.654065 141.896444) + (xy 137.637431 141.917086) (xy 136.599018 142.955499) (xy 136.537695 142.988984) (xy 136.511337 142.991818) + (xy 112.283194 142.991818) (xy 112.216155 142.972133) (xy 112.195513 142.955499) (xy 112.070285 142.830271) + (xy 112.0368 142.768948) (xy 112.041784 142.699256) (xy 112.083656 142.643323) (xy 112.14912 142.618906) + (xy 112.182506 142.621042) (xy 112.203285 142.625238) (xy 112.222307 142.629079) (xy 112.225245 142.629129) + (xy 112.404884 142.63222) (xy 112.585012 142.602258) (xy 112.640507 142.582198) (xy 112.756736 142.540185) + (xy 112.756737 142.540183) (xy 112.75674 142.540183) (xy 112.771775 142.53142) (xy 112.778459 142.527535) + (xy 112.77875 142.527457) (xy 112.806633 142.51116) (xy 112.806751 142.511092) (xy 112.809968 142.510301) + (xy 112.869062 142.494299) (xy 114.350192 142.494299) (xy 114.350314 142.494306) (xy 114.358405 142.494305) + (xy 114.358408 142.494306) (xy 114.390542 142.494302) (xy 114.453104 142.511234) (xy 114.48093 142.527491) + (xy 114.480932 142.527491) (xy 114.48708 142.531083) (xy 114.488735 142.531908) (xy 114.502878 142.54015) + (xy 114.6746 142.602221) (xy 114.854721 142.632182) (xy 115.034398 142.62909) (xy 115.037291 142.629041) + (xy 115.216266 142.592905) (xy 115.216269 142.592903) (xy 115.216274 142.592903) (xy 115.38576 142.524962) + (xy 115.540146 142.427463) (xy 115.563586 142.405832) (xy 115.67433 142.30363) (xy 115.674332 142.303628) + (xy 115.681548 142.294006) (xy 115.749496 142.203402) (xy 115.805465 142.16158) (xy 115.848698 142.153799) + (xy 116.1048 142.153799) (xy 116.6048 142.153799) (xy 116.660732 142.153799) (xy 116.744724 142.14325) + (xy 116.877557 142.088229) (xy 116.944404 142.0363) (xy 116.944411 142.036294) (xy 117.412294 141.568412) + (xy 117.412299 141.568406) (xy 117.464227 141.50156) (xy 117.467442 141.4938) (xy 116.6048 141.4938) + (xy 116.6048 142.153799) (xy 116.1048 142.153799) (xy 116.1048 141.3678) (xy 116.124485 141.300761) + (xy 116.177289 141.255006) (xy 116.2288 141.2438) (xy 116.3548 141.2438) (xy 116.3548 141.1178) + (xy 116.374485 141.050761) (xy 116.427289 141.005006) (xy 116.4788 140.9938) (xy 117.5298 140.9938) + (xy 117.5298 140.877653) (xy 117.51482 140.763869) (xy 117.514818 140.763864) (xy 117.456178 140.622293) + (xy 117.456175 140.622288) (xy 117.41582 140.569696) (xy 117.390626 140.504527) (xy 117.404664 140.436082) + (xy 117.415821 140.418723) (xy 117.418997 140.414585) (xy 117.456612 140.365563) (xy 117.515307 140.223863) + (xy 117.5303 140.109977) (xy 117.530299 139.377624) (xy 117.526333 139.3475) (xy 117.516103 139.269782) + (xy 117.515307 139.263737) (xy 117.456612 139.122037) (xy 117.363244 139.000356) (xy 117.241563 138.906988) + (xy 117.241562 138.906987) (xy 117.099863 138.848293) (xy 117.099861 138.848292) (xy 116.985978 138.8333) + (xy 116.985977 138.8333) (xy 116.665155 138.8333) (xy 116.598116 138.813615) (xy 116.570341 138.789214) + (xy 116.55795 138.774513) (xy 116.547665 138.749682) (xy 116.483668 138.685685) (xy 116.165703 138.36772) + (xy 115.83012 138.032136) (xy 115.830115 138.032134) (xy 115.746503 137.9975) (xy 114.7938 137.9975) + (xy 114.726761 137.977815) (xy 114.681006 137.925011) (xy 114.671062 137.855853) (xy 114.700087 137.792297) + (xy 114.746348 137.758939) (xy 114.880132 137.703524) (xy 114.880135 137.703522) (xy 114.880141 137.70352) + (xy 115.129259 137.559691) (xy 115.357473 137.384577) (xy 115.560877 137.181173) (xy 115.735991 136.952959) + (xy 115.87982 136.703841) (xy 115.989902 136.43808) (xy 116.064353 136.160225) (xy 116.1019 135.875029) + (xy 116.1019 135.64655) (xy 117.912 135.64655) (xy 117.912 135.815849) (xy 117.938481 135.983047) + (xy 117.990796 136.144053) (xy 118.067652 136.294888) (xy 118.167148 136.431834) (xy 118.167152 136.431839) + (xy 118.28686 136.551547) (xy 118.286865 136.551551) (xy 118.406317 136.638337) (xy 118.423815 136.65105) + (xy 118.519925 136.70002) (xy 118.574646 136.727903) (xy 118.574648 136.727903) (xy 118.574651 136.727905) + (xy 118.66095 136.755945) (xy 118.735652 136.780218) (xy 118.902851 136.8067) (xy 118.902856 136.8067) + (xy 119.072149 136.8067) (xy 119.239347 136.780218) (xy 119.400349 136.727905) (xy 119.551185 136.65105) + (xy 119.688141 136.551546) (xy 119.807846 136.431841) (xy 119.90735 136.294885) (xy 119.984205 136.144049) + (xy 120.036518 135.983047) (xy 120.053625 135.875038) (xy 120.063 135.815849) (xy 120.063 135.64655) + (xy 120.036518 135.479352) (xy 119.991796 135.341713) (xy 119.984205 135.318351) (xy 119.984203 135.318348) + (xy 119.984203 135.318346) (xy 119.940176 135.23194) (xy 119.90735 135.167515) (xy 119.875781 135.124064) + (xy 119.807851 135.030565) (xy 119.807847 135.03056) (xy 119.688139 134.910852) (xy 119.688134 134.910848) + (xy 119.551188 134.811352) (xy 119.551187 134.811351) (xy 119.551185 134.81135) (xy 119.486447 134.778364) + (xy 119.400353 134.734496) (xy 119.239347 134.682181) (xy 119.072149 134.6557) (xy 119.072144 134.6557) + (xy 118.902856 134.6557) (xy 118.902851 134.6557) (xy 118.735652 134.682181) (xy 118.574646 134.734496) + (xy 118.423811 134.811352) (xy 118.286865 134.910848) (xy 118.28686 134.910852) (xy 118.167152 135.03056) + (xy 118.167148 135.030565) (xy 118.067652 135.167511) (xy 117.990796 135.318346) (xy 117.938481 135.479352) + (xy 117.912 135.64655) (xy 116.1019 135.64655) (xy 116.1019 135.587371) (xy 116.064353 135.302175) + (xy 115.989902 135.02432) (xy 115.890668 134.784748) (xy 115.879824 134.758568) (xy 115.879816 134.758551) + (xy 115.735995 134.509448) (xy 115.735994 134.509447) (xy 115.735991 134.509441) (xy 115.632069 134.374007) + (xy 115.560878 134.281228) (xy 115.560872 134.281221) (xy 115.357478 134.077827) (xy 115.357471 134.077821) + (xy 115.129267 133.902715) (xy 115.129265 133.902713) (xy 115.129259 133.902709) (xy 115.129254 133.902706) + (xy 115.129251 133.902704) (xy 114.880148 133.758883) (xy 114.880131 133.758875) (xy 114.614378 133.648797) + (xy 114.336523 133.574346) (xy 114.051338 133.536801) (xy 114.051335 133.5368) (xy 114.051329 133.5368) + (xy 113.763671 133.5368) (xy 113.763665 133.5368) (xy 113.763661 133.536801) (xy 113.478476 133.574346) + (xy 113.200621 133.648797) (xy 112.934868 133.758875) (xy 112.934851 133.758883) (xy 112.685748 133.902704) + (xy 112.685732 133.902715) (xy 112.457528 134.077821) (xy 112.457521 134.077827) (xy 112.254127 134.281221) + (xy 112.18293 134.374007) (xy 112.126501 134.415209) (xy 112.056755 134.419364) (xy 111.995835 134.385151) + (xy 111.963083 134.323434) (xy 111.968896 134.253807) (xy 111.977161 134.236531) (xy 112.030363 134.144383) + (xy 112.138242 133.883939) (xy 112.211204 133.611642) (xy 112.248 133.332151) (xy 112.248 133.050249) + (xy 112.211204 132.770758) (xy 112.138242 132.498461) (xy 112.030363 132.238017) (xy 112.030361 132.238014) + (xy 112.030359 132.238009) (xy 111.889416 131.99389) (xy 111.889412 131.993883) (xy 111.7178 131.770235) + (xy 111.717798 131.770233) (xy 111.717795 131.770229) (xy 111.51847 131.570904) (xy 111.434389 131.506386) + (xy 111.294817 131.399288) (xy 111.294811 131.399284) (xy 111.294809 131.399283) (xy 111.05069 131.25834) + (xy 111.050679 131.258335) (xy 110.790243 131.150459) (xy 110.517939 131.077495) (xy 110.238458 131.0407) + (xy 110.238451 131.0407) (xy 109.956549 131.0407) (xy 109.956541 131.0407) (xy 109.67706 131.077495) + (xy 109.404756 131.150459) (xy 109.14432 131.258335) (xy 109.144309 131.25834) (xy 108.900192 131.399281) + (xy 108.900183 131.399288) (xy 108.879606 131.415076) (xy 108.814438 131.44027) (xy 108.804122 131.4407) + (xy 108.411706 131.4407) (xy 108.364253 131.431261) (xy 108.317753 131.412) (xy 107.272253 131.412) + (xy 107.181747 131.412) (xy 107.181745 131.412) (xy 107.181743 131.412001) (xy 107.135245 131.431261) + (xy 107.087793 131.4407) (xy 105.472498 131.4407) (xy 105.472481 131.440701) (xy 105.369703 131.4512) + (xy 105.3697 131.451201) (xy 105.203168 131.506385) (xy 105.203163 131.506387) (xy 105.053842 131.598489) + (xy 104.929789 131.722542) (xy 104.837687 131.871863) (xy 104.837685 131.871868) (xy 104.809849 131.95587) + (xy 104.782501 132.038403) (xy 104.782501 132.038404) (xy 104.7825 132.038404) (xy 104.772 132.141183) + (xy 104.772 134.241201) (xy 104.772001 134.241218) (xy 104.7825 134.343996) (xy 104.782501 134.343999) + (xy 104.792445 134.374007) (xy 104.837686 134.510534) (xy 104.929788 134.659856) (xy 105.053844 134.783912) + (xy 105.203166 134.876014) (xy 105.369703 134.931199) (xy 105.472491 134.9417) (xy 107.399618 134.941699) + (xy 107.399627 134.9417) (xy 107.828351 134.941699) (xy 107.895389 134.961383) (xy 107.941144 135.014187) + (xy 107.951088 135.083346) (xy 107.928669 135.138583) (xy 107.907651 135.167511) (xy 107.830796 135.318346) + (xy 107.778481 135.479352) (xy 107.752 135.64655) (xy 107.752 135.815849) (xy 107.778481 135.983047) + (xy 107.830796 136.144053) (xy 107.907652 136.294888) (xy 108.007148 136.431834) (xy 108.007152 136.431839) + (xy 108.12686 136.551547) (xy 108.126865 136.551551) (xy 108.246317 136.638337) (xy 108.263815 136.65105) + (xy 108.359925 136.70002) (xy 108.414646 136.727903) (xy 108.414648 136.727903) (xy 108.414651 136.727905) + (xy 108.50095 136.755945) (xy 108.575652 136.780218) (xy 108.742851 136.8067) (xy 108.742856 136.8067) + (xy 108.912149 136.8067) (xy 109.079347 136.780218) (xy 109.240349 136.727905) (xy 109.391185 136.65105) + (xy 109.528141 136.551546) (xy 109.647846 136.431841) (xy 109.74735 136.294885) (xy 109.824205 136.144049) + (xy 109.876518 135.983047) (xy 109.893625 135.875038) (xy 109.903 135.815849) (xy 109.903 135.64655) + (xy 109.877428 135.485098) (xy 109.886382 135.415805) (xy 109.931379 135.362353) (xy 109.99813 135.341713) + (xy 109.999901 135.3417) (xy 110.238444 135.3417) (xy 110.238451 135.3417) (xy 110.517942 135.304904) + (xy 110.790239 135.231942) (xy 111.050683 135.124063) (xy 111.294817 134.983112) (xy 111.518465 134.8115) + (xy 111.7178 134.612165) (xy 111.785492 134.523946) (xy 111.84192 134.482744) (xy 111.911666 134.478589) + (xy 111.972586 134.512801) (xy 112.005339 134.574518) (xy 111.999526 134.644146) (xy 111.991255 134.661433) + (xy 111.935183 134.758551) (xy 111.935175 134.758568) (xy 111.825097 135.024321) (xy 111.750646 135.302176) + (xy 111.713101 135.587361) (xy 111.7131 135.587377) (xy 111.7131 135.875022) (xy 111.713101 135.875038) + (xy 111.750646 136.160223) (xy 111.825097 136.438078) (xy 111.935175 136.703831) (xy 111.935183 136.703848) + (xy 112.079004 136.952951) (xy 112.079015 136.952967) (xy 112.254121 137.181171) (xy 112.254127 137.181178) + (xy 112.457521 137.384572) (xy 112.457528 137.384578) (xy 112.620023 137.509264) (xy 112.685741 137.559691) + (xy 112.685748 137.559695) (xy 112.934851 137.703516) (xy 112.934867 137.703524) (xy 113.068652 137.758939) + (xy 113.123056 137.80278) (xy 113.145121 137.869074) (xy 113.127842 137.936773) (xy 113.076705 137.984384) + (xy 113.0212 137.9975) (xy 110.297247 137.9975) (xy 110.272757 138.007644) (xy 110.250915 138.01669) + (xy 110.213632 138.032133) (xy 105.555727 142.69004) (xy 105.494404 142.723525) (xy 105.468046 142.726359) + (xy 93.248075 142.726359) (xy 93.181036 142.706674) (xy 93.160394 142.69004) (xy 93.111622 142.641268) + (xy 93.078137 142.579945) (xy 93.083121 142.510253) (xy 93.124993 142.45432) (xy 93.190457 142.429903) + (xy 93.239143 142.437507) (xy 93.239407 142.436624) (xy 93.244806 142.438235) (xy 93.244817 142.43824) + (xy 93.423808 142.474379) (xy 93.423802 142.474379) (xy 93.440122 142.474659) (xy 93.606384 142.47752) + (xy 93.786512 142.447558) (xy 93.842007 142.427498) (xy 93.958236 142.385485) (xy 93.958237 142.385483) + (xy 93.95824 142.385483) (xy 93.973275 142.37672) (xy 93.979959 142.372835) (xy 93.98025 142.372757) + (xy 94.008133 142.35646) (xy 94.008251 142.356392) (xy 94.011468 142.355601) (xy 94.070562 142.339599) + (xy 95.551692 142.339599) (xy 95.551814 142.339606) (xy 95.559905 142.339605) (xy 95.559908 142.339606) + (xy 95.592042 142.339602) (xy 95.654604 142.356534) (xy 95.68243 142.372791) (xy 95.682432 142.372791) + (xy 95.68858 142.376383) (xy 95.690235 142.377208) (xy 95.704378 142.38545) (xy 95.8761 142.447521) + (xy 96.056221 142.477482) (xy 96.235898 142.47439) (xy 96.238791 142.474341) (xy 96.417766 142.438205) + (xy 96.417769 142.438203) (xy 96.417774 142.438203) (xy 96.58726 142.370262) (xy 96.741646 142.272763) + (xy 96.753147 142.26215) (xy 96.87583 142.14893) (xy 96.875832 142.148928) (xy 96.88107 142.141944) + (xy 96.950996 142.048702) (xy 97.006965 142.00688) (xy 97.050198 141.999099) (xy 97.3063 141.999099) + (xy 97.8063 141.999099) (xy 97.862232 141.999099) (xy 97.946224 141.98855) (xy 98.079057 141.933529) + (xy 98.145904 141.8816) (xy 98.145911 141.881594) (xy 98.613794 141.413712) (xy 98.613799 141.413706) + (xy 98.665727 141.34686) (xy 98.668942 141.3391) (xy 97.8063 141.3391) (xy 97.8063 141.999099) (xy 97.3063 141.999099) + (xy 97.3063 141.2131) (xy 97.325985 141.146061) (xy 97.378789 141.100306) (xy 97.4303 141.0891) + (xy 97.5563 141.0891) (xy 97.5563 140.9631) (xy 97.575985 140.896061) (xy 97.628789 140.850306) + (xy 97.6803 140.8391) (xy 98.7313 140.8391) (xy 98.7313 140.722953) (xy 98.71632 140.609169) (xy 98.716318 140.609164) + (xy 98.657678 140.467593) (xy 98.657675 140.467588) (xy 98.61732 140.414996) (xy 98.609598 140.395022) + (xy 98.597592 140.377291) (xy 98.59725 140.363082) (xy 98.592126 140.349827) (xy 98.596428 140.32885) + (xy 98.595914 140.307442) (xy 98.604313 140.290406) (xy 98.606164 140.281382) (xy 98.609801 140.274994) + (xy 98.613261 140.269314) (xy 98.658112 140.210863) (xy 98.677736 140.163484) (xy 98.682726 140.155296) + (xy 98.701758 140.137986) (xy 98.717899 140.117957) (xy 98.727179 140.114867) (xy 98.734416 140.108287) + (xy 98.759781 140.104016) (xy 98.784192 140.095891) (xy 98.79367 140.09831) (xy 98.803316 140.096686) + (xy 98.826966 140.106807) (xy 98.851892 140.113169) (xy 98.864235 140.122757) (xy 98.86755 140.124176) + (xy 98.869201 140.126615) (xy 98.876302 140.132131) (xy 98.940957 140.196786) (xy 98.940961 140.196789) + (xy 99.072064 140.28439) (xy 99.072077 140.284397) (xy 99.179398 140.32885) (xy 99.217753 140.344737) + (xy 99.322447 140.365562) (xy 99.372403 140.375499) (xy 99.372406 140.3755) (xy 99.372408 140.3755) + (xy 99.530094 140.3755) (xy 99.530095 140.375499) (xy 99.684747 140.344737) (xy 99.830429 140.284394) + (xy 99.961539 140.196789) (xy 100.073039 140.085289) (xy 100.160644 139.954179) (xy 100.220987 139.808497) + (xy 100.25175 139.653842) (xy 100.25175 139.496158) (xy 100.25175 139.496155) (xy 100.251749 139.496153) + (xy 100.237518 139.424611) (xy 100.220987 139.341503) (xy 100.220183 139.339562) (xy 100.160647 139.195827) + (xy 100.16064 139.195814) (xy 100.073039 139.064711) (xy 100.073036 139.064707) (xy 99.961542 138.953213) + (xy 99.961538 138.95321) (xy 99.830435 138.865609) (xy 99.830422 138.865602) (xy 99.684751 138.805264) + (xy 99.684739 138.805261) (xy 99.530095 138.7745) (xy 99.530092 138.7745) (xy 99.372408 138.7745) + (xy 99.372405 138.7745) (xy 99.21776 138.805261) (xy 99.217748 138.805264) (xy 99.072077 138.865602) + (xy 99.072064 138.865609) (xy 98.940961 138.95321) (xy 98.868043 139.026128) (xy 98.806719 139.059612) + (xy 98.737028 139.054627) (xy 98.681094 139.012756) (xy 98.665801 138.985899) (xy 98.658112 138.967337) + (xy 98.641619 138.945843) (xy 98.564744 138.845656) (xy 98.443063 138.752288) (xy 98.443062 138.752287) + (xy 98.301363 138.693593) (xy 98.301361 138.693592) (xy 98.187478 138.6786) (xy 98.187477 138.6786) + (xy 97.049873 138.6786) (xy 96.982834 138.658915) (xy 96.950672 138.628998) (xy 96.875861 138.529244) + (xy 96.741669 138.405404) (xy 96.741666 138.405402) (xy 96.741665 138.405401) (xy 96.741662 138.405399) + (xy 96.587277 138.307901) (xy 96.417787 138.239958) (xy 96.417777 138.239956) (xy 96.238792 138.203818) + (xy 96.238799 138.203818) (xy 96.067094 138.200865) (xy 96.056218 138.200678) (xy 96.056217 138.200678) + (xy 96.056214 138.200678) (xy 95.876097 138.230638) (xy 95.876084 138.230641) (xy 95.704363 138.292713) + (xy 95.689848 138.30117) (xy 95.689763 138.301219) (xy 95.682676 138.30534) (xy 95.68243 138.305408) + (xy 95.654638 138.321644) (xy 95.65439 138.321789) (xy 95.651663 138.322459) (xy 95.592046 138.338596) + (xy 95.551701 138.338593) (xy 95.551597 138.3386) (xy 94.110896 138.3386) (xy 94.102714 138.338598) + (xy 94.102692 138.338593) (xy 94.072765 138.338595) (xy 94.070528 138.338595) (xy 94.070246 138.338512) + (xy 94.007993 138.321662) (xy 93.980171 138.305408) (xy 93.974105 138.301864) (xy 93.972407 138.301017) + (xy 93.965057 138.296734) (xy 93.958221 138.29275) (xy 93.786497 138.230678) (xy 93.786491 138.230677) + (xy 93.606381 138.200719) (xy 93.606378 138.200719) (xy 93.597839 138.200865) (xy 93.423807 138.203859) + (xy 93.244834 138.239994) (xy 93.244823 138.239997) (xy 93.075342 138.307937) (xy 93.075341 138.307937) + (xy 92.920961 138.405432) (xy 92.920958 138.405434) (xy 92.830604 138.488818) (xy 92.786769 138.529272) + (xy 92.715533 138.624261) (xy 92.711981 138.628997) (xy 92.656011 138.670819) (xy 92.612778 138.6786) + (xy 91.475121 138.6786) (xy 91.361245 138.693591) (xy 91.361237 138.693593) (xy 91.219537 138.752287) + (xy 91.097856 138.845656) (xy 91.004487 138.967337) (xy 90.945793 139.109036) (xy 90.945792 139.109038) + (xy 90.9308 139.222922) (xy 72.537999 139.222922) (xy 72.53443 139.195814) (xy 72.523008 139.109045) + (xy 72.523007 139.109037) (xy 72.464312 138.967337) (xy 72.370944 138.845656) (xy 72.249263 138.752288) + (xy 72.249262 138.752287) (xy 72.107563 138.693593) (xy 72.107561 138.693592) (xy 71.993678 138.6786) + (xy 71.993677 138.6786) (xy 71.714 138.6786) (xy 71.646961 138.658915) (xy 71.601206 138.606111) + (xy 71.59 138.5546) (xy 71.59 135.826757) (xy 71.609685 135.759718) (xy 71.662489 135.713963) (xy 71.666533 135.712202) + (xy 71.738616 135.682345) (xy 71.806573 135.654197) (xy 71.806576 135.654195) (xy 71.806579 135.654194) + (xy 71.818019 135.64655) (xy 72.6683 135.64655) (xy 72.6683 135.815849) (xy 72.694781 135.983047) + (xy 72.747096 136.144053) (xy 72.823952 136.294888) (xy 72.923448 136.431834) (xy 72.923452 136.431839) + (xy 73.04316 136.551547) (xy 73.043165 136.551551) (xy 73.162617 136.638337) (xy 73.180115 136.65105) + (xy 73.276225 136.70002) (xy 73.330946 136.727903) (xy 73.330948 136.727903) (xy 73.330951 136.727905) + (xy 73.41725 136.755945) (xy 73.491952 136.780218) (xy 73.659151 136.8067) (xy 73.659156 136.8067) + (xy 73.828449 136.8067) (xy 73.995647 136.780218) (xy 74.156649 136.727905) (xy 74.307485 136.65105) + (xy 74.444441 136.551546) (xy 74.564146 136.431841) (xy 74.66365 136.294885) (xy 74.740505 136.144049) + (xy 74.792818 135.983047) (xy 74.809925 135.875038) (xy 74.8193 135.815849) (xy 74.8193 135.64655) + (xy 74.792818 135.479352) (xy 74.748096 135.341713) (xy 74.740505 135.318351) (xy 74.740503 135.318348) + (xy 74.740503 135.318346) (xy 74.696476 135.23194) (xy 74.66365 135.167515) (xy 74.632081 135.124064) + (xy 74.564151 135.030565) (xy 74.564147 135.03056) (xy 74.444439 134.910852) (xy 74.444434 134.910848) + (xy 74.307488 134.811352) (xy 74.307487 134.811351) (xy 74.307485 134.81135) (xy 74.242747 134.778364) + (xy 74.156653 134.734496) (xy 73.995647 134.682181) (xy 73.828449 134.6557) (xy 73.828444 134.6557) + (xy 73.659156 134.6557) (xy 73.659151 134.6557) (xy 73.491952 134.682181) (xy 73.330946 134.734496) + (xy 73.180111 134.811352) (xy 73.043165 134.910848) (xy 73.04316 134.910852) (xy 72.923452 135.03056) + (xy 72.923448 135.030565) (xy 72.823952 135.167511) (xy 72.747096 135.318346) (xy 72.694781 135.479352) + (xy 72.6683 135.64655) (xy 71.818019 135.64655) (xy 71.937689 135.566589) (xy 71.937692 135.566586) + (xy 71.950276 135.554003) (xy 72.049186 135.455092) (xy 72.049189 135.455089) (xy 72.136794 135.323979) + (xy 72.197137 135.178297) (xy 72.2279 135.023642) (xy 72.2279 134.865958) (xy 72.2279 134.865955) + (xy 72.227899 134.865953) (xy 72.197137 134.711303) (xy 72.185075 134.682182) (xy 72.136797 134.565627) + (xy 72.13679 134.565614) (xy 72.049189 134.434511) (xy 72.049186 134.434507) (xy 71.937692 134.323013) + (xy 71.937688 134.32301) (xy 71.806585 134.235409) (xy 71.806572 134.235402) (xy 71.660901 134.175064) + (xy 71.660889 134.175061) (xy 71.506245 134.1443) (xy 71.506242 134.1443) (xy 71.348558 134.1443) + (xy 71.348555 134.1443) (xy 71.19391 134.175061) (xy 71.193898 134.175064) (xy 71.048227 134.235402) + (xy 71.048214 134.235409) (xy 70.917111 134.32301) (xy 70.917107 134.323013) (xy 70.805613 134.434507) + (xy 70.725103 134.554998) (xy 70.67149 134.599802) (xy 70.602165 134.608509) (xy 70.539138 134.578354) + (xy 70.514614 134.548106) (xy 70.500666 134.523947) (xy 70.492291 134.509441) (xy 70.388369 134.374007) + (xy 70.317178 134.281228) (xy 70.317172 134.281221) (xy 70.113778 134.077827) (xy 70.113771 134.077821) + (xy 69.885567 133.902715) (xy 69.885565 133.902713) (xy 69.885559 133.902709) (xy 69.885554 133.902706) + (xy 69.885551 133.902704) (xy 69.636448 133.758883) (xy 69.636431 133.758875) (xy 69.370678 133.648797) + (xy 69.092823 133.574346) (xy 68.807638 133.536801) (xy 68.807635 133.5368) (xy 68.807629 133.5368) + (xy 68.519971 133.5368) (xy 68.519965 133.5368) (xy 68.519961 133.536801) (xy 68.234776 133.574346) + (xy 67.956921 133.648797) (xy 67.691168 133.758875) (xy 67.691151 133.758883) (xy 67.442048 133.902704) + (xy 67.442032 133.902715) (xy 67.213828 134.077821) (xy 67.213821 134.077827) (xy 67.010427 134.281221) + (xy 66.93923 134.374007) (xy 66.882801 134.415209) (xy 66.813055 134.419364) (xy 66.752135 134.385151) + (xy 66.719383 134.323434) (xy 66.725196 134.253807) (xy 66.733461 134.236531) (xy 66.786663 134.144383) + (xy 66.894542 133.883939) (xy 66.967504 133.611642) (xy 67.0043 133.332151) (xy 67.0043 133.050249) + (xy 66.967504 132.770758) (xy 66.894542 132.498461) (xy 66.786663 132.238017) (xy 66.786661 132.238014) + (xy 66.786659 132.238009) (xy 66.645716 131.99389) (xy 66.645712 131.993883) (xy 66.4741 131.770235) + (xy 66.474098 131.770233) (xy 66.474095 131.770229) (xy 66.27477 131.570904) (xy 66.190689 131.506386) + (xy 66.051117 131.399288) (xy 66.051111 131.399284) (xy 66.051109 131.399283) (xy 65.80699 131.25834) + (xy 65.806979 131.258335) (xy 65.546543 131.150459) (xy 65.274239 131.077495) (xy 64.994758 131.0407) + (xy 64.994751 131.0407) (xy 64.712849 131.0407) (xy 64.712841 131.0407) (xy 64.43336 131.077495) + (xy 64.161053 131.15046) (xy 63.954716 131.235927) (xy 63.885247 131.243396) (xy 63.822768 131.212121) + (xy 63.792703 131.168818) (xy 63.738197 131.037227) (xy 63.73819 131.037214) (xy 63.650589 130.906111) + (xy 63.650586 130.906107) (xy 63.539092 130.794613) (xy 63.539088 130.79461) (xy 63.407985 130.707009) + (xy 63.407972 130.707002) (xy 63.262301 130.646664) (xy 63.262289 130.646661) (xy 63.167505 130.627807) + (xy 63.167504 130.627807) (xy 63.107644 130.6159) (xy 63.107642 130.6159) (xy 62.949958 130.6159) + (xy 62.949955 130.6159) (xy 62.79531 130.646661) (xy 62.795298 130.646664) (xy 62.649627 130.707002) + (xy 62.649614 130.707009) (xy 62.518511 130.79461) (xy 62.518507 130.794613) (xy 62.407013 130.906107) + (xy 62.40701 130.906111) (xy 62.319409 131.037214) (xy 62.319402 131.037227) (xy 62.259064 131.182898) + (xy 62.259061 131.182908) (xy 62.227636 131.340892) (xy 62.195251 131.402803) (xy 62.134535 131.437377) + (xy 62.106019 131.4407) (xy 60.228798 131.4407) (xy 60.228781 131.440701) (xy 60.126003 131.4512) + (xy 60.126 131.451201) (xy 59.959468 131.506385) (xy 59.959463 131.506387) (xy 59.810142 131.598489) + (xy 59.686089 131.722542) (xy 59.593987 131.871863) (xy 59.593985 131.871868) (xy 59.566149 131.95587) + (xy 59.538801 132.038403) (xy 59.538801 132.038404) (xy 59.5388 132.038404) (xy 59.5283 132.141183) + (xy 45.35175 132.141183) (xy 45.35175 130.510241) (xy 69.0533 130.510241) (xy 69.0533 130.792158) + (xy 69.090095 131.071639) (xy 69.163059 131.343943) (xy 69.270935 131.604379) (xy 69.27094 131.60439) + (xy 69.386183 131.803995) (xy 69.411888 131.848517) (xy 69.557594 132.038404) (xy 69.583504 132.07217) + (xy 69.782829 132.271495) (xy 69.782833 132.271498) (xy 69.782835 132.2715) (xy 70.006483 132.443112) + (xy 70.00649 132.443116) (xy 70.250609 132.584059) (xy 70.250614 132.584061) (xy 70.250617 132.584063) + (xy 70.511061 132.691942) (xy 70.783358 132.764904) (xy 71.062849 132.8017) (xy 71.062856 132.8017) + (xy 71.344744 132.8017) (xy 71.344751 132.8017) (xy 71.624242 132.764904) (xy 71.896539 132.691942) + (xy 72.156983 132.584063) (xy 72.401117 132.443112) (xy 72.421692 132.427323) (xy 72.48686 132.402129) + (xy 72.497179 132.401699) (xy 73.678782 132.401699) (xy 73.678791 132.4017) (xy 75.828808 132.401699) + (xy 75.931597 132.391199) (xy 76.098134 132.336014) (xy 76.247456 132.243912) (xy 76.350185 132.141183) + (xy 85.722 132.141183) (xy 85.722 134.241201) (xy 85.722001 134.241218) (xy 85.7325 134.343996) + (xy 85.732501 134.343999) (xy 85.742445 134.374007) (xy 85.787686 134.510534) (xy 85.879788 134.659856) + (xy 86.003844 134.783912) (xy 86.153166 134.876014) (xy 86.319703 134.931199) (xy 86.422491 134.9417) + (xy 88.349618 134.941699) (xy 88.349627 134.9417) (xy 88.778351 134.941699) (xy 88.845389 134.961383) + (xy 88.891144 135.014187) (xy 88.901088 135.083346) (xy 88.878669 135.138583) (xy 88.857651 135.167511) + (xy 88.780796 135.318346) (xy 88.728481 135.479352) (xy 88.702 135.64655) (xy 88.702 135.815849) + (xy 88.728481 135.983047) (xy 88.780796 136.144053) (xy 88.857652 136.294888) (xy 88.957148 136.431834) + (xy 88.957152 136.431839) (xy 89.07686 136.551547) (xy 89.076865 136.551551) (xy 89.196317 136.638337) + (xy 89.213815 136.65105) (xy 89.309925 136.70002) (xy 89.364646 136.727903) (xy 89.364648 136.727903) + (xy 89.364651 136.727905) (xy 89.45095 136.755945) (xy 89.525652 136.780218) (xy 89.692851 136.8067) + (xy 89.692856 136.8067) (xy 89.862149 136.8067) (xy 90.029347 136.780218) (xy 90.190349 136.727905) + (xy 90.341185 136.65105) (xy 90.478141 136.551546) (xy 90.597846 136.431841) (xy 90.69735 136.294885) + (xy 90.774205 136.144049) (xy 90.826518 135.983047) (xy 90.843625 135.875038) (xy 90.853 135.815849) + (xy 90.853 135.64655) (xy 90.827428 135.485098) (xy 90.836382 135.415805) (xy 90.881379 135.362353) + (xy 90.94813 135.341713) (xy 90.949901 135.3417) (xy 91.188444 135.3417) (xy 91.188451 135.3417) + (xy 91.467942 135.304904) (xy 91.740239 135.231942) (xy 92.000683 135.124063) (xy 92.244817 134.983112) + (xy 92.468465 134.8115) (xy 92.6678 134.612165) (xy 92.735492 134.523946) (xy 92.79192 134.482744) + (xy 92.861666 134.478589) (xy 92.922586 134.512801) (xy 92.955339 134.574518) (xy 92.949526 134.644146) + (xy 92.941255 134.661433) (xy 92.885183 134.758551) (xy 92.885175 134.758568) (xy 92.775097 135.024321) + (xy 92.700646 135.302176) (xy 92.663101 135.587361) (xy 92.6631 135.587377) (xy 92.6631 135.875022) + (xy 92.663101 135.875038) (xy 92.700646 136.160223) (xy 92.775097 136.438078) (xy 92.885175 136.703831) + (xy 92.885183 136.703848) (xy 93.029004 136.952951) (xy 93.029015 136.952967) (xy 93.204121 137.181171) + (xy 93.204127 137.181178) (xy 93.407521 137.384572) (xy 93.407528 137.384578) (xy 93.570023 137.509264) + (xy 93.635741 137.559691) (xy 93.635748 137.559695) (xy 93.884851 137.703516) (xy 93.884856 137.703518) + (xy 93.884859 137.70352) (xy 93.884863 137.703521) (xy 93.884868 137.703524) (xy 93.91663 137.71668) + (xy 94.15062 137.813602) (xy 94.428475 137.888053) (xy 94.713671 137.9256) (xy 94.713678 137.9256) + (xy 95.001322 137.9256) (xy 95.001329 137.9256) (xy 95.286525 137.888053) (xy 95.56438 137.813602) + (xy 95.830141 137.70352) (xy 96.079259 137.559691) (xy 96.307473 137.384577) (xy 96.510877 137.181173) + (xy 96.685991 136.952959) (xy 96.82982 136.703841) (xy 96.939902 136.43808) (xy 97.014353 136.160225) + (xy 97.0519 135.875029) (xy 97.0519 135.64655) (xy 98.862 135.64655) (xy 98.862 135.815849) (xy 98.888481 135.983047) + (xy 98.940796 136.144053) (xy 99.017652 136.294888) (xy 99.117148 136.431834) (xy 99.117152 136.431839) + (xy 99.23686 136.551547) (xy 99.236865 136.551551) (xy 99.356317 136.638337) (xy 99.373815 136.65105) + (xy 99.469925 136.70002) (xy 99.524646 136.727903) (xy 99.524648 136.727903) (xy 99.524651 136.727905) + (xy 99.61095 136.755945) (xy 99.685652 136.780218) (xy 99.852851 136.8067) (xy 99.852856 136.8067) + (xy 100.022149 136.8067) (xy 100.189347 136.780218) (xy 100.350349 136.727905) (xy 100.501185 136.65105) + (xy 100.638141 136.551546) (xy 100.757846 136.431841) (xy 100.85735 136.294885) (xy 100.934205 136.144049) + (xy 100.986518 135.983047) (xy 101.003625 135.875038) (xy 101.013 135.815849) (xy 101.013 135.64655) + (xy 100.986518 135.479352) (xy 100.941796 135.341713) (xy 100.934205 135.318351) (xy 100.934203 135.318348) + (xy 100.934203 135.318346) (xy 100.890176 135.23194) (xy 100.85735 135.167515) (xy 100.825781 135.124064) + (xy 100.757851 135.030565) (xy 100.757847 135.03056) (xy 100.638139 134.910852) (xy 100.638134 134.910848) + (xy 100.501188 134.811352) (xy 100.501187 134.811351) (xy 100.501185 134.81135) (xy 100.436447 134.778364) + (xy 100.350353 134.734496) (xy 100.189347 134.682181) (xy 100.022149 134.6557) (xy 100.022144 134.6557) + (xy 99.852856 134.6557) (xy 99.852851 134.6557) (xy 99.685652 134.682181) (xy 99.524646 134.734496) + (xy 99.373811 134.811352) (xy 99.236865 134.910848) (xy 99.23686 134.910852) (xy 99.117152 135.03056) + (xy 99.117148 135.030565) (xy 99.017652 135.167511) (xy 98.940796 135.318346) (xy 98.888481 135.479352) + (xy 98.862 135.64655) (xy 97.0519 135.64655) (xy 97.0519 135.587371) (xy 97.014353 135.302175) (xy 96.939902 135.02432) + (xy 96.840668 134.784748) (xy 96.829824 134.758568) (xy 96.829816 134.758551) (xy 96.685995 134.509448) + (xy 96.685994 134.509447) (xy 96.685991 134.509441) (xy 96.582069 134.374007) (xy 96.510878 134.281228) + (xy 96.510872 134.281221) (xy 96.307478 134.077827) (xy 96.307471 134.077821) (xy 96.079267 133.902715) + (xy 96.079265 133.902713) (xy 96.079259 133.902709) (xy 96.079254 133.902706) (xy 96.079251 133.902704) + (xy 95.830148 133.758883) (xy 95.830131 133.758875) (xy 95.564378 133.648797) (xy 95.286523 133.574346) + (xy 95.001338 133.536801) (xy 95.001335 133.5368) (xy 95.001329 133.5368) (xy 94.713671 133.5368) + (xy 94.713665 133.5368) (xy 94.713661 133.536801) (xy 94.428476 133.574346) (xy 94.150621 133.648797) + (xy 93.884868 133.758875) (xy 93.884851 133.758883) (xy 93.635748 133.902704) (xy 93.635732 133.902715) + (xy 93.407528 134.077821) (xy 93.407521 134.077827) (xy 93.204127 134.281221) (xy 93.13293 134.374007) + (xy 93.076501 134.415209) (xy 93.006755 134.419364) (xy 92.945835 134.385151) (xy 92.913083 134.323434) + (xy 92.918896 134.253807) (xy 92.927161 134.236531) (xy 92.980363 134.144383) (xy 93.088242 133.883939) + (xy 93.161204 133.611642) (xy 93.198 133.332151) (xy 93.198 133.050249) (xy 93.161204 132.770758) + (xy 93.088242 132.498461) (xy 92.980363 132.238017) (xy 92.980361 132.238014) (xy 92.980359 132.238009) + (xy 92.839416 131.99389) (xy 92.839412 131.993883) (xy 92.6678 131.770235) (xy 92.667798 131.770233) + (xy 92.667795 131.770229) (xy 92.46847 131.570904) (xy 92.384389 131.506386) (xy 92.244817 131.399288) + (xy 92.244811 131.399284) (xy 92.244809 131.399283) (xy 92.00069 131.25834) (xy 92.000679 131.258335) + (xy 91.740243 131.150459) (xy 91.467939 131.077495) (xy 91.188458 131.0407) (xy 91.188451 131.0407) + (xy 90.906549 131.0407) (xy 90.906541 131.0407) (xy 90.62706 131.077495) (xy 90.354756 131.150459) + (xy 90.09432 131.258335) (xy 90.094309 131.25834) (xy 89.850192 131.399281) (xy 89.850183 131.399288) + (xy 89.829606 131.415076) (xy 89.764438 131.44027) (xy 89.754122 131.4407) (xy 86.422498 131.4407) + (xy 86.422481 131.440701) (xy 86.319703 131.4512) (xy 86.3197 131.451201) (xy 86.153168 131.506385) + (xy 86.153163 131.506387) (xy 86.003842 131.598489) (xy 85.879789 131.722542) (xy 85.787687 131.871863) + (xy 85.787685 131.871868) (xy 85.759849 131.95587) (xy 85.732501 132.038403) (xy 85.732501 132.038404) + (xy 85.7325 132.038404) (xy 85.722 132.141183) (xy 76.350185 132.141183) (xy 76.371512 132.119856) + (xy 76.463614 131.970534) (xy 76.518799 131.803997) (xy 76.5293 131.701209) (xy 76.529299 130.510241) + (xy 95.247 130.510241) (xy 95.247 130.792158) (xy 95.283795 131.071639) (xy 95.356759 131.343943) + (xy 95.464635 131.604379) (xy 95.46464 131.60439) (xy 95.579883 131.803995) (xy 95.605588 131.848517) + (xy 95.751294 132.038404) (xy 95.777204 132.07217) (xy 95.976529 132.271495) (xy 95.976533 132.271498) + (xy 95.976535 132.2715) (xy 96.200183 132.443112) (xy 96.20019 132.443116) (xy 96.444309 132.584059) + (xy 96.444314 132.584061) (xy 96.444317 132.584063) (xy 96.704761 132.691942) (xy 96.977058 132.764904) + (xy 97.256549 132.8017) (xy 97.256556 132.8017) (xy 97.538444 132.8017) (xy 97.538451 132.8017) + (xy 97.817942 132.764904) (xy 98.090239 132.691942) (xy 98.350683 132.584063) (xy 98.594817 132.443112) + (xy 98.615392 132.427323) (xy 98.68056 132.402129) (xy 98.690879 132.401699) (xy 99.872482 132.401699) + (xy 99.872491 132.4017) (xy 102.022508 132.401699) (xy 102.125297 132.391199) (xy 102.291834 132.336014) + (xy 102.441156 132.243912) (xy 102.565212 132.119856) (xy 102.657314 131.970534) (xy 102.712499 131.803997) + (xy 102.723 131.701209) (xy 102.722999 130.510241) (xy 114.297 130.510241) (xy 114.297 130.792158) + (xy 114.333795 131.071639) (xy 114.406759 131.343943) (xy 114.514635 131.604379) (xy 114.51464 131.60439) + (xy 114.629883 131.803995) (xy 114.655588 131.848517) (xy 114.801294 132.038404) (xy 114.827204 132.07217) + (xy 115.026529 132.271495) (xy 115.026533 132.271498) (xy 115.026535 132.2715) (xy 115.250183 132.443112) + (xy 115.25019 132.443116) (xy 115.494309 132.584059) (xy 115.494314 132.584061) (xy 115.494317 132.584063) + (xy 115.754761 132.691942) (xy 116.027058 132.764904) (xy 116.306549 132.8017) (xy 116.306556 132.8017) + (xy 116.588444 132.8017) (xy 116.588451 132.8017) (xy 116.867942 132.764904) (xy 117.140239 132.691942) + (xy 117.400683 132.584063) (xy 117.644817 132.443112) (xy 117.665392 132.427323) (xy 117.73056 132.402129) + (xy 117.740879 132.401699) (xy 118.922482 132.401699) (xy 118.922491 132.4017) (xy 121.072508 132.401699) + (xy 121.175297 132.391199) (xy 121.341834 132.336014) (xy 121.491156 132.243912) (xy 121.615212 132.119856) + (xy 121.707314 131.970534) (xy 121.762499 131.803997) (xy 121.773 131.701209) (xy 121.772999 130.510241) + (xy 133.347 130.510241) (xy 133.347 130.792158) (xy 133.383795 131.071639) (xy 133.456759 131.343943) + (xy 133.564635 131.604379) (xy 133.56464 131.60439) (xy 133.679883 131.803995) (xy 133.705588 131.848517) + (xy 133.851294 132.038404) (xy 133.877204 132.07217) (xy 134.076529 132.271495) (xy 134.076533 132.271498) + (xy 134.076535 132.2715) (xy 134.300183 132.443112) (xy 134.30019 132.443116) (xy 134.544309 132.584059) + (xy 134.544314 132.584061) (xy 134.544317 132.584063) (xy 134.804761 132.691942) (xy 135.077058 132.764904) + (xy 135.356549 132.8017) (xy 135.356556 132.8017) (xy 135.638444 132.8017) (xy 135.638451 132.8017) + (xy 135.917942 132.764904) (xy 136.190239 132.691942) (xy 136.450683 132.584063) (xy 136.694817 132.443112) + (xy 136.715392 132.427323) (xy 136.78056 132.402129) (xy 136.790879 132.401699) (xy 137.972482 132.401699) + (xy 137.972491 132.4017) (xy 140.122508 132.401699) (xy 140.225297 132.391199) (xy 140.391834 132.336014) + (xy 140.541156 132.243912) (xy 140.665212 132.119856) (xy 140.757314 131.970534) (xy 140.812499 131.803997) + (xy 140.823 131.701209) (xy 140.822999 130.510241) (xy 152.397 130.510241) (xy 152.397 130.792158) + (xy 152.433795 131.071639) (xy 152.506759 131.343943) (xy 152.614635 131.604379) (xy 152.61464 131.60439) + (xy 152.729883 131.803995) (xy 152.755588 131.848517) (xy 152.901294 132.038404) (xy 152.927204 132.07217) + (xy 153.126529 132.271495) (xy 153.126533 132.271498) (xy 153.126535 132.2715) (xy 153.350183 132.443112) + (xy 153.35019 132.443116) (xy 153.594309 132.584059) (xy 153.594314 132.584061) (xy 153.594317 132.584063) + (xy 153.854761 132.691942) (xy 154.127058 132.764904) (xy 154.406549 132.8017) (xy 154.406556 132.8017) + (xy 154.688444 132.8017) (xy 154.688451 132.8017) (xy 154.967942 132.764904) (xy 155.240239 132.691942) + (xy 155.500683 132.584063) (xy 155.744817 132.443112) (xy 155.765392 132.427323) (xy 155.83056 132.402129) + (xy 155.840879 132.401699) (xy 157.022482 132.401699) (xy 157.022491 132.4017) (xy 159.172508 132.401699) + (xy 159.275297 132.391199) (xy 159.441834 132.336014) (xy 159.591156 132.243912) (xy 159.715212 132.119856) + (xy 159.807314 131.970534) (xy 159.862499 131.803997) (xy 159.873 131.701209) (xy 159.872999 130.510241) + (xy 171.447 130.510241) (xy 171.447 130.792158) (xy 171.483795 131.071639) (xy 171.556759 131.343943) + (xy 171.664635 131.604379) (xy 171.66464 131.60439) (xy 171.779883 131.803995) (xy 171.805588 131.848517) + (xy 171.951294 132.038404) (xy 171.977204 132.07217) (xy 172.176529 132.271495) (xy 172.176533 132.271498) + (xy 172.176535 132.2715) (xy 172.400183 132.443112) (xy 172.40019 132.443116) (xy 172.644309 132.584059) + (xy 172.644314 132.584061) (xy 172.644317 132.584063) (xy 172.904761 132.691942) (xy 173.177058 132.764904) + (xy 173.456549 132.8017) (xy 173.456556 132.8017) (xy 173.738444 132.8017) (xy 173.738451 132.8017) + (xy 174.017942 132.764904) (xy 174.290239 132.691942) (xy 174.550683 132.584063) (xy 174.794817 132.443112) + (xy 174.815392 132.427323) (xy 174.88056 132.402129) (xy 174.890879 132.401699) (xy 176.072482 132.401699) + (xy 176.072491 132.4017) (xy 178.222508 132.401699) (xy 178.325297 132.391199) (xy 178.491834 132.336014) + (xy 178.641156 132.243912) (xy 178.765212 132.119856) (xy 178.857314 131.970534) (xy 178.912499 131.803997) + (xy 178.923 131.701209) (xy 178.922999 130.510241) (xy 190.497 130.510241) (xy 190.497 130.792158) + (xy 190.533795 131.071639) (xy 190.606759 131.343943) (xy 190.714635 131.604379) (xy 190.71464 131.60439) + (xy 190.829883 131.803995) (xy 190.855588 131.848517) (xy 191.001294 132.038404) (xy 191.027204 132.07217) + (xy 191.226529 132.271495) (xy 191.226533 132.271498) (xy 191.226535 132.2715) (xy 191.450183 132.443112) + (xy 191.45019 132.443116) (xy 191.694309 132.584059) (xy 191.694314 132.584061) (xy 191.694317 132.584063) + (xy 191.954761 132.691942) (xy 192.227058 132.764904) (xy 192.506549 132.8017) (xy 192.506556 132.8017) + (xy 192.788444 132.8017) (xy 192.788451 132.8017) (xy 193.067942 132.764904) (xy 193.340239 132.691942) + (xy 193.600683 132.584063) (xy 193.844817 132.443112) (xy 193.865392 132.427323) (xy 193.93056 132.402129) + (xy 193.940879 132.401699) (xy 195.122482 132.401699) (xy 195.122491 132.4017) (xy 197.272508 132.401699) + (xy 197.375297 132.391199) (xy 197.541834 132.336014) (xy 197.691156 132.243912) (xy 197.815212 132.119856) + (xy 197.907314 131.970534) (xy 197.962499 131.803997) (xy 197.973 131.701209) (xy 197.972999 130.510241) + (xy 209.547 130.510241) (xy 209.547 130.792158) (xy 209.583795 131.071639) (xy 209.656759 131.343943) + (xy 209.764635 131.604379) (xy 209.76464 131.60439) (xy 209.879883 131.803995) (xy 209.905588 131.848517) + (xy 210.051294 132.038404) (xy 210.077204 132.07217) (xy 210.276529 132.271495) (xy 210.276533 132.271498) + (xy 210.276535 132.2715) (xy 210.500183 132.443112) (xy 210.50019 132.443116) (xy 210.744309 132.584059) + (xy 210.744314 132.584061) (xy 210.744317 132.584063) (xy 211.004761 132.691942) (xy 211.277058 132.764904) + (xy 211.556549 132.8017) (xy 211.556556 132.8017) (xy 211.838444 132.8017) (xy 211.838451 132.8017) + (xy 212.117942 132.764904) (xy 212.390239 132.691942) (xy 212.650683 132.584063) (xy 212.894817 132.443112) + (xy 212.915392 132.427323) (xy 212.98056 132.402129) (xy 212.990879 132.401699) (xy 214.172482 132.401699) + (xy 214.172491 132.4017) (xy 216.322508 132.401699) (xy 216.425297 132.391199) (xy 216.591834 132.336014) + (xy 216.741156 132.243912) (xy 216.865212 132.119856) (xy 216.957314 131.970534) (xy 217.012499 131.803997) + (xy 217.023 131.701209) (xy 217.022999 130.510241) (xy 228.597 130.510241) (xy 228.597 130.792158) + (xy 228.633795 131.071639) (xy 228.706759 131.343943) (xy 228.814635 131.604379) (xy 228.81464 131.60439) + (xy 228.929883 131.803995) (xy 228.955588 131.848517) (xy 229.101294 132.038404) (xy 229.127204 132.07217) + (xy 229.326529 132.271495) (xy 229.326533 132.271498) (xy 229.326535 132.2715) (xy 229.550183 132.443112) + (xy 229.55019 132.443116) (xy 229.794309 132.584059) (xy 229.794314 132.584061) (xy 229.794317 132.584063) + (xy 230.054761 132.691942) (xy 230.327058 132.764904) (xy 230.606549 132.8017) (xy 230.606556 132.8017) + (xy 230.888444 132.8017) (xy 230.888451 132.8017) (xy 231.167942 132.764904) (xy 231.440239 132.691942) + (xy 231.700683 132.584063) (xy 231.944817 132.443112) (xy 231.965392 132.427323) (xy 232.03056 132.402129) + (xy 232.040879 132.401699) (xy 233.222482 132.401699) (xy 233.222491 132.4017) (xy 235.372508 132.401699) + (xy 235.475297 132.391199) (xy 235.641834 132.336014) (xy 235.791156 132.243912) (xy 235.915212 132.119856) + (xy 236.007314 131.970534) (xy 236.062499 131.803997) (xy 236.073 131.701209) (xy 236.072999 130.510241) + (xy 247.647 130.510241) (xy 247.647 130.792158) (xy 247.683795 131.071639) (xy 247.756759 131.343943) + (xy 247.864635 131.604379) (xy 247.86464 131.60439) (xy 247.979883 131.803995) (xy 248.005588 131.848517) + (xy 248.151294 132.038404) (xy 248.177204 132.07217) (xy 248.376529 132.271495) (xy 248.376533 132.271498) + (xy 248.376535 132.2715) (xy 248.600183 132.443112) (xy 248.60019 132.443116) (xy 248.844309 132.584059) + (xy 248.844314 132.584061) (xy 248.844317 132.584063) (xy 249.104761 132.691942) (xy 249.377058 132.764904) + (xy 249.656549 132.8017) (xy 249.656556 132.8017) (xy 249.938444 132.8017) (xy 249.938451 132.8017) + (xy 250.217942 132.764904) (xy 250.490239 132.691942) (xy 250.750683 132.584063) (xy 250.994817 132.443112) + (xy 251.015392 132.427323) (xy 251.08056 132.402129) (xy 251.090879 132.401699) (xy 252.272482 132.401699) + (xy 252.272491 132.4017) (xy 254.422508 132.401699) (xy 254.525297 132.391199) (xy 254.691834 132.336014) + (xy 254.841156 132.243912) (xy 254.965212 132.119856) (xy 255.057314 131.970534) (xy 255.112499 131.803997) + (xy 255.123 131.701209) (xy 255.122999 130.510241) (xy 266.697 130.510241) (xy 266.697 130.792158) + (xy 266.733795 131.071639) (xy 266.806759 131.343943) (xy 266.914635 131.604379) (xy 266.91464 131.60439) + (xy 267.029883 131.803995) (xy 267.055588 131.848517) (xy 267.201294 132.038404) (xy 267.227204 132.07217) + (xy 267.426529 132.271495) (xy 267.426533 132.271498) (xy 267.426535 132.2715) (xy 267.650183 132.443112) + (xy 267.65019 132.443116) (xy 267.894309 132.584059) (xy 267.894314 132.584061) (xy 267.894317 132.584063) + (xy 268.154761 132.691942) (xy 268.427058 132.764904) (xy 268.706549 132.8017) (xy 268.706556 132.8017) + (xy 268.988444 132.8017) (xy 268.988451 132.8017) (xy 269.267942 132.764904) (xy 269.540239 132.691942) + (xy 269.800683 132.584063) (xy 270.044817 132.443112) (xy 270.065392 132.427323) (xy 270.13056 132.402129) + (xy 270.140879 132.401699) (xy 271.322482 132.401699) (xy 271.322491 132.4017) (xy 273.472508 132.401699) + (xy 273.575297 132.391199) (xy 273.741834 132.336014) (xy 273.891156 132.243912) (xy 274.015212 132.119856) + (xy 274.107314 131.970534) (xy 274.162499 131.803997) (xy 274.173 131.701209) (xy 274.172999 129.601192) + (xy 274.162499 129.498403) (xy 274.107314 129.331866) (xy 274.015212 129.182544) (xy 273.891156 129.058488) + (xy 273.769274 128.983311) (xy 273.741836 128.966387) (xy 273.741831 128.966385) (xy 273.740362 128.965898) + (xy 273.575297 128.911201) (xy 273.575295 128.9112) (xy 273.472516 128.9007) (xy 273.472509 128.9007) + (xy 271.520381 128.9007) (xy 271.520373 128.9007) (xy 270.786706 128.9007) (xy 270.739253 128.891261) + (xy 270.692753 128.872) (xy 270.100061 128.872) (xy 270.038061 128.855387) (xy 269.80069 128.71834) + (xy 269.800679 128.718335) (xy 269.540243 128.610459) (xy 269.267939 128.537495) (xy 268.988458 128.5007) + (xy 268.988451 128.5007) (xy 268.706549 128.5007) (xy 268.706541 128.5007) (xy 268.42706 128.537495) + (xy 268.154756 128.610459) (xy 267.89432 128.718335) (xy 267.894309 128.71834) (xy 267.65019 128.859283) + (xy 267.650184 128.859287) (xy 267.650183 128.859288) (xy 267.629608 128.875076) (xy 267.426529 129.030904) + (xy 267.227204 129.230229) (xy 267.149215 129.331866) (xy 267.066612 129.439517) (xy 267.055589 129.453882) + (xy 267.055583 129.45389) (xy 266.91464 129.698009) (xy 266.914635 129.69802) (xy 266.806759 129.958456) + (xy 266.733795 130.23076) (xy 266.697 130.510241) (xy 255.122999 130.510241) (xy 255.122999 129.601192) + (xy 255.112499 129.498403) (xy 255.057314 129.331866) (xy 254.965212 129.182544) (xy 254.841156 129.058488) + (xy 254.719274 128.983311) (xy 254.691836 128.966387) (xy 254.691831 128.966385) (xy 254.690362 128.965898) + (xy 254.525297 128.911201) (xy 254.525295 128.9112) (xy 254.422516 128.9007) (xy 254.422509 128.9007) + (xy 252.710906 128.9007) (xy 252.663453 128.891261) (xy 252.616954 128.872) (xy 252.616953 128.872) + (xy 251.642753 128.872) (xy 251.050061 128.872) (xy 250.988061 128.855387) (xy 250.75069 128.71834) + (xy 250.750679 128.718335) (xy 250.490243 128.610459) (xy 250.217939 128.537495) (xy 249.938458 128.5007) + (xy 249.938451 128.5007) (xy 249.656549 128.5007) (xy 249.656541 128.5007) (xy 249.37706 128.537495) + (xy 249.104756 128.610459) (xy 248.84432 128.718335) (xy 248.844309 128.71834) (xy 248.60019 128.859283) + (xy 248.600184 128.859287) (xy 248.600183 128.859288) (xy 248.579608 128.875076) (xy 248.376529 129.030904) + (xy 248.177204 129.230229) (xy 248.099215 129.331866) (xy 248.016612 129.439517) (xy 248.005589 129.453882) + (xy 248.005583 129.45389) (xy 247.86464 129.698009) (xy 247.864635 129.69802) (xy 247.756759 129.958456) + (xy 247.683795 130.23076) (xy 247.647 130.510241) (xy 236.072999 130.510241) (xy 236.072999 129.601192) + (xy 236.062499 129.498403) (xy 236.007314 129.331866) (xy 235.915212 129.182544) (xy 235.791156 129.058488) + (xy 235.669274 128.983311) (xy 235.641836 128.966387) (xy 235.641831 128.966385) (xy 235.640362 128.965898) + (xy 235.475297 128.911201) (xy 235.475295 128.9112) (xy 235.372516 128.9007) (xy 235.372509 128.9007) + (xy 233.660906 128.9007) (xy 233.613453 128.891261) (xy 233.566954 128.872) (xy 233.566953 128.872) + (xy 232.592753 128.872) (xy 232.000061 128.872) (xy 231.938061 128.855387) (xy 231.70069 128.71834) + (xy 231.700679 128.718335) (xy 231.440243 128.610459) (xy 231.167939 128.537495) (xy 230.888458 128.5007) + (xy 230.888451 128.5007) (xy 230.606549 128.5007) (xy 230.606541 128.5007) (xy 230.32706 128.537495) + (xy 230.054756 128.610459) (xy 229.79432 128.718335) (xy 229.794309 128.71834) (xy 229.55019 128.859283) + (xy 229.550184 128.859287) (xy 229.550183 128.859288) (xy 229.529608 128.875076) (xy 229.326529 129.030904) + (xy 229.127204 129.230229) (xy 229.049215 129.331866) (xy 228.966612 129.439517) (xy 228.955589 129.453882) + (xy 228.955583 129.45389) (xy 228.81464 129.698009) (xy 228.814635 129.69802) (xy 228.706759 129.958456) + (xy 228.633795 130.23076) (xy 228.597 130.510241) (xy 217.022999 130.510241) (xy 217.022999 129.601192) + (xy 217.012499 129.498403) (xy 216.957314 129.331866) (xy 216.865212 129.182544) (xy 216.741156 129.058488) + (xy 216.619274 128.983311) (xy 216.591836 128.966387) (xy 216.591831 128.966385) (xy 216.590362 128.965898) + (xy 216.425297 128.911201) (xy 216.425295 128.9112) (xy 216.322516 128.9007) (xy 216.322509 128.9007) + (xy 214.610906 128.9007) (xy 214.563453 128.891261) (xy 214.516954 128.872) (xy 214.516953 128.872) + (xy 213.542753 128.872) (xy 212.950061 128.872) (xy 212.888061 128.855387) (xy 212.65069 128.71834) + (xy 212.650679 128.718335) (xy 212.390243 128.610459) (xy 212.117939 128.537495) (xy 211.838458 128.5007) + (xy 211.838451 128.5007) (xy 211.556549 128.5007) (xy 211.556541 128.5007) (xy 211.27706 128.537495) + (xy 211.004756 128.610459) (xy 210.74432 128.718335) (xy 210.744309 128.71834) (xy 210.50019 128.859283) + (xy 210.500184 128.859287) (xy 210.500183 128.859288) (xy 210.479608 128.875076) (xy 210.276529 129.030904) + (xy 210.077204 129.230229) (xy 209.999215 129.331866) (xy 209.916612 129.439517) (xy 209.905589 129.453882) + (xy 209.905583 129.45389) (xy 209.76464 129.698009) (xy 209.764635 129.69802) (xy 209.656759 129.958456) + (xy 209.583795 130.23076) (xy 209.547 130.510241) (xy 197.972999 130.510241) (xy 197.972999 129.601192) + (xy 197.962499 129.498403) (xy 197.907314 129.331866) (xy 197.815212 129.182544) (xy 197.691156 129.058488) + (xy 197.569274 128.983311) (xy 197.541836 128.966387) (xy 197.541831 128.966385) (xy 197.540362 128.965898) + (xy 197.375297 128.911201) (xy 197.375295 128.9112) (xy 197.272516 128.9007) (xy 197.272509 128.9007) + (xy 195.561006 128.9007) (xy 195.513553 128.891261) (xy 195.467054 128.872) (xy 195.467053 128.872) + (xy 194.492753 128.872) (xy 193.900061 128.872) (xy 193.838061 128.855387) (xy 193.60069 128.71834) + (xy 193.600679 128.718335) (xy 193.340243 128.610459) (xy 193.067939 128.537495) (xy 192.788458 128.5007) + (xy 192.788451 128.5007) (xy 192.506549 128.5007) (xy 192.506541 128.5007) (xy 192.22706 128.537495) + (xy 191.954756 128.610459) (xy 191.69432 128.718335) (xy 191.694309 128.71834) (xy 191.45019 128.859283) + (xy 191.450184 128.859287) (xy 191.450183 128.859288) (xy 191.429608 128.875076) (xy 191.226529 129.030904) + (xy 191.027204 129.230229) (xy 190.949215 129.331866) (xy 190.866612 129.439517) (xy 190.855589 129.453882) + (xy 190.855583 129.45389) (xy 190.71464 129.698009) (xy 190.714635 129.69802) (xy 190.606759 129.958456) + (xy 190.533795 130.23076) (xy 190.497 130.510241) (xy 178.922999 130.510241) (xy 178.922999 129.601192) + (xy 178.912499 129.498403) (xy 178.857314 129.331866) (xy 178.765212 129.182544) (xy 178.641156 129.058488) + (xy 178.519274 128.983311) (xy 178.491836 128.966387) (xy 178.491831 128.966385) (xy 178.490362 128.965898) + (xy 178.325297 128.911201) (xy 178.325295 128.9112) (xy 178.222516 128.9007) (xy 178.222509 128.9007) + (xy 176.270381 128.9007) (xy 176.270373 128.9007) (xy 175.536706 128.9007) (xy 175.489253 128.891261) + (xy 175.442753 128.872) (xy 174.850061 128.872) (xy 174.788061 128.855387) (xy 174.55069 128.71834) + (xy 174.550679 128.718335) (xy 174.290243 128.610459) (xy 174.017939 128.537495) (xy 173.738458 128.5007) + (xy 173.738451 128.5007) (xy 173.456549 128.5007) (xy 173.456541 128.5007) (xy 173.17706 128.537495) + (xy 172.904756 128.610459) (xy 172.64432 128.718335) (xy 172.644309 128.71834) (xy 172.40019 128.859283) + (xy 172.400184 128.859287) (xy 172.400183 128.859288) (xy 172.379608 128.875076) (xy 172.176529 129.030904) + (xy 171.977204 129.230229) (xy 171.899215 129.331866) (xy 171.816612 129.439517) (xy 171.805589 129.453882) + (xy 171.805583 129.45389) (xy 171.66464 129.698009) (xy 171.664635 129.69802) (xy 171.556759 129.958456) + (xy 171.483795 130.23076) (xy 171.447 130.510241) (xy 159.872999 130.510241) (xy 159.872999 129.601192) + (xy 159.862499 129.498403) (xy 159.807314 129.331866) (xy 159.715212 129.182544) (xy 159.591156 129.058488) + (xy 159.469274 128.983311) (xy 159.441836 128.966387) (xy 159.441831 128.966385) (xy 159.440362 128.965898) + (xy 159.275297 128.911201) (xy 159.275295 128.9112) (xy 159.172516 128.9007) (xy 159.172509 128.9007) + (xy 157.460906 128.9007) (xy 157.413453 128.891261) (xy 157.366954 128.872) (xy 157.366953 128.872) + (xy 156.392753 128.872) (xy 155.800061 128.872) (xy 155.738061 128.855387) (xy 155.50069 128.71834) + (xy 155.500679 128.718335) (xy 155.240243 128.610459) (xy 154.967939 128.537495) (xy 154.688458 128.5007) + (xy 154.688451 128.5007) (xy 154.406549 128.5007) (xy 154.406541 128.5007) (xy 154.12706 128.537495) + (xy 153.854756 128.610459) (xy 153.59432 128.718335) (xy 153.594309 128.71834) (xy 153.35019 128.859283) + (xy 153.350184 128.859287) (xy 153.350183 128.859288) (xy 153.329608 128.875076) (xy 153.126529 129.030904) + (xy 152.927204 129.230229) (xy 152.849215 129.331866) (xy 152.766612 129.439517) (xy 152.755589 129.453882) + (xy 152.755583 129.45389) (xy 152.61464 129.698009) (xy 152.614635 129.69802) (xy 152.506759 129.958456) + (xy 152.433795 130.23076) (xy 152.397 130.510241) (xy 140.822999 130.510241) (xy 140.822999 129.601192) + (xy 140.812499 129.498403) (xy 140.757314 129.331866) (xy 140.665212 129.182544) (xy 140.541156 129.058488) + (xy 140.419274 128.983311) (xy 140.391836 128.966387) (xy 140.391831 128.966385) (xy 140.390362 128.965898) + (xy 140.225297 128.911201) (xy 140.225295 128.9112) (xy 140.122516 128.9007) (xy 140.122509 128.9007) + (xy 138.410906 128.9007) (xy 138.363453 128.891261) (xy 138.316954 128.872) (xy 138.316953 128.872) + (xy 137.342753 128.872) (xy 136.750061 128.872) (xy 136.688061 128.855387) (xy 136.45069 128.71834) + (xy 136.450679 128.718335) (xy 136.190243 128.610459) (xy 135.917939 128.537495) (xy 135.638458 128.5007) + (xy 135.638451 128.5007) (xy 135.356549 128.5007) (xy 135.356541 128.5007) (xy 135.07706 128.537495) + (xy 134.804756 128.610459) (xy 134.54432 128.718335) (xy 134.544309 128.71834) (xy 134.30019 128.859283) + (xy 134.300184 128.859287) (xy 134.300183 128.859288) (xy 134.279608 128.875076) (xy 134.076529 129.030904) + (xy 133.877204 129.230229) (xy 133.799215 129.331866) (xy 133.716612 129.439517) (xy 133.705589 129.453882) + (xy 133.705583 129.45389) (xy 133.56464 129.698009) (xy 133.564635 129.69802) (xy 133.456759 129.958456) + (xy 133.383795 130.23076) (xy 133.347 130.510241) (xy 121.772999 130.510241) (xy 121.772999 129.601192) + (xy 121.762499 129.498403) (xy 121.707314 129.331866) (xy 121.615212 129.182544) (xy 121.491156 129.058488) + (xy 121.369274 128.983311) (xy 121.341836 128.966387) (xy 121.341831 128.966385) (xy 121.340362 128.965898) + (xy 121.175297 128.911201) (xy 121.175295 128.9112) (xy 121.072516 128.9007) (xy 121.072509 128.9007) + (xy 119.360906 128.9007) (xy 119.313453 128.891261) (xy 119.266954 128.872) (xy 119.266953 128.872) + (xy 118.292753 128.872) (xy 117.700061 128.872) (xy 117.638061 128.855387) (xy 117.40069 128.71834) + (xy 117.400679 128.718335) (xy 117.140243 128.610459) (xy 116.867939 128.537495) (xy 116.588458 128.5007) + (xy 116.588451 128.5007) (xy 116.306549 128.5007) (xy 116.306541 128.5007) (xy 116.02706 128.537495) + (xy 115.754756 128.610459) (xy 115.49432 128.718335) (xy 115.494309 128.71834) (xy 115.25019 128.859283) + (xy 115.250184 128.859287) (xy 115.250183 128.859288) (xy 115.229608 128.875076) (xy 115.026529 129.030904) + (xy 114.827204 129.230229) (xy 114.749215 129.331866) (xy 114.666612 129.439517) (xy 114.655589 129.453882) + (xy 114.655583 129.45389) (xy 114.51464 129.698009) (xy 114.514635 129.69802) (xy 114.406759 129.958456) + (xy 114.333795 130.23076) (xy 114.297 130.510241) (xy 102.722999 130.510241) (xy 102.722999 129.601192) + (xy 102.712499 129.498403) (xy 102.657314 129.331866) (xy 102.565212 129.182544) (xy 102.441156 129.058488) + (xy 102.319274 128.983311) (xy 102.291836 128.966387) (xy 102.291831 128.966385) (xy 102.290362 128.965898) + (xy 102.125297 128.911201) (xy 102.125295 128.9112) (xy 102.022516 128.9007) (xy 102.022509 128.9007) + (xy 100.310906 128.9007) (xy 100.263453 128.891261) (xy 100.216954 128.872) (xy 100.216953 128.872) + (xy 99.242753 128.872) (xy 98.650061 128.872) (xy 98.588061 128.855387) (xy 98.35069 128.71834) + (xy 98.350679 128.718335) (xy 98.090243 128.610459) (xy 97.817939 128.537495) (xy 97.538458 128.5007) + (xy 97.538451 128.5007) (xy 97.256549 128.5007) (xy 97.256541 128.5007) (xy 96.97706 128.537495) + (xy 96.704756 128.610459) (xy 96.44432 128.718335) (xy 96.444309 128.71834) (xy 96.20019 128.859283) + (xy 96.200184 128.859287) (xy 96.200183 128.859288) (xy 96.179608 128.875076) (xy 95.976529 129.030904) + (xy 95.777204 129.230229) (xy 95.699215 129.331866) (xy 95.616612 129.439517) (xy 95.605589 129.453882) + (xy 95.605583 129.45389) (xy 95.46464 129.698009) (xy 95.464635 129.69802) (xy 95.356759 129.958456) + (xy 95.283795 130.23076) (xy 95.247 130.510241) (xy 76.529299 130.510241) (xy 76.529299 129.601192) + (xy 76.518799 129.498403) (xy 76.463614 129.331866) (xy 76.371512 129.182544) (xy 76.247456 129.058488) + (xy 76.125574 128.983311) (xy 76.098136 128.966387) (xy 76.098131 128.966385) (xy 76.096662 128.965898) + (xy 75.931597 128.911201) (xy 75.931595 128.9112) (xy 75.828816 128.9007) (xy 75.828809 128.9007) + (xy 74.117206 128.9007) (xy 74.069753 128.891261) (xy 74.023254 128.872) (xy 74.023253 128.872) + (xy 73.049053 128.872) (xy 72.456361 128.872) (xy 72.394361 128.855387) (xy 72.15699 128.71834) + (xy 72.156979 128.718335) (xy 71.896543 128.610459) (xy 71.624239 128.537495) (xy 71.344758 128.5007) + (xy 71.344751 128.5007) (xy 71.062849 128.5007) (xy 71.062841 128.5007) (xy 70.78336 128.537495) + (xy 70.511056 128.610459) (xy 70.25062 128.718335) (xy 70.250609 128.71834) (xy 70.00649 128.859283) + (xy 70.006484 128.859287) (xy 70.006483 128.859288) (xy 69.985908 128.875076) (xy 69.782829 129.030904) + (xy 69.583504 129.230229) (xy 69.505515 129.331866) (xy 69.422912 129.439517) (xy 69.411889 129.453882) + (xy 69.411883 129.45389) (xy 69.27094 129.698009) (xy 69.270935 129.69802) (xy 69.163059 129.958456) + (xy 69.090095 130.23076) (xy 69.0533 130.510241) (xy 45.35175 130.510241) (xy 45.35175 118.480013) + (xy 48.2633 118.480013) (xy 48.2633 118.692586) (xy 48.29387 118.885602) (xy 48.296554 118.902543) + (xy 48.355744 119.084711) (xy 48.362244 119.104714) (xy 48.458751 119.29412) (xy 48.58369 119.466086) + (xy 48.734013 119.616409) (xy 48.905982 119.74135) (xy 48.914746 119.745816) (xy 48.965542 119.793791) + (xy 48.982336 119.861612) (xy 48.959798 119.927747) (xy 48.914746 119.966784) (xy 48.905982 119.971249) + (xy 48.734013 120.09619) (xy 48.58369 120.246513) (xy 48.458751 120.418479) (xy 48.362244 120.607885) + (xy 48.296553 120.81006) (xy 48.265661 121.005104) (xy 48.2633 121.020013) (xy 48.2633 121.232587) + (xy 48.272251 121.2891) (xy 48.295611 121.436594) (xy 48.296554 121.442543) (xy 48.350713 121.609227) + (xy 48.362244 121.644714) (xy 48.458751 121.83412) (xy 48.58369 122.006086) (xy 48.734013 122.156409) + (xy 48.905982 122.28135) (xy 48.914746 122.285816) (xy 48.965542 122.333791) (xy 48.982336 122.401612) + (xy 48.959798 122.467747) (xy 48.914746 122.506784) (xy 48.905982 122.511249) (xy 48.734013 122.63619) + (xy 48.58369 122.786513) (xy 48.458751 122.958479) (xy 48.362244 123.147885) (xy 48.362243 123.147887) + (xy 48.362243 123.147888) (xy 48.361062 123.151522) (xy 48.296553 123.35006) (xy 48.2633 123.560013) + (xy 48.2633 123.772586) (xy 48.294768 123.971272) (xy 48.296554 123.982543) (xy 48.353095 124.156558) + (xy 48.362244 124.184714) (xy 48.458751 124.37412) (xy 48.58369 124.546086) (xy 48.697618 124.660014) + (xy 48.731103 124.721337) (xy 48.726119 124.791029) (xy 48.684247 124.846962) (xy 48.653271 124.863877) + (xy 48.521712 124.912946) (xy 48.521706 124.912949) (xy 48.406612 124.999109) (xy 48.406609 124.999112) + (xy 48.320449 125.114206) (xy 48.320445 125.114213) (xy 48.270203 125.24892) (xy 48.270201 125.248927) + (xy 48.2638 125.308455) (xy 48.2638 125.9563) (xy 49.180788 125.9563) (xy 49.147875 126.013307) + (xy 49.1138 126.140474) (xy 49.1138 126.272126) (xy 49.147875 126.399293) (xy 49.180788 126.4563) + (xy 48.2638 126.4563) (xy 48.2638 127.104144) (xy 48.270201 127.163672) (xy 48.270203 127.163679) + (xy 48.320445 127.298386) (xy 48.320449 127.298393) (xy 48.406609 127.413487) (xy 48.406612 127.41349) + (xy 48.521706 127.49965) (xy 48.521713 127.499654) (xy 48.65642 127.549896) (xy 48.656427 127.549898) + (xy 48.715955 127.556299) (xy 48.715972 127.5563) (xy 49.3638 127.5563) (xy 49.3638 126.639312) + (xy 49.420807 126.672225) (xy 49.547974 126.7063) (xy 49.679626 126.7063) (xy 49.806793 126.672225) + (xy 49.8638 126.639312) (xy 49.8638 127.5563) (xy 50.511628 127.5563) (xy 50.511644 127.556299) + (xy 50.571172 127.549898) (xy 50.571179 127.549896) (xy 50.705886 127.499654) (xy 50.705893 127.49965) + (xy 50.820987 127.41349) (xy 50.82099 127.413487) (xy 50.90715 127.298393) (xy 50.907154 127.298386) + (xy 50.957396 127.163679) (xy 50.957398 127.163672) (xy 50.963799 127.104144) (xy 50.9638 127.104127) + (xy 50.9638 126.4563) (xy 50.046812 126.4563) (xy 50.079725 126.399293) (xy 50.1138 126.272126) + (xy 50.1138 126.140474) (xy 50.079725 126.013307) (xy 50.046812 125.9563) (xy 50.9638 125.9563) + (xy 50.9638 125.308472) (xy 50.963799 125.308455) (xy 50.957398 125.248927) (xy 50.957396 125.24892) + (xy 50.907154 125.114213) (xy 50.90715 125.114206) (xy 50.82099 124.999112) (xy 50.820987 124.999109) + (xy 50.705893 124.912949) (xy 50.705888 124.912946) (xy 50.574328 124.863877) (xy 50.518395 124.822005) + (xy 50.493978 124.756541) (xy 50.50883 124.688268) (xy 50.529975 124.66002) (xy 50.643904 124.546092) + (xy 50.768851 124.374116) (xy 50.865357 124.184712) (xy 50.931046 123.982543) (xy 50.9643 123.772587) + (xy 50.9643 123.560013) (xy 50.931046 123.350057) (xy 50.865357 123.147888) (xy 50.768851 122.958484) + (xy 50.768849 122.958481) (xy 50.768848 122.958479) (xy 50.643909 122.786513) (xy 50.493586 122.63619) + (xy 50.32162 122.511251) (xy 50.320915 122.510891) (xy 50.312854 122.506785) (xy 50.262059 122.458812) + (xy 50.245263 122.390992) (xy 50.267799 122.324856) (xy 50.312854 122.285815) (xy 50.321616 122.281351) + (xy 50.402618 122.2225) (xy 50.493586 122.156409) (xy 50.493588 122.156406) (xy 50.493592 122.156404) + (xy 50.643904 122.006092) (xy 50.643906 122.006088) (xy 50.643909 122.006086) (xy 50.760047 121.846234) + (xy 50.768851 121.834116) (xy 50.865357 121.644712) (xy 50.931046 121.442543) (xy 50.9643 121.232587) + (xy 50.9643 121.020013) (xy 50.931046 120.810057) (xy 50.865357 120.607888) (xy 50.801378 120.482322) + (xy 62.3558 120.482322) (xy 62.3558 121.214678) (xy 62.370791 121.328554) (xy 62.370792 121.32856) + (xy 62.370793 121.328563) (xy 62.371268 121.329709) (xy 62.429487 121.470262) (xy 62.469965 121.523015) + (xy 62.495158 121.588184) (xy 62.481119 121.656629) (xy 62.469965 121.673985) (xy 62.429487 121.726737) + (xy 62.370793 121.868436) (xy 62.370792 121.868438) (xy 62.3558 121.982322) (xy 62.3558 122.714678) + (xy 62.370791 122.828554) (xy 62.370792 122.82856) (xy 62.370793 122.828563) (xy 62.385777 122.864736) + (xy 62.429487 122.970262) (xy 62.451212 122.998575) (xy 62.522856 123.091944) (xy 62.644537 123.185312) + (xy 62.786237 123.244007) (xy 62.900123 123.259) (xy 63.179801 123.258999) (xy 63.246839 123.278683) + (xy 63.292594 123.331487) (xy 63.3038 123.382999) (xy 63.3038 123.509797) (xy 63.3038 123.600303) + (xy 63.322251 123.644848) (xy 63.338436 123.68392) (xy 64.058385 124.403868) (xy 64.122382 124.467865) + (xy 64.205997 124.5025) (xy 64.205998 124.5025) (xy 94.452858 124.5025) (xy 94.452859 124.5025) + (xy 94.536474 124.467865) (xy 95.050408 123.953932) (xy 95.081136 123.879747) (xy 95.085042 123.870317) + (xy 95.085042 120.803246) (xy 95.050407 120.719631) (xy 94.98641 120.655634) (xy 94.834734 120.503958) + (xy 94.677013 120.346236) (xy 94.677008 120.346234) (xy 94.593396 120.3116) (xy 94.093299 120.3116) + (xy 94.02626 120.291915) (xy 93.980505 120.239111) (xy 93.969299 120.1876) (xy 93.969299 120.172921) + (xy 93.954308 120.059045) (xy 93.954307 120.059037) (xy 93.895612 119.917337) (xy 93.802244 119.795656) + (xy 93.680563 119.702288) (xy 93.680562 119.702287) (xy 93.538863 119.643593) (xy 93.538861 119.643592) + (xy 93.424978 119.6286) (xy 93.424977 119.6286) (xy 92.287373 119.6286) (xy 92.283043 119.627328) + (xy 92.278634 119.628292) (xy 92.249816 119.617572) (xy 92.220334 119.608915) (xy 92.216195 119.605065) + (xy 92.213149 119.603932) (xy 92.18817 119.578996) (xy 92.12027 119.488456) (xy 92.095797 119.423013) + (xy 92.110589 119.354728) (xy 92.159952 119.305279) (xy 92.219473 119.29006) (xy 106.968178 119.29006) + (xy 107.035217 119.309745) (xy 107.080972 119.362549) (xy 107.090916 119.431707) (xy 107.067381 119.488456) + (xy 106.999481 119.578996) (xy 106.943511 119.620819) (xy 106.900278 119.6286) (xy 105.762621 119.6286) + (xy 105.648745 119.643591) (xy 105.648737 119.643593) (xy 105.507037 119.702287) (xy 105.385356 119.795656) + (xy 105.291987 119.917337) (xy 105.233293 120.059036) (xy 105.233292 120.059038) (xy 105.2183 120.172922) + (xy 105.2183 120.905278) (xy 105.233291 121.019154) (xy 105.233292 121.01916) (xy 105.233293 121.019163) + (xy 105.238989 121.032914) (xy 105.291987 121.160862) (xy 105.332465 121.213615) (xy 105.357658 121.278784) + (xy 105.343619 121.347229) (xy 105.332465 121.364585) (xy 105.291987 121.417337) (xy 105.233293 121.559036) + (xy 105.233292 121.559038) (xy 105.2183 121.672922) (xy 105.2183 122.405278) (xy 105.233291 122.519154) + (xy 105.233292 122.51916) (xy 105.233293 122.519163) (xy 105.248503 122.555882) (xy 105.291987 122.660862) + (xy 105.297626 122.668211) (xy 105.385356 122.782544) (xy 105.507037 122.875912) (xy 105.648737 122.934607) + (xy 105.762623 122.9496) (xy 106.057265 122.949599) (xy 106.124304 122.969283) (xy 106.170059 123.022087) + (xy 106.171825 123.026144) (xy 106.200934 123.096416) (xy 106.200936 123.096419) (xy 107.717756 124.613241) + (xy 107.717757 124.613241) (xy 107.717759 124.613243) (xy 107.776879 124.63773) (xy 107.776882 124.637732) + (xy 107.776883 124.637732) (xy 107.787028 124.641934) (xy 107.801374 124.647877) (xy 131.216887 124.647877) + (xy 131.216888 124.647877) (xy 131.300503 124.613242) (xy 133.150439 122.763306) (xy 133.162023 122.735339) + (xy 133.185074 122.679691) (xy 133.185074 121.398559) (xy 133.169959 121.362068) (xy 133.169959 121.362067) + (xy 133.150441 121.314947) (xy 133.15044 121.314944) (xy 132.18173 120.346235) (xy 132.181729 120.346234) + (xy 132.181727 120.346233) (xy 132.145845 120.33137) (xy 132.091442 120.287529) (xy 132.069378 120.221234) + (xy 132.069299 120.21681) (xy 132.069299 120.172921) (xy 132.054308 120.059045) (xy 132.054307 120.059037) + (xy 131.995612 119.917337) (xy 131.902244 119.795656) (xy 131.780563 119.702288) (xy 131.780562 119.702287) + (xy 131.638863 119.643593) (xy 131.638861 119.643592) (xy 131.524978 119.6286) (xy 131.524977 119.6286) + (xy 130.387373 119.6286) (xy 130.383043 119.627328) (xy 130.378635 119.628292) (xy 130.349819 119.617572) + (xy 130.320334 119.608915) (xy 130.316195 119.605065) (xy 130.313149 119.603932) (xy 130.288171 119.578997) + (xy 130.2296 119.500897) (xy 130.205126 119.435454) (xy 130.219918 119.367168) (xy 130.26928 119.31772) + (xy 130.328802 119.3025) (xy 145.058949 119.3025) (xy 145.125988 119.322185) (xy 145.171743 119.374989) + (xy 145.181687 119.444147) (xy 145.158151 119.500897) (xy 145.09958 119.578997) (xy 145.04361 119.620819) + (xy 145.000378 119.6286) (xy 143.862721 119.6286) (xy 143.748845 119.643591) (xy 143.748837 119.643593) + (xy 143.607137 119.702287) (xy 143.485456 119.795656) (xy 143.392087 119.917337) (xy 143.333393 120.059036) + (xy 143.333392 120.059038) (xy 143.3184 120.172922) (xy 143.3184 120.905278) (xy 143.333391 121.019154) + (xy 143.333392 121.01916) (xy 143.333393 121.019163) (xy 143.339089 121.032914) (xy 143.392087 121.160862) + (xy 143.432565 121.213615) (xy 143.457758 121.278784) (xy 143.443719 121.347229) (xy 143.432565 121.364585) + (xy 143.392087 121.417337) (xy 143.333393 121.559036) (xy 143.333392 121.559038) (xy 143.3184 121.672922) + (xy 143.3184 122.405278) (xy 143.333391 122.519154) (xy 143.333392 122.51916) (xy 143.333393 122.519163) + (xy 143.348603 122.555882) (xy 143.392087 122.660862) (xy 143.397726 122.668211) (xy 143.485456 122.782544) + (xy 143.607137 122.875912) (xy 143.748837 122.934607) (xy 143.862723 122.9496) (xy 144.142401 122.949599) + (xy 144.209439 122.969283) (xy 144.255194 123.022087) (xy 144.2664 123.073599) (xy 144.2664 123.099381) + (xy 144.2664 123.189887) (xy 144.300967 123.273339) (xy 144.301036 123.273504) (xy 145.381401 124.353868) + (xy 145.445398 124.417865) (xy 145.529013 124.4525) (xy 145.529014 124.4525) (xy 169.370229 124.4525) + (xy 169.37023 124.4525) (xy 169.453845 124.417865) (xy 170.294116 123.577595) (xy 170.294116 123.577593) + (xy 170.294118 123.577592) (xy 170.316616 123.523274) (xy 170.32875 123.49398) (xy 170.32875 123.403474) + (xy 170.32875 121.601197) (xy 170.294115 121.517582) (xy 170.230118 121.453585) (xy 170.103869 121.327336) + (xy 170.070384 121.266013) (xy 170.075368 121.196321) (xy 170.093176 121.164167) (xy 170.095712 121.160863) + (xy 170.154407 121.019163) (xy 170.1694 120.905277) (xy 170.169399 120.172924) (xy 170.167697 120.159997) + (xy 170.154408 120.059045) (xy 170.154407 120.059037) (xy 170.095712 119.917337) (xy 170.002344 119.795656) + (xy 169.880663 119.702288) (xy 169.880662 119.702287) (xy 169.738963 119.643593) (xy 169.738961 119.643592) + (xy 169.625078 119.6286) (xy 169.625077 119.6286) (xy 168.487473 119.6286) (xy 168.483143 119.627328) + (xy 168.478735 119.628292) (xy 168.449919 119.617572) (xy 168.420434 119.608915) (xy 168.416295 119.605065) + (xy 168.413249 119.603932) (xy 168.388271 119.578997) (xy 168.3297 119.500897) (xy 168.305226 119.435454) + (xy 168.320018 119.367168) (xy 168.36938 119.31772) (xy 168.428902 119.3025) (xy 183.158949 119.3025) + (xy 183.225988 119.322185) (xy 183.271743 119.374989) (xy 183.281687 119.444147) (xy 183.258151 119.500897) + (xy 183.19958 119.578997) (xy 183.14361 119.620819) (xy 183.100378 119.6286) (xy 181.962721 119.6286) + (xy 181.848845 119.643591) (xy 181.848837 119.643593) (xy 181.707137 119.702287) (xy 181.585456 119.795656) + (xy 181.492087 119.917337) (xy 181.433393 120.059036) (xy 181.433392 120.059038) (xy 181.4184 120.172922) + (xy 181.4184 120.905278) (xy 181.433391 121.019154) (xy 181.433392 121.01916) (xy 181.433393 121.019163) + (xy 181.439089 121.032914) (xy 181.492087 121.160862) (xy 181.532565 121.213615) (xy 181.557758 121.278784) + (xy 181.543719 121.347229) (xy 181.532565 121.364585) (xy 181.492087 121.417337) (xy 181.433393 121.559036) + (xy 181.433392 121.559038) (xy 181.4184 121.672922) (xy 181.4184 122.405278) (xy 181.433391 122.519154) + (xy 181.433392 122.51916) (xy 181.433393 122.519163) (xy 181.448603 122.555882) (xy 181.492087 122.660862) + (xy 181.497726 122.668211) (xy 181.585456 122.782544) (xy 181.707137 122.875912) (xy 181.848837 122.934607) + (xy 181.962723 122.9496) (xy 182.242401 122.949599) (xy 182.309439 122.969283) (xy 182.355194 123.022087) + (xy 182.3664 123.073599) (xy 182.3664 123.222397) (xy 182.3664 123.312903) (xy 182.398671 123.390812) + (xy 182.401036 123.39652) (xy 183.42126 124.416743) (xy 183.485257 124.48074) (xy 183.568872 124.515375) + (xy 183.568873 124.515375) (xy 189.680877 124.515375) (xy 189.680878 124.515375) (xy 189.764493 124.48074) + (xy 189.764495 124.480738) (xy 189.764496 124.480738) (xy 194.906415 119.338819) (xy 194.967738 119.305334) + (xy 194.994096 119.3025) (xy 202.208949 119.3025) (xy 202.221924 119.306309) (xy 202.235412 119.305357) + (xy 202.254792 119.315961) (xy 202.275988 119.322185) (xy 202.284842 119.332403) (xy 202.296706 119.338895) + (xy 202.307277 119.358294) (xy 202.321743 119.374989) (xy 202.323667 119.388372) (xy 202.330138 119.400247) + (xy 202.328542 119.42228) (xy 202.331687 119.444147) (xy 202.32596 119.457955) (xy 202.325093 119.469935) + (xy 202.308151 119.500897) (xy 202.24958 119.578997) (xy 202.19361 119.620819) (xy 202.150378 119.6286) + (xy 201.012721 119.6286) (xy 200.898845 119.643591) (xy 200.898837 119.643593) (xy 200.757137 119.702287) + (xy 200.635456 119.795656) (xy 200.542087 119.917337) (xy 200.483393 120.059036) (xy 200.483392 120.059038) + (xy 200.4684 120.172922) (xy 200.4684 120.905278) (xy 200.483391 121.019154) (xy 200.483392 121.01916) + (xy 200.483393 121.019163) (xy 200.489089 121.032914) (xy 200.542087 121.160862) (xy 200.582565 121.213615) + (xy 200.607758 121.278784) (xy 200.593719 121.347229) (xy 200.582565 121.364585) (xy 200.542087 121.417337) + (xy 200.483393 121.559036) (xy 200.483392 121.559038) (xy 200.4684 121.672922) (xy 200.4684 122.405278) + (xy 200.483391 122.519154) (xy 200.483392 122.51916) (xy 200.483393 122.519163) (xy 200.498603 122.555882) + (xy 200.542087 122.660862) (xy 200.547726 122.668211) (xy 200.635456 122.782544) (xy 200.757137 122.875912) + (xy 200.898837 122.934607) (xy 201.012723 122.9496) (xy 201.328035 122.949599) (xy 201.395074 122.969283) + (xy 201.440829 123.022087) (xy 201.442595 123.026143) (xy 201.451035 123.046519) (xy 202.822379 124.417863) + (xy 202.82238 124.417863) (xy 202.822382 124.417865) (xy 202.905997 124.4525) (xy 202.996503 124.4525) + (xy 221.198122 124.4525) (xy 221.265161 124.472185) (xy 221.310916 124.524989) (xy 221.32086 124.594147) + (xy 221.319739 124.600691) (xy 221.30075 124.696153) (xy 221.30075 124.853846) (xy 221.331511 125.008489) + (xy 221.331514 125.008501) (xy 221.391852 125.154172) (xy 221.391859 125.154185) (xy 221.47946 125.285288) + (xy 221.479463 125.285292) (xy 221.590957 125.396786) (xy 221.590961 125.396789) (xy 221.722064 125.48439) + (xy 221.722077 125.484397) (xy 221.867748 125.544735) (xy 221.867753 125.544737) (xy 222.022403 125.575499) + (xy 222.022406 125.5755) (xy 222.022408 125.5755) (xy 222.180094 125.5755) (xy 222.180095 125.575499) + (xy 222.334747 125.544737) (xy 222.480429 125.484394) (xy 222.611539 125.396789) (xy 222.723039 125.285289) + (xy 222.810644 125.154179) (xy 222.870987 125.008497) (xy 222.90175 124.853842) (xy 222.90175 124.696158) + (xy 222.90175 124.696155) (xy 222.901749 124.696153) (xy 222.882761 124.600691) (xy 222.888988 124.5311) + (xy 222.931851 124.475922) (xy 222.997741 124.452678) (xy 223.004378 124.4525) (xy 226.546502 124.4525) + (xy 226.546503 124.4525) (xy 226.630118 124.417865) (xy 227.994116 123.053868) (xy 228.016758 122.999203) + (xy 228.026297 122.976175) (xy 228.026307 122.976148) (xy 228.026331 122.976092) (xy 228.02875 122.970253) + (xy 228.02875 120.929747) (xy 228.019085 120.906413) (xy 228.014647 120.895699) (xy 228.014647 120.895698) + (xy 227.994118 120.846137) (xy 227.994116 120.846132) (xy 227.494218 120.346235) (xy 227.410603 120.3116) + (xy 227.399319 120.306926) (xy 227.400686 120.303625) (xy 227.39107 120.298592) (xy 227.362196 120.285406) + (xy 227.36033 120.282503) (xy 227.357275 120.280904) (xy 227.341578 120.253323) (xy 227.324422 120.226628) + (xy 227.323758 120.222013) (xy 227.322715 120.22018) (xy 227.319399 120.191693) (xy 227.319399 120.172922) + (xy 238.5684 120.172922) (xy 238.5684 120.905278) (xy 238.583391 121.019154) (xy 238.583392 121.01916) + (xy 238.583393 121.019163) (xy 238.589089 121.032914) (xy 238.642087 121.160862) (xy 238.682565 121.213615) + (xy 238.707758 121.278784) (xy 238.693719 121.347229) (xy 238.682565 121.364585) (xy 238.642087 121.417337) + (xy 238.583393 121.559036) (xy 238.583392 121.559038) (xy 238.5684 121.672922) (xy 238.5684 122.405278) + (xy 238.583391 122.519154) (xy 238.583392 122.51916) (xy 238.583393 122.519163) (xy 238.598603 122.555882) + (xy 238.642087 122.660862) (xy 238.647726 122.668211) (xy 238.735456 122.782544) (xy 238.857137 122.875912) + (xy 238.998837 122.934607) (xy 239.112723 122.9496) (xy 239.392501 122.949599) (xy 239.459539 122.969283) + (xy 239.505294 123.022087) (xy 239.5165 123.073599) (xy 239.5165 123.385747) (xy 239.5165 123.476253) + (xy 239.539671 123.532193) (xy 239.551136 123.55987) (xy 240.540512 124.549245) (xy 240.604509 124.613242) + (xy 240.688124 124.647877) (xy 240.688125 124.647877) (xy 265.162312 124.647877) (xy 265.162313 124.647877) + (xy 265.245928 124.613242) (xy 265.24593 124.61324) (xy 265.245931 124.61324) (xy 266.500548 123.358622) + (xy 266.500551 123.358619) (xy 266.501331 123.356737) (xy 266.535186 123.275004) (xy 266.535186 121.398559) + (xy 266.520071 121.362068) (xy 266.520071 121.362067) (xy 266.500553 121.314947) (xy 266.500552 121.314944) + (xy 265.531842 120.346235) (xy 265.53184 120.346234) (xy 265.496044 120.331406) (xy 265.441641 120.287564) + (xy 265.419578 120.221269) (xy 265.419499 120.216846) (xy 265.419499 120.172921) (xy 265.404508 120.059045) + (xy 265.404507 120.059037) (xy 265.345812 119.917337) (xy 265.252444 119.795656) (xy 265.130763 119.702288) + (xy 265.130762 119.702287) (xy 264.989063 119.643593) (xy 264.989061 119.643592) (xy 264.875178 119.6286) + (xy 264.875177 119.6286) (xy 263.737573 119.6286) (xy 263.733243 119.627328) (xy 263.728835 119.628292) + (xy 263.700019 119.617572) (xy 263.670534 119.608915) (xy 263.666395 119.605065) (xy 263.663349 119.603932) + (xy 263.638371 119.578997) (xy 263.5798 119.500897) (xy 263.555326 119.435454) (xy 263.570118 119.367168) + (xy 263.61948 119.31772) (xy 263.679002 119.3025) (xy 278.409049 119.3025) (xy 278.476088 119.322185) + (xy 278.521843 119.374989) (xy 278.531787 119.444147) (xy 278.508251 119.500897) (xy 278.44968 119.578997) + (xy 278.39371 119.620819) (xy 278.350478 119.6286) (xy 277.212821 119.6286) (xy 277.098945 119.643591) + (xy 277.098937 119.643593) (xy 276.957237 119.702287) (xy 276.835556 119.795656) (xy 276.742187 119.917337) + (xy 276.683493 120.059036) (xy 276.683492 120.059038) (xy 276.6685 120.172922) (xy 276.6685 120.905278) + (xy 276.683491 121.019154) (xy 276.683492 121.01916) (xy 276.683493 121.019163) (xy 276.689189 121.032914) + (xy 276.742187 121.160862) (xy 276.782665 121.213615) (xy 276.807858 121.278784) (xy 276.793819 121.347229) + (xy 276.782665 121.364585) (xy 276.742187 121.417337) (xy 276.683493 121.559036) (xy 276.683492 121.559038) + (xy 276.6685 121.672922) (xy 276.6685 122.405278) (xy 276.683491 122.519154) (xy 276.683492 122.51916) + (xy 276.683493 122.519163) (xy 276.698703 122.555882) (xy 276.742187 122.660862) (xy 276.747826 122.668211) + (xy 276.835556 122.782544) (xy 276.957237 122.875912) (xy 277.098937 122.934607) (xy 277.212823 122.9496) + (xy 277.492501 122.949599) (xy 277.559539 122.969283) (xy 277.605294 123.022087) (xy 277.6165 123.073599) + (xy 277.6165 123.163003) (xy 277.651135 123.246618) (xy 277.651136 123.246619) (xy 278.522382 124.117866) + (xy 278.522384 124.117868) (xy 278.587051 124.144652) (xy 278.605997 124.1525) (xy 278.605999 124.1525) + (xy 283.232652 124.1525) (xy 283.232653 124.1525) (xy 283.316268 124.117865) (xy 283.31627 124.117863) + (xy 283.316271 124.117863) (xy 283.329981 124.104153) (xy 284.1625 124.104153) (xy 284.1625 124.261846) + (xy 284.193261 124.416489) (xy 284.193264 124.416501) (xy 284.253602 124.562172) (xy 284.253609 124.562185) + (xy 284.34121 124.693288) (xy 284.341213 124.693292) (xy 284.452707 124.804786) (xy 284.452711 124.804789) + (xy 284.583814 124.89239) (xy 284.583827 124.892397) (xy 284.729498 124.952735) (xy 284.729503 124.952737) + (xy 284.884153 124.983499) (xy 284.884156 124.9835) (xy 284.884158 124.9835) (xy 285.041844 124.9835) + (xy 285.041845 124.983499) (xy 285.196497 124.952737) (xy 285.342179 124.892394) (xy 285.473289 124.804789) + (xy 285.584789 124.693289) (xy 285.672394 124.562179) (xy 285.732737 124.416497) (xy 285.7635 124.261842) + (xy 285.7635 124.104158) (xy 285.7635 124.104155) (xy 285.763499 124.104153) (xy 285.748314 124.027815) + (xy 285.732737 123.949503) (xy 285.703844 123.879748) (xy 285.672397 123.803827) (xy 285.67239 123.803814) + (xy 285.584789 123.672711) (xy 285.584786 123.672707) (xy 285.473292 123.561213) (xy 285.473288 123.56121) + (xy 285.342185 123.473609) (xy 285.342172 123.473602) (xy 285.196501 123.413264) (xy 285.196489 123.413261) + (xy 285.041845 123.3825) (xy 285.041842 123.3825) (xy 284.884158 123.3825) (xy 284.884155 123.3825) + (xy 284.72951 123.413261) (xy 284.729498 123.413264) (xy 284.583827 123.473602) (xy 284.583814 123.473609) + (xy 284.452711 123.56121) (xy 284.452707 123.561213) (xy 284.341213 123.672707) (xy 284.34121 123.672711) + (xy 284.253609 123.803814) (xy 284.253602 123.803827) (xy 284.193264 123.949498) (xy 284.193261 123.94951) + (xy 284.1625 124.104153) (xy 283.329981 124.104153) (xy 288.095315 119.338819) (xy 288.156638 119.305334) + (xy 288.182996 119.3025) (xy 297.459049 119.3025) (xy 297.472024 119.306309) (xy 297.485512 119.305357) + (xy 297.504892 119.315961) (xy 297.526088 119.322185) (xy 297.534942 119.332403) (xy 297.546806 119.338895) + (xy 297.557377 119.358294) (xy 297.571843 119.374989) (xy 297.573767 119.388372) (xy 297.580238 119.400247) + (xy 297.578642 119.42228) (xy 297.581787 119.444147) (xy 297.57606 119.457955) (xy 297.575193 119.469935) + (xy 297.558251 119.500897) (xy 297.49968 119.578997) (xy 297.44371 119.620819) (xy 297.400478 119.6286) + (xy 296.262821 119.6286) (xy 296.148945 119.643591) (xy 296.148937 119.643593) (xy 296.007237 119.702287) + (xy 295.885556 119.795656) (xy 295.792187 119.917337) (xy 295.733493 120.059036) (xy 295.733492 120.059038) + (xy 295.7185 120.172922) (xy 295.7185 120.905278) (xy 295.733491 121.019154) (xy 295.733493 121.019163) + (xy 295.753369 121.067147) (xy 295.760838 121.136617) (xy 295.729563 121.199096) (xy 295.669474 121.234748) + (xy 295.638808 121.2386) (xy 295.551055 121.2386) (xy 295.39641 121.269361) (xy 295.396398 121.269364) + (xy 295.250727 121.329702) (xy 295.250714 121.329709) (xy 295.119611 121.41731) (xy 295.119607 121.417313) + (xy 295.008113 121.528807) (xy 295.00811 121.528811) (xy 294.920509 121.659914) (xy 294.920502 121.659927) + (xy 294.860164 121.805598) (xy 294.860161 121.80561) (xy 294.8294 121.960253) (xy 294.8294 122.117946) + (xy 294.860161 122.272589) (xy 294.860164 122.272601) (xy 294.920502 122.418272) (xy 294.920509 122.418285) + (xy 295.00811 122.549388) (xy 295.008113 122.549392) (xy 295.119607 122.660886) (xy 295.119611 122.660889) + (xy 295.250714 122.74849) (xy 295.250727 122.748497) (xy 295.396398 122.808835) (xy 295.396403 122.808837) + (xy 295.51084 122.8316) (xy 295.551053 122.839599) (xy 295.551056 122.8396) (xy 295.551058 122.8396) + (xy 295.708744 122.8396) (xy 295.853102 122.810885) (xy 295.922694 122.817112) (xy 295.952778 122.834124) + (xy 296.007237 122.875912) (xy 296.148937 122.934607) (xy 296.262823 122.9496) (xy 297.400429 122.949599) + (xy 297.467468 122.969284) (xy 297.499632 122.999203) (xy 297.574438 123.098952) (xy 297.574439 123.098953) + (xy 297.57444 123.098954) (xy 297.708632 123.222795) (xy 297.863025 123.320297) (xy 297.972701 123.364262) + (xy 298.032514 123.388239) (xy 298.032515 123.388239) (xy 298.032517 123.38824) (xy 298.211508 123.424379) + (xy 298.211502 123.424379) (xy 298.227822 123.424659) (xy 298.394084 123.42752) (xy 298.574212 123.397558) + (xy 298.64998 123.37017) (xy 298.745936 123.335485) (xy 298.745937 123.335483) (xy 298.74594 123.335483) + (xy 298.760975 123.32672) (xy 298.767659 123.322835) (xy 298.76795 123.322757) (xy 298.795833 123.30646) + (xy 298.795951 123.306392) (xy 298.799168 123.305601) (xy 298.858262 123.289599) (xy 300.339392 123.289599) + (xy 300.339514 123.289606) (xy 300.347605 123.289605) (xy 300.347608 123.289606) (xy 300.379742 123.289602) + (xy 300.442304 123.306534) (xy 300.47013 123.322791) (xy 300.470132 123.322791) (xy 300.47628 123.326383) + (xy 300.477935 123.327208) (xy 300.492078 123.33545) (xy 300.6638 123.397521) (xy 300.843921 123.427482) + (xy 301.023598 123.42439) (xy 301.026491 123.424341) (xy 301.205466 123.388205) (xy 301.205469 123.388203) + (xy 301.205474 123.388203) (xy 301.37496 123.320262) (xy 301.529346 123.222763) (xy 301.538841 123.214001) + (xy 301.66353 123.09893) (xy 301.663532 123.098928) (xy 301.665414 123.096419) (xy 301.738696 122.998702) + (xy 301.794665 122.95688) (xy 301.837898 122.949099) (xy 302.094 122.949099) (xy 302.594 122.949099) + (xy 302.649932 122.949099) (xy 302.733924 122.93855) (xy 302.866757 122.883529) (xy 302.933604 122.8316) + (xy 302.933611 122.831594) (xy 303.401494 122.363712) (xy 303.401499 122.363706) (xy 303.453427 122.29686) + (xy 303.456642 122.2891) (xy 302.594 122.2891) (xy 302.594 122.949099) (xy 302.094 122.949099) (xy 302.094 122.1631) + (xy 302.113685 122.096061) (xy 302.166489 122.050306) (xy 302.218 122.0391) (xy 302.344 122.0391) + (xy 302.344 121.9131) (xy 302.363685 121.846061) (xy 302.416489 121.800306) (xy 302.468 121.7891) + (xy 303.519 121.7891) (xy 303.519 121.672953) (xy 303.50402 121.559169) (xy 303.504018 121.559164) + (xy 303.445378 121.417593) (xy 303.445375 121.417588) (xy 303.40502 121.364996) (xy 303.379826 121.299827) + (xy 303.393864 121.231382) (xy 303.405021 121.214023) (xy 303.445812 121.160863) (xy 303.468383 121.106372) + (xy 303.504507 121.019163) (xy 303.5195 120.905277) (xy 303.519499 120.172924) (xy 303.519499 120.172922) + (xy 319.531 120.172922) (xy 319.531 120.905278) (xy 319.545991 121.019154) (xy 319.545992 121.01916) + (xy 319.545993 121.019163) (xy 319.551689 121.032914) (xy 319.604687 121.160862) (xy 319.645165 121.213615) + (xy 319.670358 121.278784) (xy 319.656319 121.347229) (xy 319.645165 121.364585) (xy 319.604687 121.417337) + (xy 319.545993 121.559036) (xy 319.545992 121.559038) (xy 319.531 121.672922) (xy 319.531 122.405278) + (xy 319.545991 122.519154) (xy 319.545992 122.51916) (xy 319.545993 122.519163) (xy 319.561203 122.555882) + (xy 319.604687 122.660862) (xy 319.610326 122.668211) (xy 319.698056 122.782544) (xy 319.819737 122.875912) + (xy 319.961437 122.934607) (xy 320.075323 122.9496) (xy 320.355001 122.949599) (xy 320.422039 122.969283) + (xy 320.467794 123.022087) (xy 320.479 123.073599) (xy 320.479 123.125503) (xy 320.513635 123.209118) + (xy 320.513636 123.209119) (xy 321.772379 124.467864) (xy 321.77238 124.467864) (xy 321.772382 124.467866) + (xy 321.831502 124.492353) (xy 321.831505 124.492355) (xy 321.831506 124.492355) (xy 321.841651 124.496557) + (xy 321.855997 124.5025) (xy 329.037352 124.5025) (xy 329.037353 124.5025) (xy 329.120968 124.467865) + (xy 334.150014 119.438819) (xy 334.211337 119.405334) (xy 334.237695 119.4025) (xy 343.732598 119.4025) + (xy 343.799637 119.422185) (xy 343.845392 119.474989) (xy 343.855336 119.544147) (xy 343.826311 119.607703) + (xy 343.780051 119.641061) (xy 343.773938 119.643592) (xy 343.773937 119.643593) (xy 343.728083 119.662586) + (xy 343.632237 119.702287) (xy 343.510556 119.795656) (xy 343.417187 119.917337) (xy 343.358493 120.059036) + (xy 343.358492 120.059038) (xy 343.3435 120.172922) (xy 343.3435 120.905278) (xy 343.358491 121.019154) + (xy 343.358492 121.01916) (xy 343.358493 121.019163) (xy 343.364189 121.032914) (xy 343.417187 121.160862) + (xy 343.457665 121.213615) (xy 343.482858 121.278784) (xy 343.468819 121.347229) (xy 343.457665 121.364585) + (xy 343.417187 121.417337) (xy 343.358493 121.559036) (xy 343.358492 121.559038) (xy 343.3435 121.672922) + (xy 343.3435 122.405278) (xy 343.358491 122.519154) (xy 343.358492 122.51916) (xy 343.358493 122.519163) + (xy 343.373703 122.555882) (xy 343.417188 122.660865) (xy 343.418563 122.662657) (xy 343.419251 122.664439) + (xy 343.42125 122.6679) (xy 343.42071 122.668211) (xy 343.443753 122.727828) (xy 343.429709 122.796271) + (xy 343.380892 122.846258) (xy 343.312799 122.861916) (xy 343.272731 122.852697) (xy 343.199497 122.822363) + (xy 343.199489 122.822361) (xy 343.044845 122.7916) (xy 343.044842 122.7916) (xy 342.887158 122.7916) + (xy 342.887155 122.7916) (xy 342.73251 122.822361) (xy 342.732498 122.822364) (xy 342.586827 122.882702) + (xy 342.586814 122.882709) (xy 342.455711 122.97031) (xy 342.455707 122.970313) (xy 342.344213 123.081807) + (xy 342.34421 123.081811) (xy 342.256609 123.212914) (xy 342.256602 123.212927) (xy 342.196264 123.358598) + (xy 342.196261 123.35861) (xy 342.1655 123.513253) (xy 342.1655 123.670946) (xy 342.196261 123.825589) + (xy 342.196264 123.825601) (xy 342.256602 123.971272) (xy 342.256609 123.971285) (xy 342.34421 124.102388) + (xy 342.344213 124.102392) (xy 342.455707 124.213886) (xy 342.455711 124.213889) (xy 342.586814 124.30149) + (xy 342.586827 124.301497) (xy 342.713264 124.353868) (xy 342.732503 124.361837) (xy 342.887153 124.392599) + (xy 342.887156 124.3926) (xy 342.887158 124.3926) (xy 343.044844 124.3926) (xy 343.044845 124.392599) + (xy 343.199497 124.361837) (xy 343.345179 124.301494) (xy 343.476289 124.213889) (xy 343.587789 124.102389) + (xy 343.675394 123.971279) (xy 343.735737 123.825597) (xy 343.7665 123.670942) (xy 343.7665 123.513258) + (xy 343.7665 123.513255) (xy 343.766499 123.513253) (xy 343.756069 123.460817) (xy 343.735737 123.358603) + (xy 343.704614 123.283465) (xy 343.702477 123.263592) (xy 343.695492 123.244863) (xy 343.698819 123.229566) + (xy 343.697146 123.214001) (xy 343.706094 123.196123) (xy 343.710344 123.17659) (xy 343.727028 123.154301) + (xy 343.72842 123.151522) (xy 343.73144 123.148391) (xy 343.893916 122.985915) (xy 343.955237 122.952433) + (xy 343.981595 122.949599) (xy 345.025429 122.949599) (xy 345.092468 122.969284) (xy 345.124632 122.999203) + (xy 345.199438 123.098952) (xy 345.199439 123.098953) (xy 345.19944 123.098954) (xy 345.333632 123.222795) + (xy 345.488025 123.320297) (xy 345.597701 123.364262) (xy 345.657514 123.388239) (xy 345.657515 123.388239) + (xy 345.657517 123.38824) (xy 345.836508 123.424379) (xy 345.836502 123.424379) (xy 345.852822 123.424659) + (xy 346.019084 123.42752) (xy 346.199212 123.397558) (xy 346.27498 123.37017) (xy 346.370936 123.335485) + (xy 346.370937 123.335483) (xy 346.37094 123.335483) (xy 346.385975 123.32672) (xy 346.392659 123.322835) + (xy 346.39295 123.322757) (xy 346.420833 123.30646) (xy 346.420951 123.306392) (xy 346.424168 123.305601) + (xy 346.483262 123.289599) (xy 347.964392 123.289599) (xy 347.964514 123.289606) (xy 347.972605 123.289605) + (xy 347.972608 123.289606) (xy 348.004742 123.289602) (xy 348.067304 123.306534) (xy 348.09513 123.322791) + (xy 348.095132 123.322791) (xy 348.10128 123.326383) (xy 348.102935 123.327208) (xy 348.117078 123.33545) + (xy 348.2888 123.397521) (xy 348.468921 123.427482) (xy 348.648598 123.42439) (xy 348.651491 123.424341) + (xy 348.830466 123.388205) (xy 348.830469 123.388203) (xy 348.830474 123.388203) (xy 348.99996 123.320262) + (xy 349.154346 123.222763) (xy 349.163841 123.214001) (xy 349.28853 123.09893) (xy 349.288532 123.098928) + (xy 349.290414 123.096419) (xy 349.363696 122.998702) (xy 349.419665 122.95688) (xy 349.462898 122.949099) + (xy 349.719 122.949099) (xy 350.219 122.949099) (xy 350.274932 122.949099) (xy 350.358924 122.93855) + (xy 350.491757 122.883529) (xy 350.558604 122.8316) (xy 350.558611 122.831594) (xy 351.026494 122.363712) + (xy 351.026499 122.363706) (xy 351.078427 122.29686) (xy 351.081642 122.2891) (xy 350.219 122.2891) + (xy 350.219 122.949099) (xy 349.719 122.949099) (xy 349.719 122.1631) (xy 349.738685 122.096061) + (xy 349.791489 122.050306) (xy 349.843 122.0391) (xy 349.969 122.0391) (xy 349.969 121.9131) (xy 349.988685 121.846061) + (xy 350.041489 121.800306) (xy 350.093 121.7891) (xy 351.144 121.7891) (xy 351.144 121.672953) (xy 351.12902 121.559169) + (xy 351.129018 121.559164) (xy 351.070378 121.417593) (xy 351.070375 121.417588) (xy 351.03002 121.364996) + (xy 351.004826 121.299827) (xy 351.018864 121.231382) (xy 351.030021 121.214023) (xy 351.070812 121.160863) + (xy 351.093383 121.106372) (xy 351.129507 121.019163) (xy 351.1445 120.905277) (xy 351.144499 120.172924) + (xy 351.142797 120.159997) (xy 351.129508 120.059045) (xy 351.129507 120.059037) (xy 351.070812 119.917337) + (xy 350.977444 119.795656) (xy 350.855763 119.702288) (xy 350.855762 119.702287) (xy 350.714063 119.643593) + (xy 350.714061 119.643592) (xy 350.600178 119.6286) (xy 350.600177 119.6286) (xy 350.275036 119.6286) + (xy 350.207997 119.608915) (xy 350.182277 119.586891) (xy 350.168449 119.571304) (xy 350.161865 119.555408) + (xy 350.097868 119.491411) (xy 349.84917 119.242713) (xy 349.588594 118.982136) (xy 349.567052 118.973213) + (xy 349.504977 118.9475) (xy 348.1563 118.9475) (xy 348.089261 118.927815) (xy 348.043506 118.875011) + (xy 348.033562 118.805853) (xy 348.062587 118.742297) (xy 348.108848 118.708939) (xy 348.242632 118.653524) + (xy 348.242635 118.653522) (xy 348.242641 118.65352) (xy 348.491759 118.509691) (xy 348.530436 118.480013) + (xy 358.4213 118.480013) (xy 358.4213 118.692586) (xy 358.45187 118.885602) (xy 358.454554 118.902543) + (xy 358.513744 119.084711) (xy 358.520244 119.104714) (xy 358.616751 119.29412) (xy 358.74169 119.466086) + (xy 358.892013 119.616409) (xy 359.063982 119.74135) (xy 359.072746 119.745816) (xy 359.123542 119.793791) + (xy 359.140336 119.861612) (xy 359.117798 119.927747) (xy 359.072746 119.966784) (xy 359.063982 119.971249) + (xy 358.892013 120.09619) (xy 358.74169 120.246513) (xy 358.616751 120.418479) (xy 358.520244 120.607885) + (xy 358.454553 120.81006) (xy 358.423661 121.005104) (xy 358.4213 121.020013) (xy 358.4213 121.232587) + (xy 358.430251 121.2891) (xy 358.453611 121.436594) (xy 358.454554 121.442543) (xy 358.508713 121.609227) + (xy 358.520244 121.644714) (xy 358.616751 121.83412) (xy 358.74169 122.006086) (xy 358.892013 122.156409) + (xy 359.063982 122.28135) (xy 359.072746 122.285816) (xy 359.123542 122.333791) (xy 359.140336 122.401612) + (xy 359.117798 122.467747) (xy 359.072746 122.506784) (xy 359.063982 122.511249) (xy 358.892013 122.63619) + (xy 358.74169 122.786513) (xy 358.616751 122.958479) (xy 358.520244 123.147885) (xy 358.520243 123.147887) + (xy 358.520243 123.147888) (xy 358.519062 123.151522) (xy 358.454553 123.35006) (xy 358.4213 123.560013) + (xy 358.4213 123.772586) (xy 358.452768 123.971272) (xy 358.454554 123.982543) (xy 358.511095 124.156558) + (xy 358.520244 124.184714) (xy 358.616751 124.37412) (xy 358.74169 124.546086) (xy 358.855618 124.660014) + (xy 358.889103 124.721337) (xy 358.884119 124.791029) (xy 358.842247 124.846962) (xy 358.811271 124.863877) + (xy 358.679712 124.912946) (xy 358.679706 124.912949) (xy 358.564612 124.999109) (xy 358.564609 124.999112) + (xy 358.478449 125.114206) (xy 358.478445 125.114213) (xy 358.428203 125.24892) (xy 358.428201 125.248927) + (xy 358.4218 125.308455) (xy 358.4218 125.9563) (xy 359.338788 125.9563) (xy 359.305875 126.013307) + (xy 359.2718 126.140474) (xy 359.2718 126.272126) (xy 359.305875 126.399293) (xy 359.338788 126.4563) + (xy 358.4218 126.4563) (xy 358.4218 127.104144) (xy 358.428201 127.163672) (xy 358.428203 127.163679) + (xy 358.478445 127.298386) (xy 358.478449 127.298393) (xy 358.564609 127.413487) (xy 358.564612 127.41349) + (xy 358.679706 127.49965) (xy 358.679713 127.499654) (xy 358.81442 127.549896) (xy 358.814427 127.549898) + (xy 358.873955 127.556299) (xy 358.873972 127.5563) (xy 359.5218 127.5563) (xy 359.5218 126.639312) + (xy 359.578807 126.672225) (xy 359.705974 126.7063) (xy 359.837626 126.7063) (xy 359.964793 126.672225) + (xy 360.0218 126.639312) (xy 360.0218 127.5563) (xy 360.669628 127.5563) (xy 360.669644 127.556299) + (xy 360.729172 127.549898) (xy 360.729179 127.549896) (xy 360.863886 127.499654) (xy 360.863893 127.49965) + (xy 360.978987 127.41349) (xy 360.97899 127.413487) (xy 361.06515 127.298393) (xy 361.065154 127.298386) + (xy 361.115396 127.163679) (xy 361.115398 127.163672) (xy 361.121799 127.104144) (xy 361.1218 127.104127) + (xy 361.1218 126.4563) (xy 360.204812 126.4563) (xy 360.237725 126.399293) (xy 360.2718 126.272126) + (xy 360.2718 126.140474) (xy 360.237725 126.013307) (xy 360.204812 125.9563) (xy 361.1218 125.9563) + (xy 361.1218 125.308472) (xy 361.121799 125.308455) (xy 361.115398 125.248927) (xy 361.115396 125.24892) + (xy 361.065154 125.114213) (xy 361.06515 125.114206) (xy 360.97899 124.999112) (xy 360.978987 124.999109) + (xy 360.863893 124.912949) (xy 360.863888 124.912946) (xy 360.732328 124.863877) (xy 360.676395 124.822005) + (xy 360.651978 124.756541) (xy 360.66683 124.688268) (xy 360.687975 124.66002) (xy 360.801904 124.546092) + (xy 360.926851 124.374116) (xy 361.023357 124.184712) (xy 361.089046 123.982543) (xy 361.1223 123.772587) + (xy 361.1223 123.560013) (xy 361.089046 123.350057) (xy 361.023357 123.147888) (xy 360.926851 122.958484) + (xy 360.926849 122.958481) (xy 360.926848 122.958479) (xy 360.801909 122.786513) (xy 360.651586 122.63619) + (xy 360.47962 122.511251) (xy 360.478915 122.510891) (xy 360.470854 122.506785) (xy 360.420059 122.458812) + (xy 360.403263 122.390992) (xy 360.425799 122.324856) (xy 360.470854 122.285815) (xy 360.479616 122.281351) + (xy 360.560618 122.2225) (xy 360.651586 122.156409) (xy 360.651588 122.156406) (xy 360.651592 122.156404) + (xy 360.801904 122.006092) (xy 360.801906 122.006088) (xy 360.801909 122.006086) (xy 360.918047 121.846234) + (xy 360.926851 121.834116) (xy 361.023357 121.644712) (xy 361.089046 121.442543) (xy 361.1223 121.232587) + (xy 361.1223 121.020013) (xy 361.089046 120.810057) (xy 361.023357 120.607888) (xy 360.926851 120.418484) + (xy 360.926849 120.418481) (xy 360.926848 120.418479) (xy 360.801909 120.246513) (xy 360.651586 120.09619) + (xy 360.47962 119.971251) (xy 360.478915 119.970891) (xy 360.470854 119.966785) (xy 360.420059 119.918812) + (xy 360.403263 119.850992) (xy 360.425799 119.784856) (xy 360.470854 119.745815) (xy 360.479616 119.741351) + (xy 360.533382 119.702288) (xy 360.651586 119.616409) (xy 360.651588 119.616406) (xy 360.651592 119.616404) + (xy 360.801904 119.466092) (xy 360.801906 119.466088) (xy 360.801909 119.466086) (xy 360.926848 119.29412) + (xy 360.926847 119.29412) (xy 360.926851 119.294116) (xy 361.023357 119.104712) (xy 361.089046 118.902543) + (xy 361.1223 118.692587) (xy 361.1223 118.480013) (xy 361.089046 118.270057) (xy 361.023357 118.067888) + (xy 360.926851 117.878484) (xy 360.926849 117.878481) (xy 360.926848 117.878479) (xy 360.801909 117.706513) + (xy 360.651586 117.55619) (xy 360.47962 117.431251) (xy 360.290214 117.334744) (xy 360.290213 117.334743) + (xy 360.290212 117.334743) (xy 360.088043 117.269054) (xy 360.088041 117.269053) (xy 360.08804 117.269053) + (xy 359.926757 117.243508) (xy 359.878087 117.2358) (xy 359.665513 117.2358) (xy 359.616842 117.243508) + (xy 359.45556 117.269053) (xy 359.253385 117.334744) (xy 359.063979 117.431251) (xy 358.892013 117.55619) + (xy 358.74169 117.706513) (xy 358.616751 117.878479) (xy 358.520244 118.067885) (xy 358.454553 118.27006) + (xy 358.4213 118.480013) (xy 348.530436 118.480013) (xy 348.597821 118.428306) (xy 348.664993 118.376765) + (xy 348.69276 118.355457) (xy 348.719973 118.334577) (xy 348.923377 118.131173) (xy 349.098491 117.902959) + (xy 349.24232 117.653841) (xy 349.352402 117.38808) (xy 349.426853 117.110225) (xy 349.4644 116.825029) + (xy 349.4644 116.59655) (xy 351.2745 116.59655) (xy 351.2745 116.765849) (xy 351.300981 116.933047) + (xy 351.353296 117.094053) (xy 351.430152 117.244888) (xy 351.529648 117.381834) (xy 351.529652 117.381839) + (xy 351.64936 117.501547) (xy 351.649365 117.501551) (xy 351.768817 117.588337) (xy 351.786315 117.60105) + (xy 351.882425 117.65002) (xy 351.937146 117.677903) (xy 351.937148 117.677903) (xy 351.937151 117.677905) + (xy 352.02345 117.705945) (xy 352.098152 117.730218) (xy 352.265351 117.7567) (xy 352.265356 117.7567) + (xy 352.434649 117.7567) (xy 352.601847 117.730218) (xy 352.762849 117.677905) (xy 352.913685 117.60105) + (xy 353.050641 117.501546) (xy 353.170346 117.381841) (xy 353.26985 117.244885) (xy 353.346705 117.094049) + (xy 353.399018 116.933047) (xy 353.416125 116.825038) (xy 353.4255 116.765849) (xy 353.4255 116.59655) + (xy 353.399018 116.429352) (xy 353.354296 116.291713) (xy 353.346705 116.268351) (xy 353.346703 116.268348) + (xy 353.346703 116.268346) (xy 353.302676 116.18194) (xy 353.26985 116.117515) (xy 353.238281 116.074064) + (xy 353.170351 115.980565) (xy 353.170347 115.98056) (xy 353.050639 115.860852) (xy 353.050634 115.860848) + (xy 352.913688 115.761352) (xy 352.913687 115.761351) (xy 352.913685 115.76135) (xy 352.859831 115.73391) + (xy 352.762853 115.684496) (xy 352.601847 115.632181) (xy 352.434649 115.6057) (xy 352.434644 115.6057) + (xy 352.265356 115.6057) (xy 352.265351 115.6057) (xy 352.098152 115.632181) (xy 351.937146 115.684496) + (xy 351.786311 115.761352) (xy 351.649365 115.860848) (xy 351.64936 115.860852) (xy 351.529652 115.98056) + (xy 351.529648 115.980565) (xy 351.430152 116.117511) (xy 351.353296 116.268346) (xy 351.300981 116.429352) + (xy 351.2745 116.59655) (xy 349.4644 116.59655) (xy 349.4644 116.537371) (xy 349.426853 116.252175) + (xy 349.352402 115.97432) (xy 349.24232 115.708559) (xy 349.242318 115.708556) (xy 349.242316 115.708551) + (xy 349.098495 115.459448) (xy 349.098491 115.459441) (xy 348.994569 115.324007) (xy 348.923378 115.231228) + (xy 348.923372 115.231221) (xy 348.719978 115.027827) (xy 348.719971 115.027821) (xy 348.491767 114.852715) + (xy 348.491765 114.852713) (xy 348.491759 114.852709) (xy 348.491754 114.852706) (xy 348.491751 114.852704) + (xy 348.242648 114.708883) (xy 348.242631 114.708875) (xy 347.976878 114.598797) (xy 347.699023 114.524346) + (xy 347.413838 114.486801) (xy 347.413835 114.4868) (xy 347.413829 114.4868) (xy 347.126171 114.4868) + (xy 347.126165 114.4868) (xy 347.126161 114.486801) (xy 346.840976 114.524346) (xy 346.563121 114.598797) + (xy 346.297368 114.708875) (xy 346.297351 114.708883) (xy 346.048248 114.852704) (xy 346.048232 114.852715) + (xy 345.820028 115.027821) (xy 345.820021 115.027827) (xy 345.616627 115.231221) (xy 345.54543 115.324007) + (xy 345.489001 115.365209) (xy 345.419255 115.369364) (xy 345.358335 115.335151) (xy 345.325583 115.273434) + (xy 345.331396 115.203807) (xy 345.339661 115.186531) (xy 345.392863 115.094383) (xy 345.500742 114.833939) + (xy 345.573704 114.561642) (xy 345.6105 114.282151) (xy 345.6105 114.000249) (xy 345.573704 113.720758) + (xy 345.500742 113.448461) (xy 345.392863 113.188017) (xy 345.392861 113.188014) (xy 345.392859 113.188009) + (xy 345.251916 112.94389) (xy 345.251912 112.943883) (xy 345.0803 112.720235) (xy 345.080298 112.720233) + (xy 345.080295 112.720229) (xy 344.88097 112.520904) (xy 344.796889 112.456386) (xy 344.657317 112.349288) + (xy 344.657311 112.349284) (xy 344.657309 112.349283) (xy 344.41319 112.20834) (xy 344.413179 112.208335) + (xy 344.152743 112.100459) (xy 343.880439 112.027495) (xy 343.600958 111.9907) (xy 343.600951 111.9907) + (xy 343.319049 111.9907) (xy 343.319041 111.9907) (xy 343.03956 112.027495) (xy 342.767256 112.100459) + (xy 342.50682 112.208335) (xy 342.506809 112.20834) (xy 342.262692 112.349281) (xy 342.262683 112.349288) + (xy 342.242106 112.365076) (xy 342.176938 112.39027) (xy 342.166622 112.3907) (xy 338.834998 112.3907) + (xy 338.834981 112.390701) (xy 338.732203 112.4012) (xy 338.7322 112.401201) (xy 338.565668 112.456385) + (xy 338.565663 112.456387) (xy 338.416342 112.548489) (xy 338.292289 112.672542) (xy 338.200187 112.821863) + (xy 338.200186 112.821866) (xy 338.145001 112.988403) (xy 338.145001 112.988404) (xy 338.145 112.988404) + (xy 338.1345 113.091183) (xy 338.1345 115.191201) (xy 338.134501 115.191218) (xy 338.145 115.293996) + (xy 338.145001 115.293999) (xy 338.154945 115.324007) (xy 338.200186 115.460534) (xy 338.292288 115.609856) + (xy 338.416344 115.733912) (xy 338.565666 115.826014) (xy 338.732203 115.881199) (xy 338.834991 115.8917) + (xy 340.762118 115.891699) (xy 340.762127 115.8917) (xy 341.190851 115.891699) (xy 341.257889 115.911383) + (xy 341.303644 115.964187) (xy 341.313588 116.033346) (xy 341.291169 116.088583) (xy 341.270151 116.117511) + (xy 341.193296 116.268346) (xy 341.140981 116.429352) (xy 341.1145 116.59655) (xy 341.1145 116.765849) + (xy 341.140981 116.933047) (xy 341.193296 117.094053) (xy 341.270152 117.244888) (xy 341.369648 117.381834) + (xy 341.369652 117.381839) (xy 341.48936 117.501547) (xy 341.489365 117.501551) (xy 341.608817 117.588337) + (xy 341.626315 117.60105) (xy 341.722425 117.65002) (xy 341.777146 117.677903) (xy 341.777148 117.677903) + (xy 341.777151 117.677905) (xy 341.86345 117.705945) (xy 341.938152 117.730218) (xy 342.105351 117.7567) + (xy 342.105356 117.7567) (xy 342.274649 117.7567) (xy 342.441847 117.730218) (xy 342.602849 117.677905) + (xy 342.753685 117.60105) (xy 342.890641 117.501546) (xy 343.010346 117.381841) (xy 343.10985 117.244885) + (xy 343.186705 117.094049) (xy 343.239018 116.933047) (xy 343.256125 116.825038) (xy 343.2655 116.765849) + (xy 343.2655 116.59655) (xy 343.239928 116.435098) (xy 343.248882 116.365805) (xy 343.293879 116.312353) + (xy 343.36063 116.291713) (xy 343.362401 116.2917) (xy 343.600944 116.2917) (xy 343.600951 116.2917) + (xy 343.880442 116.254904) (xy 344.152739 116.181942) (xy 344.413183 116.074063) (xy 344.657317 115.933112) + (xy 344.880965 115.7615) (xy 345.0803 115.562165) (xy 345.147992 115.473946) (xy 345.20442 115.432744) + (xy 345.274166 115.428589) (xy 345.335086 115.462801) (xy 345.367839 115.524518) (xy 345.362026 115.594146) + (xy 345.353755 115.611433) (xy 345.297683 115.708551) (xy 345.297675 115.708568) (xy 345.187597 115.974321) + (xy 345.113146 116.252176) (xy 345.075601 116.537361) (xy 345.0756 116.537377) (xy 345.0756 116.825022) + (xy 345.075601 116.825038) (xy 345.113146 117.110223) (xy 345.187597 117.388078) (xy 345.297675 117.653831) + (xy 345.297683 117.653848) (xy 345.441504 117.902951) (xy 345.441515 117.902967) (xy 345.616621 118.131171) + (xy 345.616627 118.131178) (xy 345.820021 118.334572) (xy 345.820027 118.334577) (xy 346.048241 118.509691) + (xy 346.048248 118.509695) (xy 346.297351 118.653516) (xy 346.297367 118.653524) (xy 346.431152 118.708939) + (xy 346.485556 118.75278) (xy 346.507621 118.819074) (xy 346.490342 118.886773) (xy 346.439205 118.934384) + (xy 346.3837 118.9475) (xy 334.046846 118.9475) (xy 333.963229 118.982136) (xy 328.934186 124.011181) + (xy 328.872863 124.044666) (xy 328.846505 124.0475) (xy 322.046846 124.0475) (xy 321.979807 124.027815) + (xy 321.959165 124.011181) (xy 321.352338 123.404354) (xy 321.318853 123.343031) (xy 321.323837 123.273339) + (xy 321.365709 123.217406) (xy 321.431173 123.192989) (xy 321.499446 123.207841) (xy 321.51624 123.219895) + (xy 321.516652 123.219358) (xy 321.521126 123.22279) (xy 321.521132 123.222795) (xy 321.675525 123.320297) + (xy 321.785201 123.364262) (xy 321.845014 123.388239) (xy 321.845015 123.388239) (xy 321.845017 123.38824) + (xy 322.024008 123.424379) (xy 322.024002 123.424379) (xy 322.040322 123.424659) (xy 322.206584 123.42752) + (xy 322.386712 123.397558) (xy 322.46248 123.37017) (xy 322.558436 123.335485) (xy 322.558437 123.335483) + (xy 322.55844 123.335483) (xy 322.573475 123.32672) (xy 322.580159 123.322835) (xy 322.58045 123.322757) + (xy 322.608333 123.30646) (xy 322.608451 123.306392) (xy 322.611668 123.305601) (xy 322.670762 123.289599) + (xy 324.151892 123.289599) (xy 324.152014 123.289606) (xy 324.160105 123.289605) (xy 324.160108 123.289606) + (xy 324.192242 123.289602) (xy 324.254804 123.306534) (xy 324.28263 123.322791) (xy 324.282632 123.322791) + (xy 324.28878 123.326383) (xy 324.290435 123.327208) (xy 324.304578 123.33545) (xy 324.4763 123.397521) + (xy 324.656421 123.427482) (xy 324.836098 123.42439) (xy 324.838991 123.424341) (xy 325.017966 123.388205) + (xy 325.017969 123.388203) (xy 325.017974 123.388203) (xy 325.18746 123.320262) (xy 325.341846 123.222763) + (xy 325.351341 123.214001) (xy 325.47603 123.09893) (xy 325.476032 123.098928) (xy 325.477914 123.096419) + (xy 325.551196 122.998702) (xy 325.607165 122.95688) (xy 325.650398 122.949099) (xy 325.9065 122.949099) + (xy 326.4065 122.949099) (xy 326.462432 122.949099) (xy 326.546424 122.93855) (xy 326.679257 122.883529) + (xy 326.746104 122.8316) (xy 326.746111 122.831594) (xy 327.213994 122.363712) (xy 327.213999 122.363706) + (xy 327.265927 122.29686) (xy 327.269142 122.2891) (xy 326.4065 122.2891) (xy 326.4065 122.949099) + (xy 325.9065 122.949099) (xy 325.9065 122.1631) (xy 325.926185 122.096061) (xy 325.978989 122.050306) + (xy 326.0305 122.0391) (xy 326.1565 122.0391) (xy 326.1565 121.9131) (xy 326.176185 121.846061) + (xy 326.228989 121.800306) (xy 326.2805 121.7891) (xy 327.3315 121.7891) (xy 327.3315 121.672953) + (xy 327.31652 121.559169) (xy 327.316518 121.559164) (xy 327.257878 121.417593) (xy 327.257875 121.417588) + (xy 327.21752 121.364996) (xy 327.192326 121.299827) (xy 327.206364 121.231382) (xy 327.217521 121.214023) + (xy 327.258312 121.160863) (xy 327.280883 121.106372) (xy 327.317007 121.019163) (xy 327.332 120.905277) + (xy 327.331999 120.172924) (xy 327.330297 120.159997) (xy 327.317008 120.059045) (xy 327.317007 120.059037) + (xy 327.258312 119.917337) (xy 327.164944 119.795656) (xy 327.043263 119.702288) (xy 327.043262 119.702287) + (xy 326.894055 119.640483) (xy 326.895196 119.637726) (xy 326.847709 119.608752) (xy 326.817208 119.545891) + (xy 326.8155 119.525383) (xy 326.8155 119.516155) (xy 326.815499 119.516153) (xy 326.810577 119.491411) + (xy 326.784737 119.361503) (xy 326.782211 119.355404) (xy 326.724397 119.215827) (xy 326.72439 119.215814) + (xy 326.636789 119.084711) (xy 326.636786 119.084707) (xy 326.525292 118.973213) (xy 326.525288 118.97321) + (xy 326.394185 118.885609) (xy 326.394172 118.885602) (xy 326.248501 118.825264) (xy 326.248489 118.825261) + (xy 326.093845 118.7945) (xy 326.093842 118.7945) (xy 325.936158 118.7945) (xy 325.936155 118.7945) + (xy 325.78151 118.825261) (xy 325.781498 118.825264) (xy 325.635827 118.885602) (xy 325.635814 118.885609) + (xy 325.504711 118.97321) (xy 325.504707 118.973213) (xy 325.393213 119.084707) (xy 325.314352 119.20273) + (xy 325.260739 119.247534) (xy 325.191414 119.256241) (xy 325.165112 119.248935) (xy 325.017987 119.189958) + (xy 325.017977 119.189956) (xy 324.838992 119.153818) (xy 324.838999 119.153818) (xy 324.667294 119.150865) + (xy 324.656418 119.150678) (xy 324.656417 119.150678) (xy 324.656414 119.150678) (xy 324.476297 119.180638) + (xy 324.476284 119.180641) (xy 324.304563 119.242713) (xy 324.290048 119.25117) (xy 324.289963 119.251219) + (xy 324.282876 119.25534) (xy 324.28263 119.255408) (xy 324.254838 119.271644) (xy 324.25459 119.271789) + (xy 324.251863 119.272459) (xy 324.192246 119.288596) (xy 324.151901 119.288593) (xy 324.151797 119.2886) + (xy 322.711096 119.2886) (xy 322.702914 119.288598) (xy 322.702892 119.288593) (xy 322.672965 119.288595) + (xy 322.670728 119.288595) (xy 322.670446 119.288512) (xy 322.608193 119.271662) (xy 322.580371 119.255408) + (xy 322.574305 119.251864) (xy 322.572607 119.251017) (xy 322.565257 119.246734) (xy 322.558421 119.24275) + (xy 322.386697 119.180678) (xy 322.386691 119.180677) (xy 322.206581 119.150719) (xy 322.206578 119.150719) + (xy 322.198039 119.150865) (xy 322.024007 119.153859) (xy 321.845034 119.189994) (xy 321.845023 119.189997) + (xy 321.675542 119.257937) (xy 321.675541 119.257937) (xy 321.521161 119.355432) (xy 321.521158 119.355434) + (xy 321.430843 119.438782) (xy 321.386969 119.479272) (xy 321.312182 119.578996) (xy 321.312181 119.578997) + (xy 321.256211 119.620819) (xy 321.212978 119.6286) (xy 320.075321 119.6286) (xy 319.961445 119.643591) + (xy 319.961437 119.643593) (xy 319.819737 119.702287) (xy 319.698056 119.795656) (xy 319.604687 119.917337) + (xy 319.545993 120.059036) (xy 319.545992 120.059038) (xy 319.531 120.172922) (xy 303.519499 120.172922) + (xy 303.517797 120.159997) (xy 303.504508 120.059045) (xy 303.504507 120.059037) (xy 303.445812 119.917337) + (xy 303.352444 119.795656) (xy 303.230763 119.702288) (xy 303.230762 119.702287) (xy 303.089063 119.643593) + (xy 303.089061 119.643592) (xy 302.975178 119.6286) (xy 302.975177 119.6286) (xy 302.327946 119.6286) + (xy 302.260907 119.608915) (xy 302.240265 119.592281) (xy 301.530119 118.882136) (xy 301.530118 118.882135) + (xy 301.446503 118.8475) (xy 300.744432 118.8475) (xy 300.677393 118.827815) (xy 300.631638 118.775011) + (xy 300.621694 118.705853) (xy 300.650719 118.642297) (xy 300.682432 118.616113) (xy 300.738683 118.583635) + (xy 300.866759 118.509691) (xy 301.094973 118.334577) (xy 301.298377 118.131173) (xy 301.473491 117.902959) + (xy 301.61732 117.653841) (xy 301.727402 117.38808) (xy 301.801853 117.110225) (xy 301.8394 116.825029) + (xy 301.8394 116.59655) (xy 303.6495 116.59655) (xy 303.6495 116.765849) (xy 303.675981 116.933047) + (xy 303.728296 117.094053) (xy 303.805152 117.244888) (xy 303.904648 117.381834) (xy 303.904652 117.381839) + (xy 304.02436 117.501547) (xy 304.024365 117.501551) (xy 304.143817 117.588337) (xy 304.161315 117.60105) + (xy 304.257425 117.65002) (xy 304.312146 117.677903) (xy 304.312148 117.677903) (xy 304.312151 117.677905) + (xy 304.39845 117.705945) (xy 304.473152 117.730218) (xy 304.640351 117.7567) (xy 304.640356 117.7567) + (xy 304.809649 117.7567) (xy 304.976847 117.730218) (xy 305.137849 117.677905) (xy 305.288685 117.60105) + (xy 305.425641 117.501546) (xy 305.545346 117.381841) (xy 305.64485 117.244885) (xy 305.721705 117.094049) + (xy 305.774018 116.933047) (xy 305.791125 116.825038) (xy 305.8005 116.765849) (xy 305.8005 116.59655) + (xy 305.774018 116.429352) (xy 305.729296 116.291713) (xy 305.721705 116.268351) (xy 305.721703 116.268348) + (xy 305.721703 116.268346) (xy 305.677676 116.18194) (xy 305.64485 116.117515) (xy 305.613281 116.074064) + (xy 305.545351 115.980565) (xy 305.545347 115.98056) (xy 305.425639 115.860852) (xy 305.425634 115.860848) + (xy 305.288688 115.761352) (xy 305.288687 115.761351) (xy 305.288685 115.76135) (xy 305.234831 115.73391) + (xy 305.137853 115.684496) (xy 304.976847 115.632181) (xy 304.809649 115.6057) (xy 304.809644 115.6057) + (xy 304.640356 115.6057) (xy 304.640351 115.6057) (xy 304.473152 115.632181) (xy 304.312146 115.684496) + (xy 304.161311 115.761352) (xy 304.024365 115.860848) (xy 304.02436 115.860852) (xy 303.904652 115.98056) + (xy 303.904648 115.980565) (xy 303.805152 116.117511) (xy 303.728296 116.268346) (xy 303.675981 116.429352) + (xy 303.6495 116.59655) (xy 301.8394 116.59655) (xy 301.8394 116.537371) (xy 301.801853 116.252175) + (xy 301.727402 115.97432) (xy 301.61732 115.708559) (xy 301.617318 115.708556) (xy 301.617316 115.708551) + (xy 301.473495 115.459448) (xy 301.473491 115.459441) (xy 301.369569 115.324007) (xy 301.298378 115.231228) + (xy 301.298372 115.231221) (xy 301.094978 115.027827) (xy 301.094971 115.027821) (xy 300.866767 114.852715) + (xy 300.866765 114.852713) (xy 300.866759 114.852709) (xy 300.866754 114.852706) (xy 300.866751 114.852704) + (xy 300.617648 114.708883) (xy 300.617631 114.708875) (xy 300.351878 114.598797) (xy 300.074023 114.524346) + (xy 299.788838 114.486801) (xy 299.788835 114.4868) (xy 299.788829 114.4868) (xy 299.501171 114.4868) + (xy 299.501165 114.4868) (xy 299.501161 114.486801) (xy 299.215976 114.524346) (xy 298.938121 114.598797) + (xy 298.672368 114.708875) (xy 298.672351 114.708883) (xy 298.423248 114.852704) (xy 298.423232 114.852715) + (xy 298.195028 115.027821) (xy 298.195021 115.027827) (xy 297.991627 115.231221) (xy 297.92043 115.324007) + (xy 297.864001 115.365209) (xy 297.794255 115.369364) (xy 297.733335 115.335151) (xy 297.700583 115.273434) + (xy 297.706396 115.203807) (xy 297.714661 115.186531) (xy 297.767863 115.094383) (xy 297.875742 114.833939) + (xy 297.948704 114.561642) (xy 297.9855 114.282151) (xy 297.9855 114.000249) (xy 297.948704 113.720758) + (xy 297.875742 113.448461) (xy 297.767863 113.188017) (xy 297.767861 113.188014) (xy 297.767859 113.188009) + (xy 297.626916 112.94389) (xy 297.626912 112.943883) (xy 297.4553 112.720235) (xy 297.455298 112.720233) + (xy 297.455295 112.720229) (xy 297.25597 112.520904) (xy 297.171889 112.456386) (xy 297.032317 112.349288) + (xy 297.032311 112.349284) (xy 297.032309 112.349283) (xy 296.78819 112.20834) (xy 296.788179 112.208335) + (xy 296.527743 112.100459) (xy 296.255439 112.027495) (xy 295.975958 111.9907) (xy 295.975951 111.9907) + (xy 295.694049 111.9907) (xy 295.694041 111.9907) (xy 295.41456 112.027495) (xy 295.142256 112.100459) + (xy 294.88182 112.208335) (xy 294.881809 112.20834) (xy 294.637692 112.349281) (xy 294.637683 112.349288) + (xy 294.617106 112.365076) (xy 294.551938 112.39027) (xy 294.541622 112.3907) (xy 291.209998 112.3907) + (xy 291.209981 112.390701) (xy 291.107203 112.4012) (xy 291.1072 112.401201) (xy 290.940668 112.456385) + (xy 290.940663 112.456387) (xy 290.791342 112.548489) (xy 290.667289 112.672542) (xy 290.575187 112.821863) + (xy 290.575186 112.821866) (xy 290.520001 112.988403) (xy 290.520001 112.988404) (xy 290.52 112.988404) + (xy 290.5095 113.091183) (xy 290.5095 115.191201) (xy 290.509501 115.191218) (xy 290.52 115.293996) + (xy 290.520001 115.293999) (xy 290.529945 115.324007) (xy 290.575186 115.460534) (xy 290.667288 115.609856) + (xy 290.791344 115.733912) (xy 290.940666 115.826014) (xy 291.107203 115.881199) (xy 291.209991 115.8917) + (xy 293.137118 115.891699) (xy 293.137127 115.8917) (xy 293.565851 115.891699) (xy 293.632889 115.911383) + (xy 293.678644 115.964187) (xy 293.688588 116.033346) (xy 293.666169 116.088583) (xy 293.645151 116.117511) + (xy 293.568296 116.268346) (xy 293.515981 116.429352) (xy 293.4895 116.59655) (xy 293.4895 116.765849) + (xy 293.515981 116.933047) (xy 293.568296 117.094053) (xy 293.645152 117.244888) (xy 293.744648 117.381834) + (xy 293.744652 117.381839) (xy 293.86436 117.501547) (xy 293.864365 117.501551) (xy 293.983817 117.588337) + (xy 294.001315 117.60105) (xy 294.097425 117.65002) (xy 294.152146 117.677903) (xy 294.152148 117.677903) + (xy 294.152151 117.677905) (xy 294.23845 117.705945) (xy 294.313152 117.730218) (xy 294.480351 117.7567) + (xy 294.480356 117.7567) (xy 294.649649 117.7567) (xy 294.816847 117.730218) (xy 294.977849 117.677905) + (xy 295.128685 117.60105) (xy 295.265641 117.501546) (xy 295.385346 117.381841) (xy 295.48485 117.244885) + (xy 295.561705 117.094049) (xy 295.614018 116.933047) (xy 295.631125 116.825038) (xy 295.6405 116.765849) + (xy 295.6405 116.59655) (xy 295.614928 116.435098) (xy 295.623882 116.365805) (xy 295.668879 116.312353) + (xy 295.73563 116.291713) (xy 295.737401 116.2917) (xy 295.975944 116.2917) (xy 295.975951 116.2917) + (xy 296.255442 116.254904) (xy 296.527739 116.181942) (xy 296.788183 116.074063) (xy 297.032317 115.933112) + (xy 297.255965 115.7615) (xy 297.4553 115.562165) (xy 297.522992 115.473946) (xy 297.57942 115.432744) + (xy 297.649166 115.428589) (xy 297.710086 115.462801) (xy 297.742839 115.524518) (xy 297.737026 115.594146) + (xy 297.728755 115.611433) (xy 297.672683 115.708551) (xy 297.672675 115.708568) (xy 297.562597 115.974321) + (xy 297.488146 116.252176) (xy 297.450601 116.537361) (xy 297.4506 116.537377) (xy 297.4506 116.825022) + (xy 297.450601 116.825038) (xy 297.488146 117.110223) (xy 297.562597 117.388078) (xy 297.672675 117.653831) + (xy 297.672683 117.653848) (xy 297.816504 117.902951) (xy 297.816515 117.902967) (xy 297.991621 118.131171) + (xy 297.991627 118.131178) (xy 298.195021 118.334572) (xy 298.195027 118.334577) (xy 298.423241 118.509691) + (xy 298.423248 118.509695) (xy 298.607568 118.616113) (xy 298.655784 118.66668) (xy 298.669006 118.735287) + (xy 298.643038 118.800152) (xy 298.586124 118.84068) (xy 298.545568 118.8475) (xy 288.082653 118.8475) + (xy 287.992147 118.8475) (xy 287.992145 118.8475) (xy 287.992143 118.847501) (xy 287.908534 118.882131) + (xy 287.908532 118.882133) (xy 284.537886 122.252781) (xy 284.476563 122.286266) (xy 284.450205 122.2891) + (xy 283.544 122.2891) (xy 283.544 122.949099) (xy 283.544745 122.949844) (xy 283.609245 122.968784) + (xy 283.655 123.021588) (xy 283.664944 123.090746) (xy 283.635919 123.154302) (xy 283.629887 123.16078) + (xy 283.129486 123.661181) (xy 283.068163 123.694666) (xy 283.041805 123.6975) (xy 278.796846 123.6975) + (xy 278.729807 123.677815) (xy 278.709165 123.661181) (xy 278.209264 123.16128) (xy 278.175779 123.099957) + (xy 278.180763 123.030265) (xy 278.222635 122.974332) (xy 278.288099 122.949915) (xy 278.296945 122.949599) + (xy 278.350429 122.949599) (xy 278.417468 122.969284) (xy 278.449632 122.999203) (xy 278.524438 123.098952) + (xy 278.524439 123.098953) (xy 278.52444 123.098954) (xy 278.658632 123.222795) (xy 278.813025 123.320297) + (xy 278.922701 123.364262) (xy 278.982514 123.388239) (xy 278.982515 123.388239) (xy 278.982517 123.38824) + (xy 279.161508 123.424379) (xy 279.161502 123.424379) (xy 279.177822 123.424659) (xy 279.344084 123.42752) + (xy 279.524212 123.397558) (xy 279.59998 123.37017) (xy 279.695936 123.335485) (xy 279.695937 123.335483) + (xy 279.69594 123.335483) (xy 279.710975 123.32672) (xy 279.717659 123.322835) (xy 279.71795 123.322757) + (xy 279.745833 123.30646) (xy 279.745951 123.306392) (xy 279.749168 123.305601) (xy 279.808262 123.289599) + (xy 281.289392 123.289599) (xy 281.289514 123.289606) (xy 281.297605 123.289605) (xy 281.297608 123.289606) + (xy 281.329742 123.289602) (xy 281.392304 123.306534) (xy 281.42013 123.322791) (xy 281.420132 123.322791) + (xy 281.42628 123.326383) (xy 281.427935 123.327208) (xy 281.442078 123.33545) (xy 281.6138 123.397521) + (xy 281.793921 123.427482) (xy 281.973598 123.42439) (xy 281.976491 123.424341) (xy 282.155466 123.388205) + (xy 282.155469 123.388203) (xy 282.155474 123.388203) (xy 282.32496 123.320262) (xy 282.479346 123.222763) + (xy 282.488841 123.214001) (xy 282.61353 123.09893) (xy 282.613532 123.098928) (xy 282.615414 123.096419) + (xy 282.688696 122.998702) (xy 282.744665 122.95688) (xy 282.787898 122.949099) (xy 283.044 122.949099) + (xy 283.044 122.1631) (xy 283.063685 122.096061) (xy 283.116489 122.050306) (xy 283.168 122.0391) + (xy 283.294 122.0391) (xy 283.294 121.9131) (xy 283.313685 121.846061) (xy 283.366489 121.800306) + (xy 283.418 121.7891) (xy 284.469 121.7891) (xy 284.469 121.672953) (xy 284.45402 121.559169) (xy 284.454018 121.559164) + (xy 284.395378 121.417593) (xy 284.395375 121.417588) (xy 284.35502 121.364996) (xy 284.329826 121.299827) + (xy 284.343864 121.231382) (xy 284.355021 121.214023) (xy 284.395812 121.160863) (xy 284.418383 121.106372) + (xy 284.454507 121.019163) (xy 284.4695 120.905277) (xy 284.469499 120.172924) (xy 284.467797 120.159997) + (xy 284.454508 120.059045) (xy 284.454507 120.059037) (xy 284.395812 119.917337) (xy 284.302444 119.795656) + (xy 284.180763 119.702288) (xy 284.180762 119.702287) (xy 284.039063 119.643593) (xy 284.039061 119.643592) + (xy 283.953245 119.632295) (xy 283.889348 119.604029) (xy 283.850877 119.545704) (xy 283.846027 119.521507) + (xy 283.8455 119.516164) (xy 283.8455 119.516158) (xy 283.814737 119.361503) (xy 283.812211 119.355404) + (xy 283.754397 119.215827) (xy 283.75439 119.215814) (xy 283.666789 119.084711) (xy 283.666786 119.084707) + (xy 283.555292 118.973213) (xy 283.555288 118.97321) (xy 283.424185 118.885609) (xy 283.424172 118.885602) + (xy 283.278501 118.825264) (xy 283.278489 118.825261) (xy 283.123845 118.7945) (xy 283.123842 118.7945) + (xy 282.966158 118.7945) (xy 282.966155 118.7945) (xy 282.81151 118.825261) (xy 282.811507 118.825262) + (xy 282.811506 118.825262) (xy 282.811503 118.825263) (xy 282.722577 118.862096) (xy 282.711486 118.866691) + (xy 282.642016 118.874159) (xy 282.616583 118.866691) (xy 282.570253 118.8475) (xy 281.694432 118.8475) + (xy 281.627393 118.827815) (xy 281.581638 118.775011) (xy 281.571694 118.705853) (xy 281.600719 118.642297) + (xy 281.632432 118.616113) (xy 281.688683 118.583635) (xy 281.816759 118.509691) (xy 282.044973 118.334577) + (xy 282.248377 118.131173) (xy 282.423491 117.902959) (xy 282.56732 117.653841) (xy 282.677402 117.38808) + (xy 282.751853 117.110225) (xy 282.7894 116.825029) (xy 282.7894 116.59655) (xy 284.5995 116.59655) + (xy 284.5995 116.765849) (xy 284.625981 116.933047) (xy 284.678296 117.094053) (xy 284.755152 117.244888) + (xy 284.854648 117.381834) (xy 284.854652 117.381839) (xy 284.97436 117.501547) (xy 284.974365 117.501551) + (xy 285.093817 117.588337) (xy 285.111315 117.60105) (xy 285.207425 117.65002) (xy 285.262146 117.677903) + (xy 285.262148 117.677903) (xy 285.262151 117.677905) (xy 285.34845 117.705945) (xy 285.423152 117.730218) + (xy 285.590351 117.7567) (xy 285.590356 117.7567) (xy 285.759649 117.7567) (xy 285.926847 117.730218) + (xy 286.087849 117.677905) (xy 286.238685 117.60105) (xy 286.375641 117.501546) (xy 286.495346 117.381841) + (xy 286.59485 117.244885) (xy 286.671705 117.094049) (xy 286.724018 116.933047) (xy 286.741125 116.825038) + (xy 286.7505 116.765849) (xy 286.7505 116.59655) (xy 286.724018 116.429352) (xy 286.679296 116.291713) + (xy 286.671705 116.268351) (xy 286.671703 116.268348) (xy 286.671703 116.268346) (xy 286.627676 116.18194) + (xy 286.59485 116.117515) (xy 286.563281 116.074064) (xy 286.495351 115.980565) (xy 286.495347 115.98056) + (xy 286.375639 115.860852) (xy 286.375634 115.860848) (xy 286.238688 115.761352) (xy 286.238687 115.761351) + (xy 286.238685 115.76135) (xy 286.184831 115.73391) (xy 286.087853 115.684496) (xy 285.926847 115.632181) + (xy 285.759649 115.6057) (xy 285.759644 115.6057) (xy 285.590356 115.6057) (xy 285.590351 115.6057) + (xy 285.423152 115.632181) (xy 285.262146 115.684496) (xy 285.111311 115.761352) (xy 284.974365 115.860848) + (xy 284.97436 115.860852) (xy 284.854652 115.98056) (xy 284.854648 115.980565) (xy 284.755152 116.117511) + (xy 284.678296 116.268346) (xy 284.625981 116.429352) (xy 284.5995 116.59655) (xy 282.7894 116.59655) + (xy 282.7894 116.537371) (xy 282.751853 116.252175) (xy 282.677402 115.97432) (xy 282.56732 115.708559) + (xy 282.567318 115.708556) (xy 282.567316 115.708551) (xy 282.423495 115.459448) (xy 282.423491 115.459441) + (xy 282.319569 115.324007) (xy 282.248378 115.231228) (xy 282.248372 115.231221) (xy 282.044978 115.027827) + (xy 282.044971 115.027821) (xy 281.816767 114.852715) (xy 281.816765 114.852713) (xy 281.816759 114.852709) + (xy 281.816754 114.852706) (xy 281.816751 114.852704) (xy 281.567648 114.708883) (xy 281.567631 114.708875) + (xy 281.301878 114.598797) (xy 281.024023 114.524346) (xy 280.738838 114.486801) (xy 280.738835 114.4868) + (xy 280.738829 114.4868) (xy 280.451171 114.4868) (xy 280.451165 114.4868) (xy 280.451161 114.486801) + (xy 280.165976 114.524346) (xy 279.888121 114.598797) (xy 279.622368 114.708875) (xy 279.622351 114.708883) + (xy 279.373248 114.852704) (xy 279.373232 114.852715) (xy 279.145028 115.027821) (xy 279.145021 115.027827) + (xy 278.941627 115.231221) (xy 278.87043 115.324007) (xy 278.814001 115.365209) (xy 278.744255 115.369364) + (xy 278.683335 115.335151) (xy 278.650583 115.273434) (xy 278.656396 115.203807) (xy 278.664661 115.186531) + (xy 278.717863 115.094383) (xy 278.825742 114.833939) (xy 278.898704 114.561642) (xy 278.9355 114.282151) + (xy 278.9355 114.000249) (xy 278.898704 113.720758) (xy 278.825742 113.448461) (xy 278.717863 113.188017) + (xy 278.717861 113.188014) (xy 278.717859 113.188009) (xy 278.576916 112.94389) (xy 278.576912 112.943883) + (xy 278.4053 112.720235) (xy 278.405298 112.720233) (xy 278.405295 112.720229) (xy 278.20597 112.520904) + (xy 278.121889 112.456386) (xy 277.982317 112.349288) (xy 277.982311 112.349284) (xy 277.982309 112.349283) + (xy 277.73819 112.20834) (xy 277.738179 112.208335) (xy 277.477743 112.100459) (xy 277.205439 112.027495) + (xy 276.925958 111.9907) (xy 276.925951 111.9907) (xy 276.644049 111.9907) (xy 276.644041 111.9907) + (xy 276.36456 112.027495) (xy 276.092256 112.100459) (xy 275.83182 112.208335) (xy 275.831809 112.20834) + (xy 275.587692 112.349281) (xy 275.587683 112.349288) (xy 275.567106 112.365076) (xy 275.501938 112.39027) + (xy 275.491622 112.3907) (xy 272.159998 112.3907) (xy 272.159981 112.390701) (xy 272.057203 112.4012) + (xy 272.0572 112.401201) (xy 271.890668 112.456385) (xy 271.890663 112.456387) (xy 271.741342 112.548489) + (xy 271.617289 112.672542) (xy 271.525187 112.821863) (xy 271.525186 112.821866) (xy 271.470001 112.988403) + (xy 271.470001 112.988404) (xy 271.47 112.988404) (xy 271.4595 113.091183) (xy 271.4595 115.191201) + (xy 271.459501 115.191218) (xy 271.47 115.293996) (xy 271.470001 115.293999) (xy 271.479945 115.324007) + (xy 271.525186 115.460534) (xy 271.617288 115.609856) (xy 271.741344 115.733912) (xy 271.890666 115.826014) + (xy 272.057203 115.881199) (xy 272.159991 115.8917) (xy 274.087118 115.891699) (xy 274.087127 115.8917) + (xy 274.515851 115.891699) (xy 274.582889 115.911383) (xy 274.628644 115.964187) (xy 274.638588 116.033346) + (xy 274.616169 116.088583) (xy 274.595151 116.117511) (xy 274.518296 116.268346) (xy 274.465981 116.429352) + (xy 274.4395 116.59655) (xy 274.4395 116.765849) (xy 274.465981 116.933047) (xy 274.518296 117.094053) + (xy 274.595152 117.244888) (xy 274.694648 117.381834) (xy 274.694652 117.381839) (xy 274.81436 117.501547) + (xy 274.814365 117.501551) (xy 274.933817 117.588337) (xy 274.951315 117.60105) (xy 275.047425 117.65002) + (xy 275.102146 117.677903) (xy 275.102148 117.677903) (xy 275.102151 117.677905) (xy 275.18845 117.705945) + (xy 275.263152 117.730218) (xy 275.430351 117.7567) (xy 275.430356 117.7567) (xy 275.599649 117.7567) + (xy 275.766847 117.730218) (xy 275.927849 117.677905) (xy 276.078685 117.60105) (xy 276.215641 117.501546) + (xy 276.335346 117.381841) (xy 276.43485 117.244885) (xy 276.511705 117.094049) (xy 276.564018 116.933047) + (xy 276.581125 116.825038) (xy 276.5905 116.765849) (xy 276.5905 116.59655) (xy 276.564928 116.435098) + (xy 276.573882 116.365805) (xy 276.618879 116.312353) (xy 276.68563 116.291713) (xy 276.687401 116.2917) + (xy 276.925944 116.2917) (xy 276.925951 116.2917) (xy 277.205442 116.254904) (xy 277.477739 116.181942) + (xy 277.738183 116.074063) (xy 277.982317 115.933112) (xy 278.205965 115.7615) (xy 278.4053 115.562165) + (xy 278.472992 115.473946) (xy 278.52942 115.432744) (xy 278.599166 115.428589) (xy 278.660086 115.462801) + (xy 278.692839 115.524518) (xy 278.687026 115.594146) (xy 278.678755 115.611433) (xy 278.622683 115.708551) + (xy 278.622675 115.708568) (xy 278.512597 115.974321) (xy 278.438146 116.252176) (xy 278.400601 116.537361) + (xy 278.4006 116.537377) (xy 278.4006 116.825022) (xy 278.400601 116.825038) (xy 278.438146 117.110223) + (xy 278.512597 117.388078) (xy 278.622675 117.653831) (xy 278.622683 117.653848) (xy 278.766504 117.902951) + (xy 278.766515 117.902967) (xy 278.941621 118.131171) (xy 278.941627 118.131178) (xy 279.145021 118.334572) + (xy 279.145027 118.334577) (xy 279.373241 118.509691) (xy 279.373248 118.509695) (xy 279.557568 118.616113) + (xy 279.605784 118.66668) (xy 279.619006 118.735287) (xy 279.593038 118.800152) (xy 279.536124 118.84068) + (xy 279.495568 118.8475) (xy 262.644432 118.8475) (xy 262.577393 118.827815) (xy 262.531638 118.775011) + (xy 262.521694 118.705853) (xy 262.550719 118.642297) (xy 262.582432 118.616113) (xy 262.638683 118.583635) + (xy 262.766759 118.509691) (xy 262.994973 118.334577) (xy 263.198377 118.131173) (xy 263.373491 117.902959) + (xy 263.51732 117.653841) (xy 263.627402 117.38808) (xy 263.701853 117.110225) (xy 263.7394 116.825029) + (xy 263.7394 116.59655) (xy 265.5495 116.59655) (xy 265.5495 116.765849) (xy 265.575981 116.933047) + (xy 265.628296 117.094053) (xy 265.705152 117.244888) (xy 265.804648 117.381834) (xy 265.804652 117.381839) + (xy 265.92436 117.501547) (xy 265.924365 117.501551) (xy 266.043817 117.588337) (xy 266.061315 117.60105) + (xy 266.157425 117.65002) (xy 266.212146 117.677903) (xy 266.212148 117.677903) (xy 266.212151 117.677905) + (xy 266.29845 117.705945) (xy 266.373152 117.730218) (xy 266.540351 117.7567) (xy 266.540356 117.7567) + (xy 266.709649 117.7567) (xy 266.876847 117.730218) (xy 267.037849 117.677905) (xy 267.188685 117.60105) + (xy 267.325641 117.501546) (xy 267.445346 117.381841) (xy 267.54485 117.244885) (xy 267.621705 117.094049) + (xy 267.674018 116.933047) (xy 267.691125 116.825038) (xy 267.7005 116.765849) (xy 267.7005 116.59655) + (xy 267.674018 116.429352) (xy 267.629296 116.291713) (xy 267.621705 116.268351) (xy 267.621703 116.268348) + (xy 267.621703 116.268346) (xy 267.577676 116.18194) (xy 267.54485 116.117515) (xy 267.513281 116.074064) + (xy 267.445351 115.980565) (xy 267.445347 115.98056) (xy 267.325639 115.860852) (xy 267.325634 115.860848) + (xy 267.188688 115.761352) (xy 267.188687 115.761351) (xy 267.188685 115.76135) (xy 267.134831 115.73391) + (xy 267.037853 115.684496) (xy 266.876847 115.632181) (xy 266.709649 115.6057) (xy 266.709644 115.6057) + (xy 266.540356 115.6057) (xy 266.540351 115.6057) (xy 266.373152 115.632181) (xy 266.212146 115.684496) + (xy 266.061311 115.761352) (xy 265.924365 115.860848) (xy 265.92436 115.860852) (xy 265.804652 115.98056) + (xy 265.804648 115.980565) (xy 265.705152 116.117511) (xy 265.628296 116.268346) (xy 265.575981 116.429352) + (xy 265.5495 116.59655) (xy 263.7394 116.59655) (xy 263.7394 116.537371) (xy 263.701853 116.252175) + (xy 263.627402 115.97432) (xy 263.51732 115.708559) (xy 263.517318 115.708556) (xy 263.517316 115.708551) + (xy 263.373495 115.459448) (xy 263.373491 115.459441) (xy 263.269569 115.324007) (xy 263.198378 115.231228) + (xy 263.198372 115.231221) (xy 262.994978 115.027827) (xy 262.994971 115.027821) (xy 262.766767 114.852715) + (xy 262.766765 114.852713) (xy 262.766759 114.852709) (xy 262.766754 114.852706) (xy 262.766751 114.852704) + (xy 262.517648 114.708883) (xy 262.517631 114.708875) (xy 262.251878 114.598797) (xy 261.974023 114.524346) + (xy 261.688838 114.486801) (xy 261.688835 114.4868) (xy 261.688829 114.4868) (xy 261.401171 114.4868) + (xy 261.401165 114.4868) (xy 261.401161 114.486801) (xy 261.115976 114.524346) (xy 260.838121 114.598797) + (xy 260.572368 114.708875) (xy 260.572351 114.708883) (xy 260.323248 114.852704) (xy 260.323232 114.852715) + (xy 260.095028 115.027821) (xy 260.095021 115.027827) (xy 259.891627 115.231221) (xy 259.82043 115.324007) + (xy 259.764001 115.365209) (xy 259.694255 115.369364) (xy 259.633335 115.335151) (xy 259.600583 115.273434) + (xy 259.606396 115.203807) (xy 259.614661 115.186531) (xy 259.667863 115.094383) (xy 259.775742 114.833939) + (xy 259.848704 114.561642) (xy 259.8855 114.282151) (xy 259.8855 114.000249) (xy 259.848704 113.720758) + (xy 259.775742 113.448461) (xy 259.667863 113.188017) (xy 259.667861 113.188014) (xy 259.667859 113.188009) + (xy 259.526916 112.94389) (xy 259.526912 112.943883) (xy 259.3553 112.720235) (xy 259.355298 112.720233) + (xy 259.355295 112.720229) (xy 259.15597 112.520904) (xy 259.071889 112.456386) (xy 258.932317 112.349288) + (xy 258.932311 112.349284) (xy 258.932309 112.349283) (xy 258.68819 112.20834) (xy 258.688179 112.208335) + (xy 258.427743 112.100459) (xy 258.155439 112.027495) (xy 257.875958 111.9907) (xy 257.875951 111.9907) + (xy 257.594049 111.9907) (xy 257.594041 111.9907) (xy 257.31456 112.027495) (xy 257.042256 112.100459) + (xy 256.78182 112.208335) (xy 256.781809 112.20834) (xy 256.537692 112.349281) (xy 256.537683 112.349288) + (xy 256.517106 112.365076) (xy 256.451938 112.39027) (xy 256.441622 112.3907) (xy 253.109998 112.3907) + (xy 253.109981 112.390701) (xy 253.007203 112.4012) (xy 253.0072 112.401201) (xy 252.840668 112.456385) + (xy 252.840663 112.456387) (xy 252.691342 112.548489) (xy 252.567289 112.672542) (xy 252.475187 112.821863) + (xy 252.475186 112.821866) (xy 252.420001 112.988403) (xy 252.420001 112.988404) (xy 252.42 112.988404) + (xy 252.4095 113.091183) (xy 252.4095 115.191201) (xy 252.409501 115.191218) (xy 252.42 115.293996) + (xy 252.420001 115.293999) (xy 252.429945 115.324007) (xy 252.475186 115.460534) (xy 252.567288 115.609856) + (xy 252.691344 115.733912) (xy 252.840666 115.826014) (xy 253.007203 115.881199) (xy 253.109991 115.8917) + (xy 255.037118 115.891699) (xy 255.037127 115.8917) (xy 255.465851 115.891699) (xy 255.532889 115.911383) + (xy 255.578644 115.964187) (xy 255.588588 116.033346) (xy 255.566169 116.088583) (xy 255.545151 116.117511) + (xy 255.468296 116.268346) (xy 255.415981 116.429352) (xy 255.3895 116.59655) (xy 255.3895 116.765849) + (xy 255.415981 116.933047) (xy 255.468296 117.094053) (xy 255.545152 117.244888) (xy 255.644648 117.381834) + (xy 255.644652 117.381839) (xy 255.76436 117.501547) (xy 255.764365 117.501551) (xy 255.883817 117.588337) + (xy 255.901315 117.60105) (xy 255.997425 117.65002) (xy 256.052146 117.677903) (xy 256.052148 117.677903) + (xy 256.052151 117.677905) (xy 256.13845 117.705945) (xy 256.213152 117.730218) (xy 256.380351 117.7567) + (xy 256.380356 117.7567) (xy 256.549649 117.7567) (xy 256.716847 117.730218) (xy 256.877849 117.677905) + (xy 257.028685 117.60105) (xy 257.165641 117.501546) (xy 257.285346 117.381841) (xy 257.38485 117.244885) + (xy 257.461705 117.094049) (xy 257.514018 116.933047) (xy 257.531125 116.825038) (xy 257.5405 116.765849) + (xy 257.5405 116.59655) (xy 257.514928 116.435098) (xy 257.523882 116.365805) (xy 257.568879 116.312353) + (xy 257.63563 116.291713) (xy 257.637401 116.2917) (xy 257.875944 116.2917) (xy 257.875951 116.2917) + (xy 258.155442 116.254904) (xy 258.427739 116.181942) (xy 258.688183 116.074063) (xy 258.932317 115.933112) + (xy 259.155965 115.7615) (xy 259.3553 115.562165) (xy 259.422992 115.473946) (xy 259.47942 115.432744) + (xy 259.549166 115.428589) (xy 259.610086 115.462801) (xy 259.642839 115.524518) (xy 259.637026 115.594146) + (xy 259.628755 115.611433) (xy 259.572683 115.708551) (xy 259.572675 115.708568) (xy 259.462597 115.974321) + (xy 259.388146 116.252176) (xy 259.350601 116.537361) (xy 259.3506 116.537377) (xy 259.3506 116.825022) + (xy 259.350601 116.825038) (xy 259.388146 117.110223) (xy 259.462597 117.388078) (xy 259.572675 117.653831) + (xy 259.572683 117.653848) (xy 259.716504 117.902951) (xy 259.716515 117.902967) (xy 259.891621 118.131171) + (xy 259.891627 118.131178) (xy 260.095021 118.334572) (xy 260.095027 118.334577) (xy 260.323241 118.509691) + (xy 260.323248 118.509695) (xy 260.507568 118.616113) (xy 260.555784 118.66668) (xy 260.569006 118.735287) + (xy 260.543038 118.800152) (xy 260.486124 118.84068) (xy 260.445568 118.8475) (xy 258.693347 118.8475) + (xy 258.668857 118.857644) (xy 258.647015 118.86669) (xy 258.609732 118.882133) (xy 257.904976 119.586891) + (xy 257.672132 119.819735) (xy 257.608135 119.883732) (xy 257.602615 119.897059) (xy 257.577594 119.957464) + (xy 257.5735 119.967347) (xy 257.5735 121.000847) (xy 257.5735 121.091353) (xy 257.602292 121.160863) + (xy 257.608136 121.17497) (xy 257.684029 121.250863) (xy 257.717514 121.312186) (xy 257.71253 121.381878) + (xy 257.69473 121.414022) (xy 257.692188 121.417334) (xy 257.633493 121.559036) (xy 257.633492 121.559038) + (xy 257.6185 121.672922) (xy 257.6185 122.405278) (xy 257.633491 122.519154) (xy 257.633492 122.51916) + (xy 257.633493 122.519163) (xy 257.648703 122.555882) (xy 257.692187 122.660862) (xy 257.697826 122.668211) + (xy 257.785556 122.782544) (xy 257.907237 122.875912) (xy 258.048937 122.934607) (xy 258.162823 122.9496) + (xy 259.300429 122.949599) (xy 259.367468 122.969284) (xy 259.399632 122.999203) (xy 259.474438 123.098952) + (xy 259.474439 123.098953) (xy 259.47444 123.098954) (xy 259.608632 123.222795) (xy 259.763025 123.320297) + (xy 259.872701 123.364262) (xy 259.932514 123.388239) (xy 259.932515 123.388239) (xy 259.932517 123.38824) + (xy 260.111508 123.424379) (xy 260.111502 123.424379) (xy 260.127822 123.424659) (xy 260.294084 123.42752) + (xy 260.474212 123.397558) (xy 260.54998 123.37017) (xy 260.645936 123.335485) (xy 260.645937 123.335483) + (xy 260.64594 123.335483) (xy 260.660975 123.32672) (xy 260.667659 123.322835) (xy 260.66795 123.322757) + (xy 260.695833 123.30646) (xy 260.695951 123.306392) (xy 260.699168 123.305601) (xy 260.758262 123.289599) + (xy 262.239392 123.289599) (xy 262.239514 123.289606) (xy 262.247605 123.289605) (xy 262.247608 123.289606) + (xy 262.279742 123.289602) (xy 262.342304 123.306534) (xy 262.37013 123.322791) (xy 262.370132 123.322791) + (xy 262.37628 123.326383) (xy 262.377935 123.327208) (xy 262.392078 123.33545) (xy 262.5638 123.397521) + (xy 262.743921 123.427482) (xy 262.923598 123.42439) (xy 262.926491 123.424341) (xy 263.105466 123.388205) + (xy 263.105469 123.388203) (xy 263.105474 123.388203) (xy 263.27496 123.320262) (xy 263.429346 123.222763) + (xy 263.438841 123.214001) (xy 263.56353 123.09893) (xy 263.563532 123.098928) (xy 263.565414 123.096419) + (xy 263.638696 122.998702) (xy 263.694665 122.95688) (xy 263.737898 122.949099) (xy 263.994 122.949099) + (xy 264.494 122.949099) (xy 264.549932 122.949099) (xy 264.633924 122.93855) (xy 264.766757 122.883529) + (xy 264.833604 122.8316) (xy 264.833611 122.831594) (xy 265.301494 122.363712) (xy 265.301499 122.363706) + (xy 265.353427 122.29686) (xy 265.356642 122.2891) (xy 264.494 122.2891) (xy 264.494 122.949099) + (xy 263.994 122.949099) (xy 263.994 122.1631) (xy 264.013685 122.096061) (xy 264.066489 122.050306) + (xy 264.118 122.0391) (xy 264.244 122.0391) (xy 264.244 121.9131) (xy 264.263685 121.846061) (xy 264.316489 121.800306) + (xy 264.368 121.7891) (xy 265.419 121.7891) (xy 265.419 121.672953) (xy 265.40402 121.559169) (xy 265.404018 121.559164) + (xy 265.345378 121.417593) (xy 265.345375 121.417588) (xy 265.30502 121.364996) (xy 265.279826 121.299827) + (xy 265.293864 121.231382) (xy 265.295115 121.229085) (xy 265.299517 121.221196) (xy 265.345812 121.160863) + (xy 265.382176 121.073071) (xy 265.385693 121.066771) (xy 265.405679 121.047148) (xy 265.423254 121.02534) + (xy 265.430272 121.023003) (xy 265.435551 121.017822) (xy 265.46297 121.01212) (xy 265.489548 121.003275) + (xy 265.496716 121.005104) (xy 265.503957 121.003599) (xy 265.530103 121.013626) (xy 265.557247 121.020554) + (xy 265.566097 121.027429) (xy 265.569194 121.028617) (xy 265.571276 121.031452) (xy 265.581655 121.039515) + (xy 266.043867 121.501726) (xy 266.077352 121.563049) (xy 266.080186 121.589407) (xy 266.080186 123.084156) + (xy 266.060501 123.151195) (xy 266.043867 123.171837) (xy 265.059146 124.156558) (xy 264.997823 124.190043) + (xy 264.971465 124.192877) (xy 240.878972 124.192877) (xy 240.811933 124.173192) (xy 240.791291 124.156558) + (xy 240.007819 123.373086) (xy 239.993115 123.346158) (xy 239.976523 123.32034) (xy 239.975631 123.314139) + (xy 239.974334 123.311763) (xy 239.9715 123.285405) (xy 239.9715 123.073599) (xy 239.991185 123.00656) + (xy 240.043989 122.960805) (xy 240.0955 122.949599) (xy 240.250329 122.949599) (xy 240.317368 122.969284) + (xy 240.349532 122.999203) (xy 240.424338 123.098952) (xy 240.424339 123.098953) (xy 240.42434 123.098954) + (xy 240.558532 123.222795) (xy 240.712925 123.320297) (xy 240.822601 123.364262) (xy 240.882414 123.388239) + (xy 240.882415 123.388239) (xy 240.882417 123.38824) (xy 241.061408 123.424379) (xy 241.061402 123.424379) + (xy 241.077722 123.424659) (xy 241.243984 123.42752) (xy 241.424112 123.397558) (xy 241.49988 123.37017) + (xy 241.595836 123.335485) (xy 241.595837 123.335483) (xy 241.59584 123.335483) (xy 241.610875 123.32672) + (xy 241.617559 123.322835) (xy 241.61785 123.322757) (xy 241.645733 123.30646) (xy 241.645851 123.306392) + (xy 241.649068 123.305601) (xy 241.708162 123.289599) (xy 243.189292 123.289599) (xy 243.189414 123.289606) + (xy 243.197505 123.289605) (xy 243.197508 123.289606) (xy 243.229642 123.289602) (xy 243.292204 123.306534) + (xy 243.32003 123.322791) (xy 243.320032 123.322791) (xy 243.32618 123.326383) (xy 243.327835 123.327208) + (xy 243.341978 123.33545) (xy 243.5137 123.397521) (xy 243.693821 123.427482) (xy 243.873498 123.42439) + (xy 243.876391 123.424341) (xy 244.055366 123.388205) (xy 244.055369 123.388203) (xy 244.055374 123.388203) + (xy 244.22486 123.320262) (xy 244.379246 123.222763) (xy 244.388741 123.214001) (xy 244.51343 123.09893) + (xy 244.513432 123.098928) (xy 244.515314 123.096419) (xy 244.588596 122.998702) (xy 244.644565 122.95688) + (xy 244.687798 122.949099) (xy 244.9439 122.949099) (xy 245.4439 122.949099) (xy 245.499832 122.949099) + (xy 245.583824 122.93855) (xy 245.716657 122.883529) (xy 245.783504 122.8316) (xy 245.783511 122.831594) + (xy 246.251394 122.363712) (xy 246.251399 122.363706) (xy 246.303327 122.29686) (xy 246.306542 122.2891) + (xy 245.4439 122.2891) (xy 245.4439 122.949099) (xy 244.9439 122.949099) (xy 244.9439 122.1631) + (xy 244.963585 122.096061) (xy 245.016389 122.050306) (xy 245.0679 122.0391) (xy 245.1939 122.0391) + (xy 245.1939 121.9131) (xy 245.213585 121.846061) (xy 245.266389 121.800306) (xy 245.3179 121.7891) + (xy 246.3689 121.7891) (xy 246.3689 121.672955) (xy 246.36764 121.663386) (xy 246.378405 121.59435) + (xy 246.424784 121.542094) (xy 246.466386 121.525582) (xy 246.610397 121.496937) (xy 246.741717 121.442543) + (xy 246.756072 121.436597) (xy 246.756072 121.436596) (xy 246.756079 121.436594) (xy 246.887189 121.348989) + (xy 246.998689 121.237489) (xy 247.086294 121.106379) (xy 247.146637 120.960697) (xy 247.1774 120.806042) + (xy 247.1774 120.648358) (xy 247.1774 120.648355) (xy 247.177399 120.648353) (xy 247.165038 120.586212) + (xy 247.146637 120.493703) (xy 247.115481 120.418484) (xy 247.086297 120.348027) (xy 247.08629 120.348014) + (xy 246.998689 120.216911) (xy 246.998686 120.216907) (xy 246.887192 120.105413) (xy 246.887188 120.10541) + (xy 246.756085 120.017809) (xy 246.756072 120.017802) (xy 246.610401 119.957464) (xy 246.610389 119.957461) + (xy 246.455745 119.9267) (xy 246.455742 119.9267) (xy 246.364046 119.9267) (xy 246.297007 119.907015) + (xy 246.265672 119.878188) (xy 246.202344 119.795656) (xy 246.080663 119.702288) (xy 246.080662 119.702287) + (xy 245.938963 119.643593) (xy 245.938961 119.643592) (xy 245.825078 119.6286) (xy 245.825077 119.6286) + (xy 244.687473 119.6286) (xy 244.620434 119.608915) (xy 244.588272 119.578998) (xy 244.513461 119.479244) + (xy 244.379269 119.355404) (xy 244.379266 119.355402) (xy 244.379265 119.355401) (xy 244.379262 119.355399) + (xy 244.224877 119.257901) (xy 244.055387 119.189958) (xy 244.055377 119.189956) (xy 243.876392 119.153818) + (xy 243.876399 119.153818) (xy 243.704694 119.150865) (xy 243.693818 119.150678) (xy 243.693817 119.150678) + (xy 243.693814 119.150678) (xy 243.513697 119.180638) (xy 243.513684 119.180641) (xy 243.341963 119.242713) + (xy 243.327448 119.25117) (xy 243.327363 119.251219) (xy 243.320276 119.25534) (xy 243.32003 119.255408) + (xy 243.292238 119.271644) (xy 243.29199 119.271789) (xy 243.289263 119.272459) (xy 243.229646 119.288596) + (xy 243.189301 119.288593) (xy 243.189197 119.2886) (xy 241.748496 119.2886) (xy 241.740314 119.288598) + (xy 241.740292 119.288593) (xy 241.710365 119.288595) (xy 241.708128 119.288595) (xy 241.707846 119.288512) + (xy 241.645593 119.271662) (xy 241.617771 119.255408) (xy 241.611705 119.251864) (xy 241.610007 119.251017) + (xy 241.602657 119.246734) (xy 241.595821 119.24275) (xy 241.424097 119.180678) (xy 241.424091 119.180677) + (xy 241.243981 119.150719) (xy 241.243978 119.150719) (xy 241.235439 119.150865) (xy 241.061407 119.153859) + (xy 240.882434 119.189994) (xy 240.882423 119.189997) (xy 240.712942 119.257937) (xy 240.712941 119.257937) + (xy 240.558561 119.355432) (xy 240.558558 119.355434) (xy 240.468243 119.438782) (xy 240.424369 119.479272) + (xy 240.349582 119.578996) (xy 240.349581 119.578997) (xy 240.293611 119.620819) (xy 240.250378 119.6286) + (xy 239.112721 119.6286) (xy 238.998845 119.643591) (xy 238.998837 119.643593) (xy 238.857137 119.702287) + (xy 238.735456 119.795656) (xy 238.642087 119.917337) (xy 238.583393 120.059036) (xy 238.583392 120.059038) + (xy 238.5684 120.172922) (xy 227.319399 120.172922) (xy 227.319399 120.172921) (xy 227.304408 120.059045) + (xy 227.304407 120.059037) (xy 227.245712 119.917337) (xy 227.152344 119.795656) (xy 227.030663 119.702288) + (xy 227.030662 119.702287) (xy 226.888963 119.643593) (xy 226.888961 119.643592) (xy 226.775078 119.6286) + (xy 226.775077 119.6286) (xy 225.637473 119.6286) (xy 225.570434 119.608915) (xy 225.538272 119.578998) + (xy 225.463461 119.479244) (xy 225.329269 119.355404) (xy 225.329266 119.355402) (xy 225.329265 119.355401) + (xy 225.329262 119.355399) (xy 225.174877 119.257901) (xy 225.005387 119.189958) (xy 225.005377 119.189956) + (xy 224.826392 119.153818) (xy 224.826399 119.153818) (xy 224.654694 119.150865) (xy 224.643818 119.150678) + (xy 224.643817 119.150678) (xy 224.643814 119.150678) (xy 224.463697 119.180638) (xy 224.463684 119.180641) + (xy 224.291963 119.242713) (xy 224.277448 119.25117) (xy 224.277363 119.251219) (xy 224.270276 119.25534) + (xy 224.27003 119.255408) (xy 224.242238 119.271644) (xy 224.24199 119.271789) (xy 224.239263 119.272459) + (xy 224.179646 119.288596) (xy 224.139301 119.288593) (xy 224.139197 119.2886) (xy 222.698496 119.2886) + (xy 222.690314 119.288598) (xy 222.690292 119.288593) (xy 222.660365 119.288595) (xy 222.658128 119.288595) + (xy 222.657846 119.288512) (xy 222.595593 119.271662) (xy 222.567771 119.255408) (xy 222.561705 119.251864) + (xy 222.560007 119.251017) (xy 222.552657 119.246734) (xy 222.545821 119.24275) (xy 222.374097 119.180678) + (xy 222.374091 119.180677) (xy 222.193981 119.150719) (xy 222.193978 119.150719) (xy 222.185439 119.150865) + (xy 222.011407 119.153859) (xy 221.832434 119.189994) (xy 221.832423 119.189997) (xy 221.662942 119.257937) + (xy 221.662941 119.257937) (xy 221.508561 119.355432) (xy 221.508558 119.355434) (xy 221.418243 119.438782) + (xy 221.374369 119.479272) (xy 221.299582 119.578996) (xy 221.299581 119.578997) (xy 221.243611 119.620819) + (xy 221.200378 119.6286) (xy 220.062721 119.6286) (xy 219.948845 119.643591) (xy 219.948837 119.643593) + (xy 219.807137 119.702287) (xy 219.685456 119.795656) (xy 219.592087 119.917337) (xy 219.533393 120.059036) + (xy 219.533392 120.059038) (xy 219.5184 120.172922) (xy 219.5184 120.905278) (xy 219.533391 121.019154) + (xy 219.533392 121.01916) (xy 219.533393 121.019163) (xy 219.539089 121.032914) (xy 219.592087 121.160862) + (xy 219.632565 121.213615) (xy 219.657758 121.278784) (xy 219.643719 121.347229) (xy 219.632565 121.364585) + (xy 219.592087 121.417337) (xy 219.533393 121.559036) (xy 219.533392 121.559038) (xy 219.5184 121.672922) + (xy 219.5184 121.690988) (xy 219.498715 121.758027) (xy 219.445911 121.803782) (xy 219.437171 121.807378) + (xy 219.425682 121.8116) (xy 219.423647 121.8116) (xy 219.409976 121.817263) (xy 219.407656 121.818224) + (xy 219.329686 121.850519) (xy 219.260216 121.857986) (xy 219.234783 121.850518) (xy 219.154501 121.817264) + (xy 219.154489 121.817261) (xy 218.999845 121.7865) (xy 218.999842 121.7865) (xy 218.842158 121.7865) + (xy 218.842155 121.7865) (xy 218.68751 121.817261) (xy 218.687498 121.817264) (xy 218.541827 121.877602) + (xy 218.541814 121.877609) (xy 218.410711 121.96521) (xy 218.410707 121.965213) (xy 218.299213 122.076707) + (xy 218.29921 122.076711) (xy 218.211609 122.207814) (xy 218.211602 122.207827) (xy 218.151264 122.353498) + (xy 218.151261 122.35351) (xy 218.1205 122.508153) (xy 218.1205 122.665846) (xy 218.151261 122.820489) + (xy 218.151264 122.820501) (xy 218.211602 122.966172) (xy 218.211609 122.966185) (xy 218.29921 123.097288) + (xy 218.299213 123.097292) (xy 218.410707 123.208786) (xy 218.410711 123.208789) (xy 218.541814 123.29639) + (xy 218.541827 123.296397) (xy 218.671376 123.350057) (xy 218.687503 123.356737) (xy 218.81953 123.382999) + (xy 218.842153 123.387499) (xy 218.842156 123.3875) (xy 218.842158 123.3875) (xy 218.999844 123.3875) + (xy 218.999845 123.387499) (xy 219.154497 123.356737) (xy 219.300179 123.296394) (xy 219.431289 123.208789) + (xy 219.542789 123.097289) (xy 219.630394 122.966179) (xy 219.640738 122.941204) (xy 219.684576 122.886803) + (xy 219.750869 122.864736) (xy 219.802752 122.874096) (xy 219.857925 122.896949) (xy 219.948837 122.934607) + (xy 220.062723 122.9496) (xy 221.200329 122.949599) (xy 221.267368 122.969284) (xy 221.299532 122.999203) + (xy 221.374338 123.098952) (xy 221.374339 123.098953) (xy 221.37434 123.098954) (xy 221.508532 123.222795) + (xy 221.662925 123.320297) (xy 221.772601 123.364262) (xy 221.832414 123.388239) (xy 221.832415 123.388239) + (xy 221.832417 123.38824) (xy 222.011408 123.424379) (xy 222.011402 123.424379) (xy 222.027722 123.424659) + (xy 222.193984 123.42752) (xy 222.374112 123.397558) (xy 222.44988 123.37017) (xy 222.545836 123.335485) + (xy 222.545837 123.335483) (xy 222.54584 123.335483) (xy 222.560875 123.32672) (xy 222.567559 123.322835) + (xy 222.56785 123.322757) (xy 222.595733 123.30646) (xy 222.595851 123.306392) (xy 222.599068 123.305601) + (xy 222.658162 123.289599) (xy 224.139292 123.289599) (xy 224.139414 123.289606) (xy 224.147505 123.289605) + (xy 224.147508 123.289606) (xy 224.179642 123.289602) (xy 224.242204 123.306534) (xy 224.27003 123.322791) + (xy 224.270032 123.322791) (xy 224.27618 123.326383) (xy 224.277835 123.327208) (xy 224.291978 123.33545) + (xy 224.4637 123.397521) (xy 224.643821 123.427482) (xy 224.823498 123.42439) (xy 224.826391 123.424341) + (xy 225.005366 123.388205) (xy 225.005369 123.388203) (xy 225.005374 123.388203) (xy 225.17486 123.320262) + (xy 225.329246 123.222763) (xy 225.338741 123.214001) (xy 225.46343 123.09893) (xy 225.463432 123.098928) + (xy 225.465314 123.096419) (xy 225.538596 122.998702) (xy 225.594565 122.95688) (xy 225.637798 122.949099) + (xy 225.8939 122.949099) (xy 226.3939 122.949099) (xy 226.449832 122.949099) (xy 226.533824 122.93855) + (xy 226.666657 122.883529) (xy 226.733504 122.8316) (xy 226.733511 122.831594) (xy 227.201394 122.363712) + (xy 227.201399 122.363706) (xy 227.253327 122.29686) (xy 227.256542 122.2891) (xy 226.3939 122.2891) + (xy 226.3939 122.949099) (xy 225.8939 122.949099) (xy 225.8939 122.1631) (xy 225.913585 122.096061) + (xy 225.966389 122.050306) (xy 226.0179 122.0391) (xy 226.1439 122.0391) (xy 226.1439 121.9131) + (xy 226.163585 121.846061) (xy 226.216389 121.800306) (xy 226.2679 121.7891) (xy 227.3189 121.7891) + (xy 227.3189 121.672953) (xy 227.30392 121.559169) (xy 227.303918 121.559164) (xy 227.245278 121.417593) + (xy 227.245275 121.417588) (xy 227.20492 121.364996) (xy 227.179726 121.299827) (xy 227.193609 121.231676) + (xy 227.198513 121.222373) (xy 227.245712 121.160863) (xy 227.299813 121.030252) (xy 227.302486 121.025184) + (xy 227.322991 121.004071) (xy 227.341453 120.981162) (xy 227.347052 120.979298) (xy 227.351166 120.975063) + (xy 227.379829 120.968388) (xy 227.407747 120.959097) (xy 227.413466 120.960556) (xy 227.419216 120.959218) + (xy 227.446937 120.969099) (xy 227.475446 120.976376) (xy 227.482311 120.981709) (xy 227.485029 120.982678) + (xy 227.487229 120.985529) (xy 227.499854 120.995337) (xy 227.537431 121.032914) (xy 227.570916 121.094237) + (xy 227.57375 121.120595) (xy 227.57375 122.779404) (xy 227.554065 122.846443) (xy 227.537431 122.867085) + (xy 226.443336 123.961181) (xy 226.382013 123.994666) (xy 226.355655 123.9975) (xy 222.307931 123.9975) + (xy 222.28374 123.995117) (xy 222.220527 123.982543) (xy 222.180094 123.9745) (xy 222.180092 123.9745) + (xy 222.022408 123.9745) (xy 222.022406 123.9745) (xy 221.981973 123.982543) (xy 221.918759 123.995117) + (xy 221.894569 123.9975) (xy 203.096845 123.9975) (xy 203.029806 123.977815) (xy 203.009164 123.961181) + (xy 202.63258 123.584597) (xy 202.599095 123.523274) (xy 202.604079 123.453582) (xy 202.645951 123.397649) + (xy 202.711415 123.373232) (xy 202.766399 123.381819) (xy 202.782414 123.388239) (xy 202.782415 123.388239) + (xy 202.782417 123.38824) (xy 202.961408 123.424379) (xy 202.961402 123.424379) (xy 202.977722 123.424659) + (xy 203.143984 123.42752) (xy 203.324112 123.397558) (xy 203.39988 123.37017) (xy 203.495836 123.335485) + (xy 203.495837 123.335483) (xy 203.49584 123.335483) (xy 203.510875 123.32672) (xy 203.517559 123.322835) + (xy 203.51785 123.322757) (xy 203.545733 123.30646) (xy 203.545851 123.306392) (xy 203.549068 123.305601) + (xy 203.608162 123.289599) (xy 205.089292 123.289599) (xy 205.089414 123.289606) (xy 205.097505 123.289605) + (xy 205.097508 123.289606) (xy 205.129642 123.289602) (xy 205.192204 123.306534) (xy 205.22003 123.322791) + (xy 205.220032 123.322791) (xy 205.22618 123.326383) (xy 205.227835 123.327208) (xy 205.241978 123.33545) + (xy 205.4137 123.397521) (xy 205.593821 123.427482) (xy 205.773498 123.42439) (xy 205.776391 123.424341) + (xy 205.955366 123.388205) (xy 205.955369 123.388203) (xy 205.955374 123.388203) (xy 206.12486 123.320262) + (xy 206.279246 123.222763) (xy 206.288741 123.214001) (xy 206.41343 123.09893) (xy 206.413432 123.098928) + (xy 206.415314 123.096419) (xy 206.488596 122.998702) (xy 206.544565 122.95688) (xy 206.587798 122.949099) + (xy 206.8439 122.949099) (xy 207.3439 122.949099) (xy 207.399832 122.949099) (xy 207.483824 122.93855) + (xy 207.616657 122.883529) (xy 207.683504 122.8316) (xy 207.683511 122.831594) (xy 208.151394 122.363712) + (xy 208.151399 122.363706) (xy 208.203327 122.29686) (xy 208.206542 122.2891) (xy 207.3439 122.2891) + (xy 207.3439 122.949099) (xy 206.8439 122.949099) (xy 206.8439 122.1631) (xy 206.863585 122.096061) + (xy 206.916389 122.050306) (xy 206.9679 122.0391) (xy 207.0939 122.0391) (xy 207.0939 121.9131) + (xy 207.113585 121.846061) (xy 207.166389 121.800306) (xy 207.2179 121.7891) (xy 208.2689 121.7891) + (xy 208.2689 121.672953) (xy 208.25392 121.559169) (xy 208.253918 121.559164) (xy 208.195278 121.417593) + (xy 208.195275 121.417588) (xy 208.15492 121.364996) (xy 208.129726 121.299827) (xy 208.143764 121.231382) + (xy 208.154921 121.214023) (xy 208.195712 121.160863) (xy 208.218283 121.106372) (xy 208.254407 121.019163) + (xy 208.2694 120.905277) (xy 208.269399 120.172924) (xy 208.267697 120.159997) (xy 208.254408 120.059045) + (xy 208.254407 120.059037) (xy 208.195712 119.917337) (xy 208.102344 119.795656) (xy 207.980663 119.702288) + (xy 207.980662 119.702287) (xy 207.838963 119.643593) (xy 207.838961 119.643592) (xy 207.725078 119.6286) + (xy 207.725077 119.6286) (xy 207.4454 119.6286) (xy 207.378361 119.608915) (xy 207.332606 119.556111) + (xy 207.324312 119.531315) (xy 207.3214 119.518116) (xy 207.3214 119.472397) (xy 207.303993 119.430373) + (xy 207.286766 119.388782) (xy 206.780118 118.882135) (xy 206.696503 118.8475) (xy 205.494432 118.8475) + (xy 205.427393 118.827815) (xy 205.381638 118.775011) (xy 205.371694 118.705853) (xy 205.400719 118.642297) + (xy 205.432432 118.616113) (xy 205.488683 118.583635) (xy 205.616759 118.509691) (xy 205.844973 118.334577) + (xy 206.048377 118.131173) (xy 206.223491 117.902959) (xy 206.36732 117.653841) (xy 206.477402 117.38808) + (xy 206.551853 117.110225) (xy 206.5894 116.825029) (xy 206.5894 116.59655) (xy 208.3995 116.59655) + (xy 208.3995 116.765849) (xy 208.425981 116.933047) (xy 208.478296 117.094053) (xy 208.555152 117.244888) + (xy 208.654648 117.381834) (xy 208.654652 117.381839) (xy 208.77436 117.501547) (xy 208.774365 117.501551) + (xy 208.893817 117.588337) (xy 208.911315 117.60105) (xy 209.007425 117.65002) (xy 209.062146 117.677903) + (xy 209.062148 117.677903) (xy 209.062151 117.677905) (xy 209.14845 117.705945) (xy 209.223152 117.730218) + (xy 209.390351 117.7567) (xy 209.390356 117.7567) (xy 209.559649 117.7567) (xy 209.726847 117.730218) + (xy 209.887849 117.677905) (xy 210.038685 117.60105) (xy 210.175641 117.501546) (xy 210.295346 117.381841) + (xy 210.39485 117.244885) (xy 210.471705 117.094049) (xy 210.524018 116.933047) (xy 210.541125 116.825038) + (xy 210.5505 116.765849) (xy 210.5505 116.59655) (xy 210.524018 116.429352) (xy 210.479296 116.291713) + (xy 210.471705 116.268351) (xy 210.471703 116.268348) (xy 210.471703 116.268346) (xy 210.427676 116.18194) + (xy 210.39485 116.117515) (xy 210.363281 116.074064) (xy 210.295351 115.980565) (xy 210.295347 115.98056) + (xy 210.175639 115.860852) (xy 210.175634 115.860848) (xy 210.038688 115.761352) (xy 210.038687 115.761351) + (xy 210.038685 115.76135) (xy 209.984831 115.73391) (xy 209.887853 115.684496) (xy 209.726847 115.632181) + (xy 209.559649 115.6057) (xy 209.559644 115.6057) (xy 209.390356 115.6057) (xy 209.390351 115.6057) + (xy 209.223152 115.632181) (xy 209.062146 115.684496) (xy 208.911311 115.761352) (xy 208.774365 115.860848) + (xy 208.77436 115.860852) (xy 208.654652 115.98056) (xy 208.654648 115.980565) (xy 208.555152 116.117511) + (xy 208.478296 116.268346) (xy 208.425981 116.429352) (xy 208.3995 116.59655) (xy 206.5894 116.59655) + (xy 206.5894 116.537371) (xy 206.551853 116.252175) (xy 206.477402 115.97432) (xy 206.36732 115.708559) + (xy 206.367318 115.708556) (xy 206.367316 115.708551) (xy 206.223495 115.459448) (xy 206.223491 115.459441) + (xy 206.119569 115.324007) (xy 206.048378 115.231228) (xy 206.048372 115.231221) (xy 205.844978 115.027827) + (xy 205.844971 115.027821) (xy 205.616767 114.852715) (xy 205.616765 114.852713) (xy 205.616759 114.852709) + (xy 205.616754 114.852706) (xy 205.616751 114.852704) (xy 205.367648 114.708883) (xy 205.367631 114.708875) + (xy 205.101878 114.598797) (xy 204.824023 114.524346) (xy 204.538838 114.486801) (xy 204.538835 114.4868) + (xy 204.538829 114.4868) (xy 204.251171 114.4868) (xy 204.251165 114.4868) (xy 204.251161 114.486801) + (xy 203.965976 114.524346) (xy 203.688121 114.598797) (xy 203.422368 114.708875) (xy 203.422351 114.708883) + (xy 203.173248 114.852704) (xy 203.173232 114.852715) (xy 202.945028 115.027821) (xy 202.945021 115.027827) + (xy 202.741627 115.231221) (xy 202.67043 115.324007) (xy 202.614001 115.365209) (xy 202.544255 115.369364) + (xy 202.483335 115.335151) (xy 202.450583 115.273434) (xy 202.456396 115.203807) (xy 202.464661 115.186531) + (xy 202.517863 115.094383) (xy 202.625742 114.833939) (xy 202.698704 114.561642) (xy 202.7355 114.282151) + (xy 202.7355 114.000249) (xy 202.698704 113.720758) (xy 202.625742 113.448461) (xy 202.517863 113.188017) + (xy 202.517861 113.188014) (xy 202.517859 113.188009) (xy 202.376916 112.94389) (xy 202.376912 112.943883) + (xy 202.2053 112.720235) (xy 202.205298 112.720233) (xy 202.205295 112.720229) (xy 202.00597 112.520904) + (xy 201.921889 112.456386) (xy 201.782317 112.349288) (xy 201.782311 112.349284) (xy 201.782309 112.349283) + (xy 201.53819 112.20834) (xy 201.538179 112.208335) (xy 201.277743 112.100459) (xy 201.005439 112.027495) + (xy 200.725958 111.9907) (xy 200.725951 111.9907) (xy 200.444049 111.9907) (xy 200.444041 111.9907) + (xy 200.16456 112.027495) (xy 199.892256 112.100459) (xy 199.63182 112.208335) (xy 199.631809 112.20834) + (xy 199.387692 112.349281) (xy 199.387683 112.349288) (xy 199.367106 112.365076) (xy 199.301938 112.39027) + (xy 199.291622 112.3907) (xy 195.959998 112.3907) (xy 195.959981 112.390701) (xy 195.857203 112.4012) + (xy 195.8572 112.401201) (xy 195.690668 112.456385) (xy 195.690663 112.456387) (xy 195.541342 112.548489) + (xy 195.417289 112.672542) (xy 195.325187 112.821863) (xy 195.325186 112.821866) (xy 195.270001 112.988403) + (xy 195.270001 112.988404) (xy 195.27 112.988404) (xy 195.2595 113.091183) (xy 195.2595 115.191201) + (xy 195.259501 115.191218) (xy 195.27 115.293996) (xy 195.270001 115.293999) (xy 195.279945 115.324007) + (xy 195.325186 115.460534) (xy 195.417288 115.609856) (xy 195.541344 115.733912) (xy 195.690666 115.826014) + (xy 195.857203 115.881199) (xy 195.959991 115.8917) (xy 197.887118 115.891699) (xy 197.887127 115.8917) + (xy 198.315851 115.891699) (xy 198.382889 115.911383) (xy 198.428644 115.964187) (xy 198.438588 116.033346) + (xy 198.416169 116.088583) (xy 198.395151 116.117511) (xy 198.318296 116.268346) (xy 198.265981 116.429352) + (xy 198.2395 116.59655) (xy 198.2395 116.765849) (xy 198.265981 116.933047) (xy 198.318296 117.094053) + (xy 198.395152 117.244888) (xy 198.494648 117.381834) (xy 198.494652 117.381839) (xy 198.61436 117.501547) + (xy 198.614365 117.501551) (xy 198.733817 117.588337) (xy 198.751315 117.60105) (xy 198.847425 117.65002) + (xy 198.902146 117.677903) (xy 198.902148 117.677903) (xy 198.902151 117.677905) (xy 198.98845 117.705945) + (xy 199.063152 117.730218) (xy 199.230351 117.7567) (xy 199.230356 117.7567) (xy 199.399649 117.7567) + (xy 199.566847 117.730218) (xy 199.727849 117.677905) (xy 199.878685 117.60105) (xy 200.015641 117.501546) + (xy 200.135346 117.381841) (xy 200.23485 117.244885) (xy 200.311705 117.094049) (xy 200.364018 116.933047) + (xy 200.381125 116.825038) (xy 200.3905 116.765849) (xy 200.3905 116.59655) (xy 200.364928 116.435098) + (xy 200.373882 116.365805) (xy 200.418879 116.312353) (xy 200.48563 116.291713) (xy 200.487401 116.2917) + (xy 200.725944 116.2917) (xy 200.725951 116.2917) (xy 201.005442 116.254904) (xy 201.277739 116.181942) + (xy 201.538183 116.074063) (xy 201.782317 115.933112) (xy 202.005965 115.7615) (xy 202.2053 115.562165) + (xy 202.272992 115.473946) (xy 202.32942 115.432744) (xy 202.399166 115.428589) (xy 202.460086 115.462801) + (xy 202.492839 115.524518) (xy 202.487026 115.594146) (xy 202.478755 115.611433) (xy 202.422683 115.708551) + (xy 202.422675 115.708568) (xy 202.312597 115.974321) (xy 202.238146 116.252176) (xy 202.200601 116.537361) + (xy 202.2006 116.537377) (xy 202.2006 116.825022) (xy 202.200601 116.825038) (xy 202.238146 117.110223) + (xy 202.312597 117.388078) (xy 202.422675 117.653831) (xy 202.422683 117.653848) (xy 202.566504 117.902951) + (xy 202.566515 117.902967) (xy 202.741621 118.131171) (xy 202.741627 118.131178) (xy 202.945021 118.334572) + (xy 202.945027 118.334577) (xy 203.173241 118.509691) (xy 203.173248 118.509695) (xy 203.357568 118.616113) + (xy 203.405784 118.66668) (xy 203.419006 118.735287) (xy 203.393038 118.800152) (xy 203.336124 118.84068) + (xy 203.295568 118.8475) (xy 194.803247 118.8475) (xy 194.778757 118.857644) (xy 194.756915 118.86669) + (xy 194.719632 118.882133) (xy 189.577711 124.024056) (xy 189.516388 124.057541) (xy 189.49003 124.060375) + (xy 183.75972 124.060375) (xy 183.692681 124.04069) (xy 183.672039 124.024056) (xy 182.857719 123.209736) + (xy 182.843015 123.182808) (xy 182.826423 123.15699) (xy 182.825531 123.150789) (xy 182.824234 123.148413) + (xy 182.8214 123.122055) (xy 182.8214 123.073599) (xy 182.841085 123.00656) (xy 182.893889 122.960805) + (xy 182.9454 122.949599) (xy 183.100329 122.949599) (xy 183.167368 122.969284) (xy 183.199532 122.999203) + (xy 183.274338 123.098952) (xy 183.274339 123.098953) (xy 183.27434 123.098954) (xy 183.408532 123.222795) + (xy 183.562925 123.320297) (xy 183.672601 123.364262) (xy 183.732414 123.388239) (xy 183.732415 123.388239) + (xy 183.732417 123.38824) (xy 183.911408 123.424379) (xy 183.911402 123.424379) (xy 183.927722 123.424659) + (xy 184.093984 123.42752) (xy 184.274112 123.397558) (xy 184.34988 123.37017) (xy 184.445836 123.335485) + (xy 184.445837 123.335483) (xy 184.44584 123.335483) (xy 184.460875 123.32672) (xy 184.467559 123.322835) + (xy 184.46785 123.322757) (xy 184.495733 123.30646) (xy 184.495851 123.306392) (xy 184.499068 123.305601) + (xy 184.558162 123.289599) (xy 186.039292 123.289599) (xy 186.039414 123.289606) (xy 186.047505 123.289605) + (xy 186.047508 123.289606) (xy 186.079642 123.289602) (xy 186.142204 123.306534) (xy 186.17003 123.322791) + (xy 186.170032 123.322791) (xy 186.17618 123.326383) (xy 186.177835 123.327208) (xy 186.191978 123.33545) + (xy 186.3637 123.397521) (xy 186.543821 123.427482) (xy 186.723498 123.42439) (xy 186.726391 123.424341) + (xy 186.905366 123.388205) (xy 186.905369 123.388203) (xy 186.905374 123.388203) (xy 187.07486 123.320262) + (xy 187.229246 123.222763) (xy 187.238741 123.214001) (xy 187.36343 123.09893) (xy 187.363432 123.098928) + (xy 187.365314 123.096419) (xy 187.438596 122.998702) (xy 187.494565 122.95688) (xy 187.537798 122.949099) + (xy 187.7939 122.949099) (xy 188.2939 122.949099) (xy 188.349832 122.949099) (xy 188.433824 122.93855) + (xy 188.566657 122.883529) (xy 188.633504 122.8316) (xy 188.633511 122.831594) (xy 189.101394 122.363712) + (xy 189.101399 122.363706) (xy 189.153327 122.29686) (xy 189.156542 122.2891) (xy 188.2939 122.2891) + (xy 188.2939 122.949099) (xy 187.7939 122.949099) (xy 187.7939 122.1631) (xy 187.813585 122.096061) + (xy 187.866389 122.050306) (xy 187.9179 122.0391) (xy 188.0439 122.0391) (xy 188.0439 121.9131) + (xy 188.063585 121.846061) (xy 188.116389 121.800306) (xy 188.1679 121.7891) (xy 189.2189 121.7891) + (xy 189.2189 121.672953) (xy 189.20392 121.559169) (xy 189.203918 121.559164) (xy 189.145278 121.417593) + (xy 189.145275 121.417588) (xy 189.10492 121.364996) (xy 189.079726 121.299827) (xy 189.093764 121.231382) + (xy 189.104921 121.214023) (xy 189.145712 121.160863) (xy 189.168283 121.106372) (xy 189.204407 121.019163) + (xy 189.2194 120.905277) (xy 189.219399 120.172924) (xy 189.217697 120.159997) (xy 189.204408 120.059045) + (xy 189.204407 120.059037) (xy 189.145712 119.917337) (xy 189.052344 119.795656) (xy 188.930663 119.702288) + (xy 188.930662 119.702287) (xy 188.788963 119.643593) (xy 188.788961 119.643592) (xy 188.675078 119.6286) + (xy 188.675077 119.6286) (xy 188.394289 119.6286) (xy 188.32725 119.608915) (xy 188.281495 119.556111) + (xy 188.272671 119.528787) (xy 188.2714 119.522398) (xy 188.271031 119.521507) (xy 188.236765 119.438782) + (xy 188.172768 119.374785) (xy 187.948661 119.150678) (xy 187.68012 118.882136) (xy 187.680115 118.882134) + (xy 187.596503 118.8475) (xy 186.444432 118.8475) (xy 186.377393 118.827815) (xy 186.331638 118.775011) + (xy 186.321694 118.705853) (xy 186.350719 118.642297) (xy 186.382432 118.616113) (xy 186.438683 118.583635) + (xy 186.566759 118.509691) (xy 186.794973 118.334577) (xy 186.998377 118.131173) (xy 187.173491 117.902959) + (xy 187.31732 117.653841) (xy 187.427402 117.38808) (xy 187.501853 117.110225) (xy 187.5394 116.825029) + (xy 187.5394 116.59655) (xy 189.3495 116.59655) (xy 189.3495 116.765849) (xy 189.375981 116.933047) + (xy 189.428296 117.094053) (xy 189.505152 117.244888) (xy 189.604648 117.381834) (xy 189.604652 117.381839) + (xy 189.72436 117.501547) (xy 189.724365 117.501551) (xy 189.843817 117.588337) (xy 189.861315 117.60105) + (xy 189.957425 117.65002) (xy 190.012146 117.677903) (xy 190.012148 117.677903) (xy 190.012151 117.677905) + (xy 190.09845 117.705945) (xy 190.173152 117.730218) (xy 190.340351 117.7567) (xy 190.340356 117.7567) + (xy 190.509649 117.7567) (xy 190.676847 117.730218) (xy 190.837849 117.677905) (xy 190.988685 117.60105) + (xy 191.125641 117.501546) (xy 191.245346 117.381841) (xy 191.34485 117.244885) (xy 191.421705 117.094049) + (xy 191.474018 116.933047) (xy 191.491125 116.825038) (xy 191.5005 116.765849) (xy 191.5005 116.59655) + (xy 191.474018 116.429352) (xy 191.429296 116.291713) (xy 191.421705 116.268351) (xy 191.421703 116.268348) + (xy 191.421703 116.268346) (xy 191.377676 116.18194) (xy 191.34485 116.117515) (xy 191.313281 116.074064) + (xy 191.245351 115.980565) (xy 191.245347 115.98056) (xy 191.125639 115.860852) (xy 191.125634 115.860848) + (xy 190.988688 115.761352) (xy 190.988687 115.761351) (xy 190.988685 115.76135) (xy 190.934831 115.73391) + (xy 190.837853 115.684496) (xy 190.676847 115.632181) (xy 190.509649 115.6057) (xy 190.509644 115.6057) + (xy 190.340356 115.6057) (xy 190.340351 115.6057) (xy 190.173152 115.632181) (xy 190.012146 115.684496) + (xy 189.861311 115.761352) (xy 189.724365 115.860848) (xy 189.72436 115.860852) (xy 189.604652 115.98056) + (xy 189.604648 115.980565) (xy 189.505152 116.117511) (xy 189.428296 116.268346) (xy 189.375981 116.429352) + (xy 189.3495 116.59655) (xy 187.5394 116.59655) (xy 187.5394 116.537371) (xy 187.501853 116.252175) + (xy 187.427402 115.97432) (xy 187.31732 115.708559) (xy 187.317318 115.708556) (xy 187.317316 115.708551) + (xy 187.173495 115.459448) (xy 187.173491 115.459441) (xy 187.069569 115.324007) (xy 186.998378 115.231228) + (xy 186.998372 115.231221) (xy 186.794978 115.027827) (xy 186.794971 115.027821) (xy 186.566767 114.852715) + (xy 186.566765 114.852713) (xy 186.566759 114.852709) (xy 186.566754 114.852706) (xy 186.566751 114.852704) + (xy 186.317648 114.708883) (xy 186.317631 114.708875) (xy 186.051878 114.598797) (xy 185.774023 114.524346) + (xy 185.488838 114.486801) (xy 185.488835 114.4868) (xy 185.488829 114.4868) (xy 185.201171 114.4868) + (xy 185.201165 114.4868) (xy 185.201161 114.486801) (xy 184.915976 114.524346) (xy 184.638121 114.598797) + (xy 184.372368 114.708875) (xy 184.372351 114.708883) (xy 184.123248 114.852704) (xy 184.123232 114.852715) + (xy 183.895028 115.027821) (xy 183.895021 115.027827) (xy 183.691627 115.231221) (xy 183.62043 115.324007) + (xy 183.564001 115.365209) (xy 183.494255 115.369364) (xy 183.433335 115.335151) (xy 183.400583 115.273434) + (xy 183.406396 115.203807) (xy 183.414661 115.186531) (xy 183.467863 115.094383) (xy 183.575742 114.833939) + (xy 183.648704 114.561642) (xy 183.6855 114.282151) (xy 183.6855 114.000249) (xy 183.648704 113.720758) + (xy 183.575742 113.448461) (xy 183.467863 113.188017) (xy 183.467861 113.188014) (xy 183.467859 113.188009) + (xy 183.326916 112.94389) (xy 183.326912 112.943883) (xy 183.1553 112.720235) (xy 183.155298 112.720233) + (xy 183.155295 112.720229) (xy 182.95597 112.520904) (xy 182.871889 112.456386) (xy 182.732317 112.349288) + (xy 182.732311 112.349284) (xy 182.732309 112.349283) (xy 182.48819 112.20834) (xy 182.488179 112.208335) + (xy 182.227743 112.100459) (xy 181.955439 112.027495) (xy 181.675958 111.9907) (xy 181.675951 111.9907) + (xy 181.394049 111.9907) (xy 181.394041 111.9907) (xy 181.11456 112.027495) (xy 180.842256 112.100459) + (xy 180.58182 112.208335) (xy 180.581809 112.20834) (xy 180.337692 112.349281) (xy 180.337683 112.349288) + (xy 180.317106 112.365076) (xy 180.251938 112.39027) (xy 180.241622 112.3907) (xy 176.909998 112.3907) + (xy 176.909981 112.390701) (xy 176.807203 112.4012) (xy 176.8072 112.401201) (xy 176.640668 112.456385) + (xy 176.640663 112.456387) (xy 176.491342 112.548489) (xy 176.367289 112.672542) (xy 176.275187 112.821863) + (xy 176.275186 112.821866) (xy 176.220001 112.988403) (xy 176.220001 112.988404) (xy 176.22 112.988404) + (xy 176.2095 113.091183) (xy 176.2095 115.191201) (xy 176.209501 115.191218) (xy 176.22 115.293996) + (xy 176.220001 115.293999) (xy 176.229945 115.324007) (xy 176.275186 115.460534) (xy 176.367288 115.609856) + (xy 176.491344 115.733912) (xy 176.640666 115.826014) (xy 176.807203 115.881199) (xy 176.909991 115.8917) + (xy 178.837118 115.891699) (xy 178.837127 115.8917) (xy 179.265851 115.891699) (xy 179.332889 115.911383) + (xy 179.378644 115.964187) (xy 179.388588 116.033346) (xy 179.366169 116.088583) (xy 179.345151 116.117511) + (xy 179.268296 116.268346) (xy 179.215981 116.429352) (xy 179.1895 116.59655) (xy 179.1895 116.765849) + (xy 179.215981 116.933047) (xy 179.268296 117.094053) (xy 179.345152 117.244888) (xy 179.444648 117.381834) + (xy 179.444652 117.381839) (xy 179.56436 117.501547) (xy 179.564365 117.501551) (xy 179.683817 117.588337) + (xy 179.701315 117.60105) (xy 179.797425 117.65002) (xy 179.852146 117.677903) (xy 179.852148 117.677903) + (xy 179.852151 117.677905) (xy 179.93845 117.705945) (xy 180.013152 117.730218) (xy 180.180351 117.7567) + (xy 180.180356 117.7567) (xy 180.349649 117.7567) (xy 180.516847 117.730218) (xy 180.677849 117.677905) + (xy 180.828685 117.60105) (xy 180.965641 117.501546) (xy 181.085346 117.381841) (xy 181.18485 117.244885) + (xy 181.261705 117.094049) (xy 181.314018 116.933047) (xy 181.331125 116.825038) (xy 181.3405 116.765849) + (xy 181.3405 116.59655) (xy 181.314928 116.435098) (xy 181.323882 116.365805) (xy 181.368879 116.312353) + (xy 181.43563 116.291713) (xy 181.437401 116.2917) (xy 181.675944 116.2917) (xy 181.675951 116.2917) + (xy 181.955442 116.254904) (xy 182.227739 116.181942) (xy 182.488183 116.074063) (xy 182.732317 115.933112) + (xy 182.955965 115.7615) (xy 183.1553 115.562165) (xy 183.222992 115.473946) (xy 183.27942 115.432744) + (xy 183.349166 115.428589) (xy 183.410086 115.462801) (xy 183.442839 115.524518) (xy 183.437026 115.594146) + (xy 183.428755 115.611433) (xy 183.372683 115.708551) (xy 183.372675 115.708568) (xy 183.262597 115.974321) + (xy 183.188146 116.252176) (xy 183.150601 116.537361) (xy 183.1506 116.537377) (xy 183.1506 116.825022) + (xy 183.150601 116.825038) (xy 183.188146 117.110223) (xy 183.262597 117.388078) (xy 183.372675 117.653831) + (xy 183.372683 117.653848) (xy 183.516504 117.902951) (xy 183.516515 117.902967) (xy 183.691621 118.131171) + (xy 183.691627 118.131178) (xy 183.895021 118.334572) (xy 183.895027 118.334577) (xy 184.123241 118.509691) + (xy 184.123248 118.509695) (xy 184.307568 118.616113) (xy 184.355784 118.66668) (xy 184.369006 118.735287) + (xy 184.343038 118.800152) (xy 184.286124 118.84068) (xy 184.245568 118.8475) (xy 167.319432 118.8475) + (xy 167.252393 118.827815) (xy 167.206638 118.775011) (xy 167.196694 118.705853) (xy 167.225719 118.642297) + (xy 167.257432 118.616113) (xy 167.313683 118.583635) (xy 167.441759 118.509691) (xy 167.669973 118.334577) + (xy 167.873377 118.131173) (xy 168.048491 117.902959) (xy 168.19232 117.653841) (xy 168.302402 117.38808) + (xy 168.376853 117.110225) (xy 168.4144 116.825029) (xy 168.4144 116.59655) (xy 170.2245 116.59655) + (xy 170.2245 116.765849) (xy 170.250981 116.933047) (xy 170.303296 117.094053) (xy 170.380152 117.244888) + (xy 170.479648 117.381834) (xy 170.479652 117.381839) (xy 170.59936 117.501547) (xy 170.599365 117.501551) + (xy 170.718817 117.588337) (xy 170.736315 117.60105) (xy 170.832425 117.65002) (xy 170.887146 117.677903) + (xy 170.887148 117.677903) (xy 170.887151 117.677905) (xy 170.97345 117.705945) (xy 171.048152 117.730218) + (xy 171.215351 117.7567) (xy 171.215356 117.7567) (xy 171.384649 117.7567) (xy 171.551847 117.730218) + (xy 171.712849 117.677905) (xy 171.863685 117.60105) (xy 172.000641 117.501546) (xy 172.120346 117.381841) + (xy 172.21985 117.244885) (xy 172.296705 117.094049) (xy 172.349018 116.933047) (xy 172.366125 116.825038) + (xy 172.3755 116.765849) (xy 172.3755 116.59655) (xy 172.349018 116.429352) (xy 172.304296 116.291713) + (xy 172.296705 116.268351) (xy 172.296703 116.268348) (xy 172.296703 116.268346) (xy 172.252676 116.18194) + (xy 172.21985 116.117515) (xy 172.188281 116.074064) (xy 172.120351 115.980565) (xy 172.120347 115.98056) + (xy 172.000639 115.860852) (xy 172.000634 115.860848) (xy 171.863688 115.761352) (xy 171.863687 115.761351) + (xy 171.863685 115.76135) (xy 171.809831 115.73391) (xy 171.712853 115.684496) (xy 171.551847 115.632181) + (xy 171.384649 115.6057) (xy 171.384644 115.6057) (xy 171.215356 115.6057) (xy 171.215351 115.6057) + (xy 171.048152 115.632181) (xy 170.887146 115.684496) (xy 170.736311 115.761352) (xy 170.599365 115.860848) + (xy 170.59936 115.860852) (xy 170.479652 115.98056) (xy 170.479648 115.980565) (xy 170.380152 116.117511) + (xy 170.303296 116.268346) (xy 170.250981 116.429352) (xy 170.2245 116.59655) (xy 168.4144 116.59655) + (xy 168.4144 116.537371) (xy 168.376853 116.252175) (xy 168.302402 115.97432) (xy 168.19232 115.708559) + (xy 168.192318 115.708556) (xy 168.192316 115.708551) (xy 168.048495 115.459448) (xy 168.048491 115.459441) + (xy 167.944569 115.324007) (xy 167.873378 115.231228) (xy 167.873372 115.231221) (xy 167.669978 115.027827) + (xy 167.669971 115.027821) (xy 167.441767 114.852715) (xy 167.441765 114.852713) (xy 167.441759 114.852709) + (xy 167.441754 114.852706) (xy 167.441751 114.852704) (xy 167.192648 114.708883) (xy 167.192631 114.708875) + (xy 166.926878 114.598797) (xy 166.649023 114.524346) (xy 166.363838 114.486801) (xy 166.363835 114.4868) + (xy 166.363829 114.4868) (xy 166.076171 114.4868) (xy 166.076165 114.4868) (xy 166.076161 114.486801) + (xy 165.790976 114.524346) (xy 165.513121 114.598797) (xy 165.247368 114.708875) (xy 165.247351 114.708883) + (xy 164.998248 114.852704) (xy 164.998232 114.852715) (xy 164.770028 115.027821) (xy 164.770021 115.027827) + (xy 164.566627 115.231221) (xy 164.49543 115.324007) (xy 164.439001 115.365209) (xy 164.369255 115.369364) + (xy 164.308335 115.335151) (xy 164.275583 115.273434) (xy 164.281396 115.203807) (xy 164.289661 115.186531) + (xy 164.342863 115.094383) (xy 164.450742 114.833939) (xy 164.523704 114.561642) (xy 164.5605 114.282151) + (xy 164.5605 114.000249) (xy 164.523704 113.720758) (xy 164.450742 113.448461) (xy 164.342863 113.188017) + (xy 164.342861 113.188014) (xy 164.342859 113.188009) (xy 164.201916 112.94389) (xy 164.201912 112.943883) + (xy 164.0303 112.720235) (xy 164.030298 112.720233) (xy 164.030295 112.720229) (xy 163.83097 112.520904) + (xy 163.746889 112.456386) (xy 163.607317 112.349288) (xy 163.607311 112.349284) (xy 163.607309 112.349283) + (xy 163.36319 112.20834) (xy 163.363179 112.208335) (xy 163.102743 112.100459) (xy 162.830439 112.027495) + (xy 162.550958 111.9907) (xy 162.550951 111.9907) (xy 162.269049 111.9907) (xy 162.269041 111.9907) + (xy 161.98956 112.027495) (xy 161.717256 112.100459) (xy 161.45682 112.208335) (xy 161.456809 112.20834) + (xy 161.212692 112.349281) (xy 161.212683 112.349288) (xy 161.192106 112.365076) (xy 161.126938 112.39027) + (xy 161.116622 112.3907) (xy 157.784998 112.3907) (xy 157.784981 112.390701) (xy 157.682203 112.4012) + (xy 157.6822 112.401201) (xy 157.515668 112.456385) (xy 157.515663 112.456387) (xy 157.366342 112.548489) + (xy 157.242289 112.672542) (xy 157.150187 112.821863) (xy 157.150186 112.821866) (xy 157.095001 112.988403) + (xy 157.095001 112.988404) (xy 157.095 112.988404) (xy 157.0845 113.091183) (xy 157.0845 115.191201) + (xy 157.084501 115.191218) (xy 157.095 115.293996) (xy 157.095001 115.293999) (xy 157.104945 115.324007) + (xy 157.150186 115.460534) (xy 157.242288 115.609856) (xy 157.366344 115.733912) (xy 157.515666 115.826014) + (xy 157.682203 115.881199) (xy 157.784991 115.8917) (xy 159.712118 115.891699) (xy 159.712127 115.8917) + (xy 160.140851 115.891699) (xy 160.207889 115.911383) (xy 160.253644 115.964187) (xy 160.263588 116.033346) + (xy 160.241169 116.088583) (xy 160.220151 116.117511) (xy 160.143296 116.268346) (xy 160.090981 116.429352) + (xy 160.0645 116.59655) (xy 160.0645 116.765849) (xy 160.090981 116.933047) (xy 160.143296 117.094053) + (xy 160.220152 117.244888) (xy 160.319648 117.381834) (xy 160.319652 117.381839) (xy 160.43936 117.501547) + (xy 160.439365 117.501551) (xy 160.558817 117.588337) (xy 160.576315 117.60105) (xy 160.672425 117.65002) + (xy 160.727146 117.677903) (xy 160.727148 117.677903) (xy 160.727151 117.677905) (xy 160.81345 117.705945) + (xy 160.888152 117.730218) (xy 161.055351 117.7567) (xy 161.055356 117.7567) (xy 161.224649 117.7567) + (xy 161.391847 117.730218) (xy 161.552849 117.677905) (xy 161.703685 117.60105) (xy 161.840641 117.501546) + (xy 161.960346 117.381841) (xy 162.05985 117.244885) (xy 162.136705 117.094049) (xy 162.189018 116.933047) + (xy 162.206125 116.825038) (xy 162.2155 116.765849) (xy 162.2155 116.59655) (xy 162.189928 116.435098) + (xy 162.198882 116.365805) (xy 162.243879 116.312353) (xy 162.31063 116.291713) (xy 162.312401 116.2917) + (xy 162.550944 116.2917) (xy 162.550951 116.2917) (xy 162.830442 116.254904) (xy 163.102739 116.181942) + (xy 163.363183 116.074063) (xy 163.607317 115.933112) (xy 163.830965 115.7615) (xy 164.0303 115.562165) + (xy 164.097992 115.473946) (xy 164.15442 115.432744) (xy 164.224166 115.428589) (xy 164.285086 115.462801) + (xy 164.317839 115.524518) (xy 164.312026 115.594146) (xy 164.303755 115.611433) (xy 164.247683 115.708551) + (xy 164.247675 115.708568) (xy 164.137597 115.974321) (xy 164.063146 116.252176) (xy 164.025601 116.537361) + (xy 164.0256 116.537377) (xy 164.0256 116.825022) (xy 164.025601 116.825038) (xy 164.063146 117.110223) + (xy 164.137597 117.388078) (xy 164.247675 117.653831) (xy 164.247683 117.653848) (xy 164.391504 117.902951) + (xy 164.391515 117.902967) (xy 164.566621 118.131171) (xy 164.566627 118.131178) (xy 164.770021 118.334572) + (xy 164.770027 118.334577) (xy 164.998241 118.509691) (xy 164.998248 118.509695) (xy 165.182568 118.616113) + (xy 165.230784 118.66668) (xy 165.244006 118.735287) (xy 165.218038 118.800152) (xy 165.161124 118.84068) + (xy 165.120568 118.8475) (xy 163.461444 118.8475) (xy 163.39361 118.875598) (xy 163.393611 118.875599) + (xy 163.377831 118.882135) (xy 163.37783 118.882136) (xy 162.885182 119.374785) (xy 162.393832 119.866135) + (xy 162.329835 119.930132) (xy 162.320366 119.952993) (xy 162.2952 120.013746) (xy 162.2952 121.063153) + (xy 162.329836 121.14677) (xy 162.433929 121.250863) (xy 162.467414 121.312186) (xy 162.46243 121.381878) + (xy 162.44463 121.414022) (xy 162.442088 121.417334) (xy 162.383393 121.559036) (xy 162.383392 121.559038) + (xy 162.3684 121.672922) (xy 162.3684 122.405278) (xy 162.383391 122.519154) (xy 162.383392 122.51916) + (xy 162.383393 122.519163) (xy 162.398603 122.555882) (xy 162.442087 122.660862) (xy 162.447726 122.668211) + (xy 162.535456 122.782544) (xy 162.657137 122.875912) (xy 162.798837 122.934607) (xy 162.912723 122.9496) + (xy 164.050329 122.949599) (xy 164.117368 122.969284) (xy 164.149532 122.999203) (xy 164.224338 123.098952) + (xy 164.224339 123.098953) (xy 164.22434 123.098954) (xy 164.358532 123.222795) (xy 164.512925 123.320297) + (xy 164.622601 123.364262) (xy 164.682414 123.388239) (xy 164.682415 123.388239) (xy 164.682417 123.38824) + (xy 164.861408 123.424379) (xy 164.861402 123.424379) (xy 164.877722 123.424659) (xy 165.043984 123.42752) + (xy 165.224112 123.397558) (xy 165.29988 123.37017) (xy 165.395836 123.335485) (xy 165.395837 123.335483) + (xy 165.39584 123.335483) (xy 165.410875 123.32672) (xy 165.417559 123.322835) (xy 165.41785 123.322757) + (xy 165.445733 123.30646) (xy 165.445851 123.306392) (xy 165.449068 123.305601) (xy 165.508162 123.289599) + (xy 166.989292 123.289599) (xy 166.989414 123.289606) (xy 166.997505 123.289605) (xy 166.997508 123.289606) + (xy 167.029642 123.289602) (xy 167.092204 123.306534) (xy 167.12003 123.322791) (xy 167.120032 123.322791) + (xy 167.12618 123.326383) (xy 167.127835 123.327208) (xy 167.141978 123.33545) (xy 167.3137 123.397521) + (xy 167.493821 123.427482) (xy 167.673498 123.42439) (xy 167.676391 123.424341) (xy 167.855366 123.388205) + (xy 167.855369 123.388203) (xy 167.855374 123.388203) (xy 168.02486 123.320262) (xy 168.179246 123.222763) + (xy 168.188741 123.214001) (xy 168.31343 123.09893) (xy 168.313432 123.098928) (xy 168.315314 123.096419) + (xy 168.388596 122.998702) (xy 168.444565 122.95688) (xy 168.487798 122.949099) (xy 168.7439 122.949099) + (xy 168.7439 122.1631) (xy 168.763585 122.096061) (xy 168.816389 122.050306) (xy 168.8679 122.0391) + (xy 169.1199 122.0391) (xy 169.186939 122.058785) (xy 169.232694 122.111589) (xy 169.2439 122.1631) + (xy 169.2439 122.949099) (xy 169.299832 122.949099) (xy 169.383824 122.93855) (xy 169.516657 122.883529) + (xy 169.583504 122.8316) (xy 169.58351 122.831595) (xy 169.662069 122.753037) (xy 169.723392 122.719552) + (xy 169.793084 122.724536) (xy 169.849017 122.766408) (xy 169.873434 122.831872) (xy 169.87375 122.840718) + (xy 169.87375 123.303131) (xy 169.854065 123.37017) (xy 169.837431 123.390812) (xy 169.267063 123.961181) + (xy 169.20574 123.994666) (xy 169.179382 123.9975) (xy 145.719861 123.9975) (xy 145.652822 123.977815) + (xy 145.63218 123.961181) (xy 144.832279 123.16128) (xy 144.798794 123.099957) (xy 144.803778 123.030265) + (xy 144.84565 122.974332) (xy 144.911114 122.949915) (xy 144.91996 122.949599) (xy 145.000329 122.949599) + (xy 145.067368 122.969284) (xy 145.099532 122.999203) (xy 145.174338 123.098952) (xy 145.174339 123.098953) + (xy 145.17434 123.098954) (xy 145.308532 123.222795) (xy 145.462925 123.320297) (xy 145.572601 123.364262) + (xy 145.632414 123.388239) (xy 145.632415 123.388239) (xy 145.632417 123.38824) (xy 145.811408 123.424379) + (xy 145.811402 123.424379) (xy 145.827722 123.424659) (xy 145.993984 123.42752) (xy 146.174112 123.397558) + (xy 146.24988 123.37017) (xy 146.345836 123.335485) (xy 146.345837 123.335483) (xy 146.34584 123.335483) + (xy 146.360875 123.32672) (xy 146.367559 123.322835) (xy 146.36785 123.322757) (xy 146.395733 123.30646) + (xy 146.395851 123.306392) (xy 146.399068 123.305601) (xy 146.458162 123.289599) (xy 147.939292 123.289599) + (xy 147.939414 123.289606) (xy 147.947505 123.289605) (xy 147.947508 123.289606) (xy 147.979642 123.289602) + (xy 148.042204 123.306534) (xy 148.07003 123.322791) (xy 148.070032 123.322791) (xy 148.07618 123.326383) + (xy 148.077835 123.327208) (xy 148.091978 123.33545) (xy 148.2637 123.397521) (xy 148.443821 123.427482) + (xy 148.623498 123.42439) (xy 148.626391 123.424341) (xy 148.805366 123.388205) (xy 148.805369 123.388203) + (xy 148.805374 123.388203) (xy 148.97486 123.320262) (xy 149.129246 123.222763) (xy 149.138741 123.214001) + (xy 149.26343 123.09893) (xy 149.263432 123.098928) (xy 149.265314 123.096419) (xy 149.338596 122.998702) + (xy 149.394565 122.95688) (xy 149.437798 122.949099) (xy 149.6939 122.949099) (xy 150.1939 122.949099) + (xy 150.249832 122.949099) (xy 150.333824 122.93855) (xy 150.466657 122.883529) (xy 150.533504 122.8316) + (xy 150.533511 122.831594) (xy 151.001394 122.363712) (xy 151.001399 122.363706) (xy 151.053327 122.29686) + (xy 151.056542 122.2891) (xy 150.1939 122.2891) (xy 150.1939 122.949099) (xy 149.6939 122.949099) + (xy 149.6939 122.1631) (xy 149.713585 122.096061) (xy 149.766389 122.050306) (xy 149.8179 122.0391) + (xy 149.9439 122.0391) (xy 149.9439 121.9131) (xy 149.963585 121.846061) (xy 150.016389 121.800306) + (xy 150.0679 121.7891) (xy 151.1189 121.7891) (xy 151.1189 121.672953) (xy 151.10392 121.559169) + (xy 151.103918 121.559164) (xy 151.045278 121.417593) (xy 151.045275 121.417588) (xy 151.00492 121.364996) + (xy 150.979726 121.299827) (xy 150.993764 121.231382) (xy 151.004921 121.214023) (xy 151.045712 121.160863) + (xy 151.068283 121.106372) (xy 151.104407 121.019163) (xy 151.1194 120.905277) (xy 151.119399 120.172924) + (xy 151.117697 120.159997) (xy 151.104408 120.059045) (xy 151.104407 120.059037) (xy 151.045712 119.917337) + (xy 150.952344 119.795656) (xy 150.830663 119.702288) (xy 150.830662 119.702287) (xy 150.688963 119.643593) + (xy 150.688961 119.643592) (xy 150.575078 119.6286) (xy 150.575077 119.6286) (xy 150.177945 119.6286) + (xy 150.148504 119.619955) (xy 150.118518 119.613432) (xy 150.113502 119.609677) (xy 150.110906 119.608915) + (xy 150.090264 119.592281) (xy 150.072768 119.574785) (xy 149.38012 118.882136) (xy 149.380115 118.882134) + (xy 149.296503 118.8475) (xy 148.319432 118.8475) (xy 148.252393 118.827815) (xy 148.206638 118.775011) + (xy 148.196694 118.705853) (xy 148.225719 118.642297) (xy 148.257432 118.616113) (xy 148.313683 118.583635) + (xy 148.441759 118.509691) (xy 148.669973 118.334577) (xy 148.873377 118.131173) (xy 149.048491 117.902959) + (xy 149.19232 117.653841) (xy 149.302402 117.38808) (xy 149.376853 117.110225) (xy 149.4144 116.825029) + (xy 149.4144 116.59655) (xy 151.2245 116.59655) (xy 151.2245 116.765849) (xy 151.250981 116.933047) + (xy 151.303296 117.094053) (xy 151.380152 117.244888) (xy 151.479648 117.381834) (xy 151.479652 117.381839) + (xy 151.59936 117.501547) (xy 151.599365 117.501551) (xy 151.718817 117.588337) (xy 151.736315 117.60105) + (xy 151.832425 117.65002) (xy 151.887146 117.677903) (xy 151.887148 117.677903) (xy 151.887151 117.677905) + (xy 151.97345 117.705945) (xy 152.048152 117.730218) (xy 152.215351 117.7567) (xy 152.215356 117.7567) + (xy 152.384649 117.7567) (xy 152.551847 117.730218) (xy 152.712849 117.677905) (xy 152.863685 117.60105) + (xy 153.000641 117.501546) (xy 153.120346 117.381841) (xy 153.21985 117.244885) (xy 153.296705 117.094049) + (xy 153.349018 116.933047) (xy 153.366125 116.825038) (xy 153.3755 116.765849) (xy 153.3755 116.59655) + (xy 153.349018 116.429352) (xy 153.304296 116.291713) (xy 153.296705 116.268351) (xy 153.296703 116.268348) + (xy 153.296703 116.268346) (xy 153.252676 116.18194) (xy 153.21985 116.117515) (xy 153.188281 116.074064) + (xy 153.120351 115.980565) (xy 153.120347 115.98056) (xy 153.000639 115.860852) (xy 153.000634 115.860848) + (xy 152.863688 115.761352) (xy 152.863687 115.761351) (xy 152.863685 115.76135) (xy 152.809831 115.73391) + (xy 152.712853 115.684496) (xy 152.551847 115.632181) (xy 152.384649 115.6057) (xy 152.384644 115.6057) + (xy 152.215356 115.6057) (xy 152.215351 115.6057) (xy 152.048152 115.632181) (xy 151.887146 115.684496) + (xy 151.736311 115.761352) (xy 151.599365 115.860848) (xy 151.59936 115.860852) (xy 151.479652 115.98056) + (xy 151.479648 115.980565) (xy 151.380152 116.117511) (xy 151.303296 116.268346) (xy 151.250981 116.429352) + (xy 151.2245 116.59655) (xy 149.4144 116.59655) (xy 149.4144 116.537371) (xy 149.376853 116.252175) + (xy 149.302402 115.97432) (xy 149.19232 115.708559) (xy 149.192318 115.708556) (xy 149.192316 115.708551) + (xy 149.048495 115.459448) (xy 149.048491 115.459441) (xy 148.944569 115.324007) (xy 148.873378 115.231228) + (xy 148.873372 115.231221) (xy 148.669978 115.027827) (xy 148.669971 115.027821) (xy 148.441767 114.852715) + (xy 148.441765 114.852713) (xy 148.441759 114.852709) (xy 148.441754 114.852706) (xy 148.441751 114.852704) + (xy 148.192648 114.708883) (xy 148.192631 114.708875) (xy 147.926878 114.598797) (xy 147.649023 114.524346) + (xy 147.363838 114.486801) (xy 147.363835 114.4868) (xy 147.363829 114.4868) (xy 147.076171 114.4868) + (xy 147.076165 114.4868) (xy 147.076161 114.486801) (xy 146.790976 114.524346) (xy 146.513121 114.598797) + (xy 146.247368 114.708875) (xy 146.247351 114.708883) (xy 145.998248 114.852704) (xy 145.998232 114.852715) + (xy 145.770028 115.027821) (xy 145.770021 115.027827) (xy 145.566627 115.231221) (xy 145.49543 115.324007) + (xy 145.439001 115.365209) (xy 145.369255 115.369364) (xy 145.308335 115.335151) (xy 145.275583 115.273434) + (xy 145.281396 115.203807) (xy 145.289661 115.186531) (xy 145.342863 115.094383) (xy 145.450742 114.833939) + (xy 145.523704 114.561642) (xy 145.5605 114.282151) (xy 145.5605 114.000249) (xy 145.523704 113.720758) + (xy 145.450742 113.448461) (xy 145.342863 113.188017) (xy 145.342861 113.188014) (xy 145.342859 113.188009) + (xy 145.201916 112.94389) (xy 145.201912 112.943883) (xy 145.0303 112.720235) (xy 145.030298 112.720233) + (xy 145.030295 112.720229) (xy 144.83097 112.520904) (xy 144.746889 112.456386) (xy 144.607317 112.349288) + (xy 144.607311 112.349284) (xy 144.607309 112.349283) (xy 144.36319 112.20834) (xy 144.363179 112.208335) + (xy 144.102743 112.100459) (xy 143.830439 112.027495) (xy 143.550958 111.9907) (xy 143.550951 111.9907) + (xy 143.269049 111.9907) (xy 143.269041 111.9907) (xy 142.98956 112.027495) (xy 142.717256 112.100459) + (xy 142.45682 112.208335) (xy 142.456809 112.20834) (xy 142.212692 112.349281) (xy 142.212683 112.349288) + (xy 142.192106 112.365076) (xy 142.126938 112.39027) (xy 142.116622 112.3907) (xy 141.724206 112.3907) + (xy 141.676753 112.381261) (xy 141.630253 112.362) (xy 140.493547 112.362) (xy 140.493545 112.362) + (xy 140.493543 112.362001) (xy 140.447045 112.381261) (xy 140.399593 112.3907) (xy 138.784998 112.3907) + (xy 138.784981 112.390701) (xy 138.682203 112.4012) (xy 138.6822 112.401201) (xy 138.515668 112.456385) + (xy 138.515663 112.456387) (xy 138.366342 112.548489) (xy 138.242289 112.672542) (xy 138.150187 112.821863) + (xy 138.150186 112.821866) (xy 138.095001 112.988403) (xy 138.095001 112.988404) (xy 138.095 112.988404) + (xy 138.0845 113.091183) (xy 138.0845 115.191201) (xy 138.084501 115.191218) (xy 138.095 115.293996) + (xy 138.095001 115.293999) (xy 138.104945 115.324007) (xy 138.150186 115.460534) (xy 138.242288 115.609856) + (xy 138.366344 115.733912) (xy 138.515666 115.826014) (xy 138.682203 115.881199) (xy 138.784991 115.8917) + (xy 140.712118 115.891699) (xy 140.712127 115.8917) (xy 141.140851 115.891699) (xy 141.207889 115.911383) + (xy 141.253644 115.964187) (xy 141.263588 116.033346) (xy 141.241169 116.088583) (xy 141.220151 116.117511) + (xy 141.143296 116.268346) (xy 141.090981 116.429352) (xy 141.0645 116.59655) (xy 141.0645 116.765849) + (xy 141.090981 116.933047) (xy 141.143296 117.094053) (xy 141.220152 117.244888) (xy 141.319648 117.381834) + (xy 141.319652 117.381839) (xy 141.43936 117.501547) (xy 141.439365 117.501551) (xy 141.558817 117.588337) + (xy 141.576315 117.60105) (xy 141.672425 117.65002) (xy 141.727146 117.677903) (xy 141.727148 117.677903) + (xy 141.727151 117.677905) (xy 141.81345 117.705945) (xy 141.888152 117.730218) (xy 142.055351 117.7567) + (xy 142.055356 117.7567) (xy 142.224649 117.7567) (xy 142.391847 117.730218) (xy 142.552849 117.677905) + (xy 142.703685 117.60105) (xy 142.840641 117.501546) (xy 142.960346 117.381841) (xy 143.05985 117.244885) + (xy 143.136705 117.094049) (xy 143.189018 116.933047) (xy 143.206125 116.825038) (xy 143.2155 116.765849) + (xy 143.2155 116.59655) (xy 143.189928 116.435098) (xy 143.198882 116.365805) (xy 143.243879 116.312353) + (xy 143.31063 116.291713) (xy 143.312401 116.2917) (xy 143.550944 116.2917) (xy 143.550951 116.2917) + (xy 143.830442 116.254904) (xy 144.102739 116.181942) (xy 144.363183 116.074063) (xy 144.607317 115.933112) + (xy 144.830965 115.7615) (xy 145.0303 115.562165) (xy 145.097992 115.473946) (xy 145.15442 115.432744) + (xy 145.224166 115.428589) (xy 145.285086 115.462801) (xy 145.317839 115.524518) (xy 145.312026 115.594146) + (xy 145.303755 115.611433) (xy 145.247683 115.708551) (xy 145.247675 115.708568) (xy 145.137597 115.974321) + (xy 145.063146 116.252176) (xy 145.025601 116.537361) (xy 145.0256 116.537377) (xy 145.0256 116.825022) + (xy 145.025601 116.825038) (xy 145.063146 117.110223) (xy 145.137597 117.388078) (xy 145.247675 117.653831) + (xy 145.247683 117.653848) (xy 145.391504 117.902951) (xy 145.391515 117.902967) (xy 145.566621 118.131171) + (xy 145.566627 118.131178) (xy 145.770021 118.334572) (xy 145.770027 118.334577) (xy 145.998241 118.509691) + (xy 145.998248 118.509695) (xy 146.182568 118.616113) (xy 146.230784 118.66668) (xy 146.244006 118.735287) + (xy 146.218038 118.800152) (xy 146.161124 118.84068) (xy 146.120568 118.8475) (xy 129.294432 118.8475) + (xy 129.227393 118.827815) (xy 129.181638 118.775011) (xy 129.171694 118.705853) (xy 129.200719 118.642297) + (xy 129.232432 118.616113) (xy 129.288683 118.583635) (xy 129.416759 118.509691) (xy 129.644973 118.334577) + (xy 129.848377 118.131173) (xy 130.023491 117.902959) (xy 130.16732 117.653841) (xy 130.277402 117.38808) + (xy 130.351853 117.110225) (xy 130.3894 116.825029) (xy 130.3894 116.59655) (xy 132.1995 116.59655) + (xy 132.1995 116.765849) (xy 132.225981 116.933047) (xy 132.278296 117.094053) (xy 132.355152 117.244888) + (xy 132.454648 117.381834) (xy 132.454652 117.381839) (xy 132.57436 117.501547) (xy 132.574365 117.501551) + (xy 132.693817 117.588337) (xy 132.711315 117.60105) (xy 132.807425 117.65002) (xy 132.862146 117.677903) + (xy 132.862148 117.677903) (xy 132.862151 117.677905) (xy 132.94845 117.705945) (xy 133.023152 117.730218) + (xy 133.190351 117.7567) (xy 133.190356 117.7567) (xy 133.359649 117.7567) (xy 133.526847 117.730218) + (xy 133.687849 117.677905) (xy 133.838685 117.60105) (xy 133.975641 117.501546) (xy 134.095346 117.381841) + (xy 134.19485 117.244885) (xy 134.271705 117.094049) (xy 134.324018 116.933047) (xy 134.341125 116.825038) + (xy 134.3505 116.765849) (xy 134.3505 116.59655) (xy 134.324018 116.429352) (xy 134.279296 116.291713) + (xy 134.271705 116.268351) (xy 134.271703 116.268348) (xy 134.271703 116.268346) (xy 134.227676 116.18194) + (xy 134.19485 116.117515) (xy 134.163281 116.074064) (xy 134.095351 115.980565) (xy 134.095347 115.98056) + (xy 133.975639 115.860852) (xy 133.975634 115.860848) (xy 133.838688 115.761352) (xy 133.838687 115.761351) + (xy 133.838685 115.76135) (xy 133.784831 115.73391) (xy 133.687853 115.684496) (xy 133.526847 115.632181) + (xy 133.359649 115.6057) (xy 133.359644 115.6057) (xy 133.190356 115.6057) (xy 133.190351 115.6057) + (xy 133.023152 115.632181) (xy 132.862146 115.684496) (xy 132.711311 115.761352) (xy 132.574365 115.860848) + (xy 132.57436 115.860852) (xy 132.454652 115.98056) (xy 132.454648 115.980565) (xy 132.355152 116.117511) + (xy 132.278296 116.268346) (xy 132.225981 116.429352) (xy 132.1995 116.59655) (xy 130.3894 116.59655) + (xy 130.3894 116.537371) (xy 130.351853 116.252175) (xy 130.277402 115.97432) (xy 130.16732 115.708559) + (xy 130.167318 115.708556) (xy 130.167316 115.708551) (xy 130.023495 115.459448) (xy 130.023491 115.459441) + (xy 129.919569 115.324007) (xy 129.848378 115.231228) (xy 129.848372 115.231221) (xy 129.644978 115.027827) + (xy 129.644971 115.027821) (xy 129.416767 114.852715) (xy 129.416765 114.852713) (xy 129.416759 114.852709) + (xy 129.416754 114.852706) (xy 129.416751 114.852704) (xy 129.167648 114.708883) (xy 129.167631 114.708875) + (xy 128.901878 114.598797) (xy 128.624023 114.524346) (xy 128.338838 114.486801) (xy 128.338835 114.4868) + (xy 128.338829 114.4868) (xy 128.051171 114.4868) (xy 128.051165 114.4868) (xy 128.051161 114.486801) + (xy 127.765976 114.524346) (xy 127.488121 114.598797) (xy 127.222368 114.708875) (xy 127.222351 114.708883) + (xy 126.973248 114.852704) (xy 126.973232 114.852715) (xy 126.745028 115.027821) (xy 126.745021 115.027827) + (xy 126.541627 115.231221) (xy 126.47043 115.324007) (xy 126.414001 115.365209) (xy 126.344255 115.369364) + (xy 126.283335 115.335151) (xy 126.250583 115.273434) (xy 126.256396 115.203807) (xy 126.264661 115.186531) + (xy 126.317863 115.094383) (xy 126.425742 114.833939) (xy 126.498704 114.561642) (xy 126.5355 114.282151) + (xy 126.5355 114.000249) (xy 126.498704 113.720758) (xy 126.425742 113.448461) (xy 126.317863 113.188017) + (xy 126.317861 113.188014) (xy 126.317859 113.188009) (xy 126.176916 112.94389) (xy 126.176912 112.943883) + (xy 126.0053 112.720235) (xy 126.005298 112.720233) (xy 126.005295 112.720229) (xy 125.80597 112.520904) + (xy 125.721889 112.456386) (xy 125.582317 112.349288) (xy 125.582311 112.349284) (xy 125.582309 112.349283) + (xy 125.33819 112.20834) (xy 125.338179 112.208335) (xy 125.077743 112.100459) (xy 124.805439 112.027495) + (xy 124.525958 111.9907) (xy 124.525951 111.9907) (xy 124.244049 111.9907) (xy 124.244041 111.9907) + (xy 123.96456 112.027495) (xy 123.692256 112.100459) (xy 123.43182 112.208335) (xy 123.431809 112.20834) + (xy 123.187692 112.349281) (xy 123.187683 112.349288) (xy 123.167106 112.365076) (xy 123.101938 112.39027) + (xy 123.091622 112.3907) (xy 119.759998 112.3907) (xy 119.759981 112.390701) (xy 119.657203 112.4012) + (xy 119.6572 112.401201) (xy 119.490668 112.456385) (xy 119.490663 112.456387) (xy 119.341342 112.548489) + (xy 119.217289 112.672542) (xy 119.125187 112.821863) (xy 119.125186 112.821866) (xy 119.070001 112.988403) + (xy 119.070001 112.988404) (xy 119.07 112.988404) (xy 119.0595 113.091183) (xy 119.0595 115.191201) + (xy 119.059501 115.191218) (xy 119.07 115.293996) (xy 119.070001 115.293999) (xy 119.079945 115.324007) + (xy 119.125186 115.460534) (xy 119.217288 115.609856) (xy 119.341344 115.733912) (xy 119.490666 115.826014) + (xy 119.657203 115.881199) (xy 119.759991 115.8917) (xy 121.687118 115.891699) (xy 121.687127 115.8917) + (xy 122.115851 115.891699) (xy 122.182889 115.911383) (xy 122.228644 115.964187) (xy 122.238588 116.033346) + (xy 122.216169 116.088583) (xy 122.195151 116.117511) (xy 122.118296 116.268346) (xy 122.065981 116.429352) + (xy 122.0395 116.59655) (xy 122.0395 116.765849) (xy 122.065981 116.933047) (xy 122.118296 117.094053) + (xy 122.195152 117.244888) (xy 122.294648 117.381834) (xy 122.294652 117.381839) (xy 122.41436 117.501547) + (xy 122.414365 117.501551) (xy 122.533817 117.588337) (xy 122.551315 117.60105) (xy 122.647425 117.65002) + (xy 122.702146 117.677903) (xy 122.702148 117.677903) (xy 122.702151 117.677905) (xy 122.78845 117.705945) + (xy 122.863152 117.730218) (xy 123.030351 117.7567) (xy 123.030356 117.7567) (xy 123.199649 117.7567) + (xy 123.366847 117.730218) (xy 123.527849 117.677905) (xy 123.678685 117.60105) (xy 123.815641 117.501546) + (xy 123.935346 117.381841) (xy 124.03485 117.244885) (xy 124.111705 117.094049) (xy 124.164018 116.933047) + (xy 124.181125 116.825038) (xy 124.1905 116.765849) (xy 124.1905 116.59655) (xy 124.164928 116.435098) + (xy 124.173882 116.365805) (xy 124.218879 116.312353) (xy 124.28563 116.291713) (xy 124.287401 116.2917) + (xy 124.525944 116.2917) (xy 124.525951 116.2917) (xy 124.805442 116.254904) (xy 125.077739 116.181942) + (xy 125.338183 116.074063) (xy 125.582317 115.933112) (xy 125.805965 115.7615) (xy 126.0053 115.562165) + (xy 126.072992 115.473946) (xy 126.12942 115.432744) (xy 126.199166 115.428589) (xy 126.260086 115.462801) + (xy 126.292839 115.524518) (xy 126.287026 115.594146) (xy 126.278755 115.611433) (xy 126.222683 115.708551) + (xy 126.222675 115.708568) (xy 126.112597 115.974321) (xy 126.038146 116.252176) (xy 126.000601 116.537361) + (xy 126.0006 116.537377) (xy 126.0006 116.825022) (xy 126.000601 116.825038) (xy 126.038146 117.110223) + (xy 126.112597 117.388078) (xy 126.222675 117.653831) (xy 126.222683 117.653848) (xy 126.366504 117.902951) + (xy 126.366515 117.902967) (xy 126.541621 118.131171) (xy 126.541627 118.131178) (xy 126.745021 118.334572) + (xy 126.745027 118.334577) (xy 126.973241 118.509691) (xy 126.973248 118.509695) (xy 127.157568 118.616113) + (xy 127.205784 118.66668) (xy 127.219006 118.735287) (xy 127.193038 118.800152) (xy 127.136124 118.84068) + (xy 127.095568 118.8475) (xy 125.458553 118.8475) (xy 125.368047 118.8475) (xy 125.368045 118.8475) + (xy 125.368043 118.847501) (xy 125.284434 118.882131) (xy 125.284432 118.882133) (xy 124.568655 119.597912) + (xy 124.330632 119.835935) (xy 124.266635 119.899932) (xy 124.250866 119.938001) (xy 124.232 119.983546) + (xy 124.232 121.100053) (xy 124.266636 121.18367) (xy 124.333829 121.250863) (xy 124.367314 121.312186) + (xy 124.36233 121.381878) (xy 124.34453 121.414022) (xy 124.341988 121.417334) (xy 124.283293 121.559036) + (xy 124.283292 121.559038) (xy 124.2683 121.672922) (xy 124.2683 122.405278) (xy 124.283291 122.519154) + (xy 124.283292 122.51916) (xy 124.283293 122.519163) (xy 124.298503 122.555882) (xy 124.341987 122.660862) + (xy 124.347626 122.668211) (xy 124.435356 122.782544) (xy 124.557037 122.875912) (xy 124.698737 122.934607) + (xy 124.812623 122.9496) (xy 125.950229 122.949599) (xy 126.017268 122.969284) (xy 126.049432 122.999203) + (xy 126.124238 123.098952) (xy 126.124239 123.098953) (xy 126.12424 123.098954) (xy 126.258432 123.222795) + (xy 126.412825 123.320297) (xy 126.522501 123.364262) (xy 126.582314 123.388239) (xy 126.582315 123.388239) + (xy 126.582317 123.38824) (xy 126.761308 123.424379) (xy 126.761302 123.424379) (xy 126.777622 123.424659) + (xy 126.943884 123.42752) (xy 127.124012 123.397558) (xy 127.19978 123.37017) (xy 127.295736 123.335485) + (xy 127.295737 123.335483) (xy 127.29574 123.335483) (xy 127.310775 123.32672) (xy 127.317459 123.322835) + (xy 127.31775 123.322757) (xy 127.345633 123.30646) (xy 127.345751 123.306392) (xy 127.348968 123.305601) + (xy 127.408062 123.289599) (xy 128.889192 123.289599) (xy 128.889314 123.289606) (xy 128.897405 123.289605) + (xy 128.897408 123.289606) (xy 128.929542 123.289602) (xy 128.992104 123.306534) (xy 129.01993 123.322791) + (xy 129.019932 123.322791) (xy 129.02608 123.326383) (xy 129.027735 123.327208) (xy 129.041878 123.33545) + (xy 129.2136 123.397521) (xy 129.393721 123.427482) (xy 129.573398 123.42439) (xy 129.576291 123.424341) + (xy 129.755266 123.388205) (xy 129.755269 123.388203) (xy 129.755274 123.388203) (xy 129.92476 123.320262) + (xy 130.079146 123.222763) (xy 130.088641 123.214001) (xy 130.21333 123.09893) (xy 130.213332 123.098928) + (xy 130.215214 123.096419) (xy 130.288496 122.998702) (xy 130.344465 122.95688) (xy 130.387698 122.949099) + (xy 130.6438 122.949099) (xy 131.1438 122.949099) (xy 131.199732 122.949099) (xy 131.283724 122.93855) + (xy 131.416557 122.883529) (xy 131.483404 122.8316) (xy 131.483411 122.831594) (xy 131.951294 122.363712) + (xy 131.951299 122.363706) (xy 132.003227 122.29686) (xy 132.006442 122.2891) (xy 131.1438 122.2891) + (xy 131.1438 122.949099) (xy 130.6438 122.949099) (xy 130.6438 122.1631) (xy 130.663485 122.096061) + (xy 130.716289 122.050306) (xy 130.7678 122.0391) (xy 130.8938 122.0391) (xy 130.8938 121.9131) + (xy 130.913485 121.846061) (xy 130.966289 121.800306) (xy 131.0178 121.7891) (xy 132.0688 121.7891) + (xy 132.0688 121.672953) (xy 132.05382 121.559169) (xy 132.053818 121.559164) (xy 131.995178 121.417593) + (xy 131.995175 121.417588) (xy 131.95482 121.364996) (xy 131.929626 121.299827) (xy 131.943664 121.231382) + (xy 131.944912 121.229089) (xy 131.949312 121.221201) (xy 131.995612 121.160863) (xy 132.032004 121.073005) + (xy 132.035516 121.066712) (xy 132.055507 121.047083) (xy 132.07308 121.025277) (xy 132.080095 121.022942) + (xy 132.085372 121.017761) (xy 132.112798 121.012057) (xy 132.139374 121.003212) (xy 132.146538 121.00504) + (xy 132.153778 121.003535) (xy 132.179933 121.013564) (xy 132.207073 121.020491) (xy 132.215917 121.027362) + (xy 132.219016 121.02855) (xy 132.221099 121.031387) (xy 132.231477 121.039449) (xy 132.405644 121.213615) + (xy 132.693755 121.501726) (xy 132.72724 121.563049) (xy 132.730074 121.589407) (xy 132.730074 122.488843) + (xy 132.710389 122.555882) (xy 132.693755 122.576524) (xy 131.113721 124.156558) (xy 131.052398 124.190043) + (xy 131.02604 124.192877) (xy 107.992223 124.192877) (xy 107.925184 124.173192) (xy 107.904542 124.156558) + (xy 107.299194 123.55121) (xy 107.265709 123.489887) (xy 107.270693 123.420195) (xy 107.312565 123.364262) + (xy 107.378029 123.339845) (xy 107.433009 123.348431) (xy 107.532317 123.38824) (xy 107.711308 123.424379) + (xy 107.711302 123.424379) (xy 107.727622 123.424659) (xy 107.893884 123.42752) (xy 108.074012 123.397558) + (xy 108.14978 123.37017) (xy 108.245736 123.335485) (xy 108.245737 123.335483) (xy 108.24574 123.335483) + (xy 108.260775 123.32672) (xy 108.267459 123.322835) (xy 108.26775 123.322757) (xy 108.295633 123.30646) + (xy 108.295751 123.306392) (xy 108.298968 123.305601) (xy 108.358062 123.289599) (xy 109.839192 123.289599) + (xy 109.839314 123.289606) (xy 109.847405 123.289605) (xy 109.847408 123.289606) (xy 109.879542 123.289602) + (xy 109.942104 123.306534) (xy 109.96993 123.322791) (xy 109.969932 123.322791) (xy 109.97608 123.326383) + (xy 109.977735 123.327208) (xy 109.991878 123.33545) (xy 110.1636 123.397521) (xy 110.343721 123.427482) + (xy 110.523398 123.42439) (xy 110.526291 123.424341) (xy 110.705266 123.388205) (xy 110.705269 123.388203) + (xy 110.705274 123.388203) (xy 110.87476 123.320262) (xy 111.029146 123.222763) (xy 111.038641 123.214001) + (xy 111.16333 123.09893) (xy 111.163332 123.098928) (xy 111.165214 123.096419) (xy 111.238496 122.998702) + (xy 111.294465 122.95688) (xy 111.337698 122.949099) (xy 111.5938 122.949099) (xy 112.0938 122.949099) + (xy 112.149732 122.949099) (xy 112.233724 122.93855) (xy 112.366557 122.883529) (xy 112.433404 122.8316) + (xy 112.433411 122.831594) (xy 112.901294 122.363712) (xy 112.901299 122.363706) (xy 112.953227 122.29686) + (xy 112.956442 122.2891) (xy 112.0938 122.2891) (xy 112.0938 122.949099) (xy 111.5938 122.949099) + (xy 111.5938 122.1631) (xy 111.613485 122.096061) (xy 111.666289 122.050306) (xy 111.7178 122.0391) + (xy 111.8438 122.0391) (xy 111.8438 121.9131) (xy 111.863485 121.846061) (xy 111.916289 121.800306) + (xy 111.9678 121.7891) (xy 113.0188 121.7891) (xy 113.0188 121.672953) (xy 113.00382 121.559169) + (xy 113.003818 121.559164) (xy 112.945178 121.417593) (xy 112.945175 121.417588) (xy 112.90482 121.364996) + (xy 112.879626 121.299827) (xy 112.893664 121.231382) (xy 112.904821 121.214023) (xy 112.945612 121.160863) + (xy 112.968183 121.106372) (xy 113.004307 121.019163) (xy 113.0193 120.905277) (xy 113.019299 120.172924) + (xy 113.017597 120.159997) (xy 113.004308 120.059045) (xy 113.004307 120.059037) (xy 112.945612 119.917337) + (xy 112.852244 119.795656) (xy 112.730563 119.702288) (xy 112.730562 119.702287) (xy 112.588863 119.643593) + (xy 112.588861 119.643592) (xy 112.474978 119.6286) (xy 112.474977 119.6286) (xy 111.870128 119.6286) + (xy 111.803089 119.608915) (xy 111.782447 119.592281) (xy 111.059863 118.869696) (xy 111.059858 118.869694) + (xy 110.976246 118.83506) (xy 110.265979 118.83506) (xy 110.19894 118.815375) (xy 110.153185 118.762571) + (xy 110.143241 118.693413) (xy 110.172266 118.629857) (xy 110.203979 118.603673) (xy 110.276298 118.561918) + (xy 110.366759 118.509691) (xy 110.594973 118.334577) (xy 110.798377 118.131173) (xy 110.973491 117.902959) + (xy 111.11732 117.653841) (xy 111.227402 117.38808) (xy 111.301853 117.110225) (xy 111.3394 116.825029) + (xy 111.3394 116.59655) (xy 113.1495 116.59655) (xy 113.1495 116.765849) (xy 113.175981 116.933047) + (xy 113.228296 117.094053) (xy 113.305152 117.244888) (xy 113.404648 117.381834) (xy 113.404652 117.381839) + (xy 113.52436 117.501547) (xy 113.524365 117.501551) (xy 113.643817 117.588337) (xy 113.661315 117.60105) + (xy 113.757425 117.65002) (xy 113.812146 117.677903) (xy 113.812148 117.677903) (xy 113.812151 117.677905) + (xy 113.89845 117.705945) (xy 113.973152 117.730218) (xy 114.140351 117.7567) (xy 114.140356 117.7567) + (xy 114.309649 117.7567) (xy 114.476847 117.730218) (xy 114.637849 117.677905) (xy 114.788685 117.60105) + (xy 114.925641 117.501546) (xy 115.045346 117.381841) (xy 115.14485 117.244885) (xy 115.221705 117.094049) + (xy 115.274018 116.933047) (xy 115.291125 116.825038) (xy 115.3005 116.765849) (xy 115.3005 116.59655) + (xy 115.274018 116.429352) (xy 115.229296 116.291713) (xy 115.221705 116.268351) (xy 115.221703 116.268348) + (xy 115.221703 116.268346) (xy 115.177676 116.18194) (xy 115.14485 116.117515) (xy 115.113281 116.074064) + (xy 115.045351 115.980565) (xy 115.045347 115.98056) (xy 114.925639 115.860852) (xy 114.925634 115.860848) + (xy 114.788688 115.761352) (xy 114.788687 115.761351) (xy 114.788685 115.76135) (xy 114.734831 115.73391) + (xy 114.637853 115.684496) (xy 114.476847 115.632181) (xy 114.309649 115.6057) (xy 114.309644 115.6057) + (xy 114.140356 115.6057) (xy 114.140351 115.6057) (xy 113.973152 115.632181) (xy 113.812146 115.684496) + (xy 113.661311 115.761352) (xy 113.524365 115.860848) (xy 113.52436 115.860852) (xy 113.404652 115.98056) + (xy 113.404648 115.980565) (xy 113.305152 116.117511) (xy 113.228296 116.268346) (xy 113.175981 116.429352) + (xy 113.1495 116.59655) (xy 111.3394 116.59655) (xy 111.3394 116.537371) (xy 111.301853 116.252175) + (xy 111.227402 115.97432) (xy 111.11732 115.708559) (xy 111.117318 115.708556) (xy 111.117316 115.708551) + (xy 110.973495 115.459448) (xy 110.973491 115.459441) (xy 110.869569 115.324007) (xy 110.798378 115.231228) + (xy 110.798372 115.231221) (xy 110.594978 115.027827) (xy 110.594971 115.027821) (xy 110.366767 114.852715) + (xy 110.366765 114.852713) (xy 110.366759 114.852709) (xy 110.366754 114.852706) (xy 110.366751 114.852704) + (xy 110.117648 114.708883) (xy 110.117631 114.708875) (xy 109.851878 114.598797) (xy 109.574023 114.524346) + (xy 109.288838 114.486801) (xy 109.288835 114.4868) (xy 109.288829 114.4868) (xy 109.001171 114.4868) + (xy 109.001165 114.4868) (xy 109.001161 114.486801) (xy 108.715976 114.524346) (xy 108.438121 114.598797) + (xy 108.172368 114.708875) (xy 108.172351 114.708883) (xy 107.923248 114.852704) (xy 107.923232 114.852715) + (xy 107.695028 115.027821) (xy 107.695021 115.027827) (xy 107.491627 115.231221) (xy 107.42043 115.324007) + (xy 107.364001 115.365209) (xy 107.294255 115.369364) (xy 107.233335 115.335151) (xy 107.200583 115.273434) + (xy 107.206396 115.203807) (xy 107.214661 115.186531) (xy 107.267863 115.094383) (xy 107.375742 114.833939) + (xy 107.448704 114.561642) (xy 107.4855 114.282151) (xy 107.4855 114.000249) (xy 107.448704 113.720758) + (xy 107.375742 113.448461) (xy 107.267863 113.188017) (xy 107.267861 113.188014) (xy 107.267859 113.188009) + (xy 107.126916 112.94389) (xy 107.126912 112.943883) (xy 106.9553 112.720235) (xy 106.955298 112.720233) + (xy 106.955295 112.720229) (xy 106.75597 112.520904) (xy 106.671889 112.456386) (xy 106.532317 112.349288) + (xy 106.532311 112.349284) (xy 106.532309 112.349283) (xy 106.28819 112.20834) (xy 106.288179 112.208335) + (xy 106.027743 112.100459) (xy 105.755439 112.027495) (xy 105.475958 111.9907) (xy 105.475951 111.9907) + (xy 105.194049 111.9907) (xy 105.194041 111.9907) (xy 104.91456 112.027495) (xy 104.642256 112.100459) + (xy 104.38182 112.208335) (xy 104.381809 112.20834) (xy 104.137692 112.349281) (xy 104.137683 112.349288) + (xy 104.117106 112.365076) (xy 104.051938 112.39027) (xy 104.041622 112.3907) (xy 100.709998 112.3907) + (xy 100.709981 112.390701) (xy 100.607203 112.4012) (xy 100.6072 112.401201) (xy 100.440668 112.456385) + (xy 100.440663 112.456387) (xy 100.291342 112.548489) (xy 100.167289 112.672542) (xy 100.075187 112.821863) + (xy 100.075186 112.821866) (xy 100.020001 112.988403) (xy 100.020001 112.988404) (xy 100.02 112.988404) + (xy 100.0095 113.091183) (xy 100.0095 115.191201) (xy 100.009501 115.191218) (xy 100.02 115.293996) + (xy 100.020001 115.293999) (xy 100.029945 115.324007) (xy 100.075186 115.460534) (xy 100.167288 115.609856) + (xy 100.291344 115.733912) (xy 100.440666 115.826014) (xy 100.607203 115.881199) (xy 100.709991 115.8917) + (xy 102.637118 115.891699) (xy 102.637127 115.8917) (xy 103.065851 115.891699) (xy 103.132889 115.911383) + (xy 103.178644 115.964187) (xy 103.188588 116.033346) (xy 103.166169 116.088583) (xy 103.145151 116.117511) + (xy 103.068296 116.268346) (xy 103.015981 116.429352) (xy 102.9895 116.59655) (xy 102.9895 116.765849) + (xy 103.015981 116.933047) (xy 103.068296 117.094053) (xy 103.145152 117.244888) (xy 103.244648 117.381834) + (xy 103.244652 117.381839) (xy 103.36436 117.501547) (xy 103.364365 117.501551) (xy 103.483817 117.588337) + (xy 103.501315 117.60105) (xy 103.597425 117.65002) (xy 103.652146 117.677903) (xy 103.652148 117.677903) + (xy 103.652151 117.677905) (xy 103.73845 117.705945) (xy 103.813152 117.730218) (xy 103.980351 117.7567) + (xy 103.980356 117.7567) (xy 104.149649 117.7567) (xy 104.316847 117.730218) (xy 104.477849 117.677905) + (xy 104.628685 117.60105) (xy 104.765641 117.501546) (xy 104.885346 117.381841) (xy 104.98485 117.244885) + (xy 105.061705 117.094049) (xy 105.114018 116.933047) (xy 105.131125 116.825038) (xy 105.1405 116.765849) + (xy 105.1405 116.59655) (xy 105.114928 116.435098) (xy 105.123882 116.365805) (xy 105.168879 116.312353) + (xy 105.23563 116.291713) (xy 105.237401 116.2917) (xy 105.475944 116.2917) (xy 105.475951 116.2917) + (xy 105.755442 116.254904) (xy 106.027739 116.181942) (xy 106.288183 116.074063) (xy 106.532317 115.933112) + (xy 106.755965 115.7615) (xy 106.9553 115.562165) (xy 107.022992 115.473946) (xy 107.07942 115.432744) + (xy 107.149166 115.428589) (xy 107.210086 115.462801) (xy 107.242839 115.524518) (xy 107.237026 115.594146) + (xy 107.228755 115.611433) (xy 107.172683 115.708551) (xy 107.172675 115.708568) (xy 107.062597 115.974321) + (xy 106.988146 116.252176) (xy 106.950601 116.537361) (xy 106.9506 116.537377) (xy 106.9506 116.825022) + (xy 106.950601 116.825038) (xy 106.988146 117.110223) (xy 107.062597 117.388078) (xy 107.172675 117.653831) + (xy 107.172683 117.653848) (xy 107.316504 117.902951) (xy 107.316515 117.902967) (xy 107.491621 118.131171) + (xy 107.491627 118.131178) (xy 107.695021 118.334572) (xy 107.695027 118.334577) (xy 107.923241 118.509691) + (xy 107.923248 118.509695) (xy 108.086021 118.603673) (xy 108.134237 118.65424) (xy 108.147459 118.722847) + (xy 108.121491 118.787712) (xy 108.064577 118.82824) (xy 108.024021 118.83506) (xy 91.215979 118.83506) + (xy 91.14894 118.815375) (xy 91.103185 118.762571) (xy 91.093241 118.693413) (xy 91.122266 118.629857) + (xy 91.153979 118.603673) (xy 91.226298 118.561918) (xy 91.316759 118.509691) (xy 91.544973 118.334577) + (xy 91.748377 118.131173) (xy 91.923491 117.902959) (xy 92.06732 117.653841) (xy 92.177402 117.38808) + (xy 92.251853 117.110225) (xy 92.2894 116.825029) (xy 92.2894 116.59655) (xy 94.0995 116.59655) + (xy 94.0995 116.765849) (xy 94.125981 116.933047) (xy 94.178296 117.094053) (xy 94.255152 117.244888) + (xy 94.354648 117.381834) (xy 94.354652 117.381839) (xy 94.47436 117.501547) (xy 94.474365 117.501551) + (xy 94.593817 117.588337) (xy 94.611315 117.60105) (xy 94.707425 117.65002) (xy 94.762146 117.677903) + (xy 94.762148 117.677903) (xy 94.762151 117.677905) (xy 94.84845 117.705945) (xy 94.923152 117.730218) + (xy 95.090351 117.7567) (xy 95.090356 117.7567) (xy 95.259649 117.7567) (xy 95.426847 117.730218) + (xy 95.587849 117.677905) (xy 95.738685 117.60105) (xy 95.875641 117.501546) (xy 95.995346 117.381841) + (xy 96.09485 117.244885) (xy 96.171705 117.094049) (xy 96.224018 116.933047) (xy 96.241125 116.825038) + (xy 96.2505 116.765849) (xy 96.2505 116.59655) (xy 96.224018 116.429352) (xy 96.179296 116.291713) + (xy 96.171705 116.268351) (xy 96.171703 116.268348) (xy 96.171703 116.268346) (xy 96.127676 116.18194) + (xy 96.09485 116.117515) (xy 96.063281 116.074064) (xy 95.995351 115.980565) (xy 95.995347 115.98056) + (xy 95.875639 115.860852) (xy 95.875634 115.860848) (xy 95.738688 115.761352) (xy 95.738687 115.761351) + (xy 95.738685 115.76135) (xy 95.684831 115.73391) (xy 95.587853 115.684496) (xy 95.426847 115.632181) + (xy 95.259649 115.6057) (xy 95.259644 115.6057) (xy 95.090356 115.6057) (xy 95.090351 115.6057) + (xy 94.923152 115.632181) (xy 94.762146 115.684496) (xy 94.611311 115.761352) (xy 94.474365 115.860848) + (xy 94.47436 115.860852) (xy 94.354652 115.98056) (xy 94.354648 115.980565) (xy 94.255152 116.117511) + (xy 94.178296 116.268346) (xy 94.125981 116.429352) (xy 94.0995 116.59655) (xy 92.2894 116.59655) + (xy 92.2894 116.537371) (xy 92.251853 116.252175) (xy 92.177402 115.97432) (xy 92.06732 115.708559) + (xy 92.067318 115.708556) (xy 92.067316 115.708551) (xy 91.923495 115.459448) (xy 91.923491 115.459441) + (xy 91.819569 115.324007) (xy 91.748378 115.231228) (xy 91.748372 115.231221) (xy 91.544978 115.027827) + (xy 91.544971 115.027821) (xy 91.316767 114.852715) (xy 91.316765 114.852713) (xy 91.316759 114.852709) + (xy 91.316754 114.852706) (xy 91.316751 114.852704) (xy 91.067648 114.708883) (xy 91.067631 114.708875) + (xy 90.801878 114.598797) (xy 90.524023 114.524346) (xy 90.238838 114.486801) (xy 90.238835 114.4868) + (xy 90.238829 114.4868) (xy 89.951171 114.4868) (xy 89.951165 114.4868) (xy 89.951161 114.486801) + (xy 89.665976 114.524346) (xy 89.388121 114.598797) (xy 89.122368 114.708875) (xy 89.122351 114.708883) + (xy 88.873248 114.852704) (xy 88.873232 114.852715) (xy 88.645028 115.027821) (xy 88.645021 115.027827) + (xy 88.441627 115.231221) (xy 88.37043 115.324007) (xy 88.314001 115.365209) (xy 88.244255 115.369364) + (xy 88.183335 115.335151) (xy 88.150583 115.273434) (xy 88.156396 115.203807) (xy 88.164661 115.186531) + (xy 88.217863 115.094383) (xy 88.325742 114.833939) (xy 88.398704 114.561642) (xy 88.4355 114.282151) + (xy 88.4355 114.000249) (xy 88.398704 113.720758) (xy 88.325742 113.448461) (xy 88.217863 113.188017) + (xy 88.217861 113.188014) (xy 88.217859 113.188009) (xy 88.076916 112.94389) (xy 88.076912 112.943883) + (xy 87.9053 112.720235) (xy 87.905298 112.720233) (xy 87.905295 112.720229) (xy 87.70597 112.520904) + (xy 87.621889 112.456386) (xy 87.482317 112.349288) (xy 87.482311 112.349284) (xy 87.482309 112.349283) + (xy 87.23819 112.20834) (xy 87.238179 112.208335) (xy 86.977743 112.100459) (xy 86.705439 112.027495) + (xy 86.425958 111.9907) (xy 86.425951 111.9907) (xy 86.144049 111.9907) (xy 86.144041 111.9907) + (xy 85.86456 112.027495) (xy 85.592256 112.100459) (xy 85.33182 112.208335) (xy 85.331809 112.20834) + (xy 85.087692 112.349281) (xy 85.087683 112.349288) (xy 85.067106 112.365076) (xy 85.001938 112.39027) + (xy 84.991622 112.3907) (xy 81.659998 112.3907) (xy 81.659981 112.390701) (xy 81.557203 112.4012) + (xy 81.5572 112.401201) (xy 81.390668 112.456385) (xy 81.390663 112.456387) (xy 81.241342 112.548489) + (xy 81.117289 112.672542) (xy 81.025187 112.821863) (xy 81.025186 112.821866) (xy 80.970001 112.988403) + (xy 80.970001 112.988404) (xy 80.97 112.988404) (xy 80.9595 113.091183) (xy 80.9595 115.191201) + (xy 80.959501 115.191218) (xy 80.97 115.293996) (xy 80.970001 115.293999) (xy 80.979945 115.324007) + (xy 81.025186 115.460534) (xy 81.117288 115.609856) (xy 81.241344 115.733912) (xy 81.390666 115.826014) + (xy 81.557203 115.881199) (xy 81.659991 115.8917) (xy 83.587118 115.891699) (xy 83.587127 115.8917) + (xy 84.015851 115.891699) (xy 84.082889 115.911383) (xy 84.128644 115.964187) (xy 84.138588 116.033346) + (xy 84.116169 116.088583) (xy 84.095151 116.117511) (xy 84.018296 116.268346) (xy 83.965981 116.429352) + (xy 83.9395 116.59655) (xy 83.9395 116.765849) (xy 83.965981 116.933047) (xy 84.018296 117.094053) + (xy 84.095152 117.244888) (xy 84.194648 117.381834) (xy 84.194652 117.381839) (xy 84.31436 117.501547) + (xy 84.314365 117.501551) (xy 84.433817 117.588337) (xy 84.451315 117.60105) (xy 84.547425 117.65002) + (xy 84.602146 117.677903) (xy 84.602148 117.677903) (xy 84.602151 117.677905) (xy 84.68845 117.705945) + (xy 84.763152 117.730218) (xy 84.930351 117.7567) (xy 84.930356 117.7567) (xy 85.099649 117.7567) + (xy 85.266847 117.730218) (xy 85.427849 117.677905) (xy 85.578685 117.60105) (xy 85.715641 117.501546) + (xy 85.835346 117.381841) (xy 85.93485 117.244885) (xy 86.011705 117.094049) (xy 86.064018 116.933047) + (xy 86.081125 116.825038) (xy 86.0905 116.765849) (xy 86.0905 116.59655) (xy 86.064928 116.435098) + (xy 86.073882 116.365805) (xy 86.118879 116.312353) (xy 86.18563 116.291713) (xy 86.187401 116.2917) + (xy 86.425944 116.2917) (xy 86.425951 116.2917) (xy 86.705442 116.254904) (xy 86.977739 116.181942) + (xy 87.238183 116.074063) (xy 87.482317 115.933112) (xy 87.705965 115.7615) (xy 87.9053 115.562165) + (xy 87.972992 115.473946) (xy 88.02942 115.432744) (xy 88.099166 115.428589) (xy 88.160086 115.462801) + (xy 88.192839 115.524518) (xy 88.187026 115.594146) (xy 88.178755 115.611433) (xy 88.122683 115.708551) + (xy 88.122675 115.708568) (xy 88.012597 115.974321) (xy 87.938146 116.252176) (xy 87.900601 116.537361) + (xy 87.9006 116.537377) (xy 87.9006 116.825022) (xy 87.900601 116.825038) (xy 87.938146 117.110223) + (xy 88.012597 117.388078) (xy 88.122675 117.653831) (xy 88.122683 117.653848) (xy 88.266504 117.902951) + (xy 88.266515 117.902967) (xy 88.441621 118.131171) (xy 88.441627 118.131178) (xy 88.645021 118.334572) + (xy 88.645027 118.334577) (xy 88.873241 118.509691) (xy 88.873248 118.509695) (xy 89.036021 118.603673) + (xy 89.084237 118.65424) (xy 89.097459 118.722847) (xy 89.071491 118.787712) (xy 89.014577 118.82824) + (xy 88.974021 118.83506) (xy 86.568413 118.83506) (xy 86.477907 118.83506) (xy 86.477905 118.83506) + (xy 86.477903 118.835061) (xy 86.394294 118.869691) (xy 86.394292 118.869693) (xy 85.946267 119.31772) + (xy 85.798979 119.465008) (xy 85.734982 119.529005) (xy 85.723754 119.556111) (xy 85.701882 119.608915) + (xy 85.700347 119.61262) (xy 85.700347 120.577894) (xy 85.700347 120.6684) (xy 85.721567 120.71963) + (xy 85.734983 120.752017) (xy 86.23383 121.250863) (xy 86.267315 121.312186) (xy 86.262331 121.381877) + (xy 86.244526 121.414029) (xy 86.241987 121.417337) (xy 86.183293 121.559036) (xy 86.183292 121.559038) + (xy 86.1683 121.672922) (xy 86.1683 122.405278) (xy 86.183291 122.519154) (xy 86.183292 122.51916) + (xy 86.183293 122.519163) (xy 86.198503 122.555882) (xy 86.241987 122.660862) (xy 86.247626 122.668211) + (xy 86.335356 122.782544) (xy 86.457037 122.875912) (xy 86.598737 122.934607) (xy 86.712623 122.9496) + (xy 87.850229 122.949599) (xy 87.917268 122.969284) (xy 87.949432 122.999203) (xy 88.024238 123.098952) + (xy 88.024239 123.098953) (xy 88.02424 123.098954) (xy 88.158432 123.222795) (xy 88.312825 123.320297) + (xy 88.422501 123.364262) (xy 88.482314 123.388239) (xy 88.482315 123.388239) (xy 88.482317 123.38824) + (xy 88.661308 123.424379) (xy 88.661302 123.424379) (xy 88.677622 123.424659) (xy 88.843884 123.42752) + (xy 89.024012 123.397558) (xy 89.09978 123.37017) (xy 89.195736 123.335485) (xy 89.195737 123.335483) + (xy 89.19574 123.335483) (xy 89.210775 123.32672) (xy 89.217459 123.322835) (xy 89.21775 123.322757) + (xy 89.245633 123.30646) (xy 89.245751 123.306392) (xy 89.248968 123.305601) (xy 89.308062 123.289599) + (xy 90.789192 123.289599) (xy 90.789314 123.289606) (xy 90.797405 123.289605) (xy 90.797408 123.289606) + (xy 90.829542 123.289602) (xy 90.892104 123.306534) (xy 90.91993 123.322791) (xy 90.919932 123.322791) + (xy 90.92608 123.326383) (xy 90.927735 123.327208) (xy 90.941878 123.33545) (xy 91.1136 123.397521) + (xy 91.293721 123.427482) (xy 91.473398 123.42439) (xy 91.476291 123.424341) (xy 91.655266 123.388205) + (xy 91.655269 123.388203) (xy 91.655274 123.388203) (xy 91.82476 123.320262) (xy 91.979146 123.222763) + (xy 91.988641 123.214001) (xy 92.11333 123.09893) (xy 92.113332 123.098928) (xy 92.115214 123.096419) + (xy 92.188496 122.998702) (xy 92.244465 122.95688) (xy 92.287698 122.949099) (xy 92.5438 122.949099) + (xy 93.0438 122.949099) (xy 93.099732 122.949099) (xy 93.183724 122.93855) (xy 93.316557 122.883529) + (xy 93.383404 122.8316) (xy 93.383411 122.831594) (xy 93.851294 122.363712) (xy 93.851299 122.363706) + (xy 93.903227 122.29686) (xy 93.906442 122.2891) (xy 93.0438 122.2891) (xy 93.0438 122.949099) (xy 92.5438 122.949099) + (xy 92.5438 122.1631) (xy 92.563485 122.096061) (xy 92.616289 122.050306) (xy 92.6678 122.0391) + (xy 92.7938 122.0391) (xy 92.7938 121.9131) (xy 92.813485 121.846061) (xy 92.866289 121.800306) + (xy 92.9178 121.7891) (xy 93.9688 121.7891) (xy 93.9688 121.672953) (xy 93.95382 121.559169) (xy 93.953818 121.559164) + (xy 93.895178 121.417593) (xy 93.895175 121.417588) (xy 93.85482 121.364996) (xy 93.829626 121.299827) + (xy 93.843664 121.231382) (xy 93.854821 121.214023) (xy 93.895612 121.160863) (xy 93.918183 121.106372) + (xy 93.954307 121.019163) (xy 93.9693 120.905277) (xy 93.9693 120.8906) (xy 93.988985 120.823561) + (xy 94.041789 120.777806) (xy 94.0933 120.7666) (xy 94.402548 120.7666) (xy 94.431988 120.775244) + (xy 94.461975 120.781768) (xy 94.46699 120.785522) (xy 94.469587 120.786285) (xy 94.490229 120.802919) + (xy 94.593723 120.906413) (xy 94.627208 120.967736) (xy 94.630042 120.994094) (xy 94.630042 123.679468) + (xy 94.610357 123.746507) (xy 94.593723 123.767149) (xy 94.349692 124.011181) (xy 94.288369 124.044666) + (xy 94.262011 124.0475) (xy 64.396845 124.0475) (xy 64.329806 124.027815) (xy 64.309164 124.011181) + (xy 63.795119 123.497136) (xy 63.780415 123.470208) (xy 63.763823 123.44439) (xy 63.762931 123.438189) + (xy 63.761634 123.435813) (xy 63.7588 123.409455) (xy 63.7588 123.382999) (xy 63.778485 123.31596) + (xy 63.831289 123.270205) (xy 63.8828 123.258999) (xy 64.037729 123.258999) (xy 64.104768 123.278684) + (xy 64.136932 123.308603) (xy 64.211738 123.408352) (xy 64.211739 123.408353) (xy 64.21174 123.408354) + (xy 64.345932 123.532195) (xy 64.500325 123.629697) (xy 64.578866 123.661181) (xy 64.669814 123.697639) + (xy 64.669815 123.697639) (xy 64.669817 123.69764) (xy 64.848808 123.733779) (xy 64.848802 123.733779) + (xy 64.865122 123.734059) (xy 65.031384 123.73692) (xy 65.211512 123.706958) (xy 65.292135 123.677815) + (xy 65.383236 123.644885) (xy 65.383237 123.644883) (xy 65.38324 123.644883) (xy 65.398275 123.63612) + (xy 65.404959 123.632235) (xy 65.40525 123.632157) (xy 65.433133 123.61586) (xy 65.433251 123.615792) + (xy 65.436468 123.615001) (xy 65.495562 123.598999) (xy 66.976692 123.598999) (xy 66.976814 123.599006) + (xy 66.984905 123.599005) (xy 66.984908 123.599006) (xy 67.017042 123.599002) (xy 67.079604 123.615934) + (xy 67.10743 123.632191) (xy 67.107432 123.632191) (xy 67.11358 123.635783) (xy 67.115235 123.636608) + (xy 67.129378 123.64485) (xy 67.3011 123.706921) (xy 67.481221 123.736882) (xy 67.660898 123.73379) + (xy 67.663791 123.733741) (xy 67.842766 123.697605) (xy 67.842769 123.697603) (xy 67.842774 123.697603) + (xy 68.01226 123.629662) (xy 68.166646 123.532163) (xy 68.187132 123.513258) (xy 68.30083 123.40833) + (xy 68.300832 123.408328) (xy 68.300833 123.408327) (xy 68.375996 123.308102) (xy 68.431965 123.26628) + (xy 68.475198 123.258499) (xy 68.7313 123.258499) (xy 69.2313 123.258499) (xy 69.287232 123.258499) + (xy 69.371224 123.24795) (xy 69.504057 123.192929) (xy 69.570904 123.141) (xy 69.570911 123.140994) + (xy 70.038794 122.673112) (xy 70.038799 122.673106) (xy 70.090727 122.60626) (xy 70.093942 122.5985) + (xy 69.2313 122.5985) (xy 69.2313 123.258499) (xy 68.7313 123.258499) (xy 68.7313 122.4725) (xy 68.750985 122.405461) + (xy 68.803789 122.359706) (xy 68.8553 122.3485) (xy 68.9813 122.3485) (xy 68.9813 122.2225) (xy 69.000985 122.155461) + (xy 69.053789 122.109706) (xy 69.1053 122.0985) (xy 70.1563 122.0985) (xy 70.1563 121.982353) (xy 70.14132 121.868569) + (xy 70.141318 121.868564) (xy 70.082678 121.726993) (xy 70.082675 121.726988) (xy 70.04232 121.674396) + (xy 70.017126 121.609227) (xy 70.031164 121.540782) (xy 70.042321 121.523423) (xy 70.062645 121.496937) + (xy 70.083112 121.470263) (xy 70.141807 121.328563) (xy 70.1568 121.214677) (xy 70.156799 120.591639) + (xy 70.176483 120.524601) (xy 70.193112 120.503964) (xy 70.260289 120.436789) (xy 70.347894 120.305679) + (xy 70.408237 120.159997) (xy 70.439 120.005342) (xy 70.439 119.847658) (xy 70.439 119.847655) (xy 70.438999 119.847653) + (xy 70.410084 119.702288) (xy 70.408237 119.693003) (xy 70.408235 119.692998) (xy 70.347897 119.547327) + (xy 70.34789 119.547314) (xy 70.260289 119.416211) (xy 70.260286 119.416207) (xy 70.148792 119.304713) + (xy 70.148788 119.30471) (xy 70.017685 119.217109) (xy 70.017672 119.217102) (xy 69.872001 119.156764) + (xy 69.871989 119.156761) (xy 69.717345 119.126) (xy 69.717342 119.126) (xy 69.559658 119.126) (xy 69.559655 119.126) + (xy 69.40501 119.156761) (xy 69.404998 119.156764) (xy 69.259327 119.217102) (xy 69.259314 119.217109) + (xy 69.128211 119.30471) (xy 69.128207 119.304713) (xy 69.016713 119.416207) (xy 69.01671 119.416211) + (xy 68.929109 119.547314) (xy 68.929102 119.547327) (xy 68.868764 119.692998) (xy 68.868761 119.693008) + (xy 68.839882 119.838192) (xy 68.825167 119.866322) (xy 68.811978 119.895203) (xy 68.809088 119.897059) + (xy 68.807497 119.900103) (xy 68.779904 119.915815) (xy 68.7532 119.932977) (xy 68.748606 119.933637) + (xy 68.746781 119.934677) (xy 68.718265 119.938) (xy 68.474873 119.938) (xy 68.407834 119.918315) + (xy 68.375672 119.888398) (xy 68.300861 119.788644) (xy 68.166669 119.664804) (xy 68.166666 119.664802) + (xy 68.166665 119.664801) (xy 68.166662 119.664799) (xy 68.012277 119.567301) (xy 67.842787 119.499358) + (xy 67.842777 119.499356) (xy 67.663792 119.463218) (xy 67.663799 119.463218) (xy 67.492094 119.460265) + (xy 67.481218 119.460078) (xy 67.481217 119.460078) (xy 67.481214 119.460078) (xy 67.301097 119.490038) + (xy 67.301084 119.490041) (xy 67.129363 119.552113) (xy 67.114848 119.56057) (xy 67.114763 119.560619) + (xy 67.107676 119.56474) (xy 67.10743 119.564808) (xy 67.079638 119.581044) (xy 67.07939 119.581189) + (xy 67.076663 119.581859) (xy 67.017046 119.597996) (xy 66.976701 119.597993) (xy 66.976597 119.598) + (xy 65.535896 119.598) (xy 65.527714 119.597998) (xy 65.527692 119.597993) (xy 65.497765 119.597995) + (xy 65.495528 119.597995) (xy 65.495246 119.597912) (xy 65.432993 119.581062) (xy 65.405171 119.564808) + (xy 65.399105 119.561264) (xy 65.397407 119.560417) (xy 65.388811 119.555408) (xy 65.383221 119.55215) + (xy 65.211497 119.490078) (xy 65.211491 119.490077) (xy 65.031381 119.460119) (xy 65.031378 119.460119) + (xy 65.022839 119.460265) (xy 64.848807 119.463259) (xy 64.669834 119.499394) (xy 64.669823 119.499397) + (xy 64.500342 119.567337) (xy 64.500341 119.567337) (xy 64.345961 119.664832) (xy 64.345958 119.664834) + (xy 64.263045 119.741351) (xy 64.211769 119.788672) (xy 64.144639 119.878186) (xy 64.136981 119.888397) + (xy 64.081011 119.930219) (xy 64.037778 119.938) (xy 62.900121 119.938) (xy 62.786245 119.952991) + (xy 62.786237 119.952993) (xy 62.644537 120.011687) (xy 62.522856 120.105056) (xy 62.429487 120.226737) + (xy 62.370793 120.368436) (xy 62.370792 120.368438) (xy 62.3558 120.482322) (xy 50.801378 120.482322) + (xy 50.768851 120.418484) (xy 50.768849 120.418481) (xy 50.768848 120.418479) (xy 50.643909 120.246513) + (xy 50.493586 120.09619) (xy 50.32162 119.971251) (xy 50.320915 119.970891) (xy 50.312854 119.966785) + (xy 50.262059 119.918812) (xy 50.245263 119.850992) (xy 50.267799 119.784856) (xy 50.312854 119.745815) + (xy 50.321616 119.741351) (xy 50.375382 119.702288) (xy 50.493586 119.616409) (xy 50.493588 119.616406) + (xy 50.493592 119.616404) (xy 50.643904 119.466092) (xy 50.643906 119.466088) (xy 50.643909 119.466086) + (xy 50.768848 119.29412) (xy 50.768847 119.29412) (xy 50.768851 119.294116) (xy 50.865357 119.104712) + (xy 50.931046 118.902543) (xy 50.9643 118.692587) (xy 50.9643 118.480013) (xy 50.931046 118.270057) + (xy 50.865357 118.067888) (xy 50.768851 117.878484) (xy 50.768849 117.878481) (xy 50.768848 117.878479) + (xy 50.643909 117.706513) (xy 50.493586 117.55619) (xy 50.32162 117.431251) (xy 50.132214 117.334744) + (xy 50.132213 117.334743) (xy 50.132212 117.334743) (xy 49.930043 117.269054) (xy 49.930041 117.269053) + (xy 49.93004 117.269053) (xy 49.768757 117.243508) (xy 49.720087 117.2358) (xy 49.507513 117.2358) + (xy 49.458842 117.243508) (xy 49.29756 117.269053) (xy 49.095385 117.334744) (xy 48.905979 117.431251) + (xy 48.734013 117.55619) (xy 48.58369 117.706513) (xy 48.458751 117.878479) (xy 48.362244 118.067885) + (xy 48.296553 118.27006) (xy 48.2633 118.480013) (xy 45.35175 118.480013) (xy 45.35175 113.091183) + (xy 57.072 113.091183) (xy 57.072 115.191201) (xy 57.072001 115.191218) (xy 57.0825 115.293996) + (xy 57.082501 115.293999) (xy 57.092445 115.324007) (xy 57.137686 115.460534) (xy 57.229788 115.609856) + (xy 57.353844 115.733912) (xy 57.503166 115.826014) (xy 57.669703 115.881199) (xy 57.772491 115.8917) + (xy 59.699618 115.891699) (xy 59.699627 115.8917) (xy 60.128351 115.891699) (xy 60.195389 115.911383) + (xy 60.241144 115.964187) (xy 60.251088 116.033346) (xy 60.228669 116.088583) (xy 60.207651 116.117511) + (xy 60.130796 116.268346) (xy 60.078481 116.429352) (xy 60.052 116.59655) (xy 60.052 116.765849) + (xy 60.078481 116.933047) (xy 60.130796 117.094053) (xy 60.207652 117.244888) (xy 60.307148 117.381834) + (xy 60.307152 117.381839) (xy 60.42686 117.501547) (xy 60.426865 117.501551) (xy 60.546317 117.588337) + (xy 60.563815 117.60105) (xy 60.659925 117.65002) (xy 60.714646 117.677903) (xy 60.714648 117.677903) + (xy 60.714651 117.677905) (xy 60.80095 117.705945) (xy 60.875652 117.730218) (xy 61.042851 117.7567) + (xy 61.042856 117.7567) (xy 61.212149 117.7567) (xy 61.379347 117.730218) (xy 61.540349 117.677905) + (xy 61.691185 117.60105) (xy 61.828141 117.501546) (xy 61.947846 117.381841) (xy 62.04735 117.244885) + (xy 62.124205 117.094049) (xy 62.176518 116.933047) (xy 62.193625 116.825038) (xy 62.203 116.765849) + (xy 62.203 116.59655) (xy 62.177428 116.435098) (xy 62.186382 116.365805) (xy 62.231379 116.312353) + (xy 62.29813 116.291713) (xy 62.299901 116.2917) (xy 62.538444 116.2917) (xy 62.538451 116.2917) + (xy 62.817942 116.254904) (xy 63.090239 116.181942) (xy 63.350683 116.074063) (xy 63.594817 115.933112) + (xy 63.818465 115.7615) (xy 64.0178 115.562165) (xy 64.085492 115.473946) (xy 64.14192 115.432744) + (xy 64.211666 115.428589) (xy 64.272586 115.462801) (xy 64.305339 115.524518) (xy 64.299526 115.594146) + (xy 64.291255 115.611433) (xy 64.235183 115.708551) (xy 64.235175 115.708568) (xy 64.125097 115.974321) + (xy 64.050646 116.252176) (xy 64.013101 116.537361) (xy 64.0131 116.537377) (xy 64.0131 116.825022) + (xy 64.013101 116.825038) (xy 64.050646 117.110223) (xy 64.125097 117.388078) (xy 64.235175 117.653831) + (xy 64.235183 117.653848) (xy 64.379004 117.902951) (xy 64.379015 117.902967) (xy 64.554121 118.131171) + (xy 64.554127 118.131178) (xy 64.757521 118.334572) (xy 64.757527 118.334577) (xy 64.985741 118.509691) + (xy 64.985748 118.509695) (xy 65.234851 118.653516) (xy 65.234856 118.653518) (xy 65.234859 118.65352) + (xy 65.234863 118.653521) (xy 65.234868 118.653524) (xy 65.329175 118.692587) (xy 65.50062 118.763602) + (xy 65.778475 118.838053) (xy 66.063671 118.8756) (xy 66.063678 118.8756) (xy 66.351322 118.8756) + (xy 66.351329 118.8756) (xy 66.636525 118.838053) (xy 66.91438 118.763602) (xy 67.180141 118.65352) + (xy 67.429259 118.509691) (xy 67.657473 118.334577) (xy 67.860877 118.131173) (xy 68.035991 117.902959) + (xy 68.17982 117.653841) (xy 68.289902 117.38808) (xy 68.364353 117.110225) (xy 68.4019 116.825029) + (xy 68.4019 116.59655) (xy 70.212 116.59655) (xy 70.212 116.765849) (xy 70.238481 116.933047) (xy 70.290796 117.094053) + (xy 70.367652 117.244888) (xy 70.467148 117.381834) (xy 70.467152 117.381839) (xy 70.58686 117.501547) + (xy 70.586865 117.501551) (xy 70.706317 117.588337) (xy 70.723815 117.60105) (xy 70.819925 117.65002) + (xy 70.874646 117.677903) (xy 70.874648 117.677903) (xy 70.874651 117.677905) (xy 70.96095 117.705945) + (xy 71.035652 117.730218) (xy 71.202851 117.7567) (xy 71.202856 117.7567) (xy 71.372149 117.7567) + (xy 71.539347 117.730218) (xy 71.700349 117.677905) (xy 71.851185 117.60105) (xy 71.988141 117.501546) + (xy 72.107846 117.381841) (xy 72.20735 117.244885) (xy 72.284205 117.094049) (xy 72.336518 116.933047) + (xy 72.353625 116.825038) (xy 72.363 116.765849) (xy 72.363 116.59655) (xy 72.336518 116.429352) + (xy 72.291796 116.291713) (xy 72.284205 116.268351) (xy 72.284203 116.268348) (xy 72.284203 116.268346) + (xy 72.240176 116.18194) (xy 72.20735 116.117515) (xy 72.175781 116.074064) (xy 72.107851 115.980565) + (xy 72.107847 115.98056) (xy 71.988139 115.860852) (xy 71.988134 115.860848) (xy 71.851188 115.761352) + (xy 71.851187 115.761351) (xy 71.851185 115.76135) (xy 71.797331 115.73391) (xy 71.700353 115.684496) + (xy 71.539347 115.632181) (xy 71.372149 115.6057) (xy 71.372144 115.6057) (xy 71.202856 115.6057) + (xy 71.202851 115.6057) (xy 71.035652 115.632181) (xy 70.874646 115.684496) (xy 70.723811 115.761352) + (xy 70.586865 115.860848) (xy 70.58686 115.860852) (xy 70.467152 115.98056) (xy 70.467148 115.980565) + (xy 70.367652 116.117511) (xy 70.290796 116.268346) (xy 70.238481 116.429352) (xy 70.212 116.59655) + (xy 68.4019 116.59655) (xy 68.4019 116.537371) (xy 68.364353 116.252175) (xy 68.289902 115.97432) + (xy 68.17982 115.708559) (xy 68.179818 115.708556) (xy 68.179816 115.708551) (xy 68.035995 115.459448) + (xy 68.035991 115.459441) (xy 67.932069 115.324007) (xy 67.860878 115.231228) (xy 67.860872 115.231221) + (xy 67.657478 115.027827) (xy 67.657471 115.027821) (xy 67.429267 114.852715) (xy 67.429265 114.852713) + (xy 67.429259 114.852709) (xy 67.429254 114.852706) (xy 67.429251 114.852704) (xy 67.180148 114.708883) + (xy 67.180131 114.708875) (xy 66.914378 114.598797) (xy 66.636523 114.524346) (xy 66.351338 114.486801) + (xy 66.351335 114.4868) (xy 66.351329 114.4868) (xy 66.063671 114.4868) (xy 66.063665 114.4868) + (xy 66.063661 114.486801) (xy 65.778476 114.524346) (xy 65.500621 114.598797) (xy 65.234868 114.708875) + (xy 65.234851 114.708883) (xy 64.985748 114.852704) (xy 64.985732 114.852715) (xy 64.757528 115.027821) + (xy 64.757521 115.027827) (xy 64.554127 115.231221) (xy 64.48293 115.324007) (xy 64.426501 115.365209) + (xy 64.356755 115.369364) (xy 64.295835 115.335151) (xy 64.263083 115.273434) (xy 64.268896 115.203807) + (xy 64.277161 115.186531) (xy 64.330363 115.094383) (xy 64.438242 114.833939) (xy 64.511204 114.561642) + (xy 64.548 114.282151) (xy 64.548 114.000249) (xy 64.511204 113.720758) (xy 64.438242 113.448461) + (xy 64.330363 113.188017) (xy 64.330361 113.188014) (xy 64.330359 113.188009) (xy 64.189416 112.94389) + (xy 64.189412 112.943883) (xy 64.0178 112.720235) (xy 64.017798 112.720233) (xy 64.017795 112.720229) + (xy 63.81847 112.520904) (xy 63.734389 112.456386) (xy 63.594817 112.349288) (xy 63.594811 112.349284) + (xy 63.594809 112.349283) (xy 63.35069 112.20834) (xy 63.350679 112.208335) (xy 63.090243 112.100459) + (xy 62.817939 112.027495) (xy 62.538458 111.9907) (xy 62.538451 111.9907) (xy 62.256549 111.9907) + (xy 62.256541 111.9907) (xy 61.97706 112.027495) (xy 61.704756 112.100459) (xy 61.44432 112.208335) + (xy 61.444309 112.20834) (xy 61.200192 112.349281) (xy 61.200183 112.349288) (xy 61.179606 112.365076) + (xy 61.114438 112.39027) (xy 61.104122 112.3907) (xy 57.772498 112.3907) (xy 57.772481 112.390701) + (xy 57.669703 112.4012) (xy 57.6697 112.401201) (xy 57.503168 112.456385) (xy 57.503163 112.456387) + (xy 57.353842 112.548489) (xy 57.229789 112.672542) (xy 57.137687 112.821863) (xy 57.137686 112.821866) + (xy 57.082501 112.988403) (xy 57.082501 112.988404) (xy 57.0825 112.988404) (xy 57.072 113.091183) + (xy 45.35175 113.091183) (xy 45.35175 111.460241) (xy 66.597 111.460241) (xy 66.597 111.742158) + (xy 66.633795 112.021639) (xy 66.706759 112.293943) (xy 66.814635 112.554379) (xy 66.81464 112.55439) + (xy 66.929883 112.753995) (xy 66.955588 112.798517) (xy 67.101294 112.988404) (xy 67.127204 113.02217) + (xy 67.326529 113.221495) (xy 67.326533 113.221498) (xy 67.326535 113.2215) (xy 67.550183 113.393112) + (xy 67.55019 113.393116) (xy 67.794309 113.534059) (xy 67.794314 113.534061) (xy 67.794317 113.534063) + (xy 68.054761 113.641942) (xy 68.327058 113.714904) (xy 68.606549 113.7517) (xy 68.606556 113.7517) + (xy 68.888444 113.7517) (xy 68.888451 113.7517) (xy 69.167942 113.714904) (xy 69.440239 113.641942) + (xy 69.700683 113.534063) (xy 69.944817 113.393112) (xy 69.965392 113.377323) (xy 70.03056 113.352129) + (xy 70.040879 113.351699) (xy 71.222482 113.351699) (xy 71.222491 113.3517) (xy 73.372508 113.351699) + (xy 73.475297 113.341199) (xy 73.641834 113.286014) (xy 73.791156 113.193912) (xy 73.915212 113.069856) + (xy 74.007314 112.920534) (xy 74.062499 112.753997) (xy 74.073 112.651209) (xy 74.072999 111.460241) + (xy 90.4845 111.460241) (xy 90.4845 111.742158) (xy 90.521295 112.021639) (xy 90.594259 112.293943) + (xy 90.702135 112.554379) (xy 90.70214 112.55439) (xy 90.817383 112.753995) (xy 90.843088 112.798517) + (xy 90.988794 112.988404) (xy 91.014704 113.02217) (xy 91.214029 113.221495) (xy 91.214033 113.221498) + (xy 91.214035 113.2215) (xy 91.437683 113.393112) (xy 91.43769 113.393116) (xy 91.681809 113.534059) + (xy 91.681814 113.534061) (xy 91.681817 113.534063) (xy 91.942261 113.641942) (xy 92.214558 113.714904) + (xy 92.494049 113.7517) (xy 92.494056 113.7517) (xy 92.775944 113.7517) (xy 92.775951 113.7517) + (xy 93.055442 113.714904) (xy 93.327739 113.641942) (xy 93.588183 113.534063) (xy 93.832317 113.393112) + (xy 93.852892 113.377323) (xy 93.91806 113.352129) (xy 93.928379 113.351699) (xy 95.109982 113.351699) + (xy 95.109991 113.3517) (xy 97.260008 113.351699) (xy 97.362797 113.341199) (xy 97.529334 113.286014) + (xy 97.678656 113.193912) (xy 97.802712 113.069856) (xy 97.894814 112.920534) (xy 97.949999 112.753997) + (xy 97.9605 112.651209) (xy 97.960499 111.460241) (xy 109.5345 111.460241) (xy 109.5345 111.742158) + (xy 109.571295 112.021639) (xy 109.644259 112.293943) (xy 109.752135 112.554379) (xy 109.75214 112.55439) + (xy 109.867383 112.753995) (xy 109.893088 112.798517) (xy 110.038794 112.988404) (xy 110.064704 113.02217) + (xy 110.264029 113.221495) (xy 110.264033 113.221498) (xy 110.264035 113.2215) (xy 110.487683 113.393112) + (xy 110.48769 113.393116) (xy 110.731809 113.534059) (xy 110.731814 113.534061) (xy 110.731817 113.534063) + (xy 110.992261 113.641942) (xy 111.264558 113.714904) (xy 111.544049 113.7517) (xy 111.544056 113.7517) + (xy 111.825944 113.7517) (xy 111.825951 113.7517) (xy 112.105442 113.714904) (xy 112.377739 113.641942) + (xy 112.638183 113.534063) (xy 112.882317 113.393112) (xy 112.902892 113.377323) (xy 112.96806 113.352129) + (xy 112.978379 113.351699) (xy 114.159982 113.351699) (xy 114.159991 113.3517) (xy 116.310008 113.351699) + (xy 116.412797 113.341199) (xy 116.579334 113.286014) (xy 116.728656 113.193912) (xy 116.852712 113.069856) + (xy 116.944814 112.920534) (xy 116.999999 112.753997) (xy 117.0105 112.651209) (xy 117.010499 111.460241) + (xy 128.5845 111.460241) (xy 128.5845 111.742158) (xy 128.621295 112.021639) (xy 128.694259 112.293943) + (xy 128.802135 112.554379) (xy 128.80214 112.55439) (xy 128.917383 112.753995) (xy 128.943088 112.798517) + (xy 129.088794 112.988404) (xy 129.114704 113.02217) (xy 129.314029 113.221495) (xy 129.314033 113.221498) + (xy 129.314035 113.2215) (xy 129.537683 113.393112) (xy 129.53769 113.393116) (xy 129.781809 113.534059) + (xy 129.781814 113.534061) (xy 129.781817 113.534063) (xy 130.042261 113.641942) (xy 130.314558 113.714904) + (xy 130.594049 113.7517) (xy 130.594056 113.7517) (xy 130.875944 113.7517) (xy 130.875951 113.7517) + (xy 131.155442 113.714904) (xy 131.427739 113.641942) (xy 131.688183 113.534063) (xy 131.932317 113.393112) + (xy 131.952892 113.377323) (xy 132.01806 113.352129) (xy 132.028379 113.351699) (xy 133.209982 113.351699) + (xy 133.209991 113.3517) (xy 135.360008 113.351699) (xy 135.462797 113.341199) (xy 135.629334 113.286014) + (xy 135.778656 113.193912) (xy 135.902712 113.069856) (xy 135.994814 112.920534) (xy 136.049999 112.753997) + (xy 136.0605 112.651209) (xy 136.060499 111.460241) (xy 147.6095 111.460241) (xy 147.6095 111.742158) + (xy 147.646295 112.021639) (xy 147.719259 112.293943) (xy 147.827135 112.554379) (xy 147.82714 112.55439) + (xy 147.942383 112.753995) (xy 147.968088 112.798517) (xy 148.113794 112.988404) (xy 148.139704 113.02217) + (xy 148.339029 113.221495) (xy 148.339033 113.221498) (xy 148.339035 113.2215) (xy 148.562683 113.393112) + (xy 148.56269 113.393116) (xy 148.806809 113.534059) (xy 148.806814 113.534061) (xy 148.806817 113.534063) + (xy 149.067261 113.641942) (xy 149.339558 113.714904) (xy 149.619049 113.7517) (xy 149.619056 113.7517) + (xy 149.900944 113.7517) (xy 149.900951 113.7517) (xy 150.180442 113.714904) (xy 150.452739 113.641942) + (xy 150.713183 113.534063) (xy 150.957317 113.393112) (xy 150.977892 113.377323) (xy 151.04306 113.352129) + (xy 151.053379 113.351699) (xy 152.234982 113.351699) (xy 152.234991 113.3517) (xy 154.385008 113.351699) + (xy 154.487797 113.341199) (xy 154.654334 113.286014) (xy 154.803656 113.193912) (xy 154.927712 113.069856) + (xy 155.019814 112.920534) (xy 155.074999 112.753997) (xy 155.0855 112.651209) (xy 155.085499 111.460241) + (xy 166.6095 111.460241) (xy 166.6095 111.742158) (xy 166.646295 112.021639) (xy 166.719259 112.293943) + (xy 166.827135 112.554379) (xy 166.82714 112.55439) (xy 166.942383 112.753995) (xy 166.968088 112.798517) + (xy 167.113794 112.988404) (xy 167.139704 113.02217) (xy 167.339029 113.221495) (xy 167.339033 113.221498) + (xy 167.339035 113.2215) (xy 167.562683 113.393112) (xy 167.56269 113.393116) (xy 167.806809 113.534059) + (xy 167.806814 113.534061) (xy 167.806817 113.534063) (xy 168.067261 113.641942) (xy 168.339558 113.714904) + (xy 168.619049 113.7517) (xy 168.619056 113.7517) (xy 168.900944 113.7517) (xy 168.900951 113.7517) + (xy 169.180442 113.714904) (xy 169.452739 113.641942) (xy 169.713183 113.534063) (xy 169.957317 113.393112) + (xy 169.977892 113.377323) (xy 170.04306 113.352129) (xy 170.053379 113.351699) (xy 171.234982 113.351699) + (xy 171.234991 113.3517) (xy 173.385008 113.351699) (xy 173.487797 113.341199) (xy 173.654334 113.286014) + (xy 173.803656 113.193912) (xy 173.927712 113.069856) (xy 174.019814 112.920534) (xy 174.074999 112.753997) + (xy 174.0855 112.651209) (xy 174.085499 111.460241) (xy 185.7345 111.460241) (xy 185.7345 111.742158) + (xy 185.771295 112.021639) (xy 185.844259 112.293943) (xy 185.952135 112.554379) (xy 185.95214 112.55439) + (xy 186.067383 112.753995) (xy 186.093088 112.798517) (xy 186.238794 112.988404) (xy 186.264704 113.02217) + (xy 186.464029 113.221495) (xy 186.464033 113.221498) (xy 186.464035 113.2215) (xy 186.687683 113.393112) + (xy 186.68769 113.393116) (xy 186.931809 113.534059) (xy 186.931814 113.534061) (xy 186.931817 113.534063) + (xy 187.192261 113.641942) (xy 187.464558 113.714904) (xy 187.550989 113.726282) (xy 187.614884 113.754548) + (xy 187.653356 113.812872) (xy 187.654188 113.882737) (xy 187.637906 113.918111) (xy 187.566608 114.024816) + (xy 187.566602 114.024827) (xy 187.506264 114.170498) (xy 187.506261 114.17051) (xy 187.4755 114.325153) + (xy 187.4755 114.482846) (xy 187.506261 114.637489) (xy 187.506264 114.637501) (xy 187.566602 114.783172) + (xy 187.566609 114.783185) (xy 187.65421 114.914288) (xy 187.654213 114.914292) (xy 187.765707 115.025786) + (xy 187.765711 115.025789) (xy 187.896814 115.11339) (xy 187.896827 115.113397) (xy 188.042498 115.173735) + (xy 188.042503 115.173737) (xy 188.193674 115.203807) (xy 188.197153 115.204499) (xy 188.197156 115.2045) + (xy 188.197158 115.2045) (xy 188.354844 115.2045) (xy 188.354845 115.204499) (xy 188.509497 115.173737) + (xy 188.655179 115.113394) (xy 188.786289 115.025789) (xy 188.897789 114.914289) (xy 188.985394 114.783179) + (xy 189.045737 114.637497) (xy 189.0765 114.482842) (xy 189.0765 114.325158) (xy 189.0765 114.325155) + (xy 189.076499 114.325153) (xy 189.045738 114.17051) (xy 189.045737 114.170503) (xy 189.045735 114.170498) + (xy 188.985397 114.024827) (xy 188.98539 114.024814) (xy 188.897789 113.893711) (xy 188.897786 113.893707) + (xy 188.78629 113.782211) (xy 188.769778 113.771178) (xy 188.724974 113.717564) (xy 188.716268 113.648239) + (xy 188.746424 113.585212) (xy 188.791217 113.553516) (xy 188.838183 113.534063) (xy 189.082317 113.393112) + (xy 189.102892 113.377323) (xy 189.16806 113.352129) (xy 189.178379 113.351699) (xy 190.359982 113.351699) + (xy 190.359991 113.3517) (xy 192.510008 113.351699) (xy 192.612797 113.341199) (xy 192.779334 113.286014) + (xy 192.928656 113.193912) (xy 193.052712 113.069856) (xy 193.144814 112.920534) (xy 193.199999 112.753997) + (xy 193.2105 112.651209) (xy 193.210499 111.460241) (xy 204.7845 111.460241) (xy 204.7845 111.742158) + (xy 204.821295 112.021639) (xy 204.894259 112.293943) (xy 205.002135 112.554379) (xy 205.00214 112.55439) + (xy 205.117383 112.753995) (xy 205.143088 112.798517) (xy 205.288794 112.988404) (xy 205.314704 113.02217) + (xy 205.514029 113.221495) (xy 205.514033 113.221498) (xy 205.514035 113.2215) (xy 205.737683 113.393112) + (xy 205.73769 113.393116) (xy 205.981809 113.534059) (xy 205.981814 113.534061) (xy 205.981817 113.534063) + (xy 206.242261 113.641942) (xy 206.514558 113.714904) (xy 206.794049 113.7517) (xy 206.794056 113.7517) + (xy 207.075944 113.7517) (xy 207.075951 113.7517) (xy 207.355442 113.714904) (xy 207.627739 113.641942) + (xy 207.888183 113.534063) (xy 208.132317 113.393112) (xy 208.152892 113.377323) (xy 208.21806 113.352129) + (xy 208.228379 113.351699) (xy 209.409982 113.351699) (xy 209.409991 113.3517) (xy 211.560008 113.351699) + (xy 211.662797 113.341199) (xy 211.829334 113.286014) (xy 211.978656 113.193912) (xy 212.081385 113.091183) + (xy 214.2845 113.091183) (xy 214.2845 115.191201) (xy 214.284501 115.191218) (xy 214.295 115.293996) + (xy 214.295001 115.293999) (xy 214.304945 115.324007) (xy 214.350186 115.460534) (xy 214.442288 115.609856) + (xy 214.566344 115.733912) (xy 214.715666 115.826014) (xy 214.882203 115.881199) (xy 214.984991 115.8917) + (xy 216.912118 115.891699) (xy 216.912127 115.8917) (xy 217.340851 115.891699) (xy 217.407889 115.911383) + (xy 217.453644 115.964187) (xy 217.463588 116.033346) (xy 217.441169 116.088583) (xy 217.420151 116.117511) + (xy 217.343296 116.268346) (xy 217.290981 116.429352) (xy 217.2645 116.59655) (xy 217.2645 116.765849) + (xy 217.290981 116.933047) (xy 217.343296 117.094053) (xy 217.420152 117.244888) (xy 217.519648 117.381834) + (xy 217.519652 117.381839) (xy 217.63936 117.501547) (xy 217.639365 117.501551) (xy 217.758817 117.588337) + (xy 217.776315 117.60105) (xy 217.872425 117.65002) (xy 217.927146 117.677903) (xy 217.927148 117.677903) + (xy 217.927151 117.677905) (xy 218.01345 117.705945) (xy 218.088152 117.730218) (xy 218.255351 117.7567) + (xy 218.255356 117.7567) (xy 218.424649 117.7567) (xy 218.591847 117.730218) (xy 218.752849 117.677905) + (xy 218.903685 117.60105) (xy 219.040641 117.501546) (xy 219.160346 117.381841) (xy 219.25985 117.244885) + (xy 219.336705 117.094049) (xy 219.389018 116.933047) (xy 219.406125 116.825038) (xy 219.4155 116.765849) + (xy 219.4155 116.59655) (xy 219.389928 116.435098) (xy 219.398882 116.365805) (xy 219.443879 116.312353) + (xy 219.51063 116.291713) (xy 219.512401 116.2917) (xy 219.750944 116.2917) (xy 219.750951 116.2917) + (xy 220.030442 116.254904) (xy 220.302739 116.181942) (xy 220.563183 116.074063) (xy 220.807317 115.933112) + (xy 221.030965 115.7615) (xy 221.2303 115.562165) (xy 221.297992 115.473946) (xy 221.35442 115.432744) + (xy 221.424166 115.428589) (xy 221.485086 115.462801) (xy 221.517839 115.524518) (xy 221.512026 115.594146) + (xy 221.503755 115.611433) (xy 221.447683 115.708551) (xy 221.447675 115.708568) (xy 221.337597 115.974321) + (xy 221.263146 116.252176) (xy 221.225601 116.537361) (xy 221.2256 116.537377) (xy 221.2256 116.825022) + (xy 221.225601 116.825038) (xy 221.263146 117.110223) (xy 221.337597 117.388078) (xy 221.447675 117.653831) + (xy 221.447683 117.653848) (xy 221.591504 117.902951) (xy 221.591515 117.902967) (xy 221.766621 118.131171) + (xy 221.766627 118.131178) (xy 221.970021 118.334572) (xy 221.970027 118.334577) (xy 222.198241 118.509691) + (xy 222.198248 118.509695) (xy 222.447351 118.653516) (xy 222.447356 118.653518) (xy 222.447359 118.65352) + (xy 222.447363 118.653521) (xy 222.447368 118.653524) (xy 222.541675 118.692587) (xy 222.71312 118.763602) + (xy 222.990975 118.838053) (xy 223.276171 118.8756) (xy 223.276178 118.8756) (xy 223.563822 118.8756) + (xy 223.563829 118.8756) (xy 223.849025 118.838053) (xy 224.12688 118.763602) (xy 224.392641 118.65352) + (xy 224.641759 118.509691) (xy 224.869973 118.334577) (xy 225.073377 118.131173) (xy 225.248491 117.902959) + (xy 225.39232 117.653841) (xy 225.502402 117.38808) (xy 225.576853 117.110225) (xy 225.6144 116.825029) + (xy 225.6144 116.59655) (xy 227.4245 116.59655) (xy 227.4245 116.765849) (xy 227.450981 116.933047) + (xy 227.503296 117.094053) (xy 227.580152 117.244888) (xy 227.679648 117.381834) (xy 227.679652 117.381839) + (xy 227.79936 117.501547) (xy 227.799365 117.501551) (xy 227.918817 117.588337) (xy 227.936315 117.60105) + (xy 228.032425 117.65002) (xy 228.087146 117.677903) (xy 228.087148 117.677903) (xy 228.087151 117.677905) + (xy 228.17345 117.705945) (xy 228.248152 117.730218) (xy 228.415351 117.7567) (xy 228.415356 117.7567) + (xy 228.584649 117.7567) (xy 228.751847 117.730218) (xy 228.912849 117.677905) (xy 229.063685 117.60105) + (xy 229.200641 117.501546) (xy 229.320346 117.381841) (xy 229.41985 117.244885) (xy 229.496705 117.094049) + (xy 229.549018 116.933047) (xy 229.566125 116.825038) (xy 229.5755 116.765849) (xy 229.5755 116.59655) + (xy 229.549018 116.429352) (xy 229.504296 116.291713) (xy 229.496705 116.268351) (xy 229.496703 116.268348) + (xy 229.496703 116.268346) (xy 229.452676 116.18194) (xy 229.41985 116.117515) (xy 229.388281 116.074064) + (xy 229.320351 115.980565) (xy 229.320347 115.98056) (xy 229.200639 115.860852) (xy 229.200634 115.860848) + (xy 229.063688 115.761352) (xy 229.063687 115.761351) (xy 229.063685 115.76135) (xy 229.009831 115.73391) + (xy 228.912853 115.684496) (xy 228.751847 115.632181) (xy 228.584649 115.6057) (xy 228.584644 115.6057) + (xy 228.415356 115.6057) (xy 228.415351 115.6057) (xy 228.248152 115.632181) (xy 228.087146 115.684496) + (xy 227.936311 115.761352) (xy 227.799365 115.860848) (xy 227.79936 115.860852) (xy 227.679652 115.98056) + (xy 227.679648 115.980565) (xy 227.580152 116.117511) (xy 227.503296 116.268346) (xy 227.450981 116.429352) + (xy 227.4245 116.59655) (xy 225.6144 116.59655) (xy 225.6144 116.537371) (xy 225.576853 116.252175) + (xy 225.502402 115.97432) (xy 225.39232 115.708559) (xy 225.392318 115.708556) (xy 225.392316 115.708551) + (xy 225.248495 115.459448) (xy 225.248491 115.459441) (xy 225.144569 115.324007) (xy 225.073378 115.231228) + (xy 225.073372 115.231221) (xy 224.869978 115.027827) (xy 224.869971 115.027821) (xy 224.641767 114.852715) + (xy 224.641765 114.852713) (xy 224.641759 114.852709) (xy 224.641754 114.852706) (xy 224.641751 114.852704) + (xy 224.392648 114.708883) (xy 224.392631 114.708875) (xy 224.126878 114.598797) (xy 223.849023 114.524346) + (xy 223.563838 114.486801) (xy 223.563835 114.4868) (xy 223.563829 114.4868) (xy 223.276171 114.4868) + (xy 223.276165 114.4868) (xy 223.276161 114.486801) (xy 222.990976 114.524346) (xy 222.713121 114.598797) + (xy 222.447368 114.708875) (xy 222.447351 114.708883) (xy 222.198248 114.852704) (xy 222.198232 114.852715) + (xy 221.970028 115.027821) (xy 221.970021 115.027827) (xy 221.766627 115.231221) (xy 221.69543 115.324007) + (xy 221.639001 115.365209) (xy 221.569255 115.369364) (xy 221.508335 115.335151) (xy 221.475583 115.273434) + (xy 221.481396 115.203807) (xy 221.489661 115.186531) (xy 221.542863 115.094383) (xy 221.650742 114.833939) + (xy 221.723704 114.561642) (xy 221.7605 114.282151) (xy 221.7605 114.000249) (xy 221.723704 113.720758) + (xy 221.650742 113.448461) (xy 221.542863 113.188017) (xy 221.542861 113.188014) (xy 221.542859 113.188009) + (xy 221.401916 112.94389) (xy 221.401912 112.943883) (xy 221.2303 112.720235) (xy 221.230298 112.720233) + (xy 221.230295 112.720229) (xy 221.03097 112.520904) (xy 220.946889 112.456386) (xy 220.807317 112.349288) + (xy 220.807311 112.349284) (xy 220.807309 112.349283) (xy 220.56319 112.20834) (xy 220.563179 112.208335) + (xy 220.302743 112.100459) (xy 220.030439 112.027495) (xy 219.750958 111.9907) (xy 219.750951 111.9907) + (xy 219.469049 111.9907) (xy 219.469041 111.9907) (xy 219.18956 112.027495) (xy 218.917256 112.100459) + (xy 218.65682 112.208335) (xy 218.656809 112.20834) (xy 218.412692 112.349281) (xy 218.412683 112.349288) + (xy 218.392106 112.365076) (xy 218.326938 112.39027) (xy 218.316622 112.3907) (xy 214.984998 112.3907) + (xy 214.984981 112.390701) (xy 214.882203 112.4012) (xy 214.8822 112.401201) (xy 214.715668 112.456385) + (xy 214.715663 112.456387) (xy 214.566342 112.548489) (xy 214.442289 112.672542) (xy 214.350187 112.821863) + (xy 214.350186 112.821866) (xy 214.295001 112.988403) (xy 214.295001 112.988404) (xy 214.295 112.988404) + (xy 214.2845 113.091183) (xy 212.081385 113.091183) (xy 212.102712 113.069856) (xy 212.194814 112.920534) + (xy 212.249999 112.753997) (xy 212.2605 112.651209) (xy 212.260499 111.460241) (xy 223.8095 111.460241) + (xy 223.8095 111.742158) (xy 223.846295 112.021639) (xy 223.919259 112.293943) (xy 224.027135 112.554379) + (xy 224.02714 112.55439) (xy 224.142383 112.753995) (xy 224.168088 112.798517) (xy 224.313794 112.988404) + (xy 224.339704 113.02217) (xy 224.539029 113.221495) (xy 224.539033 113.221498) (xy 224.539035 113.2215) + (xy 224.762683 113.393112) (xy 224.76269 113.393116) (xy 225.006809 113.534059) (xy 225.006814 113.534061) + (xy 225.006817 113.534063) (xy 225.267261 113.641942) (xy 225.539558 113.714904) (xy 225.819049 113.7517) + (xy 225.819056 113.7517) (xy 226.100944 113.7517) (xy 226.100951 113.7517) (xy 226.380442 113.714904) + (xy 226.652739 113.641942) (xy 226.913183 113.534063) (xy 227.157317 113.393112) (xy 227.177892 113.377323) + (xy 227.24306 113.352129) (xy 227.253379 113.351699) (xy 228.434982 113.351699) (xy 228.434991 113.3517) + (xy 230.585008 113.351699) (xy 230.687797 113.341199) (xy 230.854334 113.286014) (xy 231.003656 113.193912) + (xy 231.106385 113.091183) (xy 233.3595 113.091183) (xy 233.3595 115.191201) (xy 233.359501 115.191218) + (xy 233.37 115.293996) (xy 233.370001 115.293999) (xy 233.379945 115.324007) (xy 233.425186 115.460534) + (xy 233.517288 115.609856) (xy 233.641344 115.733912) (xy 233.790666 115.826014) (xy 233.957203 115.881199) + (xy 234.059991 115.8917) (xy 235.987118 115.891699) (xy 235.987127 115.8917) (xy 236.415851 115.891699) + (xy 236.482889 115.911383) (xy 236.528644 115.964187) (xy 236.538588 116.033346) (xy 236.516169 116.088583) + (xy 236.495151 116.117511) (xy 236.418296 116.268346) (xy 236.365981 116.429352) (xy 236.3395 116.59655) + (xy 236.3395 116.765849) (xy 236.365981 116.933047) (xy 236.418296 117.094053) (xy 236.495152 117.244888) + (xy 236.594648 117.381834) (xy 236.594652 117.381839) (xy 236.71436 117.501547) (xy 236.714365 117.501551) + (xy 236.833817 117.588337) (xy 236.851315 117.60105) (xy 236.947425 117.65002) (xy 237.002146 117.677903) + (xy 237.002148 117.677903) (xy 237.002151 117.677905) (xy 237.08845 117.705945) (xy 237.163152 117.730218) + (xy 237.330351 117.7567) (xy 237.330356 117.7567) (xy 237.499649 117.7567) (xy 237.666847 117.730218) + (xy 237.827849 117.677905) (xy 237.978685 117.60105) (xy 238.115641 117.501546) (xy 238.235346 117.381841) + (xy 238.33485 117.244885) (xy 238.411705 117.094049) (xy 238.464018 116.933047) (xy 238.481125 116.825038) + (xy 238.4905 116.765849) (xy 238.4905 116.59655) (xy 238.464928 116.435098) (xy 238.473882 116.365805) + (xy 238.518879 116.312353) (xy 238.58563 116.291713) (xy 238.587401 116.2917) (xy 238.825944 116.2917) + (xy 238.825951 116.2917) (xy 239.105442 116.254904) (xy 239.377739 116.181942) (xy 239.638183 116.074063) + (xy 239.882317 115.933112) (xy 240.105965 115.7615) (xy 240.3053 115.562165) (xy 240.372992 115.473946) + (xy 240.42942 115.432744) (xy 240.499166 115.428589) (xy 240.560086 115.462801) (xy 240.592839 115.524518) + (xy 240.587026 115.594146) (xy 240.578755 115.611433) (xy 240.522683 115.708551) (xy 240.522675 115.708568) + (xy 240.412597 115.974321) (xy 240.338146 116.252176) (xy 240.300601 116.537361) (xy 240.3006 116.537377) + (xy 240.3006 116.825022) (xy 240.300601 116.825038) (xy 240.338146 117.110223) (xy 240.412597 117.388078) + (xy 240.522675 117.653831) (xy 240.522683 117.653848) (xy 240.666504 117.902951) (xy 240.666515 117.902967) + (xy 240.841621 118.131171) (xy 240.841627 118.131178) (xy 241.045021 118.334572) (xy 241.045027 118.334577) + (xy 241.273241 118.509691) (xy 241.273248 118.509695) (xy 241.522351 118.653516) (xy 241.522356 118.653518) + (xy 241.522359 118.65352) (xy 241.522363 118.653521) (xy 241.522368 118.653524) (xy 241.616675 118.692587) + (xy 241.78812 118.763602) (xy 242.065975 118.838053) (xy 242.351171 118.8756) (xy 242.351178 118.8756) + (xy 242.638822 118.8756) (xy 242.638829 118.8756) (xy 242.924025 118.838053) (xy 243.20188 118.763602) + (xy 243.467641 118.65352) (xy 243.716759 118.509691) (xy 243.944973 118.334577) (xy 244.148377 118.131173) + (xy 244.323491 117.902959) (xy 244.46732 117.653841) (xy 244.577402 117.38808) (xy 244.651853 117.110225) + (xy 244.6894 116.825029) (xy 244.6894 116.59655) (xy 246.4995 116.59655) (xy 246.4995 116.765849) + (xy 246.525981 116.933047) (xy 246.578296 117.094053) (xy 246.655152 117.244888) (xy 246.754648 117.381834) + (xy 246.754652 117.381839) (xy 246.87436 117.501547) (xy 246.874365 117.501551) (xy 246.993817 117.588337) + (xy 247.011315 117.60105) (xy 247.107425 117.65002) (xy 247.162146 117.677903) (xy 247.162148 117.677903) + (xy 247.162151 117.677905) (xy 247.24845 117.705945) (xy 247.323152 117.730218) (xy 247.490351 117.7567) + (xy 247.490356 117.7567) (xy 247.659649 117.7567) (xy 247.826847 117.730218) (xy 247.987849 117.677905) + (xy 248.138685 117.60105) (xy 248.275641 117.501546) (xy 248.395346 117.381841) (xy 248.49485 117.244885) + (xy 248.571705 117.094049) (xy 248.624018 116.933047) (xy 248.641125 116.825038) (xy 248.6505 116.765849) + (xy 248.6505 116.59655) (xy 248.624018 116.429352) (xy 248.579296 116.291713) (xy 248.571705 116.268351) + (xy 248.571703 116.268348) (xy 248.571703 116.268346) (xy 248.527676 116.18194) (xy 248.49485 116.117515) + (xy 248.463281 116.074064) (xy 248.395351 115.980565) (xy 248.395347 115.98056) (xy 248.275639 115.860852) + (xy 248.275634 115.860848) (xy 248.138688 115.761352) (xy 248.138687 115.761351) (xy 248.138685 115.76135) + (xy 248.084831 115.73391) (xy 247.987853 115.684496) (xy 247.826847 115.632181) (xy 247.659649 115.6057) + (xy 247.659644 115.6057) (xy 247.490356 115.6057) (xy 247.490351 115.6057) (xy 247.323152 115.632181) + (xy 247.162146 115.684496) (xy 247.011311 115.761352) (xy 246.874365 115.860848) (xy 246.87436 115.860852) + (xy 246.754652 115.98056) (xy 246.754648 115.980565) (xy 246.655152 116.117511) (xy 246.578296 116.268346) + (xy 246.525981 116.429352) (xy 246.4995 116.59655) (xy 244.6894 116.59655) (xy 244.6894 116.537371) + (xy 244.651853 116.252175) (xy 244.577402 115.97432) (xy 244.46732 115.708559) (xy 244.467318 115.708556) + (xy 244.467316 115.708551) (xy 244.323495 115.459448) (xy 244.323491 115.459441) (xy 244.219569 115.324007) + (xy 244.148378 115.231228) (xy 244.148372 115.231221) (xy 243.944978 115.027827) (xy 243.944971 115.027821) + (xy 243.716767 114.852715) (xy 243.716765 114.852713) (xy 243.716759 114.852709) (xy 243.716754 114.852706) + (xy 243.716751 114.852704) (xy 243.467648 114.708883) (xy 243.467631 114.708875) (xy 243.201878 114.598797) + (xy 242.924023 114.524346) (xy 242.638838 114.486801) (xy 242.638835 114.4868) (xy 242.638829 114.4868) + (xy 242.351171 114.4868) (xy 242.351165 114.4868) (xy 242.351161 114.486801) (xy 242.065976 114.524346) + (xy 241.788121 114.598797) (xy 241.522368 114.708875) (xy 241.522351 114.708883) (xy 241.273248 114.852704) + (xy 241.273232 114.852715) (xy 241.045028 115.027821) (xy 241.045021 115.027827) (xy 240.841627 115.231221) + (xy 240.77043 115.324007) (xy 240.714001 115.365209) (xy 240.644255 115.369364) (xy 240.583335 115.335151) + (xy 240.550583 115.273434) (xy 240.556396 115.203807) (xy 240.564661 115.186531) (xy 240.617863 115.094383) + (xy 240.725742 114.833939) (xy 240.798704 114.561642) (xy 240.8355 114.282151) (xy 240.8355 114.000249) + (xy 240.798704 113.720758) (xy 240.725742 113.448461) (xy 240.617863 113.188017) (xy 240.617861 113.188014) + (xy 240.617859 113.188009) (xy 240.476916 112.94389) (xy 240.476912 112.943883) (xy 240.3053 112.720235) + (xy 240.305298 112.720233) (xy 240.305295 112.720229) (xy 240.10597 112.520904) (xy 240.021889 112.456386) + (xy 239.882317 112.349288) (xy 239.882311 112.349284) (xy 239.882309 112.349283) (xy 239.63819 112.20834) + (xy 239.638179 112.208335) (xy 239.377743 112.100459) (xy 239.105439 112.027495) (xy 238.825958 111.9907) + (xy 238.825951 111.9907) (xy 238.544049 111.9907) (xy 238.544041 111.9907) (xy 238.26456 112.027495) + (xy 237.992256 112.100459) (xy 237.73182 112.208335) (xy 237.731809 112.20834) (xy 237.487692 112.349281) + (xy 237.487683 112.349288) (xy 237.467106 112.365076) (xy 237.401938 112.39027) (xy 237.391622 112.3907) + (xy 234.059998 112.3907) (xy 234.059981 112.390701) (xy 233.957203 112.4012) (xy 233.9572 112.401201) + (xy 233.790668 112.456385) (xy 233.790663 112.456387) (xy 233.641342 112.548489) (xy 233.517289 112.672542) + (xy 233.425187 112.821863) (xy 233.425186 112.821866) (xy 233.370001 112.988403) (xy 233.370001 112.988404) + (xy 233.37 112.988404) (xy 233.3595 113.091183) (xy 231.106385 113.091183) (xy 231.127712 113.069856) + (xy 231.219814 112.920534) (xy 231.274999 112.753997) (xy 231.2855 112.651209) (xy 231.285499 111.226153) + (xy 239.4025 111.226153) (xy 239.4025 111.383846) (xy 239.433261 111.538489) (xy 239.433264 111.538501) + (xy 239.493602 111.684172) (xy 239.493609 111.684185) (xy 239.58121 111.815288) (xy 239.581213 111.815292) + (xy 239.692707 111.926786) (xy 239.692711 111.926789) (xy 239.823814 112.01439) (xy 239.823827 112.014397) + (xy 239.969498 112.074735) (xy 239.969503 112.074737) (xy 240.124153 112.105499) (xy 240.124156 112.1055) + (xy 240.124158 112.1055) (xy 240.281844 112.1055) (xy 240.281845 112.105499) (xy 240.436497 112.074737) + (xy 240.582179 112.014394) (xy 240.713289 111.926789) (xy 240.824789 111.815289) (xy 240.912394 111.684179) + (xy 240.972737 111.538497) (xy 240.988303 111.460241) (xy 242.8845 111.460241) (xy 242.8845 111.742158) + (xy 242.921295 112.021639) (xy 242.994259 112.293943) (xy 243.102135 112.554379) (xy 243.10214 112.55439) + (xy 243.217383 112.753995) (xy 243.243088 112.798517) (xy 243.388794 112.988404) (xy 243.414704 113.02217) + (xy 243.614029 113.221495) (xy 243.614033 113.221498) (xy 243.614035 113.2215) (xy 243.837683 113.393112) + (xy 243.83769 113.393116) (xy 244.081809 113.534059) (xy 244.081814 113.534061) (xy 244.081817 113.534063) + (xy 244.342261 113.641942) (xy 244.614558 113.714904) (xy 244.894049 113.7517) (xy 244.894056 113.7517) + (xy 245.175944 113.7517) (xy 245.175951 113.7517) (xy 245.455442 113.714904) (xy 245.727739 113.641942) + (xy 245.988183 113.534063) (xy 246.232317 113.393112) (xy 246.252892 113.377323) (xy 246.31806 113.352129) + (xy 246.328379 113.351699) (xy 247.509982 113.351699) (xy 247.509991 113.3517) (xy 249.660008 113.351699) + (xy 249.762797 113.341199) (xy 249.929334 113.286014) (xy 250.078656 113.193912) (xy 250.202712 113.069856) + (xy 250.294814 112.920534) (xy 250.349999 112.753997) (xy 250.3605 112.651209) (xy 250.360499 111.460241) + (xy 261.9345 111.460241) (xy 261.9345 111.742158) (xy 261.971295 112.021639) (xy 262.044259 112.293943) + (xy 262.152135 112.554379) (xy 262.15214 112.55439) (xy 262.267383 112.753995) (xy 262.293088 112.798517) + (xy 262.438794 112.988404) (xy 262.464704 113.02217) (xy 262.664029 113.221495) (xy 262.664033 113.221498) + (xy 262.664035 113.2215) (xy 262.887683 113.393112) (xy 262.88769 113.393116) (xy 263.131809 113.534059) + (xy 263.131814 113.534061) (xy 263.131817 113.534063) (xy 263.392261 113.641942) (xy 263.664558 113.714904) + (xy 263.944049 113.7517) (xy 263.944056 113.7517) (xy 264.225944 113.7517) (xy 264.225951 113.7517) + (xy 264.505442 113.714904) (xy 264.777739 113.641942) (xy 265.038183 113.534063) (xy 265.282317 113.393112) + (xy 265.302892 113.377323) (xy 265.36806 113.352129) (xy 265.378379 113.351699) (xy 266.559982 113.351699) + (xy 266.559991 113.3517) (xy 268.710008 113.351699) (xy 268.812797 113.341199) (xy 268.979334 113.286014) + (xy 269.128656 113.193912) (xy 269.252712 113.069856) (xy 269.344814 112.920534) (xy 269.399999 112.753997) + (xy 269.4105 112.651209) (xy 269.410499 111.460241) (xy 280.9845 111.460241) (xy 280.9845 111.742158) + (xy 281.021295 112.021639) (xy 281.094259 112.293943) (xy 281.202135 112.554379) (xy 281.20214 112.55439) + (xy 281.317383 112.753995) (xy 281.343088 112.798517) (xy 281.488794 112.988404) (xy 281.514704 113.02217) + (xy 281.714029 113.221495) (xy 281.714033 113.221498) (xy 281.714035 113.2215) (xy 281.937683 113.393112) + (xy 281.93769 113.393116) (xy 282.181809 113.534059) (xy 282.181814 113.534061) (xy 282.181817 113.534063) + (xy 282.442261 113.641942) (xy 282.714558 113.714904) (xy 282.994049 113.7517) (xy 282.994056 113.7517) + (xy 283.275944 113.7517) (xy 283.275951 113.7517) (xy 283.555442 113.714904) (xy 283.827739 113.641942) + (xy 284.088183 113.534063) (xy 284.332317 113.393112) (xy 284.352892 113.377323) (xy 284.41806 113.352129) + (xy 284.428379 113.351699) (xy 285.609982 113.351699) (xy 285.609991 113.3517) (xy 287.760008 113.351699) + (xy 287.862797 113.341199) (xy 288.029334 113.286014) (xy 288.178656 113.193912) (xy 288.302712 113.069856) + (xy 288.394814 112.920534) (xy 288.449999 112.753997) (xy 288.4605 112.651209) (xy 288.460499 111.460241) + (xy 300.0345 111.460241) (xy 300.0345 111.742158) (xy 300.071295 112.021639) (xy 300.144259 112.293943) + (xy 300.252135 112.554379) (xy 300.25214 112.55439) (xy 300.367383 112.753995) (xy 300.393088 112.798517) + (xy 300.538794 112.988404) (xy 300.564704 113.02217) (xy 300.764029 113.221495) (xy 300.764033 113.221498) + (xy 300.764035 113.2215) (xy 300.987683 113.393112) (xy 300.98769 113.393116) (xy 301.231809 113.534059) + (xy 301.231814 113.534061) (xy 301.231817 113.534063) (xy 301.492261 113.641942) (xy 301.764558 113.714904) + (xy 302.044049 113.7517) (xy 302.044056 113.7517) (xy 302.325944 113.7517) (xy 302.325951 113.7517) + (xy 302.605442 113.714904) (xy 302.877739 113.641942) (xy 303.138183 113.534063) (xy 303.382317 113.393112) + (xy 303.402892 113.377323) (xy 303.46806 113.352129) (xy 303.478379 113.351699) (xy 304.659982 113.351699) + (xy 304.659991 113.3517) (xy 306.810008 113.351699) (xy 306.912797 113.341199) (xy 307.079334 113.286014) + (xy 307.228656 113.193912) (xy 307.331385 113.091183) (xy 314.322 113.091183) (xy 314.322 115.191201) + (xy 314.322001 115.191218) (xy 314.3325 115.293996) (xy 314.332501 115.293999) (xy 314.342445 115.324007) + (xy 314.387686 115.460534) (xy 314.479788 115.609856) (xy 314.603844 115.733912) (xy 314.753166 115.826014) + (xy 314.919703 115.881199) (xy 315.022491 115.8917) (xy 316.949618 115.891699) (xy 316.949627 115.8917) + (xy 317.378351 115.891699) (xy 317.445389 115.911383) (xy 317.491144 115.964187) (xy 317.501088 116.033346) + (xy 317.478669 116.088583) (xy 317.457651 116.117511) (xy 317.380796 116.268346) (xy 317.328481 116.429352) + (xy 317.302 116.59655) (xy 317.302 116.765849) (xy 317.328481 116.933047) (xy 317.380796 117.094053) + (xy 317.457652 117.244888) (xy 317.557148 117.381834) (xy 317.557152 117.381839) (xy 317.67686 117.501547) + (xy 317.676865 117.501551) (xy 317.796317 117.588337) (xy 317.813815 117.60105) (xy 317.909925 117.65002) + (xy 317.964646 117.677903) (xy 317.964648 117.677903) (xy 317.964651 117.677905) (xy 318.05095 117.705945) + (xy 318.125652 117.730218) (xy 318.292851 117.7567) (xy 318.292856 117.7567) (xy 318.462149 117.7567) + (xy 318.629347 117.730218) (xy 318.790349 117.677905) (xy 318.941185 117.60105) (xy 319.078141 117.501546) + (xy 319.197846 117.381841) (xy 319.29735 117.244885) (xy 319.374205 117.094049) (xy 319.426518 116.933047) + (xy 319.443625 116.825038) (xy 319.453 116.765849) (xy 319.453 116.59655) (xy 319.427428 116.435098) + (xy 319.436382 116.365805) (xy 319.481379 116.312353) (xy 319.54813 116.291713) (xy 319.549901 116.2917) + (xy 319.788444 116.2917) (xy 319.788451 116.2917) (xy 320.067942 116.254904) (xy 320.340239 116.181942) + (xy 320.600683 116.074063) (xy 320.844817 115.933112) (xy 321.068465 115.7615) (xy 321.2678 115.562165) + (xy 321.335492 115.473946) (xy 321.39192 115.432744) (xy 321.461666 115.428589) (xy 321.522586 115.462801) + (xy 321.555339 115.524518) (xy 321.549526 115.594146) (xy 321.541255 115.611433) (xy 321.485183 115.708551) + (xy 321.485175 115.708568) (xy 321.375097 115.974321) (xy 321.300646 116.252176) (xy 321.263101 116.537361) + (xy 321.2631 116.537377) (xy 321.2631 116.825022) (xy 321.263101 116.825038) (xy 321.300646 117.110223) + (xy 321.375097 117.388078) (xy 321.485175 117.653831) (xy 321.485183 117.653848) (xy 321.629004 117.902951) + (xy 321.629015 117.902967) (xy 321.804121 118.131171) (xy 321.804127 118.131178) (xy 322.007521 118.334572) + (xy 322.007527 118.334577) (xy 322.235741 118.509691) (xy 322.235748 118.509695) (xy 322.484851 118.653516) + (xy 322.484856 118.653518) (xy 322.484859 118.65352) (xy 322.484863 118.653521) (xy 322.484868 118.653524) + (xy 322.579175 118.692587) (xy 322.75062 118.763602) (xy 323.028475 118.838053) (xy 323.313671 118.8756) + (xy 323.313678 118.8756) (xy 323.601322 118.8756) (xy 323.601329 118.8756) (xy 323.886525 118.838053) + (xy 324.16438 118.763602) (xy 324.430141 118.65352) (xy 324.679259 118.509691) (xy 324.907473 118.334577) + (xy 325.110877 118.131173) (xy 325.285991 117.902959) (xy 325.42982 117.653841) (xy 325.539902 117.38808) + (xy 325.614353 117.110225) (xy 325.6519 116.825029) (xy 325.6519 116.59655) (xy 327.462 116.59655) + (xy 327.462 116.765849) (xy 327.488481 116.933047) (xy 327.540796 117.094053) (xy 327.617652 117.244888) + (xy 327.717148 117.381834) (xy 327.717152 117.381839) (xy 327.83686 117.501547) (xy 327.836865 117.501551) + (xy 327.956317 117.588337) (xy 327.973815 117.60105) (xy 328.069925 117.65002) (xy 328.124646 117.677903) + (xy 328.124648 117.677903) (xy 328.124651 117.677905) (xy 328.21095 117.705945) (xy 328.285652 117.730218) + (xy 328.452851 117.7567) (xy 328.452856 117.7567) (xy 328.622149 117.7567) (xy 328.789347 117.730218) + (xy 328.950349 117.677905) (xy 329.101185 117.60105) (xy 329.238141 117.501546) (xy 329.357846 117.381841) + (xy 329.45735 117.244885) (xy 329.534205 117.094049) (xy 329.586518 116.933047) (xy 329.603625 116.825038) + (xy 329.613 116.765849) (xy 329.613 116.59655) (xy 329.586518 116.429352) (xy 329.541796 116.291713) + (xy 329.534205 116.268351) (xy 329.534203 116.268348) (xy 329.534203 116.268346) (xy 329.490176 116.18194) + (xy 329.45735 116.117515) (xy 329.425781 116.074064) (xy 329.357851 115.980565) (xy 329.357847 115.98056) + (xy 329.238139 115.860852) (xy 329.238134 115.860848) (xy 329.101188 115.761352) (xy 329.101187 115.761351) + (xy 329.101185 115.76135) (xy 329.047331 115.73391) (xy 328.950353 115.684496) (xy 328.789347 115.632181) + (xy 328.622149 115.6057) (xy 328.622144 115.6057) (xy 328.452856 115.6057) (xy 328.452851 115.6057) + (xy 328.285652 115.632181) (xy 328.124646 115.684496) (xy 327.973811 115.761352) (xy 327.836865 115.860848) + (xy 327.83686 115.860852) (xy 327.717152 115.98056) (xy 327.717148 115.980565) (xy 327.617652 116.117511) + (xy 327.540796 116.268346) (xy 327.488481 116.429352) (xy 327.462 116.59655) (xy 325.6519 116.59655) + (xy 325.6519 116.537371) (xy 325.614353 116.252175) (xy 325.539902 115.97432) (xy 325.42982 115.708559) + (xy 325.429818 115.708556) (xy 325.429816 115.708551) (xy 325.285995 115.459448) (xy 325.285991 115.459441) + (xy 325.182069 115.324007) (xy 325.110878 115.231228) (xy 325.110872 115.231221) (xy 324.907478 115.027827) + (xy 324.907471 115.027821) (xy 324.679267 114.852715) (xy 324.679265 114.852713) (xy 324.679259 114.852709) + (xy 324.679254 114.852706) (xy 324.679251 114.852704) (xy 324.430148 114.708883) (xy 324.430131 114.708875) + (xy 324.164378 114.598797) (xy 323.886523 114.524346) (xy 323.601338 114.486801) (xy 323.601335 114.4868) + (xy 323.601329 114.4868) (xy 323.313671 114.4868) (xy 323.313665 114.4868) (xy 323.313661 114.486801) + (xy 323.028476 114.524346) (xy 322.750621 114.598797) (xy 322.484868 114.708875) (xy 322.484851 114.708883) + (xy 322.235748 114.852704) (xy 322.235732 114.852715) (xy 322.007528 115.027821) (xy 322.007521 115.027827) + (xy 321.804127 115.231221) (xy 321.73293 115.324007) (xy 321.676501 115.365209) (xy 321.606755 115.369364) + (xy 321.545835 115.335151) (xy 321.513083 115.273434) (xy 321.518896 115.203807) (xy 321.527161 115.186531) + (xy 321.580363 115.094383) (xy 321.688242 114.833939) (xy 321.761204 114.561642) (xy 321.798 114.282151) + (xy 321.798 114.000249) (xy 321.761204 113.720758) (xy 321.688242 113.448461) (xy 321.580363 113.188017) + (xy 321.580361 113.188014) (xy 321.580359 113.188009) (xy 321.439416 112.94389) (xy 321.439412 112.943883) + (xy 321.2678 112.720235) (xy 321.267798 112.720233) (xy 321.267795 112.720229) (xy 321.06847 112.520904) + (xy 320.984389 112.456386) (xy 320.844817 112.349288) (xy 320.844811 112.349284) (xy 320.844809 112.349283) + (xy 320.60069 112.20834) (xy 320.600679 112.208335) (xy 320.340243 112.100459) (xy 320.067939 112.027495) + (xy 319.788458 111.9907) (xy 319.788451 111.9907) (xy 319.506549 111.9907) (xy 319.506541 111.9907) + (xy 319.22706 112.027495) (xy 318.954756 112.100459) (xy 318.69432 112.208335) (xy 318.694309 112.20834) + (xy 318.450192 112.349281) (xy 318.450183 112.349288) (xy 318.429606 112.365076) (xy 318.364438 112.39027) + (xy 318.354122 112.3907) (xy 317.961706 112.3907) (xy 317.914253 112.381261) (xy 317.867753 112.362) + (xy 316.822253 112.362) (xy 316.731747 112.362) (xy 316.731745 112.362) (xy 316.731743 112.362001) + (xy 316.685245 112.381261) (xy 316.637793 112.3907) (xy 315.022498 112.3907) (xy 315.022481 112.390701) + (xy 314.919703 112.4012) (xy 314.9197 112.401201) (xy 314.753168 112.456385) (xy 314.753163 112.456387) + (xy 314.603842 112.548489) (xy 314.479789 112.672542) (xy 314.387687 112.821863) (xy 314.387686 112.821866) + (xy 314.332501 112.988403) (xy 314.332501 112.988404) (xy 314.3325 112.988404) (xy 314.322 113.091183) + (xy 307.331385 113.091183) (xy 307.352712 113.069856) (xy 307.444814 112.920534) (xy 307.499999 112.753997) + (xy 307.5105 112.651209) (xy 307.510499 111.460241) (xy 323.847 111.460241) (xy 323.847 111.742158) + (xy 323.883795 112.021639) (xy 323.956759 112.293943) (xy 324.064635 112.554379) (xy 324.06464 112.55439) + (xy 324.179883 112.753995) (xy 324.205588 112.798517) (xy 324.351294 112.988404) (xy 324.377204 113.02217) + (xy 324.576529 113.221495) (xy 324.576533 113.221498) (xy 324.576535 113.2215) (xy 324.800183 113.393112) + (xy 324.80019 113.393116) (xy 325.044309 113.534059) (xy 325.044314 113.534061) (xy 325.044317 113.534063) + (xy 325.304761 113.641942) (xy 325.369594 113.659313) (xy 325.429254 113.695678) (xy 325.459783 113.758525) + (xy 325.4615 113.779088) (xy 325.4615 113.935846) (xy 325.492261 114.090489) (xy 325.492264 114.090501) + (xy 325.552602 114.236172) (xy 325.552609 114.236185) (xy 325.64021 114.367288) (xy 325.640213 114.367292) + (xy 325.751707 114.478786) (xy 325.751711 114.478789) (xy 325.882814 114.56639) (xy 325.882827 114.566397) + (xy 326.028498 114.626735) (xy 326.028503 114.626737) (xy 326.183153 114.657499) (xy 326.183156 114.6575) + (xy 326.183158 114.6575) (xy 326.340844 114.6575) (xy 326.340845 114.657499) (xy 326.495497 114.626737) + (xy 326.641179 114.566394) (xy 326.772289 114.478789) (xy 326.883789 114.367289) (xy 326.971394 114.236179) + (xy 327.031737 114.090497) (xy 327.0625 113.935842) (xy 327.0625 113.778158) (xy 327.0625 113.778155) + (xy 327.062499 113.778153) (xy 327.031739 113.623511) (xy 327.031736 113.623501) (xy 327.027811 113.614025) + (xy 327.024163 113.580101) (xy 327.020053 113.546223) (xy 327.020436 113.54543) (xy 327.020342 113.544556) + (xy 327.035608 113.514059) (xy 327.050473 113.483323) (xy 327.051347 113.482616) (xy 327.051618 113.482077) + (xy 327.07765 113.460804) (xy 327.078982 113.459988) (xy 327.194817 113.393112) (xy 327.22058 113.373342) + (xy 327.226157 113.36993) (xy 327.253826 113.362464) (xy 327.28056 113.352129) (xy 327.290879 113.351699) + (xy 328.472482 113.351699) (xy 328.472491 113.3517) (xy 330.622508 113.351699) (xy 330.725297 113.341199) + (xy 330.891834 113.286014) (xy 331.041156 113.193912) (xy 331.165212 113.069856) (xy 331.257314 112.920534) + (xy 331.312499 112.753997) (xy 331.323 112.651209) (xy 331.322999 111.460241) (xy 347.6595 111.460241) + (xy 347.6595 111.742158) (xy 347.696295 112.021639) (xy 347.769259 112.293943) (xy 347.877135 112.554379) + (xy 347.87714 112.55439) (xy 347.992383 112.753995) (xy 348.018088 112.798517) (xy 348.163794 112.988404) + (xy 348.189704 113.02217) (xy 348.389029 113.221495) (xy 348.389033 113.221498) (xy 348.389035 113.2215) + (xy 348.612683 113.393112) (xy 348.61269 113.393116) (xy 348.856809 113.534059) (xy 348.856814 113.534061) + (xy 348.856817 113.534063) (xy 349.117261 113.641942) (xy 349.389558 113.714904) (xy 349.669049 113.7517) + (xy 349.669056 113.7517) (xy 349.950944 113.7517) (xy 349.950951 113.7517) (xy 350.230442 113.714904) + (xy 350.502739 113.641942) (xy 350.763183 113.534063) (xy 351.007317 113.393112) (xy 351.027892 113.377323) + (xy 351.09306 113.352129) (xy 351.103379 113.351699) (xy 352.284982 113.351699) (xy 352.284991 113.3517) + (xy 354.435008 113.351699) (xy 354.537797 113.341199) (xy 354.704334 113.286014) (xy 354.853656 113.193912) + (xy 354.977712 113.069856) (xy 355.069814 112.920534) (xy 355.124999 112.753997) (xy 355.1355 112.651209) + (xy 355.135499 110.551192) (xy 355.124999 110.448403) (xy 355.069814 110.281866) (xy 354.977712 110.132544) + (xy 354.853656 110.008488) (xy 354.704334 109.916386) (xy 354.537797 109.861201) (xy 354.537795 109.8612) + (xy 354.435016 109.8507) (xy 354.435009 109.8507) (xy 352.723406 109.8507) (xy 352.675953 109.841261) + (xy 352.629454 109.822) (xy 352.629453 109.822) (xy 351.655253 109.822) (xy 351.062561 109.822) + (xy 351.000561 109.805387) (xy 350.76319 109.66834) (xy 350.763179 109.668335) (xy 350.502743 109.560459) + (xy 350.230439 109.487495) (xy 349.950958 109.4507) (xy 349.950951 109.4507) (xy 349.669049 109.4507) + (xy 349.669041 109.4507) (xy 349.38956 109.487495) (xy 349.117256 109.560459) (xy 348.85682 109.668335) + (xy 348.856809 109.66834) (xy 348.61269 109.809283) (xy 348.612684 109.809287) (xy 348.612683 109.809288) + (xy 348.595866 109.822192) (xy 348.389029 109.980904) (xy 348.189704 110.180229) (xy 348.018089 110.403882) + (xy 348.018083 110.40389) (xy 347.87714 110.648009) (xy 347.877135 110.64802) (xy 347.769259 110.908456) + (xy 347.696295 111.18076) (xy 347.6595 111.460241) (xy 331.322999 111.460241) (xy 331.322999 110.551192) + (xy 331.312499 110.448403) (xy 331.257314 110.281866) (xy 331.194628 110.180235) (xy 331.180171 110.156796) + (xy 331.161731 110.089404) (xy 331.182654 110.02274) (xy 331.236296 109.977971) (xy 331.28571 109.9677) + (xy 337.813152 109.9677) (xy 337.813153 109.9677) (xy 337.896768 109.933065) (xy 343.893914 103.935917) + (xy 343.955237 103.902433) (xy 343.981595 103.899599) (xy 345.025429 103.899599) (xy 345.092468 103.919284) + (xy 345.124631 103.949202) (xy 345.129363 103.955512) (xy 345.199438 104.048952) (xy 345.199439 104.048953) + (xy 345.19944 104.048954) (xy 345.333632 104.172795) (xy 345.488025 104.270297) (xy 345.618267 104.322506) + (xy 345.657514 104.338239) (xy 345.657515 104.338239) (xy 345.657517 104.33824) (xy 345.836508 104.374379) + (xy 345.836502 104.374379) (xy 345.852822 104.374659) (xy 346.019084 104.37752) (xy 346.199212 104.347558) + (xy 346.254707 104.327498) (xy 346.370936 104.285485) (xy 346.370937 104.285483) (xy 346.37094 104.285483) + (xy 346.385975 104.27672) (xy 346.392659 104.272835) (xy 346.39295 104.272757) (xy 346.420833 104.25646) + (xy 346.420951 104.256392) (xy 346.424168 104.255601) (xy 346.483262 104.239599) (xy 347.964392 104.239599) + (xy 347.964514 104.239606) (xy 347.972605 104.239605) (xy 347.972608 104.239606) (xy 348.004742 104.239602) + (xy 348.067304 104.256534) (xy 348.09513 104.272791) (xy 348.095132 104.272791) (xy 348.10128 104.276383) + (xy 348.102935 104.277208) (xy 348.117078 104.28545) (xy 348.2888 104.347521) (xy 348.468921 104.377482) + (xy 348.648598 104.37439) (xy 348.651491 104.374341) (xy 348.830466 104.338205) (xy 348.830469 104.338203) + (xy 348.830474 104.338203) (xy 348.99996 104.270262) (xy 349.154346 104.172763) (xy 349.155803 104.171419) + (xy 349.28853 104.04893) (xy 349.288532 104.048928) (xy 349.288926 104.048403) (xy 349.363696 103.948702) + (xy 349.419665 103.90688) (xy 349.462898 103.899099) (xy 349.719 103.899099) (xy 350.219 103.899099) + (xy 350.274932 103.899099) (xy 350.358924 103.88855) (xy 350.491757 103.833529) (xy 350.558604 103.7816) + (xy 350.558611 103.781594) (xy 351.026494 103.313712) (xy 351.026499 103.313706) (xy 351.078427 103.24686) + (xy 351.081642 103.2391) (xy 350.219 103.2391) (xy 350.219 103.899099) (xy 349.719 103.899099) (xy 349.719 103.1131) + (xy 349.738685 103.046061) (xy 349.791489 103.000306) (xy 349.843 102.9891) (xy 349.969 102.9891) + (xy 349.969 102.8631) (xy 349.988685 102.796061) (xy 350.041489 102.750306) (xy 350.093 102.7391) + (xy 351.144 102.7391) (xy 351.144 102.622953) (xy 351.12902 102.509169) (xy 351.129018 102.509164) + (xy 351.070378 102.367593) (xy 351.070375 102.367588) (xy 351.03002 102.314996) (xy 351.004826 102.249827) + (xy 351.018864 102.181382) (xy 351.030021 102.164023) (xy 351.03076 102.163061) (xy 351.070812 102.110863) + (xy 351.129507 101.969163) (xy 351.1445 101.855277) (xy 351.144499 101.122924) (xy 351.143245 101.113395) + (xy 351.128447 101.000978) (xy 351.131433 101.000584) (xy 351.132734 100.945117) (xy 351.163176 100.895151) + (xy 351.273039 100.785289) (xy 351.360644 100.654179) (xy 351.371199 100.628698) (xy 351.379233 100.6093) + (xy 351.420987 100.508497) (xy 351.45175 100.353842) (xy 351.45175 100.196158) (xy 351.45175 100.196155) + (xy 351.451749 100.196153) (xy 351.446595 100.170241) (xy 351.420987 100.041503) (xy 351.420985 100.041498) + (xy 351.360647 99.895827) (xy 351.36064 99.895814) (xy 351.273039 99.764711) (xy 351.273036 99.764707) + (xy 351.161542 99.653213) (xy 351.161538 99.65321) (xy 351.030435 99.565609) (xy 351.030422 99.565602) + (xy 350.884751 99.505264) (xy 350.884739 99.505261) (xy 350.730095 99.4745) (xy 350.730092 99.4745) + (xy 350.572408 99.4745) (xy 350.572405 99.4745) (xy 350.41776 99.505261) (xy 350.417748 99.505264) + (xy 350.272077 99.565602) (xy 350.272064 99.565609) (xy 350.140961 99.65321) (xy 350.140957 99.653213) + (xy 350.029463 99.764707) (xy 350.02946 99.764711) (xy 349.941859 99.895814) (xy 349.941852 99.895827) + (xy 349.881514 100.041498) (xy 349.881511 100.04151) (xy 349.85075 100.196153) (xy 349.85075 100.196158) + (xy 349.85075 100.353842) (xy 349.85075 100.353844) (xy 349.850749 100.353844) (xy 349.86598 100.430408) + (xy 349.859753 100.5) (xy 349.81689 100.555177) (xy 349.751001 100.578422) (xy 349.744363 100.5786) + (xy 349.462573 100.5786) (xy 349.395534 100.558915) (xy 349.363372 100.528998) (xy 349.288561 100.429244) + (xy 349.154369 100.305404) (xy 349.154366 100.305402) (xy 349.154365 100.305401) (xy 349.154362 100.305399) + (xy 348.999977 100.207901) (xy 348.830487 100.139958) (xy 348.830477 100.139956) (xy 348.651492 100.103818) + (xy 348.651499 100.103818) (xy 348.479794 100.100865) (xy 348.468918 100.100678) (xy 348.468917 100.100678) + (xy 348.468914 100.100678) (xy 348.288797 100.130638) (xy 348.288784 100.130641) (xy 348.117063 100.192713) + (xy 348.102548 100.20117) (xy 348.102463 100.201219) (xy 348.095376 100.20534) (xy 348.09513 100.205408) + (xy 348.067338 100.221644) (xy 348.06709 100.221789) (xy 348.064363 100.222459) (xy 348.004746 100.238596) + (xy 347.964401 100.238593) (xy 347.964297 100.2386) (xy 346.523596 100.2386) (xy 346.515414 100.238598) + (xy 346.515392 100.238593) (xy 346.485465 100.238595) (xy 346.483228 100.238595) (xy 346.482946 100.238512) + (xy 346.420693 100.221662) (xy 346.392871 100.205408) (xy 346.386805 100.201864) (xy 346.385107 100.201017) + (xy 346.374845 100.195037) (xy 346.370921 100.19275) (xy 346.199197 100.130678) (xy 346.199191 100.130677) + (xy 346.019081 100.100719) (xy 346.019078 100.100719) (xy 346.010539 100.100865) (xy 345.836507 100.103859) + (xy 345.657534 100.139994) (xy 345.657523 100.139997) (xy 345.488042 100.207937) (xy 345.488041 100.207937) + (xy 345.333661 100.305432) (xy 345.333658 100.305434) (xy 345.23856 100.393196) (xy 345.199469 100.429272) + (xy 345.1247 100.528972) (xy 345.124681 100.528997) (xy 345.068711 100.570819) (xy 345.025478 100.5786) + (xy 343.887821 100.5786) (xy 343.773945 100.593591) (xy 343.773937 100.593593) (xy 343.632237 100.652287) + (xy 343.510556 100.745656) (xy 343.417187 100.867337) (xy 343.358493 101.009036) (xy 343.358492 101.009038) + (xy 343.3435 101.122922) (xy 343.3435 101.855278) (xy 343.358491 101.969154) (xy 343.358492 101.969159) + (xy 343.358493 101.969163) (xy 343.377428 102.014876) (xy 343.417187 102.110862) (xy 343.457665 102.163615) + (xy 343.482858 102.228784) (xy 343.468819 102.297229) (xy 343.457665 102.314585) (xy 343.417187 102.367337) + (xy 343.358493 102.509036) (xy 343.358492 102.509038) (xy 343.3435 102.622922) (xy 343.3435 103.355278) + (xy 343.358491 103.469154) (xy 343.358492 103.46916) (xy 343.358493 103.469163) (xy 343.37743 103.514881) + (xy 343.417185 103.610857) (xy 343.417186 103.610858) (xy 343.417188 103.610863) (xy 343.419725 103.61417) + (xy 343.420997 103.61746) (xy 343.421248 103.617894) (xy 343.42118 103.617933) (xy 343.444919 103.679335) + (xy 343.430882 103.74778) (xy 343.40903 103.777335) (xy 337.709986 109.476381) (xy 337.648663 109.509866) + (xy 337.622305 109.5127) (xy 330.830475 109.5127) (xy 330.763436 109.493015) (xy 330.717681 109.440211) + (xy 330.715934 109.4362) (xy 330.684794 109.361021) (xy 330.684792 109.361018) (xy 330.68479 109.361014) + (xy 330.597189 109.229911) (xy 330.597186 109.229907) (xy 330.485692 109.118413) (xy 330.485688 109.11841) + (xy 330.354585 109.030809) (xy 330.354572 109.030802) (xy 330.208901 108.970464) (xy 330.208889 108.970461) + (xy 330.054245 108.9397) (xy 330.054242 108.9397) (xy 329.896558 108.9397) (xy 329.896555 108.9397) + (xy 329.74191 108.970461) (xy 329.741898 108.970464) (xy 329.596227 109.030802) (xy 329.596214 109.030809) + (xy 329.465111 109.11841) (xy 329.465107 109.118413) (xy 329.353613 109.229907) (xy 329.35361 109.229911) + (xy 329.266009 109.361014) (xy 329.266002 109.361027) (xy 329.205664 109.506698) (xy 329.205661 109.50671) + (xy 329.1749 109.661353) (xy 329.1749 109.7267) (xy 329.172349 109.735385) (xy 329.173638 109.744347) + (xy 329.162659 109.768387) (xy 329.155215 109.793739) (xy 329.148374 109.799666) (xy 329.144613 109.807903) + (xy 329.122378 109.822192) (xy 329.102411 109.839494) (xy 329.091896 109.841781) (xy 329.085835 109.845677) + (xy 329.0509 109.8507) (xy 328.910906 109.8507) (xy 328.863453 109.841261) (xy 328.816954 109.822) + (xy 328.816953 109.822) (xy 327.842753 109.822) (xy 327.250061 109.822) (xy 327.188061 109.805387) + (xy 326.95069 109.66834) (xy 326.950679 109.668335) (xy 326.690243 109.560459) (xy 326.417939 109.487495) + (xy 326.138458 109.4507) (xy 326.138451 109.4507) (xy 325.856549 109.4507) (xy 325.856541 109.4507) + (xy 325.57706 109.487495) (xy 325.304756 109.560459) (xy 325.04432 109.668335) (xy 325.044309 109.66834) + (xy 324.80019 109.809283) (xy 324.800184 109.809287) (xy 324.800183 109.809288) (xy 324.783366 109.822192) + (xy 324.576529 109.980904) (xy 324.377204 110.180229) (xy 324.205589 110.403882) (xy 324.205583 110.40389) + (xy 324.06464 110.648009) (xy 324.064635 110.64802) (xy 323.956759 110.908456) (xy 323.883795 111.18076) + (xy 323.847 111.460241) (xy 307.510499 111.460241) (xy 307.510499 110.551192) (xy 307.499999 110.448403) + (xy 307.444814 110.281866) (xy 307.352712 110.132544) (xy 307.228656 110.008488) (xy 307.079334 109.916386) + (xy 306.912797 109.861201) (xy 306.912795 109.8612) (xy 306.810016 109.8507) (xy 306.810009 109.8507) + (xy 305.098406 109.8507) (xy 305.050953 109.841261) (xy 305.004454 109.822) (xy 305.004453 109.822) + (xy 304.030253 109.822) (xy 303.437561 109.822) (xy 303.375561 109.805387) (xy 303.13819 109.66834) + (xy 303.138179 109.668335) (xy 302.877743 109.560459) (xy 302.605439 109.487495) (xy 302.325958 109.4507) + (xy 302.325951 109.4507) (xy 302.044049 109.4507) (xy 302.044041 109.4507) (xy 301.76456 109.487495) + (xy 301.492256 109.560459) (xy 301.23182 109.668335) (xy 301.231809 109.66834) (xy 300.98769 109.809283) + (xy 300.987684 109.809287) (xy 300.987683 109.809288) (xy 300.970866 109.822192) (xy 300.764029 109.980904) + (xy 300.564704 110.180229) (xy 300.393089 110.403882) (xy 300.393083 110.40389) (xy 300.25214 110.648009) + (xy 300.252135 110.64802) (xy 300.144259 110.908456) (xy 300.071295 111.18076) (xy 300.0345 111.460241) + (xy 288.460499 111.460241) (xy 288.460499 110.551192) (xy 288.449999 110.448403) (xy 288.394814 110.281866) + (xy 288.302712 110.132544) (xy 288.178656 110.008488) (xy 288.029334 109.916386) (xy 287.862797 109.861201) + (xy 287.862795 109.8612) (xy 287.760016 109.8507) (xy 287.760009 109.8507) (xy 285.807881 109.8507) + (xy 285.807873 109.8507) (xy 285.074206 109.8507) (xy 285.026753 109.841261) (xy 284.980253 109.822) + (xy 284.387561 109.822) (xy 284.325561 109.805387) (xy 284.08819 109.66834) (xy 284.088179 109.668335) + (xy 283.827743 109.560459) (xy 283.555439 109.487495) (xy 283.275958 109.4507) (xy 283.275951 109.4507) + (xy 282.994049 109.4507) (xy 282.994041 109.4507) (xy 282.71456 109.487495) (xy 282.442256 109.560459) + (xy 282.18182 109.668335) (xy 282.181809 109.66834) (xy 281.93769 109.809283) (xy 281.937684 109.809287) + (xy 281.937683 109.809288) (xy 281.920866 109.822192) (xy 281.714029 109.980904) (xy 281.514704 110.180229) + (xy 281.343089 110.403882) (xy 281.343083 110.40389) (xy 281.20214 110.648009) (xy 281.202135 110.64802) + (xy 281.094259 110.908456) (xy 281.021295 111.18076) (xy 280.9845 111.460241) (xy 269.410499 111.460241) + (xy 269.410499 110.551192) (xy 269.399999 110.448403) (xy 269.344814 110.281866) (xy 269.252712 110.132544) + (xy 269.128656 110.008488) (xy 268.979334 109.916386) (xy 268.812797 109.861201) (xy 268.812795 109.8612) + (xy 268.710016 109.8507) (xy 268.710009 109.8507) (xy 266.757881 109.8507) (xy 266.757873 109.8507) + (xy 266.024206 109.8507) (xy 265.976753 109.841261) (xy 265.930253 109.822) (xy 265.337561 109.822) + (xy 265.275561 109.805387) (xy 265.03819 109.66834) (xy 265.038179 109.668335) (xy 264.777743 109.560459) + (xy 264.505439 109.487495) (xy 264.225958 109.4507) (xy 264.225951 109.4507) (xy 263.944049 109.4507) + (xy 263.944041 109.4507) (xy 263.66456 109.487495) (xy 263.392256 109.560459) (xy 263.13182 109.668335) + (xy 263.131809 109.66834) (xy 262.88769 109.809283) (xy 262.887684 109.809287) (xy 262.887683 109.809288) + (xy 262.870866 109.822192) (xy 262.664029 109.980904) (xy 262.464704 110.180229) (xy 262.293089 110.403882) + (xy 262.293083 110.40389) (xy 262.15214 110.648009) (xy 262.152135 110.64802) (xy 262.044259 110.908456) + (xy 261.971295 111.18076) (xy 261.9345 111.460241) (xy 250.360499 111.460241) (xy 250.360499 110.551192) + (xy 250.349999 110.448403) (xy 250.294814 110.281866) (xy 250.202712 110.132544) (xy 250.078656 110.008488) + (xy 249.929334 109.916386) (xy 249.762797 109.861201) (xy 249.762795 109.8612) (xy 249.660016 109.8507) + (xy 249.660009 109.8507) (xy 247.948406 109.8507) (xy 247.900953 109.841261) (xy 247.854454 109.822) + (xy 247.854453 109.822) (xy 246.880253 109.822) (xy 246.287561 109.822) (xy 246.225561 109.805387) + (xy 245.98819 109.66834) (xy 245.988179 109.668335) (xy 245.727743 109.560459) (xy 245.455439 109.487495) + (xy 245.175958 109.4507) (xy 245.175951 109.4507) (xy 244.894049 109.4507) (xy 244.894041 109.4507) + (xy 244.61456 109.487495) (xy 244.342256 109.560459) (xy 244.08182 109.668335) (xy 244.081809 109.66834) + (xy 243.83769 109.809283) (xy 243.837684 109.809287) (xy 243.837683 109.809288) (xy 243.820866 109.822192) + (xy 243.614029 109.980904) (xy 243.414704 110.180229) (xy 243.243089 110.403882) (xy 243.243083 110.40389) + (xy 243.10214 110.648009) (xy 243.102135 110.64802) (xy 242.994259 110.908456) (xy 242.921295 111.18076) + (xy 242.8845 111.460241) (xy 240.988303 111.460241) (xy 241.0035 111.383842) (xy 241.0035 111.226158) + (xy 241.0035 111.226155) (xy 241.003499 111.226153) (xy 240.972738 111.07151) (xy 240.972737 111.071503) + (xy 240.972735 111.071498) (xy 240.912397 110.925827) (xy 240.91239 110.925814) (xy 240.824789 110.794711) + (xy 240.824786 110.794707) (xy 240.713292 110.683213) (xy 240.713288 110.68321) (xy 240.582185 110.595609) + (xy 240.582172 110.595602) (xy 240.436501 110.535264) (xy 240.436489 110.535261) (xy 240.281845 110.5045) + (xy 240.281842 110.5045) (xy 240.124158 110.5045) (xy 240.124155 110.5045) (xy 239.96951 110.535261) + (xy 239.969498 110.535264) (xy 239.823827 110.595602) (xy 239.823814 110.595609) (xy 239.692711 110.68321) + (xy 239.692707 110.683213) (xy 239.581213 110.794707) (xy 239.58121 110.794711) (xy 239.493609 110.925814) + (xy 239.493602 110.925827) (xy 239.433264 111.071498) (xy 239.433261 111.07151) (xy 239.4025 111.226153) + (xy 231.285499 111.226153) (xy 231.285499 110.551192) (xy 231.274999 110.448403) (xy 231.219814 110.281866) + (xy 231.127712 110.132544) (xy 231.003656 110.008488) (xy 230.854334 109.916386) (xy 230.687797 109.861201) + (xy 230.687795 109.8612) (xy 230.585016 109.8507) (xy 230.585009 109.8507) (xy 228.873406 109.8507) + (xy 228.825953 109.841261) (xy 228.779454 109.822) (xy 228.779453 109.822) (xy 227.805253 109.822) + (xy 227.212561 109.822) (xy 227.150561 109.805387) (xy 226.91319 109.66834) (xy 226.913179 109.668335) + (xy 226.652743 109.560459) (xy 226.380439 109.487495) (xy 226.100958 109.4507) (xy 226.100951 109.4507) + (xy 225.819049 109.4507) (xy 225.819041 109.4507) (xy 225.53956 109.487495) (xy 225.267256 109.560459) + (xy 225.00682 109.668335) (xy 225.006809 109.66834) (xy 224.76269 109.809283) (xy 224.762684 109.809287) + (xy 224.762683 109.809288) (xy 224.745866 109.822192) (xy 224.539029 109.980904) (xy 224.339704 110.180229) + (xy 224.168089 110.403882) (xy 224.168083 110.40389) (xy 224.02714 110.648009) (xy 224.027135 110.64802) + (xy 223.919259 110.908456) (xy 223.846295 111.18076) (xy 223.8095 111.460241) (xy 212.260499 111.460241) + (xy 212.260499 110.551192) (xy 212.249999 110.448403) (xy 212.194814 110.281866) (xy 212.102712 110.132544) + (xy 211.978656 110.008488) (xy 211.829334 109.916386) (xy 211.662797 109.861201) (xy 211.662795 109.8612) + (xy 211.560016 109.8507) (xy 211.560009 109.8507) (xy 209.848406 109.8507) (xy 209.800953 109.841261) + (xy 209.754454 109.822) (xy 209.754453 109.822) (xy 208.780253 109.822) (xy 208.187561 109.822) + (xy 208.125561 109.805387) (xy 207.88819 109.66834) (xy 207.888179 109.668335) (xy 207.627743 109.560459) + (xy 207.355439 109.487495) (xy 207.075958 109.4507) (xy 207.075951 109.4507) (xy 206.794049 109.4507) + (xy 206.794041 109.4507) (xy 206.51456 109.487495) (xy 206.242256 109.560459) (xy 205.98182 109.668335) + (xy 205.981809 109.66834) (xy 205.73769 109.809283) (xy 205.737684 109.809287) (xy 205.737683 109.809288) + (xy 205.720866 109.822192) (xy 205.514029 109.980904) (xy 205.314704 110.180229) (xy 205.143089 110.403882) + (xy 205.143083 110.40389) (xy 205.00214 110.648009) (xy 205.002135 110.64802) (xy 204.894259 110.908456) + (xy 204.821295 111.18076) (xy 204.7845 111.460241) (xy 193.210499 111.460241) (xy 193.210499 110.551192) + (xy 193.199999 110.448403) (xy 193.144814 110.281866) (xy 193.052712 110.132544) (xy 192.928656 110.008488) + (xy 192.779334 109.916386) (xy 192.612797 109.861201) (xy 192.612795 109.8612) (xy 192.510016 109.8507) + (xy 192.510009 109.8507) (xy 190.798406 109.8507) (xy 190.750953 109.841261) (xy 190.704454 109.822) + (xy 190.704453 109.822) (xy 189.730253 109.822) (xy 189.639747 109.822) (xy 189.639745 109.822) + (xy 189.607522 109.835347) (xy 189.593245 109.841261) (xy 189.545794 109.8507) (xy 189.178379 109.8507) + (xy 189.11134 109.831015) (xy 189.102893 109.825076) (xy 189.082326 109.809294) (xy 189.082309 109.809283) + (xy 188.83819 109.66834) (xy 188.838179 109.668335) (xy 188.577743 109.560459) (xy 188.305439 109.487495) + (xy 188.025958 109.4507) (xy 188.025951 109.4507) (xy 187.744049 109.4507) (xy 187.744041 109.4507) + (xy 187.46456 109.487495) (xy 187.192256 109.560459) (xy 186.93182 109.668335) (xy 186.931809 109.66834) + (xy 186.68769 109.809283) (xy 186.687684 109.809287) (xy 186.687683 109.809288) (xy 186.670866 109.822192) + (xy 186.464029 109.980904) (xy 186.264704 110.180229) (xy 186.093089 110.403882) (xy 186.093083 110.40389) + (xy 185.95214 110.648009) (xy 185.952135 110.64802) (xy 185.844259 110.908456) (xy 185.771295 111.18076) + (xy 185.7345 111.460241) (xy 174.085499 111.460241) (xy 174.085499 110.551192) (xy 174.074999 110.448403) + (xy 174.019814 110.281866) (xy 173.927712 110.132544) (xy 173.803656 110.008488) (xy 173.654334 109.916386) + (xy 173.487797 109.861201) (xy 173.487795 109.8612) (xy 173.385016 109.8507) (xy 173.385009 109.8507) + (xy 171.673406 109.8507) (xy 171.625953 109.841261) (xy 171.579454 109.822) (xy 171.579453 109.822) + (xy 170.605253 109.822) (xy 170.012561 109.822) (xy 169.950561 109.805387) (xy 169.71319 109.66834) + (xy 169.713179 109.668335) (xy 169.452743 109.560459) (xy 169.180439 109.487495) (xy 168.900958 109.4507) + (xy 168.900951 109.4507) (xy 168.619049 109.4507) (xy 168.619041 109.4507) (xy 168.33956 109.487495) + (xy 168.067256 109.560459) (xy 167.80682 109.668335) (xy 167.806809 109.66834) (xy 167.56269 109.809283) + (xy 167.562684 109.809287) (xy 167.562683 109.809288) (xy 167.545866 109.822192) (xy 167.339029 109.980904) + (xy 167.139704 110.180229) (xy 166.968089 110.403882) (xy 166.968083 110.40389) (xy 166.82714 110.648009) + (xy 166.827135 110.64802) (xy 166.719259 110.908456) (xy 166.646295 111.18076) (xy 166.6095 111.460241) + (xy 155.085499 111.460241) (xy 155.085499 110.551192) (xy 155.074999 110.448403) (xy 155.019814 110.281866) + (xy 154.927712 110.132544) (xy 154.803656 110.008488) (xy 154.654334 109.916386) (xy 154.487797 109.861201) + (xy 154.487795 109.8612) (xy 154.385016 109.8507) (xy 154.385009 109.8507) (xy 152.673506 109.8507) + (xy 152.626053 109.841261) (xy 152.579554 109.822) (xy 152.579553 109.822) (xy 151.605253 109.822) + (xy 151.012561 109.822) (xy 150.950561 109.805387) (xy 150.71319 109.66834) (xy 150.713179 109.668335) + (xy 150.452743 109.560459) (xy 150.180439 109.487495) (xy 149.900958 109.4507) (xy 149.900951 109.4507) + (xy 149.619049 109.4507) (xy 149.619041 109.4507) (xy 149.33956 109.487495) (xy 149.067256 109.560459) + (xy 148.80682 109.668335) (xy 148.806809 109.66834) (xy 148.56269 109.809283) (xy 148.562684 109.809287) + (xy 148.562683 109.809288) (xy 148.545866 109.822192) (xy 148.339029 109.980904) (xy 148.139704 110.180229) + (xy 147.968089 110.403882) (xy 147.968083 110.40389) (xy 147.82714 110.648009) (xy 147.827135 110.64802) + (xy 147.719259 110.908456) (xy 147.646295 111.18076) (xy 147.6095 111.460241) (xy 136.060499 111.460241) + (xy 136.060499 110.551192) (xy 136.049999 110.448403) (xy 135.994814 110.281866) (xy 135.902712 110.132544) + (xy 135.778656 110.008488) (xy 135.629334 109.916386) (xy 135.462797 109.861201) (xy 135.462795 109.8612) + (xy 135.360016 109.8507) (xy 135.360009 109.8507) (xy 133.648406 109.8507) (xy 133.600953 109.841261) + (xy 133.554454 109.822) (xy 133.554453 109.822) (xy 132.580253 109.822) (xy 131.987561 109.822) + (xy 131.925561 109.805387) (xy 131.68819 109.66834) (xy 131.688179 109.668335) (xy 131.427743 109.560459) + (xy 131.155439 109.487495) (xy 130.875958 109.4507) (xy 130.875951 109.4507) (xy 130.594049 109.4507) + (xy 130.594041 109.4507) (xy 130.31456 109.487495) (xy 130.042256 109.560459) (xy 129.78182 109.668335) + (xy 129.781809 109.66834) (xy 129.53769 109.809283) (xy 129.537684 109.809287) (xy 129.537683 109.809288) + (xy 129.520866 109.822192) (xy 129.314029 109.980904) (xy 129.114704 110.180229) (xy 128.943089 110.403882) + (xy 128.943083 110.40389) (xy 128.80214 110.648009) (xy 128.802135 110.64802) (xy 128.694259 110.908456) + (xy 128.621295 111.18076) (xy 128.5845 111.460241) (xy 117.010499 111.460241) (xy 117.010499 110.551192) + (xy 116.999999 110.448403) (xy 116.944814 110.281866) (xy 116.852712 110.132544) (xy 116.728656 110.008488) + (xy 116.579334 109.916386) (xy 116.412797 109.861201) (xy 116.412795 109.8612) (xy 116.310016 109.8507) + (xy 116.310009 109.8507) (xy 114.598406 109.8507) (xy 114.550953 109.841261) (xy 114.504454 109.822) + (xy 114.504453 109.822) (xy 113.530253 109.822) (xy 113.439747 109.822) (xy 113.439745 109.822) + (xy 113.407522 109.835347) (xy 113.393245 109.841261) (xy 113.345794 109.8507) (xy 112.978379 109.8507) + (xy 112.91134 109.831015) (xy 112.902893 109.825076) (xy 112.882326 109.809294) (xy 112.882309 109.809283) + (xy 112.63819 109.66834) (xy 112.638179 109.668335) (xy 112.377743 109.560459) (xy 112.105439 109.487495) + (xy 111.825958 109.4507) (xy 111.825951 109.4507) (xy 111.544049 109.4507) (xy 111.544041 109.4507) + (xy 111.26456 109.487495) (xy 110.992256 109.560459) (xy 110.73182 109.668335) (xy 110.731809 109.66834) + (xy 110.48769 109.809283) (xy 110.487684 109.809287) (xy 110.487683 109.809288) (xy 110.470866 109.822192) + (xy 110.264029 109.980904) (xy 110.064704 110.180229) (xy 109.893089 110.403882) (xy 109.893083 110.40389) + (xy 109.75214 110.648009) (xy 109.752135 110.64802) (xy 109.644259 110.908456) (xy 109.571295 111.18076) + (xy 109.5345 111.460241) (xy 97.960499 111.460241) (xy 97.960499 110.551192) (xy 97.949999 110.448403) + (xy 97.894814 110.281866) (xy 97.802712 110.132544) (xy 97.678656 110.008488) (xy 97.529334 109.916386) + (xy 97.362797 109.861201) (xy 97.362795 109.8612) (xy 97.260016 109.8507) (xy 97.260009 109.8507) + (xy 95.307881 109.8507) (xy 95.307873 109.8507) (xy 94.574206 109.8507) (xy 94.526753 109.841261) + (xy 94.480253 109.822) (xy 93.887561 109.822) (xy 93.825561 109.805387) (xy 93.58819 109.66834) + (xy 93.588179 109.668335) (xy 93.327743 109.560459) (xy 93.055439 109.487495) (xy 92.775958 109.4507) + (xy 92.775951 109.4507) (xy 92.494049 109.4507) (xy 92.494041 109.4507) (xy 92.21456 109.487495) + (xy 91.942256 109.560459) (xy 91.68182 109.668335) (xy 91.681809 109.66834) (xy 91.43769 109.809283) + (xy 91.437684 109.809287) (xy 91.437683 109.809288) (xy 91.420866 109.822192) (xy 91.214029 109.980904) + (xy 91.014704 110.180229) (xy 90.843089 110.403882) (xy 90.843083 110.40389) (xy 90.70214 110.648009) + (xy 90.702135 110.64802) (xy 90.594259 110.908456) (xy 90.521295 111.18076) (xy 90.4845 111.460241) + (xy 74.072999 111.460241) (xy 74.072999 110.551192) (xy 74.062499 110.448403) (xy 74.007314 110.281866) + (xy 73.915212 110.132544) (xy 73.791156 110.008488) (xy 73.641834 109.916386) (xy 73.475297 109.861201) + (xy 73.475295 109.8612) (xy 73.372516 109.8507) (xy 73.372509 109.8507) (xy 71.661006 109.8507) + (xy 71.613553 109.841261) (xy 71.567054 109.822) (xy 71.567053 109.822) (xy 70.592753 109.822) (xy 70.000061 109.822) + (xy 69.938061 109.805387) (xy 69.70069 109.66834) (xy 69.700679 109.668335) (xy 69.440243 109.560459) + (xy 69.167939 109.487495) (xy 68.888458 109.4507) (xy 68.888451 109.4507) (xy 68.606549 109.4507) + (xy 68.606541 109.4507) (xy 68.32706 109.487495) (xy 68.054756 109.560459) (xy 67.79432 109.668335) + (xy 67.794309 109.66834) (xy 67.55019 109.809283) (xy 67.550184 109.809287) (xy 67.550183 109.809288) + (xy 67.533366 109.822192) (xy 67.326529 109.980904) (xy 67.127204 110.180229) (xy 66.955589 110.403882) + (xy 66.955583 110.40389) (xy 66.81464 110.648009) (xy 66.814635 110.64802) (xy 66.706759 110.908456) + (xy 66.633795 111.18076) (xy 66.597 111.460241) (xy 45.35175 111.460241) (xy 45.35175 108.549153) + (xy 197.6265 108.549153) (xy 197.6265 108.706846) (xy 197.657261 108.861489) (xy 197.657264 108.861501) + (xy 197.717602 109.007172) (xy 197.717609 109.007185) (xy 197.80521 109.138288) (xy 197.805213 109.138292) + (xy 197.916707 109.249786) (xy 197.916711 109.249789) (xy 198.047814 109.33739) (xy 198.047827 109.337397) + (xy 198.193498 109.397735) (xy 198.193503 109.397737) (xy 198.348153 109.428499) (xy 198.348156 109.4285) + (xy 198.348158 109.4285) (xy 198.505844 109.4285) (xy 198.505845 109.428499) (xy 198.660497 109.397737) + (xy 198.806179 109.337394) (xy 198.937289 109.249789) (xy 199.048789 109.138289) (xy 199.136394 109.007179) + (xy 199.196737 108.861497) (xy 199.2275 108.706842) (xy 199.2275 108.549158) (xy 199.2275 108.549155) + (xy 199.227499 108.549153) (xy 199.196738 108.39451) (xy 199.196737 108.394503) (xy 199.196735 108.394498) + (xy 199.136397 108.248827) (xy 199.13639 108.248814) (xy 199.048789 108.117711) (xy 199.048786 108.117707) + (xy 198.937292 108.006213) (xy 198.937288 108.00621) (xy 198.806185 107.918609) (xy 198.806172 107.918602) + (xy 198.660501 107.858264) (xy 198.660489 107.858261) (xy 198.505845 107.8275) (xy 198.505842 107.8275) + (xy 198.348158 107.8275) (xy 198.348155 107.8275) (xy 198.19351 107.858261) (xy 198.193498 107.858264) + (xy 198.047827 107.918602) (xy 198.047814 107.918609) (xy 197.916711 108.00621) (xy 197.916707 108.006213) + (xy 197.805213 108.117707) (xy 197.80521 108.117711) (xy 197.717609 108.248814) (xy 197.717602 108.248827) + (xy 197.657264 108.394498) (xy 197.657261 108.39451) (xy 197.6265 108.549153) (xy 45.35175 108.549153) + (xy 45.35175 101.132522) (xy 57.5033 101.132522) (xy 57.5033 101.864878) (xy 57.518291 101.978754) + (xy 57.518292 101.97876) (xy 57.518293 101.978763) (xy 57.541707 102.035288) (xy 57.576987 102.120462) + (xy 57.617465 102.173215) (xy 57.642658 102.238384) (xy 57.628619 102.306829) (xy 57.617465 102.324185) + (xy 57.576987 102.376937) (xy 57.518293 102.518636) (xy 57.518292 102.518638) (xy 57.5033 102.632522) + (xy 57.5033 103.364878) (xy 57.518291 103.478754) (xy 57.518292 103.47876) (xy 57.518293 103.478763) + (xy 57.533252 103.514876) (xy 57.576987 103.620462) (xy 57.58335 103.628754) (xy 57.670356 103.742144) + (xy 57.792037 103.835512) (xy 57.933737 103.894207) (xy 58.047623 103.9092) (xy 58.327301 103.909199) + (xy 58.394339 103.928883) (xy 58.440094 103.981687) (xy 58.4513 104.033199) (xy 58.4513 104.097803) + (xy 58.484737 104.178527) (xy 58.485936 104.18142) (xy 59.558385 105.253868) (xy 59.622382 105.317865) + (xy 59.705997 105.3525) (xy 59.705998 105.3525) (xy 83.796502 105.3525) (xy 83.796503 105.3525) + (xy 83.880118 105.317865) (xy 83.96183 105.236153) (xy 112.5145 105.236153) (xy 112.5145 105.393846) + (xy 112.545261 105.548489) (xy 112.545264 105.548501) (xy 112.605602 105.694172) (xy 112.605609 105.694185) + (xy 112.69321 105.825288) (xy 112.693213 105.825292) (xy 112.804707 105.936786) (xy 112.804711 105.936789) + (xy 112.935814 106.02439) (xy 112.935827 106.024397) (xy 113.081498 106.084735) (xy 113.081503 106.084737) + (xy 113.217768 106.111842) (xy 113.236153 106.115499) (xy 113.236156 106.1155) (xy 113.236158 106.1155) + (xy 113.393844 106.1155) (xy 113.393845 106.115499) (xy 113.548497 106.084737) (xy 113.694179 106.024394) + (xy 113.825289 105.936789) (xy 113.936789 105.825289) (xy 114.024394 105.694179) (xy 114.084737 105.548497) + (xy 114.1155 105.393842) (xy 114.1155 105.236158) (xy 114.1155 105.236155) (xy 114.115499 105.236153) + (xy 114.104194 105.17932) (xy 114.084737 105.081503) (xy 114.051227 105.000602) (xy 114.024397 104.935827) + (xy 114.02439 104.935814) (xy 113.936789 104.804711) (xy 113.936786 104.804707) (xy 113.825292 104.693213) + (xy 113.825288 104.69321) (xy 113.694185 104.605609) (xy 113.694172 104.605602) (xy 113.548501 104.545264) + (xy 113.548489 104.545261) (xy 113.393845 104.5145) (xy 113.393842 104.5145) (xy 113.236158 104.5145) + (xy 113.236155 104.5145) (xy 113.08151 104.545261) (xy 113.081498 104.545264) (xy 112.935827 104.605602) + (xy 112.935814 104.605609) (xy 112.804711 104.69321) (xy 112.804707 104.693213) (xy 112.693213 104.804707) + (xy 112.69321 104.804711) (xy 112.605609 104.935814) (xy 112.605602 104.935827) (xy 112.545264 105.081498) + (xy 112.545261 105.08151) (xy 112.5145 105.236153) (xy 83.96183 105.236153) (xy 85.344116 103.853868) + (xy 85.344116 103.853866) (xy 85.344118 103.853865) (xy 85.364856 103.803797) (xy 85.37875 103.770253) + (xy 85.37875 103.679747) (xy 85.37875 102.329747) (xy 85.37875 102.329745) (xy 85.378197 102.32841) + (xy 85.378197 102.328411) (xy 85.37819 102.328394) (xy 85.344116 102.246132) (xy 84.895217 101.797233) + (xy 84.440618 101.342634) (xy 84.407133 101.281311) (xy 84.404299 101.254953) (xy 84.404299 101.172521) + (xy 84.389308 101.058645) (xy 84.389307 101.058637) (xy 84.330612 100.916937) (xy 84.237244 100.795256) + (xy 84.126738 100.710463) (xy 84.115562 100.701887) (xy 83.973863 100.643193) (xy 83.973861 100.643192) + (xy 83.859978 100.6282) (xy 83.859977 100.6282) (xy 82.722373 100.6282) (xy 82.718043 100.626928) + (xy 82.713635 100.627892) (xy 82.684819 100.617172) (xy 82.655334 100.608515) (xy 82.651195 100.604665) + (xy 82.648149 100.603532) (xy 82.623171 100.578597) (xy 82.5649 100.500897) (xy 82.540426 100.435454) + (xy 82.555218 100.367168) (xy 82.604581 100.31772) (xy 82.664102 100.3025) (xy 90.256573 100.3025) + (xy 90.323612 100.322185) (xy 90.325464 100.323398) (xy 90.430214 100.39339) (xy 90.430227 100.393397) + (xy 90.563115 100.44844) (xy 90.575903 100.453737) (xy 90.703039 100.479026) (xy 90.730553 100.484499) + (xy 90.730556 100.4845) (xy 90.730558 100.4845) (xy 90.888244 100.4845) (xy 90.888245 100.484499) + (xy 91.042897 100.453737) (xy 91.188579 100.393394) (xy 91.319689 100.305789) (xy 91.431189 100.194289) + (xy 91.518794 100.063179) (xy 91.527775 100.041498) (xy 91.571767 99.935289) (xy 91.579137 99.917497) + (xy 91.6099 99.762842) (xy 91.6099 99.605158) (xy 91.6099 99.605155) (xy 91.609899 99.605153) (xy 91.602033 99.565609) + (xy 91.579137 99.450503) (xy 91.547507 99.374141) (xy 91.518797 99.304827) (xy 91.51879 99.304814) + (xy 91.431189 99.173711) (xy 91.431186 99.173707) (xy 91.319692 99.062213) (xy 91.319688 99.06221) + (xy 91.188585 98.974609) (xy 91.188572 98.974602) (xy 91.042901 98.914264) (xy 91.042889 98.914261) + (xy 90.888245 98.8835) (xy 90.888242 98.8835) (xy 90.730558 98.8835) (xy 90.730555 98.8835) (xy 90.57591 98.914261) + (xy 90.575898 98.914264) (xy 90.430227 98.974602) (xy 90.430214 98.974609) (xy 90.299111 99.06221) + (xy 90.299107 99.062213) (xy 90.187613 99.173707) (xy 90.18761 99.173711) (xy 90.100009 99.304814) + (xy 90.100002 99.304827) (xy 90.039664 99.450498) (xy 90.039661 99.45051) (xy 90.0089 99.605153) + (xy 90.0089 99.7235) (xy 89.989215 99.790539) (xy 89.936411 99.836294) (xy 89.8849 99.8475) (xy 81.524512 99.8475) + (xy 81.457473 99.827815) (xy 81.411718 99.775011) (xy 81.401774 99.705853) (xy 81.430799 99.642297) + (xy 81.47706 99.608939) (xy 81.490131 99.603524) (xy 81.490141 99.60352) (xy 81.739259 99.459691) + (xy 81.967473 99.284577) (xy 82.170877 99.081173) (xy 82.345991 98.852959) (xy 82.48982 98.603841) + (xy 82.599902 98.33808) (xy 82.674353 98.060225) (xy 82.7119 97.775029) (xy 82.7119 97.54655) (xy 84.522 97.54655) + (xy 84.522 97.715849) (xy 84.548481 97.883047) (xy 84.600796 98.044053) (xy 84.677652 98.194888) + (xy 84.777148 98.331834) (xy 84.777152 98.331839) (xy 84.89686 98.451547) (xy 84.896865 98.451551) + (xy 84.973873 98.5075) (xy 85.033815 98.55105) (xy 85.127141 98.598602) (xy 85.184646 98.627903) + (xy 85.184648 98.627903) (xy 85.184651 98.627905) (xy 85.268844 98.655261) (xy 85.345652 98.680218) + (xy 85.512851 98.7067) (xy 85.512856 98.7067) (xy 85.682149 98.7067) (xy 85.849347 98.680218) (xy 86.010349 98.627905) + (xy 86.161185 98.55105) (xy 86.298141 98.451546) (xy 86.417846 98.331841) (xy 86.51735 98.194885) + (xy 86.594205 98.044049) (xy 86.646518 97.883047) (xy 86.663625 97.775038) (xy 86.673 97.715849) + (xy 86.673 97.54655) (xy 86.646518 97.379352) (xy 86.601796 97.241713) (xy 86.594205 97.218351) + (xy 86.594203 97.218348) (xy 86.594203 97.218346) (xy 86.550176 97.13194) (xy 86.51735 97.067515) + (xy 86.485781 97.024064) (xy 86.417851 96.930565) (xy 86.417847 96.93056) (xy 86.298139 96.810852) + (xy 86.298134 96.810848) (xy 86.161188 96.711352) (xy 86.161187 96.711351) (xy 86.161185 96.71135) + (xy 86.107331 96.68391) (xy 86.010353 96.634496) (xy 85.849347 96.582181) (xy 85.682149 96.5557) + (xy 85.682144 96.5557) (xy 85.512856 96.5557) (xy 85.512851 96.5557) (xy 85.345652 96.582181) (xy 85.184646 96.634496) + (xy 85.033811 96.711352) (xy 84.896865 96.810848) (xy 84.89686 96.810852) (xy 84.777152 96.93056) + (xy 84.777148 96.930565) (xy 84.677652 97.067511) (xy 84.600796 97.218346) (xy 84.548481 97.379352) + (xy 84.522 97.54655) (xy 82.7119 97.54655) (xy 82.7119 97.487371) (xy 82.674353 97.202175) (xy 82.599902 96.92432) + (xy 82.48982 96.658559) (xy 82.489818 96.658556) (xy 82.489816 96.658551) (xy 82.345995 96.409448) + (xy 82.345991 96.409441) (xy 82.242069 96.274007) (xy 82.170878 96.181228) (xy 82.170872 96.181221) + (xy 81.967478 95.977827) (xy 81.967471 95.977821) (xy 81.739267 95.802715) (xy 81.739265 95.802713) + (xy 81.739259 95.802709) (xy 81.739254 95.802706) (xy 81.739251 95.802704) (xy 81.490148 95.658883) + (xy 81.490131 95.658875) (xy 81.224378 95.548797) (xy 80.946523 95.474346) (xy 80.661338 95.436801) + (xy 80.661335 95.4368) (xy 80.661329 95.4368) (xy 80.373671 95.4368) (xy 80.373665 95.4368) (xy 80.373661 95.436801) + (xy 80.088476 95.474346) (xy 79.810621 95.548797) (xy 79.544868 95.658875) (xy 79.544851 95.658883) + (xy 79.295748 95.802704) (xy 79.295732 95.802715) (xy 79.067528 95.977821) (xy 79.067521 95.977827) + (xy 78.864127 96.181221) (xy 78.79293 96.274007) (xy 78.736501 96.315209) (xy 78.666755 96.319364) + (xy 78.605835 96.285151) (xy 78.573083 96.223434) (xy 78.578896 96.153807) (xy 78.587161 96.136531) + (xy 78.640363 96.044383) (xy 78.748242 95.783939) (xy 78.821204 95.511642) (xy 78.858 95.232151) + (xy 78.858 94.950249) (xy 78.821204 94.670758) (xy 78.748242 94.398461) (xy 78.640363 94.138017) + (xy 78.640361 94.138014) (xy 78.640359 94.138009) (xy 78.499416 93.89389) (xy 78.499412 93.893883) + (xy 78.3278 93.670235) (xy 78.327798 93.670233) (xy 78.327795 93.670229) (xy 78.12847 93.470904) + (xy 78.046766 93.40821) (xy 77.904817 93.299288) (xy 77.904811 93.299284) (xy 77.904809 93.299283) + (xy 77.66069 93.15834) (xy 77.660679 93.158335) (xy 77.400243 93.050459) (xy 77.127939 92.977495) + (xy 76.848458 92.9407) (xy 76.848451 92.9407) (xy 76.566549 92.9407) (xy 76.566541 92.9407) (xy 76.28706 92.977495) + (xy 76.014756 93.050459) (xy 75.75432 93.158335) (xy 75.754309 93.15834) (xy 75.510192 93.299281) + (xy 75.510183 93.299288) (xy 75.489606 93.315076) (xy 75.424438 93.34027) (xy 75.414122 93.3407) + (xy 72.082498 93.3407) (xy 72.082481 93.340701) (xy 71.979703 93.3512) (xy 71.9797 93.351201) (xy 71.813168 93.406385) + (xy 71.813163 93.406387) (xy 71.663842 93.498489) (xy 71.539789 93.622542) (xy 71.447687 93.771863) + (xy 71.447686 93.771866) (xy 71.392501 93.938403) (xy 71.392501 93.938404) (xy 71.3925 93.938404) + (xy 71.382 94.041183) (xy 71.382 96.141201) (xy 71.382001 96.141218) (xy 71.3925 96.243996) (xy 71.392501 96.243999) + (xy 71.402445 96.274007) (xy 71.447686 96.410534) (xy 71.539788 96.559856) (xy 71.663844 96.683912) + (xy 71.813166 96.776014) (xy 71.979703 96.831199) (xy 72.082491 96.8417) (xy 74.009618 96.841699) + (xy 74.009627 96.8417) (xy 74.438351 96.841699) (xy 74.505389 96.861383) (xy 74.551144 96.914187) + (xy 74.561088 96.983346) (xy 74.538669 97.038583) (xy 74.517651 97.067511) (xy 74.440796 97.218346) + (xy 74.388481 97.379352) (xy 74.362 97.54655) (xy 74.362 97.715849) (xy 74.388481 97.883047) (xy 74.440796 98.044053) + (xy 74.517652 98.194888) (xy 74.617148 98.331834) (xy 74.617152 98.331839) (xy 74.73686 98.451547) + (xy 74.736865 98.451551) (xy 74.813873 98.5075) (xy 74.873815 98.55105) (xy 74.967141 98.598602) + (xy 75.024646 98.627903) (xy 75.024648 98.627903) (xy 75.024651 98.627905) (xy 75.108844 98.655261) + (xy 75.185652 98.680218) (xy 75.352851 98.7067) (xy 75.352856 98.7067) (xy 75.522149 98.7067) (xy 75.689347 98.680218) + (xy 75.850349 98.627905) (xy 76.001185 98.55105) (xy 76.138141 98.451546) (xy 76.257846 98.331841) + (xy 76.35735 98.194885) (xy 76.434205 98.044049) (xy 76.486518 97.883047) (xy 76.503625 97.775038) + (xy 76.513 97.715849) (xy 76.513 97.54655) (xy 76.487428 97.385098) (xy 76.496382 97.315805) (xy 76.541379 97.262353) + (xy 76.60813 97.241713) (xy 76.609901 97.2417) (xy 76.848444 97.2417) (xy 76.848451 97.2417) (xy 77.127942 97.204904) + (xy 77.400239 97.131942) (xy 77.660683 97.024063) (xy 77.904817 96.883112) (xy 78.128465 96.7115) + (xy 78.3278 96.512165) (xy 78.395492 96.423946) (xy 78.45192 96.382744) (xy 78.521666 96.378589) + (xy 78.582586 96.412801) (xy 78.615339 96.474518) (xy 78.609526 96.544146) (xy 78.601255 96.561433) + (xy 78.545183 96.658551) (xy 78.545175 96.658568) (xy 78.435097 96.924321) (xy 78.360646 97.202176) + (xy 78.323101 97.487361) (xy 78.3231 97.487377) (xy 78.3231 97.775022) (xy 78.323101 97.775038) + (xy 78.360646 98.060223) (xy 78.435097 98.338078) (xy 78.545175 98.603831) (xy 78.545183 98.603848) + (xy 78.689004 98.852951) (xy 78.689015 98.852967) (xy 78.864121 99.081171) (xy 78.864127 99.081178) + (xy 79.067521 99.284572) (xy 79.067528 99.284578) (xy 79.200807 99.386846) (xy 79.295741 99.459691) + (xy 79.295748 99.459695) (xy 79.544851 99.603516) (xy 79.544856 99.603518) (xy 79.544859 99.60352) + (xy 79.544863 99.603521) (xy 79.544868 99.603524) (xy 79.55794 99.608939) (xy 79.612344 99.65278) + (xy 79.634409 99.719074) (xy 79.61713 99.786773) (xy 79.565993 99.834384) (xy 79.510488 99.8475) + (xy 65.597753 99.8475) (xy 65.507247 99.8475) (xy 65.507245 99.8475) (xy 65.507243 99.847501) (xy 65.423634 99.882131) + (xy 65.423632 99.882133) (xy 64.753885 100.551881) (xy 64.692562 100.585366) (xy 64.666204 100.5882) + (xy 63.622373 100.5882) (xy 63.555334 100.568515) (xy 63.523172 100.538598) (xy 63.448361 100.438844) + (xy 63.314169 100.315004) (xy 63.314166 100.315002) (xy 63.314165 100.315001) (xy 63.314162 100.314999) + (xy 63.159777 100.217501) (xy 62.990287 100.149558) (xy 62.990277 100.149556) (xy 62.811292 100.113418) + (xy 62.811299 100.113418) (xy 62.639594 100.110465) (xy 62.628718 100.110278) (xy 62.628717 100.110278) + (xy 62.628714 100.110278) (xy 62.448597 100.140238) (xy 62.448584 100.140241) (xy 62.276863 100.202313) + (xy 62.262348 100.21077) (xy 62.262263 100.210819) (xy 62.255176 100.21494) (xy 62.25493 100.215008) + (xy 62.227138 100.231244) (xy 62.22689 100.231389) (xy 62.224163 100.232059) (xy 62.164546 100.248196) + (xy 62.124201 100.248193) (xy 62.124097 100.2482) (xy 60.683396 100.2482) (xy 60.675214 100.248198) + (xy 60.675192 100.248193) (xy 60.645265 100.248195) (xy 60.643028 100.248195) (xy 60.642746 100.248112) + (xy 60.580493 100.231262) (xy 60.552671 100.215008) (xy 60.546605 100.211464) (xy 60.544907 100.210617) + (xy 60.535968 100.205408) (xy 60.530721 100.20235) (xy 60.358997 100.140278) (xy 60.358991 100.140277) + (xy 60.178881 100.110319) (xy 60.178878 100.110319) (xy 60.170339 100.110465) (xy 59.996307 100.113459) + (xy 59.817334 100.149594) (xy 59.817323 100.149597) (xy 59.647842 100.217537) (xy 59.647841 100.217537) + (xy 59.493461 100.315032) (xy 59.493458 100.315034) (xy 59.362973 100.435454) (xy 59.359269 100.438872) + (xy 59.303164 100.513685) (xy 59.284481 100.538597) (xy 59.228511 100.580419) (xy 59.185278 100.5882) + (xy 58.047621 100.5882) (xy 57.933745 100.603191) (xy 57.933737 100.603193) (xy 57.792037 100.661887) + (xy 57.670356 100.755256) (xy 57.576987 100.876937) (xy 57.518293 101.018636) (xy 57.518292 101.018638) + (xy 57.5033 101.132522) (xy 45.35175 101.132522) (xy 45.35175 94.041183) (xy 52.3095 94.041183) + (xy 52.3095 96.141201) (xy 52.309501 96.141218) (xy 52.32 96.243996) (xy 52.320001 96.243999) (xy 52.329945 96.274007) + (xy 52.375186 96.410534) (xy 52.467288 96.559856) (xy 52.591344 96.683912) (xy 52.740666 96.776014) + (xy 52.907203 96.831199) (xy 53.009991 96.8417) (xy 54.937118 96.841699) (xy 54.937127 96.8417) + (xy 55.365851 96.841699) (xy 55.432889 96.861383) (xy 55.478644 96.914187) (xy 55.488588 96.983346) + (xy 55.466169 97.038583) (xy 55.445151 97.067511) (xy 55.368296 97.218346) (xy 55.315981 97.379352) + (xy 55.2895 97.54655) (xy 55.2895 97.715849) (xy 55.315981 97.883047) (xy 55.368296 98.044053) (xy 55.445152 98.194888) + (xy 55.544648 98.331834) (xy 55.544652 98.331839) (xy 55.66436 98.451547) (xy 55.664365 98.451551) + (xy 55.741373 98.5075) (xy 55.801315 98.55105) (xy 55.894641 98.598602) (xy 55.952146 98.627903) + (xy 55.952148 98.627903) (xy 55.952151 98.627905) (xy 56.036344 98.655261) (xy 56.113152 98.680218) + (xy 56.280351 98.7067) (xy 56.280356 98.7067) (xy 56.449649 98.7067) (xy 56.616847 98.680218) (xy 56.777849 98.627905) + (xy 56.928685 98.55105) (xy 57.065641 98.451546) (xy 57.185346 98.331841) (xy 57.28485 98.194885) + (xy 57.361705 98.044049) (xy 57.414018 97.883047) (xy 57.431125 97.775038) (xy 57.4405 97.715849) + (xy 57.4405 97.54655) (xy 57.414928 97.385098) (xy 57.423882 97.315805) (xy 57.468879 97.262353) + (xy 57.53563 97.241713) (xy 57.537401 97.2417) (xy 57.775944 97.2417) (xy 57.775951 97.2417) (xy 58.055442 97.204904) + (xy 58.327739 97.131942) (xy 58.588183 97.024063) (xy 58.832317 96.883112) (xy 59.055965 96.7115) + (xy 59.2553 96.512165) (xy 59.322992 96.423946) (xy 59.37942 96.382744) (xy 59.449166 96.378589) + (xy 59.510086 96.412801) (xy 59.542839 96.474518) (xy 59.537026 96.544146) (xy 59.528755 96.561433) + (xy 59.472683 96.658551) (xy 59.472675 96.658568) (xy 59.362597 96.924321) (xy 59.288146 97.202176) + (xy 59.250601 97.487361) (xy 59.2506 97.487377) (xy 59.2506 97.775022) (xy 59.250601 97.775038) + (xy 59.288146 98.060223) (xy 59.362597 98.338078) (xy 59.472675 98.603831) (xy 59.472683 98.603848) + (xy 59.616504 98.852951) (xy 59.616515 98.852967) (xy 59.791621 99.081171) (xy 59.791627 99.081178) + (xy 59.995021 99.284572) (xy 59.995028 99.284578) (xy 60.128307 99.386846) (xy 60.223241 99.459691) + (xy 60.223248 99.459695) (xy 60.472351 99.603516) (xy 60.472356 99.603518) (xy 60.472359 99.60352) + (xy 60.472363 99.603521) (xy 60.472368 99.603524) (xy 60.565975 99.642297) (xy 60.73812 99.713602) + (xy 61.015975 99.788053) (xy 61.301171 99.8256) (xy 61.301178 99.8256) (xy 61.588822 99.8256) (xy 61.588829 99.8256) + (xy 61.874025 99.788053) (xy 62.15188 99.713602) (xy 62.417641 99.60352) (xy 62.666759 99.459691) + (xy 62.894973 99.284577) (xy 63.098377 99.081173) (xy 63.273491 98.852959) (xy 63.41732 98.603841) + (xy 63.527402 98.33808) (xy 63.601853 98.060225) (xy 63.6394 97.775029) (xy 63.6394 97.54655) (xy 65.4495 97.54655) + (xy 65.4495 97.715849) (xy 65.475981 97.883047) (xy 65.528296 98.044053) (xy 65.605152 98.194888) + (xy 65.704648 98.331834) (xy 65.704652 98.331839) (xy 65.82436 98.451547) (xy 65.824365 98.451551) + (xy 65.901373 98.5075) (xy 65.961315 98.55105) (xy 66.054641 98.598602) (xy 66.112146 98.627903) + (xy 66.112148 98.627903) (xy 66.112151 98.627905) (xy 66.196344 98.655261) (xy 66.273152 98.680218) + (xy 66.440351 98.7067) (xy 66.440356 98.7067) (xy 66.609649 98.7067) (xy 66.776847 98.680218) (xy 66.937849 98.627905) + (xy 67.088685 98.55105) (xy 67.225641 98.451546) (xy 67.345346 98.331841) (xy 67.44485 98.194885) + (xy 67.521705 98.044049) (xy 67.574018 97.883047) (xy 67.591125 97.775038) (xy 67.6005 97.715849) + (xy 67.6005 97.54655) (xy 67.574018 97.379352) (xy 67.529296 97.241713) (xy 67.521705 97.218351) + (xy 67.521703 97.218348) (xy 67.521703 97.218346) (xy 67.477676 97.13194) (xy 67.44485 97.067515) + (xy 67.413281 97.024064) (xy 67.345351 96.930565) (xy 67.345347 96.93056) (xy 67.225639 96.810852) + (xy 67.225634 96.810848) (xy 67.088688 96.711352) (xy 67.088687 96.711351) (xy 67.088685 96.71135) + (xy 67.034831 96.68391) (xy 66.937853 96.634496) (xy 66.776847 96.582181) (xy 66.609649 96.5557) + (xy 66.609644 96.5557) (xy 66.440356 96.5557) (xy 66.440351 96.5557) (xy 66.273152 96.582181) (xy 66.112146 96.634496) + (xy 65.961311 96.711352) (xy 65.824365 96.810848) (xy 65.82436 96.810852) (xy 65.704652 96.93056) + (xy 65.704648 96.930565) (xy 65.605152 97.067511) (xy 65.528296 97.218346) (xy 65.475981 97.379352) + (xy 65.4495 97.54655) (xy 63.6394 97.54655) (xy 63.6394 97.487371) (xy 63.601853 97.202175) (xy 63.527402 96.92432) + (xy 63.41732 96.658559) (xy 63.417318 96.658556) (xy 63.417316 96.658551) (xy 63.273495 96.409448) + (xy 63.273491 96.409441) (xy 63.169569 96.274007) (xy 63.098378 96.181228) (xy 63.098372 96.181221) + (xy 62.894978 95.977827) (xy 62.894971 95.977821) (xy 62.666767 95.802715) (xy 62.666765 95.802713) + (xy 62.666759 95.802709) (xy 62.666754 95.802706) (xy 62.666751 95.802704) (xy 62.417648 95.658883) + (xy 62.417631 95.658875) (xy 62.151878 95.548797) (xy 61.874023 95.474346) (xy 61.588838 95.436801) + (xy 61.588835 95.4368) (xy 61.588829 95.4368) (xy 61.301171 95.4368) (xy 61.301165 95.4368) (xy 61.301161 95.436801) + (xy 61.015976 95.474346) (xy 60.738121 95.548797) (xy 60.472368 95.658875) (xy 60.472351 95.658883) + (xy 60.223248 95.802704) (xy 60.223232 95.802715) (xy 59.995028 95.977821) (xy 59.995021 95.977827) + (xy 59.791627 96.181221) (xy 59.72043 96.274007) (xy 59.664001 96.315209) (xy 59.594255 96.319364) + (xy 59.533335 96.285151) (xy 59.500583 96.223434) (xy 59.506396 96.153807) (xy 59.514661 96.136531) + (xy 59.567863 96.044383) (xy 59.675742 95.783939) (xy 59.748704 95.511642) (xy 59.7855 95.232151) + (xy 59.7855 94.950249) (xy 59.748704 94.670758) (xy 59.675742 94.398461) (xy 59.567863 94.138017) + (xy 59.567861 94.138014) (xy 59.567859 94.138009) (xy 59.426916 93.89389) (xy 59.426912 93.893883) + (xy 59.2553 93.670235) (xy 59.255298 93.670233) (xy 59.255295 93.670229) (xy 59.05597 93.470904) + (xy 58.974266 93.40821) (xy 58.832317 93.299288) (xy 58.832311 93.299284) (xy 58.832309 93.299283) + (xy 58.58819 93.15834) (xy 58.588179 93.158335) (xy 58.327743 93.050459) (xy 58.055439 92.977495) + (xy 57.775958 92.9407) (xy 57.775951 92.9407) (xy 57.494049 92.9407) (xy 57.494041 92.9407) (xy 57.21456 92.977495) + (xy 56.942256 93.050459) (xy 56.68182 93.158335) (xy 56.681809 93.15834) (xy 56.437692 93.299281) + (xy 56.437683 93.299288) (xy 56.417106 93.315076) (xy 56.351938 93.34027) (xy 56.341622 93.3407) + (xy 53.009998 93.3407) (xy 53.009981 93.340701) (xy 52.907203 93.3512) (xy 52.9072 93.351201) (xy 52.740668 93.406385) + (xy 52.740663 93.406387) (xy 52.591342 93.498489) (xy 52.467289 93.622542) (xy 52.375187 93.771863) + (xy 52.375186 93.771866) (xy 52.320001 93.938403) (xy 52.320001 93.938404) (xy 52.32 93.938404) + (xy 52.3095 94.041183) (xy 45.35175 94.041183) (xy 45.35175 92.410241) (xy 61.8345 92.410241) (xy 61.8345 92.692158) + (xy 61.871295 92.971639) (xy 61.944259 93.243943) (xy 62.052135 93.504379) (xy 62.05214 93.50439) + (xy 62.193083 93.748509) (xy 62.193088 93.748517) (xy 62.338794 93.938404) (xy 62.364704 93.97217) + (xy 62.564029 94.171495) (xy 62.564033 94.171498) (xy 62.564035 94.1715) (xy 62.787683 94.343112) + (xy 62.78769 94.343116) (xy 63.031809 94.484059) (xy 63.031814 94.484061) (xy 63.031817 94.484063) + (xy 63.292261 94.591942) (xy 63.564558 94.664904) (xy 63.844049 94.7017) (xy 63.844056 94.7017) + (xy 64.125944 94.7017) (xy 64.125951 94.7017) (xy 64.405442 94.664904) (xy 64.677739 94.591942) + (xy 64.938183 94.484063) (xy 65.182317 94.343112) (xy 65.202892 94.327323) (xy 65.26806 94.302129) + (xy 65.278379 94.301699) (xy 66.459982 94.301699) (xy 66.459991 94.3017) (xy 68.610008 94.301699) + (xy 68.712797 94.291199) (xy 68.879334 94.236014) (xy 69.028656 94.143912) (xy 69.152712 94.019856) + (xy 69.244814 93.870534) (xy 69.299999 93.703997) (xy 69.3105 93.601209) (xy 69.310499 92.410241) + (xy 80.907 92.410241) (xy 80.907 92.692158) (xy 80.943795 92.971639) (xy 81.016759 93.243943) (xy 81.124635 93.504379) + (xy 81.12464 93.50439) (xy 81.265583 93.748509) (xy 81.265588 93.748517) (xy 81.411294 93.938404) + (xy 81.437204 93.97217) (xy 81.636529 94.171495) (xy 81.636533 94.171498) (xy 81.636535 94.1715) + (xy 81.860183 94.343112) (xy 81.86019 94.343116) (xy 82.104309 94.484059) (xy 82.104314 94.484061) + (xy 82.104317 94.484063) (xy 82.364761 94.591942) (xy 82.637058 94.664904) (xy 82.916549 94.7017) + (xy 82.916556 94.7017) (xy 83.198444 94.7017) (xy 83.198451 94.7017) (xy 83.477942 94.664904) (xy 83.750239 94.591942) + (xy 84.010683 94.484063) (xy 84.254817 94.343112) (xy 84.275392 94.327323) (xy 84.34056 94.302129) + (xy 84.350879 94.301699) (xy 85.532482 94.301699) (xy 85.532491 94.3017) (xy 87.682508 94.301699) + (xy 87.785297 94.291199) (xy 87.951834 94.236014) (xy 88.101156 94.143912) (xy 88.225212 94.019856) + (xy 88.317314 93.870534) (xy 88.372499 93.703997) (xy 88.383 93.601209) (xy 88.383 93.562853) (xy 89.3098 93.562853) + (xy 89.3098 93.720546) (xy 89.340561 93.875189) (xy 89.340564 93.875201) (xy 89.400902 94.020872) + (xy 89.400909 94.020885) (xy 89.48851 94.151988) (xy 89.488513 94.151992) (xy 89.600007 94.263486) + (xy 89.600011 94.263489) (xy 89.731114 94.35109) (xy 89.731127 94.351097) (xy 89.845476 94.398461) + (xy 89.876803 94.411437) (xy 90.031453 94.442199) (xy 90.031456 94.4422) (xy 90.031458 94.4422) + (xy 90.189143 94.4422) (xy 90.207381 94.438571) (xy 90.283809 94.423369) (xy 90.353399 94.429596) + (xy 90.408577 94.472458) (xy 90.431822 94.538347) (xy 90.432 94.544986) (xy 90.432 96.141201) (xy 90.432001 96.141218) + (xy 90.4425 96.243996) (xy 90.442501 96.243999) (xy 90.452445 96.274007) (xy 90.497686 96.410534) + (xy 90.589788 96.559856) (xy 90.713844 96.683912) (xy 90.863166 96.776014) (xy 91.029703 96.831199) + (xy 91.132491 96.8417) (xy 93.059618 96.841699) (xy 93.059627 96.8417) (xy 93.488351 96.841699) + (xy 93.555389 96.861383) (xy 93.601144 96.914187) (xy 93.611088 96.983346) (xy 93.588669 97.038583) + (xy 93.567651 97.067511) (xy 93.490796 97.218346) (xy 93.438481 97.379352) (xy 93.412 97.54655) + (xy 93.412 97.715849) (xy 93.438481 97.883047) (xy 93.490796 98.044053) (xy 93.567652 98.194888) + (xy 93.667148 98.331834) (xy 93.667152 98.331839) (xy 93.78686 98.451547) (xy 93.786865 98.451551) + (xy 93.863873 98.5075) (xy 93.923815 98.55105) (xy 94.017141 98.598602) (xy 94.074646 98.627903) + (xy 94.074648 98.627903) (xy 94.074651 98.627905) (xy 94.158844 98.655261) (xy 94.235652 98.680218) + (xy 94.402851 98.7067) (xy 94.402856 98.7067) (xy 94.572149 98.7067) (xy 94.739347 98.680218) (xy 94.900349 98.627905) + (xy 95.051185 98.55105) (xy 95.188141 98.451546) (xy 95.307846 98.331841) (xy 95.40735 98.194885) + (xy 95.484205 98.044049) (xy 95.536518 97.883047) (xy 95.553625 97.775038) (xy 95.563 97.715849) + (xy 95.563 97.54655) (xy 95.537428 97.385098) (xy 95.546382 97.315805) (xy 95.591379 97.262353) + (xy 95.65813 97.241713) (xy 95.659901 97.2417) (xy 95.898444 97.2417) (xy 95.898451 97.2417) (xy 96.177942 97.204904) + (xy 96.450239 97.131942) (xy 96.710683 97.024063) (xy 96.954817 96.883112) (xy 97.178465 96.7115) + (xy 97.3778 96.512165) (xy 97.445492 96.423946) (xy 97.50192 96.382744) (xy 97.571666 96.378589) + (xy 97.632586 96.412801) (xy 97.665339 96.474518) (xy 97.659526 96.544146) (xy 97.651255 96.561433) + (xy 97.595183 96.658551) (xy 97.595175 96.658568) (xy 97.485097 96.924321) (xy 97.410646 97.202176) + (xy 97.373101 97.487361) (xy 97.3731 97.487377) (xy 97.3731 97.775022) (xy 97.373101 97.775038) + (xy 97.410646 98.060223) (xy 97.485097 98.338078) (xy 97.595175 98.603831) (xy 97.595183 98.603848) + (xy 97.739004 98.852951) (xy 97.739015 98.852967) (xy 97.914121 99.081171) (xy 97.914127 99.081178) + (xy 98.117521 99.284572) (xy 98.117528 99.284578) (xy 98.250807 99.386846) (xy 98.345741 99.459691) + (xy 98.345748 99.459695) (xy 98.594851 99.603516) (xy 98.594856 99.603518) (xy 98.594859 99.60352) + (xy 98.594863 99.603521) (xy 98.594868 99.603524) (xy 98.688475 99.642297) (xy 98.86062 99.713602) + (xy 99.138475 99.788053) (xy 99.423671 99.8256) (xy 99.423678 99.8256) (xy 99.711322 99.8256) (xy 99.711329 99.8256) + (xy 99.996525 99.788053) (xy 100.27438 99.713602) (xy 100.540141 99.60352) (xy 100.789259 99.459691) + (xy 101.017473 99.284577) (xy 101.220877 99.081173) (xy 101.395991 98.852959) (xy 101.53982 98.603841) + (xy 101.649902 98.33808) (xy 101.724353 98.060225) (xy 101.7619 97.775029) (xy 101.7619 97.54655) + (xy 103.572 97.54655) (xy 103.572 97.715849) (xy 103.598481 97.883047) (xy 103.650796 98.044053) + (xy 103.727652 98.194888) (xy 103.827148 98.331834) (xy 103.827152 98.331839) (xy 103.94686 98.451547) + (xy 103.946865 98.451551) (xy 104.023873 98.5075) (xy 104.083815 98.55105) (xy 104.177141 98.598602) + (xy 104.234646 98.627903) (xy 104.234648 98.627903) (xy 104.234651 98.627905) (xy 104.318844 98.655261) + (xy 104.395652 98.680218) (xy 104.562851 98.7067) (xy 104.562856 98.7067) (xy 104.732149 98.7067) + (xy 104.899347 98.680218) (xy 105.060349 98.627905) (xy 105.211185 98.55105) (xy 105.348141 98.451546) + (xy 105.467846 98.331841) (xy 105.56735 98.194885) (xy 105.644205 98.044049) (xy 105.696518 97.883047) + (xy 105.713625 97.775038) (xy 105.723 97.715849) (xy 105.723 97.54655) (xy 105.696518 97.379352) + (xy 105.651796 97.241713) (xy 105.644205 97.218351) (xy 105.644203 97.218348) (xy 105.644203 97.218346) + (xy 105.600176 97.13194) (xy 105.56735 97.067515) (xy 105.535781 97.024064) (xy 105.467851 96.930565) + (xy 105.467847 96.93056) (xy 105.348139 96.810852) (xy 105.348134 96.810848) (xy 105.211188 96.711352) + (xy 105.211187 96.711351) (xy 105.211185 96.71135) (xy 105.157331 96.68391) (xy 105.060353 96.634496) + (xy 104.899347 96.582181) (xy 104.732149 96.5557) (xy 104.732144 96.5557) (xy 104.562856 96.5557) + (xy 104.562851 96.5557) (xy 104.395652 96.582181) (xy 104.234646 96.634496) (xy 104.083811 96.711352) + (xy 103.946865 96.810848) (xy 103.94686 96.810852) (xy 103.827152 96.93056) (xy 103.827148 96.930565) + (xy 103.727652 97.067511) (xy 103.650796 97.218346) (xy 103.598481 97.379352) (xy 103.572 97.54655) + (xy 101.7619 97.54655) (xy 101.7619 97.487371) (xy 101.724353 97.202175) (xy 101.649902 96.92432) + (xy 101.53982 96.658559) (xy 101.539818 96.658556) (xy 101.539816 96.658551) (xy 101.395995 96.409448) + (xy 101.395991 96.409441) (xy 101.292069 96.274007) (xy 101.220878 96.181228) (xy 101.220872 96.181221) + (xy 101.017478 95.977827) (xy 101.017471 95.977821) (xy 100.789267 95.802715) (xy 100.789265 95.802713) + (xy 100.789259 95.802709) (xy 100.789254 95.802706) (xy 100.789251 95.802704) (xy 100.540148 95.658883) + (xy 100.540131 95.658875) (xy 100.274378 95.548797) (xy 99.996523 95.474346) (xy 99.711338 95.436801) + (xy 99.711335 95.4368) (xy 99.711329 95.4368) (xy 99.423671 95.4368) (xy 99.423665 95.4368) (xy 99.423661 95.436801) + (xy 99.138476 95.474346) (xy 98.860621 95.548797) (xy 98.594868 95.658875) (xy 98.594851 95.658883) + (xy 98.345748 95.802704) (xy 98.345732 95.802715) (xy 98.117528 95.977821) (xy 98.117521 95.977827) + (xy 97.914127 96.181221) (xy 97.84293 96.274007) (xy 97.786501 96.315209) (xy 97.716755 96.319364) + (xy 97.655835 96.285151) (xy 97.623083 96.223434) (xy 97.628896 96.153807) (xy 97.637161 96.136531) + (xy 97.690363 96.044383) (xy 97.798242 95.783939) (xy 97.871204 95.511642) (xy 97.908 95.232151) + (xy 97.908 94.950249) (xy 97.871204 94.670758) (xy 97.798242 94.398461) (xy 97.690363 94.138017) + (xy 97.690361 94.138014) (xy 97.690359 94.138009) (xy 97.549416 93.89389) (xy 97.549412 93.893883) + (xy 97.3778 93.670235) (xy 97.377798 93.670233) (xy 97.377795 93.670229) (xy 97.226447 93.518881) + (xy 97.192962 93.457558) (xy 97.197946 93.387866) (xy 97.239818 93.331933) (xy 97.305282 93.307516) + (xy 97.314128 93.3072) (xy 98.467505 93.3072) (xy 98.534544 93.326885) (xy 98.555186 93.343519) + (xy 99.973729 94.762063) (xy 99.97373 94.762063) (xy 99.973732 94.762065) (xy 100.057347 94.7967) + (xy 100.147853 94.7967) (xy 109.358 94.7967) (xy 109.425039 94.816385) (xy 109.470794 94.869189) + (xy 109.482 94.9207) (xy 109.482 96.141201) (xy 109.482001 96.141218) (xy 109.4925 96.243996) (xy 109.492501 96.243999) + (xy 109.502445 96.274007) (xy 109.547686 96.410534) (xy 109.639788 96.559856) (xy 109.763844 96.683912) + (xy 109.913166 96.776014) (xy 110.079703 96.831199) (xy 110.182491 96.8417) (xy 112.109618 96.841699) + (xy 112.109627 96.8417) (xy 112.538351 96.841699) (xy 112.605389 96.861383) (xy 112.651144 96.914187) + (xy 112.661088 96.983346) (xy 112.638669 97.038583) (xy 112.617651 97.067511) (xy 112.540796 97.218346) + (xy 112.488481 97.379352) (xy 112.462 97.54655) (xy 112.462 97.715849) (xy 112.488481 97.883047) + (xy 112.540796 98.044053) (xy 112.617652 98.194888) (xy 112.717148 98.331834) (xy 112.717152 98.331839) + (xy 112.83686 98.451547) (xy 112.836865 98.451551) (xy 112.913873 98.5075) (xy 112.973815 98.55105) + (xy 113.067141 98.598602) (xy 113.124646 98.627903) (xy 113.124648 98.627903) (xy 113.124651 98.627905) + (xy 113.208844 98.655261) (xy 113.285652 98.680218) (xy 113.452851 98.7067) (xy 113.452856 98.7067) + (xy 113.622149 98.7067) (xy 113.789347 98.680218) (xy 113.950349 98.627905) (xy 114.101185 98.55105) + (xy 114.238141 98.451546) (xy 114.357846 98.331841) (xy 114.45735 98.194885) (xy 114.534205 98.044049) + (xy 114.586518 97.883047) (xy 114.603625 97.775038) (xy 114.613 97.715849) (xy 114.613 97.54655) + (xy 114.587428 97.385098) (xy 114.596382 97.315805) (xy 114.641379 97.262353) (xy 114.70813 97.241713) + (xy 114.709901 97.2417) (xy 114.948444 97.2417) (xy 114.948451 97.2417) (xy 115.227942 97.204904) + (xy 115.500239 97.131942) (xy 115.760683 97.024063) (xy 116.004817 96.883112) (xy 116.228465 96.7115) + (xy 116.4278 96.512165) (xy 116.495492 96.423946) (xy 116.55192 96.382744) (xy 116.621666 96.378589) + (xy 116.682586 96.412801) (xy 116.715339 96.474518) (xy 116.709526 96.544146) (xy 116.701255 96.561433) + (xy 116.645183 96.658551) (xy 116.645175 96.658568) (xy 116.535097 96.924321) (xy 116.460646 97.202176) + (xy 116.423101 97.487361) (xy 116.4231 97.487377) (xy 116.4231 97.775022) (xy 116.423101 97.775038) + (xy 116.460646 98.060223) (xy 116.535097 98.338078) (xy 116.645175 98.603831) (xy 116.645183 98.603848) + (xy 116.789004 98.852951) (xy 116.789015 98.852967) (xy 116.964121 99.081171) (xy 116.964127 99.081178) + (xy 117.167521 99.284572) (xy 117.167528 99.284578) (xy 117.300807 99.386846) (xy 117.395741 99.459691) + (xy 117.395748 99.459695) (xy 117.644851 99.603516) (xy 117.644856 99.603518) (xy 117.644859 99.60352) + (xy 117.644863 99.603521) (xy 117.644868 99.603524) (xy 117.738475 99.642297) (xy 117.891912 99.705853) + (xy 117.899363 99.708939) (xy 117.953767 99.75278) (xy 117.975832 99.819074) (xy 117.958553 99.886773) + (xy 117.907416 99.934384) (xy 117.851911 99.9475) (xy 116.023441 99.9475) (xy 115.956402 99.927815) + (xy 115.910647 99.875011) (xy 115.900703 99.805853) (xy 115.920339 99.754609) (xy 115.96539 99.687185) + (xy 115.96539 99.687184) (xy 115.965394 99.687179) (xy 116.025737 99.541497) (xy 116.0565 99.386842) + (xy 116.0565 99.229158) (xy 116.0565 99.229155) (xy 116.056499 99.229153) (xy 116.04547 99.173707) + (xy 116.025737 99.074503) (xy 115.984357 98.974602) (xy 115.965397 98.928827) (xy 115.96539 98.928814) + (xy 115.877789 98.797711) (xy 115.877786 98.797707) (xy 115.766292 98.686213) (xy 115.766288 98.68621) + (xy 115.635185 98.598609) (xy 115.635172 98.598602) (xy 115.489501 98.538264) (xy 115.489489 98.538261) + (xy 115.334845 98.5075) (xy 115.334842 98.5075) (xy 115.177158 98.5075) (xy 115.177155 98.5075) + (xy 115.02251 98.538261) (xy 115.022498 98.538264) (xy 114.876827 98.598602) (xy 114.876814 98.598609) + (xy 114.745711 98.68621) (xy 114.745707 98.686213) (xy 114.634213 98.797707) (xy 114.63421 98.797711) + (xy 114.546609 98.928814) (xy 114.546602 98.928827) (xy 114.486264 99.074498) (xy 114.486261 99.07451) + (xy 114.4555 99.229153) (xy 114.4555 99.386846) (xy 114.486261 99.541489) (xy 114.486264 99.541501) + (xy 114.546602 99.687172) (xy 114.546609 99.687185) (xy 114.591661 99.754609) (xy 114.612539 99.821286) + (xy 114.594055 99.888666) (xy 114.542076 99.935357) (xy 114.488559 99.9475) (xy 108.374346 99.9475) + (xy 108.290731 99.982135) (xy 103.611686 104.661181) (xy 103.550363 104.694666) (xy 103.524005 104.6975) + (xy 101.312227 104.6975) (xy 101.245188 104.677815) (xy 101.199433 104.625011) (xy 101.189489 104.555853) + (xy 101.218514 104.492297) (xy 101.266089 104.458403) (xy 101.293896 104.447256) (xy 101.34976 104.424862) + (xy 101.504146 104.327363) (xy 101.504748 104.326808) (xy 101.63833 104.20353) (xy 101.638332 104.203528) + (xy 101.639182 104.202395) (xy 101.713496 104.103302) (xy 101.769465 104.06148) (xy 101.812698 104.053699) + (xy 102.0688 104.053699) (xy 102.5688 104.053699) (xy 102.624732 104.053699) (xy 102.708724 104.04315) + (xy 102.841557 103.988129) (xy 102.908404 103.9362) (xy 102.908411 103.936194) (xy 103.376294 103.468312) + (xy 103.376299 103.468306) (xy 103.428227 103.40146) (xy 103.431442 103.3937) (xy 102.5688 103.3937) + (xy 102.5688 104.053699) (xy 102.0688 104.053699) (xy 102.0688 103.2677) (xy 102.088485 103.200661) + (xy 102.141289 103.154906) (xy 102.1928 103.1437) (xy 102.3188 103.1437) (xy 102.3188 103.0177) + (xy 102.338485 102.950661) (xy 102.391289 102.904906) (xy 102.4428 102.8937) (xy 103.4938 102.8937) + (xy 103.4938 102.777553) (xy 103.47882 102.663769) (xy 103.478818 102.663764) (xy 103.420178 102.522193) + (xy 103.420175 102.522188) (xy 103.37982 102.469596) (xy 103.354626 102.404427) (xy 103.368664 102.335982) + (xy 103.379821 102.318623) (xy 103.380058 102.318315) (xy 103.420612 102.265463) (xy 103.479307 102.123763) + (xy 103.4943 102.009877) (xy 103.494299 101.277524) (xy 103.493531 101.271691) (xy 103.479308 101.163645) + (xy 103.479307 101.163637) (xy 103.420612 101.021937) (xy 103.327244 100.900256) (xy 103.216925 100.815606) + (xy 103.205562 100.806887) (xy 103.096925 100.761888) (xy 103.063863 100.748193) (xy 103.028814 100.743578) + (xy 102.964919 100.715312) (xy 102.926448 100.656988) (xy 102.923384 100.596448) (xy 102.95175 100.453844) + (xy 102.95175 100.296155) (xy 102.951749 100.296153) (xy 102.948178 100.278199) (xy 102.920987 100.141503) + (xy 102.916488 100.130641) (xy 102.860647 99.995827) (xy 102.86064 99.995814) (xy 102.773039 99.864711) + (xy 102.773036 99.864707) (xy 102.661542 99.753213) (xy 102.661538 99.75321) (xy 102.530435 99.665609) + (xy 102.530422 99.665602) (xy 102.384751 99.605264) (xy 102.384739 99.605261) (xy 102.230095 99.5745) + (xy 102.230092 99.5745) (xy 102.072408 99.5745) (xy 102.072405 99.5745) (xy 101.91776 99.605261) + (xy 101.917748 99.605264) (xy 101.772077 99.665602) (xy 101.772064 99.665609) (xy 101.640961 99.75321) + (xy 101.640957 99.753213) (xy 101.529463 99.864707) (xy 101.52946 99.864711) (xy 101.441859 99.995814) + (xy 101.441852 99.995827) (xy 101.381514 100.141498) (xy 101.381511 100.141508) (xy 101.367591 100.21149) + (xy 101.335206 100.273401) (xy 101.27449 100.307975) (xy 101.20472 100.304235) (xy 101.199837 100.302395) + (xy 101.180291 100.29456) (xy 101.180287 100.294558) (xy 101.180285 100.294558) (xy 101.180281 100.294557) + (xy 101.180277 100.294556) (xy 101.001292 100.258418) (xy 101.001299 100.258418) (xy 100.829594 100.255465) + (xy 100.818718 100.255278) (xy 100.818717 100.255278) (xy 100.818714 100.255278) (xy 100.638597 100.285238) + (xy 100.638584 100.285241) (xy 100.466863 100.347313) (xy 100.452348 100.35577) (xy 100.452263 100.355819) + (xy 100.445176 100.35994) (xy 100.44493 100.360008) (xy 100.417138 100.376244) (xy 100.41689 100.376389) + (xy 100.414163 100.377059) (xy 100.354546 100.393196) (xy 100.314201 100.393193) (xy 100.314097 100.3932) + (xy 98.873396 100.3932) (xy 98.865214 100.393198) (xy 98.865192 100.393193) (xy 98.835265 100.393195) + (xy 98.833028 100.393195) (xy 98.832746 100.393112) (xy 98.770493 100.376262) (xy 98.742671 100.360008) + (xy 98.736605 100.356464) (xy 98.734907 100.355617) (xy 98.727557 100.351334) (xy 98.720721 100.34735) + (xy 98.548997 100.285278) (xy 98.548991 100.285277) (xy 98.368881 100.255319) (xy 98.368878 100.255319) + (xy 98.360339 100.255465) (xy 98.186307 100.258459) (xy 98.007334 100.294594) (xy 98.007323 100.294597) + (xy 97.837842 100.362537) (xy 97.837841 100.362537) (xy 97.683461 100.460032) (xy 97.683458 100.460034) + (xy 97.553011 100.580419) (xy 97.549269 100.583872) (xy 97.475763 100.681888) (xy 97.474481 100.683597) + (xy 97.418511 100.725419) (xy 97.375278 100.7332) (xy 96.237621 100.7332) (xy 96.123745 100.748191) + (xy 96.123737 100.748193) (xy 95.982037 100.806887) (xy 95.860356 100.900256) (xy 95.766987 101.021937) + (xy 95.708293 101.163636) (xy 95.708292 101.163638) (xy 95.6933 101.277522) (xy 95.6933 102.009878) + (xy 95.708291 102.123754) (xy 95.708292 102.12376) (xy 95.708293 102.123763) (xy 95.715268 102.140602) + (xy 95.766987 102.265462) (xy 95.807465 102.318215) (xy 95.832658 102.383384) (xy 95.818619 102.451829) + (xy 95.807465 102.469185) (xy 95.766987 102.521937) (xy 95.708293 102.663636) (xy 95.708292 102.663638) + (xy 95.6933 102.777522) (xy 95.6933 103.509878) (xy 95.708291 103.623754) (xy 95.708292 103.62376) + (xy 95.708293 103.623763) (xy 95.723506 103.660489) (xy 95.766987 103.765462) (xy 95.776723 103.77815) + (xy 95.860356 103.887144) (xy 95.982037 103.980512) (xy 96.123737 104.039207) (xy 96.237623 104.0542) + (xy 96.544526 104.054199) (xy 96.611565 104.073883) (xy 96.65732 104.126687) (xy 96.659086 104.130743) + (xy 96.675935 104.171418) (xy 96.675936 104.171419) (xy 97.622382 105.117866) (xy 97.622384 105.117868) + (xy 97.685831 105.144147) (xy 97.705997 105.1525) (xy 97.705999 105.1525) (xy 103.714852 105.1525) + (xy 103.714853 105.1525) (xy 103.798468 105.117865) (xy 107.04018 101.876153) (xy 108.6205 101.876153) + (xy 108.6205 102.033846) (xy 108.651261 102.188489) (xy 108.651264 102.188501) (xy 108.711602 102.334172) + (xy 108.711609 102.334185) (xy 108.79921 102.465288) (xy 108.799213 102.465292) (xy 108.910707 102.576786) + (xy 108.910711 102.576789) (xy 109.041814 102.66439) (xy 109.041827 102.664397) (xy 109.093164 102.685661) + (xy 109.187503 102.724737) (xy 109.327187 102.752522) (xy 109.342153 102.755499) (xy 109.342156 102.7555) + (xy 109.342158 102.7555) (xy 109.499844 102.7555) (xy 109.499845 102.755499) (xy 109.654497 102.724737) + (xy 109.789933 102.668638) (xy 109.800172 102.664397) (xy 109.800172 102.664396) (xy 109.800179 102.664394) + (xy 109.931289 102.576789) (xy 110.042789 102.465289) (xy 110.130394 102.334179) (xy 110.131196 102.332244) + (xy 110.146732 102.294735) (xy 110.190737 102.188497) (xy 110.2215 102.033842) (xy 110.2215 101.876158) + (xy 110.2215 101.876155) (xy 110.221499 101.876153) (xy 110.216805 101.852553) (xy 110.190737 101.721503) + (xy 110.186678 101.711704) (xy 110.130397 101.575827) (xy 110.13039 101.575814) (xy 110.042789 101.444711) + (xy 110.042786 101.444707) (xy 109.931292 101.333213) (xy 109.931288 101.33321) (xy 109.800185 101.245609) + (xy 109.800172 101.245602) (xy 109.654501 101.185264) (xy 109.654489 101.185261) (xy 109.499845 101.1545) + (xy 109.499842 101.1545) (xy 109.342158 101.1545) (xy 109.342155 101.1545) (xy 109.18751 101.185261) + (xy 109.187498 101.185264) (xy 109.041827 101.245602) (xy 109.041814 101.245609) (xy 108.910711 101.33321) + (xy 108.910707 101.333213) (xy 108.799213 101.444707) (xy 108.79921 101.444711) (xy 108.711609 101.575814) + (xy 108.711602 101.575827) (xy 108.651264 101.721498) (xy 108.651261 101.72151) (xy 108.6205 101.876153) + (xy 107.04018 101.876153) (xy 108.477514 100.438819) (xy 108.538837 100.405334) (xy 108.565195 100.4025) + (xy 116.50855 100.4025) (xy 116.521525 100.406309) (xy 116.535013 100.405357) (xy 116.554393 100.415961) + (xy 116.575589 100.422185) (xy 116.584443 100.432403) (xy 116.596307 100.438895) (xy 116.606878 100.458294) + (xy 116.621344 100.474989) (xy 116.623268 100.488372) (xy 116.629739 100.500247) (xy 116.628143 100.52228) + (xy 116.631288 100.544147) (xy 116.625561 100.557955) (xy 116.624694 100.569935) (xy 116.607752 100.600897) + (xy 116.56448 100.658597) (xy 116.508511 100.700419) (xy 116.465278 100.7082) (xy 115.327621 100.7082) + (xy 115.213745 100.723191) (xy 115.213737 100.723193) (xy 115.072037 100.781887) (xy 114.950356 100.875256) + (xy 114.856987 100.996937) (xy 114.798293 101.138636) (xy 114.798292 101.138638) (xy 114.7833 101.252522) + (xy 114.7833 101.984878) (xy 114.798291 102.098754) (xy 114.798292 102.09876) (xy 114.798293 102.098763) + (xy 114.817992 102.14632) (xy 114.856987 102.240462) (xy 114.897465 102.293215) (xy 114.922658 102.358384) + (xy 114.908619 102.426829) (xy 114.897465 102.444185) (xy 114.856987 102.496937) (xy 114.798293 102.638636) + (xy 114.798292 102.638638) (xy 114.7833 102.752522) (xy 114.7833 103.484878) (xy 114.798291 103.598754) + (xy 114.798292 103.59876) (xy 114.798293 103.598763) (xy 114.807978 103.622144) (xy 114.856987 103.740462) + (xy 114.856988 103.740463) (xy 114.950356 103.862144) (xy 115.072037 103.955512) (xy 115.213737 104.014207) + (xy 115.327623 104.0292) (xy 115.630935 104.029199) (xy 115.697974 104.048883) (xy 115.743729 104.101687) + (xy 115.745495 104.105744) (xy 115.765935 104.155088) (xy 115.765936 104.15509) (xy 116.697824 105.086977) + (xy 116.761821 105.150974) (xy 116.845436 105.185609) (xy 116.845437 105.185609) (xy 127.731143 105.185609) + (xy 127.731144 105.185609) (xy 127.814759 105.150974) (xy 127.814761 105.150972) (xy 127.814762 105.150972) + (xy 132.626915 100.338819) (xy 132.688238 100.305334) (xy 132.714596 100.3025) (xy 135.642375 100.3025) + (xy 135.709414 100.322185) (xy 135.755169 100.374989) (xy 135.765113 100.444147) (xy 135.736088 100.507703) + (xy 135.726477 100.517619) (xy 135.660403 100.578597) (xy 135.653541 100.58493) (xy 135.649269 100.588872) + (xy 135.574779 100.6882) (xy 135.574481 100.688597) (xy 135.518511 100.730419) (xy 135.475278 100.7382) + (xy 134.337621 100.7382) (xy 134.223745 100.753191) (xy 134.223737 100.753193) (xy 134.082037 100.811887) + (xy 133.960356 100.905256) (xy 133.866987 101.026937) (xy 133.808293 101.168636) (xy 133.808292 101.168638) + (xy 133.7933 101.282522) (xy 133.7933 102.014878) (xy 133.808291 102.128754) (xy 133.808292 102.12876) + (xy 133.808293 102.128763) (xy 133.831338 102.184397) (xy 133.866987 102.270462) (xy 133.907465 102.323215) + (xy 133.932658 102.388384) (xy 133.918619 102.456829) (xy 133.907465 102.474185) (xy 133.866987 102.526937) + (xy 133.808293 102.668636) (xy 133.808292 102.668638) (xy 133.7933 102.782522) (xy 133.7933 103.514878) + (xy 133.808291 103.628754) (xy 133.808292 103.62876) (xy 133.808293 103.628763) (xy 133.824167 103.667085) + (xy 133.866987 103.770462) (xy 133.880981 103.788699) (xy 133.960356 103.892144) (xy 134.082037 103.985512) + (xy 134.223737 104.044207) (xy 134.337623 104.0592) (xy 134.617301 104.059199) (xy 134.684339 104.078883) + (xy 134.730094 104.131687) (xy 134.7413 104.183199) (xy 134.7413 104.237803) (xy 134.775935 104.321418) + (xy 134.775936 104.321419) (xy 135.572382 105.117866) (xy 135.572384 105.117868) (xy 135.635831 105.144147) + (xy 135.655997 105.1525) (xy 135.655999 105.1525) (xy 148.594752 105.1525) (xy 148.594753 105.1525) + (xy 148.678368 105.117865) (xy 152.696487 101.099745) (xy 152.757808 101.066262) (xy 152.8275 101.071246) + (xy 152.883433 101.113118) (xy 152.90785 101.178582) (xy 152.907106 101.20361) (xy 152.90582 101.213378) + (xy 152.903301 101.232521) (xy 152.9033 101.232525) (xy 152.9033 101.964878) (xy 152.918291 102.078754) + (xy 152.918292 102.07876) (xy 152.918293 102.078763) (xy 152.936933 102.123763) (xy 152.976987 102.220462) + (xy 153.017465 102.273215) (xy 153.042658 102.338384) (xy 153.028619 102.406829) (xy 153.017465 102.424185) + (xy 152.976987 102.476937) (xy 152.918293 102.618636) (xy 152.918292 102.618638) (xy 152.9033 102.732522) + (xy 152.9033 103.464878) (xy 152.918291 103.578754) (xy 152.918292 103.57876) (xy 152.918293 103.578763) + (xy 152.936933 103.623763) (xy 152.976987 103.720462) (xy 152.979267 103.723433) (xy 153.070356 103.842144) + (xy 153.192037 103.935512) (xy 153.333737 103.994207) (xy 153.447623 104.0092) (xy 153.808497 104.009199) + (xy 153.875536 104.028883) (xy 153.896178 104.045518) (xy 154.754529 104.903868) (xy 154.818526 104.967865) + (xy 154.902141 105.0025) (xy 154.902142 105.0025) (xy 177.357453 105.0025) (xy 177.424492 105.022185) + (xy 177.470247 105.074989) (xy 177.480191 105.144147) (xy 177.451166 105.207703) (xy 177.392388 105.245477) + (xy 177.381644 105.248117) (xy 177.30551 105.263261) (xy 177.305498 105.263264) (xy 177.159827 105.323602) + (xy 177.159814 105.323609) (xy 177.028711 105.41121) (xy 177.028707 105.411213) (xy 176.917213 105.522707) + (xy 176.91721 105.522711) (xy 176.829609 105.653814) (xy 176.829602 105.653827) (xy 176.769264 105.799498) + (xy 176.769261 105.79951) (xy 176.7385 105.954153) (xy 176.7385 106.111846) (xy 176.769261 106.266489) + (xy 176.769264 106.266501) (xy 176.829602 106.412172) (xy 176.829609 106.412185) (xy 176.91721 106.543288) + (xy 176.917213 106.543292) (xy 177.028707 106.654786) (xy 177.028711 106.654789) (xy 177.159814 106.74239) + (xy 177.159827 106.742397) (xy 177.305498 106.802735) (xy 177.305503 106.802737) (xy 177.460153 106.833499) + (xy 177.460156 106.8335) (xy 177.460158 106.8335) (xy 177.617844 106.8335) (xy 177.617845 106.833499) + (xy 177.772497 106.802737) (xy 177.918179 106.742394) (xy 178.049289 106.654789) (xy 178.160789 106.543289) + (xy 178.248394 106.412179) (xy 178.308737 106.266497) (xy 178.3395 106.111842) (xy 178.3395 105.954158) + (xy 178.3395 105.954155) (xy 178.339499 105.954153) (xy 178.31517 105.831844) (xy 178.308737 105.799503) + (xy 178.285075 105.742377) (xy 178.27395 105.715518) (xy 178.256816 105.674153) (xy 224.9625 105.674153) + (xy 224.9625 105.831846) (xy 224.993261 105.986489) (xy 224.993264 105.986501) (xy 225.053602 106.132172) + (xy 225.053609 106.132185) (xy 225.14121 106.263288) (xy 225.141213 106.263292) (xy 225.252707 106.374786) + (xy 225.252711 106.374789) (xy 225.383814 106.46239) (xy 225.383827 106.462397) (xy 225.49996 106.5105) + (xy 225.529503 106.522737) (xy 225.684153 106.553499) (xy 225.684156 106.5535) (xy 225.684158 106.5535) + (xy 225.841844 106.5535) (xy 225.841845 106.553499) (xy 225.996497 106.522737) (xy 226.142179 106.462394) + (xy 226.273289 106.374789) (xy 226.384789 106.263289) (xy 226.472394 106.132179) (xy 226.532737 105.986497) + (xy 226.5635 105.831842) (xy 226.5635 105.674158) (xy 226.5635 105.674155) (xy 226.563499 105.674153) + (xy 226.55882 105.650631) (xy 226.532737 105.519503) (xy 226.511349 105.467868) (xy 226.472397 105.373827) + (xy 226.47239 105.373814) (xy 226.384789 105.242711) (xy 226.384786 105.242707) (xy 226.273292 105.131213) + (xy 226.273288 105.13121) (xy 226.142185 105.043609) (xy 226.142172 105.043602) (xy 225.996501 104.983264) + (xy 225.996489 104.983261) (xy 225.841845 104.9525) (xy 225.841842 104.9525) (xy 225.684158 104.9525) + (xy 225.684155 104.9525) (xy 225.52951 104.983261) (xy 225.529498 104.983264) (xy 225.383827 105.043602) + (xy 225.383814 105.043609) (xy 225.252711 105.13121) (xy 225.252707 105.131213) (xy 225.141213 105.242707) + (xy 225.14121 105.242711) (xy 225.053609 105.373814) (xy 225.053602 105.373827) (xy 224.993264 105.519498) + (xy 224.993261 105.51951) (xy 224.9625 105.674153) (xy 178.256816 105.674153) (xy 178.248397 105.653827) + (xy 178.24839 105.653814) (xy 178.160789 105.522711) (xy 178.160786 105.522707) (xy 178.049292 105.411213) + (xy 178.049288 105.41121) (xy 177.918185 105.323609) (xy 177.918172 105.323602) (xy 177.772501 105.263264) + (xy 177.772489 105.263261) (xy 177.696356 105.248117) (xy 177.634445 105.215732) (xy 177.599871 105.155016) + (xy 177.60361 105.085247) (xy 177.644477 105.028575) (xy 177.709495 105.002994) (xy 177.720547 105.0025) + (xy 181.096502 105.0025) (xy 181.096503 105.0025) (xy 181.180118 104.967865) (xy 182.119116 104.028868) + (xy 182.119116 104.028866) (xy 182.119118 104.028865) (xy 182.137074 103.985512) (xy 182.15375 103.945253) + (xy 182.15375 103.854747) (xy 182.15375 103.705075) (xy 182.173435 103.638036) (xy 182.226239 103.592281) + (xy 182.230249 103.590534) (xy 182.305429 103.559394) (xy 182.436539 103.471789) (xy 182.548039 103.360289) + (xy 182.635644 103.229179) (xy 182.636473 103.227179) (xy 182.66399 103.160746) (xy 182.695987 103.083497) + (xy 182.72675 102.928842) (xy 182.72675 102.771158) (xy 182.72675 102.771155) (xy 182.726749 102.771153) + (xy 182.717096 102.722623) (xy 182.695987 102.616503) (xy 182.695985 102.616498) (xy 182.635647 102.470827) + (xy 182.63564 102.470814) (xy 182.548039 102.339711) (xy 182.548036 102.339707) (xy 182.436542 102.228213) + (xy 182.436538 102.22821) (xy 182.305435 102.140609) (xy 182.305422 102.140602) (xy 182.159751 102.080264) + (xy 182.159739 102.080261) (xy 182.005095 102.0495) (xy 182.005092 102.0495) (xy 181.847408 102.0495) + (xy 181.847405 102.0495) (xy 181.69276 102.080261) (xy 181.692748 102.080264) (xy 181.547077 102.140602) + (xy 181.547064 102.140609) (xy 181.415961 102.22821) (xy 181.415957 102.228213) (xy 181.304463 102.339707) + (xy 181.30446 102.339711) (xy 181.216859 102.470814) (xy 181.216852 102.470827) (xy 181.156514 102.616498) + (xy 181.156511 102.61651) (xy 181.12575 102.771153) (xy 181.12575 102.928846) (xy 181.156511 103.083489) + (xy 181.156514 103.083501) (xy 181.216852 103.229172) (xy 181.216859 103.229185) (xy 181.30446 103.360288) + (xy 181.304463 103.360292) (xy 181.415957 103.471786) (xy 181.415961 103.471789) (xy 181.547064 103.55939) + (xy 181.547068 103.559392) (xy 181.547071 103.559394) (xy 181.622204 103.590515) (xy 181.637769 103.603057) + (xy 181.655953 103.611362) (xy 181.664415 103.62453) (xy 181.676606 103.634354) (xy 181.682919 103.653323) + (xy 181.693727 103.67014) (xy 181.697689 103.697699) (xy 181.698671 103.700648) (xy 181.69875 103.705075) + (xy 181.69875 103.754404) (xy 181.679065 103.821443) (xy 181.662431 103.842085) (xy 180.993336 104.511181) + (xy 180.932013 104.544666) (xy 180.905655 104.5475) (xy 158.722887 104.5475) (xy 158.655848 104.527815) + (xy 158.610093 104.475011) (xy 158.600149 104.405853) (xy 158.629174 104.342297) (xy 158.656676 104.318657) + (xy 158.691339 104.296766) (xy 158.714146 104.282363) (xy 158.716819 104.279897) (xy 158.84833 104.15853) + (xy 158.848332 104.158528) (xy 158.848333 104.158527) (xy 158.923496 104.058302) (xy 158.979465 104.01648) + (xy 159.022698 104.008699) (xy 159.2788 104.008699) (xy 159.7788 104.008699) (xy 159.834732 104.008699) + (xy 159.918724 103.99815) (xy 160.051557 103.943129) (xy 160.118404 103.8912) (xy 160.118411 103.891194) + (xy 160.586294 103.423312) (xy 160.586299 103.423306) (xy 160.638227 103.35646) (xy 160.641442 103.3487) + (xy 159.7788 103.3487) (xy 159.7788 104.008699) (xy 159.2788 104.008699) (xy 159.2788 103.2227) + (xy 159.298485 103.155661) (xy 159.351289 103.109906) (xy 159.4028 103.0987) (xy 159.5288 103.0987) + (xy 159.5288 102.9727) (xy 159.548485 102.905661) (xy 159.601289 102.859906) (xy 159.6528 102.8487) + (xy 160.7038 102.8487) (xy 160.7038 102.732553) (xy 160.68882 102.618771) (xy 160.688817 102.618762) + (xy 160.675724 102.587153) (xy 170.5055 102.587153) (xy 170.5055 102.744846) (xy 170.536261 102.899489) + (xy 170.536264 102.899501) (xy 170.596602 103.045172) (xy 170.596609 103.045185) (xy 170.68421 103.176288) + (xy 170.684213 103.176292) (xy 170.795707 103.287786) (xy 170.795711 103.287789) (xy 170.926814 103.37539) + (xy 170.926827 103.375397) (xy 171.049297 103.426125) (xy 171.072503 103.435737) (xy 171.218994 103.464876) + (xy 171.227153 103.466499) (xy 171.227156 103.4665) (xy 171.227158 103.4665) (xy 171.384844 103.4665) + (xy 171.384845 103.466499) (xy 171.539497 103.435737) (xy 171.670119 103.381632) (xy 171.685172 103.375397) + (xy 171.685172 103.375396) (xy 171.685179 103.375394) (xy 171.816289 103.287789) (xy 171.835243 103.268835) + (xy 171.896565 103.235348) (xy 171.966257 103.240331) (xy 172.022192 103.282201) (xy 172.045865 103.340327) + (xy 172.048291 103.358756) (xy 172.048292 103.358761) (xy 172.048293 103.358763) (xy 172.067785 103.405821) + (xy 172.106987 103.500462) (xy 172.107862 103.501602) (xy 172.200356 103.622144) (xy 172.322037 103.715512) + (xy 172.463737 103.774207) (xy 172.577623 103.7892) (xy 173.715229 103.789199) (xy 173.782268 103.808884) + (xy 173.814431 103.838802) (xy 173.817676 103.843129) (xy 173.889238 103.938552) (xy 173.889239 103.938553) + (xy 173.88924 103.938554) (xy 174.023432 104.062395) (xy 174.177825 104.159897) (xy 174.305258 104.21098) + (xy 174.347314 104.227839) (xy 174.347315 104.227839) (xy 174.347317 104.22784) (xy 174.526308 104.263979) + (xy 174.526302 104.263979) (xy 174.542622 104.264259) (xy 174.708884 104.26712) (xy 174.889012 104.237158) + (xy 174.937029 104.219801) (xy 175.060736 104.175085) (xy 175.060737 104.175083) (xy 175.06074 104.175083) + (xy 175.075775 104.16632) (xy 175.082459 104.162435) (xy 175.08275 104.162357) (xy 175.110633 104.14606) + (xy 175.110751 104.145992) (xy 175.113968 104.145201) (xy 175.173062 104.129199) (xy 176.654192 104.129199) + (xy 176.654314 104.129206) (xy 176.662405 104.129205) (xy 176.662408 104.129206) (xy 176.694542 104.129202) + (xy 176.757104 104.146134) (xy 176.78493 104.162391) (xy 176.784932 104.162391) (xy 176.79108 104.165983) + (xy 176.792735 104.166808) (xy 176.806878 104.17505) (xy 176.9786 104.237121) (xy 177.158721 104.267082) + (xy 177.338398 104.26399) (xy 177.341291 104.263941) (xy 177.520266 104.227805) (xy 177.520269 104.227803) + (xy 177.520274 104.227803) (xy 177.68976 104.159862) (xy 177.844146 104.062363) (xy 177.844995 104.06158) + (xy 177.97833 103.93853) (xy 177.978332 103.938528) (xy 177.978333 103.938527) (xy 178.053496 103.838302) + (xy 178.109465 103.79648) (xy 178.152698 103.788699) (xy 178.4088 103.788699) (xy 178.9088 103.788699) + (xy 178.964732 103.788699) (xy 179.048724 103.77815) (xy 179.181557 103.723129) (xy 179.248404 103.6712) + (xy 179.248411 103.671194) (xy 179.716294 103.203312) (xy 179.716299 103.203306) (xy 179.768227 103.13646) + (xy 179.771442 103.1287) (xy 178.9088 103.1287) (xy 178.9088 103.788699) (xy 178.4088 103.788699) + (xy 178.4088 103.0027) (xy 178.428485 102.935661) (xy 178.481289 102.889906) (xy 178.5328 102.8787) + (xy 178.6588 102.8787) (xy 178.6588 102.7527) (xy 178.678485 102.685661) (xy 178.731289 102.639906) + (xy 178.7828 102.6287) (xy 179.8338 102.6287) (xy 179.8338 102.512553) (xy 179.81882 102.398769) + (xy 179.818818 102.398764) (xy 179.760178 102.257193) (xy 179.760175 102.257188) (xy 179.71982 102.204596) + (xy 179.694626 102.139427) (xy 179.708664 102.070982) (xy 179.719821 102.053623) (xy 179.72452 102.0475) + (xy 179.760612 102.000463) (xy 179.819307 101.858763) (xy 179.8343 101.744877) (xy 179.834299 101.162522) + (xy 191.0033 101.162522) (xy 191.0033 101.894878) (xy 191.018291 102.008754) (xy 191.018292 102.00876) + (xy 191.018293 102.008763) (xy 191.032976 102.04421) (xy 191.076987 102.150462) (xy 191.117465 102.203215) + (xy 191.142658 102.268384) (xy 191.128619 102.336829) (xy 191.117465 102.354185) (xy 191.076987 102.406937) + (xy 191.018293 102.548636) (xy 191.018292 102.548638) (xy 191.0033 102.662522) (xy 191.0033 103.394878) + (xy 191.018291 103.508754) (xy 191.018292 103.50876) (xy 191.018293 103.508763) (xy 191.034957 103.548992) + (xy 191.076987 103.650462) (xy 191.092895 103.671194) (xy 191.170356 103.772144) (xy 191.292037 103.865512) + (xy 191.30175 103.869535) (xy 191.356155 103.913375) (xy 191.378221 103.979669) (xy 191.3783 103.984097) + (xy 191.3783 104.054046) (xy 191.409061 104.208689) (xy 191.409064 104.208701) (xy 191.469402 104.354372) + (xy 191.469409 104.354385) (xy 191.55701 104.485488) (xy 191.557013 104.485492) (xy 191.668507 104.596986) + (xy 191.668511 104.596989) (xy 191.799614 104.68459) (xy 191.799627 104.684597) (xy 191.942616 104.743824) + (xy 191.945303 104.744937) (xy 192.026967 104.761181) (xy 192.099953 104.775699) (xy 192.099956 104.7757) + (xy 192.099958 104.7757) (xy 192.257644 104.7757) (xy 192.257645 104.775699) (xy 192.412297 104.744937) + (xy 192.556912 104.685036) (xy 192.557972 104.684597) (xy 192.557972 104.684596) (xy 192.557979 104.684594) + (xy 192.689089 104.596989) (xy 192.800589 104.485489) (xy 192.888194 104.354379) (xy 192.900306 104.325136) + (xy 192.944147 104.270733) (xy 193.010441 104.248667) (xy 193.07814 104.265946) (xy 193.081013 104.267704) + (xy 193.141868 104.306135) (xy 193.147825 104.309897) (xy 193.317314 104.377839) (xy 193.317315 104.377839) + (xy 193.317317 104.37784) (xy 193.496308 104.413979) (xy 193.496302 104.413979) (xy 193.512622 104.414259) + (xy 193.678884 104.41712) (xy 193.859012 104.387158) (xy 193.906584 104.369962) (xy 194.030736 104.325085) + (xy 194.030737 104.325083) (xy 194.03074 104.325083) (xy 194.045775 104.31632) (xy 194.052459 104.312435) + (xy 194.05275 104.312357) (xy 194.080633 104.29606) (xy 194.080751 104.295992) (xy 194.083968 104.295201) + (xy 194.143062 104.279199) (xy 195.624192 104.279199) (xy 195.624314 104.279206) (xy 195.632405 104.279205) + (xy 195.632408 104.279206) (xy 195.664542 104.279202) (xy 195.727104 104.296134) (xy 195.75493 104.312391) + (xy 195.754932 104.312391) (xy 195.76108 104.315983) (xy 195.762735 104.316808) (xy 195.776878 104.32505) + (xy 195.9486 104.387121) (xy 196.128721 104.417082) (xy 196.308398 104.41399) (xy 196.311291 104.413941) + (xy 196.490266 104.377805) (xy 196.490269 104.377803) (xy 196.490274 104.377803) (xy 196.65976 104.309862) + (xy 196.814146 104.212363) (xy 196.81511 104.211474) (xy 196.94833 104.08853) (xy 196.948332 104.088528) + (xy 196.948876 104.087803) (xy 197.023496 103.988302) (xy 197.079465 103.94648) (xy 197.122698 103.938699) + (xy 197.3788 103.938699) (xy 197.8788 103.938699) (xy 197.934732 103.938699) (xy 198.018724 103.92815) + (xy 198.151557 103.873129) (xy 198.218404 103.8212) (xy 198.218411 103.821194) (xy 198.686294 103.353312) + (xy 198.686299 103.353306) (xy 198.738227 103.28646) (xy 198.741442 103.2787) (xy 197.8788 103.2787) + (xy 197.8788 103.938699) (xy 197.3788 103.938699) (xy 197.3788 103.1527) (xy 197.398485 103.085661) + (xy 197.451289 103.039906) (xy 197.5028 103.0287) (xy 197.6288 103.0287) (xy 197.6288 102.9027) + (xy 197.648485 102.835661) (xy 197.701289 102.789906) (xy 197.7528 102.7787) (xy 198.8038 102.7787) + (xy 198.8038 102.662553) (xy 198.78882 102.548769) (xy 198.788818 102.548764) (xy 198.730178 102.407193) + (xy 198.730175 102.407188) (xy 198.68982 102.354596) (xy 198.664626 102.289427) (xy 198.678664 102.220982) + (xy 198.689821 102.203623) (xy 198.695499 102.196224) (xy 198.730612 102.150463) (xy 198.789307 102.008763) + (xy 198.791145 101.994794) (xy 198.819409 101.930901) (xy 198.877732 101.892428) (xy 198.947596 101.891594) + (xy 199.006821 101.928665) (xy 199.017186 101.942089) (xy 199.07946 102.035288) (xy 199.079463 102.035292) + (xy 199.190957 102.146786) (xy 199.190961 102.146789) (xy 199.322064 102.23439) (xy 199.322077 102.234397) + (xy 199.466831 102.294355) (xy 199.467753 102.294737) (xy 199.588338 102.318723) (xy 199.622403 102.325499) + (xy 199.622406 102.3255) (xy 199.622408 102.3255) (xy 199.780094 102.3255) (xy 199.780095 102.325499) + (xy 199.934747 102.294737) (xy 200.065777 102.240463) (xy 200.080422 102.234397) (xy 200.080422 102.234396) + (xy 200.080429 102.234394) (xy 200.211539 102.146789) (xy 200.323039 102.035289) (xy 200.410644 101.904179) + (xy 200.413923 101.896264) (xy 200.429457 101.858761) (xy 200.470987 101.758497) (xy 200.50175 101.603842) + (xy 200.50175 101.446158) (xy 200.50175 101.446155) (xy 200.501749 101.446153) (xy 200.495117 101.412812) + (xy 200.470987 101.291503) (xy 200.41342 101.152522) (xy 210.0183 101.152522) (xy 210.0183 101.884878) + (xy 210.033291 101.998754) (xy 210.033292 101.99876) (xy 210.033293 101.998763) (xy 210.052119 102.044213) + (xy 210.091987 102.140462) (xy 210.132465 102.193215) (xy 210.157658 102.258384) (xy 210.143619 102.326829) + (xy 210.132465 102.344185) (xy 210.091987 102.396937) (xy 210.033293 102.538636) (xy 210.033292 102.538638) + (xy 210.0183 102.652522) (xy 210.0183 103.384878) (xy 210.033291 103.498754) (xy 210.033292 103.49876) + (xy 210.033293 103.498763) (xy 210.049009 103.536703) (xy 210.091987 103.640462) (xy 210.098154 103.648499) + (xy 210.185356 103.762144) (xy 210.307037 103.855512) (xy 210.448737 103.914207) (xy 210.562623 103.9292) + (xy 210.848815 103.929199) (xy 210.915854 103.948883) (xy 210.961609 104.001687) (xy 210.963375 104.005744) + (xy 211.000935 104.096418) (xy 211.000937 104.096421) (xy 211.822379 104.917863) (xy 211.82238 104.917863) + (xy 211.822382 104.917865) (xy 211.905997 104.9525) (xy 211.905998 104.9525) (xy 223.920452 104.9525) + (xy 223.920453 104.9525) (xy 224.004068 104.917865) (xy 224.00407 104.917863) (xy 224.004071 104.917863) + (xy 228.483115 100.438819) (xy 228.544438 100.405334) (xy 228.570796 100.4025) (xy 230.703627 100.4025) + (xy 230.716601 100.406309) (xy 230.730092 100.405357) (xy 230.749472 100.415961) (xy 230.770666 100.422185) + (xy 230.77952 100.432404) (xy 230.791385 100.438896) (xy 230.801955 100.458295) (xy 230.816421 100.474989) + (xy 230.818345 100.488373) (xy 230.824816 100.500248) (xy 230.82322 100.52228) (xy 230.826365 100.544147) + (xy 230.820638 100.557955) (xy 230.819771 100.569936) (xy 230.80283 100.600895) (xy 230.785742 100.623682) + (xy 230.78198 100.628698) (xy 230.726009 100.67052) (xy 230.682778 100.6783) (xy 229.545121 100.6783) + (xy 229.431245 100.693291) (xy 229.431237 100.693293) (xy 229.289537 100.751987) (xy 229.167856 100.845356) + (xy 229.074487 100.967037) (xy 229.015793 101.108736) (xy 229.015792 101.108738) (xy 229.0008 101.222622) + (xy 229.0008 101.954978) (xy 229.015791 102.068854) (xy 229.015792 102.06886) (xy 229.015793 102.068863) + (xy 229.034556 102.11416) (xy 229.074487 102.210562) (xy 229.114965 102.263315) (xy 229.140158 102.328484) + (xy 229.126119 102.396929) (xy 229.114965 102.414285) (xy 229.074487 102.467037) (xy 229.015793 102.608736) + (xy 229.015792 102.608738) (xy 229.0008 102.722622) (xy 229.0008 103.454978) (xy 229.015791 103.568854) + (xy 229.015792 103.56886) (xy 229.015793 103.568863) (xy 229.035923 103.61746) (xy 229.074487 103.710562) + (xy 229.088901 103.729347) (xy 229.167856 103.832244) (xy 229.289537 103.925612) (xy 229.431237 103.984307) + (xy 229.545123 103.9993) (xy 229.824801 103.999299) (xy 229.891839 104.018983) (xy 229.937594 104.071787) + (xy 229.9488 104.123299) (xy 229.9488 104.154797) (xy 229.9488 104.245303) (xy 229.983435 104.328918) + (xy 229.983436 104.328919) (xy 231.122382 105.467866) (xy 231.122384 105.467868) (xy 231.187051 105.494652) + (xy 231.205997 105.5025) (xy 231.205999 105.5025) (xy 242.519652 105.5025) (xy 242.519653 105.5025) + (xy 242.603268 105.467865) (xy 247.632314 100.438819) (xy 247.693637 100.405334) (xy 247.719995 100.4025) + (xy 249.763551 100.4025) (xy 249.776526 100.406309) (xy 249.790014 100.405357) (xy 249.809394 100.415961) + (xy 249.83059 100.422185) (xy 249.839444 100.432403) (xy 249.851308 100.438895) (xy 249.861879 100.458294) + (xy 249.876345 100.474989) (xy 249.878269 100.488372) (xy 249.88474 100.500247) (xy 249.883144 100.52228) + (xy 249.886289 100.544147) (xy 249.880562 100.557956) (xy 249.879695 100.569934) (xy 249.862754 100.600895) + (xy 249.834481 100.638597) (xy 249.778511 100.680419) (xy 249.735278 100.6882) (xy 248.597621 100.6882) + (xy 248.483745 100.703191) (xy 248.483737 100.703193) (xy 248.342037 100.761887) (xy 248.220356 100.855256) + (xy 248.126987 100.976937) (xy 248.068293 101.118636) (xy 248.068292 101.118638) (xy 248.0533 101.232522) + (xy 248.0533 101.964878) (xy 248.068291 102.078754) (xy 248.068292 102.07876) (xy 248.068293 102.078763) + (xy 248.086933 102.123763) (xy 248.126987 102.220462) (xy 248.167465 102.273215) (xy 248.192658 102.338384) + (xy 248.178619 102.406829) (xy 248.167465 102.424185) (xy 248.126987 102.476937) (xy 248.068293 102.618636) + (xy 248.068292 102.618638) (xy 248.0533 102.732522) (xy 248.0533 103.464878) (xy 248.068291 103.578754) + (xy 248.068292 103.57876) (xy 248.068293 103.578763) (xy 248.086933 103.623763) (xy 248.126987 103.720462) + (xy 248.129267 103.723433) (xy 248.220356 103.842144) (xy 248.342037 103.935512) (xy 248.483737 103.994207) + (xy 248.597623 104.0092) (xy 248.877301 104.009199) (xy 248.944339 104.028883) (xy 248.990094 104.081687) + (xy 249.0013 104.133199) (xy 249.0013 104.147803) (xy 249.034438 104.227805) (xy 249.035936 104.23142) + (xy 249.958385 105.153868) (xy 250.022382 105.217865) (xy 250.105997 105.2525) (xy 250.105998 105.2525) + (xy 261.824052 105.2525) (xy 261.824053 105.2525) (xy 261.907668 105.217865) (xy 266.786714 100.338819) + (xy 266.848037 100.305334) (xy 266.874395 100.3025) (xy 268.987065 100.3025) (xy 269.004781 100.307702) + (xy 269.023247 100.307896) (xy 269.037612 100.317342) (xy 269.054104 100.322185) (xy 269.066194 100.336137) + (xy 269.081625 100.346285) (xy 269.088602 100.361998) (xy 269.099859 100.374989) (xy 269.102486 100.393265) + (xy 269.109981 100.410142) (xy 269.107356 100.42713) (xy 269.109803 100.444147) (xy 269.102132 100.460943) + (xy 269.099313 100.479192) (xy 269.084667 100.499187) (xy 269.080778 100.507703) (xy 269.079921 100.508682) + (xy 269.075769 100.513372) (xy 268.999269 100.583972) (xy 268.921464 100.687719) (xy 268.918134 100.691482) + (xy 268.892633 100.707494) (xy 268.868511 100.725519) (xy 268.862086 100.726675) (xy 268.858962 100.728637) + (xy 268.851614 100.728559) (xy 268.825278 100.7333) (xy 267.687621 100.7333) (xy 267.573745 100.748291) + (xy 267.573737 100.748293) (xy 267.432037 100.806987) (xy 267.310356 100.900356) (xy 267.216987 101.022037) + (xy 267.158293 101.163736) (xy 267.158292 101.163738) (xy 267.1433 101.277622) (xy 267.1433 102.009978) + (xy 267.158291 102.123854) (xy 267.158292 102.12386) (xy 267.158293 102.123863) (xy 267.173497 102.160567) + (xy 267.216987 102.265562) (xy 267.257465 102.318315) (xy 267.282658 102.383484) (xy 267.268619 102.451929) + (xy 267.257465 102.469285) (xy 267.216987 102.522037) (xy 267.158293 102.663736) (xy 267.158292 102.663738) + (xy 267.1433 102.777622) (xy 267.1433 103.509978) (xy 267.158291 103.623854) (xy 267.158292 103.62386) + (xy 267.158293 103.623863) (xy 267.177901 103.6712) (xy 267.216987 103.765562) (xy 267.229289 103.781594) + (xy 267.310356 103.887244) (xy 267.432037 103.980612) (xy 267.573737 104.039307) (xy 267.687623 104.0543) + (xy 267.967301 104.054299) (xy 268.034339 104.073983) (xy 268.080094 104.126787) (xy 268.0913 104.178299) + (xy 268.0913 104.237803) (xy 268.12565 104.320731) (xy 268.125936 104.32142) (xy 268.908385 105.103868) + (xy 268.972382 105.167865) (xy 269.055997 105.2025) (xy 269.055998 105.2025) (xy 275.096502 105.2025) + (xy 275.096503 105.2025) (xy 275.180118 105.167865) (xy 275.18012 105.167863) (xy 275.180121 105.167863) + (xy 279.959165 100.388819) (xy 280.020488 100.355334) (xy 280.046846 100.3525) (xy 286.582598 100.3525) + (xy 286.649637 100.372185) (xy 286.695392 100.424989) (xy 286.705336 100.494147) (xy 286.676311 100.557703) + (xy 286.630051 100.591061) (xy 286.623938 100.593592) (xy 286.623937 100.593593) (xy 286.591124 100.607185) + (xy 286.482237 100.652287) (xy 286.360556 100.745656) (xy 286.267187 100.867337) (xy 286.208493 101.009036) + (xy 286.208492 101.009038) (xy 286.1935 101.122922) (xy 286.1935 101.855278) (xy 286.208491 101.969154) + (xy 286.208492 101.969159) (xy 286.208493 101.969163) (xy 286.227428 102.014876) (xy 286.267187 102.110862) + (xy 286.307665 102.163615) (xy 286.332858 102.228784) (xy 286.318819 102.297229) (xy 286.307665 102.314585) + (xy 286.267187 102.367337) (xy 286.208493 102.509036) (xy 286.208492 102.509038) (xy 286.1935 102.622922) + (xy 286.1935 103.355278) (xy 286.208491 103.469154) (xy 286.208492 103.46916) (xy 286.208493 103.469163) + (xy 286.22743 103.514881) (xy 286.267187 103.610862) (xy 286.272463 103.617738) (xy 286.360556 103.732544) + (xy 286.482237 103.825912) (xy 286.623937 103.884607) (xy 286.737823 103.8996) (xy 287.017501 103.899599) + (xy 287.084539 103.919283) (xy 287.130294 103.972087) (xy 287.1415 104.023599) (xy 287.1415 104.038003) + (xy 287.169589 104.105816) (xy 287.176136 104.12162) (xy 291.655685 108.601168) (xy 291.719682 108.665165) + (xy 291.803297 108.6998) (xy 291.803298 108.6998) (xy 317.128352 108.6998) (xy 317.128353 108.6998) + (xy 317.211968 108.665165) (xy 317.21197 108.665163) (xy 317.211971 108.665163) (xy 320.134757 105.742377) + (xy 328.40685 105.742377) (xy 328.40685 106.030022) (xy 328.406851 106.030038) (xy 328.444396 106.315223) + (xy 328.518847 106.593078) (xy 328.628925 106.858831) (xy 328.628933 106.858848) (xy 328.772754 107.107951) + (xy 328.772765 107.107967) (xy 328.947871 107.336171) (xy 328.947877 107.336178) (xy 329.151271 107.539572) + (xy 329.151277 107.539577) (xy 329.379491 107.714691) (xy 329.379498 107.714695) (xy 329.628601 107.858516) + (xy 329.628606 107.858518) (xy 329.628609 107.85852) (xy 329.628613 107.858521) (xy 329.628618 107.858524) + (xy 329.733973 107.902163) (xy 329.89437 107.968602) (xy 330.172225 108.043053) (xy 330.457421 108.0806) + (xy 330.457428 108.0806) (xy 330.745072 108.0806) (xy 330.745079 108.0806) (xy 331.030275 108.043053) + (xy 331.30813 107.968602) (xy 331.573891 107.85852) (xy 331.823009 107.714691) (xy 332.051223 107.539577) + (xy 332.254627 107.336173) (xy 332.429741 107.107959) (xy 332.57357 106.858841) (xy 332.683652 106.59308) + (xy 332.758103 106.315225) (xy 332.79565 106.030029) (xy 332.79565 105.742371) (xy 332.758103 105.457175) + (xy 332.683652 105.17932) (xy 332.609626 105.000606) (xy 332.573574 104.913568) (xy 332.573566 104.913551) + (xy 332.429745 104.664448) (xy 332.429741 104.664441) (xy 332.332045 104.53712) (xy 332.254628 104.436228) + (xy 332.254622 104.436221) (xy 332.051228 104.232827) (xy 332.051221 104.232821) (xy 331.823017 104.057715) + (xy 331.823015 104.057713) (xy 331.823009 104.057709) (xy 331.823004 104.057706) (xy 331.823001 104.057704) + (xy 331.573898 103.913883) (xy 331.573881 103.913875) (xy 331.308128 103.803797) (xy 331.030273 103.729346) + (xy 330.745088 103.691801) (xy 330.745085 103.6918) (xy 330.745079 103.6918) (xy 330.457421 103.6918) + (xy 330.457415 103.6918) (xy 330.457411 103.691801) (xy 330.172226 103.729346) (xy 329.894371 103.803797) + (xy 329.628618 103.913875) (xy 329.628601 103.913883) (xy 329.379498 104.057704) (xy 329.379482 104.057715) + (xy 329.151278 104.232821) (xy 329.151271 104.232827) (xy 328.947877 104.436221) (xy 328.947871 104.436228) + (xy 328.772765 104.664432) (xy 328.772754 104.664448) (xy 328.628933 104.913551) (xy 328.628925 104.913568) + (xy 328.518847 105.179321) (xy 328.444396 105.457176) (xy 328.406851 105.742361) (xy 328.40685 105.742377) + (xy 320.134757 105.742377) (xy 320.226503 105.650631) (xy 322.580063 103.29707) (xy 322.580064 103.297069) + (xy 322.580065 103.297068) (xy 322.582371 103.291501) (xy 322.583724 103.288236) (xy 322.603803 103.23976) + (xy 322.6147 103.213453) (xy 322.6147 102.437047) (xy 322.611449 102.429199) (xy 322.580066 102.353432) + (xy 322.496273 102.269639) (xy 322.490039 102.260726) (xy 322.482222 102.237508) (xy 322.470484 102.216012) + (xy 322.471272 102.204986) (xy 322.467745 102.194509) (xy 322.47372 102.170754) (xy 322.475468 102.14632) + (xy 322.483527 102.131768) (xy 322.48479 102.12675) (xy 322.487945 102.123791) (xy 322.493274 102.11417) + (xy 322.495812 102.110863) (xy 322.554507 101.969163) (xy 322.5695 101.855277) (xy 322.569499 101.122924) + (xy 322.568242 101.113378) (xy 322.554508 101.009045) (xy 322.554507 101.009037) (xy 322.495812 100.867337) + (xy 322.402444 100.745656) (xy 322.286888 100.656988) (xy 322.280762 100.652287) (xy 322.139063 100.593593) + (xy 322.139061 100.593592) (xy 322.025178 100.5786) (xy 322.025177 100.5786) (xy 320.887573 100.5786) + (xy 320.820534 100.558915) (xy 320.788372 100.528998) (xy 320.713561 100.429244) (xy 320.579369 100.305404) + (xy 320.579366 100.305402) (xy 320.579365 100.305401) (xy 320.579362 100.305399) (xy 320.424977 100.207901) + (xy 320.255487 100.139958) (xy 320.255477 100.139956) (xy 320.076492 100.103818) (xy 320.076499 100.103818) + (xy 319.904794 100.100865) (xy 319.893918 100.100678) (xy 319.893917 100.100678) (xy 319.893914 100.100678) + (xy 319.713797 100.130638) (xy 319.713784 100.130641) (xy 319.542063 100.192713) (xy 319.527548 100.20117) + (xy 319.527463 100.201219) (xy 319.520376 100.20534) (xy 319.52013 100.205408) (xy 319.492338 100.221644) + (xy 319.49209 100.221789) (xy 319.489363 100.222459) (xy 319.429746 100.238596) (xy 319.389401 100.238593) + (xy 319.389297 100.2386) (xy 317.948596 100.2386) (xy 317.940414 100.238598) (xy 317.940392 100.238593) + (xy 317.910465 100.238595) (xy 317.908228 100.238595) (xy 317.907946 100.238512) (xy 317.845693 100.221662) + (xy 317.817871 100.205408) (xy 317.811805 100.201864) (xy 317.810107 100.201017) (xy 317.799845 100.195037) + (xy 317.795921 100.19275) (xy 317.624197 100.130678) (xy 317.624191 100.130677) (xy 317.444081 100.100719) + (xy 317.444078 100.100719) (xy 317.435539 100.100865) (xy 317.261507 100.103859) (xy 317.082534 100.139994) + (xy 317.082523 100.139997) (xy 316.913042 100.207937) (xy 316.913041 100.207937) (xy 316.758661 100.305432) + (xy 316.758658 100.305434) (xy 316.66356 100.393196) (xy 316.624469 100.429272) (xy 316.5497 100.528972) + (xy 316.549681 100.528997) (xy 316.493711 100.570819) (xy 316.450478 100.5786) (xy 315.312821 100.5786) + (xy 315.198945 100.593591) (xy 315.198937 100.593593) (xy 315.057237 100.652287) (xy 314.935556 100.745656) + (xy 314.842187 100.867337) (xy 314.783493 101.009036) (xy 314.783492 101.009038) (xy 314.7685 101.122922) + (xy 314.7685 101.855278) (xy 314.783491 101.969159) (xy 314.783756 101.970146) (xy 314.783735 101.97101) + (xy 314.784553 101.977222) (xy 314.783584 101.977349) (xy 314.782091 102.039996) (xy 314.742927 102.097857) + (xy 314.678698 102.125359) (xy 314.616528 102.116797) (xy 314.523501 102.078264) (xy 314.523489 102.078261) + (xy 314.368845 102.0475) (xy 314.368842 102.0475) (xy 314.211158 102.0475) (xy 314.211155 102.0475) + (xy 314.05651 102.078261) (xy 314.056498 102.078264) (xy 313.910827 102.138602) (xy 313.910814 102.138609) + (xy 313.779711 102.22621) (xy 313.779707 102.226213) (xy 313.668213 102.337707) (xy 313.66821 102.337711) + (xy 313.580609 102.468814) (xy 313.580602 102.468827) (xy 313.520264 102.614498) (xy 313.520261 102.61451) + (xy 313.4895 102.769153) (xy 313.4895 102.926846) (xy 313.520261 103.081489) (xy 313.520264 103.081501) + (xy 313.580602 103.227172) (xy 313.580609 103.227185) (xy 313.66821 103.358288) (xy 313.668213 103.358292) + (xy 313.779707 103.469786) (xy 313.779711 103.469789) (xy 313.910814 103.55739) (xy 313.910827 103.557397) + (xy 314.041112 103.611362) (xy 314.056503 103.617737) (xy 314.170749 103.640462) (xy 314.211153 103.648499) + (xy 314.211156 103.6485) (xy 314.211158 103.6485) (xy 314.368844 103.6485) (xy 314.368845 103.648499) + (xy 314.523497 103.617737) (xy 314.669179 103.557394) (xy 314.669184 103.55739) (xy 314.672024 103.555873) + (xy 314.67369 103.555525) (xy 314.674808 103.555063) (xy 314.674895 103.555274) (xy 314.740425 103.541624) + (xy 314.805672 103.566618) (xy 314.835499 103.605338) (xy 314.838123 103.603824) (xy 314.842185 103.610859) + (xy 314.842187 103.610862) (xy 314.842188 103.610863) (xy 314.935556 103.732544) (xy 315.057237 103.825912) + (xy 315.198937 103.884607) (xy 315.312823 103.8996) (xy 316.450429 103.899599) (xy 316.517468 103.919284) + (xy 316.549631 103.949202) (xy 316.554363 103.955512) (xy 316.624438 104.048952) (xy 316.624439 104.048953) + (xy 316.62444 104.048954) (xy 316.758632 104.172795) (xy 316.913025 104.270297) (xy 317.043267 104.322506) + (xy 317.082514 104.338239) (xy 317.082515 104.338239) (xy 317.082517 104.33824) (xy 317.261508 104.374379) + (xy 317.261502 104.374379) (xy 317.277822 104.374659) (xy 317.444084 104.37752) (xy 317.624212 104.347558) + (xy 317.679707 104.327498) (xy 317.795936 104.285485) (xy 317.795937 104.285483) (xy 317.79594 104.285483) + (xy 317.810975 104.27672) (xy 317.817659 104.272835) (xy 317.81795 104.272757) (xy 317.845833 104.25646) + (xy 317.845951 104.256392) (xy 317.849168 104.255601) (xy 317.908262 104.239599) (xy 319.389392 104.239599) + (xy 319.389514 104.239606) (xy 319.397605 104.239605) (xy 319.397608 104.239606) (xy 319.429742 104.239602) + (xy 319.492304 104.256534) (xy 319.52013 104.272791) (xy 319.520132 104.272791) (xy 319.52628 104.276383) + (xy 319.527935 104.277208) (xy 319.542078 104.28545) (xy 319.7138 104.347521) (xy 319.893921 104.377482) + (xy 320.073598 104.37439) (xy 320.076491 104.374341) (xy 320.255466 104.338205) (xy 320.255469 104.338203) + (xy 320.255474 104.338203) (xy 320.42496 104.270262) (xy 320.579346 104.172763) (xy 320.580803 104.171419) + (xy 320.71353 104.04893) (xy 320.713532 104.048928) (xy 320.713926 104.048403) (xy 320.788696 103.948702) + (xy 320.844665 103.90688) (xy 320.887898 103.899099) (xy 321.035205 103.899099) (xy 321.102244 103.918784) + (xy 321.147999 103.971588) (xy 321.157943 104.040746) (xy 321.128918 104.104302) (xy 321.122886 104.11078) + (xy 317.025186 108.208481) (xy 316.963863 108.241966) (xy 316.937505 108.2448) (xy 307.406718 108.2448) + (xy 307.339679 108.225115) (xy 307.293924 108.172311) (xy 307.28398 108.103153) (xy 307.313005 108.039597) + (xy 307.371783 108.001823) (xy 307.37461 108.001028) (xy 307.49563 107.968602) (xy 307.761391 107.85852) + (xy 308.010509 107.714691) (xy 308.238723 107.539577) (xy 308.442127 107.336173) (xy 308.617241 107.107959) + (xy 308.76107 106.858841) (xy 308.871152 106.59308) (xy 308.945603 106.315225) (xy 308.98315 106.030029) + (xy 308.98315 105.742371) (xy 308.968508 105.631153) (xy 314.0025 105.631153) (xy 314.0025 105.788846) + (xy 314.033261 105.943489) (xy 314.033264 105.943501) (xy 314.093602 106.089172) (xy 314.093609 106.089185) + (xy 314.18121 106.220288) (xy 314.181213 106.220292) (xy 314.292707 106.331786) (xy 314.292711 106.331789) + (xy 314.423814 106.41939) (xy 314.423827 106.419397) (xy 314.52764 106.462397) (xy 314.569503 106.479737) + (xy 314.724153 106.510499) (xy 314.724156 106.5105) (xy 314.724158 106.5105) (xy 314.881844 106.5105) + (xy 314.881845 106.510499) (xy 315.036497 106.479737) (xy 315.182179 106.419394) (xy 315.313289 106.331789) + (xy 315.424789 106.220289) (xy 315.512394 106.089179) (xy 315.572737 105.943497) (xy 315.6035 105.788842) + (xy 315.6035 105.631158) (xy 315.6035 105.631155) (xy 315.603499 105.631153) (xy 315.587058 105.548501) + (xy 315.572737 105.476503) (xy 315.56916 105.467868) (xy 315.512397 105.330827) (xy 315.51239 105.330814) + (xy 315.424789 105.199711) (xy 315.424786 105.199707) (xy 315.313292 105.088213) (xy 315.313288 105.08821) + (xy 315.182185 105.000609) (xy 315.182172 105.000602) (xy 315.036501 104.940264) (xy 315.036489 104.940261) + (xy 314.881845 104.9095) (xy 314.881842 104.9095) (xy 314.724158 104.9095) (xy 314.724155 104.9095) + (xy 314.56951 104.940261) (xy 314.569498 104.940264) (xy 314.423827 105.000602) (xy 314.423814 105.000609) + (xy 314.292711 105.08821) (xy 314.292707 105.088213) (xy 314.181213 105.199707) (xy 314.18121 105.199711) + (xy 314.093609 105.330814) (xy 314.093602 105.330827) (xy 314.033264 105.476498) (xy 314.033261 105.47651) + (xy 314.0025 105.631153) (xy 308.968508 105.631153) (xy 308.945603 105.457175) (xy 308.871152 105.17932) + (xy 308.797126 105.000606) (xy 308.761074 104.913568) (xy 308.761066 104.913551) (xy 308.617245 104.664448) + (xy 308.617241 104.664441) (xy 308.519545 104.53712) (xy 308.442128 104.436228) (xy 308.442122 104.436221) + (xy 308.238728 104.232827) (xy 308.238721 104.232821) (xy 308.010517 104.057715) (xy 308.010515 104.057713) + (xy 308.010509 104.057709) (xy 308.010504 104.057706) (xy 308.010501 104.057704) (xy 307.761398 103.913883) + (xy 307.761381 103.913875) (xy 307.549018 103.825912) (xy 307.49563 103.803798) (xy 307.495631 103.803798) + (xy 307.495628 103.803797) (xy 307.217773 103.729346) (xy 307.041603 103.706153) (xy 308.4795 103.706153) + (xy 308.4795 103.863846) (xy 308.510261 104.018489) (xy 308.510264 104.018501) (xy 308.570602 104.164172) + (xy 308.570609 104.164185) (xy 308.65821 104.295288) (xy 308.658213 104.295292) (xy 308.769707 104.406786) + (xy 308.769711 104.406789) (xy 308.900814 104.49439) (xy 308.900827 104.494397) (xy 309.027498 104.546865) + (xy 309.046503 104.554737) (xy 309.179651 104.581222) (xy 309.201153 104.585499) (xy 309.201156 104.5855) + (xy 309.201158 104.5855) (xy 309.358844 104.5855) (xy 309.358845 104.585499) (xy 309.513497 104.554737) + (xy 309.628453 104.507121) (xy 309.659172 104.494397) (xy 309.659172 104.494396) (xy 309.659179 104.494394) + (xy 309.790289 104.406789) (xy 309.901789 104.295289) (xy 309.989394 104.164179) (xy 309.991169 104.159895) + (xy 310.012538 104.108303) (xy 310.049737 104.018497) (xy 310.0805 103.863842) (xy 310.0805 103.706158) + (xy 310.0805 103.706155) (xy 310.080499 103.706153) (xy 310.075246 103.679747) (xy 310.049737 103.551503) + (xy 310.034566 103.514876) (xy 309.989397 103.405827) (xy 309.98939 103.405814) (xy 309.901789 103.274711) + (xy 309.901786 103.274707) (xy 309.790292 103.163213) (xy 309.790288 103.16321) (xy 309.659185 103.075609) + (xy 309.659172 103.075602) (xy 309.513501 103.015264) (xy 309.513489 103.015261) (xy 309.358845 102.9845) + (xy 309.358842 102.9845) (xy 309.201158 102.9845) (xy 309.201155 102.9845) (xy 309.04651 103.015261) + (xy 309.046498 103.015264) (xy 308.900827 103.075602) (xy 308.900814 103.075609) (xy 308.769711 103.16321) + (xy 308.769707 103.163213) (xy 308.658213 103.274707) (xy 308.65821 103.274711) (xy 308.570609 103.405814) + (xy 308.570602 103.405827) (xy 308.510264 103.551498) (xy 308.510261 103.55151) (xy 308.4795 103.706153) + (xy 307.041603 103.706153) (xy 306.932588 103.691801) (xy 306.932585 103.6918) (xy 306.932579 103.6918) + (xy 306.644921 103.6918) (xy 306.644915 103.6918) (xy 306.644911 103.691801) (xy 306.359726 103.729346) + (xy 306.081871 103.803797) (xy 305.816118 103.913875) (xy 305.816101 103.913883) (xy 305.566998 104.057704) + (xy 305.566982 104.057715) (xy 305.338778 104.232821) (xy 305.338771 104.232827) (xy 305.135377 104.436221) + (xy 305.135371 104.436228) (xy 304.960265 104.664432) (xy 304.960254 104.664448) (xy 304.816433 104.913551) + (xy 304.816425 104.913568) (xy 304.706347 105.179321) (xy 304.631896 105.457176) (xy 304.594351 105.742361) + (xy 304.59435 105.742377) (xy 304.59435 106.030022) (xy 304.594351 106.030038) (xy 304.631896 106.315223) + (xy 304.706347 106.593078) (xy 304.816425 106.858831) (xy 304.816433 106.858848) (xy 304.960254 107.107951) + (xy 304.960265 107.107967) (xy 305.135371 107.336171) (xy 305.135377 107.336178) (xy 305.338771 107.539572) + (xy 305.338777 107.539577) (xy 305.566991 107.714691) (xy 305.566998 107.714695) (xy 305.816101 107.858516) + (xy 305.816106 107.858518) (xy 305.816109 107.85852) (xy 305.816113 107.858521) (xy 305.816118 107.858524) + (xy 305.921473 107.902163) (xy 306.08187 107.968602) (xy 306.202875 108.001025) (xy 306.262536 108.03739) + (xy 306.293065 108.100237) (xy 306.28477 108.169613) (xy 306.240285 108.22349) (xy 306.173733 108.244765) + (xy 306.170782 108.2448) (xy 291.994145 108.2448) (xy 291.927106 108.225115) (xy 291.906464 108.208481) + (xy 288.120822 104.422839) (xy 288.087337 104.361516) (xy 288.092321 104.291824) (xy 288.134193 104.235891) + (xy 288.199657 104.211474) (xy 288.26793 104.226326) (xy 288.274715 104.230315) (xy 288.338025 104.270297) + (xy 288.468267 104.322506) (xy 288.507514 104.338239) (xy 288.507515 104.338239) (xy 288.507517 104.33824) + (xy 288.686508 104.374379) (xy 288.686502 104.374379) (xy 288.702822 104.374659) (xy 288.869084 104.37752) + (xy 289.049212 104.347558) (xy 289.104707 104.327498) (xy 289.220936 104.285485) (xy 289.220937 104.285483) + (xy 289.22094 104.285483) (xy 289.235975 104.27672) (xy 289.242659 104.272835) (xy 289.24295 104.272757) + (xy 289.270833 104.25646) (xy 289.270951 104.256392) (xy 289.274168 104.255601) (xy 289.333262 104.239599) + (xy 290.814392 104.239599) (xy 290.814514 104.239606) (xy 290.822605 104.239605) (xy 290.822608 104.239606) + (xy 290.854742 104.239602) (xy 290.917304 104.256534) (xy 290.94513 104.272791) (xy 290.945132 104.272791) + (xy 290.95128 104.276383) (xy 290.952935 104.277208) (xy 290.967078 104.28545) (xy 291.1388 104.347521) + (xy 291.318921 104.377482) (xy 291.498598 104.37439) (xy 291.501491 104.374341) (xy 291.680466 104.338205) + (xy 291.680469 104.338203) (xy 291.680474 104.338203) (xy 291.84996 104.270262) (xy 292.004346 104.172763) + (xy 292.005803 104.171419) (xy 292.13853 104.04893) (xy 292.138532 104.048928) (xy 292.138926 104.048403) + (xy 292.213696 103.948702) (xy 292.269665 103.90688) (xy 292.312898 103.899099) (xy 292.569 103.899099) + (xy 293.069 103.899099) (xy 293.124932 103.899099) (xy 293.208924 103.88855) (xy 293.341757 103.833529) + (xy 293.408604 103.7816) (xy 293.408611 103.781594) (xy 293.876494 103.313712) (xy 293.876499 103.313706) + (xy 293.928427 103.24686) (xy 293.931642 103.2391) (xy 293.069 103.2391) (xy 293.069 103.899099) + (xy 292.569 103.899099) (xy 292.569 103.1131) (xy 292.588685 103.046061) (xy 292.641489 103.000306) + (xy 292.693 102.9891) (xy 292.819 102.9891) (xy 292.819 102.8631) (xy 292.838685 102.796061) (xy 292.891489 102.750306) + (xy 292.943 102.7391) (xy 293.994 102.7391) (xy 293.994 102.622953) (xy 293.97902 102.509169) (xy 293.979018 102.509164) + (xy 293.920378 102.367593) (xy 293.920375 102.367588) (xy 293.88002 102.314996) (xy 293.854826 102.249827) + (xy 293.868864 102.181382) (xy 293.880021 102.164023) (xy 293.88076 102.163061) (xy 293.920812 102.110863) + (xy 293.979507 101.969163) (xy 293.9945 101.855277) (xy 293.994499 101.122924) (xy 293.993242 101.113378) + (xy 293.979508 101.009045) (xy 293.979507 101.009037) (xy 293.920812 100.867337) (xy 293.827444 100.745656) + (xy 293.711888 100.656988) (xy 293.705762 100.652287) (xy 293.564063 100.593593) (xy 293.564061 100.593592) + (xy 293.450178 100.5786) (xy 293.450177 100.5786) (xy 292.977945 100.5786) (xy 292.910906 100.558915) + (xy 292.890264 100.542281) (xy 292.28012 99.932136) (xy 292.280115 99.932134) (xy 292.196503 99.8975) + (xy 290.9313 99.8975) (xy 290.864261 99.877815) (xy 290.818506 99.825011) (xy 290.808562 99.755853) + (xy 290.837587 99.692297) (xy 290.883848 99.658939) (xy 291.017632 99.603524) (xy 291.017635 99.603522) + (xy 291.017641 99.60352) (xy 291.266759 99.459691) (xy 291.494973 99.284577) (xy 291.698377 99.081173) + (xy 291.873491 98.852959) (xy 292.01732 98.603841) (xy 292.127402 98.33808) (xy 292.201853 98.060225) + (xy 292.2394 97.775029) (xy 292.2394 97.54655) (xy 294.0495 97.54655) (xy 294.0495 97.715849) (xy 294.075981 97.883047) + (xy 294.128296 98.044053) (xy 294.205152 98.194888) (xy 294.304648 98.331834) (xy 294.304652 98.331839) + (xy 294.42436 98.451547) (xy 294.424365 98.451551) (xy 294.501373 98.5075) (xy 294.561315 98.55105) + (xy 294.654641 98.598602) (xy 294.712146 98.627903) (xy 294.712148 98.627903) (xy 294.712151 98.627905) + (xy 294.796344 98.655261) (xy 294.873152 98.680218) (xy 295.040351 98.7067) (xy 295.040356 98.7067) + (xy 295.209649 98.7067) (xy 295.376847 98.680218) (xy 295.537849 98.627905) (xy 295.688685 98.55105) + (xy 295.825641 98.451546) (xy 295.945346 98.331841) (xy 296.04485 98.194885) (xy 296.121705 98.044049) + (xy 296.174018 97.883047) (xy 296.191125 97.775038) (xy 296.2005 97.715849) (xy 296.2005 97.54655) + (xy 296.174018 97.379352) (xy 296.129296 97.241713) (xy 296.121705 97.218351) (xy 296.121703 97.218348) + (xy 296.121703 97.218346) (xy 296.077676 97.13194) (xy 296.04485 97.067515) (xy 296.013281 97.024064) + (xy 295.945351 96.930565) (xy 295.945347 96.93056) (xy 295.825639 96.810852) (xy 295.825634 96.810848) + (xy 295.688688 96.711352) (xy 295.688687 96.711351) (xy 295.688685 96.71135) (xy 295.634831 96.68391) + (xy 295.537853 96.634496) (xy 295.376847 96.582181) (xy 295.209649 96.5557) (xy 295.209644 96.5557) + (xy 295.040356 96.5557) (xy 295.040351 96.5557) (xy 294.873152 96.582181) (xy 294.712146 96.634496) + (xy 294.561311 96.711352) (xy 294.424365 96.810848) (xy 294.42436 96.810852) (xy 294.304652 96.93056) + (xy 294.304648 96.930565) (xy 294.205152 97.067511) (xy 294.128296 97.218346) (xy 294.075981 97.379352) + (xy 294.0495 97.54655) (xy 292.2394 97.54655) (xy 292.2394 97.487371) (xy 292.201853 97.202175) + (xy 292.127402 96.92432) (xy 292.01732 96.658559) (xy 292.017318 96.658556) (xy 292.017316 96.658551) + (xy 291.873495 96.409448) (xy 291.873491 96.409441) (xy 291.769569 96.274007) (xy 291.698378 96.181228) + (xy 291.698372 96.181221) (xy 291.494978 95.977827) (xy 291.494971 95.977821) (xy 291.266767 95.802715) + (xy 291.266765 95.802713) (xy 291.266759 95.802709) (xy 291.266754 95.802706) (xy 291.266751 95.802704) + (xy 291.017648 95.658883) (xy 291.017631 95.658875) (xy 290.751878 95.548797) (xy 290.474023 95.474346) + (xy 290.188838 95.436801) (xy 290.188835 95.4368) (xy 290.188829 95.4368) (xy 289.901171 95.4368) + (xy 289.901165 95.4368) (xy 289.901161 95.436801) (xy 289.615976 95.474346) (xy 289.338121 95.548797) + (xy 289.072368 95.658875) (xy 289.072351 95.658883) (xy 288.823248 95.802704) (xy 288.823232 95.802715) + (xy 288.595028 95.977821) (xy 288.595021 95.977827) (xy 288.391627 96.181221) (xy 288.32043 96.274007) + (xy 288.264001 96.315209) (xy 288.194255 96.319364) (xy 288.133335 96.285151) (xy 288.100583 96.223434) + (xy 288.106396 96.153807) (xy 288.114661 96.136531) (xy 288.167863 96.044383) (xy 288.275742 95.783939) + (xy 288.348704 95.511642) (xy 288.3855 95.232151) (xy 288.3855 94.950249) (xy 288.348704 94.670758) + (xy 288.275742 94.398461) (xy 288.167863 94.138017) (xy 288.167861 94.138014) (xy 288.167859 94.138009) + (xy 288.026916 93.89389) (xy 288.026912 93.893883) (xy 287.8553 93.670235) (xy 287.855298 93.670233) + (xy 287.855295 93.670229) (xy 287.65597 93.470904) (xy 287.574266 93.40821) (xy 287.432317 93.299288) + (xy 287.432311 93.299284) (xy 287.432309 93.299283) (xy 287.18819 93.15834) (xy 287.188179 93.158335) + (xy 286.927743 93.050459) (xy 286.655439 92.977495) (xy 286.375958 92.9407) (xy 286.375951 92.9407) + (xy 286.094049 92.9407) (xy 286.094041 92.9407) (xy 285.81456 92.977495) (xy 285.542256 93.050459) + (xy 285.28182 93.158335) (xy 285.281809 93.15834) (xy 285.037692 93.299281) (xy 285.037683 93.299288) + (xy 285.017106 93.315076) (xy 284.951938 93.34027) (xy 284.941622 93.3407) (xy 281.609998 93.3407) + (xy 281.609981 93.340701) (xy 281.507203 93.3512) (xy 281.5072 93.351201) (xy 281.340668 93.406385) + (xy 281.340663 93.406387) (xy 281.191342 93.498489) (xy 281.067289 93.622542) (xy 280.975187 93.771863) + (xy 280.975186 93.771866) (xy 280.920001 93.938403) (xy 280.920001 93.938404) (xy 280.92 93.938404) + (xy 280.9095 94.041183) (xy 280.9095 96.141201) (xy 280.909501 96.141218) (xy 280.92 96.243996) + (xy 280.920001 96.243999) (xy 280.929945 96.274007) (xy 280.975186 96.410534) (xy 281.067288 96.559856) + (xy 281.191344 96.683912) (xy 281.340666 96.776014) (xy 281.507203 96.831199) (xy 281.609991 96.8417) + (xy 283.537118 96.841699) (xy 283.537127 96.8417) (xy 283.965851 96.841699) (xy 284.032889 96.861383) + (xy 284.078644 96.914187) (xy 284.088588 96.983346) (xy 284.066169 97.038583) (xy 284.045151 97.067511) + (xy 283.968296 97.218346) (xy 283.915981 97.379352) (xy 283.8895 97.54655) (xy 283.8895 97.715849) + (xy 283.915981 97.883047) (xy 283.968296 98.044053) (xy 284.045152 98.194888) (xy 284.144648 98.331834) + (xy 284.144652 98.331839) (xy 284.26436 98.451547) (xy 284.264365 98.451551) (xy 284.341373 98.5075) + (xy 284.401315 98.55105) (xy 284.494641 98.598602) (xy 284.552146 98.627903) (xy 284.552148 98.627903) + (xy 284.552151 98.627905) (xy 284.636344 98.655261) (xy 284.713152 98.680218) (xy 284.880351 98.7067) + (xy 284.880356 98.7067) (xy 285.049649 98.7067) (xy 285.216847 98.680218) (xy 285.377849 98.627905) + (xy 285.528685 98.55105) (xy 285.665641 98.451546) (xy 285.785346 98.331841) (xy 285.88485 98.194885) + (xy 285.961705 98.044049) (xy 286.014018 97.883047) (xy 286.031125 97.775038) (xy 286.0405 97.715849) + (xy 286.0405 97.54655) (xy 286.014928 97.385098) (xy 286.023882 97.315805) (xy 286.068879 97.262353) + (xy 286.13563 97.241713) (xy 286.137401 97.2417) (xy 286.375944 97.2417) (xy 286.375951 97.2417) + (xy 286.655442 97.204904) (xy 286.927739 97.131942) (xy 287.188183 97.024063) (xy 287.432317 96.883112) + (xy 287.655965 96.7115) (xy 287.8553 96.512165) (xy 287.922992 96.423946) (xy 287.97942 96.382744) + (xy 288.049166 96.378589) (xy 288.110086 96.412801) (xy 288.142839 96.474518) (xy 288.137026 96.544146) + (xy 288.128755 96.561433) (xy 288.072683 96.658551) (xy 288.072675 96.658568) (xy 287.962597 96.924321) + (xy 287.888146 97.202176) (xy 287.850601 97.487361) (xy 287.8506 97.487377) (xy 287.8506 97.775022) + (xy 287.850601 97.775038) (xy 287.888146 98.060223) (xy 287.962597 98.338078) (xy 288.072675 98.603831) + (xy 288.072683 98.603848) (xy 288.216504 98.852951) (xy 288.216515 98.852967) (xy 288.391621 99.081171) + (xy 288.391627 99.081178) (xy 288.595021 99.284572) (xy 288.595028 99.284578) (xy 288.728307 99.386846) + (xy 288.823241 99.459691) (xy 288.823248 99.459695) (xy 289.072351 99.603516) (xy 289.072367 99.603524) + (xy 289.206152 99.658939) (xy 289.260556 99.70278) (xy 289.282621 99.769074) (xy 289.265342 99.836773) + (xy 289.214205 99.884384) (xy 289.1587 99.8975) (xy 279.946503 99.8975) (xy 279.855997 99.8975) + (xy 279.855995 99.8975) (xy 279.855993 99.897501) (xy 279.772384 99.932131) (xy 279.772382 99.932133) + (xy 274.993336 104.711181) (xy 274.932013 104.744666) (xy 274.905655 104.7475) (xy 272.609995 104.7475) + (xy 272.542956 104.727815) (xy 272.497201 104.675011) (xy 272.487257 104.605853) (xy 272.516282 104.542297) + (xy 272.57506 104.504523) (xy 272.585454 104.501953) (xy 272.630266 104.492905) (xy 272.630269 104.492903) + (xy 272.630274 104.492903) (xy 272.79976 104.424962) (xy 272.954146 104.327463) (xy 272.954252 104.327366) + (xy 273.08833 104.20363) (xy 273.088332 104.203628) (xy 273.088333 104.203627) (xy 273.163496 104.103402) + (xy 273.219465 104.06158) (xy 273.262698 104.053799) (xy 273.5188 104.053799) (xy 274.0188 104.053799) + (xy 274.074732 104.053799) (xy 274.158724 104.04325) (xy 274.291557 103.988229) (xy 274.358404 103.9363) + (xy 274.358411 103.936294) (xy 274.826294 103.468412) (xy 274.826301 103.468405) (xy 274.878227 103.40156) + (xy 274.881442 103.3938) (xy 274.0188 103.3938) (xy 274.0188 104.053799) (xy 273.5188 104.053799) + (xy 273.5188 103.2678) (xy 273.538485 103.200761) (xy 273.591289 103.155006) (xy 273.6428 103.1438) + (xy 273.7688 103.1438) (xy 273.7688 103.0178) (xy 273.788485 102.950761) (xy 273.841289 102.905006) + (xy 273.8928 102.8938) (xy 274.9438 102.8938) (xy 274.9438 102.777653) (xy 274.92882 102.663869) + (xy 274.928818 102.663864) (xy 274.870178 102.522293) (xy 274.870175 102.522288) (xy 274.82982 102.469696) + (xy 274.804626 102.404527) (xy 274.818664 102.336082) (xy 274.829821 102.318723) (xy 274.832997 102.314585) + (xy 274.870612 102.265563) (xy 274.929307 102.123863) (xy 274.9443 102.009977) (xy 274.944299 101.277624) + (xy 274.944285 101.277521) (xy 274.929308 101.163745) (xy 274.929307 101.163737) (xy 274.870612 101.022037) + (xy 274.777244 100.900356) (xy 274.666798 100.815609) (xy 274.655562 100.806987) (xy 274.513863 100.748293) + (xy 274.513861 100.748292) (xy 274.399978 100.7333) (xy 274.399977 100.7333) (xy 274.1203 100.7333) + (xy 274.053261 100.713615) (xy 274.007506 100.660811) (xy 273.9963 100.6093) (xy 273.9963 100.597299) + (xy 273.996298 100.597291) (xy 273.991807 100.586447) (xy 273.961668 100.513685) (xy 273.961666 100.513682) + (xy 273.330119 99.882136) (xy 273.330118 99.882135) (xy 273.246503 99.8475) (xy 272.024512 99.8475) + (xy 271.957473 99.827815) (xy 271.911718 99.775011) (xy 271.901774 99.705853) (xy 271.930799 99.642297) + (xy 271.97706 99.608939) (xy 271.990131 99.603524) (xy 271.990141 99.60352) (xy 272.239259 99.459691) + (xy 272.467473 99.284577) (xy 272.670877 99.081173) (xy 272.845991 98.852959) (xy 272.98982 98.603841) + (xy 273.099902 98.33808) (xy 273.174353 98.060225) (xy 273.2119 97.775029) (xy 273.2119 97.54655) + (xy 275.022 97.54655) (xy 275.022 97.715849) (xy 275.048481 97.883047) (xy 275.100796 98.044053) + (xy 275.177652 98.194888) (xy 275.277148 98.331834) (xy 275.277152 98.331839) (xy 275.39686 98.451547) + (xy 275.396865 98.451551) (xy 275.473873 98.5075) (xy 275.533815 98.55105) (xy 275.627141 98.598602) + (xy 275.684646 98.627903) (xy 275.684648 98.627903) (xy 275.684651 98.627905) (xy 275.768844 98.655261) + (xy 275.845652 98.680218) (xy 276.012851 98.7067) (xy 276.012856 98.7067) (xy 276.182149 98.7067) + (xy 276.349347 98.680218) (xy 276.510349 98.627905) (xy 276.661185 98.55105) (xy 276.798141 98.451546) + (xy 276.917846 98.331841) (xy 277.01735 98.194885) (xy 277.094205 98.044049) (xy 277.146518 97.883047) + (xy 277.163625 97.775038) (xy 277.173 97.715849) (xy 277.173 97.54655) (xy 277.146518 97.379352) + (xy 277.101796 97.241713) (xy 277.094205 97.218351) (xy 277.094203 97.218348) (xy 277.094203 97.218346) + (xy 277.050176 97.13194) (xy 277.01735 97.067515) (xy 276.985781 97.024064) (xy 276.917851 96.930565) + (xy 276.917847 96.93056) (xy 276.798139 96.810852) (xy 276.798134 96.810848) (xy 276.661188 96.711352) + (xy 276.661187 96.711351) (xy 276.661185 96.71135) (xy 276.607331 96.68391) (xy 276.510353 96.634496) + (xy 276.349347 96.582181) (xy 276.182149 96.5557) (xy 276.182144 96.5557) (xy 276.012856 96.5557) + (xy 276.012851 96.5557) (xy 275.845652 96.582181) (xy 275.684646 96.634496) (xy 275.533811 96.711352) + (xy 275.396865 96.810848) (xy 275.39686 96.810852) (xy 275.277152 96.93056) (xy 275.277148 96.930565) + (xy 275.177652 97.067511) (xy 275.100796 97.218346) (xy 275.048481 97.379352) (xy 275.022 97.54655) + (xy 273.2119 97.54655) (xy 273.2119 97.487371) (xy 273.174353 97.202175) (xy 273.099902 96.92432) + (xy 272.98982 96.658559) (xy 272.989818 96.658556) (xy 272.989816 96.658551) (xy 272.845995 96.409448) + (xy 272.845991 96.409441) (xy 272.742069 96.274007) (xy 272.670878 96.181228) (xy 272.670872 96.181221) + (xy 272.467478 95.977827) (xy 272.467471 95.977821) (xy 272.239267 95.802715) (xy 272.239265 95.802713) + (xy 272.239259 95.802709) (xy 272.239254 95.802706) (xy 272.239251 95.802704) (xy 271.990148 95.658883) + (xy 271.990131 95.658875) (xy 271.724378 95.548797) (xy 271.446523 95.474346) (xy 271.161338 95.436801) + (xy 271.161335 95.4368) (xy 271.161329 95.4368) (xy 270.873671 95.4368) (xy 270.873665 95.4368) + (xy 270.873661 95.436801) (xy 270.588476 95.474346) (xy 270.310621 95.548797) (xy 270.044868 95.658875) + (xy 270.044851 95.658883) (xy 269.795748 95.802704) (xy 269.795732 95.802715) (xy 269.567528 95.977821) + (xy 269.567521 95.977827) (xy 269.364127 96.181221) (xy 269.29293 96.274007) (xy 269.236501 96.315209) + (xy 269.166755 96.319364) (xy 269.105835 96.285151) (xy 269.073083 96.223434) (xy 269.078896 96.153807) + (xy 269.087161 96.136531) (xy 269.140363 96.044383) (xy 269.248242 95.783939) (xy 269.321204 95.511642) + (xy 269.358 95.232151) (xy 269.358 94.950249) (xy 269.321204 94.670758) (xy 269.248242 94.398461) + (xy 269.140363 94.138017) (xy 269.140361 94.138014) (xy 269.140359 94.138009) (xy 268.999416 93.89389) + (xy 268.999412 93.893883) (xy 268.8278 93.670235) (xy 268.827798 93.670233) (xy 268.827795 93.670229) + (xy 268.62847 93.470904) (xy 268.546766 93.40821) (xy 268.404817 93.299288) (xy 268.404811 93.299284) + (xy 268.404809 93.299283) (xy 268.16069 93.15834) (xy 268.160679 93.158335) (xy 267.900243 93.050459) + (xy 267.627939 92.977495) (xy 267.348458 92.9407) (xy 267.348451 92.9407) (xy 267.066549 92.9407) + (xy 267.066541 92.9407) (xy 266.78706 92.977495) (xy 266.514756 93.050459) (xy 266.25432 93.158335) + (xy 266.254309 93.15834) (xy 266.010192 93.299281) (xy 266.010183 93.299288) (xy 265.989606 93.315076) + (xy 265.924438 93.34027) (xy 265.914122 93.3407) (xy 262.582498 93.3407) (xy 262.582481 93.340701) + (xy 262.479703 93.3512) (xy 262.4797 93.351201) (xy 262.313168 93.406385) (xy 262.313163 93.406387) + (xy 262.163842 93.498489) (xy 262.039789 93.622542) (xy 261.947687 93.771863) (xy 261.947686 93.771866) + (xy 261.892501 93.938403) (xy 261.892501 93.938404) (xy 261.8925 93.938404) (xy 261.882 94.041183) + (xy 261.882 96.141201) (xy 261.882001 96.141218) (xy 261.8925 96.243996) (xy 261.892501 96.243999) + (xy 261.902445 96.274007) (xy 261.947686 96.410534) (xy 262.039788 96.559856) (xy 262.163844 96.683912) + (xy 262.313166 96.776014) (xy 262.479703 96.831199) (xy 262.582491 96.8417) (xy 264.509618 96.841699) + (xy 264.509627 96.8417) (xy 264.938351 96.841699) (xy 265.005389 96.861383) (xy 265.051144 96.914187) + (xy 265.061088 96.983346) (xy 265.038669 97.038583) (xy 265.017651 97.067511) (xy 264.940796 97.218346) + (xy 264.888481 97.379352) (xy 264.862 97.54655) (xy 264.862 97.715849) (xy 264.888481 97.883047) + (xy 264.940796 98.044053) (xy 265.017652 98.194888) (xy 265.117148 98.331834) (xy 265.117152 98.331839) + (xy 265.23686 98.451547) (xy 265.236865 98.451551) (xy 265.313873 98.5075) (xy 265.373815 98.55105) + (xy 265.467141 98.598602) (xy 265.524646 98.627903) (xy 265.524648 98.627903) (xy 265.524651 98.627905) + (xy 265.608844 98.655261) (xy 265.685652 98.680218) (xy 265.852851 98.7067) (xy 265.852856 98.7067) + (xy 266.022149 98.7067) (xy 266.189347 98.680218) (xy 266.350349 98.627905) (xy 266.501185 98.55105) + (xy 266.638141 98.451546) (xy 266.757846 98.331841) (xy 266.85735 98.194885) (xy 266.934205 98.044049) + (xy 266.986518 97.883047) (xy 267.003625 97.775038) (xy 267.013 97.715849) (xy 267.013 97.54655) + (xy 266.987428 97.385098) (xy 266.996382 97.315805) (xy 267.041379 97.262353) (xy 267.10813 97.241713) + (xy 267.109901 97.2417) (xy 267.348444 97.2417) (xy 267.348451 97.2417) (xy 267.627942 97.204904) + (xy 267.900239 97.131942) (xy 268.160683 97.024063) (xy 268.404817 96.883112) (xy 268.628465 96.7115) + (xy 268.8278 96.512165) (xy 268.895492 96.423946) (xy 268.95192 96.382744) (xy 269.021666 96.378589) + (xy 269.082586 96.412801) (xy 269.115339 96.474518) (xy 269.109526 96.544146) (xy 269.101255 96.561433) + (xy 269.045183 96.658551) (xy 269.045175 96.658568) (xy 268.935097 96.924321) (xy 268.860646 97.202176) + (xy 268.823101 97.487361) (xy 268.8231 97.487377) (xy 268.8231 97.775022) (xy 268.823101 97.775038) + (xy 268.860646 98.060223) (xy 268.935097 98.338078) (xy 269.045175 98.603831) (xy 269.045183 98.603848) + (xy 269.189004 98.852951) (xy 269.189015 98.852967) (xy 269.364121 99.081171) (xy 269.364127 99.081178) + (xy 269.567521 99.284572) (xy 269.567528 99.284578) (xy 269.700807 99.386846) (xy 269.795741 99.459691) + (xy 269.795748 99.459695) (xy 270.044851 99.603516) (xy 270.044856 99.603518) (xy 270.044859 99.60352) + (xy 270.044863 99.603521) (xy 270.044868 99.603524) (xy 270.05794 99.608939) (xy 270.112344 99.65278) + (xy 270.134409 99.719074) (xy 270.11713 99.786773) (xy 270.065993 99.834384) (xy 270.010488 99.8475) + (xy 266.683546 99.8475) (xy 266.599931 99.882135) (xy 261.720886 104.761181) (xy 261.659563 104.794666) + (xy 261.633205 104.7975) (xy 250.296845 104.7975) (xy 250.229806 104.777815) (xy 250.209164 104.761181) + (xy 249.980079 104.532096) (xy 249.946594 104.470773) (xy 249.951578 104.401081) (xy 249.99345 104.345148) + (xy 250.058914 104.320731) (xy 250.127187 104.335583) (xy 250.13397 104.339571) (xy 250.197825 104.379897) + (xy 250.32995 104.432861) (xy 250.367314 104.447839) (xy 250.367315 104.447839) (xy 250.367317 104.44784) + (xy 250.546308 104.483979) (xy 250.546302 104.483979) (xy 250.562622 104.484259) (xy 250.728884 104.48712) + (xy 250.909012 104.457158) (xy 250.956064 104.44015) (xy 251.080736 104.395085) (xy 251.080737 104.395083) + (xy 251.08074 104.395083) (xy 251.095775 104.38632) (xy 251.102459 104.382435) (xy 251.10275 104.382357) + (xy 251.130633 104.36606) (xy 251.130751 104.365992) (xy 251.133968 104.365201) (xy 251.193062 104.349199) + (xy 252.674192 104.349199) (xy 252.674314 104.349206) (xy 252.682405 104.349205) (xy 252.682408 104.349206) + (xy 252.714542 104.349202) (xy 252.777104 104.366134) (xy 252.80493 104.382391) (xy 252.804932 104.382391) + (xy 252.81108 104.385983) (xy 252.812735 104.386808) (xy 252.813205 104.387082) (xy 252.826878 104.39505) + (xy 252.9986 104.457121) (xy 253.178721 104.487082) (xy 253.358398 104.48399) (xy 253.361291 104.483941) + (xy 253.540266 104.447805) (xy 253.540269 104.447803) (xy 253.540274 104.447803) (xy 253.70976 104.379862) + (xy 253.864146 104.282363) (xy 253.866819 104.279897) (xy 253.99833 104.15853) (xy 253.998332 104.158528) + (xy 253.998333 104.158527) (xy 254.073496 104.058302) (xy 254.129465 104.01648) (xy 254.172698 104.008699) + (xy 254.4288 104.008699) (xy 254.9288 104.008699) (xy 254.984732 104.008699) (xy 255.068724 103.99815) + (xy 255.201557 103.943129) (xy 255.268404 103.8912) (xy 255.268411 103.891194) (xy 255.736294 103.423312) + (xy 255.736299 103.423306) (xy 255.788227 103.35646) (xy 255.791442 103.3487) (xy 254.9288 103.3487) + (xy 254.9288 104.008699) (xy 254.4288 104.008699) (xy 254.4288 103.2227) (xy 254.448485 103.155661) + (xy 254.501289 103.109906) (xy 254.5528 103.0987) (xy 254.6788 103.0987) (xy 254.6788 102.9727) + (xy 254.698485 102.905661) (xy 254.751289 102.859906) (xy 254.8028 102.8487) (xy 255.8538 102.8487) + (xy 255.8538 102.732553) (xy 255.83882 102.618769) (xy 255.838818 102.618764) (xy 255.780178 102.477193) + (xy 255.780175 102.477188) (xy 255.73982 102.424596) (xy 255.714626 102.359427) (xy 255.728664 102.290982) + (xy 255.739821 102.273623) (xy 255.743399 102.268961) (xy 255.780612 102.220463) (xy 255.839307 102.078763) + (xy 255.8543 101.964877) (xy 255.854299 101.232524) (xy 255.854192 101.231713) (xy 255.841085 101.132144) + (xy 255.839307 101.118637) (xy 255.780612 100.976937) (xy 255.687244 100.855256) (xy 255.582985 100.775256) + (xy 255.565562 100.761887) (xy 255.423863 100.703193) (xy 255.423861 100.703192) (xy 255.309978 100.6882) + (xy 255.309977 100.6882) (xy 254.981055 100.6882) (xy 254.914016 100.668515) (xy 254.890235 100.648626) + (xy 254.875376 100.632642) (xy 254.871665 100.623682) (xy 254.807668 100.559685) (xy 254.521384 100.273401) + (xy 254.23012 99.982136) (xy 254.230115 99.982134) (xy 254.146503 99.9475) (xy 252.733089 99.9475) + (xy 252.66605 99.927815) (xy 252.620295 99.875011) (xy 252.610351 99.805853) (xy 252.639376 99.742297) + (xy 252.685637 99.708939) (xy 252.693088 99.705853) (xy 252.940141 99.60352) (xy 253.189259 99.459691) + (xy 253.417473 99.284577) (xy 253.620877 99.081173) (xy 253.795991 98.852959) (xy 253.93982 98.603841) + (xy 254.049902 98.33808) (xy 254.124353 98.060225) (xy 254.1619 97.775029) (xy 254.1619 97.54655) + (xy 255.972 97.54655) (xy 255.972 97.715849) (xy 255.998481 97.883047) (xy 256.050796 98.044053) + (xy 256.127652 98.194888) (xy 256.227148 98.331834) (xy 256.227152 98.331839) (xy 256.34686 98.451547) + (xy 256.346865 98.451551) (xy 256.423873 98.5075) (xy 256.483815 98.55105) (xy 256.577141 98.598602) + (xy 256.634646 98.627903) (xy 256.634648 98.627903) (xy 256.634651 98.627905) (xy 256.718844 98.655261) + (xy 256.795652 98.680218) (xy 256.962851 98.7067) (xy 256.962856 98.7067) (xy 257.132149 98.7067) + (xy 257.299347 98.680218) (xy 257.460349 98.627905) (xy 257.611185 98.55105) (xy 257.748141 98.451546) + (xy 257.867846 98.331841) (xy 257.96735 98.194885) (xy 258.044205 98.044049) (xy 258.096518 97.883047) + (xy 258.113625 97.775038) (xy 258.123 97.715849) (xy 258.123 97.54655) (xy 258.096518 97.379352) + (xy 258.051796 97.241713) (xy 258.044205 97.218351) (xy 258.044203 97.218348) (xy 258.044203 97.218346) + (xy 258.000176 97.13194) (xy 257.96735 97.067515) (xy 257.935781 97.024064) (xy 257.867851 96.930565) + (xy 257.867847 96.93056) (xy 257.748139 96.810852) (xy 257.748134 96.810848) (xy 257.611188 96.711352) + (xy 257.611187 96.711351) (xy 257.611185 96.71135) (xy 257.557331 96.68391) (xy 257.460353 96.634496) + (xy 257.299347 96.582181) (xy 257.132149 96.5557) (xy 257.132144 96.5557) (xy 256.962856 96.5557) + (xy 256.962851 96.5557) (xy 256.795652 96.582181) (xy 256.634646 96.634496) (xy 256.483811 96.711352) + (xy 256.346865 96.810848) (xy 256.34686 96.810852) (xy 256.227152 96.93056) (xy 256.227148 96.930565) + (xy 256.127652 97.067511) (xy 256.050796 97.218346) (xy 255.998481 97.379352) (xy 255.972 97.54655) + (xy 254.1619 97.54655) (xy 254.1619 97.487371) (xy 254.124353 97.202175) (xy 254.049902 96.92432) + (xy 253.93982 96.658559) (xy 253.939818 96.658556) (xy 253.939816 96.658551) (xy 253.795995 96.409448) + (xy 253.795991 96.409441) (xy 253.692069 96.274007) (xy 253.620878 96.181228) (xy 253.620872 96.181221) + (xy 253.417478 95.977827) (xy 253.417471 95.977821) (xy 253.189267 95.802715) (xy 253.189265 95.802713) + (xy 253.189259 95.802709) (xy 253.189254 95.802706) (xy 253.189251 95.802704) (xy 252.940148 95.658883) + (xy 252.940131 95.658875) (xy 252.674378 95.548797) (xy 252.396523 95.474346) (xy 252.111338 95.436801) + (xy 252.111335 95.4368) (xy 252.111329 95.4368) (xy 251.823671 95.4368) (xy 251.823665 95.4368) + (xy 251.823661 95.436801) (xy 251.538476 95.474346) (xy 251.260621 95.548797) (xy 250.994868 95.658875) + (xy 250.994851 95.658883) (xy 250.745748 95.802704) (xy 250.745732 95.802715) (xy 250.517528 95.977821) + (xy 250.517521 95.977827) (xy 250.314127 96.181221) (xy 250.24293 96.274007) (xy 250.186501 96.315209) + (xy 250.116755 96.319364) (xy 250.055835 96.285151) (xy 250.023083 96.223434) (xy 250.028896 96.153807) + (xy 250.037161 96.136531) (xy 250.090363 96.044383) (xy 250.198242 95.783939) (xy 250.271204 95.511642) + (xy 250.308 95.232151) (xy 250.308 94.950249) (xy 250.271204 94.670758) (xy 250.198242 94.398461) + (xy 250.090363 94.138017) (xy 250.090361 94.138014) (xy 250.090359 94.138009) (xy 249.949416 93.89389) + (xy 249.949412 93.893883) (xy 249.7778 93.670235) (xy 249.777798 93.670233) (xy 249.777795 93.670229) + (xy 249.57847 93.470904) (xy 249.496766 93.40821) (xy 249.354817 93.299288) (xy 249.354811 93.299284) + (xy 249.354809 93.299283) (xy 249.11069 93.15834) (xy 249.110679 93.158335) (xy 248.850243 93.050459) + (xy 248.577939 92.977495) (xy 248.298458 92.9407) (xy 248.298451 92.9407) (xy 248.016549 92.9407) + (xy 248.016541 92.9407) (xy 247.73706 92.977495) (xy 247.464756 93.050459) (xy 247.20432 93.158335) + (xy 247.204309 93.15834) (xy 246.960192 93.299281) (xy 246.960183 93.299288) (xy 246.939606 93.315076) + (xy 246.874438 93.34027) (xy 246.864122 93.3407) (xy 243.532498 93.3407) (xy 243.532481 93.340701) + (xy 243.429703 93.3512) (xy 243.4297 93.351201) (xy 243.263168 93.406385) (xy 243.263163 93.406387) + (xy 243.113842 93.498489) (xy 242.989789 93.622542) (xy 242.897687 93.771863) (xy 242.897686 93.771866) + (xy 242.842501 93.938403) (xy 242.842501 93.938404) (xy 242.8425 93.938404) (xy 242.832 94.041183) + (xy 242.832 96.141201) (xy 242.832001 96.141218) (xy 242.8425 96.243996) (xy 242.842501 96.243999) + (xy 242.852445 96.274007) (xy 242.897686 96.410534) (xy 242.989788 96.559856) (xy 243.113844 96.683912) + (xy 243.263166 96.776014) (xy 243.429703 96.831199) (xy 243.532491 96.8417) (xy 245.459618 96.841699) + (xy 245.459627 96.8417) (xy 245.888351 96.841699) (xy 245.955389 96.861383) (xy 246.001144 96.914187) + (xy 246.011088 96.983346) (xy 245.988669 97.038583) (xy 245.967651 97.067511) (xy 245.890796 97.218346) + (xy 245.838481 97.379352) (xy 245.812 97.54655) (xy 245.812 97.715849) (xy 245.838481 97.883047) + (xy 245.890796 98.044053) (xy 245.967652 98.194888) (xy 246.067148 98.331834) (xy 246.067152 98.331839) + (xy 246.18686 98.451547) (xy 246.186865 98.451551) (xy 246.263873 98.5075) (xy 246.323815 98.55105) + (xy 246.417141 98.598602) (xy 246.474646 98.627903) (xy 246.474648 98.627903) (xy 246.474651 98.627905) + (xy 246.558844 98.655261) (xy 246.635652 98.680218) (xy 246.802851 98.7067) (xy 246.802856 98.7067) + (xy 246.972149 98.7067) (xy 247.139347 98.680218) (xy 247.300349 98.627905) (xy 247.451185 98.55105) + (xy 247.588141 98.451546) (xy 247.707846 98.331841) (xy 247.80735 98.194885) (xy 247.884205 98.044049) + (xy 247.936518 97.883047) (xy 247.953625 97.775038) (xy 247.963 97.715849) (xy 247.963 97.54655) + (xy 247.937428 97.385098) (xy 247.946382 97.315805) (xy 247.991379 97.262353) (xy 248.05813 97.241713) + (xy 248.059901 97.2417) (xy 248.298444 97.2417) (xy 248.298451 97.2417) (xy 248.577942 97.204904) + (xy 248.850239 97.131942) (xy 249.110683 97.024063) (xy 249.354817 96.883112) (xy 249.578465 96.7115) + (xy 249.7778 96.512165) (xy 249.845492 96.423946) (xy 249.90192 96.382744) (xy 249.971666 96.378589) + (xy 250.032586 96.412801) (xy 250.065339 96.474518) (xy 250.059526 96.544146) (xy 250.051255 96.561433) + (xy 249.995183 96.658551) (xy 249.995175 96.658568) (xy 249.885097 96.924321) (xy 249.810646 97.202176) + (xy 249.773101 97.487361) (xy 249.7731 97.487377) (xy 249.7731 97.775022) (xy 249.773101 97.775038) + (xy 249.810646 98.060223) (xy 249.885097 98.338078) (xy 249.995175 98.603831) (xy 249.995183 98.603848) + (xy 250.139004 98.852951) (xy 250.139015 98.852967) (xy 250.314121 99.081171) (xy 250.314127 99.081178) + (xy 250.517521 99.284572) (xy 250.517528 99.284578) (xy 250.650807 99.386846) (xy 250.745741 99.459691) + (xy 250.745748 99.459695) (xy 250.994851 99.603516) (xy 250.994856 99.603518) (xy 250.994859 99.60352) + (xy 250.994863 99.603521) (xy 250.994868 99.603524) (xy 251.088475 99.642297) (xy 251.241912 99.705853) + (xy 251.249363 99.708939) (xy 251.303767 99.75278) (xy 251.325832 99.819074) (xy 251.308553 99.886773) + (xy 251.257416 99.934384) (xy 251.201911 99.9475) (xy 247.529146 99.9475) (xy 247.445531 99.982135) + (xy 242.416486 105.011181) (xy 242.355163 105.044666) (xy 242.328805 105.0475) (xy 231.396846 105.0475) + (xy 231.329807 105.027815) (xy 231.309165 105.011181) (xy 230.508964 104.21098) (xy 230.475479 104.149657) + (xy 230.480463 104.079965) (xy 230.522335 104.024032) (xy 230.587799 103.999615) (xy 230.596645 103.999299) + (xy 230.682729 103.999299) (xy 230.749768 104.018984) (xy 230.781931 104.048902) (xy 230.78843 104.057568) + (xy 230.856738 104.148652) (xy 230.856739 104.148653) (xy 230.85674 104.148654) (xy 230.990932 104.272495) + (xy 231.145325 104.369997) (xy 231.260422 104.416135) (xy 231.314814 104.437939) (xy 231.314815 104.437939) + (xy 231.314817 104.43794) (xy 231.493808 104.474079) (xy 231.493802 104.474079) (xy 231.510122 104.474359) + (xy 231.676384 104.47722) (xy 231.856512 104.447258) (xy 231.904637 104.429862) (xy 232.028236 104.385185) + (xy 232.028237 104.385183) (xy 232.02824 104.385183) (xy 232.043275 104.37642) (xy 232.049959 104.372535) + (xy 232.05025 104.372457) (xy 232.078133 104.35616) (xy 232.078251 104.356092) (xy 232.081468 104.355301) + (xy 232.140562 104.339299) (xy 233.621692 104.339299) (xy 233.621814 104.339306) (xy 233.629905 104.339305) + (xy 233.629908 104.339306) (xy 233.662042 104.339302) (xy 233.724604 104.356234) (xy 233.75243 104.372491) + (xy 233.752432 104.372491) (xy 233.75858 104.376083) (xy 233.760235 104.376908) (xy 233.761285 104.37752) + (xy 233.774378 104.38515) (xy 233.9461 104.447221) (xy 234.126221 104.477182) (xy 234.305898 104.47409) + (xy 234.308791 104.474041) (xy 234.487766 104.437905) (xy 234.487769 104.437903) (xy 234.487774 104.437903) + (xy 234.65726 104.369962) (xy 234.811646 104.272463) (xy 234.813994 104.270297) (xy 234.94583 104.14863) + (xy 234.945832 104.148628) (xy 234.959245 104.130743) (xy 235.020996 104.048402) (xy 235.076965 104.00658) + (xy 235.120198 103.998799) (xy 235.3763 103.998799) (xy 235.8763 103.998799) (xy 235.932232 103.998799) + (xy 236.016224 103.98825) (xy 236.149057 103.933229) (xy 236.215904 103.8813) (xy 236.215911 103.881294) + (xy 236.683794 103.413412) (xy 236.683799 103.413406) (xy 236.735727 103.34656) (xy 236.738942 103.3388) + (xy 235.8763 103.3388) (xy 235.8763 103.998799) (xy 235.3763 103.998799) (xy 235.3763 103.2128) + (xy 235.395985 103.145761) (xy 235.448789 103.100006) (xy 235.5003 103.0888) (xy 235.6263 103.0888) + (xy 235.6263 102.9628) (xy 235.645985 102.895761) (xy 235.698789 102.850006) (xy 235.7503 102.8388) + (xy 236.8013 102.8388) (xy 236.8013 102.722653) (xy 236.78632 102.608869) (xy 236.786318 102.608864) + (xy 236.727678 102.467293) (xy 236.727675 102.467288) (xy 236.68732 102.414696) (xy 236.662126 102.349527) + (xy 236.676164 102.281082) (xy 236.687321 102.263723) (xy 236.690618 102.259427) (xy 236.728112 102.210563) + (xy 236.786807 102.068863) (xy 236.8018 101.954977) (xy 236.801799 101.222624) (xy 236.801389 101.219511) + (xy 236.786808 101.108745) (xy 236.786807 101.108737) (xy 236.728112 100.967037) (xy 236.634744 100.845356) + (xy 236.541375 100.773712) (xy 236.513062 100.751987) (xy 236.371363 100.693293) (xy 236.371361 100.693292) + (xy 236.257478 100.6783) (xy 236.257477 100.6783) (xy 235.877645 100.6783) (xy 235.848204 100.669655) + (xy 235.818218 100.663132) (xy 235.813202 100.659377) (xy 235.810606 100.658615) (xy 235.789964 100.641981) + (xy 235.755168 100.607185) (xy 235.13012 99.982136) (xy 235.130115 99.982134) (xy 235.046503 99.9475) + (xy 233.683089 99.9475) (xy 233.61605 99.927815) (xy 233.570295 99.875011) (xy 233.560351 99.805853) + (xy 233.589376 99.742297) (xy 233.635637 99.708939) (xy 233.643088 99.705853) (xy 233.890141 99.60352) + (xy 234.139259 99.459691) (xy 234.367473 99.284577) (xy 234.570877 99.081173) (xy 234.745991 98.852959) + (xy 234.88982 98.603841) (xy 234.999902 98.33808) (xy 235.074353 98.060225) (xy 235.1119 97.775029) + (xy 235.1119 97.54655) (xy 236.922 97.54655) (xy 236.922 97.715849) (xy 236.948481 97.883047) (xy 237.000796 98.044053) + (xy 237.077652 98.194888) (xy 237.177148 98.331834) (xy 237.177152 98.331839) (xy 237.29686 98.451547) + (xy 237.296865 98.451551) (xy 237.373873 98.5075) (xy 237.433815 98.55105) (xy 237.527141 98.598602) + (xy 237.584646 98.627903) (xy 237.584648 98.627903) (xy 237.584651 98.627905) (xy 237.668844 98.655261) + (xy 237.745652 98.680218) (xy 237.912851 98.7067) (xy 237.912856 98.7067) (xy 238.082149 98.7067) + (xy 238.249347 98.680218) (xy 238.410349 98.627905) (xy 238.561185 98.55105) (xy 238.698141 98.451546) + (xy 238.817846 98.331841) (xy 238.91735 98.194885) (xy 238.994205 98.044049) (xy 239.046518 97.883047) + (xy 239.063625 97.775038) (xy 239.073 97.715849) (xy 239.073 97.54655) (xy 239.046518 97.379352) + (xy 239.001796 97.241713) (xy 238.994205 97.218351) (xy 238.994203 97.218348) (xy 238.994203 97.218346) + (xy 238.950176 97.13194) (xy 238.91735 97.067515) (xy 238.885781 97.024064) (xy 238.817851 96.930565) + (xy 238.817847 96.93056) (xy 238.698139 96.810852) (xy 238.698134 96.810848) (xy 238.561188 96.711352) + (xy 238.561187 96.711351) (xy 238.561185 96.71135) (xy 238.507331 96.68391) (xy 238.410353 96.634496) + (xy 238.249347 96.582181) (xy 238.082149 96.5557) (xy 238.082144 96.5557) (xy 237.912856 96.5557) + (xy 237.912851 96.5557) (xy 237.745652 96.582181) (xy 237.584646 96.634496) (xy 237.433811 96.711352) + (xy 237.296865 96.810848) (xy 237.29686 96.810852) (xy 237.177152 96.93056) (xy 237.177148 96.930565) + (xy 237.077652 97.067511) (xy 237.000796 97.218346) (xy 236.948481 97.379352) (xy 236.922 97.54655) + (xy 235.1119 97.54655) (xy 235.1119 97.487371) (xy 235.074353 97.202175) (xy 234.999902 96.92432) + (xy 234.88982 96.658559) (xy 234.889818 96.658556) (xy 234.889816 96.658551) (xy 234.745995 96.409448) + (xy 234.745991 96.409441) (xy 234.642069 96.274007) (xy 234.570878 96.181228) (xy 234.570872 96.181221) + (xy 234.367478 95.977827) (xy 234.367471 95.977821) (xy 234.139267 95.802715) (xy 234.139265 95.802713) + (xy 234.139259 95.802709) (xy 234.139254 95.802706) (xy 234.139251 95.802704) (xy 233.890148 95.658883) + (xy 233.890131 95.658875) (xy 233.624378 95.548797) (xy 233.346523 95.474346) (xy 233.061338 95.436801) + (xy 233.061335 95.4368) (xy 233.061329 95.4368) (xy 232.773671 95.4368) (xy 232.773665 95.4368) + (xy 232.773661 95.436801) (xy 232.488476 95.474346) (xy 232.210621 95.548797) (xy 231.944868 95.658875) + (xy 231.944851 95.658883) (xy 231.695748 95.802704) (xy 231.695732 95.802715) (xy 231.467528 95.977821) + (xy 231.467521 95.977827) (xy 231.264127 96.181221) (xy 231.19293 96.274007) (xy 231.136501 96.315209) + (xy 231.066755 96.319364) (xy 231.005835 96.285151) (xy 230.973083 96.223434) (xy 230.978896 96.153807) + (xy 230.987161 96.136531) (xy 231.040363 96.044383) (xy 231.148242 95.783939) (xy 231.221204 95.511642) + (xy 231.258 95.232151) (xy 231.258 94.950249) (xy 231.221204 94.670758) (xy 231.148242 94.398461) + (xy 231.040363 94.138017) (xy 231.040361 94.138014) (xy 231.040359 94.138009) (xy 230.899416 93.89389) + (xy 230.899412 93.893883) (xy 230.7278 93.670235) (xy 230.727798 93.670233) (xy 230.727795 93.670229) + (xy 230.52847 93.470904) (xy 230.446766 93.40821) (xy 230.304817 93.299288) (xy 230.304811 93.299284) + (xy 230.304809 93.299283) (xy 230.06069 93.15834) (xy 230.060679 93.158335) (xy 229.800243 93.050459) + (xy 229.527939 92.977495) (xy 229.248458 92.9407) (xy 229.248451 92.9407) (xy 228.966549 92.9407) + (xy 228.966541 92.9407) (xy 228.68706 92.977495) (xy 228.414756 93.050459) (xy 228.15432 93.158335) + (xy 228.154309 93.15834) (xy 227.910192 93.299281) (xy 227.910183 93.299288) (xy 227.889606 93.315076) + (xy 227.824438 93.34027) (xy 227.814122 93.3407) (xy 224.482498 93.3407) (xy 224.482481 93.340701) + (xy 224.379703 93.3512) (xy 224.3797 93.351201) (xy 224.213168 93.406385) (xy 224.213163 93.406387) + (xy 224.063842 93.498489) (xy 223.939789 93.622542) (xy 223.847687 93.771863) (xy 223.847686 93.771866) + (xy 223.792501 93.938403) (xy 223.792501 93.938404) (xy 223.7925 93.938404) (xy 223.782 94.041183) + (xy 223.782 96.141201) (xy 223.782001 96.141218) (xy 223.7925 96.243996) (xy 223.792501 96.243999) + (xy 223.802445 96.274007) (xy 223.847686 96.410534) (xy 223.939788 96.559856) (xy 224.063844 96.683912) + (xy 224.213166 96.776014) (xy 224.379703 96.831199) (xy 224.482491 96.8417) (xy 226.409618 96.841699) + (xy 226.409627 96.8417) (xy 226.838351 96.841699) (xy 226.905389 96.861383) (xy 226.951144 96.914187) + (xy 226.961088 96.983346) (xy 226.938669 97.038583) (xy 226.917651 97.067511) (xy 226.840796 97.218346) + (xy 226.788481 97.379352) (xy 226.762 97.54655) (xy 226.762 97.715849) (xy 226.788481 97.883047) + (xy 226.840796 98.044053) (xy 226.917652 98.194888) (xy 227.017148 98.331834) (xy 227.017152 98.331839) + (xy 227.13686 98.451547) (xy 227.136865 98.451551) (xy 227.213873 98.5075) (xy 227.273815 98.55105) + (xy 227.367141 98.598602) (xy 227.424646 98.627903) (xy 227.424648 98.627903) (xy 227.424651 98.627905) + (xy 227.508844 98.655261) (xy 227.585652 98.680218) (xy 227.752851 98.7067) (xy 227.752856 98.7067) + (xy 227.922149 98.7067) (xy 228.089347 98.680218) (xy 228.250349 98.627905) (xy 228.401185 98.55105) + (xy 228.538141 98.451546) (xy 228.657846 98.331841) (xy 228.75735 98.194885) (xy 228.834205 98.044049) + (xy 228.886518 97.883047) (xy 228.903625 97.775038) (xy 228.913 97.715849) (xy 228.913 97.54655) + (xy 228.887428 97.385098) (xy 228.896382 97.315805) (xy 228.941379 97.262353) (xy 229.00813 97.241713) + (xy 229.009901 97.2417) (xy 229.248444 97.2417) (xy 229.248451 97.2417) (xy 229.527942 97.204904) + (xy 229.800239 97.131942) (xy 230.060683 97.024063) (xy 230.304817 96.883112) (xy 230.528465 96.7115) + (xy 230.7278 96.512165) (xy 230.795492 96.423946) (xy 230.85192 96.382744) (xy 230.921666 96.378589) + (xy 230.982586 96.412801) (xy 231.015339 96.474518) (xy 231.009526 96.544146) (xy 231.001255 96.561433) + (xy 230.945183 96.658551) (xy 230.945175 96.658568) (xy 230.835097 96.924321) (xy 230.760646 97.202176) + (xy 230.723101 97.487361) (xy 230.7231 97.487377) (xy 230.7231 97.775022) (xy 230.723101 97.775038) + (xy 230.760646 98.060223) (xy 230.835097 98.338078) (xy 230.945175 98.603831) (xy 230.945183 98.603848) + (xy 231.089004 98.852951) (xy 231.089015 98.852967) (xy 231.264121 99.081171) (xy 231.264127 99.081178) + (xy 231.467521 99.284572) (xy 231.467528 99.284578) (xy 231.600807 99.386846) (xy 231.695741 99.459691) + (xy 231.695748 99.459695) (xy 231.944851 99.603516) (xy 231.944856 99.603518) (xy 231.944859 99.60352) + (xy 231.944863 99.603521) (xy 231.944868 99.603524) (xy 232.038475 99.642297) (xy 232.191912 99.705853) + (xy 232.199363 99.708939) (xy 232.253767 99.75278) (xy 232.275832 99.819074) (xy 232.258553 99.886773) + (xy 232.207416 99.934384) (xy 232.151911 99.9475) (xy 228.470453 99.9475) (xy 228.379947 99.9475) + (xy 228.379945 99.9475) (xy 228.379943 99.947501) (xy 228.296334 99.982131) (xy 228.296332 99.982133) + (xy 223.817286 104.461181) (xy 223.755963 104.494666) (xy 223.729605 104.4975) (xy 215.790383 104.4975) + (xy 215.723344 104.477815) (xy 215.677589 104.425011) (xy 215.667645 104.355853) (xy 215.69667 104.292297) + (xy 215.724172 104.268657) (xy 215.783135 104.23142) (xy 215.829146 104.202363) (xy 215.850784 104.182395) + (xy 215.96333 104.07853) (xy 215.963332 104.078528) (xy 215.963501 104.078303) (xy 216.038496 103.978302) + (xy 216.094465 103.93648) (xy 216.137698 103.928699) (xy 216.3938 103.928699) (xy 216.8938 103.928699) + (xy 216.949732 103.928699) (xy 217.033724 103.91815) (xy 217.166557 103.863129) (xy 217.233404 103.8112) + (xy 217.233411 103.811194) (xy 217.701294 103.343312) (xy 217.701299 103.343306) (xy 217.753227 103.27646) + (xy 217.756442 103.2687) (xy 216.8938 103.2687) (xy 216.8938 103.928699) (xy 216.3938 103.928699) + (xy 216.3938 103.1427) (xy 216.413485 103.075661) (xy 216.466289 103.029906) (xy 216.5178 103.0187) + (xy 216.6438 103.0187) (xy 216.6438 102.8927) (xy 216.663485 102.825661) (xy 216.716289 102.779906) + (xy 216.7678 102.7687) (xy 217.8188 102.7687) (xy 217.8188 102.652553) (xy 217.80382 102.538769) + (xy 217.803818 102.538764) (xy 217.745178 102.397193) (xy 217.745175 102.397188) (xy 217.70482 102.344596) + (xy 217.679626 102.279427) (xy 217.693664 102.210982) (xy 217.704821 102.193623) (xy 217.708752 102.188501) + (xy 217.745612 102.140463) (xy 217.804307 101.998763) (xy 217.8193 101.884877) (xy 217.8193 101.8702) + (xy 217.82185 101.861514) (xy 217.820562 101.852553) (xy 217.83154 101.828512) (xy 217.838985 101.803161) + (xy 217.845825 101.797233) (xy 217.849587 101.788997) (xy 217.871821 101.774707) (xy 217.891789 101.757406) + (xy 217.902303 101.755118) (xy 217.908365 101.751223) (xy 217.9433 101.7462) (xy 217.964276 101.7462) + (xy 218.031315 101.765885) (xy 218.07707 101.818689) (xy 218.078825 101.822719) (xy 218.08556 101.83898) + (xy 218.091855 101.854178) (xy 218.091859 101.854185) (xy 218.17946 101.985288) (xy 218.179463 101.985292) + (xy 218.290957 102.096786) (xy 218.290961 102.096789) (xy 218.422064 102.18439) (xy 218.422077 102.184397) + (xy 218.561493 102.242144) (xy 218.567753 102.244737) (xy 218.710921 102.273215) (xy 218.722403 102.275499) + (xy 218.722406 102.2755) (xy 218.722408 102.2755) (xy 218.880094 102.2755) (xy 218.880095 102.275499) + (xy 219.034747 102.244737) (xy 219.170514 102.188501) (xy 219.180422 102.184397) (xy 219.180422 102.184396) + (xy 219.180429 102.184394) (xy 219.311539 102.096789) (xy 219.423039 101.985289) (xy 219.510644 101.854179) + (xy 219.570987 101.708497) (xy 219.60175 101.553842) (xy 219.60175 101.396158) (xy 219.60175 101.396155) + (xy 219.601749 101.396153) (xy 219.59638 101.369162) (xy 219.570987 101.241503) (xy 219.570183 101.239562) + (xy 219.510647 101.095827) (xy 219.51064 101.095814) (xy 219.423039 100.964711) (xy 219.423036 100.964707) + (xy 219.311542 100.853213) (xy 219.311538 100.85321) (xy 219.180435 100.765609) (xy 219.180422 100.765602) + (xy 219.034751 100.705264) (xy 219.034739 100.705261) (xy 218.880095 100.6745) (xy 218.880092 100.6745) + (xy 218.722408 100.6745) (xy 218.722405 100.6745) (xy 218.56776 100.705261) (xy 218.567748 100.705264) + (xy 218.422077 100.765602) (xy 218.422064 100.765609) (xy 218.290961 100.85321) (xy 218.290957 100.853213) + (xy 218.179463 100.964707) (xy 218.17946 100.964711) (xy 218.091859 101.095814) (xy 218.091854 101.095824) + (xy 218.056465 101.181261) (xy 218.012624 101.235664) (xy 217.946329 101.257729) (xy 217.87863 101.24045) + (xy 217.83102 101.189312) (xy 217.818966 101.149998) (xy 217.804307 101.038637) (xy 217.745612 100.896937) + (xy 217.652244 100.775256) (xy 217.550645 100.697297) (xy 217.530562 100.681887) (xy 217.388863 100.623193) + (xy 217.388861 100.623192) (xy 217.274978 100.6082) (xy 217.274977 100.6082) (xy 216.137373 100.6082) + (xy 216.070334 100.588515) (xy 216.038172 100.558598) (xy 215.963361 100.458844) (xy 215.829169 100.335004) + (xy 215.829166 100.335002) (xy 215.829165 100.335001) (xy 215.829162 100.334999) (xy 215.674777 100.237501) + (xy 215.505287 100.169558) (xy 215.505277 100.169556) (xy 215.326292 100.133418) (xy 215.326299 100.133418) + (xy 215.154594 100.130465) (xy 215.143718 100.130278) (xy 215.143717 100.130278) (xy 215.143714 100.130278) + (xy 214.963597 100.160238) (xy 214.963584 100.160241) (xy 214.791863 100.222313) (xy 214.777348 100.23077) + (xy 214.777263 100.230819) (xy 214.770176 100.23494) (xy 214.76993 100.235008) (xy 214.742138 100.251244) + (xy 214.74189 100.251389) (xy 214.739163 100.252059) (xy 214.679546 100.268196) (xy 214.639201 100.268193) + (xy 214.639097 100.2682) (xy 213.198396 100.2682) (xy 213.190214 100.268198) (xy 213.190192 100.268193) + (xy 213.160265 100.268195) (xy 213.158028 100.268195) (xy 213.157746 100.268112) (xy 213.095493 100.251262) + (xy 213.067671 100.235008) (xy 213.061605 100.231464) (xy 213.059907 100.230617) (xy 213.052557 100.226334) + (xy 213.045721 100.22235) (xy 212.873997 100.160278) (xy 212.873991 100.160277) (xy 212.693881 100.130319) + (xy 212.693878 100.130319) (xy 212.685339 100.130465) (xy 212.511307 100.133459) (xy 212.332334 100.169594) + (xy 212.332323 100.169597) (xy 212.162842 100.237537) (xy 212.162841 100.237537) (xy 212.008461 100.335032) + (xy 212.008458 100.335034) (xy 211.906344 100.429271) (xy 211.874269 100.458872) (xy 211.799962 100.557956) + (xy 211.799481 100.558597) (xy 211.743511 100.600419) (xy 211.700278 100.6082) (xy 210.562621 100.6082) + (xy 210.448745 100.623191) (xy 210.448737 100.623193) (xy 210.307037 100.681887) (xy 210.185356 100.775256) + (xy 210.091987 100.896937) (xy 210.033293 101.038636) (xy 210.033292 101.038638) (xy 210.0183 101.152522) + (xy 200.41342 101.152522) (xy 200.410644 101.145821) (xy 200.410642 101.145818) (xy 200.41064 101.145814) + (xy 200.323039 101.014711) (xy 200.323036 101.014707) (xy 200.211542 100.903213) (xy 200.211538 100.90321) + (xy 200.080435 100.815609) (xy 200.080422 100.815602) (xy 199.934751 100.755264) (xy 199.934739 100.755261) + (xy 199.780095 100.7245) (xy 199.780092 100.7245) (xy 199.622408 100.7245) (xy 199.622405 100.7245) + (xy 199.46776 100.755261) (xy 199.467748 100.755264) (xy 199.322077 100.815602) (xy 199.322064 100.815609) + (xy 199.190961 100.90321) (xy 199.190957 100.903213) (xy 199.079463 101.014707) (xy 199.07946 101.014711) + (xy 199.016373 101.109127) (xy 198.96276 101.153932) (xy 198.893435 101.162639) (xy 198.830408 101.132484) + (xy 198.793689 101.073041) (xy 198.790331 101.056417) (xy 198.789307 101.048639) (xy 198.789307 101.048638) + (xy 198.789307 101.048637) (xy 198.730612 100.906937) (xy 198.637244 100.785256) (xy 198.536823 100.708201) + (xy 198.515562 100.691887) (xy 198.373863 100.633193) (xy 198.373861 100.633192) (xy 198.259978 100.6182) + (xy 198.259977 100.6182) (xy 197.122373 100.6182) (xy 197.055334 100.598515) (xy 197.023172 100.568598) + (xy 196.948361 100.468844) (xy 196.814169 100.345004) (xy 196.814166 100.345002) (xy 196.814165 100.345001) + (xy 196.814162 100.344999) (xy 196.659777 100.247501) (xy 196.490287 100.179558) (xy 196.490277 100.179556) + (xy 196.311292 100.143418) (xy 196.311299 100.143418) (xy 196.139594 100.140465) (xy 196.128718 100.140278) + (xy 196.128717 100.140278) (xy 196.128714 100.140278) (xy 195.948597 100.170238) (xy 195.948584 100.170241) + (xy 195.776863 100.232313) (xy 195.762348 100.24077) (xy 195.762263 100.240819) (xy 195.755176 100.24494) + (xy 195.75493 100.245008) (xy 195.727138 100.261244) (xy 195.72689 100.261389) (xy 195.724163 100.262059) + (xy 195.664546 100.278196) (xy 195.624201 100.278193) (xy 195.624097 100.2782) (xy 194.183396 100.2782) + (xy 194.175214 100.278198) (xy 194.175192 100.278193) (xy 194.145265 100.278195) (xy 194.143028 100.278195) + (xy 194.142746 100.278112) (xy 194.080493 100.261262) (xy 194.052671 100.245008) (xy 194.046605 100.241464) + (xy 194.044907 100.240617) (xy 194.035077 100.234889) (xy 194.030721 100.23235) (xy 193.858997 100.170278) + (xy 193.858991 100.170277) (xy 193.678881 100.140319) (xy 193.678878 100.140319) (xy 193.670339 100.140465) + (xy 193.496307 100.143459) (xy 193.317334 100.179594) (xy 193.317323 100.179597) (xy 193.147842 100.247537) + (xy 193.147841 100.247537) (xy 192.993461 100.345032) (xy 192.993458 100.345034) (xy 192.859997 100.4682) + (xy 192.859269 100.468872) (xy 192.791165 100.559685) (xy 192.784481 100.568597) (xy 192.728511 100.610419) + (xy 192.685278 100.6182) (xy 191.547621 100.6182) (xy 191.433745 100.633191) (xy 191.433737 100.633193) + (xy 191.292037 100.691887) (xy 191.170356 100.785256) (xy 191.076987 100.906937) (xy 191.018293 101.048636) + (xy 191.018292 101.048638) (xy 191.0033 101.162522) (xy 179.834299 101.162522) (xy 179.834299 101.012524) + (xy 179.832727 101.000584) (xy 179.819308 100.898645) (xy 179.819307 100.898637) (xy 179.760612 100.756937) + (xy 179.667244 100.635256) (xy 179.566661 100.558077) (xy 179.545562 100.541887) (xy 179.403863 100.483193) + (xy 179.403861 100.483192) (xy 179.289978 100.4682) (xy 179.289977 100.4682) (xy 178.152373 100.4682) + (xy 178.085334 100.448515) (xy 178.053172 100.418598) (xy 177.978361 100.318844) (xy 177.844169 100.195004) + (xy 177.844166 100.195002) (xy 177.844165 100.195001) (xy 177.844162 100.194999) (xy 177.689777 100.097501) + (xy 177.520287 100.029558) (xy 177.520277 100.029556) (xy 177.341292 99.993418) (xy 177.341299 99.993418) + (xy 177.169594 99.990465) (xy 177.158718 99.990278) (xy 177.158717 99.990278) (xy 177.158714 99.990278) + (xy 176.978597 100.020238) (xy 176.978584 100.020241) (xy 176.806863 100.082313) (xy 176.792348 100.09077) + (xy 176.792263 100.090819) (xy 176.785176 100.09494) (xy 176.78493 100.095008) (xy 176.757138 100.111244) + (xy 176.75689 100.111389) (xy 176.754163 100.112059) (xy 176.694546 100.128196) (xy 176.654201 100.128193) + (xy 176.654097 100.1282) (xy 175.213396 100.1282) (xy 175.205214 100.128198) (xy 175.205192 100.128193) + (xy 175.175265 100.128195) (xy 175.173028 100.128195) (xy 175.172746 100.128112) (xy 175.110493 100.111262) + (xy 175.082671 100.095008) (xy 175.076605 100.091464) (xy 175.074907 100.090617) (xy 175.067557 100.086334) + (xy 175.060721 100.08235) (xy 174.888997 100.020278) (xy 174.888991 100.020277) (xy 174.708881 99.990319) + (xy 174.708878 99.990319) (xy 174.700339 99.990465) (xy 174.526307 99.993459) (xy 174.347334 100.029594) + (xy 174.347323 100.029597) (xy 174.177842 100.097537) (xy 174.177841 100.097537) (xy 174.023461 100.195032) + (xy 174.023458 100.195034) (xy 173.890927 100.317342) (xy 173.889269 100.318872) (xy 173.817176 100.415004) + (xy 173.814481 100.418597) (xy 173.758511 100.460419) (xy 173.715278 100.4682) (xy 172.577621 100.4682) + (xy 172.463745 100.483191) (xy 172.463737 100.483193) (xy 172.322037 100.541887) (xy 172.200356 100.635256) + (xy 172.106987 100.756937) (xy 172.048293 100.898636) (xy 172.048292 100.898638) (xy 172.0333 101.012522) + (xy 172.0333 101.744878) (xy 172.048291 101.858754) (xy 172.048293 101.858763) (xy 172.104915 101.99546) + (xy 172.112384 102.06493) (xy 172.081109 102.127409) (xy 172.02102 102.163061) (xy 171.951195 102.160567) + (xy 171.902673 102.130594) (xy 171.816292 102.044213) (xy 171.816288 102.04421) (xy 171.685185 101.956609) + (xy 171.685172 101.956602) (xy 171.539501 101.896264) (xy 171.539489 101.896261) (xy 171.384845 101.8655) + (xy 171.384842 101.8655) (xy 171.227158 101.8655) (xy 171.227155 101.8655) (xy 171.07251 101.896261) + (xy 171.072498 101.896264) (xy 170.926827 101.956602) (xy 170.926814 101.956609) (xy 170.795711 102.04421) + (xy 170.795707 102.044213) (xy 170.684213 102.155707) (xy 170.68421 102.155711) (xy 170.596609 102.286814) + (xy 170.596602 102.286827) (xy 170.536264 102.432498) (xy 170.536261 102.43251) (xy 170.5055 102.587153) + (xy 160.675724 102.587153) (xy 160.630178 102.477193) (xy 160.630175 102.477188) (xy 160.58982 102.424596) + (xy 160.564626 102.359427) (xy 160.578664 102.290982) (xy 160.589821 102.273623) (xy 160.593399 102.268961) + (xy 160.630612 102.220463) (xy 160.689307 102.078763) (xy 160.7043 101.964877) (xy 160.704299 101.232524) + (xy 160.704192 101.231713) (xy 160.691085 101.132144) (xy 160.689307 101.118637) (xy 160.630612 100.976937) + (xy 160.537244 100.855256) (xy 160.432985 100.775256) (xy 160.415562 100.761887) (xy 160.273863 100.703193) + (xy 160.273861 100.703192) (xy 160.159978 100.6882) (xy 160.159977 100.6882) (xy 159.687546 100.6882) + (xy 159.620507 100.668515) (xy 159.599865 100.651881) (xy 158.880119 99.932136) (xy 158.880118 99.932135) + (xy 158.796503 99.8975) (xy 157.6038 99.8975) (xy 157.536761 99.877815) (xy 157.491006 99.825011) + (xy 157.481062 99.755853) (xy 157.510087 99.692297) (xy 157.556348 99.658939) (xy 157.690132 99.603524) + (xy 157.690135 99.603522) (xy 157.690141 99.60352) (xy 157.939259 99.459691) (xy 158.167473 99.284577) + (xy 158.370877 99.081173) (xy 158.545991 98.852959) (xy 158.68982 98.603841) (xy 158.799902 98.33808) + (xy 158.874353 98.060225) (xy 158.9119 97.775029) (xy 158.9119 97.54655) (xy 160.722 97.54655) (xy 160.722 97.715849) + (xy 160.748481 97.883047) (xy 160.800796 98.044053) (xy 160.877652 98.194888) (xy 160.977148 98.331834) + (xy 160.977152 98.331839) (xy 161.09686 98.451547) (xy 161.096865 98.451551) (xy 161.173873 98.5075) + (xy 161.233815 98.55105) (xy 161.327141 98.598602) (xy 161.384646 98.627903) (xy 161.384648 98.627903) + (xy 161.384651 98.627905) (xy 161.468844 98.655261) (xy 161.545652 98.680218) (xy 161.712851 98.7067) + (xy 161.712856 98.7067) (xy 161.882149 98.7067) (xy 162.049347 98.680218) (xy 162.210349 98.627905) + (xy 162.361185 98.55105) (xy 162.498141 98.451546) (xy 162.617846 98.331841) (xy 162.71735 98.194885) + (xy 162.794205 98.044049) (xy 162.846518 97.883047) (xy 162.863625 97.775038) (xy 162.873 97.715849) + (xy 162.873 97.54655) (xy 162.846518 97.379352) (xy 162.801796 97.241713) (xy 162.794205 97.218351) + (xy 162.794203 97.218348) (xy 162.794203 97.218346) (xy 162.750176 97.13194) (xy 162.71735 97.067515) + (xy 162.685781 97.024064) (xy 162.617851 96.930565) (xy 162.617847 96.93056) (xy 162.498139 96.810852) + (xy 162.498134 96.810848) (xy 162.361188 96.711352) (xy 162.361187 96.711351) (xy 162.361185 96.71135) + (xy 162.307331 96.68391) (xy 162.210353 96.634496) (xy 162.049347 96.582181) (xy 161.882149 96.5557) + (xy 161.882144 96.5557) (xy 161.712856 96.5557) (xy 161.712851 96.5557) (xy 161.545652 96.582181) + (xy 161.384646 96.634496) (xy 161.233811 96.711352) (xy 161.096865 96.810848) (xy 161.09686 96.810852) + (xy 160.977152 96.93056) (xy 160.977148 96.930565) (xy 160.877652 97.067511) (xy 160.800796 97.218346) + (xy 160.748481 97.379352) (xy 160.722 97.54655) (xy 158.9119 97.54655) (xy 158.9119 97.487371) (xy 158.874353 97.202175) + (xy 158.799902 96.92432) (xy 158.68982 96.658559) (xy 158.689818 96.658556) (xy 158.689816 96.658551) + (xy 158.545995 96.409448) (xy 158.545991 96.409441) (xy 158.442069 96.274007) (xy 158.370878 96.181228) + (xy 158.370872 96.181221) (xy 158.167478 95.977827) (xy 158.167471 95.977821) (xy 157.939267 95.802715) + (xy 157.939265 95.802713) (xy 157.939259 95.802709) (xy 157.939254 95.802706) (xy 157.939251 95.802704) + (xy 157.690148 95.658883) (xy 157.690131 95.658875) (xy 157.424378 95.548797) (xy 157.146523 95.474346) + (xy 156.861338 95.436801) (xy 156.861335 95.4368) (xy 156.861329 95.4368) (xy 156.573671 95.4368) + (xy 156.573665 95.4368) (xy 156.573661 95.436801) (xy 156.288476 95.474346) (xy 156.010621 95.548797) + (xy 155.744868 95.658875) (xy 155.744851 95.658883) (xy 155.495748 95.802704) (xy 155.495732 95.802715) + (xy 155.267528 95.977821) (xy 155.267521 95.977827) (xy 155.064127 96.181221) (xy 154.99293 96.274007) + (xy 154.936501 96.315209) (xy 154.866755 96.319364) (xy 154.805835 96.285151) (xy 154.773083 96.223434) + (xy 154.778896 96.153807) (xy 154.787161 96.136531) (xy 154.840363 96.044383) (xy 154.948242 95.783939) + (xy 155.021204 95.511642) (xy 155.058 95.232151) (xy 155.058 94.950249) (xy 155.021204 94.670758) + (xy 154.948242 94.398461) (xy 154.840363 94.138017) (xy 154.840361 94.138014) (xy 154.840359 94.138009) + (xy 154.699416 93.89389) (xy 154.699412 93.893883) (xy 154.5278 93.670235) (xy 154.527798 93.670233) + (xy 154.527795 93.670229) (xy 154.32847 93.470904) (xy 154.246766 93.40821) (xy 154.104817 93.299288) + (xy 154.104811 93.299284) (xy 154.104809 93.299283) (xy 153.86069 93.15834) (xy 153.860679 93.158335) + (xy 153.600243 93.050459) (xy 153.327939 92.977495) (xy 153.048458 92.9407) (xy 153.048451 92.9407) + (xy 152.766549 92.9407) (xy 152.766541 92.9407) (xy 152.48706 92.977495) (xy 152.214756 93.050459) + (xy 151.95432 93.158335) (xy 151.954309 93.15834) (xy 151.710192 93.299281) (xy 151.710183 93.299288) + (xy 151.689606 93.315076) (xy 151.624438 93.34027) (xy 151.614122 93.3407) (xy 148.282498 93.3407) + (xy 148.282481 93.340701) (xy 148.179703 93.3512) (xy 148.1797 93.351201) (xy 148.013168 93.406385) + (xy 148.013163 93.406387) (xy 147.863842 93.498489) (xy 147.739789 93.622542) (xy 147.647687 93.771863) + (xy 147.647686 93.771866) (xy 147.592501 93.938403) (xy 147.592501 93.938404) (xy 147.5925 93.938404) + (xy 147.582 94.041183) (xy 147.582 96.141201) (xy 147.582001 96.141218) (xy 147.5925 96.243996) + (xy 147.592501 96.243999) (xy 147.602445 96.274007) (xy 147.647686 96.410534) (xy 147.739788 96.559856) + (xy 147.863844 96.683912) (xy 148.013166 96.776014) (xy 148.179703 96.831199) (xy 148.282491 96.8417) + (xy 150.209618 96.841699) (xy 150.209627 96.8417) (xy 150.638351 96.841699) (xy 150.705389 96.861383) + (xy 150.751144 96.914187) (xy 150.761088 96.983346) (xy 150.738669 97.038583) (xy 150.717651 97.067511) + (xy 150.640796 97.218346) (xy 150.588481 97.379352) (xy 150.562 97.54655) (xy 150.562 97.715849) + (xy 150.588481 97.883047) (xy 150.640796 98.044053) (xy 150.717652 98.194888) (xy 150.817148 98.331834) + (xy 150.817152 98.331839) (xy 150.93686 98.451547) (xy 150.936865 98.451551) (xy 151.013873 98.5075) + (xy 151.073815 98.55105) (xy 151.167141 98.598602) (xy 151.224646 98.627903) (xy 151.224648 98.627903) + (xy 151.224651 98.627905) (xy 151.308844 98.655261) (xy 151.385652 98.680218) (xy 151.552851 98.7067) + (xy 151.552856 98.7067) (xy 151.722149 98.7067) (xy 151.889347 98.680218) (xy 152.050349 98.627905) + (xy 152.201185 98.55105) (xy 152.338141 98.451546) (xy 152.457846 98.331841) (xy 152.55735 98.194885) + (xy 152.634205 98.044049) (xy 152.686518 97.883047) (xy 152.703625 97.775038) (xy 152.713 97.715849) + (xy 152.713 97.54655) (xy 152.687428 97.385098) (xy 152.696382 97.315805) (xy 152.741379 97.262353) + (xy 152.80813 97.241713) (xy 152.809901 97.2417) (xy 153.048444 97.2417) (xy 153.048451 97.2417) + (xy 153.327942 97.204904) (xy 153.600239 97.131942) (xy 153.860683 97.024063) (xy 154.104817 96.883112) + (xy 154.328465 96.7115) (xy 154.5278 96.512165) (xy 154.595492 96.423946) (xy 154.65192 96.382744) + (xy 154.721666 96.378589) (xy 154.782586 96.412801) (xy 154.815339 96.474518) (xy 154.809526 96.544146) + (xy 154.801255 96.561433) (xy 154.745183 96.658551) (xy 154.745175 96.658568) (xy 154.635097 96.924321) + (xy 154.560646 97.202176) (xy 154.523101 97.487361) (xy 154.5231 97.487377) (xy 154.5231 97.775022) + (xy 154.523101 97.775038) (xy 154.560646 98.060223) (xy 154.635097 98.338078) (xy 154.745175 98.603831) + (xy 154.745183 98.603848) (xy 154.889004 98.852951) (xy 154.889015 98.852967) (xy 155.064121 99.081171) + (xy 155.064127 99.081178) (xy 155.267521 99.284572) (xy 155.267528 99.284578) (xy 155.400807 99.386846) + (xy 155.495741 99.459691) (xy 155.495748 99.459695) (xy 155.744851 99.603516) (xy 155.744867 99.603524) + (xy 155.878652 99.658939) (xy 155.933056 99.70278) (xy 155.955121 99.769074) (xy 155.937842 99.836773) + (xy 155.886705 99.884384) (xy 155.8312 99.8975) (xy 153.304246 99.8975) (xy 153.220629 99.932136) + (xy 148.491586 104.661181) (xy 148.430263 104.694666) (xy 148.403905 104.6975) (xy 139.4247 104.6975) + (xy 139.357661 104.677815) (xy 139.311906 104.625011) (xy 139.301962 104.555853) (xy 139.330987 104.492297) + (xy 139.378562 104.458403) (xy 139.405004 104.447803) (xy 139.44976 104.429862) (xy 139.604146 104.332363) + (xy 139.609453 104.327466) (xy 139.73833 104.20853) (xy 139.738332 104.208528) (xy 139.738986 104.207656) + (xy 139.813496 104.108302) (xy 139.869465 104.06648) (xy 139.912698 104.058699) (xy 140.1688 104.058699) + (xy 140.6688 104.058699) (xy 140.724732 104.058699) (xy 140.808724 104.04815) (xy 140.941557 103.993129) + (xy 141.008404 103.9412) (xy 141.008411 103.941194) (xy 141.476294 103.473312) (xy 141.476299 103.473306) + (xy 141.528227 103.40646) (xy 141.531442 103.3987) (xy 140.6688 103.3987) (xy 140.6688 104.058699) + (xy 140.1688 104.058699) (xy 140.1688 103.2727) (xy 140.188485 103.205661) (xy 140.241289 103.159906) + (xy 140.2928 103.1487) (xy 140.4188 103.1487) (xy 140.4188 103.0227) (xy 140.438485 102.955661) + (xy 140.491289 102.909906) (xy 140.5428 102.8987) (xy 141.5938 102.8987) (xy 141.5938 102.782553) + (xy 141.57882 102.668769) (xy 141.578818 102.668764) (xy 141.520178 102.527193) (xy 141.520175 102.527188) + (xy 141.47982 102.474596) (xy 141.454626 102.409427) (xy 141.468664 102.340982) (xy 141.479821 102.323623) + (xy 141.489361 102.311191) (xy 141.520612 102.270463) (xy 141.579307 102.128763) (xy 141.5943 102.014877) + (xy 141.594299 101.282524) (xy 141.594139 101.281311) (xy 141.580269 101.175947) (xy 141.579307 101.168637) + (xy 141.520612 101.026937) (xy 141.427244 100.905256) (xy 141.333875 100.833612) (xy 141.305562 100.811887) + (xy 141.163863 100.753193) (xy 141.163861 100.753192) (xy 141.049978 100.7382) (xy 141.049977 100.7382) + (xy 140.746097 100.7382) (xy 140.679058 100.718515) (xy 140.645833 100.687159) (xy 140.637168 100.675251) + (xy 140.611665 100.613682) (xy 140.547668 100.549685) (xy 140.212872 100.214889) (xy 139.88012 99.882136) + (xy 139.880115 99.882134) (xy 139.796503 99.8475) (xy 138.674512 99.8475) (xy 138.607473 99.827815) + (xy 138.561718 99.775011) (xy 138.551774 99.705853) (xy 138.580799 99.642297) (xy 138.62706 99.608939) + (xy 138.640131 99.603524) (xy 138.640141 99.60352) (xy 138.889259 99.459691) (xy 139.117473 99.284577) + (xy 139.320877 99.081173) (xy 139.495991 98.852959) (xy 139.63982 98.603841) (xy 139.749902 98.33808) + (xy 139.824353 98.060225) (xy 139.8619 97.775029) (xy 139.8619 97.54655) (xy 141.672 97.54655) (xy 141.672 97.715849) + (xy 141.698481 97.883047) (xy 141.750796 98.044053) (xy 141.827652 98.194888) (xy 141.927148 98.331834) + (xy 141.927152 98.331839) (xy 142.04686 98.451547) (xy 142.046865 98.451551) (xy 142.123873 98.5075) + (xy 142.183815 98.55105) (xy 142.277141 98.598602) (xy 142.334646 98.627903) (xy 142.334648 98.627903) + (xy 142.334651 98.627905) (xy 142.418844 98.655261) (xy 142.495652 98.680218) (xy 142.662851 98.7067) + (xy 142.662856 98.7067) (xy 142.832149 98.7067) (xy 142.999347 98.680218) (xy 143.160349 98.627905) + (xy 143.311185 98.55105) (xy 143.448141 98.451546) (xy 143.567846 98.331841) (xy 143.66735 98.194885) + (xy 143.744205 98.044049) (xy 143.796518 97.883047) (xy 143.813625 97.775038) (xy 143.823 97.715849) + (xy 143.823 97.54655) (xy 143.796518 97.379352) (xy 143.751796 97.241713) (xy 143.744205 97.218351) + (xy 143.744203 97.218348) (xy 143.744203 97.218346) (xy 143.700176 97.13194) (xy 143.66735 97.067515) + (xy 143.635781 97.024064) (xy 143.567851 96.930565) (xy 143.567847 96.93056) (xy 143.448139 96.810852) + (xy 143.448134 96.810848) (xy 143.311188 96.711352) (xy 143.311187 96.711351) (xy 143.311185 96.71135) + (xy 143.257331 96.68391) (xy 143.160353 96.634496) (xy 142.999347 96.582181) (xy 142.832149 96.5557) + (xy 142.832144 96.5557) (xy 142.662856 96.5557) (xy 142.662851 96.5557) (xy 142.495652 96.582181) + (xy 142.334646 96.634496) (xy 142.183811 96.711352) (xy 142.046865 96.810848) (xy 142.04686 96.810852) + (xy 141.927152 96.93056) (xy 141.927148 96.930565) (xy 141.827652 97.067511) (xy 141.750796 97.218346) + (xy 141.698481 97.379352) (xy 141.672 97.54655) (xy 139.8619 97.54655) (xy 139.8619 97.487371) (xy 139.824353 97.202175) + (xy 139.749902 96.92432) (xy 139.63982 96.658559) (xy 139.639818 96.658556) (xy 139.639816 96.658551) + (xy 139.495995 96.409448) (xy 139.495991 96.409441) (xy 139.392069 96.274007) (xy 139.320878 96.181228) + (xy 139.320872 96.181221) (xy 139.117478 95.977827) (xy 139.117471 95.977821) (xy 138.889267 95.802715) + (xy 138.889265 95.802713) (xy 138.889259 95.802709) (xy 138.889254 95.802706) (xy 138.889251 95.802704) + (xy 138.640148 95.658883) (xy 138.640131 95.658875) (xy 138.374378 95.548797) (xy 138.096523 95.474346) + (xy 137.811338 95.436801) (xy 137.811335 95.4368) (xy 137.811329 95.4368) (xy 137.523671 95.4368) + (xy 137.523665 95.4368) (xy 137.523661 95.436801) (xy 137.238476 95.474346) (xy 136.960621 95.548797) + (xy 136.694868 95.658875) (xy 136.694851 95.658883) (xy 136.445748 95.802704) (xy 136.445732 95.802715) + (xy 136.217528 95.977821) (xy 136.217521 95.977827) (xy 136.014127 96.181221) (xy 135.94293 96.274007) + (xy 135.886501 96.315209) (xy 135.816755 96.319364) (xy 135.755835 96.285151) (xy 135.723083 96.223434) + (xy 135.728896 96.153807) (xy 135.737161 96.136531) (xy 135.790363 96.044383) (xy 135.898242 95.783939) + (xy 135.971204 95.511642) (xy 136.008 95.232151) (xy 136.008 94.950249) (xy 135.971204 94.670758) + (xy 135.898242 94.398461) (xy 135.790363 94.138017) (xy 135.790361 94.138014) (xy 135.790359 94.138009) + (xy 135.649416 93.89389) (xy 135.649412 93.893883) (xy 135.4778 93.670235) (xy 135.477798 93.670233) + (xy 135.477795 93.670229) (xy 135.27847 93.470904) (xy 135.196766 93.40821) (xy 135.054817 93.299288) + (xy 135.054811 93.299284) (xy 135.054809 93.299283) (xy 134.81069 93.15834) (xy 134.810679 93.158335) + (xy 134.550243 93.050459) (xy 134.277939 92.977495) (xy 133.998458 92.9407) (xy 133.998451 92.9407) + (xy 133.716549 92.9407) (xy 133.716541 92.9407) (xy 133.43706 92.977495) (xy 133.164756 93.050459) + (xy 132.90432 93.158335) (xy 132.904309 93.15834) (xy 132.660192 93.299281) (xy 132.660183 93.299288) + (xy 132.639606 93.315076) (xy 132.574438 93.34027) (xy 132.564122 93.3407) (xy 129.232498 93.3407) + (xy 129.232481 93.340701) (xy 129.129703 93.3512) (xy 129.1297 93.351201) (xy 128.963168 93.406385) + (xy 128.963163 93.406387) (xy 128.813842 93.498489) (xy 128.689789 93.622542) (xy 128.597687 93.771863) + (xy 128.597686 93.771866) (xy 128.542501 93.938403) (xy 128.542501 93.938404) (xy 128.5425 93.938404) + (xy 128.532 94.041183) (xy 128.532 96.141201) (xy 128.532001 96.141218) (xy 128.5425 96.243996) + (xy 128.542501 96.243999) (xy 128.552445 96.274007) (xy 128.597686 96.410534) (xy 128.689788 96.559856) + (xy 128.813844 96.683912) (xy 128.963166 96.776014) (xy 129.129703 96.831199) (xy 129.232491 96.8417) + (xy 131.159618 96.841699) (xy 131.159627 96.8417) (xy 131.588351 96.841699) (xy 131.655389 96.861383) + (xy 131.701144 96.914187) (xy 131.711088 96.983346) (xy 131.688669 97.038583) (xy 131.667651 97.067511) + (xy 131.590796 97.218346) (xy 131.538481 97.379352) (xy 131.512 97.54655) (xy 131.512 97.715849) + (xy 131.538481 97.883047) (xy 131.590796 98.044053) (xy 131.667652 98.194888) (xy 131.767148 98.331834) + (xy 131.767152 98.331839) (xy 131.88686 98.451547) (xy 131.886865 98.451551) (xy 131.963873 98.5075) + (xy 132.023815 98.55105) (xy 132.117141 98.598602) (xy 132.174646 98.627903) (xy 132.174648 98.627903) + (xy 132.174651 98.627905) (xy 132.258844 98.655261) (xy 132.335652 98.680218) (xy 132.502851 98.7067) + (xy 132.502856 98.7067) (xy 132.672149 98.7067) (xy 132.839347 98.680218) (xy 133.000349 98.627905) + (xy 133.151185 98.55105) (xy 133.288141 98.451546) (xy 133.407846 98.331841) (xy 133.50735 98.194885) + (xy 133.584205 98.044049) (xy 133.636518 97.883047) (xy 133.653625 97.775038) (xy 133.663 97.715849) + (xy 133.663 97.54655) (xy 133.637428 97.385098) (xy 133.646382 97.315805) (xy 133.691379 97.262353) + (xy 133.75813 97.241713) (xy 133.759901 97.2417) (xy 133.998444 97.2417) (xy 133.998451 97.2417) + (xy 134.277942 97.204904) (xy 134.550239 97.131942) (xy 134.810683 97.024063) (xy 135.054817 96.883112) + (xy 135.278465 96.7115) (xy 135.4778 96.512165) (xy 135.545492 96.423946) (xy 135.60192 96.382744) + (xy 135.671666 96.378589) (xy 135.732586 96.412801) (xy 135.765339 96.474518) (xy 135.759526 96.544146) + (xy 135.751255 96.561433) (xy 135.695183 96.658551) (xy 135.695175 96.658568) (xy 135.585097 96.924321) + (xy 135.510646 97.202176) (xy 135.473101 97.487361) (xy 135.4731 97.487377) (xy 135.4731 97.775022) + (xy 135.473101 97.775038) (xy 135.510646 98.060223) (xy 135.585097 98.338078) (xy 135.695175 98.603831) + (xy 135.695183 98.603848) (xy 135.839004 98.852951) (xy 135.839015 98.852967) (xy 136.014121 99.081171) + (xy 136.014127 99.081178) (xy 136.217521 99.284572) (xy 136.217528 99.284578) (xy 136.350807 99.386846) + (xy 136.445741 99.459691) (xy 136.445748 99.459695) (xy 136.694851 99.603516) (xy 136.694856 99.603518) + (xy 136.694859 99.60352) (xy 136.694863 99.603521) (xy 136.694868 99.603524) (xy 136.70794 99.608939) + (xy 136.762344 99.65278) (xy 136.784409 99.719074) (xy 136.76713 99.786773) (xy 136.715993 99.834384) + (xy 136.660488 99.8475) (xy 132.614253 99.8475) (xy 132.523747 99.8475) (xy 132.523745 99.8475) + (xy 132.523743 99.847501) (xy 132.440134 99.882131) (xy 132.440132 99.882133) (xy 127.627977 104.69429) + (xy 127.566654 104.727775) (xy 127.540296 104.730609) (xy 120.209337 104.730609) (xy 120.142298 104.710924) + (xy 120.096543 104.65812) (xy 120.086599 104.588962) (xy 120.115624 104.525406) (xy 120.174402 104.487632) + (xy 120.184796 104.485062) (xy 120.220991 104.477753) (xy 120.270274 104.467803) (xy 120.43976 104.399862) + (xy 120.594146 104.302363) (xy 120.596819 104.299897) (xy 120.72833 104.17853) (xy 120.728332 104.178528) + (xy 120.730916 104.175083) (xy 120.803496 104.078302) (xy 120.859465 104.03648) (xy 120.902698 104.028699) + (xy 121.1588 104.028699) (xy 121.6588 104.028699) (xy 121.714732 104.028699) (xy 121.798724 104.01815) + (xy 121.931557 103.963129) (xy 121.998404 103.9112) (xy 121.998411 103.911194) (xy 122.466294 103.443312) + (xy 122.466299 103.443306) (xy 122.518227 103.37646) (xy 122.521442 103.3687) (xy 121.6588 103.3687) + (xy 121.6588 104.028699) (xy 121.1588 104.028699) (xy 121.1588 103.2427) (xy 121.178485 103.175661) + (xy 121.231289 103.129906) (xy 121.2828 103.1187) (xy 121.4088 103.1187) (xy 121.4088 102.9927) + (xy 121.428485 102.925661) (xy 121.481289 102.879906) (xy 121.5328 102.8687) (xy 122.5838 102.8687) + (xy 122.5838 102.752553) (xy 122.56882 102.638769) (xy 122.568818 102.638764) (xy 122.510178 102.497193) + (xy 122.510175 102.497188) (xy 122.46982 102.444596) (xy 122.444626 102.379427) (xy 122.458664 102.310982) + (xy 122.469821 102.293623) (xy 122.473547 102.288768) (xy 122.510612 102.240463) (xy 122.569307 102.098763) + (xy 122.5843 101.984877) (xy 122.584299 101.252524) (xy 122.584192 101.251713) (xy 122.571085 101.152144) + (xy 122.569307 101.138637) (xy 122.510612 100.996937) (xy 122.417244 100.875256) (xy 122.312985 100.795256) + (xy 122.295562 100.781887) (xy 122.153863 100.723193) (xy 122.153861 100.723192) (xy 122.039978 100.7082) + (xy 122.039977 100.7082) (xy 121.507545 100.7082) (xy 121.440506 100.688515) (xy 121.419864 100.671881) + (xy 121.086254 100.338271) (xy 121.052769 100.276948) (xy 121.057753 100.207256) (xy 121.099625 100.151323) + (xy 121.126483 100.136029) (xy 121.130423 100.134397) (xy 121.130426 100.134395) (xy 121.130429 100.134394) + (xy 121.261539 100.046789) (xy 121.373039 99.935289) (xy 121.460644 99.804179) (xy 121.520987 99.658497) + (xy 121.55175 99.503842) (xy 121.55175 99.346158) (xy 121.55175 99.346155) (xy 121.551749 99.346153) + (xy 121.543529 99.304827) (xy 121.520987 99.191503) (xy 121.513616 99.173707) (xy 121.460647 99.045827) + (xy 121.46064 99.045814) (xy 121.373039 98.914711) (xy 121.373036 98.914707) (xy 121.261542 98.803213) + (xy 121.261538 98.80321) (xy 121.130435 98.715609) (xy 121.130422 98.715602) (xy 120.984751 98.655264) + (xy 120.984739 98.655261) (xy 120.830095 98.6245) (xy 120.830092 98.6245) (xy 120.766841 98.6245) + (xy 120.699802 98.604815) (xy 120.654047 98.552011) (xy 120.644103 98.482853) (xy 120.652277 98.453054) + (xy 120.699902 98.33808) (xy 120.774353 98.060225) (xy 120.8119 97.775029) (xy 120.8119 97.54655) + (xy 122.622 97.54655) (xy 122.622 97.715849) (xy 122.648481 97.883047) (xy 122.700796 98.044053) + (xy 122.777652 98.194888) (xy 122.877148 98.331834) (xy 122.877152 98.331839) (xy 122.99686 98.451547) + (xy 122.996865 98.451551) (xy 123.073873 98.5075) (xy 123.133815 98.55105) (xy 123.227141 98.598602) + (xy 123.284646 98.627903) (xy 123.284648 98.627903) (xy 123.284651 98.627905) (xy 123.368844 98.655261) + (xy 123.445652 98.680218) (xy 123.612851 98.7067) (xy 123.612856 98.7067) (xy 123.782149 98.7067) + (xy 123.949347 98.680218) (xy 124.110349 98.627905) (xy 124.261185 98.55105) (xy 124.398141 98.451546) + (xy 124.517846 98.331841) (xy 124.61735 98.194885) (xy 124.694205 98.044049) (xy 124.746518 97.883047) + (xy 124.763625 97.775038) (xy 124.773 97.715849) (xy 124.773 97.54655) (xy 124.746518 97.379352) + (xy 124.701796 97.241713) (xy 124.694205 97.218351) (xy 124.694203 97.218348) (xy 124.694203 97.218346) + (xy 124.650176 97.13194) (xy 124.61735 97.067515) (xy 124.585781 97.024064) (xy 124.517851 96.930565) + (xy 124.517847 96.93056) (xy 124.398139 96.810852) (xy 124.398134 96.810848) (xy 124.261188 96.711352) + (xy 124.261187 96.711351) (xy 124.261185 96.71135) (xy 124.207331 96.68391) (xy 124.110353 96.634496) + (xy 123.949347 96.582181) (xy 123.782149 96.5557) (xy 123.782144 96.5557) (xy 123.612856 96.5557) + (xy 123.612851 96.5557) (xy 123.445652 96.582181) (xy 123.284646 96.634496) (xy 123.133811 96.711352) + (xy 122.996865 96.810848) (xy 122.99686 96.810852) (xy 122.877152 96.93056) (xy 122.877148 96.930565) + (xy 122.777652 97.067511) (xy 122.700796 97.218346) (xy 122.648481 97.379352) (xy 122.622 97.54655) + (xy 120.8119 97.54655) (xy 120.8119 97.487371) (xy 120.774353 97.202175) (xy 120.699902 96.92432) + (xy 120.58982 96.658559) (xy 120.589818 96.658556) (xy 120.589816 96.658551) (xy 120.445995 96.409448) + (xy 120.445991 96.409441) (xy 120.342069 96.274007) (xy 120.270878 96.181228) (xy 120.270872 96.181221) + (xy 120.067478 95.977827) (xy 120.067471 95.977821) (xy 119.839267 95.802715) (xy 119.839265 95.802713) + (xy 119.839259 95.802709) (xy 119.839254 95.802706) (xy 119.839251 95.802704) (xy 119.590148 95.658883) + (xy 119.590131 95.658875) (xy 119.324378 95.548797) (xy 119.046523 95.474346) (xy 118.761338 95.436801) + (xy 118.761335 95.4368) (xy 118.761329 95.4368) (xy 118.473671 95.4368) (xy 118.473665 95.4368) + (xy 118.473661 95.436801) (xy 118.188476 95.474346) (xy 117.910621 95.548797) (xy 117.644868 95.658875) + (xy 117.644851 95.658883) (xy 117.395748 95.802704) (xy 117.395732 95.802715) (xy 117.167528 95.977821) + (xy 117.167521 95.977827) (xy 116.964127 96.181221) (xy 116.89293 96.274007) (xy 116.836501 96.315209) + (xy 116.766755 96.319364) (xy 116.705835 96.285151) (xy 116.673083 96.223434) (xy 116.678896 96.153807) + (xy 116.687161 96.136531) (xy 116.740363 96.044383) (xy 116.848242 95.783939) (xy 116.921204 95.511642) + (xy 116.958 95.232151) (xy 116.958 94.950249) (xy 116.921204 94.670758) (xy 116.848242 94.398461) + (xy 116.740363 94.138017) (xy 116.740361 94.138014) (xy 116.740359 94.138009) (xy 116.599416 93.89389) + (xy 116.599412 93.893883) (xy 116.4278 93.670235) (xy 116.427798 93.670233) (xy 116.427795 93.670229) + (xy 116.22847 93.470904) (xy 116.146766 93.40821) (xy 116.004817 93.299288) (xy 116.004811 93.299284) + (xy 116.004809 93.299283) (xy 115.76069 93.15834) (xy 115.760679 93.158335) (xy 115.500243 93.050459) + (xy 115.227939 92.977495) (xy 114.948458 92.9407) (xy 114.948451 92.9407) (xy 114.666549 92.9407) + (xy 114.666541 92.9407) (xy 114.38706 92.977495) (xy 114.114756 93.050459) (xy 113.85432 93.158335) + (xy 113.854309 93.15834) (xy 113.610192 93.299281) (xy 113.610183 93.299288) (xy 113.589606 93.315076) + (xy 113.524438 93.34027) (xy 113.514122 93.3407) (xy 110.182498 93.3407) (xy 110.182481 93.340701) + (xy 110.079703 93.3512) (xy 110.0797 93.351201) (xy 109.913168 93.406385) (xy 109.913163 93.406387) + (xy 109.763842 93.498489) (xy 109.639789 93.622542) (xy 109.547687 93.771863) (xy 109.547686 93.771866) + (xy 109.492501 93.938403) (xy 109.492501 93.938404) (xy 109.4925 93.938404) (xy 109.482 94.041183) + (xy 109.482 94.2177) (xy 109.462315 94.284739) (xy 109.409511 94.330494) (xy 109.358 94.3417) (xy 107.25273 94.3417) + (xy 107.185691 94.322015) (xy 107.139936 94.269211) (xy 107.129992 94.200053) (xy 107.159017 94.136497) + (xy 107.165049 94.130019) (xy 107.275212 94.019856) (xy 107.367314 93.870534) (xy 107.422499 93.703997) + (xy 107.433 93.601209) (xy 107.432999 92.410241) (xy 119.007 92.410241) (xy 119.007 92.692158) (xy 119.043795 92.971639) + (xy 119.116759 93.243943) (xy 119.224635 93.504379) (xy 119.22464 93.50439) (xy 119.365583 93.748509) + (xy 119.365588 93.748517) (xy 119.511294 93.938404) (xy 119.537204 93.97217) (xy 119.736529 94.171495) + (xy 119.736533 94.171498) (xy 119.736535 94.1715) (xy 119.960183 94.343112) (xy 119.96019 94.343116) + (xy 120.204309 94.484059) (xy 120.204325 94.484067) (xy 120.425952 94.575867) (xy 120.480356 94.619708) + (xy 120.502421 94.686002) (xy 120.5025 94.690428) (xy 120.5025 94.786646) (xy 120.533261 94.941289) + (xy 120.533264 94.941301) (xy 120.593602 95.086972) (xy 120.593609 95.086985) (xy 120.68121 95.218088) + (xy 120.681213 95.218092) (xy 120.792707 95.329586) (xy 120.792711 95.329589) (xy 120.923814 95.41719) + (xy 120.923827 95.417197) (xy 121.069498 95.477535) (xy 121.069503 95.477537) (xy 121.224153 95.508299) + (xy 121.224156 95.5083) (xy 121.224158 95.5083) (xy 121.381844 95.5083) (xy 121.381845 95.508299) + (xy 121.536497 95.477537) (xy 121.682179 95.417194) (xy 121.813289 95.329589) (xy 121.924789 95.218089) + (xy 122.012394 95.086979) (xy 122.072737 94.941297) (xy 122.1035 94.786642) (xy 122.1035 94.628958) + (xy 122.095722 94.589857) (xy 122.101948 94.52027) (xy 122.14481 94.465091) (xy 122.155327 94.458287) + (xy 122.354817 94.343112) (xy 122.375392 94.327323) (xy 122.44056 94.302129) (xy 122.450879 94.301699) + (xy 123.632482 94.301699) (xy 123.632491 94.3017) (xy 125.782508 94.301699) (xy 125.885297 94.291199) + (xy 126.051834 94.236014) (xy 126.201156 94.143912) (xy 126.325212 94.019856) (xy 126.417314 93.870534) + (xy 126.472499 93.703997) (xy 126.483 93.601209) (xy 126.482999 92.410241) (xy 138.057 92.410241) + (xy 138.057 92.692158) (xy 138.093795 92.971639) (xy 138.166759 93.243943) (xy 138.274635 93.504379) + (xy 138.27464 93.50439) (xy 138.415583 93.748509) (xy 138.415588 93.748517) (xy 138.561294 93.938404) + (xy 138.587204 93.97217) (xy 138.786529 94.171495) (xy 138.786533 94.171498) (xy 138.786535 94.1715) + (xy 139.010183 94.343112) (xy 139.01019 94.343116) (xy 139.254309 94.484059) (xy 139.254314 94.484061) + (xy 139.254317 94.484063) (xy 139.514761 94.591942) (xy 139.787058 94.664904) (xy 140.066549 94.7017) + (xy 140.066556 94.7017) (xy 140.348444 94.7017) (xy 140.348451 94.7017) (xy 140.627942 94.664904) + (xy 140.900239 94.591942) (xy 141.160683 94.484063) (xy 141.404817 94.343112) (xy 141.425392 94.327323) + (xy 141.49056 94.302129) (xy 141.500879 94.301699) (xy 142.682482 94.301699) (xy 142.682491 94.3017) + (xy 144.832508 94.301699) (xy 144.935297 94.291199) (xy 145.101834 94.236014) (xy 145.251156 94.143912) + (xy 145.375212 94.019856) (xy 145.467314 93.870534) (xy 145.522499 93.703997) (xy 145.533 93.601209) + (xy 145.532999 92.410241) (xy 157.107 92.410241) (xy 157.107 92.692158) (xy 157.143795 92.971639) + (xy 157.216759 93.243943) (xy 157.324635 93.504379) (xy 157.32464 93.50439) (xy 157.465583 93.748509) + (xy 157.465588 93.748517) (xy 157.611294 93.938404) (xy 157.637204 93.97217) (xy 157.836529 94.171495) + (xy 157.836533 94.171498) (xy 157.836535 94.1715) (xy 158.060183 94.343112) (xy 158.06019 94.343116) + (xy 158.304309 94.484059) (xy 158.304314 94.484061) (xy 158.304317 94.484063) (xy 158.564761 94.591942) + (xy 158.837058 94.664904) (xy 159.116549 94.7017) (xy 159.116556 94.7017) (xy 159.398444 94.7017) + (xy 159.398451 94.7017) (xy 159.677942 94.664904) (xy 159.950239 94.591942) (xy 160.210683 94.484063) + (xy 160.454817 94.343112) (xy 160.475392 94.327323) (xy 160.54056 94.302129) (xy 160.550879 94.301699) + (xy 161.732482 94.301699) (xy 161.732491 94.3017) (xy 163.882508 94.301699) (xy 163.985297 94.291199) + (xy 164.151834 94.236014) (xy 164.301156 94.143912) (xy 164.403885 94.041183) (xy 166.632 94.041183) + (xy 166.632 96.141201) (xy 166.632001 96.141218) (xy 166.6425 96.243996) (xy 166.642501 96.243999) + (xy 166.652445 96.274007) (xy 166.697686 96.410534) (xy 166.789788 96.559856) (xy 166.913844 96.683912) + (xy 167.063166 96.776014) (xy 167.229703 96.831199) (xy 167.332491 96.8417) (xy 169.259618 96.841699) + (xy 169.259627 96.8417) (xy 169.688351 96.841699) (xy 169.755389 96.861383) (xy 169.801144 96.914187) + (xy 169.811088 96.983346) (xy 169.788669 97.038583) (xy 169.767651 97.067511) (xy 169.690796 97.218346) + (xy 169.638481 97.379352) (xy 169.612 97.54655) (xy 169.612 97.715849) (xy 169.638481 97.883047) + (xy 169.690796 98.044053) (xy 169.767652 98.194888) (xy 169.867148 98.331834) (xy 169.867152 98.331839) + (xy 169.98686 98.451547) (xy 169.986865 98.451551) (xy 170.063873 98.5075) (xy 170.123815 98.55105) + (xy 170.217141 98.598602) (xy 170.274646 98.627903) (xy 170.274648 98.627903) (xy 170.274651 98.627905) + (xy 170.358844 98.655261) (xy 170.435652 98.680218) (xy 170.602851 98.7067) (xy 170.602856 98.7067) + (xy 170.772149 98.7067) (xy 170.939347 98.680218) (xy 171.100349 98.627905) (xy 171.251185 98.55105) + (xy 171.388141 98.451546) (xy 171.507846 98.331841) (xy 171.60735 98.194885) (xy 171.684205 98.044049) + (xy 171.736518 97.883047) (xy 171.753625 97.775038) (xy 171.763 97.715849) (xy 171.763 97.54655) + (xy 171.737428 97.385098) (xy 171.746382 97.315805) (xy 171.791379 97.262353) (xy 171.85813 97.241713) + (xy 171.859901 97.2417) (xy 172.098444 97.2417) (xy 172.098451 97.2417) (xy 172.377942 97.204904) + (xy 172.650239 97.131942) (xy 172.910683 97.024063) (xy 173.154817 96.883112) (xy 173.378465 96.7115) + (xy 173.5778 96.512165) (xy 173.645492 96.423946) (xy 173.70192 96.382744) (xy 173.771666 96.378589) + (xy 173.832586 96.412801) (xy 173.865339 96.474518) (xy 173.859526 96.544146) (xy 173.851255 96.561433) + (xy 173.795183 96.658551) (xy 173.795175 96.658568) (xy 173.685097 96.924321) (xy 173.610646 97.202176) + (xy 173.573101 97.487361) (xy 173.5731 97.487377) (xy 173.5731 97.775022) (xy 173.573101 97.775038) + (xy 173.610646 98.060223) (xy 173.685097 98.338078) (xy 173.795175 98.603831) (xy 173.795183 98.603848) + (xy 173.939004 98.852951) (xy 173.939015 98.852967) (xy 174.114121 99.081171) (xy 174.114127 99.081178) + (xy 174.317521 99.284572) (xy 174.317528 99.284578) (xy 174.450807 99.386846) (xy 174.545741 99.459691) + (xy 174.545748 99.459695) (xy 174.794851 99.603516) (xy 174.794856 99.603518) (xy 174.794859 99.60352) + (xy 174.794863 99.603521) (xy 174.794868 99.603524) (xy 174.888475 99.642297) (xy 175.06062 99.713602) + (xy 175.338475 99.788053) (xy 175.623671 99.8256) (xy 175.623678 99.8256) (xy 175.911322 99.8256) + (xy 175.911329 99.8256) (xy 176.196525 99.788053) (xy 176.47438 99.713602) (xy 176.740141 99.60352) + (xy 176.989259 99.459691) (xy 177.217473 99.284577) (xy 177.420877 99.081173) (xy 177.595991 98.852959) + (xy 177.73982 98.603841) (xy 177.849902 98.33808) (xy 177.924353 98.060225) (xy 177.9619 97.775029) + (xy 177.9619 97.54655) (xy 179.772 97.54655) (xy 179.772 97.715849) (xy 179.798481 97.883047) (xy 179.850796 98.044053) + (xy 179.927652 98.194888) (xy 180.027148 98.331834) (xy 180.027152 98.331839) (xy 180.14686 98.451547) + (xy 180.146865 98.451551) (xy 180.223873 98.5075) (xy 180.283815 98.55105) (xy 180.377141 98.598602) + (xy 180.434646 98.627903) (xy 180.434648 98.627903) (xy 180.434651 98.627905) (xy 180.518844 98.655261) + (xy 180.595652 98.680218) (xy 180.762851 98.7067) (xy 180.762856 98.7067) (xy 180.932149 98.7067) + (xy 181.099347 98.680218) (xy 181.260349 98.627905) (xy 181.411185 98.55105) (xy 181.548141 98.451546) + (xy 181.667846 98.331841) (xy 181.76735 98.194885) (xy 181.844205 98.044049) (xy 181.896518 97.883047) + (xy 181.913625 97.775038) (xy 181.923 97.715849) (xy 181.923 97.54655) (xy 181.896518 97.379352) + (xy 181.851796 97.241713) (xy 181.844205 97.218351) (xy 181.844203 97.218348) (xy 181.844203 97.218346) + (xy 181.800176 97.13194) (xy 181.76735 97.067515) (xy 181.735781 97.024064) (xy 181.667851 96.930565) + (xy 181.667847 96.93056) (xy 181.548139 96.810852) (xy 181.548134 96.810848) (xy 181.411188 96.711352) + (xy 181.411187 96.711351) (xy 181.411185 96.71135) (xy 181.357331 96.68391) (xy 181.260353 96.634496) + (xy 181.099347 96.582181) (xy 180.932149 96.5557) (xy 180.932144 96.5557) (xy 180.762856 96.5557) + (xy 180.762851 96.5557) (xy 180.595652 96.582181) (xy 180.434646 96.634496) (xy 180.283811 96.711352) + (xy 180.146865 96.810848) (xy 180.14686 96.810852) (xy 180.027152 96.93056) (xy 180.027148 96.930565) + (xy 179.927652 97.067511) (xy 179.850796 97.218346) (xy 179.798481 97.379352) (xy 179.772 97.54655) + (xy 177.9619 97.54655) (xy 177.9619 97.487371) (xy 177.924353 97.202175) (xy 177.849902 96.92432) + (xy 177.73982 96.658559) (xy 177.739818 96.658556) (xy 177.739816 96.658551) (xy 177.595995 96.409448) + (xy 177.595991 96.409441) (xy 177.492069 96.274007) (xy 177.420878 96.181228) (xy 177.420872 96.181221) + (xy 177.217478 95.977827) (xy 177.217471 95.977821) (xy 176.989267 95.802715) (xy 176.989265 95.802713) + (xy 176.989259 95.802709) (xy 176.989254 95.802706) (xy 176.989251 95.802704) (xy 176.740148 95.658883) + (xy 176.740131 95.658875) (xy 176.474378 95.548797) (xy 176.196523 95.474346) (xy 175.911338 95.436801) + (xy 175.911335 95.4368) (xy 175.911329 95.4368) (xy 175.623671 95.4368) (xy 175.623665 95.4368) + (xy 175.623661 95.436801) (xy 175.338476 95.474346) (xy 175.060621 95.548797) (xy 174.794868 95.658875) + (xy 174.794851 95.658883) (xy 174.545748 95.802704) (xy 174.545732 95.802715) (xy 174.317528 95.977821) + (xy 174.317521 95.977827) (xy 174.114127 96.181221) (xy 174.04293 96.274007) (xy 173.986501 96.315209) + (xy 173.916755 96.319364) (xy 173.855835 96.285151) (xy 173.823083 96.223434) (xy 173.828896 96.153807) + (xy 173.837161 96.136531) (xy 173.890363 96.044383) (xy 173.998242 95.783939) (xy 174.071204 95.511642) + (xy 174.108 95.232151) (xy 174.108 94.950249) (xy 174.071204 94.670758) (xy 173.998242 94.398461) + (xy 173.890363 94.138017) (xy 173.890361 94.138014) (xy 173.890359 94.138009) (xy 173.749416 93.89389) + (xy 173.749412 93.893883) (xy 173.5778 93.670235) (xy 173.577798 93.670233) (xy 173.577795 93.670229) + (xy 173.37847 93.470904) (xy 173.296766 93.40821) (xy 173.154817 93.299288) (xy 173.154811 93.299284) + (xy 173.154809 93.299283) (xy 172.91069 93.15834) (xy 172.910679 93.158335) (xy 172.650243 93.050459) + (xy 172.377939 92.977495) (xy 172.098458 92.9407) (xy 172.098451 92.9407) (xy 171.816549 92.9407) + (xy 171.816541 92.9407) (xy 171.53706 92.977495) (xy 171.264756 93.050459) (xy 171.00432 93.158335) + (xy 171.004309 93.15834) (xy 170.760192 93.299281) (xy 170.760183 93.299288) (xy 170.739606 93.315076) + (xy 170.674438 93.34027) (xy 170.664122 93.3407) (xy 167.332498 93.3407) (xy 167.332481 93.340701) + (xy 167.229703 93.3512) (xy 167.2297 93.351201) (xy 167.063168 93.406385) (xy 167.063163 93.406387) + (xy 166.913842 93.498489) (xy 166.789789 93.622542) (xy 166.697687 93.771863) (xy 166.697686 93.771866) + (xy 166.642501 93.938403) (xy 166.642501 93.938404) (xy 166.6425 93.938404) (xy 166.632 94.041183) + (xy 164.403885 94.041183) (xy 164.425212 94.019856) (xy 164.517314 93.870534) (xy 164.572499 93.703997) + (xy 164.583 93.601209) (xy 164.582999 92.410241) (xy 176.157 92.410241) (xy 176.157 92.692158) (xy 176.193795 92.971639) + (xy 176.266759 93.243943) (xy 176.374635 93.504379) (xy 176.37464 93.50439) (xy 176.515583 93.748509) + (xy 176.515588 93.748517) (xy 176.661294 93.938404) (xy 176.687204 93.97217) (xy 176.886529 94.171495) + (xy 176.886533 94.171498) (xy 176.886535 94.1715) (xy 177.110183 94.343112) (xy 177.11019 94.343116) + (xy 177.354309 94.484059) (xy 177.354314 94.484061) (xy 177.354317 94.484063) (xy 177.614761 94.591942) + (xy 177.887058 94.664904) (xy 178.166549 94.7017) (xy 178.166556 94.7017) (xy 178.448444 94.7017) + (xy 178.448451 94.7017) (xy 178.727942 94.664904) (xy 179.000239 94.591942) (xy 179.260683 94.484063) + (xy 179.504817 94.343112) (xy 179.525392 94.327323) (xy 179.59056 94.302129) (xy 179.600879 94.301699) + (xy 180.782482 94.301699) (xy 180.782491 94.3017) (xy 182.932508 94.301699) (xy 183.035297 94.291199) + (xy 183.201834 94.236014) (xy 183.351156 94.143912) (xy 183.453885 94.041183) (xy 185.682 94.041183) + (xy 185.682 96.141201) (xy 185.682001 96.141218) (xy 185.6925 96.243996) (xy 185.692501 96.243999) + (xy 185.702445 96.274007) (xy 185.747686 96.410534) (xy 185.839788 96.559856) (xy 185.963844 96.683912) + (xy 186.113166 96.776014) (xy 186.279703 96.831199) (xy 186.382491 96.8417) (xy 188.309618 96.841699) + (xy 188.309627 96.8417) (xy 188.738351 96.841699) (xy 188.805389 96.861383) (xy 188.851144 96.914187) + (xy 188.861088 96.983346) (xy 188.838669 97.038583) (xy 188.817651 97.067511) (xy 188.740796 97.218346) + (xy 188.688481 97.379352) (xy 188.662 97.54655) (xy 188.662 97.715849) (xy 188.688481 97.883047) + (xy 188.740796 98.044053) (xy 188.817652 98.194888) (xy 188.917148 98.331834) (xy 188.917152 98.331839) + (xy 189.03686 98.451547) (xy 189.036865 98.451551) (xy 189.113873 98.5075) (xy 189.173815 98.55105) + (xy 189.267141 98.598602) (xy 189.324646 98.627903) (xy 189.324648 98.627903) (xy 189.324651 98.627905) + (xy 189.408844 98.655261) (xy 189.485652 98.680218) (xy 189.652851 98.7067) (xy 189.652856 98.7067) + (xy 189.822149 98.7067) (xy 189.989347 98.680218) (xy 190.150349 98.627905) (xy 190.301185 98.55105) + (xy 190.438141 98.451546) (xy 190.557846 98.331841) (xy 190.65735 98.194885) (xy 190.734205 98.044049) + (xy 190.786518 97.883047) (xy 190.803625 97.775038) (xy 190.813 97.715849) (xy 190.813 97.54655) + (xy 190.787428 97.385098) (xy 190.796382 97.315805) (xy 190.841379 97.262353) (xy 190.90813 97.241713) + (xy 190.909901 97.2417) (xy 191.148444 97.2417) (xy 191.148451 97.2417) (xy 191.427942 97.204904) + (xy 191.700239 97.131942) (xy 191.960683 97.024063) (xy 192.204817 96.883112) (xy 192.428465 96.7115) + (xy 192.6278 96.512165) (xy 192.695492 96.423946) (xy 192.75192 96.382744) (xy 192.821666 96.378589) + (xy 192.882586 96.412801) (xy 192.915339 96.474518) (xy 192.909526 96.544146) (xy 192.901255 96.561433) + (xy 192.845183 96.658551) (xy 192.845175 96.658568) (xy 192.735097 96.924321) (xy 192.660646 97.202176) + (xy 192.623101 97.487361) (xy 192.6231 97.487377) (xy 192.6231 97.775022) (xy 192.623101 97.775038) + (xy 192.660646 98.060223) (xy 192.735097 98.338078) (xy 192.845175 98.603831) (xy 192.845183 98.603848) + (xy 192.989004 98.852951) (xy 192.989015 98.852967) (xy 193.164121 99.081171) (xy 193.164127 99.081178) + (xy 193.367521 99.284572) (xy 193.367528 99.284578) (xy 193.500807 99.386846) (xy 193.595741 99.459691) + (xy 193.595748 99.459695) (xy 193.844851 99.603516) (xy 193.844856 99.603518) (xy 193.844859 99.60352) + (xy 193.844863 99.603521) (xy 193.844868 99.603524) (xy 193.938475 99.642297) (xy 194.11062 99.713602) + (xy 194.388475 99.788053) (xy 194.673671 99.8256) (xy 194.673678 99.8256) (xy 194.961322 99.8256) + (xy 194.961329 99.8256) (xy 195.246525 99.788053) (xy 195.52438 99.713602) (xy 195.790141 99.60352) + (xy 196.039259 99.459691) (xy 196.267473 99.284577) (xy 196.470877 99.081173) (xy 196.645991 98.852959) + (xy 196.78982 98.603841) (xy 196.899902 98.33808) (xy 196.974353 98.060225) (xy 197.0119 97.775029) + (xy 197.0119 97.54655) (xy 198.822 97.54655) (xy 198.822 97.715849) (xy 198.848481 97.883047) (xy 198.900796 98.044053) + (xy 198.977652 98.194888) (xy 199.077148 98.331834) (xy 199.077152 98.331839) (xy 199.19686 98.451547) + (xy 199.196865 98.451551) (xy 199.273873 98.5075) (xy 199.333815 98.55105) (xy 199.427141 98.598602) + (xy 199.484646 98.627903) (xy 199.484648 98.627903) (xy 199.484651 98.627905) (xy 199.568844 98.655261) + (xy 199.645652 98.680218) (xy 199.812851 98.7067) (xy 199.812856 98.7067) (xy 199.982149 98.7067) + (xy 200.149347 98.680218) (xy 200.310349 98.627905) (xy 200.461185 98.55105) (xy 200.598141 98.451546) + (xy 200.717846 98.331841) (xy 200.81735 98.194885) (xy 200.894205 98.044049) (xy 200.946518 97.883047) + (xy 200.963625 97.775038) (xy 200.973 97.715849) (xy 200.973 97.54655) (xy 200.946518 97.379352) + (xy 200.901796 97.241713) (xy 200.894205 97.218351) (xy 200.894203 97.218348) (xy 200.894203 97.218346) + (xy 200.850176 97.13194) (xy 200.81735 97.067515) (xy 200.785781 97.024064) (xy 200.717851 96.930565) + (xy 200.717847 96.93056) (xy 200.598139 96.810852) (xy 200.598134 96.810848) (xy 200.461188 96.711352) + (xy 200.461187 96.711351) (xy 200.461185 96.71135) (xy 200.407331 96.68391) (xy 200.310353 96.634496) + (xy 200.149347 96.582181) (xy 199.982149 96.5557) (xy 199.982144 96.5557) (xy 199.812856 96.5557) + (xy 199.812851 96.5557) (xy 199.645652 96.582181) (xy 199.484646 96.634496) (xy 199.333811 96.711352) + (xy 199.196865 96.810848) (xy 199.19686 96.810852) (xy 199.077152 96.93056) (xy 199.077148 96.930565) + (xy 198.977652 97.067511) (xy 198.900796 97.218346) (xy 198.848481 97.379352) (xy 198.822 97.54655) + (xy 197.0119 97.54655) (xy 197.0119 97.487371) (xy 196.974353 97.202175) (xy 196.899902 96.92432) + (xy 196.78982 96.658559) (xy 196.789818 96.658556) (xy 196.789816 96.658551) (xy 196.645995 96.409448) + (xy 196.645991 96.409441) (xy 196.542069 96.274007) (xy 196.470878 96.181228) (xy 196.470872 96.181221) + (xy 196.267478 95.977827) (xy 196.267471 95.977821) (xy 196.039267 95.802715) (xy 196.039265 95.802713) + (xy 196.039259 95.802709) (xy 196.039254 95.802706) (xy 196.039251 95.802704) (xy 195.790148 95.658883) + (xy 195.790131 95.658875) (xy 195.524378 95.548797) (xy 195.246523 95.474346) (xy 194.961338 95.436801) + (xy 194.961335 95.4368) (xy 194.961329 95.4368) (xy 194.673671 95.4368) (xy 194.673665 95.4368) + (xy 194.673661 95.436801) (xy 194.388476 95.474346) (xy 194.110621 95.548797) (xy 193.844868 95.658875) + (xy 193.844851 95.658883) (xy 193.595748 95.802704) (xy 193.595732 95.802715) (xy 193.367528 95.977821) + (xy 193.367521 95.977827) (xy 193.164127 96.181221) (xy 193.09293 96.274007) (xy 193.036501 96.315209) + (xy 192.966755 96.319364) (xy 192.905835 96.285151) (xy 192.873083 96.223434) (xy 192.878896 96.153807) + (xy 192.887161 96.136531) (xy 192.940363 96.044383) (xy 193.048242 95.783939) (xy 193.121204 95.511642) + (xy 193.158 95.232151) (xy 193.158 94.950249) (xy 193.121204 94.670758) (xy 193.048242 94.398461) + (xy 192.940363 94.138017) (xy 192.940361 94.138014) (xy 192.940359 94.138009) (xy 192.799416 93.89389) + (xy 192.799412 93.893883) (xy 192.6278 93.670235) (xy 192.627798 93.670233) (xy 192.627795 93.670229) + (xy 192.42847 93.470904) (xy 192.346766 93.40821) (xy 192.204817 93.299288) (xy 192.204811 93.299284) + (xy 192.204809 93.299283) (xy 191.96069 93.15834) (xy 191.960679 93.158335) (xy 191.700243 93.050459) + (xy 191.427939 92.977495) (xy 191.148458 92.9407) (xy 191.148451 92.9407) (xy 190.866549 92.9407) + (xy 190.866541 92.9407) (xy 190.58706 92.977495) (xy 190.314756 93.050459) (xy 190.05432 93.158335) + (xy 190.054309 93.15834) (xy 189.810192 93.299281) (xy 189.810183 93.299288) (xy 189.789606 93.315076) + (xy 189.724438 93.34027) (xy 189.714122 93.3407) (xy 186.382498 93.3407) (xy 186.382481 93.340701) + (xy 186.279703 93.3512) (xy 186.2797 93.351201) (xy 186.113168 93.406385) (xy 186.113163 93.406387) + (xy 185.963842 93.498489) (xy 185.839789 93.622542) (xy 185.747687 93.771863) (xy 185.747686 93.771866) + (xy 185.692501 93.938403) (xy 185.692501 93.938404) (xy 185.6925 93.938404) (xy 185.682 94.041183) + (xy 183.453885 94.041183) (xy 183.475212 94.019856) (xy 183.567314 93.870534) (xy 183.622499 93.703997) + (xy 183.633 93.601209) (xy 183.632999 92.410241) (xy 195.207 92.410241) (xy 195.207 92.692158) (xy 195.243795 92.971639) + (xy 195.316759 93.243943) (xy 195.424635 93.504379) (xy 195.42464 93.50439) (xy 195.565583 93.748509) + (xy 195.565588 93.748517) (xy 195.711294 93.938404) (xy 195.737204 93.97217) (xy 195.936529 94.171495) + (xy 195.936533 94.171498) (xy 195.936535 94.1715) (xy 196.160183 94.343112) (xy 196.16019 94.343116) + (xy 196.404309 94.484059) (xy 196.404314 94.484061) (xy 196.404317 94.484063) (xy 196.664761 94.591942) + (xy 196.937058 94.664904) (xy 197.216549 94.7017) (xy 197.216556 94.7017) (xy 197.498444 94.7017) + (xy 197.498451 94.7017) (xy 197.777942 94.664904) (xy 198.050239 94.591942) (xy 198.310683 94.484063) + (xy 198.554817 94.343112) (xy 198.575392 94.327323) (xy 198.64056 94.302129) (xy 198.650879 94.301699) + (xy 199.832482 94.301699) (xy 199.832491 94.3017) (xy 201.982508 94.301699) (xy 202.085297 94.291199) + (xy 202.251834 94.236014) (xy 202.401156 94.143912) (xy 202.503885 94.041183) (xy 204.732 94.041183) + (xy 204.732 96.141201) (xy 204.732001 96.141218) (xy 204.7425 96.243996) (xy 204.742501 96.243999) + (xy 204.752445 96.274007) (xy 204.797686 96.410534) (xy 204.889788 96.559856) (xy 205.013844 96.683912) + (xy 205.163166 96.776014) (xy 205.329703 96.831199) (xy 205.432491 96.8417) (xy 207.359618 96.841699) + (xy 207.359627 96.8417) (xy 207.788351 96.841699) (xy 207.855389 96.861383) (xy 207.901144 96.914187) + (xy 207.911088 96.983346) (xy 207.888669 97.038583) (xy 207.867651 97.067511) (xy 207.790796 97.218346) + (xy 207.738481 97.379352) (xy 207.712 97.54655) (xy 207.712 97.715849) (xy 207.738481 97.883047) + (xy 207.790796 98.044053) (xy 207.867652 98.194888) (xy 207.967148 98.331834) (xy 207.967152 98.331839) + (xy 208.08686 98.451547) (xy 208.086865 98.451551) (xy 208.163873 98.5075) (xy 208.223815 98.55105) + (xy 208.317141 98.598602) (xy 208.374646 98.627903) (xy 208.374648 98.627903) (xy 208.374651 98.627905) + (xy 208.458844 98.655261) (xy 208.535652 98.680218) (xy 208.702851 98.7067) (xy 208.702856 98.7067) + (xy 208.872149 98.7067) (xy 209.039347 98.680218) (xy 209.200349 98.627905) (xy 209.351185 98.55105) + (xy 209.488141 98.451546) (xy 209.607846 98.331841) (xy 209.70735 98.194885) (xy 209.784205 98.044049) + (xy 209.836518 97.883047) (xy 209.853625 97.775038) (xy 209.863 97.715849) (xy 209.863 97.54655) + (xy 209.837428 97.385098) (xy 209.846382 97.315805) (xy 209.891379 97.262353) (xy 209.95813 97.241713) + (xy 209.959901 97.2417) (xy 210.198444 97.2417) (xy 210.198451 97.2417) (xy 210.477942 97.204904) + (xy 210.750239 97.131942) (xy 211.010683 97.024063) (xy 211.254817 96.883112) (xy 211.478465 96.7115) + (xy 211.6778 96.512165) (xy 211.745492 96.423946) (xy 211.80192 96.382744) (xy 211.871666 96.378589) + (xy 211.932586 96.412801) (xy 211.965339 96.474518) (xy 211.959526 96.544146) (xy 211.951255 96.561433) + (xy 211.895183 96.658551) (xy 211.895175 96.658568) (xy 211.785097 96.924321) (xy 211.710646 97.202176) + (xy 211.673101 97.487361) (xy 211.6731 97.487377) (xy 211.6731 97.775022) (xy 211.673101 97.775038) + (xy 211.710646 98.060223) (xy 211.785097 98.338078) (xy 211.895175 98.603831) (xy 211.895183 98.603848) + (xy 212.039004 98.852951) (xy 212.039015 98.852967) (xy 212.214121 99.081171) (xy 212.214127 99.081178) + (xy 212.417521 99.284572) (xy 212.417528 99.284578) (xy 212.550807 99.386846) (xy 212.645741 99.459691) + (xy 212.645748 99.459695) (xy 212.894851 99.603516) (xy 212.894856 99.603518) (xy 212.894859 99.60352) + (xy 212.894863 99.603521) (xy 212.894868 99.603524) (xy 212.988475 99.642297) (xy 213.16062 99.713602) + (xy 213.438475 99.788053) (xy 213.723671 99.8256) (xy 213.723678 99.8256) (xy 214.011322 99.8256) + (xy 214.011329 99.8256) (xy 214.296525 99.788053) (xy 214.57438 99.713602) (xy 214.840141 99.60352) + (xy 215.089259 99.459691) (xy 215.317473 99.284577) (xy 215.520877 99.081173) (xy 215.695991 98.852959) + (xy 215.83982 98.603841) (xy 215.949902 98.33808) (xy 216.024353 98.060225) (xy 216.0619 97.775029) + (xy 216.0619 97.54655) (xy 217.872 97.54655) (xy 217.872 97.715849) (xy 217.898481 97.883047) (xy 217.950796 98.044053) + (xy 218.027652 98.194888) (xy 218.127148 98.331834) (xy 218.127152 98.331839) (xy 218.24686 98.451547) + (xy 218.246865 98.451551) (xy 218.323873 98.5075) (xy 218.383815 98.55105) (xy 218.477141 98.598602) + (xy 218.534646 98.627903) (xy 218.534648 98.627903) (xy 218.534651 98.627905) (xy 218.618844 98.655261) + (xy 218.695652 98.680218) (xy 218.862851 98.7067) (xy 218.862856 98.7067) (xy 219.032149 98.7067) + (xy 219.199347 98.680218) (xy 219.360349 98.627905) (xy 219.511185 98.55105) (xy 219.648141 98.451546) + (xy 219.767846 98.331841) (xy 219.86735 98.194885) (xy 219.944205 98.044049) (xy 219.996518 97.883047) + (xy 220.013625 97.775038) (xy 220.023 97.715849) (xy 220.023 97.54655) (xy 219.996518 97.379352) + (xy 219.951796 97.241713) (xy 219.944205 97.218351) (xy 219.944203 97.218348) (xy 219.944203 97.218346) + (xy 219.900176 97.13194) (xy 219.86735 97.067515) (xy 219.835781 97.024064) (xy 219.767851 96.930565) + (xy 219.767847 96.93056) (xy 219.648139 96.810852) (xy 219.648134 96.810848) (xy 219.511188 96.711352) + (xy 219.511187 96.711351) (xy 219.511185 96.71135) (xy 219.457331 96.68391) (xy 219.360353 96.634496) + (xy 219.199347 96.582181) (xy 219.032149 96.5557) (xy 219.032144 96.5557) (xy 218.862856 96.5557) + (xy 218.862851 96.5557) (xy 218.695652 96.582181) (xy 218.534646 96.634496) (xy 218.383811 96.711352) + (xy 218.246865 96.810848) (xy 218.24686 96.810852) (xy 218.127152 96.93056) (xy 218.127148 96.930565) + (xy 218.027652 97.067511) (xy 217.950796 97.218346) (xy 217.898481 97.379352) (xy 217.872 97.54655) + (xy 216.0619 97.54655) (xy 216.0619 97.487371) (xy 216.024353 97.202175) (xy 215.949902 96.92432) + (xy 215.83982 96.658559) (xy 215.839818 96.658556) (xy 215.839816 96.658551) (xy 215.695995 96.409448) + (xy 215.695991 96.409441) (xy 215.592069 96.274007) (xy 215.520878 96.181228) (xy 215.520872 96.181221) + (xy 215.317478 95.977827) (xy 215.317471 95.977821) (xy 215.089267 95.802715) (xy 215.089265 95.802713) + (xy 215.089259 95.802709) (xy 215.089254 95.802706) (xy 215.089251 95.802704) (xy 214.840148 95.658883) + (xy 214.840131 95.658875) (xy 214.574378 95.548797) (xy 214.296523 95.474346) (xy 214.011338 95.436801) + (xy 214.011335 95.4368) (xy 214.011329 95.4368) (xy 213.723671 95.4368) (xy 213.723665 95.4368) + (xy 213.723661 95.436801) (xy 213.438476 95.474346) (xy 213.160621 95.548797) (xy 212.894868 95.658875) + (xy 212.894851 95.658883) (xy 212.645748 95.802704) (xy 212.645732 95.802715) (xy 212.417528 95.977821) + (xy 212.417521 95.977827) (xy 212.214127 96.181221) (xy 212.14293 96.274007) (xy 212.086501 96.315209) + (xy 212.016755 96.319364) (xy 211.955835 96.285151) (xy 211.923083 96.223434) (xy 211.928896 96.153807) + (xy 211.937161 96.136531) (xy 211.990363 96.044383) (xy 212.098242 95.783939) (xy 212.171204 95.511642) + (xy 212.208 95.232151) (xy 212.208 94.950249) (xy 212.171204 94.670758) (xy 212.098242 94.398461) + (xy 211.990363 94.138017) (xy 211.990361 94.138014) (xy 211.990359 94.138009) (xy 211.849416 93.89389) + (xy 211.849412 93.893883) (xy 211.6778 93.670235) (xy 211.677798 93.670233) (xy 211.677795 93.670229) + (xy 211.47847 93.470904) (xy 211.396766 93.40821) (xy 211.254817 93.299288) (xy 211.254811 93.299284) + (xy 211.254809 93.299283) (xy 211.01069 93.15834) (xy 211.010679 93.158335) (xy 210.750243 93.050459) + (xy 210.477939 92.977495) (xy 210.198458 92.9407) (xy 210.198451 92.9407) (xy 209.916549 92.9407) + (xy 209.916541 92.9407) (xy 209.63706 92.977495) (xy 209.364756 93.050459) (xy 209.10432 93.158335) + (xy 209.104309 93.15834) (xy 208.860192 93.299281) (xy 208.860183 93.299288) (xy 208.839606 93.315076) + (xy 208.774438 93.34027) (xy 208.764122 93.3407) (xy 205.432498 93.3407) (xy 205.432481 93.340701) + (xy 205.329703 93.3512) (xy 205.3297 93.351201) (xy 205.163168 93.406385) (xy 205.163163 93.406387) + (xy 205.013842 93.498489) (xy 204.889789 93.622542) (xy 204.797687 93.771863) (xy 204.797686 93.771866) + (xy 204.742501 93.938403) (xy 204.742501 93.938404) (xy 204.7425 93.938404) (xy 204.732 94.041183) + (xy 202.503885 94.041183) (xy 202.525212 94.019856) (xy 202.617314 93.870534) (xy 202.672499 93.703997) + (xy 202.683 93.601209) (xy 202.682999 92.410241) (xy 214.257 92.410241) (xy 214.257 92.692158) (xy 214.293795 92.971639) + (xy 214.366759 93.243943) (xy 214.474635 93.504379) (xy 214.47464 93.50439) (xy 214.615583 93.748509) + (xy 214.615588 93.748517) (xy 214.761294 93.938404) (xy 214.787204 93.97217) (xy 214.986529 94.171495) + (xy 214.986533 94.171498) (xy 214.986535 94.1715) (xy 215.210183 94.343112) (xy 215.21019 94.343116) + (xy 215.454309 94.484059) (xy 215.454314 94.484061) (xy 215.454317 94.484063) (xy 215.714761 94.591942) + (xy 215.987058 94.664904) (xy 216.266549 94.7017) (xy 216.266556 94.7017) (xy 216.548444 94.7017) + (xy 216.548451 94.7017) (xy 216.827942 94.664904) (xy 217.100239 94.591942) (xy 217.360683 94.484063) + (xy 217.604817 94.343112) (xy 217.625392 94.327323) (xy 217.69056 94.302129) (xy 217.700879 94.301699) + (xy 218.882482 94.301699) (xy 218.882491 94.3017) (xy 221.032508 94.301699) (xy 221.135297 94.291199) + (xy 221.301834 94.236014) (xy 221.451156 94.143912) (xy 221.575212 94.019856) (xy 221.667314 93.870534) + (xy 221.722499 93.703997) (xy 221.733 93.601209) (xy 221.732999 92.410241) (xy 233.307 92.410241) + (xy 233.307 92.692158) (xy 233.343795 92.971639) (xy 233.416759 93.243943) (xy 233.524635 93.504379) + (xy 233.52464 93.50439) (xy 233.665583 93.748509) (xy 233.665588 93.748517) (xy 233.811294 93.938404) + (xy 233.837204 93.97217) (xy 234.036529 94.171495) (xy 234.036533 94.171498) (xy 234.036535 94.1715) + (xy 234.260183 94.343112) (xy 234.26019 94.343116) (xy 234.504309 94.484059) (xy 234.504314 94.484061) + (xy 234.504317 94.484063) (xy 234.764761 94.591942) (xy 235.037058 94.664904) (xy 235.316549 94.7017) + (xy 235.316556 94.7017) (xy 235.598444 94.7017) (xy 235.598451 94.7017) (xy 235.877942 94.664904) + (xy 236.150239 94.591942) (xy 236.410683 94.484063) (xy 236.654817 94.343112) (xy 236.675392 94.327323) + (xy 236.74056 94.302129) (xy 236.750879 94.301699) (xy 237.932482 94.301699) (xy 237.932491 94.3017) + (xy 240.082508 94.301699) (xy 240.185297 94.291199) (xy 240.351834 94.236014) (xy 240.501156 94.143912) + (xy 240.625212 94.019856) (xy 240.717314 93.870534) (xy 240.772499 93.703997) (xy 240.783 93.601209) + (xy 240.782999 92.410241) (xy 252.357 92.410241) (xy 252.357 92.692158) (xy 252.393795 92.971639) + (xy 252.466759 93.243943) (xy 252.574635 93.504379) (xy 252.57464 93.50439) (xy 252.715583 93.748509) + (xy 252.715588 93.748517) (xy 252.861294 93.938404) (xy 252.887204 93.97217) (xy 253.086529 94.171495) + (xy 253.086533 94.171498) (xy 253.086535 94.1715) (xy 253.310183 94.343112) (xy 253.31019 94.343116) + (xy 253.554309 94.484059) (xy 253.554314 94.484061) (xy 253.554317 94.484063) (xy 253.814761 94.591942) + (xy 254.087058 94.664904) (xy 254.366549 94.7017) (xy 254.366556 94.7017) (xy 254.648444 94.7017) + (xy 254.648451 94.7017) (xy 254.927942 94.664904) (xy 255.200239 94.591942) (xy 255.460683 94.484063) + (xy 255.704817 94.343112) (xy 255.725392 94.327323) (xy 255.79056 94.302129) (xy 255.800879 94.301699) + (xy 256.982482 94.301699) (xy 256.982491 94.3017) (xy 259.132508 94.301699) (xy 259.235297 94.291199) + (xy 259.401834 94.236014) (xy 259.551156 94.143912) (xy 259.675212 94.019856) (xy 259.767314 93.870534) + (xy 259.822499 93.703997) (xy 259.833 93.601209) (xy 259.832999 92.410241) (xy 271.407 92.410241) + (xy 271.407 92.692158) (xy 271.443795 92.971639) (xy 271.516759 93.243943) (xy 271.624635 93.504379) + (xy 271.62464 93.50439) (xy 271.765583 93.748509) (xy 271.765588 93.748517) (xy 271.911294 93.938404) + (xy 271.937204 93.97217) (xy 272.136529 94.171495) (xy 272.136533 94.171498) (xy 272.136535 94.1715) + (xy 272.360183 94.343112) (xy 272.36019 94.343116) (xy 272.604309 94.484059) (xy 272.604314 94.484061) + (xy 272.604317 94.484063) (xy 272.864761 94.591942) (xy 273.137058 94.664904) (xy 273.416549 94.7017) + (xy 273.416556 94.7017) (xy 273.698444 94.7017) (xy 273.698451 94.7017) (xy 273.977942 94.664904) + (xy 274.250239 94.591942) (xy 274.510683 94.484063) (xy 274.754817 94.343112) (xy 274.775392 94.327323) + (xy 274.84056 94.302129) (xy 274.850879 94.301699) (xy 276.032482 94.301699) (xy 276.032491 94.3017) + (xy 278.182508 94.301699) (xy 278.285297 94.291199) (xy 278.451834 94.236014) (xy 278.601156 94.143912) + (xy 278.725212 94.019856) (xy 278.817314 93.870534) (xy 278.872499 93.703997) (xy 278.883 93.601209) + (xy 278.882999 92.410241) (xy 290.4345 92.410241) (xy 290.4345 92.692158) (xy 290.471295 92.971639) + (xy 290.544259 93.243943) (xy 290.652135 93.504379) (xy 290.65214 93.50439) (xy 290.793083 93.748509) + (xy 290.793088 93.748517) (xy 290.938794 93.938404) (xy 290.964704 93.97217) (xy 291.164029 94.171495) + (xy 291.164033 94.171498) (xy 291.164035 94.1715) (xy 291.387683 94.343112) (xy 291.38769 94.343116) + (xy 291.631809 94.484059) (xy 291.631814 94.484061) (xy 291.631817 94.484063) (xy 291.892261 94.591942) + (xy 292.164558 94.664904) (xy 292.444049 94.7017) (xy 292.444056 94.7017) (xy 292.725944 94.7017) + (xy 292.725951 94.7017) (xy 293.005442 94.664904) (xy 293.277739 94.591942) (xy 293.538183 94.484063) + (xy 293.782317 94.343112) (xy 293.802892 94.327323) (xy 293.86806 94.302129) (xy 293.878379 94.301699) + (xy 295.059982 94.301699) (xy 295.059991 94.3017) (xy 297.210008 94.301699) (xy 297.312797 94.291199) + (xy 297.479334 94.236014) (xy 297.628656 94.143912) (xy 297.731385 94.041183) (xy 309.5595 94.041183) + (xy 309.5595 96.141201) (xy 309.559501 96.141218) (xy 309.57 96.243996) (xy 309.570001 96.243999) + (xy 309.579945 96.274007) (xy 309.625186 96.410534) (xy 309.717288 96.559856) (xy 309.841344 96.683912) + (xy 309.990666 96.776014) (xy 310.157203 96.831199) (xy 310.259991 96.8417) (xy 312.187118 96.841699) + (xy 312.187127 96.8417) (xy 312.615851 96.841699) (xy 312.682889 96.861383) (xy 312.728644 96.914187) + (xy 312.738588 96.983346) (xy 312.716169 97.038583) (xy 312.695151 97.067511) (xy 312.618296 97.218346) + (xy 312.565981 97.379352) (xy 312.5395 97.54655) (xy 312.5395 97.715849) (xy 312.565981 97.883047) + (xy 312.618296 98.044053) (xy 312.695152 98.194888) (xy 312.794648 98.331834) (xy 312.794652 98.331839) + (xy 312.91436 98.451547) (xy 312.914365 98.451551) (xy 312.991373 98.5075) (xy 313.051315 98.55105) + (xy 313.144641 98.598602) (xy 313.202146 98.627903) (xy 313.202148 98.627903) (xy 313.202151 98.627905) + (xy 313.286344 98.655261) (xy 313.363152 98.680218) (xy 313.530351 98.7067) (xy 313.530356 98.7067) + (xy 313.699649 98.7067) (xy 313.866847 98.680218) (xy 314.027849 98.627905) (xy 314.178685 98.55105) + (xy 314.315641 98.451546) (xy 314.435346 98.331841) (xy 314.53485 98.194885) (xy 314.611705 98.044049) + (xy 314.664018 97.883047) (xy 314.681125 97.775038) (xy 314.6905 97.715849) (xy 314.6905 97.54655) + (xy 314.664928 97.385098) (xy 314.673882 97.315805) (xy 314.718879 97.262353) (xy 314.78563 97.241713) + (xy 314.787401 97.2417) (xy 315.025944 97.2417) (xy 315.025951 97.2417) (xy 315.305442 97.204904) + (xy 315.577739 97.131942) (xy 315.838183 97.024063) (xy 316.082317 96.883112) (xy 316.305965 96.7115) + (xy 316.5053 96.512165) (xy 316.572992 96.423946) (xy 316.62942 96.382744) (xy 316.699166 96.378589) + (xy 316.760086 96.412801) (xy 316.792839 96.474518) (xy 316.787026 96.544146) (xy 316.778755 96.561433) + (xy 316.722683 96.658551) (xy 316.722675 96.658568) (xy 316.612597 96.924321) (xy 316.538146 97.202176) + (xy 316.500601 97.487361) (xy 316.5006 97.487377) (xy 316.5006 97.775022) (xy 316.500601 97.775038) + (xy 316.538146 98.060223) (xy 316.612597 98.338078) (xy 316.722675 98.603831) (xy 316.722683 98.603848) + (xy 316.866504 98.852951) (xy 316.866515 98.852967) (xy 317.041621 99.081171) (xy 317.041627 99.081178) + (xy 317.245021 99.284572) (xy 317.245028 99.284578) (xy 317.378307 99.386846) (xy 317.473241 99.459691) + (xy 317.473248 99.459695) (xy 317.722351 99.603516) (xy 317.722356 99.603518) (xy 317.722359 99.60352) + (xy 317.722363 99.603521) (xy 317.722368 99.603524) (xy 317.815975 99.642297) (xy 317.98812 99.713602) + (xy 318.265975 99.788053) (xy 318.551171 99.8256) (xy 318.551178 99.8256) (xy 318.838822 99.8256) + (xy 318.838829 99.8256) (xy 319.124025 99.788053) (xy 319.40188 99.713602) (xy 319.667641 99.60352) + (xy 319.916759 99.459691) (xy 320.144973 99.284577) (xy 320.348377 99.081173) (xy 320.523491 98.852959) + (xy 320.66732 98.603841) (xy 320.777402 98.33808) (xy 320.851853 98.060225) (xy 320.8894 97.775029) + (xy 320.8894 97.54655) (xy 322.6995 97.54655) (xy 322.6995 97.715849) (xy 322.725981 97.883047) + (xy 322.778296 98.044053) (xy 322.855152 98.194888) (xy 322.954648 98.331834) (xy 322.954652 98.331839) + (xy 323.07436 98.451547) (xy 323.074365 98.451551) (xy 323.151373 98.5075) (xy 323.211315 98.55105) + (xy 323.304641 98.598602) (xy 323.362146 98.627903) (xy 323.362148 98.627903) (xy 323.362151 98.627905) + (xy 323.446344 98.655261) (xy 323.523152 98.680218) (xy 323.690351 98.7067) (xy 323.690356 98.7067) + (xy 323.859649 98.7067) (xy 324.026847 98.680218) (xy 324.187849 98.627905) (xy 324.338685 98.55105) + (xy 324.475641 98.451546) (xy 324.595346 98.331841) (xy 324.69485 98.194885) (xy 324.771705 98.044049) + (xy 324.824018 97.883047) (xy 324.841125 97.775038) (xy 324.8505 97.715849) (xy 324.8505 97.54655) + (xy 324.824018 97.379352) (xy 324.779296 97.241713) (xy 324.771705 97.218351) (xy 324.771703 97.218348) + (xy 324.771703 97.218346) (xy 324.727676 97.13194) (xy 324.69485 97.067515) (xy 324.663281 97.024064) + (xy 324.595351 96.930565) (xy 324.595347 96.93056) (xy 324.475639 96.810852) (xy 324.475634 96.810848) + (xy 324.338688 96.711352) (xy 324.338687 96.711351) (xy 324.338685 96.71135) (xy 324.284831 96.68391) + (xy 324.187853 96.634496) (xy 324.026847 96.582181) (xy 323.859649 96.5557) (xy 323.859644 96.5557) + (xy 323.690356 96.5557) (xy 323.690351 96.5557) (xy 323.523152 96.582181) (xy 323.362146 96.634496) + (xy 323.211311 96.711352) (xy 323.074365 96.810848) (xy 323.07436 96.810852) (xy 322.954652 96.93056) + (xy 322.954648 96.930565) (xy 322.855152 97.067511) (xy 322.778296 97.218346) (xy 322.725981 97.379352) + (xy 322.6995 97.54655) (xy 320.8894 97.54655) (xy 320.8894 97.487371) (xy 320.851853 97.202175) + (xy 320.777402 96.92432) (xy 320.66732 96.658559) (xy 320.667318 96.658556) (xy 320.667316 96.658551) + (xy 320.523495 96.409448) (xy 320.523491 96.409441) (xy 320.419569 96.274007) (xy 320.348378 96.181228) + (xy 320.348372 96.181221) (xy 320.144978 95.977827) (xy 320.144971 95.977821) (xy 319.916767 95.802715) + (xy 319.916765 95.802713) (xy 319.916759 95.802709) (xy 319.916754 95.802706) (xy 319.916751 95.802704) + (xy 319.667648 95.658883) (xy 319.667631 95.658875) (xy 319.401878 95.548797) (xy 319.124023 95.474346) + (xy 318.838838 95.436801) (xy 318.838835 95.4368) (xy 318.838829 95.4368) (xy 318.551171 95.4368) + (xy 318.551165 95.4368) (xy 318.551161 95.436801) (xy 318.265976 95.474346) (xy 317.988121 95.548797) + (xy 317.722368 95.658875) (xy 317.722351 95.658883) (xy 317.473248 95.802704) (xy 317.473232 95.802715) + (xy 317.245028 95.977821) (xy 317.245021 95.977827) (xy 317.041627 96.181221) (xy 316.97043 96.274007) + (xy 316.914001 96.315209) (xy 316.844255 96.319364) (xy 316.783335 96.285151) (xy 316.750583 96.223434) + (xy 316.756396 96.153807) (xy 316.764661 96.136531) (xy 316.817863 96.044383) (xy 316.925742 95.783939) + (xy 316.998704 95.511642) (xy 317.0355 95.232151) (xy 317.0355 94.950249) (xy 316.998704 94.670758) + (xy 316.925742 94.398461) (xy 316.817863 94.138017) (xy 316.817861 94.138014) (xy 316.817859 94.138009) + (xy 316.676916 93.89389) (xy 316.676912 93.893883) (xy 316.5053 93.670235) (xy 316.505298 93.670233) + (xy 316.505295 93.670229) (xy 316.30597 93.470904) (xy 316.224266 93.40821) (xy 316.082317 93.299288) + (xy 316.082311 93.299284) (xy 316.082309 93.299283) (xy 315.83819 93.15834) (xy 315.838179 93.158335) + (xy 315.577743 93.050459) (xy 315.305439 92.977495) (xy 315.025958 92.9407) (xy 315.025951 92.9407) + (xy 314.744049 92.9407) (xy 314.744041 92.9407) (xy 314.46456 92.977495) (xy 314.192256 93.050459) + (xy 313.93182 93.158335) (xy 313.931809 93.15834) (xy 313.687692 93.299281) (xy 313.687683 93.299288) + (xy 313.667106 93.315076) (xy 313.601938 93.34027) (xy 313.591622 93.3407) (xy 310.259998 93.3407) + (xy 310.259981 93.340701) (xy 310.157203 93.3512) (xy 310.1572 93.351201) (xy 309.990668 93.406385) + (xy 309.990663 93.406387) (xy 309.841342 93.498489) (xy 309.717289 93.622542) (xy 309.625187 93.771863) + (xy 309.625186 93.771866) (xy 309.570001 93.938403) (xy 309.570001 93.938404) (xy 309.57 93.938404) + (xy 309.5595 94.041183) (xy 297.731385 94.041183) (xy 297.752712 94.019856) (xy 297.844814 93.870534) + (xy 297.899999 93.703997) (xy 297.9105 93.601209) (xy 297.910499 91.501192) (xy 297.899999 91.398403) + (xy 297.844814 91.231866) (xy 297.752712 91.082544) (xy 297.628656 90.958488) (xy 297.479334 90.866386) + (xy 297.312797 90.811201) (xy 297.312795 90.8112) (xy 297.210016 90.8007) (xy 297.210009 90.8007) + (xy 295.498406 90.8007) (xy 295.450953 90.791261) (xy 295.404454 90.772) (xy 295.404453 90.772) + (xy 294.430253 90.772) (xy 294.339747 90.772) (xy 294.339745 90.772) (xy 294.307522 90.785347) (xy 294.293245 90.791261) + (xy 294.245794 90.8007) (xy 293.878379 90.8007) (xy 293.81134 90.781015) (xy 293.802893 90.775076) + (xy 293.782326 90.759294) (xy 293.782309 90.759283) (xy 293.53819 90.61834) (xy 293.53817 90.618331) + (xy 293.534613 90.616857) (xy 293.534611 90.616857) (xy 293.277743 90.510459) (xy 293.260236 90.505768) + (xy 304.28825 90.505768) (xy 304.28825 90.786631) (xy 304.319692 91.065694) (xy 304.319695 91.065712) + (xy 304.382189 91.339517) (xy 304.382193 91.339529) (xy 304.47495 91.604611) (xy 304.596803 91.857642) + (xy 304.597318 91.858461) (xy 304.746227 92.095448) (xy 304.921334 92.315025) (xy 305.119925 92.513616) + (xy 305.339502 92.688723) (xy 305.577305 92.838145) (xy 305.830342 92.960001) (xy 306.001552 93.01991) + (xy 306.09542 93.052756) (xy 306.095432 93.05276) (xy 306.369241 93.115255) (xy 306.369247 93.115255) + (xy 306.369255 93.115257) (xy 306.51263 93.131411) (xy 306.648319 93.146699) (xy 306.648322 93.1467) + (xy 306.648325 93.1467) (xy 306.929178 93.1467) (xy 306.929179 93.146699) (xy 307.071805 93.130629) + (xy 307.208244 93.115257) (xy 307.208249 93.115256) (xy 307.208259 93.115255) (xy 307.482068 93.05276) + (xy 307.747158 92.960001) (xy 308.000195 92.838145) (xy 308.237998 92.688723) (xy 308.457575 92.513616) + (xy 308.56095 92.410241) (xy 319.0845 92.410241) (xy 319.0845 92.692158) (xy 319.121295 92.971639) + (xy 319.194259 93.243943) (xy 319.302135 93.504379) (xy 319.30214 93.50439) (xy 319.443083 93.748509) + (xy 319.443088 93.748517) (xy 319.588794 93.938404) (xy 319.614704 93.97217) (xy 319.814029 94.171495) + (xy 319.814033 94.171498) (xy 319.814035 94.1715) (xy 320.037683 94.343112) (xy 320.03769 94.343116) + (xy 320.281809 94.484059) (xy 320.281814 94.484061) (xy 320.281817 94.484063) (xy 320.542261 94.591942) + (xy 320.814558 94.664904) (xy 321.094049 94.7017) (xy 321.094056 94.7017) (xy 321.375944 94.7017) + (xy 321.375951 94.7017) (xy 321.655442 94.664904) (xy 321.927739 94.591942) (xy 322.188183 94.484063) + (xy 322.432317 94.343112) (xy 322.452892 94.327323) (xy 322.51806 94.302129) (xy 322.528379 94.301699) + (xy 323.709982 94.301699) (xy 323.709991 94.3017) (xy 325.860008 94.301699) (xy 325.962797 94.291199) + (xy 326.129334 94.236014) (xy 326.278656 94.143912) (xy 326.381385 94.041183) (xy 338.1345 94.041183) + (xy 338.1345 96.141201) (xy 338.134501 96.141218) (xy 338.145 96.243996) (xy 338.145001 96.243999) + (xy 338.154945 96.274007) (xy 338.200186 96.410534) (xy 338.292288 96.559856) (xy 338.416344 96.683912) + (xy 338.565666 96.776014) (xy 338.732203 96.831199) (xy 338.834991 96.8417) (xy 340.762118 96.841699) + (xy 340.762127 96.8417) (xy 341.190851 96.841699) (xy 341.257889 96.861383) (xy 341.303644 96.914187) + (xy 341.313588 96.983346) (xy 341.291169 97.038583) (xy 341.270151 97.067511) (xy 341.193296 97.218346) + (xy 341.140981 97.379352) (xy 341.1145 97.54655) (xy 341.1145 97.715849) (xy 341.140981 97.883047) + (xy 341.193296 98.044053) (xy 341.270152 98.194888) (xy 341.369648 98.331834) (xy 341.369652 98.331839) + (xy 341.48936 98.451547) (xy 341.489365 98.451551) (xy 341.566373 98.5075) (xy 341.626315 98.55105) + (xy 341.719641 98.598602) (xy 341.777146 98.627903) (xy 341.777148 98.627903) (xy 341.777151 98.627905) + (xy 341.861344 98.655261) (xy 341.938152 98.680218) (xy 342.105351 98.7067) (xy 342.105356 98.7067) + (xy 342.274649 98.7067) (xy 342.441847 98.680218) (xy 342.602849 98.627905) (xy 342.753685 98.55105) + (xy 342.890641 98.451546) (xy 343.010346 98.331841) (xy 343.10985 98.194885) (xy 343.186705 98.044049) + (xy 343.239018 97.883047) (xy 343.256125 97.775038) (xy 343.2655 97.715849) (xy 343.2655 97.54655) + (xy 343.239928 97.385098) (xy 343.248882 97.315805) (xy 343.293879 97.262353) (xy 343.36063 97.241713) + (xy 343.362401 97.2417) (xy 343.600944 97.2417) (xy 343.600951 97.2417) (xy 343.880442 97.204904) + (xy 344.152739 97.131942) (xy 344.413183 97.024063) (xy 344.657317 96.883112) (xy 344.880965 96.7115) + (xy 345.0803 96.512165) (xy 345.147992 96.423946) (xy 345.20442 96.382744) (xy 345.274166 96.378589) + (xy 345.335086 96.412801) (xy 345.367839 96.474518) (xy 345.362026 96.544146) (xy 345.353755 96.561433) + (xy 345.297683 96.658551) (xy 345.297675 96.658568) (xy 345.187597 96.924321) (xy 345.113146 97.202176) + (xy 345.075601 97.487361) (xy 345.0756 97.487377) (xy 345.0756 97.775022) (xy 345.075601 97.775038) + (xy 345.113146 98.060223) (xy 345.187597 98.338078) (xy 345.297675 98.603831) (xy 345.297683 98.603848) + (xy 345.441504 98.852951) (xy 345.441515 98.852967) (xy 345.616621 99.081171) (xy 345.616627 99.081178) + (xy 345.820021 99.284572) (xy 345.820028 99.284578) (xy 345.953307 99.386846) (xy 346.048241 99.459691) + (xy 346.048248 99.459695) (xy 346.297351 99.603516) (xy 346.297356 99.603518) (xy 346.297359 99.60352) + (xy 346.297363 99.603521) (xy 346.297368 99.603524) (xy 346.390975 99.642297) (xy 346.56312 99.713602) + (xy 346.840975 99.788053) (xy 347.126171 99.8256) (xy 347.126178 99.8256) (xy 347.413822 99.8256) + (xy 347.413829 99.8256) (xy 347.699025 99.788053) (xy 347.97688 99.713602) (xy 348.242641 99.60352) + (xy 348.491759 99.459691) (xy 348.719973 99.284577) (xy 348.923377 99.081173) (xy 349.098491 98.852959) + (xy 349.24232 98.603841) (xy 349.352402 98.33808) (xy 349.426853 98.060225) (xy 349.4644 97.775029) + (xy 349.4644 97.54655) (xy 351.2745 97.54655) (xy 351.2745 97.715849) (xy 351.300981 97.883047) + (xy 351.353296 98.044053) (xy 351.430152 98.194888) (xy 351.529648 98.331834) (xy 351.529652 98.331839) + (xy 351.64936 98.451547) (xy 351.649365 98.451551) (xy 351.726373 98.5075) (xy 351.786315 98.55105) + (xy 351.879641 98.598602) (xy 351.937146 98.627903) (xy 351.937148 98.627903) (xy 351.937151 98.627905) + (xy 352.021344 98.655261) (xy 352.098152 98.680218) (xy 352.265351 98.7067) (xy 352.265356 98.7067) + (xy 352.434649 98.7067) (xy 352.601847 98.680218) (xy 352.762849 98.627905) (xy 352.913685 98.55105) + (xy 353.050641 98.451546) (xy 353.170346 98.331841) (xy 353.26985 98.194885) (xy 353.346705 98.044049) + (xy 353.399018 97.883047) (xy 353.416125 97.775038) (xy 353.4255 97.715849) (xy 353.4255 97.54655) + (xy 353.399018 97.379352) (xy 353.354296 97.241713) (xy 353.346705 97.218351) (xy 353.346703 97.218348) + (xy 353.346703 97.218346) (xy 353.302676 97.13194) (xy 353.26985 97.067515) (xy 353.238281 97.024064) + (xy 353.170351 96.930565) (xy 353.170347 96.93056) (xy 353.050639 96.810852) (xy 353.050634 96.810848) + (xy 352.913688 96.711352) (xy 352.913687 96.711351) (xy 352.913685 96.71135) (xy 352.859831 96.68391) + (xy 352.762853 96.634496) (xy 352.601847 96.582181) (xy 352.434649 96.5557) (xy 352.434644 96.5557) + (xy 352.265356 96.5557) (xy 352.265351 96.5557) (xy 352.098152 96.582181) (xy 351.937146 96.634496) + (xy 351.786311 96.711352) (xy 351.649365 96.810848) (xy 351.64936 96.810852) (xy 351.529652 96.93056) + (xy 351.529648 96.930565) (xy 351.430152 97.067511) (xy 351.353296 97.218346) (xy 351.300981 97.379352) + (xy 351.2745 97.54655) (xy 349.4644 97.54655) (xy 349.4644 97.487371) (xy 349.426853 97.202175) + (xy 349.352402 96.92432) (xy 349.24232 96.658559) (xy 349.242318 96.658556) (xy 349.242316 96.658551) + (xy 349.098495 96.409448) (xy 349.098491 96.409441) (xy 348.994569 96.274007) (xy 348.923378 96.181228) + (xy 348.923372 96.181221) (xy 348.719978 95.977827) (xy 348.719971 95.977821) (xy 348.491767 95.802715) + (xy 348.491765 95.802713) (xy 348.491759 95.802709) (xy 348.491754 95.802706) (xy 348.491751 95.802704) + (xy 348.242648 95.658883) (xy 348.242631 95.658875) (xy 347.976878 95.548797) (xy 347.699023 95.474346) + (xy 347.413838 95.436801) (xy 347.413835 95.4368) (xy 347.413829 95.4368) (xy 347.126171 95.4368) + (xy 347.126165 95.4368) (xy 347.126161 95.436801) (xy 346.840976 95.474346) (xy 346.563121 95.548797) + (xy 346.297368 95.658875) (xy 346.297351 95.658883) (xy 346.048248 95.802704) (xy 346.048232 95.802715) + (xy 345.820028 95.977821) (xy 345.820021 95.977827) (xy 345.616627 96.181221) (xy 345.54543 96.274007) + (xy 345.489001 96.315209) (xy 345.419255 96.319364) (xy 345.358335 96.285151) (xy 345.325583 96.223434) + (xy 345.331396 96.153807) (xy 345.339661 96.136531) (xy 345.392863 96.044383) (xy 345.500742 95.783939) + (xy 345.573704 95.511642) (xy 345.6105 95.232151) (xy 345.6105 94.950249) (xy 345.573704 94.670758) + (xy 345.500742 94.398461) (xy 345.392863 94.138017) (xy 345.392861 94.138014) (xy 345.392859 94.138009) + (xy 345.251916 93.89389) (xy 345.251912 93.893883) (xy 345.0803 93.670235) (xy 345.080298 93.670233) + (xy 345.080295 93.670229) (xy 344.88097 93.470904) (xy 344.799266 93.40821) (xy 344.657317 93.299288) + (xy 344.657311 93.299284) (xy 344.657309 93.299283) (xy 344.41319 93.15834) (xy 344.413179 93.158335) + (xy 344.152743 93.050459) (xy 343.880439 92.977495) (xy 343.600958 92.9407) (xy 343.600951 92.9407) + (xy 343.319049 92.9407) (xy 343.319041 92.9407) (xy 343.03956 92.977495) (xy 342.767256 93.050459) + (xy 342.50682 93.158335) (xy 342.506809 93.15834) (xy 342.262692 93.299281) (xy 342.262683 93.299288) + (xy 342.242106 93.315076) (xy 342.176938 93.34027) (xy 342.166622 93.3407) (xy 338.834998 93.3407) + (xy 338.834981 93.340701) (xy 338.732203 93.3512) (xy 338.7322 93.351201) (xy 338.565668 93.406385) + (xy 338.565663 93.406387) (xy 338.416342 93.498489) (xy 338.292289 93.622542) (xy 338.200187 93.771863) + (xy 338.200186 93.771866) (xy 338.145001 93.938403) (xy 338.145001 93.938404) (xy 338.145 93.938404) + (xy 338.1345 94.041183) (xy 326.381385 94.041183) (xy 326.402712 94.019856) (xy 326.494814 93.870534) + (xy 326.549999 93.703997) (xy 326.5605 93.601209) (xy 326.560499 91.501192) (xy 326.549999 91.398403) + (xy 326.494814 91.231866) (xy 326.402712 91.082544) (xy 326.278656 90.958488) (xy 326.129334 90.866386) + (xy 325.962797 90.811201) (xy 325.962795 90.8112) (xy 325.860016 90.8007) (xy 325.860009 90.8007) + (xy 324.148406 90.8007) (xy 324.100953 90.791261) (xy 324.054454 90.772) (xy 324.054453 90.772) + (xy 323.080253 90.772) (xy 322.487561 90.772) (xy 322.425561 90.755387) (xy 322.18819 90.61834) + (xy 322.18817 90.618331) (xy 322.184613 90.616857) (xy 322.184611 90.616857) (xy 321.927743 90.510459) + (xy 321.910236 90.505768) (xy 328.10075 90.505768) (xy 328.10075 90.786631) (xy 328.132192 91.065694) + (xy 328.132195 91.065712) (xy 328.194689 91.339517) (xy 328.194693 91.339529) (xy 328.28745 91.604611) + (xy 328.409303 91.857642) (xy 328.409818 91.858461) (xy 328.558727 92.095448) (xy 328.733834 92.315025) + (xy 328.932425 92.513616) (xy 329.152002 92.688723) (xy 329.389805 92.838145) (xy 329.642842 92.960001) + (xy 329.814052 93.01991) (xy 329.90792 93.052756) (xy 329.907932 93.05276) (xy 330.181741 93.115255) + (xy 330.181747 93.115255) (xy 330.181755 93.115257) (xy 330.32513 93.131411) (xy 330.460819 93.146699) + (xy 330.460822 93.1467) (xy 330.460825 93.1467) (xy 330.741678 93.1467) (xy 330.741679 93.146699) + (xy 330.884305 93.130629) (xy 331.020744 93.115257) (xy 331.020749 93.115256) (xy 331.020759 93.115255) + (xy 331.294568 93.05276) (xy 331.559658 92.960001) (xy 331.812695 92.838145) (xy 332.050498 92.688723) + (xy 332.270075 92.513616) (xy 332.37345 92.410241) (xy 347.6595 92.410241) (xy 347.6595 92.692158) + (xy 347.696295 92.971639) (xy 347.769259 93.243943) (xy 347.877135 93.504379) (xy 347.87714 93.50439) + (xy 348.018083 93.748509) (xy 348.018088 93.748517) (xy 348.163794 93.938404) (xy 348.189704 93.97217) + (xy 348.389029 94.171495) (xy 348.389033 94.171498) (xy 348.389035 94.1715) (xy 348.612683 94.343112) + (xy 348.61269 94.343116) (xy 348.856809 94.484059) (xy 348.856814 94.484061) (xy 348.856817 94.484063) + (xy 349.117261 94.591942) (xy 349.389558 94.664904) (xy 349.669049 94.7017) (xy 349.669056 94.7017) + (xy 349.950944 94.7017) (xy 349.950951 94.7017) (xy 350.230442 94.664904) (xy 350.502739 94.591942) + (xy 350.763183 94.484063) (xy 351.007317 94.343112) (xy 351.027892 94.327323) (xy 351.09306 94.302129) + (xy 351.103379 94.301699) (xy 352.284982 94.301699) (xy 352.284991 94.3017) (xy 354.435008 94.301699) + (xy 354.537797 94.291199) (xy 354.704334 94.236014) (xy 354.853656 94.143912) (xy 354.977712 94.019856) + (xy 355.069814 93.870534) (xy 355.124999 93.703997) (xy 355.1355 93.601209) (xy 355.135499 91.501192) + (xy 355.124999 91.398403) (xy 355.069814 91.231866) (xy 354.977712 91.082544) (xy 354.853656 90.958488) + (xy 354.704334 90.866386) (xy 354.537797 90.811201) (xy 354.537795 90.8112) (xy 354.435016 90.8007) + (xy 354.435009 90.8007) (xy 352.482881 90.8007) (xy 352.482873 90.8007) (xy 351.749206 90.8007) + (xy 351.701753 90.791261) (xy 351.655253 90.772) (xy 351.062561 90.772) (xy 351.000561 90.755387) + (xy 350.76319 90.61834) (xy 350.763179 90.618335) (xy 350.502743 90.510459) (xy 350.230439 90.437495) + (xy 349.950958 90.4007) (xy 349.950951 90.4007) (xy 349.669049 90.4007) (xy 349.669041 90.4007) + (xy 349.38956 90.437495) (xy 349.117256 90.510459) (xy 348.85682 90.618335) (xy 348.856809 90.61834) + (xy 348.61269 90.759283) (xy 348.612684 90.759287) (xy 348.612683 90.759288) (xy 348.592108 90.775076) + (xy 348.389029 90.930904) (xy 348.189704 91.130229) (xy 348.111715 91.231866) (xy 348.029112 91.339517) + (xy 348.018089 91.353882) (xy 348.018083 91.35389) (xy 347.87714 91.598009) (xy 347.877135 91.59802) + (xy 347.769259 91.858456) (xy 347.696295 92.13076) (xy 347.6595 92.410241) (xy 332.37345 92.410241) + (xy 332.468666 92.315025) (xy 332.643773 92.095448) (xy 332.793195 91.857645) (xy 332.915051 91.604608) + (xy 333.00781 91.339518) (xy 333.070305 91.065709) (xy 333.10175 90.786625) (xy 333.10175 90.505775) + (xy 333.070305 90.226691) (xy 333.00781 89.952882) (xy 332.915051 89.687792) (xy 332.793195 89.434755) + (xy 332.643773 89.196952) (xy 332.468666 88.977375) (xy 332.270075 88.778784) (xy 332.050498 88.603677) + (xy 331.812695 88.454255) (xy 331.812692 88.454253) (xy 331.559661 88.3324) (xy 331.294579 88.239643) + (xy 331.294567 88.239639) (xy 331.020762 88.177145) (xy 331.020744 88.177142) (xy 330.741681 88.1457) + (xy 330.741675 88.1457) (xy 330.460825 88.1457) (xy 330.460818 88.1457) (xy 330.181755 88.177142) + (xy 330.181737 88.177145) (xy 329.907932 88.239639) (xy 329.90792 88.239643) (xy 329.642838 88.3324) + (xy 329.389807 88.454253) (xy 329.152003 88.603676) (xy 328.932425 88.778783) (xy 328.733833 88.977375) + (xy 328.558726 89.196953) (xy 328.409303 89.434757) (xy 328.28745 89.687788) (xy 328.194693 89.95287) + (xy 328.194689 89.952882) (xy 328.132195 90.226687) (xy 328.132192 90.226705) (xy 328.10075 90.505768) + (xy 321.910236 90.505768) (xy 321.655439 90.437495) (xy 321.375958 90.4007) (xy 321.375951 90.4007) + (xy 321.094049 90.4007) (xy 321.094041 90.4007) (xy 320.81456 90.437495) (xy 320.542256 90.510459) + (xy 320.28182 90.618335) (xy 320.281809 90.61834) (xy 320.03769 90.759283) (xy 320.037684 90.759287) + (xy 320.037683 90.759288) (xy 320.017108 90.775076) (xy 319.814029 90.930904) (xy 319.614704 91.130229) + (xy 319.536715 91.231866) (xy 319.454112 91.339517) (xy 319.443089 91.353882) (xy 319.443083 91.35389) + (xy 319.30214 91.598009) (xy 319.302135 91.59802) (xy 319.194259 91.858456) (xy 319.121295 92.13076) + (xy 319.0845 92.410241) (xy 308.56095 92.410241) (xy 308.656166 92.315025) (xy 308.831273 92.095448) + (xy 308.980695 91.857645) (xy 309.102551 91.604608) (xy 309.19531 91.339518) (xy 309.257805 91.065709) + (xy 309.28925 90.786625) (xy 309.28925 90.505775) (xy 309.257805 90.226691) (xy 309.19531 89.952882) + (xy 309.102551 89.687792) (xy 308.980695 89.434755) (xy 308.831273 89.196952) (xy 308.656166 88.977375) + (xy 308.457575 88.778784) (xy 308.237998 88.603677) (xy 308.000195 88.454255) (xy 308.000192 88.454253) + (xy 307.747161 88.3324) (xy 307.482079 88.239643) (xy 307.482067 88.239639) (xy 307.208262 88.177145) + (xy 307.208244 88.177142) (xy 306.929181 88.1457) (xy 306.929175 88.1457) (xy 306.648325 88.1457) + (xy 306.648318 88.1457) (xy 306.369255 88.177142) (xy 306.369237 88.177145) (xy 306.095432 88.239639) + (xy 306.09542 88.239643) (xy 305.830338 88.3324) (xy 305.577307 88.454253) (xy 305.339503 88.603676) + (xy 305.119925 88.778783) (xy 304.921333 88.977375) (xy 304.746226 89.196953) (xy 304.596803 89.434757) + (xy 304.47495 89.687788) (xy 304.382193 89.95287) (xy 304.382189 89.952882) (xy 304.319695 90.226687) + (xy 304.319692 90.226705) (xy 304.28825 90.505768) (xy 293.260236 90.505768) (xy 293.005439 90.437495) + (xy 292.725958 90.4007) (xy 292.725951 90.4007) (xy 292.444049 90.4007) (xy 292.444041 90.4007) + (xy 292.16456 90.437495) (xy 291.892256 90.510459) (xy 291.63182 90.618335) (xy 291.631809 90.61834) + (xy 291.38769 90.759283) (xy 291.387684 90.759287) (xy 291.387683 90.759288) (xy 291.367108 90.775076) + (xy 291.164029 90.930904) (xy 290.964704 91.130229) (xy 290.886715 91.231866) (xy 290.804112 91.339517) + (xy 290.793089 91.353882) (xy 290.793083 91.35389) (xy 290.65214 91.598009) (xy 290.652135 91.59802) + (xy 290.544259 91.858456) (xy 290.471295 92.13076) (xy 290.4345 92.410241) (xy 278.882999 92.410241) + (xy 278.882999 91.501192) (xy 278.872499 91.398403) (xy 278.817314 91.231866) (xy 278.725212 91.082544) + (xy 278.601156 90.958488) (xy 278.451834 90.866386) (xy 278.285297 90.811201) (xy 278.285295 90.8112) + (xy 278.182516 90.8007) (xy 278.182509 90.8007) (xy 276.230381 90.8007) (xy 276.230373 90.8007) + (xy 275.496706 90.8007) (xy 275.449253 90.791261) (xy 275.402753 90.772) (xy 274.810061 90.772) + (xy 274.748061 90.755387) (xy 274.51069 90.61834) (xy 274.510679 90.618335) (xy 274.250243 90.510459) + (xy 273.977939 90.437495) (xy 273.698458 90.4007) (xy 273.698451 90.4007) (xy 273.416549 90.4007) + (xy 273.416541 90.4007) (xy 273.13706 90.437495) (xy 272.864756 90.510459) (xy 272.60432 90.618335) + (xy 272.604309 90.61834) (xy 272.36019 90.759283) (xy 272.360184 90.759287) (xy 272.360183 90.759288) + (xy 272.339608 90.775076) (xy 272.136529 90.930904) (xy 271.937204 91.130229) (xy 271.859215 91.231866) + (xy 271.776612 91.339517) (xy 271.765589 91.353882) (xy 271.765583 91.35389) (xy 271.62464 91.598009) + (xy 271.624635 91.59802) (xy 271.516759 91.858456) (xy 271.443795 92.13076) (xy 271.407 92.410241) + (xy 259.832999 92.410241) (xy 259.832999 91.501192) (xy 259.822499 91.398403) (xy 259.767314 91.231866) + (xy 259.675212 91.082544) (xy 259.551156 90.958488) (xy 259.401834 90.866386) (xy 259.235297 90.811201) + (xy 259.235295 90.8112) (xy 259.132516 90.8007) (xy 259.132509 90.8007) (xy 257.180381 90.8007) + (xy 257.180373 90.8007) (xy 256.446706 90.8007) (xy 256.399253 90.791261) (xy 256.352753 90.772) + (xy 255.760061 90.772) (xy 255.698061 90.755387) (xy 255.46069 90.61834) (xy 255.460679 90.618335) + (xy 255.200243 90.510459) (xy 254.927939 90.437495) (xy 254.648458 90.4007) (xy 254.648451 90.4007) + (xy 254.366549 90.4007) (xy 254.366541 90.4007) (xy 254.08706 90.437495) (xy 253.814756 90.510459) + (xy 253.55432 90.618335) (xy 253.554309 90.61834) (xy 253.31019 90.759283) (xy 253.310184 90.759287) + (xy 253.310183 90.759288) (xy 253.289608 90.775076) (xy 253.086529 90.930904) (xy 252.887204 91.130229) + (xy 252.809215 91.231866) (xy 252.726612 91.339517) (xy 252.715589 91.353882) (xy 252.715583 91.35389) + (xy 252.57464 91.598009) (xy 252.574635 91.59802) (xy 252.466759 91.858456) (xy 252.393795 92.13076) + (xy 252.357 92.410241) (xy 240.782999 92.410241) (xy 240.782999 91.501192) (xy 240.772499 91.398403) + (xy 240.717314 91.231866) (xy 240.625212 91.082544) (xy 240.501156 90.958488) (xy 240.351834 90.866386) + (xy 240.185297 90.811201) (xy 240.185295 90.8112) (xy 240.082516 90.8007) (xy 240.082509 90.8007) + (xy 238.130381 90.8007) (xy 238.130373 90.8007) (xy 237.396706 90.8007) (xy 237.349253 90.791261) + (xy 237.302753 90.772) (xy 236.710061 90.772) (xy 236.648061 90.755387) (xy 236.41069 90.61834) + (xy 236.410679 90.618335) (xy 236.150243 90.510459) (xy 235.877939 90.437495) (xy 235.598458 90.4007) + (xy 235.598451 90.4007) (xy 235.316549 90.4007) (xy 235.316541 90.4007) (xy 235.03706 90.437495) + (xy 234.764756 90.510459) (xy 234.50432 90.618335) (xy 234.504309 90.61834) (xy 234.26019 90.759283) + (xy 234.260184 90.759287) (xy 234.260183 90.759288) (xy 234.239608 90.775076) (xy 234.036529 90.930904) + (xy 233.837204 91.130229) (xy 233.759215 91.231866) (xy 233.676612 91.339517) (xy 233.665589 91.353882) + (xy 233.665583 91.35389) (xy 233.52464 91.598009) (xy 233.524635 91.59802) (xy 233.416759 91.858456) + (xy 233.343795 92.13076) (xy 233.307 92.410241) (xy 221.732999 92.410241) (xy 221.732999 91.501192) + (xy 221.722499 91.398403) (xy 221.667314 91.231866) (xy 221.575212 91.082544) (xy 221.451156 90.958488) + (xy 221.301834 90.866386) (xy 221.135297 90.811201) (xy 221.135295 90.8112) (xy 221.032516 90.8007) + (xy 221.032509 90.8007) (xy 219.080381 90.8007) (xy 219.080373 90.8007) (xy 218.346706 90.8007) + (xy 218.299253 90.791261) (xy 218.252753 90.772) (xy 217.660061 90.772) (xy 217.598061 90.755387) + (xy 217.36069 90.61834) (xy 217.360679 90.618335) (xy 217.100243 90.510459) (xy 216.827939 90.437495) + (xy 216.548458 90.4007) (xy 216.548451 90.4007) (xy 216.266549 90.4007) (xy 216.266541 90.4007) + (xy 215.98706 90.437495) (xy 215.714756 90.510459) (xy 215.45432 90.618335) (xy 215.454309 90.61834) + (xy 215.21019 90.759283) (xy 215.210184 90.759287) (xy 215.210183 90.759288) (xy 215.189608 90.775076) + (xy 214.986529 90.930904) (xy 214.787204 91.130229) (xy 214.709215 91.231866) (xy 214.626612 91.339517) + (xy 214.615589 91.353882) (xy 214.615583 91.35389) (xy 214.47464 91.598009) (xy 214.474635 91.59802) + (xy 214.366759 91.858456) (xy 214.293795 92.13076) (xy 214.257 92.410241) (xy 202.682999 92.410241) + (xy 202.682999 91.501192) (xy 202.672499 91.398403) (xy 202.617314 91.231866) (xy 202.525212 91.082544) + (xy 202.401156 90.958488) (xy 202.251834 90.866386) (xy 202.085297 90.811201) (xy 202.085295 90.8112) + (xy 201.982516 90.8007) (xy 201.982509 90.8007) (xy 200.270906 90.8007) (xy 200.223453 90.791261) + (xy 200.176954 90.772) (xy 200.176953 90.772) (xy 199.202753 90.772) (xy 198.610061 90.772) (xy 198.548061 90.755387) + (xy 198.31069 90.61834) (xy 198.310679 90.618335) (xy 198.050243 90.510459) (xy 197.777939 90.437495) + (xy 197.498458 90.4007) (xy 197.498451 90.4007) (xy 197.216549 90.4007) (xy 197.216541 90.4007) + (xy 196.93706 90.437495) (xy 196.664756 90.510459) (xy 196.40432 90.618335) (xy 196.404309 90.61834) + (xy 196.16019 90.759283) (xy 196.160184 90.759287) (xy 196.160183 90.759288) (xy 196.139608 90.775076) + (xy 195.936529 90.930904) (xy 195.737204 91.130229) (xy 195.659215 91.231866) (xy 195.576612 91.339517) + (xy 195.565589 91.353882) (xy 195.565583 91.35389) (xy 195.42464 91.598009) (xy 195.424635 91.59802) + (xy 195.316759 91.858456) (xy 195.243795 92.13076) (xy 195.207 92.410241) (xy 183.632999 92.410241) + (xy 183.632999 91.501192) (xy 183.622499 91.398403) (xy 183.567314 91.231866) (xy 183.475212 91.082544) + (xy 183.351156 90.958488) (xy 183.201834 90.866386) (xy 183.035297 90.811201) (xy 183.035295 90.8112) + (xy 182.932516 90.8007) (xy 182.932509 90.8007) (xy 181.220906 90.8007) (xy 181.173453 90.791261) + (xy 181.126954 90.772) (xy 181.126953 90.772) (xy 180.152753 90.772) (xy 180.062247 90.772) (xy 180.062245 90.772) + (xy 180.030022 90.785347) (xy 180.015745 90.791261) (xy 179.968294 90.8007) (xy 179.600879 90.8007) + (xy 179.53384 90.781015) (xy 179.525393 90.775076) (xy 179.504826 90.759294) (xy 179.504809 90.759283) + (xy 179.26069 90.61834) (xy 179.260679 90.618335) (xy 179.000243 90.510459) (xy 178.727939 90.437495) + (xy 178.448458 90.4007) (xy 178.448451 90.4007) (xy 178.166549 90.4007) (xy 178.166541 90.4007) + (xy 177.88706 90.437495) (xy 177.614756 90.510459) (xy 177.35432 90.618335) (xy 177.354309 90.61834) + (xy 177.11019 90.759283) (xy 177.110184 90.759287) (xy 177.110183 90.759288) (xy 177.089608 90.775076) + (xy 176.886529 90.930904) (xy 176.687204 91.130229) (xy 176.609215 91.231866) (xy 176.526612 91.339517) + (xy 176.515589 91.353882) (xy 176.515583 91.35389) (xy 176.37464 91.598009) (xy 176.374635 91.59802) + (xy 176.266759 91.858456) (xy 176.193795 92.13076) (xy 176.157 92.410241) (xy 164.582999 92.410241) + (xy 164.582999 91.501192) (xy 164.572499 91.398403) (xy 164.517314 91.231866) (xy 164.425212 91.082544) + (xy 164.301156 90.958488) (xy 164.151834 90.866386) (xy 163.985297 90.811201) (xy 163.985295 90.8112) + (xy 163.882516 90.8007) (xy 163.882509 90.8007) (xy 162.170906 90.8007) (xy 162.123453 90.791261) + (xy 162.076954 90.772) (xy 162.076953 90.772) (xy 161.102753 90.772) (xy 160.510061 90.772) (xy 160.448061 90.755387) + (xy 160.21069 90.61834) (xy 160.210679 90.618335) (xy 159.950243 90.510459) (xy 159.677939 90.437495) + (xy 159.398458 90.4007) (xy 159.398451 90.4007) (xy 159.116549 90.4007) (xy 159.116541 90.4007) + (xy 158.83706 90.437495) (xy 158.564756 90.510459) (xy 158.30432 90.618335) (xy 158.304309 90.61834) + (xy 158.06019 90.759283) (xy 158.060184 90.759287) (xy 158.060183 90.759288) (xy 158.039608 90.775076) + (xy 157.836529 90.930904) (xy 157.637204 91.130229) (xy 157.559215 91.231866) (xy 157.476612 91.339517) + (xy 157.465589 91.353882) (xy 157.465583 91.35389) (xy 157.32464 91.598009) (xy 157.324635 91.59802) + (xy 157.216759 91.858456) (xy 157.143795 92.13076) (xy 157.107 92.410241) (xy 145.532999 92.410241) + (xy 145.532999 91.501192) (xy 145.522499 91.398403) (xy 145.467314 91.231866) (xy 145.375212 91.082544) + (xy 145.251156 90.958488) (xy 145.101834 90.866386) (xy 144.935297 90.811201) (xy 144.935295 90.8112) + (xy 144.832516 90.8007) (xy 144.832509 90.8007) (xy 142.880381 90.8007) (xy 142.880373 90.8007) + (xy 142.146706 90.8007) (xy 142.099253 90.791261) (xy 142.052753 90.772) (xy 141.460061 90.772) + (xy 141.398061 90.755387) (xy 141.16069 90.61834) (xy 141.160679 90.618335) (xy 140.900243 90.510459) + (xy 140.627939 90.437495) (xy 140.348458 90.4007) (xy 140.348451 90.4007) (xy 140.066549 90.4007) + (xy 140.066541 90.4007) (xy 139.78706 90.437495) (xy 139.514756 90.510459) (xy 139.25432 90.618335) + (xy 139.254309 90.61834) (xy 139.01019 90.759283) (xy 139.010184 90.759287) (xy 139.010183 90.759288) + (xy 138.989608 90.775076) (xy 138.786529 90.930904) (xy 138.587204 91.130229) (xy 138.509215 91.231866) + (xy 138.426612 91.339517) (xy 138.415589 91.353882) (xy 138.415583 91.35389) (xy 138.27464 91.598009) + (xy 138.274635 91.59802) (xy 138.166759 91.858456) (xy 138.093795 92.13076) (xy 138.057 92.410241) + (xy 126.482999 92.410241) (xy 126.482999 91.501192) (xy 126.472499 91.398403) (xy 126.417314 91.231866) + (xy 126.325212 91.082544) (xy 126.201156 90.958488) (xy 126.051834 90.866386) (xy 125.885297 90.811201) + (xy 125.885295 90.8112) (xy 125.782516 90.8007) (xy 125.782509 90.8007) (xy 124.070906 90.8007) + (xy 124.023453 90.791261) (xy 123.976954 90.772) (xy 123.976953 90.772) (xy 123.002753 90.772) (xy 122.912247 90.772) + (xy 122.912245 90.772) (xy 122.880022 90.785347) (xy 122.865745 90.791261) (xy 122.818294 90.8007) + (xy 122.450879 90.8007) (xy 122.38384 90.781015) (xy 122.375393 90.775076) (xy 122.354826 90.759294) + (xy 122.354809 90.759283) (xy 122.11069 90.61834) (xy 122.110679 90.618335) (xy 121.850243 90.510459) + (xy 121.577939 90.437495) (xy 121.298458 90.4007) (xy 121.298451 90.4007) (xy 121.016549 90.4007) + (xy 121.016541 90.4007) (xy 120.73706 90.437495) (xy 120.464756 90.510459) (xy 120.20432 90.618335) + (xy 120.204309 90.61834) (xy 119.96019 90.759283) (xy 119.960184 90.759287) (xy 119.960183 90.759288) + (xy 119.939608 90.775076) (xy 119.736529 90.930904) (xy 119.537204 91.130229) (xy 119.459215 91.231866) + (xy 119.376612 91.339517) (xy 119.365589 91.353882) (xy 119.365583 91.35389) (xy 119.22464 91.598009) + (xy 119.224635 91.59802) (xy 119.116759 91.858456) (xy 119.043795 92.13076) (xy 119.007 92.410241) + (xy 107.432999 92.410241) (xy 107.432999 91.501192) (xy 107.422499 91.398403) (xy 107.367314 91.231866) + (xy 107.275212 91.082544) (xy 107.151156 90.958488) (xy 107.001834 90.866386) (xy 106.835297 90.811201) + (xy 106.835295 90.8112) (xy 106.732516 90.8007) (xy 106.732509 90.8007) (xy 105.020906 90.8007) + (xy 104.973453 90.791261) (xy 104.926954 90.772) (xy 104.926953 90.772) (xy 103.952753 90.772) (xy 103.360061 90.772) + (xy 103.298061 90.755387) (xy 103.06069 90.61834) (xy 103.060679 90.618335) (xy 102.800243 90.510459) + (xy 102.527939 90.437495) (xy 102.248458 90.4007) (xy 102.248451 90.4007) (xy 101.966549 90.4007) + (xy 101.966541 90.4007) (xy 101.68706 90.437495) (xy 101.414756 90.510459) (xy 101.15432 90.618335) + (xy 101.154309 90.61834) (xy 100.91019 90.759283) (xy 100.910184 90.759287) (xy 100.910183 90.759288) + (xy 100.889608 90.775076) (xy 100.686529 90.930904) (xy 100.487204 91.130229) (xy 100.409215 91.231866) + (xy 100.326612 91.339517) (xy 100.315589 91.353882) (xy 100.315583 91.35389) (xy 100.17464 91.598009) + (xy 100.174635 91.59802) (xy 100.066759 91.858456) (xy 99.993795 92.13076) (xy 99.957 92.410241) + (xy 99.957 92.692158) (xy 99.993795 92.971639) (xy 100.066759 93.243943) (xy 100.174635 93.504379) + (xy 100.17464 93.50439) (xy 100.315583 93.748509) (xy 100.315588 93.748517) (xy 100.461294 93.938404) + (xy 100.487204 93.97217) (xy 100.645053 94.130019) (xy 100.678538 94.191342) (xy 100.673554 94.261034) + (xy 100.631682 94.316967) (xy 100.566218 94.341384) (xy 100.557372 94.3417) (xy 100.248195 94.3417) + (xy 100.181156 94.322015) (xy 100.160514 94.305381) (xy 98.74197 92.886836) (xy 98.706059 92.871961) + (xy 98.658353 92.8522) (xy 90.717553 92.8522) (xy 90.627047 92.8522) (xy 90.627046 92.8522) (xy 90.543427 92.886837) + (xy 90.535877 92.891882) (xy 90.469198 92.912755) (xy 90.419541 92.903337) (xy 90.343797 92.871963) + (xy 90.343792 92.871962) (xy 90.343789 92.871961) (xy 90.189145 92.8412) (xy 90.189142 92.8412) + (xy 90.031458 92.8412) (xy 90.031455 92.8412) (xy 89.87681 92.871961) (xy 89.876798 92.871964) (xy 89.731127 92.932302) + (xy 89.731114 92.932309) (xy 89.600011 93.01991) (xy 89.600007 93.019913) (xy 89.488513 93.131407) + (xy 89.48851 93.131411) (xy 89.400909 93.262514) (xy 89.400902 93.262527) (xy 89.340564 93.408198) + (xy 89.340561 93.40821) (xy 89.3098 93.562853) (xy 88.383 93.562853) (xy 88.382999 91.501192) (xy 88.372499 91.398403) + (xy 88.317314 91.231866) (xy 88.225212 91.082544) (xy 88.101156 90.958488) (xy 87.951834 90.866386) + (xy 87.785297 90.811201) (xy 87.785295 90.8112) (xy 87.682516 90.8007) (xy 87.682509 90.8007) (xy 85.970906 90.8007) + (xy 85.923453 90.791261) (xy 85.876954 90.772) (xy 85.876953 90.772) (xy 84.902753 90.772) (xy 84.310061 90.772) + (xy 84.248061 90.755387) (xy 84.01069 90.61834) (xy 84.010679 90.618335) (xy 83.750243 90.510459) + (xy 83.477939 90.437495) (xy 83.198458 90.4007) (xy 83.198451 90.4007) (xy 82.916549 90.4007) (xy 82.916541 90.4007) + (xy 82.63706 90.437495) (xy 82.364756 90.510459) (xy 82.10432 90.618335) (xy 82.104309 90.61834) + (xy 81.86019 90.759283) (xy 81.860184 90.759287) (xy 81.860183 90.759288) (xy 81.839608 90.775076) + (xy 81.636529 90.930904) (xy 81.437204 91.130229) (xy 81.359215 91.231866) (xy 81.276612 91.339517) + (xy 81.265589 91.353882) (xy 81.265583 91.35389) (xy 81.12464 91.598009) (xy 81.124635 91.59802) + (xy 81.016759 91.858456) (xy 80.943795 92.13076) (xy 80.907 92.410241) (xy 69.310499 92.410241) + (xy 69.310499 91.501192) (xy 69.299999 91.398403) (xy 69.244814 91.231866) (xy 69.152712 91.082544) + (xy 69.028656 90.958488) (xy 68.879334 90.866386) (xy 68.712797 90.811201) (xy 68.712795 90.8112) + (xy 68.610016 90.8007) (xy 68.610009 90.8007) (xy 66.657881 90.8007) (xy 66.657873 90.8007) (xy 65.924206 90.8007) + (xy 65.876753 90.791261) (xy 65.830253 90.772) (xy 65.237561 90.772) (xy 65.175561 90.755387) (xy 64.93819 90.61834) + (xy 64.938179 90.618335) (xy 64.687322 90.514427) (xy 64.68732 90.514426) (xy 64.677746 90.51046) + (xy 64.660261 90.505775) (xy 64.572094 90.48215) (xy 64.405439 90.437495) (xy 64.165858 90.405953) + (xy 72.1372 90.405953) (xy 72.1372 90.563646) (xy 72.167961 90.718289) (xy 72.167964 90.718301) + (xy 72.228302 90.863972) (xy 72.228309 90.863985) (xy 72.31591 90.995088) (xy 72.315913 90.995092) + (xy 72.427407 91.106586) (xy 72.427411 91.106589) (xy 72.558514 91.19419) (xy 72.558527 91.194197) + (xy 72.704198 91.254535) (xy 72.704203 91.254537) (xy 72.858853 91.285299) (xy 72.858856 91.2853) + (xy 72.858858 91.2853) (xy 73.016544 91.2853) (xy 73.016545 91.285299) (xy 73.171197 91.254537) + (xy 73.316879 91.194194) (xy 73.447989 91.106589) (xy 73.559489 90.995089) (xy 73.647094 90.863979) + (xy 73.707437 90.718297) (xy 73.7382 90.563642) (xy 73.7382 90.405958) (xy 73.7382 90.405955) (xy 73.738199 90.405953) + (xy 73.707438 90.25131) (xy 73.707437 90.251303) (xy 73.697248 90.226705) (xy 73.647097 90.105627) + (xy 73.64709 90.105614) (xy 73.559489 89.974511) (xy 73.559486 89.974507) (xy 73.447992 89.863013) + (xy 73.447988 89.86301) (xy 73.316885 89.775409) (xy 73.316872 89.775402) (xy 73.171201 89.715064) + (xy 73.171189 89.715061) (xy 73.016545 89.6843) (xy 73.016542 89.6843) (xy 72.858858 89.6843) (xy 72.858855 89.6843) + (xy 72.70421 89.715061) (xy 72.704198 89.715064) (xy 72.558527 89.775402) (xy 72.558514 89.775409) + (xy 72.427411 89.86301) (xy 72.427407 89.863013) (xy 72.315913 89.974507) (xy 72.31591 89.974511) + (xy 72.228309 90.105614) (xy 72.228302 90.105627) (xy 72.167964 90.251298) (xy 72.167961 90.25131) + (xy 72.1372 90.405953) (xy 64.165858 90.405953) (xy 64.125958 90.4007) (xy 64.125951 90.4007) (xy 63.844049 90.4007) + (xy 63.844041 90.4007) (xy 63.56456 90.437495) (xy 63.292256 90.510459) (xy 63.03182 90.618335) + (xy 63.031809 90.61834) (xy 62.78769 90.759283) (xy 62.787684 90.759287) (xy 62.787683 90.759288) + (xy 62.767108 90.775076) (xy 62.564029 90.930904) (xy 62.364704 91.130229) (xy 62.286715 91.231866) + (xy 62.204112 91.339517) (xy 62.193089 91.353882) (xy 62.193083 91.35389) (xy 62.05214 91.598009) + (xy 62.052135 91.59802) (xy 61.944259 91.858456) (xy 61.871295 92.13076) (xy 61.8345 92.410241) + (xy 45.35175 92.410241) (xy 45.35175 87.683553) (xy 84.2347 87.683553) (xy 84.2347 87.841246) (xy 84.265461 87.995889) + (xy 84.265464 87.995901) (xy 84.325802 88.141572) (xy 84.325809 88.141585) (xy 84.41341 88.272688) + (xy 84.413413 88.272692) (xy 84.524907 88.384186) (xy 84.524911 88.384189) (xy 84.656014 88.47179) + (xy 84.656027 88.471797) (xy 84.801698 88.532135) (xy 84.801703 88.532137) (xy 84.884473 88.548601) + (xy 84.956353 88.562899) (xy 84.956356 88.5629) (xy 84.956358 88.5629) (xy 85.114044 88.5629) (xy 85.114045 88.562899) + (xy 85.268697 88.532137) (xy 85.373919 88.488553) (xy 110.8205 88.488553) (xy 110.8205 88.646246) + (xy 110.851261 88.800889) (xy 110.851264 88.800901) (xy 110.911602 88.946572) (xy 110.911609 88.946585) + (xy 110.99921 89.077688) (xy 110.999213 89.077692) (xy 111.110707 89.189186) (xy 111.110711 89.189189) + (xy 111.241814 89.27679) (xy 111.241827 89.276797) (xy 111.387498 89.337135) (xy 111.387503 89.337137) + (xy 111.542153 89.367899) (xy 111.542156 89.3679) (xy 111.542158 89.3679) (xy 111.699844 89.3679) + (xy 111.699845 89.367899) (xy 111.854497 89.337137) (xy 112.000179 89.276794) (xy 112.131289 89.189189) + (xy 112.242789 89.077689) (xy 112.330394 88.946579) (xy 112.390737 88.800897) (xy 112.4215 88.646242) + (xy 112.4215 88.488558) (xy 112.4215 88.488555) (xy 112.421499 88.488553) (xy 112.40268 88.393944) + (xy 112.390737 88.333903) (xy 112.350289 88.236253) (xy 120.0427 88.236253) (xy 120.0427 88.393946) + (xy 120.073461 88.548589) (xy 120.073464 88.548601) (xy 120.133802 88.694272) (xy 120.133809 88.694285) + (xy 120.22141 88.825388) (xy 120.221413 88.825392) (xy 120.332907 88.936886) (xy 120.332911 88.936889) + (xy 120.464014 89.02449) (xy 120.464027 89.024497) (xy 120.592446 89.077689) (xy 120.609703 89.084837) + (xy 120.764353 89.115599) (xy 120.764356 89.1156) (xy 120.764358 89.1156) (xy 120.922044 89.1156) + (xy 120.922045 89.115599) (xy 121.076697 89.084837) (xy 121.222379 89.024494) (xy 121.353489 88.936889) + (xy 121.464989 88.825389) (xy 121.552594 88.694279) (xy 121.612937 88.548597) (xy 121.6437 88.393942) + (xy 121.6437 88.236258) (xy 121.6437 88.236255) (xy 121.643699 88.236253) (xy 121.634143 88.188214) + (xy 121.612937 88.081603) (xy 121.602791 88.057107) (xy 121.552597 87.935927) (xy 121.55259 87.935914) + (xy 121.464989 87.804811) (xy 121.464986 87.804807) (xy 121.353492 87.693313) (xy 121.353488 87.69331) + (xy 121.222385 87.605709) (xy 121.222372 87.605702) (xy 121.076701 87.545364) (xy 121.076689 87.545361) + (xy 120.922045 87.5146) (xy 120.922042 87.5146) (xy 120.764358 87.5146) (xy 120.764355 87.5146) + (xy 120.60971 87.545361) (xy 120.609698 87.545364) (xy 120.464027 87.605702) (xy 120.464014 87.605709) + (xy 120.332911 87.69331) (xy 120.332907 87.693313) (xy 120.221413 87.804807) (xy 120.22141 87.804811) + (xy 120.133809 87.935914) (xy 120.133802 87.935927) (xy 120.073464 88.081598) (xy 120.073461 88.08161) + (xy 120.0427 88.236253) (xy 112.350289 88.236253) (xy 112.342837 88.218262) (xy 112.330395 88.188223) + (xy 112.33039 88.188214) (xy 112.242789 88.057111) (xy 112.242786 88.057107) (xy 112.131292 87.945613) + (xy 112.131288 87.94561) (xy 112.000185 87.858009) (xy 112.000172 87.858002) (xy 111.854501 87.797664) + (xy 111.854489 87.797661) (xy 111.699845 87.7669) (xy 111.699842 87.7669) (xy 111.542158 87.7669) + (xy 111.542155 87.7669) (xy 111.38751 87.797661) (xy 111.387498 87.797664) (xy 111.241827 87.858002) + (xy 111.241814 87.858009) (xy 111.110711 87.94561) (xy 111.110707 87.945613) (xy 110.999213 88.057107) + (xy 110.99921 88.057111) (xy 110.911609 88.188214) (xy 110.911602 88.188227) (xy 110.851264 88.333898) + (xy 110.851261 88.33391) (xy 110.8205 88.488553) (xy 85.373919 88.488553) (xy 85.414379 88.471794) + (xy 85.545489 88.384189) (xy 85.656989 88.272689) (xy 85.744594 88.141579) (xy 85.804937 87.995897) + (xy 85.8357 87.841242) (xy 85.8357 87.683558) (xy 85.8357 87.683555) (xy 85.835699 87.683553) (xy 85.808211 87.545363) + (xy 85.804937 87.528903) (xy 85.799013 87.5146) (xy 85.744597 87.383227) (xy 85.74459 87.383214) + (xy 85.656989 87.252111) (xy 85.656986 87.252107) (xy 85.545492 87.140613) (xy 85.545488 87.14061) + (xy 85.414385 87.053009) (xy 85.414372 87.053002) (xy 85.268701 86.992664) (xy 85.268689 86.992661) + (xy 85.114045 86.9619) (xy 85.114042 86.9619) (xy 84.956358 86.9619) (xy 84.956355 86.9619) (xy 84.80171 86.992661) + (xy 84.801698 86.992664) (xy 84.656027 87.053002) (xy 84.656014 87.053009) (xy 84.524911 87.14061) + (xy 84.524907 87.140613) (xy 84.413413 87.252107) (xy 84.41341 87.252111) (xy 84.325809 87.383214) + (xy 84.325802 87.383227) (xy 84.265464 87.528898) (xy 84.265461 87.52891) (xy 84.2347 87.683553) + (xy 45.35175 87.683553) (xy 45.35175 85.544653) (xy 108.5145 85.544653) (xy 108.5145 85.702346) + (xy 108.545261 85.856989) (xy 108.545264 85.857001) (xy 108.605602 86.002672) (xy 108.605609 86.002685) + (xy 108.69321 86.133788) (xy 108.693213 86.133792) (xy 108.804707 86.245286) (xy 108.804711 86.245289) + (xy 108.935814 86.33289) (xy 108.935827 86.332897) (xy 109.081498 86.393235) (xy 109.081503 86.393237) + (xy 109.236153 86.423999) (xy 109.236156 86.424) (xy 109.236158 86.424) (xy 109.393844 86.424) (xy 109.393845 86.423999) + (xy 109.548497 86.393237) (xy 109.694179 86.332894) (xy 109.825289 86.245289) (xy 109.936789 86.133789) + (xy 110.024394 86.002679) (xy 110.084737 85.856997) (xy 110.1155 85.702342) (xy 110.1155 85.544658) + (xy 110.1155 85.544655) (xy 110.115499 85.544653) (xy 110.084738 85.39001) (xy 110.084737 85.390003) + (xy 110.084735 85.389998) (xy 110.024397 85.244327) (xy 110.02439 85.244314) (xy 109.936789 85.113211) + (xy 109.936786 85.113207) (xy 109.825292 85.001713) (xy 109.825288 85.00171) (xy 109.694185 84.914109) + (xy 109.694172 84.914102) (xy 109.548501 84.853764) (xy 109.548489 84.853761) (xy 109.393845 84.823) + (xy 109.393842 84.823) (xy 109.236158 84.823) (xy 109.236155 84.823) (xy 109.08151 84.853761) (xy 109.081498 84.853764) + (xy 108.935827 84.914102) (xy 108.935814 84.914109) (xy 108.804711 85.00171) (xy 108.804707 85.001713) + (xy 108.693213 85.113207) (xy 108.69321 85.113211) (xy 108.605609 85.244314) (xy 108.605602 85.244327) + (xy 108.545264 85.389998) (xy 108.545261 85.39001) (xy 108.5145 85.544653) (xy 45.35175 85.544653) + (xy 45.35175 78.719553) (xy 82.0598 78.719553) (xy 82.0598 78.877246) (xy 82.090561 79.031889) (xy 82.090564 79.031901) + (xy 82.150902 79.177572) (xy 82.150909 79.177585) (xy 82.23851 79.308688) (xy 82.238513 79.308692) + (xy 82.350007 79.420186) (xy 82.350011 79.420189) (xy 82.481114 79.50779) (xy 82.481127 79.507797) + (xy 82.626798 79.568135) (xy 82.626803 79.568137) (xy 82.781453 79.598899) (xy 82.781456 79.5989) + (xy 82.781458 79.5989) (xy 82.939144 79.5989) (xy 82.939145 79.598899) (xy 83.093797 79.568137) + (xy 83.239479 79.507794) (xy 83.370589 79.420189) (xy 83.482089 79.308689) (xy 83.569694 79.177579) + (xy 83.601268 79.101353) (xy 88.1002 79.101353) (xy 88.1002 79.259046) (xy 88.130961 79.413689) + (xy 88.130964 79.413701) (xy 88.191302 79.559372) (xy 88.191309 79.559385) (xy 88.27891 79.690488) + (xy 88.278913 79.690492) (xy 88.390407 79.801986) (xy 88.390411 79.801989) (xy 88.521514 79.88959) + (xy 88.521527 79.889597) (xy 88.667198 79.949935) (xy 88.667203 79.949937) (xy 88.821853 79.980699) + (xy 88.821856 79.9807) (xy 88.821858 79.9807) (xy 88.979544 79.9807) (xy 88.979545 79.980699) (xy 89.134197 79.949937) + (xy 89.279879 79.889594) (xy 89.410989 79.801989) (xy 89.522489 79.690489) (xy 89.610094 79.559379) + (xy 89.670437 79.413697) (xy 89.7012 79.259042) (xy 89.7012 79.101358) (xy 89.7012 79.101355) (xy 89.701199 79.101353) + (xy 89.670437 78.946703) (xy 89.650614 78.898846) (xy 89.610097 78.801027) (xy 89.61009 78.801014) + (xy 89.5725 78.744757) (xy 89.551622 78.67808) (xy 89.570106 78.610699) (xy 89.60671 78.572764) + (xy 89.644089 78.547789) (xy 89.755589 78.436289) (xy 89.843194 78.305179) (xy 89.903537 78.159497) + (xy 89.9343 78.004842) (xy 89.9343 77.907116) (xy 101.200798 77.907116) (xy 101.200798 78.064809) + (xy 101.231559 78.219452) (xy 101.231562 78.219464) (xy 101.2919 78.365135) (xy 101.291907 78.365148) + (xy 101.379508 78.496251) (xy 101.379511 78.496255) (xy 101.491005 78.607749) (xy 101.491009 78.607752) + (xy 101.622112 78.695353) (xy 101.622125 78.69536) (xy 101.732681 78.741153) (xy 101.767801 78.7557) + (xy 101.922451 78.786462) (xy 101.922454 78.786463) (xy 101.922456 78.786463) (xy 102.080142 78.786463) + (xy 102.080143 78.786462) (xy 102.234795 78.7557) (xy 102.380477 78.695357) (xy 102.511587 78.607752) + (xy 102.623087 78.496252) (xy 102.710692 78.365142) (xy 102.771035 78.21946) (xy 102.801798 78.064805) + (xy 102.801798 77.907121) (xy 102.801798 77.907118) (xy 102.801797 77.907116) (xy 102.799624 77.896192) + (xy 102.771035 77.752466) (xy 102.746196 77.692498) (xy 102.710695 77.60679) (xy 102.710688 77.606777) + (xy 102.623087 77.475674) (xy 102.623084 77.47567) (xy 102.51159 77.364176) (xy 102.511586 77.364173) + (xy 102.380483 77.276572) (xy 102.38047 77.276565) (xy 102.234799 77.216227) (xy 102.234787 77.216224) + (xy 102.080143 77.185463) (xy 102.08014 77.185463) (xy 101.922456 77.185463) (xy 101.922453 77.185463) + (xy 101.767808 77.216224) (xy 101.767796 77.216227) (xy 101.622125 77.276565) (xy 101.622112 77.276572) + (xy 101.491009 77.364173) (xy 101.491005 77.364176) (xy 101.379511 77.47567) (xy 101.379508 77.475674) + (xy 101.291907 77.606777) (xy 101.2919 77.60679) (xy 101.231562 77.752461) (xy 101.231559 77.752473) + (xy 101.200798 77.907116) (xy 89.9343 77.907116) (xy 89.9343 77.847158) (xy 89.9343 77.847155) (xy 89.934299 77.847153) + (xy 89.903538 77.69251) (xy 89.903537 77.692503) (xy 89.868034 77.60679) (xy 89.843197 77.546827) + (xy 89.84319 77.546814) (xy 89.755589 77.415711) (xy 89.755586 77.415707) (xy 89.644092 77.304213) + (xy 89.644088 77.30421) (xy 89.512985 77.216609) (xy 89.512972 77.216602) (xy 89.367301 77.156264) + (xy 89.367289 77.156261) (xy 89.212645 77.1255) (xy 89.212642 77.1255) (xy 89.054958 77.1255) (xy 89.054955 77.1255) + (xy 88.90031 77.156261) (xy 88.900298 77.156264) (xy 88.754627 77.216602) (xy 88.754614 77.216609) + (xy 88.623511 77.30421) (xy 88.623507 77.304213) (xy 88.512013 77.415707) (xy 88.51201 77.415711) + (xy 88.424409 77.546814) (xy 88.424402 77.546827) (xy 88.364064 77.692498) (xy 88.364061 77.69251) + (xy 88.3333 77.847153) (xy 88.3333 78.004846) (xy 88.364061 78.159489) (xy 88.364064 78.159501) + (xy 88.424402 78.305172) (xy 88.424409 78.305185) (xy 88.461999 78.361442) (xy 88.482877 78.42812) + (xy 88.464392 78.4955) (xy 88.42779 78.533434) (xy 88.390409 78.558411) (xy 88.278913 78.669907) + (xy 88.27891 78.669911) (xy 88.191309 78.801014) (xy 88.191302 78.801027) (xy 88.130964 78.946698) + (xy 88.130961 78.94671) (xy 88.1002 79.101353) (xy 83.601268 79.101353) (xy 83.630037 79.031897) + (xy 83.6608 78.877242) (xy 83.6608 78.719558) (xy 83.6608 78.719555) (xy 83.660799 78.719553) (xy 83.652549 78.67808) + (xy 83.630037 78.564903) (xy 83.617002 78.533434) (xy 83.569697 78.419227) (xy 83.56969 78.419214) + (xy 83.482089 78.288111) (xy 83.482086 78.288107) (xy 83.370592 78.176613) (xy 83.370588 78.17661) + (xy 83.239485 78.089009) (xy 83.239472 78.089002) (xy 83.093801 78.028664) (xy 83.093789 78.028661) + (xy 82.939145 77.9979) (xy 82.939142 77.9979) (xy 82.781458 77.9979) (xy 82.781455 77.9979) (xy 82.62681 78.028661) + (xy 82.626798 78.028664) (xy 82.481127 78.089002) (xy 82.481114 78.089009) (xy 82.350011 78.17661) + (xy 82.350007 78.176613) (xy 82.238513 78.288107) (xy 82.23851 78.288111) (xy 82.150909 78.419214) + (xy 82.150902 78.419227) (xy 82.090564 78.564898) (xy 82.090561 78.56491) (xy 82.0598 78.719553) + (xy 45.35175 78.719553) (xy 45.35175 75.447453) (xy 87.5309 75.447453) (xy 87.5309 75.605146) (xy 87.561661 75.759789) + (xy 87.561664 75.759801) (xy 87.622002 75.905472) (xy 87.622009 75.905485) (xy 87.70961 76.036588) + (xy 87.709613 76.036592) (xy 87.821107 76.148086) (xy 87.821111 76.148089) (xy 87.952214 76.23569) + (xy 87.952227 76.235697) (xy 88.097898 76.296035) (xy 88.097903 76.296037) (xy 88.252553 76.326799) + (xy 88.252556 76.3268) (xy 88.252558 76.3268) (xy 88.410244 76.3268) (xy 88.410245 76.326799) (xy 88.564897 76.296037) + (xy 88.710579 76.235694) (xy 88.841689 76.148089) (xy 88.953189 76.036589) (xy 89.040794 75.905479) + (xy 89.101137 75.759797) (xy 89.1319 75.605142) (xy 89.1319 75.447458) (xy 89.1319 75.447455) (xy 89.131899 75.447453) + (xy 89.105194 75.313201) (xy 89.101137 75.292803) (xy 89.101135 75.292798) (xy 89.040797 75.147127) + (xy 89.04079 75.147114) (xy 88.965449 75.034359) (xy 88.965448 75.034358) (xy 88.953186 75.016007) + (xy 88.908732 74.971553) (xy 90.3791 74.971553) (xy 90.3791 75.129246) (xy 90.409861 75.283889) + (xy 90.409864 75.283901) (xy 90.470202 75.429572) (xy 90.470209 75.429585) (xy 90.55781 75.560688) + (xy 90.557813 75.560692) (xy 90.669307 75.672186) (xy 90.669311 75.672189) (xy 90.800414 75.75979) + (xy 90.800427 75.759797) (xy 90.946098 75.820135) (xy 90.946103 75.820137) (xy 91.093393 75.849435) + (xy 91.100753 75.850899) (xy 91.100756 75.8509) (xy 91.100758 75.8509) (xy 91.258444 75.8509) (xy 91.258445 75.850899) + (xy 91.413097 75.820137) (xy 91.558779 75.759794) (xy 91.689889 75.672189) (xy 91.801389 75.560689) + (xy 91.888994 75.429579) (xy 91.949337 75.283897) (xy 91.9801 75.129242) (xy 91.9801 74.971558) + (xy 91.9801 74.971555) (xy 91.980099 74.971553) (xy 91.966763 74.90451) (xy 91.949337 74.816903) + (xy 91.924343 74.756561) (xy 91.888997 74.671227) (xy 91.88899 74.671214) (xy 91.801389 74.540111) + (xy 91.801386 74.540107) (xy 91.689892 74.428613) (xy 91.689888 74.42861) (xy 91.558785 74.341009) + (xy 91.558772 74.341002) (xy 91.413101 74.280664) (xy 91.413089 74.280661) (xy 91.258445 74.2499) + (xy 91.258442 74.2499) (xy 91.100758 74.2499) (xy 91.100755 74.2499) (xy 90.94611 74.280661) (xy 90.946098 74.280664) + (xy 90.800427 74.341002) (xy 90.800414 74.341009) (xy 90.669311 74.42861) (xy 90.669307 74.428613) + (xy 90.557813 74.540107) (xy 90.55781 74.540111) (xy 90.470209 74.671214) (xy 90.470202 74.671227) + (xy 90.409864 74.816898) (xy 90.409861 74.81691) (xy 90.3791 74.971553) (xy 88.908732 74.971553) + (xy 88.841692 74.904513) (xy 88.841688 74.90451) (xy 88.710585 74.816909) (xy 88.710572 74.816902) + (xy 88.564901 74.756564) (xy 88.564889 74.756561) (xy 88.410245 74.7258) (xy 88.410242 74.7258) + (xy 88.252558 74.7258) (xy 88.252555 74.7258) (xy 88.09791 74.756561) (xy 88.097898 74.756564) (xy 87.952227 74.816902) + (xy 87.952214 74.816909) (xy 87.821111 74.90451) (xy 87.821107 74.904513) (xy 87.709613 75.016007) + (xy 87.70961 75.016011) (xy 87.622009 75.147114) (xy 87.622002 75.147127) (xy 87.561664 75.292798) + (xy 87.561661 75.29281) (xy 87.5309 75.447453) (xy 45.35175 75.447453) (xy 45.35175 72.346153) (xy 53.90075 72.346153) + (xy 53.90075 72.503846) (xy 53.931511 72.658489) (xy 53.931514 72.658501) (xy 53.991852 72.804172) + (xy 53.991859 72.804185) (xy 54.07946 72.935288) (xy 54.079463 72.935292) (xy 54.190957 73.046786) + (xy 54.190961 73.046789) (xy 54.322064 73.13439) (xy 54.322077 73.134397) (xy 54.467748 73.194735) + (xy 54.467753 73.194737) (xy 54.622403 73.225499) (xy 54.622406 73.2255) (xy 54.622408 73.2255) + (xy 54.780094 73.2255) (xy 54.780095 73.225499) (xy 54.934747 73.194737) (xy 55.080429 73.134394) + (xy 55.211539 73.046789) (xy 55.323039 72.935289) (xy 55.410644 72.804179) (xy 55.41205 72.800786) + (xy 55.449244 72.710989) (xy 55.470987 72.658497) (xy 55.50175 72.503842) (xy 55.50175 72.346158) + (xy 55.50175 72.346155) (xy 55.501749 72.346153) (xy 55.491521 72.294735) (xy 55.470987 72.191503) + (xy 55.452511 72.146897) (xy 55.410647 72.045827) (xy 55.41064 72.045814) (xy 55.323039 71.914711) + (xy 55.323036 71.914707) (xy 55.211542 71.803213) (xy 55.211538 71.80321) (xy 55.080435 71.715609) + (xy 55.080422 71.715602) (xy 54.934751 71.655264) (xy 54.934739 71.655261) (xy 54.780095 71.6245) + (xy 54.780092 71.6245) (xy 54.622408 71.6245) (xy 54.622405 71.6245) (xy 54.46776 71.655261) (xy 54.467748 71.655264) + (xy 54.322077 71.715602) (xy 54.322064 71.715609) (xy 54.190961 71.80321) (xy 54.190957 71.803213) + (xy 54.079463 71.914707) (xy 54.07946 71.914711) (xy 53.991859 72.045814) (xy 53.991852 72.045827) + (xy 53.931514 72.191498) (xy 53.931511 72.19151) (xy 53.90075 72.346153) (xy 45.35175 72.346153) + (xy 45.35175 71.358653) (xy 49.4086 71.358653) (xy 49.4086 71.516346) (xy 49.439361 71.670989) (xy 49.439364 71.671001) + (xy 49.499702 71.816672) (xy 49.499709 71.816685) (xy 49.58731 71.947788) (xy 49.587313 71.947792) + (xy 49.698807 72.059286) (xy 49.698811 72.059289) (xy 49.829914 72.14689) (xy 49.829927 72.146897) + (xy 49.944819 72.194486) (xy 49.975603 72.207237) (xy 50.11213 72.234394) (xy 50.130253 72.237999) + (xy 50.130256 72.238) (xy 50.130258 72.238) (xy 50.287944 72.238) (xy 50.287945 72.237999) (xy 50.324375 72.230753) + (xy 50.386228 72.21845) (xy 50.386233 72.218449) (xy 50.425033 72.21073) (xy 50.442597 72.207237) + (xy 50.588236 72.146912) (xy 50.588272 72.146897) (xy 50.588272 72.146896) (xy 50.588279 72.146894) + (xy 50.719389 72.059289) (xy 50.830889 71.947789) (xy 50.918494 71.816679) (xy 50.978837 71.670997) + (xy 51.0096 71.516342) (xy 51.0096 71.446153) (xy 79.85075 71.446153) (xy 79.85075 71.603846) (xy 79.881511 71.758489) + (xy 79.881514 71.758501) (xy 79.941852 71.904172) (xy 79.941859 71.904185) (xy 80.02946 72.035288) + (xy 80.029463 72.035292) (xy 80.140957 72.146786) (xy 80.140961 72.146789) (xy 80.272064 72.23439) + (xy 80.272077 72.234397) (xy 80.387237 72.282097) (xy 80.417753 72.294737) (xy 80.558337 72.322701) + (xy 80.572403 72.325499) (xy 80.572406 72.3255) (xy 80.572408 72.3255) (xy 80.730094 72.3255) (xy 80.730095 72.325499) + (xy 80.884747 72.294737) (xy 81.030429 72.234394) (xy 81.161539 72.146789) (xy 81.273039 72.035289) + (xy 81.360644 71.904179) (xy 81.420987 71.758497) (xy 81.45175 71.603842) (xy 81.45175 71.446158) + (xy 81.45175 71.446155) (xy 81.451749 71.446153) (xy 81.434344 71.358653) (xy 81.420987 71.291503) + (xy 81.392071 71.221692) (xy 81.360647 71.145827) (xy 81.36064 71.145814) (xy 81.273039 71.014711) + (xy 81.273036 71.014707) (xy 81.161542 70.903213) (xy 81.161538 70.90321) (xy 81.030435 70.815609) + (xy 81.030422 70.815602) (xy 80.884751 70.755264) (xy 80.884739 70.755261) (xy 80.730095 70.7245) + (xy 80.730092 70.7245) (xy 80.572408 70.7245) (xy 80.572405 70.7245) (xy 80.41776 70.755261) (xy 80.417748 70.755264) + (xy 80.272077 70.815602) (xy 80.272064 70.815609) (xy 80.140961 70.90321) (xy 80.140957 70.903213) + (xy 80.029463 71.014707) (xy 80.02946 71.014711) (xy 79.941859 71.145814) (xy 79.941852 71.145827) + (xy 79.881514 71.291498) (xy 79.881511 71.29151) (xy 79.85075 71.446153) (xy 51.0096 71.446153) + (xy 51.0096 71.358658) (xy 51.0096 71.358655) (xy 51.009599 71.358653) (xy 50.978837 71.204003) + (xy 50.974492 71.193514) (xy 50.918497 71.058327) (xy 50.91849 71.058314) (xy 50.830889 70.927211) + (xy 50.830886 70.927207) (xy 50.719392 70.815713) (xy 50.719388 70.81571) (xy 50.588285 70.728109) + (xy 50.588272 70.728102) (xy 50.442601 70.667764) (xy 50.442589 70.667761) (xy 50.287945 70.637) + (xy 50.287942 70.637) (xy 50.130258 70.637) (xy 50.130255 70.637) (xy 49.97561 70.667761) (xy 49.975598 70.667764) + (xy 49.829927 70.728102) (xy 49.829914 70.728109) (xy 49.698811 70.81571) (xy 49.698807 70.815713) + (xy 49.587313 70.927207) (xy 49.58731 70.927211) (xy 49.499709 71.058314) (xy 49.499702 71.058327) + (xy 49.439364 71.203998) (xy 49.439361 71.20401) (xy 49.4086 71.358653) (xy 45.35175 71.358653) + (xy 45.35175 69.896153) (xy 53.90075 69.896153) (xy 53.90075 70.053846) (xy 53.931511 70.208489) + (xy 53.931514 70.208501) (xy 53.991852 70.354172) (xy 53.991859 70.354185) (xy 54.07946 70.485288) + (xy 54.079463 70.485292) (xy 54.190957 70.596786) (xy 54.190961 70.596789) (xy 54.322064 70.68439) + (xy 54.322077 70.684397) (xy 54.457739 70.740589) (xy 54.467753 70.744737) (xy 54.59881 70.770806) + (xy 54.622403 70.775499) (xy 54.622406 70.7755) (xy 54.622408 70.7755) (xy 54.780094 70.7755) (xy 54.780095 70.775499) + (xy 54.934747 70.744737) (xy 55.080429 70.684394) (xy 55.211539 70.596789) (xy 55.323039 70.485289) + (xy 55.410644 70.354179) (xy 55.470987 70.208497) (xy 55.50175 70.053842) (xy 55.50175 69.896158) + (xy 55.50175 69.896155) (xy 55.493157 69.852958) (xy 55.493157 69.852957) (xy 55.489556 69.834853) + (xy 78.3356 69.834853) (xy 78.3356 69.992546) (xy 78.366361 70.147189) (xy 78.366364 70.147201) + (xy 78.426702 70.292872) (xy 78.426709 70.292885) (xy 78.51431 70.423988) (xy 78.514313 70.423992) + (xy 78.625807 70.535486) (xy 78.625811 70.535489) (xy 78.756914 70.62309) (xy 78.756927 70.623097) + (xy 78.864813 70.667784) (xy 78.902603 70.683437) (xy 79.057253 70.714199) (xy 79.057256 70.7142) + (xy 79.057258 70.7142) (xy 79.214944 70.7142) (xy 79.214945 70.714199) (xy 79.369597 70.683437) + (xy 79.492443 70.632553) (xy 79.515272 70.623097) (xy 79.515272 70.623096) (xy 79.515279 70.623094) + (xy 79.646389 70.535489) (xy 79.757889 70.423989) (xy 79.845494 70.292879) (xy 79.905837 70.147197) + (xy 79.9366 69.992542) (xy 79.9366 69.834858) (xy 79.9366 69.834855) (xy 79.936599 69.834853) (xy 79.92055 69.754172) + (xy 79.905837 69.680203) (xy 79.905835 69.680198) (xy 79.845497 69.534527) (xy 79.84549 69.534514) + (xy 79.757889 69.403411) (xy 79.757886 69.403407) (xy 79.646392 69.291913) (xy 79.646388 69.29191) + (xy 79.515285 69.204309) (xy 79.515272 69.204302) (xy 79.369601 69.143964) (xy 79.369589 69.143961) + (xy 79.214945 69.1132) (xy 79.214942 69.1132) (xy 79.057258 69.1132) (xy 79.057255 69.1132) (xy 78.90261 69.143961) + (xy 78.902598 69.143964) (xy 78.756927 69.204302) (xy 78.756914 69.204309) (xy 78.625811 69.29191) + (xy 78.625807 69.291913) (xy 78.514313 69.403407) (xy 78.51431 69.403411) (xy 78.426709 69.534514) + (xy 78.426702 69.534527) (xy 78.366364 69.680198) (xy 78.366361 69.68021) (xy 78.3356 69.834853) + (xy 55.489556 69.834853) (xy 55.484096 69.807406) (xy 55.470987 69.741503) (xy 55.47021 69.739627) + (xy 55.410647 69.595827) (xy 55.41064 69.595814) (xy 55.323039 69.464711) (xy 55.323036 69.464707) + (xy 55.211542 69.353213) (xy 55.211538 69.35321) (xy 55.080435 69.265609) (xy 55.080422 69.265602) + (xy 54.934751 69.205264) (xy 54.934739 69.205261) (xy 54.780095 69.1745) (xy 54.780092 69.1745) + (xy 54.622408 69.1745) (xy 54.622405 69.1745) (xy 54.46776 69.205261) (xy 54.467748 69.205264) (xy 54.322077 69.265602) + (xy 54.322064 69.265609) (xy 54.190961 69.35321) (xy 54.190957 69.353213) (xy 54.079463 69.464707) + (xy 54.07946 69.464711) (xy 53.991859 69.595814) (xy 53.991852 69.595827) (xy 53.931514 69.741498) + (xy 53.931511 69.74151) (xy 53.90075 69.896153) (xy 45.35175 69.896153) (xy 45.35175 67.546153) + (xy 79.85075 67.546153) (xy 79.85075 67.703846) (xy 79.881511 67.858489) (xy 79.881514 67.858501) + (xy 79.941852 68.004172) (xy 79.941859 68.004185) (xy 80.02946 68.135288) (xy 80.029463 68.135292) + (xy 80.140957 68.246786) (xy 80.140961 68.246789) (xy 80.272064 68.33439) (xy 80.272077 68.334397) + (xy 80.399516 68.387183) (xy 80.417753 68.394737) (xy 80.53132 68.417327) (xy 80.572403 68.425499) + (xy 80.572406 68.4255) (xy 80.572408 68.4255) (xy 80.730094 68.4255) (xy 80.79289 68.413008) (xy 80.875842 68.396508) + (xy 80.945432 68.402735) (xy 81.00061 68.445597) (xy 81.023855 68.511487) (xy 81.007788 68.579484) + (xy 80.987715 68.605806) (xy 80.89201 68.701511) (xy 80.804409 68.832614) (xy 80.804402 68.832627) + (xy 80.744064 68.978298) (xy 80.744061 68.97831) (xy 80.7133 69.132953) (xy 80.7133 69.290646) (xy 80.744061 69.445289) + (xy 80.744064 69.445301) (xy 80.804402 69.590972) (xy 80.804409 69.590985) (xy 80.89201 69.722088) + (xy 80.892013 69.722092) (xy 81.003507 69.833586) (xy 81.003511 69.833589) (xy 81.134614 69.92119) + (xy 81.134627 69.921197) (xy 81.275938 69.979729) (xy 81.280303 69.981537) (xy 81.434953 70.012299) + (xy 81.434956 70.0123) (xy 81.434958 70.0123) (xy 81.592644 70.0123) (xy 81.592645 70.012299) (xy 81.747297 69.981537) + (xy 81.892979 69.921194) (xy 81.948138 69.884336) (xy 82.014815 69.863459) (xy 82.082195 69.881943) + (xy 82.08591 69.88433) (xy 82.123121 69.909194) (xy 82.123126 69.909196) (xy 82.123125 69.909196) + (xy 82.217621 69.948337) (xy 82.268803 69.969537) (xy 82.386256 69.9929) (xy 82.423453 70.000299) + (xy 82.423456 70.0003) (xy 82.423458 70.0003) (xy 82.581144 70.0003) (xy 82.581145 70.000299) (xy 82.735797 69.969537) + (xy 82.881479 69.909194) (xy 83.012589 69.821589) (xy 83.124089 69.710089) (xy 83.211694 69.578979) + (xy 83.272037 69.433297) (xy 83.3028 69.278642) (xy 83.3028 69.120958) (xy 83.3028 69.120955) (xy 83.302799 69.120953) + (xy 83.299445 69.104092) (xy 83.272037 68.966303) (xy 83.259062 68.934979) (xy 83.211697 68.820627) + (xy 83.21169 68.820614) (xy 83.124089 68.689511) (xy 83.124086 68.689507) (xy 83.012592 68.578013) + (xy 83.012586 68.578008) (xy 83.00877 68.575458) (xy 83.008749 68.575445) (xy 82.881479 68.490406) + (xy 82.849002 68.476953) (xy 84.8236 68.476953) (xy 84.8236 68.634646) (xy 84.854361 68.789289) + (xy 84.854364 68.789301) (xy 84.914702 68.934972) (xy 84.914709 68.934985) (xy 85.00231 69.066088) + (xy 85.002313 69.066092) (xy 85.113807 69.177586) (xy 85.113811 69.177589) (xy 85.161196 69.209251) + (xy 85.206001 69.262863) (xy 85.214708 69.332188) (xy 85.184554 69.395216) (xy 85.179987 69.400034) + (xy 85.10411 69.475911) (xy 85.016509 69.607014) (xy 85.016502 69.607027) (xy 84.956164 69.752698) + (xy 84.956161 69.75271) (xy 84.9254 69.907353) (xy 84.9254 70.065046) (xy 84.956161 70.219689) (xy 84.956164 70.219701) + (xy 85.016502 70.365372) (xy 85.016509 70.365385) (xy 85.10411 70.496488) (xy 85.104113 70.496492) + (xy 85.215607 70.607986) (xy 85.215611 70.607989) (xy 85.346714 70.69559) (xy 85.346727 70.695597) + (xy 85.465366 70.744738) (xy 85.492403 70.755937) (xy 85.622756 70.781866) (xy 85.647053 70.786699) + (xy 85.647056 70.7867) (xy 85.647058 70.7867) (xy 85.804743 70.7867) (xy 85.820741 70.783517) (xy 85.884644 70.770806) + (xy 85.954234 70.777033) (xy 86.009412 70.819895) (xy 86.032657 70.885784) (xy 86.01659 70.953782) + (xy 85.996517 70.980104) (xy 85.91421 71.062411) (xy 85.826609 71.193514) (xy 85.826602 71.193527) + (xy 85.766264 71.339198) (xy 85.766261 71.33921) (xy 85.7355 71.493853) (xy 85.7355 71.651546) (xy 85.766261 71.806189) + (xy 85.766264 71.806201) (xy 85.826602 71.951872) (xy 85.826609 71.951885) (xy 85.91421 72.082988) + (xy 85.914213 72.082992) (xy 86.025707 72.194486) (xy 86.025711 72.194489) (xy 86.156814 72.28209) + (xy 86.156827 72.282097) (xy 86.224961 72.310318) (xy 86.302503 72.342437) (xy 86.371912 72.356243) + (xy 86.433822 72.388627) (xy 86.462281 72.430407) (xy 86.515204 72.558176) (xy 86.515209 72.558185) + (xy 86.60281 72.689288) (xy 86.602813 72.689292) (xy 86.714307 72.800786) (xy 86.714311 72.800789) + (xy 86.845414 72.88839) (xy 86.845427 72.888397) (xy 86.991098 72.948735) (xy 86.991103 72.948737) + (xy 87.12954 72.976274) (xy 87.145753 72.979499) (xy 87.145756 72.9795) (xy 87.145758 72.9795) (xy 87.303444 72.9795) + (xy 87.303445 72.979499) (xy 87.458097 72.948737) (xy 87.600626 72.8897) (xy 87.603772 72.888397) + (xy 87.603772 72.888396) (xy 87.603779 72.888394) (xy 87.734889 72.800789) (xy 87.846389 72.689289) + (xy 87.933994 72.558179) (xy 87.94024 72.543101) (xy 87.970398 72.470292) (xy 87.994337 72.412497) + (xy 88.0251 72.257842) (xy 88.0251 72.230753) (xy 89.3527 72.230753) (xy 89.3527 72.388446) (xy 89.383461 72.543089) + (xy 89.383464 72.543101) (xy 89.443802 72.688772) (xy 89.443809 72.688785) (xy 89.53141 72.819888) + (xy 89.531413 72.819892) (xy 89.642907 72.931386) (xy 89.642911 72.931389) (xy 89.774014 73.01899) + (xy 89.774027 73.018997) (xy 89.919698 73.079335) (xy 89.919703 73.079337) (xy 90.074353 73.110099) + (xy 90.074356 73.1101) (xy 90.074358 73.1101) (xy 90.232044 73.1101) (xy 90.232045 73.110099) (xy 90.386697 73.079337) + (xy 90.499366 73.032667) (xy 90.532372 73.018997) (xy 90.532372 73.018996) (xy 90.532379 73.018994) + (xy 90.663489 72.931389) (xy 90.721659 72.873218) (xy 90.78298 72.839735) (xy 90.852672 72.844719) + (xy 90.856779 72.846335) (xy 90.887203 72.858937) (xy 91.041853 72.889699) (xy 91.041856 72.8897) + (xy 91.041858 72.8897) (xy 91.199544 72.8897) (xy 91.199545 72.889699) (xy 91.354197 72.858937) + (xy 91.486396 72.804179) (xy 91.499872 72.798597) (xy 91.499872 72.798596) (xy 91.499879 72.798594) + (xy 91.630989 72.710989) (xy 91.742489 72.599489) (xy 91.830094 72.468379) (xy 91.890437 72.322697) + (xy 91.9212 72.168042) (xy 91.9212 72.010358) (xy 91.9212 72.010355) (xy 91.921199 72.010353) (xy 91.908298 71.945498) + (xy 91.890437 71.855703) (xy 91.874278 71.816692) (xy 91.830097 71.710027) (xy 91.83009 71.710014) + (xy 91.742489 71.578911) (xy 91.742486 71.578907) (xy 91.630992 71.467413) (xy 91.630988 71.46741) + (xy 91.499885 71.379809) (xy 91.499872 71.379802) (xy 91.354201 71.319464) (xy 91.354189 71.319461) + (xy 91.199545 71.2887) (xy 91.199542 71.2887) (xy 91.041858 71.2887) (xy 91.041855 71.2887) (xy 90.88721 71.319461) + (xy 90.887198 71.319464) (xy 90.741527 71.379802) (xy 90.741514 71.379809) (xy 90.610411 71.46741) + (xy 90.552241 71.52558) (xy 90.490917 71.559064) (xy 90.421226 71.554079) (xy 90.417128 71.552467) + (xy 90.386697 71.539863) (xy 90.386692 71.539862) (xy 90.386689 71.539861) (xy 90.232045 71.5091) + (xy 90.232042 71.5091) (xy 90.074358 71.5091) (xy 90.074355 71.5091) (xy 89.91971 71.539861) (xy 89.919698 71.539864) + (xy 89.774027 71.600202) (xy 89.774014 71.600209) (xy 89.642911 71.68781) (xy 89.642907 71.687813) + (xy 89.531413 71.799307) (xy 89.53141 71.799311) (xy 89.443809 71.930414) (xy 89.443802 71.930427) + (xy 89.383464 72.076098) (xy 89.383461 72.07611) (xy 89.3527 72.230753) (xy 88.0251 72.230753) (xy 88.0251 72.100158) + (xy 88.0251 72.100155) (xy 88.025099 72.100153) (xy 88.021685 72.082988) (xy 87.994337 71.945503) + (xy 87.940988 71.816705) (xy 87.933997 71.799827) (xy 87.93399 71.799814) (xy 87.846389 71.668711) + (xy 87.846386 71.668707) (xy 87.734892 71.557213) (xy 87.734888 71.55721) (xy 87.603785 71.469609) + (xy 87.603772 71.469602) (xy 87.458101 71.409264) (xy 87.458089 71.409261) (xy 87.388687 71.395456) + (xy 87.326776 71.363071) (xy 87.29832 71.321297) (xy 87.245394 71.193521) (xy 87.245392 71.193518) + (xy 87.24539 71.193514) (xy 87.157789 71.062411) (xy 87.157786 71.062407) (xy 87.046292 70.950913) + (xy 87.046288 70.95091) (xy 86.915185 70.863309) (xy 86.915172 70.863302) (xy 86.769501 70.802964) + (xy 86.769489 70.802961) (xy 86.614845 70.7722) (xy 86.614842 70.7722) (xy 86.457158 70.7722) (xy 86.457153 70.7722) + (xy 86.377255 70.788093) (xy 86.307664 70.781866) (xy 86.252486 70.739003) (xy 86.229242 70.673113) + (xy 86.24531 70.605116) (xy 86.265379 70.578798) (xy 86.347689 70.496489) (xy 86.435294 70.365379) + (xy 86.495637 70.219697) (xy 86.5264 70.065042) (xy 86.5264 70.039953) (xy 89.5613 70.039953) (xy 89.5613 70.197646) + (xy 89.592061 70.352289) (xy 89.592064 70.352301) (xy 89.652402 70.497972) (xy 89.652409 70.497985) + (xy 89.74001 70.629088) (xy 89.740013 70.629092) (xy 89.851507 70.740586) (xy 89.851511 70.740589) + (xy 89.982614 70.82819) (xy 89.982627 70.828197) (xy 90.128298 70.888535) (xy 90.128303 70.888537) + (xy 90.282953 70.919299) (xy 90.282956 70.9193) (xy 90.282958 70.9193) (xy 90.440644 70.9193) (xy 90.440645 70.919299) + (xy 90.595297 70.888537) (xy 90.740979 70.828194) (xy 90.872089 70.740589) (xy 90.898125 70.714553) + (xy 91.917 70.714553) (xy 91.917 70.872246) (xy 91.947761 71.026889) (xy 91.947764 71.026901) (xy 92.008102 71.172572) + (xy 92.008109 71.172585) (xy 92.09571 71.303688) (xy 92.095713 71.303692) (xy 92.207207 71.415186) + (xy 92.207211 71.415189) (xy 92.338314 71.50279) (xy 92.338327 71.502797) (xy 92.458226 71.55246) + (xy 92.484003 71.563137) (xy 92.592568 71.584732) (xy 92.638653 71.593899) (xy 92.638656 71.5939) + (xy 92.638658 71.5939) (xy 92.796344 71.5939) (xy 92.796345 71.593899) (xy 92.950997 71.563137) + (xy 93.096679 71.502794) (xy 93.227789 71.415189) (xy 93.236676 71.406302) (xy 93.250048 71.392931) + (xy 93.311371 71.359446) (xy 93.381063 71.36443) (xy 93.436996 71.406302) (xy 93.461413 71.471766) + (xy 93.461729 71.480612) (xy 93.461729 71.516366) (xy 93.49249 71.671009) (xy 93.492493 71.671021) + (xy 93.552831 71.816692) (xy 93.552838 71.816705) (xy 93.640439 71.947808) (xy 93.640442 71.947812) + (xy 93.751936 72.059306) (xy 93.75194 72.059309) (xy 93.883043 72.14691) (xy 93.883047 72.146912) + (xy 93.88305 72.146914) (xy 93.958183 72.178035) (xy 94.012585 72.221874) (xy 94.03465 72.288168) + (xy 94.034729 72.292595) (xy 94.034729 72.582893) (xy 94.034729 72.673399) (xy 94.069364 72.757014) + (xy 94.069365 72.757015) (xy 94.728674 73.416325) (xy 94.728676 73.416327) (xy 94.793343 73.443111) + (xy 94.812289 73.450959) (xy 97.093199 73.450959) (xy 97.160238 73.470644) (xy 97.18088 73.487278) + (xy 97.761121 74.067519) (xy 97.794606 74.128842) (xy 97.789622 74.198534) (xy 97.74775 74.254467) + (xy 97.682286 74.278884) (xy 97.67344 74.2792) (xy 97.536055 74.2792) (xy 97.38141 74.309961) (xy 97.381398 74.309964) + (xy 97.235727 74.370302) (xy 97.235714 74.370309) (xy 97.104611 74.45791) (xy 97.104607 74.457913) + (xy 96.993113 74.569407) (xy 96.99311 74.569411) (xy 96.905509 74.700514) (xy 96.905502 74.700527) + (xy 96.845164 74.846198) (xy 96.845161 74.84621) (xy 96.8144 75.000853) (xy 96.8144 75.158546) (xy 96.845161 75.313189) + (xy 96.845164 75.313201) (xy 96.905502 75.458872) (xy 96.905509 75.458885) (xy 96.99311 75.589988) + (xy 96.993113 75.589992) (xy 97.104607 75.701486) (xy 97.104611 75.701489) (xy 97.235714 75.78909) + (xy 97.235727 75.789097) (xy 97.341935 75.833089) (xy 97.381403 75.849437) (xy 97.536053 75.880199) + (xy 97.536056 75.8802) (xy 97.536058 75.8802) (xy 97.693744 75.8802) (xy 97.693745 75.880199) (xy 97.848397 75.849437) + (xy 97.994079 75.789094) (xy 98.125189 75.701489) (xy 98.236689 75.589989) (xy 98.239742 75.585418) + (xy 98.247497 75.573815) (xy 98.301109 75.529009) (xy 98.370434 75.520302) (xy 98.433461 75.550456) + (xy 98.43828 75.555024) (xy 98.51444 75.631184) (xy 98.514444 75.631187) (xy 98.645547 75.718788) + (xy 98.64556 75.718795) (xy 98.744559 75.759801) (xy 98.791236 75.779135) (xy 98.945886 75.809897) + (xy 98.945889 75.809898) (xy 98.945891 75.809898) (xy 99.103577 75.809898) (xy 99.103578 75.809897) + (xy 99.25823 75.779135) (xy 99.397152 75.721592) (xy 99.403905 75.718795) (xy 99.403905 75.718794) + (xy 99.403912 75.718792) (xy 99.535022 75.631187) (xy 99.535024 75.631184) (xy 99.539726 75.627326) + (xy 99.540656 75.628459) (xy 99.595565 75.598468) (xy 99.665257 75.603442) (xy 99.669355 75.605054) + (xy 99.721703 75.626737) (xy 99.721707 75.626737) (xy 99.721711 75.626739) (xy 99.876353 75.657499) + (xy 99.876356 75.6575) (xy 99.876358 75.6575) (xy 100.034044 75.6575) (xy 100.034045 75.657499) + (xy 100.188697 75.626737) (xy 100.334379 75.566394) (xy 100.338381 75.56372) (xy 100.405057 75.542837) + (xy 100.472438 75.561317) (xy 100.510381 75.597926) (xy 100.59301 75.721588) (xy 100.593013 75.721592) + (xy 100.704507 75.833086) (xy 100.704511 75.833089) (xy 100.835614 75.92069) (xy 100.835627 75.920697) + (xy 100.981298 75.981035) (xy 100.981303 75.981037) (xy 101.135953 76.011799) (xy 101.135956 76.0118) + (xy 101.135958 76.0118) (xy 101.293644 76.0118) (xy 101.293645 76.011799) (xy 101.448297 75.981037) + (xy 101.593979 75.920694) (xy 101.725089 75.833089) (xy 101.836589 75.721589) (xy 101.924194 75.590479) + (xy 101.984537 75.444797) (xy 102.0153 75.290142) (xy 102.0153 75.132458) (xy 102.0153 75.132455) + (xy 101.984537 74.977805) (xy 101.984537 74.977803) (xy 101.975528 74.956053) (xy 103.1898 74.956053) + (xy 103.1898 75.113746) (xy 103.220561 75.268389) (xy 103.220564 75.268401) (xy 103.280902 75.414072) + (xy 103.280909 75.414085) (xy 103.36851 75.545188) (xy 103.368513 75.545192) (xy 103.480007 75.656686) + (xy 103.480011 75.656689) (xy 103.611114 75.74429) (xy 103.611127 75.744297) (xy 103.756798 75.804635) + (xy 103.756803 75.804637) (xy 103.899825 75.833086) (xy 103.911453 75.835399) (xy 103.911456 75.8354) + (xy 103.911458 75.8354) (xy 104.069144 75.8354) (xy 104.069145 75.835399) (xy 104.223797 75.804637) + (xy 104.369479 75.744294) (xy 104.500589 75.656689) (xy 104.612089 75.545189) (xy 104.699694 75.414079) + (xy 104.760037 75.268397) (xy 104.7908 75.113742) (xy 104.7908 74.956058) (xy 104.7908 74.956055) + (xy 104.790799 74.956053) (xy 104.780547 74.904513) (xy 104.760037 74.801403) (xy 104.741463 74.756561) + (xy 104.699697 74.655727) (xy 104.69969 74.655714) (xy 104.612089 74.524611) (xy 104.612086 74.524607) + (xy 104.500592 74.413113) (xy 104.500588 74.41311) (xy 104.369485 74.325509) (xy 104.369472 74.325502) + (xy 104.223801 74.265164) (xy 104.223789 74.265161) (xy 104.069145 74.2344) (xy 104.069142 74.2344) + (xy 103.911458 74.2344) (xy 103.911455 74.2344) (xy 103.75681 74.265161) (xy 103.756798 74.265164) + (xy 103.611127 74.325502) (xy 103.611114 74.325509) (xy 103.480011 74.41311) (xy 103.480007 74.413113) + (xy 103.368513 74.524607) (xy 103.36851 74.524611) (xy 103.280909 74.655714) (xy 103.280902 74.655727) + (xy 103.220564 74.801398) (xy 103.220561 74.80141) (xy 103.1898 74.956053) (xy 101.975528 74.956053) + (xy 101.954179 74.904511) (xy 101.924197 74.832127) (xy 101.92419 74.832114) (xy 101.836589 74.701011) + (xy 101.836586 74.701007) (xy 101.725092 74.589513) (xy 101.725088 74.58951) (xy 101.593985 74.501909) + (xy 101.593972 74.501902) (xy 101.448301 74.441564) (xy 101.448289 74.441561) (xy 101.293645 74.4108) + (xy 101.293642 74.4108) (xy 101.135958 74.4108) (xy 101.135955 74.4108) (xy 100.98131 74.441561) + (xy 100.981298 74.441564) (xy 100.835628 74.501902) (xy 100.835614 74.50191) (xy 100.8316 74.504592) + (xy 100.76492 74.525462) (xy 100.697542 74.506971) (xy 100.659618 74.470373) (xy 100.576989 74.346711) + (xy 100.576986 74.346707) (xy 100.465492 74.235213) (xy 100.465488 74.23521) (xy 100.334385 74.147609) + (xy 100.334372 74.147602) (xy 100.188701 74.087264) (xy 100.188689 74.087261) (xy 100.034045 74.0565) + (xy 100.034042 74.0565) (xy 99.876358 74.0565) (xy 99.876355 74.0565) (xy 99.72171 74.087261) (xy 99.721698 74.087264) + (xy 99.576027 74.147602) (xy 99.576014 74.147609) (xy 99.444914 74.235208) (xy 99.440207 74.239072) + (xy 99.43928 74.237943) (xy 99.384334 74.267936) (xy 99.314643 74.262942) (xy 99.310542 74.261328) + (xy 99.258231 74.239661) (xy 99.258227 74.239659) (xy 99.103578 74.208898) (xy 99.103575 74.208898) + (xy 98.945891 74.208898) (xy 98.945888 74.208898) (xy 98.791243 74.239659) (xy 98.791236 74.239661) + (xy 98.716101 74.270782) (xy 98.646632 74.278249) (xy 98.584153 74.246974) (xy 98.580969 74.243901) + (xy 97.367664 73.030595) (xy 97.339657 73.018994) (xy 97.284047 72.995959) (xy 95.003138 72.995959) + (xy 94.973697 72.987314) (xy 94.943711 72.980791) (xy 94.938695 72.977036) (xy 94.936099 72.976274) + (xy 94.915457 72.95964) (xy 94.77997 72.824153) (xy 108.1067 72.824153) (xy 108.1067 72.981846) + (xy 108.137461 73.136489) (xy 108.137464 73.136501) (xy 108.197802 73.282172) (xy 108.197809 73.282185) + (xy 108.28541 73.413288) (xy 108.285413 73.413292) (xy 108.396907 73.524786) (xy 108.396911 73.524789) + (xy 108.528014 73.61239) (xy 108.528027 73.612397) (xy 108.673698 73.672735) (xy 108.673703 73.672737) + (xy 108.828353 73.703499) (xy 108.828356 73.7035) (xy 108.828358 73.7035) (xy 108.986044 73.7035) + (xy 108.986045 73.703499) (xy 109.140697 73.672737) (xy 109.286379 73.612394) (xy 109.417489 73.524789) + (xy 109.528989 73.413289) (xy 109.616594 73.282179) (xy 109.676937 73.136497) (xy 109.7077 72.981842) + (xy 109.7077 72.824158) (xy 109.7077 72.824155) (xy 109.707699 72.824153) (xy 109.703726 72.804179) + (xy 109.676937 72.669503) (xy 109.647938 72.599492) (xy 109.616597 72.523827) (xy 109.61659 72.523814) + (xy 109.528989 72.392711) (xy 109.528986 72.392707) (xy 109.417492 72.281213) (xy 109.417488 72.28121) + (xy 109.286385 72.193609) (xy 109.286372 72.193602) (xy 109.140701 72.133264) (xy 109.140689 72.133261) + (xy 108.986045 72.1025) (xy 108.986042 72.1025) (xy 108.828358 72.1025) (xy 108.828355 72.1025) + (xy 108.67371 72.133261) (xy 108.673698 72.133264) (xy 108.528027 72.193602) (xy 108.528014 72.193609) + (xy 108.396911 72.28121) (xy 108.396907 72.281213) (xy 108.285413 72.392707) (xy 108.28541 72.392711) + (xy 108.197809 72.523814) (xy 108.197802 72.523827) (xy 108.137464 72.669498) (xy 108.137461 72.66951) + (xy 108.1067 72.824153) (xy 94.77997 72.824153) (xy 94.526048 72.570231) (xy 94.492563 72.508908) + (xy 94.489729 72.48255) (xy 94.489729 72.292595) (xy 94.509414 72.225556) (xy 94.562218 72.179801) + (xy 94.566228 72.178054) (xy 94.641408 72.146914) (xy 94.772518 72.059309) (xy 94.884018 71.947809) + (xy 94.971623 71.816699) (xy 95.031966 71.671017) (xy 95.062729 71.516362) (xy 95.062729 71.358678) + (xy 95.062729 71.358675) (xy 95.062728 71.358673) (xy 95.062724 71.358653) (xy 95.031966 71.204023) + (xy 95.031956 71.203998) (xy 94.971626 71.058347) (xy 94.971619 71.058334) (xy 94.884018 70.927231) + (xy 94.884015 70.927227) (xy 94.772521 70.815733) (xy 94.772517 70.81573) (xy 94.641414 70.728129) + (xy 94.641401 70.728122) (xy 94.49573 70.667784) (xy 94.495718 70.667781) (xy 94.341074 70.63702) + (xy 94.341071 70.63702) (xy 94.183387 70.63702) (xy 94.183384 70.63702) (xy 94.028739 70.667781) + (xy 94.028727 70.667784) (xy 93.883056 70.728122) (xy 93.883043 70.728129) (xy 93.75194 70.81573) + (xy 93.751936 70.815733) (xy 93.729681 70.837989) (xy 93.668358 70.871474) (xy 93.598666 70.86649) + (xy 93.542733 70.824618) (xy 93.518316 70.759154) (xy 93.518 70.750308) (xy 93.518 70.714555) (xy 93.517999 70.714553) + (xy 93.514227 70.69559) (xy 93.487237 70.559903) (xy 93.487235 70.559898) (xy 93.426897 70.414227) + (xy 93.42689 70.414214) (xy 93.339289 70.283111) (xy 93.339286 70.283107) (xy 93.227792 70.171613) + (xy 93.227788 70.17161) (xy 93.096685 70.084009) (xy 93.096672 70.084002) (xy 92.951001 70.023664) + (xy 92.950989 70.023661) (xy 92.796345 69.9929) (xy 92.796342 69.9929) (xy 92.638658 69.9929) (xy 92.638655 69.9929) + (xy 92.48401 70.023661) (xy 92.483998 70.023664) (xy 92.338327 70.084002) (xy 92.338314 70.084009) + (xy 92.207211 70.17161) (xy 92.207207 70.171613) (xy 92.095713 70.283107) (xy 92.09571 70.283111) + (xy 92.008109 70.414214) (xy 92.008102 70.414227) (xy 91.947764 70.559898) (xy 91.947761 70.55991) + (xy 91.917 70.714553) (xy 90.898125 70.714553) (xy 90.983589 70.629089) (xy 91.071194 70.497979) + (xy 91.131537 70.352297) (xy 91.1623 70.197642) (xy 91.1623 70.039958) (xy 91.1623 70.039955) (xy 91.162299 70.039953) + (xy 91.153712 69.996786) (xy 91.131537 69.885303) (xy 91.131535 69.885298) (xy 91.071197 69.739627) + (xy 91.07119 69.739614) (xy 90.983589 69.608511) (xy 90.983586 69.608507) (xy 90.872092 69.497013) + (xy 90.872088 69.49701) (xy 90.740985 69.409409) (xy 90.740972 69.409402) (xy 90.595301 69.349064) + (xy 90.595289 69.349061) (xy 90.440645 69.3183) (xy 90.440642 69.3183) (xy 90.282958 69.3183) (xy 90.282955 69.3183) + (xy 90.12831 69.349061) (xy 90.128298 69.349064) (xy 89.982627 69.409402) (xy 89.982614 69.409409) + (xy 89.851511 69.49701) (xy 89.851507 69.497013) (xy 89.740013 69.608507) (xy 89.74001 69.608511) + (xy 89.652409 69.739614) (xy 89.652402 69.739627) (xy 89.592064 69.885298) (xy 89.592061 69.88531) + (xy 89.5613 70.039953) (xy 86.5264 70.039953) (xy 86.5264 69.907358) (xy 86.5264 69.907355) (xy 86.526399 69.907353) + (xy 86.509339 69.821586) (xy 86.495637 69.752703) (xy 86.490218 69.739621) (xy 86.435297 69.607027) + (xy 86.43529 69.607014) (xy 86.347689 69.475911) (xy 86.347686 69.475907) (xy 86.236192 69.364413) + (xy 86.236188 69.36441) (xy 86.188803 69.332748) (xy 86.143998 69.279135) (xy 86.135291 69.20981) + (xy 86.165446 69.146783) (xy 86.169994 69.141983) (xy 86.245889 69.066089) (xy 86.333494 68.934979) + (xy 86.393837 68.789297) (xy 86.4246 68.634642) (xy 86.4246 68.514953) (xy 92.9697 68.514953) (xy 92.9697 68.672646) + (xy 93.000461 68.827289) (xy 93.000464 68.827301) (xy 93.060802 68.972972) (xy 93.060809 68.972985) + (xy 93.14841 69.104088) (xy 93.148413 69.104092) (xy 93.259907 69.215586) (xy 93.259911 69.215589) + (xy 93.391014 69.30319) (xy 93.391027 69.303197) (xy 93.511778 69.353213) (xy 93.536703 69.363537) + (xy 93.691353 69.394299) (xy 93.691356 69.3943) (xy 93.691358 69.3943) (xy 93.849044 69.3943) (xy 93.849045 69.394299) + (xy 94.003697 69.363537) (xy 94.149379 69.303194) (xy 94.280489 69.215589) (xy 94.391989 69.104089) + (xy 94.479594 68.972979) (xy 94.539937 68.827297) (xy 94.5707 68.672642) (xy 94.5707 68.514958) + (xy 94.5707 68.514955) (xy 94.570699 68.514953) (xy 94.560496 68.463658) (xy 94.539937 68.360303) + (xy 94.539935 68.360298) (xy 94.479597 68.214627) (xy 94.47959 68.214614) (xy 94.391989 68.083511) + (xy 94.391986 68.083507) (xy 94.280492 67.972013) (xy 94.280488 67.97201) (xy 94.149385 67.884409) + (xy 94.149372 67.884402) (xy 94.003701 67.824064) (xy 94.003689 67.824061) (xy 93.849045 67.7933) + (xy 93.849042 67.7933) (xy 93.691358 67.7933) (xy 93.691355 67.7933) (xy 93.53671 67.824061) (xy 93.536698 67.824064) + (xy 93.391027 67.884402) (xy 93.391014 67.884409) (xy 93.259911 67.97201) (xy 93.259907 67.972013) + (xy 93.148413 68.083507) (xy 93.14841 68.083511) (xy 93.060809 68.214614) (xy 93.060802 68.214627) + (xy 93.000464 68.360298) (xy 93.000461 68.36031) (xy 92.9697 68.514953) (xy 86.4246 68.514953) (xy 86.4246 68.476958) + (xy 86.4246 68.476955) (xy 86.424599 68.476953) (xy 86.41382 68.422763) (xy 86.393837 68.322303) + (xy 86.364704 68.251968) (xy 86.357235 68.182499) (xy 86.388511 68.12002) (xy 86.4486 68.084368) + (xy 86.503456 68.082899) (xy 86.525878 68.087358) (xy 86.539657 68.0901) (xy 86.539658 68.0901) + (xy 86.697344 68.0901) (xy 86.697345 68.090099) (xy 86.851997 68.059337) (xy 86.997679 67.998994) + (xy 87.128789 67.911389) (xy 87.240289 67.799889) (xy 87.327894 67.668779) (xy 87.388237 67.523097) + (xy 87.389033 67.519095) (xy 87.421411 67.457185) (xy 87.4632 67.428717) (xy 87.463389 67.428638) + (xy 87.463397 67.428637) (xy 87.609079 67.368294) (xy 87.740189 67.280689) (xy 87.851689 67.169189) + (xy 87.939294 67.038079) (xy 87.999637 66.892397) (xy 88.0304 66.737742) (xy 88.0304 66.580058) + (xy 88.0304 66.580055) (xy 88.030399 66.580053) (xy 88.027345 66.5647) (xy 87.999637 66.425403) + (xy 87.997984 66.421413) (xy 87.939297 66.279727) (xy 87.93929 66.279714) (xy 87.883993 66.196957) + (xy 87.851689 66.14861) (xy 87.837232 66.134153) (xy 88.8115 66.134153) (xy 88.8115 66.291846) (xy 88.842261 66.446489) + (xy 88.842264 66.446501) (xy 88.902602 66.592172) (xy 88.902609 66.592185) (xy 88.99021 66.723288) + (xy 88.990213 66.723292) (xy 89.101707 66.834786) (xy 89.101711 66.834789) (xy 89.232814 66.92239) + (xy 89.232827 66.922397) (xy 89.378498 66.982735) (xy 89.378503 66.982737) (xy 89.533153 67.013499) + (xy 89.533156 67.0135) (xy 89.533158 67.0135) (xy 89.690844 67.0135) (xy 89.690845 67.013499) (xy 89.845497 66.982737) + (xy 89.991179 66.922394) (xy 90.122289 66.834789) (xy 90.233789 66.723289) (xy 90.321394 66.592179) + (xy 90.381737 66.446497) (xy 90.4125 66.291842) (xy 90.4125 66.134158) (xy 90.4125 66.134155) (xy 90.412499 66.134153) + (xy 90.381738 65.97951) (xy 90.381737 65.979503) (xy 90.368194 65.946807) (xy 90.321397 65.833827) + (xy 90.321393 65.83382) (xy 90.315774 65.825411) (xy 90.263818 65.747653) (xy 91.165 65.747653) + (xy 91.165 65.905346) (xy 91.195761 66.059989) (xy 91.195764 66.060001) (xy 91.256102 66.205672) + (xy 91.256109 66.205685) (xy 91.34371 66.336788) (xy 91.343713 66.336792) (xy 91.455207 66.448286) + (xy 91.455211 66.448289) (xy 91.586314 66.53589) (xy 91.586327 66.535897) (xy 91.731998 66.596235) + (xy 91.732003 66.596237) (xy 91.886653 66.626999) (xy 91.886656 66.627) (xy 91.886658 66.627) (xy 92.044344 66.627) + (xy 92.044345 66.626999) (xy 92.198997 66.596237) (xy 92.311666 66.549567) (xy 92.344672 66.535897) + (xy 92.344672 66.535896) (xy 92.344679 66.535894) (xy 92.475789 66.448289) (xy 92.587289 66.336789) + (xy 92.674894 66.205679) (xy 92.735237 66.059997) (xy 92.766 65.905342) (xy 92.766 65.747658) (xy 92.766 65.747655) + (xy 92.765999 65.747653) (xy 92.741861 65.626306) (xy 92.735237 65.593003) (xy 92.734494 65.59121) + (xy 92.674897 65.447327) (xy 92.67489 65.447314) (xy 92.587289 65.316211) (xy 92.587286 65.316207) + (xy 92.475792 65.204713) (xy 92.475788 65.20471) (xy 92.344685 65.117109) (xy 92.344672 65.117102) + (xy 92.199001 65.056764) (xy 92.198989 65.056761) (xy 92.044345 65.026) (xy 92.044342 65.026) (xy 91.886658 65.026) + (xy 91.886655 65.026) (xy 91.73201 65.056761) (xy 91.731998 65.056764) (xy 91.586327 65.117102) + (xy 91.586314 65.117109) (xy 91.455211 65.20471) (xy 91.455207 65.204713) (xy 91.343713 65.316207) + (xy 91.34371 65.316211) (xy 91.256109 65.447314) (xy 91.256102 65.447327) (xy 91.195764 65.592998) + (xy 91.195761 65.59301) (xy 91.165 65.747653) (xy 90.263818 65.747653) (xy 90.233789 65.702711) + (xy 90.233786 65.702707) (xy 90.122292 65.591213) (xy 90.122288 65.59121) (xy 89.991185 65.503609) + (xy 89.991172 65.503602) (xy 89.845501 65.443264) (xy 89.845489 65.443261) (xy 89.690845 65.4125) + (xy 89.690842 65.4125) (xy 89.533158 65.4125) (xy 89.533155 65.4125) (xy 89.37851 65.443261) (xy 89.378498 65.443264) + (xy 89.232827 65.503602) (xy 89.232814 65.503609) (xy 89.101711 65.59121) (xy 89.101707 65.591213) + (xy 88.990213 65.702707) (xy 88.99021 65.702711) (xy 88.902609 65.833814) (xy 88.902602 65.833827) + (xy 88.842264 65.979498) (xy 88.842261 65.97951) (xy 88.8115 66.134153) (xy 87.837232 66.134153) + (xy 87.740192 66.037113) (xy 87.740188 66.03711) (xy 87.609085 65.949509) (xy 87.609072 65.949502) + (xy 87.463401 65.889164) (xy 87.463389 65.889161) (xy 87.308745 65.8584) (xy 87.308742 65.8584) + (xy 87.151058 65.8584) (xy 87.151055 65.8584) (xy 86.99641 65.889161) (xy 86.996398 65.889164) (xy 86.850727 65.949502) + (xy 86.850714 65.949509) (xy 86.719611 66.03711) (xy 86.719607 66.037113) (xy 86.608113 66.148607) + (xy 86.60811 66.148611) (xy 86.520509 66.279714) (xy 86.520502 66.279727) (xy 86.460163 66.4254) + (xy 86.46016 66.42541) (xy 86.459362 66.429424) (xy 86.426971 66.491331) (xy 86.3852 66.519781) + (xy 86.239323 66.580204) (xy 86.239314 66.580209) (xy 86.108211 66.66781) (xy 86.108207 66.667813) + (xy 85.996713 66.779307) (xy 85.99671 66.779311) (xy 85.909109 66.910414) (xy 85.909102 66.910427) + (xy 85.848764 67.056098) (xy 85.848761 67.05611) (xy 85.818 67.210753) (xy 85.818 67.368446) (xy 85.848761 67.523089) + (xy 85.848763 67.523097) (xy 85.858313 67.546153) (xy 85.877896 67.593432) (xy 85.885364 67.662901) + (xy 85.854088 67.72538) (xy 85.793999 67.761032) (xy 85.739143 67.7625) (xy 85.702946 67.7553) (xy 85.702942 67.7553) + (xy 85.545258 67.7553) (xy 85.545255 67.7553) (xy 85.39061 67.786061) (xy 85.390598 67.786064) (xy 85.244927 67.846402) + (xy 85.244914 67.846409) (xy 85.113811 67.93401) (xy 85.113807 67.934013) (xy 85.002313 68.045507) + (xy 85.00231 68.045511) (xy 84.914709 68.176614) (xy 84.914702 68.176627) (xy 84.854364 68.322298) + (xy 84.854361 68.32231) (xy 84.8236 68.476953) (xy 82.849002 68.476953) (xy 82.841649 68.473907) + (xy 82.833512 68.468963) (xy 82.816133 68.449897) (xy 82.796049 68.433713) (xy 82.791398 68.422763) + (xy 82.786443 68.417327) (xy 82.784684 68.406954) (xy 82.776289 68.387188) (xy 82.760737 68.309003) + (xy 82.737113 68.251968) (xy 82.700397 68.163327) (xy 82.70039 68.163314) (xy 82.612789 68.032211) + (xy 82.612786 68.032207) (xy 82.509112 67.928533) (xy 82.509108 67.92853) (xy 82.501289 67.920711) + (xy 82.403353 67.855272) (xy 82.403334 67.855259) (xy 82.370185 67.833109) (xy 82.370172 67.833102) + (xy 82.224501 67.772764) (xy 82.224489 67.772761) (xy 82.069845 67.742) (xy 82.069842 67.742) (xy 81.912158 67.742) + (xy 81.912155 67.742) (xy 81.75751 67.772761) (xy 81.757498 67.772764) (xy 81.622801 67.828557) + (xy 81.553332 67.836026) (xy 81.490853 67.80475) (xy 81.455201 67.744661) (xy 81.452565 67.709934) + (xy 81.45175 67.709934) (xy 81.45175 67.546155) (xy 81.451749 67.546153) (xy 81.434052 67.457185) + (xy 81.420987 67.391503) (xy 81.375087 67.280689) (xy 81.360647 67.245827) (xy 81.36064 67.245814) + (xy 81.273039 67.114711) (xy 81.273036 67.114707) (xy 81.161542 67.003213) (xy 81.161538 67.00321) + (xy 81.030435 66.915609) (xy 81.030422 66.915602) (xy 80.884751 66.855264) (xy 80.884739 66.855261) + (xy 80.730095 66.8245) (xy 80.730092 66.8245) (xy 80.572408 66.8245) (xy 80.572405 66.8245) (xy 80.41776 66.855261) + (xy 80.417748 66.855264) (xy 80.272077 66.915602) (xy 80.272064 66.915609) (xy 80.140961 67.00321) + (xy 80.140957 67.003213) (xy 80.029463 67.114707) (xy 80.02946 67.114711) (xy 79.941859 67.245814) + (xy 79.941852 67.245827) (xy 79.881514 67.391498) (xy 79.881511 67.39151) (xy 79.85075 67.546153) + (xy 45.35175 67.546153) (xy 45.35175 66.378253) (xy 75.087 66.378253) (xy 75.087 66.535946) (xy 75.117761 66.690589) + (xy 75.117764 66.690601) (xy 75.178102 66.836272) (xy 75.178109 66.836285) (xy 75.26571 66.967388) + (xy 75.265713 66.967392) (xy 75.377207 67.078886) (xy 75.377211 67.078889) (xy 75.508314 67.16649) + (xy 75.508327 67.166497) (xy 75.653998 67.226835) (xy 75.654003 67.226837) (xy 75.749472 67.245827) + (xy 75.808653 67.257599) (xy 75.808656 67.2576) (xy 75.808658 67.2576) (xy 75.966344 67.2576) (xy 75.966345 67.257599) + (xy 76.120997 67.226837) (xy 76.233666 67.180167) (xy 76.266672 67.166497) (xy 76.266672 67.166496) + (xy 76.266679 67.166494) (xy 76.397789 67.078889) (xy 76.509289 66.967389) (xy 76.596894 66.836279) + (xy 76.597513 66.834786) (xy 76.643694 66.723292) (xy 76.657237 66.690597) (xy 76.688 66.535942) + (xy 76.688 66.378258) (xy 76.688 66.378255) (xy 76.687999 66.378253) (xy 76.670811 66.291844) (xy 76.657237 66.223603) + (xy 76.620186 66.134153) (xy 76.596897 66.077927) (xy 76.59689 66.077914) (xy 76.509289 65.946811) + (xy 76.509286 65.946807) (xy 76.397792 65.835313) (xy 76.397788 65.83531) (xy 76.266685 65.747709) + (xy 76.266672 65.747702) (xy 76.121001 65.687364) (xy 76.120989 65.687361) (xy 75.966345 65.6566) + (xy 75.966342 65.6566) (xy 75.808658 65.6566) (xy 75.808655 65.6566) (xy 75.65401 65.687361) (xy 75.653998 65.687364) + (xy 75.508327 65.747702) (xy 75.508314 65.747709) (xy 75.377211 65.83531) (xy 75.377207 65.835313) + (xy 75.265713 65.946807) (xy 75.26571 65.946811) (xy 75.178109 66.077914) (xy 75.178102 66.077927) + (xy 75.117764 66.223598) (xy 75.117761 66.22361) (xy 75.087 66.378253) (xy 45.35175 66.378253) (xy 45.35175 64.996253) + (xy 81.0921 64.996253) (xy 81.0921 65.153946) (xy 81.122861 65.308589) (xy 81.122864 65.308601) + (xy 81.183202 65.454272) (xy 81.183209 65.454285) (xy 81.27081 65.585388) (xy 81.270813 65.585392) + (xy 81.382307 65.696886) (xy 81.382311 65.696889) (xy 81.513414 65.78449) (xy 81.513427 65.784497) + (xy 81.636105 65.835311) (xy 81.659103 65.844837) (xy 81.706416 65.854248) (xy 81.777478 65.868384) + (xy 81.839389 65.900769) (xy 81.868397 65.948198) (xy 81.869432 65.94777) (xy 81.932102 66.099072) + (xy 81.932109 66.099085) (xy 82.01971 66.230188) (xy 82.019713 66.230192) (xy 82.131207 66.341686) + (xy 82.131211 66.341689) (xy 82.262314 66.42929) (xy 82.262327 66.429297) (xy 82.32333 66.454565) + (xy 82.377734 66.498406) (xy 82.399799 66.5647) (xy 82.38252 66.632399) (xy 82.378981 66.638015) + (xy 82.361611 66.664011) (xy 82.361602 66.664027) (xy 82.301264 66.809698) (xy 82.301261 66.80971) + (xy 82.2705 66.964353) (xy 82.2705 67.122046) (xy 82.301261 67.276689) (xy 82.301264 67.276701) + (xy 82.361602 67.422372) (xy 82.361609 67.422385) (xy 82.44921 67.553488) (xy 82.449213 67.553492) + (xy 82.552886 67.657165) (xy 82.552889 67.657167) (xy 82.560711 67.664989) (xy 82.658664 67.730439) + (xy 82.691814 67.75259) (xy 82.691827 67.752597) (xy 82.837498 67.812935) (xy 82.837503 67.812937) + (xy 82.992153 67.843699) (xy 82.992156 67.8437) (xy 82.992158 67.8437) (xy 83.149844 67.8437) (xy 83.149845 67.843699) + (xy 83.304497 67.812937) (xy 83.450179 67.752594) (xy 83.581289 67.664989) (xy 83.692789 67.553489) + (xy 83.780394 67.422379) (xy 83.840737 67.276697) (xy 83.8715 67.122042) (xy 83.8715 66.964358) + (xy 83.8715 66.964355) (xy 83.871499 66.964353) (xy 83.861803 66.915609) (xy 83.840737 66.809703) + (xy 83.804945 66.723292) (xy 83.780397 66.664027) (xy 83.78039 66.664014) (xy 83.692789 66.532911) + (xy 83.692786 66.532907) (xy 83.581292 66.421413) (xy 83.581288 66.42141) (xy 83.450185 66.333809) + (xy 83.450175 66.333804) (xy 83.389168 66.308534) (xy 83.334765 66.264693) (xy 83.3127 66.198398) + (xy 83.329979 66.130699) (xy 83.333508 66.125097) (xy 83.350894 66.099079) (xy 83.411237 65.953397) + (xy 83.442 65.798742) (xy 83.442 65.641058) (xy 83.442 65.641055) (xy 83.441999 65.641053) (xy 83.436432 65.613067) + (xy 83.411237 65.486403) (xy 83.409654 65.482582) (xy 83.350897 65.340727) (xy 83.35089 65.340714) + (xy 83.263289 65.209611) (xy 83.263286 65.209607) (xy 83.151792 65.098113) (xy 83.151788 65.09811) + (xy 83.020685 65.010509) (xy 83.020672 65.010502) (xy 82.875001 64.950164) (xy 82.874991 64.950161) + (xy 82.75662 64.926615) (xy 82.694709 64.89423) (xy 82.665704 64.8468) (xy 82.664668 64.84723) (xy 82.601997 64.695927) + (xy 82.60199 64.695914) (xy 82.514389 64.564811) (xy 82.514386 64.564807) (xy 82.402892 64.453313) + (xy 82.402888 64.45331) (xy 82.271785 64.365709) (xy 82.271772 64.365702) (xy 82.126101 64.305364) + (xy 82.126089 64.305361) (xy 81.971445 64.2746) (xy 81.971442 64.2746) (xy 81.813758 64.2746) (xy 81.813755 64.2746) + (xy 81.65911 64.305361) (xy 81.659098 64.305364) (xy 81.513427 64.365702) (xy 81.513414 64.365709) + (xy 81.382311 64.45331) (xy 81.382307 64.453313) (xy 81.270813 64.564807) (xy 81.27081 64.564811) + (xy 81.183209 64.695914) (xy 81.183202 64.695927) (xy 81.122864 64.841598) (xy 81.122861 64.84161) + (xy 81.0921 64.996253) (xy 45.35175 64.996253) (xy 45.35175 64.072353) (xy 57.4876 64.072353) (xy 57.4876 64.230046) + (xy 57.518361 64.384689) (xy 57.518364 64.384701) (xy 57.578702 64.530372) (xy 57.578709 64.530385) + (xy 57.66631 64.661488) (xy 57.666313 64.661492) (xy 57.777807 64.772986) (xy 57.777811 64.772989) + (xy 57.908914 64.86059) (xy 57.908927 64.860597) (xy 58.050892 64.9194) (xy 58.054603 64.920937) + (xy 58.183795 64.946635) (xy 58.209253 64.951699) (xy 58.209256 64.9517) (xy 58.209258 64.9517) + (xy 58.366944 64.9517) (xy 58.366945 64.951699) (xy 58.521597 64.920937) (xy 58.667279 64.860594) + (xy 58.798389 64.772989) (xy 58.909889 64.661489) (xy 58.997494 64.530379) (xy 59.057837 64.384697) + (xy 59.0886 64.230042) (xy 59.0886 64.072358) (xy 59.0886 64.072355) (xy 59.088599 64.072353) (xy 59.073379 63.995837) + (xy 59.057837 63.917703) (xy 59.047548 63.892863) (xy 58.997497 63.772027) (xy 58.99749 63.772014) + (xy 58.909889 63.640911) (xy 58.909886 63.640907) (xy 58.798392 63.529413) (xy 58.798388 63.52941) + (xy 58.667285 63.441809) (xy 58.667272 63.441802) (xy 58.521601 63.381464) (xy 58.521589 63.381461) + (xy 58.366945 63.3507) (xy 58.366942 63.3507) (xy 58.209258 63.3507) (xy 58.209255 63.3507) (xy 58.05461 63.381461) + (xy 58.054598 63.381464) (xy 57.908927 63.441802) (xy 57.908914 63.441809) (xy 57.777811 63.52941) + (xy 57.777807 63.529413) (xy 57.666313 63.640907) (xy 57.66631 63.640911) (xy 57.578709 63.772014) + (xy 57.578702 63.772027) (xy 57.518364 63.917698) (xy 57.518361 63.91771) (xy 57.4876 64.072353) + (xy 45.35175 64.072353) (xy 45.35175 59.893053) (xy 57.8153 59.893053) (xy 57.8153 60.050746) (xy 57.846061 60.205389) + (xy 57.846064 60.205401) (xy 57.906402 60.351072) (xy 57.906409 60.351085) (xy 57.99401 60.482188) + (xy 57.994013 60.482192) (xy 58.105507 60.593686) (xy 58.105511 60.593689) (xy 58.236614 60.68129) + (xy 58.236627 60.681297) (xy 58.380434 60.740863) (xy 58.382303 60.741637) (xy 58.534867 60.771984) + (xy 58.536953 60.772399) (xy 58.536956 60.7724) (xy 58.536958 60.7724) (xy 58.694644 60.7724) (xy 58.694645 60.772399) + (xy 58.849297 60.741637) (xy 58.994979 60.681294) (xy 59.126089 60.593689) (xy 59.237589 60.482189) + (xy 59.325194 60.351079) (xy 59.356315 60.275945) (xy 59.400154 60.221544) (xy 59.466448 60.199479) + (xy 59.470875 60.1994) (xy 61.634452 60.1994) (xy 61.634453 60.1994) (xy 61.718068 60.164765) (xy 61.71807 60.164763) + (xy 61.718071 60.164763) (xy 62.572464 59.310369) (xy 62.572465 59.310368) (xy 62.575186 59.3038) + (xy 62.586717 59.275963) (xy 62.607099 59.226755) (xy 62.6071 59.226753) (xy 62.6071 58.417995) + (xy 62.626785 58.350956) (xy 62.679589 58.305201) (xy 62.748747 58.295257) (xy 62.812303 58.324282) + (xy 62.818781 58.330314) (xy 63.119081 58.630614) (xy 63.152566 58.691937) (xy 63.1554 58.718295) + (xy 63.1554 61.697754) (xy 63.135715 61.764793) (xy 63.119081 61.785435) (xy 62.492335 62.41218) + (xy 62.431012 62.445665) (xy 62.36132 62.440681) (xy 62.305387 62.398809) (xy 62.301552 62.39339) + (xy 62.282389 62.364711) (xy 62.282386 62.364707) (xy 62.170892 62.253213) (xy 62.170888 62.25321) + (xy 62.039785 62.165609) (xy 62.039772 62.165602) (xy 61.894101 62.105264) (xy 61.894089 62.105261) + (xy 61.739445 62.0745) (xy 61.739442 62.0745) (xy 61.581758 62.0745) (xy 61.581755 62.0745) (xy 61.42711 62.105261) + (xy 61.427098 62.105264) (xy 61.281427 62.165602) (xy 61.281414 62.165609) (xy 61.150311 62.25321) + (xy 61.150307 62.253213) (xy 61.038813 62.364707) (xy 61.03881 62.364711) (xy 60.951209 62.495814) + (xy 60.951202 62.495827) (xy 60.890864 62.641498) (xy 60.890861 62.64151) (xy 60.8601 62.796153) + (xy 60.8601 62.953846) (xy 60.890861 63.108489) (xy 60.890864 63.108501) (xy 60.951202 63.254172) + (xy 60.951209 63.254185) (xy 61.03881 63.385288) (xy 61.038813 63.385292) (xy 61.150307 63.496786) + (xy 61.150311 63.496789) (xy 61.281414 63.58439) (xy 61.281427 63.584397) (xy 61.417856 63.640907) + (xy 61.427103 63.644737) (xy 61.581753 63.675499) (xy 61.581756 63.6755) (xy 61.581758 63.6755) + (xy 61.739444 63.6755) (xy 61.739445 63.675499) (xy 61.894097 63.644737) (xy 62.039779 63.584394) + (xy 62.170889 63.496789) (xy 62.282389 63.385289) (xy 62.369994 63.254179) (xy 62.414428 63.146901) + (xy 62.441307 63.106676) (xy 63.575763 61.97222) (xy 63.575765 61.972218) (xy 63.6104 61.888603) + (xy 63.6104 61.798097) (xy 63.6104 58.527447) (xy 63.598278 58.498182) (xy 63.575768 58.443834) + (xy 63.055169 57.923235) (xy 63.021684 57.861912) (xy 63.026668 57.79222) (xy 63.06854 57.736287) + (xy 63.134004 57.71187) (xy 63.161659 57.7136) (xy 63.165347 57.7136) (xy 63.8591 57.7136) (xy 63.926139 57.733285) + (xy 63.971894 57.786089) (xy 63.9831 57.8376) (xy 63.9831 61.920253) (xy 64.017736 62.00387) (xy 64.495103 62.481236) + (xy 64.528588 62.542559) (xy 64.523604 62.61225) (xy 64.521984 62.616368) (xy 64.490863 62.691503) + (xy 64.490861 62.69151) (xy 64.4601 62.846153) (xy 64.4601 63.003846) (xy 64.490861 63.158489) (xy 64.490864 63.158501) + (xy 64.551202 63.304172) (xy 64.551209 63.304185) (xy 64.63881 63.435288) (xy 64.638813 63.435292) + (xy 64.750307 63.546786) (xy 64.750311 63.546789) (xy 64.881414 63.63439) (xy 64.881427 63.634397) + (xy 65.027098 63.694735) (xy 65.027103 63.694737) (xy 65.181753 63.725499) (xy 65.181756 63.7255) + (xy 65.181758 63.7255) (xy 65.339444 63.7255) (xy 65.339445 63.725499) (xy 65.494097 63.694737) + (xy 65.614813 63.644735) (xy 65.639772 63.634397) (xy 65.639772 63.634396) (xy 65.639779 63.634394) + (xy 65.770889 63.546789) (xy 65.882389 63.435289) (xy 65.923439 63.373853) (xy 84.3257 63.373853) + (xy 84.3257 63.531546) (xy 84.356461 63.686189) (xy 84.356464 63.686201) (xy 84.416802 63.831872) + (xy 84.416809 63.831885) (xy 84.50441 63.962988) (xy 84.504413 63.962992) (xy 84.615907 64.074486) + (xy 84.615911 64.074489) (xy 84.747014 64.16209) (xy 84.747027 64.162097) (xy 84.869437 64.2128) + (xy 84.892703 64.222437) (xy 84.978972 64.239597) (xy 85.047353 64.253199) (xy 85.047356 64.2532) + (xy 85.047358 64.2532) (xy 85.205044 64.2532) (xy 85.205045 64.253199) (xy 85.359697 64.222437) + (xy 85.505379 64.162094) (xy 85.636489 64.074489) (xy 85.747989 63.962989) (xy 85.835594 63.831879) + (xy 85.895937 63.686197) (xy 85.9267 63.531542) (xy 85.9267 63.373858) (xy 85.9267 63.373855) (xy 85.926699 63.373853) + (xy 85.922264 63.351557) (xy 85.895937 63.219203) (xy 85.866135 63.147253) (xy 87.6959 63.147253) + (xy 87.6959 63.304946) (xy 87.726661 63.459589) (xy 87.726664 63.459601) (xy 87.787002 63.605272) + (xy 87.787009 63.605285) (xy 87.87461 63.736388) (xy 87.874613 63.736392) (xy 87.986107 63.847886) + (xy 87.986111 63.847889) (xy 88.117214 63.93549) (xy 88.117227 63.935497) (xy 88.260245 63.994736) + (xy 88.262903 63.995837) (xy 88.411038 64.025303) (xy 88.417553 64.026599) (xy 88.417556 64.0266) + (xy 88.417558 64.0266) (xy 88.575244 64.0266) (xy 88.575245 64.026599) (xy 88.729897 63.995837) + (xy 88.875579 63.935494) (xy 88.908134 63.913741) (xy 88.974809 63.892863) (xy 89.04219 63.911346) + (xy 89.088881 63.963324) (xy 89.100059 64.032294) (xy 89.098642 64.041034) (xy 89.0873 64.098053) + (xy 89.0873 64.255746) (xy 89.118061 64.410389) (xy 89.118064 64.410401) (xy 89.178402 64.556072) + (xy 89.178409 64.556085) (xy 89.26601 64.687188) (xy 89.266013 64.687192) (xy 89.377507 64.798686) + (xy 89.377511 64.798689) (xy 89.508614 64.88629) (xy 89.508627 64.886297) (xy 89.613529 64.929748) + (xy 89.654303 64.946637) (xy 89.808953 64.977399) (xy 89.808956 64.9774) (xy 89.808958 64.9774) + (xy 89.966644 64.9774) (xy 89.966645 64.977399) (xy 90.121297 64.946637) (xy 90.266979 64.886294) + (xy 90.398089 64.798689) (xy 90.509589 64.687189) (xy 90.585518 64.573553) (xy 92.6474 64.573553) + (xy 92.6474 64.731246) (xy 92.678161 64.885889) (xy 92.678164 64.885901) (xy 92.738502 65.031572) + (xy 92.738509 65.031585) (xy 92.82611 65.162688) (xy 92.826113 65.162692) (xy 92.937607 65.274186) + (xy 92.937611 65.274189) (xy 93.068714 65.36179) (xy 93.068727 65.361797) (xy 93.191137 65.4125) + (xy 93.214403 65.422137) (xy 93.341011 65.447321) (xy 93.355469 65.450197) (xy 93.41738 65.482582) + (xy 93.451954 65.543297) (xy 93.448215 65.613067) (xy 93.407349 65.669739) (xy 93.40017 65.674915) + (xy 93.341813 65.713908) (xy 93.341807 65.713913) (xy 93.230313 65.825407) (xy 93.23031 65.825411) + (xy 93.142709 65.956514) (xy 93.142702 65.956527) (xy 93.082364 66.102198) (xy 93.082361 66.10221) + (xy 93.0516 66.256853) (xy 93.0516 66.414546) (xy 93.082361 66.569189) (xy 93.082364 66.569201) + (xy 93.142702 66.714872) (xy 93.142709 66.714885) (xy 93.23031 66.845988) (xy 93.230313 66.845992) + (xy 93.341807 66.957486) (xy 93.341811 66.957489) (xy 93.472914 67.04509) (xy 93.472927 67.045097) + (xy 93.616908 67.104735) (xy 93.618603 67.105437) (xy 93.702102 67.122046) (xy 93.773253 67.136199) + (xy 93.773256 67.1362) (xy 93.773258 67.1362) (xy 93.930944 67.1362) (xy 93.930945 67.136199) (xy 94.085597 67.105437) + (xy 94.231279 67.045094) (xy 94.362389 66.957489) (xy 94.473889 66.845989) (xy 94.561494 66.714879) + (xy 94.561782 66.714185) (xy 94.610636 66.596238) (xy 94.621837 66.569197) (xy 94.6526 66.414542) + (xy 94.6526 66.256858) (xy 94.6526 66.256854) (xy 94.652461 66.256153) (xy 96.1671 66.256153) (xy 96.1671 66.413846) + (xy 96.197861 66.568489) (xy 96.197864 66.568501) (xy 96.258202 66.714172) (xy 96.258209 66.714185) + (xy 96.34581 66.845288) (xy 96.345813 66.845292) (xy 96.457307 66.956786) (xy 96.457311 66.956789) + (xy 96.588414 67.04439) (xy 96.588427 67.044397) (xy 96.734098 67.104735) (xy 96.734103 67.104737) + (xy 96.888753 67.135499) (xy 96.888756 67.1355) (xy 96.888758 67.1355) (xy 97.046444 67.1355) (xy 97.046445 67.135499) + (xy 97.201097 67.104737) (xy 97.346779 67.044394) (xy 97.477889 66.956789) (xy 97.589389 66.845289) + (xy 97.676994 66.714179) (xy 97.737337 66.568497) (xy 97.7681 66.413842) (xy 97.7681 66.256158) + (xy 97.7681 66.256155) (xy 97.768099 66.256153) (xy 97.746707 66.14861) (xy 97.737337 66.101503) + (xy 97.737335 66.101498) (xy 97.676997 65.955827) (xy 97.67699 65.955814) (xy 97.589389 65.824711) + (xy 97.589386 65.824707) (xy 97.477892 65.713213) (xy 97.477888 65.71321) (xy 97.346785 65.625609) + (xy 97.346772 65.625602) (xy 97.201101 65.565264) (xy 97.201089 65.565261) (xy 97.046445 65.5345) + (xy 97.046442 65.5345) (xy 96.888758 65.5345) (xy 96.888755 65.5345) (xy 96.73411 65.565261) (xy 96.734098 65.565264) + (xy 96.588427 65.625602) (xy 96.588414 65.625609) (xy 96.457311 65.71321) (xy 96.457307 65.713213) + (xy 96.345813 65.824707) (xy 96.34581 65.824711) (xy 96.258209 65.955814) (xy 96.258202 65.955827) + (xy 96.197864 66.101498) (xy 96.197861 66.10151) (xy 96.1671 66.256153) (xy 94.652461 66.256153) + (xy 94.627505 66.130699) (xy 94.621837 66.102203) (xy 94.621545 66.101498) (xy 94.561497 65.956527) + (xy 94.56149 65.956514) (xy 94.473889 65.825411) (xy 94.473886 65.825407) (xy 94.362392 65.713913) + (xy 94.362388 65.71391) (xy 94.231285 65.626309) (xy 94.231272 65.626302) (xy 94.085601 65.565964) + (xy 94.085591 65.565961) (xy 93.944529 65.537902) (xy 93.882618 65.505517) (xy 93.848044 65.444801) + (xy 93.851784 65.375032) (xy 93.892651 65.31836) (xy 93.899819 65.31319) (xy 93.958189 65.274189) + (xy 94.069689 65.162689) (xy 94.157294 65.031579) (xy 94.217637 64.885897) (xy 94.2484 64.731242) + (xy 94.2484 64.573558) (xy 94.2484 64.573555) (xy 94.248399 64.573553) (xy 94.237749 64.520014) + (xy 94.217637 64.418903) (xy 94.214114 64.410397) (xy 94.157297 64.273227) (xy 94.15729 64.273214) + (xy 94.069689 64.142111) (xy 94.069686 64.142107) (xy 93.958192 64.030613) (xy 93.958188 64.03061) + (xy 93.827085 63.943009) (xy 93.827072 63.943002) (xy 93.681401 63.882664) (xy 93.681389 63.882661) + (xy 93.526745 63.8519) (xy 93.526742 63.8519) (xy 93.369058 63.8519) (xy 93.369055 63.8519) (xy 93.21441 63.882661) + (xy 93.214398 63.882664) (xy 93.068727 63.943002) (xy 93.068714 63.943009) (xy 92.937611 64.03061) + (xy 92.937607 64.030613) (xy 92.826113 64.142107) (xy 92.82611 64.142111) (xy 92.738509 64.273214) + (xy 92.738502 64.273227) (xy 92.678164 64.418898) (xy 92.678161 64.41891) (xy 92.6474 64.573553) + (xy 90.585518 64.573553) (xy 90.597194 64.556079) (xy 90.607837 64.530385) (xy 90.612133 64.520014) + (xy 90.654011 64.41891) (xy 90.657537 64.410397) (xy 90.6883 64.255742) (xy 90.6883 64.148041) (xy 90.707985 64.081002) + (xy 90.760789 64.035247) (xy 90.829947 64.025303) (xy 90.893503 64.054328) (xy 90.899981 64.06036) + (xy 90.991607 64.151986) (xy 90.991611 64.151989) (xy 91.122714 64.23959) (xy 91.122727 64.239597) + (xy 91.268398 64.299935) (xy 91.268403 64.299937) (xy 91.423053 64.330699) (xy 91.423056 64.3307) + (xy 91.423058 64.3307) (xy 91.580744 64.3307) (xy 91.580745 64.330699) (xy 91.735397 64.299937) + (xy 91.881079 64.239594) (xy 92.012189 64.151989) (xy 92.123689 64.040489) (xy 92.211294 63.909379) + (xy 92.271637 63.763697) (xy 92.3024 63.609042) (xy 92.3024 63.451358) (xy 92.3024 63.451355) (xy 92.302399 63.451353) + (xy 92.282549 63.351557) (xy 92.278948 63.333453) (xy 96.5583 63.333453) (xy 96.5583 63.491146) + (xy 96.589061 63.645789) (xy 96.589064 63.645801) (xy 96.649402 63.791472) (xy 96.649409 63.791485) + (xy 96.73701 63.922588) (xy 96.737013 63.922592) (xy 96.848507 64.034086) (xy 96.848511 64.034089) + (xy 96.979614 64.12169) (xy 96.979627 64.121697) (xy 97.077163 64.162097) (xy 97.125303 64.182037) + (xy 97.279953 64.212799) (xy 97.279956 64.2128) (xy 97.279958 64.2128) (xy 97.437644 64.2128) (xy 97.437645 64.212799) + (xy 97.592297 64.182037) (xy 97.737979 64.121694) (xy 97.869089 64.034089) (xy 97.980589 63.922589) + (xy 98.068194 63.791479) (xy 98.128537 63.645797) (xy 98.1593 63.491142) (xy 98.1593 63.333458) + (xy 98.1593 63.333455) (xy 98.159299 63.333453) (xy 98.128537 63.178803) (xy 98.117032 63.151027) + (xy 98.112431 63.139918) (xy 98.095297 63.098553) (xy 98.6871 63.098553) (xy 98.6871 63.256246) + (xy 98.717861 63.410889) (xy 98.717864 63.410901) (xy 98.778202 63.556572) (xy 98.778209 63.556585) + (xy 98.86581 63.687688) (xy 98.865813 63.687692) (xy 98.977307 63.799186) (xy 98.977311 63.799189) + (xy 99.108414 63.88679) (xy 99.108427 63.886797) (xy 99.225984 63.93549) (xy 99.254103 63.947137) + (xy 99.408753 63.977899) (xy 99.408756 63.9779) (xy 99.408758 63.9779) (xy 99.566444 63.9779) (xy 99.566445 63.977899) + (xy 99.721097 63.947137) (xy 99.866779 63.886794) (xy 99.997889 63.799189) (xy 100.109389 63.687689) + (xy 100.196994 63.556579) (xy 100.197603 63.55511) (xy 100.233889 63.467506) (xy 100.257337 63.410897) + (xy 100.2881 63.256242) (xy 100.2881 63.146153) (xy 101.05075 63.146153) (xy 101.05075 63.303846) + (xy 101.081511 63.458489) (xy 101.081514 63.458501) (xy 101.141852 63.604172) (xy 101.141859 63.604185) + (xy 101.22946 63.735288) (xy 101.229463 63.735292) (xy 101.340957 63.846786) (xy 101.340961 63.846789) + (xy 101.472064 63.93439) (xy 101.472077 63.934397) (xy 101.600093 63.987422) (xy 101.617753 63.994737) + (xy 101.771418 64.025303) (xy 101.772403 64.025499) (xy 101.772406 64.0255) (xy 101.772408 64.0255) + (xy 101.930094 64.0255) (xy 101.930095 64.025499) (xy 102.084747 63.994737) (xy 102.15988 63.963615) + (xy 102.229348 63.956147) (xy 102.291828 63.987422) (xy 102.295013 63.990496) (xy 103.337431 65.032914) + (xy 103.370916 65.094237) (xy 103.37375 65.120595) (xy 103.37375 68.519924) (xy 103.354065 68.586963) + (xy 103.301261 68.632718) (xy 103.297203 68.634485) (xy 103.222074 68.665604) (xy 103.222064 68.665609) + (xy 103.090961 68.75321) (xy 103.090957 68.753213) (xy 102.979463 68.864707) (xy 102.97946 68.864711) + (xy 102.891859 68.995814) (xy 102.891852 68.995827) (xy 102.831514 69.141498) (xy 102.831511 69.14151) + (xy 102.80075 69.296153) (xy 102.80075 69.453846) (xy 102.831511 69.608489) (xy 102.831514 69.608501) + (xy 102.891852 69.754172) (xy 102.891859 69.754185) (xy 102.977036 69.88166) (xy 102.997914 69.948337) + (xy 102.97943 70.015718) (xy 102.942825 70.053653) (xy 102.889011 70.08961) (xy 102.889007 70.089613) + (xy 102.777513 70.201107) (xy 102.77751 70.201111) (xy 102.689909 70.332214) (xy 102.689902 70.332227) + (xy 102.629564 70.477898) (xy 102.629561 70.47791) (xy 102.5988 70.632553) (xy 102.5988 70.790246) + (xy 102.629561 70.944889) (xy 102.629564 70.944901) (xy 102.689902 71.090572) (xy 102.689909 71.090585) + (xy 102.77751 71.221688) (xy 102.777513 71.221692) (xy 102.889007 71.333186) (xy 102.889011 71.333189) + (xy 103.020114 71.42079) (xy 103.020127 71.420797) (xy 103.165798 71.481135) (xy 103.165803 71.481137) + (xy 103.306382 71.5091) (xy 103.320453 71.511899) (xy 103.320456 71.5119) (xy 103.320458 71.5119) + (xy 103.478144 71.5119) (xy 103.478145 71.511899) (xy 103.632797 71.481137) (xy 103.778479 71.420794) + (xy 103.909589 71.333189) (xy 104.021089 71.221689) (xy 104.108694 71.090579) (xy 104.122059 71.058314) + (xy 104.154454 70.980104) (xy 104.169037 70.944897) (xy 104.1998 70.790242) (xy 104.1998 70.632558) + (xy 104.1998 70.632555) (xy 104.199799 70.632553) (xy 104.192684 70.596786) (xy 104.169037 70.477903) + (xy 104.142662 70.414227) (xy 104.108697 70.332227) (xy 104.10869 70.332214) (xy 104.023513 70.204739) + (xy 104.002635 70.138062) (xy 104.021119 70.070682) (xy 104.057723 70.032747) (xy 104.111539 69.996789) + (xy 104.223039 69.885289) (xy 104.310644 69.754179) (xy 104.311253 69.75271) (xy 104.370985 69.608501) + (xy 104.370987 69.608497) (xy 104.40175 69.453842) (xy 104.40175 69.296158) (xy 104.40175 69.296155) + (xy 104.401749 69.296153) (xy 104.383479 69.204306) (xy 104.370987 69.141503) (xy 104.35549 69.104089) + (xy 104.310647 68.995827) (xy 104.31064 68.995814) (xy 104.223039 68.864711) (xy 104.223036 68.864707) + (xy 104.111542 68.753213) (xy 104.111538 68.75321) (xy 103.980435 68.665609) (xy 103.980425 68.665604) + (xy 103.905297 68.634485) (xy 103.850894 68.590644) (xy 103.828829 68.52435) (xy 103.82875 68.519924) + (xy 103.82875 64.929748) (xy 103.828748 64.929743) (xy 103.827452 64.926615) (xy 103.810753 64.886297) + (xy 103.794118 64.846134) (xy 103.794116 64.846132) (xy 103.221198 64.273214) (xy 102.616745 63.668762) + (xy 102.583261 63.60744) (xy 102.588245 63.537748) (xy 102.589855 63.533655) (xy 102.620987 63.458497) + (xy 102.65175 63.303842) (xy 102.65175 63.146158) (xy 102.65175 63.146155) (xy 102.651749 63.146153) + (xy 102.646122 63.117865) (xy 102.620987 62.991503) (xy 102.605389 62.953846) (xy 102.560647 62.845827) + (xy 102.56064 62.845814) (xy 102.473039 62.714711) (xy 102.473036 62.714707) (xy 102.361542 62.603213) + (xy 102.361538 62.60321) (xy 102.230435 62.515609) (xy 102.230422 62.515602) (xy 102.084751 62.455264) + (xy 102.084739 62.455261) (xy 101.930095 62.4245) (xy 101.930092 62.4245) (xy 101.772408 62.4245) + (xy 101.772405 62.4245) (xy 101.61776 62.455261) (xy 101.617748 62.455264) (xy 101.472077 62.515602) + (xy 101.472064 62.515609) (xy 101.340961 62.60321) (xy 101.340957 62.603213) (xy 101.229463 62.714707) + (xy 101.22946 62.714711) (xy 101.141859 62.845814) (xy 101.141852 62.845827) (xy 101.081514 62.991498) + (xy 101.081511 62.99151) (xy 101.05075 63.146153) (xy 100.2881 63.146153) (xy 100.2881 63.098558) + (xy 100.2881 63.098555) (xy 100.288099 63.098553) (xy 100.26926 63.003844) (xy 100.257337 62.943903) + (xy 100.242636 62.908411) (xy 100.196997 62.798227) (xy 100.19699 62.798214) (xy 100.109389 62.667111) + (xy 100.109386 62.667107) (xy 99.997892 62.555613) (xy 99.997888 62.55561) (xy 99.866785 62.468009) + (xy 99.866772 62.468002) (xy 99.721101 62.407664) (xy 99.721089 62.407661) (xy 99.566445 62.3769) + (xy 99.566442 62.3769) (xy 99.408758 62.3769) (xy 99.408755 62.3769) (xy 99.25411 62.407661) (xy 99.254098 62.407664) + (xy 99.108427 62.468002) (xy 99.108414 62.468009) (xy 98.977311 62.55561) (xy 98.977307 62.555613) + (xy 98.865813 62.667107) (xy 98.86581 62.667111) (xy 98.778209 62.798214) (xy 98.778202 62.798227) + (xy 98.717864 62.943898) (xy 98.717861 62.94391) (xy 98.6871 63.098553) (xy 98.095297 63.098553) + (xy 98.068197 63.033127) (xy 98.06819 63.033114) (xy 97.980589 62.902011) (xy 97.980586 62.902007) + (xy 97.869092 62.790513) (xy 97.869088 62.79051) (xy 97.737985 62.702909) (xy 97.737972 62.702902) + (xy 97.592301 62.642564) (xy 97.592289 62.642561) (xy 97.437645 62.6118) (xy 97.437642 62.6118) + (xy 97.279958 62.6118) (xy 97.279955 62.6118) (xy 97.12531 62.642561) (xy 97.125298 62.642564) (xy 96.979627 62.702902) + (xy 96.979614 62.702909) (xy 96.848511 62.79051) (xy 96.848507 62.790513) (xy 96.737013 62.902007) + (xy 96.73701 62.902011) (xy 96.649409 63.033114) (xy 96.649402 63.033127) (xy 96.589064 63.178798) + (xy 96.589061 63.17881) (xy 96.5583 63.333453) (xy 92.278948 63.333453) (xy 92.271638 63.296708) + (xy 92.271637 63.296707) (xy 92.271637 63.296703) (xy 92.254879 63.256246) (xy 92.211297 63.151027) + (xy 92.21129 63.151014) (xy 92.123689 63.019911) (xy 92.123686 63.019907) (xy 92.012192 62.908413) + (xy 92.012188 62.90841) (xy 91.881085 62.820809) (xy 91.881072 62.820802) (xy 91.735401 62.760464) + (xy 91.735389 62.760461) (xy 91.580745 62.7297) (xy 91.580742 62.7297) (xy 91.423058 62.7297) (xy 91.423055 62.7297) + (xy 91.26841 62.760461) (xy 91.268398 62.760464) (xy 91.122727 62.820802) (xy 91.122714 62.820809) + (xy 90.991611 62.90841) (xy 90.991607 62.908413) (xy 90.880113 63.019907) (xy 90.88011 63.019911) + (xy 90.792509 63.151014) (xy 90.792502 63.151027) (xy 90.732164 63.296698) (xy 90.732161 63.29671) + (xy 90.7014 63.451353) (xy 90.7014 63.559059) (xy 90.681715 63.626098) (xy 90.628911 63.671853) + (xy 90.559753 63.681797) (xy 90.496197 63.652772) (xy 90.489719 63.64674) (xy 90.398092 63.555113) + (xy 90.398088 63.55511) (xy 90.266985 63.467509) (xy 90.266972 63.467502) (xy 90.121301 63.407164) + (xy 90.121289 63.407161) (xy 89.966645 63.3764) (xy 89.966642 63.3764) (xy 89.808958 63.3764) (xy 89.808955 63.3764) + (xy 89.65431 63.407161) (xy 89.654298 63.407164) (xy 89.508627 63.467502) (xy 89.508616 63.467508) + (xy 89.476064 63.489259) (xy 89.409386 63.510136) (xy 89.342006 63.491651) (xy 89.295316 63.439671) + (xy 89.284141 63.370701) (xy 89.285553 63.361983) (xy 89.2969 63.304942) (xy 89.2969 63.147258) + (xy 89.2969 63.147255) (xy 89.296899 63.147253) (xy 89.282231 63.073514) (xy 89.266137 62.992603) + (xy 89.265679 62.991498) (xy 89.205797 62.846927) (xy 89.20579 62.846914) (xy 89.118189 62.715811) + (xy 89.118186 62.715807) (xy 89.006692 62.604313) (xy 89.006688 62.60431) (xy 88.875585 62.516709) + (xy 88.875572 62.516702) (xy 88.729901 62.456364) (xy 88.729889 62.456361) (xy 88.575245 62.4256) + (xy 88.575242 62.4256) (xy 88.417558 62.4256) (xy 88.417555 62.4256) (xy 88.26291 62.456361) (xy 88.262898 62.456364) + (xy 88.117227 62.516702) (xy 88.117214 62.516709) (xy 87.986111 62.60431) (xy 87.986107 62.604313) + (xy 87.874613 62.715807) (xy 87.87461 62.715811) (xy 87.787009 62.846914) (xy 87.787002 62.846927) + (xy 87.726664 62.992598) (xy 87.726661 62.99261) (xy 87.6959 63.147253) (xy 85.866135 63.147253) + (xy 85.850083 63.108501) (xy 85.835597 63.073527) (xy 85.83559 63.073514) (xy 85.747989 62.942411) + (xy 85.747986 62.942407) (xy 85.636492 62.830913) (xy 85.636488 62.83091) (xy 85.505385 62.743309) + (xy 85.505372 62.743302) (xy 85.359701 62.682964) (xy 85.359689 62.682961) (xy 85.205045 62.6522) + (xy 85.205042 62.6522) (xy 85.047358 62.6522) (xy 85.047355 62.6522) (xy 84.89271 62.682961) (xy 84.892698 62.682964) + (xy 84.747027 62.743302) (xy 84.747014 62.743309) (xy 84.615911 62.83091) (xy 84.615907 62.830913) + (xy 84.504413 62.942407) (xy 84.50441 62.942411) (xy 84.416809 63.073514) (xy 84.416802 63.073527) + (xy 84.356464 63.219198) (xy 84.356461 63.21921) (xy 84.3257 63.373853) (xy 65.923439 63.373853) + (xy 65.969994 63.304179) (xy 66.030337 63.158497) (xy 66.0611 63.003842) (xy 66.0611 62.846158) + (xy 66.0611 62.846155) (xy 66.061099 62.846153) (xy 66.044054 62.760463) (xy 66.030337 62.691503) + (xy 66.010065 62.642561) (xy 65.969997 62.545827) (xy 65.96999 62.545814) (xy 65.882389 62.414711) + (xy 65.882386 62.414707) (xy 65.770892 62.303213) (xy 65.770888 62.30321) (xy 65.639785 62.215609) + (xy 65.639772 62.215602) (xy 65.494101 62.155264) (xy 65.494089 62.155261) (xy 65.339445 62.1245) + (xy 65.339442 62.1245) (xy 65.181758 62.1245) (xy 65.181755 62.1245) (xy 65.02711 62.155261) (xy 65.027103 62.155263) + (xy 64.951968 62.186384) (xy 64.882499 62.193851) (xy 64.82002 62.162576) (xy 64.816836 62.159503) + (xy 64.474419 61.817086) (xy 64.440934 61.755763) (xy 64.4381 61.729405) (xy 64.4381 57.808899) + (xy 64.457785 57.74186) (xy 64.510589 57.696105) (xy 64.562095 57.684899) (xy 64.8591 57.684899) + (xy 64.926139 57.704584) (xy 64.971894 57.757388) (xy 64.9831 57.808899) (xy 64.9831 59.420447) + (xy 64.9831 59.510953) (xy 65.016972 59.592727) (xy 65.017736 59.59457) (xy 66.490003 61.066836) + (xy 66.523488 61.128159) (xy 66.518504 61.197851) (xy 66.516884 61.201968) (xy 66.485763 61.277103) + (xy 66.485761 61.27711) (xy 66.455 61.431753) (xy 66.455 61.589446) (xy 66.485761 61.744089) (xy 66.485764 61.744101) + (xy 66.546102 61.889772) (xy 66.546109 61.889785) (xy 66.63371 62.020888) (xy 66.633713 62.020892) + (xy 66.745207 62.132386) (xy 66.745211 62.132389) (xy 66.876314 62.21999) (xy 66.876327 62.219997) + (xy 66.956519 62.253213) (xy 67.022003 62.280337) (xy 67.136993 62.30321) (xy 67.176653 62.311099) + (xy 67.176656 62.3111) (xy 67.176658 62.3111) (xy 67.334344 62.3111) (xy 67.334345 62.311099) (xy 67.488997 62.280337) + (xy 67.634679 62.219994) (xy 67.765789 62.132389) (xy 67.877289 62.020889) (xy 67.964894 61.889779) + (xy 68.025237 61.744097) (xy 68.056 61.589442) (xy 68.056 61.431758) (xy 68.056 61.431755) (xy 68.055999 61.431753) + (xy 68.026408 61.282992) (xy 68.025237 61.277103) (xy 68.014605 61.251435) (xy 67.964897 61.131427) + (xy 67.96489 61.131414) (xy 67.877289 61.000311) (xy 67.877286 61.000307) (xy 67.765792 60.888813) + (xy 67.765788 60.88881) (xy 67.634685 60.801209) (xy 67.634672 60.801202) (xy 67.489001 60.740864) + (xy 67.488989 60.740861) (xy 67.334345 60.7101) (xy 67.334342 60.7101) (xy 67.176658 60.7101) (xy 67.176655 60.7101) + (xy 67.02201 60.740861) (xy 67.022003 60.740863) (xy 66.946868 60.771984) (xy 66.877399 60.779451) + (xy 66.81492 60.748176) (xy 66.811736 60.745103) (xy 66.033486 59.966853) (xy 87.83 59.966853) (xy 87.83 60.124546) + (xy 87.860761 60.279189) (xy 87.860764 60.279201) (xy 87.921102 60.424872) (xy 87.921109 60.424885) + (xy 88.00871 60.555988) (xy 88.008713 60.555992) (xy 88.120207 60.667486) (xy 88.120211 60.667489) + (xy 88.251314 60.75509) (xy 88.251327 60.755097) (xy 88.310124 60.779451) (xy 88.397003 60.815437) + (xy 88.551653 60.846199) (xy 88.551656 60.8462) (xy 88.715434 60.8462) (xy 88.715434 60.848189) + (xy 88.775091 60.859498) (xy 88.821711 60.900996) (xy 88.88251 60.991988) (xy 88.882513 60.991992) + (xy 88.994007 61.103486) (xy 88.994011 61.103489) (xy 89.125114 61.19109) (xy 89.125127 61.191097) + (xy 89.270798 61.251435) (xy 89.270803 61.251437) (xy 89.399809 61.277098) (xy 89.425453 61.282199) + (xy 89.425456 61.2822) (xy 89.425458 61.2822) (xy 89.583144 61.2822) (xy 89.583145 61.282199) (xy 89.737797 61.251437) + (xy 89.883479 61.191094) (xy 90.014589 61.103489) (xy 90.126089 60.991989) (xy 90.213694 60.860879) + (xy 90.217562 60.851542) (xy 90.260377 60.748176) (xy 90.274037 60.715197) (xy 90.278283 60.693853) + (xy 97.3635 60.693853) (xy 97.3635 60.851546) (xy 97.394261 61.006189) (xy 97.394264 61.006201) + (xy 97.454602 61.151872) (xy 97.454609 61.151885) (xy 97.54221 61.282988) (xy 97.542213 61.282992) + (xy 97.653707 61.394486) (xy 97.653711 61.394489) (xy 97.784814 61.48209) (xy 97.784827 61.482097) + (xy 97.930498 61.542435) (xy 97.930503 61.542437) (xy 98.085153 61.573199) (xy 98.085156 61.5732) + (xy 98.085158 61.5732) (xy 98.242844 61.5732) (xy 98.242845 61.573199) (xy 98.397497 61.542437) + (xy 98.543179 61.482094) (xy 98.674289 61.394489) (xy 98.785789 61.282989) (xy 98.873394 61.151879) + (xy 98.933737 61.006197) (xy 98.9645 60.851542) (xy 98.9645 60.77663) (xy 98.984185 60.709591) (xy 99.036989 60.663836) + (xy 99.106147 60.653892) (xy 99.112692 60.655013) (xy 99.265455 60.6854) (xy 99.265458 60.6854) + (xy 99.423144 60.6854) (xy 99.423145 60.685399) (xy 99.577797 60.654637) (xy 99.723479 60.594294) + (xy 99.854589 60.506689) (xy 99.966089 60.395189) (xy 100.053694 60.264079) (xy 100.114037 60.118397) + (xy 100.1448 59.963742) (xy 100.1448 59.806058) (xy 100.1448 59.806055) (xy 100.144799 59.806053) + (xy 100.132535 59.7444) (xy 100.114037 59.651403) (xy 100.090496 59.59457) (xy 100.053697 59.505727) + (xy 100.05369 59.505714) (xy 99.975438 59.388602) (xy 99.966089 59.374611) (xy 99.966086 59.374607) + (xy 99.916056 59.324577) (xy 104.1728 59.324577) (xy 104.1728 59.521422) (xy 104.20359 59.715826) + (xy 104.264417 59.903029) (xy 104.339681 60.050742) (xy 104.353776 60.078405) (xy 104.469472 60.237646) + (xy 104.608654 60.376828) (xy 104.767895 60.492524) (xy 104.79569 60.506686) (xy 104.94327 60.581882) + (xy 104.943272 60.581882) (xy 104.943275 60.581884) (xy 105.043617 60.614487) (xy 105.130473 60.642709) + (xy 105.324878 60.6735) (xy 105.324883 60.6735) (xy 105.521722 60.6735) (xy 105.716126 60.642709) + (xy 105.903325 60.581884) (xy 106.078705 60.492524) (xy 106.237946 60.376828) (xy 106.377128 60.237646) + (xy 106.492824 60.078405) (xy 106.582184 59.903025) (xy 106.643009 59.715826) (xy 106.648807 59.679219) + (xy 106.6738 59.521422) (xy 106.6738 59.324577) (xy 107.9728 59.324577) (xy 107.9728 59.521422) + (xy 108.00359 59.715826) (xy 108.064417 59.903029) (xy 108.139681 60.050742) (xy 108.153776 60.078405) + (xy 108.269472 60.237646) (xy 108.408654 60.376828) (xy 108.567895 60.492524) (xy 108.59569 60.506686) + (xy 108.74327 60.581882) (xy 108.743272 60.581882) (xy 108.743275 60.581884) (xy 108.843617 60.614487) + (xy 108.930473 60.642709) (xy 109.124878 60.6735) (xy 109.124883 60.6735) (xy 109.321722 60.6735) + (xy 109.516126 60.642709) (xy 109.703325 60.581884) (xy 109.878705 60.492524) (xy 110.037946 60.376828) + (xy 110.177128 60.237646) (xy 110.292824 60.078405) (xy 110.382184 59.903025) (xy 110.443009 59.715826) + (xy 110.448807 59.679219) (xy 110.4738 59.521422) (xy 110.4738 59.324577) (xy 110.443009 59.130173) + (xy 110.382182 58.94297) (xy 110.330022 58.8406) (xy 110.292824 58.767595) (xy 110.177128 58.608354) + (xy 110.037946 58.469172) (xy 109.878705 58.353476) (xy 109.873759 58.350956) (xy 109.703329 58.264117) + (xy 109.516126 58.20329) (xy 109.321722 58.1725) (xy 109.321717 58.1725) (xy 109.124883 58.1725) + (xy 109.124878 58.1725) (xy 108.930473 58.20329) (xy 108.74327 58.264117) (xy 108.567894 58.353476) + (xy 108.49947 58.40319) (xy 108.408654 58.469172) (xy 108.408652 58.469174) (xy 108.408651 58.469174) + (xy 108.269474 58.608351) (xy 108.269474 58.608352) (xy 108.269472 58.608354) (xy 108.262791 58.61755) + (xy 108.153776 58.767594) (xy 108.064417 58.94297) (xy 108.00359 59.130173) (xy 107.9728 59.324577) + (xy 106.6738 59.324577) (xy 106.643009 59.130173) (xy 106.582182 58.94297) (xy 106.530022 58.8406) + (xy 106.492824 58.767595) (xy 106.377128 58.608354) (xy 106.237946 58.469172) (xy 106.078705 58.353476) + (xy 106.073759 58.350956) (xy 105.903329 58.264117) (xy 105.716126 58.20329) (xy 105.521722 58.1725) + (xy 105.521717 58.1725) (xy 105.324883 58.1725) (xy 105.324878 58.1725) (xy 105.130473 58.20329) + (xy 104.94327 58.264117) (xy 104.767894 58.353476) (xy 104.69947 58.40319) (xy 104.608654 58.469172) + (xy 104.608652 58.469174) (xy 104.608651 58.469174) (xy 104.469474 58.608351) (xy 104.469474 58.608352) + (xy 104.469472 58.608354) (xy 104.462791 58.61755) (xy 104.353776 58.767594) (xy 104.264417 58.94297) + (xy 104.20359 59.130173) (xy 104.1728 59.324577) (xy 99.916056 59.324577) (xy 99.854592 59.263113) + (xy 99.854588 59.26311) (xy 99.723485 59.175509) (xy 99.723472 59.175502) (xy 99.577801 59.115164) + (xy 99.577789 59.115161) (xy 99.423145 59.0844) (xy 99.423142 59.0844) (xy 99.265458 59.0844) (xy 99.265455 59.0844) + (xy 99.11081 59.115161) (xy 99.110798 59.115164) (xy 98.965127 59.175502) (xy 98.965114 59.175509) + (xy 98.834011 59.26311) (xy 98.834007 59.263113) (xy 98.722513 59.374607) (xy 98.72251 59.374611) + (xy 98.634909 59.505714) (xy 98.634902 59.505727) (xy 98.574564 59.651398) (xy 98.574561 59.65141) + (xy 98.5438 59.806053) (xy 98.5438 59.880969) (xy 98.524115 59.948008) (xy 98.471311 59.993763) + (xy 98.402153 60.003707) (xy 98.395609 60.002586) (xy 98.242846 59.9722) (xy 98.242842 59.9722) + (xy 98.085158 59.9722) (xy 98.085155 59.9722) (xy 97.93051 60.002961) (xy 97.930498 60.002964) (xy 97.784827 60.063302) + (xy 97.784814 60.063309) (xy 97.653711 60.15091) (xy 97.653707 60.150913) (xy 97.542213 60.262407) + (xy 97.54221 60.262411) (xy 97.454609 60.393514) (xy 97.454602 60.393527) (xy 97.394264 60.539198) + (xy 97.394261 60.53921) (xy 97.3635 60.693853) (xy 90.278283 60.693853) (xy 90.283527 60.667489) + (xy 90.284306 60.663574) (xy 90.284306 60.663573) (xy 90.304799 60.560546) (xy 90.3048 60.560544) + (xy 90.3048 60.402855) (xy 90.304799 60.402853) (xy 90.280202 60.279197) (xy 90.274037 60.248203) + (xy 90.256308 60.205401) (xy 90.213697 60.102527) (xy 90.21369 60.102514) (xy 90.126089 59.971411) + (xy 90.126086 59.971407) (xy 90.014592 59.859913) (xy 90.014588 59.85991) (xy 89.883485 59.772309) + (xy 89.883472 59.772302) (xy 89.737801 59.711964) (xy 89.737789 59.711961) (xy 89.583145 59.6812) + (xy 89.583142 59.6812) (xy 89.425458 59.6812) (xy 89.419367 59.6812) (xy 89.419367 59.679219) (xy 89.359667 59.66788) + (xy 89.313088 59.626403) (xy 89.252289 59.53541) (xy 89.140792 59.423913) (xy 89.140788 59.42391) + (xy 89.009685 59.336309) (xy 89.009672 59.336302) (xy 88.864001 59.275964) (xy 88.863989 59.275961) + (xy 88.709345 59.2452) (xy 88.709342 59.2452) (xy 88.551658 59.2452) (xy 88.551655 59.2452) (xy 88.39701 59.275961) + (xy 88.396998 59.275964) (xy 88.251327 59.336302) (xy 88.251314 59.336309) (xy 88.120211 59.42391) + (xy 88.120207 59.423913) (xy 88.008713 59.535407) (xy 88.00871 59.535411) (xy 87.921109 59.666514) + (xy 87.921102 59.666527) (xy 87.860764 59.812198) (xy 87.860761 59.81221) (xy 87.83 59.966853) (xy 66.033486 59.966853) + (xy 65.474419 59.407786) (xy 65.440934 59.346463) (xy 65.4381 59.320105) (xy 65.4381 58.550118) + (xy 65.457785 58.483079) (xy 65.510589 58.437324) (xy 65.579747 58.42738) (xy 65.609552 58.435557) + (xy 65.677098 58.463535) (xy 65.677103 58.463537) (xy 65.828133 58.493579) (xy 65.831753 58.494299) + (xy 65.831756 58.4943) (xy 65.831758 58.4943) (xy 65.989444 58.4943) (xy 65.989445 58.494299) (xy 66.144097 58.463537) + (xy 66.289779 58.403194) (xy 66.420889 58.315589) (xy 66.532389 58.204089) (xy 66.619994 58.072979) + (xy 66.680337 57.927297) (xy 66.694689 57.855147) (xy 66.7088 57.784208) (xy 66.741185 57.722297) + (xy 66.801901 57.687723) (xy 66.830417 57.6844) (xy 67.033428 57.6844) (xy 67.033444 57.684399) + (xy 67.092972 57.677998) (xy 67.092979 57.677996) (xy 67.227686 57.627754) (xy 67.227693 57.62775) + (xy 67.342787 57.54159) (xy 67.34279 57.541587) (xy 67.42895 57.426493) (xy 67.428954 57.426486) + (xy 67.479196 57.291779) (xy 67.479198 57.291772) (xy 67.485599 57.232244) (xy 67.4856 57.232227) + (xy 67.4856 56.159841) (xy 67.505285 56.092802) (xy 67.5306 56.064364) (xy 67.5306 55.261388) (xy 67.54054 55.278605) + (xy 67.596395 55.33446) (xy 67.664804 55.373956) (xy 67.741104 55.3944) (xy 67.820096 55.3944) (xy 67.896396 55.373956) + (xy 67.964805 55.33446) (xy 68.02066 55.278605) (xy 68.0306 55.261388) (xy 68.0306 56.064262) (xy 68.07229 56.055969) + (xy 68.072292 56.055969) (xy 68.254271 55.980592) (xy 68.254284 55.980585) (xy 68.418062 55.871151) + (xy 68.418066 55.871148) (xy 68.557348 55.731866) (xy 68.557351 55.731862) (xy 68.666785 55.568084) + (xy 68.666792 55.568071) (xy 68.742169 55.386093) (xy 68.742172 55.386081) (xy 68.780599 55.192895) + (xy 68.7806 55.192892) (xy 68.7806 54.89275) (xy 116.973936 54.89275) (xy 116.973936 57.716241) + (xy 116.973936 59.502241) (xy 116.973936 63.2606) (xy 116.973936 68.196941) (xy 116.973936 69.162441) + (xy 116.973936 72.735441) (xy 116.973936 76.442141) (xy 116.973936 78.752041) (xy 116.973936 80.838528) + (xy 116.973937 80.838537) (xy 116.985488 80.945978) (xy 116.98549 80.94599) (xy 116.996696 80.9975) + (xy 117.030819 81.100025) (xy 117.030822 81.100031) (xy 117.108607 81.221065) (xy 117.108615 81.221076) + (xy 117.154359 81.273868) (xy 117.154362 81.273871) (xy 117.154366 81.273875) (xy 117.2631 81.368095) + (xy 117.263103 81.368096) (xy 117.263104 81.368097) (xy 117.357361 81.411144) (xy 117.393977 81.427866) + (xy 117.461016 81.447551) (xy 117.46102 81.447552) (xy 117.603436 81.468028) (xy 308.0575 81.468028) + (xy 308.124539 81.487713) (xy 308.170294 81.540517) (xy 308.1815 81.592028) (xy 308.1815 81.733646) + (xy 308.212261 81.888289) (xy 308.212264 81.888301) (xy 308.272602 82.033972) (xy 308.272609 82.033985) + (xy 308.36021 82.165088) (xy 308.360213 82.165092) (xy 308.471707 82.276586) (xy 308.471711 82.276589) + (xy 308.602814 82.36419) (xy 308.602827 82.364197) (xy 308.748498 82.424535) (xy 308.748503 82.424537) + (xy 308.903153 82.455299) (xy 308.903156 82.4553) (xy 308.903158 82.4553) (xy 309.060844 82.4553) + (xy 309.060845 82.455299) (xy 309.215497 82.424537) (xy 309.361179 82.364194) (xy 309.492289 82.276589) + (xy 309.603789 82.165089) (xy 309.691394 82.033979) (xy 309.751737 81.888297) (xy 309.7825 81.733642) + (xy 309.7825 81.592028) (xy 309.802185 81.524989) (xy 309.854989 81.479234) (xy 309.9065 81.468028) + (xy 356.67099 81.468028) (xy 356.671 81.468028) (xy 356.778456 81.456475) (xy 356.829967 81.445269) + (xy 356.864197 81.433875) (xy 356.932497 81.411144) (xy 356.932501 81.411141) (xy 356.932504 81.411141) + (xy 357.053543 81.333353) (xy 357.106347 81.287598) (xy 357.200567 81.178864) (xy 357.260338 81.047987) + (xy 357.280023 80.980948) (xy 357.280024 80.980944) (xy 357.3005 80.838528) (xy 357.3005 79.743804) + (xy 357.28308 79.612245) (xy 357.266282 79.549925) (xy 357.215222 79.42743) (xy 357.215221 79.427429) + (xy 357.211943 79.419564) (xy 357.214328 79.418569) (xy 357.200501 79.363641) (xy 357.221303 79.299586) + (xy 357.288394 79.199179) (xy 357.348737 79.053497) (xy 357.3795 78.898842) (xy 357.3795 78.741158) + (xy 357.3795 78.741155) (xy 357.379499 78.741153) (xy 357.37039 78.69536) (xy 357.348737 78.586503) + (xy 357.332701 78.547789) (xy 357.288397 78.440827) (xy 357.288395 78.440823) (xy 357.288394 78.440821) + (xy 357.219223 78.3373) (xy 357.198346 78.270624) (xy 357.209531 78.2169) (xy 357.260338 78.105654) + (xy 357.280023 78.038615) (xy 357.280024 78.038611) (xy 357.3005 77.896195) (xy 357.3005 54.89275) + (xy 357.288947 54.785294) (xy 357.277741 54.733783) (xy 357.262013 54.686527) (xy 357.243616 54.631252) + (xy 357.243613 54.631246) (xy 357.165828 54.510212) (xy 357.165825 54.510207) (xy 357.16582 54.510201) + (xy 357.120076 54.457409) (xy 357.120072 54.457406) (xy 357.12007 54.457403) (xy 357.011336 54.363183) + (xy 357.011333 54.363181) (xy 357.011331 54.36318) (xy 356.880465 54.303414) (xy 356.88046 54.303412) + (xy 356.880459 54.303412) (xy 356.81342 54.283727) (xy 356.813422 54.283727) (xy 356.813417 54.283726) + (xy 356.751347 54.274802) (xy 356.671 54.26325) (xy 346.4309 54.26325) (xy 346.430891 54.26325) + (xy 346.43089 54.263251) (xy 346.323449 54.274802) (xy 346.323437 54.274804) (xy 346.271927 54.28601) + (xy 346.169402 54.320133) (xy 346.169395 54.320137) (xy 346.145175 54.335702) (xy 346.078135 54.355385) + (xy 346.026626 54.344179) (xy 345.937365 54.303414) (xy 345.93736 54.303412) (xy 345.937359 54.303412) + (xy 345.87032 54.283727) (xy 345.870322 54.283727) (xy 345.870317 54.283726) (xy 345.808247 54.274802) + (xy 345.7279 54.26325) (xy 117.603436 54.26325) (xy 117.603427 54.26325) (xy 117.603426 54.263251) + (xy 117.495985 54.274802) (xy 117.495973 54.274804) (xy 117.444463 54.28601) (xy 117.341938 54.320133) + (xy 117.341932 54.320136) (xy 117.220898 54.397921) (xy 117.220887 54.397929) (xy 117.168095 54.443673) + (xy 117.073869 54.552414) (xy 117.073866 54.552418) (xy 117.0141 54.683284) (xy 116.994412 54.750332) + (xy 116.989385 54.785299) (xy 116.973936 54.89275) (xy 68.7806 54.89275) (xy 68.7806 54.7944) (xy 68.0806 54.7944) + (xy 68.0806 54.2944) (xy 68.7806 54.2944) (xy 68.7806 53.895908) (xy 68.780599 53.895904) (xy 68.742172 53.702718) + (xy 68.742169 53.702706) (xy 68.666792 53.520728) (xy 68.666785 53.520715) (xy 68.557351 53.356937) + (xy 68.557348 53.356933) (xy 68.418066 53.217651) (xy 68.418062 53.217648) (xy 68.254284 53.108214) + (xy 68.254271 53.108207) (xy 68.072291 53.032829) (xy 68.072283 53.032827) (xy 68.0306 53.024535) + (xy 68.0306 53.827411) (xy 68.02066 53.810195) (xy 67.964805 53.75434) (xy 67.896396 53.714844) + (xy 67.820096 53.6944) (xy 67.741104 53.6944) (xy 67.664804 53.714844) (xy 67.596395 53.75434) (xy 67.54054 53.810195) + (xy 67.5306 53.827411) (xy 67.5306 53.024536) (xy 67.530599 53.024535) (xy 67.488916 53.032827) + (xy 67.488908 53.032829) (xy 67.306928 53.108207) (xy 67.306915 53.108214) (xy 67.143137 53.217648) + (xy 67.143133 53.217651) (xy 67.003851 53.356933) (xy 67.003848 53.356937) (xy 66.894414 53.520715) + (xy 66.894408 53.520727) (xy 66.879223 53.557386) (xy 66.835381 53.611788) (xy 66.769087 53.633852) + (xy 66.701388 53.616572) (xy 66.676982 53.597612) (xy 66.673266 53.593896) (xy 66.673261 53.593892) + (xy 66.553438 53.524713) (xy 66.553437 53.524712) (xy 66.553436 53.524712) (xy 66.419783 53.4889) + (xy 66.281417 53.4889) (xy 66.147764 53.524712) (xy 66.147761 53.524713) (xy 66.027938 53.593892) + (xy 66.027933 53.593896) (xy 65.930096 53.691733) (xy 65.930092 53.691738) (xy 65.860913 53.811561) + (xy 65.860912 53.811564) (xy 65.8251 53.945217) (xy 65.8251 54.083581) (xy 65.826161 54.091639) + (xy 65.823219 54.092026) (xy 65.823009 54.100738) (xy 65.827053 54.123277) (xy 65.822183 54.135001) + (xy 65.821877 54.147695) (xy 65.809035 54.166655) (xy 65.800252 54.187801) (xy 65.789815 54.195031) + (xy 65.782695 54.205545) (xy 65.761641 54.214552) (xy 65.74282 54.227593) (xy 65.724088 54.230618) + (xy 65.718458 54.233028) (xy 65.708081 54.233825) (xy 65.705905 54.2339) (xy 65.562728 54.233901) + (xy 65.503117 54.240309) (xy 65.501242 54.241008) (xy 65.4899 54.241402) (xy 65.487422 54.240767) + (xy 65.472342 54.240767) (xy 65.468083 54.240309) (xy 65.408473 54.2339) (xy 65.408464 54.2339) + (xy 65.01273 54.2339) (xy 65.012719 54.233901) (xy 64.973853 54.238079) (xy 64.947348 54.238079) + (xy 64.908474 54.2339) (xy 64.51273 54.2339) (xy 64.512719 54.233901) (xy 64.473853 54.238079) (xy 64.447348 54.238079) + (xy 64.408474 54.2339) (xy 64.01273 54.2339) (xy 64.012719 54.233901) (xy 63.973853 54.238079) (xy 63.955136 54.238668) + (xy 63.951213 54.238494) (xy 63.908473 54.2339) (xy 63.847082 54.2339) (xy 63.84434 54.233779) (xy 63.837595 54.231471) + (xy 63.802353 54.224461) (xy 63.755853 54.2052) (xy 62.755853 54.2052) (xy 62.665347 54.2052) (xy 62.665345 54.2052) + (xy 62.665343 54.205201) (xy 62.618845 54.224461) (xy 62.613886 54.225561) (xy 62.611539 54.227221) + (xy 62.591047 54.23063) (xy 62.57686 54.233779) (xy 62.574112 54.2339) (xy 62.512728 54.233901) + (xy 62.469985 54.238495) (xy 62.466069 54.238668) (xy 62.463678 54.238079) (xy 62.447348 54.238079) + (xy 62.408474 54.2339) (xy 62.01273 54.2339) (xy 62.012719 54.233901) (xy 61.973853 54.238079) (xy 61.947348 54.238079) + (xy 61.908474 54.2339) (xy 61.512729 54.2339) (xy 61.51272 54.233901) (xy 61.448848 54.240767) (xy 61.431292 54.241402) + (xy 61.419958 54.241008) (xy 61.418083 54.240309) (xy 61.358473 54.2339) (xy 61.215278 54.2339) + (xy 61.213118 54.233825) (xy 61.181911 54.223472) (xy 61.150383 54.214215) (xy 61.148922 54.212529) + (xy 61.146802 54.211826) (xy 61.126136 54.186233) (xy 61.104628 54.161411) (xy 61.10431 54.159202) + (xy 61.102908 54.157466) (xy 61.099362 54.124792) (xy 61.094684 54.092253) (xy 61.095434 54.088593) + (xy 61.095371 54.088004) (xy 61.09557 54.087605) (xy 61.0961 54.083581) (xy 61.0961 53.945219) (xy 61.0961 53.945217) + (xy 61.060288 53.811564) (xy 60.991105 53.691735) (xy 60.893265 53.593895) (xy 60.893264 53.593894) + (xy 60.893261 53.593892) (xy 60.773438 53.524713) (xy 60.773437 53.524712) (xy 60.773436 53.524712) + (xy 60.639783 53.4889) (xy 60.501417 53.4889) (xy 60.367764 53.524712) (xy 60.367761 53.524713) + (xy 60.247938 53.593892) (xy 60.244213 53.597617) (xy 60.182888 53.631099) (xy 60.113196 53.62611) + (xy 60.057265 53.584236) (xy 60.041975 53.557384) (xy 60.02679 53.520724) (xy 60.026785 53.520715) + (xy 59.917351 53.356937) (xy 59.917348 53.356933) (xy 59.778066 53.217651) (xy 59.778062 53.217648) + (xy 59.614284 53.108214) (xy 59.614271 53.108207) (xy 59.432291 53.032829) (xy 59.432283 53.032827) + (xy 59.3906 53.024535) (xy 59.3906 53.827411) (xy 59.38066 53.810195) (xy 59.324805 53.75434) (xy 59.256396 53.714844) + (xy 59.180096 53.6944) (xy 59.101104 53.6944) (xy 59.024804 53.714844) (xy 58.956395 53.75434) (xy 58.90054 53.810195) + (xy 58.8906 53.827411) (xy 58.8906 53.024536) (xy 58.890599 53.024535) (xy 58.848916 53.032827) + (xy 58.848908 53.032829) (xy 58.666928 53.108207) (xy 58.666915 53.108214) (xy 58.503137 53.217648) + (xy 58.503133 53.217651) (xy 58.363851 53.356933) (xy 58.363848 53.356937) (xy 58.254414 53.520715) + (xy 58.254407 53.520728) (xy 58.17903 53.702706) (xy 58.179027 53.702718) (xy 58.1406 53.895904) + (xy 58.1406 54.2944) (xy 58.8406 54.2944) (xy 58.8406 54.7944) (xy 58.1406 54.7944) (xy 58.1406 55.192895) + (xy 58.179027 55.386081) (xy 58.17903 55.386093) (xy 58.254407 55.568071) (xy 58.254414 55.568084) + (xy 58.363848 55.731862) (xy 58.363851 55.731866) (xy 58.503133 55.871148) (xy 58.503137 55.871151) + (xy 58.666915 55.980585) (xy 58.666928 55.980592) (xy 58.848908 56.055969) (xy 58.8906 56.064262) + (xy 58.8906 55.261388) (xy 58.90054 55.278605) (xy 58.956395 55.33446) (xy 59.024804 55.373956) + (xy 59.101104 55.3944) (xy 59.180096 55.3944) (xy 59.256396 55.373956) (xy 59.324805 55.33446) (xy 59.38066 55.278605) + (xy 59.3906 55.261388) (xy 59.3906 56.064479) (xy 59.429599 56.121734) (xy 59.4356 56.159841) (xy 59.4356 57.232244) + (xy 59.442001 57.291772) (xy 59.442003 57.291779) (xy 59.492245 57.426486) (xy 59.492249 57.426493) + (xy 59.578409 57.541587) (xy 59.578412 57.54159) (xy 59.693506 57.62775) (xy 59.693513 57.627754) + (xy 59.82822 57.677996) (xy 59.828227 57.677998) (xy 59.887755 57.684399) (xy 59.887772 57.6844) + (xy 59.9856 57.6844) (xy 59.9856 57.360078) (xy 60.005285 57.293039) (xy 60.058089 57.247284) (xy 60.127247 57.23734) + (xy 60.190803 57.266365) (xy 60.225782 57.316745) (xy 60.266802 57.426728) (xy 60.266806 57.426735) + (xy 60.304466 57.477041) (xy 60.353054 57.541946) (xy 60.435912 57.603973) (xy 60.477782 57.659906) + (xy 60.481452 57.680252) (xy 60.4856 57.6844) (xy 60.583418 57.6844) (xy 60.583435 57.684399) (xy 60.607496 57.681812) + (xy 60.632922 57.6817) (xy 60.633428 57.681749) (xy 60.662727 57.6849) (xy 60.665368 57.684899) + (xy 60.67127 57.685482) (xy 60.701192 57.697568) (xy 60.731625 57.708304) (xy 60.733388 57.710574) + (xy 60.736054 57.711651) (xy 60.754684 57.737986) (xy 60.774489 57.76348) (xy 60.775137 57.766899) + (xy 60.776405 57.768691) (xy 60.776689 57.775083) (xy 60.7831 57.808883) (xy 60.7831 58.215753) + (xy 60.817736 58.29937) (xy 61.004903 58.486536) (xy 61.038388 58.547859) (xy 61.033404 58.61755) + (xy 61.031784 58.621668) (xy 61.000663 58.696803) (xy 61.000661 58.69681) (xy 60.9699 58.851453) + (xy 60.9699 59.009146) (xy 61.000661 59.163789) (xy 61.000664 59.163801) (xy 61.061002 59.309472) + (xy 61.061009 59.309485) (xy 61.14861 59.440588) (xy 61.148613 59.440592) (xy 61.24074 59.532719) + (xy 61.274225 59.594042) (xy 61.269241 59.663734) (xy 61.227369 59.719667) (xy 61.161905 59.744084) + (xy 61.153059 59.7444) (xy 59.470875 59.7444) (xy 59.403836 59.724715) (xy 59.358081 59.671911) + (xy 59.356334 59.6679) (xy 59.325194 59.592721) (xy 59.325192 59.592718) (xy 59.32519 59.592714) + (xy 59.237589 59.461611) (xy 59.237586 59.461607) (xy 59.126092 59.350113) (xy 59.126088 59.35011) + (xy 58.994985 59.262509) (xy 58.994972 59.262502) (xy 58.849301 59.202164) (xy 58.849289 59.202161) + (xy 58.694645 59.1714) (xy 58.694642 59.1714) (xy 58.536958 59.1714) (xy 58.536955 59.1714) (xy 58.38231 59.202161) + (xy 58.382298 59.202164) (xy 58.236627 59.262502) (xy 58.236614 59.262509) (xy 58.105511 59.35011) + (xy 58.105507 59.350113) (xy 57.994013 59.461607) (xy 57.99401 59.461611) (xy 57.906409 59.592714) + (xy 57.906402 59.592727) (xy 57.846064 59.738398) (xy 57.846061 59.73841) (xy 57.8153 59.893053) + (xy 45.35175 59.893053) (xy 45.35175 49.965904) (xy 58.1406 49.965904) (xy 58.1406 50.1144) (xy 58.8406 50.1144) + (xy 58.8406 50.6144) (xy 58.1406 50.6144) (xy 58.1406 50.762895) (xy 58.179027 50.956081) (xy 58.17903 50.956093) + (xy 58.254407 51.138071) (xy 58.254414 51.138084) (xy 58.363848 51.301862) (xy 58.363851 51.301866) + (xy 58.503133 51.441148) (xy 58.503137 51.441151) (xy 58.666915 51.550585) (xy 58.666928 51.550592) + (xy 58.848908 51.625969) (xy 58.8906 51.634262) (xy 58.8906 50.831388) (xy 58.90054 50.848605) (xy 58.956395 50.90446) + (xy 59.024804 50.943956) (xy 59.101104 50.9644) (xy 59.180096 50.9644) (xy 59.256396 50.943956) + (xy 59.324805 50.90446) (xy 59.38066 50.848605) (xy 59.3906 50.831388) (xy 59.3906 51.634262) (xy 59.43229 51.625969) + (xy 59.432292 51.625969) (xy 59.614271 51.550592) (xy 59.614284 51.550585) (xy 59.778062 51.441151) + (xy 59.778066 51.441148) (xy 59.917348 51.301866) (xy 59.917351 51.301862) (xy 60.026785 51.138084) + (xy 60.026792 51.138071) (xy 60.102169 50.956093) (xy 60.102172 50.956081) (xy 60.140599 50.762895) + (xy 60.1406 50.762892) (xy 60.1406 50.6144) (xy 59.4406 50.6144) (xy 59.4406 50.1144) (xy 60.1406 50.1144) + (xy 60.1406 49.965908) (xy 60.140599 49.965904) (xy 66.7806 49.965904) (xy 66.7806 50.1144) (xy 67.4806 50.1144) + (xy 67.4806 50.6144) (xy 66.7806 50.6144) (xy 66.7806 50.762895) (xy 66.819027 50.956081) (xy 66.81903 50.956093) + (xy 66.894407 51.138071) (xy 66.894414 51.138084) (xy 67.003848 51.301862) (xy 67.003851 51.301866) + (xy 67.143133 51.441148) (xy 67.143137 51.441151) (xy 67.306915 51.550585) (xy 67.306928 51.550592) + (xy 67.488908 51.625969) (xy 67.5306 51.634262) (xy 67.5306 50.831388) (xy 67.54054 50.848605) (xy 67.596395 50.90446) + (xy 67.664804 50.943956) (xy 67.741104 50.9644) (xy 67.820096 50.9644) (xy 67.896396 50.943956) + (xy 67.964805 50.90446) (xy 68.02066 50.848605) (xy 68.0306 50.831388) (xy 68.0306 51.634262) (xy 68.07229 51.625969) + (xy 68.072292 51.625969) (xy 68.254271 51.550592) (xy 68.254284 51.550585) (xy 68.418062 51.441151) + (xy 68.418066 51.441148) (xy 68.557348 51.301866) (xy 68.557351 51.301862) (xy 68.666785 51.138084) + (xy 68.66679 51.138075) (xy 68.686433 51.090653) (xy 195.425 51.090653) (xy 195.425 51.303146) (xy 195.458242 51.513027) + (xy 195.458242 51.51303) (xy 195.523904 51.715117) (xy 195.620375 51.90445) (xy 195.659728 51.958616) + (xy 196.292037 51.326308) (xy 196.309075 51.389893) (xy 196.374901 51.503907) (xy 196.467993 51.596999) + (xy 196.582007 51.662825) (xy 196.64559 51.679862) (xy 196.013282 52.312169) (xy 196.013282 52.31217) + (xy 196.067449 52.351524) (xy 196.256782 52.447995) (xy 196.45887 52.513657) (xy 196.668754 52.5469) + (xy 196.881246 52.5469) (xy 197.091127 52.513657) (xy 197.09113 52.513657) (xy 197.293217 52.447995) + (xy 197.482554 52.351522) (xy 197.536716 52.31217) (xy 197.536717 52.31217) (xy 196.904408 51.679862) + (xy 196.967993 51.662825) (xy 197.082007 51.596999) (xy 197.175099 51.503907) (xy 197.240925 51.389893) + (xy 197.257962 51.326308) (xy 197.89027 51.958617) (xy 197.89027 51.958616) (xy 197.929622 51.904455) + (xy 197.934232 51.895407) (xy 197.982205 51.844609) (xy 198.050025 51.827812) (xy 198.116161 51.850347) + (xy 198.155204 51.895404) (xy 198.159949 51.904717) (xy 198.28489 52.076686) (xy 198.435213 52.227009) + (xy 198.607179 52.351948) (xy 198.607181 52.351949) (xy 198.607184 52.351951) (xy 198.796588 52.448457) + (xy 198.998757 52.514146) (xy 199.208713 52.5474) (xy 199.208714 52.5474) (xy 199.421286 52.5474) + (xy 199.421287 52.5474) (xy 199.631243 52.514146) (xy 199.833412 52.448457) (xy 200.022816 52.351951) + (xy 200.109138 52.289235) (xy 200.194786 52.227009) (xy 200.194788 52.227006) (xy 200.194792 52.227004) + (xy 200.345104 52.076692) (xy 200.345106 52.076688) (xy 200.345109 52.076686) (xy 200.470048 51.90472) + (xy 200.47005 51.904717) (xy 200.470051 51.904716) (xy 200.474514 51.895954) (xy 200.522488 51.845159) + (xy 200.590308 51.828363) (xy 200.656444 51.850899) (xy 200.695486 51.895956) (xy 200.699951 51.90472) + (xy 200.82489 52.076686) (xy 200.975213 52.227009) (xy 201.147179 52.351948) (xy 201.147181 52.351949) + (xy 201.147184 52.351951) (xy 201.336588 52.448457) (xy 201.538757 52.514146) (xy 201.748713 52.5474) + (xy 201.748714 52.5474) (xy 201.961286 52.5474) (xy 201.961287 52.5474) (xy 202.171243 52.514146) + (xy 202.373412 52.448457) (xy 202.562816 52.351951) (xy 202.734792 52.227004) (xy 202.848329 52.113466) + (xy 202.909648 52.079984) (xy 202.97934 52.084968) (xy 203.035274 52.126839) (xy 203.052189 52.157817) + (xy 203.101202 52.289228) (xy 203.101206 52.289235) (xy 203.187452 52.404444) (xy 203.187455 52.404447) + (xy 203.302664 52.490693) (xy 203.302671 52.490697) (xy 203.437517 52.540991) (xy 203.437516 52.540991) + (xy 203.444444 52.541735) (xy 203.497127 52.5474) (xy 205.292872 52.547399) (xy 205.352483 52.540991) + (xy 205.487331 52.490696) (xy 205.602546 52.404446) (xy 205.688796 52.289231) (xy 205.739091 52.154383) + (xy 205.7455 52.094773) (xy 205.745499 50.299028) (xy 205.739091 50.239417) (xy 205.73781 50.235983) + (xy 205.688797 50.104571) (xy 205.688793 50.104564) (xy 205.602547 49.989355) (xy 205.602544 49.989352) + (xy 205.487335 49.903106) (xy 205.487328 49.903102) (xy 205.352482 49.852808) (xy 205.352483 49.852808) + (xy 205.292883 49.846401) (xy 205.292881 49.8464) (xy 205.292873 49.8464) (xy 205.292864 49.8464) + (xy 203.497129 49.8464) (xy 203.497123 49.846401) (xy 203.437516 49.852808) (xy 203.302671 49.903102) + (xy 203.302664 49.903106) (xy 203.187455 49.989352) (xy 203.187452 49.989355) (xy 203.101206 50.104564) + (xy 203.101203 50.104569) (xy 203.052189 50.235983) (xy 203.010317 50.291916) (xy 202.944853 50.316333) + (xy 202.87658 50.301481) (xy 202.848326 50.28033) (xy 202.734786 50.16679) (xy 202.56282 50.041851) + (xy 202.373414 49.945344) (xy 202.373413 49.945343) (xy 202.373412 49.945343) (xy 202.171243 49.879654) + (xy 202.171241 49.879653) (xy 202.17124 49.879653) (xy 202.009957 49.854108) (xy 201.961287 49.8464) + (xy 201.748713 49.8464) (xy 201.700042 49.854108) (xy 201.53876 49.879653) (xy 201.336585 49.945344) + (xy 201.147179 50.041851) (xy 200.975213 50.16679) (xy 200.82489 50.317113) (xy 200.699949 50.489082) + (xy 200.695484 50.497846) (xy 200.647509 50.548642) (xy 200.579688 50.565436) (xy 200.513553 50.542898) + (xy 200.474516 50.497846) (xy 200.47005 50.489082) (xy 200.345109 50.317113) (xy 200.194786 50.16679) + (xy 200.02282 50.041851) (xy 199.833414 49.945344) (xy 199.833413 49.945343) (xy 199.833412 49.945343) + (xy 199.631243 49.879654) (xy 199.631241 49.879653) (xy 199.63124 49.879653) (xy 199.469957 49.854108) + (xy 199.421287 49.8464) (xy 199.208713 49.8464) (xy 199.160042 49.854108) (xy 198.99876 49.879653) + (xy 198.796585 49.945344) (xy 198.607179 50.041851) (xy 198.435213 50.16679) (xy 198.28489 50.317113) + (xy 198.159949 50.489082) (xy 198.155202 50.498399) (xy 198.107227 50.549193) (xy 198.039405 50.565987) + (xy 197.973271 50.543448) (xy 197.934234 50.498395) (xy 197.929626 50.489352) (xy 197.89027 50.435182) + (xy 197.890269 50.435182) (xy 197.257962 51.06749) (xy 197.240925 51.003907) (xy 197.175099 50.889893) + (xy 197.082007 50.796801) (xy 196.967993 50.730975) (xy 196.904409 50.713937) (xy 197.536716 50.081628) + (xy 197.48255 50.042275) (xy 197.293217 49.945804) (xy 197.091129 49.880142) (xy 196.881246 49.8469) + (xy 196.668754 49.8469) (xy 196.458872 49.880142) (xy 196.458869 49.880142) (xy 196.256782 49.945804) + (xy 196.067439 50.04228) (xy 196.013282 50.081627) (xy 196.013282 50.081628) (xy 196.645591 50.713937) + (xy 196.582007 50.730975) (xy 196.467993 50.796801) (xy 196.374901 50.889893) (xy 196.309075 51.003907) + (xy 196.292037 51.067491) (xy 195.659728 50.435182) (xy 195.659727 50.435182) (xy 195.62038 50.489339) + (xy 195.523904 50.678682) (xy 195.458242 50.880769) (xy 195.458242 50.880772) (xy 195.425 51.090653) + (xy 68.686433 51.090653) (xy 68.708107 51.038328) (xy 68.708107 51.038326) (xy 68.742169 50.956093) + (xy 68.742172 50.956081) (xy 68.780599 50.762895) (xy 68.7806 50.762892) (xy 68.7806 50.6144) (xy 68.0806 50.6144) + (xy 68.0806 50.1144) (xy 68.7806 50.1144) (xy 68.7806 49.965908) (xy 68.780599 49.965904) (xy 68.742172 49.772718) + (xy 68.742169 49.772706) (xy 68.666792 49.590728) (xy 68.666785 49.590715) (xy 68.557351 49.426937) + (xy 68.557348 49.426933) (xy 68.418066 49.287651) (xy 68.418062 49.287648) (xy 68.254284 49.178214) + (xy 68.254271 49.178207) (xy 68.072291 49.102829) (xy 68.072283 49.102827) (xy 68.0306 49.094535) + (xy 68.0306 49.897411) (xy 68.02066 49.880195) (xy 67.964805 49.82434) (xy 67.896396 49.784844) + (xy 67.820096 49.7644) (xy 67.741104 49.7644) (xy 67.664804 49.784844) (xy 67.596395 49.82434) (xy 67.54054 49.880195) + (xy 67.5306 49.897411) (xy 67.5306 49.094536) (xy 67.530599 49.094535) (xy 67.488916 49.102827) + (xy 67.488908 49.102829) (xy 67.306928 49.178207) (xy 67.306915 49.178214) (xy 67.143137 49.287648) + (xy 67.143133 49.287651) (xy 67.003851 49.426933) (xy 67.003848 49.426937) (xy 66.894414 49.590715) + (xy 66.894407 49.590728) (xy 66.81903 49.772706) (xy 66.819027 49.772718) (xy 66.7806 49.965904) + (xy 60.140599 49.965904) (xy 60.102172 49.772718) (xy 60.102169 49.772706) (xy 60.026792 49.590728) + (xy 60.026785 49.590715) (xy 59.917351 49.426937) (xy 59.917348 49.426933) (xy 59.778066 49.287651) + (xy 59.778062 49.287648) (xy 59.614284 49.178214) (xy 59.614271 49.178207) (xy 59.432291 49.102829) + (xy 59.432283 49.102827) (xy 59.3906 49.094535) (xy 59.3906 49.897411) (xy 59.38066 49.880195) (xy 59.324805 49.82434) + (xy 59.256396 49.784844) (xy 59.180096 49.7644) (xy 59.101104 49.7644) (xy 59.024804 49.784844) + (xy 58.956395 49.82434) (xy 58.90054 49.880195) (xy 58.8906 49.897411) (xy 58.8906 49.094536) (xy 58.890599 49.094535) + (xy 58.848916 49.102827) (xy 58.848908 49.102829) (xy 58.666928 49.178207) (xy 58.666915 49.178214) + (xy 58.503137 49.287648) (xy 58.503133 49.287651) (xy 58.363851 49.426933) (xy 58.363848 49.426937) + (xy 58.254414 49.590715) (xy 58.254407 49.590728) (xy 58.17903 49.772706) (xy 58.179027 49.772718) + (xy 58.1406 49.965904) (xy 45.35175 49.965904) (xy 45.35175 48.2495) (xy 45.371435 48.182461) (xy 45.424239 48.136706) + (xy 45.47575 48.1255) (xy 363.31425 48.1255) + ) + ) + ) + (embedded_fonts no) +) diff --git a/hardware/68percent/68percent-backups/68percent.kicad_prl b/hardware/68percent/68percent-backups/68percent.kicad_prl new file mode 100644 index 00000000..9b7e039f --- /dev/null +++ b/hardware/68percent/68percent-backups/68percent.kicad_prl @@ -0,0 +1,137 @@ +{ + "board": { + "active_layer": 0, + "active_layer_preset": "", + "auto_track_width": true, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6, + "pads": 1.0, + "shapes": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + "vias", + "footprint_text", + "footprint_anchors", + "ratsnest", + "grid", + "footprints_front", + "footprints_back", + "footprint_values", + "footprint_references", + "tracks", + "drc_errors", + "drawing_sheet", + "bitmaps", + "pads", + "zones", + "drc_warnings", + "drc_exclusions", + "locked_item_shadows", + "conflict_shadows", + "shapes" + ], + "visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff", + "zone_display_mode": 0 + }, + "git": { + "repo_type": "", + "repo_username": "", + "ssh_key": "" + }, + "meta": { + "filename": "68percent.kicad_prl", + "version": 5 + }, + "net_inspector_panel": { + "col_hidden": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ], + "col_order": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "col_widths": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 165 + ], + "custom_group_rules": [], + "expanded_rows": [], + "filter_by_net_name": true, + "filter_by_netclass": true, + "filter_text": "", + "group_by_constraint": false, + "group_by_netclass": false, + "show_unconnected_nets": false, + "show_zero_pad_nets": false, + "sort_ascending": true, + "sorting_column": 0 + }, + "open_jobsets": [], + "project": { + "files": [] + }, + "schematic": { + "selection_filter": { + "graphics": true, + "images": true, + "labels": true, + "lockedItems": false, + "otherItems": true, + "pins": true, + "symbols": true, + "text": true, + "wires": true + } + } +} diff --git a/hardware/68percent/68percent-backups/68percent.kicad_pro b/hardware/68percent/68percent-backups/68percent.kicad_pro new file mode 100644 index 00000000..3b648139 --- /dev/null +++ b/hardware/68percent/68percent-backups/68percent.kicad_pro @@ -0,0 +1,290 @@ +{ + "board": { + "3dviewports": [], + "design_settings": { + "defaults": { + "apply_defaults_to_fp_fields": false, + "apply_defaults_to_fp_shapes": false, + "apply_defaults_to_fp_text": false, + "board_outline_line_width": 0.05, + "copper_line_width": 0.2, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.05, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": true, + "text_position": 0, + "units_format": 0 + }, + "fab_line_width": 0.1, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.1, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 0.8, + "height": 1.27, + "width": 2.54 + }, + "silk_line_width": 0.1, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.1, + "silk_text_upright": false, + "zones": { + "min_clearance": 0.5 + } + }, + "diff_pair_dimensions": [], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "connection_width": "warning", + "copper_edge_clearance": "error", + "copper_sliver": "warning", + "courtyards_overlap": "error", + "creepage": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint": "error", + "footprint_filters_mismatch": "ignore", + "footprint_symbol_mismatch": "warning", + "footprint_type_mismatch": "ignore", + "hole_clearance": "error", + "hole_to_hole": "warning", + "holes_co_located": "warning", + "invalid_outline": "error", + "isolated_copper": "warning", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "lib_footprint_issues": "warning", + "lib_footprint_mismatch": "warning", + "malformed_courtyard": "error", + "microvia_drill_out_of_range": "error", + "mirrored_text_on_front_layer": "warning", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "nonmirrored_text_on_back_layer": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "warning", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_edge_clearance": "warning", + "silk_over_copper": "warning", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "solder_mask_bridge": "error", + "starved_thermal": "error", + "text_height": "warning", + "text_on_edge_cuts": "error", + "text_thickness": "warning", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_angle": "error", + "track_dangling": "warning", + "track_segment_length": "error", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zones_intersect": "error" + }, + "rules": { + "max_error": 0.005, + "min_clearance": 0.0, + "min_connection": 0.0, + "min_copper_edge_clearance": 0.5, + "min_groove_width": 0.0, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.2, + "min_microvia_drill": 0.1, + "min_resolved_spokes": 2, + "min_silk_clearance": 0.0, + "min_text_height": 0.8, + "min_text_thickness": 0.08, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.0, + "min_via_annular_width": 0.1, + "min_via_diameter": 0.5, + "solder_mask_to_copper_clearance": 0.0, + "use_height_for_length_calcs": true + }, + "teardrop_options": [ + { + "td_onpthpad": true, + "td_onroundshapesonly": false, + "td_onsmdpad": true, + "td_ontrackend": false, + "td_onvia": true + } + ], + "teardrop_parameters": [ + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_round_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_rect_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_track_end", + "td_width_to_size_filter_ratio": 0.9 + } + ], + "track_widths": [], + "tuning_pattern_settings": { + "diff_pair_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 1.0 + }, + "diff_pair_skew_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + }, + "single_track_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + } + }, + "via_dimensions": [], + "zones_allow_external_fillets": false + }, + "ipc2581": { + "dist": "", + "distpn": "", + "internal_id": "", + "mfg": "", + "mpn": "" + }, + "layer_pairs": [], + "layer_presets": [], + "viewports": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "legacy": [], + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "68percent.kicad_pro", + "version": 3 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "priority": 2147483647, + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + } + ], + "meta": { + "version": 4 + }, + "net_colors": null, + "netclass_assignments": null, + "netclass_patterns": [] + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "plot": "", + "pos_files": "", + "specctra_dsn": "", + "step": "", + "svg": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "drawing": { + "label_size_ratio": 0.25, + "pin_symbol_size": 0, + "text_offset_ratio": 0.08 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [] + }, + "sheets": [], + "text_variables": {} +} diff --git a/hardware/68percent/68percent-backups/68percent.kicad_sch b/hardware/68percent/68percent-backups/68percent.kicad_sch new file mode 100644 index 00000000..09c84159 --- /dev/null +++ b/hardware/68percent/68percent-backups/68percent.kicad_sch @@ -0,0 +1,12349 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "a3d0d559-cac8-4859-ad0f-79ad0c1a1a82") + (paper "A4") + (lib_symbols + (symbol "PCM_4ms_Connector:Conn_01x04" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 0 -7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "4ms_Connector:Pins_1x04_2.54mm_TH_SWD" + (at 0 6.985 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at -3.175 -14.605 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at -2.54 -9.398 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at -2.54 -10.922 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "ki_keywords" "Conn_01x04" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x04_1_1" + (rectangle + (start -1.27 3.81) + (end 1.27 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Connector:Conn_01x06" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x06" + (at 0 -10.16 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "4ms_Connector:Pins_1x06_2.54mm_TH_SWD" + (at 0 -17.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at -1.905 -15.875 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at -2.54 -12.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0601FBV0T" + (at -1.905 -14.605 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "ki_keywords" "Conn_01x06" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x06_1_1" + (rectangle + (start -1.27 6.35) + (end 1.27 -8.89) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -7.493) + (end 0 -7.747) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -7.62 0) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Diode:D_Generic" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "D" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "D_Generic" + (at 0 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Diode" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "diode" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO-???* *SingleDiode *_Diode_* *SingleDiode* D_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "D_Generic_0_1" + (polyline + (pts + (xy -1.27 1.27) (xy -1.27 -1.27) + ) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 1.27) (xy 1.27 -1.27) (xy -1.27 0) (xy 1.27 1.27) + ) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "D_Generic_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "K" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 2.54) + (name "A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:+3.3V" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 0 3.556 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "+3.3V_0_1" + (polyline + (pts + (xy -0.762 1.27) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 2.54) (xy 0.762 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "+3.3V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:+5V" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 0 3.556 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "+5V_0_1" + (polyline + (pts + (xy -0.762 1.27) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 2.54) (xy 0.762 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:GND" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:GNDA" + (power) + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GNDA" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "(analog) ground power-flag symbol" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Power Flag Symbol" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GNDA_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GNDA_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (hide yes) + (name "GNDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Regulator:LD1117-3.3V-SOT223" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "IC" + (at 2.54 -6.35 0) + (effects + (font + (size 1.143 1.143) + ) + (justify left bottom) + ) + ) + (property "Value" "LD1117-3.3V-SOT223" + (at -4.445 4.445 0) + (effects + (font + (size 1.143 1.143) + ) + (justify left bottom) + ) + ) + (property "Footprint" "4ms_Package_SOT:SOT223" + (at 0 6.985 0) + (effects + (font + (size 0.508 0.508) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" + (at 0 1.27 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Manufacturer" "STMicroelectronics" + (at 0 -9.525 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "LD1117S33CTR" + (at 0 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "ki_fp_filters" "*TO-252-2* *TO?252?2*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LD1117-3.3V-SOT223_1_0" + (rectangle + (start -5.08 3.81) + (end 5.08 -3.81) + (stroke + (width 0) + (type default) + ) + (fill + (type background) + ) + ) + (text "IN" + (at -3.2766 1.2446 0) + (effects + (font + (size 1.2192 1.2192) + ) + ) + ) + (text "ADJ" + (at -0.2794 -2.4384 0) + (effects + (font + (size 1.2192 1.2192) + ) + ) + ) + (text "OUT" + (at 1.8796 1.2446 0) + (effects + (font + (size 1.2192 1.2192) + ) + ) + ) + ) + (symbol "LD1117-3.3V-SOT223_1_1" + (pin input line + (at -10.16 1.27 0) + (length 5.08) + (name "IN" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (number "3" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + ) + (pin input line + (at 0 -6.35 90) + (length 2.54) + (name "ADJ" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (number "1" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + ) + (pin passive line + (at 10.16 1.27 180) + (length 5.08) + (name "OUT" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (number "2" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Capacitor_AKL:C_0805" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "C" + (at 0.635 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "C_0805" + (at 0.635 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 0.9652 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "cap capacitor ceramic chip mlcc smd 0805" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "C_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_0805_0_1" + (polyline + (pts + (xy -2.032 0.762) (xy 2.032 0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.032 -0.762) (xy 2.032 -0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "C_0805_0_2" + (polyline + (pts + (xy -2.54 -2.54) (xy -0.381 -0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.508 -0.508) (xy -1.651 0.635) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.508 -0.508) (xy 0.635 -1.651) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.381 0.381) (xy 2.54 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 0.508) (xy -0.635 1.651) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 0.508) (xy 1.651 -0.635) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "C_0805_1_1" + (pin passive line + (at 0 3.81 270) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "C_0805_1_2" + (pin passive line + (at -2.54 -2.54 90) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 2.54 270) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Device_AKL:Ferrite_Bead" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "FB" + (at 0 4.572 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Ferrite_Bead" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 3.302 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Ferrite bead, Alternate KiCAD Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "ferrite bead emc" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "*Fuse*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Ferrite_Bead_0_1" + (rectangle + (start -2.54 1.016) + (end 2.54 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.54 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Ferrite_Bead_1_1" + (rectangle + (start -2.54 -0.508) + (end 2.54 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (pin passive line + (at -3.81 0 0) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Diode_TVS_AKL:PRTR5V0U2X" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "D" + (at 7.62 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PRTR5V0U2X" + (at 7.62 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Package_TO_SOT_SMD_AKL:SOT-143" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "diode TVS array PRTR5V0U2X" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PRTR5V0U2X_0_1" + (rectangle + (start -6.35 5.08) + (end 6.35 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -3.81 2.54) (xy -3.81 3.81) (xy 3.81 3.81) (xy 3.81 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 2.54) (xy -3.175 1.27) (xy -4.445 1.27) (xy -3.81 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center -3.81 0) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -3.81 0) (xy -6.35 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 -1.27) (xy -3.81 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 -1.27) (xy -3.175 -2.54) (xy -4.445 -2.54) (xy -3.81 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -3.81 -2.54) (xy -3.81 -3.81) (xy 3.81 -3.81) (xy 3.81 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.175 2.54) (xy -4.445 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.175 -1.27) (xy -4.445 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 3.81) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0 1.27) (xy 0 5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.27) (xy 0 -5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.81 2.54) (xy 4.445 1.27) (xy 3.175 1.27) (xy 3.81 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 3.81 0) (xy 6.35 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.81 0) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 3.81 -1.27) (xy 3.81 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.81 -1.27) (xy 4.445 -2.54) (xy 3.175 -2.54) (xy 3.81 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 4.445 2.54) (xy 3.175 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 4.445 -1.27) (xy 3.175 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "PRTR5V0U2X_1_1" + (polyline + (pts + (xy -3.81 1.27) (xy -3.81 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 1.27) (xy 1.27 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.27) (xy 0 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 -3.81) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 1.27 1.27) (xy 1.27 0.762) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 -1.27) (xy -1.27 -1.27) (xy 0 1.27) (xy 1.27 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (pin passive line + (at -8.89 0 0) + (length 2.54) + (name "L1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 7.62 270) + (length 2.54) + (name "VP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -7.62 90) + (length 2.54) + (name "VN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 8.89 0 180) + (length 2.54) + (name "L2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Resistor_AKL:R_0805" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "R" + (at 2.54 1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "R_0805" + (at 2.54 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 0 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "R res resistor eu smd 0805" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "R_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "R_0805_0_1" + (rectangle + (start -1.016 2.54) + (end 1.016 -2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_0805_0_2" + (polyline + (pts + (xy -2.54 -2.54) (xy -1.524 -1.524) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 1.524) (xy 2.54 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 1.524) (xy 0.889 2.159) (xy -2.159 -0.889) (xy -0.889 -2.159) (xy 2.159 0.889) (xy 1.524 1.524) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_0805_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "R_0805_1_2" + (pin passive line + (at -2.54 -2.54 0) + (length 0) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 2.54 180) + (length 0) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_SL_Devices:Crystal_8MHz" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Y" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Crystal_8MHz" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Crystal:Crystal_HC49-4H_Vertical" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "8Mz Crystal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "8Mz Crystal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Crystal_8MHz_0_1" + (polyline + (pts + (xy -2.54 1.27) (xy -2.54 -1.27) + ) + (stroke + (width 1) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.54) + (end 1.27 -2.54) + (stroke + (width 0.5) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 1.27) (xy 2.54 -1.27) + ) + (stroke + (width 1) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Crystal_8MHz_1_1" + (pin passive line + (at -5.08 0 0) + (length 2.54) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2.54) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_SL_Devices:Push_Button" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "SW" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Push_Button" + (at 0 4.445 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Button_Switch_THT:SW_PUSH_6mm" + (at -0.127 -3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Common 6mmx6mm Push Button" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Switch" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Push_Button_0_1" + (polyline + (pts + (xy -3.175 0) (xy -1.778 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 1.27) (xy 1.905 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -1.27 0) + (radius 0.4579) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0 1.27) (xy 0 3.175) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 1.27 0) + (radius 0.4579) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 1.778 0) (xy 3.175 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Push_Button_1_1" + (pin passive line + (at -5.08 0 0) + (length 2) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1 1) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1 1) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Type-C:HRO-TYPE-C-31-M-12" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "USB" + (at -5.08 16.51 0) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Value" "HRO-TYPE-C-31-M-12" + (at -10.16 -1.27 90) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "HRO-TYPE-C-31-M-12_0_1" + (rectangle + (start -11.43 15.24) + (end -8.89 -17.78) + (stroke + (width 0) + (type solid) + ) + (fill + (type background) + ) + ) + (rectangle + (start 0 -17.78) + (end -8.89 15.24) + (stroke + (width 0) + (type solid) + ) + (fill + (type background) + ) + ) + ) + (symbol "HRO-TYPE-C-31-M-12_1_1" + (pin input line + (at 2.54 13.97 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 11.43 180) + (length 2.54) + (name "VBUS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 8.89 180) + (length 2.54) + (name "SBU2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 6.35 180) + (length 2.54) + (name "CC1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 3.81 180) + (length 2.54) + (name "DN2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 1.27 180) + (length 2.54) + (name "DP1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -1.27 180) + (length 2.54) + (name "DN1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -3.81 180) + (length 2.54) + (name "DP2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -6.35 180) + (length 2.54) + (name "SBU1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -8.89 180) + (length 2.54) + (name "CC2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -11.43 180) + (length 2.54) + (name "VBUS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -13.97 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -16.51 180) + (length 2.54) + (name "SHIELD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:GND" + (power) + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "global power" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "stm32f446ret6:STM32F446RET6" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -1.016 1.016 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "STM32F446RET6_0_1" + (rectangle + (start 0 0) + (end 43.18 -43.18) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "STM32F446RET6_1_1" + (text "STM32F466RE\n" + (at 21.59 -21.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin bidirectional line + (at 0 -2.54 180) + (length 2.54) + (name "VBAT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -5.08 180) + (length 2.54) + (name "PC13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -7.62 180) + (length 2.54) + (name "PC14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -10.16 180) + (length 2.54) + (name "PC15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -12.7 180) + (length 2.54) + (name "OSCIN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -15.24 180) + (length 2.54) + (name "OSCOUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -17.78 180) + (length 2.54) + (name "NRST" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -20.32 180) + (length 2.54) + (name "PC0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -22.86 180) + (length 2.54) + (name "PC1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -25.4 180) + (length 2.54) + (name "PC2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -27.94 180) + (length 2.54) + (name "PC3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -30.48 180) + (length 2.54) + (name "VSSA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -33.02 180) + (length 2.54) + (name "VDDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -35.56 180) + (length 2.54) + (name "PA0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -38.1 180) + (length 2.54) + (name "PA1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -40.64 180) + (length 2.54) + (name "PA2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 2.54 0 90) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "64" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 2.54 -43.18 270) + (length 2.54) + (name "PA3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 5.08 0 90) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "63" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 5.08 -43.18 270) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 7.62 0 90) + (length 2.54) + (name "PB9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "62" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 7.62 -43.18 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 10.16 0 90) + (length 2.54) + (name "PB8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "61" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 10.16 -43.18 270) + (length 2.54) + (name "PA4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 12.7 0 90) + (length 2.54) + (name "BOOT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "60" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 12.7 -43.18 270) + (length 2.54) + (name "PA5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 0 90) + (length 2.54) + (name "PB7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "59" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -43.18 270) + (length 2.54) + (name "PA6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 0 90) + (length 2.54) + (name "PB6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "58" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -43.18 270) + (length 2.54) + (name "PA7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 20.32 0 90) + (length 2.54) + (name "PB5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "57" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 20.32 -43.18 270) + (length 2.54) + (name "PC4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 0 90) + (length 2.54) + (name "PB4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "56" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -43.18 270) + (length 2.54) + (name "PC5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 25.4 0 90) + (length 2.54) + (name "PB3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "55" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 25.4 -43.18 270) + (length 2.54) + (name "PB0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 0 90) + (length 2.54) + (name "PD2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "54" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -43.18 270) + (length 2.54) + (name "PB1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 30.48 0 90) + (length 2.54) + (name "PC12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "53" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 30.48 -43.18 270) + (length 2.54) + (name "PB2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 33.02 0 90) + (length 2.54) + (name "PC11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "52" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 33.02 -43.18 270) + (length 2.54) + (name "PB10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "29" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 35.56 0 90) + (length 2.54) + (name "PA10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "51" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 35.56 -43.18 270) + (length 2.54) + (name "VCAP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "30" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 38.1 0 90) + (length 2.54) + (name "PA15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "50" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 38.1 -43.18 270) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "31" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 40.64 0 90) + (length 2.54) + (name "PA14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "49" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 40.64 -43.18 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "32" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -2.54 0) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "48" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -5.08 0) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "47" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -7.62 0) + (length 2.54) + (name "PA13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "46" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -10.16 0) + (length 2.54) + (name "PA12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "45" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -12.7 0) + (length 2.54) + (name "PA11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "44" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -15.24 0) + (length 2.54) + (name "PA10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "43" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -17.78 0) + (length 2.54) + (name "PA9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "42" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -20.32 0) + (length 2.54) + (name "PA8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "41" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -22.86 0) + (length 2.54) + (name "PC9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "40" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -25.4 0) + (length 2.54) + (name "PC8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "39" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -27.94 0) + (length 2.54) + (name "PC7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -30.48 0) + (length 2.54) + (name "PC6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -33.02 0) + (length 2.54) + (name "PB15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -35.56 0) + (length 2.54) + (name "PB14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -38.1 0) + (length 2.54) + (name "PB13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -40.64 0) + (length 2.54) + (name "PB12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (text "MCU" + (exclude_from_sim no) + (at 200.152 81.534 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "053570bf-16e9-44c8-a82a-684c6f7508cb") + ) + (text "+ \nRGB MATRIX" + (exclude_from_sim no) + (at 243.84 79.756 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "12748ec4-00f5-490e-aa52-a210910b5263") + ) + (text "DECOUPLING CAPS\n" + (exclude_from_sim no) + (at 47.752 175.26 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "18ba2e75-ba3b-4501-b190-9ad5b6ed2853") + ) + (text "PORT CONNECTIONS\n" + (exclude_from_sim no) + (at 53.086 130.048 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "3ad0362e-3277-4bf5-a873-b6a1597c7959") + ) + (text "POWER SOURCE\n" + (exclude_from_sim no) + (at 137.668 35.306 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "3d192bed-52cb-48b6-8954-5b4db22d1c09") + ) + (text "USB RECEPTACLE" + (exclude_from_sim no) + (at 75.692 65.532 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "40f0ab9d-8619-4019-90bb-2b72acfba98c") + ) + (text "KEYBOARD MATRIX\n" + (exclude_from_sim no) + (at 243.84 73.66 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "77d3e340-9f37-45b6-9c2f-7dd12faeb64d") + ) + (text "A modular keyboard system designed for flexible orientation and interchangeable layouts.\nThis schematic represents the application of the design as a numpad module, \nwhich can operate as a standalone numeric keypad or as an extension to the main keyboard." + (exclude_from_sim no) + (at 178.816 170.942 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.1588) + ) + (justify left) + ) + (uuid "b2e16b73-db9e-48d9-887a-7511975e0f40") + ) + (text "Modularly Simple KeyBoard preV1" + (exclude_from_sim no) + (at 219.202 189.738 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "c3c048a7-a63f-433a-824a-8996e749bf01") + ) + (text "JTAG" + (exclude_from_sim no) + (at 240.792 151.638 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "e15c1fc6-d6f9-479e-9240-8e7c364ac79d") + ) + (junction + (at 48.26 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "0f6f91a4-a934-463b-b122-7f23512f1734") + ) + (junction + (at 43.18 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "1a8f3bff-3750-4093-91f3-3af3450de74d") + ) + (junction + (at 43.18 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "1c37534d-40dd-4272-bd53-ea9d2e019ab1") + ) + (junction + (at 50.8 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "220a4cc1-72cb-45c0-abd2-dfa0ee539eae") + ) + (junction + (at 43.18 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "27b11cc7-491b-4d42-b423-76ef6b46e081") + ) + (junction + (at 31.75 160.02) + (diameter 0) + (color 0 0 0 0) + (uuid "2e11f1b5-4d79-4b26-9fa1-7d79bbe862ed") + ) + (junction + (at 49.53 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "2e31501e-2d51-448f-8454-3f8d0a2f5892") + ) + (junction + (at 190.5 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "336c3f51-826e-4afd-8da1-62a8bbf93823") + ) + (junction + (at 134.62 73.66) + (diameter 0) + (color 0 0 0 0) + (uuid "34992661-1d26-4f61-b9fe-4fb32e3c01df") + ) + (junction + (at 92.71 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "36c7150f-cb01-4b6f-a11a-522367414f73") + ) + (junction + (at 52.07 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "4a532823-9646-4711-ac88-38674fa4c05e") + ) + (junction + (at 165.1 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "4dbaf7a2-8834-472e-8aaf-4b7c652eab6f") + ) + (junction + (at 50.8 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "54498a32-302d-4f99-936f-a4f208527e0f") + ) + (junction + (at 113.03 106.68) + (diameter 0) + (color 0 0 0 0) + (uuid "70e9c72f-b778-4c87-8e4f-7bafd4302b9a") + ) + (junction + (at 43.18 160.02) + (diameter 0) + (color 0 0 0 0) + (uuid "7764b747-881c-48f7-8d2e-86724ffa1988") + ) + (junction + (at 113.03 116.84) + (diameter 0) + (color 0 0 0 0) + (uuid "7f7962f1-ccd8-4cd9-a566-cbcab57cecde") + ) + (junction + (at 54.61 160.02) + (diameter 0) + (color 0 0 0 0) + (uuid "8a301476-bb2b-40a8-9dab-4ee9500ebd42") + ) + (junction + (at 54.61 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "95f858c6-590e-4b07-b00e-14b33fe3654b") + ) + (junction + (at 127 100.33) + (diameter 0) + (color 0 0 0 0) + (uuid "a49bc808-02e8-4817-b90a-a4a1b75244ee") + ) + (junction + (at 45.72 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "b229d9ea-1ae2-4434-99c1-1e4df683342f") + ) + (junction + (at 52.07 97.79) + (diameter 0) + (color 0 0 0 0) + (uuid "b7910006-9150-4e29-bab8-e9d77307b10d") + ) + (junction + (at 177.8 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "ba78025a-63ef-4867-8d31-7e94c2ea70e9") + ) + (junction + (at 116.84 87.63) + (diameter 0) + (color 0 0 0 0) + (uuid "be122d9c-1b65-4ca9-a3ce-31a3314b3426") + ) + (junction + (at 85.09 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "caadfcbb-ef16-4d20-b0af-dafe81dc7050") + ) + (junction + (at 119.38 106.68) + (diameter 0) + (color 0 0 0 0) + (uuid "cc90e23d-f590-4e27-a42c-5d487fc572f1") + ) + (junction + (at 31.75 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "e0b41c54-35b8-4d1e-9f2a-6ccd130dde8b") + ) + (junction + (at 116.84 100.33) + (diameter 0) + (color 0 0 0 0) + (uuid "e42f4b43-15d9-40ac-bf9a-1258524dc65c") + ) + (junction + (at 85.09 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "e73a272a-f3b1-429e-a4ac-632efe248e69") + ) + (junction + (at 50.8 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "ed82e976-1bb9-4a58-baea-21c0632ce514") + ) + (no_connect + (at 144.78 116.84) + (uuid "0b50b0cb-735c-4720-9cfc-7d257132c35a") + ) + (no_connect + (at 152.4 88.9) + (uuid "300a4c2c-3f4b-4f25-b5db-14f5f80aecbb") + ) + (no_connect + (at 144.78 111.76) + (uuid "599dd13b-d9e8-4d78-aefb-33d0ced626e6") + ) + (no_connect + (at 187.96 129.54) + (uuid "8567c420-7e62-4e40-ac4b-381f2ec0c9fd") + ) + (no_connect + (at 40.64 33.02) + (uuid "8ec52c42-5cb3-496e-9d92-e27ae929aa15") + ) + (no_connect + (at 154.94 88.9) + (uuid "915e6404-a87d-4be9-b5c0-aadfa7f173eb") + ) + (no_connect + (at 144.78 99.06) + (uuid "a89c65fa-d3ae-4802-af43-002e5ab52a3c") + ) + (no_connect + (at 144.78 109.22) + (uuid "b4ec3779-e4d6-4643-9c51-21e093b6c010") + ) + (no_connect + (at 40.64 48.26) + (uuid "c93053ea-a8d0-4bab-a6e3-5fe3cb7ab029") + ) + (no_connect + (at 144.78 96.52) + (uuid "ca6a7a10-4dfe-4b9a-b456-324c7de09245") + ) + (no_connect + (at 144.78 114.3) + (uuid "dc302dbd-e366-453c-b672-c9c2f0309ad6") + ) + (no_connect + (at 144.78 93.98) + (uuid "dd6f19b1-af0f-4ed5-b78c-06c2a72c0ec4") + ) + (wire + (pts + (xy 31.75 160.02) (xy 31.75 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00fd3c01-2e41-4555-8a03-1e94fccb5d51") + ) + (wire + (pts + (xy 196.85 31.75) (xy 196.85 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01906518-da0c-47cd-953b-26f72e84a7ca") + ) + (wire + (pts + (xy 67.31 55.88) (xy 85.09 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01989c17-3e28-4f4a-8adc-509ba7411462") + ) + (wire + (pts +<<<<<<< HEAD +======= + (xy 237.49 111.76) (xy 237.49 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02f26d5e-f208-4852-831f-33981d6c61c3") + ) + (wire + (pts +>>>>>>> hardware-65percent + (xy 43.18 58.42) (xy 49.53 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0335a907-0ede-4ebd-ac54-adf1c3500f54") + ) + (wire + (pts + (xy 96.52 116.84) (xy 113.03 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "03ea680e-440a-45dd-9b7a-0498259e1eb8") + ) + (wire + (pts + (xy 144.78 91.44) (xy 134.62 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04a5328c-4588-468b-94fa-c480b7dfbab2") + ) + (wire + (pts + (xy 50.8 85.09) (xy 50.8 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "05620071-1289-465a-bf88-b0bc2c06bf19") + ) + (wire + (pts + (xy 167.64 34.29) (xy 165.1 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0706f41a-efd4-4eae-9522-0d25101ad0d0") + ) + (wire + (pts + (xy 105.41 87.63) (xy 116.84 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ae95369-9eb5-4fcf-9779-42360b40e70b") + ) + (wire + (pts + (xy 123.19 129.54) (xy 144.78 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bdf774e-a5a9-4aa3-84c3-cb36cab53577") + ) + (wire + (pts +<<<<<<< HEAD + (xy 162.56 132.08) (xy 162.56 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c365f9b-ec33-45c0-bcaa-f753e4bca3a2") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 147.32 77.47) (xy 147.32 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0eec1321-cba2-499e-a932-bdf00c658069") + ) + (wire + (pts + (xy 52.07 97.79) (xy 68.58 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0f54820b-4967-4434-98bb-4a1954827aa5") + ) + (wire + (pts + (xy 187.96 93.98) (xy 201.93 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10d72e49-b58e-41ec-acff-fe378d1c1a07") + ) + (wire + (pts + (xy 240.03 26.67) (xy 240.03 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "12439fa1-108d-40ec-9e24-05c5539bdcbe") + ) + (wire + (pts + (xy 255.27 26.67) (xy 255.27 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "15175de2-159b-401b-be2e-f5f1f5d3d293") + ) + (wire + (pts + (xy 187.96 96.52) (xy 201.93 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1a18d475-875b-48a3-8b99-1398b1e83c91") + ) + (wire + (pts + (xy 165.1 76.2) (xy 165.1 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ad0f778-1242-4788-b786-3053f5269c6e") + ) + (wire + (pts + (xy 116.84 87.63) (xy 127 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1baeb221-1013-40d6-aead-2b046792f698") + ) + (wire + (pts + (xy 209.55 50.8) (xy 217.17 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f22f88b-f3f4-467e-9040-cec3d802cf54") + ) + (wire + (pts + (xy 109.22 73.66) (xy 120.65 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f3decf6-56bc-4987-a07d-5fc2cfdbf99e") + ) + (wire + (pts + (xy 242.57 26.67) (xy 242.57 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "208a1faa-bb1b-433e-94ad-29c8d738354c") + ) + (wire + (pts + (xy 229.87 134.62) (xy 241.3 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20dc9b34-59f2-4355-be2f-69c705971898") + ) + (wire + (pts + (xy 209.55 58.42) (xy 217.17 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2126d0b3-0942-46ed-a887-338115d4e944") + ) + (wire + (pts + (xy 43.18 55.88) (xy 40.64 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "247988be-f1ec-49ec-a333-41688f2e4fc0") + ) + (wire + (pts + (xy 49.53 92.71) (xy 35.56 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "26f83c9f-b790-4cb2-af83-2aa9c9e51c39") + ) + (wire + (pts + (xy 43.18 160.02) (xy 54.61 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "289e2bd6-73d5-4949-82a5-b8596ab06387") + ) + (wire + (pts + (xy 127 101.6) (xy 144.78 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "292104ca-3d20-4356-b182-a13b0a9176ce") + ) + (wire + (pts + (xy 167.64 132.08) (xy 167.64 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a4eeff8-ed6e-4975-b712-d0bc61f259cd") + ) + (wire + (pts + (xy 149.86 77.47) (xy 149.86 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b6cdadb-6bbb-47ce-8dde-457d59e5c2a7") + ) + (wire + (pts + (xy 116.84 100.33) (xy 116.84 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fddf5e5-afc9-4ff0-a699-6788de5db800") + ) + (wire + (pts + (xy 134.62 91.44) (xy 134.62 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30979165-d449-4e2b-a93f-0991abdb0465") + ) + (wire + (pts + (xy 31.75 149.86) (xy 31.75 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "330d5ff8-84d8-41a5-bfee-45da384c7ed9") + ) + (wire + (pts + (xy 109.22 73.66) (xy 109.22 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34cb745e-85a4-4f52-8881-0f0a8d4931ef") + ) + (wire + (pts + (xy 77.47 46.99) (xy 73.66 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37b24e3e-6cbc-4b14-ade0-7b79f8d12f02") + ) + (wire + (pts + (xy 53.34 95.25) (xy 68.58 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37f03eff-586f-4094-8855-542e564609e6") + ) + (wire + (pts + (xy 157.48 132.08) (xy 157.48 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38cae9ee-d843-4f35-a584-9783ea88b63c") + ) + (wire + (pts + (xy 187.96 104.14) (xy 212.09 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a7288aa-4ed3-4056-b2cb-8fef7ffd7fac") + ) + (wire + (pts + (xy 127 100.33) (xy 127 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f4651a7-686d-42ea-9698-5838e5943557") + ) + (wire + (pts + (xy 185.42 143.51) (xy 185.42 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f4f5601-5cb4-4b09-bb9e-970ca1e3d02b") + ) + (wire + (pts + (xy 152.4 132.08) (xy 152.4 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44bc8c63-d89a-46e4-9d00-a5b9de75d756") + ) + (wire + (pts + (xy 172.72 132.08) (xy 172.72 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "450a7d1b-d4b5-47d0-b75f-49cb00b277c1") + ) + (wire + (pts + (xy 50.8 45.72) (xy 67.31 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4570fa46-daac-46da-b206-5998ba573467") + ) + (wire + (pts + (xy 35.56 105.41) (xy 50.8 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "458dba6f-06fc-4619-a060-0ecf78dcf85a") + ) + (wire + (pts + (xy 53.34 107.95) (xy 68.58 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "465af43c-4e85-4f93-bb3b-2e57bac120b2") + ) + (wire + (pts + (xy 73.66 46.99) (xy 73.66 49.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4706908c-636d-444d-b2c0-039cdfb74b4d") + ) + (wire + (pts +<<<<<<< HEAD + (xy 175.26 63.5) (xy 175.26 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "477066b8-b318-4156-a17c-fbe9dd48a160") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 248.92 129.54) (xy 248.92 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4874b85c-ca6a-43a9-b3a5-8f906291c1f7") + ) + (wire + (pts + (xy 52.07 118.11) (xy 52.07 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4cca7c1a-d12a-4d5b-8dd4-4401bb342c6d") + ) + (wire + (pts +<<<<<<< HEAD + (xy 154.94 132.08) (xy 154.94 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d52ae93-a4ca-4383-bb89-91e9056bf0db") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 119.38 129.54) (xy 113.03 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f47a244-1f71-49eb-9094-aa6e152b6833") + ) + (wire + (pts + (xy 182.88 132.08) (xy 182.88 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f536248-7a57-4327-aa34-727e9506252f") + ) + (wire + (pts + (xy 58.42 35.56) (xy 58.42 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "529cd2fd-f4b4-4dfa-88ae-b39a282450b0") + ) + (wire + (pts + (xy 119.38 106.68) (xy 144.78 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52a98227-b763-4347-af19-3768ac500778") + ) + (wire + (pts + (xy 177.8 41.91) (xy 190.5 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "53e1b29f-1b7c-4a7f-8b33-b9b30a2397bc") + ) + (wire + (pts + (xy 223.52 137.16) (xy 251.46 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5532e8ef-0bc4-4de1-9a6f-fd84a38c396c") + ) + (wire + (pts + (xy 35.56 97.79) (xy 52.07 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "562315e5-2659-4b64-b6a4-896f84956ea9") + ) + (wire + (pts + (xy 53.34 110.49) (xy 68.58 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57440857-b976-423f-9e7a-b950ad2438d3") + ) + (wire + (pts + (xy 116.84 87.63) (xy 116.84 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58da7475-15d0-496c-9708-fa29ececcc6e") + ) + (wire + (pts + (xy 248.92 132.08) (xy 251.46 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59e201b2-0a7c-4e35-8471-aae12d903450") + ) + (wire + (pts + (xy 50.8 90.17) (xy 50.8 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a0c8ca1-e08f-43f7-8d31-1375895859ca") + ) + (wire + (pts + (xy 209.55 55.88) (xy 217.17 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a8c3d76-ece7-4cea-afe6-fca17951a559") + ) + (wire + (pts + (xy 40.64 58.42) (xy 43.18 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c2c9eff-618d-442a-9d7e-b706135f2805") + ) + (wire + (pts + (xy 187.96 34.29) (xy 190.5 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ed0c7ae-0554-43d0-8aff-c75229568034") + ) + (wire + (pts + (xy 175.26 132.08) (xy 175.26 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f7ef538-4e1c-4f24-94de-8dc55a60a5c9") + ) + (wire + (pts + (xy 229.87 142.24) (xy 241.3 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "60d998c9-4be4-4529-813d-61347020e312") + ) + (wire + (pts + (xy 165.1 41.91) (xy 177.8 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "627375d7-97c0-43e6-ab57-2fc3c3266f3b") + ) + (wire + (pts + (xy 158.75 34.29) (xy 158.75 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "643c8654-a64f-4cd4-848c-c244b8b851a3") + ) + (wire + (pts + (xy 187.96 106.68) (xy 212.09 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "663d7edc-35d4-4678-b5b2-956b0ead572f") + ) + (wire + (pts + (xy 43.18 58.42) (xy 43.18 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68110c4c-99d7-4030-9e98-1e043ba3c876") + ) + (wire + (pts + (xy 76.2 30.48) (xy 92.71 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "684cca3f-fdef-4580-a559-ec92864a877d") + ) + (wire + (pts + (xy 35.56 110.49) (xy 49.53 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "693f3dbe-4e73-43c7-8fcf-616ba911db6e") + ) + (wire + (pts + (xy 162.56 76.2) (xy 162.56 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a875d99-df08-4727-89b1-a7f7f4e8c7a3") + ) + (wire + (pts + (xy 187.96 111.76) (xy 203.2 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b5d728e-13d1-41c6-83a9-b7d155de526e") + ) + (wire + (pts + (xy 53.34 92.71) (xy 68.58 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d9e585f-cbc3-414c-9299-2e5b280c073d") + ) + (wire + (pts + (xy 187.96 124.46) (xy 203.2 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6da5d636-af4e-43c8-9f36-e459d33d1bbe") + ) + (wire + (pts + (xy 134.62 68.58) (xy 134.62 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f04dc55-ef64-4bc9-b0d0-4c627f116dbd") + ) + (wire + (pts + (xy 185.42 73.66) (xy 185.42 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71259b82-bdf7-498b-b24b-83577cb15492") + ) + (wire + (pts + (xy 50.8 105.41) (xy 68.58 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "715c013f-940e-41c2-bce8-d311766decb6") + ) + (wire + (pts + (xy 260.35 26.67) (xy 260.35 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75f76f62-7624-4a4c-93a9-a039578267af") + ) + (wire + (pts + (xy 40.64 30.48) (xy 45.72 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "776243c5-1d03-4ada-a03f-0ef931893237") + ) + (wire + (pts + (xy 40.64 38.1) (xy 48.26 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79888534-70ed-452a-bd5b-d1029281da10") + ) + (wire + (pts + (xy 40.64 50.8) (xy 49.53 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ab65dfe-09b0-4f17-b223-a9311f4784d6") + ) + (wire + (pts + (xy 248.92 134.62) (xy 251.46 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7bcbc1dd-858c-46e1-b9f4-207586227937") + ) + (wire + (pts + (xy 113.03 107.95) (xy 113.03 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c581021-24c9-4b69-b987-c6220ecfd605") + ) + (wire + (pts + (xy 128.27 73.66) (xy 134.62 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c9a429e-b501-454a-a798-72a9debc42e7") + ) + (wire + (pts + (xy 267.97 26.67) (xy 267.97 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d4b4f9e-4b6f-4ba8-aebd-0f661a376cfe") + ) + (wire + (pts + (xy 234.95 26.67) (xy 234.95 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e691013-eb16-4449-ad01-df5d08179de9") + ) + (wire + (pts + (xy 48.26 38.1) (xy 85.09 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81fbcf92-dd81-4e13-8596-b53d8260ea0f") + ) + (wire + (pts + (xy 113.03 129.54) (xy 113.03 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82863544-c8b6-4a81-ba0e-9ed9dc1f7811") + ) + (wire + (pts + (xy 67.31 45.72) (xy 67.31 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82bd2989-2318-4253-b209-267092851cba") + ) + (wire + (pts + (xy 265.43 26.67) (xy 265.43 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83b82508-5fe8-4054-9a00-42e24d33b288") + ) + (wire + (pts + (xy 209.55 48.26) (xy 217.17 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83d38e48-b8cc-4280-90de-8336d999cc9e") + ) + (wire + (pts + (xy 106.68 172.72) (xy 106.68 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8427d372-153a-4165-9c6b-d703ad055792") + ) + (wire + (pts + (xy 166.37 60.96) (xy 157.48 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8527098b-4400-4446-804d-ab014655552c") + ) + (wire + (pts + (xy 54.61 152.4) (xy 66.04 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86e8be86-7a52-450c-820b-e68995200152") + ) + (wire + (pts + (xy 247.65 26.67) (xy 247.65 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "878877a1-6590-498b-aa1a-efc92c6e27f6") + ) + (wire + (pts + (xy 104.14 119.38) (xy 144.78 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a407c97-de84-4759-89bb-c47ac175cf08") + ) + (wire + (pts + (xy 85.09 38.1) (xy 101.6 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8aba9e24-a5f7-40f7-bdc4-fc865abfdccc") + ) + (wire + (pts + (xy 167.64 76.2) (xy 167.64 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cd8c252-9640-463d-9c7b-97b8af4a7394") + ) + (wire + (pts + (xy 40.64 27.94) (xy 43.18 27.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e50dffa-98dd-40ff-8994-cbeafa4b2bfb") + ) + (wire + (pts + (xy 113.03 106.68) (xy 119.38 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "933a4130-c00a-4b4c-bb79-83312d882419") + ) + (wire + (pts + (xy 229.87 144.78) (xy 241.3 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "943af323-76f9-4011-a61b-cc2b7fef77fa") + ) + (wire + (pts + (xy 115.57 170.18) (xy 116.84 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "948b4f65-90ec-474c-b04e-e973de6a4047") + ) + (wire + (pts + (xy 40.64 53.34) (xy 45.72 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95776100-1955-404b-b7f1-a1a73101730f") + ) + (wire + (pts + (xy 85.09 55.88) (xy 101.6 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9643bb50-d437-43a0-aaa9-6fa922f60138") + ) + (wire + (pts + (xy 123.19 127) (xy 144.78 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9652a302-9965-4e41-b90f-798d847304b3") + ) + (wire + (pts + (xy 106.68 170.18) (xy 107.95 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "96f9c5ff-92d3-4bd3-969f-590f0a760f06") + ) + (wire + (pts + (xy 149.86 132.08) (xy 149.86 144.145) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98825335-58d1-4bec-bc37-1cfbd1d8c67c") + ) + (wire + (pts + (xy 52.07 113.03) (xy 68.58 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9889944f-b029-470d-843c-31d2be8c43d0") + ) + (wire + (pts + (xy 187.96 109.22) (xy 203.2 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a287aeb-1c97-40f2-abaa-fe8a0ec5fddb") + ) + (wire + (pts + (xy 160.02 76.2) (xy 160.02 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9add52ab-e73e-4d91-879f-7357f15f15d3") + ) + (wire + (pts + (xy 172.72 63.5) (xy 172.72 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b57c0f7-023c-4b9f-a444-542b154e3f47") + ) + (wire + (pts + (xy 229.87 139.7) (xy 241.3 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b7c240b-3b58-4aaa-b132-84cfd139293f") + ) + (wire + (pts + (xy 252.73 26.67) (xy 252.73 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b941760-aa41-4bda-a070-83a5e8da6461") + ) + (wire + (pts + (xy 40.64 40.64) (xy 50.8 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c5a75e0-d66a-4e19-8139-747b5a4c2a66") + ) + (wire + (pts + (xy 248.92 144.78) (xy 251.46 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d0f7be0-d24b-47fe-8d5f-201679ba63fd") + ) + (wire + (pts + (xy 50.8 90.17) (xy 68.58 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f20c051-d63d-4d45-a81c-3efc727b3379") + ) + (wire + (pts + (xy 35.56 90.17) (xy 50.8 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0ef95a9-8bea-46c6-ba6a-d6f9f64cea61") + ) + (wire + (pts + (xy 157.48 71.12) (xy 157.48 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a21450c8-f3ae-43eb-a9d5-11adce89c1f1") + ) + (wire + (pts +<<<<<<< HEAD + (xy 160.02 132.08) (xy 160.02 151.13) +======= + (xy 180.34 74.93) (xy 180.34 88.9) +>>>>>>> hardware-65percent + ) + (stroke + (width 0) + (type default) + ) +<<<<<<< HEAD + (uuid "a53cb74b-b460-44ad-b050-031ab179966a") +======= + (uuid "a57d5cf2-2916-462d-9d02-f6005455b75d") +>>>>>>> hardware-65percent + ) + (wire + (pts + (xy 170.18 74.93) (xy 170.18 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a59b5754-fe44-4ded-b72a-5d3f170d4dd5") + ) + (wire + (pts + (xy 187.96 127) (xy 203.2 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a7e4dd91-34c4-479b-bf4a-fbeb9b3e0947") + ) + (wire + (pts + (xy 190.5 34.29) (xy 196.85 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a840155e-eb43-4336-9b9f-4d7043121a95") + ) + (wire + (pts + (xy 232.41 26.67) (xy 232.41 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a956dacc-30a3-4321-8f8e-7e65a6d33b19") + ) + (wire + (pts + (xy 31.75 152.4) (xy 43.18 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af32b913-3839-4d06-89e1-085f5a905fbf") + ) + (wire + (pts + (xy 43.18 58.42) (xy 43.18 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0616a21-133c-4dcc-b84e-c6a97f8f594f") + ) + (wire + (pts + (xy 43.18 27.94) (xy 43.18 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b1529ae2-4d50-41f5-8da3-ac204b86c297") + ) + (wire + (pts + (xy 49.53 95.25) (xy 35.56 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2092ad6-1a2a-415f-a85c-1db6b6623de2") + ) + (wire + (pts + (xy 209.55 53.34) (xy 217.17 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b3ad80bf-f20b-41a4-b801-5df4f1839f82") + ) + (wire + (pts + (xy 96.52 116.84) (xy 96.52 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b68451e4-a557-4542-aa0c-d3c0a7b38b1c") + ) + (wire + (pts +<<<<<<< HEAD +======= + (xy 175.26 63.5) (xy 175.26 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b82c56aa-688c-40b5-b8b5-ff1b4a6b304f") + ) + (wire + (pts +>>>>>>> hardware-65percent + (xy 116.84 104.14) (xy 144.78 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b933b00a-6781-4161-9b4a-e03ca083faeb") + ) + (wire + (pts + (xy 222.25 99.06) (xy 231.14 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b94c4dc7-fb5a-4e0f-864e-aa71873f2c89") + ) + (wire + (pts + (xy 45.72 53.34) (xy 45.72 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9c450f2-9bfa-43df-bfd2-eb3d2d426964") + ) + (wire + (pts + (xy 223.52 138.43) (xy 223.52 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf7d254c-a01a-4771-88b7-b40f8c2c8707") + ) + (wire + (pts + (xy 35.56 107.95) (xy 49.53 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf84be26-9ac8-4f7b-a934-3a573d1ac936") + ) + (wire + (pts + (xy 40.64 35.56) (xy 58.42 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf86c109-adc6-49de-bf52-8b099c3cabb4") + ) + (wire + (pts + (xy 49.53 58.42) (xy 58.42 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0f477ad-c51b-46bd-8eea-028a65e67899") + ) + (wire + (pts + (xy 170.18 132.08) (xy 170.18 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c203776c-c323-46c4-b1d3-9d1c4656c4c4") + ) + (wire + (pts + (xy 237.49 26.67) (xy 237.49 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c238b4b9-d86f-41a6-9939-71a20ec018bd") + ) + (wire + (pts + (xy 68.58 30.48) (xy 45.72 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c42044bb-7b3d-4c02-bb19-c9ee4d2152db") + ) + (wire + (pts +<<<<<<< HEAD + (xy 180.34 74.93) (xy 180.34 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c666df65-3b72-4b72-bdec-cf6c8e58fe74") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 182.88 74.93) (xy 182.88 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c6c8c491-ec3c-4aa7-8018-934ea3784c23") + ) + (wire + (pts + (xy 113.03 116.84) (xy 113.03 115.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c8e765e4-9b92-4fad-9653-72b8c27944f7") + ) + (wire + (pts + (xy 165.1 34.29) (xy 158.75 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c93aa1a2-83c7-4424-8656-57a32df2a0e9") + ) + (wire + (pts + (xy 123.19 124.46) (xy 144.78 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb03fe9f-8875-4540-a775-8ca501103200") + ) + (wire + (pts + (xy 187.96 119.38) (xy 203.2 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb8969fd-f261-4ea2-bfef-da594ec8c031") + ) + (wire + (pts + (xy 187.96 116.84) (xy 203.2 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd5bcb8a-8fda-4879-96a4-e34d2e280aab") + ) + (wire + (pts + (xy 97.79 106.68) (xy 113.03 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3111b08-e3ad-431d-a491-9fe01dc68bcf") + ) + (wire + (pts + (xy 127 90.17) (xy 127 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d363afc7-a389-428b-a860-10b1cbcfd8af") + ) + (wire + (pts + (xy 116.84 170.18) (xy 116.84 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6c4dd86-7842-4e20-b395-8022679f2bfd") + ) + (wire + (pts + (xy 119.38 121.92) (xy 144.78 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d93267f2-2d03-4b7b-8e29-8f1c6cdf3db0") + ) + (wire + (pts + (xy 92.71 29.21) (xy 92.71 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dae93426-f60f-49f3-916b-5d850a0fa483") + ) + (wire + (pts + (xy 250.19 26.67) (xy 250.19 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd67b9d3-dcb4-4714-a1f8-1df5f6a7ccfa") + ) + (wire + (pts + (xy 50.8 45.72) (xy 50.8 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df9f4e8e-ee35-4c74-a8d7-4433c5a1304b") + ) + (wire + (pts + (xy 43.18 152.4) (xy 54.61 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dff176a0-3300-4c99-a3aa-b92ca49c0d57") + ) + (wire + (pts + (xy 48.26 38.1) (xy 48.26 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e1b4699a-232d-4700-aba8-bcf853a8c971") + ) + (wire + (pts + (xy 40.64 43.18) (xy 48.26 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3815b90-cda8-45b0-a3aa-01c821e46749") + ) + (wire + (pts + (xy 104.14 127) (xy 104.14 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3a1447c-2b80-4a91-b4b2-af48702ad911") + ) + (wire + (pts + (xy 31.75 160.02) (xy 43.18 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5127b5a-e94b-447a-87b1-b2a72c447fe0") + ) + (wire + (pts + (xy 54.61 160.02) (xy 66.04 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e64f4e58-1932-4a27-a689-dcdaff9c453f") + ) + (wire + (pts + (xy 248.92 139.7) (xy 251.46 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e71af07e-24f6-4607-b8b9-257544dfb5aa") + ) + (wire + (pts + (xy 180.34 132.08) (xy 180.34 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e77d66be-6cbf-45a6-a78e-010a8f3bd073") + ) + (wire + (pts + (xy 187.96 101.6) (xy 214.63 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea0d6efe-e41e-4854-a9b2-cc498ecd4559") + ) + (wire + (pts + (xy 147.32 132.08) (xy 147.32 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea30c5f2-fdc7-4854-b627-d57935e7ff95") + ) + (wire + (pts + (xy 166.37 60.96) (xy 166.37 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eaa69509-c231-43db-91d5-ea5ac01fffaa") + ) + (wire + (pts + (xy 177.8 41.91) (xy 177.8 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eac2031d-d945-4e04-aa30-8c7367b9c183") + ) + (wire + (pts + (xy 119.38 116.84) (xy 113.03 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ead3c704-ac61-4b09-aeed-d2cedb6b437a") + ) + (wire + (pts + (xy 262.89 26.67) (xy 262.89 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb6b5e7c-5dd8-4495-9ca9-d2ba986d3001") + ) + (wire + (pts + (xy 40.64 45.72) (xy 50.8 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec702bef-5889-450c-ac03-61deff6a9d14") + ) + (wire + (pts + (xy 92.71 30.48) (xy 92.71 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec8ce5c4-89a5-4ead-8a22-3b3f7c812d40") + ) + (wire + (pts + (xy 187.96 114.3) (xy 203.2 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f068bd3e-7618-4cb1-b357-1d5c2c6a400c") + ) + (wire + (pts + (xy 248.92 142.24) (xy 251.46 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f0733082-a5b6-4e44-a8da-8f0ee9b9eecd") + ) + (wire + (pts + (xy 245.11 26.67) (xy 245.11 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f084dd96-f988-42ba-8fa0-09fd926da3c6") + ) + (wire + (pts + (xy 116.84 97.79) (xy 116.84 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f134bcc4-4d57-4cd8-a1b2-4fe2f3604f8a") + ) + (wire + (pts +<<<<<<< HEAD +======= + (xy 241.3 111.76) (xy 237.49 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2d50c5d-23ff-4ca6-9c6b-30baf9349883") + ) + (wire + (pts +>>>>>>> hardware-65percent + (xy 222.25 101.6) (xy 231.14 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f37e29b4-3254-4a1b-bcbd-bfdfab2178e0") + ) + (wire + (pts + (xy 187.96 99.06) (xy 214.63 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f38eaf57-6f2d-42ce-ae55-52b23179a480") + ) + (wire + (pts + (xy 187.96 91.44) (xy 201.93 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3de37ac-79a4-432e-8b72-23af07c86468") + ) + (wire + (pts + (xy 52.07 113.03) (xy 35.56 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f562a574-0131-4a70-ba89-1af5498678c1") + ) + (wire + (pts + (xy 177.8 132.08) (xy 177.8 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f6636cd1-df89-4024-aee5-b014c358fbfb") + ) + (wire + (pts + (xy 52.07 97.79) (xy 52.07 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f664caaa-6156-40cc-a02a-6571d368a215") + ) + (wire + (pts + (xy 187.96 121.92) (xy 203.2 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f7bbc05e-208b-4916-9dee-edba1d06a38c") + ) + (wire + (pts + (xy 157.48 60.96) (xy 157.48 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc79c6ac-2bdc-4340-a428-641e42431876") + ) + (wire + (pts + (xy 177.8 74.93) (xy 177.8 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe432645-29fe-4f55-967f-c827e1b1b2b9") + ) + (wire + (pts + (xy 127 97.79) (xy 127 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fed75f8e-bc0f-4a62-8737-f6f71bb774c6") + ) + (wire + (pts + (xy 257.81 26.67) (xy 257.81 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffb4802f-20bc-4943-92cd-0bdee9542faf") + ) + (wire + (pts + (xy 105.41 91.44) (xy 105.41 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffd7b1eb-f0cb-4e45-bbcc-845c938910c9") + ) +<<<<<<< HEAD +======= + (label "COL13" + (at 165.1 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "0872e688-18d5-464b-b239-05b725809904") + ) +>>>>>>> hardware-65percent + (label "ROW5" + (at 167.64 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "0e3575f6-439b-4d0a-8d66-63ffe5b9a82f") + ) + (label "VDD" + (at 147.32 77.47 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1054b2ed-1342-4dda-a350-724877e8b849") + ) + (label "UART_TX_WEST" + (at 212.09 104.14 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "135e3e86-260c-4123-a29c-12df78031596") + ) + (label "D-" + (at 101.6 38.1 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1491677d-b6de-4782-8f1b-3412b5901f80") + ) +<<<<<<< HEAD +======= + (label "COL2" + (at 203.2 124.46 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "14d9996a-aa1d-461c-947b-ff3f45311543") + ) +>>>>>>> hardware-65percent + (label "UART_TX_NORTH" + (at 49.53 92.71 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "15ab73e8-a151-44d6-9f4e-c93e8cd0680e") + ) + (label "COL7" + (at 247.65 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1a741b36-5f5e-4bd0-ab79-047d4eb60e4c") + ) +<<<<<<< HEAD +======= + (label "COL11" + (at 177.8 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1bb7e52c-8660-41fe-b7b9-24d5679fd926") + ) +>>>>>>> hardware-65percent + (label "COL5" + (at 242.57 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1fc100fc-abc3-448f-82e1-8234efa092aa") + ) +<<<<<<< HEAD + (label "COL8" + (at 203.2 109.22 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "2120f686-1469-485c-a964-4af544d4c8a0") + ) +======= +>>>>>>> hardware-65percent + (label "UART_TX_SOUTH" + (at 53.34 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "238c0f40-805c-45ef-b9d9-f32048674026") + ) + (label "VSS" + (at 182.88 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "24f3dd47-e1e3-4f7f-8d03-05628870f1ec") + ) +<<<<<<< HEAD +======= + (label "UART_TX_NORTH" + (at 123.19 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2b2b9379-b6f0-4bcf-bddf-b2315719acaf") + ) +>>>>>>> hardware-65percent + (label "Place Near VDD Ports" + (at 41.91 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2bb4aae6-3cf2-49aa-87c1-180df30a6830") + ) +<<<<<<< HEAD + (label "COL12" + (at 203.2 119.38 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "2dd81f62-0ea1-48ba-94ce-6214aee431b5") + ) +======= +>>>>>>> hardware-65percent + (label "ROW1" + (at 177.8 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2df47b70-1930-4887-8317-8498f4292996") + ) +<<<<<<< HEAD + (label "COL1" + (at 160.02 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "35cf5703-b237-43e3-8def-1a83fcdd56a2") + ) +======= +>>>>>>> hardware-65percent + (label "NRST" + (at 229.87 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "377aec81-2f9d-439a-8ff8-8351613b5a76") + ) +<<<<<<< HEAD +======= + (label "COL6" + (at 203.2 114.3 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "38b93aeb-c3f7-4775-8c5d-f4fdd328edc5") + ) +>>>>>>> hardware-65percent + (label "SWO" + (at 170.18 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "393fc858-5f6b-4cf3-b96b-54423a182dd6") + ) + (label "VDD" + (at 185.42 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3bb57688-3b26-4654-b7b3-b2e87452539d") + ) +<<<<<<< HEAD + (label "COL7" + (at 182.88 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "40ac12a5-ccc3-4c63-8eaa-cd830bb4c50c") + ) +======= +>>>>>>> hardware-65percent + (label "VDD" + (at 139.7 73.66 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "41d1ade5-8210-4054-9cb5-676e258ad061") + ) + (label "COL3" +<<<<<<< HEAD + (at 165.1 76.2 270) +======= + (at 203.2 121.92 180) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) +<<<<<<< HEAD + (uuid "450f42af-3bab-4873-883e-859e675ee261") + ) + (label "UART_TX_NORTH" + (at 175.26 63.5 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "4908fc84-621c-47df-aa9c-5c6724d4e267") + ) + (label "ROT_TIMA" + (at 162.56 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "49a74743-1f19-4803-95ce-65fbcfcf3666") +======= + (uuid "4665b37a-1cc0-472f-9aaa-24e2ffcaec18") +>>>>>>> hardware-65percent + ) + (label "COL3" + (at 237.49 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "4aaa85ea-5d17-49e2-919b-b9dd10468d2d") + ) + (label "UART_RX_WEST" + (at 49.53 110.49 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "4f52174a-7166-4096-85f8-c4b3064c9d92") + ) +<<<<<<< HEAD +======= + (label "COL14" + (at 162.56 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "51b3d42b-59cf-4c8b-8004-acd7db548d6b") + ) +>>>>>>> hardware-65percent + (label "VDD" + (at 33.02 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "52f6274d-9319-425e-9856-6028f0c4375f") + ) +<<<<<<< HEAD + (label "COL6" + (at 180.34 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "55ef1033-52ad-4a4c-abb2-4a87f669e520") + ) +======= +>>>>>>> hardware-65percent + (label "COL4" + (at 240.03 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5631f58f-29f4-432f-9f2e-10f895402ee9") + ) + (label "D-" + (at 231.14 101.6 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5795c40c-5423-450b-aa2a-1bd4abcf5b2c") + ) +<<<<<<< HEAD + (label "COL9" + (at 203.2 111.76 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5972eccf-3778-4255-b912-a7f3aa8a6514") + ) +======= +>>>>>>> hardware-65percent + (label "D+" + (at 231.14 99.06 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5a0b3c86-9793-44d1-a2d8-9600402ced23") + ) +<<<<<<< HEAD + (label "COL4" + (at 167.64 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5a35616b-57aa-45a3-9a4c-738dea73386b") + ) +======= +>>>>>>> hardware-65percent + (label "NRST" + (at 133.35 106.68 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5d2adaf2-8f8b-4999-9547-ccedb6613e09") + ) +<<<<<<< HEAD + (label "COL15" + (at 203.2 127 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5e32798c-498a-4ed5-abb2-ce1d9bb0940a") + ) +======= +>>>>>>> hardware-65percent + (label "SWO" + (at 229.87 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "5ecab8f8-63a0-4572-9b85-28a525a98633") + ) +<<<<<<< HEAD + (label "UART_RX_SOUTH" + (at 147.32 154.94 90) +======= + (label "UART_RX_NORTH" + (at 147.32 139.7 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6122bc97-e07e-4adf-89b2-180f85ee6966") + ) + (label "UART_RX_SOUTH" + (at 172.72 78.74 90) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) +<<<<<<< HEAD + (uuid "64a8185d-c8c9-437e-aa1e-0840591f81c7") +======= + (uuid "63fc0654-be18-4f2a-a55b-53555edbe2c2") +>>>>>>> hardware-65percent + ) + (label "UART_TX_WEST" + (at 49.53 107.95 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6a08174c-d5da-4dc2-99f0-c0d2873ea18b") + ) + (label "COL10" +<<<<<<< HEAD +======= + (at 180.34 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6a58c484-2ea3-413b-8615-ba2811c350c7") + ) + (label "COL12" + (at 167.64 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6b5fc549-d58c-4de2-b4bb-118b4976d050") + ) + (label "COL10" +>>>>>>> hardware-65percent + (at 255.27 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6d093d61-7183-48e7-a44b-e7ee317c60ce") + ) + (label "COL1" + (at 232.41 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "7063eed6-7ae8-40d0-a4eb-cf4cdfda5903") + ) + (label "Place near 5v source" + (at 167.64 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7399cb9d-35cd-4baa-8fc3-1540e41d498b") + ) + (label "UART_RX_EAST" + (at 53.34 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "76e1a539-de27-4ae8-b7bf-103892a3248f") + ) + (label "D+" + (at 101.6 55.88 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "77a3d361-47a0-4b74-9b05-707429d9cf5a") + ) +<<<<<<< HEAD + (label "COL10" + (at 203.2 114.3 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "77a693a8-cbb0-4a16-9ffa-ff644b1ef66d") + ) +======= +>>>>>>> hardware-65percent + (label "VSS" + (at 149.86 77.47 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "780166be-d300-4885-bbb9-b8b93658a286") + ) +<<<<<<< HEAD + (label "COL11" + (at 203.2 116.84 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "7ca58e08-c365-4691-8526-02e2f709f173") + ) +======= +>>>>>>> hardware-65percent + (label "VSS" + (at 149.86 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7df3f09f-d99f-4825-93d4-dbec7ae2c8e3") + ) + (label "ROW3" + (at 172.72 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7fb03eb9-c3d7-4180-8af3-ef370fe9a303") + ) + (label "ROW5" + (at 209.55 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8348d23a-0a8c-4a80-a092-2c011e4ecf26") + ) +<<<<<<< HEAD + (label "COL13" + (at 203.2 121.92 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "861b9f69-5164-46d8-ad69-517a598a79a4") + ) +======= +>>>>>>> hardware-65percent + (label "VSS" + (at 201.93 93.98 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "88af95dc-0f61-4228-9028-891eb6470a60") + ) + (label "ROW4" + (at 170.18 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "88fc4392-e3af-49a8-8dc2-8937835963c6") + ) + (label "ROW2" + (at 209.55 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8ad74ae9-1513-46cb-b485-847d17f64d1b") + ) + (label "UART_RX_EAST" + (at 123.19 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8b6ebbc2-aa43-45a0-bce1-078bb08c7e1b") + ) + (label "COL15" + (at 267.97 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "8b857264-1997-4c08-9752-35456e821526") + ) + (label "RGB_DATAIN" + (at 157.48 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8bd4b99c-2cb7-4e42-a63a-d77ead0034b9") + ) +<<<<<<< HEAD + (label "COL2" + (at 162.56 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "8d5ea51c-3018-499a-9feb-77558fc69925") + ) +======= +>>>>>>> hardware-65percent + (label "Place near USB port" + (at 92.71 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8e2d99a6-9b3e-4901-b824-804d2070fbd2") + ) + (label "COL9" + (at 252.73 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "92086348-c6ef-454f-890c-11a873ceb43a") + ) +<<<<<<< HEAD + (label "COL5" + (at 177.8 74.93 270) +======= + (label "COL4" + (at 203.2 119.38 180) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) +<<<<<<< HEAD + (uuid "959bf094-985a-4d26-85c6-29f58b765d35") +======= + (uuid "95fa2f23-8b81-47b7-bccb-9760f7b22390") + ) + (label "COL9" + (at 182.88 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "96ffef80-1b7b-4d2b-a1f7-1b8580e75eed") +>>>>>>> hardware-65percent + ) + (label "Place Near VBAT" + (at 116.84 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "97e91aa4-086a-4858-96f5-c1a15bd6f538") + ) + (label "VDD" + (at 152.4 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "98066d23-6bbb-440b-b346-e60179dceea1") + ) +<<<<<<< HEAD +======= + (label "COL15" + (at 160.02 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "996c67c9-193a-4c61-9328-9fc555becd3d") + ) + (label "RGB_DATAIN" + (at 237.49 113.03 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "9fa75837-02a6-4f2b-8b4a-bf84097a30c4") + ) + (label "UART_TX_SOUTH" + (at 175.26 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a21ae7e0-711c-45a6-9e0f-0ffa2e2613b5") + ) +>>>>>>> hardware-65percent + (label "UART_RX_WEST" + (at 212.09 106.68 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "a65b0625-f87d-4d3e-b3ec-fefb39333313") + ) + (label "JTCLK" + (at 229.87 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a709b3fd-11ff-4d03-b13c-ebedc49d9cef") + ) + (label "UART_RX_NORTH" + (at 49.53 95.25 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "a8b36eb9-36c3-4624-82b4-41d43faf2862") + ) + (label "JTMS" + (at 201.93 96.52 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "acaae2b4-f10d-4976-875a-301fe9e71b70") + ) + (label "UART_TX_EAST" + (at 53.34 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ae8d8e37-f38f-41fe-903a-1eb9be3bd21d") + ) +<<<<<<< HEAD +======= + (label "COL5" + (at 203.2 116.84 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "aecd807f-0dae-4de9-9f2a-7205af2df165") + ) +>>>>>>> hardware-65percent + (label "JTMS" + (at 229.87 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b1459e8f-23e1-418c-abf2-ccad8c3f1fe5") + ) +<<<<<<< HEAD + (label "UART_TX_SOUTH" + (at 123.19 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b1ac5c45-29f6-49be-86d9-d334cdf2d7b7") + ) +======= +>>>>>>> hardware-65percent + (label "COL6" + (at 245.11 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "b6dc15c4-5294-4338-988f-8c3f870110f4") + ) +<<<<<<< HEAD + (label "COL14" + (at 203.2 124.46 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "bb2ad147-d245-4431-84b9-4648d501513f") + ) +======= +>>>>>>> hardware-65percent + (label "UART_TX_EAST" + (at 123.19 127 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "bf1851e9-b9a8-4880-a7b6-f35f2d00cfd9") + ) + (label "COL11" + (at 257.81 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "bf953326-f2e8-4e46-9ecf-e9fe4295b6b1") + ) +<<<<<<< HEAD +======= + (label "COL8" + (at 203.2 109.22 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c1c2ccbf-4c9e-486b-9a84-3f54fb5a6e01") + ) +>>>>>>> hardware-65percent + (label "COL2" + (at 234.95 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c2a7c331-a5ed-4a85-82c2-491255966a45") + ) + (label "ROW3" + (at 209.55 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c438aa98-65d2-4007-8f35-dafed4b2a3fe") + ) + (label "COL14" + (at 265.43 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c53d8f3f-c718-483b-bc66-4972501a0ded") + ) + (label "COL12" + (at 260.35 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c6225080-537c-4d55-b636-d4a13e3f4f1d") + ) + (label "JTCLK" + (at 185.42 73.66 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "d2b99126-8045-457a-9dd5-be1ae59ee2fa") + ) + (label "ROW1" + (at 209.55 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d312f0f4-cc79-473f-a2ed-836b5642b4a2") + ) +<<<<<<< HEAD +======= + (label "COL1" + (at 203.2 127 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "d4e6b922-25eb-4849-9db9-6f6185ed1afd") + ) +>>>>>>> hardware-65percent + (label "ROW4" + (at 209.55 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d75df9b0-4438-4569-8d96-9e0ace9bede8") + ) + (label "ROW2" + (at 175.26 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "da058996-2170-4cf5-ab0a-eef5e288bffa") + ) + (label "COL13" + (at 262.89 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "dfbee201-609e-420a-8bd4-bc98bce299e1") + ) +<<<<<<< HEAD +======= + (label "COL7" + (at 203.2 111.76 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "e443e11e-99a4-44c1-9116-18729e86e186") + ) +>>>>>>> hardware-65percent + (label "VDD" + (at 201.93 91.44 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "e9b26d3d-3813-4e99-8ea8-af0648067087") + ) +<<<<<<< HEAD + (label "ROT_SW" + (at 154.94 147.32 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ecce62bc-b4cc-48bb-a6e3-988ce1c4f4c4") + ) +======= +>>>>>>> hardware-65percent + (label "UART_RX_SOUTH" + (at 53.34 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ef17a05a-3c4b-4a77-a598-a5f8ad4599a9") + ) +<<<<<<< HEAD + (label "UART_RX_NORTH" + (at 172.72 63.5 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "f0af64ee-d378-41f3-842f-24d5ad4f75d3") + ) +======= +>>>>>>> hardware-65percent + (label "COL8" + (at 250.19 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "f325fd11-511d-4af8-8e04-8af1e81ceee5") + ) +<<<<<<< HEAD + (label "ROT_TIMB" + (at 160.02 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "fe355360-6bef-43f4-a60d-7c9f0aed2700") + ) +======= +>>>>>>> hardware-65percent + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 149.86 144.145 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "12142d74-3d2e-4713-9447-228a4a59b31b") + (property "Reference" "#PWR013" + (at 149.86 150.495 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 149.86 149.225 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 149.86 144.145 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 149.86 144.145 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 149.86 144.145 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "79c1e8f8-ac62-4d68-b7d9-4530a76b20fd") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 73.66 107.95 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "16dff95b-3e36-4af3-b88b-15fb8adc8e2f") + (property "Reference" "East1" + (at 79.248 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn_01x04" + (at 76.2 110.4899 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 73.66 100.965 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 73.66 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 73.66 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 70.485 122.555 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 71.12 117.348 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 71.12 118.872 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "41d3d594-2c33-4367-8359-1b31ee9d9e0e") + ) + (pin "2" + (uuid "b9ea89f1-323d-4571-9eb6-093ad77c06ee") + ) + (pin "3" + (uuid "551282d5-5991-4cb6-b066-7718563ef0bf") + ) + (pin "4" + (uuid "2460e906-92ce-496f-b65b-e5783cab0360") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "East1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 66.04 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "260e3606-a354-4351-a844-1997c309f36f") + (property "Reference" "C6" + (at 60.325 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 60.325 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 67.0052 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 66.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 66.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b88bb4b7-8467-4e01-b0d2-7fbfcd272840") + ) + (pin "1" + (uuid "fba68482-11cf-418d-b65a-ad61b36feb9f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 52.07 118.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "28aaff08-a29a-4a24-ac7d-db733f758a5e") + (property "Reference" "#PWR028" + (at 52.07 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 52.07 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 52.07 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 52.07 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 52.07 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "88c2da29-dedb-4ce3-af23-c19dae3a8d2a") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR028") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 109.22 76.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2c77678b-8e1f-43de-9ae0-b5fb80b5d1ac") + (property "Reference" "#PWR02" + (at 109.22 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 109.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 109.22 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 109.22 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bded81a6-5439-4584-9cec-c42bf66caf54") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "stm32f446ret6:STM32F446RET6") + (at 144.78 88.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "31831253-77ba-4c6e-9363-32c75e9e329b") + (property "Reference" "U1" + (at 193.04 85.0198 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 193.04 87.5598 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "footprints:LQFP64-10x10mm" + (at 144.78 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 144.78 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 144.78 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "28" + (uuid "0886e1c2-3ce9-47e5-86c6-0f285bd776e5") + ) + (pin "56" + (uuid "20a27dd1-d910-4162-aef4-d2e08693b946") + ) + (pin "47" + (uuid "d09717ee-1aed-46b0-8158-7b026c0ada04") + ) + (pin "14" + (uuid "84b0538f-607e-4d0d-9fa8-926b1ea240ff") + ) + (pin "31" + (uuid "8b45ff39-69a8-45b5-97b2-6463c65a3696") + ) + (pin "64" + (uuid "1bce4abd-3e9b-4533-aac9-cffa72738c1b") + ) + (pin "35" + (uuid "235492d7-f22e-4ea4-9887-1910533d3793") + ) + (pin "39" + (uuid "07655dc7-4bde-40e4-ac89-69b63ed018e3") + ) + (pin "41" + (uuid "32984301-ee58-4d34-966d-88daef772143") + ) + (pin "37" + (uuid "edff6ede-75da-4306-8a75-c200cfd6eaa0") + ) + (pin "17" + (uuid "920831fe-461b-4699-95f5-6c4134d14979") + ) + (pin "61" + (uuid "79c24d0f-576f-41eb-9c74-eb83570833f1") + ) + (pin "44" + (uuid "c5256497-ef95-41c1-a6dc-8f776448042f") + ) + (pin "42" + (uuid "b23a8609-fd55-48ad-b6ff-aa70929a2e71") + ) + (pin "58" + (uuid "0ec6a147-5c7e-4392-b48a-52ad9cc58e1d") + ) + (pin "3" + (uuid "3455f583-b715-48f2-8fd1-67ab90b6ee5f") + ) + (pin "4" + (uuid "1cd82aee-006f-40c1-90c6-f6b046ff3b6b") + ) + (pin "6" + (uuid "ebe87469-e99d-4253-b7fb-c316a3aeefd6") + ) + (pin "33" + (uuid "5604e812-811d-4f56-b6ed-13e9c98ca811") + ) + (pin "52" + (uuid "63989350-b9f7-4686-837e-0632988867bc") + ) + (pin "16" + (uuid "0f03b811-92cd-4b3a-98ad-434e0517d0b3") + ) + (pin "19" + (uuid "862ecf73-59e8-476e-9b1e-18ccd0373e59") + ) + (pin "15" + (uuid "d7d7a630-c872-4a7a-a052-78958e4b3d4c") + ) + (pin "27" + (uuid "f23bcd51-6fbd-4172-a344-de5618516543") + ) + (pin "45" + (uuid "cc8d190b-da82-4e03-829b-61cb952ddb35") + ) + (pin "54" + (uuid "45419dc1-1846-4b15-8085-60318c5d52cd") + ) + (pin "5" + (uuid "7d3a1d78-2e56-4aba-9ad9-1dfb2935ff3e") + ) + (pin "22" + (uuid "30ba65c9-4009-4f0c-aa96-58e9a7a3e053") + ) + (pin "32" + (uuid "a632e59d-ae7f-4350-bebe-0123c4c0ad17") + ) + (pin "29" + (uuid "6358c15a-584d-4013-96fe-c8960f71f2e8") + ) + (pin "49" + (uuid "5fe23252-a936-43e2-80e8-0d9cc4e3e8c7") + ) + (pin "36" + (uuid "723f0728-a816-4106-8cc8-79a115e06323") + ) + (pin "10" + (uuid "30883165-5d7c-43cd-900c-d10b897a1ab2") + ) + (pin "21" + (uuid "a96c1813-17b5-4c46-8379-d84aa746bc90") + ) + (pin "50" + (uuid "51f78068-852f-4ddb-8f3c-e7a1091068e2") + ) + (pin "43" + (uuid "cfafc677-c626-44be-b44a-62426b0dc726") + ) + (pin "25" + (uuid "40e15d3d-c577-4ee1-8dbc-0d26075063d0") + ) + (pin "18" + (uuid "6df42964-3fdc-4b5b-9d9e-bf61c067f092") + ) + (pin "63" + (uuid "5c191ece-be23-4144-ac2d-a6848f98342e") + ) + (pin "57" + (uuid "764d79ea-2d55-4ba4-b1db-9401b46e1d85") + ) + (pin "55" + (uuid "23a866ab-8709-4969-b18f-fe0613aed4e5") + ) + (pin "60" + (uuid "7d012868-a716-412a-83f1-067b33448789") + ) + (pin "59" + (uuid "d46f9490-ec55-496c-962e-bd35bb040115") + ) + (pin "38" + (uuid "a7851fa2-bc79-4c50-acd6-02fe8d86fa5b") + ) + (pin "51" + (uuid "7a65ae2d-583b-410c-b973-ba1f6df9e160") + ) + (pin "26" + (uuid "3d4cb577-6d99-4470-b559-2dd622aac9ba") + ) + (pin "53" + (uuid "f56c7708-5f27-46fd-bc0b-e03968931698") + ) + (pin "46" + (uuid "5f2def18-53df-4421-b01f-456d9a467ea9") + ) + (pin "2" + (uuid "78577e45-40a6-49c2-ac0c-7dcf40cb21cd") + ) + (pin "12" + (uuid "27389f66-ca3b-43bd-b08f-191429db1f5b") + ) + (pin "7" + (uuid "a90ee11e-33d7-4788-9692-030d14bdf9cd") + ) + (pin "62" + (uuid "1ad8762d-34b5-4230-8437-34eda152d3bd") + ) + (pin "30" + (uuid "517a2950-a2ac-4d9e-9b6d-3267103ba3f4") + ) + (pin "40" + (uuid "890d5658-68c2-4050-ba25-0c99b39796cc") + ) + (pin "24" + (uuid "d53edb8c-64c4-4ad2-b2e8-f4b87eb7a13d") + ) + (pin "20" + (uuid "b61b658c-d66f-4ff1-855b-1a7eb150bbe0") + ) + (pin "23" + (uuid "96acca93-1232-452a-b115-1199bc7ea978") + ) + (pin "48" + (uuid "4a02a6e1-a599-4925-8fbc-e7615cbf40a6") + ) + (pin "1" + (uuid "8d16c66f-66e1-4192-8c34-f73f2720c510") + ) + (pin "11" + (uuid "acd903a3-4cbb-4eab-90ca-7be92d2a28f8") + ) + (pin "34" + (uuid "49d3cc52-c998-46b8-964f-ec515615073a") + ) + (pin "8" + (uuid "28a83762-9718-4da2-aaeb-d6d1942e8bee") + ) + (pin "9" + (uuid "0b6f30a8-4e8e-4409-82ef-00e7e36942e7") + ) + (pin "13" + (uuid "918ec7cf-b2b8-472a-bab3-6d9bae41f892") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 190.5 38.1 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "35f94759-1894-4596-badb-3697130513d4") + (property "Reference" "C8" + (at 195.326 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uF" + (at 195.326 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 189.5348 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 190.5 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 190.5 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "50e79932-a377-4ca0-bcf1-45b87e94efc9") + ) + (pin "1" + (uuid "d398b287-c408-45b3-9888-e8ce471e6e8f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 116.84 172.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "362e8ab3-80aa-4833-9980-401806e826a4") + (property "Reference" "#PWR024" + (at 116.84 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "AGND" + (at 116.84 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 116.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 116.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 116.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6d353520-d3c5-4dc1-8dbf-e569cd3072ae") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR024") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 30.48 95.25 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "38beb260-5ceb-4b19-afa7-0dbaab81122b") + (property "Reference" "North1" + (at 22.098 92.202 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 22.098 94.742 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 30.48 102.235 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 30.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 30.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 33.655 80.645 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 33.02 85.852 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 33.02 84.328 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "d38dffee-7776-49d0-9698-44ef3d3ba56a") + ) + (pin "2" + (uuid "293e4a08-e99f-4d35-a342-3d56e0ad1321") + ) + (pin "3" + (uuid "7029ed19-77dd-46f6-ae92-4a94d57fd405") + ) + (pin "4" + (uuid "b427cede-7495-4e46-95bf-b517dd7e73d6") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "North1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_SL_Devices:Push_Button") + (at 119.38 111.76 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3cd8ba19-3dca-4432-8dd9-49896aa80d3e") + (property "Reference" "SW2" + (at 123.19 110.4899 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Push_Button" + (at 123.19 113.0299 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-various:SW_SPST_SKQG_WithStem" + (at 116.205 111.633 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 119.38 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Common 6mmx6mm Push Button" + (at 119.38 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f1a272e7-4e0d-4b33-a06c-45468a5183c5") + ) + (pin "2" + (uuid "11cefee7-7380-400c-8503-c20b77cd8203") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "SW2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 127 93.98 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3cf6d79a-8b3d-4cf7-a145-285fd4bdd59f") + (property "Reference" "C1" + (at 132.08 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "20pF" + (at 132.08 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 126.0348 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 127 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 127 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fe9b3cee-e1f9-414c-8848-237d3bdce510") + ) + (pin "1" + (uuid "80ae2b43-5592-4ef5-8d35-e6280ff59a46") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Diode:D_Generic") + (at 72.39 30.48 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3e4adb9d-795b-4ed4-9421-13dd684d8460") + (property "Reference" "D2" + (at 72.39 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAT60JFILM" + (at 72.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-323" + (at 72.39 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 72.39 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Diode" + (at 72.39 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "801a8524-a976-429e-8e91-b4b4fea7e2cd") + ) + (pin "2" + (uuid "dbdbdea8-a82f-43e6-9632-f47e89bda55f") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "D2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Device_AKL:Ferrite_Bead") + (at 119.38 125.73 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "419d9c4f-4ab7-4264-9f26-8a0424a1c835") + (property "Reference" "FB1" + (at 119.38 131.572 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Ferrite_Bead" + (at 119.38 134.112 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Fuse_AKL:Fuse_0805_2012Metric_Pad1.15x1.40mm_BigPads" + (at 122.682 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 125.73 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Ferrite bead, Alternate KiCAD Library" + (at 119.38 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "71ba895c-6490-4903-b2e6-9070ebf6016d") + ) + (pin "2" + (uuid "ab18a28b-d1b5-4a66-a49f-04fd403c2bb8") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "FB1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 43.18 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "472bce0d-3313-47ec-8030-87884d514fd8") + (property "Reference" "#PWR03" + (at 43.18 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 43.18 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 43.18 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "190831c2-f4ad-44fd-b601-308694111fa4") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 196.85 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4be478fe-4108-4302-9a42-ffdb13f89941") + (property "Reference" "#PWR010" + (at 196.85 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 196.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 196.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 196.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 196.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1cce0eb6-bcc5-46d4-b03a-61ad7dd38625") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 49.53 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "55fe11de-2a05-4ff1-bc3a-63c075a9f29d") + (property "Reference" "R1" + (at 52.07 53.3399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "5.1k" + (at 52.07 55.8799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 49.53 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 49.53 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 49.53 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fcf19629-2d07-41cc-8961-b8b6f113a170") + ) + (pin "1" + (uuid "71fb46c3-1dd1-40b0-be6f-1e3a2a516edc") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 139.7 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5c57828a-36bc-4da4-bfd6-d3d5666e7619") + (property "Reference" "R7" + (at 240.03 138.43 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 240.03 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 233.68 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fddf0490-81fa-47e8-b311-7bd1c5bd7568") + ) + (pin "1" + (uuid "9b9baa3f-95fc-4efc-b148-efc0f2d587a1") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 43.18 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5d7500da-bd2b-4c6a-9047-3e2d6a3165ca") + (property "Reference" "C4" + (at 37.465 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 37.465 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 44.1452 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "db413f08-6778-4d6e-8c37-2d8f0ae6e0eb") + ) + (pin "1" + (uuid "3253ccbb-4b82-4fb1-b57c-20f27bea2695") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 180.34 149.86 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "68cc06c9-d019-47d1-bae7-2856c48d1f53") + (property "Reference" "C9" + (at 185.166 148.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "4.7uF" + (at 185.166 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 179.3748 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 180.34 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 180.34 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "14ed719e-0199-4560-899e-26a8b5f90b3c") + ) + (pin "1" + (uuid "fcc00765-336f-471e-bd85-81a28ac8c9c4") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 31.75 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6ab32cb3-2df6-4ff9-a513-85667e0ccc25") + (property "Reference" "#PWR04" + (at 31.75 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 31.75 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 31.75 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 31.75 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c9fbff55-8bfc-4e14-a511-caa78e56c9e3") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 54.61 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6ac435e0-7961-4dbe-9c30-dbf9204a8e02") + (property "Reference" "C5" + (at 48.895 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 48.895 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 55.5752 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 54.61 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 54.61 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "aeb57fe7-abcc-4bef-a163-85f815f24fdb") + ) + (pin "1" + (uuid "b3d84c90-5579-43bf-a217-ed033748ed83") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 116.84 93.98 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6bbda6bc-f811-45ca-81a4-9ccc00f06fab") + (property "Reference" "C2" + (at 111.6965 95.5675 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "20pF" + (at 111.6965 93.0275 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 115.8748 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 116.84 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 116.84 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "05be0e56-3163-4446-a5c2-631c895f5066") + ) + (pin "1" + (uuid "27962fae-02aa-4a42-9af1-0aa90d750a38") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GNDA") + (at 104.14 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6eb9f6f2-1815-4dc0-9f82-2e8e6261fe57") + (property "Reference" "#PWR016" + (at 104.14 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "AGND" + (at 101.854 131.572 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 104.14 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 104.14 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "(analog) ground power-flag symbol" + (at 104.14 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "48137a00-e2b8-4ca6-a52c-fb6939565ae0") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 105.41 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "73155beb-873a-4b21-9ec3-d28d94562dcc") + (property "Reference" "#PWR05" + (at 105.41 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 105.41 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 105.41 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 105.41 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 105.41 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e4e5a564-f2c2-4e3b-b232-7a1559422a56") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 92.71 29.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7518ced7-be4e-49d5-920d-9ae3234447d4") + (property "Reference" "#PWR015" + (at 92.71 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 92.71 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 92.71 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 92.71 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 92.71 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9faabb2c-473a-4f88-b5e1-439a05f0c392") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Regulator:LD1117-3.3V-SOT223") + (at 177.8 35.56 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "780e4915-82a4-4658-81f3-960aa1d9fc82") + (property "Reference" "IC1" + (at 177.8 26.67 0) + (effects + (font + (size 1.143 1.143) + ) + ) + ) + (property "Value" "LD1117-3.3V-SOT223" + (at 177.8 29.21 0) + (effects + (font + (size 1.143 1.143) + ) + ) + ) + (property "Footprint" "PCM_4ms_Package_SOT:SOT223" + (at 177.8 28.575 0) + (effects + (font + (size 0.508 0.508) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" + (at 177.8 34.29 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" + (at 177.8 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Manufacturer" "STMicroelectronics" + (at 177.8 45.085 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "LD1117S33CTR" + (at 177.8 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "3" + (uuid "d044b8da-f579-430a-9657-f3f038538a7b") + ) + (pin "2" + (uuid "16ad427b-cb27-4545-9cc3-8033a32817ba") + ) + (pin "1" + (uuid "d41a2627-4fe9-4d1e-a9b3-47c762eac2b6") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "IC1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 218.44 99.06 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7cafd78e-827b-4512-9029-08dc37727121") + (property "Reference" "R4" + (at 218.44 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 218.44 95.25 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 207.01 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 218.44 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 218.44 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e4eb200f-2ca3-456f-937c-8b45571e4b5b") + ) + (pin "1" + (uuid "ed5c6058-ddbc-4020-9a26-741d7bbe10ba") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 142.24 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7efd55f9-94bc-4e0f-acd8-78533ca71252") + (property "Reference" "R8" + (at 250.19 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 250.19 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 256.54 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d5ef4ec7-b7be-43c2-bc23-5aa94f1c4be8") + ) + (pin "1" + (uuid "43b4bfd6-e642-41dd-bda6-169be25de336") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 134.62 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "870bee74-1b94-44bc-97d7-e29667be0724") + (property "Reference" "R6" + (at 240.03 133.35 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 240.03 135.89 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 233.68 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bf050548-5846-4278-93f6-31257dca583a") + ) + (pin "1" + (uuid "149b9b0f-213e-4e91-a664-426d638a1e7f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 180.34 153.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "89eaf3be-6a53-4d52-875d-0e85769bf269") + (property "Reference" "#PWR011" + (at 180.34 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 180.34 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 180.34 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 180.34 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 180.34 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "abe82d7c-d4b6-48fe-bf15-9070a3c2d7cd") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 31.75 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b2a8a82-737e-4e1c-b010-75e324eaa549") + (property "Reference" "C3" + (at 26.035 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 26.035 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 32.7152 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 31.75 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 31.75 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d8926d9e-5d64-4c07-b6b0-35e4f57fcfa6") + ) + (pin "1" + (uuid "f175dcfe-b8d2-4502-bfc9-d7f18c809352") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_SL_Devices:Crystal_8MHz") + (at 121.92 100.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8f6ee047-3b69-4415-a3d3-f3f35ce3c89b") + (property "Reference" "Y1" + (at 123.19 96.52 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "8MHz" + (at 120.65 96.52 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Crystal_AKL:Crystal_HC52-U_Vertical" + (at 121.92 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 121.92 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "8Mz Crystal" + (at 121.92 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "af9c1162-fb38-42a3-a395-46614193d10a") + ) + (pin "1" + (uuid "823ef913-9ee3-4774-92d2-46dd24c44b3b") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "Y1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 31.75 163.83 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "90bad0bd-de9f-44f0-87ad-a563bae0150b") + (property "Reference" "#PWR012" + (at 31.75 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 31.75 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 31.75 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 31.75 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "00b9aaf5-3e0f-47a6-a021-e46ee028ed4d") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 124.46 73.66 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "94a0fdd0-56a6-4942-8589-01a86c805627") + (property "Reference" "C10" + (at 124.46 66.802 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1uF" + (at 124.46 69.342 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 120.65 74.6252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 124.46 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 124.46 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3b5dde54-3bc5-4edc-86c7-1c727e8a77b9") + ) + (pin "1" + (uuid "e7e9a3f3-48b1-4d42-b0fe-a065c5886e52") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 73.66 92.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9676fbe1-cd81-4f09-9a64-1e08ed9b6d67") + (property "Reference" "South1" + (at 81.788 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 81.788 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 73.66 85.725 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 73.66 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 73.66 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 70.485 107.315 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 71.12 102.108 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 71.12 103.632 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "16ac9726-ccc1-410d-afbd-9bd5e6a9f31a") + ) + (pin "2" + (uuid "c6ddf6e6-ab14-4c9c-8fbf-e193a984b2ff") + ) + (pin "3" + (uuid "c739ac0b-2320-49e6-b465-0e5ea1e2a08e") + ) + (pin "4" + (uuid "7f3eac63-89fc-4252-a8da-30ee8e024666") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "South1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 177.8 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "99dee30c-837e-40d2-bd1f-9b659acdfebe") + (property "Reference" "#PWR06" + (at 177.8 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 177.8 49.784 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 177.8 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 177.8 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cf037296-f441-414f-81c6-67ed41e4c8e7") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 218.44 101.6 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9a64bac4-da04-48a9-9702-7209f655d06c") + (property "Reference" "R3" + (at 218.44 107.95 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 218.44 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 229.87 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 218.44 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 218.44 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5f16db44-08ec-478a-9923-725cc54747da") + ) + (pin "1" + (uuid "34ffee46-b723-49a0-8a33-221097200bec") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 144.78 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9c5f0493-d680-4847-8e64-3696158e4f7e") + (property "Reference" "R9" + (at 240.03 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 240.03 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 233.68 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d6ec1b2f-dd19-47dd-b03f-ff465346c392") + ) + (pin "1" + (uuid "fab710de-11b3-4ebf-9a23-5a94ae533382") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 165.1 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "acdb7e2a-dbdd-410b-b924-7a3e541f44dd") + (property "Reference" "C7" + (at 160.528 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1uF" + (at 160.528 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 166.0652 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 165.1 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "890c133e-55f2-4c59-adbf-185ae549f7ce") + ) + (pin "1" + (uuid "3bf7b668-3d45-4cb8-b876-3ab4b41e0515") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x06") + (at 256.54 137.16 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b0e5479b-55c8-4df5-bbc5-a0d68647dbd2") + (property "Reference" "J1" + (at 259.08 137.1599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn_01x06" + (at 259.08 139.6999 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Horizontal" + (at 256.54 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 256.54 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 256.54 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 254.635 153.035 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 254 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0601FBV0T" + (at 254.635 151.765 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "6" + (uuid "16dc203b-069a-4275-940e-9947482a9079") + ) + (pin "1" + (uuid "8816f601-baf3-4d75-b27c-1e9d6655cbfb") + ) + (pin "3" + (uuid "d0d1033b-d596-445a-9ce2-aed8b4c72d36") + ) + (pin "4" + (uuid "ac497e7a-422f-41f2-8705-75924a98375f") + ) + (pin "5" + (uuid "69100a82-de14-4456-b0f0-7036b3b5d7d2") + ) + (pin "2" + (uuid "a307c3c5-6163-4f29-b7bd-0b11191e34dc") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 50.8 85.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3581a19-1bf1-4bc5-a70d-1256ab664927") + (property "Reference" "#PWR025" + (at 50.8 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 53.594 83.566 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 50.8 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 50.8 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 50.8 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8d84c140-161f-4806-a798-000c2e6dab39") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR025") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 106.68 172.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b3793324-87be-425d-8b78-63f999e9e56c") + (property "Reference" "#PWR023" + (at 106.68 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 106.68 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 106.68 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 106.68 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 106.68 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ab7ed32e-61e0-4c98-a559-e8869e0819e1") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR023") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 96.52 118.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3d40ac4-8daa-4a7a-ba11-9a68212fd759") + (property "Reference" "#PWR020" + (at 96.52 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 96.52 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1c7ff4c0-7e81-4773-ab3b-110402d7ecd6") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR020") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 134.62 68.58 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b64cbf88-e11a-40de-8ab0-7220c5c7fbca") + (property "Reference" "#PWR01" + (at 134.62 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 134.62 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 134.62 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 134.62 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 134.62 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "86679c50-090c-4490-98c1-13e5ab52111c") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 157.48 67.31 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bb837909-857a-4e99-a0d4-4f703a793296") + (property "Reference" "R5" + (at 160.782 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 160.782 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 157.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 157.48 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7800df85-1edc-4e8c-ae00-81f05b8e4846") + ) + (pin "1" + (uuid "3251e7d5-7480-4e46-b027-2dc5836d003f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_TVS_AKL:PRTR5V0U2X") + (at 85.09 46.99 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c7c4756e-a5bf-4567-914d-57c2ffef1bc4") + (property "Reference" "D1" + (at 73.152 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PRTR5V0U2X" + (at 73.152 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Package_TO_SOT_SMD_AKL:SOT-143_Handsoldering" + (at 85.09 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" + (at 85.09 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" + (at 85.09 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "f4720144-6b17-45aa-86f9-ca35e1cb249a") + ) + (pin "1" + (uuid "1f1c0af4-6af1-4d46-bee1-39921bbafaf7") + ) + (pin "2" + (uuid "90a651c4-1ad8-4254-8474-15751d8c631f") + ) + (pin "4" + (uuid "0e04a63c-87ca-4ac2-8b68-bd2b902da0de") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "D1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 97.79 99.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cc3b6256-79cc-467a-97e2-a1b19b2cda65") + (property "Reference" "#PWR026" + (at 97.79 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 97.79 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 97.79 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 97.79 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 97.79 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8b6dc700-9910-4678-afb7-e64e0acb11ca") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR026") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Type-C:HRO-TYPE-C-31-M-12") + (at 38.1 41.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d9f634d1-10e6-4463-addc-35893eef8711") + (property "Reference" "USB1" + (at 32.385 21.59 0) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Value" "HRO-TYPE-C-31-M-12" + (at 32.385 24.13 0) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Footprint" "Type-C.pretty-master:HRO-TYPE-C-31-M-12-HandSoldering" + (at 38.1 41.91 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 38.1 41.91 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 38.1 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "cb6fdf46-aed8-4f4c-b0b8-d59c5c47a690") + ) + (pin "12" + (uuid "9ab22500-0278-44ca-be4b-cfcde50b4c10") + ) + (pin "11" + (uuid "1ddb208b-ff35-4fdc-a423-08f0d07e4d4f") + ) + (pin "5" + (uuid "45070fb5-7ae4-4e55-962d-e8f7a816022e") + ) + (pin "6" + (uuid "f9b15b03-aebe-4bbf-a656-737d04c44c44") + ) + (pin "7" + (uuid "8105c7ce-6a71-4fdc-ad8e-c8943559273f") + ) + (pin "13" + (uuid "d31068a2-7ab4-4e2f-92cf-2c0e41587bff") + ) + (pin "1" + (uuid "0bc1628c-ef7e-4201-a614-715dd7151af8") + ) + (pin "9" + (uuid "16aa9b4c-1d3d-4e03-b05a-b19d79aca7f6") + ) + (pin "3" + (uuid "1e1919e6-4c07-45bc-ad3e-7fcc3ae2b078") + ) + (pin "10" + (uuid "1c6a228e-7ec2-49b5-b234-f8cb25dff46d") + ) + (pin "2" + (uuid "ba738f09-f626-4537-967f-a12f11e05a7f") + ) + (pin "8" + (uuid "47b09ed0-4006-4392-bcd8-fd822205b25a") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "USB1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 97.79 102.87 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "db62a6df-f2f1-4431-8846-a6dc2b8040af") + (property "Reference" "R13" + (at 94.488 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "DNP" + (at 94.488 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 97.79 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 97.79 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 97.79 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5ffde405-0bb6-4a06-b2c6-b114a825513c") + ) + (pin "1" + (uuid "86bae480-65c4-460d-ab18-a43e63bcf238") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 158.75 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "de717130-e998-438a-80ee-9ae716f8d2df") + (property "Reference" "#PWR09" + (at 158.75 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 158.75 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 158.75 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 158.75 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3f1e4e34-c45b-4012-b5a0-fd9e0181a98c") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 113.03 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "df7ed3bb-ae6e-4571-8afe-1bd0f71e85bf") + (property "Reference" "#PWR017" + (at 113.03 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 113.03 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 113.03 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 113.03 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 113.03 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "36a14cc6-3e21-486e-b788-7df0ffb63868") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 58.42 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e43ed88a-0b7c-4dfb-9632-55636cb7c7cb") + (property "Reference" "R2" + (at 60.96 53.3399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "5.1k" + (at 60.96 55.8799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 58.42 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 58.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 58.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a75d4186-2398-45c6-9021-f79cdb32bdbc") + ) + (pin "1" + (uuid "19f83cd3-137c-4cf7-8991-eb66f0853871") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 248.92 129.54 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e53a289c-fcd3-4010-a8f4-1587afe30e6a") + (property "Reference" "#PWR021" + (at 248.92 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 248.666 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 248.92 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 248.92 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c4296122-bd07-44ef-979b-b8f472157841") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR021") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 223.52 138.43 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e9887ddd-2719-45c4-b084-f7d71da24077") + (property "Reference" "#PWR022" + (at 223.52 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 223.52 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5d5e6813-9500-433f-83e3-acca888f9615") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR022") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 30.48 110.49 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e9c07dcf-7c62-4e0f-b7d8-bffddad87ab1") + (property "Reference" "West1" + (at 22.098 108.204 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 22.098 110.744 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 30.48 117.475 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 30.48 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 30.48 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 33.655 95.885 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 33.02 101.092 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 33.02 99.568 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "848dfe91-0857-4e62-aac3-6b94d711f6e2") + ) + (pin "2" + (uuid "34dc7aca-b4bf-44da-b02b-e8f3a8489680") + ) + (pin "3" + (uuid "fdb3db6d-c9e9-48f5-b5c4-e922a76f4f49") + ) + (pin "4" + (uuid "182cf852-4b6b-4595-8d02-8aa2c537f154") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "West1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 111.76 170.18 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f01e28d6-c99b-4363-922d-8d4ade2b1113") + (property "Reference" "R10" + (at 111.76 165.354 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "DNP" + (at 111.76 167.894 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 100.33 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 111.76 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 111.76 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "782ea787-286f-48cd-b5c3-6b5419f9ad4a") + ) + (pin "1" + (uuid "2e0b1b3b-28dd-4cbb-93c6-d6f53b7deddf") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 166.37 66.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f17691c8-a58d-43cc-8568-d3c380e99aec") + (property "Reference" "#PWR018" + (at 166.37 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 166.37 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 166.37 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 166.37 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 166.37 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "56fa1d5e-524b-4bb4-98c4-4f7148dfbe80") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 113.03 111.76 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f4ed843a-a837-4644-ab1e-a88bfeb2df84") + (property "Reference" "C11" + (at 107.8865 113.3475 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF" + (at 107.8865 110.8075 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 112.0648 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 113.03 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 113.03 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a5ae1a77-6e8a-4b9d-a41b-d17e701eae3c") + ) + (pin "1" + (uuid "f065c7e0-fa66-403e-b068-3b78e2cff007") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 73.66 49.53 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fcc5ab1a-6ac6-4919-9b1d-bc252ff46237") + (property "Reference" "#PWR07" + (at 73.66 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 73.66 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "737b5bff-d8ae-4490-8d3b-eb90fc8b91f6") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (sheet +<<<<<<< HEAD +======= + (at 241.3 93.98) + (size 36.83 20.32) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (stroke + (width 0.1524) + (type solid) + ) + (fill + (color 0 0 0 0.0000) + ) + (uuid "0330dd45-2776-4667-9e47-eb2dbca2bb32") + (property "Sheetname" "RGB Lights" + (at 241.3 93.2684 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + ) + (property "Sheetfile" "untitled.kicad_sch" + (at 241.3 114.8846 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (pin "RGB IN" input + (at 241.3 111.76 180) + (uuid "2bc0b118-22f4-44df-9631-a4ce548bbecf") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (page "3") + ) + ) + ) + ) + (sheet +>>>>>>> hardware-65percent + (at 217.17 33.02) + (size 55.88 34.925) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (stroke + (width 0.1524) + (type solid) + ) + (fill + (color 0 0 0 0.0000) + ) + (uuid "1d905906-6e74-4741-8b2e-53dc470a7c79") + (property "Sheetname" "Keymatrix" + (at 275.336 46.482 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + ) + (property "Sheetfile" "matrixrot.kicad_sch" + (at 217.17 68.5296 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (pin "COL1" input + (at 232.41 33.02 90) + (uuid "43e65bc9-a87d-4907-a419-26aca47522e6") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL2" input + (at 234.95 33.02 90) + (uuid "ee114d14-efda-4c23-a2fd-ad5c20443e65") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL3" input + (at 237.49 33.02 90) + (uuid "551c4509-840b-4242-8621-1b2679f44448") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL4" input + (at 240.03 33.02 90) + (uuid "8b9952dd-5533-4690-b0bc-2691dd1c23fb") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL5" input + (at 242.57 33.02 90) + (uuid "17d4b3cb-22ca-41b4-a7e2-227c92ebd451") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "ROW1" input + (at 217.17 48.26 180) + (uuid "5ac2431a-3860-4059-9ee8-6e033207b38f") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW2" input + (at 217.17 50.8 180) + (uuid "e119ba03-23bd-4f7f-b5dd-87b77128ed6e") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW3" input + (at 217.17 53.34 180) + (uuid "5c4cef97-81c9-4b1a-ab1b-58e213523943") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW4" input + (at 217.17 55.88 180) + (uuid "76a350b9-d4d1-4670-9452-164177e7325e") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW5" input + (at 217.17 58.42 180) + (uuid "9c7cae5f-cbf2-4929-8a9f-2c1833828cc3") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "COL6" input + (at 245.11 33.02 90) + (uuid "e170e806-bf9d-4d28-94ec-af53935ce42a") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL7" input + (at 247.65 33.02 90) + (uuid "ce5339ca-1cd3-47bf-a8bd-40d1a8be3217") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL8" input + (at 250.19 33.02 90) + (uuid "aa5c787e-ea8e-4471-a48b-477b8665d0f9") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL9" input + (at 252.73 33.02 90) + (uuid "a1c7cd6c-9b58-4235-a987-a51e74e5b035") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL10" input + (at 255.27 33.02 90) + (uuid "2a3e96c4-a93c-4b28-8df7-014f6d2967a2") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL11" input + (at 257.81 33.02 90) + (uuid "5654bb0d-18cf-4321-a1de-6b0da32f992a") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL12" input + (at 260.35 33.02 90) + (uuid "265fd086-de26-4c7d-b10c-11aa8edeab5d") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL13" input + (at 262.89 33.02 90) + (uuid "7c01ef2a-f19e-4692-889a-24c89e336099") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL14" input + (at 265.43 33.02 90) + (uuid "7abc8f10-f8ea-4be5-bc41-59b74adfd401") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL15" input + (at 267.97 33.02 90) + (uuid "e35bf945-cb45-49ec-bd0f-2d20e78818d9") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (page "2") + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/hardware/68percent/68percent-backups/_autosave-numpad.kicad_prl b/hardware/68percent/68percent-backups/_autosave-numpad.kicad_prl new file mode 100644 index 00000000..2d1ee328 --- /dev/null +++ b/hardware/68percent/68percent-backups/_autosave-numpad.kicad_prl @@ -0,0 +1,131 @@ +{ + "board": { + "active_layer": 2, + "active_layer_preset": "", + "auto_track_width": false, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6899999976158142, + "pads": 1.0, + "shapes": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.1599999964237213 + }, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + "vias", + "footprint_text", + "footprint_anchors", + "ratsnest", + "grid", + "footprints_front", + "footprints_back", + "footprint_values", + "footprint_references", + "tracks", + "drc_errors", + "drawing_sheet", + "bitmaps", + "pads", + "zones", + "drc_warnings", + "drc_exclusions", + "locked_item_shadows", + "conflict_shadows", + "shapes" + ], + "visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff", + "zone_display_mode": 0 + }, + "git": { + "repo_type": "", + "repo_username": "", + "ssh_key": "" + }, + "meta": { + "filename": "_autosave-numpad.kicad_prl", + "version": 5 + }, + "net_inspector_panel": { + "col_hidden": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ], + "col_order": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "col_widths": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "custom_group_rules": [], + "expanded_rows": [], + "filter_by_net_name": true, + "filter_by_netclass": true, + "filter_text": "", + "group_by_constraint": false, + "group_by_netclass": false, + "show_unconnected_nets": false, + "show_zero_pad_nets": false, + "sort_ascending": true, + "sorting_column": 0 + }, + "open_jobsets": [], + "project": { + "files": [] + }, + "schematic": { + "selection_filter": { + "graphics": true, + "images": true, + "labels": true, + "lockedItems": false, + "otherItems": true, + "pins": true, + "symbols": true, + "text": true, + "wires": true + } + } +} diff --git a/hardware/68percent/68percent-backups/_autosave-powfilt.kicad_sch b/hardware/68percent/68percent-backups/_autosave-powfilt.kicad_sch new file mode 100644 index 00000000..4a2c33c5 --- /dev/null +++ b/hardware/68percent/68percent-backups/_autosave-powfilt.kicad_sch @@ -0,0 +1,8 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "0555e65a-78c9-4198-a94d-afc4eb14f658") + (paper "A4") + (lib_symbols) +) diff --git a/hardware/68percent/68percent-backups/_autosave-rgb.kicad_sch b/hardware/68percent/68percent-backups/_autosave-rgb.kicad_sch new file mode 100644 index 00000000..43242877 --- /dev/null +++ b/hardware/68percent/68percent-backups/_autosave-rgb.kicad_sch @@ -0,0 +1,8 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "b20b0154-0369-4bd1-a7a4-7485a0c59449") + (paper "A4") + (lib_symbols) +) diff --git a/hardware/68percent/68percent-backups/clock.kicad_sch b/hardware/68percent/68percent-backups/clock.kicad_sch new file mode 100644 index 00000000..bae81435 --- /dev/null +++ b/hardware/68percent/68percent-backups/clock.kicad_sch @@ -0,0 +1,41 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "bd7a78ae-d57e-4c8d-8079-f4714c8f1856") + (paper "A4") + (lib_symbols) + (text "24MHz external clock. \n\nOutput\nOSC_OUT\nOSC_IN" + (exclude_from_sim no) + (at 128.27 99.568 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "0b078972-8867-4a81-bdfc-f286a00b7261") + ) + (hierarchical_label "OSC_OUT" + (shape input) + (at 186.69 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "fccd57b1-b731-4457-b9bb-32fe414af52c") + ) + (hierarchical_label "OSC_IN" + (shape input) + (at 186.69 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "fe808684-ead0-47da-b31a-21623b281a81") + ) +) diff --git a/hardware/68percent/68percent-backups/fp-lib-table b/hardware/68percent/68percent-backups/fp-lib-table new file mode 100644 index 00000000..1e1505fb --- /dev/null +++ b/hardware/68percent/68percent-backups/fp-lib-table @@ -0,0 +1,8 @@ +(fp_lib_table + (version 7) + (lib (name "footprints")(type "KiCad")(uri "/home/ukim/Projects/mskbd/hardware/footprint/stm32f446re/footprints.pretty")(options "")(descr "")) + (lib (name "Package_QFP.3dshapes")(type "KiCad")(uri "/home/ukim/Projects/mskbd/hardware/footprint/Package_QFP.3dshapes")(options "")(descr "")) + (lib (name "Type-C.pretty-master")(type "KiCad")(uri "/home/ukim/Projects/modular-kbd/hardware/Type-C.pretty-master")(options "")(descr "")) + (lib (name "kicad-footprints-master")(type "KiCad")(uri "/home/ukim/Projects/modular-kbd/hardware/footprint/generic/kicad-footprints-master")(options "")(descr "")) + (lib (name "Connector_PinSocket_2.54mm")(type "KiCad")(uri "/home/ukim/Projects/modular-kbd/hardware/footprint/generic/kicad-footprints-master/Connector_PinSocket_2.54mm.pretty")(options "")(descr "")) +) diff --git a/hardware/68percent/68percent-backups/hummatrix.kicad_sch b/hardware/68percent/68percent-backups/hummatrix.kicad_sch new file mode 100644 index 00000000..a34898f1 --- /dev/null +++ b/hardware/68percent/68percent-backups/hummatrix.kicad_sch @@ -0,0 +1,129 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "a78709a7-612d-422d-97ca-ad2b463f3c34") + (paper "A4") + (lib_symbols) + (text "Numpad Matrix\n\nStandard numpad matrix with 4 macro buttons. \n4x6 keyboard matrix. \nUse MX-style hot swap sockets. marstlib should have them\nUse 1N4148 Diodes for each key to prevent ghosting.\nIf possible find an SMD 1N4148 Diode Package\nAdd stabilizers for the large buttons\n\nInput:\nCOL1 - COL4\n\nOutput\nROW1 - ROW6\n\n" + (exclude_from_sim no) + (at 114.046 95.504 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "1a257982-b075-487c-a45b-3e42f3d00030") + ) + (hierarchical_label "COL1" + (shape input) + (at 168.91 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "2489cc9d-3f3f-49f3-b5f8-fca7de0bd406") + ) + (hierarchical_label "ROW5" + (shape input) + (at 214.63 86.36 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "2b6565a3-aed1-40b1-8bdb-7e077c868565") + ) + (hierarchical_label "COL3" + (shape input) + (at 179.07 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "39f72fa4-5a13-4c27-b584-4b35e7decd41") + ) + (hierarchical_label "ROW2" + (shape input) + (at 214.63 71.12 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "3e384b07-13e8-47ab-854a-4749d9f7c1f2") + ) + (hierarchical_label "ROW1" + (shape input) + (at 214.63 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "46575829-cb89-44d7-a910-1712e863bbc4") + ) + (hierarchical_label "ROW3" + (shape input) + (at 214.63 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "5927c7ba-a23d-49be-ad4c-26b7549c4aa5") + ) + (hierarchical_label "ROW6" + (shape input) + (at 214.63 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "7904c4f1-0a76-47a4-a64d-305fdecb43ca") + ) + (hierarchical_label "COL2" + (shape input) + (at 173.99 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "7c3f9e57-1e77-49a0-897c-74f99b2da1cf") + ) + (hierarchical_label "ROW4" + (shape input) + (at 214.63 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "aef0586f-1483-45c4-b342-4de1dc00658b") + ) + (hierarchical_label "COL4" + (shape input) + (at 184.15 57.15 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "d6ddda30-e8a3-436c-8315-8c1fc1bf77f1") + ) +) diff --git a/hardware/68percent/68percent-backups/matrixrot.kicad_sch b/hardware/68percent/68percent-backups/matrixrot.kicad_sch new file mode 100644 index 00000000..4a87bb50 --- /dev/null +++ b/hardware/68percent/68percent-backups/matrixrot.kicad_sch @@ -0,0 +1,13537 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "64cbbd28-59d1-42ca-ac52-e45635cfa060") + (paper "A4") + (lib_symbols + (symbol "PCM_Diode_AKL:1N4148W" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "D" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1N4148W" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "diode 1N4148W" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "1N4148W_0_1" + (polyline + (pts + (xy -1.27 1.27) (xy -1.27 -1.27) (xy 1.27 0) (xy -1.27 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy 1.27 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 1.27) (xy 1.27 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "1N4148W_0_2" + (polyline + (pts + (xy -2.54 -2.54) (xy 2.54 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.889 -0.889) (xy -1.778 0) (xy 0.889 0.889) (xy 0 -1.778) (xy -0.889 -0.889) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0 1.778) (xy 1.778 0) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "1N4148W_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 2.54) + (name "K" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "1N4148W_1_2" + (pin passive line + (at -2.54 -2.54 0) + (length 0) + (name "A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 2.54 180) + (length 0) + (name "K" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "MX" + (at 3.048 1.016 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_SW_HS" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "switch normally-open pushbutton push-button" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MX_SW_HS_CPG151101S11_0_1" + (polyline + (pts + (xy -2.54 2.54) (xy -1.524 1.524) (xy -1.524 1.524) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -1.1684 1.1684) + (radius 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.508 2.54) (xy 2.54 -0.508) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.016 1.016) (xy 2.032 2.032) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 1.143 -1.1938) + (radius 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 -1.524) (xy 2.54 -2.54) (xy 2.54 -2.54) (xy 2.54 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -2.54 2.54 0) + (length 0) + (name "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 -2.54 180) + (length 0) + (name "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_marbastlib-mx:MX_stab" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "S" + (at -5.08 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at -5.08 3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_6.25u" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "cherry mx stabilizer stab" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MX_stab_0_1" + (rectangle + (start -5.08 1.27) + (end -2.54 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -5.08 -1.524) + (end -2.54 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -4.826 2.794) + (end -2.794 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -4.064 1.27) + (end -3.556 2.794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -4.064 -1.778) + (end 4.064 -2.286) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -4.064 -2.286) + (end -3.556 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.54 1.27) + (end 5.08 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.54 -1.524) + (end 5.08 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.794 2.794) + (end 4.826 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.556 1.27) + (end 4.064 2.794) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 4.064 -2.286) + (end 3.556 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (embedded_fonts no) + ) + ) + (junction + (at 227.33 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "0012e120-5d63-43a7-b7e8-e1caa9642c26") + ) + (junction + (at 223.52 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "03e1ae58-a525-4b0e-8ffb-7e28785e0ae1") + ) + (junction + (at 151.13 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "0471acb6-0f22-4e52-9d5d-4148989d5f71") + ) + (junction + (at 74.93 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "081fed2f-0dd5-4630-afe1-8d32cae922e9") + ) + (junction + (at 147.32 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "08e187af-8994-4d68-8e30-f680dedf3690") + ) + (junction + (at 138.43 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "09c2b4d3-ee80-4044-98c6-9d8307738ff2") + ) + (junction + (at 83.82 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "0a89a3bd-7613-4fdc-a5e5-ebeb4ce3b288") + ) + (junction + (at 198.12 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "0cf3ac1b-249a-427e-b239-9b3f7def9160") + ) + (junction + (at 210.82 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "0d29c0ee-2e87-41d8-80c8-6c1ecdf468b0") + ) + (junction + (at 109.22 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "0df08e1f-fd0c-4e1e-82aa-632f2859ba0a") + ) + (junction + (at 113.03 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "0e83aab4-1f56-418b-8d31-805ab0c047d4") + ) + (junction + (at 210.82 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "0e8d3277-460e-441c-b397-d785db22be96") + ) + (junction + (at 227.33 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "103c0796-1ee5-4c40-85ac-f02272b534ac") + ) + (junction + (at 176.53 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "154e458e-740b-454b-b021-eafd66a9acd2") + ) + (junction + (at 147.32 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "15adc4b9-fb6a-4b62-b9a7-1a0b3ae344e4") + ) + (junction + (at 83.82 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "1769731d-156a-495b-8db4-59d549c4cba4") + ) + (junction + (at 138.43 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "203c2451-9052-4ce8-a508-61192b6aa7b8") + ) + (junction + (at 62.23 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "2471ba64-4c9e-4d8f-8637-73e19a3da602") + ) + (junction + (at 96.52 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "269b0e82-4bff-45c7-a9fa-d4571ce4c510") + ) + (junction + (at 62.23 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "26a19b55-b5c4-4932-b7e5-275c376fe9e7") + ) + (junction + (at 160.02 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "2931fb39-daf6-41a9-9a02-b5025c816133") + ) + (junction + (at 163.83 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "29d6d699-20a3-4efd-b5b9-1d6a0545892b") + ) + (junction + (at 74.93 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "2aa11235-829f-4940-89a1-ee913375a0ee") + ) + (junction + (at 223.52 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "2db1ee33-288a-4cf1-befe-269e82c75d25") + ) + (junction + (at 214.63 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "2ea8518f-4753-4406-ad31-cdcdc5877016") + ) + (junction + (at 71.12 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "2eff185f-35c3-44c7-b28f-809b121691c8") + ) + (junction + (at 134.62 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "301dd6f2-33fd-4e69-ba1e-4ace0ac7b78b") + ) + (junction + (at 236.22 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "30bb3656-0760-4630-84b2-0403c552f8b8") + ) + (junction + (at 96.52 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "32018cc9-57fe-4a97-b8ce-ea60bf7d2c50") + ) + (junction + (at 134.62 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "346f78df-0932-4bb6-9880-e65c20452c4a") + ) + (junction + (at 71.12 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "352e59c0-157c-42f8-8353-db8eff891bda") + ) + (junction + (at 201.93 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "392a12b7-3e17-4de1-b536-8e5312e839f8") + ) + (junction + (at 198.12 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "3a8cf4d1-8d3a-4d3d-8771-05629d31c5b7") + ) + (junction + (at 160.02 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "3b5c091b-f3d4-44de-a0a0-57d0179aa56a") + ) + (junction + (at 83.82 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "3f091272-0596-4a71-9bea-97067eafb939") + ) + (junction + (at 96.52 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "46c1ef80-3b3b-4b66-9b31-fe21c3b6490f") + ) + (junction + (at 201.93 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "4c61c1e8-e038-4d4d-b7d3-3d5d92ec09e8") + ) + (junction + (at 198.12 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "4e559eda-8749-44e8-860c-4820ac45e1ea") + ) + (junction + (at 223.52 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "505b036c-e927-4121-935c-64ff4d0d28f2") + ) + (junction + (at 189.23 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "57ba55db-6db9-40cc-8ab0-7cd02c67cb94") + ) + (junction + (at 62.23 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "5862a329-d21d-49c8-ad18-366772b48cda") + ) + (junction + (at 121.92 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "5a55b516-1df9-4c74-9d88-6dd173c8777e") + ) + (junction + (at 236.22 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "5b85bd7c-3e30-4307-80f5-077a81867677") + ) + (junction + (at 185.42 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "5cc94d45-bf6c-4b99-90e2-25f6d11023aa") + ) + (junction + (at 151.13 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "5d514022-2645-4c09-b538-66f94140d45b") + ) + (junction + (at 71.12 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "5e9fb221-8d37-4e01-b03e-006cb117570a") + ) + (junction + (at 189.23 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "5fb135fe-35da-4134-83de-7404c4d8ef53") + ) + (junction + (at 176.53 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "66a7117b-eed7-4036-9430-532d86d28919") + ) + (junction + (at 87.63 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "66de752f-9122-4088-b37b-80a7f602fbf6") + ) + (junction + (at 198.12 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "69f2c9c5-1888-4b12-ad8e-25c249049865") + ) + (junction + (at 113.03 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "6a50c245-6a58-4bae-95ec-8f613c4c5968") + ) + (junction + (at 49.53 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "6c5ceef9-a0c6-4f82-abab-484a4cf18a4b") + ) + (junction + (at 185.42 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "6dac510a-d7ef-4bc9-9dee-b60048cf9be8") + ) + (junction + (at 138.43 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "6ee865aa-316e-4ac9-9a91-db9b53659e50") + ) + (junction + (at 172.72 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "7182c520-ca17-4321-99d1-d7277108d776") + ) + (junction + (at 100.33 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "71f9daeb-e148-4112-bced-3ec7cc45b0b3") + ) + (junction + (at 189.23 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "81e46839-8d44-4ffc-aae7-c9c16a16d80f") + ) + (junction + (at 74.93 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "84ec4653-a96e-4c4f-b772-d5bdccd55464") + ) + (junction + (at 176.53 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "85d5b69a-e338-43e0-af58-025d43077afd") + ) + (junction + (at 121.92 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "8c52306d-2649-4a84-8e71-a956d45a5c01") + ) + (junction + (at 210.82 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "8ee4f632-40fd-4f7b-9209-de39a6a02371") + ) + (junction + (at 125.73 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "8fb97ccf-9b6e-45a4-a1f9-dd3096f51b1f") + ) + (junction + (at 109.22 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "8ff94d1a-db23-4e54-8f0d-de9712552b5b") + ) + (junction + (at 121.92 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "91b4c436-cdf3-4a6e-b1e6-56218d2f5a02") + ) + (junction + (at 172.72 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "94ee5b8a-e197-470e-b622-51f05d93e5fe") + ) + (junction + (at 71.12 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "956c5bd3-3ded-4b60-b86b-b34b5b448d54") + ) + (junction + (at 227.33 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "96920dc9-1b94-4e2d-89eb-e4c286229997") + ) + (junction + (at 121.92 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "9723fb3c-5bc9-4fcb-a156-c26917a22c30") + ) + (junction + (at 109.22 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "98261ae1-dab5-4b1b-b1c2-344eda7da91d") + ) + (junction + (at 109.22 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "9b7371b1-ba28-4622-91b2-2bf0e015ff00") + ) + (junction + (at 134.62 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "9e191881-f69d-4cae-99c0-730f72623edd") + ) + (junction + (at 49.53 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "9fc28236-b978-4e66-a62a-334b25382324") + ) + (junction + (at 125.73 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "a0500db1-94e7-47f5-a135-c86e72a9b178") + ) + (junction + (at 189.23 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "a060956c-2b99-4c40-bc15-2b89e15c12c0") + ) + (junction + (at 87.63 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "a0d33f34-9e88-4b23-bc7b-bc592a287954") + ) + (junction + (at 185.42 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "a175da39-ffe0-4f7c-8d05-7315c03c3eb3") + ) + (junction + (at 83.82 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "a70329a4-1dea-488f-8a0b-7699a50c1fba") + ) + (junction + (at 236.22 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "a82035f3-300c-41d9-9bfb-baddaf69d42c") + ) + (junction + (at 62.23 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "b03b93fb-2ba7-4b71-a0ab-fc5a35d8d5f2") + ) + (junction + (at 49.53 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "b61d941c-8eba-4c3b-a9e0-00cf22685db0") + ) + (junction + (at 163.83 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "b8a5801b-d453-4f7b-a452-08abbc00b3a4") + ) + (junction + (at 172.72 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "b9123f1e-0071-4432-8513-104d96d80880") + ) + (junction + (at 160.02 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "b9e61e9e-9f8b-4561-89d9-2363740e8de2") + ) + (junction + (at 96.52 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "bc515342-25c6-4188-b3a7-4c72d04af4b6") + ) + (junction + (at 113.03 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "bd75b124-a575-4cee-af9f-b7432212a99e") + ) + (junction + (at 227.33 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "c17d33ef-5384-46a8-ab9e-d8fdaba68902") + ) + (junction + (at 160.02 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "c30ab9d5-3f68-4fab-8885-160c1fb2bea2") + ) + (junction + (at 74.93 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "c46f4b94-43a5-4ce7-881e-a7b70a3472ae") + ) + (junction + (at 71.12 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "c4a5cdc9-35ce-4270-a577-3b8f720fcfa4") + ) + (junction + (at 83.82 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "c830674c-93cb-47f9-bcce-42a02fad4aad") + ) + (junction + (at 210.82 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "c9ab0521-079d-4b2d-9f1e-448bf49d390b") + ) + (junction + (at 100.33 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "cbb470cd-be60-439e-a252-272d26e7e19d") + ) + (junction + (at 134.62 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "ccf4eb53-81ae-4ea2-90f8-213ddec47d90") + ) + (junction + (at 125.73 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "cd25438f-3116-4e65-bcc3-5b9925defedd") + ) + (junction + (at 214.63 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "ce990119-1257-45ab-b3d1-8eac4946c963") + ) + (junction + (at 151.13 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "d1083c10-b726-4091-88a9-9f7ed6ecf00a") + ) + (junction + (at 100.33 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "d1c045b1-e895-44b5-bb71-e3e7f08c17ca") + ) + (junction + (at 121.92 146.05) + (diameter 0) + (color 0 0 0 0) + (uuid "d203df45-4c3d-4f37-9130-49d8f9ade753") + ) + (junction + (at 198.12 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "d20eaf26-77c9-4ab9-afc2-32d2a59f6d94") + ) + (junction + (at 163.83 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "d24559d8-fad0-4713-b00a-795d9976f3ea") + ) + (junction + (at 172.72 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "d4118566-94a0-4586-b1e7-65cb21a0a934") + ) + (junction + (at 176.53 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "d5ce552a-3140-477b-b8f1-22815ea3e4f2") + ) + (junction + (at 147.32 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "dc44dab0-8a75-4043-83fd-f793388f6f6b") + ) + (junction + (at 172.72 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "dc52e581-52b1-464e-beaf-91c22eafa940") + ) + (junction + (at 236.22 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "e077714b-5209-4abe-b10d-bf06cc5c74c4") + ) + (junction + (at 163.83 72.39) + (diameter 0) + (color 0 0 0 0) + (uuid "e203cb45-b8de-4a7b-9c88-89774115bd39") + ) + (junction + (at 87.63 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "e3d59d3f-65f4-429b-9b32-48a3966c0833") + ) + (junction + (at 214.63 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "e4e36866-4471-4af1-a862-ff2076415520") + ) + (junction + (at 147.32 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "e64051d3-2d7e-4fd7-985a-7648bcbc2ca0") + ) + (junction + (at 185.42 125.73) + (diameter 0) + (color 0 0 0 0) + (uuid "e7b3f5c5-f4e8-4b90-b9d5-c6c822fbe29c") + ) + (junction + (at 201.93 52.07) + (diameter 0) + (color 0 0 0 0) + (uuid "e7bfa61c-628a-4bfa-9036-6c9ede45bc75") + ) + (junction + (at 49.53 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "e9176dda-a950-4ae3-8014-e5120bd02a34") + ) + (junction + (at 185.42 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "eb90a787-76c9-422b-bc01-b950dc631e73") + ) + (junction + (at 223.52 85.09) + (diameter 0) + (color 0 0 0 0) + (uuid "f1df3d7c-bc6f-48aa-b3b4-c2324c5dff99") + ) + (junction + (at 236.22 64.77) + (diameter 0) + (color 0 0 0 0) + (uuid "f20e8170-3d5d-45ac-94a6-ff9679924056") + ) + (junction + (at 113.03 92.71) + (diameter 0) + (color 0 0 0 0) + (uuid "f7251d76-b714-4373-a864-b19bf754551c") + ) + (wire + (pts + (xy 163.83 113.03) (xy 167.64 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "004a6c58-38da-447b-bd9c-da799393537f") + ) + (wire + (pts + (xy 198.12 146.05) (xy 210.82 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0050cc49-8d21-4d76-a293-868bc613bfc6") + ) + (wire + (pts + (xy 113.03 52.07) (xy 113.03 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "009d4ca6-baf7-4880-a9e5-206e3484f5ca") + ) + (wire + (pts + (xy 138.43 44.45) (xy 138.43 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00bcf3d3-5053-45da-963c-935658cd8003") + ) + (wire + (pts + (xy 172.72 64.77) (xy 185.42 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01da19a0-6c00-43c6-b08d-63784bb1512b") + ) + (wire + (pts + (xy 87.63 72.39) (xy 87.63 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02e46a3e-12c4-4fdf-9f19-367314de1520") + ) + (wire + (pts + (xy 227.33 72.39) (xy 231.14 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "038c1dc8-3981-49a8-9404-f1af9b4ffaba") + ) + (wire + (pts + (xy 227.33 52.07) (xy 227.33 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04189574-c161-42f9-af5a-9e9cb8ba72e0") + ) + (wire + (pts + (xy 100.33 92.71) (xy 100.33 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04b432bd-8152-4c92-90cd-f50708257e72") + ) + (wire + (pts + (xy 163.83 72.39) (xy 167.64 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "069adb05-df96-448f-85dd-9e17b0301a21") + ) + (wire + (pts + (xy 151.13 72.39) (xy 151.13 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "089ad131-915c-4843-8c87-d740d50644e3") + ) + (wire + (pts + (xy 163.83 92.71) (xy 163.83 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0916583d-74c2-4267-a666-2f971d5acee1") + ) + (wire + (pts + (xy 74.93 113.03) (xy 74.93 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "093a6e12-9315-4b6c-858e-a1bf807b00e4") + ) + (wire + (pts + (xy 151.13 44.45) (xy 151.13 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a168759-d872-46cc-9251-e8c0d5af28f8") + ) + (wire + (pts + (xy 176.53 52.07) (xy 180.34 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0a829fc7-af1d-4891-af6b-b18fd4b7d625") + ) + (wire + (pts + (xy 223.52 146.05) (xy 236.22 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c8a98a0-2b67-4cc0-91bd-8db3732ed122") + ) + (wire + (pts + (xy 49.53 113.03) (xy 53.34 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0eebcdea-25e3-446a-886d-d9ad5fa22491") + ) + (wire + (pts + (xy 83.82 105.41) (xy 71.12 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "102538a1-0314-4aa8-8042-a1ea96549cb3") + ) + (wire + (pts + (xy 74.93 133.35) (xy 78.74 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "116cda19-84f1-4aa9-98a8-8c523a60cfce") + ) + (wire + (pts + (xy 176.53 92.71) (xy 180.34 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "12947892-9c1b-4c7b-8913-4ad554542e16") + ) + (wire + (pts + (xy 236.22 105.41) (xy 252.73 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "136fbb22-3aa5-44a3-a871-d2b6c4d13f8e") + ) + (wire + (pts + (xy 113.03 72.39) (xy 116.84 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "137d010d-4f8d-48f0-9e7d-2e0a9022c522") + ) + (wire + (pts + (xy 49.53 44.45) (xy 49.53 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "141be2e7-f0f4-4d98-a6ee-3f02396997b4") + ) + (wire + (pts + (xy 49.53 133.35) (xy 53.34 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1435077f-5f8b-46d7-b3bb-b812afe5a8a7") + ) + (wire + (pts + (xy 223.52 64.77) (xy 236.22 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16157935-aa18-448c-af83-6837afe526ca") + ) + (wire + (pts + (xy 121.92 125.73) (xy 109.22 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16d1af61-d93a-4e8c-8156-c6ad58964850") + ) + (wire + (pts + (xy 49.53 92.71) (xy 53.34 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1bff3a53-2dcb-47ca-8296-4832fce4fa34") + ) + (wire + (pts + (xy 214.63 133.35) (xy 218.44 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c069dee-7114-476e-8975-f096f171af17") + ) + (wire + (pts + (xy 147.32 85.09) (xy 134.62 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d5d22cf-35d1-4cec-920b-1f3ac077e35c") + ) + (wire + (pts + (xy 198.12 105.41) (xy 185.42 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ed88602-e36a-44fd-be7a-600bad15a795") + ) + (wire + (pts + (xy 87.63 52.07) (xy 91.44 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1fd71eb8-1859-46a7-a7e4-a0975f81aaf9") + ) + (wire + (pts + (xy 83.82 64.77) (xy 96.52 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20061edb-e92a-4615-8c80-cb039ed05099") + ) + (wire + (pts + (xy 198.12 85.09) (xy 185.42 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2030c9a4-0051-4cf0-b031-88db76205f1f") + ) + (wire + (pts + (xy 160.02 64.77) (xy 172.72 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2087c50c-d180-4141-a504-b9bd9fc4d0d9") + ) + (wire + (pts + (xy 163.83 52.07) (xy 167.64 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "239934a6-6031-4271-82ff-5b1848e0446a") + ) + (wire + (pts + (xy 227.33 133.35) (xy 231.14 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "278f4c59-c433-48a0-827b-15231c236d0e") + ) + (wire + (pts + (xy 134.62 85.09) (xy 121.92 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "27affcb9-9f7d-49de-9d85-b5b7fa2e66b0") + ) + (wire + (pts + (xy 138.43 52.07) (xy 142.24 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "27f9bd5b-1845-4339-8314-ea0e76df5140") + ) + (wire + (pts + (xy 83.82 125.73) (xy 71.12 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2813a8b0-a584-47a7-bc1d-1fcf5211d45a") + ) + (wire + (pts + (xy 227.33 44.45) (xy 227.33 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "28732937-2702-440d-a8a9-4e557ad47eb8") + ) + (wire + (pts + (xy 74.93 72.39) (xy 74.93 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "295d98c1-3286-4a7e-9aa2-7ece96d41785") + ) + (wire + (pts + (xy 214.63 113.03) (xy 214.63 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a865fcc-d4b6-45cb-baae-0376961bad2b") + ) + (wire + (pts + (xy 125.73 52.07) (xy 129.54 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2aa74675-6396-474b-a39e-24d406415b79") + ) + (wire + (pts + (xy 163.83 133.35) (xy 167.64 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b91f2da-1152-4a01-b1c7-6a568a91ab43") + ) + (wire + (pts + (xy 160.02 105.41) (xy 147.32 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "308709ae-8580-4bfe-be51-3eb013345254") + ) + (wire + (pts + (xy 96.52 125.73) (xy 83.82 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30fa1de3-ea44-4c4e-b209-5c4fdee86438") + ) + (wire + (pts + (xy 205.74 92.71) (xy 201.93 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "323b2a73-37ad-4f3e-9b4d-2cfa7156005f") + ) + (wire + (pts + (xy 74.93 52.07) (xy 74.93 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "33126f6a-6a78-4392-95bf-9fb928446bf2") + ) + (wire + (pts + (xy 252.73 85.09) (xy 236.22 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "352284c5-7253-4571-bdd0-bcee4558ff12") + ) + (wire + (pts + (xy 87.63 72.39) (xy 91.44 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "353e0b00-1b00-4c48-b863-ca36f4aee877") + ) + (wire + (pts + (xy 109.22 85.09) (xy 96.52 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "354c19a6-04d8-4ee8-9695-70e2eff503d2") + ) + (wire + (pts + (xy 198.12 105.41) (xy 210.82 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "382958ed-00b0-47a3-8b6f-4f82e0f67865") + ) + (wire + (pts + (xy 74.93 52.07) (xy 78.74 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39c6d66f-4afc-43d0-8290-82de9e3d1dea") + ) + (wire + (pts + (xy 138.43 113.03) (xy 142.24 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a93a19a-54cb-446e-8d78-ab1b3a663710") + ) + (wire + (pts + (xy 236.22 125.73) (xy 252.73 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cf3b3f9-d2e3-4eae-bd1b-3d50597c3347") + ) + (wire + (pts + (xy 71.12 85.09) (xy 58.42 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3e4a3d05-d4da-4f8e-a8a2-4562b9325304") + ) + (wire + (pts + (xy 198.12 64.77) (xy 210.82 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3e4e9c05-f2d7-4389-ad3d-f236d134901a") + ) + (wire + (pts + (xy 113.03 113.03) (xy 116.84 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41b1016d-c645-40e8-a371-552cd3fb37d9") + ) + (wire + (pts + (xy 71.12 146.05) (xy 58.42 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41b856a4-0aec-4614-8e21-1a1b3359ce47") + ) + (wire + (pts + (xy 151.13 72.39) (xy 154.94 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "422d05e7-8b11-4ea3-8580-2260a5765d46") + ) + (wire + (pts + (xy 96.52 64.77) (xy 109.22 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "438160c4-f1b2-422b-8ad2-3014d920c1b7") + ) + (wire + (pts + (xy 87.63 44.45) (xy 87.63 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43b73d4e-f5dd-453f-ba80-915b3b11bd6c") + ) + (wire + (pts + (xy 176.53 72.39) (xy 176.53 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4480d763-8d7c-4588-9f81-6266e303a8de") + ) + (wire + (pts + (xy 74.93 72.39) (xy 78.74 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "457e2632-3aa6-4580-8e7f-584483cf9462") + ) + (wire + (pts + (xy 58.42 64.77) (xy 71.12 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4612cc6e-af8c-48bc-b9ba-ee7404db0c31") + ) + (wire + (pts + (xy 121.92 85.09) (xy 109.22 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "497b31c7-4162-491f-8f38-75ba3ced09c0") + ) + (wire + (pts + (xy 227.33 113.03) (xy 231.14 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4985e58c-1566-41f8-9540-1a04311752b2") + ) + (wire + (pts + (xy 62.23 113.03) (xy 62.23 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4a766e59-f74b-470c-9b24-45cd787cae50") + ) + (wire + (pts + (xy 163.83 113.03) (xy 163.83 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4bf3b8e2-71df-4455-8fa6-db8ae1c44bc6") + ) + (wire + (pts + (xy 236.22 146.05) (xy 254 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4cb74075-863a-4a8a-aa84-0bdf217f5a17") + ) + (wire + (pts + (xy 176.53 44.45) (xy 176.53 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4dda5980-9156-4fc2-a4f6-ee635fa32997") + ) + (wire + (pts + (xy 223.52 125.73) (xy 236.22 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4eaa69d4-f68b-409f-8a58-8786112bf6f8") + ) + (wire + (pts + (xy 172.72 125.73) (xy 160.02 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52f85d1d-85ce-46da-9e68-35b65acc552c") + ) + (wire + (pts + (xy 198.12 125.73) (xy 223.52 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54a6227c-7179-4bb3-9900-ccc8475b966b") + ) + (wire + (pts + (xy 189.23 72.39) (xy 189.23 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "55e1a0cb-f102-4d67-a30d-bb300543e5f0") + ) + (wire + (pts + (xy 125.73 44.45) (xy 125.73 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "560b2137-8d98-4500-82d8-6ea861a2681e") + ) + (wire + (pts + (xy 189.23 92.71) (xy 189.23 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "570a7877-ac3a-4bb2-8c21-8348ac9c0d92") + ) + (wire + (pts + (xy 172.72 146.05) (xy 185.42 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57e431db-50ae-464f-b0cf-b08896cff24f") + ) + (wire + (pts + (xy 160.02 125.73) (xy 147.32 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d6e2e94-ac06-4893-8ac3-6b37ea2e9cf5") + ) + (wire + (pts + (xy 100.33 113.03) (xy 104.14 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ea1ae72-f6d3-403c-b47b-6fe80ea55586") + ) + (wire + (pts + (xy 201.93 72.39) (xy 205.74 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6315496f-524b-41df-9893-f68610b64399") + ) + (wire + (pts + (xy 96.52 105.41) (xy 83.82 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63bd4bb2-1421-4c35-918c-faf7c3f43bee") + ) + (wire + (pts + (xy 125.73 72.39) (xy 125.73 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67997331-f951-4e1d-ac79-423ea4f3e36e") + ) + (wire + (pts + (xy 201.93 52.07) (xy 205.74 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "67e5ab9f-b841-41d7-ad77-61b99f832106") + ) + (wire + (pts + (xy 62.23 72.39) (xy 66.04 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6854bbe2-8761-45f4-a411-4a517ac94f59") + ) + (wire + (pts + (xy 96.52 85.09) (xy 83.82 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6babb997-ba9f-4e74-9a3d-75b47c08436b") + ) + (wire + (pts + (xy 62.23 72.39) (xy 62.23 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6bb32ffa-bf12-4d94-932c-4df29835f70e") + ) + (wire + (pts + (xy 100.33 44.45) (xy 100.33 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e691b96-80e4-4877-9a4d-28d514cfe527") + ) + (wire + (pts + (xy 121.92 64.77) (xy 134.62 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6eeaaa93-d6f3-4c7b-89c2-2f950dfe32be") + ) + (wire + (pts + (xy 185.42 125.73) (xy 198.12 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f898b64-3903-4a3f-b6ef-a74ffa7aef2b") + ) + (wire + (pts + (xy 62.23 52.07) (xy 66.04 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6fb71a56-9650-46e2-9579-94bf4afe614f") + ) + (wire + (pts + (xy 151.13 92.71) (xy 154.94 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "73b46ed3-0d30-4e80-a5ef-2ab5d737ad78") + ) + (wire + (pts + (xy 83.82 85.09) (xy 71.12 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "74f52cec-f681-400c-9c87-435a6ab50e1c") + ) + (wire + (pts + (xy 176.53 72.39) (xy 180.34 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7743be71-21a3-4a00-b346-ab0eaaeaeb05") + ) + (wire + (pts + (xy 223.52 85.09) (xy 210.82 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77718ac1-e9bf-43a4-b9b1-27695d83f257") + ) + (wire + (pts + (xy 176.53 133.35) (xy 180.34 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "78b73028-43de-43c7-9c24-94402c23d800") + ) + (wire + (pts + (xy 71.12 125.73) (xy 58.42 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79867b1a-6280-4b14-9700-0f72c99dd507") + ) + (wire + (pts + (xy 201.93 133.35) (xy 205.74 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7bc692b7-5180-4866-89b2-05c9a17ce131") + ) + (wire + (pts + (xy 147.32 125.73) (xy 134.62 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ce34287-cf78-42e6-819b-1fef95c80df0") + ) + (wire + (pts + (xy 113.03 113.03) (xy 113.03 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7dcddafc-dd28-4bf5-a079-f87270b5e39f") + ) + (wire + (pts + (xy 100.33 92.71) (xy 104.14 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "835fa3cb-e240-4399-91e0-b83725350ec1") + ) + (wire + (pts + (xy 201.93 52.07) (xy 201.93 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83d862a0-e85b-4519-97d8-0043251830f0") + ) + (wire + (pts + (xy 185.42 85.09) (xy 172.72 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83fa1d8c-e2ec-476e-8320-0bea89567707") + ) + (wire + (pts + (xy 109.22 64.77) (xy 121.92 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "84b6912c-1f87-4db8-bfd6-f9264414d8a7") + ) + (wire + (pts + (xy 214.63 52.07) (xy 218.44 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "850dbcf4-bb83-44bd-a9b7-a2e01166bf6b") + ) + (wire + (pts + (xy 121.92 105.41) (xy 109.22 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "856638f7-8d87-4f29-be80-21a6de350b96") + ) + (wire + (pts + (xy 100.33 52.07) (xy 104.14 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "883da1b8-f3ee-4786-8f30-96bed68ef80b") + ) + (wire + (pts + (xy 49.53 72.39) (xy 49.53 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "88d6c0e3-dcb3-4095-b07a-dd0142d9ff6b") + ) + (wire + (pts + (xy 138.43 72.39) (xy 138.43 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "88f65b62-da2b-4155-b12c-7d2a4dc403ca") + ) + (wire + (pts + (xy 138.43 92.71) (xy 138.43 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8b0e6882-7978-4303-8943-c715c542d0b2") + ) + (wire + (pts + (xy 74.93 44.45) (xy 74.93 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8daab8ca-6a72-4f5a-a058-6ede0e408de5") + ) + (wire + (pts + (xy 121.92 146.05) (xy 172.72 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "901aaf7e-0bb7-4618-9ef8-70cb458b71d9") + ) + (wire + (pts + (xy 214.63 52.07) (xy 214.63 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "92ec3a0c-ed25-4824-a17f-e1e5bc6175d0") + ) + (wire + (pts + (xy 151.13 52.07) (xy 154.94 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95d542e3-2637-4408-8f95-2caf46bd465d") + ) + (wire + (pts + (xy 189.23 113.03) (xy 193.04 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "99c7bdca-b702-4658-8a1b-ed137cd55625") + ) + (wire + (pts + (xy 189.23 44.45) (xy 189.23 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9adb3071-7561-443a-9d33-e2627ae5960f") + ) + (wire + (pts + (xy 100.33 52.07) (xy 100.33 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d9bba8f-2779-4846-a3ae-356ad63e3836") + ) + (wire + (pts + (xy 100.33 72.39) (xy 100.33 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0b093a9-3f2e-4fd0-8400-55c00b2c03b1") + ) + (wire + (pts + (xy 151.13 92.71) (xy 151.13 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0bae8f5-9c6c-4c7a-8fd5-416967159b25") + ) + (wire + (pts + (xy 49.53 52.07) (xy 53.34 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a1a86faf-20e5-4f06-8d35-5805e634cea4") + ) + (wire + (pts + (xy 214.63 44.45) (xy 214.63 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a1f70b95-6e02-4cfc-83f9-389791896706") + ) + (wire + (pts + (xy 189.23 52.07) (xy 193.04 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a5e13153-9bb4-4117-9999-b5118a097186") + ) + (wire + (pts + (xy 109.22 105.41) (xy 96.52 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a654ce6e-0a76-4e5a-9116-43f802ffbf45") + ) + (wire + (pts + (xy 83.82 146.05) (xy 121.92 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a700d69c-530d-4a4d-a15e-797f780f3ccb") + ) + (wire + (pts + (xy 227.33 92.71) (xy 227.33 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a719adc6-028d-4812-9ccd-d1c0e2dfe94e") + ) + (wire + (pts + (xy 138.43 72.39) (xy 142.24 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a74b7ea1-1b8c-4e36-877a-09dd2aec83f2") + ) + (wire + (pts + (xy 109.22 125.73) (xy 96.52 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a775deb5-f08c-4500-bf52-71ae83d0cc09") + ) + (wire + (pts + (xy 62.23 133.35) (xy 66.04 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a80bef15-5f00-477a-a099-d2e51ffc8ff9") + ) + (wire + (pts + (xy 172.72 105.41) (xy 160.02 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8cf104a-5c0e-42b4-b291-15d3a4d2467e") + ) + (wire + (pts + (xy 151.13 52.07) (xy 151.13 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8de5c9c-8409-437d-a097-10548c64eec1") + ) + (wire + (pts + (xy 125.73 113.03) (xy 125.73 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aaae26b1-468d-4561-bda2-a808d3f0cbb1") + ) + (wire + (pts + (xy 227.33 92.71) (xy 231.14 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "acb298b9-aad1-4dcf-9a86-ac80a6c65ed8") + ) + (wire + (pts + (xy 201.93 92.71) (xy 201.93 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad06bd9f-5774-43d4-ba05-281cf2a83414") + ) + (wire + (pts + (xy 210.82 85.09) (xy 198.12 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ade5741c-3ba3-4e67-af83-839faf7819ec") + ) + (wire + (pts + (xy 236.22 85.09) (xy 223.52 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ade5e348-6233-4962-8c96-d0a81c8184c1") + ) + (wire + (pts + (xy 71.12 64.77) (xy 83.82 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ae7a6ece-4e80-427f-ac42-48402b7aa78e") + ) + (wire + (pts + (xy 125.73 92.71) (xy 129.54 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af76f0fc-7bc8-4992-aea8-627808f233ad") + ) + (wire + (pts + (xy 62.23 92.71) (xy 62.23 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b11dfd35-34d8-4b99-be2f-6dbddcfafba2") + ) + (wire + (pts + (xy 189.23 113.03) (xy 189.23 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b13104f1-b8ba-4da3-9a03-a221c0b8b6d6") + ) + (wire + (pts + (xy 236.22 64.77) (xy 252.73 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2a828c7-0ccf-48fe-9409-c03cad6e3263") + ) + (wire + (pts + (xy 62.23 52.07) (xy 62.23 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b6963a04-9552-49e5-904e-cbd734e9242b") + ) + (wire + (pts + (xy 176.53 113.03) (xy 176.53 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b718def8-4847-422c-ac7c-39aa578cfe84") + ) + (wire + (pts + (xy 210.82 146.05) (xy 223.52 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b73ad922-62f0-4a64-aaa9-44503b1350b9") + ) + (wire + (pts + (xy 147.32 105.41) (xy 134.62 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7776fd6-86dc-4cfa-82f9-79bd3f155e6f") + ) + (wire + (pts + (xy 74.93 113.03) (xy 78.74 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7ccdc3c-7c1d-4b53-95a9-92b4c3cad403") + ) + (wire + (pts + (xy 113.03 133.35) (xy 116.84 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9aa1cea-7bd0-4dca-a010-412186b5baf3") + ) + (wire + (pts + (xy 218.44 113.03) (xy 214.63 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bcddac47-fa78-4f86-9bf2-b4e8727f59b5") + ) + (wire + (pts + (xy 227.33 52.07) (xy 231.14 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd19e4f1-85fe-482e-93b1-115bfaee6b17") + ) + (wire + (pts + (xy 193.04 92.71) (xy 189.23 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bde212d5-4bac-4fe7-bce9-e2a34b639041") + ) + (wire + (pts + (xy 49.53 113.03) (xy 49.53 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "be48e264-ba3a-4fba-ae1f-ee4ab90510af") + ) + (wire + (pts + (xy 163.83 44.45) (xy 163.83 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0401f20-59de-476f-9f52-dc951b2d1fa0") + ) + (wire + (pts + (xy 189.23 52.07) (xy 189.23 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c199442b-1e36-497c-a941-63ee237226a6") + ) + (wire + (pts + (xy 125.73 113.03) (xy 129.54 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c239db3e-a39c-4287-9225-d683c7d84a78") + ) + (wire + (pts + (xy 227.33 113.03) (xy 227.33 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2d39a48-54ce-434e-9737-c2c5ab2b3945") + ) + (wire + (pts + (xy 62.23 113.03) (xy 66.04 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c363fe1d-a5dc-4c8d-a06a-70834885ace4") + ) + (wire + (pts + (xy 138.43 92.71) (xy 142.24 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c47660f6-d88a-43a5-ba4c-c912812a7771") + ) + (wire + (pts + (xy 134.62 125.73) (xy 121.92 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c66dcc7f-2719-4005-b0e8-d9ae4773ee5d") + ) + (wire + (pts + (xy 151.13 113.03) (xy 154.94 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c732848c-94be-4583-bd12-7eade21bcc50") + ) + (wire + (pts + (xy 113.03 52.07) (xy 116.84 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c7538f56-1b89-4512-9670-d4e630fd3d55") + ) + (wire + (pts + (xy 87.63 92.71) (xy 87.63 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c7e41984-bec0-4e54-a170-e31b1d72c78e") + ) + (wire + (pts + (xy 74.93 92.71) (xy 78.74 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cc314889-264f-415d-820c-3cebfa12be56") + ) + (wire + (pts + (xy 184.15 113.03) (xy 189.23 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ce0f6e54-b588-46d7-abf5-e4686c5323a5") + ) + (wire + (pts + (xy 227.33 72.39) (xy 227.33 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cf6c6e94-fee6-4fa4-86c4-284cd2bc0080") + ) + (wire + (pts + (xy 163.83 52.07) (xy 163.83 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d00c0ac9-9209-4158-9b56-e4c4b17de626") + ) + (wire + (pts + (xy 185.42 105.41) (xy 172.72 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d1d04fa5-633c-4d14-88da-76ed28d91575") + ) + (wire + (pts + (xy 185.42 64.77) (xy 198.12 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3cc6147-c4e5-4c5c-b83b-5e665f61475b") + ) + (wire + (pts + (xy 62.23 44.45) (xy 62.23 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d48bbd29-b3ab-4bac-881f-fab1c56abaee") + ) + (wire + (pts + (xy 49.53 72.39) (xy 53.34 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d60a9b89-d86d-458b-a1c5-52b5d7d72202") + ) + (wire + (pts + (xy 163.83 92.71) (xy 167.64 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d9588689-2fd3-4231-915e-d93cf8d19cf4") + ) + (wire + (pts + (xy 189.23 72.39) (xy 193.04 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db6c645b-c720-44c4-8dad-f173fa52b8b0") + ) + (wire + (pts + (xy 125.73 52.07) (xy 125.73 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dcb2d6f4-fde2-40b6-beb0-0eedddfa7b58") + ) + (wire + (pts + (xy 83.82 146.05) (xy 71.12 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ddaf32b8-4e05-4241-84ed-6c1d7a7a7b26") + ) + (wire + (pts + (xy 185.42 125.73) (xy 172.72 125.73) + ) + (stroke + (width 0) + (type default) + ) + (uuid "de6c32c8-3c12-45b7-9fde-b1b93e5e899b") + ) + (wire + (pts + (xy 214.63 113.03) (xy 214.63 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dfe330e7-6171-40c9-9376-4c42b288522a") + ) + (wire + (pts + (xy 138.43 52.07) (xy 138.43 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e0c69e9f-2d12-4bc8-8001-13aacf5bb178") + ) + (wire + (pts + (xy 134.62 64.77) (xy 147.32 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e31cf5af-7b2c-43db-b0be-db25bd2a6b99") + ) + (wire + (pts + (xy 113.03 92.71) (xy 113.03 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3c2e960-2b44-48b6-a0cd-b5c320c3ba45") + ) + (wire + (pts + (xy 71.12 105.41) (xy 58.42 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3d88fe3-41dc-456d-ba56-a9b9a3b03143") + ) + (wire + (pts + (xy 189.23 133.35) (xy 193.04 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e4ac5713-ad3f-43d5-8405-42ad00f5f524") + ) + (wire + (pts + (xy 185.42 146.05) (xy 198.12 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e557c094-e751-40b6-b28e-c07f79f38720") + ) + (wire + (pts + (xy 49.53 92.71) (xy 49.53 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e583efb9-7643-48f8-966a-c51679fc6bb9") + ) + (wire + (pts + (xy 113.03 72.39) (xy 113.03 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e7732d82-24e2-477e-8cb9-a8416ea718de") + ) + (wire + (pts + (xy 74.93 92.71) (xy 74.93 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e8191d93-d5e1-475e-9666-7301c6bfaee7") + ) + (wire + (pts + (xy 100.33 72.39) (xy 104.14 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e9081966-1671-4051-bed1-0bf78a525612") + ) + (wire + (pts + (xy 172.72 85.09) (xy 160.02 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eac706d0-605a-47b3-8df5-6cb51d43e669") + ) + (wire + (pts + (xy 210.82 64.77) (xy 223.52 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb9cfb56-e97e-470a-9451-d673fe0e05dd") + ) + (wire + (pts + (xy 176.53 113.03) (xy 180.34 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eccf23dd-cdfd-4390-984d-001a65967ee3") + ) + (wire + (pts + (xy 49.53 52.07) (xy 49.53 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed0041da-0787-42a5-bba8-e81d1476569c") + ) + (wire + (pts + (xy 163.83 72.39) (xy 163.83 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed255bce-03e5-4be5-bd65-cdb3836650d3") + ) + (wire + (pts + (xy 113.03 92.71) (xy 116.84 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ed4d2d8d-5d84-4b57-8ec9-196c222ff289") + ) + (wire + (pts + (xy 62.23 92.71) (xy 66.04 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee905df0-8146-4f58-9098-5482a946be28") + ) + (wire + (pts + (xy 134.62 105.41) (xy 121.92 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f0a3cdf6-0318-49c0-b643-c07f6c3ee843") + ) + (wire + (pts + (xy 147.32 64.77) (xy 160.02 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f0fa991e-341b-44ff-9c80-3e81fc5b71e4") + ) + (wire + (pts + (xy 176.53 52.07) (xy 176.53 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1d22bcc-cad5-4b15-8bdf-2872cbf9cadc") + ) + (wire + (pts + (xy 210.82 105.41) (xy 236.22 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f261764a-655d-4e4a-adbe-a6c47a429c94") + ) + (wire + (pts + (xy 87.63 113.03) (xy 91.44 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3848af2-e5ed-4ff6-bee6-e8c74d94c5a6") + ) + (wire + (pts + (xy 87.63 92.71) (xy 91.44 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3a44785-41bd-4c2b-904f-4cff03bcfd6f") + ) + (wire + (pts + (xy 113.03 44.45) (xy 113.03 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f41cec9e-3b2b-437b-a85f-199637b7ed85") + ) + (wire + (pts + (xy 125.73 72.39) (xy 129.54 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5be099f-b74e-4ed1-b849-47dcdf7194a7") + ) + (wire + (pts + (xy 201.93 72.39) (xy 201.93 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f6c85c16-e2ef-487b-aad9-469af5ec6013") + ) + (wire + (pts + (xy 201.93 44.45) (xy 201.93 52.07) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f8445787-4861-4cfa-a73e-3cab8cf274ca") + ) + (wire + (pts + (xy 214.63 72.39) (xy 218.44 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f8c339fb-47af-471c-8dae-916f10726db1") + ) + (wire + (pts + (xy 176.53 92.71) (xy 176.53 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f98d8411-9d0d-4443-9d0c-06d8b2c57fd9") + ) + (wire + (pts + (xy 160.02 85.09) (xy 147.32 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa48e033-1bc2-43aa-83a1-2c1147ee5cd9") + ) + (wire + (pts + (xy 87.63 52.07) (xy 87.63 72.39) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fcad2da1-b55a-44e4-aa4c-e7385995e56a") + ) + (hierarchical_label "COL2" + (shape input) + (at 62.23 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "0d638ff9-1e2d-4d1b-a08d-13e04b388e8e") + ) + (hierarchical_label "COL4" + (shape input) + (at 87.63 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "2028b942-acc9-4267-9b23-4cdac642cf41") + ) + (hierarchical_label "ROW1" + (shape input) + (at 252.73 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "26754666-3507-43e9-bf86-d665877293fc") + ) + (hierarchical_label "COL7" + (shape input) + (at 125.73 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "27c615f6-7cb6-49a7-bd11-604ca77d43d7") + ) + (hierarchical_label "COL3" + (shape input) + (at 74.93 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "43cd5c07-c13e-4ddb-a8f7-14b0b1fb094f") + ) + (hierarchical_label "COL6" + (shape input) + (at 113.03 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "5945e3d9-c329-4266-b3e2-e3b8cc0695a5") + ) + (hierarchical_label "ROW4" + (shape input) + (at 252.73 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "5db8106a-ebe6-4c4b-907b-7f1e6b4f551b") + ) + (hierarchical_label "COL12" + (shape input) + (at 189.23 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "64966b4f-b7d3-48d6-bac9-5764f7ce8c0b") + ) + (hierarchical_label "ROW3" + (shape input) + (at 252.73 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "6b4e64f3-ab54-4759-a3d1-0828e8907158") + ) + (hierarchical_label "COL11" + (shape input) + (at 176.53 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "858b42f0-cc6e-4dd8-aabd-6547aadce565") + ) + (hierarchical_label "COL1" + (shape input) + (at 49.53 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "892cbdad-4e7d-484c-aa87-d425b42cb5d5") + ) + (hierarchical_label "COL13" + (shape input) + (at 201.93 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "9dc8d958-ef6a-494a-9db1-88723ba3f1ec") + ) + (hierarchical_label "COL10" + (shape input) + (at 163.83 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "ab34f660-09b2-4c4b-83a9-de23d620564b") + ) + (hierarchical_label "ROW2" + (shape input) + (at 252.73 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "b440b4fc-d5ec-40c1-adbe-3898968fb70d") + ) + (hierarchical_label "COL14" + (shape input) + (at 214.63 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "b8d1d667-f1e8-4248-ab65-e7c9244619fa") + ) + (hierarchical_label "COL9" + (shape input) + (at 151.13 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "cee98810-f1d4-4186-82d2-96e1643b3afa") + ) + (hierarchical_label "COL8" + (shape input) + (at 138.43 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "d6d20614-ea42-4e21-b40a-a97cf87d0712") + ) + (hierarchical_label "COL5" + (shape input) + (at 100.33 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "d8582c01-0124-464c-9786-8e833f183ccf") + ) + (hierarchical_label "COL15" + (shape input) + (at 227.33 44.45 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "e1ba43f8-a8f8-478a-ac50-33811fe975c0") + ) + (hierarchical_label "ROW5" + (shape input) + (at 254 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "fbe88670-efa7-44d9-9696-7f00ecf1c90d") + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 132.08 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "02255c50-9541-4a4e-8128-e26d76564da5") + (property "Reference" "KEY_N1" + (at 132.08 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 132.08 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 132.08 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 132.08 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "628521a7-b54e-496e-b047-683114530aed") + ) + (pin "2" + (uuid "01c4e4b1-c386-4531-bb22-fcda2ac620d9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_N1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 170.18 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "043b4c08-e75e-486b-8f3c-9976f9ff7775") + (property "Reference" "KEY_O1" + (at 170.18 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 170.18 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 170.18 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 170.18 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 170.18 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3885d20f-3c77-4b80-ac62-12e31a737eb0") + ) + (pin "2" + (uuid "5df8c2af-1689-43b6-a30d-6aef4a5b2112") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_O1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 144.78 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0597a794-f525-4b57-abfb-465b30ce6bc3") + (property "Reference" "KEY_J1" + (at 144.78 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 144.78 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 144.78 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 144.78 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 144.78 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "37601719-53a6-4df3-8c26-307258646459") + ) + (pin "2" + (uuid "af290bd6-4a30-4733-8b1f-ced486cbc8ac") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 170.18 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "09d4b3fe-3b61-4b67-9444-73d0f0442f56") + (property "Reference" "KEY_ALT2" + (at 170.18 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 170.18 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 170.18 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 170.18 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 170.18 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "430d4b29-5305-4d7e-a0cd-033cb0f9f06b") + ) + (pin "2" + (uuid "6f94a1c1-de62-461a-9c9a-49de11391b88") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_ALT2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 236.22 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "09e4c03e-af71-4268-a862-17e1a98b74b1") + (property "Reference" "D35" + (at 229.616 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 232.156 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 236.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 236.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 236.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a8f60c4f-5f54-43eb-9db8-31b5ede23b45") + ) + (pin "2" + (uuid "ea4d5872-3833-4134-b7e1-7c94307338e4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D35") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 121.92 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0a363a6f-576c-4529-9bac-5bfb55d26551") + (property "Reference" "D68" + (at 115.316 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 117.856 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 121.92 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 121.92 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 121.92 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5dec2bb0-9553-4c34-917d-c98219345ff0") + ) + (pin "2" + (uuid "6d3c4800-7941-4552-bb80-1e7f4a6fd9e1") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D68") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 71.12 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0b3bfe08-f3f3-4fed-8478-ac0aa3079848") + (property "Reference" "D36" + (at 64.516 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 67.056 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 71.12 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 71.12 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 71.12 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c85a2959-ee74-463c-a9a5-1c7ff4bd3f20") + ) + (pin "2" + (uuid "9f6096fa-d75e-4972-8d98-4472a2a5c98c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 81.28 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "108dd771-9fdc-4d98-b67e-475219c6b109") + (property "Reference" "KEY_ALT1" + (at 81.28 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 81.28 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" +======= + (property "Footprint" "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" +>>>>>>> hardware-65percent + (at 81.28 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 81.28 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 81.28 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3182483a-dbd1-4f31-aa73-fa58d4d497a7") + ) + (pin "2" + (uuid "132209ad-77ff-4bf4-b1ea-b468ba8ef009") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_ALT1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 134.62 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "14726d6e-d39b-4871-826a-db6592452b58") + (property "Reference" "D27" + (at 128.016 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 130.556 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 134.62 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 134.62 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 134.62 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d292d57a-c386-4a62-bdc9-07cb58be5810") + ) + (pin "2" + (uuid "b41a7296-4790-4671-b2df-c8ba1a800801") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 220.98 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "14fbde30-fcf0-45c1-8bbe-09997c5d9c7b") + (property "Reference" "KEY_\\1" + (at 220.98 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 220.98 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" +======= + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1.5u" +>>>>>>> hardware-65percent + (at 220.98 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 220.98 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1e7f054a-bd67-4ffa-958f-3f2b6d473d7c") + ) + (pin "2" + (uuid "5adc259e-894f-469f-b6a4-deb14129b83b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_\\1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 233.68 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "14fbde30-fcf0-45c1-8bbe-09997c5d9c7c") + (property "Reference" "KEY_PGDN1" + (at 233.68 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 233.68 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 233.68 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 233.68 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 233.68 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1e7f054a-bd67-4ffa-958f-3f2b6d473d7d") + ) + (pin "2" + (uuid "5adc259e-894f-469f-b6a4-deb14129b83c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_PGDN1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 233.68 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "14fbde30-fcf0-45c1-8bbe-09997c5d9c7d") + (property "Reference" "KEY_RARROW1" + (at 233.68 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 233.68 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 233.68 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 233.68 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 233.68 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1e7f054a-bd67-4ffa-958f-3f2b6d473d7e") + ) + (pin "2" + (uuid "5adc259e-894f-469f-b6a4-deb14129b83d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_RARROW1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 160.02 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "16f03836-171f-40a5-8203-d1d7fb55edd7") + (property "Reference" "D11" + (at 153.416 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 155.956 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 160.02 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 160.02 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 160.02 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "405aec47-3745-4e16-898f-8f3bb3013e69") + ) + (pin "2" + (uuid "b1202e74-ed48-4101-98c5-65444c5f8f53") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 96.52 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "180d7e52-c39f-40dc-88b7-b6c21a74c0ee") + (property "Reference" "D52" + (at 89.916 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 92.456 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 96.52 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 96.52 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 96.52 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c02991f9-a961-484e-ad79-a9a60e8de784") + ) + (pin "2" + (uuid "7f34f201-9984-4eda-af0b-fed406c17560") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D52") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 198.12 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1945bc0d-d7ba-4a80-8dd3-519b10c8a830") + (property "Reference" "D60" + (at 191.516 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 194.056 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 198.12 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 198.12 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 198.12 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "59da3a95-f52b-45d1-8a0d-4d507064c098") + ) + (pin "2" + (uuid "b3b27365-eec1-435d-a625-7c3db442829e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D60") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 182.88 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1acd68f4-0c4e-42ad-b96b-3e6e99a4c157") + (property "Reference" "KEY_0" + (at 182.88 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 182.88 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 182.88 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 182.88 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 182.88 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e901014d-8c8c-42c8-abfb-82185fda79d3") + ) + (pin "2" + (uuid "55884e9a-7cbb-4100-8bb3-3edf5976ad1a") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_0") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 147.32 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1d858e45-2ad9-4e53-99d0-697d505b86ea") + (property "Reference" "D28" + (at 140.716 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 143.256 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 147.32 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 147.32 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 147.32 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "00153390-ba60-437b-9b50-944dea292f04") + ) + (pin "2" + (uuid "aca67daf-fe25-4a41-9bd3-dc8bb240d512") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 195.58 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1dd40309-298b-4501-a09d-5becae1ca2ba") + (property "Reference" "KEY_[1" + (at 195.58 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 195.58 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 195.58 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 195.58 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd052a3a-a822-4b13-896e-3487ae7250d8") + ) + (pin "2" + (uuid "1d822ce7-7596-48ea-ba18-10209ee143e4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_[1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 208.28 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1dd40309-298b-4501-a09d-5becae1ca2bb") + (property "Reference" "KEY_DARROW1" + (at 208.28 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 208.28 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 208.28 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 208.28 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 208.28 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd052a3a-a822-4b13-896e-3487ae7250d9") + ) + (pin "2" + (uuid "1d822ce7-7596-48ea-ba18-10209ee143e5") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_DARROW1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 195.58 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "1dd40309-298b-4501-a09d-5becae1ca2bc") + (property "Reference" "KEY_SHIFT2" + (at 195.58 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 195.58 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" +======= + (property "Footprint" "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.75u" +>>>>>>> hardware-65percent + (at 195.58 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 195.58 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd052a3a-a822-4b13-896e-3487ae7250da") + ) + (pin "2" + (uuid "1d822ce7-7596-48ea-ba18-10209ee143e6") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_SHIFT2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 198.12 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1e170ac8-3bf7-41a0-95a8-1f51035ff9da") + (property "Reference" "D32" + (at 191.516 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 194.056 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 198.12 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 198.12 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 198.12 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "762ae907-e7ba-483a-b24d-d019703f6c18") + ) + (pin "2" + (uuid "6e7e7090-5b6f-4479-9adc-52a57333860c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D32") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 185.42 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1fb95f57-ac9c-4e69-b710-a64cc33cc33a") + (property "Reference" "D72" + (at 178.816 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 181.356 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 185.42 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 185.42 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 185.42 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "88061b34-4c0a-4eac-bddf-f10b41600ff1") + ) + (pin "2" + (uuid "9d87c15c-590c-40ce-b499-37934a0d4b2d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D72") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 147.32 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1ff6c01f-4fc2-4cc9-a30a-eb864a33da13") + (property "Reference" "D56" + (at 140.716 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 143.256 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 147.32 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 147.32 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 147.32 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7f19bc17-dae1-42eb-9e90-de1e889eb704") + ) + (pin "2" + (uuid "177ef37a-bfef-400e-83aa-2fe6cb7cf30d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D56") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 106.68 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "21f5103d-2e6f-41d2-923a-8b8578075138") + (property "Reference" "KEY_4" + (at 106.68 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 106.68 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 106.68 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 106.68 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 106.68 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5fc06338-5d03-4915-8cd0-d33ee6afa005") + ) + (pin "2" + (uuid "f378510d-56d8-4de7-b295-40d1b024065e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 157.48 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2b0de133-597f-4400-b031-7a366dcf2cd4") + (property "Reference" "KEY_I1" + (at 157.48 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 157.48 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 157.48 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 157.48 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1be2712e-5e4c-429f-a056-8f497c9f5c4c") + ) + (pin "2" + (uuid "5d6eabf0-5ff0-4676-aac8-5522b499d412") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_I1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 81.28 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2d74cd29-2d82-437f-bd19-6aecdc773ddd") + (property "Reference" "KEY_2" + (at 81.28 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 81.28 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 81.28 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 81.28 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 81.28 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5576e408-519d-41da-8e2a-204eb2e20687") + ) + (pin "2" + (uuid "ab98870d-031b-4e7d-a088-f271956e53f8") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 157.48 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "305fe994-b92b-4ddf-ae76-d7eba277037a") + (property "Reference" "KEY_8" + (at 157.48 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 157.48 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 157.48 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 157.48 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "90917779-3045-40e0-a1b9-c3148c513f10") + ) + (pin "2" + (uuid "bf6e56b6-ffb3-435a-9d46-54c9a9a4aa43") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 233.68 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "31fef54c-7cf1-41c0-a9c3-938a5f3bde9a") + (property "Reference" "KEY_PGUP1" + (at 233.68 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 233.68 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 233.68 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 233.68 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 233.68 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6dc08750-a24d-4844-8906-a2ce51852242") + ) + (pin "2" + (uuid "8f28e035-04b4-4b0a-941e-eeb8e6600df6") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_PGUP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 144.78 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "344142d6-2fc2-4166-99ca-dda54f2708af") + (property "Reference" "KEY_7" + (at 144.78 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 144.78 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 144.78 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "75d9266d-5a06-4401-bf89-ced216f7741b") + ) + (pin "2" + (uuid "7bd4b231-ee1f-4672-8ff6-c98f6bd6dd1d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 220.98 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3726ef7e-8afd-459b-884b-3e88792abe5b") + (property "Reference" "KEY_BKSP1" + (at 220.98 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 220.98 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 220.98 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 220.98 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4360acc1-db34-4925-bbb4-530a58bc5ece") + ) + (pin "2" + (uuid "c2f184ce-4b71-404c-99ca-cd1ea2e036d5") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_BKSP1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 55.88 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "380eb14e-171a-477c-b03e-86a44aefe3d2") + (property "Reference" "KEY_CTRL1" + (at 55.88 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 55.88 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" +======= + (property "Footprint" "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" +>>>>>>> hardware-65percent + (at 55.88 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 55.88 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 55.88 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c0d729c1-ac81-4cb8-ae34-99a2560e42ce") + ) + (pin "2" + (uuid "74c69012-0a1b-4703-bd23-183c97003b3d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_CTRL1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 68.58 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "39d05977-3390-46a5-96dd-b289ba8a83e1") + (property "Reference" "KEY_A1" + (at 68.58 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 68.58 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 68.58 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 68.58 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 68.58 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "083c27c9-7903-4246-a086-b0755f558be1") + ) + (pin "2" + (uuid "4c1b11d0-a1fa-472b-ae90-70df47d39063") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_A1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 106.68 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3a3cd4c8-3543-415b-a012-44b07239b42f") + (property "Reference" "KEY_V1" + (at 106.68 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 106.68 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 106.68 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 106.68 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 106.68 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7cc32efe-a0e2-41ab-8077-cbbbb4e0415c") + ) + (pin "2" + (uuid "dd648239-e047-4d44-afb6-dd2b678275f8") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_V1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 93.98 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3a475896-f033-43a1-8bf2-5cdfa34f78c6") + (property "Reference" "KEY_E1" + (at 93.98 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 93.98 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 93.98 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 93.98 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 93.98 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "00b8f484-e758-4bc7-8b2f-5798d62fc5c3") + ) + (pin "2" + (uuid "c67b391e-9188-4bb7-9469-e07ddd3d3cbc") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_E1") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 220.98 99.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3b0fe831-c96e-4972-adb6-502d33f9c459") + (property "Reference" "EnterStab1" + (at 217.17 91.694 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 217.17 94.234 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2.25u" + (at 220.98 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 220.98 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 220.98 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "EnterStab1") + (unit 1) + ) + ) + ) + ) + (symbol +======= +>>>>>>> hardware-65percent + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 208.28 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3cf9fbea-b5dc-4161-a2f5-9f1be7e51bb2") + (property "Reference" "KEY_ENTER1" + (at 208.28 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 208.28 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 208.28 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 208.28 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 208.28 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "af291d1a-ab9b-4365-ab31-1ee6b98f9f45") + ) + (pin "2" + (uuid "e4398ea2-1527-400f-b4c4-c7e6b317895b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_ENTER1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 106.68 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3e9a8615-c20c-4dae-b43f-78355668bbeb") + (property "Reference" "KEY_F1" + (at 106.68 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 106.68 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 106.68 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 106.68 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 106.68 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "db91b646-f539-4865-8e81-3bd9d37019a7") + ) + (pin "2" + (uuid "117a39fe-fff5-48cf-bc90-2a2ec42ae2ff") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_F1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 58.42 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3eb42fb2-d4e6-467b-82e7-7335dd9c39b9") + (property "Reference" "D19" + (at 51.816 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 54.356 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 58.42 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 58.42 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 58.42 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3bacdd22-b5ed-4c4e-b099-98350c1bb029") + ) + (pin "2" + (uuid "afd238fb-6179-4237-92cc-b6bbbb6faf53") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 208.28 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3f62ea02-8087-4482-8a14-2c5cf7286453") + (property "Reference" "KEY_]1" + (at 208.28 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 208.28 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 208.28 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 208.28 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 208.28 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7031c839-9c70-4740-a9ea-3105aa0ab388") + ) + (pin "2" + (uuid "ef050528-d55c-4bbc-89bd-3e966f22e099") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_]1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 220.98 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3f62ea02-8087-4482-8a14-2c5cf7286454") + (property "Reference" "KEY_UARROW1" + (at 220.98 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 220.98 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 220.98 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 220.98 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7031c839-9c70-4740-a9ea-3105aa0ab389") + ) + (pin "2" + (uuid "ef050528-d55c-4bbc-89bd-3e966f22e09a") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_UARROW1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 220.98 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3f62ea02-8087-4482-8a14-2c5cf7286455") + (property "Reference" "KEY_DARROW2" + (at 220.98 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 220.98 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 220.98 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 220.98 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 220.98 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7031c839-9c70-4740-a9ea-3105aa0ab38a") + ) + (pin "2" + (uuid "ef050528-d55c-4bbc-89bd-3e966f22e09b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_DARROW2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 144.78 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4306a544-070b-4617-8f9f-f4ae4aaa3f27") + (property "Reference" "KEY_U1" + (at 144.78 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 144.78 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 144.78 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 144.78 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 144.78 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5e3355f3-13d9-4383-8fab-82d50750aa46") + ) + (pin "2" + (uuid "8bc7cf61-9989-48d9-9de0-ab5265511512") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 121.92 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "46b714f1-462a-4a6e-82f1-abc04220794c") + (property "Reference" "D26" + (at 115.316 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 117.856 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 121.92 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 121.92 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 121.92 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "56610e7a-f0ad-4103-bb6a-96706cbd96f0") + ) + (pin "2" + (uuid "a0c3f134-0344-42f9-a221-875de1e820ad") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D26") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 143.51 139.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4855a906-bd2d-486f-983f-04048973e572") + (property "Reference" "Space_Stab1" + (at 149.86 138.3029 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 149.86 140.8429 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_6.25u" + (at 143.51 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 143.51 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 143.51 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "Space_Stab1") + (unit 1) + ) + ) + ) + ) + (symbol +======= +>>>>>>> hardware-65percent + (lib_id "PCM_Diode_AKL:1N4148W") + (at 198.12 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4ca68793-fbf6-4f2c-905f-275d87d5ba29") + (property "Reference" "D73" + (at 191.516 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 194.056 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 198.12 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 198.12 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 198.12 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8a41f3fd-8dcf-414a-8ab9-b765e8010b47") + ) + (pin "2" + (uuid "edfe0918-598f-48de-bb7f-cfe9d11c7abc") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D73") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 195.58 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4d3d51a0-9b43-4fb6-b8b4-a7e468fb32ed") + (property "Reference" "KEY_'1" + (at 195.58 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 195.58 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 195.58 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 195.58 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fcb90346-ba81-49e7-8422-0c5f2f379a9a") + ) + (pin "2" + (uuid "cea4f7d6-ea8b-4fb7-9450-6df2a1ea05eb") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_'1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 55.88 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4e8d21a3-bca3-4293-acd4-2a29e96b4ab4") + (property "Reference" "KEY_ESC1" + (at 55.88 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 55.88 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 55.88 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 55.88 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 55.88 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "dc60b1ea-e958-4da3-9011-24d35263f159") + ) + (pin "2" + (uuid "a68c81c4-4976-478c-be0e-c758cecd1be3") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_ESC1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 170.18 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4f9b55c3-88ac-4875-9d67-a09732fedfde") + (property "Reference" "KEY_L1" + (at 170.18 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 170.18 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 170.18 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 170.18 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 170.18 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "dc272729-0921-4e6f-8341-c6c2b6d6f798") + ) + (pin "2" + (uuid "8a11cc37-23c5-4bd7-b213-c27cbc517a84") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_L1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 68.58 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "52184e44-813e-453e-a209-b17b8c4ef315") + (property "Reference" "KEY_1" + (at 68.58 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 68.58 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 68.58 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 68.58 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 68.58 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "76019ddd-344b-4804-a291-ce52dcac25ca") + ) + (pin "2" + (uuid "9320df5c-83ce-4c9e-b4ac-a2b812db8038") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 93.98 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "52184e44-813e-453e-a209-b17b8c4ef316") + (property "Reference" "KEY_3" + (at 93.98 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 93.98 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 93.98 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 93.98 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 93.98 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "76019ddd-344b-4804-a291-ce52dcac25cb") + ) + (pin "2" + (uuid "9320df5c-83ce-4c9e-b4ac-a2b812db8039") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 236.22 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "541ba844-7e6b-4079-bc16-7a53d5906d08") + (property "Reference" "D48" + (at 229.616 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 232.156 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 236.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 236.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 236.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3200c3d6-cd5c-40fd-839c-16d84671b2fc") + ) + (pin "2" + (uuid "bf237dbd-2526-4aa6-8bee-1769ece59e07") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D48") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 83.82 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "54df50b9-06c0-4bad-969c-c536a768ae38") + (property "Reference" "D23" + (at 77.216 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 79.756 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 83.82 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 83.82 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 83.82 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e36256c2-bb04-44d5-88ab-a218a1debfbf") + ) + (pin "2" + (uuid "d60fb856-1d79-44d7-9ed8-06a2bcfe6561") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 132.08 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5a35b730-0a11-44e1-a4e8-f548e09e8d77") + (property "Reference" "KEY_H1" + (at 132.08 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 132.08 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 132.08 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 132.08 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b407828d-fa22-480e-9996-06bde6ae455a") + ) + (pin "2" + (uuid "ef4fee7b-4361-4ec0-82fd-ecdfc089b679") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 132.08 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "61323b9c-135f-4d63-be56-48f93becf527") + (property "Reference" "KEY_6" + (at 132.08 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 132.08 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 132.08 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 132.08 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a02013cd-f49a-4b23-a33b-3500053289d3") + ) + (pin "2" + (uuid "4e2c12fc-e1d5-4718-bffc-7e9b53a63138") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 233.68 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "63bbd4f2-b72e-4169-844f-dc300c927600") + (property "Reference" "KEY_HOME1" + (at 233.68 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 233.68 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 233.68 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 233.68 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 233.68 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "005e7534-b23b-4594-b295-b45d273c059f") + ) + (pin "2" + (uuid "43635eb4-1175-4cf7-8b5c-8b9a7a6c1784") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_HOME1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 134.62 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "67841535-19c4-4d15-9cfe-ce11e23a842e") + (property "Reference" "D41" + (at 128.016 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 130.556 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 134.62 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 134.62 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 134.62 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7ef34d6a-0a50-4081-b1c6-60e4aa3b9ba8") + ) + (pin "2" + (uuid "94de503e-0a52-4607-b377-a03cbe2d7704") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 134.62 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6932fc9c-c7e7-4ac0-a0d4-8942e8e51094") + (property "Reference" "D9" + (at 128.016 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 130.556 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 134.62 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 134.62 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 134.62 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "18f81c18-d7e7-46f0-a96e-a56f1b75c6d8") + ) + (pin "2" + (uuid "80986207-cc92-4b64-8277-826e568909c2") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 198.12 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "69e51b39-5aa8-4d6c-943d-155a3c196fea") + (property "Reference" "D46" + (at 191.516 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 194.056 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 198.12 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 198.12 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 198.12 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "377d74b2-4f53-44d9-b6cc-95d1f296f90a") + ) + (pin "2" + (uuid "26d756ea-a861-4536-874f-b919fba3fd78") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D46") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 185.42 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6a4c873b-9302-4d0b-ab6e-4b2daf93931a") + (property "Reference" "D59" + (at 178.816 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 181.356 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 185.42 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 185.42 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 185.42 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "887f45a6-339c-4010-a75b-3979c481956f") + ) + (pin "2" + (uuid "6ba9f59a-c186-4b3e-8212-416fce30ff41") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D59") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 58.42 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6b652fac-8a47-48a6-a903-a055f6d384b8") + (property "Reference" "D21" + (at 51.816 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 54.356 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 58.42 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 58.42 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 58.42 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c19c07d3-09bc-4556-981c-e1e3fe21d137") + ) + (pin "2" + (uuid "62ecd01f-643e-486d-91dd-2aecba64154c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 182.88 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6ed96fd9-9df8-42c9-ac6e-ab987e9697f0") + (property "Reference" "KEY_;1" + (at 182.88 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 182.88 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 182.88 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 182.88 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 182.88 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "eb12649e-d5eb-49b5-a9b6-04e858634717") + ) + (pin "2" + (uuid "ffdf25bf-100c-4da5-9a03-7af25ad67bff") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_;1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 236.22 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "74706b6a-3e0b-4fa3-9f53-54509b6a0535") + (property "Reference" "D17" + (at 229.616 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 232.156 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 236.22 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 236.22 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 236.22 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7d6e3b75-d9da-4d96-b845-630aad181d20") + ) + (pin "2" + (uuid "d8032176-ce98-4d0d-91bd-ea9be23e4fed") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 58.42 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "77820fff-4086-4b1b-a884-b7719eab8b23") + (property "Reference" "D20" + (at 51.816 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 54.356 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 58.42 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 58.42 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 58.42 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b6225652-2d77-4678-8cd9-b147255b6046") + ) + (pin "2" + (uuid "aff4269e-c12b-45b7-9329-4c1e85aa0782") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 198.12 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7a615478-d7b3-4edb-9516-020408805d18") + (property "Reference" "D14" + (at 191.516 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 194.056 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 198.12 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 198.12 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 198.12 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0a68fbd7-417f-41df-b2cb-32e119f6d2f6") + ) + (pin "2" + (uuid "3d827b2b-aa13-4f28-93f4-57d5f02b17a2") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 182.88 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7bb0381f-38aa-46b7-a1d3-a04770ca9b6d") + (property "Reference" "KEY_FN1" + (at 182.88 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 182.88 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 182.88 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 182.88 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 182.88 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8d8163c3-452d-4628-bc64-694f1f051196") + ) + (pin "2" + (uuid "880a2002-faad-4883-b93e-cc6b3a619dd9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_FN1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 83.82 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7def791e-5a67-41d7-b347-c3f9a299b5a3") + (property "Reference" "D65" + (at 77.216 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 79.756 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 83.82 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 83.82 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 83.82 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "438fc89b-e776-4009-b6ed-b84c6da8bfdd") + ) + (pin "2" + (uuid "a342e0fb-1e2b-452d-9d88-c15bc1945675") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D65") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 96.52 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7e3a58d6-c4e1-41ce-b74e-eeedc486ae3f") + (property "Reference" "D6" + (at 89.916 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 92.456 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" +======= + (property "Footprint" "PCM_Diode_THT_AKL:D_DO-35_SOD27_P7.62mm_Horizontal" +>>>>>>> hardware-65percent + (at 96.52 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 96.52 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 96.52 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "23ddf2fd-d0af-41f7-969d-2014c943160d") + ) + (pin "2" + (uuid "967bd345-362f-4175-9c32-cb92e45ff29e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 109.22 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "803e7a88-32d5-4661-8d1b-777196178dcb") + (property "Reference" "D25" + (at 102.616 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 105.156 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 109.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 109.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 109.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "91623c98-15a2-41c2-ac2e-2fcee9ba2303") + ) + (pin "2" + (uuid "d5d225fe-1334-434c-b04e-d0785f45f049") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 68.58 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "80561787-b883-41f7-b3b7-f2ffb5d53dec") + (property "Reference" "KEY_Q1" + (at 68.58 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 68.58 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 68.58 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 68.58 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 68.58 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "37f2a6cb-5462-4a4c-92eb-3654b257097b") + ) + (pin "2" + (uuid "f00bfaa0-06a2-4069-911d-9363f0a36599") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_Q1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 172.72 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8115d332-6670-4e74-a75f-1ab5d151c36d") + (property "Reference" "D58" + (at 166.116 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 168.656 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 172.72 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 172.72 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 172.72 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fb0541cc-315e-4416-a428-bcc063cd37ae") + ) + (pin "2" + (uuid "18f3228b-da5b-43de-8c21-91864c5ae5f0") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D58") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 68.58 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "845bb780-6e16-47cd-a15e-538adef12cb0") + (property "Reference" "KEY_WIN1" + (at 68.58 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 68.58 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" +======= + (property "Footprint" "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" +>>>>>>> hardware-65percent + (at 68.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 68.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 68.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "de1bde1c-9843-4447-9289-dae3d892e6c9") + ) + (pin "2" + (uuid "24357f08-3aae-4878-8a7d-0ba46f58c3ec") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_WIN1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 83.82 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "84c5f039-5f78-4b24-affa-912977ae302e") + (property "Reference" "D51" + (at 77.216 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 79.756 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 83.82 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 83.82 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 83.82 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "87152a46-d5f4-4050-84c5-21d97ed50fb6") + ) + (pin "2" + (uuid "33f01af7-258e-4aac-981a-ee95bef4c1e7") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D51") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 223.52 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8852f500-0eda-428e-83a3-759aec3e9d89") + (property "Reference" "D16" + (at 216.916 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 219.456 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 223.52 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 223.52 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 223.52 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1e4e43c2-7192-4371-bcdd-eb4f373b334c") + ) + (pin "2" + (uuid "d17efe09-e809-4e8c-b533-25372e39c463") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 119.38 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "898b4b3a-d7ad-4f6e-9f2a-c5cc8f257216") + (property "Reference" "KEY_G1" + (at 119.38 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 119.38 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 119.38 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 119.38 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fa0676ee-a29d-460e-8787-0e0212613fa0") + ) + (pin "2" + (uuid "2d511b4c-4166-4e42-b614-66497477595a") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_G1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 119.38 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8b849530-a851-4c47-abbd-b8c147aca44c") + (property "Reference" "KEY_T1" + (at 119.38 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 119.38 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 119.38 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 119.38 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4cce048f-c220-40de-b47e-43939f37ec93") + ) + (pin "2" + (uuid "9f8421ae-9f06-42ff-b3bb-d07f6206f14d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_T1") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD +======= + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 208.28 116.84 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8d5b1b13-433e-4172-99dd-087f80a0e93a") + (property "Reference" "S3" + (at 206.756 109.22 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 206.756 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2u" + (at 208.28 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 208.28 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 208.28 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "S3") + (unit 1) + ) + ) + ) + ) + (symbol +>>>>>>> hardware-65percent + (lib_id "PCM_Diode_AKL:1N4148W") + (at 71.12 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8dd52d64-57c0-4a4a-8b34-1f152207bb6d") + (property "Reference" "D64" + (at 64.516 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 67.056 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 71.12 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 71.12 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 71.12 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "367f20d0-da54-4d3c-9c7f-5c440827bdd2") + ) + (pin "2" + (uuid "2eeedfc8-f356-4a50-8762-377eb18f0a70") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D64") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 121.92 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8dfe5ea9-ccb7-4e15-bde7-2d243cea9ebc") + (property "Reference" "D54" + (at 115.316 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 117.856 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 121.92 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 121.92 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 121.92 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "83e54472-7754-4eda-9ba6-a358e1989887") + ) + (pin "2" + (uuid "30045306-0305-4a86-ab28-53560fcbcf68") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D54") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 236.22 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8eec45c1-7516-42ab-85ef-c683a28ad203") + (property "Reference" "D62" + (at 229.616 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 232.156 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 236.22 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 236.22 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 236.22 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5f8adb03-ab63-4a8f-b6de-e49d4f86c915") + ) + (pin "2" + (uuid "5a95af04-9f15-4bbc-9fd7-5d3b473598b1") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D62") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 223.52 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8f1aea71-94bd-4342-9abf-971a8be1a4c8") + (property "Reference" "D75" + (at 216.916 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 219.456 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 223.52 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 223.52 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 223.52 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d3f7ab88-dbd1-4a2d-8339-171cf655b1bf") + ) + (pin "2" + (uuid "4ec2cf16-4664-4b24-8ee8-8aceff369e88") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D75") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 157.48 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "8fdda033-c0f1-4c53-bec7-e3847dba47ce") + (property "Reference" "KEY_,1" + (at 157.48 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 157.48 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 157.48 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 157.48 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b8f85c2e-eabf-4af2-9b28-173babc031ba") + ) + (pin "2" + (uuid "93c3ab46-f590-412c-abb3-33e9d29bc7e4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_,1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 109.22 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "92ba53dd-9dc7-41fe-93ac-26128165abf8") + (property "Reference" "D7" + (at 102.616 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 105.156 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 109.22 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 109.22 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 109.22 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e4f2a31c-afb7-4bd8-b587-e4b05565a91a") + ) + (pin "2" + (uuid "ef8b9b55-4e26-4a97-9d06-628995aa4c9e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_stab") +<<<<<<< HEAD + (at 39.37 120.65 0) +======= + (at 35.56 124.46 0) +>>>>>>> hardware-65percent + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) +<<<<<<< HEAD + (uuid "93c7c81f-a3ab-4c0b-bb9d-73eae870398b") + (property "Reference" "LeftStab1" + (at 35.56 113.284 0) +======= + (fields_autoplaced yes) + (uuid "93b94b08-0cc9-494f-899a-9d796e095412") + (property "Reference" "S1" + (at 41.91 123.0629 0) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" +<<<<<<< HEAD + (at 35.56 115.824 0) +======= + (at 41.91 125.6029 0) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2.25u" + (at 39.37 120.65 0) +======= + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_2.25u" + (at 35.56 124.46 0) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" +<<<<<<< HEAD + (at 39.37 120.65 0) +======= + (at 35.56 124.46 0) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" +<<<<<<< HEAD + (at 39.37 120.65 0) +======= + (at 35.56 124.46 0) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances +<<<<<<< HEAD + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "LeftStab1") +======= + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "S1") +>>>>>>> hardware-65percent + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 172.72 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "94ea4fd3-2048-4ef0-968f-57ba8c32036f") + (property "Reference" "D44" + (at 166.116 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 168.656 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 172.72 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 172.72 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 172.72 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "a52f7b92-0989-47bc-ab84-bb0fdbfecee7") + ) + (pin "2" + (uuid "28a9e16a-cc81-4728-9302-85ad53fab710") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D44") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 109.22 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9528b07a-bb2c-4b7a-a539-c673c2b5543a") + (property "Reference" "D39" + (at 102.616 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 105.156 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 109.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 109.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 109.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "adc79ae8-833a-40fb-ac1f-356c2e63170a") + ) + (pin "2" + (uuid "af3ba6e6-af41-44b0-a9fb-0f0d926c3e0f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D39") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 81.28 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "96531bac-f062-4e6f-90d0-203332849f6c") + (property "Reference" "KEY_S1" + (at 81.28 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 81.28 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 81.28 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 81.28 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 81.28 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bf2432a9-8517-4ffd-8882-278792862c85") + ) + (pin "2" + (uuid "bfacc4f8-45d4-4e4f-b962-494d9dd4fabf") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_S1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 119.38 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "982cf5c3-8db9-4e96-b717-e55e7261bc70") + (property "Reference" "KEY_SPACE1" + (at 119.38 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 119.38 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" +======= + (property "Footprint" "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX_Plated_1.25u" +>>>>>>> hardware-65percent + (at 119.38 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 119.38 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "fd2ecca1-62ff-4c26-8583-c775cdbf440c") + ) + (pin "2" + (uuid "6fe7071c-95ff-4eb9-92bd-4bd39993dd46") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_SPACE1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 185.42 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9b4b8da2-8be9-424c-9089-3ef14a7affd4") + (property "Reference" "D45" + (at 178.816 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 181.356 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 185.42 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 185.42 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 185.42 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b693a5ec-8fd9-4d98-9069-a26e3d4f5c49") + ) + (pin "2" + (uuid "746fa7a8-80fb-406d-8bfb-35a5d46dc58f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D45") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 246.38 58.42 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a2b98e94-7be3-4f0b-98df-c7d15757aad5") + (property "Reference" "BackspStab1" + (at 242.57 51.054 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 242.57 53.594 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2u" + (at 246.38 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 246.38 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 246.38 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "BackspStab1") + (unit 1) + ) + ) + ) + ) + (symbol +======= +>>>>>>> hardware-65percent + (lib_id "PCM_Diode_AKL:1N4148W") + (at 223.52 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a384e94d-f214-490d-a267-f230bd022f73") + (property "Reference" "D34" + (at 216.916 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 219.456 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 223.52 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 223.52 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 223.52 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9adbefde-2d32-4d4c-b955-deda907b22e7") + ) + (pin "2" + (uuid "e079c105-7992-4ec3-af3e-fcd62de98226") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D34") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 210.82 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a3c03817-1fec-4730-beaa-6044544092df") + (property "Reference" "D47" + (at 204.216 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 206.756 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 210.82 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 210.82 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 210.82 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6c3938bd-b284-4033-879f-5159daec3672") + ) + (pin "2" + (uuid "c8e5e0ec-4dba-4640-8c54-f52783cfee3e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D47") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 160.02 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a3ea0bc1-1edc-4519-8635-af6897c1c19d") + (property "Reference" "D43" + (at 153.416 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 155.956 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 160.02 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 160.02 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 160.02 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b358cc26-0728-44fe-8d1b-06937b89abd9") + ) + (pin "2" + (uuid "54fc5aaa-a707-4634-a5f0-4d903cdac3c0") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D43") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 58.42 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "aa9aa5a0-3cdd-4e35-b82b-98d57c94fef8") + (property "Reference" "D3" + (at 51.816 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 54.356 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) +<<<<<<< HEAD + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" +======= + (property "Footprint" "PCM_4ms_Diode:D_DO-35_P7.62mm_Horizontal" +>>>>>>> hardware-65percent + (at 58.42 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 58.42 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 58.42 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5a43d591-c357-48be-9940-801043faa043") + ) + (pin "2" + (uuid "304e75c2-1277-4278-a777-eb6273a17c51") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 170.18 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "aaf3cc16-abb8-464c-b8f5-0221b4aebdfd") + (property "Reference" "KEY_9" + (at 170.18 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 170.18 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 170.18 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 170.18 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 170.18 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "d3bb0b5b-deb7-4265-873f-f27006287778") + ) + (pin "2" + (uuid "01ae891c-12f0-451b-81cd-894cf88112f0") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 96.52 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ab1f4c51-0794-4a1c-b3cc-4ba4f7dd2e8e") + (property "Reference" "D38" + (at 89.916 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 92.456 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 96.52 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 96.52 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 96.52 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8234ee78-9cae-4a2b-9d21-dfb195cb5d90") + ) + (pin "2" + (uuid "bef9549a-1644-42e6-accc-0ffeefdff16a") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D38") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD +======= + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 220.98 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "af972c0f-6e96-4756-b25b-143313580e39") + (property "Reference" "S4" + (at 227.33 93.8529 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 227.33 96.3929 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2.25u" + (at 220.98 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 220.98 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 220.98 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "S4") + (unit 1) + ) + ) + ) + ) + (symbol +>>>>>>> hardware-65percent + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 233.68 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b0cb889c-27db-46cb-ae93-7d87c48c9a4d") + (property "Reference" "KEY_DEL1" + (at 233.68 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 233.68 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 233.68 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 233.68 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 233.68 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6e4b6a64-76f9-412d-9581-9a0105335f99") + ) + (pin "2" + (uuid "01bb301c-248a-4d32-a6e9-e8bbf800fb44") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_DEL1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 96.52 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b14317ec-8178-4ec7-8efe-b44e3c9b5d08") + (property "Reference" "D24" + (at 89.916 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 92.456 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 96.52 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 96.52 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 96.52 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1308953a-933d-4260-af09-421688e945c3") + ) + (pin "2" + (uuid "ead12381-2ed4-45bb-ac9f-af2e1b496a58") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 81.28 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b15979eb-cf5e-4f45-86fb-48bdb423a7ca") + (property "Reference" "KEY_W1" + (at 81.28 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 81.28 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 81.28 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 81.28 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 81.28 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "20f4706b-85cb-4324-bea5-5553a07df56d") + ) + (pin "2" + (uuid "e94150ca-4abc-4972-931a-fef8a4b9af22") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_W1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 144.78 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b20ff87f-cc7c-47cb-a7a4-4c4c1ae0d374") + (property "Reference" "KEY_M1" + (at 144.78 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 144.78 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 144.78 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 144.78 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 144.78 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ea15f0d2-b0d0-464a-b4b5-5746084aa610") + ) + (pin "2" + (uuid "f3476890-779f-451c-8bd2-6e4649b0ca8c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_M1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 121.92 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3630641-d36d-4db6-ad43-e110633f8f94") + (property "Reference" "D8" + (at 115.316 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 117.856 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 121.92 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 121.92 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 121.92 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "29a88f7a-5a09-47d0-a3d3-72d77f0d577d") + ) + (pin "2" + (uuid "ce309b54-b4d4-42aa-b74a-3793a0beda30") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 132.08 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b3f8c532-e54d-4da0-8cae-5683cd5381d8") + (property "Reference" "KEY_Y1" + (at 132.08 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 132.08 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 132.08 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 132.08 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "97e5c4c9-c98b-4ce0-a017-15f011b63862") + ) + (pin "2" + (uuid "87b5c20e-e9f8-489c-91d2-072fca5266db") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_Y1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 210.82 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b492ccfc-e90a-4ded-bda1-de723576cc78") + (property "Reference" "D74" + (at 204.216 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 206.756 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 210.82 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 210.82 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 210.82 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e82e8bac-118e-452d-bb75-ad9ab8e1c298") + ) + (pin "2" + (uuid "a5dd7e3d-d87a-488f-961b-c9a7dc77c032") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D74") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 119.38 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b503f3c0-457c-476e-9903-51d783bbc905") + (property "Reference" "KEY_5" + (at 119.38 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 119.38 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 119.38 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 119.38 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "06824879-b621-434d-b024-87217f63441b") + ) + (pin "2" + (uuid "45792186-9e9a-4413-922f-f8c235d2d006") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 68.58 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b92661c0-19a5-4ae5-86a1-463b554d30b7") + (property "Reference" "KEY_Z1" + (at 68.58 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 68.58 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 68.58 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 68.58 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 68.58 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bf110735-c2f9-4a52-8ac8-a947c6a76973") + ) + (pin "2" + (uuid "3d97cddc-46a5-402c-813c-97dd46bdb02e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_Z1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 160.02 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bc24a6c2-8e4a-4e00-9334-7bfb7b7bde11") + (property "Reference" "D57" + (at 153.416 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 155.956 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 160.02 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 160.02 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 160.02 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b637d53a-7aaa-4026-b7cb-5df5e02ecc17") + ) + (pin "2" + (uuid "e7b6ef3a-a3ec-4263-ba7f-8271b2b5069f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D57") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 147.32 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bf6e5f27-170a-4944-a1f6-385a82104b47") + (property "Reference" "D42" + (at 140.716 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 143.256 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 147.32 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 147.32 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 147.32 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5bc15860-0b92-4abd-bc7d-2d053a90c601") + ) + (pin "2" + (uuid "21855685-ea64-4832-a7e2-ff8534cca2a4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D42") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 185.42 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c27e88cd-6cf4-4726-ba23-ebafe7cdb788") + (property "Reference" "D13" + (at 178.816 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 181.356 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 185.42 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 185.42 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 185.42 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "606c242e-5c14-4178-a8e0-0f29835ecabe") + ) + (pin "2" + (uuid "315f354f-c34a-490e-947d-a8566829a83a") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 223.52 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c4c317f6-ef3e-463d-b8da-793882d0879a") + (property "Reference" "D61" + (at 216.916 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 219.456 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 223.52 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 223.52 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 223.52 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "809b5b58-09cd-47b5-b94d-297b363497b3") + ) + (pin "2" + (uuid "a85314bc-d458-487f-8bc7-51f45d982ec4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D61") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 134.62 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c9786b6b-2770-4710-83e4-1251929bc4f5") + (property "Reference" "D55" + (at 128.016 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 130.556 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 134.62 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 134.62 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 134.62 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cad8c23d-68cc-4a48-9b2e-e360a505f6f0") + ) + (pin "2" + (uuid "3badfaf4-4705-40d0-9083-c2983c184b54") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D55") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 195.58 135.89 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "c9c00c12-155c-4602-97fa-283720761fbc") + (property "Reference" "KEY_CTRL2" + (at 195.58 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 195.58 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 195.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 195.58 135.89 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2e9905fd-1ff4-4930-bf53-93d270271b26") + ) + (pin "2" + (uuid "d878da6d-98db-4c71-9225-97d9a576b1a1") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_CTRL2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 195.58 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cb107d31-4050-4821-a981-f264d1ca1589") + (property "Reference" "KEY_MINUS1" + (at 195.58 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 195.58 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 195.58 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 195.58 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 195.58 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1f2b94aa-1292-4fb0-8c41-dff5f53e2915") + ) + (pin "2" + (uuid "36c83b28-c234-4a9b-a6a2-b366db7d2cce") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_MINUS1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 160.02 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ccc74562-6661-4570-befb-02e4c9b238d7") + (property "Reference" "D29" + (at 153.416 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 155.956 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 160.02 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 160.02 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 160.02 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "aebe324c-5835-4449-b7b7-bf61157a34cf") + ) + (pin "2" + (uuid "21143e68-a4b8-40f7-b3a0-de471e943ac8") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 157.48 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ced57a46-381c-4ead-a15e-2b8c67bf9c86") + (property "Reference" "KEY_K1" + (at 157.48 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 157.48 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 157.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 157.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c435f3fc-36e1-493b-89c6-5c738be78f29") + ) + (pin "2" + (uuid "90965469-236b-4028-bc78-bc52a42e8220") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_K1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 81.28 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d1469439-2c96-442a-94c3-1c5ed95faebd") + (property "Reference" "KEY_X1" + (at 81.28 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 81.28 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 81.28 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 81.28 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 81.28 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ac3af516-93d4-44ad-9ac3-b4875e880ed3") + ) + (pin "2" + (uuid "fcd3e038-59db-40e2-81d0-f2a7ed0c97be") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_X1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 210.82 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d15f2131-9165-4f99-ba76-068283f3f1d7") + (property "Reference" "D15" + (at 204.216 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 206.756 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 210.82 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 210.82 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 210.82 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "565f94b0-e8a8-4bc2-93b7-51a1d16496d9") + ) + (pin "2" + (uuid "25a821d7-9002-4258-b8f8-0d91086ad5c4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 121.92 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d1943c1b-fcca-4277-a041-c8e0cf0a03a3") + (property "Reference" "D40" + (at 115.316 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 117.856 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 121.92 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 121.92 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 121.92 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9265d58b-9977-4af2-8f15-1c001a831c0d") + ) + (pin "2" + (uuid "f3ea1397-4c36-4f4d-a5b4-24d7bc5e2912") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D40") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 83.82 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d466eb56-7538-493e-8a7e-88ec89ec60f1") + (property "Reference" "D5" + (at 77.216 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 79.756 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 83.82 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 83.82 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 83.82 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "234e3146-15c3-4e66-876e-f1e121a67325") + ) + (pin "2" + (uuid "afd42f84-ce4f-4dc7-9fc3-27e0daa5f54c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 71.12 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d4ca6ba1-ee2f-4785-ad68-a7aa41609a12") + (property "Reference" "D4" + (at 64.516 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 67.056 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 71.12 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 71.12 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 71.12 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0a9293bc-784d-48ef-8be4-1ebddb46096d") + ) + (pin "2" + (uuid "fcf72e21-5800-4caf-bd61-c10175e3a10f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 185.42 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d55ff88c-b74b-4e0f-accb-e3c99f134ae2") + (property "Reference" "D31" + (at 178.816 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 181.356 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 185.42 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 185.42 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 185.42 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1efa75a0-bc35-4340-b19d-91d72eb0fd17") + ) + (pin "2" + (uuid "994f6737-f8ed-46c1-a06e-f563dd8e81a6") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 58.42 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d615d698-1eed-4b63-a315-e33f547b2da8") + (property "Reference" "D18" + (at 51.816 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 54.356 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 58.42 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 58.42 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 58.42 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "dc43aaa7-5bb5-4d79-8881-2b970c8e1742") + ) + (pin "2" + (uuid "1522259e-f804-4d2d-8a40-1898720cb087") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 172.72 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "da9e2942-059c-42b7-8312-8cae19a84177") + (property "Reference" "D71" + (at 166.116 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 168.656 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 172.72 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 172.72 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 172.72 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0580ba6e-2423-4b4a-bcda-8a7123aa8582") + ) + (pin "2" + (uuid "69e18c44-2450-43c1-b500-267df565515c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D71") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 93.98 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "dabc80f7-7725-4e96-a790-331cb22c86d4") + (property "Reference" "KEY_C1" + (at 93.98 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 93.98 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 93.98 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 93.98 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 93.98 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ea55766a-d225-4eba-bd35-ba94734313d9") + ) + (pin "2" + (uuid "1e962570-4471-4869-a82f-d8d08d9a2902") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 147.32 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dad54e66-9301-4d40-a76c-94a7922eb1db") + (property "Reference" "D10" + (at 140.716 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 143.256 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 147.32 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 147.32 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 147.32 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9428df53-1561-4876-bd12-e2cee682d087") + ) + (pin "2" + (uuid "47e1ebb4-ebdf-4ec7-a6e3-8f9b3bbc941a") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 182.88 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "db5cf6ba-b7e8-4b15-9d62-c33f33010389") + (property "Reference" "KEY_/1" + (at 182.88 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 182.88 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 182.88 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 182.88 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 182.88 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e03428ee-4767-489e-a967-48f876fafe35") + ) + (pin "2" + (uuid "991fd209-f3a5-463a-b233-6fb8151d8e81") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_/1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 83.82 101.6 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "dbd3ebd6-e7a1-401f-a15f-ed1a8b7a724c") + (property "Reference" "D37" + (at 77.216 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 79.756 104.902 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 83.82 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 83.82 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 83.82 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "00018078-5df7-47d4-98d2-b799f01aac72") + ) + (pin "2" + (uuid "0f1f06e9-37d1-4485-a88d-dfd07f2217ab") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 55.88 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "de52ad2d-6e46-4b84-b175-bc1899eb0e9b") + (property "Reference" "KEY_TAB1" + (at 55.88 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 55.88 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 55.88 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 55.88 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 55.88 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2263feb9-bb90-45f3-a23f-cc5550c4fea6") + ) + (pin "2" + (uuid "fb07632f-8776-4274-a9ee-461205053591") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_TAB1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 71.12 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "deefeed7-90b5-4d76-aa46-f3755b429d18") + (property "Reference" "D50" + (at 64.516 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 67.056 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 71.12 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 71.12 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 71.12 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "421f4656-830e-4a98-987f-740f9735138c") + ) + (pin "2" + (uuid "f7e83bf6-bb67-47c3-adc4-f337aa2582bb") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D50") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 55.88 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "df46196a-a2d2-48fa-bf10-86a6d9019058") + (property "Reference" "KEY_CAPS1" + (at 55.88 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 55.88 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 55.88 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 55.88 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 55.88 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7acc9895-4146-4504-ac02-e7a6b4374426") + ) + (pin "2" + (uuid "73b3ee60-106b-436c-a172-8b1a5e6f994f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_CAPS1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 109.22 121.92 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e2b5fd88-d6c7-4601-9391-95417031429d") + (property "Reference" "D53" + (at 102.616 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 105.156 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 109.22 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 109.22 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 109.22 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4183d3c1-5a8c-497c-9ac2-82b9a7370a89") + ) + (pin "2" + (uuid "7f79dd82-5a6c-46ec-b0a4-c3a5da5c7247") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D53") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 182.88 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e5fdb085-e86d-492f-8638-d60bb9f57b69") + (property "Reference" "KEY_P1" + (at 182.88 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 182.88 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 182.88 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 182.88 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 182.88 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b2dbdb27-c191-49e3-bd80-36cab733673c") + ) + (pin "2" + (uuid "d8050a9d-50d3-427d-9499-871513b93f96") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_P1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 172.72 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e62821ed-ac42-4df6-bca3-0eb0589d969c") + (property "Reference" "D30" + (at 166.116 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 168.656 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 172.72 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 172.72 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 172.72 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "687e4e5c-dc6f-433d-bee8-b6eb72792f7b") + ) + (pin "2" + (uuid "5252b358-fa2e-4c99-8205-57f9a1158e96") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 93.98 95.25 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e6440843-9ecb-4188-aeed-72cd707e2493") + (property "Reference" "KEY_D1" + (at 93.98 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 93.98 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 93.98 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 93.98 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 93.98 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c1fe8082-d304-4df2-8929-f33018674315") + ) + (pin "2" + (uuid "c3fed14b-44d8-43e0-97b3-321a834ca2b9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_D1") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD +======= + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 220.98 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e7176b98-73ca-4dca-9202-098fd5c88eef") + (property "Reference" "S5" + (at 227.33 30.3529 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 227.33 32.8929 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2u" + (at 220.98 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 220.98 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 220.98 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "S5") + (unit 1) + ) + ) + ) + ) + (symbol +>>>>>>> hardware-65percent + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 106.68 74.93 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ea4eca39-e1d9-4895-9095-4485a31f8507") + (property "Reference" "KEY_R1" + (at 106.68 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 106.68 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 106.68 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 106.68 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 106.68 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "48539d60-e79c-4ece-93e2-2ca41c96b058") + ) + (pin "2" + (uuid "5122d6b0-eaf5-4553-b324-151675995c4b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_R1") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD +======= + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 146.05 139.7 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "eef9331e-0bf5-4f92-a54f-c0b6635718b4") + (property "Reference" "S2" + (at 139.7 140.8431 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "MX_stab" + (at 139.7 138.3031 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_6.25u" + (at 146.05 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 146.05 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 146.05 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "S2") + (unit 1) + ) + ) + ) + ) + (symbol +>>>>>>> hardware-65percent + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 55.88 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ef3ee0cc-35c4-4832-a931-96be4e98d3ce") + (property "Reference" "KEY_SHIFT1" + (at 55.88 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 55.88 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 55.88 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 55.88 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 55.88 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2e40310d-6524-4af4-b208-9b34452b2ebb") + ) + (pin "2" + (uuid "22d94f74-06b7-4252-a118-62ec80064ba4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_SHIFT1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 210.82 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f003b52d-6156-4053-a298-6045bff0c97d") + (property "Reference" "D33" + (at 204.216 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 206.756 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 210.82 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 210.82 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 210.82 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e08d93de-4947-4fd5-a78f-a98f449bb225") + ) + (pin "2" + (uuid "b3eaef5f-5a05-4542-87bb-9eebe250fce7") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D33") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 71.12 81.28 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f1ac9d1b-9ccc-4ba1-b1a1-12b86f0e204e") + (property "Reference" "D22" + (at 64.516 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 67.056 84.582 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 71.12 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 71.12 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 71.12 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "35d61b03-8774-430c-a941-3a73ffd647b6") + ) + (pin "2" + (uuid "079f5bc0-3e5f-4010-a6c2-1d134814b3f5") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 170.18 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f4e317c7-fff8-4045-a140-862fa71370c3") + (property "Reference" "KEY_.1" + (at 170.18 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 170.18 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 170.18 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 170.18 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 170.18 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bfc9b863-db39-4ff5-a594-050cb30ee697") + ) + (pin "2" + (uuid "7b629946-7986-419b-a4bf-236f92619327") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_.1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 172.72 60.96 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f5b01530-19bb-476f-a934-afe1eacc00cd") + (property "Reference" "D12" + (at 166.116 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 168.656 64.262 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 172.72 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 172.72 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 172.72 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "2cd2df8d-83a5-4d17-93e2-3ea4eea108df") + ) + (pin "2" + (uuid "d6c79ba8-db76-4cf5-be04-451b0cfa1099") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D12") + (unit 1) + ) + ) + ) + ) + (symbol +<<<<<<< HEAD + (lib_id "PCM_marbastlib-mx:MX_stab") + (at 208.28 116.84 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f5fb9988-44d9-4eaa-9dbf-5426945c7792") + (property "Reference" "RightStab1" + (at 204.47 109.474 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MX_stab" + (at 204.47 112.014 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:STAB_MX_P_2u" + (at 208.28 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 208.28 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Cherry MX-style stabilizer" + (at 208.28 116.84 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "RightStab1") + (unit 1) + ) + ) + ) + ) + (symbol +======= +>>>>>>> hardware-65percent + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 208.28 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f6b74e08-f28d-43e8-9e16-4c41433d8357") + (property "Reference" "KEY_PLUS1" + (at 208.28 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 208.28 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 208.28 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 208.28 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 208.28 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8efea9a3-3a80-4418-be43-1cbc1a70ec83") + ) + (pin "2" + (uuid "a1f39963-7135-4875-9faf-9dbe177fb400") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_PLUS1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_AKL:1N4148W") + (at 236.22 142.24 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f97507f7-f073-454f-9c49-bda7ad839dd1") + (property "Reference" "D76" + (at 229.616 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "1N4148W" + (at 232.156 145.542 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-123" + (at 236.22 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://datasheet.octopart.com/1N4148W-HE3-18-Vishay-datasheet-17291302.pdf" + (at 236.22 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOD-123 Diode, Small Signal, Fast Switching, 75V, 150mA, 4ns, Alternate KiCad Library" + (at 236.22 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "404a8e15-d85b-4600-9871-ed7cce219309") + ) + (pin "2" + (uuid "4fc99c17-e424-4bea-9f3f-9524df0398eb") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "D76") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-mx:MX_SW_HS_CPG151101S11") + (at 119.38 115.57 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "feed4865-ac4b-4190-accf-0846ac45530a") + (property "Reference" "KEY_B1" + (at 119.38 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MX_SW_HS" + (at 119.38 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-mx:SW_MX_HS_CPG151101S11_1u" + (at 119.38 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Push button switch, normally open, two pins, 45° tilted, Kailh CPG151101S11 for Cherry MX style switches" + (at 119.38 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "070dabab-6fbb-46e9-91fc-5fea78c91774") + ) + (pin "2" + (uuid "7f88fe32-2d1c-4b8f-9ac7-33656cc9d98f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/1d905906-6e74-4741-8b2e-53dc470a7c79" + (reference "KEY_B1") + (unit 1) + ) + ) + ) + ) +) diff --git a/hardware/68percent/68percent-backups/powerreg.kicad_sch b/hardware/68percent/68percent-backups/powerreg.kicad_sch new file mode 100644 index 00000000..f2f9ac3e --- /dev/null +++ b/hardware/68percent/68percent-backups/powerreg.kicad_sch @@ -0,0 +1,41 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "f14782a9-74f0-4b79-b235-64b38935fcc4") + (paper "A4") + (lib_symbols) + (text "Power Regulation.\nBuck Converter 5v to 3.3v\n" + (exclude_from_sim no) + (at 97.79 99.568 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "9465db75-1792-401f-bad5-ceb4816ae4a0") + ) + (hierarchical_label "3.3v" + (shape input) + (at 142.24 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "9b32d2cf-97f6-491a-86fb-388101641b9e") + ) + (hierarchical_label "5v" + (shape input) + (at 142.24 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "bb6e74f4-ec74-4d40-9ebe-00f80b06a840") + ) +) diff --git a/hardware/68percent/68percent-backups/powfilt.kicad_sch b/hardware/68percent/68percent-backups/powfilt.kicad_sch new file mode 100644 index 00000000..dc44f316 --- /dev/null +++ b/hardware/68percent/68percent-backups/powfilt.kicad_sch @@ -0,0 +1,19 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "0555e65a-78c9-4198-a94d-afc4eb14f658") + (paper "A4") + (lib_symbols) + (text "Coupling Capacitors. \nCheck the data sheet for specific specification and placement\nMight have to ask Eric about this" + (exclude_from_sim no) + (at 127.762 97.282 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "9644dd45-3348-491a-9fea-f726a1224392") + ) +) diff --git a/hardware/68percent/68percent-backups/rstboot.kicad_sch b/hardware/68percent/68percent-backups/rstboot.kicad_sch new file mode 100644 index 00000000..cc849486 --- /dev/null +++ b/hardware/68percent/68percent-backups/rstboot.kicad_sch @@ -0,0 +1,8 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "d551aaba-f1c8-452e-b7fa-708c317ac4ce") + (paper "A4") + (lib_symbols) +) diff --git a/hardware/68percent/68percent-backups/sym-lib-table b/hardware/68percent/68percent-backups/sym-lib-table new file mode 100644 index 00000000..3c170705 --- /dev/null +++ b/hardware/68percent/68percent-backups/sym-lib-table @@ -0,0 +1,6 @@ +(sym_lib_table + (version 7) + (lib (name "stm32f446ret6")(type "KiCad")(uri "/home/kymkim/Projects/modular-kbd/hardware/symbols/stm32f446ret6/stm32f446ret6.kicad_sym")(options "")(descr "")) + (lib (name "Type-C")(type "Legacy")(uri "/home/kymkim/Projects/modular-kbd/hardware/Type-C.pretty-master/Type-C.lib")(options "")(descr "")) + (lib (name "T36K3BGR-05D000121U1930")(type "KiCad")(uri "/home/ukim/Projects/modular-kbd/hardware/symbols/T36K3BGR-05D000121U1930/T36K3BGR-05D000121U1930.kicad_sym")(options "")(descr "")) +) diff --git a/hardware/68percent/68percent-backups/untitled.kicad_sc.kicad_sch b/hardware/68percent/68percent-backups/untitled.kicad_sc.kicad_sch new file mode 100644 index 00000000..6b6f658c --- /dev/null +++ b/hardware/68percent/68percent-backups/untitled.kicad_sc.kicad_sch @@ -0,0 +1,8 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "6f2c82b5-c9ad-40d0-84fe-43041274abb2") + (paper "A4") + (lib_symbols) +) diff --git a/hardware/68percent/68percent-backups/untitled.kicad_sch b/hardware/68percent/68percent-backups/untitled.kicad_sch new file mode 100644 index 00000000..da9b70e2 --- /dev/null +++ b/hardware/68percent/68percent-backups/untitled.kicad_sch @@ -0,0 +1,8639 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "40b1bbce-d916-44f1-8247-5f0a1c45385b") + (paper "A4") + (lib_symbols + (symbol "PCM_4ms_Power-symbol:+5V" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 0 3.556 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "+5V_0_1" + (polyline + (pts + (xy -0.762 1.27) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 2.54) (xy 0.762 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:GND" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_marbastlib-choc:choc_SK6812MINI-E" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "LED" + (at 2.54 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 10.795 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "reverse mount led revmount rgb" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "choc_SK6812MINI-E_0_0" + (text "RGB" + (at 2.286 -4.191 0) + (effects + (font + (size 0.762 0.762) + ) + ) + ) + ) + (symbol "choc_SK6812MINI-E_0_1" + (rectangle + (start -5.08 5.08) + (end 5.08 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy 1.27 -2.54) (xy 1.778 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 -3.556) (xy 1.778 -3.556) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.286 -1.524) (xy 1.27 -2.54) (xy 1.27 -2.032) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.286 -2.54) (xy 1.27 -3.556) (xy 1.27 -3.048) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.683 -1.016) (xy 3.683 -3.556) (xy 3.683 -4.064) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 4.699 -1.524) (xy 2.667 -1.524) (xy 3.683 -3.556) (xy 4.699 -1.524) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 4.699 -3.556) (xy 2.667 -3.556) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "choc_SK6812MINI-E_1_1" + (pin input line + (at -7.62 0 0) + (length 2.54) + (name "DIN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 7.62 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -7.62 90) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 7.62 0 180) + (length 2.54) + (name "DOUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (junction + (at 130.81 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "000bfc67-ca36-473f-b6fd-62541a89e69a") + ) + (junction + (at 107.95 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "007579d8-3319-4309-8a63-ec2a2541fa6d") + ) + (junction + (at 33.02 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "00a10eb2-53c1-42ed-a263-5223c9d4609e") + ) + (junction + (at 109.22 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "056044c9-4495-4a40-8b58-70407db63b07") + ) + (junction + (at 44.45 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "0643187e-9a75-46f2-9784-e93a1475227a") + ) + (junction + (at 214.63 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "070943c8-ebb9-4fe3-b20f-b8584edeebf0") + ) + (junction + (at 194.31 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "07640880-4544-47e5-988f-b224d813a1c0") + ) + (junction + (at 215.9 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "08e36649-2afc-4da4-8877-a291d0bb216e") + ) + (junction + (at 257.81 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "0e8f21fd-2941-4285-8113-fa1186ee3776") + ) + (junction + (at 237.49 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "11db9804-4271-4461-8c0e-fafd41332f2b") + ) + (junction + (at 107.95 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "160877d4-ee11-4170-9773-6e16b8f44361") + ) + (junction + (at 44.45 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "18a63db0-833c-4f20-bbce-1a82bf29be79") + ) + (junction + (at 43.18 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "1935f46b-16a7-40d5-8ddd-090f8027bffd") + ) + (junction + (at 236.22 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "1b46f9eb-4ca2-4fed-815b-8ea199bc4fc0") + ) + (junction + (at 237.49 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "1cb68752-a3ad-44c7-93d1-d276de303dda") + ) + (junction + (at 279.4 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "1def4f26-37fe-4c1a-a13c-aa6a0c838775") + ) + (junction + (at 66.04 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "1e6aea0f-80f1-4b31-9619-691ef8b4041d") + ) + (junction + (at 87.63 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "1facf475-e3f4-4e9d-af8a-c29b9b59bdc9") + ) + (junction + (at 194.31 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "20be8e4d-c4b9-4392-9775-535c8409f3ea") + ) + (junction + (at 64.77 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "2531d994-0099-44b7-910b-dd1ac1cb467e") + ) + (junction + (at 87.63 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "264af424-d4b0-4d73-9ef8-e630355c523e") + ) + (junction + (at 33.02 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "2e3699e1-891e-4fa9-83c0-98f95faa6459") + ) + (junction + (at 193.04 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "31b2eb33-0bbd-4e0d-b5fd-20f64a0db231") + ) + (junction + (at 173.99 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "33b2e90f-7d20-4ea1-91e5-677058d7e73f") + ) + (junction + (at 257.81 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "3657c058-431e-428d-bcf9-29dcfb17c68c") + ) + (junction + (at 215.9 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "3badefdd-f8c0-4fbd-b3e2-3243ed484abc") + ) + (junction + (at 130.81 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "3bb18ddd-2a78-4e1e-b47b-f362cb87d3a2") + ) + (junction + (at 151.13 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "3f24bdf3-1477-454e-82c5-f20bd4a99afd") + ) + (junction + (at 193.04 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "433fa41a-fe64-4761-97ca-47716c3f1fe2") + ) + (junction + (at 129.54 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "43784696-56ba-4014-b140-4842f18e5d9a") + ) + (junction + (at 129.54 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "441a009e-135f-4d4a-b832-d0f6219cc4a4") + ) + (junction + (at 43.18 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "44ee5eda-f9e1-4fad-8796-c7a1350ef427") + ) + (junction + (at 194.31 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "46eb9184-1476-4528-9ff3-d3dfe4da7bdb") + ) + (junction + (at 43.18 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "47e5f244-5f19-4ca7-b9f8-d61e201a442b") + ) + (junction + (at 66.04 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "483c3f3b-5059-4e3a-9969-498bb87aeeb1") + ) + (junction + (at 86.36 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "48822d3e-9272-48dc-bcab-518fdc4e048b") + ) + (junction + (at 237.49 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "4b6f4875-5092-4c0f-9d9f-c5f04ac7abf4") + ) + (junction + (at 280.67 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "4b74de43-6b95-4f67-a564-d9b310dd36b7") + ) + (junction + (at 86.36 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "4c5d57d5-4f24-450a-9d51-a6f0c82184fb") + ) + (junction + (at 34.29 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "4ed6885c-56a8-46e5-9d81-b9e6d3a49cd5") + ) + (junction + (at 129.54 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "50095067-58cd-4b06-b244-1116b3300fb6") + ) + (junction + (at 107.95 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "511c3017-6c1a-494a-9bda-6c9ab56e6a32") + ) + (junction + (at 257.81 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "529467fb-bc85-4e80-9b7a-45a426719a19") + ) + (junction + (at 194.31 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "53974f61-30d3-4aa9-8aae-3a28fdeb6d44") + ) + (junction + (at 172.72 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "53ef0426-774f-49a9-a89c-9706f9e0785e") + ) + (junction + (at 22.86 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "55d2052d-43dd-4001-a859-234704b9e001") + ) + (junction + (at 33.02 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "58a4c0fc-8820-4883-a12e-7858d8e26f92") + ) + (junction + (at 152.4 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "5993f3d7-8e81-40a3-bc0a-158dde6e28c7") + ) + (junction + (at 172.72 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "5d364a45-c562-4cdb-8938-81cb15826f34") + ) + (junction + (at 259.08 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "5eef03ab-e2c7-4cde-bc87-7658b8d7e140") + ) + (junction + (at 43.18 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "6065dd2b-18ce-4030-a589-4a50eeced592") + ) + (junction + (at 215.9 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "609e8cce-6381-4ad5-9678-9c00e1d4506d") + ) + (junction + (at 172.72 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "62294ea8-591c-4678-bd87-8cf143d59f78") + ) + (junction + (at 152.4 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "64990ee6-2cf1-4d8d-a550-5dc8f7d326d3") + ) + (junction + (at 34.29 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "65299fdb-d337-4f0d-b8f2-75167b6cf3d8") + ) + (junction + (at 130.81 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "6656307e-eef1-46f3-a8ea-1696afae59f2") + ) + (junction + (at 34.29 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "66684f9e-d7fe-4968-96f6-ddf25805c085") + ) + (junction + (at 237.49 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "67dfe792-b235-4c15-ab07-3f0a69fd9b8a") + ) + (junction + (at 107.95 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "730f43d8-b6ce-4bcc-a753-2e405f6cf090") + ) + (junction + (at 34.29 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "76862321-843f-4d39-918a-b69b31af46e4") + ) + (junction + (at 214.63 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "76fe5a92-1499-4081-adc6-b559674ef3c1") + ) + (junction + (at 109.22 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "7751818f-65ce-402f-b2d4-93da40118309") + ) + (junction + (at 151.13 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "786160f0-47a0-4eb7-873a-18e6400884db") + ) + (junction + (at 193.04 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "7a9df96b-124b-4835-8350-704a58beef6f") + ) + (junction + (at 151.13 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "7b855577-c935-49ab-b38d-e2fd58ac37a4") + ) + (junction + (at 129.54 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "7bb46f6d-d429-4fe6-9a7f-cc93361ee903") + ) + (junction + (at 280.67 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "7eb6df6d-a620-4051-87c7-457cb707aa7c") + ) + (junction + (at 172.72 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "80e8f423-2141-4847-9590-81fbc6c887ba") + ) + (junction + (at 302.26 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "85c66466-5886-4ad8-8280-ad2d2c3f6c57") + ) + (junction + (at 279.4 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "873b6e50-c4fd-45e7-99ba-5edf765c79ca") + ) + (junction + (at 152.4 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "8cefc4ae-91c5-4d21-a676-61e27bef2fb1") + ) + (junction + (at 33.02 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "8f7e7f4c-2554-40ed-86c3-fabe67b64264") + ) + (junction + (at 86.36 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "91a49342-3cb0-44e6-8e0c-b612e113d74f") + ) + (junction + (at 87.63 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "94a4d0f0-4a1b-43be-8de3-36a08eba6f06") + ) + (junction + (at 173.99 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "978c949b-8882-466b-8590-38f1534ffe83") + ) + (junction + (at 66.04 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "9c28920e-599a-4a3e-b3e9-baad15cb9e0f") + ) + (junction + (at 172.72 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "9d5671eb-9879-40fa-9f48-3a212996124d") + ) + (junction + (at 34.29 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "a1c2e3d9-4425-430e-8279-56b0643b29c3") + ) + (junction + (at 193.04 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "a4820962-c065-4c1c-8d32-45ac73de7358") + ) + (junction + (at 64.77 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "a4a604dd-13d9-4394-a57c-12e920fa2075") + ) + (junction + (at 193.04 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "a699f89f-bd88-4d96-8180-9aba1ef7f96f") + ) + (junction + (at 236.22 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "aa8d4742-3c42-48ce-897b-215ffc72ef97") + ) + (junction + (at 107.95 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "abd70caa-abc7-49eb-9afa-f7adabfd2646") + ) + (junction + (at 44.45 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "b36c65b9-c218-41d7-9def-f8daefd4e285") + ) + (junction + (at 193.04 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "b5618d24-a347-4b4a-8f83-149a5097935f") + ) + (junction + (at 302.26 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "b6592a01-768a-4c3f-b80d-466aa12c3bba") + ) + (junction + (at 259.08 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "b771b887-2eae-4f3b-be96-7d0ade94818c") + ) + (junction + (at 152.4 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "b7c9a89c-4d07-4bb6-9782-9c34408db29f") + ) + (junction + (at 151.13 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "ba1e666e-8af7-44a7-aa81-a5469e7326d2") + ) + (junction + (at 259.08 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "ba2513b6-1efc-433b-9d85-7074ddfae213") + ) + (junction + (at 173.99 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "bae4e0e3-43d4-494b-9dfa-a09eae1ebcdc") + ) + (junction + (at 64.77 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "c345911a-6bd7-4ec0-b236-45cd0e838722") + ) + (junction + (at 236.22 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "c3813837-a954-4075-9035-3090c7c2016a") + ) + (junction + (at 64.77 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "c6310821-6faa-4398-8d5e-cf83afaf0552") + ) + (junction + (at 43.18 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "c77efce4-99bc-4d15-9940-9e1de8dd5f33") + ) + (junction + (at 43.18 163.83) + (diameter 0) + (color 0 0 0 0) + (uuid "ca1d70d2-17f1-445c-933e-73273724a83e") + ) + (junction + (at 302.26 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "cc9ce872-65ce-4510-b3bd-20d72f9e6b26") + ) + (junction + (at 259.08 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "ccf720ae-80e3-4786-b97a-ac7c9f90af78") + ) + (junction + (at 151.13 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "ce66c150-3db9-4ebc-a786-d5e4a249d268") + ) + (junction + (at 109.22 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "d0e8867f-44b0-4918-a296-b67e13a592dd") + ) + (junction + (at 172.72 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "d10aff3d-f294-4c37-891e-29af80ffb3a2") + ) + (junction + (at 33.02 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "d68050bc-b7c6-4252-b822-eb381a8ac1f5") + ) + (junction + (at 280.67 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "d7b4315f-cc5a-431d-a57c-4f725b824071") + ) + (junction + (at 87.63 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "d800e036-6933-4a0e-9628-a5106f9c0508") + ) + (junction + (at 302.26 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "d87a53ee-c482-4a3b-9b2e-2407b17d8a58") + ) + (junction + (at 64.77 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "d9fcbf62-2344-43f8-a17e-0976e0f0885a") + ) + (junction + (at 86.36 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "dac8409a-23a5-492a-b95a-d4cba93b97ce") + ) + (junction + (at 107.95 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "daf29a86-c4e9-4181-afda-406f31451e07") + ) + (junction + (at 280.67 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "db1968fa-5a71-4f1c-a107-f34db72860a5") + ) + (junction + (at 86.36 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "dd1c8134-f272-4743-bfdc-da79de9ed437") + ) + (junction + (at 130.81 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "dec7f709-2cb9-48f9-b457-fe51e403132d") + ) + (junction + (at 279.4 135.89) + (diameter 0) + (color 0 0 0 0) + (uuid "e339cdea-2f85-44d5-895b-0beeff5c973e") + ) + (junction + (at 66.04 81.28) + (diameter 0) + (color 0 0 0 0) + (uuid "e3dade9e-7b0d-4259-a72a-35ef2c924cf8") + ) + (junction + (at 215.9 66.04) + (diameter 0) + (color 0 0 0 0) + (uuid "e4e766de-9d51-4917-a652-b1a55be85999") + ) + (junction + (at 44.45 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "e83f690a-d518-4757-8f2b-f0307c9a59b5") + ) + (junction + (at 279.4 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "eac90edd-dada-4d48-8d49-fbc5c99c9713") + ) + (junction + (at 214.63 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "f0687509-8019-4508-ae49-c9b55de34465") + ) + (junction + (at 257.81 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "f1b7c938-673d-414a-b396-f6c6842315d4") + ) + (junction + (at 129.54 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "f3871221-519b-4d51-a620-3552fb01fe57") + ) + (junction + (at 109.22 53.34) + (diameter 0) + (color 0 0 0 0) + (uuid "f408403f-cb06-4d3e-90b5-be13a863f41b") + ) + (junction + (at 236.22 93.98) + (diameter 0) + (color 0 0 0 0) + (uuid "f5db841a-2bb8-4c6f-91d4-3ebcb4bd5d05") + ) + (junction + (at 214.63 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "f629a35b-724a-4f7a-8103-df8caf8b0651") + ) + (junction + (at 64.77 120.65) + (diameter 0) + (color 0 0 0 0) + (uuid "f7569c41-62c4-4aaa-91cb-3b0dc1481aeb") + ) + (junction + (at 86.36 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "f8b767cc-b111-4eaf-9fcc-74264facabe3") + ) + (junction + (at 151.13 109.22) + (diameter 0) + (color 0 0 0 0) + (uuid "fa4ba471-a888-4f28-9508-02e68c950f10") + ) + (junction + (at 129.54 148.59) + (diameter 0) + (color 0 0 0 0) + (uuid "fac25106-3cc1-4868-9bb1-128cb4ee1999") + ) + (junction + (at 173.99 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "fb5c6b4a-a867-4fa7-b414-81c277dd6774") + ) + (wire + (pts + (xy 21.59 120.65) (xy 34.29 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01890514-b171-4714-bd9a-a9f38aff7a10") + ) + (wire + (pts + (xy 72.39 156.21) (xy 78.74 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01e0e929-7f5d-41bd-bba6-4b6e361689f7") + ) + (wire + (pts + (xy 214.63 163.83) (xy 193.04 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0338d9a8-f4bd-46ee-9540-09c37bc9bdc5") + ) + (wire + (pts + (xy 44.45 53.34) (xy 66.04 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "03394547-35db-4dc4-b7e9-e06355e622ee") + ) + (wire + (pts + (xy 33.02 109.22) (xy 43.18 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "05023cae-f9a4-4023-aa6b-b7d209898f63") + ) + (wire + (pts + (xy 265.43 101.6) (xy 271.78 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "05ec2434-cd77-476c-a745-fceff2d38b80") + ) + (wire + (pts + (xy 64.77 148.59) (xy 86.36 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "07522358-1288-45ba-807d-c7e17a6c7e80") + ) + (wire + (pts + (xy 73.66 73.66) (xy 80.01 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0792e40c-97a1-4b1d-a201-aeda088e5109") + ) + (wire + (pts + (xy 339.09 73.66) (xy 339.09 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "07e8a762-dd50-4ed8-bd1b-4b8f6c9afbd0") + ) + (wire + (pts + (xy 130.81 81.28) (xy 152.4 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "08f2a3b3-bb4b-49e5-be23-cd8d9fdf1782") + ) + (wire + (pts + (xy 30.48 45.72) (xy 36.83 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "090ff8e9-f3a9-4f52-bc95-529e091baa57") + ) + (wire + (pts + (xy 34.29 148.59) (xy 43.18 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0923a342-c6dd-4a87-8e17-a547f148600d") + ) + (wire + (pts + (xy 34.29 93.98) (xy 43.18 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09888adb-c059-439a-bcaf-06d9826d3699") + ) + (wire + (pts + (xy 236.22 93.98) (xy 257.81 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0b02ffdf-6974-41fa-aaae-53c98b6a1b25") + ) + (wire + (pts + (xy 130.81 66.04) (xy 152.4 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0be96180-7b90-44c1-900e-06842954e550") + ) + (wire + (pts + (xy 34.29 93.98) (xy 34.29 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c014855-5da4-4d60-b433-55fdf7873a4b") + ) + (wire + (pts + (xy 215.9 66.04) (xy 237.49 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0cce69e2-3183-4b3b-8347-59b8309aea43") + ) + (wire + (pts + (xy 151.13 109.22) (xy 172.72 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0d06ae7c-45d1-4518-8666-cdcc3b3fddb8") + ) + (wire + (pts + (xy 279.4 109.22) (xy 300.99 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ddd0885-c7d1-4ca1-b5f4-7e4fc96d9b4a") + ) + (wire + (pts + (xy 115.57 128.27) (xy 121.92 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e5d4060-6648-45a3-8637-af6e525e01db") + ) + (wire + (pts + (xy 172.72 148.59) (xy 193.04 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0e602b3c-0f60-47c0-bf6c-d230e3f46f12") + ) + (wire + (pts + (xy 93.98 101.6) (xy 100.33 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11756bb2-bd3c-4b5d-9f36-0b00691405d5") + ) + (wire + (pts + (xy 29.21 128.27) (xy 35.56 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "11e7e8b6-de18-4374-9ab9-6c3fa61e968e") + ) + (wire + (pts + (xy 6.35 111.76) (xy 6.35 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1225f7ee-fbdb-4567-8f7c-0f378ecfd3b5") + ) + (wire + (pts + (xy 160.02 73.66) (xy 166.37 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "149b2317-7e9a-4d2d-98df-a302fec7380f") + ) + (wire + (pts + (xy -3.81 53.34) (xy 22.86 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1652f970-6ea3-409f-bfac-3a9f61152626") + ) + (wire + (pts + (xy 33.02 109.22) (xy 21.59 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "16c31cae-b1fc-4f1e-bed4-429eafbe9951") + ) + (wire + (pts + (xy 5.08 156.21) (xy 13.97 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "171d1c9d-0563-428b-a850-2c5cf2281000") + ) + (wire + (pts + (xy 43.18 135.89) (xy 64.77 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "19cd1113-b72c-40cd-acb4-a3a02cf24d6f") + ) + (wire + (pts + (xy 86.36 163.83) (xy 64.77 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1b3a9709-4331-485d-b56e-8e7ed7794350") + ) + (wire + (pts + (xy 34.29 66.04) (xy 34.29 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1bfbe87d-faf4-483a-9643-9694f42a6889") + ) + (wire + (pts + (xy 158.75 101.6) (xy 165.1 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1d115ed3-1ebe-4c28-aa65-179a777c9356") + ) + (wire + (pts + (xy 335.28 45.72) (xy 335.28 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e6011ef-febb-4704-9a33-84fb6b4c937d") + ) + (wire + (pts + (xy 302.26 66.04) (xy 323.85 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1efb69f6-2031-411e-876e-24587ff47fc3") + ) + (wire + (pts + (xy 223.52 73.66) (xy 229.87 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f2b0bd3-8c4f-4c40-af23-ebce1b408ffa") + ) + (wire + (pts + (xy 339.09 101.6) (xy 339.09 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f3611e8-3684-41bd-9b48-15d69933606f") + ) + (wire + (pts + (xy 116.84 45.72) (xy 123.19 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2000da4f-b539-467d-9af8-3f6226d1757e") + ) + (wire + (pts + (xy 52.07 73.66) (xy 58.42 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2060b8de-c7ae-4f2c-8a59-1c311327001c") + ) + (wire + (pts + (xy 129.54 109.22) (xy 151.13 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "210cab1d-8038-47a8-8368-9bf2c5e2ae00") + ) + (wire + (pts + (xy 151.13 148.59) (xy 172.72 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "21488f36-b5f7-452a-ad94-2748687bcaab") + ) + (wire + (pts + (xy 66.04 53.34) (xy 87.63 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "215b5c73-51c9-4c2d-9aa3-63373de5a144") + ) + (wire + (pts + (xy 193.04 148.59) (xy 214.63 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "254bf047-4102-4ec7-aceb-4463a7c6b81b") + ) + (wire + (pts + (xy 245.11 45.72) (xy 251.46 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2733f034-a184-4e0f-9ac1-a2ce54067fd6") + ) + (wire + (pts + (xy 29.21 101.6) (xy 35.56 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "277ccf87-1cf4-4507-ba0f-a878b3936c9b") + ) + (wire + (pts + (xy 193.04 163.83) (xy 172.72 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "297ce389-6dc4-4dab-8218-a73df5857d63") + ) + (wire + (pts + (xy 30.48 73.66) (xy 36.83 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "29cc1e4d-ab9c-48d6-8d8a-0be016b9391b") + ) + (wire + (pts + (xy 29.21 156.21) (xy 35.56 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2bd412d9-389f-44c8-9b01-cdf227209d78") + ) + (wire + (pts + (xy 87.63 53.34) (xy 109.22 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d5ca43c-5819-485d-9838-35673d3f61b6") + ) + (wire + (pts + (xy 259.08 38.1) (xy 280.67 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2ec87d92-8f72-47b5-9525-c038b08feb08") + ) + (wire + (pts + (xy 66.04 66.04) (xy 87.63 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fc4e306-7a46-4415-9dee-cba31b222b71") + ) + (wire + (pts + (xy 279.4 93.98) (xy 300.99 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "311e89e6-140c-43ed-b8d9-0a13fdf2a15b") + ) + (wire + (pts + (xy 107.95 109.22) (xy 129.54 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "31cd5369-e8e1-4c50-96ae-e5eb949e749d") + ) + (wire + (pts + (xy 265.43 128.27) (xy 271.78 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "33cb777c-eb03-40a9-847b-89a631a18646") + ) + (wire + (pts + (xy 214.63 109.22) (xy 236.22 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "342a1bc2-2306-4e2c-8a06-37802eb36b3d") + ) + (wire + (pts + (xy 151.13 120.65) (xy 172.72 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "36716acf-141a-47b5-af49-485aec49fde6") + ) + (wire + (pts + (xy 95.25 45.72) (xy 101.6 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3683e368-ecde-40d0-98a6-c3452ba7285e") + ) + (wire + (pts + (xy 64.77 135.89) (xy 86.36 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37a25532-677c-4c89-b73d-3a2d2fa6b3a6") + ) + (wire + (pts + (xy 43.18 120.65) (xy 64.77 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37f6d613-4da9-4f81-93c3-ae8290d2652a") + ) + (wire + (pts + (xy 33.02 163.83) (xy 21.59 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3931e308-07cd-4608-8663-6fd6fd06626a") + ) + (wire + (pts + (xy 87.63 66.04) (xy 109.22 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "394711ff-f441-4e9c-8558-44bc4bea5d67") + ) + (wire + (pts + (xy 245.11 73.66) (xy 251.46 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "398d5677-085b-4a7e-ae9f-c6e8b70ee40d") + ) + (wire + (pts + (xy 50.8 101.6) (xy 57.15 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "39983d3f-e1a1-468f-86ff-309cd77d1cce") + ) + (wire + (pts + (xy 236.22 109.22) (xy 257.81 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3ae255df-f6af-4d55-8c78-3688dbcbbd23") + ) + (wire + (pts + (xy 309.88 73.66) (xy 316.23 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b614236-b6ec-45fb-871f-2211277d2774") + ) + (wire + (pts + (xy 172.72 109.22) (xy 193.04 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3b709469-dd13-46c2-828b-d700ee18a9cc") + ) + (wire + (pts + (xy 34.29 66.04) (xy 44.45 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cdb2ad6-d56f-47ad-bc72-901598552da9") + ) + (wire + (pts + (xy 93.98 128.27) (xy 100.33 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3cf73908-cb0e-40f3-98ac-fff1df1a98b2") + ) + (wire + (pts + (xy 93.98 156.21) (xy 100.33 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f5e0fd2-f1b6-4d53-9bc7-8a898e859d7f") + ) + (wire + (pts + (xy 43.18 93.98) (xy 64.77 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3fe7564a-08dd-4c6f-af3e-0d069ed33c68") + ) + (wire + (pts + (xy 257.81 135.89) (xy 279.4 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "40897125-157f-49a8-a167-a7974df3cae6") + ) + (wire + (pts + (xy 64.77 93.98) (xy 86.36 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "41939f73-f010-4fe4-8bb1-0869894da7db") + ) + (wire + (pts + (xy 266.7 73.66) (xy 273.05 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43bba474-7afe-4a57-bcb2-d5dc483bc671") + ) + (wire + (pts + (xy 21.59 135.89) (xy 33.02 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "43efe140-9fc9-4540-8bd1-dd2eece36641") + ) + (wire + (pts + (xy 158.75 156.21) (xy 165.1 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "45e92932-3959-41da-a501-13aa91e09b46") + ) + (wire + (pts + (xy 52.07 45.72) (xy 58.42 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "485826a6-5cc7-4634-ae67-4a217224f1a9") + ) + (wire + (pts + (xy 237.49 81.28) (xy 259.08 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "49c873cb-ee24-45d7-9258-76c82012bbaf") + ) + (wire + (pts + (xy 308.61 101.6) (xy 339.09 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4a3eb9d8-b1c7-4006-a482-20e9fd265592") + ) + (wire + (pts + (xy 116.84 73.66) (xy 123.19 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4b51dcd9-7394-4da8-bcb6-6e9369d2994a") + ) + (wire + (pts + (xy 34.29 148.59) (xy 21.59 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4b84c36b-f50b-40bf-a14d-81e83beb5402") + ) + (wire + (pts + (xy 309.88 45.72) (xy 316.23 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d958dcf-542e-47b5-b362-0aca143cd84b") + ) + (wire + (pts + (xy 222.25 128.27) (xy 228.6 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4edb51b8-0606-436d-bda3-44b7d6c38e1c") + ) + (wire + (pts + (xy 33.02 53.34) (xy 44.45 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f89d822-b385-4117-ac0c-4ffaf3c46092") + ) + (wire + (pts + (xy 280.67 81.28) (xy 302.26 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "500f1baf-c1cb-43d5-9d11-87ed2d1cf362") + ) + (wire + (pts + (xy -3.81 55.88) (xy -3.81 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "50ab1a2c-813d-41ec-a3e7-987050818167") + ) + (wire + (pts + (xy 115.57 156.21) (xy 121.92 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5193e8f5-e9b4-41d3-abcd-c0fca5520395") + ) + (wire + (pts + (xy 259.08 81.28) (xy 280.67 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "521d140e-3164-4e7c-9c2d-08b659c92544") + ) + (wire + (pts + (xy 201.93 73.66) (xy 208.28 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "529bf1e1-60eb-46f6-957a-f08acdebfc80") + ) + (wire + (pts + (xy 6.35 22.86) (xy 6.35 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54e95475-9f69-4f46-bcfa-3ae49652f9a8") + ) + (wire + (pts + (xy 339.09 85.09) (xy 5.08 85.09) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5588a65b-9f4c-46c5-b36d-bd48f0a4c75b") + ) + (wire + (pts + (xy 193.04 93.98) (xy 214.63 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "55a15e61-b935-4063-a216-97dd0cc740ff") + ) + (wire + (pts + (xy 66.04 38.1) (xy 87.63 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5670c3ee-1fee-4701-b408-92a187a0b48a") + ) + (wire + (pts + (xy 151.13 163.83) (xy 129.54 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57a5888b-dc00-4f50-8c5b-29aebe32e0ad") + ) + (wire + (pts + (xy 236.22 120.65) (xy 257.81 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57e1bd29-e066-4af0-bf52-6f255a7a3d07") + ) + (wire + (pts + (xy 215.9 81.28) (xy 237.49 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a09b12b-fd8a-417a-985f-167cdf2d91c2") + ) + (wire + (pts + (xy 237.49 53.34) (xy 259.08 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a45c78e-7223-457a-bb7d-f17fea2ce563") + ) + (wire + (pts + (xy 172.72 135.89) (xy 193.04 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5b0b4fe2-e8ac-4303-896a-e662f5ff3984") + ) + (wire + (pts + (xy 34.29 38.1) (xy 44.45 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5b421a32-b240-4ab0-9459-3b293537a472") + ) + (wire + (pts + (xy 72.39 101.6) (xy 78.74 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5bd78e3a-896e-4bd4-b942-40a5bf189640") + ) + (wire + (pts + (xy 5.08 139.7) (xy 5.08 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5d1aed1d-0651-475c-94f4-cf791e2635f4") + ) + (wire + (pts + (xy 173.99 38.1) (xy 194.31 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5df82340-131e-402f-a8cf-86238688a54d") + ) + (wire + (pts + (xy 115.57 101.6) (xy 121.92 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5e119b12-84fa-4b2e-bedc-7c5a49eadb5d") + ) + (wire + (pts + (xy 95.25 73.66) (xy 101.6 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6053f633-6d6a-465a-a444-e2a8e8e6563a") + ) + (wire + (pts + (xy 237.49 66.04) (xy 259.08 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6204717b-9480-4fd3-a21c-da6450e22f9f") + ) + (wire + (pts + (xy 86.36 135.89) (xy 107.95 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "622e72da-5c0a-4fbb-a960-c0dc73beb946") + ) + (wire + (pts + (xy 44.45 66.04) (xy 66.04 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63c72715-7c71-49b5-8350-1e6f3feaeed5") + ) + (wire + (pts + (xy 194.31 81.28) (xy 215.9 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63cce438-7dd5-48bf-888c-97b6b25971da") + ) + (wire + (pts + (xy 33.02 81.28) (xy 33.02 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63e27df6-7f48-4640-b6c8-0975d042d5d3") + ) + (wire + (pts + (xy 280.67 38.1) (xy 302.26 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "63efd313-7c7e-4f3c-a57a-8f8bd46bc8fc") + ) + (wire + (pts + (xy 43.18 109.22) (xy 64.77 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "66b7abbc-c6eb-454a-83c9-a64702a194d8") + ) + (wire + (pts + (xy 308.61 128.27) (xy 339.09 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6756b6b8-b5db-48e0-b946-545b6c6bd38a") + ) + (wire + (pts + (xy 137.16 128.27) (xy 143.51 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "696a295a-e4b6-4774-ad5c-7228dcf1a155") + ) + (wire + (pts + (xy 160.02 45.72) (xy 166.37 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ada1844-0e7e-4d10-aa82-822857c123db") + ) + (wire + (pts + (xy 257.81 120.65) (xy 279.4 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6c2ea747-f1bb-4d0b-aa5c-143e3c73692f") + ) + (wire + (pts + (xy 158.75 128.27) (xy 165.1 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6e7dc4f0-d182-47e0-befc-a09a21dcaf1b") + ) + (wire + (pts + (xy 44.45 38.1) (xy 66.04 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f321df1-b2df-4e41-b871-9af355ad85c8") + ) + (wire + (pts + (xy 107.95 148.59) (xy 129.54 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "73645896-fc3d-42bc-bd87-ccdf51800b26") + ) + (wire + (pts + (xy 214.63 135.89) (xy 236.22 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75ff0a40-3b38-400d-81b2-f06a1a63decc") + ) + (wire + (pts + (xy 215.9 53.34) (xy 237.49 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "760be2b7-2d09-48e3-adeb-93bfa7c09171") + ) + (wire + (pts + (xy 223.52 45.72) (xy 229.87 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "76a86748-2b3b-4580-a24f-a753179c2bae") + ) + (wire + (pts + (xy 200.66 128.27) (xy 207.01 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "77c934c3-8427-4690-88e8-7abb366a3d6f") + ) + (wire + (pts + (xy 137.16 101.6) (xy 143.51 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7bd05fa5-1a3d-48fe-8b08-369a0fc98038") + ) + (wire + (pts + (xy 64.77 109.22) (xy 86.36 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7cb8be4f-4365-4b41-83d8-e17890f90b79") + ) + (wire + (pts + (xy 64.77 163.83) (xy 43.18 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7f8a906a-4238-4a79-ab34-a8c766241aca") + ) + (wire + (pts + (xy 22.86 53.34) (xy 33.02 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ff5ffd7-3aeb-4389-b020-5ae198f0e9f3") + ) + (wire + (pts + (xy 15.24 45.72) (xy 6.35 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8199e820-c9a5-4285-98a5-000860c326c0") + ) + (wire + (pts + (xy 107.95 93.98) (xy 129.54 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8232b38f-f14d-43a4-af0a-b0ca400c24b9") + ) + (wire + (pts + (xy 257.81 93.98) (xy 279.4 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "823cd209-2626-4646-9f91-7bbf09c6e28f") + ) + (wire + (pts + (xy 137.16 156.21) (xy 143.51 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82be2481-a2b5-4885-9149-cc38f239d595") + ) + (wire + (pts + (xy 50.8 128.27) (xy 57.15 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "84b3f5c1-c481-481a-a256-06d30267d337") + ) + (wire + (pts + (xy 302.26 38.1) (xy 323.85 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "84f787b4-7843-426d-8fc9-02b699e598cd") + ) + (wire + (pts + (xy 5.08 101.6) (xy 13.97 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "85ef5a9e-02c3-4c17-8d88-e82a4002bf18") + ) + (wire + (pts + (xy 152.4 53.34) (xy 173.99 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86d61a69-d1cd-4cbc-ab19-21e1ba1d0484") + ) + (wire + (pts + (xy 237.49 38.1) (xy 259.08 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "889a9ac6-b289-45b8-a039-9b67456b30d0") + ) + (wire + (pts + (xy 5.08 73.66) (xy 15.24 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "894f47cc-9901-488e-8395-63f677ba0725") + ) + (wire + (pts + (xy 193.04 135.89) (xy 214.63 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "896ce32e-ca51-40c6-89a9-9fd0887614ae") + ) + (wire + (pts + (xy 152.4 81.28) (xy 173.99 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8c54436e-df1e-4445-a1ed-696670e22989") + ) + (wire + (pts + (xy 44.45 81.28) (xy 66.04 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cb3f742-63eb-4e8a-99ef-15302f9e19cf") + ) + (wire + (pts + (xy 180.34 101.6) (xy 185.42 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d01ab22-e103-4828-98e9-58c9f33c6bd0") + ) + (wire + (pts + (xy 33.02 135.89) (xy 33.02 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d0b351c-e61f-42b0-a3a6-97f277c502dc") + ) + (wire + (pts + (xy 331.47 45.72) (xy 335.28 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8d5030e5-49c5-4bb3-86ff-9ec3c1209193") + ) + (wire + (pts + (xy 236.22 135.89) (xy 257.81 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f242943-425b-4226-a41f-cd399ecf5f17") + ) + (wire + (pts + (xy 243.84 101.6) (xy 250.19 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "933d9ae1-476b-482d-afed-bde8ba37b472") + ) + (wire + (pts + (xy 34.29 120.65) (xy 34.29 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "949a770c-1f19-4082-a810-5aeb4ddc71f1") + ) + (wire + (pts + (xy 266.7 45.72) (xy 273.05 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "94a9eabc-a1cc-4051-ae48-ba8c772d0c31") + ) + (wire + (pts + (xy 43.18 148.59) (xy 64.77 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "94abd5b2-2080-42ee-9047-099c4f11fcfe") + ) + (wire + (pts + (xy 66.04 81.28) (xy 87.63 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "94c2a6a4-2f51-4b2d-a82d-c487c6f0847b") + ) + (wire + (pts + (xy 6.35 128.27) (xy 13.97 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9719a65a-c2c6-4da4-ad49-081d3f61cffd") + ) + (wire + (pts + (xy 129.54 148.59) (xy 151.13 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ab707b1-b9de-4b1a-a726-3572f7239808") + ) + (wire + (pts + (xy 339.09 139.7) (xy 5.08 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9ba33d4a-b2a5-449e-9f4b-27a0e931eca4") + ) + (wire + (pts + (xy 64.77 120.65) (xy 86.36 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c28431b-7613-4a93-bcf5-516bfd2348ff") + ) + (wire + (pts + (xy 151.13 135.89) (xy 172.72 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9e6ad7b5-f014-4d4f-b56d-6bc2dcd342c5") + ) + (wire + (pts + (xy 109.22 38.1) (xy 130.81 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f6c4170-2d45-4b5f-a94c-02fd669cc864") + ) + (wire + (pts + (xy 33.02 53.34) (xy 33.02 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0261f01-e3fd-4f19-b5fa-8967abc1f598") + ) + (wire + (pts + (xy 194.31 38.1) (xy 215.9 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a25f0407-e526-4b77-ab13-084ff6d2605d") + ) + (wire + (pts + (xy 172.72 120.65) (xy 193.04 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a3606399-951e-4ca9-a9ff-766aa40079e0") + ) + (wire + (pts + (xy 280.67 66.04) (xy 302.26 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a440b188-6eff-4e30-a9ab-df502b7d5b24") + ) + (wire + (pts + (xy 34.29 22.86) (xy 34.29 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a534e187-2f9a-409a-b944-01222a3ee885") + ) + (wire + (pts + (xy 279.4 120.65) (xy 300.99 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a689096f-4c8c-4120-a76d-6baed356330b") + ) + (wire + (pts + (xy 87.63 81.28) (xy 109.22 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a78fbe0c-dc42-4430-9631-cd5032db7d78") + ) + (wire + (pts + (xy 152.4 66.04) (xy 173.99 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a8ee30ef-ec60-4430-b7e2-8c34e35a9dc9") + ) + (wire + (pts + (xy 107.95 135.89) (xy 129.54 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a9ef311e-3017-4f4f-8d13-d9358dac43e2") + ) + (wire + (pts + (xy 107.95 163.83) (xy 86.36 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa177705-1ad2-419b-a313-c500ddf2693c") + ) + (wire + (pts + (xy 193.04 120.65) (xy 214.63 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aa6e6554-6fee-473a-ad27-ac799f00b8a6") + ) + (wire + (pts + (xy 109.22 81.28) (xy 130.81 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac980ed5-0d2d-4acc-b3f4-32583923711b") + ) + (wire + (pts + (xy 86.36 93.98) (xy 107.95 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ad54581c-c107-4fc1-a966-ff64e05d43e6") + ) + (wire + (pts + (xy 109.22 53.34) (xy 130.81 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "adf0654e-11cc-475e-b52f-c764b73476fb") + ) + (wire + (pts + (xy 194.31 53.34) (xy 215.9 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "aec11841-b8ee-4dba-9286-817cfedaa640") + ) + (wire + (pts + (xy 34.29 93.98) (xy 21.59 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af0c89ca-c5b8-48ff-a73b-7d95e0acd81e") + ) + (wire + (pts + (xy 34.29 38.1) (xy 22.86 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b021bcce-c96e-4f49-9a83-b9a9bdd98c62") + ) + (wire + (pts + (xy 302.26 53.34) (xy 323.85 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b1224ef5-e7d3-4421-a29f-732d9bb684b8") + ) + (wire + (pts + (xy 288.29 73.66) (xy 294.64 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b1500ea1-c619-4c8e-817a-90fe545fc614") + ) + (wire + (pts + (xy 33.02 81.28) (xy 44.45 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2225c52-251d-4e03-8d28-5437fb46f6e2") + ) + (wire + (pts + (xy 138.43 73.66) (xy 144.78 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4259866-2f56-435d-a6ac-f4cafc4e36da") + ) + (wire + (pts + (xy 201.93 45.72) (xy 208.28 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4cffb8a-77f6-4912-85c6-e4407603b1dc") + ) + (wire + (pts + (xy 107.95 120.65) (xy 129.54 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7accdc2-4235-40a8-b1bc-4ab01e0386f1") + ) + (wire + (pts + (xy 87.63 38.1) (xy 109.22 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b7d7bb94-3ada-4a89-a087-6e2bfe07b3ca") + ) + (wire + (pts + (xy 335.28 55.88) (xy 5.08 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bc028b18-804c-4bc3-aa0d-17c21bab8292") + ) + (wire + (pts + (xy 180.34 156.21) (xy 185.42 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bc771386-c0c3-4dce-8a52-6a403decb6bc") + ) + (wire + (pts + (xy 193.04 109.22) (xy 214.63 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bcd0ceb0-52c2-44ce-95c2-44a124581c9f") + ) + (wire + (pts + (xy 172.72 163.83) (xy 151.13 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bd051421-9cf3-419c-aa0f-e5b13bb2ea02") + ) + (wire + (pts + (xy 194.31 66.04) (xy 215.9 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf919e13-83f7-4942-b52e-11224e7313f5") + ) + (wire + (pts + (xy 129.54 120.65) (xy 151.13 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0db11c7-cf0e-4dc6-a794-4726a6731dd4") + ) + (wire + (pts + (xy 288.29 45.72) (xy 294.64 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c10421c6-75ec-4b08-9b9d-5b1f6ea2ff24") + ) + (wire + (pts + (xy 200.66 156.21) (xy 207.01 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c2eddd1b-3345-46c9-9fae-bbaaa2cd827c") + ) + (wire + (pts + (xy 243.84 128.27) (xy 250.19 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c34d1b83-f9e5-4c45-890c-fc1a9081f120") + ) + (wire + (pts + (xy 151.13 93.98) (xy 172.72 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c4336b68-5475-4c80-9dd0-88c9cad7d1f3") + ) + (wire + (pts + (xy 287.02 101.6) (xy 293.37 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c63ff9bb-8b27-4eac-8af0-64c959bee145") + ) + (wire + (pts + (xy 109.22 66.04) (xy 130.81 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c9211697-ebaa-4b8d-878c-32699649612d") + ) + (wire + (pts + (xy 73.66 45.72) (xy 80.01 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb507db3-242c-45c5-b717-b9926bf486bc") + ) + (wire + (pts + (xy 257.81 109.22) (xy 279.4 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cce27e03-4159-4b25-845e-bb615f427114") + ) + (wire + (pts + (xy 214.63 120.65) (xy 236.22 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cda98ea3-14f5-4a1a-8243-582e8de1757f") + ) + (wire + (pts + (xy 130.81 38.1) (xy 152.4 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d0b6878b-ac32-4ef8-b6dd-4cf65094577e") + ) + (wire + (pts + (xy 33.02 109.22) (xy 33.02 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d211e1f5-cc84-4619-b5bc-7fd3f098eaea") + ) + (wire + (pts + (xy 259.08 53.34) (xy 280.67 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d2429066-7b26-4544-a9ae-6350a642961e") + ) + (wire + (pts + (xy 152.4 38.1) (xy 173.99 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3ac67c0-fd2d-48e4-8b5c-ca95b6f384a8") + ) + (wire + (pts + (xy 222.25 101.6) (xy 228.6 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d46af853-19db-4748-9afa-b371e1fef12b") + ) + (wire + (pts + (xy 200.66 101.6) (xy 207.01 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d4a31c19-9104-4c56-a882-d04647393dc1") + ) + (wire + (pts + (xy 86.36 120.65) (xy 107.95 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d4dc2971-931d-4b7f-8455-41ea90701d4e") + ) + (wire + (pts + (xy 215.9 38.1) (xy 237.49 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d5548c2a-6361-402d-b4cf-efb1df0905d9") + ) + (wire + (pts + (xy 181.61 73.66) (xy 186.69 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d58dab35-97df-4b7b-ada6-2df5b8971653") + ) + (wire + (pts + (xy 50.8 156.21) (xy 57.15 156.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d7d7c2b8-0148-4c90-9555-8ad4e3294b29") + ) + (wire + (pts + (xy 331.47 73.66) (xy 339.09 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d8515a49-f455-459e-8048-2aa3453b1a56") + ) + (wire + (pts + (xy 5.08 55.88) (xy 5.08 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d8a22b22-d15e-4274-ad8c-ba079c5c8eca") + ) + (wire + (pts + (xy 34.29 120.65) (xy 43.18 120.65) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db362416-4f42-40fc-b875-bac90ddd8e0e") + ) + (wire + (pts + (xy 339.09 128.27) (xy 339.09 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "db3de2a2-e5fa-4bc7-8d42-6c552fdac6cc") + ) + (wire + (pts + (xy 86.36 109.22) (xy 107.95 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e4844afa-2153-4de9-8abb-584e7af86f1d") + ) + (wire + (pts + (xy 181.61 45.72) (xy 186.69 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e69b2067-4c9f-4936-a03a-c5ce4c7de264") + ) + (wire + (pts + (xy 34.29 38.1) (xy 34.29 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6d0dfce-4287-4138-820b-a2c0382fa8f2") + ) + (wire + (pts + (xy 279.4 135.89) (xy 300.99 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e770450e-8388-47cd-b98b-8585739d05bc") + ) + (wire + (pts + (xy 259.08 66.04) (xy 280.67 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e8249e7f-45f5-43d6-9d7d-c2cfa6a2d929") + ) + (wire + (pts + (xy 5.08 85.09) (xy 5.08 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea6d1337-8d45-48ce-b6cb-92a62394a5ae") + ) + (wire + (pts + (xy 173.99 81.28) (xy 194.31 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea9ccf1c-fd7e-4c7e-904e-21530029175f") + ) + (wire + (pts + (xy 339.09 111.76) (xy 6.35 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ebc19244-8471-4d8f-9221-77d52e057b11") + ) + (wire + (pts + (xy 22.86 81.28) (xy 33.02 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec83b6ae-5ad0-49ba-80f5-877ee9377f64") + ) + (wire + (pts + (xy 173.99 66.04) (xy 194.31 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eed80a20-1e37-4663-bac7-9ce8f69bbc1a") + ) + (wire + (pts + (xy 287.02 128.27) (xy 293.37 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ef66fe29-0f45-40f4-87e1-28ddfe63b590") + ) + (wire + (pts + (xy 72.39 128.27) (xy 78.74 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f03a5de7-32a1-4316-bdbb-3f56eeb4c453") + ) + (wire + (pts + (xy 130.81 53.34) (xy 152.4 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f05ad99c-40b7-40c9-9339-2161a6988103") + ) + (wire + (pts + (xy 172.72 93.98) (xy 193.04 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f0c2f546-9d67-49d0-833b-c627bad3ac39") + ) + (wire + (pts + (xy 129.54 135.89) (xy 151.13 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1a12efb-61a9-4a9d-b890-416181415118") + ) + (wire + (pts + (xy 129.54 93.98) (xy 151.13 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f1c5db7b-3e50-4bea-926c-ac9b9cd28289") + ) + (wire + (pts + (xy 33.02 135.89) (xy 43.18 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f23f1300-763c-4249-b92b-81a5c75ddd3f") + ) + (wire + (pts + (xy 129.54 163.83) (xy 107.95 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f27e01cd-d861-48b8-9f6b-7404e497f38e") + ) + (wire + (pts + (xy 173.99 53.34) (xy 194.31 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3864c58-dcc5-4f9d-9126-bfbb5b9dd84d") + ) + (wire + (pts + (xy 302.26 81.28) (xy 323.85 81.28) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3c0eecf-02fe-4be4-ac8a-f2846b2d59d7") + ) + (wire + (pts + (xy 180.34 128.27) (xy 185.42 128.27) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f5fb1abf-76c0-4826-ae76-7783f068ccec") + ) + (wire + (pts + (xy 43.18 163.83) (xy 33.02 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f71c6fb6-174c-4d13-9ced-6666873994eb") + ) + (wire + (pts + (xy 280.67 53.34) (xy 302.26 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa6ffc45-4225-4ef9-9fbd-2845700e539f") + ) + (wire + (pts + (xy 138.43 45.72) (xy 144.78 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fa7443f7-126f-4442-aa5d-be669677a107") + ) + (wire + (pts + (xy 214.63 93.98) (xy 236.22 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc96680a-534f-4aa1-a07a-fb147a88e63e") + ) + (wire + (pts + (xy 86.36 148.59) (xy 107.95 148.59) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fdfbc1e4-0afe-4f28-96de-9456fef42eb2") + ) + (wire + (pts + (xy 34.29 66.04) (xy 22.86 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe733860-7361-4202-a9c6-61b9957e2932") + ) + (hierarchical_label "RGB IN" + (shape input) + (at 6.35 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "b5d14908-95a1-486e-9375-6eb28533d784") + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 257.81 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "00cf9beb-8b6f-4e92-b017-877003886752") + (property "Reference" "LED42" + (at 257.556 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 257.556 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 257.81 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 257.81 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 257.81 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "23b16386-cde8-41ce-b2e3-35e9784d3b2b") + ) + (pin "2" + (uuid "6db79f41-8fff-4cd0-b52b-6ab3bf218e5e") + ) + (pin "3" + (uuid "b9f51d1e-2ba6-47e8-86a3-4fd75ccae283") + ) + (pin "1" + (uuid "d05e426c-ea2e-44ad-ae28-029990145e1e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED42") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 22.86 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "034c6eb4-808e-45ee-9624-932e1c1d5bc2") + (property "Reference" "LED16" + (at 22.606 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 22.606 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 22.86 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 22.86 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 22.86 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "ea069e9a-fbe9-4724-a01e-8e95338af1d5") + ) + (pin "2" + (uuid "60079cc5-eabb-44fd-b6ac-5bdb906bead1") + ) + (pin "3" + (uuid "907f2205-766c-4d0a-b78f-389c92c429e6") + ) + (pin "1" + (uuid "7f75ffde-27e1-4b00-a638-4841b7bb2207") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED16") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 87.63 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "04745eb6-b885-4323-91f8-9c4708829c14") + (property "Reference" "LED19" + (at 87.376 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 87.376 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 87.63 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 87.63 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 87.63 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "565b7a5e-e55f-40f6-93ea-24e4cae5f4a6") + ) + (pin "2" + (uuid "7bcc6f9c-fe36-424d-8019-40362a65ae25") + ) + (pin "3" + (uuid "c1f831ce-f577-44c3-908c-b013ed350e84") + ) + (pin "1" + (uuid "30048cfd-6bc0-45be-96b3-ccc31073ed02") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED19") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 236.22 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "062dd2c8-30ff-491a-bc07-0b6451b2e35b") + (property "Reference" "LED41" + (at 235.966 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 235.966 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 236.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 236.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 236.22 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "4ffef6ca-48aa-487b-9d5e-343b727facf0") + ) + (pin "2" + (uuid "c6f59b64-5d99-44b4-bf53-09cfb2dba589") + ) + (pin "3" + (uuid "e4130cb4-4bfb-4548-9a42-eb5fa6e4e436") + ) + (pin "1" + (uuid "d3fbf2e6-a71a-4a90-8ce3-75b64038cf29") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED41") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 214.63 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "06cdd5a6-e042-4b7d-a4e3-37a8f66ebba0") + (property "Reference" "LED68" + (at 214.376 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 214.376 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 214.63 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 214.63 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 214.63 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "71269ce0-0098-480e-aea0-c50a589f2054") + ) + (pin "2" + (uuid "6e315196-58c0-4872-aa11-ed7642e19206") + ) + (pin "3" + (uuid "55280e7c-3b14-401b-8a11-2bfd28992985") + ) + (pin "1" + (uuid "24d174de-1e0b-40ff-a389-9d229143222c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED68") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 236.22 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "19e33fbd-b96f-4cd9-9f9c-33735661330f") + (property "Reference" "LED55" + (at 235.966 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 235.966 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 236.22 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 236.22 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 236.22 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "7f2ea046-76d3-4469-9266-ed3573f74691") + ) + (pin "2" + (uuid "220a0d38-1a50-45c6-a0d9-d69003d537d7") + ) + (pin "3" + (uuid "184db708-811e-4138-bc89-6177aef6413c") + ) + (pin "1" + (uuid "e3e149e9-c5d0-4fdc-9498-680f7bb46514") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED55") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 237.49 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1c8283bb-9d9c-492d-873b-7aa96a010252") + (property "Reference" "LED11" + (at 237.236 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 237.236 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 237.49 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 237.49 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 237.49 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "92f8e8b1-e34e-429f-a15c-9e2c16b1643f") + ) + (pin "2" + (uuid "48ca863f-807b-4ea9-8b11-c6036ac182fa") + ) + (pin "3" + (uuid "6dd6d7b3-af36-4b52-855a-5a6547541ff0") + ) + (pin "1" + (uuid "8cfd18d8-ac09-45f9-ba11-7571dfec5b73") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 215.9 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "20a71778-925c-41a1-aae6-f7fc33938a41") + (property "Reference" "LED25" + (at 215.646 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 215.646 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 215.9 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 215.9 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 215.9 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "36470ec5-33e2-4a3b-8f76-c814ddadc5bc") + ) + (pin "2" + (uuid "234d30b5-6cdf-4d7f-98d9-f5b0aeb960a3") + ) + (pin "3" + (uuid "39b09eeb-a947-4a80-a479-6068dbebb564") + ) + (pin "1" + (uuid "0dfcb45c-7f7a-40e2-afaa-8fdb0a5b5873") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED25") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 64.77 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "214fb3dd-9c16-4635-8334-6ed4a2f33340") + (property "Reference" "LED47" + (at 64.516 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 64.516 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 64.77 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 64.77 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 64.77 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "a42346d4-b7be-4058-b962-ddaf669b559c") + ) + (pin "2" + (uuid "9938326f-c0f2-4bf6-bd09-27dcd0f2d05f") + ) + (pin "3" + (uuid "43e757ac-6a4a-4d64-bf63-ca65aece2859") + ) + (pin "1" + (uuid "bf068a0c-aa66-4e53-aa16-6d10f5fec873") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED47") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 259.08 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "227aff0e-251a-4a76-a730-a78f5475c1e4") + (property "Reference" "LED27" + (at 258.826 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 258.826 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 259.08 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 259.08 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 259.08 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "c06812f3-f54b-4a08-8f88-76561d4eadc1") + ) + (pin "2" + (uuid "b1556857-305d-430c-9b9b-4d5879a2da67") + ) + (pin "3" + (uuid "bb98027d-0f11-438e-ad93-573020b0fb2e") + ) + (pin "1" + (uuid "2a1eca2e-0f1b-4700-874b-69cd403aaf73") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED27") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 279.4 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "22f0e12f-157b-4433-a5cd-dbd38f3d0f54") + (property "Reference" "LED57" + (at 279.146 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 279.146 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 279.4 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 279.4 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 279.4 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "aa073dd5-30b3-4cfc-b0dd-18346f1ecf9b") + ) + (pin "2" + (uuid "7458f707-11d3-488e-9d8f-6f3044972b84") + ) + (pin "3" + (uuid "181c99e3-ebca-4449-b0aa-7460ac876102") + ) + (pin "1" + (uuid "04b82f2d-c793-4406-a77c-6841214b23ff") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED57") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 280.67 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "247d5e9b-1335-47d1-807c-8161b5f97618") + (property "Reference" "LED13" + (at 280.416 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 280.416 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 280.67 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 280.67 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 280.67 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "02e67558-9190-451e-9f25-5481a6ee3b96") + ) + (pin "2" + (uuid "2e4d86c7-3a8e-4a0e-93e8-3f59afaeaa3b") + ) + (pin "3" + (uuid "4537c6b9-461f-40d8-af6b-e4328aff9a28") + ) + (pin "1" + (uuid "6519cc47-1b5f-47d5-8a5e-1e15cc63c458") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 302.26 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "24f892e7-475f-467e-acc5-b7beb1d682b4") + (property "Reference" "LED14" + (at 302.006 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 302.006 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 302.26 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 302.26 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 302.26 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "d04735d1-f36b-42db-90f0-fd3271bbb66b") + ) + (pin "2" + (uuid "03aa2cbb-ea3c-4da4-8a69-0c661c80827b") + ) + (pin "3" + (uuid "465f3a28-c079-4375-a61e-75c09e44d775") + ) + (pin "1" + (uuid "c0196ca3-3883-4e42-b53f-2c523bdd19fa") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED14") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 302.26 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "272e3ab1-decb-4fe6-84ad-8590faff133b") + (property "Reference" "LED29" + (at 302.006 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 302.006 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 302.26 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 302.26 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 302.26 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "c70211aa-4d2b-4112-b928-ce0ba7363b6a") + ) + (pin "2" + (uuid "24d19c19-7275-49a9-ae3f-5d212bd58abd") + ) + (pin "3" + (uuid "f4ecdb23-4b06-4267-a35c-2afd958195d6") + ) + (pin "1" + (uuid "8ac88213-4d6e-403c-bcde-0baae4ed6972") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED29") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 44.45 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2837a6fe-b6dd-44ff-b76a-52a8a3c71f03") + (property "Reference" "LED2" + (at 44.196 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 44.196 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 44.45 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 44.45 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 44.45 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "5e77182e-43b3-4fe8-89f7-c80c92a7562c") + ) + (pin "2" + (uuid "e96a1cf3-86ef-47cd-996c-e64483dd6087") + ) + (pin "3" + (uuid "cff2a703-c143-461c-a136-bb48d75b8b97") + ) + (pin "1" + (uuid "2ff0396f-2f11-4f96-a3ac-cf7cc0114095") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 214.63 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "2e71b575-efc7-46a4-ae6a-f048788e83d5") + (property "Reference" "LED54" + (at 214.376 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 214.376 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 214.63 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 214.63 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 214.63 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "d03e1eee-cf0a-4823-9470-d1760cd18a48") + ) + (pin "2" + (uuid "66a43ec1-f592-471e-a3c7-529e4a51587f") + ) + (pin "3" + (uuid "d8cf99e0-d281-45a5-bcdf-215eff39fb2a") + ) + (pin "1" + (uuid "5d8a88d9-6023-484f-bc54-76f8ce1367de") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED54") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 152.4 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "350a75c8-8a5c-47ac-aa8e-24cbeab2e57e") + (property "Reference" "LED7" + (at 152.146 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 152.146 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 152.4 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 152.4 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 152.4 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "f02d263d-d766-4340-9e49-487893e86672") + ) + (pin "2" + (uuid "f2b905ef-aa73-4773-98bf-6c944fbbadb1") + ) + (pin "3" + (uuid "a36ea5a6-c9fe-461d-841e-d31a66d3b336") + ) + (pin "1" + (uuid "2ccaf748-25dc-4814-81c8-b4245816fb09") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 86.36 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "359adf5b-7a8d-4a0b-9baa-f947b3b10d84") + (property "Reference" "LED34" + (at 86.106 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 86.106 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 86.36 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 86.36 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 86.36 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "609f8351-ae14-43db-b566-598dc43a0ace") + ) + (pin "2" + (uuid "b83e4e16-f264-44d8-b3eb-28a6cddc6898") + ) + (pin "3" + (uuid "e170849f-4628-4e63-ac71-e0a5cfbbbda0") + ) + (pin "1" + (uuid "33e02443-3a1c-4160-b0bb-758f325dbbcd") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED34") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 87.63 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "36effd9e-0ae7-4e66-b47b-ead1e8f8c8a2") + (property "Reference" "LED4" + (at 87.376 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 87.376 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 87.63 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 87.63 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 87.63 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "1ce47794-2336-4348-bf1b-62848801fea6") + ) + (pin "2" + (uuid "da9625be-319f-418c-866a-48501b9be898") + ) + (pin "3" + (uuid "40020d12-44aa-4440-8ae2-a4c2d9a45f50") + ) + (pin "1" + (uuid "a63813a0-71c7-4dad-a8c2-cb824b42557d") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 129.54 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3ad26ec8-b6ff-4f2d-988c-e12db44e19af") + (property "Reference" "LED36" + (at 129.286 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 129.286 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 129.54 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 129.54 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 129.54 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "da550d18-ce97-4b2a-b397-09cd87c70b5f") + ) + (pin "2" + (uuid "b72ade1c-ac02-4b33-9b19-a2338ce8ed84") + ) + (pin "3" + (uuid "9f6db8dd-a9eb-48c7-b0fb-c4bebb13805d") + ) + (pin "1" + (uuid "d0118838-4634-4fec-a4eb-6784c4e5f6cb") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED36") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 64.77 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3d02d74f-b638-4c26-ac80-45d08281ef08") + (property "Reference" "LED61" + (at 64.516 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 64.516 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 64.77 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 64.77 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 64.77 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "3d67bda9-d134-4a8a-b8b4-8ca604569927") + ) + (pin "2" + (uuid "a8040a3d-a030-43d4-9327-2d41b12c141b") + ) + (pin "3" + (uuid "1d989c4a-c23b-45ab-8d7f-4883bf5330d8") + ) + (pin "1" + (uuid "8310e93c-664b-47bb-a5e3-70a10e9f1880") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED61") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 280.67 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3ecd9002-f2ad-4edd-a300-56bb92870ae0") + (property "Reference" "LED28" + (at 280.416 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 280.416 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 280.67 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 280.67 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 280.67 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "e849fc60-0e8a-4292-81f5-4022c14edfc4") + ) + (pin "2" + (uuid "37bb0a8b-1ef4-4b7d-9b79-f77d1082f77e") + ) + (pin "3" + (uuid "59542c47-3364-49e4-bb93-8c4ffba3afca") + ) + (pin "1" + (uuid "575f7f7c-f2c8-41c0-9f57-19a8bccdb022") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED28") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 172.72 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "44918a5d-3d1a-4836-bcdd-78bffaa0f2aa") + (property "Reference" "LED38" + (at 172.466 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 172.466 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 172.72 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 172.72 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 172.72 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "d8fb0f9f-287a-4d34-92ea-bf6b0c113e88") + ) + (pin "2" + (uuid "bf98ccc4-b33e-4a9e-9145-7ae42a2fbaf2") + ) + (pin "3" + (uuid "b4d7cdf6-7a57-4b31-9bf7-b82679633754") + ) + (pin "1" + (uuid "f2477e1e-e862-4a00-b623-47763f4cfff9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED38") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 215.9 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "4e0a570d-3fa0-45c5-91ee-37dcaa695237") + (property "Reference" "LED10" + (at 215.646 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 215.646 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 215.9 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 215.9 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 215.9 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "ac80a94b-2b88-4874-9d1e-2f4d787b72c9") + ) + (pin "2" + (uuid "95000e8e-c958-4a13-8eb6-4e6b88f76dcf") + ) + (pin "3" + (uuid "8d30367f-147e-4308-a1db-318fb035763c") + ) + (pin "1" + (uuid "e9235eb0-fbd0-473b-aee5-1d447f6aeaa9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 130.81 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "51bd0d15-29da-4f25-afd2-e11fe08da027") + (property "Reference" "LED21" + (at 130.556 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 130.556 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 130.81 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 130.81 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 130.81 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "55651970-bd0d-4125-84a9-b34701a0a03d") + ) + (pin "2" + (uuid "4aa67214-2cf8-402a-8355-7924508fb2aa") + ) + (pin "3" + (uuid "c04d815b-5bfb-489a-aa4c-81b9a5059f13") + ) + (pin "1" + (uuid "cc5b4f83-0716-4733-a7a6-3aacbea3403e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED21") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 86.36 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "59974637-14b2-4d58-9e2a-fa9ddac1dcda") + (property "Reference" "LED62" + (at 86.106 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 86.106 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 86.36 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 86.36 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 86.36 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "a74ae27e-dd01-4107-a4c9-6a9b8cf20a4f") + ) + (pin "2" + (uuid "2c75c5ef-5ea9-4961-be02-92869ba1485d") + ) + (pin "3" + (uuid "29ed760c-61e5-4a64-a29e-285cccbd34ea") + ) + (pin "1" + (uuid "4e9e92af-af42-4c92-ac04-694d9cc1dde6") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED62") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 129.54 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5dd61d0f-9ad3-478b-9795-fcab450a26f0") + (property "Reference" "LED64" + (at 129.286 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 129.286 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 129.54 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 129.54 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 129.54 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "2fedea5b-7018-46f5-b166-d03b4492ec06") + ) + (pin "2" + (uuid "7ebe4b33-2677-4620-a5d8-0287541c6351") + ) + (pin "3" + (uuid "29590787-c6f9-4b47-8da0-92ff3c5f3042") + ) + (pin "1" + (uuid "ce0118f3-b8ac-43d5-bd74-9d52be6ab88e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED64") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 107.95 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "644fd1c0-20bb-4bdb-9e28-8f60c3c9e84b") + (property "Reference" "LED35" + (at 107.696 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 107.696 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 107.95 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 107.95 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 107.95 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "9026a642-1218-426c-a3e4-9a7fd55910d3") + ) + (pin "2" + (uuid "cd946603-ef75-4147-a23e-79b7c8aee96f") + ) + (pin "3" + (uuid "b5c6b013-fe10-4583-a33e-eb09b0dac53a") + ) + (pin "1" + (uuid "52bc6914-85b3-46b3-881c-adb21b209349") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED35") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 173.99 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6b1a0b69-9d64-4348-8ddc-ffbb0050a1cf") + (property "Reference" "LED8" + (at 173.736 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 173.736 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 173.99 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 173.99 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 173.99 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "37d12165-db5b-44d7-b864-ba2660522fe9") + ) + (pin "2" + (uuid "88c9fa13-1ec7-4630-900a-920b8a3ff237") + ) + (pin "3" + (uuid "e1b15f6b-c4d1-4c6e-8838-ddce2dc7dd68") + ) + (pin "1" + (uuid "5785b0d1-e78c-4092-98d9-576b2e15e14b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 21.59 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6f5ef4b4-9c17-4c4e-b3d3-4dd618263f2e") + (property "Reference" "LED59" + (at 21.336 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 21.336 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 21.59 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 21.59 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 21.59 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "1351ca3c-a838-4949-8aa2-b1c51e95d5bd") + ) + (pin "2" + (uuid "60bdd374-bb93-4f33-9663-1caf889ce064") + ) + (pin "3" + (uuid "3849c061-3005-4ffe-9bac-61f091540585") + ) + (pin "1" + (uuid "f9fa6fd0-bb7c-43da-8d88-e2b75b1aece5") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED59") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 34.29 22.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "701dad2d-e0f1-426f-8d9a-67b2e8900f1c") + (property "Reference" "#PWR08" + (at 34.29 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 34.29 17.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 34.29 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 34.29 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 34.29 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b6ce7772-5925-40c3-b6bf-3cab943b2c49") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 194.31 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "71bb0882-991e-4007-8691-cab0ea025da7") + (property "Reference" "LED24" + (at 194.056 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 194.056 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 194.31 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 194.31 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 194.31 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "0f9a9213-1eb0-4fb7-8239-94a1f3b05958") + ) + (pin "2" + (uuid "b86f293f-c951-442d-8a1e-15d5da5fa138") + ) + (pin "3" + (uuid "200116fb-3f61-4b34-8fa1-e4b395b9e694") + ) + (pin "1" + (uuid "5718c24b-f60c-489d-8adb-bc2395175ac9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED24") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 193.04 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "71c027fb-4ebd-421b-89d7-7870303aef5f") + (property "Reference" "LED67" + (at 192.786 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 192.786 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 193.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 193.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 193.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "c1a4aef9-6517-4be4-8217-5bc41b3b5d56") + ) + (pin "2" + (uuid "ab664275-1507-4b43-bcdd-27c961b85862") + ) + (pin "3" + (uuid "834c3916-ad98-404e-a123-0d5d61028c03") + ) + (pin "1" + (uuid "670b5a15-b6fc-4c5b-8e40-06d628b70f50") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED67") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 323.85 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7ddbc399-a765-4f10-b0b3-da4d1a32c9d8") + (property "Reference" "LED30" + (at 323.596 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 323.596 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 323.85 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 323.85 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 323.85 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "f4f1a6c5-a2ad-449d-9948-f1310c0ad9b3") + ) + (pin "2" + (uuid "2ff98bf6-2097-45de-9344-444bbc31016c") + ) + (pin "3" + (uuid "14f377c2-5e5c-4968-a51d-0d52adf77f20") + ) + (pin "1" + (uuid "1f72bdb1-7b14-4cb7-8158-5d896aebae99") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED30") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 43.18 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7e355e6d-71eb-444e-bb7a-dc4b451ff7bb") + (property "Reference" "LED32" + (at 42.926 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 42.926 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 43.18 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 43.18 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "343907a9-ec98-4b3e-92b3-c6b1e35445a9") + ) + (pin "2" + (uuid "0eb7b248-486a-4f7b-8a30-b39548172016") + ) + (pin "3" + (uuid "0b7c9369-dd5a-4a55-bae5-bd29173f924f") + ) + (pin "1" + (uuid "1db1f05d-9dac-4902-a625-82a644ef2de1") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED32") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 21.59 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "81701e4c-fd70-44fd-bb17-59445b617227") + (property "Reference" "LED45" + (at 21.336 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 21.336 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 21.59 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 21.59 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 21.59 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "b90ecb4d-a95d-4929-ad22-3c3bfc1e9b0e") + ) + (pin "2" + (uuid "b258b045-0679-4111-9740-ff4a04609b05") + ) + (pin "3" + (uuid "0c0d5564-cd8b-4082-9544-d75bc31ad83e") + ) + (pin "1" + (uuid "22b1694e-80f0-4759-85cb-bdd5d1cd58dd") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED45") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 300.99 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "817e0f0b-a0a5-4132-9c38-9330e9087e85") + (property "Reference" "LED58" + (at 300.736 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 300.736 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 300.99 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 300.99 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 300.99 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "961a1a22-7c75-4b12-8718-9d508ef96682") + ) + (pin "2" + (uuid "d942053e-6b48-4c5c-8011-01790f52a45d") + ) + (pin "3" + (uuid "f31546cb-a904-40b1-af86-b8f0354fa7b3") + ) + (pin "1" + (uuid "ac065a87-bd04-47d1-b165-f2eedfe074f8") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED58") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 129.54 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "82b76e17-b844-4dfb-9576-c8d12d393949") + (property "Reference" "LED50" + (at 129.286 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 129.286 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 129.54 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 129.54 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 129.54 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "6d641010-39cf-4a82-8b74-fc1ca3ec4680") + ) + (pin "2" + (uuid "5c4b16d5-6c3b-495d-bd7e-39f3c65e8aaa") + ) + (pin "3" + (uuid "8a6f6b48-4468-4bad-8d5b-590b3e032077") + ) + (pin "1" + (uuid "a565408d-2b18-4e22-9b3a-c826b3f074eb") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED50") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 172.72 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "83bf5744-1dfe-4328-9ace-1b3d48de41e2") + (property "Reference" "LED66" + (at 172.466 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 172.466 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 172.72 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 172.72 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 172.72 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "aa2bf548-f3c1-4ca0-9d8b-c35b345e0829") + ) + (pin "2" + (uuid "74f6fdba-f0df-442b-a81c-fd13b653a91c") + ) + (pin "3" + (uuid "7170f5e6-bbff-4115-a2cd-e72d26fb83be") + ) + (pin "1" + (uuid "07e7ab93-86e8-4f36-b0f0-a9556c7258ee") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED66") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at -3.81 55.88 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "88feaf33-985f-4a8b-bdb8-beb48d749c21") + (property "Reference" "#PWR014" + (at -3.81 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at -3.81 60.96 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -3.81 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at -3.81 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at -3.81 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e0001e6c-3868-4d96-a0b5-aa9bfab396b0") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "#PWR014") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 193.04 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8ba201a3-e229-430a-ae78-b5d27fd30156") + (property "Reference" "LED53" + (at 192.786 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 192.786 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 193.04 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 193.04 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 193.04 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "c44f9b48-e1d6-4dae-9f65-1015d6b7d9df") + ) + (pin "2" + (uuid "f8d3578c-5f47-4a0a-a7a3-896c6ad0f66d") + ) + (pin "3" + (uuid "3f0b9578-4034-46cc-ad94-6f99fa10a318") + ) + (pin "1" + (uuid "6f1307b5-8e18-426d-a790-3be0d54f4c6c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED53") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 107.95 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8bff860f-7b68-43e3-a38e-62a206b00602") + (property "Reference" "LED63" + (at 107.696 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 107.696 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 107.95 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 107.95 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 107.95 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "36f40b7d-1b83-4ba3-9864-fa88ead25057") + ) + (pin "2" + (uuid "b7d52329-a601-42bb-b875-1ef9b5440a18") + ) + (pin "3" + (uuid "1e3d8013-cd38-4da7-85df-ef2a41b9a2ad") + ) + (pin "1" + (uuid "6e09da51-c0f8-4ff6-8513-79906fd15b3c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED63") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 152.4 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8e8d6b99-053c-47d7-9419-d129d85f096b") + (property "Reference" "LED22" + (at 152.146 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 152.146 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 152.4 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 152.4 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 152.4 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "3c77f40e-3b30-45bd-9f21-84cf723a4709") + ) + (pin "2" + (uuid "94f0cd78-5cf3-4f6f-bc04-52a17cb8659e") + ) + (pin "3" + (uuid "bbd17f98-a408-496b-9c53-f17850bfa30e") + ) + (pin "1" + (uuid "38f31516-3d52-4bf8-a781-256cf21c06cb") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED22") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 21.59 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "905d84dd-b4a8-4deb-aa4a-d50ea91d2951") + (property "Reference" "LED31" + (at 21.336 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 21.336 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 21.59 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 21.59 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 21.59 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "a766e965-1daa-4dcf-b810-0eba84535de7") + ) + (pin "2" + (uuid "cc507746-39ff-4258-9602-44b35ff85c92") + ) + (pin "3" + (uuid "325ac01b-f4d8-4298-a382-1f8bc3f3a69a") + ) + (pin "1" + (uuid "f3555489-441c-42d3-b299-549d9db8a58b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED31") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 193.04 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9a2dc378-e2ca-4c8b-bec7-09b0b21b7d27") + (property "Reference" "LED39" + (at 192.786 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 192.786 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 193.04 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 193.04 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 193.04 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "1d0e5f59-ccf7-4e50-b6a1-a2926fcbcd58") + ) + (pin "2" + (uuid "ef033890-62a2-4260-8014-990c1f054eae") + ) + (pin "3" + (uuid "8db2a7c2-65ac-4c2e-a067-e683154da3d1") + ) + (pin "1" + (uuid "821b10f9-ded0-46c0-9ffc-efe2c5d00e63") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED39") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 151.13 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9a35d3ca-c505-4475-a771-ea4de06fce88") + (property "Reference" "LED37" + (at 150.876 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 150.876 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 151.13 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 151.13 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 151.13 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "06d9832b-48ac-4b30-ad08-e352f035ae3d") + ) + (pin "2" + (uuid "63a8b03d-bae2-4101-a7b6-543edb1146e6") + ) + (pin "3" + (uuid "008437ac-32f0-4f31-ae60-e5393dd19712") + ) + (pin "1" + (uuid "b69c1b5b-249c-4329-9fc8-3b93448e5037") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED37") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 130.81 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a292fa58-d9e0-4f7b-8098-871fe25b268c") + (property "Reference" "LED6" + (at 130.556 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 130.556 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 130.81 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 130.81 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 130.81 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "313eb83b-a261-4b0b-9bb5-92d73d907d33") + ) + (pin "2" + (uuid "21250748-ee80-4733-b55f-4e237f0afc5e") + ) + (pin "3" + (uuid "ea04456f-88a8-4a7d-bd39-3a462b5b07d6") + ) + (pin "1" + (uuid "693529b6-2f2a-4f08-8358-acdb9328b11f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 44.45 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a3a0d376-8cb8-446e-aaac-89765570e8b4") + (property "Reference" "LED17" + (at 44.196 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 44.196 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 44.45 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 44.45 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 44.45 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "c7b6d915-0196-44a0-96fe-7564f8725ddb") + ) + (pin "2" + (uuid "14248ac4-a377-4182-ba6b-9d88e4a3b5ac") + ) + (pin "3" + (uuid "75809df3-2ea3-4aa3-b5a4-bd9a2e3ffb2d") + ) + (pin "1" + (uuid "334e3318-b0c8-4d1c-bcca-54daf85ed995") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED17") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 151.13 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a3d14776-6fa9-47c5-b30e-3892ecafee29") + (property "Reference" "LED51" + (at 150.876 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 150.876 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 151.13 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 151.13 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 151.13 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "7be01bf9-2f59-4fd6-bb46-43c88d9a0711") + ) + (pin "2" + (uuid "b5377228-c4d3-4379-9f7d-59ef60c14439") + ) + (pin "3" + (uuid "ac29251e-6357-4cb0-b5fa-f99a33a36c8a") + ) + (pin "1" + (uuid "fdea4acd-881d-4d53-a64f-236d745f635c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED51") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 259.08 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a5872574-e618-46f2-90d6-b089857205cd") + (property "Reference" "LED12" + (at 258.826 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 258.826 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 259.08 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 259.08 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 259.08 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "dd3630bb-4f6e-4570-bff8-3d4c90eab62d") + ) + (pin "2" + (uuid "6a027394-7fa0-4d29-8ae1-1f9537aaa805") + ) + (pin "3" + (uuid "1c86e828-a6b0-45e3-816e-43e14aa85c74") + ) + (pin "1" + (uuid "abc4c3cb-974e-49ed-b30f-c275523c6060") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED12") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 109.22 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "a7d89747-97c8-4778-ab96-c30431500c17") + (property "Reference" "LED5" + (at 108.966 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 108.966 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 109.22 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 109.22 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 109.22 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "40230509-27da-43e8-a0a1-6a2c9e18df5a") + ) + (pin "2" + (uuid "ced9b986-7749-43cf-ab85-b92b8aabd26a") + ) + (pin "3" + (uuid "8abbec52-442a-42ba-9c73-82c611caf005") + ) + (pin "1" + (uuid "058d5819-d693-45bc-a63b-26af70a300da") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 86.36 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "af3a4e04-075e-4754-8c7f-ecee21817b7a") + (property "Reference" "LED48" + (at 86.106 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 86.106 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 86.36 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 86.36 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 86.36 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "4b6489b5-e3f1-4c6b-a1aa-1b4bd1f1a800") + ) + (pin "2" + (uuid "298dc07a-7459-4f61-9d7d-7acd1a7d31ba") + ) + (pin "3" + (uuid "930dffcc-94e8-467f-8dfc-bc9f576124e2") + ) + (pin "1" + (uuid "c5689b01-4d39-47c2-9629-a99a0a41f0fe") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED48") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 151.13 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b56c8504-c0d6-46e6-9997-24233c29f427") + (property "Reference" "LED65" + (at 150.876 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 150.876 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 151.13 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 151.13 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 151.13 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "ecc7d9f3-d454-45e5-adca-96def8ad8d72") + ) + (pin "2" + (uuid "ac33116a-e3ae-47de-9474-be39653fb466") + ) + (pin "3" + (uuid "7fc94d35-b839-4b3f-93f0-fe053e8591a1") + ) + (pin "1" + (uuid "e2d6305d-579f-49aa-98c9-6efbc93d851f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED65") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 279.4 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b9bf3c83-754d-416f-993e-1ac3a4c6aaf9") + (property "Reference" "LED43" + (at 279.146 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 279.146 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 279.4 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 279.4 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 279.4 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "597090be-b661-4a39-8baf-7823f2fdc016") + ) + (pin "2" + (uuid "86f5c99c-2d43-424e-abd9-e38acf75bc92") + ) + (pin "3" + (uuid "745f4882-4b02-4006-b1d3-412f5ede7a9c") + ) + (pin "1" + (uuid "3bc13c3d-bfbf-4103-85db-c8a5011896b4") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED43") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 173.99 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "be63a99d-e489-4f6c-8fb4-7bdc1036d19f") + (property "Reference" "LED23" + (at 173.736 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 173.736 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 173.99 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 173.99 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 173.99 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "ad590b82-7bf8-46dc-a5a8-7940672dc56d") + ) + (pin "2" + (uuid "71ef3682-178e-41d9-9018-58248fafc603") + ) + (pin "3" + (uuid "ec978582-34a1-47a0-9346-8f518587e65d") + ) + (pin "1" + (uuid "ffa0302e-52dd-49ba-80a2-367e9c45774e") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED23") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 43.18 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c88009aa-9812-4b18-9c25-d22e0baeb5a5") + (property "Reference" "LED46" + (at 42.926 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 42.926 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 43.18 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 43.18 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "58c1a35e-f45a-4efb-a09b-c2bd20782910") + ) + (pin "2" + (uuid "2445fa52-660d-4e27-87e3-c74fcd9b3e01") + ) + (pin "3" + (uuid "3f96d804-9021-4e54-b6ef-d17a33cb250a") + ) + (pin "1" + (uuid "7ff38ad6-583c-4d32-8cde-7b0ffa7ba15f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED46") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 107.95 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c9b30116-3367-4e7a-a031-560c6cb6056a") + (property "Reference" "LED49" + (at 107.696 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 107.696 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 107.95 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 107.95 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 107.95 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "b847a50b-e033-4d6a-8c80-ad1b94a32000") + ) + (pin "2" + (uuid "4ac00b72-d38e-4e00-9a22-9b4d0e8b767b") + ) + (pin "3" + (uuid "24295aec-c2df-4b8a-98de-305bcb427cde") + ) + (pin "1" + (uuid "6a1db8d6-c052-4d47-9459-edddbee6e1d8") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED49") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 43.18 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "ce6b0646-a10f-4aa1-85f2-4cbd0f59eb64") + (property "Reference" "LED60" + (at 42.926 141.224 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 42.926 143.764 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "914ea058-58ef-478a-a7b8-8801fb4e9183") + ) + (pin "2" + (uuid "cb830791-90d3-4034-890e-bea448d9a8d6") + ) + (pin "3" + (uuid "64d3ba35-12f2-4600-9c01-485e00e20e15") + ) + (pin "1" + (uuid "53829c5c-69c8-4dc7-ac1e-54ddf69733aa") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED60") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 64.77 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cfdf2d60-47ee-4a31-ab1a-1a9126f0f834") + (property "Reference" "LED33" + (at 64.516 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 64.516 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 64.77 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 64.77 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 64.77 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "4ee9faf7-d457-4cd8-934c-47283f2cda90") + ) + (pin "2" + (uuid "c9bfef8b-2c74-438e-bbed-c17d0f1993e9") + ) + (pin "3" + (uuid "47c2da30-79b5-4400-9396-2948635b7ef8") + ) + (pin "1" + (uuid "570c2ac3-2529-41e0-a1eb-4f323a5c846b") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED33") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 257.81 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "cffbc227-613c-4c83-b97a-3f097d8cd1b8") + (property "Reference" "LED56" + (at 257.556 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 257.556 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 257.81 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 257.81 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 257.81 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "d781f74f-cb30-4f04-af4b-28e07597923d") + ) + (pin "2" + (uuid "dc1ea60d-8abb-4690-afcf-8489bb261b55") + ) + (pin "3" + (uuid "d090caec-d2d4-4aef-a9b5-bfdb0f887baa") + ) + (pin "1" + (uuid "95443561-67d2-4acb-bce8-a90647339de1") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED56") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 109.22 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d28eaf1d-5f4c-4828-818f-1afa75fe7c2d") + (property "Reference" "LED20" + (at 108.966 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 108.966 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 109.22 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 109.22 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 109.22 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "affe27cc-0bbb-4a84-87a7-689cccd78862") + ) + (pin "2" + (uuid "21263159-0f84-45b5-9ab8-20ac69616dcb") + ) + (pin "3" + (uuid "2ea125c4-c5f5-4594-868f-9ade3de80c3f") + ) + (pin "1" + (uuid "90c520a3-1541-4c6a-a991-a2c7c421c640") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED20") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 66.04 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d5cb79b7-1add-4c53-bde6-bda769843ef3") + (property "Reference" "LED3" + (at 65.786 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 65.786 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 66.04 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 66.04 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 66.04 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "795943e6-a9a9-4a3d-ac18-e462a7f14268") + ) + (pin "2" + (uuid "74b68d88-3357-4a4c-9664-28f9034c39ca") + ) + (pin "3" + (uuid "8392d065-8b4b-42b6-80e3-93f621ad7d37") + ) + (pin "1" + (uuid "df9471b2-e0bc-4c78-bf43-ca842da0f9b9") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 323.85 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "d9816269-938d-4f7f-bf7f-78022f2e5698") + (property "Reference" "LED15" + (at 323.596 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 323.596 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 323.85 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 323.85 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 323.85 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "e3484f74-be2d-4bc4-a4ae-cf3b48dc1760") + ) + (pin "2" + (uuid "c1051740-bfad-4d88-b4d0-7a9b7759bb30") + ) + (pin "3" + (uuid "9b5b4874-6b95-44b9-941d-46a148b3b99d") + ) + (pin "1" + (uuid "039ca9c3-7756-4338-ba56-e7af90bc486f") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED15") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 237.49 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "da6b6809-5afc-4652-bf7e-e83f0a60c65b") + (property "Reference" "LED26" + (at 237.236 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 237.236 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 237.49 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 237.49 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 237.49 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "3f61a2ee-a81e-48fe-a82f-0a4fa7fd7202") + ) + (pin "2" + (uuid "a96a7805-d87d-4872-8743-4ec5204850dd") + ) + (pin "3" + (uuid "33c33a6b-58a2-47fd-86dc-af321ffff796") + ) + (pin "1" + (uuid "4e6d3775-a09d-4f67-9467-388ca0a21bc6") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED26") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 194.31 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e48d8c67-7e0c-46f7-b682-efb9e1b73fd9") + (property "Reference" "LED9" + (at 194.056 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 194.056 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 194.31 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 194.31 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 194.31 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "ea7cbd2a-508f-4b2c-9acd-c91e2391f442") + ) + (pin "2" + (uuid "63a018d1-bb5c-4e56-9e51-a1f38231ac36") + ) + (pin "3" + (uuid "e4ffeb97-680b-4e8a-ad94-6aeced61e9f2") + ) + (pin "1" + (uuid "da0ab84b-b563-4632-b913-a1bca6718046") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 22.86 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e61aecf2-8aef-4a76-b3b4-8a52c719577f") + (property "Reference" "LED1" + (at 22.606 30.734 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 22.606 33.274 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 22.86 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 22.86 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 22.86 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "5472a35a-b506-4e9a-b4a4-ba2d18b83282") + ) + (pin "2" + (uuid "fd754c7d-f2be-407e-bb01-09e79b35737f") + ) + (pin "3" + (uuid "130a4eaf-b7d0-40b9-bcb8-04c0df0f9074") + ) + (pin "1" + (uuid "1603b690-1b48-4f60-9611-334a1a00d1eb") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 66.04 73.66 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e798095a-03d3-4973-a3cd-19877a5e052d") + (property "Reference" "LED18" + (at 65.786 58.674 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 65.786 61.214 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 66.04 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 66.04 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 66.04 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "4d0ca22c-dc62-492b-85b7-9f005512bfea") + ) + (pin "2" + (uuid "209452ef-641f-4e99-9b4b-429a5291f9be") + ) + (pin "3" + (uuid "3cb1568f-4803-43e6-b4c7-35cbdfd70dca") + ) + (pin "1" + (uuid "a23b8064-7493-46b6-93b9-060c9e9d94e1") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED18") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 214.63 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f05ef502-51eb-4c6c-81b0-c29bdc6b5369") + (property "Reference" "LED40" + (at 214.376 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 214.376 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 214.63 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 214.63 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 214.63 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "56361d3e-1076-446b-801f-c7cb0344fe4a") + ) + (pin "2" + (uuid "edf71998-f62e-4108-b2ee-681d02c978d7") + ) + (pin "3" + (uuid "ca527452-5957-41a8-b0e7-3adb6b9c667e") + ) + (pin "1" + (uuid "b04b3f9d-2b5f-46b8-b4f3-9e0d98d2d156") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED40") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 300.99 101.6 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f519faac-684e-4ebb-aaab-b64638955abc") + (property "Reference" "LED44" + (at 300.736 86.614 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 300.736 89.154 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 300.99 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 300.99 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 300.99 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "58763344-b4b6-4d43-b413-88760a3d3e45") + ) + (pin "2" + (uuid "76cddcfb-6fa6-4eeb-a0a7-551479f68f14") + ) + (pin "3" + (uuid "7cff6a09-b21a-4860-93fe-01fd55f67fee") + ) + (pin "1" + (uuid "e8e7be3f-4779-43b4-ba98-5459584f4277") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED44") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_marbastlib-choc:choc_SK6812MINI-E") + (at 172.72 128.27 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f90193c1-0b7d-44b9-90ea-1a0761e5bae3") + (property "Reference" "LED52" + (at 172.466 113.284 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "choc_SK6812MINI-E" + (at 172.466 115.824 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_marbastlib-choc:LED_choc_6028R" + (at 172.72 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 172.72 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Reverse mount adressable LED (WS2812 protocol)" + (at 172.72 128.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "a2aad63f-1a0d-43c6-8cf6-fdb19e9fb07b") + ) + (pin "2" + (uuid "7d2f0f0f-8494-461e-af9a-768e65a33073") + ) + (pin "3" + (uuid "ed11e914-cccc-4390-b0f1-3ac097656aeb") + ) + (pin "1" + (uuid "60e01e20-ed56-4784-aeaf-dfc61b27c55c") + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82/0330dd45-2776-4667-9e47-eb2dbca2bb32" + (reference "LED52") + (unit 1) + ) + ) + ) + ) +) diff --git a/hardware/68percent/68percent-backups/usbpow.kicad_sch b/hardware/68percent/68percent-backups/usbpow.kicad_sch new file mode 100644 index 00000000..407ba091 --- /dev/null +++ b/hardware/68percent/68percent-backups/usbpow.kicad_sch @@ -0,0 +1,52 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "3cb9f3e3-5e6a-4c23-8d8d-52b5ae63fbaf") + (paper "A4") + (lib_symbols) + (text "USB Receptacle. Needs to be a USB C connector.\nESD Protection would be nice\nAdd a diode to prevent backflow from other 5v sources (i.e. modules)\nMake sure D+/D- are differential lines" + (exclude_from_sim no) + (at 101.346 90.932 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "b8671ba6-87fa-4960-bcc3-fbddf17f4d76") + ) + (hierarchical_label "D-" + (shape input) + (at 177.8 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "5cbd4a5a-ac39-4a2d-a0ad-0c3ce3f9d635") + ) + (hierarchical_label "D+" + (shape input) + (at 177.8 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "80d42395-23c2-4264-878d-42f2e81a4374") + ) + (hierarchical_label "5v" + (shape input) + (at 177.8 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "b70746ac-3765-45c4-a69a-b93b10cc6628") + ) +) diff --git a/hardware/68percent/68percent.kicad_prl b/hardware/68percent/68percent.kicad_prl index 9b7e039f..8b71b979 100644 --- a/hardware/68percent/68percent.kicad_prl +++ b/hardware/68percent/68percent.kicad_prl @@ -92,18 +92,18 @@ 11 ], "col_widths": [ - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 165 + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 ], "custom_group_rules": [], "expanded_rows": [], diff --git a/hardware/68percent/68percent.kicad_sch b/hardware/68percent/68percent.kicad_sch index 8d307b4b..09c84159 100644 --- a/hardware/68percent/68percent.kicad_sch +++ b/hardware/68percent/68percent.kicad_sch @@ -1,12349 +1,12349 @@ -(kicad_sch - (version 20250114) - (generator "eeschema") - (generator_version "9.0") - (uuid "a3d0d559-cac8-4859-ad0f-79ad0c1a1a82") - (paper "A4") - (lib_symbols - (symbol "PCM_4ms_Connector:Conn_01x04" - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "J" - (at 0 5.08 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x04" - (at 0 -7.62 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "4ms_Connector:Pins_1x04_2.54mm_TH_SWD" - (at 0 6.985 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at -3.175 -14.605 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at -2.54 -9.398 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0401FBV0T" - (at -2.54 -10.922 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "ki_keywords" "Conn_01x04" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "Conn_01x04_1_1" - (rectangle - (start -1.27 3.81) - (end 1.27 -6.35) - (stroke - (width 0.254) - (type default) - ) - (fill - (type background) - ) - ) - (rectangle - (start -1.27 2.667) - (end 0 2.413) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 0.127) - (end 0 -0.127) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 -2.413) - (end 0 -2.667) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 -4.953) - (end 0 -5.207) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (pin passive line - (at -5.08 2.54 0) - (length 3.81) - (name "Pin_1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 0 0) - (length 3.81) - (name "Pin_2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -2.54 0) - (length 3.81) - (name "Pin_3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -5.08 0) - (length 3.81) - (name "Pin_4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Connector:Conn_01x06" - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "J" - (at 0 7.62 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x06" - (at 0 -10.16 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "4ms_Connector:Pins_1x06_2.54mm_TH_SWD" - (at 0 -17.78 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 -1.27 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" - (at -1.905 -15.875 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at -2.54 -12.7 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0601FBV0T" - (at -1.905 -14.605 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "ki_keywords" "Conn_01x06" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "Conn_01x06_1_1" - (rectangle - (start -1.27 6.35) - (end 1.27 -8.89) - (stroke - (width 0.254) - (type default) - ) - (fill - (type background) - ) - ) - (rectangle - (start -1.27 5.207) - (end 0 4.953) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 2.667) - (end 0 2.413) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 0.127) - (end 0 -0.127) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 -2.413) - (end 0 -2.667) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 -4.953) - (end 0 -5.207) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 -7.493) - (end 0 -7.747) - (stroke - (width 0.1524) - (type default) - ) - (fill - (type none) - ) - ) - (pin passive line - (at -5.08 5.08 0) - (length 3.81) - (name "Pin_1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 2.54 0) - (length 3.81) - (name "Pin_2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 0 0) - (length 3.81) - (name "Pin_3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -2.54 0) - (length 3.81) - (name "Pin_4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -5.08 0) - (length 3.81) - (name "Pin_5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at -5.08 -7.62 0) - (length 3.81) - (name "Pin_6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Diode:D_Generic" - (pin_numbers - (hide yes) - ) - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "D" - (at 0 2.54 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "D_Generic" - (at 0 -2.54 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Diode" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "diode" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "TO-???* *SingleDiode *_Diode_* *SingleDiode* D_*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "D_Generic_0_1" - (polyline - (pts - (xy -1.27 1.27) (xy -1.27 -1.27) - ) - (stroke - (width 0.2032) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 1.27 1.27) (xy 1.27 -1.27) (xy -1.27 0) (xy 1.27 1.27) - ) - (stroke - (width 0.2032) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "D_Generic_1_1" - (pin passive line - (at -3.81 0 0) - (length 2.54) - (name "K" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 0 180) - (length 2.54) - (name "A" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Power-symbol:+3.3V" - (power) - (pin_names - (offset 0) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "#PWR" - (at 0 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 0 3.556 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "+3.3V_0_1" - (polyline - (pts - (xy -0.762 1.27) (xy 0 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 2.54) (xy 0.762 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 0) (xy 0 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "+3.3V_1_1" - (pin power_in line - (at 0 0 90) - (length 0) - (hide yes) - (name "+3V3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Power-symbol:+5V" - (power) - (pin_names - (offset 0) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "#PWR" - (at 0 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+5V" - (at 0 3.556 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "+5V_0_1" - (polyline - (pts - (xy -0.762 1.27) (xy 0 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 2.54) (xy 0.762 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 0) (xy 0 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "+5V_1_1" - (pin power_in line - (at 0 0 90) - (length 0) - (hide yes) - (name "+5V" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Power-symbol:GND" - (power) - (pin_names - (offset 0) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "#PWR" - (at 0 -6.35 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 0 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "GND_0_1" - (polyline - (pts - (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "GND_1_1" - (pin power_in line - (at 0 0 270) - (length 0) - (hide yes) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Power-symbol:GNDA" - (power) - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "#PWR" - (at 0 -6.35 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GNDA" - (at 0 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "(analog) ground power-flag symbol" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "Power Flag Symbol" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "GNDA_0_1" - (polyline - (pts - (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "GNDA_1_1" - (pin power_in line - (at 0 0 270) - (length 0) - (hide yes) - (name "GNDA" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_4ms_Regulator:LD1117-3.3V-SOT223" - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "IC" - (at 2.54 -6.35 0) - (effects - (font - (size 1.143 1.143) - ) - (justify left bottom) - ) - ) - (property "Value" "LD1117-3.3V-SOT223" - (at -4.445 4.445 0) - (effects - (font - (size 1.143 1.143) - ) - (justify left bottom) - ) - ) - (property "Footprint" "4ms_Package_SOT:SOT223" - (at 0 6.985 0) - (effects - (font - (size 0.508 0.508) - ) - (hide yes) - ) - ) - (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" - (at 0 1.27 0) - (effects - (font - (size 1.524 1.524) - ) - (hide yes) - ) - ) - (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Manufacturer" "STMicroelectronics" - (at 0 -9.525 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "LD1117S33CTR" - (at 0 -11.43 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "ki_fp_filters" "*TO-252-2* *TO?252?2*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "LD1117-3.3V-SOT223_1_0" - (rectangle - (start -5.08 3.81) - (end 5.08 -3.81) - (stroke - (width 0) - (type default) - ) - (fill - (type background) - ) - ) - (text "IN" - (at -3.2766 1.2446 0) - (effects - (font - (size 1.2192 1.2192) - ) - ) - ) - (text "ADJ" - (at -0.2794 -2.4384 0) - (effects - (font - (size 1.2192 1.2192) - ) - ) - ) - (text "OUT" - (at 1.8796 1.2446 0) - (effects - (font - (size 1.2192 1.2192) - ) - ) - ) - ) - (symbol "LD1117-3.3V-SOT223_1_1" - (pin input line - (at -10.16 1.27 0) - (length 5.08) - (name "IN" - (effects - (font - (size 1.016 1.016) - ) - ) - ) - (number "3" - (effects - (font - (size 1.016 1.016) - ) - ) - ) - ) - (pin input line - (at 0 -6.35 90) - (length 2.54) - (name "ADJ" - (effects - (font - (size 1.016 1.016) - ) - ) - ) - (number "1" - (effects - (font - (size 1.016 1.016) - ) - ) - ) - ) - (pin passive line - (at 10.16 1.27 180) - (length 5.08) - (name "OUT" - (effects - (font - (size 1.016 1.016) - ) - ) - ) - (number "2" - (effects - (font - (size 1.016 1.016) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_Capacitor_AKL:C_0805" - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0.254) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "C" - (at 0.635 2.54 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "C_0805" - (at 0.635 -2.54 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 0.9652 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "cap capacitor ceramic chip mlcc smd 0805" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "C_*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "C_0805_0_1" - (polyline - (pts - (xy -2.032 0.762) (xy 2.032 0.762) - ) - (stroke - (width 0.508) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -2.032 -0.762) (xy 2.032 -0.762) - ) - (stroke - (width 0.508) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "C_0805_0_2" - (polyline - (pts - (xy -2.54 -2.54) (xy -0.381 -0.381) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -0.508 -0.508) (xy -1.651 0.635) - ) - (stroke - (width 0.508) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -0.508 -0.508) (xy 0.635 -1.651) - ) - (stroke - (width 0.508) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0.381 0.381) (xy 2.54 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0.508 0.508) (xy -0.635 1.651) - ) - (stroke - (width 0.508) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0.508 0.508) (xy 1.651 -0.635) - ) - (stroke - (width 0.508) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "C_0805_1_1" - (pin passive line - (at 0 3.81 270) - (length 2.794) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -3.81 90) - (length 2.794) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "C_0805_1_2" - (pin passive line - (at -2.54 -2.54 90) - (length 0) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 2.54 270) - (length 0) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_Device_AKL:Ferrite_Bead" - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "FB" - (at 0 4.572 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Ferrite_Bead" - (at 0 3.175 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 3.302 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 0 0 90) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Ferrite bead, Alternate KiCAD Library" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "ferrite bead emc" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "*Fuse*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "Ferrite_Bead_0_1" - (rectangle - (start -2.54 1.016) - (end 2.54 0.508) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 2.54 0) (xy -2.54 0) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "Ferrite_Bead_1_1" - (rectangle - (start -2.54 -0.508) - (end 2.54 -1.016) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (pin passive line - (at -3.81 0 0) - (length 1.27) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 3.81 0 180) - (length 1.27) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_Diode_TVS_AKL:PRTR5V0U2X" - (pin_names - (offset 1.016) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "D" - (at 7.62 8.89 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "PRTR5V0U2X" - (at 7.62 6.35 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Package_TO_SOT_SMD_AKL:SOT-143" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "diode TVS array PRTR5V0U2X" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "PRTR5V0U2X_0_1" - (rectangle - (start -6.35 5.08) - (end 6.35 -5.08) - (stroke - (width 0.254) - (type default) - ) - (fill - (type background) - ) - ) - (polyline - (pts - (xy -3.81 2.54) (xy -3.81 3.81) (xy 3.81 3.81) (xy 3.81 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -3.81 2.54) (xy -3.175 1.27) (xy -4.445 1.27) (xy -3.81 2.54) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type outline) - ) - ) - (circle - (center -3.81 0) - (radius 0.1778) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy -3.81 0) (xy -6.35 0) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -3.81 -1.27) (xy -3.81 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -3.81 -1.27) (xy -3.175 -2.54) (xy -4.445 -2.54) (xy -3.81 -1.27) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy -3.81 -2.54) (xy -3.81 -3.81) (xy 3.81 -3.81) (xy 3.81 -2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -3.175 2.54) (xy -4.445 2.54) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -3.175 -1.27) (xy -4.445 -1.27) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center 0 3.81) - (radius 0.1778) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 0 1.27) (xy 0 5.08) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 -1.27) (xy 0 -5.08) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 3.81 2.54) (xy 4.445 1.27) (xy 3.175 1.27) (xy 3.81 2.54) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 3.81 0) (xy 6.35 0) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center 3.81 0) - (radius 0.1778) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 3.81 -1.27) (xy 3.81 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 3.81 -1.27) (xy 4.445 -2.54) (xy 3.175 -2.54) (xy 3.81 -1.27) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 4.445 2.54) (xy 3.175 2.54) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 4.445 -1.27) (xy 3.175 -1.27) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "PRTR5V0U2X_1_1" - (polyline - (pts - (xy -3.81 1.27) (xy -3.81 3.81) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.27 1.27) (xy 1.27 1.27) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 0 -1.27) (xy 0 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center 0 -3.81) - (radius 0.1778) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 1.27 1.27) (xy 1.27 0.762) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 1.27 -1.27) (xy -1.27 -1.27) (xy 0 1.27) (xy 1.27 -1.27) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type outline) - ) - ) - (pin passive line - (at -8.89 0 0) - (length 2.54) - (name "L1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 7.62 270) - (length 2.54) - (name "VP" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -7.62 90) - (length 2.54) - (name "VN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 8.89 0 180) - (length 2.54) - (name "L2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_Resistor_AKL:R_0805" - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "R" - (at 2.54 1.27 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "R_0805" - (at 2.54 -1.27 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 0 -11.43 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "R res resistor eu smd 0805" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_fp_filters" "R_*" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "R_0805_0_1" - (rectangle - (start -1.016 2.54) - (end 1.016 -2.54) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "R_0805_0_2" - (polyline - (pts - (xy -2.54 -2.54) (xy -1.524 -1.524) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 1.524 1.524) (xy 2.54 2.54) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 1.524 1.524) (xy 0.889 2.159) (xy -2.159 -0.889) (xy -0.889 -2.159) (xy 2.159 0.889) (xy 1.524 1.524) - ) - (stroke - (width 0.254) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "R_0805_1_1" - (pin passive line - (at 0 3.81 270) - (length 1.27) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 0 -3.81 90) - (length 1.27) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (symbol "R_0805_1_2" - (pin passive line - (at -2.54 -2.54 0) - (length 0) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 2.54 2.54 180) - (length 0) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_SL_Devices:Crystal_8MHz" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "Y" - (at 0 7.62 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Crystal_8MHz" - (at 0 5.08 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Crystal:Crystal_HC49-4H_Vertical" - (at 0 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 1.27 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "8Mz Crystal" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "8Mz Crystal" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "Crystal_8MHz_0_1" - (polyline - (pts - (xy -2.54 1.27) (xy -2.54 -1.27) - ) - (stroke - (width 1) - (type default) - ) - (fill - (type none) - ) - ) - (rectangle - (start -1.27 2.54) - (end 1.27 -2.54) - (stroke - (width 0.5) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy 2.54 1.27) (xy 2.54 -1.27) - ) - (stroke - (width 1) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "Crystal_8MHz_1_1" - (pin passive line - (at -5.08 0 0) - (length 2.54) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin passive line - (at 5.08 0 180) - (length 2.54) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "PCM_SL_Devices:Push_Button" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "SW" - (at 0 6.35 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Push_Button" - (at 0 4.445 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Button_Switch_THT:SW_PUSH_6mm" - (at -0.127 -3.175 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Common 6mmx6mm Push Button" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "Switch" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "Push_Button_0_1" - (polyline - (pts - (xy -3.175 0) (xy -1.778 0) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (polyline - (pts - (xy -1.905 1.27) (xy 1.905 1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center -1.27 0) - (radius 0.4579) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 0 1.27) (xy 0 3.175) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - (circle - (center 1.27 0) - (radius 0.4579) - (stroke - (width 0) - (type default) - ) - (fill - (type outline) - ) - ) - (polyline - (pts - (xy 1.778 0) (xy 3.175 0) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "Push_Button_1_1" - (pin passive line - (at -5.08 0 0) - (length 2) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1 1) - ) - ) - ) - ) - (pin passive line - (at 5.08 0 180) - (length 2) - (name "" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1 1) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "Type-C:HRO-TYPE-C-31-M-12" - (pin_names - (offset 1.016) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "USB" - (at -5.08 16.51 0) - (effects - (font - (size 1.524 1.524) - ) - ) - ) - (property "Value" "HRO-TYPE-C-31-M-12" - (at -10.16 -1.27 90) - (effects - (font - (size 1.524 1.524) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.524 1.524) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.524 1.524) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "HRO-TYPE-C-31-M-12_0_1" - (rectangle - (start -11.43 15.24) - (end -8.89 -17.78) - (stroke - (width 0) - (type solid) - ) - (fill - (type background) - ) - ) - (rectangle - (start 0 -17.78) - (end -8.89 15.24) - (stroke - (width 0) - (type solid) - ) - (fill - (type background) - ) - ) - ) - (symbol "HRO-TYPE-C-31-M-12_1_1" - (pin input line - (at 2.54 13.97 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 11.43 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 8.89 180) - (length 2.54) - (name "SBU2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 6.35 180) - (length 2.54) - (name "CC1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 3.81 180) - (length 2.54) - (name "DN2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 1.27 180) - (length 2.54) - (name "DP1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -1.27 180) - (length 2.54) - (name "DN1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -3.81 180) - (length 2.54) - (name "DP2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -6.35 180) - (length 2.54) - (name "SBU1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -8.89 180) - (length 2.54) - (name "CC2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -11.43 180) - (length 2.54) - (name "VBUS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -13.97 180) - (length 2.54) - (name "GND" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin input line - (at 2.54 -16.51 180) - (length 2.54) - (name "SHIELD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "power:GND" - (power) - (pin_numbers - (hide yes) - ) - (pin_names - (offset 0) - (hide yes) - ) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "#PWR" - (at 0 -6.35 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 0 -3.81 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "ki_keywords" "global power" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "GND_0_1" - (polyline - (pts - (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "GND_1_1" - (pin power_in line - (at 0 0 270) - (length 0) - (name "~" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - (symbol "stm32f446ret6:STM32F446RET6" - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (property "Reference" "U" - (at -1.016 1.016 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 0 0 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (symbol "STM32F446RET6_0_1" - (rectangle - (start 0 0) - (end 43.18 -43.18) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) - ) - (symbol "STM32F446RET6_1_1" - (text "STM32F466RE\n" - (at 21.59 -21.59 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (pin bidirectional line - (at 0 -2.54 180) - (length 2.54) - (name "VBAT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -5.08 180) - (length 2.54) - (name "PC13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -7.62 180) - (length 2.54) - (name "PC14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -10.16 180) - (length 2.54) - (name "PC15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -12.7 180) - (length 2.54) - (name "OSCIN" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -15.24 180) - (length 2.54) - (name "OSCOUT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -17.78 180) - (length 2.54) - (name "NRST" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -20.32 180) - (length 2.54) - (name "PC0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -22.86 180) - (length 2.54) - (name "PC1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -25.4 180) - (length 2.54) - (name "PC2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -27.94 180) - (length 2.54) - (name "PC3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -30.48 180) - (length 2.54) - (name "VSSA" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -33.02 180) - (length 2.54) - (name "VDDA" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -35.56 180) - (length 2.54) - (name "PA0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -38.1 180) - (length 2.54) - (name "PA1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 0 -40.64 180) - (length 2.54) - (name "PA2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "16" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 2.54 0 90) - (length 2.54) - (name "VDD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "64" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 2.54 -43.18 270) - (length 2.54) - (name "PA3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "17" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 5.08 0 90) - (length 2.54) - (name "VSS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "63" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 5.08 -43.18 270) - (length 2.54) - (name "VSS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "18" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 7.62 0 90) - (length 2.54) - (name "PB9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "62" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 7.62 -43.18 270) - (length 2.54) - (name "VDD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "19" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 10.16 0 90) - (length 2.54) - (name "PB8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "61" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 10.16 -43.18 270) - (length 2.54) - (name "PA4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "20" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 12.7 0 90) - (length 2.54) - (name "BOOT" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "60" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 12.7 -43.18 270) - (length 2.54) - (name "PA5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "21" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 15.24 0 90) - (length 2.54) - (name "PB7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "59" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 15.24 -43.18 270) - (length 2.54) - (name "PA6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "22" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 17.78 0 90) - (length 2.54) - (name "PB6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "58" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 17.78 -43.18 270) - (length 2.54) - (name "PA7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "23" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 20.32 0 90) - (length 2.54) - (name "PB5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "57" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 20.32 -43.18 270) - (length 2.54) - (name "PC4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "24" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 22.86 0 90) - (length 2.54) - (name "PB4" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "56" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 22.86 -43.18 270) - (length 2.54) - (name "PC5" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "25" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 25.4 0 90) - (length 2.54) - (name "PB3" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "55" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 25.4 -43.18 270) - (length 2.54) - (name "PB0" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "26" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 27.94 0 90) - (length 2.54) - (name "PD2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "54" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 27.94 -43.18 270) - (length 2.54) - (name "PB1" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "27" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 30.48 0 90) - (length 2.54) - (name "PC12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "53" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 30.48 -43.18 270) - (length 2.54) - (name "PB2" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "28" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 33.02 0 90) - (length 2.54) - (name "PC11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "52" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 33.02 -43.18 270) - (length 2.54) - (name "PB10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "29" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 35.56 0 90) - (length 2.54) - (name "PA10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "51" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 35.56 -43.18 270) - (length 2.54) - (name "VCAP" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "30" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 38.1 0 90) - (length 2.54) - (name "PA15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "50" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 38.1 -43.18 270) - (length 2.54) - (name "VSS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "31" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 40.64 0 90) - (length 2.54) - (name "PA14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "49" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 40.64 -43.18 270) - (length 2.54) - (name "VDD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "32" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -2.54 0) - (length 2.54) - (name "VDD" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "48" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -5.08 0) - (length 2.54) - (name "VSS" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "47" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -7.62 0) - (length 2.54) - (name "PA13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "46" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -10.16 0) - (length 2.54) - (name "PA12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "45" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -12.7 0) - (length 2.54) - (name "PA11" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "44" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -15.24 0) - (length 2.54) - (name "PA10" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "43" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -17.78 0) - (length 2.54) - (name "PA9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "42" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -20.32 0) - (length 2.54) - (name "PA8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "41" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -22.86 0) - (length 2.54) - (name "PC9" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "40" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -25.4 0) - (length 2.54) - (name "PC8" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "39" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -27.94 0) - (length 2.54) - (name "PC7" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "38" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -30.48 0) - (length 2.54) - (name "PC6" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "37" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -33.02 0) - (length 2.54) - (name "PB15" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "36" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -35.56 0) - (length 2.54) - (name "PB14" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "35" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -38.1 0) - (length 2.54) - (name "PB13" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "34" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - (pin bidirectional line - (at 43.18 -40.64 0) - (length 2.54) - (name "PB12" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (number "33" - (effects - (font - (size 1.27 1.27) - ) - ) - ) - ) - ) - (embedded_fonts no) - ) - ) - (text "MCU" - (exclude_from_sim no) - (at 200.152 81.534 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "053570bf-16e9-44c8-a82a-684c6f7508cb") - ) - (text "+ \nRGB MATRIX" - (exclude_from_sim no) - (at 243.84 79.756 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "12748ec4-00f5-490e-aa52-a210910b5263") - ) - (text "DECOUPLING CAPS\n" - (exclude_from_sim no) - (at 47.752 175.26 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "18ba2e75-ba3b-4501-b190-9ad5b6ed2853") - ) - (text "PORT CONNECTIONS\n" - (exclude_from_sim no) - (at 53.086 130.048 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "3ad0362e-3277-4bf5-a873-b6a1597c7959") - ) - (text "POWER SOURCE\n" - (exclude_from_sim no) - (at 137.668 35.306 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "3d192bed-52cb-48b6-8954-5b4db22d1c09") - ) - (text "USB RECEPTACLE" - (exclude_from_sim no) - (at 75.692 65.532 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "40f0ab9d-8619-4019-90bb-2b72acfba98c") - ) - (text "KEYBOARD MATRIX\n" - (exclude_from_sim no) - (at 243.84 73.66 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "77d3e340-9f37-45b6-9c2f-7dd12faeb64d") - ) - (text "A modular keyboard system designed for flexible orientation and interchangeable layouts.\nThis schematic represents the application of the design as a numpad module, \nwhich can operate as a standalone numeric keypad or as an extension to the main keyboard." - (exclude_from_sim no) - (at 178.816 170.942 0) - (effects - (font - (size 1.27 1.27) - (thickness 0.1588) - ) - (justify left) - ) - (uuid "b2e16b73-db9e-48d9-887a-7511975e0f40") - ) - (text "Modularly Simple KeyBoard preV1" - (exclude_from_sim no) - (at 219.202 189.738 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "c3c048a7-a63f-433a-824a-8996e749bf01") - ) - (text "JTAG" - (exclude_from_sim no) - (at 240.792 151.638 0) - (effects - (font - (size 2.54 2.54) - (thickness 0.508) - (bold yes) - ) - ) - (uuid "e15c1fc6-d6f9-479e-9240-8e7c364ac79d") - ) - (junction - (at 48.26 38.1) - (diameter 0) - (color 0 0 0 0) - (uuid "0f6f91a4-a934-463b-b122-7f23512f1734") - ) - (junction - (at 43.18 58.42) - (diameter 0) - (color 0 0 0 0) - (uuid "1a8f3bff-3750-4093-91f3-3af3450de74d") - ) - (junction - (at 43.18 152.4) - (diameter 0) - (color 0 0 0 0) - (uuid "1c37534d-40dd-4272-bd53-ea9d2e019ab1") - ) - (junction - (at 50.8 105.41) - (diameter 0) - (color 0 0 0 0) - (uuid "220a4cc1-72cb-45c0-abd2-dfa0ee539eae") - ) - (junction - (at 43.18 55.88) - (diameter 0) - (color 0 0 0 0) - (uuid "27b11cc7-491b-4d42-b423-76ef6b46e081") - ) - (junction - (at 31.75 160.02) - (diameter 0) - (color 0 0 0 0) - (uuid "2e11f1b5-4d79-4b26-9fa1-7d79bbe862ed") - ) - (junction - (at 49.53 58.42) - (diameter 0) - (color 0 0 0 0) - (uuid "2e31501e-2d51-448f-8454-3f8d0a2f5892") - ) - (junction - (at 190.5 34.29) - (diameter 0) - (color 0 0 0 0) - (uuid "336c3f51-826e-4afd-8da1-62a8bbf93823") - ) - (junction - (at 134.62 73.66) - (diameter 0) - (color 0 0 0 0) - (uuid "34992661-1d26-4f61-b9fe-4fb32e3c01df") - ) - (junction - (at 92.71 30.48) - (diameter 0) - (color 0 0 0 0) - (uuid "36c7150f-cb01-4b6f-a11a-522367414f73") - ) - (junction - (at 52.07 113.03) - (diameter 0) - (color 0 0 0 0) - (uuid "4a532823-9646-4711-ac88-38674fa4c05e") - ) - (junction - (at 165.1 34.29) - (diameter 0) - (color 0 0 0 0) - (uuid "4dbaf7a2-8834-472e-8aaf-4b7c652eab6f") - ) - (junction - (at 50.8 45.72) - (diameter 0) - (color 0 0 0 0) - (uuid "54498a32-302d-4f99-936f-a4f208527e0f") - ) - (junction - (at 113.03 106.68) - (diameter 0) - (color 0 0 0 0) - (uuid "70e9c72f-b778-4c87-8e4f-7bafd4302b9a") - ) - (junction - (at 43.18 160.02) - (diameter 0) - (color 0 0 0 0) - (uuid "7764b747-881c-48f7-8d2e-86724ffa1988") - ) - (junction - (at 113.03 116.84) - (diameter 0) - (color 0 0 0 0) - (uuid "7f7962f1-ccd8-4cd9-a566-cbcab57cecde") - ) - (junction - (at 54.61 160.02) - (diameter 0) - (color 0 0 0 0) - (uuid "8a301476-bb2b-40a8-9dab-4ee9500ebd42") - ) - (junction - (at 54.61 152.4) - (diameter 0) - (color 0 0 0 0) - (uuid "95f858c6-590e-4b07-b00e-14b33fe3654b") - ) - (junction - (at 127 100.33) - (diameter 0) - (color 0 0 0 0) - (uuid "a49bc808-02e8-4817-b90a-a4a1b75244ee") - ) - (junction - (at 45.72 30.48) - (diameter 0) - (color 0 0 0 0) - (uuid "b229d9ea-1ae2-4434-99c1-1e4df683342f") - ) - (junction - (at 52.07 97.79) - (diameter 0) - (color 0 0 0 0) - (uuid "b7910006-9150-4e29-bab8-e9d77307b10d") - ) - (junction - (at 177.8 41.91) - (diameter 0) - (color 0 0 0 0) - (uuid "ba78025a-63ef-4867-8d31-7e94c2ea70e9") - ) - (junction - (at 116.84 87.63) - (diameter 0) - (color 0 0 0 0) - (uuid "be122d9c-1b65-4ca9-a3ce-31a3314b3426") - ) - (junction - (at 85.09 38.1) - (diameter 0) - (color 0 0 0 0) - (uuid "caadfcbb-ef16-4d20-b0af-dafe81dc7050") - ) - (junction - (at 119.38 106.68) - (diameter 0) - (color 0 0 0 0) - (uuid "cc90e23d-f590-4e27-a42c-5d487fc572f1") - ) - (junction - (at 31.75 152.4) - (diameter 0) - (color 0 0 0 0) - (uuid "e0b41c54-35b8-4d1e-9f2a-6ccd130dde8b") - ) - (junction - (at 116.84 100.33) - (diameter 0) - (color 0 0 0 0) - (uuid "e42f4b43-15d9-40ac-bf9a-1258524dc65c") - ) - (junction - (at 85.09 55.88) - (diameter 0) - (color 0 0 0 0) - (uuid "e73a272a-f3b1-429e-a4ac-632efe248e69") - ) - (junction - (at 50.8 90.17) - (diameter 0) - (color 0 0 0 0) - (uuid "ed82e976-1bb9-4a58-baea-21c0632ce514") - ) - (no_connect - (at 144.78 116.84) - (uuid "0b50b0cb-735c-4720-9cfc-7d257132c35a") - ) - (no_connect - (at 152.4 88.9) - (uuid "300a4c2c-3f4b-4f25-b5db-14f5f80aecbb") - ) - (no_connect - (at 144.78 111.76) - (uuid "599dd13b-d9e8-4d78-aefb-33d0ced626e6") - ) - (no_connect - (at 187.96 129.54) - (uuid "8567c420-7e62-4e40-ac4b-381f2ec0c9fd") - ) - (no_connect - (at 40.64 33.02) - (uuid "8ec52c42-5cb3-496e-9d92-e27ae929aa15") - ) - (no_connect - (at 154.94 88.9) - (uuid "915e6404-a87d-4be9-b5c0-aadfa7f173eb") - ) - (no_connect - (at 144.78 99.06) - (uuid "a89c65fa-d3ae-4802-af43-002e5ab52a3c") - ) - (no_connect - (at 144.78 109.22) - (uuid "b4ec3779-e4d6-4643-9c51-21e093b6c010") - ) - (no_connect - (at 40.64 48.26) - (uuid "c93053ea-a8d0-4bab-a6e3-5fe3cb7ab029") - ) - (no_connect - (at 144.78 96.52) - (uuid "ca6a7a10-4dfe-4b9a-b456-324c7de09245") - ) - (no_connect - (at 144.78 114.3) - (uuid "dc302dbd-e366-453c-b672-c9c2f0309ad6") - ) - (no_connect - (at 144.78 93.98) - (uuid "dd6f19b1-af0f-4ed5-b78c-06c2a72c0ec4") - ) - (wire - (pts - (xy 31.75 160.02) (xy 31.75 163.83) - ) - (stroke - (width 0) - (type default) - ) - (uuid "00fd3c01-2e41-4555-8a03-1e94fccb5d51") - ) - (wire - (pts - (xy 196.85 31.75) (xy 196.85 34.29) - ) - (stroke - (width 0) - (type default) - ) - (uuid "01906518-da0c-47cd-953b-26f72e84a7ca") - ) - (wire - (pts - (xy 67.31 55.88) (xy 85.09 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "01989c17-3e28-4f4a-8adc-509ba7411462") - ) - (wire - (pts -<<<<<<< HEAD -======= - (xy 237.49 111.76) (xy 237.49 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "02f26d5e-f208-4852-831f-33981d6c61c3") - ) - (wire - (pts ->>>>>>> hardware-65percent - (xy 43.18 58.42) (xy 49.53 58.42) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0335a907-0ede-4ebd-ac54-adf1c3500f54") - ) - (wire - (pts - (xy 96.52 116.84) (xy 113.03 116.84) - ) - (stroke - (width 0) - (type default) - ) - (uuid "03ea680e-440a-45dd-9b7a-0498259e1eb8") - ) - (wire - (pts - (xy 144.78 91.44) (xy 134.62 91.44) - ) - (stroke - (width 0) - (type default) - ) - (uuid "04a5328c-4588-468b-94fa-c480b7dfbab2") - ) - (wire - (pts - (xy 50.8 85.09) (xy 50.8 90.17) - ) - (stroke - (width 0) - (type default) - ) - (uuid "05620071-1289-465a-bf88-b0bc2c06bf19") - ) - (wire - (pts - (xy 167.64 34.29) (xy 165.1 34.29) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0706f41a-efd4-4eae-9522-0d25101ad0d0") - ) - (wire - (pts - (xy 105.41 87.63) (xy 116.84 87.63) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0ae95369-9eb5-4fcf-9779-42360b40e70b") - ) - (wire - (pts - (xy 123.19 129.54) (xy 144.78 129.54) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0bdf774e-a5a9-4aa3-84c3-cb36cab53577") - ) - (wire - (pts -<<<<<<< HEAD - (xy 162.56 132.08) (xy 162.56 151.13) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0c365f9b-ec33-45c0-bcaa-f753e4bca3a2") - ) - (wire - (pts -======= ->>>>>>> hardware-65percent - (xy 147.32 77.47) (xy 147.32 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0eec1321-cba2-499e-a932-bdf00c658069") - ) - (wire - (pts - (xy 52.07 97.79) (xy 68.58 97.79) - ) - (stroke - (width 0) - (type default) - ) - (uuid "0f54820b-4967-4434-98bb-4a1954827aa5") - ) - (wire - (pts - (xy 187.96 93.98) (xy 201.93 93.98) - ) - (stroke - (width 0) - (type default) - ) - (uuid "10d72e49-b58e-41ec-acff-fe378d1c1a07") - ) - (wire - (pts - (xy 240.03 26.67) (xy 240.03 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "12439fa1-108d-40ec-9e24-05c5539bdcbe") - ) - (wire - (pts - (xy 255.27 26.67) (xy 255.27 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "15175de2-159b-401b-be2e-f5f1f5d3d293") - ) - (wire - (pts - (xy 187.96 96.52) (xy 201.93 96.52) - ) - (stroke - (width 0) - (type default) - ) - (uuid "1a18d475-875b-48a3-8b99-1398b1e83c91") - ) - (wire - (pts - (xy 165.1 76.2) (xy 165.1 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "1ad0f778-1242-4788-b786-3053f5269c6e") - ) - (wire - (pts - (xy 116.84 87.63) (xy 127 87.63) - ) - (stroke - (width 0) - (type default) - ) - (uuid "1baeb221-1013-40d6-aead-2b046792f698") - ) - (wire - (pts - (xy 209.55 50.8) (xy 217.17 50.8) - ) - (stroke - (width 0) - (type default) - ) - (uuid "1f22f88b-f3f4-467e-9040-cec3d802cf54") - ) - (wire - (pts - (xy 109.22 73.66) (xy 120.65 73.66) - ) - (stroke - (width 0) - (type default) - ) - (uuid "1f3decf6-56bc-4987-a07d-5fc2cfdbf99e") - ) - (wire - (pts - (xy 242.57 26.67) (xy 242.57 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "208a1faa-bb1b-433e-94ad-29c8d738354c") - ) - (wire - (pts - (xy 229.87 134.62) (xy 241.3 134.62) - ) - (stroke - (width 0) - (type default) - ) - (uuid "20dc9b34-59f2-4355-be2f-69c705971898") - ) - (wire - (pts - (xy 209.55 58.42) (xy 217.17 58.42) - ) - (stroke - (width 0) - (type default) - ) - (uuid "2126d0b3-0942-46ed-a887-338115d4e944") - ) - (wire - (pts - (xy 43.18 55.88) (xy 40.64 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "247988be-f1ec-49ec-a333-41688f2e4fc0") - ) - (wire - (pts - (xy 49.53 92.71) (xy 35.56 92.71) - ) - (stroke - (width 0) - (type default) - ) - (uuid "26f83c9f-b790-4cb2-af83-2aa9c9e51c39") - ) - (wire - (pts - (xy 43.18 160.02) (xy 54.61 160.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "289e2bd6-73d5-4949-82a5-b8596ab06387") - ) - (wire - (pts - (xy 127 101.6) (xy 144.78 101.6) - ) - (stroke - (width 0) - (type default) - ) - (uuid "292104ca-3d20-4356-b182-a13b0a9176ce") - ) - (wire - (pts - (xy 167.64 132.08) (xy 167.64 146.05) - ) - (stroke - (width 0) - (type default) - ) - (uuid "2a4eeff8-ed6e-4975-b712-d0bc61f259cd") - ) - (wire - (pts - (xy 149.86 77.47) (xy 149.86 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "2b6cdadb-6bbb-47ce-8dde-457d59e5c2a7") - ) - (wire - (pts - (xy 116.84 100.33) (xy 116.84 104.14) - ) - (stroke - (width 0) - (type default) - ) - (uuid "2fddf5e5-afc9-4ff0-a699-6788de5db800") - ) - (wire - (pts - (xy 134.62 91.44) (xy 134.62 73.66) - ) - (stroke - (width 0) - (type default) - ) - (uuid "30979165-d449-4e2b-a93f-0991abdb0465") - ) - (wire - (pts - (xy 31.75 149.86) (xy 31.75 152.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "330d5ff8-84d8-41a5-bfee-45da384c7ed9") - ) - (wire - (pts - (xy 109.22 73.66) (xy 109.22 76.2) - ) - (stroke - (width 0) - (type default) - ) - (uuid "34cb745e-85a4-4f52-8881-0f0a8d4931ef") - ) - (wire - (pts - (xy 77.47 46.99) (xy 73.66 46.99) - ) - (stroke - (width 0) - (type default) - ) - (uuid "37b24e3e-6cbc-4b14-ade0-7b79f8d12f02") - ) - (wire - (pts - (xy 53.34 95.25) (xy 68.58 95.25) - ) - (stroke - (width 0) - (type default) - ) - (uuid "37f03eff-586f-4094-8855-542e564609e6") - ) - (wire - (pts - (xy 157.48 132.08) (xy 157.48 151.13) - ) - (stroke - (width 0) - (type default) - ) - (uuid "38cae9ee-d843-4f35-a584-9783ea88b63c") - ) - (wire - (pts - (xy 187.96 104.14) (xy 212.09 104.14) - ) - (stroke - (width 0) - (type default) - ) - (uuid "3a7288aa-4ed3-4056-b2cb-8fef7ffd7fac") - ) - (wire - (pts - (xy 127 100.33) (xy 127 101.6) - ) - (stroke - (width 0) - (type default) - ) - (uuid "3f4651a7-686d-42ea-9698-5838e5943557") - ) - (wire - (pts - (xy 185.42 143.51) (xy 185.42 132.08) - ) - (stroke - (width 0) - (type default) - ) - (uuid "3f4f5601-5cb4-4b09-bb9e-970ca1e3d02b") - ) - (wire - (pts - (xy 152.4 132.08) (xy 152.4 143.51) - ) - (stroke - (width 0) - (type default) - ) - (uuid "44bc8c63-d89a-46e4-9d00-a5b9de75d756") - ) - (wire - (pts - (xy 172.72 132.08) (xy 172.72 146.05) - ) - (stroke - (width 0) - (type default) - ) - (uuid "450a7d1b-d4b5-47d0-b75f-49cb00b277c1") - ) - (wire - (pts - (xy 50.8 45.72) (xy 67.31 45.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4570fa46-daac-46da-b206-5998ba573467") - ) - (wire - (pts - (xy 35.56 105.41) (xy 50.8 105.41) - ) - (stroke - (width 0) - (type default) - ) - (uuid "458dba6f-06fc-4619-a060-0ecf78dcf85a") - ) - (wire - (pts - (xy 53.34 107.95) (xy 68.58 107.95) - ) - (stroke - (width 0) - (type default) - ) - (uuid "465af43c-4e85-4f93-bb3b-2e57bac120b2") - ) - (wire - (pts - (xy 73.66 46.99) (xy 73.66 49.53) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4706908c-636d-444d-b2c0-039cdfb74b4d") - ) - (wire - (pts -<<<<<<< HEAD - (xy 175.26 63.5) (xy 175.26 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "477066b8-b318-4156-a17c-fbe9dd48a160") - ) - (wire - (pts -======= ->>>>>>> hardware-65percent - (xy 248.92 129.54) (xy 248.92 132.08) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4874b85c-ca6a-43a9-b3a5-8f906291c1f7") - ) - (wire - (pts - (xy 52.07 118.11) (xy 52.07 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4cca7c1a-d12a-4d5b-8dd4-4401bb342c6d") - ) - (wire - (pts -<<<<<<< HEAD - (xy 154.94 132.08) (xy 154.94 147.32) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4d52ae93-a4ca-4383-bb89-91e9056bf0db") - ) - (wire - (pts -======= ->>>>>>> hardware-65percent - (xy 119.38 129.54) (xy 113.03 129.54) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4f47a244-1f71-49eb-9094-aa6e152b6833") - ) - (wire - (pts - (xy 182.88 132.08) (xy 182.88 143.51) - ) - (stroke - (width 0) - (type default) - ) - (uuid "4f536248-7a57-4327-aa34-727e9506252f") - ) - (wire - (pts - (xy 58.42 35.56) (xy 58.42 50.8) - ) - (stroke - (width 0) - (type default) - ) - (uuid "529cd2fd-f4b4-4dfa-88ae-b39a282450b0") - ) - (wire - (pts - (xy 119.38 106.68) (xy 144.78 106.68) - ) - (stroke - (width 0) - (type default) - ) - (uuid "52a98227-b763-4347-af19-3768ac500778") - ) - (wire - (pts - (xy 177.8 41.91) (xy 190.5 41.91) - ) - (stroke - (width 0) - (type default) - ) - (uuid "53e1b29f-1b7c-4a7f-8b33-b9b30a2397bc") - ) - (wire - (pts - (xy 223.52 137.16) (xy 251.46 137.16) - ) - (stroke - (width 0) - (type default) - ) - (uuid "5532e8ef-0bc4-4de1-9a6f-fd84a38c396c") - ) - (wire - (pts - (xy 35.56 97.79) (xy 52.07 97.79) - ) - (stroke - (width 0) - (type default) - ) - (uuid "562315e5-2659-4b64-b6a4-896f84956ea9") - ) - (wire - (pts - (xy 53.34 110.49) (xy 68.58 110.49) - ) - (stroke - (width 0) - (type default) - ) - (uuid "57440857-b976-423f-9e7a-b950ad2438d3") - ) - (wire - (pts - (xy 116.84 87.63) (xy 116.84 90.17) - ) - (stroke - (width 0) - (type default) - ) - (uuid "58da7475-15d0-496c-9708-fa29ececcc6e") - ) - (wire - (pts - (xy 248.92 132.08) (xy 251.46 132.08) - ) - (stroke - (width 0) - (type default) - ) - (uuid "59e201b2-0a7c-4e35-8471-aae12d903450") - ) - (wire - (pts - (xy 50.8 90.17) (xy 50.8 105.41) - ) - (stroke - (width 0) - (type default) - ) - (uuid "5a0c8ca1-e08f-43f7-8d31-1375895859ca") - ) - (wire - (pts - (xy 209.55 55.88) (xy 217.17 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "5a8c3d76-ece7-4cea-afe6-fca17951a559") - ) - (wire - (pts - (xy 40.64 58.42) (xy 43.18 58.42) - ) - (stroke - (width 0) - (type default) - ) - (uuid "5c2c9eff-618d-442a-9d7e-b706135f2805") - ) - (wire - (pts - (xy 187.96 34.29) (xy 190.5 34.29) - ) - (stroke - (width 0) - (type default) - ) - (uuid "5ed0c7ae-0554-43d0-8aff-c75229568034") - ) - (wire - (pts - (xy 175.26 132.08) (xy 175.26 146.05) - ) - (stroke - (width 0) - (type default) - ) - (uuid "5f7ef538-4e1c-4f24-94de-8dc55a60a5c9") - ) - (wire - (pts - (xy 229.87 142.24) (xy 241.3 142.24) - ) - (stroke - (width 0) - (type default) - ) - (uuid "60d998c9-4be4-4529-813d-61347020e312") - ) - (wire - (pts - (xy 165.1 41.91) (xy 177.8 41.91) - ) - (stroke - (width 0) - (type default) - ) - (uuid "627375d7-97c0-43e6-ab57-2fc3c3266f3b") - ) - (wire - (pts - (xy 158.75 34.29) (xy 158.75 31.75) - ) - (stroke - (width 0) - (type default) - ) - (uuid "643c8654-a64f-4cd4-848c-c244b8b851a3") - ) - (wire - (pts - (xy 187.96 106.68) (xy 212.09 106.68) - ) - (stroke - (width 0) - (type default) - ) - (uuid "663d7edc-35d4-4678-b5b2-956b0ead572f") - ) - (wire - (pts - (xy 43.18 58.42) (xy 43.18 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "68110c4c-99d7-4030-9e98-1e043ba3c876") - ) - (wire - (pts - (xy 76.2 30.48) (xy 92.71 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "684cca3f-fdef-4580-a559-ec92864a877d") - ) - (wire - (pts - (xy 35.56 110.49) (xy 49.53 110.49) - ) - (stroke - (width 0) - (type default) - ) - (uuid "693f3dbe-4e73-43c7-8fcf-616ba911db6e") - ) - (wire - (pts - (xy 162.56 76.2) (xy 162.56 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "6a875d99-df08-4727-89b1-a7f7f4e8c7a3") - ) - (wire - (pts - (xy 187.96 111.76) (xy 203.2 111.76) - ) - (stroke - (width 0) - (type default) - ) - (uuid "6b5d728e-13d1-41c6-83a9-b7d155de526e") - ) - (wire - (pts - (xy 53.34 92.71) (xy 68.58 92.71) - ) - (stroke - (width 0) - (type default) - ) - (uuid "6d9e585f-cbc3-414c-9299-2e5b280c073d") - ) - (wire - (pts - (xy 187.96 124.46) (xy 203.2 124.46) - ) - (stroke - (width 0) - (type default) - ) - (uuid "6da5d636-af4e-43c8-9f36-e459d33d1bbe") - ) - (wire - (pts - (xy 134.62 68.58) (xy 134.62 73.66) - ) - (stroke - (width 0) - (type default) - ) - (uuid "6f04dc55-ef64-4bc9-b0d0-4c627f116dbd") - ) - (wire - (pts - (xy 185.42 73.66) (xy 185.42 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "71259b82-bdf7-498b-b24b-83577cb15492") - ) - (wire - (pts - (xy 50.8 105.41) (xy 68.58 105.41) - ) - (stroke - (width 0) - (type default) - ) - (uuid "715c013f-940e-41c2-bce8-d311766decb6") - ) - (wire - (pts - (xy 260.35 26.67) (xy 260.35 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "75f76f62-7624-4a4c-93a9-a039578267af") - ) - (wire - (pts - (xy 40.64 30.48) (xy 45.72 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "776243c5-1d03-4ada-a03f-0ef931893237") - ) - (wire - (pts - (xy 40.64 38.1) (xy 48.26 38.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "79888534-70ed-452a-bd5b-d1029281da10") - ) - (wire - (pts - (xy 40.64 50.8) (xy 49.53 50.8) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7ab65dfe-09b0-4f17-b223-a9311f4784d6") - ) - (wire - (pts - (xy 248.92 134.62) (xy 251.46 134.62) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7bcbc1dd-858c-46e1-b9f4-207586227937") - ) - (wire - (pts - (xy 113.03 107.95) (xy 113.03 106.68) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7c581021-24c9-4b69-b987-c6220ecfd605") - ) - (wire - (pts - (xy 128.27 73.66) (xy 134.62 73.66) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7c9a429e-b501-454a-a798-72a9debc42e7") - ) - (wire - (pts - (xy 267.97 26.67) (xy 267.97 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7d4b4f9e-4b6f-4ba8-aebd-0f661a376cfe") - ) - (wire - (pts - (xy 234.95 26.67) (xy 234.95 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "7e691013-eb16-4449-ad01-df5d08179de9") - ) - (wire - (pts - (xy 48.26 38.1) (xy 85.09 38.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "81fbcf92-dd81-4e13-8596-b53d8260ea0f") - ) - (wire - (pts - (xy 113.03 129.54) (xy 113.03 127) - ) - (stroke - (width 0) - (type default) - ) - (uuid "82863544-c8b6-4a81-ba0e-9ed9dc1f7811") - ) - (wire - (pts - (xy 67.31 45.72) (xy 67.31 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "82bd2989-2318-4253-b209-267092851cba") - ) - (wire - (pts - (xy 265.43 26.67) (xy 265.43 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "83b82508-5fe8-4054-9a00-42e24d33b288") - ) - (wire - (pts - (xy 209.55 48.26) (xy 217.17 48.26) - ) - (stroke - (width 0) - (type default) - ) - (uuid "83d38e48-b8cc-4280-90de-8336d999cc9e") - ) - (wire - (pts - (xy 106.68 172.72) (xy 106.68 170.18) - ) - (stroke - (width 0) - (type default) - ) - (uuid "8427d372-153a-4165-9c6b-d703ad055792") - ) - (wire - (pts - (xy 166.37 60.96) (xy 157.48 60.96) - ) - (stroke - (width 0) - (type default) - ) - (uuid "8527098b-4400-4446-804d-ab014655552c") - ) - (wire - (pts - (xy 54.61 152.4) (xy 66.04 152.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "86e8be86-7a52-450c-820b-e68995200152") - ) - (wire - (pts - (xy 247.65 26.67) (xy 247.65 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "878877a1-6590-498b-aa1a-efc92c6e27f6") - ) - (wire - (pts - (xy 104.14 119.38) (xy 144.78 119.38) - ) - (stroke - (width 0) - (type default) - ) - (uuid "8a407c97-de84-4759-89bb-c47ac175cf08") - ) - (wire - (pts - (xy 85.09 38.1) (xy 101.6 38.1) - ) - (stroke - (width 0) - (type default) - ) - (uuid "8aba9e24-a5f7-40f7-bdc4-fc865abfdccc") - ) - (wire - (pts - (xy 167.64 76.2) (xy 167.64 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "8cd8c252-9640-463d-9c7b-97b8af4a7394") - ) - (wire - (pts - (xy 40.64 27.94) (xy 43.18 27.94) - ) - (stroke - (width 0) - (type default) - ) - (uuid "8e50dffa-98dd-40ff-8994-cbeafa4b2bfb") - ) - (wire - (pts - (xy 113.03 106.68) (xy 119.38 106.68) - ) - (stroke - (width 0) - (type default) - ) - (uuid "933a4130-c00a-4b4c-bb79-83312d882419") - ) - (wire - (pts - (xy 229.87 144.78) (xy 241.3 144.78) - ) - (stroke - (width 0) - (type default) - ) - (uuid "943af323-76f9-4011-a61b-cc2b7fef77fa") - ) - (wire - (pts - (xy 115.57 170.18) (xy 116.84 170.18) - ) - (stroke - (width 0) - (type default) - ) - (uuid "948b4f65-90ec-474c-b04e-e973de6a4047") - ) - (wire - (pts - (xy 40.64 53.34) (xy 45.72 53.34) - ) - (stroke - (width 0) - (type default) - ) - (uuid "95776100-1955-404b-b7f1-a1a73101730f") - ) - (wire - (pts - (xy 85.09 55.88) (xy 101.6 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9643bb50-d437-43a0-aaa9-6fa922f60138") - ) - (wire - (pts - (xy 123.19 127) (xy 144.78 127) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9652a302-9965-4e41-b90f-798d847304b3") - ) - (wire - (pts - (xy 106.68 170.18) (xy 107.95 170.18) - ) - (stroke - (width 0) - (type default) - ) - (uuid "96f9c5ff-92d3-4bd3-969f-590f0a760f06") - ) - (wire - (pts - (xy 149.86 132.08) (xy 149.86 144.145) - ) - (stroke - (width 0) - (type default) - ) - (uuid "98825335-58d1-4bec-bc37-1cfbd1d8c67c") - ) - (wire - (pts - (xy 52.07 113.03) (xy 68.58 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9889944f-b029-470d-843c-31d2be8c43d0") - ) - (wire - (pts - (xy 187.96 109.22) (xy 203.2 109.22) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9a287aeb-1c97-40f2-abaa-fe8a0ec5fddb") - ) - (wire - (pts - (xy 160.02 76.2) (xy 160.02 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9add52ab-e73e-4d91-879f-7357f15f15d3") - ) - (wire - (pts - (xy 172.72 63.5) (xy 172.72 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9b57c0f7-023c-4b9f-a444-542b154e3f47") - ) - (wire - (pts - (xy 229.87 139.7) (xy 241.3 139.7) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9b7c240b-3b58-4aaa-b132-84cfd139293f") - ) - (wire - (pts - (xy 252.73 26.67) (xy 252.73 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9b941760-aa41-4bda-a070-83a5e8da6461") - ) - (wire - (pts - (xy 40.64 40.64) (xy 50.8 40.64) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9c5a75e0-d66a-4e19-8139-747b5a4c2a66") - ) - (wire - (pts - (xy 248.92 144.78) (xy 251.46 144.78) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9d0f7be0-d24b-47fe-8d5f-201679ba63fd") - ) - (wire - (pts - (xy 50.8 90.17) (xy 68.58 90.17) - ) - (stroke - (width 0) - (type default) - ) - (uuid "9f20c051-d63d-4d45-a81c-3efc727b3379") - ) - (wire - (pts - (xy 35.56 90.17) (xy 50.8 90.17) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a0ef95a9-8bea-46c6-ba6a-d6f9f64cea61") - ) - (wire - (pts - (xy 157.48 71.12) (xy 157.48 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a21450c8-f3ae-43eb-a9d5-11adce89c1f1") - ) - (wire - (pts -<<<<<<< HEAD - (xy 160.02 132.08) (xy 160.02 151.13) -======= - (xy 180.34 74.93) (xy 180.34 88.9) ->>>>>>> hardware-65percent - ) - (stroke - (width 0) - (type default) - ) -<<<<<<< HEAD - (uuid "a53cb74b-b460-44ad-b050-031ab179966a") -======= - (uuid "a57d5cf2-2916-462d-9d02-f6005455b75d") ->>>>>>> hardware-65percent - ) - (wire - (pts - (xy 170.18 74.93) (xy 170.18 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a59b5754-fe44-4ded-b72a-5d3f170d4dd5") - ) - (wire - (pts - (xy 187.96 127) (xy 203.2 127) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a7e4dd91-34c4-479b-bf4a-fbeb9b3e0947") - ) - (wire - (pts - (xy 190.5 34.29) (xy 196.85 34.29) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a840155e-eb43-4336-9b9f-4d7043121a95") - ) - (wire - (pts - (xy 232.41 26.67) (xy 232.41 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "a956dacc-30a3-4321-8f8e-7e65a6d33b19") - ) - (wire - (pts - (xy 31.75 152.4) (xy 43.18 152.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "af32b913-3839-4d06-89e1-085f5a905fbf") - ) - (wire - (pts - (xy 43.18 58.42) (xy 43.18 63.5) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b0616a21-133c-4dcc-b84e-c6a97f8f594f") - ) - (wire - (pts - (xy 43.18 27.94) (xy 43.18 55.88) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b1529ae2-4d50-41f5-8da3-ac204b86c297") - ) - (wire - (pts - (xy 49.53 95.25) (xy 35.56 95.25) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b2092ad6-1a2a-415f-a85c-1db6b6623de2") - ) - (wire - (pts - (xy 209.55 53.34) (xy 217.17 53.34) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b3ad80bf-f20b-41a4-b801-5df4f1839f82") - ) - (wire - (pts - (xy 96.52 116.84) (xy 96.52 118.11) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b68451e4-a557-4542-aa0c-d3c0a7b38b1c") - ) - (wire - (pts -<<<<<<< HEAD -======= - (xy 175.26 63.5) (xy 175.26 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b82c56aa-688c-40b5-b8b5-ff1b4a6b304f") - ) - (wire - (pts ->>>>>>> hardware-65percent - (xy 116.84 104.14) (xy 144.78 104.14) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b933b00a-6781-4161-9b4a-e03ca083faeb") - ) - (wire - (pts - (xy 222.25 99.06) (xy 231.14 99.06) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b94c4dc7-fb5a-4e0f-864e-aa71873f2c89") - ) - (wire - (pts - (xy 45.72 53.34) (xy 45.72 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "b9c450f2-9bfa-43df-bfd2-eb3d2d426964") - ) - (wire - (pts - (xy 223.52 138.43) (xy 223.52 137.16) - ) - (stroke - (width 0) - (type default) - ) - (uuid "bf7d254c-a01a-4771-88b7-b40f8c2c8707") - ) - (wire - (pts - (xy 35.56 107.95) (xy 49.53 107.95) - ) - (stroke - (width 0) - (type default) - ) - (uuid "bf84be26-9ac8-4f7b-a934-3a573d1ac936") - ) - (wire - (pts - (xy 40.64 35.56) (xy 58.42 35.56) - ) - (stroke - (width 0) - (type default) - ) - (uuid "bf86c109-adc6-49de-bf52-8b099c3cabb4") - ) - (wire - (pts - (xy 49.53 58.42) (xy 58.42 58.42) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c0f477ad-c51b-46bd-8eea-028a65e67899") - ) - (wire - (pts - (xy 170.18 132.08) (xy 170.18 146.05) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c203776c-c323-46c4-b1d3-9d1c4656c4c4") - ) - (wire - (pts - (xy 237.49 26.67) (xy 237.49 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c238b4b9-d86f-41a6-9939-71a20ec018bd") - ) - (wire - (pts - (xy 68.58 30.48) (xy 45.72 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c42044bb-7b3d-4c02-bb19-c9ee4d2152db") - ) - (wire - (pts -<<<<<<< HEAD - (xy 180.34 74.93) (xy 180.34 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c666df65-3b72-4b72-bdec-cf6c8e58fe74") - ) - (wire - (pts -======= ->>>>>>> hardware-65percent - (xy 182.88 74.93) (xy 182.88 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c6c8c491-ec3c-4aa7-8018-934ea3784c23") - ) - (wire - (pts - (xy 113.03 116.84) (xy 113.03 115.57) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c8e765e4-9b92-4fad-9653-72b8c27944f7") - ) - (wire - (pts - (xy 165.1 34.29) (xy 158.75 34.29) - ) - (stroke - (width 0) - (type default) - ) - (uuid "c93aa1a2-83c7-4424-8656-57a32df2a0e9") - ) - (wire - (pts - (xy 123.19 124.46) (xy 144.78 124.46) - ) - (stroke - (width 0) - (type default) - ) - (uuid "cb03fe9f-8875-4540-a775-8ca501103200") - ) - (wire - (pts - (xy 187.96 119.38) (xy 203.2 119.38) - ) - (stroke - (width 0) - (type default) - ) - (uuid "cb8969fd-f261-4ea2-bfef-da594ec8c031") - ) - (wire - (pts - (xy 187.96 116.84) (xy 203.2 116.84) - ) - (stroke - (width 0) - (type default) - ) - (uuid "cd5bcb8a-8fda-4879-96a4-e34d2e280aab") - ) - (wire - (pts - (xy 97.79 106.68) (xy 113.03 106.68) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d3111b08-e3ad-431d-a491-9fe01dc68bcf") - ) - (wire - (pts - (xy 127 90.17) (xy 127 87.63) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d363afc7-a389-428b-a860-10b1cbcfd8af") - ) - (wire - (pts - (xy 116.84 170.18) (xy 116.84 172.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d6c4dd86-7842-4e20-b395-8022679f2bfd") - ) - (wire - (pts - (xy 119.38 121.92) (xy 144.78 121.92) - ) - (stroke - (width 0) - (type default) - ) - (uuid "d93267f2-2d03-4b7b-8e29-8f1c6cdf3db0") - ) - (wire - (pts - (xy 92.71 29.21) (xy 92.71 30.48) - ) - (stroke - (width 0) - (type default) - ) - (uuid "dae93426-f60f-49f3-916b-5d850a0fa483") - ) - (wire - (pts - (xy 250.19 26.67) (xy 250.19 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "dd67b9d3-dcb4-4714-a1f8-1df5f6a7ccfa") - ) - (wire - (pts - (xy 50.8 45.72) (xy 50.8 40.64) - ) - (stroke - (width 0) - (type default) - ) - (uuid "df9f4e8e-ee35-4c74-a8d7-4433c5a1304b") - ) - (wire - (pts - (xy 43.18 152.4) (xy 54.61 152.4) - ) - (stroke - (width 0) - (type default) - ) - (uuid "dff176a0-3300-4c99-a3aa-b92ca49c0d57") - ) - (wire - (pts - (xy 48.26 38.1) (xy 48.26 43.18) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e1b4699a-232d-4700-aba8-bcf853a8c971") - ) - (wire - (pts - (xy 40.64 43.18) (xy 48.26 43.18) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e3815b90-cda8-45b0-a3aa-01c821e46749") - ) - (wire - (pts - (xy 104.14 127) (xy 104.14 119.38) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e3a1447c-2b80-4a91-b4b2-af48702ad911") - ) - (wire - (pts - (xy 31.75 160.02) (xy 43.18 160.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e5127b5a-e94b-447a-87b1-b2a72c447fe0") - ) - (wire - (pts - (xy 54.61 160.02) (xy 66.04 160.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e64f4e58-1932-4a27-a689-dcdaff9c453f") - ) - (wire - (pts - (xy 248.92 139.7) (xy 251.46 139.7) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e71af07e-24f6-4607-b8b9-257544dfb5aa") - ) - (wire - (pts - (xy 180.34 132.08) (xy 180.34 146.05) - ) - (stroke - (width 0) - (type default) - ) - (uuid "e77d66be-6cbf-45a6-a78e-010a8f3bd073") - ) - (wire - (pts - (xy 187.96 101.6) (xy 214.63 101.6) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ea0d6efe-e41e-4854-a9b2-cc498ecd4559") - ) - (wire - (pts - (xy 147.32 132.08) (xy 147.32 154.94) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ea30c5f2-fdc7-4854-b627-d57935e7ff95") - ) - (wire - (pts - (xy 166.37 60.96) (xy 166.37 66.04) - ) - (stroke - (width 0) - (type default) - ) - (uuid "eaa69509-c231-43db-91d5-ea5ac01fffaa") - ) - (wire - (pts - (xy 177.8 41.91) (xy 177.8 45.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "eac2031d-d945-4e04-aa30-8c7367b9c183") - ) - (wire - (pts - (xy 119.38 116.84) (xy 113.03 116.84) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ead3c704-ac61-4b09-aeed-d2cedb6b437a") - ) - (wire - (pts - (xy 262.89 26.67) (xy 262.89 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "eb6b5e7c-5dd8-4495-9ca9-d2ba986d3001") - ) - (wire - (pts - (xy 40.64 45.72) (xy 50.8 45.72) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ec702bef-5889-450c-ac03-61deff6a9d14") - ) - (wire - (pts - (xy 92.71 30.48) (xy 92.71 46.99) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ec8ce5c4-89a5-4ead-8a22-3b3f7c812d40") - ) - (wire - (pts - (xy 187.96 114.3) (xy 203.2 114.3) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f068bd3e-7618-4cb1-b357-1d5c2c6a400c") - ) - (wire - (pts - (xy 248.92 142.24) (xy 251.46 142.24) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f0733082-a5b6-4e44-a8da-8f0ee9b9eecd") - ) - (wire - (pts - (xy 245.11 26.67) (xy 245.11 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f084dd96-f988-42ba-8fa0-09fd926da3c6") - ) - (wire - (pts - (xy 116.84 97.79) (xy 116.84 100.33) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f134bcc4-4d57-4cd8-a1b2-4fe2f3604f8a") - ) - (wire - (pts -<<<<<<< HEAD -======= - (xy 241.3 111.76) (xy 237.49 111.76) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f2d50c5d-23ff-4ca6-9c6b-30baf9349883") - ) - (wire - (pts ->>>>>>> hardware-65percent - (xy 222.25 101.6) (xy 231.14 101.6) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f37e29b4-3254-4a1b-bcbd-bfdfab2178e0") - ) - (wire - (pts - (xy 187.96 99.06) (xy 214.63 99.06) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f38eaf57-6f2d-42ce-ae55-52b23179a480") - ) - (wire - (pts - (xy 187.96 91.44) (xy 201.93 91.44) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f3de37ac-79a4-432e-8b72-23af07c86468") - ) - (wire - (pts - (xy 52.07 113.03) (xy 35.56 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f562a574-0131-4a70-ba89-1af5498678c1") - ) - (wire - (pts - (xy 177.8 132.08) (xy 177.8 146.05) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f6636cd1-df89-4024-aee5-b014c358fbfb") - ) - (wire - (pts - (xy 52.07 97.79) (xy 52.07 113.03) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f664caaa-6156-40cc-a02a-6571d368a215") - ) - (wire - (pts - (xy 187.96 121.92) (xy 203.2 121.92) - ) - (stroke - (width 0) - (type default) - ) - (uuid "f7bbc05e-208b-4916-9dee-edba1d06a38c") - ) - (wire - (pts - (xy 157.48 60.96) (xy 157.48 63.5) - ) - (stroke - (width 0) - (type default) - ) - (uuid "fc79c6ac-2bdc-4340-a428-641e42431876") - ) - (wire - (pts - (xy 177.8 74.93) (xy 177.8 88.9) - ) - (stroke - (width 0) - (type default) - ) - (uuid "fe432645-29fe-4f55-967f-c827e1b1b2b9") - ) - (wire - (pts - (xy 127 97.79) (xy 127 100.33) - ) - (stroke - (width 0) - (type default) - ) - (uuid "fed75f8e-bc0f-4a62-8737-f6f71bb774c6") - ) - (wire - (pts - (xy 257.81 26.67) (xy 257.81 33.02) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ffb4802f-20bc-4943-92cd-0bdee9542faf") - ) - (wire - (pts - (xy 105.41 91.44) (xy 105.41 87.63) - ) - (stroke - (width 0) - (type default) - ) - (uuid "ffd7b1eb-f0cb-4e45-bbcc-845c938910c9") - ) -<<<<<<< HEAD -======= - (label "COL13" - (at 165.1 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "0872e688-18d5-464b-b239-05b725809904") - ) ->>>>>>> hardware-65percent - (label "ROW5" - (at 167.64 146.05 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "0e3575f6-439b-4d0a-8d66-63ffe5b9a82f") - ) - (label "VDD" - (at 147.32 77.47 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "1054b2ed-1342-4dda-a350-724877e8b849") - ) - (label "UART_TX_WEST" - (at 212.09 104.14 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "135e3e86-260c-4123-a29c-12df78031596") - ) - (label "D-" - (at 101.6 38.1 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "1491677d-b6de-4782-8f1b-3412b5901f80") - ) -<<<<<<< HEAD -======= - (label "COL2" - (at 203.2 124.46 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "14d9996a-aa1d-461c-947b-ff3f45311543") - ) ->>>>>>> hardware-65percent - (label "UART_TX_NORTH" - (at 49.53 92.71 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "15ab73e8-a151-44d6-9f4e-c93e8cd0680e") - ) - (label "COL7" - (at 247.65 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "1a741b36-5f5e-4bd0-ab79-047d4eb60e4c") - ) -<<<<<<< HEAD -======= - (label "COL11" - (at 177.8 74.93 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "1bb7e52c-8660-41fe-b7b9-24d5679fd926") - ) ->>>>>>> hardware-65percent - (label "COL5" - (at 242.57 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "1fc100fc-abc3-448f-82e1-8234efa092aa") - ) -<<<<<<< HEAD - (label "COL8" - (at 203.2 109.22 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "2120f686-1469-485c-a964-4af544d4c8a0") - ) -======= ->>>>>>> hardware-65percent - (label "UART_TX_SOUTH" - (at 53.34 95.25 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "238c0f40-805c-45ef-b9d9-f32048674026") - ) - (label "VSS" - (at 182.88 143.51 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "24f3dd47-e1e3-4f7f-8d03-05628870f1ec") - ) -<<<<<<< HEAD -======= - (label "UART_TX_NORTH" - (at 123.19 129.54 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "2b2b9379-b6f0-4bcf-bddf-b2315719acaf") - ) ->>>>>>> hardware-65percent - (label "Place Near VDD Ports" - (at 41.91 165.1 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "2bb4aae6-3cf2-49aa-87c1-180df30a6830") - ) -<<<<<<< HEAD - (label "COL12" - (at 203.2 119.38 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "2dd81f62-0ea1-48ba-94ce-6214aee431b5") - ) -======= ->>>>>>> hardware-65percent - (label "ROW1" - (at 177.8 146.05 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "2df47b70-1930-4887-8317-8498f4292996") - ) -<<<<<<< HEAD - (label "COL1" - (at 160.02 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "35cf5703-b237-43e3-8def-1a83fcdd56a2") - ) -======= ->>>>>>> hardware-65percent - (label "NRST" - (at 229.87 142.24 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "377aec81-2f9d-439a-8ff8-8351613b5a76") - ) -<<<<<<< HEAD -======= - (label "COL6" - (at 203.2 114.3 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "38b93aeb-c3f7-4775-8c5d-f4fdd328edc5") - ) ->>>>>>> hardware-65percent - (label "SWO" - (at 170.18 74.93 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "393fc858-5f6b-4cf3-b96b-54423a182dd6") - ) - (label "VDD" - (at 185.42 143.51 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "3bb57688-3b26-4654-b7b3-b2e87452539d") - ) -<<<<<<< HEAD - (label "COL7" - (at 182.88 74.93 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "40ac12a5-ccc3-4c63-8eaa-cd830bb4c50c") - ) -======= ->>>>>>> hardware-65percent - (label "VDD" - (at 139.7 73.66 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "41d1ade5-8210-4054-9cb5-676e258ad061") - ) - (label "COL3" -<<<<<<< HEAD - (at 165.1 76.2 270) -======= - (at 203.2 121.92 180) ->>>>>>> hardware-65percent - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) -<<<<<<< HEAD - (uuid "450f42af-3bab-4873-883e-859e675ee261") - ) - (label "UART_TX_NORTH" - (at 175.26 63.5 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "4908fc84-621c-47df-aa9c-5c6724d4e267") - ) - (label "ROT_TIMA" - (at 162.56 151.13 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "49a74743-1f19-4803-95ce-65fbcfcf3666") -======= - (uuid "4665b37a-1cc0-472f-9aaa-24e2ffcaec18") ->>>>>>> hardware-65percent - ) - (label "COL3" - (at 237.49 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "4aaa85ea-5d17-49e2-919b-b9dd10468d2d") - ) - (label "UART_RX_WEST" - (at 49.53 110.49 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "4f52174a-7166-4096-85f8-c4b3064c9d92") - ) -<<<<<<< HEAD -======= - (label "COL14" - (at 162.56 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "51b3d42b-59cf-4c8b-8004-acd7db548d6b") - ) ->>>>>>> hardware-65percent - (label "VDD" - (at 33.02 152.4 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "52f6274d-9319-425e-9856-6028f0c4375f") - ) -<<<<<<< HEAD - (label "COL6" - (at 180.34 74.93 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "55ef1033-52ad-4a4c-abb2-4a87f669e520") - ) -======= ->>>>>>> hardware-65percent - (label "COL4" - (at 240.03 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5631f58f-29f4-432f-9f2e-10f895402ee9") - ) - (label "D-" - (at 231.14 101.6 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5795c40c-5423-450b-aa2a-1bd4abcf5b2c") - ) -<<<<<<< HEAD - (label "COL9" - (at 203.2 111.76 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5972eccf-3778-4255-b912-a7f3aa8a6514") - ) -======= ->>>>>>> hardware-65percent - (label "D+" - (at 231.14 99.06 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5a0b3c86-9793-44d1-a2d8-9600402ced23") - ) -<<<<<<< HEAD - (label "COL4" - (at 167.64 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5a35616b-57aa-45a3-9a4c-738dea73386b") - ) -======= ->>>>>>> hardware-65percent - (label "NRST" - (at 133.35 106.68 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5d2adaf2-8f8b-4999-9547-ccedb6613e09") - ) -<<<<<<< HEAD - (label "COL15" - (at 203.2 127 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "5e32798c-498a-4ed5-abb2-ce1d9bb0940a") - ) -======= ->>>>>>> hardware-65percent - (label "SWO" - (at 229.87 144.78 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "5ecab8f8-63a0-4572-9b85-28a525a98633") - ) -<<<<<<< HEAD - (label "UART_RX_SOUTH" - (at 147.32 154.94 90) -======= - (label "UART_RX_NORTH" - (at 147.32 139.7 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "6122bc97-e07e-4adf-89b2-180f85ee6966") - ) - (label "UART_RX_SOUTH" - (at 172.72 78.74 90) ->>>>>>> hardware-65percent - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) -<<<<<<< HEAD - (uuid "64a8185d-c8c9-437e-aa1e-0840591f81c7") -======= - (uuid "63fc0654-be18-4f2a-a55b-53555edbe2c2") ->>>>>>> hardware-65percent - ) - (label "UART_TX_WEST" - (at 49.53 107.95 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "6a08174c-d5da-4dc2-99f0-c0d2873ea18b") - ) - (label "COL10" -<<<<<<< HEAD -======= - (at 180.34 74.93 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "6a58c484-2ea3-413b-8615-ba2811c350c7") - ) - (label "COL12" - (at 167.64 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "6b5fc549-d58c-4de2-b4bb-118b4976d050") - ) - (label "COL10" ->>>>>>> hardware-65percent - (at 255.27 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "6d093d61-7183-48e7-a44b-e7ee317c60ce") - ) - (label "COL1" - (at 232.41 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "7063eed6-7ae8-40d0-a4eb-cf4cdfda5903") - ) - (label "Place near 5v source" - (at 167.64 22.86 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "7399cb9d-35cd-4baa-8fc3-1540e41d498b") - ) - (label "UART_RX_EAST" - (at 53.34 107.95 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "76e1a539-de27-4ae8-b7bf-103892a3248f") - ) - (label "D+" - (at 101.6 55.88 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "77a3d361-47a0-4b74-9b05-707429d9cf5a") - ) -<<<<<<< HEAD - (label "COL10" - (at 203.2 114.3 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "77a693a8-cbb0-4a16-9ffa-ff644b1ef66d") - ) -======= ->>>>>>> hardware-65percent - (label "VSS" - (at 149.86 77.47 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "780166be-d300-4885-bbb9-b8b93658a286") - ) -<<<<<<< HEAD - (label "COL11" - (at 203.2 116.84 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "7ca58e08-c365-4691-8526-02e2f709f173") - ) -======= ->>>>>>> hardware-65percent - (label "VSS" - (at 149.86 143.51 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "7df3f09f-d99f-4825-93d4-dbec7ae2c8e3") - ) - (label "ROW3" - (at 172.72 146.05 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "7fb03eb9-c3d7-4180-8af3-ef370fe9a303") - ) - (label "ROW5" - (at 209.55 58.42 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "8348d23a-0a8c-4a80-a092-2c011e4ecf26") - ) -<<<<<<< HEAD - (label "COL13" - (at 203.2 121.92 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "861b9f69-5164-46d8-ad69-517a598a79a4") - ) -======= ->>>>>>> hardware-65percent - (label "VSS" - (at 201.93 93.98 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "88af95dc-0f61-4228-9028-891eb6470a60") - ) - (label "ROW4" - (at 170.18 146.05 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "88fc4392-e3af-49a8-8dc2-8937835963c6") - ) - (label "ROW2" - (at 209.55 50.8 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "8ad74ae9-1513-46cb-b485-847d17f64d1b") - ) - (label "UART_RX_EAST" - (at 123.19 124.46 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "8b6ebbc2-aa43-45a0-bce1-078bb08c7e1b") - ) - (label "COL15" - (at 267.97 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "8b857264-1997-4c08-9752-35456e821526") - ) - (label "RGB_DATAIN" - (at 157.48 151.13 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "8bd4b99c-2cb7-4e42-a63a-d77ead0034b9") - ) -<<<<<<< HEAD - (label "COL2" - (at 162.56 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "8d5ea51c-3018-499a-9feb-77558fc69925") - ) -======= ->>>>>>> hardware-65percent - (label "Place near USB port" - (at 92.71 50.8 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "8e2d99a6-9b3e-4901-b824-804d2070fbd2") - ) - (label "COL9" - (at 252.73 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "92086348-c6ef-454f-890c-11a873ceb43a") - ) -<<<<<<< HEAD - (label "COL5" - (at 177.8 74.93 270) -======= - (label "COL4" - (at 203.2 119.38 180) ->>>>>>> hardware-65percent - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) -<<<<<<< HEAD - (uuid "959bf094-985a-4d26-85c6-29f58b765d35") -======= - (uuid "95fa2f23-8b81-47b7-bccb-9760f7b22390") - ) - (label "COL9" - (at 182.88 74.93 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "96ffef80-1b7b-4d2b-a1f7-1b8580e75eed") ->>>>>>> hardware-65percent - ) - (label "Place Near VBAT" - (at 116.84 80.01 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "97e91aa4-086a-4858-96f5-c1a15bd6f538") - ) - (label "VDD" - (at 152.4 143.51 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "98066d23-6bbb-440b-b346-e60179dceea1") - ) -<<<<<<< HEAD -======= - (label "COL15" - (at 160.02 76.2 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "996c67c9-193a-4c61-9328-9fc555becd3d") - ) - (label "RGB_DATAIN" - (at 237.49 113.03 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "9fa75837-02a6-4f2b-8b4a-bf84097a30c4") - ) - (label "UART_TX_SOUTH" - (at 175.26 78.74 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "a21ae7e0-711c-45a6-9e0f-0ffa2e2613b5") - ) ->>>>>>> hardware-65percent - (label "UART_RX_WEST" - (at 212.09 106.68 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "a65b0625-f87d-4d3e-b3ec-fefb39333313") - ) - (label "JTCLK" - (at 229.87 134.62 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "a709b3fd-11ff-4d03-b13c-ebedc49d9cef") - ) - (label "UART_RX_NORTH" - (at 49.53 95.25 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "a8b36eb9-36c3-4624-82b4-41d43faf2862") - ) - (label "JTMS" - (at 201.93 96.52 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "acaae2b4-f10d-4976-875a-301fe9e71b70") - ) - (label "UART_TX_EAST" - (at 53.34 110.49 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "ae8d8e37-f38f-41fe-903a-1eb9be3bd21d") - ) -<<<<<<< HEAD -======= - (label "COL5" - (at 203.2 116.84 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "aecd807f-0dae-4de9-9f2a-7205af2df165") - ) ->>>>>>> hardware-65percent - (label "JTMS" - (at 229.87 139.7 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "b1459e8f-23e1-418c-abf2-ccad8c3f1fe5") - ) -<<<<<<< HEAD - (label "UART_TX_SOUTH" - (at 123.19 129.54 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "b1ac5c45-29f6-49be-86d9-d334cdf2d7b7") - ) -======= ->>>>>>> hardware-65percent - (label "COL6" - (at 245.11 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "b6dc15c4-5294-4338-988f-8c3f870110f4") - ) -<<<<<<< HEAD - (label "COL14" - (at 203.2 124.46 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "bb2ad147-d245-4431-84b9-4648d501513f") - ) -======= ->>>>>>> hardware-65percent - (label "UART_TX_EAST" - (at 123.19 127 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "bf1851e9-b9a8-4880-a7b6-f35f2d00cfd9") - ) - (label "COL11" - (at 257.81 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "bf953326-f2e8-4e46-9ecf-e9fe4295b6b1") - ) -<<<<<<< HEAD -======= - (label "COL8" - (at 203.2 109.22 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "c1c2ccbf-4c9e-486b-9a84-3f54fb5a6e01") - ) ->>>>>>> hardware-65percent - (label "COL2" - (at 234.95 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "c2a7c331-a5ed-4a85-82c2-491255966a45") - ) - (label "ROW3" - (at 209.55 53.34 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "c438aa98-65d2-4007-8f35-dafed4b2a3fe") - ) - (label "COL14" - (at 265.43 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "c53d8f3f-c718-483b-bc66-4972501a0ded") - ) - (label "COL12" - (at 260.35 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "c6225080-537c-4d55-b636-d4a13e3f4f1d") - ) - (label "JTCLK" - (at 185.42 73.66 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "d2b99126-8045-457a-9dd5-be1ae59ee2fa") - ) - (label "ROW1" - (at 209.55 48.26 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "d312f0f4-cc79-473f-a2ed-836b5642b4a2") - ) -<<<<<<< HEAD -======= - (label "COL1" - (at 203.2 127 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "d4e6b922-25eb-4849-9db9-6f6185ed1afd") - ) ->>>>>>> hardware-65percent - (label "ROW4" - (at 209.55 55.88 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "d75df9b0-4438-4569-8d96-9e0ace9bede8") - ) - (label "ROW2" - (at 175.26 146.05 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "da058996-2170-4cf5-ab0a-eef5e288bffa") - ) - (label "COL13" - (at 262.89 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "dfbee201-609e-420a-8bd4-bc98bce299e1") - ) -<<<<<<< HEAD -======= - (label "COL7" - (at 203.2 111.76 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "e443e11e-99a4-44c1-9116-18729e86e186") - ) ->>>>>>> hardware-65percent - (label "VDD" - (at 201.93 91.44 180) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "e9b26d3d-3813-4e99-8ea8-af0648067087") - ) -<<<<<<< HEAD - (label "ROT_SW" - (at 154.94 147.32 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "ecce62bc-b4cc-48bb-a6e3-988ce1c4f4c4") - ) -======= ->>>>>>> hardware-65percent - (label "UART_RX_SOUTH" - (at 53.34 92.71 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "ef17a05a-3c4b-4a77-a598-a5f8ad4599a9") - ) -<<<<<<< HEAD - (label "UART_RX_NORTH" - (at 172.72 63.5 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "f0af64ee-d378-41f3-842f-24d5ad4f75d3") - ) -======= ->>>>>>> hardware-65percent - (label "COL8" - (at 250.19 26.67 270) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - (uuid "f325fd11-511d-4af8-8e04-8af1e81ceee5") - ) -<<<<<<< HEAD - (label "ROT_TIMB" - (at 160.02 151.13 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - (uuid "fe355360-6bef-43f4-a60d-7c9f0aed2700") - ) -======= ->>>>>>> hardware-65percent - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 149.86 144.145 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "12142d74-3d2e-4713-9447-228a4a59b31b") - (property "Reference" "#PWR013" - (at 149.86 150.495 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 149.86 149.225 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 149.86 144.145 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 149.86 144.145 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 149.86 144.145 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "79c1e8f8-ac62-4d68-b7d9-4530a76b20fd") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR013") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Connector:Conn_01x04") - (at 73.66 107.95 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "16dff95b-3e36-4af3-b88b-15fb8adc8e2f") - (property "Reference" "East1" - (at 79.248 107.95 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "Conn_01x04" - (at 76.2 110.4899 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" - (at 73.66 100.965 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 73.66 107.95 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 73.66 107.95 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 70.485 122.555 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at 71.12 117.348 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0401FBV0T" - (at 71.12 118.872 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (pin "1" - (uuid "41d3d594-2c33-4367-8359-1b31ee9d9e0e") - ) - (pin "2" - (uuid "b9ea89f1-323d-4571-9eb6-093ad77c06ee") - ) - (pin "3" - (uuid "551282d5-5991-4cb6-b066-7718563ef0bf") - ) - (pin "4" - (uuid "2460e906-92ce-496f-b65b-e5783cab0360") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "East1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 66.04 156.21 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "260e3606-a354-4351-a844-1997c309f36f") - (property "Reference" "C6" - (at 60.325 155.067 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "100nF" - (at 60.325 157.607 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 67.0052 160.02 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 66.04 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 66.04 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "b88bb4b7-8467-4e01-b0d2-7fbfcd272840") - ) - (pin "1" - (uuid "fba68482-11cf-418d-b65a-ad61b36feb9f") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C6") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 52.07 118.11 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "28aaff08-a29a-4a24-ac7d-db733f758a5e") - (property "Reference" "#PWR028" - (at 52.07 124.46 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 52.07 123.19 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 52.07 118.11 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 52.07 118.11 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 52.07 118.11 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "88c2da29-dedb-4ce3-af23-c19dae3a8d2a") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR028") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 109.22 76.2 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "2c77678b-8e1f-43de-9ae0-b5fb80b5d1ac") - (property "Reference" "#PWR02" - (at 109.22 82.55 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 109.22 81.28 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 109.22 76.2 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 109.22 76.2 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 109.22 76.2 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "bded81a6-5439-4584-9cec-c42bf66caf54") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR02") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "stm32f446ret6:STM32F446RET6") - (at 144.78 88.9 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "31831253-77ba-4c6e-9363-32c75e9e329b") - (property "Reference" "U1" - (at 193.04 85.0198 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "~" - (at 193.04 87.5598 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "footprints:LQFP64-10x10mm" - (at 144.78 88.9 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 144.78 88.9 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 144.78 88.9 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "28" - (uuid "0886e1c2-3ce9-47e5-86c6-0f285bd776e5") - ) - (pin "56" - (uuid "20a27dd1-d910-4162-aef4-d2e08693b946") - ) - (pin "47" - (uuid "d09717ee-1aed-46b0-8158-7b026c0ada04") - ) - (pin "14" - (uuid "84b0538f-607e-4d0d-9fa8-926b1ea240ff") - ) - (pin "31" - (uuid "8b45ff39-69a8-45b5-97b2-6463c65a3696") - ) - (pin "64" - (uuid "1bce4abd-3e9b-4533-aac9-cffa72738c1b") - ) - (pin "35" - (uuid "235492d7-f22e-4ea4-9887-1910533d3793") - ) - (pin "39" - (uuid "07655dc7-4bde-40e4-ac89-69b63ed018e3") - ) - (pin "41" - (uuid "32984301-ee58-4d34-966d-88daef772143") - ) - (pin "37" - (uuid "edff6ede-75da-4306-8a75-c200cfd6eaa0") - ) - (pin "17" - (uuid "920831fe-461b-4699-95f5-6c4134d14979") - ) - (pin "61" - (uuid "79c24d0f-576f-41eb-9c74-eb83570833f1") - ) - (pin "44" - (uuid "c5256497-ef95-41c1-a6dc-8f776448042f") - ) - (pin "42" - (uuid "b23a8609-fd55-48ad-b6ff-aa70929a2e71") - ) - (pin "58" - (uuid "0ec6a147-5c7e-4392-b48a-52ad9cc58e1d") - ) - (pin "3" - (uuid "3455f583-b715-48f2-8fd1-67ab90b6ee5f") - ) - (pin "4" - (uuid "1cd82aee-006f-40c1-90c6-f6b046ff3b6b") - ) - (pin "6" - (uuid "ebe87469-e99d-4253-b7fb-c316a3aeefd6") - ) - (pin "33" - (uuid "5604e812-811d-4f56-b6ed-13e9c98ca811") - ) - (pin "52" - (uuid "63989350-b9f7-4686-837e-0632988867bc") - ) - (pin "16" - (uuid "0f03b811-92cd-4b3a-98ad-434e0517d0b3") - ) - (pin "19" - (uuid "862ecf73-59e8-476e-9b1e-18ccd0373e59") - ) - (pin "15" - (uuid "d7d7a630-c872-4a7a-a052-78958e4b3d4c") - ) - (pin "27" - (uuid "f23bcd51-6fbd-4172-a344-de5618516543") - ) - (pin "45" - (uuid "cc8d190b-da82-4e03-829b-61cb952ddb35") - ) - (pin "54" - (uuid "45419dc1-1846-4b15-8085-60318c5d52cd") - ) - (pin "5" - (uuid "7d3a1d78-2e56-4aba-9ad9-1dfb2935ff3e") - ) - (pin "22" - (uuid "30ba65c9-4009-4f0c-aa96-58e9a7a3e053") - ) - (pin "32" - (uuid "a632e59d-ae7f-4350-bebe-0123c4c0ad17") - ) - (pin "29" - (uuid "6358c15a-584d-4013-96fe-c8960f71f2e8") - ) - (pin "49" - (uuid "5fe23252-a936-43e2-80e8-0d9cc4e3e8c7") - ) - (pin "36" - (uuid "723f0728-a816-4106-8cc8-79a115e06323") - ) - (pin "10" - (uuid "30883165-5d7c-43cd-900c-d10b897a1ab2") - ) - (pin "21" - (uuid "a96c1813-17b5-4c46-8379-d84aa746bc90") - ) - (pin "50" - (uuid "51f78068-852f-4ddb-8f3c-e7a1091068e2") - ) - (pin "43" - (uuid "cfafc677-c626-44be-b44a-62426b0dc726") - ) - (pin "25" - (uuid "40e15d3d-c577-4ee1-8dbc-0d26075063d0") - ) - (pin "18" - (uuid "6df42964-3fdc-4b5b-9d9e-bf61c067f092") - ) - (pin "63" - (uuid "5c191ece-be23-4144-ac2d-a6848f98342e") - ) - (pin "57" - (uuid "764d79ea-2d55-4ba4-b1db-9401b46e1d85") - ) - (pin "55" - (uuid "23a866ab-8709-4969-b18f-fe0613aed4e5") - ) - (pin "60" - (uuid "7d012868-a716-412a-83f1-067b33448789") - ) - (pin "59" - (uuid "d46f9490-ec55-496c-962e-bd35bb040115") - ) - (pin "38" - (uuid "a7851fa2-bc79-4c50-acd6-02fe8d86fa5b") - ) - (pin "51" - (uuid "7a65ae2d-583b-410c-b973-ba1f6df9e160") - ) - (pin "26" - (uuid "3d4cb577-6d99-4470-b559-2dd622aac9ba") - ) - (pin "53" - (uuid "f56c7708-5f27-46fd-bc0b-e03968931698") - ) - (pin "46" - (uuid "5f2def18-53df-4421-b01f-456d9a467ea9") - ) - (pin "2" - (uuid "78577e45-40a6-49c2-ac0c-7dcf40cb21cd") - ) - (pin "12" - (uuid "27389f66-ca3b-43bd-b08f-191429db1f5b") - ) - (pin "7" - (uuid "a90ee11e-33d7-4788-9692-030d14bdf9cd") - ) - (pin "62" - (uuid "1ad8762d-34b5-4230-8437-34eda152d3bd") - ) - (pin "30" - (uuid "517a2950-a2ac-4d9e-9b6d-3267103ba3f4") - ) - (pin "40" - (uuid "890d5658-68c2-4050-ba25-0c99b39796cc") - ) - (pin "24" - (uuid "d53edb8c-64c4-4ad2-b2e8-f4b87eb7a13d") - ) - (pin "20" - (uuid "b61b658c-d66f-4ff1-855b-1a7eb150bbe0") - ) - (pin "23" - (uuid "96acca93-1232-452a-b115-1199bc7ea978") - ) - (pin "48" - (uuid "4a02a6e1-a599-4925-8fbc-e7615cbf40a6") - ) - (pin "1" - (uuid "8d16c66f-66e1-4192-8c34-f73f2720c510") - ) - (pin "11" - (uuid "acd903a3-4cbb-4eab-90ca-7be92d2a28f8") - ) - (pin "34" - (uuid "49d3cc52-c998-46b8-964f-ec515615073a") - ) - (pin "8" - (uuid "28a83762-9718-4da2-aaeb-d6d1942e8bee") - ) - (pin "9" - (uuid "0b6f30a8-4e8e-4409-82ef-00e7e36942e7") - ) - (pin "13" - (uuid "918ec7cf-b2b8-472a-bab3-6d9bae41f892") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "U1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 190.5 38.1 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "35f94759-1894-4596-badb-3697130513d4") - (property "Reference" "C8" - (at 195.326 36.83 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "10uF" - (at 195.326 39.37 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 189.5348 34.29 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 190.5 38.1 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 190.5 38.1 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "50e79932-a377-4ca0-bcf1-45b87e94efc9") - ) - (pin "1" - (uuid "d398b287-c408-45b3-9888-e8ce471e6e8f") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C8") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 116.84 172.72 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "362e8ab3-80aa-4833-9980-401806e826a4") - (property "Reference" "#PWR024" - (at 116.84 179.07 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "AGND" - (at 116.84 177.8 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 116.84 172.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 116.84 172.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 116.84 172.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "6d353520-d3c5-4dc1-8dbf-e569cd3072ae") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR024") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Connector:Conn_01x04") - (at 30.48 95.25 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "38beb260-5ceb-4b19-afa7-0dbaab81122b") - (property "Reference" "North1" - (at 22.098 92.202 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x04" - (at 22.098 94.742 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" - (at 30.48 102.235 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 30.48 95.25 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 30.48 95.25 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 33.655 80.645 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at 33.02 85.852 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0401FBV0T" - (at 33.02 84.328 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (pin "1" - (uuid "d38dffee-7776-49d0-9698-44ef3d3ba56a") - ) - (pin "2" - (uuid "293e4a08-e99f-4d35-a342-3d56e0ad1321") - ) - (pin "3" - (uuid "7029ed19-77dd-46f6-ae92-4a94d57fd405") - ) - (pin "4" - (uuid "b427cede-7495-4e46-95bf-b517dd7e73d6") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "North1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_SL_Devices:Push_Button") - (at 119.38 111.76 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "3cd8ba19-3dca-4432-8dd9-49896aa80d3e") - (property "Reference" "SW2" - (at 123.19 110.4899 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "Push_Button" - (at 123.19 113.0299 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "PCM_marbastlib-various:SW_SPST_SKQG_WithStem" - (at 116.205 111.633 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 119.38 111.76 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Common 6mmx6mm Push Button" - (at 119.38 111.76 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "f1a272e7-4e0d-4b33-a06c-45468a5183c5") - ) - (pin "2" - (uuid "11cefee7-7380-400c-8503-c20b77cd8203") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "SW2") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 127 93.98 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "3cf6d79a-8b3d-4cf7-a145-285fd4bdd59f") - (property "Reference" "C1" - (at 132.08 92.71 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "20pF" - (at 132.08 95.25 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 126.0348 90.17 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 127 93.98 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 127 93.98 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "fe9b3cee-e1f9-414c-8848-237d3bdce510") - ) - (pin "1" - (uuid "80ae2b43-5592-4ef5-8d35-e6280ff59a46") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Diode:D_Generic") - (at 72.39 30.48 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "3e4adb9d-795b-4ed4-9421-13dd684d8460") - (property "Reference" "D2" - (at 72.39 24.13 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "BAT60JFILM" - (at 72.39 26.67 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-323" - (at 72.39 30.48 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 72.39 30.48 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Diode" - (at 72.39 30.48 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "801a8524-a976-429e-8e91-b4b4fea7e2cd") - ) - (pin "2" - (uuid "dbdbdea8-a82f-43e6-9632-f47e89bda55f") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "D2") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Device_AKL:Ferrite_Bead") - (at 119.38 125.73 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "419d9c4f-4ab7-4264-9f26-8a0424a1c835") - (property "Reference" "FB1" - (at 119.38 131.572 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Ferrite_Bead" - (at 119.38 134.112 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Fuse_AKL:Fuse_0805_2012Metric_Pad1.15x1.40mm_BigPads" - (at 122.682 125.73 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 119.38 125.73 90) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Ferrite bead, Alternate KiCAD Library" - (at 119.38 125.73 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "71ba895c-6490-4903-b2e6-9070ebf6016d") - ) - (pin "2" - (uuid "ab18a28b-d1b5-4a66-a49f-04fd403c2bb8") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "FB1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 43.18 63.5 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "472bce0d-3313-47ec-8030-87884d514fd8") - (property "Reference" "#PWR03" - (at 43.18 69.85 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 43.18 68.58 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 43.18 63.5 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 43.18 63.5 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 43.18 63.5 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "190831c2-f4ad-44fd-b601-308694111fa4") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR03") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+3.3V") - (at 196.85 31.75 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "4be478fe-4108-4302-9a42-ffdb13f89941") - (property "Reference" "#PWR010" - (at 196.85 35.56 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 196.85 26.67 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 196.85 31.75 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 196.85 31.75 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 196.85 31.75 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "1cce0eb6-bcc5-46d4-b03a-61ad7dd38625") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR010") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 49.53 54.61 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "55fe11de-2a05-4ff1-bc3a-63c075a9f29d") - (property "Reference" "R1" - (at 52.07 53.3399 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "5.1k" - (at 52.07 55.8799 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 49.53 66.04 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 49.53 54.61 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 49.53 54.61 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "fcf19629-2d07-41cc-8961-b8b6f113a170") - ) - (pin "1" - (uuid "71fb46c3-1dd1-40b0-be6f-1e3a2a516edc") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 245.11 139.7 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "5c57828a-36bc-4da4-bfd6-d3d5666e7619") - (property "Reference" "R7" - (at 240.03 138.43 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "22" - (at 240.03 140.97 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 233.68 139.7 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 245.11 139.7 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 245.11 139.7 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "fddf0490-81fa-47e8-b311-7bd1c5bd7568") - ) - (pin "1" - (uuid "9b9baa3f-95fc-4efc-b148-efc0f2d587a1") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R7") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 43.18 156.21 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "5d7500da-bd2b-4c6a-9047-3e2d6a3165ca") - (property "Reference" "C4" - (at 37.465 155.067 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "100nF" - (at 37.465 157.607 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 44.1452 160.02 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 43.18 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 43.18 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "db413f08-6778-4d6e-8c37-2d8f0ae6e0eb") - ) - (pin "1" - (uuid "3253ccbb-4b82-4fb1-b57c-20f27bea2695") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C4") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 180.34 149.86 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "68cc06c9-d019-47d1-bae7-2856c48d1f53") - (property "Reference" "C9" - (at 185.166 148.59 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "4.7uF" - (at 185.166 151.13 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 179.3748 146.05 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 180.34 149.86 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 180.34 149.86 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "14ed719e-0199-4560-899e-26a8b5f90b3c") - ) - (pin "1" - (uuid "fcc00765-336f-471e-bd85-81a28ac8c9c4") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C9") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+3.3V") - (at 31.75 149.86 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "6ab32cb3-2df6-4ff9-a513-85667e0ccc25") - (property "Reference" "#PWR04" - (at 31.75 153.67 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 31.75 144.78 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 31.75 149.86 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 31.75 149.86 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 31.75 149.86 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "c9fbff55-8bfc-4e14-a511-caa78e56c9e3") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR04") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 54.61 156.21 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "6ac435e0-7961-4dbe-9c30-dbf9204a8e02") - (property "Reference" "C5" - (at 48.895 155.067 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "100nF" - (at 48.895 157.607 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 55.5752 160.02 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 54.61 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 54.61 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "aeb57fe7-abcc-4bef-a163-85f815f24fdb") - ) - (pin "1" - (uuid "b3d84c90-5579-43bf-a217-ed033748ed83") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C5") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 116.84 93.98 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "6bbda6bc-f811-45ca-81a4-9ccc00f06fab") - (property "Reference" "C2" - (at 111.6965 95.5675 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "20pF" - (at 111.6965 93.0275 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 115.8748 90.17 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 116.84 93.98 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 116.84 93.98 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "05be0e56-3163-4446-a5c2-631c895f5066") - ) - (pin "1" - (uuid "27962fae-02aa-4a42-9af1-0aa90d750a38") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C2") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GNDA") - (at 104.14 127 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "6eb9f6f2-1815-4dc0-9f82-2e8e6261fe57") - (property "Reference" "#PWR016" - (at 104.14 133.35 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "AGND" - (at 101.854 131.572 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "" - (at 104.14 127 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 104.14 127 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "(analog) ground power-flag symbol" - (at 104.14 127 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "48137a00-e2b8-4ca6-a52c-fb6939565ae0") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR016") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 105.41 91.44 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "73155beb-873a-4b21-9ec3-d28d94562dcc") - (property "Reference" "#PWR05" - (at 105.41 97.79 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 105.41 96.52 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 105.41 91.44 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 105.41 91.44 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 105.41 91.44 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "e4e5a564-f2c2-4e3b-b232-7a1559422a56") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR05") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+5V") - (at 92.71 29.21 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "7518ced7-be4e-49d5-920d-9ae3234447d4") - (property "Reference" "#PWR015" - (at 92.71 33.02 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+5V" - (at 92.71 24.13 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 92.71 29.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 92.71 29.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 92.71 29.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "9faabb2c-473a-4f88-b5e1-439a05f0c392") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR015") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Regulator:LD1117-3.3V-SOT223") - (at 177.8 35.56 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "780e4915-82a4-4658-81f3-960aa1d9fc82") - (property "Reference" "IC1" - (at 177.8 26.67 0) - (effects - (font - (size 1.143 1.143) - ) - ) - ) - (property "Value" "LD1117-3.3V-SOT223" - (at 177.8 29.21 0) - (effects - (font - (size 1.143 1.143) - ) - ) - ) - (property "Footprint" "PCM_4ms_Package_SOT:SOT223" - (at 177.8 28.575 0) - (effects - (font - (size 0.508 0.508) - ) - (hide yes) - ) - ) - (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" - (at 177.8 34.29 0) - (effects - (font - (size 1.524 1.524) - ) - (hide yes) - ) - ) - (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" - (at 177.8 35.56 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Manufacturer" "STMicroelectronics" - (at 177.8 45.085 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "LD1117S33CTR" - (at 177.8 46.99 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (pin "3" - (uuid "d044b8da-f579-430a-9657-f3f038538a7b") - ) - (pin "2" - (uuid "16ad427b-cb27-4545-9cc3-8033a32817ba") - ) - (pin "1" - (uuid "d41a2627-4fe9-4d1e-a9b3-47c762eac2b6") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "IC1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 218.44 99.06 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "7cafd78e-827b-4512-9029-08dc37727121") - (property "Reference" "R4" - (at 218.44 92.71 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "22" - (at 218.44 95.25 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 207.01 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 218.44 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 218.44 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "e4eb200f-2ca3-456f-937c-8b45571e4b5b") - ) - (pin "1" - (uuid "ed5c6058-ddbc-4020-9a26-741d7bbe10ba") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R4") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 245.11 142.24 90) - (mirror x) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "7efd55f9-94bc-4e0f-acd8-78533ca71252") - (property "Reference" "R8" - (at 250.19 140.97 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "22" - (at 250.19 143.51 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 256.54 142.24 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 245.11 142.24 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 245.11 142.24 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "d5ef4ec7-b7be-43c2-bc23-5aa94f1c4be8") - ) - (pin "1" - (uuid "43b4bfd6-e642-41dd-bda6-169be25de336") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R8") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 245.11 134.62 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "870bee74-1b94-44bc-97d7-e29667be0724") - (property "Reference" "R6" - (at 240.03 133.35 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "22" - (at 240.03 135.89 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 233.68 134.62 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 245.11 134.62 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 245.11 134.62 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "bf050548-5846-4278-93f6-31257dca583a") - ) - (pin "1" - (uuid "149b9b0f-213e-4e91-a664-426d638a1e7f") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R6") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 180.34 153.67 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "89eaf3be-6a53-4d52-875d-0e85769bf269") - (property "Reference" "#PWR011" - (at 180.34 160.02 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 180.34 158.75 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 180.34 153.67 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 180.34 153.67 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 180.34 153.67 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "abe82d7c-d4b6-48fe-bf15-9070a3c2d7cd") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR011") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 31.75 156.21 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "8b2a8a82-737e-4e1c-b010-75e324eaa549") - (property "Reference" "C3" - (at 26.035 155.067 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "100nF" - (at 26.035 157.607 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 32.7152 160.02 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 31.75 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 31.75 156.21 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "d8926d9e-5d64-4c07-b6b0-35e4f57fcfa6") - ) - (pin "1" - (uuid "f175dcfe-b8d2-4502-bfc9-d7f18c809352") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C3") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_SL_Devices:Crystal_8MHz") - (at 121.92 100.33 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "8f6ee047-3b69-4415-a3d3-f3f35ce3c89b") - (property "Reference" "Y1" - (at 123.19 96.52 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "8MHz" - (at 120.65 96.52 90) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "PCM_Crystal_AKL:Crystal_HC52-U_Vertical" - (at 121.92 104.14 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 121.92 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "8Mz Crystal" - (at 121.92 100.33 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "af9c1162-fb38-42a3-a395-46614193d10a") - ) - (pin "1" - (uuid "823ef913-9ee3-4774-92d2-46dd24c44b3b") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "Y1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 31.75 163.83 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "90bad0bd-de9f-44f0-87ad-a563bae0150b") - (property "Reference" "#PWR012" - (at 31.75 170.18 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 31.75 168.91 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 31.75 163.83 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 31.75 163.83 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 31.75 163.83 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "00b9aaf5-3e0f-47a6-a021-e46ee028ed4d") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR012") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 124.46 73.66 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "94a0fdd0-56a6-4942-8589-01a86c805627") - (property "Reference" "C10" - (at 124.46 66.802 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "1uF" - (at 124.46 69.342 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 120.65 74.6252 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 124.46 73.66 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 124.46 73.66 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "3b5dde54-3bc5-4edc-86c7-1c727e8a77b9") - ) - (pin "1" - (uuid "e7e9a3f3-48b1-4d42-b0fe-a065c5886e52") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C10") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Connector:Conn_01x04") - (at 73.66 92.71 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "9676fbe1-cd81-4f09-9a64-1e08ed9b6d67") - (property "Reference" "South1" - (at 81.788 92.71 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x04" - (at 81.788 95.25 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" - (at 73.66 85.725 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 73.66 92.71 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 73.66 92.71 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 70.485 107.315 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at 71.12 102.108 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0401FBV0T" - (at 71.12 103.632 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (pin "1" - (uuid "16ac9726-ccc1-410d-afbd-9bd5e6a9f31a") - ) - (pin "2" - (uuid "c6ddf6e6-ab14-4c9c-8fbf-e193a984b2ff") - ) - (pin "3" - (uuid "c739ac0b-2320-49e6-b465-0e5ea1e2a08e") - ) - (pin "4" - (uuid "7f3eac63-89fc-4252-a8da-30ee8e024666") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "South1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 177.8 45.72 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "99dee30c-837e-40d2-bd1f-9b659acdfebe") - (property "Reference" "#PWR06" - (at 177.8 52.07 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 177.8 49.784 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 177.8 45.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 177.8 45.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 177.8 45.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "cf037296-f441-414f-81c6-67ed41e4c8e7") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR06") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 218.44 101.6 90) - (mirror x) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "9a64bac4-da04-48a9-9702-7209f655d06c") - (property "Reference" "R3" - (at 218.44 107.95 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "22" - (at 218.44 105.41 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 229.87 101.6 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 218.44 101.6 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 218.44 101.6 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "5f16db44-08ec-478a-9923-725cc54747da") - ) - (pin "1" - (uuid "34ffee46-b723-49a0-8a33-221097200bec") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R3") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 245.11 144.78 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "9c5f0493-d680-4847-8e64-3696158e4f7e") - (property "Reference" "R9" - (at 240.03 143.51 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "22" - (at 240.03 146.05 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 233.68 144.78 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 245.11 144.78 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 245.11 144.78 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "d6ec1b2f-dd19-47dd-b03f-ff465346c392") - ) - (pin "1" - (uuid "fab710de-11b3-4ebf-9a23-5a94ae533382") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R9") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 165.1 38.1 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "acdb7e2a-dbdd-410b-b924-7a3e541f44dd") - (property "Reference" "C7" - (at 160.528 36.83 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "1uF" - (at 160.528 39.37 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 166.0652 41.91 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 165.1 38.1 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 165.1 38.1 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "890c133e-55f2-4c59-adbf-185ae549f7ce") - ) - (pin "1" - (uuid "3bf7b668-3d45-4cb8-b876-3ab4b41e0515") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C7") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Connector:Conn_01x06") - (at 256.54 137.16 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "b0e5479b-55c8-4df5-bbc5-a0d68647dbd2") - (property "Reference" "J1" - (at 259.08 137.1599 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "Conn_01x06" - (at 259.08 139.6999 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Horizontal" - (at 256.54 154.94 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 256.54 138.43 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" - (at 256.54 137.16 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" - (at 254.635 153.035 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at 254 149.86 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0601FBV0T" - (at 254.635 151.765 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (pin "6" - (uuid "16dc203b-069a-4275-940e-9947482a9079") - ) - (pin "1" - (uuid "8816f601-baf3-4d75-b27c-1e9d6655cbfb") - ) - (pin "3" - (uuid "d0d1033b-d596-445a-9ce2-aed8b4c72d36") - ) - (pin "4" - (uuid "ac497e7a-422f-41f2-8705-75924a98375f") - ) - (pin "5" - (uuid "69100a82-de14-4456-b0f0-7036b3b5d7d2") - ) - (pin "2" - (uuid "a307c3c5-6163-4f29-b7bd-0b11191e34dc") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "J1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+5V") - (at 50.8 85.09 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "b3581a19-1bf1-4bc5-a70d-1256ab664927") - (property "Reference" "#PWR025" - (at 50.8 88.9 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+5V" - (at 53.594 83.566 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 50.8 85.09 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 50.8 85.09 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 50.8 85.09 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "8d84c140-161f-4806-a798-000c2e6dab39") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR025") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "power:GND") - (at 106.68 172.72 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "b3793324-87be-425d-8b78-63f999e9e56c") - (property "Reference" "#PWR023" - (at 106.68 179.07 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 106.68 177.8 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 106.68 172.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 106.68 172.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 106.68 172.72 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "ab7ed32e-61e0-4c98-a559-e8869e0819e1") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR023") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 96.52 118.11 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "b3d40ac4-8daa-4a7a-ba11-9a68212fd759") - (property "Reference" "#PWR020" - (at 96.52 124.46 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 96.52 123.19 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 96.52 118.11 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 96.52 118.11 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 96.52 118.11 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "1c7ff4c0-7e81-4773-ab3b-110402d7ecd6") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR020") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+3.3V") - (at 134.62 68.58 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "b64cbf88-e11a-40de-8ab0-7220c5c7fbca") - (property "Reference" "#PWR01" - (at 134.62 72.39 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 134.62 63.5 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 134.62 68.58 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 134.62 68.58 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 134.62 68.58 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "86679c50-090c-4490-98c1-13e5ab52111c") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR01") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 157.48 67.31 0) - (mirror y) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "bb837909-857a-4e99-a0d4-4f703a793296") - (property "Reference" "R5" - (at 160.782 66.04 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "10k" - (at 160.782 68.58 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 157.48 78.74 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 157.48 67.31 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 157.48 67.31 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "7800df85-1edc-4e8c-ae00-81f05b8e4846") - ) - (pin "1" - (uuid "3251e7d5-7480-4e46-b027-2dc5836d003f") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R5") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Diode_TVS_AKL:PRTR5V0U2X") - (at 85.09 46.99 270) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "c7c4756e-a5bf-4567-914d-57c2ffef1bc4") - (property "Reference" "D1" - (at 73.152 40.64 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "PRTR5V0U2X" - (at 73.152 43.18 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Package_TO_SOT_SMD_AKL:SOT-143_Handsoldering" - (at 85.09 46.99 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" - (at 85.09 46.99 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" - (at 85.09 46.99 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "3" - (uuid "f4720144-6b17-45aa-86f9-ca35e1cb249a") - ) - (pin "1" - (uuid "1f1c0af4-6af1-4d46-bee1-39921bbafaf7") - ) - (pin "2" - (uuid "90a651c4-1ad8-4254-8474-15751d8c631f") - ) - (pin "4" - (uuid "0e04a63c-87ca-4ac2-8b68-bd2b902da0de") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "D1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+3.3V") - (at 97.79 99.06 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "cc3b6256-79cc-467a-97e2-a1b19b2cda65") - (property "Reference" "#PWR026" - (at 97.79 102.87 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 97.79 93.98 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 97.79 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 97.79 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 97.79 99.06 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "8b6dc700-9910-4678-afb7-e64e0acb11ca") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR026") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "Type-C:HRO-TYPE-C-31-M-12") - (at 38.1 41.91 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "d9f634d1-10e6-4463-addc-35893eef8711") - (property "Reference" "USB1" - (at 32.385 21.59 0) - (effects - (font - (size 1.524 1.524) - ) - ) - ) - (property "Value" "HRO-TYPE-C-31-M-12" - (at 32.385 24.13 0) - (effects - (font - (size 1.524 1.524) - ) - ) - ) - (property "Footprint" "Type-C.pretty-master:HRO-TYPE-C-31-M-12-HandSoldering" - (at 38.1 41.91 0) - (effects - (font - (size 1.524 1.524) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 38.1 41.91 0) - (effects - (font - (size 1.524 1.524) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 38.1 41.91 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "4" - (uuid "cb6fdf46-aed8-4f4c-b0b8-d59c5c47a690") - ) - (pin "12" - (uuid "9ab22500-0278-44ca-be4b-cfcde50b4c10") - ) - (pin "11" - (uuid "1ddb208b-ff35-4fdc-a423-08f0d07e4d4f") - ) - (pin "5" - (uuid "45070fb5-7ae4-4e55-962d-e8f7a816022e") - ) - (pin "6" - (uuid "f9b15b03-aebe-4bbf-a656-737d04c44c44") - ) - (pin "7" - (uuid "8105c7ce-6a71-4fdc-ad8e-c8943559273f") - ) - (pin "13" - (uuid "d31068a2-7ab4-4e2f-92cf-2c0e41587bff") - ) - (pin "1" - (uuid "0bc1628c-ef7e-4201-a614-715dd7151af8") - ) - (pin "9" - (uuid "16aa9b4c-1d3d-4e03-b05a-b19d79aca7f6") - ) - (pin "3" - (uuid "1e1919e6-4c07-45bc-ad3e-7fcc3ae2b078") - ) - (pin "10" - (uuid "1c6a228e-7ec2-49b5-b234-f8cb25dff46d") - ) - (pin "2" - (uuid "ba738f09-f626-4537-967f-a12f11e05a7f") - ) - (pin "8" - (uuid "47b09ed0-4006-4392-bcd8-fd822205b25a") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "USB1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 97.79 102.87 0) - (mirror x) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "db62a6df-f2f1-4431-8846-a6dc2b8040af") - (property "Reference" "R13" - (at 94.488 104.14 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "DNP" - (at 94.488 101.6 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 97.79 91.44 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 97.79 102.87 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 97.79 102.87 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "5ffde405-0bb6-4a06-b2c6-b114a825513c") - ) - (pin "1" - (uuid "86bae480-65c4-460d-ab18-a43e63bcf238") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R13") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+5V") - (at 158.75 31.75 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "de717130-e998-438a-80ee-9ae716f8d2df") - (property "Reference" "#PWR09" - (at 158.75 35.56 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+5V" - (at 158.75 26.67 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 158.75 31.75 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 158.75 31.75 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 158.75 31.75 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "3f1e4e34-c45b-4012-b5a0-fd9e0181a98c") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR09") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+3.3V") - (at 113.03 127 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "df7ed3bb-ae6e-4571-8afe-1bd0f71e85bf") - (property "Reference" "#PWR017" - (at 113.03 130.81 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 113.03 121.92 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 113.03 127 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 113.03 127 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 113.03 127 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "36a14cc6-3e21-486e-b788-7df0ffb63868") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR017") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 58.42 54.61 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "e43ed88a-0b7c-4dfb-9632-55636cb7c7cb") - (property "Reference" "R2" - (at 60.96 53.3399 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "5.1k" - (at 60.96 55.8799 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 58.42 66.04 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 58.42 54.61 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 58.42 54.61 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "a75d4186-2398-45c6-9021-f79cdb32bdbc") - ) - (pin "1" - (uuid "19f83cd3-137c-4cf7-8991-eb66f0853871") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R2") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:+3.3V") - (at 248.92 129.54 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "e53a289c-fcd3-4010-a8f4-1587afe30e6a") - (property "Reference" "#PWR021" - (at 248.92 133.35 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "+3.3V" - (at 248.666 125.222 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 248.92 129.54 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 248.92 129.54 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 248.92 129.54 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "c4296122-bd07-44ef-979b-b8f472157841") - ) - (instances - (project "" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR021") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 223.52 138.43 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "e9887ddd-2719-45c4-b084-f7d71da24077") - (property "Reference" "#PWR022" - (at 223.52 144.78 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 223.52 143.51 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 223.52 138.43 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 223.52 138.43 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 223.52 138.43 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "5d5e6813-9500-433f-83e3-acca888f9615") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR022") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Connector:Conn_01x04") - (at 30.48 110.49 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "e9c07dcf-7c62-4e0f-b7d8-bffddad87ab1") - (property "Reference" "West1" - (at 22.098 108.204 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "Conn_01x04" - (at 22.098 110.744 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" - (at 30.48 117.475 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 30.48 110.49 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 30.48 110.49 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" - (at 33.655 95.885 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Manufacturer" "TAD" - (at 33.02 101.092 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Part Number" "1-0401FBV0T" - (at 33.02 99.568 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (pin "1" - (uuid "848dfe91-0857-4e62-aac3-6b94d711f6e2") - ) - (pin "2" - (uuid "34dc7aca-b4bf-44da-b02b-e8f3a8489680") - ) - (pin "3" - (uuid "fdb3db6d-c9e9-48f5-b5c4-e922a76f4f49") - ) - (pin "4" - (uuid "182cf852-4b6b-4595-8d02-8aa2c537f154") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "West1") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Resistor_AKL:R_0805") - (at 111.76 170.18 270) - (mirror x) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "f01e28d6-c99b-4363-922d-8d4ade2b1113") - (property "Reference" "R10" - (at 111.76 165.354 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "DNP" - (at 111.76 167.894 90) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" - (at 100.33 170.18 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 111.76 170.18 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" - (at 111.76 170.18 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "782ea787-286f-48cd-b5c3-6b5419f9ad4a") - ) - (pin "1" - (uuid "2e0b1b3b-28dd-4cbb-93c6-d6f53b7deddf") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "R10") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 166.37 66.04 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "f17691c8-a58d-43cc-8568-d3c380e99aec") - (property "Reference" "#PWR018" - (at 166.37 72.39 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 166.37 69.85 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 166.37 66.04 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 166.37 66.04 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 166.37 66.04 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "56fa1d5e-524b-4bb4-98c4-4f7148dfbe80") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR018") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_Capacitor_AKL:C_0805") - (at 113.03 111.76 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (uuid "f4ed843a-a837-4644-ab1e-a88bfeb2df84") - (property "Reference" "C11" - (at 107.8865 113.3475 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Value" "0.1uF" - (at 107.8865 110.8075 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" - (at 112.0648 107.95 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "~" - (at 113.03 111.76 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" - (at 113.03 111.76 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "a5ae1a77-6e8a-4b9d-a41b-d17e701eae3c") - ) - (pin "1" - (uuid "f065c7e0-fa66-403e-b068-3b78e2cff007") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "C11") - (unit 1) - ) - ) - ) - ) - (symbol - (lib_id "PCM_4ms_Power-symbol:GND") - (at 73.66 49.53 0) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "fcc5ab1a-6ac6-4919-9b1d-bc252ff46237") - (property "Reference" "#PWR07" - (at 73.66 55.88 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Value" "GND" - (at 73.66 54.61 0) - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Footprint" "" - (at 73.66 49.53 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Datasheet" "" - (at 73.66 49.53 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (property "Description" "" - (at 73.66 49.53 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "1" - (uuid "737b5bff-d8ae-4490-8d3b-eb90fc8b91f6") - ) - (instances - (project "numpad" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (reference "#PWR07") - (unit 1) - ) - ) - ) - ) - (sheet -<<<<<<< HEAD -======= - (at 241.3 93.98) - (size 36.83 20.32) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (color 0 0 0 0.0000) - ) - (uuid "0330dd45-2776-4667-9e47-eb2dbca2bb32") - (property "Sheetname" "RGB Lights" - (at 241.3 93.2684 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left bottom) - ) - ) - (property "Sheetfile" "untitled.kicad_sch" - (at 241.3 114.8846 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left top) - ) - ) - (pin "RGB IN" input - (at 241.3 111.76 180) - (uuid "2bc0b118-22f4-44df-9631-a4ce548bbecf") - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (instances - (project "68percent" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (page "3") - ) - ) - ) - ) - (sheet ->>>>>>> hardware-65percent - (at 217.17 33.02) - (size 55.88 34.925) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (stroke - (width 0.1524) - (type solid) - ) - (fill - (color 0 0 0 0.0000) - ) - (uuid "1d905906-6e74-4741-8b2e-53dc470a7c79") - (property "Sheetname" "Keymatrix" - (at 275.336 46.482 90) - (effects - (font - (size 1.27 1.27) - ) - (justify right bottom) - ) - ) - (property "Sheetfile" "matrixrot.kicad_sch" - (at 217.17 68.5296 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left top) - ) - ) - (pin "COL1" input - (at 232.41 33.02 90) - (uuid "43e65bc9-a87d-4907-a419-26aca47522e6") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL2" input - (at 234.95 33.02 90) - (uuid "ee114d14-efda-4c23-a2fd-ad5c20443e65") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL3" input - (at 237.49 33.02 90) - (uuid "551c4509-840b-4242-8621-1b2679f44448") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL4" input - (at 240.03 33.02 90) - (uuid "8b9952dd-5533-4690-b0bc-2691dd1c23fb") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL5" input - (at 242.57 33.02 90) - (uuid "17d4b3cb-22ca-41b4-a7e2-227c92ebd451") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "ROW1" input - (at 217.17 48.26 180) - (uuid "5ac2431a-3860-4059-9ee8-6e033207b38f") - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (pin "ROW2" input - (at 217.17 50.8 180) - (uuid "e119ba03-23bd-4f7f-b5dd-87b77128ed6e") - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (pin "ROW3" input - (at 217.17 53.34 180) - (uuid "5c4cef97-81c9-4b1a-ab1b-58e213523943") - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (pin "ROW4" input - (at 217.17 55.88 180) - (uuid "76a350b9-d4d1-4670-9452-164177e7325e") - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (pin "ROW5" input - (at 217.17 58.42 180) - (uuid "9c7cae5f-cbf2-4929-8a9f-2c1833828cc3") - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (pin "COL6" input - (at 245.11 33.02 90) - (uuid "e170e806-bf9d-4d28-94ec-af53935ce42a") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL7" input - (at 247.65 33.02 90) - (uuid "ce5339ca-1cd3-47bf-a8bd-40d1a8be3217") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL8" input - (at 250.19 33.02 90) - (uuid "aa5c787e-ea8e-4471-a48b-477b8665d0f9") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL9" input - (at 252.73 33.02 90) - (uuid "a1c7cd6c-9b58-4235-a987-a51e74e5b035") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL10" input - (at 255.27 33.02 90) - (uuid "2a3e96c4-a93c-4b28-8df7-014f6d2967a2") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL11" input - (at 257.81 33.02 90) - (uuid "5654bb0d-18cf-4321-a1de-6b0da32f992a") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL12" input - (at 260.35 33.02 90) - (uuid "265fd086-de26-4c7d-b10c-11aa8edeab5d") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL13" input - (at 262.89 33.02 90) - (uuid "7c01ef2a-f19e-4692-889a-24c89e336099") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL14" input - (at 265.43 33.02 90) - (uuid "7abc8f10-f8ea-4be5-bc41-59b74adfd401") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (pin "COL15" input - (at 267.97 33.02 90) - (uuid "e35bf945-cb45-49ec-bd0f-2d20e78818d9") - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - ) - (instances - (project "68percent" - (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" - (page "2") - ) - ) - ) - ) - (sheet_instances - (path "/" - (page "1") - ) - ) - (embedded_fonts no) -) +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid "a3d0d559-cac8-4859-ad0f-79ad0c1a1a82") + (paper "A4") + (lib_symbols + (symbol "PCM_4ms_Connector:Conn_01x04" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 0 -7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "4ms_Connector:Pins_1x04_2.54mm_TH_SWD" + (at 0 6.985 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at -3.175 -14.605 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at -2.54 -9.398 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at -2.54 -10.922 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "ki_keywords" "Conn_01x04" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x04_1_1" + (rectangle + (start -1.27 3.81) + (end 1.27 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Connector:Conn_01x06" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x06" + (at 0 -10.16 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "4ms_Connector:Pins_1x06_2.54mm_TH_SWD" + (at 0 -17.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at -1.905 -15.875 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at -2.54 -12.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0601FBV0T" + (at -1.905 -14.605 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "ki_keywords" "Conn_01x06" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_??x*mm* Connector*:*1x??x*mm* Pin?Header?Straight?1X* Pin?Header?Angled?1X* Socket?Strip?Straight?1X* Socket?Strip?Angled?1X*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x06_1_1" + (rectangle + (start -1.27 6.35) + (end 1.27 -8.89) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -7.493) + (end 0 -7.747) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -7.62 0) + (length 3.81) + (name "Pin_6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Diode:D_Generic" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "D" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "D_Generic" + (at 0 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Diode" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "diode" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO-???* *SingleDiode *_Diode_* *SingleDiode* D_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "D_Generic_0_1" + (polyline + (pts + (xy -1.27 1.27) (xy -1.27 -1.27) + ) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 1.27) (xy 1.27 -1.27) (xy -1.27 0) (xy 1.27 1.27) + ) + (stroke + (width 0.2032) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "D_Generic_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "K" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 2.54) + (name "A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:+3.3V" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 0 3.556 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "+3.3V_0_1" + (polyline + (pts + (xy -0.762 1.27) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 2.54) (xy 0.762 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "+3.3V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+3V3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:+5V" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 0 3.556 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "+5V_0_1" + (polyline + (pts + (xy -0.762 1.27) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 2.54) (xy 0.762 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (hide yes) + (name "+5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:GND" + (power) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (hide yes) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Power-symbol:GNDA" + (power) + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GNDA" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "(analog) ground power-flag symbol" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Power Flag Symbol" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GNDA_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GNDA_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (hide yes) + (name "GNDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_4ms_Regulator:LD1117-3.3V-SOT223" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "IC" + (at 2.54 -6.35 0) + (effects + (font + (size 1.143 1.143) + ) + (justify left bottom) + ) + ) + (property "Value" "LD1117-3.3V-SOT223" + (at -4.445 4.445 0) + (effects + (font + (size 1.143 1.143) + ) + (justify left bottom) + ) + ) + (property "Footprint" "4ms_Package_SOT:SOT223" + (at 0 6.985 0) + (effects + (font + (size 0.508 0.508) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" + (at 0 1.27 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Manufacturer" "STMicroelectronics" + (at 0 -9.525 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "LD1117S33CTR" + (at 0 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "ki_fp_filters" "*TO-252-2* *TO?252?2*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LD1117-3.3V-SOT223_1_0" + (rectangle + (start -5.08 3.81) + (end 5.08 -3.81) + (stroke + (width 0) + (type default) + ) + (fill + (type background) + ) + ) + (text "IN" + (at -3.2766 1.2446 0) + (effects + (font + (size 1.2192 1.2192) + ) + ) + ) + (text "ADJ" + (at -0.2794 -2.4384 0) + (effects + (font + (size 1.2192 1.2192) + ) + ) + ) + (text "OUT" + (at 1.8796 1.2446 0) + (effects + (font + (size 1.2192 1.2192) + ) + ) + ) + ) + (symbol "LD1117-3.3V-SOT223_1_1" + (pin input line + (at -10.16 1.27 0) + (length 5.08) + (name "IN" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (number "3" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + ) + (pin input line + (at 0 -6.35 90) + (length 2.54) + (name "ADJ" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (number "1" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + ) + (pin passive line + (at 10.16 1.27 180) + (length 5.08) + (name "OUT" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + (number "2" + (effects + (font + (size 1.016 1.016) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Capacitor_AKL:C_0805" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "C" + (at 0.635 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "C_0805" + (at 0.635 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 0.9652 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "cap capacitor ceramic chip mlcc smd 0805" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "C_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_0805_0_1" + (polyline + (pts + (xy -2.032 0.762) (xy 2.032 0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.032 -0.762) (xy 2.032 -0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "C_0805_0_2" + (polyline + (pts + (xy -2.54 -2.54) (xy -0.381 -0.381) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.508 -0.508) (xy -1.651 0.635) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -0.508 -0.508) (xy 0.635 -1.651) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.381 0.381) (xy 2.54 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 0.508) (xy -0.635 1.651) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 0.508) (xy 1.651 -0.635) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "C_0805_1_1" + (pin passive line + (at 0 3.81 270) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "C_0805_1_2" + (pin passive line + (at -2.54 -2.54 90) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 2.54 270) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Device_AKL:Ferrite_Bead" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "FB" + (at 0 4.572 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Ferrite_Bead" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 3.302 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Ferrite bead, Alternate KiCAD Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "ferrite bead emc" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "*Fuse*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Ferrite_Bead_0_1" + (rectangle + (start -2.54 1.016) + (end 2.54 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 2.54 0) (xy -2.54 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Ferrite_Bead_1_1" + (rectangle + (start -2.54 -0.508) + (end 2.54 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (pin passive line + (at -3.81 0 0) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Diode_TVS_AKL:PRTR5V0U2X" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "D" + (at 7.62 8.89 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PRTR5V0U2X" + (at 7.62 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Package_TO_SOT_SMD_AKL:SOT-143" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "diode TVS array PRTR5V0U2X" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PRTR5V0U2X_0_1" + (rectangle + (start -6.35 5.08) + (end 6.35 -5.08) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -3.81 2.54) (xy -3.81 3.81) (xy 3.81 3.81) (xy 3.81 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 2.54) (xy -3.175 1.27) (xy -4.445 1.27) (xy -3.81 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center -3.81 0) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -3.81 0) (xy -6.35 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 -1.27) (xy -3.81 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 -1.27) (xy -3.175 -2.54) (xy -4.445 -2.54) (xy -3.81 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy -3.81 -2.54) (xy -3.81 -3.81) (xy 3.81 -3.81) (xy 3.81 -2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.175 2.54) (xy -4.445 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.175 -1.27) (xy -4.445 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 3.81) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0 1.27) (xy 0 5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.27) (xy 0 -5.08) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.81 2.54) (xy 4.445 1.27) (xy 3.175 1.27) (xy 3.81 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 3.81 0) (xy 6.35 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 3.81 0) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 3.81 -1.27) (xy 3.81 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 3.81 -1.27) (xy 4.445 -2.54) (xy 3.175 -2.54) (xy 3.81 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 4.445 2.54) (xy 3.175 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 4.445 -1.27) (xy 3.175 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "PRTR5V0U2X_1_1" + (polyline + (pts + (xy -3.81 1.27) (xy -3.81 3.81) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 1.27) (xy 1.27 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -1.27) (xy 0 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 0 -3.81) + (radius 0.1778) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 1.27 1.27) (xy 1.27 0.762) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 -1.27) (xy -1.27 -1.27) (xy 0 1.27) (xy 1.27 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (pin passive line + (at -8.89 0 0) + (length 2.54) + (name "L1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 7.62 270) + (length 2.54) + (name "VP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -7.62 90) + (length 2.54) + (name "VN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 8.89 0 180) + (length 2.54) + (name "L2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_Resistor_AKL:R_0805" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "R" + (at 2.54 1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "R_0805" + (at 2.54 -1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 0 -11.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "R res resistor eu smd 0805" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "R_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "R_0805_0_1" + (rectangle + (start -1.016 2.54) + (end 1.016 -2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_0805_0_2" + (polyline + (pts + (xy -2.54 -2.54) (xy -1.524 -1.524) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 1.524) (xy 2.54 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.524 1.524) (xy 0.889 2.159) (xy -2.159 -0.889) (xy -0.889 -2.159) (xy 2.159 0.889) (xy 1.524 1.524) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_0805_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "R_0805_1_2" + (pin passive line + (at -2.54 -2.54 0) + (length 0) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 2.54 2.54 180) + (length 0) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_SL_Devices:Crystal_8MHz" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "Y" + (at 0 7.62 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Crystal_8MHz" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Crystal:Crystal_HC49-4H_Vertical" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 1.27 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "8Mz Crystal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "8Mz Crystal" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Crystal_8MHz_0_1" + (polyline + (pts + (xy -2.54 1.27) (xy -2.54 -1.27) + ) + (stroke + (width 1) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.54) + (end 1.27 -2.54) + (stroke + (width 0.5) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 2.54 1.27) (xy 2.54 -1.27) + ) + (stroke + (width 1) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Crystal_8MHz_1_1" + (pin passive line + (at -5.08 0 0) + (length 2.54) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2.54) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "PCM_SL_Devices:Push_Button" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "SW" + (at 0 6.35 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Push_Button" + (at 0 4.445 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Button_Switch_THT:SW_PUSH_6mm" + (at -0.127 -3.175 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Common 6mmx6mm Push Button" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "Switch" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Push_Button_0_1" + (polyline + (pts + (xy -3.175 0) (xy -1.778 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.905 1.27) (xy 1.905 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -1.27 0) + (radius 0.4579) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0 1.27) (xy 0 3.175) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 1.27 0) + (radius 0.4579) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 1.778 0) (xy 3.175 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Push_Button_1_1" + (pin passive line + (at -5.08 0 0) + (length 2) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1 1) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 2) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1 1) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "Type-C:HRO-TYPE-C-31-M-12" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "USB" + (at -5.08 16.51 0) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Value" "HRO-TYPE-C-31-M-12" + (at -10.16 -1.27 90) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "HRO-TYPE-C-31-M-12_0_1" + (rectangle + (start -11.43 15.24) + (end -8.89 -17.78) + (stroke + (width 0) + (type solid) + ) + (fill + (type background) + ) + ) + (rectangle + (start 0 -17.78) + (end -8.89 15.24) + (stroke + (width 0) + (type solid) + ) + (fill + (type background) + ) + ) + ) + (symbol "HRO-TYPE-C-31-M-12_1_1" + (pin input line + (at 2.54 13.97 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 11.43 180) + (length 2.54) + (name "VBUS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 8.89 180) + (length 2.54) + (name "SBU2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 6.35 180) + (length 2.54) + (name "CC1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 3.81 180) + (length 2.54) + (name "DN2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 1.27 180) + (length 2.54) + (name "DP1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -1.27 180) + (length 2.54) + (name "DN1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -3.81 180) + (length 2.54) + (name "DP2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -6.35 180) + (length 2.54) + (name "SBU1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -8.89 180) + (length 2.54) + (name "CC2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -11.43 180) + (length 2.54) + (name "VBUS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -13.97 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 2.54 -16.51 180) + (length 2.54) + (name "SHIELD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "power:GND" + (power) + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "global power" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "stm32f446ret6:STM32F446RET6" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -1.016 1.016 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "STM32F446RET6_0_1" + (rectangle + (start 0 0) + (end 43.18 -43.18) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "STM32F446RET6_1_1" + (text "STM32F466RE\n" + (at 21.59 -21.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin bidirectional line + (at 0 -2.54 180) + (length 2.54) + (name "VBAT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -5.08 180) + (length 2.54) + (name "PC13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -7.62 180) + (length 2.54) + (name "PC14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -10.16 180) + (length 2.54) + (name "PC15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -12.7 180) + (length 2.54) + (name "OSCIN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -15.24 180) + (length 2.54) + (name "OSCOUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -17.78 180) + (length 2.54) + (name "NRST" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -20.32 180) + (length 2.54) + (name "PC0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -22.86 180) + (length 2.54) + (name "PC1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -25.4 180) + (length 2.54) + (name "PC2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -27.94 180) + (length 2.54) + (name "PC3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -30.48 180) + (length 2.54) + (name "VSSA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -33.02 180) + (length 2.54) + (name "VDDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -35.56 180) + (length 2.54) + (name "PA0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -38.1 180) + (length 2.54) + (name "PA1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 0 -40.64 180) + (length 2.54) + (name "PA2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 2.54 0 90) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "64" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 2.54 -43.18 270) + (length 2.54) + (name "PA3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 5.08 0 90) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "63" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 5.08 -43.18 270) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 7.62 0 90) + (length 2.54) + (name "PB9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "62" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 7.62 -43.18 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 10.16 0 90) + (length 2.54) + (name "PB8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "61" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 10.16 -43.18 270) + (length 2.54) + (name "PA4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 12.7 0 90) + (length 2.54) + (name "BOOT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "60" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 12.7 -43.18 270) + (length 2.54) + (name "PA5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 0 90) + (length 2.54) + (name "PB7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "59" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -43.18 270) + (length 2.54) + (name "PA6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 0 90) + (length 2.54) + (name "PB6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "58" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 17.78 -43.18 270) + (length 2.54) + (name "PA7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 20.32 0 90) + (length 2.54) + (name "PB5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "57" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 20.32 -43.18 270) + (length 2.54) + (name "PC4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 0 90) + (length 2.54) + (name "PB4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "56" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -43.18 270) + (length 2.54) + (name "PC5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 25.4 0 90) + (length 2.54) + (name "PB3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "55" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 25.4 -43.18 270) + (length 2.54) + (name "PB0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 0 90) + (length 2.54) + (name "PD2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "54" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 27.94 -43.18 270) + (length 2.54) + (name "PB1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 30.48 0 90) + (length 2.54) + (name "PC12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "53" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 30.48 -43.18 270) + (length 2.54) + (name "PB2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 33.02 0 90) + (length 2.54) + (name "PC11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "52" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 33.02 -43.18 270) + (length 2.54) + (name "PB10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "29" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 35.56 0 90) + (length 2.54) + (name "PA10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "51" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 35.56 -43.18 270) + (length 2.54) + (name "VCAP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "30" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 38.1 0 90) + (length 2.54) + (name "PA15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "50" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 38.1 -43.18 270) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "31" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 40.64 0 90) + (length 2.54) + (name "PA14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "49" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 40.64 -43.18 270) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "32" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -2.54 0) + (length 2.54) + (name "VDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "48" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -5.08 0) + (length 2.54) + (name "VSS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "47" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -7.62 0) + (length 2.54) + (name "PA13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "46" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -10.16 0) + (length 2.54) + (name "PA12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "45" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -12.7 0) + (length 2.54) + (name "PA11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "44" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -15.24 0) + (length 2.54) + (name "PA10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "43" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -17.78 0) + (length 2.54) + (name "PA9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "42" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -20.32 0) + (length 2.54) + (name "PA8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "41" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -22.86 0) + (length 2.54) + (name "PC9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "40" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -25.4 0) + (length 2.54) + (name "PC8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "39" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -27.94 0) + (length 2.54) + (name "PC7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -30.48 0) + (length 2.54) + (name "PC6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -33.02 0) + (length 2.54) + (name "PB15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -35.56 0) + (length 2.54) + (name "PB14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -38.1 0) + (length 2.54) + (name "PB13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 43.18 -40.64 0) + (length 2.54) + (name "PB12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (text "MCU" + (exclude_from_sim no) + (at 200.152 81.534 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "053570bf-16e9-44c8-a82a-684c6f7508cb") + ) + (text "+ \nRGB MATRIX" + (exclude_from_sim no) + (at 243.84 79.756 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "12748ec4-00f5-490e-aa52-a210910b5263") + ) + (text "DECOUPLING CAPS\n" + (exclude_from_sim no) + (at 47.752 175.26 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "18ba2e75-ba3b-4501-b190-9ad5b6ed2853") + ) + (text "PORT CONNECTIONS\n" + (exclude_from_sim no) + (at 53.086 130.048 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "3ad0362e-3277-4bf5-a873-b6a1597c7959") + ) + (text "POWER SOURCE\n" + (exclude_from_sim no) + (at 137.668 35.306 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "3d192bed-52cb-48b6-8954-5b4db22d1c09") + ) + (text "USB RECEPTACLE" + (exclude_from_sim no) + (at 75.692 65.532 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "40f0ab9d-8619-4019-90bb-2b72acfba98c") + ) + (text "KEYBOARD MATRIX\n" + (exclude_from_sim no) + (at 243.84 73.66 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "77d3e340-9f37-45b6-9c2f-7dd12faeb64d") + ) + (text "A modular keyboard system designed for flexible orientation and interchangeable layouts.\nThis schematic represents the application of the design as a numpad module, \nwhich can operate as a standalone numeric keypad or as an extension to the main keyboard." + (exclude_from_sim no) + (at 178.816 170.942 0) + (effects + (font + (size 1.27 1.27) + (thickness 0.1588) + ) + (justify left) + ) + (uuid "b2e16b73-db9e-48d9-887a-7511975e0f40") + ) + (text "Modularly Simple KeyBoard preV1" + (exclude_from_sim no) + (at 219.202 189.738 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "c3c048a7-a63f-433a-824a-8996e749bf01") + ) + (text "JTAG" + (exclude_from_sim no) + (at 240.792 151.638 0) + (effects + (font + (size 2.54 2.54) + (thickness 0.508) + (bold yes) + ) + ) + (uuid "e15c1fc6-d6f9-479e-9240-8e7c364ac79d") + ) + (junction + (at 48.26 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "0f6f91a4-a934-463b-b122-7f23512f1734") + ) + (junction + (at 43.18 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "1a8f3bff-3750-4093-91f3-3af3450de74d") + ) + (junction + (at 43.18 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "1c37534d-40dd-4272-bd53-ea9d2e019ab1") + ) + (junction + (at 50.8 105.41) + (diameter 0) + (color 0 0 0 0) + (uuid "220a4cc1-72cb-45c0-abd2-dfa0ee539eae") + ) + (junction + (at 43.18 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "27b11cc7-491b-4d42-b423-76ef6b46e081") + ) + (junction + (at 31.75 160.02) + (diameter 0) + (color 0 0 0 0) + (uuid "2e11f1b5-4d79-4b26-9fa1-7d79bbe862ed") + ) + (junction + (at 49.53 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "2e31501e-2d51-448f-8454-3f8d0a2f5892") + ) + (junction + (at 190.5 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "336c3f51-826e-4afd-8da1-62a8bbf93823") + ) + (junction + (at 134.62 73.66) + (diameter 0) + (color 0 0 0 0) + (uuid "34992661-1d26-4f61-b9fe-4fb32e3c01df") + ) + (junction + (at 92.71 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "36c7150f-cb01-4b6f-a11a-522367414f73") + ) + (junction + (at 52.07 113.03) + (diameter 0) + (color 0 0 0 0) + (uuid "4a532823-9646-4711-ac88-38674fa4c05e") + ) + (junction + (at 165.1 34.29) + (diameter 0) + (color 0 0 0 0) + (uuid "4dbaf7a2-8834-472e-8aaf-4b7c652eab6f") + ) + (junction + (at 50.8 45.72) + (diameter 0) + (color 0 0 0 0) + (uuid "54498a32-302d-4f99-936f-a4f208527e0f") + ) + (junction + (at 113.03 106.68) + (diameter 0) + (color 0 0 0 0) + (uuid "70e9c72f-b778-4c87-8e4f-7bafd4302b9a") + ) + (junction + (at 43.18 160.02) + (diameter 0) + (color 0 0 0 0) + (uuid "7764b747-881c-48f7-8d2e-86724ffa1988") + ) + (junction + (at 113.03 116.84) + (diameter 0) + (color 0 0 0 0) + (uuid "7f7962f1-ccd8-4cd9-a566-cbcab57cecde") + ) + (junction + (at 54.61 160.02) + (diameter 0) + (color 0 0 0 0) + (uuid "8a301476-bb2b-40a8-9dab-4ee9500ebd42") + ) + (junction + (at 54.61 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "95f858c6-590e-4b07-b00e-14b33fe3654b") + ) + (junction + (at 127 100.33) + (diameter 0) + (color 0 0 0 0) + (uuid "a49bc808-02e8-4817-b90a-a4a1b75244ee") + ) + (junction + (at 45.72 30.48) + (diameter 0) + (color 0 0 0 0) + (uuid "b229d9ea-1ae2-4434-99c1-1e4df683342f") + ) + (junction + (at 52.07 97.79) + (diameter 0) + (color 0 0 0 0) + (uuid "b7910006-9150-4e29-bab8-e9d77307b10d") + ) + (junction + (at 177.8 41.91) + (diameter 0) + (color 0 0 0 0) + (uuid "ba78025a-63ef-4867-8d31-7e94c2ea70e9") + ) + (junction + (at 116.84 87.63) + (diameter 0) + (color 0 0 0 0) + (uuid "be122d9c-1b65-4ca9-a3ce-31a3314b3426") + ) + (junction + (at 85.09 38.1) + (diameter 0) + (color 0 0 0 0) + (uuid "caadfcbb-ef16-4d20-b0af-dafe81dc7050") + ) + (junction + (at 119.38 106.68) + (diameter 0) + (color 0 0 0 0) + (uuid "cc90e23d-f590-4e27-a42c-5d487fc572f1") + ) + (junction + (at 31.75 152.4) + (diameter 0) + (color 0 0 0 0) + (uuid "e0b41c54-35b8-4d1e-9f2a-6ccd130dde8b") + ) + (junction + (at 116.84 100.33) + (diameter 0) + (color 0 0 0 0) + (uuid "e42f4b43-15d9-40ac-bf9a-1258524dc65c") + ) + (junction + (at 85.09 55.88) + (diameter 0) + (color 0 0 0 0) + (uuid "e73a272a-f3b1-429e-a4ac-632efe248e69") + ) + (junction + (at 50.8 90.17) + (diameter 0) + (color 0 0 0 0) + (uuid "ed82e976-1bb9-4a58-baea-21c0632ce514") + ) + (no_connect + (at 144.78 116.84) + (uuid "0b50b0cb-735c-4720-9cfc-7d257132c35a") + ) + (no_connect + (at 152.4 88.9) + (uuid "300a4c2c-3f4b-4f25-b5db-14f5f80aecbb") + ) + (no_connect + (at 144.78 111.76) + (uuid "599dd13b-d9e8-4d78-aefb-33d0ced626e6") + ) + (no_connect + (at 187.96 129.54) + (uuid "8567c420-7e62-4e40-ac4b-381f2ec0c9fd") + ) + (no_connect + (at 40.64 33.02) + (uuid "8ec52c42-5cb3-496e-9d92-e27ae929aa15") + ) + (no_connect + (at 154.94 88.9) + (uuid "915e6404-a87d-4be9-b5c0-aadfa7f173eb") + ) + (no_connect + (at 144.78 99.06) + (uuid "a89c65fa-d3ae-4802-af43-002e5ab52a3c") + ) + (no_connect + (at 144.78 109.22) + (uuid "b4ec3779-e4d6-4643-9c51-21e093b6c010") + ) + (no_connect + (at 40.64 48.26) + (uuid "c93053ea-a8d0-4bab-a6e3-5fe3cb7ab029") + ) + (no_connect + (at 144.78 96.52) + (uuid "ca6a7a10-4dfe-4b9a-b456-324c7de09245") + ) + (no_connect + (at 144.78 114.3) + (uuid "dc302dbd-e366-453c-b672-c9c2f0309ad6") + ) + (no_connect + (at 144.78 93.98) + (uuid "dd6f19b1-af0f-4ed5-b78c-06c2a72c0ec4") + ) + (wire + (pts + (xy 31.75 160.02) (xy 31.75 163.83) + ) + (stroke + (width 0) + (type default) + ) + (uuid "00fd3c01-2e41-4555-8a03-1e94fccb5d51") + ) + (wire + (pts + (xy 196.85 31.75) (xy 196.85 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01906518-da0c-47cd-953b-26f72e84a7ca") + ) + (wire + (pts + (xy 67.31 55.88) (xy 85.09 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01989c17-3e28-4f4a-8adc-509ba7411462") + ) + (wire + (pts +<<<<<<< HEAD +======= + (xy 237.49 111.76) (xy 237.49 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "02f26d5e-f208-4852-831f-33981d6c61c3") + ) + (wire + (pts +>>>>>>> hardware-65percent + (xy 43.18 58.42) (xy 49.53 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0335a907-0ede-4ebd-ac54-adf1c3500f54") + ) + (wire + (pts + (xy 96.52 116.84) (xy 113.03 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "03ea680e-440a-45dd-9b7a-0498259e1eb8") + ) + (wire + (pts + (xy 144.78 91.44) (xy 134.62 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "04a5328c-4588-468b-94fa-c480b7dfbab2") + ) + (wire + (pts + (xy 50.8 85.09) (xy 50.8 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "05620071-1289-465a-bf88-b0bc2c06bf19") + ) + (wire + (pts + (xy 167.64 34.29) (xy 165.1 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0706f41a-efd4-4eae-9522-0d25101ad0d0") + ) + (wire + (pts + (xy 105.41 87.63) (xy 116.84 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0ae95369-9eb5-4fcf-9779-42360b40e70b") + ) + (wire + (pts + (xy 123.19 129.54) (xy 144.78 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0bdf774e-a5a9-4aa3-84c3-cb36cab53577") + ) + (wire + (pts +<<<<<<< HEAD + (xy 162.56 132.08) (xy 162.56 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0c365f9b-ec33-45c0-bcaa-f753e4bca3a2") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 147.32 77.47) (xy 147.32 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0eec1321-cba2-499e-a932-bdf00c658069") + ) + (wire + (pts + (xy 52.07 97.79) (xy 68.58 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "0f54820b-4967-4434-98bb-4a1954827aa5") + ) + (wire + (pts + (xy 187.96 93.98) (xy 201.93 93.98) + ) + (stroke + (width 0) + (type default) + ) + (uuid "10d72e49-b58e-41ec-acff-fe378d1c1a07") + ) + (wire + (pts + (xy 240.03 26.67) (xy 240.03 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "12439fa1-108d-40ec-9e24-05c5539bdcbe") + ) + (wire + (pts + (xy 255.27 26.67) (xy 255.27 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "15175de2-159b-401b-be2e-f5f1f5d3d293") + ) + (wire + (pts + (xy 187.96 96.52) (xy 201.93 96.52) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1a18d475-875b-48a3-8b99-1398b1e83c91") + ) + (wire + (pts + (xy 165.1 76.2) (xy 165.1 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1ad0f778-1242-4788-b786-3053f5269c6e") + ) + (wire + (pts + (xy 116.84 87.63) (xy 127 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1baeb221-1013-40d6-aead-2b046792f698") + ) + (wire + (pts + (xy 209.55 50.8) (xy 217.17 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f22f88b-f3f4-467e-9040-cec3d802cf54") + ) + (wire + (pts + (xy 109.22 73.66) (xy 120.65 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1f3decf6-56bc-4987-a07d-5fc2cfdbf99e") + ) + (wire + (pts + (xy 242.57 26.67) (xy 242.57 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "208a1faa-bb1b-433e-94ad-29c8d738354c") + ) + (wire + (pts + (xy 229.87 134.62) (xy 241.3 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "20dc9b34-59f2-4355-be2f-69c705971898") + ) + (wire + (pts + (xy 209.55 58.42) (xy 217.17 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2126d0b3-0942-46ed-a887-338115d4e944") + ) + (wire + (pts + (xy 43.18 55.88) (xy 40.64 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "247988be-f1ec-49ec-a333-41688f2e4fc0") + ) + (wire + (pts + (xy 49.53 92.71) (xy 35.56 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "26f83c9f-b790-4cb2-af83-2aa9c9e51c39") + ) + (wire + (pts + (xy 43.18 160.02) (xy 54.61 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "289e2bd6-73d5-4949-82a5-b8596ab06387") + ) + (wire + (pts + (xy 127 101.6) (xy 144.78 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "292104ca-3d20-4356-b182-a13b0a9176ce") + ) + (wire + (pts + (xy 167.64 132.08) (xy 167.64 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2a4eeff8-ed6e-4975-b712-d0bc61f259cd") + ) + (wire + (pts + (xy 149.86 77.47) (xy 149.86 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2b6cdadb-6bbb-47ce-8dde-457d59e5c2a7") + ) + (wire + (pts + (xy 116.84 100.33) (xy 116.84 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2fddf5e5-afc9-4ff0-a699-6788de5db800") + ) + (wire + (pts + (xy 134.62 91.44) (xy 134.62 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "30979165-d449-4e2b-a93f-0991abdb0465") + ) + (wire + (pts + (xy 31.75 149.86) (xy 31.75 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "330d5ff8-84d8-41a5-bfee-45da384c7ed9") + ) + (wire + (pts + (xy 109.22 73.66) (xy 109.22 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "34cb745e-85a4-4f52-8881-0f0a8d4931ef") + ) + (wire + (pts + (xy 77.47 46.99) (xy 73.66 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37b24e3e-6cbc-4b14-ade0-7b79f8d12f02") + ) + (wire + (pts + (xy 53.34 95.25) (xy 68.58 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "37f03eff-586f-4094-8855-542e564609e6") + ) + (wire + (pts + (xy 157.48 132.08) (xy 157.48 151.13) + ) + (stroke + (width 0) + (type default) + ) + (uuid "38cae9ee-d843-4f35-a584-9783ea88b63c") + ) + (wire + (pts + (xy 187.96 104.14) (xy 212.09 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a7288aa-4ed3-4056-b2cb-8fef7ffd7fac") + ) + (wire + (pts + (xy 127 100.33) (xy 127 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f4651a7-686d-42ea-9698-5838e5943557") + ) + (wire + (pts + (xy 185.42 143.51) (xy 185.42 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3f4f5601-5cb4-4b09-bb9e-970ca1e3d02b") + ) + (wire + (pts + (xy 152.4 132.08) (xy 152.4 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44bc8c63-d89a-46e4-9d00-a5b9de75d756") + ) + (wire + (pts + (xy 172.72 132.08) (xy 172.72 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "450a7d1b-d4b5-47d0-b75f-49cb00b277c1") + ) + (wire + (pts + (xy 50.8 45.72) (xy 67.31 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4570fa46-daac-46da-b206-5998ba573467") + ) + (wire + (pts + (xy 35.56 105.41) (xy 50.8 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "458dba6f-06fc-4619-a060-0ecf78dcf85a") + ) + (wire + (pts + (xy 53.34 107.95) (xy 68.58 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "465af43c-4e85-4f93-bb3b-2e57bac120b2") + ) + (wire + (pts + (xy 73.66 46.99) (xy 73.66 49.53) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4706908c-636d-444d-b2c0-039cdfb74b4d") + ) + (wire + (pts +<<<<<<< HEAD + (xy 175.26 63.5) (xy 175.26 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "477066b8-b318-4156-a17c-fbe9dd48a160") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 248.92 129.54) (xy 248.92 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4874b85c-ca6a-43a9-b3a5-8f906291c1f7") + ) + (wire + (pts + (xy 52.07 118.11) (xy 52.07 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4cca7c1a-d12a-4d5b-8dd4-4401bb342c6d") + ) + (wire + (pts +<<<<<<< HEAD + (xy 154.94 132.08) (xy 154.94 147.32) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d52ae93-a4ca-4383-bb89-91e9056bf0db") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 119.38 129.54) (xy 113.03 129.54) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f47a244-1f71-49eb-9094-aa6e152b6833") + ) + (wire + (pts + (xy 182.88 132.08) (xy 182.88 143.51) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4f536248-7a57-4327-aa34-727e9506252f") + ) + (wire + (pts + (xy 58.42 35.56) (xy 58.42 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "529cd2fd-f4b4-4dfa-88ae-b39a282450b0") + ) + (wire + (pts + (xy 119.38 106.68) (xy 144.78 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "52a98227-b763-4347-af19-3768ac500778") + ) + (wire + (pts + (xy 177.8 41.91) (xy 190.5 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "53e1b29f-1b7c-4a7f-8b33-b9b30a2397bc") + ) + (wire + (pts + (xy 223.52 137.16) (xy 251.46 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5532e8ef-0bc4-4de1-9a6f-fd84a38c396c") + ) + (wire + (pts + (xy 35.56 97.79) (xy 52.07 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "562315e5-2659-4b64-b6a4-896f84956ea9") + ) + (wire + (pts + (xy 53.34 110.49) (xy 68.58 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "57440857-b976-423f-9e7a-b950ad2438d3") + ) + (wire + (pts + (xy 116.84 87.63) (xy 116.84 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "58da7475-15d0-496c-9708-fa29ececcc6e") + ) + (wire + (pts + (xy 248.92 132.08) (xy 251.46 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "59e201b2-0a7c-4e35-8471-aae12d903450") + ) + (wire + (pts + (xy 50.8 90.17) (xy 50.8 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a0c8ca1-e08f-43f7-8d31-1375895859ca") + ) + (wire + (pts + (xy 209.55 55.88) (xy 217.17 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5a8c3d76-ece7-4cea-afe6-fca17951a559") + ) + (wire + (pts + (xy 40.64 58.42) (xy 43.18 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5c2c9eff-618d-442a-9d7e-b706135f2805") + ) + (wire + (pts + (xy 187.96 34.29) (xy 190.5 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5ed0c7ae-0554-43d0-8aff-c75229568034") + ) + (wire + (pts + (xy 175.26 132.08) (xy 175.26 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "5f7ef538-4e1c-4f24-94de-8dc55a60a5c9") + ) + (wire + (pts + (xy 229.87 142.24) (xy 241.3 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "60d998c9-4be4-4529-813d-61347020e312") + ) + (wire + (pts + (xy 165.1 41.91) (xy 177.8 41.91) + ) + (stroke + (width 0) + (type default) + ) + (uuid "627375d7-97c0-43e6-ab57-2fc3c3266f3b") + ) + (wire + (pts + (xy 158.75 34.29) (xy 158.75 31.75) + ) + (stroke + (width 0) + (type default) + ) + (uuid "643c8654-a64f-4cd4-848c-c244b8b851a3") + ) + (wire + (pts + (xy 187.96 106.68) (xy 212.09 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "663d7edc-35d4-4678-b5b2-956b0ead572f") + ) + (wire + (pts + (xy 43.18 58.42) (xy 43.18 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "68110c4c-99d7-4030-9e98-1e043ba3c876") + ) + (wire + (pts + (xy 76.2 30.48) (xy 92.71 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "684cca3f-fdef-4580-a559-ec92864a877d") + ) + (wire + (pts + (xy 35.56 110.49) (xy 49.53 110.49) + ) + (stroke + (width 0) + (type default) + ) + (uuid "693f3dbe-4e73-43c7-8fcf-616ba911db6e") + ) + (wire + (pts + (xy 162.56 76.2) (xy 162.56 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6a875d99-df08-4727-89b1-a7f7f4e8c7a3") + ) + (wire + (pts + (xy 187.96 111.76) (xy 203.2 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b5d728e-13d1-41c6-83a9-b7d155de526e") + ) + (wire + (pts + (xy 53.34 92.71) (xy 68.58 92.71) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6d9e585f-cbc3-414c-9299-2e5b280c073d") + ) + (wire + (pts + (xy 187.96 124.46) (xy 203.2 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6da5d636-af4e-43c8-9f36-e459d33d1bbe") + ) + (wire + (pts + (xy 134.62 68.58) (xy 134.62 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6f04dc55-ef64-4bc9-b0d0-4c627f116dbd") + ) + (wire + (pts + (xy 185.42 73.66) (xy 185.42 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71259b82-bdf7-498b-b24b-83577cb15492") + ) + (wire + (pts + (xy 50.8 105.41) (xy 68.58 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "715c013f-940e-41c2-bce8-d311766decb6") + ) + (wire + (pts + (xy 260.35 26.67) (xy 260.35 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "75f76f62-7624-4a4c-93a9-a039578267af") + ) + (wire + (pts + (xy 40.64 30.48) (xy 45.72 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "776243c5-1d03-4ada-a03f-0ef931893237") + ) + (wire + (pts + (xy 40.64 38.1) (xy 48.26 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79888534-70ed-452a-bd5b-d1029281da10") + ) + (wire + (pts + (xy 40.64 50.8) (xy 49.53 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7ab65dfe-09b0-4f17-b223-a9311f4784d6") + ) + (wire + (pts + (xy 248.92 134.62) (xy 251.46 134.62) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7bcbc1dd-858c-46e1-b9f4-207586227937") + ) + (wire + (pts + (xy 113.03 107.95) (xy 113.03 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c581021-24c9-4b69-b987-c6220ecfd605") + ) + (wire + (pts + (xy 128.27 73.66) (xy 134.62 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7c9a429e-b501-454a-a798-72a9debc42e7") + ) + (wire + (pts + (xy 267.97 26.67) (xy 267.97 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d4b4f9e-4b6f-4ba8-aebd-0f661a376cfe") + ) + (wire + (pts + (xy 234.95 26.67) (xy 234.95 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7e691013-eb16-4449-ad01-df5d08179de9") + ) + (wire + (pts + (xy 48.26 38.1) (xy 85.09 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "81fbcf92-dd81-4e13-8596-b53d8260ea0f") + ) + (wire + (pts + (xy 113.03 129.54) (xy 113.03 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82863544-c8b6-4a81-ba0e-9ed9dc1f7811") + ) + (wire + (pts + (xy 67.31 45.72) (xy 67.31 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82bd2989-2318-4253-b209-267092851cba") + ) + (wire + (pts + (xy 265.43 26.67) (xy 265.43 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83b82508-5fe8-4054-9a00-42e24d33b288") + ) + (wire + (pts + (xy 209.55 48.26) (xy 217.17 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "83d38e48-b8cc-4280-90de-8336d999cc9e") + ) + (wire + (pts + (xy 106.68 172.72) (xy 106.68 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8427d372-153a-4165-9c6b-d703ad055792") + ) + (wire + (pts + (xy 166.37 60.96) (xy 157.48 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8527098b-4400-4446-804d-ab014655552c") + ) + (wire + (pts + (xy 54.61 152.4) (xy 66.04 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86e8be86-7a52-450c-820b-e68995200152") + ) + (wire + (pts + (xy 247.65 26.67) (xy 247.65 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "878877a1-6590-498b-aa1a-efc92c6e27f6") + ) + (wire + (pts + (xy 104.14 119.38) (xy 144.78 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8a407c97-de84-4759-89bb-c47ac175cf08") + ) + (wire + (pts + (xy 85.09 38.1) (xy 101.6 38.1) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8aba9e24-a5f7-40f7-bdc4-fc865abfdccc") + ) + (wire + (pts + (xy 167.64 76.2) (xy 167.64 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8cd8c252-9640-463d-9c7b-97b8af4a7394") + ) + (wire + (pts + (xy 40.64 27.94) (xy 43.18 27.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8e50dffa-98dd-40ff-8994-cbeafa4b2bfb") + ) + (wire + (pts + (xy 113.03 106.68) (xy 119.38 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "933a4130-c00a-4b4c-bb79-83312d882419") + ) + (wire + (pts + (xy 229.87 144.78) (xy 241.3 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "943af323-76f9-4011-a61b-cc2b7fef77fa") + ) + (wire + (pts + (xy 115.57 170.18) (xy 116.84 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "948b4f65-90ec-474c-b04e-e973de6a4047") + ) + (wire + (pts + (xy 40.64 53.34) (xy 45.72 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "95776100-1955-404b-b7f1-a1a73101730f") + ) + (wire + (pts + (xy 85.09 55.88) (xy 101.6 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9643bb50-d437-43a0-aaa9-6fa922f60138") + ) + (wire + (pts + (xy 123.19 127) (xy 144.78 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9652a302-9965-4e41-b90f-798d847304b3") + ) + (wire + (pts + (xy 106.68 170.18) (xy 107.95 170.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "96f9c5ff-92d3-4bd3-969f-590f0a760f06") + ) + (wire + (pts + (xy 149.86 132.08) (xy 149.86 144.145) + ) + (stroke + (width 0) + (type default) + ) + (uuid "98825335-58d1-4bec-bc37-1cfbd1d8c67c") + ) + (wire + (pts + (xy 52.07 113.03) (xy 68.58 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9889944f-b029-470d-843c-31d2be8c43d0") + ) + (wire + (pts + (xy 187.96 109.22) (xy 203.2 109.22) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a287aeb-1c97-40f2-abaa-fe8a0ec5fddb") + ) + (wire + (pts + (xy 160.02 76.2) (xy 160.02 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9add52ab-e73e-4d91-879f-7357f15f15d3") + ) + (wire + (pts + (xy 172.72 63.5) (xy 172.72 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b57c0f7-023c-4b9f-a444-542b154e3f47") + ) + (wire + (pts + (xy 229.87 139.7) (xy 241.3 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b7c240b-3b58-4aaa-b132-84cfd139293f") + ) + (wire + (pts + (xy 252.73 26.67) (xy 252.73 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9b941760-aa41-4bda-a070-83a5e8da6461") + ) + (wire + (pts + (xy 40.64 40.64) (xy 50.8 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9c5a75e0-d66a-4e19-8139-747b5a4c2a66") + ) + (wire + (pts + (xy 248.92 144.78) (xy 251.46 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9d0f7be0-d24b-47fe-8d5f-201679ba63fd") + ) + (wire + (pts + (xy 50.8 90.17) (xy 68.58 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9f20c051-d63d-4d45-a81c-3efc727b3379") + ) + (wire + (pts + (xy 35.56 90.17) (xy 50.8 90.17) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a0ef95a9-8bea-46c6-ba6a-d6f9f64cea61") + ) + (wire + (pts + (xy 157.48 71.12) (xy 157.48 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a21450c8-f3ae-43eb-a9d5-11adce89c1f1") + ) + (wire + (pts +<<<<<<< HEAD + (xy 160.02 132.08) (xy 160.02 151.13) +======= + (xy 180.34 74.93) (xy 180.34 88.9) +>>>>>>> hardware-65percent + ) + (stroke + (width 0) + (type default) + ) +<<<<<<< HEAD + (uuid "a53cb74b-b460-44ad-b050-031ab179966a") +======= + (uuid "a57d5cf2-2916-462d-9d02-f6005455b75d") +>>>>>>> hardware-65percent + ) + (wire + (pts + (xy 170.18 74.93) (xy 170.18 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a59b5754-fe44-4ded-b72a-5d3f170d4dd5") + ) + (wire + (pts + (xy 187.96 127) (xy 203.2 127) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a7e4dd91-34c4-479b-bf4a-fbeb9b3e0947") + ) + (wire + (pts + (xy 190.5 34.29) (xy 196.85 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a840155e-eb43-4336-9b9f-4d7043121a95") + ) + (wire + (pts + (xy 232.41 26.67) (xy 232.41 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a956dacc-30a3-4321-8f8e-7e65a6d33b19") + ) + (wire + (pts + (xy 31.75 152.4) (xy 43.18 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "af32b913-3839-4d06-89e1-085f5a905fbf") + ) + (wire + (pts + (xy 43.18 58.42) (xy 43.18 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b0616a21-133c-4dcc-b84e-c6a97f8f594f") + ) + (wire + (pts + (xy 43.18 27.94) (xy 43.18 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b1529ae2-4d50-41f5-8da3-ac204b86c297") + ) + (wire + (pts + (xy 49.53 95.25) (xy 35.56 95.25) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b2092ad6-1a2a-415f-a85c-1db6b6623de2") + ) + (wire + (pts + (xy 209.55 53.34) (xy 217.17 53.34) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b3ad80bf-f20b-41a4-b801-5df4f1839f82") + ) + (wire + (pts + (xy 96.52 116.84) (xy 96.52 118.11) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b68451e4-a557-4542-aa0c-d3c0a7b38b1c") + ) + (wire + (pts +<<<<<<< HEAD +======= + (xy 175.26 63.5) (xy 175.26 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b82c56aa-688c-40b5-b8b5-ff1b4a6b304f") + ) + (wire + (pts +>>>>>>> hardware-65percent + (xy 116.84 104.14) (xy 144.78 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b933b00a-6781-4161-9b4a-e03ca083faeb") + ) + (wire + (pts + (xy 222.25 99.06) (xy 231.14 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b94c4dc7-fb5a-4e0f-864e-aa71873f2c89") + ) + (wire + (pts + (xy 45.72 53.34) (xy 45.72 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b9c450f2-9bfa-43df-bfd2-eb3d2d426964") + ) + (wire + (pts + (xy 223.52 138.43) (xy 223.52 137.16) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf7d254c-a01a-4771-88b7-b40f8c2c8707") + ) + (wire + (pts + (xy 35.56 107.95) (xy 49.53 107.95) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf84be26-9ac8-4f7b-a934-3a573d1ac936") + ) + (wire + (pts + (xy 40.64 35.56) (xy 58.42 35.56) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf86c109-adc6-49de-bf52-8b099c3cabb4") + ) + (wire + (pts + (xy 49.53 58.42) (xy 58.42 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c0f477ad-c51b-46bd-8eea-028a65e67899") + ) + (wire + (pts + (xy 170.18 132.08) (xy 170.18 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c203776c-c323-46c4-b1d3-9d1c4656c4c4") + ) + (wire + (pts + (xy 237.49 26.67) (xy 237.49 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c238b4b9-d86f-41a6-9939-71a20ec018bd") + ) + (wire + (pts + (xy 68.58 30.48) (xy 45.72 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c42044bb-7b3d-4c02-bb19-c9ee4d2152db") + ) + (wire + (pts +<<<<<<< HEAD + (xy 180.34 74.93) (xy 180.34 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c666df65-3b72-4b72-bdec-cf6c8e58fe74") + ) + (wire + (pts +======= +>>>>>>> hardware-65percent + (xy 182.88 74.93) (xy 182.88 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c6c8c491-ec3c-4aa7-8018-934ea3784c23") + ) + (wire + (pts + (xy 113.03 116.84) (xy 113.03 115.57) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c8e765e4-9b92-4fad-9653-72b8c27944f7") + ) + (wire + (pts + (xy 165.1 34.29) (xy 158.75 34.29) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c93aa1a2-83c7-4424-8656-57a32df2a0e9") + ) + (wire + (pts + (xy 123.19 124.46) (xy 144.78 124.46) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb03fe9f-8875-4540-a775-8ca501103200") + ) + (wire + (pts + (xy 187.96 119.38) (xy 203.2 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cb8969fd-f261-4ea2-bfef-da594ec8c031") + ) + (wire + (pts + (xy 187.96 116.84) (xy 203.2 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cd5bcb8a-8fda-4879-96a4-e34d2e280aab") + ) + (wire + (pts + (xy 97.79 106.68) (xy 113.03 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d3111b08-e3ad-431d-a491-9fe01dc68bcf") + ) + (wire + (pts + (xy 127 90.17) (xy 127 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d363afc7-a389-428b-a860-10b1cbcfd8af") + ) + (wire + (pts + (xy 116.84 170.18) (xy 116.84 172.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d6c4dd86-7842-4e20-b395-8022679f2bfd") + ) + (wire + (pts + (xy 119.38 121.92) (xy 144.78 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d93267f2-2d03-4b7b-8e29-8f1c6cdf3db0") + ) + (wire + (pts + (xy 92.71 29.21) (xy 92.71 30.48) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dae93426-f60f-49f3-916b-5d850a0fa483") + ) + (wire + (pts + (xy 250.19 26.67) (xy 250.19 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dd67b9d3-dcb4-4714-a1f8-1df5f6a7ccfa") + ) + (wire + (pts + (xy 50.8 45.72) (xy 50.8 40.64) + ) + (stroke + (width 0) + (type default) + ) + (uuid "df9f4e8e-ee35-4c74-a8d7-4433c5a1304b") + ) + (wire + (pts + (xy 43.18 152.4) (xy 54.61 152.4) + ) + (stroke + (width 0) + (type default) + ) + (uuid "dff176a0-3300-4c99-a3aa-b92ca49c0d57") + ) + (wire + (pts + (xy 48.26 38.1) (xy 48.26 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e1b4699a-232d-4700-aba8-bcf853a8c971") + ) + (wire + (pts + (xy 40.64 43.18) (xy 48.26 43.18) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3815b90-cda8-45b0-a3aa-01c821e46749") + ) + (wire + (pts + (xy 104.14 127) (xy 104.14 119.38) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e3a1447c-2b80-4a91-b4b2-af48702ad911") + ) + (wire + (pts + (xy 31.75 160.02) (xy 43.18 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e5127b5a-e94b-447a-87b1-b2a72c447fe0") + ) + (wire + (pts + (xy 54.61 160.02) (xy 66.04 160.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e64f4e58-1932-4a27-a689-dcdaff9c453f") + ) + (wire + (pts + (xy 248.92 139.7) (xy 251.46 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e71af07e-24f6-4607-b8b9-257544dfb5aa") + ) + (wire + (pts + (xy 180.34 132.08) (xy 180.34 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e77d66be-6cbf-45a6-a78e-010a8f3bd073") + ) + (wire + (pts + (xy 187.96 101.6) (xy 214.63 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea0d6efe-e41e-4854-a9b2-cc498ecd4559") + ) + (wire + (pts + (xy 147.32 132.08) (xy 147.32 154.94) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ea30c5f2-fdc7-4854-b627-d57935e7ff95") + ) + (wire + (pts + (xy 166.37 60.96) (xy 166.37 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eaa69509-c231-43db-91d5-ea5ac01fffaa") + ) + (wire + (pts + (xy 177.8 41.91) (xy 177.8 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eac2031d-d945-4e04-aa30-8c7367b9c183") + ) + (wire + (pts + (xy 119.38 116.84) (xy 113.03 116.84) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ead3c704-ac61-4b09-aeed-d2cedb6b437a") + ) + (wire + (pts + (xy 262.89 26.67) (xy 262.89 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb6b5e7c-5dd8-4495-9ca9-d2ba986d3001") + ) + (wire + (pts + (xy 40.64 45.72) (xy 50.8 45.72) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec702bef-5889-450c-ac03-61deff6a9d14") + ) + (wire + (pts + (xy 92.71 30.48) (xy 92.71 46.99) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ec8ce5c4-89a5-4ead-8a22-3b3f7c812d40") + ) + (wire + (pts + (xy 187.96 114.3) (xy 203.2 114.3) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f068bd3e-7618-4cb1-b357-1d5c2c6a400c") + ) + (wire + (pts + (xy 248.92 142.24) (xy 251.46 142.24) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f0733082-a5b6-4e44-a8da-8f0ee9b9eecd") + ) + (wire + (pts + (xy 245.11 26.67) (xy 245.11 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f084dd96-f988-42ba-8fa0-09fd926da3c6") + ) + (wire + (pts + (xy 116.84 97.79) (xy 116.84 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f134bcc4-4d57-4cd8-a1b2-4fe2f3604f8a") + ) + (wire + (pts +<<<<<<< HEAD +======= + (xy 241.3 111.76) (xy 237.49 111.76) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f2d50c5d-23ff-4ca6-9c6b-30baf9349883") + ) + (wire + (pts +>>>>>>> hardware-65percent + (xy 222.25 101.6) (xy 231.14 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f37e29b4-3254-4a1b-bcbd-bfdfab2178e0") + ) + (wire + (pts + (xy 187.96 99.06) (xy 214.63 99.06) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f38eaf57-6f2d-42ce-ae55-52b23179a480") + ) + (wire + (pts + (xy 187.96 91.44) (xy 201.93 91.44) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f3de37ac-79a4-432e-8b72-23af07c86468") + ) + (wire + (pts + (xy 52.07 113.03) (xy 35.56 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f562a574-0131-4a70-ba89-1af5498678c1") + ) + (wire + (pts + (xy 177.8 132.08) (xy 177.8 146.05) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f6636cd1-df89-4024-aee5-b014c358fbfb") + ) + (wire + (pts + (xy 52.07 97.79) (xy 52.07 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f664caaa-6156-40cc-a02a-6571d368a215") + ) + (wire + (pts + (xy 187.96 121.92) (xy 203.2 121.92) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f7bbc05e-208b-4916-9dee-edba1d06a38c") + ) + (wire + (pts + (xy 157.48 60.96) (xy 157.48 63.5) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fc79c6ac-2bdc-4340-a428-641e42431876") + ) + (wire + (pts + (xy 177.8 74.93) (xy 177.8 88.9) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fe432645-29fe-4f55-967f-c827e1b1b2b9") + ) + (wire + (pts + (xy 127 97.79) (xy 127 100.33) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fed75f8e-bc0f-4a62-8737-f6f71bb774c6") + ) + (wire + (pts + (xy 257.81 26.67) (xy 257.81 33.02) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffb4802f-20bc-4943-92cd-0bdee9542faf") + ) + (wire + (pts + (xy 105.41 91.44) (xy 105.41 87.63) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ffd7b1eb-f0cb-4e45-bbcc-845c938910c9") + ) +<<<<<<< HEAD +======= + (label "COL13" + (at 165.1 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "0872e688-18d5-464b-b239-05b725809904") + ) +>>>>>>> hardware-65percent + (label "ROW5" + (at 167.64 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "0e3575f6-439b-4d0a-8d66-63ffe5b9a82f") + ) + (label "VDD" + (at 147.32 77.47 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1054b2ed-1342-4dda-a350-724877e8b849") + ) + (label "UART_TX_WEST" + (at 212.09 104.14 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "135e3e86-260c-4123-a29c-12df78031596") + ) + (label "D-" + (at 101.6 38.1 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1491677d-b6de-4782-8f1b-3412b5901f80") + ) +<<<<<<< HEAD +======= + (label "COL2" + (at 203.2 124.46 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "14d9996a-aa1d-461c-947b-ff3f45311543") + ) +>>>>>>> hardware-65percent + (label "UART_TX_NORTH" + (at 49.53 92.71 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "15ab73e8-a151-44d6-9f4e-c93e8cd0680e") + ) + (label "COL7" + (at 247.65 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1a741b36-5f5e-4bd0-ab79-047d4eb60e4c") + ) +<<<<<<< HEAD +======= + (label "COL11" + (at 177.8 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1bb7e52c-8660-41fe-b7b9-24d5679fd926") + ) +>>>>>>> hardware-65percent + (label "COL5" + (at 242.57 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "1fc100fc-abc3-448f-82e1-8234efa092aa") + ) +<<<<<<< HEAD + (label "COL8" + (at 203.2 109.22 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "2120f686-1469-485c-a964-4af544d4c8a0") + ) +======= +>>>>>>> hardware-65percent + (label "UART_TX_SOUTH" + (at 53.34 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "238c0f40-805c-45ef-b9d9-f32048674026") + ) + (label "VSS" + (at 182.88 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "24f3dd47-e1e3-4f7f-8d03-05628870f1ec") + ) +<<<<<<< HEAD +======= + (label "UART_TX_NORTH" + (at 123.19 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2b2b9379-b6f0-4bcf-bddf-b2315719acaf") + ) +>>>>>>> hardware-65percent + (label "Place Near VDD Ports" + (at 41.91 165.1 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2bb4aae6-3cf2-49aa-87c1-180df30a6830") + ) +<<<<<<< HEAD + (label "COL12" + (at 203.2 119.38 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "2dd81f62-0ea1-48ba-94ce-6214aee431b5") + ) +======= +>>>>>>> hardware-65percent + (label "ROW1" + (at 177.8 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "2df47b70-1930-4887-8317-8498f4292996") + ) +<<<<<<< HEAD + (label "COL1" + (at 160.02 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "35cf5703-b237-43e3-8def-1a83fcdd56a2") + ) +======= +>>>>>>> hardware-65percent + (label "NRST" + (at 229.87 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "377aec81-2f9d-439a-8ff8-8351613b5a76") + ) +<<<<<<< HEAD +======= + (label "COL6" + (at 203.2 114.3 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "38b93aeb-c3f7-4775-8c5d-f4fdd328edc5") + ) +>>>>>>> hardware-65percent + (label "SWO" + (at 170.18 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "393fc858-5f6b-4cf3-b96b-54423a182dd6") + ) + (label "VDD" + (at 185.42 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "3bb57688-3b26-4654-b7b3-b2e87452539d") + ) +<<<<<<< HEAD + (label "COL7" + (at 182.88 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "40ac12a5-ccc3-4c63-8eaa-cd830bb4c50c") + ) +======= +>>>>>>> hardware-65percent + (label "VDD" + (at 139.7 73.66 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "41d1ade5-8210-4054-9cb5-676e258ad061") + ) + (label "COL3" +<<<<<<< HEAD + (at 165.1 76.2 270) +======= + (at 203.2 121.92 180) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) +<<<<<<< HEAD + (uuid "450f42af-3bab-4873-883e-859e675ee261") + ) + (label "UART_TX_NORTH" + (at 175.26 63.5 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "4908fc84-621c-47df-aa9c-5c6724d4e267") + ) + (label "ROT_TIMA" + (at 162.56 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "49a74743-1f19-4803-95ce-65fbcfcf3666") +======= + (uuid "4665b37a-1cc0-472f-9aaa-24e2ffcaec18") +>>>>>>> hardware-65percent + ) + (label "COL3" + (at 237.49 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "4aaa85ea-5d17-49e2-919b-b9dd10468d2d") + ) + (label "UART_RX_WEST" + (at 49.53 110.49 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "4f52174a-7166-4096-85f8-c4b3064c9d92") + ) +<<<<<<< HEAD +======= + (label "COL14" + (at 162.56 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "51b3d42b-59cf-4c8b-8004-acd7db548d6b") + ) +>>>>>>> hardware-65percent + (label "VDD" + (at 33.02 152.4 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "52f6274d-9319-425e-9856-6028f0c4375f") + ) +<<<<<<< HEAD + (label "COL6" + (at 180.34 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "55ef1033-52ad-4a4c-abb2-4a87f669e520") + ) +======= +>>>>>>> hardware-65percent + (label "COL4" + (at 240.03 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5631f58f-29f4-432f-9f2e-10f895402ee9") + ) + (label "D-" + (at 231.14 101.6 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5795c40c-5423-450b-aa2a-1bd4abcf5b2c") + ) +<<<<<<< HEAD + (label "COL9" + (at 203.2 111.76 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5972eccf-3778-4255-b912-a7f3aa8a6514") + ) +======= +>>>>>>> hardware-65percent + (label "D+" + (at 231.14 99.06 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5a0b3c86-9793-44d1-a2d8-9600402ced23") + ) +<<<<<<< HEAD + (label "COL4" + (at 167.64 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5a35616b-57aa-45a3-9a4c-738dea73386b") + ) +======= +>>>>>>> hardware-65percent + (label "NRST" + (at 133.35 106.68 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5d2adaf2-8f8b-4999-9547-ccedb6613e09") + ) +<<<<<<< HEAD + (label "COL15" + (at 203.2 127 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "5e32798c-498a-4ed5-abb2-ce1d9bb0940a") + ) +======= +>>>>>>> hardware-65percent + (label "SWO" + (at 229.87 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "5ecab8f8-63a0-4572-9b85-28a525a98633") + ) +<<<<<<< HEAD + (label "UART_RX_SOUTH" + (at 147.32 154.94 90) +======= + (label "UART_RX_NORTH" + (at 147.32 139.7 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6122bc97-e07e-4adf-89b2-180f85ee6966") + ) + (label "UART_RX_SOUTH" + (at 172.72 78.74 90) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) +<<<<<<< HEAD + (uuid "64a8185d-c8c9-437e-aa1e-0840591f81c7") +======= + (uuid "63fc0654-be18-4f2a-a55b-53555edbe2c2") +>>>>>>> hardware-65percent + ) + (label "UART_TX_WEST" + (at 49.53 107.95 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6a08174c-d5da-4dc2-99f0-c0d2873ea18b") + ) + (label "COL10" +<<<<<<< HEAD +======= + (at 180.34 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6a58c484-2ea3-413b-8615-ba2811c350c7") + ) + (label "COL12" + (at 167.64 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6b5fc549-d58c-4de2-b4bb-118b4976d050") + ) + (label "COL10" +>>>>>>> hardware-65percent + (at 255.27 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "6d093d61-7183-48e7-a44b-e7ee317c60ce") + ) + (label "COL1" + (at 232.41 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "7063eed6-7ae8-40d0-a4eb-cf4cdfda5903") + ) + (label "Place near 5v source" + (at 167.64 22.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7399cb9d-35cd-4baa-8fc3-1540e41d498b") + ) + (label "UART_RX_EAST" + (at 53.34 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "76e1a539-de27-4ae8-b7bf-103892a3248f") + ) + (label "D+" + (at 101.6 55.88 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "77a3d361-47a0-4b74-9b05-707429d9cf5a") + ) +<<<<<<< HEAD + (label "COL10" + (at 203.2 114.3 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "77a693a8-cbb0-4a16-9ffa-ff644b1ef66d") + ) +======= +>>>>>>> hardware-65percent + (label "VSS" + (at 149.86 77.47 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "780166be-d300-4885-bbb9-b8b93658a286") + ) +<<<<<<< HEAD + (label "COL11" + (at 203.2 116.84 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "7ca58e08-c365-4691-8526-02e2f709f173") + ) +======= +>>>>>>> hardware-65percent + (label "VSS" + (at 149.86 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7df3f09f-d99f-4825-93d4-dbec7ae2c8e3") + ) + (label "ROW3" + (at 172.72 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "7fb03eb9-c3d7-4180-8af3-ef370fe9a303") + ) + (label "ROW5" + (at 209.55 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8348d23a-0a8c-4a80-a092-2c011e4ecf26") + ) +<<<<<<< HEAD + (label "COL13" + (at 203.2 121.92 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "861b9f69-5164-46d8-ad69-517a598a79a4") + ) +======= +>>>>>>> hardware-65percent + (label "VSS" + (at 201.93 93.98 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "88af95dc-0f61-4228-9028-891eb6470a60") + ) + (label "ROW4" + (at 170.18 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "88fc4392-e3af-49a8-8dc2-8937835963c6") + ) + (label "ROW2" + (at 209.55 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8ad74ae9-1513-46cb-b485-847d17f64d1b") + ) + (label "UART_RX_EAST" + (at 123.19 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8b6ebbc2-aa43-45a0-bce1-078bb08c7e1b") + ) + (label "COL15" + (at 267.97 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "8b857264-1997-4c08-9752-35456e821526") + ) + (label "RGB_DATAIN" + (at 157.48 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8bd4b99c-2cb7-4e42-a63a-d77ead0034b9") + ) +<<<<<<< HEAD + (label "COL2" + (at 162.56 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "8d5ea51c-3018-499a-9feb-77558fc69925") + ) +======= +>>>>>>> hardware-65percent + (label "Place near USB port" + (at 92.71 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "8e2d99a6-9b3e-4901-b824-804d2070fbd2") + ) + (label "COL9" + (at 252.73 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "92086348-c6ef-454f-890c-11a873ceb43a") + ) +<<<<<<< HEAD + (label "COL5" + (at 177.8 74.93 270) +======= + (label "COL4" + (at 203.2 119.38 180) +>>>>>>> hardware-65percent + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) +<<<<<<< HEAD + (uuid "959bf094-985a-4d26-85c6-29f58b765d35") +======= + (uuid "95fa2f23-8b81-47b7-bccb-9760f7b22390") + ) + (label "COL9" + (at 182.88 74.93 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "96ffef80-1b7b-4d2b-a1f7-1b8580e75eed") +>>>>>>> hardware-65percent + ) + (label "Place Near VBAT" + (at 116.84 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "97e91aa4-086a-4858-96f5-c1a15bd6f538") + ) + (label "VDD" + (at 152.4 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "98066d23-6bbb-440b-b346-e60179dceea1") + ) +<<<<<<< HEAD +======= + (label "COL15" + (at 160.02 76.2 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "996c67c9-193a-4c61-9328-9fc555becd3d") + ) + (label "RGB_DATAIN" + (at 237.49 113.03 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "9fa75837-02a6-4f2b-8b4a-bf84097a30c4") + ) + (label "UART_TX_SOUTH" + (at 175.26 78.74 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a21ae7e0-711c-45a6-9e0f-0ffa2e2613b5") + ) +>>>>>>> hardware-65percent + (label "UART_RX_WEST" + (at 212.09 106.68 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "a65b0625-f87d-4d3e-b3ec-fefb39333313") + ) + (label "JTCLK" + (at 229.87 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "a709b3fd-11ff-4d03-b13c-ebedc49d9cef") + ) + (label "UART_RX_NORTH" + (at 49.53 95.25 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "a8b36eb9-36c3-4624-82b4-41d43faf2862") + ) + (label "JTMS" + (at 201.93 96.52 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "acaae2b4-f10d-4976-875a-301fe9e71b70") + ) + (label "UART_TX_EAST" + (at 53.34 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ae8d8e37-f38f-41fe-903a-1eb9be3bd21d") + ) +<<<<<<< HEAD +======= + (label "COL5" + (at 203.2 116.84 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "aecd807f-0dae-4de9-9f2a-7205af2df165") + ) +>>>>>>> hardware-65percent + (label "JTMS" + (at 229.87 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b1459e8f-23e1-418c-abf2-ccad8c3f1fe5") + ) +<<<<<<< HEAD + (label "UART_TX_SOUTH" + (at 123.19 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "b1ac5c45-29f6-49be-86d9-d334cdf2d7b7") + ) +======= +>>>>>>> hardware-65percent + (label "COL6" + (at 245.11 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "b6dc15c4-5294-4338-988f-8c3f870110f4") + ) +<<<<<<< HEAD + (label "COL14" + (at 203.2 124.46 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "bb2ad147-d245-4431-84b9-4648d501513f") + ) +======= +>>>>>>> hardware-65percent + (label "UART_TX_EAST" + (at 123.19 127 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "bf1851e9-b9a8-4880-a7b6-f35f2d00cfd9") + ) + (label "COL11" + (at 257.81 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "bf953326-f2e8-4e46-9ecf-e9fe4295b6b1") + ) +<<<<<<< HEAD +======= + (label "COL8" + (at 203.2 109.22 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c1c2ccbf-4c9e-486b-9a84-3f54fb5a6e01") + ) +>>>>>>> hardware-65percent + (label "COL2" + (at 234.95 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c2a7c331-a5ed-4a85-82c2-491255966a45") + ) + (label "ROW3" + (at 209.55 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "c438aa98-65d2-4007-8f35-dafed4b2a3fe") + ) + (label "COL14" + (at 265.43 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c53d8f3f-c718-483b-bc66-4972501a0ded") + ) + (label "COL12" + (at 260.35 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "c6225080-537c-4d55-b636-d4a13e3f4f1d") + ) + (label "JTCLK" + (at 185.42 73.66 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "d2b99126-8045-457a-9dd5-be1ae59ee2fa") + ) + (label "ROW1" + (at 209.55 48.26 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d312f0f4-cc79-473f-a2ed-836b5642b4a2") + ) +<<<<<<< HEAD +======= + (label "COL1" + (at 203.2 127 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "d4e6b922-25eb-4849-9db9-6f6185ed1afd") + ) +>>>>>>> hardware-65percent + (label "ROW4" + (at 209.55 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "d75df9b0-4438-4569-8d96-9e0ace9bede8") + ) + (label "ROW2" + (at 175.26 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "da058996-2170-4cf5-ab0a-eef5e288bffa") + ) + (label "COL13" + (at 262.89 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "dfbee201-609e-420a-8bd4-bc98bce299e1") + ) +<<<<<<< HEAD +======= + (label "COL7" + (at 203.2 111.76 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "e443e11e-99a4-44c1-9116-18729e86e186") + ) +>>>>>>> hardware-65percent + (label "VDD" + (at 201.93 91.44 180) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "e9b26d3d-3813-4e99-8ea8-af0648067087") + ) +<<<<<<< HEAD + (label "ROT_SW" + (at 154.94 147.32 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ecce62bc-b4cc-48bb-a6e3-988ce1c4f4c4") + ) +======= +>>>>>>> hardware-65percent + (label "UART_RX_SOUTH" + (at 53.34 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "ef17a05a-3c4b-4a77-a598-a5f8ad4599a9") + ) +<<<<<<< HEAD + (label "UART_RX_NORTH" + (at 172.72 63.5 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "f0af64ee-d378-41f3-842f-24d5ad4f75d3") + ) +======= +>>>>>>> hardware-65percent + (label "COL8" + (at 250.19 26.67 270) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "f325fd11-511d-4af8-8e04-8af1e81ceee5") + ) +<<<<<<< HEAD + (label "ROT_TIMB" + (at 160.02 151.13 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "fe355360-6bef-43f4-a60d-7c9f0aed2700") + ) +======= +>>>>>>> hardware-65percent + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 149.86 144.145 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "12142d74-3d2e-4713-9447-228a4a59b31b") + (property "Reference" "#PWR013" + (at 149.86 150.495 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 149.86 149.225 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 149.86 144.145 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 149.86 144.145 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 149.86 144.145 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "79c1e8f8-ac62-4d68-b7d9-4530a76b20fd") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR013") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 73.66 107.95 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "16dff95b-3e36-4af3-b88b-15fb8adc8e2f") + (property "Reference" "East1" + (at 79.248 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn_01x04" + (at 76.2 110.4899 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 73.66 100.965 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 73.66 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 73.66 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 70.485 122.555 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 71.12 117.348 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 71.12 118.872 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "41d3d594-2c33-4367-8359-1b31ee9d9e0e") + ) + (pin "2" + (uuid "b9ea89f1-323d-4571-9eb6-093ad77c06ee") + ) + (pin "3" + (uuid "551282d5-5991-4cb6-b066-7718563ef0bf") + ) + (pin "4" + (uuid "2460e906-92ce-496f-b65b-e5783cab0360") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "East1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 66.04 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "260e3606-a354-4351-a844-1997c309f36f") + (property "Reference" "C6" + (at 60.325 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 60.325 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 67.0052 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 66.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 66.04 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "b88bb4b7-8467-4e01-b0d2-7fbfcd272840") + ) + (pin "1" + (uuid "fba68482-11cf-418d-b65a-ad61b36feb9f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 52.07 118.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "28aaff08-a29a-4a24-ac7d-db733f758a5e") + (property "Reference" "#PWR028" + (at 52.07 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 52.07 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 52.07 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 52.07 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 52.07 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "88c2da29-dedb-4ce3-af23-c19dae3a8d2a") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR028") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 109.22 76.2 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "2c77678b-8e1f-43de-9ae0-b5fb80b5d1ac") + (property "Reference" "#PWR02" + (at 109.22 82.55 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 109.22 81.28 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 109.22 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 109.22 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 109.22 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "bded81a6-5439-4584-9cec-c42bf66caf54") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "stm32f446ret6:STM32F446RET6") + (at 144.78 88.9 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "31831253-77ba-4c6e-9363-32c75e9e329b") + (property "Reference" "U1" + (at 193.04 85.0198 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 193.04 87.5598 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "footprints:LQFP64-10x10mm" + (at 144.78 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 144.78 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 144.78 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "28" + (uuid "0886e1c2-3ce9-47e5-86c6-0f285bd776e5") + ) + (pin "56" + (uuid "20a27dd1-d910-4162-aef4-d2e08693b946") + ) + (pin "47" + (uuid "d09717ee-1aed-46b0-8158-7b026c0ada04") + ) + (pin "14" + (uuid "84b0538f-607e-4d0d-9fa8-926b1ea240ff") + ) + (pin "31" + (uuid "8b45ff39-69a8-45b5-97b2-6463c65a3696") + ) + (pin "64" + (uuid "1bce4abd-3e9b-4533-aac9-cffa72738c1b") + ) + (pin "35" + (uuid "235492d7-f22e-4ea4-9887-1910533d3793") + ) + (pin "39" + (uuid "07655dc7-4bde-40e4-ac89-69b63ed018e3") + ) + (pin "41" + (uuid "32984301-ee58-4d34-966d-88daef772143") + ) + (pin "37" + (uuid "edff6ede-75da-4306-8a75-c200cfd6eaa0") + ) + (pin "17" + (uuid "920831fe-461b-4699-95f5-6c4134d14979") + ) + (pin "61" + (uuid "79c24d0f-576f-41eb-9c74-eb83570833f1") + ) + (pin "44" + (uuid "c5256497-ef95-41c1-a6dc-8f776448042f") + ) + (pin "42" + (uuid "b23a8609-fd55-48ad-b6ff-aa70929a2e71") + ) + (pin "58" + (uuid "0ec6a147-5c7e-4392-b48a-52ad9cc58e1d") + ) + (pin "3" + (uuid "3455f583-b715-48f2-8fd1-67ab90b6ee5f") + ) + (pin "4" + (uuid "1cd82aee-006f-40c1-90c6-f6b046ff3b6b") + ) + (pin "6" + (uuid "ebe87469-e99d-4253-b7fb-c316a3aeefd6") + ) + (pin "33" + (uuid "5604e812-811d-4f56-b6ed-13e9c98ca811") + ) + (pin "52" + (uuid "63989350-b9f7-4686-837e-0632988867bc") + ) + (pin "16" + (uuid "0f03b811-92cd-4b3a-98ad-434e0517d0b3") + ) + (pin "19" + (uuid "862ecf73-59e8-476e-9b1e-18ccd0373e59") + ) + (pin "15" + (uuid "d7d7a630-c872-4a7a-a052-78958e4b3d4c") + ) + (pin "27" + (uuid "f23bcd51-6fbd-4172-a344-de5618516543") + ) + (pin "45" + (uuid "cc8d190b-da82-4e03-829b-61cb952ddb35") + ) + (pin "54" + (uuid "45419dc1-1846-4b15-8085-60318c5d52cd") + ) + (pin "5" + (uuid "7d3a1d78-2e56-4aba-9ad9-1dfb2935ff3e") + ) + (pin "22" + (uuid "30ba65c9-4009-4f0c-aa96-58e9a7a3e053") + ) + (pin "32" + (uuid "a632e59d-ae7f-4350-bebe-0123c4c0ad17") + ) + (pin "29" + (uuid "6358c15a-584d-4013-96fe-c8960f71f2e8") + ) + (pin "49" + (uuid "5fe23252-a936-43e2-80e8-0d9cc4e3e8c7") + ) + (pin "36" + (uuid "723f0728-a816-4106-8cc8-79a115e06323") + ) + (pin "10" + (uuid "30883165-5d7c-43cd-900c-d10b897a1ab2") + ) + (pin "21" + (uuid "a96c1813-17b5-4c46-8379-d84aa746bc90") + ) + (pin "50" + (uuid "51f78068-852f-4ddb-8f3c-e7a1091068e2") + ) + (pin "43" + (uuid "cfafc677-c626-44be-b44a-62426b0dc726") + ) + (pin "25" + (uuid "40e15d3d-c577-4ee1-8dbc-0d26075063d0") + ) + (pin "18" + (uuid "6df42964-3fdc-4b5b-9d9e-bf61c067f092") + ) + (pin "63" + (uuid "5c191ece-be23-4144-ac2d-a6848f98342e") + ) + (pin "57" + (uuid "764d79ea-2d55-4ba4-b1db-9401b46e1d85") + ) + (pin "55" + (uuid "23a866ab-8709-4969-b18f-fe0613aed4e5") + ) + (pin "60" + (uuid "7d012868-a716-412a-83f1-067b33448789") + ) + (pin "59" + (uuid "d46f9490-ec55-496c-962e-bd35bb040115") + ) + (pin "38" + (uuid "a7851fa2-bc79-4c50-acd6-02fe8d86fa5b") + ) + (pin "51" + (uuid "7a65ae2d-583b-410c-b973-ba1f6df9e160") + ) + (pin "26" + (uuid "3d4cb577-6d99-4470-b559-2dd622aac9ba") + ) + (pin "53" + (uuid "f56c7708-5f27-46fd-bc0b-e03968931698") + ) + (pin "46" + (uuid "5f2def18-53df-4421-b01f-456d9a467ea9") + ) + (pin "2" + (uuid "78577e45-40a6-49c2-ac0c-7dcf40cb21cd") + ) + (pin "12" + (uuid "27389f66-ca3b-43bd-b08f-191429db1f5b") + ) + (pin "7" + (uuid "a90ee11e-33d7-4788-9692-030d14bdf9cd") + ) + (pin "62" + (uuid "1ad8762d-34b5-4230-8437-34eda152d3bd") + ) + (pin "30" + (uuid "517a2950-a2ac-4d9e-9b6d-3267103ba3f4") + ) + (pin "40" + (uuid "890d5658-68c2-4050-ba25-0c99b39796cc") + ) + (pin "24" + (uuid "d53edb8c-64c4-4ad2-b2e8-f4b87eb7a13d") + ) + (pin "20" + (uuid "b61b658c-d66f-4ff1-855b-1a7eb150bbe0") + ) + (pin "23" + (uuid "96acca93-1232-452a-b115-1199bc7ea978") + ) + (pin "48" + (uuid "4a02a6e1-a599-4925-8fbc-e7615cbf40a6") + ) + (pin "1" + (uuid "8d16c66f-66e1-4192-8c34-f73f2720c510") + ) + (pin "11" + (uuid "acd903a3-4cbb-4eab-90ca-7be92d2a28f8") + ) + (pin "34" + (uuid "49d3cc52-c998-46b8-964f-ec515615073a") + ) + (pin "8" + (uuid "28a83762-9718-4da2-aaeb-d6d1942e8bee") + ) + (pin "9" + (uuid "0b6f30a8-4e8e-4409-82ef-00e7e36942e7") + ) + (pin "13" + (uuid "918ec7cf-b2b8-472a-bab3-6d9bae41f892") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 190.5 38.1 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "35f94759-1894-4596-badb-3697130513d4") + (property "Reference" "C8" + (at 195.326 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10uF" + (at 195.326 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 189.5348 34.29 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 190.5 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 190.5 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "50e79932-a377-4ca0-bcf1-45b87e94efc9") + ) + (pin "1" + (uuid "d398b287-c408-45b3-9888-e8ce471e6e8f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 116.84 172.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "362e8ab3-80aa-4833-9980-401806e826a4") + (property "Reference" "#PWR024" + (at 116.84 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "AGND" + (at 116.84 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 116.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 116.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 116.84 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "6d353520-d3c5-4dc1-8dbf-e569cd3072ae") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR024") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 30.48 95.25 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "38beb260-5ceb-4b19-afa7-0dbaab81122b") + (property "Reference" "North1" + (at 22.098 92.202 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 22.098 94.742 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 30.48 102.235 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 30.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 30.48 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 33.655 80.645 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 33.02 85.852 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 33.02 84.328 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "d38dffee-7776-49d0-9698-44ef3d3ba56a") + ) + (pin "2" + (uuid "293e4a08-e99f-4d35-a342-3d56e0ad1321") + ) + (pin "3" + (uuid "7029ed19-77dd-46f6-ae92-4a94d57fd405") + ) + (pin "4" + (uuid "b427cede-7495-4e46-95bf-b517dd7e73d6") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "North1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_SL_Devices:Push_Button") + (at 119.38 111.76 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3cd8ba19-3dca-4432-8dd9-49896aa80d3e") + (property "Reference" "SW2" + (at 123.19 110.4899 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Push_Button" + (at 123.19 113.0299 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_marbastlib-various:SW_SPST_SKQG_WithStem" + (at 116.205 111.633 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 119.38 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Common 6mmx6mm Push Button" + (at 119.38 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f1a272e7-4e0d-4b33-a06c-45468a5183c5") + ) + (pin "2" + (uuid "11cefee7-7380-400c-8503-c20b77cd8203") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "SW2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 127 93.98 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "3cf6d79a-8b3d-4cf7-a145-285fd4bdd59f") + (property "Reference" "C1" + (at 132.08 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "20pF" + (at 132.08 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 126.0348 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 127 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 127 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fe9b3cee-e1f9-414c-8848-237d3bdce510") + ) + (pin "1" + (uuid "80ae2b43-5592-4ef5-8d35-e6280ff59a46") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Diode:D_Generic") + (at 72.39 30.48 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "3e4adb9d-795b-4ed4-9421-13dd684d8460") + (property "Reference" "D2" + (at 72.39 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "BAT60JFILM" + (at 72.39 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Diode_SMD_AKL:D_SOD-323" + (at 72.39 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 72.39 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Diode" + (at 72.39 30.48 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "801a8524-a976-429e-8e91-b4b4fea7e2cd") + ) + (pin "2" + (uuid "dbdbdea8-a82f-43e6-9632-f47e89bda55f") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "D2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Device_AKL:Ferrite_Bead") + (at 119.38 125.73 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "419d9c4f-4ab7-4264-9f26-8a0424a1c835") + (property "Reference" "FB1" + (at 119.38 131.572 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Ferrite_Bead" + (at 119.38 134.112 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Fuse_AKL:Fuse_0805_2012Metric_Pad1.15x1.40mm_BigPads" + (at 122.682 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 125.73 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Ferrite bead, Alternate KiCAD Library" + (at 119.38 125.73 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "71ba895c-6490-4903-b2e6-9070ebf6016d") + ) + (pin "2" + (uuid "ab18a28b-d1b5-4a66-a49f-04fd403c2bb8") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "FB1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 43.18 63.5 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "472bce0d-3313-47ec-8030-87884d514fd8") + (property "Reference" "#PWR03" + (at 43.18 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 43.18 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 43.18 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 43.18 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 43.18 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "190831c2-f4ad-44fd-b601-308694111fa4") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 196.85 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4be478fe-4108-4302-9a42-ffdb13f89941") + (property "Reference" "#PWR010" + (at 196.85 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 196.85 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 196.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 196.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 196.85 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1cce0eb6-bcc5-46d4-b03a-61ad7dd38625") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR010") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 49.53 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "55fe11de-2a05-4ff1-bc3a-63c075a9f29d") + (property "Reference" "R1" + (at 52.07 53.3399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "5.1k" + (at 52.07 55.8799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 49.53 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 49.53 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 49.53 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fcf19629-2d07-41cc-8961-b8b6f113a170") + ) + (pin "1" + (uuid "71fb46c3-1dd1-40b0-be6f-1e3a2a516edc") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 139.7 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5c57828a-36bc-4da4-bfd6-d3d5666e7619") + (property "Reference" "R7" + (at 240.03 138.43 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 240.03 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 233.68 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 139.7 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "fddf0490-81fa-47e8-b311-7bd1c5bd7568") + ) + (pin "1" + (uuid "9b9baa3f-95fc-4efc-b148-efc0f2d587a1") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 43.18 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "5d7500da-bd2b-4c6a-9047-3e2d6a3165ca") + (property "Reference" "C4" + (at 37.465 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 37.465 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 44.1452 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 43.18 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "db413f08-6778-4d6e-8c37-2d8f0ae6e0eb") + ) + (pin "1" + (uuid "3253ccbb-4b82-4fb1-b57c-20f27bea2695") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 180.34 149.86 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "68cc06c9-d019-47d1-bae7-2856c48d1f53") + (property "Reference" "C9" + (at 185.166 148.59 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "4.7uF" + (at 185.166 151.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 179.3748 146.05 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 180.34 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 180.34 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "14ed719e-0199-4560-899e-26a8b5f90b3c") + ) + (pin "1" + (uuid "fcc00765-336f-471e-bd85-81a28ac8c9c4") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 31.75 149.86 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "6ab32cb3-2df6-4ff9-a513-85667e0ccc25") + (property "Reference" "#PWR04" + (at 31.75 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 31.75 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 31.75 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 31.75 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c9fbff55-8bfc-4e14-a511-caa78e56c9e3") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 54.61 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6ac435e0-7961-4dbe-9c30-dbf9204a8e02") + (property "Reference" "C5" + (at 48.895 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 48.895 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 55.5752 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 54.61 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 54.61 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "aeb57fe7-abcc-4bef-a163-85f815f24fdb") + ) + (pin "1" + (uuid "b3d84c90-5579-43bf-a217-ed033748ed83") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 116.84 93.98 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6bbda6bc-f811-45ca-81a4-9ccc00f06fab") + (property "Reference" "C2" + (at 111.6965 95.5675 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "20pF" + (at 111.6965 93.0275 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 115.8748 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 116.84 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 116.84 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "05be0e56-3163-4446-a5c2-631c895f5066") + ) + (pin "1" + (uuid "27962fae-02aa-4a42-9af1-0aa90d750a38") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GNDA") + (at 104.14 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "6eb9f6f2-1815-4dc0-9f82-2e8e6261fe57") + (property "Reference" "#PWR016" + (at 104.14 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "AGND" + (at 101.854 131.572 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 104.14 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 104.14 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "(analog) ground power-flag symbol" + (at 104.14 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "48137a00-e2b8-4ca6-a52c-fb6939565ae0") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR016") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 105.41 91.44 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "73155beb-873a-4b21-9ec3-d28d94562dcc") + (property "Reference" "#PWR05" + (at 105.41 97.79 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 105.41 96.52 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 105.41 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 105.41 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 105.41 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e4e5a564-f2c2-4e3b-b232-7a1559422a56") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 92.71 29.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7518ced7-be4e-49d5-920d-9ae3234447d4") + (property "Reference" "#PWR015" + (at 92.71 33.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 92.71 24.13 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 92.71 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 92.71 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 92.71 29.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "9faabb2c-473a-4f88-b5e1-439a05f0c392") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR015") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Regulator:LD1117-3.3V-SOT223") + (at 177.8 35.56 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "780e4915-82a4-4658-81f3-960aa1d9fc82") + (property "Reference" "IC1" + (at 177.8 26.67 0) + (effects + (font + (size 1.143 1.143) + ) + ) + ) + (property "Value" "LD1117-3.3V-SOT223" + (at 177.8 29.21 0) + (effects + (font + (size 1.143 1.143) + ) + ) + ) + (property "Footprint" "PCM_4ms_Package_SOT:SOT223" + (at 177.8 28.575 0) + (effects + (font + (size 0.508 0.508) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.mouser.com/datasheet/2/389/cd00000544-1795431.pdf" + (at 177.8 34.29 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "3.3V Voltage Regulator, SOT-223-3, Imax=0.8A, VinMax=15V, Vdrop=1V" + (at 177.8 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Manufacturer" "STMicroelectronics" + (at 177.8 45.085 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "LD1117S33CTR" + (at 177.8 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "3" + (uuid "d044b8da-f579-430a-9657-f3f038538a7b") + ) + (pin "2" + (uuid "16ad427b-cb27-4545-9cc3-8033a32817ba") + ) + (pin "1" + (uuid "d41a2627-4fe9-4d1e-a9b3-47c762eac2b6") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "IC1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 218.44 99.06 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7cafd78e-827b-4512-9029-08dc37727121") + (property "Reference" "R4" + (at 218.44 92.71 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 218.44 95.25 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 207.01 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 218.44 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 218.44 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "e4eb200f-2ca3-456f-937c-8b45571e4b5b") + ) + (pin "1" + (uuid "ed5c6058-ddbc-4020-9a26-741d7bbe10ba") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 142.24 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "7efd55f9-94bc-4e0f-acd8-78533ca71252") + (property "Reference" "R8" + (at 250.19 140.97 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 250.19 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 256.54 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 142.24 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d5ef4ec7-b7be-43c2-bc23-5aa94f1c4be8") + ) + (pin "1" + (uuid "43b4bfd6-e642-41dd-bda6-169be25de336") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R8") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 134.62 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "870bee74-1b94-44bc-97d7-e29667be0724") + (property "Reference" "R6" + (at 240.03 133.35 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 240.03 135.89 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 233.68 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 134.62 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "bf050548-5846-4278-93f6-31257dca583a") + ) + (pin "1" + (uuid "149b9b0f-213e-4e91-a664-426d638a1e7f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R6") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 180.34 153.67 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "89eaf3be-6a53-4d52-875d-0e85769bf269") + (property "Reference" "#PWR011" + (at 180.34 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 180.34 158.75 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 180.34 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 180.34 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 180.34 153.67 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "abe82d7c-d4b6-48fe-bf15-9070a3c2d7cd") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 31.75 156.21 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8b2a8a82-737e-4e1c-b010-75e324eaa549") + (property "Reference" "C3" + (at 26.035 155.067 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100nF" + (at 26.035 157.607 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 32.7152 160.02 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 31.75 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 31.75 156.21 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d8926d9e-5d64-4c07-b6b0-35e4f57fcfa6") + ) + (pin "1" + (uuid "f175dcfe-b8d2-4502-bfc9-d7f18c809352") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_SL_Devices:Crystal_8MHz") + (at 121.92 100.33 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "8f6ee047-3b69-4415-a3d3-f3f35ce3c89b") + (property "Reference" "Y1" + (at 123.19 96.52 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "8MHz" + (at 120.65 96.52 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Crystal_AKL:Crystal_HC52-U_Vertical" + (at 121.92 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 121.92 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "8Mz Crystal" + (at 121.92 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "af9c1162-fb38-42a3-a395-46614193d10a") + ) + (pin "1" + (uuid "823ef913-9ee3-4774-92d2-46dd24c44b3b") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "Y1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 31.75 163.83 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "90bad0bd-de9f-44f0-87ad-a563bae0150b") + (property "Reference" "#PWR012" + (at 31.75 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 31.75 168.91 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 31.75 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 31.75 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 31.75 163.83 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "00b9aaf5-3e0f-47a6-a021-e46ee028ed4d") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR012") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 124.46 73.66 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "94a0fdd0-56a6-4942-8589-01a86c805627") + (property "Reference" "C10" + (at 124.46 66.802 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1uF" + (at 124.46 69.342 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 120.65 74.6252 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 124.46 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 124.46 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "3b5dde54-3bc5-4edc-86c7-1c727e8a77b9") + ) + (pin "1" + (uuid "e7e9a3f3-48b1-4d42-b0fe-a065c5886e52") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 73.66 92.71 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9676fbe1-cd81-4f09-9a64-1e08ed9b6d67") + (property "Reference" "South1" + (at 81.788 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 81.788 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 73.66 85.725 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 73.66 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 73.66 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 70.485 107.315 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 71.12 102.108 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 71.12 103.632 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "16ac9726-ccc1-410d-afbd-9bd5e6a9f31a") + ) + (pin "2" + (uuid "c6ddf6e6-ab14-4c9c-8fbf-e193a984b2ff") + ) + (pin "3" + (uuid "c739ac0b-2320-49e6-b465-0e5ea1e2a08e") + ) + (pin "4" + (uuid "7f3eac63-89fc-4252-a8da-30ee8e024666") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "South1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 177.8 45.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "99dee30c-837e-40d2-bd1f-9b659acdfebe") + (property "Reference" "#PWR06" + (at 177.8 52.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 177.8 49.784 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 177.8 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 177.8 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 177.8 45.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cf037296-f441-414f-81c6-67ed41e4c8e7") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 218.44 101.6 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9a64bac4-da04-48a9-9702-7209f655d06c") + (property "Reference" "R3" + (at 218.44 107.95 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 218.44 105.41 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 229.87 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 218.44 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 218.44 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5f16db44-08ec-478a-9923-725cc54747da") + ) + (pin "1" + (uuid "34ffee46-b723-49a0-8a33-221097200bec") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 245.11 144.78 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "9c5f0493-d680-4847-8e64-3696158e4f7e") + (property "Reference" "R9" + (at 240.03 143.51 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "22" + (at 240.03 146.05 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 233.68 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 245.11 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 245.11 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "d6ec1b2f-dd19-47dd-b03f-ff465346c392") + ) + (pin "1" + (uuid "fab710de-11b3-4ebf-9a23-5a94ae533382") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R9") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 165.1 38.1 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "acdb7e2a-dbdd-410b-b924-7a3e541f44dd") + (property "Reference" "C7" + (at 160.528 36.83 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "1uF" + (at 160.528 39.37 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 166.0652 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 165.1 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 165.1 38.1 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "890c133e-55f2-4c59-adbf-185ae549f7ce") + ) + (pin "1" + (uuid "3bf7b668-3d45-4cb8-b876-3ab4b41e0515") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C7") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x06") + (at 256.54 137.16 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b0e5479b-55c8-4df5-bbc5-a0d68647dbd2") + (property "Reference" "J1" + (at 259.08 137.1599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Conn_01x06" + (at 259.08 139.6999 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Horizontal" + (at 256.54 154.94 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 256.54 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 256.54 137.16 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x6 MALE PINS 0.100” 180deg" + (at 254.635 153.035 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 254 149.86 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0601FBV0T" + (at 254.635 151.765 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "6" + (uuid "16dc203b-069a-4275-940e-9947482a9079") + ) + (pin "1" + (uuid "8816f601-baf3-4d75-b27c-1e9d6655cbfb") + ) + (pin "3" + (uuid "d0d1033b-d596-445a-9ce2-aed8b4c72d36") + ) + (pin "4" + (uuid "ac497e7a-422f-41f2-8705-75924a98375f") + ) + (pin "5" + (uuid "69100a82-de14-4456-b0f0-7036b3b5d7d2") + ) + (pin "2" + (uuid "a307c3c5-6163-4f29-b7bd-0b11191e34dc") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 50.8 85.09 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3581a19-1bf1-4bc5-a70d-1256ab664927") + (property "Reference" "#PWR025" + (at 50.8 88.9 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 53.594 83.566 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 50.8 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 50.8 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 50.8 85.09 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8d84c140-161f-4806-a798-000c2e6dab39") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR025") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 106.68 172.72 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b3793324-87be-425d-8b78-63f999e9e56c") + (property "Reference" "#PWR023" + (at 106.68 179.07 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 106.68 177.8 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 106.68 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 106.68 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 106.68 172.72 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ab7ed32e-61e0-4c98-a559-e8869e0819e1") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR023") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 96.52 118.11 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "b3d40ac4-8daa-4a7a-ba11-9a68212fd759") + (property "Reference" "#PWR020" + (at 96.52 124.46 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 96.52 123.19 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 96.52 118.11 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "1c7ff4c0-7e81-4773-ab3b-110402d7ecd6") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR020") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 134.62 68.58 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b64cbf88-e11a-40de-8ab0-7220c5c7fbca") + (property "Reference" "#PWR01" + (at 134.62 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 134.62 63.5 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 134.62 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 134.62 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 134.62 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "86679c50-090c-4490-98c1-13e5ab52111c") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 157.48 67.31 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "bb837909-857a-4e99-a0d4-4f703a793296") + (property "Reference" "R5" + (at 160.782 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "10k" + (at 160.782 68.58 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 157.48 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 157.48 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 157.48 67.31 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "7800df85-1edc-4e8c-ae00-81f05b8e4846") + ) + (pin "1" + (uuid "3251e7d5-7480-4e46-b027-2dc5836d003f") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R5") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Diode_TVS_AKL:PRTR5V0U2X") + (at 85.09 46.99 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "c7c4756e-a5bf-4567-914d-57c2ffef1bc4") + (property "Reference" "D1" + (at 73.152 40.64 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "PRTR5V0U2X" + (at 73.152 43.18 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Package_TO_SOT_SMD_AKL:SOT-143_Handsoldering" + (at 85.09 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.tme.eu/Document/4eac14af69261014af6cc93b35742953/PRTR5V0U2X-DTE.pdf" + (at 85.09 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SOT-143 TVS Diode Array, 2 protected lines, 5.5V, Alternate KiCAD Library" + (at 85.09 46.99 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "3" + (uuid "f4720144-6b17-45aa-86f9-ca35e1cb249a") + ) + (pin "1" + (uuid "1f1c0af4-6af1-4d46-bee1-39921bbafaf7") + ) + (pin "2" + (uuid "90a651c4-1ad8-4254-8474-15751d8c631f") + ) + (pin "4" + (uuid "0e04a63c-87ca-4ac2-8b68-bd2b902da0de") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "D1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 97.79 99.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cc3b6256-79cc-467a-97e2-a1b19b2cda65") + (property "Reference" "#PWR026" + (at 97.79 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 97.79 93.98 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 97.79 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 97.79 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 97.79 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "8b6dc700-9910-4678-afb7-e64e0acb11ca") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR026") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Type-C:HRO-TYPE-C-31-M-12") + (at 38.1 41.91 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d9f634d1-10e6-4463-addc-35893eef8711") + (property "Reference" "USB1" + (at 32.385 21.59 0) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Value" "HRO-TYPE-C-31-M-12" + (at 32.385 24.13 0) + (effects + (font + (size 1.524 1.524) + ) + ) + ) + (property "Footprint" "Type-C.pretty-master:HRO-TYPE-C-31-M-12-HandSoldering" + (at 38.1 41.91 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 38.1 41.91 0) + (effects + (font + (size 1.524 1.524) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 38.1 41.91 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "4" + (uuid "cb6fdf46-aed8-4f4c-b0b8-d59c5c47a690") + ) + (pin "12" + (uuid "9ab22500-0278-44ca-be4b-cfcde50b4c10") + ) + (pin "11" + (uuid "1ddb208b-ff35-4fdc-a423-08f0d07e4d4f") + ) + (pin "5" + (uuid "45070fb5-7ae4-4e55-962d-e8f7a816022e") + ) + (pin "6" + (uuid "f9b15b03-aebe-4bbf-a656-737d04c44c44") + ) + (pin "7" + (uuid "8105c7ce-6a71-4fdc-ad8e-c8943559273f") + ) + (pin "13" + (uuid "d31068a2-7ab4-4e2f-92cf-2c0e41587bff") + ) + (pin "1" + (uuid "0bc1628c-ef7e-4201-a614-715dd7151af8") + ) + (pin "9" + (uuid "16aa9b4c-1d3d-4e03-b05a-b19d79aca7f6") + ) + (pin "3" + (uuid "1e1919e6-4c07-45bc-ad3e-7fcc3ae2b078") + ) + (pin "10" + (uuid "1c6a228e-7ec2-49b5-b234-f8cb25dff46d") + ) + (pin "2" + (uuid "ba738f09-f626-4537-967f-a12f11e05a7f") + ) + (pin "8" + (uuid "47b09ed0-4006-4392-bcd8-fd822205b25a") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "USB1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 97.79 102.87 0) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "db62a6df-f2f1-4431-8846-a6dc2b8040af") + (property "Reference" "R13" + (at 94.488 104.14 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "DNP" + (at 94.488 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 97.79 91.44 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 97.79 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 97.79 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "5ffde405-0bb6-4a06-b2c6-b114a825513c") + ) + (pin "1" + (uuid "86bae480-65c4-460d-ab18-a43e63bcf238") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R13") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+5V") + (at 158.75 31.75 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "de717130-e998-438a-80ee-9ae716f8d2df") + (property "Reference" "#PWR09" + (at 158.75 35.56 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 158.75 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 158.75 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 158.75 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 158.75 31.75 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "3f1e4e34-c45b-4012-b5a0-fd9e0181a98c") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR09") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 113.03 127 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "df7ed3bb-ae6e-4571-8afe-1bd0f71e85bf") + (property "Reference" "#PWR017" + (at 113.03 130.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 113.03 121.92 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 113.03 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 113.03 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 113.03 127 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "36a14cc6-3e21-486e-b788-7df0ffb63868") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR017") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 58.42 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e43ed88a-0b7c-4dfb-9632-55636cb7c7cb") + (property "Reference" "R2" + (at 60.96 53.3399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "5.1k" + (at 60.96 55.8799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 58.42 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 58.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 58.42 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a75d4186-2398-45c6-9021-f79cdb32bdbc") + ) + (pin "1" + (uuid "19f83cd3-137c-4cf7-8991-eb66f0853871") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:+3.3V") + (at 248.92 129.54 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e53a289c-fcd3-4010-a8f4-1587afe30e6a") + (property "Reference" "#PWR021" + (at 248.92 133.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+3.3V" + (at 248.666 125.222 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 248.92 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 248.92 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 248.92 129.54 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c4296122-bd07-44ef-979b-b8f472157841") + ) + (instances + (project "" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR021") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 223.52 138.43 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e9887ddd-2719-45c4-b084-f7d71da24077") + (property "Reference" "#PWR022" + (at 223.52 144.78 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 223.52 143.51 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 223.52 138.43 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5d5e6813-9500-433f-83e3-acca888f9615") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR022") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Connector:Conn_01x04") + (at 30.48 110.49 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "e9c07dcf-7c62-4e0f-b7d8-bffddad87ab1") + (property "Reference" "West1" + (at 22.098 108.204 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x04" + (at 22.098 110.744 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" + (at 30.48 117.475 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 30.48 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 30.48 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Specifications" "HEADER 1x4 MALE PINS 0.100” 180deg" + (at 33.655 95.885 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Manufacturer" "TAD" + (at 33.02 101.092 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Part Number" "1-0401FBV0T" + (at 33.02 99.568 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (pin "1" + (uuid "848dfe91-0857-4e62-aac3-6b94d711f6e2") + ) + (pin "2" + (uuid "34dc7aca-b4bf-44da-b02b-e8f3a8489680") + ) + (pin "3" + (uuid "fdb3db6d-c9e9-48f5-b5c4-e922a76f4f49") + ) + (pin "4" + (uuid "182cf852-4b6b-4595-8d02-8aa2c537f154") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "West1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Resistor_AKL:R_0805") + (at 111.76 170.18 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f01e28d6-c99b-4363-922d-8d4ade2b1113") + (property "Reference" "R10" + (at 111.76 165.354 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "DNP" + (at 111.76 167.894 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Resistor_SMD_AKL:R_0805_2012Metric" + (at 100.33 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 111.76 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 Chip Resistor, European Symbol, Alternate KiCad Library" + (at 111.76 170.18 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "782ea787-286f-48cd-b5c3-6b5419f9ad4a") + ) + (pin "1" + (uuid "2e0b1b3b-28dd-4cbb-93c6-d6f53b7deddf") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "R10") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 166.37 66.04 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f17691c8-a58d-43cc-8568-d3c380e99aec") + (property "Reference" "#PWR018" + (at 166.37 72.39 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 166.37 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 166.37 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 166.37 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 166.37 66.04 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "56fa1d5e-524b-4bb4-98c4-4f7148dfbe80") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR018") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_Capacitor_AKL:C_0805") + (at 113.03 111.76 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "f4ed843a-a837-4644-ab1e-a88bfeb2df84") + (property "Reference" "C11" + (at 107.8865 113.3475 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "0.1uF" + (at 107.8865 110.8075 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "PCM_Capacitor_SMD_AKL:C_0805_2012Metric" + (at 112.0648 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 113.03 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "SMD 0805 MLCC capacitor, Alternate KiCad Library" + (at 113.03 111.76 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "a5ae1a77-6e8a-4b9d-a41b-d17e701eae3c") + ) + (pin "1" + (uuid "f065c7e0-fa66-403e-b068-3b78e2cff007") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "C11") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "PCM_4ms_Power-symbol:GND") + (at 73.66 49.53 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "fcc5ab1a-6ac6-4919-9b1d-bc252ff46237") + (property "Reference" "#PWR07" + (at 73.66 55.88 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 73.66 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 73.66 49.53 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "737b5bff-d8ae-4490-8d3b-eb90fc8b91f6") + ) + (instances + (project "numpad" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (sheet +<<<<<<< HEAD +======= + (at 241.3 93.98) + (size 36.83 20.32) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (stroke + (width 0.1524) + (type solid) + ) + (fill + (color 0 0 0 0.0000) + ) + (uuid "0330dd45-2776-4667-9e47-eb2dbca2bb32") + (property "Sheetname" "RGB Lights" + (at 241.3 93.2684 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + ) + (property "Sheetfile" "untitled.kicad_sch" + (at 241.3 114.8846 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (pin "RGB IN" input + (at 241.3 111.76 180) + (uuid "2bc0b118-22f4-44df-9631-a4ce548bbecf") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (page "3") + ) + ) + ) + ) + (sheet +>>>>>>> hardware-65percent + (at 217.17 33.02) + (size 55.88 34.925) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (stroke + (width 0.1524) + (type solid) + ) + (fill + (color 0 0 0 0.0000) + ) + (uuid "1d905906-6e74-4741-8b2e-53dc470a7c79") + (property "Sheetname" "Keymatrix" + (at 275.336 46.482 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + ) + (property "Sheetfile" "matrixrot.kicad_sch" + (at 217.17 68.5296 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left top) + ) + ) + (pin "COL1" input + (at 232.41 33.02 90) + (uuid "43e65bc9-a87d-4907-a419-26aca47522e6") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL2" input + (at 234.95 33.02 90) + (uuid "ee114d14-efda-4c23-a2fd-ad5c20443e65") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL3" input + (at 237.49 33.02 90) + (uuid "551c4509-840b-4242-8621-1b2679f44448") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL4" input + (at 240.03 33.02 90) + (uuid "8b9952dd-5533-4690-b0bc-2691dd1c23fb") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL5" input + (at 242.57 33.02 90) + (uuid "17d4b3cb-22ca-41b4-a7e2-227c92ebd451") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "ROW1" input + (at 217.17 48.26 180) + (uuid "5ac2431a-3860-4059-9ee8-6e033207b38f") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW2" input + (at 217.17 50.8 180) + (uuid "e119ba03-23bd-4f7f-b5dd-87b77128ed6e") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW3" input + (at 217.17 53.34 180) + (uuid "5c4cef97-81c9-4b1a-ab1b-58e213523943") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW4" input + (at 217.17 55.88 180) + (uuid "76a350b9-d4d1-4670-9452-164177e7325e") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "ROW5" input + (at 217.17 58.42 180) + (uuid "9c7cae5f-cbf2-4929-8a9f-2c1833828cc3") + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (pin "COL6" input + (at 245.11 33.02 90) + (uuid "e170e806-bf9d-4d28-94ec-af53935ce42a") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL7" input + (at 247.65 33.02 90) + (uuid "ce5339ca-1cd3-47bf-a8bd-40d1a8be3217") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL8" input + (at 250.19 33.02 90) + (uuid "aa5c787e-ea8e-4471-a48b-477b8665d0f9") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL9" input + (at 252.73 33.02 90) + (uuid "a1c7cd6c-9b58-4235-a987-a51e74e5b035") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL10" input + (at 255.27 33.02 90) + (uuid "2a3e96c4-a93c-4b28-8df7-014f6d2967a2") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL11" input + (at 257.81 33.02 90) + (uuid "5654bb0d-18cf-4321-a1de-6b0da32f992a") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL12" input + (at 260.35 33.02 90) + (uuid "265fd086-de26-4c7d-b10c-11aa8edeab5d") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL13" input + (at 262.89 33.02 90) + (uuid "7c01ef2a-f19e-4692-889a-24c89e336099") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL14" input + (at 265.43 33.02 90) + (uuid "7abc8f10-f8ea-4be5-bc41-59b74adfd401") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (pin "COL15" input + (at 267.97 33.02 90) + (uuid "e35bf945-cb45-49ec-bd0f-2d20e78818d9") + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (instances + (project "68percent" + (path "/a3d0d559-cac8-4859-ad0f-79ad0c1a1a82" + (page "2") + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/hardware/68percent/bom/ibom.html b/hardware/68percent/bom/ibom.html index b35a2adf..8141e3d7 100644 --- a/hardware/68percent/bom/ibom.html +++ b/hardware/68percent/bom/ibom.html @@ -972,7 +972,7 @@ var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, /////////////////////////////////////////////// /////////////////////////////////////////////// -var pcbdata = JSON.parse(LZString.decompressFromBase64("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")) +var pcbdata = JSON.parse(LZString.decompressFromBase64("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Okw2YCl4DOn0ulXOkYc4tOm1Ontl56HF9iEUuk50kN7Qv6EMukMx5Euk64m9TjVFxFewvOlFYphbEmulWulgGkxY4munAoDDdYU7g2MlnsSXiHItAnXiGx6pSQKDZgunqWmaumgukUYB+unyKYfOlAukIunbqnMukuukoulyuknOnduzP/GeOmLuHeOmv/HN2nw/Gt2nmpDkppAeCj2mHOpmWAC2Ii2z2Bo19EC2Kd2kLOrZukZukkMBKwmJOk/F6gyD8XA5mlB1SD8GFhQgpFBDBbiHBngWVFKehak6AvhyOFOxyckp/L50njlWkNum1ukZKR/VH9xaCmH35EnjpOxzBcSr8GSnBkWm2epTiE+ziUVEtumViHDunALg/LGtuk/5GLumpODLunknTZbCXy5gpi/3aTFZ1JFhpgcZZDwlNbFLumNunzABtFpbunxFEViw45EwlydFGsqAvSk1THbun8GDNKqqcFCOjzFHNHFzsEvukrFGCpjFHyIiFgpiwCFPul/VE1um3YlR9jopG4nx8WmFFET5Y2VGAekQCEQek/unwSHTyKS7HHumNFEIxyq7TnumfFHrBjtulzumVFHoelcQyoelYelivTscG9umvYn4emQWlrumfFEMeAd2G4ekU4kwemoxyNcaCTYadLeVEvBKN4l1lyXCE1Ogblw/7wGcGEekS4l1rBjsFQeniCGru5bRGsel0enEemG1EGHRMelAdCRsEceo2uljuAoZb3ulwekf1LTsgW1FsekkcZkWmYenG4koVy1riIelqen8emIiGIaiu4mojQientXB6ekyek0elSekEOCFsHiVpgemJq6SWkbaChDYp4ngxalCEiiYJ4ncekQpE3umU0EkiFjumu4nSfDi1GtJRqenf0gnCEmZTaKmC4neoI2VEx7gbPYFq4UelZ+BB2GauB+eleWkHywZ/ZIqxLsEpahUMn00GkVG8emrLwgSGUelGemFsFJemsykR/YuRKwem/FHmFw4emqekh4l8FFiVFpelhGTblEVekTultCGBmwu/ak6wa0wIrFIlEZ2TtumrmEtWn12nWB6O4J21F9Ak7t7e1G9Wl6ynD+Bm3DDTHdMnIODe1HiiHjWkEBCwb4rTH0lEv5KnTFrWl8lEc+TTenaFCiiGGxH9TFEam+uC20EbQC7TELTb5JK7WmBylQeArelLWlC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62Vx7nboU62nY1QpCs61hhGU627q0TMnRaLlrI3uKtkG3q3tq16KAza0Nq1jcG063NkE5DqC62GkEA63jeD0kGza2l6m54VYHZcKB8eDRLFWUGa5lsCXBXV3nEeU49tZa60vkHU5DaxrgLHTahwxY10SIUnxbxCXG043KPK2e7KUF1TFzzqwUmFcQW60KxqIUkffwYRkxcye2CuLElckFE2NtbLe5PQkfRbrx6IUmVU34sX/a6zuHvaRWIA/FYty3mqhDe4sUER633FEKRrkvk516an6fQkLg2GUGbgiftYO1IBqGnFYh0D6gnze4lck88BD0igUm+60dsDagg+60uUEGmAjjCT5w563lXFfuGf8LO62ECzKsXl63PzEsUEQl5ZHBDe6+UHILod4i2e6kaEfMWFngQuE7K3AsUQdAZOz9kEO60ssXcmJa7GnBklaFrFZa+pJ62h638UHBAbt5x9WGl61jQCG619vGF624Va6635Ei560QXDFjKhBEiUEShDRiB2iVD60rzH0VbGiXBLHBXF7lbb62d63zckYVZudZ6tJt61u61upx662DkFz60V63J62vuGiB4K8it60tvnWHrM3gfzEsUEEjQt62P61TFYAjRKaQfzG+UHp7pt6SX60JzH3sXSEjpLE263QG0EUiH63NcnPHkCnKkwm762J7o9619vGGvnjsWy4wl62JalkeGm60r62L63v62PDGV603U1keEpch/0G+5AKUn8g6lgDu61UG398SCeH763q7Cf62ag52lTRURR62kUFyVCt0zGWFD+KDkH5iwgG0sG2SeGj60lvGGLJQG0wV4AG0h6rdckqtlT63yuFjGUhg7CG07WH0uzxeED619qkfZA4aFKeHcG0QBHD60hg7PwGZBEZ61l3kQHTT60u625gWan4iG0z62JgXbQkjpTEe5+9mqg5Z60OvHmUkKg6mG1xvGFzEGG0UYioBETQk6G18eA+im8G3+eHkkQQvC8UEsUHiG3NGE0lK/kE/FaIK5WG2AG2SeFMG3YLHx614PwSG1PdY7kHx4bsG3j60iPXISk4G1x62cG3hG3MG1qG3f5TXkHrOAQG0ZG2GUHZSbdlwBG2cG1Xl7JG2rMyTaHqLqGG3OG1OXGzLot+ydWEQUEWeGnzI760T62PCHvIjW61n61GY0RG2iG1/kF0JKlZCCG1n1H78CIUk+G1nkGXgSfAgcG1FG35G3+G2361f63rsqD61C1Jd61+/mx7qdG1SG11sgrG05G1yUGShkCG3p63WaH1/koG0pG1TFaOPLQIIe61V61KLrDG2YG25639G1SECoG1tG2WG3ZG30oVEzGFRm6gIQBFa855G3rx5GG1oG2qY09G3mG1nkEv07e4EL614G2WzpD0i5wVNG3Am1JiQbQkOG1PbEtG2rkHUG1PbF2G3uG1VG3zl4elyFG2fkFuORO4Gom1TFYYdAwG2rkEeG09zqJJrWvF/aJckl4QELG1mTy5zE9zoYG3Ee5gm13cwHG3xmxAm3Ym0IG2kG32gWIREYm0qqwT63Im3RpyHG1/G0Im2kwn6G1PqQvG2IG1MeEVcwSGg61JKG1nkF8HrGWF961/G0wm2LG1X63fG0PG0N2yEUEF8Qom2v61Ym3om3T62jG3WUEg8jj96zG0YUHTG2iuHm62QUF8OaqG2SG0gE0km0mm2bagzzHWUF+G0iUnaG07zo4m27G1PG0sm2fG1E5B8kn6m2/62cG0HAS38STG2vuFxfjPkIem2GUF+m0VG0JG1qm0UG3wwkOOxg6EF5Aym0sCZ4XFGUEoUHgLFOKajV7aRF/Jx7BkuG1OHkPgC4m1VG0TqodG2Ym2uUFeG3suEsUFlqBn5SZm2lzHec2xjK1G3esWRwAOm1km01XFT5CaG3WG2wuVhV5MJjgLHGG3yUE10QaBGqm3BUH1m2AG0OUG0G1mG2am3NEB5dqlG0vkGlV4XG3TvFyG0bn47G30XIjm1Jx4LG2qm3rBF2zg5m2dm227Yym3Tm3CDZz7YEm0Bm3fBHum3Dm3bm1MG39m33kGJXZZ63hm0+G22zHGm0QuGam2yXaUm2Ym22zH/G0QuGutQTzEj6jfkHplBc2r0hHB62pWFszjv1aIV5WNWOm3GjbTo78Ulbm1Do7vm2AW3DpWq60Fm2kUH/m2kUlrm1yqF+A3Sw2Uu5+UHJUHYMDVhAqzByLA5UHzwUhq0k84IW1oW0TTDdeGnzyDeCIcS11Bej6HxE3zDIW3izCoW0kW2EW15a3EW2gMC9JB+tBbSn4W3oW1xi7UW2EsC0W1jlDMW0ShD3mBOVDAb6Ka4fVUiu7l073kkfRb+I4qlbO+pPkHNIKYDjheGeoKzglnsSYDh5G3OoQmUGA55owhnkEmRC0DZExCM2B6DboSk8UliW2sEBnkFyW2el5aW0i+5cQWxiWS17iW1VGFaUHGW2sEB5G18Hp6W2TKYGW3gm09tbmW22W0cm3yeHSW3aW3WUGk7TJGFX9XkzWUklKUlQl5tG7ntVam1HiyfQlFmBdYBwUE/60fRbp4QRAChW3F63U5Dd8x/kEJ/U/m2qnB80CQUH1qoWUEMUAa7i4UHL615TG+9JnkH+62+W02W0qlbCm03636W3Bg4AQlzkHKGEuW22W1UsA7CUOW0qlZem0f61VTF7fiQUGu6LvkHhcY2iCQUEUG1BW3S76RW3WUGpkipW0U/wfIC6UGBW15W2A/V/kFVW0JW3/MINVw9W0+W15THMcyjFb86Fp63yQJZwBNW0IUl5W1CW2QUG/upauHFW2QUHl60yl6LW3lFzWUEe2DHkHhpx1PBum19m2Yl5MvTdzBSkmZW2XRBVZglW0SRGR62LzDZW1XzFlW11TGFnCjW0Oslj62DpSnSDtE1lUE+LxQtKsrD/zV/W3DEj9eD/zUEDK2Dj/VYBl674SlxEg23VUEVMjQ21apgNUHgcA/RHQRhjG4bUCwNEA20NUFo22pvgw23Wa5I21zCEI23nUFhARmWp1UEriomLXeuZ9JGk201W6MBCQJGsrCZmE1nhweEY23Wa5pyZjREE23f5GP3SbIi022k+627jiBHbVYQN63qT6CCyDA4iFF/TPnkQ226HneBBtEV1UGWbqfCH57jy2STB5Rl6sbCRJEPLAyLXavD/W07WKEl5kwzfUEPVajME6wwoBFnVYvCHU228UQeDCda6dbahi2S22wnCPJE6229LQRlAELWJqXrCGy9RwxFJHiq236RhM225ApZrA421s20beQR8D1BUCY1lzhDCEo20wFHIgQWcGs22kQ78UDvUH+JhbLVSBk823B208Q5NDRm2104hEF771LY22U21hdaTITAXnyRz5MFxrRDCHR22Z213UH+21X551dRTCFq214FFmlYc21F22kDZX4AnWUk23O202dYl22dlF522/4Ao5HqhCBdYitS623Z23TRjFJHZ23+RA9UFN20alw0/hTRHhPHH14alyV22C22syFD22y20ata6Hm9233EBPB6EiGSSk9UGv/qmeFXtTFJHGjR5a5m9R2227PzF2115yqcGp1wXVy0SnpCHNJgvCEN21+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oD2zjTqGLZ2++3LZ29hyTWzetXBg5l5xm7wl+0QCIDW2b85UMhYbnbjBn2AzW73WJJ+0WPLrZ27Z10zlrZ0GW03Z1p+0oQhLZ23tFqjZbZ2h+2zp0v0F3Z0gNVNp3b0FPZ3XZ3fp2sOl/Z33Z3gHaU8FxfixRaHW5JZ2rZ1n2KC8lb61Mpk8MCP+3S8EojD68Hk6r5PBCtVI50b+39uAj+3S8EwDYY50BiQBkVM8nT+0FpCcSDk8HLfpCOkEK0sRZ/p2sOlfZ33p2fZ1XZ2F+2wZ35KIY51o0CNx0M52cznyWDbZ21W7c4Yt+2oLwEZ18J20DYG9591Q08Gc8BcbkC53Xhjv+2UhWlIVsBHF43/+U2Wg6Cnd424PbAiZu41q42wCExLjN41ro0pFFttmX40il6hljKGxu43q50McBBtla52j8EG52bBHz40T3YRkh/gnF41P8EUsgznkc409xkalxFtl252H9F2uBFegpyG84284nXtT38GD40LFG+MC5Une53Q4kjyHFPLGl7w4mK53FPIgDkLFF6fRzpz7i6/CER51RognyHXkmgB2tfxNoma42IpEB527BF640CqW69K5UnU43zMFLehDwBd40sskf3b0NS/8GfqAHxkLFHOxSCCnkqgvCELFGu8SfyHOgbBB0u50WoUkJJUiHl50rtlb43253F52ACGGsm26F5523olqJJv8E/OikhHy51pdyn8GR43R8niCHAW6/yHD53tfmk1n+50JnGrBH151hekG2HSBHS52q4k8AhU40j42auCT50843gGj251yLxbyHZnFqHmF4mC1n+51yTCC1l943a/aT51o422Y0Z4l6nDp52F53RFFPqSB52r51V+yoUHt41xxkK1lB52PpxEOychH+50ev798F/52sTJ+50oUkB/Y2fiUhGdJToiHeiTP52QbqopFQF3353K51RxnjtnYdyp51Q1XZ52yEjm4l7AEp8FG40Hulw4gl52140LjZTjyvyFn40B/Youq3kFJsbV50e/7n51/vhhentkJs1lE+QmB1FizrtmWsn252EF1150YUk9524F1d53o41odKMhHD514Br3539l75Z16A74CFNoW4KEb27ICGwKHVoVogDWB4SF3kiliF2WFArTzhKhZ7HNoXsh35/at2xtoWSr6ZpydoUIh3LM5loUWSHdMlKCFDoWT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cCO51q10qTlQHqfyHu52H/GVUkO10hTntyJ4D1UD1IFa+10gF2yoqh52y40/17KyFx50N41K43AaVs1in4nsUUBl4iD3J53w13JaWCD2B13oF17O779xFyHx12tzYbFGY10P50aTmsJB4F2AeaFc4XLC0125l4zvlzFCU13511D4mk130F28zamD2V52750byHZFFGD0sY2H/F5F3YD3PdxwhHd40SD0813sF3DDZfNw612V9m3MBsoXS509dA+tmL51ec7AUor53wD2YcTNtl941+WCG52H51QxE791HF2sD3IDmf51hD3sQqZD0JD3ZD3610W5GSij3522Y079kpdxCD1ro14JBhtlED1iAk3wGa13CD2EnC3BnwD3j0VYF2ND1EUBFyGcD2M36e115Tj0LFtEZCD3SD31F4QSRqD3K50DtBfJqUhHKD31F58D1u40ZY1e9Zfar98HaD3enUv0BcF0350kgqu51u434Y0kgoZUmrD0kY3YgpUF3WD1vYhUF210YS9bRrJkF1l13enWfZCU11uD1fHBJ13ID0W4ARD3XD09D1qD2CF3hGULR2oKGu0nKF3yF2D9avD2x7E911VSBr11nF6fD2j13UKB0nBKF36IkqF3Ax2oKEkDQaF2/c411mz11kV1SY5iKFT122tAt1nT1mwj0Mc7wj1kCHj1mMDlsKECinGF0VwDj129WDyKHe0lH110O2H1mtIDH1ms8B4j3kqDUtyX12SVDX11dMBuax310wx0P10/D1P10XqUU1KA0nXF3g4oWsiUG1f10NLnxoVbBJNF2VN0bF0QKBAN13Zy8j1EhkKN2cj2jF0YeIvWYBD2FU7sj06wqHZ1+Nw+tll8YSV3KyFt50cj0/sDyj00N0GW2aj3cj3EN06j1xbVpF36j3Bg6kty5updF2sN0ZooeoX8j2SO356H61kSj2mj3BEksN1eO09dBtUkSN3ZTnK4D98GCN2WzalLgl51ej3uj2jrhn1z2j3XTnr1TWj1yO0tTmf51uj0vgqvqA6Ckcj1727Kj1aN3053SQpztnKN0S9YqCAg0kSj1QG4p8FmN2GPXZD0Q0nvF2fx2CO7xj32N3jV0Yp48FDCqF8LVLKFTrrpph11WETJeKGOzAjzIb4HpMV1j06CLzSwVj1C7HkekrLWtRTO3nJFxFMGmfg/KEpbG/jgWfET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r2Gnxuuv8/Fh+XY4ucEsDRGirK+yNIEtwi7S0rJyN2ut4xEweqmut54vqj6lZO/v214tTiyG9z/P0SuvFusNYuwus872Guusuuepnsuvhuv/0H66RX4u8uuTilYhmQutGi5AqkQuv94t9yxCuu+OsnC7vJbBElDPHeLF9yze4rautpuuWtTJYv6utWpkjyMUutZuuRutGutZuv5OsEYsLusnOt4Y02RkX6DVutW4so4sM8GOuvH4sa/EJutruu9Kz7uskusa/FscQr/GU4uGqz/cQr/FXYsBVyXuuFutGi4mKwluv4FDOus1pkFuuZuvr0HAAipuu6/Hcuvf7G5LlNJCYQpW4mk4uGTDTutD4nWusoqlKuu34QBTmgespuuJOuEusD4kousNXLLOsxJbPyNHOsa/HvxB24uVuvfgPBuvzjxb/HPusHmjMyFrOJfRGtpknyPhjwKuuUevt4uAEgGRkkevZyPi4tBHEEeumusCuvfus+t1vOuYesT4uBuuoevAv3seseuvCusseuwesr4sSusiesb4s0euCeuouuoo58etUt27uvcevH4tXRFSetvOtdAMSKOgusR/HZus+YucuuaMM5uu/uvbR5NusaDyFLmCQOkevB6F3uuqevmf14EuFHBp/HhOtAEsQetIUDzC7qEogeuuwRMet6esddpyyNKEtL/GH0SOetF/H0FyVfRoEv2uubmxquvQevb/NVMtBetmuuFHBL/EdusnuviWzNsq7ouBuuBesouu8Es5kFC0h2Ov1cX0utxuudcWtuvSuuVIB4pVQeseeu+JB5etJetWp5MetvOvFeu/v2aEuvI5IeuletSeuZuvix5Hry0EsY4t1euXOtKEsANGjOvhusQNF5eshusvk1xYYGEsiRnoOPs4nPUivA4FBWrLlm4uua6S2oTLnxTyQLG8NmudWpevDevwCHqetk1YpOsAevTevd8FKEvK2tyWCpoklEuFEu1lCbetlVDREvwGtvWC7evZEvbeu6WCXBCR5BhEvgGsd8nJ0Jw4A0SrhEteWBHeuEnBBEt5a33ixuRkqOB3etyWBnev//H7euOj7XevpEsnevI+ABRmPevjAsUGttlPj1GPPyq/H+kuTtlwRmQ+veWCfhnbEutEuvQNrGx5919EtZus7Cqc/2dEtYo5C9WB/Ew+smrmgCHCku+cW4+vD/0K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77v0LDMF5rvoidx7OQ7t9ofACnSr1EDb2SPOr0Kr1TJv2r3JkMrJvWr0EjF0ifar0qW3FyPGr3RcAJHvmLZoNJFMGEptqCkyahbofgtu0iBsicGYcMcZmH1NJvyr1zIti7uIzqQhAXofer2D+ac5SR4dOCkfFDtwM+Zuhr2ob2Miea4Skodlpuxr23j3RSOJjpSictpupr1AgtyieZr0iT1GieBr3XFHtSMFr2xbHqZslr3nbHsicVr1h7k+ps1r3Uz3oYceiddqmCictr3JT2mJtOifoyMJr29r1NSNOr1/yECT33Jt+CkmifWieTr2oauUpuzr14ovroeLr2JicsHvXDHZb3DJvVr27Z48T0uidiidkyMsichievSMnr30ibYUPG61Xtppr2OicQb3OieKpsgb0+ie/psAb0/Itcicfr1vz1eidNidlz2+if1icSoPxid973XJt2r2VifoyNhieXr0noeMOHFicEoOXocob16idOHsYb0RiedazH6Ootr/T3sid21ThT2OicCb1tieKptbfGeie/pvl+L+idcicsb2GUN6Ju7id4/MYtV6Ylz70fIPons8b21idJYda2ErieaYcLr2Gb3TT0A4eUEN6b0Bicyb2e0MJJtzie9T0Z4ekmUKb0fid6Hsab0Iz3sZuPiehz0hG0Gb2b73eG1Kr2mb0/IsipsHifmyNsIcVGHzidrieOb0/ic+Zso8eQb3qZvXnGa73YZsoSfOidQSeIScKm3gHvBb13T0mptyWLDXB5ZtuqGTb0wSdFb0vd7jpuTifJb0ficp4dKlpV72mJvpb0gz1eie0ScKm25Jszb3/id0iekuB+PSqidWENjb1TJt1b0NiesyN/loQ73uiedb05JvMb3gapuidTYftbPF7287sESfCSeUpujb13z2hJt9Fq8ScFpucSctT1MScLb1ppsDb0rb2yHvrb1R2JPifiHudZpyCoF7uIwm470sSdyifVWIpz3E4dqduE726HsaSSh71WSeGHv3b0Bb0USd8H1PidQScpxCBz1ESffb1zpuiZtc72ESc7Hvg72eie/idC70XiceHvBSfCScxJvw72rie/G1iH1+SemSfGSdAScpSeY73XpvcamU72RHvNr22SdKz0X4emH12SesSfZSdKYdSR3mSeZJtGH2ZHts70s71oScBSeiYcmanc73iSd872sKPMb3NSd1KPcb0U5qESdJifxSfoZsxr1Hcpy72YScxH1B4duqHm73p4fzm0GpoYSdoSc671yKPK72Z14DHsJ4cDH3Zb2iuHRSf8XGq72fif3EM270ASf271rz3AScaanO732ZsJ71r71He1ESde711Ydxb1R70SZs0SeJ71zpv7HvPENS73MZvWUkpxqqSdMScZyZ/z1oSfXSc8G1vQkMNKbSdoScZ70GpsrNIaSeopu5R0CRg+idQSfqfwXicOZscfMxz1oSdl70HSc172K73KJsN1KNSdQSft71TkMrJvN72GicZKNd70bidZSPYyegyfISdD71ontim2uerP6la4eT71HSdtKN4wlcKDSH2JZtNXqHr1v4eFqGb70Myer71r3w/4crJs771E2GYm2c9tH72YEdOL08yeuKCUEdmgcbEDX70VZvtZtv/YPLGQEdR5m23u8ye89siyegEfGsckuDSyekEd8yfsPYcntYEdhcFKycs5B1Zs/72VeGzZthsfUEcm9s9PokV7LZsAkCz6k2nuwhCz6kvZt4H0eocKW3xH2iLT2bHhW2kH3sdtUGnmyfo5l3qGuyf0H0eGGi5s/WIIqFWyd5Sf5nsdH3+ydWGHeyec8AMieC5v52JNH3A5toP1JSfhjZI3qQ5svu48rkGEcBH0NqFAgsmEdKH1OqPGqNqH2JyeJW3r+X9Sc/qEOEe6H0RycRiem5upSeiqPOqOFSfAlHBEcPwZ1H1hE3OXT673aidVyerSdOSnhEcDH30ycc5u5RN2pqpyfxEfHVy5H1sif+EfZrmRyeNyczzka/ktyeRamuGn0MMdyeSQZuifREcPMvrHkGcKifNDodJVAFhZ8Sc4nlVfMD4c/Ec3fOLycZmr7fOcYea06UfO8idSnn7yeE7vM04/jQiicanntguhJurydpfN/odLycCfOHofQlULyfmG3JRmTKo3ofAZFgknjbS5SO94fAkllgvdYffyfqfP34c6rpFfO5pvc07bNv44fflY5Sk7ydi4eoTZgkmxfOXyfvydyfMjYcbkGwKcyYdpLqUZQam0DikFLox/NwpuQFACGwFJuuflIklZAvroc4Kew/O6YeoKeQ/Pg4dIKfNfMtpuQFD7fLgLEYyOQFCgKfAKdsGGnYZ0YdF+PJJDJAuCieQFCREGsYf4KfplB5AsLodsGFryfy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")) /////////////////////////////////////////////// /////////////////////////////////////////////// diff --git a/hardware/68percent/~_autosave-rgb.kicad_sch.lck b/hardware/68percent/~_autosave-rgb.kicad_sch.lck new file mode 100644 index 00000000..cf7e3025 --- /dev/null +++ b/hardware/68percent/~_autosave-rgb.kicad_sch.lck @@ -0,0 +1 @@ +{"hostname":"framework16","username":"ukim"} \ No newline at end of file diff --git a/hardware/numpad/numpad/~numpad.kicad_pcb.lck b/hardware/numpad/numpad/~numpad.kicad_pcb.lck new file mode 100644 index 00000000..cf7e3025 --- /dev/null +++ b/hardware/numpad/numpad/~numpad.kicad_pcb.lck @@ -0,0 +1 @@ +{"hostname":"framework16","username":"ukim"} \ No newline at end of file